InglesPransesEspanyol

Ad


OnWorks favicon

mipsel-linux-gnu-g++-5 - Online sa Cloud

Patakbuhin ang mipsel-linux-gnu-g++-5 sa OnWorks na libreng hosting provider sa Ubuntu Online, Fedora Online, Windows online emulator o MAC OS online emulator

Ito ang command na mipsel-linux-gnu-g++-5 na maaaring patakbuhin sa OnWorks na libreng hosting provider gamit ang isa sa aming maramihang libreng online na workstation gaya ng Ubuntu Online, Fedora Online, Windows online emulator o MAC OS online emulator

PROGRAMA:

NAME


gcc - GNU project C at C++ compiler

SINOPSIS


gcc [-c|-S|-E] [-std=pamantayan]
[-g] [-pg] [-Oantas]
[-Wbalaan...] [-Wpedantic]
[-Idir...] [-Ldir...]
[-Dmacro[=defn]...] [-Umacro]
[-fopsyon...] [-mmachine-opsyon...]
[-o outfile] [@file] infile...

Ang mga pinakakapaki-pakinabang na opsyon lamang ang nakalista dito; tingnan sa ibaba para sa natitira. g ++ tumatanggap
karamihan sa parehong mga pagpipilian bilang gcc.

DESCRIPTION


Kapag nag-invoke ka ng GCC, karaniwan itong nagsasagawa ng preprocessing, compilation, assembly at linking.
Ang "pangkalahatang mga opsyon" ay nagbibigay-daan sa iyo na ihinto ang prosesong ito sa isang intermediate na yugto. Para sa
halimbawa, ang -c sinasabi ng opsyon na huwag patakbuhin ang linker. Pagkatapos ang output ay binubuo ng object
mga file na output ng assembler.

Ang iba pang mga opsyon ay ipinapasa sa isang yugto ng pagproseso. Kinokontrol ng ilang mga opsyon ang
preprocessor at iba pa ang compiler mismo. Ngunit ang iba pang mga opsyon ay kumokontrol sa assembler at
linker; karamihan sa mga ito ay hindi nakadokumento dito, dahil bihira mong gamitin ang alinman sa mga ito.

Karamihan sa mga opsyon sa command-line na magagamit mo sa GCC ay kapaki-pakinabang para sa mga C program; kailan
Ang isang opsyon ay kapaki-pakinabang lamang sa ibang wika (karaniwan ay C++), ang paliwanag ay nagsasabi nito
tahasan. Kung ang paglalarawan para sa isang partikular na opsyon ay hindi nagbabanggit ng pinagmulan
wika, maaari mong gamitin ang opsyong iyon sa lahat ng sinusuportahang wika.

Ang gcc tumatanggap ang program ng mga opsyon at mga pangalan ng file bilang mga operand. Maraming mga opsyon ang may multi-
mga pangalan ng titik; samakatuwid maramihang mga pagpipilian sa solong titik ay maaaring hindi mapangkat: -dv ay lubos na
Iba sa -d -v.

Maaari mong paghaluin ang mga pagpipilian at iba pang mga argumento. Para sa karamihan, ang order na iyong ginagamit ay hindi
bagay. Ang order ay mahalaga kapag gumamit ka ng ilang mga opsyon ng parehong uri; halimbawa, kung
tukuyin mo -L higit sa isang beses, ang mga direktoryo ay hinahanap sa pagkakasunud-sunod na tinukoy. Gayundin,
ang paglalagay ng -l makabuluhan ang pagpipilian.

Maraming mga pagpipilian ang may mahabang pangalan na nagsisimula sa -f o may -W---Halimbawa,
-fmove-loop-invariants, -Wformat at iba pa. Karamihan sa mga ito ay may parehong positibo at negatibo
mga form; ang negatibong anyo ng -ffoo is -fno-foo. Ang manwal na ito ay nagdodokumento lamang ng isa sa mga ito
dalawang form, alinman ang hindi default.

Opsyon


Opsyon Buod
Narito ang isang buod ng lahat ng mga opsyon, na nakapangkat ayon sa uri. Ang mga paliwanag ay nasa mga sumusunod
seksyon.

Pangkalahatang Options
-c -S -E -o file -walang-canonical-prefix -pipe -pass-exit-codes -x wika -v
-### - Tumulong[=klase[, ...]] --target-tulong --bersyon -pambalot @file -fplugin=file
-fplugin-arg-pangalan=arg -fdump-ada-spec[-payat] -fada-spec-parent=yunit
-fdump-go-spec=file

C Wika Options
-ansi -std=pamantayan -fgnu89-inline -aux-info filename
-fallow-parameterless-variadic-functions -fno-asm -fno-buitin -fno-built-tungkulin
-fhosted -pagkakasundo -fopenacc -fopenmp -fopenmp-simd -fms-extension
-fplan9-extension -trigraphs -tradisyonal -tradisyonal-cpp -fallow-single-precision
-fcond-mismatch -flax-vector-conversions -fsigned-bitfields -fsigned-char
-funsigned-bitfields -funsigned-char

C + + Wika Options
-fabi-bersyon=n -fno-access-control -fcheck-bago -fconstexpr-depth=n
-ffriend-injection -fno-elide-constructors -fno-enforce-eh-specs -para sa saklaw
-fno-para sa saklaw -fno-gnu-mga keyword -fno-implicit-templates
-fno-implicit-inline-templates -fno-implement-inlines -fms-extension
-fno-nonansi-builtins -fnothrow-opt -fno-operator-pangalan -fno-optional-diags
-mapagpasensya -fno-pretty-templates -frepo -fno-rtti -fsized-deallocation -fstats
-ftemplate-backtrace-limit=n -ftemplate-depth=n -fno-threadsafe-statics
-fuse-cxa-atexit -fno-mahina -nostdinc++ -fvisibility-inlines-hidden
-fvtable-verify=[std|preinit|wala] -fvtv-bilang -fvtv-debug -fvisibility-ms-compat
-fext-numeric-literal -Wabi=n -Wabi-tag -Wconversion-null -Wctor-dtor-privacy
-Wdelete-non-virtual-dtor -Wliteral-panlapi -Wnarrowing -Wnoexcept -Wnon-virtual-dtor
-Wreorder -Weffc++ -Wstrict-null-sentinel -Wno-non-template-friend -Wold-style-cast
-Woverloaded-virtual -Wno-pmf-conversions -Wsign-promo

Layunin-C at Layunin-C++ Wika Options
-fconstant-string-class=pangalan ng klase -fgnu-runtime -fnext-runtime -fno-nil-receiver
-fobjc-abi-version=n -fobjc-call-cxx-cdtors -fobjc-direct-dispatch -fobjc-exceptions
-fobjc-gc -fobjc-nilcheck -fobjc-std=objc1 -fno-local-ivars
-fivar-visibility=[publiko|protektado|pribado|pakete] -freplace-objc-classes
-fzero-link -gen-decls -Wassign-intercept -Wno-protocol -Wselector
-Wstrict-selector-match -Wundeclared-selector

Wika Malaya Options
-fmessage-haba=n -fdiagnostics-show-location=[minsan|bawat linya]
-fdiagnostics-color=[kotse|hindi kailanman|palagi] -fno-diagnostics-show-option
-fno-diagnostics-show-caret

babala Options
-fsyntax-lamang -fmax-errors=n -Wpedantic -pedantic-errors -w -Wextra -Pader
-Waddress -Waggregate-return -Waggressive-loop-optimizations -Warray-bounds
-Warray-bounds=n -Wbool-kumpara -Wno-mga katangian -Wno-builtin-macro-redefined
-Wc90-c99-compat -Wc99-c11-compat -Wc++-compat -Wc++11-compat -Wc++14-compat
-Wcast-align -Wcast-qual -Wchar-subscripts -Wclobbered -Wcomment
-Wconditionally-suportado -Wconversion -Wcoverage-mismatch -Wdate-oras
-Wdelete-hindi kumpleto -Wno-cpp -Wno-deprecated -Wno-deprecated-declarations
-Wno-designated-init -Wdisabled-optimization -Wno-discarded-qualifiers
-Wno-discarded-array-qualifiers -Wno-div-by-zero -Wdouble-promosyon -Wempty-body
-Wenum-kumpara -Wno-endif-label -Werror -Werror=* -Wfatal-mga pagkakamali -Wfloat-pantay
-Wformat -Wformat=2 -Wno-format-contains-nul -Wno-format-extra-args
-Wformat-hindi literal -Wformat-seguridad -Wformat-signedness -Wformat-y2k
-Wframe-mas malaki-kaysa=Len -Wno-free-nonheap-object -Wjump-misses-init
-Wignored-qualifiers -Wincompatible-pointer-types -Wimplicit
-Wimplicit-function-declaration -Wimplicit-int -Winit-sarili -Winline
-Wno-int-conversion -Wno-int-to-pointer-cast -Wno-invalid-offsetof -Winvalid-pch
-Wlarger-than=Len -Wunsafe-loop-optimizations -Wlogical-op -Wlogical-not-parentheses
-Wlong-long -Wmain -Wmaybe-uninitialized -Wmemset-transposed-args -Wmissing-braces
-Wmissing-field-initializers -Wmissing-include-dirs -Wno-multichar -Wnonnull
-Wnormalized=[wala|id|nfc|nfkc]
-Wodr -Wno-overflow -Wopenmp-simd -Woverlength-strings -Nakabalot
-Wpacked-bitfield-compat -Wpadded -Mga panaklong -Wpedantic-ms-format
-Wno-pedantic-ms-format -Wpointer-arith -Wno-pointer-to-int-cast -Wredundant-decls
-Wno-return-local-addr -Wreturn-type -Wsequence-point -Wshadow -Wno-shadow-ivar
-Wshift-count-negative -Wshift-count-overflow -Wsign-ihambing -Wsign-conversion
-Wfloat-conversion -Wsizeof-pointer-memaccess -Wsizeof-array-argument
-Wstack-tagapagtanggol -Wstack-usage=Len -Wstrict-aliasing -Wstrict-aliasing=n
-Wstrict-overflow -Wstrict-overflow=n -Wsuggest-attribute=[dalisay|const|Walang balikan|format]
-Wsuggest-final-types -Wsuggest-panghuling-paraan -Wsuggest-override
-Wmissing-format-attribute -Wswitch -Wswitch-default -Wswitch-enum -Wswitch-bool
-Wsync-nand -Wsystem-header -Wtrampolines -Wtrigraphs -Wtype-limitasyon -Wundef
-Wuninitialized -Wunknown-pragmas -Wno-pragmas -Wunsuffixed-float-constants
-Wunused -Wunused-function -Wunused-label -Wunused-local-typedefs -Wunused-parameter
-Wno-unused-resulta -Wunused-halaga -Wunused-variable -Wunused-but-set-parameter
-Wunused-but-set-variable -Wuseless-cast -Wvariadic-macros
-Wvector-operasyon-pagganap -Wvla -Wvolatile-register-var -Magsulat-mga string
-Wzero-bilang-null-pointer-constant

C at Layunin-C-lamang babala Options
-Wbad-function-cast -Wmissing-deklarasyon -Wmissing-parameter-type
-Wmissing-prototypes -Wnested-externs -Wold-style-deklarasyon -Wold-style-kahulugan
-Mahigpit na mga prototype -Wtradisyonal -Wtradisyonal-pagbabagong-loob
-Wdeclaration-after-statement -Wpointer-sign

Pag-debug Options
-dtitik -dumpspecs -dumpmachine -dumpversion -fsanitize=estilo -fsanitize-recover
-fsanitize-recover=estilo -fasan-shadow-offset=numero
-fsanitize-undefined-trap-on-error -fcheck-pointer-bounds -fchkp-check-incomplete-type
-fchkp-first-field-may-sariling mga hangganan -fchkp-makitid-hangganan
-fchkp-makitid-hanggang-pinaka-innermost-array -fchkp-optimize -fchkp-use-fast-string-functions
-fchkp-use-nochk-string-functions -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-instrumentong-marked-lamang -fchkp-use-wrappers
-fdbg-cnt-list -fdbg-cnt=counter-value-list -fdisable-ipa-pass_name
-fdisable-rtl-pass_name -fdisable-rtl-pass-name=hanay-listahan -fdisable-tree-pass_name
-fdisable-tree-pass-name=hanay-listahan -fdump-noaddr -fdump-walang numero
-fdump-unnumbered-links -fdump-translation-unit[-n] -fdump-class-hierarchy[-n]
-fdump-ipa-lahat -fdump-ipa-cgraph -fdump-ipa-inline -fdump-passes -fdump-statistics
-fdump-tree-lahat -fdump-tree-orihinal[-n] -fdump-tree-optimized[-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[-hilaw] -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-lababo -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=file -fcompare-debug[=opts] -fcompare-debug-second
-feliminate-dwarf2-dups -fno-eliminate-unused-debug-types
-felimate-unused-debug-symbols -femit-class-debug-laging -kalabanin-uri-pumasa
-kalabanin-uri-pumasa=hanay-listahan -fdebug-types-section -fmem-report-wpa -fmem-ulat
-fpre-ipa-mem-ulat -fpost-ipa-mem-ulat -fprofile-arcs -fopt-info
-fopt-info-pagpipilian[=file] -frandom-seed=numero -fsched-verbose=n -fsel-sched-verbose
-fsel-sched-dump-cfg -fsel-sched-pipelining-verbose -fstack-paggamit -ftest-saklaw
-ftime-ulat -fvar-tracking -fvar-tracking-assignments
-fvar-tracking-assignments-toggle -g -gantas -gtoggle -gcoff -gdwarf-bersyon -ggdb
-grecord-gcc-switch -gno-record-gcc-switch -gstabs -gstabs+ -gstrict-dwarf
-gno-strict-dwarf -gvms -gxcoff -gxcoff+ -gz[=uri] -fno-merge-debug-strings
-fno-dwarf2-cfi-asm -fdebug-prefix-map=luma=bago -femit-struct-debug-baseonly
-femit-struct-debug-reduced -femit-struct-debug-detalyadong[=spec-list] -p -pg
-print-file-name=aklatan -print-libgcc-file-name -print-multi-directory
-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 -panahon[=file]

Optimization Options
-faggressive-loop-optimizations -falign-functions[=n] -falign-jumps[=n]
-falign-labels[=n] -falign-loops[=n] -fassociative-math -fauto-profile
-fauto-profile[=landas] -fauto-inc-dec -fbranch-probability
-fbranch-target-load-optimize -fbranch-target-load-optimize2 -fbtr-bb-eksklusibo
-fcaller-nagse-save -fcheck-data-deps -fcombine-stack-adjustments -fconserve-stack
-fcompare-elim -fcprop-nagparehistro -fcrossjumping -fcse-follow-jumps -fcse-skip-block
-fcx-fortran-rules -fcx-limited-range -fdata-seksyon -fdce -fdelayed-branch
-fdelete-null-pointer-checks -fdevirtualize -fdevirtualize-speculatively
-fdevirtualize-at-ltrans -fdse -takot-inlining -fipa-sra -fexpensive-optimizations
-ffat-lto-mga bagay -ffast-math -ffinite-math-lamang -float-store
-fexcess-precision=estilo -fforward-propagate -ffp-contract=estilo -ffunction-seksyon
-fgcse -fgcse-pagkatapos-reload -fgcse-las -fgcse-lm -fgraphite-pagkakakilanlan -fgcse-sm
-fhoist-katabing-load -fif-conversion -fif-conversion2 -findirect-inlining
-finline-function -finline-functions-called-once -finline-limit=n
-finline-small-functions -fipa-cp -fipa-cp-clone -fipa-cp-alignment -fipa-pta
-fipa-profile -fipa-pure-const -fipa-reference -fipa-icf -fira-algorithm=algorithm
-fira-rehiyon=rehiyon -fira-hoist-pressure -fira-loop-presyon -fno-ira-share-save-slots
-fno-ira-share-spill-slots -fira-verbose=n -fisolate-erroneous-paths-dereference
-fisolate-erroneous-paths-attribute -fivopts -fkeep-inline-functions
-fkeep-static-consts -flive-range-shrinkage -floop-block -floop-interchange
-floop-strip-mine -floop-unroll-and-jam -floop-nest-optimize -floop-parallelize-lahat
-flra-remat -flto -flto-compression-level -flto-partition=algae -flto-ulat
-flto-report-wpa -fmerge-all-constant -fmerge-constant -fmodulo-sched
-fmodulo-sched-allow-regmoves -fmove-loop-invariants -fno-branch-count-reg
-fno-defer-pop -fno-function-cse -fno-guess-branch-probability -fno-inline
-fno-math-errno -fno-peephole -fno-peephole2 -fno-sched-interblock -fno-sched-spec
-fno-signed-zero -fno-toplevel-reorder -fno-trap-math
-fno-zero-initialized-sa-bss -fomit-frame-pointer -foptimize-sibling-calls
-fpartial-inlining -fpeel-loops -fpredictive-commoning -fprefetch-loop-arrays
-fprofile-ulat -fprofile-pagwawasto -fprofile-dir=landas -fprofile-bumuo
-fprofile-generate=landas -fprofile-gamitin -fprofile-use=landas -fprofile-mga halaga
-fprofile-reorder-functions -freciprocal-math -libre -frename-register
-freorder-block -freorder-block-and-partition -freorder-function
-frerun-cse-after-loop -freschedule-modulo-scheduled-loops -frounding-math
-fsched2-use-superblocks -fsched-presyon -fsched-spec-load
-fsched-spec-load-delikado -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 -fsection-anchor
-fselective-scheduling -fselective-scheduling2 -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-tagapagtanggol -fstack-protector-lahat
-fstack-protector-strong -fstack-protector-explicit -fstdarg-opt -mahigpit-aliasing
-mahigpit-apaw -fthread-jumps -ftracer -ftree-bit-ccp -ftree-builtin-call-dce
-free-ccp -ftree-ch -ftree-coalesce-inline-vars -ftree-coalesce-vars -free-copy-prop
-free-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse -ftree-forwprop
-free-fre -ftree-loop-if-convert -ftree-loop-if-convert-stores -ftree-loop-im
-ftree-phiprop -free-loop-distribution -ftree-loop-distribute-patterns
-ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize -free-loop-vectorize
-ftree-parallelize-loops=n -free-pre -ftree-partial-pre -ftree-pta -ftree-reassoc
-free-lababo -ftree-slsr -ftree-sra -free-switch-conversion -free-tail-merge
-ftree-ter -free-vectorize -ftree-vrp -funit-sa-isang-panahon -funroll-all-loops
-funroll-loops -funsafe-loop-optimizations -funsafe-math-optimizations
-funswitch-loops -fipa-ra -fvariable-expansion-in-unroller -fvect-cost-model -fvpt
-fweb -fbuong-programa -fwpa -fuse-linker-plugin --param pangalan=halaga -O -O0 -O1 -O2
-O3 -Os -Ofast -Og

Preprocessor Options
-Atanong=sagutin -MAY-tanong[=sagutin] -C -DD -dI -dM -dN -Dmacro[=defn] -E -H
-idirafter dir -isama file -imacros file -iprefix file -iwithprefix dir
-iwithprefixbefore dir -isystem dir -imultilib dir -isysroot dir -M -MM -MF -MG
-MP -MQ -MT -nostdinc -P -fdebug-cpp -ftrack-macro-expansion -fworking-directory
-mapa muli -trigraphs -undef -Umacro -Wp,opsyon -Xpreprocessor opsyon -no-integrated-cpp

Assembler Opsyon
-Wa,opsyon -Xassembler opsyon

Link Options
object-file-name -fuse-ld=Link -laklatan -nostartfiles -nodefaultlibs -nostdlib
-pie -rdynamic -s -static -static-libgcc -static-libstdc++ -static-libasan
-static-libtsan -static-liblsan -static-libubsan -static-libmpx -static-libmpxwrappers
-ibinahagi -shared-libgcc -simboliko -T script -Wl,opsyon -Xlinker opsyon -u simbolo -z
keyword

Directory Options
-Bunlapi -Idir -iplugindir=dir -iquotedir -Ldir -specs=file -Ako- --sysroot=dir
--no-sysroot-suffix

Makina Umaasa Options
AAArch64 Options -mabi=pangalan -big-endian -mlittle-endian -mggeneral-regs-lamang
-mcmodel=maliit -mcmodel=maliit -mcmodel=malaki -mstrict-align -momit-leaf-frame-pointer
-mno-omit-leaf-frame-pointer -mtls-dialect=desc -mtls-dialect=tradisyonal
-mfix-cortex-a53-835769 -mno-fix-cortex-a53-835769 -mfix-cortex-a53-843419
-mno-fix-cortex-a53-843419 -martsa=pangalan -mcpu=pangalan -mtune=pangalan

Adapeva pista ng tatlong hari Options -mhalf-reg-file -mprefer-short-insn-regs -mbranch-cost=num
-mcmove -mnops=num -msoft-cmpsf -msplit-lohi -mpost-inc -mpost-modify
-mstack-offset=num -mround-pinakalapit -mlong-tawag -mshort-calls -msmall16 -mfp-mode=paraan
-mvect-doble -max-vect-align=num -msplit-vecmove-maaga -m1reg-reg

ARC Options -barrel-shifter -mcpu=CPU -mA6 -mARC600 -mA7 -mARC700 -mdpfp
-mdpfp-compact -mdpfp-mabilis -mno-dpfp-lrsr -mea -mno-mpy -mmul32x16 -mmul64 -norm
-mspfp -mspfp-compact -mspfp-mabilis -msimd -msoft-float -mswap -mcrc -mdsp-packa -mdvbf
-mlock -mmac-d16 -mmac-24 -mrtsc -mswape -mtelephony -mxy -misize -mannotate-align
-marclinux -marclinux_prof -mepilogue-cfi -mlong-tawag -mmedium-tawag -msdata
-mucb-mcount -mvolatile-cache -malign-tawag -mauto-modify-reg -mbbit-peephole -mno-brcc
-mcase-vector-pcrel -mcompact-casesi -mno-cond-exec -mearly-cbranchsi -meexpand-adddi
-mindexed-loads -mlra -mlra-priority-wala -mlra-priority-compact mlra-priority-
hindi compact -mno-millicode -mixed-code -mq-class -mRcq -mRcw -msize-level=antas
-mtune=CPU -mmultcost=num -munalign-prob-threshold=bagay na maaaring mangyari

Braso Options -mapcs-frame -mno-apcs-frame -mabi=pangalan -mapcs-stack-check
-mno-apcs-stack-check -mapcs-float -mno-apcs-float -mapcs-reentrant
-mno-apcs-reentrant -msched-prolog -mno-sched-prolog -mlittle-endian -big-endian
-mfloat-abi=pangalan -mfp16-format=pangalan -mthumb-interwork -mno-thumb-interwork -mcpu=pangalan
-martsa=pangalan -mfpu=pangalan -mtune=pangalan -mprint-tune-info -mstructure-size-boundary=n
-mabort-on-noreturn -mlong-tawag -mno-mahabang-tawag -msingle-pic-base
-mno-single-pic-base -mpic-register=reg -mnop-fun-dllimport -mpoke-function-name
-thumb -marm -mtpcs-frame -mtpcs-leaf-frame -mcaller-super-interworking
-mcallee-super-interworking -mtp=pangalan -mtls-dialect=dialect -mword-relocations
-mfix-cortex-m3-ldrd -munaligned-access -mneon-para-64bits -mslow-flash-data
-masm-syntax-unified -mrestrict-it

AVR Options -mmcu=mcu -maccumulate-args -mbranch-cost=gastos -mcall-prologues -mint8
-mn_flash=laki -mno-interrupts -magpahinga -mrmw -mstrict-X -mtiny-stack -nodevicelib
-Waddr-space-convert

Blackfin Options -mcpu=CPU[-sirevision] -msim -momit-leaf-frame-pointer
-mno-omit-leaf-frame-pointer -mspecld-anomalya -mno-specld-anomalya -mcsync-anomalya
-mno-csync-anomalya -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 -mlong-tawag -mno-mahabang-tawag
-mfast-fp -minline-plt -mmulticore -mcorea -mcoreb -msdram -micplb

C6X Options -big-endian -mlittle-endian -martsa=CPU -msim -msdata=uri ng sdata

CRIS Options -mcpu=CPU -martsa=CPU -mtune=CPU -mmax-stack-frame=n
-melinux-stacksize=n -metrax4 -metrax100 -mpdebug -mcc-init -mno-side-effects
-mstack-align -mdata-align -mconst-align -m32-bit -m16-bit -m8-bit
-mno-prologue-epilogue -mno-gotplt - melf -maout -melinux -mlinux -sim -sim2
-mmul-bug-workaround -mno-mul-bug-workaround

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

Darwin Options -all_load -allowable_client -arko -arch_errors_fatal -arch_only
-bind_at_load -bundle -bundle_loader -Pangalan ng kliyente -compatibility_version
-kasalukuyang_bersyon -dead_strip -dependency-file -dylib_file -dylinker_install_name
-dynamic -dynamiclib -exported_symbols_list -filelist -flat_namespace
-force_cpusubtype_ALL -force_flat_namespace -headerpad_max_install_names -iframework
-image_base -sa loob -install_name -keep_private_externs -multi_module
-multiply_defined -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 -sectobjectsymbols -bakit nagload -seg1addr -sectcreate
-sectobjectsymbols -sektor -segaddr -segs_read_only_addr -segs_read_write_addr
-seg_addr_table -seg_addr_table_filename -seglinkedit -segprot -segs_read_only_addr
-segs_read_write_addr -iisang_module -static -sub_library -sub_umbrella
-twolevel_namespace -payong -hindi natukoy -unexported_symbols_list
-weak_reference_mismatches -whatsloaded -F -gused -busog -mmacosx-version-min=bersyon
-mkernel -mone-byte-bool

Disyembre Alpha Options -mno-fp-regs -msoft-float -meeee -meeee-with-inexact
-meeee-conformant -mfp-trap-mode=paraan -mfp-rounding-mode=paraan -mtrap-precision=paraan
-mbuild-constant -mcpu=uri ng cpu -mtune=uri ng cpu -mbwx -mmax -mfix -mcix
-mfloat-vax -mfloat-ieee -meexplicit-relocs -msmall-data -mlarge-data -msmall-text
-mlarge-text -mmemory-latency=oras

FR30 Options -msmall-modelo -mno-lsim

FRV Options -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 -mhard-float -msoft-float
-malloc-cc -mfixed-cc -mdword -mno-dword -mdoble -mno-doble -mmedia -mno-media
-mmuladd -mno-muladd -mfdpic -minline-plt -mgprel-ro -multilib-library-pic
-mlinked-fp -mlong-tawag -malign-label -mlibrary-pic -macc-4 -macc-8 -pack
-mno-pack -mno-flag -mcond-move -mno-cond-move -moptimize-membar
-mno-optimize-membar -mscc -mno-scc -mcond-exec -mno-cond-exec -mvliw-branch
-mno-vliw-branch -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec
-mno-nested-cond-exec -mtomcat-stats -mTLS -mtls -mcpu=CPU

GNU / Linux Options -mglibc -muclibc -mbionic -android -tno-android-cc -tno-android-ld

H8 / 300 Options -magpahinga -mh -MS -mn -mexr -mno-exr -mint32 -malign-300

HPPA Options -martsa=uri ng arkitektura -mdisable-fpregs -i-disable-indexing
-mfast-indirect-calls -mgas -mgnu-ld -mhp-ld -mfixed-range=rehistro-saklaw
-mjump-in-delay -mlinker-opt -mlong-tawag -mlong-load-store -mno-disable-fpregs
-mno-disable-indexing -mno-fast-indirect-calls -mno-gas -mno-jump-in-delay
-mno-long-load-store -mno-portable-runtime -mno-malambot-float -mno-space-regs
-msoft-float -mpa-risc-1-0 -mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime
-mschedule=uri ng cpu -mspace-regs -msio -mwsio -munix=unix-std -nolibdld -static
- mga thread

IA-64 Options -big-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic
-mvolatile-asm-stop -magrehistro-mga pangalan -msdata -mno-sdata -mconstant-gp -mauto-pic
-mfused-baliw -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 -mearly-stop-bits
-mfixed-range=rehistro-saklaw -mtls-size=tls-size -mtune=uri ng 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-pagkatapos-bawat-ikot
-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 Options -mbarrel-shift-enabled -mdivide-enabled -mmultiply-enabled
-msign-extend-enabled -muser-enabled

M32R/D Options -m32r2 -m32rx -m32r -mdebug -malign-loops -mno-align-loops
-missue-rate=numero -mbranch-cost=numero -mmodel=code-size-model-type -msdata=sdata-
uri -mno-flush-func -mflush-func=pangalan -mno-flush-trap -mflush-trap=numero -G num

M32C Options -mcpu=CPU -msim -meregs=numero

M680x0 Options -martsa=arko -mcpu=CPU -mtune=magtono -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 -msshort -mno-maikli -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 Options -mhardlit -mno-hardlit -mdiv -mno-div -mrelax-agad
-mno-relax-agad -mwide-bitfields -mno-wide-bitfields -m4byte-function
-mno-4byte-functions -mcallgraph-data -mno-callgraph-data -mslow-bytes
-mno-slow-bytes -mno-lsim -mlittle-endian -big-endian -m210 -m340
-mstack-increment

MeP Options -mabsdiff -mall-opts -maverage -based=n -mbitops -mc=n -mclip
-mconfig=pangalan -mcop -mcop32 -mcop64 -mivc2 -mdc -mdiv -meb -mel -mio-volatile -ml
-mleadz -mm -mminmax -mult -mno-opts -ulitin -MS -msatur -msdram -msim -msimnovec
-mtf -mtiny=n

MicroBlaze Options -msoft-float -mhard-float -msmall-divides -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
-big-endian -mlittle-endian -mxl-muling ayusin -mxl-mode-modelo ng app

MIPS Options -ANG -EB -martsa=arko -mtune=arko -mips1 -mips2 -mips3 -mips4
-mips32 -mips32r2 -mips32r3 -mips32r5 -mips32r6 -mips64 -mips64r2 -mips64r3
-mips64r5 -mips64r6 -mips16 -mno-mips16 -mflip-mips16 -minterlink-compressed
-mno-interlink-compressed -minterlink-mips16 -mno-interlink-mips16 -mabi=abi
-mabicalls -mno-abicalls -mshared -mno-shared -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=paraan -mnan=pag-encode
-mdsp -mno-dsp -mdspr2 -mno-dspr2 -mmcu -mmno-mcu -meva -mno-eva -mvirt -mno-virt
-mxpa -mno-xpa -mmicromip -mno-micromip -mfpu=uri ng fpu -msmartmips -mno-smartmips
-may kapansanan-single -mno-paired-single -mdmx -mno-mdmx -mips3d -mno-mips3d -mmt
-mno-mt -mllsc -mno-llsc -mlong64 -mlong32 -msym32 -mno-sym32 -Gnum
-mlocal-sdata -mno-local-sdata -mextern-sdata -mno-extern-sdata -mgpopt -mno-gopt
-naka-embed na-data -mno-embedded-data -muninit-const-in-rodata
-mno-uninit-const-in-rodata -mcode-readable=pagtatakda ng -msplit-address
-mno-split-address -meexplicit-relocs -mno-explicit-relocs -mcheck-zero-division
-mno-check-zero-division -mdivide-traps -mdivide-breaks -mmemcpy -mno-memcpy
-mlong-tawag -mno-mahabang-tawag -mmad -mno-baliw -mimadd -mno-imadd -mfused-baliw
-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=func -mno-flush-func -mbranch-cost=num -malamang
-mno-branch-malamang -mfp-exceptions -mno-fp-exceptions -mvr4130-align -mno-vr4130-align
-msynci -mno-synci -mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-address

MMIX Options -mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon -mabi=gnu
-mabi=mmixware -mzero-extend -mknuthdiv -mtoplevel-mga simbolo - melf -mbranch-hula
-mno-branch-predict -mbase-address -mno-base-address -msingle-exit
-mno-single-exit

MN10300 Options -mult-bug -mno-mult-bug -mno-am33 -mam33 -mam33-2 -mam34 -mtune=cpu-
uri -mreturn-pointer-on-d0 -mno-crt0 -magpahinga -mliw -msetlb

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

MSP430 Options -msim -masm-hex -mmcu= -mcpu= -malaki -msmall -magpahinga -mhwmult= -minrt

NDS32 Options -big-endian -mlittle-endian -mreduced-regs -mfull-regs -mcmov -mno-cmov
-mperf-ext -mno-perf-ext -mv3push -mno-v3push -m16bit -mno-16bit -misr-vector-size=num
-mcache-block-size=num -martsa=arko -mcmodel=code-modelo -mctor-dtor -magpahinga

Nios II Options -G num -mgpopt=opsyon -mgpopt -mno-gpopt -mel -meb -mno-bypass-cache
-mbypass-cache -mno-cache-volatile -mcache-volatile -mno-fast-sw-div -mfast-sw-div
-mhw-mul -mno-hw-mul -mhw-mulx -mno-hw-mulx -mno-hw-div -mhw-div -nakasanayan-insn=N
-mno-custom-insn -mcustom-fpu-cfg=pangalan -mhal -msmallc -msys-crt0=pangalan -msys-lib=pangalan

NVIDIA PTX Options -m32 -m64 -mmainkernel

PDP-11 Options -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 -mbcopy
-mbcopy-built -mint32 -mno-int16 -mint16 -mno-int32 -mfloat32 -mno-float64
-mfloat64 -mno-float32 -mabshi -mno-abshi -mbranch-mahal -mbranch-mura
-munix-asm -mdec-asm

picoChip Options -mae=ae_type -mvliw-lookahead=N -msymbol-as-address
-mno-inefficient-babala

PowerPC Options Tingnan ang RS/6000 at PowerPC Options.

RL78 Options -msim -mmul=wala -mmul=g13 -mmul=rl78 -m64bit-doble -m32bit-doble

RS / 6000 at PowerPC Options -mcpu=uri ng cpu -mtune=uri ng cpu -mcmodel=code-modelo
-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-sum-in-toc
-m64 -m32 -mxl-compat -mno-xl-compat -mpe -malign-power -malign-natural
-msoft-float -mhard-float -marami -mno-marami -msingle-float -mdouble-float
-msimple-fpu -mstring -mno-kuwerdas -mupdate -mno-update -mavoid-indexed-address
-mno-avoid-indexed-addresses -mfused-baliw -mno-fused-madd -mbit-align
-mno-bit-align -mstrict-align -mno-strict-align -malilipat -mno-relocatable
-mrelocatable-lib -mno-relocatable-lib -mtoc -mno-toc -maliit -mlittle-endian
-malaki -big-endian -mdynamic-no-pic -maltivec -mswdiv -msingle-pic-base
-prioritize-restricted-insns=karapatang mauna -msched-costly-dep=dependence_type
-minsert-sched-nops=pamamaraan -mcall-sysv -mcall-netbsd -maix-struct-return
-msvr4-struct-return -mabi=abi-type -msecure-plt -mbss-plt
-mblock-move-inline-limit=num -misel -mno-isel -misel=oo -misel=hindi -mspe -mno-spe
-mspe=oo -mpe=hindi -may kapansanan -mgen-cell-microcode -mwarn-cell-microcode -mvrsave
-mno-vrsave -mmulhw -mno-mulhw -mdlmzb -mno-dlmzb -mfloat-gprs=oo -mfloat-gprs=no
-mfloat-gprs=single -mfloat-gprs=doble -prototype -mno-prototype -msim -mmvme
-mga baliw -myellowknife -memb -msdata -msdata=opt -mvxworks -G num -pthread -mreci
-mreci=opt -mno-recipe -mrecip-katumpakan -mno-recip-precision -mveclibabi=uri -mfriz
-mno-friz -pointers-to-nested-functions -mno-pointers-to-nested-functions
-msave-toc-indirect -mno-save-toc-indirect -mpower8-fusion -mno-mpower8-fusion
-mpower8-vector -mno-power8-vector -mcrypto -mno-crypto -mdirect-move -mno-direct-move
-mquad-memorya -mno-quad-memory -mquad-memory-atomic -mno-quad-memory-atomic
-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 Options -m64bit-doble -m32bit-doble -fpu -nofpu -mcpu= -mbig-endian-data
-mlittle-endian-data -msmall-data -msim -mno-sim -mas100-syntax -mno-as100-syntax
-magpahinga -mmax-constant-size= -mint-register= -mpid -mno-warn-multiple-fast-interrupts
-msave-acc-in-interrupts

S / 390 at zSerye Options -mtune=uri ng cpu -martsa=uri ng cpu -mhard-float -msoft-float
-mhard-dfp -mno-hard-dfp -mlong-double-64 -mlong-double-128 -mbackchain
-mno-backchain -naka-pack na-stack -mno-packed-stack -msmall-exec -mno-small-exec
-mmvcle -mno-mvcle -m64 -m31 -mdebug -mno-debug -mesa -mzarch -mtpf-trace
-mno-tpf-trace -mfused-baliw -mno-fused-madd -mwarn-framesize -mwarn-dynamicstack
-laki ng mstack -mstack-guard -mhotpatch=kalahating salita,kalahating salita

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

SH Options -m1 -m2 -m2e -m2a-nofpu -m2a-single-lamang -m2a-single -m2a -m3 -m3e
-m4-nofpu -m4-single-lamang -m4-iisa -m4 -m4a-nofpu -m4a-single-lamang -m4a-single
-m4a -m4al -m5-64media -m5-64media-nofpu -m5-32media -m5-32media-nofpu -m5-compact
-m5-compact-nofpu -mb -ml -mdalign -magpahinga -mbigtable -mfmovd -mhitachi -mrenesas
-mno-renesas -mnomacsave -meeee -mno-ieee -mbitops -misize -minline-ic_invalidate
-mpadstruct -mspace -prefergot -musermode -multcost=numero -mdiv=estratehiya
-mdivsi3_libfunc=pangalan -mfixed-range=rehistro-saklaw -mindexed-addressing
-mgettrcost=numero -mpt-naayos -maccumulate-outgoing-args -minvalid-mga simbolo
-matomic-modelo=atomic-modelo -mbranch-cost=num -mzdcbranch -mno-zdcbranch
-mcbranch-force-delay-slot -mfused-baliw -mno-fused-madd -mfsca -mno-fsca -mfsrra
-mno-fsrra -pagpanggap-cmove -mtas

Solaris 2 Options -mclear-hwcap -mno-clear-hwcap -mimpure-text -mno-impure-text
- mga thread -pthread

SPARC Options -mcpu=uri ng cpu -mtune=uri ng cpu -mcmodel=code-modelo -mmemory-modelo=mem-
modelo -m32 -m64 -mapp-regs -mno-app-regs -mfaster-structs -mno-faster-structs
-mflat -mno-flat -mfpu -mno-fpu -mhard-float -msoft-float -mhard-quad-float
-msoft-quad-float -mstack-bias -mno-stack-bias -munaligned-double
-mno-unaaligned-doubles -muser-mode -mno-user-mode -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 Options -mwarn-reloc -merror-reloc -msafe-dma -munsafe-dma -mbranch-pahiwatig
-msmall-mem -mlarge-mem -mstdmain -mfixed-range=rehistro-saklaw -mea32 -mea64
-maddress-space-conversion -mno-address-space-conversion -mcache-size=laki ng cache
-matomic-update -mno-atomic-update

Sistema V Options -Qy -Qn -YP,mga landas -Ym,dir

TILE-Gx Options -mcpu=CPU -m32 -m64 -big-endian -mlittle-endian -mcmodel=code-modelo

TILEPro Options -mcpu=CPU -m32

V850 Options -mlong-tawag -mno-mahabang-tawag -mep -mno-ep -mprolog-function
-mno-prolog-function -mspace -mtda=n -msda=n -mzda=n -mapp-regs -mno-app-regs
-i-disable-callt -mno-disable-callt -mv850e2v3 -mv850e2 -mv850e1 -mv850es -mv850e
-mv850 -mv850e3v5 -mloop -magpahinga -mlong-tumalon -msoft-float -mhard-float -mgcc-abi
-mrh850-abi -big-switch

VAX Options -mg -mgnu -munix

Visium Options -mdebug -msim -mfpu -mno-fpu -mhard-float -msoft-float -mcpu=uri ng cpu
-mtune=uri ng cpu -msv-mode -muser-mode

VMS Options -mvms-return-codes -mdebug-main=unlapi -mmalloc64 -laki ng pointer=laki

VxWorks Options -mrtp -hindi static -Bstatic -Bdynamic -Xbind-tamad -Xbind-ngayon

x86 Options -mtune=uri ng cpu -martsa=uri ng cpu -mtune-ctrl=listahan ng tampok
-mdump-tune-features -mno-default -mfpmath=yunit -masm=dialect -mno-fancy-math-387
-mno-fp-ret-in-387 -msoft-float -mno-wide-multiply -mrtd -malign-doble
-preferred-stack-boundary=num -mincoming-stack-boundary=num -mcld -mcx16 -msahf
-mmovbe -mcrc32 -mreci -mreci=opt -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 -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop
-mlzcnt -mbmi2 -mfxsr -mxsave -mxsaveopt -mrtm -mlwp -mmpx -mmwaitx -mthreads
-mno-align-stringops -minline-all-stringops -minline-stringops-dynamically
-mstringop-diskarte=algae -mmemcpy-diskarte=estratehiya -mmemset-diskarte=estratehiya
-mpush-args -maccumulate-outgoing-args -m128bit-long-doble -m96bit-long-doble
-mlong-double-64 -mlong-double-80 -mlong-double-128 -mregparm=num -msseregparm
-mveclibabi=uri -mvect8-ret-in-mem -mpc32 -mpc64 -mpc80 -mstackrealign
-momit-leaf-frame-pointer -mno-red-zone -mno-tls-direct-seg-refs -mcmodel=code-modelo
-mabi=pangalan -maddress-mode=paraan -m32 -m64 -mx32 -m16 -mlarge-data-threshold=num
-msse2avx -mfentry -mrecord-mcount -mnop-mcount -m8bit-idiv
-mavx256-split-unaaligned-load -mavx256-split-unaaligned-store -malign-data=uri
-mstack-protector-guard=bantay

x86 Windows Options -mconsole -mcygwin -mno-cygwin -mdll -mnop-fun-dllimport -mthread
-municode -mwin32 -mwindows -fno-set-stack-executable

Xstormy16 Options -msim

Xtensa Options -mconst16 -mno-const16 -mfused-baliw -mno-fused-madd -mforce-no-pic
-mserialize-volatile -mno-serialize-volatile -mtext-section-literal
-mno-text-section-literal -mtarget-align -mno-target-align -mlongcalls
-mno-longcalls

zSerye Options Tingnan ang S/390 at zSeries Options.

kodigo Henerasyon Options
-fcall-save-reg -fcall-ginamit-reg -nakadikit-reg -fexceptions -fnon-call-exceptions
-fdelete-dead-exceptions -funwind-table -fasynchronous-unwind-tables -fno-gnu-natatangi
-finhibit-size-directive - mga function ng instrumento
-finstrument-functions-exclude-function-list=sym,sym, ...
-finstrument-functions-exclude-file-list=file,file, ... -fno-karaniwan -fno-ident
-fpcc-struct-return -fpic -fPIC -fpie -fPIE -fno-jump-tables -frecord-gcc-switch
-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 -fleading-underscore -ftls-model=modelo
-fstack-reuse=reuse_level -ftrapv -fwrapv -fbounds-check
-fvisibility=[default|panloob|nakatago|protektado] -fstrict-volatile-bitfields
-fsync-libcalls

Options Pagkontrol ang Anak of Pagbubuhos
Maaaring magsama ng hanggang apat na yugto ang compilation: preprocessing, compilation proper, assembly at
nagli-link, palaging nasa ganoong pagkakasunud-sunod. Ang GCC ay may kakayahang mag-preprocess at mag-compile ng ilan
mga file alinman sa ilang assembler input file, o sa isang assembler input file; pagkatapos
bawat assembler input file ay gumagawa ng object file, at ang pag-link ay pinagsasama ang lahat ng object
mga file (mga bagong pinagsama-sama, at ang mga tinukoy bilang input) sa isang executable na file.

Para sa anumang ibinigay na input file, tinutukoy ng suffix ng pangalan ng file kung anong uri ng compilation
tapos na:

file.c
C source code na dapat ma-preprocess.

file.i
C source code na hindi dapat i-preprocess.

file.ii
C++ source code na hindi dapat i-preprocess.

file.m
Objective-C source code. Tandaan na dapat kang mag-link sa libobjc aklatan upang makagawa ng isang
Objective-C program na gawain.

file.mi
Objective-C source code na hindi dapat i-preprocess.

file.mm
file.M
Layunin-C++ source code. Tandaan na dapat kang mag-link sa libobjc library na gagawin
isang Objective-C++ program work. Tandaan na .M ay tumutukoy sa literal na kapital na M.

file.mii
Objective-C++ source code na hindi dapat i-preprocess.

file.h
C, C++, Objective-C o Objective-C++ header file na gagawing precompiled
header (default), o C, C++ header file na gagawing Ada spec (sa pamamagitan ng
-fdump-ada-spec lumipat).

file. Cc
file.cp
file.cxx
file.cpp
file.CPP
file.c++
file.C
C++ source code na dapat ma-preprocess. Tandaan na sa .cxx, ang huling dalawang titik
dapat parehong literal x. Gayundin, .C tumutukoy sa literal na kapital C.

file.mm
file.M
Objective-C++ source code na dapat na na-preprocess.

file.mii
Objective-C++ source code na hindi dapat i-preprocess.

file.hh
file.H
file.hp
file.hxx
file.hpp
file.HPP
file.h++
file.tcc
C++ header file na gagawing precompiled header o Ada spec.

file.f
file.para sa
file.ftn
Inayos ang form na Fortran source code na hindi dapat i-preprocess.

file.F
file.PARA
file.fpp
file.FPP
file.FTN
Fixed form Fortran source code na dapat iproseso (na may tradisyonal
preprocessor).

file.f90
file.f95
file.f03
file.f08
Libreng form na Fortran source code na hindi dapat i-preprocess.

file.F90
file.F95
file.F03
file.F08
Libreng form na Fortran source code na dapat ma-preprocessed (na may tradisyonal
preprocessor).

file.go
Pumunta sa source code.

file.mga ad
May source code file na naglalaman ng deklarasyon ng unit ng library (isang deklarasyon ng a
package, subprogram, o generic, o isang generic instantiation), o isang library unit
pagpapalit ng pangalan ng deklarasyon (isang package, generic, o subprogram na deklarasyon sa pagpapalit ng pangalan). ganyan
tinatawag din ang mga file panoorin.

file.adb
May source code file na naglalaman ng isang library unit body (isang subprogram o package body).
Ang ganitong mga file ay tinatawag din katawan.

file.s
Code ng assembler.

file.S
file.sx
Assembler code na dapat ma-preprocess.

iba
Isang object file na ipapakain nang diretso sa pag-link. Anumang pangalan ng file na hindi nakikilala
ang suffix ay ginagamot sa ganitong paraan.

Maaari mong tahasang tukuyin ang input na wika gamit ang -x opsiyon:

-x wika
Tahasang tukuyin ang wika para sa mga sumusunod na input file (sa halip na hayaan ang
compiler pumili ng isang default batay sa suffix ng pangalan ng file). Nalalapat ang opsyong ito sa lahat
sumusunod na mga input file hanggang sa susunod -x opsyon. Mga posibleng halaga para sa wika ay:

c c-header na cpp-output
c++ c++-header c++-cpp-output
layunin-c layunin-c-header layunin-c-cpp-output
layunin-c++ layunin-c++-header layunin-c++-cpp-output
assembler assembler-with-cpp
ada
f77 f77-cpp-input f95 f95-cpp-input
go
Dyaba

-x wala
I-off ang anumang detalye ng isang wika, para mapangasiwaan ang mga kasunod na file
ayon sa kanilang mga suffix ng pangalan ng file (bilang sila ay kung -x hindi pa nagagamit).

-pass-exit-codes
Karaniwan ang gcc lalabas ang program na may code na 1 kung babalik ang anumang yugto ng compiler
isang hindi-tagumpay na return code. Kung tinukoy mo -pass-exit-codes, ang gcc programa sa halip
nagbabalik na may pinakamataas na error ayon sa numero na ginawa ng anumang yugto na nagbabalik ng error
indikasyon. Ang mga dulo ng C, C++, at Fortran sa harap ay nagbabalik ng 4 kung may panloob na error sa compiler
ay nakatagpo.

Kung gusto mo lamang ng ilan sa mga yugto ng compilation, maaari mong gamitin -x (o mga suffix ng filename)
sabihin gcc kung saan magsisimula, at isa sa mga pagpipilian -c, -S, O -E para sabihin kung saan gcc ay upang
huminto. Tandaan na ang ilang kumbinasyon (halimbawa, -x cpp-output -E) magturo gcc gawin
wala talaga.

-c I-compile o tipunin ang mga source file, ngunit huwag i-link. Ang yugto ng pag-uugnay ay simple lang
hindi tapos. Ang pinakahuling output ay nasa anyo ng isang object file para sa bawat source file.

Bilang default, ang object file name para sa isang source file ay ginawa sa pamamagitan ng pagpapalit ng suffix .c,
.i, .s, atbp., kasama ang .o.

Ang hindi nakikilalang mga input file, na hindi nangangailangan ng compilation o assembly, ay binabalewala.

-S Huminto pagkatapos ng yugto ng tamang compilation; huwag mag-ipon. Ang output ay nasa
anyo ng isang assembler code file para sa bawat non-assembler input file na tinukoy.

Bilang default, ang pangalan ng assembler file para sa isang source file ay ginawa sa pamamagitan ng pagpapalit ng suffix
.c, .i, atbp., kasama ang .s.

Ang mga input file na hindi nangangailangan ng compilation ay binabalewala.

-E Huminto pagkatapos ng yugto ng preprocessing; huwag patakbuhin ang compiler ng maayos. Ang output ay nasa
ang anyo ng preprocessed source code, na ipinadala sa karaniwang output.

Ang mga input na file na hindi nangangailangan ng preprocessing ay binabalewala.

-o file
Ilagay ang output sa file file. Nalalapat ito sa anumang uri ng output na ginagawa,
ito man ay isang executable file, object file, assembler file o preprocessed C
code.

If -o ay hindi tinukoy, ang default ay maglagay ng executable file a.labas, ang bagay
file para sa pinagmulan.panlapi in pinagmulan.o, ang assembler file nito sa pinagmulan.s, isang precompiled
header file sa source.suffix.gch, at lahat ng preprocessed na C source sa karaniwang output.

-v I-print (sa karaniwang error na output) ang mga utos na isinagawa upang patakbuhin ang mga yugto ng
compilation. I-print din ang numero ng bersyon ng compiler driver program at ng
preprocessor at ang compiler proper.

-###
katulad -v maliban kung ang mga utos ay hindi naisakatuparan at ang mga argumento ay sinipi maliban kung sila
naglalaman lamang ng mga alphanumeric na character o "./-_". Ito ay kapaki-pakinabang para sa mga script ng shell
makuha ang mga linya ng command na binuo ng driver.

-pipe
Gumamit ng mga tubo sa halip na pansamantalang mga file para sa komunikasyon sa pagitan ng iba't ibang yugto ng
compilation. Nabigo itong gumana sa ilang system kung saan hindi nababasa ng assembler
mula sa isang tubo; ngunit ang GNU assembler ay walang problema.

- Tumulong
Mag-print (sa karaniwang output) ng isang paglalarawan ng mga opsyon sa command-line na naiintindihan ng
gcc. Kung ang -v ang pagpipilian ay tinukoy din pagkatapos - Tumulong naipapasa din sa iba't-ibang
mga prosesong hinihingi ng gcc, upang maipakita nila ang mga opsyon sa command-line na kanilang
tanggapin. Kung ang -Wextra ang opsyon ay tinukoy din (bago ang - Tumulong opsyon),
pagkatapos ay ang mga opsyon sa command-line na walang dokumentasyong nauugnay sa mga ito
ipinakita

--target-tulong
Mag-print (sa karaniwang output) ng isang paglalarawan ng mga opsyon sa command-line na tukoy sa target
para sa bawat kasangkapan. Para sa ilang mga target, maaari ding magkaroon ng karagdagang impormasyon na partikular sa target
nakalimbag

--help={klase|[^]maging karapat-dapat}[, ...]
Mag-print (sa karaniwang output) ng isang paglalarawan ng mga opsyon sa command-line na naiintindihan ng
ang compiler na umaangkop sa lahat ng tinukoy na klase at qualifier. Ito ang mga
mga suportadong klase:

mga optimizer
Ipakita ang lahat ng mga opsyon sa pag-optimize na sinusuportahan ng compiler.

babala
Ipakita ang lahat ng mga opsyon sa pagkontrol sa mga mensahe ng babala na ginawa ng compiler.

target
Ipakita ang mga opsyon na partikular sa target. hindi katulad ng --target-tulong opsyon gayunpaman, target-
ang mga partikular na opsyon ng linker at assembler ay hindi ipinapakita. Ito ay dahil ang
ang mga tool na iyon ay hindi kasalukuyang sumusuporta sa pinalawig --tulong= Syntax.

param
Ipakita ang mga halaga na kinikilala ng --param pagpipilian.

wika
Ipakita ang mga opsyon na sinusuportahan para sa wika, Kung saan wika ay ang pangalan ng isa sa
ang mga wikang sinusuportahan sa bersyong ito ng GCC.

pangkaraniwan
Ipakita ang mga opsyon na karaniwan sa lahat ng mga wika.

Ito ang mga sinusuportahang qualifier:

undocumented
Ipakita lamang ang mga opsyon na hindi dokumentado.

sumali
Mga opsyon sa pagpapakita na kumukuha ng argumento na lumilitaw pagkatapos ng pantay na pag-sign sa parehong
tuluy-tuloy na piraso ng teksto, tulad ng: --help=target.

hiwalay
Mga opsyon sa pagpapakita na kumukuha ng argumento na lumalabas bilang hiwalay na salita kasunod ng
orihinal na opsyon, tulad ng: -o output-file.

Kaya halimbawa upang ipakita ang lahat ng mga hindi dokumentadong switch na tukoy sa target na sinusuportahan ng
ang compiler, gamitin ang:

--help=target, undocumented

Ang kahulugan ng isang qualifier ay maaaring baligtarin sa pamamagitan ng prefixing ito ng ^ karakter, kaya para sa
halimbawa upang ipakita ang lahat ng binary na mga opsyon sa babala (ibig sabihin, ang mga naka-on o naka-off
at hindi kumukuha ng argumento) na may paglalarawan, gamitin ang:

--help=warnings,^joined,^undocumented

Ang argumento sa --tulong= hindi dapat binubuo lamang ng inverted qualifiers.

Ang pagsasama-sama ng ilang mga klase ay posible, bagaman ito ay karaniwang naghihigpit sa output
marami na walang maipakita. Ang isang kaso kung saan ito gumagana, gayunpaman, ay kung kailan
isa sa mga klase ay target. Halimbawa, upang ipakita ang lahat ng partikular na target
mga opsyon sa pag-optimize, gamitin ang:

--help=target, mga optimizer

Ang --tulong= ang opsyon ay maaaring ulitin sa command line. Ipinapakita ang bawat sunod-sunod na paggamit
ang hiniling nitong klase ng mga opsyon, na nilaktawan ang mga naipakita na.

Kung ang -Q lilitaw ang opsyon sa command line bago ang --tulong= opsyon, pagkatapos ay ang
descriptive text na ipinakita ni --tulong= ay nagbago. Sa halip na ilarawan ang ipinapakita
mga opsyon, ang isang indikasyon ay ibinibigay kung ang opsyon ay pinagana, hindi pinagana o nakatakda
sa isang tiyak na halaga (ipagpalagay na alam ito ng compiler sa punto kung saan ang
--tulong= ginagamit ang opsyon).

Narito ang isang pinutol na halimbawa mula sa ARM port ng gcc:

% gcc -Q -mabi=2 --help=target -c
Ang mga sumusunod na opsyon ay partikular sa target:
-mabi= 2
-mabort-on-noreturn [naka-disable]
-mapcs [naka-disable]

Ang output ay sensitibo sa mga epekto ng nakaraang mga opsyon sa command-line, kaya para sa
halimbawa posibleng malaman kung aling mga pag-optimize ang pinagana -O2 sa pamamagitan ng paggamit ng:

-Q -O2 --help=optimizers

Bilang kahalili maaari mong matuklasan kung aling mga binary optimization ang pinagana ng -O3 sa pamamagitan ng paggamit ng:

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

-walang-canonical-prefix
Huwag palawakin ang anumang mga simbolikong link, lutasin ang mga sanggunian sa /../ or /./, o gumawa ng landas
absolute kapag bumubuo ng isang relative prefix.

--bersyon
Ipakita ang numero ng bersyon at mga copyright ng na-invoke na GCC.

-pambalot
I-invoke ang lahat ng mga subcommand sa ilalim ng isang wrapper program. Ang pangalan ng wrapper program at
ang mga parameter nito ay ipinasa bilang isang listahan na pinaghihiwalay ng kuwit.

gcc -c tc -wrapper gdb,--args

Hinihimok nito ang lahat ng mga subprogram ng gcc sa ilalim gdb --args, kaya ang panawagan ng cc1 is
gdb --args cc1 ....

-fplugin=pangalan.so
I-load ang plugin code sa file pangalan.so, ipinapalagay na isang nakabahaging bagay na dapat i-dlopen
ang compiler. Ang batayang pangalan ng nakabahaging object file ay ginagamit upang matukoy ang plugin
para sa mga layunin ng pag-parse ng argumento (Tingnan -fplugin-arg-pangalan-susi=halaga sa ibaba). Bawat isa
Dapat tukuyin ng plugin ang mga function ng callback na tinukoy sa Plugins API.

-fplugin-arg-pangalan-susi=halaga
Tukuyin ang tinatawag na argumento susi na may halaga ng halaga para sa tinatawag na plugin pangalan.

-fdump-ada-spec[-payat]
Para sa C at C++ source at isama ang mga file, bumuo ng kaukulang mga spec ng Ada.

-fada-spec-parent=yunit
Kasabay ng -fdump-ada-spec[-payat] sa itaas, bumuo ng mga spec ng Ada bilang mga child unit ng
magulang yunit.

-fdump-go-spec=file
Para sa mga input file sa anumang wika, bumuo ng kaukulang mga deklarasyon sa Go file. ito
bumubuo ng mga deklarasyon ng Go "const", "type", "var", at "func" na maaaring isang kapaki-pakinabang na paraan
upang magsimulang magsulat ng interface ng Go sa code na nakasulat sa ibang wika.

@file
Basahin ang mga opsyon sa command-line mula sa file. Ang mga opsyon na nabasa ay ipinasok sa lugar ng
orihinal @file pagpipilian Kung file ay hindi umiiral, o hindi mababasa, pagkatapos ay ang opsyon
literal na ituturing, at hindi aalisin.

Mga pagpipilian sa file ay pinaghihiwalay ng whitespace. Maaaring may kasamang whitespace na character
sa isang opsyon sa pamamagitan ng pagpapaligid sa buong opsyon sa alinman sa isa o dobleng panipi. Anuman
character (kabilang ang isang backslash) ay maaaring isama sa pamamagitan ng paglalagay ng prefix sa magiging character
kasama ng backslash. Ang file maaaring maglaman ng karagdagang @file mga pagpipilian; anuman
ang mga ganitong opsyon ay ipoproseso nang paulit-ulit.

Pinagsasama-sama C + + Programa
Karaniwang ginagamit ng mga C++ source file ang isa sa mga suffix .C, . Cc, .cpp, .CPP, .c++, .cp, O
.cxx; Madalas na ginagamit ng mga C++ header file .hh, .hpp, .H, o (para sa nakabahaging template code) .tcc, At
Ang mga preprocessed na C++ na file ay gumagamit ng suffix .ii. Kinikilala ng GCC ang mga file na may ganitong mga pangalan at
kino-compile ang mga ito bilang mga programang C++ kahit na tinawag mo ang compiler sa parehong paraan tulad ng para sa pag-compile
C programs (karaniwang may pangalan gcc).

Gayunpaman, ang paggamit ng gcc ay hindi nagdaragdag ng C++ library. g ++ ay isang programa na tumatawag sa GCC at
awtomatikong tumutukoy sa pag-link laban sa C++ library. Ginagamot nito .c, .h at .i mga file bilang
C++ source file sa halip na C source file maliban kung -x Ginagamit. Ang program na ito ay kapaki-pakinabang din
kapag nag-precompile ng isang C header file na may a .h extension para sa paggamit sa C++ compilations. Naka-on
maraming sistema, g ++ ay naka-install din na may pangalan c ++.

Kapag nag-compile ka ng mga programang C++, maaari mong tukuyin ang marami sa parehong mga opsyon sa command-line na
ginagamit mo para sa pag-compile ng mga programa sa anumang wika; o mga opsyon sa command-line na makabuluhan para sa C
at mga kaugnay na wika; o mga opsyon na makabuluhan lamang para sa mga programang C++.

Options Pagkontrol C Dialect
Kinokontrol ng mga sumusunod na opsyon ang diyalekto ng C (o mga wikang nagmula sa C, gaya ng C++,
Objective-C at Objective-C++) na tinatanggap ng compiler:

-ansi
Sa C mode, ito ay katumbas ng -std=c90. Sa C++ mode, ito ay katumbas ng
-std=c++98.

Ino-off nito ang ilang partikular na feature ng GCC na hindi tugma sa ISO C90 (kapag
pag-compile ng C code), o ng karaniwang C++ (kapag nag-compile ng C++ code), gaya ng "asm" at
"typeof" na mga keyword, at mga paunang natukoy na macro gaya ng "unix" at "vax" na tumutukoy sa
uri ng system na iyong ginagamit. Binibigyang-daan din nito ang hindi kanais-nais at bihirang ginagamit na ISO
tampok na trigraph. Para sa C compiler, hindi nito pinapagana ang pagkilala sa istilo ng C++ //
mga komento pati na rin ang "inline" na keyword.

Ang mga kahaliling keyword na "__asm__", "__extension__", "__inline__" at "__typeof__"
patuloy na magtrabaho sa kabila -ansi. Hindi mo nais na gamitin ang mga ito sa isang ISO C program,
siyempre, ngunit kapaki-pakinabang na ilagay ang mga ito sa mga file ng header na maaaring isama sa
compilations tapos na sa -ansi. Mga kahaliling paunang natukoy na macro gaya ng "__unix__" at
Available din ang "__vax__", mayroon man o wala -ansi.

Ang -ansi ang opsyon ay hindi nagiging sanhi ng mga programang hindi ISO na tanggihan nang walang bayad. Para sa
na, -Wpedantic ay kinakailangan bilang karagdagan sa -ansi.

Ang macro na "__STRICT_ANSI__" ay paunang natukoy kapag ang -ansi ginagamit ang opsyon. Ilang header
Maaaring mapansin ng mga file ang macro na ito at pigilin ang pagdedeklara ng ilang partikular na function o pagtukoy
ilang mga macro na hindi tinatawag ng pamantayang ISO; ito ay upang maiwasan ang pakikialam
sa anumang mga program na maaaring gumamit ng mga pangalang ito para sa iba pang mga bagay.

Mga function na karaniwang naka-built in ngunit walang mga semantika na tinukoy ng ISO C (tulad ng
bilang "alloca" at "ffs") ay hindi mga built-in na function kapag -ansi Ginagamit.

-std=
Tukuyin ang pamantayan ng wika. Ang opsyong ito ay kasalukuyang sinusuportahan lamang kapag
pag-compile ng C o C++.

Ang compiler ay maaaring tumanggap ng ilang mga batayang pamantayan, tulad ng c90 or c++98, at mga diyalekto ng GNU
ng mga pamantayang iyon, tulad ng gnu90 or gnu++98. Kapag tinukoy ang isang batayang pamantayan, ang
tumatanggap ang compiler ng lahat ng mga programa na sumusunod sa pamantayang iyon kasama ang mga gumagamit ng mga extension ng GNU
na hindi sumasalungat dito. Halimbawa, -std=c90 pinapatay ang ilang partikular na feature ng GCC
na hindi tugma sa ISO C90, gaya ng "asm" at "typeof" na mga keyword, ngunit hindi
iba pang mga extension ng GNU na walang kahulugan sa ISO C90, tulad ng pagtanggal sa
gitnang termino ng isang "?:" na expression. Sa kabilang banda, kapag ang isang GNU dialect ng isang pamantayan
ay tinukoy, lahat ng mga feature na sinusuportahan ng compiler ay pinagana, kahit na ang mga iyon
binabago ng mga tampok ang kahulugan ng batayang pamantayan. Bilang resulta, ang ilang mahigpit na pagsunod
maaaring tanggihan ang mga programa. Ang partikular na pamantayan ay ginagamit ng -Wpedantic upang makilala
aling mga tampok ang mga extension ng GNU na ibinigay sa bersyong iyon ng pamantayan. Halimbawa
-std=gnu90 -Wpedantic nagbabala tungkol sa istilo ng C++ // komento, habang -std=gnu99 -Wpedantic
ay hindi.

Dapat magbigay ng halaga para sa opsyong ito; posibleng mga halaga ay

c90
c89
iso9899:1990
Suportahan ang lahat ng ISO C90 programs (ilang mga extension ng GNU na sumasalungat sa ISO C90
ay may kapansanan). Katulad ng -ansi para sa C code.

iso9899:199409
ISO C90 na binago sa amendment 1.

c99
c9x
iso9899:1999
iso9899:199x
ISO C99. Ang pamantayang ito ay lubos na sinusuportahan, mga modulo bug at
mga isyu sa floating-point (pangunahin ngunit hindi ganap na nauugnay sa mga opsyonal na feature ng C99
mula sa Annexes F at G). Tingnan mohttp://gcc.gnu.org/c99status.html> para sa higit pa
impormasyon. Ang mga pangalan c9x at iso9899:199x ay hindi na ginagamit.

c11
c1x
iso9899:2011
ISO C11, ang 2011 na rebisyon ng ISO C standard. Ang pamantayang ito ay malaki
ganap na suportado, modulo bug, floating-point na mga isyu (pangunahin ngunit hindi ganap
nauugnay sa mga opsyonal na feature ng C11 mula sa Annexes F at G) at sa opsyonal na Annexes K
(Bounds-checking interface) at L (Analyzability). Ang pangalan c1x ay hindi na ginagamit.

gnu90
gnu89
GNU dialect ng ISO C90 (kabilang ang ilang feature ng C99).

gnu99
gnu9x
GNU dialect ng ISO C99. Ang pangalan gnu9x ay hindi na ginagamit.

gnu11
gnu1x
GNU dialect ng ISO C11. Ito ang default para sa C code. Ang pangalan gnu1x is
hindi na ginagamit.

c++98
c++03
Ang 1998 ISO C++ standard kasama ang 2003 technical corrigendum at ilang karagdagang
mga ulat ng depekto. Katulad ng -ansi para sa C++ code.

gnu++98
gnu++03
GNU dialect ng -std=c++98. Ito ang default para sa C++ code.

c++11
c++0x
Ang 2011 ISO C++ standard plus amendments. Ang pangalan c++0x ay hindi na ginagamit.

gnu++11
gnu++0x
GNU dialect ng -std=c++11. Ang pangalan gnu++0x ay hindi na ginagamit.

c++14
c++1y
Ang 2014 ISO C++ standard plus amendments. Ang pangalan c++1y ay hindi na ginagamit.

gnu++14
gnu++1y
GNU dialect ng -std=c++14. Ang pangalan gnu++1y ay hindi na ginagamit.

c++1z
Ang susunod na rebisyon ng pamantayang ISO C++, pansamantalang binalak para sa 2017. Suporta
ay lubos na pang-eksperimento, at halos tiyak na magbabago sa mga hindi tugmang paraan sa
mga release sa hinaharap.

gnu++1z
GNU dialect ng -std=c++1z. Ang suporta ay lubos na pang-eksperimento, at halos
tiyak na magbabago sa mga hindi tugmang paraan sa mga paglabas sa hinaharap.

-fgnu89-inline
Ang pagpipilian -fgnu89-inline nagsasabi sa GCC na gamitin ang tradisyonal na GNU semantics para sa "inline"
gumagana kapag nasa C99 mode.

Ang paggamit sa opsyong ito ay halos katumbas ng pagdaragdag ng katangian ng function na "gnu_inline".
sa lahat ng inline na function.

Ang pagpipilian -fno-gnu89-inline tahasang sinasabi sa GCC na gamitin ang C99 semantics para sa
"inline" kapag nasa C99 o gnu99 mode (ibig sabihin, tinutukoy nito ang default na gawi). Ito
opsyon ay hindi suportado sa -std=c90 or -std=gnu90 mode.

Maaaring gamitin ang preprocessor macros na "__GNUC_GNU_INLINE__" at "__GNUC_STDC_INLINE__"
upang suriin kung aling mga semantika ang may bisa para sa mga "inline" na function.

-aux-info filename
Output sa ibinigay na filename prototyped deklarasyon para sa lahat ng mga function na ipinahayag at/o
tinukoy sa isang unit ng pagsasalin, kabilang ang mga nasa mga file ng header. Ang pagpipiliang ito ay
tahimik na binabalewala sa anumang wika maliban sa C.

Bukod sa mga deklarasyon, ipinapahiwatig ng file, sa mga komento, ang pinagmulan ng bawat deklarasyon
(source file at linya), kung ang deklarasyon ay implicit, prototype o
unprototyped (I, N para sa bago o O para sa matanda, ayon sa pagkakabanggit, sa unang karakter pagkatapos
ang numero ng linya at ang tutuldok), at kung ito ay nagmula sa isang deklarasyon o isang kahulugan
(C or F, ayon sa pagkakabanggit, sa sumusunod na character). Sa kaso ng pag-andar
kahulugan, isang K&R-style na listahan ng mga argumento na sinusundan ng kanilang mga deklarasyon ay din
ibinigay, sa loob ng mga komento, pagkatapos ng deklarasyon.

-fallow-parameterless-variadic-functions
Tanggapin ang mga variadic function na walang pinangalanang mga parameter.

Bagama't posibleng tukuyin ang gayong function, hindi ito masyadong kapaki-pakinabang
hindi posible na basahin ang mga argumento. Ito ay sinusuportahan lamang para sa C dahil ang construct na ito ay
pinapayagan ng C++.

-fno-asm
Huwag kilalanin ang "asm", "inline" o "typeof" bilang isang keyword, upang magamit ng code ang mga ito
mga salita bilang pantukoy. Maaari mong gamitin ang mga keyword na "__asm__", "__inline__" at
"__typeof__" sa halip. -ansi nagpapahiwatig -fno-asm.

Sa C++, ang switch na ito ay nakakaapekto lamang sa "typeof" na keyword, dahil ang "asm" at "inline" ay
karaniwang mga keyword. Baka gusto mong gamitin ang -fno-gnu-mga keyword bandila sa halip, na mayroon
ang parehong epekto. Sa C99 mode (-std=c99 or -std=gnu99), ang switch na ito ay nakakaapekto lamang sa
"asm" at "typeof" na mga keyword, dahil ang "inline" ay isang karaniwang keyword sa ISO C99.

-fno-buitin
-fno-built-tungkulin
Huwag makilala ang mga built-in na function na hindi nagsisimula sa __buitin_ bilang unlapi.

Karaniwang bumubuo ang GCC ng espesyal na code para pangasiwaan ang ilang partikular na built-in na function
mahusay; halimbawa, ang mga tawag sa "alloca" ay maaaring maging mga iisang tagubilin na
direktang ayusin ang stack, at ang mga tawag sa "memcpy" ay maaaring maging inline na mga loop ng kopya. Ang
ang resultang code ay madalas na parehong mas maliit at mas mabilis, ngunit dahil ang function ay tumatawag sa no
mas matagal na lumalabas bilang ganoon, hindi ka makakapagtakda ng breakpoint sa mga tawag na iyon, at hindi ka rin makapagbabago
ang pag-uugali ng mga function sa pamamagitan ng pag-link sa ibang library. Bilang karagdagan, kapag
ang isang function ay kinikilala bilang isang built-in na function, GCC ay maaaring gumamit ng impormasyon tungkol doon
function upang balaan ang tungkol sa mga problema sa mga tawag sa function na iyon, o upang makabuo ng higit pa
mahusay na code, kahit na ang resultang code ay naglalaman pa rin ng mga tawag sa function na iyon. Para sa
halimbawa, ang mga babala ay ibinigay kasama ng -Wformat para sa masamang tawag sa "printf" kapag "printf" ay
built in at "strlen" ay kilala na hindi nagbabago ng pandaigdigang memorya.

Kasama ang -fno-built-tungkulin opsyon lamang ang built-in na function tungkulin ay hindi pinagana.
tungkulin hindi dapat magsimula sa __buitin_. Kung ang isang function ay pinangalanan na hindi built-in
sa bersyong ito ng GCC, binabalewala ang opsyong ito. Walang katumbas
-fbuitin-tungkulin opsyon; kung nais mong paganahin ang mga built-in na function nang pili kung kailan
paggamit -fno-buitin or -pagkakasundo, maaari mong tukuyin ang mga macro gaya ng:

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

-fhosted
Igiit na ang compilation ay nagta-target ng isang naka-host na kapaligiran. Ito ay nagpapahiwatig -fbuitin. Ang
ang naka-host na kapaligiran ay isa kung saan magagamit ang buong karaniwang aklatan, at sa
kung aling "pangunahing" ang may uri ng pagbabalik ng "int". Ang mga halimbawa ay halos lahat maliban sa a
kernel. Ito ay katumbas ng -fno-freestanding.

-pagkakasundo
Igiit na ang compilation ay nagta-target ng isang freestanding na kapaligiran. Ito ay nagpapahiwatig
-fno-buitin. Ang isang freestanding na kapaligiran ay isa kung saan ang karaniwang aklatan ay maaaring hindi
umiiral, at ang pagsisimula ng programa ay maaaring hindi kinakailangang nasa "pangunahing". Ang pinaka-halatang halimbawa
ay isang OS kernel. Ito ay katumbas ng -fno-host.

-fopenacc
I-enable ang pangangasiwa sa mga direktiba ng OpenACC na "#pragma acc" sa C/C++ at "!$acc" sa Fortran.
Kailan -fopenacc ay tinukoy, ang compiler ay bumubuo ng pinabilis na code ayon sa
OpenACC Application Programming Interface v2.0http://www.openacc.org/>. Ang pagpipiliang ito
nagpapahiwatig -pthread, at sa gayon ay sinusuportahan lamang sa mga target na may suporta para sa
-pthread.

Tandaan na isa itong pang-eksperimentong feature, hindi kumpleto, at maaaring magbago sa hinaharap
mga bersyon ng GCC. Tingnan mohttps://gcc.gnu.org/wiki/OpenACC> para sa karagdagang impormasyon.

-fopenmp
I-enable ang pangangasiwa sa mga direktiba ng OpenMP na "#pragma omp" sa C/C++ at "!$omp" sa Fortran.
Kailan -fopenmp ay tinukoy, ang compiler ay bumubuo ng parallel code ayon sa
OpenMP Application Program Interface v4.0http://www.openmp.org/>. Ang pagpipiliang ito
nagpapahiwatig -pthread, at sa gayon ay sinusuportahan lamang sa mga target na may suporta para sa
-pthread. -fopenmp nagpapahiwatig -fopenmp-simd.

-fopenmp-simd
Paganahin ang pangangasiwa sa mga direktiba ng SIMD ng OpenMP gamit ang "#pragma omp" sa C/C++ at "!$omp" sa
Fortran. Binabalewala ang ibang mga direktiba ng OpenMP.

-fcilkplus
I-enable ang paggamit ng mga feature ng extension ng wika ng Cilk Plus para sa C/C++. Kapag ang pagpipilian
-fcilkplus ay tinukoy, paganahin ang paggamit ng mga feature ng extension ng Cilk Plus Language
para sa C/C++. Ang kasalukuyang pagpapatupad ay sumusunod sa bersyon 1.2 ng ABI. Ito ay isang
pang-eksperimentong feature na bahagyang kumpleto lang, at maaaring magbago ang interface
sa mga hinaharap na bersyon ng GCC habang nagbabago ang opisyal na detalye. Sa kasalukuyan, lahat
mga tampok ngunit ang "_Cilk_for" ay ipinatupad.

-fgnu-tm
Kapag ang pagpipilian -fgnu-tm ay tinukoy, ang compiler ay bumubuo ng code para sa Linux
variant ng kasalukuyang Transactional Memory ABI na dokumento ng detalye ng Intel (Revision
1.1, Mayo 6 2009). Isa itong pang-eksperimentong feature na maaaring magbago ang interface
mga bersyon sa hinaharap ng GCC, habang nagbabago ang opisyal na detalye. Mangyaring tandaan na hindi
lahat ng mga arkitektura ay suportado para sa tampok na ito.

Para sa higit pang impormasyon sa suporta ng GCC para sa transactional memory,

Tandaan na ang feature na transactional memory ay hindi suportado ng mga non-call exception
(-fnon-call-exceptions).

-fms-extension
Tanggapin ang ilang hindi karaniwang mga konstruksyon na ginagamit sa mga file ng header ng Microsoft.

Sa C++ code, pinapayagan nito ang mga pangalan ng miyembro sa mga istruktura na maging katulad ng mga nakaraang uri
mga deklarasyon.

typedef int UOW;
struct ABC {
UOW UOW;
};

Ang ilang mga kaso ng hindi pinangalanang mga field sa mga istruktura at unyon ay tinatanggap lamang kasama nito
pagpipilian.

Tandaan na naka-off ang opsyong ito para sa lahat ng target ngunit x86 na mga target gamit ang ms-abi.

-fplan9-extension
Tanggapin ang ilang hindi karaniwang konstruksyon na ginamit sa Plan 9 code.

Ito ay nagbibigay-daan -fms-extension, pinahihintulutan ang pagpasa ng mga pointer sa mga istrukturang may anonymous
field sa mga function na umaasa sa mga pointer sa mga elemento ng uri ng field, at
mga permit na tumutukoy sa mga hindi kilalang field na ipinahayag gamit ang isang typedef. Ito ay lamang
suportado para sa C, hindi C++.

-trigraphs
Suportahan ang mga ISO C trigraph. Ang -ansi opsyon (at -std mga opsyon para sa mahigpit na ISO C
conformance) ay nagpapahiwatig -trigraphs.

-tradisyonal
-tradisyonal-cpp
Dati, ang mga opsyong ito ay naging dahilan upang subukan ng GCC na tularan ang isang pre-standard na C compiler.
Sila ngayon ay sinusuportahan lamang ng -E lumipat. Ang preprocessor ay patuloy na sumusuporta
isang pre-standard na mode. Tingnan ang manual ng GNU CPP para sa mga detalye.

-fcond-mismatch
Payagan ang mga conditional na expression na may mga hindi tugmang uri sa pangalawa at pangatlong argumento.
Ang halaga ng naturang pagpapahayag ay walang bisa. Ang opsyon na ito ay hindi suportado para sa C++.

-flax-vector-conversions
Payagan ang mga implicit na conversion sa pagitan ng mga vector na may magkakaibang bilang ng mga elemento at/o
hindi tugmang mga uri ng elemento. Hindi dapat gamitin ang opsyong ito para sa bagong code.

-funsigned-char
Hayaan ang uri na "char" na hindi naka-sign, tulad ng "unsigned char".

Ang bawat uri ng makina ay may default para sa kung ano dapat ang "char". Ito ay alinman sa
"unsigned char" bilang default o gaya ng "signed char" bilang default.

Sa isip, ang isang portable na programa ay dapat palaging gumamit ng "signed char" o "unsigned char" kapag ito
depende sa signedness ng isang bagay. Ngunit maraming mga programa ang isinulat upang gamitin
plain "char" at asahan na ito ay lalagdaan, o asahan na ito ay hindi pirmado, depende sa
mga makina kung saan sila isinulat. Ang pagpipiliang ito, at ang kabaligtaran nito, ay nagbibigay-daan sa iyong gumawa ng ganoong a
gumagana ang program na may kabaligtaran na default.

Ang uri na "char" ay palaging isang natatanging uri mula sa bawat isa sa "signed char" o "unsigned
char", kahit na ang ugali nito ay palaging katulad ng isa sa dalawang iyon.

-fsigned-char
Hayaang mapirmahan ang uri na "char", tulad ng "signed char".

Tandaan na ito ay katumbas ng -fno-unsigned-char, na negatibong anyo ng
-funsigned-char. Gayundin, ang pagpipilian -fno-sign-char ay katumbas ng
-funsigned-char.

-fsigned-bitfields
-funsigned-bitfields
-fno-sign-bitfields
-fno-unsigned-bitfields
Kinokontrol ng mga opsyong ito kung ang isang bit-field ay nilagdaan o hindi nalagdaan, kapag ang deklarasyon
ay hindi gumagamit ng alinman sa "nalagdaan" o "hindi nalagdaan". Bilang default, ang naturang bit-field ay nilagdaan,
dahil pare-pareho ito: ang mga pangunahing uri ng integer gaya ng "int" ay mga naka-sign na uri.

Options Pagkontrol C + + Dialect
Inilalarawan ng seksyong ito ang mga opsyon sa command-line na makabuluhan lamang para sa mga programang C++.
Maaari mo ring gamitin ang karamihan sa mga opsyon ng GNU compiler anuman ang wika ng iyong programa
ay nasa. Halimbawa, maaari kang mag-compile ng file unang Klase.C ganito:

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

Sa halimbawang ito, lamang -frepo ay isang opsyon para lamang sa mga C++ program; maaari mong gamitin ang
iba pang mga opsyon sa anumang wikang sinusuportahan ng GCC.

Narito ang isang listahan ng mga opsyon na lamang para sa pag-compile ng mga programang C++:

-fabi-bersyon=n
Gumamit ng bersyon n ng C++ ABI. Ang default ay bersyon 0.

Ang Bersyon 0 ay tumutukoy sa bersyon na pinaka-malapit sa pagtutukoy ng C++ ABI.
Samakatuwid, ang ABI na nakuha gamit ang bersyon 0 ay magbabago sa iba't ibang bersyon ng G++
bilang ABI bug ay naayos na.

Ang Bersyon 1 ay ang bersyon ng C++ ABI na unang lumabas sa G++ 3.2.

Ang Bersyon 2 ay ang bersyon ng C++ ABI na unang lumabas sa G++ 3.4, at ang
default sa pamamagitan ng G++ 4.9.

Itinutuwid ng Bersyon 3 ang isang error sa pag-mangling ng isang pare-parehong address bilang argumento ng template.

Ang Bersyon 4, na unang lumabas sa G++ 4.5, ay nagpapatupad ng karaniwang mangling para sa vector
mga uri.

Bersyon 5, na unang lumabas sa G++ 4.6, ay nagwawasto sa mangling ng attribute
const/volatile sa mga uri ng function pointer, decltype ng isang plain decl, at paggamit ng a
function na parameter sa deklarasyon ng isa pang parameter.

Ang Bersyon 6, na unang lumabas sa G++ 4.7, ay nagwawasto sa pag-uugali ng promosyon ng C++11
scoped enums at ang mangling ng template argument pack, const/static_cast, prefix ++
at --, at isang function na saklaw ng klase na ginamit bilang argumento ng template.

Bersyon 7, na unang lumabas sa G++ 4.8, na tinatrato ang nullptr_t bilang isang builtin na uri
at itinatama ang mangling ng lambdas sa default na saklaw ng argumento.

Bersyon 8, na unang lumabas sa G++ 4.9, ay nagwawasto sa pag-uugali ng pagpapalit ng
mga uri ng function na may mga function-cv-qualifier.

Tingnan din -Wabi.

-fabi-compat-version=n
Sa mga target na sumusuporta sa malalakas na alyas, ang G++ ay gumagawa sa paligid ng mga pagbabago sa pamamagitan ng paggawa
isang alyas na may tamang sira na pangalan kapag tinukoy ang isang simbolo na may mali
sira na pangalan. Tinutukoy ng switch na ito kung aling bersyon ng ABI ang gagamitin para sa alias.

may -fabi-bersyon=0 (ang default), ito ay magiging default sa 2. Kung ang isa pang bersyon ng ABI ay
tahasang pinili, ito ay nagde-default sa 0.

Ang bersyon ng pagiging tugma ay itinakda din ni -Wabi=n.

-fno-access-control
I-off ang lahat ng pagsuri sa pag-access. Ang switch na ito ay pangunahing kapaki-pakinabang para sa pag-aayos ng mga bug
ang access control code.

-fcheck-bago
Suriin na ang pointer na ibinalik ng "operator new" ay hindi null bago subukan
baguhin ang inilaan na imbakan. Ang pagsusuring ito ay karaniwang hindi kailangan dahil ang C++
Ang pamantayan ay tumutukoy na ang "bagong operator" ay nagbabalik lamang ng 0 kung ito ay idineklara na "throw()", sa
na kung saan ang compiler ay palaging sinusuri ang return value kahit na wala ang pagpipiliang ito. Sa
lahat ng iba pang mga kaso, kapag ang "bagong operator" ay may hindi walang laman na detalye ng pagbubukod, memorya
ang pagkahapo ay hudyat ng paghahagis ng "std::bad_alloc". Tingnan din bago (nothrow).

-fconstexpr-depth=n
Itakda ang maximum na nested evaluation depth para sa C++11 constexpr function sa n. Isang limitasyon
ay kinakailangan upang makita ang walang katapusang recursion sa panahon ng patuloy na pagsusuri ng expression. Ang
minimum na tinukoy ng pamantayan ay 512.

-fdeduce-init-list
Paganahin ang pagbabawas ng isang parameter ng uri ng template bilang "std::initializer_list" mula sa isang brace-
nakapaloob na listahan ng initializer, ibig sabihin

template auto forward(T t) -> decltype (realfn (t))
{
bumalik realfn (t);
}

walang bisa f()
{
pasulong ({1,2}); // call forward >
}

Ang bawas na ito ay ipinatupad bilang posibleng pagpapalawig sa orihinal na iminungkahing
semantics para sa pamantayang C++11, ngunit hindi bahagi ng panghuling pamantayan, kaya nga
hindi pinagana bilang default. Hindi na ginagamit ang opsyong ito, at maaaring alisin sa hinaharap
bersyon ng G++.

-ffriend-injection
Mag-inject ng mga function ng kaibigan sa nakapaloob na namespace, upang makita ang mga ito sa labas
ang saklaw ng klase kung saan sila idineklara. Naidokumento ang mga function ng kaibigan
upang gumana sa ganitong paraan sa lumang Annotated C++ Reference Manual. Gayunpaman, sa ISO C++ a
ang function ng kaibigan na hindi idineklara sa isang nakapaloob na saklaw ay makikita lamang gamit
paghahanap na nakasalalay sa argumento. Nagde-default ang GCC sa karaniwang gawi.

Ang opsyong ito ay para sa compatibility, at maaaring alisin sa hinaharap na release ng G++.

-fno-elide-constructors
Ang pamantayan ng C++ ay nagbibigay-daan sa isang pagpapatupad na alisin ang paggawa ng pansamantalang iyon lamang
ginagamit upang simulan ang isa pang bagay na may parehong uri. Ang pagtukoy sa opsyong ito ay hindi pinapagana
ang pag-optimize na iyon, at pinipilit ang G++ na tawagan ang tagabuo ng kopya sa lahat ng kaso.

-fno-enforce-eh-specs
Huwag bumuo ng code upang tingnan kung may paglabag sa mga detalye ng pagbubukod sa oras ng pagtakbo.
Ang pagpipiliang ito ay lumalabag sa pamantayan ng C++, ngunit maaaring maging kapaki-pakinabang para sa pagbabawas ng laki ng code sa
pagbuo ng produksyon, katulad ng pagtukoy sa "NDEBUG". Hindi ito nagbibigay ng user code
pahintulot na magtapon ng mga eksepsiyon na lumalabag sa mga detalye ng pagbubukod; ang
nag-optimize pa rin ang compiler batay sa mga pagtutukoy, kaya naghagis ng hindi inaasahang
Ang pagbubukod ay nagreresulta sa hindi natukoy na pag-uugali sa oras ng pagtakbo.

-fextern-tls-init
-fno-extern-tls-init
Ang mga pamantayan ng C++11 at OpenMP ay nagbibigay-daan sa mga variable na "thread_local" at "threadprivate" na
magkaroon ng dynamic (runtime) initialization. Upang suportahan ito, anumang paggamit ng naturang variable
dumadaan sa isang function ng wrapper na nagsasagawa ng anumang kinakailangang pagsisimula. Kapag ang
Ang paggamit at kahulugan ng variable ay nasa parehong unit ng pagsasalin, maaari itong overhead
ma-optimize, ngunit kapag ang paggamit ay nasa ibang unit ng pagsasalin, mayroon
makabuluhang overhead kahit na ang variable ay hindi talaga nangangailangan ng dynamic
pagpapasimula. Kung ang programmer ay makatitiyak na walang paggamit ng variable sa isang hindi-
ang pagtukoy sa TU ay kailangang mag-trigger ng dynamic na pagsisimula (alinman dahil ang variable ay
statically initialized, o isang paggamit ng variable sa pagtukoy sa TU ay isasagawa
bago ang anumang paggamit sa ibang TU), maiiwasan nila ang overhead na ito gamit ang
-fno-extern-tls-init pagpipilian.

Sa mga target na sumusuporta sa mga alias ng simbolo, ang default ay -fextern-tls-init. Sa mga target
na hindi sumusuporta sa mga alias ng simbolo, ang default ay -fno-extern-tls-init.

-para sa saklaw
-fno-para sa saklaw
If -para sa saklaw ay tinukoy, ang saklaw ng mga variable na ipinahayag sa a para-init-pahayag
ay limitado sa "para sa" loop mismo, tulad ng tinukoy ng pamantayan ng C++. Kung
-fno-para sa saklaw ay tinukoy, ang saklaw ng mga variable na ipinahayag sa a para-init-pahayag
umaabot hanggang sa dulo ng nakapaloob na saklaw, tulad ng nangyari sa mga lumang bersyon ng G++, at
iba pang (tradisyonal) na pagpapatupad ng C++.

Kung walang ibinigay na flag, ang default ay sundin ang pamantayan, ngunit payagan at ibigay
isang babala para sa lumang istilong code na kung hindi man ay hindi wasto, o may iba
pag-uugali.

-fno-gnu-mga keyword
Huwag kilalanin ang "typeof" bilang isang keyword, para magamit ng code ang salitang ito bilang isang
identifier. Maaari mong gamitin ang keyword na "__typeof__" sa halip. -ansi nagpapahiwatig
-fno-gnu-mga keyword.

-fno-implicit-templates
Huwag kailanman maglalabas ng code para sa mga non-inline na template na implicited (ibig sabihin, ni
gamitin); naglalabas lamang ng code para sa mga tahasang instantiations.

-fno-implicit-inline-templates
Huwag maglabas ng code para sa mga implicit na instantiation ng mga inline na template, alinman. Ang default
ay upang pangasiwaan ang mga inline sa ibang paraan upang mag-compile nang may at walang pangangailangan sa pag-optimize
ang parehong hanay ng mga tahasang instantiation.

-fno-implement-inlines
Upang makatipid ng espasyo, huwag maglabas ng mga out-of-line na kopya ng mga inline na function na kinokontrol ng
"Pagpapatupad ng #pragma". Nagdudulot ito ng mga error sa linker kung hindi ang mga function na ito
inline kung saan man sila tinatawag.

-fms-extension
Huwag paganahin ang mga babala ng Wpedantic tungkol sa mga construct na ginagamit sa MFC, gaya ng implicit int at
pagkuha ng pointer sa function ng miyembro sa pamamagitan ng hindi karaniwang syntax.

-fno-nonansi-builtins
I-disable ang mga built-in na deklarasyon ng mga function na hindi ipinag-uutos ng ANSI/ISO C. Ang mga ito
isama ang "ffs", "alloca", "_exit", "index", "bzero", "conjf", at iba pang nauugnay
function.

-fnothrow-opt
Tratuhin ang isang "throw()" na detalye ng pagbubukod na parang ito ay isang "noexcept" na detalye sa
bawasan o alisin ang laki ng teksto sa itaas na nauugnay sa isang function na walang pagbubukod
espesipikasyon. Kung ang function ay may mga lokal na variable ng mga uri na may non-trivial
mga destructors, ang detalye ng pagbubukod ay talagang ginagawang mas maliit ang function dahil
ang mga EH cleanup para sa mga variable na iyon ay maaaring i-optimize. Ang semantikong epekto ay
na ang isang exception na itinapon sa labas ng isang function na may tulad ng isang exception na detalye
nagreresulta sa isang tawag na "tapusin" sa halip na "hindi inaasahang".

-fno-operator-pangalan
Huwag ituring ang mga keyword ng pangalan ng operator na "at", "bitand", "bitor", "compl", "hindi", "o"
at "xor" bilang kasingkahulugan bilang mga keyword.

-fno-optional-diags
Huwag paganahin ang mga diagnostic na sinasabi ng pamantayan na hindi kailangang ilabas ng isang compiler.
Sa kasalukuyan, ang tanging naturang diagnostic na ibinigay ng G++ ay ang isa para sa pagkakaroon ng isang pangalan
maraming kahulugan sa loob ng isang klase.

-mapagpasensya
I-downgrade ang ilang diagnostic tungkol sa nonconformant code mula sa mga error patungo sa mga babala. kaya,
paggamit -mapagpasensya nagbibigay-daan sa ilang hindi sumusunod na code na mag-compile.

-fno-pretty-templates
Kapag ang isang mensahe ng error ay tumutukoy sa isang espesyalisasyon ng isang function na template, ang compiler
karaniwang nagpi-print ng lagda ng template na sinusundan ng mga argumento ng template at
anumang mga typedef o typename sa lagda (hal. "void f(T) [with T = int]" sa halip
kaysa sa "void f(int)") para malinaw kung aling template ang kasangkot. Kapag may error
Ang mensahe ay tumutukoy sa isang espesyalisasyon ng isang template ng klase, ang compiler ay nag-aalis ng anuman
mga argumento ng template na tumutugma sa mga default na argumento ng template para sa template na iyon. Kung
alinman sa mga gawi na ito ay nagpapahirap na maunawaan ang mensahe ng error kaysa
mas madali, magagamit mo -fno-pretty-templates upang huwag paganahin ang mga ito.

-frepo
Paganahin ang awtomatikong instantiation ng template sa oras ng pag-link. Ang pagpipiliang ito ay nagpapahiwatig din
-fno-implicit-templates.

-fno-rtti
Huwag paganahin ang pagbuo ng impormasyon tungkol sa bawat klase na may mga virtual na function para magamit ni
ang C++ run-time type identification features ("dynamic_cast" at "typeid"). kung ikaw
huwag gamitin ang mga bahaging iyon ng wika, makakatipid ka ng kaunting espasyo sa pamamagitan ng paggamit ng bandilang ito.
Tandaan na ang paghawak ng exception ay gumagamit ng parehong impormasyon, ngunit binubuo ito ng G++ bilang
kailangan. Magagamit pa rin ang operator na "dynamic_cast" para sa mga cast na hindi nangangailangan
impormasyon ng uri ng run-time, ibig sabihin, nag-cast sa "void *" o sa hindi malabo na mga base class.

-fsized-deallocation
Paganahin ang built-in na mga pandaigdigang deklarasyon

void operator tanggalin (void *, std::size_t) noexcept;
void operator tanggalin [] (void *, std::size_t) noexcept;

gaya ng ipinakilala sa C++14. Ito ay kapaki-pakinabang para sa tinukoy ng user na kapalit na deallocation
mga function na, halimbawa, ay gumagamit ng laki ng bagay upang gawing mas mabilis ang deallocation.
Pinagana bilang default sa ilalim -std=c++14 at sa itaas. Ang bandila -Wsized-deallocation warns
tungkol sa mga lugar na maaaring gustong magdagdag ng kahulugan.

-fstats
Maglabas ng mga istatistika tungkol sa front-end na pagproseso sa dulo ng compilation. Ito
Ang impormasyon sa pangkalahatan ay kapaki-pakinabang lamang sa pangkat ng pagbuo ng G++.

-fstrict-enums
Pahintulutan ang compiler na mag-optimize gamit ang pagpapalagay na isang halaga ng enumerated type
maaari lamang maging isa sa mga halaga ng enumeration (tulad ng tinukoy sa pamantayan ng C++;
karaniwang, isang halaga na maaaring kinakatawan sa pinakamababang bilang ng mga bit na kailangan
kumakatawan sa lahat ng mga enumerator). Maaaring hindi wasto ang pagpapalagay na ito kung gumagamit ang program
isang cast upang i-convert ang isang arbitrary na halaga ng integer sa enumerated na uri.

-ftemplate-backtrace-limit=n
Itakda ang maximum na bilang ng template instantiation notes para sa isang babala o error
sa n. Ang default na halaga ay 10.

-ftemplate-depth=n
Itakda ang maximum na lalim ng instantiation para sa mga klase ng template n. Isang limitasyon sa
kailangan ang lalim ng instantiation ng template para matukoy ang walang katapusang recursion sa panahon ng template
instantiation ng klase. Ang mga programang sumusunod sa ANSI/ISO C++ ay hindi dapat umasa sa maximum
depth na higit sa 17 (binago sa 1024 sa C++11). Ang default na halaga ay 900, bilang ang
maaaring maubusan ng stack space ang compiler bago maabot ang 1024 sa ilang sitwasyon.

-fno-threadsafe-statics
Huwag maglabas ng dagdag na code para magamit ang mga gawaing tinukoy sa C++ ABI para sa thread-
ligtas na pagsisimula ng mga lokal na static. Maaari mong gamitin ang opsyong ito upang bawasan ang laki ng code
bahagyang nasa code na hindi kailangang maging thread-safe.

-fuse-cxa-atexit
Magrehistro ng mga destructor para sa mga bagay na may static na tagal ng imbakan gamit ang "__cxa_atexit"
function sa halip na ang function na "atexit". Ang pagpipiliang ito ay kinakailangan para sa ganap
pagsunod sa mga pamantayan sa paghawak ng mga static na destructors, ngunit gagana lamang kung ang iyong C library
sumusuporta sa "__cxa_atexit".

-fno-use-cxa-get-exception-ptr
Huwag gamitin ang "__cxa_get_exception_ptr" runtime routine. Ito ay nagiging sanhi
"std::uncaught_exception" ay hindi tama, ngunit kinakailangan kung ang runtime routine ay
hindi magagamit.

-fvisibility-inlines-hidden
Ipinapahayag ng switch na ito na hindi sinusubukan ng user na ihambing ang mga pointer sa inline
function o pamamaraan kung saan ang mga address ng dalawang function ay kinuha sa magkaibang
nakabahaging mga bagay.

Ang epekto nito ay maaaring, epektibong markahan ng GCC ang mga inline na pamamaraan sa
"__attribute__ ((visibility ("nakatago")))" para hindi lumabas ang mga ito sa export
talahanayan ng isang DSO at hindi nangangailangan ng PLT indirection kapag ginamit sa loob ng DSO.
Ang pagpapagana sa opsyong ito ay maaaring magkaroon ng malaking epekto sa mga oras ng pag-load at pag-link ng isang DSO tulad nito
malawakang binabawasan ang laki ng dynamic na export table kapag naging mabigat ang library
paggamit ng mga template.

Ang pag-uugali ng switch na ito ay hindi katulad ng pagmamarka sa mga pamamaraan bilang nakatago
direkta, dahil hindi ito nakakaapekto sa mga static na variable na lokal sa function o sanhi
ang compiler upang ihinuha na ang function ay tinukoy sa isang nakabahaging bagay lamang.

Maaari mong markahan ang isang paraan bilang may tahasang pagpapakita upang pawalang-bisa ang epekto ng
lumipat para sa pamamaraang iyon. Halimbawa, kung gusto mong ihambing ang mga pointer sa a
partikular na inline na paraan, maaari mo itong markahan bilang may default na visibility. Pagmamarka ng
Ang pagsasama ng klase na may tahasang visibility ay walang epekto.

Ang mga tahasang ginawang inline na pamamaraan ay hindi naaapektuhan ng opsyong ito bilang linkage ng mga ito
maaaring tumawid sa isang nakabahaging hangganan ng library.

-fvisibility-ms-compat
Sinusubukan ng flag na ito na gumamit ng mga setting ng visibility para gawin ang C++ linkage model ng GCC
tugma sa Microsoft Visual Studio.

Ginagawa ng flag ang mga pagbabagong ito sa modelo ng linkage ng GCC:

1. Itinatakda nito ang default na visibility sa "nakatago", tulad ng -fvisibility=hidden.

2. Ang mga uri, ngunit hindi ang kanilang mga miyembro, ay hindi nakatago bilang default.

3. Ang One Definition Rule ay maluwag para sa mga uri na walang tahasang visibility
mga pagtutukoy na tinukoy sa higit sa isang nakabahaging bagay: ang mga deklarasyon na iyon
ay pinahihintulutan kung pinahihintulutan ang mga ito kapag hindi ginagamit ang opsyong ito.

Sa bagong code ito ay mas mahusay na gamitin -fvisibility=hidden at i-export ang mga klase na iyon
nilayon upang makita sa labas. Sa kasamaang palad, posibleng umasa ang code,
marahil hindi sinasadya, sa pag-uugali ng Visual Studio.

Kabilang sa mga kahihinatnan ng mga pagbabagong ito ay ang mga static na miyembro ng data ng parehong uri
na may parehong pangalan ngunit tinukoy sa iba't ibang mga shared object ay iba, kaya nagbabago
hindi binabago ng isa ang isa; at na tumuturo sa mga function na miyembro na tinukoy sa
iba't ibang mga nakabahaging bagay ay maaaring hindi magkatulad. Kapag ang watawat na ito ay ibinigay, ito ay a
paglabag sa ODR upang tukuyin ang mga uri na may parehong pangalan sa ibang paraan.

-fvtable-verify=[std|preinit|wala]
I-on (o i-off, kung ginagamit -fvtable-verify=wala) ang tampok na panseguridad na nagbe-verify sa
run time, para sa bawat virtual na tawag, na ang vtable pointer kung saan ang tawag ay
ang ginawa ay wasto para sa uri ng bagay, at hindi na-corrupt o na-overwrite.
Kung ang isang di-wastong vtable pointer ay nakita sa oras ng pagtakbo, isang error ang iuulat at
ang pagpapatupad ng programa ay agad na itinigil.

Ang pagpipiliang ito ay nagiging sanhi ng mga istruktura ng data ng run-time na mabuo sa pagsisimula ng programa, na kung saan ay
ginagamit para sa pag-verify ng mga vtable pointer. Ang mga pagpipilian std at preinit kontrolin ang
timing kung kailan binuo ang mga istruktura ng data na ito. Sa parehong mga kaso, ang mga istruktura ng data ay
binuo bago ang pagpapatupad ay umabot sa "pangunahing". Gamit -fvtable-verify=std nagiging sanhi ng data
mga istrukturang gagawin pagkatapos ma-load at masimulan ang mga shared library.
-fvtable-verify=preinit nagiging sanhi ng mga ito na maitayo bago pa ang mga nakabahaging aklatan
na-load at nasimulan.

Kung ang pagpipiliang ito ay lilitaw nang maraming beses sa command line na may iba't ibang mga halaga
tinukoy, wala tumatagal ng pinakamataas na priyoridad sa pareho std at preinit; preinit tumatagal
priority over std.

-fvtv-debug
Kapag ginamit kasabay ng -fvtable-verify=std or -fvtable-verify=preinit, nagiging sanhi
i-debug ang mga bersyon ng runtime function para sa vtable verification feature
tinawag. Ang flag na ito ay nagiging sanhi din ng compiler na mag-log ng impormasyon tungkol sa kung aling vtable
mga payo na makikita nito para sa bawat klase. Ang impormasyong ito ay nakasulat sa isang file na pinangalanan
vtv_set_ptr_data.log sa direktoryo na pinangalanan ng variable ng kapaligiran VTV_LOGS_DIR
kung iyon ay tinukoy o ang kasalukuyang gumaganang direktoryo kung hindi man.

Tandaan: Ang tampok na ito append data sa log file. Kung gusto mo ng bagong log file, maging
siguraduhing tanggalin ang anumang umiiral na.

-fvtv-bilang
Isa itong debugging flag. Kapag ginamit kasabay ng -fvtable-verify=std or
-fvtable-verify=preinit, nagiging sanhi ito ng compiler na subaybayan ang kabuuang bilang ng
mga virtual na tawag na nakatagpo nito at ang bilang ng mga pagpapatunay na ipinapasok nito. Ito rin
binibilang ang bilang ng mga tawag sa ilang run-time na function ng library na ipinapasok at
nila-log ang impormasyong ito para sa bawat unit ng compilation. Sinusulat ng compiler ang impormasyong ito
sa isang file na pinangalanan vtv_count_data.log sa direktoryo na pinangalanan ng variable ng kapaligiran
VTV_LOGS_DIR kung iyon ay tinukoy o ang kasalukuyang gumaganang direktoryo kung hindi man. Ito rin
binibilang ang laki ng vtable pointer set para sa bawat klase, at isinusulat ang impormasyong ito
sa vtv_class_set_sizes.log sa parehong direktoryo.

Tandaan: Ang tampok na ito append data sa mga log file. Upang makakuha ng mga bagong log file, siguraduhing
tanggalin ang anumang mga umiiral na.

-fno-mahina
Huwag gumamit ng mahinang suporta sa simbolo, kahit na ito ay ibinigay ng linker. Bilang default, G++
gumagamit ng mga mahihinang simbolo kung magagamit ang mga ito. Ang pagpipiliang ito ay umiiral lamang para sa pagsubok, at
hindi dapat gamitin ng mga end-user; nagreresulta ito sa mababang code at walang mga benepisyo.
Maaaring alisin ang opsyong ito sa hinaharap na release ng G++.

-nostdinc++
Huwag maghanap ng mga file ng header sa mga karaniwang direktoryo na partikular sa C++, ngunit gawin mo
hanapin pa rin ang iba pang karaniwang mga direktoryo. (Ginagamit ang opsyong ito kapag binubuo ang
C++ library.)

Bilang karagdagan, ang mga opsyon sa pag-optimize, babala, at pagbuo ng code na ito ay may mga kahulugan lamang
para sa mga programang C++:

-Wabi (C, Objective-C, C++ at Objective-C++ lang)
Kapag ang isang tahasang -fabi-bersyon=n ginagamit ang opsyon, nagiging sanhi ng pagbabala ng G++ kapag nabuo ito
code na malamang na hindi tugma sa vendor-neutral na C++ ABI. Since G++ ngayon
default sa -fabi-bersyon=0, -Wabi ay walang epekto maliban kung alinman sa isang mas lumang bersyon ng ABI ay
pinili (kasama ang -fabi-bersyon=n) o isang mas lumang bersyon ng compatibility ay pinili (na may
-Wabi=n or -fabi-compat-version=n).

Bagama't ang pagsisikap ay ginawa upang bigyan ng babala ang tungkol sa lahat ng gayong mga kaso, malamang na may ilan
mga kaso na hindi binigyan ng babala, kahit na ang G++ ay bumubuo ng hindi tugmang code.
Maaaring mayroon ding mga kaso kung saan ang mga babala ay inilalabas kahit na ang code na iyon
ang nabuo ay magkatugma.

Dapat mong muling isulat ang iyong code upang maiwasan ang mga babalang ito kung nag-aalala ka tungkol sa
katotohanan na ang code na nabuo ng G++ ay maaaring hindi binary compatible sa code na binuo ni
iba pang mga compiler.

-Wabi ay maaari ding gamitin sa isang tahasang numero ng bersyon upang balaan ang tungkol sa pagiging tugma
na may partikular -fabi-bersyon antas, hal -Wabi=2 upang bigyan ng babala ang tungkol sa mga pagbabagong nauugnay sa
-fabi-bersyon=2. Nagtatakda din ang pagtukoy ng numero ng bersyon -fabi-compat-version=n.

Ang mga kilalang hindi pagkakatugma sa -fabi-bersyon=2 (na ang default mula sa GCC 3.4 hanggang
4.9) kasama ang:

* Nasira ang isang template na may hindi uri na parameter ng template ng uri ng sanggunian
hindi tama:

panlabas int N;
template struct S {};
walang bisa n (S ) {2}

Naayos ito sa -fabi-bersyon=3.

* Ang mga uri ng SIMD vector na idineklara gamit ang "__attribute ((vector_size))" ay ginulo sa isang
non-standard na paraan na hindi pinapayagan ang overloading ng mga function na kumukuha ng mga vectors
ng iba't ibang laki.

Napalitan ang mangling -fabi-bersyon=4.

* Ang "__attribute ((const))" at "noreturn" ay ginulo bilang mga uri ng kwalipikasyon, at
Ang "decltype" ng isang simpleng deklarasyon ay natiklop.

Naayos ang mga problemang ito -fabi-bersyon=5.

* Ang mga saklaw na enumerator ay ipinasa habang ang mga argumento sa isang variadic function ay pino-promote tulad ng
unscoped enumerator, na naging sanhi ng "va_arg" na magreklamo. Sa karamihan ng mga target na ito ay hindi
aktwal na nakakaapekto sa parameter na pumasa sa ABI, dahil walang paraan upang maipasa ang isang argumento
mas maliit kaysa sa "int".

Gayundin, binago ng ABI ang mangling ng mga template argument pack, "const_cast",
"static_cast", prefix increment/decrement, at isang function na sakop ng klase na ginamit bilang a
argumento ng template.

Ang mga isyung ito ay naitama sa -fabi-bersyon=6.

* Ang mga Lambdas sa default na saklaw ng argumento ay hindi wastong nasira, at nagbago ang ABI
ang mangling ng "nullptr_t".

Ang mga isyung ito ay naitama sa -fabi-bersyon=7.

* Kapag nag-mangling ng isang uri ng function na may mga function-cv-qualifier, ang hindi kwalipikado
Ang uri ng pag-andar ay hindi wastong itinuring bilang isang kandidato sa pagpapalit.

Naayos ito sa -fabi-bersyon=8.

Nagbabala rin ito tungkol sa mga pagbabagong nauugnay sa psABI. Ang kilalang psABI ay nagbabago sa puntong ito
ay kinabibilangan ng:

* Para sa SysV/x86-64, ang mga unyon na may "mahabang dobleng" miyembro ay ipinapasa sa memorya bilang
tinukoy sa psABI. Halimbawa:

unyon U {
mahabang double ld;
int i;
};

Ang "union U" ay palaging ipinapasa sa memorya.

-Wabi-tag (C++ at Objective-C++ lang)
Magbabala kapag ginamit ang isang uri na may tag na ABI sa isang konteksto na walang tag na ABI na iyon.
Tingnan C + + katangian para sa higit pang impormasyon tungkol sa mga tag ng ABI.

-Wctor-dtor-privacy (C++ at Objective-C++ lang)
Magbabala kapag ang isang klase ay tila hindi magagamit dahil ang lahat ng mga constructor o destructors ay naroroon
pribado ang klase, at wala itong mga kaibigan o pampublikong static na function ng miyembro.
Magbabala din kung walang mga hindi pribadong pamamaraan, at mayroong kahit isang pribadong miyembro
function na hindi isang constructor o destructor.

-Wdelete-non-virtual-dtor (C++ at Objective-C++ lang)
Magbabala kapag ginamit ang "delete" upang sirain ang isang instance ng isang klase na may virtual
function at non-virtual destructor. Hindi ligtas na tanggalin ang isang instance ng isang nagmula
class sa pamamagitan ng isang pointer sa isang base class kung ang base class ay walang virtual
maninira. Ang babalang ito ay pinagana ng -Pader.

-Wliteral-panlapi (C++ at Objective-C++ lang)
Magbabala kapag ang isang string o character na literal ay sinundan ng isang ud-suffix na hindi
magsimula sa isang underscore. Bilang isang sumusunod na extension, tinatrato ng GCC ang mga naturang suffix bilang
hiwalay na mga preprocessing token upang mapanatili ang pabalik na compatibility sa code
na gumagamit ng pag-format ng mga macro mula sa " ". Halimbawa:

#define __STDC_FORMAT_MACROS
#isama
# isama

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

Sa kasong ito, ang "PRID64" ay itinuturing bilang isang hiwalay na preprocessing token.

Ang babalang ito ay pinagana bilang default.

-Wnarrowing (C++ at Objective-C++ lang)
Magbabala kapag may lumiit na conversion na ipinagbabawal ng C++11 na nangyari sa loob { }, halimbawa

int i = { 2.2 }; // error: pagpapaliit mula double hanggang int

Ang watawat na ito ay kasama sa -Pader at -Wc++11-compat.

may -std=c++11, -Wno-narrowing pinipigilan ang diagnostic na kinakailangan ng pamantayan.
Tandaan na hindi ito nakakaapekto sa kahulugan ng mahusay na nabuong code; pagpapaliit ng mga conversion
ay itinuturing pa ring hindi maayos sa konteksto ng SFINAE.

-Wnoexcept (C++ at Objective-C++ lang)
Magbabala kapag ang isang noexcept-expression ay naging false dahil sa isang tawag sa isang function
na walang non-throwing exception specification (ibig sabihin, "throw()" o
"noexcept") ngunit kilala ng compiler na hindi kailanman magtapon ng exception.

-Wnon-virtual-dtor (C++ at Objective-C++ lang)
Magbabala kapag ang isang klase ay may mga virtual na function at isang naa-access na non-virtual na destructor
mismo o sa isang naa-access na polymorphic base class, kung saan posible ngunit
hindi ligtas na tanggalin ang isang instance ng isang nagmula na klase sa pamamagitan ng isang pointer sa klase mismo
o batayang klase. Ang babalang ito ay awtomatikong pinagana kung -Weffc++ ay tinukoy.

-Wreorder (C++ at Objective-C++ lang)
Magbabala kapag ang pagkakasunud-sunod ng mga initializer ng miyembro na ibinigay sa code ay hindi tumugma sa pagkakasunud-sunod
kung saan dapat silang isagawa. Halimbawa:

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

Inaayos ng compiler ang mga initializer ng miyembro para sa "i" at "j" upang tumugma sa
utos ng deklarasyon ng mga miyembro, na naglalabas ng babala sa ganoong epekto. Ang babalang ito ay
pinagana ng -Pader.

-fext-numeric-literal (C++ at Objective-C++ lang)
Tanggapin ang haka-haka, fixed-point, o tinukoy ng makina na literal na mga suffix ng numero bilang GNU
mga extension. Kapag ang opsyong ito ay naka-off ang mga suffix na ito ay ituturing bilang C++11 user-
tinukoy na literal na mga numeric na suffix. Naka-on ito bilang default para sa lahat ng pre-C++11 na dialect
at lahat ng diyalekto ng GNU: -std=c++98, -std=gnu++98, -std=gnu++11, -std=gnu++14. ito
naka-off ang opsyon bilang default para sa ISO C++11 pataas (-std=c++11, ...).

Ang mga sumusunod na -W... ang mga opsyon ay hindi apektado ng -Pader.

-Weffc++ (C++ at Objective-C++ lang)
Babala tungkol sa mga paglabag sa mga sumusunod na alituntunin sa istilo mula sa Scott Meyers' Mabisa
C + + serye ng mga libro:

* Tukuyin ang isang copy constructor at isang assignment operator para sa mga klase na may dynamic na-
inilalaan na memorya.

* Mas gusto ang pagsisimula sa pagtatalaga sa mga konstruktor.

* Ibalik ang "operator=" ng reference sa *ito.

* Huwag subukang magbalik ng reference kapag kailangan mong ibalik ang isang bagay.

* Matukoy ang pagkakaiba sa pagitan ng prefix at postfix na mga anyo ng increment at decrement operator.

* Huwag kailanman mag-overload ang "&&", "||", o ",".

Ang pagpipiliang ito ay nagbibigay-daan din -Wnon-virtual-dtor, na isa rin sa mabisang C++
mga rekomendasyon. Gayunpaman, ang tseke ay pinalawak upang bigyan ng babala ang tungkol sa kakulangan ng virtual
destructor sa naa-access din na mga non-polymorphic base na klase.

Kapag pinipili ang opsyong ito, tandaan na ang mga karaniwang header ng library ay hindi sumusunod sa lahat
ng mga alituntuning ito; gamitin grep -v upang salain ang mga babalang iyon.

-Wstrict-null-sentinel (C++ at Objective-C++ lang)
Magbabala tungkol sa paggamit ng hindi naka-cast na "NULL" bilang sentinel. Kapag nag-compile lang sa GCC
ito ay isang wastong sentinel, dahil ang "NULL" ay tinukoy sa "__null". Bagaman ito ay isang null
pointer constant sa halip na isang null pointer, ito ay ginagarantiyahan na pareho ang laki
bilang isang pointer. Ngunit ang paggamit na ito ay hindi portable sa iba't ibang compiler.

-Wno-non-template-friend (C++ at Objective-C++ lang)
Huwag paganahin ang mga babala kapag ang mga hindi na-templatize na function ng kaibigan ay idineklara sa loob ng isang template.
Dahil ang pagdating ng tahasang suporta sa detalye ng template sa G++, kung ang pangalan ng
ang kaibigan ay isang hindi kwalipikadong-id (ibig sabihin, kaibigan foo(int)), ang detalye ng wikang C++
hinihingi ng kaibigan na ipahayag o tukuyin ang isang ordinaryong, nontemplate function. (Seksyon
14.5.3). Bago ipatupad ng G++ ang tahasang detalye, maaaring maging unqualified-id
binibigyang-kahulugan bilang isang partikular na espesyalisasyon ng isang naka-templat na function. Dahil ito
Ang hindi sumusunod na gawi ay hindi na ang default na gawi para sa G++,
-Wnon-template-kaibigan nagbibigay-daan sa compiler na suriin ang umiiral na code para sa potensyal na problema
mga spot at naka-on bilang default. Maaaring i-off ang bagong gawi ng compiler na ito gamit ang
-Wno-non-template-friend, na nagpapanatili sa conformant compiler code ngunit hindi pinapagana ang
kapaki-pakinabang na babala.

-Wold-style-cast (C++ at Objective-C++ lang)
Magbabala kung ang isang lumang-style (C-style) na cast sa isang non-void na uri ay ginagamit sa loob ng isang C++ na programa.
Ang mga bagong istilong cast ("dynamic_cast", "static_cast", "reinterpret_cast", at
Ang "const_cast") ay hindi gaanong mahina sa mga hindi sinasadyang epekto at mas madaling hanapin.

-Woverloaded-virtual (C++ at Objective-C++ lang)
Magbabala kapag ang isang function na deklarasyon ay nagtatago ng mga virtual na function mula sa isang base class. Para sa
halimbawa, sa:

struct A {
virtual void f();
};

struct B: pampublikong A {
walang bisa f(int);
};

ang "A" na bersyon ng klase ng "f" ay nakatago sa "B", at ang code tulad ng:

B* b;
b->f();

nabigo sa pag-compile.

-Wno-pmf-conversions (C++ at Objective-C++ lang)
Huwag paganahin ang diagnostic para sa pag-convert ng bound pointer sa function ng miyembro sa isang plain
pointer

-Wsign-promo (C++ at Objective-C++ lang)
Magbabala kapag ang overload na resolution ay pumili ng isang promosyon mula sa hindi napirmahan o enumerated na uri hanggang
isang naka-sign na uri, sa isang conversion sa isang hindi naka-sign na uri ng parehong laki. Nakaraang
Sinubukan ng mga bersyon ng G++ na panatilihin ang unsignedness, ngunit ang pamantayan ay nag-uutos sa kasalukuyang
pag-uugali.

Options Pagkontrol Layunin-C at Layunin-C++ Mga dayalekto
(TANDAAN: Hindi inilalarawan ng manwal na ito ang mga wikang Objective-C at Objective-C++
kanilang sarili.

Inilalarawan ng seksyong ito ang mga opsyon sa command-line na makabuluhan lamang para sa Objective-C
at mga programang Objective-C++. Maaari mo ring gamitin ang karamihan sa wikang independiyenteng GNU
mga pagpipilian sa compiler. Halimbawa, maaari kang mag-compile ng isang file ilang_klase.m ganito:

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

Sa halimbawang ito, -fgnu-runtime ay isang opsyon para lamang sa Objective-C at Objective-C++
mga programa; maaari mong gamitin ang iba pang mga opsyon sa anumang wikang sinusuportahan ng GCC.

Tandaan na dahil ang Objective-C ay isang extension ng C language, ang Objective-C compilations
maaari ring gumamit ng mga opsyon na partikular sa C front-end (hal, -Wtradisyonal). Katulad nito,
Ang mga compilation ng Objective-C++ ay maaaring gumamit ng mga opsyon na partikular sa C++ (hal., -Wabi).

Narito ang isang listahan ng mga opsyon na lamang para sa pag-compile ng Objective-C at Objective-C++
mga programa:

-fconstant-string-class=pangalan ng klase
paggamit pangalan ng klase bilang pangalan ng klase upang i-instantiate para sa bawat literal na string
tinukoy na may syntax na "@"..."". Ang default na pangalan ng klase ay "NXConstantString" kung
ang GNU runtime ay ginagamit, at "NSConstantString" kung ang NeXT runtime ay ginagawa
ginamit (tingnan sa ibaba). Ang -fconstant-cfstrings ang opsyon, kung mayroon din, ay nilalampasan ang
-fconstant-string-class setting at maging sanhi ng "@"..."" literal na inilatag bilang pare-pareho
Mga string ng CoreFoundation.

-fgnu-runtime
Bumuo ng object code na tugma sa karaniwang GNU Objective-C runtime. Ito ay
ang default para sa karamihan ng mga uri ng system.

-fnext-runtime
Bumuo ng output na tugma sa NeXT runtime. Ito ang default para sa NeXT-based
system, kabilang ang Darwin at Mac OS X. Ang macro na "__NEXT_RUNTIME__" ay paunang natukoy kung
(at kung) ginagamit ang opsyong ito.

-fno-nil-receiver
Ipagpalagay na ang lahat ng Objective-C na mensahe ay nagpapadala ("[receiver message: arg]") dito
tinitiyak ng unit ng pagsasalin na ang receiver ay hindi "nil". Ito ay nagbibigay-daan para sa higit pa
mahusay na mga entry point sa runtime na gagamitin. Available lang ang opsyong ito sa
kasabay ng NeXT runtime at ABI version 0 o 1.

-fobjc-abi-version=n
Gumamit ng bersyon n ng Objective-C ABI para sa napiling runtime. Ang pagpipiliang ito ay
kasalukuyang sinusuportahan lamang para sa NeXT runtime. Sa kasong iyon, ang Bersyon 0 ay ang
tradisyonal (32-bit) ABI na walang suporta para sa mga ari-arian at iba pang Objective-C 2.0
mga karagdagan. Ang Bersyon 1 ay ang tradisyonal (32-bit) na ABI na may suporta para sa mga property at
iba pang mga karagdagan sa Layunin-C 2.0. Ang Bersyon 2 ay ang modernong (64-bit) na ABI. Kung wala naman
tinukoy, ang default ay Bersyon 0 sa 32-bit na target na machine, at Bersyon 2 sa 64-bit
target na mga makina.

-fobjc-call-cxx-cdtors
Para sa bawat klase ng Objective-C, suriin kung ang alinman sa mga instance variable nito ay isang C++ object
na may di-maliit na default na tagabuo. Kung gayon, mag-synthesize ng isang espesyal na "- (id)
.cxx_construct" instance method na nagpapatakbo ng hindi walang kuwentang default na mga constructor sa alinman
tulad ng mga variable na halimbawa, sa pagkakasunud-sunod, at pagkatapos ay ibalik ang "sarili". Katulad nito, suriin kung mayroon man
instance variable ay isang C++ object na may non-trivial destructor, at kung gayon, synthesize
isang espesyal na "- (walang bisa) .cxx_destruct" na pamamaraan na nagpapatakbo sa lahat ng naturang default na mga destructor, sa
baligtarin ang pagkakasunod-sunod.

Ang mga pamamaraang "- (id) .cxx_construct" at "- (void) .cxx_destruct" ay nabuo lamang
gumana sa mga variable ng instance na idineklara sa kasalukuyang klase ng Objective-C, at hindi ang mga iyon
minana mula sa mga superclass. Responsibilidad ng Objective-C runtime to
i-invoke ang lahat ng ganoong pamamaraan sa inheritance hierarchy ng isang object. Ang "- (id)
Ang mga pamamaraan ng .cxx_construct" ay hinihingi ng runtime kaagad pagkatapos ng isang bagong bagay
instance ay inilalaan; ang "- (void) .cxx_destruct" na mga pamamaraan ay agad na ginagamit
bago ang runtime deallocates isang object instance.

Sa pagsulat na ito, tanging ang NeXT runtime sa Mac OS X 10.4 at mas bago ang may suporta para sa
paggamit ng "- (id) .cxx_construct" at "- (void) .cxx_destruct" na pamamaraan.

-fobjc-direct-dispatch
Payagan ang mabilis na pagtalon sa dispatcher ng mensahe. Sa Darwin ito ay nagagawa sa pamamagitan ng
comm page.

-fobjc-exceptions
I-enable ang syntactic na suporta para sa structured exception handling sa Objective-C, katulad ng
kung ano ang inaalok ng C++ at Java. Ang opsyong ito ay kinakailangan para magamit ang Objective-C
mga keyword na @try, @throw, @catch, @finally at @synchronize. Available ang opsyong ito
na may parehong GNU runtime at NeXT runtime (ngunit hindi magagamit kasabay ng
ang NeXT runtime sa Mac OS X 10.2 at mas maaga).

-fobjc-gc
Paganahin ang pangongolekta ng basura (GC) sa mga programang Objective-C at Objective-C++. Ang pagpipiliang ito
ay magagamit lamang sa NeXT runtime; ang GNU runtime ay may ibang basura
pagpapatupad ng koleksyon na hindi nangangailangan ng mga espesyal na flag ng compiler.

-fobjc-nilcheck
Para sa NeXT runtime na may bersyon 2 ng ABI, tingnan kung may nil na receiver sa paraan
invocations bago gawin ang aktwal na method call. Ito ang default at maaaring maging
may kapansanan sa paggamit -fno-objc-nilcheck. Ang mga paraan ng klase at mga super call ay hindi nasusuri
para sa wala sa ganitong paraan kahit na ano ang flag na ito ay nakatakda. Sa kasalukuyan, ginagawa ng watawat na ito
wala kapag ang GNU runtime, o isang mas lumang bersyon ng NeXT runtime ABI, ay ginamit.

-fobjc-std=objc1
Alinsunod sa syntax ng wika ng Objective-C 1.0, ang wikang kinikilala ng GCC 4.0.
Nakakaapekto lamang ito sa mga pagdaragdag ng Objective-C sa wikang C/C++; hindi ito nakakaapekto
pagsunod sa mga pamantayan ng C/C++, na kinokontrol ng hiwalay na diyalektong C/C++
mga flag ng opsyon. Kapag ginamit ang opsyong ito sa Objective-C o Objective-C++
compiler, anumang Objective-C syntax na hindi kinikilala ng GCC 4.0 ay tinatanggihan. Ito
ay kapaki-pakinabang kung kailangan mong tiyakin na ang iyong Objective-C code ay maaaring isama
mas lumang bersyon ng GCC.

-freplace-objc-classes
Maglabas ng espesyal na marker na nagtuturo ld(1) huwag mag-static na mag-link sa resultang object
file, at payagan si dyld(1) sa halip na i-load ito sa oras ng pagtakbo. Ito ay ginagamit sa
kasabay ng Fix-and-Continue debugging mode, kung saan nakalagay ang object file
ang tanong ay maaaring i-recompile at dynamic na i-reload sa kurso ng programa
execution, nang hindi kailangang i-restart ang program mismo. Sa kasalukuyan, Ayusin-at-
Available lang ang continue functionality kasabay ng NeXT runtime sa Mac
OS X 10.3 at mas bago.

-fzero-link
Kapag nag-compile para sa NeXT runtime, karaniwang pinapalitan ng compiler ang mga tawag sa
"objc_getClass("...")" (kapag ang pangalan ng klase ay kilala sa oras ng pag-compile) na may
mga static na sanggunian sa klase na nasisimulan sa oras ng pag-load, na nagpapahusay sa run-time
pagganap. Tinutukoy ang -fzero-link pinipigilan ng bandila ang pag-uugali at sanhi na ito
mga tawag sa "objc_getClass("...")" na pananatilihin. Ito ay kapaki-pakinabang sa Zero-Link
debugging mode, dahil pinapayagan nito ang mga indibidwal na pagpapatupad ng klase na mabago
sa panahon ng pagpapatupad ng programa. Ang runtime ng GNU ay kasalukuyang nagpapanatili ng mga tawag sa
"objc_get_class("...")" anuman ang mga opsyon sa command-line.

-fno-local-ivars
Bilang default, ang mga variable ng instance sa Objective-C ay maaaring ma-access na parang lokal
mga variable mula sa loob ng mga pamamaraan ng klase kung saan sila idineklara. Ito ay maaaring humantong sa
pag-shadowing sa pagitan ng mga variable ng instance at iba pang mga variable na idineklara alinman sa lokal
sa loob ng isang paraan ng klase o sa buong mundo na may parehong pangalan. Tinutukoy ang -fno-local-ivars
hindi pinapagana ng flag ang gawi na ito kaya naiiwasan ang mga isyu sa variable shadowing.

-fivar-visibility=[publiko|protektado|pribado|pakete]
Itakda ang default na instance variable visibility sa tinukoy na opsyon para sa pagkakataong iyon
mga variable na idineklara sa labas ng saklaw ng anumang mga direktiba ng modifier ng pag-access na default sa
tinukoy na visibility.

-gen-decls
I-dump ang mga deklarasyon ng interface para sa lahat ng klase na nakikita sa source file sa isang file na pinangalanan
sourcename.decl.

-Wassign-intercept (Objective-C at Objective-C++ lang)
Magbabala sa tuwing ang isang Objective-C assignment ay naharang ng basurero.

-Wno-protocol (Objective-C at Objective-C++ lang)
Kung ang isang klase ay idineklara na magpatupad ng isang protocol, isang babala ang ibibigay para sa bawat pamamaraan
sa protocol na hindi ipinatupad ng klase. Ang default na pag-uugali ay sa
maglabas ng babala para sa bawat paraan na hindi tahasang ipinatupad sa klase, kahit na a
Ang pagpapatupad ng pamamaraan ay minana mula sa superclass. Kung gagamitin mo ang -Wno-protocol
opsyon, kung gayon ang mga pamamaraan na minana mula sa superclass ay itinuturing na ipinatupad,
at walang babala na inilabas para sa kanila.

-Wselector (Objective-C at Objective-C++ lang)
Magbabala kung maraming paraan ng iba't ibang uri para sa parehong tagapili ay makikita habang
compilation. Ang pagsusuri ay isinasagawa sa listahan ng mga pamamaraan sa huling yugto ng
compilation. Bilang karagdagan, ang isang pagsusuri ay isinasagawa para sa bawat tagapili na lumilitaw sa a
"@selector(...)" expression, at ang isang kaukulang pamamaraan para sa selector na iyon ay naging
natagpuan sa panahon ng compilation. Dahil ang mga pagsusuring ito ay ini-scan lamang ang talahanayan ng pamamaraan sa dulo
ng compilation, ang mga babalang ito ay hindi ginawa kung ang huling yugto ng compilation ay
hindi naabot, halimbawa dahil may nakitang error sa panahon ng compilation, o dahil ang
-fsyntax-lamang ginagamit ang opsyon.

-Wstrict-selector-match (Objective-C at Objective-C++ lang)
Magbabala kung maraming paraan na may magkakaibang argumento at/o mga uri ng pagbabalik ay matatagpuan para sa a
ibinigay na selector kapag sinusubukang magpadala ng mensahe gamit ang selector na ito sa isang receiver ng
i-type ang "id" o "Class". Kapag naka-off ang flag na ito (na siyang default na gawi), ang
Inalis ng compiler ang gayong mga babala kung ang anumang pagkakaiba na natagpuan ay nakakulong sa mga uri na nagbabahagi
parehong laki at pagkakahanay.

-Wundeclared-selector (Objective-C at Objective-C++ lang)
Magbabala kung may nakitang expression na "@selector(...)" na tumutukoy sa isang hindi nadeklarang selector. A
Itinuturing na hindi idineklara ang tagapili kung walang paraan na may pangalang iyon ang naideklara dati
ang "@selector(...)" na expression, alinman sa tahasan sa isang @interface o @protocol
deklarasyon, o pahiwatig sa isang seksyong @implementation. Ang pagpipiliang ito ay palaging gumaganap
ang mga pagsusuri nito sa sandaling makita ang isang "@selector(...)" na expression, habang -Wselector lamang
nagsasagawa ng mga pagsusuri nito sa huling yugto ng compilation. Ito rin ang nagpapatupad ng coding
style convention na ang mga pamamaraan at tagapili ay dapat ideklara bago gamitin.

-print-objc-runtime-info
Bumuo ng C header na naglalarawan sa pinakamalaking istraktura na ipinapasa ng halaga, kung mayroon man.

Options sa Kontrolin Tanda post Formatting
Ayon sa kaugalian, ang mga diagnostic na mensahe ay na-format nang hindi isinasaalang-alang ang output device
aspeto (hal. ang lapad nito, ...). Maaari mong gamitin ang mga opsyon na inilarawan sa ibaba upang kontrolin ang
algorithm sa pag-format para sa mga diagnostic na mensahe, hal. kung gaano karaming mga character bawat linya, gaano kadalas
dapat iulat ang impormasyon ng lokasyon ng pinagmulan. Tandaan na ang ilang mga front end ng wika ay maaaring
huwag igalang ang mga pagpipiliang ito.

-fmessage-haba=n
Subukang i-format ang mga mensahe ng error upang magkasya ang mga ito sa mga linya ng tungkol sa n mga karakter. Kung n is
zero, pagkatapos ay walang line-wrapping ay tapos na; lumilitaw ang bawat mensahe ng error sa isang linya.
Ito ang default para sa lahat ng front end.

-fdiagnostics-show-location=isang beses
Makahulugan lamang sa line-wrapping mode. Nagtuturo sa tagapag-ulat ng diagnostic na mensahe
naglalabas ng impormasyon sa lokasyon ng pinagmulan minsan; iyon ay, kung sakaling ang mensahe ay masyadong mahaba upang magkasya
sa isang pisikal na linya at kailangang balutin, ang lokasyon ng pinagmulan ay hindi ilalabas
(bilang prefix) muli, paulit-ulit, sa mga susunod na linya ng pagpapatuloy. Ito ang
default na pag-uugali.

-fdiagnostics-show-location=bawat-linya
Makahulugan lamang sa line-wrapping mode. Nagtuturo sa tagapag-ulat ng diagnostic na mensahe
naglalabas ng parehong impormasyon sa lokasyon ng pinagmulan (bilang prefix) para sa mga pisikal na linya na nagreresulta
mula sa proseso ng pagsira ng mensahe na masyadong mahaba para magkasya sa isang linya.

-fdiagnostics-color[=WHEN]
-fno-diagnostics-kulay
Gumamit ng kulay sa mga diagnostic. WHEN is hindi kailanman, palagi, O kotse. Ang default ay depende sa kung paano
ang compiler ay na-configure, maaari itong alinman sa itaas WHEN mga pagpipilian o din
hindi kailanman if GCC_COLORS environment variable ay hindi naroroon sa kapaligiran, at kotse
kung hindi man. kotse nangangahulugang gumamit lamang ng kulay kapag ang karaniwang error ay isang terminal. Ang
forms -fdiagnostics-kulay at -fno-diagnostics-kulay ay mga alyas para sa
-fdiagnostics-color=palagi at -fdiagnostics-color=hindi kailanman, Ayon sa pagkakabanggit.

Ang mga kulay ay tinutukoy ng variable ng kapaligiran GCC_COLORS. Ang halaga nito ay isang colon-
pinaghiwalay na listahan ng mga kakayahan at Select Graphic Rendition (SGR) substrings. SGR
Ang mga command ay binibigyang kahulugan ng terminal o terminal emulator. (Tingnan ang seksyon sa
ang dokumentasyon ng iyong text terminal para sa mga pinahihintulutang halaga at ang kanilang mga kahulugan bilang
character attribute.) Ang mga substring value na ito ay mga integer sa decimal na representasyon
at maaaring pagsamahin sa mga semicolon. Kasama sa mga karaniwang value na pagsasamahin 1 para
matapang, 4 para sa salungguhit, 5 para kumurap, 7 para sa kabaligtaran, 39 para sa default na kulay ng foreground, 30
sa 37 para sa mga kulay sa harapan, 90 sa 97 para sa 16-color na mode na kulay sa foreground, 38; 5; 0 sa
38; 5; 255 para sa 88-kulay at 256-kulay na mga mode sa foreground na kulay, 49 para sa default na background
kulay, 40 sa 47 para sa mga kulay ng background, 100 sa 107 para sa 16-color na mode na mga kulay ng background,
at 48; 5; 0 sa 48; 5; 255 para sa 88-kulay at 256-kulay na mga mode na kulay ng background.

Ang default GCC_COLORS is

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

saan 01; 31 ay matapang na pula, 01; 35 ay matapang na magenta, 01; 36 ay matapang na cyan, 01; 32 ay matapang
berde at 01 ay matapang. Setting GCC_COLORS sa walang laman na string ay hindi pinapagana ang mga kulay.
Ang mga suportadong kakayahan ay ang mga sumusunod.

"error="
SGR substring para sa error: mga marker.

"babala="
SGR substring para sa babala: mga marker.

"note="
SGR substring para sa tala: mga marker.

"caret="
SGR substring para sa caret line.

"locus="
SGR substring para sa impormasyon ng lokasyon, file:line or file:line:column at iba pa

"quote="
SGR substring para sa impormasyong nakalimbag sa loob ng mga panipi.

-fno-diagnostics-show-option
Bilang default, ang bawat diagnostic na ilalabas ay may kasamang text na nagsasaad ng command-line na opsyon
na direktang kumokontrol sa diagnostic (kung ang ganitong opsyon ay kilala sa diagnostic
makinarya). Tinutukoy ang -fno-diagnostics-show-option pinipigilan iyon ng bandila
pag-uugali.

-fno-diagnostics-show-caret
Bilang default, kasama sa bawat diagnostic na ilalabas ang orihinal na linya ng pinagmulan at isang caret '^'
na nagpapahiwatig ng hanay. Pinipigilan ng opsyong ito ang impormasyong ito. Ang source line ay
pinutol sa n mga karakter, kung ang -fmessage-length=n ang pagpipilian ay ibinigay. Kapag ang output
ay tapos na sa terminal, ang lapad ay limitado sa lapad na ibinigay ng COLUMNS
variable ng kapaligiran o, kung hindi nakatakda, sa lapad ng terminal.

Options sa Hiling or Pigilan Babala
Ang mga babala ay mga diagnostic na mensahe na nag-uulat ng mga konstruksyon na hindi likas
mali ngunit ito ay mapanganib o iminumungkahi na maaaring may pagkakamali.

Hindi pinapagana ng mga sumusunod na opsyon na independiyente sa wika ang mga partikular na babala ngunit kinokontrol ang
mga uri ng diagnostic na ginawa ng GCC.

-fsyntax-lamang
Suriin ang code para sa mga error sa syntax, ngunit huwag gumawa ng anumang bagay na higit pa doon.

-fmax-errors=n
Nililimitahan ang maximum na bilang ng mga mensahe ng error sa n, sa puntong ito ay nagpiyansa ang GCC
kaysa sa pagtatangka na ipagpatuloy ang pagproseso ng source code. Kung n ay 0 (ang default),
walang limitasyon sa bilang ng mga error na mensahe na ginawa. Kung -Wfatal-mga pagkakamali ding
tinukoy, kung gayon -Wfatal-mga pagkakamali inuuna ang pagpipiliang ito.

-w Pigilan ang lahat ng mga mensahe ng babala.

-Werror
Gawing mali ang lahat ng babala.

-Werror=
Gawing error ang tinukoy na babala. Ang specifier para sa isang babala ay idinagdag;
halimbawa -Werror=switch pinipihit ang mga babala na kinokontrol ng -Wswitch sa mga pagkakamali.
Ang switch na ito ay tumatagal ng isang negatibong anyo, na gagamitin upang kontrahin -Werror para sa mga tiyak na babala;
halimbawa -Wno-error=switch Ginagawang -Wswitch ang mga babala ay hindi mga pagkakamali, kahit na kailan -Werror
ay may bisa.

Kasama sa mensahe ng babala para sa bawat nakokontrol na babala ang opsyong kumokontrol
ang babala. Ang opsyon na iyon ay maaaring gamitin sa -Werror= at -Wno-error= Tulad ng inilarawan
sa itaas. (Ang pag-print ng opsyon sa mensahe ng babala ay maaaring hindi paganahin gamit ang
-fno-diagnostics-show-option bandila.)

Tandaan na ang pagtukoy -Werror=foo awtomatikong nagpapahiwatig -Wfoo. Gayunpaman, -Wno-error=foo
ay hindi nagpapahiwatig ng anuman.

-Wfatal-mga pagkakamali
Ang pagpipiliang ito ay nagiging sanhi ng compiler upang i-abort ang compilation sa unang error na naganap
sa halip na subukang magpatuloy at mag-print ng karagdagang mga mensahe ng error.

Maaari kang humiling ng maraming partikular na babala na may mga opsyon na nagsisimula sa -W, Halimbawa
-Wimplicit upang humiling ng mga babala sa mga implicit na deklarasyon. Ang bawat isa sa mga tiyak na babalang ito
Ang mga opsyon ay mayroon ding negatibong anyo simula -Wno- upang patayin ang mga babala; Halimbawa,
-Wno-implicit. Ang manwal na ito ay naglilista lamang ng isa sa dalawang form, alinman ang hindi default.
Para sa karagdagang mga opsyon na partikular sa wika sumangguni din sa C + + Dialect Options at Layunin-C
at Layunin-C++ Dialect Options.

Ang ilang mga pagpipilian, tulad ng -Pader at -Wextra, i-on ang iba pang mga opsyon, gaya ng -Wunused, Na
maaaring i-on ang mga karagdagang opsyon, gaya ng -Wunused-halaga. Ang pinagsamang epekto ng positibo at
Ang mga negatibong anyo ay ang mas partikular na mga opsyon ay may priyoridad kaysa sa mga hindi gaanong partikular,
independyente sa kanilang posisyon sa command-line. Para sa mga opsyon na may parehong pagtitiyak,
ang huli ay magkakabisa. Ang mga opsyon na pinagana o hindi pinagana sa pamamagitan ng pragma ay magkakabisa na parang sila
lumitaw sa dulo ng command-line.

Kapag hiniling ang isang hindi nakikilalang opsyon sa babala (hal., -Wunknown-babala), ang GCC ay naglalabas ng a
diagnostic na nagsasaad na ang opsyon ay hindi kinikilala. Gayunpaman, kung ang -Wno- ginagamit ang form,
ang pag-uugali ay bahagyang naiiba: walang diagnostic na ginawa para sa -Wno-unknown-babala
maliban kung ang ibang mga diagnostic ay ginagawa. Pinapayagan nito ang paggamit ng bago -Wno- pagpipilian
sa mga lumang compiler, ngunit kung may nangyaring mali, nagbabala ang compiler na hindi kinikilala
naroroon ang opsyon.

-Wpedantic
-pedantic
Ibigay ang lahat ng babala na hinihingi ng mahigpit na ISO C at ISO C++; tanggihan ang lahat ng mga programa na
gumamit ng mga ipinagbabawal na extension, at ilang iba pang mga program na hindi sumusunod sa ISO C at ISO
C++. Para sa ISO C, sumusunod sa bersyon ng pamantayang ISO C na tinukoy ng alinman -std
ginamit na opsyon.

Ang wastong ISO C at ISO C++ na mga programa ay dapat na mag-compile nang maayos mayroon man o wala ang opsyong ito
(bagaman ang ilang bihirang nangangailangan -ansi o isang -std opsyong tumutukoy sa kinakailangang bersyon ng
ISO C). Gayunpaman, kung wala ang pagpipiliang ito, ilang mga extension ng GNU at tradisyonal na C at
Ang mga tampok ng C++ ay sinusuportahan din. Sa pagpipiliang ito, tinanggihan sila.

-Wpedantic ay hindi nagiging sanhi ng mga mensahe ng babala para sa paggamit ng mga kahaliling keyword na
ang mga pangalan ay nagsisimula at nagtatapos sa __. Naka-disable din ang mga pedantic na babala sa expression
na sumusunod sa "__extension__". Gayunpaman, ang mga file ng header ng system lamang ang dapat gumamit ng mga ito
daan para makalikas; dapat iwasan ng mga programa ng aplikasyon ang mga ito.

Sinusubukan ng ilang mga gumagamit na gamitin -Wpedantic upang suriin ang mga programa para sa mahigpit na pagsunod sa ISO C. sila
sa lalong madaling panahon ay nalaman na hindi nito nagagawa ang gusto nila: nakakahanap ito ng ilang hindi ISO na kasanayan,
ngunit hindi lahat---lamang ang para sa ISO C nangangailangan isang diagnostic, at ilang iba pa para sa
kung aling mga diagnostic ang naidagdag.

Ang isang tampok na mag-ulat ng anumang pagkabigo sa pagsunod sa ISO C ay maaaring maging kapaki-pakinabang sa ilang mga pagkakataon,
ngunit mangangailangan ng malaking karagdagang trabaho at magiging kaiba sa
-Wpedantic. Wala kaming planong suportahan ang naturang feature sa malapit na hinaharap.

Kung saan tinukoy ang pamantayan sa -std kumakatawan sa isang GNU extended dialect ng C, tulad ng
gnu90 or gnu99, may katumbas base pamantayan, ang bersyon ng ISO C kung saan
ang GNU extended dialect ay nakabatay. Mga babala mula sa -Wpedantic ibinibigay kung nasaan sila
kinakailangan ng batayang pamantayan. (Hindi makatwiran para sa mga ganitong babala na ibigay
para lamang sa mga tampok na wala sa tinukoy na GNU C dialect, dahil sa kahulugan ay ang GNU
Kasama sa mga dayalekto ng C ang lahat ng mga tampok na sinusuportahan ng compiler sa ibinigay na opsyon, at
walang dapat bigyan ng babala.)

-pedantic-errors
Magbigay ng error sa tuwing ang base pamantayan (Tingnan ang -Wpedantic) ay nangangailangan ng diagnostic, sa
ilang mga kaso kung saan mayroong hindi natukoy na pag-uugali sa oras ng pag-compile at sa ilang iba pang mga kaso
na hindi pumipigil sa pagsasama-sama ng mga programa na wasto ayon sa pamantayan.
Hindi ito katumbas ng -Werror=pedantic, dahil may mga error na pinagana nito
opsyon at hindi pinagana ng huli at vice versa.

-Pader
Ito ay nagbibigay-daan sa lahat ng mga babala tungkol sa mga konstruksyon na isinasaalang-alang ng ilang mga gumagamit
kaduda-dudang, at iyon ay madaling iwasan (o baguhin upang maiwasan ang babala), kahit na sa
kasabay ng macros. Nagbibigay-daan din ito sa ilang mga babala na partikular sa wika na inilarawan
in C + + Dialect Options at Layunin-C at Layunin-C++ Dialect Options.

-Pader Ino-on ang sumusunod na mga flag ng babala:

-Waddress -Warray-bounds=1 (kasama lamang -O2) -Wc++11-compat -Wc++14-compat
-Wchar-subscripts -Wenum-kumpara (sa C/ObjC; ito ay naka-on bilang default sa C++)
-Wimplicit-int (C at Objective-C lang) -Wimplicit-function-declaration (C at
Layunin-C lamang) -Wcomment -Wformat -Wmain (para lang sa C/ObjC at maliban kung
-pagkakasundo) -Wmaybe-uninitialized -Wmissing-braces (para lang sa C/ObjC) -Wnonnull
-Wopenmp-simd -Mga panaklong -Wpointer-sign -Wreorder -Wreturn-type -Wsequence-point
-Wsign-ihambing (sa C++ lang) -Wstrict-aliasing -Wstrict-overflow=1 -Wswitch
-Wtrigraphs -Wuninitialized -Wunknown-pragmas -Wunused-function -Wunused-label
-Wunused-halaga -Wunused-variable -Wvolatile-register-var

Tandaan na ang ilang mga flag ng babala ay hindi ipinahiwatig ng -Pader. Ang ilan sa kanila ay nagbabala tungkol sa
mga konstruksyon na karaniwang hindi itinuturing ng mga gumagamit na kaduda-dudang, ngunit alin
paminsan-minsan baka gusto mong suriin para sa; ang iba ay nagbabala tungkol sa mga konstruksyon na
kinakailangan o mahirap iwasan sa ilang mga kaso, at walang simpleng paraan upang baguhin ang
code upang sugpuin ang babala. Ang ilan sa mga ito ay pinagana ng -Wextra ngunit marami sa kanila
dapat paganahin nang paisa-isa.

-Wextra
Nagbibigay-daan ito sa ilang dagdag na mga flag ng babala na hindi pinagana ng -Pader. (Ginamit ang opsyong ito
tatawagin -W. Ang mas lumang pangalan ay sinusuportahan pa rin, ngunit ang mas bagong pangalan ay higit pa
naglalarawan.)

-Wclobbered -Wempty-body -Wignored-qualifiers -Wmissing-field-initializers
-Wmissing-parameter-type (C lang) -Wold-style-deklarasyon (C lang) -Woverride-init
-Wsign-ihambing -Wtype-limitasyon -Wuninitialized -Wunused-parameter (kasama lamang -Wunused or
-Pader) -Wunused-but-set-parameter (kasama lamang -Wunused or -Pader)

Ang pagpipilian -Wextra nagpi-print din ng mga mensahe ng babala para sa mga sumusunod na kaso:

* Ang isang pointer ay inihambing laban sa integer zero na may "<", "<=", ">", o ">=".

* (C++ lang) Ang isang enumerator at isang hindi enumerator ay parehong lumalabas sa isang kondisyon
pagpapahayag.

* (C++ lang) Mga hindi maliwanag na virtual na base.

* (C++ lang) Nagsu-subscript ng array na idineklara nang "register".

* (C++ lang) Pagkuha ng address ng isang variable na idineklara na "register".

* (C++ lang) Ang isang batayang klase ay hindi pinasimulan sa isang nagmula na klase na tagabuo ng kopya.

-Wchar-subscripts
Magbabala kung ang isang array subscript ay may uri na "char". Ito ay isang karaniwang sanhi ng error, bilang
Madalas nalilimutan ng mga programmer na ang ganitong uri ay nilagdaan sa ilang mga makina. Ang babalang ito ay
pinagana ng -Pader.

-Wcomment
Magbabala sa tuwing may sequence ng pagsisimula ng komento /* lilitaw sa a /* komento, o kahit kailan a
Lumilitaw ang Backslash-Newline sa a // komento. Ang babalang ito ay pinagana ng -Pader.

-Wno-coverage-mismatch
Magbabala kung hindi tumutugma ang mga profile ng feedback kapag ginagamit ang -fprofile-gamitin opsyon. Kung ang
ang source file ay binago sa pagitan ng pag-compile sa -fprofile-gen at may -fprofile-gamitin,
maaaring hindi tumugma ang mga file na may feedback sa profile sa source file at hindi maaaring tumugma ang GCC
gamitin ang impormasyon ng feedback sa profile. Bilang default, ang babalang ito ay pinagana at ito ay
itinuturing bilang isang pagkakamali. -Wno-coverage-mismatch ay maaaring gamitin upang huwag paganahin ang babala o
-Wno-error=coverage-mismatch maaaring gamitin upang hindi paganahin ang error. Hindi pagpapagana ng error
para sa babalang ito ay maaaring magresulta sa hindi magandang na-optimize na code at ito ay kapaki-pakinabang lamang sa kaso ng
napakaliit na pagbabago gaya ng mga pag-aayos ng bug sa isang umiiral nang code-base. Ganap na hindi pinapagana
ang babala ay hindi inirerekomenda.

-Wno-cpp
(C, Objective-C, C++, Objective-C++ at Fortran lang)

Pigilan ang mga mensahe ng babala na ibinubuga ng "#warning" na mga direktiba.

-Wdouble-promosyon (C, C++, Objective-C at Objective-C++ lang)
Magbigay ng babala kapag ang isang halaga ng uri na "float" ay tahasang na-promote sa "double". Mga CPU
na may 32-bit na "single-precision" na floating-point unit ay nagpapatupad ng "float" sa hardware,
ngunit tularan ang "doble" sa software. Sa naturang makina, gumagawa ng mga pagkalkula gamit
Ang mga "double" na halaga ay mas mahal dahil sa overhead na kinakailangan para sa software
pagtulad.

Madaling aksidenteng gumawa ng mga computations na may "double" dahil floating-point
literal ay implicitly ng uri ng "doble". Halimbawa, sa:

float area (float radius)
{
bumalik 3.14159 * radius * radius;
}

ang compiler ay gumaganap ng buong computation na may "double" dahil ang floating-point
literal ay isang "doble".

-Wformat
-Wformat=n
Suriin ang mga tawag sa "printf" at "scanf", atbp., upang matiyak na ang mga argumento ay ibinigay
may mga uri na naaangkop sa format na string na tinukoy, at ang mga conversion
may katuturan ang tinukoy sa string ng format. Kabilang dito ang mga karaniwang function, at
ang iba ay tinukoy ng mga katangian ng format, sa "printf", "scanf", "strftime" at
"strfmon" (isang X/Open extension, wala sa C standard) mga pamilya (o iba pang target-
mga partikular na pamilya). Aling mga function ang sinusuri nang walang mga katangian ng format
ang tinukoy ay depende sa karaniwang bersyon na napili, at ang mga naturang pagsusuri ng mga function
nang walang tinukoy na katangian ay hindi pinagana ni -pagkakasundo or -fno-buitin.

Sinusuri ang mga format laban sa mga tampok ng format na sinusuportahan ng bersyon 2.2 ng GNU libc.
Kabilang dito ang lahat ng feature ng ISO C90 at C99, pati na rin ang mga feature mula sa Single Unix
Pagtutukoy at ilang extension ng BSD at GNU. Maaaring hindi ang ibang mga pagpapatupad ng library
suportahan ang lahat ng mga tampok na ito; Hindi sinusuportahan ng GCC ang babala tungkol sa mga feature na higit pa
mga limitasyon ng isang partikular na aklatan. Gayunpaman, kung -Wpedantic ay ginagamit sa -Wformat,
ibinibigay ang mga babala tungkol sa mga feature ng format na wala sa napiling standard na bersyon (ngunit hindi
para sa mga format na "strfmon", dahil wala ang mga iyon sa anumang bersyon ng pamantayang C).

-Wformat=1
-Wformat
Opsyon -Wformat ay katumbas ng -Wformat=1, at -Wno-format ay katumbas ng
-Wformat=0. Mula noon -Wformat sinusuri din ang mga null format na argumento para sa ilan
mga function, -Wformat nagpapahiwatig din -Wnonnull. Ilang aspeto ng antas ng format na ito
ang pagsuri ay maaaring hindi paganahin ng mga opsyon: -Wno-format-contains-nul,
-Wno-format-extra-args, at -Wno-format-zero-length. -Wformat ay pinagana ng
-Pader.

-Wno-format-contains-nul
If -Wformat ay tinukoy, huwag magbigay ng babala tungkol sa mga string ng format na naglalaman ng mga NUL byte.

-Wno-format-extra-args
If -Wformat ay tinukoy, huwag magbigay ng babala tungkol sa labis na mga argumento sa isang "printf" o
"scanf" format function. Tinutukoy ng pamantayang C na ang mga naturang argumento ay
hindi pinansin

Kung saan ang mga hindi nagamit na argumento ay nasa pagitan ng mga ginamit na argumento na tinukoy sa $
mga pagtutukoy ng numero ng operand, karaniwang nagbibigay pa rin ng mga babala, dahil ang
hindi malaman ng pagpapatupad kung anong uri ang ipapasa sa "va_arg" upang laktawan ang hindi nagamit
mga argumento. Gayunpaman, sa kaso ng mga "scanf" na format, pinipigilan ng opsyong ito ang
babala kung ang mga hindi nagamit na argumento ay pawang mga payo, dahil ang Single Unix
Sinasabi ng detalye na pinapayagan ang mga hindi nagamit na argumento.

-Wno-format-zero-length
If -Wformat ay tinukoy, huwag magbabala tungkol sa mga zero-length na format. Ang pamantayang C
tumutukoy na pinapayagan ang mga zero-length na format.

-Wformat=2
Paganahin -Wformat kasama ang mga karagdagang pagsusuri sa format. Kasalukuyang katumbas ng -Wformat
-Wformat-hindi literal -Wformat-seguridad -Wformat-y2k.

-Wformat-hindi literal
If -Wformat ay tinukoy, magbabala din kung ang format na string ay hindi literal na string
at sa gayon ay hindi masusuri, maliban kung ang format function ay tumatagal ng mga format na argumento nito bilang
isang "va_list".

-Wformat-seguridad
If -Wformat ay tinukoy, nagbabala din tungkol sa paggamit ng mga function ng format na kumakatawan
posibleng mga problema sa seguridad. Sa kasalukuyan, nagbabala ito tungkol sa mga tawag sa "printf" at
Ang "scanf" ay gumagana kung saan ang format na string ay hindi literal na string at wala
format ng mga argumento, tulad ng sa "printf (foo);". Ito ay maaaring isang butas sa seguridad kung ang
format string ay nagmula sa hindi pinagkakatiwalaang input at naglalaman %n. (Ito ay kasalukuyang a
subset ng ano -Wformat-hindi literal nagbabala tungkol sa, ngunit sa hinaharap na mga babala ay maaaring
Idinagdag sa -Wformat-seguridad na hindi kasama sa -Wformat-hindi literal.)

-Wformat-signedness
If -Wformat ay tinukoy, magbabala din kung ang format na string ay nangangailangan ng hindi nalagdaan
argumento at ang argumento ay nilagdaan at vice versa.

TANDAAN: Sa Ubuntu 8.10 at mas bagong mga bersyon ang opsyong ito ay pinagana bilang default para sa C,
C++, ObjC, ObjC++. Upang huwag paganahin, gamitin -Wno-format-security, o huwag paganahin ang lahat ng format
mga babala na may -Wformat=0. Upang gawing nakamamatay ang mga babala sa seguridad sa format, tukuyin
-Werror=format-security.

-Wformat-y2k
If -Wformat ay tinukoy, nagbabala din tungkol sa mga format na "strftime" na maaaring magbunga lamang ng a
dalawang-digit na taon.

-Wnonnull
Babala tungkol sa pagpasa ng null pointer para sa mga argumentong minarkahan bilang nangangailangan ng hindi null na halaga
sa pamamagitan ng katangian ng function na "nonnull".

-Wnonnull ay kasama sa -Pader at -Wformat. Maaari itong i-disable gamit ang -Wno-nonnull
pagpipilian.

-Winit-sarili (C, C++, Objective-C at Objective-C++ lang)
Magbabala tungkol sa mga hindi nasimulang variable na nasimulan sa kanilang mga sarili. Tandaan ito
ang opsyon ay magagamit lamang sa -Wuninitialized pagpipilian.

Halimbawa, nagbabala ang GCC tungkol sa pagiging uninitialize ng "i" sa sumusunod na snippet lang
kailan -Winit-sarili ay tinukoy:

int f()
{
int i = i;
ibalik i;
}

Ang babalang ito ay pinagana ng -Pader sa C++.

-Wimplicit-int (C at Objective-C lang)
Magbabala kapag ang isang deklarasyon ay hindi tumutukoy ng isang uri. Ang babalang ito ay pinagana ng -Pader.

-Wimplicit-function-declaration (C at Objective-C lang)
Magbigay ng babala sa tuwing ginagamit ang isang function bago ideklara. Sa C99 mode
(-std=c99 or -std=gnu99), ang babalang ito ay pinagana bilang default at ito ay ginawang isang
pagkakamali ng -pedantic-errors. Ang babalang ito ay pinagana rin ng -Pader.

-Wimplicit (C at Objective-C lang)
Katulad ng -Wimplicit-int at -Wimplicit-function-declaration. Ang babalang ito ay pinagana
by -Pader.

-Wignored-qualifiers (C at C++ lang)
Magbabala kung ang uri ng pagbabalik ng isang function ay may uri ng kwalipikasyon gaya ng "const". Para sa ISO C
walang epekto ang ganitong uri ng qualifier, dahil ang halaga na ibinalik ng isang function ay hindi isang
halaga. Para sa C++, ang babala ay inilalabas lamang para sa mga uri ng scalar o "walang bisa". ISO C
ipinagbabawal ang mga kwalipikadong "walang bisa" na mga uri ng pagbabalik sa mga kahulugan ng function, kaya ang mga ganitong uri ng pagbabalik
palaging makatanggap ng babala kahit na wala ang opsyong ito.

Ang babalang ito ay pinagana rin ng -Wextra.

-Wmain
Magbabala kung ang uri ng "pangunahing" ay kahina-hinala. Ang "pangunahing" ay dapat na isang function na may panlabas
linkage, bumabalik na int, pagkuha ng alinman sa mga zero na argumento, dalawa, o tatlong argumento ng
angkop na mga uri. Ang babalang ito ay pinagana bilang default sa C++ at pinagana ng alinman
-Pader or -Wpedantic.

-Wmissing-braces
Magbabala kung hindi ganap na naka-bracket ang aggregate o union initializer. Sa mga sumusunod
halimbawa, ang initializer para sa "a" ay hindi ganap na naka-bracket, ngunit iyon para sa "b" ay ganap
naka-bracket. Ang babalang ito ay pinagana ng -Pader sa C.

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

Ang babalang ito ay pinagana ng -Pader.

-Wmissing-include-dirs (C, C++, Objective-C at Objective-C++ lang)
Magbabala kung walang ibinibigay na isamang direktoryo ng user.

-Mga panaklong
Magbabala kung ang mga panaklong ay tinanggal sa ilang partikular na konteksto, tulad ng kapag mayroong an
pagtatalaga sa isang konteksto kung saan inaasahan ang isang halaga ng katotohanan, o kapag ang mga operator ay naka-nest
na ang nangunguna sa mga tao ay madalas na nalilito.

Magbabala rin kung may lalabas na paghahambing tulad ng "x<=y<=z"; ito ay katumbas ng "(x<=y ? 1 :
0) <= z", na ibang interpretasyon mula sa ordinaryong matematika
notasyon.

Magbigay din ng babala tungkol sa mga konstruksyon kung saan maaaring magkaroon ng kalituhan kung aling "kung" ang pahayag an
"ibang" sangay ang nabibilang. Narito ang isang halimbawa ng ganitong kaso:

{
kung ang)
kung (b)
foo ();
iba
bar ();
}

Sa C/C++, ang bawat "iba" na sangay ay nabibilang sa pinakaloob na posibleng "kung" na pahayag, na
sa halimbawang ito ay "kung (b)". Kadalasan hindi ito ang inaasahan ng programmer, gaya ng
inilalarawan sa halimbawa sa itaas sa pamamagitan ng indentasyon na pinili ng programmer. Kapag may
ang potensyal para sa pagkalito na ito, naglalabas ang GCC ng babala kapag tinukoy ang flag na ito.
Upang alisin ang babala, magdagdag ng mga tahasang brace sa paligid ng pinakaloob na "kung" na pahayag
walang paraan na ang "iba" ay maaaring kabilang sa nakapaloob na "kung". Mukhang ang resultang code
ganito:

{
kung ang)
{
kung (b)
foo ();
iba
bar ();
}
}

Magbabala din para sa mga mapanganib na paggamit ng extension ng GNU sa "?:" na may inalis na middle operand.
Kapag ang kundisyon sa "?": operator ay isang boolean na expression, ang inalis na halaga ay
palaging 1. Kadalasan inaasahan ng mga programmer na ito ay isang halaga na nakalkula sa loob ng kondisyon
expression sa halip.

Ang babalang ito ay pinagana ng -Pader.

-Wsequence-point
Magbabala tungkol sa code na maaaring may hindi natukoy na semantika dahil sa mga paglabag sa pagkakasunud-sunod
mga panuntunan sa punto sa mga pamantayan ng C at C++.

Tinutukoy ng mga pamantayan ng C at C++ ang pagkakasunud-sunod ng mga expression sa isang programang C/C++
nasusuri sa mga tuntunin ng pagkakasunud-sunod puntos, na kumakatawan sa isang bahagyang pagkakasunud-sunod sa pagitan ng
pagpapatupad ng mga bahagi ng programa: ang mga naisakatuparan bago ang sequence point, at ang mga iyon
isinagawa pagkatapos nito. Nangyayari ang mga ito pagkatapos ng pagsusuri ng isang buong expression (isa na
ay hindi bahagi ng isang mas malaking expression), pagkatapos ng pagsusuri ng unang operand ng a
"&&", "||", "? :" o "," (kuwit) operator, bago tawagin ang isang function (ngunit pagkatapos ng
pagsusuri ng mga argumento nito at ang expression na nagsasaad ng tinatawag na function), at sa
ilang iba pang mga lugar. Maliban sa ipinahayag ng mga panuntunan ng sequence point, ang pagkakasunud-sunod
ng pagsusuri ng mga subexpression ng isang expression ay hindi tinukoy. Lahat ng mga tuntuning ito
ilarawan lamang ang isang bahagyang pagkakasunud-sunod sa halip na isang kabuuang pagkakasunud-sunod, dahil, halimbawa, kung dalawa
function ay tinatawag sa loob ng isang expression na walang sequence point sa pagitan ng mga ito, ang
Ang pagkakasunud-sunod kung saan tinawag ang mga function ay hindi tinukoy. Gayunpaman, ang mga pamantayan
nagpasya ang komite na ang mga function call ay hindi magkakapatong.

Hindi ito tinukoy kung kailan sa pagitan ng mga sequence point na pagbabago sa mga halaga ng
magkakabisa ang mga bagay. Ang mga programa na ang pag-uugali ay nakasalalay dito ay may hindi natukoy na pag-uugali;
ang mga pamantayan ng C at C++ ay tumutukoy na "Sa pagitan ng nakaraan at susunod na sequence point an
bagay ay dapat magkaroon ng nakaimbak na halaga nito na mabago nang hindi hihigit sa isang beses sa pamamagitan ng pagsusuri ng isang
pagpapahayag. Higit pa rito, ang naunang halaga ay dapat basahin lamang upang matukoy ang halaga sa
maiimbak.". Kung ang isang programa ay lumabag sa mga panuntunang ito, ang mga resulta sa anumang partikular
ang pagpapatupad ay ganap na hindi mahuhulaan.

Ang mga halimbawa ng code na may hindi natukoy na gawi ay "a = a++;", "a[n] = b[n++]" at "a[i++] =
i;". Ang ilang mas kumplikadong mga kaso ay hindi na-diagnose ng opsyong ito, at maaari itong magbigay ng isang
paminsan-minsang maling positibong resulta, ngunit sa pangkalahatan ito ay napatunayang medyo epektibo sa
pagtuklas ng ganitong uri ng problema sa mga programa.

Ang pamantayan ay nakalilito sa mga salita, samakatuwid mayroong ilang debate tungkol sa tiyak
kahulugan ng mga tuntunin ng sequence point sa mga banayad na kaso. Mga link sa mga talakayan ng
problema, kabilang ang mga iminungkahing pormal na kahulugan, ay maaaring matagpuan sa pahina ng mga pagbabasa ng GCC,
sahttp://gcc.gnu.org/readings.html>.

Ang babalang ito ay pinagana ng -Pader para sa C at C++.

-Wno-return-local-addr
Huwag magbalaan tungkol sa pagbabalik ng pointer (o sa C++, isang reference) sa isang variable na napupunta
wala sa saklaw pagkatapos bumalik ang function.

-Wreturn-type
Magbabala sa tuwing ang isang function ay tinukoy na may uri ng pagbabalik na nagde-default sa "int". Gayundin
bigyan ng babala ang tungkol sa anumang "return" na pahayag na walang return value sa isang function na ang uri ng pagbabalik
ay hindi "walang bisa" (ang pagbagsak sa dulo ng function body ay itinuturing na bumabalik
walang halaga), at tungkol sa isang "return" na pahayag na may expression sa isang function
na ang uri ng pagbabalik ay "walang bisa".

Para sa C++, ang isang function na walang uri ng pagbabalik ay palaging gumagawa ng isang diagnostic na mensahe, kahit na
kailan -Wno-return-type ay tinukoy. Ang tanging pagbubukod ay "pangunahing" at mga pag-andar
tinukoy sa mga header ng system.

Ang babalang ito ay pinagana ng -Pader.

-Wshift-count-negative
Magbabala kung negatibo ang bilang ng shift. Ang babalang ito ay pinagana bilang default.

-Wshift-count-overflow
Babala kung bilang ng shift >= lapad ng uri. Ang babalang ito ay pinagana bilang default.

-Wswitch
Magbabala sa tuwing ang isang "switch" na pahayag ay may index ng enumerated type at walang "case"
para sa isa o higit pa sa mga pinangalanang code ng enumeration na iyon. (Ang pagkakaroon ng "default"
pinipigilan ng label ang babalang ito.) Mga label na "case" sa labas din ng hanay ng enumeration
pukawin ang mga babala kapag ginamit ang opsyong ito (kahit na mayroong "default" na label). Ito
babala ay pinagana ng -Pader.

-Wswitch-default
Magbabala sa tuwing ang isang "switch" na pahayag ay walang "default" na kaso.

-Wswitch-enum
Magbabala sa tuwing ang isang "switch" na pahayag ay may index ng enumerated type at walang "case"
para sa isa o higit pa sa mga pinangalanang code ng enumeration na iyon. mga label na "case" sa labas ng
Ang hanay ng enumeration ay nagdudulot din ng mga babala kapag ginamit ang opsyong ito. Ang pagkakaiba lang
sa pagitan ng -Wswitch at ang pagpipiliang ito ay ang pagpipiliang ito ay nagbibigay ng babala tungkol sa isang tinanggal
enumeration code kahit na may "default" na label.

-Wswitch-bool
Magbabala sa tuwing ang isang "switch" na pahayag ay may index ng boolean type. Ito ay posible na
sugpuin ang babalang ito sa pamamagitan ng pag-cast ng controlling expression sa isang uri maliban sa
"bool". Halimbawa:

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

Ang babalang ito ay pinagana bilang default para sa mga programang C at C++.

-Wsync-nand (C at C++ lang)
Magbabala kapag ang mga built-in na function na "__sync_fetch_and_nand" at "__sync_nand_and_fetch" ay
ginamit. Binago ng mga function na ito ang semantics sa GCC 4.4.

-Wtrigraphs
Magbabala kung mayroong anumang mga trigraph na nakatagpo na maaaring magbago sa kahulugan ng programa
(Ang mga trigraph sa loob ng mga komento ay hindi binabalaan). Ang babalang ito ay pinagana ng -Pader.

-Wunused-but-set-parameter
Magbabala sa tuwing ang isang parameter ng function ay itinalaga sa, ngunit kung hindi man ay hindi ginagamit (bukod sa
deklarasyon nito).

Upang sugpuin ang babalang ito, gamitin ang katangiang "hindi nagamit".

Ang babalang ito ay pinagana rin ng -Wunused Kasama -Wextra.

-Wunused-but-set-variable
Magbabala sa tuwing ang isang lokal na variable ay itinalaga sa, ngunit kung hindi man ay hindi ginagamit (bukod sa nito
deklarasyon). Ang babalang ito ay pinagana ng -Pader.

Upang sugpuin ang babalang ito, gamitin ang katangiang "hindi nagamit".

Ang babalang ito ay pinagana rin ng -Wunused, na pinagana ng -Pader.

-Wunused-function
Magbabala sa tuwing idineklara ang isang static na function ngunit hindi tinukoy o isang non-inline na static
hindi ginagamit ang function. Ang babalang ito ay pinagana ng -Pader.

-Wunused-label
Magbabala sa tuwing idineklara ang isang label ngunit hindi ginagamit. Ang babalang ito ay pinagana ng -Pader.

Upang sugpuin ang babalang ito, gamitin ang katangiang "hindi nagamit".

-Wunused-local-typedefs (C, Objective-C, C++ at Objective-C++ lang)
Magbabala kapag ang isang typedef na lokal na tinukoy sa isang function ay hindi ginagamit. Ang babalang ito ay
pinagana ng -Pader.

-Wunused-parameter
Magbabala sa tuwing hindi ginagamit ang isang parameter ng function bukod sa deklarasyon nito.

Upang sugpuin ang babalang ito, gamitin ang katangiang "hindi nagamit".

-Wno-unused-resulta
Huwag magbigay ng babala kung ang tumatawag ng isang function na may markang katangian na "warn_unused_result."
huwag gamitin ang return value nito. Ang default ay -Wunused-resulta.

-Wunused-variable
Magbabala sa tuwing ang isang lokal na variable o non-constant na static na variable ay hindi ginagamit bukod sa
deklarasyon nito. Ang babalang ito ay pinagana ng -Pader.

Upang sugpuin ang babalang ito, gamitin ang katangiang "hindi nagamit".

-Wunused-halaga
Magbabala sa tuwing kinukuwenta ng isang pahayag ang isang resulta na tahasang hindi ginagamit. Pigilan
ang babalang ito ay naglagay ng hindi nagamit na ekspresyon sa "walang bisa". Kabilang dito ang pagpapahayag-
pahayag o ang kaliwang bahagi ng isang kuwit na expression na walang mga side effect.
Halimbawa, ang isang expression tulad ng "x[i,j]" ay nagdudulot ng babala, habang "x[(void)i,j]"
ay hindi.

Ang babalang ito ay pinagana ng -Pader.

-Wunused
Lahat ng nasa itaas -Wunused pinagsamang mga opsyon.

Upang makakuha ng babala tungkol sa isang hindi nagamit na parameter ng function, dapat mong tukuyin ang alinman
-Wextra -Wunused (tandaan na -Pader nagpapahiwatig -Wunused), o hiwalay na tukuyin
-Wunused-parameter.

-Wuninitialized
Magbabala kung ang isang awtomatikong variable ay ginagamit nang hindi muna sinisimulan o kung isang variable
maaaring ma-clobbered ng isang "setjmp" na tawag. Sa C++, bigyan ng babala kung isang non-static na sanggunian o hindi-
Ang static na "const" na miyembro ay lilitaw sa isang klase na walang mga konstruktor.

Kung gusto mong bigyan ng babala ang tungkol sa code na gumagamit ng hindi nasimulang halaga ng variable sa
sarili nitong initializer, gamitin ang -Winit-sarili pagpipilian.

Nangyayari ang mga babalang ito para sa mga indibidwal na hindi pa nasimulan o na-clobber na mga elemento ng istraktura,
mga variable ng unyon o array gayundin para sa mga variable na hindi nasimulan o na-clobber
sa kabuuan. Hindi ito nangyayari para sa mga variable o elemento na idineklara na "volatile". kasi
ang mga babalang ito ay nakasalalay sa pag-optimize, ang eksaktong mga variable o elemento kung saan naroroon
ang mga babala ay nakadepende sa tumpak na mga opsyon sa pag-optimize at bersyon ng GCC na ginamit.

Tandaan na maaaring walang babala tungkol sa isang variable na ginagamit lamang sa pagkalkula ng a
halaga na hindi kailanman ginagamit, dahil ang mga naturang pag-compute ay maaaring tanggalin ng daloy ng data
pagsusuri bago ilimbag ang mga babala.

-Wmaybe-uninitialized
Para sa isang awtomatikong variable, kung mayroong isang landas mula sa entry ng function sa isang paggamit ng
ang variable na pinasimulan, ngunit mayroong ilang iba pang mga landas kung saan ang
variable ay hindi nasimulan, ang compiler ay naglalabas ng babala kung hindi nito mapatunayan ang
hindi naisasagawa ang mga hindi nasimulang landas sa oras ng pagtakbo. Ang mga babalang ito ay ginawang opsyonal
dahil ang GCC ay hindi sapat na matalino upang makita ang lahat ng mga dahilan kung bakit maaaring tama ang code
sa kabila ng paglitaw na may pagkakamali. Narito ang isang halimbawa kung paano ito maaaring mangyari:

{
intx;
lumipat (y)
{
kaso 1: x = 1;
masira;
kaso 2: x = 4;
masira;
kaso 3: x = 5;
}
foo (x);
}

Kung ang halaga ng "y" ay palaging 1, 2 o 3, kung gayon ang "x" ay palaging sinisimulan, ngunit GCC
hindi alam ito. Upang sugpuin ang babala, kailangan mong magbigay ng default na case na may
igiit(0) o katulad na code.

Nagbabala rin ang opsyong ito kapag ang isang non-volatile na awtomatikong variable ay maaaring mabago ng a
tawag sa "longjmp". Ang mga babalang ito ay posible lamang sa pag-optimize
compilation.

Ang compiler ay nakikita lamang ang mga tawag sa "setjmp". Hindi nito malalaman kung saan ang "longjmp".
tinatawag; sa katunayan, maaaring tawagan ito ng tagapangasiwa ng signal sa anumang punto sa code. Bilang isang
resulta, maaari kang makakuha ng babala kahit na sa katunayan ay walang problema dahil "longjmp"
hindi talaga matatawag sa lugar na magdudulot ng problema.

Ang ilang mga huwad na babala ay maiiwasan kung idineklara mo ang lahat ng mga function na ginagamit mo iyon
hindi kailanman bumalik bilang "noreturn".

Ang babalang ito ay pinagana ng -Pader or -Wextra.

-Wunknown-pragmas
Magbabala kapag may na-encounter na direktiba na "#pragma" na hindi naiintindihan ng GCC. Kung ito
Ginagamit ang pagpipiliang command-line, ang mga babala ay inisyu pa para sa mga hindi kilalang pragma sa system
mga file ng header. Hindi ito ang kaso kung ang mga babala ay pinagana lamang ng -Pader
opsyon sa command-line.

-Wno-pragmas
Huwag magbigay ng babala tungkol sa mga maling paggamit ng mga pragma, gaya ng mga maling parameter, di-wastong syntax, o
mga salungatan sa pagitan ng mga pragma. Tingnan din -Wunknown-pragmas.

-Wstrict-aliasing
Ang opsyon na ito ay aktibo lamang kapag -mahigpit-aliasing ay aktibo. Nagbabala ito tungkol sa code na iyon
maaaring masira ang mahigpit na mga panuntunan sa pag-alyas na ginagamit ng compiler para sa pag-optimize.
Ang babala ay hindi nakakakuha ng lahat ng mga kaso, ngunit sinusubukang hulihin ang mas karaniwan
mga patibong. Ito ay kasama sa -Pader. Ito ay katumbas ng -Wstrict-aliasing=3

-Wstrict-aliasing=n
Ang opsyon na ito ay aktibo lamang kapag -mahigpit-aliasing ay aktibo. Nagbabala ito tungkol sa code na iyon
maaaring masira ang mahigpit na mga panuntunan sa pag-alyas na ginagamit ng compiler para sa pag-optimize.
Ang mas mataas na antas ay tumutugma sa mas mataas na katumpakan (mas kaunting mga maling positibo). Mas mataas na antas
tumutugma din sa mas maraming pagsisikap, katulad ng paraan -O gawa. -Wstrict-aliasing is
katumbas ng -Wstrict-aliasing=3.

Level 1: Pinaka agresibo, mabilis, hindi gaanong tumpak. Posibleng kapaki-pakinabang kapag mas mataas na antas
huwag babala ngunit -mahigpit-aliasing sinira pa rin ang code, dahil kakaunti lang ang false
mga negatibo. Gayunpaman, mayroon itong maraming maling positibo. Nagbabala para sa lahat ng mga conversion ng pointer
sa pagitan ng mga posibleng hindi tugmang uri, kahit na hindi kailanman na-dereference. Tumatakbo sa harapan
katapusan lang.

Level 2: Agresibo, mabilis, hindi masyadong tumpak. Maaaring magkaroon pa rin ng maraming maling positibo (hindi
kasing dami ng antas 1 bagaman), at kakaunting maling negatibo (ngunit posibleng higit pa sa antas 1).
Hindi tulad ng level 1, nagbabala lamang ito kapag kinuha ang isang address. Nagbabala tungkol sa mga hindi kumpletong uri.
Tumatakbo sa harap na dulo lamang.

Antas 3 (default para sa -Wstrict-aliasing): Dapat mayroong napakakaunting mga maling positibo at kakaunti
mga maling negatibo. Bahagyang mas mabagal kaysa sa mga antas 1 o 2 kapag pinagana ang pag-optimize.
Nangangalaga sa karaniwang pun+dereference pattern sa front end:
"*(int*)&some_float". Kung pinagana ang pag-optimize, tatakbo din ito sa likod na dulo, kung saan
ito ay tumatalakay sa maraming mga kaso ng pahayag gamit ang mga puntong sensitibo sa daloy-sa impormasyon.
Nagbabala lamang kapag na-dereference ang na-convert na pointer. Hindi nagbabala tungkol sa hindi kumpleto
mga uri.

-Wstrict-overflow
-Wstrict-overflow=n
Ang opsyon na ito ay aktibo lamang kapag -mahigpit-apaw ay aktibo. Nagbabala ito tungkol sa mga kaso
kung saan nag-o-optimize ang compiler batay sa pagpapalagay na ang nilagdaan na overflow ay hindi
mangyari. Tandaan na hindi ito nagbabala tungkol sa lahat ng kaso kung saan maaaring umapaw ang code: ito
nagbabala lamang tungkol sa mga kaso kung saan ang compiler ay nagpapatupad ng ilang pag-optimize. Kaya ito
ang babala ay depende sa antas ng pag-optimize.

Ang isang optimization na ipinapalagay na ang sign na overflow ay hindi mangyayari ay ganap na ligtas kung
ang mga halaga ng mga variable na kasangkot ay tulad na ang overflow ay hindi kailanman, sa katunayan,
mangyari. Samakatuwid ang babalang ito ay madaling makapagbigay ng maling positibo: isang babala tungkol sa code
hindi naman talaga problema yun. Upang makatulong na tumuon sa mahahalagang isyu, ilang babala
natukoy ang mga antas. Walang mga babala na ibinibigay para sa paggamit ng hindi natukoy na nilagdaang overflow
kapag tinatantya kung gaano karaming mga pag-ulit ang kailangan ng isang loop, lalo na kapag tinutukoy
kung ang isang loop ay isasagawa sa lahat.

-Wstrict-overflow=1
Magbabala tungkol sa mga kaso na parehong kaduda-dudang at madaling iwasan. Halimbawa, may
-mahigpit-apaw, pinapasimple ng compiler ang "x + 1 > x" sa 1. Ang antas na ito ng
-Wstrict-overflow ay pinagana ng -Pader; mas mataas na antas ay hindi, at dapat na
tahasang hiniling.

-Wstrict-overflow=2
Magbabala din tungkol sa iba pang mga kaso kung saan ang isang paghahambing ay pinasimple sa isang pare-pareho. Para sa
halimbawa: "abs (x) >= 0". Mapapasimple lang ito kapag -mahigpit-apaw ay nasa
effect, dahil umaapaw ang "abs (INT_MIN)" sa "INT_MIN", na mas mababa sa zero.
-Wstrict-overflow (na walang antas) ay kapareho ng -Wstrict-overflow=2.

-Wstrict-overflow=3
Magbabala din tungkol sa iba pang mga kaso kung saan ang isang paghahambing ay pinasimple. Halimbawa: "x + 1
> 1" ay pinasimple sa "x > 0".

-Wstrict-overflow=4
Magbabala din tungkol sa iba pang mga pagpapasimple na hindi saklaw ng mga kaso sa itaas. Para sa
halimbawa: "(x * 10) / 5" ay pinasimple sa "x * 2".

-Wstrict-overflow=5
Magbabala din tungkol sa mga kaso kung saan binabawasan ng compiler ang magnitude ng isang pare-pareho
kasangkot sa isang paghahambing. Halimbawa: "x + 2 > y" ay pinasimple sa "x + 1 >= y".
Iniuulat lamang ito sa pinakamataas na antas ng babala dahil ang pagpapasimpleng ito
nalalapat sa maraming paghahambing, kaya ang antas ng babalang ito ay nagbibigay ng napakalaking bilang ng
maling positibo.

-Wsuggest-attribute=[dalisay|const|Walang balikan|format]
Babala para sa mga kaso kung saan ang pagdaragdag ng isang katangian ay maaaring maging kapaki-pakinabang. Ang mga katangian sa kasalukuyan
sinusuportahan ay nakalista sa ibaba.

-Wsuggest-attribute=puro
-Wsuggest-attribute=const
-Wsuggest-attribute=noreturn
Magbabala tungkol sa mga function na maaaring mga kandidato para sa mga attribute na "pure", "const" o
"Walang balikan". Nagbabala lamang ang compiler para sa mga function na makikita sa iba pang compilation
units o (sa kaso ng "pure" at "const") kung hindi nito mapatunayan na ang function
bumabalik ng normal. Normal na bumabalik ang isang function kung hindi ito naglalaman ng infinite
umikot o bumalik nang abnormal sa pamamagitan ng paghagis, pagtawag ng "i-abort" o pag-trap. Itong pagsusuri
nangangailangan ng opsyon -fipa-pure-const, na pinagana bilang default sa -O at mas mataas.
Ang mas mataas na antas ng pag-optimize ay nagpapabuti sa katumpakan ng pagsusuri.

-Wsuggest-attribute=format
-Wmissing-format-attribute
Magbabala tungkol sa mga function pointer na maaaring mga kandidato para sa mga attribute na "format."
Tandaan na ang mga ito ay mga posibleng kandidato lamang, hindi mga ganap. Hulaan iyon ng GCC
mga function pointer na may mga katangiang "format" na ginagamit sa pagtatalaga,
Ang pagsisimula, pagpasa ng parameter o pagbabalik ng mga pahayag ay dapat na may katumbas
"format" na katangian sa resultang uri. Ibig sabihin ang kaliwang bahagi ng
pagtatalaga o pagsisimula, ang uri ng variable ng parameter, o ang pagbabalik
uri ng naglalaman ng function ayon sa pagkakabanggit ay dapat ding magkaroon ng katangiang "format".
upang maiwasan ang babala.

Nagbabala rin ang GCC tungkol sa mga kahulugan ng function na maaaring mga kandidato para sa "format"
mga katangian. Muli, ito ay mga posibleng kandidato lamang. Hulaan ng GCC na "format"
maaaring angkop ang mga attribute para sa anumang function na tumatawag sa isang function na tulad ng
"vprintf" o "vscanf", ngunit maaaring hindi ito palaging nangyayari, at ilang mga function
kung saan ang mga katangiang "format" ay naaangkop ay maaaring hindi matukoy.

-Wsuggest-final-types
Babala tungkol sa mga uri na may mga virtual na pamamaraan kung saan mapapabuti ang kalidad ng code kung ang uri
ay idineklara gamit ang C++11 "final" specifier, o, kung maaari, idineklara sa isang
hindi kilalang namespace. Nagbibigay-daan ito sa GCC na mas agresibong i-devirtualize ang polymorphic
mga tawag. Ang babalang ito ay mas epektibo sa link time optimization, kung saan ang
impormasyon tungkol sa class hierarchy graph ay mas kumpleto.

-Wsuggest-panghuling-paraan
Babala tungkol sa mga virtual na pamamaraan kung saan mapapabuti ang kalidad ng code kung ang pamamaraan ay
idineklara gamit ang C++11 "final" specifier, o, kung maaari, ang uri nito ay idineklara sa
isang hindi kilalang namespace o may "panghuling" specifier. Ang babalang ito ay mas epektibo
na may link time optimization, kung saan ang impormasyon tungkol sa class hierarchy graph ay
mas kumpleto. Inirerekomenda na isaalang-alang muna ang mga mungkahi ng
-Wsuggest-final-types at pagkatapos ay muling buuin gamit ang mga bagong anotasyon.

-Wsuggest-override
Magbabala tungkol sa pag-override ng mga virtual na function na hindi minarkahan ng override na keyword.

-Warray-bounds
-Warray-bounds=n
Ang opsyon na ito ay aktibo lamang kapag -ftree-vrp ay aktibo (default para sa -O2 at sa itaas). Ito
nagbabala tungkol sa mga subscript sa mga array na palaging wala sa hangganan. Ang babalang ito ay
pinagana ng -Pader.

-Warray-bounds=1
Ito ang antas ng babala ng -Warray-bounds at pinagana ng -Pader; mas mataas na antas
ay hindi, at dapat na tahasang hilingin.

-Warray-bounds=2
Nagbabala rin ang antas ng babalang ito tungkol sa pag-access sa labas ng hangganan para sa mga array sa dulo ng
isang struct at para sa mga array na na-access sa pamamagitan ng mga pointer. Ang antas ng babala na ito ay maaaring magbigay ng a
mas malaking bilang ng mga maling positibo at na-deactivate bilang default.

-Wbool-kumpara
Magbabala tungkol sa boolean expression kumpara sa isang integer na value na iba sa
"totoo"/"mali". Halimbawa, palaging mali ang sumusunod na paghahambing:

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

Ang babalang ito ay pinagana ng -Pader.

-Wno-discarded-qualifiers (C at Objective-C lang)
Huwag magbigay ng babala kung ang mga uri ng kwalipikasyon sa mga pointer ay itinatapon. Karaniwan, ang
nagbabala ang compiler kung ang isang variable na "const char *" ay ipinasa sa isang function na tumatagal ng isang "char
*" parameter. Maaaring gamitin ang opsyong ito upang sugpuin ang naturang babala.

-Wno-discarded-array-qualifiers (C at Objective-C lang)
Huwag bigyan ng babala kung ang mga uri ng kwalipikasyon sa mga array na mga target ng pointer ay ginagawa
itinapon. Kadalasan, nagbabala ang compiler kung ang isang variable na "const int (*)[]" ay ipinapasa sa
isang function na kumukuha ng "int (*)[]" na parameter. Ang pagpipiliang ito ay maaaring gamitin upang sugpuin
ganyang babala.

-Wno-incompatible-pointer-types (C at Objective-C lang)
Huwag magbigay ng babala kapag may conversion sa pagitan ng mga pointer na may mga hindi tugmang uri.
Ang babalang ito ay para sa mga kasong hindi sakop ng -Wno-pointer-sign, na nagbabala para sa pointer
pagpasa ng argumento o pagtatalaga na may iba't ibang pirma.

-Wno-int-conversion (C at Objective-C lang)
Huwag magbigay ng babala tungkol sa hindi tugmang integer sa pointer at pointer sa integer na mga conversion.
Ang babalang ito ay tungkol sa mga implicit na conversion; para sa tahasang mga conversion ang mga babala
-Wno-int-to-pointer-cast at -Wno-pointer-to-int-cast maaaring magamit.

-Wno-div-by-zero
Huwag magbigay ng babala tungkol sa compile-time integer division sa pamamagitan ng zero. Floating-point division sa pamamagitan ng
hindi binabalaan ang zero, dahil maaari itong maging isang lehitimong paraan ng pagkuha ng mga infinity at
NaNs.

-Wsystem-header
Mag-print ng mga mensahe ng babala para sa mga construct na makikita sa mga file ng header ng system. Mga babala mula sa
Ang mga header ng system ay karaniwang pinipigilan, sa pag-aakalang kadalasan ay hindi
ipahiwatig ang mga tunay na problema at gagawin lamang ang output ng compiler na mas mahirap basahin. Gamit
ang pagpipiliang command-line na ito ay nagsasabi sa GCC na maglabas ng mga babala mula sa mga header ng system na parang sila
naganap sa user code. Gayunpaman, tandaan na ang paggamit -Pader kasabay ng opsyong ito
ang hindi magbabala tungkol sa mga hindi kilalang pragma sa mga header ng system---para doon, -Wunknown-pragmas
dapat ding gamitin.

-Wtrampolines
Babala tungkol sa mga trampoline na nabuo para sa mga pointer sa mga nested function. Ang trampolin ay a
maliit na piraso ng data o code na nilikha sa oras ng pagtakbo sa stack kapag ang address
ng isang nested function ay kinuha, at ginagamit upang tawagan ang nested function nang hindi direkta.
Para sa ilang mga target, ito ay binubuo lamang ng data at sa gayon ay hindi nangangailangan ng espesyal na paggamot.
Ngunit, para sa karamihan ng mga target, ito ay binubuo ng code at sa gayon ay nangangailangan ng stack na gawin
maipapatupad upang gumana nang maayos ang programa.

-Wfloat-pantay
Magbabala kung ang mga floating-point na halaga ay ginagamit sa mga paghahambing ng pagkakapantay-pantay.

Ang ideya sa likod nito ay kung minsan ito ay maginhawa (para sa programmer) na
isaalang-alang ang mga floating-point value bilang mga pagtatantya sa walang katapusan na tumpak na mga tunay na numero.
Kung ginagawa mo ito, kailangan mong mag-compute (sa pamamagitan ng pagsusuri sa code, o sa ilang
sa ibang paraan) ang maximum o malamang na maximum na error na ipinakilala ng computation, at
payagan ito kapag nagsasagawa ng mga paghahambing (at kapag gumagawa ng output, ngunit iyon ay a
magkaibang problema). Sa partikular, sa halip na subukan ang pagkakapantay-pantay, dapat mong suriin
upang makita kung ang dalawang halaga ay may mga saklaw na magkakapatong; at ito ay tapos na sa
relational operator, kaya malamang na nagkakamali ang mga paghahambing ng pagkakapantay-pantay.

-Wtradisyonal (C at Objective-C lang)
Magbabala tungkol sa ilang partikular na konstruksyon na kumikilos nang iba sa tradisyonal at ISO C. Gayundin
magbabala tungkol sa mga konstruksyon ng ISO C na walang tradisyonal na katumbas ng C, at/o may problema
mga konstruksyon na dapat iwasan.

* Mga macro parameter na lumalabas sa loob ng mga literal na string sa macro body. Sa
Ang tradisyonal na pagpapalit ng C macro ay nagaganap sa loob ng mga literal na string, ngunit sa ISO C
hindi ito.

* Sa tradisyonal na C, ang ilang preprocessor na mga direktiba ay hindi umiiral. Tradisyonal
itinuturing lamang ng mga preprocessor ang isang linya bilang isang direktiba kung ang # lumabas sa column
1 sa linya. Samakatuwid -Wtradisyonal nagbabala tungkol sa mga direktiba na ang tradisyonal na C
naiintindihan ngunit hindi pinapansin dahil ang # hindi lumalabas bilang unang character sa
Ang linya. Iminumungkahi din nito na itago mo ang mga direktiba tulad ng "#pragma" na hindi naiintindihan ni
tradisyonal na C sa pamamagitan ng pag-indent sa mga ito. Ang ilang mga tradisyonal na pagpapatupad ay hindi
kilalanin ang "#elif", kaya ang pagpipiliang ito ay nagmumungkahi na iwasan ito nang buo.

* Isang macro na parang function na lumalabas nang walang mga argumento.

* Ang unary plus operator.

* Ang U integer constant suffix, o ang F or L floating-point constant suffixes.
(Sinusuportahan ng tradisyonal na C ang L suffix sa integer constants.) Tandaan, ang mga ito
lumalabas ang mga suffix sa mga macro na tinukoy sa mga header ng system ng karamihan sa mga modernong system,
hal. ang _MIN/_MAX macros sa " ". Ang paggamit ng mga macro na ito sa user code ay maaaring
karaniwang humahantong sa mga huwad na babala, gayunpaman, mayroon ang pinagsamang preprocessor ng GCC
sapat na konteksto upang maiwasan ang babala sa mga kasong ito.

* Isang function na idineklara na panlabas sa isang bloke at pagkatapos ay ginamit pagkatapos ng pagtatapos ng
harangan.

* Ang isang "switch" na pahayag ay may isang operand ng uri na "mahaba".

* Ang isang di-"static" na deklarasyon ng function ay sumusunod sa isang "static" na isa. Ang construct na ito ay hindi
tinanggap ng ilang tradisyonal na C compiler.

* Ang uri ng ISO ng isang integer constant ay may ibang lapad o signedness mula dito
tradisyonal na uri. Ang babalang ito ay ibinibigay lamang kung ang base ng pare-pareho ay sampu.
Ibig sabihin, ang mga hexadecimal o octal na halaga, na karaniwang kumakatawan sa mga bit pattern, ay hindi
nagbabala tungkol sa.

* Ang paggamit ng ISO string concatenation ay nakita.

* Pagsisimula ng mga awtomatikong pinagsama-samang.

* Sumasalungat ang identifier sa mga label. Ang tradisyunal na C ay walang hiwalay na namespace para sa
mga label.

* Pagsisimula ng mga unyon. Kung zero ang initializer, aalisin ang babala.
Ginagawa ito sa ilalim ng pagpapalagay na ang zero initializer sa user code ay lilitaw
nakakondisyon sa hal. "__STDC__" upang maiwasan ang mga nawawalang babala ng initializer at umasa sa
default na pagsisimula sa zero sa tradisyonal na C case.

* Mga conversion sa pamamagitan ng mga prototype sa pagitan ng mga fixed/floating-point value at vice versa. Ang
ang kawalan ng mga prototype na ito kapag nag-compile sa tradisyonal na C ay nagiging sanhi ng malubhang
mga problema. Ito ay isang subset ng mga posibleng babala sa conversion; para sa buong set
gamitin -Wtradisyonal-pagbabagong-loob.

* Paggamit ng ISO C style function na mga kahulugan. Ang babalang ito ay sadyang hindi Nagbigay
para sa mga prototype na deklarasyon o variadic function dahil ang mga tampok na ISO C na ito
lumalabas sa iyong code kapag gumagamit ng tradisyonal na C compatibility macro ng libiberty,
"PARAMS" at "VPARAMS". Ang babalang ito ay na-bypass din para sa mga nested function
dahil ang feature na iyon ay isa nang extension ng GCC at sa gayon ay hindi nauugnay sa
tradisyonal na C compatibility.

-Wtradisyonal-pagbabagong-loob (C at Objective-C lang)
Magbabala kung ang isang prototype ay nagdudulot ng isang uri ng conversion na iba sa kung ano ang mangyayari
sa parehong argumento sa kawalan ng isang prototype. Kabilang dito ang mga conversion ng
fixed point sa lumulutang at vice versa, at mga conversion na nagbabago sa lapad o
pagpirma ng isang fixed-point argument maliban kung pareho sa default na promosyon.

-Wdeclaration-after-statement (C at Objective-C lang)
Magbabala kapag may nakitang deklarasyon pagkatapos ng isang pahayag sa isang bloke. Ang construct na ito, kilala
mula sa C++, ay ipinakilala sa ISO C99 at bilang default ay pinapayagan sa GCC. Hindi ito
suportado ng ISO C90.

-Wundef
Magbabala kung ang isang hindi natukoy na identifier ay sinusuri sa isang "#if" na direktiba.

-Wno-endif-label
Huwag magbigay ng babala sa tuwing ang isang "#else" o isang "#endif" ay sinusundan ng text.

-Wshadow
Magbabala sa tuwing ang isang lokal na variable o uri ng deklarasyon ay nililiman ang isa pang variable,
parameter, uri, miyembro ng klase (sa C++), o instance variable (sa Objective-C) o
sa tuwing ang isang built-in na function ay nililiman. Tandaan na sa C++, nagbabala ang compiler kung a
Ang lokal na variable ay nililiman ang isang tahasang typedef, ngunit hindi kung nililiman nito ang isang struct/class/enum.

-Wno-shadow-ivar (Layunin-C lang)
Huwag magbigay ng babala sa tuwing ang isang lokal na variable ay naglalagay ng isang instance variable sa isang Objective-C
pamamaraan.

-Wlarger-than=Len
Magbabala sa tuwing may bagay na mas malaki kaysa sa Len ang mga byte ay tinukoy.

-Wframe-mas malaki-kaysa=Len
Magbabala kung ang laki ng isang function frame ay mas malaki kaysa sa Len byte. Tapos na ang computation
upang matukoy ang laki ng stack frame ay tinatayang at hindi konserbatibo. Ang totoo
ang mga kinakailangan ay maaaring medyo mas malaki kaysa sa Len kahit na hindi ka nakakakuha ng babala. Sa
karagdagan, anumang puwang na inilalaan sa pamamagitan ng "alloca", variable-length array, o nauugnay
Ang mga konstruksyon ay hindi kasama ng tagatala kapag tinutukoy kung maglalabas o hindi ng a
babala.

-Wno-free-nonheap-object
Huwag magbigay ng babala kapag sinusubukang palayain ang isang bagay na hindi inilaan sa heap.

-Wstack-usage=Len
Magbabala kung ang paggamit ng stack ng isang function ay maaaring mas malaki kaysa sa Len byte. Ang computation
ginawa upang matukoy ang paggamit ng stack ay konserbatibo. Anumang puwang na inilaan sa pamamagitan ng "alloca",
variable-length array, o mga kaugnay na construct ay kasama ng compiler kapag
pagtukoy kung maglalabas ng babala o hindi.

Ang mensahe ay naaayon sa output ng -fstack-paggamit.

* Kung ang paggamit ng stack ay ganap na static ngunit lumampas sa tinukoy na halaga, ito ay:

babala: ang paggamit ng stack ay 1120 bytes

* Kung ang paggamit ng stack ay (bahagyang) dynamic ngunit may hangganan, ito ay:

babala: ang paggamit ng stack ay maaaring 1648 bytes

* Kung ang paggamit ng stack ay (bahagyang) dynamic at hindi limitado, ito ay:

babala: maaaring walang hangganan ang paggamit ng stack

-Wunsafe-loop-optimizations
Magbabala kung hindi ma-optimize ang loop dahil hindi maaaring ipagpalagay ng compiler ang anumang bagay
ang mga hangganan ng mga indeks ng loop. Sa -funsafe-loop-optimizations babala kung ang compiler
gumagawa ng gayong mga pagpapalagay.

-Wno-pedantic-ms-format (MinGW target lang)
Kapag ginamit kasama ng -Wformat at -pedantic walang mga extension ng GNU, ito
hindi pinapagana ng opsyon ang mga babala tungkol sa mga non-ISO na "printf" / "scanf" na mga specifier ng lapad ng format
Ginagamit ang "I32", "I64", at "I" sa mga target ng Windows, na nakadepende sa runtime ng MS.

-Wpointer-arith
Magbabala tungkol sa anumang bagay na nakasalalay sa "laki ng" isang uri ng function o ng "walang bisa". GNU C
itinatalaga ang mga uri na ito ng sukat na 1, para sa kaginhawahan sa mga kalkulasyon na may "void *"
mga pointer at pointer sa mga function. Sa C++, babalaan din kapag may operasyon sa aritmetika
nagsasangkot ng "NULL". Ang babalang ito ay pinagana rin ng -Wpedantic.

-Wtype-limitasyon
Magbabala kung palaging tama o palaging mali ang isang paghahambing dahil sa limitadong saklaw ng
uri ng data, ngunit huwag magbigay ng babala para sa patuloy na mga expression. Halimbawa, bigyan ng babala kung ang isang unsigned
ang variable ay inihambing laban sa zero sa "<" o ">=". Ang babalang ito ay pinagana rin ng
-Wextra.

-Wbad-function-cast (C at Objective-C lang)
Magbabala kapag ang isang function na tawag ay na-cast sa isang hindi tugmang uri. Halimbawa, bigyan ng babala kung may tawag
sa isang function na nagbabalik ng isang integer na uri ay inihagis sa isang uri ng pointer.

-Wc90-c99-compat (C at Objective-C lang)
Babala tungkol sa mga feature na wala sa ISO C90, ngunit nasa ISO C99. Halimbawa,
bigyan ng babala ang tungkol sa paggamit ng mga arrays ng variable na haba, "long long" type, "bool" type, compound
mga literal, itinalagang initializer, at iba pa. Ang pagpipiliang ito ay independiyente sa
mode ng pamantayan. Naka-disable ang mga babala sa expression na sumusunod sa "__extension__".

-Wc99-c11-compat (C at Objective-C lang)
Babala tungkol sa mga feature na wala sa ISO C99, ngunit nasa ISO C11. Halimbawa,
magbabala tungkol sa paggamit ng mga hindi kilalang istruktura at unyon, "_Atomic" type qualifier,
"_Thread_local" storage-class specifier, "_Alignas" specifier, "Alignof" operator,
"_Generic" na keyword, at iba pa. Ang opsyon na ito ay independiyente sa standards mode.
Naka-disable ang mga babala sa expression na sumusunod sa "__extension__".

-Wc++-compat (C at Objective-C lang)
Magbabala tungkol sa mga ISO C construct na nasa labas ng karaniwang subset ng ISO C at ISO
C++, hal. kahilingan para sa implicit na conversion mula sa "void *" sa isang pointer sa non-"void"
uri.

-Wc++11-compat (C++ at Objective-C++ lang)
Babala tungkol sa mga konstruksyon ng C++ na ang kahulugan ay naiiba sa pagitan ng ISO C++ 1998 at ISO C++ 2011,
hal, mga identifier sa ISO C++ 1998 na mga keyword sa ISO C++ 2011. Ang babalang ito
buksan -Wnarrowing at pinagana ng -Pader.

-Wc++14-compat (C++ at Objective-C++ lang)
Magbabala tungkol sa mga konstruksyon ng C++ na ang kahulugan ay naiiba sa pagitan ng ISO C++ 2011 at ISO C++ 2014.
Ang babalang ito ay pinagana ng -Pader.

-Wcast-qual
Magbabala sa tuwing may ipapalabas na pointer upang maalis ang isang uri ng kwalipikasyon mula sa target na uri.
Halimbawa, magbabala kung ang isang "const char *" ay na-cast sa isang ordinaryong "char *".

Magbabala din kapag gumagawa ng cast na nagpapakilala ng uri ng kwalipikasyon sa hindi ligtas na paraan. Para sa
halimbawa, ang pag-cast ng "char **" sa "const char **" ay hindi ligtas, tulad ng sa halimbawang ito:

Ang /* p ay char ** value. */
const char **q = (const char **) p;
/* Ang pagtatalaga ng readonly string sa const char * ay OK. */
*q = "string";
/* Ngayon char** pointer ay tumuturo sa read-only memory. */
**p = 'b';

-Wcast-align
Magbabala sa tuwing ang isang pointer ay na-cast na ang kinakailangang pagkakahanay ng target ay
nadagdagan. Halimbawa, magbabala kung ang isang "char *" ay na-cast sa isang "int *" sa mga machine kung saan
ang mga integer ay maaari lamang ma-access sa dalawa o apat na byte na hangganan.

-Magsulat-mga string
Kapag kino-compile ang C, bigyan ang string constants ng uri na "const char[haba]" kaya ang pagkopya
ang address ng isa sa isang hindi "const" "char *" na pointer ay gumagawa ng babala. Ang mga ito
Ang mga babala ay tumutulong sa iyo na mahanap sa compile time code na maaaring subukang magsulat sa isang string
pare-pareho, ngunit kung naging maingat ka sa paggamit ng "const" sa mga deklarasyon
at mga prototype. Kung hindi, ito ay isang istorbo lamang. Ito ang dahilan kung bakit hindi namin ginawa -Pader
humiling ng mga babalang ito.

Kapag kino-compile ang C++, bigyan ng babala ang tungkol sa hindi na ginagamit na conversion mula sa mga literal na string patungo sa "char
*". Ang babalang ito ay pinagana bilang default para sa mga programang C++.

-Wclobbered
Babala para sa mga variable na maaaring mabago ng "longjmp" o "vfork". Ang babalang ito ay
pinagana rin ng -Wextra.

-Wconditionally-suportado (C++ at Objective-C++ lang)
Babala para sa mga construct na sinusuportahan ng may kondisyon (C++11 [intro.defs]).

-Wconversion
Magbabala para sa mga implicit na conversion na maaaring magbago ng halaga. Kabilang dito ang mga conversion
sa pagitan ng tunay at integer, tulad ng "abs (x)" kapag ang "x" ay "doble"; mga conversion sa pagitan ng
nilagdaan at hindi nalagdaan, tulad ng "unsigned ui = -1"; at mga conversion sa mas maliliit na uri, tulad ng
"sqrtf (M_PI)". Huwag magbigay ng babala para sa mga tahasang cast tulad ng "abs ((int) x)" at "ui =
(unsigned) -1", o kung ang halaga ay hindi binago ng conversion tulad ng sa "abs (2.0)".
Maaaring hindi paganahin ng
paggamit -Wno-sign-conversion.

Para sa C++, magbabala din para sa nakakalito na resolution ng overload para sa mga conversion na tinukoy ng user; at
mga conversion na hindi kailanman gumagamit ng isang uri ng operator ng conversion: mga conversion sa "walang bisa", pareho
uri, isang batayang klase o isang sanggunian sa kanila. Mga babala tungkol sa mga conversion sa pagitan ng nilagdaan
at ang mga unsigned integer ay hindi pinagana bilang default sa C++ maliban kung -Wsign-conversion is
tahasang pinagana.

-Wno-conversion-null (C++ at Objective-C++ lang)
Huwag magbigay ng babala para sa mga conversion sa pagitan ng "NULL" at mga hindi-pointer na uri. -Wconversion-null is
pinagana bilang default.

-Wzero-bilang-null-pointer-constant (C++ at Objective-C++ lang)
Magbabala kapag ang literal na '0' ay ginamit bilang null pointer constant. Ito ay maaaring maging kapaki-pakinabang sa
mapadali ang conversion sa "nullptr" sa C++11.

-Wdate-oras
Magbabala kapag ang mga macro na "__TIME__", "__DATE__" o "__TIMESTAMP__" ay nakatagpo habang sila
maaaring maiwasan ang bit-wise-identical na mga compilation na maaaring kopyahin.

-Wdelete-hindi kumpleto (C++ at Objective-C++ lang)
Magbabala kapag nagtatanggal ng pointer sa hindi kumpletong uri, na maaaring magdulot ng hindi natukoy na gawi sa
runtime. Ang babalang ito ay pinagana bilang default.

-Wuseless-cast (C++ at Objective-C++ lang)
Magbabala kapag na-cast ang isang expression sa sarili nitong uri.

-Wempty-body
Magbabala kung ang isang walang laman na katawan ay nangyayari sa isang "if", "else" o "do while" na pahayag. Ang babalang ito
ay pinagana rin ng -Wextra.

-Wenum-kumpara
Magbabala tungkol sa isang paghahambing sa pagitan ng mga halaga ng iba't ibang uri ng enumerated. Sa C++ enumeral
ang mga hindi pagkakatugma sa mga conditional na expression ay nasuri din at ang babala ay pinagana ng
default. Sa C ang babalang ito ay pinagana ng -Pader.

-Wjump-misses-init (C, Objective-C lang)
Magbabala kung ang isang "goto" na pahayag o isang "switch" na pahayag ay tumalon sa kabila
pagsisimula ng isang variable, o tumalon pabalik sa isang label pagkatapos ng variable
pinasimulan. Nagbabala lamang ito tungkol sa mga variable na sinisimulan kapag sila ay
ipinahayag. Ang babalang ito ay sinusuportahan lamang para sa C at Objective-C; sa C++ ganitong uri
Ang sangay ay isang error sa anumang kaso.

-Wjump-misses-init ay kasama sa -Wc++-compat. Maaari itong i-disable gamit ang
-Wno-jump-misses-init pagpipilian.

-Wsign-ihambing
Magbabala kapag ang paghahambing sa pagitan ng nilagdaan at hindi nalagdaan na mga halaga ay maaaring makagawa ng mali
resulta kapag ang nilagdaang halaga ay na-convert sa hindi nalagdaan. Naka-enable din ang babalang ito
by -Wextra; upang makuha ang iba pang mga babala ng -Wextra nang walang babalang ito, gamitin -Wextra
-Wno-sign-compare.

-Wsign-conversion
Magbabala para sa mga implicit na conversion na maaaring magbago ng tanda ng isang integer na halaga, tulad ng
pagtatalaga ng signed integer expression sa unsigned integer variable. Isang tahasang
pinatahimik ni cast ang babala. Sa C, ang pagpipiliang ito ay pinagana din ng -Wconversion.

-Wfloat-conversion
Magbabala para sa mga implicit na conversion na nagpapababa sa katumpakan ng isang tunay na halaga. Ito
kasama ang mga conversion mula sa tunay hanggang sa integer, at mula sa mas mataas na katumpakan na tunay hanggang sa mas mababa
mga tunay na halaga ng katumpakan. Ang pagpipiliang ito ay pinagana rin ng -Wconversion.

-Wsized-deallocation (C++ at Objective-C++ lang)
Magbabala tungkol sa isang kahulugan ng isang hindi kalakihang function ng deallocation

void operator tanggalin (void *) noexcept;
void operator tanggalin [] (void *) noexcept;

nang walang kahulugan ng kaukulang laki ng function ng deallocation

void operator tanggalin (void *, std::size_t) noexcept;
void operator tanggalin [] (void *, std::size_t) noexcept;

o vice versa. Pinagana ng -Wextra kasama ng -fsized-deallocation.

-Wsizeof-pointer-memaccess
Magbabala para sa kahina-hinalang mga parameter ng haba sa ilang partikular na string at memory built-in na function
kung ang argumento ay gumagamit ng "sizeof". Ang babalang ito ay nagbabala eg tungkol sa "memset (ptr, 0, sizeof
(ptr));" kung ang "ptr" ay hindi isang array, ngunit isang pointer, at nagmumungkahi ng posibleng pag-aayos, o
tungkol sa "memcpy (&foo, ptr, sizeof (&foo));". Ang babalang ito ay pinagana ng -Pader.

-Wsizeof-array-argument
Magbabala kapag ang operator na "sizeof" ay inilapat sa isang parameter na idineklara bilang isang array
sa isang kahulugan ng function. Ang babalang ito ay pinagana bilang default para sa mga programang C at C++.

-Wmemset-transposed-args
Magbabala para sa mga kahina-hinalang tawag sa built-in na function na "memset", kung ang pangalawang argumento ay
hindi zero at ang ikatlong argumento ay zero. Nagbabala ito hal@ tungkol sa "memset (buf, sizeof
buf, 0)" kung saan malamang na "memset (buf, 0, sizeof buf)" ang ibig sabihin sa halip. Ang
diagnostics ay ibinubuga lamang kung ang ikatlong argumento ay literal na zero. Kung ito ay ilan
expression na nakatiklop sa zero, isang cast ng zero sa ilang uri, atbp., ito ay mas mababa
malamang na ang gumagamit ay nagkamali sa pagpapalitan ng mga argumento at walang babala na inilalabas.
Ang babalang ito ay pinagana ng -Pader.

-Waddress
Magbabala tungkol sa kahina-hinalang paggamit ng mga memory address. Kabilang dito ang paggamit ng address ng a
function sa isang conditional expression, gaya ng "void func(void); if (func)", at
paghahambing laban sa memory address ng isang literal na string, gaya ng "if (x == "abc")".
Ang ganitong mga paggamit ay karaniwang nagpapahiwatig ng isang error sa programmer: ang address ng isang function palagi
sinusuri sa totoo, kaya ang kanilang paggamit sa isang kondisyon ay karaniwang nagpapahiwatig na ang programmer
nakalimutan ang mga panaklong sa isang function na tawag; at paghahambing laban sa mga literal na string
nagreresulta sa hindi natukoy na pag-uugali at hindi portable sa C, kaya karaniwang ipinapahiwatig ng mga ito
na nilayon ng programmer na gamitin ang "strcmp". Ang babalang ito ay pinagana ng -Pader.

-Wlogical-op
Magbabala tungkol sa kahina-hinalang paggamit ng mga lohikal na operator sa mga expression. Kabilang dito ang paggamit
mga lohikal na operator sa mga konteksto kung saan ang isang bit-wise na operator ay malamang na inaasahan.

-Wlogical-not-parentheses
Babala tungkol sa lohikal na hindi ginagamit sa kaliwang bahagi ng operand ng isang paghahambing. Ito
ang opsyon ay hindi nagbababala kung ang RHS operand ay isang boolean na uri. Ang layunin nito ay upang
makakita ng kahina-hinalang code tulad ng sumusunod:

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

Posibleng sugpuin ang babala sa pamamagitan ng pagbabalot ng LHS sa mga panaklong:

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

Ang babalang ito ay pinagana ng -Pader.

-Waggregate-return
Magbabala kung ang anumang mga function na nagbabalik ng mga istruktura o unyon ay tinukoy o tinatawag. (Sa
mga wika kung saan maaari kang magbalik ng array, nagdudulot din ito ng babala.)

-Wno-agresibo-loop-optimizations
Magbabala kung sa isang loop na may pare-parehong bilang ng mga pag-ulit ay nakita ng compiler na hindi natukoy
pag-uugali sa ilang pahayag sa panahon ng isa o higit pa sa mga pag-ulit.

-Wno-mga katangian
Huwag magbigay ng babala kung ang isang hindi inaasahang "__attribute__" ay ginamit, tulad ng mga hindi nakikilalang katangian,
mga katangian ng function na inilapat sa mga variable, atbp. Hindi nito hihinto ang mga error para sa
maling paggamit ng mga sinusuportahang katangian.

-Wno-builtin-macro-redefined
Huwag magbigay ng babala kung ang ilang mga built-in na macro ay muling tinukoy. Pinipigilan nito ang mga babala para sa
redefinition ng "__TIMESTAMP__", "__TIME__", "__DATE__", "__FILE__", at
"__BASE_FILE__".

-Mahigpit na mga prototype (C at Objective-C lang)
Magbabala kung ang isang function ay idineklara o tinukoy nang hindi tinukoy ang mga uri ng argumento. (An
pinahihintulutan ang lumang-style na kahulugan ng function nang walang babala kung nauunahan ng a
deklarasyon na tumutukoy sa mga uri ng argumento.)

-Wold-style-deklarasyon (C at Objective-C lang)
Magbabala para sa mga luma na paggamit, ayon sa C Standard, sa isang deklarasyon. Para sa
halimbawa, bigyan ng babala kung ang mga tagatukoy ng klase ng imbakan tulad ng "static" ay hindi ang mga unang bagay sa a
deklarasyon. Ang babalang ito ay pinagana rin ng -Wextra.

-Wold-style-kahulugan (C at Objective-C lang)
Magbabala kung ginamit ang isang lumang-style na kahulugan ng function. Nagbibigay ng babala kahit na mayroon
isang nakaraang prototype.

-Wmissing-parameter-type (C at Objective-C lang)
Ang isang parameter ng function ay idineklara nang walang uri ng specifier sa K&R-style na mga function:

void foo(bar) { }

Ang babalang ito ay pinagana rin ng -Wextra.

-Wmissing-prototypes (C at Objective-C lang)
Magbabala kung ang isang pandaigdigang function ay tinukoy nang walang nakaraang prototype na deklarasyon. Ito
ang babala ay ibinibigay kahit na ang kahulugan mismo ay nagbibigay ng isang prototype. Gamitin ang opsyong ito
upang makita ang mga pandaigdigang function na walang katugmang prototype na deklarasyon sa a
file ng header. Ang pagpipiliang ito ay hindi wasto para sa C++ dahil ang lahat ng mga deklarasyon ng function
magbigay ng mga prototype at ang isang hindi tugmang deklarasyon ay nagdedeklara ng labis na karga kaysa
sumasalungat sa isang naunang deklarasyon. Gamitin -Wmissing-deklarasyon para makita ang nawawala
mga deklarasyon sa C++.

-Wmissing-deklarasyon
Magbabala kung ang isang pandaigdigang function ay tinukoy nang walang naunang deklarasyon. Gawin ito kahit na
ang kahulugan mismo ay nagbibigay ng isang prototype. Gamitin ang opsyong ito para makita ang global
mga function na hindi idineklara sa mga file ng header. Sa C, walang mga babala na inilabas para sa
mga function na may mga nakaraang non-prototype na deklarasyon; gamitin -Wmissing-prototypes mapansin
nawawalang mga prototype. Sa C++, walang mga babala na ibinibigay para sa mga template ng function, o para sa
mga inline na function, o para sa mga function sa mga anonymous na namespace.

-Wmissing-field-initializers
Magbabala kung ang initializer ng isang istraktura ay may nawawalang ilang field. Halimbawa, ang mga sumusunod
ang code ay nagdudulot ng gayong babala, dahil ang "xh" ay tahasang zero:

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

Ang pagpipiliang ito ay hindi nagbabala tungkol sa mga itinalagang initializer, kaya ang sumusunod na pagbabago
hindi nagpapalitaw ng babala:

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

Sa C++ ang opsyong ito ay hindi nagbabala tungkol sa walang laman na { } initializer, halimbawa:

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

Ang babalang ito ay kasama sa -Wextra. Para makakuha ng iba -Wextra mga babala kung wala ang isang ito,
gamitin -Wextra -Wno-missing-field-initializers.

-Wno-multichar
Huwag bigyan ng babala kung ang isang multicharacter constant ('FOOF') Ginagamit. Karaniwang ipinapahiwatig nila ang a
typo sa code ng user, dahil mayroon silang mga value na tinukoy sa pagpapatupad, at hindi dapat
ginamit sa portable code.

-Na-normalize[=<wala|id|nfc|nfkc>]
Sa ISO C at ISO C++, magkaiba ang dalawang identifier kung magkaiba ang sequence ng mga ito
mga karakter. Gayunpaman, minsan kapag ang mga character ay nasa labas ng pangunahing hanay ng character na ASCII
ay ginagamit, maaari kang magkaroon ng dalawang magkaibang pagkakasunud-sunod ng character na magkapareho ang hitsura. Para maiwasan
pagkalito, ang pamantayang ISO 10646 ay nagtatakda ng ilan normalisasyon patakaran na kapag inilapat
tiyakin na ang dalawang sequence na magkapareho ang hitsura ay magiging parehong sequence. GCC
maaaring balaan ka kung gumagamit ka ng mga identifier na hindi pa na-normalize; pagpipiliang ito
kinokontrol ang babalang iyon.

Mayroong apat na antas ng babala na sinusuportahan ng GCC. Ang default ay -Wnormalized=nfc,
na nagbabala tungkol sa anumang identifier na wala sa ISO 10646 "C" na normalized na form,
NFC. Ang NFC ay ang inirerekomendang form para sa karamihan ng mga gamit. Ito ay katumbas ng -Na-normalize.

Sa kasamaang palad, may ilang mga character na pinapayagan sa mga identifier ng ISO C at ISO C++
na, kapag ginawang NFC, ay hindi pinapayagan sa mga identifier. Ibig sabihin, walang paraan
upang gamitin ang mga simbolo na ito sa portable na ISO C o C++ at ilagay ang lahat ng iyong identifier sa NFC.
-Wnormalized=id pinipigilan ang babala para sa mga karakter na ito. Inaasahan ang hinaharap
itatama ito ng mga bersyon ng mga pamantayang kasangkot, kaya naman hindi ang pagpipiliang ito
ang default.

Maaari mong isara ang babala para sa lahat ng character sa pamamagitan ng pagsulat -Wnormalized=wala or
-Wno-normalize. Dapat mo lang gawin ito kung gumagamit ka ng ibang normalisasyon
scheme (tulad ng "D"), dahil kung hindi, madali kang makakagawa ng mga bug na literal
imposibleng makita.

Ang ilang mga character sa ISO 10646 ay may natatanging kahulugan ngunit magkapareho ang hitsura sa ilang mga font
o mga pamamaraan ng pagpapakita, lalo na kapag nailapat na ang pag-format. Halimbawa
Ang "\u207F", "SUPERSCRIPT LATIN MALIIT NA LETTER N", ay ipinapakita tulad ng isang regular na "n" na
ay inilagay sa isang superscript. Tinutukoy ng ISO 10646 ang NFKC normalization scheme sa
i-convert din ang lahat ng ito sa isang karaniwang form, at nagbabala ang GCC kung wala ang iyong code
NFKC kung gagamit ka -Wnormalized=nfkc. Ang babalang ito ay maihahambing sa babala tungkol sa bawat isa
identifier na naglalaman ng letrang O dahil maaaring malito ito sa digit na 0,
at sa gayon ay hindi ang default, ngunit maaaring maging kapaki-pakinabang bilang isang lokal na coding convention kung ang
hindi maaayos ang kapaligiran ng programming upang maipakita ang mga character na ito nang malinaw.

-Wno-deprecated
Huwag magbigay ng babala tungkol sa paggamit ng mga hindi na ginagamit na feature.

-Wno-deprecated-declarations
Huwag magbigay ng babala tungkol sa paggamit ng mga function, variable, at uri na minarkahan bilang hindi na ginagamit ng
gamit ang attribute na "deprecated".

-Wno-overflow
Huwag bigyan ng babala ang tungkol sa pag-overflow ng compile-time sa mga pare-parehong expression.

-Wno-odr
Magbabala tungkol sa mga paglabag sa One Definition Rule sa panahon ng link-time optimization. Nangangailangan
-flto-odr-type-merging upang paganahin. Pinagana bilang default.

-Wopenmp-simd
Magbabala kung ang modelo ng gastos ng vectorizer ay na-override ang OpenMP o ang Cilk Plus simd directive
itinakda ng gumagamit. Ang -fsimd-cost-model=walang limitasyon ang opsyon ay maaaring gamitin upang i-relax ang gastos
modelo.

-Woverride-init (C at Objective-C lang)
Magbabala kung ang isang inisyal na field na walang mga side effect ay na-override kapag gumagamit ng itinalaga
mga initializer.

Ang babalang ito ay kasama sa -Wextra. Para makakuha ng iba -Wextra mga babala kung wala ang isang ito,
gamitin -Wextra -Wno-override-init.

-Nakabalot
Magbabala kung ang isang istraktura ay binibigyan ng naka-pack na katangian, ngunit ang naka-pack na katangian ay walang
epekto sa layout o sukat ng istraktura. Maaaring mali ang pagkakahanay sa mga ganitong istruktura
maliit na benepisyo. Halimbawa, sa code na ito, ang variable na "fx" sa "struct bar" ay
hindi naka-align kahit na ang "struct bar" ay wala mismo ng naka-pack na katangian:

struct foo {
intx;
char a, b, c, d;
} __attribute __ ((naka-pack));
struct bar {
char z;
struct foo f;
};

-Wpacked-bitfield-compat
Ang 4.1, 4.2 at 4.3 na serye ng GCC ay binabalewala ang "naka-pack" na katangian sa mga bit-field ng uri
"char". Naayos na ito sa GCC 4.4 ngunit ang pagbabago ay maaaring humantong sa mga pagkakaiba sa
layout ng istraktura. Ipinapaalam sa iyo ng GCC kapag nagbago ang offset ng naturang field sa GCC
4.4. Halimbawa, wala nang 4-bit na padding sa pagitan ng field na "a" at "b" dito
Istraktura:

struct foo
{
char a:4;
char b:8;
} __attribute__ ((naka-pack na));

Ang babalang ito ay pinagana bilang default. Gamitin -Wno-packed-bitfield-compat upang huwag paganahin ito
babala.

-Wpadded
Magbabala kung ang padding ay kasama sa isang istraktura, alinman upang ihanay ang isang elemento ng
istraktura o upang ihanay ang buong istraktura. Minsan kapag nangyari ito posible
upang muling ayusin ang mga patlang ng istraktura upang mabawasan ang padding at upang gawin ang
mas maliit ang istraktura.

-Wredundant-decls
Magbabala kung mayroong anumang idineklara nang higit sa isang beses sa parehong saklaw, kahit na sa mga kaso kung saan
maramihang deklarasyon ay wasto at walang pagbabago.

-Wnested-externs (C at Objective-C lang)
Magbabala kung ang isang "extern" na deklarasyon ay nakatagpo sa loob ng isang function.

-Wno-inherited-variadic-ctor
Pigilan ang mga babala tungkol sa paggamit ng C++11 na nagmana ng mga constructor kapag ang batayang klase
minana mula sa may isang C variadic constructor; ang babala ay naka-on bilang default dahil ang
ang ellipsis ay hindi namamana.

-Winline
Magbabala kung hindi ma-inline ang isang function na idineklara bilang inline. Kahit na ito
opsyon, hindi nagbabala ang compiler tungkol sa mga pagkabigo sa mga inline na function na idineklara sa
mga header ng system.

Gumagamit ang compiler ng iba't ibang heuristics upang matukoy kung mag-inline a o hindi
function. Halimbawa, isinasaalang-alang ng compiler ang laki ng pagiging function
inlined at ang dami ng inlining na nagawa na sa kasalukuyang function.
Samakatuwid, ang tila hindi gaanong makabuluhang mga pagbabago sa source program ay maaaring maging sanhi ng
mga babala na ginawa ng -Winline upang lumitaw o mawala.

-Wno-invalid-offsetof (C++ at Objective-C++ lang)
Pigilan ang mga babala mula sa paglalapat ng "offsetof" na macro sa isang uri na hindi POD. Ayon kay
ang 2014 ISO C++ standard, ang paglalapat ng "offsetof" sa isang hindi pamantayang uri ng layout ay
hindi natukoy. Sa umiiral na mga pagpapatupad ng C++, gayunpaman, ang "offsetof" ay karaniwang nagbibigay
makabuluhang resulta. Ang flag na ito ay para sa mga user na nakakaalam na sila ay nagsusulat
nonportable code at na sadyang pinili na huwag pansinin ang babala tungkol dito.

Ang mga paghihigpit sa "offsetof" ay maaaring maluwag sa hinaharap na bersyon ng pamantayan ng C++.

-Wno-int-to-pointer-cast
Pigilan ang mga babala mula sa mga cast hanggang sa uri ng pointer ng isang integer na may ibang laki. Sa
C++, ang pag-cast sa isang uri ng pointer na mas maliit na laki ay isang error. Wint-to-pointer-cast is
pinagana bilang default.

-Wno-pointer-to-int-cast (C at Objective-C lang)
Pigilan ang mga babala mula sa mga cast mula sa isang pointer patungo sa isang uri ng integer na may ibang laki.

-Winvalid-pch
Magbabala kung may nakitang precompiled na header sa path ng paghahanap ngunit hindi magagamit.

-Wlong-long
Magbabala kung ginamit ang uri na "mahabang mahaba". Ito ay pinagana ng alinman -Wpedantic or
-Wtradisyonal sa ISO C90 at C++98 mode. Upang pigilan ang mga mensahe ng babala, gamitin
-Wno-long-long.

-Wvariadic-macros
Magbabala kung ginagamit ang mga variadic macro sa ISO C90 mode, o kung ang kahaliling syntax ng GNU ay
ginagamit sa ISO C99 mode. Ito ay pinagana ng alinman -Wpedantic or -Wtradisyonal. Upang
pagbawalan ang mga mensahe ng babala, gamitin -Wno-variadic-macros.

-Wvarargs
Magbabala sa kaduda-dudang paggamit ng mga macro na ginagamit upang pangasiwaan ang mga variable na argumento tulad ng
"va_start". Ito ay default. Upang pigilan ang mga mensahe ng babala, gamitin -Wno-varargs.

-Wvector-operasyon-pagganap
Babala kung ang operasyon ng vector ay hindi ipinatupad sa pamamagitan ng mga kakayahan ng SIMD ng arkitektura.
Pangunahing kapaki-pakinabang para sa pag-tune ng pagganap. Maaaring ipatupad ang operasyon ng vector
"piecewise", na nangangahulugan na ang scalar operation ay ginagawa sa bawat vector
elemento; "kahanay", na nangangahulugan na ang pagpapatakbo ng vector ay ipinatupad gamit
mas malawak na uri ng mga scalar, na karaniwang mas mahusay sa pagganap; at "bilang isang solong
scalar", na nangangahulugan na ang vector ay umaangkop sa isang uri ng scalar.

-Wno-virtual-move-assign
Pigilan ang mga babala tungkol sa pagmamana mula sa isang virtual na base na may isang di-trivial na paglipat ng C++11
operator ng assignment. Ito ay mapanganib dahil kung ang virtual na base ay maaabot kasama
higit sa isang landas, ito ay inilipat nang maraming beses, na maaaring mangahulugan na ang parehong mga bagay ay mapupunta
ang inilipat-mula sa estado. Kung isinulat ang operator ng pagtatalaga ng paglipat upang maiwasan ang paglipat mula sa
isang inilipat-mula sa bagay, ang babalang ito ay maaaring hindi paganahin.

-Wvla
Magbabala kung ginagamit ang variable length array sa code. -Wno-vla pinipigilan ang -Wpedantic
babala ng variable na haba ng array.

-Wvolatile-register-var
Magbabala kung ang isang variable ng rehistro ay idineklara na pabagu-bago. Ang pabagu-bago ng isip ay hindi
pagbawalan ang lahat ng mga pag-optimize na maaaring mag-alis ng mga pagbabasa at/o pagsusulat para magparehistro
mga variable. Ang babalang ito ay pinagana ng -Pader.

-Wdisabled-optimization
Magbabala kung ang hiniling na optimization pass ay hindi pinagana. Ang babalang ito ay hindi karaniwan
ipahiwatig na mayroong anumang mali sa iyong code; ito ay nagpapahiwatig lamang na ang GCC's
hindi epektibong pangasiwaan ng mga optimizer ang code. Kadalasan, ang problema ay iyong
masyadong malaki o masyadong kumplikado ang code; Tumanggi ang GCC na i-optimize ang mga programa kapag nag-optimize
ang sarili nito ay malamang na tumagal ng labis na dami ng oras.

-Wpointer-sign (C at Objective-C lang)
Magbabala para sa pagpasa ng argumento ng pointer o pagtatalaga na may ibang pagpirma. Ito
ang opsyon ay sinusuportahan lamang para sa C at Objective-C. Ito ay ipinahihiwatig ng -Pader at sa pamamagitan ng
-Wpedantic, na maaaring hindi paganahin sa -Wno-pointer-sign.

-Wstack-tagapagtanggol
Ang opsyon na ito ay aktibo lamang kapag -fstack-tagapagtanggol ay aktibo. Nagbabala ito tungkol sa mga pag-andar
na hindi protektado laban sa stack smashing.

-Woverlength-strings
Magbabala tungkol sa mga string constant na mas mahaba kaysa sa "minimum maximum" na haba
tinukoy sa pamantayang C. Sa pangkalahatan, pinapayagan ng mga modernong compiler ang mga string constants na
ay mas mahaba kaysa sa pinakamababang limitasyon ng pamantayan, ngunit ang mga napakadaladalang programa ay dapat
iwasang gumamit ng mas mahabang string.

Nalalapat ang limitasyon pagkatapos string constant concatenation, at hindi binibilang ang trailing
NUL. Sa C90, ang limitasyon ay 509 character; sa C99, ito ay itinaas sa 4095. C++98 ay
hindi tumukoy ng normative minimum maximum, kaya hindi kami nag-diagnose ng mga overlength na string
C++.

Ang pagpipiliang ito ay ipinahiwatig ng -Wpedantic, at maaaring hindi paganahin sa
-Wno-overlength-strings.

-Wunsuffixed-float-constants (C at Objective-C lang)
Mag-isyu ng babala para sa anumang floating constant na walang suffix. Kapag ginamit
Kasama -Wsystem-header nagbabala ito tungkol sa mga ganoong pare-pareho sa mga file ng header ng system.
Maaari itong maging kapaki-pakinabang kapag naghahanda ng code na gagamitin sa "FLOAT_CONST_DECIMAL64" pragma
mula sa decimal na floating-point extension hanggang C99.

-Wno-designated-init (C at Objective-C lang)
Pigilan ang mga babala kapag ginamit ang isang positional initializer upang simulan ang isang istraktura na
ay minarkahan ng attribute na "designated_init".

Options para Pag-debug Iyong Programa or GCC
Ang GCC ay may iba't ibang espesyal na opsyon na ginagamit para sa pag-debug alinman sa iyong program o GCC:

-g Gumawa ng impormasyon sa pag-debug sa katutubong format ng operating system (mga saksak, COFF,
XCOFF, o DWARF 2). Maaaring gumana ang GDB sa impormasyon sa pag-debug na ito.

Sa karamihan ng mga system na gumagamit ng stabs format, -g nagbibigay-daan sa paggamit ng karagdagang impormasyon sa pag-debug
na ang GDB lamang ang maaaring gumamit; ang karagdagang impormasyon na ito ay ginagawang mas mahusay ang pag-debug sa GDB ngunit
malamang na nag-crash ang iba pang mga debugger o tumatangging basahin ang program. Kung gusto mo
kontrolin para tiyak kung bubuo ng karagdagang impormasyon, gamitin -gstabs+, -gstabs,
-gxcoff+, -gxcoff, O -gvms (tingnan sa ibaba).

Pinapayagan ka ng GCC na gamitin -g sa -O. Ang mga shortcut na kinuha ng na-optimize na code ay maaaring
paminsan-minsan ay gumagawa ng mga nakakagulat na resulta: ang ilang mga variable na iyong idineklara ay maaaring wala sa
lahat; ang daloy ng kontrol ay maaaring madaling lumipat kung saan hindi mo ito inaasahan; ilang mga pahayag ay maaaring
hindi maipapatupad dahil kinukuwenta nila ang mga pare-parehong resulta o ang kanilang mga halaga ay nasa
kamay; ang ilang mga pahayag ay maaaring isagawa sa iba't ibang lugar dahil sila ay inilipat
ng mga loop.

Gayunpaman, ito ay nagpapatunay na posible na i-debug ang na-optimize na output. Ginagawa nitong makatwiran
para gamitin ang optimizer para sa mga program na maaaring may mga bug.

Ang mga sumusunod na opsyon ay kapaki-pakinabang kapag nabuo ang GCC na may kakayahan para sa higit pa
kaysa sa isang format ng pag-debug.

-gsplit-dwarf
Paghiwalayin ang mas maraming dwarf debugging na impormasyon hangga't maaari sa isang hiwalay na output file
na may extension na .dwo. Binibigyang-daan ng opsyong ito ang build system na maiwasan ang pag-link ng mga file
na may impormasyon sa pag-debug. Upang maging kapaki-pakinabang, ang pagpipiliang ito ay nangangailangan ng isang debugger na may kakayahan
nagbabasa ng mga .dwo file.

-ggdb
Gumawa ng impormasyon sa pag-debug para magamit ng GDB. Nangangahulugan ito na gamitin ang pinaka nagpapahayag
available ang format (DWARF 2, stabs, o ang native na format kung wala sa mga iyon
suportado), kasama ang mga extension ng GDB kung posible.

-gpubname
Bumuo ng dwarf .debug_pubnames at .debug_pubtypes na mga seksyon.

-ggnu-pubname
Bumuo ng mga seksyong .debug_pubnames at .debug_pubtypes sa isang format na angkop para sa
conversion sa isang GDB index. Ang pagpipiliang ito ay kapaki-pakinabang lamang sa isang linker na maaari
gumawa ng GDB index na bersyon 7.

-gstabs
Gumawa ng impormasyon sa pag-debug sa stabs format (kung sinusuportahan iyon), nang walang GDB
mga extension. Ito ang format na ginagamit ng DBX sa karamihan ng mga BSD system. Sa MIPS, Alpha at
System V Release 4 system ang pagpipiliang ito ay gumagawa ng stabs debugging output na hindi
naiintindihan ng DBX o SDB. Sa System V Release 4 system ang opsyong ito ay nangangailangan ng GNU
nagtitipon

-felimate-unused-debug-symbols
Gumawa ng impormasyon sa pag-debug sa stabs format (kung sinusuportahan iyon), para lamang sa mga simbolo
na ginagamit talaga.

-femit-class-debug-laging
Sa halip na maglabas ng impormasyon sa pag-debug para sa isang klase ng C++ sa isang object file lamang,
ilabas ito sa lahat ng object file gamit ang klase. Ang pagpipiliang ito ay dapat gamitin lamang sa
mga debugger na hindi kayang pangasiwaan ang paraan ng karaniwang paglalabas ng GCC ng impormasyon sa pag-debug
para sa mga klase dahil ang paggamit ng opsyong ito ay nagpapataas ng laki ng impormasyon sa pag-debug ng
kasing dami ng salik ng dalawa.

-fdebug-types-section
Kapag gumagamit ng DWARF Bersyon 4 o mas mataas, ang mga uri ng DIES ay maaaring ilagay sa kanilang sarili
".debug_types" na seksyon sa halip na gawin silang bahagi ng ".debug_info" na seksyon. Ito
ay mas mahusay na ilagay ang mga ito sa isang hiwalay na mga seksyon ng comdat dahil ang linker ay maaaring pagkatapos
alisin ang mga duplicate. Ngunit hindi lahat ng DWARF consumer ay sumusuporta sa mga seksyong ".debug_types."
at sa ilang mga bagay ".debug_types" ay gumagawa ng mas malaki sa halip na mas maliit na pag-debug
impormasyon.

-gstabs+
Gumawa ng impormasyon sa pag-debug sa stabs format (kung sinusuportahan iyon), gamit ang GNU
mga extension na naiintindihan lamang ng GNU debugger (GDB). Ang paggamit ng mga extension na ito ay
malamang na mag-crash ang iba pang mga debugger o tumanggi na basahin ang programa.

-gcoff
Gumawa ng impormasyon sa pag-debug sa COFF na format (kung sinusuportahan iyon). Ito ang
format na ginagamit ng SDB sa karamihan ng System V system bago ang System V Release 4.

-gxcoff
Gumawa ng impormasyon sa pag-debug sa format na XCOFF (kung sinusuportahan iyon). Ito ang
format na ginagamit ng DBX debugger sa IBM RS/6000 system.

-gxcoff+
Gumawa ng impormasyon sa pag-debug sa format na XCOFF (kung sinusuportahan iyon), gamit ang GNU
mga extension na naiintindihan lamang ng GNU debugger (GDB). Ang paggamit ng mga extension na ito ay
malamang na mag-crash ang iba pang mga debugger o tumanggi na basahin ang program, at maaaring magdulot
mabibigo ang mga assembler maliban sa GNU assembler (GAS) na may error.

-gdwarf-bersyon
Gumawa ng impormasyon sa pag-debug sa format na DWARF (kung sinusuportahan iyon). Ang halaga ng
bersyon maaaring alinman sa 2, 3, 4 o 5; ang default na bersyon para sa karamihan ng mga target ay 4. DWARF
Ang bersyon 5 ay pang-eksperimento lamang.

Tandaan na sa DWARF Bersyon 2, ang ilang mga port ay nangangailangan at palaging gumagamit ng ilang hindi sumasalungat
DWARF 3 extension sa mga unwind table.

Maaaring mangailangan ang Bersyon 4 ng GDB 7.0 at -fvar-tracking-assignments para sa pinakamataas na benepisyo.

-grecord-gcc-switch
Ang switch na ito ay nagiging sanhi ng mga opsyon sa command-line na ginagamit upang i-invoke ang compiler na maaaring
makakaapekto sa pagbuo ng code na idaragdag sa DW_AT_producer attribute sa DWARF
impormasyon sa pag-debug. Ang mga opsyon ay pinagsama sa mga puwang na naghihiwalay sa kanila mula sa
isa't isa at mula sa bersyon ng compiler. Tingnan din -frecord-gcc-switch Para sa iba
paraan ng pag-iimbak ng mga opsyon sa compiler sa object file. Ito ang default.

-gno-record-gcc-switch
Huwag payagan ang pagdaragdag ng mga opsyon sa command-line sa attribute na DW_AT_producer sa DWARF
impormasyon sa pag-debug.

-gstrict-dwarf
Huwag payagan ang paggamit ng mga extension ng mas huling DWARF na karaniwang bersyon kaysa sa napili
-gdwarf-bersyon. Sa karamihan ng mga target na gumagamit ng hindi sumasalungat na mga extension ng DWARF mula sa ibang pagkakataon
pinapayagan ang mga karaniwang bersyon.

-gno-strict-dwarf
Payagan ang paggamit ng mga extension ng mas huling DWARF na karaniwang bersyon kaysa sa pinili gamit
-gdwarf-bersyon.

-gz[=uri]
Gumawa ng mga naka-compress na seksyon ng debug sa format na DWARF, kung sinusuportahan iyon. Kung uri is
hindi ibinigay, ang default na uri ay nakasalalay sa mga kakayahan ng assembler at linker
ginagamit. uri maaaring isa sa wala (huwag i-compress ang mga seksyon ng debug), zlib (gamitin ang zlib
compression sa ELF gABI format), o zlib-gnu (gumamit ng zlib compression sa tradisyonal na GNU
format). Kung hindi sinusuportahan ng linker ang pagsusulat ng mga naka-compress na seksyon ng debug, ang opsyon
ay tinatanggihan. Kung hindi, kung hindi sinusuportahan ng assembler ang mga ito, -gz ay tahimik
hindi pinansin kapag gumagawa ng mga object file.

-gvms
Gumawa ng impormasyon sa pag-debug sa Alpha/VMS debug na format (kung sinusuportahan iyon). Ito
ay ang format na ginagamit ng DEBUG sa mga Alpha/VMS system.

-gantas
-ggdbantas
-gstabsantas
-gcoffantas
-gxcoffantas
-gvmsantas
Humiling ng impormasyon sa pag-debug at gamitin din antas upang tukuyin kung gaano karaming impormasyon. Ang
ang default na antas ay 2.

Ang Antas 0 ay walang anumang impormasyon sa pag-debug. kaya, -g0 negates -g.

Ang Antas 1 ay gumagawa ng kaunting impormasyon, sapat para sa paggawa ng mga backtraces sa mga bahagi ng
program na hindi mo planong i-debug. Kabilang dito ang mga paglalarawan ng mga function at
mga panlabas na variable, at mga talahanayan ng numero ng linya, ngunit walang impormasyon tungkol sa mga lokal na variable.

Kasama sa Antas 3 ang karagdagang impormasyon, gaya ng lahat ng mga macro definition na nasa
programa. Sinusuportahan ng ilang debugger ang macro expansion kapag ginamit mo -g3.

-gdwarf-2 ay hindi tumatanggap ng pinagsama-samang antas ng pag-debug, dahil sinusuportahan ng GCC ang isang
opsyon -gdwarf na nilalayong bumuo ng impormasyon sa pag-debug sa bersyon 1 ng DWARF
format (na ibang-iba sa bersyon 2), at ito ay masyadong nakakalito.
Ang debug na format ay matagal nang hindi ginagamit, ngunit ang opsyon ay hindi na mababago ngayon. Sa halip gamitin
karagdagan -gantas opsyon upang baguhin ang antas ng debug para sa DWARF.

-gtoggle
I-off ang pagbuo ng impormasyon sa pag-debug, kung ang pag-iwan sa opsyong ito ay bubuo nito, o i-on ito
sa antas 2 kung hindi man. Ang posisyon ng argumentong ito sa command line ay hindi
bagay; magkakabisa ito pagkatapos maproseso ang lahat ng iba pang mga opsyon, at ito lang ang nagagawa
minsan, kahit ilang beses ibigay. Ito ay pangunahing inilaan upang magamit sa
-fcompare-debug.

-fsanitize=address
Paganahin ang AddressSanitizer, isang mabilis na memory error detector. Ang mga tagubilin sa pag-access sa memorya ay
ginamit upang makita ang mga out-of-bounds at use-after-free na mga bug. Tingnan mo
<https://github.com/google/sanitizers/wiki/AddressSanitizer> para sa karagdagang detalye. Ang
Maaaring maimpluwensyahan ang pag-uugali ng run-time gamit ang ASAN_OPTIONS variable ng kapaligiran. Kailan
nakatakda sa "help=1", ang mga available na opsyon ay ipinapakita sa startup ng instrumented
programa. Tingnan mo
<https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags> para sa isang
listahan ng mga suportadong opsyon.

-fsanitize=kernel-address
Paganahin ang AddressSanitizer para sa Linux kernel. Tingnan mohttps://github.com/google/kasan/wiki>
para sa karagdagang detalye.

-fsanitize=thread
Paganahin ang ThreadSanitizer, isang mabilis na data race detector. Ang mga tagubilin sa pag-access sa memorya ay
ginamit upang makita ang mga bug sa lahi ng data. Tingnan mo
<https://github.com/google/sanitizers/wiki#threadsanitizer> para sa karagdagang detalye. Ang pagtakbo-
Maaaring maimpluwensyahan ang pag-uugali ng oras gamit ang TSAN_OPTIONS variable ng kapaligiran; tingnan mo
<https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags> para sa isang listahan ng
mga suportadong opsyon.

-fsanitize=leak
Paganahin ang LeakSanitizer, isang memory leak detector. Ang pagpipiliang ito ay mahalaga lamang para sa pag-link ng
mga executable at kung wala -fsanitize=address ni -fsanitize=thread Ginagamit. Sa ganyan
kaso ang executable ay naka-link laban sa isang library na nag-o-override sa "malloc" at iba pa
mga function ng allocator. Tingnan mo
<https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer> para sa higit pa
mga detalye. Maaaring maimpluwensyahan ang pag-uugali ng run-time gamit ang LSAN_OPTIONS kapaligiran
variable

-fsanitize=undefined
I-enable ang UndefinedBehaviorSanitizer, isang mabilis na undefined behavior detector. Iba-iba
Ang mga pagkalkula ay ginagamit upang makita ang hindi natukoy na pag-uugali sa runtime. Kasalukuyan
ang mga subopsyon ay:

-fsanitize=shift
Ang opsyon na ito ay nagbibigay-daan sa pagsuri na ang resulta ng isang shift operation ay hindi
hindi natukoy. Tandaan na kung ano ang eksaktong itinuturing na hindi natukoy ay bahagyang naiiba
sa pagitan ng C at C++, gayundin sa pagitan ng ISO C90 at C99, atbp.

-fsanitize=integer-divide-by-zero
I-detect ang integer division sa pamamagitan ng zero pati na rin ang "INT_MIN / -1" division.

-fsanitize=hindi maabot
Gamit ang opsyong ito, gagawin ng compiler ang "__builtin_unreachable" na tawag sa isang
diagnostics message call sa halip. Kapag naabot ang "__builtin_unreachable" na tawag,
ang pag-uugali ay hindi natukoy.

-fsanitize=vla-bound
Ang pagpipiliang ito ay nagtuturo sa compiler na suriin kung ang laki ng isang variable na haba
positibo ang array.

-fsanitize=null
Ang pagpipiliang ito ay nagbibigay-daan sa pagsuri ng pointer. Lalo na, ang application na binuo gamit ang
ang opsyong ito na naka-on ay maglalabas ng mensahe ng error kapag sinubukan nitong i-dereference a
NULL pointer, o kung ang isang reference (maaaring isang rvalue reference) ay nakatali sa isang NULL
pointer, o kung ang isang pamamaraan ay ginagamit sa isang bagay na itinuro ng isang NULL pointer.

-fsanitize=return
Ang opsyong ito ay nagbibigay-daan sa pagsuri ng return statement. Mga program na binuo gamit ang opsyong ito
ang naka-on ay maglalabas ng mensahe ng error kapag ang pagtatapos ng isang hindi walang bisa na function ay
naabot nang hindi aktwal na nagbabalik ng halaga. Gumagana ang pagpipiliang ito sa C++ lamang.

-fsanitize=signed-integer-overflow
Ang opsyong ito ay nagbibigay-daan sa signed integer overflow checking. Sinusuri namin na ang resulta ng
Ang "+", "*", at parehong unary at binary na "-" ay hindi umaapaw sa nilagdaan
aritmetika. Tandaan, dapat isaalang-alang ang mga panuntunan sa pag-promote ng integer. Yan ay,
ang sumusunod ay hindi isang overflow:

nilagdaang char a = SCHAR_MAX;
a++;

-fsanitize=bounds
Ang pagpipiliang ito ay nagbibigay-daan sa paggamit ng mga hangganan ng array. Iba't ibang out of bounds
na-detect ang mga access. Mga flexible na miyembro ng array, flexible na array member-like array,
at ang mga initializer ng mga variable na may static na storage ay hindi ginagamit.

-fsanitize=alignment
Ang pagpipiliang ito ay nagbibigay-daan sa pagsuri ng pagkakahanay ng mga pointer kapag ang mga ito ay dereference,
o kapag ang isang sanggunian ay nakasalalay sa hindi sapat na nakahanay na target, o kapag ang isang paraan o
constructor ay tinatawag sa hindi sapat na nakahanay na bagay.

-fsanitize=laki ng bagay
Ang pagpipiliang ito ay nagbibigay-daan sa paggamit ng mga sanggunian ng memorya gamit ang
"__builtin_object_size" function. Iba't ibang out of bounds pointer access ay
nakita.

-fsanitize=float-divide-by-zero
I-detect ang floating-point division sa pamamagitan ng zero. Hindi tulad ng iba pang katulad na mga opsyon,
-fsanitize=float-divide-by-zero ay hindi pinagana ng -fsanitize=undefined, dahil
Ang floating-point division sa pamamagitan ng zero ay maaaring maging isang lehitimong paraan ng pagkuha ng mga infinity
at NaNs.

-fsanitize=float-cast-overflow
Ang opsyong ito ay nagbibigay-daan sa floating-point type sa integer na pagsuri sa conversion. Sinusuri namin
na hindi umaapaw ang resulta ng conversion. Hindi tulad ng iba pang katulad
pagpipilian -fsanitize=float-cast-overflow ay hindi pinagana ng -fsanitize=undefined.
Ang pagpipiliang ito ay hindi gumagana nang maayos sa "FE_INVALID" na mga pagbubukod na pinagana.

-fsanitize=nonnull-attribute
Ang pagpipiliang ito ay nagbibigay-daan sa paggamit ng mga tawag, pagsuri kung ang mga null na halaga ay hindi
ipinasa sa mga argumentong minarkahan bilang nangangailangan ng hindi null na halaga ng function na "nonnull".
katangian.

-fsanitize=returns-nonnull-attribute
Ang pagpipiliang ito ay nagbibigay-daan sa paggamit ng mga pahayag ng pagbabalik sa mga function na may marka
"returns_nonnull" function attribute, upang makita ang pagbabalik ng mga null na halaga mula sa ganoon
function.

-fsanitize=bool
Ang pagpipiliang ito ay nagbibigay-daan sa paggamit ng mga pag-load mula sa bool. Kung ang isang halaga maliban sa 0/1
ay na-load, ang isang run-time na error ay inisyu.

-fsanitize=enum
Ang pagpipiliang ito ay nagbibigay-daan sa paggamit ng mga pag-load mula sa isang uri ng enum. Kung ang isang halaga
sa labas ng hanay ng mga halaga para sa uri ng enum ay na-load, ang isang run-time na error ay
inisyu

-fsanitize=vptr
Ang pagpipiliang ito ay nagbibigay-daan sa paggamit ng mga tawag sa function ng miyembro ng C++, mga access ng miyembro
at ilang mga conversion sa pagitan ng mga pointer sa base at nagmula na mga klase, upang i-verify ang
may tamang dynamic na uri ang reference na bagay.

Habang -ftrapv nagiging sanhi ng paglabas ng mga bitag para sa mga nilagdaang overflow, -fsanitize=undefined
nagbibigay ng diagnostic message. Ito ay kasalukuyang gumagana lamang para sa C pamilya ng mga wika.

-fno-sanitize=lahat
Hindi pinapagana ng opsyong ito ang lahat ng dating pinaganang sanitizer. -fsanitize=lahat Hindi
pinapayagan, dahil ang ilang mga sanitizer ay hindi maaaring gamitin nang magkasama.

-fasan-shadow-offset=numero
Pinipilit ng opsyong ito ang GCC na gumamit ng custom na shadow offset sa mga pagsusuri sa AddressSanitizer. Ito ay
kapaki-pakinabang para sa pag-eksperimento sa iba't ibang mga layout ng memorya ng anino sa Kernel
AddressSanitizer.

-fsanitize-recover[=opts]
-fsanitize-recover= kinokontrol ang error recovery mode para sa mga sanitizer na binanggit sa kuwit
hiwalay na listahan ng opts. Ang pagpapagana sa opsyong ito para sa isang bahagi ng sanitizer ay nagiging sanhi nito
subukang ipagpatuloy ang pagpapatakbo ng program na parang walang error na nangyari. Ibig sabihin maramihan
Ang mga error sa runtime ay maaaring iulat sa isang pagtakbo ng programa, at ang exit code ng
Ang programa ay maaaring magpahiwatig ng tagumpay kahit na may mga error na naiulat. Ang
-fno-sanitize-recover= maaaring gamitin ang opsyon para baguhin ang gawi na ito: ang una lang
ang nakitang error ay iniulat at ang programa ay lalabas na may non-zero exit code.

Sa kasalukuyan, gumagana lang ang feature na ito -fsanitize=undefined (at ang mga suboption nito maliban sa
para -fsanitize=hindi maabot at -fsanitize=return), -fsanitize=float-cast-overflow,
-fsanitize=float-divide-by-zero at -fsanitize=kernel-address. Para sa mga sanitizer na ito
Ang pagbawi ng error ay naka-on bilang default. -fsanitize-recover=lahat at
-fno-sanitize-recover=lahat ay tinatanggap din, ang dating ay nagbibigay-daan sa pagbawi para sa lahat
mga sanitizer na sumusuporta dito, ang huli ay hindi pinapagana ang pagbawi para sa lahat ng mga sanitizer na iyon
suportahan ito.

Syntax nang walang tahasang opts hindi na ginagamit ang parameter. Ito ay katumbas ng

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

Katulad nito -fno-sanitize-recover ay katumbas ng

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

-fsanitize-undefined-trap-on-error
Ang -fsanitize-undefined-trap-on-error ang opsyon ay nagtuturo sa compiler na mag-ulat
hindi natukoy na gawi gamit ang "__builtin_trap" sa halip na isang "libubsan" na gawain sa library.
Ang bentahe nito ay ang "libubsan" na aklatan ay hindi kailangan at hindi naka-link
sa, kaya magagamit ito kahit na sa mga freestanding na kapaligiran.

-fcheck-pointer-bounds
Paganahin ang instrumentasyon ng Pointer Bounds Checker. Ang bawat memory reference ay ginagamitan
na may mga tseke ng pointer na ginagamit para sa pag-access ng memorya laban sa mga hangganan na nauugnay doon
pointer

Sa kasalukuyan ay mayroon lamang isang pagpapatupad para sa Intel MPX na magagamit, kaya x86 target at
-mmpx ay kinakailangan upang paganahin ang tampok na ito. Ang instrumentasyong nakabatay sa MPX ay nangangailangan ng isang
runtime library upang paganahin ang MPX sa hardware at pangasiwaan ang mga signal ng paglabag sa hangganan. Sa pamamagitan ng
default kung kailan -fcheck-pointer-bounds at -mmpx ang mga opsyon ay ginagamit upang i-link ang isang programa, ang
Nagli-link ang driver ng GCC laban sa libmpx runtime library at libmpxwrappers aklatan. Ito
ipinapasa din ang '-z bndplt' sa isang linker kung sakaling sinusuportahan nito ang opsyong ito (na may check
sa pagsasaayos ng libmpx). Tandaan na maaaring balewalain ng mga lumang bersyon ng linker ang opsyon. ginto
hindi sinusuportahan ng linker ang opsyon na '-z bndplt'. Nang walang suportang '-z bndplt' sa linker lahat
ang mga tawag sa mga dynamic na aklatan ay nawawalan ng mga lumipas na hangganan na nagpapababa ng kabuuang antas ng proteksyon. ito ay
lubos na inirerekomenda na gumamit ng linker na may suportang '-z bndplt'. Kung sakaling hindi ganoon ang linker
magagamit ito ay pinapayuhan na laging gamitin -static-libmpxwrappers para sa mas mahusay na proteksyon
antas o paggamit -static upang ganap na maiwasan ang mga panlabas na tawag sa mga dynamic na aklatan. MPX-
base instrumentation ay maaaring gamitin para sa pag-debug at maaari ding isama sa produksyon
code upang mapataas ang seguridad ng programa. Depende sa paggamit, maaaring mayroon kang iba
mga kinakailangan para sa runtime library. Ang kasalukuyang bersyon ng MPX runtime library
ay mas nakatuon para sa paggamit bilang isang tool sa pag-debug. Ipinahihiwatig ng paggamit ng MPX runtime library
-lpthread. Tingnan din -static-libmpx. Maaaring maimpluwensyahan ang pag-uugali ng runtime library
gumagamit ng iba`t ibang CHKP_RT_* mga variable ng kapaligiran. Tingnan mo
<https://gcc.gnu.org/wiki/Intel%20MPX%20support%20in%20the%20GCC%20compiler> para sa higit pa
mga detalye.

Ang nabuong instrumentasyon ay maaaring kontrolin ng iba't-ibang -fchkp-* mga pagpipilian at sa pamamagitan ng
"bnd_variable_size" structure field attribute at "bnd_legacy", at "bnd_instrument"
mga katangian ng function. Nagbibigay din ang GCC ng ilang built-in na function para sa pagkontrol
ang Pointer Bounds Checker.

-fchkp-check-incomplete-type
Bumuo ng mga tseke sa hangganan ng pointer para sa mga variable na may hindi kumpletong uri. Pinagana ng
default.

-fchkp-makitid-hangganan
Kinokontrol ang mga hangganan na ginagamit ng Pointer Bounds Checker para sa mga pointer sa object field. Kung
pinapagana ang pagpapaliit pagkatapos ay ginagamit ang mga hangganan ng field. Kung hindi, ginagamit ang mga hangganan ng object.
Tingnan din -fchkp-makitid-hanggang-pinaka-innermost-array at -fchkp-first-field-may-sariling mga hangganan.
Pinagana bilang default.

-fchkp-first-field-may-sariling mga hangganan
Forces Pointer Bounds Checker upang gumamit ng mga makitid na hangganan para sa address ng una
larangan sa istraktura. Bilang default, ang isang pointer sa unang field ay may parehong mga hangganan
bilang isang pointer sa buong istraktura.

-fchkp-makitid-hanggang-pinaka-innermost-array
Forces Pointer Bounds Checker upang gumamit ng mga hangganan ng mga pinakaloob na array kung sakaling may nested
static na pag-access sa array. Bilang default, ang pagpipiliang ito ay hindi pinagana at mga hangganan ng pinakalabas
array ay ginagamit.

-fchkp-optimize
Pinapagana ang mga pag-optimize ng Pointer Bounds Checker. Pinagana bilang default sa pag-optimize
antas -O, -O2, -O3.

-fchkp-use-fast-string-functions
Pinapagana ang paggamit ng *_nobnd na bersyon ng mga string function (hindi pagkopya ng mga hangganan) ng Pointer
Bounds Checker. Hindi pinagana bilang default.

-fchkp-use-nochk-string-functions
Pinapagana ang paggamit ng *_nochk na bersyon ng mga string function (hindi sinusuri ang mga hangganan) ng Pointer
Bounds Checker. Hindi pinagana bilang default.

-fchkp-use-static-bounds
Payagan ang Pointer Bounds Checker na bumuo ng mga static na hangganan na may hawak na mga hangganan ng static
mga variable. Pinagana bilang default.

-fchkp-use-static-const-bounds
Gumamit ng mga statically-initialized na mga hangganan para sa mga permanenteng hangganan sa halip na bumuo ng mga ito sa bawat isa
oras na kailangan nila. Bilang default, pinagana kapag -fchkp-use-static-bounds Ay pinagana.

-fchkp-treat-zero-dynamic-size-as-infinite
Sa opsyong ito, ang mga bagay na may hindi kumpletong uri na ang dynamic na nakuhang laki ay zero
ay itinuturing na may walang katapusang laki sa halip ng Pointer Bounds Checker. Ang pagpipiliang ito
maaaring makatulong kung ang isang programa ay naka-link sa isang library na walang impormasyon sa laki para sa ilan
mga simbolo. Hindi pinagana bilang default.

-fchkp-check-read
Nagtuturo sa Pointer Bounds Checker na bumuo ng mga tseke para sa lahat ng read access sa memory.
Pinagana bilang default.

-fchkp-check-write
Nagtuturo sa Pointer Bounds Checker na bumuo ng mga tseke para sa lahat ng mga access sa pagsusulat sa memorya.
Pinagana bilang default.

-fchkp-store-bounds
Nagtuturo sa Pointer Bounds Checker na bumuo ng mga bounds store para sa pagsusulat ng pointer.
Pinagana bilang default.

-fchkp-instrument-calls
Nagtuturo sa Pointer Bounds Checker na ipasa ang pointer bounds sa mga tawag. Pinagana bilang default.

-fchkp-instrumentong-marked-lamang
Nagtuturo sa Pointer Bounds Checker sa mga function na instrumento lamang na may marka ng
"bnd_instrument" attribute. Hindi pinagana bilang default.

-fchkp-use-wrappers
Nagbibigay-daan sa Pointer Bounds Checker na palitan ang mga tawag sa mga built-in na function ng mga tawag sa
mga function ng wrapper. Kailan -fchkp-use-wrappers ay ginagamit upang i-link ang isang programa, ang GCC driver
awtomatikong nagli-link laban sa libmpxwrappers. Tingnan din -static-libmpxwrappers. Pinagana
bilang default.

-fdump-final-insns[=file]
Itapon ang panghuling panloob na representasyon (RTL) sa file. Kung ang opsyonal na argumento ay
tinanggal (o kung file ay "."), ang pangalan ng dump file ay tinutukoy sa pamamagitan ng pagdaragdag
".gkd" sa pangalan ng compilation output file.

-fcompare-debug[=opts]
Kung walang error na nangyari sa panahon ng compilation, patakbuhin ang compiler sa pangalawang pagkakataon, pagdaragdag opts at
-fcompare-debug-second sa mga argumentong ipinasa sa pangalawang compilation. Itapon ang
panghuling panloob na representasyon sa parehong compilations, at mag-print ng error kung magkaiba ang mga ito.

Kung ang equal sign ay tinanggal, ang default -gtoggle Ginagamit.

Ang variable ng kapaligiran GCC_COMPARE_DEBUG, kung tinukoy, walang laman at hindi zero,
implicitly enables -fcompare-debug. Kung GCC_COMPARE_DEBUG ay tinukoy sa isang string
nagsisimula sa isang gitling, pagkatapos ito ay ginagamit para sa opts, kung hindi man ang default -gtoggle is
ginagamit.

-fcompare-debug=, na may katumbas na tanda ngunit wala opts, ay katumbas ng
-fno-compare-debug, na hindi pinapagana ang paglalaglag ng panghuling representasyon at ang
pangalawang compilation, pinipigilan kahit GCC_COMPARE_DEBUG mula sa pagkakaroon ng bisa.

Upang i-verify ang buong saklaw habang -fcompare-debug pagsubok, itakda GCC_COMPARE_DEBUG sabihin
-fcompare-debug-not-overridden, na tinatanggihan ng GCC bilang isang di-wastong opsyon sa anumang aktwal
compilation (sa halip na preprocessing, assembly o linking). Upang makakuha lamang ng babala,
pagtatakda ng GCC_COMPARE_DEBUG sa -w%n-fcompare-debug hindi override gagawin.

-fcompare-debug-second
Ang opsyong ito ay tahasang ipinapasa sa compiler para sa pangalawang compilation na hiniling
by -fcompare-debug, kasama ang mga opsyon upang patahimikin ang mga babala, at pag-alis ng iba pang mga opsyon
na magdudulot ng side-effect na mga output ng compiler sa mga file o sa karaniwang output.
Ang mga dump file at napanatili na pansamantalang mga file ay pinalitan ng pangalan upang maglaman ng ".gk"
karagdagang extension sa panahon ng pangalawang compilation, upang maiwasan ang pag-overwrite sa mga iyon
nabuo ng una.

Kapag naipasa ang opsyong ito sa driver ng compiler, nagiging sanhi ito ng una compilation sa
malaktawan, na ginagawang kapaki-pakinabang para sa kaunti maliban sa pag-debug sa tamang compiler.

-feliminate-dwarf2-dups
I-compress ang impormasyon sa pag-debug ng DWARF 2 sa pamamagitan ng pag-aalis ng mga duplicate na impormasyon tungkol sa
bawat simbolo. Makatuwiran lang ang opsyong ito kapag bumubuo ng DWARF 2 na pagde-debug
impormasyon sa -gdwarf-2.

-femit-struct-debug-baseonly
Maglabas ng impormasyon sa pag-debug para sa mga uri na tulad ng struct lamang kapag ang batayang pangalan ng
Ang compilation source file ay tumutugma sa batayang pangalan ng file kung saan tinukoy ang struct.

Ang pagpipiliang ito ay makabuluhang binabawasan ang laki ng impormasyon sa pag-debug, ngunit sa
malaking potensyal na pagkawala sa uri ng impormasyon sa debugger. Tingnan mo
-femit-struct-debug-reduced para sa hindi gaanong agresibong opsyon. Tingnan mo
-femit-struct-debug-detalyadong para sa mas detalyadong kontrol.

Gumagana lang ang opsyong ito sa DWARF 2.

-femit-struct-debug-reduced
Maglabas ng impormasyon sa pag-debug para sa mga uri na tulad ng struct lamang kapag ang batayang pangalan ng
tumutugma ang compilation source file sa batayang pangalan ng file kung saan tinukoy ang uri,
maliban kung ang struct ay isang template o tinukoy sa isang header ng system.

Ang pagpipiliang ito ay makabuluhang binabawasan ang laki ng impormasyon sa pag-debug, kasama ang ilan
potensyal na pagkawala sa uri ng impormasyon sa debugger. Tingnan mo -femit-struct-debug-baseonly
para sa isang mas agresibong opsyon. Tingnan mo -femit-struct-debug-detalyadong para sa mas detalyado
control.

Gumagana lang ang opsyong ito sa DWARF 2.

-femit-struct-debug-detalyadong[=spec-list]
Tukuyin ang mga uri na tulad ng struct kung saan bumubuo ang compiler ng impormasyon sa pag-debug. Ang
layunin ay upang bawasan ang duplicate na struct debug na impormasyon sa pagitan ng iba't ibang object file
sa loob ng parehong programa.

Ang opsyong ito ay isang detalyadong bersyon ng -femit-struct-debug-reduced at
-femit-struct-debug-baseonly, na nagsisilbi para sa karamihan ng mga pangangailangan.

Ang isang detalye ay may syntax[ay:|ind:][ord:|gen:](anumang|sys|base|wala)

Nililimitahan ng opsyonal na unang salita ang detalye sa mga istruktura na direktang ginagamit
(ay:) o hindi direktang ginamit (ind:). Direktang ginagamit ang isang uri ng struct kapag ito ang uri
ng isang variable, miyembro. Ang mga hindi direktang paggamit ay lumitaw sa pamamagitan ng mga pointer sa mga struct. Yan ay,
kapag ang paggamit ng isang hindi kumpletong struct ay wasto, ang paggamit ay hindi direkta. Ang isang halimbawa ay istruktura
isa direkta; istruktura dalawa * hindi direkta;.

Nililimitahan ng opsyonal na pangalawang salita ang detalye sa mga ordinaryong istruktura (ord:) O
mga generic na istruktura (gen:). Ang mga generic na istruktura ay medyo kumplikado upang ipaliwanag. Para sa C++,
ang mga ito ay hindi tahasang mga espesyalisasyon ng mga klase ng template, o mga hindi-template na klase
sa loob ng nasa itaas. Ang ibang mga programming language ay may mga generic, ngunit
-femit-struct-debug-detalyadong ay hindi pa nagpapatupad ng mga ito.

Tinukoy ng ikatlong salita ang mga source file para sa mga istrukturang iyon kung saan ang compiler
dapat maglabas ng impormasyon sa pag-debug. Ang mga halaga wala at anumang may normal na kahulugan. Ang
halaga base nangangahulugan na ang base ng pangalan ng file kung saan ang uri ng deklarasyon
lalabas ay dapat tumugma sa base ng pangalan ng pangunahing compilation file. Sa pagsasanay,
ito ay nangangahulugan na kapag pinagsama-sama foo.c, ang impormasyon sa pag-debug ay nabuo para sa mga uri
ipinahayag sa file na iyon at foo.h, ngunit hindi ang iba pang mga file ng header. Ang halaga sys paraan
ang mga uri na nagbibigay-kasiyahan base o ipinahayag sa mga header ng system o compiler.

Maaaring kailanganin mong mag-eksperimento upang matukoy ang pinakamahusay na mga setting para sa iyong aplikasyon.

Ang default ay -femit-struct-debug-detailed=lahat.

Gumagana lang ang opsyong ito sa DWARF 2.

-fno-merge-debug-strings
Idirekta ang linker na huwag pagsamahin ang mga string sa impormasyon sa pag-debug na
magkapareho sa iba't ibang object file. Ang pagsasama ay hindi sinusuportahan ng lahat ng assembler o
mga linker. Ang pagsasama ay nagpapababa sa laki ng impormasyon sa pag-debug sa output file sa
ang halaga ng pagtaas ng oras ng pagproseso ng link. Ang pagsasama ay pinagana bilang default.

-fdebug-prefix-map=luma=bago
Kapag nag-compile ng mga file sa direktoryo luma, itala ang impormasyon sa pag-debug na naglalarawan sa kanila bilang
in bago sa halip.

-fno-dwarf2-cfi-asm
Maglabas ng DWARF 2 unwind info bilang compiler na binuo ng ".eh_frame" na seksyon sa halip na gamitin
GAS ".cfi_*" na mga direktiba.

-p Bumuo ng karagdagang code upang magsulat ng impormasyon ng profile na angkop para sa programa ng pagsusuri
prof. Dapat mong gamitin ang opsyong ito kapag kino-compile ang mga source file na gusto mo ng data,
at dapat mo ring gamitin ito kapag nagli-link.

-pg Bumuo ng karagdagang code upang magsulat ng impormasyon ng profile na angkop para sa programa ng pagsusuri
gprof. Dapat mong gamitin ang opsyong ito kapag kino-compile ang mga source file na gusto mo ng data,
at dapat mo ring gamitin ito kapag nagli-link.

-Q Ginagawang i-print ng compiler ang bawat pangalan ng function habang ito ay pinagsama-sama, at nag-print ng ilan
mga istatistika tungkol sa bawat pass kapag natapos na ito.

-ftime-ulat
Ginagawa ang compiler na mag-print ng ilang mga istatistika tungkol sa oras na natupok ng bawat pass kapag ito
natapos.

-fmem-ulat
Ginagawa ang compiler na mag-print ng ilang istatistika tungkol sa permanenteng paglalaan ng memory kapag ito
natapos.

-fmem-report-wpa
Ginagawa ang compiler na mag-print ng ilang istatistika tungkol sa permanenteng paglalaan ng memorya para sa WPA
phase lang.

-fpre-ipa-mem-ulat
-fpost-ipa-mem-ulat
Ginagawa ang compiler na mag-print ng ilang istatistika tungkol sa permanenteng paglalaan ng memorya bago o
pagkatapos ng interprocedural optimization.

-fprofile-ulat
Ginagawa ang compiler na mag-print ng ilang mga istatistika tungkol sa pagkakapare-pareho ng (tinantyang) profile
at epekto ng mga indibidwal na pass.

-fstack-paggamit
Ginagawa ang compiler output stack na impormasyon sa paggamit para sa program, sa isang per-function
batayan. Ang filename para sa dump ay ginawa sa pamamagitan ng pagdaragdag .su sa auxname. auxname is
nabuo mula sa pangalan ng output file, kung tahasang tinukoy at hindi ito isang
executable, kung hindi, ito ang basename ng source file. Ang isang entry ay binubuo ng
tatlong larangan:

* Ang pangalan ng function.

* Isang bilang ng mga byte.

* Isa o higit pang mga qualifier: "static", "dynamic", "bounded".

Ang qualifier na "static" ay nangangahulugan na ang function ay manipulahin ang stack nang static: a
nakapirming bilang ng mga byte ay inilalaan para sa frame sa function entry at inilabas sa
paglabas ng function; walang pagsasaayos ng stack na ginawa sa function. Ang ikalawa
Ang field ay ang nakapirming bilang ng mga byte na ito.

Ang qualifier na "dynamic" ay nangangahulugang dynamic na manipulahin ng function ang stack: in
karagdagan sa static na alokasyon na inilarawan sa itaas, ang mga pagsasaayos ng stack ay ginagawa sa
katawan ng function, halimbawa para push/pop ang mga argumento sa paligid ng mga function call. Kung ang
qualifier "bounded" ay naroroon din, ang halaga ng mga pagsasaayos na ito ay bounded sa
oras ng pag-compile at ang pangalawang field ay isang upper bound ng kabuuang dami ng stack na ginamit
sa pamamagitan ng function. Kung wala ito, ang halaga ng mga pagsasaayos na ito ay hindi limitado
sa oras ng pag-compile at ang pangalawang patlang ay kumakatawan lamang sa may hangganan na bahagi.

-fprofile-arcs
Magdagdag ng code upang ang daloy ng programa arcs ay ginagamitan ng instrumento. Sa panahon ng pagpapatupad ng programa
Itinatala kung gaano karaming beses ang bawat sangay at tawag ay naisakatuparan at kung gaano karaming beses ito kinuha
o nagbabalik. Kapag lumabas ang pinagsama-samang programa, sine-save nito ang data na ito sa isang file na tinatawag
auxname.gcda para sa bawat source file. Ang data ay maaaring gamitin para sa profile-directed
mga pag-optimize (-fbranch-probability), o para sa pagsusuri sa saklaw ng pagsubok
(-ftest-saklaw). Ang bawat object file auxname ay nabuo mula sa pangalan ng
output file, kung tahasang tinukoy at hindi ito ang panghuling maipapatupad, kung hindi man ito
ay ang basename ng source file. Sa parehong mga kaso, ang anumang suffix ay tinanggal (hal
foo.gcda para sa input file dir/foo.c, O dir/foo.gcda para sa output file na tinukoy bilang -o
dir/foo.o).

--saklaw
Ginagamit ang opsyong ito para mag-compile at mag-link ng code na ginamit para sa pagsusuri sa saklaw. Ang
Ang opsyon ay kasingkahulugan ng -fprofile-arcs -ftest-saklaw (kapag nag-compile) at -lgcov
(kapag nagli-link). Tingnan ang dokumentasyon para sa mga opsyong iyon para sa higit pang mga detalye.

* I-compile ang source file gamit ang -fprofile-arcs kasama ang pag-optimize at pagbuo ng code
mga pagpipilian. Para sa pagsusuri sa saklaw ng pagsubok, gamitin ang karagdagang -ftest-saklaw pagpipilian.
Hindi mo kailangang i-profile ang bawat source file sa isang program.

* I-link ang iyong object file sa -lgcov or -fprofile-arcs (ang huli ay nagpapahiwatig ng
dating).

* Patakbuhin ang programa sa isang kinatawan ng workload upang mabuo ang arc profile
impormasyon. Ito ay maaaring ulitin kahit ilang beses. Maaari kang tumakbo nang sabay-sabay
mga pagkakataon ng iyong programa, at sa kondisyon na ang file system ay sumusuporta sa pag-lock, ang
ang mga file ng data ay maa-update nang tama. Gayundin, ang mga "tinidor" na tawag ay nakita at
wastong paghawak (hindi mangyayari ang dobleng pagbibilang).

* Para sa mga pag-optimize na nakadirekta sa profile, i-compile muli ang mga source file gamit ang pareho
optimization at mga pagpipilian sa pagbuo ng code plus -fbranch-probability.

* Para sa pagsusuri sa saklaw ng pagsubok, gamitin gcov upang makagawa ng nababasang impormasyon ng tao mula sa
ang .gcno at .gcda mga file. Sumangguni sa gcov dokumentasyon para sa karagdagang
impormasyon.

may -fprofile-arcs, para sa bawat function ng iyong program ay lumilikha ang GCC ng daloy ng programa
graph, pagkatapos ay nakahanap ng spanning tree para sa graph. Tanging mga arko na wala sa
Ang spanning tree ay kailangang gamitin: ang compiler ay nagdaragdag ng code upang mabilang ang bilang ng
beses na ang mga arko na ito ay naisakatuparan. Kapag ang isang arko ang tanging labasan o tanging pasukan
isang bloke, maaaring idagdag ang instrumentation code sa block; kung hindi, isang bagong basic
block ay dapat gawin upang hawakan ang instrumentation code.

-ftest-saklaw
Gumawa ng tala file na ang gcov magagamit ang code-coverage utility para ipakita ang program
saklaw. Tinatawag ang note file ng bawat source file auxname.gcno. Sumangguni sa
-fprofile-arcs opsyon sa itaas para sa isang paglalarawan ng auxname at mga tagubilin kung paano
bumuo ng data ng saklaw ng pagsubok. Ang data ng saklaw ay tumutugma sa mga source file nang mas malapit kung
hindi ka nag-optimize.

-fdbg-cnt-list
I-print ang pangalan at ang counter upper bound para sa lahat ng debug counter.

-fdbg-cnt=counter-value-list
Itakda ang panloob na debug counter sa itaas na hangganan. counter-value-list ay pinaghihiwalay ng kuwit
Listahan ng pangalan:halaga mga pares na nagtatakda ng upper bound ng bawat debug counter pangalan sa
halaga. Ang lahat ng mga debug counter ay may paunang upper bound na "UINT_MAX"; kaya "dbg_cnt"
palaging nagbabalik ng true maliban kung ang upper bound ay itinakda ng opsyong ito. Halimbawa, may
-fdbg-cnt=dce:10,tail_call:0, "dbg_cnt(dce)" ay nagbabalik ng true para lamang sa unang 10
mga panawagan.

-kalabanin-uri-pumasa
-fdisable-uri-pumasa=hanay-listahan
Ito ay isang hanay ng mga opsyon na ginagamit upang tahasang hindi paganahin/paganahin ang pag-optimize
pumasa. Ang mga opsyong ito ay inilaan para sa paggamit para sa pag-debug ng GCC. Ang mga gumagamit ng compiler ay dapat
gumamit ng mga regular na opsyon para sa pagpapagana/pag-disable ng mga pass sa halip.

-fdisable-ipa-pumasa
Huwag paganahin ang IPA pass pumasa. pumasa ay ang pangalan ng pass. Kung ang parehong pass ay static
na ini-invoke sa compiler nang maraming beses, ang pass name ay dapat na dugtungan ng a
sequential number simula sa 1.

-fdisable-rtl-pumasa
-fdisable-rtl-pumasa=hanay-listahan
Huwag paganahin ang RTL pass pumasa. pumasa ay ang pangalan ng pass. Kung ang parehong pass ay static
na ini-invoke sa compiler nang maraming beses, ang pass name ay dapat na dugtungan ng a
sequential number simula sa 1. hanay-listahan ay isang listahan na pinaghihiwalay ng kuwit ng
mga saklaw ng function o mga pangalan ng assembler. Ang bawat hanay ay isang pares ng numero na pinaghihiwalay ng a
colon. Ang saklaw ay kasama sa magkabilang dulo. Kung ang hanay ay maliit, ang numero
pares ay maaaring gawing simple bilang isang solong numero. Kung ang call graph node ng function ay
uid nasa loob ng isa sa mga tinukoy na hanay, ang pumasa ay hindi pinagana para diyan
pagpapaandar Ang uid ay ipinapakita sa header ng function ng isang dump file, at ang pass
ang mga pangalan ay maaaring itapon sa pamamagitan ng paggamit ng opsyon -fdump-passes.

-fdisable-tree-pumasa
-fdisable-tree-pumasa=hanay-listahan
Huwag paganahin ang tree pass pumasa. Tingnan -fdisable-rtl para sa paglalarawan ng opsyon
argumento.

-fenable-ipa-pumasa
Paganahin ang IPA pass pumasa. pumasa ay ang pangalan ng pass. Kung ang parehong pass ay static
na ini-invoke sa compiler nang maraming beses, ang pass name ay dapat na dugtungan ng a
sequential number simula sa 1.

-fenable-rtl-pumasa
-fenable-rtl-pumasa=hanay-listahan
Paganahin ang RTL pass pumasa. Tingnan -fdisable-rtl para sa paglalarawan ng argumento ng opsyon at
halimbawa.

-fenable-tree-pumasa
-fenable-tree-pumasa=hanay-listahan
Paganahin ang tree pass pumasa. Tingnan -fdisable-rtl para sa paglalarawan ng mga argumento ng opsyon.

Narito ang ilang mga halimbawa na nagpapakita ng paggamit ng mga opsyong ito.

# huwag paganahin ang ccp1 para sa lahat ng mga function
-fdisable-tree-ccp1
# i-disable ang kumpletong unroll para sa function na ang cgraph node uid ay 1
-fenable-tree-cunroll=1
# i-disable ang gcse2 para sa mga function sa mga sumusunod na hanay [1,1],
# [300,400], at [400,1000]
# huwag paganahin ang gcse2 para sa mga function na foo at foo2
-fdisable-rtl-gcse2=foo,foo2
# huwag paganahin ang maagang inlining
-fdisable-tree-einline
# i-disable ang ipa inlining
-fdisable-ipa-inline
# paganahin ang puno ng buong pag-unroll
-fenable-tree-unroll

-dtitik
-fdump-rtl-pumasa
-fdump-rtl-pumasa=filename
Sinasabi na gumawa ng mga pag-debug ng dump sa panahon ng compilation sa mga oras na tinukoy ng titik. ito
ay ginagamit para sa pag-debug ng RTL-based na mga pass ng compiler. Ang mga pangalan ng file para sa karamihan
ng mga dump ay ginagawa sa pamamagitan ng pagdaragdag ng pass number at isang salita sa dumpname, at ang
Ang mga file ay nilikha sa direktoryo ng output file. Kung sakali =filename pagpipilian,
ang dump ay output sa ibinigay na file sa halip na ang pass numbered dump file. Tandaan
na ang numero ng pass ay nakalkula nang statically habang ang mga pass ay nairehistro sa pass
manager. Kaya ang pagnunumero ay hindi nauugnay sa dynamic na pagkakasunud-sunod ng pagpapatupad ng
pumasa. Sa partikular, ang isang pass na na-install ng isang plugin ay maaaring magkaroon ng isang numero na higit sa 200 kahit na
kung ito ay naisakatuparan nang maaga. dumpname ay nabuo mula sa pangalan ng output file,
kung tahasang tinukoy at hindi ito isang executable, kung hindi, ito ang basename ng
ang source file. Ang mga switch na ito ay maaaring magkaroon ng iba't ibang epekto kapag -E ay ginagamit para sa
preprocessing.

Maaaring paganahin ang mga debug dump gamit ang a -fdump-rtl lumipat o ilan -d opsyon titik. Dito
ay ang mga posibleng titik para gamitin sa pumasa at titik, at ang kanilang mga kahulugan:

-fdump-rtl-alignments
Dump pagkatapos makalkula ang mga alignment ng sangay.

-fdump-rtl-asmcons
Dump pagkatapos ayusin ang mga pahayag ng rtl na hindi nasiyahan sa mga hadlang sa pagpasok/paglabas.

-fdump-rtl-auto_inc_dec
Itapon pagkatapos ng pagtuklas ng auto-inc-dec. Ang pass na ito ay tumatakbo lamang sa mga arkitektura na iyon
may mga tagubilin sa auto inc o auto dec.

-fdump-rtl-barriers
Itapon pagkatapos linisin ang mga tagubilin sa hadlang.

-fdump-rtl-bbpart
Itapon pagkatapos hatiin ang mainit at malamig na mga pangunahing bloke.

-fdump-rtl-bbro
Dump pagkatapos ng block reordering.

-fdump-rtl-btl1
-fdump-rtl-btl2
-fdump-rtl-btl1 at -fdump-rtl-btl2 paganahin ang dumping pagkatapos ng target ng dalawang sangay
pumasa sa pag-optimize ng load.

-fdump-rtl-bypass
Dump pagkatapos ng jump bypassing at kontrolin ang mga pag-optimize ng daloy.

-fdump-rtl-combine
Dump pagkatapos ng RTL instruction combination pass.

-fdump-rtl-compgotos
Itapon pagkatapos i-duplicate ang mga na-compute na goto.

-fdump-rtl-ce1
-fdump-rtl-ce2
-fdump-rtl-ce3
-fdump-rtl-ce1, -fdump-rtl-ce2, at -fdump-rtl-ce3 paganahin ang paglalaglag pagkatapos ng tatlo
kung pumasa ang conversion.

-fdump-rtl-cprop_hardreg
Dump pagkatapos ng hard register copy propagation.

-fdump-rtl-csa
Dump pagkatapos pagsamahin ang mga pagsasaayos ng stack.

-fdump-rtl-cse1
-fdump-rtl-cse2
-fdump-rtl-cse1 at -fdump-rtl-cse2 paganahin ang paglalaglag pagkatapos ng dalawang karaniwan
pumasa ang subexpression elimination.

-fdump-rtl-dce
Dump pagkatapos pumasa ang standalone dead code elimination.

-fdump-rtl-dbr
Dump pagkatapos maantala ang pag-iskedyul ng sangay.

-fdump-rtl-dce1
-fdump-rtl-dce2
-fdump-rtl-dce1 at -fdump-rtl-dce2 paganahin ang paglalaglag pagkatapos ng dalawang patay na tindahan
pumasa ang elimination.

-fdump-rtl-eh
Dump pagkatapos ng finalization ng EH handling code.

-fdump-rtl-eh_ranges
Dump pagkatapos ng conversion ng EH handling range regions.

-fdump-rtl-expand
Dump pagkatapos ng pagbuo ng RTL.

-fdump-rtl-fwprop1
-fdump-rtl-fwprop2
-fdump-rtl-fwprop1 at -fdump-rtl-fwprop2 paganahin ang paglalaglag pagkatapos ng dalawang pasulong
pagpasa ng pagpapalaganap.

-fdump-rtl-gcse1
-fdump-rtl-gcse2
-fdump-rtl-gcse1 at -fdump-rtl-gcse2 paganahin ang dumping pagkatapos ng global common
pag-aalis ng subexpression.

-fdump-rtl-init-regs
Dump pagkatapos ng pagsisimula ng mga rehistro.

-fdump-rtl-initvals
Dump pagkatapos ng pag-compute ng mga set ng paunang halaga.

-fdump-rtl-into_cfglayout
Dump pagkatapos i-convert sa cfglayout mode.

-fdump-rtl-ira
Dump pagkatapos ng inuulit na paglalaan ng rehistro.

-fdump-rtl-jump
Dump pagkatapos ng pangalawang jump optimization.

-fdump-rtl-loop2
-fdump-rtl-loop2 nagbibigay-daan sa paglalaglag pagkatapos lumipas ang rtl loop optimization.

-fdump-rtl-mach
Dump pagkatapos isagawa ang machine dependent reorganization pass, kung pumasa iyon
umiiral.

-fdump-rtl-mode_sw
Dump pagkatapos tanggalin ang mga redundant mode switch.

-fdump-rtl-rnreg
Dump pagkatapos magrehistro ng renumbering.

-fdump-rtl-outof_cfglayout
Dump pagkatapos mag-convert mula sa cfglayout mode.

-fdump-rtl-peephole2
Itapon pagkatapos ng peephole pass.

-fdump-rtl-postreload
Dump pagkatapos ng post-reload optimizations.

-fdump-rtl-pro_and_epilogue
Dump pagkatapos mabuo ang function na mga prologue at epilogue.

-fdump-rtl-sched1
-fdump-rtl-sched2
-fdump-rtl-sched1 at -fdump-rtl-sched2 paganahin ang paglalaglag pagkatapos ng pangunahing bloke
mga pass sa pag-iskedyul.

-fdump-rtl-ree
Dump pagkatapos ng sign/zero extension elimination.

-fdump-rtl-seqabstr
Dump pagkatapos ng karaniwang pagkakatuklas ng sequence.

-fdump-rtl-shorten
Itapon pagkatapos paikliin ang mga sanga.

-fdump-rtl-kapatid
Itapon pagkatapos ng mga pag-optimize ng tawag ng kapatid.

-fdump-rtl-split1
-fdump-rtl-split2
-fdump-rtl-split3
-fdump-rtl-split4
-fdump-rtl-split5
Ang mga pagpipiliang ito ay nagbibigay-daan sa paglalaglag pagkatapos ng limang round ng paghahati ng pagtuturo.

-fdump-rtl-sms
Dump pagkatapos ng modulo scheduling. Ang pass na ito ay tumatakbo lamang sa ilang mga arkitektura.

-fdump-rtl-stack
Ang dump pagkatapos ng conversion mula sa "flat register file" ng GCC ay nagrerehistro sa x87's
parang stack na mga rehistro. Ang pass na ito ay tumatakbo lamang sa mga variant ng x86.

-fdump-rtl-subreg1
-fdump-rtl-subreg2
-fdump-rtl-subreg1 at -fdump-rtl-subreg2 paganahin ang paglalaglag pagkatapos ng dalawang subreg
pagpasa ng pagpapalawak.

-fdump-rtl-unshare
Dump pagkatapos ng lahat ng rtl ay na-unshare.

-fdump-rtl-vartrack
Dump pagkatapos ng variable na pagsubaybay.

-fdump-rtl-vregs
Dump pagkatapos i-convert ang mga virtual na register sa mga hard register.

-fdump-rtl-web
Dump pagkatapos ng live range splitting.

-fdump-rtl-regclass
-fdump-rtl-subregs_of_mode_init
-fdump-rtl-subregs_of_mode_finish
-fdump-rtl-dfinit
-fdump-rtl-dfinish
Ang mga dump na ito ay tinukoy ngunit palaging gumagawa ng mga walang laman na file.

-sa
-fdump-rtl-lahat
Gawin ang lahat ng mga dump na nakalista sa itaas.

-dA I-annotate ang output ng assembler na may iba't ibang impormasyon sa pag-debug.

-DD Itapon ang lahat ng macro definition, sa dulo ng preprocessing, bilang karagdagan sa normal
output.

-dH Gumawa ng core dump tuwing may naganap na error.

-dp I-annotate ang output ng assembler na may komentong nagsasaad kung aling pattern at
ginagamit ang alternatibo. Ang haba ng bawat pagtuturo ay naka-print din.

-dP Itapon ang RTL sa output ng assembler bilang komento bago ang bawat pagtuturo. Gayundin
buksan -dp anotasyon.

-dx Bumuo lamang ng RTL para sa isang function sa halip na i-compile ito. Karaniwang ginagamit kasama ng
-fdump-rtl-expand.

-fdump-noaddr
Kapag gumagawa ng mga pag-debug ng dump, pigilan ang output ng address. Ginagawa nitong mas magagawa
gumamit ng diff sa mga debugging dump para sa mga invocation ng compiler na may iba't ibang binary ng compiler
at/o ibang text / bss / data / heap / stack / dso na mga lokasyon ng pagsisimula.

-freport-bug
Kolektahin at itapon ang impormasyon sa pag-debug sa pansamantalang file kung ICE sa C/C++ compiler
naganap.

-fdump-walang numero
Kapag gumagawa ng mga pag-debug ng dump, sugpuin ang mga numero ng pagtuturo at output ng address. Ito
ginagawang mas magagawa ang paggamit ng diff sa mga debugging dump para sa mga invocation ng compiler
iba't ibang mga opsyon, partikular na mayroon at wala -g.

-fdump-unnumbered-links
Kapag gumagawa ng mga debugging dump (tingnan ang -d opsyon sa itaas), sugpuin ang mga numero ng pagtuturo para sa
mga link sa nakaraan at susunod na mga tagubilin sa isang pagkakasunud-sunod.

-fdump-translation-unit (C++ lang)
-fdump-translation-unit-pagpipilian (C++ lang)
Itapon ang isang representasyon ng istraktura ng puno para sa buong unit ng pagsasalin sa isang file.
Ang pangalan ng file ay ginawa sa pamamagitan ng pagdaragdag .tu sa pangalan ng source file, at ang file ay
nilikha sa parehong direktoryo bilang output file. Kung ang -pagpipilian ginagamit ang form,
pagpipilian kinokontrol ang mga detalye ng dump gaya ng inilarawan para sa -fdump-puno mga pagpipilian.

-fdump-class-hierarchy (C++ lang)
-fdump-class-hierarchy-pagpipilian (C++ lang)
Itapon ang representasyon ng hierarchy ng bawat klase at virtual function table layout sa a
file. Ang pangalan ng file ay ginawa sa pamamagitan ng pagdaragdag .klase sa pangalan ng source file, at sa file
ay nilikha sa parehong direktoryo ng output file. Kung ang -pagpipilian ginagamit ang form,
pagpipilian kinokontrol ang mga detalye ng dump gaya ng inilarawan para sa -fdump-puno mga pagpipilian.

-fdump-ipa-lumipat
Kontrolin ang pagtatambak sa iba't ibang yugto ng inter-procedural analysis language tree sa a
file. Ang pangalan ng file ay nabuo sa pamamagitan ng pagdaragdag ng isang switch na partikular na suffix sa pinagmulan
pangalan ng file, at ang file ay nilikha sa parehong direktoryo ng output file. Ang
ang mga sumusunod na dump ay posible:

lahat Pinapagana ang lahat ng inter-procedural analysis dumps.

cgraph
Nagta-dump ng impormasyon tungkol sa pag-optimize ng call-graph, pag-alis ng hindi nagamit na function, at
inlining na mga desisyon.

inline
Dump pagkatapos ng function inlining.

-fdump-passes
Itapon ang listahan ng mga optimization pass na naka-on at naka-off ng kasalukuyang
mga pagpipilian sa command-line.

-fdump-statistics-opsyon
Paganahin at kontrolin ang paglalaglag ng mga istatistika ng pass sa isang hiwalay na file. Ang pangalan ng file ay
nabuo sa pamamagitan ng pagdaragdag ng isang panlapi na nagtatapos sa .statistika sa pangalan ng source file, at ang
Ang file ay nilikha sa parehong direktoryo ng output file. Kung ang -opsyon anyo ay
ginamit, -stats nagiging sanhi ng pagbubuod ng mga counter sa buong unit ng compilation habang
-mga detalye itinatambak ang bawat kaganapan habang ang mga pass ay bumubuo sa kanila. Ang default na walang opsyon ay
upang isama ang mga counter para sa bawat function na pinagsama-sama.

-fdump-tree-lumipat
-fdump-tree-lumipat-pagpipilian
-fdump-tree-lumipat-pagpipilian=filename
Kontrolin ang paglalaglag sa iba't ibang yugto ng pagproseso ng intermediate language tree sa
isang file. Ang pangalan ng file ay nabuo sa pamamagitan ng pagdaragdag ng isang switch-specific na suffix sa
pangalan ng source file, at ang file ay nilikha sa parehong direktoryo ng output file. Sa
kaso ng =filename opsyon, ang dump ay output sa ibinigay na file sa halip na ang auto
pinangalanang dump file. Kung ang -pagpipilian ginagamit ang form, pagpipilian ay isang listahan ng - hiwalay
mga opsyon na kumokontrol sa mga detalye ng dump. Hindi lahat ng opsyon ay naaangkop sa lahat
mga tambakan; hindi pinapansin ang mga hindi makabuluhan. Available ang mga sumusunod na opsyon

tirahan
I-print ang address ng bawat node. Kadalasan ito ay hindi makabuluhan dahil nagbabago ito
ayon sa kapaligiran at source file. Ang pangunahing gamit nito ay para sa pagtali a
dump file na may debug na kapaligiran.

asmname
Kung ang "DECL_ASSEMBLER_NAME" ay itinakda para sa isang partikular na decl, gamitin iyon sa dump
sa halip na "DECL_NAME". Ang pangunahing paggamit nito ay ang kadalian ng paggamit mula sa paatras
sira ang mga pangalan sa assembly file.

balingkinitan
Kapag nagtatapon ng mga intermediate na representasyon sa harap, pigilan ang paglalaglag ng mga miyembro ng
isang saklaw o katawan ng isang function dahil lang naabot na ang saklaw na iyon. Tanging
itapon ang mga naturang item kapag direktang naaabot ang mga ito sa ibang landas.

Kapag nagtatapon ng mga magagandang naka-print na puno, pinipigilan ng pagpipiliang ito ang pagtatapon ng mga katawan ng
mga istruktura ng kontrol.

Kapag nagtatapon ng RTL, i-print ang RTL sa slim (condensed) form sa halip na default
mala-LISP na representasyon.

hilaw Mag-print ng isang raw na representasyon ng puno. Bilang default, ang mga puno ay medyo naka-print sa
isang representasyong tulad ng C.

mga detalye
Paganahin ang mas detalyadong mga dump (hindi pinarangalan ng bawat opsyon sa dump). Isama na rin
impormasyon mula sa mga optimization pass.

stats
I-enable ang pag-dumping ng iba't ibang istatistika tungkol sa pass (hindi pinarangalan ng bawat dump
pagpipilian).

bloke
I-enable ang pagpapakita ng mga pangunahing hangganan ng block (naka-disable sa mga raw dump).

talangguhit
Para sa bawat isa sa iba pang ipinahiwatig na mga dump file (-fdump-rtl-pumasa), itapon a
representasyon ng control flow graph na angkop para sa pagtingin gamit ang GraphViz sa
file.passid.pass.dot. Ang bawat function sa file ay medyo naka-print bilang isang subgraph,
upang mai-render ng GraphViz silang lahat sa isang plot.

Ang opsyong ito ay kasalukuyang gumagana lamang para sa mga RTL dump, at ang RTL ay palaging itinatapon
manipis na anyo.

vops
Paganahin ang pagpapakita ng mga virtual na operand para sa bawat pahayag.

lineno
Paganahin ang pagpapakita ng mga numero ng linya para sa mga pahayag.

uid Paganahin ang pagpapakita ng natatanging ID ("DECL_UID") para sa bawat variable.

pandiwang
I-enable ang pagpapakita ng tree dump para sa bawat statement.

eh Paganahin ang pagpapakita ng numero ng rehiyon ng EH na may hawak ng bawat pahayag.

scev
I-enable ang pagpapakita ng mga detalye ng pagsusuri ng scalar evolution.

optimized
I-enable ang pagpapakita ng impormasyon sa pag-optimize (available lang sa ilang mga pass).

napalampas
I-enable ang pagpapakita ng napalampas na impormasyon sa pag-optimize (available lang sa ilang mga pass).

nota
Paganahin ang iba pang detalyadong impormasyon sa pag-optimize (magagamit lamang sa ilang partikular na pass).

=filename
Sa halip na isang awtomatikong pinangalanang dump file, mag-output sa ibinigay na pangalan ng file. Ang file
pangalan stdout at stderr ay ginagamot nang espesyal at itinuturing na bukas na
karaniwang mga batis. Halimbawa,

gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump
-fdump-tree-pre=stderr file.c

naglalabas ng vectorizer dump sa foo.dump, habang ang PRE dump ay naka-output sa stderr.
Kung ang dalawang magkasalungat na dump filename ay ibinigay para sa parehong pass, ang huli
Ino-override ng opsyon ang naunang isa.

lahat I-on ang lahat ng opsyon, maliban sa hilaw, balingkinitan, pandiwang at lineno.

optall
I-on ang lahat ng opsyon sa pag-optimize, ibig sabihin, optimized, napalampas, at nota.

Posible ang mga sumusunod na pagtatambak ng puno:

orihinal
Dump bago ang anumang tree based optimization, sa file.orihinal.

optimized
Dump pagkatapos ng lahat ng tree based optimization, sa file.optimized.

gimple
Dump bawat function bago at pagkatapos ng gimplification pass sa isang file. Ang file
ang pangalan ay ginawa sa pamamagitan ng pagsasama .gimple sa pangalan ng source file.

cfg Itapon ang control flow graph ng bawat function sa isang file. Ang pangalan ng file ay ginawa ni
nakakabit .cfg sa pangalan ng source file.

ch Itapon ang bawat function pagkatapos kopyahin ang mga header ng loop. Ang pangalan ng file ay ginawa sa pamamagitan ng pagdaragdag
.ch sa pangalan ng source file.

ssa Itapon ang impormasyong nauugnay sa SSA sa isang file. Ang pangalan ng file ay ginawa sa pamamagitan ng pagdaragdag .ssa
sa pangalan ng source file.

bansag
Itapon ang impormasyon ng aliasing para sa bawat function. Ang pangalan ng file ay ginawa sa pamamagitan ng pagdaragdag
.alias sa pangalan ng source file.

ccp Itapon ang bawat function pagkatapos ng CCP. Ang pangalan ng file ay ginawa sa pamamagitan ng pagdaragdag .ccp sa
pangalan ng source file.

storeccp
Itapon ang bawat function pagkatapos ng STORE-CCP. Ang pangalan ng file ay ginawa sa pamamagitan ng pagdaragdag .storeccp
sa pangalan ng source file.

pre Itapon ang mga puno pagkatapos ng bahagyang pag-aalis ng redundancy. Ang pangalan ng file ay ginawa ni
nakakabit .pre sa pangalan ng source file.

fre Itapon ang mga puno pagkatapos ng ganap na pag-aalis ng redundancy. Ang pangalan ng file ay ginawa sa pamamagitan ng pagdaragdag
.libre sa pangalan ng source file.

copyprop
Itapon ang mga puno pagkatapos ng pagpapalaganap ng kopya. Ang pangalan ng file ay ginawa sa pamamagitan ng pagdaragdag .copyprop
sa pangalan ng source file.

store_copyprop
Itapon ang mga puno pagkatapos ng store copy-propagation. Ang pangalan ng file ay ginawa sa pamamagitan ng pagdaragdag
.store_copyprop sa pangalan ng source file.

dce I-dump ang bawat function pagkatapos ng dead code elimination. Ang pangalan ng file ay ginawa ni
nakakabit .dce sa pangalan ng source file.

Si G. / Gng I-dump ang bawat function pagkatapos magsagawa ng scalar replacement ng mga aggregate. Ang file
ang pangalan ay ginawa sa pamamagitan ng pagsasama .sra sa pangalan ng source file.

lababo
Itapon ang bawat function pagkatapos magsagawa ng code sinking. Ang pangalan ng file ay ginawa ni
nakakabit .lubog sa pangalan ng source file.

regalo Itapon ang bawat function pagkatapos ilapat ang dominator tree optimizations. Ang pangalan ng file ay
ginawa sa pamamagitan ng pagsasama .dom sa pangalan ng source file.

sabihin Itapon ang bawat function pagkatapos ilapat ang dead store elimination. Ang pangalan ng file ay ginawa
sa pamamagitan ng pagdugtong .dse sa pangalan ng source file.

phiopt
Itapon ang bawat function pagkatapos i-optimize ang mga PHI node sa straightline code. Ang file
ang pangalan ay ginawa sa pamamagitan ng pagsasama .phiopt sa pangalan ng source file.

forwprop
Itapon ang bawat function pagkatapos ng pagpapalaganap ng mga variable ng solong paggamit. Ang pangalan ng file
ay ginawa sa pamamagitan ng pagsasama .forwprop sa pangalan ng source file.

copyrename
I-dump ang bawat function pagkatapos ilapat ang copy rename optimization. Ang pangalan ng file ay
ginawa sa pamamagitan ng pagsasama .copyrename sa pangalan ng source file.

nrv I-dump ang bawat function pagkatapos ilapat ang pinangalanang return value optimization sa generic
mga puno. Ang pangalan ng file ay ginawa sa pamamagitan ng pagdaragdag .nrv sa pangalan ng source file.

vect
Itapon ang bawat function pagkatapos ilapat ang vectorization ng mga loop. Ang pangalan ng file ay ginawa
sa pamamagitan ng pagdugtong .vect sa pangalan ng source file.

pakiusap Itapon ang bawat function pagkatapos ilapat ang vectorization ng mga pangunahing bloke. Ang pangalan ng file ay
ginawa sa pamamagitan ng pagsasama .slp sa pangalan ng source file.

vp Itapon ang bawat function pagkatapos ng Value Range Propagation (VRP). Ang pangalan ng file ay ginawa ni
nakakabit .vrp sa pangalan ng source file.

lahat I-enable ang lahat ng available na tree dumps gamit ang mga flag na ibinigay sa opsyong ito.

-fopt-info
-fopt-info-pagpipilian
-fopt-info-pagpipilian=filename
Kinokontrol ang mga optimization dump mula sa iba't ibang optimization pass. Kung ang -pagpipilian anyo ay
ginamit, pagpipilian ay isang listahan ng - pinaghiwalay na mga keyword ng opsyon upang piliin ang mga detalye ng dump at
mga pag-optimize.

Ang pagpipilian ay maaaring nahahati sa dalawang grupo: mga opsyon na naglalarawan sa verbosity ng
dump, at mga opsyon na naglalarawan kung aling mga pag-optimize ang dapat isama. Ang mga pagpipilian mula sa
ang parehong mga grupo ay maaaring malayang paghaluin dahil sila ay hindi magkakapatong. Gayunpaman, sa kaso ng
anumang mga salungatan, ang mga susunod na opsyon ay i-override ang mga naunang opsyon sa command line.

Kinokontrol ng mga sumusunod na opsyon ang dump verbosity:

optimized
Mag-print ng impormasyon kapag matagumpay na nailapat ang isang pag-optimize. Ito ay hanggang sa isang pass
upang magpasya kung aling impormasyon ang may kaugnayan. Halimbawa, ang vectorizer ay pumasa sa pag-print
ang pinagmulang lokasyon ng mga loop na matagumpay na na-vector.

napalampas
Mag-print ng impormasyon tungkol sa mga napalampas na pag-optimize. Kinokontrol ng mga indibidwal na pass kung alin
impormasyong isasama sa output.

nota
Mag-print ng verbose na impormasyon tungkol sa mga pag-optimize, tulad ng ilang mga pagbabago,
mas detalyadong mensahe tungkol sa mga desisyon atbp.

lahat Mag-print ng detalyadong impormasyon sa pag-optimize. Kabilang dito ang optimized, napalampas, at
nota.

Maaaring gamitin ang isa o higit pa sa mga sumusunod na keyword ng opsyon upang ilarawan ang isang pangkat ng
mga pag-optimize:

ipa Paganahin ang mga dump mula sa lahat ng interprocedural na pag-optimize.

silo
Paganahin ang mga dump mula sa lahat ng pag-optimize ng loop.

inline
Paganahin ang mga dump mula sa lahat ng inlining optimization.

mga vector Paganahin ang mga dump mula sa lahat ng pag-optimize ng vectorization.

optall
Paganahin ang mga dump mula sa lahat ng pag-optimize. Ito ay isang superset ng mga pangkat ng pag-optimize
naka lista sa taas.

If pagpipilian ay tinanggal, ito ay default sa optimized-optall, na nangangahulugang itapon ang lahat ng impormasyon
tungkol sa matagumpay na pag-optimize mula sa lahat ng mga pass.

Kung ang filename ay ibinigay, pagkatapos ay ang mga dump mula sa lahat ng naaangkop na pag-optimize ay
pinagsama-sama sa filename. Kung hindi, ang dump ay output sa stderr. Kahit na
maramihang -fopt-info ang mga opsyon ay tinatanggap, isa lamang sa mga ito ang maaaring magsama ng a filename. Kung
iba pang mga filename ay ibinigay pagkatapos ay ang lahat maliban sa unang tulad na opsyon ay hindi pinansin.

Tandaan na ang output filename ay na-overwrite sa kaso ng maraming unit ng pagsasalin. Kung
isang pinagsamang output mula sa maraming unit ng pagsasalin ay ninanais, stderr dapat gamitin
sa halip.

Sa sumusunod na halimbawa, ang impormasyon sa pag-optimize ay output sa stderr:

gcc -O3 -fopt-info

Ang halimbawang ito:

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

naglalabas ng napalampas na ulat sa pag-optimize mula sa lahat ng mga pass sa nakaligtaan.lahat, at ito:

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

nagpi-print ng impormasyon tungkol sa mga napalampas na pagkakataon sa pag-optimize mula sa mga vectorization pass
on stderr. Tandaan na -fopt-info-vec-missed ay katumbas ng -fopt-info-missed-vec.

Bilang isa pang halimbawa,

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

naglalabas ng impormasyon tungkol sa mga napalampas na pag-optimize pati na rin ang mga na-optimize na lokasyon mula sa lahat
pumapasok ang inlining inline.txt.

Panghuli, isaalang-alang:

gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt

Narito ang dalawang output filename vec.miss at loop.opt magkasalungat dahil isa lang
pinapayagan ang output file. Sa kasong ito, ang unang opsyon lamang ang magkakabisa at ang
hindi papansinin ang mga kasunod na opsyon. Kaya lang vec.miss ay ginawa na naglalaman ng mga dump
mula sa vectorizer tungkol sa mga napalampas na pagkakataon.

-frandom-seed=numero
Ang opsyong ito ay nagbibigay ng binhi na ginagamit ng GCC bilang kapalit ng mga random na numero sa pagbuo
ilang mga pangalan ng simbolo na kailangang iba sa bawat pinagsama-samang file. Ito rin ay
ginagamit upang maglagay ng mga natatanging selyo sa mga file ng data ng saklaw at mga file ng object na gumagawa
sila. Maaari mong gamitin ang -frandom-seed opsyon upang makagawa ng reproducibly identical object
file.

Ang numero dapat ay iba para sa bawat file na iyong kino-compile.

-fsched-verbose=n
Sa mga target na gumagamit ng pag-iiskedyul ng pagtuturo, kinokontrol ng opsyong ito ang dami ng
debugging output ang scheduler prints. Ang impormasyong ito ay nakasulat sa karaniwang error,
maliban na lamang kung -fdump-rtl-sched1 or -fdump-rtl-sched2 ay tinukoy, kung saan ito ay output
sa karaniwang dump listing file, .sched1 or .sched2 ayon sa pagkakabanggit. Gayunpaman para sa n
higit sa siyam, ang output ay palaging naka-print sa karaniwang error.

para n higit sa zero, -fsched-verbose naglalabas ng parehong impormasyon bilang
-fdump-rtl-sched1 at -fdump-rtl-sched2. Para sa n higit sa isa, ito rin ang pangunahing output
i-block ang mga probabilities, detalyadong ready list information at unit/insn info. Para sa n
higit sa dalawa, kabilang dito ang RTL sa abort point, control-flow at impormasyon sa mga rehiyon. At
para n mahigit apat, -fsched-verbose kasama rin ang impormasyon ng dependence.

-save-temps
-save-temps=cwd
Itabi nang permanente ang karaniwang "pansamantalang" intermediate na mga file; ilagay ang mga ito sa agos
direktoryo at pangalanan ang mga ito batay sa pinagmulang file. Kaya, pag-compile foo.c sa -c
-save-temps gumagawa ng mga file foo.i at foo.s, Pati na rin foo.o. Lumilikha ito ng a
preprocessed foo.i output file kahit na ang compiler ngayon ay karaniwang gumagamit ng isang
pinagsamang preprocessor.

Kapag ginamit kasabay ng -x opsyon sa command-line, -save-temps ay matino
sapat na upang maiwasan ang labis na pagsulat ng isang input source file na may parehong extension bilang isang
intermediate na file. Ang kaukulang intermediate file ay maaaring makuha sa pamamagitan ng pagpapalit ng pangalan
ang source file bago gamitin -save-temps.

Kung gagamit ka ng GCC nang magkatulad, nagko-compile ng ilang iba't ibang source file na nagbabahagi ng a
karaniwang base name sa iba't ibang mga subdirectory o sa parehong source file na pinagsama-sama para sa
maramihang mga destinasyon ng output, ito ay malamang na ang iba't ibang parallel compiler ay gagawin
makagambala sa isa't isa, at i-overwrite ang mga pansamantalang file. Halimbawa:

gcc -save-temps -o outdir1/foo.o indir1/foo.c&
gcc -save-temps -o outdir2/foo.o indir2/foo.c&

maaaring magresulta sa foo.i at foo.o na isinulat nang sabay-sabay ng parehong mga compiler.

-save-temps=obj
I-imbak nang permanente ang karaniwang "pansamantalang" intermediate na mga file. Kung ang -o ginagamit ang opsyon,
ang mga pansamantalang file ay batay sa object file. Kung ang -o hindi ginagamit ang opsyon, ang
-save-temps=obj kumikilos tulad ng switch -save-temps.

Halimbawa:

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

lumilikha foo.i, foo.s, dir/xbar.i, dir/xbar.s, dir2/yfoobar.i, dir2/yfoobar.s, at
dir2/yfoobar.o.

-panahon[=file]
Iulat ang oras ng CPU na kinuha ng bawat subprocess sa pagkakasunud-sunod ng compilation. Para kay C
source file, ito ang compiler proper at assembler (kasama ang linker kung ang pag-link ay
tapos na).

Kung wala ang detalye ng isang output file, ang output ay ganito:

# cc1 0.12 0.01
# bilang 0.00 0.01

Ang unang numero sa bawat linya ay ang "oras ng gumagamit", iyon ay oras na ginugol sa pagpapatupad ng
programa mismo. Ang pangalawang numero ay "oras ng system", oras na ginugol sa pagpapatupad ng pagpapatakbo
sistema ng gawain sa ngalan ng programa. Ang parehong mga numero ay nasa segundo.

Sa pagtutukoy ng isang output file, ang output ay idinagdag sa pinangalanang file,
at ganito ang hitsura:

0.12 0.01 cc1
0.00 0.01 bilang

Ang "oras ng gumagamit" at ang "oras ng system" ay inilipat bago ang pangalan ng programa, at ang
ang mga opsyon na ipinasa sa programa ay ipinapakita, upang masabi ng isa kung ano ang file
pinagsama-sama, at kung aling mga pagpipilian.

-fvar-tracking
Patakbuhin ang variable na tracking pass. Kinakalkula nito kung saan naka-imbak ang mga variable sa bawat posisyon
sa code. Ang mas mahusay na impormasyon sa pag-debug ay nabuo (kung ang impormasyon sa pag-debug
format ay sumusuporta sa impormasyong ito).

Ito ay pinagana bilang default kapag nag-compile gamit ang optimization (-Os, -O, -O2, ...),
impormasyon sa pag-debug (-g) at sinusuportahan ito ng format ng impormasyon sa pag-debug.

-fvar-tracking-assignments
I-annotate ang mga pagtatalaga sa mga variable ng user nang maaga sa compilation at subukang dalhin
ang mga anotasyon sa kabuuan ng compilation hanggang sa dulo, sa isang pagtatangka
upang mapabuti ang impormasyon sa pag-debug habang nag-o-optimize. Paggamit ng -gdwarf-4 ay inirerekomenda kasama
gamit ito.

Maaari itong paganahin kahit na ang var-tracking ay hindi pinagana, kung saan ang mga anotasyon ay
nilikha at pinananatili, ngunit itinapon sa dulo. Bilang default, naka-enable ang flag na ito
Kasama -fvar-tracking, maliban kung pinagana ang selective scheduling.

-fvar-tracking-assignments-toggle
Toggle -fvar-tracking-assignments, sa parehong paraan na -gtoggle toggle -g.

-print-file-name=aklatan
I-print ang buong ganap na pangalan ng file ng library aklatan na gagamitin kapag
nagli-link---at huwag kang gumawa ng anupaman. Sa opsyong ito, hindi nagko-compile o nagli-link ang GCC
anumang bagay; nagpi-print lang ito ng pangalan ng file.

-print-multi-directory
I-print ang pangalan ng direktoryo na naaayon sa multilib na pinili ng anumang iba pang switch
naroroon sa command line. Ang direktoryo na ito ay dapat na umiiral sa GCC_EXEC_PREFIX.

-print-multi-lib
I-print ang pagmamapa mula sa mga pangalan ng direktoryo ng multilib hanggang sa mga switch ng compiler na nagbibigay-daan sa kanila.
Ang pangalan ng direktoryo ay pinaghihiwalay mula sa mga switch ng ;, at ang bawat switch ay nagsisimula sa isang
@ sa halip ng -, nang walang mga puwang sa pagitan ng maraming switch. Ito ay dapat na
mapadali ang pagproseso ng shell.

-print-multi-os-directory
I-print ang path sa mga OS library para sa napiling multilib, na may kaugnayan sa ilan lib
subdirectory. Kung ang mga library ng OS ay naroroon sa lib subdirectory at walang multilibs
ay ginagamit, ito ay karaniwang lamang ., kung mayroong mga library ng OS sa libsuffix kapatid
mga direktoryo na ito ay nagpi-print hal ../lib64, ../ lib or ../lib32, o kung ang mga library ng OS ay
naroroon sa lib/subdir mga subdirectory na ini-print nito hal amd64, sparcv9 or ev6.

-print-multiarch
I-print ang path sa mga OS library para sa napiling multiarch, na nauugnay sa ilan lib
subdirectory.

-print-prog-name=programa
katulad -print-file-name, ngunit naghahanap ng isang programa tulad ng cpp.

-print-libgcc-file-name
Katulad ng -print-file-name=libgcc.a.

Ito ay kapaki-pakinabang kapag ginamit mo -nostdlib or -nodefaultlibs ngunit gusto mong i-link sa
libgcc.a. Maaari mong gawin:

gcc -nostdlib ... `gcc -print-libgcc-file-name`

-print-search-dirs
I-print ang pangalan ng naka-configure na direktoryo ng pag-install at isang listahan ng program at
mga direktoryo ng aklatan gcc mga paghahanap---at huwag gumawa ng anupaman.

Ito ay kapaki-pakinabang kapag gcc nagpi-print ng mensahe ng error instalasyon problema, hindi maaari exec
cpp0: Hindi tulad file or direktoryo. Upang malutas ito kailangan mong ilagay cpp0 at ang
iba pang mga bahagi ng compiler kung saan gcc inaasahan na mahanap sila, o maaari mong itakda ang
variable ng kapaligiran GCC_EXEC_PREFIX sa direktoryo kung saan mo na-install ang mga ito. huwag
kalimutan ang trailing /.

-print-sysroot
I-print ang target na direktoryo ng sysroot na ginagamit sa panahon ng compilation. Ito ang
target sysroot na tinukoy alinman sa oras ng pag-configure o gamit ang --sysroot pagpipilian,
posibleng may dagdag na suffix na nakadepende sa mga opsyon sa compilation. Kung walang target
Sysroot ay tinukoy, ang opsyon ay walang nai-print.

-print-sysroot-headers-suffix
I-print ang suffix na idinagdag sa target na sysroot kapag naghahanap ng mga header, o magbigay ng
error kung ang compiler ay hindi na-configure na may ganoong suffix---at huwag gumawa ng anuman
iba pa.

-dumpmachine
I-print ang target machine ng compiler (halimbawa, i686-pc-linux-gnu)---at huwag mong gawin
kahit ano pa

-dumpversion
I-print ang bersyon ng compiler (halimbawa, 3.0)---at huwag gumawa ng anupaman.

-dumpspecs
I-print ang mga built-in na spec ng compiler---at huwag gumawa ng anupaman. (Ginagamit ito kapag
Ang GCC mismo ay itinatayo.)

-fno-eliminate-unused-debug-types
Karaniwan, kapag gumagawa ng output ng DWARF 2, iniiwasan ng GCC ang paggawa ng output ng simbolo ng debug para sa
mga uri na hindi ginagamit kahit saan sa source file na kino-compile. Minsan ito ay kapaki-pakinabang
upang magkaroon ng GCC na magpalabas ng impormasyon sa pag-debug para sa lahat ng uri na idineklara sa isang compilation unit,
hindi alintana kung aktwal na ginagamit ang mga ito o hindi sa compilation unit na iyon, para sa
halimbawa kung, sa debugger, gusto mong maglagay ng value sa isang uri na hindi talaga
ginamit sa iyong programa (ngunit ipinahayag). Gayunpaman, mas madalas, nagreresulta ito sa isang
malaking halaga ng nasayang na espasyo.

Options Na Kontrolin Optimization
Kinokontrol ng mga opsyong ito ang iba't ibang uri ng pag-optimize.

Nang walang anumang opsyon sa pag-optimize, ang layunin ng compiler ay bawasan ang halaga ng compilation
at upang makagawa ng mga inaasahang resulta ang pag-debug. Ang mga pahayag ay independyente: kung ikaw
itigil ang program na may breakpoint sa pagitan ng mga pahayag, pagkatapos ay maaari kang magtalaga ng bagong halaga sa
anumang variable o baguhin ang program counter sa anumang iba pang pahayag sa function at get
eksakto ang mga resulta na iyong inaasahan mula sa source code.

Ang pag-on sa mga flag ng pag-optimize ay ginagawang pagtatangka ng compiler na pahusayin ang pagganap at/o
laki ng code sa gastos ng oras ng compilation at posibleng ang kakayahang i-debug ang
programa.

Ang compiler ay nagsasagawa ng pag-optimize batay sa kaalaman na mayroon ito sa programa.
Ang pag-compile ng maraming file nang sabay-sabay sa isang mode ng output file ay nagbibigay-daan sa compiler na gamitin
impormasyong nakuha mula sa lahat ng mga file kapag kino-compile ang bawat isa sa kanila.

Hindi lahat ng pag-optimize ay direktang kinokontrol ng isang flag. Ang mga pag-optimize lamang na mayroong a
flag ay nakalista sa seksyong ito.

Karamihan sa mga pag-optimize ay pinagana lamang kung ang isang -O nakatakda ang antas sa command line. Kung hindi
hindi pinagana ang mga ito, kahit na tinukoy ang mga indibidwal na flag ng pag-optimize.

Depende sa target at kung paano na-configure ang GCC, isang bahagyang naiibang hanay ng
maaaring paganahin ang mga pag-optimize sa bawat isa -O antas kaysa sa mga nakalista dito. Maaari mong i-invoke ang GCC
sa -Q --help=optimizers upang malaman ang eksaktong hanay ng mga pag-optimize na pinagana sa
bawat antas.

-O
-O1 I-optimize. Ang pag-optimize ng compilation ay tumatagal ng medyo mas maraming oras, at mas maraming memory para sa
isang malaking function.

may -O, sinusubukan ng compiler na bawasan ang laki ng code at oras ng pagpapatupad, nang hindi gumaganap
anumang mga pag-optimize na tumatagal ng maraming oras ng compilation.

-O Ino-on ang mga sumusunod na flag ng pag-optimize:

-fauto-inc-dec -fbranch-count-reg -fcombine-stack-adjustments -fcompare-elim
-fcprop-nagparehistro -fdce -fdefer-pop -fdelayed-branch -fdse -fforward-propagate
-fguess-branch-probability -fif-conversion2 -fif-conversion
-finline-functions-called-once -fipa-pure-const -fipa-profile -fipa-reference
-fmerge-constant -fmove-loop-invariants -fshrink-wrap -fsplit-wide-types
-ftree-bit-ccp -free-ccp -fssa-phiopt -ftree-ch -free-copy-prop -free-copyrename
-ftree-dce -ftree-dominator-opts -ftree-dse -ftree-forwprop -free-fre -ftree-phiprop
-free-lababo -ftree-slsr -ftree-sra -ftree-pta -ftree-ter -funit-sa-isang-panahon

-O naka-on din -fomit-frame-pointer sa mga makina kung saan hindi nakakasagabal ang paggawa nito
may debugging.

-O2 Mag-optimize pa. Ginagawa ng GCC ang halos lahat ng sinusuportahang pag-optimize na hindi
may kasamang space-speed tradeoff. Kumpara sa -O, pinapataas ng opsyong ito ang pareho
oras ng compilation at ang pagganap ng nabuong code.

-O2 ino-on ang lahat ng flag ng pag-optimize na tinukoy ni -O. Ino-on din nito ang sumusunod
mga flag ng pag-optimize: -fthread-jumps -falign-functions -falign-jumps -falign-loops
-falign-labels -fcaller-nagse-save -fcrossjumping -fcse-follow-jumps -fcse-skip-block
-fdelete-null-pointer-checks -fdevirtualize -fdevirtualize-speculatively
-fexpensive-optimizations -fgcse -fgcse-lm -fhoist-katabing-load
-finline-small-functions -findirect-inlining -fipa-cp -fipa-cp-alignment -fipa-sra
-fipa-icf -fisolate-erroneous-paths-dereference -flra-remat -foptimize-sibling-calls
-foptimize-strlen -fpartial-inlining -fpeephole2 -freorder-block
-freorder-block-and-partition -freorder-function -frerun-cse-after-loop
-fsched-interblock -fsched-spec -fschedule-insns -fschedule-insns2 -mahigpit-aliasing
-mahigpit-apaw -ftree-builtin-call-dce -free-switch-conversion -free-tail-merge
-free-pre -ftree-vrp -fipa-ra

Pakitandaan ang babala sa ilalim -fgcse tungkol sa pagtawag -O2 sa mga program na gumagamit ng computed
gotos.

TANDAAN: Sa Ubuntu 8.10 at mga mas bagong bersyon, -D_FORTIFY_SOURCE=2 ay nakatakda bilang default, at ay
activated kapag -O ay nakatakda sa 2 o mas mataas. Ito ay nagbibigay-daan sa karagdagang compile-time at
run-time na mga pagsusuri para sa ilang mga function ng libc. Upang huwag paganahin, tukuyin ang alinman
-U_FORTIFY_SOURCE or -D_FORTIFY_SOURCE=0.

-O3 Mag-optimize pa. -O3 ino-on ang lahat ng pag-optimize na tinukoy ni -O2 at naka-on din
ang -finline-function, -funswitch-loops, -fpredictive-commoning, -fgcse-pagkatapos-reload,
-free-loop-vectorize, -ftree-loop-distribute-patterns, -ftree-slp-vectorize,
-fvect-cost-model, -ftree-partial-pre at -fipa-cp-clone mga pagpipilian.

-O0 Bawasan ang oras ng compilation at gawin ang pag-debug na makagawa ng mga inaasahang resulta. Ito ang
default.

-Os I-optimize para sa laki. -Os nagbibigay-daan sa lahat -O2 mga optimization na hindi karaniwang tumataas
laki ng code. Nagsasagawa rin ito ng mga karagdagang pag-optimize na idinisenyo upang bawasan ang laki ng code.

-Os hindi pinapagana ang sumusunod na mga flag ng pag-optimize: -falign-functions -falign-jumps
-falign-loops -falign-labels -freorder-block -freorder-block-and-partition
-fprefetch-loop-arrays

-Ofast
Huwag pansinin ang mahigpit na pagsunod sa mga pamantayan. -Ofast nagbibigay-daan sa lahat -O3 mga pag-optimize. Ito rin
nagbibigay-daan sa mga pag-optimize na hindi wasto para sa lahat ng mga programang sumusunod sa pamantayan. Ito
buksan -ffast-math at ang Fortran-specific -fno-protect-parents at -fstack-arrays.

-Og I-optimize ang karanasan sa pag-debug. -Og nagbibigay-daan sa mga pag-optimize na hindi nakakasagabal sa
pag-debug. Ito dapat ang antas ng pag-optimize na mapagpipilian para sa karaniwang pag-edit-
compile-debug cycle, na nag-aalok ng makatwirang antas ng pag-optimize habang pinapanatili
mabilis na compilation at magandang karanasan sa pag-debug.

Kung gumagamit ka ng marami -O mga opsyon, mayroon man o walang mga numero ng antas, ang huling ganoong opsyon ay
yung effective.

Mga pagpipilian sa form -fbandila tukuyin ang mga watawat na independyente sa makina. Karamihan sa mga flag ay may pareho
positibo at negatibong anyo; ang negatibong anyo ng -ffoo is -fno-foo. Sa talahanayan sa ibaba,
isa lang sa mga form ang nakalista --- ang karaniwang ginagamit mo. Maaari mong malaman ang iba
form sa pamamagitan ng alinman sa pag-alis hindi- o pagdaragdag nito.

Kinokontrol ng mga sumusunod na opsyon ang mga partikular na pag-optimize. Ang mga ito ay isinaaktibo ng -O
mga pagpipilian o nauugnay sa mga iyon. Maaari mong gamitin ang mga sumusunod na flag sa bihirang
mga kaso kung kailan ninanais ang "fine-tuning" ng mga optimization na isasagawa.

-fno-defer-pop
Palaging i-pop ang mga argumento sa bawat function call sa sandaling bumalik ang function na iyon. Para sa
mga machine na dapat mag-pop ng mga argumento pagkatapos ng isang function na tawag, karaniwang hinahayaan ng compiler
ang mga argumento ay naiipon sa stack para sa ilang mga function na tawag at ipo-pop ang lahat ng ito sa
isang beses.

Hindi pinagana sa mga antas -O, -O2, -O3, -Os.

-fforward-propagate
Magsagawa ng forward propagation pass sa RTL. Sinusubukan ng pass na pagsamahin ang dalawang tagubilin
at sinusuri kung ang resulta ay maaaring gawing simple. Kung aktibo ang loop unrolling, dalawang pass
ay ginanap at ang pangalawa ay naka-iskedyul pagkatapos ng loop unrolling.

Ang pagpipiliang ito ay pinagana bilang default sa mga antas ng pag-optimize -O, -O2, -O3, -Os.

-ffp-contract=estilo
-ffp-contract=off hindi pinapagana ang floating-point expression contraction. -ffp-contract=mabilis
nagbibigay-daan sa floating-point expression contraction gaya ng pagbuo ng fused multiply-add
mga operasyon kung ang target ay may katutubong suporta para sa kanila. -ffp-contract=on Binibigyang-daan
floating-point expression contraction kung pinapayagan ng pamantayan ng wika. Ito ay
kasalukuyang hindi ipinapatupad at tinatratong pantay sa -ffp-contract=off.

Ang default ay -ffp-contract=mabilis.

-fomit-frame-pointer
Huwag itago ang frame pointer sa isang rehistro para sa mga function na hindi nangangailangan ng isa. Ito
iniiwasan ang mga tagubilin upang i-save, i-set up at ibalik ang mga pointer ng frame; ito rin ay gumagawa ng isang
dagdag na rehistro na magagamit sa maraming mga function. It Rin Ginagawang pag-debug imposible on
ilan machine.

Sa ilang mga makina, tulad ng VAX, ang watawat na ito ay walang epekto, dahil ang pamantayan
Awtomatikong pinangangasiwaan ng sequence ng pagtawag ang frame pointer at walang nai-save sa pamamagitan ng
pagpapanggap na wala ito. Ang macro na paglalarawan ng makina na "FRAME_POINTER_REQUIRED"
kinokontrol kung sinusuportahan ng isang target na makina ang flag na ito.

Ang default na setting (kapag hindi nag-optimize para sa laki) para sa 32-bit GNU/Linux x86 at 32-bit
Ang mga target ng Darwin x86 ay -fomit-frame-pointer. Maaari mong i-configure ang GCC gamit ang
--enable-frame-pointer i-configure ang opsyon upang baguhin ang default.

Pinagana sa mga antas -O, -O2, -O3, -Os.

-foptimize-sibling-calls
I-optimize ang kapatid at buntot na recursive na tawag.

Pinagana sa mga antas -O2, -O3, -Os.

-foptimize-strlen
I-optimize ang iba't ibang karaniwang C string function (hal. "strlen", "strchr" o "strcpy") at
ang kanilang "_FORTIFY_SOURCE" ay katapat sa mas mabilis na mga alternatibo.

Pinagana sa mga antas -O2, -O3.

-fno-inline
Huwag palawakin ang anumang mga function na inline bukod sa mga minarkahan ng "always_inline"
katangian. Ito ang default kapag hindi nag-optimize.

Ang mga solong function ay maaaring hindi ma-inlining sa pamamagitan ng pagmamarka sa kanila ng "noinline"
katangian.

-finline-small-functions
Isama ang mga function sa kanilang mga tumatawag kapag ang kanilang katawan ay mas maliit kaysa sa inaasahan
function na call code (kaya ang kabuuang sukat ng programa ay nagiging mas maliit). Ang compiler
heuristikong nagpapasya kung aling mga function ang sapat na simple upang maging sulit na isama
sa ganitong paraan. Nalalapat ang inlining na ito sa lahat ng function, kahit na ang mga hindi idineklara na inline.

Pinagana sa antas -O2.

-findirect-inlining
Inline din ang mga hindi direktang tawag na natuklasang kilala sa oras ng pag-compile salamat sa
nakaraang inlining. Ang opsyong ito ay may anumang epekto lamang kapag ang mismong inlining ay naka-on
sa pamamagitan ng -finline-function or -finline-small-functions mga pagpipilian.

Pinagana sa antas -O2.

-finline-function
Isaalang-alang ang lahat ng mga function para sa inlining, kahit na hindi sila idineklara na inline. Ang
compiler heuristic na nagpapasya kung aling mga function ang nagkakahalaga ng pagsasama sa ganitong paraan.

Kung ang lahat ng mga tawag sa isang ibinigay na function ay isinama, at ang function ay idineklara
"static", kung gayon ang function ay karaniwang hindi output bilang assembler code sa sarili nitong karapatan.

Pinagana sa antas -O3.

-finline-functions-called-once
Isaalang-alang ang lahat ng "static" na function na tinawag nang isang beses para sa pag-inlin sa kanilang tumatawag kahit na
hindi sila minarkahan ng "inline". Kung ang isang tawag sa isang ibinigay na function ay isinama, kung gayon ang
Ang function ay hindi output bilang assembler code sa sarili nitong karapatan.

Pinagana sa mga antas -O1, -O2, -O3 at -Os.

-takot-inlining
Mga inline na function na minarkahan ng "always_inline" at mga function na tila mas maliit ang katawan kaysa
ang function ay tumawag sa itaas nang maaga bago gawin -fprofile-bumuo instrumentasyon at
totoong inlining pass. Ang paggawa nito ay ginagawang mas mura at karaniwan ang pag-profile
mas mabilis na inlining sa mga program na may malalaking chain ng mga function ng nested wrapper.

Pinagana bilang default.

-fipa-sra
Magsagawa ng interprocedural scalar na pagpapalit ng mga pinagsama-samang, pag-alis ng mga hindi nagamit na parameter
at pagpapalit ng mga parameter na ipinasa sa pamamagitan ng sanggunian ng mga parameter na ipinasa ng halaga.

Pinagana sa mga antas -O2, -O3 at -Os.

-finline-limit=n
Bilang default, nililimitahan ng GCC ang laki ng mga function na maaaring i-inline. Ang watawat na ito ay nagpapahintulot
magaspang na kontrol sa limitasyong ito. n ay ang laki ng mga function na maaaring i-inline
bilang ng mga pseudo na tagubilin.

Ang inlining ay aktwal na kinokontrol ng ilang mga parameter, na maaaring tukuyin
indibidwal sa pamamagitan ng paggamit --param pangalan=halaga. ang -finline-limit=n ang opsyon ay nagtatakda ng ilan sa
ang mga parameter na ito tulad ng sumusunod:

max-inline-insns-single
ay nakatakda sa n/ 2.

max-inline-insns-auto
ay nakatakda sa n/ 2.

Tingnan sa ibaba ang isang dokumentasyon ng mga indibidwal na parameter na kumokontrol sa inlining at
para sa mga default ng mga parameter na ito.

tandaan: maaaring walang halaga sa -finline-limit na nagreresulta sa default na gawi.

tandaan: Ang pseudo na pagtuturo ay kumakatawan, sa partikular na kontekstong ito, ng isang abstract
pagsukat ng laki ng function. Sa anumang paraan ay hindi ito kumakatawan sa isang bilang ng pagpupulong
mga tagubilin at dahil dito ang eksaktong kahulugan nito ay maaaring magbago mula sa isang paglabas sa isang
isa pa.

-fno-keep-inline-dllexport
Ito ay isang mas pinong bersyon ng -fkeep-inline-functions, na nalalapat lamang sa
mga function na idineklara gamit ang attribute na "dllexport" o declspec

-fkeep-inline-functions
Sa C, naglalabas ng mga "static" na function na idineklara na "inline" sa object file, kahit na
ang function ay na-inline sa lahat ng mga tumatawag nito. Ang switch na ito ay hindi nakakaapekto
mga function gamit ang extension na "extern inline" sa GNU C90. Sa C++, naglalabas ng anuman at lahat
inline function sa object file.

-fkeep-static-consts
Maglabas ng mga variable na idineklara na "static const" kapag hindi naka-on ang pag-optimize, kahit na ang
ang mga variable ay hindi isinangguni.

Pinapagana ng GCC ang opsyong ito bilang default. Kung gusto mong pilitin ang compiler na suriin kung a
variable ay isinangguni, hindi alintana kung naka-on o hindi ang pag-optimize, gamitin
ang -fno-keep-static-consts pagpipilian.

-fmerge-constant
Subukang pagsamahin ang magkaparehong mga constant (mga string constant at floating-point constants)
sa kabuuan ng mga yunit ng compilation.

Ang pagpipiliang ito ay ang default para sa na-optimize na compilation kung ang assembler at linker
suportahan ito. Gamitin -fno-merge-constant upang pigilan ang pag-uugaling ito.

Pinagana sa mga antas -O, -O2, -O3, -Os.

-fmerge-all-constant
Subukang pagsamahin ang magkaparehong mga constant at magkaparehong variable.

Ang pagpipiliang ito ay nagpapahiwatig -fmerge-constant. Karagdagan sa -fmerge-constant ito
Isinasaalang-alang eg kahit na pare-pareho ang nasimulang mga array o nasimulan ang mga pare-parehong variable na may
integral o floating-point na mga uri. Ang mga wika tulad ng C o C++ ay nangangailangan ng bawat variable,
kabilang ang maraming pagkakataon ng parehong variable sa mga recursive na tawag, upang magkaroon ng kakaiba
mga lokasyon, kaya ang paggamit sa opsyong ito ay nagreresulta sa hindi sumusunod na gawi.

-fmodulo-sched
Magsagawa kaagad ng swing modulo scheduling bago ang unang pass sa pag-iskedyul. Ito
tinitingnan ng pass ang pinakaloob na mga loop at muling inaayos ang kanilang mga tagubilin sa pamamagitan ng pag-overlay ng iba't ibang
pag-ulit

-fmodulo-sched-allow-regmoves
Magsagawa ng mas agresibong pag-iskedyul ng modulo na nakabatay sa SMS na may pinapayagang mga paglipat ng rehistro. Sa pamamagitan ng
pagtatakda ng flag na ito ay tinanggal ang ilang mga anti-dependences na gilid, na nagpapalitaw sa
henerasyon ng mga reg-move batay sa pagsusuri sa saklaw ng buhay. Ang pagpipiliang ito ay epektibo
kasama lamang -fmodulo-sched pinagana.

-fno-branch-count-reg
Huwag gumamit ng mga tagubiling "pagbawas at sangay" sa isang rehistro ng bilang, ngunit sa halip
bumuo ng isang pagkakasunod-sunod ng mga tagubilin na nagpapababa ng isang rehistro, ihambing ito laban
zero, pagkatapos ay sangay batay sa resulta. Ang pagpipiliang ito ay makabuluhan lamang sa
mga arkitektura na sumusuporta sa mga naturang tagubilin, na kinabibilangan ng x86, PowerPC, IA-64 at
S/390.

Pinagana bilang default sa -O1 at mas mataas.

Ang default ay -fbranch-count-reg.

-fno-function-cse
Huwag maglagay ng mga function address sa mga rehistro; gawin ang bawat panuto na tumatawag sa a
ang pare-parehong pag-andar ay naglalaman ng tahasang address ng function.

Ang pagpipiliang ito ay nagreresulta sa hindi gaanong mahusay na code, ngunit ilang kakaibang mga hack na nagbabago sa
Ang output ng assembler ay maaaring malito ng mga pag-optimize na ginawa kapag ang pagpipiliang ito ay
hindi ginagamit.

Ang default ay -ffunction-cse

-fno-zero-initialized-sa-bss
Kung sinusuportahan ng target ang isang seksyon ng BSS, ang GCC bilang default ay naglalagay ng mga variable na
nasimulan sa zero sa BSS. Makakatipid ito ng espasyo sa resultang code.

Ino-off ng opsyong ito ang gawi na ito dahil tahasang umaasa ang ilang program sa mga variable
pagpunta sa seksyon ng data---hal, upang mahanap ng resultang executable ang
simula ng seksyong iyon at/o gumawa ng mga pagpapalagay batay doon.

Ang default ay -fzero-initialized-sa-bss.

-fthread-jumps
Magsagawa ng mga pag-optimize na tumitingin upang makita kung ang isang tumalon ay sumasanga sa isang lokasyon kung saan ang isa pa
Ang paghahambing na isinama ng una ay matatagpuan. Kung gayon, ang unang sangay ay na-redirect sa
alinman sa patutunguhan ng pangalawang sangay o isang puntong kasunod kaagad nito,
depende sa kung ang kundisyon ay kilala na totoo o mali.

Pinagana sa mga antas -O2, -O3, -Os.

-fsplit-wide-types
Kapag gumagamit ng isang uri na sumasakop sa maramihang mga rehistro, tulad ng "mahaba ang" sa isang 32-bit
system, hatiin ang mga rehistro at ilaan ang mga ito nang nakapag-iisa. Ito ay normal
bumubuo ng mas mahusay na code para sa mga uri na iyon, ngunit maaaring gawing mas mahirap ang pag-debug.

Pinagana sa mga antas -O, -O2, -O3, -Os.

-fcse-follow-jumps
Sa karaniwang subexpression elimination (CSE), i-scan ang mga tagubilin sa pagtalon kapag ang
ang target ng pagtalon ay hindi naabot ng anumang iba pang landas. Halimbawa, kapag nakatagpo ang CSE
isang "if" na pahayag na may "iba" na sugnay, ang CSE ay sumusunod sa pagtalon kapag ang kundisyon
nasubok ay mali.

Pinagana sa mga antas -O2, -O3, -Os.

-fcse-skip-block
Ito ay katulad sa -fcse-follow-jumps, ngunit nagiging sanhi ng CSE upang sundin ang mga jumps na
may kondisyong laktawan ang mga bloke. Kapag nakatagpo ang CSE ng simpleng "kung" na pahayag na may hindi
ibang sugnay, -fcse-skip-block nagiging sanhi ng CSE na sundin ang pagtalon sa katawan ng
"kung".

Pinagana sa mga antas -O2, -O3, -Os.

-frerun-cse-after-loop
Patakbuhin muli ang karaniwang pag-aalis ng subexpression pagkatapos maisagawa ang mga pag-optimize ng loop.

Pinagana sa mga antas -O2, -O3, -Os.

-fgcse
Magsagawa ng pandaigdigang karaniwang subexpression elimination pass. Ang pass na ito ay gumaganap din
pandaigdigang pare-pareho at pagpapalaganap ng kopya.

tandaan: Kapag nag-compile ng isang program gamit ang computed gotos, isang GCC extension, maaari mong makuha
mas mahusay na pagganap ng run-time kung hindi mo pinagana ang pandaigdigang karaniwang pag-aalis ng subexpression
dumaan sa pagdaragdag -fno-gcse sa command line.

Pinagana sa mga antas -O2, -O3, -Os.

-fgcse-lm
Kailan -fgcse-lm ay pinagana, ang pandaigdigang karaniwang pag-aalis ng subexpression ay sumusubok na lumipat
load na pinapatay lamang ng mga tindahan sa kanilang mga sarili. Pinapayagan nito ang isang loop na naglalaman ng a
load/store sequence na dapat baguhin sa isang load sa labas ng loop, at isang kopya/store sa loob
ang loop.

Pinagana bilang default kapag -fgcse Ay pinagana.

-fgcse-sm
Kailan -fgcse-sm ay pinagana, ang isang store motion pass ay pinapatakbo pagkatapos ng global common
pag-aalis ng subexpression. Sinusubukan ng pass na ito na ilipat ang mga tindahan sa labas ng mga loop. Kapag ginamit
kasabay ng -fgcse-lm, maaaring baguhin ang mga loop na naglalaman ng load/store sequence
sa isang load bago ang loop at isang tindahan pagkatapos ng loop.

Hindi pinagana sa anumang antas ng pag-optimize.

-fgcse-las
Kailan -fgcse-las ay pinagana, ang pandaigdigang common subexpression elimination pass
inaalis ang mga kalabisan na load na nanggagaling pagkatapos ng mga tindahan sa parehong lokasyon ng memorya (parehong
partial at full redundancies).

Hindi pinagana sa anumang antas ng pag-optimize.

-fgcse-pagkatapos-reload
Kailan -fgcse-pagkatapos-reload ay pinagana, ang isang redundant load elimination pass ay isinasagawa
pagkatapos i-reload. Ang layunin ng pass na ito ay linisin ang labis na pagtapon.

-faggressive-loop-optimizations
Sinasabi ng opsyong ito sa loop optimizer na gumamit ng mga hadlang sa wika upang makakuha ng mga hangganan
ang bilang ng mga pag-ulit ng isang loop. Ipinapalagay nito na ang loop code ay hindi nag-invoke
hindi natukoy na pag-uugali sa pamamagitan ng halimbawa na nagiging sanhi ng signed integer overflows o out-of-bound
pag-access ng array. Ang mga hangganan para sa bilang ng mga pag-ulit ng isang loop ay ginagamit upang gabayan
loop unrolling at pagbabalat at loop exit test optimizations. Ang pagpipiliang ito ay pinagana
bilang default.

-funsafe-loop-optimizations
Ang pagpipiliang ito ay nagsasabi sa loop optimizer na ipagpalagay na ang mga indeks ng loop ay hindi umaapaw, at
na ang mga loop na may nontrivial exit condition ay hindi infinite. Ito ay nagbibigay-daan sa isang mas malawak
hanay ng mga loop optimization kahit na ang loop optimizer mismo ay hindi maaaring patunayan na ang mga ito
ang mga pagpapalagay ay wasto. Kung gagamit ka -Wunsafe-loop-optimizations, binabalaan ka ng compiler
kung nakahanap ito ng ganitong uri ng loop.

-fcrossjumping
Magsagawa ng cross-jumping transformation. Pinagsasama ng pagbabagong ito ang katumbas na code at
nagse-save ng laki ng code. Ang resultang code ay maaaring o hindi maaaring gumanap nang mas mahusay kaysa sa walang cross-
tumatalon.

Pinagana sa mga antas -O2, -O3, -Os.

-fauto-inc-dec
Pagsamahin ang mga pagtaas o pagbaba ng mga address sa mga access sa memorya. Ang pass na ito ay
palaging nilaktawan ang mga arkitektura na walang mga tagubilin upang suportahan ito.
Pinagana bilang default sa -O at mas mataas sa mga arkitektura na sumusuporta dito.

-fdce
Magsagawa ng dead code elimination (DCE) sa RTL. Pinagana bilang default sa -O at mas mataas.

-fdse
Magsagawa ng dead store elimination (DSE) sa RTL. Pinagana bilang default sa -O at mas mataas.

-fif-conversion
Subukang baguhin ang mga conditional jumps sa mga katumbas na walang sangay. Kabilang dito ang
paggamit ng mga conditional moves, min, max, set flags at abs instructions, at ilang trick
magagawa ng karaniwang arithmetics. Ang paggamit ng conditional execution sa mga chip kung nasaan ito
ang magagamit ay kinokontrol ng -fif-conversion2.

Pinagana sa mga antas -O, -O2, -O3, -Os.

-fif-conversion2
Gumamit ng conditional execution (kung saan available) para baguhin ang conditional jumps
mga katumbas na walang sangay.

Pinagana sa mga antas -O, -O2, -O3, -Os.

-fdeclone-ctor-dtor
Ang C++ ABI ay nangangailangan ng maraming entry point para sa mga constructor at destructor: isa para sa a
base subobject, isa para sa isang kumpletong bagay, at isa para sa isang virtual destructor na tumatawag
tanggalin ng operator pagkatapos. Para sa isang hierarchy na may mga virtual na base, ang base at kumpleto
Ang mga variant ay mga clone, na nangangahulugang dalawang kopya ng function. Sa pagpipiliang ito, ang
base at kumpletong mga variant ay binago upang maging thunks na tinatawag na isang karaniwang pagpapatupad.

Pinagana ng -Os.

-fdelete-null-pointer-checks
Ipagpalagay na ang mga programa ay hindi maaaring ligtas na i-dereference ang mga null pointer, at walang code o data
ang elemento ay naninirahan doon. Ito ay nagbibigay-daan sa mga simpleng patuloy na pag-optimize ng natitiklop
mga antas ng pag-optimize. Bilang karagdagan, ginagamit ng ibang mga optimization pass sa GCC ang flag na ito upang
kontrolin ang mga pandaigdigang pagsusuri sa daloy ng data na nag-aalis ng mga walang kwentang pagsusuri para sa mga null pointer;
ipinapalagay ng mga ito na kung ang isang pointer ay nasuri pagkatapos na ito ay na-dereference, ito
hindi maaaring null.

Gayunpaman, tandaan na sa ilang mga kapaligiran ang pagpapalagay na ito ay hindi totoo. Gamitin
-fno-delete-null-pointer-checks upang huwag paganahin ang pag-optimize na ito para sa mga program na umaasa
sa ugali na iyon.

Ang ilang mga target, lalo na ang mga naka-embed, ay hindi pinagana ang opsyong ito sa lahat ng antas. Kung hindi
ito ay pinagana sa lahat ng antas: -O0, -O1, -O2, -O3, -Os. Mga pass na gumagamit ng impormasyon
ay pinagana nang nakapag-iisa sa iba't ibang antas ng pag-optimize.

-fdevirtualize
Subukang i-convert ang mga tawag sa mga virtual na function upang idirekta ang mga tawag. Ginagawa ito pareho
sa loob ng isang pamamaraan at interprocedurally bilang bahagi ng hindi direktang inlining
(-findirect-inlining) at interprocedural constant propagation (-fipa-cp). Naka-enable sa
antas -O2, -O3, -Os.

-fdevirtualize-speculatively
Subukang i-convert ang mga tawag sa virtual function sa speculative na direktang tawag. Batay sa
ang pagsusuri ng uri ng graph ng mana, matukoy para sa isang naibigay na tawag ang hanay ng
malamang na mga target. Kung ang set ay maliit, mas mabuti na may sukat na 1, palitan ang tawag sa a
kondisyonal na pagpapasya sa pagitan ng direkta at hindi direktang mga tawag. Pinagana ang mga speculative na tawag
higit pang mga pag-optimize, tulad ng inlining. Kapag sila ay tila inutil pagkatapos ng karagdagang
optimization, sila ay na-convert pabalik sa orihinal na anyo.

-fdevirtualize-at-ltrans
Mag-stream ng karagdagang impormasyon na kailangan para sa agresibong devirtualization kapag pinapatakbo ang link-
time optimizer sa local transformation mode. Ang pagpipiliang ito ay nagbibigay-daan sa higit pa
devirtualization ngunit makabuluhang pinapataas ang laki ng na-stream na data. Para dito
dahilan kung bakit ito ay hindi pinagana bilang default.

-fexpensive-optimizations
Magsagawa ng ilang maliliit na pag-optimize na medyo mahal.

Pinagana sa mga antas -O2, -O3, -Os.

-libre
Subukang tanggalin ang mga paulit-ulit na tagubilin sa extension. Ito ay lalong nakakatulong para sa
ang x86-64 na arkitektura, na nangangahulugang zero-extend sa 64-bit na mga rehistro pagkatapos
pagsulat sa kanilang mas mababang 32-bit na kalahati.

Naka-enable para sa Alpha, AArch64 at x86 sa mga antas -O2, -O3, -Os.

-fno-lifetime-dse
Sa C++ ang halaga ng isang bagay ay apektado lamang ng mga pagbabago sa loob ng buhay nito: kailan
magsisimula ang constructor, ang bagay ay may hindi tiyak na halaga, at anumang pagbabago sa panahon
ang buhay ng bagay ay patay kapag ang bagay ay nawasak. Karaniwang patay na tindahan
ang pag-aalis ay sasamantalahin ito; kung ang iyong code ay umaasa sa halaga ng
imbakan ng bagay na nagpapatuloy na lampas sa buhay ng bagay, maaari mong gamitin ang flag na ito upang
huwag paganahin ang pag-optimize na ito.

-flive-range-shrinkage
Subukang bawasan ang presyon ng rehistro sa pamamagitan ng pag-urong ng live range. Ito ay
kapaki-pakinabang para sa mga mabilis na processor na may maliit o katamtamang laki na mga set ng rehistro.

-fira-algorithm=algorithm
Gamitin ang tinukoy na algorithm ng pangkulay para sa pinagsama-samang tagapaglaan ng rehistro. Ang
algorithm maaaring maging argumento karapatang mauna, na tumutukoy sa priority coloring ni Chow, o CB,
na tumutukoy sa pangkulay ng Chaitin-Briggs. Ang pangkulay ng Chaitin-Briggs ay hindi ipinatupad
para sa lahat ng mga arkitektura, ngunit para sa mga target na sumusuporta dito, ito ang default
dahil ito ay bumubuo ng mas mahusay na code.

-fira-rehiyon=rehiyon
Gumamit ng mga tinukoy na rehiyon para sa pinagsama-samang tagapaglaan ng rehistro. Ang rehiyon argumento
dapat isa sa mga sumusunod:

lahat Gamitin ang lahat ng mga loop bilang rehistro ng mga rehiyon ng paglalaan. Maaari itong magbigay ng pinakamahusay na mga resulta para sa
mga makina na may maliit at/o hindi regular na set ng rehistro.

magkakahalo
Gamitin ang lahat ng mga loop maliban sa mga loop na may maliit na presyon ng rehistro bilang mga rehiyon. Ito
ang value ay karaniwang nagbibigay ng pinakamahusay na mga resulta sa karamihan ng mga kaso at para sa karamihan ng mga arkitektura, at
ay pinagana bilang default kapag nag-compile gamit ang optimization para sa bilis (-O, -O2, ...).

isa Gamitin ang lahat ng function bilang isang rehiyon. Karaniwang nagreresulta ito sa pinakamaliit na code
laki, at pinagana bilang default para sa -Os or -O0.

-fira-hoist-pressure
Gumamit ng IRA upang suriin ang presyon ng rehistro sa code hoisting pass para sa mga desisyon na magtaas
mga ekspresyon. Karaniwang nagreresulta ang opsyong ito sa mas maliit na code, ngunit maaari nitong pabagalin ang
bumaba ang compiler.

Ang pagpipiliang ito ay pinagana sa antas -Os para sa lahat ng mga target.

-fira-loop-presyon
Gumamit ng IRA upang suriin ang presyon ng pagpaparehistro sa mga loop para sa mga desisyon na ilipat ang mga invariant ng loop.
Ang pagpipiliang ito ay karaniwang nagreresulta sa pagbuo ng mas mabilis at mas maliit na code sa mga machine na may
malalaking register file (>= 32 registers), ngunit maaari nitong pabagalin ang compiler pababa.

Ang pagpipiliang ito ay pinagana sa antas -O3 para sa ilang mga target.

-fno-ira-share-save-slots
I-disable ang pagbabahagi ng mga stack slot na ginagamit para sa pag-save ng mga hard register na ginagamit ng tawag na nabubuhay
isang tawag. Ang bawat hard register ay nakakakuha ng hiwalay na stack slot, at bilang resulta function stack
mas malaki ang mga frame.

-fno-ira-share-spill-slots
Huwag paganahin ang pagbabahagi ng mga stack slot na inilaan para sa mga pseudo-register. Ang bawat pseudo-register
na hindi nakakakuha ng hard register ay nakakakuha ng hiwalay na stack slot, at bilang resulta function
mas malaki ang mga stack frame.

-fira-verbose=n
Kontrolin ang verbosity ng dump file para sa integrated register allocator. Ang
ang default na halaga ay 5. Kung ang halaga n ay mas malaki o katumbas ng 10, ang dump output ay ipinadala
sa stderr gamit ang parehong format bilang n minus 10.

-flra-remat
I-enable ang CFG-sensitive rematerialization sa LRA. Sa halip na i-load ang mga halaga ng natapon
pseudos, sinusubukan ng LRA na i-rematerialize (muling kalkulahin) ang mga halaga kung ito ay kumikita.

Pinagana sa mga antas -O2, -O3, -Os.

-fdelayed-branch
Kung sinusuportahan para sa target na makina, subukang muling ayusin ang mga tagubilin upang pagsamantalahan
magagamit ang mga puwang ng pagtuturo pagkatapos ng pagkaantala ng mga tagubilin ng sangay.

Pinagana sa mga antas -O, -O2, -O3, -Os.

-fschedule-insns
Kung sinusuportahan para sa target na makina, subukang muling ayusin ang mga tagubilin upang alisin
mga execution stall dahil sa hindi available na data. Nakakatulong ito sa mga makina na
magkaroon ng mabagal na floating point o mga tagubilin sa pag-load ng memory sa pamamagitan ng pagpapahintulot sa iba pang mga tagubilin na
ibibigay hanggang sa kailanganin ang resulta ng load o floating-point instruction.

Pinagana sa mga antas -O2, -O3.

-fschedule-insns2
Kapareho ng -fschedule-insns, ngunit humihiling ng karagdagang pass ng pag-iiskedyul ng pagtuturo
matapos magawa ang paglalaan ng rehistro. Ito ay lalong kapaki-pakinabang sa mga makina na may a
medyo maliit na bilang ng mga rehistro at kung saan ang mga tagubilin sa pagkarga ng memorya ay tumatagal ng higit sa
isang cycle.

Pinagana sa mga antas -O2, -O3, -Os.

-fno-sched-interblock
Huwag mag-iskedyul ng mga tagubilin sa mga pangunahing bloke. Ito ay karaniwang pinagana bilang default
kapag nag-iskedyul bago magrehistro ng alokasyon, ibig sabihin, sa -fschedule-insns o sa -O2 or
Mas mataas.

-fno-sched-spec
Huwag payagan ang speculative motion ng mga tagubilin na hindi nag-load. Ito ay karaniwang pinagana ng
default kapag nag-iiskedyul bago magrehistro ng alokasyon, ibig sabihin, sa -fschedule-insns o sa
-O2 o mas mataas.

-fsched-presyon
Paganahin ang pag-iskedyul ng insn na sensitibo sa presyon ng rehistro bago irehistro ang paglalaan. Ito
makatuwiran lamang kapag ang pag-iskedyul bago pinagana ang paglalaan ng rehistro, ibig sabihin, sa
-fschedule-insns o sa -O2 o mas mataas. Maaaring mapabuti ng paggamit ng opsyong ito ang nabuo
code at bawasan ang laki nito sa pamamagitan ng pagpigil sa pagtaas ng presyon ng rehistro sa itaas ng numero
ng magagamit na mga hard register at kasunod na mga spill sa paglalaan ng rehistro.

-fsched-spec-load
Payagan ang speculative motion ng ilang mga tagubilin sa pagkarga. Makatuwiran lamang ito kapag
pag-iskedyul bago magrehistro ng alokasyon, ibig sabihin, sa -fschedule-insns o sa -O2 o mas mataas.

-fsched-spec-load-delikado
Payagan ang speculative motion ng higit pang mga tagubilin sa pagkarga. Makatuwiran lamang ito kapag
pag-iskedyul bago magrehistro ng alokasyon, ibig sabihin, sa -fschedule-insns o sa -O2 o mas mataas.

-fsched-stalled-insns
-fsched-stalled-insns=n
Tukuyin kung gaano karaming mga insn (kung mayroon man) ang maaaring ilipat nang maaga mula sa pila ng mga natigil
insns sa handa na listahan sa panahon ng pangalawang pag-iskedyul ng pass. -fno-sched-stalled-insns
nangangahulugan na walang insn na naililipat nang maaga, -fsched-stalled-insns=0 ibig sabihin wala
limitahan kung gaano karaming mga nakapila na insn ang maaaring ilipat nang maaga. -fsched-stalled-insns
walang halaga ay katumbas ng -fsched-stalled-insns=1.

-fsched-stalled-insns-dep
-fsched-stalled-insns-dep=n
Tukuyin kung ilang grupo ng insn (cycle) ang sinusuri para sa isang dependency sa isang nakatigil na insn
iyon ay isang kandidato para sa maagang pag-alis mula sa pila ng mga natigil na insn. Ito ay
isang epekto lamang sa panahon ng ikalawang pagpasa ng pag-iskedyul, at kung lamang -fsched-stalled-insns is
ginagamit. -fno-sched-stalled-insns-dep ay katumbas ng -fsched-stalled-insns-dep=0.
-fsched-stalled-insns-dep walang halaga ay katumbas ng
-fsched-stalled-insns-dep=1.

-fsched2-use-superblocks
Kapag nag-iiskedyul pagkatapos ng paglalaan ng rehistro, gamitin ang pag-iskedyul ng superblock. Ito ay nagpapahintulot
paggalaw sa mga pangunahing hangganan ng bloke, na nagreresulta sa mas mabilis na mga iskedyul. Ang pagpipiliang ito ay
pang-eksperimento, dahil hindi lahat ng mga paglalarawan ng makina na ginagamit ng GCC ay nagmodelo ng CPU nang sapat na malapit
upang maiwasan ang mga hindi mapagkakatiwalaang resulta mula sa algorithm.

Makatuwiran lamang ito kapag nag-iiskedyul pagkatapos ng paglalaan ng rehistro, ibig sabihin, sa
-fschedule-insns2 o sa -O2 o mas mataas.

-fsched-group-heuristic
Paganahin ang pangkat na heuristic sa scheduler. Ang heuristic na ito ay pinapaboran ang pagtuturo
na kabilang sa isang pangkat ng iskedyul. Ito ay pinagana bilang default kapag ang pag-iskedyul ay
pinagana, ibig sabihin, may -fschedule-insns or -fschedule-insns2 o sa -O2 o mas mataas.

-fsched-critical-path-heuristic
I-enable ang critical-path heuristic sa scheduler. Ang heuristic na ito ay pinapaboran
mga tagubilin sa kritikal na landas. Ito ay pinagana bilang default kapag ang pag-iskedyul ay
pinagana, ibig sabihin, may -fschedule-insns or -fschedule-insns2 o sa -O2 o mas mataas.

-fsched-spec-insn-heuristic
I-enable ang speculative instruction heuristic sa scheduler. Ang heuristic na ito ay pinapaboran
speculative na mga tagubilin na may higit na kahinaan sa dependency. Ito ay pinagana bilang default
kapag pinagana ang pag-iskedyul, ibig sabihin, may -fschedule-insns or -fschedule-insns2 o sa -O2
o mas mataas.

-fsched-rank-heuristic
I-enable ang ranggo na heuristic sa scheduler. Ang heuristic na ito ay pinapaboran ang pagtuturo
kabilang sa isang pangunahing bloke na may mas malaking sukat o dalas. Ito ay pinagana bilang default
kapag pinagana ang pag-iskedyul, ibig sabihin, may -fschedule-insns or -fschedule-insns2 o sa -O2
o mas mataas.

-fsched-last-insn-heuristic
I-enable ang heuristic na huling tagubilin sa scheduler. Ang heuristic na ito ay pinapaboran ang
pagtuturo na hindi gaanong nakadepende sa huling nakaiskedyul na pagtuturo. Ito ay pinagana
bilang default kapag pinagana ang pag-iskedyul, ibig sabihin, sa -fschedule-insns or -fschedule-insns2
o sa -O2 o mas mataas.

-fsched-dep-count-heuristic
Paganahin ang dependent-count heuristic sa scheduler. Ang heuristic na ito ay pinapaboran ang
pagtuturo na may higit pang mga tagubilin depende dito. Ito ay pinagana bilang default
kapag pinagana ang pag-iskedyul, ibig sabihin, may -fschedule-insns or -fschedule-insns2 o sa -O2
o mas mataas.

-freschedule-modulo-scheduled-loops
Isinasagawa ang modulo scheduling bago ang tradisyonal na scheduling. Kung ang isang loop ay modulo
nakaiskedyul, maaaring magbago ng iskedyul ang mga pass sa pag-iskedyul sa ibang pagkakataon. Gamitin ang opsyong ito upang
kontrolin ang pag-uugali na iyon.

-fselective-scheduling
Mag-iskedyul ng mga tagubilin gamit ang selective scheduling algorithm. Tumatakbo ang piling pag-iiskedyul
sa halip na ang unang scheduler pass.

-fselective-scheduling2
Mag-iskedyul ng mga tagubilin gamit ang selective scheduling algorithm. Tumatakbo ang piling pag-iiskedyul
sa halip na ang pangalawang scheduler pass.

-fsel-sched-pipelining
Paganahin ang software pipelining ng pinakaloob na mga loop sa panahon ng piling pag-iiskedyul. Ito
walang epekto ang opsyon maliban kung isa sa -fselective-scheduling or -fselective-scheduling2
naka-on.

-fsel-sched-pipelining-outer-loops
Kapag ang pipelining loops sa panahon ng selective scheduling, pipeline outer loops din. Ito
walang epekto ang opsyon maliban kung -fsel-sched-pipelining naka-on.

-fsemantic-interposition
Ang ilang mga object format, tulad ng ELF, ay nagpapahintulot sa interposing ng mga simbolo ng dynamic na linker.
Nangangahulugan ito na para sa mga simbolo na na-export mula sa DSO, hindi maaaring gumanap ang compiler
interprocedural propagation, inlining at iba pang mga optimization bilang inaasahan na ang
function o variable na pinag-uusapan ay maaaring magbago. Habang ang tampok na ito ay kapaki-pakinabang, para sa
halimbawa, upang muling isulat ang mga function ng paglalaan ng memorya sa pamamagitan ng pagpapatupad ng pag-debug, ito ay
mahal sa mga tuntunin ng kalidad ng code. Sa -fno-semantic-interposition ang tagatala
Ipinapalagay na kung ang interposisyon ang mangyayari para sa mga function ay magkakaroon ng overwriting function
tiyak ang parehong semantika (at mga side effect). Katulad din kung interposisyon ang mangyayari
para sa mga variable, ang constructor ng variable ay magiging pareho. Ang watawat ay walang
epekto para sa mga function na tahasang ipinahayag inline (kung saan hindi ito pinapayagan para sa
interposisyon upang baguhin ang semantika) at para sa mga simbolo na tahasang ipinahayag na mahina.

-fshrink-wrap
Maglabas lamang ng mga prologue ng function bago ang mga bahagi ng function na nangangailangan nito, sa halip na sa
tuktok ng function. Ang flag na ito ay pinagana bilang default sa -O at mas mataas.

-fcaller-nagse-save
Paganahin ang paglalaan ng mga halaga sa mga rehistro na na-clobber ng mga function na tawag, ni
nagpapalabas ng mga karagdagang tagubilin upang i-save at ibalik ang mga rehistro sa paligid ng mga naturang tawag. ganyan
Ang paglalaan ay ginagawa lamang kapag tila nagreresulta ito sa mas mahusay na code.

Ang opsyong ito ay palaging pinapagana bilang default sa ilang partikular na makina, kadalasan ang mayroon
walang call-preserved registers na gagamitin sa halip.

Pinagana sa mga antas -O2, -O3, -Os.

-fcombine-stack-adjustments
Sinusubaybayan ang mga pagsasaayos ng stack (mga pagtulak at pag-pop) at pag-stack ng mga sanggunian sa memorya at pagkatapos ay sinusubukan
upang makahanap ng mga paraan upang pagsamahin ang mga ito.

Pinagana bilang default sa -O1 at mas mataas.

-fipa-ra
Gumamit ng caller save registers para sa alokasyon kung ang mga register na iyon ay hindi ginagamit ng sinumang tinatawagan
function. Sa kasong iyon, hindi kinakailangan na i-save at ibalik ang mga ito sa paligid ng mga tawag.
Ito ay posible lamang kung ang mga tinatawag na function ay bahagi ng parehong compilation unit bilang kasalukuyang
function at sila ay pinagsama-sama bago ito.

Pinagana sa mga antas -O2, -O3, -Os.

-fconserve-stack
Subukang bawasan ang paggamit ng stack. Sinusubukan ng compiler na gumamit ng mas kaunting espasyo ng stack, kahit na
kung iyon ay nagpapabagal sa programa. Ang pagpipiliang ito ay nagpapahiwatig ng pagtatakda ng malaking-stack-frame
parameter sa 100 at ang malaking-stack-frame-growth parameter sa 400.

-ftree-reassoc
Magsagawa ng reassociation sa mga puno. Ang flag na ito ay pinagana bilang default sa -O at mas mataas.

-free-pre
Magsagawa ng partial redundancy elimination (PRE) sa mga puno. Ang flag na ito ay pinagana ng
default sa -O2 at -O3.

-ftree-partial-pre
Gawing mas agresibo ang partial redundancy elimination (PRE). Ang flag na ito ay pinagana ng
default sa -O3.

-ftree-forwprop
Magsagawa ng forward propagation sa mga puno. Ang flag na ito ay pinagana bilang default sa -O at
Mas mataas.

-free-fre
Magsagawa ng full redundancy elimination (FRE) sa mga puno. Ang pagkakaiba sa pagitan ng FRE at
Ang PRE ay isinasaalang-alang lamang ng FRE ang mga expression na kinukuwenta sa lahat ng mga landas na humahantong sa
ang redundant computation. Ang pagsusuri na ito ay mas mabilis kaysa sa PRE, bagama't mas kaunti ang inilalantad nito
mga redundancies. Ang flag na ito ay pinagana bilang default sa -O at mas mataas.

-ftree-phiprop
Magsagawa ng pag-angat ng mga kargada mula sa mga conditional pointer sa mga puno. Ang pass na ito ay pinagana ng
default sa -O at mas mataas.

-fhoist-katabing-load
Ispekulatibong magtaas ng mga load mula sa magkabilang sangay ng if-then-else kung ang mga load ay mula sa
mga katabing lokasyon sa parehong istraktura at ang target na arkitektura ay may kondisyon
ilipat ang pagtuturo. Ang flag na ito ay pinagana bilang default sa -O2 at mas mataas.

-free-copy-prop
Magsagawa ng pagpapalaganap ng kopya sa mga puno. Ang pass na ito ay nag-aalis ng mga hindi kinakailangang operasyon ng pagkopya.
Ang flag na ito ay pinagana bilang default sa -O at mas mataas.

-fipa-pure-const
Tuklasin kung aling mga function ang dalisay o pare-pareho. Pinagana bilang default sa -O at mas mataas.

-fipa-reference
Tuklasin kung aling mga static na variable ang hindi nakatakas sa compilation unit. Pinagana ng
default sa -O at mas mataas.

-fipa-pta
Magsagawa ng interprocedural pointer analysis at interprocedural modification at
pagsusuri ng sanggunian. Ang pagpipiliang ito ay maaaring magdulot ng labis na memorya at paggamit ng oras ng pag-compile
malalaking compilation unit. Hindi ito pinagana bilang default sa anumang antas ng pag-optimize.

-fipa-profile
Magsagawa ng interprocedural profile propagation. Ang mga function na tinatawag lamang mula sa malamig
ang mga function ay minarkahan bilang malamig. Ang mga function din ay naisakatuparan nang isang beses (tulad ng "malamig",
"noreturn", static constructors o destructors) ay natukoy. Malamig na pag-andar at
Ang mga loop na mas kaunting bahagi ng mga function na naisagawa nang isang beses ay na-optimize para sa laki. Pinagana ng
default sa -O at mas mataas.

-fipa-cp
Magsagawa ng interprocedural constant propagation. Sinusuri ng optimization na ito ang program
upang matukoy kung ang mga value na ipinasa sa mga function ay mga constant at pagkatapos ay nag-optimize
naaayon. Ang pag-optimize na ito ay maaaring makabuluhang tumaas ang pagganap kung ang
Ang application ay may mga constant na naipasa sa mga function. Ang flag na ito ay pinagana bilang default sa
-O2, -Os at -O3.

-fipa-cp-clone
Magsagawa ng function cloning upang gawing mas malakas ang interprocedural constant propagation. Kailan
pinagana, ang interprocedural constant propagation ay gumaganap ng function cloning kapag
maaaring tawagin ang panlabas na nakikitang function na may pare-parehong mga argumento. Dahil ito
optimization ay maaaring lumikha ng maramihang mga kopya ng mga function, maaari itong makabuluhang tumaas
laki ng code (tingnan --param ipcp-unit-growth=halaga). Ang flag na ito ay pinagana bilang default sa
-O3.

-fipa-cp-alignment
Kapag pinagana, ang pag-optimize na ito ay nagpapalaganap ng pag-align ng mga parameter ng function upang suportahan
mas mahusay na vectorization at string operations.

Ang flag na ito ay pinagana bilang default sa -O2 at -Os. Ito ay nangangailangan na -fipa-cp Ay pinagana.

-fipa-icf
Magsagawa ng Identical Code Folding para sa mga function at read-only na mga variable. Ang
binabawasan ng pag-optimize ang laki ng code at maaaring makaistorbo sa mga unwind stack sa pamamagitan ng pagpapalit ng function
sa pamamagitan ng katumbas ng isa na may ibang pangalan. Ang pag-optimize ay gumagana nang mas epektibo sa
pinagana ang pag-optimize ng oras ng link.

Gayunpaman ang pag-uugali ay katulad ng Gold Linker ICF optimization, gumagana ang GCC ICF
iba't ibang mga antas at sa gayon ang mga pag-optimize ay hindi pareho - may mga katumbas na iyon
ay matatagpuan lamang ng GCC at mga katumbas na matatagpuan lamang ng Gold.

Ang flag na ito ay pinagana bilang default sa -O2 at -Os.

-fisolate-erroneous-paths-dereference
Mag-detect ng mga path na nag-trigger ng mali o hindi natukoy na gawi dahil sa pag-derefer sa isang null
panturo. Ihiwalay ang mga landas na iyon mula sa pangunahing daloy ng kontrol at i-on ang pahayag gamit ang
mali o hindi natukoy na pag-uugali sa isang bitag. Ang flag na ito ay pinagana bilang default sa -O2
at mas mataas.

-fisolate-erroneous-paths-attribute
I-detect ang mga path na nagti-trigger ng mali o hindi natukoy na gawi dahil sa paggamit ng null value
sa paraang ipinagbabawal ng katangiang "returns_nonnull" o "nonnull". Ihiwalay ang mga landas na iyon
mula sa pangunahing daloy ng kontrol at i-on ang pahayag na may mali o hindi natukoy na pag-uugali
sa isang bitag. Kasalukuyang hindi ito pinagana, ngunit maaaring paganahin ng -O2 sa hinaharap.

-free-lababo
Magsagawa ng forward store motion sa mga puno. Ang flag na ito ay pinagana bilang default sa -O at
Mas mataas.

-ftree-bit-ccp
Magsagawa ng sparse conditional bit constant propagation sa mga puno at propagate pointer
impormasyon ng pagkakahanay. Ang pass na ito ay gumagana lamang sa mga lokal na scalar variable at ito ay
pinagana bilang default sa -O at mas mataas. Ito ay nangangailangan na -free-ccp Ay pinagana.

-free-ccp
Magsagawa ng sparse conditional constant propagation (CCP) sa mga puno. Itong pass lang
gumagana sa mga lokal na variable ng scalar at pinagana bilang default sa -O at mas mataas.

-fssa-phiopt
Magsagawa ng pagtutugma ng pattern sa mga SSA PHI node para ma-optimize ang conditional code. Ang pass na ito ay
pinagana bilang default sa -O at mas mataas.

-free-switch-conversion
Magsagawa ng conversion ng mga simpleng initialization sa isang switch sa initialization mula sa a
scalar array. Ang flag na ito ay pinagana bilang default sa -O2 at mas mataas.

-free-tail-merge
Maghanap ng magkaparehong pagkakasunud-sunod ng code. Kapag natagpuan, palitan ang isa ng isang pagtalon sa isa pa.
Ang optimization na ito ay kilala bilang tail merging o cross jumping. Ang flag na ito ay pinagana ng
default sa -O2 at mas mataas. Ang oras ng compilation sa pass na ito ay maaaring limitado gamit
max-tail-merge-comparisons parameter at max-tail-merge-iteration parameter

-ftree-dce
Magsagawa ng dead code elimination (DCE) sa mga puno. Ang flag na ito ay pinagana bilang default sa -O
at mas mataas.

-ftree-builtin-call-dce
Magsagawa ng conditional dead code elimination (DCE) para sa mga tawag sa mga built-in na function na
maaaring magtakda ng "errno" ngunit kung hindi man ay walang side-effect. Ang flag na ito ay pinagana bilang default
at -O2 at mas mataas kung -Os ay hindi rin tinukoy.

-ftree-dominator-opts
Magsagawa ng iba't ibang simpleng scalar cleanup (constant/copy propagation, redundancy
pag-aalis, pagpapalaganap ng saklaw at pagpapasimple ng ekspresyon) batay sa isang dominator
pagtawid ng puno. Nagsasagawa rin ito ng jump threading (upang bawasan ang mga pagtalon sa mga pagtalon). Ito
flag ay pinagana bilang default sa -O at mas mataas.

-ftree-dse
Magsagawa ng dead store elimination (DSE) sa mga puno. Ang isang patay na tindahan ay isang tindahan sa isang alaala
lokasyon na sa kalaunan ay na-overwrite ng isa pang tindahan nang walang anumang intervening load. Sa
sa kasong ito ang naunang tindahan ay maaaring tanggalin. Ang flag na ito ay pinagana bilang default sa -O at
Mas mataas.

-ftree-ch
Magsagawa ng pagkopya ng header ng loop sa mga puno. Ito ay kapaki-pakinabang dahil ito ay tumataas
pagiging epektibo ng mga pag-optimize ng paggalaw ng code. Nakakatipid din ito ng isang pagtalon. Ang watawat na ito ay
pinagana bilang default sa -O at mas mataas. Hindi ito pinagana para sa -Os, dahil kadalasan
pinapataas ang laki ng code.

-ftree-loop-optimize
Magsagawa ng mga loop optimization sa mga puno. Ang flag na ito ay pinagana bilang default sa -O at
Mas mataas.

-ftree-loop-linear
Magsagawa ng loop interchange transformations sa puno. Katulad ng -floop-interchange. Para magamit
ang pagbabagong ito ng code, kailangang i-configure ang GCC --may-isl upang paganahin ang
Imprastraktura ng pagbabagong-anyo ng graphite loop.

-floop-interchange
Magsagawa ng mga pagbabago sa pagpapalit ng loop sa mga loop. Pagpapalitan ng dalawang nested na mga loop
inililipat ang panloob at panlabas na mga loop. Halimbawa, binigyan ng loop tulad ng:

DO J = 1, M
DO I = 1, N
A(J, I) = A(J, I) * C
ENDDO
ENDDO

Binabago ng loop interchange ang loop na parang nakasulat:

DO I = 1, N
DO J = 1, M
A(J, I) = A(J, I) * C
ENDDO
ENDDO

na maaaring maging kapaki-pakinabang kapag ang "N" ay mas malaki kaysa sa mga cache, dahil sa Fortran, ang
Ang mga elemento ng isang array ay naka-imbak sa memorya ng magkadikit sa pamamagitan ng column, at ang orihinal
Ang loop ay umuulit sa mga row, na posibleng lumikha sa bawat pag-access ng cache miss. Ito
nalalapat ang pag-optimize sa lahat ng wikang sinusuportahan ng GCC at hindi limitado sa
Fortran. Upang magamit ang pagbabagong ito ng code, kailangang i-configure ang GCC --may-isl sa
paganahin ang imprastraktura ng pagbabagong-anyo ng Graphite loop.

-floop-strip-mine
Magsagawa ng mga pagbabago sa pagmimina ng loop strip sa mga loop. Hinahati ng strip mining ang isang loop sa
dalawang nested loops. Ang panlabas na loop ay may mga hakbang na katumbas ng laki ng strip at sa loob
loop ay may mga hakbang ng orihinal na loop sa loob ng isang strip. Maaaring baguhin ang haba ng strip
gamit ang loop-block-tile-size parameter. Halimbawa, binigyan ng loop tulad ng:

DO I = 1, N
A(I) = A(I) + C
ENDDO

Binabago ng loop strip mining ang loop na parang nakasulat:

DO II = 1, N, 51
DO I = II, min (II + 50, N)
A(I) = A(I) + C
ENDDO
ENDDO

Nalalapat ang pag-optimize na ito sa lahat ng wikang sinusuportahan ng GCC at hindi limitado sa
Fortran. Upang magamit ang pagbabagong ito ng code, kailangang i-configure ang GCC --may-isl sa
paganahin ang imprastraktura ng pagbabagong-anyo ng Graphite loop.

-floop-block
Magsagawa ng mga pagbabago sa pag-block ng loop sa mga loop. Ang pagharang sa mga mina ng strip sa bawat loop sa
loop nest upang ang memorya ng pag-access ng mga loop ng elemento ay magkasya sa loob ng mga cache. Ang
ang haba ng strip ay maaaring baguhin gamit ang loop-block-tile-size parameter. Halimbawa,
binigyan ng loop tulad ng:

DO I = 1, N
DO J = 1, M
A(J, I) = B(I) + C(J)
ENDDO
ENDDO

Binabago ng pag-block ng loop ang loop na parang nakasulat:

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

na maaaring maging kapaki-pakinabang kapag ang "M" ay mas malaki kaysa sa mga cache, dahil ang pinakaloob na loop
umuulit sa mas maliit na dami ng data na maaaring itago sa mga cache. Ito
nalalapat ang pag-optimize sa lahat ng wikang sinusuportahan ng GCC at hindi limitado sa
Fortran. Upang magamit ang pagbabagong ito ng code, kailangang i-configure ang GCC --may-isl sa
paganahin ang imprastraktura ng pagbabagong-anyo ng Graphite loop.

-fgraphite-pagkakakilanlan
Paganahin ang pagbabago ng pagkakakilanlan para sa graphite. Para sa bawat SCoP na nabuo namin ang
polyhedral na representasyon at ibahin ito pabalik sa gimple. Gamit -fgraphite-pagkakakilanlan
maaari nating suriin ang mga gastos o benepisyo ng GIMPLE -> GRAPHITE -> GIMPLE transformation.
Ang ilang kaunting pag-optimize ay ginagawa din ng code generator na ISL, tulad ng index
paghahati at patay na pag-aalis ng code sa mga loop.

-floop-nest-optimize
I-enable ang ISL based loop nest optimizer. Isa itong generic na loop nest optimizer based
sa mga algorithm ng pag-optimize ng Pluto. Kinakalkula nito ang istraktura ng loop na na-optimize para sa
data-locality at paralelismo. Ang pagpipiliang ito ay pang-eksperimento.

-floop-unroll-and-jam
I-enable ang unroll at jam para sa loop nest optimizer na nakabatay sa ISL. Ang unroll factor ay maaaring
binago gamit ang loop-unroll-jam-size parameter. Ang naka-unroll na dimensyon (nagbibilang
mula sa pinaka-inner one) ay maaaring baguhin gamit ang loop-unroll-jam-depth parameter
.

-floop-parallelize-lahat
Gamitin ang Graphite data dependence analysis upang matukoy ang mga loop na maaaring iparallelize.
Iparallelize ang lahat ng mga loop na maaaring masuri upang hindi maglaman ng mga loop na dala ng mga dependences
nang hindi sinusuri na ito ay kumikita upang iparallelize ang mga loop.

-fcheck-data-deps
Ihambing ang mga resulta ng ilang data dependence analyzer. Ang pagpipiliang ito ay ginagamit para sa
pag-debug ng mga data dependence analyzer.

-ftree-loop-if-convert
Subukang baguhin ang mga conditional jump sa pinakaloob na mga loop sa branch-less
katumbas. Ang layunin ay alisin ang control-flow mula sa pinakaloob na mga loop sa pagkakasunud-sunod
upang mapabuti ang kakayahan ng vectorization pass upang mahawakan ang mga loop na ito. Ito ay
pinagana bilang default kung pinagana ang vectorization.

-ftree-loop-if-convert-stores
Subukan din kung i-convert ang mga conditional jump na naglalaman ng memory writes. Ito
Ang pagbabagong-anyo ay maaaring hindi ligtas para sa mga multi-threaded na programa dahil ito ay nagbabago ng kondisyon
memory writes into unconditional memory writes. Halimbawa,

para sa (i = 0; i <N; i++)
kung (cond)
A[i] = expr;

ay binago sa

para sa (i = 0; i <N; i++)
A[i] = cond ? expr : A[i];

potensyal na paggawa ng mga karera ng data.

-free-loop-distribution
Magsagawa ng pamamahagi ng loop. Maaaring mapabuti ng flag na ito ang pagganap ng cache sa malalaking loop body
at payagan ang mga karagdagang pag-optimize ng loop, tulad ng parallelization o vectorization, na gawin
lugar. Halimbawa, ang loop

DO I = 1, N
A(I) = B(I) + C
D(I) = E(I) * F
ENDDO

ay binago sa

DO I = 1, N
A(I) = B(I) + C
ENDDO
DO I = 1, N
D(I) = E(I) * F
ENDDO

-ftree-loop-distribute-patterns
Magsagawa ng loop distribution ng mga pattern na maaaring mabuo ng code gamit ang mga tawag sa a
aklatan. Ang flag na ito ay pinagana bilang default sa -O3.

Ang pass na ito ay namamahagi ng mga initialization loop at bumubuo ng isang tawag sa memset zero.
Halimbawa, ang loop

DO I = 1, N
A(I) = 0
B(I) = A(I) + I
ENDDO

ay binago sa

DO I = 1, N
A(I) = 0
ENDDO
DO I = 1, N
B(I) = A(I) + I
ENDDO

at ang initialization loop ay binago sa isang tawag sa memset zero.

-ftree-loop-im
Magsagawa ng loop invariant motion sa mga puno. Ang pass na ito ay gumagalaw lamang ng mga invariant na mahirap
upang mahawakan sa antas ng RTL (mga function na tawag, mga operasyong lumalawak sa mga hindi mahalaga na pagkakasunud-sunod
ng inns). Sa -funswitch-loops nagpapagalaw din ito ng mga operand ng mga kundisyon na
invariant out of the loop, para magamit lang natin ang trivial invariantness analysis in
pag-unswitch ng loop. Kasama rin sa pass ang paggalaw ng tindahan.

-ftree-loop-ivcanon
Gumawa ng canonical counter para sa bilang ng mga pag-ulit sa mga loop kung saan tinutukoy
bilang ng mga pag-ulit ay nangangailangan ng kumplikadong pagsusuri. Mamaya optimizations pagkatapos ay maaaring
madaling matukoy ang numero. Kapaki-pakinabang lalo na may kaugnayan sa pag-unroll.

-fivopts
Magsagawa ng mga induction variable optimization (pagbabawas ng lakas, induction variable
merging at induction variable elimination) sa mga puno.

-ftree-parallelize-loops=n
Parallelize ang mga loop, ibig sabihin, hatiin ang kanilang pag-ulit na espasyo upang tumakbo sa n mga thread. Ito ay
posible lamang para sa mga loop na ang mga pag-ulit ay independiyente at maaaring arbitraryo
muling inayos. Ang pag-optimize ay kumikita lamang sa mga multiprocessor machine, para sa mga loop
na CPU-intensive, sa halip na pinigilan hal ng memory bandwidth. Ang pagpipiliang ito
nagpapahiwatig -pthread, at sa gayon ay sinusuportahan lamang sa mga target na may suporta para sa
-pthread.

-ftree-pta
Magsagawa ng function-local point-to analysis sa mga puno. Ang flag na ito ay pinagana bilang default
at -O at mas mataas.

-ftree-sra
Magsagawa ng scalar replacement ng aggregates. Pinapalitan ng pass na ito ang mga structure reference
na may mga scalar upang maiwasan ang pag-commit ng mga istruktura sa memorya nang masyadong maaga. Ang watawat na ito ay
pinagana bilang default sa -O at mas mataas.

-free-copyrename
Magsagawa ng pagpapalit ng pangalan ng kopya sa mga puno. Sinusubukan ng pass na ito na palitan ang pangalan ng mga pansamantalang compiler
iba pang mga variable sa mga lokasyon ng kopya, kadalasang nagreresulta sa mga variable na pangalan na higit pa
malapit na kahawig ng orihinal na mga variable. Ang flag na ito ay pinagana bilang default sa -O at
Mas mataas.

-ftree-coalesce-inlined-vars
Sabihin ang copyrename pass (tingnan -free-copyrename) upang subukang pagsamahin ang maliit na user-
tinukoy din ang mga variable, ngunit kung sila ay naka-inline mula sa iba pang mga function. Ito ay isang
mas limitadong anyo ng -ftree-coalesce-vars. Ito ay maaaring makapinsala sa impormasyon ng pag-debug ng mga naturang bagay
inlined na mga variable, ngunit pinapanatili nito ang mga variable ng inlined-in na function na bukod sa bawat isa
iba pa, nang sa gayon ay mas malamang na naglalaman ang mga ito ng inaasahang mga halaga sa isang pag-debug
session.

-ftree-coalesce-vars
Sabihin ang copyrename pass (tingnan -free-copyrename) upang subukang pagsamahin ang maliit na user-
tinukoy din ang mga variable, sa halip na mga pansamantalang compiler lamang. Ito ay maaaring malubhang limitahan
ang kakayahang mag-debug ng isang na-optimize na program na pinagsama-sama -fno-var-tracking-assignments.
Sa negated form, pinipigilan ng flag na ito ang pagsasama-sama ng SSA ng mga variable ng user, kabilang ang
mga inline. Ang pagpipiliang ito ay pinagana bilang default.

-ftree-ter
Magsagawa ng pansamantalang pagpapalit ng ekspresyon sa panahon ng SSA->normal na yugto. Walang asawa
use/single def temporaries ay pinapalitan sa kanilang lokasyon ng paggamit sa kanilang pagtukoy
pagpapahayag. Nagreresulta ito sa non-GIMPLE code, ngunit nagbibigay sa mga expander ng higit pa
kumplikadong mga puno upang magtrabaho upang magresulta sa mas mahusay na henerasyon ng RTL. Ito ay pinagana ng
default sa -O at mas mataas.

-ftree-slsr
Magsagawa ng straight-line strength reduction sa mga puno. Kinikilala nito ang kaugnay
mga expression na kinasasangkutan ng multiplikasyon at pinapalitan ang mga ito ng mas murang mga kalkulasyon
kapag posible. Ito ay pinagana bilang default sa -O at mas mataas.

-free-vectorize
Magsagawa ng vectorization sa mga puno. Pinapagana ng flag na ito -free-loop-vectorize at
-ftree-slp-vectorize kung hindi tahasang tinukoy.

-free-loop-vectorize
Magsagawa ng loop vectorization sa mga puno. Ang flag na ito ay pinagana bilang default sa -O3 At kailan
-free-vectorize Ay pinagana.

-ftree-slp-vectorize
Magsagawa ng basic block vectorization sa mga puno. Ang flag na ito ay pinagana bilang default sa -O3 at
kailan -free-vectorize Ay pinagana.

-fvect-cost-model=modelo
Baguhin ang modelo ng gastos na ginamit para sa vectorization. Ang modelo argument ay dapat isa sa
walang hangganan, dynamic or mura. Kasama ang walang hangganan modelo ang vectorized code-path ay
ipinapalagay na kumikita habang kasama ang dynamic Ang modelo ng isang runtime check ay nagbabantay sa
vectorized code-path upang paganahin lamang ito para sa mga bilang ng pag-ulit na malamang na maisakatuparan
mas mabilis kaysa sa kapag isinasagawa ang orihinal na scalar loop. Ang mura hindi pinapagana ang modelo
vectorization ng mga loop kung saan ang paggawa nito ay magiging mahal halimbawa dahil sa
kinakailangang runtime check para sa data dependence o alignment ngunit kung hindi man ay katumbas ng
dynamic modelo. Ang default na modelo ng gastos ay nakasalalay sa iba pang mga flag ng pag-optimize at ay
alinman sa dynamic or mura.

-fsimd-cost-model=modelo
Baguhin ang modelo ng gastos na ginamit para sa vectorization ng mga loop na minarkahan ng OpenMP o Cilk
Plus simd directive. Ang modelo argument ay dapat isa sa walang hangganan, dynamic, mura.
Lahat ng halaga ng modelo ay may parehong kahulugan tulad ng inilarawan sa -fvect-cost-model at sa pamamagitan ng
default ang isang modelo ng gastos na tinukoy sa -fvect-cost-model Ginagamit.

-ftree-vrp
Magsagawa ng Value Range Propagation sa mga puno. Ito ay katulad ng patuloy na pagpapalaganap
pumasa, ngunit sa halip na mga halaga, ang mga hanay ng mga halaga ay pinapalaganap. Ito ay nagpapahintulot sa
mga optimizer upang alisin ang mga hindi kinakailangang pagsusuri sa hanay tulad ng mga pagsusuri sa array bound at null pointer
mga tseke. Ito ay pinagana bilang default sa -O2 at mas mataas. Null pointer check elimination
ay gagawin lamang kung -fdelete-null-pointer-checks Ay pinagana.

-fsplit-ivs-in-unroller
Pinapagana ang pagpapahayag ng mga halaga ng mga variable ng induction sa mga susunod na pag-ulit ng
unrolled loop gamit ang value sa unang pag-ulit. Sinisira nito ang mahabang dependency
chain, kaya nagpapabuti ng kahusayan ng mga pass sa pag-iskedyul.

Isang kumbinasyon ng -fweb at ang CSE ay kadalasang sapat upang makuha ang parehong epekto.
Gayunpaman, hindi iyon maaasahan sa mga kaso kung saan ang katawan ng loop ay mas kumplikado kaysa sa a
nag-iisang pangunahing bloke. Hindi rin ito gumagana sa ilang mga arkitektura dahil sa
mga paghihigpit sa CSE pass.

Ang pag-optimize na ito ay pinagana bilang default.

-fvariable-expansion-in-unroller
Gamit ang opsyong ito, lumilikha ang compiler ng maraming kopya ng ilang lokal na variable kapag
pag-unroll ng loop, na maaaring magresulta sa superior code.

-fpartial-inlining
Mga inline na bahagi ng mga function. Ang pagpipiliang ito ay may anumang epekto lamang kapag inlining mismo
naka-on ng -finline-function or -finline-small-functions mga pagpipilian.

Pinagana sa antas -O2.

-fpredictive-commoning
Magsagawa ng predictive commoning optimization, ibig sabihin, muling paggamit ng mga computations (lalo na
memory load at stores) na isinagawa sa mga nakaraang pag-ulit ng mga loop.

Ang pagpipiliang ito ay pinagana sa antas -O3.

-fprefetch-loop-arrays
Kung sinusuportahan ng target na makina, bumuo ng mga tagubilin upang i-prefetch ang memorya
pagbutihin ang pagganap ng mga loop na nag-a-access ng malalaking array.

Ang pagpipiliang ito ay maaaring makabuo ng mas mahusay o mas masahol na code; ang mga resulta ay lubos na nakadepende sa
istraktura ng mga loop sa loob ng source code.

Hindi pinagana sa antas -Os.

-fno-peephole
-fno-peephole2
Huwag paganahin ang anumang mga pag-optimize ng peephole na partikular sa makina. Ang pagkakaiba sa pagitan ng
-fno-peephole at -fno-peephole2 ay sa kung paano sila ipinatupad sa compiler; ilang
ang mga target ay gumagamit ng isa, ang ilan ay gumagamit ng isa, ang ilan ay gumagamit ng pareho.

-fpeephole ay pinagana bilang default. -fpeephole2 pinagana sa mga antas -O2, -O3, -Os.

-fno-guess-branch-probability
Huwag hulaan ang mga probabilidad ng sangay gamit ang heuristics.

Gumagamit ang GCC ng heuristics upang hulaan ang mga probabilidad ng sangay kung hindi ibinigay ng
feedback sa profile (-fprofile-arcs). Ang mga heuristic na ito ay batay sa daloy ng kontrol
graph. Kung ang ilang probabilidad ng sangay ay tinukoy ng "__builtin_expect", kung gayon ang
ginagamit ang heuristics upang hulaan ang mga probabilidad ng sangay para sa natitirang bahagi ng daloy ng kontrol
graph, na isinasaalang-alang ang "__builtin_expect" na impormasyon. Ang mga pakikipag-ugnayan sa pagitan ng
heuristics at "__builtin_expect" ay maaaring kumplikado, at sa ilang mga kaso, maaari itong maging kapaki-pakinabang
upang huwag paganahin ang heuristics upang ang mga epekto ng "__builtin_expect" ay mas madaling gawin
maunawaan.

Ang default ay -fguess-branch-probability sa mga antas -O, -O2, -O3, -Os.

-freorder-block
Ayusin muli ang mga pangunahing bloke sa pinagsama-samang function upang mabawasan ang bilang ng mga kinuha
sangay at pagbutihin ang code locality.

Pinagana sa mga antas -O2, -O3.

-freorder-block-and-partition
Bilang karagdagan sa muling pagsasaayos ng mga pangunahing bloke sa pinagsama-samang function, upang mabawasan
bilang ng mga kinuhang sanga, mga partisyon ng mainit at malamig na mga pangunahing bloke sa magkahiwalay na mga seksyon
ng assembly at .o file, para mapabuti ang paging at cache locality performance.

Awtomatikong naka-off ang optimization na ito sa pagkakaroon ng exception handling,
para sa linkonce na mga seksyon, para sa mga function na may katangian ng seksyong tinukoy ng gumagamit at sa alinman
arkitektura na hindi sumusuporta sa mga pinangalanang seksyon.

Naka-enable para sa x86 sa mga antas -O2, -O3.

-freorder-function
Muling ayusin ang mga function sa object file upang mapabuti ang code locality. Ito ay
ipinatupad sa pamamagitan ng paggamit ng mga espesyal na subsection na ".text.hot" para sa pinakamadalas na isagawa
function at ".text.unlikely" para sa hindi malamang na executed function. Ang muling pagsasaayos ay ginagawa ng
ang linker kaya object file format ay dapat na sumusuporta sa pinangalanang mga seksyon at linker ay dapat ilagay
ang mga ito sa makatwirang paraan.

Gayundin, ang feedback sa profile ay dapat na magagamit upang gawing epektibo ang opsyong ito. Tingnan mo
-fprofile-arcs para sa mga detalye.

Pinagana sa mga antas -O2, -O3, -Os.

-mahigpit-aliasing
Pahintulutan ang compiler na ipagpalagay ang pinakamahigpit na panuntunan sa pag-alyas na naaangkop sa wika
ini-compile. Para sa C (at C++), ina-activate nito ang mga pag-optimize batay sa uri ng
mga ekspresyon. Sa partikular, ang isang bagay ng isang uri ay ipinapalagay na hindi kailanman naninirahan sa
parehong address bilang isang bagay ng ibang uri, maliban kung ang mga uri ay halos pareho.
Halimbawa, ang isang "unsigned int" ay maaaring mag-alyas ng isang "int", ngunit hindi isang "void*" o isang "double". A
uri ng character ay maaaring mag-alyas ng anumang iba pang uri.

Bigyang-pansin ang code na tulad nito:

unyon a_union {
int i;
doble d;
};

int f() {
unyon a_union t;
td = 3.0;
ibalik ti;
}

Ang kasanayan ng pagbabasa mula sa ibang miyembro ng unyon kaysa sa pinakahuling miyembro
isinulat sa (tinatawag na "type-punning") ay karaniwan. Kahit sa -mahigpit-aliasing, uri-
pinahihintulutan ang pagpunan, kung maa-access ang memorya sa pamamagitan ng uri ng unyon. Kaya ang
gumagana ang code sa itaas tulad ng inaasahan. Gayunpaman, ang code na ito ay maaaring hindi:

int f() {
unyon a_union t;
int* ip;
td = 3.0;
ip = &t.i;
ibalik *ip;
}

Katulad nito, ang pag-access sa pamamagitan ng pagkuha ng address, pag-cast ng resultang pointer at
ang pagderefer sa resulta ay may hindi natukoy na gawi, kahit na ang cast ay gumagamit ng uri ng unyon,
halimbawa:

int f() {
dobleng d = 3.0;
return ((union a_union *) &d)->i;
}

Ang -mahigpit-aliasing ang opsyon ay pinagana sa mga antas -O2, -O3, -Os.

-mahigpit-apaw
Payagan ang compiler na ipagpalagay ang mahigpit na nilagdaang mga panuntunan sa overflow, depende sa wika
ini-compile. Para sa C (at C++) nangangahulugan ito na overflow kapag gumagawa ng aritmetika sa
ang mga nilagdaang numero ay hindi natukoy, na nangangahulugan na ang tagatala ay maaaring ipagpalagay na ito ay hindi
mangyari. Pinahihintulutan nito ang iba't ibang mga pag-optimize. Halimbawa, ipinapalagay iyon ng tagatala
ang isang expression tulad ng "i + 10 > i" ay palaging totoo para sa nilagdaang "i". Ang pagpapalagay na ito ay
wasto lamang kung ang nilagdaang overflow ay hindi natukoy, dahil mali ang expression kung "i + 10"
umaapaw kapag gumagamit ng twos complement arithmetic. Kapag ang opsyong ito ay may bisa
subukang tukuyin kung ang isang operasyon sa mga nilagdaang numero ay dapat na isulat
maingat upang hindi aktwal na may kinalaman sa overflow.

Ang pagpipiliang ito ay nagpapahintulot din sa compiler na ipalagay ang mahigpit na pointer semantics: ibinigay a
pointer sa isang bagay, kung ang pagdaragdag ng offset sa pointer na iyon ay hindi gumagawa ng pointer
sa parehong bagay, ang karagdagan ay hindi natukoy. Pinahihintulutan nito ang compiler na magtapos
na ang "p + u > p" ay palaging totoo para sa isang pointer na "p" at unsigned integer na "u". Ito
ang pagpapalagay ay wasto lamang dahil ang pointer wraparound ay hindi natukoy, tulad ng expression
false kung ang "p + u" ay umapaw gamit ang twos complement arithmetic.

Tingnan din ang -fwrapv opsyon. Gamit -fwrapv nangangahulugan na ang integer signed overflow ay
ganap na tinukoy: ito ay bumabalot. Kailan -fwrapv ay ginagamit, walang pagkakaiba sa pagitan
-mahigpit-apaw at -fno-strict-overflow para sa mga integer. Sa -fwrapv ibang mga klase
pinahihintulutan ang pag-apaw. Halimbawa, kung ang compiler ay nakakakuha ng overflow kapag ginagawa
arithmetic sa constants, ang overflowed value ay maaari pa ring gamitin -fwrapv, Ngunit hindi
kung hindi man.

Ang -mahigpit-apaw ang opsyon ay pinagana sa mga antas -O2, -O3, -Os.

-falign-functions
-falign-functions=n
Ihanay ang simula ng mga function sa susunod na power-of-two na mas malaki kaysa n, lumalaktaw hanggang sa n
byte. Halimbawa, -falign-functions=32 aligns function sa susunod na 32-byte
hangganan, ngunit -falign-functions=24 nakahanay sa susunod na 32-byte na hangganan lamang kung ito
maaaring gawin sa pamamagitan ng paglaktaw ng 23 bytes o mas kaunti.

-fno-align-functions at -falign-functions=1 ay katumbas at ibig sabihin na gumagana
ay hindi nakahanay.

Sinusuportahan lamang ng ilang assembler ang flag na ito kapag n ay kapangyarihan ng dalawa; sa kasong iyon, ito ay
bilugan

If n ay hindi tinukoy o zero, gumamit ng default na umaasa sa makina.

Pinagana sa mga antas -O2, -O3.

-falign-labels
-falign-labels=n
Ihanay ang lahat ng target ng sangay sa isang power-of-two boundary, lumalaktaw hanggang sa n mga byte tulad ng
-falign-functions. Ang pagpipiliang ito ay madaling gawing mas mabagal ang code, dahil dapat itong ipasok
dummy operations kapag naabot ang target ng sangay sa karaniwang daloy ng code.

-fno-align-labels at -falign-labels=1 ay katumbas at nangangahulugan na ang mga label ay hindi
nakahanay

If -falign-loops or -falign-jumps ay naaangkop at mas malaki kaysa sa halagang ito, kung gayon
ang kanilang mga halaga ay ginagamit sa halip.

If n ay hindi tinukoy o zero, gumamit ng default na umaasa sa makina na malamang
upang maging 1, ibig sabihin walang alignment.

Pinagana sa mga antas -O2, -O3.

-falign-loops
-falign-loops=n
I-align ang mga loop sa isang power-of-two na hangganan, lumalaktaw hanggang sa n mga byte tulad ng -falign-functions.
Kung ang mga loop ay naisakatuparan ng maraming beses, ito ay bumubuo para sa anumang pagpapatupad ng dummy
operasyon.

-fno-align-loops at -falign-loops=1 ay katumbas at nangangahulugan na ang mga loop ay hindi
nakahanay

If n ay hindi tinukoy o zero, gumamit ng default na umaasa sa makina.

Pinagana sa mga antas -O2, -O3.

-falign-jumps
-falign-jumps=n
I-align ang mga target ng branch sa isang power-of-two boundary, para sa mga target na branch kung saan ang mga target
maaari lamang maabot sa pamamagitan ng pagtalon, paglaktaw hanggang sa n mga byte tulad ng -falign-functions. Sa
sa kasong ito, walang dummy na operasyon ang kailangang isagawa.

-fno-align-jumps at -falign-jumps=1 ay katumbas at nangangahulugan na ang mga loop ay hindi
nakahanay

If n ay hindi tinukoy o zero, gumamit ng default na umaasa sa makina.

Pinagana sa mga antas -O2, -O3.

-funit-sa-isang-panahon
Ang pagpipiliang ito ay naiwan para sa mga dahilan ng pagiging tugma. -funit-sa-isang-panahon walang epekto, habang
-fno-unit-sa-isang-panahon nagpapahiwatig -fno-toplevel-reorder at -fno-section-anchors.

Pinagana bilang default.

-fno-toplevel-reorder
Huwag muling isaayos ang mga top-level na function, variable, at "asm" na mga pahayag. I-output ang mga ito
ang parehong pagkakasunud-sunod na lumilitaw ang mga ito sa input file. Kapag ginamit ang opsyong ito,
hindi naaalis ang mga hindi na-refer na static na variable. Ang pagpipiliang ito ay inilaan upang suportahan
umiiral na code na umaasa sa isang partikular na pag-order. Para sa bagong code, ito ay mas mahusay na gamitin
mga katangian kapag posible.

Pinagana sa antas -O0. Kapag tahasang hindi pinagana, ito rin ay nagpapahiwatig -fno-section-anchors,
na kung hindi man ay pinagana sa -O0 sa ilang mga target.

-fweb
Bumubuo ng mga web gaya ng karaniwang ginagamit para sa pagpaparehistro ng mga layunin ng paglalaan at italaga ang bawat web
indibidwal na pseudo register. Nagbibigay-daan ito sa pagpapatakbo ng pass allocation ng rehistro
pseudos nang direkta, ngunit pinalalakas din ang ilang iba pang mga optimization pass, tulad ng CSE,
loop optimizer at trivial dead code remover. Gayunpaman, maaari itong gumawa ng pag-debug
imposible, dahil ang mga variable ay hindi na nananatili sa isang "home register".

Pinagana bilang default sa -funroll-loops.

-fbuong-programa
Ipagpalagay na ang kasalukuyang compilation unit ay kumakatawan sa buong program na kino-compile.
Lahat ng mga pampublikong function at variable maliban sa "pangunahing" at ang mga pinagsama ng
ang attribute na "externally_visible" ay nagiging mga static na function at sa bisa ay na-optimize
mas agresibo ng mga interprocedural optimizer.

Ang pagpipiliang ito ay hindi dapat gamitin kasama ng -flto. Sa halip na umasa sa isang linker
Ang plugin ay dapat magbigay ng mas ligtas at mas tumpak na impormasyon.

-flto[=n]
Pinapatakbo ng opsyong ito ang karaniwang link-time optimizer. Kapag na-invoke gamit ang source code, ito
bumubuo ng GIMPLE (isa sa mga panloob na representasyon ng GCC) at isinusulat ito sa espesyal na ELF
mga seksyon sa object file. Kapag ang mga object file ay pinagsama-sama, ang lahat ng
Ang mga function body ay binabasa mula sa mga seksyong ELF na ito at na-instantiate na parang sila na
bahagi ng parehong yunit ng pagsasalin.

Upang gamitin ang link-time optimizer, -flto at ang mga opsyon sa pag-optimize ay dapat na tukuyin sa
oras ng pag-compile at sa huling link. Halimbawa:

gcc -c -O2 -flto foo.c
gcc -c -O2 -flto bar.c
gcc -o myprog -flto -O2 foo.o bar.o

Ang unang dalawang invocation sa GCC ay nagse-save ng bytecode na representasyon ng GIMPLE sa espesyal
Mga seksyon ng ELF sa loob foo.o at bar.o. Binabasa ng huling invocation ang GIMPLE bytecode
mula foo.o at bar.o, pinagsasama ang dalawang file sa isang panloob na imahe, at pinagsama-sama
ang resulta gaya ng dati. Dahil pareho foo.o at bar.o ay pinagsama sa isang larawan, ito
nagiging sanhi ng lahat ng interprocedural na pagsusuri at pag-optimize sa GCC upang gumana sa buong
dalawang file na parang isa lang. Nangangahulugan ito, halimbawa, na ang inliner ay
magagawang mag-inline ng mga function sa bar.o sa mga function sa foo.o at kabaliktaran.

Ang isa pang (mas simple) na paraan upang paganahin ang pag-optimize ng oras ng link ay:

gcc -o myprog -flto -O2 foo.c bar.c

Ang nasa itaas ay bumubuo ng bytecode para sa foo.c at bar.c, pinagsasama-sama ang mga ito sa isang solong
GIMPLE na representasyon at ino-optimize ang mga ito gaya ng dati upang makagawa myprog.

Ang tanging mahalagang bagay na dapat tandaan ay ang paganahin ang mga pag-optimize sa oras ng link
kailangang gamitin ang GCC driver para gawin ang link-step. Awtomatikong gumaganap ang GCC
link-time optimization kung ang alinman sa mga bagay na kasangkot ay pinagsama-sama sa -flto
opsyon sa command-line. Sa pangkalahatan, dapat mong tukuyin ang mga opsyon sa pag-optimize na gagamitin
para sa link-time optimization kahit na sinusubukan ng GCC na maging matalino sa paghula ng isang optimization
antas na gagamitin mula sa mga opsyon na ginamit sa oras ng pag-compile kung hindi mo tukuyin ang isa sa link-
oras. Maaari mong palaging i-override ang awtomatikong desisyon na gawin ang pag-optimize ng oras ng link sa
link-time sa pamamagitan ng pagdaan -fno-lto sa utos ng link.

Upang gawing epektibo ang buong programa ng pag-optimize, kinakailangan na gawing buo ang ilang partikular
mga pagpapalagay ng programa. Kailangang malaman ng compiler kung ano ang mga function at variable
na-access ng mga aklatan at runtime sa labas ng link-time optimized unit. Kailan
suportado ng linker, ang linker plugin (tingnan -fuse-linker-plugin) pumasa
impormasyon sa compiler tungkol sa ginamit at nakikitang mga simbolo sa labas. Kapag ang
linker plugin ay hindi magagamit, -fbuong-programa dapat gamitin upang payagan ang compiler
upang gawin ang mga pagpapalagay na ito, na humahantong sa mga mas agresibong desisyon sa pag-optimize.

Kailan -fuse-linker-plugin ay hindi pinagana pagkatapos, kapag ang isang file ay pinagsama-sama -flto, ang
Ang nabuong object file ay mas malaki kaysa sa isang regular na object file dahil naglalaman ito ng GIMPLE
mga bytecode at ang karaniwang panghuling code (tingnan -ffat-lto-mga bagay. Nangangahulugan ito na bagay
ang mga file na may impormasyon ng LTO ay maaaring iugnay bilang normal na object file; kung -fno-lto ay tapos na
sa linker, walang interprocedural optimization ang inilalapat. Tandaan na kapag
-fno-fat-lto-mga bagay ay pinagana ang yugto ng pag-compile ay mas mabilis ngunit hindi ka makakapagsagawa ng a
regular, hindi LTO na link sa kanila.

Bukod pa rito, ang mga flag ng pag-optimize na ginagamit upang mag-compile ng mga indibidwal na file ay hindi
kinakailangang nauugnay sa mga ginamit sa oras ng pag-link. Halimbawa,

gcc -c -O0 -ffat-lto-objects -flto foo.c
gcc -c -O0 -ffat-lto-objects -flto bar.c
gcc -o myprog -O3 foo.o bar.o

Gumagawa ito ng mga indibidwal na object file na may hindi na-optimize na assembler code, ngunit ang
binary na nagreresulta myprog ay na-optimize sa -O3. Kung, sa halip, ang panghuling binary ay
nabuo gamit ang -fno-lto, Pagkatapos myprog ay hindi na-optimize.

Kapag gumagawa ng panghuling binary, inilalapat lang ng GCC ang mga link-time na pag-optimize sa mga iyon
mga file na naglalaman ng bytecode. Samakatuwid, maaari mong paghaluin at pagtugmain ang mga object file at
mga aklatan na may GIMPLE bytecode at final object code. Awtomatikong pinipili ng GCC
kung aling mga file ang i-optimize sa LTO mode at kung aling mga file ang ili-link nang wala nang karagdagang
pagpoproseso.

Mayroong ilang mga flag ng pagbuo ng code na pinapanatili ng GCC kapag bumubuo ng mga bytecode, bilang
kailangan nilang gamitin sa huling yugto ng link. Karaniwang tinukoy ang mga opsyon sa
na-override ng link-time ang mga tinukoy sa compile-time.

Kung hindi ka tumukoy ng opsyon sa antas ng pag-optimize -O sa link-time pagkatapos ay magcompute ang GCC
isa batay sa mga antas ng pag-optimize na ginamit kapag kino-compile ang mga object file. Ang
panalo ang pinakamataas na antas ng pag-optimize dito.

Sa kasalukuyan, ang mga sumusunod na opsyon at ang kanilang setting ay kinuha mula sa unang object file
na tahasang tinukoy ito: -fPIC, -fpic, -fpie, -karaniwan, -fexceptions,
-fnon-call-exceptions, -fgnu-tm at lahat ng -m target na mga bandila.

Ang ilang partikular na pagpapalit ng mga flag ng ABI ay kinakailangang tumugma sa lahat ng mga compilation-unit at pagsubok
hindi papansinin ang pag-override nito sa oras ng link na may sumasalungat na halaga. Kabilang dito ang
mga pagpipilian tulad ng -freg-struct-return at -fpcc-struct-return.

Iba pang mga pagpipilian tulad ng -ffp-kontrata, -fno-strict-overflow, -fwrapv, -fno-trapv or
-fno-strict-aliasing ay dumaan sa yugto ng link at pinagsamang konserbatibo
para sa magkasalungat na yunit ng pagsasalin. Sa partikular -fno-strict-overflow, -fwrapv at
-fno-trapv unahin at halimbawa -ffp-contract=off inuuna
-ffp-contract=mabilis. Maaari mong i-override ang mga ito sa linke-time.

Inirerekomenda na i-compile mo ang lahat ng mga file na kalahok sa parehong link na may
ang parehong mga opsyon at tukuyin din ang mga opsyong iyon sa oras ng pag-link.

Kung ang LTO ay makatagpo ng mga bagay na may C linkage na idineklara na may mga hindi tugmang uri sa magkahiwalay
mga unit ng pagsasalin na magkakaugnay (hindi natukoy na pag-uugali ayon sa ISO C99
6.2.7), maaaring maglabas ng non-fatal diagnostic. Ang pag-uugali ay hindi pa rin natukoy sa pagtakbo
oras. Maaaring itaas ang mga katulad na diagnostic para sa iba pang mga wika.

Ang isa pang tampok ng LTO ay posibleng maglapat ng mga interprocedural optimization
sa mga file na nakasulat sa iba't ibang wika:

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

Pansinin na ang huling link ay tapos na sa g ++ upang makuha ang mga C++ runtime library at
-lgfortran ay idinagdag upang makuha ang Fortran runtime library. Sa pangkalahatan, kapag naghahalo
mga wika sa LTO mode, dapat mong gamitin ang parehong mga opsyon sa command ng link tulad ng kapag naghahalo
mga wika sa isang regular (hindi LTO) compilation.

Kung ang mga object file na naglalaman ng GIMPLE bytecode ay naka-store sa isang library archive, sabihin
libfoo.a, posibleng kunin at gamitin ang mga ito sa isang link ng LTO kung gumagamit ka ng a
linker na may suporta sa plugin. Upang lumikha ng mga static na aklatan na angkop para sa LTO, gamitin gcc-ar
at gcc-ranlib sa halip ng ar at ranlib; upang ipakita ang mga simbolo ng object file na may
GIMPLE bytecode, gamitin gcc-nm. Ang mga utos na iyon ay nangangailangan nito ar, ranlib at nm ang inalisan
pinagsama-sama sa suporta ng plugin. Sa oras ng pag-link, gamitin ang bandila -fuse-linker-plugin sa
tiyaking nakikilahok ang aklatan sa proseso ng pag-optimize ng LTO:

gcc -o myprog -O2 -flto -fuse-linker-plugin ao bo -lfoo

Kapag pinagana ang linker plugin, kinukuha ng linker ang kinakailangang GIMPLE file mula sa
libfoo.a at ipapasa ang mga ito sa tumatakbong GCC para gawin silang bahagi ng pinagsama-samang
GIMPLE na imahe upang ma-optimize.

Kung hindi ka gumagamit ng linker na may suporta sa plugin at/o hindi pinagana ang linker
plugin, pagkatapos ay ang mga bagay sa loob libfoo.a ay na-extract at naka-link gaya ng dati, ngunit sila
huwag lumahok sa proseso ng pag-optimize ng LTO. Upang makagawa ng isang static na library
angkop para sa parehong LTO optimization at karaniwang linkage, i-compile ang object file nito gamit ang
-flto -ffat-lto-mga bagay.

Ang mga pag-optimize ng oras ng link ay hindi nangangailangan ng pagkakaroon ng buong programa upang gumana.
Kung ang programa ay hindi nangangailangan ng anumang mga simbolo na i-export, posible na pagsamahin
-flto at -fbuong-programa upang payagan ang mga interprocedural optimizer na gumamit ng higit pa
mga agresibong pagpapalagay na maaaring humantong sa mga pinahusay na pagkakataon sa pag-optimize. Paggamit ng
-fbuong-programa ay hindi kailangan kapag ang linker plugin ay aktibo (tingnan -fuse-linker-plugin).

Ang kasalukuyang pagpapatupad ng LTO ay hindi nagtatangkang bumuo ng bytecode
portable sa pagitan ng iba't ibang uri ng mga host. Ang mga bytecode file ay may bersyon at doon
ay isang mahigpit na pagsusuri sa bersyon, kaya ang mga bytecode file na nabuo sa isang bersyon ng GCC ay hindi
gumana sa mas luma o mas bagong bersyon ng GCC.

Hindi gumagana nang maayos ang pag-optimize ng oras ng link sa pagbuo ng impormasyon sa pag-debug.
Pagsasama -flto sa -g ay kasalukuyang eksperimental at inaasahang magbubunga ng hindi inaasahan
resulta.

Kung tinukoy mo ang opsyonal n, ang pag-optimize at pagbuo ng code na ginawa sa oras ng link
ay naisakatuparan sa parallel gamit n parallel na trabaho sa pamamagitan ng paggamit ng naka-install gumawa programa.
Ang variable ng kapaligiran GAWIN maaaring gamitin upang i-override ang program na ginamit. Ang default
halaga para sa n ay 1.

Maaari mo ring tukuyin -flto=tagapagtrabaho upang gamitin ang mode ng server ng trabaho ng GNU make upang matukoy
ang bilang ng mga parallel na trabaho. Ito ay kapaki-pakinabang kapag ang Makefile na tumatawag sa GCC ay mayroon na
executing in parallel. Dapat mong ihanda ang isang + sa recipe ng utos sa magulang
Makefile para gumana ito. Ang pagpipiliang ito ay malamang na gagana lamang kung GAWIN ay ginawa ng GNU.

-flto-partition=algae
Tukuyin ang algorithm ng partitioning na ginagamit ng link-time optimizer. Ang halaga ay
alinman sa 1 hanggang 1 upang tukuyin ang isang partitioning na sumasalamin sa orihinal na source file o timbang
upang tukuyin ang paghahati sa pantay na laki ng mga tipak (kung posible) o max upang lumikha ng
bagong partition para sa bawat simbolo kung posible. Tinutukoy wala bilang isang algorithm
ganap na hindi pinapagana ang partitioning at streaming. Ang default na halaga ay timbang. habang
1 hanggang 1 ay maaaring gamitin bilang isang workaround para sa iba't ibang mga isyu sa pag-order ng code, ang max
ang partitioning ay inilaan para sa panloob na pagsubok lamang. Ang halaga isa tinutukoy iyon
eksaktong isang partition ang dapat gamitin habang ang value wala bypasses partitioning at
direktang isinasagawa ang hakbang sa pag-optimize ng oras ng link mula sa yugto ng WPA.

-flto-odr-type-merging
I-enable ang pag-stream ng mga pangalan ng mga namalas na uri ng mga uri ng C++ at ang kanilang pagkakaisa sa
linktime. Pinapataas nito ang laki ng mga object file ng LTO, ngunit pinapagana ang mga diagnostic tungkol sa One
Kahulugan Mga paglabag sa Panuntunan.

-flto-compression-level=n
Tinutukoy ng opsyong ito ang antas ng compression na ginagamit para sa intermediate na wikang nakasulat
sa mga file ng object ng LTO, at makabuluhan lamang ito kasabay ng LTO mode (-flto).
Ang mga wastong halaga ay 0 (walang compression) hanggang 9 (maximum compression). Mga halaga sa labas nito
Ang hanay ay naka-clamp sa alinman sa 0 o 9. Kung ang opsyon ay hindi ibinigay, isang default na balanse
ginagamit ang compression setting.

-flto-ulat
Nagpi-print ng ulat na may mga panloob na detalye sa paggana ng link-time optimizer. Ang
iba-iba ang mga nilalaman ng ulat na ito sa bawat bersyon. Ito ay nilalayong maging kapaki-pakinabang sa GCC
mga developer kapag nagpoproseso ng mga object file sa LTO mode (sa pamamagitan ng -flto).

Hindi pinagana nang default.

-flto-report-wpa
katulad -flto-ulat, ngunit mag-print lamang para sa WPA phase ng Link Time Optimization.

-fuse-linker-plugin
Pinapagana ang paggamit ng isang linker plugin sa panahon ng pag-optimize ng oras ng link. Ang pagpipiliang ito ay umaasa
sa suporta ng plugin sa linker, na magagamit sa ginto o sa GNU ld 2.21 o
mas bago.

Ang pagpipiliang ito ay nagbibigay-daan sa pagkuha ng mga object file na may GIMPLE bytecode sa labas ng library
mga archive. Pinapabuti nito ang kalidad ng pag-optimize sa pamamagitan ng paglalantad ng higit pang code sa link-
time optimizer. Tinutukoy ng impormasyong ito kung anong mga simbolo ang maaaring ma-access sa labas
(sa pamamagitan ng bagay na hindi LTO o habang nagli-link). Nagreresulta sa mga pagpapahusay sa kalidad ng code sa
binary (at mga shared library na gumagamit ng hidden visibility) ay katulad ng
-fbuong-programa. Tingnan -flto para sa paglalarawan ng epekto ng watawat na ito at kung paano
gamitin ito.

Ang pagpipiliang ito ay pinagana bilang default kapag ang suporta ng LTO sa GCC ay pinagana at ang GCC ay pinagana
na-configure para gamitin sa isang linker na sumusuporta sa mga plugin (GNU ld 2.21 o mas bago o ginto).

-ffat-lto-mga bagay
Ang mga fat LTO object ay object file na naglalaman ng parehong intermediate na wika at ang
object code. Ginagawa nitong magagamit ang mga ito para sa parehong LTO linking at normal linking. Ito
Ang pagpipilian ay epektibo lamang kapag nag-compile sa -flto at hindi pinapansin sa oras ng link.

-fno-fat-lto-mga bagay pinapabuti ang oras ng compilation sa simpleng LTO, ngunit nangangailangan ng
kumpletong toolchain para malaman ang LTO. Nangangailangan ito ng linker na may suporta sa linker plugin
para sa pangunahing pag-andar. Bukod pa rito, nm, ar at ranlib kailangang suportahan ang linker
mga plugin upang payagan ang isang buong tampok na build environment (may kakayahang bumuo ng static
mga aklatan atbp). Ang GCC ay nagbibigay ng gcc-ar, gcc-nm, gcc-ranlib mga balot para ipasa ang
mga tamang opsyon sa mga tool na ito. Sa hindi mataba na mga makefile ng LTO ay kailangang baguhin para magamit
Kanila.

Ang default ay -fno-fat-lto-mga bagay sa mga target na may suporta sa linker plugin.

-fcompare-elim
Pagkatapos magrehistro ng allocation at post-register allocation instruction splitting, tukuyin
mga tagubilin sa aritmetika na nagko-compute ng mga flag ng processor na katulad ng isang operasyon sa paghahambing
batay sa arithmetic na iyon. Kung maaari, alisin ang tahasang paghahambing na operasyon.

Nalalapat lang ang pass na ito sa ilang partikular na target na hindi maaaring tahasang kumakatawan sa
pagpapatakbo ng paghahambing bago makumpleto ang paglalaan ng rehistro.

Pinagana sa mga antas -O, -O2, -O3, -Os.

-fcprop-nagparehistro
Pagkatapos magrehistro ng allocation at post-register allocation instruction splitting, gumanap
isang copy-propagation pass upang subukang bawasan ang mga dependency sa pag-iiskedyul at paminsan-minsan
alisin ang kopya.

Pinagana sa mga antas -O, -O2, -O3, -Os.

-fprofile-pagwawasto
Ang mga profile na nakolekta gamit ang isang binary na instrumento para sa mga multi-threaded na programa ay maaaring
hindi pare-pareho dahil sa hindi nakuhang mga update sa counter. Kapag tinukoy ang opsyong ito, ginagamit ng GCC
heuristics upang itama o maayos ang mga ganitong hindi pagkakapare-pareho. Bilang default, naglalabas ang GCC ng isang
mensahe ng error kapag may nakitang hindi pare-parehong profile.

-fprofile-dir=landas
Itakda ang direktoryo kung saan hanapin ang mga file ng data ng profile landas. Ang pagpipiliang ito
nakakaapekto lamang sa data ng profile na nabuo ni -fprofile-bumuo, -ftest-saklaw,
-fprofile-arcs at ginagamit ng -fprofile-gamitin at -fbranch-probability at kaugnay nito
mga pagpipilian. Maaaring gamitin ang parehong absolute at relative path. Bilang default, ginagamit ng GCC ang
kasalukuyang direktoryo bilang landas, kaya lumilitaw ang file ng data ng profile sa parehong direktoryo bilang
ang object file.

-fprofile-bumuo
-fprofile-generate=landas
Paganahin ang mga opsyon na karaniwang ginagamit para sa pag-instrumento ng application upang makagawa ng kapaki-pakinabang na profile
para sa muling pagsasama-sama sa ibang pagkakataon na may pag-optimize na batay sa feedback ng profile. Dapat mong gamitin
-fprofile-bumuo parehong kapag nag-compile at kapag nagli-link ng iyong programa.

Ang mga sumusunod na opsyon ay pinagana: -fprofile-arcs, -fprofile-mga halaga, -fvpt.

If landas ay tinukoy, tinitingnan ng GCC ang landas upang mahanap ang mga file ng data ng feedback ng profile.
Tingnan -fprofile-dir.

-fprofile-gamitin
-fprofile-use=landas
Paganahin ang mga pag-optimize na nakadirekta sa feedback ng profile, at ang mga sumusunod na pag-optimize na
sa pangkalahatan ay kumikita lamang kapag may available na feedback sa profile: -fbranch-probability,
-fvpt, -funroll-loops, -fpeel-loops, -ftracer, -free-vectorize, at ftree-loop-
distribute-patterns.

Bilang default, naglalabas ang GCC ng mensahe ng error kung ang mga profile ng feedback ay hindi tumutugma sa
source code. Ang error na ito ay maaaring gawing babala sa pamamagitan ng paggamit -Wcoverage-mismatch.
Tandaan na maaaring magresulta ito sa hindi magandang na-optimize na code.

If landas ay tinukoy, tinitingnan ng GCC ang landas upang mahanap ang mga file ng data ng feedback ng profile.
Tingnan -fprofile-dir.

-fauto-profile
-fauto-profile=landas
I-enable ang sampling-based na feedback-directed optimizations, at ang mga sumusunod na optimization
na sa pangkalahatan ay kumikita lamang kapag may available na feedback sa profile:
-fbranch-probability, -fvpt, -funroll-loops, -fpeel-loops, -ftracer,
-free-vectorize, -finline-function, -fipa-cp, -fipa-cp-clone,
-fpredictive-commoning, -funswitch-loops, -fgcse-pagkatapos-reload, at
-ftree-loop-distribute-patterns.

landas ay ang pangalan ng isang file na naglalaman ng impormasyon ng profile ng AutoFDO. Kung aalisin, ito
default sa fbdata.afdo sa kasalukuyang direktoryo.

Ang paggawa ng AutoFDO profile data file ay nangangailangan ng pagpapatakbo ng iyong program gamit ang perpekto
utility sa isang sinusuportahang GNU/Linux target system. Para sa karagdagang impormasyon, tingnan
<https://perf.wiki.kernel.org/>.

Hal

perf record -e br_inst_retired:near_taken -b -o perf.data \
-- iyong_programa

Pagkatapos ay gamitin ang create_gcov tool upang i-convert ang raw profile data sa isang format na maaaring
ginagamit ng GCC. Dapat mo ring ibigay ang unstripped binary para sa iyong programa dito
kasangkapan. Tingnan mohttps://github.com/google/autofdo>.

Hal

create_gcov --binary=your_program.unstripped --profile=perf.data \
--gcov=profile.afdo

Kinokontrol ng mga sumusunod na opsyon ang pag-uugali ng compiler patungkol sa floating-point arithmetic.
Ang mga pagpipiliang ito ay ipinagpalit sa pagitan ng bilis at kawastuhan. Dapat na partikular na pinagana ang lahat.

-float-store
Huwag mag-imbak ng mga variable na floating-point sa mga rehistro, at pagbawalan ang iba pang mga opsyon na
maaaring magbago kung ang isang floating-point na halaga ay kinuha mula sa isang rehistro o memorya.

Pinipigilan ng pagpipiliang ito ang hindi kanais-nais na labis na katumpakan sa mga makina tulad ng 68000 kung saan
ang mga lumulutang na rehistro (ng 68881) ay nagpapanatili ng higit na katumpakan kaysa sa isang "doble" ay dapat
magkaroon ng. Katulad din para sa x86 architecture. Para sa karamihan ng mga programa, ang labis na katumpakan
ay mabuti lamang, ngunit ang ilang mga programa ay umaasa sa tiyak na kahulugan ng IEEE na lumulutang
punto. Gamitin -float-store para sa mga naturang programa, pagkatapos baguhin ang mga ito upang maiimbak ang lahat
nauugnay na intermediate computations sa mga variable.

-fexcess-precision=estilo
Ang opsyong ito ay nagbibigay-daan sa karagdagang kontrol sa labis na katumpakan sa mga makina kung saan lumulutang-
Ang mga rehistro ng punto ay may higit na katumpakan kaysa sa mga uri ng "float" at "double" ng IEEE at ang
hindi sinusuportahan ng processor ang mga operasyong pag-round sa mga ganitong uri. Bilang default,
-fexcess-precision=mabilis ay may bisa; nangangahulugan ito na ang mga operasyon ay isinasagawa sa
ang katumpakan ng mga rehistro at na ito ay hindi mahuhulaan kapag ini-round sa mga uri
na tinukoy sa source code ay nagaganap. Kapag kino-compile ang C, kung
-fexcess-precision=standard ay tinukoy pagkatapos ang labis na katumpakan ay sumusunod sa mga patakaran
tinukoy sa ISO C99; sa partikular, ang parehong mga cast at takdang-aralin ay nagiging sanhi ng mga halaga
bilugan sa kanilang mga uri ng semantiko (samantalang -float-store nakakaapekto lamang sa mga takdang-aralin).
Ang pagpipiliang ito ay pinagana bilang default para sa C kung ang isang mahigpit na opsyon sa pagsunod gaya ng
-std=c99 Ginagamit.

-fexcess-precision=standard ay hindi ipinatupad para sa mga wika maliban sa C, at walang
epekto kung -funsafe-math-optimizations or -ffast-math ay tinukoy. Sa x86, ito
wala ring epekto kung -mfpmath=sse or -mfpmath=sse+387 ay tinukoy; sa dating
kaso, IEEE semantics nalalapat nang walang labis na katumpakan, at sa huli, rounding ay
hindi mahuhulaan.

-ffast-math
Nagtatakda ng mga pagpipilian -fno-math-errno, -funsafe-math-optimizations, -ffinite-math-lamang,
-fno-rounding-math, -fno-signaling-nans at -fcx-limited-range.

Ang pagpipiliang ito ay nagiging sanhi ng preprocessor macro na "__FAST_MATH__" upang matukoy.

Hindi naka-on ang opsyong ito ng sinuman -O opsyon bukod pa -Ofast dahil maaari itong magresulta sa
maling output para sa mga program na nakadepende sa eksaktong pagpapatupad ng IEEE o ISO
mga panuntunan/spesipikasyon para sa mga function ng matematika. Gayunpaman, maaari itong magbunga ng mas mabilis na code para sa
mga programang hindi nangangailangan ng mga garantiya ng mga pagtutukoy na ito.

-fno-math-errno
Huwag itakda ang "errno" pagkatapos tawagan ang mga function ng matematika na isinasagawa gamit ang isang solong
pagtuturo, hal, "sqrt". Isang program na umaasa sa IEEE exception para sa math error
Maaaring naisin ng paghawak na gamitin ang flag na ito para sa bilis habang pinapanatili ang IEEE arithmetic
compatibility.

Hindi naka-on ang opsyong ito ng sinuman -O opsyon dahil maaari itong magresulta sa hindi tamang output
para sa mga programang umaasa sa eksaktong pagpapatupad ng IEEE o ISO
mga panuntunan/spesipikasyon para sa mga function ng matematika. Gayunpaman, maaari itong magbunga ng mas mabilis na code para sa
mga programang hindi nangangailangan ng mga garantiya ng mga pagtutukoy na ito.

Ang default ay -fmath-errno.

Sa Darwin system, ang math library ay hindi kailanman nagtatakda ng "errno". Kaya walang dahilan
para sa compiler na isaalang-alang ang posibilidad na ito ay maaaring, at -fno-math-errno ay ang
default.

-funsafe-math-optimizations
Payagan ang mga pag-optimize para sa floating-point aritmetika na (a) ipinapalagay na ang mga argumento at
wasto ang mga resulta at (b) maaaring lumabag sa mga pamantayan ng IEEE o ANSI. Kapag ginamit sa link-time,
maaaring may kasama itong mga aklatan o startup file na nagbabago sa default na FPU control word o
iba pang mga katulad na pag-optimize.

Hindi naka-on ang opsyong ito ng sinuman -O opsyon dahil maaari itong magresulta sa hindi tamang output
para sa mga programang umaasa sa eksaktong pagpapatupad ng IEEE o ISO
mga panuntunan/spesipikasyon para sa mga function ng matematika. Gayunpaman, maaari itong magbunga ng mas mabilis na code para sa
mga programang hindi nangangailangan ng mga garantiya ng mga pagtutukoy na ito. Pinapagana
-fno-signed-zero, -fno-trap-math, -fassociative-math at -freciprocal-math.

Ang default ay -fno-unsafe-math-optimizations.

-fassociative-math
Payagan ang muling pag-uugnay ng mga operand sa serye ng mga floating-point na operasyon. Ito
lumalabag sa pamantayan ng wikang ISO C at C++ sa pamamagitan ng posibleng pagbabago sa resulta ng pag-compute.
TANDAAN: ang muling pag-order ay maaaring magbago ng tanda ng zero pati na rin huwag pansinin ang NaNs at pagbawalan o
lumikha ng underflow o overflow (at sa gayon ay hindi magagamit sa code na umaasa sa rounding
pag-uugali tulad ng "(x + 2**52) - 2**52". Maaari ring muling ayusin ang mga floating-point na paghahambing at
kaya't hindi maaaring gamitin kapag kinakailangan ang mga iniutos na paghahambing. Ang pagpipiliang ito ay nangangailangan nito
kapwa -fno-signed-zero at -fno-trap-math may bisa. Bukod dito, hindi ito gumagawa
magkano ang kahulugan sa -frounding-math. Para sa Fortran ang opsyon ay awtomatikong pinagana kapag
kapwa -fno-signed-zero at -fno-trap-math ay may bisa.

Ang default ay -fno-associative-math.

-freciprocal-math
Payagan ang reciprocal ng isang halaga na gamitin sa halip na hatiin sa halaga kung ito
nagbibigay-daan sa mga pag-optimize. Halimbawa ang "x / y" ay maaaring mapalitan ng "x * (1/y)", which is
kapaki-pakinabang kung ang "(1/y)" ay napapailalim sa karaniwang pag-aalis ng subexpression. Tandaan na ito
nawawala ang katumpakan at pinapataas ang bilang ng mga flop na gumagana sa halaga.

Ang default ay -fno-reciprocal-math.

-ffinite-math-lamang
Payagan ang mga pag-optimize para sa floating-point aritmetika na ipinapalagay na ang mga argumento at
ang mga resulta ay hindi NaNs o +-Infs.

Hindi naka-on ang opsyong ito ng sinuman -O opsyon dahil maaari itong magresulta sa hindi tamang output
para sa mga programang umaasa sa eksaktong pagpapatupad ng IEEE o ISO
mga panuntunan/spesipikasyon para sa mga function ng matematika. Gayunpaman, maaari itong magbunga ng mas mabilis na code para sa
mga programang hindi nangangailangan ng mga garantiya ng mga pagtutukoy na ito.

Ang default ay -fno-finite-math-lamang.

-fno-signed-zero
Payagan ang mga pag-optimize para sa floating-point arithmetic na hindi binabalewala ang signedness ng zero.
Tinutukoy ng IEEE arithmetic ang pag-uugali ng mga natatanging +0.0 at -0.0 na halaga, na pagkatapos
ipinagbabawal ang pagpapasimple ng mga expression tulad ng x+0.0 o 0.0*x (kahit na may
-ffinite-math-lamang). Ang opsyong ito ay nagpapahiwatig na ang senyales ng isang zero na resulta ay hindi
makabuluhang.

Ang default ay -fsigned-zero.

-fno-trap-math
I-compile ang code na ipinapalagay na ang mga pagpapatakbo ng floating-point ay hindi makakabuo ng nakikita ng user
mga bitag. Kasama sa mga traps na ito ang paghahati sa pamamagitan ng zero, overflow, underflow, hindi eksaktong resulta at
di-wastong operasyon. Ang pagpipiliang ito ay nangangailangan nito -fno-signaling-nans may bisa.
Ang pagtatakda ng opsyong ito ay maaaring magbigay-daan sa mas mabilis na code kung ang isa ay umaasa sa "non-stop" na arithmetic ng IEEE,
halimbawa.

Ang opsyong ito ay hindi dapat i-on ng sinuman -O opsyon dahil maaari itong magresulta sa
maling output para sa mga program na nakadepende sa eksaktong pagpapatupad ng IEEE o ISO
mga tuntunin/spesipikasyon para sa mga function ng matematika.

Ang default ay -ftrapping-math.

-frounding-math
Huwag paganahin ang mga pagbabago at pag-optimize na nagpapalagay ng default na floating-point rounding
pag-uugali. Ito ay round-to-zero para sa lahat ng floating point sa integer na mga conversion, at
round-to-pinakamalapit para sa lahat ng iba pang arithmetic truncation. Ang pagpipiliang ito ay dapat na
tinukoy para sa mga program na dynamic na nagbabago sa FP rounding mode, o maaaring iyon
isinagawa gamit ang isang non-default na rounding mode. Hindi pinapagana ng opsyong ito ang patuloy na pagtitiklop ng
mga floating-point na expression sa oras ng pag-compile (na maaaring maapektuhan ng rounding mode)
at arithmetic transformations na hindi ligtas sa pagkakaroon ng sign-dependent
rounding mode.

Ang default ay -fno-rounding-math.

Ang opsyong ito ay eksperimental at hindi kasalukuyang ginagarantiya na hindi paganahin ang lahat ng GCC
mga pag-optimize na apektado ng rounding mode. Maaaring magbigay ang mga hinaharap na bersyon ng GCC
mas pinong kontrol sa setting na ito gamit ang "FENV_ACCESS" pragma ng C99. Ang command-line na ito
ang opsyon ay gagamitin upang tukuyin ang default na estado para sa "FENV_ACCESS".

-fsignaling-nans
Mag-compile ng code sa pag-aakalang ang IEEE signaling NaNs ay maaaring bumuo ng mga bitag na nakikita ng user habang
mga pagpapatakbo ng floating-point. Ang pagtatakda ng opsyong ito ay hindi pinapagana ang mga pag-optimize na maaaring magbago
ang bilang ng mga pagbubukod na nakikita sa pagsenyas ng mga NaN. Ang pagpipiliang ito ay nagpapahiwatig
-ftrapping-math.

Ang pagpipiliang ito ay nagiging sanhi ng preprocessor macro na "__SUPPORT_SNAN__" upang matukoy.

Ang default ay -fno-signaling-nans.

Ang opsyong ito ay eksperimental at hindi kasalukuyang ginagarantiya na hindi paganahin ang lahat ng GCC
mga pag-optimize na nakakaapekto sa pag-uugali ng pagsenyas ng NaN.

-fsingle-precision-constant
Tratuhin ang mga floating-point constant bilang solong katumpakan sa halip na implicitly na mag-convert
ang mga ito sa double-precision constants.

-fcx-limited-range
Kapag pinagana, ang opsyong ito ay nagsasaad na ang isang hakbang sa pagbabawas ng hanay ay hindi kailangan kapag
gumaganap ng kumplikadong dibisyon. Gayundin, walang pagsusuri kung ang resulta ng a
complex multiplication o division ay "NaN + I*NaN", na may pagtatangkang iligtas ang
sitwasyon sa kasong iyon. Ang default ay -fno-cx-limited-range, ngunit pinagana ng
-ffast-math.

Kinokontrol ng opsyong ito ang default na setting ng ISO C99 "CX_LIMITED_RANGE" pragma.
Gayunpaman, ang opsyon ay nalalapat sa lahat ng mga wika.

-fcx-fortran-rules
Ang kumplikadong multiplikasyon at paghahati ay sumusunod sa mga patakaran ng Fortran. Ang pagbabawas ng saklaw ay ginagawa bilang
bahagi ng kumplikadong paghahati, ngunit walang pagsuri kung ang resulta ng isang kumplikado
multiplication o division ay "NaN + I*NaN", na may pagtatangkang iligtas ang sitwasyon
sa kasong iyon

Ang default ay -fno-cx-fortran-rules.

Kinokontrol ng mga sumusunod na opsyon ang mga pag-optimize na maaaring mapabuti ang pagganap, ngunit hindi
pinagana ng sinuman -O mga pagpipilian. Kasama sa seksyong ito ang mga pang-eksperimentong opsyon na maaaring makagawa
sirang code.

-fbranch-probability
Pagkatapos magpatakbo ng isang programa na pinagsama-sama sa -fprofile-arcs, maaari mo itong i-compile sa pangalawang pagkakataon
paggamit -fbranch-probability, upang mapabuti ang mga pag-optimize batay sa dami ng beses
kinuha ang bawat sangay. Kapag ang isang programa ay pinagsama-sama sa -fprofile-arcs paglabas, nakakatipid ito
Ang arc execution ay binibilang sa isang file na tinatawag sourcename.gcda para sa bawat source file. Ang
impormasyon sa data file na ito ay lubos na nakadepende sa istraktura ng nabuo
code, kaya dapat mong gamitin ang parehong source code at ang parehong mga opsyon sa pag-optimize para sa pareho
mga compilation.

may -fbranch-probability, inilalagay ng GCC ang isang REG_BR_PROB tandaan sa bawat isa JUMP_INSN at
CALL_INSN. Maaaring gamitin ang mga ito upang mapabuti ang pag-optimize. Sa kasalukuyan, ginagamit lamang ang mga ito
sa isang lugar: sa reorg.c, sa halip na hulaan kung aling landas ang pinakamalamang na pupuntahan ng sangay
kunin, ang REG_BR_PROB ang mga halaga ay ginagamit upang eksaktong matukoy kung aling landas ang mas tatahakin
madalas.

-fprofile-mga halaga
Kung isasama sa -fprofile-arcs, nagdaragdag ito ng code upang ang ilang data tungkol sa mga halaga ng
ang mga expression sa programa ay natipon.

may -fbranch-probability, binabasa nito pabalik ang data na nakalap mula sa mga halaga ng profiling ng
mga expression para sa paggamit sa mga pag-optimize.

Pinagana gamit ang -fprofile-bumuo at -fprofile-gamitin.

-fprofile-reorder-functions
Kinokolekta ng pag-aayos muli ang function batay sa instrumentation ng profile sa unang pagkakataon ng pagpapatupad
ng isang function at inuutusan ang mga function na ito sa pataas na pagkakasunud-sunod.

Pinagana gamit ang -fprofile-gamitin.

-fvpt
Kung isasama sa -fprofile-arcs, ang opsyong ito ay nagtuturo sa compiler na magdagdag ng code sa
mangalap ng impormasyon tungkol sa mga halaga ng mga pagpapahayag.

may -fbranch-probability, binabasa nito pabalik ang data na nakalap at aktwal na gumaganap ng
mga pag-optimize batay sa kanila. Sa kasalukuyan ang mga pag-optimize ay kinabibilangan ng espesyalisasyon ng
division operations gamit ang kaalaman tungkol sa halaga ng denominator.

-frename-register
Subukang iwasan ang mga maling dependency sa naka-iskedyul na code sa pamamagitan ng paggamit ng mga naiwang rehistro
matapos ang pagrehistro ng alokasyon. Ang pag-optimize na ito ay higit na nakikinabang sa mga processor na may maraming
ng mga rehistro. Depende sa format ng impormasyon sa pag-debug na pinagtibay ng target,
gayunpaman, maaari nitong gawing imposible ang pag-debug, dahil ang mga variable ay hindi na nananatili sa isang "home
magparehistro".

Pinagana bilang default sa -funroll-loops at -fpeel-loops.

-fschedule-fusion
Nagsasagawa ng target na umaasa sa pagpasa sa stream ng pagtuturo upang mag-iskedyul ng mga tagubilin
ng parehong uri nang magkasama dahil ang target na makina ay maaaring isagawa ang mga ito nang mas mahusay kung sila
ay magkatabi sa daloy ng pagtuturo.

Pinagana sa mga antas -O2, -O3, -Os.

-ftracer
Magsagawa ng tail duplication upang palakihin ang laki ng superblock. Ang pagbabagong ito ay pinapasimple
ang control flow ng function na nagpapahintulot sa iba pang mga optimization na gumawa ng mas mahusay na trabaho.

Pinagana gamit ang -fprofile-gamitin.

-funroll-loops
I-unroll ang mga loop na ang bilang ng mga pag-ulit ay maaaring matukoy sa oras ng pag-compile o pagkatapos
pagpasok sa loop. -funroll-loops nagpapahiwatig -frerun-cse-after-loop, -fweb at
-frename-register. Ino-on din nito ang kumpletong pagbabalat ng loop (ibig sabihin, kumpletong pag-alis ng
mga loop na may maliit na pare-parehong bilang ng mga pag-ulit). Ang pagpipiliang ito ay nagpapalaki ng code, at
maaari o hindi maaaring gawin itong tumakbo nang mas mabilis.

Pinagana gamit ang -fprofile-gamitin.

-funroll-all-loops
I-unroll ang lahat ng mga loop, kahit na ang kanilang bilang ng mga pag-ulit ay hindi tiyak kung kailan ang loop ay
pumasok. Karaniwang ginagawa nitong mas mabagal ang pagtakbo ng mga programa. -funroll-all-loops nagpapahiwatig ng
parehong mga pagpipilian bilang -funroll-loops.

-fpeel-loops
Peels loops kung saan mayroong sapat na impormasyon na hindi gaanong gumulong (mula sa
feedback sa profile). Ino-on din nito ang kumpletong pagbabalat ng loop (ibig sabihin, kumpletong pag-alis ng
mga loop na may maliit na pare-parehong bilang ng mga pag-ulit).

Pinagana gamit ang -fprofile-gamitin.

-fmove-loop-invariants
Pinapagana ang loop invariant motion pass sa RTL loop optimizer. Pinagana sa antas
-O1

-funswitch-loops
Ilipat ang mga sanga na may loop invariant na kundisyon palabas ng loop, na may mga duplicate ng
loop sa parehong mga sanga (binago ayon sa resulta ng kondisyon).

-ffunction-seksyon
-fdata-seksyon
Ilagay ang bawat function o data item sa sarili nitong seksyon sa output file kung ang target
sumusuporta sa mga arbitrary na seksyon. Ang pangalan ng function o ang pangalan ng data item
tinutukoy ang pangalan ng seksyon sa output file.

Gamitin ang mga opsyong ito sa mga system kung saan maaaring magsagawa ang linker ng mga pag-optimize upang mapabuti
lokalidad ng sanggunian sa espasyo ng pagtuturo. Karamihan sa mga system na gumagamit ng ELF object
format at mga processor ng SPARC na tumatakbo sa Solaris 2 ay may mga linker na may ganitong mga pag-optimize.
Maaaring mayroon ang AIX ng mga pag-optimize na ito sa hinaharap.

Gamitin lamang ang mga opsyong ito kapag may malaking benepisyo mula sa paggawa nito. kapag ikaw
tukuyin ang mga opsyong ito, ang assembler at linker ay lumikha ng mas malaking object at executable
mga file at mas mabagal din. Hindi mo magagamit gprof sa lahat ng system kung tinukoy mo ito
opsyon, at maaari kang magkaroon ng mga problema sa pag-debug kung tinukoy mo pareho ang opsyong ito at
-g.

-fbranch-target-load-optimize
Magsagawa ng branch target register load optimization bago ang prologue / epilogue threading.
Ang paggamit ng mga target na rehistro ay karaniwang mailantad lamang sa panahon ng pag-reload, kaya ang pagtaas
naglo-load sa labas ng mga loop at ang paggawa ng inter-block na pag-iiskedyul ay nangangailangan ng isang hiwalay na pag-optimize
pumasa

-fbranch-target-load-optimize2
Magsagawa ng branch target register load optimization pagkatapos ng prologue / epilogue threading.

-fbtr-bb-eksklusibo
Kapag nagsasagawa ng branch target register load optimization, huwag muling gamitin ang branch target
nagrerehistro sa loob ng anumang pangunahing bloke.

-fstack-tagapagtanggol
Maglabas ng karagdagang code para tingnan kung may buffer overflow, gaya ng mga stack smashing attack. Ito
ay ginagawa sa pamamagitan ng pagdaragdag ng guard variable sa mga function na may mga vulnerable na bagay. Ito
may kasamang mga function na tinatawag na "alloca", at mga function na may mga buffer na mas malaki sa 8 byte.
Ang mga bantay ay sinisimulan kapag ang isang function ay ipinasok at pagkatapos ay nasuri kapag ang
paglabas ng function. Kung nabigo ang isang bantay check, isang mensahe ng error ay naka-print at ang programa
labasan.

-fstack-protector-lahat
katulad -fstack-tagapagtanggol maliban na ang lahat ng mga function ay protektado.

-fstack-protector-strong
katulad -fstack-tagapagtanggol ngunit may kasamang mga karagdagang function na dapat protektahan --- iyon
na may mga lokal na kahulugan ng array, o may mga sanggunian sa mga lokal na address ng frame.

-fstack-protector-explicit
katulad -fstack-tagapagtanggol ngunit pinoprotektahan lamang ang mga function na mayroong
"stack_protect" attribute

-fstdarg-opt
I-optimize ang prologue ng variadic argument function na may kinalaman sa paggamit ng mga iyon
argumento.

TANDAAN: Sa Ubuntu 14.10 at mga mas bagong bersyon, -fstack-protector-strong ay pinagana ng
default para sa C, C++, ObjC, ObjC++, kung wala sa -fno-stack-protector, -nostdlib, ni
-pagkakasundo ay matatagpuan.

-fsection-anchor
Subukang bawasan ang bilang ng mga simbolikong kalkulasyon ng address sa pamamagitan ng paggamit ng nakabahaging "anchor"
mga simbolo upang matugunan ang mga kalapit na bagay. Ang pagbabagong ito ay maaaring makatulong upang mabawasan ang bilang
ng GOT entry at GOT access sa ilang target.

Halimbawa, ang pagpapatupad ng sumusunod na function na "foo":

static int a, b, c;
int foo (walang bisa) { return a + b + c; }

karaniwang kinakalkula ang mga address ng lahat ng tatlong variable, ngunit kung isasama mo ito sa
-fsection-anchor, ina-access nito ang mga variable mula sa isang karaniwang anchor point sa halip. Ang
ang epekto ay katulad ng sumusunod na pseudocode (na hindi wasto C):

int foo (walang bisa)
{
magrehistro int *xr = &x;
ibalik ang xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
}

Hindi lahat ng target ay sumusuporta sa opsyong ito.

--param pangalan=halaga
Sa ilang lugar, gumagamit ang GCC ng iba't ibang mga constant upang kontrolin ang dami ng pag-optimize na iyon
ay tapos na. Halimbawa, hindi inline ng GCC ang mga function na naglalaman ng higit sa isang tiyak
bilang ng mga tagubilin. Maaari mong kontrolin ang ilan sa mga constant na ito sa command line
gamit ang --param pagpipilian.

Ang mga pangalan ng mga partikular na parameter, at ang kahulugan ng mga halaga, ay nakatali sa
internals ng compiler, at maaaring magbago nang walang abiso sa hinaharap
naglalabas.

Sa bawat kaso, ang halaga ay isang integer. Ang mga pinahihintulutang pagpipilian para sa pangalan ay:

predictable-branch-outcome
Kapag hinulaang kukunin ang sangay na may posibilidad na mas mababa sa threshold na ito
(sa porsyento), kung gayon ito ay itinuturing na mahusay na mahuhulaan. Ang default ay 10.

max-crossjump-edges
Ang maximum na bilang ng mga papasok na gilid upang isaalang-alang para sa cross-jumping. Ang algorithm
ginamit ni -fcrossjumping ay O(N^2) sa bilang ng mga gilid na papasok sa bawat bloke.
Ang pagtaas ng mga halaga ay nangangahulugan ng mas agresibong pag-optimize, na ginagawa ang oras ng compilation
pagtaas na may malamang na maliit na pagpapabuti sa executable size.

min-crossjump-insns
Ang pinakamababang bilang ng mga tagubilin na dapat itugma sa dulo ng dalawang bloke
bago isagawa ang cross-jumping sa kanila. Binabalewala ang halagang ito sa kaso
kung saan ang lahat ng mga tagubilin sa bloke kung saan pinagtatalunan ay tumutugma. Ang
ang default na halaga ay 5.

max-grow-copy-bb-insns
Ang maximum na laki ng code expansion factor kapag kinokopya ang mga pangunahing bloke sa halip na
tumatalon. Ang pagpapalawak ay may kaugnayan sa isang jump instruction. Ang default na halaga ay
8.

max-goto-duplication-insns
Ang maximum na bilang ng mga tagubilin na i-duplicate sa isang bloke na tumalon sa a
computed goto. Para maiwasan ang O(N^2) na pag-uugali sa ilang pass, GCC factor
na-compute ang mga gotos nang maaga sa proseso ng pagsasama-sama, at i-unfactors ang mga ito nang huli
maaari. Tanging ang mga na-compute na jump sa dulo ng isang pangunahing bloke na hindi hihigit sa max-
goto-duplication-insns ay unfactored. Ang default na halaga ay 8.

max-delay-slot-insn-search
Ang maximum na bilang ng mga tagubilin na isasaalang-alang kapag naghahanap ng tagubilin
punan ang isang puwang ng pagkaantala. Kung higit pa sa di-makatwirang bilang ng mga tagubilin ay
hinanap, ang matitipid sa oras mula sa pagpuno sa slot ng pagkaantala ay minimal, kaya huminto
naghahanap. Ang pagtaas ng mga halaga ay nangangahulugan ng mas agresibong pag-optimize, ginagawa ang
pagtaas ng oras ng compilation na may malamang na maliit na pagpapabuti sa oras ng pagpapatupad.

max-delay-slot-live-search
Kapag sinusubukang punan ang mga puwang ng pagkaantala, ang maximum na bilang ng mga tagubilin na dapat isaalang-alang
kapag naghahanap ng isang bloke na may wastong impormasyon sa live na pagpaparehistro. Ang pagtaas nito
Ang arbitraryong napiling halaga ay nangangahulugan ng mas agresibong pag-optimize, pagtaas ng
oras ng compilation. Dapat alisin ang parameter na ito kapag ang code ng delay na slot ay
muling isinulat upang mapanatili ang control-flow graph.

max-gcse-memory
Ang tinatayang maximum na halaga ng memorya na maaaring ilaan upang gumanap
ang pandaigdigang karaniwang subexpression elimination optimization. Kung mas maraming memorya kaysa
ang tinukoy ay kinakailangan, ang pag-optimize ay hindi tapos na.

max-gcse-insertion-ratio
Kung ang ratio ng mga pagpapasok ng expression sa mga pagtanggal ay mas malaki kaysa sa halagang ito para sa
anumang expression, pagkatapos ay ilalagay o aalisin ng RTL PRE ang expression at sa gayon ay umalis
bahagyang redundant computations sa stream ng pagtuturo. Ang default na halaga ay
20.

max-pending-list-length
Ang maximum na bilang ng mga nakabinbing dependency na pag-iiskedyul ay nagbibigay-daan bago i-flush ang
kasalukuyang estado at simulang muli. Malaking pag-andar na may kakaunting sangay o maaaring tawag
lumikha ng labis na malalaking listahan na hindi kailangang kumonsumo ng memorya at mga mapagkukunan.

max-modulo-backtrack-attempts
Ang maximum na bilang ng mga pagtatangka sa backtrack na dapat gawin ng scheduler kapag modulo
pag-iskedyul ng isang loop. Ang mas malalaking halaga ay maaaring magpapataas ng oras ng pag-compile.

max-inline-insns-single
Kinokontrol ng ilang parameter ang tree inliner na ginamit sa GCC. Itinatakda ng numerong ito ang
maximum na bilang ng mga tagubilin (binibilang sa panloob na representasyon ng GCC) sa a
nag-iisang function na isinasaalang-alang ng tree inliner para sa inlining. Nakakaapekto lamang ito
mga function na ipinahayag inline at mga pamamaraan na ipinatupad sa isang deklarasyon ng klase (C++).
Ang default na halaga ay 400.

max-inline-insns-auto
Kapag gumamit ka ng -finline-function (kasama sa -O3), maraming mga function na gagawin
kung hindi man ay hindi isinasaalang-alang para sa inlining ng compiler ay sinisiyasat. Upang
ang mga function na iyon, ibang (mas mahigpit) na limitasyon kumpara sa mga function
maaaring ilapat ang ipinahayag na inline. Ang default na halaga ay 40.

inline-min-speedup
Kapag lumampas dito ang tinantyang pagpapabuti ng performance ng tumatawag + runtime ng callee
threshold (sa kasalukuyan), ang function ay maaaring i-inline anuman ang limitasyon sa
--param max-inline-insns-single at --param max-inline-insns-auto.

large-function-inns
Ang limitasyon na tumutukoy sa talagang malalaking function. Para sa mga function na mas malaki kaysa sa limitasyong ito
pagkatapos ng inlining, inlining ay pinipigilan ng --param malaking-function-paglago. ito
Ang parameter ay pangunahing kapaki-pakinabang upang maiwasan ang matinding oras ng compilation na dulot ng hindi-
linear algorithm na ginagamit ng back end. Ang default na halaga ay 2700.

malaking-function-paglago
Tinutukoy ang pinakamataas na paglaki ng malaking function na dulot ng inlining sa mga porsyento. Ang
Ang default na halaga ay 100 na naglilimita sa malaking paglaki ng function sa 2.0 beses sa orihinal
laki.

malalaking-unit-inns
Ang limitasyon na tumutukoy sa malaking unit ng pagsasalin. Paglago sanhi ng inlining ng mga yunit
mas malaki kaysa sa limitasyong ito ay nililimitahan ng --param inline-unit-growth. Para sa maliliit na unit
ito ay maaaring masyadong mahigpit. Halimbawa, isaalang-alang ang isang yunit na binubuo ng function A
na inline at B na tatlong beses lang tumatawag kay A. Kung ang B ay maliit na may kaugnayan sa A,
ang paglaki ng yunit ay 300\% at gayon pa man ang gayong inlining ay napakahusay. Para sa napakalaki
mga yunit na binubuo ng maliliit na inlineable na function, gayunpaman, ang kabuuang paglaki ng unit
kailangan ang limitasyon para maiwasan ang exponential exponential ng code size. Kaya para sa mas maliit
mga yunit, ang laki ay nadagdagan sa --param malalaking-unit-inns bago mag-apply --param
inline-unit-growth. Ang default ay 10000.

inline-unit-growth
Tinutukoy ang pinakamataas na kabuuang paglaki ng compilation unit na dulot ng inlining. Ang
Ang default na halaga ay 20 na naglilimita sa paglaki ng unit sa 1.2 beses sa orihinal na laki. Malamig
mga function (alinman sa minarkahan ng malamig sa pamamagitan ng isang katangian o sa pamamagitan ng feedback ng profile) ay hindi
isinasaalang-alang sa laki ng yunit.

ipcp-unit-growth
Tinutukoy ang pinakamataas na kabuuang paglaki ng compilation unit na dulot ng interprocedural
patuloy na pagpapalaganap. Ang default na halaga ay 10 na naglilimita sa paglaki ng unit sa 1.1
beses sa orihinal na sukat.

malaking-stack-frame
Ang limitasyon na tumutukoy sa malalaking stack frame. Habang sinusubukan ang inlining ng algorithm
upang hindi lumampas sa limitasyong ito nang labis. Ang default na halaga ay 256 bytes.

malaking-stack-frame-growth
Tinutukoy ang pinakamataas na paglaki ng malalaking stack frame na dulot ng inlining sa mga porsyento.
Ang default na halaga ay 1000 na naglilimita sa malaking stack frame na paglaki sa 11 beses
orihinal na sukat.

max-inline-insns-recursive
max-inline-insns-recursive-auto
Tinutukoy ang maximum na bilang ng mga tagubilin na isang out-of-line na kopya ng isang self-
Maaaring lumaki ang recursive inline function sa pamamagitan ng pagsasagawa ng recursive inlining.

--param max-inline-insns-recursive nalalapat sa mga function na ipinahayag inline. Para sa
mga function na hindi idineklara na inline, ang recursive inlining ay nangyayari lamang kapag
-finline-function (kasama sa -O3) ay pinagana; --param max-inline-insns-
recursive-auto nalalapat sa halip. Ang default na halaga ay 450.

max-inline-recursive-depth
max-inline-recursive-depth-auto
Tinutukoy ang maximum na recursion depth na ginagamit para sa recursive inlining.

--param max-inline-recursive-depth nalalapat sa mga function na ipinahayag inline. Para sa
mga function na hindi idineklara na inline, ang recursive inlining ay nangyayari lamang kapag
-finline-function (kasama sa -O3) ay pinagana; --param max-inline-recursive-
depth-auto nalalapat sa halip. Ang default na halaga ay 8.

min-inline-recursive-probability
Ang recursive inlining ay kumikita lamang para sa function na may malalim na recursion in
average at maaaring masakit para sa function na may maliit na recursion depth sa pamamagitan ng pagtaas ng
laki ng prologue o pagiging kumplikado ng function body sa iba pang mga optimizer.

Kapag available ang feedback sa profile (tingnan -fprofile-bumuo) ang aktwal na recursion
Ang lalim ay maaaring hulaan mula sa posibilidad na ang function ay umuulit sa pamamagitan ng isang ibinigay na tawag
pagpapahayag. Nililimitahan ng parameter na ito ang pag-inlining lamang sa mga expression na tawagan
ang posibilidad ay lumampas sa ibinigay na threshold (sa porsyento). Ang default na halaga ay 10.

maagang-inlining-insns
Tukuyin ang paglago na maaaring gawin ng maagang inliner. Sa epekto ito ay nagdaragdag ng halaga
ng inlining para sa code na may malaking abstraction penalty. Ang default na halaga ay 14.

max-early-inliner-iteration
Limitasyon ng mga pag-ulit ng maagang inliner. Ito ay karaniwang nililimitahan ang bilang ng
nested indirect calls na maaaring malutas ng maagang inliner. Ang mga mas malalim na kadena ay nananatili pa rin
hinahawakan ng late inlining.

comdat-sharing-probability
Probability (sa porsyento) na ang C++ inline na function na may comdat visibility ay
ibinahagi sa maraming unit ng compilation. Ang default na halaga ay 20.

profile-func-internal-id
Isang parameter upang makontrol kung gagamit ng function internal id sa database ng profile
paghahanap. Kung 0 ang value, gumagamit ang compiler ng id na nakabatay sa function
pangalan ng assembler at filename, na ginagawang mas mapagparaya ang lumang data ng profile sa pinagmulan
mga pagbabago gaya ng muling pag-aayos ng function atbp. Ang default na halaga ay 0.

min-vect-loop-bound
Ang pinakamababang bilang ng mga pag-ulit kung saan ang mga loop ay hindi na-vector kapag
-free-vectorize Ginagamit. Ang bilang ng mga pag-ulit pagkatapos ng vectorization ay kailangang
ay mas malaki kaysa sa halagang tinukoy ng opsyong ito upang payagan ang vectorization. Ang
ang default na halaga ay 0.

gcse-cost-distance-ratio
Scaling factor sa pagkalkula ng maximum na distansya na maaaring ilipat ng isang expression
Mga pag-optimize ng GCSE. Ito ay kasalukuyang sinusuportahan lamang sa code hoisting pass.
Kung mas malaki ang ratio, mas agresibo ang code hoisting sa simple
expression, ibig sabihin, ang mga expression na may mas mura kaysa sa gcse-unrestricted-
gastos. Ang pagtukoy sa 0 ay hindi pinapagana ang pagtaas ng mga simpleng expression. Ang default na halaga ay
10.

gcse-unrestricted-cost
Gastos, halos sinusukat bilang halaga ng isang karaniwang pagtuturo sa makina, sa
kung aling mga pag-optimize ng GCSE ang hindi pumipigil sa distansya na maaaring ilakbay ng isang expression.
Ito ay kasalukuyang sinusuportahan lamang sa code hoisting pass. Ang mas mababang gastos,
ang mas agresibong code hoisting ay. Ang pagtukoy sa 0 ay nagbibigay-daan sa lahat ng mga expression na
maglakbay ng walang limitasyong mga distansya. Ang default na halaga ay 3.

max-hoist-depth
Ang lalim ng paghahanap sa dominator tree para sa mga expression na ipapataas. Ito ay ginagamit
upang maiwasan ang quadratic na pag-uugali sa hoisting algorithm. Ang halaga ng 0 ay hindi nililimitahan
sa paghahanap, ngunit maaaring pabagalin ang pagsasama-sama ng malalaking function. Ang default na halaga
ay 30.

max-tail-merge-comparisons
Ang maximum na halaga ng mga katulad na bb na ihahambing sa isang bb. Ito ay ginagamit upang maiwasan
parisukat na pag-uugali sa pagsasama ng buntot ng puno. Ang default na halaga ay 10.

max-tail-merge-iteration
Ang maximum na dami ng mga pag-ulit ng pagpasa sa function. Ito ay nakasanayan na
limitahan ang oras ng compilation sa tree tail merging. Ang default na halaga ay 2.

max-unrolled-insns
Ang maximum na bilang ng mga tagubilin na maaaring kailanganin ng isang loop na i-unroll. Kung isang loop
ay na-unroll, tinutukoy din ng parameter na ito kung gaano karaming beses ang loop code
nabuksan.

max-average-unrolled-insns
Ang maximum na bilang ng mga tagubilin na pinapanigang ng mga probabilidad ng kanilang pagpapatupad na
ang isang loop ay maaaring kailangang i-unroll. Kung ang isang loop ay na-unroll, ang parameter na ito din
tinutukoy kung ilang beses na-unroll ang loop code.

max-unroll-times
Ang maximum na bilang ng mga unrollings ng isang loop.

max-peeled-insns
Ang maximum na bilang ng mga tagubilin na maaaring i-peel ng isang loop. Kung isang loop
ay binalatan, tinutukoy din ng parameter na ito kung gaano karaming beses na binalatan ang loop code.

max-peel-times
Ang maximum na bilang ng mga pagbabalat ng isang solong loop.

max-peel-sanga
Ang maximum na bilang ng mga sanga sa mainit na landas sa pamamagitan ng peeled sequence.

max-completely-peeled-inns
Ang maximum na bilang ng mga ins ng isang ganap na peeled na loop.

max-completely-peel-times
Ang maximum na bilang ng mga pag-ulit ng isang loop na angkop para sa kumpletong pagbabalat.

max-completely-peel-loop-nest-depth
Ang pinakamataas na lalim ng isang loop nest na angkop para sa kumpletong pagbabalat.

max-unswitch-insns
Ang maximum na bilang ng mga insn ng isang hindi naka-switch na loop.

max-unswitch-level
Ang maximum na bilang ng mga branch na na-unswitch sa isang loop.

lim-mahal
Ang pinakamababang halaga ng isang mamahaling expression sa loop invariant motion.

iv-consider-all-candidates-bound
Nakatali sa bilang ng mga kandidato para sa mga variable ng induction, sa ibaba kung saan ang lahat ng mga kandidato
ay isinasaalang-alang para sa bawat paggamit sa induction variable optimizations. Kung meron
mas maraming kandidato kaysa dito, ang mga pinaka-kaugnay lamang ang itinuturing na iwasan
quadratic time complexity.

iv-max-considered-uses
Ang mga induction variable optimization ay sumusuko sa mga loop na naglalaman ng higit pang induction
variable na gamit.

iv-always-prune-cand-set-bound
Kung ang bilang ng mga kandidato sa hanay ay mas maliit kaysa sa halagang ito, palaging subukan
alisin ang mga hindi kinakailangang iv mula sa set kapag nagdaragdag ng bago.

scev-max-expr-size
Nakatali sa laki ng mga expression na ginamit sa scalar evolutions analyzer. Malaki
ang mga expression ay nagpapabagal sa analyzer.

scev-max-expr-complexity
Nakatali sa pagiging kumplikado ng mga expression sa scalar evolutions analyzer.
Ang mga kumplikadong expression ay nagpapabagal sa analyzer.

omega-max-vars
Ang maximum na bilang ng mga variable sa isang Omega constraint system. Ang default na halaga
ay 128.

omega-max-geqs
Ang maximum na bilang ng mga hindi pagkakapantay-pantay sa isang Omega constraint system. Ang default
ang halaga ay 256.

omega-max-eqs
Ang maximum na bilang ng mga pagkakapantay-pantay sa isang Omega constraint system. Ang default na halaga
ay 128.

omega-max-wild-cards
Ang maximum na bilang ng mga variable ng wildcard na kayang ipasok ng Omega solver.
Ang default na halaga ay 18.

laki ng omega-hash-table
Ang laki ng hash table sa Omega solver. Ang default na halaga ay 550.

mga omega-max-key
Ang pinakamaraming bilang ng mga susi na ginagamit ng Omega solver. Ang default na halaga ay 500.

omega-eliminate-redundant-constraints
Kapag nakatakda sa 1, gumamit ng mga mamahaling pamamaraan para maalis ang lahat ng kalabisan na mga hadlang. Ang
ang default na halaga ay 0.

vect-max-version-for-alignment-checks
Ang maximum na bilang ng mga run-time na pagsusuri na maaaring isagawa kapag gumagawa ng loop
versioning para sa alignment sa vectorizer.

vect-max-version-for-alias-checks
Ang maximum na bilang ng mga run-time na pagsusuri na maaaring isagawa kapag gumagawa ng loop
bersyon para sa alias sa vectorizer.

vect-max-peeling-for-alignment
Ang maximum na bilang ng mga loop peels upang mapahusay ang access alignment para sa vectorizer. Halaga
-1 ay nangangahulugang 'walang limitasyon'.

max-iteration-to-track
Ang maximum na bilang ng mga pag-ulit ng isang loop ang brute-force algorithm para sa pagsusuri
ng bilang ng mga pag-ulit ng loop na sinusubukang suriin.

hot-bb-count-ws-permille
Ang pangunahing bilang ng profile ng block ay itinuturing na mainit kung ito ay nag-aambag sa ibinigay
permillage (ie 0...1000) ng buong naka-profile na pagpapatupad.

hot-bb-frequency-fraction
Pumili ng fraction ng entry block frequency ng mga execution ng basic block in
Ang function na ibinigay sa pangunahing bloke ay kailangang ituring na mainit.

max-predicted-iteration
Ang maximum na bilang ng mga pag-ulit ng loop na hinuhulaan namin nang static. Ito ay kapaki-pakinabang sa
mga kaso kung saan ang isang function ay naglalaman ng isang loop na may kilalang bound at isa pang loop
na may hindi kilalang nakagapos. Ang kilalang bilang ng mga pag-ulit ay hinuhulaan nang tama, habang
ang hindi kilalang bilang ng mga pag-ulit ay nasa average sa humigit-kumulang 10. Nangangahulugan ito na ang loop
walang hangganan ay lumilitaw na artipisyal na malamig na may kaugnayan sa isa pa.

builtin-expect-probability
Kontrolin ang posibilidad ng expression na may tinukoy na halaga. Ito
parameter ay tumatagal ng isang porsyento (ibig sabihin 0 ... 100) bilang input. Ang default na posibilidad
ng 90 ay nakuha sa empiriko.

align-threshold
Pumili ng fraction ng pinakamaraming dalas ng mga execution ng isang basic block sa a
function upang ihanay ang pangunahing bloke.

align-loop-iteration
Ang isang loop na inaasahang umulit ng hindi bababa sa napiling bilang ng mga pag-ulit ay nakahanay.

tracer-dynamic-coverage
tracer-dynamic-coverage-feedback
Ginagamit ang value na ito upang limitahan ang pagbuo ng superblock kapag ang ibinigay na porsyento ng
sakop ang mga naisagawang tagubilin. Nililimitahan nito ang hindi kinakailangang pagpapalawak ng laki ng code.

Ang tracer-dynamic-coverage-feedback ginagamit lang ang parameter kapag feedback ng profile
mayroon pa. Ang mga totoong profile (kumpara sa mga statically estimated) ay
hindi gaanong balanse na nagpapahintulot sa threshold na maging mas malaking halaga.

tracer-max-code-growth
Itigil ang pagdoble ng buntot kapag naabot na ng paglago ng code ang ibinigay na porsyento. Ito ay
sa halip artipisyal na limitasyon, dahil karamihan sa mga duplicate ay inaalis sa ibang pagkakataon sa krus
tumatalon, kaya maaari itong itakda sa mas mataas na mga halaga kaysa sa nais na paglago ng code.

tracer-min-branch-ratio
Itigil ang reverse growth kapag ang reverse probability ng pinakamagandang edge ay mas mababa dito
threshold (sa porsyento).

tracer-min-branch-ratio
tracer-min-branch-ratio-feedback
Ihinto ang pasulong na paglago kung ang pinakamagandang gilid ay may posibilidad na mas mababa kaysa sa threshold na ito.

Katulad din sa tracer-dynamic-coverage dalawang value ang naroroon, isa para sa compilation
para sa feedback sa profile at isa para sa compilation na wala. Ang halaga para sa compilation
na may profile feedback ay kailangang maging mas konserbatibo (mas mataas) upang makagawa
epektibo ang tracer.

max-cse-path-length
Ang maximum na bilang ng mga pangunahing bloke sa landas na isinasaalang-alang ng CSE. Ang default ay 10.

max-cse-insns
Ang maximum na bilang ng mga tagubilin na pinoproseso ng CSE bago mag-flush. Ang default ay
1000.

ggc-min-expand
Gumagamit ang GCC ng isang garbage collector upang pamahalaan ang sarili nitong paglalaan ng memorya. Ang parameter na ito
tumutukoy sa pinakamababang porsyento kung saan dapat ang tambak ng basurero
pinapayagang palawakin sa pagitan ng mga koleksyon. Ang pag-tune nito ay maaaring mapabuti ang bilis ng compilation;
wala itong epekto sa pagbuo ng code.

Ang default ay 30% + 70% * (RAM/1GB) na may upper bound na 100% kapag RAM >= 1GB.
Kung magagamit ang "getrlimit", ang paniwala ng "RAM" ay ang pinakamaliit sa aktwal na RAM at
"RLIMIT_DATA" o "RLIMIT_AS". Kung hindi kayang kalkulahin ng GCC ang RAM sa isang partikular
platform, ginagamit ang lower bound na 30%. Ang pagtatakda ng parameter na ito at ggc-min-
bunton sa zero ay nagiging sanhi ng isang buong koleksyon na mangyari sa bawat pagkakataon. Ito ay
napakabagal, ngunit maaaring maging kapaki-pakinabang para sa pag-debug.

ggc-min-heapsize
Pinakamababang sukat ng tambak ng basurero bago ito magsimulang mag-abala sa pagkolekta
basura. Ang unang koleksyon ay nangyayari pagkatapos lumawak ang heap ng ggc-min-expand%
Lampas ggc-min-heapsize. Muli, ang pag-tune nito ay maaaring mapabuti ang bilis ng compilation, at
walang epekto sa pagbuo ng code.

Ang default ay ang mas maliit na RAM/8, RLIMIT_RSS, o isang limitasyon na sinusubukang tiyakin
na ang RLIMIT_DATA o RLIMIT_AS ay hindi lalampas, ngunit may mas mababang hangganan na 4096
(apat na megabytes) at isang upper bound na 131072 (128 megabytes). Kung hindi kaya ng GCC
para kalkulahin ang RAM sa isang partikular na platform, ginagamit ang lower bound. Pagtatakda nito
Ang parameter na napakalaki ay epektibong hindi pinapagana ang koleksyon ng basura. Ang pagtatakda nito
parameter at ggc-min-expand sa zero nagiging sanhi ng isang buong koleksyon na mangyari sa bawat
pagkakataon.

max-reload-search-insns
Ang maximum na bilang ng pag-reload ng pagtuturo ay dapat tumingin pabalik para sa katumbas
magparehistro. Ang pagtaas ng mga halaga ay nangangahulugan ng mas agresibong pag-optimize, ginagawa ang
pagtaas ng oras ng compilation na may malamang na bahagyang mas mahusay na pagganap. Ang default
ang halaga ay 100.

max-cselib-memory-locations
Ang maximum na bilang ng mga lokasyon ng memorya ay dapat isaalang-alang ng cselib.
Ang pagtaas ng mga halaga ay nangangahulugan ng mas agresibong pag-optimize, na ginagawa ang oras ng compilation
pagtaas na may malamang na bahagyang mas mahusay na pagganap. Ang default na halaga ay 500.

muling isaayos-block-duplicate
muling ayusin ang mga bloke-duplicate-feedback
Ginagamit ng basic block reordering pass para magpasya kung gagamit ng walang kondisyon
sangay o i-duplicate ang code sa destinasyon nito. Nadoble ang code kapag ito
ang tinantyang laki ay mas maliit kaysa sa halagang ito na pinarami ng tinantyang laki ng
walang kondisyong pagtalon sa mga hot spot ng programa.

Ang muling isaayos-block-duplicate-feedback ginagamit lang ang parameter kapag feedback ng profile
mayroon pa. Maaari itong itakda sa mas mataas na halaga kaysa reorder-block-duplicate mula noon
mas tumpak ang impormasyon tungkol sa mga hot spot.

max-sched-ready-insns
Ang maximum na bilang ng mga tagubilin na handa nang ibigay sa scheduler ay dapat
isaalang-alang sa anumang naibigay na oras sa unang pass sa pag-iskedyul. Pagtaas ng halaga
Nangangahulugan ng mas masusing paghahanap, na ginagawang tumaas ang oras ng compilation sa malamang
maliit na benepisyo. Ang default na halaga ay 100.

max-sched-region-blocks
Ang maximum na bilang ng mga block sa isang rehiyon na isasaalang-alang para sa interblock
pag-iiskedyul. Ang default na halaga ay 10.

max-pipeline-region-blocks
Ang maximum na bilang ng mga bloke sa isang rehiyon na isasaalang-alang para sa pipelining sa
selective scheduler. Ang default na halaga ay 15.

max-sched-region-insns
Ang maximum na bilang ng mga insn sa isang rehiyon na isasaalang-alang para sa interblock
pag-iiskedyul. Ang default na halaga ay 100.

max-pipeline-region-insns
Ang maximum na bilang ng mga insn sa isang rehiyon na isasaalang-alang para sa pipelining sa
selective scheduler. Ang default na halaga ay 200.

min-spec-prob
Ang pinakamababang posibilidad (sa mga porsyento) na maabot ang isang source block para sa interblock
speculative scheduling. Ang default na halaga ay 40.

max-sched-extend-regions-iters
Ang maximum na bilang ng mga pag-ulit sa pamamagitan ng CFG upang mapalawak ang mga rehiyon. Isang halaga ng 0 (ang
default) hindi pinapagana ang mga extension ng rehiyon.

max-sched-insn-conflict-delay
Ang maximum na pagkaantala ng conflict para sa isang insn na isasaalang-alang para sa speculative motion.
Ang default na halaga ay 3.

sched-spec-prob-cutoff
Ang pinakamaliit na posibilidad ng pagtatagumpay ng haka-haka (sa porsyento), kaya ang haka-haka
insn ay naka-iskedyul. Ang default na halaga ay 40.

sched-spec-state-edge-prob-cutoff
Ang pinakamababang posibilidad na mayroon ang isang gilid para mai-save ng scheduler ang estado nito
sa kabila nito. Ang default na halaga ay 10.

sched-mem-true-dep-cost
Minimal na distansya (sa mga cycle ng CPU) sa pagitan ng store at load na nagta-target sa parehong memory
mga lokasyon. Ang default na halaga ay 1.

selsched-max-lookahead
Ang maximum na laki ng lookahead window ng selective scheduling. Ito ay isang lalim
ng paghahanap para sa magagamit na mga tagubilin. Ang default na halaga ay 50.

selsched-max-sched-times
Ang maximum na bilang ng beses na ang isang pagtuturo ay naka-iskedyul sa panahon ng pumipili
pag-iiskedyul. Ito ang limitasyon sa bilang ng mga pag-ulit kung saan ang
ang pagtuturo ay maaaring pipeline. Ang default na halaga ay 2.

selsched-max-insns-to-rename
Ang maximum na bilang ng pinakamahusay na mga tagubilin sa handa na listahan na isinasaalang-alang para sa
pagpapalit ng pangalan sa selective scheduler. Ang default na halaga ay 2.

sms-min-sc
Ang pinakamababang halaga ng bilang ng yugto na nabubuo ng swing modulo scheduler. Ang
ang default na halaga ay 2.

max-last-value-rtl
Ang maximum na laki na sinusukat bilang bilang ng mga RTL na maaaring i-record sa isang expression
sa combiner para sa isang pseudo register bilang huling kilalang halaga ng register na iyon. Ang
ang default ay 10000.

max-combine-insns
Ang maximum na bilang ng mga tagubilin na sinusubukang pagsamahin ng RTL combiner. Ang default
ang halaga ay 2 sa -Og at 4 kung hindi man.

integer-share-limit
Ang mga maliliit na integer constant ay maaaring gumamit ng shared data structure, na binabawasan ang compiler's
paggamit ng memorya at pagtaas ng bilis nito. Itinatakda nito ang maximum na halaga ng isang nakabahagi
integer pare-pareho. Ang default na halaga ay 256.

ssp-buffer-size
Ang pinakamababang laki ng mga buffer (ibig sabihin, mga array) na tumatanggap ng proteksyon sa stack smashing
kailan -fstack-proteksyon Ginagamit.

Ang default na ito bago ang Ubuntu 10.10 ay "8". Sa kasalukuyan ito ay "4", upang madagdagan ang
bilang ng mga function na protektado ng stack protector.

min-size-for-stack-sharing
Ang pinakamababang laki ng mga variable na nakikilahok sa pagbabahagi ng stack slot kapag hindi
pag-optimize. Ang default na halaga ay 32.

max-jump-thread-duplication-stmts
Pinakamataas na bilang ng mga pahayag na pinapayagan sa isang bloke na kailangang ma-duplicate kung kailan
threading jumps.

max-fields-for-field-sensitive
Pinakamataas na bilang ng mga field sa isang istraktura na ginagamot sa paraang sensitibo sa field habang
pagsusuri ng pointer. Ang default ay zero para sa -O0 at -O1, at 100 para sa -Os, -O2, at
-O3.

prefetch-latency
Tantyahin ang average na bilang ng mga tagubilin na isinasagawa bago ang prefetch
matatapos. Ang layo na prefetched sa unahan ay proporsyonal sa pare-parehong ito.
Ang pagtaas ng bilang na ito ay maaari ring humantong sa mas kaunting mga stream na na-prefetch (tingnan
sabay-sabay-prefetches).

sabay-sabay-prefetches
Maximum na bilang ng mga prefetch na maaaring tumakbo nang sabay.

l1-cache-line-size
Ang laki ng linya ng cache sa L1 cache, sa mga byte.

l1-laki ng cache
Ang laki ng L1 cache, sa kilobytes.

l2-laki ng cache
Ang laki ng L2 cache, sa kilobytes.

min-insn-to-prefetch-ratio
Ang pinakamababang ratio sa pagitan ng bilang ng mga tagubilin at bilang ng mga prefetch
upang paganahin ang prefetching sa isang loop.

prefetch-min-insn-to-mem-ratio
Ang pinakamababang ratio sa pagitan ng bilang ng mga tagubilin at bilang ng memorya
mga sanggunian upang paganahin ang prefetching sa isang loop.

use-canonical-types
Kung ang compiler ay dapat gumamit ng "canonical" type system. Bilang default, ito
dapat palaging 1, na gumagamit ng mas mahusay na panloob na mekanismo para sa paghahambing
mga uri sa C++ at Objective-C++. Gayunpaman, kung ang mga bug sa canonical type system ay
nagiging sanhi ng mga pagkabigo sa compilation, itakda ang value na ito sa 0 para i-disable ang mga canonical na uri.

switch-conversion-max-branch-ratio
Tumanggi ang conversion ng switch initialization na gumawa ng mga array na mas malaki kaysa
switch-conversion-max-branch-ratio beses ang bilang ng mga sangay sa switch.

max-partial-antic-length
Maximum na haba ng partial antic set na nakalkula sa panahon ng tree partial
redundancy elimination optimization (-free-pre) kapag nag-optimize sa -O3 at sa itaas.
Para sa ilang uri ng source code ang pinahusay na partial redundancy elimination
maaaring tumakas ang pag-optimize, na ubusin ang lahat ng memorya na magagamit sa host
makina. Ang parameter na ito ay nagtatakda ng limitasyon sa haba ng mga set na kinukuwenta,
na pumipigil sa pag-uugaling tumakas. Pagtatakda ng value na 0 para sa parameter na ito
nagbibigay-daan sa isang walang limitasyong haba ng hanay.

sccvn-max-scc-size
Pinakamataas na laki ng isang malakas na konektadong bahagi (SCC) sa panahon ng pagproseso ng SCCVN. Kung
naabot ang limitasyong ito, ang pagpoproseso ng SCCVN para sa buong function ay hindi tapos at
hindi pinagana ang mga optimization depende dito. Ang default na maximum na laki ng SCC ay
10000.

sccvn-max-alias-queries-per-access
Maximum na bilang ng mga query sa alias-oracle na ginagawa namin kapag naghahanap ng mga redundancy
para sa mga load at tindahan. Kung ang limitasyon na ito ay naabot ang paghahanap ay aborted at ang load o
hindi itinuturing na redundant ang tindahan. Ang bilang ng mga query ay algorithmically
limitado sa bilang ng mga tindahan sa lahat ng mga landas mula sa pag-load hanggang sa pagpasok ng function.
Ang default na maximum na bilang ng mga query ay 1000.

ira-max-loops-num
Gumagamit ang IRA ng regional register allocation bilang default. Kung ang isang function ay naglalaman ng higit pa
mga loop kaysa sa numerong ibinigay ng parameter na ito, sa pinakamaraming ibinigay na numero ng
ang pinakamadalas na isinasagawang mga loop ay bumubuo ng mga rehiyon para sa paglalaan ng rehistro ng rehiyon.
Ang default na halaga ng parameter ay 100.

ira-max-conflict-table-size
Kahit na ang IRA ay gumagamit ng isang sopistikadong algorithm upang i-compress ang conflict table, ang
Ang talahanayan ay maaari pa ring mangailangan ng labis na dami ng memorya para sa malalaking pag-andar. Kung ang
conflict table para sa isang function ay maaaring higit pa sa laki sa MB na ibinigay nito
parameter, ang register allocator sa halip ay gumagamit ng mas mabilis, mas simple, at mas mababang-
kalidad na algorithm na hindi nangangailangan ng pagbuo ng pseudo-register conflict table.
Ang default na halaga ng parameter ay 2000.

ira-loop-reserved-regs
Maaaring gamitin ang IRA upang suriin ang mas tumpak na presyon ng pagpaparehistro sa mga loop para sa mga desisyon
para ilipat ang mga loop invariant (tingnan -O3). Ang bilang ng magagamit na mga rehistro na nakalaan para sa
ang ilang iba pang mga layunin ay ibinibigay ng parameter na ito. Ang default na halaga ng
parameter ay 2, na kung saan ay ang minimal na bilang ng mga rehistro na kailangan ng tipikal
mga tagubilin. Ang halagang ito ay ang pinakamahusay na natagpuan mula sa maraming mga eksperimento.

lra-inheritance-ebb-probability-cutoff
Sinusubukan ng LRA na gamitin muli ang mga value na na-reload sa mga rehistro sa mga susunod na insn. Ito
optimization ay tinatawag na mana. Ginagamit ang EBB bilang isang rehiyon para gawin ito
pag-optimize. Tinutukoy ng parameter ang kaunting fall-through edge na posibilidad sa
porsyento na ginamit upang magdagdag ng BB sa mana na EBB sa LRA. Ang default na halaga ng
parameter ay 40. Ang halaga ay pinili mula sa maraming run ng SPEC2000 sa x86-64.

loop-invariant-max-bbs-in-loop
Maaaring maging napakamahal ng loop invariant motion, sa oras ng compilation at in
dami ng kinakailangang compile-time na memorya, na may napakalaking mga loop. Mga loop na may higit pa
ang mga pangunahing bloke kaysa sa parameter na ito ay hindi magkakaroon ng loop invariant motion optimization
ginanap sa kanila. Ang default na halaga ng parameter ay 1000 para sa -O1 at 10000
para -O2 at sa itaas.

loop-max-datarefs-for-datadeps
Ang pagbuo ng mga dapendencies ng data ay mahal para sa napakalaking mga loop. Ang parameter na ito
nililimitahan ang bilang ng mga reference ng data sa mga loop na isinasaalang-alang para sa data
pagsusuri ng pagtitiwala. Ang malalaking loop na ito ay hindi pinangangasiwaan ng mga optimization na gumagamit
mga dependency ng data ng loop. Ang default na halaga ay 1000.

max-vartrack-size
Nagtatakda ng maximum na bilang ng mga puwang ng hash table na gagamitin sa daloy ng data ng pagsubaybay sa variable
pagsusuri ng anumang function. Kung ang limitasyong ito ay lumampas sa variable na pagsubaybay sa
pinagana ang mga takdang-aralin, ang pagsusuri para sa function na iyon ay muling susubukan nang wala ito, pagkatapos
inaalis ang lahat ng debug insns mula sa function. Kung ang limitasyon ay lumampas kahit na wala
debug insns, var tracking analysis ay ganap na hindi pinagana para sa function.
Ang pagtatakda ng parameter sa zero ay ginagawa itong walang limitasyon.

max-vartrack-expr-depth
Nagtatakda ng maximum na bilang ng mga antas ng recursion kapag sinusubukang i-map ang mga variable na pangalan o
i-debug ang mga pansamantalang halaga sa mga expression ng halaga. Kinakakalakal nito ang oras ng compilation para sa higit pa
kumpletong impormasyon sa pag-debug. Kung ito ay itinakda nang masyadong mababa, ang mga expression ng halaga ay
magagamit at maaaring katawanin sa impormasyon sa pag-debug ay maaaring hindi magamit;
ang pagtatakda nito nang mas mataas ay maaaring magbigay-daan sa compiler na makahanap ng mas kumplikadong pag-debug
expression, ngunit maaaring lumaki ang oras ng pag-compile at paggamit ng memorya. Ang default ay 12.

min-nondebug-insn-uid
Gumamit ng mga uid simula sa parameter na ito para sa nondebug insns. Ang hanay sa ibaba ng
ang parameter ay eksklusibong nakalaan para sa mga debug insns na ginawa ni
-fvar-tracking-assignments, ngunit ang mga debug insns ay maaaring makakuha ng (hindi magkakapatong) na mga uid sa itaas
ito kung ang nakalaan na hanay ay naubos na.

ipa-sra-ptr-growth-factor
Pinapalitan ng IPA-SRA ang isang pointer sa isang pinagsama-samang may isa o higit pang mga bagong parameter lamang
kapag ang kanilang pinagsama-samang laki ay mas mababa o katumbas ng ipa-sra-ptr-growth-factor beses ang
laki ng orihinal na parameter ng pointer.

sra-max-scalarization-size-Ospeed
sra-max-scalarization-size-Osize
Ang dalawang Scalar Reduction of Aggregates pass (SRA at IPA-SRA) ay naglalayong palitan
scalar na bahagi ng mga pinagsama-samang gamit ang mga independiyenteng scalar variable. Ang mga ito
kinokontrol ng mga parameter ang maximum na laki, sa mga unit ng imbakan, ng pinagsama-samang kung saan ay
isinasaalang-alang para sa kapalit kapag nag-compile para sa bilis (sra-max-scalarization-size-
Ospeed) o sukat (sra-max-scalarization-size-Osize) ayon sa pagkakabanggit.

tm-max-aggregate-size
Kapag gumagawa ng mga kopya ng thread-local na variable sa isang transaksyon, ang parameter na ito
Tinutukoy ang laki sa mga byte pagkatapos kung saan ang mga variable ay nai-save sa pag-log
mga function na taliwas sa pag-save/pag-restore ng mga pares ng pagkakasunud-sunod ng code. Ang pagpipiliang ito lamang
nalalapat kapag ginagamit -fgnu-tm.

graphite-max-nb-scop-params
Upang maiwasan ang mga exponential effect sa Graphite loop transforms, ang bilang ng
ang mga parameter sa isang Static Control Part (SCoP) ay may hangganan. Ang default na halaga ay 10
mga parameter. Isang variable na ang halaga ay hindi alam sa oras ng compilation at tinukoy
sa labas ng isang SCoP ay isang parameter ng SCoP.

graphite-max-bbs-per-function
Upang maiwasan ang mga exponential effect sa pagtuklas ng mga SCoP, ang laki ng mga function
nasuri sa pamamagitan ng Graphite ay may hangganan. Ang default na halaga ay 100 pangunahing mga bloke.

loop-block-tile-size
Loop blocking o strip mining transforms, naka-enable sa -floop-block or
-floop-strip-mine, i-strip minahan ang bawat loop sa loop nest sa pamamagitan ng isang ibinigay na bilang ng
mga pag-ulit. Maaaring baguhin ang haba ng strip gamit ang loop-block-tile-size
parameter. Ang default na halaga ay 51 pag-ulit.

loop-unroll-jam-size
Tukuyin ang unroll factor para sa -floop-unroll-and-jam opsyon. Ang default na halaga
ay 4.

loop-unroll-jam-depth
Tukuyin ang dimensyon na ia-unroll (nagbibilang mula sa pinaka-inner loop) para sa
-floop-unroll-and-jam. Ang default na halaga ay 2.

ipa-cp-value-list-size
Sinusubukan ng IPA-CP na subaybayan ang lahat ng posibleng halaga at uri na ipinasa sa isang function
parameter upang maipalaganap ang mga ito at maisagawa ang devirtualization. ipa-cp-value-
laki ng listahan ay ang maximum na bilang ng mga value at uri na iniimbak nito sa bawat isang pormal
parameter ng isang function.

ipa-cp-eval-threshold
Kinakalkula ng IPA-CP ang sarili nitong marka ng pag-clone ng profitability heuristics at gumaganap
ang mga pagkakataon sa pag-clone na may mga marka na lumampas ipa-cp-eval-threshold.

ipa-cp-recursion-penalty
Porsiyento na parusa ang matatanggap ng mga recursive function kapag nasuri ang mga ito
para sa pag-clone.

ipa-cp-single-call-penalty
Ang porsyento ng mga function ng parusa na naglalaman ng isang tawag sa isa pang function ay
matanggap kapag sila ay nasuri para sa pag-clone.

ipa-max-agg-item
May kakayahan din ang IPA-CP na magpalaganap ng ilang halaga ng scalar na ipinasa sa isang
pinagsama-sama ipa-max-agg-item kinokontrol ang maximum na bilang ng mga naturang halaga bawat isa
parameter

ipa-cp-loop-hint-bonus
Kapag natukoy ng IPA-CP na ang isang kandidato sa pag-clone ay gagawa ng bilang ng
mga pag-ulit ng isang loop na kilala, nagdaragdag ito ng bonus ng ipa-cp-loop-hint-bonus sa
puntos ng kakayahang kumita ng kandidato.

ipa-cp-array-index-hint-bonus
Kapag natukoy ng IPA-CP na ang isang kandidato sa pag-clone ay gagawa ng index ng isang array
kilala ang pag-access, nagdaragdag ito ng bonus ng ipa-cp-array-index-hint-bonus sa
puntos ng kakayahang kumita ng kandidato.

ipa-max-aa-steps
Sa panahon ng pagsusuri nito ng mga function body, ang IPA-CP ay gumagamit ng alias analysis upang
mga halaga ng track na itinuturo ng mga parameter ng function. Para hindi masyadong magtagal
pag-aaral ng malalaking function, ito ay sumusuko at isaalang-alang ang lahat ng memory clobbered pagkatapos
pagsusuri ipa-max-aa-steps mga pahayag na nagbabago ng memorya.

lto-partition
Tukuyin ang nais na bilang ng mga partisyon na ginawa sa panahon ng WHOPR compilation. Ang
ang bilang ng mga partisyon ay dapat lumampas sa bilang ng mga CPU na ginamit para sa pagsasama-sama. Ang
ang default na halaga ay 32.

lto-minpartition
Sukat ng minimal na partition para sa WHOPR (sa tinantyang mga tagubilin). Pinipigilan nito
mga gastos sa paghahati ng napakaliit na mga programa sa napakaraming partisyon.

cxx-max-namespaces-for-diagnostic-help
Ang maximum na bilang ng mga namespace na kumonsulta para sa mga mungkahi kapag naghahanap ng pangalan ng C++
nabigo para sa isang identifier. Ang default ay 1000.

sink-frequency-threshold
Ang maximum na relatibong dalas ng pagpapatupad (sa mga porsyento) ng target na bloke
kaugnay sa orihinal na bloke ng isang pahayag upang payagan ang paglubog ng pahayag ng a
pahayag. Ang mas malalaking numero ay nagreresulta sa mas agresibong paglubog ng pahayag. Ang
ang default na halaga ay 75. Ang isang maliit na positibong pagsasaayos ay inilapat para sa mga pahayag na may
memory operand bilang mga mas kumikita kaya lumubog.

max-stores-to-sink
Ang maximum na bilang ng mga pares ng conditional store na maaaring malunod. Itakda sa 0 kung
alinman sa vectorization (-free-vectorize) o kung-conversion (-ftree-loop-if-convert)
ay hindi pinagana. Ang default ay 2.

allow-store-data-races
Payagan ang mga optimizer na magpakilala ng mga bagong lahi ng data sa mga tindahan. Itakda sa 1 upang payagan,
kung hindi ay sa 0. Ang pagpipiliang ito ay pinagana bilang default sa antas ng pag-optimize -Ofast.

case-values-threshold
Ang pinakamaliit na bilang ng iba't ibang mga halaga kung saan pinakamahusay na gumamit ng jump-table
sa halip na isang puno ng kondisyonal na mga sanga. Kung ang value ay 0, gamitin ang default para sa
ang makina. Ang default ay 0.

puno-reassoc-lapad
Itakda ang maximum na bilang ng mga tagubilin na naisakatuparan sa reassociated tree.
Ino-override ng parameter na ito ang mga heuristic na umaasa sa target na ginagamit bilang default kung hindi
zero na halaga.

sched-pressure-algorithm
Pumili sa pagitan ng dalawang magagamit na pagpapatupad ng -fsched-presyon. Algorithm 1
ay ang orihinal na pagpapatupad at mas malamang na pigilan ang mga tagubilin mula sa
inaayos muli. Ang Algorithm 2 ay idinisenyo upang maging isang kompromiso sa pagitan ng
medyo konserbatibong diskarte na kinuha ng algorithm 1 at ang medyo agresibo
diskarte na kinuha ng default na scheduler. Ito ay higit na umaasa sa pagkakaroon ng isang
regular na file ng rehistro at tumpak na mga klase ng presyon ng rehistro. Tingnan mo haifa-sched.c
sa mga source ng GCC para sa higit pang mga detalye.

Ang default na pagpipilian ay depende sa target.

max-slsr-cand-scan
Itakda ang maximum na bilang ng mga kasalukuyang kandidato na isinasaalang-alang kapag naghahanap ng a
batayan para sa isang bagong kandidato sa pagbabawas ng lakas ng straight-line.

asan-global
I-enable ang buffer overflow detection para sa mga global na bagay. Ang ganitong uri ng proteksyon ay
pinagana bilang default kung gumagamit ka -fsanitize=address opsyon. Upang huwag paganahin ang global
paggamit ng proteksyon ng mga bagay --param asan-globals=0.

asan-stack
Paganahin ang buffer overflow detection para sa mga stack na bagay. Ang ganitong uri ng proteksyon ay
pinagana bilang default kapag ginagamit-fsanitize=address. Upang huwag paganahin ang paggamit ng proteksyon ng stack
--param asan-stack=0 pagpipilian.

asan-instrument-reads
I-enable ang buffer overflow detection para sa memory reads. Ang ganitong uri ng proteksyon ay
pinagana bilang default kapag ginagamit -fsanitize=address. Upang huwag paganahin ang memory reads
paggamit ng proteksyon --param asan-instrument-reads=0.

asan-instrumento-nagsusulat
I-enable ang buffer overflow detection para sa memory writes. Ang ganitong uri ng proteksyon ay
pinagana bilang default kapag ginagamit -fsanitize=address. Upang huwag paganahin ang memory writes
paggamit ng proteksyon --param asan-instrument-writes=0 pagpipilian.

asan-memintrin
Paganahin ang pagtuklas para sa mga built-in na function. Ang ganitong uri ng proteksyon ay pinagana ng
default kapag ginagamit -fsanitize=address. Upang hindi paganahin ang built-in na proteksyon ng mga function
gamitin --param asan-memintrin=0.

asan-use-after-return
Paganahin ang pagtuklas ng paggamit-pagkatapos-pagbalik. Ang ganitong uri ng proteksyon ay pinagana ng
default kapag ginagamit -fsanitize=address opsyon. Upang huwag paganahin ang paggamit-pagkatapos-pagbalik
paggamit ng pagtuklas --param asan-use-after-return=0.

asan-instrumentation-with-call-threshold
Kung ang bilang ng mga memory access sa function na ginagamit ay mas malaki o katumbas ng
ang numerong ito, gumamit ng mga callback sa halip na mga inline na pagsusuri. Hal upang huwag paganahin ang inline na code
gamitin --param asan-instrumentation-with-call-threshold=0.

chkp-max-ctor-size
Ang mga static na konstruktor na nabuo ng Pointer Bounds Checker ay maaaring maging napakalaki at
makabuluhang taasan ang oras ng pag-compile sa antas ng pag-optimize -O1 at mas mataas. Ito
Ang parameter ay isang maximum na bilang ng mga pahayag sa iisang nabuong constructor.
Ang default na halaga ay 5000.

max-fsm-thread-path-insns
Pinakamataas na bilang ng mga tagubilin na kokopyahin kapag nagdo-duplicate ng mga bloke sa isang may hangganang estado
automaton jump thread path. Ang default ay 100.

max-fsm-thread-length
Pinakamataas na bilang ng mga pangunahing bloke sa isang finite state automaton jump thread path. Ang
ang default ay 10.

max-fsm-thread-paths
Pinakamataas na bilang ng mga bagong jump thread na lilikhain para sa isang finite state automat.
Ang default ay 50.

Options Pagkontrol ang Preprocessor
Kinokontrol ng mga opsyong ito ang C preprocessor, na pinapatakbo sa bawat C source file bago ang aktwal
compilation.

Kung gagamitin mo ang -E opsyon, walang ginagawa maliban sa preprocessing. Ilan sa mga opsyong ito
magkaroon ng kahulugan lamang kasama ng -E dahil nagiging sanhi sila ng preprocessor na output
hindi angkop para sa aktwal na compilation.

-Wp,opsyon
Maaari mong gamitin ang -Wp,opsyon upang i-bypass ang driver ng compiler at ipasa opsyon direkta sa pamamagitan ng
sa preprocessor. Kung opsyon naglalaman ng mga kuwit, ito ay nahahati sa maraming mga opsyon sa
ang mga kuwit. Gayunpaman, maraming mga opsyon ang binago, isinalin o binibigyang-kahulugan ng
compiler driver bago maipasa sa preprocessor, at -Wp pilit na nilalampasan
yugtong ito. Ang direktang interface ng preprocessor ay hindi dokumentado at napapailalim sa
baguhin, kaya hangga't maaari dapat mong iwasan ang paggamit -Wp at hayaan ang driver na hawakan ang
mga pagpipilian sa halip.

-Xpreprocessor opsyon
Pumasa opsyon bilang isang opsyon sa preprocessor. Magagamit mo ito para magbigay ng system-
mga partikular na opsyon sa preprocessor na hindi nakikilala ng GCC.

Kung gusto mong ipasa ang isang opsyon na nangangailangan ng argumento, dapat mong gamitin -Xpreprocessor
dalawang beses, isang beses para sa opsyon at isang beses para sa argumento.

-no-integrated-cpp
Magsagawa ng preprocessing bilang isang hiwalay na pass bago mag-compile. Bilang default, gumaganap ang GCC
preprocessing bilang pinagsamang bahagi ng input tokenization at parsing. Kung ang pagpipiliang ito
ay ibinigay, ang naaangkop na front end ng wika (cc1, cc1plus, O cc1obj para sa C, C++,
at Objective-C, ayon sa pagkakabanggit) ay sa halip ay hinihingi ng dalawang beses, isang beses para sa preprocessing lamang
at isang beses para sa aktwal na compilation ng preprocessed input. Maaaring maging kapaki-pakinabang ang opsyong ito
kaugnay sa -B or -pambalot mga pagpipilian upang tukuyin ang isang kahaliling preprocessor o
magsagawa ng karagdagang pagproseso ng source ng program sa pagitan ng normal na preprocessing at
compilation.

-D pangalan
Paunang tukuyin pangalan bilang isang macro, na may kahulugan 1.

-D pangalan=depinisyon
Ang mga nilalaman ng depinisyon ay tokenized at pinoproseso na parang sila ay lumitaw noong
ikatlong yugto ng pagsasalin sa a # tukuyin direktiba. Sa partikular, ang magiging kahulugan ay
pinutol ng mga naka-embed na newline na character.

Kung gumagamit ka ng preprocessor mula sa isang shell o shell-like program na maaaring kailanganin mo
upang gamitin ang quoting syntax ng shell upang protektahan ang mga character tulad ng mga puwang na may a
kahulugan sa shell syntax.

Kung nais mong tukuyin ang isang macro na tulad ng function sa command line, isulat ang argumento nito
listahan na may nakapalibot na panaklong bago ang katumbas na tanda (kung mayroon). Ang mga panaklong ay
makabuluhan sa karamihan ng mga shell, kaya kakailanganin mong banggitin ang opsyon. Sa sh at csh,
-D'pangalan(args...)=depinisyon' gawa.

-D at -U Pinoproseso ang mga opsyon sa pagkakasunud-sunod na ibinigay sa command line. Lahat
-imacros file at -isama file ang mga pagpipilian ay naproseso pagkatapos ng lahat -D at -U mga pagpipilian.

-U pangalan
Kanselahin ang anumang dating kahulugan ng pangalan, alinman sa built in o binigyan ng a -D pagpipilian.

-undef
Huwag paunang tukuyin ang anumang mga macro na partikular sa system o partikular sa GCC. Ang pamantayang paunang natukoy
nananatiling tinukoy ang mga macro.

-I dir
Idagdag ang direktoryo dir sa listahan ng mga direktoryo na hahanapin para sa mga file ng header.
Mga direktoryo na pinangalanan ni -I Hinahanap bago ang karaniwang sistema isama ang mga direktoryo.
Kung ang direktoryo dir ay isang karaniwang sistema na may kasamang direktoryo, ang opsyon ay hindi papansinin
tiyakin na ang default na order sa paghahanap para sa mga direktoryo ng system at ang espesyal na paggamot
ng mga header ng system ay hindi natalo. Kung dir nagsisimula sa "=", pagkatapos ay ang "=" ay magiging
pinalitan ng sysroot prefix; tingnan mo --sysroot at -isysroot.

-o file
Isulat ang output sa file. Ito ay kapareho ng pagtukoy file bilang pangalawang hindi opsyon
pagtatalo sa cpp. gcc ay may ibang interpretasyon ng pangalawang argumentong hindi opsyon,
kaya dapat mong gamitin -o upang tukuyin ang output file.

-Pader
Ino-on ang lahat ng opsyonal na babala na kanais-nais para sa normal na code. Sa kasalukuyan ito
is -Wcomment, -Wtrigraphs, -Wmultichar at isang babala tungkol sa integer promotion na nagdudulot ng a
pagbabago ng sign sa "#if" na mga expression. Tandaan na marami sa mga babala ng preprocessor
ay naka-on bilang default at walang mga opsyon upang kontrolin ang mga ito.

-Wcomment
-Mga komento
Magbabala sa tuwing may sequence ng pagsisimula ng komento /* lilitaw sa a /* komento, o kahit kailan a
lumilitaw ang backslash-newline sa a // komento. (Ang parehong mga anyo ay may parehong epekto.)

-Wtrigraphs
Karamihan sa mga trigraph sa mga komento ay hindi makakaapekto sa kahulugan ng programa. Gayunpaman, a
trigraph na bubuo ng isang nakatakas na bagong linya (??/ sa dulo ng isang linya) maaari, sa pamamagitan ng
pagbabago kung saan nagsisimula o nagtatapos ang komento. Samakatuwid, ang mga trigraph lamang ang bubuo
ang mga nakatakas na bagong linya ay gumagawa ng mga babala sa loob ng isang komento.

Ang pagpipiliang ito ay ipinahiwatig ng -Pader. Kung -Pader ay hindi ibinigay, ang pagpipiliang ito ay pinagana pa rin
maliban kung pinagana ang mga trigraph. Upang makakuha ng trigraph conversion nang walang mga babala, ngunit kumuha
ang iba pang mga -Pader mga babala, gamitin -trigraphs -Pader -Wno-trigraphs.

-Wtradisyonal
Magbabala tungkol sa ilang partikular na konstruksyon na kumikilos nang iba sa tradisyonal at ISO C. Gayundin
bigyan ng babala ang tungkol sa mga konstruksyon ng ISO C na walang tradisyonal na katumbas na C, at may problema
mga konstruksyon na dapat iwasan.

-Wundef
Magbabala sa tuwing may makikitang identifier na hindi isang macro sa isang #kung directive,
sa labas ng tinukoy. Ang mga naturang identifier ay pinapalitan ng zero.

-Wunused-macros
Babala tungkol sa mga macro na tinukoy sa pangunahing file na hindi ginagamit. Ang isang macro ay ginamit kung ito ay
pinalawak o nasubok para sa pagkakaroon ng hindi bababa sa isang beses. Magbabala rin ang preprocessor kung
ang macro ay hindi nagamit sa oras na ito ay muling tinukoy o hindi natukoy.

Mga built-in na macro, macro na tinukoy sa command line, at macro na tinukoy sa kasama
hindi binabalaan ang mga file.

tandaan: Kung ang isang macro ay aktwal na ginagamit, ngunit ginagamit lamang sa mga nilaktawan na conditional block, kung gayon
Iuulat ito ng CPP bilang hindi nagamit. Upang maiwasan ang babala sa ganoong kaso, maaari kang pagbutihin
ang saklaw ng kahulugan ng macro sa pamamagitan ng, halimbawa, ang paglipat nito sa unang nilaktawan
harangan. Bilang kahalili, maaari kang magbigay ng dummy na paggamit sa isang bagay tulad ng:

#if tinukoy ang_macro_causing_the_warning
#endif

-Wendif-label
Magbabala sa tuwing an #iba o isang #endif ay sinusundan ng text. Ito ay kadalasang nangyayari sa
code ng form

#kung FOO
...
#ibang FOO
...
#endif FOO

Ang pangalawa at pangatlong "FOO" ay dapat nasa mga komento, ngunit kadalasan ay wala sa mas lumang mga programa.
Naka-on ang babalang ito bilang default.

-Werror
Gawing mahirap na mga pagkakamali ang lahat ng babala. Ang source code na nagpapalitaw ng mga babala ay magiging
tinanggihan.

-Wsystem-header
Mga babala sa isyu para sa code sa mga header ng system. Ang mga ito ay karaniwang hindi nakakatulong sa paghahanap
mga bug sa iyong sariling code, samakatuwid ay pinigilan. Kung ikaw ay responsable para sa sistema
library, maaaring gusto mong makita sila.

-w Pigilan ang lahat ng babala, kabilang ang mga ini-isyu ng GNU CPP bilang default.

-pedantic
Ibigay ang lahat ng mandatoryong diagnostic na nakalista sa pamantayang C. Ang ilan sa kanila ay naiwan
out bilang default, dahil madalas silang nag-trigger sa hindi nakakapinsalang code.

-pedantic-errors
Ibigay ang lahat ng mandatoryong diagnostic, at gawing mga error ang lahat ng mandatoryong diagnostic.
Kabilang dito ang mga mandatoryong diagnostic na hindi iniisyu ng GCC -pedantic ngunit tinatrato bilang
mga babala

-M Sa halip na i-output ang resulta ng preprocessing, mag-output ng panuntunang angkop para sa gumawa
naglalarawan sa mga dependencies ng pangunahing source file. Ang preprocessor ay naglalabas ng isa
gumawa panuntunan na naglalaman ng object file name para sa source file na iyon, isang colon, at ang mga pangalan
ng lahat ng kasamang file, kabilang ang mga nanggaling -isama or -imacros utos-
mga pagpipilian sa linya.

Maliban kung tahasang tinukoy (na may -MT or -MQ), ang pangalan ng object file ay binubuo ng
pangalan ng source file na may anumang suffix na pinalitan ng object file suffix at kahit ano
inalis ang mga nangungunang bahagi ng direktoryo. Kung mayroong maraming kasamang mga file kung gayon ang panuntunan ay
hatiin sa ilang linya gamit ang \-bagong linya. Ang panuntunan ay walang mga utos.

Hindi pinipigilan ng opsyong ito ang debug na output ng preprocessor, gaya ng -dM. Para maiwasan
paghahalo ng naturang debug na output sa mga panuntunan sa dependency na dapat mong tahasang tukuyin ang
dependency output file na may -MF, o gumamit ng environment variable tulad ng
DEPENDENCE_OUTPUT. Ang debug na output ay ipapadala pa rin sa regular na output stream bilang
Normal.

Pagdaan -M sa driver ay nagpapahiwatig -E, at pinipigilan ang mga babala nang may implicit -w.

-MM katulad -M ngunit huwag banggitin ang mga file ng header na matatagpuan sa mga direktoryo ng header ng system,
o mga file ng header na kasama, direkta o hindi direkta, mula sa naturang header.

Ito ay nagpapahiwatig na ang pagpili ng mga angle bracket o double quote sa isang # isama
Hindi mismo tinutukoy ng direktiba kung lalabas ang header na iyon -MM
output ng dependency. Ito ay isang bahagyang pagbabago sa semantics mula sa GCC na bersyon 3.0 at
mas maaga.

-MF file
Kapag ginamit sa -M or -MM, ay tumutukoy sa isang file kung saan isusulat ang mga dependencies. Kung hindi -MF
Ang switch ay binibigyan ng preprocessor na nagpapadala ng mga patakaran sa parehong lugar na ipapadala nito
preprocessed na output.

Kapag ginamit sa mga pagpipilian sa driver -MD or -MMD, -MF override ang default dependency
output file.

-MG Kasabay ng isang opsyon tulad ng -M humihiling ng pagbuo ng dependency, -MG ipinapalagay
Ang mga nawawalang file ng header ay nabuong mga file at idinaragdag ang mga ito sa listahan ng dependency nang wala
pagtataas ng error. Ang dependency filename ay direktang kinuha mula sa "#include"
direktiba nang hindi naghahanda ng anumang landas. -MG pinipigilan din ang preprocessed na output, bilang a
ang nawawalang file ng header ay nagiging walang silbi.

Ang tampok na ito ay ginagamit sa awtomatikong pag-update ng mga makefile.

-MP Ang opsyong ito ay nagtuturo sa CPP na magdagdag ng huwad na target para sa bawat dependency maliban sa
pangunahing file, na nagiging sanhi ng bawat isa na umaasa sa wala. Gumagana ang mga dummy na panuntunang ito sa mga error
gumawa nagbibigay kung aalisin mo ang mga file ng header nang hindi ina-update ang Makefile ipareha.

Ito ay karaniwang output:

pagsubok.o: pagsubok.c pagsubok.h

pagsubok.h:

-MT target
Baguhin ang target ng panuntunang inilabas ng pagbuo ng dependency. Bilang default, tumatagal ang CPP
ang pangalan ng pangunahing input file, tinatanggal ang anumang mga bahagi ng direktoryo at anumang suffix ng file
tulad ng .c, at idinadagdag ang karaniwang object suffix ng platform. Ang resulta ay ang target.

An -MT itatakda ng opsyon ang target na eksaktong string na iyong tinukoy. Kung gusto mo
maramihang mga target, maaari mong tukuyin ang mga ito bilang isang argumento sa -MT, o gumamit ng maramihan
-MT mga pagpipilian.

Halimbawa, -MT '$(objpfx)foo.o' maaaring magbigay

$(objpfx)foo.o: foo.c

-MQ target
Katulad ng -MT, ngunit sinipi nito ang anumang mga character na espesyal na Gawin.
-MQ '$(objpfx)foo.o' Binibigyan

$$(objpfx)foo.o: foo.c

Ang default na target ay awtomatikong sinipi, na para bang ito ay ibinigay kasama -MQ.

-MD -MD ay katumbas ng -M -MF file, maliban doon -E ay hindi ipinahiwatig. Ang driver
determinado file batay sa kung ang isang -o ang pagpipilian ay ibinigay. Kung ito ay, ang driver ay gumagamit nito
argumento ngunit may panlapi ng .d, kung hindi, ito ay kukuha ng pangalan ng input file,
inaalis ang anumang bahagi ng direktoryo at suffix, at inilalapat ang a .d hulapi.

If -MD ay ginagamit kasabay ng -E, anuman -o switch ay nauunawaan upang tukuyin ang
dependency output file, ngunit kung ginamit nang wala -E, bawat isa -o ay nauunawaan upang tukuyin ang a
target na object file.

Dahil sa -E ay hindi ipinahiwatig, -MD ay maaaring magamit upang makabuo ng isang dependency output file bilang a
side-effect ng proseso ng compilation.

-MMD
katulad -MD maliban sa banggitin lamang ang mga file ng header ng gumagamit, hindi ang mga file ng header ng system.

-fpch-deps
Kapag gumagamit ng mga precompiled na header, ang flag na ito ay magiging sanhi ng dependency-output na mga flag
ilista din ang mga file mula sa mga dependency ng precompiled header. Kung hindi tinukoy lamang
ang precompiled na header ang ililista at hindi ang mga file na ginamit sa paggawa nito
dahil hindi kinokonsulta ang mga file na iyon kapag ginamit ang isang precompiled na header.

-fpch-preprocess
Ang pagpipiliang ito ay nagbibigay-daan sa paggamit ng isang precompiled na header kasama ng -E. Nagsingit ito ng isang espesyal
"#pragma", "#pragma GCC pch_preprocess "filename"" sa output upang markahan ang lugar
kung saan natagpuan ang precompiled header, at ang filename. Kailan -fpreprocessed ay nasa
gamitin, kinikilala ng GCC ang "#pragma" na ito at nilo-load ang PCH.

Naka-off ang opsyong ito bilang default, dahil ang resultang preprocessed na output ay tanging
talagang angkop bilang input sa GCC. Ito ay nakabukas sa pamamagitan ng -save-temps.

Hindi mo dapat isulat itong "#pragma" sa sarili mong code, ngunit ligtas na i-edit ang
filename kung available ang PCH file sa ibang lokasyon. Ang filename ay maaaring
absolute o maaaring nauugnay ito sa kasalukuyang direktoryo ng GCC.

-x c
-x c ++
-x layunin-c
-x assembler-with-cpp
Tukuyin ang pinagmulang wika: C, C++, Objective-C, o assembly. Wala itong kinalaman
na may pagsunod sa mga pamantayan o mga extension; pinipili lang nito kung aling base syntax ang pupuntahan
asahan. Kung wala kang ibibigay sa mga opsyong ito, ihihinuha ng cpp ang wika mula sa
extension ng source file: .c, . Cc, .m, O .S. Ilang iba pang karaniwang extension para sa
Kinikilala din ang C++ at pagpupulong. Kung hindi nakikilala ng cpp ang extension, ito
ituturing ang file bilang C; ito ang pinaka-generic na mode.

tandaan: Ang mga nakaraang bersyon ng cpp ay tinanggap a -lang opsyon na pinili pareho ang
wika at ang antas ng pagsunod sa mga pamantayan. Ang pagpipiliang ito ay inalis, dahil
sumasalungat ito sa -l pagpipilian.

-std=pamantayan
-ansi
Tukuyin ang pamantayan kung saan dapat sumunod ang code. Sa kasalukuyan, alam ng CPP ang tungkol sa C
at mga pamantayan ng C++; ang iba ay maaaring idagdag sa hinaharap.

pamantayan maaaring isa sa:

"c90"
"c89"
"iso9899:1990"
Ang pamantayang ISO C mula 1990. c90 ay ang nakagawiang shorthand para sa bersyong ito ng
ang pamantayan.

Ang -ansi ang opsyon ay katumbas ng -std=c90.

"iso9899:199409"
Ang 1990 C standard, gaya ng amyendahan noong 1994.

"iso9899:1999"
"c99"
"iso9899:199x"
"c9x"
Ang binagong pamantayang ISO C, na inilathala noong Disyembre 1999. Bago ilathala, ito
ay kilala bilang C9X.

"iso9899:2011"
"c11"
"c1x"
Ang binagong pamantayang ISO C, na inilathala noong Disyembre 2011. Bago ilathala, ito
ay kilala bilang C1X.

"gnu90"
"gnu89"
Ang 1990 C standard at mga extension ng GNU. Ito ang default.

"gnu99"
"gnu9x"
Ang 1999 C standard at mga extension ng GNU.

"gnu11"
"gnu1x"
Ang 2011 C standard at mga extension ng GNU.

"c++98"
Ang 1998 ISO C++ standard plus amendments.

"gnu++98"
Katulad ng -std=c++98 kasama ang mga extension ng GNU. Ito ang default para sa C++ code.

-Ako- Hatiin ang isamang landas. Anumang mga direktoryo na tinukoy sa -I mga pagpipilian bago -Ako- ay
hinanap lamang ang mga header na hiniling na may "#include "file""; hindi sila hinahanap
"#isamafile>". Kung ang mga karagdagang direktoryo ay tinukoy sa -I mga pagpipilian pagkatapos ng
-Ako-, ang mga direktoryo na iyon ay hinahanap para sa lahat # isama mga direktiba

Sa karagdagan, -Ako- pinipigilan ang paggamit ng direktoryo ng kasalukuyang direktoryo ng file bilang
ang unang direktoryo ng paghahanap para sa "#include "file"". Ang pagpipiliang ito ay hindi na ginagamit.

-nostdinc
Huwag maghanap sa mga karaniwang direktoryo ng system para sa mga file ng header. Tanging ang mga direktoryo
tinukoy mo kasama ng -I mga opsyon (at ang direktoryo ng kasalukuyang file, kung
naaangkop) ay hinahanap.

-nostdinc++
Huwag maghanap ng mga file ng header sa mga karaniwang direktoryo na partikular sa C++, ngunit gawin pa rin
hanapin ang iba pang karaniwang mga direktoryo. (Ginagamit ang opsyong ito kapag binubuo ang C++
aklatan.)

-isama file
paraan file na parang "#include "file"" ang lumabas bilang unang linya ng pangunahing source
file. Gayunpaman, hinanap ng unang direktoryo file ay gumagana ang preprocessor
direktoryo sa halip of ang direktoryo na naglalaman ng pangunahing source file. Kung hindi natagpuan
doon, hinahanap ito sa natitirang bahagi ng "#include "..."" search chain bilang
Normal.

Kung maraming -isama Ang mga pagpipilian ay ibinigay, ang mga file ay kasama sa pagkakasunud-sunod ng mga ito
lalabas sa command line.

-imacros file
Eksakto tulad ng -isama, maliban sa anumang output na ginawa sa pamamagitan ng pag-scan file ay itinapon
malayo. Ang mga macro na tinukoy nito ay nananatiling tinukoy. Pinapayagan ka nitong makuha ang lahat ng mga macro
mula sa isang header nang hindi rin pinoproseso ang mga deklarasyon nito.

Lahat ng mga file na tinukoy ni -imacros ay naproseso bago ang lahat ng mga file na tinukoy ng -isama.

-idirafter dir
paghahanap dir para sa mga file ng header, ngunit gawin ito pagkatapos lahat ng mga direktoryo na tinukoy sa -I at ang
Ang mga karaniwang direktoryo ng system ay naubos na. dir ay itinuturing bilang isang sistema kasama
direktoryo. Kung dir nagsisimula sa "=", pagkatapos ay ang "=" ay papalitan ng sysroot
unlapi; tingnan mo --sysroot at -isysroot.

-iprefix unlapi
Tukuyin unlapi bilang unlapi para sa kasunod -iwithprefix mga pagpipilian. Kung ang unlapi
kumakatawan sa isang direktoryo, dapat mong isama ang pangwakas /.

-iwithprefix dir
-iwithprefixbefore dir
Mag-aplay dir sa prefix na tinukoy dati na may -iprefix, at idagdag ang resulta
direktoryo sa isama ang landas ng paghahanap. -iwithprefixbefore inilalagay ito sa parehong lugar -I
gagawin; -iwithprefix inilalagay kung saan -idirafter ay.

-isysroot dir
Ang pagpipiliang ito ay tulad ng --sysroot opsyon, ngunit nalalapat lamang sa mga file ng header (maliban sa
Mga target ni Darwin, kung saan nalalapat ito sa parehong mga file ng header at mga aklatan). Tingnan ang
--sysroot opsyon para sa karagdagang impormasyon.

-imultilib dir
paggamit dir bilang isang subdirectory ng direktoryo na naglalaman ng mga header ng C++ na tukoy sa target.

-isystem dir
paghahanap dir para sa mga file ng header, pagkatapos ng lahat ng mga direktoryo na tinukoy ni -I ngunit bago ang
karaniwang mga direktoryo ng system. Markahan ito bilang isang direktoryo ng system, upang maging pareho ito
espesyal na pagtrato gaya ng inilalapat sa mga karaniwang direktoryo ng system. Kung dir nagsisimula
na may "=", pagkatapos ay ang "=" ay papalitan ng sysroot prefix; tingnan mo --sysroot at
-isysroot.

-iquote dir
paghahanap dir para lamang sa mga file ng header na hiniling na may "#include "file""; hindi sila
hinanap ang "#includefile>", bago ang lahat ng mga direktoryo na tinukoy ni -I at bago ang
karaniwang mga direktoryo ng system. Kung dir nagsisimula sa "=", pagkatapos ay ang "=" ay papalitan ng
ang sysroot prefix; tingnan mo --sysroot at -isysroot.

-fdirectives-lamang
Kapag nag-preprocess, pangasiwaan ang mga direktiba, ngunit huwag palawakin ang mga macro.

Ang pag-uugali ng opsyon ay nakasalalay sa -E at -fpreprocessed mga pagpipilian.

may -E, ang preprocessing ay limitado sa paghawak ng mga direktiba gaya ng "#define",
"#ifdef", at "#error". Iba pang mga pagpapatakbo ng preprocessor, tulad ng macro expansion at
hindi ginaganap ang trigraph conversion. Bilang karagdagan, ang -DD ang opsyon ay hayagang
pinagana.

may -fpreprocessed, ang predefinition ng command line at karamihan sa mga builtin na macro ay
may kapansanan. Ang mga macro gaya ng "__LINE__", na nakadepende sa konteksto, ay pinangangasiwaan
karaniwan. Ito ay nagbibigay-daan sa pagsasama-sama ng mga file na dati nang naproseso gamit ang "-E
-fdirectives-lamang".

Sa pareho -E at -fpreprocessed, ang mga patakaran para sa -fpreprocessed unahin. Ito
nagbibigay-daan sa buong preprocessing ng mga file na dati nang na-preprocess gamit ang "-E
-fdirectives-lamang".

-fdollars-in-identifiers
Tanggapin $ sa mga identifier.

-fextended-identifiers
Tanggapin ang mga pangkalahatang pangalan ng character sa mga identifier. Ang pagpipiliang ito ay pinagana bilang default
para sa C99 (at mas bago sa mga karaniwang bersyon ng C) at C++.

-fno-canonical-system-header
Kapag nag-preprocess, huwag paikliin ang mga path ng header ng system gamit ang canonicalization.

-fpreprocessed
Ipahiwatig sa preprocessor na ang input file ay na-preprocess na. Ito
pinipigilan ang mga bagay tulad ng macro expansion, trigraph conversion, escaped newline splicing,
at pagproseso ng karamihan sa mga direktiba. Kinikilala at inaalis pa rin ng preprocessor
mga komento, upang maipasa mo ang isang file na na-preprocess na gamit ang -C sa compiler na wala
mga problema. Sa mode na ito ang pinagsamang preprocessor ay higit pa sa isang tokenizer
para sa mga dulo sa harap.

-fpreprocessed ay implicit kung ang input file ay may isa sa mga extension .i, .ii or .mi.
Ito ang mga extension na ginagamit ng GCC para sa mga preprocessed na file na ginawa ni -save-temps.

-ftabstop=lapad
Itakda ang distansya sa pagitan ng mga tab stop. Nakakatulong ito sa preprocessor na mag-ulat ng tamang column
mga numero sa mga babala o error, kahit na lumitaw ang mga tab sa linya. Kung ang halaga ay mas mababa
kaysa sa 1 o higit sa 100, ang opsyon ay binabalewala. Ang default ay 8.

-fdebug-cpp
Ang pagpipiliang ito ay kapaki-pakinabang lamang para sa pag-debug ng GCC. Kapag ginamit sa -E, nagtatapon ng pag-debug
impormasyon tungkol sa mga mapa ng lokasyon. Ang bawat token sa output ay nauunahan ng dump ng
ang mapa na kinabibilangan nito. Ang dump ng mapa na naglalaman ng lokasyon ng isang token
maaring maging:

{"P":F ;"F":F ;"L": ;"C": ;"S": ;"M": ;"E": ,"loc": }

Kapag ginamit nang wala -E, walang epekto ang opsyong ito.

-ftrack-macro-expansion[=antas]
Subaybayan ang mga lokasyon ng mga token sa mga macro expansion. Pinapayagan nito ang compiler na maglabas
diagnostic tungkol sa kasalukuyang macro expansion stack kapag may naganap na error sa compilation
isang macro expansion. Ang paggamit ng opsyong ito ay ginagawang kumonsumo ang preprocessor at ang compiler
higit pang memorya. Ang antas Maaaring gamitin ang parameter upang piliin ang antas ng katumpakan ng token
pagsubaybay sa lokasyon kaya binabawasan ang pagkonsumo ng memorya kung kinakailangan. Halaga 0 of
antas i-de-activate ang opsyong ito na parang hindi -ftrack-macro-expansion ay naroroon sa
ang command line. Halaga 1 sinusubaybayan ang mga lokasyon ng mga token sa isang degradong mode para sa kapakanan ng
minimal na memory overhead. Sa mode na ito lahat ng mga token na nagreresulta mula sa pagpapalawak ng isang
argument ng isang function-like macro ay may parehong lokasyon. Halaga 2 sinusubaybayan ang mga token
ganap na mga lokasyon. Ang halagang ito ay ang pinaka-gutom sa memorya. Kapag ibinigay ang pagpipiliang ito
walang argumento, ang default na halaga ng parameter ay 2.

Tandaan na ang "-ftrack-macro-expansion=2" ay naka-activate bilang default.

-fexec-charset=charset
Itakda ang execution character set, na ginagamit para sa string at character constants. Ang default
ay UTF-8. charset maaaring anumang encoding na sinusuportahan ng "iconv" library ng system
gawain.

-fwide-exec-charset=charset
Itakda ang wide execution character set, na ginagamit para sa wide string at character constants.
Ang default ay UTF-32 o UTF-16, alinman ang tumutugma sa lapad ng "wchar_t". Bilang
sa -fexec-charset, charset maaaring maging anumang encoding na sinusuportahan ng "iconv" ng system
gawain sa silid-aklatan; gayunpaman, magkakaroon ka ng mga problema sa mga pag-encode na hindi akma
eksakto sa "wchar_t".

-finput-charset=charset
Itakda ang input character set, na ginagamit para sa pagsasalin mula sa character set ng input
file sa source character set na ginamit ng GCC. Kung hindi tinukoy ng lokal, o GCC
hindi makuha ang impormasyong ito mula sa lokal, ang default ay UTF-8. Ito ay maaaring
na-override ng alinman sa locale o opsyong command-line na ito. Sa kasalukuyan ang utos-
inuuna ang opsyon sa linya kung may salungatan. charset maaaring maging anumang encoding
suportado ng "iconv" library routine ng system.

-fworking-directory
Paganahin ang pagbuo ng mga linemarker sa preprocessor na output na hahayaan ang compiler
alamin ang kasalukuyang gumaganang direktoryo sa oras ng preprocessing. Kapag ang pagpipiliang ito ay
pinagana, ang preprocessor ay maglalabas, pagkatapos ng paunang linemarker, ng pangalawang linemarker
kasama ang kasalukuyang gumaganang direktoryo na sinusundan ng dalawang slash. Gagamitin ito ng GCC
direktoryo, kapag ito ay naroroon sa preprocessed input, bilang ang direktoryo na inilabas bilang
ang kasalukuyang gumaganang direktoryo sa ilang mga format ng impormasyon sa pag-debug. Ang pagpipiliang ito ay
implicitly na pinagana kung ang impormasyon sa pag-debug ay pinagana, ngunit maaari itong pigilan sa
ang negadong anyo -fno-working-directory. Kung ang -P ang bandila ay naroroon sa utos
linya, ang opsyong ito ay walang epekto, dahil walang "#line" na mga direktiba ang ilalabas.

-fno-show-column
Huwag mag-print ng mga numero ng column sa mga diagnostic. Maaaring kailanganin ito kung ang mga diagnostic ay
ini-scan ng isang program na hindi nakakaintindi sa mga numero ng column, gaya ng
dejagnu.

-A predicate=sagutin
Gumawa ng paninindigan gamit ang panaguri predicate at sagutin sagutin. Ang form na ito ay
mas gusto sa mas lumang anyo -A predicate(sagutin), na sinusuportahan pa rin, dahil ito
ay hindi gumagamit ng mga espesyal na character ng shell.

-A -predicate=sagutin
Kanselahin ang isang assertion na may panaguri predicate at sagutin sagutin.

-dCHARS
CHARS ay isang sequence ng isa o higit pa sa mga sumusunod na character, at hindi dapat
pinangungunahan ng isang espasyo. Ang ibang mga character ay binibigyang-kahulugan ng compiler proper, o
nakalaan para sa mga hinaharap na bersyon ng GCC, at sa gayon ay tahimik na binabalewala. Kung tinukoy mo
mga character na ang pag-uugali ay sumasalungat, ang resulta ay hindi natukoy.

M Sa halip na ang normal na output, bumuo ng isang listahan ng # tukuyin mga direktiba para sa lahat ng
mga macro na tinukoy sa panahon ng pagpapatupad ng preprocessor, kabilang ang paunang natukoy
mga macro. Nagbibigay ito sa iyo ng paraan upang malaman kung ano ang paunang natukoy sa iyong bersyon ng
ang preprocessor. Ipagpalagay na wala kang file foo.h, ang utos

pindutin ang foo.h; cpp -dM foo.h

ipapakita ang lahat ng paunang natukoy na macro.

Kung gumagamit ka ng -dM wala ang -E pagpipilian, -dM ay binibigyang-kahulugan bilang kasingkahulugan ng
-fdump-rtl-mach.

D katulad M maliban sa dalawang aspeto: ginagawa nito hindi isama ang mga paunang natukoy na macro, at ito
output kapwa ang # tukuyin mga direktiba at ang resulta ng preprocessing. Parehong uri
ng output pumunta sa karaniwang output file.

N katulad D, ngunit naglalabas lamang ng mga macro name, hindi ang kanilang mga pagpapalawak.

I Pagbubuhos # isama mga direktiba bilang karagdagan sa resulta ng preprocessing.

U katulad D maliban na ang mga macro lamang na pinalawak, o nasubok ang pagkatukoy
sa preprocessor direktiba, ay output; ang output ay naantala hanggang sa paggamit o
pagsubok ng macro; at #undef Ang mga direktiba ay output din para sa mga nasubok na macro ngunit
hindi natukoy sa panahong iyon.

-P Pigilan ang pagbuo ng mga linemarker sa output mula sa preprocessor. Ito ay maaaring
kapaki-pakinabang kapag nagpapatakbo ng preprocessor sa isang bagay na hindi C code, at ipapadala
sa isang programa na maaaring malito ng mga linemarker.

-C Huwag itapon ang mga komento. Ang lahat ng mga komento ay ipinapasa sa output file, maliban
para sa mga komento sa mga naprosesong direktiba, na tinatanggal kasama ng direktiba.

Dapat kang maging handa para sa mga side effect kapag gumagamit -C; nagiging sanhi ito ng preprocessor sa
ituring ang mga komento bilang mga token sa kanilang sariling karapatan. Halimbawa, lumalabas ang mga komento sa
simula ng kung ano ang magiging isang direktiba na linya ay may epekto ng paggawa ng linyang iyon sa isang
ordinaryong linya ng pinagmulan, dahil ang unang token sa linya ay hindi na a #.

-CC Huwag itapon ang mga komento, kabilang ang habang macro expansion. Ito ay tulad ng -C, maliban
na ang mga komentong nakapaloob sa loob ng mga macro ay ipinapasa din sa output file kung saan
ang macro ay pinalawak.

Bilang karagdagan sa mga side-effects ng -C opsyon, ang -CC ang opsyon ay nagiging sanhi ng lahat ng C++-style
mga komento sa loob ng isang macro na iko-convert sa C-style na mga komento. Ito ay upang maiwasan mamaya
paggamit ng macro na iyon mula sa hindi sinasadyang pagkomento sa natitirang linya ng pinagmulan.

Ang -CC Ang opsyon ay karaniwang ginagamit upang suportahan ang mga komento ng lint.

-tradisyonal-cpp
Subukang gayahin ang pag-uugali ng mga makalumang C preprocessors, kumpara sa ISO C
mga preprocessor.

-trigraphs
Iproseso ang mga pagkakasunud-sunod ng trigraph. Ito ay tatlong-character na pagkakasunud-sunod, lahat ay nagsisimula sa
??, na tinukoy ng ISO C upang tumayo para sa mga solong character. Halimbawa, ??/ nakatayo
para \, Kaya '??/n' ay isang character constant para sa isang bagong linya. Bilang default, binabalewala ng GCC
trigraph, ngunit sa mga mode na sumusunod sa pamantayan, kino-convert nito ang mga ito. Tingnan ang -std at -ansi
mga pagpipilian.

Ang siyam na trigraph at ang mga kapalit nito ay

Trigraph: ??( ??) ??< ??> ??= ??/ ??' ??! ??-
Kapalit: [ ] { } # \ ^ | ~

-mapa muli
Paganahin ang espesyal na code upang gumana sa paligid ng mga file system na pinahihintulutan lamang ang napakaikling file
mga pangalan, tulad ng MS-DOS.

- Tumulong
--target-tulong
Mag-print ng text na naglalarawan sa lahat ng mga opsyon sa command-line sa halip na mag-preprocess ng kahit ano.

-v Verbose mode. I-print ang numero ng bersyon ng GNU CPP sa simula ng pagpapatupad, at
iulat ang huling anyo ng isamang landas.

-H I-print ang pangalan ng bawat header file na ginamit, bilang karagdagan sa iba pang normal na aktibidad. Bawat isa
pangalan ay naka-indent upang ipakita kung gaano kalalim ang # isama stack ito. Precompiled na header
ang mga file ay naka-print din, kahit na sila ay napag-alamang hindi wasto; isang di-wastong precompiled
header file ay naka-print na may ...x at isang wastong may ...! .

-version
--bersyon
I-print ang numero ng bersyon ng GNU CPP. Sa isang gitling, magpatuloy sa preprocess gaya ng normal.
Sa dalawang gitling, lumabas kaagad.

Pagdaan Options sa ang Assembler
Maaari mong ipasa ang mga opsyon sa assembler.

-Wa,opsyon
Pumasa opsyon bilang isang opsyon sa assembler. Kung opsyon naglalaman ng mga kuwit, ito ay nahahati
sa maraming mga opsyon sa mga kuwit.

-Xassembler opsyon
Pumasa opsyon bilang isang opsyon sa assembler. Magagamit mo ito para magbigay ng partikular sa system
mga opsyon sa assembler na hindi nakikilala ng GCC.

Kung gusto mong ipasa ang isang opsyon na nangangailangan ng argumento, dapat mong gamitin -Xassembler dalawang beses,
isang beses para sa opsyon at isang beses para sa argumento.

Options para Pag-uugnay
Naglalaro ang mga opsyong ito kapag ini-link ng compiler ang mga object file sa isang executable
output file. Ang mga ito ay walang kahulugan kung ang tagatala ay hindi gumagawa ng isang hakbang na link.

object-file-name
Ang isang pangalan ng file na hindi nagtatapos sa isang espesyal na kinikilalang suffix ay itinuturing na pangalan ng isang
object file o library. (Ang mga file ng object ay nakikilala mula sa mga aklatan ng linker
ayon sa mga nilalaman ng file.) Kung ang pag-link ay tapos na, ang mga object file na ito ay ginagamit bilang
input sa linker.

-c
-S
-E Kung ang alinman sa mga opsyon na ito ay ginagamit, ang linker ay hindi tatakbo, at object file name
hindi dapat gamitin bilang argumento.

-fuse-ld=bfd
Gamitin ang bfd linker sa halip na ang default na linker.

-fuse-ld=ginto
Gamitin ang ginto linker sa halip na ang default na linker.

-laklatan
-l aklatan
Hanapin ang library na pinangalanan aklatan kapag nagli-link. (Ang pangalawang alternatibo kasama ang
library bilang isang hiwalay na argumento ay para lamang sa pagsunod sa POSIX at hindi inirerekomenda.)

Ito ay gumagawa ng isang pagkakaiba kung saan sa command isulat mo ang pagpipiliang ito; naghahanap ang linker
at pinoproseso ang mga aklatan at object file sa pagkakasunud-sunod ng mga ito ay tinukoy. kaya, foo.o
-lz bar.o naghahanap sa library z pagkatapos ng file foo.o ngunit bago bar.o. Kung bar.o ay tumutukoy sa
mga function sa z, maaaring hindi ma-load ang mga function na iyon.

Ang linker ay naghahanap ng karaniwang listahan ng mga direktoryo para sa library, na sa totoo lang
isang file na pinangalanan aklatan.a. Pagkatapos ay ginagamit ng linker ang file na ito na parang tinukoy
tiyak sa pamamagitan ng pangalan.

Ang mga direktoryo na hinanap ay may kasamang ilang karaniwang mga direktoryo ng system at anuman na ikaw
tukuyin na may -L.

Karaniwan ang mga file na matatagpuan sa ganitong paraan ay mga file ng library---archive file na ang mga miyembro ay
object file. Pinangangasiwaan ng linker ang isang archive file sa pamamagitan ng pag-scan dito para sa mga miyembro
na tumutukoy sa mga simbolo na hanggang ngayon ay isinangguni ngunit hindi tinukoy. Ngunit kung ang
file na natagpuan ay isang ordinaryong object file, ito ay naka-link sa karaniwang paraan. Ang
tanging pagkakaiba sa pagitan ng paggamit ng isang -l opsyon at pagtukoy ng pangalan ng file ay iyon -l
nakapaligid aklatan sa lib at .a at naghahanap ng ilang direktoryo.

-lobjc
Kailangan mo itong espesyal na kaso ng -l opsyon upang maiugnay ang isang Objective-C o
Layunin-C++ na programa.

-nostartfiles
Huwag gamitin ang karaniwang system startup file kapag nagli-link. Ang karaniwang sistema
ang mga aklatan ay karaniwang ginagamit, maliban kung -nostdlib or -nodefaultlibs Ginagamit.

-nodefaultlibs
Huwag gamitin ang mga karaniwang library ng system kapag nagli-link. Tanging ang mga aklatan na iyong tinukoy
ay ipinapasa sa linker, at mga opsyon na tumutukoy sa linkage ng mga library ng system, tulad
as -static-libgcc or -shared-libgcc, ay hindi pinapansin. Ang mga karaniwang startup file ay ginagamit
karaniwan, maliban kung -nostartfiles Ginagamit.

Ang compiler ay maaaring bumuo ng mga tawag sa "memcmp", "memset", "memcpy" at "memmove". Ang mga ito
ang mga entry ay karaniwang nireresolba ng mga entry sa libc. Ang mga entry point na ito ay dapat
ibinibigay sa pamamagitan ng ilang iba pang mekanismo kapag tinukoy ang opsyong ito.

-nostdlib
Huwag gamitin ang karaniwang system startup file o library kapag nagli-link. Walang startup
mga file at tanging ang mga aklatan na iyong tinukoy ang ipinapasa sa linker, at mga pagpipilian
pagtukoy ng linkage ng mga library ng system, tulad ng -static-libgcc or -shared-libgcc,
ay hindi pinansin.

Ang compiler ay maaaring bumuo ng mga tawag sa "memcmp", "memset", "memcpy" at "memmove". Ang mga ito
ang mga entry ay karaniwang nireresolba ng mga entry sa libc. Ang mga entry point na ito ay dapat
ibinibigay sa pamamagitan ng ilang iba pang mekanismo kapag tinukoy ang opsyong ito.

Isa sa mga karaniwang aklatan na nilalampasan -nostdlib at -nodefaultlibs is libgcc.aSa
library ng mga panloob na subroutine na ginagamit ng GCC para malampasan ang mga partikular na pagkukulang
mga makina, o mga espesyal na pangangailangan para sa ilang wika.

Sa karamihan ng mga kaso, kailangan mo libgcc.a kahit na gusto mong iwasan ang iba pang karaniwang mga aklatan.
Sa madaling salita, kapag tinukoy mo -nostdlib or -nodefaultlibs dapat karaniwan
tukuyin -lgcc din. Tinitiyak nito na wala kang hindi nalutas na mga sanggunian
panloob na GCC library subroutine. (Ang isang halimbawa ng naturang panloob na subroutine ay
"__main", ginagamit upang matiyak na tinatawag ang mga C++ constructor.)

-pie
Gumawa ng isang posisyon na independiyenteng maipapatupad sa mga target na sumusuporta dito. Para predictable
mga resulta, dapat mo ring tukuyin ang parehong hanay ng mga opsyon na ginamit para sa compilation (-fpie,
-fPIE, o mga suboption ng modelo) kapag tinukoy mo ang opsyon sa linker na ito.

-walang-pie
Huwag gumawa ng posisyong independiyenteng maipapatupad.

-rdynamic
Ipasa ang bandila -export-dynamic sa ELF linker, sa mga target na sumusuporta dito. Ito
inutusan ang linker na idagdag ang lahat ng mga simbolo, hindi lamang ang mga ginamit, sa dynamic na simbolo
mesa. Ang opsyon na ito ay kailangan para sa ilang paggamit ng "dlopen" o upang payagan ang pagkuha
backtraces mula sa loob ng isang programa.

-s Alisin ang lahat ng talahanayan ng simbolo at impormasyon sa paglilipat mula sa executable.

-static
Sa mga system na sumusuporta sa dynamic na pag-link, pinipigilan nito ang pag-link sa nakabahagi
mga aklatan. Sa ibang mga system, walang epekto ang opsyong ito.

-ibinahagi
Gumawa ng isang nakabahaging bagay na maaaring maiugnay sa iba pang mga bagay upang bumuo ng isang
maipapatupad. Hindi lahat ng system ay sumusuporta sa opsyong ito. Para sa mga mahuhulaan na resulta, kailangan mo
tukuyin din ang parehong hanay ng mga opsyon na ginamit para sa compilation (-fpic, -fPIC, o modelo
suboptions) kapag tinukoy mo itong linker na opsyon.[1]

-shared-libgcc
-static-libgcc
Sa mga sistemang nagbibigay libgcc bilang isang shared library, pinipilit ng mga opsyong ito ang paggamit ng
alinman sa nakabahagi o static na bersyon, ayon sa pagkakabanggit. Kung walang nakabahaging bersyon ng libgcc ay
na binuo noong na-configure ang compiler, walang epekto ang mga opsyong ito.

Mayroong ilang mga sitwasyon kung saan dapat gamitin ng isang application ang nakabahagi libgcc
sa halip na ang static na bersyon. Ang pinakakaraniwan sa mga ito ay kapag ang aplikasyon
gustong maghagis at makahuli ng mga exception sa iba't ibang shared library. Kung ganoon,
bawat isa sa mga aklatan pati na rin ang application mismo ay dapat gumamit ng nakabahagi libgcc.

Samakatuwid, awtomatikong nagdaragdag ang mga driver ng G++ at GCJ -shared-libgcc sa tuwing magtatayo ka
isang shared library o isang pangunahing executable, dahil karaniwang ginagamit ng mga program na C++ at Java
exceptions, kaya ito ang tamang gawin.

Kung, sa halip, ginagamit mo ang driver ng GCC upang lumikha ng mga nakabahaging aklatan, maaari mong makita na sila
ay hindi palaging naka-link sa ibinahagi libgcc. Kung mahahanap ng GCC, sa configuration nito
oras, na mayroon kang non-GNU linker o GNU linker na hindi sumusuporta sa opsyon
--eh-frame-hdr, nili-link nito ang nakabahaging bersyon ng libgcc sa mga shared library ni
default. Kung hindi, sinasamantala nito ang linker at ino-optimize ang pagli-link
gamit ang nakabahaging bersyon ng libgcc, nagli-link sa static na bersyon ng libgcc ni
default. Nagbibigay-daan ito sa mga pagbubukod na magpalaganap sa pamamagitan ng mga nakabahaging aklatan, nang wala
pagkakaroon ng mga gastos sa paglipat sa oras ng pag-load ng library.

Gayunpaman, kung ang isang library o pangunahing executable ay dapat na magtapon o makahuli ng mga pagbubukod, ikaw
dapat itong i-link gamit ang G++ o GCJ driver, ayon sa naaangkop para sa mga wikang ginagamit sa
program, o gamit ang opsyon -shared-libgcc, upang ito ay naka-link sa ibinahagi
libgcc.

-static-libasan
Kapag ang -fsanitize=address Ang opsyon ay ginagamit upang i-link ang isang programa, ang GCC driver
awtomatikong nagli-link laban sa libasan. Kung libasan ay magagamit bilang isang shared library, at
ang -static hindi ginagamit ang opsyon, pagkatapos ay nagli-link ito laban sa nakabahaging bersyon ng libasan.
Ang -static-libasan ang opsyon ay nagdidirekta sa GCC driver na mag-link libasan static, nang wala
kinakailangang static na pag-uugnay ng iba pang mga aklatan.

-static-libtsan
Kapag ang -fsanitize=thread Ang opsyon ay ginagamit upang i-link ang isang programa, ang GCC driver
awtomatikong nagli-link laban sa libtsan. Kung libtsan ay magagamit bilang isang shared library, at
ang -static hindi ginagamit ang opsyon, pagkatapos ay nagli-link ito laban sa nakabahaging bersyon ng libtsan.
Ang -static-libtsan ang opsyon ay nagdidirekta sa GCC driver na mag-link libtsan static, nang wala
kinakailangang static na pag-uugnay ng iba pang mga aklatan.

-static-liblsan
Kapag ang -fsanitize=leak Ang opsyon ay ginagamit upang i-link ang isang programa, ang GCC driver
awtomatikong nagli-link laban sa liblsan. Kung liblsan ay magagamit bilang isang shared library, at
ang -static hindi ginagamit ang opsyon, pagkatapos ay nagli-link ito laban sa nakabahaging bersyon ng liblsan.
Ang -static-liblsan ang opsyon ay nagdidirekta sa GCC driver na mag-link liblsan static, nang wala
kinakailangang static na pag-uugnay ng iba pang mga aklatan.

-static-libubsan
Kapag ang -fsanitize=undefined Ang opsyon ay ginagamit upang i-link ang isang programa, ang GCC driver
awtomatikong nagli-link laban sa libubsan. Kung libubsan ay available bilang shared library,
at ang -static hindi ginagamit ang opsyon, pagkatapos ay nagli-link ito laban sa nakabahaging bersyon ng
libubsan. ang -static-libubsan ang opsyon ay nagdidirekta sa GCC driver na mag-link libubsan
statically, nang hindi kinakailangang i-link ang iba pang mga library nang statically.

-static-libmpx
Kapag ang -fcheck-pointer hangganan at -mmpx ang mga opsyon ay ginagamit upang i-link ang isang programa, ang GCC
awtomatikong nagli-link ang driver laban sa libmpx. Kung libmpx ay magagamit bilang isang nakabahagi
aklatan, at ang -static hindi ginagamit ang opsyon, pagkatapos ay nagli-link ito laban sa ibinahagi
na bersyon ng libmpx. ang -static-libmpx ang opsyon ay nagdidirekta sa GCC driver na mag-link libmpx
statically, nang hindi kinakailangang i-link ang iba pang mga library nang statically.

-static-libmpxwrappers
Kapag ang -fcheck-pointer hangganan at -mmpx ang mga opsyon ay ginagamit upang i-link ang isang programa nang wala
gumagamit din -fno-chkp-use-wrappers, awtomatikong nagli-link ang driver ng GCC laban sa
libmpxwrappers. Kung libmpxwrappers ay magagamit bilang isang shared library, at ang -static
hindi ginagamit ang opsyon, pagkatapos ay nagli-link ito laban sa nakabahaging bersyon ng libmpxwrappers. ang
-static-libmpxwrappers ang opsyon ay nagdidirekta sa GCC driver na mag-link libmpxwrappers
statically, nang hindi kinakailangang i-link ang iba pang mga library nang statically.

-static-libstdc++
Kapag ang g ++ Ang program ay ginagamit upang i-link ang isang C++ program, karaniwan itong awtomatikong nagli-link
laban sa libstdc++. Kung libstdc++ ay magagamit bilang isang shared library, at ang -static
hindi ginagamit ang opsyon, pagkatapos ay nagli-link ito laban sa nakabahaging bersyon ng libstdc++. Yan ay
normal na maayos. Gayunpaman, kung minsan ay kapaki-pakinabang na i-freeze ang bersyon ng libstdc++
ginagamit ng programa nang hindi napupunta sa isang ganap na static na link. Ang
-static-libstdc++ ang pagpipilian ay nagtuturo sa g ++ driver para i-link libstdc++ static, nang wala
kinakailangang static na pag-uugnay ng iba pang mga aklatan.

-simboliko
Magbigkis ng mga sanggunian sa mga pandaigdigang simbolo kapag bumubuo ng isang nakabahaging bagay. Magbabala tungkol sa anuman
hindi nalutas na mga sanggunian (maliban kung na-override ng opsyon sa editor ng link -Xlinker -z
-Xlinker defs). Ilang system lang ang sumusuporta sa opsyong ito.

-T script
paggamit script bilang linker script. Ang opsyong ito ay sinusuportahan ng karamihan sa mga system na gumagamit ng
GNU linker. Sa ilang mga target, tulad ng mga bare-board na target na walang operating system,
ang -T Maaaring kailanganin ang opsyon kapag nagli-link upang maiwasan ang mga sanggunian sa mga hindi natukoy na simbolo.

-Xlinker opsyon
Pumasa opsyon bilang isang opsyon sa linker. Magagamit mo ito para magbigay ng partikular sa system
mga opsyon sa linker na hindi nakikilala ng GCC.

Kung gusto mong ipasa ang isang opsyon na nangangailangan ng hiwalay na argumento, dapat mong gamitin -Xlinker
dalawang beses, isang beses para sa opsyon at isang beses para sa argumento. Halimbawa, para pumasa - igiit
mga kahulugan, kailangan mong magsulat -Xlinker - igiit -Xlinker mga kahulugan. Hindi gumagana
sumulat -Xlinker "-pagnindigan mga kahulugan", dahil ipinapasa nito ang buong string bilang a
nag-iisang argumento, na hindi ang inaasahan ng linker.

Kapag gumagamit ng GNU linker, kadalasan ay mas maginhawang ipasa ang mga argumento sa linker
mga opsyon gamit ang opsyon=halaga syntax kaysa bilang magkahiwalay na mga argumento. Halimbawa, ikaw
maaaring tukuyin -Xlinker -Map=output.map sa halip na -Xlinker -Mapa -Xlinker output.mapa.
Maaaring hindi sinusuportahan ng ibang mga linker ang syntax na ito para sa mga opsyon sa command-line.

-Wl,opsyon
Pumasa opsyon bilang isang opsyon sa linker. Kung opsyon naglalaman ng mga kuwit, ito ay nahahati sa
maramihang mga pagpipilian sa mga kuwit. Maaari mong gamitin ang syntax na ito upang magpasa ng argumento sa
opsyon. Halimbawa, -Wl,-Map,output.map pass -Mapa output.mapa sa linker. Kailan
gamit ang GNU linker, maaari ka ring makakuha ng parehong epekto sa -Wl,-Map=output.map.

TANDAAN: Sa Ubuntu 8.10 at mga mas bagong bersyon, para sa LDFLAGS, ang opsyon -Wl,-z,relro Ginagamit.
Upang huwag paganahin, gamitin -Wl,-z, norelro.

-u simbolo
Magkunwaring simbolo simbolo ay hindi natukoy, upang pilitin ang pag-link ng mga module ng library upang tukuyin
ito. Pwede mong gamitin -u maraming beses na may iba't ibang mga simbolo upang puwersahin ang pag-load ng
karagdagang mga module ng aklatan.

-z keyword
-z ay direktang ipinapasa sa linker kasama ang keyword keyword. Tingnan ang seksyon
sa dokumentasyon ng iyong linker para sa mga pinahihintulutang halaga at mga kahulugan ng mga ito.

Options para Directory paghahanap
Tinukoy ng mga opsyong ito ang mga direktoryo upang maghanap ng mga file ng header, para sa mga aklatan at para sa mga bahagi
ng compiler:

-Idir
Idagdag ang direktoryo dir sa ulo ng listahan ng mga direktoryo na hahanapin para sa header
mga file. Magagamit ito upang i-override ang isang file ng header ng system, na palitan ang iyong sarili
bersyon, dahil hinahanap ang mga direktoryo na ito bago ang file ng header ng system
mga direktoryo. Gayunpaman, hindi mo dapat gamitin ang opsyong ito upang magdagdag ng mga direktoryo na naglalaman
mga file ng header ng system na ibinigay ng vendor (gamitin -isystem para doon). Kung gumamit ka ng higit sa isa
-I opsyon, ang mga direktoryo ay ini-scan sa kaliwa-papuntang-kanang pagkakasunud-sunod; ang karaniwang sistema
kasunod ang mga direktoryo.

Kung ang isang karaniwang sistema ay may kasamang direktoryo, o isang direktoryo na tinukoy sa -isystem, Ay
tinukoy din sa -I, ang -I hindi pinansin ang opsyon. Hinahanap pa rin ang direktoryo ngunit
bilang isang direktoryo ng system sa normal nitong posisyon sa system ay may kasamang chain. Ito ay para
tiyakin na ang pamamaraan ng GCC upang ayusin ang mga header ng buggy system at ang pag-order para sa
Ang "include_next" na direktiba ay hindi sinasadyang nabago. Kung kailangan mo talagang magbago
ang order sa paghahanap para sa mga direktoryo ng system, gamitin ang -nostdinc at / o -isystem mga pagpipilian.

-iplugindir=dir
Itakda ang direktoryo upang maghanap ng mga plugin na ipinapasa -fplugin=pangalan sa halip ng
-fplugin=landas/pangalan.so. Ang pagpipiliang ito ay hindi nilalayong gamitin ng user, ngunit lamang
dumaan sa driver.

-iquotedir
Idagdag ang direktoryo dir sa ulo ng listahan ng mga direktoryo na hahanapin para sa header
mga file para lamang sa kaso ng "#include "file""; hindi sila hinahanap para sa "#include
<file>", kung hindi ay parang -I.

-Ldir
Magdagdag ng direktoryo dir sa listahan ng mga direktoryo na hahanapin -l.

-Bunlapi
Tinutukoy ng opsyong ito kung saan mahahanap ang mga executable, library, isama ang mga file, at
data file ng compiler mismo.

Ang compiler driver program ay nagpapatakbo ng isa o higit pa sa mga subprogram cpp, cc1, as at ld.
Sinusubukan nito unlapi bilang prefix para sa bawat program na sinusubukan nitong patakbuhin, parehong mayroon at wala
makina/bersyon/.

Para sa bawat subprogram na tatakbo, ang driver ng compiler ay unang sumusubok sa -B prefix, kung mayroon man.
Kung hindi mahanap ang pangalang iyon, o kung -B ay hindi tinukoy, sinusubukan ng driver ang dalawang pamantayan
prefix, /usr/lib/gcc/ at /usr/local/lib/gcc/. Kung wala sa mga iyon ang nagreresulta sa a
pangalan ng file na natagpuan, ang hindi binagong pangalan ng program ay hinahanap gamit ang
mga direktoryo na tinukoy sa iyong PATH variable ng kapaligiran.

Sinusuri ng compiler upang makita kung ang landas na ibinigay ni -B ay tumutukoy sa isang direktoryo, at kung
kinakailangan ito ay nagdadagdag ng isang directory separator character sa dulo ng path.

-B ang mga prefix na epektibong tumutukoy sa mga pangalan ng direktoryo ay nalalapat din sa mga aklatan sa
linker, dahil isinasalin ng compiler ang mga opsyong ito sa -L mga opsyon para sa linker.
Nalalapat din ang mga ito upang isama ang mga file sa preprocessor, dahil nagsasalin ang compiler
ang mga pagpipiliang ito sa -isystem mga opsyon para sa preprocessor. Sa kasong ito, ang compiler
append isama sa unlapi.

Ang runtime support file libgcc.a maaari ding hanapin gamit ang -B unlapi, kung
kailangan. Kung hindi ito matatagpuan doon, ang dalawang karaniwang prefix sa itaas ay susubukan, at iyon
ay lahat. Ang file ay naiwan sa link kung hindi ito matagpuan sa mga paraan na iyon.

Ang isa pang paraan upang tukuyin ang isang prefix na katulad ng -B ang prefix ay ang paggamit ng kapaligiran
nagbabago GCC_EXEC_PREFIX.

Bilang isang espesyal na kludge, kung ang landas na ibinigay ng -B is [dir/]stageN/, Kung saan N ay isang numero
sa hanay na 0 hanggang 9, pagkatapos ay papalitan ito ng [dir/]isama. Ito ay para makatulong sa boot-
strapping ang compiler.

-specs=file
paraan file pagkatapos basahin ng compiler ang pamantayan panoorin file, upang ma-override
ang mga default na kung saan ang gcc ginagamit ng driver program kapag tinutukoy kung anong mga switch ang ipapasa
sa cc1, cc1plus, as, ld, atbp. Higit sa isa -specs=file maaaring tukuyin sa
command line, at pinoproseso ang mga ito sa pagkakasunud-sunod, mula kaliwa hanggang kanan.

--sysroot=dir
paggamit dir bilang lohikal na root directory para sa mga header at library. Halimbawa, kung ang
Ang compiler ay karaniwang naghahanap ng mga header sa / usr / isama at mga aklatan sa / Usr / lib, Ito
sa halip ay naghahanap dir/usr/include at dir/usr/lib.

Kung gagamitin mo pareho ang opsyong ito at ang -isysroot opsyon, pagkatapos ay ang --sysroot opsyon
naaangkop sa mga aklatan, ngunit ang -isysroot nalalapat ang opsyon sa mga file ng header.

Ang linker ng GNU (nagsisimula sa bersyon 2.16) ay mayroong kinakailangang suporta para dito
opsyon. Kung hindi sinusuportahan ng iyong linker ang opsyong ito, ang aspeto ng header file ng
--sysroot gumagana pa rin, ngunit ang aspeto ng aklatan ay hindi.

--no-sysroot-suffix
Para sa ilang mga target, may idinaragdag na suffix sa root directory na tinukoy sa --sysroot,
depende sa iba pang mga opsyon na ginamit, upang ang mga header ay maaaring halimbawa ay matatagpuan sa
dir/suffix/usr/include sa halip ng dir/usr/include. Hindi pinapagana ng opsyong ito ang karagdagan
ng naturang panlapi.

-Ako- Ang opsyon na ito ay hindi na ginagamit. Mangyaring gamitin -iquote sa halip para sa -I mga direktoryo noon
ang -Ako- at alisin ang -Ako- opsyon. Anumang mga direktoryo na iyong tinukoy -I mga pagpipilian bago
ang -Ako- ang opsyon ay hinanap lamang para sa kaso ng "#include "file""; hindi sila
hinanap ang "#includefile>".

Kung ang mga karagdagang direktoryo ay tinukoy sa -I mga pagpipilian pagkatapos ng -Ako- opsyon, ang mga ito
Hinahanap ang mga direktoryo para sa lahat ng "#include" na mga direktiba. (Karaniwan lahat -I
Ang mga direktoryo ay ginagamit sa ganitong paraan.)

Bilang karagdagan, ang -Ako- pinipigilan ng opsyon ang paggamit ng kasalukuyang direktoryo (kung saan ang
nagmula ang kasalukuyang input file) bilang ang unang direktoryo ng paghahanap para sa "#include "file"".
Walang paraan upang i-override ang epektong ito ng -Ako-. May -NS. maaari mong tukuyin ang paghahanap
ang direktoryo na kasalukuyang kapag ang compiler ay na-invoke. Iyan ay hindi eksakto ang
katulad ng kung ano ang ginagawa ng preprocessor bilang default, ngunit ito ay madalas na kasiya-siya.

-Ako- ay hindi pumipigil sa paggamit ng mga karaniwang direktoryo ng system para sa mga file ng header.
Kaya, -Ako- at -nostdinc ay malaya.

Tinutukoy Target Makina at tagatala bersyon
Ang karaniwang paraan upang patakbuhin ang GCC ay ang patakbuhin ang executable na tinatawag gcc, O makina-gcc kapag tumawid-
pagsasama-sama, o makina-gcc-bersyon upang magpatakbo ng isang bersyon maliban sa na-install
huling.

hardware Modellen at Configuration
Ang bawat uri ng target na makina ay maaaring magkaroon ng sarili nitong mga espesyal na opsyon, simula sa -m, Pumili
sa iba't ibang modelo ng hardware o configuration---halimbawa, 68010 vs 68020, lumulutang
coprocessor o wala. Ang isang naka-install na bersyon ng compiler ay maaaring mag-compile para sa anumang modelo
o pagsasaayos, ayon sa mga tinukoy na opsyon.

Sinusuportahan din ng ilang configuration ng compiler ang mga karagdagang espesyal na opsyon, kadalasan para sa
pagiging tugma sa iba pang mga compiler sa parehong platform.

AAArch64 Options

Ang mga opsyong ito ay tinukoy para sa mga pagpapatupad ng AArch64:

-mabi=pangalan
Bumuo ng code para sa tinukoy na modelo ng data. Ang mga pinahihintulutang halaga ay ilp32 para sa SysV-
tulad ng data model kung saan ang int, long int at pointer ay 32-bit, at lp64 para sa SysV-like
modelo ng data kung saan ang int ay 32-bit, ngunit ang mahabang int at pointer ay 64-bit.

Ang default ay depende sa partikular na target na configuration. Tandaan na ang LP64 at
Ang mga ILP32 ABI ay hindi tugma sa link; dapat mong ipunin ang iyong buong programa na may pareho
ABI, at i-link sa isang katugmang hanay ng mga aklatan.

-big-endian
Bumuo ng big-endian code. Ito ang default kapag ang GCC ay na-configure para sa isang
aarch64_be-*-* target.

-mggeneral-regs-lamang
Bumuo ng code na gumagamit lamang ng mga pangkalahatang rehistro.

-mlittle-endian
Bumuo ng little-endian code. Ito ang default kapag ang GCC ay na-configure para sa isang
aarch64-*-* ngunit hindi isang aarch64_be-*-* target.

-mcmodel=maliit
Bumuo ng code para sa maliit na modelo ng code. Ang programa at ang mga static na tinukoy na simbolo nito
dapat nasa loob ng 1GB ng bawat isa. Ang mga pointer ay 64 bits. Maaaring static ang mga programa
o dynamic na naka-link. Ang modelong ito ay hindi ganap na ipinatupad at karamihan ay itinuturing bilang
maliit.

-mcmodel=maliit
Bumuo ng code para sa maliit na modelo ng code. Ang programa at ang static na tinukoy nito
ang mga simbolo ay dapat nasa loob ng 4GB ng bawat isa. Ang mga pointer ay 64 bits. Ang mga programa ay maaaring
statically o dynamic na naka-link. Ito ang default na modelo ng code.

-mcmodel=malaki
Bumuo ng code para sa malaking modelo ng code. Hindi ito gumagawa ng mga pagpapalagay tungkol sa mga address at
laki ng mga seksyon. Ang mga pointer ay 64 bits. Ang mga programa ay maaari lamang iugnay sa statically.

-mstrict-align
Huwag ipagpalagay na ang mga hindi nakahanay na memory reference ay pinangangasiwaan ng system.

-momit-leaf-frame-pointer
-mno-omit-leaf-frame-pointer
Alisin o panatilihin ang frame pointer sa mga function ng dahon. Ang dating gawi ay ang
default.

-mtls-dialect=desc
Gumamit ng mga TLS descriptor bilang thread-local na mekanismo ng storage para sa mga dynamic na access ng TLS
mga variable. Ito ang default.

-mtls-dialect=tradisyonal
Gamitin ang tradisyonal na TLS bilang thread-local na mekanismo ng storage para sa mga dynamic na access ng TLS
mga variable.

-mfix-cortex-a53-835769
-mno-fix-cortex-a53-835769
I-enable o i-disable ang workaround para sa ARM Cortex-A53 erratum number 835769. Ito
nagsasangkot ng pagpasok ng NOP instruction sa pagitan ng memory instructions at 64-bit integer
multiply-accumulate na mga tagubilin.

-mfix-cortex-a53-843419
-mno-fix-cortex-a53-843419
I-enable o i-disable ang workaround para sa ARM Cortex-A53 erratum number 843419. Ito
Ang erratum workaround ay ginawa sa oras ng pag-link at papasa lamang ito sa kaukulang bandila
sa linker.

-martsa=pangalan
Tukuyin ang pangalan ng target na arkitektura, opsyonal na suffix ng isa o higit pa
mga modifier ng tampok. Ang pagpipiliang ito ay may form -martsa=arko{+[hindi]tampok}*, kung saan ang
tanging pinahihintulutang halaga para sa arko is armv8-a. Ang mga pinahihintulutang halaga para sa tampok ay
dokumentado sa sub-section sa ibaba.

Kung saan tinukoy ang mga sumasalungat na feature modifier, ginagamit ang pinaka-kanang feature.

Ginagamit ng GCC ang pangalang ito upang matukoy kung anong uri ng mga tagubilin ang maaari nitong ilabas kapag bumubuo
code ng pagpupulong.

Saan -martsa ay tinukoy nang wala alinman sa -mtune or -mcpu tinutukoy din, ang
code ay nakatutok upang gumanap nang mahusay sa isang hanay ng mga target na processor na nagpapatupad ng
target na arkitektura.

-mtune=pangalan
Tukuyin ang pangalan ng target na processor kung saan dapat ibagay ng GCC ang pagganap ng
ang code. Ang mga pinahihintulutang halaga para sa opsyong ito ay: panlahat, cortex-a53, cortex-a57,
cortex-a72, exynos-m1, kulogx, xgene1.

Bukod pa rito, maaaring tukuyin ng opsyong ito na dapat ibagay ng GCC ang pagganap ng code
para sa isang malaki.MUNTING sistema. Ang mga pinahihintulutang halaga para sa opsyong ito ay:
cortex-a57.cortex-a53, cortex-a72.cortex-a53.

Kung saan wala sa -mtune=, -mcpu= or -martsa= ay tinukoy, ang code ay nakatutok upang gumanap
mahusay sa isang hanay ng mga target na processor.

Ang opsyong ito ay hindi maaaring lagyan ng suffix ng mga feature modifier.

-mcpu=pangalan
Tukuyin ang pangalan ng target na processor, opsyonal na nilagyan ng isa o higit pang feature
mga modifier. Ang pagpipiliang ito ay may form -mcpu=CPU{+[hindi]tampok}*, kung saan pinahihintulutan
halaga para sa CPU ay pareho sa mga magagamit para sa -mtune.

Ang mga pinahihintulutang halaga para sa tampok ay dokumentado sa sub-section sa ibaba.

Kung saan tinukoy ang mga sumasalungat na feature modifier, ginagamit ang pinaka-kanang feature.

Ginagamit ng GCC ang pangalang ito upang matukoy kung anong uri ng mga tagubilin ang maaari nitong ilabas kapag bumubuo
assembly code (parang sa pamamagitan ng -martsa) at upang matukoy ang target na processor para saan
tune para sa pagganap (parang sa pamamagitan ng -mtune). Kung saan ginagamit ang opsyong ito kasabay ng
-martsa or -mtune, inuuna ang mga opsyong iyon kaysa sa naaangkop na bahagi nito
pagpipilian.

-martsa at -mcpu Mga Modifier ng Tampok

Mga modifier ng feature na ginamit kasama ng -martsa at -mcpu maaaring isa sa mga sumusunod:

crc Paganahin ang extension ng CRC.

crypto
Paganahin ang Crypto extension. Ito ay nagpapahiwatig na ang Advanced na SIMD ay pinagana.

fp Paganahin ang mga tagubilin sa floating-point.

simd
Paganahin ang Advanced na mga tagubilin sa SIMD. Ipinahihiwatig nito ang mga floating-point na mga tagubilin ay
pinagana. Ito ang default para sa lahat ng kasalukuyang posibleng halaga para sa mga opsyon -martsa at
-mcpu=.

Adapeva pista ng tatlong hari Options

mga ito -m ang mga opsyon ay tinukoy para sa Adapeva Epiphany:

-mhalf-reg-file
Huwag maglaan ng anumang rehistro sa hanay na "r32"..."r63". Nagbibigay-daan iyon sa code na tumakbo
mga variant ng hardware na kulang sa mga register na ito.

-mprefer-short-insn-regs
Mas gustong maglaan ng mga rehistro na nagpapahintulot sa pagbuo ng maikling pagtuturo. Maaari itong
magreresulta sa pagtaas ng bilang ng pagtuturo, kaya maaari itong mabawasan o tumaas sa pangkalahatan
laki ng code.

-mbranch-cost=num
Itakda ang halaga ng mga sangay sa halos num "simpleng" mga tagubilin. Ang gastos na ito ay a
heuristic at hindi garantisadong makakapagdulot ng mga pare-parehong resulta sa mga release.

-mcmove
I-enable ang pagbuo ng mga conditional na galaw.

-mnops=num
Magbigay num NOP bago ang bawat iba pang nabuong pagtuturo.

-mno-malambot-cmpsf
Para sa single-precision floating-point na paghahambing, maglabas ng "fsub" na pagtuturo at pagsubok
ang mga watawat. Ito ay mas mabilis kaysa sa paghahambing ng software, ngunit maaaring makakuha ng mga maling resulta
sa pagkakaroon ng NaNs, o kapag ang dalawang magkaibang maliliit na numero ay inihambing sa ganoong paraan
ang kanilang pagkakaiba ay kinakalkula bilang zero. Ang default ay -msoft-cmpsf, Na ginagamit ng
mas mabagal, ngunit sumusunod sa IEEE, mga paghahambing ng software.

-mstack-offset=num
Itakda ang offset sa pagitan ng tuktok ng stack at ng stack pointer. Hal, isang halaga ng 8
nangangahulugan na ang walong byte sa hanay na "sp+0...sp+7" ay maaaring gamitin ng mga function ng dahon
walang stack allocation. Mga halaga maliban sa 8 or 16 ay hindi pa nasusubok at malamang na hindi
trabaho. Tandaan din na binabago ng opsyong ito ang ABI; pag-iipon ng isang programa na may a
ibang stack offset kaysa sa mga aklatan na pinagsama-sama sa pangkalahatan ay hindi
trabaho. Maaaring maging kapaki-pakinabang ang opsyong ito kung gusto mong suriin kung ibang stack ang offset
ay magbibigay sa iyo ng mas mahusay na code, ngunit upang aktwal na gumamit ng ibang stack offset upang bumuo
gumaganang mga programa, inirerekumenda na i-configure ang toolchain gamit ang naaangkop
--with-stack-offset=num pagpipilian.

-mno-ikot-pinakamalapit
Ipalagay sa scheduler na ang rounding mode ay nakatakda sa pagputol. Ang
ang default ay -mround-pinakalapit.

-mlong-tawag
Kung hindi tinukoy ng isang katangian, ipagpalagay na ang lahat ng mga tawag ay maaaring lampas sa
offset range ng "b" / "bl" na mga tagubilin, at samakatuwid ay i-load ang function address
sa isang rehistro bago magsagawa ng (kung hindi man ay direktang) tawag. Ito ang default.

-mshort-calls
Kung hindi tinukoy ng isang katangian, ipagpalagay na ang lahat ng direktang tawag ay nasa hanay
ng mga tagubiling "b" / "bl", kaya gamitin ang mga tagubiling ito para sa mga direktang tawag. Ang
ang default ay -mlong-tawag.

-msmall16
Ipagpalagay na ang mga address ay maaaring i-load bilang 16-bit na mga hindi naka-sign na halaga. Hindi ito nalalapat sa
mga address ng function kung saan -mlong-tawag may bisa ang semantika.

-mfp-mode=paraan
Itakda ang umiiral na mode ng floating-point unit. Tinutukoy nito ang lumulutang-
point mode na ibinigay at inaasahan sa function na tawag at oras ng pagbabalik. Paggawa
ang mode na ito ay tumutugma sa mode na higit na kailangan mo sa pagsisimula ng function ay maaaring gawin mo
mas maliit at mas mabilis ang mga programa sa pamamagitan ng pag-iwas sa mga hindi kinakailangang switch ng mode.

paraan maaaring itakda sa isa sa mga sumusunod na halaga:

tumatawag
Ang anumang mode sa pagpasok ng function ay wasto, at pinanatili o ibinalik kapag ang function
bumabalik, at kapag tumawag ito ng iba pang mga function. Ang mode na ito ay kapaki-pakinabang para sa pag-compile
mga aklatan o iba pang mga compilation unit na maaaring gusto mong isama sa iba
mga programa na may iba't ibang umiiral na FPU mode, at ang kaginhawaan ng pagiging magagawang
gumamit ng isang object file na mas malaki kaysa sa laki at bilis ng overhead para sa anumang dagdag na mode
paglipat na maaaring kailanganin, kumpara sa kung ano ang kakailanganin sa isang higit pa
tiyak na pagpipilian ng umiiral na FPU mode.

putulin
Ito ang mode na ginagamit para sa mga pagkalkula ng floating-point na may pinutol (ibig sabihin, round
patungo sa zero) rounding mode. Kasama diyan ang conversion mula sa floating point hanggang
integer

round-pinakamalapit
Ito ang mode na ginagamit para sa mga floating-point na kalkulasyon na may round-to-nerest-o-
kahit rounding mode.

int Ito ang mode na ginagamit upang magsagawa ng mga kalkulasyon ng integer sa FPU, hal integer
multiply, o integer multiply-and-accumulate.

Ang default ay -mfp-mode=tumatawag

-mnosplit-lohi
-mno-postinc
-mno-postmodify
Mga pag-aayos sa pagbuo ng code na hindi pinapagana, ayon sa pagkakabanggit, paghahati ng 32-bit na pag-load,
pagbuo ng mga post-increment na address, at pagbuo ng post-modify na mga address. Ang
ang mga default ay msplit-lohi, -mpost-inc, at -mpost-modify.

-mnovect-doble
Baguhin ang gustong SIMD mode sa SImode. Ang default ay -mvect-doble, Na ginagamit ng
DImode bilang ginustong SIMD mode.

-max-vect-align=num
Ang maximum na pagkakahanay para sa mga uri ng SIMD vector mode. num maaaring 4 o 8. Ang default ay
8. Tandaan na ito ay isang pagbabago sa ABI, kahit na maraming mga interface ng function ng library
hindi maaapektuhan kung hindi sila gumagamit ng mga SIMD vector mode sa mga lugar na nakakaapekto sa laki at/o
pagkakahanay ng mga kaugnay na uri.

-msplit-vecmove-maaga
Ang hating vector ay gumagalaw sa iisang salita na gumagalaw bago i-reload. Sa teorya na ito ay maaaring magbigay
mas mahusay na irehistro ang paglalaan, ngunit sa ngayon ang kabaligtaran ay tila sa pangkalahatan ang kaso.

-m1reg-reg
Tukuyin ang isang rehistro upang hawakan ang pare-pareho -1, na ginagawang maliit na negatibo ang paglo-load
mga constant at ilang bitmask nang mas mabilis. Mga pinahihintulutang halaga para sa reg ay r43 at r63,
na tumutukoy sa paggamit ng rehistrong iyon bilang isang nakapirming rehistro, at wala, na nangangahulugang hindi
rehistro ay ginagamit para sa layuning ito. Ang default ay -m1reg-wala.

ARC Options

Kinokontrol ng mga sumusunod na opsyon ang variant ng arkitektura kung saan kino-compile ang code:

-barrel-shifter
Bumuo ng mga tagubilin na sinusuportahan ng barrel shifter. Ito ang default maliban kung
-mcpu=ARC601 ay may bisa.

-mcpu=CPU
Itakda ang uri ng arkitektura, paggamit ng rehistro, at mga parameter ng pag-iiskedyul ng pagtuturo CPU.
Mayroon ding mga opsyon sa shortcut alias na magagamit para sa backward compatibility at
kaginhawaan. Mga sinusuportahang halaga para sa CPU ay

ARC600
Mag-compile para sa ARC600. Mga alias: -mA6, -mARC600.

ARC601
Mag-compile para sa ARC601. alyas: -mARC601.

ARC700
Mag-compile para sa ARC700. Mga alias: -mA7, -mARC700. Ito ang default kapag na-configure
sa --with-cpu=arc700.

-mdpfp
-mdpfp-compact
FPX: Bumuo ng Double Precision FPX na mga tagubilin, nakatutok para sa compact na pagpapatupad.

-mdpfp-mabilis
FPX: Bumuo ng Double Precision FPX na mga tagubilin, na nakatutok para sa mabilis na pagpapatupad.

-mno-dpfp-lrsr
Huwag paganahin ang LR at SR na mga tagubilin mula sa paggamit ng FPX extension aux registers.

-mea
Bumuo ng Pinalawak na mga tagubilin sa aritmetika. Kasalukuyang "divaw", "adds", "subs",
at "sat16" ay suportado. Ito ay palaging pinagana para sa -mcpu=ARC700.

-mno-mpy
Huwag bumuo ng mga mpy na tagubilin para sa ARC700.

-mmul32x16
Bumuo ng 32x16 bit multiply at mga tagubilin sa mac.

-mmul64
Bumuo ng mul64 at mulu64 na mga tagubilin. Valid lamang para sa -mcpu=ARC600.

-norm
Bumuo ng norm instruction. Ito ang default kung -mcpu=ARC700 ay may bisa.

-mspfp
-mspfp-compact
FPX: Bumuo ng Single Precision FPX na mga tagubilin, na nakatutok para sa compact na pagpapatupad.

-mspfp-mabilis
FPX: Bumuo ng Single Precision FPX na mga tagubilin, na nakatutok para sa mabilis na pagpapatupad.

-msimd
Paganahin ang pagbuo ng mga tagubilin sa ARC SIMD sa pamamagitan ng mga builtin na tukoy sa target. Valid lang
para -mcpu=ARC700.

-msoft-float
Binalewala ang opsyong ito; ito ay ibinigay para sa mga layunin ng pagkakatugma lamang. Software
Ang floating point code ay inilalabas bilang default, at ang default na ito ay maaaring ma-override ng FPX
mga pagpipilian; mspfp, mspfp-compact, O mspfp-mabilis para sa solong katumpakan, at mdpfp, mdpfp-
siksik, O mdpfp-mabilis para sa dobleng katumpakan.

-mswap
Bumuo ng mga tagubilin sa pagpapalit.

Ang mga sumusunod na opsyon ay ipinapasa sa assembler, at tukuyin din ang preprocessor
mga simbolo ng macro.

-mdsp-packa
Ipinasa sa assembler para paganahin ang mga extension ng DSP Pack A. Itinatakda din ang
simbolo ng preprocessor na "__Xdsp_packa".

-mdvbf
Ipinasa sa assembler para paganahin ang dual viterbi butterfly extension. Gayundin
nagtatakda ng simbolo ng preprocessor na "__Xdvbf".

-mlock
Ipinasa sa assembler para paganahin ang Locked Load/Store Conditional extension.
Itinatakda din ang simbolo ng preprocessor na "__Xlock".

-mmac-d16
Naipasa sa assembler. Itinatakda din ang simbolo ng preprocessor na "__Xxmac_d16".

-mmac-24
Naipasa sa assembler. Itinatakda din ang simbolo ng preprocessor na "__Xxmac_24".

-mrtsc
Ipinasa sa assembler para paganahin ang 64-bit na Time-Stamp Counter extension
pagtuturo. Itinatakda din ang simbolo ng preprocessor na "__Xrtsc".

-mswape
Ipinasa sa assembler upang paganahin ang swap byte na pagtuturo ng extension ng pag-order.
Itinatakda rin ang simbolo ng preprocessor na "__Xswape".

-mtelephony
Ipinasa sa assembler para paganahin ang dalawahan at iisang operand na mga tagubilin para sa
telepono. Itinatakda din ang simbolo ng preprocessor na "__Xtelephony".

-mxy
Ibinaba sa assembler upang paganahin ang extension ng XY Memory. Itinatakda din ang
simbolo ng preprocessor na "__Xxy".

Kinokontrol ng mga sumusunod na opsyon kung paano nilagyan ng annotate ang assembly code:

-misize
I-annotate ang mga tagubilin ng assembler na may mga tinantyang address.

-mannotate-align
Ipaliwanag kung anong mga pagsasaalang-alang sa pagkakahanay ang humahantong sa desisyon na gumawa ng isang pagtuturo
maikli man o mahaba.

Ang mga sumusunod na opsyon ay ipinapasa sa linker:

-marclinux
Ipinasa sa linker, upang tukuyin ang paggamit ng "arclinux" emulation. Ang pagpipiliang ito
ay pinagana bilang default sa mga tool chain na binuo para sa "arc-linux-uclibc" at
Tina-target ng "arceb-linux-uclibc" kapag hindi hiniling ang pag-profile.

-marclinux_prof
Ipinasa sa linker, upang tukuyin ang paggamit ng "arclinux_prof" emulation. Ito
ang opsyon ay pinagana bilang default sa mga tool chain na binuo para sa "arc-linux-uclibc" at
Tina-target ng "arceb-linux-uclibc" kapag hiniling ang pag-profile.

Kinokontrol ng mga sumusunod na opsyon ang semantics ng nabuong code:

-mepilogue-cfi
Paganahin ang pagbuo ng impormasyon ng call frame para sa mga epilogue.

-mno-epilogue-cfi
Huwag paganahin ang pagbuo ng impormasyon ng call frame para sa mga epilogue.

-mlong-tawag
Bumuo ng mga call insn bilang pagrehistro ng mga hindi direktang tawag, kaya nagbibigay ng access nang buo
32-bit na hanay ng address.

-mmedium-tawag
Huwag gumamit ng mas mababa sa 25 bit addressing range para sa mga tawag, na kung saan ay ang offset na available
para sa isang walang kundisyong pagtuturo ng sangay-at-link. Kondisyon na pagpapatupad ng pag-andar
ang mga tawag ay pinipigilan, upang payagan ang paggamit ng 25-bit na hanay, sa halip na ang 21-bit na hanay
na may kondisyon na branch-and-link. Ito ang default para sa mga tool chain na ginawa para sa
"arc-linux-uclibc" at "arceb-linux-uclibc" na mga target.

-mno-sdata
Huwag bumuo ng mga sanggunian ng sdata. Ito ang default para sa mga tool chain na ginawa para sa
"arc-linux-uclibc" at "arceb-linux-uclibc" na mga target.

-mucb-mcount
Instrumentong may mcount na tawag gaya ng ginamit sa UCB code. Ie gawin ang pagbibilang sa callee,
hindi ang tumatawag. Bilang default, binibilang ang instrumentation ng ARC sa tumatawag.

-mvolatile-cache
Gumamit ng karaniwang naka-cache na mga access sa memorya para sa mga pabagu-bagong sanggunian. Ito ang default.

-mno-volatile-cache
I-enable ang cache bypass para sa mga pabagu-bagong sanggunian.

Ang mga sumusunod na opsyon ay fine tune code generation:

-malign-tawag
Gumawa ng mga pag-optimize ng alignment para sa mga tagubilin sa tawag.

-mauto-modify-reg
Paganahin ang paggamit ng pre/post modify na may register displacement.

-mbbit-peephole
Paganahin ang bbit peephole2.

-mno-brcc
Hindi pinapagana ng opsyong ito ang isang pass in na tukoy sa target arc_reorg para makabuo ng "BRcc"
mga tagubilin. Wala itong epekto sa henerasyong "BRcc" na hinimok ng combiner pass.

-mcase-vector-pcrel
Gumamit ng mga pc-relative switch case table - nagbibigay-daan ito sa pag-ikli ng case table. Ito ang
default para sa -Os.

-mcompact-casesi
I-enable ang pattern ng compact casei. Ito ang default para sa -Os.

-mno-cond-exec
I-disable ang ARCompact specific pass para makabuo ng conditional execution instructions. Dahil
upang maantala ang pag-iskedyul ng slot at mga pakikipag-ugnayan sa pagitan ng mga numero ng operand, literal na laki,
haba ng pagtuturo, at ang suporta para sa kondisyonal na pagpapatupad, ang target-independent
pass para makabuo ng conditional execution ay madalas na kulang, kaya ang ARC port ay nagpapanatili ng a
espesyal na pass around na sumusubok na makahanap ng higit pang kondisyonal na pagbuo ng pagpapatupad
mga pagkakataon pagkatapos ng paglalaan ng pagpaparehistro, pagpapaikli ng sangay, at pagkaantala sa pag-iskedyul ng slot
nagawa na. Ang pass na ito sa pangkalahatan, ngunit hindi palaging, ay nagpapabuti sa pagganap at code
laki, sa halaga ng dagdag na oras ng compilation, kaya naman mayroong opsyon na lumipat
off ito. Kung mayroon kang problema sa mga tagubilin sa tawag na lampas sa kanilang pinapayagang offset
range dahil nakakondisyon ang mga ito, dapat mong isaalang-alang ang paggamit -mmedium-tawag
sa halip.

-mearly-cbranchsi
Paganahin ang pre-reload na paggamit ng pattern ng cbranchsi.

-meexpand-adddi
Palawakin ang "adddi3" at "subdi3" sa oras ng pagbuo ng rtl sa "add.f", "adc" atbp.

-mindexed-loads
Paganahin ang paggamit ng mga naka-index na load. Maaari itong maging problema dahil ang ilang mga optimizer noon
ipagpalagay na mayroong mga naka-index na tindahan, na hindi ito ang kaso.

-mlra
I-enable ang Local Register Allocation. Eksperimento pa rin ito para sa ARC, kaya bilang default
ang compiler ay gumagamit ng karaniwang reload (ibig sabihin -mno-lra).

-mlra-priority-wala
Huwag magpahiwatig ng anumang priyoridad para sa mga target na rehistro.

-mlra-priority-compact
Ipahiwatig ang priyoridad ng rehistro ng target para sa r0..r3 / r12..r15.

-mlra-priority-noncompact
Bawasan ang priyoridad ng target na rehistro para sa r0..r3 / r12..r15.

-mno-millicode
Kapag nag-optimize para sa laki (gamit -Os), mga prologue at epilogue na kailangang i-save o
ibalik ang isang malaking bilang ng mga rehistro ay madalas na pinaikli sa pamamagitan ng paggamit ng tawag sa isang espesyal na
function sa libgcc; ito ay tinutukoy bilang a millicode tawag. Dahil ang mga tawag na ito ay maaaring magpose
mga isyu sa pagganap, at/o nagdudulot ng mga isyu sa pagli-link kapag nagli-link sa hindi karaniwang paraan,
ang pagpipiliang ito ay ibinigay upang i-off ang pagbuo ng millicode na tawag.

-mixed-code
I-tweak ang paglalaan ng rehistro upang matulungan ang pagbuo ng 16-bit na pagtuturo. Ito sa pangkalahatan ay may
ang epekto ng pagpapababa ng karaniwang sukat ng pagtuturo habang pinapataas ang pagtuturo
mabilang.

-mq-class
Paganahin ang mga alternatibong pagtuturo ng 'q'. Ito ang default para sa -Os.

-mRcq
I-enable ang Rcq constraint handling - nakadepende dito ang karamihan sa pagbuo ng maikling code. Ito ay
ang default.

-mRcw
Paganahin ang Rcw constraint handling - ccfsm condexec kadalasang nakasalalay dito. Ito ang
default.

-msize-level=antas
Fine-tune size optimization patungkol sa mga haba ng pagtuturo at pagkakahanay. Ang
kinikilalang mga halaga para sa antas ay:

0 Walang pag-optimize ng laki. Ang antas na ito ay hindi na ginagamit at itinuturing na tulad 1.

1 Ang mga maiikling tagubilin ay ginagamit nang may pagkakataon.

2 Bilang karagdagan, ang pagkakahanay ng mga loop at ng code pagkatapos ibagsak ang mga hadlang.

3 Bilang karagdagan, ang opsyonal na pagkakahanay ng data ay ibinabagsak, at ang opsyon Os Ay pinagana.

Nagde-default ito sa 3 kailan -Os ay may bisa. Kung hindi, ang pag-uugali kapag ito ay hindi
ang set ay katumbas ng level 1.

-mtune=CPU
Itakda ang mga parameter ng pag-iiskedyul ng pagtuturo para sa CPU, override sa anumang ipinahiwatig ng -mcpu=.

Mga sinusuportahang halaga para sa CPU ay

ARC600
Tune para sa ARC600 cpu.

ARC601
Tune para sa ARC601 cpu.

ARC700
Tune para sa ARC700 cpu na may karaniwang multiplier block.

ARC700-xmac
Tune para sa ARC700 cpu na may XMAC block.

ARC725D
Tune para sa ARC725D cpu.

ARC750D
Tune para sa ARC750D cpu.

-mmultcost=num
Gastos na ipapalagay para sa isang multiply na pagtuturo, na may 4 pagiging katumbas ng isang normal na pagtuturo.

-munalign-prob-threshold=bagay na maaaring mangyari
Itakda ang threshold ng posibilidad para sa hindi pagkakapantay-pantay na mga sanga. Kapag tune para sa ARC700 at
pag-optimize para sa bilis, ang mga sangay na walang napuno na puwang ng pagkaantala ay mas mainam na ilabas
hindi nakahanay at mahaba, maliban kung ang pag-profile ay nagpapahiwatig na ang posibilidad para sa sangay na
ang kukunin ay nasa ibaba bagay na maaaring mangyari. Ang default ay (REG_BR_PROB_BASE/2), ibig sabihin, 5000.

Ang mga sumusunod na opsyon ay pinananatili para sa backward compatibility, ngunit ngayon ay hindi na ginagamit
at aalisin sa hinaharap na release:

-margonnaut
Hindi na ginagamit ang FPX.

-big-endian
-EB Mag-compile ng code para sa malalaking target na endian. Ang paggamit sa mga opsyong ito ay hindi na ginagamit. Mga gumagamit
gusto ng big-endian code, dapat gamitin ang "arceb-elf32" at "arceb-linux-uclibc" na mga target
kapag binubuo ang tool chain, kung saan big-endian ang default.

-mlittle-endian
-ANG Mag-compile ng code para sa maliliit na endian na target. Ang paggamit sa mga opsyong ito ay hindi na ginagamit.
Ang mga gumagamit na gustong maliit na-endian code ay dapat gumamit ng "arc-elf32" at "arc-linux-uclibc"
mga target kapag binubuo ang tool chain, kung saan ang little-endian ang default.

-mbarrel_shifter
Pinalitan ng -barrel-shifter.

-mdpfp_compact
Pinalitan ng -mdpfp-compact.

-mdpfp_fast
Pinalitan ng -mdpfp-mabilis.

-mdsp_packa
Pinalitan ng -mdsp-packa.

-mEA
Pinalitan ng -mea.

-mmac_24
Pinalitan ng -mmac-24.

-mmac_d16
Pinalitan ng -mmac-d16.

-mspfp_compact
Pinalitan ng -mspfp-compact.

-mspfp_fast
Pinalitan ng -mspfp-mabilis.

-mtune=CPU
Halaga ng arko600, arko601, arko700 at arc700-xmac para CPU ay pinalitan ng ARC600, ARC601,
ARC700 at ARC700-xmac buong galang

-multcost=num
Pinalitan ng -multcost.

Braso Options

mga ito -m ang mga opsyon ay tinukoy para sa ARM port:

-mabi=pangalan
Bumuo ng code para sa tinukoy na ABI. Ang mga pinahihintulutang halaga ay: apcs-gnu, atpcs, aapcs,
aapcs-linux at iwmmxt.

-mapcs-frame
Bumuo ng stack frame na sumusunod sa ARM Procedure Call Standard para sa lahat
function, kahit na hindi ito mahigpit na kinakailangan para sa tamang pagpapatupad ng code.
Tinutukoy -fomit-frame-pointer sa pagpipiliang ito ay nagiging sanhi ng mga stack frame na hindi
nabuo para sa mga function ng dahon. Ang default ay -mno-apcs-frame. Ang pagpipiliang ito ay
hindi na ginagamit.

-Mapcs
Ito ay kasingkahulugan ng -mapcs-frame at hindi na ginagamit.

-mthumb-interwork
Bumuo ng code na sumusuporta sa pagtawag sa pagitan ng mga set ng pagtuturo ng ARM at Thumb.
Kung wala ang opsyong ito, sa mga pre-v5 na arkitektura, hindi maaaring ang dalawang set ng pagtuturo
mapagkakatiwalaang ginagamit sa loob ng isang programa. Ang default ay -mno-thumb-interwork, mula nang bahagya
mas malaking code ay nabuo kapag -mthumb-interwork ay tinukoy. Sa mga pagsasaayos ng AAPCS
ang pagpipiliang ito ay walang kahulugan.

-mno-sched-prolog
Pigilan ang muling pagsasaayos ng mga tagubilin sa prologue ng function, o ang pagsasama ng
yaong mga pagtuturo na may mga tagubilin sa katawan ng function. Ibig sabihin, lahat
Nagsisimula ang mga function sa isang makikilalang hanay ng mga tagubilin (o sa katunayan ay isa sa isang pagpipilian
mula sa isang maliit na hanay ng iba't ibang mga prologue ng function), at ang impormasyong ito ay magagamit sa
hanapin ang simula ng mga function sa loob ng isang executable na piraso ng code. Ang default ay
-msched-prolog.

-mfloat-abi=pangalan
Tinutukoy kung aling floating-point ABI ang gagamitin. Ang mga pinahihintulutang halaga ay: malambot, softfp at
mahirap.

Tinutukoy malambot nagiging sanhi ng GCC na makabuo ng output na naglalaman ng mga tawag sa library para sa lumulutang-
mga operasyon ng punto. softfp nagbibigay-daan sa pagbuo ng code gamit ang hardware floating-point
mga tagubilin, ngunit ginagamit pa rin ang mga soft-float calling convention. mahirap ay nagbibigay-daan sa
pagbuo ng mga floating-point na mga tagubilin at gumagamit ng mga convention sa pagtawag na partikular sa FPU.

Ang default ay depende sa partikular na target na configuration. Tandaan na ang hard-float
at ang mga soft-float na ABI ay hindi tugma sa link; dapat mong i-compile ang iyong buong programa gamit ang
ang parehong ABI, at nag-link sa isang katugmang hanay ng mga aklatan.

-mlittle-endian
Bumuo ng code para sa isang processor na tumatakbo sa little-endian mode. Ito ang default para sa
lahat ng karaniwang mga pagsasaayos.

-big-endian
Bumuo ng code para sa isang processor na tumatakbo sa big-endian mode; ang default ay i-compile
code para sa isang maliit na-endian na processor.

-martsa=pangalan
Tinutukoy nito ang pangalan ng arkitektura ng target na ARM. Ginagamit ng GCC ang pangalang ito sa
tukuyin kung anong uri ng mga tagubilin ang mailalabas nito kapag bumubuo ng assembly code. Ito
ang opsyon ay maaaring gamitin kasabay ng o sa halip ng -mcpu= opsyon. Pinahihintulutan
ang mga pangalan ay: 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 ay ang arkitekturang armv7-a na may mga extension ng virtualization.

-march=armv8-a+crc nagbibigay-daan sa pagbuo ng code para sa arkitektura ng ARMv8-A kasama ng
ang mga opsyonal na extension ng CRC32.

-martsa=katutubo nagiging sanhi ng auto-detect ng compiler ang arkitektura ng build
kompyuter. Sa kasalukuyan, ang tampok na ito ay sinusuportahan lamang sa GNU/Linux, at hindi lahat
kinikilala ang mga arkitektura. Kung ang auto-detect ay hindi matagumpay ang opsyon ay walang
epekto.

-mtune=pangalan
Tinutukoy ng opsyong ito ang pangalan ng target na ARM processor kung saan dapat ibagay ng GCC
ang pagganap ng code. Para sa ilang mga pagpapatupad ng ARM, maaaring maging mas mahusay ang pagganap
nakuha sa pamamagitan ng paggamit ng pagpipiliang ito. Ang mga pinahihintulutang pangalan ay: arm2, arm250, arm3, arm6,
arm60, arm600, arm610, arm620, arm7, braso7m, braso7d, braso7dm, braso7di, arm7dmi, arm70,
arm700, braso700i, arm710, braso710c, arm7100, arm720, arm7500, arm7500fe, arm7tdmi,
arm7tdmi-s, braso710t, braso720t, braso740t, malakas na bisig, malakas na sandata110, malakas na sandata1100,
malakas na sandata1110, arm8, arm810, arm9, braso9e, arm920, braso920t, braso922t, arm946e-s,
arm966e-s, arm968e-s, braso926ej-s, braso940t, arm9tdmi, arm10tdmi, braso1020t, braso1026ej-s,
braso10e, braso1020e, braso1022e, braso1136j-s, braso1136jf-s, mpcore, mpcorenovfp, braso1156t2-s,
braso1156t2f-s, braso1176jz-s, braso1176jzf-s, cortex-a5, cortex-a7, cortex-a8, cortex-a9,
cortex-a12, cortex-a15, cortex-a53, cortex-a57, cortex-a72, cortex-r4, cortex-r4f,
cortex-r5, cortex-r7, cortex-m7, cortex-m4, cortex-m3, cortex-m1, cortex-m0,
cortex-m0plus, cortex-m1.small-multiply, cortex-m0.small-multiply,
cortex-m0plus.small-multiply, exynos-m1, marvell-pj4, xscale, iwmmxt, iwmmxt2, ep9312,
fa526, fa626, fa606te, fa626te, fmp626, fa726te, xgene1.

Bukod pa rito, maaaring tukuyin ng opsyong ito na dapat ibagay ng GCC ang pagganap ng code
para sa isang malaki.MUNTING sistema. Ang mga pinahihintulutang pangalan ay: cortex-a15.cortex-a7,
cortex-a57.cortex-a53, cortex-a72.cortex-a53.

-mtune=generic-arko tumutukoy na dapat ibagay ng GCC ang pagganap para sa isang timpla ng
mga processor sa loob ng arkitektura arko. Ang layunin ay upang makabuo ng code na gumagana nang maayos sa
kasalukuyang pinakasikat na mga processor, na nagbabalanse sa pagitan ng mga pag-optimize na nakikinabang sa ilan
Mga CPU sa hanay, at pag-iwas sa mga pitfall sa pagganap ng iba pang mga CPU. Ang mga epekto ng
maaaring magbago ang opsyong ito sa mga bersyon ng GCC sa hinaharap habang dumarating at umalis ang mga modelo ng CPU.

-mtune=katutubo nagiging sanhi ng auto-detect ng compiler ang CPU ng build computer. Sa
sa kasalukuyan, ang tampok na ito ay sinusuportahan lamang sa GNU/Linux, at hindi lahat ng mga arkitektura
kinikilala. Kung ang auto-detect ay hindi matagumpay ang opsyon ay walang epekto.

-mcpu=pangalan
Tinutukoy nito ang pangalan ng target na ARM processor. Ginagamit ng GCC ang pangalang ito para makuha ang
pangalan ng target na arkitektura ng ARM (parang tinukoy ng -martsa) at ang processor ng ARM
uri para sa kung saan tune para sa pagganap (parang tinukoy ng -mtune). Kung saan ang pagpipiliang ito
ay ginagamit kasabay ng -martsa or -mtune, ang mga pagpipiliang iyon ay mauuna kaysa sa
naaangkop na bahagi ng opsyong ito.

Ang mga pinahihintulutang pangalan para sa opsyong ito ay pareho sa para sa -mtune.

-mcpu=generic-arko ay pinahihintulutan din, at katumbas ng -martsa=arko
-mtune=generic-arko. Tingnan -mtune para sa karagdagang impormasyon.

-mcpu=katutubo nagiging sanhi ng auto-detect ng compiler ang CPU ng build computer. Sa
sa kasalukuyan, ang tampok na ito ay sinusuportahan lamang sa GNU/Linux, at hindi lahat ng mga arkitektura
kinikilala. Kung ang auto-detect ay hindi matagumpay ang opsyon ay walang epekto.

-mfpu=pangalan
Tinutukoy nito kung saan available ang floating-point hardware (o hardware emulation).
ang target. Ang mga pinahihintulutang pangalan ay: vfp, vfpv3, vfpv3-fp16, vfpv3-d16, vfpv3-d16-fp16,
vfpv3xd, vfpv3xd-fp16, neon, neon-fp16, vfpv4, vfpv4-d16, fpv4-sp-d16, neon-vfpv4,
fpv5-d16, fpv5-sp-d16, fp-armv8, neon-fp-armv8, at crypto-neon-fp-armv8.

If -msoft-float ay tinukoy na ito ay tumutukoy sa format ng mga floating-point na halaga.

Kung kasama sa napiling floating-point hardware ang NEON extension (hal -mfpu=neon),
tandaan na ang mga pagpapatakbo ng floating-point ay hindi nabuo ng auto-vectorization pass ng GCC
maliban na lamang kung -funsafe-math-optimizations ay tinukoy din. Ito ay dahil sa NEON hardware
ay hindi ganap na nagpapatupad ng pamantayang IEEE 754 para sa floating-point arithmetic (sa
ang mga partikular na denormal na halaga ay itinuturing bilang zero), kaya ang paggamit ng mga tagubilin sa NEON ay maaaring
humantong sa pagkawala ng katumpakan.

-mfp16-format=pangalan
Tukuyin ang format ng "__fp16" na half-precision na floating-point na uri. Pinahihintulutan
mga pangalan ay wala, heeee, at alternatiba; ang default ay wala, kung saan ang "__fp16"
hindi tinukoy ang uri.

-mstructure-size-boundary=n
Ang mga sukat ng lahat ng istruktura at unyon ay bilugan sa isang multiple ng bilang ng
mga bit na itinakda ng opsyong ito. Ang mga pinahihintulutang halaga ay 8, 32 at 64. Ang default na halaga
nag-iiba para sa iba't ibang toolchain. Para sa toolchain na naka-target sa COFF ang default na halaga ay
8. Pinapayagan lang ang value na 64 kung sinusuportahan ito ng pinagbabatayan na ABI.

Ang pagtukoy ng mas malaking numero ay maaaring makagawa ng mas mabilis, mas mahusay na code, ngunit maaari rin
dagdagan ang laki ng programa. Ang iba't ibang mga halaga ay maaaring hindi tugma.
Ang code na pinagsama-sama sa isang halaga ay hindi kinakailangang umasa na gagana sa code o mga aklatan
pinagsama-sama sa isa pang halaga, kung nagpapalitan sila ng impormasyon gamit ang mga istruktura o unyon.

-mabort-on-noreturn
Bumuo ng isang tawag sa function na "abort" sa dulo ng isang "noreturn" function. Ito ay
naisakatuparan kung ang function ay sumusubok na bumalik.

-mlong-tawag
-mno-mahabang-tawag
Sinasabi sa compiler na magsagawa ng mga function call sa pamamagitan ng unang pag-load ng address ng
gumana sa isang rehistro at pagkatapos ay magsagawa ng subroutine na tawag sa rehistrong ito. Ito
kailangan ang switch kung ang target na function ay nasa labas ng 64-megabyte addressing
hanay ng offset-based na bersyon ng pagtuturo ng subroutine na tawag.

Kahit na naka-enable ang switch na ito, hindi lahat ng function call ay gagawing mahabang tawag.
Ang heuristic ay ang mga static na function, mga function na mayroong "short_call"
attribute, mga function na nasa saklaw ng isang "#pragma no_long_calls" na direktiba,
at mga function na ang mga kahulugan ay naipon na sa loob ng kasalukuyang
hindi ginagawang mahabang tawag ang compilation unit. Ang mga pagbubukod sa panuntunang ito ay iyon
mahinang mga kahulugan ng function, mga function na may attribute na "long_call" o ang "section"
attribute, at mga function na nasa saklaw ng isang "#pragma long_calls" na direktiba
ay palaging nagiging mahabang tawag.

Ang tampok na ito ay hindi pinagana bilang default. Tinutukoy -mno-mahabang-tawag ibalik ang
default na pag-uugali, tulad ng paglalagay ng mga function na tawag sa loob ng saklaw ng isang "#pragma
long_calls_off" na direktiba. Tandaan na ang mga switch na ito ay walang epekto sa kung paano ang compiler
bumubuo ng code upang pangasiwaan ang mga tawag sa function sa pamamagitan ng mga function pointer.

-msingle-pic-base
Tratuhin ang rehistro na ginamit para sa PIC addressing bilang read-only, sa halip na i-load ito sa
prologue para sa bawat function. Ang runtime system ang may pananagutan sa pagsisimula nito
magparehistro na may naaangkop na halaga bago magsimula ang pagpapatupad.

-mpic-register=reg
Tukuyin ang rehistro na gagamitin para sa PIC addressing. Para sa karaniwang PIC base case, ang
Ang default ay anumang angkop na rehistro na tinutukoy ng tagatala. Para sa solong PIC base case,
ang default ay R9 kung ang target ay batay sa EABI o pinagana ang stack-checking, kung hindi man ay ang
ang default ay R10.

-mpic-data-ay-text-relative
Ipagpalagay na ang bawat segment ng data ay nauugnay sa segment ng text sa oras ng pag-load. Samakatuwid,
pinahihintulutan nito ang pagtugon sa data gamit ang mga operasyong nauugnay sa PC. Naka-on ang opsyong ito bilang default
para sa mga target maliban sa VxWorks RTP.

-mpoke-function-name
Isulat ang pangalan ng bawat function sa seksyon ng teksto, nang direkta sa unahan ng function
prologue. Ang nabuong code ay katulad nito:

t0
.ascii "arm_poke_function_name", 0
.align
t1
.word 0xff000000 + (t1 - t0)
arm_poke_function_name
mov ip, sp
stmfd sp!, {fp, ip, lr, pc}
sub fp, ip, #4

Kapag nagsasagawa ng stack backtrace, maaaring suriin ng code ang halaga ng "pc" na nakaimbak sa "fp +
0". Kung titingnan ng trace function ang lokasyong "pc - 12" at ang nangungunang 8 bits ay
set, pagkatapos ay alam namin na mayroong isang function name na naka-embed kaagad bago ito
lokasyon at may haba na "((pc[-3]) at 0xff000000)".

-thumb
-marm
Pumili sa pagitan ng pagbuo ng code na ipapatupad sa ARM at Thumb states. Ang default para sa
karamihan sa mga configuration ay upang bumuo ng code na execute sa ARM estado, ngunit ang default
maaaring baguhin sa pamamagitan ng pag-configure ng GCC gamit ang --with-mode=ay opsyon sa pag-configure.

-mtpcs-frame
Bumuo ng stack frame na sumusunod sa Thumb Procedure Call Standard para sa
lahat ng non-leaf function. (Ang isang function ng dahon ay isa na hindi tumatawag sa iba
function.) Ang default ay -mno-tpcs-frame.

-mtpcs-leaf-frame
Bumuo ng stack frame na sumusunod sa Thumb Procedure Call Standard para sa
lahat ng mga function ng dahon. (Ang isang function ng dahon ay isa na hindi tumatawag sa anumang iba pang mga function.)
Ang default ay -mno-apcs-leaf-frame.

-mcallee-super-interworking
Nagbibigay sa lahat ng nakikitang panlabas na mga function sa file na pinagsama-sama ng isang pagtuturo ng ARM
itakda ang header na lilipat sa Thumb mode bago isagawa ang natitirang bahagi ng function.
Nagbibigay-daan ito sa mga function na ito na tawagan mula sa non-interworking code. Ang pagpipiliang ito ay
hindi wasto sa mga configuration ng AAPCS dahil pinagana ang interworking bilang default.

-mcaller-super-interworking
Nagbibigay-daan sa mga tawag sa pamamagitan ng mga function pointer (kabilang ang mga virtual function) na maisagawa nang tama
hindi alintana kung ang target code ay pinagsama-sama para sa interworking o hindi.
Mayroong maliit na overhead sa halaga ng pagsasagawa ng isang function pointer kung ang pagpipiliang ito
ay pinagana. Hindi wasto ang opsyong ito sa mga configuration ng AAPCS dahil ang interworking ay
pinagana bilang default.

-mtp=pangalan
Tukuyin ang modelo ng pag-access para sa pointer ng lokal na imbakan ng thread. Ang mga wastong modelo ay
malambot, na bumubuo ng mga tawag sa "__aeabi_read_tp", cp15, na kumukuha ng thread
pointer mula sa "cp15" nang direkta (sinusuportahan sa arm6k architecture), at kotse, Na
gumagamit ng pinakamahusay na magagamit na paraan para sa napiling processor. Ang default na setting ay
kotse.

-mtls-dialect=dialect
Tukuyin ang diyalektong gagamitin para sa pag-access ng lokal na imbakan ng thread. Dalawa dialects ay
suportado---gnu at gnu2. ang gnu Pinipili ng dialect ang orihinal na GNU scheme para sa
pagsuporta sa mga lokal at pandaigdigang dynamic na modelo ng TLS. Ang gnu2 pinipili ng diyalekto ang GNU
descriptor scheme, na nagbibigay ng mas mahusay na performance para sa mga shared library. Ang GNU
Ang descriptor scheme ay tugma sa orihinal na scheme, ngunit nangangailangan ito ng bago
assembler, linker at suporta sa library. Ang mga inisyal at lokal na exec na modelo ng TLS ay
hindi apektado ng opsyong ito at palaging gamitin ang orihinal na scheme.

-mword-relocations
Bumuo lamang ng ganap na mga relokasyon sa mga halagang kasing laki ng salita (ibig sabihin, R_ARM_ABS32). Ito ay
pinagana bilang default sa mga target (uClinux, SymbianOS) kung saan nagpapataw ang runtime loader
ang paghihigpit na ito, at kung kailan -fpic or -fPIC ay tinukoy.

-mfix-cortex-m3-ldrd
Ang ilang mga Cortex-M3 core ay maaaring magdulot ng katiwalian ng data kapag may "ldrd" na mga tagubilin
ginagamit ang magkakapatong na destinasyon at mga base register. Iniiwasan ng pagpipiliang ito ang pagbuo
mga tagubiling ito. Ang opsyong ito ay pinagana bilang default kapag -mcpu=cortex-m3 is
tinukoy.

-munaligned-access
-mno-unaaligned-access
Pinapagana (o hindi pinapagana) ang pagbabasa at pagsulat ng 16- at 32-bit na mga halaga mula sa mga address
na hindi 16- o 32-bit na nakahanay. Bilang default, ang hindi nakahanay na pag-access ay hindi pinagana para sa lahat
pre-ARMv6 at lahat ng arkitektura ng ARMv6-M, at pinagana para sa lahat ng iba pang arkitektura. Kung
hindi pinagana ang hindi nakahanay na pag-access pagkatapos ay ina-access ang mga salita sa mga istruktura ng naka-pack na data a
byte sa isang pagkakataon.

Ang ARM attribute na "Tag_CPU_unaaligned_access" ay nakatakda sa nabuong object file sa
tama man o mali, depende sa setting ng opsyong ito. Kung hindi nakahanay na pag-access
ay pinagana pagkatapos ay tinukoy din ang simbolo ng preprocessor na "__ARM_FEATURE_UNALIGNED".

-mneon-para-64bits
Pinapagana ang paggamit ng Neon upang pangasiwaan ang mga scalar na 64-bit na operasyon. Ito ay hindi pinagana bilang default
dahil ang halaga ng paglipat ng data mula sa mga pangunahing rehistro patungo sa Neon ay mataas.

-mslow-flash-data
Ipagpalagay na ang paglo-load ng data mula sa flash ay mas mabagal kaysa sa pagkuha ng pagtuturo. Samakatuwid literal
pinapaliit ang load para sa mas mahusay na performance. Ang opsyong ito ay sinusuportahan lamang kapag
pag-compile para sa ARMv7 M-profile at naka-off bilang default.

-masm-syntax-unified
Ipagpalagay na ang inline assembler ay gumagamit ng pinag-isang asm syntax. Kasalukuyang naka-off ang default
na nagpapahiwatig ng hating syntax. Sa kasalukuyan, available lang ang opsyong ito para sa Thumb1 at
ay walang epekto sa estado ng ARM at Thumb2. Gayunpaman, ito ay maaaring magbago sa hinaharap na mga release ng
GCC. Dapat ituring na hindi na ginagamit ang hinati na syntax.

-mrestrict-it
Pinaghihigpitan ang pagbuo ng mga bloke ng IT upang sumunod sa mga panuntunan ng ARMv8. Maaari ang mga bloke ng IT
naglalaman lamang ng isang 16-bit na pagtuturo mula sa isang piling hanay ng mga tagubilin. Ito
naka-on ang opsyon bilang default para sa ARMv8 Thumb mode.

-mprint-tune-info
I-print ang impormasyon sa pag-tune ng CPU bilang komento sa assembler file. Ito ay isang opsyon na ginamit
para lamang sa regression testing ng compiler at hindi inilaan para sa ordinaryong paggamit sa
pag-compile ng code. Ang pagpipiliang ito ay hindi pinagana bilang default.

AVR Options

Ang mga opsyong ito ay tinukoy para sa mga pagpapatupad ng AVR:

-mmcu=mcu
Tukuyin ang Atmel AVR instruction set architectures (ISA) o uri ng MCU.

Ang default para sa opsyong ito ay@tie{}avr2.

Sinusuportahan ng GCC ang mga sumusunod na AVR device at ISA:

"avr2"
Mga "Classic" na device na may hanggang 8@tie{}KiB ng memorya ng program. mcu@tie{}= "attiny22",
"attiny26", "at90c8534", "at90s2313", "at90s2323", "at90s2333", "at90s2343",
"at90s4414", "at90s4433", "at90s4434", "at90s8515", "at90s8535".

"avr25"
Mga "Classic" na device na may hanggang 8@tie{}KiB ng memorya ng program at may "MOVW"
tagubilin. 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"
Mga "Classic" na device na may 16@tie{}KiB hanggang 64@tie{}KiB ng memorya ng program.
mcu@tie{}= "at43usb355", "at76c711".

"avr31"
Mga "Classic" na device na may 128@tie{}KiB ng memory ng program. mcu@tie{}= "atmega103",
"at43usb320".

"avr35"
Mga "Classic" na device na may 16@tie{}KiB hanggang 64@tie{}KiB ng memorya ng program at may
ang "MOVW" na pagtuturo. mcu@tie{}= "ata5505", "ata6617c", "ata664251",
"atmega16u2", "atmega32u2", "atmega8u2", "attiny1634", "attiny167", "at90usb162",
"at90usb82".

"avr4"
"Pinahusay" na mga device na may hanggang 8@tie{}KiB ng memorya ng program. 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"
"Pinahusay" na mga device na may 16@tie{}KiB hanggang 64@tie{}KiB ng memorya ng program.
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"
Mga "Pinahusay" na device na may 128@tie{}KiB ng memorya ng program. mcu@tie{}= "atmega128",
"atmega128a", "atmega128rfa1", "atmega128rfr2", "atmega1280", "atmega1281",
"atmega1284", "atmega1284p", "atmega1284rfr2", "at90can128", "at90usb1286",
"at90usb1287".

"avr6"
"Pinahusay" na mga device na may 3-byte na PC, ibig sabihin, may higit sa 128@tie{}KiB ng program
memorya. mcu@tie{}= "atmega256rfr2", "atmega2560", "atmega2561", "atmega2564rfr2".

"avrxmega2"
Mga "XMEGA" na device na may higit sa 8@tie{}KiB at hanggang 64@tie{}KiB ng memorya ng program.
mcu@tie{}= "atxmega16a4", "atxmega16a4u", "atxmega16c4", "atxmega16d4",
"atxmega16e5", "atxmega32a4", "atxmega32a4u", "atxmega32c3", "atxmega32c4",
"atxmega32d3", "atxmega32d4", "atxmega32e5", "atxmega8e5".

"avrxmega4"
Mga "XMEGA" na device na may higit sa 64@tie{}KiB at hanggang 128@tie{}KiB ng program
memorya. mcu@tie{}= "atxmega64a3", "atxmega64a3u", "atxmega64a4u", "atxmega64b1",
"atxmega64b3", "atxmega64c3", "atxmega64d3", "atxmega64d4".

"avrxmega5"
Mga "XMEGA" na device na may higit sa 64@tie{}KiB at hanggang 128@tie{}KiB ng program
memorya at higit sa 64@tie{}KiB ng RAM. mcu@tie{}= "atxmega64a1",
"atxmega64a1u".

"avrxmega6"
Mga "XMEGA" na device na may higit sa 128@tie{}KiB ng memorya ng program. mcu@tali{}=
"atxmega128a3", "atxmega128a3u", "atxmega128b1", "atxmega128b3", "atxmega128c3",
"atxmega128d3", "atxmega128d4", "atxmega192a3", "atxmega192a3u", "atxmega192c3",
"atxmega192d3", "atxmega256a3", "atxmega256a3b", "atxmega256a3bu",
"atxmega256a3u", "atxmega256c3", "atxmega256d3", "atxmega384c3", "atxmega384d3".

"avrxmega7"
Mga "XMEGA" na device na may higit sa 128@tie{}KiB ng memorya ng program at higit pa sa
64@tie{}KiB ng RAM. mcu@tie{}= "atxmega128a1", "atxmega128a1u", "atxmega128a4u".

"avrtiny"
"TINY" Maliliit na core device na may 512@tie{}B hanggang 4@tie{}KiB ng memory ng program.
mcu@tie{}= "attiny10", "attiny20", "attiny4", "attiny40", "attiny5", "attiny9".

"avr1"
Ang ISA na ito ay ipinatupad ng kaunting AVR core at sinusuportahan para sa assembler lamang.
mcu@tie{}= "attiny11", "attiny12", "attiny15", "attiny28", "at90s1200".

-maccumulate-args
Mag-ipon ng mga papalabas na argumento ng function at kunin/i-release ang kinakailangang stack space para sa
mga papalabas na argumento ng function nang isang beses sa function prologue/epilogue. Kung wala ang pagpipiliang ito,
ang mga papalabas na argumento ay itinutulak bago tumawag ng isang function at nag-pop pagkatapos.

Ang pagpo-pop ng mga argumento pagkatapos ng function na tawag ay maaaring magastos sa AVR upang iyon
ang pag-iipon ng stack space ay maaaring humantong sa mas maliliit na executable dahil kailangan ng mga argumento
hindi dapat alisin sa stack pagkatapos ng naturang function na tawag.

Ang pagpipiliang ito ay maaaring humantong sa pinababang laki ng code para sa mga function na nagsasagawa ng ilang mga tawag sa
mga function na kumukuha ng kanilang mga argumento sa stack tulad ng mga tawag sa printf-like function.

-mbranch-cost=gastos
Itakda ang mga gastos sa sangay para sa mga tagubiling may kondisyong sangay gastos. Mga makatwirang halaga
para gastos ay maliliit, hindi negatibong integer. Ang default na gastos ng sangay ay 0.

-mcall-prologues
Ang mga function na prologue/epilogue ay pinalawak bilang mga tawag sa mga naaangkop na subroutine. Code
mas maliit ang sukat.

-mint8
Ipagpalagay na ang "int" ay 8-bit integer. Nakakaapekto ito sa laki ng lahat ng uri: ang "char" ay 1
byte, ang "int" ay 1 byte, ang "long" ay 2 byte, at ang "long long" ay 4 byte. Pakiusap
tandaan na ang pagpipiliang ito ay hindi sumusunod sa mga pamantayan ng C, ngunit nagreresulta ito sa mas maliit
laki ng code.

-mn-flash=num
Ipagpalagay na ang flash memory ay may sukat na num beses 64@tie{}KiB.

-mno-interrupts
Ang nabuong code ay hindi tugma sa mga pagkagambala sa hardware. Mas maliit ang laki ng code.

-magpahinga
Subukang palitan ang "CALL" resp. "JMP" na pagtuturo ng mas maikling "RCALL" resp. "RJMP"
pagtuturo kung naaangkop. Setting -magpahinga idinagdag lamang ang --mlink-relax opsyon sa
command line ng assembler at ang --relax opsyon sa command line ng linker.

Ang jump relaxing ay ginagawa ng linker dahil hindi pa alam ang mga jump offset
matatagpuan ang code. Samakatuwid, ang assembler code na nabuo ng compiler ay pareho,
ngunit ang mga tagubilin sa executable ay maaaring iba sa mga tagubilin sa assembler
code.

Dapat i-on ang pagre-relax kung kailangan ang mga linker stub, tingnan ang seksyon sa "EIND" at
linker stubs sa ibaba.

-mrmw
Ipagpalagay na sinusuportahan ng device ang Read-Modify-Write na mga tagubilin "XCH", "LAC", "LAS"
at "LAT".

-msp8
Tratuhin ang stack pointer register bilang isang 8-bit register, ibig sabihin, ipalagay ang mataas na byte ng
ang stack pointer ay zero. Sa pangkalahatan, hindi mo kailangang itakda ang opsyong ito sa pamamagitan ng kamay.

Ang opsyong ito ay panloob na ginagamit ng compiler para pumili at bumuo ng mga multilibs
mga arkitektura na "avr2" at "avr25". Pinaghahalo ng mga arkitektura na ito ang mga device na mayroon at wala
"SPH". Para sa anumang setting maliban sa -mmcu=avr2 or -mmcu=avr25 idinagdag ng driver ng compiler
o inaalis ang opsyong ito mula sa command line ng compiler proper, dahil ang compiler
pagkatapos ay alam kung ang aparato o arkitektura ay may 8-bit na stack pointer at sa gayon ay walang "SPH"
magparehistro o hindi.

-mstrict-X
Gamitin ang rehistro ng address na "X" sa paraang iminungkahi ng hardware. Nangangahulugan ito na ang "X" ay
ginagamit lamang sa hindi direkta, post-increment o pre-decrement addressing.

Kung wala ang pagpipiliang ito, ang "X" na rehistro ay maaaring gamitin sa parehong paraan tulad ng "Y" o "Z" na
pagkatapos ay emulated sa pamamagitan ng karagdagang mga tagubilin. Halimbawa, naglo-load ng isang halaga gamit ang
Ang "X+const" ay tumutugon sa isang maliit na hindi negatibong "const < 64" sa isang rehistro Rn is
gumanap bilang

adiw r26, const ; X += const
ld , X ; = *X
sbiw r26, const; X -= const

-mtiny-stack
Baguhin lamang ang mas mababang 8@tie{}bits ng stack pointer.

-nodevicelib
Huwag mag-link laban sa library na partikular sa device ng AVR-LibC na "libdev.a".

-Waddr-space-convert
Magbabala tungkol sa mga conversion sa pagitan ng mga puwang ng address sa kaso kung saan ang resultang address
ang espasyo ay hindi nakapaloob sa papasok na puwang ng address.

"EIND" at Mga Device na may Higit sa 128 Ki Bytes ng Flash

Ang mga pointer sa pagpapatupad ay 16@tie{}bits ang lapad. Ang address ng isang function o label
ay kinakatawan bilang address ng salita upang ang mga hindi direktang pagtalon at mga tawag ay ma-target ang anumang code
address sa hanay ng 64@tie{}Ki na salita.

Upang mapadali ang hindi direktang pagtalon sa mga device na may higit sa 128@tie{}Ki byte ng
program memory space, mayroong isang espesyal na function na rehistro na tinatawag na "EIND" na nagsisilbing
pinakamahalagang bahagi ng target na address kapag ang "EICALL" o "EIJMP" na mga tagubilin ay
ginagamit.

Ang mga hindi direktang pagtalon at tawag sa mga device na ito ay pinangangasiwaan bilang mga sumusunod ng compiler at ay
napapailalim sa ilang mga limitasyon:

* Ang compiler ay hindi kailanman nagtatakda ng "EIND".

* Ang compiler ay gumagamit ng "EIND" nang tahasan sa "EICALL"/"EIJMP" na mga tagubilin o maaaring basahin
Direktang "EIND" upang tularan ang isang hindi direktang tawag/lundag sa pamamagitan ng isang "RET"
tagubilin.

* Ipinapalagay ng compiler na ang "EIND" ay hindi nagbabago sa panahon ng startup code o sa panahon ng
aplikasyon. Sa partikular, ang "EIND" ay hindi nai-save/na-restore sa function o interrupt
paunang salita/epilogue ng nakagawiang serbisyo.

* Para sa hindi direktang mga tawag sa mga function at nakalkulang goto, ang linker ay bumubuo stubs. Mga stub
ay mga jump pad kung minsan ay tinatawag din mga trampoline. Kaya, ang hindi direktang tawag/paglukso ay tumalon sa
ganyang usbong. Ang stub ay naglalaman ng direktang pagtalon sa nais na address.

* Dapat na i-on ang relaxation ng linker upang mabuo ng linker ang mga stub nang tama
sa lahat ng sitwasyon. Tingnan ang opsyon ng compiler -magpahinga at ang opsyon ng linker --relax.
May mga sulok na kaso kung saan ang linker ay dapat na bumuo ng mga stub ngunit abort
nang walang pagpapahinga at walang kapaki-pakinabang na mensahe ng error.

* Ang default na linker script ay nakaayos para sa code na may "EIND = 0". Kung ang code ay dapat
upang gumana para sa isang setup na may "EIND != 0", isang custom na linker script ay kailangang gamitin sa pagkakasunud-sunod
upang ilagay ang mga seksyon na ang pangalan ay nagsisimula sa ".trampolines" sa segment kung saan
Ang "EIND" ay tumuturo sa.

* Ang startup code mula sa libgcc ay hindi kailanman nagtatakda ng "EIND". Pansinin na ang startup code ay isang timpla
ng code mula sa libgcc at AVR-LibC. Para sa epekto ng AVR-LibC sa "EIND", tingnan ang AVR-
LibC user manual ("http://nongnu.org/avr-libc/user-manual/").

* Lehitimo para sa startup code na partikular sa user na mag-set up ng "EIND" nang maaga, halimbawa sa pamamagitan ng
ibig sabihin ng initialization code na matatagpuan sa seksyong ".init3". Ang nasabing code ay tumatakbo bago ang
pangkalahatang startup code na nagpapasimula ng RAM at tumatawag sa mga constructor, ngunit pagkatapos ng kaunting
startup code mula sa AVR-LibC na nagtatakda ng "EIND" sa segment kung nasaan ang vector table
matatagpuan.

#isama

static na walang bisa
__attribute__((section(".init3"),hubad,gamit,walang_instrument_function))
init3_set_eind (walang bisa)
{
__asm ​​volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
"out %i0,r24" :: "n" (&EIND): "r24","memory");
}

Ang simbolo na "__trampolines_start" ay tinukoy sa script ng linker.

* Ang mga stub ay awtomatikong nabuo ng linker kung ang sumusunod na dalawang kundisyon ay
nakilala:

-
(maikli para sa lumikha stubs) tulad nito:

LDI r24, lo8(gs( ))
LDI r25, hi8(gs( ))

-
sa labas ang segment kung saan matatagpuan ang mga stub.

* Ang compiler ay naglalabas ng mga ganitong "gs" modifier para sa mga label ng code sa mga sumusunod na sitwasyon:

-
-
- -mcall-prologues>
opsyon sa command-line.

-
mga talahanayan na maaari mong tukuyin ang -fno-jump-tables opsyon sa command-line.

-
-
* Paglukso sa mga hindi simbolikong address na tulad nito hindi suportado:

int pangunahing (walang bisa)
{
/* Call function sa word address 0x2 */
return ((int(*)(void)) 0x2)();
}

Sa halip, kailangang i-set up ang isang stub, ibig sabihin, kailangang tawagan ang function sa pamamagitan ng isang simbolo
("func_4" sa halimbawa):

int pangunahing (walang bisa)
{
extern int func_4 (walang bisa);

/* Call function sa byte address 0x4 */
ibalik ang func_4();
}

at ang aplikasyon ay maiugnay sa -Wl,--defsym,func_4=0x4. Bilang kahalili, "func_4"
maaaring tukuyin sa script ng linker.

Pangangasiwa ng "RAMPD", "RAMPX", "RAMPY" at "RAMPZ" na Mga Espesyal na Function Register

Sinusuportahan ng ilang AVR device ang mga memoryang mas malaki kaysa sa 64@tie{}KiB range na maaaring ma-access
na may 16-bit na mga payo. Upang ma-access ang mga lokasyon ng memorya sa labas nitong 64@tie{}KiB range, ang
Ang nilalaman ng isang "RAMP" na rehistro ay ginagamit bilang mataas na bahagi ng address: Ang "X", "Y", "Z"
ang rehistro ng address ay pinagsama sa espesyal na function na "RAMPX", "RAMPY", "RAMPZ".
magparehistro, ayon sa pagkakabanggit, upang makakuha ng malawak na address. Katulad nito, ang "RAMPD" ay ginagamit kasama ng
direktang pagtugon.

* Sinisimulan ng startup code ang "RAMP" na espesyal na function na nagrerehistro na may zero.

* Kung ang AVR Pinangalanan address Mga puwang, pinangalanan tirahan puwang maliban sa generic o "__flash" ay
ginamit, pagkatapos ay itinakda ang "RAMPZ" kung kinakailangan bago ang operasyon.

* Kung sinusuportahan ng device ang RAM na mas malaki sa 64@tie{}KiB at kailangang magbago ang compiler
"RAMPZ" upang magawa ang isang operasyon, ang "RAMPZ" ay ni-reset sa zero pagkatapos ng operasyon.

* Kung ang device ay may kasamang partikular na "RAMP" na rehistro, ang ISR prologue/epilogue
sine-save/ibinabalik ang SFR na iyon at sinisimulan ito ng zero kung sakaling ang ISR code ay maaaring
(implicitly) gamitin ito.

* Ang RAM na mas malaki sa 64@tie{}KiB ay hindi sinusuportahan ng GCC para sa mga AVR target. Kung gagamit ka
inline assembler upang basahin mula sa mga lokasyon sa labas ng 16-bit na hanay ng address at magbago
isa sa mga "RAMP" na rehistro, dapat mong i-reset ito sa zero pagkatapos ng pag-access.

AVR Built-in na Macros

Tinutukoy ng GCC ang ilang built-in na macro upang masubukan ng user code ang presensya o
kawalan ng mga tampok. Halos alinman sa mga sumusunod na built-in na macro ay hinuhusgahan mula sa device
kakayahan at sa gayon ay na-trigger ng -mmcu= opsyon sa command-line.

Para sa higit pang mga built-in na macro na partikular sa AVR tingnan AVR Pinangalanan address Puwang at AVR Built-in
Pag-andar.

"__AVR_ARCH__"
Build-in na macro na lumulutas sa isang decimal na numero na tumutukoy sa arkitektura at
depende sa -mmcu=mcu opsyon. Ang mga posibleng halaga ay:

2, 25, 3, 31, 35, 4, 5, 51, 6

para mcu="avr2", "avr25", "avr3", "avr31", "avr35", "avr4", "avr5", "avr51", "avr6",

ayon sa pagkakabanggit at

100, 102, 104, 105, 106, 107

para mcu="avrtiny", "avrxmega2", "avrxmega4", "avrxmega5", "avrxmega6", "avrxmega7",
ayon sa pagkakabanggit. Kung mcu tumutukoy sa isang device, ang built-in na macro na ito ay nakatakda nang naaayon. Para sa
halimbawa, may -mmcu=atmega8 ang macro ay tinukoy sa 4.

"__AVR_Device__"
Pagtatakda ng -mmcu=aparato tumutukoy sa built-in na macro na ito na nagpapakita ng pangalan ng device. Para sa
Halimbawa, -mmcu=atmega8 tinutukoy ang built-in na macro na "__AVR_ATmega8__", -mmcu=attiny261a
tumutukoy sa "__AVR_ATtiny261A__", atbp.

Ang mga pangalan ng built-in na macro ay sumusunod sa scheme na "__AVR_Device__" saan Device ay ang
pangalan ng device mula sa manwal ng gumagamit ng AVR. Ang pagkakaiba sa pagitan ng Device sa built-in
macro at aparato in -mmcu=aparato ay ang huli ay palaging lowercase.

If aparato ay hindi isang aparato ngunit isang pangunahing arkitektura tulad ng avr51, ang macro na ito ay hindi
tinukoy.

"__AVR_DEVICE_NAME__"
Pagtatakda ng -mmcu=aparato tinutukoy ang built-in na macro na ito sa pangalan ng device. Halimbawa,
sa -mmcu=atmega8 ang macro ay tinukoy sa "atmega8".

If aparato ay hindi isang aparato ngunit isang pangunahing arkitektura tulad ng avr51, ang macro na ito ay hindi
tinukoy.

"__AVR_XMEGA__"
Ang aparato / arkitektura ay kabilang sa XMEGA pamilya ng mga aparato.

"__AVR_MAY_ELPM__"
Ang aparato ay may tagubiling "ELPM".

"__AVR_HAVE_ELPMX__"
Ang device ay may "ELPM Rn,Z" at "ELPM Rn,Z+" mga tagubilin.

"__AVR_HAVE_MOVW__"
Ang aparato ay may tagubiling "MOVW" upang magsagawa ng 16-bit na mga paggalaw ng rehistro-rehistro.

"__AVR_MAY_LPMX__"
Ang device ay may "LPM Rn,Z" at "LPM Rn,Z+" mga tagubilin.

"__AVR_HAVE_MUL__"
Ang device ay may hardware multiplier.

"__AVR_HAVE_JMP_CALL__"
Ang device ay may mga tagubiling "JMP" at "TUMAWAG". Ito ang kaso para sa mga device na may
hindi bababa sa 16@tie{}KiB ng memorya ng program.

"__AVR_MAY_EIJMP_EICALL__"
"__AVR_3_BYTE_PC__"
Ang device ay may mga tagubiling "EIJMP" at "EICALL". Ito ang kaso para sa mga device
na may higit sa 128@tie{}KiB ng memorya ng program. Nangangahulugan din ito na ang programa
ang counter (PC) ay 3@tie{}bytes ang lapad.

"__AVR_2_BYTE_PC__"
Ang program counter (PC) ay 2@tie{}bytes ang lapad. Ito ang kaso para sa mga device na may hanggang sa
128@tie{}KiB ng memorya ng program.

"__AVR_MAY_8BIT_SP__"
"__AVR_MAY_16BIT_SP__"
Ang stack pointer (SP) na rehistro ay itinuturing bilang 8-bit ayon sa pagkakabanggit 16-bit na rehistro ng
ang compiler. Ang kahulugan ng mga macro na ito ay apektado ng -mtiny-stack.

"__AVR_MAY_SPH__"
"__AVR_SP8__"
Ang aparato ay may SPH (mataas na bahagi ng stack pointer) na espesyal na rehistro o mayroon
isang 8-bit na stack pointer, ayon sa pagkakabanggit. Ang kahulugan ng mga macro na ito ay apektado ng
-mmcu= at sa mga kaso ng -mmcu=avr2 at -mmcu=avr25 din sa pamamagitan ng -msp8.

"__AVR_MAY_RAMPD__"
"__AVR_HAVE_RAMPX__"
"__AVR_HAVE_RAMPY__"
"__AVR_HAVE_RAMPZ__"
Ang device ay may "RAMPD", "RAMPX", "RAMPY", "RAMPZ" na espesyal na rehistro ng function,
ayon sa pagkakabanggit.

"__NO_INTERRUPTS__"
Sinasalamin ng macro na ito ang -mno-interrupts opsyon sa command-line.

"__AVR_ERRATA_SKIP__"
"__AVR_ERRATA_SKIP_JMP_CALL__"
Ang ilang AVR device (AT90S8515, ATmega103) ay hindi dapat laktawan ang 32-bit na mga tagubilin dahil sa isang
erratum ng hardware. Ang mga tagubilin sa paglaktaw ay "SBRS", "SBRC", "SBIS", "SBIC" at "CPSE".
Ang pangalawang macro ay tinukoy lamang kung ang "__AVR_HAVE_JMP_CALL__" ay nakatakda din.

"__AVR_ISA_RMW__"
Ang aparato ay may mga tagubilin sa Read-Modify-Write (XCH, LAC, LAS at LAT).

"__AVR_SFR_OFFSET__=offset"
Mga tagubilin na maaaring tumugon sa I/O special function registers nang direkta tulad ng "IN",
Maaaring gumamit ng ibang address ang "OUT", "SBI", atbp. na parang tinutugunan ng isang tagubilin sa
i-access ang RAM tulad ng "LD" o "STS". Nakadepende ang offset na ito sa arkitektura ng device at mayroon
na ibawas sa RAM address upang makuha ang kaukulang I/O@tie{}address.

"__WITH_AVRLIBC__"
Ang compiler ay na-configure upang magamit kasama ng AVR-Libc. Tingnan ang --na may-avrlibc
opsyon sa pag-configure.

Blackfin Options

-mcpu=CPU[-sirevision]
Tinutukoy ang pangalan ng target na processor ng Blackfin. Kasalukuyan, CPU maaaring isa sa
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.

Ang opsyonal sirevision tumutukoy sa silicon na rebisyon ng target na Blackfin
processor. Ang anumang mga solusyong magagamit para sa naka-target na rebisyon ng silikon ay pinagana.
If sirevision is wala, walang pinaganang mga workaround. Kung sirevision is anumang, Ang lahat ng
pinagana ang mga workaround para sa naka-target na processor. Ang "__SILICON_REVISION__" na macro
ay tinukoy sa dalawang hexadecimal digit na kumakatawan sa major at minor na mga numero sa
rebisyon ng silikon. Kung sirevision is wala, ang "__SILICON_REVISION__" ay hindi tinukoy.
If sirevision is anumang, ang "__SILICON_REVISION__" ay tinukoy bilang 0xffff. Kung ito
opsyonal sirevision ay hindi ginagamit, ipinapalagay ng GCC ang pinakabagong kilalang rebisyon ng silicon ng
naka-target na Blackfin processor.

Tinutukoy ng GCC ang isang preprocessor macro para sa tinukoy CPU. Para sa bfin-elf toolchain,
ang pagpipiliang ito ay nagiging sanhi ng hardware BSP na ibinigay ng libgloss upang ma-link sa kung -msim is
hindi binigay.

Kung wala ang pagpipiliang ito, bf532 ay ginagamit bilang processor bilang default.

Tandaan na ang suporta para sa bf561 ay hindi kumpleto. Para sa bf561, tanging ang preprocessor macro ay
tinukoy.

-msim
Tinutukoy na ang programa ay tatakbo sa simulator. Nagiging sanhi ito ng simulator
BSP na ibinigay ng libgloss upang maiugnay. Ang pagpipiliang ito ay may epekto lamang para sa bfin-elf
toolchain. Ilang iba pang opsyon, gaya ng -mid-shared-library at -mfdpic, ipahiwatig
-msim.

-momit-leaf-frame-pointer
Huwag itago ang frame pointer sa isang rehistro para sa mga function ng dahon. Iniiwasan nito ang
mga tagubilin para i-save, i-set up at i-restore ang mga frame pointer at gumawa ng karagdagang rehistro
magagamit sa mga function ng dahon. Ang pagpipilian -fomit-frame-pointer inaalis ang frame
pointer para sa lahat ng mga function, na maaaring magpahirap sa pag-debug.

-mspecld-anomalya
Kapag pinagana, tinitiyak ng compiler na hindi naglalaman ang nabuong code
speculative load pagkatapos ng mga tagubilin sa pagtalon. Kung gagamitin ang opsyong ito,
Ang "__WORKAROUND_SPECULATIVE_LOADS" ay tinukoy.

-mno-specld-anomalya
Huwag bumuo ng dagdag na code para maiwasan ang mga speculative load na mangyari.

-mcsync-anomalya
Kapag pinagana, tinitiyak ng compiler na ang nabuong code ay hindi naglalaman ng CSYNC o
Ang mga tagubilin ng SSYNC ay masyadong maaga pagkatapos ng mga conditional na sangay. Kung gagamitin ang opsyong ito,
Ang "__WORKAROUND_SPECULATIVE_SYNCS" ay tinukoy.

-mno-csync-anomalya
Huwag bumuo ng dagdag na code upang maiwasang mangyari din ang mga tagubilin ng CSYNC o SSYNC
sa lalong madaling panahon pagkatapos ng isang kondisyonal na sangay.

-mlow-64k
Kapag pinagana, ang compiler ay libre upang samantalahin ang kaalaman na ang kabuuan
Ang programa ay umaangkop sa mababang 64k ng memorya.

-mno-mababa-64k
Ipagpalagay na ang programa ay arbitraryong malaki. Ito ang default.

-mstack-check-l1
Gawin ang stack checking gamit ang impormasyong inilagay sa L1 scratchpad memory ng uClinux
kernel

-mid-shared-library
Bumuo ng code na sumusuporta sa mga shared library sa pamamagitan ng library ID method. Ito ay nagpapahintulot
para isagawa sa lugar at nakabahaging mga aklatan sa isang kapaligiran na walang virtual memory
pamamahala. Ang pagpipiliang ito ay nagpapahiwatig -fPIC. Sa a bfin-elf target, ipinahihiwatig ng pagpipiliang ito
-msim.

-mno-id-shared-library
Bumuo ng code na hindi ipinapalagay na ginagamit ang mga nakabahaging aklatan na nakabatay sa ID. Ito ay
ang default.

-mleaf-id-shared-library
Bumuo ng code na sumusuporta sa mga shared library sa pamamagitan ng library ID method, ngunit ipinapalagay
na ang library o executable na ito ay hindi magli-link laban sa anumang iba pang ID shared library.
Nagbibigay-daan iyon sa compiler na gumamit ng mas mabilis na code para sa mga jump at tawag.

-mno-leaf-id-shared-library
Huwag ipagpalagay na ang code na kino-compile ay hindi magli-link laban sa anumang ID shared library.
Ang mas mabagal na code ay nabuo para sa jump at call insns.

-mshared-library-id=n
Tinutukoy ang numero ng pagkakakilanlan ng nakabahaging library na nakabatay sa ID na kino-compile.
Ang pagtukoy ng halaga ng 0 ay bumubuo ng mas compact na code; pagtukoy ng iba pang mga halaga ng pwersa
ang paglalaan ng numerong iyon sa kasalukuyang aklatan ngunit wala nang espasyo- o oras-
mahusay kaysa sa pag-alis sa opsyong ito.

-msep-data
Bumuo ng code na nagbibigay-daan sa segment ng data na matatagpuan sa ibang lugar ng memorya
mula sa segment ng teksto. Ito ay nagbibigay-daan para sa execute sa lugar sa isang kapaligiran na walang
pamamahala ng virtual memory sa pamamagitan ng pag-aalis ng mga relokasyon laban sa seksyon ng teksto.

-mno-sep-data
Bumuo ng code na ipinapalagay na ang segment ng data ay sumusunod sa segment ng text. Ito ay
ang default.

-mlong-tawag
-mno-mahabang-tawag
Sinasabi sa compiler na magsagawa ng mga function call sa pamamagitan ng unang pag-load ng address ng
gumana sa isang rehistro at pagkatapos ay magsagawa ng subroutine na tawag sa rehistrong ito. Ito
kailangan ang switch kung ang target na function ay nasa labas ng 24-bit addressing range ng
ang offset-based na bersyon ng pagtuturo ng subroutine na tawag.

Ang tampok na ito ay hindi pinagana bilang default. Tinutukoy -mno-mahabang-tawag ibalik ang
default na pag-uugali. Tandaan na ang mga switch na ito ay walang epekto sa kung paano bumubuo ang compiler
code upang mahawakan ang mga tawag sa function sa pamamagitan ng mga function pointer.

-mfast-fp
Link sa mabilis na floating-point library. Pinapapahinga ng library na ito ang ilan sa mga IEEE
mga panuntunan ng floating-point standard para sa pagsuri ng mga input laban sa Not-a-Number (NAN), sa
interes sa pagganap.

-minline-plt
I-enable ang inlining ng mga PLT entry sa mga function call sa mga function na hindi alam
magbigkis nang lokal. Wala itong epekto kung wala -mfdpic.

-mmulticore
Bumuo ng standalone na application para sa mga multicore na Blackfin processor. Ang pagpipiliang ito ay sanhi
wastong pagsisimula ng mga file at link ng mga script na sumusuporta sa multicore na gagamitin, at tinutukoy ang
macro "__BFIN_MULTICORE". Maaari lamang itong gamitin sa -mcpu=bf561[-sirevision].

Ang pagpipiliang ito ay maaaring gamitin sa -mcorea or -mcoreb, na pumipili ng isang-application-
per-core na modelo ng programming. Kung wala -mcorea or -mcoreb, ang
single-application/dual-core programming model ang ginagamit. Sa modelong ito, ang pangunahing
function ng Core B ay dapat na pinangalanan bilang "coreb_main".

Kung hindi ginagamit ang opsyong ito, ginagamit ang single-core application programming model.

-mcorea
Bumuo ng standalone na application para sa Core A ng BF561 kapag ginagamit ang one-application-per-
modelo ng pangunahing programming. Ang mga wastong panimulang file at mga script ng link ay ginagamit upang suportahan ang Core
A, at ang macro na "__BFIN_COREA" ay tinukoy. Magagamit lang ang opsyong ito sa
kaugnay ng -mmulticore.

-mcoreb
Bumuo ng standalone na application para sa Core B ng BF561 kapag ginagamit ang one-application-per-
modelo ng pangunahing programming. Ang mga wastong panimulang file at mga script ng link ay ginagamit upang suportahan ang Core
B, at ang macro na "__BFIN_COREB" ay tinukoy. Kapag ginamit ang opsyong ito, "coreb_main"
dapat gamitin sa halip na "pangunahing". Magagamit lamang ang opsyong ito kasabay ng
-mmulticore.

-msdram
Bumuo ng standalone na application para sa SDRAM. Ginagamit ang mga wastong panimulang file at mga script ng link
upang ilagay ang application sa SDRAM, at ang macro na "__BFIN_SDRAM" ay tinukoy. Ang
ang loader ay dapat magpasimula ng SDRAM bago i-load ang application.

-micplb
Ipagpalagay na ang mga ICPLB ay pinagana sa oras ng pagtakbo. Ito ay may epekto sa ilang anomalya
mga solusyon. Para sa mga target ng Linux, ang default ay ipagpalagay na ang mga ICPLB ay pinagana; para sa
mga standalone na application ang default ay naka-off.

C6X Options

-martsa=pangalan
Tinutukoy nito ang pangalan ng target na arkitektura. Ginagamit ng GCC ang pangalang ito para matukoy
kung anong uri ng mga tagubilin ang mailalabas nito kapag bumubuo ng assembly code. Pinahihintulutan
ang mga pangalan ay: c62x, c64x, c64x+, c67x, c67x+, c674x.

-big-endian
Bumuo ng code para sa isang malaking-endian na target.

-mlittle-endian
Bumuo ng code para sa isang maliit na-endian na target. Ito ang default.

-msim
Pumili ng mga startup file at linker script na angkop para sa simulator.

-msdata=default
Ilagay ang maliit na global at static na data sa seksyong ".neardata", na itinuturo ng
irehistro ang "B14". Maglagay ng maliit na hindi nasimulang global at static na data sa seksyong ".bss",
na katabi ng seksyong ".neardata". Maglagay ng maliit na read-only na data sa
".rodata" na seksyon. Ang kaukulang mga seksyon na ginagamit para sa malalaking piraso ng data ay
".fardata", ".far" at ".const".

-msdata=lahat
Ilagay ang lahat ng data, hindi lamang maliliit na bagay, sa mga seksyong nakalaan para sa maliliit na data, at
gumamit ng addressing na nauugnay sa rehistro ng "B14" upang ma-access ang mga ito.

-msdata=wala
Huwag gamitin ang mga seksyong nakalaan para sa maliit na data, at gumamit ng ganap na mga address sa
i-access ang lahat ng data. Ilagay ang lahat ng inisyal na global at static na data sa ".fardata"
seksyon, at lahat ng hindi pa nasimulang data sa seksyong ".far". Ilagay ang lahat ng palaging data sa
ang seksyong ".const".

CRIS Options

Ang mga opsyong ito ay partikular na tinukoy para sa mga CRIS port.

-martsa=uri ng arkitektura
-mcpu=uri ng arkitektura
Bumuo ng code para sa tinukoy na arkitektura. Ang mga pagpipilian para sa uri ng arkitektura ay
v3, v8 at v10 para sa ETRAX 4, ETRAX 100, at ETRAX 100 LX ayon sa pagkakabanggit. Default ay v0
maliban sa cris-axis-linux-gnu, kung saan ang default ay v10.

-mtune=uri ng arkitektura
Tune to uri ng arkitektura lahat ng naaangkop tungkol sa nabuong code, maliban sa
ang ABI at ang hanay ng mga magagamit na tagubilin. Ang mga pagpipilian para sa uri ng arkitektura ay
kapareho ng para sa -martsa=uri ng arkitektura.

-mmax-stack-frame=n
Magbabala kapag lumampas ang stack frame ng isang function n byte.

-metrax4
-metrax100
Ang mga pagpipilian -metrax4 at -metrax100 ay kasingkahulugan ng -martsa=v3 at -martsa=v8
ayon sa pagkakabanggit.

-mmul-bug-workaround
-mno-mul-bug-workaround
Trabaho sa isang bug sa "muls" at "mulu" na mga tagubilin para sa mga modelo ng CPU kung saan ito
nalalapat. Ang opsyon na ito ay aktibo bilang default.

-mpdebug
I-enable ang CRIS-specific na verbose debug-related na impormasyon sa assembly code. Ito
ang opsyon ay mayroon ding epekto ng pag-off sa #NO_APP formatted-code indicator sa
assembler sa simula ng assembly file.

-mcc-init
Huwag gumamit ng mga resulta ng condition-code mula sa nakaraang pagtuturo; laging naglalabas ng kumpare at
mga tagubilin sa pagsubok bago gamitin ang mga code ng kondisyon.

-mno-side-effects
Huwag maglabas ng mga tagubilin na may mga side effect sa mga mode ng pagtugon maliban sa post-
pagtaas.

-mstack-align
-mno-stack-align
-mdata-align
-mno-data-align
-mconst-align
-mno-const-align
Ang mga pagpipiliang ito (hindi- mga opsyon) ayusin (alisin ang mga kaayusan) para sa stack frame,
indibidwal na data at mga constant na ihahanay para sa maximum na solong laki ng access ng data
para sa napiling modelo ng CPU. Ang default ay upang ayusin ang 32-bit alignment. ABI
Ang mga detalye tulad ng layout ng istraktura ay hindi apektado ng mga opsyong ito.

-m32-bit
-m16-bit
-m8-bit
Katulad ng mga opsyon sa stack- data- at const-align sa itaas, inaayos ng mga opsyong ito
stack frame, maisusulat na data at mga constant sa lahat ay 32-bit, 16-bit o 8-bit na nakahanay.
Ang default ay 32-bit alignment.

-mno-prologue-epilogue
-mprologue-epilogue
may -mno-prologue-epilogue, ang normal na function na prologue at epilogue na nag-set up
ang stack frame ay tinanggal at walang mga tagubilin sa pagbabalik o mga pagkakasunod-sunod ng pagbalik
nabuo sa code. Gamitin lamang ang opsyong ito kasama ng visual na inspeksyon ng
compiled code: walang babala o error na nabubuo kapag ang mga call-save na rehistro ay dapat
na-save, o imbakan para sa mga lokal na variable ay kailangang ilaan.

-mno-gotplt
-mgotplt
may -fpic at -fPIC, huwag bumuo (gumawa) ng mga sequence ng pagtuturo na naglo-load
mga address para sa mga function mula sa bahagi ng PLT ng GOT kaysa sa (tradisyonal sa iba
architectures) ay tumatawag sa PLT. Ang default ay -mgotplt.

- melf
Ang legacy na no-op na opsyon ay kinikilala lamang sa cris-axis-elf at cris-axis-linux-gnu
Mga target.

-mlinux
Ang legacy na no-op na opsyon ay kinikilala lamang gamit ang cris-axis-linux-gnu na target.

-sim
Ang opsyong ito, na kinikilala para sa cris-axis-elf, ay nagsasaayos na mag-link sa input-output
mga function mula sa isang simulator library. Code, inisyal na data at zero-initialized na data
ay inilalaan nang magkakasunod.

-sim2
katulad -sim, ngunit ipasa ang mga opsyon sa linker upang mahanap ang inisyal na data sa 0x40000000 at zero-
inisyal na data sa 0x80000000.

CR16 Options

Ang mga opsyong ito ay partikular na tinukoy para sa mga CR16 port.

-mmac
Paganahin ang paggamit ng multiply-accumulate na mga tagubilin. Hindi pinagana bilang default.

-mcr16cplus
-mcr16c
Bumuo ng code para sa CR16C o CR16C+ na arkitektura. Ang arkitektura ng CR16C+ ay default.

-msim
Iniuugnay ang library libsim.a na katugma sa simulator. Naaangkop sa ELF
compiler lang.

-mint32
Pumili ng uri ng integer bilang 32-bit ang lapad.

-mbit-ops
Bumubuo ng "sbit"/"cbit" na mga tagubilin para sa bit manipulations.

-mdata-model=modelo
Pumili ng modelo ng data. Ang mga pagpipilian para sa modelo ay malapit, malayo or medium. medium ay default.
Gayunpaman, malayo ay hindi wasto sa -mcr16c, dahil hindi sinusuportahan ng arkitektura ng CR16C ang
modelo ng malayong data.

Darwin Options

Ang mga opsyon na ito ay tinukoy para sa lahat ng mga arkitektura na tumatakbo sa Darwin operating system.

Ang FSF GCC sa Darwin ay hindi gumagawa ng "fat" object file; lumilikha ito ng object file para sa
nag-iisang arkitektura na ginawa ng GCC upang i-target. Ang GCC ng Apple sa Darwin ay lumilikha ng "taba"
mga file kung marami -arko ginagamit ang mga pagpipilian; ginagawa nito ito sa pamamagitan ng pagpapatakbo ng compiler o linker
maraming beses at pinagsama ang mga resulta kasama ang lipo.

Ang subtype ng file na nilikha (tulad ng ppc7400 or ppc970 or i686) ay tinutukoy ng
mga flag na tumutukoy sa ISA na tina-target ng GCC, tulad ng -mcpu or -martsa. ang
-force_cpusubtype_ALL maaaring gamitin ang opsyon para i-override ito.

Ang mga tool ng Darwin ay nag-iiba sa kanilang pag-uugali kapag ipinakita sa isang hindi pagkakatugma ng ISA. Ang
assembler, as, pinapahintulutan lamang na gamitin ang mga tagubilin na wasto para sa subtype ng
file na binubuo nito, kaya hindi ka maaaring maglagay ng 64-bit na mga tagubilin sa a ppc750 object file. Ang
linker para sa mga shared library, /usr/bin/libtool, nabigo at nagpi-print ng error kung hihilingin
lumikha ng isang nakabahaging library na may hindi gaanong mahigpit na subtype kaysa sa mga input file nito (para sa
halimbawa, sinusubukang ilagay ang isang ppc970 object file sa a ppc7400 aklatan). Ang linker para sa
mga executable, ld, tahimik na nagbibigay sa executable ng pinaka-mahigpit na subtype ng alinman sa mga ito
input file.

-Fdir
Idagdag ang direktoryo ng framework dir sa ulo ng listahan ng mga direktoryo na hahanapin
para sa mga file ng header. Ang mga direktoryo na ito ay pinagsama sa mga tinukoy ni -I
mga opsyon at ini-scan sa isang kaliwa-papuntang-kanang pagkakasunud-sunod.

Ang direktoryo ng balangkas ay isang direktoryo na may mga balangkas sa loob nito. Ang isang balangkas ay a
direktoryo na may a Header at / o Mga PrivateHeader Direktoryo na nakapaloob dito na
ay nagtatapos sa .balangkas. Ang pangalan ng isang framework ay ang pangalan ng direktoryong ito na hindi kasama
ang .balangkas. Ang mga header na nauugnay sa framework ay matatagpuan sa isa sa dalawang iyon
mga direktoryo, na may Header hinahanap muna. Ang isang subframework ay isang balangkas
direktoryo na nasa isang balangkas frameworks direktoryo. May kasamang subframework
ang mga header ay maaari lamang lumitaw sa isang header ng isang framework na naglalaman ng subframework, o
sa isang kapatid na subframework header. Dalawang subframework ay magkapatid kung nangyari ang mga ito sa
parehong balangkas. Ang isang subframework ay hindi dapat magkaroon ng parehong pangalan bilang isang framework; a
nagbibigay ng babala kung ito ay nilabag. Sa kasalukuyan ay hindi maaaring magkaroon ng isang subframework
mga subframework; sa hinaharap, ang mekanismo ay maaaring palawigin upang suportahan ito. Ang
karaniwang mga balangkas ay matatagpuan sa / System / Library / Framework at
/ Library / Framework. Ang isang halimbawang kasama ay mukhang "#include ",
saan Balangkas nagsasaad ng pangalan ng balangkas at header.h ay matatagpuan sa
Mga PrivateHeader or Header direktoryo.

-iframeworkdir
katulad -F maliban sa direktoryo ay itinuturing bilang isang direktoryo ng system. Ang pangunahing pagkakaiba
sa pagitan nito -iframework at -F kasama ba yan -iframework hindi nagbabala ang compiler
tungkol sa mga konstruksyon na nasa loob ng mga file ng header na natagpuan sa pamamagitan ng dir. Ang pagpipiliang ito ay may bisa
para lamang sa C pamilya ng mga wika.

-gused
Maglabas ng impormasyon sa pag-debug para sa mga simbolo na ginagamit. Para sa stabs debugging format,
ito ay nagbibigay-daan -felimate-unused-debug-symbols. Ito ay naka-on bilang default.

-busog
Maglabas ng impormasyon sa pag-debug para sa lahat ng mga simbolo at uri.

-mmacosx-version-min=bersyon
Ang pinakaunang bersyon ng MacOS X kung saan tatakbo ang executable na ito ay bersyon. Tipikal
mga halaga ng bersyon isama ang 10.1, 10.2, at 10.3.9.

Kung ang compiler ay binuo upang gamitin ang mga header ng system bilang default, ang default ay para sa
ang opsyong ito ay ang bersyon ng system kung saan tumatakbo ang compiler, kung hindi man ay ang
Ang default ay ang gumawa ng mga pagpipilian na katugma sa kasing dami ng mga system at code base
maaari.

-mkernel
Paganahin ang kernel development mode. Ang -mkernel mga hanay ng opsyon -static, -fno-karaniwan,
-fno-use-cxa-atexit, -fno-exceptions, -fno-non-call-exceptions, -fapple-kext,
-fno-mahina at -fno-rtti kung saan naaangkop. Nagtatakda din ang mode na ito -mno-altivec,
-msoft-float, -fno-buitin at -mlong-sanga para sa mga target ng PowerPC.

-mone-byte-bool
I-override ang mga default para sa "bool" upang ang "sizeof(bool)==1". Bilang default na "sizeof(bool)"
ay 4 kapag nag-compile para sa Darwin/PowerPC at 1 kapag nag-compile para sa Darwin/x86, kaya ito
walang epekto ang opsyon sa x86.

Babala: Ang -mone-byte-bool Ang switch ay nagiging sanhi ng GCC na makabuo ng code na hindi binary
tugma sa code na nabuo nang walang switch na iyon. Maaaring kailanganin ang paggamit ng switch na ito
muling pagsasama-sama ng lahat ng iba pang mga module sa isang programa, kabilang ang mga library ng system. Gamitin mo to
lumipat upang umayon sa isang hindi default na modelo ng data.

-mfix-at-magpatuloy
-ffix-at-patuloy
-findirect-data
Bumuo ng code na angkop para sa mabilis na pag-unlad ng turnaround, tulad ng payagan ang GDB na
pabago-bagong pag-load .o mga file sa tumatakbo nang mga programa. -findirect-data at
-ffix-at-patuloy ay ibinigay para sa pabalik na pagkakatugma.

-all_load
Nilo-load ang lahat ng miyembro ng static archive library. Tingnan ang tao ld(1) para sa karagdagang impormasyon.

-arch_errors_fatal
Dahilan ang mga error na nauugnay sa mga file na may maling arkitektura ay nakamamatay.

-bind_at_load
Nagiging dahilan upang mamarkahan ang output file na ang dynamic na linker ay magbubuklod sa lahat
hindi natukoy na mga sanggunian kapag ang file ay na-load o inilunsad.

-bundle
Gumawa ng Mach-o bundle na format na file. Tingnan ang tao ld(1) para sa karagdagang impormasyon.

-bundle_loader pinatutupad
Tinutukoy ng opsyong ito ang pinatutupad na maglo-load ng build output file being
naka-link. Tingnan ang tao ld(1) para sa karagdagang impormasyon.

-dynamiclib
Kapag naipasa ang opsyong ito, gumagawa ang GCC ng isang dynamic na library sa halip na isang executable kapag
pag-uugnay, gamit ang Darwin libtool utos.

-force_cpusubtype_ALL
Nagiging sanhi ito ng output file ng GCC na magkaroon ng LAHAT subtype, sa halip na isang kinokontrol ng
ang -mcpu or -martsa pagpipilian.

-allowable_client Pangalan ng kliyente
-Pangalan ng kliyente
-compatibility_version
-kasalukuyang_bersyon
-dead_strip
-dependency-file
-dylib_file
-dylinker_install_name
-dynamic
-exported_symbols_list
-filelist
-flat_namespace
-force_flat_namespace
-headerpad_max_install_names
-image_base
-sa loob
-install_name
-keep_private_externs
-multi_module
-multiply_defined
-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
-sectobjectsymbols
-bakit nagload
-seg1addr
-sectcreate
-sectobjectsymbols
-sektor
-segaddr
-segs_read_only_addr
-segs_read_write_addr
-seg_addr_table
-seg_addr_table_filename
-seglinkedit
-segprot
-segs_read_only_addr
-segs_read_write_addr
-iisang_module
-static
-sub_library
-sub_umbrella
-twolevel_namespace
-payong
-hindi natukoy
-unexported_symbols_list
-weak_reference_mismatches
-whatsloaded
Ang mga opsyong ito ay ipinapasa sa Darwin linker. Ang Darwin linker man page ay naglalarawan
ang mga ito nang detalyado.

Disyembre Alpha Options

mga ito -m ang mga opsyon ay tinukoy para sa mga pagpapatupad ng DEC Alpha:

-mno-malambot-float
-msoft-float
Gamitin (huwag gamitin) ang hardware floating-point na mga tagubilin para sa floating-point
mga operasyon. Kailan -msoft-float ay tinukoy, gumagana sa libgcc.a ay ginagamit upang gumanap
mga pagpapatakbo ng floating-point. Maliban na lang kung sila ay papalitan ng mga nakagawiang tularan ang
floating-point operations, o pinagsama-sama sa paraang tinatawag ang mga naturang emulasyon
routine, ang mga routine na ito ay naglalabas ng mga floating-point na operasyon. Kung nag-compile ka para sa
isang Alpha na walang floating-point operations, dapat mong tiyakin na ang library ay binuo
para hindi sila matawagan.

Tandaan na ang mga pagpapatupad ng Alpha na walang mga floating-point na operasyon ay kinakailangang magkaroon
floating-point na mga rehistro.

-mfp-reg
-mno-fp-regs
Bumuo ng code na gumagamit (hindi gumagamit) ng floating-point na set ng rehistro. -mno-fp-regs
nagpapahiwatig -msoft-float. Kung hindi ginagamit ang floating-point register set, floating-point
Ang mga operand ay ipinapasa sa mga integer register na parang mga integer at floating-point
ang mga resulta ay ipinasa sa $0 sa halip na $f0. Ito ay isang hindi karaniwang pagkakasunud-sunod ng pagtawag, kaya
anumang function na may floating-point argument o return value na tinatawag ng code na pinagsama-sama
sa -mno-fp-regs dapat ding isama sa opsyong iyon.

Ang karaniwang paggamit ng opsyong ito ay ang pagbuo ng kernel na hindi gumagamit, at samakatuwid ay kailangan
hindi i-save at i-restore, anumang floating-point registers.

-meeee
Ang Alpha architecture ay nagpapatupad ng floating-point hardware na na-optimize para sa maximum
pagganap. Ito ay halos sumusunod sa IEEE floating-point standard. gayunpaman,
para sa ganap na pagsunod, kailangan ng tulong sa software. Ang pagpipiliang ito ay bumubuo ng code
ganap na IEEE-compliant code maliban na ang inexact-bandila ay hindi pinananatili (tingnan sa ibaba).
Kung naka-on ang opsyong ito, ang preprocessor macro na "_IEEE_FP" ay tinukoy habang
compilation. Ang resultang code ay hindi gaanong mahusay ngunit nakakasuporta ng tama
mga denormalized na numero at pambihirang halaga ng IEEE tulad ng hindi-isang-numero at plus/minus
kawalang-hanggan. Ang iba pang mga Alpha compiler ay tumatawag sa opsyong ito -ieee_with_no_inexact.

-meeee-with-inexact
Ito ay tulad ng -meeee maliban sa nabuong code ay nagpapanatili din ng IEEE inexact-bandila.
Ang pag-on sa opsyong ito ay nagiging sanhi ng nabuong code upang ipatupad ang ganap na sumusunod na IEEE
matematika. Bilang karagdagan sa "_IEEE_FP", ang "_IEEE_FP_EXACT" ay tinukoy bilang isang preprocessor macro.
Sa ilang pagpapatupad ng Alpha ang resultang code ay maaaring magsagawa ng mas mabagal kaysa sa
ang code na nabuo bilang default. Dahil mayroong napakakaunting code na nakasalalay sa
inexact-bandila, karaniwang hindi mo dapat tukuyin ang opsyong ito. Ang iba pang mga Alpha compiler ay tumatawag
ang pagpipiliang ito -ieee_with_inexact.

-mfp-trap-mode=trap-mode
Kinokontrol ng opsyong ito kung anong mga floating-point related traps ang pinagana. Iba pang Alpha
tinatawag ng mga compiler ang opsyong ito -fptm trap-mode. Ang trap mode ay maaaring itakda sa isa sa apat
mga halaga:

n Ito ang default (normal) na setting. Ang tanging mga bitag na pinagana ay ang
mga hindi maaaring hindi paganahin sa software (hal., paghahati sa zero trap).

u Bilang karagdagan sa mga bitag na pinagana ng n, pinagana rin ang mga underflow traps.

su katulad u, ngunit ang mga tagubilin ay minarkahan na ligtas para sa pagkumpleto ng software (tingnan
Alpha architecture manual para sa mga detalye).

sui katulad su, ngunit ang mga hindi tumpak na bitag ay pinagana rin.

-mfp-rounding-mode=rounding-mode
Pinipili ang IEEE rounding mode. Tinatawag ng ibang mga Alpha compiler ang opsyong ito -fprm
rounding-mode. ang rounding-mode maaaring isa sa:

n Normal na IEEE rounding mode. Ang mga floating-point na numero ay bilugan patungo sa pinakamalapit
numero ng makina o patungo sa pantay na numero ng makina kung sakaling magkatali.

m Bilog patungo sa minus infinity.

c Tinadtad na rounding mode. Ang mga floating-point na numero ay bilugan patungo sa zero.

d Dynamic na rounding mode. Isang field sa floating-point control register (fpcr, Tingnan ang
Alpha architecture reference manual) kinokontrol ang rounding mode na may bisa. Ang C
Sinisimulan ng library ang rehistrong ito para sa pag-ikot patungo sa plus infinity. kaya,
maliban kung binago ng iyong programa ang fpcr, d tumutugon sa pag-ikot patungo sa plus
kawalang-hanggan.

-mtrap-precision=bitag-katumpakan
Sa arkitektura ng Alpha, ang mga floating-point traps ay hindi tumpak. Ibig sabihin wala
tulong sa software imposibleng mabawi mula sa isang lumulutang na bitag at programa
karaniwang kailangang wakasan ang pagpapatupad. Maaaring bumuo ang GCC ng code na maaaring makatulong
operating system trap handler sa pagtukoy sa eksaktong lokasyon na nagdulot ng a
floating-point bitag. Depende sa mga kinakailangan ng isang aplikasyon, iba
Ang mga antas ng katumpakan ay maaaring mapili:

p Katumpakan ng programa. Ang opsyong ito ay ang default at nangangahulugan na ang isang trap handler ay maaari lamang
tukuyin kung aling programa ang nagdulot ng floating-point exception.

f Katumpakan ng pag-andar. Maaaring matukoy ng trap handler ang function na nagdulot ng a
floating-point exception.

i Katumpakan ng pagtuturo. Maaaring matukoy ng tagahawak ng bitag ang eksaktong pagtuturo na iyon
nagdulot ng floating-point exception.

Ang iba pang mga Alpha compiler ay nagbibigay ng katumbas na mga opsyon na tinatawag -scope_safe at
-resumption_safe.

-meeee-conformant
Minamarkahan ng opsyong ito ang nabuong code bilang IEEE conformant. Hindi mo dapat gamitin ang opsyong ito
maliban kung tinukoy mo rin -mtrap-precision=i at alinman -mfp-trap-mode=su or
-mfp-trap-mode=sui. Ang tanging epekto nito ay ang pagbuga ng linya .flag 48 sa function
prologue ng nabuong assembly file.

-mbuild-constant
Karaniwang sinusuri ng GCC ang isang 32- o 64-bit na integer na pare-pareho upang makita kung maaari itong bumuo nito
mula sa mas maliliit na constants sa dalawa o tatlong mga tagubilin. Kung hindi nito magagawa, ilalabas nito ang
pare-pareho bilang literal at bumubuo ng code upang mai-load ito mula sa segment ng data sa oras ng pagtakbo.

Gamitin ang opsyong ito para hingin ang GCC na bumuo lahat integer constants gamit ang code, kahit na
ito ay nangangailangan ng higit pang mga tagubilin (ang maximum ay anim).

Karaniwan mong ginagamit ang opsyong ito upang bumuo ng isang nakabahaging library dynamic loader. Mismo a
shared library, dapat itong ilipat ang sarili sa memorya bago ito mahanap ang mga variable at
mga constant sa sarili nitong segment ng data.

-mbwx
-mno-bwx
-mcix
-mno-cix
-mfix
-mno-ayusin
-mmax
-mno-max
Ipahiwatig kung ang GCC ay dapat bumuo ng code upang magamit ang opsyonal na BWX, CIX, FIX at MAX
set ng pagtuturo. Ang default ay gamitin ang mga set ng pagtuturo na sinusuportahan ng CPU
uri na tinukoy sa pamamagitan ng -mcpu= opsyon o ng CPU kung saan itinayo ang GCC kung wala
tinukoy.

-mfloat-vax
-mfloat-ieee
Bumuo ng code na gumagamit ng (hindi gumagamit) ng VAX F at G floating-point arithmetic sa halip
ng IEEE single at double precision.

-meexplicit-relocs
-mno-explicit-relocs
Ang mga mas lumang Alpha assembler ay hindi nagbigay ng paraan upang makabuo ng mga relokasyon ng simbolo maliban sa pamamagitan ng
assembler macros. Hindi pinapayagan ng paggamit ng mga macro na ito ang pinakamainam na pag-iiskedyul ng pagtuturo.
Ang mga binutil ng GNU sa bersyon 2.12 ay sumusuporta sa isang bagong syntax na nagpapahintulot sa compiler na
tahasang markahan kung aling mga relokasyon ang dapat ilapat sa kung aling mga tagubilin. Ang pagpipiliang ito ay
kadalasang kapaki-pakinabang para sa pag-debug, dahil nakikita ng GCC ang mga kakayahan ng assembler kapag ito
ay binuo at itinatakda ang default nang naaayon.

-msmall-data
-mlarge-data
Kailan -meexplicit-relocs ay may bisa, ang static na data ay ina-access sa pamamagitan ng gp-kamag-anak
mga relokasyon. Kailan -msmall-data ay ginagamit, inilalagay ang mga bagay na 8 bytes ang haba o mas maliit
a maliit data lugar (ang mga seksyong ".sdata" at ".sbss") at ina-access sa pamamagitan ng 16-bit
mga relokasyon mula sa rehistro ng $gp. Nililimitahan nito ang laki ng maliit na lugar ng data sa
64KB, ngunit pinapayagan ang mga variable na direktang ma-access sa pamamagitan ng isang pagtuturo.

Ang default ay -mlarge-data. Sa opsyong ito ang lugar ng data ay limitado sa ibaba lamang
2GB. Ang mga program na nangangailangan ng higit sa 2GB ng data ay dapat gumamit ng "malloc" o "mmap" sa
ilaan ang data sa heap sa halip na sa data segment ng program.

Kapag bumubuo ng code para sa mga shared library, -fpic nagpapahiwatig -msmall-data at -fPIC
nagpapahiwatig -mlarge-data.

-msmall-text
-mlarge-text
Kailan -msmall-text ay ginagamit, ipinapalagay ng compiler na ang code ng buong programa
(o nakabahaging aklatan) ay umaangkop sa 4MB, at sa gayon ay maaabot gamit ang pagtuturo ng sangay.
Kailan -msmall-data ay ginagamit, maaaring ipagpalagay ng compiler na ang lahat ng mga lokal na simbolo ay nagbabahagi ng
parehong halaga ng $gp, at sa gayon ay bawasan ang bilang ng mga tagubiling kinakailangan para sa isang function
tawag mula 4 hanggang 1.

Ang default ay -mlarge-text.

-mcpu=cpu_type
Itakda ang set ng pagtuturo at mga parameter ng pag-iiskedyul ng pagtuturo para sa uri ng makina
cpu_type. Maaari mong tukuyin ang alinman sa EV pangalan ng istilo o ang kaukulang numero ng chip.
Sinusuportahan ng GCC ang mga parameter ng pag-iiskedyul para sa EV4, EV5 at EV6 na pamilya ng mga processor at
pinipili ang mga default na halaga para sa set ng pagtuturo mula sa processor na iyong tinukoy. Kung
hindi ka tumukoy ng uri ng processor, ang GCC ay nagde-default sa processor kung saan ang
compiler ay binuo.

Mga sinusuportahang halaga para sa cpu_type ay

ev4
ev45
21064
Nag-iskedyul bilang isang EV4 at walang mga extension ng set ng pagtuturo.

ev5
21164
Nag-iskedyul bilang isang EV5 at walang mga extension ng set ng pagtuturo.

ev56
21164a
Nag-iskedyul bilang EV5 at sinusuportahan ang extension ng BWX.

pca56
21164pc
21164PC
Nag-iskedyul bilang isang EV5 at sumusuporta sa BWX at MAX extension.

ev6
21264
Nag-iskedyul bilang EV6 at sinusuportahan ang BWX, FIX, at MAX na mga extension.

ev67
21264a
Nag-iskedyul bilang isang EV6 at sinusuportahan ang mga extension ng BWX, CIX, FIX, at MAX.

Sinusuportahan din ng mga native na toolchain ang halaga katutubo, na pumipili ng pinakamahusay na arkitektura
opsyon para sa host processor. -mcpu=katutubo walang epekto kung hindi makilala ng GCC
ang processor.

-mtune=cpu_type
Itakda lamang ang mga parameter ng pag-iiskedyul ng pagtuturo para sa uri ng makina cpu_type. ang
ang set ng pagtuturo ay hindi nababago.

Sinusuportahan din ng mga native na toolchain ang halaga katutubo, na pumipili ng pinakamahusay na arkitektura
opsyon para sa host processor. -mtune=katutubo walang epekto kung hindi makilala ng GCC
ang processor.

-mmemory-latency=oras
Itinatakda ang latency na dapat ipagpalagay ng scheduler para sa mga tipikal na memory reference tulad ng nakikita ni
ang aplikasyon. Ang numerong ito ay lubos na nakadepende sa mga pattern ng pag-access ng memory na ginamit
sa pamamagitan ng application at ang laki ng panlabas na cache sa makina.

Mga wastong opsyon para sa oras ay

numero
Isang decimal na numero na kumakatawan sa mga cycle ng orasan.

L1
L2
L3
pangunahin
Naglalaman ang compiler ng mga pagtatantya ng bilang ng mga cycle ng orasan para sa "karaniwang" EV4 at
EV5 hardware para sa Level 1, 2 at 3 na mga cache (tinatawag ding Dcache, Scache, at
Bcache), pati na rin sa pangunahing memorya. Tandaan na ang L3 ay valid lamang para sa EV5.

FR30 Options

Ang mga opsyong ito ay partikular na tinukoy para sa FR30 port.

-msmall-modelo
Gamitin ang modelo ng maliit na address space. Maaari itong makagawa ng mas maliit na code, ngunit ipinapalagay nito
na ang lahat ng simbolikong halaga at address ay magkasya sa isang 20-bit na hanay.

-mno-lsim
Ipagpalagay na ang suporta sa runtime ay ibinigay at kaya hindi na kailangang isama ang
simulator library (libsim.a) sa linker command line.

FRV Options

-mgpr-32
Gamitin lamang ang unang 32 pangkalahatang layunin na rehistro.

-mgpr-64
Gamitin ang lahat ng 64 na pangkalahatang layunin na rehistro.

-mfpr-32
Gamitin lamang ang unang 32 floating-point na rehistro.

-mfpr-64
Gamitin ang lahat ng 64 floating-point registers.

-mhard-float
Gumamit ng mga tagubilin sa hardware para sa mga pagpapatakbo ng floating-point.

-msoft-float
Gumamit ng mga gawain sa library para sa mga pagpapatakbo ng floating-point.

-malloc-cc
Dynamic na maglaan ng mga rehistro ng code ng kundisyon.

-mfixed-cc
Huwag subukang dynamic na maglaan ng mga rehistro ng code ng kondisyon, gamitin lamang ang "icc0" at
"fcc0".

-mdword
Baguhin ang ABI para gumamit ng double word insns.

-mno-dword
Huwag gumamit ng dobleng salita na mga tagubilin.

-mdoble
Gumamit ng floating-point double instructions.

-mno-doble
Huwag gumamit ng floating-point double instructions.

-mmedia
Gumamit ng mga tagubilin sa media.

-mno-media
Huwag gumamit ng mga tagubilin sa media.

-mmuladd
Gamitin ang multiply at magdagdag/magbawas ng mga tagubilin.

-mno-muladd
Huwag gumamit ng multiply at add/subtract instructions.

-mfdpic
Piliin ang FDPIC ABI, na gumagamit ng mga function descriptor upang kumatawan sa mga pointer
mga function. Nang walang anumang mga opsyon na nauugnay sa PIC/PIE, ito ay nagpapahiwatig -fPIE. May -fpic or
-fpie, ipinapalagay nito na ang mga entry ng GOT at maliit na data ay nasa loob ng 12-bit na hanay mula sa GOT
base address; kasama -fPIC or -fPIE, ang mga GOT offset ay kinukuwenta gamit ang 32 bits. Na may a
bfin-elf target, ipinahihiwatig ng pagpipiliang ito -msim.

-minline-plt
I-enable ang inlining ng mga PLT entry sa mga function call sa mga function na hindi alam
magbigkis nang lokal. Wala itong epekto kung wala -mfdpic. Ito ay pinagana bilang default kung
pag-optimize para sa bilis at pag-compile para sa mga shared library (ibig sabihin, -fPIC or -fpic), o
kapag ang isang opsyon sa pag-optimize tulad ng -O3 o sa itaas ay naroroon sa command line.

-mTLS
Ipagpalagay ang isang malaking segment ng TLS kapag bumubuo ng thread-local code.

-mtls
Huwag ipagpalagay ang isang malaking segment ng TLS kapag bumubuo ng thread-local code.

-mgprel-ro
Paganahin ang paggamit ng "GPREL" na mga relokasyon sa FDPIC ABI para sa data na alam na nasa
read-only na mga seksyon. Ito ay pinagana bilang default, maliban sa -fpic or -fpie: kahit na
maaari itong makatulong na gawing mas maliit ang global offset table, ipinagpalit nito ang 1 pagtuturo para sa 4. Sa
-fPIC or -fPIE, nakikipagkalakalan ito ng 3 tagubilin para sa 4, ang isa ay maaaring ibahagi ng maramihan
mga simbolo, at iniiwasan nito ang pangangailangan para sa isang GOT na entry para sa reference na simbolo, kaya ito ay
mas malamang na manalo. Kung hindi, -mno-gprel-ro maaaring gamitin upang hindi paganahin ito.

-multilib-library-pic
Mag-link sa (library, hindi FD) pic library. Ito ay ipinahiwatig ng -mlibrary-pic, din
tulad ng -fPIC at -fpic wala -mfdpic. Hindi mo dapat kailangang gamitin ito nang tahasan.

-mlinked-fp
Sundin ang kinakailangan ng EABI na palaging gumawa ng frame pointer sa tuwing may stack frame
ay inilalaan. Ang pagpipiliang ito ay pinagana bilang default at maaaring hindi paganahin sa
-mno-linked-fp.

-mlong-tawag
Gumamit ng indirect addressing para tawagan ang mga function sa labas ng kasalukuyang compilation unit. Ito
nagbibigay-daan sa mga function na mailagay kahit saan sa loob ng 32-bit address space.

-malign-label
Subukang ihanay ang mga label sa isang 8-byte na hangganan sa pamamagitan ng pagpasok ng mga NOP sa nakaraang packet.
May epekto lang ang opsyong ito kapag naka-enable ang VLIW packing. Hindi ito lumilikha ng bago
mga pakete; nagdaragdag lamang ito ng mga NOP sa mga umiiral na.

-mlibrary-pic
Bumuo ng code ng EABI na independyente sa posisyon.

-macc-4
Gamitin lamang ang unang apat na media accumulator register.

-macc-8
Gamitin ang lahat ng walong media accumulator register.

-pack
I-pack ang mga tagubilin sa VLIW.

-mno-pack
Huwag mag-pack ng mga tagubilin sa VLIW.

-mno-flag
Huwag markahan ang mga switch ng ABI sa mga e_flag.

-mcond-move
I-enable ang paggamit ng conditional-move instructions (default).

Ang switch na ito ay pangunahing para sa pag-debug ng compiler at malamang na maalis sa isang
hinaharap na bersyon.

-mno-cond-move
I-disable ang paggamit ng conditional-move instructions.

Ang switch na ito ay pangunahing para sa pag-debug ng compiler at malamang na maalis sa isang
hinaharap na bersyon.

-mscc
I-enable ang paggamit ng conditional set instructions (default).

Ang switch na ito ay pangunahing para sa pag-debug ng compiler at malamang na maalis sa isang
hinaharap na bersyon.

-mno-scc
I-disable ang paggamit ng conditional set instructions.

Ang switch na ito ay pangunahing para sa pag-debug ng compiler at malamang na maalis sa isang
hinaharap na bersyon.

-mcond-exec
I-enable ang paggamit ng conditional execution (default).

Ang switch na ito ay pangunahing para sa pag-debug ng compiler at malamang na maalis sa isang
hinaharap na bersyon.

-mno-cond-exec
I-disable ang paggamit ng conditional execution.

Ang switch na ito ay pangunahing para sa pag-debug ng compiler at malamang na maalis sa isang
hinaharap na bersyon.

-mvliw-branch
Magpatakbo ng pass para mag-pack ng mga branch sa mga tagubilin ng VLIW (default).

Ang switch na ito ay pangunahing para sa pag-debug ng compiler at malamang na maalis sa isang
hinaharap na bersyon.

-mno-vliw-branch
Huwag magpatakbo ng pass para mag-pack ng mga branch sa mga tagubilin ng VLIW.

Ang switch na ito ay pangunahing para sa pag-debug ng compiler at malamang na maalis sa isang
hinaharap na bersyon.

-mmulti-cond-exec
Paganahin ang pag-optimize ng "&&" at "||" sa kondisyon na pagpapatupad (default).

Ang switch na ito ay pangunahing para sa pag-debug ng compiler at malamang na maalis sa isang
hinaharap na bersyon.

-mno-multi-cond-exec
Huwag paganahin ang pag-optimize ng "&&" at "||" sa conditional execution.

Ang switch na ito ay pangunahing para sa pag-debug ng compiler at malamang na maalis sa isang
hinaharap na bersyon.

-mnested-cond-exec
I-enable ang nested conditional execution optimizations (default).

Ang switch na ito ay pangunahing para sa pag-debug ng compiler at malamang na maalis sa isang
hinaharap na bersyon.

-mno-nested-cond-exec
I-disable ang nested conditional execution optimizations.

Ang switch na ito ay pangunahing para sa pag-debug ng compiler at malamang na maalis sa isang
hinaharap na bersyon.

-moptimize-membar
Ang switch na ito ay nag-aalis ng mga paulit-ulit na "membar" na mga tagubilin mula sa compiler-generated code.
Pinapagana ito sa pamamagitan ng default.

-mno-optimize-membar
Hindi pinapagana ng switch na ito ang awtomatikong pag-alis ng mga paulit-ulit na "membar" na mga tagubilin mula sa
nabuong code.

-mtomcat-stats
Maging sanhi ng pag-print ng gas ng mga istatistika ng tomcat.

-mcpu=CPU
Piliin ang uri ng processor kung saan bubuo ng code. Ang mga posibleng halaga ay frv, fr550,
pusang lalaki, fr500, fr450, fr405, fr400, fr300 at simple.

GNU / Linux Options

mga ito -m ang mga opsyon ay tinukoy para sa mga target ng GNU/Linux:

-mglibc
Gamitin ang GNU C library. Ito ang default maliban sa *-*-linux-*uclibc* at
*-*-linux-*android* Mga target.

-muclibc
Gumamit ng uClibc C library. Ito ang default na naka-on *-*-linux-*uclibc* Mga target.

-mbionic
Gumamit ng Bionic C library. Ito ang default na naka-on *-*-linux-*android* Mga target.

-android
Compile code compatible sa Android platform. Ito ang default na naka-on
*-*-linux-*android* Mga target.

Kapag nag-compile, pinapagana ang opsyong ito -mbionic, -fPIC, -fno-exceptions at -fno-rtti by
default. Kapag nagli-link, pinapasa ng opsyong ito ang driver ng GCC na pumasa sa mga opsyong partikular sa Android
sa linker. Sa wakas, ang pagpipiliang ito ay nagiging sanhi ng preprocessor macro na "__ANDROID__".
tinukoy.

-tno-android-cc
Huwag paganahin ang mga epekto ng compilation ng -android, ibig sabihin, huwag paganahin -mbionic, -fPIC,
-fno-exceptions at -fno-rtti bilang default.

-tno-android-ld
Huwag paganahin ang pag-link ng mga epekto ng -android, ibig sabihin, ipasa ang karaniwang mga opsyon sa pagli-link ng Linux sa
linker

H8 / 300 Options

mga ito -m ang mga opsyon ay tinukoy para sa mga pagpapatupad ng H8/300:

-magpahinga
Paikliin ang ilang mga sanggunian sa address sa oras ng pag-link, kapag posible; gumagamit ng opsyon sa linker
-magpahinga.

-mh Bumuo ng code para sa H8/300H.

-MS Bumuo ng code para sa H8S.

-mn Bumuo ng code para sa H8S at H8/300H sa normal na mode. Dapat gamitin ang switch na ito
alinman sa -mh or -MS.

-ms2600
Bumuo ng code para sa H8S/2600. Dapat gamitin ang switch na ito kasama ng -MS.

-mexr
Ang mga pinalawak na rehistro ay naka-imbak sa stack bago ang pagpapatupad ng function na may monitor
katangian. Default na opsyon ay -mexr. Ang pagpipiliang ito ay may bisa lamang para sa mga target na H8S.

-mno-exr
Ang mga pinalawig na rehistro ay hindi naka-imbak sa stack bago ang pagpapatupad ng function na may monitor
katangian. Default na opsyon ay -mno-exr. Ang pagpipiliang ito ay may bisa lamang para sa mga target na H8S.

-mint32
Gawing 32 bits ang data ng "int" bilang default.

-malign-300
Sa H8/300H at H8S, gamitin ang parehong mga panuntunan sa pag-align gaya ng para sa H8/300. Ang default
para sa H8/300H at H8S ay upang ihanay ang mga longs at floats sa 4-byte na mga hangganan.
-malign-300 nagiging sanhi ng pagkakahanay sa kanila sa 2-byte na mga hangganan. Walang epekto ang opsyong ito
sa H8/300.

HPPA Options

mga ito -m ang mga opsyon ay tinukoy para sa pamilya ng HPPA ng mga computer:

-martsa=uri ng arkitektura
Bumuo ng code para sa tinukoy na arkitektura. Ang mga pagpipilian para sa uri ng arkitektura ay
1.0 para sa PA 1.0, 1.1 para sa PA 1.1, at 2.0 para sa mga processor ng PA 2.0. Sumangguni sa
/usr/lib/sched.models sa isang HP-UX system upang matukoy ang tamang opsyon sa arkitektura
para sa iyong makina. Ang code na pinagsama-sama para sa mas mababang bilang na mga arkitektura ay tumatakbo sa mas mataas
may bilang na mga arkitektura, ngunit hindi sa kabaligtaran.

-mpa-risc-1-0
-mpa-risc-1-1
-mpa-risc-2-0
Mga kasingkahulugan para sa -martsa=1.0, -martsa=1.1, at -martsa=2.0 ayon sa pagkakabanggit.

-mjump-in-delay
Binabalewala ang opsyong ito at ibinigay para sa mga layunin ng compatibility lamang.

-mdisable-fpregs
Pigilan ang mga floating-point na rehistro mula sa paggamit sa anumang paraan. Ito ay kinakailangan para sa
pag-compile ng mga kernel na nagsasagawa ng tamad na paglipat ng konteksto ng mga floating-point register. Kung
gagamitin mo ang opsyong ito at subukang magsagawa ng mga floating-point operations, ang compiler
nagpapalaglag.

-i-disable-indexing
Pigilan ang compiler mula sa paggamit ng mga mode ng pag-index ng address. Ito ay umiiwas sa ilan sa halip
mga problema kapag kino-compile ang MIG na nabuong code sa ilalim ng MACH.

-mno-space-regs
Bumuo ng code na ipinapalagay na ang target ay walang mga rehistro ng espasyo. Nagbibigay-daan ito sa GCC na
makabuo ng mas mabilis na hindi direktang mga tawag at gumamit ng mga hindi naka-scale na index address mode.

Ang ganitong code ay angkop para sa antas 0 na mga sistema ng PA at mga kernel.

-mfast-indirect-calls
Bumuo ng code na ipinapalagay na ang mga tawag ay hindi tumatawid sa mga hangganan ng espasyo. Nagbibigay-daan ito sa GCC na
naglalabas ng code na gumaganap ng mas mabilis na mga hindi direktang tawag.

Hindi gumagana ang opsyong ito sa pagkakaroon ng mga shared library o nested function.

-mfixed-range=rehistro-saklaw
Bumuo ng code na tinatrato ang ibinigay na hanay ng rehistro bilang mga nakapirming rehistro. Isang nakapirming rehistro
ay isa na hindi magagamit ng register allocator. Ito ay kapaki-pakinabang kapag nag-compile ng kernel
code. Ang isang hanay ng rehistro ay tinukoy bilang dalawang rehistro na pinaghihiwalay ng isang gitling. Maramihan
Maaaring tukuyin ang mga hanay ng rehistro na pinaghihiwalay ng kuwit.

-mlong-load-store
Bumuo ng 3-pagtuturo na pag-load at mga pagkakasunud-sunod ng tindahan kung minsan ay kinakailangan ng HP-UX 10
linker. Ito ay katumbas ng +k opsyon sa mga HP compiler.

-mportable-runtime
Gamitin ang portable calling convention na iminungkahi ng HP para sa ELF system.

-mgas
Paganahin ang paggamit ng mga direktiba ng assembler na ang GAS lang ang nakakaintindi.

-mschedule=uri ng cpu
Iskedyul ang code ayon sa mga hadlang para sa uri ng makina uri ng cpu. Ang mga pagpipilian
para uri ng cpu ay 700 7100, 7100LC, 7200, 7300 at 8000. Sumangguni sa
/usr/lib/sched.models sa isang HP-UX system upang matukoy ang tamang opsyon sa pag-iiskedyul para sa
iyong makina. Ang default na pag-iiskedyul ay 8000.

-mlinker-opt
I-enable ang optimization pass sa HP-UX linker. Tandaan na ito ay gumagawa ng simbolikong pag-debug
imposible. Nagti-trigger din ito ng bug sa mga linker ng HP-UX 8 at HP-UX 9 kung saan sila
magbigay ng mga pekeng mensahe ng error kapag nagli-link ng ilang mga programa.

-msoft-float
Bumuo ng output na naglalaman ng mga tawag sa library para sa floating point. Babala: ang kailangan
Ang mga aklatan ay hindi magagamit para sa lahat ng mga target ng HPPA. Karaniwan ang mga pasilidad ng
ginagamit ang karaniwang C compiler ng machine, ngunit hindi ito maaaring gawin nang direkta sa cross-
compilation. Dapat kang gumawa ng iyong sariling mga pagsasaayos upang magbigay ng angkop na aklatan
mga function para sa cross-compilation.

-msoft-float binabago ang calling convention sa output file; samakatuwid, ito ay lamang
kapaki-pakinabang kung mag-compile ka lahat ng isang programa na may ganitong opsyon. Sa partikular, kailangan mo
sumulat ng libro libgcc.a, ang library na kasama ng GCC, na may -msoft-float para dito
upang gumana.

-msio
Bumuo ng predefine, "_SIO", para sa server IO. Ang default ay -mwsio. Ito ay bumubuo
ang mga predefine, "__hp9000s700", "__hp9000s700__" at "_WSIO", para sa workstation IO.
Available ang mga opsyong ito sa ilalim ng HP-UX at HI-UX.

-mgnu-ld
Gumamit ng mga opsyong partikular sa GNU ld. Ito ay pumasa -ibinahagi sa ld kapag nagtatayo ng shared
aklatan. Ito ang default kapag ang GCC ay na-configure, tahasan o hindi, kasama ang
GNU linker. Ang pagpipiliang ito ay hindi nakakaapekto sa kung alin ld ay tinatawag na; binabago lang nito kung ano
ang mga parameter ay ipinasa doon ld. ang ld na tinatawag ay tinutukoy ng
--may-ld opsyon sa pag-configure, landas sa paghahanap ng programa ng GCC, at sa wakas ay sa pamamagitan ng user PATH.
Ang linker na ginamit ng GCC ay maaaring i-print gamit alin `gcc -print-prog-name=ld`. ito
ang opsyon ay magagamit lamang sa 64-bit na HP-UX GCC, ibig sabihin, naka-configure sa
hppa*64*-*-hpux*.

-mhp-ld
Gumamit ng mga opsyon na partikular sa HP ld. Ito ay pumasa -b sa ld kapag gumagawa ng shared library
at pumasa +Tanggapin TypeMismatch sa ld sa lahat ng links. Ito ang default kapag ang GCC ay
na-configure, tahasan o hindi malinaw, gamit ang HP linker. Ang pagpipiliang ito ay hindi nakakaapekto
alin ld ay tinatawag na; binabago lamang nito kung anong mga parameter ang ipinasa doon ld. ang ld
na tinatawag ay tinutukoy ng --may-ld opsyon sa pag-configure, paghahanap ng programa ng GCC
landas, at sa wakas ng gumagamit PATH. Ang linker na ginamit ng GCC ay maaaring i-print gamit
alin `gcc -print-prog-name=ld`. Available lang ang opsyong ito sa 64-bit HP-UX
GCC, ibig sabihin, naka-configure sa hppa*64*-*-hpux*.

-mlong-tawag
Bumuo ng code na gumagamit ng mahabang pagkakasunud-sunod ng tawag. Tinitiyak nito na ang isang tawag ay palaging magagawa
para maabot ang linker na nabuong stubs. Ang default ay upang bumuo ng mahahabang tawag lamang kapag ang
distansya mula sa site ng tawag hanggang sa simula ng function o unit ng pagsasalin, bilang
ang kaso ay maaaring, lumampas sa isang paunang natukoy na limitasyon na itinakda ng uri ng sangay na ginagamit. Ang
ang mga limitasyon para sa mga normal na tawag ay 7,600,000 at 240,000 bytes, ayon sa pagkakabanggit para sa PA 2.0
at mga arkitektura ng PA 1.X. Palaging limitado ang mga Sibcall sa 240,000 bytes.

Ang mga distansya ay sinusukat mula sa simula ng mga function kapag ginagamit ang
-ffunction-seksyon opsyon, o kapag ginagamit ang -mgas at -mno-portable-runtime pagpipilian
magkasama sa ilalim ng HP-UX kasama ang SOM linker.

Karaniwang hindi kanais-nais na gamitin ang opsyong ito dahil pinapababa nito ang pagganap. gayunpaman,
maaari itong maging kapaki-pakinabang sa malalaking aplikasyon, lalo na kapag ginagamit ang bahagyang pag-link
bumuo ng application.

Ang mga uri ng mahabang tawag na ginamit ay depende sa mga kakayahan ng assembler at linker,
at ang uri ng code na nabuo. Ang epekto sa mga system na sumusuporta sa matagal
absolute calls, at mahabang pic na simbolo-difference o pc-relative na tawag dapat
medyo maliit. Gayunpaman, ang isang hindi direktang tawag ay ginagamit sa mga 32-bit na ELF system sa pic code
at medyo mahaba.

-munix=unix-std
Bumuo ng mga predefine ng compiler at pumili ng isang startfile para sa tinukoy na pamantayan ng UNIX.
Ang mga pagpipilian para sa unix-std ay 93, 95 at 98. 93 ay suportado sa lahat ng bersyon ng HP-UX.
95 ay available sa HP-UX 10.10 at mas bago. 98 ay available sa HP-UX 11.11 at mas bago.
Ang mga default na halaga ay 93 para sa HP-UX 10.00, 95 para sa HP-UX 10.10 kahit hanggang 11.00, at 98
para sa HP-UX 11.11 at mas bago.

-munix=93 nagbibigay ng parehong predefine gaya ng GCC 3.3 at 3.4. -munix=95 nagbibigay ng
karagdagang predefine para sa "XOPEN_UNIX" at "_XOPEN_SOURCE_EXTENDED", at ang startfile
unix95.o. -munix=98 nagbibigay ng mga karagdagang predefine para sa "_XOPEN_UNIX",
"_XOPEN_SOURCE_EXTENDED", "_INCLUDE__STDC_A1_SOURCE" at "_INCLUDE_XOPEN_SOURCE_500",
at ang startfile unix98.o.

Ito ay mahalaga para tandaan na binabago ng opsyong ito ang mga interface para sa iba't ibang library
mga gawain. Nakakaapekto rin ito sa pag-uugali ng pagpapatakbo ng C library. kaya, sukdulan
kailangan ang pag-iingat sa paggamit ng opsyong ito.

Ang code ng library na nilalayong gumana nang may higit sa isang pamantayan ng UNIX ay dapat subukan,
itakda at ibalik ang variable na "__xpg4_extended_mask" kung naaangkop. Karamihan sa software ng GNU
ay hindi nagbibigay ng kakayahang ito.

-nolibdld
Pigilan ang pagbuo ng mga opsyon sa link upang maghanap sa libdld.sl kapag ang -static Ang opsyon ay
tinukoy sa HP-UX 10 at mas bago.

-static
Ang pagpapatupad ng HP-UX ng setlocale sa libc ay may dependency sa libdld.sl. doon
ay hindi isang archive na bersyon ng libdld.sl. Kaya, kapag ang -static ang pagpipilian ay tinukoy,
kailangan ang mga espesyal na opsyon sa link upang malutas ang dependency na ito.

Sa HP-UX 10 at mas bago, idinaragdag ng GCC driver ang mga kinakailangang opsyon upang maiugnay
libdld.sl kapag ang -static ang pagpipilian ay tinukoy. Ito ay nagiging sanhi ng nagresultang binary sa
maging dynamic. Sa 64-bit port, ang mga linker ay bumubuo ng mga dynamic na binary bilang default sa
anumang kaso. Ang -nolibdld maaaring gamitin ang opsyon para pigilan ang GCC driver na magdagdag
mga opsyon sa link na ito.

- mga thread
Magdagdag ng suporta para sa multithreading gamit ang dce sinulid library sa ilalim ng HP-UX. Ang pagpipiliang ito
nagtatakda ng mga flag para sa parehong preprocessor at linker.

IA-64 Options

Ito ang mga -m mga opsyon na tinukoy para sa arkitektura ng Intel IA-64.

-big-endian
Bumuo ng code para sa isang malaking-endian na target. Ito ang default para sa HP-UX.

-mlittle-endian
Bumuo ng code para sa isang maliit na-endian na target. Ito ang default para sa AIX5 at GNU/Linux.

-mgnu-as
-mno-gnu-as
Bumuo (o huwag) code para sa GNU assembler. Ito ang default.

-mgnu-ld
-mno-gnu-ld
Bumuo (o huwag) code para sa GNU linker. Ito ang default.

-mno-pic
Bumuo ng code na hindi gumagamit ng global pointer register. Ang resulta ay hindi posisyon
independent code, at lumalabag sa IA-64 ABI.

-mvolatile-asm-stop
-mno-volatile-asm-stop
Bumuo (o huwag) huminto kaagad bago at pagkatapos ng pabagu-bagong mga pahayag ng asm.

-magrehistro-mga pangalan
-mno-register-pangalan
Bumuo (o huwag) in, loc, at Palabas magparehistro ng mga pangalan para sa mga nakasalansan na rehistro. Ito
maaaring gawing mas nababasa ang output ng assembler.

-mno-sdata
-msdata
Huwag paganahin (o paganahin) ang mga pag-optimize na gumagamit ng maliit na seksyon ng data. Ito ay maaaring maging kapaki-pakinabang
para sa pagtatrabaho sa paligid ng mga optimizer bug.

-mconstant-gp
Bumuo ng code na gumagamit ng isang pare-parehong pandaigdigang halaga ng pointer. Ito ay kapaki-pakinabang kapag
pag-compile ng kernel code.

-mauto-pic
Bumuo ng code na self-relocatable. Ito ay nagpapahiwatig -mconstant-gp. Ito ay kapaki-pakinabang
kapag nag-compile ng firmware code.

-minline-float-divide-min-latency
Bumuo ng code para sa inline na paghahati ng mga floating-point value gamit ang minimum na latency
algorithm.

-minline-float-divide-max-throughput
Bumuo ng code para sa inline na paghahati ng mga floating-point value gamit ang maximum throughput
algorithm.

-mno-inline-float-divide
Huwag bumuo ng inline na code para sa mga divide ng mga floating-point value.

-minline-int-divide-min-latency
Bumuo ng code para sa inline na paghahati ng mga halaga ng integer gamit ang pinakamababang latency
algorithm.

-minline-int-divide-max-throughput
Bumuo ng code para sa inline na paghahati ng mga halaga ng integer gamit ang maximum throughput
algorithm.

-mno-inline-int-divide
Huwag bumuo ng inline na code para sa mga paghahati ng mga halaga ng integer.

-minline-sqrt-min-latency
Bumuo ng code para sa mga inline na square root gamit ang minimum latency algorithm.

-minline-sqrt-max-throughput
Bumuo ng code para sa mga inline na square root gamit ang maximum throughput algorithm.

-mno-inline-sqrt
Huwag bumuo ng inline na code para sa "sqrt".

-mfused-baliw
-mno-fused-madd
Gawin (huwag) bumuo ng code na gumagamit ng fused multiply/add o multiply/subtract
mga tagubilin. Ang default ay gamitin ang mga tagubiling ito.

-mno-dwarf2-asm
-mdwarf2-asm
Huwag (o gawin) bumuo ng assembler code para sa DWARF 2 line number debugging info.
Ito ay maaaring maging kapaki-pakinabang kapag hindi gumagamit ng GNU assembler.

-mearly-stop-bits
-mno-early-stop-bits
Payagan ang mga stop bit na mailagay nang mas maaga kaysa kaagad bago ang pagtuturo na iyon
nag-trigger ng stop bit. Mapapabuti nito ang pag-iiskedyul ng pagtuturo, ngunit hindi palaging
gawin mo.

-mfixed-range=rehistro-saklaw
Bumuo ng code na tinatrato ang ibinigay na hanay ng rehistro bilang mga nakapirming rehistro. Isang nakapirming rehistro
ay isa na hindi magagamit ng register allocator. Ito ay kapaki-pakinabang kapag nag-compile ng kernel
code. Ang isang hanay ng rehistro ay tinukoy bilang dalawang rehistro na pinaghihiwalay ng isang gitling. Maramihan
Maaaring tukuyin ang mga hanay ng rehistro na pinaghihiwalay ng kuwit.

-mtls-size=tls-size
Tukuyin ang bit size ng agarang TLS offset. Ang mga wastong halaga ay 14, 22, at 64.

-mtune=uri ng cpu
Ibagay ang pag-iiskedyul ng pagtuturo para sa isang partikular na CPU, Ang mga wastong halaga ay itanium,
itanium1, awa, itanium2, at mckinley.

-milp32
-mlp64
Bumuo ng code para sa isang 32-bit o 64-bit na kapaligiran. Ang 32-bit na kapaligiran ay nagtatakda ng int,
mahaba at pointer sa 32 bits. Ang 64-bit na kapaligiran ay nagtatakda ng int sa 32 bits at mahaba at
pointer sa 64 bits. Ito ang mga flag na partikular sa HP-UX.

-mno-sched-br-data-spec
-msched-br-data-spec
(Dis/En)able data speculative scheduling bago i-reload. Nagreresulta ito sa pagbuo ng
"ld.a" na mga tagubilin at ang kaukulang mga tagubilin sa pagsusuri ("ld.c" / "chk.a"). Ang
default ay 'disable'.

-msched-ar-data-spec
-mno-sched-ar-data-spec
(En/Dis)able data speculative scheduling pagkatapos i-reload. Nagreresulta ito sa pagbuo ng
"ld.a" na mga tagubilin at ang kaukulang mga tagubilin sa pagsusuri ("ld.c" / "chk.a"). Ang
default ay 'paganahin'.

-mno-sched-control-spec
-msched-control-spec
(Dis/En)magagawang kontrolin ang speculative scheduling. Ang tampok na ito ay magagamit lamang sa panahon
pag-iskedyul ng rehiyon (ibig sabihin, bago i-reload). Nagreresulta ito sa pagbuo ng "ld.s"
mga tagubilin at ang kaukulang mga tagubilin sa pagsuri "chk.s". Ang default ay
'huwag paganahin'.

-msched-br-in-data-spec
-mno-sched-br-in-data-spec
(En/Dis)magagawang speculative scheduling ng mga tagubilin na nakadepende sa data
speculative load bago i-reload. Ito ay epektibo lamang sa -msched-br-data-spec
pinagana. Ang default ay 'paganahin'.

-msched-ar-in-data-spec
-mno-sched-ar-in-data-spec
(En/Dis)magagawang speculative scheduling ng mga tagubilin na nakadepende sa data
speculative load pagkatapos i-reload. Ito ay epektibo lamang sa -msched-ar-data-spec
pinagana. Ang default ay 'paganahin'.

-msched-in-control-spec
-mno-sched-in-control-spec
(En/Dis)magagawang speculative scheduling ng mga tagubilin na nakadepende sa
kontrolin ang mga speculative load. Ito ay epektibo lamang sa -msched-control-spec pinagana.
Ang default ay 'paganahin'.

-mno-sched-prefer-non-data-spec-insns
-msched-prefer-non-data-spec-insns
Kung pinagana, pipiliin ang mga tagubiling speculative ng data para sa iskedyul lamang kung wala
iba pang mga pagpipilian sa ngayon. Ginagawa nitong higit pa ang paggamit ng data speculation
konserbatibo. Ang default ay 'disable'.

-mno-sched-prefer-non-control-spec-insns
-msched-prefer-non-control-spec-insns
Kung naka-enable, pipiliin ang control-speculative na mga tagubilin para sa iskedyul lamang kung mayroon
walang ibang pagpipilian sa ngayon. Ginagawa nito ang paggamit ng kontrol na haka-haka
mas konserbatibo. Ang default ay 'disable'.

-mno-sched-count-spec-in-critical-path
-msched-count-spec-in-critical-path
Kung pinagana, ang mga speculative dependencies ay isasaalang-alang sa panahon ng pag-compute ng
mga priyoridad ng mga tagubilin. Ginagawa nitong mas kaunti ang paggamit ng haka-haka
konserbatibo. Ang default ay 'disable'.

-msched-spec-ldc
Gumamit ng isang simpleng pagsusuri sa haka-haka ng data. Naka-on ang opsyong ito bilang default.

-msched-control-spec-ldc
Gumamit ng isang simpleng pagsusuri para sa kontrol ng haka-haka. Naka-on ang opsyong ito bilang default.

-msched-stop-bits-pagkatapos-bawat-ikot
Huminto nang kaunti pagkatapos ng bawat pag-ikot kapag nag-iiskedyul. Naka-on ang opsyong ito bilang default.

-msched-fp-mem-deps-zero-cost
Ipagpalagay na ang mga floating-point store at load ay hindi malamang na magdulot ng salungatan kung kailan
inilagay sa parehong pangkat ng pagtuturo. Ang pagpipiliang ito ay hindi pinagana bilang default.

-msel-sched-dont-check-control-spec
Bumuo ng mga tseke para sa kontrol na haka-haka sa piling pag-iiskedyul. Ang watawat na ito ay
hindi pinagana bilang default.

-msched-max-memory-insns=max-insns
Limitahan ang bilang ng mga memory insn sa bawat pangkat ng pagtuturo, na nagbibigay ng mas mababang priyoridad sa
kasunod na memory insns na sinusubukang mag-iskedyul sa parehong pangkat ng pagtuturo.
Madalas na kapaki-pakinabang upang maiwasan ang mga salungatan sa cache bank. Ang default na halaga ay 1.

-msched-max-memory-insns-hard-limit
Ginagawa ang limitasyon na tinukoy ng msched-max-memory-insns isang mahirap na limitasyon, hindi pinapayagan ang higit pa
kaysa sa numerong iyon sa isang pangkat ng pagtuturo. Kung hindi, ang limitasyon ay "malambot", ibig sabihin
na ang mga non-memory na operasyon ay ginustong kapag ang limitasyon ay naabot, ngunit memorya
maaaring nakaiskedyul pa rin ang mga operasyon.

LM32 Options

mga ito -m ang mga opsyon ay tinukoy para sa arkitektura ng LatticeMico32:

-mbarrel-shift-enabled
Paganahin ang mga tagubilin sa paglilipat ng bariles.

-mdivide-enabled
Paganahin ang mga tagubilin sa hati at modulus.

-mmultiply-enabled
Paganahin ang mga tagubilin sa multiply.

-msign-extend-enabled
Paganahin ang mga tagubilin sa pag-sign extend.

-muser-enabled
Paganahin ang mga tagubiling tinukoy ng user.

M32C Options

-mcpu=pangalan
Piliin ang CPU kung saan nabuo ang code. pangalan maaaring isa sa r8c para sa R8C/Tiny
serye, m16c para sa serye ng M16C (hanggang /60), m32cm para sa seryeng M16C/80, o m32c
para sa serye ng M32C/80.

-msim
Tinutukoy na ang programa ay tatakbo sa simulator. Nagdudulot ito ng kahaliling
runtime library na mai-link kung saan sumusuporta, halimbawa, file I/O. Hindi mo dapat
gamitin ang opsyong ito kapag bumubuo ng mga program na tatakbo sa totoong hardware; kailangan mo
magbigay ng iyong sariling runtime library para sa anumang I/O function na kailangan.

-meregs=numero
Tinutukoy ang bilang ng mga pseudo-register na nakabatay sa memorya na ginagamit ng GCC sa pagbuo ng code.
Ang mga pseudo-register na ito ay ginagamit tulad ng mga totoong rehistro, kaya mayroong isang tradeoff sa pagitan
Ang kakayahan ng GCC na magkasya ang code sa mga available na rehistro, at ang parusa sa pagganap ng
gamit ang memorya sa halip na mga rehistro. Tandaan na ang lahat ng mga module sa isang programa ay dapat na
pinagsama-sama na may parehong halaga para sa opsyong ito. Dahil diyan, hindi mo dapat gamitin ito
opsyon na may mga default na runtime library ng GCC.

M32R/D Options

mga ito -m ang mga opsyon ay tinukoy para sa mga arkitektura ng Renesas M32R/D:

-m32r2
Bumuo ng code para sa M32R/2.

-m32rx
Bumuo ng code para sa M32R/X.

-m32r
Bumuo ng code para sa M32R. Ito ang default.

-mmodel=maliit
Ipagpalagay na ang lahat ng mga bagay ay nakatira sa mas mababang 16MB ng memorya (upang ang kanilang mga address ay maaaring maging
na-load ng "ld24" na pagtuturo), at ipagpalagay na ang lahat ng mga subroutine ay maaabot ng
"bl" na pagtuturo. Ito ang default.

Maaaring itakda ang addressability ng isang partikular na bagay gamit ang attribute na "modelo".

-mmodel=medium
Ipagpalagay na ang mga bagay ay maaaring nasaanman sa 32-bit address space (ang compiler ay bumubuo
"seth/add3" na mga tagubilin upang i-load ang kanilang mga address), at ipagpalagay na ang lahat ng mga subroutine ay
maabot gamit ang "bl" na pagtuturo.

-mmodel=malaki
Ipagpalagay na ang mga bagay ay maaaring nasaanman sa 32-bit address space (ang compiler ay bumubuo
"seth/add3" na mga tagubilin upang i-load ang kanilang mga address), at ipagpalagay na ang mga subroutine ay maaaring hindi
maabot gamit ang "bl" na pagtuturo (ang compiler ay bumubuo ng mas mabagal
"seth/add3/jl" sequence ng pagtuturo).

-msdata=wala
Huwag paganahin ang paggamit ng maliit na lugar ng data. Ang mga variable ay inilalagay sa isa sa ".data", ".bss", o
".rodata" (maliban kung ang attribute na "section" ay tinukoy). Ito ang default.

Ang maliit na lugar ng data ay binubuo ng mga seksyong ".sdata" at ".sbss". Ang mga bagay ay maaaring
tahasang inilagay sa maliit na lugar ng data na may katangiang "seksyon" gamit ang isa sa mga ito
seksyon.

-msdata=sdata
Maglagay ng maliit na global at static na data sa maliit na lugar ng data, ngunit huwag gumawa ng espesyal
code para sanggunian sa kanila.

-msdata=gamitin
Maglagay ng maliit na global at static na data sa maliit na lugar ng data, at bumuo ng espesyal
mga tagubilin para sanggunian ang mga ito.

-G num
Ilagay ang mga global at static na bagay na mas mababa sa o katumbas ng num bytes sa maliit na data o
Mga seksyon ng BSS sa halip na ang mga normal na data o mga seksyon ng BSS. Ang default na halaga ng num is
8. Ang -msdata ang opsyon ay dapat itakda sa isa sa sdata or gamitin para magkaroon ang opsyong ito ng anuman
epekto.

Ang lahat ng mga module ay dapat na pinagsama-sama sa pareho -G num halaga. Pagsasama-sama ng iba't ibang
mga halaga ng num maaaring gumana o hindi; kung hindi nagbibigay ng error ang linker
mensahe---hindi nabuo ang maling code.

-mdebug
Ginagawang ang M32R-specific na code sa compiler ay nagpapakita ng ilang istatistika na maaaring makatulong
sa mga programa sa pag-debug.

-malign-loops
Ihanay ang lahat ng mga loop sa isang 32-byte na hangganan.

-mno-align-loops
Huwag magpatupad ng 32-byte na pagkakahanay para sa mga loop. Ito ang default.

-missue-rate=numero
Problema numero mga tagubilin sa bawat cycle. numero pwede lang 1 or 2.

-mbranch-cost=numero
numero maaari lamang maging 1 o 2. Kung ito ay 1 kung gayon ang mga sanga ay mas gusto kaysa sa kondisyon
code, kung ito ay 2, kung gayon ang kabaligtaran ay nalalapat.

-mflush-trap=numero
Tinutukoy ang numero ng bitag na gagamitin para i-flush ang cache. Ang default ay 12. Wasto
ang mga numero ay nasa pagitan ng 0 at 15 kasama.

-mno-flush-trap
Tinutukoy na hindi ma-flush ang cache sa pamamagitan ng paggamit ng bitag.

-mflush-func=pangalan
Tinutukoy ang pangalan ng operating system function na tatawagan para i-flush ang cache. Ang
ang default ay _flush_cache, ngunit ang isang function na tawag ay ginagamit lamang kung ang isang bitag ay hindi magagamit.

-mno-flush-func
Isinasaad na walang OS function para sa pag-flush ng cache.

M680x0 Options

Ito ang mga -m mga opsyon na tinukoy para sa mga processor ng M680x0 at ColdFire. Ang mga default na setting
depende sa kung aling arkitektura ang napili kapag ang compiler ay na-configure; ang mga default
para sa pinakakaraniwang mga pagpipilian ay ibinigay sa ibaba.

-martsa=arko
Bumuo ng code para sa isang partikular na M680x0 o ColdFire instruction set architecture.
Mga pinahihintulutang halaga ng arko para sa mga arkitektura ng M680x0 ay: 68000, 68010, 68020, 68030,
68040, 68060 at cpu32. Ang mga arkitektura ng ColdFire ay pinili ayon sa Freescale's
Ang pag-uuri ng ISA at ang mga pinahihintulutang halaga ay: isaah, isaaplus, isab at Isaac.

Tinutukoy ng GCC ang isang macro na "__mcfarko__" sa tuwing ito ay bumubuo ng code para sa isang ColdFire
target. Ang arko sa macro na ito ay isa sa -martsa mga argumentong ibinigay sa itaas.

Kapag ginamit nang magkasama, -martsa at -mtune piliin ang code na tumatakbo sa isang pamilya ng katulad
mga processor ngunit na-optimize iyon para sa isang partikular na microarchitecture.

-mcpu=CPU
Bumuo ng code para sa isang partikular na processor ng M680x0 o ColdFire. Ang M680x0 CPUs ay:
68000, 68010, 68020, 68030, 68040, 68060, 68302, 68332 at cpu32. Ang ColdFire CPUs
ay ibinigay ng talahanayan sa ibaba, na nag-uuri din sa mga CPU sa mga pamilya:

Pamilya: -mcpu argumento
51 : 51 51ac 51ag 51cn 51em 51je 51jf 51jg 51jm 51mm 51qe 51sqm
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 overrides -martsa=arko if arko ay katugma sa CPU. Iba pang mga kumbinasyon ng
-mcpu at -martsa ay tinanggihan.

Tinutukoy ng GCC ang macro na "__mcf_cpu_cpu" kapag na-target ng ColdFire CPU ay pinili. Ito rin
tumutukoy sa "__mcf_family_pamilya", kung saan ang halaga ng pamilya ay ibinigay ng talahanayan sa itaas.

-mtune=magtono
Ibagay ang code para sa isang partikular na microarchitecture sa loob ng mga hadlang na itinakda ni -martsa
at -mcpu. Ang M680x0 microarchitectures ay: 68000, 68010, 68020, 68030, 68040,
68060 at cpu32. Ang ColdFire microarchitectures ay: cfv1, cfv2, cfv3, cfv4 at
cfv4e.

Vous pouvez aussi paggamit -mtune=68020-40 para sa code na kailangang tumakbo nang medyo maayos sa 68020,
68030 at 68040 na mga target. -mtune=68020-60 ay katulad ngunit may kasamang 68060 na mga target bilang
mabuti. Pinipili ng dalawang opsyong ito ang parehong mga desisyon sa pag-tune bilang -m68020-40 at -m68020-60
ayon sa pagkakabanggit.

Tinutukoy ng GCC ang mga macro na "__mcarko" at "__mcarko__" kapag tune para sa 680x0 architecture
arko. Tinutukoy din nito ang "mcarko" maliban kung alinman -ansi o isang hindi GNU -std ginagamit ang opsyon.
Kung ang GCC ay nagtu-tune para sa isang hanay ng mga arkitektura, gaya ng pinili ni -mtune=68020-40 or
-mtune=68020-60, tinutukoy nito ang mga macro para sa bawat arkitektura sa hanay.

Tinutukoy din ng GCC ang macro na "__mmaaga__" kapag tune para sa ColdFire microarchitecture
maaga, Kung saan maaga ay isa sa mga argumentong ibinigay sa itaas.

-m68000
-mc68000
Bumuo ng output para sa isang 68000. Ito ang default kapag ang compiler ay na-configure para sa
68000-based na mga sistema. Ito ay katumbas ng -martsa=68000.

Gamitin ang opsyong ito para sa mga microcontroller na may 68000 o EC000 core, kasama ang 68008,
68302, 68306, 68307, 68322, 68328 at 68356.

-m68010
Bumuo ng output para sa isang 68010. Ito ang default kapag ang compiler ay na-configure para sa
68010-based na mga sistema. Ito ay katumbas ng -martsa=68010.

-m68020
-mc68020
Bumuo ng output para sa isang 68020. Ito ang default kapag ang compiler ay na-configure para sa
68020-based na mga sistema. Ito ay katumbas ng -martsa=68020.

-m68030
Bumuo ng output para sa isang 68030. Ito ang default kapag ang compiler ay na-configure para sa
68030-based na mga sistema. Ito ay katumbas ng -martsa=68030.

-m68040
Bumuo ng output para sa isang 68040. Ito ang default kapag ang compiler ay na-configure para sa
68040-based na mga sistema. Ito ay katumbas ng -martsa=68040.

Pinipigilan ng opsyong ito ang paggamit ng 68881/68882 na mga tagubilin na kailangang tularan ng
software sa 68040. Gamitin ang opsyong ito kung ang iyong 68040 ay walang code na dapat tularan
ang mga tagubiling iyon.

-m68060
Bumuo ng output para sa isang 68060. Ito ang default kapag ang compiler ay na-configure para sa
68060-based na mga sistema. Ito ay katumbas ng -martsa=68060.

Pinipigilan ng opsyong ito ang paggamit ng 68020 at 68881/68882 na mga tagubilin na dapat
tinularan ng software sa 68060. Gamitin ang opsyong ito kung walang code ang iyong 68060
upang tularan ang mga tagubiling iyon.

-mcpu32
Bumuo ng output para sa isang CPU32. Ito ang default kapag ang compiler ay na-configure para sa
Mga system na nakabatay sa CPU32. Ito ay katumbas ng -march=cpu32.

Gamitin ang opsyong ito para sa mga microcontroller na may CPU32 o CPU32+ core, kasama ang 68330,
68331, 68332, 68333, 68334, 68336, 68340, 68341, 68349 at 68360.

-m5200
Bumuo ng output para sa isang 520X ColdFire CPU. Ito ang default kapag ang compiler ay
na-configure para sa 520X-based na mga system. Ito ay katumbas ng -mcpu=5206, at ngayon na
hindi na ginagamit pabor sa opsyong iyon.

Gamitin ang opsyong ito para sa microcontroller na may 5200 core, kasama ang MCF5202, MCF5203,
MCF5204 at MCF5206.

-m5206e
Bumuo ng output para sa isang 5206e ColdFire CPU. Ang opsyon ay hindi na ginagamit pabor sa
ang katumbas -mcpu=5206e.

-m528x
Bumuo ng output para sa isang miyembro ng pamilya ng ColdFire 528X. Ang pagpipilian ay ngayon
hindi na ginagamit pabor sa katumbas -mcpu=528x.

-m5307
Bumuo ng output para sa isang ColdFire 5307 CPU. Ang opsyon ay hindi na ginagamit pabor sa
katumbas -mcpu=5307.

-m5407
Bumuo ng output para sa isang ColdFire 5407 CPU. Ang opsyon ay hindi na ginagamit pabor sa
katumbas -mcpu=5407.

-mcfv4e
Bumuo ng output para sa isang ColdFire V4e family CPU (hal. 547x/548x). Kabilang dito ang paggamit ng
hardware floating-point na mga tagubilin. Ang opsyon ay katumbas ng -mcpu=547x, At ito ay
ngayon ay hindi na ginagamit pabor sa opsyong iyon.

-m68020-40
Bumuo ng output para sa isang 68040, nang hindi gumagamit ng alinman sa mga bagong tagubilin. Nagreresulta ito
sa code na maaaring tumakbo nang medyo mahusay sa alinman sa isang 68020/68881 o isang 68030 o isang
68040. Ang nabuong code ay gumagamit ng 68881 na mga tagubilin na ginagaya sa
68040.

Ang opsyon ay katumbas ng -martsa=68020 -mtune=68020-40.

-m68020-60
Bumuo ng output para sa isang 68060, nang hindi gumagamit ng alinman sa mga bagong tagubilin. Nagreresulta ito
sa code na maaaring tumakbo nang medyo mahusay sa alinman sa isang 68020/68881 o isang 68030 o isang
68040. Ang nabuong code ay gumagamit ng 68881 na mga tagubilin na ginagaya sa
68060.

Ang opsyon ay katumbas ng -martsa=68020 -mtune=68020-60.

-mhard-float
-m68881
Bumuo ng floating-point na mga tagubilin. Ito ang default para sa 68020 at mas mataas, at
para sa mga ColdFire device na may FPU. Tinutukoy nito ang macro na "__HAVE_68881__" sa
M680x0 na mga target at "__mcffpu__" sa mga target ng ColdFire.

-msoft-float
Huwag bumuo ng floating-point na mga tagubilin; gumamit na lang ng mga tawag sa library. Ito ang
default para sa 68000, 68010, at 68832 na mga target. Ito rin ang default para sa ColdFire
mga device na walang FPU.

-mdiv
-mno-div
Bumuo (huwag bumuo) ColdFire hardware divide at natitirang mga tagubilin. Kung
-martsa ay ginagamit nang wala -mcpu, ang default ay "naka-on" para sa mga arkitektura ng ColdFire at "naka-off"
para sa mga arkitektura ng M680x0. Kung hindi, ang default ay kinuha mula sa target na CPU (alinman sa
ang default na CPU, o ang tinukoy ni -mcpu). Halimbawa, ang default ay "naka-off"
para -mcpu=5206 at "on" para sa -mcpu=5206e.

Tinutukoy ng GCC ang macro na "__mcfhwdiv__" kapag pinagana ang opsyong ito.

-msshort
Isaalang-alang ang uri ng "int" na 16 bits ang lapad, tulad ng "short int". Bilang karagdagan, ang mga parameter
na ipinasa sa stack ay nakahanay din sa isang 16-bit na hangganan kahit sa mga target na ang API
nag-uutos ng promosyon sa 32-bit.

-mno-maikli
Huwag isaalang-alang ang uri ng "int" na 16 bits ang lapad. Ito ang default.

-mnobitfield
-mno-bitfield
Huwag gamitin ang bit-field na mga tagubilin. Ang -m68000, -mcpu32 at -m5200 ipinahihiwatig ng mga opsyon
-mnobitfield.

-mbitfield
Gamitin ang mga tagubilin sa bit-field. Ang -m68020 ipinahihiwatig ng opsyon -mbitfield. Ito ay
ang default kung gagamit ka ng configuration na idinisenyo para sa isang 68020.

-mrtd
Gumamit ng ibang function-calling convention, kung saan ang mga function ay naayos
ang bilang ng mga argumento ay bumalik kasama ang "rtd" na pagtuturo, na nagpa-pop ng kanilang mga argumento
habang bumabalik. Nagse-save ito ng isang pagtuturo sa tumatawag dahil hindi na kailangan
pop ang mga argumento doon.

Ang convention sa pagtawag na ito ay hindi tugma sa karaniwang ginagamit sa Unix, kaya ikaw
hindi ito magagamit kung kailangan mong tumawag sa mga aklatan na pinagsama-sama sa Unix compiler.

Gayundin, dapat kang magbigay ng mga prototype ng function para sa lahat ng mga function na may variable
bilang ng mga argumento (kabilang ang "printf"); kung hindi, maling code ang nabuo para sa
mga tawag sa mga function na iyon.

Bilang karagdagan, ang malubhang hindi tamang code ay nagreresulta kung tatawag ka ng isang function na may masyadong marami
mga argumento. (Karaniwan, ang mga karagdagang argumento ay hindi nakakapinsalang binabalewala.)

Ang pagtuturo ng "rtd" ay sinusuportahan ng 68010, 68020, 68030, 68040, 68060 at CPU32
mga processor, ngunit hindi sa pamamagitan ng 68000 o 5200.

-mno-rtd
Huwag gamitin ang mga convention sa pagtawag na pinili ni -mrtd. Ito ang default.

-malign-int
-mno-align-int
Kontrolin kung itina-align ng GCC ang "int", "long", "long long", "float", "double", at "long
double" na mga variable sa isang 32-bit na hangganan (-malign-int) o isang 16-bit na hangganan
(-mno-align-int). Ang pag-align ng mga variable sa 32-bit na mga hangganan ay gumagawa ng code na tumatakbo
medyo mas mabilis sa mga processor na may 32-bit na mga bus sa gastos ng mas maraming memorya.

Babala: kung gagamitin mo ang -malign-int switch, inaayos ng GCC ang mga istrukturang naglalaman ng nasa itaas
iba ang mga uri kaysa sa karamihan sa mga na-publish na mga detalye ng interface ng binary ng application para sa
ang m68k.

-mpcrel
Gamitin ang pc-relative addressing mode ng 68000 nang direkta, sa halip na gumamit ng global
offset na talahanayan. Sa kasalukuyan, ang pagpipiliang ito ay nagpapahiwatig -fpic, na nagbibigay-daan sa pinakamaraming 16-bit na offset
para sa pc-relative addressing. -fPIC ay hindi kasalukuyang sinusuportahan ng -mpcrel, Bagaman
ito ay maaaring suportahan para sa 68020 at mas mataas na mga processor.

-mno-strict-align
-mstrict-align
Huwag (gawin) ipagpalagay na ang mga hindi nakahanay na memory reference ay pinangangasiwaan ng system.

-msep-data
Bumuo ng code na nagbibigay-daan sa segment ng data na matatagpuan sa ibang lugar ng memorya
mula sa segment ng teksto. Ito ay nagbibigay-daan para sa execute-in-place sa isang kapaligiran na walang
pamamahala ng virtual memory. Ang pagpipiliang ito ay nagpapahiwatig -fPIC.

-mno-sep-data
Bumuo ng code na ipinapalagay na ang segment ng data ay sumusunod sa segment ng text. Ito ay
ang default.

-mid-shared-library
Bumuo ng code na sumusuporta sa mga shared library sa pamamagitan ng library ID method. Ito ay nagpapahintulot
para sa execute-in-place at shared library sa isang environment na walang virtual memory
pamamahala. Ang pagpipiliang ito ay nagpapahiwatig -fPIC.

-mno-id-shared-library
Bumuo ng code na hindi ipinapalagay na ginagamit ang mga nakabahaging aklatan na nakabatay sa ID. Ito ay
ang default.

-mshared-library-id=n
Tinutukoy ang numero ng pagkakakilanlan ng nakabahaging library na nakabatay sa ID na kino-compile.
Ang pagtukoy ng halaga ng 0 ay bumubuo ng mas compact na code; pagtukoy ng iba pang mga halaga ng pwersa
ang paglalaan ng numerong iyon sa kasalukuyang aklatan, ngunit wala nang espasyo- o oras-
mahusay kaysa sa pag-alis sa opsyong ito.

-mxgot
-mno-xgot
Kapag bumubuo ng position-independent code para sa ColdFire, bumuo ng code na gumagana kung
ang GOT ay may higit sa 8192 entries. Ang code na ito ay mas malaki at mas mabagal kaysa sa code
nabuo nang walang pagpipiliang ito. Sa mga processor ng M680x0, hindi kailangan ang opsyong ito; -fPIC
sapat na.

Karaniwang gumagamit ang GCC ng iisang tagubilin para mag-load ng mga value mula sa GOT. Habang ito ay
medyo mahusay, ito ay gumagana lamang kung ang GOT ay mas maliit kaysa sa tungkol sa 64k. Anumang bagay
mas malaki ang nagiging sanhi ng linker na mag-ulat ng isang error tulad ng:

naputol ang relokasyon upang magkasya: R_68K_GOT16O foobar

Kung mangyari ito, dapat mong i-compile muli ang iyong code gamit ang -mxgot. Dapat itong gumana sa
napakalaking GOT. Gayunpaman, nabuo ang code gamit ang -mxgot ay hindi gaanong mahusay, dahil ito
tumatagal ng 4 na tagubilin upang makuha ang halaga ng isang pandaigdigang simbolo.

Tandaan na ang ilang linker, kabilang ang mga mas bagong bersyon ng GNU linker, ay maaaring lumikha
maramihang GOT at pag-uri-uriin ang GOT na mga entry. Kung mayroon kang ganoong linker, kailangan mo lang
upang gamitin ang -mxgot kapag nag-compile ng isang object file na nag-a-access ng higit sa 8192 GOT
mga entry. Kakaunti lang ang gumagawa.

Walang epekto ang mga opsyong ito maliban kung ang GCC ay bumubuo ng code na independyente sa posisyon.

MCore Options

Ito ang mga -m mga opsyon na tinukoy para sa mga processor ng Motorola M*Core.

-mhardlit
-mno-hardlit
Inline constants sa stream ng code kung magagawa ito sa dalawang tagubilin o mas kaunti.

-mdiv
-mno-div
Gamitin ang divide instruction. (Pinagana bilang default).

-mrelax-agad
-mno-relax-agad
Payagan ang mga arbitrary-sized na kaagad sa mga bit operation.

-mwide-bitfields
-mno-wide-bitfields
Palaging ituring ang mga bit-field bilang "int"-sized.

-m4byte-function
-mno-4byte-functions
Pilitin ang lahat ng mga function na ihanay sa isang 4-byte na hangganan.

-mcallgraph-data
-mno-callgraph-data
Maglabas ng impormasyon ng callgraph.

-mslow-bytes
-mno-slow-bytes
Mas gusto ang pag-access ng salita kapag nagbabasa ng mga dami ng byte.

-mlittle-endian
-big-endian
Bumuo ng code para sa isang maliit na-endian na target.

-m210
-m340
Bumuo ng code para sa 210 processor.

-mno-lsim
Ipagpalagay na ang suporta sa runtime ay ibinigay at kaya alisin ang library ng simulator
(libsim.a) mula sa linker command line.

-mstack-increment=laki
Itakda ang maximum na halaga para sa isang pagpapatakbo ng pagtaas ng stack. Ang mga malalaking halaga ay maaari
pataasin ang bilis ng mga program na naglalaman ng mga function na nangangailangan ng malaking halaga ng
stack space, ngunit maaari rin silang mag-trigger ng segmentation fault kung ang stack ay pinahaba
Sobra. Ang default na halaga ay 0x1000.

MeP Options

-mabsdiff
Pinapagana ang pagtuturo ng "abs", na siyang ganap na pagkakaiba sa pagitan ng dalawang rehistro.

-mall-opts
Pinapagana ang lahat ng mga opsyonal na tagubilin---average, multiply, divide, bit operations,
nangunguna sa zero, ganap na pagkakaiba, min/max, clip, at saturation.

-maverage
Pinapagana ang "ave" na pagtuturo, na kumukwenta ng average ng dalawang rehistro.

-based=n
Mga variable ng laki n Ang mga byte o mas maliit ay inilalagay sa seksyong ".based" bilang default.
Ginagamit ng mga base na variable ang $tp register bilang base register, at mayroong 128-byte na limitasyon
sa seksyong ".based".

-mbitops
Pinapagana ang bit operation instructions---bit test ("btstm"), set ("bsetm"), clear
("bclrm"), invert ("bnotm"), at test-and-set ("tas").

-mc=pangalan
Pinipili kung aling seksyon ang constant data na inilalagay. pangalan maaaring hindi napakaliit, malapit, O malayo.

-mclip
Pinapagana ang "clip" na pagtuturo. Tandaan na -mclip ay hindi kapaki-pakinabang maliban kung ikaw din
magbigay -mminmax.

-mconfig=pangalan
Pumili ng isa sa mga built-in na core configuration. Ang bawat MeP chip ay may isa o higit pa
mga module sa loob nito; bawat module ay may pangunahing CPU at iba't ibang coprocessors, opsyonal
mga tagubilin, at mga peripheral. Ang tool na "MeP-Integrator", hindi bahagi ng GCC, ay nagbibigay
ang mga pagsasaayos na ito sa pamamagitan ng opsyong ito; ang paggamit sa opsyong ito ay kapareho ng paggamit ng lahat
ang kaukulang mga opsyon sa command-line. Ang default na configuration ay default.

-mcop
Pinapagana ang mga tagubilin ng coprocessor. Bilang default, ito ay isang 32-bit na coprocessor. Tandaan
na ang coprocessor ay karaniwang pinagana sa pamamagitan ng -mconfig= pagpipilian.

-mcop32
Pinapagana ang mga tagubilin ng 32-bit na coprocessor.

-mcop64
Pinapagana ang mga tagubilin ng 64-bit na coprocessor.

-mivc2
Pinapagana ang pag-iskedyul ng IVC2. Ang IVC2 ay isang 64-bit na VLIW coprocessor.

-mdc
Nagiging sanhi ng paglalagay ng mga pare-parehong variable sa seksyong ".malapit".

-mdiv
Pinapagana ang "div" at "divu" na mga tagubilin.

-meb
Bumuo ng big-endian code.

-mel
Bumuo ng little-endian code.

-mio-volatile
Sinasabi sa compiler na ang anumang variable na minarkahan ng attribute na "io" ay dapat
itinuturing na pabagu-bago ng isip.

-ml Nagiging sanhi ng mga variable na italaga sa seksyong ".far" bilang default.

-mleadz
Pinapagana ang pagtuturo ng "leadz" (nangungunang zero).

-mm Nagiging sanhi ng mga variable na italaga sa seksyong ".near" bilang default.

-mminmax
Pinapagana ang "min" at "max" na mga tagubilin.

-mult
Pinapagana ang multiplikasyon at multiply-accumulate na mga tagubilin.

-mno-opts
Hindi pinapagana ang lahat ng mga opsyonal na tagubilin na pinagana ni -mall-opts.

-ulitin
Ine-enable ang "repeat" at "erepeat" na mga tagubilin, na ginagamit para sa low-overhead looping.

-MS Nagiging default ang lahat ng variable sa seksyong ".tiny". Tandaan na mayroong a
65536-byte na limitasyon sa seksyong ito. Ang mga access sa mga variable na ito ay gumagamit ng %gp base
magrehistro.

-msatur
Pinapagana ang mga tagubilin sa saturation. Tandaan na ang compiler ay hindi sa kasalukuyan
bumuo ng mga ito mismo, ngunit ang pagpipiliang ito ay kasama para sa pagiging tugma sa iba pang mga tool,
parang "as".

-msdram
I-link ang SDRAM-based na runtime sa halip na ang default na ROM-based na runtime.

-msim
I-link ang mga run-time na library ng simulator.

-msimnovec
I-link ang mga library ng runtime ng simulator, hindi kasama ang built-in na suporta para sa pag-reset at
exception vectors at mga talahanayan.

-mtf
Nagiging default ang lahat ng function sa seksyong ".far". Kung wala ang pagpipiliang ito, gumagana
default sa seksyong ".near".

-mtiny=n
Mga variable na n Ang mga byte o mas maliit ay inilalaan sa seksyong ".tiny". Ang mga ito
ginagamit ng mga variable ang $gp base register. Ang default para sa opsyong ito ay 4, ngunit tandaan iyon
mayroong 65536-byte na limitasyon sa seksyong ".tiny".

MicroBlaze Options

-msoft-float
Gumamit ng software emulation para sa floating point (default).

-mhard-float
Gumamit ng mga tagubilin sa floating-point ng hardware.

-mmemcpy
Huwag i-optimize ang block moves, gumamit ng "memcpy".

-mno-clearbss
Hindi na ginagamit ang opsyong ito. Gamitin -fno-zero-initialized-sa-bss sa halip.

-mcpu=uri ng cpu
Gumamit ng mga feature ng, at schedule code para sa, ibinigay na CPU. Ang mga sinusuportahang halaga ay nasa
format vX.YY.Z, Kung saan X ay isang pangunahing bersyon, YY ay ang menor de edad na bersyon, at Z is
compatibility code. Ang mga halimbawang halaga ay v3.00.a, v4.00.b, v5.00.a, v5.00.b, v5.00.b,
v6.00.a.

-mxl-soft-mul
Gumamit ng software multiply emulation (default).

-mxl-soft-div
Gumamit ng software emulation para sa divides (default).

-mxl-barrel-shift
Gamitin ang hardware barrel shifter.

-mxl-pattern-compare
Gumamit ng mga tagubilin sa paghahambing ng pattern.

-msmall-divides
Gumamit ng table lookup optimization para sa maliliit na signed integer divisions.

-mxl-stack-check
Hindi na ginagamit ang opsyong ito. Gamitin -fstack-check sa halip.

-mxl-gp-opt
Gumamit ng mga seksyong ".sdata"/".sbss" na may kaugnayan sa GP.

-mxl-multiply-high
Gamitin ang multiply high na mga tagubilin para sa mataas na bahagi ng 32x32 multiply.

-mxl-float-convert
Gumamit ng hardware floating-point na mga tagubilin sa conversion.

-mxl-float-sqrt
Gumamit ng hardware floating-point square root na pagtuturo.

-big-endian
Bumuo ng code para sa isang malaking-endian na target.

-mlittle-endian
Bumuo ng code para sa isang maliit na-endian na target.

-mxl-muling ayusin
Gumamit ng mga tagubilin sa muling pagkakasunud-sunod (swap at byte reversed load/store).

-mxl-mode-modelo ng app
Pumili ng modelo ng application modelo ng app. Ang mga wastong modelo ay

pinatutupad
normal executable (default), gumagamit ng startup code crt0.o.

xmdstub
para gamitin sa Xilinx Microprocessor Debugger (XMD) based software intrusive debug
ahente na tinatawag na xmdstub. Gumagamit ito ng startup file crt1.o at itinatakda ang panimulang address ng
ang programa sa 0x800.

bootstrap
para sa mga application na na-load gamit ang isang bootloader. Gumagamit ang modelong ito ng startup file
crt2.o na hindi naglalaman ng processor reset vector handler. Ito ay angkop
para sa paglilipat ng kontrol sa isang pag-reset ng processor sa bootloader kaysa sa
application.

mga novector
para sa mga application na hindi nangangailangan ng alinman sa mga MicroBlaze vectors. Ang pagpipiliang ito
maaaring maging kapaki-pakinabang para sa mga application na tumatakbo sa loob ng isang monitoring application. Ang modelong ito
Gumagamit crt3.o bilang isang startup file.

Opsyon -xl-mode-modelo ng app ay isang hindi na ginagamit na alyas para sa -mxl-mode-modelo ng app.

MIPS Options

-EB Bumuo ng big-endian code.

-ANG Bumuo ng little-endian code. Ito ang default para sa mips*el-*-* mga kumpigurasyon.

-martsa=arko
Bumuo ng code na tumatakbo sa arko, na maaaring pangalan ng isang generic na MIPS ISA, o ang
pangalan ng isang partikular na processor. Ang mga pangalan ng ISA ay: mips1, mips2, mips3, mips4,
mips32, mips32r2, mips32r3, mips32r5, mips32r6, mips64, mips64r2, mips64r3, mips64r5
at mips64r6. Ang mga pangalan ng processor ay: 4kc, 4km, 4kp, 4ksc, 4kec, 4kem, 4kep, 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 at xlp. ang
espesyal na halaga galing-abi pinipili ang pinakakatugmang arkitektura para sa napiling ABI
(yan ay, mips1 para sa 32-bit ABI at mips3 para sa 64-bit ABIs).

Sinusuportahan din ng katutubong Linux/GNU toolchain ang halaga katutubo, na pumipili ng pinakamahusay
opsyon sa arkitektura para sa host processor. -martsa=katutubo walang epekto kung GCC
hindi makilala ang processor.

Sa mga pangalan ng processor, isang final 000 maaaring daglatin bilang k (Halimbawa, -martsa=r2k).
Ang mga prefix ay opsyonal, at vr maaaring isulat r.

Mga pangalan ng form nf2_1 sumangguni sa mga processor na may mga FPU na na-orasan sa kalahati ng rate ng
core, mga pangalan ng form nf1_1 sumangguni sa mga processor na may mga FPU na naka-clock sa parehong rate
bilang core, at mga pangalan ng form nf3_2 sumangguni sa mga processor na may mga FPU na nag-clocked ng ratio
ng 3:2 na may paggalang sa core. Para sa mga dahilan ng compatibility, nf ay tinatanggap bilang a
kasingkahulugan ng nf2_1 habang nx at bfx ay tinatanggap bilang kasingkahulugan ng nf1_1.

Tinutukoy ng GCC ang dalawang macro batay sa halaga ng opsyong ito. Ang una ay "_MIPS_ARCH",
na nagbibigay ng pangalan ng target na arkitektura, bilang isang string. Ang pangalawa ay may anyo
"_MIPS_ARCH_foo", Kung saan foo ay ang capitalized na halaga ng "_MIPS_ARCH". Halimbawa,
-martsa=r2000 itinatakda ang "_MIPS_ARCH" sa "r2000" at tinutukoy ang macro na "_MIPS_ARCH_R2000".

Tandaan na ang "_MIPS_ARCH" macro ay gumagamit ng mga pangalan ng processor na ibinigay sa itaas. Sa iba
salita, mayroon itong buong unlapi at hindi pinaikli 000 as k. Sa kaso ng mula sa-
abi, pinangalanan ng macro ang nalutas na arkitektura (alinman sa "mips1" o "mips3"). Pangalan nito
ang default na arkitektura kapag hindi -martsa ang pagpipilian ay ibinigay.

-mtune=arko
Mag-optimize para sa arko. Sa iba pang mga bagay, kinokontrol ng opsyong ito ang paraan ng mga tagubilin
naka-iskedyul, at ang pinaghihinalaang halaga ng mga pagpapatakbo ng arithmetic. Ang listahan ng arko halaga
ay katulad ng para sa -martsa.

Kapag hindi ginamit ang opsyong ito, nag-o-optimize ang GCC para sa processor na tinukoy ni -martsa. Sa pamamagitan ng
paggamit -martsa at -mtune magkasama, posibleng makabuo ng code na tumatakbo sa a
pamilya ng mga processor, ngunit i-optimize ang code para sa isang partikular na miyembro ng pamilyang iyon.

-mtune tinutukoy ang mga macro na "_MIPS_TUNE" at "_MIPS_TUNE_foo", na gumagana sa parehong
paraan bilang ang -martsa mga inilarawan sa itaas.

-mips1
Katumbas ng -martsa=mips1.

-mips2
Katumbas ng -martsa=mips2.

-mips3
Katumbas ng -martsa=mips3.

-mips4
Katumbas ng -martsa=mips4.

-mips32
Katumbas ng -martsa=mips32.

-mips32r3
Katumbas ng -martsa=mips32r3.

-mips32r5
Katumbas ng -martsa=mips32r5.

-mips32r6
Katumbas ng -martsa=mips32r6.

-mips64
Katumbas ng -martsa=mips64.

-mips64r2
Katumbas ng -martsa=mips64r2.

-mips64r3
Katumbas ng -martsa=mips64r3.

-mips64r5
Katumbas ng -martsa=mips64r5.

-mips64r6
Katumbas ng -martsa=mips64r6.

-mips16
-mno-mips16
Bumuo (huwag bumuo) ng MIPS16 code. Kung ang GCC ay nagta-target ng MIPS32 o MIPS64
arkitektura, ginagamit nito ang MIPS16e ASE.

MIPS16 code generation ay maaari ding kontrolin sa isang per-function na batayan sa pamamagitan ng
Mga attribute na "mips16" at "nomips16".

-mflip-mips16
Bumuo ng MIPS16 code sa mga alternating function. Ang pagpipiliang ito ay ibinigay para sa regression
pagsubok ng mixed MIPS16/non-MIPS16 code generation, at hindi inilaan para sa ordinaryo
gamitin sa pag-compile ng user code.

-minterlink-compressed
-mno-interlink-compressed
Kinakailangan (hindi kailangan) na ang code gamit ang pamantayan (hindi naka-compress) na MIPS ISA ay maging link-
tugma sa MIPS16 at microMIPS code, at vice versa.

Halimbawa, ang code na gumagamit ng karaniwang ISA encoding ay hindi maaaring direktang tumalon sa MIPS16 o
microMIPS code; dapat itong gumamit ng isang tawag o hindi direktang pagtalon. -minterlink-compressed
samakatuwid ay hindi pinapagana ang mga direktang pagtalon maliban kung alam ng GCC na ang target ng pagtalon ay hindi
naka-compress

-minterlink-mips16
-mno-interlink-mips16
Mga alyas ng -minterlink-compressed at -mno-interlink-compressed. Ang mga pagpipiliang ito
nauna sa microMIPS ASE at pinananatili para sa pabalik na pagkakatugma.

-mabi=32
-mabi=o64
-mabi=n32
-mabi=64
-mabi=eabi
Bumuo ng code para sa ibinigay na ABI.

Tandaan na ang EABI ay may 32-bit at 64-bit na variant. Ang GCC ay karaniwang bumubuo ng 64-bit
code kapag pumili ka ng 64-bit na arkitektura, ngunit maaari mong gamitin -mgp32 para makakuha ng 32-bit code
sa halip.

Para sa impormasyon tungkol sa O64 ABI, tingnanhttp://gcc.gnu.org/projects/mipso64-abi.html>.

Sinusuportahan ng GCC ang isang variant ng o32 ABI kung saan ang mga floating-point register ay 64
higit sa 32 bits ang lapad. Maaari mong piliin ang kumbinasyong ito sa -mabi=32 -mfp64. Itong ABI
umaasa sa "mthc1" at "mfhc1" na mga tagubilin at samakatuwid ay sinusuportahan lamang para sa
Mga processor ng MIPS32R2, MIPS32R3 at MIPS32R5.

Ang mga pagtatalaga ng rehistro para sa mga argumento at mga halaga ng pagbabalik ay nananatiling pareho, ngunit bawat isa
Ang scalar value ay ipinapasa sa isang solong 64-bit na rehistro sa halip na isang pares ng 32-bit
nagrerehistro. Halimbawa, ibinalik ang mga scalar floating-point value $f0 lamang, hindi a
$f0/$f1 pares. Ang hanay ng mga naka-save na tawag na rehistro ay nananatiling pareho din na ang kahit na-
naka-save ang may bilang na double-precision registers.

Dalawang karagdagang variant ng o32 ABI ang sinusuportahan upang paganahin ang isang paglipat mula sa
32-bit hanggang 64-bit na mga rehistro. Ito ay FPXX (-mfpxx) at FP64A (-mfp64
-mno-odd-spreg). Ang extension ng FPXX ay nag-uutos na ang lahat ng code ay dapat isagawa nang tama
kapag tumakbo gamit ang 32-bit o 64-bit registers. Ang code ay maaaring iugnay sa alinman
FP32 o FP64, ngunit hindi pareho. Ang extension ng FP64A ay katulad ng extension ng FP64 ngunit
ipinagbabawal ang paggamit ng odd-numbered single-precision registers. Ito ay maaaring gamitin sa
kasabay ng "FRE" mode ng mga FPU sa mga processor ng MIPS32R5 at pinapayagan ang parehong FP32
at FP64A code upang mag-interlink at tumakbo sa parehong proseso nang hindi binabago ang mga FPU mode.

-mabicalls
-mno-abicalls
Bumuo (huwag bumuo) ng code na angkop para sa SVR4-style na mga dynamic na bagay.
-mabicalls ay ang default para sa mga sistemang nakabatay sa SVR4.

-mshared
-mno-shared
Bumuo (huwag bumuo) ng code na ganap na independiyente sa posisyon, at magagawa iyon
samakatuwid ay maiugnay sa mga nakabahaging aklatan. Ang pagpipiliang ito ay nakakaapekto lamang -mabicalls.

lahat -mabicalls ang code ay tradisyonal na naging independyente sa posisyon, anuman ang mga opsyon
gaya ng -fPIC at -fpic. Gayunpaman, bilang extension, pinapayagan ng GNU toolchain ang mga executable
upang gumamit ng ganap na mga pag-access para sa mga lokal na nagbubuklod na simbolo. Maaari rin itong gumamit ng mas maikling GP
pagsisimula ng mga sequence at bumuo ng mga direktang tawag sa mga function na tinukoy ng lokal. Ito
ang mode ay pinili ng -mno-shared.

-mno-shared depende sa binutils 2.16 o mas mataas at bumubuo ng mga bagay na maaari lamang
na-link ng GNU linker. Gayunpaman, hindi naaapektuhan ng opsyon ang ABI ng final
maipapatupad; nakakaapekto lamang ito sa ABI ng mga bagay na maaaring ilipat. Gamit -mno-shared
karaniwang ginagawang mas maliit at mas mabilis ang mga executable.

-mshared ay ang default.

-mplt
-mno-plt
Ipagpalagay (huwag ipagpalagay) na sinusuportahan ng mga static at dynamic na linker ang mga PLT at kopya
mga relokasyon. Ang pagpipiliang ito ay nakakaapekto lamang -mno-shared -mabicalls. Para sa n64 ABI, ito
ang opsyon ay walang epekto kung wala -msym32.

Maaari ka Gumawa -mplt ang default sa pamamagitan ng pag-configure ng GCC sa --with-mips-plt. Ang default
is -mno-plt kung hindi man.

-mxgot
-mno-xgot
Iangat (huwag iangat) ang karaniwang mga paghihigpit sa laki ng global offset table.

Karaniwang gumagamit ang GCC ng iisang tagubilin para mag-load ng mga value mula sa GOT. Habang ito ay
medyo mahusay, ito ay gumagana lamang kung ang GOT ay mas maliit kaysa sa tungkol sa 64k. Anumang bagay
mas malaki ang nagiging sanhi ng linker na mag-ulat ng isang error tulad ng:

naputol ang relokasyon upang magkasya: R_MIPS_GOT16 foobar

Kung mangyari ito, dapat mong i-compile muli ang iyong code gamit ang -mxgot. Gumagana ito sa napaka
malalaking GOT, bagama't hindi gaanong mahusay ang code, dahil kailangan ng tatlo
mga tagubilin upang kunin ang halaga ng isang pandaigdigang simbolo.

Tandaan na ang ilang linker ay maaaring lumikha ng maraming GOT. Kung mayroon kang ganoong linker, ikaw
dapat lang gamitin -mxgot kapag ang isang solong object file ay nag-access ng higit sa 64k's
halaga ng GOT entries. Kakaunti lang ang gumagawa.

Walang epekto ang mga opsyong ito maliban kung ang GCC ay bumubuo ng posisyong independent code.

-mgp32
Ipagpalagay na ang pangkalahatang layunin na mga rehistro ay 32 bits ang lapad.

-mgp64
Ipagpalagay na ang pangkalahatang layunin na mga rehistro ay 64 bits ang lapad.

-mfp32
Ipagpalagay na ang mga floating-point register ay 32 bits ang lapad.

-mfp64
Ipagpalagay na ang mga floating-point register ay 64 bits ang lapad.

-mfpxx
Huwag ipagpalagay ang lapad ng mga floating-point register.

-mhard-float
Gumamit ng floating-point coprocessor na mga tagubilin.

-msoft-float
Huwag gumamit ng floating-point coprocessor na mga tagubilin. Ipatupad ang floating-point
mga kalkulasyon gamit ang mga tawag sa library sa halip.

-mno-float
Katumbas ng -msoft-float, ngunit iginiit din na ang programa ay pinagsama-sama
ay hindi nagsasagawa ng anumang floating-point operations. Ang opsyon na ito ay kasalukuyang sinusuportahan
sa pamamagitan lamang ng ilang bare-metal na MIPS configuration, kung saan maaari itong pumili ng isang espesyal na hanay ng
mga aklatan na kulang sa lahat ng floating-point support (kabilang ang, halimbawa, ang floating-
point "printf" na mga format). Kung pinagsama-sama ang code sa -mno-float hindi sinasadyang naglalaman
floating-point operations, ito ay malamang na magdusa ng link-time o run-time failure.

-msingle-float
Ipagpalagay na ang floating-point coprocessor ay sumusuporta lamang sa mga single-precision na operasyon.

-mdouble-float
Ipagpalagay na ang floating-point coprocessor ay sumusuporta sa double-precision operations. Ito
ay ang default.

-modd-spreg
-mno-odd-spreg
Paganahin ang paggamit ng mga odd-numbered na single-precision na floating-point na mga rehistro para sa o32
ABI. Ito ang default para sa mga processor na kilalang sumusuporta sa mga register na ito.
Kapag ginagamit ang o32 FPXX ABI, -mno-odd-spreg ay nakatakda bilang default.

-mabs=2008
-mabs=pamana
Kinokontrol ng mga opsyong ito ang paggamot ng espesyal na hindi-isang-numero (NaN) IEEE 754
floating-point data na may "abs.fmt" at "neg.fmt" mga tagubilin sa makina.

Bilang default o kung kailan -mabs=pamana ay ginagamit ang legacy na paggamot ay pinili. Dito sa
kaso ang mga tagubiling ito ay itinuturing na aritmetika at iniiwasan kung saan tamang operasyon
ay kinakailangan at ang input operand ay maaaring isang NaN. Isang mas mahabang pagkakasunod-sunod ng mga tagubilin
na manu-manong manipulahin ang sign bit ng floating-point datum ay ginagamit sa halip maliban kung
ang -ffinite-math-lamang ang opsyon ay tinukoy din.

Ang -mabs=2008 pinipili ng opsyon ang IEEE 754-2008 na paggamot. Sa kasong ito ang mga ito
ang mga tagubilin ay itinuturing na hindi aritmetika at samakatuwid ay gumagana nang tama sa lahat
mga kaso, kabilang ang partikular na kung saan ang input operand ay isang NaN. Ang mga tagubiling ito
samakatuwid ay palaging ginagamit para sa kani-kanilang mga operasyon.

-mnan=2008
-mnan=pamana
Kinokontrol ng mga opsyong ito ang pag-encode ng espesyal na not-a-number (NaN) IEEE 754
floating-point data.

Ang -mnan=pamana pinipili ng opsyon ang legacy na encoding. Sa kasong ito, tahimik na NaNs (qNaNs)
ay tinutukoy ng unang bit ng kanilang sumusunod na significand field na 0, samantalang
ang pagsenyas ng NaNs (sNaNs) ay tinutukoy ng unang bit ng kanilang sumusunod na kabuluhan
ang larangan ay 1.

Ang -mnan=2008 pinipili ng opsyon ang IEEE 754-2008 encoding. Sa kasong ito, ang mga qNaN ay
tinutukoy ng unang bit ng kanilang sumusunod na significand field na 1, samantalang ang mga sNaN
ay tinutukoy ng unang bit ng kanilang sumusunod na significand field na 0.

Ang default ay -mnan=pamana maliban kung ang GCC ay na-configure sa --with-nan=2008.

-mllsc
-mno-llsc
Gamitin (huwag gamitin) ll, sc, at i-sync mga tagubilin para ipatupad ang built-in na memorya ng atom
mga function. Kapag walang tinukoy na opsyon, ginagamit ng GCC ang mga tagubilin kung ang target
sinusuportahan sila ng arkitektura.

-mllsc ay kapaki-pakinabang kung ang runtime na kapaligiran ay maaaring tularan ang mga tagubilin at -mno-llsc
maaaring maging kapaki-pakinabang kapag nag-compile para sa mga hindi karaniwang ISA. Maaari mong gawin ang alinmang opsyon na
default sa pamamagitan ng pag-configure ng GCC gamit ang --sa-llsc at --walang-llsc ayon sa pagkakabanggit.
--sa-llsc ay ang default para sa ilang mga pagsasaayos; tingnan ang dokumentasyon ng pag-install
para sa mga detalye.

-mdsp
-mno-dsp
Gamitin (huwag gamitin) ang rebisyon 1 ng MIPS DSP ASE.
Tinutukoy ng opsyong ito ang preprocessor macro na "__mips_dsp". Tinutukoy din nito
"__mips_dsp_rev" hanggang 1.

-mdspr2
-mno-dspr2
Gamitin (huwag gamitin) ang rebisyon 2 ng MIPS DSP ASE.
Tinutukoy ng opsyong ito ang preprocessor macros na "__mips_dsp" at "__mips_dspr2". Ito
Tinutukoy din ang "__mips_dsp_rev" hanggang 2.

-msmartmips
-mno-smartmips
Gamitin (huwag gamitin) ang MIPS SmartMIPS ASE.

-may kapansanan-single
-mno-paired-single
Gumamit ng (huwag gumamit) ng paired-single floating-point na mga tagubilin.
Ang opsyon na ito ay nangangailangan ng hardware floating-point support upang paganahin.

-mdmx
-mno-mdmx
Gumamit ng (huwag gumamit) ng mga tagubilin sa MIPS Digital Media Extension. Ang pagpipiliang ito ay maaari lamang
ginagamit kapag bumubuo ng 64-bit na code at nangangailangan ng hardware na floating-point support
pinagana.

-mips3d
-mno-mips3d
Gamitin (huwag gamitin) ang MIPS-3D ASE. Ang pagpipilian -mips3d nagpapahiwatig -may kapansanan-single.

-mmicromip
-mno-micromip
Bumuo (huwag bumuo) ng microMIPS code.

Ang pagbuo ng MicroMIPS code ay maaari ding kontrolin sa bawat function na batayan sa pamamagitan ng
"micromips" at "nomicromips" attributes.

-mmt
-mno-mt
Gumamit (huwag gumamit) ng MT Multithreading na mga tagubilin.

-mmcu
-mno-mcu
Gamitin (huwag gamitin) ang mga tagubilin ng MIPS MCU ASE.

-meva
-mno-eva
Gamitin (huwag gamitin) ang mga tagubilin ng MIPS Enhanced Virtual Addressing.

-mvirt
-mno-virt
Gamitin (huwag gamitin) ang MIPS Virtualization Application Specific na mga tagubilin.

-mxpa
-mno-xpa
Gamitin (huwag gamitin) ang mga tagubilin ng MIPS eXtended Physical Address (XPA).

-mlong64
Pilitin ang mga "mahabang" na uri na maging 64 bits ang lapad. Tingnan mo -mlong32 para sa paliwanag ng default
at ang paraan na tinutukoy ang laki ng pointer.

-mlong32
Pilitin ang "long", "int", at mga uri ng pointer na maging 32 bits ang lapad.

Ang default na laki ng "int", "long" at mga pointer ay nakasalalay sa ABI. Lahat ng
ang mga sinusuportahang ABI ay gumagamit ng 32-bit na "int" na mga. Ang n64 ABI ay gumagamit ng 64-bit na "mahaba", tulad ng ginagawa ng 64-bit
EABI; ang iba ay gumagamit ng 32-bit "long" s. Ang mga pointer ay kapareho ng laki ng "mahaba", o ang
parehong laki ng mga integer na nagrerehistro, alinman ang mas maliit.

-msym32
-mno-sym32
Ipagpalagay (huwag ipagpalagay) na ang lahat ng mga simbolo ay may mga 32-bit na halaga, anuman ang napili
ABI. Ang pagpipiliang ito ay kapaki-pakinabang sa kumbinasyon ng -mabi=64 at -mno-abicalls dahil ito
nagbibigay-daan sa GCC na bumuo ng mas maikli at mas mabilis na mga sanggunian sa mga simbolikong address.

-G num
Maglagay ng mga kahulugan ng external na nakikitang data sa isang maliit na seksyon ng data kung ang data na iyon ay hindi
mas malaki kaysa num byte. Ang GCC ay maaaring makabuo ng mas mahusay na mga pag-access sa data; tingnan mo
-mgpopt para sa mga detalye.

Ang default -G ang pagpipilian ay depende sa pagsasaayos.

-mlocal-sdata
-mno-local-sdata
Pahabain (huwag pahabain) ang -G pag-uugali sa lokal na data din, tulad ng sa mga static na variable
sa C. -mlocal-sdata ay ang default para sa lahat ng mga configuration.

Kung ang linker ay nagreklamo na ang isang application ay gumagamit ng masyadong maliit na data, maaari mong
gusto mong subukang buuin muli ang mga bahaging hindi gaanong kritikal sa pagganap -mno-local-sdata. Mo
maaaring gusto ring bumuo ng malalaking aklatan gamit ang -mno-local-sdata, upang ang mga aklatan
mag-iwan ng mas maraming puwang para sa pangunahing programa.

-mextern-sdata
-mno-extern-sdata
Ipagpalagay (huwag ipagpalagay) na ang data na tinukoy sa labas ay nasa isang maliit na seksyon ng data kung ang
ang laki ng data na iyon ay nasa loob ng -G hangganan -mextern-sdata ay ang default para sa lahat
mga kumpigurasyon.

Kung mag-compile ka ng module Mod sa -mextern-sdata -G num -mgpopt, at Mod mga sanggunian a
nagbabago ay na hindi mas malaki kaysa sa num bytes, dapat mong tiyakin na ay ay nilagay
sa isang maliit na seksyon ng data. Kung ay ay tinukoy ng isa pang module, dapat kang mag-compile
ang modyul na iyon na may sapat na mataas -G pagtatakda o pag-attach ng attribute na "section" sa ay's
kahulugan. Kung ay ay karaniwan, dapat mong i-link ang application na may sapat na mataas -G
setting na ito.

Ang pinakamadaling paraan upang matugunan ang mga paghihigpit na ito ay ang pag-compile at pag-link ng bawat module
na may parehong -G opsyon. Gayunpaman, maaaring gusto mong bumuo ng isang library na sumusuporta
ilang iba't ibang maliliit na limitasyon ng data. Magagawa mo ito sa pamamagitan ng pag-compile ng library gamit ang
ang pinakamataas na suportado -G setting at karagdagang paggamit -mno-extern-sdata upang ihinto ang
library mula sa paggawa ng mga pagpapalagay tungkol sa panlabas na tinukoy na data.

-mgpopt
-mno-gpopt
Gumamit (huwag gumamit) ng mga GP-relative na pag-access para sa mga simbolo na kilalang nasa maliit na data
seksyon; tingnan mo -G, -mlocal-sdata at -mextern-sdata. -mgpopt ay ang default para sa lahat
mga kumpigurasyon.

-mno-gpopt ay kapaki-pakinabang para sa mga kaso kung saan ang $gp register ay maaaring hindi hawak ang halaga ng
"_gp". Halimbawa, kung ang code ay bahagi ng isang library na maaaring gamitin sa isang boot
monitor, ang mga program na tumatawag sa boot monitor routine ay nagpapasa ng hindi kilalang halaga sa $gp. (Sa
tulad ng mga sitwasyon, ang boot monitor mismo ay karaniwang pinagsama-sama -G0.)

-mno-gpopt nagpapahiwatig -mno-local-sdata at -mno-extern-sdata.

-naka-embed na-data
-mno-embedded-data
Ilaan muna ang mga variable sa read-only na seksyon ng data kung maaari, pagkatapos ay sa susunod sa
maliit na seksyon ng data kung maaari, kung hindi man sa data. Nagbibigay ito ng bahagyang mas mabagal na code
kaysa sa default, ngunit binabawasan ang halaga ng RAM na kinakailangan kapag nagpapatupad, at sa gayon ay maaaring
mas gusto para sa ilang naka-embed na system.

-muninit-const-in-rodata
-mno-uninit-const-in-rodata
Ilagay ang mga hindi inisyal na variable na "const" sa seksyong read-only na data. Ang pagpipiliang ito ay
makabuluhan lamang kasabay ng -naka-embed na-data.

-mcode-readable=pagtatakda ng
Tukuyin kung ang GCC ay maaaring bumuo ng code na nagbabasa mula sa mga executable na seksyon. meron
tatlong posibleng setting:

-mcode-readable=oo
Maaaring malayang ma-access ng mga tagubilin ang mga executable na seksyon. Ito ang default na setting.

-mcode-readable=pcrel
Maaaring ma-access ng MIPS16 PC-relative load instructions ang mga executable na seksyon, ngunit iba pa
hindi dapat gawin ito ng mga tagubilin. Ang opsyon na ito ay kapaki-pakinabang sa 4KSc at 4KSd processor
kapag ang code na TLBs ay mayroong Read Inhibit bit set. Ito ay kapaki-pakinabang din sa mga processor
na maaaring i-configure upang magkaroon ng dual instruction/data SRAM interface at iyon,
tulad ng M4K, awtomatikong nagre-redirect ng PC-relative load sa instruction RAM.

-mcode-readable=no
Hindi dapat ma-access ng mga tagubilin ang mga executable na seksyon. Maaaring maging kapaki-pakinabang ang opsyong ito sa
mga target na naka-configure na magkaroon ng dalawahang pagtuturo/data SRAM interface ngunit
na (hindi katulad ng M4K) ay hindi awtomatikong nagre-redirect ng mga PC-relative load sa
pagtuturo RAM.

-msplit-address
-mno-split-address
I-enable (disable) ang paggamit ng "%hi()" at "%lo()" assembler relocation operator. Ito
ang opsyon ay napalitan ng -meexplicit-relocs ngunit nananatili sa likuran
compatibility.

-meexplicit-relocs
-mno-explicit-relocs
Gumamit ng (huwag gumamit) ng assembler relocation operator kapag nakikitungo sa mga simbolikong address.
Ang kahalili, pinili ni -mno-explicit-relocs, ay gumamit ng mga assembler macro sa halip.

-meexplicit-relocs ay ang default kung ang GCC ay na-configure na gumamit ng isang assembler na
sumusuporta sa mga operator ng paglilipat.

-mcheck-zero-division
-mno-check-zero-division
Trap (huwag bitag) sa integer division sa pamamagitan ng zero.

Ang default ay -mcheck-zero-division.

-mdivide-traps
-mdivide-breaks
Sinusuri ng mga MIPS system ang dibisyon sa pamamagitan ng zero sa pamamagitan ng pagbuo ng alinman sa conditional trap o a
break na pagtuturo. Ang paggamit ng mga bitag ay nagreresulta sa mas maliit na code, ngunit sinusuportahan lamang sa MIPS
II at mamaya. Gayundin, ang ilang bersyon ng Linux kernel ay may bug na pumipigil sa bitag
mula sa pagbuo ng tamang signal ("SIGFPE"). Gamitin -mdivide-traps upang payagan ang may kondisyon
mga bitag sa mga arkitektura na sumusuporta sa kanila at -mdivide-breaks upang pilitin ang paggamit ng
masira

Ang default ay kadalasan -mdivide-traps, ngunit maaari itong ma-override sa oras ng pag-configure
paggamit --with-divide=breaks. Ang divide-by-zero na mga pagsusuri ay maaaring ganap na hindi paganahin ang paggamit
-mno-check-zero-division.

-mmemcpy
-mno-memcpy
Pilitin (huwag pilitin) ang paggamit ng "memcpy" para sa mga di-trivial na block moves. Ang default ay
-mno-memcpy, na nagbibigay-daan sa GCC na i-inline ang karamihan sa mga pare-parehong laki ng mga kopya.

-mlong-tawag
-mno-mahabang-tawag
Huwag paganahin (huwag paganahin) ang paggamit ng "jal" na pagtuturo. Pagtawag ng mga function gamit ang "jal"
ay mas mahusay ngunit nangangailangan ng tumatawag at tumatawag sa parehong 256 megabyte
segment.

Walang epekto ang opsyong ito sa abicals code. Ang default ay -mno-mahabang-tawag.

-mmad
-mno-baliw
Paganahin (i-disable) ang paggamit ng "mad", "madu" at "mul" na mga tagubilin, gaya ng ibinigay ng
R4650 ISA.

-mimadd
-mno-imadd
I-enable (disable) ang paggamit ng "madd" at "msub" integer na mga tagubilin. Ang default ay
-mimadd sa mga arkitektura na sumusuporta sa "madd" at "msub" maliban sa 74k
arkitektura kung saan ito ay natagpuang bumuo ng mas mabagal na code.

-mfused-baliw
-mno-fused-madd
I-enable (disable) ang paggamit ng floating-point multiply-accumulate na mga tagubilin, kapag sila
ay magagamit. Ang default ay -mfused-baliw.

Sa R8000 CPU kapag ginamit ang multiply-accumulate na mga tagubilin, ang intermediate
ang produkto ay kinakalkula sa walang katapusang katumpakan at hindi napapailalim sa FCSR Flush sa
Zero bit. Ito ay maaaring hindi kanais-nais sa ilang mga pagkakataon. Sa iba pang mga processor ang
Ang resulta ay numerically identical sa katumbas na computation gamit ang hiwalay na multiply,
magdagdag, magbawas at magpawalang-bisa sa mga tagubilin.

-nocpp
Sabihin sa MIPS assembler na huwag patakbuhin ang preprocessor nito sa mga file ng assembler ng user (na may a
.s suffix) kapag pinagsama-sama ang mga ito.

-mfix-24k
-mno-fix-24k
Magtrabaho sa paligid ng 24K E48 (nawalang data sa mga tindahan sa panahon ng pag-refill). Ang mga solusyon
ay ipinatupad ng assembler sa halip na ng GCC.

-mfix-r4000
-mno-fix-r4000
Gumawa sa ilang partikular na R4000 na pagkakamali ng CPU:

- Ang isang double-word o isang variable shift ay maaaring magbigay ng isang hindi tamang resulta kung naisakatuparan
kaagad pagkatapos magsimula ng integer division.

- Ang isang double-word o isang variable shift ay maaaring magbigay ng maling resulta kung ipapatupad habang
isang integer multiplication ang kasalukuyang nagaganap.

- Ang isang integer division ay maaaring magbigay ng maling resulta kung nagsimula sa isang puwang ng pagkaantala ng a
kinuha sanga o isang tumalon.

-mfix-r4400
-mno-fix-r4400
Gumawa sa ilang partikular na R4400 na pagkakamali ng CPU:

- Ang isang double-word o isang variable shift ay maaaring magbigay ng isang hindi tamang resulta kung naisakatuparan
kaagad pagkatapos magsimula ng integer division.

-mfix-r10000
-mno-fix-r10000
Gumawa ng ilang partikular na R10000 na errata:

- Ang mga "ll"/"sc" na mga sequence ay maaaring hindi kumilos nang atomically sa mga rebisyon bago ang 3.0. Maaari silang
deadlock sa mga rebisyon 2.6 at mas maaga.

Magagamit lang ang opsyong ito kung sinusuportahan ng target na arkitektura ang malamang na sangay
mga tagubilin. -mfix-r10000 ay ang default kung kailan -martsa=r10000 Ginagamit; -mno-fix-r10000
ay ang default kung hindi man.

-mfix-rm7000
-mno-fix-rm7000
Magtrabaho sa paligid ng RM7000 na "dmult"/"dmultu" na errata. Ang mga workaround ay ipinatupad ng
ang assembler sa halip na sa pamamagitan ng GCC.

-mfix-vr4120
-mno-fix-vr4120
Magsagawa ng ilang partikular na error sa VR4120:

- Ang "dmultu" ay hindi palaging gumagawa ng tamang resulta.

- Ang "div" at "ddiv" ay hindi palaging gumagawa ng tamang resulta kung ang isa sa mga operand
ay negatibo.

Ang mga workaround para sa division errata ay umaasa sa mga espesyal na function sa libgcc.a. Sa
sa kasalukuyan, ang mga function na ito ay ibinibigay lamang ng mga "mips64vr*-elf" na mga configuration.

Ang ibang VR4120 errata ay nangangailangan ng NOP na ipasok sa pagitan ng ilang partikular na pares ng
mga tagubilin. Ang mga errata na ito ay pinangangasiwaan ng assembler, hindi ng GCC mismo.

-mfix-vr4130
Magtrabaho sa paligid ng VR4130 "mflo"/"mfhi" errata. Ang mga workaround ay ipinatupad ng
assembler sa halip na ng GCC, bagama't iniiwasan ng GCC ang paggamit ng "mflo" at "mfhi" kung ang
Ang VR4130 "macc", "macchi", "dmacc" at "dmacchi" na mga tagubilin ay available sa halip.

-mfix-sb1
-mno-fix-sb1
Magtrabaho sa ilang partikular na SB-1 CPU core errata. (Kasalukuyang gumagana ang watawat na ito sa paligid ng SB-1
rebisyon 2 "F1" at "F2" floating-point errata.)

-mr10k-cache-barrier=pagtatakda ng
Tukuyin kung ang GCC ay dapat magpasok ng mga hadlang sa cache upang maiwasan ang mga side-effects ng
haka-haka sa mga processor ng R10K.

Sa karaniwan sa maraming mga processor, sinusubukan ng R10K na hulaan ang kinalabasan ng isang kondisyon
branch at speculatively executes instructions from the "taken" branch. Mamaya na
abort ang mga tagubiling ito kung mali ang hinulaang resulta. Gayunpaman, sa R10K,
kahit na ang mga aborted na tagubilin ay maaaring magkaroon ng mga side effect.

Ang problemang ito ay nakakaapekto lamang sa mga kernel store at, depende sa system, ang mga kernel load.
Bilang halimbawa, maaaring i-load ng isang speculatively-executed store ang target na memory sa cache
at markahan ang linya ng cache bilang marumi, kahit na ang tindahan mismo ay na-abort sa ibang pagkakataon. Kung isang DMA
Ang operasyon ay nagsusulat sa parehong lugar ng memorya bago ang "marumi" na linya ay mapula, ang
ino-overwrite ng naka-cache na data ang DMA-ed na data. Tingnan ang manu-manong processor ng R10K para sa kabuuan
paglalarawan, kabilang ang iba pang mga potensyal na problema.

Ang isang solusyon ay ang pagpasok ng mga tagubilin sa hadlang sa cache bago ang bawat memorya na ma-access iyon
maaaring isagawa nang haka-haka at maaaring magkaroon ng mga side effect kahit na i-abort.
-mr10k-cache-barrier=pagtatakda ng kinokontrol ang pagpapatupad ng GCC sa workaround na ito. Ito
Ipinapalagay na ang mga na-abort na pag-access sa anumang byte sa mga sumusunod na rehiyon ay walang panig
epekto:

1. ang memorya na inookupahan ng stack frame ng kasalukuyang function;

2. ang memorya na inookupahan ng isang papasok na stack argument;

3. ang memorya na inookupahan ng isang bagay na may link-time-constant na address.

Responsibilidad ng kernel na tiyakin na ang speculative na pag-access sa mga rehiyong ito
ay talagang ligtas.

Kung ang input program ay naglalaman ng isang function na deklarasyon tulad ng:

void foo (walang bisa);

kung gayon ang pagpapatupad ng "foo" ay dapat pahintulutan ang "j foo" at "jal foo" na maisakatuparan
speculatively. Iginagalang ng GCC ang paghihigpit na ito para sa mga function na kino-compile nito mismo. Ito
inaasahan ang mga non-GCC function (gaya ng hand-written assembly code) na gawin din ang parehong.

Ang opsyon ay may tatlong anyo:

-mr10k-cache-barrier=load-store
Maglagay ng cache barrier bago ang isang load o store na maaaring maisip na maisakatuparan
at baka may side effect yan kahit aborted.

-mr10k-cache-barrier=store
Magpasok ng cache barrier bago ang isang tindahan na maaaring isagawa nang haka-haka at
na maaaring magkaroon ng mga side effect kahit na i-abort.

-mr10k-cache-barrier=wala
Huwag paganahin ang paglalagay ng mga hadlang sa cache. Ito ang default na setting.

-mflush-func=func
-mno-flush-func
Tinutukoy ang function na tatawagan upang i-flush ang I at D na mga cache, o upang hindi tumawag ng anuman
function. Kung tinawag, ang function ay dapat kumuha ng parehong mga argumento bilang ang karaniwan
"_flush_func", iyon ay, ang address ng hanay ng memorya kung saan naroroon ang cache
flushed, ang laki ng memory range, at ang numero 3 (upang i-flush ang parehong cache). Ang
Ang default ay depende sa target na GCC ay na-configure, ngunit karaniwan ay alinman
"_flush_func" o "__cpu_flush".

mbranch-cost=num
Itakda ang halaga ng mga sangay sa halos num "simpleng" mga tagubilin. Ang gastos na ito ay a
heuristic at hindi garantisadong makakapagdulot ng mga pare-parehong resulta sa mga release. Isang zero
paulit-ulit na pinipili ng gastos ang default, na batay sa -mtune setting na ito.

-malamang
-mno-branch-malamang
Paganahin o huwag paganahin ang paggamit ng mga tagubiling Malamang na Sangay, anuman ang default para sa
napiling arkitektura. Bilang default, maaaring mabuo ang mga tagubiling Malamang sa Sangay kung
sinusuportahan sila ng napiling arkitektura. Ang isang pagbubukod ay para sa MIPS32 at
Mga arkitektura at processor ng MIPS64 na nagpapatupad ng mga arkitektura na iyon; para sa mga iyon,
Ang mga tagubiling Malamang ng Branch ay hindi nabuo bilang default dahil ang MIPS32 at
Ang mga arkitektura ng MIPS64 ay partikular na hindi ginagamit ang kanilang paggamit.

-mfp-exceptions
-mno-fp-exceptions
Tinutukoy kung ang mga pagbubukod sa FP ay pinagana. Nakakaapekto ito kung paano ang mga tagubilin sa FP
naka-iskedyul para sa ilang mga processor. Ang default ay ang mga FP exception ay pinagana.

Halimbawa, sa SB-1, kung ang mga pagbubukod ng FP ay hindi pinagana, at naglalabas kami ng 64-bit
code, pagkatapos ay maaari naming gamitin ang parehong FP pipe. Kung hindi, maaari lang tayong gumamit ng isang FP pipe.

-mvr4130-align
-mno-vr4130-align
Ang VR4130 pipeline ay two-way superscalar, ngunit maaari lamang magbigay ng dalawang tagubilin
magkasama kung ang una ay 8-byte na nakahanay. Kapag pinagana ang opsyong ito, nakahanay ang GCC
mga pares ng mga tagubilin na sa tingin nito ay dapat isagawa nang magkatulad.

May epekto lang ang opsyong ito kapag nag-o-optimize para sa VR4130. Karaniwan itong gumagawa ng code
mas mabilis, ngunit sa kapinsalaan ng pagpapalaki nito. Ito ay pinagana bilang default sa
antas ng pag-optimize -O3.

-msynci
-mno-synci
I-enable (disable) ang pagbuo ng mga "synci" na mga tagubilin sa mga arkitektura na sumusuporta dito.
Ang mga tagubiling "synci" (kung pinagana) ay nabuo kapag ang "__builtin___clear_cache" ay
pinagsama-sama

Nagde-default ang opsyong ito sa -mno-synci, ngunit maaaring ma-override ang default sa pamamagitan ng pag-configure
GCC kasama ang --with-synci.

Kapag nag-compile ng code para sa mga single processor system, sa pangkalahatan ay ligtas na gamitin ang "synci".
Gayunpaman, sa maraming mga multi-core (SMP) system, hindi nito pinapawalang-bisa ang pagtuturo
cache sa lahat ng mga core at maaaring humantong sa hindi natukoy na gawi.

-mrelax-pic-calls
-mno-relax-pic-calls
Subukang gawing mga direktang tawag ang mga PIC na tawag na karaniwang ipinapadala sa pamamagitan ng rehistrong $25.
Posible lamang ito kung mareresolba ng linker ang patutunguhan sa oras ng pag-link at kung
ang destinasyon ay nasa saklaw para sa isang direktang tawag.

-mrelax-pic-calls ay ang default kung ang GCC ay na-configure na gumamit ng isang assembler at a
linker na sumusuporta sa ".reloc" assembly directive at -meexplicit-relocs ay nasa
epekto. Sa -mno-explicit-relocs, ang pag-optimize na ito ay maaaring isagawa ng
assembler at ang linker lamang nang walang tulong mula sa compiler.

-mmcount-ra-address
-mno-mcount-ra-address
Maglabas (huwag maglabas) ng code na nagpapahintulot sa "_mcount" na baguhin ang pagbabalik ng function ng pagtawag
tirahan. Kapag pinagana, pinalawak ng opsyong ito ang karaniwang interface na "_mcount" gamit ang bago
ra-address parameter, na may uri na "intptr_t *" at ipinapasa sa rehistrong $12.
Maaaring baguhin ng "_mcount" ang return address sa pamamagitan ng paggawa ng pareho sa mga sumusunod:

* Ibinabalik ang bagong address sa rehistro $31.

* Pag-iimbak ng bagong address sa "*ra-address", Kung ra-address ay nonnull.

Ang default ay -mno-mcount-ra-address.

MMIX Options

Ang mga opsyon na ito ay tinukoy para sa MMIX:

-mlibfuncs
-mno-libfuncs
Tukuyin na ang mga intrinsic na function ng library ay pinagsama-sama, na ipinapasa ang lahat ng mga halaga
nagrerehistro, anuman ang laki.

-mepsilon
-mno-epsilon
Bumuo ng mga tagubilin sa paghahambing ng floating-point na naghahambing sa "rE"
rehistro ng epsilon.

-mabi=mmixware
-mabi=gnu
Bumuo ng code na nagpapasa ng mga parameter ng function at nagbabalik ng mga halaga na (sa tinatawag na
function) ay makikita bilang mga rehistro ng $0 at pataas, kumpara sa GNU ABI na gumagamit ng global
nagrerehistro ng $231 at pataas.

-mzero-extend
-mno-zero-extend
Kapag nagbabasa ng data mula sa memorya sa mga sukat na mas maikli sa 64 bits, gumamit ng (huwag gumamit) ng zero-
pagpapahaba ng mga tagubilin sa pag-load bilang default, sa halip na mga tagubilin sa pagpapalawak ng pag-sign.

-mknuthdiv
-mno-knuthdiv
Gawin ang resulta ng isang dibisyon na nagbubunga ng isang natitira ay may parehong tanda ng divisor.
Gamit ang default, -mno-knuthdiv, ang tanda ng natitira ay sumusunod sa tanda ng
dibidendo. Ang parehong mga pamamaraan ay may bisa sa aritmetika, ang huli ay halos eksklusibo
ginagamit.

-mtoplevel-mga simbolo
-mno-toplevel-symbols
Prepend (huwag magprepend) a : sa lahat ng pandaigdigang simbolo, para magamit ang assembly code
gamit ang "PREFIX" assembly directive.

- melf
Bumuo ng executable sa ELF format, sa halip na default mmo format na ginamit ng
ang mmix simulator.

-mbranch-hula
-mno-branch-predict
Gamitin (huwag gamitin) ang malamang na-branch na mga tagubilin, kapag static na hula ng sangay
ay nagpapahiwatig ng isang malamang na sangay.

-mbase-address
-mno-base-address
Bumuo (huwag bumuo) ng code na gumagamit base addresses. Paggamit ng base address
awtomatikong bumubuo ng isang kahilingan (hinahawakan ng assembler at ng linker) para sa a
pare-pareho na mai-set up sa isang pandaigdigang rehistro. Ang rehistro ay ginagamit para sa isa o higit pang base
tugunan ang mga kahilingan sa loob ng saklaw na 0 hanggang 255 mula sa halagang hawak sa rehistro. Ang
sa pangkalahatan ay humahantong sa maikli at mabilis na code, ngunit ang bilang ng iba't ibang mga item ng data na
maaaring matugunan ay limitado. Nangangahulugan ito na isang program na gumagamit ng maraming static na data
maaaring mangailangan -mno-base-address.

-msingle-exit
-mno-single-exit
Pilitin (huwag pilitin) ang nabuong code na magkaroon ng isang exit point sa bawat function.

MN10300 Options

mga ito -m Ang mga opsyon ay tinukoy para sa mga arkitektura ng Matsushita MN10300:

-mult-bug
Bumuo ng code upang maiwasan ang mga bug sa mga tagubilin sa multiply para sa mga processor ng MN10300.
Ito ang default.

-mno-mult-bug
Huwag bumuo ng code upang maiwasan ang mga bug sa mga tagubilin sa multiply para sa MN10300
processors.

-mam33
Bumuo ng code gamit ang mga feature na partikular sa AM33 processor.

-mno-am33
Huwag bumuo ng code gamit ang mga feature na partikular sa AM33 processor. Ito ang
default.

-mam33-2
Bumuo ng code gamit ang mga feature na partikular sa AM33/2.0 processor.

-mam34
Bumuo ng code gamit ang mga feature na partikular sa AM34 processor.

-mtune=uri ng cpu
Gamitin ang mga katangian ng timing ng ipinahiwatig na uri ng CPU kapag nag-iiskedyul ng mga tagubilin.
Hindi nito binabago ang naka-target na uri ng processor. Ang uri ng CPU ay dapat isa sa
mn10300, am33, am33-2pm or am34.

-mreturn-pointer-on-d0
Kapag bumubuo ng isang function na nagbabalik ng isang pointer, ibalik ang pointer sa parehong "a0" at
"d0". Kung hindi, ang pointer ay ibinalik lamang sa "a0", at sinusubukang tawagan ang ganoon
Ang mga function na walang prototype ay nagreresulta sa mga error. Tandaan na ang opsyong ito ay naka-on
default; gamitin -mno-return-pointer-on-d0 upang hindi paganahin ito.

-mno-crt0
Huwag mag-link sa C run-time initialization object file.

-magpahinga
Ipahiwatig sa linker na dapat itong magsagawa ng relaxation optimization pass sa
paikliin ang mga branch, tawag at ganap na memory address. May epekto lang ang opsyong ito
kapag ginamit sa command line para sa huling hakbang ng link.

Ginagawang imposible ng opsyong ito ang simbolikong pag-debug.

-mliw
Payagan ang compiler na bumuo Mahaba Pagtuturo Salita mga tagubilin kung ang target ay ang
AM33 o mamaya. Ito ang default. Ang pagpipiliang ito ay tumutukoy sa preprocessor macro
"__LIW__".

-mnoliw
Huwag payagan ang compiler na bumuo Mahaba Pagtuturo Salita mga tagubilin. Ang pagpipiliang ito
tumutukoy sa preprocessor macro na "__NO_LIW__".

-msetlb
Payagan ang compiler na bumuo ng SETLB at Lcc mga tagubilin kung ang target ay ang
AM33 o mamaya. Ito ang default. Ang pagpipiliang ito ay tumutukoy sa preprocessor macro
"__SETLB__".

-mnosetlb
Huwag payagan ang compiler na bumuo SETLB or Lcc mga tagubilin. Tinutukoy ng pagpipiliang ito
ang preprocessor macro "__NO_SETLB__".

Moxie Options

-meb
Bumuo ng big-endian code. Ito ang default para sa moxie-*-* mga kumpigurasyon.

-mel
Bumuo ng little-endian code.

-mmul.x
Bumuo ng mul.x at umul.x na mga tagubilin. Ito ang default para sa moxiebox-*-*
mga kumpigurasyon.

-mno-crt0
Huwag mag-link sa C run-time initialization object file.

MSP430 Options

Ang mga opsyong ito ay tinukoy para sa MSP430:

-masm-hex
Pilitin ang output ng assembly na palaging gumamit ng hex constants. Karaniwan ang mga naturang constant ay nilagdaan
decimal, ngunit available ang opsyong ito para sa testsuite at/o aesthetic na layunin.

-mmcu=
Piliin ang MCU na ita-target. Ito ay ginagamit upang lumikha ng isang C preprocessor na simbolo batay sa
ang pangalan ng MCU, na-convert sa upper case at pre- at post-fixed sa __. Ito naman
ay ginagamit ng msp430.h header file upang pumili ng pandagdag na header na partikular sa MCU
file.

Itinatakda din ng opsyon ang ISA na gagamitin. Kung ang pangalan ng MCU ay isa na kilala lang
suportahan ang 430 ISA pagkatapos iyon ay napili, kung hindi man ang 430X ISA ay pinili. A
generic na pangalan ng MCU ng msp430 maaari ding gamitin para piliin ang 430 ISA. Katulad din ang
panlahat msp430x Pinipili ng pangalan ng MCU ang 430X ISA.

Bilang karagdagan, isang script ng linker na partikular sa MCU ay idinagdag sa linya ng command ng linker. Ang
Ang pangalan ng script ay ang pangalan ng MCU na may .ld nakadugtong. Kaya tinukoy -mmcu=xxx on
ang gcc Ang command line ay tumutukoy sa C preprocessor na simbolo na "__XXX__" at nagiging sanhi ng linker
para maghanap ng script na tinatawag xxx.ld.

Ang pagpipiliang ito ay ipinapasa din sa assembler.

-mcpu=
Tinutukoy ang ISA na gagamitin. Ang mga tinatanggap na halaga ay msp430, msp430x at msp430xv2. ito
hindi na ginagamit ang opsyon. Ang -mmcu= dapat gamitin ang opsyon para piliin ang ISA.

-msim
Link sa simulator runtime library at linker script. Ino-override ang anumang mga script na iyon
ay pipiliin ng -mmcu= pagpipilian.

-malaki
Gumamit ng malaking-modelo na pag-address (20-bit pointer, 32-bit "size_t").

-msmall
Gumamit ng small-model addressing (16-bit pointer, 16-bit "size_t").

-magpahinga
Ang opsyong ito ay ipinapasa sa assembler at linker, at pinapayagan ang linker na gumanap
ilang mga pag-optimize na hindi magagawa hanggang sa huling link.

mhwmult=
Inilalarawan ang uri ng hardware multiply na sinusuportahan ng target. Ang mga tinatanggap na halaga ay
wala para walang hardware multiply, 16bit para sa orihinal na 16-bit-only multiply na sinusuportahan
ng mga naunang MCU. 32bit para sa 16/32-bit multiply na sinusuportahan ng mga susunod na MCU at f5serye
para sa 16/32-bit multiply na sinusuportahan ng mga F5-series na MCU. Isang halaga ng kotse ay maaari ding maging
binigay. Sinasabi nito sa GCC na ihinuha ang hardware multiply support batay sa pangalan ng MCU
ibinigay ng -mmcu opsyon. Kung hindi -mmcu ang pagpipilian ay tinukoy pagkatapos 32bit hardware
ipinapalagay ang multiply support. kotse ay ang default na setting.

Ang mga hardware multiplies ay karaniwang ginagawa sa pamamagitan ng pagtawag sa isang library routine. Nakakatipid ito
puwang sa nabuong code. Kapag nag-compile sa -O3 o mas mataas gayunpaman ang hardware
ang multiplier ay invoked inline. Ginagawa nitong mas malaki, ngunit mas mabilis na code.

Ang hardware multiply routines ay hindi pinapagana ang mga interrupt habang tumatakbo at nire-restore ang
nakaraang interrupt state kapag natapos na sila. Ginagawa nitong ligtas silang gamitin sa loob
makagambala sa mga humahawak gayundin sa normal na code.

-minrt
Paganahin ang paggamit ng isang minimum na runtime environment - walang mga static na initializer o
mga konstruktor. Ito ay inilaan para sa memory-constrained device. Kasama sa compiler
mga espesyal na simbolo sa ilang bagay na nagsasabi sa linker at runtime kung aling mga fragment ng code
ay kinakailangan.

NDS32 Options

Ang mga opsyong ito ay tinukoy para sa mga pagpapatupad ng NDS32:

-big-endian
Bumuo ng code sa big-endian mode.

-mlittle-endian
Bumuo ng code sa little-endian mode.

-mreduced-regs
Gumamit ng mga pinababang set na rehistro para sa paglalaan ng rehistro.

-mfull-regs
Gumamit ng buong set na mga rehistro para sa paglalaan ng rehistro.

-mcmov
Bumuo ng mga kondisyong tagubilin sa paglipat.

-mno-cmov
Huwag bumuo ng mga kondisyong tagubilin sa paglipat.

-mperf-ext
Bumuo ng mga tagubilin sa extension ng pagganap.

-mno-perf-ext
Huwag bumuo ng mga tagubilin sa extension ng pagganap.

-mv3push
Bumuo ng v3 push25/pop25 na mga tagubilin.

-mno-v3push
Huwag bumuo ng v3 push25/pop25 na mga tagubilin.

-m16-bit
Bumuo ng 16-bit na mga tagubilin.

-mno-16-bit
Huwag bumuo ng 16-bit na mga tagubilin.

-misr-vector-size=num
Tukuyin ang laki ng bawat interrupt vector, na dapat ay 4 o 16.

-mcache-block-size=num
Tukuyin ang laki ng bawat bloke ng cache, na dapat ay may kapangyarihan na 2 sa pagitan ng 4 at 512.

-martsa=arko
Tukuyin ang pangalan ng target na arkitektura.

-mcmodel=code-modelo
Itakda ang modelo ng code sa isa sa

maliit
Ang lahat ng data at read-only na mga segment ng data ay dapat nasa loob ng 512KB addressing space.
Ang segment ng text ay dapat nasa loob ng 16MB addressing space.

medium
Ang segment ng data ay dapat nasa loob ng 512KB habang ang read-only na segment ng data ay maaaring nasa loob ng XNUMXKB
sa loob ng 4GB addressing space. Ang segment ng text ay dapat nasa loob pa rin ng 16MB
puwang sa pagtugon.

malaki
Ang lahat ng text at data segment ay maaaring nasa loob ng 4GB addressing space.

-mctor-dtor
I-enable ang feature na constructor/destructor.

-magpahinga
Gabay sa linker upang makapagpahinga ng mga tagubilin.

Nios II Options

Ito ang mga opsyon na tinukoy para sa processor ng Altera Nios II.

-G num
Ilagay ang mga global at static na bagay na mas mababa sa o katumbas ng num bytes sa maliit na data o
Mga seksyon ng BSS sa halip na ang mga normal na data o mga seksyon ng BSS. Ang default na halaga ng num is
8.

-mgpopt=opsyon
-mgpopt
-mno-gpopt
Bumuo (huwag bumuo) ng mga GP-relative na pag-access. Ang mga sumusunod opsyon mga pangalan ay
kinikilala:

wala
Huwag bumuo ng mga access na may kaugnayan sa GP.

lokal
Bumuo ng GP-relative na mga access para sa maliliit na data object na hindi panlabas o
mahina. Gumamit din ng GP-relative addressing para sa mga bagay na tahasang ginawa
inilagay sa isang maliit na seksyon ng data sa pamamagitan ng katangiang "seksyon".

global
Tulad ng para sa lokal, ngunit bumubuo rin ng mga GP-relative na pag-access para sa maliliit na data object na iyon
ay panlabas o mahina. Kung gagamitin mo ang opsyong ito, dapat mong tiyakin na ang lahat ng bahagi ng
ang iyong programa (kabilang ang mga aklatan) ay pinagsama-sama ng pareho -G setting na ito.

data
Bumuo ng mga access na may kaugnayan sa GP para sa lahat ng mga object ng data sa programa. Kung gagamit ka
ang opsyong ito, ang buong data at mga segment ng BSS ng iyong programa ay dapat magkasya sa 64K ng
memory at dapat kang gumamit ng naaangkop na script ng linker upang ilaan ang mga ito sa loob ng
addressible na hanay ng global pointer.

lahat Bumuo ng mga GP-relative na address para sa mga function pointer pati na rin sa mga data pointer. Kung
ginagamit mo ang opsyong ito, ang buong teksto, data, at mga segment ng BSS ng iyong programa ay dapat
magkasya sa 64K ng memorya at dapat kang gumamit ng naaangkop na script ng linker upang maglaan
ang mga ito sa loob ng addressible na hanay ng global pointer.

-mgpopt ay katumbas ng -mgpopt=lokal, at -mno-gpopt ay katumbas ng -mgpopt=wala.

Ang default ay -mgpopt maliban kung kailan -fpic or -fPIC ay tinukoy upang makabuo ng posisyon-
malayang code. Tandaan na ang Nios II ABI ay hindi nagpapahintulot ng GP-relative na pag-access mula sa
mga shared library.

Maaaring kailanganin mong tukuyin -mno-gpopt tahasan kapag gumagawa ng mga programa na kinabibilangan
malaking halaga ng maliit na data, kabilang ang malalaking seksyon ng GOT data. Sa kasong ito, ang
Ang 16-bit na offset para sa GP-relative na pag-address ay maaaring hindi sapat na malaki upang payagan ang pag-access sa
ang buong maliit na seksyon ng data.

-mel
-meb
Bumuo ng little-endian (default) o big-endian (experimental) na code, ayon sa pagkakabanggit.

-mbypass-cache
-mno-bypass-cache
Pilitin ang lahat ng mga tagubilin sa pag-load at pag-imbak na palaging i-bypass ang cache sa pamamagitan ng paggamit ng mga variant ng I/O ng
ang mga tagubilin. Ang default ay hindi i-bypass ang cache.

-mno-cache-volatile
-mcache-volatile
Ang pabagu-bagong pag-access sa memorya ay lampasan ang cache gamit ang mga variant ng I/O ng load at store
mga tagubilin. Ang default ay hindi i-bypass ang cache.

-mno-fast-sw-div
-mfast-sw-div
Huwag gumamit ng table-based fast divide para sa maliliit na numero. Ang default ay gamitin ang mabilis
hatiin sa -O3 at sa itaas.

-mno-hw-mul
-mhw-mul
-mno-hw-mulx
-mhw-mulx
-mno-hw-div
-mhw-div
Paganahin o huwag paganahin ang paglabas ng "mul", "mulx" at "div" na pamilya ng mga tagubilin ng
compiler. Ang default ay naglalabas ng "mul" at hindi naglalabas ng "div" at "mulx".

-nakasanayan-insn=N
-mno-custom-insn
bawat -nakasanayan-insn=N ang opsyon ay nagbibigay-daan sa paggamit ng isang pasadyang pagtuturo na may pag-encode N kailan
pagbuo ng code na gumagamit insn. Halimbawa, -mcustom-fadds=253 bumubuo ng custom
pagtuturo 253 para sa single-precision floating-point add operations sa halip na ang
default na gawi ng paggamit ng tawag sa library.

Ang mga sumusunod na halaga ng insn ay suportado. Maliban sa nabanggit, floating-point
ang mga operasyon ay inaasahang maipapatupad na may normal na IEEE 754 semantics at
direktang tumutugma sa mga operator ng C o sa katumbas na mga built-in na function ng GCC.

Single-precision floating point:

mga fadds, fsubs, mga fdiv, fmuls
Binary arithmetic operations.

fnegs
Unary negation.

fabss
Unary absolute value.

fcmpeqs, fcmpges, fcmpgts, fcmples, fcmplts, fcmpnes
Mga operasyon sa paghahambing.

fmins, fmaxs
Floating-point minimum at maximum. Ang mga tagubiling ito ay nabuo lamang kung
-ffinite-math-lamang ay tinukoy.

fsqrts
Unary square root na operasyon.

fcoss, fsins, ftans, mga fatan, fexps, palo
Floating-point trigonometric at exponential function. Ang mga tagubiling ito ay
nabuo lamang kung -funsafe-math-optimizations ay tinukoy din.

Dobleng katumpakan na lumulutang na punto:

faddd, fsubd, fdivd, fmuld
Binary arithmetic operations.

fnegd
Unary negation.

fabsd
Unary absolute value.

fcmpeqd, fcmpged, fcmpgtd, fcmpled, fcmpltd, fcmpned
Mga operasyon sa paghahambing.

fmind, fmaxd
Double-precision minimum at maximum. Ang mga tagubiling ito ay nabuo lamang kung
-ffinite-math-lamang ay tinukoy.

fsqrtd
Unary square root na operasyon.

fcosd, fsind, ftand, fatand, fexpd, flogd
Double-precision trigonometric at exponential function. Ang mga tagubiling ito ay
nabuo lamang kung -funsafe-math-optimizations ay tinukoy din.

Mga Conversion:

fextsd
Conversion mula sa solong katumpakan sa dobleng katumpakan.

ftruncds
Pagbabago mula sa dobleng katumpakan sa solong katumpakan.

fixsi, fixsu, fixdi, fixdu
Conversion mula sa lumulutang na punto sa mga pinirmahan o hindi nalagdaan na mga uri ng integer, na may
pagputol patungo sa zero.

ikot
Conversion mula sa single-precision floating point sa signed integer, rounding sa
pinakamalapit na integer at mga ugnayan ang layo mula sa zero. Ito ay tumutugma sa
"__builtin_lroundf" function kapag -fno-math-errno Ginagamit.

floatis, floatus, lumulutang, floatud
Conversion mula sa signed o unsigned integer na mga uri patungo sa mga floating-point na uri.

Bilang karagdagan, ang lahat ng sumusunod na mga tagubilin sa paglipat para sa mga panloob na rehistro X at Y
ay dapat ibigay upang magamit ang alinman sa mga tagubiling double-precision floating-point.
Ang mga custom na tagubilin na kumukuha ng dalawang double-precision na source operand ay inaasahan ang una
operand sa 64-bit register X. Ang isa pang operand (o operand lamang ng unary
operation) ay ibinibigay sa custom na pagtuturo ng aritmetika na may hindi gaanong makabuluhan
kalahati sa source register src1 at ang pinaka makabuluhang kalahati sa src2. Isang kaugalian
ang pagtuturo na nagbabalik ng double-precision na resulta ay nagbabalik ng pinakamahalaga 32
bits sa destination register at ang kalahati sa 32-bit register Y. GCC
awtomatikong bumubuo ng mga kinakailangang pagkakasunud-sunod ng code upang isulat ang rehistro X at/o basahin
irehistro ang Y kapag ginamit ang double-precision floating-point na mga tagubilin.

fwrx
Sumulat src1 sa hindi bababa sa makabuluhang kalahati ng X at src2 sa pinaka makabuluhan
kalahati ng X.

fwry
Sumulat src1 sa Y.

frdxhi, frdxlo
Basahin ang pinakamarami o hindi bababa sa (ayon sa pagkakabanggit) makabuluhang kalahati ng X at itago ito patutunguhan.

frdy
Basahin ang halaga ng Y at iimbak ito sa patutunguhan.

Tandaan na maaari kang makakuha ng higit pang lokal na kontrol sa pagbuo ng custom na Nios II
mga tagubilin sa pamamagitan ng paggamit ng "target("custom-insn=N")" at "target("no-custom-insn")"
mga katangian ng function o pragma.

-mcustom-fpu-cfg=pangalan
Ang pagpipiliang ito ay nagbibigay-daan sa isang paunang natukoy, pinangalanang hanay ng mga custom na pag-encode ng pagtuturo (tingnan
-nakasanayan-insn sa itaas). Sa kasalukuyan, ang mga sumusunod na hanay ay tinukoy:

-mcustom-fpu-cfg=60-1 ay katumbas ng: -mcustom-fmuls=252 -mcustom-fadds=253
-mcustom-fsubs=254 -fsingle-precision-constant

-mcustom-fpu-cfg=60-2 ay katumbas ng: -mcustom-fmuls=252 -mcustom-fadds=253
-mcustom-fsubs=254 -mcustom-fdivs=255 -fsingle-precision-constant

-mcustom-fpu-cfg=72-3 ay katumbas ng: -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

Pasadyang mga takdang-aralin sa pagtuturo na ibinigay ng indibidwal -nakasanayan-insn= override ang mga opsyon
ang mga binigay ng -mcustom-fpu-cfg=, anuman ang pagkakasunud-sunod ng mga opsyon sa
command line.

Tandaan na maaari kang makakuha ng higit pang lokal na kontrol sa pagpili ng configuration ng FPU sa pamamagitan ng
gamit ang "target("custom-fpu-cfg=pangalan")" katangian ng function o pragma.

Ang mga karagdagang ito -m Available ang mga opsyon para sa target na Altera Nios II ELF (bare-metal):

-mhal
Link sa HAL BSP. Pinipigilan nito ang pag-link sa C runtime startup na ibinigay ng GCC
at termination code, at kadalasang ginagamit kasabay ng -msys-crt0= upang tukuyin
ang lokasyon ng kahaliling startup code na ibinigay ng HAL BSP.

-msmallc
Mag-link sa limitadong bersyon ng C library, -lsmallc, sa halip na Newlib.

-msys-crt0=startfile
startfile ay ang pangalan ng file ng startfile (crt0) na gagamitin kapag nagli-link. Ang pagpipiliang ito
ay kapaki-pakinabang lamang kasabay ng -mhal.

-msys-lib=systemlib
systemlib ay ang pangalan ng library ng library na nagbibigay ng mga low-level system call
kinakailangan ng C library, hal. "read" at "write". Karaniwang ginagamit ang opsyong ito
link sa isang library na ibinigay ng isang HAL BSP.

NVIDIA PTX Options

Ang mga opsyon na ito ay tinukoy para sa Nvidia PTX:

-m32
-m64
Bumuo ng code para sa 32-bit o 64-bit na ABI.

-mmainkernel
Link sa code para sa isang __main kernel. Ito ay para sa stand-alone sa halip na mag-offload
pagpapatupad

PDP-11 Options

Ang mga opsyong ito ay tinukoy para sa PDP-11:

-mfpu
Gumamit ng hardware FPP floating point. Ito ang default. (FIS floating point sa
Ang PDP-11/40 ay hindi suportado.)

-msoft-float
Huwag gumamit ng hardware floating point.

-mac0
Ibalik ang mga resulta ng floating-point sa ac0 (fr0 sa Unix assembler syntax).

-mno-ac0
Ibalik ang mga resulta ng floating-point sa memorya. Ito ang default.

-m40
Bumuo ng code para sa isang PDP-11/40.

-m45
Bumuo ng code para sa isang PDP-11/45. Ito ang default.

-m10
Bumuo ng code para sa isang PDP-11/10.

-mbcopy-built
Gumamit ng mga inline na pattern na "movmemhi" para sa pagkopya ng memorya. Ito ang default.

-mbcopy
Huwag gumamit ng inline na "movmemhi" na mga pattern para sa pagkopya ng memorya.

-mint16
-mno-int32
Gumamit ng 16-bit na "int". Ito ang default.

-mint32
-mno-int16
Gumamit ng 32-bit na "int".

-mfloat64
-mno-float32
Gumamit ng 64-bit na "float". Ito ang default.

-mfloat32
-mno-float64
Gumamit ng 32-bit na "float".

-mabshi
Gumamit ng pattern na "abshi2". Ito ang default.

-mno-abshi
Huwag gumamit ng pattern na "abshi2".

-mbranch-mahal
Kunwari mahal ang mga sangay. Ito ay para sa pag-eksperimento sa pagbuo ng code
lamang.

-mbranch-mura
Huwag magpanggap na ang mga sanga ay mahal. Ito ang default.

-munix-asm
Gumamit ng Unix assembler syntax. Ito ang default kapag na-configure para sa pdp11-*-bsd.

-mdec-asm
Gamitin ang DEC assembler syntax. Ito ang default kapag na-configure para sa anumang target na PDP-11
bukod sa pdp11-*-bsd.

picoChip Options

mga ito -m ang mga opsyon ay tinukoy para sa mga pagpapatupad ng picoChip:

-mae=ae_type
Itakda ang set ng pagtuturo, set ng rehistro, at mga parameter ng pag-iiskedyul ng pagtuturo para sa array
uri ng elemento ae_type. Mga sinusuportahang halaga para sa ae_type ay ANUMANG, MUL, at MAC.

-mae=SINO pumipili ng ganap na generic na uri ng AE. Ang code na nabuo gamit ang opsyong ito ay tumatakbo
sa alinman sa iba pang mga uri ng AE. Ang code ay hindi kasing episyente kung isasama
para sa isang partikular na uri ng AE, at ang ilang uri ng operasyon (hal., pagpaparami) ay hindi gumagana
maayos sa lahat ng uri ng AE.

-mae=MUL pumipili ng uri ng MUL AE. Ito ang pinakakapaki-pakinabang na uri ng AE para sa pinagsama-samang code,
at ito ang default.

-mae=MAC pumipili ng DSP-style MAC AE. Maaaring magdusa ang code na pinagsama-sama sa opsyong ito
mahinang pagganap ng byte (char) na pagmamanipula, dahil ang DSP AE ay hindi nagbibigay
suporta sa hardware para sa byte load/store.

-msymbol-as-address
Paganahin ang compiler na direktang gumamit ng pangalan ng simbolo bilang isang address sa isang load/store
pagtuturo, nang hindi muna ito nilo-load sa isang rehistro. Karaniwan, ang paggamit nito
ang opsyon ay bumubuo ng mas malalaking programa, na tumatakbo nang mas mabilis kaysa kapag hindi ginagamit ang opsyon.
Gayunpaman, nag-iiba-iba ang mga resulta sa bawat programa, kaya naiwan ito bilang opsyon ng user,
sa halip na permanenteng pinagana.

-mno-inefficient-babala
Hindi pinapagana ang mga babala tungkol sa pagbuo ng hindi mahusay na code. Ang mga babalang ito ay maaaring
nabuo, halimbawa, kapag nag-compile ng code na nagsasagawa ng mga operasyon sa memorya sa antas ng byte
sa uri ng MAC AE. Ang MAC AE ay walang suporta sa hardware para sa byte-level na memorya
mga operasyon, kaya lahat ng byte load/store ay dapat na synthesize mula sa word load/store
mga operasyon. Ito ay hindi epektibo at isang babala ang nabuo upang ipahiwatig na ikaw
dapat muling isulat ang code upang maiwasan ang mga pagpapatakbo ng byte, o upang i-target ang isang uri ng AE na mayroong
kinakailangang suporta sa hardware. Hindi pinapagana ng opsyong ito ang mga babalang ito.

PowerPC Options

Ang mga ito ay nakalista sa ilalim

RL78 Options

-msim
Mga link sa karagdagang target na library upang suportahan ang operasyon sa loob ng isang simulator.

-mmul=wala
-mmul=g13
-mmul=rl78
Tinutukoy ang uri ng suporta sa pagpaparami ng hardware na gagamitin. Ang default ay
wala, na gumagamit ng software multiplication functions. Ang g13 ang pagpipilian ay para sa
hardware multiply/divide peripheral lamang sa RL78/G13 target. Ang rl78 Ang opsyon ay
para sa karaniwang pagpaparami ng hardware na tinukoy sa RL78 software manual.

-m64bit-doble
-m32bit-doble
Gawing 64 bits ang "double" na uri ng data (-m64bit-doble) o 32 bits (-m32bit-doble)
sa laki. Ang default ay -m32bit-doble.

IBM RS / 6000 at PowerPC Options

mga ito -m ang mga opsyon ay tinukoy para sa IBM RS/6000 at 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
Ginagamit mo ang mga opsyong ito para tukuyin kung aling mga tagubilin ang available sa processor mo
ay gumagamit. Tinutukoy ang default na halaga ng mga opsyong ito kapag kino-configure ang GCC.
Tinutukoy ang -mcpu=cpu_type Ino-override ang detalye ng mga opsyong ito. Kami
inirerekomenda mong gamitin ang -mcpu=cpu_type opsyon kaysa sa mga opsyong nakalista sa itaas.

Tinutukoy -mpowerpc-gpopt nagbibigay-daan sa GCC na gamitin ang opsyonal na arkitektura ng PowerPC
mga tagubilin sa pangkat na Pangkalahatang Layunin, kabilang ang floating-point square root.
Tinutukoy -mpowerpc-gfxopt nagbibigay-daan sa GCC na gamitin ang opsyonal na arkitektura ng PowerPC
mga tagubilin sa pangkat ng Graphics, kasama ang floating-point na piliin.

Ang -mmfcrf pinapayagan ng opsyon ang GCC na bumuo ng paglipat mula sa field ng rehistro ng kondisyon
pagtuturo na ipinatupad sa POWER4 processor at iba pang mga processor na sumusuporta sa
Arkitektura ng PowerPC V2.01. Ang -mpopcntb pinapayagan ng opsyon ang GCC na bumuo ng popcount
at double-precision FP reciprocal estimate instruction na ipinatupad sa POWER5
processor at iba pang mga processor na sumusuporta sa arkitektura ng PowerPC V2.02. Ang
-mpopcntd pinapayagan ng opsyon ang GCC na buuin ang pagtuturo ng popcount na ipinatupad sa
POWER7 processor at iba pang processor na sumusuporta sa PowerPC V2.06 architecture.
Ang -mfprnd Binibigyang-daan ng opsyon ang GCC na bumuo ng FP round sa integer na mga tagubilin
ipinatupad sa POWER5+ processor at iba pang processor na sumusuporta sa PowerPC
V2.03 na arkitektura. Ang -mcmpb Binibigyang-daan ng opsyon ang GCC na bumuo ng mga compare byte
pagtuturo na ipinatupad sa POWER6 processor at iba pang mga processor na sumusuporta sa
Arkitektura ng PowerPC V2.05. Ang -mmfpgpr pinapayagan ng opsyon ang GCC na bumuo ng FP move
sa/mula sa pangkalahatang layunin na mga tagubilin sa pagpaparehistro na ipinatupad sa POWER6X processor at
iba pang mga processor na sumusuporta sa pinalawig na arkitektura ng PowerPC V2.05. Ang -mhard-dfp
Binibigyang-daan ng opsyon ang GCC na buuin ang decimal floating-point na mga tagubilin na ipinatupad sa
ilang POWER processor.

Ang -mpowerpc64 pinapayagan ng opsyon ang GCC na bumuo ng karagdagang 64-bit na mga tagubilin na
ay matatagpuan sa buong arkitektura ng PowerPC64 at para ituring ang mga GPR bilang 64-bit, doubleword
dami. Nagde-default ang GCC sa -mno-powerpc64.

-mcpu=cpu_type
Itakda ang uri ng arkitektura, paggamit ng rehistro, at mga parameter ng pag-iiskedyul ng pagtuturo
Tipo ng makina cpu_type. Mga sinusuportahang halaga para sa cpu_type ay 401, 403, 405, 405fp, 440,
440fp, 464, 464fp, 476, 476fp, 505, 601, 602, 603, 603e, 604, 604e, 620, 630, 740,
7400, 7450, 750, 801, 821, 823, 860, 970, 8540, a2, e300c2, e300c3, e500mc, e500mc64,
e5500, e6500, ec603e, G3, G4, G5, titan, power3, power4, power5, kapangyarihan5+, power6,
kapangyarihan6x, power7, power8, kapangyarihan pc, powerpc64, powerpc64le, at rs64.

-mcpu=powerpc, -mcpu=powerpc64, at -mcpu=powerpc64le tukuyin ang purong 32-bit na PowerPC
(alinman sa endian), 64-bit na malaking endian na PowerPC at 64-bit na maliit na endian na PowerPC
mga uri ng makina ng arkitektura, na may naaangkop, generic na modelo ng processor na ipinapalagay para sa
mga layunin ng pag-iskedyul.

Ang iba pang mga opsyon ay tumutukoy sa isang partikular na processor. Nabuo ang code sa ilalim ng mga opsyong iyon
pinakamahusay na tumatakbo sa processor na iyon, at maaaring hindi tumakbo sa iba.

Ang -mcpu awtomatikong paganahin o huwag paganahin ang mga sumusunod na opsyon:

-maltivec -mfprnd -mhard-float -mmfcrf -marami -mpopcntb -mpopcntd -mpowerpc64
-mpowerpc-gpopt -mpowerpc-gfxopt -msingle-float -mdouble-float -msimple-fpu -mstring
-mmulhw -mdlmzb -mmfpgpr -mvsx -mcrypto -mdirect-move -mpower8-fusion
-mpower8-vector -mquad-memorya -mquad-memory-atomic

Ang mga partikular na opsyon na itinakda para sa anumang partikular na CPU ay nag-iiba sa pagitan ng mga bersyon ng compiler,
depende sa kung anong setting ang tila gumagawa ng pinakamainam na code para sa CPU na iyon; hindi ito
kinakailangang sumasalamin sa aktwal na mga kakayahan ng hardware. Kung nais mong magtakda ng isang
indibidwal na opsyon sa isang partikular na halaga, maaari mong tukuyin ito pagkatapos ng -mcpu pagpipilian,
gaya ng -mcpu=970 -mno-altivec.

Sa AIX, ang -maltivec at -mpowerpc64 ang mga opsyon ay hindi pinagana o hindi pinagana ng -mcpu
opsyon sa kasalukuyan dahil walang ganap na suporta ang AIX para sa mga opsyong ito. Maaari mong
paganahin pa rin o huwag paganahin ang mga ito nang paisa-isa kung sigurado kang gagana ito sa iyong
kapaligiran.

-mtune=cpu_type
Itakda ang mga parameter ng pag-iiskedyul ng pagtuturo para sa uri ng makina cpu_type, ngunit huwag itakda
ang uri ng arkitektura o paggamit ng rehistro, bilang -mcpu=cpu_type ginagawa. Ang parehong mga halaga para sa
cpu_type ay ginagamit para sa -mtune tulad ng -mcpu. Kung pareho ang tinukoy, nabuo ang code
gumagamit ng arkitektura at mga rehistro na itinakda ni -mcpu, ngunit ang mga parameter ng pag-iiskedyul na itinakda ni
-mtune.

-mcmodel=maliit
Bumuo ng PowerPC64 code para sa maliit na modelo: Ang TOC ay limitado sa 64k.

-mcmodel=medium
Bumuo ng PowerPC64 code para sa medium na modelo: Maaaring tapos na ang TOC at iba pang static na data
sa kabuuang sukat na 4G.

-mcmodel=malaki
Bumuo ng PowerPC64 code para sa malaking modelo: Maaaring hanggang 4G ang laki ng TOC. Iba pa
ang data at code ay limitado lamang ng 64-bit address space.

-maltivec
-mno-altivec
Bumuo ng code na gumagamit ng (hindi gumagamit) ng mga tagubiling AltiVec, at paganahin din ang paggamit
ng mga built-in na function na nagbibigay-daan sa mas direktang pag-access sa set ng pagtuturo ng AltiVec.
Maaaring kailanganin mo ring itakda -mabi=altivec upang ayusin ang kasalukuyang ABI sa AltiVec ABI
mga pagpapahusay.

Kailan -maltivec ay ginagamit, sa halip na -maltivec=le or -maltivec=be, ang pagkakasunud-sunod ng elemento
para sa Altivec intrinsics gaya ng "vec_splat", "vec_extract", at "vec_insert" na tugma
pagkakasunud-sunod ng elemento ng array na naaayon sa endianness ng target. Iyon ay, elemento
Kinikilala ng zero ang pinakakaliwang elemento sa isang vector register kapag nagta-target ng isang big-endian
platform, at kinikilala ang pinakakanang elemento sa isang vector register kapag nagta-target ng a
maliit na endian na plataporma.

-maltivec=be
Bumuo ng mga tagubilin sa Altivec gamit ang pagkakasunud-sunod ng elemento ng malaking-endian, hindi alintana kung
ang target ay malaki- o maliit na-endian. Ito ang default kapag nagta-target ng big-endian
platform.

Ang pagkakasunud-sunod ng elemento ay ginagamit upang bigyang-kahulugan ang mga numero ng elemento sa Altivec intrinsics tulad ng
"vec_splat", "vec_extract", at "vec_insert". Bilang default, tumutugma ang mga elemento ng array na ito
pagkakasunud-sunod na naaayon sa endianness para sa target.

-maltivec=le
Bumuo ng mga tagubiling Altivec gamit ang little-endian na pagkakasunud-sunod ng elemento, hindi alintana kung
ang target ay malaki- o maliit na-endian. Ito ang default kapag nagta-target ng kaunti-
platform ng endian. Kasalukuyang binabalewala ang opsyong ito kapag nagta-target ng big-endian
platform.

Ang pagkakasunud-sunod ng elemento ay ginagamit upang bigyang-kahulugan ang mga numero ng elemento sa Altivec intrinsics tulad ng
"vec_splat", "vec_extract", at "vec_insert". Bilang default, tumutugma ang mga elemento ng array na ito
pagkakasunud-sunod na naaayon sa endianness para sa target.

-mvrsave
-mno-vrsave
Bumuo ng mga tagubilin sa VRSAVE kapag bumubuo ng AltiVec code.

-mgen-cell-microcode
Bumuo ng mga tagubilin sa Cell microcode.

-mwarn-cell-microcode
Magbabala kapag may inilabas na pagtuturo ng Cell microcode. Isang halimbawa ng Cell microcode
Ang pagtuturo ay isang variable shift.

-msecure-plt
Bumuo ng code na nagbibigay-daan ld at ld.so para bumuo ng mga executable at shared library na may
non-executable ".plt" at ".got" na mga seksyon. Ito ay isang PowerPC 32-bit SYSV ABI na opsyon.

-mbss-plt
Bumuo ng code na gumagamit ng BSS na ".plt" na seksyon na ld.so pinunan, at nangangailangan ng ".plt"
at mga seksyong ".got" na parehong nasusulat at naisasagawa. Ito ay isang PowerPC 32-bit
SYSV ABI na opsyon.

-misel
-mno-isel
Ang switch na ito ay nagbibigay-daan o hindi pinapagana ang pagbuo ng mga tagubilin ng ISEL.

-misel=Oo hindi
Ang switch na ito ay hindi na ginagamit. Gamitin -misel at -mno-isel sa halip.

-mspe
-mno-spe
Ang switch na ito ay nagbibigay-daan o hindi pinapagana ang pagbuo ng mga tagubilin ng SPE simd.

-may kapansanan
-mno-pares
Ang switch na ito ay nagbibigay-daan o hindi pinapagana ang pagbuo ng PAIRED simd na mga tagubilin.

-mspe=Oo hindi
Ang opsyon na ito ay hindi na ginagamit. Gamitin -mspe at -mno-spe sa halip.

-mvsx
-mno-vsx
Bumuo ng code na gumagamit ng (hindi gumagamit) ng mga tagubiling vector/scalar (VSX), at gayundin
paganahin ang paggamit ng mga built-in na function na nagbibigay-daan sa mas direktang pag-access sa VSX
Listahan ng dapat gagawin.

-mcrypto
-mno-crypto
I-enable ang paggamit (disable) ng mga built-in na function na nagbibigay-daan sa direktang access sa
cryptographic na mga tagubilin na idinagdag sa bersyon 2.07 ng PowerPC ISA.

-mdirect-move
-mno-direct-move
Bumuo ng code na gumagamit (hindi gumagamit) ng mga tagubilin upang ilipat ang data sa pagitan ng
general purpose registers at ang vector/scalar (VSX) registers na idinagdag sa
bersyon 2.07 ng PowerPC ISA.

-mpower8-fusion
-mno-power8-fusion
Bumuo ng code na nagpapanatili (hindi nagpapanatili) ng ilang integer na operasyon na katabi upang ang
ang mga tagubilin ay maaaring pagsamahin nang magkasama sa power8 at mamaya na mga processor.

-mpower8-vector
-mno-power8-vector
Bumuo ng code na gumagamit ng (hindi gumagamit) ng vector at scalar na mga tagubilin noon
idinagdag sa bersyon 2.07 ng PowerPC ISA. Paganahin din ang paggamit ng mga built-in na function
na nagbibigay-daan sa mas direktang pag-access sa mga tagubilin sa vector.

-mquad-memorya
-mno-quad-memory
Bumuo ng code na gumagamit ng (hindi gumagamit) ng non-atomic quad word memory na mga tagubilin.
Ang -mquad-memorya ang opsyon ay nangangailangan ng paggamit ng 64-bit mode.

-mquad-memory-atomic
-mno-quad-memory-atomic
Bumuo ng code na gumagamit (hindi gumagamit) ng mga tagubilin sa memorya ng salita ng atomic quad. Ang
-mquad-memory-atomic ang opsyon ay nangangailangan ng paggamit ng 64-bit mode.

-mupper-regs-df
-mno-upper-regs-df
Bumuo ng code na gumagamit (hindi gumagamit) ng scalar double precision na mga tagubilin na iyon
i-target ang lahat ng 64 na rehistro sa vector/scalar floating point na set ng rehistro
idinagdag sa bersyon 2.06 ng PowerPC ISA. -mupper-regs-df ay naka-on bilang default kung
gumamit ka ng alinman sa -mcpu=kapangyarihan7, -mcpu=kapangyarihan8, O -mvsx mga pagpipilian.

-mupper-regs-sf
-mno-upper-regs-sf
Bumuo ng code na gumagamit (hindi gumagamit) ng scalar solong katumpakan na mga tagubilin na iyon
i-target ang lahat ng 64 na rehistro sa vector/scalar floating point na set ng rehistro
idinagdag sa bersyon 2.07 ng PowerPC ISA. -mupper-regs-sf ay naka-on bilang default kung
gamitin mo ang alinman sa -mcpu=kapangyarihan8 or -mpower8-vector mga pagpipilian.

-mupper-regs
-mno-upper-regs
Bumuo ng code na gumagamit (hindi gumagamit) ng mga tagubiling scalar na nagta-target sa lahat ng 64
nagrerehistro sa vector/scalar floating point register set, depende sa modelo ng
ang makina.

Kung ang -mno-upper-regs ginagamit ang opsyon, pinapatay nito pareho -mupper-regs-sf at
-mupper-regs-df mga pagpipilian.

-mfloat-gprs=oo/single/doble/hindi
-mfloat-gprs
Ang switch na ito ay nagbibigay-daan o hindi pinapagana ang pagbuo ng mga floating-point na operasyon sa
pangkalahatang layunin na mga rehistro para sa mga arkitektura na sumusuporta dito.

Ang argumento oo or solong nagbibigay-daan sa paggamit ng single-precision floating-point
operasyon.

Ang argumento double nagbibigay-daan sa paggamit ng single at double-precision floating-point
operasyon.

Ang argumento hindi hindi pinapagana ang mga pagpapatakbo ng floating-point sa mga rehistro ng pangkalahatang layunin.

Ang opsyong ito ay kasalukuyang available lamang sa MPC854x.

-m32
-m64
Bumuo ng code para sa 32-bit o 64-bit na kapaligiran ng Darwin at SVR4 na mga target (kabilang ang
GNU/Linux). Ang 32-bit na kapaligiran ay nagtatakda ng int, mahaba at pointer sa 32 bits at
bumubuo ng code na tumatakbo sa anumang variant ng PowerPC. Ang 64-bit na kapaligiran ay nagtatakda sa
32 bits at mahaba at pointer sa 64 bits, at bumubuo ng code para sa PowerPC64, tulad ng para sa
-mpowerpc64.

-mfull-toc
-mno-fp-in-toc
-mno-sum-in-toc
-mminimal-toc
Baguhin ang pagbuo ng TOC (Table Of Contents), na nilikha para sa bawat
maipapatupad na file. Ang -mfull-toc ang opsyon ay pinili bilang default. Sa kasong iyon, GCC
naglalaan ng kahit isang entry sa TOC para sa bawat natatanging di-awtomatikong variable na reference sa
iyong programa. Naglalagay din ang GCC ng mga floating-point constant sa TOC. Gayunpaman, lamang
16,384 entries ang available sa TOC.

Kung nakatanggap ka ng mensahe ng error sa linker na nagsasabing umapaw ka na sa available
TOC space, maaari mong bawasan ang dami ng TOC space na ginamit sa -mno-fp-in-toc at
-mno-sum-in-toc mga pagpipilian. -mno-fp-in-toc pinipigilan ang GCC na maglagay ng floating-point
constants sa TOC at -mno-sum-in-toc pinipilit ang GCC na bumuo ng code para kalkulahin ang
kabuuan ng isang address at isang pare-pareho sa oras ng pagtakbo sa halip na ilagay ang kabuuan na iyon sa TOC.
Maaari mong tukuyin ang isa o pareho sa mga opsyong ito. Ang bawat isa ay nagiging sanhi ng GCC upang makagawa ng napaka
bahagyang mas mabagal at mas malaking code sa gastos ng pagtitipid sa espasyo ng TOC.

Kung maubusan ka pa rin ng espasyo sa TOC kahit na tinukoy mo ang dalawang opsyong ito,
tukuyin -mminimal-toc sa halip. Ang opsyon na ito ay nagiging sanhi ng GCC na gumawa lamang ng isang TOC entry para sa
bawat file. Kapag tinukoy mo ang opsyong ito, gagawa ang GCC ng code na mas mabagal at mas malaki
ngunit gumagamit ng napakaliit na espasyo ng TOC. Maaaring naisin mong gamitin lamang ang opsyong ito sa
mga file na naglalaman ng hindi gaanong madalas na-execute na code.

-maix64
-maix32
I-enable ang 64-bit AIX ABI at calling convention: 64-bit pointer, 64-bit "long" type, at
ang imprastraktura na kailangan upang suportahan sila. Tinutukoy -maix64 nagpapahiwatig -mpowerpc64,
habang -maix32 hindi pinapagana ang 64-bit ABI at nagpapahiwatig -mno-powerpc64. Nagde-default ang GCC sa
-maix32.

-mxl-compat
-mno-xl-compat
Gumawa ng code na mas malapit sa IBM XL compiler semantics kapag gumagamit ng AIX-
katugmang ABI. Ipasa ang mga floating-point na argumento sa mga prototype na function na lampas sa
irehistro ang save area (RSA) sa stack bilang karagdagan sa mga argumento na FPR. Wag umasa
na ang pinakamahalagang double sa 128-bit long double value ay wastong bilugan kapag
paghahambing ng mga halaga at pag-convert sa doble. Gumamit ng mga pangalan ng simbolo ng XL para sa mahabang doble
pagsuporta sa mga gawain.

Ang AIX calling convention ay pinalawig ngunit hindi paunang naidokumento upang mahawakan ang isang
nakakubli K&R C kaso ng pagtawag ng isang function na kumukuha ng address ng mga argumento nito
mas kaunting mga argumento kaysa sa ipinahayag. Ina-access ng mga compiler ng IBM XL ang mga floating-point na argumento na
hindi magkasya sa RSA mula sa stack kapag ang isang subroutine ay naipon nang wala
pag-optimize. Dahil ang palaging pag-iimbak ng mga floating-point na argumento sa stack ay
hindi mabisa at bihirang kailangan, ang opsyong ito ay hindi pinagana bilang default at ito lang
kinakailangan kapag tumatawag sa mga subroutine na pinagsama-sama ng mga compiler ng IBM XL nang walang pag-optimize.

-mpe
Suporta IBM RS / 6000 SP Pagpaparis kapaligiran (PE). Mag-link ng application na isinulat para gamitin
pagpasa ng mensahe na may espesyal na startup code upang paganahin ang application na tumakbo. Ang
ang sistema ay dapat may naka-install na PE sa karaniwang lokasyon (/usr/lpp/ppe.poe/), o ang
panoorin file ay dapat na ma-override ng -specs= opsyon upang tukuyin ang naaangkop
lokasyon ng direktoryo. Ang Parallel Environment ay hindi sumusuporta sa mga thread, kaya ang -mpe
opsyon at ang -pthread hindi tugma ang opsyon.

-malign-natural
-malign-power
Sa AIX, 32-bit Darwin, at 64-bit PowerPC GNU/Linux, ang opsyon -malign-natural
override ang ABI-defined alignment ng mas malalaking uri, gaya ng floating-point doubles,
sa kanilang natural na sukat na nakabatay sa hangganan. Ang pagpipilian -malign-power inutusan ang GCC na
sundin ang mga panuntunan sa alignment na tinukoy ng ABI. Nagde-default ang GCC sa karaniwang alignment
tinukoy sa ABI.

Sa 64-bit na Darwin, ang natural na pagkakahanay ay ang default, at -malign-power Hindi
suportado.

-msoft-float
-mhard-float
Bumuo ng code na hindi gumagamit (gumagamit) ng floating-point register set. Software
Ang floating-point emulation ay ibinibigay kung gagamitin mo ang -msoft-float opsyon, at ipasa ang
opsyon sa GCC kapag nagli-link.

-msingle-float
-mdouble-float
Bumuo ng code para sa single- o double-precision floating-point operations.
-mdouble-float nagpapahiwatig -msingle-float.

-msimple-fpu
Huwag bumuo ng "sqrt" at "div" na mga tagubilin para sa hardware na floating-point unit.

-mfpu=pangalan
Tukuyin ang uri ng floating-point unit. Mga wastong halaga para sa pangalan ay sp_lite (katumbas ng
-msingle-float -msimple-fpu), dp_lite (katumbas ng -mdouble-float -msimple-fpu),
sp_full (katumbas ng -msingle-float), At dp_full (katumbas ng -mdouble-float).

-mxilinx-fpu
Magsagawa ng mga pag-optimize para sa floating-point unit sa Xilinx PPC 405/440.

-marami
-mno-marami
Bumuo ng code na gumagamit (hindi gumagamit) ng pag-load ng maraming mga tagubilin sa salita at ang
mag-imbak ng maraming mga tagubilin sa salita. Ang mga tagubiling ito ay nabuo bilang default sa
POWER system, at hindi nabuo sa PowerPC system. Huwag gamitin -marami sa maliit na-
endian PowerPC system, dahil hindi gumagana ang mga tagubiling iyon kapag naka-in ang processor
little-endian mode. Ang mga pagbubukod ay PPC740 at PPC750 na nagpapahintulot sa mga ito
mga tagubilin sa little-endian mode.

-mstring
-mno-kuwerdas
Bumuo ng code na gumagamit (hindi gumagamit) ng mga tagubilin sa pag-load ng string at sa tindahan
string na mga tagubilin sa salita upang i-save ang maramihang mga rehistro at gumawa ng maliliit na block moves. Ang mga ito
Ang mga tagubilin ay nabuo bilang default sa mga POWER system, at hindi nabuo sa PowerPC
mga sistema. Huwag gamitin -mstring sa little-endian PowerPC system, dahil ang mga iyon
ang mga tagubilin ay hindi gumagana kapag ang processor ay nasa little-endian mode. Ang mga eksepsiyon
ay PPC740 at PPC750 na nagpapahintulot sa mga tagubiling ito sa little-endian mode.

-mupdate
-mno-update
Bumuo ng code na gumagamit (hindi gumagamit) ng mga tagubilin sa pag-load o tindahan na nag-a-update sa
base register sa address ng kinakalkula na lokasyon ng memorya. Ang mga tagubiling ito
ay nabuo bilang default. Kung gagamit ka -mno-update, may maliit na bintana sa pagitan ng
oras na ang stack pointer ay na-update at ang address ng nakaraang frame ay
naka-imbak, na nangangahulugan ng code na naglalakad sa stack frame sa mga interrupt o maaaring signal
makakuha ng sirang data.

-mavoid-indexed-address
-mno-avoid-indexed-addresses
Bumuo ng code na sumusubok na maiwasan (hindi maiwasan) ang paggamit ng naka-index na load o tindahan
mga tagubilin. Ang mga tagubiling ito ay maaaring magkaroon ng parusa sa pagganap sa mga processor ng Power6
sa ilang partikular na sitwasyon, gaya ng pagtapak sa malalaking hanay na tumatawid sa 16M
hangganan. Ang opsyong ito ay pinagana bilang default kapag tina-target ang Power6 at hindi pinagana
kung hindi man.

-mfused-baliw
-mno-fused-madd
Bumuo ng code na gumagamit (hindi gumagamit) ng floating-point na multiply at maipon
mga tagubilin. Ang mga tagubiling ito ay nabuo bilang default kung ang hardware na lumulutang na punto
Ginagamit. Ang nakadepende sa makina -mfused-baliw ang opsyon ay nakamapa na ngayon sa makina-
malaya -ffp-contract=mabilis pagpipilian, at -mno-fused-madd ay nakamapa sa
-ffp-contract=off.

-mmulhw
-mno-mulhw
Bumuo ng code na gumagamit (hindi gumagamit) ng kalahating salita na multiply at multiply-accumulate
mga tagubilin sa mga processor ng IBM 405, 440, 464 at 476. Ang mga tagubiling ito ay
nabuo bilang default kapag tina-target ang mga processor na iyon.

-mdlmzb
-mno-dlmzb
Bumuo ng code na gumagamit (hindi gumagamit) ng string-search dlmzb pagtuturo sa IBM
405, 440, 464 at 476 na mga processor. Ang pagtuturo na ito ay nabuo bilang default kapag
pag-target sa mga processor na iyon.

-mno-bit-align
-mbit-align
Sa System V.4 at mga naka-embed na PowerPC system ay hindi (gumagawa) ng mga istruktura at unyon
na naglalaman ng mga bit-field na ihahanay sa base na uri ng bit-field.

Halimbawa, bilang default, isang istraktura na naglalaman ng walang anuman kundi 8 "unsigned" bit-field ng
ang haba 1 ay nakahanay sa isang 4-byte na hangganan at may sukat na 4 na byte. Sa pamamagitan ng paggamit
-mno-bit-align, ang istraktura ay nakahanay sa isang 1-byte na hangganan at 1 byte ang laki.

-mno-strict-align
-mstrict-align
Sa System V.4 at mga naka-embed na PowerPC system ay hindi (ginagawa) ipagpalagay na hindi nakahanay na memorya
ang mga sanggunian ay pinangangasiwaan ng system.

-malilipat
-mno-relocatable
Bumuo ng code na nagpapahintulot (hindi pinapayagan) ang isang static na maipapatupad na mailipat sa a
ibang address sa oras ng pagtakbo. Ang isang simpleng naka-embed na PowerPC system loader ay dapat
ilipat ang buong nilalaman ng ".got2" at 4-byte na lokasyon na nakalista sa ".fixup"
seksyon, isang talahanayan ng mga 32-bit na address na nabuo ng opsyong ito. Para gumana ito, lahat
ang mga bagay na pinagsama-sama ay dapat na pinagsama-sama -malilipat or -mrelocatable-lib.
-malilipat ini-align ng code ang stack sa isang 8-byte na hangganan.

-mrelocatable-lib
-mno-relocatable-lib
katulad -malilipat, -mrelocatable-lib bumubuo ng seksyong ".fixup" upang payagan ang static
mga executable na ililipat sa oras ng pagtakbo, ngunit -mrelocatable-lib hindi gumagamit ng
mas maliit na stack alignment ng -malilipat. Mga bagay na pinagsama-sama sa -mrelocatable-lib maaari
maiugnay sa mga bagay na pinagsama-sama sa anumang kumbinasyon ng -malilipat mga pagpipilian.

-mno-toc
-mtoc
Sa System V.4 at mga naka-embed na PowerPC system ay hindi (ginagawa) ipagpalagay na ang register 2 ay naglalaman
isang pointer sa isang pandaigdigang lugar na tumuturo sa mga address na ginamit sa programa.

-maliit
-mlittle-endian
Sa System V.4 at naka-embed na PowerPC system ay nag-compile ng code para sa processor sa maliit na-
endian mode. Ang -mlittle-endian ang pagpipilian ay pareho sa -maliit.

-malaki
-big-endian
Sa System V.4 at naka-embed na PowerPC system ay nag-compile ng code para sa processor sa malaking-
endian mode. Ang -big-endian ang pagpipilian ay pareho sa -malaki.

-mdynamic-no-pic
Sa Darwin at Mac OS X system, i-compile ang code para hindi ito mailipat, ngunit iyon
ang mga panlabas na sanggunian nito ay maaaring ilipat. Ang resultang code ay angkop para sa
mga application, ngunit hindi nakabahaging mga aklatan.

-msingle-pic-base
Tratuhin ang rehistro na ginamit para sa PIC addressing bilang read-only, sa halip na i-load ito sa
prologue para sa bawat function. Ang runtime system ang may pananagutan sa pagsisimula nito
magparehistro na may naaangkop na halaga bago magsimula ang pagpapatupad.

-prioritize-restricted-insns=karapatang mauna
Kinokontrol ng opsyong ito ang priyoridad na itinalaga sa dispatch-slot restricted
mga tagubilin sa panahon ng ikalawang pass sa pag-iskedyul. Ang argumento karapatang mauna kumukuha ng halaga
0, 1, O 2 na magtalaga ng hindi, pinakamataas, o pangalawa sa pinakamataas (ayon sa pagkakabanggit) ng priyoridad sa
dispatch-slot restricted instructions.

-msched-costly-dep=dependence_type
Kinokontrol ng opsyong ito kung aling mga dependence ang itinuturing na magastos ng target habang
pag-iiskedyul ng pagtuturo. Ang argumento dependence_type kumukuha ng isa sa mga sumusunod
mga halaga:

hindi Walang pagtitiwala ay magastos.

lahat Lahat ng dependence ay magastos.

true_store_to_load
Ang isang tunay na pagtitiwala mula sa tindahan hanggang sa pagkarga ay magastos.

store_to_load
Ang anumang pag-asa mula sa tindahan hanggang sa pag-load ay magastos.

numero
Anumang pag-asa kung saan ang latency ay mas malaki kaysa o katumbas nito numero ay magastos.

-minsert-sched-nops=pamamaraan
Kinokontrol ng opsyong ito kung aling NOP insertion scheme ang ginagamit sa ikalawang pag-iskedyul
pumasa. Ang argumento pamamaraan tumatagal ng isa sa mga sumusunod na halaga:

hindi Huwag maglagay ng mga NOP.

pad Pad na may NOPs anumang dispatch group na may mga bakanteng issue slots, ayon sa
pagpapangkat ng scheduler.

regroup_exact
Ipasok ang mga NOP upang pilitin ang mga mahal na umaasa na ins sa magkahiwalay na grupo. Ipasok nang eksakto
kasing daming NOP kung kinakailangan para pilitin ang isang insn sa isang bagong grupo, ayon sa tinantyang
pagpapangkat ng processor.

numero
Ipasok ang mga NOP upang pilitin ang mga mahal na umaasa na ins sa magkahiwalay na grupo. Ipasok numero
Mga NOP upang pilitin ang isang insn sa isang bagong grupo.

-mcall-sysv
Sa System V.4 at naka-embed na PowerPC system ay nag-compile ng code gamit ang mga convention sa pagtawag na
sumunod sa draft noong Marso 1995 ng System V Application Binary Interface, PowerPC
suplemento ng processor. Ito ang default maliban kung na-configure mo ang GCC gamit
powerpc-*-eabiaix.

-mcall-sysv-eabi
-mcall-eabi
Tukuyin ang pareho -mcall-sysv at -meabi mga pagpipilian.

-mcall-sysv-noeabi
Tukuyin ang pareho -mcall-sysv at -mno-eabi mga pagpipilian.

-mcall-aixdesc
Sa System V.4 at mga naka-embed na PowerPC system ay nag-compile ng code para sa AIX operating system.

-mcall-linux
Sa System V.4 at naka-embed na PowerPC system ay nag-compile ng code para sa Linux-based na GNU
system.

-mcall-freebsd
Sa System V.4 at mga naka-embed na PowerPC system ay nag-compile ng code para sa pagpapatakbo ng FreeBSD
system.

-mcall-netbsd
Sa System V.4 at mga naka-embed na PowerPC system ay nag-compile ng code para sa pagpapatakbo ng NetBSD
system.

-mcall-openbsd
Sa System V.4 at naka-embed na PowerPC system ay nag-compile ng code para sa OpenBSD operating
system.

-maix-struct-return
Ibalik ang lahat ng istruktura sa memorya (tulad ng tinukoy ng AIX ABI).

-msvr4-struct-return
Ibalik ang mga istrukturang mas maliit sa 8 byte sa mga rehistro (tulad ng tinukoy ng SVR4 ABI).

-mabi=abi-type
Palawakin ang kasalukuyang ABI gamit ang isang partikular na extension, o alisin ang naturang extension. Wasto
ang mga halaga ay altivec, walang-altivec, spe, walang-spe, ibmlongdouble, ieeelongdouble, elfv1,
elfv2.

-mabi=spe
Palawakin ang kasalukuyang ABI gamit ang mga extension ng SPE ABI. Hindi nito binabago ang default na ABI,
sa halip, idinaragdag nito ang mga extension ng SPE ABI sa kasalukuyang ABI.

-mabi=no-spe
Huwag paganahin ang mga extension ng Book-E SPE ABI para sa kasalukuyang ABI.

-mabi=ibmlongdouble
Baguhin ang kasalukuyang ABI para gumamit ng IBM extended-precision long double. Ito ay isang PowerPC
32-bit na opsyon sa SYSV ABI.

-mabi=ieeelongdouble
Baguhin ang kasalukuyang ABI para gumamit ng IEEE extended-precision long double. Ito ay isang PowerPC
32-bit na opsyon sa Linux ABI.

-mabi=elfv1
Baguhin ang kasalukuyang ABI para magamit ang ELFv1 ABI. Ito ang default na ABI para sa big-endian
PowerPC 64-bit na Linux. Ang pag-override sa default na ABI ay nangangailangan ng espesyal na suporta sa system at
ay malamang na mabigo sa mga kamangha-manghang paraan.

-mabi=elfv2
Baguhin ang kasalukuyang ABI para magamit ang ELFv2 ABI. Ito ang default na ABI para sa maliit na-
endian PowerPC 64-bit Linux. Ang pag-override sa default na ABI ay nangangailangan ng espesyal na system
suporta at malamang na mabigo sa mga kamangha-manghang paraan.

-prototype
-mno-prototype
Sa System V.4 at naka-embed na PowerPC system ay ipinapalagay na ang lahat ng mga tawag sa variable na argumento
ang mga function ay maayos na na-prototype. Kung hindi, ang compiler ay dapat magpasok ng isang tagubilin
bago ang bawat di-prototyped na tawag upang itakda o i-clear ang bit 6 ng condition code register
("CR") upang isaad kung ang mga floating-point value ay naipasa sa floating-point
nagrerehistro kung sakaling ang function ay kumuha ng mga variable na argumento. Sa -prototype, mga tawag lang
sa prototyped variable argument function set o i-clear ang bit.

-msim
Sa mga naka-embed na PowerPC system, ipagpalagay na ang startup module ay tinatawag sim-crt0.o at
na ang mga karaniwang C library ay libsim.a at libc.a. Ito ang default para sa
powerpc-*-eabisim mga kumpigurasyon.

-mmvme
Sa mga naka-embed na PowerPC system, ipagpalagay na ang startup module ay tinatawag crt0.o at ang
ang mga karaniwang C library ay libmvme.a at libc.a.

-mga baliw
Sa mga naka-embed na PowerPC system, ipagpalagay na ang startup module ay tinatawag crt0.o at ang
ang mga karaniwang C library ay libads.a at libc.a.

-myellowknife
Sa mga naka-embed na PowerPC system, ipagpalagay na ang startup module ay tinatawag crt0.o at ang
ang mga karaniwang C library ay libyk.a at libc.a.

-mvxworks
Sa System V.4 at mga naka-embed na PowerPC system, tukuyin na nagko-compile ka para sa a
Sistema ng VxWorks.

-memb
Sa mga naka-embed na PowerPC system, itakda ang "PPC_EMB" bit sa ELF flags header upang isaad
na eabi ginagamit ang mga pinahabang relokasyon.

-meabi
-mno-eabi
Sa System V.4 at naka-embed na PowerPC system ay (hindi) sumusunod sa Naka-embed
Applications Binary Interface (EABI), na isang hanay ng mga pagbabago sa System
Mga pagtutukoy ng V.4. Pagpili -meabi nangangahulugan na ang stack ay nakahanay sa isang 8-byte
hangganan, ang isang function na "__eabi" ay tinatawag mula sa "pangunahing" upang i-set up ang kapaligiran ng EABI,
at ang -msdata Maaaring gamitin ng opsyon ang parehong "r2" at "r13" upang tumuro sa dalawang magkahiwalay na maliit na data
mga lugar. Pagpili -mno-eabi nangangahulugan na ang stack ay nakahanay sa isang 16-byte na hangganan, hindi
EABI initialization function ay tinatawag mula sa "pangunahing", at ang -msdata ginagamit lamang ang opsyon
"r13" upang tumuro sa isang maliit na lugar ng data. Ang -meabi naka-on ang opsyon bilang default kung ikaw
na-configure ang GCC gamit ang isa sa powerpc*-*-eabi* mga pagpipilian.

-msdata=eabi
Sa System V.4 at naka-embed na PowerPC system, maglagay ng maliit na initialized na "const" global at
static na data sa seksyong ".sdata2", na itinuturo ng rehistrong "r2". Maglagay ng maliit
inisyal na hindi "const" na global at static na data sa seksyong ".sdata", na
itinuro ng rehistrong "r13". Maglagay ng maliit na hindi nasimulang global at static na data sa
".sbss" na seksyon, na katabi ng ".sdata" na seksyon. Ang -msdata=eabi opsyon
ay hindi tugma sa -malilipat pagpipilian Ang -msdata=eabi itinatakda din ng opsyon ang
-memb pagpipilian.

-msdata=sysv
Sa System V.4 at mga naka-embed na PowerPC system, maglagay ng maliit na global at static na data sa
".sdata" na seksyon, na itinuturo ng rehistrong "r13". Ilagay ang maliit na uninitialized
global at static na data sa seksyong ".sbss", na katabi ng ".sdata"
seksyon Ang -msdata=sysv ang opsyon ay hindi tugma sa -malilipat pagpipilian.

-msdata=default
-msdata
Sa System V.4 at naka-embed na PowerPC system, kung -meabi ay ginagamit, i-compile ang code na pareho
as -msdata=eabi, kung hindi man ay mag-compile ng code na kapareho ng -msdata=sysv.

-msdata=data
Sa System V.4 at mga naka-embed na PowerPC system, ilagay ang maliit na global data sa ".sdata"
seksyon. Maglagay ng maliit na hindi nasimulang global data sa seksyong ".sbss." Huwag gamitin
irehistro ang "r13" upang matugunan ang maliit na data gayunpaman. Ito ang default na gawi maliban kung
iba -msdata ginagamit ang mga opsyon.

-msdata=wala
-mno-sdata
Sa mga naka-embed na PowerPC system, ilagay ang lahat ng inisyal na global at static na data sa ".data"
seksyon, at lahat ng hindi nasimulang data sa seksyong ".bss."

-mblock-move-inline-limit=num
Inline ang lahat ng block moves (gaya ng mga tawag sa "memcpy" o structure copies) na mas mababa sa o
katumbas ng num byte. Ang pinakamababang halaga para sa num ay 32 bytes sa 32-bit na mga target at 64
bytes sa 64-bit na mga target. Ang default na halaga ay partikular sa target.

-G num
Sa mga naka-embed na PowerPC system, ilagay ang mga global at static na item na mas mababa sa o katumbas ng num
byte sa maliit na data o mga seksyon ng BSS sa halip na ang normal na data o seksyon ng BSS.
Sa pamamagitan ng default, num ay 8. Ang -G num ipinapasa din ang switch sa linker. Lahat ng modules
ay dapat na pinagsama-sama sa pareho -G num halaga.

-mga pangalan
-mno-regnames
Sa System V.4 at naka-embed na PowerPC system ay (hindi) naglalabas ng mga pangalan ng rehistro sa
output ng wikang assembly gamit ang mga simbolikong anyo.

-mlongcall
-mno-longcall
Bilang default, ipagpalagay na ang lahat ng mga tawag ay malayo para mas mahaba at mas mahal
kailangan ang pagkakasunod-sunod ng pagtawag. Ito ay kinakailangan para sa mga tawag na mas malayo sa 32 megabytes
(33,554,432 bytes) mula sa kasalukuyang lokasyon. Ang isang maikling tawag ay nabuo kung ang
Alam ng compiler na hindi maaaring ganoon kalayo ang tawag. Ang setting na ito ay maaaring ma-override ng
ang katangian ng function na "shortcall", o ng "#pragma longcall(0) ".

Ang ilang mga linker ay may kakayahang makakita ng mga out-of-range na tawag at makabuo ng glue code
ang langaw. Sa mga system na ito, hindi kailangan ang mahahabang tawag at bumubuo ng mas mabagal na code. Bilang
sa pagsulat na ito, magagawa ito ng AIX linker, tulad ng magagawa ng GNU linker para sa PowerPC/64. Ito
ay binalak na idagdag ang tampok na ito sa GNU linker para sa 32-bit na PowerPC system din.

Sa Darwin/PPC system, ang "#pragma longcall" ay bumubuo ng "jbsr callee, L42", at isang sangay
isla (code ng pandikit). Ang dalawang target na address ay kumakatawan sa tumatawag at sa sangay
isla. Mas gusto ng Darwin/PPC linker ang unang address at bumubuo ng "bl callee"
kung ang pagtuturo ng "bl" ng PPC ay direktang nakarating sa tumatawag; kung hindi, ang linker
bumubuo ng "bl L42" para tawagan ang branch island. Ang sangay na isla ay nakadugtong sa
katawan ng function ng pagtawag; kinukuwenta nito ang buong 32-bit na address ng callee at
tumalon dito.

Sa mga sistema ng Mach-O (Darwin), ang pagpipiliang ito ay nagdidirekta sa compiler na naglalabas sa pandikit para sa
bawat direktang tawag, at ang Darwin linker ang magpapasya kung ito ay gagamitin o itatapon.

Sa hinaharap, maaaring balewalain ng GCC ang lahat ng mga detalye ng longcall kapag kilala ang linker
bumuo ng pandikit.

-mtls-marker
-mno-tls-marker
Markahan (huwag markahan) ang mga tawag sa "__tls_get_addr" na may relokasyon na tumutukoy sa function
argumento. Ang paglilipat ay nagpapahintulot sa linker na mapagkakatiwalaang iugnay ang function na tawag sa
mga tagubilin sa pag-setup ng argumento para sa pag-optimize ng TLS, na nagbibigay-daan naman sa GCC na maging mas mahusay
iiskedyul ang pagkakasunod-sunod.

-pthread
Nagdaragdag ng suporta para sa multithreading gamit ang mga pthread aklatan. Ang opsyong ito ay nagtatakda ng mga flag para sa
parehong preprocessor at linker.

-mreci
-mno-recipe
Ang opsyong ito ay nagbibigay-daan sa paggamit ng reciprocal na pagtatantya at reciprocal na square root na pagtatantya
mga tagubilin na may karagdagang mga hakbang sa Newton-Raphson upang mapataas ang katumpakan sa halip na
paggawa ng divide o square root at divide para sa mga floating-point na argumento. Dapat mong gamitin
ang -ffast-math opsyon kapag ginagamit -mreci (o kahit papaano -funsafe-math-optimizations,
-finite-math-lamang, -freciprocal-math at -fno-trap-math). Tandaan na habang ang
Ang throughput ng sequence ay karaniwang mas mataas kaysa sa throughput ng hindi-
reciprocal na pagtuturo, ang katumpakan ng pagkakasunud-sunod ay maaaring bawasan ng hanggang 2 ulp
(ibig sabihin, ang kabaligtaran ng 1.0 ay katumbas ng 0.99999994) para sa mga reciprocal square roots.

-mreci=opt
Kinokontrol ng opsyong ito kung aling mga reciprocal na tagubilin sa pagtatantya ang maaaring gamitin. opt ay isang
listahan ng mga opsyon na pinaghihiwalay ng kuwit, na maaaring unahan ng "!" upang baligtarin ang pagpipilian:

lahat Paganahin ang lahat ng mga tagubilin sa pagtatantya.

default
Paganahin ang mga default na tagubilin, katumbas ng -mreci.

wala
Huwag paganahin ang lahat ng mga tagubilin sa pagtatantya, katumbas ng -mno-recipe.

div I-enable ang reciprocal approximation na mga tagubilin para sa single at double
katumpakan.

divf
I-enable ang single-precision reciprocal approximation na mga tagubilin.

divd
I-enable ang double-precision reciprocal approximation na mga tagubilin.

rsqrt
I-enable ang reciprocal square root approximation na mga tagubilin para sa parehong single at
dobleng katumpakan.

rsqrtf
I-enable ang single-precision reciprocal square root approximation na mga tagubilin.

rsqrtd
I-enable ang double-precision reciprocal square root approximation na mga tagubilin.

Kaya, halimbawa, -mrecip=lahat,!rsqrtd nagbibigay-daan sa lahat ng katumbas na pagtatantya
mga tagubilin, maliban sa mga tagubiling "FRSQRTE", "XSRSQRTEDP", at "XVRSQRTEDP"
na humahawak sa double-precision reciprocal square root kalkulasyon.

-mrecip-katumpakan
-mno-recip-precision
Ipagpalagay (huwag ipagpalagay) na ang kapalit na mga tagubilin sa pagtatantya ay nagbibigay ng mas mataas na-
mga pagtatantya ng katumpakan kaysa sa ipinag-uutos ng PowerPC ABI. Pagpili -mcpu=kapangyarihan6,
-mcpu=kapangyarihan7 or -mcpu=kapangyarihan8 awtomatikong pinipili -mrecip-katumpakan. Ang doble-
Ang mga tagubilin sa pagtatantya ng precision square root ay hindi nabuo bilang default sa mababang-
katumpakan machine, dahil hindi sila nagbibigay ng isang pagtatantya na converges pagkatapos ng tatlo
hakbang.

-mveclibabi=uri
Tinutukoy ang uri ng ABI na gagamitin para sa pag-vector ng mga intrinsics gamit ang isang panlabas na library.
Ang tanging uri na sinusuportahan sa kasalukuyan ay masa, na tumutukoy sa paggamit ng IBM's Mathematics
Acceleration Subsystem (MASS) library para sa pag-vector ng intrinsics gamit ang external
mga aklatan. Kasalukuyang naglalabas ang GCC ng mga tawag sa "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", at
"tanhf4" kapag bumubuo ng code para sa power7. pareho -free-vectorize at
-funsafe-math-optimizations dapat ding paganahin. Ang mga aklatan ng MASS ay dapat na
tinukoy sa oras ng link.

-mfriz
-mno-friz
Bumuo (huwag bumuo) ng "friz" na pagtuturo kapag ang -funsafe-math-optimizations
Ang opsyon ay ginagamit upang i-optimize ang pag-ikot ng mga floating-point na halaga sa 64-bit integer at
bumalik sa floating point. Ang "friz" na pagtuturo ay hindi nagbabalik ng parehong halaga kung ang
Ang floating-point na numero ay masyadong malaki upang magkasya sa isang integer.

-pointers-to-nested-functions
-mno-pointers-to-nested-functions
Bumuo (huwag bumuo) ng code upang i-load ang static na chain register ("r11") kapag
pagtawag sa pamamagitan ng isang pointer sa AIX at 64-bit Linux system kung saan ang isang function pointer
tumuturo sa isang 3-salitang descriptor na nagbibigay ng address ng function, halaga ng TOC na ilo-load
irehistro ang "r2", at static na halaga ng chain na ilo-load sa rehistro "r11". Ang
-pointers-to-nested-functions ay naka-on bilang default. Hindi ka maaaring tumawag sa pamamagitan ng mga pointer sa
mga nested function o pointer sa mga function na pinagsama-sama sa ibang mga wika na gumagamit ng
static chain kung gagamitin mo -mno-pointers-to-nested-functions.

-msave-toc-indirect
-mno-save-toc-indirect
Bumuo ng (huwag bumuo) ng code upang i-save ang halaga ng TOC sa nakareserbang lokasyon ng stack
sa prologue ng function kung ang function ay tumatawag sa pamamagitan ng isang pointer sa AIX at 64-bit
Linux system. Kung ang halaga ng TOC ay hindi nai-save sa prologue, ito ay nai-save bago lamang
ang tawag sa pamamagitan ng pointer. Ang -mno-save-toc-indirect ang pagpipilian ay ang default.

-mcompat-align-parm
-mno-compat-align-parm
Bumuo (huwag bumuo) ng code upang pumasa sa mga parameter ng istraktura na may pinakamataas na pagkakahanay
ng 64 bits, para sa pagiging tugma sa mga mas lumang bersyon ng GCC.

Ang mga mas lumang bersyon ng GCC (bago ang 4.9.0) ay hindi nag-align ng isang parameter ng istraktura
sa isang 128-bit na hangganan kapag ang istrakturang iyon ay naglalaman ng isang miyembro na nangangailangan ng 128-bit
pagkakahanay. Ito ay itinatama sa mas kamakailang mga bersyon ng GCC. Maaaring gamitin ang opsyong ito
upang bumuo ng code na tugma sa mga function na pinagsama-sama sa mga mas lumang bersyon ng
GCC.

Ang -mno-compat-align-parm ang pagpipilian ay ang default.

RX Options

Ang mga opsyon sa command-line na ito ay tinukoy para sa mga target ng RX:

-m64bit-doble
-m32bit-doble
Gawing 64 bits ang "double" na uri ng data (-m64bit-doble) o 32 bits (-m32bit-doble)
sa laki. Ang default ay -m32bit-doble. nota Gumagana lang ang RX floating-point hardware
sa mga 32-bit na halaga, kaya naman ang default ay -m32bit-doble.

-fpu
-nofpu
Pinapagana (-fpu) o hindi pinagana (-nofpu) ang paggamit ng RX floating-point hardware. Ang
default ay pinagana para sa RX600 series at hindi pinagana para sa RX200 series.

Ang mga tagubilin sa floating-point ay nabuo lamang para sa mga 32-bit na floating-point na halaga,
gayunpaman, kaya ang FPU hardware ay hindi ginagamit para sa doubles kung ang -m64bit-doble Ang opsyon ay
ginagamit.

nota Kung ang -fpu ang opsyon ay pinagana pagkatapos -funsafe-math-optimizations ay pinagana rin
awtomatiko. Ito ay dahil ang mga tagubilin sa RX FPU ay hindi ligtas.

-mcpu=pangalan
Pinipili ang uri ng RX CPU na ita-target. Sa kasalukuyan tatlong uri ang sinusuportahan, ang
panlahat RX600 at RX200 serye ng hardware at ang tiyak RX610 CPU. Ang default ay
RX600.

Ang tanging pagkakaiba sa pagitan RX600 at RX610 Pagtantya que le RX610 hindi sumusuporta sa
"MVTIPL" na pagtuturo.

Ang RX200 ang serye ay walang hardware na floating-point unit at iba pa -nofpu ay gumagana
bilang default kapag napili ang ganitong uri.

-mbig-endian-data
-mlittle-endian-data
Mag-imbak ng data (ngunit hindi code) sa big-endian na format. Ang default ay
-mlittle-endian-data, ibig sabihin, mag-imbak ng data sa maliit na-endian na format.

-msmall-data-limit=N
Tinutukoy ang maximum na laki sa byte ng mga global at static na variable na maaaring ilagay
sa maliit na lugar ng data. Ang paggamit ng maliit na lugar ng data ay maaaring humantong sa mas maliit at mas mabilis
code, ngunit ang laki ng lugar ay limitado at nasa programmer ang pagtiyak na iyon
hindi umaapaw ang lugar. Gayundin kapag ang maliit na lugar ng data ay ginamit ang isa sa mga RX's
registers (karaniwang "r13") ay nakalaan para sa paggamit na tumuturo sa lugar na ito, kaya ito ay hindi
mas matagal na magagamit para magamit ng compiler. Ito ay maaaring magresulta sa mas mabagal at/o mas malaki
code kung ang mga variable ay itinulak sa stack sa halip na gaganapin sa rehistrong ito.

Tandaan, ang mga karaniwang variable (mga variable na hindi pa nasimulan) at mga constant ay
hindi inilagay sa maliit na lugar ng data dahil itinalaga sila sa iba pang mga seksyon sa
maipapatupad ang output.

Ang default na halaga ay zero, na hindi pinapagana ang tampok na ito. Tandaan, ang tampok na ito ay hindi
pinagana bilang default na may mas mataas na antas ng pag-optimize (-O2 atbp) dahil sa
potensyal na nakapipinsalang epekto ng pagpapareserba ng isang rehistro. Bahala na ang programmer
upang mag-eksperimento at matuklasan kung ang tampok na ito ay kapaki-pakinabang sa kanilang programa. Tingnan mo
ang paglalarawan ng -mpid opsyon para sa isang paglalarawan kung paano ang aktwal na pagpaparehistro sa
hawakan ang maliit na data area pointer ay pinili.

-msim
-mno-sim
Gamitin ang runtime ng simulator. Ang default ay ang paggamit ng libgloss board-specific na runtime.

-mas100-syntax
-mno-as100-syntax
Kapag bumubuo ng output ng assembler, gumamit ng syntax na tugma sa AS100 ni Renesas
assembler. Ang syntax na ito ay maaari ding pangasiwaan ng GAS assembler, ngunit mayroon itong ilan
mga paghihigpit upang hindi ito nabuo bilang default.

-mmax-constant-size=N
Tinutukoy ang maximum na laki, sa bytes, ng isang pare-pareho na maaaring magamit bilang isang operand sa
isang pagtuturo ng RX. Bagama't pinapayagan ng set ng pagtuturo ng RX ang mga constant na hanggang 4
bytes ang haba na gagamitin sa mga tagubilin, ang mas mahabang halaga ay katumbas ng mas mahaba
pagtuturo. Kaya sa ilang mga pagkakataon ay maaaring maging kapaki-pakinabang upang paghigpitan ang laki ng
mga constant na ginagamit sa mga tagubilin. Ang mga constant na masyadong malaki ay sa halip
inilagay sa isang pare-parehong pool at isinangguni sa pamamagitan ng register indidirection.

Ang halaga N maaaring nasa pagitan ng 0 at 4. Ang halaga ng 0 (ang default) o 4 ay nangangahulugan na
pinapayagan ang mga pare-pareho ng anumang laki.

-magpahinga
Paganahin ang pagpapahinga ng linker. Ang relaxation ng linker ay isang proseso kung saan sinusubukan ng linker
upang bawasan ang laki ng isang programa sa pamamagitan ng paghahanap ng mas maiikling bersyon ng iba't ibang mga tagubilin.
Hindi pinagana nang default.

-mint-register=N
Tukuyin ang bilang ng mga rehistro na irereserba para sa mga function ng fast interrupt handler. Ang
halaga N maaaring nasa pagitan ng 0 at 4. Ang halaga ng 1 ay nangangahulugan na ang rehistrong "r13" ay nakalaan
para sa eksklusibong paggamit ng mga fast interrupt handler. Isang halaga ng 2 reserbang "r13" at
"r12". Isang halaga ng 3 reserbang "r13", "r12" at "r11", at isang halaga ng 4 na reserbang "r13"
sa pamamagitan ng "r10". Ang isang halaga ng 0, ang default, ay hindi nagrereserba ng anumang mga rehistro.

-msave-acc-in-interrupts
Tinutukoy na ang mga pag-andar ng interrupt na handler ay dapat panatilihin ang rehistro ng accumulator.
Ito ay kinakailangan lamang kung ang normal na code ay maaaring gumamit ng accumulator register, halimbawa
dahil nagsasagawa ito ng 64-bit multiplications. Ang default ay huwag pansinin ang nagtitipon
dahil ginagawa nitong mas mabilis ang mga humahawak ng interrupt.

-mpid
-mno-pid
Pinapagana ang pagbuo ng data ng independiyenteng posisyon. Kapag pinagana ang anumang access sa
ang patuloy na data ay ginagawa sa pamamagitan ng isang offset mula sa isang base address na hawak sa isang rehistro. Ito
nagbibigay-daan sa lokasyon ng pare-parehong data na matukoy sa oras ng pagtakbo nang hindi nangangailangan
ang executable na ililipat, na isang benepisyo sa mga naka-embed na application na may mahigpit
mga hadlang sa memorya. Ang data na maaaring baguhin ay hindi apektado ng opsyong ito.

Tandaan, ang paggamit ng tampok na ito ay naglalaan ng isang rehistro, karaniwang "r13", para sa patuloy na data
base address. Maaari itong magresulta sa mas mabagal at/o mas malaking code, lalo na sa kumplikado
function.

Ang aktwal na rehistro na pinili upang hawakan ang pare-pareho ang data base address ay depende sa kung
ang -msmall-data-limit at / o ang -mint-register pinagana ang mga opsyon sa command-line.
Simula sa rehistro "r13" at magpatuloy pababa, ang mga rehistro ay inilalaan muna
upang matugunan ang mga kinakailangan ng -mint-register, Pagkatapos -mpid at sa wakas
-msmall-data-limit. Kaya posible para sa maliit na rehistro ng lugar ng data na maging "r8"
kung pareho -mint-register=4 at -mpid ay tinukoy sa command line.

Bilang default, hindi pinagana ang feature na ito. Maaaring maibalik ang default sa pamamagitan ng -mno-pid
opsyon sa command-line.

-mno-warn-multiple-fast-interrupts
-mwarn-multiple-fast-interrupts
Pinipigilan ang GCC na maglabas ng mensahe ng babala kung makakita ito ng higit sa isang mabilis na interrupt
handler kapag nag-compile ito ng file. Ang default ay magbigay ng babala para sa bawat dagdag
natagpuan ang mabilis na interrupt handler, dahil sinusuportahan lamang ng RX ang isang ganoong interrupt.

tandaan: Ang generic na GCC command-line na opsyon -nakadikit-reg ay may espesyal na kahalagahan sa RX
port kapag ginamit kasama ang "interrupt" na katangian ng function. Ang katangiang ito ay nagpapahiwatig ng a
function na nilayon upang iproseso ang mga mabilis na pagkagambala. Tinitiyak ng GCC na ginagamit lamang nito ang mga rehistro
"r10", "r11", "r12" at/o "r13" at ibinigay lamang na ang normal na paggamit ng
ang mga kaukulang rehistro ay pinaghigpitan sa pamamagitan ng -nakadikit-reg or -mint-register
mga pagpipilian sa command-line.

S / 390 at zSerye Options

Ito ang mga -m mga opsyon na tinukoy para sa arkitektura ng S/390 at zSeries.

-mhard-float
-msoft-float
Gamitin (huwag gamitin) ang hardware floating-point na mga tagubilin at mga rehistro para sa floating-
mga operasyon ng punto. Kailan -msoft-float ay tinukoy, gumagana sa libgcc.a ay sanay sa
magsagawa ng mga floating-point na operasyon. Kailan -mhard-float ay tinukoy, ang compiler
bumubuo ng IEEE floating-point na mga tagubilin. Ito ang default.

-mhard-dfp
-mno-hard-dfp
Gamitin (huwag gamitin) ang hardware decimal-floating-point na mga tagubilin para sa decimal-
mga pagpapatakbo ng floating-point. Kailan -mno-hard-dfp ay tinukoy, gumagana sa libgcc.a ay
ginagamit upang magsagawa ng mga pagpapatakbo ng decimal-floating-point. Kailan -mhard-dfp ay tinukoy, ang
ang compiler ay bumubuo ng decimal-floating-point na mga tagubilin sa hardware. Ito ang default
para -martsa=z9-ec o mas mataas.

-mlong-double-64
-mlong-double-128
Kinokontrol ng mga switch na ito ang laki ng uri ng "long double". Ang laki ng 64 bits ay gumagawa ng
"long double" na uri na katumbas ng "double" na uri. Ito ang default.

-mbackchain
-mno-backchain
Itabi (huwag iimbak) ang address ng frame ng tumatawag bilang backchain pointer sa
stack frame ng callee. Maaaring kailanganin ang isang backchain upang payagan ang pag-debug gamit ang mga tool na iyon
hindi maintindihan ang impormasyon ng frame ng tawag sa DWARF 2. Kailan -mno-packed-stack ay nasa
epekto, ang backchain pointer ay naka-imbak sa ilalim ng stack frame; kailan
-naka-pack na-stack ay may bisa, ang backchain ay inilalagay sa pinakamataas na salita ng
96/160 byte register save area.

Sa pangkalahatan, pinagsama-sama ang code sa -mbackchain ay tumutugma sa tawag sa code na pinagsama-sama
-mmo-backchain; gayunpaman, ang paggamit ng backchain para sa mga layunin ng pag-debug ay karaniwang nangangailangan
na ang buong binary ay binuo gamit ang -mbackchain. Tandaan na ang kumbinasyon ng
-mbackchain, -naka-pack na-stack at -mhard-float ay hindi suportado. Upang makabuo ng isang
paggamit ng linux kernel -msoft-float.

Ang default ay hindi mapanatili ang backchain.

-naka-pack na-stack
-mno-packed-stack
Gamitin (huwag gamitin) ang naka-pack na layout ng stack. Kailan -mno-packed-stack ay tinukoy, ang
Ang compiler ay gumagamit ng lahat ng mga patlang ng 96/160 byte register save area para lamang sa kanilang
default na layunin; ang mga hindi nagamit na field ay tumatagal pa rin ng stack space. Kailan -naka-pack na-stack is
tinukoy, ang mga puwang ng pag-save ng rehistro ay makapal na nakaimpake sa tuktok ng pag-save ng rehistro
lugar; ang hindi nagamit na espasyo ay muling ginagamit para sa iba pang mga layunin, na nagbibigay-daan para sa mas mahusay na paggamit ng
ang magagamit na stack space. Gayunpaman, kapag -mbackchain ay din sa epekto, ang pinakamataas
Ang salita ng save area ay palaging ginagamit upang iimbak ang backchain, at ang return address
Ang rehistro ay palaging naka-save ng dalawang salita sa ibaba ng backchain.

Hangga't hindi ginagamit ang stack frame backchain, nabuo ang code gamit ang -naka-pack na-stack
ay tumutugma sa tawag sa code na nabuo gamit ang -mno-packed-stack. Tandaan na ang ilang hindi FSF
mga release ng GCC 2.95 para sa S/390 o zSeries na nabuong code na gumagamit ng stack frame
backchain sa oras ng pagtakbo, hindi lamang para sa mga layunin ng pag-debug. Ang naturang code ay hindi tawag-
katugma sa code na pinagsama-sama -naka-pack na-stack. Gayundin, tandaan na ang kumbinasyon ng
-mbackchain, -naka-pack na-stack at -mhard-float ay hindi suportado. Upang makabuo ng isang
paggamit ng linux kernel -msoft-float.

Ang default ay hindi gamitin ang naka-pack na layout ng stack.

-msmall-exec
-mno-small-exec
Bumuo (o huwag bumuo) ng code gamit ang "bras" na pagtuturo upang gawin ang subroutine
mga tawag. Gumagana lamang ito nang mapagkakatiwalaan kung ang kabuuang sukat na maipapatupad ay hindi lalampas sa 64k.
Ang default ay gamitin ang "basr" na pagtuturo sa halip, na wala nito
limitasyon

-m64
-m31
Kailan -m31 ay tinukoy, bumuo ng code na sumusunod sa GNU/Linux para sa S/390 ABI. Kailan
-m64 ay tinukoy, bumuo ng code na sumusunod sa GNU/Linux para sa zSeries ABI. Ito
nagbibigay-daan sa GCC sa partikular na bumuo ng 64-bit na mga tagubilin. Para sa s390 mga target, ang
ang default ay -m31, habang ang s390x mga target na default sa -m64.

-mzarch
-mesa
Kailan -mzarch ay tinukoy, bumuo ng code gamit ang mga tagubiling magagamit sa
z/Arkitektura. Kailan -mesa ay tinukoy, bumuo ng code gamit ang mga tagubilin
available sa ESA/390. Tandaan na -mesa ay hindi maaari sa -m64. Kapag bumubuo
sumusunod sa code sa GNU/Linux para sa S/390 ABI, ang default ay -mesa. Kapag bumubuo
sumusunod sa code sa GNU/Linux para sa zSeries ABI, ang default ay -mzarch.

-mmvcle
-mno-mvcle
Bumuo (o huwag bumuo) ng code gamit ang "mvcle" na pagtuturo upang maisagawa ang block
gumagalaw. Kailan -mno-mvcle ay tinukoy, gumamit na lang ng "mvc" na loop. Ito ang default
maliban kung nag-optimize para sa laki.

-mdebug
-mno-debug
Mag-print (o huwag mag-print) ng karagdagang impormasyon sa pag-debug kapag nagko-compile. Ang default ay
upang hindi mag-print ng impormasyon sa pag-debug.

-martsa=uri ng cpu
Bumuo ng code na tumatakbo sa uri ng cpu, na siyang pangalan ng isang sistema na kumakatawan sa a
ilang uri ng processor. Mga posibleng halaga para sa uri ng cpu ay g5, g6, z900, z990, z9-109,
z9-ec, z10, z196, zEC12, at z13. Kapag bumubuo ng code gamit ang mga tagubilin
available sa z/Architecture, ang default ay -martsa=z900. Kung hindi, ang default ay
-martsa=g5.

-mtune=uri ng cpu
Tune to uri ng cpu lahat ng naaangkop tungkol sa nabuong code, maliban sa ABI
at ang hanay ng mga magagamit na tagubilin. Ang listahan ng uri ng cpu ang mga halaga ay kapareho ng para sa
-martsa. Ang default ay ang halaga na ginamit para sa -martsa.

-mtpf-trace
-mno-tpf-trace
Bumuo ng code na nagdaragdag (hindi nagdaragdag) sa mga partikular na sangay ng TPF OS upang masubaybayan ang mga gawain
sa operating system. Naka-off ang opsyong ito bilang default, kahit na nag-compile para sa
TPF OS.

-mfused-baliw
-mno-fused-madd
Bumuo ng code na gumagamit (hindi gumagamit) ng floating-point na multiply at maipon
mga tagubilin. Ang mga tagubiling ito ay nabuo bilang default kung ang hardware na lumulutang na punto
Ginagamit.

-mwarn-framesize=laki ng frame
Maglabas ng babala kung ang kasalukuyang function ay lumampas sa ibinigay na laki ng frame. Dahil ito ay
isang pagsusuri sa oras ng pag-compile na hindi ito kailangang maging isang tunay na problema kapag tumatakbo ang programa. Ito
ay nilayon na tukuyin ang mga function na malamang na nagdudulot ng stack overflow. Ito ay
kapaki-pakinabang na gamitin sa isang kapaligiran na may limitadong laki ng stack eg ang linux kernel.

-mwarn-dynamicstack
Maglabas ng babala kung ang function ay tinatawag na "alloca" o gumagamit ng dynamic na laki ng mga array. Ito
sa pangkalahatan ay isang masamang ideya na may limitadong laki ng stack.

-mstack-guard=stack-guard
-mstack-size=laki ng stack
Kung ang mga opsyong ito ay ibinigay ang S/390 back end ay naglalabas ng mga karagdagang tagubilin sa
function prologue na nagpapalitaw ng bitag kung ang laki ng stack ay stack-guard bytes sa itaas ng
laki ng stack (tandaan na ang stack sa S/390 ay lumalaki pababa). Kung ang stack-guard
opsyon ay tinanggal ang pinakamaliit na kapangyarihan ng 2 mas malaki kaysa sa laki ng frame ng pinagsama-sama
function ay pinili. Ang mga opsyong ito ay nilayon na magamit upang makatulong sa pag-debug ng stack
overflow na problema. Ang karagdagang inilabas na code ay nagdudulot lamang ng kaunting overhead at
samakatuwid ay maaari ding gamitin sa mga sistemang tulad ng produksyon na walang mas mataas na pagganap
marawal na kalagayan. Ang mga ibinigay na halaga ay dapat na eksaktong kapangyarihan ng 2 at laki ng stack kinakailangan
mas mataas sa stack-guard nang hindi hihigit sa 64k. Para maging efficient ang extra
ginagawa ng code ang pagpapalagay na ang stack ay nagsisimula sa isang address na nakahanay sa halaga
ibinigay ng laki ng stack. ang stack-guard ang opsyon ay magagamit lamang kasama ng
laki ng stack.

-mhotpatch=pre-halfwords,post-halfwords
Kung pinagana ang opsyon ng hotpatch, bubuo ang prologue ng function na "hot-patching."
lahat ng function sa compilation unit. Ang label ng function ay inilalagay sa ibinigay
bilang ng dalawang-byte na tagubilin sa NOP (pre-halfwords, maximum na 1000000). Pagkatapos ng
label, 2 * post-halfwords Ang mga byte ay idinagdag, gamit ang pinakamalaking NOP tulad ng mga tagubilin
pinapayagan ng arkitektura (maximum 1000000).

Kung ang parehong mga argumento ay zero, ang hotpatching ay hindi pinagana.

Maaaring ma-override ang opsyong ito para sa mga indibidwal na function na may attribute na "hotpatch".

Puntos Options

Tinukoy ang mga opsyong ito para sa mga pagpapatupad ng Score:

-meb
Mag-compile ng code para sa big-endian mode. Ito ang default.

-mel
Mag-compile ng code para sa little-endian mode.

-mnhwloop
Huwag paganahin ang pagbuo ng "bcnz" na mga tagubilin.

-muls
Paganahin ang pagbuo ng hindi nakahanay na pag-load at mga tagubilin sa tindahan.

-mmac
Paganahin ang paggamit ng multiply-accumulate na mga tagubilin. Hindi pinagana bilang default.

-mscore5
Tukuyin ang SCORE5 bilang target na arkitektura.

-mscore5u
Tukuyin ang SCORE5U ng target na arkitektura.

-mscore7
Tukuyin ang SCORE7 bilang target na arkitektura. Ito ang default.

-mscore7d
Tukuyin ang SCORE7D bilang target na arkitektura.

SH Options

mga ito -m ang mga opsyon ay tinukoy para sa mga pagpapatupad ng SH:

-m1 Bumuo ng code para sa SH1.

-m2 Bumuo ng code para sa SH2.

-m2e
Bumuo ng code para sa SH2e.

-m2a-nofpu
Bumuo ng code para sa SH2a na walang FPU, o para sa isang SH2a-FPU sa paraang ang
hindi ginagamit ang floating-point unit.

-m2a-single-lamang
Bumuo ng code para sa SH2a-FPU, sa paraang walang double-precision na floating-point
ginagamit ang mga operasyon.

-m2a-single
Bumuo ng code para sa SH2a-FPU kung ipagpalagay na ang floating-point unit ay nasa single-precision
mode bilang default.

-m2a
Bumuo ng code para sa SH2a-FPU kung ipagpalagay na ang floating-point unit ay nasa double-precision
mode bilang default.

-m3 Bumuo ng code para sa SH3.

-m3e
Bumuo ng code para sa SH3e.

-m4-nofpu
Bumuo ng code para sa SH4 nang walang floating-point unit.

-m4-single-lamang
Bumuo ng code para sa SH4 na may floating-point unit na sumusuporta lamang sa single-
katumpakan aritmetika.

-m4-iisa
Bumuo ng code para sa SH4 kung ipagpalagay na ang floating-point unit ay nasa single-precision mode
bilang default.

-m4 Bumuo ng code para sa SH4.

-m4-100
Bumuo ng code para sa SH4-100.

-m4-100-nofpu
Bumuo ng code para sa SH4-100 sa paraang hindi ginagamit ang floating-point unit.

-m4-100-iisa
Bumuo ng code para sa SH4-100 kung ipagpalagay na ang floating-point unit ay nasa single-precision mode
bilang default.

-m4-100-single-lamang
Bumuo ng code para sa SH4-100 sa paraang walang double-precision na floating-point
ginagamit ang mga operasyon.

-m4-200
Bumuo ng code para sa SH4-200.

-m4-200-nofpu
Bumuo ng code para sa SH4-200 nang wala sa paraang hindi ang floating-point unit
ginagamit.

-m4-200-iisa
Bumuo ng code para sa SH4-200 kung ipagpalagay na ang floating-point unit ay nasa single-precision mode
bilang default.

-m4-200-single-lamang
Bumuo ng code para sa SH4-200 sa paraang walang double-precision na floating-point
ginagamit ang mga operasyon.

-m4-300
Bumuo ng code para sa SH4-300.

-m4-300-nofpu
Bumuo ng code para sa SH4-300 nang wala sa paraang hindi ang floating-point unit
ginagamit.

-m4-300-iisa
Bumuo ng code para sa SH4-300 sa paraang walang double-precision na floating-point
ginagamit ang mga operasyon.

-m4-300-single-lamang
Bumuo ng code para sa SH4-300 sa paraang walang double-precision na floating-point
ginagamit ang mga operasyon.

-m4-340
Bumuo ng code para sa SH4-340 (walang MMU, walang FPU).

-m4-500
Bumuo ng code para sa SH4-500 (walang FPU). pumasa -isa=sh4-nofpu sa nagtitipon.

-m4a-nofpu
Bumuo ng code para sa SH4al-dsp, o para sa isang SH4a sa paraang ang floating-point
hindi ginagamit ang unit.

-m4a-single-lamang
Bumuo ng code para sa SH4a, sa paraang walang double-precision na floating-point
ginagamit ang mga operasyon.

-m4a-single
Bumuo ng code para sa SH4a kung ipagpalagay na ang floating-point unit ay nasa single-precision
mode bilang default.

-m4a
Bumuo ng code para sa SH4a.

-m4al
Katulad ng -m4a-nofpu, maliban na ito ay tahasang pumasa -dsp sa nagtitipon. GCC
ay hindi bumubuo ng anumang mga tagubilin sa DSP sa ngayon.

-m5-32media
Bumuo ng 32-bit code para sa SHmedia.

-m5-32media-nofpu
Bumuo ng 32-bit na code para sa SHmedia sa paraang hindi ang floating-point unit
ginagamit.

-m5-64media
Bumuo ng 64-bit code para sa SHmedia.

-m5-64media-nofpu
Bumuo ng 64-bit na code para sa SHmedia sa paraang hindi ang floating-point unit
ginagamit.

-m5-compact
Bumuo ng code para sa SHcompact.

-m5-compact-nofpu
Bumuo ng code para sa SHcompact sa paraang hindi ginagamit ang floating-point unit.

-mb Mag-compile ng code para sa processor sa big-endian mode.

-ml I-compile ang code para sa processor sa little-endian mode.

-mdalign
I-align ang mga doble sa 64-bit na mga hangganan. Tandaan na binabago nito ang mga convention sa pagtawag,
at sa gayon ang ilang mga pag-andar mula sa karaniwang C library ay hindi gagana maliban kung ikaw ay muling mag-compile
una ito sa -mdalign.

-magpahinga
Paikliin ang ilang mga sanggunian sa address sa oras ng pag-link, kapag posible; gumagamit ng opsyon sa linker
-magpahinga.

-mbigtable
Gumamit ng 32-bit na mga offset sa "switch" na mga talahanayan. Ang default ay ang paggamit ng 16-bit na mga offset.

-mbitops
I-enable ang paggamit ng bit manipulation instructions sa SH2A.

-mfmovd
Paganahin ang paggamit ng pagtuturo na "fmovd". Suriin -mdalign para sa mga hadlang sa pagkakahanay.

-mrenesas
Sumunod sa mga calling convention na tinukoy ni Renesas.

-mno-renesas
Sumunod sa mga calling convention na tinukoy para sa GCC bago ang Renesas convention
ay magagamit. Ang opsyong ito ay ang default para sa lahat ng target ng SH toolchain.

-mnomacsave
Markahan ang rehistro ng "MAC" bilang call-clobbered, kahit na -mrenesas ay ibinigay.

-meeee
-mno-ieee
Kontrolin ang pagsunod sa IEEE ng mga floating-point na paghahambing, na nakakaapekto sa paghawak
ng mga kaso kung saan ang resulta ng isang paghahambing ay hindi nakaayos. Bilang default -meeee is
implicitly enabled. Kung -ffinite-math-lamang ay gumagana -mno-ieee ay tahasang itinakda,
na nagreresulta sa mas mabilis na floating-point na mas malaki-pantay at hindi gaanong pantay na mga paghahambing. Ang
Maaaring ma-override ang mga implicit na setting sa pamamagitan ng pagtukoy sa alinman -meeee or -mno-ieee.

-minline-ic_invalidate
Inline na code upang i-invalidate ang mga entry sa cache ng pagtuturo pagkatapos i-set up ang nested function
mga trampolin. Ang pagpipiliang ito ay walang epekto kung -musermode ay may bisa at ang napili
opsyon sa pagbuo ng code (hal -m4) ay hindi pinapayagan ang paggamit ng "icbi" na pagtuturo.
Kung ang napiling opsyon sa pagbuo ng code ay hindi pinapayagan ang paggamit ng "icbi"
pagtuturo, at -musermode ay wala sa bisa, ang inline na code ay minamanipula ang
Direktang array ng address ng cache ng pagtuturo na may kasamang pagsulat. Ito ay hindi lamang
nangangailangan ng privileged mode sa oras ng pagtakbo, ngunit nabigo rin ito kung ang linya ng cache ay naging
nakamapa sa pamamagitan ng TLB at naging unmapa.

-misize
Itapon ang laki at lokasyon ng pagtuturo sa assembly code.

-mpadstruct
Hindi na ginagamit ang opsyong ito. Ito pad structures sa maramihang ng 4 bytes, which is
hindi tugma sa SH ABI.

-matomic-modelo=modelo
Itinatakda ang modelo ng atomic operations at karagdagang mga parameter bilang pinaghihiwalay ng kuwit
listahan. Para sa mga detalye sa atomic built-in na function tingnan __atomic Mga builtin. ang
ang mga sumusunod na modelo at parameter ay sinusuportahan:

wala
I-disable ang mga nabuong atomic na sequence ng compiler at maglabas ng mga tawag sa library para sa atomic
mga operasyon. Ito ang default kung ang target ay hindi "sh*-*-linux*".

malambot-gusa
Bumuo ng GNU/Linux compatible gUSA software na mga atomic sequence para sa atomic built-
sa mga function. Ang nabuong atomic sequence ay nangangailangan ng karagdagang suporta mula sa
interrupt/exception handling code ng system at angkop lamang para sa SH3* at
SH4* single-core system. Ang pagpipiliang ito ay pinagana bilang default kapag ang target ay
"sh*-*-linux*" at SH3* o SH4*. Kapag ang target ay SH4A, ang opsyong ito din
bahagyang ginagamit ang hardware atomic na mga tagubilin na "movli.l" at "movco.l" upang
lumikha ng mas mahusay na code, maliban kung mahigpit ay tinukoy.

malambot-tcb
Bumuo ng mga atomic sequence ng software na gumagamit ng variable sa kontrol ng thread
harangan. Isa itong variation ng mga gUSA sequence na maaari ding gamitin sa SH1*
at SH2* na mga target. Ang nabuong atomic sequence ay nangangailangan ng karagdagang suporta mula sa
ang interrupt/exception handling code ng system at angkop lamang para sa
single-core system. Kapag ginagamit ang modelong ito, ang gbr-offset= parameter ay dapat na
tinukoy din.

malambot-mask
Bumuo ng mga software atomic sequence na pansamantalang hindi pinapagana ang mga interrupt sa pamamagitan ng pagtatakda
"SR.IMASK = 1111". Gumagana lang ang modelong ito kapag tumatakbo ang program sa privileged mode
at angkop lamang para sa mga single-core system. Karagdagang suporta mula sa
Ang interrupt/exception handling code ng system ay hindi kinakailangan. Ang modelong ito ay
pinagana bilang default kapag ang target ay "sh*-*-linux*" at SH1* o SH2*.

mahirap-llcs
Bumuo ng mga hardware atomic sequence gamit ang "movli.l" at "movco.l" na mga tagubilin
lamang. Available lang ito sa SH4A at angkop para sa mga multi-core system.
Dahil ang mga tagubilin sa hardware ay sumusuporta lamang sa 32 bit na mga atomic na variable ng access sa 8
o 16 bit na mga variable ay emulated na may 32 bit access. Naipon ang code kasama nito
ang opsyon ay katugma din sa ibang software atomic model interrupt/exception
paghawak ng mga system kung ipapatupad sa isang SH4A system. Karagdagang suporta mula sa
Ang interrupt/exception handling code ng system ay hindi kinakailangan para sa modelong ito.

gbr-offset=
Tinutukoy ng parameter na ito ang offset sa bytes ng variable sa kontrol ng thread
block structure na dapat gamitin ng nabuong atomic sequence kapag ang
malambot-tcb modelo ay napili. Para sa iba pang mga modelo ang parameter na ito ay binabalewala.
Ang tinukoy na halaga ay dapat na isang integer multiple ng apat at nasa hanay na 0-1020.

mahigpit
Pinipigilan ng parameter na ito ang magkahalong paggamit ng maraming atomic na modelo, kahit na ang mga ito
compatible, at ginagawang bumuo ang compiler ng mga atomic sequence ng tinukoy
model lang.

-mtas
Bumuo ng "tas.b" opcode para sa "__atomic_test_and_set". Pansinin na depende sa
partikular na pagsasaayos ng hardware at software na maaari nitong pababain ang pangkalahatang pagganap
dahil sa mga pag-flush ng linya ng cache ng operand na ipinahiwatig ng pagtuturo ng "tas.b". Naka-on
multi-core SH4A processors ang "tas.b" na pagtuturo ay dapat gamitin nang may pag-iingat dahil dito
maaaring magresulta sa pagkasira ng data para sa ilang partikular na configuration ng cache.

-prefergot
Kapag bumubuo ng position-independent na code, maglabas ng mga function na tawag gamit ang Global Offset
Table sa halip na ang Procedure Linkage Table.

-musermode
-mno-usermode
Huwag payagan (payagan) ang compiler na bumubuo ng privileged mode code. Tinutukoy
-musermode nagpapahiwatig din -mno-inline-ic_invalidate kung hindi gagana ang inline na code
sa user mode. -musermode ay ang default kapag ang target ay "sh*-*-linux*". Kung ang
ang target ay SH1* o SH2* -musermode ay walang epekto, dahil walang user mode.

-multcost=numero
Itakda ang gastos upang ipagpalagay para sa isang multiply insn.

-mdiv=estratehiya
Itakda ang diskarte sa paghahati na gagamitin para sa mga operasyon ng integer division. Para sa SHmedia
estratehiya maaaring isa sa:

fp Nagsasagawa ng operasyon sa floating point. Ito ay may napakataas na latency, ngunit kailangan
ilang mga tagubilin lamang, kaya maaari itong maging isang mahusay na pagpipilian kung sapat ang iyong code
madaling-exploitable na ILP upang payagan ang compiler na mag-iskedyul ng floating-point
mga tagubilin kasama ng iba pang mga tagubilin. Dibisyon sa pamamagitan ng zero sanhi a
floating-point exception.

inv Gumagamit ng integer operations para kalkulahin ang inverse ng divisor, at pagkatapos
pinarami ang dibidendo sa kabaligtaran. Ang diskarte na ito ay nagbibigay-daan sa CSE at hoisting
ng kabaligtaran na pagkalkula. Ang dibisyon sa pamamagitan ng zero ay kinakalkula ang isang hindi natukoy na resulta,
ngunit hindi nabitag.

inv:minlat
Ang isang variant ng inv kung saan, kung walang nakitang mga pagkakataon sa CSE o hoisting, o kung
ang buong operasyon ay itinaas sa parehong lugar, ang mga huling yugto ng
Ang kabaligtaran na pagkalkula ay magkakaugnay sa panghuling multiply upang mabawasan ang pangkalahatang
latency, sa gastos ng paggamit ng ilang higit pang mga tagubilin, at sa gayon ay nag-aalok ng mas kaunti
pag-iiskedyul ng mga pagkakataon sa ibang code.

tawag
Tumatawag ng function ng library na karaniwang nagpapatupad ng inv:minlat diskarte. Ito
nagbibigay ng mataas na code density para sa "m5-*media-nofpu" compilations.

call2
Gumagamit ng ibang entry point ng parehong function ng library, kung saan ipinapalagay nito na a
pointer sa isang lookup table ay nai-set up na, na naglalantad sa pointer load
sa CSE at code hoisting optimizations.

inv:tawag
inv:call2
inv:fp
Gamitin ang inv algorithm para sa paunang pagbuo ng code, ngunit kung mananatili ang code
hindi na-optimize, bumalik sa tawag, call2, O fp mga estratehiya, ayon sa pagkakabanggit. Tandaan na
ang potensyal na nakaka-trap na side effect ng paghahati sa pamamagitan ng zero ay dinadala ng isang hiwalay
pagtuturo, kaya posible na ang lahat ng integer na mga tagubilin ay itinaas,
ngunit ang marker para sa side effect ay nananatili kung nasaan ito. Isang recombination sa
Ang mga pagpapatakbo ng floating-point o isang tawag ay hindi posible sa kasong iyon.

inv20u
inv20l
Mga variant ng inv:minlat diskarte. Sa kaso na ang kabaligtaran na pagkalkula ay
hindi hiwalay sa multiply, pinapabilis nila ang division kung saan kasya ang dibidendo
sa 20 bits (plus sign kung saan naaangkop) sa pamamagitan ng pagpasok ng isang pagsubok upang laktawan ang isang bilang ng
mga operasyon sa kasong ito; ang pagsubok na ito ay nagpapabagal sa kaso ng mas malalaking dibidendo.
inv20u Ipinapalagay na ang kaso ng isang maliit na dibidendo ay hindi malamang, at inv20l
ipinapalagay na ito ay malamang.

Para sa mga target maliban sa SHmedia estratehiya maaaring isa sa:

tawag-div1
Tumatawag sa function ng library na gumagamit ng pagtuturo ng single-step division na "div1" sa
gawin ang operasyon. Ang dibisyon sa pamamagitan ng zero ay kinakalkula ang isang hindi natukoy na resulta at ginagawa
hindi bitag. Ito ang default maliban sa SH4, SH2A at SHcompact.

tawag-fp
Tumatawag ng function ng library na nagsasagawa ng operasyon sa double precision floating
punto. Ang paghahati sa zero ay nagdudulot ng floating-point exception. Ito ang default
para sa SHcompact na may FPU. Tinutukoy ito para sa mga target na walang doble
precision FPU default sa "call-div1".

call-table
Tumatawag ng function ng library na gumagamit ng lookup table para sa maliliit na divisors at ang
"div1" na pagtuturo na may pagkakaiba sa kaso para sa mas malalaking divisors. Dibisyon sa pamamagitan ng zero
kinakalkula ang isang hindi natukoy na resulta at hindi na-trap. Ito ang default para sa SH4.
Tinutukoy ito para sa mga target na walang mga default na tagubilin sa dynamic na shift
sa "call-div1".

Kapag ang isang diskarte sa paghahati ay hindi tinukoy ang default na diskarte ay pinili batay
sa kasalukuyang target. Para sa SH2A ang default na diskarte ay ang paggamit ng "divs" at "divu"
mga tagubilin sa halip na mga tawag sa function ng library.

-maccumulate-outgoing-args
Magreserba ng puwang nang isang beses para sa mga papalabas na argumento sa prologue ng function kaysa sa paligid
bawat tawag. Sa pangkalahatan ay kapaki-pakinabang para sa pagganap at laki. Kailangan din para sa pag-unwinding
upang maiwasan ang pagbabago ng stack frame sa paligid ng conditional code.

-mdivsi3_libfunc=pangalan
Itakda ang pangalan ng function ng library na ginamit para sa 32-bit signed division sa pangalan. ito
nakakaapekto lamang sa pangalang ginamit sa tawag at inv:tawag mga diskarte sa paghahati, at ang
Inaasahan pa rin ng compiler ang parehong mga set ng input/output/clobbered registers na parang ito
opsyon ay hindi naroroon.

-mfixed-range=rehistro-saklaw
Bumuo ng code na tinatrato ang ibinigay na hanay ng rehistro bilang mga nakapirming rehistro. Isang nakapirming rehistro
ay isa na hindi magagamit ng register allocator. Ito ay kapaki-pakinabang kapag nag-compile ng kernel
code. Ang isang hanay ng rehistro ay tinukoy bilang dalawang rehistro na pinaghihiwalay ng isang gitling. Maramihan
Maaaring tukuyin ang mga hanay ng rehistro na pinaghihiwalay ng kuwit.

-mindexed-addressing
Paganahin ang paggamit ng indexed addressing mode para sa SHmedia32/SHcompact. Ito ay lamang
ligtas kung ang hardware at/o OS ay nagpapatupad ng 32-bit na wrap-around na semantics para sa na-index
mode ng pagtugon. Pinapayagan ng arkitektura ang pagpapatupad ng mga processor na may 64-bit
MMU, na maaaring gamitin ng OS upang makakuha ng 32-bit addressing, ngunit dahil walang kasalukuyang hardware
Sinusuportahan ito ng pagpapatupad o anumang iba pang paraan upang gawing ligtas ang naka-index na addressing mode
na gamitin sa 32-bit ABI, ang default ay -mno-indexed-addressing.

-mgettrcost=numero
Itakda ang gastos na ipinapalagay para sa "gettr" na pagtuturo sa numero. Ang default ay 2 kung
-mpt-naayos ay may bisa, 100 kung hindi man.

-mpt-naayos
Ipagpalagay na ang mga tagubiling "pt*" ay hindi mabibitag. Ito ay karaniwang bumubuo ng mas mahusay na nakaiskedyul na code,
ngunit hindi ligtas sa kasalukuyang hardware. Ang kasalukuyang kahulugan ng arkitektura ay nagsasabi na
"ptabs" at "ptrel" trap kapag ang target anded na may 3 ay 3. Ito ay may
hindi sinasadyang epekto ng ginagawang hindi ligtas na iiskedyul ang mga tagubiling ito bago ang a
sanga, o itaas ang mga ito sa isang loop. Halimbawa, "__do_global_ctors", isang bahagi ng
libgcc na nagpapatakbo ng mga konstruktor sa pagsisimula ng programa, tumatawag ng mga function sa isang listahan na
nililimitahan ng -1. Kasama ang -mpt-naayos opsyon, ang "ptabs" ay tapos na bago ang pagsubok
laban sa -1. Nangangahulugan iyon na ang lahat ng mga konstruktor ay tumatakbo nang medyo mas mabilis, ngunit kapag ang
loop pagdating sa dulo ng listahan, ang programa ay nag-crash dahil "ptabs" load -1 sa a
target na rehistro.

Dahil hindi ligtas ang opsyong ito para sa anumang hardware na nagpapatupad ng kasalukuyang arkitektura
detalye, ang default ay -mno-pt-fixed. Maliban kung tahasang tinukoy sa
-mgettrcost, -mno-pt-fixed nagpapahiwatig din -mgettrcost=100; ito ay humahadlang sa pagpaparehistro
alokasyon mula sa paggamit ng mga target na register para sa pag-iimbak ng mga ordinaryong integer.

-minvalid-mga simbolo
Ipagpalagay na ang mga simbolo ay maaaring hindi wasto. Mga simbolo ng ordinaryong function na nabuo ng compiler
ay palaging may bisa sa pag-load ng "movi"/"shori"/"ptabs" o "movi"/"shori"/"ptrel", ngunit
na may assembler at/o linker tricks posibleng makabuo ng mga simbolo na sanhi
"ptabs" o "ptrel" sa bitag. Ang pagpipiliang ito ay makabuluhan lamang kapag -mno-pt-fixed ay nasa
epekto. Pinipigilan nito ang cross-basic-block na CSE, pagtaas at karamihan sa pag-iskedyul ng simbolo
load. Ang default ay -mno-invalid-symbols.

-mbranch-cost=num
Ipagpalagay num upang maging gastos para sa pagtuturo ng sangay. Ang mas mataas na mga numero ay gumagawa ng compiler
subukang bumuo ng mas maraming branch-free code kung maaari. Kung hindi tinukoy ang halaga ay
pinili depende sa uri ng processor na ini-compile.

-mzdcbranch
-mno-zdcbranch
Ipagpalagay (huwag ipagpalagay) na zero displacement conditional branch instructions "bt" at
Mabilis ang "bf". Kung -mzdcbranch ay tinukoy, mas pinipili ng compiler ang zero displacement
mga pagkakasunud-sunod ng code ng sangay. Ito ay pinagana bilang default kapag bumubuo ng code para sa SH4 at
SH4A. Maaari itong tahasang hindi pinagana sa pamamagitan ng pagtukoy -mno-zdcbranch.

-mcbranch-force-delay-slot
Pilitin ang paggamit ng mga delay slot para sa mga conditional branch, na pumupuno sa delay slot
na may "nop" kung hindi mahanap ang angkop na pagtuturo. Bilang default, ang pagpipiliang ito ay
may kapansanan. Maaari itong paganahin upang gumana sa paligid ng mga bug ng hardware tulad ng matatagpuan sa orihinal
SH7055.

-mfused-baliw
-mno-fused-madd
Bumuo ng code na gumagamit (hindi gumagamit) ng floating-point na multiply at maipon
mga tagubilin. Ang mga tagubiling ito ay nabuo bilang default kung ang hardware na lumulutang na punto
Ginagamit. Ang nakadepende sa makina -mfused-baliw ang opsyon ay nakamapa na ngayon sa makina-
malaya -ffp-contract=mabilis pagpipilian, at -mno-fused-madd ay nakamapa sa
-ffp-contract=off.

-mfsca
-mno-fsca
Payagan o huwag payagan ang compiler na maglabas ng "fsca" na pagtuturo para sa sine at cosine
mga pagtatantya. Ang pagpipilian -mfsca dapat gamitin kasama ng
-funsafe-math-optimizations. Ito ay pinagana bilang default kapag bumubuo ng code para sa SH4A.
paggamit -mno-fsca hindi pinapagana ang sinus at cosine approximation kahit na
-funsafe-math-optimizations ay may bisa.

-mfsrra
-mno-fsrra
Pahintulutan o huwag payagan ang compiler na maglabas ng "fsrra" na pagtuturo para sa reciprocal square
mga pagtatantya ng ugat. Ang pagpipilian -mfsrra dapat gamitin kasama ng
-funsafe-math-optimizations at -ffinite-math-lamang. Ito ay pinagana bilang default kapag
pagbuo ng code para sa SH4A. Gamit -mno-fsrra hindi pinapagana ang reciprocal square root
mga pagtatantya kahit na -funsafe-math-optimizations at -ffinite-math-lamang ay nasa
epekto.

-pagpanggap-cmove
Mas gusto ang zero-displacement conditional branch para sa conditional move instruction
mga pattern. Maaari itong magresulta sa mas mabilis na code sa SH4 processor.

Solaris 2 Options

mga ito -m ang mga opsyon ay sinusuportahan sa Solaris 2:

-mclear-hwcap
-mclear-hwcap nagsasabi sa compiler na tanggalin ang mga kakayahan ng hardware na nabuo ng
Solaris assembler. Ito ay kinakailangan lamang kapag ang object file ay hindi gumagamit ng mga extension ng ISA
suportado ng kasalukuyang makina, ngunit suriin sa runtime kung gagamitin o hindi ang mga ito.

-mimpure-text
-mimpure-text, ginagamit bilang karagdagan sa -ibinahagi, nagsasabi sa compiler na huwag pumasa -z teksto sa
ang linker kapag nagli-link ng isang nakabahaging bagay. Gamit ang opsyong ito, maaari mong i-link ang posisyon-
dependent code sa isang shared object.

-mimpure-text pinipigilan ang "nananatili ang mga relokasyon laban sa mailalaan ngunit hindi maisusulat
sections" na mensahe ng error sa linker. Gayunpaman, ang mga kinakailangang relokasyon ay nagti-trigger ng copy-on-
magsulat, at ang ibinahaging bagay ay hindi aktwal na ibinabahagi sa mga proseso. sa halip na
paggamit -mimpure-text, dapat mong i-compile ang lahat ng source code gamit ang -fpic or -fPIC.

Ang mga switch na ito ay sinusuportahan bilang karagdagan sa itaas sa Solaris 2:

- mga thread
Magdagdag ng suporta para sa multithreading gamit ang POSIX threads library. Ang pagpipiliang ito ay nagtatakda
mga flag para sa parehong preprocessor at linker. Ang pagpipiliang ito ay hindi nakakaapekto sa thread
kaligtasan ng object code na ginawa ng compiler o ng mga library na ibinigay kasama nito.

-pthread
Ito ay kasingkahulugan ng - mga thread.

SPARC Options

mga ito -m ang mga opsyon ay sinusuportahan sa SPARC:

-mno-app-regs
-mapp-regs
Tukuyin -mapp-regs upang makabuo ng output gamit ang mga global na rehistro 2 hanggang 4, na
ang SPARC SVR4 ABI na inilalaan para sa mga aplikasyon. Tulad ng global register 1, bawat global
Ang rehistro 2 hanggang 4 ay ituturing na isang rehistro na inilalaan na na-clobbered ng
mga function na tawag. Ito ang default.

Upang maging ganap na sumusunod sa SVR4 ABI sa halaga ng ilang pagkawala ng pagganap, tukuyin
-mno-app-regs. Dapat kang mag-compile ng mga aklatan at software ng system gamit ang opsyong ito.

-mflat
-mno-flat
may -mflat, ang compiler ay hindi bumubuo ng save/restore na mga tagubilin at gumagamit ng a
"flat" o single register window model. Ang modelong ito ay katugma sa regular
irehistro ang modelo ng window. Ang mga lokal na rehistro at ang mga rehistro ng input (0--5) ay pa rin
itinuturing bilang "call-save" na mga rehistro at ini-save sa stack kung kinakailangan.

may -mno-flat (ang default), ang compiler ay bumubuo ng mga tagubilin sa pag-save/pag-restore (maliban
para sa mga function ng dahon). Ito ang normal na operating mode.

-mfpu
-mhard-float
Bumuo ng output na naglalaman ng mga floating-point na mga tagubilin. Ito ang default.

-mno-fpu
-msoft-float
Bumuo ng output na naglalaman ng mga tawag sa library para sa floating point. Babala: ang kailangan
Ang mga aklatan ay hindi magagamit para sa lahat ng mga target ng SPARC. Karaniwan ang mga pasilidad ng
ginagamit ang karaniwang C compiler ng machine, ngunit hindi ito maaaring gawin nang direkta sa cross-
compilation. Dapat kang gumawa ng iyong sariling mga pagsasaayos upang magbigay ng angkop na aklatan
mga function para sa cross-compilation. Ang mga naka-embed na target sparc-*-aout at sparclite-*-*
magbigay ng software floating-point support.

-msoft-float binabago ang calling convention sa output file; samakatuwid, ito ay lamang
kapaki-pakinabang kung mag-compile ka lahat ng isang programa na may ganitong opsyon. Sa partikular, kailangan mo
sumulat ng libro libgcc.a, ang library na kasama ng GCC, na may -msoft-float para dito
upang gumana.

-mhard-quad-float
Bumuo ng output na naglalaman ng quad-word (long double) floating-point na mga tagubilin.

-msoft-quad-float
Bumuo ng output na naglalaman ng mga tawag sa library para sa quad-word (long double) floating-point
mga tagubilin. Ang mga function na tinatawag ay ang mga tinukoy sa SPARC ABI. Ito ang
default.

Sa pagsulat na ito, walang mga pagpapatupad ng SPARC na mayroong suporta sa hardware
ang quad-word floating-point na mga tagubilin. Lahat sila ay humihingi ng trap handler para sa isa sa
ang mga tagubiling ito, at pagkatapos ay ginagaya ng tagapangasiwa ng bitag ang epekto ng pagtuturo.
Dahil sa trap handler overhead, ito ay mas mabagal kaysa sa pagtawag sa ABI library
mga gawain. Kaya, ang -msoft-quad-float ang pagpipilian ay ang default.

-mno-unaaligned-doubles
-munaligned-double
Ipagpalagay na ang mga doble ay may 8-byte na pagkakahanay. Ito ang default.

may -munaligned-double, ipinapalagay ng GCC na ang mga double ay may 8-byte na pagkakahanay lamang kung sila
ay nakapaloob sa ibang uri, o kung mayroon silang ganap na address. Kung hindi, ito
Ipinapalagay na mayroon silang 4-byte na pagkakahanay. Ang pagtukoy sa opsyong ito ay maiiwasan ang ilang bihira
mga problema sa compatibility sa code na nabuo ng iba pang compiler. Hindi ito ang default
dahil nagreresulta ito sa pagkawala ng pagganap, lalo na para sa floating-point code.

-muser-mode
-mno-user-mode
Huwag bumuo ng code na maaari lamang tumakbo sa supervisor mode. Ito ay may kaugnayan lamang para sa
ang "casa" na pagtuturo na inilabas para sa LEON3 processor. Ito ang default.

-mno-faster-structs
-mfaster-structs
may -mfaster-structs, ipinapalagay ng compiler na ang mga istruktura ay dapat may 8-byte
pagkakahanay. Ito ay nagbibigay-daan sa paggamit ng mga pares ng "ldd" at "std" na mga tagubilin para sa mga kopya
sa pagtatalaga ng istraktura, bilang kapalit ng dobleng dami ng "ld" at "st" na mga pares. Gayunpaman, ang
direktang lumalabag sa SPARC ABI ang paggamit ng binagong pagkakahanay na ito. Kaya, ito ay inilaan
para lamang sa paggamit sa mga target kung saan kinikilala ng developer na ang kanilang resultang code ay
hindi direktang naaayon sa mga patakaran ng ABI.

-mcpu=cpu_type
Itakda ang set ng pagtuturo, set ng rehistro, at mga parameter ng pag-iiskedyul ng pagtuturo
Tipo ng makina cpu_type. Mga sinusuportahang halaga para sa cpu_type ay v7, saypres, v8, supersparc,
hypersparc, Leon, leon3, leon3v7, sparclite, f930, f934, sparclite86x, sparklet,
tsc701, v9, ultrasparc, ultrasparc3, niagara, niagara2, niagara3 at niagara4.

Sinusuportahan din ng mga Native Solaris at GNU/Linux toolchain ang halaga katutubo, na pumipili
ang pinakamahusay na opsyon sa arkitektura para sa host processor. -mcpu=katutubo walang epekto kung
Hindi kinikilala ng GCC ang processor.

Ang mga default na parameter ng pag-iiskedyul ng pagtuturo ay ginagamit para sa mga halaga na pumipili ng isang
arkitektura at hindi isang pagpapatupad. Ang mga ito ay v7, v8, sparclite, sparklet, v9.

Narito ang isang listahan ng bawat suportadong arkitektura at ang kanilang mga sinusuportahang pagpapatupad.

v7 cypress, leon3v7

v8 supersparc, hypersparc, leon, leon3

sparclite
f930, f934, sparclite86x

sparklet
tsc701

v9 ultrasparc, ultrasparc3, ​​niagara, niagara2, niagara3, niagara4

Bilang default (maliban kung naka-configure kung hindi), bumubuo ang GCC ng code para sa V7 na variant ng
Arkitektura ng SPARC. Sa -mcpu=cypress, ang compiler ay nag-o-optimize din para dito
ang Cypress CY7C602 chip, gaya ng ginamit sa SPARCStation/SPARCServer 3xx series. Ito ay
angkop din para sa mas lumang SPARCStation 1, 2, IPX atbp.

may -mcpu=v8, bumubuo ang GCC ng code para sa variant ng V8 ng arkitektura ng SPARC. Ang
Ang pagkakaiba lamang sa V7 code ay ang compiler ay nagpapalabas ng integer multiply at
integer divide instructions na umiiral sa SPARC-V8 ngunit hindi sa SPARC-V7. Sa
-mcpu=supersparc, ang compiler din ay ino-optimize ito para sa SuperSPARC chip, bilang
ginamit sa SPARCStation 10, 1000 at 2000 series.

may -mcpu=sparclite, bumubuo ang GCC ng code para sa variant ng SPARClite ng SPARC
arkitektura. Ito ay nagdaragdag ng integer multiply, integer divide step at scan ("ffs")
mga tagubilin na umiiral sa SPARClite ngunit hindi sa SPARC-V7. Sa -mcpu=f930, ang
Ang compiler ay nag-o-optimize din para sa Fujitsu MB86930 chip, na siyang orihinal
SPARClite, na walang FPU. Sa -mcpu=f934, ang compiler ay nag-o-optimize din para dito
ang Fujitsu MB86934 chip, na siyang pinakahuling SPARClite na may FPU.

may -mcpu=sparclet, bumubuo ang GCC ng code para sa variant ng SPARClet ng SPARC
arkitektura. Idinaragdag nito ang integer multiply, multiply/accumulate, integer divide
hakbang at i-scan ("ffs") na mga tagubilin na umiiral sa SPARClet ngunit wala sa SPARC-V7. Sa
-mcpu=tsc701, ang compiler ay nag-o-optimize din para sa TEMIC SPARClet chip.

may -mcpu=v9, bumubuo ang GCC ng code para sa variant ng V9 ng arkitektura ng SPARC. Ito
nagdaragdag ng 64-bit integer at floating-point na mga tagubilin sa paglipat, 3 karagdagang floating-point
mga rehistro ng code ng kondisyon at mga tagubilin sa paglipat ng kondisyon. Sa -mcpu=ultraparc,
ang compiler din ay ino-optimize ito para sa Sun UltraSPARC I/II/IIi chips. Sa
-mcpu=ultraparc3, ang compiler ay nag-o-optimize din nito para sa Sun UltraSPARC
III/III+/IIIi/IIIi+/IV/IV+ chips. Sa -mcpu=niagara, ang compiler din
ino-optimize ito para sa Sun UltraSPARC T1 chips. Sa -mcpu=niagara2, ang compiler
Bukod pa rito, ino-optimize ito para sa Sun UltraSPARC T2 chips. Sa -mcpu=niagara3, ang
Ang compiler ay nag-o-optimize din nito para sa Sun UltraSPARC T3 chips. Sa -mcpu=niagara4,
ang compiler din ay ino-optimize ito para sa Sun UltraSPARC T4 chips.

-mtune=cpu_type
Itakda ang mga parameter ng pag-iiskedyul ng pagtuturo para sa uri ng makina cpu_type, ngunit huwag itakda
ang set ng pagtuturo o set ng rehistro na ang opsyon -mcpu=cpu_type ang.

Ang parehong mga halaga para sa -mcpu=cpu_type maaaring gamitin para sa -mtune=cpu_type, ngunit ang nag-iisa lamang
Ang mga kapaki-pakinabang na halaga ay ang mga pumipili ng partikular na pagpapatupad ng CPU. Ang mga iyon ay
saypres, supersparc, hypersparc, Leon, leon3, leon3v7, f930, f934, sparclite86x,
tsc701, ultrasparc, ultrasparc3, niagara, niagara2, niagara3 at niagara4. May
katutubong Solaris at GNU/Linux toolchain, katutubo maaari ring gamitin.

-mv8plus
-mno-v8plus
may -mv8plus, bumubuo ang GCC ng code para sa SPARC-V8+ ABI. Ang pagkakaiba mula sa V8
Ang ABI ay ang global at out na mga rehistro ay itinuturing na 64 bits ang lapad. Ito ay pinagana
bilang default sa Solaris sa 32-bit mode para sa lahat ng SPARC-V9 processor.

-mvis
-mno-vis
may -mvis, ang GCC ay bumubuo ng code na sinasamantala ang UltraSPARC Visual
Mga extension ng Instruction Set. Ang default ay -mno-vis.

-mvis2
-mno-vis2
may -mvis2, bumubuo ang GCC ng code na sinasamantala ang bersyon 2.0 ng UltraSPARC
Mga extension ng Visual Instruction Set. Ang default ay -mvis2 kapag tinatarget ang isang cpu na
sumusuporta sa mga naturang tagubilin, tulad ng UltraSPARC-III at mas bago. Setting -mvis2 Rin
set -mvis.

-mvis3
-mno-vis3
may -mvis3, bumubuo ang GCC ng code na sinasamantala ang bersyon 3.0 ng UltraSPARC
Mga extension ng Visual Instruction Set. Ang default ay -mvis3 kapag tinatarget ang isang cpu na
sumusuporta sa mga naturang tagubilin, tulad ng niagara-3 at mas bago. Setting -mvis3 nagtatakda din
-mvis2 at -mvis.

-mcbcond
-mno-cbcond
may -mcbcond, bumubuo ang GCC ng code na sinasamantala ang compare-and-branch
mga tagubilin, gaya ng tinukoy sa Sparc Architecture 2011. Ang default ay -mcbcond kailan
pag-target sa isang cpu na sumusuporta sa mga naturang tagubilin, gaya ng niagara-4 at mas bago.

-mpopc
-mno-popc
may -mpopc, bumubuo ang GCC ng code na sinasamantala ang populasyon ng UltraSPARC
pagtuturo ng bilang. Ang default ay -mpopc kapag nagta-target ng cpu na sumusuporta sa ganoon
mga tagubilin, tulad ng Niagara-2 at mas bago.

-mfmaf
-mno-fmaf
may -mfmaf, bumubuo ang GCC ng code na sinasamantala ang UltraSPARC Fused Multiply-
Magdagdag ng mga extension ng Floating-point. Ang default ay -mfmaf kapag tinatarget ang isang cpu na
sumusuporta sa mga naturang tagubilin, tulad ng Niagara-3 at mas bago.

-mfix-at697f
I-enable ang dokumentadong workaround para sa iisang erratum ng processor ng Atmel AT697F
(na tumutugma sa erratum #13 ng processor ng AT697E).

-mfix-ut699
I-enable ang mga nakadokumentong workaround para sa floating-point errata at ang data cache
mapawalang-bisa ang errata ng UT699 processor.

mga ito -m sinusuportahan ang mga opsyon bilang karagdagan sa itaas sa mga processor ng SPARC-V9 sa 64-bit
mga kapaligiran:

-m32
-m64
Bumuo ng code para sa isang 32-bit o 64-bit na kapaligiran. Ang 32-bit na kapaligiran ay nagtatakda ng int,
mahaba at pointer sa 32 bits. Ang 64-bit na kapaligiran ay nagtatakda ng int sa 32 bits at mahaba at
pointer sa 64 bits.

-mcmodel=alin
Itakda ang modelo ng code sa isa sa

medlow
Ang modelo ng Medium/Low code: 64-bit na mga address, dapat na naka-link ang mga program sa mababang 32
mga piraso ng memorya. Maaaring i-static o dynamic na naka-link ang mga program.

medmid
Ang modelo ng Medium/Middle code: 64-bit na mga address, dapat na naka-link ang mga program sa mababa
Ang 44 bits ng memorya, ang mga segment ng text at data ay dapat na mas mababa sa 2GB ang laki at
ang data segment ay dapat na nasa loob ng 2GB ng text segment.

Medaniya
Ang modelo ng code ng Medium/Anywhere: 64-bit na mga address, maaaring i-link ang mga program kahit saan
sa memorya, ang mga segment ng text at data ay dapat na mas mababa sa 2GB ang laki at ang data
Ang segment ay dapat na nasa loob ng 2GB ng text segment.

embmedany
Ang modelo ng code ng Medium/Anywhere para sa mga naka-embed na system: 64-bit na mga address, ang text
at ang mga segment ng data ay dapat na mas mababa sa 2GB ang laki, parehong nagsisimula saanman sa memorya
(natukoy sa oras ng pag-link). Ang global register na %g4 ay tumuturo sa base ng data
segment. Statically linked ang mga program at hindi sinusuportahan ang PIC.

-mmemory-modelo=mem-modelo
Itakda ang memory model sa puwersa sa processor sa isa sa

default
Ang default na modelo ng memorya para sa processor at operating system.

rmo Nakaka-relax na Memory Order

pso Bahagyang Order sa Tindahan

TSOs Kabuuang Order sa Tindahan

sc Sequential Consistency

Ang mga modelong ito ng memorya ay pormal na tinukoy sa Appendix D ng arkitektura ng Sparc V9
manual, gaya ng itinakda sa field na "PSTATE.MM" ng processor.

-mstack-bias
-mno-stack-bias
may -mstack-bias, ipinapalagay ng GCC na ang stack pointer, at frame pointer kung naroroon,
ay na-offset ng -2047 na dapat idagdag pabalik kapag gumagawa ng mga sanggunian ng stack frame. Ito
ay ang default sa 64-bit na mode. Kung hindi, ipagpalagay na walang ganoong offset.

SPU Options

mga ito -m ang mga opsyon ay sinusuportahan sa SPU:

-mwarn-reloc
-merror-reloc
Ang loader para sa SPU ay hindi humahawak ng mga dynamic na relokasyon. Bilang default, nagbibigay ang GCC ng isang
error kapag bumubuo ito ng code na nangangailangan ng dynamic na relokasyon. -mno-error-reloc
hindi pinapagana ang error, -mwarn-reloc sa halip ay bumubuo ng babala.

-msafe-dma
-munsafe-dma
Ang mga tagubilin na nagpapasimula o sumusubok sa pagkumpleto ng DMA ay hindi dapat muling ayusin
paggalang sa mga naglo-load at mga tindahan ng memorya na ina-access. Sa -munsafe-dma
dapat mong gamitin ang "volatile" na keyword upang protektahan ang mga pag-access sa memorya, ngunit maaari itong humantong sa
hindi mahusay na code sa mga lugar kung saan ang memorya ay kilala na hindi nagbabago. Kaysa kay mark
ang memorya bilang pabagu-bago, maaari mong gamitin -msafe-dma para sabihin sa compiler na gamutin ang DMA
mga tagubilin bilang potensyal na nakakaapekto sa lahat ng memorya.

-mbranch-pahiwatig
Bilang default, bumubuo ang GCC ng tagubilin sa pahiwatig ng sangay upang maiwasan ang mga pipeline stall
laging kinukuha o malamang na kinukuha na mga sanga. Ang isang pahiwatig ay hindi nabuo nang mas malapit sa 8
mga tagubilin na malayo sa sangay nito. Mayroong maliit na dahilan upang huwag paganahin ang mga ito, maliban sa
mga layunin ng pag-debug, o upang gawing mas maliit ng kaunti ang isang bagay.

-msmall-mem
-mlarge-mem
Bilang default, ang GCC ay bumubuo ng code sa pag-aakalang ang mga address ay hindi kailanman mas malaki sa 18 bits.
may -mlarge-mem nabuo ang code na nagpapalagay ng buong 32-bit na address.

-mstdmain
Bilang default, nagli-link ang GCC laban sa startup code na ipinapalagay ang SPU-style na pangunahing function
interface (na mayroong isang hindi kinaugalian na listahan ng parameter). Sa -mstdmain, mga link ng GCC
ang iyong programa laban sa startup code na ipinapalagay ang isang C99-style na interface sa "pangunahing",
kabilang ang isang lokal na kopya ng "argv" na mga string.

-mfixed-range=rehistro-saklaw
Bumuo ng code na tinatrato ang ibinigay na hanay ng rehistro bilang mga nakapirming rehistro. Isang nakapirming rehistro
ay isa na hindi magagamit ng register allocator. Ito ay kapaki-pakinabang kapag nag-compile ng kernel
code. Ang isang hanay ng rehistro ay tinukoy bilang dalawang rehistro na pinaghihiwalay ng isang gitling. Maramihan
Maaaring tukuyin ang mga hanay ng rehistro na pinaghihiwalay ng kuwit.

-mea32
-mea64
Mag-compile ng code na ipinapalagay na ang mga pointer sa PPU address space na na-access sa pamamagitan ng "__ea"
Ang pinangalanang address space qualifier ay alinman sa 32 o 64 bits ang lapad. Ang default ay 32 bits.
Dahil isa itong opsyon sa pagpapalit ng ABI, dapat i-compile ang lahat ng object code sa isang executable
na may parehong setting.

-maddress-space-conversion
-mno-address-space-conversion
Payagan/huwag payagan ang pagtrato sa "__ea" address space bilang superset ng generic na address
space. Nagbibigay-daan ito sa mga tahasang uri ng cast sa pagitan ng "__ea" at generic na pointer pati na rin
mga implicit na conversion ng mga generic na pointer sa "__ea" pointer. Ang default ay payagan
address space pointer conversion.

-mcache-size=laki ng cache
Kinokontrol ng opsyong ito ang bersyon ng libgcc na ini-link ng compiler sa isang executable
at pumipili ng cache na pinamamahalaan ng software para sa pag-access ng mga variable sa "__ea" na address
espasyo na may partikular na laki ng cache. Mga posibleng opsyon para sa laki ng cache ay 8, 16, 32, 64
at 128. Ang default na laki ng cache ay 64KB.

-matomic-update
-mno-atomic-update
Kinokontrol ng opsyong ito ang bersyon ng libgcc na ini-link ng compiler sa isang executable
at pinipili kung ang mga atomic na update sa software-managed cache ng PPU-side variable
ay ginamit. Kung gumagamit ka ng mga atomic update, mga pagbabago sa isang PPU variable mula sa SPU code gamit
ang "__ea" na pinangalanang address space qualifier ay hindi nakakasagabal sa mga pagbabago sa ibang PPU
mga variable na naninirahan sa parehong linya ng cache mula sa PPU code. Kung hindi ka gumagamit ng atomic
mga update, maaaring mangyari ang ganitong interference; gayunpaman, ang pagsusulat pabalik ng mga linya ng cache ay higit pa
mabisa. Ang default na gawi ay ang paggamit ng mga atomic update.

-mdual-nops
-mdual-nops=n
Bilang default, ang GCC ay naglalagay ng mga nops upang madagdagan ang dalawahang isyu kapag inaasahan nitong tataas ito
pagganap. n ay maaaring isang halaga mula 0 hanggang 10. Ang isang mas maliit n nagsingit ng mas kaunting nops. 10 ay
ang default, 0 ay kapareho ng -mno-dual-nops. Naka-disable sa -Os.

-mhint-max-nops=n
Maximum na bilang ng mga nops na ilalagay para sa hint ng branch. Ang pahiwatig ng sangay ay dapat na hindi bababa sa 8
mga tagubilin na malayo sa sangay na naaapektuhan nito. GCC inserts hanggang sa n nops to
ipatupad ito, kung hindi, hindi ito bubuo ng hint ng sangay.

-mhint-max-distance=n
Nililimitahan ng pag-encode ng pagtuturo ng hint ng branch ang hint na nasa loob ng 256
tagubilin ng sangay na naaapektuhan nito. Bilang default, tinitiyak ng GCC na nasa loob ito
125.

-msafe-pahiwatig
Mag-ayos ng hardware bug na nagiging sanhi ng paghinto ng SPU nang walang katapusan. Bilang default, GCC
ipinapasok ang "hbrp" na tagubilin upang matiyak na hindi mangyayari ang stall na ito.

Options para Sistema V

Ang mga karagdagang opsyon na ito ay available sa System V Release 4 para sa compatibility sa iba
compiler sa mga system na iyon:

-G Lumikha ng isang nakabahaging bagay. Inirerekomenda na -simboliko or -ibinahagi gamitin sa halip.

-Qy Tukuyin ang mga bersyon ng bawat tool na ginagamit ng compiler, sa isang ".ident" assembler
direktiba sa output.

-Qn Iwasang magdagdag ng ".ident" na mga direktiba sa output file (ito ang default).

-YP,dirs
Maghanap sa mga direktoryo dirs, at walang iba, para sa mga aklatan na tinukoy sa -l.

-Ym,dir
Tumingin sa direktoryo dir upang mahanap ang M4 preprocessor. Ginagamit ito ng assembler
pagpipilian.

TILE-Gx Options

mga ito -m ang mga opsyon ay sinusuportahan sa TILE-Gx:

-mcmodel=maliit
Bumuo ng code para sa maliit na modelo. Ang distansya para sa mga direktang tawag ay limitado sa 500M
sa alinmang direksyon. Ang mga address ng PC-relative ay 32 bits. Suporta sa ganap na address
ang buong hanay ng address.

-mcmodel=malaki
Bumuo ng code para sa malaking modelo. Walang limitasyon sa distansya ng tawag, pc-
mga kamag-anak na address, o ganap na mga address.

-mcpu=pangalan
Pinipili ang uri ng CPU na ita-target. Sa kasalukuyan ang tanging sinusuportahang uri ay Tilegx.

-m32
-m64
Bumuo ng code para sa isang 32-bit o 64-bit na kapaligiran. Ang 32-bit na kapaligiran ay nagtatakda ng int,
mahaba, at pointer sa 32 bits. Ang 64-bit na kapaligiran ay nagtatakda ng int sa 32 bits at mahaba at
pointer sa 64 bits.

-big-endian
-mlittle-endian
Bumuo ng code sa malaki/maliit na endian mode, ayon sa pagkakabanggit.

TILEPro Options

mga ito -m ang mga opsyon ay sinusuportahan sa TILEPro:

-mcpu=pangalan
Pinipili ang uri ng CPU na ita-target. Sa kasalukuyan ang tanging sinusuportahang uri ay tilepro.

-m32
Bumuo ng code para sa isang 32-bit na kapaligiran, na nagtatakda ng int, mahaba, at pointer sa 32 bits.
Ito ang tanging sinusuportahang pag-uugali kaya ang watawat ay mahalagang binabalewala.

V850 Options

mga ito -m ang mga opsyon ay tinukoy para sa mga pagpapatupad ng V850:

-mlong-tawag
-mno-mahabang-tawag
Ituring ang lahat ng tawag bilang malayo (malapit). Kung ang mga tawag ay ipinapalagay na malayo, ang
palaging nilo-load ng compiler ang address ng function sa isang rehistro, at hindi direktang tumatawag
sa pamamagitan ng pointer.

-mno-ep
-mep
Huwag i-optimize (i-optimize) ang mga pangunahing bloke na gumagamit ng parehong index pointer 4 o higit pa
beses upang kopyahin ang pointer sa rehistro ng "ep", at gamitin ang mas maikling "sld" at "sst"
mga tagubilin. Ang -mep naka-on ang opsyon bilang default kung nag-optimize ka.

-mno-prolog-function
-mprolog-function
Huwag gumamit (gumamit) ng mga panlabas na function upang i-save at ibalik ang mga rehistro sa prologue
at epilogue ng isang function. Ang mga panlabas na function ay mas mabagal, ngunit gumagamit ng mas kaunting code
space kung higit sa isang function ang nagse-save ng parehong bilang ng mga rehistro. Ang
-mprolog-function naka-on ang opsyon bilang default kung nag-optimize ka.

-mspace
Subukang gawing maliit ang code hangga't maaari. Sa kasalukuyan, ito ay naka-on lamang sa -mep
at -mprolog-function mga pagpipilian.

-mtda=n
Maglagay ng mga static o global variable na ang laki ay n byte o mas kaunti sa maliit na lugar ng data
na itinuturo ng rehistrong "ep" ang. Ang maliit na lugar ng data ay maaaring magkaroon ng hanggang 256 byte sa kabuuan
(128 byte para sa byte reference).

-msda=n
Maglagay ng mga static o global variable na ang laki ay n byte o mas mababa sa maliit na lugar ng data
na nagrerehistro "gp" tumuturo sa. Ang maliit na lugar ng data ay maaaring magkaroon ng hanggang 64 kilobytes.

-mzda=n
Maglagay ng mga static o global variable na ang laki ay n byte o mas mababa sa unang 32
kilobytes ng memorya.

-mv850
Tukuyin na ang target na processor ay ang V850.

-mv850e3v5
Tukuyin na ang target na processor ay ang V850E3V5. Ang preprocessor pare-pareho
Tinutukoy ang "__v850e3v5__" kung gagamitin ang opsyong ito.

-mv850e2v4
Tukuyin na ang target na processor ay ang V850E3V5. Ito ay isang alias para sa
-mv850e3v5 pagpipilian.

-mv850e2v3
Tukuyin na ang target na processor ay ang V850E2V3. Ang preprocessor pare-pareho
Tinutukoy ang "__v850e2v3__" kung gagamitin ang opsyong ito.

-mv850e2
Tukuyin na ang target na processor ay ang V850E2. Ang preprocessor pare-pareho
Tinutukoy ang "__v850e2__" kung gagamitin ang opsyong ito.

-mv850e1
Tukuyin na ang target na processor ay ang V850E1. Ang preprocessor ay patuloy
Tinutukoy ang "__v850e1__" at "__v850e__" kung gagamitin ang opsyong ito.

-mv850es
Tukuyin na ang target na processor ay ang V850ES. Ito ay isang alias para sa -mv850e1
pagpipilian.

-mv850e
Tukuyin na ang target na processor ay ang V850E. Ang preprocessor constant na "__v850e__"
ay tinukoy kung ang opsyon na ito ay ginagamit.

Kung wala man -mv850 ni -mv850e ni -mv850e1 ni -mv850e2 ni -mv850e2v3 ni -mv850e3v5
ay tinukoy pagkatapos ay pipiliin ang isang default na target na processor at ang nauugnay __v850*__
Ang pare-pareho ng preprocessor ay tinukoy.

Ang mga preprocessor constant na "__v850" at "__v851__" ay palaging tinutukoy, anuman ang
aling variant ng processor ang target.

-i-disable-callt
-mno-disable-callt
Pinipigilan ng opsyong ito ang pagbuo ng pagtuturo na "CALLT" para sa v850e, v850e1,
v850e2, v850e2v3 at v850e3v5 na lasa ng v850 na arkitektura.

Ang opsyong ito ay pinagana bilang default kapag ang RH850 ABI ay ginagamit (tingnan -mrh850-abi), At
hindi pinagana bilang default kapag ginagamit ang GCC ABI. Kung ang "CALLT" na mga tagubilin ay ginagawa
nabuo pagkatapos ay tinukoy ang simbolo ng C preprocessor na "__V850_CALLT__".

-magpahinga
-mno-relax
Ipasa (o huwag ipasa) ang -magpahinga command-line na opsyon sa assembler.

-mlong-tumalon
-mno-long-jumps
Huwag paganahin (o muling paganahin) ang pagbuo ng mga tagubilin sa pagtalon na nauugnay sa PC.

-msoft-float
-mhard-float
Huwag paganahin (o muling paganahin) ang pagbuo ng mga tagubilin sa floating point ng hardware. Ito
ang opsyon ay makabuluhan lamang kapag ang target na arkitektura ay V850E2V3 o mas mataas. Kung
Ang mga tagubilin sa floating point ng hardware ay nabuo pagkatapos ay ang C preprocessor
ang simbolo na "__FPU_OK__" ay tinukoy, kung hindi ang simbolo na "__NO_FPU__" ay tinukoy.

-mloop
Pinapagana ang paggamit ng pagtuturo ng e3v5 LOOP. Ang paggamit ng pagtuturo na ito ay hindi
naka-enable bilang default kapag ang e3v5 architecture ay napili dahil ang paggamit nito ay pa rin
pang-eksperimento.

-mrh850-abi
-mghs
Pinapagana ang suporta para sa RH850 na bersyon ng V850 ABI. Ito ang default. Sa
ang bersyong ito ng ABI ay nalalapat ang mga sumusunod na panuntunan:

* Ang mga istruktura at unyon na may sukat na integer ay ibinabalik sa pamamagitan ng isang memory pointer sa halip na
isang rehistro.

* Ang mga malalaking istruktura at unyon (higit sa 8 byte ang laki) ay ipinapasa sa halaga.

* Ang mga function ay nakahanay sa 16-bit na mga hangganan.

* Ang -m8byte-align Ang opsyon sa command-line ay suportado.

* Ang -i-disable-callt Ang opsyon sa command-line ay pinagana bilang default. Ang
-mno-disable-callt Hindi suportado ang opsyon sa command-line.

Kapag ang bersyong ito ng ABI ay pinagana ang C preprocessor na simbolo na "__V850_RH850_ABI__"
ay tinukoy.

-mgcc-abi
Pinapagana ang suporta para sa lumang bersyon ng GCC ng V850 ABI. Sa bersyong ito ng ABI
ang mga sumusunod na patakaran ay nalalapat:

* Ang mga istruktura at unyon na may sukat na integer ay ibinalik sa rehistrong "r10".

* Ang malalaking istruktura at unyon (higit sa 8 byte ang laki) ay ipinapasa sa pamamagitan ng sanggunian.

* Ang mga function ay nakahanay sa 32-bit na mga hangganan, maliban kung nag-o-optimize para sa laki.

* Ang -m8byte-align Hindi suportado ang opsyon sa command-line.

* Ang -i-disable-callt Ang opsyon sa command-line ay sinusuportahan ngunit hindi pinagana bilang default.

Kapag ang bersyong ito ng ABI ay pinagana ang C preprocessor na simbolo na "__V850_GCC_ABI__"
ay tinukoy.

-m8byte-align
-mno-8byte-align
Pinapagana ang suporta para sa mga uri ng "double" at "mahaba ang haba" na ihanay sa 8-byte na mga hangganan.
Ang default ay upang paghigpitan ang pagkakahanay ng lahat ng mga bagay sa hindi hihigit sa 4-bytes. Kailan
-m8byte-align ay may bisa ang C preprocessor na simbolo na "__V850_8BYTE_ALIGN__" ay
tinukoy.

-big-switch
Bumuo ng code na angkop para sa malalaking switch table. Gamitin lamang ang opsyong ito kung ang
nagrereklamo ang assembler/linker tungkol sa mga sanga na wala sa hanay sa loob ng switch table.

-mapp-regs
Ang pagpipiliang ito ay nagdudulot ng r2 at r5 na magamit sa code na nabuo ng compiler. Ito
ang setting ay ang default.

-mno-app-regs
Ang pagpipiliang ito ay nagiging sanhi ng r2 at r5 na ituring bilang mga nakapirming rehistro.

VAX Options

mga ito -m ang mga opsyon ay tinukoy para sa VAX:

-munix
Huwag mag-output ng ilang mga tagubilin sa pagtalon ("aobleq" at iba pa) na ang Unix assembler
para sa VAX ay hindi maaaring humawak sa mahabang hanay.

-mgnu
Gawin ang output ng mga tagubilin sa pagtalon, sa pag-aakalang ang GNU assembler ay
ginagamit.

-mg Output code para sa G-format na mga floating-point na numero sa halip na D-format.

Visium Options

-mdebug
Ang isang program na gumaganap ng file I/O at nakatakdang tumakbo sa isang MCM target ay dapat na
naka-link sa opsyong ito. Nagdudulot ito ng pagkakaugnay ng mga aklatan libc.a at libdebug.a.
Ang programa ay dapat na tumakbo sa target sa ilalim ng kontrol ng GDB remote debugging
usbong.

-msim
Ang isang program na gumaganap ng file I/O at nakatakdang tumakbo sa simulator ay dapat na
naka-link sa opsyon. Nagdudulot ito ng pagkakaugnay ng mga aklatan libc.a at libsim.a.

-mfpu
-mhard-float
Bumuo ng code na naglalaman ng mga floating-point na mga tagubilin. Ito ang default.

-mno-fpu
-msoft-float
Bumuo ng code na naglalaman ng mga tawag sa library para sa floating-point.

-msoft-float binabago ang calling convention sa output file; samakatuwid, ito ay lamang
kapaki-pakinabang kung mag-compile ka lahat ng isang programa na may ganitong opsyon. Sa partikular, kailangan mo
sumulat ng libro libgcc.a, ang library na kasama ng GCC, na may -msoft-float para dito
upang gumana.

-mcpu=cpu_type
Itakda ang set ng pagtuturo, set ng rehistro, at mga parameter ng pag-iiskedyul ng pagtuturo
Tipo ng makina cpu_type. Mga sinusuportahang halaga para sa cpu_type ay mcm, gr5 at gr6.

mcm ay kasingkahulugan ng gr5 naroroon para sa pabalik na pagkakatugma.

Bilang default (maliban kung naka-configure kung hindi), bumubuo ang GCC ng code para sa GR5 na variant ng
ang arkitektura ng Visium.

may -mcpu=gr6, bumubuo ang GCC ng code para sa variant ng GR6 ng arkitektura ng Visium.
Ang pagkakaiba lamang sa GR5 code ay ang compiler ay bubuo ng block move
mga tagubilin.

-mtune=cpu_type
Itakda ang mga parameter ng pag-iiskedyul ng pagtuturo para sa uri ng makina cpu_type, ngunit huwag itakda
ang set ng pagtuturo o set ng rehistro na ang opsyon -mcpu=cpu_type ay.

-msv-mode
Bumuo ng code para sa supervisor mode, kung saan walang mga paghihigpit sa pag-access
sa mga pangkalahatang rehistro. Ito ang default.

-muser-mode
Bumuo ng code para sa user mode, kung saan ang access sa ilang pangkalahatang mga rehistro ay
ipinagbabawal: sa GR5, ang mga rehistro ng r24 hanggang r31 ay hindi ma-access sa mode na ito; sa
GR6, registers r29 to r31 lang ang apektado.

VMS Options

mga ito -m ang mga opsyon ay tinukoy para sa mga pagpapatupad ng VMS:

-mvms-return-codes
Ibalik ang mga code ng kondisyon ng VMS mula sa "pangunahing". Ang default ay ibalik ang POSIX-style na kondisyon
(hal. error) mga code.

-mdebug-main=unlapi
I-flag ang unang gawain na ang pangalan ay nagsisimula sa unlapi bilang pangunahing gawain para sa
i-debug.

-mmalloc64
Default sa 64-bit memory allocation routines.

-laki ng pointer=laki
Itakda ang default na laki ng mga pointer. Mga posibleng opsyon para sa laki ay 32 or maikli para sa 32 bit
mga payo, 64 or mahaba para sa 64 bit pointer, at hindi para sa pagsuporta lamang sa 32 bit pointer.
Ang susunod na opsyon ay hindi pinapagana ang "pragma pointer_size".

VxWorks Options

Ang mga opsyon sa seksyong ito ay tinukoy para sa lahat ng mga target ng VxWorks. Mga opsyon na partikular sa
nakalista ang target na hardware kasama ng iba pang mga opsyon para sa target na iyon.

-mrtp
Maaaring bumuo ang GCC ng code para sa parehong mga kernel ng VxWorks at mga real time na proseso (RTP). Ito
Ang opsyon ay lumilipat mula sa una patungo sa huli. Tinutukoy din nito ang preprocessor macro
"__RTP__".

-hindi static
I-link ang isang RTP na maipapatupad laban sa mga shared library sa halip na mga static na library. Ang
pagpipilian -static at -ibinahagi maaari ding gamitin para sa mga RTP; -static ay ang default.

-Bstatic
-Bdynamic
Ang mga opsyong ito ay ipinasa sa linker. Ang mga ito ay tinukoy para sa pagiging tugma sa
Si Diab.

-Xbind-tamad
I-enable ang lazy binding ng mga function call. Ang pagpipiliang ito ay katumbas ng -Wl,-z, ngayon at ito ay
tinukoy para sa pagiging tugma sa Diab.

-Xbind-ngayon
I-disable ang lazy binding ng mga function call. Ang pagpipiliang ito ay ang default at tinukoy para sa
pagiging tugma sa Diab.

x86 Options

mga ito -m ang mga opsyon ay tinukoy para sa x86 na pamilya ng mga computer.

-martsa=uri ng cpu
Bumuo ng mga tagubilin para sa uri ng makina uri ng cpu. Salungat sa -mtune=uri ng cpu,
na tumutunog lamang sa nabuong code para sa tinukoy uri ng cpu, -martsa=uri ng cpu
nagbibigay-daan sa GCC na bumuo ng code na maaaring hindi tumakbo sa lahat ng mga processor maliban sa isa
ipinahiwatig. Tinutukoy -martsa=uri ng cpu nagpapahiwatig -mtune=uri ng cpu.

Ang mga pagpipilian para sa uri ng cpu ay:

katutubo
Pinipili nito ang CPU na bubuo ng code para sa oras ng compilation sa pamamagitan ng pagtukoy sa
uri ng processor ng compiling machine. Gamit -martsa=katutubo nagbibigay-daan sa lahat
mga subset ng pagtuturo na sinusuportahan ng lokal na makina (kaya maaaring hindi tumakbo ang resulta
sa iba't ibang makina). Gamit -mtune=katutubo gumagawa ng code na na-optimize para sa lokal
machine sa ilalim ng mga hadlang ng napiling set ng pagtuturo.

i386
Orihinal na Intel i386 na CPU.

i486
Intel i486 na CPU. (Walang ipinapatupad na pag-iskedyul para sa chip na ito.)

i586
pentium
Intel Pentium CPU na walang suporta sa MMX.

pentium-mmx
Intel Pentium MMX CPU, batay sa Pentium core na may suporta sa set ng pagtuturo ng MMX.

pentiumpro
Intel Pentium Pro CPU.

i686
Kapag ginamit sa -martsa, ginagamit ang set ng pagtuturo ng Pentium Pro, kaya tumatakbo ang code
sa lahat ng i686 family chips. Kapag ginamit sa -mtune, ito ay may parehong kahulugan bilang
panlahat.

Pentium 2
Intel Pentium II CPU, batay sa Pentium Pro core na may suporta sa set ng pagtuturo ng MMX.

Pentium 3
pentium3m
Intel Pentium III CPU, batay sa Pentium Pro core na may set ng pagtuturo ng MMX at SSE
support.

pentium-m
Intel Pentium M; mababang-kapangyarihan na bersyon ng Intel Pentium III CPU na may MMX, SSE at SSE2
suporta sa set ng pagtuturo. Ginamit ng mga notebook ng Centrino.

Pentium 4
pentium4m
Intel Pentium 4 CPU na may suporta sa set ng pagtuturo ng MMX, SSE at SSE2.

Prescott
Pinahusay na bersyon ng Intel Pentium 4 CPU na may pagtuturo ng MMX, SSE, SSE2 at SSE3
itakda ang suporta.

nocona
Pinahusay na bersyon ng Intel Pentium 4 CPU na may 64-bit extension, MMX, SSE, SSE2 at
Suporta sa set ng pagtuturo ng SSE3.

core2
Intel Core 2 CPU na may 64-bit na extension, MMX, SSE, SSE2, SSE3 at SSSE3
suporta sa set ng pagtuturo.

humihinga ako
Intel Nehalem CPU na may mga 64-bit na extension, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Suporta sa set ng pagtuturo ng SSE4.2 at POPCNT.

kanluranin
Intel Westmere CPU na may 64-bit na extension, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, POPCNT, AES at PCLMUL na suporta sa set ng pagtuturo.

sandybridge
Intel Sandy Bridge CPU na may 64-bit na extension, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AES at PCLMUL na suporta sa set ng pagtuturo.

ivybridge
Intel Ivy Bridge CPU na may 64-bit na extension, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, POPCNT, AVX, AES, PCLMUL, FSGSBASE, RDRND at F16C set ng pagtuturo
support.

Haswell
Intel Haswell CPU na may 64-bit na extension, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2
at suporta sa set ng pagtuturo ng F16C.

broadwell
Intel Broadwell CPU na may 64-bit na mga extension, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2,
F16C, RDSEED, ADCX at PREFETCHW na suporta sa set ng pagtuturo.

bonnell
Intel Bonnell CPU na may 64-bit na extension, MOVBE, MMX, SSE, SSE2, SSE3 at SSSE3
suporta sa set ng pagtuturo.

silvermont
Intel Silvermont CPU na may 64-bit na extension, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AES, PCLMUL at suporta sa set ng pagtuturo ng RDRND.

knl Ang Intel Knight's Landing CPU na may 64-bit na extension, 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 at AVX512CD
suporta sa set ng pagtuturo.

k6 AMD K6 CPU na may suporta sa set ng pagtuturo ng MMX.

k6-2
k6-3
Mga pinahusay na bersyon ng AMD K6 CPU na may MMX at 3DNow! suporta sa set ng pagtuturo.

athlon
athlon-tbird
AMD Athlon CPU na may MMX, 3dNOW!, pinahusay na 3DNow! at mga tagubilin sa prefetch ng SSE
support.

athlon-4
athlon-xp
athlon-mp
Pinahusay na AMD Athlon CPU na may MMX, 3DNow!, pinahusay na 3DNow! at buong pagtuturo ng SSE
itakda ang suporta.

k8
opteron
athlon64
athlon-fx
Mga processor batay sa AMD K8 core na may suporta sa set ng pagtuturo ng x86-64, kasama ang
ang mga processor ng AMD Opteron, Athlon 64, at Athlon 64 FX. (Itong supersets MMX,
SSE, SSE2, 3DNow!, pinahusay na 3DNow! at 64-bit na mga extension ng set ng pagtuturo.)

k8-sse3
opteron-sse3
athlon64-sse3
Mga pinahusay na bersyon ng mga AMD K8 core na may suporta sa set ng pagtuturo ng SSE3.

amdfam10
Barcelona
Mga CPU na batay sa AMD Family 10h core na may suporta sa set ng pagtuturo ng x86-64. (Ito
supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, pinahusay na 3DNow!, ABM at 64-bit
mga extension ng set ng pagtuturo.)

bdver1
Mga CPU na batay sa AMD Family 15h core na may suporta sa set ng pagtuturo ng x86-64. (Ito
mga superset na FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
SSSE3, SSE4.1, SSE4.2, ABM at 64-bit na mga extension ng set ng pagtuturo.)

bdver2
AMD Family 15h core based na mga CPU na may suporta sa set ng pagtuturo ng x86-64. (Ito
supersets BMI, TBM, F16C, FMA, FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE,
SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM at 64-bit na set ng pagtuturo
mga extension.)

bdver3
AMD Family 15h core based na mga CPU na may suporta sa set ng pagtuturo ng x86-64. (Ito
supersets BMI, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, XOP, LWP, AES, PCL_MUL, CX16,
MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM at 64-bit na set ng pagtuturo
mga extension.

bdver4
AMD Family 15h core based na mga CPU na may suporta sa set ng pagtuturo ng x86-64. (Ito
supersets BMI, BMI2, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, AVX2, XOP, LWP, AES,
PCL_MUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM at
64-bit na mga extension ng set ng pagtuturo.

btver1
Mga CPU na batay sa AMD Family 14h core na may suporta sa set ng pagtuturo ng x86-64. (Ito
mga superset na MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM at 64-bit na set ng pagtuturo
mga extension.)

btver2
Mga CPU batay sa AMD Family 16h core na may suporta sa set ng pagtuturo ng x86-64. Ito
kasama ang MOVBE, F16C, BMI, AVX, PCL_MUL, AES, SSE4.2, SSE4.1, CX16, ABM, SSE4A,
SSSE3, SSE3, SSE2, SSE, MMX at 64-bit na mga extension ng set ng pagtuturo.

winchip-c6
Ang IDT WinChip C6 CPU, ay hinarap sa parehong paraan tulad ng i486 na may karagdagang set ng pagtuturo ng MMX
support.

winchip2
IDT WinChip 2 CPU, hinarap sa parehong paraan tulad ng i486 na may karagdagang MMX at 3DNow!
suporta sa set ng pagtuturo.

c3 VIA C3 CPU na may MMX at 3DNow! suporta sa set ng pagtuturo. (Walang pag-iskedyul
ipinatupad para sa chip na ito.)

c3-2
VIA C3-2 (Nehemiah/C5XL) CPU na may suporta sa set ng pagtuturo ng MMX at SSE. (Hindi
ipinapatupad ang pag-iskedyul para sa chip na ito.)

geode
AMD Geode na naka-embed na processor na may MMX at 3DNow! suporta sa set ng pagtuturo.

-mtune=uri ng cpu
Tune to uri ng cpu lahat ng naaangkop tungkol sa nabuong code, maliban sa ABI
at ang hanay ng mga magagamit na tagubilin. Habang pumipili ng isang tiyak uri ng cpu iskedyul
bagay na naaangkop para sa partikular na chip, ang compiler ay hindi bumubuo ng anumang code
na hindi maaaring tumakbo sa default na uri ng makina maliban kung gumamit ka ng a -martsa=uri ng cpu pagpipilian.
Halimbawa, kung naka-configure ang GCC para sa i686-pc-linux-gnu -mtune=pentium4 bumubuo
code na nakatutok para sa Pentium 4 ngunit tumatakbo pa rin sa mga makinang i686.

Ang mga pagpipilian para sa uri ng cpu ay katulad ng para sa -martsa. At saka, -mtune sumusuporta 2
karagdagang mga pagpipilian para sa uri ng cpu:

panlahat
Gumawa ng code na na-optimize para sa pinakakaraniwang mga processor ng IA32/AMD64/EM64T. kung ikaw
alamin ang CPU kung saan tatakbo ang iyong code, pagkatapos ay dapat mong gamitin ang kaukulang
-mtune or -martsa opsyon sa halip na -mtune=generic. Pero, kung hindi mo alam
kung ano mismo ang mayroon ang mga gumagamit ng CPU ng iyong application, pagkatapos ay dapat mong gamitin ito
pagpipilian.

Habang naka-deploy ang mga bagong processor sa marketplace, ang pag-uugali ng opsyong ito
magbabago. Samakatuwid, kung mag-upgrade ka sa isang mas bagong bersyon ng GCC, pagbuo ng code
na kinokontrol ng opsyong ito ay magbabago upang ipakita ang mga processor na karamihan
karaniwan sa oras na ang bersyon na iyon ng GCC ay inilabas.

Walang -march=generic option kasi -martsa nagsasaad ng pagtuturo itakda ang
maaaring gamitin ng compiler, at walang generic na set ng pagtuturo na naaangkop sa lahat
mga processor. Sa kaibahan, -mtune ay nagpapahiwatig ng processor (o, sa kasong ito,
koleksyon ng mga processor) kung saan na-optimize ang code.

Intel
Gumawa ng code na na-optimize para sa pinakabagong mga processor ng Intel, na Haswell
at Silvermont para sa bersyong ito ng GCC. Kung alam mo ang CPU kung saan ang iyong code
ay tatakbo, pagkatapos ay dapat mong gamitin ang kaukulang -mtune or -martsa opsyon sa halip na
-mtune=intel. Ngunit, kung gusto mong gumanap nang mas mahusay ang iyong aplikasyon sa parehong Haswell
at Silvermont, dapat mong gamitin ang opsyong ito.

Habang ang mga bagong processor ng Intel ay naka-deploy sa marketplace, ang pag-uugali nito
magbabago ang opsyon. Samakatuwid, kung mag-upgrade ka sa isang mas bagong bersyon ng GCC, code
Ang henerasyong kontrolado ng opsyong ito ay magbabago upang ipakita ang pinakabagong Intel
mga processor sa oras na ang bersyon ng GCC ay inilabas.

Walang -martsa=intel option kasi -martsa nagsasaad ng pagtuturo itakda ang
maaaring gamitin ng compiler, at walang karaniwang set ng pagtuturo na naaangkop sa lahat
mga processor. Sa kaibahan, -mtune ay nagpapahiwatig ng processor (o, sa kasong ito,
koleksyon ng mga processor) kung saan na-optimize ang code.

-mcpu=uri ng cpu
Isang hindi na ginagamit na kasingkahulugan para sa -mtune.

-mfpmath=yunit
Bumuo ng floating-point arithmetic para sa napiling unit yunit. Ang mga pagpipilian para sa yunit ay:

387 Gamitin ang karaniwang 387 floating-point coprocessor na nasa karamihan ng mga chips
at tinularan kung hindi man. Ang code na pinagsama-sama sa opsyong ito ay tumatakbo halos kahit saan.
Ang mga pansamantalang resulta ay kinakalkula sa 80-bit na katumpakan sa halip na ang katumpakan
tinukoy ng uri, na nagreresulta sa bahagyang naiibang mga resulta kumpara sa karamihan ng
iba pang mga chips. Tingnan mo -float-store para sa mas detalyadong paglalarawan.

Ito ang default na pagpipilian para sa mga target na x86-32.

sse Gumamit ng scalar floating-point na mga tagubilin na nasa set ng pagtuturo ng SSE. Ito
Ang set ng pagtuturo ay sinusuportahan ng Pentium III at mas bagong mga chip, at sa linya ng AMD
ng Athlon-4, Athlon XP at Athlon MP chips. Ang naunang bersyon ng SSE
Ang set ng pagtuturo ay sumusuporta lamang sa single-precision arithmetic, kaya ang double at
Ang extended-precision na arithmetic ay ginagawa pa rin gamit ang 387. Isang mas bagong bersyon, kasalukuyan
sa Pentium 4 at AMD x86-64 chips lamang, ay sumusuporta din sa double-precision arithmetic.

Para sa x86-32 compiler, dapat mong gamitin -martsa=uri ng cpu, -msse or -msse2 lumipat sa
paganahin ang mga extension ng SSE at gawing epektibo ang opsyong ito. Para sa x86-64 compiler,
ang mga extension na ito ay pinagana bilang default.

Ang resultang code ay dapat na mas mabilis sa karamihan ng mga kaso at
maiwasan ang mga problema sa numerical instability ng 387 code, ngunit maaaring masira ang ilang umiiral na
code na inaasahan ang mga pansamantalang 80 bits.

Ito ang default na pagpipilian para sa x86-64 compiler.

sse,387
sse+387
kapwa
Subukang gamitin ang parehong set ng pagtuturo nang sabay-sabay. Ito ay epektibong nagdodoble sa
halaga ng magagamit na mga rehistro, at sa mga chip na may hiwalay na mga yunit ng pagpapatupad para sa 387
at SSE din ang mga mapagkukunan ng pagpapatupad. Gamitin ang opsyong ito nang may pag-iingat, dahil ito pa rin
pang-eksperimento, dahil hindi hiwalay ang modelo ng GCC register allocator
mga functional unit nang maayos, na nagreresulta sa hindi matatag na pagganap.

-masm=dialect
Mga tagubilin sa pagpupulong ng output gamit ang napili dialect. Nakakaapekto rin kung aling diyalekto ang
ginagamit para sa pangunahing "asm" at pinalawig na "asm". Ang mga sinusuportahang pagpipilian (sa pagkakasunud-sunod ng diyalekto) ay upang
or Intel. Ang default ay upang. Hindi sinusuportahan ni Darwin Intel.

-meeee-fp
-mno-ieee-fp
Kontrolin kung ang compiler ay gumagamit ng IEEE floating-point na mga paghahambing. Ang mga ito
wastong pangasiwaan ang kaso kung saan ang resulta ng paghahambing ay hindi ayos.

-msoft-float
Bumuo ng output na naglalaman ng mga tawag sa library para sa floating point.

Babala: ang mga kinakailangang aklatan ay hindi bahagi ng GCC. Karaniwan ang mga pasilidad ng
ginagamit ang karaniwang C compiler ng machine, ngunit hindi ito maaaring gawin nang direkta sa cross-
compilation. Dapat kang gumawa ng iyong sariling mga pagsasaayos upang magbigay ng angkop na aklatan
mga function para sa cross-compilation.

Sa mga makina kung saan ang isang function ay nagbabalik ng mga resulta ng floating-point sa rehistro ng 80387
stack, ang ilang floating-point opcode ay maaaring ilabas kahit na -msoft-float Ginagamit.

-mno-fp-ret-in-387
Huwag gamitin ang mga rehistro ng FPU para sa mga return value ng mga function.

Ang karaniwang calling convention ay may mga function na nagbabalik ng mga halaga ng mga uri ng "float" at "double"
sa isang rehistro ng FPU, kahit na walang FPU. Ang ideya ay ang operating system
dapat tularan ang isang FPU.

Ang pagpipilian -mno-fp-ret-in-387 nagiging sanhi ng mga naturang halaga na maibalik sa ordinaryong CPU
nagrerehistro sa halip.

-mno-fancy-math-387
Ang ilang 387 emulator ay hindi sumusuporta sa "sin", "cos" at "sqrt" na mga tagubilin para sa
387. Tukuyin ang opsyong ito upang maiwasan ang pagbuo ng mga tagubiling iyon. Ang pagpipiliang ito ay ang
default sa OpenBSD at NetBSD. Ang opsyon na ito ay na-override kapag -martsa nagpapahiwatig na
ang target na CPU ay palaging may FPU at sa gayon ang pagtuturo ay hindi nangangailangan ng pagtulad.
Ang mga tagubiling ito ay hindi nabuo maliban kung gagamitin mo rin ang
-funsafe-math-optimizations Lumipat.

-malign-doble
-mno-align-double
Kontrolin kung itina-align ng GCC ang mga variable na "double", "long double", at "long long" sa a
dalawang-salitang hangganan o isang salitang hangganan. Pag-align ng mga "double" na variable sa isang dalawang salita
boundary ay gumagawa ng code na tumatakbo nang medyo mas mabilis sa isang Pentium sa gastos ng higit pa
memorya.

Sa x86-64, -malign-doble ay pinagana bilang default.

Babala: kung gagamitin mo ang -malign-doble switch, mga istrukturang naglalaman ng mga uri sa itaas
ay nakahanay nang iba kaysa sa na-publish na mga detalye ng interface ng binary na application
para sa x86-32 at hindi binary compatible sa mga istruktura sa code na naipon nang wala
yung switch.

-m96bit-long-doble
-m128bit-long-doble
Kinokontrol ng mga switch na ito ang laki ng uri ng "long double". Ang x86-32 application binary
Tinutukoy ng interface ang laki upang maging 96 bits, kaya -m96bit-long-doble ay ang default sa
32-bit na mode.

Ang mga modernong arkitektura (Pentium at mas bago) ay mas gusto ang "mahabang doble" upang maihanay sa isang 8-
o 16-byte na hangganan. Sa mga arrays o istruktura na umaayon sa ABI, hindi ito
maaari. Kaya tinukoy -m128bit-long-doble aligns "long double" sa isang 16-byte
hangganan sa pamamagitan ng padding ng "long double" na may karagdagang 32-bit na zero.

Sa x86-64 compiler, -m128bit-long-doble ay ang default na pagpipilian bilang ABI nito
tumutukoy na ang "mahabang doble" ay nakahanay sa 16-byte na hangganan.

Pansinin na wala sa mga opsyong ito ang nagbibigay-daan sa anumang karagdagang katumpakan sa pamantayan ng x87
ng 80 bits para sa isang "mahabang doble".

Babala: kung i-override mo ang default na halaga para sa iyong target na ABI, babaguhin nito ang laki
ng mga istruktura at array na naglalaman ng "mahabang doble" na mga variable, pati na rin ang pagbabago sa
function calling convention para sa mga function na tumatagal ng "long double". Kaya hindi sila
binary-compatible sa code na naipon nang walang switch na iyon.

-mlong-double-64
-mlong-double-80
-mlong-double-128
Kinokontrol ng mga switch na ito ang laki ng uri ng "long double". Ang laki ng 64 bits ay gumagawa ng
"long double" na uri na katumbas ng "double" na uri. Ito ang default para sa 32-bit
Bionic C library. Ang laki ng 128 bits ay ginagawang katumbas ng uri ng "mahabang doble" sa
"__float128" na uri. Ito ang default para sa 64-bit na Bionic C library.

Babala: kung i-override mo ang default na halaga para sa iyong target na ABI, babaguhin nito ang laki
ng mga istruktura at array na naglalaman ng "mahabang doble" na mga variable, pati na rin ang pagbabago sa
function calling convention para sa mga function na tumatagal ng "long double". Kaya hindi sila
binary-compatible sa code na naipon nang walang switch na iyon.

-malign-data=uri
Kontrolin kung paano inihanay ng GCC ang mga variable. Mga sinusuportahang halaga para sa uri ay compat nadagdagan ang mga gamit
Ang alignment value compatible ay gumagamit ng GCC 4.8 at mas maaga, abi gumagamit ng alignment value bilang
tinukoy ng psABI, at cacheline gumagamit ng pinataas na halaga ng pagkakahanay upang tumugma sa
laki ng linya ng cache. compat ay ang default.

-mlarge-data-threshold=threshold
Kailan -mcmodel=medium ay tinukoy, ang mga object ng data na mas malaki kaysa sa threshold ay inilalagay sa
ang malaking seksyon ng data. Dapat ay pareho ang value na ito sa lahat ng bagay na naka-link
ang binary, at default sa 65535.

-mrtd
Gumamit ng ibang function-calling convention, kung saan ang mga function ay naayos
bilang ng mga argumento ay bumalik na may "ret bilang" pagtuturo, na nagpapalabas ng kanilang mga argumento
habang bumabalik. Nagse-save ito ng isang pagtuturo sa tumatawag dahil hindi na kailangan
pop ang mga argumento doon.

Maaari mong tukuyin na ang isang indibidwal na function ay tinatawag na may ganitong pagkakasunod-sunod ng pagtawag sa
ang katangian ng function na "stdcall". Maaari mo ring i-override ang -mrtd opsyon sa pamamagitan ng paggamit ng
katangian ng function na "cdecl".

Babala: ang calling convention na ito ay hindi tugma sa karaniwang ginagamit sa Unix,
kaya hindi mo ito magagamit kung kailangan mong tumawag sa mga aklatan na pinagsama-sama sa Unix compiler.

Gayundin, dapat kang magbigay ng mga prototype ng function para sa lahat ng mga function na may variable
bilang ng mga argumento (kabilang ang "printf"); kung hindi, maling code ang nabuo para sa
mga tawag sa mga function na iyon.

Bilang karagdagan, ang malubhang hindi tamang code ay nagreresulta kung tatawag ka ng isang function na may masyadong marami
mga argumento. (Karaniwan, ang mga karagdagang argumento ay hindi nakakapinsalang binabalewala.)

-mregparm=num
Kontrolin kung gaano karaming mga rehistro ang ginagamit upang ipasa ang mga argumento ng integer. Bilang default, hindi
Ang mga rehistro ay ginagamit upang ipasa ang mga argumento, at hindi hihigit sa 3 mga rehistro ang maaaring gamitin. Kaya mo
kontrolin ang gawi na ito para sa isang partikular na function sa pamamagitan ng paggamit ng katangian ng function
"regparm".

Babala: kung gagamitin mo ang switch na ito, at num ay nonzero, pagkatapos ay dapat mong buuin ang lahat ng mga module
na may parehong halaga, kabilang ang anumang mga aklatan. Kabilang dito ang mga system library at
mga module ng pagsisimula.

-msseregparm
Gumamit ng SSE register passing convention para sa float at double argument at mga return value.
Makokontrol mo ang gawi na ito para sa isang partikular na function sa pamamagitan ng paggamit ng katangian ng function
"sseregparm".

Babala: kung gagamitin mo ang switch na ito, dapat mong buuin ang lahat ng mga module na may parehong halaga,
kabilang ang anumang mga aklatan. Kabilang dito ang mga library ng system at mga startup module.

-mvect8-ret-in-mem
Ibalik ang 8-byte vectors sa memorya sa halip na mga MMX register. Ito ang default na naka-on
Solaris@tie{}8 at 9 at VxWorks upang tumugma sa ABI ng mga compiler ng Sun Studio hanggang
bersyon 12. Sumusunod ang mga susunod na bersyon ng compiler (nagsisimula sa Studio 12 Update@tie{}1)
ang ABI na ginagamit ng iba pang mga target na x86, na siyang default sa Solaris@tie{}10 ​​at mas bago.
Lamang gamitin ang opsyong ito kung kailangan mong manatiling tugma sa umiiral na code na ginawa ni
ang mga nakaraang bersyon ng compiler o mas lumang bersyon ng GCC.

-mpc32
-mpc64
-mpc80
Itakda ang 80387 floating-point precision sa 32, 64 o 80 bits. Kailan -mpc32 ay tinukoy,
ang mga kahalagahan ng mga resulta ng mga pagpapatakbo ng floating-point ay bilugan sa 24 bits
(iisang katumpakan); -mpc64 nililibot ang mga kahalagahan ng mga resulta ng floating-point
mga operasyon sa 53 bits (double precision) at -mpc80 binibilang ang mga kahalagahan ng mga resulta
ng floating-point operations sa 64 bits (extended double precision), which is the
default. Kapag ginamit ang opsyong ito, ang mga floating-point na operasyon sa mas mataas na katumpakan ay
hindi magagamit sa programmer nang hindi tahasan ang pagtatakda ng FPU control word.

Ang pagtatakda ng pag-ikot ng mga floating-point na operasyon sa mas mababa kaysa sa default na 80 bits
pabilisin ang ilang mga programa ng 2% o higit pa. Tandaan na ang ilang mga mathematical library ay ipinapalagay iyon
Ang pinalawak na katumpakan (80-bit) na mga pagpapatakbo ng floating-point ay pinagana bilang default; mga gawain
sa naturang mga aklatan ay maaaring magdusa ng malaking pagkawala ng katumpakan, kadalasan sa pamamagitan ng
tinatawag na "catastrophic cancellation", kapag ginamit ang opsyong ito para itakda ang katumpakan sa
mas mababa sa pinalawig na katumpakan.

-mstackrealign
I-realign ang stack sa entry. Sa x86, ang -mstackrealign ang pagpipilian ay bumubuo ng isang
kahaliling prologue at epilogue na nagrealign sa run-time stack kung kinakailangan. Ito
sumusuporta sa paghahalo ng mga legacy na code na nagpapanatili ng 4-byte na stack na pagkakahanay sa mga modernong code na
panatilihin ang 16-byte stack alignment para sa SSE compatibility. Tingnan din ang katangian
"force_align_arg_pointer", naaangkop sa mga indibidwal na function.

-preferred-stack-boundary=num
Subukang panatilihing nakahanay ang hangganan ng stack sa isang 2 na nakataas sa num hangganan ng byte. Kung
-preferred-stack-boundary ay hindi tinukoy, ang default ay 4 (16 bytes o 128 bits).

Babala: Kapag bumubuo ng code para sa x86-64 na arkitektura na may mga extension ng SSE
may kapansanan, -preferred-stack-boundary=3 ay maaaring gamitin upang panatilihing nakahanay ang hangganan ng stack
hanggang 8 byte na hangganan. Dahil ang x86-64 ABI ay nangangailangan ng 16 byte stack alignment, ito ay ABI
hindi tugma at nilayon na gamitin sa kinokontrol na kapaligiran kung saan ang stack space ay
mahalagang limitasyon. Ang pagpipiliang ito ay humahantong sa maling code kapag ang mga function ay pinagsama-sama sa 16
Ang byte stack alignment (tulad ng mga function mula sa isang karaniwang library) ay tinatawag na may
hindi pagkakapantay-pantay na stack. Sa kasong ito, ang mga tagubilin ng SSE ay maaaring humantong sa maling pag-access sa memorya
mga bitag. Bilang karagdagan, ang mga variable na argumento ay hindi pinangangasiwaan nang tama para sa 16 byte na nakahanay
mga bagay (kabilang ang x87 long double at __int128), na humahantong sa mga maling resulta. Kailangan mo
bumuo ng lahat ng mga module na may -preferred-stack-boundary=3, kabilang ang anumang mga aklatan. Ito
kasama ang mga library ng system at mga startup module.

-mincoming-stack-boundary=num
Ipagpalagay na ang papasok na stack ay nakahanay sa isang 2 nakataas sa num hangganan ng byte. Kung
-mincoming-stack-boundary ay hindi tinukoy, ang tinukoy ng
-preferred-stack-boundary Ginagamit.

Sa Pentium at Pentium Pro, ang mga "double" at "long double" na mga halaga ay dapat na nakahanay sa isang
8-byte na hangganan (tingnan -malign-doble) o makaranas ng makabuluhang pagganap ng oras ng pagtakbo
mga parusa. Sa Pentium III, ang uri ng data ng Streaming SIMD Extension (SSE) na "__m128" ay maaaring
hindi gumagana nang maayos kung hindi ito nakahanay sa 16-byte.

Upang matiyak ang wastong pagkakahanay ng mga halagang ito sa stack, ang hangganan ng stack ay dapat na bilang
nakahanay gaya ng kinakailangan ng anumang halagang nakaimbak sa stack. Dagdag pa, ang bawat pag-andar
ay dapat mabuo upang mapanatiling nakahanay ang stack. Kaya tumatawag ng isang function
pinagsama-sama sa isang mas mataas na ginustong hangganan ng stack mula sa isang function na pinagsama-sama sa isang mas mababa
ang ginustong hangganan ng stack ay malamang na mali ang pagkakahanay sa stack. Inirerekomenda na
Ang mga library na gumagamit ng mga callback ay palaging gumagamit ng default na setting.

Ang sobrang pagkakahanay na ito ay kumonsumo ng dagdag na espasyo ng stack, at sa pangkalahatan ay nagpapataas ng code
laki. Code na sensitibo sa paggamit ng stack space, gaya ng mga naka-embed na system at
operating system kernels, maaaring nais na bawasan ang ginustong pagkakahanay sa
-preferred-stack-boundary=2.

-mmmx
-msse
-msse2
-msse3
-mssse3
-msse4
-msse4a
-msse4.1
-msse4.2
-mavx
-mavx2
-mavx512f
-mavx512pf
-mavx512er
-mavx512cd
-msha
-maes
-mpclmul
-mclfushopt
-mfsgsbase
-mrdrnd
-mf16c
-mfma
-mfma4
-mno-fma4
-mprefetchwt1
-mxop
-mlwp
-m3dnow
-mpopcnt
-mabm
-mbmi
-mbmi2
-mlzcnt
-mfxsr
-mxsave
-mxsaveopt
-mxsavec
-mxsaves
-mrtm
-mtbm
-mmpx
-mmwaitx
Ang mga switch na ito ay nagbibigay-daan sa paggamit ng mga tagubilin sa MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, AVX, AVX2, AVX512F, AVX512PF, AVX512ER, AVX512CD, SHA, AES, PCLMUL, FSGSBASE,
RDRND, F16C, FMA, SSE4A, FMA4, XOP, LWP, ABM, BMI, BMI2, FXSR, XSAVE, XSAVEOPT, LZCNT,
RTM, MPX, MWAITX o 3DNow! pinahabang set ng pagtuturo. Ang bawat isa ay may katumbas -mno-
opsyon na huwag paganahin ang paggamit ng mga tagubiling ito.

Available din ang mga extension na ito bilang mga built-in na function: tingnan x86 Built-in Pag-andar,
para sa mga detalye ng mga function na pinagana at hindi pinagana ng mga switch na ito.

Upang awtomatikong bumuo ng mga tagubilin sa SSE/SSE2 mula sa floating-point code (bilang kabaligtaran
sa 387 mga tagubilin), tingnan -mfpmath=sse.

Pinipigilan ng GCC ang mga tagubilin ng SSEx kapag -mavx Ginagamit. Sa halip, bumubuo ito ng bagong AVX
mga tagubilin o katumbas ng AVX para sa lahat ng tagubilin ng SSEx kapag kinakailangan.

Ang mga opsyong ito ay nagbibigay-daan sa GCC na gamitin ang mga pinahabang tagubiling ito sa nabuong code, kahit na
wala -mfpmath=sse. Dapat mag-compile ang mga application na nagsasagawa ng run-time na pag-detect ng CPU
hiwalay na mga file para sa bawat suportadong arkitektura, gamit ang naaangkop na mga flag. Sa
partikular, ang file na naglalaman ng CPU detection code ay dapat na naipon nang wala
mga pagpipiliang ito.

-mdump-tune-features
Ang opsyong ito ay nagtuturo sa GCC na itapon ang mga pangalan ng x86 performance tuning feature at
mga default na setting. Maaaring gamitin ang mga pangalan sa -mtune-ctrl=listahan ng tampok.

-mtune-ctrl=listahan ng tampok
Ang opsyong ito ay ginagamit para gawin ang pinong kontrol ng butil ng mga feature ng pagbuo ng x86 code.
listahan ng tampok ay isang listahan na pinaghihiwalay ng kuwit ng tampok mga pangalan. Tingnan din
-mdump-tune-features. Kapag tinukoy, ang tampok ay naka-on kung hindi ito naunahan
sa ^, kung hindi, ito ay naka-off. -mtune-ctrl=listahan ng tampok ay inilaan upang gamitin
ng mga developer ng GCC. Ang paggamit nito ay maaaring humantong sa mga path ng code na hindi sakop ng pagsubok at maaari
posibleng magresulta sa mga compiler ICE o runtime error.

-mno-default
Ang opsyong ito ay nagtuturo sa GCC na i-off ang lahat ng natutunaw na feature. Tingnan din
-mtune-ctrl=listahan ng tampok at -mdump-tune-features.

-mcld
Ang opsyong ito ay nagtuturo sa GCC na maglabas ng "cld" na pagtuturo sa prologue ng mga function
na gumagamit ng mga tagubiling string. Ang mga tagubilin sa string ay nakadepende sa DF flag na pipiliin
sa pagitan ng autoincrement o autodecrement mode. Habang ang ABI ay tumutukoy sa DF flag sa
ma-clear sa pagpasok ng function, ang ilang mga operating system ay lumalabag sa pagtutukoy na ito sa pamamagitan ng hindi
nililinis ang watawat ng DF sa kanilang mga dispatser ng exception. Ang exception handler ay maaaring
hinihingi gamit ang DF flag set, na humahantong sa maling mode ng direksyon kapag may string
ginagamit ang mga tagubilin. Maaaring paganahin ang opsyong ito bilang default sa 32-bit x86 na mga target sa pamamagitan ng
pag-configure ng GCC gamit ang --paganahin-cld opsyon sa pag-configure. Pagbuo ng "cld"
ang mga tagubilin ay maaaring pigilan sa -mno-cld opsyon ng compiler sa kasong ito.

-mvzeroupper
Ang opsyong ito ay nagtuturo sa GCC na maglabas ng "vzeroupper" na pagtuturo bago ang paglipat ng
kontrolin ang daloy palabas ng function upang mabawasan din ang parusa sa paglipat ng AVX hanggang SSE
bilang alisin ang hindi kinakailangang "zeroupper" intrinsics.

-mprefer-avx128
Ang opsyong ito ay nagtuturo sa GCC na gumamit ng 128-bit AVX na mga tagubilin sa halip na 256-bit AVX
mga tagubilin sa auto-vectorizer.

-mcx16
Ang opsyong ito ay nagbibigay-daan sa GCC na makabuo ng "CMPXCHG16B" na mga tagubilin. Pinapayagan ng "CMPXCHG16B".
para sa mga atomic na operasyon sa 128-bit double quadword (o oword) na mga uri ng data. Ito ay
kapaki-pakinabang para sa mga counter na may mataas na resolution na maaaring i-update ng maraming processor (o
mga core). Ang pagtuturo na ito ay nabuo bilang bahagi ng atomic built-in na function: tingnan
__sync Mga builtin or __atomic Mga builtin para sa mga detalye.

-msahf
Ang pagpipiliang ito ay nagbibigay-daan sa pagbuo ng mga tagubiling "SAHF" sa 64-bit na code. Maagang Intel
Pentium 4 na mga CPU na may suporta sa Intel 64, bago ang pagpapakilala ng Pentium 4 G1 na hakbang
noong Disyembre 2005, kulang ang "LAHF" at "SAHF" na mga tagubilin na sinusuportahan ng
AMD64. Ito ay mga tagubilin sa pag-load at pag-imbak, ayon sa pagkakabanggit, para sa ilang partikular na flag ng status.
Sa 64-bit na mode, ang pagtuturo ng "SAHF" ay ginagamit upang i-optimize ang "fmod", "drem", at
"natitira" built-in na mga function; tingnan mo iba Mga builtin para sa mga detalye.

-mmovbe
Ang opsyong ito ay nagbibigay-daan sa paggamit ng "movbe" na pagtuturo upang ipatupad ang "__builtin_bswap32"
at "__builtin_bswap64".

-mcrc32
Ang pagpipiliang ito ay nagbibigay-daan sa mga built-in na function na "__builtin_ia32_crc32qi",
"__builtin_ia32_crc32hi", "__builtin_ia32_crc32si" at "__builtin_ia32_crc32di" sa
bumuo ng "crc32" na pagtuturo sa makina.

-mreci
Ang opsyong ito ay nagbibigay-daan sa paggamit ng "RCPSS" at "RSQRTSS" na mga tagubilin (at ang kanilang vectorized
mga variant na "RCPPS" at "RSQRTPS") na may karagdagang Newton-Raphson na hakbang upang madagdagan
katumpakan sa halip na "DIVSS" at "SQRTSS" (at ang kanilang mga vectorized na variant) para sa single-
precision floating-point na mga argumento. Ang mga tagubiling ito ay nabuo lamang kapag
-funsafe-math-optimizations ay pinagana kasama ng -finite-math-lamang at
-fno-trap-math. Tandaan na habang ang throughput ng sequence ay mas mataas kaysa sa
throughput ng non-reciprocal na pagtuturo, ang katumpakan ng pagkakasunod-sunod ay maaaring
nabawasan ng hanggang 2 ulp (ibig sabihin ang kabaligtaran ng 1.0 ay katumbas ng 0.99999994).

Tandaan na ipinapatupad ng GCC ang "1.0f/sqrtf(x)" sa mga tuntunin ng "RSQRTSS" (o "RSQRTPS") na
sa -ffast-math (o kumbinasyon ng opsyon sa itaas), at hindi na kailangan -mreci.

Tandaan din na ang GCC ay naglalabas ng sequence sa itaas na may karagdagang Newton-Raphson na hakbang para sa
vectorized single-float division at vectorized "sqrtf(x)" kasama na -ffast-math
(o kumbinasyon ng opsyon sa itaas), at hindi na kailangan -mreci.

-mreci=opt
Kinokontrol ng opsyong ito kung aling mga reciprocal na tagubilin sa pagtatantya ang maaaring gamitin. opt ay isang
listahan ng mga opsyon na pinaghihiwalay ng kuwit, na maaaring unahan ng a ! upang baligtarin ang pagpipilian:

lahat Paganahin ang lahat ng mga tagubilin sa pagtatantya.

default
Paganahin ang mga default na tagubilin, katumbas ng -mreci.

wala
Huwag paganahin ang lahat ng mga tagubilin sa pagtatantya, katumbas ng -mno-recipe.

div I-enable ang approximation para sa scalar division.

vec-div
I-enable ang approximation para sa vectorized division.

sqrt
I-enable ang approximation para sa scalar square root.

vec-sqrt
I-enable ang approximation para sa vectorized square root.

Kaya, halimbawa, -mrecip=lahat,!sqrt nagbibigay-daan sa lahat ng katumbas na pagtatantya,
maliban sa square root.

-mveclibabi=uri
Tinutukoy ang uri ng ABI na gagamitin para sa pag-vector ng mga intrinsics gamit ang isang panlabas na library.
Mga sinusuportahang halaga para sa uri ay svml para sa Intel short vector math library at acml
para sa AMD math core library. Upang gamitin ang opsyong ito, pareho -free-vectorize at
-funsafe-math-optimizations kailangang paganahin, at isang SVML o ACML ABI-compatible
dapat na tukuyin ang library sa oras ng link.

Kasalukuyang naglalabas ang GCC ng mga tawag sa "vmldExp2", "vmldLn2", "vmldLog102", "vmldLog102",
"vmldPow2", "vmldTanh2", "vmldTan2", "vmldAtan2", "vmldAtanh2", "vmldCbrt2",
"vmldSinh2", "vmldSin2", "vmldAsinh2", "vmldAsin2", "vmldCosh2", "vmldCos2",
"vmldAcosh2", "vmldAcos2", "vmlsExp4", "vmlsLn4", "vmlsLog104", "vmlsLog104",
"vmlsPow4", "vmlsTanh4", "vmlsTan4", "vmlsAtan4", "vmlsAtanh4", "vmlsCbrt4",
"vmlsSinh4", "vmlsSin4", "vmlsAsinh4", "vmlsAsin4", "vmlsCosh4", "vmlsCos4",
"vmlsAcosh4" at "vmlsAcos4" para sa kaukulang uri ng function kung kailan -mveclibabi=svml is
ginamit, at "__vrd2_sin", "__vrd2_cos", "__vrd2_exp", "__vrd2_log", "__vrd2_log2",
"__vrd2_log10", "__vrs4_sinf", "__vrs4_cosf", "__vrs4_expf", "__vrs4_logf",
"__vrs4_log2f", "__vrs4_log10f" at "__vrs4_powf" para sa kaukulang uri ng function
kailan -mveclibabi=acml Ginagamit.

-mabi=pangalan
Bumuo ng code para sa tinukoy na convention sa pagtawag. Ang mga pinahihintulutang halaga ay sysv para
ang ABI na ginamit sa GNU/Linux at iba pang mga sistema, at ms para sa Microsoft ABI. Ang
Ang default ay ang paggamit ng Microsoft ABI kapag tina-target ang Microsoft Windows at ang SysV ABI
sa lahat ng iba pang mga sistema. Makokontrol mo ang gawi na ito para sa mga partikular na function sa pamamagitan ng paggamit
ang mga katangian ng function na "ms_abi" at "sysv_abi".

-mtls-dialect=uri
Bumuo ng code para ma-access ang thread-local na storage gamit ang gnu or gnu2 mga kombensiyon. gnu
ay ang konserbatibong default; gnu2 ay mas mahusay, ngunit maaari itong magdagdag ng compile- at run-
mga kinakailangan sa oras na hindi masasagot sa lahat ng mga sistema.

-mpush-args
-mno-push-args
Gumamit ng mga pagpapatakbo ng PUSH upang mag-imbak ng mga papalabas na parameter. Ang pamamaraang ito ay mas maikli at karaniwan
kasing bilis ng pamamaraan gamit ang mga pagpapatakbo ng SUB/MOV at pinagana bilang default. Sa ilang
Ang mga kaso kung hindi ito pinapagana ay maaaring mapabuti ang pagganap dahil sa pinahusay na pag-iiskedyul at nabawasan
dependencies.

-maccumulate-outgoing-args
Kung pinagana, ang maximum na halaga ng espasyo na kinakailangan para sa mga papalabas na argumento ay kinukuwenta sa
ang prologue ng function. Ito ay mas mabilis sa karamihan sa mga modernong CPU dahil sa nabawasan
dependencies, pinahusay na pag-iiskedyul at binawasan ang paggamit ng stack kapag ang gustong stack
ang hangganan ay hindi katumbas ng 2. Ang disbentaha ay isang kapansin-pansing pagtaas sa laki ng code. Ito
ipinahihiwatig ng switch -mno-push-args.

-mthreads
Suportahan ang thread-safe exception handling sa MinGW. Mga program na umaasa sa thread-safe
Ang paghawak ng exception ay dapat mag-compile at mag-link ng lahat ng code sa -mthreads opsyon. Kailan
pagsasama-sama, -mthreads tumutukoy -D_MT; kapag nagli-link, nagli-link ito sa isang espesyal na thread helper
aklatan -lmingwthrd na nililinis ang data sa paghawak ng exception sa bawat thread.

-mno-align-stringops
Huwag ihanay ang patutunguhan ng mga operasyon ng inline na string. Binabawasan ng switch na ito ang code
laki at pagpapabuti ng pagganap kung sakaling nakahanay na ang patutunguhan, ngunit GCC
hindi alam ang tungkol dito.

-minline-all-stringops
Bilang default, inline lang ng GCC ang mga string operation kapag alam na ang patutunguhan
nakahanay sa hindi bababa sa isang 4-byte na hangganan. Ito ay nagbibigay-daan sa higit pang inlining at pagtaas ng code
laki, ngunit maaaring mapabuti ang pagganap ng code na nakasalalay sa mabilis na "memcpy", "strlen", at
"memset" para sa maikling haba.

-minline-stringops-dynamically
Para sa mga pagpapatakbo ng string na hindi alam ang laki, gumamit ng mga run-time na pagsusuri na may inline na code para sa maliit
mga bloke at isang tawag sa aklatan para sa malalaking bloke.

-mstringop-diskarte=algae
I-override ang internal decision heuristic para sa partikular na algorithm na gagamitin
inlining string operations. Ang mga pinahihintulutang halaga para sa algae ay:

rep_byte
rep_4byte
rep_8byte
Palawakin gamit ang i386 "rep" na prefix ng tinukoy na laki.

byte_loop
silo
unrolled_loop
Palawakin sa isang inline na loop.

libcall
Palaging gumamit ng tawag sa library.

-mmemcpy-diskarte=estratehiya
I-override ang heuristic na panloob na desisyon upang magpasya kung dapat ay "__builtin_memcpy."
inline at kung anong inline na algorithm ang gagamitin kapag ang inaasahang laki ng operasyon ng pagkopya
ay kilala. estratehiya ay isang listahan na pinaghihiwalay ng kuwit ng algae:max_size:dest_align triplets. algae
ay tinukoy sa -mstringop-diskarte, max_size tumutukoy sa max byte na laki kung saan
inline na algorithm algae ay pinapayagan. Para sa huling triplet, ang max_size dapat ay "-1". Ang
max_size ng mga triplet sa listahan ay dapat na tukuyin sa pagtaas ng pagkakasunud-sunod. Ang
minimal na laki ng byte para sa algae ay 0 para sa unang triplet at "max_size + 1" ng
naunang hanay.

-mmemset-diskarte=estratehiya
Ang pagpipilian ay katulad ng -mmemcpy-diskarte= maliban na ito ay upang kontrolin
Pagpapalawak ng "__builtin_memset".

-momit-leaf-frame-pointer
Huwag itago ang frame pointer sa isang rehistro para sa mga function ng dahon. Iniiwasan nito ang
mga tagubilin para i-save, i-set up, at i-restore ang mga frame pointer at gumawa ng karagdagang rehistro
magagamit sa mga function ng dahon. Ang pagpipilian -fomit-leaf-frame-pointer inaalis ang frame
pointer para sa mga function ng dahon, na maaaring magpahirap sa pag-debug.

-mtls-direct-seg-refs
-mno-tls-direct-seg-refs
Kinokontrol kung ang mga TLS variable ay maaaring ma-access gamit ang mga offset mula sa TLS segment
magparehistro (%gs para sa 32-bit, %fs para sa 64-bit), o kung ang thread base pointer ay dapat
idinagdag. Kung ito ay wasto o hindi ay depende sa operating system, at kung ito
imapa ang segment upang masakop ang buong lugar ng TLS.

Para sa mga system na gumagamit ng GNU C Library, naka-on ang default.

-msse2avx
-mno-sse2avx
Tukuyin na dapat i-encode ng assembler ang mga tagubilin ng SSE na may prefix na VEX. Ang pagpipilian
-mavx ino-on ito bilang default.

-mfentry
-mno-fentry
Kung aktibo ang pag-profile (-pg), ilagay ang profiling counter call bago ang prologue.
Tandaan: Sa mga x86 architecture ang attribute na "ms_hook_prologue" ay hindi posible sa
sandali para sa -mfentry at -pg.

-mrecord-mcount
-mno-record-mcount
Kung aktibo ang pag-profile (-pg), bumuo ng __mcount_loc na seksyon na naglalaman ng mga pointer
sa bawat tawag sa pag-profile. Ito ay kapaki-pakinabang para sa awtomatikong pag-patch at paglabas ng mga tawag.

-mnop-mcount
-mno-nop-mcount
Kung aktibo ang pag-profile (-pg), buuin ang mga tawag sa mga function ng profiling bilang nops.
Ito ay kapaki-pakinabang kapag dapat silang i-patch sa ibang pagkakataon nang dynamic. Ito ay malamang lamang
kapaki-pakinabang kasama ng -mrecord-mcount.

-mskip-rax-setup
-mno-skip-rax-setup
Kapag bumubuo ng code para sa x86-64 na arkitektura na hindi pinagana ang mga extension ng SSE,
-laktawan-rax-setup maaaring gamitin upang laktawan ang pagse-set up ng rehistro ng RAX kapag walang variable
mga argumentong ipinasa sa mga rehistro ng vector.

Babala: Dahil ang RAX register ay ginagamit upang maiwasan ang hindi kinakailangang pag-save ng mga vector register sa
stack kapag nagpapasa ng mga variable na argumento, ang mga epekto ng opsyong ito ay maaaring ang mga callee
mag-aksaya ng ilang stack space, gumawa ng masama o tumalon sa isang random na lokasyon. GCC 4.4 o mas bago
walang mga isyung iyon, anuman ang halaga ng rehistro ng RAX.

-m8bit-idiv
-mno-8bit-idiv
Sa ilang mga processor, tulad ng Intel Atom, ang 8-bit na unsigned integer divide ay mas mabilis kaysa
32-bit/64-bit integer divide. Ang pagpipiliang ito ay bumubuo ng isang run-time check. Kung pareho
ang dibidendo at divisor ay nasa hanay ng 0 hanggang 255, ang 8-bit na unsigned integer divide ay
ginamit sa halip na 32-bit/64-bit integer divide.

-mavx256-split-unaaligned-load
-mavx256-split-unaaligned-store
Hatiin ang 32-byte na AVX na hindi nakahanay na pag-load at tindahan.

-mstack-protector-guard=bantay
Bumuo ng stack protection code gamit ang canary sa bantay. Ang mga sinusuportahang lokasyon ay global
para sa global canary o tls para sa per-thread canary sa TLS block (ang default). Ito
ang opsyon ay may epekto lamang kapag -fstack-tagapagtanggol or -fstack-protector-lahat ay tinukoy.

mga ito -m ang mga switch ay sinusuportahan bilang karagdagan sa itaas sa mga x86-64 na processor sa 64-bit
mga kapaligiran.

-m32
-m64
-mx32
-m16
Bumuo ng code para sa isang 16-bit, 32-bit o 64-bit na kapaligiran. Ang -m32 mga hanay ng opsyon na "int",
"mahaba", at mga uri ng pointer sa 32 bits, at bumubuo ng code na tumatakbo sa anumang i386 system.

Ang -m64 Ang opsyon ay nagtatakda ng "int" sa 32 bits at "mahaba" at mga uri ng pointer sa 64 bits, at
bumubuo ng code para sa x86-64 architecture. Para kay Darwin lamang ang -m64 opsyon din
pinapatay ang -fno-pic at -mdynamic-no-pic mga pagpipilian.

Ang -mx32 Ang opsyon ay nagtatakda ng "int", "long", at mga uri ng pointer sa 32 bits, at bumubuo ng code
para sa x86-64 na arkitektura.

Ang -m16 ang pagpipilian ay pareho sa -m32, maliban doon ay naglalabas ito ng ".code16gcc"
direktiba ng pagpupulong sa simula ng output ng pagpupulong upang ang binary ay maaaring tumakbo
sa 16-bit na mode.

-mno-red-zone
Huwag gumamit ng tinatawag na "red zone" para sa x86-64 code. Ang pulang sona ay ipinag-uutos ng
x86-64 ABI; ito ay isang 128-byte na lugar na lampas sa lokasyon ng stack pointer na hindi
binago ng signal o interrupt handler at samakatuwid ay maaaring gamitin para sa pansamantalang data
nang hindi inaayos ang stack pointer. Ang bandila -mno-red-zone hindi pinapagana ang red zone na ito.

-mcmodel=maliit
Bumuo ng code para sa maliit na modelo ng code: dapat na naka-link ang program at ang mga simbolo nito
ang mas mababang 2 GB ng address space. Ang mga pointer ay 64 bits. Ang mga programa ay maaaring
statically o dynamic na naka-link. Ito ang default na modelo ng code.

-mcmodel=kernel
Bumuo ng code para sa modelo ng kernel code. Ang kernel ay tumatakbo sa negatibong 2 GB ng
puwang ng address. Ang modelong ito ay kailangang gamitin para sa Linux kernel code.

-mcmodel=medium
Bumuo ng code para sa medium na modelo: naka-link ang program sa mas mababang 2 GB ng
puwang ng address. Ang mga maliliit na simbolo ay nakalagay din doon. Mga simbolo na may sukat na mas malaki kaysa sa
-mlarge-data-threshold ay inilalagay sa malalaking data o mga seksyon ng BSS at maaaring matagpuan
higit sa 2GB. Maaaring i-static o dynamic na naka-link ang mga program.

-mcmodel=malaki
Bumuo ng code para sa malaking modelo. Ang modelong ito ay hindi gumagawa ng mga pagpapalagay tungkol sa mga address
at laki ng mga seksyon.

-maddress-mode=long
Bumuo ng code para sa long address mode. Ito ay sinusuportahan lamang para sa 64-bit at x32
kapaligiran. Ito ang default na address mode para sa 64-bit na kapaligiran.

-maddress-mode=maikli
Bumuo ng code para sa short address mode. Ito ay sinusuportahan lamang para sa 32-bit at x32
kapaligiran. Ito ang default na address mode para sa 32-bit at x32 na kapaligiran.

x86 Windows Options

Ang mga karagdagang opsyon na ito ay magagamit para sa mga target ng Microsoft Windows:

-mconsole
Tinutukoy ng opsyong ito na bubuo ng console application, sa pamamagitan ng pag-uutos
ang linker upang itakda ang uri ng PE header subsystem na kinakailangan para sa mga console application.
Available ang opsyong ito para sa mga target na Cygwin at MinGW at naka-enable bilang default sa
ang mga target na iyon.

-mdll
Available ang opsyong ito para sa mga target na Cygwin at MinGW. Tinutukoy nito na ang isang DLL---a
dynamic na link library---ay mabubuo, na magpapagana sa pagpili ng kinakailangan
runtime startup object at entry point.

-mnop-fun-dllimport
Available ang opsyong ito para sa mga target na Cygwin at MinGW. Tinutukoy nito na ang
Ang attribute na "dllimport" ay dapat balewalain.

-mthread
Available ang opsyong ito para sa mga target ng MinGW. Tinutukoy nito ang thread na partikular sa MinGW
suporta ay dapat gamitin.

-municode
Available ang opsyong ito para sa mga target na MinGW-w64. Nagiging sanhi ito ng "UNICODE" preprocessor
macro na paunang natukoy, at pipili ng Unicode-capable runtime startup code.

-mwin32
Available ang opsyong ito para sa mga target na Cygwin at MinGW. Tinutukoy nito na ang tipikal
Ang mga paunang natukoy na macro ng Microsoft Windows ay itatakda sa pre-processor, ngunit hindi
makaimpluwensya sa pagpili ng runtime library/startup code.

-mwindows
Available ang opsyong ito para sa mga target na Cygwin at MinGW. Tinutukoy nito na ang isang GUI
Ang application ay mabubuo sa pamamagitan ng pag-uutos sa linker na itakda ang PE header
uri ng subsystem nang naaangkop.

-fno-set-stack-executable
Available ang opsyong ito para sa mga target ng MinGW. Tinutukoy nito na ang executable flag para sa
ang stack na ginagamit ng mga nested function ay hindi nakatakda. Ito ay kinakailangan para sa mga binary na tumatakbo
sa kernel mode ng Microsoft Windows, dahil doon ang User32 API, na ginagamit upang itakda
mga executable na pribilehiyo, ay hindi magagamit.

-fwritable-relocated-rdata
Available ang opsyong ito para sa mga target na MinGW at Cygwin. Tinutukoy nito na nilipat-
ang data sa read-only na seksyon ay inilalagay sa .data section. Ito ay kinakailangan para sa mas matanda
hindi sinusuportahan ng mga runtime ang pagbabago ng mga seksyon ng .rdata para sa pseudo-relocation.

-mpe-aligned-commons
Available ang opsyong ito para sa mga target na Cygwin at MinGW. Tinutukoy nito na ang GNU
extension sa PE file format na nagpapahintulot sa tamang pagkakahanay ng mga COMMON variable
dapat gamitin kapag bumubuo ng code. Ito ay pinagana bilang default kung nakita ng GCC na ang
Ang target na assembler na natagpuan sa panahon ng pagsasaayos ay sumusuporta sa tampok.

Tingnan din sa ilalim x86 Options para sa karaniwang mga pagpipilian.

Xstormy16 Options

Ang mga opsyong ito ay tinukoy para sa Xstormy16:

-msim
Pumili ng mga startup file at linker script na angkop para sa simulator.

Xtensa Options

Sinusuportahan ang mga opsyong ito para sa mga target ng Xtensa:

-mconst16
-mno-const16
Paganahin o huwag paganahin ang paggamit ng "CONST16" na mga tagubilin para sa pag-load ng mga constant value. Ang
Ang pagtuturo ng "CONST16" ay kasalukuyang hindi isang karaniwang opsyon mula sa Tensilica. Kailan
naka-enable, palaging ginagamit ang mga tagubiling "CONST16" kapalit ng karaniwang "L32R"
mga tagubilin. Ang paggamit ng "CONST16" ay pinagana bilang default kung ang "L32R"
hindi magagamit ang pagtuturo.

-mfused-baliw
-mno-fused-madd
Paganahin o huwag paganahin ang paggamit ng fused multiply/add at multiply/subtract na mga tagubilin sa
opsyon na floating-point. Wala itong epekto kung ang opsyon na floating-point ay hindi rin
pinagana. Ang hindi pagpapagana ng fused multiply/add at multiply/subtract na mga tagubilin ay pinipilit ang
compiler na gumamit ng hiwalay na mga tagubilin para sa pagpaparami at pagdaragdag/pagbawas.
Maaaring ito ay kanais-nais sa ilang mga kaso kung saan ang mga mahigpit na resulta ng pagsunod sa IEEE 754
kinakailangan: ang naka-fused multiply add/subtract na mga tagubilin ay hindi bibilog sa intermediate
resulta, sa gayon ay gumagawa ng mga resulta na may mas marami pang mga piraso ng katumpakan kaysa sa tinukoy ng
IEEE standard. Tinitiyak din iyon ng hindi pagpapagana ng fused multiply add/subtract na mga tagubilin
ang output ng programa ay hindi sensitibo sa kakayahan ng compiler na pagsamahin ang multiply at
magdagdag/magbawas ng mga operasyon.

-mserialize-volatile
-mno-serialize-volatile
Kapag pinagana ang opsyong ito, ipinapasok ng GCC ang mga tagubiling "MEMW" bago ang "volatile" na memorya
mga sanggunian upang matiyak ang pagkakasunod-sunod na pagkakapare-pareho. Ang default ay -mserialize-volatile.
paggamit -mno-serialize-volatile upang alisin ang mga tagubiling "MEMW".

-mforce-no-pic
Para sa mga target, tulad ng GNU/Linux, kung saan ang lahat ng user-mode na Xtensa code ay dapat na nakaposisyon-
independent code (PIC), hindi pinapagana ng opsyong ito ang PIC para sa pag-compile ng kernel code.

-mtext-section-literal
-mno-text-section-literal
Kinokontrol ng mga opsyong ito ang paggamot sa mga literal na pool. Ang default ay
-mno-text-section-literal, na naglalagay ng mga literal sa isang hiwalay na seksyon sa output
file. Pinapayagan nito ang literal na pool na mailagay sa isang data RAM/ROM, at pinapayagan din nito
ang linker upang pagsamahin ang mga literal na pool mula sa magkahiwalay na object file upang alisin ang kalabisan
literal at pagbutihin ang laki ng code. Sa -mtext-section-literal, ang mga literal ay
interspersed sa seksyon ng teksto upang panatilihin ang mga ito bilang malapit hangga't maaari sa kanilang
mga sanggunian. Maaaring kailanganin ito para sa malalaking file ng pagpupulong.

-mtarget-align
-mno-target-align
Kapag pinagana ang opsyong ito, inutusan ng GCC ang assembler na awtomatikong ihanay
mga tagubilin upang bawasan ang mga parusa ng sangay sa gastos ng ilang density ng code. Ang
Sinusubukan ng assembler na palawakin ang mga tagubilin sa density upang ihanay ang mga target ng sangay at ang
mga tagubilin na sumusunod sa mga tagubilin sa tawag. Kung walang sapat na nauunang ligtas
mga tagubilin sa density upang ihanay ang isang target, walang ginagawang pagpapalawak. Ang default ay
-mtarget-align. Ang mga opsyong ito ay hindi makakaapekto sa paggamot ng auto-aligned
mga tagubilin tulad ng "LOOP", na palaging nakahanay ng assembler, alinman sa pamamagitan ng pagpapalawak
mga tagubilin sa density o sa pamamagitan ng pagpasok ng mga tagubilin sa NOP.

-mlongcalls
-mno-longcalls
Kapag pinagana ang opsyong ito, inaatasan ng GCC ang assembler na magsalin ng mga direktang tawag sa
hindi direktang mga tawag maliban kung matutukoy nito na ang target ng isang direktang tawag ay nasa
saklaw na pinapayagan ng pagtuturo ng tawag. Karaniwang nangyayari ang pagsasaling ito para sa mga tawag sa
function sa iba pang source file. Sa partikular, ang assembler ay nagsasalin ng direkta
"TUMAWAG" na pagtuturo sa isang "L32R" na sinusundan ng isang "CALLX" na pagtuturo. Ang default ay
-mno-longcalls. Dapat gamitin ang opsyong ito sa mga programa kung saan maaari ang target ng tawag
posibleng wala sa saklaw. Ang pagpipiliang ito ay ipinatupad sa assembler, hindi sa
compiler, kaya ang assembly code na nabuo ng GCC ay nagpapakita pa rin ng direktang tawag
mga tagubilin --- tingnan ang disassembled object code upang makita ang aktwal na mga tagubilin.
Tandaan na ang assembler ay gumagamit ng hindi direktang tawag para sa bawat cross-file na tawag, hindi lang
yung talagang wala sa range.

zSerye Options

Ang mga ito ay nakalista sa ilalim

Options para kodigo Henerasyon Kumbensyon
Kinokontrol ng mga opsyong independiyenteng makina na ito ang mga kumbensyon ng interface na ginagamit sa code
henerasyon.

Karamihan sa kanila ay may parehong positibo at negatibong anyo; ang negatibong anyo ng -ffoo is
-fno-foo. Sa talahanayan sa ibaba, isa lamang sa mga form ang nakalista --- ang isa na hindi ang
default. Maaari mong malaman ang iba pang anyo sa pamamagitan ng alinman sa pag-alis hindi- o pagdaragdag nito.

-fbounds-check
Para sa mga front end na sumusuporta dito, bumuo ng karagdagang code upang masuri na dati ang mga indeks
Ang mga array ng pag-access ay nasa loob ng ipinahayag na hanay. Ito ay kasalukuyang sinusuportahan lamang ng
Nagtatapos ang harapan ng Java at Fortran, kung saan ang pagpipiliang ito ay nagde-default sa true at false
ayon sa pagkakabanggit.

-fstack-reuse=antas ng muling paggamit
Kinokontrol ng opsyong ito ang muling paggamit ng stack space para sa mga lokal/auto variable na idineklara ng user at
mga pansamantalang nabuo ng compiler. reuse_level ay maaaring maging lahat, pinangalanang_vars, O wala. lahat
nagbibigay-daan sa muling paggamit ng stack para sa lahat ng lokal na variable at mga pansamantalang, pinangalanang_vars nagbibigay-daan sa
muling gamitin lamang para sa mga lokal na variable na tinukoy ng gumagamit na may mga pangalan, at wala hindi pinapagana ang muling paggamit ng stack
ganap. Ang default na halaga ay lahat. Ang pagpipilian ay kailangan kapag ang programa ay umaabot
ang buhay ng isang saklaw na lokal na variable o isang compiler na nabuo pansamantalang lampas sa
end point na tinukoy ng wika. Kapag ang isang buhay ng isang variable ay nagtatapos, at kung ang
variable na nabubuhay sa memorya, ang nag-optimize na compiler ay may kalayaan na muling gamitin ang stack nito
espasyo kasama ng iba pang mga pansamantala o saklaw na lokal na variable na ang live na hanay ay hindi
magkakapatong dito. Ang legacy code na nagpapahaba ng lokal na buhay ay malamang na masira sa
stack reuse optimization.

Halimbawa,

int *p;
{
int local1;

p = &local1;
local1 = 10;
....
}
{
int local2;
local2 = 20;
...
}

if (*p == 10) // wala sa saklaw ang paggamit ng local1
{

}

Ang isa pang halimbawa:

istruktura A
{
A(int k) : i(k), j(k) { }
int i;
int j;
};

Isang *ap;

void foo(const A& ar)
{
ap = &ar;
}

void bar()
{
foo(A(10)); // Ang buhay ng temp object ay nagtatapos kapag bumalik si foo

{
A a(20);
....
}
ap->i+= 10; // ap reference sa labas ng saklaw na temp na ang espasyo
// ay muling ginagamit na may a. Ano ang halaga ng ap->i?
}

Ang buhay ng isang compiler na nabuo pansamantala ay mahusay na tinukoy ng pamantayan ng C++.
Kapag ang isang habang-buhay ng isang pansamantalang nagtatapos, at kung ang pansamantalang buhay sa memorya, ang
Ang pag-optimize ng compiler ay may kalayaan na muling gamitin ang stack space nito sa ibang mga temporary o
mga saklaw na lokal na variable na ang live na hanay ay hindi nagsasapawan dito. Gayunpaman ang ilan sa mga
Ang legacy code ay umaasa sa gawi ng mga mas lumang compiler kung saan ang mga pansamantalang 'stack
ang espasyo ay hindi muling ginagamit, ang agresibong paggamit muli ng stack ay maaaring humantong sa mga error sa runtime. Ito
ang opsyon ay ginagamit upang kontrolin ang pansamantalang stack reuse optimization.

-ftrapv
Ang pagpipiliang ito ay bumubuo ng mga bitag para sa nilagdaang overflow sa karagdagan, pagbabawas,
pagpaparami ng pagpaparami.

-fwrapv
Ang opsyong ito ay nagtuturo sa compiler na ipalagay na ang sign na arithmetic overflow ng
karagdagan, pagbabawas at pagpaparami ay bumabalot gamit ang twos-complement
representasyon. Ang flag na ito ay nagbibigay-daan sa ilang pag-optimize at hindi pinapagana ang iba. Ito
ang opsyon ay pinagana bilang default para sa front end ng Java, ayon sa kinakailangan ng wikang Java
pagtutukoy.

-fexceptions
Paganahin ang paghawak ng exception. Bumubuo ng karagdagang code na kailangan para magpalaganap ng mga pagbubukod. Para sa
ilang mga target, ito ay nagpapahiwatig na ang GCC ay bumubuo ng frame unwind information para sa lahat ng mga function,
na maaaring makagawa ng makabuluhang laki ng data sa itaas, bagaman hindi ito nakakaapekto
pagbitay. Kung hindi mo tinukoy ang opsyong ito, pinapagana ito ng GCC bilang default para sa mga wika
tulad ng C++ na karaniwang nangangailangan ng paghawak ng exception, at hindi pinagana ito para sa mga wika tulad ng
C na hindi karaniwang nangangailangan nito. Gayunpaman, maaaring kailanganin mong paganahin ang opsyong ito kapag
pag-compile ng C code na kailangang mag-interoperate ng maayos na may nakasulat na exception handler
sa C++. Maaari mo ring i-disable ang opsyong ito kung kino-compile mo ang mas lumang C++
mga program na hindi gumagamit ng exception handling.

-fnon-call-exceptions
Bumuo ng code na nagbibigay-daan sa mga tagubilin sa pag-trap na maghagis ng mga pagbubukod. Tandaan na ito
nangangailangan ng suporta sa runtime na partikular sa platform na hindi umiiral sa lahat ng dako. Bukod dito,
pinapayagan lamang nito pag-trap mga tagubilin para maghagis ng mga eksepsiyon, ibig sabihin, memory reference o
floating-point na mga tagubilin. Hindi nito pinapayagan ang mga pagbubukod na itapon mula sa di-makatwirang
mga humahawak ng signal tulad ng "SIGALRM".

-fdelete-dead-exceptions
Isaalang-alang ang mga tagubiling iyon na maaaring maghagis ng mga pagbubukod ngunit hindi ito nakakatulong
ang pagpapatupad ng programa ay maaaring ma-optimize. Ang pagpipiliang ito ay pinagana bilang default
para sa front end ng Ada, ayon sa pinahihintulutan ng detalye ng wikang Ada. Pag-optimize
ang mga pass na nagdudulot ng pag-alis ng mga patay na pagbubukod ay pinagana nang hiwalay sa iba
mga antas ng pag-optimize.

-funwind-table
Kapareho ng -fexceptions, maliban na ito ay bumubuo lamang ng anumang kinakailangang static na data, ngunit
hindi nakakaapekto sa nabuong code sa anumang iba pang paraan. Karaniwang hindi mo kailangan
paganahin ang pagpipiliang ito; sa halip, pinapagana ito ng isang tagaproseso ng wika na nangangailangan ng ganitong pangangasiwa
sa ngalan mo

-fasynchronous-unwind-tables
Bumuo ng unwind table sa DWARF 2 na format, kung sinusuportahan ng target na makina. Ang mesa ay
eksakto sa bawat hangganan ng pagtuturo, kaya maaari itong magamit para sa stack unwinding mula sa
mga asynchronous na kaganapan (gaya ng debugger o basurero).

-fno-gnu-natatangi
Sa mga system na may kamakailang GNU assembler at C library, ginagamit ng C++ compiler ang
"STB_GNU_UNIQUE" na nagbubuklod upang matiyak na ang mga kahulugan ng template ay static na mga miyembro ng data
at ang mga static na lokal na variable sa mga inline na function ay natatangi kahit na sa pagkakaroon ng
"RTLD_LOCAL"; ito ay kinakailangan upang maiwasan ang mga problema sa isang library na ginagamit ng dalawang magkaibang
"RTLD_LOCAL" na mga plugin depende sa isang kahulugan sa isa sa mga ito at samakatuwid
hindi sumasang-ayon sa isa tungkol sa pagbubuklod ng simbolo. Ngunit ito ang sanhi
"dlclose" na hindi papansinin para sa mga apektadong DSO; kung umaasa ang iyong programa sa muling pagsisimula
ng isang DSO sa pamamagitan ng "dlclose" at "dlopen", maaari mong gamitin -fno-gnu-natatangi.

-fpcc-struct-return
Ibalik ang "maikli" "struct" at "unyon" na mga halaga sa memorya tulad ng mas mahaba, sa halip na sa
nagrerehistro. Ang convention na ito ay hindi gaanong mahusay, ngunit ito ay may kalamangan sa pagpapahintulot
intercallability sa pagitan ng GCC-compiled na mga file at mga file na pinagsama-sama sa iba pang mga compiler,
partikular ang Portable C Compiler (pcc).

Ang tumpak na kumbensyon para sa pagbabalik ng mga istruktura sa memorya ay nakasalalay sa target
mga macro ng pagsasaayos.

Ang mga maiikling istruktura at unyon ay yaong ang laki at pagkakahanay ay tumutugma sa ilan
uri ng integer.

Babala: code na pinagsama-sama sa -fpcc-struct-return switch ay hindi binary compatible
na may code na pinagsama-sama sa -freg-struct-return lumipat. Gamitin ito upang umayon sa isang hindi
default na interface ng binary application.

-freg-struct-return
Ibalik ang mga halaga ng "struct" at "union" sa mga rehistro kung posible. Ito ay mas mahusay
para sa maliliit na istruktura kaysa -fpcc-struct-return.

Kung hindi mo tinukoy ang alinman -fpcc-struct-return ni -freg-struct-return, nagde-default ang GCC sa
alinmang kumbensiyon ang pamantayan para sa target. Kung walang standard convention,
Nagde-default ang GCC sa -fpcc-struct-return, maliban sa mga target kung saan ang GCC ang punong-guro
compiler. Sa mga kasong iyon, maaari naming piliin ang pamantayan, at pinili namin ang mas mahusay
magrehistro ng alternatibong pagbabalik.

Babala: code na pinagsama-sama sa -freg-struct-return switch ay hindi binary compatible
na may code na pinagsama-sama sa -fpcc-struct-return lumipat. Gamitin ito upang umayon sa isang hindi
default na interface ng binary application.

-fshort-enums
Maglaan sa isang uri ng "enum" ng kasing dami ng mga byte na kailangan nito para sa ipinahayag na hanay ng
posibleng mga halaga. Sa partikular, ang uri ng "enum" ay katumbas ng pinakamaliit na integer
uri na may sapat na silid.

Babala: ang -fshort-enums Ang switch ay nagiging sanhi ng GCC na makabuo ng code na hindi binary
tugma sa code na nabuo nang walang switch na iyon. Gamitin ito upang umayon sa isang hindi
default na interface ng binary application.

-fshort-double
Gamitin ang parehong laki para sa "doble" gaya ng para sa "float".

Babala: ang -fshort-double Ang switch ay nagiging sanhi ng GCC na makabuo ng code na hindi binary
tugma sa code na nabuo nang walang switch na iyon. Gamitin ito upang umayon sa isang hindi
default na interface ng binary application.

-fshort-wchar
I-override ang pinagbabatayan na uri para sa "wchar_t" upang maging "short unsigned int" sa halip na ang
default para sa target. Ang pagpipiliang ito ay kapaki-pakinabang para sa pagbuo ng mga programa na tatakbo sa ilalim
ALAK.

Babala: ang -fshort-wchar Ang switch ay nagiging sanhi ng GCC na makabuo ng code na hindi binary
tugma sa code na nabuo nang walang switch na iyon. Gamitin ito upang umayon sa isang hindi
default na interface ng binary application.

-fno-karaniwan
Sa C code, kinokontrol ang paglalagay ng mga hindi nasimulang global variable. Mga compiler ng Unix C
tradisyonal na pinahihintulutan ang maramihang mga kahulugan ng naturang mga variable sa iba't ibang
mga yunit ng compilation sa pamamagitan ng paglalagay ng mga variable sa isang karaniwang bloke. Ganito ang ugali
tinukoy ng -karaniwan, at ito ang default para sa GCC sa karamihan ng mga target. Sa kabilang kamay,
ang pag-uugaling ito ay hindi kinakailangan ng ISO C, at sa ilang mga target ay maaaring magdala ng bilis o code
laki ng parusa sa mga variable na sanggunian. Ang -fno-karaniwan ang opsyon ay tumutukoy na ang
Ang compiler ay dapat maglagay ng mga hindi inisyal na global variable sa seksyon ng data ng object
file, sa halip na gawin ang mga ito bilang karaniwang mga bloke. Ito ay may epekto na kung ang
idineklara ang parehong variable (nang walang "extern") sa dalawang magkaibang compilations, makakakuha ka ng a
error sa multiple-definition kapag ni-link mo ang mga ito. Sa kasong ito, dapat kang mag-compile sa
-karaniwan sa halip. Pinagsasama-sama ng -fno-karaniwan ay kapaki-pakinabang sa mga target kung saan ito
nagbibigay ng mas mahusay na pagganap, o kung nais mong i-verify na gagana ang program
iba pang mga system na palaging tinatrato ang mga hindi nasimulang variable na deklarasyon sa ganitong paraan.

-fno-ident
Huwag pansinin ang "#ident" na direktiba.

-finhibit-size-directive
Huwag maglabas ng ".size" assembler directive, o anumang bagay na magdudulot ng problema
kung ang function ay nahati sa gitna, at ang dalawang halves ay inilalagay sa mga lokasyong malayo
bukod sa alaala. Ginagamit ang opsyong ito kapag nag-compile crtstuff.c; hindi mo dapat kailanganin
upang gamitin ito para sa anumang bagay.

-fverbose-asm
Maglagay ng karagdagang impormasyon sa komentaryo sa nabuong code ng pagpupulong upang gawin itong higit pa
nababasa. Ang pagpipiliang ito ay karaniwang magagamit lamang sa mga talagang kailangang basahin ang
nabuo ang code ng pagpupulong (marahil habang nagde-debug sa mismong compiler).

-fno-verbose-asm, ang default, ay nagiging sanhi ng karagdagang impormasyon na maalis at ito ay
kapaki-pakinabang kapag naghahambing ng dalawang assembler file.

-frecord-gcc-switch
Ang switch na ito ay nagiging sanhi ng command line na ginamit upang i-invoke ang compiler upang maitala sa
ang object file na ginagawa. Ang switch na ito ay ipinapatupad lamang sa ilan
target at ang eksaktong format ng recording ay target at binary file format
umaasa, ngunit karaniwan itong nasa anyo ng isang seksyon na naglalaman ng tekstong ASCII. Ito
switch ay nauugnay sa -fverbose-asm lumipat, ngunit ang switch na iyon ay mga tala lamang
impormasyon sa assembler output file bilang mga komento, kaya hindi nito maabot ang bagay
file. Tingnan din -grecord-gcc-switch para sa isa pang paraan ng pag-iimbak ng mga opsyon sa compiler sa
ang object file.

-fpic
Bumuo ng position-independent code (PIC) na angkop para sa paggamit sa isang shared library, kung
suportado para sa target na makina. Ina-access ng naturang code ang lahat ng pare-parehong address sa pamamagitan ng a
global offset table (GOT). Niresolba ng dynamic na loader ang GOT entries kapag ang
magsisimula ang programa (ang dynamic na loader ay hindi bahagi ng GCC; ito ay bahagi ng operating
sistema). Kung ang laki ng GOT para sa naka-link na executable ay lumampas sa maximum na partikular sa makina
laki, nakakakuha ka ng mensahe ng error mula sa linker na nagpapahiwatig na -fpic hindi gumagana; sa
kaso, i-recompile mo -fPIC sa halip. (Ang mga maximum na ito ay 8k sa SPARC at 32k
sa m68k at RS/6000. Ang x86 ay walang ganoong limitasyon.)

Nangangailangan ng espesyal na suporta ang code na independyente sa posisyon, at samakatuwid ay gumagana lamang sa
ilang mga makina. Para sa x86, sinusuportahan ng GCC ang PIC para sa System V ngunit hindi para sa Araw
386i. Ang code na nabuo para sa IBM RS/6000 ay palaging independyente sa posisyon.

Kapag nakatakda ang flag na ito, ang mga macro na "__pic__" at "__PIC__" ay tinukoy sa 1.

-fPIC
Kung sinusuportahan para sa target na makina, maglabas ng code na independyente sa posisyon, na angkop para sa
dynamic na pag-link at pag-iwas sa anumang limitasyon sa laki ng global offset table. Ito
ang opsyon ay gumagawa ng pagkakaiba sa m68k, PowerPC at SPARC.

Nangangailangan ng espesyal na suporta ang code na independyente sa posisyon, at samakatuwid ay gumagana lamang sa
ilang mga makina.

Kapag nakatakda ang flag na ito, ang mga macro na "__pic__" at "__PIC__" ay tinukoy sa 2.

-fpie
-fPIE
Ang mga pagpipiliang ito ay katulad ng -fpic at -fPIC, ngunit nakabuo ng independiyenteng code ng posisyon
maaari lamang i-link sa mga executable. Karaniwan ang mga opsyong ito ay ginagamit kapag -pie GCC
ginagamit ang opsyon habang nagli-link.

-fpie at -fPIE parehong tumutukoy sa mga macro na "__pie__" at "__PIE__". Ang mga macro ay mayroong
halaga 1 para sa -fpie at 2 para sa -fPIE.

-fno-jump-tables
Huwag gumamit ng mga jump table para sa mga switch statement kahit na kung saan ito ay magiging mas mahusay
kaysa sa iba pang mga diskarte sa pagbuo ng code. Ang pagpipiliang ito ay ginagamit kasabay ng
-fpic or -fPIC para sa code ng gusali na bahagi ng isang dynamic na linker at hindi maaaring
sumangguni sa address ng isang jump table. Sa ilang mga target, ang mga jump table ay hindi nangangailangan ng a
GOT at hindi kailangan ang opsyong ito.

-nakadikit-reg
Tratuhin ang rehistro na pinangalanan reg bilang isang nakapirming rehistro; hindi dapat sumangguni sa nabuong code
ito (maliban marahil bilang isang stack pointer, frame pointer o sa ilang iba pang nakapirming tungkulin).

reg dapat ay pangalan ng isang rehistro. Ang mga pangalan ng rehistro na tinanggap ay partikular sa makina
at tinukoy sa macro na "REGISTER_NAMES" sa macro file ng paglalarawan ng machine.

Ang watawat na ito ay walang negatibong anyo, dahil ito ay tumutukoy sa isang three-way na pagpipilian.

-fcall-ginamit-reg
Tratuhin ang rehistro na pinangalanan reg bilang isang nailalaang rehistro na na-clobbered sa pamamagitan ng function
mga tawag. Maaari itong ilaan para sa mga pansamantalang o variable na hindi nakatira sa kabuuan ng a
tawag. Ang mga function na pinagsama-sama sa ganitong paraan ay hindi nagse-save at nagpapanumbalik ng rehistro reg.

Isang error ang paggamit ng flag na ito gamit ang frame pointer o stack pointer. Paggamit nito
bandila para sa iba pang mga rehistro na may mga naayos na malawakang tungkulin sa pagpapatupad ng makina
ang modelo ay gumagawa ng mga nakapipinsalang resulta.

Ang watawat na ito ay walang negatibong anyo, dahil ito ay tumutukoy sa isang three-way na pagpipilian.

-fcall-save-reg
Tratuhin ang rehistro na pinangalanan reg bilang isang ilalaang rehistro na na-save ng mga function. Maaaring ito ay
inilalaan kahit para sa mga pansamantala o variable na nabubuhay sa isang tawag. Mga pag-andar
pinagsama-sama sa paraang ito i-save at ibalik ang rehistro reg kung gagamitin nila ito.

Isang error ang paggamit ng flag na ito gamit ang frame pointer o stack pointer. Paggamit nito
bandila para sa iba pang mga rehistro na may mga naayos na malawakang tungkulin sa pagpapatupad ng makina
ang modelo ay gumagawa ng mga nakapipinsalang resulta.

Ang ibang uri ng sakuna ay nagreresulta mula sa paggamit ng watawat na ito para sa isang rehistro kung saan
maaaring ibalik ang mga halaga ng function.

Ang watawat na ito ay walang negatibong anyo, dahil ito ay tumutukoy sa isang three-way na pagpipilian.

-fpack-struct[=n]
Nang walang tinukoy na halaga, i-pack ang lahat ng miyembro ng istraktura nang magkasama nang walang mga butas. Kapag a
ang halaga ay tinukoy (na dapat ay isang maliit na kapangyarihan ng dalawa), mga miyembro ng istraktura ng pack
ayon sa halagang ito, na kumakatawan sa pinakamataas na pagkakahanay (iyon ay, mga bagay na may
Ang mga default na kinakailangan sa pag-align na mas malaki kaysa dito ay ang output na posibleng hindi nakahanay sa
ang susunod na angkop na lokasyon.

Babala: ang -fpack-struct Ang switch ay nagiging sanhi ng GCC na makabuo ng code na hindi binary
tugma sa code na nabuo nang walang switch na iyon. Bilang karagdagan, ginagawa nito ang code
suboptimal. Gamitin ito upang umayon sa isang hindi default na interface ng binary na application.

- mga function ng instrumento
Bumuo ng mga tawag sa instrumentation para sa pagpasok at paglabas sa mga function. Kakatapos lang ng function
entry at bago lumabas ng function, ang mga sumusunod na function ng profile ay tinatawag na may
ang address ng kasalukuyang function at ang call site nito. (Sa ilang platform,
Ang "__builtin_return_address" ay hindi gumagana nang higit sa kasalukuyang function, kaya ang site ng tawag
maaaring hindi magagamit ang impormasyon sa mga function ng profiling kung hindi man.)

void __cyg_profile_func_enter (walang bisa *this_fn,
walang bisa *call_site);
walang bisa __cyg_profile_func_exit (walang bisa *this_fn,
walang bisa *call_site);

Ang unang argumento ay ang address ng pagsisimula ng kasalukuyang function, na maaaring
Eksaktong tumingin sa symbol table.

Ginagawa din ang instrumentation na ito para sa mga function na pinalawak na inline sa iba pang mga function.
Ang mga tawag sa pag-profile ay nagpapahiwatig kung saan, sa konsepto, ang inline na function ay ipinasok at
lumabas. Nangangahulugan ito na dapat na available ang mga addressable na bersyon ng naturang mga function. Kung
lahat ng iyong paggamit ng isang function ay pinalawak na inline, ito ay maaaring mangahulugan ng karagdagang pagpapalawak
ng laki ng code. Kung gagamit ka ng "extern inline" sa iyong C code, isang addressable na bersyon ng
ang mga naturang function ay dapat ibigay. (Ito ay karaniwang nangyayari pa rin, ngunit kung nakuha mo
swerte at palaging pinapalawak ng optimizer ang mga function inline, maaaring nakuha mo na
malayo nang hindi nagbibigay ng mga static na kopya.)

Ang isang function ay maaaring bigyan ng attribute na "no_instrument_function", kung saan ganito
hindi tapos ang instrumentation. Ito ay maaaring gamitin, halimbawa, para sa pag-profile
function na nakalista sa itaas, high-priority interrupt routines, at anumang function kung saan
ang mga pagpapaandar ng profiling ay hindi ligtas na matatawag (marahil ang mga humahawak ng signal, kung ang
ang mga gawain sa pag-profile ay bumubuo ng output o naglalaan ng memorya).

-finstrument-functions-exclude-file-list=file,file, ...
Itakda ang listahan ng mga function na hindi kasama sa instrumentation (tingnan ang paglalarawan
of - mga function ng instrumento). Kung ang file na naglalaman ng kahulugan ng function ay tumutugma
kasama ang isa sa file, kung gayon ang function na iyon ay hindi ginagamitan ng instrumento. Ang laban ay tapos na sa
substrings: kung ang file Ang parameter ay isang substring ng pangalan ng file, ito ay itinuturing na
maging isang laban.

Halimbawa:

-finstrument-functions-exclude-file-list=/bits/stl,include/sys

hindi kasama ang anumang inline na function na tinukoy sa mga file na naglalaman ng mga pathname /bits/stl or
isama/sys.

Kung, sa ilang kadahilanan, gusto mong isama ang sulat , sa isa sa sym, magsulat ,. Halimbawa,
-finstrument-functions-exclude-file-list=',,tmp' (tandaan ang nag-iisang quote sa paligid
ang pagpipilian).

-finstrument-functions-exclude-function-list=sym,sym, ...
Ito ay katulad sa -finstrument-functions-exclude-file-list, ngunit itinatakda ng pagpipiliang ito ang
listahan ng mga pangalan ng function na hindi isasama sa instrumentation. Ang magiging pangalan ng function
ang tugma ay ang pangalan nito na nakikita ng gumagamit, gaya ng "vector blah(const vector &)", hindi
ang panloob na sira na pangalan (hal., "_Z4blahRSt6vectorIiSaIiEE"). Ang laban ay tapos na sa
substrings: kung ang sym Ang parameter ay isang substring ng pangalan ng function, ito ay isinasaalang-alang
upang maging isang laban. Para sa C99 at C++ extended identifier, dapat ibigay ang pangalan ng function
sa UTF-8, hindi gumagamit ng mga pangkalahatang pangalan ng character.

-fstack-check
Bumuo ng code upang i-verify na hindi ka lalampas sa hangganan ng stack. Ikaw
dapat tukuyin ang flag na ito kung tumatakbo ka sa isang kapaligiran na may maraming mga thread,
ngunit bihira mo lang itong kailanganing tukuyin sa isang single-threaded na kapaligiran mula noong stack
Awtomatikong nade-detect ang overflow sa halos lahat ng system kung iisa lang ang stack.

Tandaan na ang switch na ito ay hindi aktwal na nagiging sanhi ng pagsusuri upang magawa; ang pagpapatakbo
system o ang runtime ng wika ay dapat gawin iyon. Ang switch ay nagiging sanhi ng pagbuo ng code sa
siguraduhin na nakikita nila ang stack na pinahaba.

Maaari mo ring tukuyin ang isang string parameter: hindi ibig sabihin walang check, panlahat paraan
pilitin ang paggamit ng lumang-style checking, tiyak ay nangangahulugan na gamitin ang pinakamahusay na paraan ng pagsusuri at
ay katumbas ng hubad -fstack-check.

Ang old-style checking ay isang generic na mekanismo na hindi nangangailangan ng partikular na target na suporta
ang compiler ngunit may mga sumusunod na disbentaha:

1. Binagong diskarte sa paglalaan para sa malalaking bagay: palagi silang inilalaan
dynamic kung lumampas ang kanilang laki sa isang nakapirming threshold.

2. Nakapirming limitasyon sa laki ng static na frame ng mga function: kapag ito ay nilagyan ng a
partikular na function, ang stack checking ay hindi maaasahan at isang babala ang ibinibigay ng
tagatala

3. Inefficiency: dahil sa parehong binagong diskarte sa alokasyon at sa generic
pagpapatupad, ang pagganap ng code ay nahahadlangan.

Tandaan na ang old-style stack checking ay ang fallback method din para sa tiyak kung hindi
ang target na suporta ay naidagdag sa compiler.

-fstack-limit-register=reg
-fstack-limit-symbol=sym
-fno-stack-limit
Bumuo ng code upang matiyak na ang stack ay hindi lalago nang higit sa isang tiyak na halaga, alinman
ang halaga ng isang rehistro o ang address ng isang simbolo. Kung kailangan ng mas malaking stack, a
nakataas ang signal sa oras ng pagtakbo. Para sa karamihan ng mga target, itinataas ang signal bago ang stack
lumampas sa hangganan, kaya posible na mahuli ang signal nang hindi kumukuha ng espesyal
pag-iingat.

Halimbawa, kung ang stack ay magsisimula sa ganap na address 0x80000000 at lumalaki pababa,
maaari mong gamitin ang mga flag -fstack-limit-symbol=__stack_limit at
-Wl,--defsym,__stack_limit=0x7ffe0000 upang ipatupad ang limitasyon ng stack na 128KB. Tandaan na
ito ay maaaring gumana lamang sa GNU linker.

-fsplit-stack
Bumuo ng code upang awtomatikong hatiin ang stack bago ito umapaw. Ang resulta
Ang programa ay may magkahiwalay na stack na maaari lamang umapaw kung hindi magawa ng program
maglaan ng higit pang memorya. Ito ay pinakakapaki-pakinabang kapag nagpapatakbo ng mga sinulid na programa, dahil ito
ay hindi na kinakailangan upang kalkulahin ang isang mahusay na laki ng stack na gagamitin para sa bawat thread. Ito ay
kasalukuyang ipinapatupad lamang para sa mga x86 na target na tumatakbo sa GNU/Linux.

Kapag pinagsama-sama ang code sa -fsplit-stack code ng mga tawag na naipon nang wala -fsplit-stack, doon
maaaring hindi gaanong magagamit ang stack space para tumakbo ang huling code. Kung pinagsama-sama ang lahat
code, kasama ang library code, na may -fsplit-stack ay hindi isang opsyon, kung gayon ang linker ay maaari
ayusin ang mga tawag na ito upang ang code ay naipon nang wala -fsplit-stack laging may malaki
salansan. Ang suporta para dito ay ipinapatupad sa gold linker sa paglabas ng GNU binutils
2.21 at sa paglaon.

-fleading-underscore
Ang pagpipiliang ito at ang katapat nito, -fno-leading-underscore, sapilitang baguhin ang paraan C
ang mga simbolo ay kinakatawan sa object file. Ang isang gamit ay ang tumulong sa pag-link sa legacy
code ng pagpupulong.

Babala: ang -fleading-underscore switch ay nagiging sanhi ng GCC upang bumuo ng code na hindi
binary compatible sa code na nabuo nang walang switch na iyon. Gamitin ito upang umayon sa a
hindi default na interface ng binary na application. Hindi lahat ng target ay nagbibigay ng kumpletong suporta
para sa switch na ito.

-ftls-model=modelo
Baguhin ang thread-local na modelo ng storage na gagamitin. Ang modelo argument ay dapat isa sa
global-dynamic, lokal-dynamic, paunang-exec or local-exec. Tandaan na ang pagpipilian ay
napapailalim sa pag-optimize: ang compiler ay maaaring gumamit ng isang mas mahusay na modelo para sa mga simbolo na hindi
makikita sa labas ng unit ng pagsasalin, o kung -fpic ay hindi ibinigay sa command line.

Ang default na wala -fpic is paunang-exec; kasama -fpic ang default ay global-dynamic.

-fvisibility=[default|panloob|nakatago|protektado]
Itakda ang default na ELF image symbol visibility sa tinukoy na opsyon---lahat ng mga simbolo ay
minarkahan ng ganito maliban kung na-override sa loob ng code. Ang paggamit ng tampok na ito ay maaaring napaka
makabuluhang mapabuti ang pag-link at mga oras ng pag-load ng mga shared library ng object, gumawa ng higit pa
na-optimize na code, magbigay ng halos perpektong pag-export ng API at maiwasan ang mga pag-aaway ng simbolo. Ito ay
malakas Inirerekomenda na gamitin mo ito sa anumang ibinahaging bagay na iyong ibinabahagi.

Sa kabila ng nomenclature, default palaging nangangahulugang pampubliko; ibig sabihin, magagamit na ma-link
laban sa labas ng nakabahaging bagay. protektado at panloob ay medyo walang silbi sa
real-world na paggamit kaya ang iba pang karaniwang ginagamit na opsyon ay nakatago. Ang default kung
- kakayahang makita ay hindi tinukoy ay default, ibig sabihin, gawing pampubliko ang bawat simbolo.

Isang magandang paliwanag sa mga benepisyong inaalok sa pamamagitan ng pagtiyak na tama ang mga simbolo ng ELF
Ang visibility ay ibinibigay ng "How To Write Shared Libraries" ni Ulrich Drepper (na maaaring
matatagpuan sahttp://www.akkadia.org/drepper/>)---gayunpaman isang nakahihigit na solusyon ang ginawa
posible sa pamamagitan ng opsyong ito sa pagmamarka ng mga bagay na nakatago kapag ang default ay pampubliko ay gagawin
ang default na nakatago at markahan ang mga bagay na pampubliko. Ito ang pamantayan sa mga DLL sa Windows at
sa -fvisibility=hidden at "__attribute__ ((visibility("default")))" sa halip na
"__declspec(dllexport)" nakakakuha ka ng halos magkaparehong semantika na may magkaparehong syntax.
Ito ay isang malaking pagpapala sa mga nagtatrabaho sa mga cross-platform na proyekto.

Para sa mga nagdaragdag ng suporta sa visibility sa umiiral na code, maaari mong mahanap ang "#pragma GCC
visibility" ng paggamit. Ito ay gumagana sa pamamagitan ng paglalagay mo ng mga deklarasyon na gusto mong itakda
visibility para sa (halimbawa) "#pragma GCC visibility push(hidden)" at "#pragma
GCC visibility pop". Tandaan na dapat tingnan ang visibility ng simbolo as bahagi of
ang API interface kontrata at sa gayon ang lahat ng bagong code ay dapat palaging tukuyin ang visibility kung kailan
hindi ito ang default; ibig sabihin, ang mga deklarasyon para lamang sa paggamit sa loob ng lokal na DSO ay dapat
palagi mamarkahan nang tahasan bilang nakatago upang maiwasan ang hindi direksyon ng PLT
overheads---ginawa itong lubos na malinaw ay tumutulong din sa pagiging madaling mabasa at self-documentation
ng code. Tandaan na dahil sa mga kinakailangan sa pagtutukoy ng ISO C++, "bagong operator" at
Ang "operator delete" ay dapat palaging nasa default na visibility.

Magkaroon ng kamalayan na ang mga header mula sa labas ng iyong proyekto, sa partikular na mga header ng system at
ang mga header mula sa anumang iba pang library na iyong ginagamit, ay maaaring hindi inaasahan na maisama
visibility maliban sa default. Maaaring kailanganin mong tahasang sabihin ang "#pragma GCC
visibility push(default)" bago isama ang anumang naturang mga header.

Ang mga "panlabas" na deklarasyon ay hindi apektado ng - kakayahang makita, kaya maraming code ang maaaring
muling pinagsama-sama sa -fvisibility=hidden na walang pagbabago. Gayunpaman, nangangahulugan ito na
ang mga tawag sa "extern" na mga function na walang tahasang visibility ay gumagamit ng PLT, kaya ito ay higit pa
epektibong gamitin ang "__attribute ((visibility))" at/o "#pragma GCC visibility" para sabihin
ang compiler na "panlabas" na mga deklarasyon ay dapat ituring na nakatago.

Tandaan na ang - kakayahang makita ay nakakaapekto sa C++ hindi malinaw na linkage entity. Nangangahulugan ito na, para sa
halimbawa, ang isang exception class na itinapon sa pagitan ng mga DSO ay dapat na tahasang markahan
na may default na visibility upang ang type_info ang mga node ay pinag-isa sa pagitan ng mga DSO.

Ang isang pangkalahatang-ideya ng mga diskarteng ito, ang kanilang mga benepisyo at kung paano gamitin ang mga ito ay nasa
<http://gcc.gnu.org/wiki/Visibility>.

-fstrict-volatile-bitfields
Dapat gamitin ang opsyong ito kung uma-access sa pabagu-bago ng isip bit-fields (o iba pang istraktura
mga patlang, kahit na ang compiler ay karaniwang pinarangalan ang mga uri na iyon pa rin) ay dapat gumamit ng isang solong
access ng lapad ng uri ng field, na nakahanay sa natural na pagkakahanay kung maaari.
Halimbawa, ang mga target na may memory-mapped peripheral registers ay maaaring mangailangan ng lahat ng iyon
access sa 16 bits ang lapad; sa flag na ito maaari mong ideklara ang lahat ng mga peripheral na bit-field
bilang "unsigned short" (ipagpalagay na ang maikli ay 16 bits sa mga target na ito) upang pilitin ang GCC na gamitin
16-bit na pag-access sa halip na, marahil, isang mas mahusay na 32-bit na pag-access.

Kung ang pagpipiliang ito ay hindi pinagana, ang compiler ay gumagamit ng pinaka mahusay na pagtuturo. Nasa
nakaraang halimbawa, iyon ay maaaring isang 32-bit na pagtuturo sa pag-load, kahit na nag-a-access iyon
byte na hindi naglalaman ng anumang bahagi ng bit-field, o memory-mapped na mga rehistro
walang kinalaman sa ina-update.

Sa ilang mga kaso, tulad ng kapag ang katangiang "naka-pack" ay inilapat sa isang field ng istraktura, ito
maaaring hindi posible na ma-access ang field na may isang solong read o write na tama
nakahanay para sa target na makina. Sa kasong ito, babalik ang GCC sa pagbuo ng maramihang
nag-a-access sa halip na code na magkasala o puputulin ang resulta sa oras ng pagtakbo.

Tandaan: Dahil sa mga paghihigpit ng C/C++11 na modelo ng memorya, hindi pinapayagan ang mga write access
upang hawakan ang mga hindi miyembro ng bit-field. Samakatuwid, inirerekomenda na tukuyin ang lahat ng mga piraso ng
uri ng field bilang mga miyembro ng bit-field.

Ang default na halaga ng opsyong ito ay tinutukoy ng binary interface ng application para sa
ang target na processor.

-fsync-libcalls
Kinokontrol ng opsyong ito kung anumang out-of-line na instance ng "__sync" na pamilya ng
maaaring gamitin ang mga function para ipatupad ang C++11 "__atomic" na pamilya ng mga function.

Ang default na halaga ng opsyong ito ay pinagana, kaya ang tanging kapaki-pakinabang na anyo ng opsyon
is -fno-sync-libcalls. Ang pagpipiliang ito ay ginagamit sa pagpapatupad ng libatomic
runtime library.

Kapaligiran


Inilalarawan ng seksyong ito ang ilang variable ng kapaligiran na nakakaapekto sa kung paano gumagana ang GCC. Ang ilan
gumagana ang mga ito sa pamamagitan ng pagtukoy ng mga direktoryo o prefix na gagamitin kapag naghahanap ng iba't ibang uri
ng mga file. Ang ilan ay ginagamit upang tukuyin ang iba pang mga aspeto ng kapaligiran ng compilation.

Tandaan na maaari mo ring tukuyin ang mga lugar na hahanapin gamit ang mga opsyon gaya ng -B, -I at -L.
Ang mga ito ay nangunguna sa mga lugar na tinukoy gamit ang mga variable ng kapaligiran, na siya namang
unahin ang mga tinukoy ng configuration ng GCC.

WIKA
LC_CTYPE
LC_MESSAGES
LC_ALL
Kinokontrol ng mga environment variable na ito ang paraan ng paggamit ng GCC ng impormasyon sa localization
na nagpapahintulot sa GCC na magtrabaho sa iba't ibang pambansang kumbensyon. Sinusuri ng GCC ang lokal
mga kategorya LC_CTYPE at LC_MESSAGES kung ito ay na-configure upang gawin ito. Ang mga lokal na ito
maaaring itakda ang mga kategorya sa anumang halaga na sinusuportahan ng iyong pag-install. Ang isang karaniwang halaga ay
en_GB.UTF-8 para sa English sa United Kingdom na naka-encode sa UTF-8.

Ang LC_CTYPE ang variable ng kapaligiran ay tumutukoy sa pag-uuri ng character. Ginagamit ito ng GCC
tukuyin ang mga hangganan ng character sa isang string; ito ay kinakailangan para sa ilang mga multibyte
mga encoding na naglalaman ng mga quote at escape character na kung hindi man ay binibigyang-kahulugan bilang a
string end o pagtakas.

Ang LC_MESSAGES ang environment variable ay tumutukoy sa wikang gagamitin sa diagnostic
mga mensahe.

Kung ang LC_ALL ang variable ng kapaligiran ay nakatakda, pinalampas nito ang halaga ng LC_CTYPE at
LC_MESSAGES; kung hindi man, LC_CTYPE at LC_MESSAGES default sa halaga ng WIKA
variable ng kapaligiran. Kung wala sa mga variable na ito ang nakatakda, magde-default ang GCC sa tradisyonal
C ugali sa Ingles.

TMPDIR
If TMPDIR ay nakatakda, tinutukoy nito ang direktoryo na gagamitin para sa mga pansamantalang file. Ginagamit ng GCC
pansamantalang mga file upang hawakan ang output ng isang yugto ng compilation na gagamitin bilang
input sa susunod na yugto: halimbawa, ang output ng preprocessor, na kung saan ay ang
input sa compiler proper.

GCC_COMPARE_DEBUG
Pagtatakda ng GCC_COMPARE_DEBUG ay halos katumbas ng pagpasa -fcompare-debug sa
driver ng compiler. Tingnan ang dokumentasyon ng opsyong ito para sa higit pang mga detalye.

GCC_EXEC_PREFIX
If GCC_EXEC_PREFIX ay nakatakda, ito ay tumutukoy ng prefix na gagamitin sa mga pangalan ng
mga subprogram na isinagawa ng compiler. Walang idinagdag na slash kapag pinagsama ang prefix na ito
na may pangalan ng isang subprogram, ngunit maaari mong tukuyin ang isang prefix na nagtatapos sa isang slash kung
gusto mo.

If GCC_EXEC_PREFIX ay hindi nakatakda, sinusubukan ng GCC na malaman ang naaangkop na prefix na gagamitin
batay sa pathname kung saan ito ginagamit.

Kung hindi mahanap ng GCC ang subprogram gamit ang tinukoy na prefix, susubukan nitong maghanap sa
karaniwang mga lugar para sa subprogram.

Ang default na halaga ng GCC_EXEC_PREFIX is prefix/lib/gcc/ saan unlapi ay ang unlapi sa
ang naka-install na compiler. Sa maraming pagkakataon unlapi ay ang halaga ng "prefix" noong pinatakbo mo ang
i-configure ang script.

Iba pang mga prefix na tinukoy sa -B unahin ang prefix na ito.

Ginagamit din ang prefix na ito para sa paghahanap ng mga file gaya ng crt0.o na ginagamit para sa pag-uugnay.

Bilang karagdagan, ang prefix ay ginagamit sa isang hindi pangkaraniwang paraan sa paghahanap ng mga direktoryo na hahanapin
para sa mga file ng header. Para sa bawat isa sa mga karaniwang direktoryo na ang pangalan ay karaniwang nagsisimula
sa /usr/local/lib/gcc (mas tiyak, na may halaga ng GCC_INCLUDE_DIR), sinusubukan ng GCC
pinapalitan iyon simula sa tinukoy na prefix upang makabuo ng isang kahaliling direktoryo
pangalan. Kaya, kasama -Bfoo/, mga paghahanap sa GCC foo/bar bago ito maghanap sa pamantayan
direktoryo /usr/local/lib/bar. Kung ang isang karaniwang direktoryo ay nagsisimula sa naka-configure
unlapi pagkatapos ay ang halaga ng unlapi ay pinalitan ng GCC_EXEC_PREFIX kapag naghahanap ng header
file.

COMPILER_PATH
Ang halaga ng mga COMPILER_PATH ay isang listahan ng mga direktoryo na pinaghihiwalay ng tutuldok, katulad ng PATH.
Sinusubukan ng GCC ang mga direktoryo na tinukoy kapag naghahanap ng mga subprogram, kung hindi nito magagawa
hanapin ang mga subprogram na ginagamit GCC_EXEC_PREFIX.

LIBRARY_PATH
Ang halaga ng mga LIBRARY_PATH ay isang listahan ng mga direktoryo na pinaghihiwalay ng tutuldok, katulad ng PATH.
Kapag na-configure bilang katutubong compiler, sinusubukan ng GCC ang mga direktoryo kaya tinukoy kung kailan
naghahanap ng mga espesyal na linker file, kung hindi nito mahanap ang mga ito gamit GCC_EXEC_PREFIX.
Ginagamit din ng pagli-link gamit ang GCC ang mga direktoryo na ito kapag naghahanap ng mga ordinaryong aklatan
para sa -l opsyon (ngunit tinukoy ang mga direktoryo sa -L mauna ka).

WIKA
Ang variable na ito ay ginagamit upang ipasa ang lokal na impormasyon sa compiler. Isang paraan kung saan
ang impormasyong ito ay ginagamit ay upang matukoy ang set ng character na gagamitin kapag character
Ang mga literal, string literal at komento ay na-parse sa C at C++. Kapag ang compiler ay
na-configure upang payagan ang mga multibyte na character, ang mga sumusunod na halaga para sa WIKA ay
kinikilala:

C-JIS
Kilalanin ang mga character ng JIS.

C-SJIS
Kilalanin ang mga character ng SJIS.

C-EUCJP
Kilalanin ang mga karakter ng EUCJP.

If WIKA ay hindi tinukoy, o kung mayroon itong ibang halaga, ang tagatala ay gumagamit ng "mblen"
at "mbtowc" gaya ng tinukoy ng default na lokal upang makilala at isalin ang multibyte
character.

Ang ilang karagdagang mga variable ng kapaligiran ay nakakaapekto sa pag-uugali ng preprocessor.

CPATH
C_INCLUDE_PATH
CPLUS_INNCLUDE_PATH
OBJC_INNCLUDE_PATH
Ang halaga ng bawat variable ay isang listahan ng mga direktoryo na pinaghihiwalay ng isang espesyal na karakter, marami
gaya ng PATH, kung saan maghahanap ng mga file ng header. Ang natatanging karakter,
Ang "PATH_SEPARATOR", ay nakadepende sa target at tinutukoy sa oras ng pagbuo ng GCC. Para sa Microsoft
Ang mga target na nakabatay sa Windows ay isang semicolon, at para sa halos lahat ng iba pang mga target ito ay a
tutuldok

CPATH tumutukoy sa isang listahan ng mga direktoryo na hahanapin na parang tinukoy -I, Ngunit
pagkatapos ng anumang mga landas na ibinigay kasama -I mga opsyon sa command line. Ang variable ng kapaligiran na ito
ay ginagamit anuman ang wikang paunang pinoproseso.

Ang natitirang mga variable ng kapaligiran ay nalalapat lamang kapag preprocessing ang partikular
wikang ipinahiwatig. Ang bawat isa ay tumutukoy ng isang listahan ng mga direktoryo na hahanapin na parang
tinukoy na may -isystem, ngunit pagkatapos ng anumang mga landas na ibinigay sa -isystem mga pagpipilian sa
command line.

Sa lahat ng mga variable na ito, ang isang walang laman na elemento ay nagtuturo sa compiler na hanapin ang kasalukuyan nito
gumaganang direktoryo. Maaaring lumitaw ang mga walang laman na elemento sa simula o dulo ng isang landas. Para sa
halimbawa, kung ang halaga ng CPATH ay ":/special/include", na may parehong epekto sa
-NS. -Ako/espesyal/kasama.

DEPENDENCE_OUTPUT
Kung nakatakda ang variable na ito, tinutukoy ng value nito kung paano mag-output ng mga dependency para sa Make based
sa mga non-system header file na pinoproseso ng compiler. Ang mga file ng header ng system ay
hindi pinansin sa output ng dependency.

Ang halaga ng mga DEPENDENCE_OUTPUT ay maaaring isang file name lang, kung saan ang Make rules
ay nakasulat sa file na iyon, na hinuhulaan ang target na pangalan mula sa pangalan ng source file. O ang
ang halaga ay maaaring magkaroon ng anyo file target, kung saan ang mga patakaran ay isinulat sa file file
paggamit target bilang target na pangalan.

Sa madaling salita, ang environment variable na ito ay katumbas ng pagsasama-sama ng mga opsyon -MM
at -MF, na may opsyonal -MT lumipat din.

SUNPRO_DEPENDENCIES
Ang variable na ito ay kapareho ng DEPENDENCE_OUTPUT (tingnan sa itaas), maliban sa sistemang iyon
Ang mga file ng header ay hindi binabalewala, kaya ipinahihiwatig nito -M sa halip na -MM. Gayunpaman, ang
ang pag-asa sa pangunahing input file ay tinanggal.

Gumamit ng mipsel-linux-gnu-g++-5 online gamit ang mga serbisyo ng onworks.net


Mga Libreng Server at Workstation

Mag-download ng Windows at Linux apps

  • 1
    turkdevops
    turkdevops
    TurkDevOps a ?k kaynak yaz?l?m
    geli?tirici topluluklar? DevTurks-Team
    Taraf?ndan desteklenmektedir..
    Mga Tampok:https://github.com/turkdevopshttps://turkdevops.g...
    I-download ang turkdevops
  • 2
    asammdf
    asammdf
    Ang *asammdf* ay isang mabilis na Python parser at
    editor para sa ASAM (Associtation for
    Standardisasyon ng Automation at
    Mga Sistema ng Pagsukat) MDF / MF4
    (Format ng Data ng Pagsukat...
    I-download ang asammdf
  • 3
    LAME (Ang Lame ay hindi isang MP3 Encoder)
    LAME (Ang Lame ay hindi isang MP3 Encoder)
    Ang LAME ay isang tool na pang-edukasyon na gagamitin
    para sa pag-aaral tungkol sa MP3 encoding. Ang
    layunin ng proyektong LAME ay mapabuti
    ang psycho acoustics, kalidad at bilis
    ng MP...
    I-download ang LAME (Lame Aint an MP3 Encoder)
  • 4
    wxPython
    wxPython
    Isang set ng Python extension modules na
    balutin ang cross-platform na mga klase ng GUI mula sa
    wxWidgets.. Audience: Mga Developer. Gumagamit
    interface: X Window System (X11), Win32 ...
    I-download ang wxPython
  • 5
    packfilemanager
    packfilemanager
    Ito ang Total War pack file manager
    proyekto, simula sa bersyon 1.7. A
    maikling pagpapakilala sa Warscape
    modding: ...
    I-download ang packfilemanager
  • 6
    IPef2
    IPef2
    Isang tool sa trapiko sa network para sa pagsukat
    TCP at UDP performance na may mga sukatan
    sa paligid ng parehong throughput at latency. Ang
    Kasama sa mga layunin ang pagpapanatiling aktibo
    iperf cod...
    I-download ang IPrf2
  • Marami pa »

Linux command

Ad