g++-4.7 - ອອນລາຍໃນຄລາວ

ນີ້ແມ່ນຄໍາສັ່ງ g++-4.7 ທີ່ສາມາດດໍາເນີນການໄດ້ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີໂດຍໃຊ້ຫນຶ່ງໃນຫຼາຍບ່ອນເຮັດວຽກອອນໄລນ໌ຂອງພວກເຮົາເຊັ່ນ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator

ໂຄງການ:

NAME


gcc - GNU project C ແລະ C++ compiler

ສະຫຼຸບສັງລວມ


gcc [-c|-S|-E] [-std=ມາດຕະຖານ]
[-g] [- ໜ້າ] [-Oລະດັບ]
[-Wເຕືອນ... ] [- pedantic]
[-Idir... ] [-Ldir... ]
[-Dມະຫາພາກ[=defn]...] [-Uມະຫາພາກ]
[-fທາງເລືອກ... ] [-mທາງ​ເລືອກ​ເຄື່ອງ​... ]
[-o outfile] [@ເອກະສານ] infile...

ພຽງແຕ່ທາງເລືອກທີ່ເປັນປະໂຫຍດທີ່ສຸດແມ່ນໄດ້ລະບຸໄວ້ຢູ່ທີ່ນີ້; ເບິ່ງຂ້າງລຸ່ມນີ້ສໍາລັບສ່ວນທີ່ເຫຼືອ. g ++ ຍອມຮັບ
ສ່ວນຫຼາຍແມ່ນທາງເລືອກດຽວກັນກັບ gcc.

ລາຍລະອຽດ


ເມື່ອທ່ານຮຽກຮ້ອງ GCC, ມັນປົກກະຕິຈະດໍາເນີນການກ່ອນ, ການລວບລວມ, ການປະກອບແລະການເຊື່ອມໂຍງ.
"ທາງເລືອກໂດຍລວມ" ອະນຸຍາດໃຫ້ທ່ານຢຸດຂະບວນການນີ້ຢູ່ໃນຂັ້ນຕອນກາງ. ສໍາລັບ
ຍົກຕົວຢ່າງ, the -c ທາງເລືອກບອກວ່າບໍ່ໃຫ້ແລ່ນຕົວເຊື່ອມຕໍ່. ຫຼັງຈາກນັ້ນ, ຜົນຜະລິດປະກອບດ້ວຍວັດຖຸ
ໄຟລ໌ຜົນຜະລິດໂດຍຜູ້ປະກອບ.

ທາງ​ເລືອກ​ອື່ນ​ຖືກ​ສົ່ງ​ໄປ​ໃນ​ຂັ້ນ​ຕອນ​ຂອງ​ການ​ປຸງ​ແຕ່ງ​. ທາງ​ເລືອກ​ບາງ​ຢ່າງ​ຄວບ​ຄຸມ​
preprocessor ແລະອື່ນໆ compiler ຕົວຂອງມັນເອງ. ແຕ່ທາງເລືອກອື່ນຄວບຄຸມການປະກອບແລະ
ຕົວເຊື່ອມຕໍ່; ສ່ວນໃຫຍ່ເຫຼົ່ານີ້ບໍ່ໄດ້ບັນທຶກຢູ່ທີ່ນີ້, ເພາະວ່າທ່ານບໍ່ຄ່ອຍຈະຈໍາເປັນຕ້ອງໃຊ້ພວກມັນໃດໆ.

ຕົວເລືອກເສັ້ນຄໍາສັ່ງສ່ວນໃຫຍ່ທີ່ທ່ານສາມາດນໍາໃຊ້ກັບ GCC ແມ່ນເປັນປະໂຫຍດສໍາລັບໂຄງການ C; ເມື່ອ​ໃດ​
ທາງເລືອກແມ່ນເປັນປະໂຫຍດພຽງແຕ່ກັບພາສາອື່ນ (ປົກກະຕິແລ້ວ C ++), ຄໍາອະທິບາຍເວົ້າວ່າດັ່ງນັ້ນ
ຢ່າງຈະແຈ້ງ. ຖ້າຄໍາອະທິບາຍສໍາລັບທາງເລືອກສະເພາະໃດຫນຶ່ງບໍ່ໄດ້ກ່າວເຖິງແຫຼ່ງໃດຫນຶ່ງ
ພາສາ, ທ່ານສາມາດນໍາໃຊ້ທາງເລືອກນັ້ນກັບທຸກພາສາທີ່ສະຫນັບສະຫນູນ.

ໄດ້ gcc ໂຄງການຍອມຮັບທາງເລືອກແລະຊື່ໄຟລ໌ເປັນຕົວປະຕິບັດການ. ມີ​ຫຼາຍ​ທາງ​ເລືອກ​ທີ່​ມີ​ຫຼາຍ
ຊື່ຕົວອັກສອນ; ດັ່ງນັ້ນຫຼາຍທາງເລືອກຕົວອັກສອນດຽວອາດຈະ ບໍ່ ຖືກຈັດເປັນກຸ່ມ: -ດີວີດີ ແມ່ນຫຼາຍ
ແຕກ​ຕ່າງ​ຈາກ -d -v.

ທ່ານສາມາດປະສົມທາງເລືອກແລະການໂຕ້ຖຽງອື່ນໆ. ສໍາລັບສ່ວນໃຫຍ່, ຄໍາສັ່ງທີ່ທ່ານໃຊ້ບໍ່ໄດ້
ເລື່ອງ. ຄໍາສັ່ງບໍ່ສໍາຄັນໃນເວລາທີ່ທ່ານໃຊ້ຫຼາຍທາງເລືອກຂອງປະເພດດຽວກັນ; ຕົວຢ່າງ, ຖ້າ
ທ່ານລະບຸ -L ຫຼາຍກວ່າຫນຶ່ງຄັ້ງ, ໄດເລກະທໍລີຖືກຄົ້ນຫາໃນຄໍາສັ່ງທີ່ກໍານົດໄວ້. ນອກຈາກນີ້,
ການບັນຈຸເຂົ້າຮຽນຂອງ -l ທາງເລືອກແມ່ນສໍາຄັນ.

ທາງເລືອກຫຼາຍມີຊື່ຍາວເລີ່ມຕົ້ນດ້ວຍ -f ຫຼືກັບ -W---ຍົກ​ຕົວ​ຢ່າງ,
-fmove-loop-invariants, -Wformat ແລະອື່ນໆ. ສ່ວນໃຫຍ່ເຫຼົ່ານີ້ມີທັງທາງບວກແລະທາງລົບ
ແບບຟອມ; ຮູບ​ແບບ​ທາງ​ລົບ​ຂອງ​ -ffoo ຈະ -fno-foo. ເອກະສານຄູ່ມືນີ້ມີພຽງແຕ່ຫນຶ່ງໃນ
ສອງຮູບແບບນີ້, ອັນໃດບໍ່ແມ່ນຄ່າເລີ່ມຕົ້ນ.

OPTIONS


ທາງເລືອກ Summary
ນີ້ແມ່ນບົດສະຫຼຸບຂອງຕົວເລືອກທັງໝົດ, ຈັດກຸ່ມຕາມປະເພດ. ຄໍາອະທິບາຍຢູ່ໃນຕໍ່ໄປນີ້
ພາກສ່ວນ.

ໂດຍລວມ ທາງເລືອກໃນການ
-c -S -E -o ເອກະສານ -no-canonical-prefixes - ປຸບ -pass-exit-codes -x ພາສາ -v
-### - ຊ່ວຍ[=ລະດັບ[...]] --ເປົ້າ​ຫມາຍ​ການ​ຊ່ວຍ​ເຫຼືອ​ - ການປ່ຽນແປງ - ຫໍ່ @ເອກະສານ -fplugin=ເອກະສານ
-fplugin-arg-ຊື່=arg -fdump-ada-spec[-ບາງ] -fdump-go-spec=ເອກະສານ

C ພາສາ ທາງເລືອກໃນການ
-ansi -std=ມາດຕະຖານ -fgnu89-inline - ຂໍ້ມູນ aux ຊື່​ເອ​ກະ​ສານ
-fallow-parameterless-variadic-functions -fno-asm -fno-builtin -fno-builtin-ຫນ້າທີ່
-fhosted - freestanding -fopenmp -fms-ສ່ວນຂະຫຍາຍ -fplan9-ສ່ວນຂະຫຍາຍ -trigraphs
-no-integrated-cpp - ແບບດັ້ງເດີມ -cpp -fallow-single-precision
-fcond-ບໍ່ກົງກັນ -flax-vector-ແປງ -fsigned-bitfields -fsigned-char
-funsigned-bitfields -funsigned-char

C ++ ພາສາ ທາງເລືອກໃນການ
-fabi-version=n -fno-access-control -fcheck-ໃໝ່ -fconserve-space
-fconstexpr-depth=n -ffriend-ສັກຢາ -fno-elide-constructors -fno-enforce-eh-specs
-ffor-scope -fno-for-scope -fno-gnu-keywords -fno-implicit-templates
-fno-implicit-inline-templates -fno-implement-inlines -fms-ສ່ວນຂະຫຍາຍ
-fno-nonansi-builtins -fnotrow-opt -fno-operator-names -fno-optional-diags
-fpermissive -fno-pretty-templates -frepo -fno-rtti -fstats -ftemplate-depth=n
-fno-threadsafe-statics -fuse-cxa-atexit -fno-ອ່ອນແອ -nostdinc++ -fno-default-inline
-fvisibility-inlines-hidden -fvisibility-ms-compat - ວາບີ -Wconversion-null
-Wctor-dtor-ຄວາມເປັນສ່ວນຕົວ -Wdelete-ບໍ່ແມ່ນ virtual-dtor - ການ​ຂັດ​ຂວາງ​ - ຍົກເວັ້ນ
-Wnon-virtual-dtor - ຄໍາ​ສັ່ງ​ -Weffc++ -Wstrict-null-sentinel
-Wno-ບໍ່ແມ່ນແມ່ແບບ-ເພື່ອນ -Wold-style-cast -Woverloaded-virtual -Wno-pmf-ແປງ
-Wsign-promo

Objective-C ແລະ ຈຸດປະສົງ-C++ ພາສາ ທາງເລືອກໃນການ
-fconstant-string-class=ຊື່​ຫ້ອງ​ -fgnu-runtime -fnext-runtime -fno-nil-receivers
-fobjc-abi-version=n -fobjc-call-cxx-cdtors -fobjc-ສົ່ງໂດຍກົງ -fobjc-ຂໍ້ຍົກເວັ້ນ
-fobjc-gc -fobjc-nilcheck -fobjc-std=objc1 -freplace-objc-classes -fzero-link
-gen-decls -Wassign-intercept -Wno-protocol - ຜູ້​ເລືອກ​ -Wstrict-select-match
-Wunddeclared-ເລືອກ

ພາສາ ເອກະລາດ ທາງເລືອກໃນການ
-fmessage-length=n -fdiagnostics-show-location=[ຄັ້ງຫນຶ່ງ|ທຸກເສັ້ນ]
-fno-diagnostics-show-option

ການ​ເຕືອນ​ໄພ ທາງເລືອກໃນການ
-fsyntax ເທົ່ານັ້ນ -fmax-errors=n - pedantic -pedantic ຜິດ​ພາດ​ -w -Wextra - ຝາ
-waddress -Waggregate-ກັບຄືນ - Warray-bounds - ຄຸນ​ລັກ​ສະ​ນະ Wno​
-Wno-builtin-macro-redefined -Wc++-compat -Wc++11-compat -Wcast-align -Wcast-qual
-Wchar-subscripts - Wclobbered - ຄໍາເຫັນ - ການ​ປ່ຽນ​ແປງ​ -Wcoverage-mismatch -Wno-cpp
-Wno-deprecated -Wno-deprecated-ປະກາດ -Wdisabled-optimization -Wno-div-by-zero
- ການ​ສົ່ງ​ເສີມ​ສອງ​ຄັ້ງ​ - ຮ່າງກາຍອ່ອນເພຍ -Wenum ປຽບທຽບ -wno-endif-labels - ຄວາມ​ຜິດ​ພາດ​ -Wror=*
- ຄວາມ​ຜິດ​ພາດ Wfatal​ -Wfloat-ເທົ່າທຽມກັນ -Wformat -Wformat=2 -Wno-format-contains-nul
-Wno-format-extra-args -Wformat-nonliteral -Wformat ຄວາມ​ປອດ​ໄພ​ -Wformat-y2k
-Wframe-larger-than=len -Wno-free-nonheap-object -Wjump-misses-init
-Wignored-qualifiers - Wimplicit -Wimplicit-function-ປະກາດ -Wimplicit-int
- ວິນ​ຍານ​ຕົນ​ເອງ​ - Winline -Wmaybe-unitialized -Wno-int-to-pointer-cast
-Wno-invalid-offsetof -Winvalid-pch -Wlarger-than=len -Wunsafe-loop-optimizations
-Wlogical-op - ຍາວ - ຍາວ - ຜູ້ຍິງ -Wmaybe-unitialized -Wmissing-braces
-Wmissing-field-initializers -Wmissing-format-attribute -Wmissing-include-dirs
-Wno-mudflap -Wno-multichar -Wnonnull -Wno-ລົ້ນ -Woverlength-strings - ຫໍ່
-Wpacked-bitfield-compat - ແຜ່ນແພ -Wparentheses -Wpedantic-ms-format
-Wno-pedantic-ms-format -Wpointer-arith -Wno-pointer-to-int-cast -Wredundant-decls
- ປະ​ເພດ Wreturn​ - ລໍາດັບຈຸດ - ເງົາ -Wsign-ປຽບທຽບ -Wsign ການ​ປ່ຽນ​ແປງ​
-Wstack-protector -Wstack-usage=len - ເປັນການລ້າສຸດ -Wstrict-aliasing=n
-Wstrict-ລົ້ນ -Wstrict-overflow=n -Wsuggest-attribute=[ບໍລິສຸດ|const|noreturn]
- ສະຫວິດ -Wswitch-default -Wwwitch-enum -Wsync-nand -Wsystem-headers -Wtrampoline
-Wtrigraphs -Wtype- limits -Wundef - ປະກາດ -Wunknown-pragmas -Wno-pragmas
-Wunsuffixed-float-constants - ບໍ່​ໄດ້​ນໍາ​ໃຊ້​ -Wunused-function -Wunused-label
-Wunused-local-typedefs -Wunused-ພາລາມິເຕີ -Wno-unused-ຜົນ -Wunused-value
-Wunused-variable -Wunused-but-set-parameter -Wunused-but-set-variable
-Wvariadic-macros -Wvector-ປະຕິບັດການ-ປະສິດທິພາບ -Wvla -Wvolatile-register-var
-Write-strings -Wzero-as-null-pointer-constant

C ແລະ ຈຸດປະສົງ-C-ເທົ່ານັ້ນ ການ​ເຕືອນ​ໄພ ທາງເລືອກໃນການ
-Wbad-function-cast -Wmissing ການ​ປະ​ກາດ​ -Wmissing-parameter-type
-Wmissing-prototypes -Wnested-externs -Wold-style-ປະກາດ -Wold-style-ນິຍາມ
-Wstrict-prototypes - ແບບດັ້ງເດີມ - ການ​ປ່ຽນ​ແປງ​ແບບ​ດັ້ງ​ເດີມ​
-Wdeclaration ຫຼັງ​ຈາກ​ການ​ຖະ​ແຫຼງ​ການ​ -Wpointer-ເຊັນ​

Debugging ທາງເລືອກໃນການ
-dຕົວອັກສອນ - dumpspecs - ເຄື່ອງ​ຂີ້​ຝຸ່ນ - dumpversion -fdbg-cnt-list -fdbg-cnt=ຕ້ານ -
ລາຍການມູນຄ່າ -fdisable-ipa-pass_name -fdisable-rtl-pass_name -fdisable-rtl-ຜ່ານ-
ຊື່=ບັນຊີລາຍຊື່ໄລຍະ -fdisable-tree-pass_name -fdisable-tree-ຊື່​ຜ່ານ=ບັນຊີລາຍຊື່ໄລຍະ
-fdump-noaddr -fdump-ບໍ່ມີຕົວເລກ -fdump-unnumbered-links -fdump-translation-unit[-n]
-fdump-class-hierarchy[-n] -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline
-fdump-ຜ່ານ -fdump-ສະຖິຕິ -fdump-tree-ທັງໝົດ -fdump-ຕົ້ນໄມ້-ຕົ້ນສະບັບ[-n]
-fdump-tree-optimized[-n] -fdump-tree-cfg -fdump-tree-vcg -fdump-tree-alias
-fdump-tree-ch -fdump-tree-ssa[-n] -fdump-tree-pre[-n] -fdump-tree-ccp[-n]
-fdump-tree-dce[-n] -fdump-tree-gimple[- ດິບ] -fdump-tree-mudflap[-n]
-fdump-tree-dom[-n] -fdump-tree-dse[-n] -fdump-tree-phiprop[-n] -fdump-tree-phiopt[-n]
-fdump-tree-forwprop[-n] -fdump-tree-copyrename[-n] -fdump-tree-nrv -fdump-tree-vect
-fdump-tree-sink -fdump-tree-sra[-n] -fdump-tree-forwprop[-n] -fdump-tree-free[-n]
-fdump-tree-vrp[-n] -ftree-vectorizer-verbose=n -fdump-tree-storeccp[-n]
-fdump-final-insns=ເອກະສານ -fcompare-debug[=ເລືອກ] -fcompare-debug-ວິນາທີ
-feliminate-dwarf2-dups -feliminate-unused-debug-types
-feliminate-unused-debug-ສັນຍາລັກ -femit-class-debug-ສະເໝີ -fenable-ປະເພດ-ຜ່ານ
-fenable-ປະເພດ-ຜ່ານ=ບັນຊີລາຍຊື່ໄລຍະ -fdebug-types-section -fmem ບົດລາຍງານ -fpre-ipa-mem-ລາຍງານ
-fpost-ipa-mem-report -fprofile-arcs -frandom-seed=string -fsched-verbose=n
-fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose -fstack ການ​ນໍາ​ໃຊ້​
-ftest-ການ​ຄຸ້ມ​ຄອງ​ -ftime ລາຍ​ງານ​ -fvar-ຕິດຕາມ -fvar-tracking-assignments
-fvar-tracking-assignments-toggle -g -gລະດັບ -gtoggle -gcoff -gdwarf-ສະບັບພາສາ -ggdb
-grecord-gcc-ສະຫຼັບ -gno-record-gcc-switches -gstabs -gstabs+ -gstrict-dwarf
-gno-strict-dwarf -gvms -gxcoff -gxcoff+ -fno-merge-debug-strings
-fno-dwarf2-cfi-asm -fdebug-prefix-map=ອາຍຸ=ໃຫມ່ -femit-struct-debug-baseonly
-femit-struct-debug-ຫຼຸດລົງ -femit-struct-debug-ລາຍລະອຽດ[=ລາຍຊື່ສະເພາະ] -p - ໜ້າ
-print-file-name=ຫ້ອງສະຫມຸດ -print-libgcc-file-name -print-multi-directory
-print-multi-lib -print-multi-os-directory -print-prog-name=ໂຄງການ
-print-search-dirs -Q -print-sysroot -print-sysroot-headers-suffix - save-temps​
-save-temps=cwd -save-temps=obj ເວລາ[=ເອກະສານ]

ທີ່ດີທີ່ສຸດ ທາງເລືອກໃນການ
-falign-functions[=n] -falign-jumps[=n] -falign-labels[=n] -falign-loops[=n]
-fassociative-ຄະນິດສາດ -fauto-inc, ຄະ -fbranch-ຄວາມເປັນໄປໄດ້ -fbranch-target-load-optimize
-fbranch-target-load-optimize2 -fbtr-bb-ສະເພາະ -fcaller-ປະຫຍັດ -fcheck-data-deps
-fcombine-stack-ປັບ -fconserve-stack -fcompare-elim -fcprop-ລົງທະບຽນ
-fcrossjumping -fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-ກົດລະບຽບ
-fcx-limited-range -fdata-sections -fdce -fdelayed-ສາຂາ -fdelete-null-pointer-checks
-fdevirtualize -fdse - ຄວາມ​ຢ້ານ​ກົວ​, inlining​ -fipa-sra -fexpensive-optimizations
-ffat-lto-ວັດຖຸ -fast ຄະ​ນິດ​ສາດ​ -ffinite-math-ເທົ່ານັ້ນ - ຮ້ານຂາຍເຄື່ອງຍ່ອຍ
-fexcess-precision=ແບບ -fforward-ຂະຫຍາຍພັນ -ffp-ສັນຍາ=ແບບ -function-sections
-fgcse -fgcse-after-reload -fgcse-las -fgcse-lm -fgraphite-ຕົວຕົນ -fgcse-sm
-fif ການ​ປ່ຽນ​ແປງ​ -fif ການ​ປ່ຽນ​ແປງ 2​ -findirect-inlining -finline-functions
-finline-functions-called-one ດຽວ -finline-limit=n -finline-small-functions -fipa-cp
-fipa-cp-clone -fipa-matrix-reorg -fipa-pta -fipa-profile -fipa-pure-const
-fipa ອ້າງ​ອີງ​ -fira-algorithm=ຂັ້ນຕອນວິທີ -fira-region=ພູມິພາກ -fira-loop-pressure
-fno-ira-share-save-slots -fno-ira-share-spill-slots -fira-verbose=n -fivopts
-fkeep-inline-ຟັງຊັນ -fkeep-static-consts -floop-block -floop-flatten
-floop-interchange -floop-strip-mine -floop-parallelize-ທັງໝົດ -flto
-flto-compression-level -flto-partition=ພຶຊະຄະນິດ flto-ບົດລາຍງານ -fmerge-ທັງໝົດ-ຄົງທີ່
-fmerge-ຄົງທີ່ -fmodulo-sched -fmodulo-sched-allow-regmoves -fmove-loop-invariants
fmudflap -fmudflapir -fmudflapth -fno-branch-count-reg -fno-default-inline
-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-ເຊັນຊື່-ສູນ -fno-toplevel-reorder -fno-traping-ຄະນິດສາດ
-fno-zero-initialized-in-bss -fomit-frame-pointer -foptimize-ລົງທະບຽນ-ຍ້າຍ
-foptimize-sibling-calls -fpartial-inlining -fpeel-loops -fpredictive-commoning
-fprefetch-loop-arrays -fprofile-ການ​ແກ້​ໄຂ​ -fprofile-dir=ເສັ້ນທາງ -fprofile-generate
-fprofile-generate=ເສັ້ນທາງ -fprofile-ໃຊ້ -fprofile-use=ເສັ້ນທາງ -fprofile-ຄ່າ
-freciprocal-ຄະນິດສາດ ຟຣີ -fregmove -frename-ລົງທະບຽນ -freorder-ຕັນ
-freorder-blocks-and-partition -freorder - ຫນ້າ​ທີ່​ -frerun-cse-after-loop
-freschedule-modulo-schedule-loops - ຄະ​ນິດ​ສາດ​ພື້ນ​ຖານ​ -fsched2-use-superblocks
-fsched-ຄວາມກົດດັນ -fsched-spec-load -fsched-spec-load-ອັນຕະລາຍ
-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-insns
-fschedule-insns2 -fsection-anchors -fselective-ການ​ກໍາ​ນົດ​ເວ​ລາ​ -fselective-ກຳນົດ​ເວລາ2
-fsel-sched-pipelining -fsel-sched-pipelining-outer-loops -fshrink-wrap
-fsignaling-nans -fsingle-precision-constant -fsplit-ivs-in-unroller
-fsplit-wide-types -stack-protector -fstack-protector-ທັງໝົດ -fstrict-aliasing
-fstrict-ລົ້ນ -fthread-jumps -ftracer -ftree-bit-ccp -ftree-builtin-call-dce
-ftree-ccp -ftre-ch -ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree-copy-prop
-free-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse -ftree-forwprop
- ຟຣີ​ຟຣີ​ -ftree-loop-if-convert -ftree-loop-if-convert-stores -ftree-loop-im
-ftree-phiprop -ftree-loop-ການແຜ່ກະຈາຍ -ftree-loop-distribute-patterns
-ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize -ftree-parallelize-loops=n
-ftre-pre -ftree-partial-pre -ftree-pta -ftree-reassoc - ອ່າງລ້າງມື -ftree-sra
-ftre-switch-ແປງ -ftree-tail-merge - ຫ້າ​ປີ​ -ftree-vect-loop-version
-ftree-vectorize -ftree-vrp -funit-at-a-time -funroll-all-loops -funroll-loops
-funsafe-loop-optimizations -funsafe-math-optimizations -funswitch-loops
-fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb - ໂຄງ​ການ​ທັງ​ຫມົດ​ -fwpa
-fuse-ld=linker -fuse-linker-plugin --param ຊື່=ມູນຄ່າ -O -O0 -O1 -O2 -O3 -ອສ
- ໄວ

ໂປເຈັກເຕີ້ ທາງເລືອກໃນການ
-Aຄໍາຖາມ=ຄໍາຕອບ -HAS-ຄໍາຖາມ[=ຄໍາຕອບ] -C -dD -dI -dM -dN -Dມະຫາພາກ[=defn] -E -H
-idirafter dir - ລວມ​ທັງ​ ເອກະສານ - ໄອມາໂຄຣ ເອກະສານ - ຄໍາ​ນິ​ຍາມ​ ເອກະສານ -iwithprefix dir
-iwithprefix ກ່ອນ dir - ລະບົບ dir -Imultilib dir -isysroot dir -M ເອັມ -MF -MG
-MP -MQ -MT -nostdinc -P -fdebug-cpp -ftrack-macro-ຂະຫຍາຍ -fworking-directory
-remap -trigraphs -undef -Uມະຫາພາກ -Wp​,ທາງເລືອກ - ໂປເຊດເຊີ Xpre ທາງເລືອກ

ຄົນລອບສັງຫານ ທາງເລືອກ
- ວ.ທາງເລືອກ -Xassembler ທາງເລືອກ

ຜູ້ເຊື່ອມໂຍງ ທາງເລືອກໃນການ
object-file-name -lຫ້ອງສະຫມຸດ -nostartfiles -nodefaultlibs -nostdlib -pie -rdynamic -s
-static -static-libgcc -static-libstdc++ - ແບ່ງ​ປັນ​ -shared-libgcc - ສັນ​ຍາ​ລັກ​ -T script
-Wl,ທາງເລືອກ -Xlinker ທາງເລືອກ -u ສັນຍາລັກ

Directory ທາງເລືອກໃນການ
-Bຄຳ ນຳ ໜ້າ -Idir -iplugindir=dir -iquotedir -Ldir -spec=ເອກະສານ -AND- --sysroot=dir

ເຄື່ອງ ເພິ່ງພາອາໄສ ທາງເລືອກໃນການ
AAArch64 ທາງເລືອກໃນການ -mbig-endian -mlittle-endian -mgeneral-regs-ເທົ່ານັ້ນ -mcmodel=ຂະໜາດນ້ອຍ
-mcmodel=ຂະໜາດນ້ອຍ -mcmodel=ໃຫຍ່ -mstrict-align -momit-leaf-frame-pointer
-mno-omit-leaf-frame-pointer -mtls-dialect=desc -mtls-dialect=ແບບດັ້ງເດີມ - ມີນາ=ຊື່
-mcpu=ຊື່ -mtune=ຊື່

Adapteva Epiphany ທາງເລືອກໃນການ -mhalf-reg-file -mprefer-short-insn-regs -mbranch-cost=num
-mcmove -mnops=num -msoft-cmpsf -msplit-lohi -mpost-inc -mpost-ປັບ​ປຸງ​ແກ້​ໄຂ​
-mstack-offset=num -mround-ໃກ້ທີ່ສຸດ -mlong-ໂທ -mshort-ໂທ -msmall16 -mfp-mode=ຮູບແບບການ
-mvect-double -max-vect-align=num -msplit-vecmove-ຕົ້ນ -m1reg-reg

ARM ທາງເລືອກໃນການ -mapcs-frame -mno-apcs-frame -mabi=ຊື່ -mapcs-stack-ກວດ
-mno-apcs-stack-check -mapcs-float -mno-apcs-float -mapcs-reentrant
-mno-apcs-reentrant -msched-prolog -mno-sched-prolog -mlittle-endian -mbig-endian
-mwords-little-endian -mfloat-abi=ຊື່ -mfpe -mfp16-format=ຊື່ -mthumb-interwork
-mno-thumb-interwork -mcpu=ຊື່ - ມີນາ=ຊື່ -mfpu=ຊື່ -mstructure-size-boundary=n
-mabort-on-norturn -mlong-ໂທ -mno-long-calls -msingle-pic-base
-mno-single-pic-base -mpic ມັກສະມາຊິກ =reg -mnop-fun-dllimport -mcirrus-fix-invalid-insns
-mno-cirrus-fix-invalid-insns -mpoke-function-name - ໂປ້ມື - ມາມ -mtpcs-frame
-mtpcs-ໃບ-ກອບ -mcaller-super-interworking -mcallee-super-interworking -mtp=ຊື່
-mtls-ພາສາ =ພາສາ -mword ການ​ຍົກ​ຍ້າຍ​ -mfix-cortex-m3-ldrd -munaligned-ເຂົ້າ​ເຖິງ​
-mneon-for-64bits

APR ທາງເລືອກໃນການ -mmcu=mcu -maccumulate-args -mbranch-cost=ຄ່າໃຊ້ຈ່າຍ -mcall-prologues - mint8
-mno-interrupts -mrelax -mshort-ໂທ -mstrict-X -mtiny-stack

ດຳ ທາງເລືອກໃນການ -mcpu=cpu[-sirevision] - ຊິມ -momit-leaf-frame-pointer
-mno-omit-leaf-frame-pointer -mspecld-ຜິດປົກກະຕິ -mno-specld-ຜິດປົກກະຕິ -mcsync-ຜິດປົກກະຕິ
-mno-csync-ຜິດປົກກະຕິ -mlow-64k -mno-low64k -mstack-check-l1 - ຫໍສະໝຸດກາງ
-mno-id-shared-library -mshared-library-id=n -mleaf-id-shared-library
-mno-leaf-id-shared-library -msep-ຂໍ້ມູນ -mno-sep-data -mlong-ໂທ -mno-long-calls
-mfast-fp -minline-plt - mmulticore - mcorea -mcoreb -msdram -micplb

C6X ທາງເລືອກໃນການ -mbig-endian -mlittle-endian - ມີນາ=cpu - ຊິມ -msdata=ປະເພດ sdata

CRIS ທາງເລືອກໃນການ -mcpu=cpu - ມີນາ=cpu -mtune=cpu -mmax-stack-frame=n
-melinux-stacksize=n -metrax4 -metrax100 -mpdebug -mcc-init -mno-ຜົນຂ້າງຄຽງ
-mstack-align -mdata-align -mconst-align -m32-ບິດ -m16-ບິດ -m8-ບິດ
-mno-prologue-epilogue -mno-gotplt -melf - maout -melinux -mlinux -ຊິມ -sim2
-mmul-bug-ແກ້ໄຂ -mno-mul-bug-ແກ້ໄຂ

CR16 ທາງເລືອກໃນການ -mmac -mcr16cplus -mcr16c - ຊິມ - mint32 -mbit-ops -mdata-model=ຮູບແບບ

Darwin ທາງເລືອກໃນການ -all_load -allowable_client -ໂຄ້ງ -arch_errors_fatal -arch_only
-bind_at_load - ມັດ -bundle_loader -client_name -compatibility_version
- ຮຸ່ນ_ປະຈຸບັນ -dead_strip -dependency-file -dylib_file -dylinker_install_name
- ແບບເຄື່ອນໄຫວ -dynamiclib -exported_symbols_list - ບັນ​ຊີ​ລາຍ​ການ​ -flat_namespace
-force_cpusubtype_ALL -force_flat_namespace -headerpad_max_install_names - ໂຄງ​ການ​ຮູບ​ພາບ​
-image_base -ໃນ​ມັນ -install_name -keep_private_externs -multi_module
-multiply_defined -multiply_defined_unused -noall_load
-no_dead_strip_inits_and_terms -nofixprebinding - ນາມສະກຸນ - noprebind
-noseglinkedit -pagezero_size - prebind -prebind_all_twolevel_modules -private_bundle
-read_only_relocs -sectalign -sectobject ສັນ​ຍາ​ລັກ​ - ເປັນ​ຫຍັງ​ການ​ໂຫຼດ​ -seg1 addr -sectcreate
-sectobject ສັນ​ຍາ​ລັກ​ - ຂະ​ແຫນງ​ການ​ -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 -single_module -static -sub_library -sub_umbrella
- twolevel_namespace - ຄັນຮົ່ມ - ບໍ່​ໄດ້​ກໍາ​ນົດ​ -unexported_symbols_list
-weak_reference_mismatch - whatsloaded -F -gused - gfull -mmacosx-version-min=ສະບັບພາສາ
- mkernel -mone-byte-bool

DEC Alpha ທາງເລືອກໃນການ -mno-fp-regs -msoft-float -malpha-as - ມກ -ມີ່
-mieee-with-inexact -mieee-ສອດຄ່ອງ -mfp-trap-mode=ຮູບແບບການ -mfp-rounding-mode=ຮູບແບບການ
-mtrap-precision=ຮູບແບບການ -mbuild-ຄົງທີ່ -mcpu=cpu-type -mtune=cpu-type -mbwx -mmax
-mfix -mcix -mfloat-vax -mfloat-ieee -mexplicit-relocs -msmall-ຂໍ້ມູນ -mlarge-data
-msmall-text - ຂະ​ຫນາດ​ໃຫຍ່​ຂໍ້​ຄວາມ​ -mmemory-latency=ທີ່ໃຊ້ເວລາ

DEC Alpha/VMS ທາງເລືອກໃນການ -mvms-return-codes -mdebug-main=ຄຳ ນຳ ໜ້າ - mmalloc64

FR30 ທາງເລືອກໃນການ -msmall-ແບບ -mno-lsim

LIF ທາງເລືອກໃນການ -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 -mhard-float -msoft-float
-malloc-cc -mfixed-cc -mdword -mno-dword -mdouble -mno-double - ສື່​ມວນ​ຊົນ -mno-media
- ມົວລັດ -mno-muladd -mfdpic -minline-plt -mgrel-ro -multilib-library-pic
-mlinked-fp -mlong-ໂທ -malign-labels -mlibrary-pic -macc-4 -macc-8 -mpack
-mno-pack -mno-ທຸງ -mcond-ຍ້າຍ -mno-cond-move -moptimize-membar
-mno-optimize-membar -mscc -mno-scc -mcond-exec -mno-cond-exec -mvliw-ສາຂາ
-mno-vliw-ສາຂາ -Mmulti-cond-exec-exec -mno-multi-cond-exec -mnested-cond-exec
-mno-nested-cond-exec -mtomcat-ສະຖິຕິ -mTLS -mtls -mcpu=cpu

GNU / Linux ທາງເລືອກໃນການ -mglibc - muclibc -mbionic -mandroid -tno-android-cc -tno-android-ld

H8 / 300 ທາງເລືອກໃນການ -mrelax -mh -ນາງ​ສາວ - ນ - mint32 -malign-300

HPPA ທາງເລືອກໃນການ - ມີນາ=ປະເພດສະຖາປັດຕະຍະກໍາ -mbig-ສະຫຼັບ -mdisable-fpregs
-mdisable-indexing -mfast-indirect-calls - ມກ -mgnu-ld -mhp-ld
-mfixed-range=ໄລຍະລົງທະບຽນ -mjump-in-delay -mlinker-opt -mlong-ໂທ
-mlong-load-store -mno-big-switch -mno-disable-fpregs -mno-disable-indexing
-mno-fast-indirect-calls -mno-gas -mno-jump-in-delay -mno-long-load-store
-mno-portable-runtime -mno-soft-float -mno-space-regs -msoft-float -mpa-risc-1-0
-mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime -mschedule=cpu-type -mspace-regs
-msio -mwsio -muix=unix-std -nolibdld -static - ກະທູ້

i386 ແລະ x86-64 ທາງເລືອກໃນການ -mtune=cpu-type - ມີນາ=cpu-type -mfpmath=ຫນ່ວຍບໍລິການ -masm=ພາສາ
-mno-fancy-math-387 -mno-fp-ret-in-387 -msoft-float -mno-wide-ຄູນ -mrtd
-malign-double -mpreferred-stack-boundary=num -mincoming-stack-boundary=num -mcld
-mcx16 -msahf - mmovbe -mcrc32 -mrecip -mrecip=ເລືອກ -mvzeroupper -mprefer-avx128 -mmmx
-msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx -mavx2 - ແມ່ -mpclmul
-mfsgsbase -mrdrnd -mf16c -mfma -msse4a -m3dnow -mpopcnt - mabm -mbmi -mtbm -mfma4
-mxop -mlzcnt -mbmi2 -mlwp -mthreads -mno-align-stringops -minline-all-stringops
-minline-stringops-ແບບໄດນາມິກ -mstringop-strategy=ພຶຊະຄະນິດ -mpush-args
-maccumulate-outgoing-args -m128bit-ຍາວ-ສອງເທົ່າ -m96bit-ຍາວ-ສອງເທົ່າ -mregparm=num
-msseregparm -mveclibabi=ປະເພດ -mvect8-ret-in-mem -mpc32 -mpc64 -mpc80 -mstackrealign
-momit-leaf-frame-pointer -mno-red-zone -mno-tls-direct-seg-refs -mcmodel=code-model
-mabi=ຊື່ -maddress-mode=ຮູບແບບການ -m32 -m64 -mx32 -mlarge-data-threshold=num -msse2avx
-mfentry -m8bit-idiv -mavx256-split-unaligned-load -mavx256-split-unaligned-store

i386 ແລະ x86-64 Windows ທາງເລືອກໃນການ -mconsole -mcygwin -mno-cygwin -mdll
-mnop-fun-dllimport -mthread -municode -mwin32 - ປ່ອງຢ້ຽມ -fno-set-stack-executable

IA-64 ທາງເລືອກໃນການ -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic
-mvolatile-asm-stop -mregister-names -msdata -mno-sdata -mconstant-gp -mauto-pic
-mfused-madd -minline-float-divide-min-latency -minline-float-divide-max-throughput
-mno-inline-float-divide -minline-int-divide-min-latency
-minline-int-divide-max-throughput -mno-inline-int-divide -minline-sqrt-min-latency
-minline-sqrt-max-throughput -mno-inline-sqrt -mdwarf2-asm -mearly-stop-bits
-mfixed-range=ໄລຍະລົງທະບຽນ -mtls-size=tls-size -mtune=cpu-type -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-ຫຼັງຈາກ-ທຸກໆຮອບວຽນ
-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

IA-64/VMS ທາງເລືອກໃນການ -mvms-return-codes -mdebug-main=ຄຳ ນຳ ໜ້າ - mmalloc64

LM32 ທາງເລືອກໃນການ -mbarrel-shift-enabled -mdivide-ເປີດໃຊ້ງານ - multiply-enabled
-msign-extend-enabled -muser-enabled

M32R/D ທາງເລືອກໃນການ -m32r2 -m32rx -m32r -mdebug -malign-loops -mno-align-loops
-missue-rate=ຈໍານວນ -mbranch-cost=ຈໍານວນ -mmodel=code-size-model-type -msdata=ຂໍ້ມູນ-
ປະເພດ -mno-flush-func -mflush-func=ຊື່ -mno-flush-ດັກ -mflush-trap=ຈໍານວນ -G num

M32C ທາງເລືອກໃນການ -mcpu=cpu - ຊິມ -memregs=ຈໍານວນ

M680x0 ທາງເລືອກໃນການ - ມີນາ=ໂຄ້ງ -mcpu=cpu -mtune=ປບັ -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 -mshort -mno-ສັ້ນ -mhard-float -m68881 -msoft-float -mpcrel
-malign-int -mstrict-align -msep-ຂໍ້ມູນ -mno-sep-data -mshared-library-id=n
- ຫໍສະໝຸດກາງ -mno-id-shared-library -mxgot -mno-xgot

MCore ທາງເລືອກໃນການ -mhardlit -mno-hardlit -mdiv -mno-div -mrelax ທັນທີ
-mno-ຜ່ອນຄາຍ-ທັນທີ -mwide-bitfields -mno-wide-bitfields -m4byte functions
-mno-4byte-functions -mcallgraph-data -mno-callgraph-data -mslow-bytes
-mno-slow-bytes -mno-lsim -mlittle-endian -mbig-endian -m210 -m340
-mstack-increment

ເມປ ທາງເລືອກໃນການ -mabsdiff -mall-opts - ສະເລ່ຍ -mbased=n - ບິດ -mc=n -mclip
-mconfig=ຊື່ -mcop -mcop32 -mcop64 -mivc2 -mdc -mdiv -ເມບ -mel -mio-volatile -ml
-mleaz -ມມ -mminmax - mmult -mno-opts -mrepeat -ນາງ​ສາວ -msatur -msdram - ຊິມ -msimnovec
-mtf -mtiny=n

MicroBlaze ທາງເລືອກໃນການ -msoft-float -mhard-float -msmall-divides -mcpu=cpu -mmmcpy
-mxl-soft-mul -mxl-soft-div -mxl-barrel-shift -mxl-pattern-ປຽບທຽບ -mxl-stack-ກວດ
-mxl-gp-opt -mno-clearbss -mxl-ຄູນ-ສູງ -mxl-float-ແປງ -mxl-float-sqrt
-mxl-mode-app-model

MIPS ທາງເລືອກໃນການ - THE -EB - ມີນາ=ໂຄ້ງ -mtune=ໂຄ້ງ -mips1 -mips2 -mips3 -mips4
-mips32 -mips32r2 -mips64 -mips64r2 -mips16 -mno-mips16 -mflip-mips16
-minterlink-mips16 -mno-interlink-mips16 -mabi=ຊ່ວຍເຫລືອ - mabicalls -mno-abicalls
-mshared -mno-ແບ່ງປັນ -mplt -mno-plt -mxgot -mno-xgot -mgp32 -mgp64 -mfp32
-mfp64 -mhard-float -msoft-float -msingle-float -mdouble-float -mdsp -mno-dsp
-MDSPR2 -mno-dspr2 -mfpu=fpu-type -msmartmips -mno-smartmips - ຄູ່ດຽວ
-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 -membedded-data
-mno-embedded-data -muninit-const-in-rodata -mno-uninit-const-in-rodata
-mcode-readable=ຕັ້ງ -msplit-ທີ່ຢູ່ -mno-split-addresses -mexplicit-relocs
-mno-explicit-relocs -mcheck-ສູນ-ພະແນກ -mno-check-zero-division -mdivide-ກັບດັກ
-mdivide-breaks -mmmcpy -mno-memcpy -mlong-ໂທ -mno-long-calls - ບ້າ -mno-mad
-mfused-madd -mno-fused-madd -nocpp -mfix-24k -mno-fix-24k -mfix-r4000
-mno-fix-r4000 -mfix-r4400 -mno-fix-r4400 -mfix-r10000 -mno-fix-r10000 -mfix-vr4120
-mno-fix-vr4120 -mfix-vr4130 -mno-fix-vr4130 -mfix-sb1 -mno-fix-sb1
-mflush-func=ມ່ວນ -mno-flush-func -mbranch-cost=num - ສາຂາທີ່ອາດຈະເປັນໄປໄດ້
-mno-ສາຂາ-ອາດຈະ -mfp-ຂໍ້ຍົກເວັ້ນ -mno-fp-ຂໍ້ຍົກເວັ້ນ -mvr4130-ຈັດຮຽງ -mno-vr4130-align
-msynci -mno-sync -mrelax-pic-ໂທ -mno-relax-pic-calls -mmcount-ra-ທີ່ຢູ່

MMIX ທາງເລືອກໃນການ -mlibfuncs -mno-libfuncs - mepsilon -mno-epsilon -mabi=gnu
-mabi=mmixware -mzero-extend -mknutdiv -mtoplevel - ສັນ​ຍາ​ລັກ​ -melf -mbranch-ຄາດ
-mno-branch-predict -mbase-ທີ່ຢູ່ -mno-base-dresses -msingle-ອອກ
-mno-single-ອອກ

MN10300 ທາງເລືອກໃນການ - ແມງໄມ້ຫຼາຍ -mno-mult-bug -mno-am33 -ແມ່33 -mam33-2 -ແມ່34 -mtune=cpu-
ປະເພດ -mreturn-pointer-on-d0 -mno-crt0 -mrelax - ມະລີ -msetlb

PDP-11 ທາງເລືອກໃນການ -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 -mbcopy
-mbcopy-builtin - mint32 -mno-int16 - mint16 -mno-int32 -mfloat32 -mno-float64
-mfloat64 -mno-float32 - mabshi -mno-abshi -ສາຂາ-ແພງ -ສາຂາ-ລາຄາຖືກ
-munix-asm -mdec-asm

picoChip ທາງເລືອກໃນການ -mae=ae_type -mvliw-lookahead=N -msymbol-as-address
-mno-inefficient-ເຕືອນ

ພະລັງງານ PC ທາງເລືອກໃນການ ເບິ່ງຕົວເລືອກ RS/6000 ແລະ PowerPC.

RL78 ທາງເລືອກໃນການ - ຊິມ -mmul=ບໍ່ມີ -mmul=g13 -mmul=rl78

RS / 6000 ແລະ ພະລັງງານ PC ທາງເລືອກໃນການ -mcpu=cpu-type -mtune=cpu-type -mcmodel=code-model - ພະ​ລັງ​ງານ​
-mno ພະ​ລັງ​ງານ​ - ພະ​ລັງ​ງານ 2​ -mno-power2 -mpowerpc -mpowerpc64 -mno-powerpc -maltivec
-mno-altivec -mpowerpc-gpopt -mno-powerpc-gpopt -mpowerpc-gfxopt -mno-powerpc-gfxopt
-mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb -mpopcntd -mno-popcntd -mfprnd
-mno-fprnd -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp
-mnew-mnemonics - mold-mnemonic -mful-toc -ໜ້ອຍສຸດ-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 - ຫຼາຍ -mno-ຫຼາຍ -msingle-float
-mdouble-float -msimple-fpu -mstring -mno-string - ການ​ປັບ​ປຸງ​ -mno-ການ​ປັບ​ປຸງ​
-mavoid-indexed-addresses -mno-avoid-indexed-addresses -mfused-madd -mno-fused-madd
-mbit-align -mno-bit-align -mstrict-align -mno-strict-align - ສາມາດຍ້າຍໄດ້
-mno-relocateable -mrelocatable-lib -mno-relocateable-lib -mtoc -mno-toc - ໜ້ອຍ
-mlittle-endian - ໃຫຍ່ -mbig-endian -mdynamic-no-pic -maltivec -mswdiv
-msingle-pic-base -mprioritize-restricted-insns=ບູລິມະສິດ
-msched-costly-dep=dependence_type -minsert-sched-nops=ໂຄງການ -mcall-sysv
-mcall-netbsd -maix-struct-return -msvr4-struct-return -mabi=ປະເພດ Abi -msecure-plt
-mbss-plt -mblock-move-inline-limit=num -misel -mno-isel -misel=ແມ່ນ -misel=ບໍ່ -mspe
-mno-spe -mspe=ແມ່ນ -mspe=ບໍ່ - ຄູ່ -mgen-cell-microcode -mwarn-cell-microcode
-mvrsave -mno-vrsave - mmulhw -mno-mulhw -mdlmzb -mno-dlmzb -mfloat-gprs=ແມ່ນ
-mfloat-gprs=ບໍ່ -mfloat-gprs=ດ່ຽວ -mfloat-gprs=ສອງເທົ່າ -mprototype -mno-prototype
- ຊິມ -mmvme - ບ້າ - myellowknife - memb -msdata -msdata=ເລືອກ -mvxworks -G num
- ກະທູ້ -mrecip -mrecip=ເລືອກ -mno-recip -mrecip-precision -mno-recip-precision
-mveclibabi=ປະເພດ -mfriz -mno-friz -mpointers-to-nested-functions
-mno-pointers-to-nested-functions -msave-toc-ທາງອ້ອມ -mno-save-toc-indirect

RX ທາງເລືອກໃນການ -m64bit-ສອງເທົ່າ -m32bit-ສອງເທົ່າ -fpu -nofpu -mcpu= -mbig-endian-data
-mlittle-endian-data -msmall-ຂໍ້ມູນ - ຊິມ -mno-sim -mas100- syntax -mno-as100-syntax
-mrelax -mmax-constant-size= -mint-register= - mpid -msave-acc-in-interrupts

S / 390 ແລະ zSeries ທາງເລືອກໃນການ -mtune=cpu-type - ມີນາ=cpu-type -mhard-float -msoft-float
-mhard-dfp -mno-hard-dfp -mlong-double-64 -mlong-double-128 -mbackchain
-mno-backchain -mpacked-stack -mno-packed-stack -msmall-exec -mno-small-exec
-mmvcle -mno-mvcle -m64 -m31 -mdebug -mno-debug -ເມຊາ -mzarch -mtpf-trace
-mno-tpf-trace -mfused-madd -mno-fused-madd -mwarn-framesize -mwar-dynamicstack
-mstack ຂະ​ຫນາດ​ -mstack-ກອງ

ຜະລິດແນນ ທາງເລືອກໃນການ -ເມບ -mel -mnhwloop -muls -mmac - ຄະ​ແນນ 5 - ຄະແນນ 5u - ຄະ​ແນນ 7 -mscore7d

SH ທາງເລືອກໃນການ -m1 -m2 -m2e -m2a-nofpu -m2a-ດຽວເທົ່ານັ້ນ -m2a-ດຽວ -m2a -m3 -m3e
-m4-nofpu -m4-ດຽວເທົ່ານັ້ນ -m4-ດຽວ -m4 -m4a-nofpu -m4a-ດຽວເທົ່ານັ້ນ -m4a-ດຽວ
-m4a -m4al -m5-64media -m5-64media-nofpu -m5-32media -m5-32media-nofpu -m5-ກະທັດຮັດ
-m5-compact-nofpu -mb -ml -mdalign -mrelax -migtable -mfmovd -mhitachi -mrenesas
-mno-renesas -mnomacsave -ມີ່ -mno-ieee - ບິດ - misize -minline-ic_invalidate
- ຂົວ -mspace - ມັກ -musermode -multcost=ຈໍານວນ -mdiv=ແຜນຍຸດທະສາດ
-mdivsi3_libfunc=ຊື່ -mfixed-range=ໄລຍະລົງທະບຽນ -madjust-unroll
-mindexed-addressing -mgettrcost=ຈໍານວນ -mpt-ແກ້ໄຂ -maccumulate-outgoing-args
-minvalid-ສັນຍາລັກ -msoft-atomic -mbranch-cost=num - mcbranchdi -mcmpeqdi -mfused-madd
-mpretend-cmove

ແສງອາທິດ 2 ທາງເລືອກໃນການ - ຂໍ້ຄວາມທີ່ບໍ່ສະອາດ -mno- impure-text - ກະທູ້ - ກະທູ້

SPARC ທາງເລືອກໃນການ -mcpu=cpu-type -mtune=cpu-type -mcmodel=code-model -mmemory-model=mem-
ຮູບແບບ -m32 -m64 -mapp-regs -mno-app-regs -mfaster-structs -mno-ໄວ-ໂຄງສ້າງ
-mflat -mno-ແປ -mfpu -mno-fpu -mhard-float -msoft-float -mhard-quad-float
-msoft-quad-float -mstack-ອະຄະຕິ -mno-stack-bias -munaligned-ສອງເທົ່າ
-mno-unaligned-doubles -mv8plus -mno-v8plus -mvis -mno-vis -mvis2 -mno-vis2
-mvis3 -mno-vis3 -mfmaf -mno-fmaf -mpopc -mno-popc -mfix-at697f

SPU ທາງເລືອກໃນການ -mwar-reloc -merror-reloc -msafe-dma -munsafe-dma -branch - ຄໍາ​ແນະ​ນໍາ​
-msmall-mem -mlarge-mem -mstdmain -mfixed-range=ໄລຍະລົງທະບຽນ -mea32 -mea64
-maddress-space-ແປງ -mno-address-space-ການແປງ -mcache-size=ຂະຫນາດ cache
- ການ​ປັບ​ປຸງ matomic​ -mno-atomic-ການອັບເດດ

ລະບົບ V ທາງເລືອກໃນການ - ຖາມ -Qn -YP,ເສັ້ນທາງ -Ym,dir

TILE-Gx ທາງເລືອກໃນການ -mcpu=cpu -m32 -m64

TILEPro ທາງເລືອກໃນການ -mcpu=cpu -m32

V850 ທາງເລືອກໃນການ -mlong-ໂທ -mno-long-calls -mep -mno-ep -mprolog-function
-mno-prolog-function -mspace -mtda=n -msda=n -mzda=n -mapp-regs -mno-app-regs
-mdisable-callt -mno-disable-callt -mv850e2v3 -mv850e2 -mv850e1 -mv850es -mv850e
-mv850 -mbig-ສະຫຼັບ

Vax ທາງເລືອກໃນການ - ມກ -mgnu - munix

VxWorks ທາງເລືອກໃນການ -mrtp - ບໍ່ສະຖິດ -Bstatic -Bdynamic -Xbind-lazy -Xbind-ດຽວນີ້

x86-64 ທາງເລືອກໃນການ ເບິ່ງ i386 ແລະ x86-64 ທາງເລືອກ.

Xstormy16 ທາງເລືອກໃນການ - ຊິມ

Xtensa ທາງເລືອກໃນການ -mconst16 -mno-const16 -mfused-madd -mno-fused-madd -mforce-no-pic
-mserialize-volatile -mno-serialize-volatile -mtext-section-literals
-mno-text-section-literals -mtarget-align -mno-target-align -mlongcalls
-mno-longcalls

zSeries ທາງເລືອກໃນການ ເບິ່ງຕົວເລືອກ S/390 ແລະ zSeries.

ລະຫັດ ການຜະລິດ ທາງເລືອກໃນການ
-fcall-ບັນທຶກ-reg -fcall-ໃຊ້-reg - ຄົງ​ທີ່ -reg - ຂໍ້​ຍົກ​ເວັ້ນ​ -fnon-call-exceptions
-funwind-ຕາຕະລາງ -fasynchronous-unwind-ຕາຕະລາງ -finhibit-size-directive
- finstrument - ຫນ້າ​ທີ່​ -finstrument-functions-exclude-function-list=ຊິມ,ຊິມ...
-finstrument-functions-exclude-file-list=ເອກະສານ,ເອກະສານ... -fno-ທົ່ວໄປ -fno-ident
-fpcc-struct-return -fpic -fPIC -fpie -fPIE -fno-jump-tables -frecord-gcc-ສະຫຼັບ
-freg-struct-return -fshort-enums -fshort-double -fshort-wchar -fverbose-asm
-fpack-struct[=n] -fstack-ກວດ​ສອບ​ -fstack-limit-register=reg -fstack-limit-symbol=ຊິມ
-fno-stack-ຈຳກັດ -fsplit-stack -fleading-underscore -ftls-model=ຮູບແບບ -ftrapv
-fwrapv -fbounds-ກວດ​ສອບ​ - ການເບິ່ງເຫັນ -fstrict-volatile-bitfields

ທາງເລືອກໃນການ ການຄວບຄຸມ ໄດ້ ປະເພດ of ຜົນຜະລິດ
ການລວບລວມສາມາດມີເຖິງສີ່ຂັ້ນຕອນ: preprocessing, compilation ເຫມາະສົມ, ປະກອບແລະ
ການເຊື່ອມໂຍງ, ສະເຫມີໃນຄໍາສັ່ງນັ້ນ. GCC ມີຄວາມສາມາດໃນການປຸງແຕ່ງແລະລວບລວມຫຼາຍໆຢ່າງ
ໄຟລ​໌​ບໍ່​ວ່າ​ຈະ​ເຂົ້າ​ໄປ​ໃນ​ໄຟລ​໌​ປ້ອນ​ຂໍ້​ມູນ​ຂອງ​ຕົວ​ປະ​ກອບ​ຈໍາ​ນວນ​ຫນຶ່ງ​, ຫຼື​ເຂົ້າ​ໄປ​ໃນ​ເອ​ກະ​ສານ​ການ​ປ້ອນ​ຂໍ້​ມູນ assembler​; ແລ້ວ
ແຕ່ລະເອກະສານປະກອບປະກອບສ້າງໄຟລ໌ວັດຖຸ, ແລະການເຊື່ອມໂຍງປະສົມປະສານວັດຖຸທັງຫມົດ
ໄຟລ໌ (ທີ່ລວບລວມໃຫມ່, ແລະທີ່ລະບຸໄວ້ເປັນ input) ເຂົ້າໄປໃນໄຟລ໌ປະຕິບັດໄດ້.

ສໍາລັບໄຟລ໌ປ້ອນຂໍ້ມູນໃດນຶ່ງ, ນາມສະກຸນຂອງໄຟລ໌ຈະກໍານົດປະເພດຂອງການລວບລວມຂໍ້ມູນ
ເຮັດແລ້ວ:

ເອກະສານ.c
ລະຫັດແຫຼ່ງ C ທີ່ຕ້ອງໄດ້ຮັບການປຸງແຕ່ງກ່ອນ.

ເອກະສານ.i
ລະຫັດແຫຼ່ງ C ທີ່ບໍ່ຄວນປະມວນຜົນກ່ອນ.

ເອກະສານ.ii
ລະຫັດແຫຼ່ງ C++ ທີ່ບໍ່ຄວນປະມວນຜົນກ່ອນ.

ເອກະສານ.m
ລະຫັດແຫຼ່ງ Objective-C. ໃຫ້ສັງເກດວ່າທ່ານຕ້ອງເຊື່ອມຕໍ່ກັບ libobjc ຫ້ອງສະຫມຸດເພື່ອເຮັດໃຫ້ເປັນ
ວຽກໂຄງການ Objective-C.

ເອກະສານ.ໄມ
ລະຫັດແຫຼ່ງ Objective-C ທີ່ບໍ່ຄວນປະມວນຜົນກ່ອນ.

ເອກະສານmm
ເອກະສານ.M
ລະຫັດແຫຼ່ງ Objective-C++. ໃຫ້ສັງເກດວ່າທ່ານຕ້ອງເຊື່ອມຕໍ່ກັບ libobjc ຫ້ອງສະຫມຸດເພື່ອເຮັດໃຫ້
ໂປຣແກຣມ Objective-C++ ເຮັດວຽກ. ໃຫ້ສັງເກດວ່າ .M ຫມາຍເຖິງຕົວຫນັງສື M.

ເອກະສານ.mii
ລະຫັດແຫຼ່ງ Objective-C++ ທີ່ບໍ່ຄວນປະມວນຜົນກ່ອນ.

ເອກະສານ.h
C, C++, Objective-C ຫຼື Objective-C++ header file ທີ່ຈະປ່ຽນເປັນ precompiled
header (ຄ່າເລີ່ມຕົ້ນ), ຫຼື C, C++ header ທີ່ຈະປ່ຽນເປັນ Ada spec (ຜ່ານ
-fdump-ada-spec ສະຫຼັບ).

ເອກະສານcc
ເອກະສານ.cp
ເອກະສານ.cxx
ເອກະສານ.cpp
ເອກະສານ.CPP
ເອກະສານ.c++
ເອກະສານ.C
ລະຫັດແຫຼ່ງ C++ ທີ່ຕ້ອງໄດ້ຮັບການປຸງແຕ່ງກ່ອນ. ໃຫ້ສັງເກດວ່າໃນ .cxx, ສອງຕົວອັກສອນສຸດທ້າຍ
ທັງສອງຈະຕ້ອງເປັນຕົວຫນັງສື x. ເຊັ່ນດຽວກັນ, .C ໝາຍເຖິງຕົວໜັງສື C.

ເອກະສານmm
ເອກະສານ.M
ລະຫັດແຫຼ່ງ Objective-C++ ທີ່ຕ້ອງໄດ້ປະມວນຜົນກ່ອນ.

ເອກະສານ.mii
ລະຫັດແຫຼ່ງ Objective-C++ ທີ່ບໍ່ຄວນປະມວນຜົນກ່ອນ.

ເອກະສານ.ຊມ
ເອກະສານ.H
ເອກະສານ.hp
ເອກະສານ.hxx
ເອກະສານ.hp
ເອກະສານ.HPP
ເອກະສານ.h++
ເອກະສານ.tcc
ໄຟລ໌ສ່ວນຫົວ C++ ທີ່ຈະປ່ຽນເປັນສ່ວນຫົວທີ່ລວບລວມໄວ້ກ່ອນ ຫຼື Ada spec.

ເອກະສານ.f
ເອກະສານ.ສໍາລັບ
ເອກະສານ.ftn
ລະຫັດແຫຼ່ງ Fortran ຄົງທີ່ທີ່ບໍ່ຄວນປະມວນຜົນກ່ອນ.

ເອກະສານ.F
ເອກະສານ.FOR
ເອກະສານ.fpp
ເອກະສານ.FPP
ເອກະສານ.FTN
ລະຫັດແຫຼ່ງ Fortran ຄົງທີ່ຈະຕ້ອງຖືກປຸງແຕ່ງກ່ອນ (ກັບແບບດັ້ງເດີມ
preprocessor).

ເອກະສານ.f90
ເອກະສານ.f95
ເອກະສານ.f03
ເອກະສານ.f08
ລະຫັດແຫຼ່ງ Fortran ຟຣີທີ່ບໍ່ຄວນປະມວນຜົນກ່ອນ.

ເອກະສານ.F90
ເອກະສານ.F95
ເອກະສານ.F03
ເອກະສານ.F08
ລະຫັດແຫຼ່ງ Fortran ຟຣີທີ່ຕ້ອງໄດ້ຮັບການປຸງແຕ່ງກ່ອນ (ກັບແບບດັ້ງເດີມ
preprocessor).

ເອກະສານ.ໄປ
ໄປລະຫັດແຫຼ່ງ.

ເອກະສານ.ໂຄສະນາ
ໄຟລ໌ລະຫັດແຫຼ່ງ Ada ທີ່ປະກອບດ້ວຍການປະກາດຫົວໜ່ວຍຫ້ອງສະໝຸດ (ການປະກາດຂອງ a
package, subprogram, or generic, or a generic instantiation), ຫຼື ຫ້ອງສະໝຸດ
ການ​ປ່ຽນ​ຊື່​ການ​ປະ​ກາດ (ຊຸດ​, ທົ່ວ​ໄປ​, ຫຼື​ການ​ປະ​ກາດ​ການ​ປ່ຽນ​ຊື່​ໂຄງ​ການ​ຍ່ອຍ​)​. ດັ່ງກ່າວ
ໄຟລ໌ຍັງຖືກເອີ້ນວ່າ ຂໍ້ກໍາຫນົດ.

ເອກະສານ.adb
ໄຟລ໌ລະຫັດແຫຼ່ງ Ada ທີ່ມີເນື້ອໃນຂອງຫ້ອງສະໝຸດ (ໂຄງການຍ່ອຍ ຫຼືເນື້ອໃນຊຸດ).
ໄຟລ໌ດັ່ງກ່າວຍັງຖືກເອີ້ນວ່າ ຮ່າງກາຍ.

ເອກະສານ.s
ລະຫັດປະກອບ.

ເອກະສານ.S
ເອກະສານsx
ລະຫັດ Assembler ທີ່ຕ້ອງໄດ້ຮັບການປຸງແຕ່ງກ່ອນ.

ອື່ນໆ
ໄຟລ໌ວັດຖຸທີ່ຈະປ້ອນໂດຍກົງເຂົ້າໃນການເຊື່ອມໂຍງ. ຊື່ໄຟລ໌ໃດນຶ່ງທີ່ບໍ່ມີການຮັບຮູ້
suffix ແມ່ນປະຕິບັດດ້ວຍວິທີນີ້.

ທ່ານສາມາດລະບຸພາສາປ້ອນຂໍ້ມູນຢ່າງຊັດເຈນດ້ວຍ -x ຕົວເລືອກ:

-x ພາສາ
ລະບຸຢ່າງຈະແຈ້ງ ພາສາ ສໍາລັບໄຟລ໌ປ້ອນຂໍ້ມູນຕໍ່ໄປນີ້ (ແທນທີ່ຈະປ່ອຍໃຫ້
compiler ເລືອກຄ່າເລີ່ມຕົ້ນໂດຍອີງໃສ່ຊື່ໄຟລ໌ suffix). ຕົວເລືອກນີ້ໃຊ້ໄດ້ກັບທຸກຄົນ
ປະຕິບັດຕາມໄຟລ໌ປ້ອນຂໍ້ມູນຈົນກ່ວາຕໍ່ໄປ -x ທາງເລືອກ. ຄ່າທີ່ເປັນໄປໄດ້ສໍາລັບ ພາສາ ແມ່ນ:

c c-header cpp-output
c++ c++-header c++-cpp-output
objective-c objective-c-header objective-c-cpp-output
objective-c++ objective-c++-header objective-c++-cpp-output
assembler-with-cpp
ada
f77 f77-cpp-input f95 f95-cpp-input
go
java

-x none
ປິດສະເພາະຂອງພາສາໃດນຶ່ງ, ເພື່ອໃຫ້ໄຟລ໌ຕໍ່ມາຖືກຈັດການ
ອີງ​ຕາມ​ການ​ຕໍ່​ທ້າຍ​ຊື່​ໄຟລ​໌​ຂອງ​ເຂົາ​ເຈົ້າ (ດັ່ງ​ທີ່​ພວກ​ເຂົາ​ເຈົ້າ​ແມ່ນ​ຖ້າ​ຫາກ​ວ່າ​ -x ບໍ່​ໄດ້​ຖືກ​ນໍາ​ໃຊ້​ທັງ​ຫມົດ).

-pass-exit-codes
ທຳ ມະດາ gcc ໂປລແກລມຈະອອກດ້ວຍລະຫັດ 1 ຖ້າໄລຍະໃດນຶ່ງຂອງ compiler
ສົ່ງຄືນລະຫັດສົ່ງຄືນທີ່ບໍ່ສໍາເລັດ. ຖ້າທ່ານລະບຸ -pass-exit-codes, ການ gcc ໂຄງການ
ແທນທີ່ຈະກັບຄືນມາດ້ວຍຄວາມຜິດພາດທີ່ສູງທີ່ສຸດເປັນຕົວເລກທີ່ຜະລິດໂດຍໄລຍະໃດໆທີ່ກັບຄືນມາ
ຕົວຊີ້ບອກຄວາມຜິດພາດ. C, C++, ແລະ Fortran frontends ກັບຄືນມາ 4, ຖ້າພາຍໃນ
ເກີດຄວາມຜິດພາດ compiler.

ຖ້າທ່ານຕ້ອງການພຽງແຕ່ບາງຂັ້ນຕອນຂອງການລວບລວມ, ທ່ານສາມາດນໍາໃຊ້ -x (ຫຼືຊື່ໄຟລ໌ຕໍ່ທ້າຍ)
ບອກ gcc ບ່ອນທີ່ຈະເລີ່ມຕົ້ນ, ແລະຫນຶ່ງໃນທາງເລືອກ -c, -S, ຫຼື -E ເວົ້າຢູ່ໃສ gcc ແມ່ນເພື່ອ
ຢຸດ. ໃຫ້ສັງເກດວ່າບາງການປະສົມປະສານ (ຕົວຢ່າງ, -x cpp-output -E) ຄໍາ​ແນະ​ນໍາ​ gcc to do
ບໍ່​ມີ​ຫຍັງ​ເລີຍ.

-c ລວບລວມຫຼືປະກອບໄຟລ໌ຕົ້ນສະບັບ, ແຕ່ບໍ່ເຊື່ອມຕໍ່. ຂັ້ນຕອນການເຊື່ອມໂຍງແມ່ນງ່າຍດາຍ
ບໍ່ໄດ້ເຮັດ. ຜົນໄດ້ຮັບທີ່ສຸດແມ່ນຢູ່ໃນຮູບແບບຂອງໄຟລ໌ວັດຖຸສໍາລັບແຕ່ລະໄຟລ໌ແຫຼ່ງ.

ໂດຍຄ່າເລີ່ມຕົ້ນ, ຊື່ໄຟລ໌ວັດຖຸສໍາລັບໄຟລ໌ແຫຼ່ງແມ່ນເຮັດໂດຍການປ່ຽນແທນຄໍາຕໍ່ທ້າຍ .c,
.i, .s, ແລະອື່ນໆ, ກັບ .o.

ໄຟລ໌ປ້ອນຂໍ້ມູນທີ່ບໍ່ຮູ້ຈັກ, ບໍ່ຮຽກຮ້ອງໃຫ້ມີການລວບລວມຂໍ້ມູນ ຫຼືການປະກອບ, ແມ່ນຖືກລະເລີຍ.

-S ຢຸດເຊົາຫຼັງຈາກຂັ້ນຕອນຂອງການລວບລວມທີ່ເຫມາະສົມ; ຢ່າ​ເຕົ້າ​ໂຮມ. ຜົນຜະລິດແມ່ນຢູ່ໃນ
ຮູບ​ແບບ​ຂອງ​ໄຟລ​໌​ລະ​ຫັດ assembler ສໍາ​ລັບ​ແຕ່​ລະ​ໄຟລ​໌​ປ້ອນ​ຂໍ້​ມູນ​ທີ່​ບໍ່​ແມ່ນ​ສະ​ມາ​ຊິກ​ໄດ້​ລະ​ບຸ​ໄວ້​.

ໂດຍຄ່າເລີ່ມຕົ້ນ, ຊື່ໄຟລ໌ assembler ສໍາລັບໄຟລ໌ແຫຼ່ງແມ່ນເຮັດໂດຍການປ່ຽນແທນຄໍາຕໍ່ທ້າຍ
.c, .i, ແລະອື່ນໆ, ກັບ .s.

ການປ້ອນຂໍ້ມູນໄຟລ໌ທີ່ບໍ່ຕ້ອງການການລວບລວມແມ່ນຖືກລະເລີຍ.

-E ຢຸດຫຼັງຈາກຂັ້ນຕອນການປຸງແຕ່ງກ່ອນ; ບໍ່ດໍາເນີນການ compiler ທີ່ເຫມາະສົມ. ຜົນຜະລິດແມ່ນຢູ່ໃນ
ຮູບແບບຂອງລະຫັດແຫຼ່ງ preprocessed, ເຊິ່ງຖືກສົ່ງໄປຫາຜົນໄດ້ຮັບມາດຕະຖານ.

ການປ້ອນຂໍ້ມູນໄຟລ໌ທີ່ບໍ່ຕ້ອງການການປະມວນຜົນກ່ອນຈະຖືກລະເລີຍ.

-o ເອກະສານ
ວາງຜົນຜະລິດໃນໄຟລ໌ ເອກະສານ. ນີ້ໃຊ້ໄດ້ໂດຍບໍ່ຄໍານຶງເຖິງຜົນຜະລິດປະເພດໃດກໍ່ຕາມ
ຈະຖືກຜະລິດ, ບໍ່ວ່າຈະເປັນໄຟລ໌ທີ່ສາມາດປະຕິບັດໄດ້, ໄຟລ໌ວັດຖຸ, ໄຟລ໌ປະກອບຫຼື
ລະຫັດ C ທີ່ປະມວນຜົນກ່ອນ.

If -o ບໍ່ໄດ້ລະບຸໄວ້, ຄ່າເລີ່ມຕົ້ນແມ່ນການໃສ່ໄຟລ໌ທີ່ສາມາດປະຕິບັດໄດ້ , ວັດຖຸ
file for source.suffix in ແຫຼ່ງ.o, ເອກະສານປະກອບຂອງຕົນໃນ source.s, ເປັນ precompiled
ໄຟລ໌ຫົວໃນ source.suffix.gch, ແລະແຫຼ່ງ C preprocessed ທັງໝົດໃນຜົນຜະລິດມາດຕະຖານ.

-v ພິມ (ຕາມຄວາມຜິດພາດມາດຕະຖານອອກ) ຄໍາສັ່ງປະຕິບັດເພື່ອດໍາເນີນການຂັ້ນຕອນຂອງ
ການລວບລວມ. ນອກຈາກນັ້ນ, ພິມຈໍານວນສະບັບຂອງໂປລແກລມໄດເວີ compiler ແລະຂອງ
preprocessor ແລະ compiler ເຫມາະສົມ.

-###
ຄື -v ຍົກ​ເວັ້ນ​ຄໍາ​ສັ່ງ​ແມ່ນ​ບໍ່​ໄດ້​ປະ​ຕິ​ບັດ​ແລະ​ການ​ໂຕ້​ຖຽງ​ແມ່ນ​ຍົກ​ເວັ້ນ​ແຕ່​ພວກ​ເຂົາ​ເຈົ້າ​
ມີພຽງແຕ່ຕົວອັກສອນທີ່ເປັນຕົວເລກ ຫຼື "./-_". ນີ້ແມ່ນເປັນປະໂຫຍດສໍາລັບ shell scripts
ຈັບບັນທັດຄໍາສັ່ງທີ່ສ້າງໂດຍຄົນຂັບ.

- ປຸບ
ໃຊ້ທໍ່ຫຼາຍກວ່າໄຟລ໌ຊົ່ວຄາວສໍາລັບການສື່ສານລະຫວ່າງຂັ້ນຕອນຕ່າງໆຂອງ
ການລວບລວມ. ອັນນີ້ບໍ່ສາມາດເຮັດວຽກໃນບາງລະບົບທີ່ຕົວປະກອບບໍ່ສາມາດອ່ານໄດ້
ຈາກທໍ່; ແຕ່ຜູ້ປະກອບ GNU ບໍ່ມີບັນຫາ.

- ຊ່ວຍ
ພິມ (ຕາມມາດຕະຖານຜົນຜະລິດ) ລາຍລະອຽດຂອງຕົວເລືອກແຖວຄໍາສັ່ງເຂົ້າໃຈໂດຍ
gccທີ່ຢູ່ ຖ້າຫາກວ່າ -v ທາງ​ເລືອກ​ຍັງ​ໄດ້​ລະ​ບຸ​ໄວ້​ຫຼັງ​ຈາກ​ນັ້ນ​ - ຊ່ວຍ ຍັງຈະຖືກສົ່ງໄປຍັງ
ຂະ​ບວນ​ການ​ຕ່າງໆ​ທີ່​ຮຽກ​ຮ້ອງ​ໂດຍ​ gcc, ເພື່ອໃຫ້ພວກເຂົາສາມາດສະແດງຕົວເລືອກເສັ້ນຄໍາສັ່ງ
ພວກເຂົາຍອມຮັບ. ຖ້າ -Wextra ທາງ​ເລືອກ​ຍັງ​ໄດ້​ຮັບ​ການ​ລະ​ບຸ​ໄວ້ (ກ່ອນ​ທີ່​ຈະ​ - ຊ່ວຍ
option), ຫຼັງຈາກນັ້ນທາງເລືອກເສັ້ນຄໍາສັ່ງທີ່ບໍ່ມີເອກະສານທີ່ກ່ຽວຂ້ອງກັບພວກມັນ
ຍັງຈະຖືກສະແດງ.

--ເປົ້າ​ຫມາຍ​ການ​ຊ່ວຍ​ເຫຼືອ​
ພິມ (ຕາມມາດຕະຖານຜົນຜະລິດ) ລາຍລະອຽດຂອງຕົວເລືອກເສັ້ນຄໍາສັ່ງສະເພາະເປົ້າຫມາຍ
ສໍາລັບແຕ່ລະເຄື່ອງມື. ສຳລັບບາງເປົ້າໝາຍ ຂໍ້ມູນສະເພາະເປົ້າໝາຍພິເສດອາດເປັນ
ພິມອອກ.

--help={ລະດັບ|[^]ມີຄຸນສົມບັດ}[...]
ພິມ (ຕາມມາດຕະຖານຜົນຜະລິດ) ລາຍລະອຽດຂອງຕົວເລືອກແຖວຄໍາສັ່ງເຂົ້າໃຈໂດຍ
compiler ທີ່ເຫມາະກັບຫ້ອງຮຽນທີ່ລະບຸໄວ້ທັງຫມົດແລະຄຸນສົມບັດ. ເຫຼົ່ານີ້ແມ່ນ
ຫ້ອງ​ຮຽນ​ສະ​ຫນັບ​ສະ​ຫນູນ​:

ເຄື່ອງມືເພີ່ມປະສິດທິພາບ
ນີ້ຈະສະແດງຕົວເລືອກການເພີ່ມປະສິດທິພາບທັງຫມົດທີ່ສະຫນັບສະຫນູນໂດຍ compiler.

ຄໍາເຕືອນ
ນີ້​ຈະ​ສະ​ແດງ​ທັງ​ຫມົດ​ຂອງ​ທາງ​ເລືອກ​ໃນ​ການ​ຄວບ​ຄຸມ​ຂໍ້​ຄວາມ​ເຕືອນ​ໄພ​ຜະ​ລິດ​ໂດຍ​
ນັກຂຽນ.

ເປົ້າ​ຫມາຍ
ນີ້ຈະສະແດງຕົວເລືອກເປົ້າຫມາຍສະເພາະ. ບໍ່ເຫມືອນກັບ --ເປົ້າ​ຫມາຍ​ການ​ຊ່ວຍ​ເຫຼືອ​ ທາງເລືອກ
ຢ່າງໃດກໍຕາມ, ທາງເລືອກເປົ້າຫມາຍສະເພາະຂອງຕົວເຊື່ອມຕໍ່ແລະຕົວປະກອບຈະບໍ່ເປັນ
ສະແດງ. ນີ້ແມ່ນຍ້ອນວ່າເຄື່ອງມືເຫຼົ່ານັ້ນບໍ່ສະຫນັບສະຫນູນການຂະຫຍາຍ
--help= syntax

params
ນີ້ຈະສະແດງຄ່າທີ່ຮັບຮູ້ໂດຍ --param ທາງເລືອກ.

ພາສາ
ນີ້ຈະສະແດງທາງເລືອກທີ່ສະຫນັບສະຫນູນສໍາລັບ ພາສາ, ບ່ອນທີ່ ພາສາ ແມ່ນຊື່
ຂອງໜຶ່ງໃນພາສາທີ່ຮອງຮັບໃນ GCC ລຸ້ນນີ້.

ທົ່ວໄປ
ນີ້ຈະສະແດງທາງເລືອກທີ່ເປັນທົ່ວໄປກັບທຸກພາສາ.

ນີ້ແມ່ນເງື່ອນໄຂທີ່ຮອງຮັບ:

ບໍ່ມີຫຼັກຖານຢັ້ງຢືນ
ສະແດງພຽງແຕ່ທາງເລືອກເຫຼົ່ານັ້ນທີ່ບໍ່ມີເອກະສານ.

ເຂົ້າຮ່ວມ
ຕົວເລືອກສະແດງການໂຕ້ແຍ້ງທີ່ປະກົດຂຶ້ນຫຼັງຈາກສັນຍານເທົ່າທຽມກັນໃນອັນດຽວກັນ
ຂໍ້ຄວາມຕໍ່ເນື່ອງ, ເຊັ່ນ: --help=ເປົ້າໝາຍ.

ແຍກຕ່າງຫາກ
ຕົວເລືອກສະແດງການໂຕ້ຖຽງທີ່ປາກົດເປັນຄໍາແຍກຕ່າງຫາກດັ່ງຕໍ່ໄປນີ້
ທາງເລືອກຕົ້ນສະບັບ, ເຊັ່ນ: -o output-file.

ດັ່ງນັ້ນ, ສໍາລັບການຍົກຕົວຢ່າງເພື່ອສະແດງທຸກສະຫຼັບເປົ້າຫມາຍທີ່ບໍ່ມີເອກະສານສະຫນັບສະຫນຸນໂດຍ
compiler ດັ່ງຕໍ່ໄປນີ້ສາມາດນໍາໃຊ້:

--help=ເປົ້າໝາຍ,ບໍ່ມີເອກະສານ

ຄວາມ​ຮູ້​ສຶກ​ຂອງ​ຄຸນ​ສົມ​ບັດ​ສາ​ມາດ inverted ໂດຍ​ການ​ນໍາ​ຫນ້າ​ມັນ​ກັບ​ ^ ລັກສະນະ, ດັ່ງນັ້ນ
ຍົກ​ຕົວ​ຢ່າງ​ທີ່​ຈະ​ສະ​ແດງ​ທາງ​ເລືອກ​ການ​ເຕືອນ​ໄພ​ສອງ​ທັງ​ຫມົດ (ເຊັ່ນ​, ຫນຶ່ງ​ທີ່​ມີ​ທັງ​ການ​ເປີດ​ຫຼື​ປິດ​
ແລະບໍ່ເອົາການໂຕ້ຖຽງ) ທີ່ມີຄໍາອະທິບາຍ, ໃຊ້:

--help=warnings,^ເຂົ້າຮ່ວມ,^ບໍ່ມີເອກະສານ

ການໂຕ້ຖຽງກັບ --help= ບໍ່ຄວນປະກອບດ້ວຍເງື່ອນໄຂທີ່ປີ້ນກັບກັນເທົ່ານັ້ນ.

ການລວມເອົາຫ້ອງຮຽນຫຼາຍແມ່ນເປັນໄປໄດ້, ເຖິງແມ່ນວ່ານີ້ປົກກະຕິແລ້ວຈໍາກັດຜົນຜະລິດໂດຍ
ຫຼາຍດັ່ງນັ້ນບໍ່ມີຫຍັງທີ່ຈະສະແດງ. ກໍລະນີຫນຶ່ງທີ່ມັນເຮັດວຽກຢ່າງໃດກໍ່ຕາມແມ່ນເວລາໃດ
ຫນຶ່ງໃນຫ້ອງຮຽນແມ່ນ ເປົ້າ​ຫມາຍ. ດັ່ງນັ້ນ, ສໍາລັບການຍົກຕົວຢ່າງເພື່ອສະແດງທຸກເປົ້າຫມາຍສະເພາະ
ຕົວເລືອກການເພີ່ມປະສິດທິພາບຕໍ່ໄປນີ້ສາມາດຖືກນໍາໃຊ້:

--help=ເປົ້າໝາຍ,ຕົວເພີ່ມປະສິດທິພາບ

ໄດ້ --help= ທາງເລືອກສາມາດຖືກຊ້ໍາໃນເສັ້ນຄໍາສັ່ງ. ແຕ່ລະການນໍາໃຊ້ຢ່າງຕໍ່ເນື່ອງຈະ
ສະ​ແດງ​ການ​ຮ້ອງ​ຂໍ​ຂອງ​ຫ້ອງ​ຮຽນ​ຂອງ​ຕົນ​ຂອງ​ທາງ​ເລືອກ​, ຂ້າມ​ທີ່​ມີ​ຢູ່​ແລ້ວ​
ສະແດງ.

ຖ້າ -Q ທາງເລືອກຈະປາກົດຢູ່ໃນເສັ້ນຄໍາສັ່ງກ່ອນ --help= ທາງ​ເລືອກ​, ຫຼັງ​ຈາກ​ນັ້ນ​
ຂໍ້ຄວາມອະທິບາຍສະແດງໂດຍ --help= ມີການປ່ຽນແປງ. ແທນທີ່ຈະອະທິບາຍສິ່ງທີ່ສະແດງ
ທາງ​ເລືອກ​, ການ​ຊີ້​ບອກ​ແມ່ນ​ໄດ້​ຮັບ​ວ່າ​ເປັນ​ທາງ​ເລືອກ​ທີ່​ໄດ້​ຖືກ​ເປີດ​ໃຫ້​ໃຊ້​ງານ​, ປິດ​ຫຼື​ຕັ້ງ​
ກັບຄ່າສະເພາະ (ສົມມຸດວ່າ compiler ຮູ້ນີ້ຢູ່ໃນຈຸດທີ່
--help= ທາງ​ເລືອກ​ແມ່ນ​ການ​ນໍາ​ໃຊ້​)​.

ນີ້ແມ່ນຕົວຢ່າງທີ່ຖືກຕັດອອກຈາກພອດ ARM ຂອງ gcc:

% gcc -Q -mabi=2 --help=target -c
ຕົວເລືອກຕໍ່ໄປນີ້ແມ່ນເປົ້າໝາຍສະເພາະ:
-mabi=2
-mabort-on-noreturn [ຄົນພິການ]
- ແຜນທີ່ [ປິດການໃຊ້ງານ]

ຜົນຜະລິດແມ່ນມີຄວາມອ່ອນໄຫວຕໍ່ກັບຜົນກະທົບຂອງທາງເລືອກແຖວຄໍາສັ່ງທີ່ຜ່ານມາ, ດັ່ງນັ້ນສໍາລັບ
ຕົວຢ່າງ, ມັນເປັນໄປໄດ້ທີ່ຈະຊອກຫາການເພີ່ມປະສິດທິພາບໃດທີ່ຖືກເປີດໃຊ້ຢູ່ -O2 ໂດຍ​ການ​ນໍາ​ໃຊ້​:

-Q -O2 --help=optimizers

ອີກທາງເລືອກ, ທ່ານສາມາດຄົ້ນພົບວ່າການເພີ່ມປະສິດທິພາບ binary ໃດຖືກເປີດໃຊ້ໂດຍ -O3 ໂດຍ​ການ​ນໍາ​ໃຊ້​:

gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
diff /tmp/O2-opts /tmp/O3-opts | grep ເປີດໃຊ້ງານ

-no-canonical-prefixes
ບໍ່ຂະຫຍາຍການເຊື່ອມຕໍ່ສັນຍາລັກໃດໆ, ແກ້ໄຂການອ້າງອີງເຖິງ /../ or /./, ຫຼືເຮັດໃຫ້ເສັ້ນທາງ
ຢ່າງແທ້ຈິງເມື່ອສ້າງຄໍານໍາຫນ້າທີ່ກ່ຽວຂ້ອງ.

- ການປ່ຽນແປງ
ສະແດງໝາຍເລກເວີຊັນ ແລະລິຂະສິດຂອງ GCC ທີ່ຖືກຮຽກຮ້ອງ.

- ຫໍ່
ເອີ້ນຄໍາສັ່ງຍ່ອຍທັງຫມົດພາຍໃຕ້ໂຄງການ wrapper. ຊື່ຂອງໂຄງການ wrapper ແລະ
ຕົວກໍານົດການຂອງມັນຖືກສົ່ງຜ່ານເປັນລາຍການທີ່ແຍກດ້ວຍເຄື່ອງໝາຍຈຸດ.

gcc -c tc -wrapper gdb,--args

ນີ້ຈະເອີ້ນບັນດາໂຄງການຍ່ອຍຂອງ gcc ພາຍໃຕ້ການ gdb --args, ດັ່ງນັ້ນການຮຽກຮ້ອງຂອງ cc1
ຈະ​ເປັນ gdb --args cc1 ....

-fplugin=ຊື່ດັ່ງນັ້ນ,
ໂຫລດລະຫັດ plugin ໃນໄຟລ໌ ຊື່.so, ສົມມຸດວ່າເປັນວັດຖຸທີ່ໃຊ້ຮ່ວມກັນເພື່ອ dlopen'd ໂດຍ
compiler ໄດ້. ຊື່ພື້ນຖານຂອງໄຟລ໌ວັດຖຸທີ່ໃຊ້ຮ່ວມກັນເພື່ອລະບຸຕົວປລັກອິນ
ສໍາລັບຈຸດປະສົງຂອງການວິເຄາະການໂຕ້ຖຽງ (ເບິ່ງ -fplugin-arg-ຊື່-ທີ່ສໍາຄັນ=ມູນຄ່າ ຂ້າງລຸ່ມນີ້). ແຕ່ລະ
plugin ຄວນກໍານົດຫນ້າທີ່ callback ທີ່ລະບຸໄວ້ໃນ Plugins API.

-fplugin-arg-ຊື່-ທີ່ສໍາຄັນ=ມູນຄ່າ
ກໍານົດການໂຕ້ຖຽງທີ່ເອີ້ນວ່າ ທີ່ສໍາຄັນ ດ້ວຍມູນຄ່າ ມູນຄ່າ ສໍາລັບ plugin ເອີ້ນວ່າ ຊື່.

-fdump-ada-spec[-ບາງ]
ສໍາລັບແຫຼ່ງ C ແລະ C ++ ແລະປະກອບມີໄຟລ໌, ສ້າງ specs Ada ທີ່ສອດຄ້ອງກັນ.

-fdump-go-spec=ເອກະສານ
ສໍາລັບການປ້ອນໄຟລ໌ໃນພາສາໃດກໍ່ຕາມ, ສ້າງການປະກາດ Go ທີ່ສອດຄ້ອງກັນໃນ ເອກະສານ. ນີ້
ສ້າງການປະກາດ Go "const", "type", "var", ແລະ "func" ເຊິ່ງອາດຈະເປັນວິທີທີ່ເປັນປະໂຫຍດ.
ເພື່ອເລີ່ມຕົ້ນການຂຽນສ່ວນຕິດຕໍ່ Go ກັບລະຫັດທີ່ຂຽນເປັນພາສາອື່ນ.

@ເອກະສານ
ອ່ານຕົວເລືອກແຖວຄໍາສັ່ງຈາກ ເອກະສານ. ທາງ​ເລືອກ​ທີ່​ອ່ານ​ໄດ້​ຖືກ​ໃສ່​ແທນ​ທີ່​ຂອງ​
ຕົ້ນສະບັບ @ເອກະສານ ທາງເລືອກ. ຖ້າ ເອກະສານ ບໍ່ມີ, ຫຼືບໍ່ສາມາດອ່ານໄດ້, ຫຼັງຈາກນັ້ນທາງເລືອກ
ຈະ​ໄດ້​ຮັບ​ການ​ປິ່ນ​ປົວ​ທີ່​ຮູ້​ຫນັງ​ສື​, ແລະ​ບໍ່​ໄດ້​ຮັບ​ການ​ໂຍກ​ຍ້າຍ​ອອກ​.

ຕົວເລືອກຕ່າງໆໃນ ເອກະສານ ຖືກແຍກອອກໂດຍຊ່ອງຫວ່າງ. ອາດມີຕົວອັກສອນຊ່ອງຫວ່າງໃສ່ນຳ
ໃນທາງເລືອກໂດຍການອ້ອມຮອບທາງເລືອກທັງຫມົດໃນວົງຢືມດຽວຫຼືຄູ່. ໃດ
ຕົວອັກສອນ (ລວມທັງ backslash) ອາດຈະຖືກລວມເຂົ້າໂດຍການນໍາຫນ້າຕົວອັກສອນທີ່ຈະເປັນ
ລວມໄປດ້ວຍ backslash. ໄດ້ ເອກະສານ ຕົວຂອງມັນເອງອາດຈະມີ @ ເພີ່ມເຕີມເອກະສານ ທາງເລືອກ; ໃດ
ທາງເລືອກດັ່ງກ່າວຈະຖືກປະມວນຜົນແບບ recursively.

ການລວບລວມ C ++ ໂຄງການ
ໄຟລ໌ແຫຼ່ງ C++ ຕາມທຳມະດາໃຊ້ໜຶ່ງໃນຄຳຕໍ່ທ້າຍ .C, cc, .cpp, .CPP, .c++, .cp, ຫຼື
.cxx; ໄຟລ໌ສ່ວນຫົວ C++ ມັກຈະໃຊ້ .ຊມ, .hp, .H, ຫຼື (ສໍາລັບລະຫັດແມ່ແບບທີ່ແບ່ງປັນ) .tcc; ແລະ
ໄຟລ໌ C++ preprocessed ໃຊ້ຄໍາຕໍ່ທ້າຍ .ii. GCC ຮັບຮູ້ໄຟລ໌ທີ່ມີຊື່ເຫຼົ່ານີ້ ແລະ
ລວບລວມພວກມັນເປັນໂປແກມ C ++ ເຖິງແມ່ນວ່າທ່ານຈະໂທຫາ compiler ແບບດຽວກັນກັບການລວບລວມ
ໂປຣແກຣມ C (ປົກກະຕິແລ້ວມີຊື່ gcc).

ຢ່າງໃດກໍຕາມ, ການນໍາໃຊ້ gcc ບໍ່ໄດ້ເພີ່ມຫ້ອງສະໝຸດ C++. g ++ ແມ່ນໂຄງການທີ່ເອີ້ນວ່າ GCC ແລະ
ປິ່ນປົວ .c, .h ແລະ .i ໄຟລ໌ເປັນໄຟລ໌ແຫຼ່ງ C++ ແທນໄຟລ໌ແຫຼ່ງ C ເວັ້ນເສຍແຕ່ -x is
ຖືກນໍາໃຊ້, ແລະກໍານົດອັດຕະໂນມັດການເຊື່ອມຕໍ່ກັບຫ້ອງສະຫມຸດ C ++. ໂຄງ​ການ​ນີ້​ຍັງ​
ເປັນປະໂຫຍດໃນເວລາທີ່ precompiling ໄຟລ໌ຫົວ C ກັບ a .h ສ່ວນຂະຫຍາຍເພື່ອໃຊ້ໃນການລວບລວມຂໍ້ມູນ C++.
ໃນ​ຫຼາຍ​ລະ​ບົບ​, g ++ ຍັງຖືກຕິດຕັ້ງດ້ວຍຊື່ c ++.

ເມື່ອທ່ານລວບລວມໂປແກຼມ C ++, ທ່ານອາດຈະລະບຸຕົວເລືອກເສັ້ນຄໍາສັ່ງດຽວກັນຫຼາຍອັນ
ທ່ານໃຊ້ສໍາລັບການລວບລວມບັນດາໂຄງການໃນພາສາໃດກໍ່ຕາມ; ຫຼືຕົວເລືອກເສັ້ນຄໍາສັ່ງທີ່ມີຄວາມຫມາຍສໍາລັບ C
ແລະພາສາທີ່ກ່ຽວຂ້ອງ; ຫຼືທາງເລືອກທີ່ມີຄວາມຫມາຍສໍາລັບໂຄງການ C ++ ເທົ່ານັ້ນ.

ທາງເລືອກໃນການ ການຄວບຄຸມ C ພາສາ
ຕົວເລືອກຕໍ່ໄປນີ້ຄວບຄຸມພາສາຂອງ C (ຫຼືພາສາທີ່ມາຈາກ C, ເຊັ່ນ C++,
Objective-C ແລະ Objective-C++) ທີ່ compiler ຍອມຮັບ:

-ansi
ໃນໂຫມດ C, ນີ້ແມ່ນເທົ່າກັບ -std=c90. ໃນໂຫມດ C ++, ມັນທຽບເທົ່າກັບ
-std=c++98.

ນີ້ຈະເປັນການປິດຄຸນສົມບັດບາງຢ່າງຂອງ GCC ທີ່ບໍ່ເຂົ້າກັນໄດ້ກັບ ISO C90 (ເມື່ອ
ການລວບລວມລະຫັດ C), ຫຼືມາດຕະຖານ C ++ (ເມື່ອລວບລວມລະຫັດ C ++), ເຊັ່ນ "asm" ແລະ
"typeof" ຄໍາສໍາຄັນ, ແລະ macros ທີ່ກໍານົດໄວ້ລ່ວງຫນ້າເຊັ່ນ "unix" ແລະ "vax" ທີ່ກໍານົດ.
ປະເພດຂອງລະບົບທີ່ທ່ານກໍາລັງໃຊ້. ມັນຍັງເຮັດໃຫ້ ISO ທີ່ບໍ່ຕ້ອງການ ແລະບໍ່ຄ່ອຍໄດ້ໃຊ້
ຄຸນ​ນະ​ສົມ​ບັດ trigraph​. ສໍາລັບ C compiler, ມັນປິດການຮັບຮູ້ຂອງ C++ style //
ຄໍາຄິດຄໍາເຫັນເຊັ່ນດຽວກັນກັບຄໍາສໍາຄັນ "inline".

ຄຳສັບສຳຮອງ "__asm__", "__extension__", "__inline__" ແລະ "__typeof__"
ສືບຕໍ່ເຮັດວຽກເຖິງແມ່ນວ່າ -ansi. ທ່ານຈະບໍ່ຕ້ອງການທີ່ຈະນໍາໃຊ້ພວກມັນຢູ່ໃນໂຄງການ ISO C,
ແນ່ນອນ, ແຕ່ມັນເປັນປະໂຫຍດທີ່ຈະເອົາພວກມັນເຂົ້າໄປໃນໄຟລ໌ header ທີ່ອາດຈະຖືກລວມເຂົ້າໃນ
ການລວບລວມເຮັດດ້ວຍ -ansi. ສະຫຼັບມາໂຄຣທີ່ກຳນົດໄວ້ລ່ວງໜ້າເຊັ່ນ "__unix__" ແລະ
"__vax__" ຍັງມີຢູ່, ມີຫຼືບໍ່ມີ -ansi.

ໄດ້ -ansi ທາງເລືອກບໍ່ໄດ້ເຮັດໃຫ້ໂຄງການທີ່ບໍ່ແມ່ນ ISO ຖືກປະຕິເສດໂດຍບໍ່ເສຍຄ່າ. ສໍາລັບ
ວ່າ, - pedantic ແມ່ນຕ້ອງການນອກເຫນືອໄປຈາກ -ansi.

ມະຫາພາກ "__STRICT_ANSI__" ຖືກກໍານົດໄວ້ລ່ວງໜ້າເມື່ອ -ansi ທາງເລືອກແມ່ນຖືກນໍາໃຊ້. ບາງສ່ວນຫົວ
ໄຟ​ລ໌​ອາດ​ຈະ​ສັງ​ເກດ​ເຫັນ​ມະ​ຫາ​ພາກ​ນີ້​ແລະ​ລະ​ເວັ້ນ​ຈາກ​ການ​ປະ​ກາດ​ບາງ​ຫນ້າ​ທີ່​ຫຼື​ການ​ກໍາ​ນົດ​
ມະຫາພາກສະເພາະທີ່ມາດຕະຖານ ISO ບໍ່ໄດ້ຮຽກຮ້ອງ; ນີ້ແມ່ນເພື່ອຫຼີກເວັ້ນການແຊກແຊງ
ກັບບັນດາໂຄງການທີ່ອາດຈະໃຊ້ຊື່ເຫຼົ່ານີ້ສໍາລັບສິ່ງອື່ນໆ.

ຟັງຊັນທີ່ປົກກະຕິຈະສ້າງຂຶ້ນໃນແຕ່ບໍ່ມີ semantics ກໍານົດໂດຍ ISO C
(ເຊັ່ນ "alloca" ແລະ "ffs") ບໍ່ແມ່ນຫນ້າທີ່ສ້າງໃນເມື່ອ -ansi ຖືກນໍາໃຊ້.

-std=
ກໍານົດມາດຕະຖານພາສາ. ຕົວເລືອກນີ້ໄດ້ຮັບການສະຫນັບສະຫນູນພຽງແຕ່ໃນເວລາທີ່
ລວບລວມ C ຫຼື C++.

compiler ສາມາດຍອມຮັບມາດຕະຖານພື້ນຖານຈໍານວນຫນຶ່ງ, ເຊັ່ນ: c90 or c++98, ແລະພາສາ GNU
ຂອງມາດຕະຖານເຫຼົ່ານັ້ນ, ເຊັ່ນ: gnu90 or gnu++98. ໂດຍກໍານົດມາດຕະຖານພື້ນຖານ, the
compiler ຈະຍອມຮັບທຸກໂຄງການປະຕິບັດຕາມມາດຕະຖານນັ້ນແລະຜູ້ທີ່ໃຊ້ GNU
ສ່ວນຂະຫຍາຍທີ່ບໍ່ຂັດກັບມັນ. ຍົກ​ຕົວ​ຢ່າງ, -std=c90 ປິດແນ່ນອນ
ຄຸນສົມບັດຂອງ GCC ທີ່ບໍ່ເຂົ້າກັນໄດ້ກັບ ISO C90 ເຊັ່ນ: "asm" ແລະ "typeof"
ຄໍາສໍາຄັນ, ແຕ່ບໍ່ແມ່ນການຂະຫຍາຍ GNU ອື່ນໆທີ່ບໍ່ມີຄວາມຫມາຍໃນ ISO C90, ເຊັ່ນ:
ຍົກເວັ້ນໄລຍະກາງຂອງ "?:" ສະແດງອອກ. ໃນທາງກົງກັນຂ້າມ, ໂດຍການລະບຸ GNU
ພາສາຂອງມາດຕະຖານ, ຄຸນນະສົມບັດທັງຫມົດທີ່ສະຫນັບສະຫນູນ compiler ໄດ້ຖືກເປີດໃຊ້, ເຖິງແມ່ນວ່າໃນເວລາທີ່
ຄຸນສົມບັດປ່ຽນແປງຄວາມໝາຍຂອງມາດຕະຖານພື້ນຖານ ແລະບາງໂຄງການທີ່ສອດຄ່ອງ
ອາດຈະຖືກປະຕິເສດ. ມາດຕະຖານໂດຍສະເພາະຖືກນໍາໃຊ້ໂດຍ - pedantic ເພື່ອກໍານົດອັນໃດ
ຄຸນນະສົມບັດແມ່ນສ່ວນຂະຫຍາຍ GNU ທີ່ໄດ້ຮັບມາດຕະຖານສະບັບນັ້ນ. ຍົກ​ຕົວ​ຢ່າງ -std=gnu90
- pedantic ຈະເຕືອນກ່ຽວກັບ C++ style // ຄໍາເຫັນ, ໃນຂະນະທີ່ -std=gnu99 - pedantic ຈະ
ບໍ່.

ຄ່າສໍາລັບທາງເລືອກນີ້ຕ້ອງໄດ້ຮັບການສະຫນອງໃຫ້; ຄ່າທີ່ເປັນໄປໄດ້ແມ່ນ

c90
c89
iso9899:1990
ສະຫນັບສະຫນູນທຸກໂຄງການ ISO C90 (ບາງສ່ວນຂະຫຍາຍ GNU ທີ່ຂັດກັບ ISO C90
ຖືກປິດ). ຄື​ກັນ​ກັບ -ansi ສໍາລັບລະຫັດ C.

iso9899:199409
ISO C90 ຕາມ​ການ​ແກ້​ໄຂ​ໃນ​ການ​ແກ້​ໄຂ 1.

c99
c9x
iso9899:1999
iso9899:199x
ISO C99. ໃຫ້ສັງເກດວ່າມາດຕະຖານນີ້ຍັງບໍ່ທັນໄດ້ຮັບການສະຫນັບສະຫນູນຢ່າງເຕັມສ່ວນ; ເບິ່ງ
<http://gcc.gnu.org/gcc-4.7/c99status.html> ສໍາລັບຂໍ້ມູນເພີ່ມເຕີມ. ຊື່ c9x
ແລະ iso9899:199x ຖືກຄັດຄ້ານ.

c11
c1x
iso9899:2011
ISO C11, ການປັບປຸງ 2011 ຂອງມາດຕະຖານ ISO C. ການສະຫນັບສະຫນູນແມ່ນບໍ່ຄົບຖ້ວນແລະ
ທົດລອງ. ຊື່ c1x ຖືກຄັດຄ້ານ.

gnu90
gnu89
ພາສາ GNU ຂອງ ISO C90 (ລວມທັງບາງລັກສະນະ C99). ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນຂອງ C
ລະຫັດ.

gnu99
gnu9x
ພາສາ GNU ຂອງ ISO C99. ເມື່ອ ISO C99 ຖືກປະຕິບັດຢ່າງເຕັມສ່ວນໃນ GCC, ນີ້ຈະ
ກາຍເປັນຄ່າເລີ່ມຕົ້ນ. ຊື່ gnu9x ຖືກຄັດຄ້ານ.

gnu11
gnu1x
ພາສາ GNU ຂອງ ISO C11. ການສະຫນັບສະຫນູນແມ່ນບໍ່ຄົບຖ້ວນແລະການທົດລອງ. ຊື່ gnu1x
ຖືກຄັດຄ້ານ.

c++98
ມາດຕະຖານ ISO C++ ປີ 1998 ບວກກັບການແກ້ໄຂ. ຄື​ກັນ​ກັບ -ansi ສໍາລັບລະຫັດ C++.

gnu++98
ພາສາ GNU ຂອງ -std=c++98. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນຂອງລະຫັດ C++.

c++11
ມາດຕະຖານ ISO C++ ປີ 2011 ບວກກັບການແກ້ໄຂ. ຮອງຮັບ C ++11 ຍັງຢູ່
ການທົດລອງ, ແລະອາດຈະມີການປ່ຽນແປງໃນວິທີການທີ່ບໍ່ເຂົ້າກັນໄດ້ໃນການປ່ອຍໃນອະນາຄົດ.

gnu++11
ພາສາ GNU ຂອງ -std=c++11. ການຮອງຮັບ C++11 ແມ່ນຍັງທົດລອງຢູ່, ແລະອາດຈະມີການປ່ຽນແປງ
ໃນຮູບແບບທີ່ບໍ່ເຂົ້າກັນໄດ້ໃນການປ່ອຍໃນອະນາຄົດ.

-fgnu89-inline
ທາງເລືອກ -fgnu89-inline ບອກ GCC ໃຫ້ໃຊ້ຄໍາສັບ GNU ແບບດັ້ງເດີມສໍາລັບ "inline"
ເຮັດວຽກໃນເວລາທີ່ຢູ່ໃນໂຫມດ C99.
ຕົວເລືອກນີ້ຖືກຍອມຮັບ ແລະຖືກລະເລີຍໂດຍ GCC ເວີຊັນ 4.1.3 ເຖິງແຕ່ບໍ່ລວມເອົາ
4.3. ໃນ GCC ຮຸ່ນ 4.3 ແລະຕໍ່ມາມັນປ່ຽນພຶດຕິກໍາຂອງ GCC ໃນໂຫມດ C99. ການນໍາໃຊ້
ຕົວເລືອກນີ້ແມ່ນເທົ່າກັບການເພີ່ມຄຸນສົມບັດຂອງຟັງຊັນ "gnu_inline" ໃຫ້ກັບທຸກຄົນ
ຟັງຊັນ inline.

ທາງເລືອກ -fno-gnu89-inline ບອກ GCC ຢ່າງຈະແຈ້ງໃຫ້ໃຊ້ C99 semantics ສໍາລັບ
"inline" ເມື່ອຢູ່ໃນໂຫມດ C99 ຫຼື gnu99 (ie, ມັນກໍານົດພຶດຕິກໍາໃນຕອນຕົ້ນ). ນີ້
ທາງເລືອກທໍາອິດໄດ້ຮັບການສະຫນັບສະຫນູນໃນ GCC 4.3. ຕົວເລືອກນີ້ບໍ່ຖືກຮອງຮັບໃນ -std=c90 or
-std=gnu90 mode

ມາໂຄຣໂປຣເຊສເຊີກ່ອນ "__GNUC_GNU_INLINE__" ແລະ "__GNUC_STDC_INLINE__" ອາດຈະຖືກໃຊ້
ເພື່ອກວດເບິ່ງວ່າຄວາມຫມາຍໃດທີ່ມີຜົນກະທົບສໍາລັບຫນ້າທີ່ "inline".

- ຂໍ້ມູນ aux ຊື່​ເອ​ກະ​ສານ
ສົ່ງຜົນໃຫ້ການປະກາດຕົ້ນແບບຂອງຊື່ໄຟລ໌ທີ່ໃຫ້ໄວ້ສຳລັບຟັງຊັນທັງໝົດທີ່ປະກາດ ແລະ/ຫຼື
ກໍານົດຢູ່ໃນຫນ່ວຍງານການແປ, ລວມທັງທີ່ຢູ່ໃນໄຟລ໌ header. ທາງເລືອກນີ້ແມ່ນ
ບໍ່ສົນໃຈຢ່າງງຽບໆໃນພາສາອື່ນນອກເໜືອໄປຈາກ C.

ນອກ​ຈາກ​ການ​ປະ​ກາດ​, ເອ​ກະ​ສານ​ຊີ້​ບອກ​, ໃນ​ຄໍາ​ຄິດ​ເຫັນ​, ຕົ້ນ​ກໍາ​ເນີດ​ຂອງ​ການ​ປະ​ກາດ​ແຕ່​ລະ​ຄົນ​
(ແຫຼ່ງໄຟລ໌ແລະແຖວ), ບໍ່ວ່າຈະເປັນການປະກາດ implicit, prototyped ຫຼື
ບໍ່ມີຕົ້ນແບບ (I, N ສໍາ​ລັບ​ການ​ໃຫມ່​ຫຼື​ O ສໍາລັບອາຍຸ, ຕາມລໍາດັບ, ໃນລັກສະນະທໍາອິດຫຼັງຈາກ
ຕົວເລກເສັ້ນ ແລະຈໍ້າສອງເມັດ), ແລະບໍ່ວ່າຈະມາຈາກຄໍາປະກາດ ຫຼືຄໍານິຍາມ
(C or F, ຕາມລໍາດັບ, ໃນລັກສະນະດັ່ງຕໍ່ໄປນີ້). ໃນກໍລະນີຂອງຫນ້າທີ່
ຄໍານິຍາມ, ບັນຊີລາຍຊື່ແບບ K&R ຂອງການໂຕ້ຖຽງທີ່ຕິດຕາມດ້ວຍການປະກາດຂອງພວກເຂົາແມ່ນເຊັ່ນກັນ
ສະຫນອງໃຫ້, ພາຍໃນຄໍາເຫັນ, ຫຼັງຈາກການປະກາດ.

-fallow-parameterless-variadic-functions
ຍອມຮັບຟັງຊັນ varidic ໂດຍບໍ່ມີການຕັ້ງຊື່.

ເຖິງແມ່ນວ່າມັນເປັນໄປໄດ້ທີ່ຈະກໍານົດຫນ້າທີ່ດັ່ງກ່າວ, ນີ້ບໍ່ແມ່ນປະໂຫຍດຫຼາຍຍ້ອນວ່າມັນເປັນ
ບໍ່ສາມາດອ່ານການໂຕ້ຖຽງໄດ້. ນີ້ແມ່ນສະຫນັບສະຫນູນພຽງແຕ່ C ຍ້ອນວ່າການກໍ່ສ້າງນີ້ແມ່ນ
ອະນຸຍາດໂດຍ C++.

-fno-asm
ຢ່າຮັບຮູ້ "asm", "inline" ຫຼື "typeof" ເປັນຄໍາສໍາຄັນ, ດັ່ງນັ້ນລະຫັດສາມາດນໍາໃຊ້ເຫຼົ່ານີ້
ຄໍາສັບຕ່າງໆເປັນຕົວລະບຸ. ທ່ານສາມາດນໍາໃຊ້ຄໍາສໍາຄັນ "__asm__", "__inline__" ແລະ
"__typeof__" ແທນ. -ansi implies -fno-asm.

ໃນ C ++, ສະຫຼັບນີ້ມີຜົນກະທົບພຽງແຕ່ "ປະເພດ" ຄໍາສໍາຄັນ, ເນື່ອງຈາກວ່າ "asm" ແລະ "inline" ແມ່ນ.
ຄໍາມາດຕະຖານ. ທ່ານອາດຈະຕ້ອງການໃຊ້ -fno-gnu-keywords ທຸງແທນ, ທີ່ມີ
ຜົນກະທົບດຽວກັນ. ໃນໂຫມດ C99 (-std=c99 or -std=gnu99), ສະຫຼັບນີ້ມີຜົນກະທົບພຽງແຕ່ໄດ້
"asm" ແລະ "typeof" ຄໍາສໍາຄັນ, ເນື່ອງຈາກວ່າ "inline" ເປັນຄໍາສໍາຄັນມາດຕະຖານໃນ ISO C99.

-fno-builtin
-fno-builtin-ຫນ້າທີ່
ບໍ່ຮັບຮູ້ຟັງຊັນໃນຕົວທີ່ບໍ່ໄດ້ເລີ່ມຕົ້ນດ້ວຍ __ກໍ່ສ້າງ_ ເປັນຄໍານໍາຫນ້າ.

ໂດຍປົກກະຕິ GCC ຈະສ້າງລະຫັດພິເສດເພື່ອຈັດການຟັງຊັນໃນຕົວບາງຢ່າງຫຼາຍຂຶ້ນ
ມີປະສິດທິພາບ; ສໍາລັບຕົວຢ່າງ, ການໂທຫາ "alloca" ອາດຈະກາຍເປັນຄໍາແນະນໍາດຽວ
ປັບ stack ໂດຍກົງ, ແລະການໂທຫາ "memcpy" ອາດຈະກາຍເປັນ inline copy loops. ໄດ້
ລະຫັດຜົນໄດ້ຮັບມັກຈະມີທັງນ້ອຍກວ່າ ແລະໄວກວ່າ, ແຕ່ເນື່ອງຈາກຟັງຊັນເອີ້ນວ່າບໍ່ມີ
ດົນກວ່ານັ້ນປະກົດຂຶ້ນ, ທ່ານບໍ່ສາມາດຕັ້ງຈຸດຢຸດໃນການໂທເຫຼົ່ານັ້ນ, ແລະທ່ານສາມາດປ່ຽນໄດ້
ພຶດຕິກໍາຂອງຫນ້າທີ່ໂດຍການເຊື່ອມຕໍ່ກັບຫ້ອງສະຫມຸດທີ່ແຕກຕ່າງກັນ. ນອກຈາກນັ້ນ, ເມື່ອ
ຟັງຊັນຖືກຮັບຮູ້ວ່າເປັນຫນ້າທີ່ສ້າງໃນ, GCC ອາດຈະໃຊ້ຂໍ້ມູນກ່ຽວກັບເລື່ອງນັ້ນ
ຟັງຊັນເພື່ອເຕືອນກ່ຽວກັບບັນຫາກັບການໂທໄປຫາຟັງຊັນນັ້ນ, ຫຼືເພື່ອສ້າງເພີ່ມເຕີມ
ລະ​ຫັດ​ປະ​ສິດ​ທິ​ພາບ​, ເຖິງ​ແມ່ນ​ວ່າ​ລະ​ຫັດ​ຜົນ​ໄດ້​ຮັບ​ຍັງ​ມີ​ການ​ໂທ​ຫາ​ຫນ້າ​ທີ່​ນັ້ນ​. ສໍາລັບ
ຍົກ​ຕົວ​ຢ່າງ​, ຄໍາ​ເຕືອນ​ແມ່ນ​ໄດ້​ຮັບ​ການ​ໃຫ້​ກັບ​ -Wformat ສໍາລັບການໂທຫາທີ່ບໍ່ດີກັບ "printf", ເມື່ອ "printf" ແມ່ນ
ສ້າງຂຶ້ນໃນ, ແລະ "strlen" ເປັນທີ່ຮູ້ຈັກບໍ່ດັດແປງຫນ່ວຍຄວາມຈໍາທົ່ວໂລກ.

ມີ -fno-builtin-ຫນ້າທີ່ ທາງ​ເລືອກ​ພຽງ​ແຕ່​ການ​ທໍາ​ງານ​ໃນ​ຕົວ​ ຫນ້າທີ່ ເປັນຄົນພິການ.
ຫນ້າທີ່ ບໍ່ຄວນເລີ່ມຕົ້ນດ້ວຍ __ກໍ່ສ້າງ_. ຖ້າຟັງຊັນຖືກຕັ້ງຊື່ທີ່ບໍ່ໄດ້ຢູ່ໃນຕົວ
ໃນ GCC ລຸ້ນນີ້, ຕົວເລືອກນີ້ຖືກລະເລີຍ. ບໍ່ມີທີ່ສອດຄ້ອງກັນ
-fbuiltin-ຫນ້າທີ່ ທາງເລືອກ; ຖ້າທ່ານຕ້ອງການເປີດໃຊ້ຟັງຊັນໃນຕົວເລືອກເມື່ອໃດ
ການນໍາໃຊ້ -fno-builtin or - freestanding, ທ່ານອາດຈະກໍານົດ macro ເຊັ່ນ:

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

-fhosted
ຢືນຢັນວ່າການລວບລວມເກີດຂຶ້ນໃນສະພາບແວດລ້ອມທີ່ເປັນເຈົ້າພາບ. ນີ້ຫມາຍຄວາມວ່າ -fbuiltin.
ສະພາບແວດລ້ອມທີ່ເປັນເຈົ້າພາບແມ່ນຫນຶ່ງທີ່ຫ້ອງສະຫມຸດມາດຕະຖານທັງຫມົດສາມາດໃຊ້ໄດ້, ແລະໃນ
ເຊິ່ງ "ຕົ້ນຕໍ" ມີປະເພດຜົນຕອບແທນຂອງ "int". ຕົວຢ່າງແມ່ນເກືອບທຸກຢ່າງຍົກເວັ້ນ a
ແກ່ນ. ນີ້ແມ່ນເທົ່າກັບ -fno-freestanding.

- freestanding
ຢືນຢັນວ່າການລວບລວມເກີດຂຶ້ນໃນສະພາບແວດລ້ອມທີ່ເປັນເອກະລາດ. ນີ້ຫມາຍຄວາມວ່າ
-fno-builtin. ສະພາບແວດລ້ອມທີ່ເປັນເອກະລາດແມ່ນຫນຶ່ງທີ່ຫ້ອງສະຫມຸດມາດຕະຖານອາດຈະບໍ່
ມີຢູ່, ແລະການເລີ່ມຕົ້ນໂຄງການອາດຈະບໍ່ຈໍາເປັນທີ່ "ຕົ້ນຕໍ". ຕົວຢ່າງທີ່ຈະແຈ້ງທີ່ສຸດ
ເປັນ OS kernel. ນີ້ແມ່ນເທົ່າກັບ -fno-hosted.

-fopenmp
ເປີດໃຊ້ການຈັດການຄໍາສັ່ງ OpenMP "#pragma omp" ໃນ C/C++ ແລະ "!$omp" ໃນ Fortran.
ເມື່ອ​ໃດ​ -fopenmp ຖືກລະບຸໄວ້, compiler ສ້າງລະຫັດຂະຫນານຕາມ
OpenMP Application Program Interface v3.0http://www.openmp.org/>. ທາງເລືອກນີ້
implies - ກະທູ້, ແລະດັ່ງນັ້ນຈຶ່ງໄດ້ຮັບການສະຫນັບສະຫນູນພຽງແຕ່ກ່ຽວກັບເປົ້າຫມາຍທີ່ມີການສະຫນັບສະຫນູນ
- ກະທູ້.

-fgnu-tm
ໃນເວລາທີ່ທາງເລືອກ -fgnu-tm ຖືກກໍານົດໄວ້, compiler ຈະສ້າງລະຫັດສໍາລັບ Linux
ຕົວແປຂອງເອກະສານສະເພາະ Transactional Memory ABI ຂອງ Intel (ສະບັບປັບປຸງ
1.1, 6 ພຶດສະພາ 2009). ນີ້​ແມ່ນ​ຄຸນ​ສົມ​ບັດ​ການ​ທົດ​ລອງ​ທີ່​ມີ​ການ​ໂຕ້​ຕອບ​ທີ່​ອາດ​ຈະ​ມີ​ການ​ປ່ຽນ​ແປງ​ໃນ​
ລຸ້ນ GCC ໃນອະນາຄົດ, ເນື່ອງຈາກການປ່ຽນສະເພາະຢ່າງເປັນທາງການ. ກະລຸນາສັງເກດວ່າບໍ່ແມ່ນ
ສະຖາປັດຕະຍະກໍາທັງຫມົດແມ່ນສະຫນັບສະຫນູນສໍາລັບຄຸນສົມບັດນີ້.

ສໍາລັບຂໍ້ມູນເພີ່ມເຕີມກ່ຽວກັບການຊ່ວຍເຫຼືອຂອງ GCC ສໍາລັບຫນ່ວຍຄວາມຈໍາການເຮັດທຸລະກໍາ,

ກະລຸນາຮັບຊາບວ່າຄຸນສົມບັດໜ່ວຍຄວາມຈຳການເຮັດທຸລະກຳແມ່ນບໍ່ຮອງຮັບດ້ວຍການຍົກເວັ້ນການໂທ
(-fnon-call-exceptions).

-fms-ສ່ວນຂະຫຍາຍ
ຍອມຮັບບາງໂຄງສ້າງທີ່ບໍ່ແມ່ນມາດຕະຖານທີ່ໃຊ້ໃນໄຟລ໌ສ່ວນຫົວຂອງ Microsoft.

ໃນລະຫັດ C ++, ນີ້ອະນຸຍາດໃຫ້ຊື່ສະມາຊິກໃນໂຄງສ້າງຄ້າຍຄືກັນກັບປະເພດທີ່ຜ່ານມາ
ຖະແຫຼງການ.

typedef int UOW;
ໂຄງສ້າງ ABC {
UOW UOW;
};

ບາງກໍລະນີຂອງທົ່ງນາທີ່ບໍ່ມີຊື່ໃນໂຄງສ້າງແລະສະຫະພັນແມ່ນໄດ້ຮັບການຍອມຮັບພຽງແຕ່ກັບເລື່ອງນີ້
ທາງເລືອກ.

-fplan9-ສ່ວນຂະຫຍາຍ
ຍອມຮັບບາງສິ່ງກໍ່ສ້າງທີ່ບໍ່ແມ່ນມາດຕະຖານທີ່ໃຊ້ໃນລະຫັດແຜນ 9.

ອັນນີ້ເຮັດໃຫ້ -fms-ສ່ວນຂະຫຍາຍ, ອະນຸຍາດໃຫ້ສົ່ງຕົວຊີ້ໄປຫາໂຄງສ້າງທີ່ບໍ່ເປີດເຜີຍຊື່
ຊ່ອງຂໍ້ມູນໄປຫາຫນ້າທີ່ຄາດຫວັງວ່າຕົວຊີ້ໄປຫາອົງປະກອບຂອງປະເພດຂອງພາກສະຫນາມ, ແລະ
ອະ​ນຸ​ຍາດ​ໃຫ້​ໂດຍ​ອ້າງ​ອີງ​ໃສ່​ຊ່ອງ​ຂໍ້​ມູນ​ທີ່​ບໍ່​ລະ​ບຸ​ຊື່​ປະ​ກາດ​ໂດຍ​ໃຊ້ typedef​. ນີ້ແມ່ນພຽງແຕ່
ຮອງຮັບ C, ບໍ່ແມ່ນ C ++.

-trigraphs
ຮອງຮັບ ISO C trigraphs. ໄດ້ -ansi ທາງເລືອກ (ແລະ -std ທາງເລືອກສໍາລັບ ISO C ທີ່ເຄັ່ງຄັດ
ຄວາມສອດຄ່ອງ) ໝາຍເຖິງ -trigraphs.

-no-integrated-cpp
ດໍາເນີນການລວບລວມຢູ່ໃນສອງຜ່ານ: preprocessing ແລະການລວບລວມ. ທາງເລືອກນີ້ອະນຸຍາດໃຫ້
ຜູ້ໃຊ້ສະຫນອງ "cc1", "cc1plus", ຫຼື "cc1obj" ຜ່ານ -B ທາງເລືອກ. ຜູ້​ໃຊ້​ສະ​ຫນອງ​ໃຫ້​
ຂັ້ນຕອນການລວບລວມສາມາດເພີ່ມໃນຂັ້ນຕອນການປຸງແຕ່ງເພີ່ມເຕີມຫຼັງຈາກປົກກະຕິ
preprocessing ແຕ່ກ່ອນທີ່ຈະລວບລວມ. ຄ່າເລີ່ມຕົ້ນແມ່ນການໃຊ້ cpp ປະສົມປະສານ
(cpp ພາຍ​ໃນ​)

ຄວາມຫມາຍຂອງທາງເລືອກນີ້ຈະປ່ຽນແປງຖ້າ "cc1", "cc1plus", ແລະ "cc1obj" ຖືກລວມເຂົ້າກັນ.

- ແບບດັ້ງເດີມ
-cpp
ໃນເມື່ອກ່ອນ, ທາງເລືອກເຫຼົ່ານີ້ເຮັດໃຫ້ GCC ພະຍາຍາມເຮັດຕາມມາດຕະຖານ C compiler ກ່ອນ.
ໃນປັດຈຸບັນເຂົາເຈົ້າໄດ້ຮັບການສະຫນັບສະຫນູນພຽງແຕ່ກັບ -E ສະຫຼັບ. preprocessor ສືບຕໍ່ສະຫນັບສະຫນູນ
ໂໝດມາດຕະຖານກ່ອນ. ເບິ່ງຄູ່ມື GNU CPP ສໍາລັບລາຍລະອຽດ.

-fcond-ບໍ່ກົງກັນ
ອະ​ນຸ​ຍາດ​ໃຫ້​ການ​ສະ​ແດງ​ອອກ​ເງື່ອນ​ໄຂ​ທີ່​ມີ​ປະ​ເພດ​ທີ່​ບໍ່​ກົງ​ກັນ​ໃນ​ການ​ໂຕ້​ຖຽງ​ທີ​ສອງ​ແລະ​ທີ​ສາມ​.
ມູນຄ່າຂອງການສະແດງອອກດັ່ງກ່າວເປັນໂມຄະ. ຕົວເລືອກນີ້ບໍ່ຮອງຮັບ C++.

-flax-vector-ແປງ
ອະ​ນຸ​ຍາດ​ໃຫ້​ມີ​ການ​ປ່ຽນ​ແປງ implicit ລະ​ຫວ່າງ vectors ມີ​ຈໍາ​ນວນ​ທີ່​ແຕກ​ຕ່າງ​ກັນ​ຂອງ​ອົງ​ປະ​ກອບ​ແລະ / ຫຼື​
ປະເພດອົງປະກອບທີ່ບໍ່ເຂົ້າກັນໄດ້. ຕົວເລືອກນີ້ບໍ່ຄວນໃຊ້ສໍາລັບລະຫັດໃຫມ່.

-funsigned-char
ໃຫ້ປະເພດ "char" ບໍ່ໄດ້ເຊັນ, ເຊັ່ນ "unsigned char".

ແຕ່ລະປະເພດຂອງເຄື່ອງຈັກມີຄ່າເລີ່ມຕົ້ນສໍາລັບສິ່ງທີ່ "char" ຄວນຈະເປັນ. ມັນຄືກັນ
"unsigned char" ຕາມຄ່າເລີ່ມຕົ້ນ ຫຼືຄ້າຍຄື "signed char" ຕາມຄ່າເລີ່ມຕົ້ນ.

ໂດຍຫລັກການແລ້ວ, ໂປຣແກຣມເຄື່ອນທີ່ຄວນໃຊ້ "signed char" ຫຼື "unsigned char" ເມື່ອມັນ
ຂຶ້ນກັບການເຊັນຂອງວັດຖຸ. ແຕ່ໂຄງການຈໍານວນຫຼາຍໄດ້ຖືກຂຽນເພື່ອນໍາໃຊ້
ທໍາມະດາ "char" ແລະຄາດວ່າຈະໄດ້ຮັບການລົງນາມ, ຫຼືຄາດຫວັງວ່າມັນຈະ unsigned, ຂຶ້ນກັບ
ເຄື່ອງທີ່ເຂົາເຈົ້າໄດ້ຖືກຂຽນສໍາລັບ. ທາງເລືອກນີ້, ແລະປີ້ນກັບກັນ, ໃຫ້ທ່ານເຮັດເຊັ່ນນັ້ນ
ໂຄງການເຮັດວຽກກັບຄ່າເລີ່ມຕົ້ນທີ່ກົງກັນຂ້າມ.

ປະເພດ "char" ແມ່ນສະເຫມີເປັນປະເພດທີ່ແຕກຕ່າງຈາກແຕ່ລະ "char signed char" ຫຼື "unsigned
char ", ເຖິງແມ່ນວ່າພຶດຕິກໍາຂອງມັນສະເຫມີຄືກັນກັບຫນຶ່ງໃນສອງນັ້ນ.

-fsigned-char
ໃຫ້ປະເພດ "char" ຖືກເຊັນ, ເຊັ່ນ "ເຊັນ char".

ໃຫ້ສັງເກດວ່ານີ້ເທົ່າກັບ -fno-unsigned-char, ຊຶ່ງເປັນຮູບແບບລົບຂອງ
-funsigned-char. ເຊັ່ນດຽວກັນ, ທາງເລືອກ -fno-signed-char ເທົ່າກັບ
-funsigned-char.

-fsigned-bitfields
-funsigned-bitfields
-fno-signed-bitfields
-fno-unsigned-bitfields
ທາງ​ເລືອກ​ເຫຼົ່າ​ນີ້​ຄວບ​ຄຸມ​ບໍ່​ວ່າ​ຈະ​ເປັນ bit-field ຖືກ​ເຊັນ​ຫຼື​ບໍ່​ໄດ້​ເຊັນ​, ໃນ​ເວ​ລາ​ທີ່​ການ​ປະ​ກາດ​
ບໍ່ໄດ້ໃຊ້ "ເຊັນ" ຫຼື "ບໍ່ໄດ້ເຊັນ". ໂດຍຄ່າເລີ່ມຕົ້ນ, ຊ່ອງຂໍ້ມູນດັ່ງກ່າວຖືກເຊັນ,
ເນື່ອງຈາກວ່ານີ້ແມ່ນສອດຄ່ອງ: ປະເພດຈໍານວນເຕັມພື້ນຖານເຊັ່ນ "int" ແມ່ນປະເພດເຊັນ.

ທາງເລືອກໃນການ ການຄວບຄຸມ C ++ ພາສາ
ພາກນີ້ອະທິບາຍຕົວເລືອກແຖວຄໍາສັ່ງທີ່ມີຄວາມຫມາຍສໍາລັບໂຄງການ C++ ເທົ່ານັ້ນ;
ແຕ່ທ່ານຍັງສາມາດໃຊ້ຕົວເລືອກການລວບລວມ GNU ສ່ວນໃຫຍ່ໂດຍບໍ່ຄໍານຶງເຖິງພາສາໃດກໍ່ຕາມ
ໂປຣແກຣມຢູ່ໃນ. ຕົວຢ່າງ, ທ່ານອາດຈະລວບລວມໄຟລ໌ "firstClass.C" ແບບນີ້:

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

ໃນຕົວຢ່າງນີ້, ພຽງແຕ່ -frepo ເປັນທາງເລືອກທີ່ຫມາຍຄວາມວ່າພຽງແຕ່ສໍາລັບໂຄງການ C ++; ທ່ານສາມາດນໍາໃຊ້ໄດ້
ທາງເລືອກອື່ນທີ່ມີພາສາໃດກໍໄດ້ທີ່ GCC ຮອງຮັບ.

ນີ້ແມ່ນບັນຊີລາຍຊື່ຂອງທາງເລືອກທີ່ເປັນ ພຽງແຕ່ ສໍາ​ລັບ​ການ​ສັງ​ລວມ​ໂຄງ​ການ C++​:

-fabi-version=n
ໃຊ້ສະບັບ n ຂອງ C++ ABI. ເວີຊັ່ນ 2 ແມ່ນລຸ້ນຂອງ C++ ABI ທຳອິດ
ປາກົດຢູ່ໃນ G++ 3.4. ເວີຊັ່ນ 1 ແມ່ນລຸ້ນຂອງ C++ ABI ທີ່ປາກົດໃນຄັ້ງທຳອິດ
G++ 3.2. ເວີຊັນ 0 ຈະເປັນເວີຊັນທີ່ສອດຄ່ອງກັບ C++ ທີ່ສຸດສະເໝີ
ຂໍ້ມູນຈໍາເພາະຂອງ ABI. ດັ່ງນັ້ນ, ABI ທີ່ໄດ້ຮັບການນໍາໃຊ້ສະບັບ 0 ຈະປ່ຽນເປັນ ABI
ແມງໄມ້ຖືກແກ້ໄຂ.

ຄ່າເລີ່ມຕົ້ນແມ່ນລຸ້ນ 2.

ເວີຊັນ 3 ແກ້ໄຂຂໍ້ຜິດພາດໃນການຈັດການທີ່ຢູ່ຄົງທີ່ເປັນການໂຕ້ຖຽງແມ່ແບບ.

ເວີຊັ່ນ 4, ເຊິ່ງປະກົດໃນ G++ 4.5 ທຳອິດ, ປະຕິບັດການຈັດການມາດຕະຖານສຳລັບ vector
ປະເພດ

ເວີຊັ່ນ 5, ເຊິ່ງປາກົດໃນ G++ 4.6 ທຳອິດ, ແກ້ໄຂການຫຼອກລວງຂອງຄຸນສົມບັດ
const/volatile ໃນປະເພດຕົວຊີ້ຟັງຊັນ, decltype ຂອງ decl ທໍາມະດາ, ແລະການນໍາໃຊ້ a
ພາຣາມິເຕີຟັງຊັນໃນການປະກາດພາຣາມິເຕີອື່ນ.

ເວີຊັ່ນ 6, ເຊິ່ງປາກົດໃນ G++ 4.7 ທຳອິດ, ແກ້ໄຂພຶດຕິກຳການສົ່ງເສີມຂອງ C++11
enums ທີ່​ມີ​ຂອບ​ເຂດ​ແລະ​ການ​ຄວບ​ຄຸມ​ຂອງ​ຊອງ argument ແມ່​ແບບ​, const/static_cast​, ຄໍາ​ນໍາ​ຫນ້າ ++
ແລະ --, ແລະຟັງຊັນຂອບເຂດຫ້ອງຮຽນທີ່ໃຊ້ເປັນອາກິວເມັນແມ່ແບບ.

ເບິ່ງ - ວາບີ.

-fno-access-control
ປິດການກວດສອບການເຂົ້າເຖິງທັງໝົດ. ສະວິດນີ້ສ່ວນໃຫຍ່ແມ່ນເປັນປະໂຫຍດສໍາລັບການເຮັດວຽກປະມານແມງໄມ້ໃນ
ລະ​ຫັດ​ການ​ຄວບ​ຄຸມ​ການ​ເຂົ້າ​ເຖິງ​.

-fcheck-ໃໝ່
ກວດເບິ່ງວ່າຕົວຊີ້ທີ່ສົ່ງຄືນໂດຍ "operator new" ບໍ່ແມ່ນ null ກ່ອນທີ່ຈະພະຍາຍາມ
ແກ້ໄຂການຈັດສັນທີ່ເກັບຮັກສາໄວ້. ການກວດສອບນີ້ແມ່ນປົກກະຕິບໍ່ຈໍາເປັນເພາະວ່າ C ++
ມາດຕະຖານກໍານົດວ່າ "operator ໃຫມ່" ຈະສົ່ງຄືນພຽງແຕ່ 0 ຖ້າມັນຖືກປະກາດ ຖິ້ມ(),
ໃນກໍລະນີດັ່ງກ່າວນີ້, compiler ຈະກວດສອບມູນຄ່າກັບຄືນເຖິງແມ່ນວ່າບໍ່ມີນີ້
ທາງເລືອກ. ໃນທຸກກໍລະນີອື່ນໆ, ເມື່ອ "ຜູ້ປະຕິບັດງານໃຫມ່" ມີຂໍ້ຍົກເວັ້ນທີ່ບໍ່ຫວ່າງເປົ່າ
ສະເພາະ, ຄວາມຈຳໝົດແມ່ນສັນຍານໂດຍການຖິ້ມ "std::bad_alloc". ເບິ່ງນຳ
ໃຫມ່ (ໂນນໂທຣ).

-fconserve-space
ເອົາຕົວແປທົ່ວໂລກທີ່ບໍ່ໄດ້ເລີ່ມຕົ້ນ ຫຼື ແລ່ນ-time-initialized ເຂົ້າໄປໃນສ່ວນທົ່ວໄປ, ເຊັ່ນ:
C ເຮັດ. ນີ້ຊ່ວຍປະຢັດພື້ນທີ່ໃນການປະຕິບັດໃນຄ່າໃຊ້ຈ່າຍຂອງການບໍ່ວິນິດໄສຊ້ໍາກັນ
ຄໍານິຍາມ. ຖ້າ​ຫາກ​ວ່າ​ທ່ານ​ສັງ​ລວມ​ກັບ​ທຸງ​ຊາດ​ນີ້​ແລະ​ໂຄງ​ການ​ຂອງ​ທ່ານ crashed mysteriously​
ຫຼັງຈາກ "main()" ສໍາເລັດ, ທ່ານອາດຈະມີວັດຖຸທີ່ຖືກທໍາລາຍສອງຄັ້ງ
ເນື່ອງຈາກວ່າສອງຄໍານິຍາມໄດ້ຖືກລວມເຂົ້າກັນ.

ຕົວເລືອກນີ້ບໍ່ມີປະໂຫຍດຕໍ່ເປົ້າໝາຍສ່ວນໃຫຍ່ແລ້ວ, ດຽວນີ້ການສະໜັບສະໜຸນໄດ້ຖືກເພີ່ມເຂົ້າແລ້ວ
ການວາງຕົວແປເຂົ້າໄປໃນ BSS ໂດຍບໍ່ມີການເຮັດໃຫ້ພວກມັນທົ່ວໄປ.

-fconstexpr-depth=n
ກຳນົດຄວາມເລິກການປະເມີນທີ່ຊ້ອນກັນສູງສຸດສຳລັບຟັງຊັນ C++11 constexpr ເປັນ n. ຂີດຈຳກັດ
ແມ່ນຈໍາເປັນເພື່ອກວດພົບການເອີ້ນຄືນທີ່ບໍ່ມີທີ່ສິ້ນສຸດໃນລະຫວ່າງການປະເມີນຜົນການສະແດງອອກຢ່າງຕໍ່ເນື່ອງ. ໄດ້
ຕໍາ່ສຸດທີ່ກໍານົດໂດຍມາດຕະຖານແມ່ນ 512.

-fdeduce-init-list
ເປີດໃຊ້ການຫັກຄ່າພາຣາມີເຕີປະເພດແມ່ແບບເປັນ std::initializer_list ຈາກວົງເລັບ-
enclosed ບັນຊີລາຍຊື່ເບື້ອງຕົ້ນ, ie

ແມ່ແບບ auto forward(T t) -> decltype (realfn (t))
{
ກັບຄືນ realfn (t);
}

void f()
{
forward({1,2}); // ໂທ​ໄປ​ຂ້າງ​ຫນ້າ​ >
}

ການຫັກນີ້ໄດ້ຖືກປະຕິບັດເປັນການຂະຫຍາຍທີ່ເປັນໄປໄດ້ກັບການສະເຫນີເບື້ອງຕົ້ນ
semantics ສໍາລັບມາດຕະຖານ C ++11, ແຕ່ບໍ່ແມ່ນສ່ວນຫນຶ່ງຂອງມາດຕະຖານສຸດທ້າຍ, ດັ່ງນັ້ນມັນແມ່ນ
ປິດການໃຊ້ງານໂດຍຄ່າເລີ່ມຕົ້ນ. ຕົວເລືອກນີ້ຖືກປະຕິເສດ, ແລະອາດຈະຖືກລຶບອອກໃນອະນາຄົດ
ລຸ້ນ G++.

-ffriend-ສັກຢາ
ສັກຢາຟັງຊັນຂອງໝູ່ເຂົ້າໄປໃນຊ່ອງຊື່ທີ່ປິດລ້ອມ, ເພື່ອໃຫ້ພວກມັນເບິ່ງເຫັນໄດ້ພາຍນອກ
ຂອບເຂດຂອງຫ້ອງຮຽນທີ່ເຂົາເຈົ້າໄດ້ຖືກປະກາດ. ຫນ້າທີ່ເພື່ອນໄດ້ຖືກບັນທຶກໄວ້
ເຮັດວຽກແບບນີ້ຢູ່ໃນຄູ່ມືອ້າງອີງ C++ ແບບເກົ່າ, ແລະເວີຊັນຂອງ G++ ກ່ອນ
4.1 ເຮັດວຽກແບບນັ້ນສະເໝີ. ຢ່າງໃດກໍຕາມ, ໃນ ISO C ++ ຫນ້າທີ່ເພື່ອນທີ່ບໍ່ແມ່ນ
ປະກາດຢູ່ໃນຂອບເຂດທີ່ປິດບັງສາມາດພົບໄດ້ໂດຍການໃຊ້ການຊອກຫາທີ່ຂຶ້ນກັບການໂຕ້ຖຽງເທົ່ານັ້ນ.
ທາງເລືອກນີ້ເຮັດໃຫ້ຫມູ່ເພື່ອນຖືກສັກຢາຍ້ອນວ່າພວກເຂົາຢູ່ໃນການປ່ອຍກ່ອນຫນ້ານີ້.

ຕົວເລືອກນີ້ແມ່ນເພື່ອຄວາມເຂົ້າກັນໄດ້, ແລະອາດຈະຖືກໂຍກຍ້າຍອອກໃນການປ່ອຍ G++ ໃນອະນາຄົດ.

-fno-elide-constructors
ມາດຕະຖານ C ++ ອະນຸຍາດໃຫ້ການປະຕິບັດເພື່ອຍົກເລີກການສ້າງຊົ່ວຄາວເທົ່ານັ້ນ
ໃຊ້ເພື່ອເລີ່ມຕົ້ນວັດຖຸອື່ນຂອງປະເພດດຽວກັນ. ການລະບຸທາງເລືອກນີ້ປິດໃຊ້ງານ
ການເພີ່ມປະສິດທິພາບນັ້ນ, ແລະບັງຄັບໃຫ້ G ++ ໂທຫາຕົວສ້າງສໍາເນົາໃນທຸກກໍລະນີ.

-fno-enforce-eh-specs
ຢ່າສ້າງລະຫັດເພື່ອກວດເບິ່ງການລະເມີດຂໍ້ຍົກເວັ້ນສະເພາະໃນເວລາແລ່ນ.
ຕົວເລືອກນີ້ລະເມີດມາດຕະຖານ C ++, ແຕ່ອາດຈະເປັນປະໂຫຍດສໍາລັບການຫຼຸດຜ່ອນຂະຫນາດລະຫັດໃນ
ການຜະລິດກໍ່ສ້າງ, ຄືກັນກັບການກໍານົດ NDEBUG. ອັນນີ້ບໍ່ໃຫ້ລະຫັດຜູ້ໃຊ້ອະນຸຍາດ
ຖິ້ມຂໍ້ຍົກເວັ້ນໃນການລະເມີດຂໍ້ກໍານົດການຍົກເວັ້ນ; compiler ຈະ
ຍັງ optimize ໂດຍອີງໃສ່ສະເພາະ, ສະນັ້ນການຖິ້ມຂໍ້ຍົກເວັ້ນທີ່ບໍ່ຄາດຄິດຈະ
ເຮັດໃຫ້ເກີດພຶດຕິກໍາທີ່ບໍ່ໄດ້ກໍານົດ.

-ffor-scope
-fno-for-scope
If -ffor-scope ຖືກກໍານົດ, ຂອບເຂດຂອງຕົວແປທີ່ປະກາດໃນ a for-init-statement
ຖືກຈໍາກັດກັບ ສໍາລັບການ loop ຕົວຂອງມັນເອງ, ຕາມທີ່ກໍານົດໂດຍມາດຕະຖານ C ++. ຖ້າ
-fno-for-scope ຖືກກໍານົດ, ຂອບເຂດຂອງຕົວແປທີ່ປະກາດໃນ a for-init-statement
ຂະຫຍາຍໄປເຖິງຈຸດສິ້ນສຸດຂອງຂອບເຂດການປິດ, ເຊັ່ນດຽວກັບກໍລະນີຂອງ G++ ລຸ້ນເກົ່າ, ແລະ
ການປະຕິບັດອື່ນໆ (ແບບດັ້ງເດີມ) ຂອງ C++.

ຄ່າເລີ່ມຕົ້ນຖ້າບໍ່ມີທຸງໃຫ້ປະຕິບັດຕາມມາດຕະຖານ, ແຕ່ໃຫ້ອະນຸຍາດ ແລະໃຫ້ a
ຄໍາເຕືອນສໍາລັບລະຫັດແບບເກົ່າທີ່ຈະບໍ່ຖືກຕ້ອງ, ຫຼືມີຄວາມແຕກຕ່າງກັນ
ພຶດຕິ ກຳ.

-fno-gnu-keywords
ບໍ່ໄດ້ຮັບຮູ້ "typeof" ເປັນຄໍາສໍາຄັນ, ດັ່ງນັ້ນລະຫັດສາມາດນໍາໃຊ້ຄໍານີ້ເປັນ
ຕົວລະບຸ. ທ່ານສາມາດນໍາໃຊ້ຄໍາສໍາຄັນ "__typeof__" ແທນ. -ansi implies
-fno-gnu-keywords.

-fno-implicit-templates
ບໍ່ເຄີຍປ່ອຍລະຫັດສໍາລັບແມ່ແບບທີ່ບໍ່ແມ່ນຢູ່ໃນແຖວທີ່ຖືກສົ່ງອອກທັນທີໂດຍ implicitly (ເຊັ່ນ: ໂດຍ
ການນໍາໃຊ້); ພຽງແຕ່ປ່ອຍລະຫັດສໍາລັບ instantiations ຢ່າງຊັດເຈນ.

-fno-implicit-inline-templates
ຢ່າປ່ອຍລະຫັດສໍາລັບການທັນທີໂດຍຫຍໍ້ຂອງແມ່ແບບໃນແຖວ, ຄືກັນ. ຄ່າເລີ່ມຕົ້ນ
ແມ່ນການຈັດການກັບ inlines ທີ່ແຕກຕ່າງກັນເພື່ອໃຫ້ລວບລວມໂດຍແລະບໍ່ມີການເພີ່ມປະສິດທິພາບຈະ
ຕ້ອງການຊຸດດຽວກັນຂອງ instantiations ຢ່າງຊັດເຈນ.

-fno-implement-inlines
ເພື່ອປະຢັດພື້ນທີ່, ຢ່າປ່ອຍສຳເນົາຂອງຟັງຊັນໃນແຖວທີ່ຄວບຄຸມໂດຍ
#pragma ການປະຕິບັດ. ນີ້ຈະເຮັດໃຫ້ເກີດຄວາມຜິດພາດຂອງຕົວເຊື່ອມຕໍ່ຖ້າຫນ້າທີ່ເຫຼົ່ານີ້ບໍ່ແມ່ນ
inlined ຢູ່ທົ່ວທຸກແຫ່ງເຂົາເຈົ້າເອີ້ນວ່າ.

-fms-ສ່ວນຂະຫຍາຍ
ປິດການເຕືອນໄພ pedantic ກ່ຽວກັບການກໍ່ສ້າງທີ່ໃຊ້ໃນ MFC, ເຊັ່ນ implicit int ແລະ
ໄດ້ຮັບຕົວຊີ້ໄປຫາຫນ້າທີ່ສະມາຊິກໂດຍຜ່ານ syntax ທີ່ບໍ່ແມ່ນມາດຕະຖານ.

-fno-nonansi-builtins
ປິດ​ການ​ໃຊ້​ງານ​ການ​ປະ​ກາດ​ໃນ​ຕົວ​ຂອງ​ຫນ້າ​ທີ່​ທີ່​ບໍ່​ໄດ້​ຮັບ​ການ​ມອບ​ຫມາຍ​ໂດຍ ANSI/ISO C. ເຫຼົ່າ​ນີ້
ປະກອບມີ "ffs", "alloca", "_exit", "index", "bzero", "conjf", ແລະອື່ນໆທີ່ກ່ຽວຂ້ອງ
ປະຕິບັດຫນ້າ.

-fnotrow-opt
ປະຕິບັດຂໍ້ຍົກເວັ້ນ "ຖິ້ມ()" ຄືກັບວ່າມັນເປັນ "ບໍ່ມີຂໍ້ຍົກເວັ້ນ".
ເພື່ອຫຼຸດ ຫຼືລົບລ້າງຂະໜາດຂໍ້ຄວາມທີ່ຢູ່ເທິງຫົວທີ່ກ່ຽວຂ້ອງກັບຟັງຊັນທີ່ບໍ່ມີຂໍ້ຍົກເວັ້ນ
ສະເພາະ. ຖ້າຟັງຊັນມີຕົວແປທ້ອງຖິ່ນຂອງປະເພດທີ່ບໍ່ເປັນເລື່ອງເລັກໆນ້ອຍໆ
destructors, ຂໍ້ກໍານົດຂໍ້ຍົກເວັ້ນຕົວຈິງຈະເຮັດໃຫ້ຫນ້າທີ່ນ້ອຍລົງ
ເນື່ອງຈາກວ່າການທໍາຄວາມສະອາດ EH ສໍາລັບຕົວແປເຫຼົ່ານັ້ນສາມາດຖືກປັບໃຫ້ເຫມາະສົມທັນທີ. ຄວາມຫມາຍ
ຜົນກະທົບແມ່ນວ່າຂໍ້ຍົກເວັ້ນທີ່ຖືກຖິ້ມອອກຈາກຫນ້າທີ່ທີ່ມີຂໍ້ຍົກເວັ້ນດັ່ງກ່າວ
ຂໍ້ມູນສະເພາະຈະສົ່ງຜົນໃຫ້ໂທຫາ "ຢຸດ" ແທນທີ່ຈະ "ບໍ່ຄາດຄິດ".

-fno-operator-names
ຢ່າປະຕິບັດກັບຄໍາທີ່ໃຊ້ຊື່ຜູ້ປະກອບການ "ແລະ", "bitand", "bitor", "compl", "not", "ຫຼື"
ແລະ "xor" ເປັນຄໍາສັບຄ້າຍຄືຄໍາສໍາຄັນ.

-fno-optional-diags
ປິດການວິນິດໄສທີ່ມາດຕະຖານບອກວ່າຄອມພີວເຊີບໍ່ຈໍາເປັນຕ້ອງອອກ.
ໃນປັດຈຸບັນ, ການວິນິດໄສດັ່ງກ່າວດຽວທີ່ອອກໂດຍ G ++ ແມ່ນຫນຶ່ງສໍາລັບການມີຊື່
ຄວາມ​ຫມາຍ​ຫຼາຍ​ໃນ​ຫ້ອງ​ຮຽນ​.

-fpermissive
ດາວເກຣດການວິນິໄສບາງອັນກ່ຽວກັບລະຫັດທີ່ບໍ່ສອດຄ່ອງກັນຈາກຄວາມຜິດພາດໄປສູ່ການເຕືອນ. ດັ່ງນັ້ນ,
ການນໍາໃຊ້ -fpermissive ຈະອະນຸຍາດໃຫ້ບາງລະຫັດທີ່ບໍ່ສອດຄ່ອງໃນການລວບລວມ.

-fno-pretty-templates
ເມື່ອຂໍ້ຄວາມສະແດງຂໍ້ຜິດພາດຫມາຍເຖິງຄວາມຊ່ຽວຊານຂອງແມ່ແບບຟັງຊັນ, compiler
ປົກກະຕິຈະພິມລາຍເຊັນຂອງແມ່ແບບຕາມດ້ວຍການໂຕ້ຖຽງແມ່ແບບ
ແລະ typedefs ຫຼື typenames ໃນລາຍເຊັນ (ເຊັ່ນ: "void f(T) [with T = int]" ແທນທີ່ຈະ.
ກ່ວາ "void f (int)") ເພື່ອໃຫ້ມັນຊັດເຈນວ່າແມ່ແບບໃດມີສ່ວນຮ່ວມ. ເມື່ອ​ເກີດ​ຄວາມ​ຜິດ​ພາດ​
ຂໍ້ຄວາມຫມາຍເຖິງຄວາມຊ່ຽວຊານຂອງແມ່ແບບຊັ້ນຮຽນ, compiler ຈະຍົກເວັ້ນໃດໆ
ອາກິວເມັນແມ່ແບບທີ່ກົງກັບອາກິວເມັນແມ່ແບບເລີ່ມຕົ້ນສໍາລັບແມ່ແບບນັ້ນ. ຖ້າ
ພຶດຕິກໍາເຫຼົ່ານີ້ເຮັດໃຫ້ມັນຍາກທີ່ຈະເຂົ້າໃຈຂໍ້ຄວາມຄວາມຜິດພາດແທນທີ່ຈະເປັນ
ງ່າຍ​ຂຶ້ນ​, ການ​ນໍາ​ໃຊ້​ -fno-pretty-templates ຈະປິດການທໍາງານໃຫ້ເຂົາເຈົ້າ.

-frepo
ເປີດໃຊ້ການກະຕຸ້ນແມ່ແບບອັດຕະໂນມັດໃນເວລາເຊື່ອມຕໍ່. ທາງເລືອກນີ້ຍັງຫມາຍເຖິງ
-fno-implicit-templates.

-fno-rtti
ປິດການທໍາງານຂອງການສ້າງຂໍ້ມູນກ່ຽວກັບທຸກຫ້ອງຮຽນທີ່ມີຟັງຊັນ virtual ສໍາລັບການນໍາໃຊ້ໂດຍ
ຄຸນສົມບັດການກຳນົດປະເພດ C++ run-time (dynamic_cast ແລະ ປະເພດ). ຖ້າເຈົ້າບໍ່
ການ​ນໍາ​ໃຊ້​ພາກ​ສ່ວນ​ຂອງ​ພາ​ສາ​ເຫຼົ່າ​ນັ້ນ​, ທ່ານ​ສາ​ມາດ​ຊ່ວຍ​ປະ​ຢັດ​ບາງ​ພື້ນ​ທີ່​ໂດຍ​ການ​ນໍາ​ໃຊ້​ທຸງ​ນີ້​. ຫມາຍ​ເຫດ​
ການຈັດການຂໍ້ຍົກເວັ້ນນັ້ນໃຊ້ຂໍ້ມູນດຽວກັນ, ແຕ່ມັນຈະສ້າງມັນຕາມຄວາມຕ້ອງການ.
ໄດ້ dynamic_cast ຜູ້ປະກອບການຍັງສາມາດຖືກໃຊ້ສໍາລັບການສົ່ງສັນຍານທີ່ບໍ່ຕ້ອງການເວລາແລ່ນ
ພິມຂໍ້ມູນ, ie casts ກັບ "void *" ຫຼືຫ້ອງຮຽນພື້ນຖານ unambiguous.

-fstats
ປ່ອຍສະຖິຕິກ່ຽວກັບການປະມວນຜົນດ້ານຫນ້າໃນຕອນທ້າຍຂອງການລວບລວມ. ນີ້
ໂດຍ​ທົ່ວ​ໄປ​ຂໍ້​ມູນ​ແມ່ນ​ເປັນ​ປະ​ໂຫຍດ​ພຽງ​ແຕ່​ກັບ​ທີມ​ງານ​ພັດ​ທະ​ນາ G++ .

-fstrict-enums
ອະນຸຍາດໃຫ້ compiler ເພີ່ມປະສິດທິພາບໂດຍໃຊ້ສົມມຸດວ່າມູນຄ່າຂອງປະເພດ enumerated
ສາມາດເປັນໜຶ່ງໃນມູນຄ່າຂອງ enumeration (ຕາມທີ່ໄດ້ກຳນົດໄວ້ໃນມາດຕະຖານ C++;
ໂດຍພື້ນຖານແລ້ວ, ຄ່າທີ່ສາມາດຖືກສະແດງຢູ່ໃນຈໍານວນຕໍາ່ສຸດທີ່ຂອງ bits ທີ່ຕ້ອງການ
ເປັນ​ຕົວ​ແທນ​ຂອງ​ຜູ້​ຈໍາ​ນວນ​ທັງ​ຫມົດ​)​. ສົມມຸດຕິຖານນີ້ອາດຈະບໍ່ຖືກຕ້ອງຖ້າໂຄງການໃຊ້
ຄາສທເພື່ອປ່ຽນຄ່າຈຳນວນເຕັມທີ່ກຳນົດເອງເປັນປະເພດການນັບຈຳນວນ.

-ftemplate-depth=n
ກໍານົດຄວາມເລິກ instantiation ສູງສຸດສໍາລັບຫ້ອງຮຽນແມ່ແບບ n. ຂອບເຂດຈໍາກັດກ່ຽວກັບ
ຄວາມເລິກ instantiation ຂອງແມ່ແບບແມ່ນຈໍາເປັນເພື່ອກວດພົບ recursions ທີ່ບໍ່ມີທີ່ສິ້ນສຸດໃນລະຫວ່າງແມ່ແບບ
ທັນທີທັນໃດຊັ້ນ. ໂຄງການທີ່ສອດຄ່ອງກັບ ANSI/ISO C++ ຈະຕ້ອງບໍ່ອີງໃສ່ສູງສຸດ
ຄວາມເລິກຫຼາຍກວ່າ 17 (ປ່ຽນເປັນ 1024 ໃນ C++11). ຄ່າເລີ່ມຕົ້ນແມ່ນ 900, ເປັນ
compiler ສາມາດຫມົດພື້ນທີ່ stack ກ່ອນທີ່ຈະຕີ 1024 ໃນບາງສະຖານະການ.

-fno-threadsafe-statics
ຢ່າປ່ອຍລະຫັດເພີ່ມເຕີມເພື່ອໃຊ້ການປົກກະຕິທີ່ລະບຸໄວ້ໃນ C++ ABI ສໍາລັບ thread-
ການເລີ່ມຕົ້ນທີ່ປອດໄພຂອງສະຖິດທ້ອງຖິ່ນ. ທ່ານສາມາດນໍາໃຊ້ທາງເລືອກນີ້ເພື່ອຫຼຸດຜ່ອນຂະຫນາດລະຫັດ
ເລັກນ້ອຍໃນລະຫັດທີ່ບໍ່ຈໍາເປັນຕ້ອງປອດໄພ thread.

-fuse-cxa-atexit
ລົງທະບຽນ destructors ສໍາລັບວັດຖຸທີ່ມີໄລຍະເວລາເກັບຮັກສາຄົງທີ່ດ້ວຍ "__cxa_atexit"
ເຮັດວຽກແທນທີ່ຈະເປັນ "atexit". ທາງເລືອກນີ້ແມ່ນຕ້ອງການສໍາລັບການຢ່າງເຕັມສ່ວນ
ການ​ຈັດ​ການ​ຕາມ​ມາດ​ຕະ​ຖານ​ຂອງ destructors static​, ແຕ່​ຈະ​ເຮັດ​ວຽກ​ພຽງ​ແຕ່​ຖ້າ​ຫາກ​ວ່າ C ຂອງ​ທ່ານ​
ຫ້ອງສະຫມຸດສະຫນັບສະຫນູນ "__cxa_atexit".

-fno-use-cxa-get-exception-ptr
ຢ່າໃຊ້ "__cxa_get_exception_ptr" ປະຈຳເວລາແລ່ນ. ນີ້ຈະເຮັດໃຫ້ເກີດ
"std::uncaught_exception" ບໍ່ຖືກຕ້ອງ, ແຕ່ເປັນສິ່ງຈໍາເປັນຖ້າ runtime routine ແມ່ນ.
ບໍ່​ສາ​ມາດ​ໃຊ້​ໄດ້.

-fvisibility-inlines-hidden
ສະວິດນີ້ປະກາດວ່າຜູ້ໃຊ້ບໍ່ໄດ້ພະຍາຍາມປຽບທຽບຕົວຊີ້ໄປຫາໃນແຖວ
ຫນ້າທີ່ຫຼືວິທີການທີ່ທີ່ຢູ່ຂອງສອງຫນ້າທີ່ຖືກປະຕິບັດແຕກຕ່າງກັນ
ວັດຖຸທີ່ໃຊ້ຮ່ວມກັນ.

ຜົນກະທົບຂອງການນີ້ແມ່ນວ່າ GCC ອາດຈະ, ປະສິດທິຜົນ, ເຄື່ອງຫມາຍວິທີການໃນແຖວ
"__attribute__ ((ການເບິ່ງເຫັນ ("ເຊື່ອງໄວ້")))" ເພື່ອບໍ່ໃຫ້ພວກມັນປາກົດຢູ່ໃນການສົ່ງອອກ.
ຕາຕະລາງຂອງ DSO ແລະບໍ່ຕ້ອງການ PLT indirection ເມື່ອໃຊ້ພາຍໃນ DSO.
ການເປີດໃຊ້ທາງເລືອກນີ້ສາມາດມີຜົນກະທົບຢ່າງຫຼວງຫຼາຍຕໍ່ເວລາໂຫຼດແລະການເຊື່ອມຕໍ່ຂອງ DSO ຍ້ອນວ່າມັນ
ຢ່າງຫຼວງຫຼາຍຫຼຸດຜ່ອນຂະຫນາດຂອງຕາຕະລາງສົ່ງອອກແບບເຄື່ອນໄຫວໃນເວລາທີ່ຫ້ອງສະຫມຸດເຮັດໃຫ້ຫນັກ
ການນໍາໃຊ້ແມ່ແບບ.

ພຶດຕິກຳຂອງສະວິດນີ້ບໍ່ຄືກັບການໝາຍວິທີການທີ່ເຊື່ອງໄວ້
ໂດຍກົງ, ເນື່ອງຈາກວ່າມັນບໍ່ມີຜົນກະທົບຕໍ່ຕົວແປ static ທ້ອງຖິ່ນຕໍ່ກັບຫນ້າທີ່ຫຼືສາເຫດ
compiler ເພື່ອ deduce ວ່າຟັງຊັນໄດ້ຖືກກໍານົດຢູ່ໃນພຽງແຕ່ຫນຶ່ງວັດຖຸທີ່ໃຊ້ຮ່ວມກັນ.

ທ່ານ​ອາດ​ຈະ​ຫມາຍ​ວິ​ທີ​ການ​ທີ່​ມີ​ການ​ສັງ​ເກດ​ເຫັນ​ຢ່າງ​ຊັດ​ເຈນ​ເພື່ອ​ລົບ​ລ້າງ​ຜົນ​ກະ​ທົບ​ຂອງ​
ສະຫຼັບວິທີການນັ້ນ. ຕົວຢ່າງ, ຖ້າທ່ານຕ້ອງການປຽບທຽບຕົວຊີ້ໄປຫາ a
ວິທີການໃນແຖວໂດຍສະເພາະ, ທ່ານອາດຈະຫມາຍວ່າມັນມີການເບິ່ງເຫັນໃນຕອນຕົ້ນ. ເຄື່ອງຫມາຍ
ການປິດຫ້ອງຮຽນດ້ວຍການເບິ່ງເຫັນຢ່າງຊັດເຈນຈະບໍ່ມີຜົນກະທົບ.

ວິທີການ inline ທັນທີທີ່ບໍ່ໄດ້ຮັບຜົນກະທົບຈາກທາງເລືອກນີ້ເປັນການເຊື່ອມໂຍງຂອງພວກເຂົາ
ຖ້າບໍ່ດັ່ງນັ້ນອາດຈະຂ້າມຂອບເຂດຫ້ອງສະຫມຸດຮ່ວມກັນ.

-fvisibility-ms-compat
ທຸງນີ້ພະຍາຍາມໃຊ້ການຕັ້ງຄ່າການເບິ່ງເຫັນເພື່ອເຮັດໃຫ້ຮູບແບບການເຊື່ອມໂຍງ C++ ຂອງ GCC
ເຂົ້າກັນໄດ້ກັບ Microsoft Visual Studio.

ທຸງເຮັດໃຫ້ການປ່ຽນແປງເຫຼົ່ານີ້ຕໍ່ກັບຮູບແບບການເຊື່ອມໂຍງຂອງ GCC:

1. ມັນກໍານົດການເບິ່ງເຫັນໃນຕອນຕົ້ນເປັນ "ເຊື່ອງໄວ້", ຄື -fvisibility=hidden.

2. ປະເພດ, ແຕ່ບໍ່ແມ່ນສະມາຊິກຂອງເຂົາເຈົ້າ, ບໍ່ໄດ້ຖືກເຊື່ອງໄວ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

3. ກົດລະບຽບຫນຶ່ງຄໍານິຍາມແມ່ນຜ່ອນຄາຍສໍາລັບປະເພດທີ່ບໍ່ມີການເບິ່ງເຫັນຢ່າງຊັດເຈນ
ຂໍ້ມູນສະເພາະທີ່ຖືກກໍານົດໄວ້ໃນວັດຖຸທີ່ໃຊ້ຮ່ວມກັນຫຼາຍກວ່າໜຶ່ງອັນ: ເຫຼົ່ານັ້ນ
ການປະກາດແມ່ນອະນຸຍາດຖ້າຫາກວ່າພວກເຂົາເຈົ້າຈະໄດ້ຮັບການອະນຸຍາດໃນເວລາທີ່ທາງເລືອກນີ້ແມ່ນ
ບໍ່​ໄດ້​ນໍາ​ໃຊ້.

ໃນລະຫັດໃຫມ່ມັນດີກວ່າທີ່ຈະໃຊ້ -fvisibility=hidden ແລະສົ່ງອອກຫ້ອງຮຽນເຫຼົ່ານັ້ນ
ມີຈຸດປະສົງເພື່ອເບິ່ງເຫັນພາຍນອກ. ແຕ່ຫນ້າເສຍດາຍ, ມັນເປັນໄປໄດ້ສໍາລັບລະຫັດທີ່ຈະອີງໃສ່,
ບາງທີອາດມີໂດຍບັງເອີນ, ກ່ຽວກັບພຶດຕິກໍາ Visual Studio.

ໃນບັນດາຜົນສະທ້ອນຂອງການປ່ຽນແປງເຫຼົ່ານີ້ແມ່ນວ່າສະມາຊິກຂໍ້ມູນສະຖິດຂອງປະເພດດຽວກັນ
ທີ່ມີຊື່ດຽວກັນແຕ່ກໍານົດໄວ້ໃນວັດຖຸທີ່ໃຊ້ຮ່ວມກັນທີ່ແຕກຕ່າງກັນຈະແຕກຕ່າງກັນ, ດັ່ງນັ້ນ
ການປ່ຽນແປງຫນຶ່ງຈະບໍ່ປ່ຽນແປງອີກອັນຫນຶ່ງ; ແລະທີ່ຊີ້ໃຫ້ເຫັນຫນ້າທີ່ສະມາຊິກກໍານົດ
ໃນວັດຖຸທີ່ໃຊ້ຮ່ວມກັນທີ່ແຕກຕ່າງກັນອາດຈະບໍ່ສົມທຽບເທົ່າກັນ. ເມື່ອທຸງນີ້ຖືກມອບໃຫ້, ມັນແມ່ນ ກ
ການລະເມີດ ODR ເພື່ອກໍານົດປະເພດທີ່ມີຊື່ດຽວກັນແຕກຕ່າງກັນ.

-fno-ອ່ອນແອ
ຢ່າໃຊ້ການສະຫນັບສະຫນູນສັນຍາລັກທີ່ອ່ອນແອ, ເຖິງແມ່ນວ່າມັນຖືກສະຫນອງໂດຍຕົວເຊື່ອມຕໍ່. ໂດຍຄ່າເລີ່ມຕົ້ນ, G++
ຈະໃຊ້ສັນຍາລັກທີ່ອ່ອນແອຖ້າພວກມັນມີຢູ່. ທາງເລືອກນີ້ມີພຽງແຕ່ສໍາລັບການທົດສອບ, ແລະ
ບໍ່ຄວນໃຊ້ໂດຍຜູ້ໃຊ້ສຸດທ້າຍ; ມັນຈະສົ່ງຜົນໃຫ້ລະຫັດ inferior ແລະບໍ່ມີຜົນປະໂຫຍດ.
ຕົວເລືອກນີ້ອາດຈະຖືກໂຍກຍ້າຍອອກໃນການປ່ອຍ G++ ໃນອະນາຄົດ.

-nostdinc++
ຢ່າຊອກຫາໄຟລ໌ header ໃນໄດເລກະທໍລີມາດຕະຖານສະເພາະກັບ C ++, ແຕ່ເຮັດ
ຍັງຊອກຫາໄດເລກະທໍລີມາດຕະຖານອື່ນໆ. (ທາງເລືອກນີ້ຖືກນໍາໃຊ້ໃນເວລາສ້າງ
ຫ້ອງສະໝຸດ C++.)

ນອກຈາກນັ້ນ, ທາງເລືອກໃນການເພີ່ມປະສິດທິພາບ, ການເຕືອນໄພ, ແລະການສ້າງລະຫັດເຫຼົ່ານີ້ມີຄວາມຫມາຍເທົ່ານັ້ນ
ສໍາ​ລັບ​ໂຄງ​ການ C++​:

-fno-default-inline
ຢ່າຄາດເດົາ inline ສໍາລັບຫນ້າທີ່ກໍານົດຢູ່ໃນຂອບເຂດຂອງຫ້ອງຮຽນ.
ໃຫ້ສັງເກດວ່າຟັງຊັນເຫຼົ່ານີ້ຈະມີການເຊື່ອມໂຍງເຊັ່ນຟັງຊັນ inline; ພວກເຂົາເຈົ້າພຽງແຕ່ຈະບໍ່
ຈະຢູ່ໃນແຖວໂດຍຄ່າເລີ່ມຕົ້ນ.

- ວາບີ (C, Objective-C, C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນເມື່ອ G++ ສ້າງລະຫັດທີ່ອາດຈະບໍ່ເຂົ້າກັນໄດ້ກັບຜູ້ຂາຍທີ່ເປັນກາງ
C++ ABI. ເຖິງ​ແມ່ນ​ວ່າ​ໄດ້​ມີ​ຄວາມ​ພະ​ຍາ​ຍາມ​ເພື່ອ​ເຕືອນ​ກ່ຽວ​ກັບ​ກໍ​ລະ​ນີ​ດັ່ງ​ກ່າວ​ທັງ​ຫມົດ​, ມີ​
ອາດຈະເປັນບາງກໍລະນີທີ່ບໍ່ໄດ້ເຕືອນກ່ຽວກັບ, ເຖິງແມ່ນວ່າ G ++ ກໍາລັງສ້າງ
ລະຫັດທີ່ບໍ່ເຂົ້າກັນໄດ້. ມັນອາດຈະຍັງມີກໍລະນີທີ່ການເຕືອນໄພຖືກປ່ອຍອອກມາເຖິງແມ່ນວ່າ
ລະຫັດທີ່ສ້າງຂຶ້ນຈະເຂົ້າກັນໄດ້.

ທ່ານຄວນຂຽນລະຫັດຂອງທ່ານເພື່ອຫຼີກເວັ້ນການເຕືອນເຫຼົ່ານີ້ຖ້າຫາກວ່າທ່ານມີຄວາມກັງວົນກ່ຽວກັບ
ຄວາມຈິງທີ່ວ່າລະຫັດທີ່ສ້າງຂຶ້ນໂດຍ G ++ ອາດຈະບໍ່ເຂົ້າກັນໄດ້ກັບລະຫັດຄູ່ທີ່ສ້າງຂຶ້ນໂດຍ
compilers ອື່ນໆ.

ຄວາມບໍ່ເຂົ້າກັນທີ່ຮູ້ຈັກໃນ -fabi-version=2 (ຄ່າເລີ່ມຕົ້ນ) ລວມມີ:

·ແມ່ແບບທີ່ມີຕົວກໍານົດການແມ່ແບບທີ່ບໍ່ແມ່ນປະເພດຂອງການອ້າງອິງແມ່ນ mangled
ບໍ່ຖືກຕ້ອງ:

extern int N;
ແມ່ແບບ ໂຄງສ້າງ S {};
void n (ສ ) {2}

ນີ້ແມ່ນການແກ້ໄຂໃນ -fabi-version=3.

· ປະ​ເພດ vector SIMD ປະ​ກາດ​ໂດຍ​ໃຊ້ "__attribute ((vector_size))" ແມ່ນ mangled ໃນ
ວິທີການທີ່ບໍ່ແມ່ນມາດຕະຖານທີ່ບໍ່ອະນຸຍາດໃຫ້ສໍາລັບການ overloading ຂອງຫນ້າທີ່ກິນ vectors
ຂະຫນາດທີ່ແຕກຕ່າງກັນ.

mangling ແມ່ນ​ການ​ປ່ຽນ​ແປງ​ໃນ​ -fabi-version=4.

ຄວາມບໍ່ເຂົ້າກັນທີ່ຮູ້ຈັກໃນ -fabi-version=1 ປະກອບມີ:

· ການ​ຈັດ​ການ​ທີ່​ບໍ່​ຖືກ​ຕ້ອງ​ຂອງ​ຫາງ padding ສໍາ​ລັບ bit-fields. G++ ອາດຈະພະຍາຍາມບັນຈຸຂໍ້ມູນ
ເຂົ້າໄປໃນ byte ດຽວກັນກັບຫ້ອງຮຽນພື້ນຖານ. ຍົກ​ຕົວ​ຢ່າງ:

ໂຄງສ້າງ A { virtual void f(); int f1: 1; } ;
struct B : public A { int f2 : 1 ; } ;

ໃນກໍລະນີນີ້, G++ ຈະວາງ "B::f2" ເຂົ້າໄປໃນ byte ດຽວກັນກັບ "A::f1"; compilers ອື່ນໆ
ຈະ​ບໍ່. ທ່ານສາມາດຫຼີກເວັ້ນບັນຫານີ້ໄດ້ໂດຍການໃສ່ "A" ຢ່າງຊັດເຈນເພື່ອໃຫ້ຂະຫນາດຂອງມັນ
ເປັນຫຼາຍຂະໜາດຂອງ byte ໃນເວທີຂອງເຈົ້າ; ທີ່ຈະເຮັດໃຫ້ເກີດ G ++ ແລະອື່ນໆ
compilers ເພື່ອຈັດວາງ "B" ຄືກັນ.

·ການຈັດການທີ່ບໍ່ຖືກຕ້ອງຂອງຫາງ padding ສໍາລັບຖານ virtual. G++ ບໍ່ໃຊ້ຫາງ
padding ເມື່ອວາງພື້ນຖານ virtual. ຍົກ​ຕົວ​ຢ່າງ:

ໂຄງສ້າງ A { virtual void f(); char c1; } ;
ໂຄງສ້າງ B { B(); char c2; } ;
struct C : public A, public virtual B {};

ໃນກໍລະນີນີ້, G++ ຈະບໍ່ວາງ "B" ເຂົ້າໄປໃນຫາງຂອງ "A"; ອື່ນໆ
compilers ຈະ. ທ່ານສາມາດຫຼີກເວັ້ນບັນຫານີ້ໄດ້ໂດຍການໃສ່ "A" ຢ່າງຊັດເຈນເພື່ອໃຫ້ມັນ
ຂະ​ຫນາດ​ແມ່ນ​ຫຼາຍ​ຂອງ​ການ​ຈັດ​ຕັ້ງ​ຂອງ​ຕົນ (ລະ​ເລີຍ​ຫ້ອງ​ຮຽນ​ພື້ນ​ຖານ virtual​)​; ຈະ
ເຮັດໃຫ້ G ++ ແລະ compilers ອື່ນໆຈັດວາງ "C" ຄືກັນ.

· ການ​ຈັດ​ການ​ບໍ່​ຖືກ​ຕ້ອງ​ຂອງ bit-fields ທີ່​ມີ​ການ​ປະ​ກາດ width ຫຼາຍ​ກ​່​ວາ​ຂອງ​ມັນ​
ປະເພດພື້ນຖານ, ໃນເວລາທີ່ bit-fields ປະກົດຢູ່ໃນສະຫະພາບ. ຍົກ​ຕົວ​ຢ່າງ:

union U { int i : 4096; } ;

ສົມມຸດວ່າ "int" ບໍ່ມີ 4096 bits, G++ ຈະເຮັດໃຫ້ສະຫະພັນນ້ອຍເກີນໄປ.
ໂດຍຈໍານວນຂອງບິດໃນ "int".

· ຫ້ອງຮຽນຫວ່າງເປົ່າສາມາດຖືກວາງໄວ້ຢູ່ໃນການຊົດເຊີຍທີ່ບໍ່ຖືກຕ້ອງ. ຍົກ​ຕົວ​ຢ່າງ:

ໂຄງສ້າງ A {};

ໂຄງສ້າງ B {
A a ;
virtual void f();
};

ໂຄງສ້າງ C : public B, public A {};

G++ ຈະວາງ "A" ຊັ້ນຖານຂອງ "C" ຢູ່ທີ່ການຊົດເຊີຍທີ່ບໍ່ແມ່ນສູນ; ມັນຄວນຈະຖືກວາງໄວ້
ຢູ່ທີ່ສູນຊົດເຊີຍ. G++ ເຊື່ອຜິດວ່າສະມາຊິກຂໍ້ມູນ "A" ຂອງ "B" ແມ່ນ
ແລ້ວຢູ່ທີ່ສູນຊົດເຊີຍ.

· ຊື່​ຂອງ​ຫນ້າ​ທີ່​ຂອງ​ແມ່​ແບບ​ທີ່​ປະ​ເພດ​ທີ່​ກ່ຽວ​ຂ້ອງ​ກັບ "typename​" ຫຼື​ແມ່​ແບບ​
ຕົວກໍານົດການສາມາດ mangled ບໍ່ຖືກຕ້ອງ.

ແມ່ແບບ
void f(typename Q::X) {}

ແມ່ແບບ ຊັ້ນ Q >
void f(typename Q ::X) {}

ການຢືນຢັນຂອງແມ່ແບບເຫຼົ່ານີ້ອາດຈະຖືກຈັດການບໍ່ຖືກຕ້ອງ.

ມັນຍັງເຕືອນການປ່ຽນແປງທີ່ກ່ຽວຂ້ອງກັບ psABI. ການປ່ຽນແປງ psABI ທີ່ຮູ້ຈັກໃນຈຸດນີ້ປະກອບມີ:

· ສໍາລັບ SYSV/x86-64, ເມື່ອຜ່ານສະຫະພາບທີ່ມີຄູ່ຍາວ, ມັນຖືກປ່ຽນເປັນ pass in.
ຫນ່ວຍຄວາມຈໍາຕາມທີ່ລະບຸໄວ້ໃນ psABI. ຍົກ​ຕົວ​ຢ່າງ:

ສະຫະພັນ U {
long double ld;
int i;
};

"ສະຫະພັນ U" ຈະຖືກຖ່າຍທອດຢູ່ໃນຄວາມຊົງຈໍາສະເຫມີ.

-Wctor-dtor-ຄວາມເປັນສ່ວນຕົວ (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນເມື່ອຫ້ອງຮຽນເບິ່ງຄືວ່າໃຊ້ບໍ່ໄດ້ເພາະວ່າຜູ້ກໍ່ສ້າງຫຼືຕົວທໍາລາຍທັງຫມົດໃນນັ້ນ
ຊັ້ນຮຽນແມ່ນເປັນສ່ວນຕົວ, ແລະມັນບໍ່ມີທັງເພື່ອນຫຼືຟັງຊັນສະມາຊິກສະຖິດສາທາລະນະ.

-Wdelete-ບໍ່ແມ່ນ virtual-dtor (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນເມື່ອ ລຶບ ຖືກນໍາໃຊ້ເພື່ອທໍາລາຍຕົວຢ່າງຂອງຫ້ອງຮຽນທີ່ມີຫນ້າທີ່ virtual
ແລະຜູ້ທໍາລາຍທີ່ບໍ່ແມ່ນ virtual. ມັນບໍ່ປອດໄພທີ່ຈະລຶບຕົວຢ່າງຂອງຊັ້ນຮຽນທີ່ມາຈາກ
ຜ່ານຕົວຊີ້ໄປຫາຫ້ອງຮຽນພື້ນຖານ ຖ້າຊັ້ນພື້ນຖານບໍ່ມີ virtual
ຜູ້ທຳລາຍ. ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ.

- ການ​ຂັດ​ຂວາງ​ (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນເມື່ອການຫັນປ່ຽນແຄບທີ່ຫ້າມໂດຍ C++11 ເກີດຂຶ້ນພາຍໃນ { }, ຕົວຢ່າງ

int i = { 2.2 }; // error: ແຄບຈາກ double ກັບ int

ທຸງນີ້ແມ່ນລວມຢູ່ໃນ - ຝາ ແລະ -Wc++11-compat.

ດ້ວຍ -std=c++11, -Wno-ແຄບ ສະກັດກັ້ນການວິນິດໄສທີ່ຕ້ອງການໂດຍມາດຕະຖານ.
ໃຫ້ສັງເກດວ່ານີ້ບໍ່ມີຜົນກະທົບຕໍ່ຄວາມຫມາຍຂອງລະຫັດທີ່ມີຮູບແບບທີ່ດີ; ການ​ປ່ຽນ​ແປງ​ທີ່​ແຄບ​ລົງ​
ຍັງຖືກພິຈາລະນາວ່າບໍ່ດີຢູ່ໃນສະພາບການ SFINAE.

- ຍົກເວັ້ນ (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນໃນເວລາທີ່ noexcept-expression ປະເມີນເປັນຜິດເນື່ອງຈາກການໂທຫາຟັງຊັນ
ທີ່​ບໍ່​ມີ​ຂໍ້​ຍົກ​ເວັ້ນ​ການ​ຍົກ​ເວັ້ນ​ການ​ບໍ່​ຖິ້ມ (ie ຖິ້ມ() or ບໍ່ມີຂໍ້ຍົກເວັ້ນ)
ແຕ່ເປັນທີ່ຮູ້ຈັກໂດຍຜູ້ລວບລວມຂໍ້ມູນທີ່ຈະບໍ່ເຄີຍຖິ້ມຂໍ້ຍົກເວັ້ນ.

-Wnon-virtual-dtor (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນເມື່ອຫ້ອງຮຽນມີຟັງຊັນສະເໝືອນ ແລະຕົວທຳລາຍທີ່ບໍ່ສະເໝືອນທີ່ສາມາດເຂົ້າເຖິງໄດ້, ໃນ
ກໍລະນີໃດທີ່ມັນເປັນໄປໄດ້ແຕ່ບໍ່ປອດໄພທີ່ຈະລຶບຕົວຢ່າງຂອງຊັ້ນຮຽນທີ່ມາຈາກ
ຜ່ານຕົວຊີ້ໄປຫາຫ້ອງຮຽນພື້ນຖານ. ການເຕືອນນີ້ຍັງຖືກເປີດໃຊ້ງານຖ້າ -Weffc++ is
ລະບຸ.

- ຄໍາ​ສັ່ງ​ (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນເມື່ອຄໍາສັ່ງຂອງສະມາຊິກເບື້ອງຕົ້ນທີ່ລະບຸໄວ້ໃນລະຫັດບໍ່ກົງກັບຄໍາສັ່ງ
ໃນ​ທີ່​ເຂົາ​ເຈົ້າ​ຕ້ອງ​ໄດ້​ຮັບ​ການ​ປະ​ຕິ​ບັດ​. ຕົວ​ຢ່າງ:

ໂຄງສ້າງ A {
int i;
int j ;
A(): j (0), i (1) { }
};

compiler ຈະ rearrange ສະມາຊິກເບື້ອງຕົ້ນສໍາລັບ i ແລະ j ເພື່ອໃຫ້ກົງກັບ
ຄໍາ​ສັ່ງ​ຂອງ​ສະ​ມາ​ຊິກ​ປະ​ກາດ​, emitting ການ​ເຕືອນ​ໄພ​ຜົນ​ກະ​ທົບ​ນັ້ນ​. ການເຕືອນໄພນີ້ແມ່ນ
ເປີດໃຊ້ໂດຍ - ຝາ.

ຕໍ່ໄປນີ້ -ວ... ທາງ​ເລືອກ​ບໍ່​ໄດ້​ຮັບ​ຜົນ​ກະ​ທົບ​ໂດຍ​ - ຝາ.

-Weffc++ (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນກ່ຽວກັບການລະເມີດຂໍ້ແນະນຳຮູບແບບຕໍ່ໄປນີ້ຈາກ Scott Meyers' ປະສິດທິພາບ
C++, ຄັ້ງທີສອງ ສະບັບ ປື້ມ:

· ລາຍການທີ 11: ກຳນົດຕົວສ້າງສຳເນົາ ແລະຕົວປະຕິບັດການມອບໝາຍສຳລັບຫ້ອງຮຽນດ້ວຍ
ຫນ່ວຍຄວາມຈໍາທີ່ຈັດສັນແບບໄດນາມິກ.

· ລາຍການທີ 12: ມັກການເລີ່ມຕົ້ນໃນການມອບໝາຍໃນຕົວສ້າງ.

· ລາຍການທີ 14: ເຮັດໃຫ້ຜູ້ທຳລາຍເປັນ virtual ໃນຫ້ອງຮຽນພື້ນຖານ.

· ລາຍການທີ 15: ໃຫ້ "operator=" ສົ່ງຄືນການອ້າງອີງເຖິງ * ອັນນີ້.

· ລາຍການທີ 23: ຢ່າພະຍາຍາມສົ່ງຂໍ້ມູນອ້າງອີງເມື່ອເຈົ້າຕ້ອງສົ່ງຄືນວັດຖຸ.

ນອກຈາກນີ້ຍັງເຕືອນກ່ຽວກັບການລະເມີດຄໍາແນະນໍາຮູບແບບຕໍ່ໄປນີ້ຈາກ Scott Meyers' ເພີ່ມເຕີມ
ປະສິດທິພາບ C ++ ປື້ມ:

· ລາຍການທີ 6: ຈໍາແນກລະຫວ່າງຮູບແບບ prefix ແລະ postfix ຂອງ increment ແລະ decrement
ຜູ້ປະກອບການ.

· ລາຍການ 7: ຢ່າໂຫຼດ "&&", "||", ຫຼື ",".

ໃນ​ເວ​ລາ​ທີ່​ເລືອກ​ເອົາ​ທາງ​ເລືອກ​ນີ້​, ຮັບ​ຮູ້​ວ່າ​ຫົວ​ຫ້ອງ​ສະ​ຫມຸດ​ມາດ​ຕະ​ຖານ​ບໍ່​ໄດ້​ເຊື່ອ​ຟັງ​ທັງ​ຫມົດ​
ຂອງຄໍາແນະນໍາເຫຼົ່ານີ້; ໃຊ້ grep -v ເພື່ອກັ່ນຕອງຄຳເຕືອນເຫຼົ່ານັ້ນອອກ.

-Wstrict-null-sentinel (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນກ່ຽວກັບການນໍາໃຊ້ "NULL" ທີ່ບໍ່ມີການຂັບໄລ່ເປັນ sentinel. ເມື່ອລວບລວມພຽງແຕ່ກັບ
GCC ນີ້ແມ່ນຕົວສົ່ງທີ່ຖືກຕ້ອງ, ຍ້ອນວ່າ "NULL" ຖືກກໍານົດເປັນ "__null". ເຖິງແມ່ນວ່າມັນເປັນ null
ຕົວຊີ້ຄົງທີ່ບໍ່ແມ່ນຕົວຊີ້ null, ມັນຮັບປະກັນວ່າມີຂະຫນາດດຽວກັນກັບ a
ຕົວຊີ້. ແຕ່ການນໍາໃຊ້ນີ້ແມ່ນບໍ່ສາມາດເຄື່ອນທີ່ໃນທົ່ວ compilers ທີ່ແຕກຕ່າງກັນ.

-Wno-ບໍ່ແມ່ນແມ່ແບບ-ເພື່ອນ (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ປິດການເຕືອນໄພເມື່ອຟັງຊັນເພື່ອນທີ່ບໍ່ແມ່ນແມ່ແບບຖືກປະກາດພາຍໃນແມ່ແບບ.
ນັບຕັ້ງແຕ່ການມາເຖິງຂອງການສະຫນັບສະຫນູນສະເພາະແມ່ແບບທີ່ຊັດເຈນໃນ G++, ຖ້າຊື່ຂອງ
ໝູ່ແມ່ນ ID ທີ່ບໍ່ມີເງື່ອນໄຂ (ເຊັ່ນ: ຫມູ່ເພື່ອນ foo(int)), ການກໍານົດພາສາ C++
ຮຽກຮ້ອງໃຫ້ເພື່ອນປະກາດຫຼືກໍານົດຫນ້າທີ່ທໍາມະດາ, nontemplate. (ພາກ
14.5.3). ກ່ອນທີ່ G++ ປະຕິບັດຂໍ້ມູນສະເພາະທີ່ຊັດເຈນ, ids ທີ່ບໍ່ມີເງື່ອນໄຂອາດຈະເປັນ
ຖືກຕີຄວາມວ່າເປັນຄວາມຊ່ຽວຊານສະເພາະຂອງຟັງຊັນ templatized. ເນື່ອງຈາກວ່ານີ້
ພຶດຕິກຳທີ່ບໍ່ສອດຄ່ອງບໍ່ແມ່ນພຶດຕິກຳເລີ່ມຕົ້ນສຳລັບ G++,
-Wnon-ແມ່ແບບ-ເພື່ອນ ອະນຸຍາດໃຫ້ compiler ກວດສອບລະຫັດທີ່ມີຢູ່ແລ້ວສໍາລັບບັນຫາທີ່ເປັນໄປໄດ້
ຈຸດໆ ແລະເປີດຢູ່ຕາມຄ່າເລີ່ມຕົ້ນ. ພຶດຕິກໍາການລວບລວມໃຫມ່ນີ້ສາມາດຖືກປິດດ້ວຍ
-Wno-ບໍ່ແມ່ນແມ່ແບບ-ເພື່ອນ, ເຊິ່ງຮັກສາລະຫັດ compiler ທີ່ສອດຄ່ອງແຕ່ປິດການໃຊ້ງານ
ເຕືອນໄພທີ່ເປັນປະໂຫຍດ.

-Wold-style-cast (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນຖ້າຫາກວ່າຮູບແບບເກົ່າ (C-style) cast ເປັນປະເພດທີ່ບໍ່ແມ່ນ void ຖືກນໍາໃຊ້ພາຍໃນໂຄງການ C++.
ນັກສະແດງຮູບແບບໃໝ່ (dynamic_cast, ສະຖິຕິ _cast, ແປຄວາມາຍຄືນໃ່, ແລະ const_cast) ແມ່ນ
ມີຄວາມສ່ຽງໜ້ອຍຕໍ່ກັບຜົນກະທົບທີ່ບໍ່ໄດ້ຕັ້ງໃຈ ແລະຊອກຫາໄດ້ງ່າຍກວ່າ.

-Woverloaded-virtual (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນເມື່ອການປະກາດຟັງຊັນເຊື່ອງຟັງຊັນສະເໝືອນຈາກຊັ້ນພື້ນຖານ. ສໍາລັບ
ຕົວຢ່າງ, ໃນ:

ໂຄງສ້າງ A {
virtual void f();
};

ໂຄງສ້າງ B: ສາທາລະນະ A {
void f(int);
};

ຮຸ່ນ "A" ຂອງ "f" ຖືກເຊື່ອງໄວ້ໃນ "B", ແລະລະຫັດເຊັ່ນ:

ຂ* ຂ;
b->f();

ຈະລົ້ມເຫລວໃນການລວບລວມ.

-Wno-pmf-ແປງ (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ປິດການນຳໃຊ້ການວິນິໄສສຳລັບການປ່ຽນຕົວຊີ້ທີ່ຜູກມັດເປັນໜ້າທີ່ຂອງສະມາຊິກໃຫ້ເປັນແບບທຳມະດາ
ຕົວຊີ້.

-Wsign-promo (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນໃນເວລາທີ່ການແກ້ໄຂ overload ເລືອກການສົ່ງເສີມການຈາກປະເພດທີ່ບໍ່ໄດ້ເຊັນຫຼື enumerated ກັບ
ປະເພດທີ່ມີລາຍເຊັນ, ຫຼາຍກວ່າການປ່ຽນເປັນປະເພດທີ່ບໍ່ມີລາຍເຊັນຂອງຂະຫນາດດຽວກັນ. ທີ່ຜ່ານມາ
ລຸ້ນຂອງ G++ ຈະພະຍາຍາມຮັກສາຄວາມບໍ່ລົງນາມ, ແຕ່ມາດຕະຖານກຳນົດໃຫ້
ພຶດ​ຕິ​ກໍາ​ໃນ​ປັດ​ຈຸ​ບັນ​.

ໂຄງສ້າງ A {
operator int();
A& operator = (int);
};

ຕົ້ນຕໍ ()
{
A a,b;
a = b;
}

ໃນຕົວຢ່າງນີ້, G ++ ຈະສັງເຄາະຄ່າເລີ່ມຕົ້ນ A& ປະຕິບັດການ = ( const A&);, ໃນຂະນະທີ່ປະເຊີນຫນ້າ
ຈະໃຊ້ຜູ້ໃຊ້ທີ່ກໍານົດ ປະຕິບັດການ =.

ທາງເລືອກໃນການ ການຄວບຄຸມ Objective-C ແລະ ຈຸດປະສົງ-C++ ພາສາພາສາ
(ໝາຍເຫດ: ຄູ່ມືນີ້ບໍ່ໄດ້ອະທິບາຍພາສາ Objective-C ແລະ Objective-C++
ຕົວເອງ

ພາກນີ້ອະທິບາຍຕົວເລືອກແຖວຄໍາສັ່ງທີ່ມີຄວາມຫມາຍສໍາລັບ Objective-C ເທົ່ານັ້ນ
ແລະໂປລແກລມ Objective-C++, ແຕ່ເຈົ້າຍັງສາມາດໃຊ້ GNU ທີ່ບໍ່ຂຶ້ນກັບພາສາສ່ວນໃຫຍ່
ທາງເລືອກໃນການລວບລວມ. ຕົວຢ່າງ, ທ່ານອາດຈະລວບລວມໄຟລ໌ "some_class.m" ແບບນີ້:

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

ໃນຕົວຢ່າງນີ້, -fgnu-runtime ເປັນທາງເລືອກທີ່ຫມາຍຄວາມວ່າພຽງແຕ່ສໍາລັບ Objective-C ແລະ Objective-C ++
ໂຄງການ; ທ່ານສາມາດນໍາໃຊ້ທາງເລືອກອື່ນກັບພາສາໃດໆທີ່ສະຫນັບສະຫນູນໂດຍ GCC.

ໃຫ້ສັງເກດວ່ານັບຕັ້ງແຕ່ Objective-C ເປັນການຂະຫຍາຍຂອງພາສາ C, Objective-C compilations
ອາດຈະໃຊ້ຕົວເລືອກສະເພາະກັບ C front-end (ເຊັ່ນ: - ແບບດັ້ງເດີມ). ເຊັ່ນດຽວກັນ,
ການລວບລວມ Objective-C++ ອາດຈະໃຊ້ຕົວເລືອກສະເພາະ C++ (ເຊັ່ນ: - ວາບີ).

ນີ້ແມ່ນບັນຊີລາຍຊື່ຂອງທາງເລືອກທີ່ເປັນ ພຽງແຕ່ ສໍາລັບການລວບລວມ Objective-C ແລະ Objective-C++
ໂຄງການ:

-fconstant-string-class=ຊື່​ຫ້ອງ​
ການນໍາໃຊ້ ຊື່​ຫ້ອງ​ ເປັນຊື່ຂອງຫ້ອງຮຽນເພື່ອ instantiate ສໍາລັບແຕ່ລະສາຍອັກສອນ
ລະບຸດ້ວຍ syntax "@"..."". ຊື່ຫ້ອງຮຽນເລີ່ມຕົ້ນແມ່ນ "NXConstantString" ຖ້າ
ເວລາແລ່ນ GNU ຖືກໃຊ້, ແລະ "NSConstantString" ຖ້າເວລາແລ່ນ NeXT ກໍາລັງຖືກ
ໃຊ້ (ເບິ່ງຂ້າງລຸ່ມນີ້). ໄດ້ -fconstant-cfstrings ທາງ​ເລືອກ​, ຖ້າ​ຫາກ​ວ່າ​ປະ​ຈຸ​ບັນ​, ຈະ override ໄດ້​
-fconstant-string-class ການຕັ້ງຄ່າແລະເຮັດໃຫ້ເກີດ "@"..."" ຕົວຫນັງສືຖືກວາງໄວ້ເປັນຄົງທີ່
CoreFoundation strings.

-fgnu-runtime
ສ້າງລະຫັດວັດຖຸທີ່ເຂົ້າກັນໄດ້ກັບເວລາແລ່ນ GNU Objective-C ມາດຕະຖານ. ນີ້​ແມ່ນ
ຄ່າເລີ່ມຕົ້ນຂອງລະບົບສ່ວນໃຫຍ່.

-fnext-runtime
ສ້າງຜົນຜະລິດທີ່ເຂົ້າກັນໄດ້ກັບເວລາແລ່ນ NeXT. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນສໍາລັບ NeXT-based
ລະບົບ, ລວມທັງ Darwin ແລະ Mac OS X. ມະຫາພາກ "__NEXT_RUNTIME__" ແມ່ນຖືກກໍານົດໄວ້ລ່ວງໜ້າຖ້າ
(ແລະພຽງແຕ່ຖ້າ) ທາງເລືອກນີ້ຖືກນໍາໃຊ້.

-fno-nil-receivers
ສົມມຸດວ່າຂໍ້ຄວາມ Objective-C ທັງໝົດສົ່ງໄປ ("[ຂໍ້ຄວາມຜູ້ຮັບ: arg]") ໃນນີ້
ຫນ່ວຍບໍລິການແປພາສາໃຫ້ແນ່ໃຈວ່າຜູ້ຮັບບໍ່ແມ່ນ "nil". ນີ້ອະນຸຍາດໃຫ້ສໍາລັບການເພີ່ມເຕີມ
ຈຸດເຂົ້າທີ່ມີປະສິດທິພາບໃນ runtime ທີ່ຈະໃຊ້. ທາງເລືອກນີ້ແມ່ນມີພຽງແຕ່ຢູ່ໃນ
ສົມທົບກັບ NeXT runtime ແລະ ABI ຮຸ່ນ 0 ຫຼື 1.

-fobjc-abi-version=n
ໃຊ້ສະບັບ n ຂອງ Objective-C ABI ສໍາລັບ runtime ທີ່ເລືອກ. ທາງເລືອກນີ້ແມ່ນ
ໃນປັດຈຸບັນສະຫນັບສະຫນູນພຽງແຕ່ສໍາລັບການແລ່ນ NeXT. ໃນກໍລະນີດັ່ງກ່າວ, ສະບັບ 0 ແມ່ນ
ABI ແບບດັ້ງເດີມ (32-ບິດ) ໂດຍບໍ່ມີການຮອງຮັບຄຸນສົມບັດ ແລະຈຸດປະສົງ-C 2.0 ອື່ນໆ
ເພີ່ມເຕີມ. ຮຸ່ນ 1 ແມ່ນ ABI ແບບດັ້ງເດີມ (32-ບິດ) ທີ່ມີການສະຫນັບສະຫນູນຄຸນສົມບັດແລະ
ເພີ່ມເຕີມ Objective-C 2.0 ອື່ນໆ. ຮຸ່ນ 2 ແມ່ນ ABI ທີ່ທັນສະໄຫມ (64-bit). ຖ້າບໍ່ມີຫຍັງ
ລະບຸໄວ້, ຄ່າເລີ່ມຕົ້ນແມ່ນເວີຊັນ 0 ໃນເຄື່ອງເປົ້າໝາຍ 32-ບິດ, ແລະເວີຊັນ 2 ໃນ 64-ບິດ.
ເຄື່ອງ​ເປົ້າ​ຫມາຍ​.

-fobjc-call-cxx-cdtors
ສໍາລັບແຕ່ລະຫ້ອງຮຽນ Objective-C, ກວດເບິ່ງວ່າຕົວແປຕົວຢ່າງໃດນຶ່ງຂອງມັນແມ່ນ C++ object
ກັບ constructor ເລີ່ມຕົ້ນທີ່ບໍ່ແມ່ນ trivial. ຖ້າເປັນດັ່ງນັ້ນ, ສັງເຄາະພິເສດ "- (id)
.cxx_construct" instance method ທີ່ຈະເອີ້ນໃຊ້ constructors ເລີ່ມຕົ້ນທີ່ບໍ່ແມ່ນເລື່ອງເລັກນ້ອຍ
ຕົວແປດັ່ງກ່າວ, ໃນຄໍາສັ່ງ, ແລະຫຼັງຈາກນັ້ນກັບຄືນ "ຕົນເອງ". ເຊັ່ນດຽວກັນ, ກວດເບິ່ງວ່າມີ
ຕົວແປ instance ແມ່ນວັດຖຸ C ++ ທີ່ມີຕົວທໍາລາຍທີ່ບໍ່ແມ່ນເລື່ອງເລັກໆນ້ອຍໆ, ແລະຖ້າເປັນດັ່ງນັ້ນ, ສັງເຄາະ.
ພິເສດ "- (void).cxx_destruct" ວິທີການທີ່ຈະດໍາເນີນການ destructors ເລີ່ມຕົ້ນດັ່ງກ່າວທັງຫມົດ,
ໃນຄໍາສັ່ງປີ້ນກັບກັນ.

ວິທີການ "- (id).cxx_construct" ແລະ "- (void).cxx_destruct" ດັ່ງນັ້ນຈຶ່ງຈະສ້າງ.
ພຽງແຕ່ດໍາເນີນການກ່ຽວກັບຕົວແປ instance ທີ່ປະກາດໃນຫ້ອງຮຽນ Objective-C ໃນປະຈຸບັນ, ແລະບໍ່ແມ່ນ
ທີ່ສືບທອດມາຈາກ superclasses. ມັນເປັນຄວາມຮັບຜິດຊອບຂອງ Objective-C
runtime ເພື່ອເອີ້ນໃຊ້ວິທີການດັ່ງກ່າວທັງໝົດໃນລຳດັບການສືບທອດຂອງວັດຖຸ. The "- (id)
.cxx_construct" ວິທີການຈະຖືກເອີ້ນໂດຍ runtime ທັນທີຫຼັງຈາກວັດຖຸໃຫມ່
ຕົວຢ່າງແມ່ນຈັດສັນ; ວິທີການ "- (void).cxx_destruct" ຈະຖືກເອີ້ນ
ທັນທີກ່ອນທີ່ runtime ຈັດການກັບຕົວຢ່າງວັດຖຸ.

ໃນ​ຖາ​ນະ​ເປັນ​ຂອງ​ລາຍ​ລັກ​ອັກ​ສອນ​ນີ້​, ພຽງ​ແຕ່​ແລ່ນ NeXT ໃນ Mac OS X 10.4 ແລະ​ຕໍ່​ມາ​ມີ​ການ​ສະ​ຫນັບ​ສະ​ຫນູນ​ສໍາ​ລັບ​ການ​
ເອີ້ນວິທີການ "- (id).cxx_construct" ແລະ "- (void).cxx_destruct".

-fobjc-ສົ່ງໂດຍກົງ
ອະນຸຍາດໃຫ້ກະໂດດໄວໄປຫາຕົວສົ່ງຂໍ້ຄວາມ. ກ່ຽວກັບ Darwin ນີ້ແມ່ນສໍາເລັດໂດຍຜ່ານ
com ຫນ້າ.

-fobjc-ຂໍ້ຍົກເວັ້ນ
ເປີດໃຊ້ການຮອງຮັບ syntactic ສໍາລັບການຈັດການຂໍ້ຍົກເວັ້ນທີ່ມີໂຄງສ້າງໃນ Objective-C, ຄ້າຍຄືກັນກັບ
ສິ່ງທີ່ສະເຫນີໂດຍ C ++ ແລະ Java. ທາງເລືອກນີ້ຈໍາເປັນຕ້ອງໃຊ້ Objective-C
ຄໍາສໍາຄັນ @try, @throw, @catch, @finally ແລະ @synchronized. ທາງເລືອກນີ້ສາມາດໃຊ້ໄດ້
ກັບທັງເວລາແລ່ນ GNU ແລະເວລາແລ່ນ NeXT (ແຕ່ບໍ່ມີໃຫ້ຮ່ວມກັບ
ເວລາແລ່ນ NeXT ໃນ Mac OS X 10.2 ແລະກ່ອນໜ້ານັ້ນ).

-fobjc-gc
ເປີດໃຊ້ການເກັບຂີ້ເຫຍື້ອ (GC) ໃນໂຄງການ Objective-C ແລະ Objective-C++. ທາງເລືອກນີ້
ສາມາດໃຊ້ໄດ້ກັບ NeXT runtime ເທົ່ານັ້ນ; GNU runtime ມີຂີ້ເຫຍື້ອທີ່ແຕກຕ່າງກັນ
ການປະຕິບັດການເກັບກໍາທີ່ບໍ່ຈໍາເປັນຕ້ອງມີທຸງ compiler ພິເສດ.

-fobjc-nilcheck
ສໍາລັບເວລາແລ່ນ NeXT ກັບລຸ້ນ 2 ຂອງ ABI, ໃຫ້ກວດເບິ່ງວິທີການຮັບ nil
invocations ກ່ອນທີ່ຈະດໍາເນີນການໂທຫາວິທີການຕົວຈິງ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນແລະສາມາດເປັນ
ປິດການໃຊ້ງານ -fno-objc-nilcheck. ວິທີການຫ້ອງຮຽນ ແລະການໂທ super ແມ່ນບໍ່ເຄີຍຖືກກວດສອບ
ສໍາລັບ nil ໃນວິທີການນີ້ບໍ່ວ່າທຸງນີ້ຖືກຕັ້ງເປັນ. ໃນປັດຈຸບັນທຸງນີ້ເຮັດ
ບໍ່ມີຫຍັງເມື່ອເວລາແລ່ນ GNU, ຫຼືລຸ້ນເກົ່າຂອງ NeXT runtime ABI, ຖືກໃຊ້.

-fobjc-std=objc1
ສອດຄ່ອງກັບໄວຍະກອນພາສາຂອງ Objective-C 1.0, ພາສາທີ່ຮັບຮູ້ໂດຍ GCC 4.0.
ອັນນີ້ມີຜົນກະທົບພຽງແຕ່ການເພີ່ມ Objective-C ກັບພາສາ C/C++; ມັນບໍ່ມີຜົນກະທົບ
ການປະຕິບັດຕາມມາດຕະຖານ C/C++, ເຊິ່ງຖືກຄວບຄຸມໂດຍພາສາ C/C++ ແຍກຕ່າງຫາກ
ທຸງທາງເລືອກ. ເມື່ອຕົວເລືອກນີ້ຖືກໃຊ້ກັບ Objective-C ຫຼື Objective-C++
compiler, ທຸກ syntax Objective-C ທີ່ບໍ່ໄດ້ຮັບການຮັບຮູ້ໂດຍ GCC 4.0 ຖືກປະຕິເສດ. ນີ້
ເປັນປະໂຫຍດຖ້າທ່ານຕ້ອງການໃຫ້ແນ່ໃຈວ່າລະຫັດ Objective-C ຂອງທ່ານສາມາດຖືກລວບລວມດ້ວຍ
GCC ລຸ້ນເກົ່າ.

-freplace-objc-classes
ປ່ອຍຕົວຊີ້ບອກເຄື່ອງໝາຍພິເສດ ld(1​) ບໍ່ໃຫ້ເຊື່ອມໂຍງຢ່າງສະຖິດຢູ່ໃນວັດຖຸຜົນໄດ້ຮັບ
ໄຟລ໌, ແລະອະນຸຍາດໃຫ້ ຍ້ອມ(1​) ເພື່ອໂຫຼດມັນໃນເວລາແລ່ນແທນ. ນີ້ແມ່ນໃຊ້ໃນ
ສົມທົບກັບ Fix-and-Continue debugging mode, ບ່ອນທີ່ໄຟລ໌ວັດຖຸຢູ່ໃນ
ຄໍາຖາມອາດຈະຖືກລວບລວມຄືນໃຫມ່ແລະໂຫຼດໃຫມ່ແບບເຄື່ອນໄຫວໃນໄລຍະໂຄງການ
ການ​ປະ​ຕິ​ບັດ​, ໂດຍ​ບໍ່​ຈໍາ​ເປັນ​ຕ້ອງ restart ໂຄງ​ການ​ຕົວ​ຂອງ​ມັນ​ເອງ​. ໃນປັດຈຸບັນ, ແກ້ໄຂແລະ
ສືບຕໍ່ການທໍາງານແມ່ນສາມາດໃຊ້ໄດ້ໂດຍສົມທົບກັບ NeXT runtime ໃນ Mac ເທົ່ານັ້ນ
OS X 10.3 ແລະຕໍ່ມາ.

-fzero-link
ເມື່ອລວບລວມເວລາແລ່ນ NeXT, ຄອມພີວເຕີປົກກະຕິແທນການໂທຫາ
"objc_getClass("...")" (ເມື່ອຊື່ຂອງຊັ້ນແມ່ນຮູ້ຈັກໃນເວລາລວບລວມ) ກັບ
ການອ້າງອິງຊັ້ນແບບຄົງທີ່ທີ່ໄດ້ຮັບການເລີ່ມຕົ້ນໃນເວລາໂຫຼດ, ເຊິ່ງປັບປຸງເວລາແລ່ນ
ການປະຕິບັດ. ການ​ລະ​ບຸ -fzero-link ທຸງສະກັດກັ້ນພຶດຕິກໍາແລະສາເຫດນີ້
ໂທຫາ "objc_getClass("...")" ທີ່ຈະຮັກສາໄວ້. ນີ້ແມ່ນເປັນປະໂຫຍດໃນ Zero-Link
ໂຫມດ debugging, ເນື່ອງຈາກວ່າມັນອະນຸຍາດໃຫ້ສໍາລັບການປະຕິບັດຊັ້ນຮຽນສ່ວນບຸກຄົນໄດ້ຮັບການດັດແກ້
ໃນ​ລະ​ຫວ່າງ​ການ​ປະ​ຕິ​ບັດ​ໂຄງ​ການ​. ປະຈຸບັນ GNU runtime ຮັກສາການໂທໄປຫາ
"objc_get_class("...")" ໂດຍບໍ່ຄໍານຶງເຖິງຕົວເລືອກແຖວຄໍາສັ່ງ.

-gen-decls
Dump ການປະກາດການໂຕ້ຕອບສໍາລັບທຸກຊັ້ນຮຽນທີ່ເຫັນໃນໄຟລ໌ແຫຼ່ງໄປຫາໄຟລ໌ທີ່ມີຊື່
sourcename.decl.

-Wassign-intercept (Objective-C ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນທຸກຄັ້ງທີ່ການມອບໝາຍ Objective-C ຖືກຂັດຂວາງໂດຍຜູ້ເກັບຂີ້ເຫຍື້ອ.

-Wno-protocol (Objective-C ແລະ Objective-C++ ເທົ່ານັ້ນ)
ຖ້າຫ້ອງຮຽນຖືກປະກາດໃຫ້ປະຕິບັດໂປໂຕຄອນ, ການເຕືອນໄພແມ່ນອອກສໍາລັບທຸກໆວິທີການ
ໃນໂປໂຕຄອນທີ່ບໍ່ໄດ້ຖືກປະຕິບັດໂດຍຫ້ອງຮຽນ. ພຶດຕິກໍາເລີ່ມຕົ້ນແມ່ນເພື່ອ
ອອກຄໍາເຕືອນສໍາລັບທຸກໆວິທີການທີ່ບໍ່ໄດ້ປະຕິບັດຢ່າງຊັດເຈນໃນຫ້ອງຮຽນ, ເຖິງແມ່ນວ່າ a
ການປະຕິບັດວິທີການແມ່ນສືບທອດມາຈາກ superclass. ຖ້າທ່ານໃຊ້ -Wno-protocol
ທາງເລືອກ, ຫຼັງຈາກນັ້ນວິທີການທີ່ສືບທອດມາຈາກ superclass ແມ່ນຖືວ່າຖືກປະຕິບັດ,
ແລະບໍ່ມີການເຕືອນໄພໃຫ້ເຂົາເຈົ້າ.

- ຜູ້​ເລືອກ​ (Objective-C ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນຖ້າວິທີການຫຼາຍປະເພດທີ່ແຕກຕ່າງກັນສໍາລັບຕົວເລືອກດຽວກັນພົບໃນລະຫວ່າງ
ການລວບລວມ. ການກວດສອບແມ່ນປະຕິບັດໃນບັນຊີລາຍຊື່ຂອງວິທີການໃນຂັ້ນຕອນສຸດທ້າຍຂອງ
ການລວບລວມ. ນອກຈາກນັ້ນ, ການກວດສອບແມ່ນດໍາເນີນການສໍາລັບແຕ່ລະຕົວເລືອກທີ່ປາກົດຢູ່ໃນ a
"@selector(...)" ສະແດງອອກ, ແລະວິທີການທີ່ສອດຄ້ອງກັນສໍາລັບຕົວເລືອກນັ້ນແມ່ນ
ພົບເຫັນໃນລະຫວ່າງການລວບລວມ. ເນື່ອງຈາກວ່າການກວດສອບເຫຼົ່ານີ້ສະແກນຕາຕະລາງວິທີການພຽງແຕ່ໃນຕອນທ້າຍຂອງ
ຂອງການລວບລວມ, ຄໍາເຕືອນເຫຼົ່ານີ້ບໍ່ໄດ້ຜະລິດຖ້າຫາກວ່າຂັ້ນຕອນສຸດທ້າຍຂອງການລວບລວມແມ່ນ
ບໍ່ບັນລຸໄດ້, ສໍາລັບການຍົກຕົວຢ່າງເນື່ອງຈາກວ່າມີຄວາມຜິດພາດທີ່ພົບເຫັນໃນລະຫວ່າງການລວບລວມ, ຫຼືເນື່ອງຈາກວ່າ
-fsyntax ເທົ່ານັ້ນ ທາງເລືອກແມ່ນຖືກນໍາໃຊ້.

-Wstrict-select-match (Objective-C ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນຖ້າຫາກວ່າຫຼາຍວິທີການທີ່ມີການໂຕ້ຖຽງທີ່ແຕກຕ່າງກັນແລະ / ຫຼືປະເພດຜົນຕອບແທນແມ່ນພົບເຫັນສໍາລັບ a
ຕົວເລືອກທີ່ໃຫ້ໃນເວລາພະຍາຍາມສົ່ງຂໍ້ຄວາມໂດຍໃຊ້ຕົວເລືອກນີ້ໄປຫາຜູ້ຮັບ
ພິມ "id" ຫຼື "Class". ເມື່ອທຸງນີ້ຖືກປິດ (ເຊິ່ງເປັນພຶດຕິກໍາເລີ່ມຕົ້ນ), the
compiler ຈະຍົກເລີກການເຕືອນດັ່ງກ່າວຖ້າຫາກວ່າຄວາມແຕກຕ່າງທີ່ພົບເຫັນແມ່ນຖືກຈໍາກັດຢູ່ໃນປະເພດທີ່
ແບ່ງປັນຂະຫນາດດຽວກັນແລະການຈັດຕໍາແຫນ່ງ.

-Wunddeclared-ເລືອກ (Objective-C ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນຖ້າການສະແດງອອກ "@selector(...)" ອ້າງອີງເຖິງຕົວເລືອກທີ່ຍັງບໍ່ໄດ້ປະກາດ. ກ
ໂຕເລືອກແມ່ນຖືວ່າບໍ່ຖືກປະກາດ ຖ້າບໍ່ມີວິທີການທີ່ມີຊື່ນັ້ນຖືກປະກາດມາກ່ອນ
ສະແດງອອກ "@selector(...)" ຢ່າງຊັດເຈນຢູ່ໃນ @interface ຫຼື @protocol
ປະກາດ, ຫຼື implicitly ໃນພາກສ່ວນ @implementation. ທາງເລືອກນີ້ປະຕິບັດສະເຫມີ
ການກວດສອບຂອງມັນທັນທີທີ່ "@selector(...)" ສະແດງອອກ, ໃນຂະນະທີ່ - ຜູ້​ເລືອກ​ ພຽງແຕ່
ປະຕິບັດການກວດສອບຂອງຕົນໃນຂັ້ນຕອນສຸດທ້າຍຂອງການລວບລວມ. ນີ້ຍັງບັງຄັບໃຊ້ລະຫັດ
ສົນທິສັນຍາສະໄຕລ໌ທີ່ວິທີການແລະຕົວເລືອກຕ້ອງໄດ້ຮັບການປະກາດກ່ອນທີ່ຈະຖືກນໍາໃຊ້.

-print-objc-runtime-info
ສ້າງສ່ວນຫົວ C ທີ່ອະທິບາຍໂຄງສ້າງທີ່ໃຫຍ່ທີ່ສຸດທີ່ຜ່ານໂດຍມູນຄ່າ, ຖ້າມີ.

ທາງເລືອກໃນການ to ການຄວບຄຸມ ການວິນິດໄສ ຂໍ້ຄວາມ ການສ້າງຮູບແບບ
ຕາມປະເພນີ, ຂໍ້ຄວາມວິນິດໄສໄດ້ຖືກຈັດຮູບແບບໂດຍບໍ່ຄໍານຶງເຖິງອຸປະກອນຜົນຜະລິດ
ລັກສະນະ (ເຊັ່ນ: ຄວາມກວ້າງຂອງມັນ, ...). ທາງ​ເລືອກ​ທີ່​ອະ​ທິ​ບາຍ​ຂ້າງ​ລຸ່ມ​ນີ້​ສາ​ມາດ​ຖືກ​ນໍາ​ໃຊ້​ເພື່ອ​ຄວບ​ຄຸມ​
ຂໍ້​ຄວາມ​ວິ​ນິດ​ໄສ​ວິ​ທີ​ການ​ຈັດ​ຮູບ​ແບບ​, ເຊັ່ນ​: ຈໍາ​ນວນ​ຕົວ​ອັກ​ສອນ​ຕໍ່​ແຖວ​, ເລື້ອຍໆ​ປານ​ໃດ​
ຂໍ້ມູນສະຖານທີ່ແຫຼ່ງຄວນໄດ້ຮັບການລາຍງານ. ໃນປັດຈຸບັນ, ມີພຽງແຕ່ C ++ ດ້ານຫນ້າສາມາດ
ໃຫ້ກຽດທາງເລືອກເຫຼົ່ານີ້. ຢ່າງໃດກໍ່ຕາມ, ຄາດວ່າ, ໃນອະນາຄົດອັນໃກ້ນີ້, ດ້ານຫນ້າທີ່ຍັງເຫຼືອ
ສິ້ນສຸດຈະສາມາດຍ່ອຍພວກມັນໄດ້ຢ່າງຖືກຕ້ອງ.

-fmessage-length=n
ພະ​ຍາ​ຍາມ​ຈັດ​ຮູບ​ແບບ​ຂໍ້​ຄວາມ​ຜິດ​ພາດ​ເພື່ອ​ໃຫ້​ພວກ​ເຂົາ​ເຫມາະ​ກັບ​ເສັ້ນ​ກ່ຽວ​ກັບ​ການ​ n ຕົວລະຄອນ. ໄດ້
ຄ່າເລີ່ມຕົ້ນແມ່ນ 72 ຕົວອັກສອນສຳລັບ g ++ ແລະ 0 ສໍາລັບສ່ວນທີ່ເຫຼືອຂອງດ້ານຫນ້າສະຫນັບສະຫນູນໂດຍ
GCC. ຖ້າ n ແມ່ນສູນ, ຫຼັງຈາກນັ້ນບໍ່ມີການຫໍ່ເສັ້ນຈະຖືກເຮັດ; ແຕ່ລະຂໍ້ຄວາມສະແດງຂໍ້ຜິດພາດຈະປາກົດ
ຢູ່ໃນເສັ້ນດຽວ.

-fdiagnostics-show-location=ຄັ້ງດຽວ
ມີ​ຄວາມ​ຫມາຍ​ພຽງ​ແຕ່​ໃນ​ຮູບ​ແບບ​ການ​ຫໍ່​ເສັ້ນ​. ແນະນຳໃຫ້ນັກຂ່າວກວດຫາຂໍ້ຄວາມ
ປ່ອຍຕົວ ຄັ້ງຫນຶ່ງ ຂໍ້ມູນສະຖານທີ່ແຫຼ່ງ; ນັ້ນແມ່ນ, ໃນກໍລະນີທີ່ຂໍ້ຄວາມຍາວເກີນໄປທີ່ຈະເຫມາະ
ຢູ່ໃນເສັ້ນດຽວແລະຕ້ອງໄດ້ຮັບການຫໍ່, ສະຖານທີ່ແຫຼ່ງຈະບໍ່ຖືກປ່ອຍອອກມາ
(ເປັນຄໍານໍາຫນ້າ) ອີກເທື່ອຫນຶ່ງ, ຫຼາຍກວ່າແລະຫຼາຍກວ່າ, ໃນສາຍຕໍ່ໆມາ. ນີ້​ແມ່ນ
ພຶດຕິກໍາເລີ່ມຕົ້ນ.

-fdiagnostics-show-location=ທຸກແຖວ
ມີ​ຄວາມ​ຫມາຍ​ພຽງ​ແຕ່​ໃນ​ຮູບ​ແບບ​ການ​ຫໍ່​ເສັ້ນ​. ແນະນຳໃຫ້ນັກຂ່າວກວດຫາຂໍ້ຄວາມ
ປ່ອຍຂໍ້ມູນສະຖານທີ່ແຫຼ່ງດຽວກັນ (ເປັນຄໍານໍາຫນ້າ) ສໍາລັບເສັ້ນຕົວຈິງທີ່ເປັນຜົນ
ຈາກຂະບວນການທໍາລາຍຂໍ້ຄວາມທີ່ຍາວເກີນໄປທີ່ຈະເຫມາະໃນແຖວດຽວ.

-fno-diagnostics-show-option
ໂດຍຄ່າເລີ່ມຕົ້ນ, ແຕ່ລະການວິນິດໄສທີ່ປ່ອຍອອກມາປະກອບມີຂໍ້ຄວາມທີ່ຊີ້ບອກທາງເລືອກແຖວຄໍາສັ່ງ
ທີ່ຄວບຄຸມການວິນິດໄສໂດຍກົງ (ຖ້າທາງເລືອກດັ່ງກ່າວເປັນທີ່ຮູ້ຈັກກັບການວິນິດໄສ
ເຄື່ອງຈັກ). ການ​ລະ​ບຸ -fno-diagnostics-show-option ທຸງ​ສະ​ກັດ​ກັ້ນ​ນັ້ນ
ພຶດຕິ ກຳ.

ທາງເລືອກໃນການ to ການຮ້ອງຂໍ or ສະກັດກັ້ນ ຄໍາເຕືອນ
ຄໍາເຕືອນແມ່ນຂໍ້ຄວາມວິນິດໄສທີ່ລາຍງານການກໍ່ສ້າງທີ່ບໍ່ໄດ້ປະກົດຕົວ
ຜິດພາດແຕ່ວ່າມີຄວາມສ່ຽງຫຼືແນະນໍາວ່າອາດຈະມີຄວາມຜິດພາດ.

ຕົວເລືອກທີ່ບໍ່ຂຶ້ນກັບພາສາຕໍ່ໄປນີ້ບໍ່ໄດ້ເປີດໃຊ້ການເຕືອນສະເພາະແຕ່ຄວບຄຸມ
ປະເພດຂອງການວິນິດໄສທີ່ຜະລິດໂດຍ GCC.

-fsyntax ເທົ່ານັ້ນ
ກວດເບິ່ງລະຫັດສໍາລັບ syntax ຜິດພາດ, ແຕ່ຢ່າເຮັດຫຍັງນອກເຫນືອຈາກນັ້ນ.

-fmax-errors=n
ຈໍາ​ກັດ​ຈໍາ​ນວນ​ສູງ​ສຸດ​ຂອງ​ຂໍ້​ຄວາມ​ຜິດ​ພາດ​ເພື່ອ​ n, ໃນຈຸດນັ້ນ GCC ປະຕິເສດແທນທີ່ຈະ
ຫຼາຍກວ່າການພະຍາຍາມສືບຕໍ່ປະມວນຜົນລະຫັດແຫຼ່ງ. ຖ້າ n ແມ່ນ 0 (ຄ່າເລີ່ມຕົ້ນ),
ບໍ່ມີຂອບເຂດຈໍາກັດກ່ຽວກັບຈໍານວນຂໍ້ຄວາມສະແດງຂໍ້ຜິດພາດທີ່ຜະລິດ. ຖ້າ - ຄວາມ​ຜິດ​ພາດ Wfatal​ ແມ່ນຍັງ
ລະບຸ, ຈາກນັ້ນ - ຄວາມ​ຜິດ​ພາດ Wfatal​ ມີຄວາມສຳຄັນກວ່າຕົວເລືອກນີ້.

-w ຍັບຍັ້ງຂໍ້ຄວາມເຕືອນທັງຫມົດ.

- ຄວາມ​ຜິດ​ພາດ​
ເຮັດໃຫ້ການເຕືອນໄພທັງຫມົດເຂົ້າໄປໃນຄວາມຜິດພາດ.

- ຄວາມ​ຜິດ​ພາດ =​
ເຮັດໃຫ້ຄໍາເຕືອນທີ່ລະບຸໄວ້ເປັນຄວາມຜິດພາດ. ຕົວກໍານົດການເຕືອນໄພຖືກຕໍ່ທ້າຍ,
ຍົກ​ຕົວ​ຢ່າງ -Wrror=ປ່ຽນ ປ່ຽນ​ການ​ເຕືອນ​ໄພ​ທີ່​ຄວບ​ຄຸມ​ໂດຍ​ - ສະຫວິດ ເຂົ້າ​ໄປ​ໃນ​ຄວາມ​ຜິດ​ພາດ​.
ສະຫຼັບນີ້ໃຊ້ຮູບແບບລົບ, ເພື່ອໃຊ້ເພື່ອປະຕິເສດ - ຄວາມ​ຜິດ​ພາດ​ ສໍາ​ລັບ​ການ​ເຕືອນ​ໄພ​ສະ​ເພາະ​,
ຍົກ​ຕົວ​ຢ່າງ -Wno-error=ສະຫຼັບ ເຮັດໃຫ້ - ສະຫວິດ ການເຕືອນໄພບໍ່ແມ່ນຄວາມຜິດພາດ, ເຖິງແມ່ນວ່າໃນເວລາທີ່ - ຄວາມ​ຜິດ​ພາດ​
ແມ່ນຢູ່ໃນຜົນກະທົບ.

ຂໍ້ຄວາມເຕືອນສໍາລັບແຕ່ລະຄໍາເຕືອນທີ່ສາມາດຄວບຄຸມໄດ້ປະກອບມີທາງເລືອກທີ່ຄວບຄຸມ
ການເຕືອນໄພ. ທາງເລືອກນັ້ນສາມາດຖືກນໍາໃຊ້ກັບ - ຄວາມ​ຜິດ​ພາດ =​ ແລະ -Wno-error= ດັ່ງທີ່ໄດ້ອະທິບາຍໄວ້
ຂ້າງເທິງ. (ການພິມທາງເລືອກໃນຂໍ້ຄວາມເຕືອນສາມາດຖືກປິດການໃຊ້ງານ
-fno-diagnostics-show-option ທຸງ.)

ໃຫ້ສັງເກດວ່າການກໍານົດ - ຄວາມ​ຜິດ​ພາດ =​ຟູ ອັດຕະໂນມັດຫມາຍເຖິງ -Wຟູທີ່ຢູ່ ເຖິງຢ່າງໃດກໍ່ຕາມ, -Wno-error=ຟູ
ບໍ່ໄດ້ຫມາຍເຖິງຫຍັງ.

- ຄວາມ​ຜິດ​ພາດ Wfatal​
ຕົວເລືອກນີ້ເຮັດໃຫ້ compiler ຍົກເລີກການລວບລວມຂໍ້ມູນໃນຄວາມຜິດພາດທໍາອິດທີ່ເກີດຂຶ້ນ
ແທນທີ່ຈະພະຍາຍາມສືບຕໍ່ແລະພິມຂໍ້ຄວາມສະແດງຂໍ້ຜິດພາດຕື່ມອີກ.

ທ່ານ​ສາ​ມາດ​ຮ້ອງ​ຂໍ​ການ​ເຕືອນ​ໄພ​ສະ​ເພາະ​ຈໍາ​ນວນ​ຫຼາຍ​ໂດຍ​ມີ​ທາງ​ເລືອກ​ໃນ​ການ​ເລີ່ມ​ຕົ້ນ​ -W, ຍົກ​ຕົວ​ຢ່າງ - Wimplicit
ເພື່ອຮ້ອງຂໍການເຕືອນໄພກ່ຽວກັບການປະກາດ implicit. ແຕ່ລະທາງເລືອກການເຕືອນໄພສະເພາະເຫຼົ່ານີ້ຍັງ
ມີຮູບແບບທາງລົບເລີ່ມຕົ້ນ -Wno- ປິດ​ການ​ເຕືອນ​ໄພ​; ຍົກ​ຕົວ​ຢ່າງ, -Wno - implicit.
ຄູ່ມືນີ້ສະແດງພຽງແຕ່ຫນຶ່ງໃນສອງຮູບແບບ, ອັນໃດກໍ່ຕາມບໍ່ແມ່ນຄ່າເລີ່ມຕົ້ນ. ສໍາລັບຕໍ່ໄປ,
ຕົວເລືອກພາສາສະເພາະຍັງອ້າງອີງເຖິງ C ++ ພາສາ ທາງເລືອກໃນການ ແລະ Objective-C ແລະ
ຈຸດປະສົງ-C++ ພາສາ ທາງເລືອກໃນການ.

ເມື່ອມີການຮ້ອງຂໍທາງເລືອກເຕືອນທີ່ບໍ່ຮູ້ຈັກ (ຕົວຢ່າງ: - ການ​ເຕືອນ​ໄພ​ບໍ່​ຮູ້​ຈັກ​), GCC ຈະ emit
ການວິນິດໄສທີ່ລະບຸວ່າທາງເລືອກບໍ່ຖືກຮັບຮູ້. ຢ່າງໃດກໍຕາມ, ຖ້າຫາກວ່າ -Wno- ແບບຟອມແມ່ນ
ການນໍາໃຊ້, ພຶດຕິກໍາແມ່ນແຕກຕ່າງກັນເລັກນ້ອຍ: ບໍ່ມີການວິນິດໄສຈະຖືກຜະລິດສໍາລັບ
-Wno-unknown-ເຕືອນ ເວັ້ນເສຍແຕ່ວ່າການວິນິດໄສອື່ນໆກໍາລັງຖືກຜະລິດ. ນີ້ອະນຸຍາດໃຫ້ນໍາໃຊ້ຂອງ
ໃຫມ່ -Wno- ທາງເລືອກທີ່ມີ compilers ເກົ່າ, ແຕ່ຖ້າມີບາງສິ່ງບາງຢ່າງຜິດພາດ, compiler ຈະເຕືອນ
ທາງເລືອກທີ່ບໍ່ຮູ້ຈັກໄດ້ຖືກນໍາໃຊ້.

- pedantic
ອອກຄໍາເຕືອນທັງຫມົດທີ່ຕ້ອງການໂດຍ ISO C ແລະ ISO C++ ທີ່ເຄັ່ງຄັດ; ປະຕິເສດໂຄງການທັງຫມົດ
ໃຊ້ສ່ວນຂະຫຍາຍທີ່ຖືກຫ້າມ, ແລະບາງໂຄງການອື່ນໆທີ່ບໍ່ປະຕິບັດຕາມ ISO C ແລະ ISO
C++. ສໍາລັບ ISO C, ປະຕິບັດຕາມສະບັບຂອງມາດຕະຖານ ISO C ທີ່ລະບຸໄວ້ໂດຍໃດໆ -std
ທາງ​ເລືອກ​ທີ່​ນໍາ​ໃຊ້​.

ໂປຣແກຣມ ISO C ແລະ ISO C++ ທີ່ຖືກຕ້ອງຄວນລວບລວມຢ່າງຖືກຕ້ອງໂດຍມີ ຫຼືບໍ່ມີທາງເລືອກນີ້
(ເຖິງແມ່ນວ່າຈໍານວນຫນ້ອຍທີ່ຫາຍາກຕ້ອງການ -ansi ຫຼື -std ທາງ​ເລືອກ​ການ​ລະ​ບຸ​ສະ​ບັບ​ທີ່​ຕ້ອງ​ການ​
ຂອງ ISO C). ຢ່າງໃດກໍຕາມ, ໂດຍບໍ່ມີທາງເລືອກນີ້, ບາງສ່ວນຂະຫຍາຍ GNU ແລະ C ແບບດັ້ງເດີມແລະ
ຄຸນນະສົມບັດ C ++ ໄດ້ຮັບການສະຫນັບສະຫນູນເຊັ່ນດຽວກັນ. ດ້ວຍທາງເລືອກນີ້, ພວກເຂົາຖືກປະຕິເສດ.

- pedantic ບໍ່ໄດ້ເຮັດໃຫ້ເກີດຂໍ້ຄວາມເຕືອນສໍາລັບການນໍາໃຊ້ຄໍາສໍາຮອງທີ່ມີ
ຊື່ເລີ່ມຕົ້ນແລະລົງທ້າຍດ້ວຍ __. ການເຕືອນໄພ Pedantic ຍັງຖືກປິດຢູ່ໃນການສະແດງຜົນ
ທີ່ປະຕິບັດຕາມ "__extension__". ຢ່າງໃດກໍ່ຕາມ, ໄຟລ໌ສ່ວນຫົວຂອງລະບົບເທົ່ານັ້ນຄວນໃຊ້ສິ່ງເຫຼົ່ານີ້
ເສັ້ນທາງຫນີ; ໂຄງການຄໍາຮ້ອງສະຫມັກຄວນຫຼີກເວັ້ນພວກມັນ.

ຜູ້ໃຊ້ບາງຄົນພະຍາຍາມໃຊ້ - pedantic ກວດ​ສອບ​ບັນ​ດາ​ໂຄງ​ການ​ສໍາ​ລັບ​ການ​ສອດ​ຄ່ອງ ISO C ຢ່າງ​ເຂັ້ມ​ງວດ​. ເຂົາເຈົ້າ
ທັນທີທີ່ພົບວ່າມັນບໍ່ໄດ້ເຮັດສິ່ງທີ່ພວກເຂົາຕ້ອງການ: ມັນພົບເຫັນບາງການປະຕິບັດທີ່ບໍ່ແມ່ນ ISO,
ແຕ່​ບໍ່​ແມ່ນ​ທັງ​ຫມົດ --- ພຽງ​ແຕ່​ທີ່ ISO C ຕ້ອງການ ການວິນິດໄສ, ແລະບາງອັນອື່ນໆສໍາລັບ
ເຊິ່ງການວິນິດໄສໄດ້ຖືກເພີ່ມ.

ຄຸນສົມບັດເພື່ອລາຍງານຄວາມລົ້ມເຫລວໃນການປະຕິບັດຕາມ ISO C ອາດຈະເປັນປະໂຫຍດໃນບາງກໍລະນີ,
ແຕ່ຈະຮຽກຮ້ອງໃຫ້ມີວຽກງານເພີ່ມເຕີມຢ່າງຫຼວງຫຼາຍແລະຈະຂ້ອນຂ້າງແຕກຕ່າງຈາກ
- pedantic. ພວກເຮົາບໍ່ມີແຜນທີ່ຈະຮອງຮັບຄຸນສົມບັດດັ່ງກ່າວໃນອະນາຄົດອັນໃກ້ນີ້.

ບ່ອນທີ່ມາດຕະຖານທີ່ລະບຸໄວ້ກັບ -std ເປັນຕົວແທນຂອງພາສາ GNU ຂະຫຍາຍ C, ເຊັ່ນ:
gnu90 or gnu99, ມີທີ່ສອດຄ້ອງກັນ ຖານ ມາດຕະຖານ, ສະບັບຂອງ ISO C ທີ່
ພາສາ GNU ຂະຫຍາຍແມ່ນອີງໃສ່. ຄຳເຕືອນຈາກ - pedantic ໄດ້ຖືກມອບໃຫ້ບ່ອນທີ່ພວກເຂົາຢູ່
ຕ້ອງການໂດຍມາດຕະຖານພື້ນຖານ. (ມັນ​ຈະ​ບໍ່​ສົມ​ເຫດ​ສົມ​ຜົນ​ທີ່​ຈະ​ໃຫ້​ຄຳ​ເຕືອນ​ດັ່ງ​ກ່າວ
ພຽງ​ແຕ່​ສໍາ​ລັບ​ລັກ​ສະ​ນະ​ທີ່​ບໍ່​ໄດ້​ຢູ່​ໃນ​ພາ​ສາ GNU C ທີ່​ກໍາ​ນົດ​ໄວ້​, ນັບ​ຕັ້ງ​ແຕ່​ໂດຍ​ຄໍາ​ນິ​ຍາມ GNU​
ພາສາຂອງ C ປະກອບມີລັກສະນະທັງຫມົດທີ່ compiler ສະຫນັບສະຫນູນກັບທາງເລືອກທີ່ໃຫ້, ແລະ
ຈະ​ບໍ່​ມີ​ຫຍັງ​ທີ່​ຈະ​ເຕືອນ​ກ່ຽວ​ກັບ​ການ​.)

-pedantic ຜິດ​ພາດ​
ຄື - pedantic, ຍົກເວັ້ນວ່າຄວາມຜິດພາດແມ່ນຜະລິດແທນທີ່ຈະເປັນການເຕືອນ.

- ຝາ
ນີ້ເຮັດໃຫ້ການເຕືອນໄພທັງຫມົດກ່ຽວກັບການກໍ່ສ້າງທີ່ຜູ້ໃຊ້ບາງຄົນພິຈາລະນາ
ຄໍາຖາມ, ແລະທີ່ງ່າຍຕໍ່ການຫຼີກເວັ້ນ (ຫຼືດັດແປງເພື່ອປ້ອງກັນການເຕືອນ), ເຖິງແມ່ນວ່າຢູ່ໃນ
ສົມທົບກັບມະຫາພາກ. ອັນນີ້ຍັງເປີດການນຳໃຊ້ຄຳເຕືອນສະເພາະພາສາທີ່ອະທິບາຍໄວ້
in C ++ ພາສາ ທາງເລືອກໃນການ ແລະ Objective-C ແລະ ຈຸດປະສົງ-C++ ພາສາ ທາງເລືອກໃນການ.

- ຝາ ເປີດທຸງເຕືອນຕໍ່ໄປນີ້:

-waddress - Warray-bounds (ພຽງແຕ່ກັບ -O2) -Wc++11-compat -Wchar-subscripts
-Wenum ປຽບທຽບ (ໃນ C/Objc; ອັນນີ້ແມ່ນເປີດໂດຍຄ່າເລີ່ມຕົ້ນໃນ C++) -Wimplicit-int (ຄ ແລະ
Objective-C ເທົ່ານັ້ນ) -Wimplicit-function-ປະກາດ (C ແລະ Objective-C ເທົ່ານັ້ນ) - ຄໍາເຫັນ
-Wformat - ຜູ້ຍິງ (ພຽງແຕ່ສໍາລັບ C/ObjC ແລະເວັ້ນເສຍແຕ່ - freestanding) -Wmaybe-unitialized
-Wmissing-braces -Wnonnull -Wparentheses -Wpointer-ເຊັນ​ - ຄໍາ​ສັ່ງ​ - ປະ​ເພດ Wreturn​
- ລໍາດັບຈຸດ -Wsign-ປຽບທຽບ (ສະເພາະໃນ C++) - ເປັນການລ້າສຸດ -Wstrict-overflow=1
- ສະຫວິດ -Wtrigraphs - ປະກາດ -Wunknown-pragmas -Wunused-function
-Wunused-label -Wunused-value -Wunused-variable -Wvolatile-register-var

ໃຫ້ສັງເກດວ່າທຸງເຕືອນໄພບາງອັນບໍ່ໄດ້ຫມາຍເຖິງ - ຝາ. ບາງຄົນຂອງພວກເຂົາເຕືອນກ່ຽວກັບ
ການກໍ່ສ້າງທີ່ຜູ້ໃຊ້ໂດຍທົ່ວໄປບໍ່ໄດ້ພິຈາລະນາເປັນຄໍາຖາມ, ແຕ່ວ່າ
ບາງຄັ້ງທ່ານອາດຈະຕ້ອງການກວດເບິ່ງ; ຄົນອື່ນເຕືອນກ່ຽວກັບການກໍ່ສ້າງທີ່ເປັນ
ມີຄວາມຈໍາເປັນຫຼືຍາກທີ່ຈະຫຼີກເວັ້ນໃນບາງກໍລະນີ, ແລະບໍ່ມີວິທີງ່າຍໆທີ່ຈະດັດແປງ
ລະຫັດເພື່ອສະກັດກັ້ນການເຕືອນ. ບາງສ່ວນຂອງພວກມັນຖືກເປີດໃຊ້ໂດຍ -Wextra ແຕ່ຈໍານວນຫຼາຍຂອງພວກເຂົາ
ຕ້ອງໄດ້ຮັບການເປີດໃຊ້ເປັນສ່ວນບຸກຄົນ.

-Wextra
ນີ້ເຮັດໃຫ້ບາງທຸງເຕືອນໄພພິເສດທີ່ບໍ່ໄດ້ເປີດໃຊ້ໂດຍ - ຝາ. (ທາງເລືອກນີ້ໃຊ້
ຈະຖືກເອີ້ນ -W. ຊື່ເກົ່າແມ່ນຍັງສະຫນັບສະຫນູນ, ແຕ່ຊື່ໃຫມ່ແມ່ນຫຼາຍ
ອະທິບາຍ.)

- Wclobbered - ຮ່າງກາຍອ່ອນເພຍ -Wignored-qualifiers -Wmissing-field-initializers
-Wmissing-parameter-type (C ເທົ່ານັ້ນ) -Wold-style-ປະກາດ (C ເທົ່ານັ້ນ) -Woverride-init
-Wsign-ປຽບທຽບ -Wtype- limits - ປະກາດ -Wunused-ພາລາມິເຕີ (ພຽງແຕ່ກັບ - ບໍ່​ໄດ້​ນໍາ​ໃຊ້​ or
- ຝາ) -Wunused-but-set-parameter (ພຽງແຕ່ກັບ - ບໍ່​ໄດ້​ນໍາ​ໃຊ້​ or - ຝາ)

ທາງເລືອກ -Wextra ຍັງພິມຂໍ້ຄວາມເຕືອນສໍາລັບກໍລະນີຕໍ່ໄປນີ້:

· ຕົວຊີ້ຖືກປຽບທຽບກັບເລກສູນ <, <=, >, ຫຼື >=.

· (C++ ເທົ່ານັ້ນ) ຕົວນັບຈຳ ນວນ ແລະ ຜູ້ບໍ່ຈຳແນກທັງສອງປະກົດຢູ່ໃນເງື່ອນໄຂ
ການສະແດງອອກ.

· (C++ ເທົ່ານັ້ນ) ພື້ນຖານ virtual ທີ່ບໍ່ຊັດເຈນ.

· (C++ ເທົ່ານັ້ນ) ການສັ່ງຈອງອາເຣທີ່ໄດ້ຖືກປະກາດແລ້ວ ລົງທະບຽນ.

· (C++ ເທົ່ານັ້ນ) ເອົາທີ່ຢູ່ຂອງຕົວແປທີ່ໄດ້ຮັບການປະກາດ ລົງທະບຽນ.

· (C++ ເທົ່ານັ້ນ) ຫ້ອງຮຽນພື້ນຖານບໍ່ໄດ້ຖືກເລີ່ມຕົ້ນໃນຕົວສ້າງສຳເນົາຂອງຊັ້ນທີ່ມາຈາກ.

-Wchar-subscripts
ເຕືອນຖ້າຫາກວ່າ subscript array ມີປະເພດ "char". ນີ້ແມ່ນສາເຫດທົ່ວໄປຂອງຄວາມຜິດພາດ, ເປັນ
ຜູ້ຂຽນໂປລແກລມມັກຈະລືມວ່າປະເພດນີ້ຖືກເຊັນໃນບາງເຄື່ອງ. ການເຕືອນໄພນີ້ແມ່ນ
ເປີດໃຊ້ໂດຍ - ຝາ.

- ຄໍາເຫັນ
ເຕືອນທຸກຄັ້ງທີ່ລຳດັບຄຳເຫັນເລີ່ມຕົ້ນ /* ປາກົດຢູ່ໃນ a /* ຄໍາເຫັນ, ຫຼືທຸກຄັ້ງ a
Backslash-Newline ປະກົດຢູ່ໃນ a // ຄໍາເຫັນ. ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ.

-Wno- coverage-mismatch
ເຕືອນຖ້າຫາກວ່າໂປຣໄຟລ໌ຄໍາຄຶດຄໍາເຫັນບໍ່ກົງກັນໃນເວລາທີ່ການນໍາໃຊ້ -fprofile-ໃຊ້ ທາງເລືອກ. ຖ້າ ກ
ໄຟລ໌ແຫຼ່ງໄດ້ຖືກປ່ຽນລະຫວ່າງ -fprofile-gen ແລະ -fprofile-ໃຊ້, ໄຟລ໌ທີ່ມີ
ຄຳຕິຊົມໂປຣໄຟລ໌ບໍ່ສາມາດກົງກັບໄຟລ໌ຕົ້ນສະບັບໄດ້ ແລະ GCC ບໍ່ສາມາດໃຊ້ໂປຣໄຟລ໌ໄດ້
ຂໍ້​ມູນ​ຄໍາ​ຄຶດ​ຄໍາ​ເຫັນ​. ໂດຍຄ່າເລີ່ມຕົ້ນ, ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ງານ ແລະຖືກຖືວ່າເປັນຄວາມຜິດພາດ.
-Wno- coverage-mismatch ສາມາດຖືກນໍາໃຊ້ເພື່ອປິດການເຕືອນໄພຫຼື
-Wno-error= coverage-mismatch ສາມາດໃຊ້ເພື່ອປິດການໃຊ້ງານໄດ້. ການປິດໃຊ້ງານຄວາມຜິດພາດ
ສໍາລັບການເຕືອນນີ້ສາມາດສົ່ງຜົນໃຫ້ລະຫັດ optimized ບໍ່ດີແລະເປັນປະໂຫຍດພຽງແຕ່ໃນກໍລະນີຂອງ
ການ​ປ່ຽນ​ແປງ​ເລັກ​ນ້ອຍ​ຫຼາຍ​ເຊັ່ນ​ການ​ແກ້​ໄຂ bug ກັບ​ຖານ​ລະ​ຫັດ​ທີ່​ມີ​ຢູ່​ແລ້ວ​. ປິດການໃຊ້ງານຢ່າງສົມບູນ
ການເຕືອນໄພແມ່ນບໍ່ແນະນໍາ.

-Wno-cpp
(C, Objective-C, C++, Objective-C++ ແລະ Fortran ເທົ່ານັ້ນ)

ສະກັດກັ້ນຂໍ້ຄວາມເຕືອນທີ່ປ່ອຍອອກມາໂດຍຄໍາສັ່ງ "#warning".

- ການ​ສົ່ງ​ເສີມ​ສອງ​ຄັ້ງ​ (C, C++, Objective-C ແລະ Objective-C++ ເທົ່ານັ້ນ)
ໃຫ້ຄໍາເຕືອນເມື່ອມູນຄ່າຂອງປະເພດ "ເລື່ອນ" ຖືກສົ່ງເສີມເປັນ "ສອງເທົ່າ". CPUs
ດ້ວຍ 32-bit "single-precision" ຫນ່ວຍບໍລິການຈຸດລອຍຕົວປະຕິບັດ "float" ໃນຮາດແວ,
ແຕ່ເຮັດຕາມ "ສອງ" ໃນຊອບແວ. ໃນເຄື່ອງດັ່ງກ່າວ, ເຮັດການຄິດໄລ່ການນໍາໃຊ້
ຄ່າ "ສອງເທົ່າ" ແມ່ນລາຄາແພງກວ່າຫຼາຍເນື່ອງຈາກຄ່າໃຊ້ຈ່າຍເກີນທີ່ຕ້ອງການສໍາລັບຊອບແວ
emulation.

ມັນງ່າຍທີ່ຈະເຮັດການຄິດໄລ່ໂດຍບັງເອີນດ້ວຍ "ສອງ" ເພາະວ່າຈຸດລອຍ
ຕົວຫນັງສືແມ່ນ implicitly ຂອງປະເພດ "double". ຕົວຢ່າງ, ໃນ:

ພື້ນທີ່ເລື່ອນ (ລັດສະໝີລອຍ)
{
ກັບຄືນ 3.14159 * radius * radius;
}

compiler ຈະປະຕິບັດການຄິດໄລ່ທັງຫມົດດ້ວຍ "double" ເນື່ອງຈາກວ່າການເລື່ອນໄດ້.
ຈຸດທີ່ຮູ້ຫນັງສືແມ່ນ "ສອງ".

-Wformat
ກວດເບິ່ງການໂທຫາ "printf" ແລະ "scanf", ແລະອື່ນໆ, ເພື່ອໃຫ້ແນ່ໃຈວ່າການໂຕ້ຖຽງທີ່ສະຫນອງ.
ມີ​ປະ​ເພດ​ທີ່​ເຫມາະ​ສົມ​ກັບ​ສະ​ຕ​ຣິງ​ຮູບ​ແບບ​ທີ່​ລະ​ບຸ​ໄວ້​, ແລະ​ວ່າ​ການ​ປ່ຽນ​ແປງ​
ທີ່ລະບຸໄວ້ໃນສະຕຣິງຮູບແບບເຮັດໃຫ້ຄວາມຮູ້ສຶກ. ນີ້ປະກອບມີຫນ້າທີ່ມາດຕະຖານ, ແລະ
ອື່ນໆທີ່ລະບຸໄວ້ໃນຄຸນລັກສະນະຮູບແບບ, ໃນ "printf", "scanf", "strftime" ແລະ
"strfmon" (ສ່ວນຂະຫຍາຍ X/Open, ບໍ່ແມ່ນຢູ່ໃນມາດຕະຖານ C) ຄອບຄົວ (ຫຼືເປົ້າຫມາຍອື່ນໆ-
ຄອບຄົວສະເພາະ). ຟັງຊັນໃດຖືກກວດສອບໂດຍບໍ່ມີຄຸນລັກສະນະຂອງຮູບແບບ
ກໍານົດແມ່ນຂຶ້ນກັບສະບັບມາດຕະຖານທີ່ເລືອກ, ແລະການກວດສອບຫນ້າທີ່ດັ່ງກ່າວ
ໂດຍ​ບໍ່​ມີ​ຄຸນ​ສົມ​ບັດ​ທີ່​ລະ​ບຸ​ໄວ້​ແມ່ນ​ປິດ​ການ​ໃຊ້​ງານ​ໂດຍ​ - freestanding or -fno-builtin.

ຮູບແບບຕ່າງໆໄດ້ຖືກກວດສອບຕໍ່ກັບລັກສະນະຮູບແບບທີ່ຮອງຮັບໂດຍ GNU libc ເວີຊັນ 2.2.
ເຫຼົ່ານີ້ລວມມີຄຸນສົມບັດ ISO C90 ແລະ C99 ທັງໝົດ, ເຊັ່ນດຽວກັນກັບຄຸນສົມບັດຈາກ Single Unix
ຂໍ້ມູນຈໍາເພາະແລະບາງສ່ວນຂະຫຍາຍ BSD ແລະ GNU. ການປະຕິບັດຫ້ອງສະຫມຸດອື່ນໆອາດຈະບໍ່
ສະຫນັບສະຫນູນລັກສະນະເຫຼົ່ານີ້ທັງຫມົດ; GCC ບໍ່ຮອງຮັບການເຕືອນກ່ຽວກັບຄຸນສົມບັດທີ່ເກີນກວ່າ
ຂໍ້ຈໍາກັດຂອງຫ້ອງສະຫມຸດສະເພາະ. ຢ່າງໃດກໍຕາມ, ຖ້າ - pedantic ຖືກນໍາໃຊ້ກັບ -Wformat,
ການ​ເຕືອນ​ໄພ​ຈະ​ໄດ້​ຮັບ​ການ​ໃຫ້​ກ່ຽວ​ກັບ​ລັກ​ສະ​ນະ​ຮູບ​ແບບ​ທີ່​ບໍ່​ໄດ້​ຢູ່​ໃນ​ສະ​ບັບ​ມາດ​ຕະ​ຖານ​ທີ່​ເລືອກ (ແຕ່​
ບໍ່ແມ່ນສໍາລັບຮູບແບບ "strfmon", ເພາະວ່າພວກມັນບໍ່ຢູ່ໃນມາດຕະຖານ C).

ນັບຕັ້ງແຕ່ -Wformat ຍັງກວດສອບການໂຕ້ແຍ້ງຮູບແບບ null ສໍາລັບຫຼາຍຫນ້າທີ່, -Wformat
ຍັງໝາຍເຖິງ -Wnonnull.

-Wformat ແມ່ນລວມຢູ່ໃນ - ຝາ. ສໍາລັບການຄວບຄຸມເພີ່ມເຕີມຕໍ່ກັບບາງດ້ານຂອງການກວດສອບຮູບແບບ,
ທາງເລືອກ -Wformat-y2k, -Wno-format-extra-args, -Wno-format-zero-length,
-Wformat-nonliteral, -Wformat ຄວາມ​ປອດ​ໄພ​, ແລະ -Wformat=2 ສາມາດໃຊ້ໄດ້, ແຕ່ບໍ່ແມ່ນ
ລວມຢູ່ໃນ - ຝາ.

ຫມາຍ​ເຫດ​: ໃນ Ubuntu 8.10 ແລະ​ສະ​ບັບ​ຕໍ່​ມາ​ທາງ​ເລືອກ​ນີ້​ແມ່ນ​ໄດ້​ຮັບ​ການ​ເປີດ​ນໍາ​ໃຊ້​ໂດຍ​ຄ່າ​ເລີ່ມ​ຕົ້ນ​ສໍາ​ລັບ C​, C ++​,
ObjC, ObjC++. ເພື່ອປິດການໃຊ້ງານ, ໃຊ້ -Wformat=0.

-Wformat-y2k
If -Wformat ຖືກລະບຸໄວ້, ຍັງເຕືອນກ່ຽວກັບຮູບແບບ "strftime" ທີ່ອາດຈະໃຫ້ຜົນໄດ້ຮັບພຽງແຕ່ a
ປີສອງຕົວເລກ.

-Wno-format-contains-nul
If -Wformat ຖືກລະບຸໄວ້, ຢ່າເຕືອນກ່ຽວກັບຮູບແບບສະຕຣິງທີ່ມີ NUL bytes.

-Wno-format-extra-args
If -Wformat ໄດ້ຖືກລະບຸໄວ້, ຢ່າເຕືອນກ່ຽວກັບການໂຕ້ແຍ້ງເກີນເປັນ "printf" ຫຼື "scanf"
ການ​ທໍາ​ງານ​ຮູບ​ແບບ​. ມາດຕະຖານ C ກໍານົດວ່າການໂຕ້ຖຽງດັ່ງກ່າວຖືກລະເລີຍ.

ບ່ອນທີ່ອາກິວເມັນທີ່ບໍ່ໄດ້ໃຊ້ແມ່ນຢູ່ລະຫວ່າງອາກິວເມັນທີ່ໃຊ້ແລ້ວທີ່ລະບຸໄວ້ກັບ $
ຕົວເລກ operand ສະເພາະ, ປົກກະຕິແລ້ວການເຕືອນໄພແມ່ນຍັງໄດ້ຮັບ, ນັບຕັ້ງແຕ່
ການປະຕິບັດບໍ່ສາມາດຮູ້ວ່າປະເພດໃດທີ່ຈະສົ່ງໄປຫາ "va_arg" ເພື່ອຂ້າມສິ່ງທີ່ບໍ່ໄດ້ໃຊ້
ການໂຕ້ຖຽງ. ຢ່າງໃດກໍຕາມ, ໃນກໍລະນີຂອງຮູບແບບ "scanf", ທາງເລືອກນີ້ຈະສະກັດກັ້ນ
ເຕືອນຖ້າການໂຕ້ຖຽງທີ່ບໍ່ໄດ້ໃຊ້ແມ່ນຕົວຊີ້ທັງຫມົດ, ນັບຕັ້ງແຕ່ການກໍານົດ Unix ດຽວ
ເວົ້າວ່າການໂຕ້ຖຽງທີ່ບໍ່ໄດ້ໃຊ້ດັ່ງກ່າວໄດ້ຖືກອະນຸຍາດ.

-Wno-format-zero-length
If -Wformat ຖືກລະບຸໄວ້, ຢ່າເຕືອນກ່ຽວກັບຮູບແບບຄວາມຍາວສູນ. ມາດຕະຖານ C
ລະບຸວ່າຮູບແບບຄວາມຍາວສູນແມ່ນອະນຸຍາດ.

-Wformat-nonliteral
If -Wformat ຖືກລະບຸໄວ້, ຍັງເຕືອນຖ້າຮູບແບບສະຕຣິງບໍ່ແມ່ນຕົວໜັງສື ແລະ
ດັ່ງນັ້ນບໍ່ສາມາດກວດສອບໄດ້, ເວັ້ນເສຍແຕ່ວ່າຟັງຊັນຮູບແບບຈະໃຊ້ arguments ຮູບແບບຂອງມັນ
"va_list".

-Wformat ຄວາມ​ປອດ​ໄພ​
If -Wformat ໄດ້ຖືກລະບຸໄວ້, ຍັງເຕືອນກ່ຽວກັບການໃຊ້ຟັງຊັນຮູບແບບທີ່ເປັນຕົວແທນ
ບັນຫາຄວາມປອດໄພທີ່ເປັນໄປໄດ້. ໃນປັດຈຸບັນ, ນີ້ເຕືອນກ່ຽວກັບການໂທຫາ "printf" ແລະ
"scanf" ຟັງຊັນທີ່ສະຕຣິງຮູບແບບບໍ່ແມ່ນສະຕຣິງທີ່ຮູ້ຫນັງສືແລະບໍ່ມີ
ຮູບແບບການໂຕ້ຖຽງ, ເຊັ່ນດຽວກັບ "printf (foo);". ນີ້ອາດຈະເປັນຂຸມຄວາມປອດໄພຖ້າຫາກວ່າຮູບແບບ
ສະຕຣິງມາຈາກການປ້ອນຂໍ້ມູນທີ່ບໍ່ເຊື່ອຖື ແລະປະກອບດ້ວຍ %n. (ປະຈຸບັນນີ້ແມ່ນຊຸດຍ່ອຍຂອງສິ່ງທີ່
-Wformat-nonliteral ເຕືອນກ່ຽວກັບ, ແຕ່ໃນຄໍາເຕືອນໃນອະນາຄົດອາດຈະຖືກເພີ່ມໃສ່
-Wformat ຄວາມ​ປອດ​ໄພ​ ທີ່ບໍ່ໄດ້ລວມຢູ່ໃນ -Wformat-nonliteral.)

ຫມາຍ​ເຫດ​: ໃນ Ubuntu 8.10 ແລະ​ສະ​ບັບ​ຕໍ່​ມາ​ທາງ​ເລືອກ​ນີ້​ແມ່ນ​ໄດ້​ຮັບ​ການ​ເປີດ​ນໍາ​ໃຊ້​ໂດຍ​ຄ່າ​ເລີ່ມ​ຕົ້ນ​ສໍາ​ລັບ C​, C ++​,
ObjC, ObjC++. ເພື່ອປິດການໃຊ້ງານ, ໃຊ້ -Wno-format-ຄວາມປອດໄພ, ຫຼືປິດການເຕືອນຮູບແບບທັງຫມົດ
ກັບ -Wformat=0. ເພື່ອເຮັດໃຫ້ການເຕືອນຄວາມປອດໄພຮູບແບບຕາຍ, ໃຫ້ລະບຸ
-Werror=format-security.

-Wformat=2
ເປີດນໍາໃຊ້ -Wformat ບວກກັບການກວດສອບຮູບແບບບໍ່ໄດ້ລວມຢູ່ໃນ -Wformat. ໃນປັດຈຸບັນເທົ່າກັບ
-Wformat -Wformat-nonliteral -Wformat ຄວາມ​ປອດ​ໄພ​ -Wformat-y2k.

-Wnonnull
ເຕືອນກ່ຽວກັບການຖ່າຍທອດຕົວຊີ້ null ສໍາລັບອາກິວເມັນທີ່ໝາຍວ່າຕ້ອງການຄ່າທີ່ບໍ່ແມ່ນ null
ໂດຍຄຸນສົມບັດຂອງຟັງຊັນ "nonnull".

-Wnonnull ແມ່ນລວມຢູ່ໃນ - ຝາ ແລະ -Wformat. ມັນສາມາດໄດ້ຮັບການພິການດ້ວຍ -Wno-nonnull
ທາງເລືອກ.

- ວິນ​ຍານ​ຕົນ​ເອງ​ (C, C++, Objective-C ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນກ່ຽວກັບຕົວແປ uninitialized ທີ່ເລີ່ມຕົ້ນດ້ວຍຕົວມັນເອງ. ຫມາຍເຫດນີ້
ທາງ​ເລືອກ​ພຽງ​ແຕ່​ສາ​ມາດ​ຖືກ​ນໍາ​ໃຊ້​ກັບ​ - ປະກາດ ທາງເລືອກ.

ຕົວຢ່າງ, GCC ຈະເຕືອນກ່ຽວກັບ "i" ທີ່ຖືກ uninitialized ໃນ snippet ຕໍ່ໄປນີ້ເທົ່ານັ້ນ
ໃນເວລາທີ່ - ວິນ​ຍານ​ຕົນ​ເອງ​ ໄດ້​ລະ​ບຸ​ໄວ້​:

int f()
{
int i = i;
ກັບຄືນ i;
}

-Wimplicit-int (C ແລະ Objective-C ເທົ່ານັ້ນ)
ເຕືອນເມື່ອການປະກາດບໍ່ໄດ້ລະບຸປະເພດ. ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ.

-Wimplicit-function-ປະກາດ (C ແລະ Objective-C ເທົ່ານັ້ນ)
ໃຫ້ຄໍາເຕືອນທຸກຄັ້ງທີ່ຟັງຊັນຖືກໃຊ້ກ່ອນທີ່ຈະຖືກປະກາດ. ໃນໂຫມດ C99
(-std=c99 or -std=gnu99), ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນແລະມັນຖືກສ້າງເປັນ
ຄວາມ​ຜິດ​ພາດ​ໂດຍ -pedantic ຜິດ​ພາດ​. ການເຕືອນໄພນີ້ຍັງຖືກເປີດໃຊ້ໂດຍ - ຝາ.

- Wimplicit (C ແລະ Objective-C ເທົ່ານັ້ນ)
ຄື​ກັນ​ກັບ -Wimplicit-int ແລະ -Wimplicit-function-ປະກາດ. ການເຕືອນນີ້ຖືກເປີດໃຊ້
by - ຝາ.

-Wignored-qualifiers (C ແລະ C++ ເທົ່ານັ້ນ)
ເຕືອນຖ້າປະເພດກັບຄືນຂອງຟັງຊັນມີຄຸນສົມບັດປະເພດເຊັ່ນ "const". ສໍາລັບ ISO C
ຄຸນສົມບັດປະເພດດັ່ງກ່າວບໍ່ມີຜົນ, ເພາະວ່າຄ່າທີ່ສົ່ງຄືນໂດຍຟັງຊັນບໍ່ແມ່ນ
ມູນຄ່າ. ສໍາລັບ C ++, ການເຕືອນແມ່ນປ່ອຍອອກມາພຽງແຕ່ສໍາລັບປະເພດ scalar ຫຼື "void". ISO C
ຫ້າມປະເພດການສົ່ງຄືນ "void" ທີ່ມີຄຸນວຸດທິໃນຄໍານິຍາມຂອງຫນ້າທີ່, ດັ່ງນັ້ນປະເພດການກັບຄືນດັ່ງກ່າວ
ໄດ້ຮັບການເຕືອນສະເຫມີເຖິງແມ່ນວ່າບໍ່ມີທາງເລືອກນີ້.

ການເຕືອນໄພນີ້ຍັງຖືກເປີດໃຊ້ໂດຍ -Wextra.

- ຜູ້ຍິງ
ເຕືອນຖ້າຫາກວ່າປະເພດຂອງ ຕົ້ນຕໍ ສົງໃສ. ຕົ້ນຕໍ ຄວນຈະເປັນຫນ້າທີ່ກັບພາຍນອກ
linkage, ກັບຄືນ int, ເອົາບໍ່ວ່າຈະເປັນສູນ arguments, ສອງ, ຫຼືສາມ arguments ຂອງ
ປະເພດທີ່ເຫມາະສົມ. ການເຕືອນນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນໃນ C++ ແລະຖືກເປີດໃຊ້ໂດຍທັງສອງ
- ຝາ or - pedantic.

-Wmissing-braces
ເຕືອນຖ້າຫາກວ່າການລວບລວມຫຼືການເລີ່ມຕົ້ນຂອງສະຫະພັນແມ່ນບໍ່ໄດ້ຢູ່ໃນວົງເລັບຢ່າງເຕັມສ່ວນ. ໃນຕໍ່ໄປນີ້
ຕົວຢ່າງ, ຕົວເລີ່ມຕົ້ນສໍາລັບ a ບໍ່ໄດ້ຢູ່ໃນວົງເລັບຢ່າງເຕັມສ່ວນ, ແຕ່ວ່າສໍາລັບ b ແມ່ນຢ່າງເຕັມສ່ວນ
ວົງເລັບ.

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

ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ.

-Wmissing-include-dirs (C, C++, Objective-C ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນ ຖ້າ ຫາກ ວ່າ ຜູ້ ໃຊ້ ສະ ຫນອງ ໃຫ້ ປະ ກອບ ມີ directory ບໍ່ ມີ.

-Wparentheses
ເຕືອນຖ້າວົງເລັບຖືກລະເວັ້ນໃນບາງສະພາບການ, ເຊັ່ນ: ເມື່ອມີ
ການມອບໝາຍໃນບໍລິບົດທີ່ຄາດການຄ່າຄວາມຈິງ, ຫຼືເມື່ອຕົວປະຕິບັດການຖືກວາງໄວ້
ຄົນກ່ອນໜ້ານັ້ນມັກສັບສົນ.

ຍັງເຕືອນຖ້າຫາກວ່າການປຽບທຽບເຊັ່ນ: x<=y<=z ປະກົດ; ນີ້ແມ່ນເທົ່າກັບ (x<=y ? 1 : 0)
<= z, ເຊິ່ງເປັນການຕີຄວາມໝາຍທີ່ແຕກຕ່າງຈາກການໝາຍເລກຄະນິດສາດທຳມະດາ.

ນອກຈາກນີ້ຍັງເຕືອນກ່ຽວກັບການກໍ່ສ້າງທີ່ອາດຈະສັບສົນກັບຄໍາວ່າ "ຖ້າ" ເປັນ
ສາຂາ "ອື່ນ" ເປັນ. ນີ້ແມ່ນຕົວຢ່າງຂອງກໍລະນີດັ່ງກ່າວ:

{
ຖ້າ (ກ)
ຖ້າ (ຂ)
foo();
ອື່ນ
ບາ ();
}

ໃນ C/C ++, ທຸກໆສາຂາ "ອື່ນ" ເປັນຂອງຂໍ້ຄວາມ "ຖ້າ" ທີ່ເປັນໄປໄດ້, ເຊິ່ງ
ໃນຕົວຢ່າງນີ້ແມ່ນ "ຖ້າ (b)". ນີ້ມັກຈະບໍ່ແມ່ນສິ່ງທີ່ນັກຂຽນໂປລແກລມຄາດໄວ້, ເປັນ
ສະແດງໃຫ້ເຫັນໃນຕົວຢ່າງຂ້າງເທິງໂດຍການຫຍໍ້ຫນ້າໂປລແກລມເລືອກ. ເມື່ອມີ
ທ່າແຮງສໍາລັບຄວາມສັບສົນນີ້, GCC ຈະອອກຄໍາເຕືອນເມື່ອທຸງນີ້ແມ່ນ
ລະບຸ. ເພື່ອລົບລ້າງການເຕືອນ, ເພີ່ມວົງເລັບທີ່ຊັດເຈນປະມານ "ຖ້າ" ພາຍໃນທີ່ສຸດ.
ຖະແຫຼງການດັ່ງນັ້ນບໍ່ມີທາງທີ່ "ອື່ນ" ສາມາດເປັນຂອງ "ຖ້າ". ໄດ້
ລະຫັດຜົນໄດ້ຮັບຈະມີລັກສະນະນີ້:

{
ຖ້າ (ກ)
{
ຖ້າ (ຂ)
foo();
ອື່ນ
ບາ ();
}
}

ນອກຈາກນີ້ຍັງເຕືອນສໍາລັບການນໍາໃຊ້ອັນຕະລາຍຂອງ ?: ກັບ omitted operand ກາງ GNU extension. ເມື່ອ​ໃດ​
ເງື່ອນໄຂໃນ ?: operator ແມ່ນການສະແດງອອກ boolean ມູນຄ່າທີ່ຖືກຍົກເລີກຈະເປັນ
1. ເລື້ອຍໆຜູ້ໃຊ້ຄາດຫວັງວ່າມັນເປັນມູນຄ່າທີ່ຄິດໄລ່ພາຍໃນເງື່ອນໄຂ
ການສະແດງອອກແທນ.

ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ.

- ລໍາດັບຈຸດ
ເຕືອນກ່ຽວກັບລະຫັດທີ່ອາດມີ semantics ບໍ່ໄດ້ກໍານົດເນື່ອງຈາກການລະເມີດລໍາດັບ
ກົດລະບຽບຈຸດໃນມາດຕະຖານ C ແລະ C ++.

ມາດຕະຖານ C ແລະ C ++ ກໍານົດຄໍາສັ່ງທີ່ສະແດງອອກໃນໂຄງການ C / C ++
ການປະເມີນໃນແງ່ຂອງ ລໍາດັບ ຈຸດ, ເຊິ່ງເປັນຕົວແທນຂອງຄໍາສັ່ງບາງສ່ວນລະຫວ່າງ
ການ​ປະ​ຕິ​ບັດ​ຂອງ​ພາກ​ສ່ວນ​ຂອງ​ໂຄງ​ການ​: ຜູ້​ທີ່​ປະ​ຕິ​ບັດ​ກ່ອນ​ທີ່​ຈຸດ​ລໍາ​ດັບ​, ແລະ​ເຫຼົ່າ​ນັ້ນ​
ປະ​ຕິ​ບັດ​ຫຼັງ​ຈາກ​ນັ້ນ​. ເຫຼົ່ານີ້ເກີດຂຶ້ນຫຼັງຈາກການປະເມີນຜົນຂອງການສະແດງອອກຢ່າງເຕັມທີ່ (ຫນຶ່ງທີ່
ບໍ່ແມ່ນສ່ວນຫນຶ່ງຂອງການສະແດງອອກທີ່ໃຫຍ່ກວ່າ), ຫຼັງຈາກການປະເມີນຜົນຂອງ operand ທໍາອິດຂອງ a
"&&", "||", "? :" ຫຼື "," (ເຄື່ອງໝາຍຈຸດ), ກ່ອນທີ່ຈະເອີ້ນຟັງຊັນໃດໜຶ່ງ (ແຕ່ຫຼັງຈາກ
ການ​ປະ​ເມີນ​ຜົນ​ຂອງ​ການ​ໂຕ້​ຖຽງ​ຂອງ​ຕົນ​ແລະ​ການ​ສະ​ແດງ​ອອກ​ທີ່​ລະ​ບຸ​ຫນ້າ​ທີ່​ເອີ້ນ​ວ່າ​)​, ແລະ​ໃນ​
ບາງບ່ອນ. ນອກເຫນືອຈາກການສະແດງອອກໂດຍກົດລະບຽບຈຸດລໍາດັບ, ຄໍາສັ່ງ
ຂອງການປະເມີນ subexpressions ຂອງການສະແດງອອກແມ່ນບໍ່ໄດ້ລະບຸໄວ້. ກົດລະບຽບທັງຫມົດເຫຼົ່ານີ້
ອະທິບາຍພຽງແຕ່ຄໍາສັ່ງບາງສ່ວນແທນທີ່ຈະເປັນຄໍາສັ່ງທັງຫມົດ, ເນື່ອງຈາກວ່າ, ສໍາລັບການຍົກຕົວຢ່າງ, ຖ້າຫາກວ່າສອງ
ຫນ້າທີ່ຖືກເອີ້ນວ່າພາຍໃນຫນຶ່ງສະແດງອອກທີ່ບໍ່ມີຈຸດລໍາດັບລະຫວ່າງພວກມັນ, the
ຄໍາສັ່ງໃນຫນ້າທີ່ຖືກເອີ້ນວ່າບໍ່ໄດ້ລະບຸ. ຢ່າງໃດກໍຕາມ, ມາດຕະຖານ
ຄະນະກໍາມະການໄດ້ຕັດສິນວ່າການໂທຫາຫນ້າທີ່ບໍ່ຊ້ໍາກັນ.

ມັນບໍ່ໄດ້ຖືກລະບຸໃນເວລາທີ່ລະຫວ່າງການດັດແກ້ຈຸດລໍາດັບກັບຄ່າຂອງ
ວັດຖຸມີຜົນ. ບັນດາໂຄງການທີ່ມີພຶດຕິກໍາຂຶ້ນກັບນີ້ ມີພຶດຕິກໍາທີ່ບໍ່ໄດ້ກໍານົດ;
ມາດຕະຖານ C ແລະ C ++ ລະບຸວ່າ "ລະຫວ່າງລໍາດັບທີ່ຜ່ານມາແລະຕໍ່ໄປຊີ້ໃຫ້ເຫັນເຖິງ
ວັດ​ຖຸ​ຈະ​ມີ​ມູນ​ຄ່າ​ທີ່​ເກັບ​ຮັກ​ສາ​ໄວ້​ຂອງ​ຕົນ​ໃນ​ຫຼາຍ​ທີ່​ສຸດ​ຄັ້ງ​ດຽວ​ໂດຍ​ການ​ປະ​ເມີນ​ຜົນ​ຂອງ​
ການສະແດງອອກ. ນອກຈາກນັ້ນ, ມູນຄ່າກ່ອນຫນ້າຈະຖືກອ່ານພຽງແຕ່ເພື່ອກໍານົດມູນຄ່າທີ່ຈະ
ຈະຖືກເກັບຮັກສາໄວ້.". ຖ້າໂຄງການໃດນຶ່ງລະເມີດກົດລະບຽບເຫຼົ່ານີ້, ຜົນໄດ້ຮັບໂດຍສະເພາະ
ການປະຕິບັດແມ່ນບໍ່ສາມາດຄາດເດົາໄດ້ທັງຫມົດ.

ຕົວຢ່າງຂອງລະຫັດທີ່ມີພຶດຕິກໍາທີ່ບໍ່ໄດ້ກໍານົດແມ່ນ "a = a++;", "a[n] = b[n++]" ແລະ "a[i++] =
i;". ບາງກໍລະນີທີ່ສັບສົນຫຼາຍບໍ່ໄດ້ຖືກວິນິດໄສໂດຍທາງເລືອກນີ້, ແລະມັນອາດຈະໃຫ້
ບາງຄັ້ງຜົນໄດ້ຮັບໃນທາງບວກທີ່ບໍ່ຖືກຕ້ອງ, ແຕ່ໂດຍທົ່ວໄປແລ້ວມັນໄດ້ຖືກພົບເຫັນວ່າມີຜົນດີຢູ່
ກວດພົບບັນຫາແບບນີ້ຢູ່ໃນບັນດາໂຄງການ.

ມາດຕະຖານແມ່ນຄໍາສັບທີ່ສັບສົນ, ດັ່ງນັ້ນຈຶ່ງມີການໂຕ້ວາທີບາງຢ່າງກ່ຽວກັບຄວາມຊັດເຈນ
ຄວາມຫມາຍຂອງກົດລະບຽບຈຸດລໍາດັບໃນກໍລະນີຂອງ subtle. ການ​ເຊື່ອມ​ຕໍ່​ກັບ​ການ​ສົນ​ທະ​ນາ​ຂອງ​
ບັນຫາ, ລວມທັງຄໍານິຍາມຢ່າງເປັນທາງການທີ່ສະເຫນີ, ອາດຈະພົບຢູ່ໃນຫນ້າອ່ານ GCC,
ຢູ່http://gcc.gnu.org/readings.html>.

ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ ສໍາລັບ C ແລະ C ++.

- ປະ​ເພດ Wreturn​
ເຕືອນທຸກຄັ້ງທີ່ຟັງຊັນຖືກກຳນົດດ້ວຍປະເພດຜົນຕອບແທນທີ່ເປັນຄ່າເລີ່ມຕົ້ນເປັນ "int". ນອກຈາກນີ້
ເຕືອນກ່ຽວກັບຄໍາຖະແຫຼງທີ່ "ກັບຄືນ" ທີ່ບໍ່ມີຄ່າກັບຄືນໃນຟັງຊັນທີ່ມີປະເພດຜົນຕອບແທນ
ບໍ່ແມ່ນ "void" (ການຫຼຸດລົງອອກຈາກການສິ້ນສຸດຂອງຮ່າງກາຍຂອງຫນ້າທີ່ແມ່ນຖືວ່າກັບຄືນມາ
ໂດຍບໍ່ມີຄ່າ), ແລະກ່ຽວກັບຄໍາຖະແຫຼງ "ກັບຄືນ" ດ້ວຍການສະແດງອອກໃນຫນ້າທີ່
ປະເພດການກັບຄືນຂອງມັນແມ່ນ "ໂມ້".

ສໍາລັບ C ++, ຟັງຊັນທີ່ບໍ່ມີປະເພດກັບຄືນສະເຫມີຜະລິດຂໍ້ຄວາມວິນິດໄສ, ເຖິງແມ່ນວ່າ
ໃນເວລາທີ່ -Wno-return-type ຖືກກໍານົດ. ຂໍ້ຍົກເວັ້ນພຽງແຕ່ ຕົ້ນຕໍ ແລະ ໜ້າ ທີ່
ກໍານົດຢູ່ໃນສ່ວນຫົວຂອງລະບົບ.

ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ.

- ສະຫວິດ
ເຕືອນທຸກຄັ້ງທີ່ຖະແຫຼງການ "ສະຫຼັບ" ມີດັດຊະນີຂອງປະເພດການນັບ ແລະຂາດ "ກໍລະນີ"
ສໍາລັບຫນຶ່ງຫຼືຫຼາຍກວ່າລະຫັດທີ່ມີຊື່ຂອງການນັບຈໍານວນນັ້ນ. (ການປະກົດຕົວຂອງ "ຄ່າເລີ່ມຕົ້ນ"
ປ້າຍຊື່ປ້ອງກັນການເຕືອນນີ້.) "ກໍລະນີ" ປ້າຍຊື່ຢູ່ນອກຂອບເຂດການນັບ
ກະຕຸ້ນເຕືອນເມື່ອທາງເລືອກນີ້ຖືກນໍາໃຊ້ (ເຖິງແມ່ນວ່າມີປ້າຍຊື່ "ຄ່າເລີ່ມຕົ້ນ"). ນີ້
ການເຕືອນໄພຖືກເປີດໃຊ້ໂດຍ - ຝາ.

-Wswitch-default
ເຕືອນທຸກຄັ້ງທີ່ຂໍ້ຄວາມ "ສະຫຼັບ" ບໍ່ມີກໍລະນີ "ເລີ່ມຕົ້ນ".

-Wwwitch-enum
ເຕືອນທຸກຄັ້ງທີ່ຖະແຫຼງການ "ສະຫຼັບ" ມີດັດຊະນີຂອງປະເພດການນັບ ແລະຂາດ "ກໍລະນີ"
ສໍາລັບຫນຶ່ງຫຼືຫຼາຍກວ່າລະຫັດທີ່ມີຊື່ຂອງການນັບຈໍານວນນັ້ນ. ປ້າຍ "ກໍລະນີ" ຢູ່ນອກ
ຊ່ວງການນັບເລກຍັງເຮັດໃຫ້ເກີດການເຕືອນເມື່ອຕົວເລືອກນີ້ຖືກໃຊ້. ຄວາມແຕກຕ່າງພຽງແຕ່
ລະຫວ່າງ - ສະຫວິດ ແລະທາງເລືອກນີ້ແມ່ນວ່າທາງເລືອກນີ້ໃຫ້ຄໍາເຕືອນກ່ຽວກັບການລະເວັ້ນ
ລະຫັດ enumeration ເຖິງແມ່ນວ່າຈະມີປ້າຍ "ຄ່າເລີ່ມຕົ້ນ".

-Wsync-nand (C ແລະ C++ ເທົ່ານັ້ນ)
ເຕືອນເມື່ອຟັງຊັນໃນຕົວ "__sync_fetch_and_nand" ແລະ "__sync_nand_and_fetch"
ໃຊ້. ໜ້າທີ່ເຫຼົ່ານີ້ໄດ້ປ່ຽນຄວາມໝາຍໃນ GCC 4.4.

-Wtrigraphs
ເຕືອນຖ້າພົບ trigraphs ທີ່ອາດຈະປ່ຽນຄວາມຫມາຍຂອງໂຄງການ
(trigraphs ພາຍໃນຄໍາເຫັນບໍ່ໄດ້ຖືກເຕືອນກ່ຽວກັບ). ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ.

-Wunused-but-set-parameter
ເຕືອນທຸກຄັ້ງທີ່ພາຣາມິເຕີຟັງຊັນຖືກມອບໝາຍໃຫ້, ແຕ່ບໍ່ຖືກໃຊ້ (ນອກເໜືອໄປຈາກ
ຖະ​ແຫຼງ​ການ​ຂອງ​ຕົນ).

ເພື່ອສະກັດກັ້ນການເຕືອນໄພນີ້, ໃຫ້ໃຊ້ ບໍ່ໃຊ້ attribute

ການເຕືອນໄພນີ້ຍັງຖືກເປີດໃຊ້ໂດຍ - ບໍ່​ໄດ້​ນໍາ​ໃຊ້​ ພ້ອມດ້ວຍ -Wextra.

-Wunused-but-set-variable
ເຕືອນທຸກຄັ້ງທີ່ຕົວແປທ້ອງຖິ່ນຖືກມອບໝາຍໃຫ້, ແຕ່ຖ້າບໍ່ດັ່ງນັ້ນບໍ່ໄດ້ໃຊ້ (ນອກຈາກມັນ
ປະກາດ). ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ.

ເພື່ອສະກັດກັ້ນການເຕືອນໄພນີ້, ໃຫ້ໃຊ້ ບໍ່ໃຊ້ attribute

ການເຕືອນໄພນີ້ຍັງຖືກເປີດໃຊ້ໂດຍ - ບໍ່​ໄດ້​ນໍາ​ໃຊ້​, ເຊິ່ງຖືກເປີດໃຊ້ໂດຍ - ຝາ.

-Wunused-function
ເຕືອນທຸກຄັ້ງທີ່ຟັງຊັນສະຖິດຖືກປະກາດແຕ່ບໍ່ໄດ້ກຳນົດ ຫຼືເປັນສະຖິດທີ່ບໍ່ຢູ່ໃນແຖວ
ຟັງຊັນບໍ່ໄດ້ໃຊ້. ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ.

-Wunused-label
ເຕືອນທຸກຄັ້ງທີ່ປ້າຍຖືກປະກາດແຕ່ບໍ່ໄດ້ໃຊ້. ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ.

ເພື່ອສະກັດກັ້ນການເຕືອນໄພນີ້, ໃຫ້ໃຊ້ ບໍ່ໃຊ້ attribute

-Wunused-local-typedefs (C, Objective-C, C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນໃນເວລາທີ່ typedef ທີ່ກໍານົດຢູ່ໃນທ້ອງຖິ່ນໃນຟັງຊັນບໍ່ຖືກນໍາໃຊ້.

-Wunused-ພາລາມິເຕີ
ເຕືອນທຸກຄັ້ງທີ່ພາຣາມິເຕີຟັງຊັນບໍ່ໄດ້ໃຊ້ນອກຈາກການປະກາດຂອງມັນ.

ເພື່ອສະກັດກັ້ນການເຕືອນໄພນີ້, ໃຫ້ໃຊ້ ບໍ່ໃຊ້ attribute

-Wno-unused-ຜົນ
ຢ່າເຕືອນຖ້າຜູ້ໂທຂອງຟັງຊັນທີ່ຖືກຫມາຍດ້ວຍຄຸນລັກສະນະ "warn_unused_result" ເຮັດ.
ບໍ່ໃຊ້ມູນຄ່າກັບຄືນຂອງມັນ. ຄ່າເລີ່ມຕົ້ນແມ່ນ -Wunused ຜົນ​ໄດ້​ຮັບ​.

-Wunused-variable
ເຕືອນທຸກຄັ້ງທີ່ຕົວແປທ້ອງຖິ່ນ ຫຼືຕົວແປສະຖິດທີ່ບໍ່ຄົງທີ່ຈະບໍ່ຖືກໃຊ້ນອກເໜືອໄປຈາກ
ການ​ປະ​ກາດ​ຂອງ​ຕົນ​. ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ.

ເພື່ອສະກັດກັ້ນການເຕືອນໄພນີ້, ໃຫ້ໃຊ້ ບໍ່ໃຊ້ attribute

-Wunused-value
ເຕືອນທຸກຄັ້ງທີ່ຄຳຖະແຫຼງຄຳນວນຜົນທີ່ບໍ່ໄດ້ໃຊ້ຢ່າງຈະແຈ້ງ. ເພື່ອສະກັດກັ້ນ
ຄໍາເຕືອນນີ້ໂຍນການສະແດງອອກທີ່ບໍ່ໄດ້ໃຊ້ໄປ void. ນີ້ປະກອບມີຄໍາຖະແຫຼງການສະແດງອອກ
ຫຼືດ້ານຊ້າຍມືຂອງເຄື່ອງໝາຍຈຸດທີ່ບໍ່ມີຜົນຂ້າງຄຽງ. ສໍາລັບ
ຕົວຢ່າງ, ການສະແດງອອກເຊັ່ນ x[i,j] ຈະເຮັດໃຫ້ເກີດການເຕືອນໄພ, ໃນຂະນະທີ່ x[(void)i,j] ຈະ
ບໍ່.

ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ.

- ບໍ່​ໄດ້​ນໍາ​ໃຊ້​
ທັງ ໝົດ ຂ້າງເທິງ - ບໍ່​ໄດ້​ນໍາ​ໃຊ້​ ທາງ​ເລືອກ​ລວມ​.

ເພື່ອ​ໃຫ້​ໄດ້​ຮັບ​ຄໍາ​ເຕືອນ​ກ່ຽວ​ກັບ​ຕົວ​ກໍາ​ນົດ​ການ​ທໍາ​ງານ​ທີ່​ບໍ່​ໄດ້​ນໍາ​ໃຊ້​, ທ່ານ​ຈະ​ຕ້ອງ​ລະ​ບຸ​
-Wextra - ບໍ່​ໄດ້​ນໍາ​ໃຊ້​ (ໃຫ້ສັງເກດວ່າ - ຝາ implies - ບໍ່​ໄດ້​ນໍາ​ໃຊ້​), ຫຼືລະບຸແຍກຕ່າງຫາກ
-Wunused-ພາລາມິເຕີ.

- ປະກາດ
ເຕືອນຖ້າຕົວແປອັດຕະໂນມັດຖືກໃຊ້ໂດຍບໍ່ໄດ້ເລີ່ມຕົ້ນກ່ອນ ຫຼືຖ້າຕົວແປ
ອາດຈະຖືກ clobbed ໂດຍການໂທ "setjmp". ໃນ C ++, ເຕືອນຖ້າການອ້າງອີງທີ່ບໍ່ແມ່ນສະຖິດ ຫຼື ບໍ່ແມ່ນ.
ໄຟຟ້າສະຖິດ const ສະມາຊິກປະກົດຢູ່ໃນຫ້ອງຮຽນທີ່ບໍ່ມີຕົວສ້າງ.

ຖ້າທ່ານຕ້ອງການເຕືອນກ່ຽວກັບລະຫັດທີ່ໃຊ້ຄ່າ uninitialized ຂອງຕົວແປໃນ
initializer ຂອງຕົນເອງ, ການນໍາໃຊ້ - ວິນ​ຍານ​ຕົນ​ເອງ​ ທາງເລືອກ.

ການເຕືອນໄພເຫຼົ່ານີ້ເກີດຂຶ້ນສໍາລັບອົງປະກອບຂອງໂຄງສ້າງທີ່ບໍ່ໄດ້ກໍານົດເອງຫຼື clobbered ສ່ວນບຸກຄົນ,
union ຫຼື array variables ເຊັ່ນດຽວກັນກັບຕົວແປທີ່ uninitialized ຫຼື clobbered
ໂດຍລວມ. ພວກມັນບໍ່ເກີດຂຶ້ນສໍາລັບຕົວແປຫຼືອົງປະກອບທີ່ປະກາດວ່າ "ການເຫນັງຕີງ". ເນື່ອງຈາກວ່າ
ການເຕືອນໄພເຫຼົ່ານີ້ແມ່ນຂຶ້ນກັບການເພີ່ມປະສິດທິພາບ, ຕົວແປທີ່ແນ່ນອນຫຼືອົງປະກອບທີ່ມີ
ການເຕືອນໄພແມ່ນຂຶ້ນກັບທາງເລືອກການເພີ່ມປະສິດທິພາບທີ່ຊັດເຈນແລະສະບັບຂອງ GCC ທີ່ໃຊ້.

ໃຫ້ສັງເກດວ່າອາດຈະບໍ່ມີຄໍາເຕືອນກ່ຽວກັບຕົວແປທີ່ຖືກນໍາໃຊ້ເພື່ອຄິດໄລ່ a
ຄ່າຕົວຂອງມັນເອງບໍ່ເຄີຍຖືກໃຊ້, ເພາະວ່າການຄິດໄລ່ດັ່ງກ່າວອາດຈະຖືກລຶບໂດຍການໄຫຼຂອງຂໍ້ມູນ
ການວິເຄາະກ່ອນທີ່ຈະພິມຄໍາເຕືອນ.

-Wmaybe-unitialized
ສໍາລັບຕົວແປອັດຕະໂນມັດ, ຖ້າມີເສັ້ນທາງຈາກຫນ້າທີ່ເຂົ້າໄປຫາການນໍາໃຊ້
ຕົວແປທີ່ຖືກເລີ່ມຕົ້ນ, ແຕ່ວ່າມີບາງເສັ້ນທາງອື່ນທີ່ຕົວແປບໍ່ແມ່ນ
initialized, compiler ຈະ emit ເຕືອນຖ້າຫາກວ່າມັນບໍ່ສາມາດພິສູດ uninitialized ໄດ້
ເສັ້ນທາງບໍ່ໄດ້ເກີດຂຶ້ນໃນເວລາແລ່ນ. ການເຕືອນເຫຼົ່ານີ້ຖືກສ້າງເປັນທາງເລືອກເພາະວ່າ GCC ບໍ່ແມ່ນ
ສະຫລາດພໍທີ່ຈະເຫັນເຫດຜົນທັງຫມົດວ່າເປັນຫຍັງລະຫັດອາດຈະຖືກຕ້ອງເຖິງແມ່ນວ່າຈະປາກົດ
ມີ​ຄວາມ​ຜິດ​ພາດ​. ນີ້ແມ່ນຕົວຢ່າງຫນຶ່ງຂອງວິທີການນີ້ສາມາດເກີດຂຶ້ນໄດ້:

{
intx;
ສະຫຼັບ (y)
{
ກໍລະນີ 1: x = 1;
ທໍາລາຍ;
ກໍລະນີ 2: x = 4;
ທໍາລາຍ;
ກໍລະນີ 3: x = 5;
}
foo(x);
}

ຖ້າຄ່າຂອງ "y" ແມ່ນສະເຫມີ 1, 2 ຫຼື 3, ຫຼັງຈາກນັ້ນ "x" ຈະຖືກເລີ່ມຕົ້ນສະເຫມີ, ແຕ່ GCC.
ບໍ່ຮູ້ເລື່ອງນີ້. ເພື່ອສະກັດກັ້ນການເຕືອນໄພ, ຜູ້ໃຊ້ຕ້ອງການໃຫ້ກໍລະນີເລີ່ມຕົ້ນ
ກັບ ຢືນຢັນ(0) ຫຼືລະຫັດທີ່ຄ້າຍຄືກັນ.

ທາງ​ເລືອກ​ນີ້​ຍັງ​ເຕືອນ​ວ່າ​ໃນ​ເວ​ລາ​ທີ່​ຕົວ​ປ່ຽນ​ແປງ​ອັດ​ຕະ​ໂນ​ມັດ​ທີ່​ບໍ່​ມີ​ການ​ລະ​ເຫີຍ​ອາດ​ຈະ​ໄດ້​ຮັບ​ການ​ປ່ຽນ​ແປງ​ໂດຍ a
ໂທຫາ "longjmp". ການເຕືອນໄພເຫຼົ່ານີ້ແມ່ນເປັນໄປໄດ້ພຽງແຕ່ໃນການເພີ່ມປະສິດທິພາບ
ການລວບລວມ.

compiler ເຫັນພຽງແຕ່ການໂທຫາ "setjmp". ມັນບໍ່ສາມາດຮູ້ວ່າ "longjmp" ຈະຢູ່ໃສ
ເອີ້ນວ່າ; ໃນຄວາມເປັນຈິງ, ຕົວຈັບສັນຍານສາມາດໂທຫາມັນຢູ່ໃນຈຸດໃດຫນຶ່ງໃນລະຫັດ. ເປັນ
ຜົນໄດ້ຮັບ, ທ່ານອາດຈະໄດ້ຮັບການເຕືອນໄພເຖິງແມ່ນວ່າໃນຄວາມເປັນຈິງບໍ່ມີບັນຫາເພາະວ່າ "longjmp"
ໃນຄວາມເປັນຈິງບໍ່ສາມາດຖືກເອີ້ນຢູ່ໃນສະຖານທີ່ທີ່ຈະເຮັດໃຫ້ເກີດບັນຫາ.

ບາງຄໍາເຕືອນທີ່ຂີ້ຮ້າຍສາມາດຫຼີກລ່ຽງໄດ້ຖ້າທ່ານປະກາດຫນ້າທີ່ທັງຫມົດທີ່ເຈົ້າໃຊ້ນັ້ນ
ບໍ່ເຄີຍກັບຄືນມາເປັນ "noreturn".

ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ or -Wextra.

-Wunknown-pragmas
ເຕືອນເມື່ອພົບຄຳສັ່ງ "#pragma" ທີ່ GCC ບໍ່ເຂົ້າໃຈ. ຖ້ານີ້
ທາງເລືອກເສັ້ນຄໍາສັ່ງຖືກນໍາໃຊ້, ການເຕືອນໄພເຖິງແມ່ນວ່າຈະໄດ້ຮັບການອອກສໍາລັບ pragmas ທີ່ບໍ່ຮູ້ຈັກໃນ
ໄຟລ໌ສ່ວນຫົວຂອງລະບົບ. ນີ້ບໍ່ແມ່ນກໍລະນີຖ້າຫາກວ່າຄໍາເຕືອນໄດ້ຖືກເປີດໃຊ້ພຽງແຕ່ໂດຍ
- ຝາ ທາງເລືອກແຖວຄໍາສັ່ງ.

-Wno-pragmas
ຢ່າເຕືອນກ່ຽວກັບການໃຊ້ pragmas ທີ່ບໍ່ຖືກຕ້ອງ, ເຊັ່ນ: ຕົວກໍານົດການທີ່ບໍ່ຖືກຕ້ອງ, syntax ທີ່ບໍ່ຖືກຕ້ອງ, ຫຼື
ຂໍ້ຂັດແຍ່ງລະຫວ່າງ pragmas. ເບິ່ງນຳ -Wunknown-pragmas.

- ເປັນການລ້າສຸດ
ຕົວເລືອກນີ້ແມ່ນມີການເຄື່ອນໄຫວພຽງແຕ່ເມື່ອ -fstrict-aliasing ມີການເຄື່ອນໄຫວ. ມັນເຕືອນກ່ຽວກັບລະຫັດວ່າ
ອາດຈະທໍາລາຍກົດລະບຽບນາມແຝງທີ່ເຄັ່ງຄັດທີ່ compiler ກໍາລັງໃຊ້ສໍາລັບການເພີ່ມປະສິດທິພາບ.
ການ​ເຕືອນ​ໄພ​ບໍ່​ໄດ້​ຈັບ​ທຸກ​ກໍ​ລະ​ນີ​, ແຕ່​ພະ​ຍາ​ຍາມ​ທີ່​ຈະ​ຈັບ​ຫຼາຍ​ທົ່ວ​ໄປ​
ຂຸມ. ມັນລວມຢູ່ໃນ - ຝາ. ມັນເທົ່າກັບ -Wstrict-aliasing=3

-Wstrict-aliasing=n
ຕົວເລືອກນີ້ແມ່ນມີການເຄື່ອນໄຫວພຽງແຕ່ເມື່ອ -fstrict-aliasing ມີການເຄື່ອນໄຫວ. ມັນເຕືອນກ່ຽວກັບລະຫັດວ່າ
ອາດຈະທໍາລາຍກົດລະບຽບນາມແຝງທີ່ເຄັ່ງຄັດທີ່ compiler ກໍາລັງໃຊ້ສໍາລັບການເພີ່ມປະສິດທິພາບ.
ລະດັບທີ່ສູງຂຶ້ນກົງກັບຄວາມຖືກຕ້ອງທີ່ສູງຂຶ້ນ (ຜົນບວກທີ່ບໍ່ຖືກຕ້ອງຫນ້ອຍລົງ). ລະດັບທີ່ສູງຂຶ້ນ
ຍັງສອດຄ່ອງກັບຄວາມພະຍາຍາມຫຼາຍ, ຄ້າຍຄືກັນກັບວິທີການເຮັດວຽກ -O. - ເປັນການລ້າສຸດ is
ທຽບເທົ່າກັບ -Wstrict-aliasing=n, ດ້ວຍ n=3.

ລະດັບ 1: ຮຸກຮານທີ່ສຸດ, ໄວ, ຖືກຕ້ອງໜ້ອຍທີ່ສຸດ. ອາດຈະເປັນປະໂຫຍດເມື່ອລະດັບສູງຂຶ້ນ
ບໍ່ໄດ້ເຕືອນແຕ່ -fstrict-aliasing ຍັງທໍາລາຍລະຫັດ, ຍ້ອນວ່າມັນມີຈໍານວນຫນ້ອຍຫຼາຍ
ລົບ. ຢ່າງໃດກໍຕາມ, ມັນມີຂໍ້ດີທີ່ບໍ່ຖືກຕ້ອງຈໍານວນຫຼາຍ. ເຕືອນສໍາລັບການປ່ຽນຕົວຊີ້ທັງຫມົດ
ລະຫວ່າງປະເພດທີ່ບໍ່ເຂົ້າກັນໄດ້, ເຖິງແມ່ນວ່າບໍ່ເຄີຍອ້າງອີງ. ແລ່ນຢູ່ທາງຫນ້າ
ສິ້ນສຸດເທົ່ານັ້ນ.

ລະດັບ 2: ຮຸກຮານ, ໄວ, ບໍ່ຊັດເຈນເກີນໄປ. ອາດຈະຍັງມີຜົນບວກທີ່ບໍ່ຖືກຕ້ອງຫຼາຍ (ບໍ່
ເຖິງວ່າລະດັບ 1), ແລະຂໍ້ເສຍທີ່ບໍ່ຖືກຕ້ອງໜ້ອຍໜຶ່ງ (ແຕ່ອາດຈະຫຼາຍກວ່າລະດັບ 1).
ບໍ່ຄືກັບລະດັບ 1, ມັນພຽງແຕ່ເຕືອນເມື່ອທີ່ຢູ່ຖືກເອົາ. ເຕືອນກ່ຽວກັບປະເພດທີ່ບໍ່ຄົບຖ້ວນ.
ແລ່ນຢູ່ດ້ານໜ້າເທົ່ານັ້ນ.

ລະດັບ 3 (ຄ່າເລີ່ມຕົ້ນສໍາລັບ - ເປັນການລ້າສຸດ): ຄວນມີຂໍ້ດີທີ່ບໍ່ຖືກຕ້ອງຫຼາຍ ແລະໜ້ອຍຫຼາຍ
ທາງລົບທີ່ບໍ່ຖືກຕ້ອງ. ຊ້າກວ່າລະດັບ 1 ຫຼື 2 ເລັກນ້ອຍເມື່ອການເພີ່ມປະສິດທິພາບຖືກເປີດໃຊ້.
ເບິ່ງແຍງຮູບແບບການ pun + dereference ທົ່ວໄປໃນດ້ານຫນ້າ:
"*(int*)&some_float". ຖ້າການເພີ່ມປະສິດທິພາບຖືກເປີດໃຊ້, ມັນຍັງເຮັດວຽກຢູ່ໃນຈຸດຫລັງ, ບ່ອນທີ່
ມັນຈັດການກັບກໍລະນີຄໍາຖະແຫຼງຫຼາຍໂດຍໃຊ້ຈຸດທີ່ລະອຽດອ່ອນຕໍ່ການໄຫຼເຂົ້າໄປຫາຂໍ້ມູນ.
ເຕືອນພຽງແຕ່ເມື່ອຕົວຊີ້ທີ່ແປງແລ້ວຖືກປະຕິເສດ. ບໍ່ໄດ້ເຕືອນກ່ຽວກັບການບໍ່ຄົບຖ້ວນ
ປະເພດ

-Wstrict-ລົ້ນ
-Wstrict-overflow=n
ຕົວເລືອກນີ້ແມ່ນມີການເຄື່ອນໄຫວພຽງແຕ່ເມື່ອ -fstrict-ລົ້ນ ມີການເຄື່ອນໄຫວ. ມັນເຕືອນກ່ຽວກັບກໍລະນີ
ບ່ອນທີ່ compiler optimize ໂດຍອີງໃສ່ສົມມຸດຕິຖານທີ່ລົງນາມ overflow ບໍ່
ເກີດຂຶ້ນ. ໃຫ້ສັງເກດວ່າມັນບໍ່ເຕືອນກ່ຽວກັບທຸກກໍລະນີທີ່ລະຫັດອາດຈະລົ້ນ: ມັນ
ພຽງແຕ່ເຕືອນກ່ຽວກັບກໍລະນີທີ່ compiler ປະຕິບັດການເພີ່ມປະສິດທິພາບບາງຢ່າງ. ດັ່ງນັ້ນນີ້
ການເຕືອນໄພແມ່ນຂຶ້ນກັບລະດັບການເພີ່ມປະສິດທິພາບ.

ການເພີ່ມປະສິດທິພາບທີ່ສົມມຸດວ່າການລົງນາມ overflow ບໍ່ເກີດຂຶ້ນແມ່ນປອດໄພຢ່າງສົມບູນຖ້າ
ຄຸນຄ່າຂອງຕົວແປທີ່ກ່ຽວຂ້ອງແມ່ນແບບທີ່ overflow ບໍ່ເຄີຍເຮັດ, ໃນຄວາມເປັນຈິງ,
ເກີດຂຶ້ນ. ດັ່ງນັ້ນ, ການເຕືອນໄພນີ້ສາມາດໃຫ້ຜົນບວກທີ່ບໍ່ຖືກຕ້ອງໄດ້ຢ່າງງ່າຍດາຍ: ການເຕືອນກ່ຽວກັບລະຫັດ
ຕົວຈິງແລ້ວບໍ່ແມ່ນບັນຫາ. ເພື່ອຊ່ວຍສຸມໃສ່ບັນຫາທີ່ສໍາຄັນ, ການເຕືອນໄພຈໍານວນຫນຶ່ງ
ລະ​ດັບ​ແມ່ນ​ໄດ້​ກໍາ​ນົດ​. ບໍ່​ມີ​ການ​ເຕືອນ​ໄພ​ອອກ​ສໍາ​ລັບ​ການ​ນໍາ​ໃຊ້​ຂອງ​ການ​ເກີນ​ລົງ​ນາມ​ທີ່​ບໍ່​ໄດ້​ກໍາ​ນົດ​
ໃນ​ເວ​ລາ​ທີ່​ການ​ຄາດ​ຄະ​ເນ​ຈໍາ​ນວນ​ຫຼາຍ​ການ​ເຮັດ​ໃຫ້ loop ຈະ​ຕ້ອງ​ການ​, ໂດຍ​ສະ​ເພາະ​ແມ່ນ​ໃນ​ເວ​ລາ​ທີ່​
ການກໍານົດວ່າ loop ຈະຖືກປະຕິບັດທັງຫມົດ.

-Wstrict-overflow=1
ເຕືອນກ່ຽວກັບກໍລະນີທີ່ມີທັງຄໍາຖາມແລະງ່າຍທີ່ຈະຫຼີກເວັ້ນ. ຕົວຢ່າງ: "x +
1 > x"; ກັບ -fstrict-ລົ້ນ, compiler ຈະງ່າຍນີ້ 1. ລະດັບນີ້
of -Wstrict-ລົ້ນ ຖືກເປີດໃຊ້ໂດຍ - ຝາ; ລະດັບສູງບໍ່ແມ່ນ, ແລະຈະຕ້ອງເປັນ
ຮຽກຮ້ອງຢ່າງຈະແຈ້ງ.

-Wstrict-overflow=2
ນອກຈາກນີ້ຍັງເຕືອນກ່ຽວກັບກໍລະນີອື່ນໆທີ່ການປຽບທຽບແມ່ນງ່າຍເປັນຄົງທີ່. ສໍາລັບ
ຕົວຢ່າງ: "abs (x) >= 0". ນີ້ພຽງແຕ່ສາມາດງ່າຍດາຍໃນເວລາທີ່ -fstrict-ລົ້ນ ແມ່ນຢູ່ໃນ
ຜົນກະທົບ, ເພາະວ່າ "abs (INT_MIN)" overflows ກັບ "INT_MIN", ເຊິ່ງແມ່ນຫນ້ອຍກວ່າສູນ.
-Wstrict-ລົ້ນ (ບໍ່ມີລະດັບ) ແມ່ນຄືກັນກັບ -Wstrict-overflow=2.

-Wstrict-overflow=3
ນອກຈາກນີ້ຍັງເຕືອນກ່ຽວກັບກໍລະນີອື່ນໆທີ່ການປຽບທຽບແມ່ນງ່າຍດາຍ. ຕົວຢ່າງ: "x + 1
> 1" ຈະຖືກແປເປັນ "x > 0".

-Wstrict-overflow=4
ຍັງເຕືອນກ່ຽວກັບຄວາມງ່າຍດາຍອື່ນໆທີ່ບໍ່ໄດ້ກວມເອົາໂດຍກໍລະນີຂ້າງເທິງ. ສໍາລັບ
ຕົວຢ່າງ: "(x * 10) / 5" ຈະຖືກແປເປັນ "x * 2".

-Wstrict-overflow=5
ຍັງເຕືອນກ່ຽວກັບກໍລະນີທີ່ compiler ຫຼຸດຜ່ອນຂະຫນາດຂອງຄົງທີ່
ມີສ່ວນຮ່ວມໃນການປຽບທຽບ. ຕົວຢ່າງ: "x + 2 > y" ຈະຖືກແປເປັນ "x + 1
>= y". ນີ້ແມ່ນລາຍງານພຽງແຕ່ຢູ່ໃນລະດັບເຕືອນໄພສູງສຸດເພາະວ່ານີ້
simplification ໃຊ້ກັບການປຽບທຽບຫຼາຍ, ດັ່ງນັ້ນລະດັບການເຕືອນໄພນີ້ຈະໃຫ້ຫຼາຍ
ຈໍານວນຂະຫນາດໃຫຍ່ຂອງຜົນບວກທີ່ບໍ່ຖືກຕ້ອງ.

-Wsuggest-attribute=[ບໍລິສຸດ|const|noreturn]
ເຕືອນສໍາລັບກໍລະນີທີ່ການເພີ່ມຄຸນສົມບັດອາດຈະເປັນປະໂຫຍດ. ຄຸນ​ລັກ​ສະ​ນະ​ໃນ​ປັດ​ຈຸ​ບັນ​
ສະ​ຫນັບ​ສະ​ຫນູນ​ແມ່ນ​ລະ​ບຸ​ໄວ້​ຂ້າງ​ລຸ່ມ​ນີ້​.

-Wsuggest-attribute=ບໍລິສຸດ
-Wsuggest-attribute=const
-Wsuggest-attribute=noreturn
ເຕືອນກ່ຽວກັບຫນ້າທີ່ອາດຈະເປັນຜູ້ສະຫມັກສໍາລັບຄຸນລັກສະນະ "ບໍລິສຸດ", "const" ຫຼື
"noreturn". compiler ພຽງແຕ່ເຕືອນສໍາລັບຫນ້າທີ່ສັງເກດເຫັນໃນການລວບລວມຂໍ້ມູນອື່ນໆ
ຫນ່ວຍຫຼື (ໃນກໍລະນີຂອງ "ບໍລິສຸດ" ແລະ "const") ຖ້າມັນບໍ່ສາມາດພິສູດໄດ້ວ່າຫນ້າທີ່
ກັບຄືນມາເປັນປົກກະຕິ. ຟັງຊັນຈະກັບຄືນມາຕາມປົກກະຕິຖ້າມັນບໍ່ມີອັນເປັນນິດ
loop ຫຼືກັບຄືນມາຜິດປົກກະຕິໂດຍການຖິ້ມ, ເອີ້ນວ່າ "abort()" ຫຼືໃສ່ກັບດັກ. ນີ້
ການວິເຄາະຮຽກຮ້ອງໃຫ້ມີທາງເລືອກ -fipa-pure-const, ເຊິ່ງຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະ
ສູງກວ່າ. ລະດັບການເພີ່ມປະສິດທິພາບທີ່ສູງຂຶ້ນປັບປຸງຄວາມຖືກຕ້ອງຂອງການວິເຄາະ.

- Warray-bounds
ຕົວເລືອກນີ້ແມ່ນມີການເຄື່ອນໄຫວພຽງແຕ່ເມື່ອ -ftree-vrp ມີການເຄື່ອນໄຫວ (ຄ່າເລີ່ມຕົ້ນສໍາລັບ -O2 ແລະຂ້າງເທິງ). ມັນ
ເຕືອນກ່ຽວກັບ subscripts ກັບ arrays ສະເຫມີຢູ່ນອກຂອບເຂດ. ການເຕືອນໄພນີ້ແມ່ນ
ເປີດໃຊ້ໂດຍ - ຝາ.

-Wno-div-by-zero
ຢ່າເຕືອນກ່ຽວກັບການລວບລວມເວລາການຫານຈໍານວນເຕັມໂດຍສູນ. ການແບ່ງຈຸດທີ່ເລື່ອນໄດ້ໂດຍ
ສູນບໍ່ໄດ້ຖືກເຕືອນກ່ຽວກັບ, ຍ້ອນວ່າມັນສາມາດເປັນວິທີທີ່ຖືກຕ້ອງຂອງການໄດ້ຮັບ infinities ແລະ
NaNs.

-Wsystem-headers
ພິມຂໍ້ຄວາມເຕືອນສໍາລັບໂຄງສ້າງທີ່ພົບເຫັນຢູ່ໃນໄຟລ໌ສ່ວນຫົວຂອງລະບົບ. ຄຳເຕືອນຈາກ
ສ່ວນຫົວຂອງລະບົບແມ່ນຖືກສະກັດກັ້ນຕາມປົກກະຕິ, ໂດຍສົມມຸດຕິຖານວ່າພວກມັນມັກຈະບໍ່ເຮັດ
ຊີ້ບອກເຖິງບັນຫາທີ່ແທ້ຈິງ ແລະພຽງແຕ່ຈະເຮັດໃຫ້ຜົນອອກຂອງ compiler ຍາກທີ່ຈະອ່ານໄດ້. ການນໍາໃຊ້
ຕົວເລືອກເສັ້ນຄໍາສັ່ງນີ້ບອກ GCC ໃຫ້ອອກຄໍາເຕືອນຈາກສ່ວນຫົວຂອງລະບົບຄືກັບວ່າພວກເຂົາ
ເກີດຂຶ້ນໃນລະຫັດຜູ້ໃຊ້. ຢ່າງໃດກໍຕາມ, ໃຫ້ສັງເກດວ່າການນໍາໃຊ້ - ຝາ ສົມທົບກັບທາງເລືອກນີ້
ຈະ ບໍ່ ເຕືອນກ່ຽວກັບ pragmas ທີ່ບໍ່ຮູ້ຈັກໃນສ່ວນຫົວຂອງລະບົບ --- ສໍາລັບການນັ້ນ, -Wunknown-pragmas
ຍັງຕ້ອງໄດ້ໃຊ້.

-Wtrampoline
ເຕືອນກ່ຽວກັບ trampolines ທີ່ສ້າງຂຶ້ນສໍາລັບຕົວຊີ້ໄປຫາຫນ້າທີ່ຊ້ອນກັນ.

trampoline ແມ່ນຂໍ້ມູນຂະຫນາດນ້ອຍຫຼືລະຫັດທີ່ຖືກສ້າງຂື້ນໃນເວລາແລ່ນ
ເວລາຢູ່ໃນ stack ເມື່ອທີ່ຢູ່ຂອງຟັງຊັນທີ່ຊ້ອນກັນຖືກປະຕິບັດ, ແລະ
ຖືກນໍາໃຊ້ເພື່ອໂທຫາຫນ້າທີ່ nested ໂດຍທາງອ້ອມ. ສໍາລັບບາງເປົ້າຫມາຍ, ມັນ
ແມ່ນປະກອບດ້ວຍຂໍ້ມູນເທົ່ານັ້ນແລະດັ່ງນັ້ນຈຶ່ງບໍ່ຈໍາເປັນຕ້ອງມີການປິ່ນປົວພິເສດ. ແຕ່,
ສໍາລັບເປົ້າຫມາຍສ່ວນໃຫຍ່, ມັນປະກອບດ້ວຍລະຫັດແລະດັ່ງນັ້ນຈຶ່ງຮຽກຮ້ອງໃຫ້ມີ stack
ເພື່ອເຮັດໃຫ້ໂຄງການສາມາດປະຕິບັດໄດ້ຢ່າງຖືກຕ້ອງ.

-Wfloat-ເທົ່າທຽມກັນ
ເຕືອນຖ້າຄ່າຈຸດລອຍຖືກໃຊ້ໃນການປຽບທຽບຄວາມສະເໝີພາບ.

ແນວຄວາມຄິດທີ່ຢູ່ເບື້ອງຫລັງນີ້ແມ່ນວ່າບາງຄັ້ງມັນກໍ່ສະດວກ (ສໍາລັບນັກຂຽນໂປລແກລມ) ເພື່ອ
ພິ​ຈາ​ລະ​ນາ​ຄ່າ​ຈຸດ​ທີ່​ເລື່ອນ​ໄດ້​ເປັນ​ການ​ປະ​ມານ​ກັບ​ຈໍາ​ນວນ​ແທ້​ຈິງ​ທີ່​ຊັດ​ເຈນ infinitely.
ຖ້າທ່ານກໍາລັງເຮັດນີ້, ຫຼັງຈາກນັ້ນທ່ານຈໍາເປັນຕ້ອງຄິດໄລ່ (ໂດຍການວິເຄາະລະຫັດ, ຫຼືບາງ
ວິ​ທີ​ການ​ອື່ນໆ​) ຄວາມ​ຜິດ​ພາດ​ສູງ​ສຸດ​ຫຼື​ອາດ​ຈະ​ສູງ​ສຸດ​ທີ່​ຄໍາ​ນວນ​ແນະ​ນໍາ​, ແລະ​
ອະ​ນຸ​ຍາດ​ໃຫ້​ສໍາ​ລັບ​ມັນ​ໃນ​ເວ​ລາ​ທີ່​ປະ​ຕິ​ບັດ​ການ​ປຽບ​ທຽບ (ແລະ​ໃນ​ເວ​ລາ​ທີ່​ການ​ຜະ​ລິດ​ຜົນ​ຜະ​ລິດ​, ແຕ່​ວ່າ​ເປັນ​
ບັນ​ຫາ​ທີ່​ແຕກ​ຕ່າງ​ກັນ​)​. ໂດຍສະເພາະ, ແທນທີ່ຈະທົດສອບຄວາມສະເຫມີພາບ, ທ່ານຈະກວດເບິ່ງ
ເພື່ອເບິ່ງວ່າທັງສອງຄ່າມີໄລຍະທີ່ທັບຊ້ອນກັນ; ແລະນີ້ແມ່ນເຮັດໄດ້ກັບ
ຜູ້ປະກອບການທີ່ກ່ຽວຂ້ອງ, ດັ່ງນັ້ນການປຽບທຽບຄວາມສະເຫມີພາບແມ່ນອາດຈະຜິດພາດ.

- ແບບດັ້ງເດີມ (C ແລະ Objective-C ເທົ່ານັ້ນ)
ເຕືອນກ່ຽວກັບສິ່ງກໍ່ສ້າງບາງຢ່າງທີ່ມີລັກສະນະແຕກຕ່າງກັນໃນແບບດັ້ງເດີມ ແລະ ISO C. ນອກຈາກນີ້
ເຕືອນກ່ຽວກັບໂຄງສ້າງ ISO C ທີ່ບໍ່ມີການທຽບເທົ່າ C ແບບດັ້ງເດີມ, ແລະ/ຫຼືມີບັນຫາ
ການກໍ່ສ້າງທີ່ຄວນຫຼີກເວັ້ນ.

· ຕົວກໍານົດການມະຫາພາກທີ່ປາກົດຢູ່ໃນຕົວໜັງສືສະຕຣິງຢູ່ໃນຕົວໜັງສືມະຫາພາກ. ໃນ
ການທົດແທນມະຫາພາກ C ແບບດັ້ງເດີມເກີດຂຶ້ນພາຍໃນຕົວໜັງສືສະຕຣິງ, ແຕ່ບໍ່ແມ່ນ
ໃນ ISO C.

· ໃນ C ແບບດັ້ງເດີມ, ບາງຄໍາສັ່ງ preprocessor ບໍ່ມີ. ແບບດັ້ງເດີມ
preprocessors ພຽງແຕ່ຈະພິຈາລະນາເສັ້ນທີ່ຈະເປັນຄໍາສັ່ງຖ້າຫາກວ່າ # ປາກົດວ່າໃນ
ຖັນທີ 1 ໃນແຖວ. ເພາະສະນັ້ນ - ແບບດັ້ງເດີມ ເຕືອນ​ກ່ຽວ​ກັບ​ຄໍາ​ແນະ​ນໍາ​ທີ່​
C ແບບດັ້ງເດີມເຂົ້າໃຈແຕ່ຈະບໍ່ສົນໃຈເພາະວ່າ # ບໍ່ປະກົດວ່າເປັນ
ຕົວລະຄອນທໍາອິດໃນແຖວ. ມັນຍັງແນະນໍາໃຫ້ທ່ານເຊື່ອງຄໍາສັ່ງເຊັ່ນ #pragma
ບໍ່ເຂົ້າໃຈ C ແບບດັ້ງເດີມໂດຍການຫຍໍ້ໜ້າພວກມັນ. ປະເພນີບາງ
ການຈັດຕັ້ງປະຕິບັດຈະບໍ່ຮັບຮູ້ #ເອລີຟ, ສະນັ້ນມັນແນະນໍາໃຫ້ຫຼີກເວັ້ນມັນທັງຫມົດ.

·ມະຫາພາກຄ້າຍຄືຟັງຊັນທີ່ປາກົດໂດຍບໍ່ມີການໂຕ້ຖຽງ.

· ຕົວປະຕິບັດການ unary plus.

·ທ U integer constant suffix, ຫຼື F or L ຄຳຕໍ່ທ້າຍຄົງທີ່ຂອງຈຸດລອຍ.
(C ແບບດັ້ງເດີມສະຫນັບສະຫນູນ L suffix ສຸດ integer constants.) ຫມາຍເຫດ, ເຫຼົ່ານີ້
suffixes ປະກົດຢູ່ໃນ macros ທີ່ກໍານົດໄວ້ໃນສ່ວນຫົວລະບົບຂອງລະບົບທີ່ທັນສະໄຫມຫຼາຍທີ່ສຸດ,
ຕົວຢ່າງ _MIN/_MAX ມະຫາພາກໃນ " ". ການນໍາໃຊ້ macro ເຫຼົ່ານີ້ຢູ່ໃນລະຫັດຜູ້ໃຊ້ອາດຈະ
ປົກກະຕິແລ້ວນໍາໄປສູ່ການເຕືອນໄພ spurious, ແນວໃດກໍ່ຕາມ preprocessor ປະສົມປະສານຂອງ GCC ມີ
ສະພາບການພຽງພໍເພື່ອຫຼີກເວັ້ນການເຕືອນໃນກໍລະນີເຫຼົ່ານີ້.

·ຟັງຊັນທີ່ປະກາດພາຍນອກໃນຫນຶ່ງຕັນແລະຫຼັງຈາກນັ້ນນໍາໃຊ້ຫຼັງຈາກສິ້ນສຸດຂອງ
block.

· ຄຳ ຖະແຫຼງການ "ສະຫຼັບ" ມີ operand ຂອງປະເພດ "ຍາວ".

· ການປະກາດຟັງຊັນທີ່ບໍ່ແມ່ນ "static" ປະຕິບັດຕາມ "static" ຫນຶ່ງ. ການກໍ່ສ້າງນີ້ບໍ່ແມ່ນ
ຍອມຮັບໂດຍຜູ້ລວບລວມຂໍ້ມູນ C ແບບດັ້ງເດີມຈໍານວນຫນຶ່ງ.

· ປະເພດ ISO ຂອງຄ່າຄົງທີ່ຈຳນວນເຕັມມີຄວາມກວ້າງ ຫຼື signedness ແຕກຕ່າງຈາກຂອງມັນ
ປະ​ເພດ​ພື້ນ​ເມືອງ​. ການເຕືອນໄພນີ້ແມ່ນອອກພຽງແຕ່ຖ້າພື້ນຖານຂອງຄ່າຄົງທີ່ແມ່ນສິບ.
ເຊັ່ນ: ຄ່າເລກຖານສິບຫົກ ຫຼືຄ່າເລກແປດ, ເຊິ່ງໂດຍທົ່ວໄປແລ້ວສະແດງເຖິງຮູບແບບບິດ, ບໍ່ແມ່ນ
ເຕືອນກ່ຽວກັບ.

· ການ​ນໍາ​ໃຊ້​ຂອງ ISO string concatenation ຖືກ​ກວດ​ພົບ​.

· ການ​ເລີ່ມ​ຕົ້ນ​ຂອງ​ການ​ລວມ​ອັດ​ຕະ​ໂນ​ມັດ​.

·ຕົວລະບຸຂັດກັບປ້າຍກຳກັບ. ແບບດັ້ງເດີມ C ຂາດ namespace ແຍກຕ່າງຫາກສໍາລັບ
ປ້າຍ ກຳ ກັບ.

· ການເລີ່ມຕົ້ນຂອງສະຫະພັນ. ຖ້າຕົວເລີ່ມຕົ້ນແມ່ນສູນ, ການເຕືອນຈະຖືກລະເວັ້ນ.
ນີ້ແມ່ນເຮັດພາຍໃຕ້ການສົມມຸດວ່າສູນເບື້ອງຕົ້ນໃນລະຫັດຜູ້ໃຊ້ປາກົດ
ເງື່ອນໄຂໃນຕົວຢ່າງ "__STDC__" ເພື່ອຫຼີກເວັ້ນການຄໍາເຕືອນເບື້ອງຕົ້ນທີ່ຂາດຫາຍໄປແລະອີງໃສ່
ການເລີ່ມຕົ້ນເລີ່ມຕົ້ນເປັນສູນໃນກໍລະນີ C ແບບດັ້ງເດີມ.

· ການ​ປ່ຽນ​ແປງ​ໂດຍ​ຕົ້ນ​ແບບ​ລະ​ຫວ່າງ​ຄ່າ​ຄົງ​ທີ່ / floating -ຈຸດ​ແລະ​ກົງ​ກັນ​ຂ້າມ​. ໄດ້
ການຂາດຕົວແບບເຫຼົ່ານີ້ເມື່ອລວບລວມກັບ C ແບບດັ້ງເດີມຈະເຮັດໃຫ້ຮ້າຍແຮງ
ບັນຫາ. ນີ້ແມ່ນຊຸດຍ່ອຍຂອງຄໍາເຕືອນການປ່ຽນແປງທີ່ເປັນໄປໄດ້, ສໍາລັບຊຸດເຕັມ
ການນໍາໃຊ້ - ການ​ປ່ຽນ​ແປງ​ແບບ​ດັ້ງ​ເດີມ​.

· ການ​ນໍາ​ໃຊ້​ຄໍາ​ນິ​ຍາມ​ການ​ທໍາ​ງານ​ຮູບ​ແບບ ISO C​. ການເຕືອນໄພນີ້ແມ່ນຕັ້ງໃຈ ບໍ່ ອອກມາ
ສໍາ​ລັບ​ການ​ປະ​ກາດ​ຕົ້ນ​ແບບ​ຫຼື​ຫນ້າ​ທີ່​ແຕກ​ຕ່າງ​ກັນ​ເນື່ອງ​ຈາກ​ວ່າ​ຄຸນ​ສົມ​ບັດ ISO C ເຫຼົ່າ​ນີ້​ຈະ​
ປາກົດຢູ່ໃນລະຫັດຂອງທ່ານເມື່ອໃຊ້ macro ຄວາມເຂົ້າກັນໄດ້ C ແບບດັ້ງເດີມຂອງ libiberty,
"PARAMS" ແລະ "VPARAMS". ການເຕືອນນີ້ຍັງຖືກຂ້າມຜ່ານສໍາລັບຟັງຊັນທີ່ວາງໄວ້
ເພາະວ່າຄຸນສົມບັດນັ້ນເປັນສ່ວນຂະຫຍາຍ GCC ແລ້ວ ແລະດັ່ງນັ້ນຈຶ່ງບໍ່ກ່ຽວຂ້ອງກັບ
ຄວາມເຂົ້າກັນໄດ້ຂອງ C ແບບດັ້ງເດີມ.

- ການ​ປ່ຽນ​ແປງ​ແບບ​ດັ້ງ​ເດີມ​ (C ແລະ Objective-C ເທົ່ານັ້ນ)
ເຕືອນຖ້າຕົ້ນແບບເຮັດໃຫ້ເກີດການແປງປະເພດທີ່ແຕກຕ່າງຈາກສິ່ງທີ່ຈະເກີດຂຶ້ນ
ກັບການໂຕ້ຖຽງດຽວກັນໃນກໍລະນີທີ່ບໍ່ມີຕົວແບບ. ນີ້ປະກອບມີການແປງຂອງ
ຈຸດຄົງທີ່ທີ່ຈະເລື່ອນແລະໃນທາງກັບກັນ, ແລະການແປງການປ່ຽນແປງຄວາມກວ້າງຫຼື
ການລົງນາມຂອງການໂຕ້ແຍ້ງຈຸດຄົງທີ່ຍົກເວັ້ນເວລາທີ່ຄືກັນກັບການສົ່ງເສີມໃນຕອນຕົ້ນ.

-Wdeclaration ຫຼັງ​ຈາກ​ການ​ຖະ​ແຫຼງ​ການ​ (C ແລະ Objective-C ເທົ່ານັ້ນ)
ເຕືອນເມື່ອການປະກາດຖືກພົບເຫັນຫຼັງຈາກຄໍາຖະແຫຼງໃນບລັອກ. ການກໍ່ສ້າງນີ້, ເປັນທີ່ຮູ້ຈັກ
ຈາກ C ++, ຖືກນໍາສະເຫນີດ້ວຍ ISO C99 ແລະຖືກອະນຸຍາດໂດຍຄ່າເລີ່ມຕົ້ນໃນ GCC. ມັນ​ບໍ່​ແມ່ນ
ສະຫນັບສະຫນູນໂດຍ ISO C90 ແລະບໍ່ໄດ້ຮັບການສະຫນັບສະຫນູນໂດຍ GCC ຮຸ່ນກ່ອນ GCC 3.0.

-Wundef
ເຕືອນຖ້າຕົວລະບຸທີ່ບໍ່ໄດ້ກໍານົດຖືກປະເມີນຢູ່ໃນ # ຖ້າ ທິດທາງ.

-wno-endif-labels
ຢ່າເຕືອນທຸກຄັ້ງທີ່ #ອື່ນ or an #ສຸດທ້າຍ ຕິດຕາມດ້ວຍຂໍ້ຄວາມ.

- ເງົາ
ເຕືອນທຸກຄັ້ງທີ່ຕົວແປທ້ອງຖິ່ນ ຫຼືການປະກາດປະເພດເປັນເງົາຂອງຕົວແປອື່ນ,
ພາລາມິເຕີ, ປະເພດ, ຫຼືສະມາຊິກຊັ້ນຮຽນ (ໃນ C ++), ຫຼືທຸກຄັ້ງທີ່ມີຟັງຊັນໃນຕົວ
ເປັນເງົາ. ໃຫ້ສັງເກດວ່າໃນ C ++, compiler ຈະບໍ່ເຕືອນຖ້າຕົວແປທ້ອງຖິ່ນເຮັດໃຫ້ເງົາ a
struct/class/enum, ແຕ່ຈະເຕືອນຖ້າມັນເຮັດໃຫ້ເປັນ typedef ທີ່ຈະແຈ້ງ.

-Wlarger-than=len
ເຕືອນທຸກຄັ້ງທີ່ວັດຖຸໃຫຍ່ກວ່າ len bytes ຖືກກໍານົດ.

-Wframe-larger-than=len
ເຕືອນຖ້າຂະຫນາດຂອງກອບຟັງຊັນໃຫຍ່ກວ່າ len ໄບຕ໌. ການ​ຄິດ​ໄລ່​ສໍາ​ເລັດ​
ເພື່ອກໍານົດຂະຫນາດກອບ stack ແມ່ນໂດຍປະມານແລະບໍ່ອະນຸລັກ. ຕົວຈິງ
ຄວາມຕ້ອງການອາດຈະຫຼາຍກວ່າບາງຢ່າງ len ເຖິງແມ່ນວ່າທ່ານຈະບໍ່ໄດ້ຮັບການເຕືອນ. ໃນ
ນອກຈາກນັ້ນ, ພື້ນທີ່ໃດກໍໄດ້ຈັດສັນຜ່ານ "alloca", arrays ຄວາມຍາວຕົວແປ, ຫຼືທີ່ກ່ຽວຂ້ອງ
constructs ບໍ່ໄດ້ຖືກລວມເຂົ້າໂດຍ compiler ໃນເວລາທີ່ກໍານົດວ່າຈະອອກຫຼືບໍ່
ຄຳ ເຕືອນ.

-Wno-free-nonheap-object
ຢ່າເຕືອນໃນເວລາທີ່ພະຍາຍາມປົດປ່ອຍວັດຖຸທີ່ບໍ່ໄດ້ຈັດສັນຢູ່ໃນ heap.

-Wstack-usage=len
ເຕືອນຖ້າຫາກວ່າການໃຊ້ stack ຂອງຟັງຊັນອາດຈະໃຫຍ່ກວ່າ len ໄບຕ໌. ການ​ຄິດ​ໄລ່​
ເຮັດເພື່ອກໍານົດການນໍາໃຊ້ stack ແມ່ນອະນຸລັກ. ພື້ນທີ່ໃດກໍໄດ້ຈັດສັນຜ່ານ "alloca",
variable-length arrays, ຫຼື constructs ທີ່ກ່ຽວຂ້ອງແມ່ນລວມເຂົ້າໂດຍ compiler ເມື່ອ
ກໍານົດວ່າຈະອອກຄໍາເຕືອນຫຼືບໍ່.

ຂໍ້ຄວາມແມ່ນຢູ່ໃນການຮັກສາກັບຜົນຜະລິດຂອງ -fstack ການ​ນໍາ​ໃຊ້​.

· ຖ້າ​ຫາກ​ວ່າ​ການ​ນໍາ​ໃຊ້ stack ແມ່ນ​ຄົງ​ທີ່​ຢ່າງ​ເຕັມ​ທີ່​ແຕ່​ເກີນ​ຈໍາ​ນວນ​ທີ່​ກໍາ​ນົດ​ໄວ້​, ມັນ​ເປັນ​:

ຄໍາເຕືອນ: ການໃຊ້ stack ແມ່ນ 1120 bytes

· ຖ້າ​ຫາກ​ວ່າ​ການ​ນໍາ​ໃຊ້ stack ແມ່ນ (ບາງ​ສ່ວນ​) dynamic ແຕ່​ມີ​ຂອບ​ເຂດ​, ມັນ​ເປັນ​:

ຄໍາເຕືອນ: ການໃຊ້ stack ອາດຈະເປັນ 1648 bytes

· ຖ້າ​ຫາກ​ວ່າ​ການ​ນໍາ​ໃຊ້ stack ແມ່ນ (ບາງ​ສ່ວນ​) dynamic ແລະ​ບໍ່​ມີ​ຂອບ​ເຂດ​, ມັນ​ເປັນ​:

ຄໍາເຕືອນ: ການໃຊ້ stack ອາດຈະບໍ່ມີຂອບເຂດ

-Wunsafe-loop-optimizations
ເຕືອນຖ້າຫາກວ່າ loop ບໍ່ສາມາດປັບໄດ້ເນື່ອງຈາກວ່າ compiler ບໍ່ສາມາດສົມມຸດຫຍັງຢູ່ໃນ
ຂອບເຂດຂອງຕົວຊີ້ວັດ loop. ກັບ -funsafe-loop-optimizations ເຕືອນຖ້າ compiler
ເຮັດໃຫ້ສົມມຸດຕິຖານດັ່ງກ່າວ.

-Wno-pedantic-ms-format (ເປົ້າໝາຍ MinGW ເທົ່ານັ້ນ)
ປິດການນຳໃຊ້ຄຳເຕືອນກ່ຽວກັບຕົວລະບຸຄວາມກວ້າງຂອງຮູບແບບ "printf" / "scanf" ທີ່ບໍ່ແມ່ນ ISO "I32",
"I64", ແລະ "ຂ້ອຍ" ທີ່ໃຊ້ໃນເປົ້າຫມາຍ Windows ຂຶ້ນກັບເວລາແລ່ນ MS, ເມື່ອທ່ານກໍາລັງໃຊ້
ທາງເລືອກ -Wformat ແລະ - pedantic ໂດຍບໍ່ມີການຂະຫຍາຍ gnu.

-Wpointer-arith
ເຕືອນກ່ຽວກັບສິ່ງໃດແດ່ທີ່ຂຶ້ນກັບ "ຂະຫນາດ" ປະເພດຟັງຊັນ ຫຼື "ຫວ່າງເປົ່າ". GNU C
ກໍານົດປະເພດເຫຼົ່ານີ້ຂະຫນາດຂອງ 1, ເພື່ອຄວາມສະດວກໃນການຄິດໄລ່ດ້ວຍ "void *"
ຕົວຊີ້ແລະຕົວຊີ້ໄປຫາຫນ້າທີ່. ໃນ C ++, ເຕືອນເມື່ອການດຳເນີນການເລກເລກ
ກ່ຽວຂ້ອງກັບ "NULL". ການເຕືອນໄພນີ້ຍັງຖືກເປີດໃຊ້ໂດຍ - pedantic.

-Wtype- limits
ເຕືອນຖ້າການປຽບທຽບແມ່ນຖືກຕ້ອງສະເໝີ ຫຼືຜິດສະເໝີເນື່ອງຈາກຂອບເຂດຈຳກັດຂອງ
ປະເພດຂໍ້ມູນ, ແຕ່ບໍ່ເຕືອນສໍາລັບການສະແດງອອກຄົງທີ່. ຕົວຢ່າງ, ເຕືອນຖ້າບໍ່ມີລາຍເຊັນ
ຕົວແປແມ່ນປຽບທຽບກັບສູນກັບ < or >=. ການເຕືອນໄພນີ້ຍັງຖືກເປີດໃຊ້ໂດຍ
-Wextra.

-Wbad-function-cast (C ແລະ Objective-C ເທົ່ານັ້ນ)
ເຕືອນທຸກຄັ້ງທີ່ການໂທຟັງຊັນຖືກສົ່ງສັນຍານໄປຫາປະເພດທີ່ບໍ່ກົງກັນ. ຕົວຢ່າງ, ເຕືອນຖ້າ
"int malloc()" ຖືກໂຍນເປັນ "ອັນໃດອັນໜຶ່ງ *".

-Wc++-compat (C ແລະ Objective-C ເທົ່ານັ້ນ)
ເຕືອນກ່ຽວກັບໂຄງສ້າງ ISO C ທີ່ຢູ່ນອກຊຸດຍ່ອຍທົ່ວໄປຂອງ ISO C ແລະ ISO
C++, ເຊັ່ນ: ການຮ້ອງຂໍການປ່ຽນ implicit ຈາກ "void *" ໄປຫາ pointer ເປັນ non- "void"
ປະເພດ

-Wc++11-compat (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນກ່ຽວກັບໂຄງສ້າງ C++ ທີ່ມີຄວາມໝາຍແຕກຕ່າງກັນລະຫວ່າງ ISO C++ 1998 ແລະ ISO C++ 2011,
ຕົວຢ່າງ: ຕົວລະບຸໃນ ISO C++ 1998 ທີ່ເປັນຄໍາສໍາຄັນໃນ ISO C++ 2011. ຄໍາເຕືອນນີ້
ເປີດ - ການ​ຂັດ​ຂວາງ​ ແລະຖືກເປີດໃຊ້ໂດຍ - ຝາ.

-Wcast-qual
ເຕືອນທຸກຄັ້ງທີ່ຕົວຊີ້ຖືກສົ່ງສັນຍານເພື່ອເອົາຕົວຊີ້ບອກປະເພດໃດໜຶ່ງອອກຈາກປະເພດເປົ້າໝາຍ.
ຕົວຢ່າງ, ເຕືອນຖ້າ "const char *" ຖືກໂຍນໄປຫາ "char *".

ນອກຈາກນັ້ນ, ເຕືອນໃນເວລາສ້າງການສົ່ງສັນຍານທີ່ແນະນໍາປະເພດຄຸນສົມບັດໃນທາງທີ່ບໍ່ປອດໄພ. ສໍາລັບ
ຕົວຢ່າງ, ການໂຍນ "char **" ເປັນ "const char **" ແມ່ນບໍ່ປອດໄພ, ເຊັ່ນດຽວກັບຕົວຢ່າງນີ້:

/* p ແມ່ນ char ** ຄ່າ. */
const char **q = (const char **) p;
/* ການມອບໝາຍຂອງ readonly string ໃຫ້ກັບ const char * ແມ່ນ OK. */
*q = "string";
/* Now char** pointer pointer to read-only memory. */
**p = 'ຂ';

-Wcast-align
ເຕືອນທຸກຄັ້ງທີ່ຕົວຊີ້ຖືກໂຍນລົງໄປເຊັ່ນວ່າການຈັດລຽງຕາມເປົ້າໝາຍທີ່ຕ້ອງການ
ເພີ່ມຂຶ້ນ. ຕົວຢ່າງ, ເຕືອນຖ້າ "char *" ຖືກໂຍນເປັນ "int *" ໃນເຄື່ອງທີ່
ຈໍານວນເຕັມສາມາດເຂົ້າເຖິງໄດ້ພຽງແຕ່ຢູ່ໃນຂອບເຂດຊາຍແດນສອງຫຼືສີ່ໄບ.

-Write-strings
ເມື່ອລວບລວມ C, ໃຫ້ string constants ປະເພດ "const char[ຄວາມຍາວ]" ດັ່ງນັ້ນການສໍາເນົາ
ທີ່ຢູ່ຂອງຫນຶ່ງເຂົ້າໄປໃນຕົວຊີ້ທີ່ບໍ່ແມ່ນ "const" "char *" ຈະໄດ້ຮັບການເຕືອນ. ເຫຼົ່ານີ້
ການເຕືອນໄພຈະຊ່ວຍໃຫ້ທ່ານຊອກຫາຢູ່ໃນການລວບລວມລະຫັດເວລາທີ່ສາມາດພະຍາຍາມຂຽນເຂົ້າໄປໃນສະຕຣິງ
ຄົງທີ່, ແຕ່ວ່າພຽງແຕ່ຖ້າທ່ານໄດ້ລະມັດລະວັງຫຼາຍກ່ຽວກັບການນໍາໃຊ້ "const" ໃນການປະກາດ
ແລະຕົ້ນແບບ. ຖ້າບໍ່ດັ່ງນັ້ນ, ມັນຈະເປັນສິ່ງລົບກວນ. ນີ້ແມ່ນເຫດຜົນທີ່ພວກເຮົາບໍ່ໄດ້ເຮັດ
- ຝາ ຮ້ອງຂໍການເຕືອນເຫຼົ່ານີ້.

ໃນ​ເວ​ລາ​ທີ່​ການ​ສັງ​ລວມ C ++, ເຕືອນ​ກ່ຽວ​ກັບ​ການ​ປ່ຽນ​ແປງ​ທີ່​ຖືກ​ສະ​ແດງ​ໃຫ້​ເຫັນ​ຈາກ​ຕົວ​ຫນັງ​ສື​ສະ​ຕ​ຣິງ​ເປັນ "char
*". ການເຕືອນນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນສໍາລັບໂຄງການ C++.

- Wclobbered
ເຕືອນສໍາລັບຕົວແປທີ່ອາດຈະມີການປ່ຽນແປງໂດຍ longjmp or vfork. ການ​ເຕືອນ​ໄພ​ນີ້​ຍັງ​
ເປີດໃຊ້ໂດຍ -Wextra.

- ການ​ປ່ຽນ​ແປງ​
ເຕືອນສໍາລັບການແປງ implicit ທີ່ອາດຈະມີການປ່ຽນແປງມູນຄ່າ. ນີ້ລວມມີການແປງ
ລະຫວ່າງຈິງ ແລະຈຳນວນເຕັມ, ເຊັ່ນ "abs (x)" ເມື່ອ "x" ແມ່ນ "ຄູນ"; ການປ່ຽນແປງລະຫວ່າງ
ເຊັນແລະບໍ່ໄດ້ເຊັນ, ເຊັ່ນ "unsigned ui = -1"; ແລະການແປງເປັນປະເພດຂະຫນາດນ້ອຍ, ເຊັ່ນ:
"sqrtf (M_PI)". ຢ່າເຕືອນສໍາລັບສຽງໂຫວດທັງຫມົດຢ່າງຊັດເຈນເຊັ່ນ "abs ((int) x)" ແລະ "ui =
(unsigned) -1", ຫຼືຖ້າຄ່າບໍ່ມີການປ່ຽນແປງໂດຍການແປງເຊັ່ນໃນ "abs (2.0)".
ຄຳເຕືອນກ່ຽວກັບການແປງລະຫວ່າງຈຳນວນທີ່ລົງລາຍເຊັນ ແລະບໍ່ໄດ້ເຊັນສາມາດຖືກປິດການນຳໃຊ້ໄດ້ໂດຍ
ການນໍາໃຊ້ -Wno-sign-ແປງ.

ສໍາລັບ C++, ຍັງເຕືອນສໍາລັບການແກ້ໄຂ overload ສັບສົນສໍາລັບການປ່ຽນແປງທີ່ກໍານົດໂດຍຜູ້ໃຊ້; ແລະ
ການປ່ຽນແປງທີ່ບໍ່ເຄີຍໃຊ້ຕົວປະຕິບັດການແປງປະເພດ: ການແປງເປັນ "void",
ປະເພດດຽວກັນ, ຊັ້ນພື້ນຖານຫຼືການອ້າງອີງເຖິງພວກມັນ. ຄໍາເຕືອນກ່ຽວກັບການແປງລະຫວ່າງ
ຈຳນວນເຕັມທີ່ລົງນາມ ແລະບໍ່ໄດ້ເຊັນແມ່ນຖືກປິດການນຳໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນໃນ C++ ເວັ້ນເສຍແຕ່ -Wsign ການ​ປ່ຽນ​ແປງ​
ຖືກເປີດໃຊ້ຢ່າງຈະແຈ້ງ.

-Wno-conversion-null (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ຢ່າເຕືອນສໍາລັບການແປງລະຫວ່າງ "NULL" ແລະປະເພດທີ່ບໍ່ແມ່ນຕົວຊີ້. -Wconversion-null is
ເປີດໃຊ້ຕາມຄ່າເລີ່ມຕົ້ນ.

-Wzero-as-null-pointer-constant (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນເມື່ອຕົວໜັງສື '0' ຖືກໃຊ້ເປັນຄ່າຄົງທີ່ຕົວຊີ້ null. ນີ້ສາມາດເປັນປະໂຫຍດກັບ
ອຳນວຍຄວາມສະດວກໃນການປ່ຽນເປັນ "nullptr" ໃນ C++11.

- ຮ່າງກາຍອ່ອນເພຍ
ເຕືອນ ຖ້າ ຫາກ ວ່າ ຮ່າງ ກາຍ ເປົ່າ ເກີດ ຂຶ້ນ ໃນ if, ອື່ນ or do ໃນຂະນະທີ່ ຖະແຫຼງການ. ການເຕືອນໄພນີ້ແມ່ນ
ຍັງເປີດໃຊ້ງານໂດຍ -Wextra.

-Wenum ປຽບທຽບ
ເຕືອນກ່ຽວກັບການປຽບທຽບລະຫວ່າງຄ່າຂອງປະເພດການນັບຈໍານວນທີ່ແຕກຕ່າງກັນ. ໃນ C++ enumeral
ບໍ່ກົງກັນໃນການສະແດງອອກຕາມເງື່ອນໄຂຍັງຖືກວິນິດໄສແລະການເຕືອນໄພຖືກເປີດໃຊ້ໂດຍ
ຄ່າເລີ່ມຕົ້ນ. ໃນ C ຄໍາເຕືອນນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ.

-Wjump-misses-init (C, Objective-C ເທົ່ານັ້ນ)
ເຕືອນຖ້າຄຳຖະແຫຼງ “goto” ຫຼື ຄຳຖະແຫຼງ “ສະຫຼັບ” ໂດດໄປຂ້າງໜ້າ
ການເລີ່ມຕົ້ນຂອງຕົວແປ, ຫຼືໂດດກັບຄືນໄປຫາປ້າຍຊື່ຫຼັງຈາກຕົວແປໄດ້
ເລີ່ມຕົ້ນ. ນີ້ພຽງແຕ່ເຕືອນກ່ຽວກັບຕົວແປທີ່ເລີ່ມຕົ້ນເມື່ອພວກເຂົາຢູ່
ປະກາດ. ການເຕືອນນີ້ແມ່ນສະຫນັບສະຫນູນພຽງແຕ່ C ແລະ Objective-C; ໃນ C++ ປະເພດນີ້
ສາຂາແມ່ນຄວາມຜິດພາດໃນກໍລະນີໃດກໍ່ຕາມ.

-Wjump-misses-init ແມ່ນລວມຢູ່ໃນ -Wc++-compat. ມັນສາມາດໄດ້ຮັບການພິການດ້ວຍ
-Wno-jump-misses-init ທາງເລືອກ.

-Wsign-ປຽບທຽບ
ເຕືອນເມື່ອການປຽບທຽບລະຫວ່າງຄ່າທີ່ລົງລາຍເຊັນ ແລະ ບໍ່ໄດ້ລົງລາຍເຊັນສາມາດເຮັດໃຫ້ເກີດຄວາມຜິດພາດໄດ້
ຜົນໄດ້ຮັບເມື່ອຄ່າທີ່ໄດ້ເຊັນຖືກປ່ຽນເປັນ unsigned. ການເຕືອນນີ້ຍັງຖືກເປີດໃຊ້ງານ
by -Wextra; ເພື່ອ​ໃຫ້​ໄດ້​ຮັບ​ຄໍາ​ເຕືອນ​ອື່ນໆ​ຂອງ​ -Wextra ໂດຍບໍ່ມີການເຕືອນນີ້, ໃຊ້ -Wextra
-Wno-sign-ປຽບທຽບ.

-Wsign ການ​ປ່ຽນ​ແປງ​
ເຕືອນສໍາລັບການແປງ implicit ທີ່ອາດຈະມີການປ່ຽນແປງເຄື່ອງຫມາຍຂອງຄ່າ integer, ເຊັ່ນ:
ການມອບໝາຍຈຳນວນເຕັມທີ່ສະແດງອອກໃຫ້ກັບຕົວແປຈຳນວນເຕັມທີ່ບໍ່ໄດ້ເຊັນ. ຈະແຈ້ງ
ໂຍນສຽງເຕືອນໃຫ້ມິດງຽບ. ໃນ C, ທາງເລືອກນີ້ຖືກເປີດໃຊ້ໂດຍ - ການ​ປ່ຽນ​ແປງ​.

-waddress
ເຕືອນກ່ຽວກັບການນຳໃຊ້ທີ່ຢູ່ຄວາມຈຳທີ່ໜ້າສົງໄສ. ເຫຼົ່ານີ້ລວມມີການນໍາໃຊ້ທີ່ຢູ່ຂອງ a
ຟັງຊັນໃນການສະແດງເງື່ອນໄຂ, ເຊັ່ນ "void func(void); if (func)", ແລະ
ການປຽບທຽບກັບທີ່ຢູ່ໜ່ວຍຄວາມຈຳຂອງຕົວໜັງສືສະຕຣິງ ເຊັ່ນ "ຖ້າ (x == "abc")".
ການ​ນໍາ​ໃຊ້​ດັ່ງ​ກ່າວ​ໂດຍ​ປົກ​ກະ​ຕິ​ຊີ້​ບອກ​ເຖິງ​ຄວາມ​ຜິດ​ພາດ​ຂອງ​ໂຄງ​ການ​: ທີ່​ຢູ່​ຂອງ​ຫນ້າ​ທີ່​ສະ​ເຫມີ​ໄປ​
ປະເມີນເປັນຄວາມຈິງ, ດັ່ງນັ້ນການນໍາໃຊ້ຂອງພວກເຂົາໃນເງື່ອນໄຂມັກຈະຊີ້ໃຫ້ເຫັນວ່ານັກຂຽນໂປລແກລມ
ລືມວົງເລັບໃນການໂທຟັງຊັນ; ແລະການປຽບທຽບກັບຕົວໜັງສືສະຕຣິງ
ສົ່ງຜົນໃຫ້ເກີດພຶດຕິກຳທີ່ບໍ່ລະບຸ ແລະບໍ່ສາມາດເຄື່ອນທີ່ໃນ C, ດັ່ງນັ້ນພວກມັນມັກຈະຊີ້ບອກ
ທີ່ນັກຂຽນໂປລແກລມຕັ້ງໃຈໃຊ້ "strcmp". ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ.

-Wlogical-op
ເຕືອນກ່ຽວກັບການນຳໃຊ້ຕົວປະຕິບັດການຢ່າງມີເຫດຜົນໃນການສະແດງອອກ. ນີ້ປະກອບມີການນໍາໃຊ້
ຕົວປະຕິບັດການຢ່າງມີເຫດຜົນໃນສະພາບການທີ່ຕົວປະຕິບັດການທີ່ສະຫລາດເລັກນ້ອຍແມ່ນຄາດວ່າຈະຖືກຄາດຫວັງ.

-Waggregate-ກັບຄືນ
ເຕືອນຖ້າຫາກວ່າຫນ້າທີ່ໃດທີ່ສົ່ງຄືນໂຄງສ້າງຫຼືສະຫະພັນໄດ້ຖືກກໍານົດຫຼືເອີ້ນວ່າ. (ໃນ
ພາ​ສາ​ທີ່​ທ່ານ​ສາ​ມາດ​ກັບ​ຄືນ array ໄດ້​, ນີ້​ຍັງ elicits ຄໍາ​ເຕືອນ​.

- ຄຸນ​ລັກ​ສະ​ນະ Wno​
ຢ່າເຕືອນຖ້າ "__attribute__" ທີ່ບໍ່ຄາດຄິດຖືກໃຊ້, ເຊັ່ນ: ຄຸນລັກສະນະທີ່ບໍ່ຮູ້ຈັກ,
ຄຸນ​ລັກ​ສະ​ນະ​ການ​ທໍາ​ງານ​ນໍາ​ໃຊ້​ກັບ​ຕົວ​ແປ​, ແລະ​ອື່ນໆ. ນີ້​ຈະ​ບໍ່​ຢຸດ​ເຊົາ​ການ​ຜິດ​ພາດ​ສໍາ​ລັບ​ການ​
ການນໍາໃຊ້ບໍ່ຖືກຕ້ອງຂອງຄຸນລັກສະນະທີ່ສະຫນັບສະຫນູນ.

-Wno-builtin-macro-redefined
ຢ່າເຕືອນວ່າມາໂຄໃນຕົວທີ່ແນ່ນອນຖືກກຳນົດຄືນໃໝ່. ນີ້ສະກັດກັ້ນການເຕືອນໄພສໍາລັບ
ນິຍາມໃໝ່ຂອງ "__TIMESTAMP__", "__TIME__", "__DATE__", "__FILE__", ແລະ
"__BASE_FILE__".

-Wstrict-prototypes (C ແລະ Objective-C ເທົ່ານັ້ນ)
ເຕືອນຖ້າຟັງຊັນໃດໜຶ່ງຖືກປະກາດ ຫຼືກຳນົດໂດຍບໍ່ລະບຸປະເພດອາກິວເມັນ. (ອັນ
ຄໍານິຍາມຟັງຊັນແບບເກົ່າແມ່ນອະນຸຍາດໂດຍບໍ່ມີການເຕືອນຖ້າຫາກວ່ານໍາຫນ້າດ້ວຍ a
ການປະກາດທີ່ລະບຸປະເພດຂອງການໂຕ້ຖຽງ.)

-Wold-style-ປະກາດ (C ແລະ Objective-C ເທົ່ານັ້ນ)
ເຕືອນສໍາລັບການນໍາໃຊ້ທີ່ລ້າສະໄຫມ, ອີງຕາມມາດຕະຖານ C, ໃນການປະກາດ. ສໍາລັບ
ຕົວຢ່າງ, ເຕືອນຖ້າຕົວລະບຸລະດັບການເກັບຮັກສາເຊັ່ນ "static" ບໍ່ແມ່ນສິ່ງທໍາອິດໃນ a
ຖະແຫຼງການ. ການເຕືອນໄພນີ້ຍັງຖືກເປີດໃຊ້ໂດຍ -Wextra.

-Wold-style-ນິຍາມ (C ແລະ Objective-C ເທົ່ານັ້ນ)
ເຕືອນຖ້າໃຊ້ນິຍາມຟັງຊັນແບບເກົ່າ. ມີການເຕືອນໄພເຖິງແມ່ນວ່າຈະມີ
ຕົ້ນແບບກ່ອນໜ້ານີ້.

-Wmissing-parameter-type (C ແລະ Objective-C ເທົ່ານັ້ນ)
ພາຣາມິເຕີຟັງຊັນຖືກປະກາດໂດຍບໍ່ມີຕົວລະບຸປະເພດໃນຟັງຊັນແບບ K&R:

void foo(bar) { }

ການເຕືອນໄພນີ້ຍັງຖືກເປີດໃຊ້ໂດຍ -Wextra.

-Wmissing-prototypes (C ແລະ Objective-C ເທົ່ານັ້ນ)
ເຕືອນຖ້າຟັງຊັນທົ່ວໂລກຖືກກຳນົດໂດຍບໍ່ມີການປະກາດຕົ້ນແບບກ່ອນໜ້າ. ນີ້
ການເຕືອນໄພແມ່ນອອກເຖິງແມ່ນວ່າຄໍານິຍາມຕົວມັນເອງສະຫນອງຕົ້ນແບບ. ຈຸດປະສົງແມ່ນເພື່ອ
ກວດຫາຟັງຊັນທົ່ວໂລກທີ່ບໍ່ໄດ້ປະກາດໃນໄຟລ໌ສ່ວນຫົວ.

-Wmissing ການ​ປະ​ກາດ​
ເຕືອນຖ້າຟັງຊັນທົ່ວໂລກຖືກກຳນົດໂດຍບໍ່ມີການປະກາດກ່ອນໜ້າ. ເຮັດແນວນັ້ນເຖິງແມ່ນວ່າ
ຄໍານິຍາມຂອງຕົວມັນເອງສະຫນອງຕົ້ນແບບ. ໃຊ້ຕົວເລືອກນີ້ເພື່ອກວດຫາທົ່ວໂລກ
ຟັງຊັນທີ່ບໍ່ໄດ້ຖືກປະກາດໃນໄຟລ໌ header. ໃນ C ++, ບໍ່ມີຄໍາເຕືອນໃດໆອອກສໍາລັບ
ແມ່ແບບຟັງຊັນ, ຫຼືສໍາລັບຟັງຊັນ inline, ຫຼືສໍາລັບຫນ້າທີ່ຢູ່ໃນ namespaces ທີ່ບໍ່ເປີດເຜີຍຊື່.

-Wmissing-field-initializers
ເຕືອນຖ້າຕົວເລີ່ມຕົ້ນຂອງໂຄງສ້າງມີບາງຊ່ອງຂໍ້ມູນຫາຍໄປ. ຕົວຢ່າງ, ຕໍ່ໄປນີ້
ລະຫັດຈະເຮັດໃຫ້ເກີດການເຕືອນດັ່ງກ່າວ, ເພາະວ່າ "xh" ແມ່ນສູນ implicitly:

struct s { int f, g, h; } ;
ໂຄງສ້າງ sx = { 3, 4 };

ຕົວເລືອກນີ້ບໍ່ໄດ້ເຕືອນກ່ຽວກັບຕົວກໍານົດເບື້ອງຕົ້ນ, ດັ່ງນັ້ນການດັດແກ້ຕໍ່ໄປນີ້
ຈະບໍ່ກະຕຸ້ນເຕືອນ:

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

ການເຕືອນໄພນີ້ແມ່ນລວມຢູ່ໃນ -Wextra. ເພື່ອໃຫ້ໄດ້ຮັບອື່ນໆ -Wextra ຄໍາ​ເຕືອນ​ໂດຍ​ບໍ່​ມີ​ການ​ນີ້​,
ການນໍາໃຊ້ -Wextra -Wno-missing-field-initializers.

-Wmissing-format-attribute
ເຕືອນກ່ຽວກັບຕົວຊີ້ຟັງຊັນທີ່ອາດຈະເປັນຕົວສະຫມັກສໍາລັບຄຸນລັກສະນະ "ຮູບແບບ". ຫມາຍ​ເຫດ​
ເຫຼົ່ານີ້ແມ່ນພຽງແຕ່ຜູ້ສະຫມັກທີ່ເປັນໄປໄດ້, ບໍ່ແມ່ນຢ່າງແທ້ຈິງ. GCC ຈະເດົາຟັງຊັນນັ້ນ
ຕົວຊີ້ດ້ວຍຄຸນລັກສະນະ "ຮູບແບບ" ທີ່ຖືກນໍາໃຊ້ໃນການມອບຫມາຍ, ການເລີ່ມຕົ້ນ,
ພາລາມິເຕີ passing ຫຼື return statements ຄວນມີຄຸນສົມບັດ "format" ທີ່ສອດຄ້ອງກັນ
ໃນ​ປະ​ເພດ​ຜົນ​ໄດ້​ຮັບ​. ເຊັ່ນ: ຊ້າຍມືຂອງການມອບຫມາຍຫຼືການເລີ່ມຕົ້ນ,
ປະເພດຂອງຕົວແປພາລາມິເຕີ, ຫຼືປະເພດຜົນຕອບແທນຂອງຟັງຊັນທີ່ບັນຈຸ
ຕາມລໍາດັບຄວນມີຄຸນລັກສະນະ "ຮູບແບບ" ເພື່ອຫຼີກເວັ້ນການເຕືອນ.

GCC ຍັງຈະເຕືອນກ່ຽວກັບຄໍານິຍາມຫນ້າທີ່ອາດຈະເປັນຜູ້ສະຫມັກສໍາລັບ "ຮູບແບບ"
ຄຸນ​ລັກ​ສະ​ນະ. ອີກເທື່ອຫນຶ່ງ, ເຫຼົ່ານີ້ແມ່ນພຽງແຕ່ຜູ້ສະຫມັກທີ່ເປັນໄປໄດ້. GCC ຈະຄາດເດົາວ່າ "ຮູບແບບ"
ຄຸນ​ລັກ​ສະ​ນະ​ອາດ​ຈະ​ເຫມາະ​ສົມ​ສໍາ​ລັບ​ການ​ທໍາ​ງານ​ທີ່​ເອີ້ນ​ວ່າ​ຫນ້າ​ທີ່​ເຊັ່ນ "vprintf​"
ຫຼື "vscanf", ແຕ່ນີ້ອາດຈະບໍ່ແມ່ນສະເຫມີໄປ, ແລະບາງຫນ້າທີ່
"ຮູບແບບ" ຄຸນລັກສະນະທີ່ເຫມາະສົມອາດຈະບໍ່ຖືກກວດພົບ.

-Wno-multichar
ຢ່າເຕືອນຖ້າ multicharacter ຄົງທີ່ ('FOOF') ຖືກ​ນໍາ​ໃຊ້​. ປົກກະຕິແລ້ວພວກເຂົາຊີ້ບອກ a
typo ໃນລະຫັດຂອງຜູ້ໃຊ້, ຍ້ອນວ່າພວກເຂົາມີມູນຄ່າການຈັດຕັ້ງປະຕິບັດ, ແລະບໍ່ຄວນຈະເປັນ
ໃຊ້ໃນລະຫັດແບບພົກພາ.

-Wnormalized=
ໃນ ISO C ແລະ ISO C ++, ສອງຕົວລະບຸຈະແຕກຕ່າງກັນຖ້າພວກເຂົາເປັນລໍາດັບທີ່ແຕກຕ່າງກັນຂອງ
ຕົວລະຄອນ. ຢ່າງໃດກໍຕາມ, ບາງຄັ້ງເມື່ອຕົວລະຄອນຢູ່ນອກຊຸດຕົວອັກສອນ ASCII ພື້ນຖານ
ຖືກນໍາໃຊ້, ທ່ານສາມາດມີສອງລໍາດັບລັກສະນະທີ່ແຕກຕ່າງກັນທີ່ມີລັກສະນະດຽວກັນ. ເພື່ອຫຼີກເວັ້ນການ
ຄວາມສັບສົນ, ມາດຕະຖານ ISO 10646 ກໍານົດບາງອັນ ຄວາມເປັນປົກກະຕິ ກົດລະບຽບ ເຊິ່ງເມື່ອນຳໃຊ້ແລ້ວ
ໃຫ້​ແນ່​ໃຈວ່​າ​ວ່າ​ສອງ​ລໍາ​ດັບ​ທີ່​ຄ້າຍ​ຄື​ກັນ​ໄດ້​ກາຍ​ເປັນ​ລໍາ​ດັບ​ດຽວ​ກັນ​. GCC
ສາມາດເຕືອນທ່ານຖ້າຫາກວ່າທ່ານກໍາລັງໃຊ້ຕົວລະບຸທີ່ຍັງບໍ່ທັນໄດ້ປົກກະຕິ; ທາງເລືອກນີ້
ຄວບຄຸມການເຕືອນໄພນັ້ນ.

ມີສີ່ລະດັບຂອງການເຕືອນໄພສະຫນັບສະຫນູນໂດຍ GCC. ຄ່າເລີ່ມຕົ້ນແມ່ນ -Wnormalized=nfc,
ເຊິ່ງເຕືອນກ່ຽວກັບຕົວລະບຸໃດໆທີ່ບໍ່ໄດ້ຢູ່ໃນຮູບແບບປົກກະຕິ ISO 10646 "C",
NFC. NFC ແມ່ນຮູບແບບທີ່ແນະນໍາສໍາລັບການນໍາໃຊ້ສ່ວນໃຫຍ່.

ແຕ່ຫນ້າເສຍດາຍ, ມີບາງຕົວອັກສອນທີ່ອະນຸຍາດໃຫ້ຢູ່ໃນຕົວລະບຸໂດຍ ISO C ແລະ ISO C++
ວ່າ, ເມື່ອປ່ຽນເປັນ NFC, ບໍ່ໄດ້ຖືກອະນຸຍາດໃຫ້ຢູ່ໃນຕົວລະບຸ. ນັ້ນແມ່ນ, ບໍ່ມີທາງ
ເພື່ອໃຊ້ສັນຍາລັກເຫຼົ່ານີ້ຢູ່ໃນ ISO C ຫຼື C++ ແບບພົກພາ ແລະມີຕົວລະບຸທັງໝົດຂອງທ່ານໃນ NFC.
-Wnormalized=id ສະກັດກັ້ນການເຕືອນໄພສໍາລັບລັກສະນະເຫຼົ່ານີ້. ຫວັງວ່າໃນອະນາຄົດ
ສະບັບຂອງມາດຕະຖານທີ່ກ່ຽວຂ້ອງຈະແກ້ໄຂອັນນີ້, ຊຶ່ງເປັນເຫດຜົນທີ່ວ່າທາງເລືອກນີ້ບໍ່ແມ່ນ
ຄ່າເລີ່ມຕົ້ນ.

ທ່ານສາມາດປິດການເຕືອນໄພສໍາລັບຕົວອັກສອນທັງຫມົດໂດຍການຂຽນ -Wnormalized=noneທີ່ຢູ່ ທ່ານ
ພຽງແຕ່ຕ້ອງການທີ່ຈະເຮັດສິ່ງນີ້ຖ້າຫາກວ່າທ່ານກໍາລັງໃຊ້ບາງໂຄງການປົກກະຕິອື່ນໆ (ເຊັ່ນ:
"D"), ເພາະວ່າຖ້າບໍ່ດັ່ງນັ້ນທ່ານສາມາດສ້າງແມງໄມ້ທີ່ເປັນໄປບໍ່ໄດ້ທີ່ຮູ້ຫນັງສືໄດ້ຢ່າງງ່າຍດາຍ
ເບິ່ງ

ບາງຕົວອັກສອນໃນ ISO 10646 ມີຄວາມໝາຍທີ່ແຕກຕ່າງ ແຕ່ເບິ່ງຄືກັນໃນບາງຕົວອັກສອນ
ຫຼືວິທີການສະແດງ, ໂດຍສະເພາະເມື່ອການຈັດຮູບແບບໄດ້ຖືກນໍາໃຊ້. ຕົວ​ຢ່າງ
"\u207F", "SUPERSCRIPT Latin LETTER N", ຈະສະແດງຄືກັບ "n" ປົກກະຕິ.
ທີ່ໄດ້ວາງໄວ້ໃນຕົວຫຍໍ້. ISO 10646 ກໍານົດ NFKC ຄວາມເປັນປົກກະຕິ
ໂຄງການທີ່ຈະປ່ຽນສິ່ງເຫຼົ່ານີ້ເຂົ້າໄປໃນຮູບແບບມາດຕະຖານເຊັ່ນດຽວກັນ, ແລະ GCC ຈະເຕືອນຖ້າທ່ານ
ລະຫັດບໍ່ຢູ່ໃນ NFKC ຖ້າທ່ານໃຊ້ -Wnormalized=nfkc. ການເຕືອນໄພນີ້ແມ່ນປຽບທຽບກັບ
ເຕືອນກ່ຽວກັບຕົວລະບຸຕົວຕົນທີ່ມີຕົວອັກສອນ O ເພາະວ່າມັນອາດຈະສັບສົນ
ດ້ວຍຕົວເລກ 0, ແລະດັ່ງນັ້ນບໍ່ແມ່ນຄ່າເລີ່ມຕົ້ນ, ແຕ່ອາດຈະເປັນປະໂຫຍດເປັນລະຫັດທ້ອງຖິ່ນ
ສົນທິສັນຍາຖ້າສະພາບແວດລ້ອມການຂຽນໂປລແກລມບໍ່ສາມາດຖືກແກ້ໄຂເພື່ອສະແດງສິ່ງເຫຼົ່ານີ້
ຕົວ​ອັກ​ສອນ​ທີ່​ແຕກ​ຕ່າງ​ກັນ​.

-Wno-deprecated
ຢ່າເຕືອນກ່ຽວກັບການນຳໃຊ້ຄຸນສົມບັດທີ່ບໍ່ໄດ້ນຳໃຊ້.

-Wno-deprecated-ປະກາດ
ຢ່າເຕືອນກ່ຽວກັບການໃຊ້ຟັງຊັນ, ຕົວແປ, ແລະປະເພດທີ່ຖືກໝາຍວ່າຖືກຍົກເລີກໂດຍ
ການນໍາໃຊ້ຄຸນສົມບັດ "ປະຕິເສດ".

-Wno-ລົ້ນ
ຢ່າເຕືອນກ່ຽວກັບການລວບລວມເວລາ overflow ໃນການສະແດງອອກຄົງທີ່.

-Woverride-init (C ແລະ Objective-C ເທົ່ານັ້ນ)
ເຕືອນຖ້າຊ່ອງຂໍ້ມູນເບື້ອງຕົ້ນທີ່ບໍ່ມີຜົນກະທົບຂ້າງຄຽງຈະຖືກ overridden ໃນເວລາທີ່ການນໍາໃຊ້ທີ່ກໍານົດ
ຕົວເລີ່ມຕົ້ນ.

ການເຕືອນໄພນີ້ແມ່ນລວມຢູ່ໃນ -Wextra. ເພື່ອໃຫ້ໄດ້ຮັບອື່ນໆ -Wextra ຄໍາ​ເຕືອນ​ໂດຍ​ບໍ່​ມີ​ການ​ນີ້​,
ການນໍາໃຊ້ -Wextra -Wno-override-init.

- ຫໍ່
ເຕືອນຖ້າໂຄງສ້າງແມ່ນໃຫ້ຄຸນລັກສະນະບັນຈຸ, ແຕ່ຄຸນລັກສະນະບັນຈຸບໍ່ມີ
ຜົນກະທົບຕໍ່ຮູບແບບຫຼືຂະຫນາດຂອງໂຄງສ້າງ. ໂຄງສ້າງດັ່ງກ່າວອາດຈະຖືກຈັດໃສ່ຜິດ
ຜົນ​ປະ​ໂຫຍດ​ພຽງ​ເລັກ​ນ້ອຍ​. ຕົວຢ່າງ, ໃນລະຫັດນີ້, ຕົວແປ "fx" ໃນ "struct bar" ຈະ
ຖືກຈັດບໍ່ຖືກຕ້ອງເຖິງແມ່ນວ່າ "ແຖບໂຄງສ້າງ" ບໍ່ມີຕົວມັນເອງມີຄຸນລັກສະນະບັນຈຸ:

ໂຄງສ້າງ foo {
intx;
char a,b,c,d;
} __attribute __ ((ບັນຈຸ));
ແຖບໂຄງສ້າງ {
char z ;
ໂຄງສ້າງ foo f;
};

-Wpacked-bitfield-compat
ຊຸດ 4.1, 4.2 ແລະ 4.3 ຂອງ GCC ບໍ່ສົນໃຈຄຸນສົມບັດ "packed" ໃນ bit-fields ຂອງປະເພດ.
"char". ນີ້ໄດ້ຖືກແກ້ໄຂໃນ GCC 4.4 ແຕ່ການປ່ຽນແປງສາມາດນໍາໄປສູ່ຄວາມແຕກຕ່າງໃນ
ຮູບ​ແບບ​ໂຄງ​ສ້າງ​. GCC ແຈ້ງໃຫ້ທ່ານຮູ້ເມື່ອການຊົດເຊີຍຂອງຊ່ອງຂໍ້ມູນດັ່ງກ່າວມີການປ່ຽນແປງໃນ GCC
4.4. ສໍາລັບຕົວຢ່າງ, ບໍ່ມີຊ່ອງຫວ່າງ 4-bit ລະຫວ່າງພາກສະຫນາມ "a" ແລະ "b" ໃນນີ້
ໂຄງສ້າງ:

ໂຄງສ້າງ foo
{
char a:4;
char b:8;
} __attribute__ ((ບັນຈຸ));

ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ. ໃຊ້ -Wno-packed-bitfield-compat ເພື່ອປິດການທໍາງານນີ້
ຄຳ ເຕືອນ.

- ແຜ່ນແພ
ເຕືອນຖ້າຫາກວ່າ padding ແມ່ນລວມຢູ່ໃນໂຄງສ້າງ, ບໍ່ວ່າຈະເປັນການຈັດອົງປະກອບຂອງ
ໂຄງສ້າງຫຼືການຈັດໂຄງສ້າງທັງຫມົດ. ບາງຄັ້ງເມື່ອສິ່ງນີ້ເກີດຂື້ນມັນກໍ່ເປັນໄປໄດ້
ເພື່ອ rearrange ທົ່ງນາຂອງໂຄງສ້າງເພື່ອຫຼຸດຜ່ອນ padding ແລະດັ່ງນັ້ນຈິ່ງເຮັດໃຫ້
ໂຄງສ້າງຂະຫນາດນ້ອຍກວ່າ.

-Wredundant-decls
ເຕືອນວ່າມີອັນໃດຖືກປະກາດຫຼາຍກວ່າຫນຶ່ງຄັ້ງໃນຂອບເຂດດຽວກັນ, ເຖິງແມ່ນວ່າໃນກໍລະນີ
ການປະກາດຫຼາຍອັນຖືກຕ້ອງ ແລະບໍ່ມີຫຍັງປ່ຽນແປງ.

-Wnested-externs (C ແລະ Objective-C ເທົ່ານັ້ນ)
ເຕືອນຖ້າມີການປະກາດ "extern" ຢູ່ໃນຟັງຊັນ.

- Winline
ເຕືອນຖ້າຫາກວ່າຟັງຊັນບໍ່ສາມາດ inlined ແລະມັນຖືກປະກາດເປັນ inline. ເຖິງແມ່ນວ່າມີນີ້
ທາງເລືອກ, compiler ຈະບໍ່ເຕືອນກ່ຽວກັບຄວາມລົ້ມເຫຼວຂອງຫນ້າທີ່ inline ປະກາດໃນ
ສ່ວນຫົວຂອງລະບົບ.

compiler ໃຊ້ຄວາມຫລາກຫລາຍຂອງ heuristics ເພື່ອກໍານົດວ່າຈະ inline a ຫຼືບໍ່
ຫນ້າທີ່. ຕົວຢ່າງ, compiler ພິຈາລະນາຂະຫນາດຂອງຫນ້າທີ່ເປັນ
inlined ແລະຈໍານວນຂອງ inlining ທີ່ໄດ້ເຮັດແລ້ວໃນຫນ້າທີ່ປະຈຸບັນ.
ດັ່ງນັ້ນ, ເບິ່ງຄືວ່າການປ່ຽນແປງທີ່ບໍ່ສໍາຄັນໃນໂຄງການແຫຼ່ງສາມາດເຮັດໃຫ້ເກີດ
ຄໍາ​ເຕືອນ​ທີ່​ຜະ​ລິດ​ໂດຍ​ - Winline ປາກົດ ຫຼືຫາຍໄປ.

-Wno-invalid-offsetof (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ສະກັດກັ້ນການເຕືອນໄພຈາກການນໍາໃຊ້ ຊົດເຊີຍຂອງ ມະຫາພາກເປັນປະເພດທີ່ບໍ່ແມ່ນ POD. ອີງ​ຕາມ
ມາດຕະຖານ ISO C++ ປີ 1998, ນຳໃຊ້ ຊົດເຊີຍຂອງ ປະເພດທີ່ບໍ່ແມ່ນ POD ແມ່ນບໍ່ໄດ້ກໍານົດ. ໃນ
ການປະຕິບັດ C++ ທີ່ມີຢູ່ແລ້ວ, ຢ່າງໃດກໍຕາມ, ຊົດເຊີຍຂອງ ໂດຍປົກກະຕິໃຫ້ຜົນໄດ້ຮັບທີ່ມີຄວາມຫມາຍ
ເຖິງແມ່ນວ່າໃນເວລາທີ່ນໍາໃຊ້ກັບບາງປະເພດຂອງປະເພດທີ່ບໍ່ແມ່ນ POD. (ເຊັ່ນ: ງ່າຍດາຍ ໂຄງສ້າງ ທີ່
ລົ້ມເຫລວທີ່ຈະເປັນປະເພດ POD ພຽງແຕ່ໂດຍການມີ constructor.) ທຸງນີ້ແມ່ນສໍາລັບ
ຜູ້ໃຊ້ທີ່ຮູ້ວ່າພວກເຂົາກໍາລັງຂຽນລະຫັດ nonportable ແລະຜູ້ທີ່ມີເຈດຕະນາ
ເລືອກທີ່ຈະບໍ່ສົນໃຈຄໍາເຕືອນກ່ຽວກັບມັນ.

ຂໍ້​ຈໍາ​ກັດ​ກ່ຽວ​ກັບ​ການ​ ຊົດເຊີຍຂອງ ອາດຈະໄດ້ຮັບການຜ່ອນຄາຍໃນມາດຕະຖານ C ++ ຮຸ່ນໃນອະນາຄົດ.

-Wno-int-to-pointer-cast
ສະກັດກັ້ນການເຕືອນຈາກຄາສທໄປຫາປະເພດຕົວຊີ້ຂອງຈຳນວນເຕັມທີ່ຂະໜາດຕ່າງກັນ. ໃນ
C++, ການສົ່ງສັນຍານໄປຫາປະເພດຕົວຊີ້ຂອງຂະໜາດນ້ອຍກວ່ານັ້ນແມ່ນຄວາມຜິດພາດ. Wint-to-pointer-cast is
ເປີດໃຊ້ຕາມຄ່າເລີ່ມຕົ້ນ.

-Wno-pointer-to-int-cast (C ແລະ Objective-C ເທົ່ານັ້ນ)
ສະກັດກັ້ນການເຕືອນໄພຈາກການຄາສທຈາກຕົວຊີ້ໄປຫາປະເພດຈໍານວນເຕັມຂອງຂະຫນາດທີ່ແຕກຕ່າງກັນ.

-Winvalid-pch
ເຕືອນ ຖ້າພົບເຫັນສ່ວນຫົວທີ່ລວບລວມໄວ້ລ່ວງໜ້າຢູ່ໃນເສັ້ນທາງຄົ້ນຫາ ແຕ່ບໍ່ສາມາດນຳໃຊ້ໄດ້.

- ຍາວ - ຍາວ
ເຕືອນຖ້າ ຍາວ ຍາວ ປະເພດຖືກນໍາໃຊ້. ອັນນີ້ຖືກເປີດໃຊ້ໂດຍທັງສອງ - pedantic or - ແບບດັ້ງເດີມ
ໃນໂໝດ ISO C90 ແລະ C++ 98. ເພື່ອຍັບຍັ້ງຂໍ້ຄວາມເຕືອນ, ໃຊ້ -Wno-ຍາວ-ຍາວ.

-Wvariadic-macros
ເຕືອນຖ້າ macro variadic ຖືກໃຊ້ໃນໂຫມດ ISO C90 pedantic, ຫຼື syntax ສຳຮອງ GNU
ເມື່ອຢູ່ໃນໂໝດ ISO C99 pedantic. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ. ເພື່ອຍັບຍັ້ງຂໍ້ຄວາມເຕືອນ, ໃຊ້
-Wno-variadic-macros.

-Wvector-ປະຕິບັດການ-ປະສິດທິພາບ
ເຕືອນຖ້າຫາກວ່າການປະຕິບັດ vector ບໍ່ຖືກປະຕິບັດໂດຍຜ່ານຄວາມສາມາດ SIMD ຂອງສະຖາປັດຕະ.
ສ່ວນໃຫຍ່ແມ່ນເປັນປະໂຫຍດສໍາລັບການປັບປະສິດທິພາບ. ການປະຕິບັດ vector ສາມາດປະຕິບັດໄດ້
"piecewise", ຊຶ່ງຫມາຍຄວາມວ່າການດໍາເນີນງານ scalar ແມ່ນດໍາເນີນຢູ່ໃນທຸກ vector
ອົງປະກອບ; "ໃນຂະຫນານ", ຊຶ່ງຫມາຍຄວາມວ່າການດໍາເນີນງານ vector ໄດ້ຖືກປະຕິບັດໂດຍໃຊ້
ເກັດຂອງປະເພດກວ້າງ, ເຊິ່ງປົກກະຕິແມ່ນປະສິດທິພາບຫຼາຍ; ແລະ "ເປັນໂສດ
scalar", ຊຶ່ງຫມາຍຄວາມວ່າ vector ເຫມາະກັບປະເພດ scalar.

-Wvla
ເຕືອນຖ້າ array ຄວາມຍາວຕົວແປຖືກໃຊ້ໃນລະຫັດ. -Wno-vla ຈະປ້ອງກັນບໍ່ໃຫ້
- pedantic ເຕືອນຂອງອາເຣຄວາມຍາວຕົວແປ.

-Wvolatile-register-var
ເຕືອນຖ້າຕົວແປການລົງທະບຽນຖືກປະກາດວ່າມີການປ່ຽນແປງ. ຕົວແກ້ໄຂການລະເຫີຍບໍ່ໄດ້
ຍັບຍັ້ງການເພີ່ມປະສິດທິພາບທັງຫມົດທີ່ອາດຈະລົບລ້າງການອ່ານແລະ / ຫຼືການຂຽນເພື່ອລົງທະບຽນ
ຕົວແປ. ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ.

-Wdisabled-optimization
ເຕືອນຖ້າບັດການເພີ່ມປະສິດທິພາບທີ່ຮ້ອງຂໍຖືກປິດໃຊ້ງານ. ການເຕືອນໄພນີ້ບໍ່ໄດ້ໂດຍທົ່ວໄປ
ຊີ້ບອກວ່າມີອັນໃດຜິດພາດກັບລະຫັດຂອງເຈົ້າ; ມັນພຽງແຕ່ຊີ້ໃຫ້ເຫັນວ່າ GCC ຂອງ
optimizers ບໍ່ສາມາດຈັດການກັບລະຫັດຢ່າງມີປະສິດທິພາບ. ເລື້ອຍໆ, ບັນຫາແມ່ນວ່າ
ລະຫັດຂອງທ່ານໃຫຍ່ເກີນໄປ ຫຼືສັບສົນເກີນໄປ; GCC ຈະປະຕິເສດການເພີ່ມປະສິດທິພາບໂຄງການໃນເວລາທີ່
ການເພີ່ມປະສິດທິພາບຂອງຕົວມັນເອງມີແນວໂນ້ມທີ່ຈະໃຊ້ເວລາບໍ່ຫຼາຍປານໃດ.

-Wpointer-ເຊັນ​ (C ແລະ Objective-C ເທົ່ານັ້ນ)
ເຕືອນສໍາລັບການໂຕ້ຖຽງຕົວຊີ້ຜ່ານຫຼືການມອບຫມາຍທີ່ມີການລົງນາມທີ່ແຕກຕ່າງກັນ. ນີ້
ທາງເລືອກແມ່ນສະຫນັບສະຫນູນພຽງແຕ່ສໍາລັບ C ແລະ Objective-C. ມັນຫມາຍເຖິງ - ຝາ ແລະໂດຍ
- pedantic, ເຊິ່ງສາມາດໄດ້ຮັບການພິການກັບ -Wno-pointer-sign.

-Wstack-protector
ຕົວເລືອກນີ້ແມ່ນມີການເຄື່ອນໄຫວພຽງແຕ່ເມື່ອ -stack-protector ມີການເຄື່ອນໄຫວ. ມັນເຕືອນກ່ຽວກັບຫນ້າທີ່
ທີ່ຈະບໍ່ໄດ້ຮັບການປົກປ້ອງຈາກການຕີ stack.

-Wno-mudflap
ສະກັດກັ້ນການເຕືອນໄພກ່ຽວກັບການກໍ່ສ້າງທີ່ບໍ່ສາມາດໄດ້ຮັບການນໍາໃຊ້ໂດຍ -fmudflap.

-Woverlength-strings
ເຕືອນກ່ຽວກັບຄ່າຄົງທີ່ຂອງສະຕຣິງທີ່ຍາວກວ່າຄວາມຍາວ "ສູງສຸດຕໍ່າສຸດ".
ລະບຸໄວ້ໃນມາດຕະຖານ C. ໂດຍທົ່ວໄປແລ້ວ compilers ທີ່ທັນສະໄຫມອະນຸຍາດໃຫ້ string ຄົງທີ່
ຍາວກວ່າຂອບເຂດຈໍາກັດຂັ້ນຕໍ່າຂອງມາດຕະຖານ, ແຕ່ບັນດາໂຄງການແບບພົກພາຫຼາຍຄວນ
ຫຼີກເວັ້ນການໃຊ້ສາຍຍາວ.

ຂີດຈຳກັດນຳໃຊ້ ຫຼັງຈາກ string concatenation ຄົງທີ່, ແລະບໍ່ນັບ trailing
NUL. ໃນ C90, ຂີດຈໍາກັດແມ່ນ 509 ຕົວອັກສອນ; ໃນ C99, ມັນໄດ້ຖືກຍົກຂຶ້ນມາເປັນ 4095. C ++ 98 ບໍ່
ບໍ່ໄດ້ລະບຸຄ່າສູງສຸດຕໍາ່ສຸດທີ່ເປັນມາດຕະຖານ, ດັ່ງນັ້ນພວກເຮົາຈຶ່ງບໍ່ໄດ້ວິນິດໄສສາຍເຊືອກທີ່ມີຄວາມຍາວເກີນ
C++.

ທາງເລືອກນີ້ແມ່ນຊີ້ໃຫ້ເຫັນໂດຍ - pedantic, ແລະສາມາດໄດ້ຮັບການພິການກັບ -Wno-overlength-strings.

-Wunsuffixed-float-constants (C ແລະ Objective-C ເທົ່ານັ້ນ)
GCC ຈະອອກຄໍາເຕືອນສໍາລັບຄ່າຄົງທີ່ທີ່ລອຍຕົວທີ່ບໍ່ມີຄໍາຕໍ່ທ້າຍ. ເມື່ອ​ໃດ​
ໃຊ້ຮ່ວມກັບ -Wsystem-headers ມັນຈະເຕືອນກ່ຽວກັບຄ່າຄົງທີ່ດັ່ງກ່າວຢູ່ໃນສ່ວນຫົວຂອງລະບົບ
ໄຟລ໌. ນີ້ສາມາດເປັນປະໂຫຍດໃນເວລາກະກຽມລະຫັດເພື່ອໃຊ້ກັບ "FLOAT_CONST_DECIMAL64"
pragma ຈາກສ່ວນຂະຫຍາຍຈຸດເລື່ອນເລກຖານສິບຫາ C99.

ທາງເລືອກໃນການ ສໍາລັບການ Debugging ຂອງທ່ານ ໂຄງການ or GCC
GCC ມີທາງເລືອກພິເສດຕ່າງໆທີ່ໃຊ້ສໍາລັບການດີບັກບໍ່ວ່າຈະເປັນໂຄງການຫຼື GCC ຂອງທ່ານ:

-g ຜະລິດຂໍ້ມູນ debugging ໃນຮູບແບບພື້ນເມືອງຂອງລະບົບປະຕິບັດການ (stabs, COFF,
XCOFF, ຫຼື DWARF 2). GDB ສາມາດເຮັດວຽກກັບຂໍ້ມູນການດີບັກນີ້.

ໃນລະບົບສ່ວນໃຫຍ່ທີ່ໃຊ້ຮູບແບບ stabs, -g ເປີດການນຳໃຊ້ຂໍ້ມູນການດີບັກເພີ່ມເຕີມ
ທີ່ພຽງແຕ່ GDB ສາມາດນໍາໃຊ້; ຂໍ້ມູນພິເສດນີ້ເຮັດໃຫ້ການດີບັກເຮັດວຽກດີຂຶ້ນໃນ GDB ແຕ່
ອາດຈະເຮັດໃຫ້ debugger ອື່ນໆຂັດຂ້ອງຫຼືປະຕິເສດທີ່ຈະອ່ານໂຄງການ. ຖ້າ​ເຈົ້າ​ຕ້ອງ​ການ
ເພື່ອຄວບຄຸມທີ່ແນ່ນອນວ່າຈະສ້າງຂໍ້ມູນເພີ່ມເຕີມຫຼືບໍ່, ໃຫ້ໃຊ້ -gstabs+,
-gstabs, -gxcoff+, -gxcoff, ຫຼື -gvms (ເບິ່ງຂ້າງລຸ່ມ).

GCC ອະນຸຍາດໃຫ້ທ່ານໃຊ້ -g ກັບ -O. ທາງລັດປະຕິບັດໂດຍລະຫັດທີ່ດີທີ່ສຸດອາດຈະ
ເປັນບາງໂອກາດສ້າງຜົນໄດ້ຮັບທີ່ຫນ້າປະຫລາດໃຈ: ບາງຕົວແປທີ່ທ່ານປະກາດອາດຈະບໍ່ມີຢູ່
ທັງໝົດ; ການໄຫຼເຂົ້າຂອງການຄວບຄຸມອາດຈະເຄື່ອນຍ້າຍໄລຍະສັ້ນໆທີ່ທ່ານບໍ່ໄດ້ຄາດຫວັງ; ບາງຄໍາຖະແຫຼງອາດຈະ
ບໍ່​ໄດ້​ຮັບ​ການ​ປະ​ຕິ​ບັດ​ເນື່ອງ​ຈາກ​ວ່າ​ພວກ​ເຂົາ​ເຈົ້າ​ຄິດ​ໄລ່​ຜົນ​ໄດ້​ຮັບ​ຄົງ​ທີ່​ຫຼື​ຄຸນ​ຄ່າ​ຂອງ​ເຂົາ​ເຈົ້າ​ຢູ່​ແລ້ວ
ມື; ບາງຄໍາຖະແຫຼງທີ່ອາດຈະປະຕິບັດຢູ່ໃນສະຖານທີ່ຕ່າງໆເພາະວ່າພວກມັນຖືກຍ້າຍອອກຈາກ
ວົງ.

ຢ່າງໃດກໍຕາມ, ມັນພິສູດໄດ້ວ່າເປັນໄປໄດ້ທີ່ຈະ debug ຜົນຜະລິດທີ່ດີທີ່ສຸດ. ນີ້ເຮັດໃຫ້ມັນສົມເຫດສົມຜົນ
ເພື່ອໃຊ້ຕົວເພີ່ມປະສິດທິພາບສໍາລັບໂຄງການທີ່ອາດຈະມີຂໍ້ບົກພ່ອງ.

ຕົວເລືອກຕໍ່ໄປນີ້ແມ່ນເປັນປະໂຫຍດເມື່ອ GCC ຖືກສ້າງຂຶ້ນດ້ວຍຄວາມສາມາດເພີ່ມເຕີມ
ຫຼາຍກ່ວາຮູບແບບການດີບັກ.

-ggdb
ຜະລິດຂໍ້ມູນການດີບັກເພື່ອໃຊ້ໂດຍ GDB. ນີ້ຫມາຍຄວາມວ່າຈະໃຊ້ການສະແດງອອກທີ່ສຸດ
ຮູບແບບທີ່ມີຢູ່ (DWARF 2, stabs, ຫຼືຮູບແບບພື້ນເມືອງຖ້າບໍ່ມີທັງສອງອັນ
ຮອງຮັບ), ລວມທັງການຂະຫຍາຍ GDB ຖ້າເປັນໄປໄດ້.

-gstabs
ຜະລິດຂໍ້ມູນ debugging ໃນຮູບແບບ stabs (ຖ້າມັນຖືກສະຫນັບສະຫນູນ), ໂດຍບໍ່ມີ GDB
ສ່ວນຂະຫຍາຍ. ນີ້ແມ່ນຮູບແບບທີ່ໃຊ້ໂດຍ DBX ໃນລະບົບ BSD ສ່ວນໃຫຍ່. ໃນ MIPS, Alpha ແລະ
System V Release 4 ລະບົບທາງເລືອກນີ້ຜະລິດ stabs debugging output ທີ່ບໍ່ແມ່ນ
ເຂົ້າໃຈໂດຍ DBX ຫຼື SDB. ໃນ System V Release 4 ລະບົບທາງເລືອກນີ້ຕ້ອງການ GNU
ຜູ້ປະກອບ.

-feliminate-unused-debug-ສັນຍາລັກ
ຜະລິດຂໍ້ມູນ debugging ໃນຮູບແບບ stabs (ຖ້ານັ້ນຖືກສະຫນັບສະຫນູນ), ສໍາລັບສັນຍາລັກເທົ່ານັ້ນ
ທີ່ຖືກນໍາໃຊ້ຕົວຈິງ.

-femit-class-debug-ສະເໝີ
ແທນ​ທີ່​ຈະ​ປ່ອຍ​ອອກ​ມາ​ຂໍ້​ມູນ​ການ​ແກ້​ໄຂ​ບັນ​ຫາ​ສໍາ​ລັບ​ຫ້ອງ C ++ ໃນ​ພຽງ​ແຕ່​ຫນຶ່ງ​ໄຟລ​໌​ວັດ​ຖຸ​,
ປ່ອຍມັນຢູ່ໃນໄຟລ໌ວັດຖຸທັງໝົດໂດຍໃຊ້ຫ້ອງຮຽນ. ທາງເລືອກນີ້ຄວນຈະຖືກນໍາໃຊ້ພຽງແຕ່ກັບ
debugger ທີ່ບໍ່ສາມາດຈັດການກັບວິທີການ GCC ປົກກະຕິປ່ອຍຂໍ້ມູນການດີບັກ
ສໍາລັບຫ້ອງຮຽນເພາະວ່າການນໍາໃຊ້ທາງເລືອກນີ້ຈະເພີ່ມຂະຫນາດຂອງຂໍ້ມູນການດີບັກ
ເທົ່າກັບປັດໄຈສອງ.

-fno-debug-types-section
ໂດຍຄ່າເລີ່ມຕົ້ນເມື່ອໃຊ້ DWARF v4 ຫຼືສູງກວ່າ DIEs ຈະຖືກໃສ່ເຂົ້າໃນຂອງຕົນເອງ
ພາກສ່ວນ .debug_types ແທນທີ່ຈະເຮັດໃຫ້ພວກມັນເປັນສ່ວນໜຶ່ງຂອງພາກສ່ວນ .debug_info. ມັນ​ແມ່ນ
ມີປະສິດທິພາບຫຼາຍຂຶ້ນເພື່ອໃຫ້ພວກເຂົາຢູ່ໃນພາກສ່ວນ comdat ແຍກຕ່າງຫາກນັບຕັ້ງແຕ່ຕົວເຊື່ອມຕໍ່ຫຼັງຈາກນັ້ນຈະເປັນ
ສາມາດເອົາຊໍ້າກັນໄດ້. ແຕ່ຜູ້ບໍລິໂພກ DWARF ທັງໝົດບໍ່ຮອງຮັບພາກສ່ວນ .debug_types
yet

-gstabs+
ຜະລິດຂໍ້ມູນ debugging ໃນຮູບແບບ stabs (ຖ້າມັນຖືກສະຫນັບສະຫນູນ), ໂດຍໃຊ້ GNU
ສ່ວນຂະຫຍາຍທີ່ເຂົ້າໃຈພຽງແຕ່ໂດຍ GNU debugger (GDB). ການນໍາໃຊ້ການຂະຫຍາຍເຫຼົ່ານີ້ແມ່ນ
ອາດຈະເຮັດໃຫ້ debugger ອື່ນໆຂັດຂ້ອງ ຫຼືປະຕິເສດການອ່ານໂຄງການ.

-gcoff
ຜະລິດຂໍ້ມູນ debugging ໃນຮູບແບບ COFF (ຖ້າວ່ານັ້ນຖືກຮອງຮັບ). ນີ້​ແມ່ນ
ຮູບແບບທີ່ໃຊ້ໂດຍ SDB ໃນລະບົບ V ສ່ວນໃຫຍ່ກ່ອນ System V Release 4.

-gxcoff
ຜະລິດຂໍ້ມູນ debugging ໃນຮູບແບບ XCOFF (ຖ້າວ່ານັ້ນຖືກຮອງຮັບ). ນີ້​ແມ່ນ
ຮູບແບບທີ່ໃຊ້ໂດຍ DBX debugger ໃນລະບົບ IBM RS/6000.

-gxcoff+
ຜະລິດຂໍ້ມູນ debugging ໃນຮູບແບບ XCOFF (ຖ້າວ່ານັ້ນຖືກຮອງຮັບ), ໂດຍໃຊ້ GNU
ສ່ວນຂະຫຍາຍທີ່ເຂົ້າໃຈພຽງແຕ່ໂດຍ GNU debugger (GDB). ການນໍາໃຊ້ການຂະຫຍາຍເຫຼົ່ານີ້ແມ່ນ
ອາດຈະເຮັດໃຫ້ debugger ອື່ນຂັດຂ້ອງ ຫຼືປະຕິເສດການອ່ານໂຄງການ, ແລະອາດຈະເຮັດໃຫ້ເກີດ
ເຄື່ອງປະກອບອື່ນນອກເໜືອໄປຈາກຕົວປະກອບ GNU (GAS) ລົ້ມເຫລວດ້ວຍຄວາມຜິດພາດ.

-gdwarf-ສະບັບພາສາ
ຜະລິດຂໍ້ມູນການດີບັກໃນຮູບແບບ DWARF (ຖ້າອັນນັ້ນຖືກຮອງຮັບ). ນີ້​ແມ່ນ
ຮູບແບບທີ່ໃຊ້ໂດຍ DBX ໃນ IRIX 6. ຄ່າຂອງ ສະບັບພາສາ ອາດຈະເປັນ 2, 3 ຫຼື 4; ໄດ້
ສະ​ບັບ​ຕົ້ນ​ແມ່ນ 2​.

ໃຫ້ສັງເກດວ່າກັບ DWARF ຮຸ່ນ 2 ບາງພອດຕ້ອງການ, ແລະຈະໃຊ້ສະເຫມີ, ບາງອັນທີ່ບໍ່ແມ່ນ.
ສ່ວນຂະຫຍາຍ DWARF 3 ທີ່ຂັດແຍ້ງກັນຢູ່ໃນຕາຕະລາງ unwind.

ເວີຊັ່ນ 4 ອາດຈະຕ້ອງການ GDB 7.0 ແລະ -fvar-tracking-assignments ເພື່ອຜົນປະໂຫຍດສູງສຸດ.

-grecord-gcc-ສະຫຼັບ
ສະວິດນີ້ເຮັດໃຫ້ຕົວເລືອກແຖວຄໍາສັ່ງທີ່ໃຊ້ເພື່ອເອີ້ນ compiler ທີ່ອາດຈະ
ກະທົບຕໍ່ການສ້າງລະຫັດທີ່ຈະໃສ່ເຂົ້າກັບຄຸນລັກສະນະ DW_AT_producer ໃນ DWARF
ຂໍ້ມູນການດີບັກ. ທາງເລືອກແມ່ນ concatenated ກັບຊ່ອງທີ່ແຍກເຂົາເຈົ້າອອກຈາກ
ເຊິ່ງກັນແລະກັນແລະຈາກສະບັບ compiler. ເບິ່ງນຳ -frecord-gcc-ສະຫຼັບ ສໍາລັບຄົນອື່ນ
ວິທີການເກັບຮັກສາຕົວເລືອກ compiler ເຂົ້າໄປໃນໄຟລ໌ວັດຖຸ.

-gno-record-gcc-switches
ບໍ່ອະນຸຍາດໃຫ້ເພີ່ມຕົວເລືອກແຖວຄຳສັ່ງໃສ່ຄຸນລັກສະນະ DW_AT_producer ໃນ DWARF
ຂໍ້ມູນການດີບັກ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-gstrict-dwarf
ບໍ່​ອະ​ນຸ​ຍາດ​ໃຫ້​ການ​ນໍາ​ໃຊ້​ສ່ວນ​ຂະ​ຫຍາຍ​ຂອງ​ສະ​ບັບ​ມາດ​ຕະ​ຖານ DWARF ຕໍ່​ມາ​ກ​່​ວາ​ທີ່​ເລືອກ​ດ້ວຍ
-gdwarf-ສະບັບພາສາ. ໃນເປົ້າຫມາຍສ່ວນໃຫຍ່ໂດຍໃຊ້ສ່ວນຂະຫຍາຍ DWARF ທີ່ບໍ່ຂັດແຍ້ງຈາກຕໍ່ມາ
ສະບັບມາດຕະຖານແມ່ນອະນຸຍາດ.

-gno-strict-dwarf
ອະ​ນຸ​ຍາດ​ໃຫ້​ການ​ນໍາ​ໃຊ້​ສ່ວນ​ຂະ​ຫຍາຍ​ຂອງ​ສະ​ບັບ​ມາດ​ຕະ​ຖານ DWARF ຕໍ່​ມາ​ກ​່​ວາ​ທີ່​ເລືອກ​ດ້ວຍ
-gdwarf-ສະບັບພາສາ.

-gvms
ຜະລິດຂໍ້ມູນການດີບັກໃນຮູບແບບດີບັກ VMS (ຖ້າອັນນັ້ນຖືກຮອງຮັບ). ນີ້​ແມ່ນ
ຮູບແບບທີ່ໃຊ້ໂດຍ DEBUG ໃນລະບົບ VMS.

-gລະດັບ
-ggdbລະດັບ
-gstabsລະດັບ
-gcoffລະດັບ
-gxcoffລະດັບ
-gvmsລະດັບ
ຂໍຂໍ້ມູນການດີບັກ ແລະຍັງໃຊ້ ລະດັບ ເພື່ອລະບຸຂໍ້ມູນຫຼາຍປານໃດ. ໄດ້
ລະດັບເລີ່ມຕົ້ນແມ່ນ 2.

ລະດັບ 0 ບໍ່ມີຂໍ້ມູນດີບັ໊ກເລີຍ. ດັ່ງນັ້ນ, -g0 ປະຕິເສດ -g.

ລະດັບ 1 ຜະລິດຂໍ້ມູນຫນ້ອຍ, ພຽງພໍສໍາລັບການເຮັດໃຫ້ backtraces ໃນພາກສ່ວນຂອງ
ໂຄງການທີ່ທ່ານບໍ່ໄດ້ວາງແຜນທີ່ຈະ debug. ນີ້ປະກອບມີຄໍາອະທິບາຍກ່ຽວກັບຫນ້າທີ່ແລະ
ຕົວແປພາຍນອກ, ແຕ່ບໍ່ມີຂໍ້ມູນກ່ຽວກັບຕົວແປທ້ອງຖິ່ນ ແລະບໍ່ມີຕົວເລກແຖວ.

ລະດັບ 3 ປະກອບມີຂໍ້ມູນເພີ່ມເຕີມ, ເຊັ່ນ: ນິຍາມມະຫາພາກທັງໝົດທີ່ມີຢູ່ໃນ
ໂຄງການ. ບາງຕົວດີບັກຮອງຮັບການຂະຫຍາຍມະຫາພາກເມື່ອທ່ານໃຊ້ -g3.

-gdwarf-2 ບໍ່ຍອມຮັບລະດັບດີບັ໊ກທີ່ປະສົມປະສານ, ເພາະວ່າ GCC ໃຊ້ເພື່ອສະຫນັບສະຫນູນ
ທາງເລືອກ -gdwarf ນັ້ນໝາຍເຖິງການສ້າງຂໍ້ມູນດີບັກໃນເວີຊັນ 1 ຂອງ DWARF
ຮູບແບບ (ເຊິ່ງແຕກຕ່າງກັນຫຼາຍຈາກຮຸ່ນ 2), ແລະມັນອາດຈະສັບສົນເກີນໄປ.
ຮູບ​ແບບ​ດີ​ບັກ​ນັ້ນ​ລ້າ​ສະ​ໄໝ​ດົນ​ນານ, ແຕ່​ທາງ​ເລືອກ​ບໍ່​ສາ​ມາດ​ປ່ຽນ​ໄດ້​ໃນ​ປັດ​ຈຸ​ບັນ. ແທນທີ່ຈະໃຊ້
ເພີ່ມເຕີມ -gລະດັບ ທາງເລືອກທີ່ຈະປ່ຽນລະດັບດີບັກສໍາລັບ DWARF.

-gtoggle
ປິດການສ້າງຂໍ້ມູນດີບັ໊ກ, ຖ້າປ່ອຍໃຫ້ທາງເລືອກນີ້ຈະສ້າງມັນ,
ຫຼືເປີດມັນໃນລະດັບ 2 ຖ້າບໍ່ດັ່ງນັ້ນ. ຕໍາແຫນ່ງຂອງການໂຕ້ຖຽງນີ້ຢູ່ໃນເສັ້ນຄໍາສັ່ງ
ບໍ່ສໍາຄັນ, ມັນມີຜົນຫຼັງຈາກທາງເລືອກອື່ນທັງຫມົດຖືກປຸງແຕ່ງ, ແລະມັນກໍ່ເຮັດແນວນັ້ນ
ພຽງແຕ່ຄັ້ງດຽວ, ບໍ່ວ່າມັນຈະໃຫ້ເທົ່າໃດ. ນີ້ແມ່ນຈຸດປະສົງຕົ້ນຕໍເພື່ອນໍາໃຊ້
ກັບ -fcompare-debug.

-fdump-final-insns[=ເອກະສານ]
ຖິ້ມການເປັນຕົວແທນພາຍໃນສຸດທ້າຍ (RTL) ໄປ ເອກະສານ. ຖ້າການໂຕ້ຖຽງທາງເລືອກແມ່ນ
ຖືກລະເວັ້ນ (ຫຼືຖ້າ ເອກະສານ ແມ່ນ "."), ຊື່ຂອງໄຟລ໌ dump ຈະຖືກກໍານົດໂດຍການເພີ່ມເຕີມ
".gkd" ໃສ່ຊື່ໄຟລ໌ຜົນຜະລິດການລວບລວມ.

-fcompare-debug[=ເລືອກ]
ຖ້າບໍ່ມີຂໍ້ຜິດພາດເກີດຂື້ນໃນລະຫວ່າງການລວບລວມ, ດໍາເນີນການລວບລວມຂໍ້ມູນເປັນຄັ້ງທີສອງ, ເພີ່ມ ເລືອກ ແລະ
-fcompare-debug-ວິນາທີ ການໂຕ້ຖຽງທີ່ຜ່ານໄປຫາການລວບລວມທີສອງ. ຖິ້ມ
ການເປັນຕົວແທນພາຍໃນສຸດທ້າຍໃນການລວບລວມທັງສອງ, ແລະພິມຂໍ້ຜິດພາດຖ້າພວກເຂົາແຕກຕ່າງກັນ.

ຖ້າເຄື່ອງໝາຍເທົ່າທຽມກັນຖືກລະເວັ້ນ, ຄ່າເລີ່ມຕົ້ນ -gtoggle ຖືກນໍາໃຊ້.

ສະພາບແວດລ້ອມປ່ຽນແປງໄດ້ GCC_COMPARE_DEBUG, ຖ້າກໍານົດ, ບໍ່ຫວ່າງເປົ່າແລະບໍ່ສູນ,
implicitly ເປີດໃຊ້ -fcompare-debugທີ່ຢູ່ ຖ້າຫາກວ່າ GCC_COMPARE_DEBUG ຖືກກໍານົດເປັນສະຕຣິງ
ເລີ່ມຕົ້ນດ້ວຍ dash, ຫຼັງຈາກນັ້ນມັນຖືກນໍາໃຊ້ສໍາລັບ ເລືອກ, ຖ້າບໍ່ດັ່ງນັ້ນຄ່າເລີ່ມຕົ້ນ -gtoggle is
ໃຊ້ແລ້ວ.

-fcompare-debug=, ມີເຄື່ອງຫມາຍເທົ່າທຽມກັນແຕ່ບໍ່ມີ ເລືອກ, ເທົ່າກັບ
-fno-compare-debug, ເຊິ່ງປິດການຖິ້ມຂີ້ເຫຍື້ອຂອງຕົວແທນສຸດທ້າຍແລະ
ການລວບລວມທີສອງ, ປ້ອງກັນເຖິງແມ່ນວ່າ GCC_COMPARE_DEBUG ຈາກ​ການ​ມີ​ຜົນ​ກະ​ທົບ​.

ເພື່ອກວດສອບການຄຸ້ມຄອງຢ່າງເຕັມທີ່ໃນລະຫວ່າງ -fcompare-debug ການ​ທົດ​ສອບ​, ກໍາ​ນົດ​ GCC_COMPARE_DEBUG ເວົ້າ
-fcompare-debug-not-overridden, ເຊິ່ງ GCC ຈະປະຕິເສດເປັນທາງເລືອກທີ່ບໍ່ຖືກຕ້ອງໃນໃດໆ
ການລວບລວມຕົວຈິງ (ແທນທີ່ຈະປຸງແຕ່ງກ່ອນ, ການປະກອບຫຼືການເຊື່ອມໂຍງ). ເພື່ອໃຫ້ໄດ້ຮັບພຽງແຕ່ເປັນ
ການ​ເຕືອນ​ໄພ​, ການ​ຕັ້ງ​ຄ່າ​ GCC_COMPARE_DEBUG to -w%n-fcompare-debug ບໍ່ ຖືກຍົກເລີກ ຈະ​ເຮັດ.

-fcompare-debug-ວິນາທີ
ທາງເລືອກນີ້ຖືກສົ່ງຜ່ານ implicitly ກັບ compiler ສໍາລັບການລວບລວມທີສອງຮ້ອງຂໍ
by -fcompare-debug, ພ້ອມກັບທາງເລືອກໃນການປິດສຽງການເຕືອນ, ແລະການລະເວັ້ນທາງເລືອກອື່ນ
ທີ່ຈະເຮັດໃຫ້ເກີດຜົນຂ້າງຄຽງຂອງ compiler outputs ກັບໄຟລ໌ຫຼືຜົນຜະລິດມາດຕະຖານ.
ໄຟລ໌ Dump ແລະໄຟລ໌ຊົ່ວຄາວທີ່ເກັບຮັກສາໄວ້ໄດ້ຖືກປ່ຽນຊື່ເພື່ອໃຫ້ມີ ".gk"
ສ່ວນຂະຫຍາຍເພີ່ມເຕີມໃນລະຫວ່າງການລວບລວມທີສອງ, ເພື່ອຫຼີກເວັ້ນການຂຽນທັບເຫຼົ່ານັ້ນ
ສ້າງຂຶ້ນໂດຍຄັ້ງທໍາອິດ.

ໃນ​ເວ​ລາ​ທີ່​ທາງ​ເລືອກ​ນີ້​ແມ່ນ​ໄດ້​ຮັບ​ການ​ສົ່ງ​ຕໍ່​ກັບ​ໄດ​ເວີ compiler​, ມັນ​ເຮັດ​ໃຫ້​ເກີດ​ການ​ ຄັ້ງທໍາອິດ ການລວບລວມກັບ
ຂ້າມໄປ, ເຊິ່ງເຮັດໃຫ້ມັນເປັນປະໂຫຍດສໍາລັບການອື່ນນອກຈາກການ debugging compiler ທີ່ເຫມາະສົມ.

-feliminate-dwarf2-dups
ບີບອັດຂໍ້ມູນການດີບັກ DWARF2 ໂດຍການກໍາຈັດຂໍ້ມູນທີ່ຊ້ໍາກັນກ່ຽວກັບແຕ່ລະຄົນ
ສັນຍາລັກ. ຕົວເລືອກນີ້ເຮັດໃຫ້ຄວາມຮູ້ສຶກພຽງແຕ່ເມື່ອສ້າງຂໍ້ມູນການດີບັກ DWARF2
ກັບ -gdwarf-2.

-femit-struct-debug-baseonly
ປ່ອຍຂໍ້ມູນການດີບັ໊ກສໍາລັບປະເພດໂຄງສ້າງທີ່ຄ້າຍຄືເມື່ອຊື່ພື້ນຖານຂອງ
ໄຟລ໌ແຫຼ່ງການລວບລວມກົງກັບຊື່ພື້ນຖານຂອງໄຟລ໌ທີ່ໂຄງສ້າງໄດ້ຖືກກໍານົດ.

ຕົວເລືອກນີ້ຫຼຸດລົງຢ່າງຫຼວງຫຼາຍຂອງຂໍ້ມູນ debugging, ແຕ່ວ່າຢູ່ທີ່
ການສູນເສຍທີ່ອາດເກີດຂຶ້ນຢ່າງຫຼວງຫຼາຍໃນຂໍ້ມູນປະເພດຕໍ່ກັບຕົວດີບັກ. ເບິ່ງ
-femit-struct-debug-ຫຼຸດລົງ ສໍາລັບທາງເລືອກທີ່ຮຸກຮານຫນ້ອຍ. ເບິ່ງ
-femit-struct-debug-ລາຍລະອຽດ ສໍາລັບການຄວບຄຸມລາຍລະອຽດເພີ່ມເຕີມ.

ຕົວເລືອກນີ້ໃຊ້ໄດ້ກັບ DWARF 2 ເທົ່ານັ້ນ.

-femit-struct-debug-ຫຼຸດລົງ
ປ່ອຍຂໍ້ມູນການດີບັ໊ກສໍາລັບປະເພດໂຄງສ້າງທີ່ຄ້າຍຄືເມື່ອຊື່ພື້ນຖານຂອງ
ໄຟລ໌ແຫຼ່ງການລວບລວມກົງກັບຊື່ພື້ນຖານຂອງໄຟລ໌ທີ່ປະເພດໄດ້ຖືກກໍານົດ,
ເວັ້ນເສຍແຕ່ວ່າໂຄງສ້າງແມ່ນແມ່ແບບຫຼືກໍານົດຢູ່ໃນສ່ວນຫົວຂອງລະບົບ.

ທາງເລືອກນີ້ຫຼຸດລົງຢ່າງຫຼວງຫຼາຍຂອງຂໍ້ມູນ debugging, ມີບາງ
ການສູນເສຍທີ່ອາດຈະເກີດຂື້ນໃນຂໍ້ມູນປະເພດຕໍ່ກັບຕົວດີບັກ. ເບິ່ງ -femit-struct-debug-baseonly
ສໍາລັບທາງເລືອກທີ່ຮຸກຮານຫຼາຍ. ເບິ່ງ -femit-struct-debug-ລາຍລະອຽດ ສໍາລັບລາຍລະອຽດເພີ່ມເຕີມ
ຄວບຄຸມ.

ຕົວເລືອກນີ້ໃຊ້ໄດ້ກັບ DWARF 2 ເທົ່ານັ້ນ.

-femit-struct-debug-ລາຍລະອຽດ[=ລາຍຊື່ສະເພາະ]
ລະບຸປະເພດໂຄງສ້າງທີ່ compiler ຈະສ້າງຂໍ້ມູນດີບັກ.
ຈຸດປະສົງແມ່ນເພື່ອຫຼຸດຜ່ອນຂໍ້ມູນການດີບັກໂຄງສ້າງທີ່ຊໍ້າກັນລະຫວ່າງວັດຖຸທີ່ແຕກຕ່າງກັນ
ໄຟລ໌ພາຍໃນໂຄງການດຽວກັນ.

ທາງເລືອກນີ້ແມ່ນສະບັບລາຍລະອຽດຂອງ -femit-struct-debug-ຫຼຸດລົງ ແລະ
-femit-struct-debug-baseonly, ເຊິ່ງຈະໃຫ້ບໍລິການສໍາລັບຄວາມຕ້ອງການຫຼາຍທີ່ສຸດ.

ຂໍ້ມູນຈໍາເພາະມີ syntax [ແມ່ນ:|ind:][ຄໍາສັ່ງ:|gen:](ໃດ|sys|ຖານ|none)

ຄໍາທໍາອິດທາງເລືອກຈໍາກັດການກໍານົດສະເພາະກັບໂຄງສ້າງທີ່ຖືກນໍາໃຊ້ໂດຍກົງ
(ແມ່ນ:) ຫຼື​ໃຊ້​ໂດຍ​ທາງ​ອ້ອມ (ind:). ປະເພດໂຄງສ້າງແມ່ນໃຊ້ໂດຍກົງເມື່ອມັນເປັນປະເພດ
ຂອງຕົວແປ, ສະມາຊິກ. ການນໍາໃຊ້ທາງອ້ອມເກີດຂື້ນໂດຍຜ່ານຕົວຊີ້ໄປຫາໂຄງສ້າງ. ນັ້ນ​ແມ່ນ,
ໃນເວລາທີ່ການນໍາໃຊ້ໂຄງສ້າງທີ່ບໍ່ຄົບຖ້ວນຈະເປັນກົດຫມາຍ, ການນໍາໃຊ້ແມ່ນທາງອ້ອມ. ຕົວຢ່າງແມ່ນ
ໂຄງສ້າງ ຫນຶ່ງ ໂດຍກົງ; ໂຄງສ້າງ ສອງ * ທາງອ້ອມ;.

ຄໍາທີ່ສອງທາງເລືອກຈໍາກັດການກໍານົດສະເພາະກັບໂຄງສ້າງທໍາມະດາ (ຄໍາສັ່ງ:) ຫຼື
ໂຄງສ້າງທົ່ວໄປ (gen:). ໂຄງສ້າງທົ່ວໄປແມ່ນສັບສົນເລັກນ້ອຍເພື່ອອະທິບາຍ. ສໍາລັບ C++,
ເຫຼົ່ານີ້ແມ່ນຄວາມຊ່ຽວຊານທີ່ບໍ່ຊັດເຈນຂອງຫ້ອງຮຽນແມ່ແບບ, ຫຼືຫ້ອງຮຽນທີ່ບໍ່ແມ່ນແມ່ແບບ
ພາຍໃນຂ້າງເທິງ. ພາສາການຂຽນໂປລແກລມອື່ນມີ generics, ແຕ່
-femit-struct-debug-ລາຍລະອຽດ ຍັງບໍ່ທັນໄດ້ປະຕິບັດໃຫ້ເຂົາເຈົ້າ.

ຄໍາທີສາມກໍານົດໄຟລ໌ຕົ້ນສະບັບສໍາລັບໂຄງສ້າງເຫຼົ່ານັ້ນທີ່ compiler
ຈະປ່ອຍຂໍ້ມູນດີບັກ. ຄຸນຄ່າ none ແລະ ໃດ ມີ​ຄວາມ​ຫມາຍ​ປົກ​ກະ​ຕິ​. ໄດ້
ມູນຄ່າ ຖານ ຫມາຍຄວາມວ່າພື້ນຖານຂອງຊື່ຂອງໄຟລ໌ໃນການປະກາດປະເພດ
ປາກົດຕ້ອງກົງກັບຖານຂອງຊື່ຂອງໄຟລ໌ການລວບລວມຕົ້ນຕໍ. ໃນທາງປະຕິບັດ,
ນີ້ຫມາຍຄວາມວ່າປະເພດທີ່ປະກາດໃນ foo.c ແລະ foo.h ຈະມີຂໍ້ມູນດີບັກ, ແຕ່
ປະເພດທີ່ປະກາດຢູ່ໃນສ່ວນຫົວອື່ນຈະບໍ່. ມູນຄ່າ sys ຫມາຍຄວາມວ່າປະເພດທີ່ພໍໃຈ
ຖານ ຫຼືປະກາດໃນສ່ວນຫົວຂອງລະບົບ ຫຼື compiler.

ທ່ານອາດຈະຈໍາເປັນຕ້ອງໄດ້ທົດລອງເພື່ອກໍານົດການຕັ້ງຄ່າທີ່ດີທີ່ສຸດສໍາລັບຄໍາຮ້ອງສະຫມັກຂອງທ່ານ.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -femit-struct-debug-detailed=ທັງໝົດ.

ຕົວເລືອກນີ້ໃຊ້ໄດ້ກັບ DWARF 2 ເທົ່ານັ້ນ.

-fno-merge-debug-strings
ຊີ້ບອກຕົວເຊື່ອມຕໍ່ເພື່ອບໍ່ໃຫ້ສາຍເຂົ້າກັນເຂົ້າກັນໃນຂໍ້ມູນການດີບັກທີ່ເປັນ
ຄືກັນໃນໄຟລ໌ວັດຖຸທີ່ແຕກຕ່າງກັນ. ການຜະສົມຜະສານບໍ່ໄດ້ຮັບການສະຫນັບສະຫນູນໂດຍຜູ້ປະກອບທັງຫມົດຫຼື
ຕົວເຊື່ອມຕໍ່. ການລວມຕົວຫຼຸດລົງຂະຫນາດຂອງຂໍ້ມູນ debug ໃນໄຟລ໌ຜົນຜະລິດຢູ່ທີ່
ຄ່າໃຊ້ຈ່າຍຂອງການເພີ່ມເວລາການປຸງແຕ່ງການເຊື່ອມຕໍ່. ການລວມເຂົ້າກັນແມ່ນຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-fdebug-prefix-map=ອາຍຸ=ໃຫມ່
ເມື່ອລວບລວມໄຟລ໌ຢູ່ໃນໄດເລກະທໍລີ ອາຍຸ, ບັນທຶກຂໍ້ມູນ debugging ອະທິບາຍໃຫ້ເຂົາເຈົ້າເປັນ
in ໃຫມ່ ແທນທີ່ຈະເປັນ.

-fno-dwarf2-cfi-asm
ປ່ອຍຂໍ້ມູນ DWARF 2 unwind ເປັນ compiler ສ້າງພາກສ່ວນ ".eh_frame" ແທນທີ່ຈະໃຊ້
GAS ".cfi_*" ຄໍາແນະນໍາ.

-p ສ້າງລະຫັດເພີ່ມເຕີມເພື່ອຂຽນຂໍ້ມູນໂປຣໄຟລ໌ທີ່ເຫມາະສົມສໍາລັບໂຄງການການວິເຄາະ
prof. ທ່ານຕ້ອງໃຊ້ຕົວເລືອກນີ້ໃນເວລາລວບລວມໄຟລ໌ແຫຼ່ງທີ່ທ່ານຕ້ອງການຂໍ້ມູນ,
ແລະທ່ານຍັງຕ້ອງໃຊ້ມັນໃນເວລາເຊື່ອມຕໍ່.

- ໜ້າ ສ້າງລະຫັດເພີ່ມເຕີມເພື່ອຂຽນຂໍ້ມູນໂປຣໄຟລ໌ທີ່ເຫມາະສົມສໍາລັບໂຄງການການວິເຄາະ
ກປ. ທ່ານຕ້ອງໃຊ້ຕົວເລືອກນີ້ໃນເວລາລວບລວມໄຟລ໌ແຫຼ່ງທີ່ທ່ານຕ້ອງການຂໍ້ມູນ,
ແລະທ່ານຍັງຕ້ອງໃຊ້ມັນໃນເວລາເຊື່ອມຕໍ່.

-Q ເຮັດໃຫ້ compiler ພິມອອກແຕ່ລະຊື່ຟັງຊັນຍ້ອນວ່າມັນຖືກລວບລວມ, ແລະພິມບາງ
ສະຖິຕິກ່ຽວກັບແຕ່ລະ pass ເມື່ອມັນສໍາເລັດ.

-ftime ລາຍ​ງານ​
ເຮັດໃຫ້ compiler ພິມສະຖິຕິບາງຢ່າງກ່ຽວກັບເວລາທີ່ບໍລິໂພກໂດຍແຕ່ລະ pass ໃນເວລາທີ່ມັນ
ສຳ ເລັດຮູບ.

-fmem ບົດລາຍງານ
ເຮັດໃຫ້ compiler ພິມສະຖິຕິບາງຢ່າງກ່ຽວກັບການຈັດສັນຫນ່ວຍຄວາມຈໍາຖາວອນໃນເວລາທີ່ມັນ
ສຳ ເລັດຮູບ.

-fpre-ipa-mem-ລາຍງານ
-fpost-ipa-mem-report
ເຮັດໃຫ້ compiler ພິມສະຖິຕິບາງຢ່າງກ່ຽວກັບການຈັດສັນຫນ່ວຍຄວາມຈໍາຖາວອນກ່ອນຫຼື
ຫຼັງຈາກການເພີ່ມປະສິດທິພາບ interprocedural.

-fstack ການ​ນໍາ​ໃຊ້​
ເຮັດໃຫ້ compiler output ຂໍ້ມູນການນໍາໃຊ້ stack ສໍາລັບໂຄງການ, ຕາມການທໍາງານ
ພື້ນຖານ. ຊື່ໄຟລ໌ສໍາລັບການ dump ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ ຊູ ການ ຊື່ແທນ. ຊື່ແທນ is
ສ້າງຂຶ້ນຈາກຊື່ຂອງໄຟລ໌ຜົນຜະລິດ, ຖ້າລະບຸຢ່າງຊັດເຈນ ແລະມັນບໍ່ແມ່ນ
ສາມາດປະຕິບັດໄດ້, ຖ້າບໍ່ດັ່ງນັ້ນມັນເປັນຊື່ພື້ນຖານຂອງໄຟລ໌ແຫຼ່ງ. ການເຂົ້າແມ່ນປະກອບດ້ວຍ
ສາມ​ພາກ​ສະ​ຫນາມ​:

·ຊື່ຂອງຫນ້າທີ່.

·ຈໍານວນຂອງ bytes.

·ຫນຶ່ງຫຼືຫຼາຍຄຸນສົມບັດ: "static", "dynamic", "bounded".

ຄຸນສົມບັດ "ສະຖິດ" ຫມາຍຄວາມວ່າຟັງຊັນຈັດການ stack ຄົງທີ່: a
ຈໍາ​ນວນ​ຄົງ​ທີ່​ຂອງ​ໄບ​ຕ​໌​ແມ່ນ​ໄດ້​ຖືກ​ຈັດ​ສັນ​ສໍາ​ລັບ​ກອບ​ໃນ​ການ​ເຂົ້າ​ຫນ້າ​ທີ່​ແລະ​ປ່ອຍ​ອອກ​ມາ​ເມື່ອ​
function ອອກ; ບໍ່​ມີ​ການ​ປັບ stack ແມ່ນ​ເຮັດ​ໄດ້​ຖ້າ​ບໍ່​ດັ່ງ​ນັ້ນ​ໃນ​ຫນ້າ​ທີ່​. ທີ່​ສອງ
ຊ່ອງຂໍ້ມູນແມ່ນຕົວເລກຄົງທີ່ຂອງໄບຕ໌ນີ້.

ຄຸນສົມບັດ "dynamic" ຫມາຍຄວາມວ່າຫນ້າທີ່ຈັດການ stack ແບບເຄື່ອນໄຫວ: ໃນ
ນອກເຫນືອໄປຈາກການຈັດສັນ static ທີ່ອະທິບາຍຂ້າງເທິງ, ການປັບ stack ແມ່ນເຮັດຢູ່ໃນ
ຮ່າງກາຍຂອງຟັງຊັນ, ຕົວຢ່າງເພື່ອຍູ້/ປ໊ອບອາກິວເມັນຮອບການໂທຟັງຊັນ. ຖ້າ
ຄຸນ​ນະ​ສົມ​ບັດ "bounded​" ແມ່ນ​ຍັງ​ປະ​ຈຸ​ບັນ​, ຈໍາ​ນວນ​ຂອງ​ການ​ປັບ​ຄ່າ​ເຫຼົ່າ​ນີ້​ແມ່ນ bounded ຢູ່​ທີ່​
ລວບລວມເວລາແລະພາກສະຫນາມທີສອງແມ່ນຂອບເຂດເທິງຂອງຈໍານວນທັງຫມົດຂອງ stack ທີ່ໃຊ້
ໂດຍຫນ້າທີ່. ຖ້າມັນບໍ່ມີ, ຈໍານວນການປັບຕົວເຫຼົ່ານີ້ບໍ່ມີຂອບເຂດ
ໃນເວລາລວບລວມແລະພາກສະຫນາມທີສອງພຽງແຕ່ເປັນຕົວແທນຂອງພາກສ່ວນທີ່ຖືກຜູກມັດ.

-fprofile-arcs
ເພີ່ມລະຫັດເພື່ອໃຫ້ໂປຣແກມໄຫລໄປ arcs ແມ່ນເຄື່ອງມື. ໃນ​ລະ​ຫວ່າງ​ການ​ປະ​ຕິ​ບັດ​ໂຄງ​ການ​
ບັນທຶກຈໍານວນຄັ້ງທີ່ແຕ່ລະສາຂາແລະການໂທຖືກປະຕິບັດແລະຈໍານວນຄັ້ງທີ່ມັນຖືກປະຕິບັດ
ຫຼືກັບຄືນ. ເມື່ອໂຄງການທີ່ລວບລວມອອກມາ, ມັນຈະບັນທຶກຂໍ້ມູນນີ້ໄວ້ໃນໄຟລ໌ທີ່ເອີ້ນວ່າ
auxname.gcda ສໍາລັບແຕ່ລະໄຟລ໌ແຫຼ່ງ. ຂໍ້ມູນດັ່ງກ່າວອາດຈະຖືກໃຊ້ເພື່ອແນໃສ່ໂປຣໄຟລ໌
ການເພີ່ມປະສິດທິພາບ (-fbranch-ຄວາມເປັນໄປໄດ້), ຫຼືສໍາລັບການວິເຄາະການຄຸ້ມຄອງການທົດສອບ
(-ftest-ການ​ຄຸ້ມ​ຄອງ​). ແຕ່ລະໄຟລ໌ວັດຖຸ ຊື່ແທນ ແມ່ນຜະລິດຈາກຊື່ຂອງ
ໄຟລ໌ຜົນຜະລິດ, ຖ້າລະບຸຢ່າງຊັດເຈນແລະມັນບໍ່ແມ່ນການປະຕິບັດສຸດທ້າຍ, ຖ້າບໍ່ດັ່ງນັ້ນມັນ
ແມ່ນຊື່ພື້ນຖານຂອງໄຟລ໌ແຫຼ່ງ. ໃນທັງສອງກໍລະນີ, ຄໍາຕໍ່ທ້າຍໃດໆຖືກໂຍກຍ້າຍອອກ (ຕົວຢ່າງ
foo.gcda ສໍາລັບການປ້ອນໄຟລ໌ dir/foo.c, ຫຼື dir/foo.gcda ສໍາ​ລັບ​ໄຟລ​໌​ຜົນ​ຜະ​ລິດ​ລະ​ບຸ​ໄວ້​ເປັນ​ -o
dir/foo.o).

-- ການຄຸ້ມຄອງ
ທາງເລືອກນີ້ຖືກນໍາໃຊ້ເພື່ອລວບລວມແລະເຊື່ອມຕໍ່ລະຫັດເຄື່ອງມືສໍາລັບການວິເຄາະການຄຸ້ມຄອງ. ໄດ້
ທາງເລືອກແມ່ນຄໍາສັບຄ້າຍຄື -fprofile-arcs -ftest-ການ​ຄຸ້ມ​ຄອງ​ (ເມື່ອລວບລວມ) ແລະ -lgcov
(ເມື່ອເຊື່ອມຕໍ່). ເບິ່ງເອກະສານສໍາລັບທາງເລືອກເຫຼົ່ານັ້ນສໍາລັບລາຍລະອຽດເພີ່ມເຕີມ.

·ລວບລວມໄຟລ໌ແຫຼ່ງທີ່ມີ -fprofile-arcs ບວກກັບການເພີ່ມປະສິດທິພາບແລະການສ້າງລະຫັດ
ທາງເລືອກ. ສໍາລັບການວິເຄາະການຄຸ້ມຄອງການທົດສອບ, ໃຊ້ເພີ່ມເຕີມ -ftest-ການ​ຄຸ້ມ​ຄອງ​ ທາງເລືອກ.
ທ່ານບໍ່ຈໍາເປັນຕ້ອງ profile ທຸກໄຟລ໌ແຫຼ່ງໃນໂຄງການ.

·ເຊື່ອມຕໍ່ໄຟລ໌ວັດຖຸຂອງທ່ານກັບ -lgcov or -fprofile-arcs (ອັນສຸດທ້າຍຫມາຍເຖິງ
ອະດີດ).

· ດໍາເນີນການໂຄງການໃນວຽກງານຕົວແທນເພື່ອສ້າງໂປຣໄຟລ໌ arc
ຂໍ້ມູນ. ອັນນີ້ອາດຈະຖືກເຮັດຊ້ຳຫຼາຍຄັ້ງ. ທ່ານສາມາດດໍາເນີນການພ້ອມກັນ
ຕົວ ຢ່າງ ຂອງ ໂຄງ ການ ຂອງ ທ່ານ, ແລະ ສະ ຫນອງ ໃຫ້ ລະ ບົບ ໄຟລ ໌ ສະ ຫນັບ ສະ ຫນູນ ການ locking, ໄດ້
ໄຟລ໌ຂໍ້ມູນຈະຖືກປັບປຸງຢ່າງຖືກຕ້ອງ. ນອກຈາກນີ້ "ສ້ອມ" ໂທຖືກກວດພົບແລະ
ຈັດການຢ່າງຖືກຕ້ອງ (ການນັບສອງເທົ່າຈະບໍ່ເກີດຂຶ້ນ).

· ສໍາລັບການເພີ່ມປະສິດທິພາບຂອງ profile-directed, ລວບລວມໄຟລ໌ຕົ້ນສະບັບອີກເທື່ອຫນຶ່ງດ້ວຍອັນດຽວກັນ
ການເພີ່ມປະສິດທິພາບແລະທາງເລືອກການຜະລິດລະຫັດບວກ -fbranch-ຄວາມເປັນໄປໄດ້.

·ສໍາລັບການວິເຄາະການຄຸ້ມຄອງການທົດສອບ, ການນໍາໃຊ້ gcov ເພື່ອຜະລິດຂໍ້ມູນທີ່ສາມາດອ່ານໄດ້ຂອງມະນຸດຈາກ
ໄດ້ .gcno ແລະ .gcda ໄຟລ໌. ອ້າງເຖິງ gcov ເອກະສານເພີ່ມເຕີມ
ຂໍ້ມູນຂ່າວສານ.

ກັບ -fprofile-arcs, ສໍາລັບແຕ່ລະຫນ້າທີ່ຂອງໂປຼແກຼມຂອງທ່ານ GCC ສ້າງການໄຫຼຂອງໂປຼແກຼມ
graph, ຫຼັງຈາກນັ້ນຊອກຫາຕົ້ນໄມ້ spanning ສໍາລັບເສັ້ນສະແດງ. ພຽງແຕ່ arcs ທີ່ບໍ່ມີຢູ່ໃນ
spanning tree ຕ້ອງໄດ້ຮັບການເຄື່ອງມື: compiler ເພີ່ມລະຫັດເພື່ອນັບຈໍານວນຂອງ
ເວ ລາ ທີ່ arcs ເຫຼົ່າ ນີ້ ແມ່ນ ປະ ຕິ ບັດ. ເມື່ອເສັ້ນໂຄ້ງແມ່ນທາງອອກດຽວ ຫຼືທາງເຂົ້າເທົ່ານັ້ນ
ຕັນ, ລະຫັດເຄື່ອງມືສາມາດຖືກເພີ່ມໃສ່ບລັອກ; ຖ້າບໍ່ດັ່ງນັ້ນ, ພື້ນຖານໃຫມ່
ບລັອກຕ້ອງຖືກສ້າງຂື້ນເພື່ອຖືລະຫັດເຄື່ອງມື.

-ftest-ການ​ຄຸ້ມ​ຄອງ​
ຜະລິດເອກະສານບັນທຶກທີ່ gcov code-coverage utility ສາມາດໃຊ້ເພື່ອສະແດງໂປຼແກຼມ
ການຄຸ້ມຄອງ. ໄຟລ໌ບັນທຶກຂອງແຕ່ລະແຫຼ່ງແມ່ນເອີ້ນວ່າ auxname.gcno. ອ້າງອີງເຖິງ
-fprofile-arcs ທາງເລືອກຂ້າງເທິງສໍາລັບຄໍາອະທິບາຍຂອງ ຊື່ແທນ ແລະຄໍາແນະນໍາກ່ຽວກັບວິທີການ
ສ້າງຂໍ້ມູນການຄຸ້ມຄອງການທົດສອບ. ຂໍ້ມູນການຄຸ້ມຄອງຈະກົງກັບໄຟລ໌ແຫຼ່ງທີ່ໃກ້ຊິດກວ່າ,
ຖ້າທ່ານບໍ່ເພີ່ມປະສິດທິພາບ.

-fdbg-cnt-list
ພິມຊື່ ແລະ Counter ຜູກມັດດ້ານເທິງສໍາລັບຕົວນັບການດີບັກທັງໝົດ.

-fdbg-cnt=ບັນຊີລາຍການຕ້ານມູນຄ່າ
ຕັ້ງຄ່າຕົວຕ້ານການດີບັ໊ກພາຍໃນຂອບເທິງ. ບັນຊີລາຍການຕ້ານມູນຄ່າ ແມ່ນເຄື່ອງໝາຍຈຸດທີ່ຂັ້ນດ້ວຍເຄື່ອງໝາຍຈຸດ
ລາຍຊື່ຂອງ ຊື່:ມູນຄ່າ ຄູ່ທີ່ກໍານົດຂອບເຂດເທິງຂອງແຕ່ລະຕົວຕ້ານການດີບັກ ຊື່ to
ມູນຄ່າ. ຕົວນັບການດີບັ໊ກທັງໝົດມີຂອບເຂດດ້ານເທິງເບື້ອງຕົ້ນ UINT_MAX, ດັ່ງນັ້ນ dbg_cnt()
ກັບຄືນຄວາມຈິງສະເໝີ ເວັ້ນເສຍແຕ່ວ່າຂອບເຂດເທິງຈະຖືກຕັ້ງໂດຍຕົວເລືອກນີ້. ເຊັ່ນ: ກັບ
-fdbg-cnt=dce:10,tail_call:0 dbg_cnt(dce) ຈະກັບຄືນມາເປັນຈິງສຳລັບ 10 ທຳອິດເທົ່ານັ້ນ.
ຄຳຮຽກຮ້ອງ

-fenable-ປະເພດ-ຜ່ານ
-fdisable-ປະເພດ-ຜ່ານ=ບັນຊີລາຍຊື່ໄລຍະ
ນີ້​ແມ່ນ​ຊຸດ​ຂອງ​ທາງ​ເລືອກ​ການ​ແກ້​ໄຂ​ບັນ​ຫາ​ທີ່​ຖືກ​ນໍາ​ໃຊ້​ເພື່ອ​ປິດ​ການ​ທໍາ​ງານ / ເປີດ​ໃຊ້​ງານ​ຢ່າງ​ຊັດ​ເຈນ​
ການເພີ່ມປະສິດທິພາບຜ່ານ. ສໍາລັບຜູ້ໃຊ້ compiler, ທາງເລືອກປົກກະຕິສໍາລັບການເປີດ / ປິດການໃຊ້ງານ passes
ຄວນໃຊ້ແທນ.

*<-fdisable-ipa-ຜ່ານ>
ປິດການໃຊ້ງານ ipa pass ຜ່ານ. ຜ່ານ ແມ່ນຊື່ຜ່ານ. ຖ້າຜ່ານທາງດຽວກັນແມ່ນສະຖິຕິ
invoked ໃນ compiler ຫຼາຍຄັ້ງ, ຊື່ pass ຄວນຖືກຕໍ່ທ້າຍດ້ວຍ a
ເລກລໍາດັບເລີ່ມຕົ້ນຈາກ 1.

*<-fdisable-rtl-ຜ່ານ>
*<-fdisable-rtl-ຜ່ານ=ບັນຊີລາຍຊື່ໄລຍະ>
ປິດການໃຊ້ງານ rtl pass ຜ່ານ. ຜ່ານ ແມ່ນຊື່ຜ່ານ. ຖ້າຜ່ານທາງດຽວກັນແມ່ນສະຖິຕິ
invoked ໃນ compiler ຫຼາຍຄັ້ງ, ຊື່ pass ຄວນຖືກຕໍ່ທ້າຍດ້ວຍ a
ເລກລໍາດັບເລີ່ມຕົ້ນຈາກ 1. ບັນຊີລາຍຊື່ໄລຍະ ແມ່ນບັນຊີລາຍຊື່ທີ່ແຍກກັນດ້ວຍເຄື່ອງໝາຍຈຸດ
ຊ່ວງຟັງຊັນ ຫຼືຊື່ຕົວປະກອບ. ແຕ່ລະໄລຍະແມ່ນຄູ່ຕົວເລກທີ່ແຍກກັນໂດຍ a
ຈໍ້າສອງເມັດ. ໄລຍະແມ່ນລວມຢູ່ໃນທັງສອງສົ້ນ. ຖ້າໄລຍະແມ່ນເລັກນ້ອຍ, ຕົວເລກ
ຄູ່ສາມາດງ່າຍເປັນຕົວເລກດຽວ. ຖ້າຟັງຊັນ cgraph node's uid is
ຫຼຸດລົງພາຍໃນຫນຶ່ງຂອງຂອບເຂດທີ່ກໍານົດໄວ້, ໄດ້ ຜ່ານ ແມ່ນພິການສໍາລັບການນັ້ນ
ໜ້າ ທີ່. ທ uid ແມ່ນສະແດງຢູ່ໃນຫົວຂໍ້ຟັງຊັນຂອງໄຟລ໌ dump, ແລະ pass
ຊື່ສາມາດຖືກ dumped ໂດຍໃຊ້ທາງເລືອກ -fdump-ຜ່ານ.

*<-fdisable-tree-ຜ່ານ>
*<-fdisable-tree-ຜ່ານ=ບັນຊີລາຍຊື່ໄລຍະ>
ປິດການນຳໃຊ້ທາງຜ່ານຕົ້ນໄມ້ ຜ່ານ, ທະເລສາບ -fdisable-rtl ສໍາລັບຄໍາອະທິບາຍທາງເລືອກ
ການໂຕ້ຖຽງ.

*<-fenable-ipa-ຜ່ານ>
ເປີດໃຊ້ ipa pass ຜ່ານ. ຜ່ານ ແມ່ນຊື່ຜ່ານ. ຖ້າຜ່ານທາງດຽວກັນແມ່ນສະຖິຕິ
invoked ໃນ compiler ຫຼາຍຄັ້ງ, ຊື່ pass ຄວນຖືກຕໍ່ທ້າຍດ້ວຍ a
ເລກລໍາດັບເລີ່ມຕົ້ນຈາກ 1.

*<-fenable-rtl-ຜ່ານ>
*<-fenable-rtl-ຜ່ານ=ບັນຊີລາຍຊື່ໄລຍະ>
ເປີດໃຊ້ rtl pass ຜ່ານ, ທະເລສາບ -fdisable-rtl ສໍາລັບຄໍາອະທິບາຍທາງເລືອກການໂຕ້ຖຽງແລະ
ຕົວຢ່າງ.

*<-fenable-tree-ຜ່ານ>
*<-fenable-tree-ຜ່ານ=ບັນຊີລາຍຊື່ໄລຍະ>
ເປີດໃຊ້ໃບຜ່ານຕົ້ນໄມ້ ຜ່ານ, ທະເລສາບ -fdisable-rtl ສໍາລັບລາຍລະອຽດຂອງການໂຕ້ຖຽງທາງເລືອກ.

# ປິດການໃຊ້ງານ ccp1 ສໍາລັບທຸກຟັງຊັນ
-fdisable-tree-ccp1
# ປິດການຖອດຖອນທີ່ສົມບູນສໍາລັບຟັງຊັນທີ່ cgraph node uid ແມ່ນ 1
-fenable-tree-cunroll=1
# ປິດການໃຊ້ງານ gcse2 ສໍາລັບຫນ້າທີ່ຢູ່ໃນລະດັບຕໍ່ໄປນີ້ [1,1],
# [300,400], ແລະ [400,1000]
# ປິດການໃຊ້ງານ gcse2 ສໍາລັບຟັງຊັນ foo ແລະ foo2
-fdisable-rtl-gcse2=foo,foo2
# ປິດ​ການ​ທໍາ​ງານ inlining ຕົ້ນ​
-fdisable-tree-einline
# ປິດການໃຊ້ງານ ipa inlining
-fdisable-ipa-inline
# ເປີດການຖອດຖອນຕົ້ນໄມ້ເຕັມ
-fenable-tree-unroll

-dຕົວອັກສອນ
-fdump-rtl-ຜ່ານ
ເວົ້າວ່າເພື່ອເຮັດໃຫ້ debugging dumps ໃນລະຫວ່າງການລວບລວມໃນເວລາທີ່ກໍານົດໂດຍ ຕົວອັກສອນ. ນີ້
ຖືກນໍາໃຊ້ສໍາລັບການ debugging ຜ່ານ RTL-based ຂອງ compiler. ຊື່ໄຟລ໌ສ່ວນໃຫຍ່
ຂອງການຖິ້ມຂີ້ເຫຍື້ອແມ່ນເຮັດໄດ້ໂດຍການຕື່ມຕົວເລກຜ່ານແລະຄໍາສັບໃສ່ກັບ dumpname, ແລະ
ໄຟລ໌ຖືກສ້າງຂື້ນຢູ່ໃນໄດເລກະທໍລີຂອງໄຟລ໌ຜົນຜະລິດ. ໃຫ້ສັງເກດວ່າໝາຍເລກຜ່ານແມ່ນ
ຄິດໄລ່ແບບຄົງທີ່ເມື່ອບັດຜ່ານໄດ້ລົງທະບຽນເຂົ້າໃນຕົວຈັດການຜ່ານ. ດັ່ງນັ້ນຈຶ່ງ
ຕົວເລກບໍ່ກ່ຽວຂ້ອງກັບຄໍາສັ່ງແບບເຄື່ອນໄຫວຂອງການປະຕິບັດການຜ່ານ. ໂດຍ​ສະ​ເພາະ,
pass ທີ່ຕິດຕັ້ງໂດຍ plugin ສາມາດມີຈໍານວນຫຼາຍກວ່າ 200 ເຖິງແມ່ນວ່າມັນຖືກປະຕິບັດຂ້ອນຂ້າງ
ຕົ້ນ. dumpname ຖືກສ້າງຂື້ນຈາກຊື່ຂອງໄຟລ໌ຜົນຜະລິດ, ຖ້າຈະແຈ້ງ
ລະບຸໄວ້ແລະມັນບໍ່ແມ່ນການປະຕິບັດ, ຖ້າບໍ່ດັ່ງນັ້ນມັນເປັນຊື່ພື້ນຖານຂອງແຫຼ່ງ
ໄຟລ໌. ສະຫຼັບເຫຼົ່ານີ້ອາດຈະມີຜົນກະທົບທີ່ແຕກຕ່າງກັນໃນເວລາທີ່ -E ຖືກນໍາໃຊ້ສໍາລັບການປຸງແຕ່ງກ່ອນ.

Debug dumps ສາມາດຖືກເປີດໃຊ້ດ້ວຍ a -fdump-rtl ສະຫຼັບຫຼືບາງ -d ທາງເລືອກ ຕົວອັກສອນທີ່ຢູ່ ທີ່ນີ້
ແມ່ນຕົວອັກສອນທີ່ເປັນໄປໄດ້ສໍາລັບການນໍາໃຊ້ໃນ ຜ່ານ ແລະ ຕົວອັກສອນ, ແລະ​ຄວາມ​ຫມາຍ​ຂອງ​ເຂົາ​ເຈົ້າ​:

-fdump-rtl-alignments
ການຖິ້ມຂີ້ເຫຍື້ອຫຼັງຈາກການຈັດຮຽງສາຂາໄດ້ຖືກຄິດໄລ່.

-fdump-rtl-asmcons
Dump ຫຼັງຈາກການແກ້ໄຂຄໍາຖະແຫຼງທີ່ rtl ທີ່ມີຂໍ້ຈໍາກັດໃນ / ອອກທີ່ບໍ່ພໍໃຈ.

-fdump-rtl-auto_inc_dec
ຖິ້ມຫຼັງຈາກການຄົ້ນພົບ auto-inc-dec. ໃບຜ່ານນີ້ແມ່ນໃຊ້ໃນສະຖາປັດຕະຍະກໍາເທົ່ານັ້ນ
ມີ auto inc ຫຼືຄໍາແນະນໍາອັດຕະໂນມັດ dec.

-fdump-rtl-ສິ່ງກີດຂວາງ
ຖິ້ມຫຼັງຈາກທໍາຄວາມສະອາດຄໍາແນະນໍາອຸປະສັກ.

-fdump-rtl-bbpart
ຖິ້ມຫຼັງຈາກແບ່ງປັນທ່ອນໄມ້ພື້ນຖານຮ້ອນແລະເຢັນ.

-fdump-rtl-bbro
ຖິ້ມຫຼັງການສັ່ງບລັອກຄືນໃໝ່.

-fdump-rtl-btl1
-fdump-rtl-btl2
-fdump-rtl-btl1 ແລະ -fdump-rtl-btl2 ເປີດໃຊ້ການຖິ້ມຂີ້ເຫຍື້ອຫຼັງຈາກເປົ້າຫມາຍສອງສາຂາ
ການເພີ່ມປະສິດທິພາບການໂຫຼດຜ່ານ.

-fdump-rtl-bypass
ການຖິ້ມຂີ້ເຫຍື້ອຫຼັງຈາກໂດດຂ້າມແລະຄວບຄຸມການເພີ່ມປະສິດທິພາບການໄຫຼ.

-fdump-rtl-combine
ຖິ້ມຫຼັງຈາກຊຸດຄໍາແນະນໍາ RTL ຜ່ານ.

-fdump-rtl-compgotos
ຖິ້ມຫຼັງຈາກ duplicating the computed gotos.

-fdump-rtl-ce1
-fdump-rtl-ce2
-fdump-rtl-ce3
-fdump-rtl-ce1, -fdump-rtl-ce2, ແລະ -fdump-rtl-ce3 ເປີດໃຊ້ການຖິ້ມຂີ້ເຫຍື້ອຫຼັງຈາກສາມ
ຖ້າການປ່ຽນໃຈເຫລື້ອມໃສຜ່ານໄປ.

-fdump-rtl-cprop_hardreg
ຖິ້ມຫຼັງຈາກການຂະຫຍາຍພັນສໍາເນົາແຂງ.

-fdump-rtl-csa
Dump ຫຼັງຈາກສົມທົບການປັບ stack.

-fdump-rtl-cse1
-fdump-rtl-cse2
-fdump-rtl-cse1 ແລະ -fdump-rtl-cse2 ເປີດໃຊ້ການຖິ້ມຂີ້ເຫຍື້ອຫຼັງຈາກສອງຍ່ອຍທົ່ວໄປ.
ການລົບລ້າງການສະແດງອອກຜ່ານ.

-fdump-rtl-dce
ການຖິ້ມຂີ້ເຫຍື້ອຫຼັງຈາກການກໍາຈັດລະຫັດຕາຍແບບດ່ຽວຜ່ານໄປ.

-fdump-rtl-dbr
ຖິ້ມຫຼັງຈາກການຈັດຕາຕະລາງສາຂາທີ່ຊັກຊ້າ.

-fdump-rtl-dce1
-fdump-rtl-dce2
-fdump-rtl-dce1 ແລະ -fdump-rtl-dce2 ເປີດໃຊ້ການຖິ້ມຂີ້ເຫຍື້ອຫຼັງຈາກສອງຮ້ານຕາຍ
ຜ່ານ​ການ​ລົບ​ລ້າງ​.

-fdump-rtl-eh
Dump ຫຼັງຈາກສຸດທ້າຍຂອງລະຫັດການຈັດການ EH.

-fdump-rtl-eh_ranges
ການຖິ້ມຂີ້ເຫຍື້ອຫຼັງຈາກການປ່ຽນແປງຂອງພາກພື້ນໄລຍະການຈັດການ EH.

-fdump-rtl-ຂະຫຍາຍ
ຖິ້ມຫຼັງຈາກການຜະລິດ RTL.

-fdump-rtl-fwprop1
-fdump-rtl-fwprop2
-fdump-rtl-fwprop1 ແລະ -fdump-rtl-fwprop2 ເປີດໃຊ້ການຖິ້ມຂີ້ເຫຍື້ອຫຼັງຈາກທັງສອງສົ່ງຕໍ່
ຜ່ານການຂະຫຍາຍພັນ.

-fdump-rtl-gcse1
-fdump-rtl-gcse2
-fdump-rtl-gcse1 ແລະ -fdump-rtl-gcse2 ເປີດໃຊ້ການຖິ້ມຂີ້ເຫຍື້ອຫຼັງຈາກທົ່ວໄປທົ່ວໂລກ
ການ​ລົບ​ລ້າງ subexpression​.

-fdump-rtl-init-regs
ການຖິ້ມຂີ້ເຫຍື້ອຫຼັງຈາກການເລີ່ມຕົ້ນຂອງທະບຽນ.

-fdump-rtl-initvals
ຖິ້ມຫຼັງຈາກຄໍານວນຂອງຊຸດມູນຄ່າເບື້ອງຕົ້ນ.

-fdump-rtl-into_cfglayout
ຖິ້ມຫຼັງຈາກປ່ຽນເປັນໂໝດ cfglayout.

-fdump-rtl-ira
ການຖິ້ມຂີ້ເຫຍື້ອຫຼັງຈາກການຈັດສັນການລົງທະບຽນ iterated.

-fdump-rtl-jump
Dump ຫຼັງຈາກການເພີ່ມປະສິດທິພາບການໂດດຄັ້ງທີສອງ.

-fdump-rtl-loop2
-fdump-rtl-loop2 ເປີດໃຊ້ການ dumping ຫຼັງຈາກ rtl loop optimization ຜ່ານໄປ.

-fdump-rtl-mach
ການຖິ້ມຂີ້ເຫຍື້ອຫຼັງຈາກປະຕິບັດການ reorganization pass ຂຶ້ນກັບເຄື່ອງຈັກ, ຖ້າຫາກວ່າຜ່ານ
ລາຄາ:.

-fdump-rtl-mode_sw
ຖິ້ມຫຼັງຈາກຖອດປຸ່ມໂໝດຊ້ຳຊ້ອນ.

-fdump-rtl-rnreg
ຖິ້ມຫຼັງຈາກລົງທະບຽນການປ່ຽນເລກ.

-fdump-rtl-outof_cfglayout
ຖິ້ມຫຼັງຈາກປ່ຽນຈາກໂຫມດ cfglayout.

-fdump-rtl-peephole2
ຖິ້ມຫຼັງຈາກປາກຊ່ອງຜ່ານ.

-fdump-rtl-postreload
ຖິ້ມຫຼັງການເພີ່ມປະສິດທິພາບຫຼັງການໂຫຼດໃໝ່.

-fdump-rtl-pro_and_epilogue
ຖິ້ມຫຼັງຈາກສ້າງບົດບັນຍາຍ ແລະບົດເລື່ອງກ່ຽວກັບຟັງຊັນ.

-fdump-rtl-regmove
ຖິ້ມຫຼັງຈາກລົງທະບຽນຍ້າຍຜ່ານ.

-fdump-rtl-sched1
-fdump-rtl-sched2
-fdump-rtl-sched1 ແລະ -fdump-rtl-sched2 ເປີດໃຊ້ການຖິ້ມຂີ້ເຫຍື້ອຫຼັງຈາກບລັອກພື້ນຖານ
ກໍານົດເວລາຜ່ານ.

-fdump-rtl-ເບິ່ງ
ການຖິ້ມຂີ້ເຫຍື້ອຫຼັງຈາກການລົບລ້າງການຂະຫຍາຍປ້າຍ.

-fdump-rtl-seqabstr
ຖິ້ມຫຼັງຈາກການຄົ້ນພົບລໍາດັບທົ່ວໄປ.

-fdump-rtl-ຫຍໍ້
ຖິ້ມຫຼັງຈາກເຮັດໃຫ້ງ່າສັ້ນລົງ.

-fdump-rtl-sibling
ຖິ້ມຫຼັງຈາກການເພີ່ມປະສິດທິພາບການໂທພີ່ນ້ອງ.

-fdump-rtl-split1
-fdump-rtl-split2
-fdump-rtl-split3
-fdump-rtl-split4
-fdump-rtl-split5
-fdump-rtl-split1, -fdump-rtl-split2, -fdump-rtl-split3, -fdump-rtl-split4 ແລະ
-fdump-rtl-split5 ເປີດໃຊ້ການຖິ້ມຂີ້ເຫຍື້ອຫຼັງຈາກຫ້າຮອບຂອງການແບ່ງປັນຄໍາແນະນໍາ.

-fdump-rtl-sms
ຖິ້ມຫຼັງຈາກກຳນົດເວລາແບບໂມດູໂລ. ບັດນີ້ໃຊ້ໄດ້ກັບບາງສະຖາປັດຕະຍະກຳເທົ່ານັ້ນ.

-fdump-rtl-stack
ການຖິ້ມຂີ້ເຫຍື້ອຫຼັງຈາກການປ່ຽນແປງຈາກ "ໄຟລ໌ລົງທະບຽນແປ" ຂອງ GCC ລົງທະບຽນກັບ x87's
ທະບຽນແບບ stack. ບັດນີ້ໃຊ້ໄດ້ກັບຕົວແປ x86 ເທົ່ານັ້ນ.

-fdump-rtl-subreg1
-fdump-rtl-subreg2
-fdump-rtl-subreg1 ແລະ -fdump-rtl-subreg2 ເປີດໃຊ້ dumping ຫຼັງຈາກສອງ subreg
ການຂະຫຍາຍຜ່ານ.

-fdump-rtl-unshare
ຖິ້ມຫຼັງຈາກ rtl ທັງໝົດຖືກຍົກເລີກການແບ່ງປັນ.

-fdump-rtl-vartrack
ຖິ້ມຫຼັງຈາກການຕິດຕາມຕົວແປ.

-fdump-rtl-vregs
ຖິ້ມຫຼັງຈາກປ່ຽນການລົງທະບຽນສະເໝືອນເປັນການລົງທະບຽນຍາກ.

-fdump-rtl-web
ຖິ້ມຫຼັງຈາກແຍກໄລຍະສົດ.

-fdump-rtl-regclass
-fdump-rtl-subregs_of_mode_init
-fdump-rtl-subregs_of_mode_finish
-fdump-rtl-dfinit
-fdump-rtl-dfinish
dumps ເຫຼົ່ານີ້ແມ່ນຖືກກໍານົດແຕ່ຜະລິດໄຟລ໌ຫວ່າງເປົ່າສະເຫມີ.

-in
-fdump-rtl-ທັງໝົດ
ຜະລິດ dumps ທັງຫມົດທີ່ລະບຸໄວ້ຂ້າງເທິງ.

-dA ບັນທຶກຜົນອອກມາຂອງຕົວປະກອບດ້ວຍຂໍ້ມູນການດີບັກອື່ນໆ.

-dD ຖິ້ມນິຍາມມະຫາພາກທັງໝົດ, ໃນຕອນທ້າຍຂອງການປະມວນຜົນກ່ອນ, ນອກເໜືອໄປຈາກປົກກະຕິ
ຜົນຜະລິດ.

-dH ຜະລິດ dump ຫຼັກທຸກຄັ້ງທີ່ເກີດຄວາມຜິດພາດ.

-dp ບັນທຶກຜົນອອກມາຂອງຕົວປະກອບດ້ວຍຄຳເຫັນທີ່ຊີ້ບອກວ່າຮູບແບບໃດ ແລະ
ທາງເລືອກທີ່ຖືກນໍາໃຊ້. ຄວາມຍາວຂອງແຕ່ລະຄໍາແນະນໍາຍັງຖືກພິມອອກ.

-dP ຖິ້ມ RTL ໃນຜົນຜະລິດຂອງຕົວປະກອບເປັນຄໍາຄິດຄໍາເຫັນກ່ອນແຕ່ລະຄໍາແນະນໍາ. ນອກຈາກນີ້
ເປີດ -dp ຄຳ ອະທິບາຍ.

-ດີວີດີ ສໍາລັບແຕ່ລະໄຟລ໌ dump ຊີ້ບອກອື່ນໆ (-fdump-rtl-ຜ່ານ), dump ກ
ການເປັນຕົວແທນຂອງເສັ້ນສະແດງການໄຫຼຂອງການຄວບຄຸມທີ່ເຫມາະສົມສໍາລັບການເບິ່ງດ້ວຍ VCG ກັບ
file.pass.vcg.

-dx ພຽງແຕ່ສ້າງ RTL ສໍາລັບຫນ້າທີ່ແທນທີ່ຈະລວບລວມມັນ. ປົກກະຕິແລ້ວໃຊ້ກັບ
-fdump-rtl-ຂະຫຍາຍ.

-fdump-noaddr
ໃນເວລາທີ່ດໍາເນີນການ debugging dumps, ສະກັດກັ້ນຜົນຜະລິດທີ່ຢູ່. ນີ້ເຮັດໃຫ້ມັນເປັນໄປໄດ້ຫຼາຍທີ່ຈະ
ໃຊ້ diff ໃນການດີບັກການຖິ້ມຂີ້ເຫຍື້ອສໍາລັບການເອີ້ນ compiler ກັບ binaries compiler ທີ່ແຕກຕ່າງກັນ
ແລະ / ຫຼືຂໍ້ຄວາມ / bss / ຂໍ້ມູນ / heap / stack / dso ເລີ່ມຕົ້ນທີ່ແຕກຕ່າງກັນ.

-fdump-ບໍ່ມີຕົວເລກ
ໃນເວລາທີ່ດໍາເນີນການ debugging dumps, ສະກັດກັ້ນຕົວເລກຄໍາແນະນໍາແລະທີ່ຢູ່ອອກ. ນີ້
ເຮັດໃຫ້ມັນເປັນໄປໄດ້ຫຼາຍທີ່ຈະໃຊ້ diff ໃນ debugging dumps ສໍາລັບ compiler invocations ກັບ
ທາງເລືອກທີ່ແຕກຕ່າງກັນ, ໂດຍສະເພາະກັບແລະບໍ່ມີ -g.

-fdump-unnumbered-links
ໃນເວລາທີ່ດໍາເນີນການ debugging dumps (ເບິ່ງ -d ທາງເລືອກຂ້າງເທິງ), ສະກັດກັ້ນຕົວເລກຄໍາແນະນໍາສໍາລັບ
ເຊື່ອມຕໍ່ກັບຄໍາແນະນໍາທີ່ຜ່ານມາແລະຕໍ່ໄປໃນລໍາດັບ.

-fdump-translation-unit (C++ ເທົ່ານັ້ນ)
-fdump-translation-unit-ທາງເລືອກໃນການ (C++ ເທົ່ານັ້ນ)
ຖິ້ມການເປັນຕົວແທນຂອງໂຄງສ້າງຕົ້ນໄມ້ສໍາລັບຫນ່ວຍງານການແປທັງຫມົດໄປຫາໄຟລ໌.
ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ .tu ກັບຊື່ໄຟລ໌ແຫຼ່ງ, ແລະໄຟລ໌ແມ່ນ
ສ້າງຢູ່ໃນໄດເລກະທໍລີດຽວກັນກັບໄຟລ໌ຜົນຜະລິດ. ຖ້າ -ທາງເລືອກໃນການ ຮູບ​ແບບ​ການ​ນໍາ​ໃຊ້​,
ທາງເລືອກໃນການ ຄວບຄຸມລາຍລະອຽດຂອງ dump ດັ່ງທີ່ໄດ້ອະທິບາຍໄວ້ສໍາລັບການ -fdump-ຕົ້ນໄມ້ ຕົວເລືອກ

-fdump-class-hierarchy (C++ ເທົ່ານັ້ນ)
-fdump-class-hierarchy-ທາງເລືອກໃນການ (C++ ເທົ່ານັ້ນ)
ຖິ້ມການເປັນຕົວແທນຂອງລໍາດັບຊັ້ນຂອງແຕ່ລະຊັ້ນຮຽນແລະຮູບແບບຕາຕະລາງຟັງຊັນ virtual ໄປຫາ a
ໄຟລ໌. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ .ຫ້ອງຮຽນ ກັບຊື່ໄຟລ໌ແຫຼ່ງ, ແລະໄຟລ໌
ຖືກສ້າງຂື້ນຢູ່ໃນໄດເລກະທໍລີດຽວກັນກັບໄຟລ໌ຜົນຜະລິດ. ຖ້າ -ທາງເລືອກໃນການ ຮູບ​ແບບ​ການ​ນໍາ​ໃຊ້​,
ທາງເລືອກໃນການ ຄວບຄຸມລາຍລະອຽດຂອງ dump ດັ່ງທີ່ໄດ້ອະທິບາຍໄວ້ສໍາລັບການ -fdump-ຕົ້ນໄມ້ ຕົວເລືອກ

-fdump-ipa-ສະຫຼັບ
ຄວບ​ຄຸມ​ການ​ຖິ້ມ​ຂີ້​ເຫຍື້ອ​ໃນ​ຂັ້ນ​ຕອນ​ຕ່າງໆ​ຂອງ​ການ​ວິ​ເຄາະ​ລະ​ບົບ​ລະ​ບຽບ​ການ​ຂອງ​ພາ​ສາ​ເປັນ​
ໄຟລ໌. ຊື່ໄຟລ໌ແມ່ນສ້າງຂຶ້ນໂດຍການຕໍ່ທ້າຍສະວິດສະເພາະກັບແຫຼ່ງທີ່ມາ
ຊື່ໄຟລ໌, ແລະໄຟລ໌ຖືກສ້າງຂື້ນຢູ່ໃນໄດເລກະທໍລີດຽວກັນກັບໄຟລ໌ຜົນຜະລິດ. ໄດ້
ການຖິ້ມຂີ້ເຫຍື້ອຕໍ່ໄປນີ້ແມ່ນເປັນໄປໄດ້:

ທັງຫມົດ ເປີດໃຊ້ການຖິ້ມການວິເຄາະລະຫວ່າງຂັ້ນຕອນທັງໝົດ.

ຖັນ
dumps ຂໍ້​ມູນ​ກ່ຽວ​ກັບ​ການ​ປັບ​ຄ່າ​ກາ​ຟ​ໂທ​, ການ​ລົບ​ຫນ້າ​ທີ່​ທີ່​ບໍ່​ໄດ້​ນໍາ​ໃຊ້​, ແລະ​
ການ​ຕັດ​ສິນ​ໃຈ inlining​.

inline
ຖິ້ມຫຼັງຈາກຟັງຊັນ inlining.

-fdump-ຜ່ານ
ຖິ້ມບັນຊີລາຍຊື່ຂອງການເພີ່ມປະສິດທິພາບການສົ່ງຜ່ານທີ່ເປີດແລະປິດໂດຍປະຈຸບັນ
ຕົວເລືອກແຖວຄໍາສັ່ງ.

-fdump-ສະຖິຕິ-ທາງເລືອກ
ເປີດໃຊ້ ແລະຄວບຄຸມການຖິ້ມສະຖິຕິຜ່ານໃນໄຟລ໌ແຍກຕ່າງຫາກ. ຊື່ໄຟລ໌ແມ່ນ
ສ້າງຂຶ້ນໂດຍການໃສ່ຄຳຕໍ່ທ້າຍທີ່ລົງທ້າຍດ້ວຍ .ສະຖິຕິ ກັບຊື່ໄຟລ໌ແຫຼ່ງ, ແລະ
ໄຟລ໌ຖືກສ້າງຢູ່ໃນໄດເລກະທໍລີດຽວກັນກັບໄຟລ໌ຜົນຜະລິດ. ຖ້າ -ທາງເລືອກ ແບບຟອມແມ່ນ
ໃຊ້ແລ້ວ, - ສະ​ຖິ​ຕິ​ ຈະເຮັດໃຫ້ຕົວນັບຖືກສະຫຼຸບໃນທົ່ວຫນ່ວຍງານລວບລວມທັງຫມົດໃນຂະນະທີ່
- ລາຍ​ລະ​ອຽດ​ ຈະຖິ້ມທຸກເຫດການຍ້ອນວ່າ passes ສ້າງໃຫ້ເຂົາເຈົ້າ. ຄ່າເລີ່ມຕົ້ນທີ່ບໍ່ມີ
ທາງ​ເລືອກ​ແມ່ນ​ການ​ລວມ​ຕົວ​ນັບ​ສໍາ​ລັບ​ແຕ່​ລະ​ຫນ້າ​ທີ່​ໄດ້​ສັງ​ລວມ​.

-fdump-ຕົ້ນໄມ້-ສະຫຼັບ
-fdump-ຕົ້ນໄມ້-ສະຫຼັບ-ທາງເລືອກໃນການ
ຄວບຄຸມການຖິ້ມຂີ້ເຫຍື້ອໃນຂັ້ນຕອນຕ່າງໆຂອງການປຸງແຕ່ງຕົ້ນໄມ້ພາສາລະດັບປານກາງເພື່ອ
ໄຟລ໌. ຊື່ໄຟລ໌ແມ່ນສ້າງຂຶ້ນໂດຍການຕໍ່ທ້າຍສະວິດສະເພາະກັບ
ຊື່ໄຟລ໌ແຫຼ່ງ, ແລະໄຟລ໌ຖືກສ້າງຂື້ນຢູ່ໃນໄດເລກະທໍລີດຽວກັນກັບໄຟລ໌ຜົນຜະລິດ.
ຖ້າ -ທາງເລືອກໃນການ ຮູບ​ແບບ​ການ​ນໍາ​ໃຊ້​, ທາງເລືອກໃນການ ແມ່ນບັນຊີລາຍຊື່ຂອງ - ແຍກທາງເລືອກທີ່ຄວບຄຸມ
ລາຍ​ລະ​ອຽດ​ຂອງ dump ໄດ້​. ບໍ່ແມ່ນທາງເລືອກທັງຫມົດແມ່ນໃຊ້ໄດ້ກັບບ່ອນຖິ້ມຂີ້ເຫຍື້ອທັງຫມົດ; ເຫຼົ່ານັ້ນ
ບໍ່ມີຄວາມຫມາຍຈະຖືກລະເລີຍ. ທາງເລືອກຕໍ່ໄປນີ້ແມ່ນມີຢູ່

ທີ່ຢູ່
ພິມທີ່ຢູ່ຂອງແຕ່ລະ node. ປົກກະຕິແລ້ວນີ້ບໍ່ມີຄວາມຫມາຍຍ້ອນວ່າມັນປ່ຽນແປງ
ອີງຕາມສະພາບແວດລ້ອມແລະໄຟລ໌ແຫຼ່ງ. ການ​ນໍາ​ໃຊ້​ຕົ້ນ​ຕໍ​ຂອງ​ມັນ​ແມ່ນ​ສໍາ​ລັບ​ການ​ເຊື່ອມ​ຕໍ່​ເປັນ​
dump ໄຟລ໌ທີ່ມີສະພາບແວດລ້ອມດີບັກ.

asmname
ຖ້າ "DECL_ASSEMBLER_NAME" ໄດ້ຖືກຕັ້ງເປັນ decl ທີ່ໃຫ້, ໃຊ້ມັນຢູ່ໃນ dump
ແທນ "DECL_NAME". ການ​ນໍາ​ໃຊ້​ຕົ້ນ​ຕໍ​ຂອງ​ຕົນ​ແມ່ນ​ຄວາມ​ງ່າຍ​ຂອງ​ການ​ນໍາ​ໃຊ້​ເຮັດ​ວຽກ​ກັບ​ຄືນ​ໄປ​ບ່ອນ​ຈາກ​
mangled ຊື່ໃນເອກະສານປະກອບ.

ກະທັດຮັດ
ຍັບຍັ້ງການຖິ້ມຂີ້ເຫຍື້ອຂອງສະມາຊິກຂອງຂອບເຂດຫຼືຮ່າງກາຍຂອງຫນ້າທີ່ພຽງແຕ່ເນື່ອງຈາກວ່ານັ້ນ
ຂອບເຂດໄດ້ບັນລຸແລ້ວ. ພຽງແຕ່ຖິ້ມລາຍການດັ່ງກ່າວເມື່ອພວກເຂົາເຂົ້າເຖິງໄດ້ໂດຍກົງ
ເສັ້ນທາງອື່ນ. ເມື່ອຖິ້ມຕົ້ນໄມ້ທີ່ສວຍງາມ, ທາງເລືອກນີ້ຂັດຂວາງການຖິ້ມຂີ້ເຫຍື້ອ
ອົງການຈັດຕັ້ງຂອງໂຄງສ້າງການຄວບຄຸມ.

ວັດຖຸດິບ ພິມຕົວແທນວັດຖຸດິບຂອງຕົ້ນໄມ້. ໂດຍຄ່າເລີ່ມຕົ້ນ, ຕົ້ນໄມ້ຖືກພິມອອກຢ່າງສວຍງາມ
ຕົວ​ແທນ​ທີ່​ຄ້າຍ​ຄື C​.

ລາຍລະອຽດ
ເປີດໃຊ້ການ dumps ທີ່ມີລາຍລະອຽດເພີ່ມເຕີມ (ບໍ່ເປັນກຽດໂດຍທຸກໆທາງເລືອກ dump).

ສະຖິຕິ
ເປີດໃຊ້ການຖິ້ມສະຖິຕິຕ່າງໆກ່ຽວກັບບັດຜ່ານ (ບໍ່ຖືກຍົກຍ້ອງຈາກທຸກໆການຖິ້ມ
ທາງ​ເລືອກ).

ຕັນ
ເປີດໃຊ້ການສະແດງຂອບເຂດບລັອກພື້ນຖານ (ປິດການໃຊ້ງານຢູ່ໃນບ່ອນຖິ້ມຂີ້ເຫຍື້ອ).

vops
ເປີດໃຊ້ການສະແດງຕົວປະຕິບັດການ virtual ສໍາລັບທຸກໆຄໍາຖະແຫຼງການ.

lineno
ເປີດໃຊ້ການສະແດງຕົວເລກແຖວສໍາລັບຄໍາຖະແຫຼງການ.

uid ເປີດໃຊ້ການສະແດງ ID ທີ່ເປັນເອກະລັກ ("DECL_UID") ສໍາລັບແຕ່ລະຕົວແປ.

ຄຳເວົ້າ
ເປີດໃຊ້ການສະແດງການຖິ້ມຕົ້ນໄມ້ສໍາລັບແຕ່ລະຄໍາຖະແຫຼງການ.

eh ເປີດໃຊ້ການສະແດງຕົວເລກພາກພື້ນ EH ຖືແຕ່ລະຄໍາຖະແຫຼງການ.

scev
ເປີດໃຊ້ການສະແດງລາຍລະອຽດການວິເຄາະວິວັຖນາການ.

ທັງຫມົດ ເປີດຕົວເລືອກທັງໝົດ, ຍົກເວັ້ນ ວັດຖຸດິບ, ກະທັດຮັດ, ຄຳເວົ້າ ແລະ lineno.

ການຖິ້ມຂີ້ເຫຍື້ອຕົ້ນໄມ້ຕໍ່ໄປນີ້ແມ່ນເປັນໄປໄດ້:

ຕົ້ນສະບັບ
ຖິ້ມກ່ອນການເພີ່ມປະສິດທິພາບໂດຍອີງໃສ່ຕົ້ນໄມ້, ເພື່ອ file.original.

ທີ່ດີທີ່ສຸດ
dump ຫຼັງ​ຈາກ​ການ​ປັບ​ປຸງ​ຕົ້ນ​ໄມ້​ທັງ​ຫມົດ​ທີ່​ເຫມາະ​ສົມ​, ກັບ​ file.optimized.

gimple
ຖິ້ມແຕ່ລະຟັງຊັນກ່ອນ ແລະຫຼັງຈາກ gimplification ຜ່ານໄປຫາໄຟລ໌. ໄຟລ໌
ຊື່ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ .gimple ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

cfg ຖິ້ມເສັ້ນສະແດງການໄຫຼຂອງການຄວບຄຸມຂອງແຕ່ລະຟັງຊັນໃສ່ໄຟລ໌. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍ
ເພີ່ມເຕີມ .cfg ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

vcg ຖິ້ມເສັ້ນສະແດງການໄຫຼຂອງການຄວບຄຸມຂອງແຕ່ລະຟັງຊັນໃສ່ໄຟລ໌ໃນຮູບແບບ VCG. ໄຟລ໌
ຊື່ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ .vcg ກັບຊື່ໄຟລ໌ແຫຼ່ງ. ໃຫ້ສັງເກດວ່າຖ້າໄຟລ໌
ມີຫຼາຍກວ່າຫນຶ່ງຟັງຊັນ, ໄຟລ໌ທີ່ສ້າງຂຶ້ນບໍ່ສາມາດຖືກນໍາໃຊ້ໂດຍກົງໂດຍ
VCG. ທ່ານຈະຈໍາເປັນຕ້ອງໄດ້ຕັດແລະວາງເສັ້ນສະແດງຂອງແຕ່ລະຫນ້າທີ່ເປັນຂອງຕົນເອງແຍກຕ່າງຫາກ
ໄຟລ໌ທໍາອິດ.

ch ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກຄັດລອກສ່ວນຫົວຂອງ loop. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ
ch ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

ssa ຖິ້ມຂໍ້ມູນທີ່ກ່ຽວຂ້ອງກັບ SSA ໃສ່ໄຟລ໌. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ .ສສ
ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

alias
ຖິ້ມຂໍ້ມູນນາມແຝງສຳລັບແຕ່ລະຟັງຊັນ. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ
.ນາມແຝງ ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

CCP ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກ CCP. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ .ccp ການ
ຊື່ໄຟລ໌ແຫຼ່ງ.

storeccp
ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກ STORE-CCP. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ .storeccp
ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

pre ຖິ້ມຕົ້ນໄມ້ຫຼັງຈາກການກໍາຈັດການຊໍ້າຊ້ອນບາງສ່ວນ. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍ
ເພີ່ມເຕີມ .ກ່ອນ ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

ອິດສະລະ ຖິ້ມຕົ້ນໄມ້ຫຼັງຈາກການກໍາຈັດການຊໍ້າຊ້ອນຢ່າງເຕັມທີ່. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ
.ຟຣີ ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

copyprop
ຖິ້ມຕົ້ນໄມ້ພາຍຫຼັງການຂະຫຍາຍພັນ. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ .copyprop
ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

store_copyprop
ຖິ້ມຕົ້ນໄມ້ຫຼັງຈາກເກັບຮັກສາສໍາເນົາການຂະຫຍາຍພັນ. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ
.store_copyprop ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

dce ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກການກໍາຈັດລະຫັດຕາຍ. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍ
ເພີ່ມເຕີມ .dce ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

ຂີ້ຕົມ
ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກເພີ່ມເຄື່ອງມື mudflap. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍ
ເພີ່ມເຕີມ .ຂີ້ຕົມ ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

ທ່ານ / ນາງ ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກປະຕິບັດການທົດແທນການລວບລວມຂໍ້ມູນ. ໄຟລ໌
ຊື່ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ .sra ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

ຈົມລົງ
ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກປະຕິບັດການຈົມລົງລະຫັດ. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍ
ເພີ່ມເຕີມ .ຈົມ ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

dom ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກນຳໃຊ້ການປັບແຕ່ງຕົ້ນໄມ້ເດັ່ນ. ຊື່ໄຟລ໌ແມ່ນ
ເຮັດ​ໂດຍ​ການ​ຕໍ່​ເຕີມ​ .dom ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

ເວົ້າ ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກໃຊ້ການກໍາຈັດຮ້ານຄ້າທີ່ຕາຍແລ້ວ. ຊື່ໄຟລ໌ແມ່ນເຮັດ
ໂດຍ​ການ​ຕໍ່​ທ້າຍ​ .dse ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

phiopt
ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກເພີ່ມປະສິດທິພາບ PHI nodes ເຂົ້າໄປໃນລະຫັດເສັ້ນກົງ. ໄຟລ໌
ຊື່ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ .phiopt ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

forwprop
ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກສົ່ງຕໍ່ຂະຫຍາຍຕົວແປທີ່ໃຊ້ດຽວ. ຊື່ໄຟລ໌
ແມ່ນ​ເຮັດ​ໄດ້​ໂດຍ​ການ​ຕໍ່​ທ້າຍ​ .forwprop ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

ຊື່ສຳເນົາ
ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກນຳໃຊ້ການປັບແຕ່ງການປ່ຽນຊື່ສຳເນົາ. ຊື່ໄຟລ໌ແມ່ນ
ເຮັດ​ໂດຍ​ການ​ຕໍ່​ເຕີມ​ .copyrename ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

ສະບັບເລກທີ ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກນຳໃຊ້ການປັບແຕ່ງຄ່າສົ່ງຄືນທີ່ມີຊື່ໃນແບບທົ່ວໄປ
ຕົ້ນໄມ້. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ .nrv ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

ວີທີ
ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກໃຊ້ vectorization ຂອງ loops. ຊື່ໄຟລ໌ແມ່ນເຮັດ
ໂດຍ​ການ​ຕໍ່​ທ້າຍ​ .vect ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

slp ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກໃຊ້ vectorization ຂອງຕັນພື້ນຖານ. ຊື່ໄຟລ໌ແມ່ນ
ເຮັດ​ໂດຍ​ການ​ຕໍ່​ເຕີມ​ .slp ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

vp ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກການຂະຫຍາຍພັນມູນຄ່າ (VRP). ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍ
ເພີ່ມເຕີມ .vrp ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

ທັງຫມົດ ເປີດໃຊ້ການຖິ້ມຕົ້ນໄມ້ທັງໝົດທີ່ມີທຸງທີ່ມີໃຫ້ຢູ່ໃນຕົວເລືອກນີ້.

-ftree-vectorizer-verbose=n
ທາງ​ເລືອກ​ນີ້​ຄວບ​ຄຸມ​ປະ​ລິ​ມານ​ການ debugging ຜົນ​ຜະ​ລິດ vectorizer ໄດ້​. ນີ້
ຂໍ້ມູນຖືກຂຽນເປັນຄວາມຜິດພາດມາດຕະຖານ, ເວັ້ນເສຍແຕ່ -fdump-tree-ທັງໝົດ or -fdump-tree-vect
ໄດ້ຖືກລະບຸໄວ້, ໃນກໍລະນີນີ້ມັນຖືກສົ່ງອອກໄປຫາໄຟລ໌ລາຍຊື່ dump ປົກກະຕິ, .vectທີ່ຢູ່ ສໍາລັບ
n=0 ບໍ່ມີການລາຍງານຂໍ້ມູນການວິນິໄສ. ຖ້າ n=1 vectorizer ລາຍງານແຕ່ລະ loop
ທີ່ໄດ້ຮັບ vectorized, ແລະຈໍານວນຂອງ loops ທີ່ໄດ້ຮັບ vectorized. ຖ້າ n=2 ໄດ້
vectorizer ຍັງລາຍງານ loops ທີ່ບໍ່ແມ່ນ vectors ທີ່ຜ່ານໄລຍະການວິເຄາະທໍາອິດ
(vect_analyze_loop_form) - ie countable, inner-most, single-bb, single-entry/exit
ວົງ. ນີ້​ແມ່ນ​ລະ​ດັບ verbosity ດຽວ​ກັນ​ວ່າ​ -fdump-tree-vect-stats ໃຊ້. ສູງກວ່າ
ລະດັບ verbosity ໝາຍ ເຖິງຂໍ້ມູນທີ່ຖືກຖິ້ມໄວ້ ສຳ ລັບແຕ່ລະ loop ທີ່ລາຍງານ, ຫຼືຄືກັນ
ຈໍານວນຂໍ້ມູນທີ່ລາຍງານສໍາລັບ loops ເພີ່ມເຕີມ: ຖ້າ n=3, ຕົວແບບຄ່າໃຊ້ຈ່າຍ vectorizer
ຂໍ້ມູນຖືກລາຍງານ. ຖ້າ n=4, ຂໍ້​ມູນ​ທີ່​ກ່ຽວ​ຂ້ອງ​ກັບ​ການ​ຈັດ​ຕັ້ງ​ແມ່ນ​ໄດ້​ເພີ່ມ​ເຂົ້າ​ໄປ​ໃນ​
ບົດລາຍງານ. ຖ້າ n=5, data-references related information (eg memory dependences, memory
access-patterns) ຖືກເພີ່ມເຂົ້າໃນບົດລາຍງານ. ຖ້າ n=6, vectorizer ລາຍງານຍັງບໍ່ແມ່ນ
vectorized ພາຍໃນ - ຫຼາຍທີ່ສຸດ loops ທີ່ບໍ່ຜ່ານໄລຍະການວິເຄາະທໍາອິດ (ie, ອາດຈະບໍ່
ສາມາດນັບໄດ້, ຫຼືອາດຈະມີການຄວບຄຸມທີ່ສັບສົນ). ຖ້າ n=7, vectorizer ລາຍງານ
ຍັງເປັນ loops ທີ່ບໍ່ມີ vectorized. ຖ້າ n=8, ຂໍ້ມູນທີ່ກ່ຽວຂ້ອງ SLP ຖືກເພີ່ມໃສ່
ບົດລາຍງານ. ສໍາລັບ n=9, ຂໍ້ມູນທັງໝົດທີ່ vectorizer ສ້າງໃນລະຫວ່າງການວິເຄາະຂອງມັນ
ແລະການຫັນປ່ຽນໄດ້ຖືກລາຍງານ. ນີ້​ແມ່ນ​ລະ​ດັບ verbosity ດຽວ​ກັນ​ວ່າ​
-fdump-tree-vect-ລາຍລະອຽດ ການນໍາໃຊ້.

-frandom-seed=string
ຕົວເລືອກນີ້ສະຫນອງແນວພັນທີ່ GCC ໃຊ້ໃນເວລາທີ່ມັນຈະໃຊ້ຕົວເລກແບບສຸ່ມ.
ມັນຖືກນໍາໃຊ້ເພື່ອສ້າງຊື່ສັນຍາລັກທີ່ແນ່ນອນທີ່ຈະຕ້ອງແຕກຕ່າງກັນໃນທຸກໆ
ໄຟລ໌ທີ່ລວບລວມ. ມັນ​ຍັງ​ຖືກ​ນໍາ​ໃຊ້​ເພື່ອ​ວາງ​ສະ​ແຕມ​ເປັນ​ເອ​ກະ​ລັກ​ໃນ​ໄຟລ​໌​ຂໍ້​ມູນ​ການ​ຄຸ້ມ​ຄອງ​ແລະ​
ໄຟລ໌ວັດຖຸທີ່ຜະລິດພວກມັນ. ທ່ານສາມາດນໍາໃຊ້ໄດ້ - ເມັດພັນ ທາງ​ເລືອກ​ໃນ​ການ​ຜະ​ລິດ​
ໄຟລ໌ວັດຖຸທີ່ຄ້າຍກັນຄືນໃໝ່.

ໄດ້ string ຄວນຈະແຕກຕ່າງກັນສໍາລັບທຸກໆໄຟລ໌ທີ່ທ່ານລວບລວມ.

-fsched-verbose=n
ກ່ຽວກັບເປົ້າຫມາຍທີ່ນໍາໃຊ້ຕາຕະລາງຄໍາແນະນໍາ, ທາງເລືອກນີ້ຄວບຄຸມປະລິມານຂອງ
debugging output the scheduler prints . ຂໍ້​ມູນ​ນີ້​ແມ່ນ​ໄດ້​ຮັບ​ການ​ຂຽນ​ເປັນ​ຄວາມ​ຜິດ​ພາດ​ມາດ​ຕະ​ຖານ​,
ເວັ້ນເສຍແຕ່ວ່າ -fdump-rtl-sched1 or -fdump-rtl-sched2 ແມ່ນລະບຸໄວ້, ໃນກໍລະນີນີ້ມັນແມ່ນຜົນຜະລິດ
ໄປຫາໄຟລ໌ລາຍຊື່ dump ປົກກະຕິ, .sched1 or .sched2 ຕາມລໍາດັບ. ຢ່າງໃດກໍຕາມສໍາລັບ n
ຫຼາຍກ່ວາເກົ້າ, ຜົນຜະລິດໄດ້ຖືກພິມອອກສະເຫມີກັບຄວາມຜິດພາດມາດຕະຖານ.

ສໍາລັບການ n ຫຼາຍ​ກ​່​ວາ​ສູນ​, -fsched-verbose outputs ຂໍ້ມູນດຽວກັນກັບ
-fdump-rtl-sched1 ແລະ -fdump-rtl-sched2ທີ່ຢູ່ ສໍາລັບ n ຫຼາຍກ່ວາຫນຶ່ງ, ມັນຍັງຜົນຜະລິດພື້ນຖານ
ຄວາມ​ເປັນ​ໄປ​ໄດ້ block​, ຂໍ້​ມູນ​ບັນ​ຊີ​ລາຍ​ລະ​ອຽດ​ທີ່​ກຽມ​ພ້ອມ​ແລະ​ຂໍ້​ມູນ​ຫນ່ວຍ​ງານ / insn​. ສໍາລັບ n
ຫຼາຍກວ່າສອງ, ມັນປະກອບມີ RTL ຢູ່ຈຸດທີ່ເອົາລູກອອກ, ການຄວບຄຸມການໄຫຼເຂົ້າແລະຂໍ້ມູນພາກພື້ນ. ແລະ
ສໍາລັບການ n ຫຼາຍ​ກວ່າ​ສີ່​, -fsched-verbose ລວມທັງຂໍ້ມູນການເພິ່ງພາອາໄສ.

- save-temps​
-save-temps=cwd
ເກັບຮັກສາໄຟລ໌ກາງ "ຊົ່ວຄາວ" ປົກກະຕິຢ່າງຖາວອນ; ວາງພວກມັນຢູ່ໃນປະຈຸບັນ
ໄດເລກະທໍລີແລະຕັ້ງຊື່ພວກເຂົາໂດຍອີງໃສ່ໄຟລ໌ແຫຼ່ງ. ດັ່ງນັ້ນ, ການລວບລວມ foo.c ກັບ -c
- save-temps​ ຈະຜະລິດໄຟລ໌ foo.i ແລະ foo.sເຊັ່ນດຽວກັບ foo.o. ນີ້ສ້າງເປັນ
ປຸງແຕ່ງກ່ອນ foo.i ໄຟລ​໌​ຜົນ​ຜະ​ລິດ​ເຖິງ​ແມ່ນ​ວ່າ compiler ໃນ​ປັດ​ຈຸ​ບັນ​ປົກ​ກະ​ຕິ​ການ​ນໍາ​ໃຊ້ an
preprocessor ປະສົມປະສານ.

ເມື່ອໃຊ້ປະສົມປະສານກັບ -x ທາງເລືອກແຖວຄໍາສັ່ງ, - save-temps​ ແມ່ນສົມເຫດສົມຜົນ
ພຽງ​ພໍ​ທີ່​ຈະ​ຫຼີກ​ເວັ້ນ​ການ​ຂຽນ​ໄຟລ​໌​ແຫຼ່ງ​ຂໍ້​ມູນ​ທີ່​ມີ​ການ​ຂະ​ຫຍາຍ​ດຽວ​ກັນ​ກັບ an
ໄຟລ໌ກາງ. ໄຟລ໌ກາງທີ່ສອດຄ້ອງກັນອາດຈະໄດ້ຮັບໂດຍການປ່ຽນຊື່
ໄຟລ໌ຕົ້ນສະບັບກ່ອນທີ່ຈະນໍາໃຊ້ - save-temps​.

ຖ້າທ່ານເອີ້ນ GCC ໃນຂະຫນານ, ລວບລວມໄຟລ໌ແຫຼ່ງທີ່ແຕກຕ່າງກັນຫຼາຍທີ່ແບ່ງປັນ a
ຊື່ພື້ນຖານທົ່ວໄປຢູ່ໃນໄດເລກະທໍລີຍ່ອຍທີ່ແຕກຕ່າງກັນຫຼືໄຟລ໌ແຫຼ່ງດຽວກັນທີ່ລວບລວມສໍາລັບ
ຈຸດຫມາຍປາຍທາງຜົນຜະລິດຫຼາຍ, ມັນເປັນໄປໄດ້ວ່າ compilers ຂະຫນານທີ່ແຕກຕ່າງກັນຈະ
ແຊກແຊງເຊິ່ງກັນແລະກັນ, ແລະຂຽນທັບໄຟລ໌ຊົ່ວຄາວ. ຕົວ​ຢ່າງ:

gcc -save-temps -o outdir1/foo.o indir1/foo.c&
gcc -save-temps -o outdir2/foo.o indir2/foo.c&

ອາດຈະສົ່ງຜົນໃນ foo.i ແລະ foo.o ຖືກຂຽນໄປພ້ອມໆກັນໂດຍ compilers ທັງສອງ.

-save-temps=obj
ເກັບຮັກສາໄຟລ໌ກາງ "ຊົ່ວຄາວ" ປົກກະຕິຢ່າງຖາວອນ. ຖ້າ -o ທາງ​ເລືອກ​ແມ່ນ​ການ​ນໍາ​ໃຊ້​,
ໄຟລ໌ຊົ່ວຄາວແມ່ນອີງໃສ່ໄຟລ໌ວັດຖຸ. ຖ້າ -o ທາງເລືອກບໍ່ໄດ້ຖືກນໍາໃຊ້, ໄດ້
-save-temps=obj ສະຫຼັບເຮັດຕົວຄື - save-temps​.

ຍົກ​ຕົວ​ຢ່າງ:

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

ຈະສ້າງ foo.i, foo.s, dir/xbar.i, dir/xbar.s, dir2/yfoobar.i, dir2/yfoobar.s, ແລະ
dir2/yfoobar.o.

ເວລາ[=ເອກະສານ]
ລາຍງານເວລາ CPU ທີ່ປະຕິບັດໂດຍແຕ່ລະຂະບວນການຍ່ອຍໃນລໍາດັບການລວບລວມ. ສໍາລັບ C
ໄຟລ໌ແຫຼ່ງ, ນີ້ແມ່ນ compiler ທີ່ເຫມາະສົມແລະ assembler (ບວກກັບ linker ຖ້າການເຊື່ອມໂຍງແມ່ນ
ສໍາເລັດ).

ໂດຍ​ບໍ່​ມີ​ການ​ສະ​ເພາະ​ຂອງ​ໄຟລ​໌​ຜົນ​ຜະ​ລິດ​, ຜົນ​ຜະ​ລິດ​ເບິ່ງ​ຄື​ນີ້​:

#cc1 0.12 0.01
# ເປັນ 0.00 0.01

ຕົວເລກທໍາອິດໃນແຕ່ລະເສັ້ນແມ່ນ "ເວລາຂອງຜູ້ໃຊ້", ນັ້ນແມ່ນເວລາທີ່ໃຊ້ໃນການປະຕິບັດ
ໂຄງການຕົວມັນເອງ. ຕົວເລກທີສອງແມ່ນ "ເວລາຂອງລະບົບ", ເວລາທີ່ໃຊ້ໃນການປະຕິບັດງານ
ປົກກະຕິຂອງລະບົບໃນນາມຂອງໂຄງການ. ຕົວເລກທັງສອງແມ່ນຢູ່ໃນວິນາທີ.

ດ້ວຍ​ຂໍ້​ມູນ​ສະ​ເພາະ​ຂອງ​ໄຟລ​໌​ຜົນ​ຜະ​ລິດ​ໄດ້​, ຜົນ​ຜະ​ລິດ​ໄດ້​ຖືກ​ຕໍ່​ທ້າຍ​ກັບ​ໄຟລ​໌​ທີ່​ມີ​ຊື່​,
ແລະມັນເບິ່ງຄືວ່ານີ້:

0.12 0.01 cc1
0.00 0.01 ເປັນ

"ເວລາຜູ້ໃຊ້" ແລະ "ເວລາຂອງລະບົບ" ຖືກຍ້າຍໄປກ່ອນຊື່ໂຄງການ, ແລະ
ທາງ​ເລືອກ​ທີ່​ຜ່ານ​ໄປ​ໃນ​ໂຄງ​ການ​ແມ່ນ​ສະ​ແດງ​ໃຫ້​ເຫັນ​, ດັ່ງ​ນັ້ນ​ຫນຶ່ງ​ໃນ​ຕໍ່​ມາ​ສາ​ມາດ​ບອກ​ໄດ້​ວ່າ​ໄຟລ​໌​ແມ່ນ​
ຖືກລວບລວມ, ແລະມີທາງເລືອກໃດ.

-fvar-ຕິດຕາມ
ດໍາເນີນການຕິດຕາມຕົວແປ. ມັນຄິດໄລ່ບ່ອນທີ່ຕົວແປຖືກເກັບໄວ້ໃນແຕ່ລະຕໍາແຫນ່ງ
ໃນລະຫັດ. ຂໍ້ມູນ debugging ທີ່ດີກວ່າແມ່ນຫຼັງຈາກນັ້ນຖືກສ້າງຂຶ້ນ (ຖ້າຫາກວ່າຂໍ້ມູນ debugging
ຮູບ​ແບບ​ສະ​ຫນັບ​ສະ​ຫນູນ​ຂໍ້​ມູນ​ນີ້​)​.

ມັນຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນເມື່ອລວບລວມກັບການເພີ່ມປະສິດທິພາບ (-ອສ, -O, -O2, ... ),
ຂໍ້ມູນການດີບັກ (-g) ແລະຮູບແບບຂໍ້ມູນ debug ສະຫນັບສະຫນູນມັນ.

-fvar-tracking-assignments
ບັນທຶກການມອບໝາຍໃຫ້ກັບຕົວແປຂອງຜູ້ໃຊ້ໃນຕອນຕົ້ນຂອງການລວບລວມ ແລະພະຍາຍາມປະຕິບັດ
ຄໍາບັນຍາຍໃນໄລຍະການລວບລວມຕະຫຼອດໄປຈົນເຖິງທີ່ສຸດ, ໃນຄວາມພະຍາຍາມ
ເພື່ອປັບປຸງຂໍ້ມູນດີບັກໃນຂະນະທີ່ເພີ່ມປະສິດທິພາບ. ການນໍາໃຊ້ -gdwarf-4 ແມ່ນແນະນໍາພ້ອມ
ກັບ​ມັນ.

ມັນສາມາດຖືກເປີດໃຊ້ໄດ້ເຖິງແມ່ນວ່າການຕິດຕາມ var ຈະຖືກປິດໃຊ້ງານ, ໃນກໍລະນີທີ່ມີຄໍາບັນຍາຍ
ສ້າງແລະຮັກສາ, ແຕ່ຖືກຍົກເລີກໃນຕອນທ້າຍ.

-fvar-tracking-assignments-toggle
Toggle -fvar-tracking-assignments, ໃນທາງດຽວກັນນັ້ນ -gtoggle ສະຫຼັບ -g.

-print-file-name=ຫ້ອງສະຫມຸດ
ພິມຊື່ເຕັມຂອງໄຟລ໌ຫ້ອງສະໝຸດ ຫ້ອງສະຫມຸດ ທີ່ຈະຖືກນໍາໃຊ້ໃນເວລາທີ່
ເຊື່ອມຕໍ່--- ແລະຢ່າເຮັດຫຍັງອີກ. ດ້ວຍຕົວເລືອກນີ້, GCC ບໍ່ໄດ້ລວບລວມຫຼືເຊື່ອມຕໍ່
ຫຍັງ; ມັນພຽງແຕ່ພິມຊື່ໄຟລ໌.

-print-multi-directory
ພິມຊື່ໄດເລກະທໍລີທີ່ສອດຄ້ອງກັບ multilib ທີ່ເລືອກໂດຍສະວິດອື່ນ
ມີຢູ່ໃນເສັ້ນຄໍາສັ່ງ. ໄດເລກະທໍລີນີ້ຄວນຈະມີຢູ່ໃນ GCC_EXEC_PREFIX.

-print-multi-lib
ພິມແຜນທີ່ຈາກຊື່ໄດເລກະທໍລີ multilib ໄປຫາສະຫຼັບ compiler ທີ່ເປີດໃຊ້ພວກມັນ.
ຊື່ໄດເລກະທໍລີຖືກແຍກອອກຈາກສະຫຼັບໂດຍ ;, ແລະແຕ່ລະສະຫຼັບເລີ່ມຕົ້ນດ້ວຍ
@ ແທນທີ່ຈະ -, ໂດຍບໍ່ມີຊ່ອງຫວ່າງລະຫວ່າງສະຫຼັບຫຼາຍ. ນີ້ແມ່ນ supposed
ສະດວກໃນການປຸງແຕ່ງແກະ.

-print-multi-os-directory
ພິມເສັ້ນທາງໄປຫາຫ້ອງສະໝຸດ OS ສໍາລັບ multilib ທີ່ເລືອກ, ທຽບກັບບາງອັນ lib
ບັນຊີຍ່ອຍ. ຖ້າມີຫ້ອງສະຫມຸດ OS ຢູ່ໃນ lib subdirectory ແລະບໍ່ມີ multilibs
ຖືກນໍາໃຊ້, ນີ້ແມ່ນປົກກະຕິແລ້ວພຽງແຕ່ ., ຖ້າມີຫ້ອງສະຫມຸດ OS ຢູ່ໃນ libsuffix ອ້າຍເອື້ອຍນ້ອງ
ໄດເລກະທໍລີນີ້ພິມເຊັ່ນ: ../lib64, ../ lib or ../lib32, ຫຼືຖ້າມີຫ້ອງສະຫມຸດ OS
ປະຈຸບັນໃນ lib/subdir subdirectories ມັນພິມເຊັ່ນ: amd64, sparcv9 or ເຮືອນ6.

-print-multiarch
ພິມເສັ້ນທາງໄປຫາຫ້ອງສະໝຸດ OS ສໍາລັບ multiarch ທີ່ເລືອກ, ທຽບກັບບາງອັນ lib
ໄດເຣັກທໍຣີຍ່ອຍ

-print-prog-name=ໂຄງການ
ຄື -print-file-name, ແຕ່ຄົ້ນຫາສໍາລັບໂຄງການເຊັ່ນ: cpp.

-print-libgcc-file-name
ຄື​ກັນ​ກັບ -print-file-name=libgcc.a.

ນີ້ແມ່ນເປັນປະໂຫຍດໃນເວລາທີ່ທ່ານໃຊ້ -nostdlib or -nodefaultlibs ແຕ່ທ່ານຕ້ອງການເຊື່ອມຕໍ່ກັບ
libgcc.a. ເຈົ້າສາມາດເຮັດໄດ້

gcc -nostdlib ... `gcc -print-libgcc-file-name`

-print-search-dirs
ພິມຊື່ຂອງໄດເລກະທໍລີການຕິດຕັ້ງທີ່ກໍານົດໄວ້ແລະບັນຊີລາຍຊື່ຂອງໂປລແກລມແລະ
ລາຍຊື່ຫ້ອງສະໝຸດ gcc ຈະຄົ້ນຫາ --- ແລະບໍ່ເຮັດຫຍັງອີກ.

ນີ້ແມ່ນເປັນປະໂຫຍດໃນເວລາທີ່ gcc ພິມ​ຂໍ້​ຄວາມ​ຜິດ​ພາດ​ ການຕິດຕັ້ງ ປັນຫາ, ບໍ່ສາມາດເຮັດໄດ້ exec
cpp0: No ດັ່ງກ່າວ ເອກະສານ or ລະບົບ. ເພື່ອແກ້ໄຂບັນຫານີ້, ທ່ານ ຈຳ ເປັນຕ້ອງໃສ່ cpp0 ແລະ
ອົງປະກອບ compiler ອື່ນໆທີ່ gcc ຄາດວ່າຈະຊອກຫາໃຫ້ເຂົາເຈົ້າ, ຫຼືທ່ານສາມາດກໍານົດໄດ້
ຕົວແປສິ່ງແວດລ້ອມ GCC_EXEC_PREFIX ໄປຫາໄດເລກະທໍລີທີ່ທ່ານຕິດຕັ້ງພວກມັນ. ຢ່າ
ລືມຕິດຕາມ /.

-print-sysroot
ພິມໄດເຣັກທໍຣີ sysroot ເປົ້າຫມາຍທີ່ຈະຖືກນໍາໃຊ້ໃນລະຫວ່າງການລວບລວມ. ນີ້​ແມ່ນ
sysroot ເປົ້າ​ຫມາຍ​ທີ່​ລະ​ບຸ​ໄວ້​ທັງ​ໃນ​ເວ​ລາ​ທີ່​ກໍາ​ນົດ​ໄວ້​ຫຼື​ການ​ນໍາ​ໃຊ້​ --sysroot ທາງເລືອກ,
ອາດຈະເປັນການຕໍ່ທ້າຍເພີ່ມເຕີມທີ່ຂຶ້ນກັບທາງເລືອກການລວບລວມ. ຖ້າບໍ່ມີເປົ້າໝາຍ
sysroot ຖືກລະບຸ, ທາງເລືອກທີ່ພິມບໍ່ມີຫຍັງ.

-print-sysroot-headers-suffix
ພິມຄໍາຕໍ່ທ້າຍທີ່ເພີ່ມໃສ່ sysroot ເປົ້າຫມາຍໃນເວລາທີ່ຊອກຫາ headers, ຫຼືໃຫ້ an
ຜິດພາດຖ້າຫາກວ່າ compiler ບໍ່ໄດ້ configured ກັບດັ່ງກ່າວ suffix --- ແລະບໍ່ເຮັດຫຍັງ.
ອື່ນ ໆ

- ເຄື່ອງ​ຂີ້​ຝຸ່ນ
ພິມເຄື່ອງເປົ້າໝາຍຂອງຜູ້ລວບລວມຂໍ້ມູນ (ຕົວຢ່າງ: i686-pc-linux-gnu) --- ແລະຢ່າເຮັດ
ມີ​ຫຍັງ​ອີກ​ບໍ່.

- dumpversion
ພິມສະບັບ compiler (ຕົວຢ່າງ: 3.0)--- ແລະຢ່າເຮັດຫຍັງອີກ.

- dumpspecs
ພິມຂໍ້ມູນຈໍາເພາະໃນຕົວຂອງ compiler-- ແລະຢ່າເຮັດອັນອື່ນ. (ນີ້​ແມ່ນ​ການ​ນໍາ​ໃຊ້​ໃນ​ເວ​ລາ​ທີ່​
GCC ຕົວມັນເອງກໍາລັງຖືກສ້າງ.)

-feliminate-unused-debug-types
ໂດຍປົກກະຕິ, ເມື່ອຜະລິດຜົນຜະລິດ DWARF2, GCC ຈະປ່ອຍຂໍ້ມູນການດີບັກສໍາລັບທຸກຄົນ
ປະ​ເພດ​ທີ່​ໄດ້​ປະ​ກາດ​ໃນ​ຫນ່ວຍ​ບໍ​ລິ​ການ​ສັງ​ລວມ​, ບໍ່​ວ່າ​ຈະ​ເປັນ​ຫຼື​ບໍ່​ທີ່​ແທ້​ຈິງ​
ໃຊ້ໃນຫນ່ວຍງານລວບລວມນັ້ນ. ບາງຄັ້ງອັນນີ້ເປັນປະໂຫຍດ, ເຊັ່ນວ່າ, ໃນ debugger,
ທ່ານ​ຕ້ອງ​ການ​ທີ່​ຈະ​ສົ່ງ​ຄ່າ​ເປັນ​ປະ​ເພດ​ທີ່​ບໍ່​ໄດ້​ຖືກ​ນໍາ​ໃຊ້​ຕົວ​ຈິງ​ໃນ​ໂຄງ​ການ​ຂອງ​ທ່ານ (ແຕ່​ແມ່ນ​
ປະກາດ). ເລື້ອຍໆ, ແນວໃດກໍ່ຕາມ, ນີ້ສົ່ງຜົນໃຫ້ພື້ນທີ່ເສຍເງິນຢ່າງຫຼວງຫຼາຍ.
ດ້ວຍຕົວເລືອກນີ້, GCC ຈະຫຼີກເວັ້ນການຜະລິດຜົນອອກສັນຍາລັກດີບັກສຳລັບປະເພດທີ່ເປັນ
ບໍ່ມີບ່ອນໃດທີ່ໃຊ້ໃນໄຟລ໌ແຫຼ່ງທີ່ຖືກລວບລວມ.

ທາງເລືອກໃນການ ທີ່ ການຄວບຄຸມ ທີ່ດີທີ່ສຸດ
ຕົວເລືອກເຫຼົ່ານີ້ຄວບຄຸມການເພີ່ມປະສິດທິພາບປະເພດຕ່າງໆ.

ໂດຍບໍ່ມີທາງເລືອກການເພີ່ມປະສິດທິພາບໃດໆ, ເປົ້າຫມາຍຂອງຜູ້ລວບລວມຂໍ້ມູນແມ່ນເພື່ອຫຼຸດຜ່ອນຄ່າໃຊ້ຈ່າຍຂອງການລວບລວມ
ແລະເພື່ອເຮັດໃຫ້ debugging ຜະລິດຜົນໄດ້ຮັບທີ່ຄາດໄວ້. ຖະແຫຼງການແມ່ນເອກະລາດ: ຖ້າເຈົ້າ
ຢຸດໂຄງການທີ່ມີຈຸດແບ່ງລະຫວ່າງຄໍາຖະແຫຼງການ, ຫຼັງຈາກນັ້ນທ່ານສາມາດກໍານົດຄ່າໃຫມ່ໃຫ້ກັບ
ຕົວແປໃດໆຫຼືການປ່ຽນແປງໂຄງການຕ້ານກັບຄໍາຖະແຫຼງອື່ນໆໃນຫນ້າທີ່ແລະໄດ້ຮັບ
ແນ່ນອນຜົນໄດ້ຮັບທີ່ເຈົ້າຄາດຫວັງຈາກລະຫັດແຫຼ່ງ.

ການເປີດທຸງການເພີ່ມປະສິດທິພາບເຮັດໃຫ້ compiler ພະຍາຍາມປັບປຸງປະສິດທິພາບ ແລະ/ຫຼື
ຂະ​ຫນາດ​ລະ​ຫັດ​ທີ່​ໃຊ້​ເວ​ລາ​ຂອງ​ການ​ລວບ​ລວມ​ແລະ​ຄວາມ​ສາ​ມາດ​ທີ່​ຈະ debug ໄດ້​
ໂຄງການ.

compiler ປະຕິບັດການເພີ່ມປະສິດທິພາບໂດຍອີງໃສ່ຄວາມຮູ້ທີ່ມັນມີຂອງໂຄງການ.
ການລວບລວມໄຟລ໌ຫຼາຍໄຟລ໌ໃນເວລາດຽວກັນກັບໂຫມດໄຟລ໌ຜົນຜະລິດດຽວເຮັດໃຫ້ການລວບລວມຂໍ້ມູນນໍາໃຊ້
ຂໍ້​ມູນ​ທີ່​ໄດ້​ຮັບ​ຈາກ​ທັງ​ຫມົດ​ຂອງ​ໄຟລ​໌​ໃນ​ເວ​ລາ​ທີ່​ການ​ສັງ​ລວມ​ຂອງ​ເຂົາ​ເຈົ້າ​ແຕ່​ລະ​ຄົນ​.

ບໍ່ແມ່ນການເພີ່ມປະສິດທິພາບທັງໝົດຖືກຄວບຄຸມໂດຍກົງໂດຍທຸງ. ພຽງແຕ່ການເພີ່ມປະສິດທິພາບທີ່ມີ a
ທຸງແມ່ນລະບຸໄວ້ໃນພາກນີ້.

ການເພີ່ມປະສິດທິພາບສ່ວນໃຫຍ່ຖືກເປີດໃຊ້ພຽງແຕ່ຖ້າມີ -O ລະດັບແມ່ນກໍານົດຢູ່ໃນເສັ້ນຄໍາສັ່ງ. ຖ້າບໍ່ດັ່ງນັ້ນ
ພວກມັນຖືກປິດການໃຊ້ງານ, ເຖິງແມ່ນວ່າຈະລະບຸທຸງການເພີ່ມປະສິດທິພາບສ່ວນບຸກຄົນ.

ອີງຕາມເປົ້າຫມາຍແລະວິທີການ GCC ໄດ້ຖືກຕັ້ງຄ່າ, ຊຸດທີ່ແຕກຕ່າງກັນເລັກນ້ອຍຂອງ
ການເພີ່ມປະສິດທິພາບອາດຈະຖືກເປີດໃຊ້ໃນແຕ່ລະຄັ້ງ -O ລະ​ດັບ​ກ​່​ວາ​ທີ່​ລະ​ບຸ​ໄວ້​ທີ່​ນີ້​. ທ່ານສາມາດເອີ້ນ GCC ໄດ້
ກັບ -Q --help=optimizers ເພື່ອຊອກຫາຊຸດການເພີ່ມປະສິດທິພາບທີ່ແນ່ນອນທີ່ເປີດໃຊ້ຢູ່
ແຕ່ລະຂັ້ນ.

-O
-O1 ເພີ່ມປະສິດທິພາບ. ການປັບແຕ່ງການລວບລວມຂໍ້ມູນຕ້ອງໃຊ້ເວລາຫຼາຍກວ່າ, ແລະຄວາມຊົງຈໍາຫຼາຍກວ່າເກົ່າ
ຫນ້າທີ່ຂະຫນາດໃຫຍ່.

ກັບ -O, compiler ພະຍາຍາມຫຼຸດຜ່ອນຂະຫນາດລະຫັດແລະເວລາປະຕິບັດ, ໂດຍບໍ່ມີການປະຕິບັດ
ການເພີ່ມປະສິດທິພາບໃດໆທີ່ຈະໃຊ້ເວລາການລວບລວມຢ່າງຫຼວງຫຼາຍ.

-O ເປີດທຸງການເພີ່ມປະສິດທິພາບຕໍ່ໄປນີ້:

-fauto-inc, ຄະ -fcompare-elim -fcprop-ລົງທະບຽນ -fdce -fdefer-pop -fdelayed-ສາຂາ
-fdse -fguess-ສາຂາ-ຄວາມເປັນໄປໄດ້ -fif ການ​ປ່ຽນ​ແປງ 2​ -fif ການ​ປ່ຽນ​ແປງ​ -fipa-pure-const
-fipa-profile -fipa ອ້າງ​ອີງ​ -fmerge-ຄົງທີ່ -fsplit-wide-types -ftree-bit-ccp
-ftree-builtin-call-dce -ftree-ccp -ftre-ch -free-copyrename -ftree-dce
-ftree-dominator-opts -ftree-dse -ftree-forwprop - ຟຣີ​ຟຣີ​ -ftree-phiprop -ftree-sra
-ftree-pta - ຫ້າ​ປີ​ -funit-at-a-time

-O ຍັງເປີດຢູ່ -fomit-frame-pointer ໃນເຄື່ອງທີ່ເຮັດແນວນັ້ນບໍ່ແຊກແຊງ
ກັບ debugging.

-O2 ເພີ່ມປະສິດທິພາບຫຼາຍກວ່າເກົ່າ. GCC ປະຕິບັດການເພີ່ມປະສິດທິພາບທີ່ສະຫນັບສະຫນູນເກືອບທັງຫມົດທີ່ບໍ່ມີ
ມີ​ສ່ວນ​ຮ່ວມ​ໃນ​ການ​ແລກ​ປ່ຽນ​ຄວາມ​ໄວ​ອະ​ວະ​ກາດ​. ເມື່ອປຽບທຽບກັບ -O, ທາງເລືອກນີ້ເພີ່ມຂຶ້ນທັງສອງ
ເວລາການລວບລວມແລະການປະຕິບັດຂອງລະຫັດທີ່ສ້າງຂຶ້ນ.

-O2 ເປີດທຸງການເພີ່ມປະສິດທິພາບທັງໝົດທີ່ລະບຸໄວ້ໂດຍ -O. ມັນຍັງເປີດຕໍ່ໄປນີ້
ທຸງການເພີ່ມປະສິດທິພາບ: -fthread-jumps -falign-functions -falign-jumps -falign-loops
-falign-ປ້າຍ -fcaller-ປະຫຍັດ -fcrossjumping -fcse-follow-jumps -fcse-skip-blocks
-fdelete-null-pointer-checks -fdevirtualize -fexpensive-optimizations -fgcse
-fgcse-lm -finline-small-functions -findirect-inlining -fipa-sra
-foptimize-sibling-calls -fpartial-inlining -fpeephole2 -fregmove -freorder-ຕັນ
-freorder - ຫນ້າ​ທີ່​ -frerun-cse-after-loop -fsched-interblock -fsched-spec
-fschedule-insns -fschedule-insns2 -fstrict-aliasing -fstrict-ລົ້ນ
-ftre-switch-ແປງ -ftree-tail-merge -ftre-pre -ftree-vrp

ກະລຸນາສັງເກດຄໍາເຕືອນພາຍໃຕ້ -fgcse ກ່ຽວກັບການຮຽກຮ້ອງ -O2 ກ່ຽວກັບໂຄງການທີ່ໃຊ້ຄອມພິວເຕີ້
ໂກໂຕ.

ຫມາຍເຫດ: ໃນ Ubuntu 8.10 ແລະຮຸ່ນຕໍ່ມາ, -D_FORTIFY_SOURCE=2 ຖືກກໍານົດໂດຍຄ່າເລີ່ມຕົ້ນ, ແລະແມ່ນ
ເປີດໃຊ້ເມື່ອ -O ຖືກກໍານົດເປັນ 2 ຫຼືສູງກວ່າ. ນີ້ເຮັດໃຫ້ການລວບລວມເວລາເພີ່ມເຕີມແລະ
ການກວດສອບເວລາແລ່ນສໍາລັບຫນ້າທີ່ libc ຫຼາຍ. ເພື່ອປິດການໃຊ້ງານ, ໃຫ້ລະບຸອັນໃດນຶ່ງ
-U_FORTIFY_SOURCE or -D_FORTIFY_SOURCE=0.

-O3 ປັບ​ໃຫ້​ດີ​ຫຼາຍ​. -O3 ເປີດການເພີ່ມປະສິດທິພາບທັງຫມົດທີ່ລະບຸໂດຍ -O2 ແລະຍັງເປີດ
ໄດ້ -finline-functions, -funswitch-loops, -fpredictive-commoning, -fgcse-after-reload,
-ftree-vectorize, -ftree-partial-pre ແລະ -fipa-cp-clone ຕົວເລືອກ

-O0 ຫຼຸດຜ່ອນເວລາການລວບລວມແລະເຮັດໃຫ້ການດີບັກສ້າງຜົນໄດ້ຮັບທີ່ຄາດໄວ້. ນີ້​ແມ່ນ
Default

-ອສ ປັບແຕ່ງຂະໜາດ. -ອສ ເຮັດໃຫ້ທັງຫມົດ -O2 ການເພີ່ມປະສິດທິພາບທີ່ບໍ່ປົກກະຕິເພີ່ມຂຶ້ນ
ຂະຫນາດລະຫັດ. ມັນຍັງດໍາເນີນການເພີ່ມປະສິດທິພາບເພີ່ມເຕີມທີ່ຖືກອອກແບບມາເພື່ອຫຼຸດຜ່ອນຂະຫນາດລະຫັດ.

-ອສ ປິດການໃຊ້ງານທຸງການເພີ່ມປະສິດທິພາບຕໍ່ໄປນີ້: -falign-functions -falign-jumps
-falign-loops -falign-ປ້າຍ -freorder-ຕັນ -freorder-blocks-and-partition
-fprefetch-loop-arrays -ftree-vect-loop-version

- ໄວ
ບໍ່ສົນໃຈການປະຕິບັດຕາມມາດຕະຖານທີ່ເຄັ່ງຄັດ. - ໄວ ເຮັດໃຫ້ທັງຫມົດ -O3 ການເພີ່ມປະສິດທິພາບ. ມັນຍັງ
ເປີດໃຊ້ການເພີ່ມປະສິດທິພາບທີ່ບໍ່ຖືກຕ້ອງສໍາລັບທຸກໂຄງການທີ່ສອດຄ່ອງກັບມາດຕະຖານ. ມັນ
ເປີດ -fast ຄະ​ນິດ​ສາດ​ ແລະ Fortran ສະເພາະ -fno-protect-parens ແລະ -fstack-arrays.

ຖ້າທ່ານໃຊ້ຫຼາຍ -O ທາງເລືອກ, ມີຫຼືບໍ່ມີຕົວເລກລະດັບ, ທາງເລືອກສຸດທ້າຍແມ່ນ
ອັນທີ່ມີປະສິດທິຜົນ.

ທາງເລືອກຂອງແບບຟອມ -fທຸງ ລະບຸທຸງເອກະລາດຂອງເຄື່ອງຈັກ. ທຸງສ່ວນໃຫຍ່ມີທັງສອງ
ຮູບ​ແບບ​ທາງ​ບວກ​ແລະ​ທາງ​ລົບ​; ຮູບ​ແບບ​ທາງ​ລົບ​ຂອງ​ -ffoo ຈະ -fno-foo. ໃນຕາຕະລາງ
ຂ້າງລຸ່ມນີ້, ມີພຽງແຕ່ຫນຶ່ງໃນແບບຟອມທີ່ຖືກລະບຸໄວ້ --- ແບບຟອມທີ່ເຈົ້າຈະໃຊ້ໂດຍທົ່ວໄປ. ເຈົ້າສາມາດຄິດໄດ້
ອອກຮູບແບບອື່ນໂດຍການຖອນອອກ ບໍ່- ຫຼືເພີ່ມມັນ.

ຕົວເລືອກຕໍ່ໄປນີ້ຄວບຄຸມການເພີ່ມປະສິດທິພາບສະເພາະ. ພວກມັນຖືກເປີດໃຊ້ໂດຍ -O
ທາງ​ເລືອກ​ຫຼື​ກ່ຽວ​ກັບ​ການ​ທີ່​ມີ​. ທ່ານສາມາດນໍາໃຊ້ທຸງດັ່ງຕໍ່ໄປນີ້ໃນທີ່ຫາຍາກ
ກໍລະນີໃນເວລາທີ່ "ປັບລະອຽດ" ຂອງການເພີ່ມປະສິດທິພາບທີ່ຈະປະຕິບັດແມ່ນຕ້ອງການ.

-fno-default-inline
ຢ່າເຮັດໃຫ້ຫນ້າທີ່ສະມາຊິກຢູ່ໃນແຖວໂດຍຄ່າເລີ່ມຕົ້ນພຽງແຕ່ຍ້ອນວ່າພວກມັນຖືກກໍານົດພາຍໃນ
ຂອບເຂດຫ້ອງຮຽນ (C++ ເທົ່ານັ້ນ). ຖ້າບໍ່ດັ່ງນັ້ນ, ໃນເວລາທີ່ທ່ານກໍານົດ -O, ຫນ້າທີ່ສະມາຊິກກໍານົດ
ພາຍໃນຂອບເຂດຫ້ອງຮຽນຖືກລວບລວມຢູ່ໃນແຖວໂດຍຄ່າເລີ່ມຕົ້ນ; ie, ທ່ານບໍ່ຈໍາເປັນຕ້ອງເພີ່ມ inline
ຢູ່ຕໍ່ໜ້າຊື່ຟັງຊັນສະມາຊິກ.

-fno-defer-pop
ປະກົດການໂຕ້ແຍ້ງໃຫ້ກັບແຕ່ລະການເອີ້ນຟັງຊັນທັນທີທີ່ຟັງຊັນນັ້ນກັບຄືນມາ. ສໍາລັບ
ເຄື່ອງຈັກທີ່ຕ້ອງປະກົດການໂຕ້ຖຽງຫຼັງຈາກການໂທຟັງຊັນ, ປົກກະຕິແລ້ວ compiler ອະນຸຍາດໃຫ້
arguments ສະສົມຢູ່ໃນ stack ສໍາລັບການໂທຫຼາຍຫນ້າທີ່ແລະ pops ໃຫ້ເຂົາເຈົ້າທັງຫມົດຢູ່ທີ່
ຄັ້ງຫນຶ່ງ.

ຄົນພິການໃນລະດັບ -O, -O2, -O3, -ອສ.

-fforward-ຂະຫຍາຍພັນ
ດໍາເນີນການສົ່ງຕໍ່ການຂະຫຍາຍພັນໃນ RTL. ຜ່ານພະຍາຍາມສົມທົບສອງຄໍາແນະນໍາ
ແລະກວດເບິ່ງວ່າຜົນໄດ້ຮັບສາມາດງ່າຍດາຍ. ຖ້າການຖອດ looping ເຮັດວຽກ, ສອງ passes
ໄດ້ຖືກປະຕິບັດແລະຄັ້ງທີສອງແມ່ນກໍານົດເວລາຫຼັງຈາກ loop unrolling.

ຕົວເລືອກນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນໃນລະດັບການເພີ່ມປະສິດທິພາບ -O, -O2, -O3, -ອສ.

-ffp-ສັນຍາ=ແບບ
-ffp-contract=ປິດ ປິດໃຊ້ງານການຫົດຕົວສະແດງຈຸດລອຍ. -ffp-contract=ໄວ
ເຮັດ​ໃຫ້​ການ​ຫົດ​ຕົວ​ການ​ສະ​ແດງ​ອອກ​ຈຸດ​ທີ່​ເລື່ອນ​ໄດ້​ເຊັ່ນ​ການ​ສ້າງ​ເປັນ fused multiply-add​
ການດໍາເນີນງານຖ້າຫາກວ່າເປົ້າຫມາຍມີການສະຫນັບສະຫນູນພື້ນເມືອງສໍາລັບພວກເຂົາ. -ffp-contract=on ເຮັດໃຫ້
ການຫົດຕົວສະແດງຈຸດລອຍຖ້າອະນຸຍາດໂດຍມາດຕະຖານພາສາ. ນີ້​ແມ່ນ
ໃນປັດຈຸບັນບໍ່ໄດ້ປະຕິບັດແລະປະຕິບັດເທົ່າກັບ -ffp-contract=ປິດ.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -ffp-contract=ໄວ.

-fomit-frame-pointer
ຢ່າເກັບຕົວຊີ້ກອບຢູ່ໃນທະບຽນສໍາລັບຟັງຊັນທີ່ບໍ່ຕ້ອງການຫນຶ່ງ. ນີ້
ຫຼີກ​ລ້ຽງ​ຄໍາ​ແນະ​ນໍາ​ເພື່ອ​ຊ່ວຍ​ປະ​ຢັດ​, ການ​ຕັ້ງ​ຄ່າ​ແລະ​ການ​ຟື້ນ​ຟູ​ຕົວ​ຊີ້​ກອບ​; ມັນຍັງເຮັດໃຫ້ເປັນ
ລົງທະບຽນພິເສດທີ່ມີຢູ່ໃນຫຼາຍຫນ້າທີ່. It ຍັງ ເຮັດໃຫ້ debugging ເປັນໄປບໍ່ໄດ້ on
ບາງ ເຄື່ອງຈັກ.

ໃນບາງເຄື່ອງຈັກ, ເຊັ່ນ VAX, ທຸງນີ້ບໍ່ມີຜົນ, ເພາະວ່າມາດຕະຖານ
ລໍາດັບການໂທອັດຕະໂນມັດຈັດການຕົວຊີ້ກອບແລະບໍ່ມີຫຍັງຖືກບັນທຶກໄວ້ໂດຍ
ທຳທ່າວ່າບໍ່ມີຢູ່. ມະຫາພາກຄຳອະທິບາຍເຄື່ອງ "FRAME_POINTER_REQUIRED"
ຄວບຄຸມວ່າເຄື່ອງຈັກເປົ້າໝາຍຮອງຮັບທຸງນີ້ຫຼືບໍ່.

ເລີ່ມຕົ້ນດ້ວຍ GCC ຮຸ່ນ 4.6, ການຕັ້ງຄ່າເລີ່ມຕົ້ນ (ເມື່ອບໍ່ເພີ່ມປະສິດທິພາບຂະຫນາດ) ສໍາລັບ
ເປົ້າໝາຍ 32-bit Linux x86 ແລະ 32-bit Darwin x86 ຖືກປ່ຽນເປັນ
-fomit-frame-pointer. ຄ່າເລີ່ມຕົ້ນສາມາດກັບຄືນໄປເປັນ -fno-omit-frame-pointer by
ການຕັ້ງຄ່າ GCC ກັບ --enable-frame-pointer ຕັ້ງຄ່າທາງເລືອກ.

ເປີດໃຊ້ໃນລະດັບ -O, -O2, -O3, -ອສ.

-foptimize-sibling-calls
ປັບແຕ່ງການໂທຫາອ້າຍເອື້ອຍນ້ອງ ແລະຫາງສຽງຊ້ຳ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3, -ອສ.

-fno-inline
ຢ່າຂະຫຍາຍຟັງຊັນໃດນຶ່ງໃນແຖວ ນອກຈາກສິ່ງທີ່ໝາຍໄວ້ດ້ວຍ "always_inline"
ຄຸນ​ລັກ​ສະ​ນະ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນເມື່ອບໍ່ເພີ່ມປະສິດທິພາບ.

ຟັງຊັນດຽວສາມາດຖືກຍົກເວັ້ນຈາກ inlining ໂດຍການຫມາຍໃຫ້ພວກເຂົາດ້ວຍ "noinline"
attribute

-finline-small-functions
ປະສົມປະສານຫນ້າທີ່ເຂົ້າໄປໃນຜູ້ໂທຂອງພວກເຂົາເມື່ອຮ່າງກາຍຂອງພວກເຂົາມີຂະຫນາດນ້ອຍກວ່າທີ່ຄາດໄວ້
ລະຫັດການໂທຫາຟັງຊັນ (ດັ່ງນັ້ນຂະຫນາດລວມຂອງໂປລແກລມມີຂະຫນາດນ້ອຍກວ່າ). ຜູ້ສັງລວມ
heuristically ຕັດ ສິນ ໃຈ ທີ່ ຫນ້າ ທີ່ ແມ່ນ ງ່າຍ ດາຍ ພຽງ ພໍ ທີ່ ຈະ ຕົກ ເປັນ ມູນ ຄ່າ ລວມ ເຂົ້າ ໃນ
ວິທີນີ້. inlining ນີ້ໃຊ້ກັບຫນ້າທີ່ທັງຫມົດ, ເຖິງແມ່ນວ່າບໍ່ໄດ້ປະກາດໃນແຖວ.

ເປີດໃຊ້ຢູ່ໃນລະດັບ -O2.

-findirect-inlining
Inline ຍັງໂທຫາທາງອ້ອມທີ່ຖືກຄົ້ນພົບທີ່ຮູ້ຈັກໃນເວລາລວບລວມຂອບໃຈ
inlining ທີ່ຜ່ານມາ. ຕົວເລືອກນີ້ມີຜົນກະທົບພຽງແຕ່ເມື່ອ inlining ຕົວຂອງມັນເອງເປີດ
ໂດຍ -finline-functions or -finline-small-functions ຕົວເລືອກ

ເປີດໃຊ້ຢູ່ໃນລະດັບ -O2.

-finline-functions
ພິຈາລະນາຫນ້າທີ່ທັງຫມົດສໍາລັບການ inlining, ເຖິງແມ່ນວ່າພວກເຂົາບໍ່ໄດ້ຖືກປະກາດໃນແຖວ. ໄດ້
compiler heuristically ຕັດ ສິນ ໃຈ ທີ່ ຫນ້າ ທີ່ ມີ ມູນ ຄ່າ ການ ເຊື່ອມ ໂຍງ ໃນ ວິ ທີ ການ ນີ້.

ຖ້າການໂທທັງຫມົດໄປຫາຟັງຊັນທີ່ໃຫ້ຖືກປະສົມປະສານ, ແລະຟັງຊັນຖືກປະກາດ
"static", ຫຼັງຈາກນັ້ນ, ຟັງຊັນແມ່ນປົກກະຕິບໍ່ໄດ້ອອກເປັນລະຫັດ assembler ໃນສິດທິຂອງຕົນເອງ.

ເປີດໃຊ້ຢູ່ໃນລະດັບ -O3.

-finline-functions-called-one ດຽວ
ພິ​ຈາ​ລະ​ນາ​ທຸກ​ຫນ້າ​ທີ່ "static​" ເອີ້ນ​ວ່າ​ຄັ້ງ​ດຽວ​ສໍາ​ລັບ inlining ເຂົ້າ​ໄປ​ໃນ​ການ​ໂທ​ຂອງ​ເຂົາ​ເຈົ້າ​ເຖິງ​ແມ່ນ​ວ່າ​
ພວກມັນບໍ່ໄດ້ຖືກໝາຍວ່າ "ໃນແຖວ". ຖ້າການໂທໄປຫາຫນ້າທີ່ໃຫ້ຖືກປະສົມປະສານ, ຫຼັງຈາກນັ້ນ
ຟັງຊັນບໍ່ແມ່ນ output ເປັນລະຫັດ assembler ໃນສິດທິຂອງຕົນເອງ.

ເປີດໃຊ້ໃນລະດັບ -O1, -O2, -O3 ແລະ -ອສ.

- ຄວາມ​ຢ້ານ​ກົວ​, inlining​
ຟັງຊັນໃນແຖວໝາຍໂດຍ "always_inline" ແລະຟັງຊັນທີ່ຮ່າງກາຍເບິ່ງຄືວ່ານ້ອຍກວ່າ
ຟັງຊັນໂທ overhead ຕົ້ນກ່ອນເຮັດ -fprofile-generate ເຄື່ອງມືແລະ
ຜ່ານ inlining ທີ່ແທ້ຈິງ. ການເຮັດດັ່ງນັ້ນເຮັດໃຫ້ profileing ລາຄາຖືກລົງຢ່າງຫຼວງຫຼາຍແລະປົກກະຕິ
inlining ໄວຂຶ້ນກ່ຽວກັບໂຄງການທີ່ມີຕ່ອງໂສ້ຂະຫນາດໃຫຍ່ຂອງຫນ້າທີ່ wrapper ຮັງ.

ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-fipa-sra
ປະຕິບັດການທົດແທນ scalar interprocedural ຂອງການລວບລວມ, ການກໍາຈັດພາລາມິເຕີທີ່ບໍ່ໄດ້ໃຊ້
ແລະການທົດແທນຂອງພາລາມິເຕີທີ່ຜ່ານໂດຍການອ້າງອີງໂດຍຕົວກໍານົດການທີ່ຜ່ານໂດຍມູນຄ່າ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3 ແລະ -ອສ.

-finline-limit=n
ໂດຍຄ່າເລີ່ມຕົ້ນ, GCC ຈຳກັດຂະໜາດຂອງຟັງຊັນທີ່ສາມາດໃສ່ໃນແຖວໄດ້. ທຸງນີ້ອະນຸຍາດໃຫ້
ການຄວບຄຸມຫຍາບຂອງຂອບເຂດຈໍາກັດນີ້. n ແມ່ນຂະຫນາດຂອງຫນ້າທີ່ສາມາດ inlined ໃນ
ຈໍານວນຂອງຄໍາແນະນໍາ pseudo.

Inlining ຕົວຈິງແມ່ນຄວບຄຸມໂດຍຕົວກໍານົດການຈໍານວນຫນຶ່ງ, ເຊິ່ງອາດຈະຖືກກໍານົດ
ສ່ວນບຸກຄົນໂດຍການນໍາໃຊ້ --param ຊື່=ມູນຄ່າ. ໄດ້ -finline-limit=n ທາງ​ເລືອກ​ກໍາ​ນົດ​ບາງ​ສ່ວນ​ຂອງ​
ຕົວກໍານົດການເຫຼົ່ານີ້ດັ່ງຕໍ່ໄປນີ້:

max-inline-insns-single
ຖືກກໍານົດໃຫ້ n/ 2

max-inline-insns-auto
ຖືກກໍານົດໃຫ້ n/ 2

ເບິ່ງຂ້າງລຸ່ມນີ້ສໍາລັບເອກະສານຂອງຕົວກໍານົດການສ່ວນບຸກຄົນຄວບຄຸມ inlining ແລະ
ສໍາລັບຄ່າເລີ່ມຕົ້ນຂອງພາລາມິເຕີເຫຼົ່ານີ້.

ຫມາຍ​ເຫດ​: ອາດຈະບໍ່ມີມູນຄ່າ -finline-ຈຳກັດ ທີ່ສົ່ງຜົນໃຫ້ມີພຶດຕິກໍາເລີ່ມຕົ້ນ.

ຫມາຍ​ເຫດ​: ຄໍາແນະນໍາ pseudo ເປັນຕົວແທນ, ໃນສະພາບການສະເພາະນີ້, ເປັນບົດຄັດຫຍໍ້
ການວັດແທກຂະຫນາດຂອງຫນ້າທີ່. ໃນທາງໃດກໍ່ຕາມ, ມັນເປັນຕົວແທນຂອງຈໍານວນການຊຸມນຸມ
ຄໍາແນະນໍາແລະດັ່ງນັ້ນຄວາມຫມາຍທີ່ແນ່ນອນຂອງມັນອາດຈະປ່ຽນຈາກການປ່ອຍຫນຶ່ງໄປຫາຫນຶ່ງ
ອີກຄົນຫນຶ່ງ.

-fno-keep-inline-dllexport
ນີ້ແມ່ນສະບັບທີ່ລະອຽດກວ່າຂອງ -fkeep-inline-ຟັງຊັນ, ເຊິ່ງໃຊ້ພຽງແຕ່ກັບ
ຟັງຊັນທີ່ຖືກປະກາດໂດຍໃຊ້ຄຸນລັກສະນະ "dllexport" ຫຼື declspec

-fkeep-inline-ຟັງຊັນ
ໃນ C, ປ່ອຍຟັງຊັນ "static" ທີ່ຖືກປະກາດວ່າ "inline" ເຂົ້າໄປໃນໄຟລ໌ວັດຖຸ, ເຖິງແມ່ນວ່າ.
ຟັງຊັນໄດ້ຖືກບັນຈຸເຂົ້າໃນຜູ້ໂທທັງຫມົດຂອງມັນ. ສະວິດນີ້ບໍ່ມີຜົນກະທົບ
ປະຕິບັດຫນ້າໂດຍໃຊ້ສ່ວນຂະຫຍາຍ "extern inline" ໃນ GNU C90. ໃນ C ++, ປ່ອຍອັນໃດກໍໄດ້
inline functions ເຂົ້າໄປໃນໄຟລ໌ວັດຖຸ.

-fkeep-static-consts
ປ່ອຍຕົວແປທີ່ປະກາດວ່າ "static const" ເມື່ອການເພີ່ມປະສິດທິພາບບໍ່ໄດ້ເປີດ, ເຖິງແມ່ນວ່າ
ຕົວແປບໍ່ໄດ້ອ້າງອີງ.

GCC ເປີດໃຊ້ຕົວເລືອກນີ້ຕາມຄ່າເລີ່ມຕົ້ນ. ຖ້າທ່ານຕ້ອງການບັງຄັບ compiler ກວດເບິ່ງວ່າ
ຕົວແປໄດ້ຖືກອ້າງອີງ, ໂດຍບໍ່ຄໍານຶງເຖິງການເພີ່ມປະສິດທິພາບຫຼືບໍ່ເປີດ, ໃຫ້ໃຊ້
ໄດ້ -fno-keep-static-consts ທາງເລືອກ.

-fmerge-ຄົງທີ່
ພະຍາຍາມຮວມຄ່າຄົງທີ່ທີ່ຄືກັນ (ຄ່າຄົງທີ່ສະຕຣິງ ແລະຄ່າຄົງທີ່ຈຸດລອຍ)
ໃນທົ່ວຫນ່ວຍງານລວບລວມ.

ຕົວເລືອກນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນສໍາລັບການລວບລວມຂໍ້ມູນທີ່ເຫມາະສົມຖ້າຕົວປະກອບແລະຕົວເຊື່ອມຕໍ່
ສະຫນັບສະຫນູນມັນ. ໃຊ້ -fno-merge-ຄົງທີ່ ເພື່ອຂັດຂວາງພຶດຕິກໍານີ້.

ເປີດໃຊ້ໃນລະດັບ -O, -O2, -O3, -ອສ.

-fmerge-ທັງໝົດ-ຄົງທີ່
ພະຍາຍາມລວມຄ່າຄົງທີ່ທີ່ຄືກັນ ແລະຕົວແປທີ່ຄືກັນ.

ທາງເລືອກນີ້ຫມາຍເຖິງ -fmerge-ຄົງທີ່. ນອກ​ຈາກ​ນັ້ນ -fmerge-ຄົງທີ່ ນີ້
ພິ​ຈາ​ລະ​ນາ​ຕົວ​ຢ່າງ​ເຖິງ​ແມ່ນ​ວ່າ arrays ເບື້ອງ​ຕົ້ນ​ຄົງ​ທີ່​ຫຼື​ຕົວ​ແປ​ຄົງ​ທີ່​ເບື້ອງ​ຕົ້ນ​ທີ່​ມີ
ປະ​ເພດ​ປະ​ສົມ​ຫຼື​ຈຸດ​ທີ່​ເລື່ອນ​ໄດ້​. ພາສາເຊັ່ນ C ຫຼື C ++ ຕ້ອງການແຕ່ລະຕົວແປ,
ລວມທັງຫຼາຍຕົວຢ່າງຂອງຕົວແປດຽວກັນໃນການໂທ recursive, ເພື່ອໃຫ້ມີຄວາມແຕກຕ່າງກັນ
ສະຖານທີ່, ດັ່ງນັ້ນການນໍາໃຊ້ທາງເລືອກນີ້ຈະເຮັດໃຫ້ພຶດຕິກໍາທີ່ບໍ່ສອດຄ່ອງ.

-fmodulo-sched
ດໍາເນີນການກໍານົດເວລາ swing modulo ທັນທີກ່ອນທີ່ຈະກໍານົດເວລາທໍາອິດຜ່ານ. ນີ້
pass ເບິ່ງຢູ່ໃນ loops ພາຍໃນທີ່ສຸດແລະ reorders ຄໍາແນະນໍາຂອງເຂົາເຈົ້າໂດຍການ overlapping ທີ່ແຕກຕ່າງກັນ
ການຊໍ້າຄືນ.

-fmodulo-sched-allow-regmoves
ປະຕິບັດການຈັດຕາຕະລາງ modulo ໂດຍອີງໃສ່ SMS ທີ່ຮຸກຮານຫຼາຍດ້ວຍການຍ້າຍການລົງທະບຽນທີ່ໄດ້ຮັບອະນຸຍາດ. ໂດຍ
ການຕັ້ງຄ່າທຸງນີ້ ຂອບການຕ້ານການເພິ່ງພາອາໄສທີ່ແນ່ນອນຈະຖືກລຶບ ເຊິ່ງຈະເຮັດໃຫ້ເກີດຜົນ
ການຜະລິດຂອງການເຄື່ອນໄຫວ reg ໂດຍອີງໃສ່ການວິເຄາະໄລຍະຊີວິດ. ທາງເລືອກນີ້ແມ່ນ
ປະສິດທິຜົນພຽງແຕ່ກັບ -fmodulo-sched enabled

-fno-branch-count-reg
ຢ່າໃຊ້ຄໍາແນະນໍາ "ຫຼຸດລົງແລະສາຂາ" ໃນທະບຽນການນັບ, ແຕ່ແທນທີ່ຈະ
ສ້າງລໍາດັບຂອງຄໍາແນະນໍາທີ່ຫຼຸດລົງການລົງທະບຽນ, ປຽບທຽບກັບ
ສູນ, ຫຼັງຈາກນັ້ນສາຂາໂດຍອີງໃສ່ຜົນໄດ້ຮັບ. ຕົວເລືອກນີ້ມີຄວາມຫມາຍພຽງແຕ່ກ່ຽວກັບ
ສະຖາປັດຕະຍະກໍາທີ່ສະຫນັບສະຫນູນຄໍາແນະນໍາດັ່ງກ່າວ, ເຊິ່ງປະກອບມີ x86, PowerPC, IA-64 ແລະ
S / 390.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -fbranch-count-reg.

-fno-function-cse
ຢ່າໃສ່ທີ່ຢູ່ຂອງຫນ້າທີ່ຢູ່ໃນທະບຽນ; ເຮັດແຕ່ລະຄໍາແນະນໍາທີ່ໂທຫາ a
ຟັງຊັນຄົງທີ່ປະກອບດ້ວຍທີ່ຢູ່ຂອງຟັງຊັນຢ່າງຊັດເຈນ.

ທາງເລືອກນີ້ສົ່ງຜົນໃຫ້ລະຫັດປະສິດທິພາບຫນ້ອຍ, ແຕ່ບາງ hacks strange ທີ່ປ່ຽນແປງໄດ້
ຜົນຜະລິດຂອງ assembler ອາດຈະສັບສົນໂດຍການເພີ່ມປະສິດທິພາບທີ່ປະຕິບັດໃນເວລາທີ່ທາງເລືອກນີ້ແມ່ນ
ບໍ່​ໄດ້​ນໍາ​ໃຊ້.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -function-cse

-fno-zero-initialized-in-bss
ຖ້າເປົ້າຫມາຍສະຫນັບສະຫນູນພາກສ່ວນ BSS, GCC ໂດຍຄ່າເລີ່ມຕົ້ນຈະວາງຕົວແປທີ່ເປັນ
ເລີ່ມຕົ້ນເປັນສູນເຂົ້າໄປໃນ BSS. ນີ້ສາມາດປະຫຍັດພື້ນທີ່ໃນລະຫັດຜົນໄດ້ຮັບ.

ຕົວເລືອກນີ້ປິດພຶດຕິກໍານີ້ເພາະວ່າບາງໂຄງການອີງໃສ່ຕົວແປຢ່າງຊັດເຈນ
ໄປຫາພາກຂໍ້ມູນ. ຕົວຢ່າງ, ດັ່ງນັ້ນການດໍາເນີນການສາມາດຊອກຫາໄດ້
ການເລີ່ມຕົ້ນຂອງພາກນັ້ນແລະ / ຫຼືເຮັດໃຫ້ສົມມຸດຕິຖານໂດຍອີງໃສ່ນັ້ນ.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -fzero-initialized-in-bss.

-fmudflap -fmudflapth -fmudflapir
ສໍາລັບດ້ານຫນ້າທີ່ສະຫນັບສະຫນູນມັນ (C ແລະ C ++), ເຄື່ອງມືຊີ້ / array ທີ່ມີຄວາມສ່ຽງທັງຫມົດ
ການ​ປະ​ຕິ​ບັດ​ການ dereferencing​, ບາງ​ສະ​ຕ​ຣິ​ງ​ຫ້ອງ​ສະ​ຫມຸດ​ມາດ​ຕະ​ຖານ / heap functions ແລະ​ອື່ນໆ​ບາງ​
ໂຄງສ້າງທີ່ກ່ຽວຂ້ອງກັບໄລຍະ / ການທົດສອບຄວາມຖືກຕ້ອງ. ໂມດູນເຄື່ອງມືດັ່ງກ່າວຄວນຈະເປັນ
ພູມຕ້ານທານຕໍ່ກັບ buffer overflows, ການໃຊ້ heap ທີ່ບໍ່ຖືກຕ້ອງ, ແລະບາງຊັ້ນຮຽນອື່ນໆຂອງ C/C++
ຄວາມຜິດພາດການຂຽນໂປຼແກຼມ. ເຄື່ອງມືແມ່ນຂຶ້ນກັບຫ້ອງສະໝຸດ runtime ແຍກຕ່າງຫາກ
(libmudflap), ເຊິ່ງຈະຖືກເຊື່ອມຕໍ່ເຂົ້າໄປໃນໂປຼແກຼມຖ້າ -fmudflap ແມ່ນໃຫ້ໃນເວລາເຊື່ອມຕໍ່.
ພຶດ ຕິ ກໍາ ການ ດໍາ ເນີນ ງານ ຂອງ ໂຄງ ການ ເຄື່ອງ ມື ແມ່ນ ຄວບ ຄຸມ ໂດຍ MUDFLAP_OPTIONS
ສະພາບແວດລ້ອມປ່ຽນແປງ. ເບິ່ງ "env MUDFLAP_OPTIONS=-help a.out" ສໍາລັບຕົວເລືອກຂອງມັນ.

ການນໍາໃຊ້ -fmudflapth ແທນ​ທີ່ -fmudflap ເພື່ອລວບລວມແລະເຊື່ອມຕໍ່ຖ້າຫາກວ່າໂຄງການຂອງທ່ານແມ່ນຫຼາຍ.
ກະທູ້. ໃຊ້ -fmudflapir, ນອກ​ຈາກ​ນັ້ນ -fmudflap or -fmudflapth, ຖ້າ
ເຄື່ອງມືຄວນບໍ່ສົນໃຈການອ່ານຕົວຊີ້. ນີ້ຜະລິດເຄື່ອງມືຫນ້ອຍ (ແລະ
ດັ່ງ​ນັ້ນ​ການ​ປະ​ຕິ​ບັດ​ໄວ​ຂຶ້ນ​) ແລະ​ຍັງ​ສະ​ຫນອງ​ການ​ປົກ​ປັກ​ຮັກ​ສາ​ບາງ​ຢ່າງ​ຕໍ່​ຕ້ານ​ຄວາມ​ຊົງ​ຈໍາ outright​
corrupting writes, ແຕ່ອະນຸຍາດໃຫ້ erroneously ອ່ານຂໍ້ມູນເພື່ອ propagate ພາຍໃນໂຄງການ.

-fthread-jumps
ປະຕິບັດການເພີ່ມປະສິດທິພາບທີ່ພວກເຮົາກວດເບິ່ງເພື່ອເບິ່ງວ່າສາຂາໂດດໄປຫາສະຖານທີ່ໃດ
ມີການປຽບທຽບອີກອັນໜຶ່ງທີ່ຫຍໍ້ມາຈາກອັນທຳອິດ. ຖ້າເປັນດັ່ງນັ້ນ, ສາຂາທໍາອິດແມ່ນ
ຖືກໂອນໄປຫາຈຸດໝາຍປາຍທາງຂອງສາຂາທີສອງ ຫຼືຈຸດໃດໜຶ່ງໃນທັນທີ
ປະຕິບັດຕາມມັນ, ຂຶ້ນກັບວ່າເງື່ອນໄຂທີ່ຮູ້ວ່າເປັນຄວາມຈິງຫຼືບໍ່ຖືກຕ້ອງ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3, -ອສ.

-fsplit-wide-types
ເມື່ອໃຊ້ປະເພດທີ່ຄອບຄອງຫຼາຍທະບຽນ, ເຊັ່ນ "ຍາວຍາວ" ໃນ 32-bit
ລະ​ບົບ​, ການ​ແບ່ງ​ປັນ​ການ​ຈົດ​ທະ​ບຽນ​ແຍກ​ຕ່າງ​ຫາກ​ແລະ​ຈັດ​ສັນ​ໃຫ້​ເຂົາ​ເຈົ້າ​ເປັນ​ເອ​ກະ​ລາດ​. ນີ້ຕາມປົກກະຕິ
ສ້າງລະຫັດທີ່ດີກວ່າສໍາລັບປະເພດເຫຼົ່ານັ້ນ, ແຕ່ອາດຈະເຮັດໃຫ້ການດີບັກມີຄວາມຫຍຸ້ງຍາກຫຼາຍ.

ເປີດໃຊ້ໃນລະດັບ -O, -O2, -O3, -ອສ.

-fcse-follow-jumps
ໃນການລົບລ້າງ subexpression ທົ່ວໄປ (CSE), ສະແກນຜ່ານຄໍາແນະນໍາກະໂດດໃນເວລາທີ່
ເປົ້າໝາຍຂອງການກະໂດດບໍ່ບັນລຸໄດ້ໂດຍທາງອື່ນ. ຕົວຢ່າງ, ເມື່ອ CSE ພົບ
ຄໍາຖະແຫຼງ "ຖ້າ" ທີ່ມີປະໂຫຍກ "ອື່ນ", CSE ຈະປະຕິບັດຕາມການກະໂດດໃນເວລາທີ່ເງື່ອນໄຂ
ການທົດສອບແມ່ນບໍ່ຖືກຕ້ອງ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3, -ອສ.

-fcse-skip-blocks
ນີ້ແມ່ນຄ້າຍຄືກັນກັບ -fcse-follow-jumps, ແຕ່ເຮັດໃຫ້ CSE ປະຕິບັດຕາມການກະໂດດ
ຕາມເງື່ອນໄຂໃຫ້ຂ້າມທ່ອນໄມ້. ເມື່ອ CSE ພົບກັບຄໍາຖະແຫຼງທີ່ງ່າຍດາຍ "ຖ້າ" ທີ່ບໍ່ມີ
ຂໍ້​ອື່ນ​, -fcse-skip-blocks ເຮັດໃຫ້ CSE ປະຕິບັດຕາມການກະໂດດປະມານຮ່າງກາຍຂອງ
"ຖ້າ".

ເປີດໃຊ້ໃນລະດັບ -O2, -O3, -ອສ.

-frerun-cse-after-loop
ດໍາເນີນການລົບລ້າງ subexpression ທົ່ວໄປຄືນໃຫມ່ຫຼັງຈາກການເພີ່ມປະສິດທິພາບ loop ໄດ້ຖືກປະຕິບັດ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3, -ອສ.

-fgcse
ດໍາເນີນການຜ່ານການລົບລ້າງ subexpression ທົ່ວໄປທົ່ວໂລກ. ຜ່ານນີ້ຍັງປະຕິບັດ
ຄົງທີ່ໃນທົ່ວໂລກແລະການຂະຫຍາຍພັນສໍາເນົາ.

ຫມາຍ​ເຫດ​: ເມື່ອລວບລວມໂຄງການໂດຍໃຊ້ computed gotos, ການຂະຫຍາຍ GCC, ທ່ານອາດຈະໄດ້ຮັບ
ການປະຕິບັດເວລາແລ່ນທີ່ດີກວ່າຖ້າທ່ານປິດການລົບລ້າງ subexpression ທົ່ວໄປທົ່ວໂລກ
ຜ່ານໂດຍການເພີ່ມ -fno-gcse ໄປຫາເສັ້ນຄໍາສັ່ງ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3, -ອສ.

-fgcse-lm
ເມື່ອ​ໃດ​ -fgcse-lm ຖືກເປີດໃຊ້, ການລົບລ້າງ subexpression ທົ່ວໄປທົ່ວໂລກຈະພະຍາຍາມ
ຍ້າຍການໂຫຼດທີ່ຖືກຂ້າຕາຍໂດຍຮ້ານຄ້າເຂົ້າໄປໃນຕົວຂອງມັນເອງ. ນີ້ອະນຸຍາດໃຫ້ມີ loop
ມີລຳດັບການໂຫຼດ/ເກັບເພື່ອປ່ຽນເປັນການໂຫຼດນອກວົງການ, ແລະ ກ
ຄັດລອກ / ເກັບຮັກສາພາຍໃນ loop.

ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນເມື່ອ gcse ຖືກເປີດໃຊ້.

-fgcse-sm
ເມື່ອ​ໃດ​ -fgcse-sm ຖືກເປີດໃຊ້ງານ, store motion pass ແມ່ນດໍາເນີນການຫຼັງຈາກທົ່ວໄປທົ່ວໂລກ
ການ​ລົບ​ລ້າງ subexpression​. ບັດນີ້ຈະພະຍາຍາມຍ້າຍຮ້ານຄ້າອອກຈາກ loops. ເມື່ອ​ໃດ​
ໃຊ້ຮ່ວມກັບ -fgcse-lm, loops ບັນຈຸມີລໍາດັບການໂຫຼດ / ຮ້ານສາມາດເປັນ
ປ່ຽນເປັນການໂຫຼດກ່ອນ loop ແລະຮ້ານຫຼັງຈາກ loop.

ບໍ່ໄດ້ເປີດໃຊ້ໃນລະດັບການເພີ່ມປະສິດທິພາບໃດໆ.

-fgcse-las
ເມື່ອ​ໃດ​ -fgcse-las ຖືກເປີດໃຊ້ງານ, ການລົບລ້າງ subexpression ທົ່ວໄປທົ່ວໂລກ
ກໍາຈັດການໂຫຼດທີ່ຊໍ້າຊ້ອນທີ່ມາຈາກຮ້ານຄ້າໄປຫາສະຖານທີ່ຫນ່ວຍຄວາມຈໍາດຽວກັນ (ທັງສອງ
ຊ້ຳຊ້ອນບາງສ່ວນ ແລະເຕັມ).

ບໍ່ໄດ້ເປີດໃຊ້ໃນລະດັບການເພີ່ມປະສິດທິພາບໃດໆ.

-fgcse-after-reload
ເມື່ອ​ໃດ​ -fgcse-after-reload ຖືກເປີດໃຊ້ແລ້ວ, ການກໍາຈັດການໂຫຼດຊໍ້າຊ້ອນແມ່ນດໍາເນີນການ
ຫຼັງຈາກໂຫຼດໃໝ່. ຈຸດ​ປະ​ສົງ​ຂອງ​ການ​ຜ່ານ​ຄັ້ງ​ນີ້​ແມ່ນ​ເພື່ອ​ທໍາ​ຄວາມ​ສະ​ອາດ​ການ​ຮົ່ວ​ໄຫລ​ຊ້ຳ​ຊ້ອນ.

-funsafe-loop-optimizations
ຖ້າຖືກມອບໃຫ້, ຕົວເພີ່ມປະສິດທິພາບ loop ຈະສົມມຸດວ່າດັດຊະນີ loop ບໍ່ overflow, ແລະນັ້ນ
loops ທີ່ມີເງື່ອນໄຂທາງອອກ nontrivial ແມ່ນບໍ່ມີຂອບເຂດ. ອັນນີ້ເຮັດໃຫ້ກວ້າງຂຶ້ນ
ຂອງ loop optimizations ເຖິງແມ່ນວ່າ loop optimizer ຕົວຂອງມັນເອງບໍ່ສາມາດພິສູດວ່າສິ່ງເຫຼົ່ານີ້
ສົມມຸດຕິຖານຖືກຕ້ອງ. ການນໍາໃຊ້ -Wunsafe-loop-optimizations, compiler ຈະເຕືອນທ່ານ
ຖ້າຫາກວ່າມັນພົບເຫັນປະເພດຂອງ loop ນີ້.

-fcrossjumping
ປະຕິບັດການຫັນປ່ຽນຂ້າມໂດດ. ການຫັນເປັນນີ້ unifies ລະຫັດທຽບເທົ່າແລະ
ບັນທຶກຂະຫນາດລະຫັດ. ລະຫັດຜົນໄດ້ຮັບອາດຈະຫຼືອາດຈະບໍ່ປະຕິບັດໄດ້ດີກ່ວາບໍ່ມີ cross-
ໂດດ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3, -ອສ.

-fauto-inc, ຄະ
ສົມທົບການເພີ່ມຂຶ້ນຫຼືຫຼຸດລົງຂອງທີ່ຢູ່ທີ່ມີການເຂົ້າເຖິງຫນ່ວຍຄວາມຈໍາ. ຜ່ານນີ້ແມ່ນ
ສະເຫມີຂ້າມສະຖາປັດຕະຍະກໍາທີ່ບໍ່ມີຄໍາແນະນໍາເພື່ອສະຫນັບສະຫນູນສິ່ງນີ້.
ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າກ່ຽວກັບສະຖາປັດຕະຍະກໍາທີ່ສະຫນັບສະຫນູນນີ້.

-fdce
ດໍາເນີນການກໍາຈັດລະຫັດຕາຍ (DCE) ໃນ RTL. ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າ.

-fdse
ດໍາເນີນການກໍາຈັດຮ້ານຕາຍ (DSE) ໃນ RTL. ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າ.

-fif ການ​ປ່ຽນ​ແປງ​
ພະຍາຍາມຫັນປ່ຽນການໂດດຕາມເງື່ອນໄຂໄປສູ່ການທຽບເທົ່າສາຂາ-ໜ້ອຍ. ນີ້ປະກອບມີການນໍາໃຊ້
ຂອງການເຄື່ອນໄຫວຕາມເງື່ອນໄຂ, min, ສູງສຸດ, ກໍານົດທຸງແລະຄໍາແນະນໍາ abs, ແລະບາງ tricks doable
ໂດຍ​ມາດ​ຕະ​ຖານ​ເລກ​ຄະ​ນິດ​ສາດ​. ການນໍາໃຊ້ການປະຕິບັດເງື່ອນໄຂໃນຊິບບ່ອນທີ່ມັນຢູ່
ທີ່ມີຢູ່ແມ່ນຄວບຄຸມໂດຍ "if-conversion2".

ເປີດໃຊ້ໃນລະດັບ -O, -O2, -O3, -ອສ.

-fif ການ​ປ່ຽນ​ແປງ 2​
ໃຊ້ການປະຕິບັດຕາມເງື່ອນໄຂ (ບ່ອນມີ) ເພື່ອປ່ຽນການກະໂດດຕາມເງື່ອນໄຂ
ສາຂາ-ໜ້ອຍທຽບເທົ່າ.

ເປີດໃຊ້ໃນລະດັບ -O, -O2, -O3, -ອສ.

-fdelete-null-pointer-checks
ສົມມຸດວ່າບັນດາໂຄງການບໍ່ສາມາດອ້າງອີງຕົວຊີ້ null ໄດ້ຢ່າງປອດໄພ, ແລະບໍ່ມີລະຫັດ ຫຼືຂໍ້ມູນ
ອົງ​ປະ​ກອບ​ອາ​ໃສ​ຢູ່​ທີ່​ນັ້ນ​. ນີ້ເຮັດໃຫ້ການເພີ່ມປະສິດທິພາບການພັບຄົງທີ່ງ່າຍດາຍຢູ່ທັງຫມົດ
ລະດັບການເພີ່ມປະສິດທິພາບ. ນອກຈາກນັ້ນ, ການເພີ່ມປະສິດທິພາບອື່ນໆໃນ GCC ໃຊ້ທຸງນີ້ເພື່ອ
ຄວບຄຸມການວິເຄາະກະແສຂໍ້ມູນທົ່ວໂລກທີ່ລົບລ້າງການກວດສອບທີ່ບໍ່ມີປະໂຫຍດສໍາລັບຕົວຊີ້ null;
ເຫຼົ່ານີ້ສົມມຸດວ່າຖ້າຕົວຊີ້ຖືກກວດສອບຫຼັງຈາກມັນຖືກປະຕິເສດແລ້ວ, ມັນ
ບໍ່ສາມາດເປັນ null.

ໃຫ້ສັງເກດວ່າແນວໃດກໍ່ຕາມ, ໃນບາງສະພາບແວດລ້ອມ, ການສົມມຸດຕິຖານນີ້ບໍ່ແມ່ນຄວາມຈິງ. ໃຊ້
-fno-delete-null-pointer-checks ເພື່ອປິດການເພີ່ມປະສິດທິພາບນີ້ສໍາລັບໂຄງການທີ່ຂຶ້ນກັບ
ກ່ຽວ​ກັບ​ພຶດຕິ​ກຳ​ນັ້ນ.

ບາງເປົ້າໝາຍ, ໂດຍສະເພາະອັນທີ່ຝັງໄວ້, ປິດການນຳໃຊ້ຕົວເລືອກນີ້ໃນທຸກລະດັບ. ຖ້າບໍ່ດັ່ງນັ້ນ
ມັນຖືກເປີດໃຊ້ໃນທຸກລະດັບ: -O0, -O1, -O2, -O3, -ອສ. ຜ່ານທີ່ໃຊ້ຂໍ້ມູນ
ຖືກເປີດໃຊ້ເປັນເອກະລາດໃນລະດັບການເພີ່ມປະສິດທິພາບທີ່ແຕກຕ່າງກັນ.

-fdevirtualize
ພະຍາຍາມປ່ຽນການໂທເປັນຟັງຊັນສະເໝືອນເປັນການໂທໂດຍກົງ. ນີ້ແມ່ນເຮັດທັງສອງ
ພາຍໃນຂັ້ນຕອນແລະ interprocedurally ເປັນສ່ວນຫນຶ່ງຂອງ inlining ທາງອ້ອມ
("-findirect-inlining") ແລະການຂະຫຍາຍພັນຄົງທີ່ interprocedural (-fipa-cp). ເປີດໃຊ້ແລ້ວ
ໃນ​ລະ​ດັບ​ -O2, -O3, -ອສ.

-fexpensive-optimizations
ປະຕິບັດການເພີ່ມປະສິດທິພາບເລັກນ້ອຍທີ່ຂ້ອນຂ້າງແພງ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3, -ອສ.

ຟຣີ
ພະຍາຍາມເອົາຄໍາແນະນໍາການຂະຫຍາຍທີ່ຊໍ້າຊ້ອນ. ນີ້ແມ່ນເປັນປະໂຫຍດໂດຍສະເພາະສໍາລັບ
ສະຖາປັດຕະຍະກໍາ x86-64 ເຊິ່ງ implicitly zero-extens ໃນ 64-bit registers ຫຼັງຈາກ.
ຂຽນໃສ່ເຄິ່ງ 32-bit ຕ່ໍາຂອງພວກເຂົາ.

ເປີດໃຊ້ສໍາລັບ x86 ໃນລະດັບ -O2, -O3.

-foptimize-ລົງທະບຽນ-ຍ້າຍ
-fregmove
ພະຍາຍາມມອບຫມາຍເລກທະບຽນຄືນໃຫມ່ໃນຄໍາແນະນໍາການເຄື່ອນຍ້າຍແລະເປັນຕົວປະຕິບັດການອື່ນໆ
ຄໍາ​ແນະ​ນໍາ​ທີ່​ງ່າຍ​ດາຍ​ໃນ​ຄໍາ​ສັ່ງ​ທີ່​ຈະ​ເພີ່ມ​ປະ​ລິ​ມານ​ການ​ລົງ​ທະ​ບຽນ tying​. ນີ້​ແມ່ນ
ມີປະໂຫຍດໂດຍສະເພາະກັບເຄື່ອງຈັກທີ່ມີຄໍາແນະນໍາສອງຕົວປະຕິບັດການ.

ຫມາຍ​ເຫດ​ -fregmove ແລະ -foptimize-ລົງທະບຽນ-ຍ້າຍ ແມ່ນການເພີ່ມປະສິດທິພາບດຽວກັນ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3, -ອສ.

-fira-algorithm=ຂັ້ນຕອນວິທີ
ໃຊ້ສູດການໃສ່ສີທີ່ລະບຸໄວ້ສໍາລັບຜູ້ຈັດສັນການລົງທະບຽນປະສົມປະສານ. ໄດ້
ຂັ້ນຕອນວິທີ ການໂຕ້ຖຽງສາມາດເປັນ ບູລິມະສິດ, ເຊິ່ງກໍານົດສີບູລິມະສິດຂອງ Chow, ຫຼື CB,
ເຊິ່ງລະບຸການໃສ່ສີ Chaitin-Briggs. ການໃສ່ສີ Chaitin-Briggs ບໍ່ໄດ້ຖືກປະຕິບັດ
ສໍາລັບສະຖາປັດຕະຍະກໍາທັງຫມົດ, ແຕ່ສໍາລັບເປົ້າຫມາຍເຫຼົ່ານັ້ນທີ່ສະຫນັບສະຫນູນມັນ, ມັນເປັນຄ່າເລີ່ມຕົ້ນ
ເນື່ອງຈາກວ່າມັນສ້າງລະຫັດທີ່ດີກວ່າ.

-fira-region=ພູມິພາກ
ໃຊ້ພາກພື້ນທີ່ລະບຸໄວ້ສໍາລັບຜູ້ຈັດສັນການລົງທະບຽນປະສົມປະສານ. ໄດ້ ພູມິພາກ ການໂຕ້ຖຽງ
ຄວນຈະເປັນຫນຶ່ງໃນດັ່ງຕໍ່ໄປນີ້:

ທັງຫມົດ ໃຊ້ loops ທັງໝົດເປັນເຂດການຈັດສັນການລົງທະບຽນ. ນີ້ສາມາດໃຫ້ຜົນໄດ້ຮັບທີ່ດີທີ່ສຸດສໍາລັບ
ເຄື່ອງຈັກທີ່ມີຊຸດການລົງທະບຽນຂະຫນາດນ້ອຍແລະ / ຫຼືສະຫມໍ່າສະເຫມີ.

ປະສົມ
ໃຊ້ loops ທັງຫມົດຍົກເວັ້ນ loops ທີ່ມີຄວາມກົດດັນລົງທະບຽນຂະຫນາດນ້ອຍເປັນພາກພື້ນ. ນີ້
ຄ່າປົກກະຕິຈະໃຫ້ຜົນໄດ້ຮັບທີ່ດີທີ່ສຸດໃນກໍລະນີຫຼາຍທີ່ສຸດແລະສໍາລັບສະຖາປັດຕະຍະກໍາສ່ວນໃຫຍ່, ແລະ
ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນເມື່ອລວບລວມກັບການເພີ່ມປະສິດທິພາບສໍາລັບຄວາມໄວ (-O, -O2, ...).

ຫນຶ່ງ ໃຊ້ຟັງຊັນທັງໝົດເປັນພາກພື້ນດຽວ. ໂດຍທົ່ວໄປແລ້ວນີ້ເຮັດໃຫ້ລະຫັດນ້ອຍທີ່ສຸດ
ຂະຫນາດ, ແລະຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນສໍາລັບ -ອສ or -O0.

-fira-loop-pressure
ໃຊ້ IRA ເພື່ອປະເມີນຄວາມກົດດັນຂອງການລົງທະບຽນໃນ loops ສໍາລັບການຕັດສິນໃຈຍ້າຍ loop invariants.
ທາງ​ເລືອກ​ນີ້​ໂດຍ​ປົກ​ກະ​ຕິ​ຜົນ​ໄດ້​ຮັບ​ໃນ​ການ​ຜະ​ລິດ​ຂອງ​ລະ​ຫັດ​ໄວ​ແລະ​ຂະ​ຫນາດ​ນ້ອຍ​ໃນ​ເຄື່ອງ​ຈັກ​ທີ່​ມີ
ໄຟລ໌ລົງທະບຽນຂະຫນາດໃຫຍ່ (>= 32 ລົງທະບຽນ), ແຕ່ມັນສາມາດເຮັດໃຫ້ compiler ຊ້າລົງ.

ຕົວເລືອກນີ້ຖືກເປີດໃຊ້ໃນລະດັບ -O3 ສໍາລັບບາງເປົ້າໝາຍ.

-fno-ira-share-save-slots
ປິດການໃຊ້ງານການແບ່ງປັນສະລັອດຕິງທີ່ໃຊ້ເພື່ອບັນທຶກການໂທທີ່ໃຊ້ຍາກໃນການລົງທະບຽນ
ໂທ. ແຕ່ລະການລົງທະບຽນຍາກໄດ້ຮັບຊ່ອງ stack ແຍກຕ່າງຫາກ, ແລະເປັນ stack ຫນ້າທີ່ຜົນໄດ້ຮັບ
ກອບມີຂະຫນາດໃຫຍ່ກວ່າ.

-fno-ira-share-spill-slots
ປິດການນຳໃຊ້ການແບ່ງປັນສະລັອດຕິງທີ່ຈັດສັນໄວ້ສຳລັບການລົງທະບຽນ pseudo. ແຕ່ລະ pseudo-ລົງທະບຽນ
ທີ່ບໍ່ໄດ້ຮັບການລົງທະບຽນຍາກໄດ້ຮັບສະລັອດຕິງ stack ແຍກຕ່າງຫາກ, ແລະເປັນຫນ້າທີ່ຜົນໄດ້ຮັບ
stack frames ມີຂະຫນາດໃຫຍ່ກວ່າ.

-fira-verbose=n
ຄວບຄຸມ verbosity ຂອງໄຟລ໌ dump ສໍາລັບຜູ້ຈັດສັນການລົງທະບຽນປະສົມປະສານ. ໄດ້
ຄ່າເລີ່ມຕົ້ນແມ່ນ 5. ຖ້າຄ່າ n ແມ່ນໃຫຍ່ກວ່າຫຼືເທົ່າກັບ 10, ຜົນຜະລິດ dump ຖືກສົ່ງໄປ
to stderr ໂດຍໃຊ້ຮູບແບບດຽວກັນກັບ n ລົບ 10.

-fdelayed-ສາຂາ
ຖ້າສະຫນັບສະຫນູນເຄື່ອງຈັກເປົ້າຫມາຍ, ພະຍາຍາມຈັດລໍາດັບຄໍາແນະນໍາຄືນໃຫມ່ເພື່ອຂຸດຄົ້ນ
ຊ່ອງຄໍາແນະນໍາທີ່ມີຢູ່ຫຼັງຈາກຄໍາແນະນໍາສາຂາທີ່ຊັກຊ້າ.

ເປີດໃຊ້ໃນລະດັບ -O, -O2, -O3, -ອສ.

-fschedule-insns
ຖ້າສະຫນັບສະຫນູນເຄື່ອງຈັກເປົ້າຫມາຍ, ພະຍາຍາມຈັດລໍາດັບຄໍາແນະນໍາຄືນໃຫມ່ເພື່ອລົບລ້າງ
ການ​ປະ​ຕິ​ບັດ​ຢຸດ​ເຊົາ​ເນື່ອງ​ຈາກ​ວ່າ​ຂໍ້​ມູນ​ທີ່​ຈໍາ​ເປັນ​ບໍ່​ມີ​. ນີ້ຊ່ວຍເຄື່ອງຈັກທີ່
ມີຈຸດເລື່ອນຊ້າຫຼືຄໍາແນະນໍາການໂຫຼດຫນ່ວຍຄວາມຈໍາໂດຍການອະນຸຍາດໃຫ້ຄໍາແນະນໍາອື່ນໆ
ຈະຖືກອອກຈົນກ່ວາຜົນຂອງການໂຫຼດຫຼືຄໍາແນະນໍາທີ່ເລື່ອນໄດ້ແມ່ນຕ້ອງການ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3.

-fschedule-insns2
ຄ້າຍ​ຄື​ກັບ -fschedule-insns, ແຕ່ຂໍໃຫ້ມີການກໍານົດເວລາການສອນເພີ່ມເຕີມ
ຫຼັງ​ຈາກ​ການ​ຈັດ​ສັນ​ການ​ລົງ​ທະ​ບຽນ​ໄດ້​ຮັບ​ການ​ເຮັດ​ໄດ້​. ນີ້ແມ່ນເປັນປະໂຫຍດໂດຍສະເພາະໃນເຄື່ອງຈັກທີ່ມີ a
ຈໍານວນການລົງທະບຽນຂ້ອນຂ້າງຫນ້ອຍແລະບ່ອນທີ່ຄໍາແນະນໍາການໂຫຼດຫນ່ວຍຄວາມຈໍາໃຊ້ເວລາຫຼາຍກ່ວາ
ຫນຶ່ງຮອບ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3, -ອສ.

-fno-sched-interblock
ຢ່າຈັດຕາຕະລາງຄໍາແນະນໍາໃນທົ່ວບລັອກພື້ນຖານ. ປົກກະຕິອັນນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ
ໃນເວລາທີ່ກໍານົດເວລາກ່ອນທີ່ຈະລົງທະບຽນການຈັດສັນ, ie ກັບ -fschedule-insns ຫຼືຢູ່ -O2 or
ສູງຂຶ້ນ.

-fno-sched-spec
ບໍ່ອະນຸຍາດໃຫ້ມີການເຄື່ອນໄຫວແບບຄາດເດົາຂອງຄໍາແນະນໍາທີ່ບໍ່ແມ່ນການໂຫຼດ. ປົກກະຕິນີ້ແມ່ນເປີດໃຊ້ໂດຍ
default ໃນເວລາທີ່ກໍານົດເວລາກ່ອນທີ່ຈະລົງທະບຽນການຈັດສັນ, ie ກັບ -fschedule-insns ຫຼືຢູ່
-O2 ຫຼືສູງກວ່າ.

-fsched-ຄວາມກົດດັນ
ເປີດໃຊ້ການກໍານົດເວລາ insn ທີ່ລະອຽດອ່ອນຂອງລົງທະບຽນກ່ອນການຈັດສັນການລົງທະບຽນ.
ນີ້ພຽງແຕ່ເຮັດໃຫ້ຄວາມຮູ້ສຶກໃນເວລາທີ່ກໍານົດເວລາກ່ອນທີ່ຈະລົງທະບຽນການຈັດສັນໄດ້ຖືກເປີດໃຊ້, ie ກັບ
-fschedule-insns ຫຼືຢູ່ -O2 ຫຼືສູງກວ່າ. ການ​ນໍາ​ໃຊ້​ທາງ​ເລືອກ​ນີ້​ສາ​ມາດ​ປັບ​ປຸງ​ການ​ຜະ​ລິດ​ໄດ້​
ລະ​ຫັດ​ແລະ​ຫຼຸດ​ລົງ​ຂະ​ຫນາດ​ຂອງ​ຕົນ​ໂດຍ​ການ​ປ້ອງ​ກັນ​ຄວາມ​ກົດ​ດັນ​ການ​ຈົດ​ທະ​ບຽນ​ເພີ່ມ​ຂຶ້ນ​ຂ້າງ​ເທິງ​ຕົວ​ເລກ​ໄດ້​
ຂອງການລົງທະບຽນແຂງທີ່ມີຢູ່ແລະເປັນຜົນມາຈາກການຮົ່ວໄຫລລົງທະບຽນຢູ່ໃນທະບຽນ
ການຈັດສັນ.

-fsched-spec-load
ອະ​ນຸ​ຍາດ​ໃຫ້​ມີ​ການ​ເຄື່ອນ​ໄຫວ​ຄາດ​ຄະ​ເນ​ຂອງ​ບາງ​ຄໍາ​ແນະ​ນໍາ​ການ​ໂຫຼດ​. ນີ້ພຽງແຕ່ເຮັດໃຫ້ຄວາມຮູ້ສຶກໃນເວລາທີ່
ການກໍານົດເວລາກ່ອນທີ່ຈະລົງທະບຽນການຈັດສັນ, ie ກັບ -fschedule-insns ຫຼືຢູ່ -O2 ຫຼືສູງກວ່າ.

-fsched-spec-load-ອັນຕະລາຍ
ອະນຸຍາດໃຫ້ມີການເຄື່ອນໄຫວແບບຄາດເດົາຂອງຄໍາແນະນໍາການໂຫຼດເພີ່ມເຕີມ. ນີ້ພຽງແຕ່ເຮັດໃຫ້ຄວາມຮູ້ສຶກໃນເວລາທີ່
ການກໍານົດເວລາກ່ອນທີ່ຈະລົງທະບຽນການຈັດສັນ, ie ກັບ -fschedule-insns ຫຼືຢູ່ -O2 ຫຼືສູງກວ່າ.

-fsched-stalled-insns
-fsched-stalled-insns=n
ກໍານົດຈໍານວນ insns (ຖ້າມີ) ສາມາດຖືກຍ້າຍກ່ອນໄວອັນຄວນຈາກແຖວຂອງການຢຸດເຊົາ
insns ເຂົ້າໄປໃນບັນຊີລາຍຊື່ທີ່ກຽມພ້ອມ, ໃນລະຫວ່າງການກໍານົດເວລາທີສອງ.
-fno-sched-stalled-insns ຫມາຍຄວາມວ່າບໍ່ມີ insns ຈະຖືກຍ້າຍກ່ອນໄວອັນຄວນ,
-fsched-stalled-insns=0 ຫມາຍຄວາມວ່າບໍ່ມີຂອບເຂດຈໍາກັດກ່ຽວກັບຈໍານວນ insns ຄິວທີ່ສາມາດຍ້າຍໄດ້
ກ່ອນໄວອັນຄວນ. -fsched-stalled-insns ບໍ່ມີຄ່າເທົ່າກັບ
-fsched-stalled-insns=1.

-fsched-stalled-insns-dep
-fsched-stalled-insns-dep=n
ກໍານົດຈໍານວນກຸ່ມ insn (ຮອບວຽນ) ຈະຖືກກວດສອບສໍາລັບການຂຶ້ນກັບການຢຸດເຊົາ.
insn ທີ່ເປັນຜູ້ສະຫມັກສໍາລັບການໂຍກຍ້າຍອອກກ່ອນໄວອັນຄວນຈາກແຖວຂອງ insns ຢຸດເຊົາ. ນີ້
ມີຜົນກະທົບພຽງແຕ່ໃນໄລຍະການກໍານົດເວລາທີສອງ, ແລະພຽງແຕ່ຖ້າຫາກວ່າ
-fsched-stalled-insns ຖືກນໍາໃຊ້. -fno-sched-stalled-insns-dep ເທົ່າກັບ
-fsched-stalled-insns-dep=0. -fsched-stalled-insns-dep ບໍ່ມີຄ່າແມ່ນທຽບເທົ່າ
to -fsched-stalled-insns-dep=1.

-fsched2-use-superblocks
ເມື່ອກໍານົດເວລາຫຼັງຈາກການຈັດສັນການລົງທະບຽນ, ໃຊ້ສູດການຄິດໄລ່ superblock.
ການກຳນົດເວລາ Superblock ອະນຸຍາດໃຫ້ເຄື່ອນໄຫວຂ້າມເຂດແດນພື້ນຖານທີ່ສົ່ງຜົນໃຫ້ໄວຂຶ້ນ
ຕາຕະລາງ. ຕົວເລືອກນີ້ແມ່ນການທົດລອງ, ເພາະວ່າບໍ່ແມ່ນທຸກຄໍາອະທິບາຍເຄື່ອງທີ່ໃຊ້ໂດຍ GCC
ສ້າງແບບຈໍາລອງ CPU ຢ່າງໃກ້ຊິດພຽງພໍທີ່ຈະຫຼີກເວັ້ນຜົນໄດ້ຮັບທີ່ບໍ່ຫນ້າເຊື່ອຖືຈາກສູດການຄິດໄລ່.

ນີ້ພຽງແຕ່ເຮັດໃຫ້ຄວາມຮູ້ສຶກໃນເວລາທີ່ກໍານົດເວລາຫຼັງຈາກການຈັດສັນການລົງທະບຽນ, ie ກັບ
-fschedule-insns2 ຫຼືຢູ່ -O2 ຫຼືສູງກວ່າ.

-fsched-group-heuristic
ເປີດໃຊ້ heuristic ກຸ່ມໃນຕົວກໍານົດເວລາ. heuristic ນີ້ມັກຄໍາແນະນໍາ
ທີ່ເປັນຂອງກຸ່ມຕາຕະລາງ. ອັນນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນເມື່ອກຳນົດເວລາ
ເປີດໃຊ້, ie ກັບ -fschedule-insns or -fschedule-insns2 ຫຼືຢູ່ -O2 ຫຼືສູງກວ່າ.

-fsched-critical-path-heuristic
ເປີດໃຊ້ heuristic ເສັ້ນທາງທີ່ສໍາຄັນໃນຕົວກໍານົດເວລາ. ນີ້ມັກ heuristic
ຄໍາແນະນໍາກ່ຽວກັບເສັ້ນທາງທີ່ສໍາຄັນ. ອັນນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນເມື່ອກຳນົດເວລາ
ເປີດໃຊ້, ie ກັບ -fschedule-insns or -fschedule-insns2 ຫຼືຢູ່ -O2 ຫຼືສູງກວ່າ.

-fsched-spec-insn-heuristic
ເປີດໃຊ້ heuristic ຄໍາແນະນໍາການຄາດເດົາໃນຕົວກໍານົດເວລາ. ນີ້ມັກ heuristic
ຄໍາແນະນໍາການຄາດເດົາທີ່ມີຄວາມອ່ອນເພຍຫຼາຍຂື້ນ. ອັນນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ
ໃນ​ເວ​ລາ​ທີ່​ການ​ກໍາ​ນົດ​ເວ​ລາ​ແມ່ນ​ເປີດ​ໃຫ້​ໃຊ້​ງານ​, ເຊັ່ນ​: ມີ​ -fschedule-insns or -fschedule-insns2 ຫຼືຢູ່ -O2
ຫຼືສູງກວ່າ.

-fsched-rank-heuristic
ເປີດໃຊ້ heuristic ອັນດັບໃນຕົວກໍານົດເວລາ. heuristic ນີ້ມັກຄໍາແນະນໍາ
ເປັນຂອງບລັອກພື້ນຖານທີ່ມີຂະໜາດ ຫຼືຄວາມຖີ່ຫຼາຍກວ່າ. ອັນນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ
ໃນ​ເວ​ລາ​ທີ່​ການ​ກໍາ​ນົດ​ເວ​ລາ​ແມ່ນ​ເປີດ​ໃຫ້​ໃຊ້​ງານ​, ເຊັ່ນ​: ມີ​ -fschedule-insns or -fschedule-insns2 ຫຼືຢູ່ -O2
ຫຼືສູງກວ່າ.

-fsched-last-insn-heuristic
ເປີດໃຊ້ heuristic ຄໍາແນະນໍາສຸດທ້າຍໃນຕົວກໍານົດເວລາ. heuristic ນີ້ favors ໄດ້
ຄໍາແນະນໍາທີ່ຫນ້ອຍແມ່ນຂຶ້ນກັບຄໍາແນະນໍາສຸດທ້າຍທີ່ໄດ້ກໍານົດໄວ້. ອັນນີ້ຖືກເປີດໃຊ້
ໂດຍຄ່າເລີ່ມຕົ້ນໃນເວລາທີ່ການກໍານົດເວລາຖືກເປີດໃຊ້, ie ກັບ -fschedule-insns or -fschedule-insns2
ຫຼືຢູ່ -O2 ຫຼືສູງກວ່າ.

-fsched-dep-count-heuristic
ເປີດໃຊ້ heuristic ການນັບຂຶ້ນກັບຢູ່ໃນຕົວກໍານົດເວລາ. heuristic ນີ້ favors ໄດ້
ຄໍາແນະນໍາທີ່ມີຄໍາແນະນໍາຫຼາຍຂື້ນກັບມັນ. ອັນນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ
ໃນ​ເວ​ລາ​ທີ່​ການ​ກໍາ​ນົດ​ເວ​ລາ​ແມ່ນ​ເປີດ​ໃຫ້​ໃຊ້​ງານ​, ເຊັ່ນ​: ມີ​ -fschedule-insns or -fschedule-insns2 ຫຼືຢູ່ -O2
ຫຼືສູງກວ່າ.

-freschedule-modulo-schedule-loops
ການຈັດຕາຕະລາງແບບໂມດູໂລແມ່ນມາກ່ອນການກຳນົດເວລາແບບດັ້ງເດີມ, ຖ້າວົງແຫວນແມ່ນໂມດູໂລ
ກໍານົດເວລາທີ່ພວກເຮົາອາດຈະຕ້ອງການປ້ອງກັນບໍ່ໃຫ້ passes ກໍານົດເວລາຕໍ່ມາຈາກການປ່ຽນແປງຂອງມັນ
ຕາຕະລາງ, ພວກເຮົາໃຊ້ທາງເລືອກນີ້ເພື່ອຄວບຄຸມມັນ.

-fselective-ການ​ກໍາ​ນົດ​ເວ​ລາ​
ກໍານົດເວລາຄໍາແນະນໍາໂດຍໃຊ້ສູດການຄິດໄລ່ການເລືອກ. ການເລືອກຕາຕະລາງການແລ່ນ
ແທນການຜ່ານຕາຕະລາງທໍາອິດ.

-fselective-ກຳນົດ​ເວລາ2
ກໍານົດເວລາຄໍາແນະນໍາໂດຍໃຊ້ສູດການຄິດໄລ່ການເລືອກ. ການເລືອກຕາຕະລາງການແລ່ນ
ແທນການຜ່ານຕາຕະລາງທີສອງ.

-fsel-sched-pipelining
ເປີດໃຊ້ການວາງທໍ່ຊອບແວຂອງ loops ພາຍໃນທີ່ສຸດໃນລະຫວ່າງການກໍານົດເວລາການເລືອກ. ນີ້
ທາງເລືອກທີ່ບໍ່ມີຜົນກະທົບຈົນກ່ວາຫນຶ່ງໃນ -fselective-ການ​ກໍາ​ນົດ​ເວ​ລາ​ or -fselective-ກຳນົດ​ເວລາ2 is
ເປີດ.

-fsel-sched-pipelining-outer-loops
ໃນເວລາທີ່ທໍ່ loops ໃນລະຫວ່າງການກໍານົດເວລາການຄັດເລືອກ, ຍັງທໍ່ loops ພາຍນອກ. ນີ້
ທາງເລືອກບໍ່ມີຜົນຈົນກ່ວາ -fsel-sched-pipelining ແມ່ນໄດ້ຫັນສຸດ.

-fshrink-wrap
ປ່ອຍ prologues ຟັງຊັນພຽງແຕ່ກ່ອນບາງສ່ວນຂອງຟັງຊັນທີ່ຕ້ອງການ, ແທນທີ່ຈະຢູ່
ເທິງສຸດຂອງຫນ້າທີ່. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າ.

-fcaller-ປະຫຍັດ
ເປີດໃຊ້ຄ່າທີ່ຈະຖືກຈັດສັນຢູ່ໃນທະບຽນທີ່ຈະຖືກ clobbered ໂດຍການໂທຟັງຊັນ,
ໂດຍການປ່ອຍຄໍາແນະນໍາເພີ່ມເຕີມເພື່ອຊ່ວຍປະຢັດແລະຟື້ນຟູການລົງທະບຽນປະມານການໂທດັ່ງກ່າວ.
ການຈັດສັນດັ່ງກ່າວແມ່ນເຮັດໄດ້ພຽງແຕ່ໃນເວລາທີ່ມັນເບິ່ງຄືວ່າຈະສົ່ງຜົນໃຫ້ລະຫັດທີ່ດີກ່ວາຈະ
ຖ້າບໍ່ດັ່ງນັ້ນຈະຖືກຜະລິດ.

ຕົວເລືອກນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ສະ ເໝີ ໃນບາງເຄື່ອງ, ໂດຍປົກກະຕິແມ່ນເຄື່ອງທີ່ມີ
ບໍ່ມີການໂທທີ່ເກັບຮັກສາໄວ້ລົງທະບຽນເພື່ອໃຊ້ແທນ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3, -ອສ.

-fcombine-stack-ປັບ
ຕິດຕາມການປັບຕົວ stack (pushes ແລະ pops) ແລະ stack ການອ້າງອີງຫນ່ວຍຄວາມຈໍາແລະຫຼັງຈາກນັ້ນພະຍາຍາມ
ເພື່ອຊອກຫາວິທີທີ່ຈະສົມທົບພວກມັນ.

ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O1 ແລະສູງກວ່າ.

-fconserve-stack
ພະຍາຍາມຫຼຸດຜ່ອນການໃຊ້ stack. compiler ຈະພະຍາຍາມໃຊ້ພື້ນທີ່ stack ຫນ້ອຍ,
ເຖິງແມ່ນວ່າມັນເຮັດໃຫ້ໂຄງການຊ້າລົງ. ທາງເລືອກນີ້ຫມາຍເຖິງການກໍານົດ stack ໃຫຍ່-
frame ພາລາມິເຕີເຖິງ 100 ແລະ large-stack-frame-growth ພາລາມິເຕີເຖິງ 400.

-ftree-reassoc
ປະຕິບັດການເຊື່ອມໂຍງກັບຕົ້ນໄມ້ຄືນໃໝ່. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າ.

-ftre-pre
ປະຕິບັດການກໍາຈັດການຊໍ້າຊ້ອນບາງສ່ວນ (PRE) ກ່ຽວກັບຕົ້ນໄມ້. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍ
ຄ່າເລີ່ມຕົ້ນຢູ່ -O2 ແລະ -O3.

-ftree-partial-pre
ເຮັດໃຫ້ການລົບລ້າງການຊໍ້າຊ້ອນບາງສ່ວນ (PRE) ຮຸກຮານຫຼາຍຂຶ້ນ. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍ
ຄ່າເລີ່ມຕົ້ນຢູ່ -O3.

-ftree-forwprop
ສືບຕໍ່ຂະຫຍາຍພັນຕົ້ນໄມ້. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະ
ສູງຂຶ້ນ.

- ຟຣີ​ຟຣີ​
ປະຕິບັດການກໍາຈັດການຊໍ້າຊ້ອນຢ່າງເຕັມທີ່ (FRE) ກ່ຽວກັບຕົ້ນໄມ້. ຄວາມແຕກຕ່າງລະຫວ່າງ FRE ແລະ
PRE ແມ່ນວ່າ FRE ພຽງແຕ່ພິຈາລະນາການສະແດງອອກທີ່ຖືກຄິດໄລ່ຢູ່ໃນທຸກເສັ້ນທາງທີ່ນໍາໄປສູ່
ການ​ຄິດ​ໄລ່​ທີ່​ຊໍ້າ​ຊ້ອນ​. ການວິເຄາະນີ້ແມ່ນໄວກວ່າ PRE, ເຖິງແມ່ນວ່າມັນເປີດເຜີຍຫນ້ອຍລົງ
ຊໍ້າຊ້ອນ. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າ.

-ftree-phiprop
ປະຕິບັດການຍົກການໂຫຼດຈາກຕົວຊີ້ຕາມເງື່ອນໄຂໃສ່ຕົ້ນໄມ້. ບັດນີ້ຖືກເປີດໃຊ້ໂດຍ
ຄ່າເລີ່ມຕົ້ນຢູ່ -O ແລະສູງກວ່າ.

-ftree-copy-prop
ປະຕິບັດການຂະຫຍາຍພັນຕົ້ນໄມ້. ບັດນີ້ກໍາຈັດການດໍາເນີນການສໍາເນົາທີ່ບໍ່ຈໍາເປັນ.
ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າ.

-fipa-pure-const
ຄົ້ນພົບຟັງຊັນໃດທີ່ບໍລິສຸດ ຫຼືຄົງທີ່. ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າ.

-fipa ອ້າງ​ອີງ​
ຄົ້ນພົບວ່າຕົວແປສະຖິດໃດທີ່ບໍ່ຫລົບໜີບໍ່ສາມາດໜີຈາກໜ່ວຍລວບລວມຂໍ້ມູນໄດ້.
ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າ.

-fipa-pta
ປະຕິບັດການວິເຄາະຕົວຊີ້ interprocedural ແລະການແກ້ໄຂ interprocedural ແລະ
ການວິເຄາະອ້າງອີງ. ຕົວເລືອກນີ້ສາມາດເຮັດໃຫ້ເກີດຄວາມຊົງຈໍາຫຼາຍເກີນໄປ ແລະການໃຊ້ເວລາລວບລວມຢູ່ໃນ
ຫນ່ວຍງານລວບລວມຂະຫນາດໃຫຍ່. ມັນບໍ່ໄດ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນໃນລະດັບການເພີ່ມປະສິດທິພາບໃດໆ.

-fipa-profile
ດໍາເນີນການຂະຫຍາຍໂປຼໄຟລ໌ລະຫວ່າງຂັ້ນຕອນ. ຫນ້າທີ່ເອີ້ນວ່າພຽງແຕ່ຈາກເຢັນ
ຫນ້າທີ່ຖືກຫມາຍເປັນເຢັນ. ນອກຈາກນີ້ຍັງປະຕິບັດຫນ້າຫນຶ່ງຄັ້ງ (ເຊັ່ນ: "ເຢັນ",
"noreturn", constructors static ຫຼື destructors) ຖືກກໍານົດ. ຫນ້າທີ່ເຢັນແລະ
loop ພາກສ່ວນຫນ້ອຍຂອງຫນ້າທີ່ປະຕິບັດຫນຶ່ງຄັ້ງຈະຖືກປັບປຸງໃຫ້ເຫມາະສົມສໍາລັບຂະຫນາດ. ເປີດໃຊ້ໂດຍ
ຄ່າເລີ່ມຕົ້ນຢູ່ -O ແລະສູງກວ່າ.

-fipa-cp
ປະຕິບັດການຂະຫຍາຍພັນຄົງທີ່ interprocedural. ການເພີ່ມປະສິດທິພາບນີ້ວິເຄາະໂຄງການ
ເພື່ອກໍານົດເວລາທີ່ຄ່າທີ່ສົ່ງໄປຫາຫນ້າທີ່ຄົງທີ່ແລະຫຼັງຈາກນັ້ນ optimizes
ຕາມນັ້ນ. ການເພີ່ມປະສິດທິພາບນີ້ສາມາດເພີ່ມປະສິດທິພາບຢ່າງຫຼວງຫຼາຍຖ້າຫາກວ່າ
ຄໍາ​ຮ້ອງ​ສະ​ຫມັກ​ມີ​ຄ່າ​ຄົງ​ທີ່​ທີ່​ຜ່ານ​ໄປ​ຫນ້າ​ທີ່​. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່
-O2, -ອສ ແລະ -O3.

-fipa-cp-clone
ດໍາເນີນການ cloning ຫນ້າທີ່ເພື່ອເຮັດໃຫ້ການຂະຫຍາຍພັນຄົງທີ່ interprocedural ເຂັ້ມແຂງ. ເມື່ອ​ໃດ​
ເປີດໃຊ້, ການຂະຫຍາຍພັນຄົງທີ່ interprocedural ຈະປະຕິບັດຫນ້າທີ່ cloning ເມື່ອ
ຟັງຊັນທີ່ເບິ່ງເຫັນພາຍນອກສາມາດຖືກເອີ້ນດ້ວຍການໂຕ້ຖຽງຄົງທີ່. ເນື່ອງຈາກວ່ານີ້
ການເພີ່ມປະສິດທິພາບສາມາດສ້າງສໍາເນົາຫຼາຍຫນ້າທີ່, ມັນອາດຈະເພີ່ມຂຶ້ນຢ່າງຫຼວງຫຼາຍ
ຂະຫນາດລະຫັດ (ເບິ່ງ --param ipcp-unit-growth=ມູນຄ່າ). ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່
-O3.

-fipa-matrix-reorg
ປະຕິບັດ matrix flattening ແລະ transposing. Matrix flattening ພະຍາຍາມທົດແທນການ
m-dimensional matrix ກັບ matrix n-dimensional ທຽບເທົ່າຂອງມັນ, ບ່ອນທີ່ n < m. ນີ້
ຫຼຸດຜ່ອນລະດັບທາງອ້ອມທີ່ຈໍາເປັນສໍາລັບການເຂົ້າເຖິງອົງປະກອບຂອງມາຕຣິກເບື້ອງ. ໄດ້
ການເພີ່ມປະສິດທິພາບທີສອງແມ່ນ transposing matrix, ເຊິ່ງພະຍາຍາມປ່ຽນຄໍາສັ່ງຂອງ
ຂະໜາດຂອງ matrix ເພື່ອປັບປຸງພື້ນທີ່ແຄດ. ການເພີ່ມປະສິດທິພາບທັງສອງຕ້ອງການ
- ໂຄງ​ການ​ທັງ​ຫມົດ​ ທຸງ. Transposing ຖືກເປີດໃຊ້ພຽງແຕ່ຖ້າຂໍ້ມູນໂປຣໄຟລ໌ເທົ່ານັ້ນ
ທີ່ມີຢູ່.

- ອ່າງລ້າງມື
ປະຕິບັດການເຄື່ອນໄຫວເກັບຮັກສາໄປຂ້າງຫນ້າກ່ຽວກັບຕົ້ນໄມ້. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະ
ສູງຂຶ້ນ.

-ftree-bit-ccp
ປະຕິບັດການຂະຫຍາຍພັນແບບຄົງທີ່ເລັກນ້ອຍຕາມເງື່ອນໄຂ ແລະ ຂະຫຍາຍພັນດ້ວຍຕົວຊີ້
ຂໍ້​ມູນ​ການ​ຈັດ​ຕັ້ງ​. pass ນີ້ດໍາເນີນການພຽງແຕ່ຢູ່ໃນຕົວແປ scalar ທ້ອງຖິ່ນແລະແມ່ນ
ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າ. ມັນຮຽກຮ້ອງໃຫ້ມີນັ້ນ -ftree-ccp ເປີດໃຊ້ງານ.

-ftree-ccp
ປະຕິບັດການຂະຫຍາຍພັນແບບຄົງທີ່ຕາມເງື່ອນໄຂ (CCP) ຢູ່ເທິງຕົ້ນໄມ້. ຜ່ານນີ້ເທົ່ານັ້ນ
ດໍາເນີນການຢູ່ໃນຕົວແປ scalar ທ້ອງຖິ່ນແລະຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າ.

-ftre-switch-ແປງ
ດໍາເນີນການປ່ຽນການເລີ່ມຕົ້ນແບບງ່າຍດາຍໃນການສະຫຼັບກັບການເລີ່ມຕົ້ນຈາກ a
array scalar. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O2 ແລະສູງກວ່າ.

-ftree-tail-merge
ຊອກຫາລໍາດັບລະຫັດດຽວກັນ. ເມື່ອພົບ, ແທນອັນໜຶ່ງດ້ວຍການໂດດໄປຫາອີກອັນໜຶ່ງ.
ການເພີ່ມປະສິດທິພາບນີ້ເອີ້ນວ່າການລວມຫາງຫຼືການໂດດຂ້າມ. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍ
ຄ່າເລີ່ມຕົ້ນຢູ່ -O2 ແລະສູງກວ່າ. ເວລາການລວບລວມຢູ່ໃນບັດນີ້ສາມາດຖືກຈໍາກັດໂດຍໃຊ້
max-tail-merge-ການປຽບທຽບ ພາລາມິເຕີແລະ max-tail-merge-iterations ພາລາມິເຕີ.

-ftree-dce
ປະຕິບັດການກໍາຈັດລະຫັດຕາຍ (DCE) ໃນຕົ້ນໄມ້. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O
ແລະສູງກວ່າ.

-ftree-builtin-call-dce
ປະຕິບັດການກໍາຈັດລະຫັດຕາຍຕາມເງື່ອນໄຂ (DCE) ສໍາລັບການໂທຫາຫນ້າທີ່ສ້າງຢູ່ໃນນັ້ນ
ອາດຈະຕັ້ງ "errno" ແຕ່ບໍ່ມີຜົນຂ້າງຄຽງໃດໆ. ທຸງນີ້ຖືກເປີດໃຊ້ເປັນຄ່າເລີ່ມຕົ້ນ
at -O2 ແລະສູງກວ່າຖ້າ -ອສ ຍັງ​ບໍ່​ໄດ້​ລະ​ບຸ​ໄວ້​.

-ftree-dominator-opts
ປະຕິບັດການທໍາຄວາມສະອາດສະເກັດເງິນທີ່ງ່າຍດາຍຫຼາຍຊະນິດ (ການຂະຫຍາຍພັນແບບຄົງທີ່ / ສໍາເນົາ, ການຊໍ້າຊ້ອນ.
ການ​ລົບ​ລ້າງ​, ການ​ຂະ​ຫຍາຍ​ພັນ​ລະ​ດັບ​ແລະ​ການ​ສະ​ແດງ​ອອກ​ງ່າຍ​ດາຍ​) ໂດຍ​ອີງ​ໃສ່​ການ​ເດັ່ນ​
ທາງຜ່ານຕົ້ນໄມ້. ນີ້ຍັງດໍາເນີນການກະທູ້ກະໂດດ (ເພື່ອຫຼຸດຜ່ອນການໂດດໄປຫາກະໂດດ). ນີ້
ທຸງຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າ.

-ftree-dse
ປະຕິບັດການກໍາຈັດຮ້ານຕາຍ (DSE) ໃນຕົ້ນໄມ້. ຮ້ານທີ່ຕາຍແລ້ວແມ່ນຮ້ານເຂົ້າໄປໃນຄວາມຊົງຈໍາ
ສະຖານທີ່ທີ່ຕໍ່ມາຖືກຂຽນທັບໂດຍຮ້ານອື່ນໂດຍບໍ່ມີການແຊກແຊງໃດໆ. ໃນ
ກໍລະນີນີ້ຮ້ານກ່ອນຫນ້າສາມາດຖືກລຶບຖິ້ມ. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະ
ສູງຂຶ້ນ.

-ftre-ch
ດໍາເນີນການຄັດລອກສ່ວນຫົວຂອງ loop ໃສ່ຕົ້ນໄມ້. ນີ້ແມ່ນຜົນປະໂຫຍດນັບຕັ້ງແຕ່ມັນເພີ່ມຂຶ້ນ
ປະສິດທິຜົນຂອງການເພີ່ມປະສິດທິພາບການເຄື່ອນໄຫວລະຫັດ. ມັນຍັງຊ່ວຍປະຢັດຫນຶ່ງກະໂດດ. ທຸງນີ້ແມ່ນ
ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າ. ມັນບໍ່ໄດ້ຖືກເປີດໃຊ້ສໍາລັບ -ອສ, ເນື່ອງຈາກວ່າມັນປົກກະຕິແລ້ວ
ເພີ່ມຂະຫນາດລະຫັດ.

-ftree-loop-optimize
ປະຕິບັດການເພີ່ມປະສິດທິພາບ loop ກ່ຽວກັບຕົ້ນໄມ້. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະ
ສູງຂຶ້ນ.

-ftree-loop-linear
ປະຕິບັດການຫັນປ່ຽນ loop interchange ກ່ຽວກັບຕົ້ນໄມ້. ຄື​ກັນ​ກັບ -floop-interchange. ການ ນຳ ໃຊ້
ການປ່ຽນແປງລະຫັດນີ້, GCC ຕ້ອງໄດ້ຮັບການ configured ກັບ --with-ppl ແລະ --with-cloog to
ເປີດໃຊ້ໂຄງສ້າງການຫັນປ່ຽນ Graphite loop.

-floop-interchange
ປະຕິບັດການຫັນປ່ຽນ loop interchange ໃນ loops. ການແລກປ່ຽນສອງ loops ຊ້ອນກັນ
ສະຫຼັບ loops ພາຍໃນແລະນອກ. ສໍາລັບຕົວຢ່າງ, ໃຫ້ loop ເຊັ່ນ:

DO J = 1, ມ
DO I = 1, N
A(J,I) = A(J, I) * C
ສິ້ນສຸດ
ສິ້ນສຸດ

loop interchange ຈະປ່ຽນ loop ຄືກັບວ່າຜູ້ໃຊ້ໄດ້ຂຽນວ່າ:

DO I = 1, N
DO J = 1, ມ
A(J,I) = A(J, I) * C
ສິ້ນສຸດ
ສິ້ນສຸດ

ເຊິ່ງສາມາດເປັນປະໂຫຍດເມື່ອ "N" ຂະຫນາດໃຫຍ່ກວ່າຖານຄວາມຈໍາ, ເພາະວ່າໃນ Fortran, the
ອົງປະກອບຂອງ array ຖືກເກັບໄວ້ໃນຫນ່ວຍຄວາມຈໍາຕິດຕໍ່ກັນໂດຍຖັນ, ແລະຕົ້ນສະບັບ
loop iterates ໃນໄລຍະແຖວ, ອາດຈະສ້າງໃນແຕ່ລະການເຂົ້າເຖິງ cache miss. ນີ້
ການເພີ່ມປະສິດທິພາບໃຊ້ກັບທຸກພາສາທີ່ສະຫນັບສະຫນູນໂດຍ GCC ແລະບໍ່ຈໍາກັດ
ຟໍຣັນ. ເພື່ອໃຊ້ການປ່ຽນລະຫັດນີ້, GCC ຕ້ອງໄດ້ຮັບການຕັ້ງຄ່າດ້ວຍ --with-ppl
ແລະ --with-cloog ເພື່ອເປີດໃຊ້ໂຄງສ້າງການຫັນປ່ຽນ Graphite loop.

-floop-strip-mine
ປະຕິບັດການຫັນເປັນ loop strip mining ໃນ loops. ການຂຸດຄົ້ນບໍ່ແຮ່ແຍກເປັນ loops ເປັນ
ສອງ loops ຮັງ. ວົງນອກມີຂັ້ນໄດເທົ່າກັບຂະໜາດແຖບ ແລະດ້ານໃນ
loop ມີ strides ຂອງ loop ຕົ້ນສະບັບພາຍໃນເສັ້ນດ່າງ. ຄວາມຍາວຂອງແຖບສາມາດປ່ຽນແປງໄດ້
ການນໍາໃຊ້ loop-block-tile-size ພາລາມິເຕີ. ສໍາລັບຕົວຢ່າງ, ໃຫ້ loop ເຊັ່ນ:

DO I = 1, N
A(I) = A(I) + C
ສິ້ນສຸດ

loop strip mining ຈະປ່ຽນ loop ຄືກັບວ່າຜູ້ໃຊ້ໄດ້ຂຽນວ່າ:

DO II = 1, N, 51
DO I = II, min (II + 50, N)
A(I) = A(I) + C
ສິ້ນສຸດ
ສິ້ນສຸດ

ການເພີ່ມປະສິດທິພາບນີ້ໃຊ້ກັບທຸກພາສາທີ່ GCC ສະຫນັບສະຫນູນແລະບໍ່ຈໍາກັດ
ຟໍຣັນ. ເພື່ອໃຊ້ການປ່ຽນລະຫັດນີ້, GCC ຕ້ອງໄດ້ຮັບການຕັ້ງຄ່າດ້ວຍ --with-ppl
ແລະ --with-cloog ເພື່ອເປີດໃຊ້ໂຄງສ້າງການຫັນປ່ຽນ Graphite loop.

-floop-block
ປະຕິບັດການຫັນປ່ຽນ blocking loop ໃນ loops. ສະກັດລະເບີດຝັງດິນແຕ່ລະ loop ໃນ
loop ຮັງເຊັ່ນວ່າຫນ່ວຍຄວາມຈໍາເຂົ້າເຖິງຂອງ loops ອົງປະກອບເຫມາະພາຍໃນ cache. ໄດ້
ຄວາມຍາວຂອງແຖບສາມາດປ່ຽນແປງໄດ້ໂດຍໃຊ້ loop-block-tile-size ພາລາມິເຕີ. ຍົກ​ຕົວ​ຢ່າງ,
ໃຫ້ loop ຄື:

DO I = 1, N
DO J = 1, ມ
A(J,I) = B(I) + C(J)
ສິ້ນສຸດ
ສິ້ນສຸດ

loop blocking ຈະປ່ຽນ loop ຄືກັບວ່າຜູ້ໃຊ້ໄດ້ຂຽນວ່າ:

DO II = 1, N, 51
DO JJ = 1, M, 51
DO I = II, min (II + 50, N)
DO J = JJ, ນາທີ (JJ + 50, M)
A(J,I) = B(I) + C(J)
ສິ້ນສຸດ
ສິ້ນສຸດ
ສິ້ນສຸດ
ສິ້ນສຸດ

ເຊິ່ງສາມາດເປັນປະໂຫຍດເມື່ອ "M" ຂະຫນາດໃຫຍ່ກວ່າຖານຄວາມຈໍາ, ເພາະວ່າ loop ພາຍໃນທີ່ສຸດ
ຈະ iterate ໃນຈໍານວນຂະຫນາດນ້ອຍກວ່າຂອງຂໍ້ມູນທີ່ສາມາດເກັບຮັກສາໄວ້ໃນຖານຄວາມຈໍາ. ນີ້
ການເພີ່ມປະສິດທິພາບໃຊ້ກັບທຸກພາສາທີ່ສະຫນັບສະຫນູນໂດຍ GCC ແລະບໍ່ຈໍາກັດ
ຟໍຣັນ. ເພື່ອໃຊ້ການປ່ຽນລະຫັດນີ້, GCC ຕ້ອງໄດ້ຮັບການຕັ້ງຄ່າດ້ວຍ --with-ppl
ແລະ --with-cloog ເພື່ອເປີດໃຊ້ໂຄງສ້າງການຫັນປ່ຽນ Graphite loop.

-fgraphite-ຕົວຕົນ
ເປີດໃຊ້ການຫັນປ່ຽນຕົວຕົນສໍາລັບ graphite. ສໍາລັບທຸກໆ SCoP ພວກເຮົາສ້າງ
ການສະແດງ polyhedral ແລະປ່ຽນມັນກັບຄືນໄປບ່ອນ gimple. ການນໍາໃຊ້ -fgraphite-ຕົວຕົນ
ພວກເຮົາສາມາດກວດສອບຄ່າໃຊ້ຈ່າຍຫຼືຜົນປະໂຫຍດຂອງ GIMPLE -> GRAPHITE -> ການຫັນເປັນ GIMPLE.
ບາງການເພີ່ມປະສິດທິພາບຫນ້ອຍກໍ່ຖືກປະຕິບັດໂດຍຕົວສ້າງລະຫັດ CLooG ເຊັ່ນ: ດັດສະນີ
ການແຍກແລະການລົບລ້າງລະຫັດຕາຍໃນ loops.

-floop-flatten
ຖອນໂຄງສ້າງຂອງ loop nesting: ປ່ຽນຮັງ loop ເປັນ loop ດຽວ. ນີ້
ການ​ຫັນ​ປ່ຽນ​ສາ​ມາດ​ເປັນ​ປະ​ໂຫຍດ​ເປັນ​ການ​ຫັນ​ປ່ຽນ​ການ​ເຮັດ​ໃຫ້​ເປັນ vectorization ແລະ​
ຂະຫນານ. ຄຸນສົມບັດນີ້ແມ່ນການທົດລອງ. ເພື່ອໃຊ້ການປ່ຽນລະຫັດນີ້, GCC
ຕ້ອງໄດ້ຮັບການ configured ກັບ --with-ppl ແລະ --with-cloog ເພື່ອເປີດໃຊ້ງານ Graphite loop
ໂຄງສ້າງພື້ນຖານການຫັນປ່ຽນ.

-floop-parallelize-ທັງໝົດ
ໃຊ້ການວິເຄາະການອ້າງອີງຂໍ້ມູນ Graphite ເພື່ອກໍານົດ loops ທີ່ສາມາດຂະຫນານໄດ້.
ຂະຫນານທຸກ loops ທີ່ສາມາດວິເຄາະໄດ້ເພື່ອບໍ່ໃຫ້ມີ loop ປະຕິບັດ
ໂດຍບໍ່ມີການກວດເບິ່ງວ່າມັນມີກໍາໄລໃນການຂະຫນານ loops.

-fcheck-data-deps
ປຽບທຽບຜົນໄດ້ຮັບຂອງການວິເຄາະການເພິ່ງພາອາໄສຂໍ້ມູນຈໍານວນຫນຶ່ງ. ທາງເລືອກນີ້ຖືກນໍາໃຊ້ສໍາລັບ
debugging ການວິເຄາະການເພິ່ງພາອາໄສຂໍ້ມູນ.

-ftree-loop-if-convert
ພະຍາຍາມຫັນປ່ຽນການກະໂດດແບບມີເງື່ອນໄຂໃນວົງແຫວນພາຍໃນທີ່ສຸດໄປສູ່ງ່າ-ໜ້ອຍ
ທຽບເທົ່າ. ຈຸດປະສົງແມ່ນເພື່ອເອົາການຄວບຄຸມການໄຫຼອອກຈາກ loops ພາຍໃນທີ່ສຸດຕາມລໍາດັບ
ເພື່ອປັບປຸງຄວາມສາມາດຂອງ vectorization pass ເພື່ອຈັດການ loops ເຫຼົ່ານີ້. ນີ້​ແມ່ນ
ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຖ້າ vectorization ຖືກເປີດໃຊ້.

-ftree-loop-if-convert-stores
ພະຍາຍາມເພີ່ມການກະໂດດຕາມເງື່ອນໄຂທີ່ບັນຈຸບັນທຶກຄວາມຊົງຈໍາ. ນີ້
ການຫັນປ່ຽນສາມາດບໍ່ປອດໄພສໍາລັບໂຄງການຫຼາຍກະທູ້ຍ້ອນວ່າມັນຫັນປ່ຽນເງື່ອນໄຂ
ຄວາມຊົງຈໍາ writes into unconditional memory writes. ຍົກ​ຕົວ​ຢ່າງ,

ສໍາລັບ (i = 0; i < N; i++)
ຖ້າ (cond)
A[i] = expr;

ຈະຖືກປ່ຽນເປັນ

ສໍາລັບ (i = 0; i < N; i++)
A[i] = cond ? expr : A[i];

ທ່າແຮງການຜະລິດຂໍ້ມູນເຊື້ອຊາດ.

-ftree-loop-ການແຜ່ກະຈາຍ
ປະຕິບັດການແຈກຢາຍ loop. ທຸງນີ້ສາມາດປັບປຸງປະສິດທິພາບ cache ໃນອົງປະກອບຂອງ loop ໃຫຍ່
ແລະອະນຸຍາດໃຫ້ການເພີ່ມປະສິດທິພາບ loop ເພີ່ມເຕີມ, ເຊັ່ນ: ຂະຫນານຫຼື vectorization, ໃຊ້ເວລາ
ສະຖານທີ່. ສໍາລັບຕົວຢ່າງ, loop ໄດ້

DO I = 1, N
A(I) = B(I) + C
D(I) = E(I) * F
ສິ້ນສຸດ

ຖືກປ່ຽນເປັນ

DO I = 1, N
A(I) = B(I) + C
ສິ້ນສຸດ
DO I = 1, N
D(I) = E(I) * F
ສິ້ນສຸດ

-ftree-loop-distribute-patterns
ປະຕິບັດການແຈກຢາຍແບບ loop ທີ່ສາມາດສ້າງລະຫັດດ້ວຍການໂທຫາ a
ຫໍສະໝຸດ. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O3.

ບັດນີ້ແຈກຢາຍການເລີ່ມຕົ້ນຂອງ loops ແລະສ້າງການໂທຫາ memset zero.
ສໍາລັບຕົວຢ່າງ, loop ໄດ້

DO I = 1, N
A(I) = 0
B(I) = A(I) + I
ສິ້ນສຸດ

ຖືກປ່ຽນເປັນ

DO I = 1, N
A(I) = 0
ສິ້ນສຸດ
DO I = 1, N
B(I) = A(I) + I
ສິ້ນສຸດ

ແລະ loop ການເລີ່ມຕົ້ນແມ່ນປ່ຽນເປັນການໂທຫາ memset zero.

-ftree-loop-im
ປະຕິບັດການເຄື່ອນໄຫວແບບບໍ່ປ່ຽນແປງແບບ loop ຢູ່ເທິງຕົ້ນໄມ້. ຜ່ານນີ້ຍ້າຍພຽງແຕ່ invarians ທີ່ຈະເປັນ
ຍາກທີ່ຈະຈັດການຢູ່ໃນລະດັບ RTL (ການໂທຟັງຊັນ, ການດໍາເນີນງານທີ່ຂະຫຍາຍໄປສູ່ nontrivial
ລໍາດັບຂອງ insns). ກັບ -funswitch-loops ມັນຍັງຍ້າຍ operands ຂອງເງື່ອນໄຂທີ່
ແມ່ນ invariant ອອກຈາກ loop, ດັ່ງນັ້ນພວກເຮົາສາມາດນໍາໃຊ້ພຽງແຕ່ການວິເຄາະ invariantness trivial
ໃນ loop unswitching. ປີ້ຍັງປະກອບມີການເຄື່ອນໄຫວຂອງຮ້ານ.

-ftree-loop-ivcanon
ສ້າງຕົວນັບ canonical ສໍາລັບຈໍານວນຂອງການຊໍ້າຄືນໃນ loops ສໍາລັບການກໍານົດ
ຈໍານວນການຊໍ້າຄືນຕ້ອງການການວິເຄາະທີ່ສັບສົນ. ການເພີ່ມປະສິດທິພາບຕໍ່ມາຫຼັງຈາກນັ້ນອາດຈະ
ກໍານົດຕົວເລກໄດ້ຢ່າງງ່າຍດາຍ. ເປັນປະໂຫຍດໂດຍສະເພາະໃນການເຊື່ອມຕໍ່ກັບ unrolling.

-fivopts
ປະຕິບັດການເພີ່ມປະສິດທິພາບຕົວແປ induction (ການຫຼຸດຜ່ອນຄວາມເຂັ້ມແຂງ, ຕົວແປ induction
merging and induction variable elimination) ກ່ຽວກັບຕົ້ນໄມ້.

-ftree-parallelize-loops=ນ
Parallelize loops, ie, ແບ່ງພື້ນທີ່ iteration ຂອງເຂົາເຈົ້າເພື່ອດໍາເນີນການໃນ n threads. ນີ້​ແມ່ນ
ເປັນໄປໄດ້ພຽງແຕ່ສໍາລັບ loops ທີ່ມີ iterations ເປັນເອກະລາດແລະສາມາດ arbitrarily
ຈັດຮຽງໃໝ່. ການເພີ່ມປະສິດທິພາບແມ່ນມີພຽງແຕ່ກໍາໄລໃນເຄື່ອງຈັກ multiprocessor, ສໍາລັບ loops
ທີ່ມີ CPU ຫຼາຍ, ແທນທີ່ຈະຖືກຈໍາກັດ e.g. ໂດຍແບນວິດຫນ່ວຍຄວາມຈໍາ. ທາງເລືອກນີ້
implies - ກະທູ້, ແລະດັ່ງນັ້ນຈຶ່ງໄດ້ຮັບການສະຫນັບສະຫນູນພຽງແຕ່ກ່ຽວກັບເປົ້າຫມາຍທີ່ມີການສະຫນັບສະຫນູນ
- ກະທູ້.

-ftree-pta
ປະຕິບັດຫນ້າທີ່ - ຈຸດທ້ອງຖິ່ນ - ການວິເຄາະກ່ຽວກັບຕົ້ນໄມ້. ທຸງນີ້ຖືກເປີດໃຊ້ເປັນຄ່າເລີ່ມຕົ້ນ
at -O ແລະສູງກວ່າ.

-ftree-sra
ປະຕິບັດການທົດແທນ scalar ຂອງການລວບລວມ. ບັດນີ້ແທນການອ້າງອີງໂຄງສ້າງ
ດ້ວຍເກັດເກັດເພື່ອປ້ອງກັນໂຄງສ້າງຂອງຄວາມຊົງຈໍາໄວເກີນໄປ. ທຸງນີ້ແມ່ນ
ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າ.

-free-copyrename
ດໍາເນີນການສໍາເນົາການປ່ຽນຊື່ໃນຕົ້ນໄມ້. pass ນີ້ພະຍາຍາມປ່ຽນຊື່ compiler temporaries ເປັນ
ຕົວແປອື່ນຢູ່ບ່ອນສຳເນົາ, ໂດຍປົກກະຕິຈະສົ່ງຜົນໃຫ້ມີຊື່ຕົວແປທີ່ຫຼາຍກວ່ານັ້ນ
ຄ້າຍຄືກັນກັບຕົວແປຕົ້ນສະບັບ. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະ
ສູງຂຶ້ນ.

-ftree-coalesce-inlined-vars
ບອກຊື່ copyrename pass (ເບິ່ງ -free-copyrename) ເພື່ອ​ພະ​ຍາ​ຍາມ​ທີ່​ຈະ​ລວມ​ຜູ້​ໃຊ້​ຂະ​ຫນາດ​ນ້ອຍ -
ກໍານົດຕົວແປຄືກັນ, ແຕ່ວ່າພຽງແຕ່ຖ້າພວກເຂົາຖືກ inlined ຈາກຫນ້າທີ່ອື່ນໆ. ມັນ​ເປັນ​
ຮູບແບບຈໍາກັດຫຼາຍ -ftree-coalesce-vars. ອັນນີ້ອາດຈະເປັນອັນຕະລາຍຕໍ່ຂໍ້ມູນດີບັກຂອງສິ່ງດັ່ງກ່າວ
ຕົວແປ inlined, ແຕ່ມັນຈະຮັກສາຕົວແປຂອງ inlined-into function ນອກຈາກ.
ເຊິ່ງກັນແລະກັນ, ເຊັ່ນວ່າພວກມັນມີແນວໂນ້ມທີ່ຈະມີຄ່າທີ່ຄາດໄວ້ຢູ່ໃນ a
ເຊດຊັນການດີບັກ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນໃນ GCC ລຸ້ນເກົ່າກວ່າ 4.7.

-ftree-coalesce-vars
ບອກຊື່ copyrename pass (ເບິ່ງ -free-copyrename) ເພື່ອ​ພະ​ຍາ​ຍາມ​ທີ່​ຈະ​ລວມ​ຜູ້​ໃຊ້​ຂະ​ຫນາດ​ນ້ອຍ -
ກໍານົດຕົວແປເຊັ່ນດຽວກັນ, ແທນທີ່ຈະພຽງແຕ່ compiler temporaries. ນີ້ອາດຈະຈໍາກັດຢ່າງຮ້າຍແຮງ
ຄວາມ​ສາ​ມາດ​ແກ້​ໄຂ​ບັນ​ຫາ​ໂຄງ​ການ​ທີ່​ເຫມາະ​ສົມ​ທີ່​ສັງ​ລວມ​ກັບ​ -fno-var-tracking-assignments.
ໃນຮູບແບບທີ່ຖືກປະຕິເສດ, ທຸງນີ້ປ້ອງກັນບໍ່ໃຫ້ SSA coalescing ຂອງຕົວແປຂອງຜູ້ໃຊ້, ລວມທັງ
ຢູ່ໃນແຖວ. ຕົວເລືອກນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

- ຫ້າ​ປີ​
ດໍາເນີນການທົດແທນການສະແດງອອກຊົ່ວຄາວໃນໄລຍະ SSA->ໄລຍະປົກກະຕິ. ໂສດ
use/single def temporaries ແມ່ນຖືກແທນທີ່ຢູ່ໃນສະຖານທີ່ໃຊ້ຂອງພວກເຂົາດ້ວຍການກໍານົດຂອງພວກເຂົາ
ການສະແດງອອກ. ນີ້ສົ່ງຜົນໃຫ້ລະຫັດທີ່ບໍ່ແມ່ນ GIMPLE, ແຕ່ໃຫ້ຕົວຂະຫຍາຍຫຼາຍ
ຕົ້ນໄມ້ທີ່ຊັບຊ້ອນເພື່ອເຮັດວຽກເຮັດໃຫ້ການຜະລິດ RTL ດີຂຶ້ນ. ອັນນີ້ຖືກເປີດໃຊ້ໂດຍ
ຄ່າເລີ່ມຕົ້ນຢູ່ -O ແລະສູງກວ່າ.

-ftree-vectorize
ປະຕິບັດ vectorization loop ກ່ຽວກັບຕົ້ນໄມ້. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O3.

-ftree-slp-vectorize
ປະຕິບັດການສ້າງ vectorization ພື້ນຖານກ່ຽວກັບຕົ້ນໄມ້. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O3 ແລະ
ໃນເວລາທີ່ -ftree-vectorize ເປີດໃຊ້ງານ.

-ftree-vect-loop-version
ດໍາເນີນການສະບັບ loop ໃນເວລາທີ່ເຮັດ loop vectorization ກ່ຽວກັບຕົ້ນໄມ້. ເມື່ອ loop ປາກົດ
ເປັນ vectorizable ຍົກເວັ້ນການຈັດລຽງຂໍ້ມູນຫຼືການເພິ່ງພາອາໄສຂໍ້ມູນບໍ່ສາມາດຖືກກໍານົດ
ໃນເວລາລວບລວມ, ຫຼັງຈາກນັ້ນສະບັບ vectorized ແລະທີ່ບໍ່ແມ່ນ vectorized ຂອງ loop ແມ່ນຖືກສ້າງຂຶ້ນ
ຄຽງຄູ່ກັບການກວດສອບເວລາແລ່ນສໍາລັບການສອດຄ່ອງຫຼືການເພິ່ງພາອາໄສເພື່ອຄວບຄຸມວ່າຮຸ່ນໃດ
ປະ​ຕິ​ບັດ​. ຕົວເລືອກນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຍົກເວັ້ນໃນລະດັບ -ອສ ບ່ອນທີ່ມັນຖືກປິດໃຊ້ງານ.

-fvect-cost-model
ເປີດໃຊ້ແບບຈໍາລອງຄ່າໃຊ້ຈ່າຍສໍາລັບການ vectorization.

-ftree-vrp
ປະຕິບັດການຂະຫຍາຍພັນຂອງມູນຄ່າຕາມຕົ້ນໄມ້. ນີ້ແມ່ນຄ້າຍຄືກັນກັບການຂະຫຍາຍພັນຢ່າງຕໍ່ເນື່ອງ
pass, ແຕ່ແທນທີ່ຈະເປັນຄ່າ, ໄລຍະຂອງຄ່າຈະຖືກຂະຫຍາຍພັນ. ນີ້ອະນຸຍາດໃຫ້
optimizers ເພື່ອເອົາການກວດສອບຂອບເຂດທີ່ບໍ່ຈໍາເປັນເຊັ່ນ: ການກວດສອບຂອບເຂດ array ແລະຕົວຊີ້ null
ກວດກາ. ອັນນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O2 ແລະສູງກວ່າ. ການລົບລ້າງການກວດສອບຕົວຊີ້ null
ແມ່ນເຮັດໄດ້ພຽງແຕ່ຖ້າຫາກວ່າ -fdelete-null-pointer-checks ເປີດໃຊ້ງານ.

-ftracer
ດໍາເນີນການຊໍ້າຊ້ອນຫາງເພື່ອຂະຫຍາຍຂະຫນາດ superblock. ການຫັນປ່ຽນນີ້ເຮັດໃຫ້ງ່າຍດາຍ
ການຄວບຄຸມການໄຫຼເຂົ້າຂອງຫນ້າທີ່ອະນຸຍາດໃຫ້ການເພີ່ມປະສິດທິພາບອື່ນໆເຮັດວຽກທີ່ດີກວ່າ.

-funroll-loops
ຖອດ loops ທີ່ມີຈໍານວນການຊໍ້າຄືນສາມາດຖືກກໍານົດໃນເວລາລວບລວມຫຼືຕາມ
ເຂົ້າໄປໃນ loop ໄດ້. -funroll-loops implies -frerun-cse-after-loop. ທາງເລືອກນີ້ເຮັດໃຫ້
ລະຫັດໃຫຍ່ກວ່າ, ແລະອາດຈະ ຫຼືອາດຈະບໍ່ເຮັດໃຫ້ມັນແລ່ນໄວຂຶ້ນ.

-funroll-all-loops
ຖອດ loops ທັງຫມົດ, ເຖິງແມ່ນວ່າຈໍານວນການຊໍ້າຄືນຂອງເຂົາເຈົ້າບໍ່ແນ່ນອນໃນເວລາທີ່ loop ແມ່ນ
ເຂົ້າ. ນີ້ປົກກະຕິແລ້ວເຮັດໃຫ້ໂຄງການເຮັດວຽກຊ້າຫຼາຍ. -funroll-all-loops ຫມາຍເຖິງ
ທາງ​ເລືອກ​ດຽວ​ກັນ​ກັບ​ -funroll-loops,

-fsplit-ivs-in-unroller
ເປີດໃຊ້ການສະແດງອອກຂອງຄ່າຂອງຕົວແປ induction ໃນການຊໍ້າຄືນຕໍ່ມາຂອງ
unrolled loop ໂດຍໃຊ້ຄ່າໃນ iteration ທໍາອິດ. ນີ້ທໍາລາຍການເພິ່ງພາອາໄສຍາວ
ລະບົບຕ່ອງໂສ້, ດັ່ງນັ້ນການປັບປຸງປະສິດທິພາບຂອງການກໍານົດເວລາຜ່ານ.

ການປະສົມປະສານຂອງ -fweb ແລະ CSE ມັກຈະພຽງພໍເພື່ອໃຫ້ໄດ້ຜົນດຽວກັນ. ແນວໃດກໍ່ຕາມ
ໃນກໍລະນີທີ່ຮ່າງກາຍຂອງ loop ແມ່ນສັບສົນຫຼາຍກ່ວາບລັອກພື້ນຖານດຽວ, ນີ້ບໍ່ແມ່ນ
ເຊື່ອຖືໄດ້. ມັນຍັງບໍ່ເຮັດວຽກຢູ່ໃນບາງສະຖາປັດຕະຍະກໍາອັນເນື່ອງມາຈາກ
ຂໍ້ຈໍາກັດໃນ CSE pass.

ການເພີ່ມປະສິດທິພາບນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-fvariable-expansion-in-unroller
ດ້ວຍຕົວເລືອກນີ້, ຄອມພີວເຕີຈະສ້າງສໍາເນົາຫຼາຍອັນຂອງຕົວແປທ້ອງຖິ່ນບາງຢ່າງ
ເມື່ອ unrolling loop ເຊິ່ງສາມາດສົ່ງຜົນໃຫ້ລະຫັດດີກວ່າ.

-fpartial-inlining
ພາກສ່ວນໃນແຖວຂອງຫນ້າທີ່. ທາງເລືອກນີ້ມີຜົນກະທົບພຽງແຕ່ໃນເວລາທີ່ inlining ຕົວຂອງມັນເອງ
ເປີດໂດຍ -finline-functions or -finline-small-functions ຕົວເລືອກ

ເປີດໃຊ້ຢູ່ໃນລະດັບ -O2.

-fpredictive-commoning
ປະຕິບັດການເພີ່ມປະສິດທິພາບທົ່ວໄປທີ່ຄາດຄະເນ, ie, ການໃຊ້ຄອມພິວເຕີ້ຄືນໃຫມ່ (ໂດຍສະເພາະ
ການໂຫຼດແລະເກັບຮັກສາຄວາມຊົງຈໍາ) ປະຕິບັດໃນຮອບວຽນທີ່ຜ່ານມາ.

ຕົວເລືອກນີ້ຖືກເປີດໃຊ້ໃນລະດັບ -O3.

-fprefetch-loop-arrays
ຖ້າ​ຫາກ​ວ່າ​ເຄື່ອງ​ເປົ້າ​ຫມາຍ​ສະ​ຫນັບ​ສະ​ຫນູນ​, ສ້າງ​ຄໍາ​ແນະ​ນໍາ​ເພື່ອ prefetch ຄວາມ​ຊົງ​ຈໍາ​ທີ່​ຈະ​
ປັບປຸງປະສິດທິພາບຂອງ loops ທີ່ເຂົ້າເຖິງ array ຂະຫນາດໃຫຍ່.

ທາງເລືອກນີ້ອາດຈະສ້າງລະຫັດທີ່ດີກວ່າຫຼືຮ້າຍແຮງກວ່າເກົ່າ; ຜົນໄດ້ຮັບແມ່ນຂຶ້ນກັບຫຼາຍ
ໂຄງສ້າງຂອງ loops ພາຍໃນລະຫັດແຫຼ່ງ.

ຄົນພິການໃນລະດັບ -ອສ.

-fno-peephole
-fno-peephole2
ປິດໃຊ້ງານການເພີ່ມປະສິດທິພາບ pephole ສະເພາະເຄື່ອງຈັກ. ຄວາມແຕກຕ່າງລະຫວ່າງ
-fno-peephole ແລະ -fno-peephole2 ແມ່ນຢູ່ໃນວິທີການທີ່ພວກມັນຖືກປະຕິບັດຢູ່ໃນ compiler; ບາງ
ເປົ້າໝາຍໃຊ້ອັນໜຶ່ງ, ບາງຄົນໃຊ້ອີກອັນໜຶ່ງ, ບາງອັນໃຊ້ທັງສອງຢ່າງ.

-fpeephole ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ. -fpeephole2 ເປີດໃຊ້ໃນລະດັບ -O2, -O3, -ອສ.

-fno-guess-branch-probability
ຢ່າຄາດເດົາຄວາມເປັນໄປໄດ້ຂອງສາຂາໂດຍໃຊ້ heuristics.

GCC ຈະໃຊ້ heuristics ເພື່ອຄາດເດົາຄວາມເປັນໄປໄດ້ຂອງສາຂາຖ້າພວກເຂົາບໍ່ໄດ້ສະຫນອງໂດຍ
ຄວາມຄິດເຫັນກ່ຽວກັບໂປຣໄຟລ໌ (-fprofile-arcs). heuristics ເຫຼົ່ານີ້ແມ່ນອີງໃສ່ການໄຫຼຂອງການຄວບຄຸມ
ເສັ້ນສະແດງ. ຖ້າບາງຄວາມເປັນໄປໄດ້ສາຂາຖືກລະບຸໂດຍ __builtin_ຄາດຫວັງ, ຫຼັງຈາກນັ້ນ
heuristics ຈະຖືກນໍາໃຊ້ເພື່ອຄາດເດົາຄວາມເປັນໄປໄດ້ຂອງສາຂາສໍາລັບສ່ວນທີ່ເຫຼືອຂອງການໄຫຼຂອງການຄວບຄຸມ
ເສັ້ນສະແດງ, ການກິນ __builtin_ຄາດຫວັງ ຂໍ້ມູນເຂົ້າໄປໃນບັນຊີ. ການ​ພົວ​ພັນ​ລະ​ຫວ່າງ​
heuristics ແລະ __builtin_ຄາດຫວັງ ສາມາດສັບສົນ, ແລະໃນບາງກໍລະນີ, ມັນອາດຈະເປັນປະໂຫຍດ
ປິດການທໍາງານ heuristics ດັ່ງນັ້ນຜົນກະທົບຂອງ __builtin_ຄາດຫວັງ ງ່າຍກວ່າ
ເຂົ້າໃຈ

ຄ່າເລີ່ມຕົ້ນແມ່ນ -fguess-ສາຂາ-ຄວາມເປັນໄປໄດ້ ໃນ​ລະ​ດັບ​ -O, -O2, -O3, -ອສ.

-freorder-ຕັນ
Reorder blocks ພື້ນຖານໃນຟັງຊັນລວບລວມເພື່ອຫຼຸດຜ່ອນຈໍານວນຂອງການເອົາ
ສາຂາ ແລະປັບປຸງລະຫັດທ້ອງຖິ່ນ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3.

-freorder-blocks-and-partition
ນອກເຫນືອໄປຈາກ reordering ຕັນພື້ນຖານໃນຫນ້າທີ່ລວບລວມ, ເພື່ອຫຼຸດຜ່ອນ
ຈໍາ​ນວນ​ຂອງ​ສາ​ຂາ​ປະ​ຕິ​ບັດ​, ການ​ແບ່ງ​ປັນ​ທ່ອນ​ໄມ້​ພື້ນ​ຖານ​ຮ້ອນ​ແລະ​ເຢັນ​ເປັນ​ພາກ​ສ່ວນ​ແຍກ​ຕ່າງ​ຫາກ​
ຂອງ​ການ​ປະ​ກອບ​ແລະ​ໄຟລ​໌ .o​, ເພື່ອ​ປັບ​ປຸງ​ຫນ້າ​ທີ່​ແລະ​ການ​ປະ​ຕິ​ບັດ​ທ້ອງ​ຖິ່ນ​ຖານ​ຄວາມ​ຈໍາ​.

ການເພີ່ມປະສິດທິພາບນີ້ຈະຖືກປິດໂດຍອັດຕະໂນມັດໃນການສະແດງການຈັດການຂໍ້ຍົກເວັ້ນ,
ສໍາ​ລັບ​ພາກ​ສ່ວນ linkonce​, ສໍາ​ລັບ​ການ​ທໍາ​ງານ​ທີ່​ມີ​ຄຸນ​ລັກ​ສະ​ນະ​ພາກ​ທີ່​ກໍາ​ນົດ​ໂດຍ​ຜູ້​ໃຊ້​ແລະ​ກ່ຽວ​ກັບ​ການ​ໃດໆ​
ສະຖາປັດຕະຍະກໍາທີ່ບໍ່ສະຫນັບສະຫນູນພາກສ່ວນທີ່ມີຊື່.

-freorder - ຫນ້າ​ທີ່​
ຈັດລໍາດັບຟັງຊັນໃນໄຟລ໌ວັດຖຸເພື່ອປັບປຸງລະຫັດທ້ອງຖິ່ນ. ນີ້​ແມ່ນ
ປະຕິບັດໂດຍການໃຊ້ສ່ວນຍ່ອຍພິເສດ ".text.hot" ສໍາລັບການປະຕິບັດເລື້ອຍໆທີ່ສຸດ
ຟັງຊັນ ແລະ ".text.unlikely" ສໍາລັບຟັງຊັນທີ່ບໍ່ເປັນໄປໄດ້. Reordering ແມ່ນເຮັດໄດ້ໂດຍ
ຕົວເຊື່ອມຕໍ່ດັ່ງນັ້ນຮູບແບບໄຟລ໌ວັດຖຸຕ້ອງສະຫນັບສະຫນູນພາກສ່ວນທີ່ມີຊື່ແລະຕົວເຊື່ອມຕໍ່ຕ້ອງວາງ
ເຂົາເຈົ້າໃນທາງທີ່ສົມເຫດສົມຜົນ.

ນອກຈາກນັ້ນ, ຄໍາຕິຊົມໂປຣໄຟລ໌ຕ້ອງມີຢູ່ໃນເພື່ອເຮັດໃຫ້ທາງເລືອກນີ້ມີປະສິດທິພາບ. ເບິ່ງ
-fprofile-arcs ສໍາລັບລາຍລະອຽດ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3, -ອສ.

-fstrict-aliasing
ອະນຸຍາດໃຫ້ compiler ສົມມຸດກົດລະບຽບການນາມແຝງທີ່ເຂັ້ມງວດທີ່ສຸດທີ່ໃຊ້ກັບພາສາ
ຖືກລວບລວມ. ສໍາລັບ C (ແລະ C ++), ນີ້ຈະເປີດໃຊ້ການເພີ່ມປະສິດທິພາບໂດຍອີງໃສ່ປະເພດຂອງ
ການສະແດງອອກ. ໂດຍສະເພາະ, ວັດຖຸຂອງປະເພດຫນຶ່ງແມ່ນສົມມຸດວ່າບໍ່ເຄີຍອາໄສຢູ່
ທີ່ຢູ່ດຽວກັນກັບວັດຖຸຂອງປະເພດທີ່ແຕກຕ່າງກັນ, ເວັ້ນເສຍແຕ່ວ່າປະເພດເກືອບຄືກັນ.
ຕົວຢ່າງ, "unsigned int" ສາມາດ alias ເປັນ "int", ແຕ່ບໍ່ແມ່ນ "void*" ຫຼື "double". ກ
ປະເພດຕົວອັກສອນອາດນາມແຝງປະເພດອື່ນ.

ເອົາໃຈໃສ່ເປັນພິເສດຕໍ່ລະຫັດແບບນີ້:

ສະຫະພັນ a_union {
int i;
double d;
};

int f() {
ສະຫະພັນ a_union t;
td = 3.0;
ti ກັບຄືນ;
}

ການປະຕິບັດການອ່ານຈາກສະມາຊິກສະຫະພັນທີ່ແຕກຕ່າງກັນກ່ວາຫນຶ່ງໃນບໍ່ດົນມານີ້
ລາຍ​ລັກ​ອັກ​ສອນ​ເພື່ອ (ເອີ້ນ​ວ່າ "ປະ​ເພດ​-punning​"​) ແມ່ນ​ທົ່ວ​ໄປ​. ເຖິງແມ່ນວ່າມີ -fstrict-aliasing, ປະ​ເພດ-
punning ແມ່ນອະນຸຍາດໃຫ້, ສະຫນອງຄວາມຊົງຈໍາແມ່ນເຂົ້າເຖິງໂດຍຜ່ານປະເພດສະຫະພັນ. ດັ່ງນັ້ນ, ໄດ້
ລະຫັດຂ້າງເທິງຈະເຮັດວຽກຕາມທີ່ຄາດໄວ້. ຢ່າງໃດກໍຕາມ, ລະຫັດນີ້ອາດຈະບໍ່:

int f() {
ສະຫະພັນ a_union t;
int* ip;
td = 3.0;
ip = &t.i;
ກັບຄືນ *ip;
}

ເຊັ່ນດຽວກັນ, ການເຂົ້າເຖິງໂດຍການເອົາທີ່ຢູ່, ການໂຍນຕົວຊີ້ຜົນໄດ້ຮັບແລະ
ການອ້າງອິງຜົນໄດ້ຮັບມີພຶດຕິກໍາທີ່ບໍ່ໄດ້ກໍານົດ, ເຖິງແມ່ນວ່ານັກສະແດງຈະໃຊ້ປະເພດຂອງສະຫະພັນ,
ຕົວຢ່າງ:

int f() {
double d = 3.0;
ກັບຄືນ ((ສະຫະພັນ a_union *) &d)->i;
}

ໄດ້ -fstrict-aliasing ທາງ​ເລືອກ​ແມ່ນ​ເປີດ​ໃຫ້​ໃຊ້​ງານ​ໃນ​ລະ​ດັບ​ -O2, -O3, -ອສ.

-fstrict-ລົ້ນ
ອະນຸຍາດໃຫ້ compiler ຖືກົດລະບຽບການ overflow ທີ່ເຂັ້ມງວດ, ຂຶ້ນກັບພາສາ
ຖືກລວບລວມ. ສໍາລັບ C (ແລະ C ++) ນີ້ຫມາຍຄວາມວ່າ overflow ໃນເວລາທີ່ເຮັດເລກເລກກັບ
ຕົວເລກທີ່ລົງນາມແມ່ນບໍ່ໄດ້ກໍານົດ, ຊຶ່ງຫມາຍຄວາມວ່າຜູ້ລວບລວມອາດຈະສົມມຸດວ່າມັນຈະບໍ່
ເກີດຂຶ້ນ. ນີ້ອະນຸຍາດໃຫ້ມີການເພີ່ມປະສິດທິພາບຕ່າງໆ. ຕົວຢ່າງ, compiler ຈະສົມມຸດ
ວ່າການສະແດງອອກເຊັ່ນ "i + 10 > i" ຈະເປັນຄວາມຈິງສະເໝີສໍາລັບການເຊັນ "i". ນີ້
ສົມມຸດຕິຖານແມ່ນຖືກຕ້ອງພຽງແຕ່ຖ້າການລົງນາມ overflow ແມ່ນບໍ່ໄດ້ກໍານົດ, ເນື່ອງຈາກວ່າການສະແດງອອກແມ່ນບໍ່ຖືກຕ້ອງ
ຖ້າ "i + 10" overflows ເມື່ອໃຊ້ twos complement arithmetic. ເມື່ອຕົວເລືອກນີ້ຢູ່ໃນ
ມີຜົນກະທົບໃດໆຕໍ່ຄວາມພະຍາຍາມເພື່ອກໍານົດວ່າການດໍາເນີນການກ່ຽວກັບຕົວເລກທີ່ລົງນາມຈະລົ້ນ
ຕ້ອງໄດ້ຮັບການຂຽນຢ່າງລະມັດລະວັງເພື່ອບໍ່ໃຫ້ມີສ່ວນເກີນ.

ທາງ​ເລືອກ​ນີ້​ຍັງ​ອະ​ນຸ​ຍາດ​ໃຫ້​ຜູ້​ສັງ​ລວມ​ສົມ​ມຸດ​ຄວາມ​ຫມາຍ​ຕົວ​ຊີ້​ທີ່​ເຂັ້ມ​ງວດ​: ໃຫ້ a
ຕົວຊີ້ໄປຫາວັດຖຸ, ຖ້າການເພີ່ມຄ່າຊົດເຊີຍໃສ່ຕົວຊີ້ນັ້ນຈະບໍ່ສ້າງຕົວຊີ້
ກັບວັດຖຸດຽວກັນ, ການເພີ່ມເຕີມແມ່ນບໍ່ໄດ້ກໍານົດ. ນີ້ອະນຸຍາດໃຫ້ compiler ສະຫຼຸບ
ວ່າ "p + u > p" ເປັນຄວາມຈິງສະເໝີສຳລັບຕົວຊີ້ "p" ແລະຈຳນວນເຕັມທີ່ບໍ່ໄດ້ເຊັນ "u". ນີ້
ການສົມມຸດຕິຖານແມ່ນຖືກຕ້ອງເທົ່ານັ້ນເພາະວ່າການຫໍ່ຕົວຊີ້ບໍ່ໄດ້ຖືກ ກຳ ນົດ, ດັ່ງທີ່ສະແດງອອກ
false ຖ້າ "p + u" overflows ໂດຍໃຊ້ twos complement arithmetic.

ເບິ່ງອີກ -fwrapv ທາງເລືອກ. ການນໍາໃຊ້ -fwrapv ຫມາຍຄວາມວ່າ integer signed overflow ແມ່ນ
ກໍານົດຢ່າງເຕັມສ່ວນ: ມັນຫໍ່. ເມື່ອ​ໃດ​ -fwrapv ຖືກນໍາໃຊ້, ບໍ່ມີຄວາມແຕກຕ່າງລະຫວ່າງ
-fstrict-ລົ້ນ ແລະ -fno-strict-overflow ສໍາລັບຈໍານວນເຕັມ. ກັບ -fwrapv ບາງ​ປະ​ເພດ​
ອະນຸຍາດຂອງ overflow. ຕົວຢ່າງ, ຖ້າ compiler ໄດ້ຮັບ overflow ໃນເວລາທີ່ເຮັດ
ເລກເລກໃນຄ່າຄົງທີ່, ຄ່າ overflowed ຍັງສາມາດຖືກນໍາໃຊ້ກັບ -fwrapv, ແຕ່ບໍ່ແມ່ນ
ຖ້າບໍ່ດັ່ງນັ້ນ.

ໄດ້ -fstrict-ລົ້ນ ທາງ​ເລືອກ​ແມ່ນ​ເປີດ​ໃຫ້​ໃຊ້​ງານ​ໃນ​ລະ​ດັບ​ -O2, -O3, -ອສ.

-falign-functions
-falign-functions=n
ຈັດລຽງການເລີ່ມຕົ້ນຂອງຟັງຊັນຕໍ່ກັບພະລັງງານຕໍ່ໄປຂອງສອງອັນໃຫຍ່ກວ່າ n, ຂ້າມເຖິງ n
ໄບຕ໌. ຕົວ​ຢ່າງ, -falign-functions=32 ຈັດຮຽງຟັງຊັນໄປຫາ 32-byte ຖັດໄປ
ຊາຍແດນ, ແຕ່ -falign-functions=24 ຈະສອດຄ່ອງກັບຂອບເຂດ 32-byte ຕໍ່ໄປພຽງແຕ່ຖ້າ
ນີ້ສາມາດເຮັດໄດ້ໂດຍການຂ້າມ 23 bytes ຫຼືຫນ້ອຍກວ່າ.

-fno-align-functions ແລະ -falign-functions=1 ແມ່ນທຽບເທົ່າແລະຫມາຍຄວາມວ່າຫນ້າທີ່
ຈະບໍ່ສອດຄ່ອງ.

ຜູ້ປະກອບບາງສ່ວນພຽງແຕ່ສະຫນັບສະຫນູນທຸງນີ້ເມື່ອ n ເປັນພະລັງງານຂອງສອງ; ໃນກໍລະນີດັ່ງກ່າວ, ມັນແມ່ນ
ມົນຂຶ້ນ.

If n ບໍ່ໄດ້ລະບຸ ຫຼືເປັນສູນ, ໃຫ້ໃຊ້ຄ່າເລີ່ມຕົ້ນທີ່ຂຶ້ນກັບເຄື່ອງຈັກ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3.

-falign-ປ້າຍ
-falign-labels=n
ຈັດວາງເປົ້າໝາຍສາຂາທັງໝົດໃຫ້ເປັນເຂດແດນທີ່ມີອຳນາດຂອງສອງ, ຂ້າມໄປເຖິງ n bytes ຄື
-falign-functions. ຕົວເລືອກນີ້ສາມາດເຮັດໃຫ້ລະຫັດຊ້າລົງໄດ້ຢ່າງງ່າຍດາຍ, ເພາະວ່າມັນຕ້ອງໃສ່
ການດໍາເນີນງານ dummy ສໍາລັບໃນເວລາທີ່ເປົ້າຫມາຍສາຂາແມ່ນບັນລຸໄດ້ໃນການໄຫຼປົກກະຕິຂອງລະຫັດ.

-fno-align-labels ແລະ -falign-labels=1 ແມ່ນທຽບເທົ່າແລະຫມາຍຄວາມວ່າປ້າຍຊື່ຈະບໍ່ເປັນ
ສອດຄ່ອງ.

If -falign-loops or -falign-jumps ແມ່ນໃຊ້ໄດ້ ແລະຫຼາຍກວ່າຄ່ານີ້, ຈາກນັ້ນ
ຄ່າຂອງພວກມັນຖືກໃຊ້ແທນ.

If n ບໍ່ໄດ້ລະບຸ ຫຼືເປັນສູນ, ໃຫ້ໃຊ້ຄ່າເລີ່ມຕົ້ນທີ່ຂຶ້ນກັບເຄື່ອງຈັກ ເຊິ່ງເປັນໄປໄດ້ຫຼາຍ
ຈະ 1, ຊຶ່ງຫມາຍຄວາມວ່າບໍ່ມີການສອດຄ່ອງ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3.

-falign-loops
-falign-loops=n
ຈັດຮຽງ loops ໃຫ້ເປັນເຂດແດນພະລັງງານຂອງສອງ, ຂ້າມເຖິງ n bytes ຄື -falign-functions.
ຄວາມ​ຫວັງ​ແມ່ນ​ວ່າ loop ຈະ​ໄດ້​ຮັບ​ການ​ປະ​ຕິ​ບັດ​ຫຼາຍ​ຄັ້ງ​, ທີ່​ຈະ​ເຮັດ​ໃຫ້​ເຖິງ​ການ​ໃດໆ​
ການປະຕິບັດການດໍາເນີນການ dummy ໄດ້.

-fno-align-loops ແລະ -falign-loops=1 ແມ່ນທຽບເທົ່າແລະຫມາຍຄວາມວ່າ loops ຈະບໍ່ເປັນ
ສອດຄ່ອງ.

If n ບໍ່ໄດ້ລະບຸ ຫຼືເປັນສູນ, ໃຫ້ໃຊ້ຄ່າເລີ່ມຕົ້ນທີ່ຂຶ້ນກັບເຄື່ອງຈັກ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3.

-falign-jumps
-falign-jumps=n
ຈັດວາງເປົ້າໝາຍສາຂາໃຫ້ເປັນເຂດແດນທີ່ມີອຳນາດຂອງສອງ, ສຳລັບເປົ້າໝາຍສາຂາທີ່ເປົ້າໝາຍ
ສາມາດບັນລຸໄດ້ໂດຍການໂດດ, ຂ້າມເຖິງ n bytes ຄື -falign-functions. ໃນ
ກໍລະນີນີ້, ບໍ່ຈໍາເປັນຕ້ອງດໍາເນີນການ dummy.

-fno-align-jumps ແລະ -falign-jumps=1 ແມ່ນທຽບເທົ່າແລະຫມາຍຄວາມວ່າ loops ຈະບໍ່ເປັນ
ສອດຄ່ອງ.

If n ບໍ່ໄດ້ລະບຸ ຫຼືເປັນສູນ, ໃຫ້ໃຊ້ຄ່າເລີ່ມຕົ້ນທີ່ຂຶ້ນກັບເຄື່ອງຈັກ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3.

-funit-at-a-time
ທາງເລືອກນີ້ຖືກປະໄວ້ສໍາລັບເຫດຜົນຄວາມເຂົ້າກັນໄດ້. -funit-at-a-time ບໍ່ມີຜົນກະທົບ, ໃນຂະນະທີ່
-fno-unit-at-a-time implies -fno-toplevel-reorder ແລະ -fno-section-anchors.

ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-fno-toplevel-reorder
ຢ່າຈັດລໍາດັບຟັງຊັນລະດັບສູງສຸດ, ຕົວແປ, ແລະຄໍາຖະແຫຼງ "asm". ສົ່ງອອກໃຫ້ເຂົາເຈົ້າໃນ
ຄໍາສັ່ງດຽວກັນທີ່ພວກເຂົາປາກົດຢູ່ໃນໄຟລ໌ປ້ອນຂໍ້ມູນ. ເມື່ອຕົວເລືອກນີ້ຖືກໃຊ້,
ຕົວແປສະຖິດທີ່ບໍ່ໄດ້ອ້າງອີງຈະບໍ່ຖືກໂຍກຍ້າຍ. ທາງເລືອກນີ້ມີຈຸດປະສົງເພື່ອສະຫນັບສະຫນູນ
ລະຫັດທີ່ມີຢູ່ແລ້ວທີ່ອີງໃສ່ຄໍາສັ່ງໂດຍສະເພາະ. ສໍາລັບລະຫັດໃຫມ່, ມັນດີກວ່າທີ່ຈະໃຊ້
ຄຸນລັກສະນະ.

ເປີດໃຊ້ຢູ່ໃນລະດັບ -O0. ເມື່ອພິການຢ່າງຊັດເຈນ, ມັນຍັງຫມາຍເຖິງ -fno-section-anchors,
ເຊິ່ງຖືກເປີດໃຊ້ເປັນຢ່າງອື່ນຢູ່ທີ່ -O0 ໃນບາງເປົ້າໝາຍ.

-fweb
ກໍ່ສ້າງເວັບຕາມທີ່ໃຊ້ທົ່ວໄປເພື່ອຈຸດປະສົງການຈັດສັນການລົງທະບຽນ ແລະມອບໝາຍແຕ່ລະເວັບ
ລົງທະບຽນ pseudo ສ່ວນບຸກຄົນ. ອັນນີ້ອະນຸຍາດໃຫ້ໃບທະບຽນການຈັດສັນເພື່ອດໍາເນີນການໄດ້
pseudos ໂດຍກົງ, ແຕ່ຍັງເສີມສ້າງການເພີ່ມປະສິດທິພາບອື່ນໆຈໍານວນຫນຶ່ງເຊັ່ນ CSE,
loop optimizer ແລະຕົວລຶບລະຫັດຕາຍທີ່ບໍ່ສໍາຄັນ. ມັນສາມາດ, ຢ່າງໃດກໍຕາມ, ເຮັດໃຫ້ debugging
ເປັນໄປບໍ່ໄດ້, ເພາະວ່າຕົວແປຈະບໍ່ຢູ່ໃນ "ທະບຽນເຮືອນ".

ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນດ້ວຍ -funroll-loops.

- ໂຄງ​ການ​ທັງ​ຫມົດ​
ສົມມຸດວ່າຫນ່ວຍງານລວບລວມປະຈຸບັນເປັນຕົວແທນຂອງໂປຼແກຼມທັງຫມົດທີ່ຖືກລວບລວມ.
ຫນ້າທີ່ສາທາລະນະທັງຫມົດແລະຕົວແປຍົກເວັ້ນ "ຕົ້ນຕໍ" ແລະຜູ້ທີ່ລວມເຂົ້າກັນໂດຍ
attribute "externally_visible" ກາຍເປັນຫນ້າທີ່ຄົງທີ່ແລະໃນຜົນກະທົບແມ່ນ optimized
ຮຸກຮານຫຼາຍຂຶ້ນໂດຍຕົວເພີ່ມປະສິດທິພາບລະຫວ່າງຂັ້ນຕອນ. ຖ້າ ຄໍາ ຖືກນໍາໃຊ້ເປັນ plugin ເຊື່ອມຕໍ່,
ຄຸນລັກສະນະ "externally_visible" ຈະຖືກເພີ່ມໃສ່ຟັງຊັນຕ່າງໆໂດຍອັດຕະໂນມັດ (ຍັງບໍ່ທັນມີການປ່ຽນແປງເທື່ອ
ເນື່ອງຈາກກະແສໄຟຟ້າ ຄໍາ ບັນຫາ) ທີ່ຖືກເຂົ້າເຖິງພາຍນອກຂອງວັດຖຸ LTO ອີງຕາມ
ໄຟລ໌ຄວາມລະອຽດທີ່ຜະລິດໂດຍ ຄໍາ. ສໍາລັບຕົວເຊື່ອມຕໍ່ອື່ນໆທີ່ບໍ່ສາມາດສ້າງຄວາມລະອຽດໄດ້
ໄຟລ໌, ຄຸນລັກສະນະ "externally_visible" ຢ່າງຊັດເຈນຍັງມີຄວາມຈໍາເປັນ. ໃນຂະນະທີ່ທາງເລືອກນີ້
ເທົ່າກັບການໃຊ້ຄໍາສໍາຄັນ "static" ທີ່ເຫມາະສົມສໍາລັບໂຄງການທີ່ປະກອບດ້ວຍ a
ໄຟລ໌ດຽວ, ປະສົມປະສານກັບທາງເລືອກ -flto ທຸງນີ້ສາມາດຖືກນໍາໃຊ້ເພື່ອລວບລວມຈໍານວນຫຼາຍ
ໂຄງການຂະຫນາດຂະຫນາດນ້ອຍກວ່ານັບຕັ້ງແຕ່ຫນ້າທີ່ແລະຕົວແປກາຍເປັນທ້ອງຖິ່ນສໍາລັບທັງຫມົດ
ຫນ່ວຍງານລວບລວມຂໍ້ມູນລວມ, ບໍ່ແມ່ນສໍາລັບໄຟລ໌ແຫຼ່ງດຽວ.

ທາງເລືອກນີ້ຫມາຍເຖິງ -fwhole-file ສໍາລັບໂຄງການ Fortran.

-flto[=n]
ຕົວເລືອກນີ້ໃຊ້ຕົວປັບປຸງເວລາເຊື່ອມຕໍ່ມາດຕະຖານ. ເມື່ອຖືກເອີ້ນດ້ວຍລະຫັດແຫຼ່ງ, ມັນ
ສ້າງ GIMPLE (ຫນຶ່ງໃນຕົວແທນພາຍໃນຂອງ GCC) ແລະຂຽນມັນໃຫ້ກັບ ELF ພິເສດ
ພາກສ່ວນໃນໄຟລ໌ວັດຖຸ. ເມື່ອໄຟລ໌ວັດຖຸເຊື່ອມຕໍ່ກັນ, ທັງຫມົດ
ອົງການຈັດຕັ້ງການທໍາງານແມ່ນອ່ານຈາກພາກສ່ວນ ELF ເຫຼົ່ານີ້ແລະທັນທີທັນໃດເປັນຖ້າຫາກວ່າພວກເຂົາເຈົ້າໄດ້
ສ່ວນໜຶ່ງຂອງໜ່ວຍແປພາສາດຽວກັນ.

ເພື່ອໃຊ້ຕົວປັບແຕ່ງເວລາເຊື່ອມຕໍ່, -flto ຕ້ອງໄດ້ຮັບການລະບຸໃນເວລາລວບລວມແລະໃນລະຫວ່າງ
ການເຊື່ອມຕໍ່ສຸດທ້າຍ. ຍົກ​ຕົວ​ຢ່າງ:

gcc -c -O2 -flto foo.c
gcc -c -O2 -flto bar.c
gcc -o myprog -flto -O2 foo.o bar.o

ສອງຄຳຮຽກຮ້ອງທຳອິດໃຫ້ກັບ GCC ບັນທຶກການເປັນຕົວແທນຂອງ bytecode ຂອງ GIMPLE ເປັນພິເສດ
ພາກສ່ວນ ELF ພາຍໃນ foo.o ແລະ bar.o. ຄຳຮຽກຮ້ອງສຸດທ້າຍຈະອ່ານ GIMPLE bytecode
ຈາກ foo.o ແລະ bar.o, ລວມທັງສອງໄຟລ໌ເຂົ້າໄປໃນຮູບພາບພາຍໃນດຽວ, ແລະລວບລວມ
ຜົນໄດ້ຮັບຕາມປົກກະຕິ. ນັບຕັ້ງແຕ່ທັງສອງ foo.o ແລະ bar.o ຖືກລວມເຂົ້າເປັນຮູບດຽວ, ນີ້
ເຮັດໃຫ້ການວິເຄາະແລະການເພີ່ມປະສິດທິພາບລະຫວ່າງກັນທັງຫມົດໃນ GCC ເຮັດວຽກໃນທົ່ວ
ສອງໄຟລ໌ຄືກັບວ່າພວກມັນເປັນອັນດຽວ. ນີ້ຫມາຍຄວາມວ່າ, ສໍາລັບການຍົກຕົວຢ່າງ, ວ່າ inliner ແມ່ນ
ສາມາດ inline ຫນ້າທີ່ຢູ່ໃນ bar.o ເຂົ້າ​ໄປ​ໃນ​ຫນ້າ​ທີ່​ໃນ​ foo.o ແລະໃນທາງກັບກັນ.

ອີກວິທີໜຶ່ງ (ງ່າຍກວ່າ) ເພື່ອເຮັດໃຫ້ການເພີ່ມປະສິດທິພາບເວລາເຊື່ອມຕໍ່ແມ່ນ:

gcc -o myprog -flto -O2 foo.c bar.c

ຂ້າງເທິງສ້າງ bytecode ສໍາລັບ foo.c ແລະ bar.c, ຜະສົມຜະສານພວກມັນເຂົ້າກັນເປັນອັນດຽວ
ການເປັນຕົວແທນ GIMPLE ແລະເພີ່ມປະສິດທິພາບໃຫ້ເຂົາເຈົ້າເປັນປົກກະຕິເພື່ອຜະລິດ myprog.

ສິ່ງດຽວທີ່ສໍາຄັນທີ່ຕ້ອງຢູ່ໃນໃຈແມ່ນວ່າເພື່ອໃຫ້ສາມາດເພີ່ມປະສິດທິພາບການເຊື່ອມຕໍ່ເວລາ
-flto ທຸງຈໍາເປັນຕ້ອງຖືກສົ່ງຜ່ານທັງຄໍາສັ່ງລວບລວມແລະການເຊື່ອມຕໍ່.

ເພື່ອເຮັດໃຫ້ການເພີ່ມປະສິດທິພາບໂຄງການທັງຫມົດມີປະສິດທິພາບ, ມັນຈໍາເປັນຕ້ອງເຮັດໃຫ້ແນ່ນອນທັງຫມົດ
ສົມ​ມຸດ​ຕິ​ຖານ​ໂຄງ​ການ​. compiler ຕ້ອງການຮູ້ວ່າຫນ້າທີ່ແລະຕົວແປສາມາດເປັນແນວໃດ
ເຂົ້າເຖິງໂດຍຫ້ອງສະຫມຸດແລະ runtime ຢູ່ນອກຫນ່ວຍງານ link-time optimized. ເມື່ອ​ໃດ​
ສະຫນັບສະຫນູນໂດຍ linker, plugin linker (ເບິ່ງ -fuse-linker-plugin) ຜ່ານ
ຂໍ້ມູນກັບຜູ້ລວບລວມຂໍ້ມູນກ່ຽວກັບສັນຍາລັກທີ່ໃຊ້ແລ້ວແລະພາຍນອກທີ່ເຫັນໄດ້ຊັດເຈນ. ໃນ​ເວ​ລາ​ທີ່
linker plugin ບໍ່ສາມາດໃຊ້ໄດ້, - ໂຄງ​ການ​ທັງ​ຫມົດ​ ຄວນຖືກນໍາໃຊ້ເພື່ອອະນຸຍາດໃຫ້ລວບລວມຂໍ້ມູນ
ເພື່ອເຮັດໃຫ້ສົມມຸດຕິຖານເຫຼົ່ານີ້, ເຊິ່ງນໍາໄປສູ່ການຕັດສິນໃຈການເພີ່ມປະສິດທິພາບທີ່ຮຸກຮານຫຼາຍຂຶ້ນ.

ໃຫ້ສັງເກດວ່າເມື່ອໄຟລ໌ຖືກລວບລວມດ້ວຍ -flto, ໄຟລ໌ວັດຖຸທີ່ສ້າງຂຶ້ນແມ່ນໃຫຍ່ກວ່າ
ໄຟລ໌ວັດຖຸປົກກະຕິເນື່ອງຈາກວ່າມັນມີ GIMPLE bytecodes ແລະລະຫັດສຸດທ້າຍປົກກະຕິ.
ນີ້ຫມາຍຄວາມວ່າໄຟລ໌ວັດຖຸທີ່ມີຂໍ້ມູນ LTO ສາມາດເຊື່ອມຕໍ່ເປັນວັດຖຸປົກກະຕິ
ໄຟລ໌; ຖ້າ -flto ບໍ່ໄດ້ຜ່ານໄປຫາຕົວເຊື່ອມຕໍ່, ບໍ່ມີການເພີ່ມປະສິດທິພາບ interprocedural ແມ່ນ
ນຳ ໃຊ້.

ນອກຈາກນັ້ນ, ທຸງການເພີ່ມປະສິດທິພາບທີ່ໃຊ້ໃນການລວບລວມໄຟລ໌ສ່ວນບຸກຄົນບໍ່ແມ່ນ
ມີຄວາມຈໍາເປັນທີ່ກ່ຽວຂ້ອງກັບສິ່ງທີ່ຖືກນໍາໃຊ້ໃນເວລາເຊື່ອມຕໍ່. ຕົວ​ຢ່າງ,

gcc -c -O0 -flto foo.c
gcc -c -O0 -flto bar.c
gcc -o myprog -flto -O3 foo.o bar.o

ນີ້ຜະລິດໄຟລ໌ວັດຖຸສ່ວນບຸກຄົນທີ່ມີລະຫັດ assembler unoptimized, ແຕ່
binary ຜົນໄດ້ຮັບ myprog ແມ່ນ optimized ຢູ່ -O3. ຖ້າ, ແທນທີ່ຈະ, ຄູ່ສຸດທ້າຍແມ່ນ
ສ້າງຂຶ້ນໂດຍບໍ່ມີການ -flto, ຫຼັງຈາກນັ້ນ myprog ບໍ່ໄດ້ຖືກປັບປຸງໃຫ້ເໝາະສົມ.

ໃນເວລາທີ່ການຜະລິດຄູ່ສຸດທ້າຍກັບ -flto, GCC ພຽງແຕ່ນໍາໃຊ້ການເພີ່ມປະສິດທິພາບເວລາເຊື່ອມຕໍ່
ກັບໄຟລ໌ເຫຼົ່ານັ້ນທີ່ມີ bytecode. ດັ່ງນັ້ນ, ທ່ານສາມາດປະສົມແລະຈັບຄູ່ໄຟລ໌ວັດຖຸ
ແລະຫ້ອງສະຫມຸດທີ່ມີ GIMPLE bytecodes ແລະລະຫັດວັດຖຸສຸດທ້າຍ. GCC ເລືອກອັດຕະໂນມັດ
ໄຟລ໌ໃດທີ່ຈະເພີ່ມປະສິດທິພາບໃນໂຫມດ LTO ແລະໄຟລ໌ໃດທີ່ຈະເຊື່ອມຕໍ່ໂດຍບໍ່ມີການເພີ່ມເຕີມ
ການປຸງແຕ່ງ.

ມີບາງທຸງການສ້າງລະຫັດທີ່ຖືກຮັກສາໄວ້ໂດຍ GCC ເມື່ອສ້າງ bytecodes, ເປັນ
ພວກເຂົາເຈົ້າຈໍາເປັນຕ້ອງໄດ້ຖືກນໍາໃຊ້ໃນໄລຍະການເຊື່ອມຕໍ່ສຸດທ້າຍ. ໃນປັດຈຸບັນ, ທາງເລືອກຕໍ່ໄປນີ້
ຖືກບັນທຶກໄວ້ໃນໄຟລ໌ GIMPLE bytecode: -fPIC, -fcommon ແລະທັງ ໝົດ -m ທຸງ​ເປົ້າ​ຫມາຍ​.

ໃນເວລາເຊື່ອມຕໍ່, ທາງເລືອກເຫຼົ່ານີ້ຖືກອ່ານແລະຖືກນໍາມາໃຊ້ໃຫມ່. ໃຫ້ສັງເກດວ່າປະຈຸບັນ
ການປະຕິບັດເຮັດໃຫ້ບໍ່ມີຄວາມພະຍາຍາມທີ່ຈະຮັບຮູ້ຄຸນຄ່າທີ່ຂັດແຍ້ງກັນສໍາລັບທາງເລືອກເຫຼົ່ານີ້. ຖ້າ
ໄຟລ​໌​ທີ່​ແຕກ​ຕ່າງ​ກັນ​ມີ​ຄຸນ​ຄ່າ​ທາງ​ເລືອກ​ທີ່​ຂັດ​ແຍ່ງ​ກັນ (ເຊັ່ນ​: ໄຟລ​໌​ຫນຶ່ງ​ແມ່ນ​ໄດ້​ຖືກ​ລວບລວມ​ດ້ວຍ​ -fPIC
ແລະອີກອັນຫນຶ່ງບໍ່ແມ່ນ), compiler ພຽງແຕ່ໃຊ້ຄ່າສຸດທ້າຍທີ່ອ່ານຈາກ bytecode
ໄຟລ໌. ຫຼັງຈາກນັ້ນ, ມັນແມ່ນແນະນໍາໃຫ້ທ່ານລວບລວມໄຟລ໌ທັງຫມົດທີ່ເຂົ້າຮ່ວມໃນ
ການເຊື່ອມຕໍ່ດຽວກັນກັບທາງເລືອກດຽວກັນ.

ຖ້າ LTO ພົບກັບວັດຖຸທີ່ມີການເຊື່ອມໂຍງ C ທີ່ປະກາດກັບປະເພດທີ່ບໍ່ເຂົ້າກັນໄດ້ແຍກຕ່າງຫາກ
ໜ່ວຍ​ການ​ແປ​ພາ​ສາ​ທີ່​ຈະ​ເຊື່ອມ​ໂຍງ​ເຂົ້າ​ກັນ (ພຶດ​ຕິ​ກຳ​ທີ່​ບໍ່​ໄດ້​ກຳ​ນົດ​ຕາມ ISO C99
6.2.7), ການວິນິດໄສທີ່ບໍ່ເປັນອັນຕະລາຍອາດຈະຖືກອອກ. ພຶດຕິກຳດັ່ງກ່າວຍັງບໍ່ຖືກກຳນົດໃນເວລາແລ່ນ
ເວລາ.

ຄຸນນະສົມບັດອີກອັນຫນຶ່ງຂອງ LTO ແມ່ນວ່າມັນເປັນໄປໄດ້ທີ່ຈະນໍາໃຊ້ການເພີ່ມປະສິດທິພາບລະຫວ່າງຂັ້ນຕອນ
ຢູ່ໃນໄຟລ໌ທີ່ຂຽນເປັນພາສາຕ່າງໆ. ນີ້ຮຽກຮ້ອງໃຫ້ມີການສະຫນັບສະຫນູນໃນດ້ານຫນ້າຂອງພາສາ
ສິ້ນສຸດ. ໃນປັດຈຸບັນ, C, C ++ ແລະ Fortran ດ້ານຫນ້າແມ່ນສາມາດປ່ອຍ GIMPLE
bytecodes, ດັ່ງນັ້ນບາງສິ່ງບາງຢ່າງເຊັ່ນນີ້ຄວນຈະເຮັດວຽກ:

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

ສັງເກດເຫັນວ່າການເຊື່ອມຕໍ່ສຸດທ້າຍແມ່ນເຮັດດ້ວຍ g ++ ເພື່ອໃຫ້ໄດ້ຮັບ C++ runtime libraries ແລະ
-lgfortran ໄດ້ຖືກເພີ່ມເພື່ອໃຫ້ໄດ້ຫ້ອງສະຫມຸດ Fortran runtime. ໂດຍທົ່ວໄປ, ໃນເວລາທີ່ປະສົມ
ພາສາໃນໂຫມດ LTO, ທ່ານຄວນໃຊ້ຕົວເລືອກຄໍາສັ່ງເຊື່ອມຕໍ່ດຽວກັນກັບເວລາປະສົມ
ພາ​ສາ​ໃນ​ການ​ສັງ​ລວມ​ເປັນ​ປົກ​ກະ​ຕິ (ບໍ່ LTO​)​; ທັງ​ຫມົດ​ທີ່​ທ່ານ​ຕ້ອງ​ການ​ທີ່​ຈະ​ເພີ່ມ​ແມ່ນ​ -flto ທັງ ໝົດ
ລວບລວມແລະເຊື່ອມຕໍ່ຄໍາສັ່ງ.

ຖ້າໄຟລ໌ວັດຖຸທີ່ມີ GIMPLE bytecode ຖືກເກັບໄວ້ໃນຄັງເກັບມ້ຽນ, ເວົ້າ
libfoo.a, ມັນເປັນໄປໄດ້ທີ່ຈະສະກັດແລະນໍາໃຊ້ພວກມັນຢູ່ໃນການເຊື່ອມຕໍ່ LTO ຖ້າທ່ານກໍາລັງໃຊ້ a
linker ສະຫນັບສະຫນູນ plugin. ເພື່ອເປີດໃຊ້ຄຸນສົມບັດນີ້, ໃຫ້ໃຊ້ທຸງ -fuse-linker-plugin
ໃນເວລາເຊື່ອມຕໍ່:

gcc -o myprog -O2 -flto -fuse-linker-plugin ao bo -lfoo

ດ້ວຍການເປີດໃຊ້ plugin ເຊື່ອມຕໍ່, ຕົວເຊື່ອມຕໍ່ສະກັດໄຟລ໌ GIMPLE ທີ່ຈໍາເປັນຈາກ
libfoo.a ແລະສົ່ງພວກເຂົາໄປສູ່ GCC ແລ່ນເພື່ອເຮັດໃຫ້ພວກເຂົາເປັນສ່ວນຫນຶ່ງຂອງການລວບລວມ
ຮູບພາບ GIMPLE ທີ່ຈະເພີ່ມປະສິດທິພາບ.

ຖ້າທ່ານບໍ່ໄດ້ໃຊ້ຕົວເຊື່ອມຕໍ່ທີ່ມີການສະຫນັບສະຫນູນ plugin ແລະ / ຫຼືບໍ່ເປີດໃຊ້ຕົວເຊື່ອມຕໍ່
plugin, ຫຼັງຈາກນັ້ນວັດຖຸພາຍໃນ libfoo.a ຖືກສະກັດແລະເຊື່ອມໂຍງຕາມປົກກະຕິ, ແຕ່ພວກມັນ
ບໍ່ໄດ້ເຂົ້າຮ່ວມໃນຂະບວນການເພີ່ມປະສິດທິພາບ LTO.

ການເພີ່ມປະສິດທິພາບເວລາເຊື່ອມຕໍ່ບໍ່ຈໍາເປັນຕ້ອງມີໂປຼແກຼມທັງຫມົດເພື່ອດໍາເນີນການ.
ຖ້າໂຄງການບໍ່ຕ້ອງການສັນຍາລັກໃດໆທີ່ຈະສົ່ງອອກ, ມັນເປັນໄປໄດ້ທີ່ຈະສົມທົບ
-flto ແລະ - ໂຄງ​ການ​ທັງ​ຫມົດ​ ເພື່ອໃຫ້ຕົວເພີ່ມປະສິດທິພາບ interprocedural ໃຊ້ໄດ້ຫຼາຍຂຶ້ນ
ສົມມຸດຕິຖານທີ່ຮຸກຮານເຊິ່ງອາດຈະນໍາໄປສູ່ການປັບປຸງໂອກາດການເພີ່ມປະສິດທິພາບ. ການນໍາໃຊ້
- ໂຄງ​ການ​ທັງ​ຫມົດ​ ບໍ່ຈໍາເປັນເມື່ອ plugin ເຊື່ອມຕໍ່ເຮັດວຽກ (ເບິ່ງ -fuse-linker-plugin).

ການປະຕິບັດໃນປະຈຸບັນຂອງ LTO ເຮັດໃຫ້ບໍ່ມີຄວາມພະຍາຍາມທີ່ຈະສ້າງ bytecode ທີ່ເປັນ
ເຄື່ອນທີ່ລະຫວ່າງເຈົ້າພາບປະເພດຕ່າງໆ. ໄຟລ໌ bytecode ແມ່ນສະບັບແລະຢູ່ທີ່ນັ້ນ
ແມ່ນການກວດສອບສະບັບທີ່ເຂັ້ມງວດ, ດັ່ງນັ້ນໄຟລ໌ bytecode ທີ່ສ້າງຂຶ້ນໃນສະບັບຫນຶ່ງຂອງ GCC ຈະບໍ່
ເຮັດວຽກກັບ GCC ລຸ້ນເກົ່າ/ໃໝ່ກວ່າ.

ການປັບແຕ່ງເວລາເຊື່ອມຕໍ່ບໍ່ໄດ້ຜົນດີກັບການສ້າງຂໍ້ມູນການດີບັກ.
ການສົມທົບ -flto ກັບ -g ປະຈຸບັນກໍາລັງທົດລອງແລະຄາດວ່າຈະຜະລິດຜິດ
ຜົນໄດ້ຮັບ.

ຖ້າທ່ານລະບຸທາງເລືອກ n, ການເພີ່ມປະສິດທິພາບແລະການສ້າງລະຫັດທີ່ເຮັດໃນເວລາເຊື່ອມຕໍ່
ຖືກປະຕິບັດໃນຂະຫນານໂດຍໃຊ້ n ວຽກຂະຫນານໂດຍການນໍາໃຊ້ການຕິດຕັ້ງ ເຮັດໃຫ້ ໂຄງການ.
ສະພາບແວດລ້ອມປ່ຽນແປງໄດ້ ເຮັດ ອາດຈະຖືກນໍາໃຊ້ເພື່ອ override ໂຄງການທີ່ໃຊ້. ຄ່າເລີ່ມຕົ້ນ
ມູນຄ່າສໍາລັບ n ແມ່ນ 1.

ນອກນັ້ນທ່ານຍັງສາມາດກໍານົດ -flto=ວຽກເຊີບເວີ ໃຊ້ GNU make's job server mode ເພື່ອກໍານົດ
ຈໍານວນຂອງວຽກຂະຫນານ. ນີ້ແມ່ນເປັນປະໂຫຍດໃນເວລາທີ່ Makefile ໂທຫາ GCC ແລ້ວ
ການ​ປະ​ຕິ​ບັດ​ໃນ​ຂະ​ຫນານ​. ທ່ານຕ້ອງ prepend a + ກັບສູດຄໍາສັ່ງໃນພໍ່ແມ່
Makefile ສໍາລັບການນີ້ເຮັດວຽກ. ທາງເລືອກນີ້ອາດຈະເຮັດວຽກພຽງແຕ່ຖ້າ ເຮັດ ແມ່ນ GNU ເຮັດ.

ຕົວເລືອກນີ້ຖືກປິດໃຊ້ງານໂດຍຄ່າເລີ່ມຕົ້ນ

-flto-partition=ພຶຊະຄະນິດ
ລະບຸສູດການແບ່ງສ່ວນທີ່ໃຊ້ໂດຍຕົວປັບປຸງເວລາເຊື່ອມຕໍ່. ມູນຄ່າແມ່ນ
ທັງ "1to1" ເພື່ອລະບຸການແບ່ງສ່ວນທີ່ສະທ້ອນໄຟລ໌ຕົ້ນສະບັບ ຫຼື
"ສົມດູນ" ເພື່ອກໍານົດການແບ່ງສ່ວນເປັນຕ່ອນຂະຫນາດເທົ່າທຽມກັນ (ທຸກຄັ້ງທີ່ເປັນໄປໄດ້).
ການລະບຸ "none" ເປັນ algorithm ປິດການແບ່ງສ່ວນ ແລະ streaming ຢ່າງສົມບູນ. ໄດ້
ຄ່າເລີ່ມຕົ້ນແມ່ນ "ສົມດູນ".

-flto-compression-level=n
ຕົວເລືອກນີ້ກໍານົດລະດັບການບີບອັດທີ່ໃຊ້ສໍາລັບພາສາລະດັບປານກາງທີ່ຂຽນ
ກັບໄຟລ໌ວັດຖຸ LTO, ແລະມີຄວາມຫມາຍພຽງແຕ່ສົມທົບກັບໂຫມດ LTO (-flto).
ຄ່າທີ່ຖືກຕ້ອງແມ່ນ 0 (ບໍ່ມີການບີບອັດ) ຫາ 9 (ການບີບອັດສູງສຸດ). ຄຸນຄ່ານອກນີ້
ຊ່ວງແມ່ນຖືກຍຶດເປັນ 0 ຫຼື 9. ຖ້າທາງເລືອກບໍ່ໄດ້ຖືກມອບໃຫ້, ຄ່າເລີ່ມຕົ້ນຈະສົມດູນ
ການຕັ້ງຄ່າການບີບອັດຖືກນໍາໃຊ້.

flto-ບົດລາຍງານ
ພິມບົດລາຍງານທີ່ມີລາຍລະອຽດພາຍໃນກ່ຽວກັບການເຮັດວຽກຂອງ link-time optimizer. ໄດ້
ເນື້ອໃນຂອງບົດລາຍງານນີ້ແຕກຕ່າງກັນໄປແຕ່ລະສະບັບ. ມັນຫມາຍຄວາມວ່າຈະເປັນປະໂຫຍດຕໍ່ GCC
ນັກພັດທະນາໃນເວລາປະມວນຜົນໄຟລ໌ວັດຖຸຢູ່ໃນໂຫມດ LTO (ຜ່ານ -flto).

ພິການໂດຍຄ່າເລີ່ມຕົ້ນ.

-fuse-linker-plugin
ເປີດນຳໃຊ້ການໃຊ້ຕົວເຊື່ອມຕໍ່ຕົວເຊື່ອມຕໍ່ລະຫວ່າງການປັບແຕ່ງເວລາເຊື່ອມຕໍ່. ທາງເລືອກນີ້ອີງໃສ່
ກ່ຽວກັບການສະຫນັບສະຫນູນ plugin ໃນຕົວເຊື່ອມຕໍ່, ທີ່ມີຢູ່ໃນຄໍາຫຼືໃນ GNU ld 2.21 ຫຼື
ໃໝ່ກວ່າ.

ຕົວເລືອກນີ້ເຮັດໃຫ້ສາມາດສະກັດໄຟລ໌ວັດຖຸດ້ວຍ GIMPLE bytecode ອອກຈາກຫ້ອງສະໝຸດ
ຮວບຮວມ. ນີ້ປັບປຸງຄຸນນະພາບຂອງການເພີ່ມປະສິດທິພາບໂດຍການເປີດເຜີຍລະຫັດເພີ່ມເຕີມຕໍ່ກັບການເຊື່ອມຕໍ່ -
ຕົວເພີ່ມປະສິດທິພາບເວລາ. ຂໍ້ມູນນີ້ລະບຸວ່າສັນຍາລັກໃດທີ່ສາມາດເຂົ້າເຖິງພາຍນອກໄດ້
(ໂດຍວັດຖຸທີ່ບໍ່ແມ່ນ LTO ຫຼືໃນລະຫວ່າງການເຊື່ອມໂຍງແບບເຄື່ອນໄຫວ). ຜົນໄດ້ຮັບການປັບປຸງຄຸນນະພາບລະຫັດໃນ
binary (ແລະຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນທີ່ໃຊ້ການເບິ່ງເຫັນທີ່ເຊື່ອງໄວ້) ແມ່ນຄ້າຍຄືກັນກັບ
"-fwhole-ໂຄງການ". ເບິ່ງ -flto ສໍາລັບລາຍລະອຽດຂອງຜົນກະທົບຂອງທຸງນີ້ແລະວິທີການ
ໃຊ້​ມັນ.

ຕົວເລືອກນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນເມື່ອການຮອງຮັບ LTO ໃນ GCC ຖືກເປີດໃຊ້ ແລະ GCC ແມ່ນ
ຕັ້ງຄ່າເພື່ອໃຊ້ກັບຕົວເຊື່ອມຕໍ່ທີ່ຮອງຮັບ plugins (GNU ld 2.21 ຫຼືໃໝ່ກວ່າ ຫຼືຄຳ).

-ffat-lto-ວັດຖຸ
ວັດຖຸ LTO ໄຂມັນແມ່ນໄຟລ໌ວັດຖຸທີ່ມີທັງພາສາກາງແລະພາສາ
ລະຫັດວັດຖຸ. ນີ້ເຮັດໃຫ້ພວກເຂົາສາມາດໃຊ້ໄດ້ສໍາລັບການເຊື່ອມຕໍ່ LTO ແລະການເຊື່ອມໂຍງແບບປົກກະຕິ. ນີ້
ທາງເລືອກແມ່ນມີປະສິດທິພາບພຽງແຕ່ເມື່ອລວບລວມກັບ -flto ແລະຖືກລະເລີຍໃນເວລາເຊື່ອມຕໍ່.

-fno-fat-lto-objects ປັບປຸງເວລາການລວບລວມຫຼາຍກວ່າ LTO ທໍາມະດາ, ແຕ່ຮຽກຮ້ອງໃຫ້ມີ
ເຄື່ອງມືທີ່ສົມບູນທີ່ຈະຮູ້ LTO. ມັນຮຽກຮ້ອງໃຫ້ມີຕົວເຊື່ອມຕໍ່ທີ່ມີການສະຫນັບສະຫນູນ plugin linker
ສໍາລັບການທໍາງານພື້ນຖານ. ນອກຈາກນັ້ນ, nm, ar ແລະ ranlib ຈໍາເປັນຕ້ອງສະຫນັບສະຫນູນຕົວເຊື່ອມຕໍ່
plugins ເພື່ອອະນຸຍາດໃຫ້ສະພາບແວດລ້ອມການກໍ່ສ້າງແບບເຕັມຮູບແບບ (ສາມາດສ້າງສະຖິດ
ຫໍສະຫມຸດແລະອື່ນໆ).

ຄ່າເລີ່ມຕົ້ນແມ່ນ -ffat-lto-ວັດຖຸ ແຕ່ຄ່າເລີ່ມຕົ້ນນີ້ແມ່ນມີຈຸດປະສົງທີ່ຈະປ່ຽນແປງໃນອະນາຄົດ
ປ່ອຍອອກມາເມື່ອສະພາບແວດລ້ອມທີ່ເປີດໃຊ້ plugin linker ກາຍເປັນເລື່ອງທົ່ວໄປຫຼາຍຂຶ້ນ.

-fcompare-elim
ຫຼັງ​ຈາກ​ການ​ລົງ​ທະ​ບຽນ​ການ​ຈັດ​ສັນ​ແລະ​ຫຼັງ​ຈາກ​ການ​ລົງ​ທະ​ບຽນ​ການ​ແບ່ງ​ປັນ​ຄໍາ​ແນະ​ນໍາ​ການ​ຈັດ​ສັນ​, ກໍາ​ນົດ​
ຄໍາແນະນໍາທາງເລກຄະນິດທີ່ຄໍານວນທຸງຂອງໂປເຊດເຊີທີ່ຄ້າຍຄືກັບການປະຕິບັດການປຽບທຽບ
ອີງໃສ່ເລກຄະນິດສາດນັ້ນ. ຖ້າເປັນໄປໄດ້, ລົບລ້າງການປະຕິບັດການປຽບທຽບທີ່ຊັດເຈນ.

ຜ່ານນີ້ໃຊ້ໄດ້ກັບບາງເປົ້າໝາຍທີ່ບໍ່ສາມາດເປັນຕົວແທນໄດ້ຢ່າງຊັດເຈນ
ການ​ປະ​ຕິ​ບັດ​ການ​ປຽບ​ທຽບ​ກ່ອນ​ທີ່​ຈະ​ຈັດ​ສັນ​ການ​ຈົດ​ທະ​ບຽນ​ສໍາ​ເລັດ​.

ເປີດໃຊ້ໃນລະດັບ -O, -O2, -O3, -ອສ.

-fuse-ld=ທອງ
ການນໍາໃຊ້ ຄໍາ linker ແທນທີ່ຈະເປັນຕົວເຊື່ອມຕໍ່ເລີ່ມຕົ້ນ.

-fuse-ld=bfd
ການນໍາໃຊ້ ld.bfd linker ແທນທີ່ຈະເປັນຕົວເຊື່ອມຕໍ່ເລີ່ມຕົ້ນ.

-fcprop-ລົງທະບຽນ
ຫຼັງ​ຈາກ​ການ​ລົງ​ທະ​ບຽນ​ການ​ຈັດ​ສັນ​ແລະ​ຫຼັງ​ຈາກ​ການ​ລົງ​ທະ​ບຽນ​ການ​ແບ່ງ​ປັນ​ຄໍາ​ແນະ​ນໍາ​ການ​ຈັດ​ສັນ​, ພວກ​ເຮົາ​
ດໍາເນີນການສໍາເນົາການແຜ່ພັນຜ່ານເພື່ອພະຍາຍາມຫຼຸດຜ່ອນການຂຶ້ນກັບຕາຕະລາງແລະ
ບາງຄັ້ງກໍ່ລົບລ້າງການສໍາເນົາ.

ເປີດໃຊ້ໃນລະດັບ -O, -O2, -O3, -ອສ.

-fprofile-ການ​ແກ້​ໄຂ​
ໂປຼໄຟລ໌ທີ່ເກັບກໍາໂດຍໃຊ້ binary ເຄື່ອງມືສໍາລັບໂຄງການຫຼາຍກະທູ້ອາດຈະເປັນ
ບໍ່ສອດຄ່ອງເນື່ອງຈາກພາດການອັບເດດໂຕ້ຕອບ. ເມື່ອຕົວເລືອກນີ້ຖືກລະບຸ, GCC ຈະ
ໃຊ້ heuristics ເພື່ອແກ້ໄຂຫຼືແກ້ໄຂຄວາມບໍ່ສອດຄ່ອງດັ່ງກ່າວ. ໂດຍຄ່າເລີ່ມຕົ້ນ, GCC ຈະ
ສົ່ງຂໍ້ຄວາມຂໍ້ຜິດພາດເມື່ອກວດພົບໂປຣໄຟລ໌ທີ່ບໍ່ສອດຄ່ອງກັນ.

-fprofile-dir=ເສັ້ນທາງ
ຕັ້ງຄ່າໄດເລກະທໍລີເພື່ອຊອກຫາໄຟລ໌ຂໍ້ມູນໂປຣໄຟລ໌ຢູ່ໃນ ເສັ້ນທາງ. ຕົວເລືອກນີ້
ມີຜົນກະທົບພຽງແຕ່ຂໍ້ມູນໂປຣໄຟລ໌ທີ່ສ້າງຂຶ້ນໂດຍ -fprofile-generate, -ftest-ການ​ຄຸ້ມ​ຄອງ​,
-fprofile-arcs ແລະໃຊ້ໂດຍ -fprofile-ໃຊ້ ແລະ -fbranch-ຄວາມເປັນໄປໄດ້ ແລະມັນກ່ຽວຂ້ອງ
ທາງເລືອກ. ທັງສອງເສັ້ນທາງຢ່າງແທ້ຈິງແລະພີ່ນ້ອງສາມາດຖືກນໍາໃຊ້. ໂດຍຄ່າເລີ່ມຕົ້ນ, GCC ຈະໃຊ້
ໄດເລກະທໍລີປະຈຸບັນເປັນ ເສັ້ນທາງ, ດັ່ງນັ້ນໄຟລ໌ຂໍ້ມູນໂປຣໄຟລ໌ຈະປາກົດຢູ່ໃນອັນດຽວກັນ
ໄດເລກະທໍລີເປັນໄຟລ໌ວັດຖຸ.

-fprofile-generate
-fprofile-generate=ເສັ້ນທາງ
ເປີດໃຊ້ຕົວເລືອກທີ່ປົກກະຕິແລ້ວໃຊ້ສໍາລັບຄໍາຮ້ອງສະຫມັກເຄື່ອງມືເພື່ອຜະລິດໂປຣໄຟລ໌ທີ່ເປັນປະໂຫຍດ
ສໍາ​ລັບ​ການ​ປະ​ສົມ​ໃນ​ພາຍ​ຫຼັງ​ທີ່​ມີ​ຄໍາ​ຄຶດ​ຄໍາ​ເຫັນ​ຂອງ​ຂໍ້​ມູນ​ກ່ຽວ​ກັບ​ການ​ປັບ​ແຕ່ງ​ໂດຍ​ອີງ​ໃສ່ profile​. ເຈົ້າຕ້ອງໃຊ້
-fprofile-generate ທັງໃນເວລາທີ່ລວບລວມແລະໃນເວລາທີ່ເຊື່ອມຕໍ່ໂຄງການຂອງທ່ານ.

ຕົວເລືອກຕໍ່ໄປນີ້ຖືກເປີດໃຊ້: "-fprofile-arcs", "-fprofile-values", "-fvpt".

If ເສັ້ນທາງ ຖືກກໍານົດ, GCC ຈະເບິ່ງ ເສັ້ນທາງ ເພື່ອຊອກຫາຂໍ້ມູນຕໍານິຕິຊົມໂປຣໄຟລ໌
ໄຟລ໌. ເບິ່ງ -fprofile-dir.

-fprofile-ໃຊ້
-fprofile-use=ເສັ້ນທາງ
ເປີດໃຊ້ການເພີ່ມປະສິດທິພາບຂອງຄໍາຕິຊົມຂອງໂປຣໄຟລ໌, ແລະການເພີ່ມປະສິດທິພາບໂດຍທົ່ວໄປແລ້ວມີກໍາໄລ
ພຽງ​ແຕ່​ມີ​ຄໍາ​ຄຶດ​ຄໍາ​ເຫັນ profile ທີ່​ມີ​ຢູ່​.

ຕົວເລືອກຕໍ່ໄປນີ້ຖືກເປີດໃຊ້: "-fbrnch-probabilities", "-fvpt",
"-funroll-loops", "-fpeel-loops", "-ftracer"

ໂດຍຄ່າເລີ່ມຕົ້ນ, GCC ປ່ອຍຂໍ້ຄວາມສະແດງຂໍ້ຜິດພາດຖ້າໂປຣໄຟລ໌ຄໍາຕິຊົມບໍ່ກົງກັບ
ລະຫັດແຫຼ່ງ. ຄວາມ​ຜິດ​ພາດ​ນີ້​ສາ​ມາດ​ປ່ຽນ​ເປັນ​ການ​ເຕືອນ​ໄພ​ໂດຍ​ການ​ນໍາ​ໃຊ້​ -Wcoverage-mismatch.
ກະລຸນາຮັບຊາບວ່າອັນນີ້ອາດຈະສົ່ງຜົນໃຫ້ລະຫັດປັບປຸງບໍ່ດີ.

If ເສັ້ນທາງ ຖືກກໍານົດ, GCC ຈະເບິ່ງ ເສັ້ນທາງ ເພື່ອຊອກຫາຂໍ້ມູນຕໍານິຕິຊົມໂປຣໄຟລ໌
ໄຟລ໌. ເບິ່ງ -fprofile-dir.

ຕົວເລືອກຕໍ່ໄປນີ້ຄວບຄຸມພຶດຕິກໍາການລວບລວມກ່ຽວກັບເລກເລກຄະນິດທີ່ລອຍຕົວ.
ທາງເລືອກເຫຼົ່ານີ້ແລກປ່ຽນລະຫວ່າງຄວາມໄວແລະຄວາມຖືກຕ້ອງ. ທັງໝົດຕ້ອງຖືກເປີດໃຊ້ໂດຍສະເພາະ.

- ຮ້ານຂາຍເຄື່ອງຍ່ອຍ
ຢ່າເກັບຮັກສາຕົວແປຈຸດລອຍຢູ່ໃນທະບຽນ, ແລະຂັດຂວາງທາງເລືອກອື່ນ
ອາດຈະປ່ຽນວ່າຄ່າຈຸດລອຍແມ່ນເອົາມາຈາກທະບຽນ ຫຼື ໜ່ວຍຄວາມຈຳ.

ທາງເລືອກນີ້ປ້ອງກັນຄວາມແມ່ນຍໍາເກີນທີ່ບໍ່ຕ້ອງການໃນເຄື່ອງຈັກເຊັ່ນ 68000 ບ່ອນທີ່
ທະບຽນທີ່ເລື່ອນໄດ້ (ຂອງ 68881) ຮັກສາຄວາມແມ່ນຍໍາຫຼາຍກ່ວາ "ສອງເທົ່າ" ທີ່ຄາດໄວ້.
ມີ. ເຊັ່ນດຽວກັນສໍາລັບສະຖາປັດຕະ x86. ສໍາລັບໂຄງການສ່ວນໃຫຍ່, ຄວາມແມ່ນຍໍາເກີນ
ເຮັດໄດ້ດີເທົ່ານັ້ນ, ແຕ່ບາງໂຄງການອີງໃສ່ຄໍານິຍາມທີ່ຊັດເຈນຂອງ IEEE ທີ່ເລື່ອນໄດ້
ຈຸດ. ໃຊ້ - ຮ້ານຂາຍເຄື່ອງຍ່ອຍ ສໍາລັບໂຄງການດັ່ງກ່າວ, ຫຼັງຈາກດັດແປງໃຫ້ເຂົາເຈົ້າເກັບຮັກສາທັງຫມົດ
ການຄິດໄລ່ລະດັບປານກາງທີ່ກ່ຽວຂ້ອງເຂົ້າໄປໃນຕົວແປ.

-fexcess-precision=ແບບ
ທາງ​ເລືອກ​ນີ້​ອະ​ນຸ​ຍາດ​ໃຫ້​ການ​ຄວບ​ຄຸມ​ເພີ່ມ​ເຕີມ​ກ່ຽວ​ກັບ​ຄວາມ​ແມ່ນ​ຍໍາ​ເກີນ​ຂອງ​ເຄື່ອງ​ຈັກ​ທີ່​ເລື່ອນ​ໄດ້​.
ທະບຽນຈຸດມີຄວາມແມ່ນຍໍາຫຼາຍກ່ວາ IEEE "ເລື່ອນ" ແລະ "ສອງ" ປະເພດແລະ
ໂປເຊດເຊີບໍ່ສະຫນັບສະຫນູນການດໍາເນີນການຮອບກັບປະເພດເຫຼົ່ານັ້ນ. ໂດຍຄ່າເລີ່ມຕົ້ນ,
-fexcess-precision=ໄວ ມີຜົນບັງຄັບໃຊ້; ນີ້ຫມາຍຄວາມວ່າການດໍາເນີນງານແມ່ນດໍາເນີນຢູ່ໃນ
ຄວາມແມ່ນຍໍາຂອງທະບຽນແລະວ່າມັນບໍ່ສາມາດຄາດເດົາໄດ້ໃນເວລາທີ່ຮອບໄປຫາປະເພດຕ່າງໆ
ທີ່ລະບຸໄວ້ໃນລະຫັດແຫຼ່ງເກີດຂຶ້ນ. ເມື່ອລວບລວມ C, ຖ້າ
-fexcess-precision=ມາດຕະຖານ ຖືກກໍານົດຫຼັງຈາກນັ້ນຄວາມແມ່ນຍໍາເກີນຈະປະຕິບັດຕາມກົດລະບຽບ
ລະບຸໄວ້ໃນ ISO C99; ໂດຍສະເພາະ, ທັງການໂຍນແລະການມອບຫມາຍເຮັດໃຫ້ຄຸນຄ່າເປັນ
ມົນເປັນປະເພດ semantic ຂອງເຂົາເຈົ້າ (ໃນຂະນະທີ່ - ຮ້ານຂາຍເຄື່ອງຍ່ອຍ ມີຜົນກະທົບພຽງແຕ່ການມອບຫມາຍ).
ຕົວເລືອກນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນສໍາລັບ C ຖ້າທາງເລືອກທີ່ສອດຄ່ອງຢ່າງເຂັ້ມງວດເຊັ່ນ:
-std=c99 ຖືກນໍາໃຊ້.

-fexcess-precision=ມາດຕະຖານ ບໍ່ໄດ້ຖືກປະຕິບັດສໍາລັບພາສາອື່ນນອກເຫນືອຈາກ C, ແລະບໍ່ມີ
ຜົນກະທົບຖ້າຫາກວ່າ -funsafe-math-optimizations or -fast ຄະ​ນິດ​ສາດ​ ຖືກກໍານົດ. ໃນ x86, ມັນ
ຍັງ​ບໍ່​ມີ​ຜົນ​ກະ​ທົບ​ຖ້າ​ຫາກ​ວ່າ​ -mfpmath=sse or -mfpmath=sse+387 ຖືກກໍານົດ; ໃນອະດີດ
ກໍລະນີ, IEEE semantics ນໍາໃຊ້ໂດຍບໍ່ມີຄວາມແມ່ນຍໍາເກີນ, ແລະໃນສຸດທ້າຍ, ຮອບແມ່ນ
ບໍ່ສາມາດຄາດເດົາໄດ້.

-fast ຄະ​ນິດ​ສາດ​
ຊຸດ -fno-math-errno, -funsafe-math-optimizations, -ffinite-math-ເທົ່ານັ້ນ,
-fno-rounding-ຄະນິດສາດ, -fno-signaling-nans ແລະ -fcx-limited-range.

ທາງ​ເລືອກ​ນີ້​ເຮັດ​ໃຫ້​ມາ​ໂຄ preprocessor "__FAST_MATH__" ຖືກ​ກໍາ​ນົດ​.

ທາງເລືອກນີ້ບໍ່ໄດ້ເປີດໂດຍໃດໆ -O ທາງ​ເລືອກ​ນອກ​ຈາກ​ນັ້ນ​ - ໄວ ເນື່ອງຈາກວ່າມັນສາມາດສົ່ງຜົນໃຫ້
ຜົນຜະລິດທີ່ບໍ່ຖືກຕ້ອງສໍາລັບໂຄງການທີ່ຂຶ້ນກັບການປະຕິບັດທີ່ແນ່ນອນຂອງ IEEE ຫຼື ISO
ກົດ​ລະ​ບຽບ / ຂໍ້​ຈໍາ​ກັດ​ສໍາ​ລັບ​ການ​ທໍາ​ງານ​ຄະ​ນິດ​ສາດ​. ຢ່າງໃດກໍຕາມ, ມັນອາດຈະເຮັດໃຫ້ລະຫັດໄວຂຶ້ນສໍາລັບ
ໂຄງ​ການ​ທີ່​ບໍ່​ຕ້ອງ​ການ​ການ​ຮັບ​ປະ​ກັນ​ຂອງ​ສະ​ເພາະ​ເຫຼົ່າ​ນີ້​.

-fno-math-errno
ຢ່າຕັ້ງ ERRNO ຫຼັງຈາກເອີ້ນຟັງຊັນຄະນິດສາດທີ່ປະຕິບັດດ້ວຍອັນດຽວ
ຄໍາແນະນໍາ, ຕົວຢ່າງ, sqrt. ໂຄງການທີ່ອີງໃສ່ຂໍ້ຍົກເວັ້ນ IEEE ສໍາລັບຄວາມຜິດພາດທາງຄະນິດສາດ
ການຈັດການອາດຈະຕ້ອງການໃຊ້ທຸງນີ້ສໍາລັບຄວາມໄວໃນຂະນະທີ່ຮັກສາເລກເລກ IEEE
ຄວາມເຂົ້າກັນໄດ້.

ທາງເລືອກນີ້ບໍ່ໄດ້ເປີດໂດຍໃດໆ -O ທາງ​ເລືອກ​ເນື່ອງ​ຈາກ​ວ່າ​ມັນ​ສາ​ມາດ​ເຮັດ​ໃຫ້​ຜົນ​ຜະ​ລິດ​ທີ່​ບໍ່​ຖືກ​ຕ້ອງ​
ສໍາລັບໂຄງການທີ່ຂຶ້ນກັບການປະຕິບັດທີ່ແນ່ນອນຂອງ IEEE ຫຼື ISO
ກົດ​ລະ​ບຽບ / ຂໍ້​ຈໍາ​ກັດ​ສໍາ​ລັບ​ການ​ທໍາ​ງານ​ຄະ​ນິດ​ສາດ​. ຢ່າງໃດກໍຕາມ, ມັນອາດຈະເຮັດໃຫ້ລະຫັດໄວຂຶ້ນສໍາລັບ
ໂຄງ​ການ​ທີ່​ບໍ່​ຕ້ອງ​ການ​ການ​ຮັບ​ປະ​ກັນ​ຂອງ​ສະ​ເພາະ​ເຫຼົ່າ​ນີ້​.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -fmath-errno.

ໃນລະບົບ Darwin, ຫ້ອງສະຫມຸດຄະນິດສາດບໍ່ເຄີຍຕັ້ງ "errno". ດັ່ງນັ້ນຈຶ່ງບໍ່ມີເຫດຜົນ
ສໍາລັບ compiler ພິຈາລະນາຄວາມເປັນໄປໄດ້ທີ່ມັນອາດຈະ, ແລະ -fno-math-errno ເປັນ
Default

-funsafe-math-optimizations
ອະ​ນຸ​ຍາດ​ໃຫ້​ເຫມາະ​ສົມ​ສໍາ​ລັບ​ການ​ເລກ​ຄະ​ນິດ​ສາດ​ຈຸດ​ທີ່​ເລື່ອນ​ໄດ້​ທີ່ (a​) ສົມ​ມຸດ​ວ່າ​ການ​ໂຕ້​ຖຽງ​ແລະ​
ຜົນໄດ້ຮັບແມ່ນຖືກຕ້ອງແລະ (b) ອາດຈະລະເມີດມາດຕະຖານ IEEE ຫຼື ANSI. ເມື່ອໃຊ້ໃນເວລາເຊື່ອມຕໍ່,
ມັນອາດຈະປະກອບມີຫ້ອງສະຫມຸດຫຼືໄຟລ໌ເລີ່ມຕົ້ນທີ່ປ່ຽນຄໍາຄວບຄຸມ FPU ເລີ່ມຕົ້ນຫຼື
ການເພີ່ມປະສິດທິພາບທີ່ຄ້າຍຄືກັນອື່ນໆ.

ທາງເລືອກນີ້ບໍ່ໄດ້ເປີດໂດຍໃດໆ -O ທາງ​ເລືອກ​ເນື່ອງ​ຈາກ​ວ່າ​ມັນ​ສາ​ມາດ​ເຮັດ​ໃຫ້​ຜົນ​ຜະ​ລິດ​ທີ່​ບໍ່​ຖືກ​ຕ້ອງ​
ສໍາລັບໂຄງການທີ່ຂຶ້ນກັບການປະຕິບັດທີ່ແນ່ນອນຂອງ IEEE ຫຼື ISO
ກົດ​ລະ​ບຽບ / ຂໍ້​ຈໍາ​ກັດ​ສໍາ​ລັບ​ການ​ທໍາ​ງານ​ຄະ​ນິດ​ສາດ​. ຢ່າງໃດກໍຕາມ, ມັນອາດຈະເຮັດໃຫ້ລະຫັດໄວຂຶ້ນສໍາລັບ
ໂຄງ​ການ​ທີ່​ບໍ່​ໄດ້​ຮຽກ​ຮ້ອງ​ໃຫ້​ມີ​ການ​ຮັບ​ປະ​ກັນ​ຂອງ​ສະ​ເພາະ​ເຫຼົ່າ​ນີ້​. ເປີດໃຊ້
-fno-ເຊັນຊື່-ສູນ, -fno-traping-ຄະນິດສາດ, -fassociative-ຄະນິດສາດ ແລະ -freciprocal-ຄະນິດສາດ.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -fno-unsafe-math-optimizations.

-fassociative-ຄະນິດສາດ
ອະ​ນຸ​ຍາດ​ໃຫ້​ມີ​ການ​ເຊື່ອມ​ໂຍງ​ໃຫມ່​ຂອງ​ຕົວ​ປະ​ຕິ​ບັດ​ການ​ໃນ​ໄລ​ຍະ​ຂອງ​ການ​ດໍາ​ເນີນ​ງານ​ຈຸດ​ທີ່​ເລື່ອນ​ໄດ້​. ນີ້
ລະເມີດມາດຕະຖານພາສາ ISO C ແລະ C++ ໂດຍອາດຈະມີການປ່ຽນແປງຜົນການຄິດໄລ່.
ຫມາຍເຫດ: ການສັ່ງຄືນໃຫມ່ອາດຈະມີການປ່ຽນແປງສັນຍານຂອງສູນເຊັ່ນດຽວກັນກັບບໍ່ສົນໃຈ NaNs ແລະ inhibit ຫຼື
ສ້າງ underflow ຫຼື overflow (ແລະດັ່ງນັ້ນຈຶ່ງບໍ່ສາມາດຖືກນໍາໃຊ້ໃນລະຫັດທີ່ອີງໃສ່ການຮອບ
ພຶດຕິກໍາເຊັ່ນ "(x + 2**52) - 2**52". ອາດຈະຈັດຮຽງການປຽບທຽບຈຸດລອຍຄືນໃໝ່ ແລະ
ດັ່ງນັ້ນອາດຈະບໍ່ຖືກນໍາໃຊ້ໃນເວລາທີ່ການປຽບທຽບຄໍາສັ່ງແມ່ນຕ້ອງການ. ທາງເລືອກນີ້ຕ້ອງການນັ້ນ
ທັງສອງ -fno-ເຊັນຊື່-ສູນ ແລະ -fno-traping-ຄະນິດສາດ ມີຜົນບັງຄັບໃຊ້. ຍິ່ງໄປກວ່ານັ້ນ, ມັນບໍ່ໄດ້ເຮັດໃຫ້
ມີຄວາມຮູ້ສຶກຫຼາຍກັບ - ຄະ​ນິດ​ສາດ​ພື້ນ​ຖານ​. ສໍາລັບ Fortran ທາງເລືອກແມ່ນເປີດອັດຕະໂນມັດເມື່ອ
ທັງສອງ -fno-ເຊັນຊື່-ສູນ ແລະ -fno-traping-ຄະນິດສາດ ມີຜົນບັງຄັບໃຊ້.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -fno-associative-ຄະນິດສາດ.

-freciprocal-ຄະນິດສາດ
ອະ​ນຸ​ຍາດ​ໃຫ້​ຜົນ​ຕອບ​ແທນ​ຂອງ​ຄ່າ​ທີ່​ຈະ​ນໍາ​ໃຊ້​ແທນ​ທີ່​ຈະ​ແບ່ງ​ປັນ​ກັບ​ມູນ​ຄ່າ​ຖ້າ​ຫາກ​ວ່າ​ນີ້​
ເປີດໃຊ້ການເພີ່ມປະສິດທິພາບ. ຕົວຢ່າງ "x / y" ສາມາດຖືກແທນທີ່ດ້ວຍ "x * (1 / y)", ເຊິ່ງແມ່ນ
ເປັນປະໂຫຍດຖ້າ "(1/y)" ແມ່ນຂຶ້ນກັບການລົບລ້າງການສະແດງອອກທົ່ວໄປ. ໃຫ້ສັງເກດວ່ານີ້
ສູນເສຍຄວາມແມ່ນຍໍາແລະເພີ່ມຈໍານວນຂອງ flops ດໍາເນີນການກ່ຽວກັບມູນຄ່າ.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -fno-reciprocal-math.

-ffinite-math-ເທົ່ານັ້ນ
ອະ​ນຸ​ຍາດ​ໃຫ້​ເຫມາະ​ສົມ​ສໍາ​ລັບ​ການ​ເລກ​ຄະ​ນິດ​ຄະ​ນິດ​ຈຸດ​ເລື່ອນ​ທີ່​ສົມ​ມຸດ​ວ່າ arguments ແລະ​
ຜົນໄດ້ຮັບບໍ່ແມ່ນ NaNs ຫຼື +-Infs.

ທາງເລືອກນີ້ບໍ່ໄດ້ເປີດໂດຍໃດໆ -O ທາງ​ເລືອກ​ເນື່ອງ​ຈາກ​ວ່າ​ມັນ​ສາ​ມາດ​ເຮັດ​ໃຫ້​ຜົນ​ຜະ​ລິດ​ທີ່​ບໍ່​ຖືກ​ຕ້ອງ​
ສໍາລັບໂຄງການທີ່ຂຶ້ນກັບການປະຕິບັດທີ່ແນ່ນອນຂອງ IEEE ຫຼື ISO
ກົດ​ລະ​ບຽບ / ຂໍ້​ຈໍາ​ກັດ​ສໍາ​ລັບ​ການ​ທໍາ​ງານ​ຄະ​ນິດ​ສາດ​. ຢ່າງໃດກໍຕາມ, ມັນອາດຈະເຮັດໃຫ້ລະຫັດໄວຂຶ້ນສໍາລັບ
ໂຄງ​ການ​ທີ່​ບໍ່​ຕ້ອງ​ການ​ການ​ຮັບ​ປະ​ກັນ​ຂອງ​ສະ​ເພາະ​ເຫຼົ່າ​ນີ້​.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -fno-finite-math-ເທົ່ານັ້ນ.

-fno-ເຊັນຊື່-ສູນ
ອະ​ນຸ​ຍາດ​ໃຫ້​ການ​ປັບ​ແຕ່ງ​ສໍາ​ລັບ​ການ​ເລກ​ຄະ​ນິດ​ຈຸດ​ເລື່ອນ​ທີ່​ບໍ່​ສົນ​ໃຈ​ການ​ເຊັນ​ຂອງ​ສູນ​.
IEEE ເລກຄະນິດສາດກໍານົດພຶດຕິກໍາຂອງຄ່າ +0.0 ແລະ -0.0 ທີ່ແຕກຕ່າງກັນ, ເຊິ່ງຫຼັງຈາກນັ້ນ.
ຫ້າມຄວາມງ່າຍຂອງການສະແດງອອກເຊັ່ນ x+0.0 ຫຼື 0.0*x (ເຖິງແມ່ນວ່າມີ
-ffinite-math-ເທົ່ານັ້ນ). ທາງເລືອກນີ້ຫມາຍຄວາມວ່າສັນຍານຂອງຜົນໄດ້ຮັບສູນບໍ່ແມ່ນ
ທີ່ສໍາຄັນ.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -fsigned-ສູນ.

-fno-traping-ຄະນິດສາດ
ລວບລວມລະຫັດທີ່ສົມມຸດວ່າການດໍາເນີນການຈຸດລອຍບໍ່ສາມາດສ້າງໃຫ້ຜູ້ໃຊ້ສາມາດເຫັນໄດ້
ກັບດັກ. ກັບດັກເຫຼົ່ານີ້ປະກອບມີການແບ່ງອອກໂດຍສູນ, overflow, underflow, ຜົນໄດ້ຮັບ inexact ແລະ
ການດໍາເນີນງານບໍ່ຖືກຕ້ອງ. ທາງເລືອກນີ້ຕ້ອງການນັ້ນ -fno-signaling-nans ມີຜົນບັງຄັບໃຊ້.
ການ​ຕັ້ງ​ຄ່າ​ທາງ​ເລືອກ​ນີ້​ອາດ​ຈະ​ອະ​ນຸ​ຍາດ​ໃຫ້​ລະ​ຫັດ​ໄວ​ຂຶ້ນ​ຖ້າ​ຫາກ​ວ່າ​ຫນຶ່ງ​ອີງ​ໃສ່ "ບໍ່​ຢຸດ​ເຊົາ​" ເລກ​ຄະ​ນິດ​ສາດ IEEE​,
ຍົກ​ຕົວ​ຢ່າງ.

ຕົວເລືອກນີ້ບໍ່ຄວນເປີດໂດຍຜູ້ໃດກໍ່ຕາມ -O ທາງ​ເລືອກ​ເນື່ອງ​ຈາກ​ວ່າ​ມັນ​ສາ​ມາດ​ສົ່ງ​ຜົນ​ໃນ​
ຜົນຜະລິດທີ່ບໍ່ຖືກຕ້ອງສໍາລັບໂຄງການທີ່ຂຶ້ນກັບການປະຕິບັດທີ່ແນ່ນອນຂອງ IEEE ຫຼື ISO
ກົດ​ລະ​ບຽບ / ຂໍ້​ຈໍາ​ກັດ​ສໍາ​ລັບ​ການ​ທໍາ​ງານ​ຄະ​ນິດ​ສາດ​.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -ftrapping-ຄະນິດສາດ.

- ຄະ​ນິດ​ສາດ​ພື້ນ​ຖານ​
ປິດໃຊ້ງານການຫັນເປັນ ແລະການເພີ່ມປະສິດທິພາບທີ່ສົມມຸດການຮອບຕົວຈຸດເລື່ອນ
ພຶດຕິກຳ. ນີ້ແມ່ນຮອບຫາສູນສຳລັບການປ່ຽນຈຸດລອຍເປັນຈຳນວນເຕັມ, ແລະ
ຮອບຫາໃກ້ທີ່ສຸດສຳລັບການຕັດເລກເລກຄະນິດອື່ນໆທັງໝົດ. ທາງເລືອກນີ້ຄວນຈະເປັນ
ກໍານົດສໍາລັບບັນດາໂຄງການທີ່ປ່ຽນຮູບແບບການຮອບ FP ແບບໄດນາມິກ, ຫຼືອາດຈະເປັນ
ປະຕິບັດດ້ວຍຮູບແບບການຮອບທີ່ບໍ່ແມ່ນຄ່າເລີ່ມຕົ້ນ. ຕົວເລືອກນີ້ປິດການພັບຄົງທີ່ຂອງ
ການສະແດງຈຸດລອຍໃນເວລາລວບລວມ (ເຊິ່ງອາດຈະໄດ້ຮັບຜົນກະທົບຈາກໂຫມດມົນ)
ແລະການຫັນປ່ຽນເລກເລກທີ່ບໍ່ປອດໄພໃນປະກົດຕົວຂຶ້ນກັບເຄື່ອງໝາຍ
ຮູບ​ແບບ​ການ​ມົນ​.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -fno-rounding-ຄະນິດສາດ.

ຕົວເລືອກນີ້ແມ່ນທົດລອງ ແລະບໍ່ໄດ້ຮັບປະກັນທີ່ຈະປິດການໃຊ້ງານ GCC ທັງໝົດ
ການເພີ່ມປະສິດທິພາບທີ່ໄດ້ຮັບຜົນກະທົບຈາກຮູບແບບການຮອບ. ຮຸ່ນໃນອະນາຄົດຂອງ GCC ອາດຈະສະຫນອງ
ການຄວບຄຸມທີ່ລະອຽດກວ່າຂອງການຕັ້ງຄ່ານີ້ໂດຍໃຊ້ "FENV_ACCESS" pragma ຂອງ C99. ເສັ້ນຄໍາສັ່ງນີ້
ທາງເລືອກຈະຖືກໃຊ້ເພື່ອລະບຸສະຖານະເລີ່ມຕົ້ນຂອງ "FENV_ACCESS".

-fsignaling-nans
ລວບລວມລະຫັດທີ່ສົມມຸດວ່າ IEEE signaling NaNs ອາດຈະສ້າງໃສ່ກັບດັກທີ່ຜູ້ໃຊ້ສາມາດເຫັນໄດ້ໃນລະຫວ່າງ
ການດໍາເນີນງານຈຸດລອຍ. ການຕັ້ງຄ່າຕົວເລືອກນີ້ປິດການເພີ່ມປະສິດທິພາບທີ່ອາດຈະປ່ຽນແປງ
ຈໍານວນຂໍ້ຍົກເວັ້ນທີ່ເຫັນໄດ້ດ້ວຍການສົ່ງສັນຍານ NaNs. ທາງເລືອກນີ້ຫມາຍເຖິງ
-ftrapping-ຄະນິດສາດ.

ຕົວເລືອກນີ້ເຮັດໃຫ້ເມໂຄຣໂປຣເຊສເຊີກ່ອນ "__SUPPORT_SNAN__" ຖືກກຳນົດ.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -fno-signaling-nans.

ຕົວເລືອກນີ້ແມ່ນທົດລອງ ແລະບໍ່ໄດ້ຮັບປະກັນທີ່ຈະປິດການໃຊ້ງານ GCC ທັງໝົດ
ການເພີ່ມປະສິດທິພາບທີ່ສົ່ງຜົນກະທົບຕໍ່ພຶດຕິກໍາ NaN.

-fsingle-precision-constant
ປະຕິບັດຄ່າຄົງທີ່ຈຸດທີ່ລອຍຕົວເປັນຄວາມແມ່ນຍໍາອັນດຽວ ແທນທີ່ຈະເປັນການແປງແບບ implicitly
ພວກມັນເປັນຄ່າຄົງທີ່ສອງເທົ່າ.

-fcx-limited-range
ເມື່ອເປີດໃຊ້ງານ, ຕົວເລືອກນີ້ລະບຸວ່າຂັ້ນຕອນການຫຼຸດໄລຍະແມ່ນບໍ່ຈໍາເປັນເມື່ອໃດ
ປະຕິບັດການແບ່ງສະລັບສັບຊ້ອນ. ນອກຈາກນີ້, ຍັງບໍ່ມີການກວດສອບວ່າຜົນຂອງ a
ການຄູນຊັບຊ້ອນຫຼືການຫານແມ່ນ "NaN + I*NaN", ດ້ວຍຄວາມພະຍາຍາມທີ່ຈະຊ່ວຍກູ້
ສະຖານະການໃນກໍລະນີນັ້ນ. ຄ່າເລີ່ມຕົ້ນແມ່ນ -fno-cx-limited-range, ແຕ່ຖືກເປີດໃຊ້ໂດຍ
-fast ຄະ​ນິດ​ສາດ​.

ຕົວເລືອກນີ້ຄວບຄຸມການຕັ້ງຄ່າເລີ່ມຕົ້ນຂອງ pragma ISO C99 "CX_LIMITED_RANGE".
ຢ່າງໃດກໍຕາມ, ທາງເລືອກແມ່ນໃຊ້ກັບທຸກພາສາ.

-fcx-fortran-ກົດລະບຽບ
ການຄູນແລະການແບ່ງສະລັບສັບຊ້ອນປະຕິບັດຕາມກົດລະບຽບ Fortran. ການຫຼຸດຜ່ອນຂອບເຂດແມ່ນເຮັດເປັນ
ສ່ວນຫນຶ່ງຂອງການແບ່ງສະລັບສັບຊ້ອນ, ແຕ່ບໍ່ມີການກວດສອບວ່າຜົນໄດ້ຮັບຂອງສະລັບສັບຊ້ອນ
ການຄູນຫຼືການແບ່ງແມ່ນ "NaN + I*NaN", ດ້ວຍຄວາມພະຍາຍາມທີ່ຈະຊ່ອຍກູ້ສະຖານະການ
ໃນ​ກໍ​ລະ​ນີ​ນັ້ນ.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -fno-cx-fortran-ກົດລະບຽບ.

ຕົວເລືອກຕໍ່ໄປນີ້ຄວບຄຸມການເພີ່ມປະສິດທິພາບທີ່ອາດຈະປັບປຸງການປະຕິບັດ, ແຕ່ບໍ່ແມ່ນ
ເປີດໃຊ້ໂດຍໃດໆ -O ທາງເລືອກ. ພາກນີ້ປະກອບມີທາງເລືອກໃນການທົດລອງທີ່ອາດຈະຜະລິດ
ລະ​ຫັດ​ທີ່​ແຕກ​ຫັກ​.

-fbranch-ຄວາມເປັນໄປໄດ້
ຫຼັງ​ຈາກ​ການ​ດໍາ​ເນີນ​ການ​ໂຄງ​ການ​ທີ່​ສັງ​ລວມ​ກັບ​ -fprofile-arcs, ທ່ານສາມາດລວບລວມມັນເປັນຄັ້ງທີສອງ
ການນໍາໃຊ້ -fbranch-ຄວາມເປັນໄປໄດ້, ເພື່ອປັບປຸງການເພີ່ມປະສິດທິພາບໂດຍອີງໃສ່ຈໍານວນເວລາ
ແຕ່ລະສາຂາໄດ້ຖືກປະຕິບັດ. ໃນເວລາທີ່ໂຄງການລວບລວມກັບ -fprofile-arcs ອອກຈາກມັນຊ່ວຍປະຢັດ
ການປະຕິບັດ arc ນັບເປັນໄຟລ໌ທີ່ເອີ້ນວ່າ sourcename.gcda ສໍາລັບແຕ່ລະໄຟລ໌ແຫຼ່ງ. ໄດ້
ຂໍ້ມູນໃນໄຟລ໌ຂໍ້ມູນນີ້ແມ່ນຂຶ້ນກັບໂຄງສ້າງຂອງຂໍ້ມູນທີ່ສ້າງຂຶ້ນ
ລະຫັດ, ດັ່ງນັ້ນທ່ານຕ້ອງໃຊ້ລະຫັດແຫຼ່ງດຽວກັນແລະທາງເລືອກການເພີ່ມປະສິດທິພາບດຽວກັນສໍາລັບທັງສອງ
ການລວບລວມ.

ກັບ -fbranch-ຄວາມເປັນໄປໄດ້, GCC puts a REG_BR_PROB ຫມາຍ​ເຫດ​ໃນ​ແຕ່​ລະ​ JUMP_INSN ແລະ
CALL_INSN. ເຫຼົ່ານີ້ສາມາດຖືກນໍາໃຊ້ເພື່ອປັບປຸງການເພີ່ມປະສິດທິພາບ. ໃນປັດຈຸບັນ, ພວກເຂົາເຈົ້າໄດ້ຖືກນໍາໃຊ້ພຽງແຕ່
ຢູ່ໃນສະຖານທີ່ດຽວ: ໃນ reorg.c, ແທນທີ່ຈະຄາດເດົາວ່າສາຂາໃດເປັນໄປໄດ້ຫຼາຍທີ່ສຸດ
ເອົາ, ໄດ້ REG_BR_PROB ຄ່າແມ່ນໃຊ້ເພື່ອກໍານົດຢ່າງແນ່ນອນວ່າເສັ້ນທາງໃດຖືກນໍາໄປຫຼາຍກວ່າ
ເລື້ອຍໆ.

-fprofile-ຄ່າ
ຖ້າລວມກັບ -fprofile-arcs, ມັນເພີ່ມລະຫັດເພື່ອໃຫ້ຂໍ້ມູນບາງຢ່າງກ່ຽວກັບຄ່າຂອງ
ການສະແດງອອກໃນໂຄງການແມ່ນລວບລວມ.

ກັບ -fbranch-ຄວາມເປັນໄປໄດ້, ມັນອ່ານຄືນຂໍ້ມູນທີ່ເກັບກໍາຈາກຄ່າ profileing ຂອງ
ການສະແດງອອກສໍາລັບການນໍາໃຊ້ໃນການເພີ່ມປະສິດທິພາບ.

ເປີດໃຊ້ດ້ວຍ -fprofile-generate ແລະ -fprofile-ໃຊ້.

-fvpt
ຖ້າລວມກັບ -fprofile-arcs, ມັນສັ່ງໃຫ້ compiler ເພີ່ມລະຫັດເພື່ອລວບລວມ
ຂໍ້ມູນກ່ຽວກັບຄຸນຄ່າຂອງການສະແດງອອກ.

ກັບ -fbranch-ຄວາມເປັນໄປໄດ້, ມັນອ່ານຄືນຂໍ້ມູນທີ່ເກັບກໍາແລະປະຕິບັດຕົວຈິງ
ການເພີ່ມປະສິດທິພາບໂດຍອີງໃສ່ພວກມັນ. ໃນປັດຈຸບັນການເພີ່ມປະສິດທິພາບປະກອບມີການພິເສດຂອງ
ການປະຕິບັດການແບ່ງສ່ວນໂດຍໃຊ້ຄວາມຮູ້ກ່ຽວກັບມູນຄ່າຂອງຕົວຫານ.

-frename-ລົງທະບຽນ
ພະຍາຍາມຫຼີກລ້ຽງການອ້າງອິງທີ່ບໍ່ຖືກຕ້ອງໃນລະຫັດທີ່ກໍານົດໄວ້ໂດຍການນໍາໃຊ້ການລົງທະບຽນໄວ້
ຫຼາຍກວ່າຫຼັງຈາກການຈັດສັນການລົງທະບຽນ. ການເພີ່ມປະສິດທິພາບນີ້ຈະເປັນປະໂຫຍດຫຼາຍທີ່ສຸດກັບໂປເຊດເຊີ
ຈໍາ​ນວນ​ຫຼາຍ​ຂອງ​ການ​ລົງ​ທະ​ບຽນ​. ອີງຕາມຮູບແບບຂໍ້ມູນ debug ທີ່ໄດ້ຮັບຮອງເອົາໂດຍເປົ້າຫມາຍ,
ແນວໃດກໍ່ຕາມ, ມັນສາມາດເຮັດໃຫ້ການດີບັກເປັນໄປບໍ່ໄດ້, ເພາະວ່າຕົວແປຈະບໍ່ຢູ່ໃນ a
"ທະບຽນເຮືອນ".

ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນດ້ວຍ -funroll-loops ແລະ -fpeel-loops.

-ftracer
ດໍາເນີນການຊໍ້າຊ້ອນຫາງເພື່ອຂະຫຍາຍຂະຫນາດ superblock. ການຫັນປ່ຽນນີ້ເຮັດໃຫ້ງ່າຍດາຍ
ການຄວບຄຸມການໄຫຼເຂົ້າຂອງຫນ້າທີ່ອະນຸຍາດໃຫ້ການເພີ່ມປະສິດທິພາບອື່ນໆເຮັດວຽກທີ່ດີກວ່າ.

ເປີດໃຊ້ດ້ວຍ -fprofile-ໃຊ້.

-funroll-loops
ຖອດ loops ທີ່ມີຈໍານວນການຊໍ້າຄືນສາມາດຖືກກໍານົດໃນເວລາລວບລວມຫຼືຕາມ
ເຂົ້າໄປໃນ loop ໄດ້. -funroll-loops implies -frerun-cse-after-loop, -fweb ແລະ
-frename-ລົງທະບຽນ. ມັນຍັງເປີດການປອກເປືອກ loop ຢ່າງສົມບູນ (ເຊັ່ນການໂຍກຍ້າຍຢ່າງສົມບູນຂອງ
loops ມີຈໍານວນຄົງທີ່ຂະຫນາດນ້ອຍຂອງ iterations). ທາງເລືອກນີ້ເຮັດໃຫ້ລະຫັດຂະຫນາດໃຫຍ່, ແລະ
ອາດຈະ ຫຼືອາດຈະບໍ່ເຮັດໃຫ້ມັນແລ່ນໄວຂຶ້ນ.

ເປີດໃຊ້ດ້ວຍ -fprofile-ໃຊ້.

-funroll-all-loops
ຖອດ loops ທັງຫມົດ, ເຖິງແມ່ນວ່າຈໍານວນການຊໍ້າຄືນຂອງເຂົາເຈົ້າບໍ່ແນ່ນອນໃນເວລາທີ່ loop ແມ່ນ
ເຂົ້າ. ນີ້ປົກກະຕິແລ້ວເຮັດໃຫ້ໂຄງການເຮັດວຽກຊ້າຫຼາຍ. -funroll-all-loops ຫມາຍເຖິງ
ທາງ​ເລືອກ​ດຽວ​ກັນ​ກັບ​ -funroll-loops.

-fpeel-loops
Peels loops ທີ່ມີຂໍ້ມູນພຽງພໍທີ່ພວກເຂົາບໍ່ມ້ວນຫຼາຍ (ຈາກ
ຕໍານິຕິຊົມໂປຣໄຟລ໌). ມັນຍັງເປີດການປອກເປືອກ loop ຢ່າງສົມບູນ (ເຊັ່ນການໂຍກຍ້າຍຢ່າງສົມບູນຂອງ
loops ມີຈໍານວນຄົງທີ່ຂະຫນາດນ້ອຍຂອງ iterations).

ເປີດໃຊ້ດ້ວຍ -fprofile-ໃຊ້.

-fmove-loop-invariants
ເປີດໃຊ້ການສົ່ງຜ່ານການເຄື່ອນໄຫວແບບບໍ່ປ່ຽນແປງຂອງ loop ໃນ RTL loop optimizer. ເປີດໃຊ້ຢູ່ໃນລະດັບ
-O1

-funswitch-loops
ຍ້າຍສາຂາທີ່ມີເງື່ອນໄຂຂອງ loop invariant ອອກຈາກ loop, ມີການຊໍ້າກັນຂອງ
loop ທັງສອງສາຂາ (ດັດແກ້ຕາມຜົນຂອງເງື່ອນໄຂ).

-function-sections
-fdata-sections
ວາງແຕ່ລະຫນ້າທີ່ຫຼືລາຍການຂໍ້ມູນເຂົ້າໄປໃນສ່ວນຂອງຕົນເອງໃນໄຟລ໌ຜົນຜະລິດຖ້າເປົ້າຫມາຍ
ສະຫນັບສະຫນູນພາກສ່ວນທີ່ມັກ. ຊື່ຂອງຟັງຊັນຫຼືຊື່ຂອງລາຍການຂໍ້ມູນ
ກໍານົດຊື່ຂອງພາກສ່ວນໃນໄຟລ໌ຜົນຜະລິດ.

ໃຊ້ຕົວເລືອກເຫຼົ່ານີ້ໃນລະບົບທີ່ຕົວເຊື່ອມຕໍ່ສາມາດປະຕິບັດການເພີ່ມປະສິດທິພາບເພື່ອປັບປຸງ
ທ້ອງຖິ່ນຂອງການອ້າງອີງໃນພື້ນທີ່ຄໍາແນະນໍາ. ລະບົບສ່ວນໃຫຍ່ໃຊ້ວັດຖຸ ELF
ຮູບແບບແລະໂປເຊດເຊີ SPARC ແລ່ນ Solaris 2 ມີຕົວເຊື່ອມຕໍ່ທີ່ມີການເພີ່ມປະສິດທິພາບດັ່ງກ່າວ.
AIX ອາດມີການເພີ່ມປະສິດທິພາບເຫຼົ່ານີ້ໃນອະນາຄົດ.

ພຽງແຕ່ໃຊ້ທາງເລືອກເຫຼົ່ານີ້ເມື່ອມີຜົນປະໂຫຍດທີ່ສໍາຄັນຈາກການເຮັດເຊັ່ນນັ້ນ. ເມື່ອ​ເຈົ້າ
ລະບຸທາງເລືອກເຫຼົ່ານີ້, assembler ແລະ linker ຈະສ້າງວັດຖຸຂະຫນາດໃຫຍ່ແລະ
ໄຟລ໌ທີ່ສາມາດປະຕິບັດໄດ້ແລະຍັງຈະຊ້າລົງ. ທ່ານຈະບໍ່ສາມາດໃຊ້ "gprof" ທັງຫມົດ
ລະບົບຖ້າຫາກວ່າທ່ານລະບຸທາງເລືອກນີ້ແລະທ່ານອາດຈະມີບັນຫາກັບການດີບັກຖ້າຫາກວ່າທ່ານ
ລະບຸທັງທາງເລືອກນີ້ ແລະ -g.

-fbranch-target-load-optimize
ປະຕິບັດການເພີ່ມປະສິດທິພາບການໂຫຼດຂອງສາຂາກ່ອນການຂະຫຍາຍກະທູ້ prologue / epilogue.
ການ​ນໍາ​ໃຊ້​ຂອງ​ການ​ລົງ​ທະ​ບຽນ​ເປົ້າ​ຫມາຍ​ໂດຍ​ປົກ​ກະ​ຕິ​ສາ​ມາດ​ໄດ້​ຮັບ​ການ​ເປີດ​ເຜີຍ​ພຽງ​ແຕ່​ໃນ​ລະ​ຫວ່າງ​ການ​ໂຫຼດ​, ດັ່ງ​ນັ້ນ hoisting​
loads ອອກຈາກ loops ແລະດໍາເນີນການກໍານົດເວລາ inter-block ຕ້ອງການການເພີ່ມປະສິດທິພາບແຍກຕ່າງຫາກ
ຜ່ານ.

-fbranch-target-load-optimize2
ປະຕິບັດການເພີ່ມປະສິດທິພາບການໂຫຼດຂອງສາຂາຫຼັງຈາກຫົວຂໍ້ prologue / epilogue.

-fbtr-bb-ສະເພາະ
ໃນ​ເວ​ລາ​ທີ່​ປະ​ຕິ​ບັດ​ການ​ເພີ່ມ​ປະ​ສິດ​ທິ​ການ​ໂຫຼດ​ຂອງ​ເປົ້າ​ຫມາຍ​ສາ​ຂາ​, ຢ່າ​ນໍາ​ໃຊ້​ໃຫມ່​ເປົ້າ​ຫມາຍ​ສາ​ຂາ​
ລົງທະບຽນພາຍໃນບລັອກພື້ນຖານໃດໆ.

-stack-protector
ປ່ອຍລະຫັດເພີ່ມເຕີມເພື່ອກວດເບິ່ງການລົ້ນຂອງບັບເຟີ, ເຊັ່ນ: ການໂຈມຕີສະເຕກຕີ. ນີ້
ແມ່ນເຮັດໄດ້ໂດຍການເພີ່ມຕົວແປກອງໃຫ້ກັບຫນ້າທີ່ທີ່ມີວັດຖຸທີ່ມີຄວາມສ່ຽງ. ນີ້
ປະກອບມີຟັງຊັນທີ່ໂທຫາ alloca, ແລະຟັງຊັນທີ່ມີ buffers ໃຫຍ່ກວ່າ 8 bytes.
ກອງໄດ້ຖືກເລີ່ມຕົ້ນເມື່ອຟັງຊັນຖືກໃສ່ແລະຫຼັງຈາກນັ້ນກວດເບິ່ງໃນເວລາທີ່
ຟັງຊັນອອກ. ຖ້າການກວດສອບຄວາມລົ້ມເຫລວ, ຂໍ້ຄວາມສະແດງຂໍ້ຜິດພາດຈະຖືກພິມອອກແລະໂຄງການ
ອອກ.

ຫມາຍ​ເຫດ​: ໃນ Ubuntu 6.10 ແລະ​ສະ​ບັບ​ຕໍ່​ມາ​ທາງ​ເລືອກ​ນີ້​ແມ່ນ​ໄດ້​ຮັບ​ການ​ເປີດ​ນໍາ​ໃຊ້​ໂດຍ​ຄ່າ​ເລີ່ມ​ຕົ້ນ​ສໍາ​ລັບ C​, C ++​,
ObjC, ObjC++, ຖ້າບໍ່ມີ -fno-stack-protector, -nostdlib, ແລະ - freestanding ມີ
ພົບເຫັນ.

-fstack-protector-ທັງໝົດ
ຄື -stack-protector ຍົກ​ເວັ້ນ​ແຕ່​ຫນ້າ​ທີ່​ທັງ​ຫມົດ​ແມ່ນ​ໄດ້​ຮັບ​ການ​ປ້ອງ​ກັນ​.

-fsection-anchors
ພະຍາຍາມຫຼຸດຜ່ອນການຄິດໄລ່ທີ່ຢູ່ສັນຍາລັກໂດຍໃຊ້ "ສະມໍ" ທີ່ແບ່ງປັນ.
ສັນຍາລັກເພື່ອແກ້ໄຂວັດຖຸໃກ້ຄຽງ. ການຫັນປ່ຽນນີ້ສາມາດຊ່ວຍຫຼຸດຜ່ອນຈໍານວນ
ຂອງ GOT entries ແລະ GOT ເຂົ້າເຖິງໃນບາງເປົ້າຫມາຍ.

ສໍາລັບຕົວຢ່າງ, ການປະຕິບັດຫນ້າທີ່ "foo" ຕໍ່ໄປນີ້:

static int a, b, c;
int foo (void) { ກັບຄືນ a + b + c; }

ປົກກະຕິແລ້ວຈະຄິດໄລ່ທີ່ຢູ່ຂອງຕົວແປທັງສາມ, ແຕ່ຖ້າທ່ານລວບລວມມັນ
ກັບ -fsection-anchors, ມັນຈະເຂົ້າເຖິງຕົວແປຈາກຈຸດສະມໍທົ່ວໄປ
ແທນ. ຜົນກະທົບແມ່ນຄ້າຍຄືກັນກັບ pseudocode ຕໍ່ໄປນີ້ (ເຊິ່ງບໍ່ຖືກຕ້ອງ C):

int foo (void)
{
ລົງທະບຽນ int *xr = &x;
ກັບຄືນ xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
}

ບໍ່ແມ່ນເປົ້າໝາຍທັງໝົດທີ່ຮອງຮັບຕົວເລືອກນີ້.

--param ຊື່=ມູນຄ່າ
ໃນບາງບ່ອນ, GCC ໃຊ້ຄ່າຄົງທີ່ຕ່າງໆເພື່ອຄວບຄຸມປະລິມານການເພີ່ມປະສິດທິພາບນັ້ນ
ແມ່ນແລ້ວ. ຕົວຢ່າງ, GCC ຈະບໍ່ຢູ່ໃນແຖວຟັງຊັນທີ່ມີຫຼາຍກວ່າທີ່ແນ່ນອນ
ຈໍານວນຂອງຄໍາແນະນໍາ. ທ່ານສາມາດຄວບຄຸມບາງຄ່າຄົງທີ່ເຫຼົ່ານີ້ຢູ່ໃນເສັ້ນຄໍາສັ່ງ
ການນໍາໃຊ້ --param ທາງເລືອກ.

ຊື່ຂອງຕົວກໍານົດການສະເພາະ, ແລະຄວາມຫມາຍຂອງຄ່າ, ແມ່ນ tied ກັບ
ພາຍໃນຂອງ compiler, ແລະອາດຈະມີການປ່ຽນແປງໂດຍບໍ່ມີການແຈ້ງການໃນອະນາຄົດ
ປ່ອຍອອກມາ.

ໃນແຕ່ລະກໍລະນີ, ໄດ້ ມູນຄ່າ ເປັນຈຳນວນເຕັມ. ທາງ​ເລືອກ​ທີ່​ອະ​ນຸ​ຍາດ​ໃຫ້​ສໍາ​ລັບ​ການ​ ຊື່ ແມ່ນໃຫ້ຢູ່ໃນ
ຕາຕະລາງຕໍ່ໄປນີ້:

ຄາດຄະເນ-ສາຂາ-ຜົນໄດ້ຮັບ
ເມື່ອສາຂາຖືກຄາດຄະເນວ່າຈະຖືກປະຕິບັດກັບຄວາມເປັນໄປໄດ້ຕ່ໍາກວ່າຂອບເຂດນີ້
(ເປັນເປີເຊັນ), ຫຼັງຈາກນັ້ນມັນໄດ້ຖືກພິຈາລະນາດີ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 10.

ສູງສຸດ-crossjump-edges
ຈໍາ​ນວນ​ສູງ​ສຸດ​ຂອງ​ແຂບ​ຂາ​ເຂົ້າ​ທີ່​ຈະ​ພິ​ຈາ​ລະ​ນາ​ສໍາ​ລັບ​ການ crossjumping​. ສູດການຄິດໄລ່
ໃຊ້ໂດຍ -fcrossjumping ແມ່ນ O(N^2) ໃນຈຳນວນຂອບທີ່ເຂົ້າມາແຕ່ລະທ່ອນໄມ້.
ການເພີ່ມມູນຄ່າຫມາຍເຖິງການເພີ່ມປະສິດທິພາບທີ່ຮຸກຮານຫຼາຍ, ເຮັດໃຫ້ເວລາການລວບລວມ
ເພີ່ມຂຶ້ນໂດຍອາດຈະເປັນການປັບປຸງຂະຫນາດນ້ອຍໃນຂະຫນາດປະຕິບັດໄດ້.

min-crossjump-insns
ຈໍານວນຄໍາແນະນໍາຕໍາ່ສຸດທີ່ຈະຕ້ອງຖືກຈັບຄູ່ໃນຕອນທ້າຍຂອງສອງຕັນ
ກ່ອນທີ່ຈະ crossjumping ຈະໄດ້ຮັບການປະຕິບັດໃຫ້ເຂົາເຈົ້າ. ຄ່ານີ້ຖືກລະເລີຍໃນກໍລະນີ
ບ່ອນທີ່ຄໍາແນະນໍາທັງຫມົດໃນບລັອກທີ່ຖືກຂ້າມຈາກແມ່ນກົງກັນ. ໄດ້
ຄ່າເລີ່ມຕົ້ນແມ່ນ 5.

max-grow-copy-bb-insns
ປັດໄຈການຂະຫຍາຍຂະຫນາດລະຫັດສູງສຸດໃນເວລາທີ່ຄັດລອກບລັອກພື້ນຖານແທນທີ່ຈະເປັນ
ໂດດ. ການຂະຫຍາຍແມ່ນທຽບກັບຄໍາແນະນໍາແບບໂດດ. ຄ່າເລີ່ມຕົ້ນແມ່ນ
8.

max-goto-duplication-insns
ຈຳນວນສູງສຸດຂອງຄຳແນະນຳທີ່ຈະຊ້ຳກັບບລັອກທີ່ໂດດໄປຫາ a
Goto ຄິດໄລ່. ເພື່ອຫຼີກເວັ້ນພຶດຕິກໍາ O(N^2) ໃນຈໍານວນການຜ່ານ, ປັດໃຈ GCC
ຄິດໄລ່ gotos ໃນຕອນຕົ້ນຂອງຂະບວນການລວບລວມ, ແລະ unfactors ໃຫ້ເຂົາເຈົ້າເປັນຊ້າ
ເປັນໄປໄດ້. ພຽງແຕ່ການກະໂດດທີ່ຄິດໄລ່ໃນຕອນທ້າຍຂອງທ່ອນໄມ້ພື້ນຖານທີ່ມີບໍ່ເກີນ max-
goto-duplication-insns ແມ່ນ unfactored. ຄ່າເລີ່ມຕົ້ນແມ່ນ 8.

max-delay-slot-insn-search
ຈໍານວນສູງສຸດຂອງຄໍາແນະນໍາທີ່ຈະພິຈາລະນາໃນເວລາທີ່ຊອກຫາຄໍາແນະນໍາທີ່ຈະ
ຕື່ມຂໍ້ມູນໃສ່ຊ່ອງຊັກຊ້າ. ຖ້າ​ຫາກ​ວ່າ​ຫຼາຍ​ກ​່​ວາ​ຈໍາ​ນວນ​ໂດຍ​ຕົນ​ເອງ​ຂອງ​ຄໍາ​ແນະ​ນໍາ​ແມ່ນ​
ຄົ້ນຫາ, ການປະຫຍັດເວລາຈາກການຕື່ມຊ່ອງການຊັກຊ້າຈະຫນ້ອຍທີ່ສຸດ, ສະນັ້ນຢຸດ
ກຳລັງຊອກຫາ. ການເພີ່ມມູນຄ່າຫມາຍເຖິງການເພີ່ມປະສິດທິພາບທີ່ຮຸກຮານຫຼາຍ, ເຮັດໃຫ້
ເວລາການລວບລວມເພີ່ມຂຶ້ນກັບການປັບປຸງເລັກນ້ອຍໃນເວລາປະຕິບັດ.

max-delay-slot-live-search
ໃນ​ເວ​ລາ​ທີ່​ພະ​ຍາ​ຍາມ​ທີ່​ຈະ​ຕື່ມ​ຂໍ້​ມູນ​ໃສ່​ການ​ຊັກ​ຊ້າ​, ຈໍາ​ນວນ​ສູງ​ສຸດ​ຂອງ​ຄໍາ​ແນະ​ນໍາ​ທີ່​ຈະ​ພິ​ຈາ​ລະ​ນາ​
ເມື່ອຊອກຫາບລັອກທີ່ມີຂໍ້ມູນການລົງທະບຽນສົດທີ່ຖືກຕ້ອງ. ເພີ່ມຂຶ້ນນີ້
ມູນຄ່າທີ່ເລືອກ arbitrarily ຫມາຍຄວາມວ່າການເພີ່ມປະສິດທິພາບຮຸກຮານຫຼາຍ, ເພີ່ມທະວີການ
ເວລາລວບລວມ. ພາລາມິເຕີນີ້ຄວນຈະຖືກໂຍກຍ້າຍອອກເມື່ອລະຫັດສະລັອດຕິງຊັກຊ້າ
ຂຽນຄືນໃຫມ່ເພື່ອຮັກສາເສັ້ນສະແດງການໄຫຼເຂົ້າຄວບຄຸມ.

max-gcse-memory
ຈໍານວນສູງສຸດໂດຍປະມານຂອງຫນ່ວຍຄວາມຈໍາທີ່ຈະໄດ້ຮັບການຈັດສັນເພື່ອ
ປະຕິບັດການເພີ່ມປະສິດທິພາບການລົບລ້າງ subexpression ທົ່ວໄປທົ່ວໂລກ. ຖ້າຄວາມຈໍາຫຼາຍ
ຫຼາຍກວ່າທີ່ກໍານົດໄວ້ແມ່ນຕ້ອງການ, ການເພີ່ມປະສິດທິພາບຈະບໍ່ຖືກເຮັດ.

max-gcse-insertion-ratio
ຖ້າອັດຕາສ່ວນຂອງການໃສ່ການສະແດງອອກຕໍ່ການລຶບແມ່ນໃຫຍ່ກວ່າຄ່ານີ້ສໍາລັບ
ການສະແດງອອກໃດໆ, ຫຼັງຈາກນັ້ນ RTL PRE ຈະໃສ່ຫຼືເອົາການສະແດງອອກແລະດັ່ງນັ້ນຈຶ່ງອອກໄປ
ການຄິດໄລ່ຊ້ຳຊ້ອນບາງສ່ວນໃນກະແສຄຳແນະນຳ. ຄ່າເລີ່ມຕົ້ນແມ່ນ
20​.

max-pending-list-length
ຈໍານວນສູງສຸດຂອງຕາຕະລາງການຂຶ້ນກັບທີ່ຍັງຄ້າງຢູ່ຈະອະນຸຍາດໃຫ້ກ່ອນທີ່ຈະ flushing
ສະຖານະປະຈຸບັນແລະເລີ່ມຕົ້ນໃຫມ່. ຫນ້າທີ່ຂະຫນາດໃຫຍ່ທີ່ມີສາຂາຈໍານວນຫນ້ອຍຫຼືການໂທ
ສາມາດສ້າງລາຍການທີ່ມີຂະຫນາດໃຫຍ່ເກີນໄປທີ່ບໍລິໂພກຄວາມຊົງຈໍາແລະຊັບພະຍາກອນໂດຍບໍ່ຈໍາເປັນ.

max-modulo-backtrack-attempts
ຈໍານວນສູງສຸດຂອງຄວາມພະຍາຍາມ backtrack ທີ່ກໍານົດເວລາຄວນຈະເຮັດໃນເວລາທີ່ modulo
ການຈັດຕາຕະລາງ loop. ຄ່າທີ່ໃຫຍ່ກວ່າສາມາດເພີ່ມເວລາການລວບລວມໄດ້.

max-inline-insns-single
ຕົວກໍານົດການຫຼາຍອັນຄວບຄຸມ inliner ຕົ້ນໄມ້ທີ່ໃຊ້ໃນ gcc. ຕົວເລກນີ້ກໍານົດ
ຈໍານວນຄໍາແນະນໍາສູງສຸດ (ນັບຢູ່ໃນຕົວແທນພາຍໃນຂອງ GCC) ໃນ a
ຟັງຊັນດຽວທີ່ inliner ຕົ້ນໄມ້ຈະພິຈາລະນາສໍາລັບການ inlining. ນີ້ເທົ່ານັ້ນ
ຜົນກະທົບຕໍ່ຫນ້າທີ່ປະກາດໃນແຖວແລະວິທີການປະຕິບັດໃນການປະກາດຊັ້ນຮຽນ
(C++). ຄ່າເລີ່ມຕົ້ນແມ່ນ 400.

max-inline-insns-auto
ເມື່ອທ່ານໃຊ້ -finline-functions (ລວມຢູ່ໃນ -O3), ຫຼາຍຫນ້າທີ່ຈະ
ຖ້າບໍ່ດັ່ງນັ້ນຈະຖືກພິຈາລະນາສໍາລັບການ inlining ໂດຍ compiler ຈະຖືກສືບສວນ. ເຖິງ
ຫນ້າທີ່ເຫຼົ່ານັ້ນ, ຂອບເຂດຈໍາກັດທີ່ແຕກຕ່າງກັນ (ຫຼາຍ) ເມື່ອທຽບກັບຫນ້າທີ່
ປະກາດໃນແຖວສາມາດນຳໃຊ້ໄດ້. ຄ່າເລີ່ມຕົ້ນແມ່ນ 40.

large-function-insns
ຂອບເຂດຈໍາກັດການກໍານົດຫນ້າທີ່ຂະຫນາດໃຫຍ່ແທ້ໆ. ສໍາລັບຫນ້າທີ່ໃຫຍ່ກວ່າຂອບເຂດຈໍາກັດນີ້
ຫຼັງຈາກ inlining, inlining ແມ່ນຈໍາກັດໂດຍ --param ຂະ​ຫນາດ​ໃຫຍ່​ຫນ້າ​ທີ່​ການ​ຂະ​ຫຍາຍ​ຕົວ​. ນີ້
ພາລາມິເຕີແມ່ນເປັນປະໂຫຍດຕົ້ນຕໍເພື່ອຫຼີກເວັ້ນການລວບລວມເວລາທີ່ຮຸນແຮງທີ່ເກີດຈາກການບໍ່.
ສູດການຄິດໄລ່ເສັ້ນຊື່ທີ່ໃຊ້ໂດຍປາຍຫຼັງ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 2700.

ຂະ​ຫນາດ​ໃຫຍ່​ຫນ້າ​ທີ່​ການ​ຂະ​ຫຍາຍ​ຕົວ​
ລະບຸການຂະຫຍາຍຕົວສູງສຸດຂອງຟັງຊັນຂະຫນາດໃຫຍ່ທີ່ເກີດຈາກການ inlining ເປັນເປີເຊັນ. ໄດ້
ຄ່າເລີ່ມຕົ້ນແມ່ນ 100 ເຊິ່ງຈໍາກັດການຂະຫຍາຍຕົວຂອງຫນ້າທີ່ຂະຫນາດໃຫຍ່ເຖິງ 2.0 ເທົ່າຂອງຕົ້ນສະບັບ
ຂະຫນາດ.

ໜ່ວຍໃຫຍ່
ຂອບ​ເຂດ​ຈໍາ​ກັດ​ການ​ລະ​ບຸ​ຫົວ​ຫນ່ວຍ​ການ​ແປ​ພາ​ສາ​ຂະ​ຫນາດ​ໃຫຍ່​. ການຂະຫຍາຍຕົວທີ່ເກີດຈາກການ inlining ຂອງຫນ່ວຍງານ
ຂະຫນາດໃຫຍ່ກວ່າຂອບເຂດຈໍາກັດນີ້ຖືກຈໍາກັດໂດຍ --param inline-unit-growth. ສໍາລັບຫນ່ວຍງານຂະຫນາດນ້ອຍ
ນີ້ອາດຈະເຄັ່ງຄັດເກີນໄປ (ພິຈາລະນາຫນ່ວຍງານປະກອບດ້ວຍຟັງຊັນ A ທີ່ຢູ່ໃນແຖວແລະ
B ທີ່ພຽງແຕ່ໂທຫາ A ສາມເທື່ອ. ຖ້າ B ແມ່ນຂະຫນາດນ້ອຍທຽບກັບ A, ການຂະຫຍາຍຕົວຂອງຫນ່ວຍ
ແມ່ນ 300\% ແລະ​ແຕ່ inlining ດັ່ງ​ກ່າວ​ແມ່ນ sane ຫຼາຍ​. ສໍາລັບຫນ່ວຍງານຂະຫນາດໃຫຍ່ຫຼາຍປະກອບດ້ວຍ
ຫນ້າທີ່ inlineable ຂະຫນາດນ້ອຍຢ່າງໃດກໍຕາມຈໍາກັດການຂະຫຍາຍຕົວຂອງຫນ່ວຍງານໂດຍລວມແມ່ນຈໍາເປັນ
ຫຼີກເວັ້ນການລະເບີດ exponential ຂອງຂະຫນາດລະຫັດ. ດັ່ງນັ້ນ, ສໍາລັບຫນ່ວຍງານຂະຫນາດນ້ອຍ, ຂະຫນາດແມ່ນ
ເພີ່ມຂຶ້ນເປັນ --param ໜ່ວຍໃຫຍ່ ກ່ອນການນໍາໃຊ້ --param inline-unit-growth.
ຄ່າເລີ່ມຕົ້ນແມ່ນ 10000

inline-unit-growth
ລະບຸການຂະຫຍາຍຕົວໂດຍລວມສູງສຸດຂອງຫນ່ວຍງານລວບລວມທີ່ເກີດຈາກ inlining. ໄດ້
ຄ່າເລີ່ມຕົ້ນແມ່ນ 30 ເຊິ່ງຈໍາກັດການຂະຫຍາຍຕົວຂອງຫນ່ວຍເປັນ 1.3 ເທົ່າຂອງຂະຫນາດຕົ້ນສະບັບ.

ipcp-unit-growth
ລະບຸການຂະຫຍາຍຕົວໂດຍລວມສູງສຸດຂອງຫນ່ວຍງານການລວບລວມທີ່ເກີດຈາກຂະບວນການລະຫວ່າງກັນ
ການຂະຫຍາຍພັນຢ່າງຕໍ່ເນື່ອງ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 10 ເຊິ່ງຈຳກັດການຂະຫຍາຍຕົວຂອງຫົວໜ່ວຍເປັນ 1.1
ເທົ່າຂອງຂະຫນາດຕົ້ນສະບັບ.

ໃຫຍ່ stack-frame
ຂອບເຂດຈໍາກັດທີ່ລະບຸກອບ stack ຂະຫນາດໃຫຍ່. ໃນຂະນະທີ່ inlining algorithm ກໍາລັງພະຍາຍາມ
ເພື່ອບໍ່ໃຫ້ເກີນຂອບເຂດຈໍາກັດນີ້ຫຼາຍເກີນໄປ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 256 bytes.

large-stack-frame-growth
ລະບຸການຂະຫຍາຍຕົວສູງສຸດຂອງເຟຣມ stack ໃຫຍ່ທີ່ເກີດຈາກການ inlining ເປັນເປີເຊັນ.
ຄ່າເລີ່ມຕົ້ນແມ່ນ 1000 ເຊິ່ງຈໍາກັດການຂະຫຍາຍຕົວຂອງກອບ stack ຂະຫນາດໃຫຍ່ເຖິງ 11 ເທົ່າ
ຂະຫນາດຕົ້ນສະບັບ.

max-inline-insns-recursive
max-inline-insns-recursive-auto
ລະບຸຈຳນວນສູງສຸດຂອງຄຳແນະນຳອອກນອກແຖວຂອງການຂຽນຄືນດ້ວຍຕົນເອງໃນແຖວ
ຟັງຊັນສາມາດເຕີບໂຕໄດ້ໂດຍການດໍາເນີນການ inlining recursive.

ສໍາລັບຟັງຊັນທີ່ປະກາດໃນແຖວ --param max-inline-insns-recursive ຖືກເອົາເຂົ້າໄປໃນ
ບັນຊີ. ສໍາລັບຟັງຊັນທີ່ບໍ່ໄດ້ປະກາດໃນແຖວ, inlining recursive ເກີດຂຶ້ນເມື່ອ
-finline-functions (ລວມຢູ່ໃນ -O3) ຖືກ​ເປີດ​ໃຊ້​ງານ​ແລະ​ --param max-inline-insns-
recursive-auto ຖືກນໍາໃຊ້. ຄ່າເລີ່ມຕົ້ນແມ່ນ 450.

max-inline-recursive-depth
max-inline-recursive-depth-auto
ລະບຸຄວາມເລິກ recursion ສູງສຸດທີ່ໃຊ້ໂດຍ inlining recursive.

ສໍາລັບຟັງຊັນທີ່ປະກາດໃນແຖວ --param max-inline-recursive-depth ຖືກເອົາເຂົ້າໄປໃນ
ບັນຊີ. ສໍາລັບຟັງຊັນທີ່ບໍ່ໄດ້ປະກາດໃນແຖວ, inlining recursive ເກີດຂຶ້ນເມື່ອ
-finline-functions (ລວມຢູ່ໃນ -O3) ຖືກ​ເປີດ​ໃຊ້​ງານ​ແລະ​ --param max-inline-recursive-
ຄວາມ​ເລິກ​ອັດ​ຕະ​ໂນ​ມັດ​ ຖືກນໍາໃຊ້. ຄ່າເລີ່ມຕົ້ນແມ່ນ 8.

min-inline-recursive-probability
inlining recursive ແມ່ນກໍາໄລພຽງແຕ່ສໍາລັບການທໍາງານທີ່ມີ recursion ເລິກໃນ
ໂດຍສະເລ່ຍແລະສາມາດເຈັບປວດສໍາລັບການທໍາງານທີ່ມີຄວາມເລິກ recursion ພຽງເລັກນ້ອຍໂດຍການເພີ່ມ
ຂະ​ຫນາດ prologue ຫຼື​ຄວາມ​ສັບ​ສົນ​ຂອງ​ການ​ທໍາ​ງານ​ຂອງ​ຮ່າງ​ກາຍ​ທີ່​ເຫມາະ​ສົມ​ອື່ນໆ​.

ເມື່ອ​ຄຳ​ຕິ​ຊົມ​ຂອງ​ໂປ​ຣ​ໄຟ​ລ໌​ມີ​ຢູ່ (ເບິ່ງ -fprofile-generate) recursion ຕົວ​ຈິງ​
ຄວາມເລິກສາມາດຄາດເດົາໄດ້ຈາກຄວາມເປັນໄປໄດ້ທີ່ຟັງຊັນຈະເກີດຂຶ້ນຜ່ານການໂທທີ່ໃຫ້
ການສະແດງອອກ. ພາລາມິເຕີນີ້ຈໍາກັດ inlining ພຽງແຕ່ໂທຫາການສະແດງອອກ who
ຄວາມເປັນໄປໄດ້ເກີນເກນທີ່ກຳນົດໄວ້ (ເປັນເປີເຊັນ). ຄ່າເລີ່ມຕົ້ນແມ່ນ 10.

Early-inlining-insns
ກໍານົດການຂະຫຍາຍຕົວທີ່ inliner ຕົ້ນສາມາດເຮັດໄດ້. ແທ້ຈິງແລ້ວ, ມັນເພີ່ມປະລິມານ
inlining ສໍາລັບລະຫັດທີ່ມີການລົງໂທດ abstraction ຂະຫນາດໃຫຍ່. ຄ່າເລີ່ມຕົ້ນແມ່ນ 10.

max-early-inliner-iterations
max-early-inliner-iterations
ຈໍາ​ກັດ​ການ​ເຮັດ​ຊ້ຳ​ຂອງ inliner ຕົ້ນ​. ນີ້ໂດຍພື້ນຖານແລ້ວຜູກມັດຈໍານວນຂອງການຮັງ
ໂທທາງອ້ອມ inliner ຕົ້ນສາມາດແກ້ໄຂ. ຕ່ອງໂສ້ທີ່ເລິກກວ່າແມ່ນຍັງຖືກຈັດການໂດຍຊ້າ
inlining.

comdat-sharing-probability
comdat-sharing-probability
ຄວາມເປັນໄປໄດ້ (ເປັນເປີເຊັນ) ທີ່ຟັງຊັນ C++ inline ກັບ comdat visibility ຈະເປັນ
ແບ່ງປັນໃນທົ່ວຫນ່ວຍງານລວບລວມຫຼາຍ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 20.

min-vect-loop-bound
ຈໍານວນຕໍາ່ສຸດທີ່ຂອງການຊໍ້າຄືນທີ່ loop ຈະບໍ່ຖືກ vectorized ເມື່ອໃດ
-ftree-vectorize ຖືກນໍາໃຊ້. ຈໍານວນການຊໍ້າຄືນຫຼັງຈາກ vectorization ຕ້ອງການ
ຫຼາຍກວ່າຄ່າທີ່ລະບຸໄວ້ໂດຍທາງເລືອກນີ້ເພື່ອອະນຸຍາດໃຫ້ vectorization. ໄດ້
ຄ່າເລີ່ມຕົ້ນແມ່ນ 0.

gcse-cost-distance-ratio
ປັດ​ໄຈ​ການ​ຂະ​ຫຍາຍ​ການ​ຄໍາ​ນວນ​ຂອງ​ໄລ​ຍະ​ສູງ​ສຸດ​ການ​ສະ​ແດງ​ອອກ​ສາ​ມາດ​ຍ້າຍ​ໂດຍ​
ການເພີ່ມປະສິດທິພາບ GCSE. ໃນປັດຈຸບັນນີ້ສະຫນັບສະຫນູນພຽງແຕ່ຢູ່ໃນລະຫັດ hoisting pass.
ອັດຕາສ່ວນທີ່ໃຫຍ່ກວ່າ, ການ hoisting ລະຫັດຮຸກຮານຫຼາຍຈະເປັນແບບງ່າຍດາຍ
expressions, ie, ການສະແດງອອກທີ່ມີຄ່າໃຊ້ຈ່າຍຫນ້ອຍກວ່າ gcse-unrestricted-
ຄ່າໃຊ້ຈ່າຍ. ການລະບຸ 0 ຈະປິດການຍົກຕົວສະແດງທີ່ງ່າຍດາຍ. ຄ່າເລີ່ມຕົ້ນ
ຄ່າແມ່ນ 10.

gcse-unrestricted-cost
ຄ່າ​ໃຊ້​ຈ່າຍ​, ການ​ວັດ​ແທກ​ປະ​ມານ​ເປັນ​ຄ່າ​ໃຊ້​ຈ່າຍ​ຂອງ​ຄໍາ​ແນະ​ນໍາ​ເຄື່ອງ​ຫນຶ່ງ​ປົກ​ກະ​ຕິ​, ຢູ່​
ເຊິ່ງການເພີ່ມປະສິດທິພາບ GCSE ຈະບໍ່ຈໍາກັດໄລຍະທາງທີ່ສະແດງອອກສາມາດເດີນທາງໄດ້.
ໃນປັດຈຸບັນນີ້ສະຫນັບສະຫນູນພຽງແຕ່ຢູ່ໃນລະຫັດ hoisting pass. ຄ່າໃຊ້ຈ່າຍຫນ້ອຍລົງ,
ການ hoisting ລະຫັດຮຸກຮານຫຼາຍຈະເປັນ. ການລະບຸ 0 ຈະອະນຸຍາດໃຫ້ທັງຫມົດ
ການສະແດງອອກໃນການເດີນທາງໄລຍະທາງທີ່ບໍ່ຈໍາກັດ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 3.

max-hoist-depth
ຄວາມເລິກຂອງການຄົ້ນຫາໃນຕົ້ນໄມ້ dominator ສໍາລັບການສະແດງອອກເພື່ອ hoist. ນີ້ຖືກນໍາໃຊ້
ເພື່ອຫຼີກເວັ້ນການປະພຶດສີ່ຫຼ່ຽມໃນລະບົບ hoisting algorithm. ຄ່າຂອງ 0 ຈະຫຼີກເວັ້ນ
ຈໍາກັດການຄົ້ນຫາ, ແຕ່ອາດຈະຊັກຊ້າການລວບລວມຫນ້າທີ່ອັນໃຫຍ່ຫຼວງ. ຄ່າເລີ່ມຕົ້ນ
ຄ່າແມ່ນ 30.

max-tail-merge-ການປຽບທຽບ
ຈຳນວນສູງສຸດຂອງ bbs ທີ່ຄ້າຍຄືກັນເພື່ອປຽບທຽບ bb ກັບ. ນີ້ຖືກນໍາໃຊ້ເພື່ອຫຼີກເວັ້ນການ
ພຶດຕິກຳສີ່ຫຼ່ຽມໃນການລວມຫາງຕົ້ນໄມ້. ຄ່າເລີ່ມຕົ້ນແມ່ນ 10.

max-tail-merge-iterations
ຈໍາ​ນວນ​ສູງ​ສຸດ​ຂອງ​ການ​ເຮັດ​ຊ້ຳ​ຂອງ​ການ​ຜ່ານ​ໃນ​ຫນ້າ​ທີ່​. ນີ້ຖືກນໍາໃຊ້ເພື່ອ
ຈຳກັດເວລາການຮວບຮວມໃນການຮວມຫາງຕົ້ນໄມ້. ຄ່າເລີ່ມຕົ້ນແມ່ນ 2.

max-unrolled-insns
ຈໍານວນຄໍາແນະນໍາສູງສຸດທີ່ loop ຄວນມີຖ້າຫາກວ່າ loop ນັ້ນເປັນ
unrolled, ແລະຖ້າຫາກວ່າ loop ແມ່ນ unrolled, ມັນກໍານົດຈໍານວນຄັ້ງຂອງລະຫັດ loop
ຖືກຍົກເລີກ.

max-average-unrolled-insns
ຈໍານວນຄໍາແນະນໍາສູງສຸດທີ່ລໍາອຽງໂດຍຄວາມເປັນໄປໄດ້ຂອງການປະຕິບັດຂອງພວກເຂົາວ່າ
loop ຄວນຈະມີຖ້າຫາກວ່າ loop ນັ້ນຖືກ unrolled, ແລະຖ້າຫາກວ່າ loop ໄດ້ຖືກ unrolled, ມັນ
ກຳນົດຈຳນວນຄັ້ງທີ່ລະຫັດ loop ຖືກຖອດອອກ.

max-unroll-times
ຈໍາ​ນວນ​ສູງ​ສຸດ​ຂອງ unrollings ຂອງ loop ດຽວ​.

max-peeled-insns
ຈໍານວນຄໍາແນະນໍາສູງສຸດທີ່ loop ຄວນມີຖ້າ loop ນັ້ນຖືກປອກເປືອກ,
ແລະຖ້າຫາກວ່າ loop ໄດ້ຖືກປອກເປືອກ, ມັນຈະກໍານົດຈໍານວນເວລາທີ່ລະຫັດ loop ຖືກປອກເປືອກ.

max-peel-times
ຈໍານວນສູງສຸດຂອງການປອກເປືອກຂອງ loop ດຽວ.

max-completely-peeled-insns
ຈໍານວນສູງສຸດຂອງ insns ຂອງ loop ປອກເປືອກຫມົດ.

max-completely-peel-times
ຈໍາ​ນວນ​ສູງ​ສຸດ​ຂອງ​ການ​ຊ​້​ໍາ​ຂອງ loop ເປັນ​ທີ່​ເຫມາະ​ສົມ​ສໍາ​ລັບ​ການ​ປອກ​ເປືອກ​ທີ່​ສົມ​ບູນ​.

max-completely-peel-loop-nest-depth
ຄວາມເລິກສູງສຸດຂອງຮັງ loop ທີ່ເຫມາະສົມສໍາລັບການປອກເປືອກຢ່າງສົມບູນ.

max-unswitch-insns
ຈຳນວນສູງສຸດຂອງ insns ຂອງ loop ທີ່ບໍ່ໄດ້ສະຫຼັບ.

max-unswitch-level
ຈໍາ​ນວນ​ສູງ​ສຸດ​ຂອງ​ສາ​ຂາ unswitched ໃນ loop ດຽວ​.

lim-ແພງ
ຄ່າໃຊ້ຈ່າຍຕໍ່າສຸດຂອງການສະແດງຜົນລາຄາແພງໃນການເຄື່ອນໄຫວຂອງ loop invariant.

iv-consider-all-candidates-bound
ຜູກມັດກັບຈຳນວນຜູ້ສະໝັກສຳລັບຕົວແປ induction ຂ້າງລຸ່ມນີ້ວ່າຜູ້ສະໝັກທັງໝົດ
ຖືກພິຈາລະນາສໍາລັບແຕ່ລະການນໍາໃຊ້ໃນການເພີ່ມປະສິດທິພາບຕົວແປ induction. ພຽງແຕ່ຫຼາຍທີ່ສຸດ
ຜູ້ສະຫມັກທີ່ກ່ຽວຂ້ອງແມ່ນພິຈາລະນາຖ້າຫາກວ່າມີຜູ້ສະຫມັກຫຼາຍ, ເພື່ອຫຼີກເວັ້ນການ
ຄວາມສັບສົນເວລາສີ່ຫລ່ຽມ.

iv-max-ພິຈາລະນາ-ໃຊ້
ການເພີ່ມປະສິດທິພາບຕົວແປ induction ໃຫ້ເຖິງກັບ loops ທີ່ມີ induction ຫຼາຍ
ການນໍາໃຊ້ຕົວແປ.

iv-always-prune-cand-set-bound
ຖ້າຈໍານວນຜູ້ສະຫມັກໃນຊຸດແມ່ນນ້ອຍກວ່າຄ່ານີ້, ພວກເຮົາພະຍາຍາມສະເຫມີ
ເອົາ ivs ທີ່ບໍ່ຈໍາເປັນອອກຈາກຊຸດໃນລະຫວ່າງການເພີ່ມປະສິດທິພາບຂອງມັນເມື່ອ iv ໃຫມ່ຖືກເພີ່ມ
ກັບຊຸດ.

scev-max-expr-size
ຜູກມັດກັບຂະໜາດຂອງການສະແດງຜົນທີ່ໃຊ້ໃນເຄື່ອງວິເຄາະວິວັດທະນາການສະເກັດລາ. ຂະຫນາດໃຫຍ່
ການສະແດງອອກຊ້າຂອງການວິເຄາະ.

scev-max-expr-ຊັບຊ້ອນ
ຜູກມັດກັບຄວາມສັບສົນຂອງການສະແດງອອກໃນເຄື່ອງວິເຄາະວິວັດທະນາການສະເກັດເງິນ.
ການສະແດງອອກທີ່ຊັບຊ້ອນເຮັດໃຫ້ເຄື່ອງວິເຄາະຊ້າລົງ.

omega-max-vars
ຈຳນວນຕົວແປສູງສຸດໃນລະບົບຈຳກັດ Omega. ຄ່າເລີ່ມຕົ້ນ
ແມ່ນ 128.

omega-max-geqs
ຈຳນວນສູງສຸດຂອງຄວາມບໍ່ສະເໝີພາບໃນລະບົບຈຳກັດ Omega. ຄ່າເລີ່ມຕົ້ນ
ຄ່າແມ່ນ 256.

omega-max-eqs
ຈຳນວນສູງສຸດຂອງຄວາມສະເໝີພາບໃນລະບົບຈຳກັດ Omega. ຄ່າເລີ່ມຕົ້ນ
ແມ່ນ 128.

omega-max-wild-cards
ຈຳນວນຕົວປ່ຽນແທນທີ່ສູງສຸດທີ່ຕົວແກ້ໄຂ Omega ຈະສາມາດ
ໃສ່. ຄ່າເລີ່ມຕົ້ນແມ່ນ 18.

omega-hash-table-size
ຂະຫນາດຂອງຕາຕະລາງ hash ໃນ Omega solver. ຄ່າເລີ່ມຕົ້ນແມ່ນ 550.

omega-max-keys
ຈໍານວນສູງສຸດຂອງກະແຈທີ່ໃຊ້ໂດຍ Omega solver. ຄ່າເລີ່ມຕົ້ນແມ່ນ 500.

omega-eliminate-redundant-constraints
ເມື່ອຕັ້ງເປັນ 1, ໃຊ້ວິທີການລາຄາແພງເພື່ອລົບລ້າງຂໍ້ຈໍາກັດທີ່ຊໍ້າຊ້ອນທັງຫມົດ. ໄດ້
ຄ່າເລີ່ມຕົ້ນແມ່ນ 0.

vect-max-version-for-alignment-checks
ຈໍານວນສູງສຸດຂອງການກວດສອບເວລາແລ່ນທີ່ສາມາດປະຕິບັດໄດ້ໃນເວລາທີ່ເຮັດ loop
ຮຸ່ນສໍາລັບການສອດຄ່ອງໃນ vectorizer. ເບິ່ງທາງເລືອກ ftree-vect-loop-version
ສໍາລັບຂໍ້ມູນເພີ່ມເຕີມ.

vect-max-version-for-alias-checks
ຈໍານວນສູງສຸດຂອງການກວດສອບເວລາແລ່ນທີ່ສາມາດປະຕິບັດໄດ້ໃນເວລາທີ່ເຮັດ loop
ຮຸ່ນສໍາລັບນາມແຝງໃນ vectorizer. ເບິ່ງທາງເລືອກ ftree-vect-loop-version ສໍາລັບ
ຂໍ້ມູນເພີ່ມເຕີມ

max-iterations-to-track
ຈໍາ​ນວນ​ສູງ​ສຸດ​ຂອງ​ການ​ເຮັດ​ຊໍ້າ​ຄືນ​ຂອງ​ການ loop ເປັນ​ວິ​ທີ​ການ​ຜົນ​ບັງ​ຄັບ​ໃຊ້ brute ສໍາ​ລັບ​ການ​ວິ​ເຄາະ​
ຂອງ # ຂອງການຊໍ້າຄືນຂອງ loop ພະຍາຍາມປະເມີນ.

hot-bb-count-fraction
ເລືອກສ່ວນໜຶ່ງຂອງຈຳນວນສູງສຸດຂອງການຊໍ້າຄືນຂອງບລັອກພື້ນຖານໃນໂປຣແກຣມ
ໄດ້ ຮັບ ການ ຕັນ ພື້ນ ຖານ ຈໍາ ເປັນ ຕ້ອງ ໄດ້ ຮັບ ການ ພິ ຈາ ລະ ນາ ຮ້ອນ.

hot-bb-frequency-fraction
ເລືອກສ່ວນຫນຶ່ງຂອງຄວາມຖີ່ຂອງຕັນເຂົ້າຂອງການປະຕິບັດຂອງຕັນພື້ນຖານໃນ
ຟັງຊັນທີ່ໄດ້ຮັບຕັນພື້ນຖານຈໍາເປັນຕ້ອງໄດ້ຮັບການພິຈາລະນາຮ້ອນ.

max-predicted-iterations
ຈໍາ​ນວນ​ສູງ​ສຸດ​ຂອງ​ການ​ຊໍ້າ​ກັນ loop ພວກ​ເຮົາ​ຄາດ​ຄະ​ເນ​ສະ​ຖິ​ຕິ​. ນີ້ແມ່ນເປັນປະໂຫຍດໃນ
ກໍ​ລະ​ນີ​ທີ່​ຟັງ​ຊັນ​ປະ​ກອບ​ດ້ວຍ loop ດຽວ​ທີ່​ຮູ້​ຈັກ​ຜູກ​ພັນ​ແລະ loop ອື່ນໆ​ທີ່​ມີ​
ບໍ່ຮູ້ຈັກ. ພວກເຮົາຄາດຄະເນຈໍານວນທີ່ຮູ້ຈັກຂອງ iterations ຢ່າງຖືກຕ້ອງ, ໃນຂະນະທີ່ບໍ່ຮູ້
ຈໍາ​ນວນ​ຂອງ iterations ໂດຍ​ສະ​ເລ່ຍ​ເປັນ​ປະ​ມານ 10. ນີ້​ຫມາຍ​ຄວາມ​ວ່າ loop ໂດຍ​ບໍ່​ມີ​ການ
ຂອບເຂດຈະປະກົດວ່າເຢັນທຽມທຽບກັບອີກອັນໜຶ່ງ.

align-threshold
ເລືອກສ່ວນຫນຶ່ງຂອງຄວາມຖີ່ສູງສຸດຂອງການປະຕິບັດຂອງຕັນພື້ນຖານໃນຫນ້າທີ່
ຕັນພື້ນຖານທີ່ໄດ້ຮັບຈະໄດ້ຮັບການສອດຄ່ອງ.

align-loop-iterations
Loop ຄາດວ່າຈະເຮັດຊ້ຳ ຢ່າງໜ້ອຍຈຳນວນການຊ້ຳທີ່ເລືອກຈະໄດ້ຮັບ
ສອດຄ່ອງ.

tracer-dynamic- coverage
tracer-dynamic-coverage-feedback
ຄ່ານີ້ຖືກນໍາໃຊ້ເພື່ອຈໍາກັດການສ້າງ superblock ເມື່ອອັດຕາສ່ວນທີ່ໃຫ້
ຄໍາແນະນໍາທີ່ຖືກປະຕິບັດແມ່ນກວມເອົາ. ນີ້ຈໍາກັດການຂະຫຍາຍຂະຫນາດລະຫັດທີ່ບໍ່ຈໍາເປັນ.

ໄດ້ tracer-dynamic-coverage-feedback ຖືກນໍາໃຊ້ພຽງແຕ່ໃນເວລາທີ່ຄໍາຄຶດຄໍາເຫັນໂປຣໄຟລ໌
ມີໃຫ້. ໂປຼໄຟລ໌ທີ່ແທ້ຈິງ (ກົງກັນຂ້າມກັບການຄາດຄະເນສະຖິຕິ) ແມ່ນມີຫຼາຍ
ດຸ່ນດ່ຽງໜ້ອຍລົງໃຫ້ເກນເປັນຄ່າໃຫຍ່ກວ່າ.

tracer-max-code-growth
ຢຸດເຊົາການຊໍ້າຊ້ອນຫາງເມື່ອການເຕີບໂຕຂອງລະຫັດໄດ້ບັນລຸອັດຕາສ່ວນ. ນີ້​ແມ່ນ
ແທນທີ່ຈະເປັນການໂຕ້ຖຽງ hokey, ເນື່ອງຈາກວ່າສ່ວນໃຫຍ່ຂອງການຊໍ້າກັນຈະຖືກລົບລ້າງຕໍ່ມາໃນຂ້າມ
ໂດດ, ດັ່ງນັ້ນມັນອາດຈະຖືກຕັ້ງເປັນມູນຄ່າທີ່ສູງກວ່າຫຼາຍກ່ວາການເຕີບໃຫຍ່ຂອງລະຫັດທີ່ຕ້ອງການ.

tracer-min-branch-ratio
ຢຸດເຊົາການຂະຫຍາຍຕົວແບບປີ້ນກັບກັນເມື່ອຄວາມເປັນໄປໄດ້ຂອງປີ້ນກັບກັນຂອງຂອບທີ່ດີທີ່ສຸດແມ່ນຫນ້ອຍກວ່ານີ້
ເກນ (ເປັນເປີເຊັນ).

tracer-min-branch-ratio
tracer-min-branch-ratio-feedback
ຢຸດການຂະຫຍາຍຕົວໄປຂ້າງຫນ້າຖ້າຂອບທີ່ດີທີ່ສຸດມີຄວາມເປັນໄປໄດ້ຕ່ໍາກວ່ານີ້
threshold

ຄ້າຍຄືກັນກັບ tracer-dynamic- coverage ສອງຄ່າແມ່ນມີຢູ່, ອັນໜຶ່ງສຳລັບການລວບລວມ
ສໍາ​ລັບ​ຄໍາ​ຄຶດ​ຄໍາ​ເຫັນ profile ແລະ​ຫນຶ່ງ​ສໍາ​ລັບ​ການ​ສັງ​ລວມ​ໂດຍ​ບໍ່​ມີ​ການ​. ມູນຄ່າສໍາລັບການລວບລວມ
ດ້ວຍການຕິຊົມໂປຣໄຟລ໌ຈະຕ້ອງເປັນແບບອະນຸລັກ (ສູງກວ່າ) ເພື່ອເຮັດໃຫ້
ຕິດຕາມປະສິດທິພາບ.

max-cse-path-length
ຈໍານວນສູງສຸດຂອງຕັນພື້ນຖານຢູ່ໃນເສັ້ນທາງທີ່ cse ພິຈາລະນາ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 10.

max-cse-insns
ຂັ້ນຕອນ CSE ຄໍາແນະນໍາສູງສຸດກ່ອນທີ່ຈະ flushing. ຄ່າເລີ່ມຕົ້ນແມ່ນ 1000.

ggc-min-expand
GCC ໃຊ້ຕົວເກັບຂີ້ເຫຍື້ອເພື່ອຈັດການການຈັດສັນຄວາມຊົງຈໍາຂອງຕົນເອງ. ພາລາມິເຕີນີ້
ກໍານົດອັດຕາສ່ວນຕໍາ່ສຸດທີ່ heap ຂອງຜູ້ເກັບຂີ້ເຫຍື້ອຄວນຈະເປັນ
ອະນຸຍາດໃຫ້ຂະຫຍາຍລະຫວ່າງການເກັບກໍາ. Tuning ນີ້ອາດຈະປັບປຸງຄວາມໄວການລວບລວມ;
ມັນບໍ່ມີຜົນຕໍ່ການສ້າງລະຫັດ.

ຄ່າເລີ່ມຕົ້ນແມ່ນ 30% + 70% * (RAM/1GB) ທີ່ມີຂອບເທິງຂອງ 100% ເມື່ອ RAM >= 1GB.
ຖ້າ "getrlimit" ສາມາດໃຊ້ໄດ້, ແນວຄວາມຄິດຂອງ "RAM" ແມ່ນນ້ອຍທີ່ສຸດຂອງ RAM ຕົວຈິງແລະ
"RLIMIT_DATA" ຫຼື "RLIMIT_AS". ຖ້າ GCC ບໍ່ສາມາດຄິດໄລ່ RAM ໃນສະເພາະໃດຫນຶ່ງ
ເວທີ, ຂອບເຂດຕ່ໍາຂອງ 30% ຖືກນໍາໃຊ້. ການຕັ້ງຄ່າຕົວກໍານົດການນີ້ແລະ ggc-ນາທີ-
ຂະໜາດໃຫຍ່ ເຖິງສູນເຮັດໃຫ້ການເກັບລວບລວມເຕັມທີ່ເກີດຂື້ນໃນທຸກໆໂອກາດ. ນີ້​ແມ່ນ
ຊ້າທີ່ສຸດ, ແຕ່ສາມາດເປັນປະໂຫຍດສໍາລັບການ debugging.

ggc-min-heapsize
ຂະໜາດຕໍາ່ສຸດທີ່ກອງເກັບຂີ້ເຫຍື້ອກ່ອນທີ່ມັນຈະເລີ່ມລົບກວນການເກັບ
ຂີ້ເຫຍື້ອ. ການເກັບກໍາທໍາອິດເກີດຂຶ້ນຫຼັງຈາກ heap ຂະຫຍາຍໂດຍ ggc-min-expand%
ນອກເຫນືອໄປຈາກ ggc-min-heapsize. ອີກເທື່ອຫນຶ່ງ, ການປັບແຕ່ງນີ້ອາດຈະປັບປຸງຄວາມໄວການລວບລວມ, ແລະ
ບໍ່ມີຜົນຕໍ່ການສ້າງລະຫັດ.

ຄ່າເລີ່ມຕົ້ນແມ່ນນ້ອຍກວ່າຂອງ RAM/8, RLIMIT_RSS, ຫຼືຂອບເຂດຈໍາກັດທີ່ພະຍາຍາມຮັບປະກັນ.
ວ່າ RLIMIT_DATA ຫຼື RLIMIT_AS ແມ່ນບໍ່ເກີນ, ແຕ່ມີຂອບເຂດຕ່ໍາກວ່າ 4096.
(ສີ່ megabytes) ແລະຂອບເຂດເທິງຂອງ 131072 (128 megabytes). ຖ້າ GCC ບໍ່ສາມາດ
ເພື່ອຄິດໄລ່ RAM ໃນເວທີສະເພາະໃດຫນຶ່ງ, ຂອບເຂດຕ່ໍາແມ່ນຖືກນໍາໃຊ້. ການຕັ້ງຄ່ານີ້
ຕົວກໍານົດການຂະຫນາດໃຫຍ່ຫຼາຍປະສິດທິຜົນປິດການເກັບຂີ້ເຫຍື້ອ. ການຕັ້ງຄ່ານີ້
ພາລາມິເຕີແລະ ggc-min-expand ເຖິງສູນເຮັດໃຫ້ການເກັບລວບລວມເຕັມທີ່ເກີດຂື້ນໃນທຸກໆ
ໂອກາດ.

max-reload-search-insns
ຈໍານວນສູງສຸດຂອງການໂຫຼດຄໍາແນະນໍາຄືນໃຫມ່ຄວນຈະເບິ່ງກັບຄືນໄປບ່ອນສໍາລັບການທຽບເທົ່າ
ລົງທະບຽນ. ມູນຄ່າທີ່ເພີ່ມຂຶ້ນຫມາຍເຖິງການເພີ່ມປະສິດທິພາບທີ່ຮຸກຮານຫຼາຍ, ເຮັດໃຫ້
ເວລາການລວບລວມເພີ່ມຂຶ້ນໂດຍມີການປະຕິບັດທີ່ດີກວ່າເລັກນ້ອຍ. ຄ່າເລີ່ມຕົ້ນ
ຄ່າແມ່ນ 100.

max-cselib-memory-locations
ຈໍານວນສູງສຸດຂອງສະຖານທີ່ຫນ່ວຍຄວາມຈໍາ cselib ຄວນຄໍານຶງເຖິງ.
ການເພີ່ມມູນຄ່າຫມາຍເຖິງການເພີ່ມປະສິດທິພາບທີ່ຮຸກຮານຫຼາຍ, ເຮັດໃຫ້ເວລາການລວບລວມ
ເພີ່ມ​ຂຶ້ນ​ໂດຍ​ອາດ​ຈະ​ເປັນ​ການ​ປະ​ຕິ​ບັດ​ທີ່​ດີກ​ວ່າ​ເລັກ​ນ້ອຍ​. ຄ່າເລີ່ມຕົ້ນແມ່ນ 500.

reorder-blocks-duplicate
reorder-blocks-duplicate-feedback
ໃຊ້ໂດຍການສັ່ງຜ່ານທາງຕັນຂັ້ນພື້ນຖານເພື່ອຕັດສິນໃຈວ່າຈະໃຊ້ສາຂາທີ່ບໍ່ມີເງື່ອນໄຂຫຼືບໍ່
ຫຼືສຳເນົາລະຫັດໃສ່ປາຍທາງຂອງມັນ. ລະຫັດແມ່ນຊ້ໍາກັນເມື່ອຄາດຄະເນຂອງມັນ
ຂະ​ຫນາດ​ແມ່ນ​ຂະ​ຫນາດ​ນ້ອຍ​ກ​່​ວາ​ຄ່າ​ນີ້​ຄູນ​ດ້ວຍ​ຂະ​ຫນາດ​ຄາດ​ຄະ​ເນ​ຂອງ​ການ​ບໍ່​ມີ​ເງື່ອນ​ໄຂ​
ເຕັ້ນໄປຫາຈຸດຮ້ອນຂອງໂຄງການ.

ໄດ້ reorder-block-duplicate-feedback ຖືກນໍາໃຊ້ພຽງແຕ່ໃນເວລາທີ່ຄໍາຄຶດຄໍາເຫັນໂປຣໄຟລ໌
ສາມາດໃຊ້ໄດ້ ແລະອາດຈະຖືກຕັ້ງເປັນຄ່າສູງກວ່າ reorder-block-duplicate ນັບຕັ້ງແຕ່
ຂໍ້ມູນກ່ຽວກັບຈຸດຮ້ອນແມ່ນຖືກຕ້ອງກວ່າ.

max-sched-ready-insns
ຈໍາ​ນວນ​ສູງ​ສຸດ​ຂອງ​ຄໍາ​ແນະ​ນໍາ​ທີ່​ມີ​ຄວາມ​ພ້ອມ​ທີ່​ຈະ​ອອກ​ທີ່​ກໍາ​ນົດ​ເວ​ລາ​ຄວນ​
ພິ​ຈາ​ລະ​ນາ​ໃນ​ເວ​ລາ​ໃດ​ຫນຶ່ງ​ໃນ​ລະ​ຫວ່າງ​ການ​ກໍາ​ນົດ​ເວ​ລາ​ຄັ້ງ​ທໍາ​ອິດ​. ການເພີ່ມມູນຄ່າ
ຫມາຍຄວາມວ່າການຄົ້ນຫາຢ່າງລະອຽດຫຼາຍ, ເຮັດໃຫ້ເວລາລວບລວມເພີ່ມຂຶ້ນໂດຍອາດຈະ
ຜົນ​ປະ​ໂຫຍດ​ພຽງ​ເລັກ​ນ້ອຍ​. ຄ່າເລີ່ມຕົ້ນແມ່ນ 100.

max-sched-region-blocks
ຈຳນວນທ່ອນໄມ້ສູງສຸດໃນພາກພື້ນທີ່ຈະຖືກພິຈາລະນາເປັນ interblock
ກຳນົດເວລາ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 10.

max-pipeline-region-blocks
ຈໍາ ນວນ ສູງ ສຸດ ຂອງ ຕັນ ໃນ ພາກ ພື້ນ ທີ່ ຈະ ໄດ້ ຮັບ ການ ພິ ຈາ ລະ ນາ ສໍາ ລັບ ການ ທໍ່ ໃນ
ຕາຕະລາງເລືອກ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 15.

max-sched-region-insns
ຈຳນວນສູງສຸດຂອງ insns ໃນພາກພື້ນທີ່ຈະຖືກພິຈາລະນາສໍາລັບ interblock
ກຳນົດເວລາ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 100.

max-pipeline-region-insns
ຈໍານວນສູງສຸດຂອງ insns ໃນພາກພື້ນທີ່ຈະໄດ້ຮັບການພິຈາລະນາສໍາລັບທໍ່ໃນ
ຕາຕະລາງເລືອກ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 200.

min-spec-prob
ຄວາມເປັນໄປໄດ້ຕໍ່າສຸດ (ເປັນເປີເຊັນ) ຂອງການເຂົ້າຫາແຫຼ່ງທີ່ມາຂອງບລັອກ interblock
ຕາຕະລາງການຄາດເດົາ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 40.

max-sched-extend-regions-iters
ຈຳນວນສູງສຸດຂອງການເຮັດຊ້ຳຜ່ານ CFG ເພື່ອຂະຫຍາຍພາກພື້ນ. 0 - ປິດການໃຊ້ງານ
ການຂະຫຍາຍພາກພື້ນ, N - ເຮັດໃນ N ຫຼາຍທີ່ສຸດ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 0.

max-sched-insn-conflict-delay
ຄວາມລ່າຊ້າຂອງຂໍ້ຂັດແຍ່ງສູງສຸດສໍາລັບ insn ທີ່ຈະພິຈາລະນາການເຄື່ອນໄຫວການຄາດເດົາ.
ຄ່າເລີ່ມຕົ້ນແມ່ນ 3.

sched-spec-prob-cutoff
ຄວາມເປັນໄປໄດ້ຫນ້ອຍທີ່ສຸດຂອງຄວາມສໍາເລັດຂອງການຄາດຄະເນ (ເປັນສ່ວນຮ້ອຍ), ດັ່ງນັ້ນການຄາດເດົາ
insn ຈະຖືກກໍານົດ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 40.

sched-mem-true-dep-cost
ໄລຍະຫ່າງໜ້ອຍສຸດ (ໃນຮອບວຽນ CPU) ລະຫວ່າງຮ້ານ ແລະ ການໂຫຼດທີ່ຕັ້ງເປົ້າໝາຍໃສ່ໜ່ວຍຄວາມຈຳດຽວກັນ
ສະຖານທີ່. ຄ່າເລີ່ມຕົ້ນແມ່ນ 1.

selsched-max-lookhead
ຂະໜາດສູງສຸດຂອງໜ້າຕ່າງໜ້າຕາຂອງການກຳນົດເວລາເລືອກ. ມັນເປັນຄວາມເລິກ
ຂອງ​ການ​ຊອກ​ຫາ​ຄໍາ​ແນະ​ນໍາ​ທີ່​ມີ​ຢູ່​. ຄ່າເລີ່ມຕົ້ນແມ່ນ 50.

selsched-max-sched-times
ຈໍານວນເວລາສູງສຸດທີ່ຄໍາແນະນໍາຈະຖືກກໍານົດໃນລະຫວ່າງການເລືອກ
ກຳນົດເວລາ. ນີ້ແມ່ນຂີດຈໍາກັດກ່ຽວກັບຈໍານວນການຊໍ້າຄືນທີ່ຜ່ານ
ຄໍາແນະນໍາອາດຈະຖືກທໍ່. ຄ່າເລີ່ມຕົ້ນແມ່ນ 2.

selsched-max-insns-to-rename
ຈໍານວນສູງສຸດຂອງຄໍາແນະນໍາທີ່ດີທີ່ສຸດໃນບັນຊີລາຍຊື່ພ້ອມທີ່ຈະຖືກພິຈາລະນາສໍາລັບ
ການປ່ຽນຊື່ໃນຕາຕະລາງເລືອກ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 2.

sms-min-sc
ຄ່າຕໍ່າສຸດຂອງການນັບຂັ້ນຕອນທີ່ຕົວກໍານົດເວລາ swing modulo ຈະສ້າງ. ໄດ້
ຄ່າເລີ່ມຕົ້ນແມ່ນ 2.

max-last-value-rtl
ຂະຫນາດສູງສຸດທີ່ວັດແທກເປັນຈໍານວນ RTL ທີ່ສາມາດຖືກບັນທຶກໄວ້ໃນການສະແດງຜົນ
ໃນຕົວຜະສົມຜະສານສໍາລັບການລົງທະບຽນ pseudo ເປັນມູນຄ່າທີ່ຮູ້ຈັກສຸດທ້າຍຂອງທະບຽນນັ້ນ. ໄດ້
ຄ່າເລີ່ມຕົ້ນແມ່ນ 10000.

integer-share-limit
ຈໍານວນຄົງທີ່ນ້ອຍສາມາດໃຊ້ໂຄງສ້າງຂໍ້ມູນຮ່ວມກັນ, ຫຼຸດຜ່ອນການລວບລວມຂໍ້ມູນ
ການນໍາໃຊ້ຫນ່ວຍຄວາມຈໍາແລະການເພີ່ມຄວາມໄວຂອງມັນ. ນີ້ກໍານົດຄ່າສູງສຸດຂອງການແບ່ງປັນ
ຈໍານວນຄົງທີ່. ຄ່າເລີ່ມຕົ້ນແມ່ນ 256.

min-virtual-mappings
ລະບຸຈໍານວນຕໍາ່ສຸດທີ່ຂອງການສ້າງແຜນທີ່ສະເໝືອນຢູ່ໃນຕົວອັບເດດ SSA ເພີ່ມຂຶ້ນ
ທີ່ຄວນຈະໄດ້ຮັບການລົງທະບຽນເພື່ອກະຕຸ້ນໃຫ້ heuristic ແຜນທີ່ virtual ກໍານົດໂດຍ
virtual-mappings-ອັດຕາສ່ວນ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 100.

virtual-mappings-ອັດຕາສ່ວນ
ຖ້າຈໍານວນຂອງແຜນທີ່ virtual ແມ່ນ virtual-mappings-ອັດຕາສ່ວນໃຫຍ່ກວ່າຕົວເລກ
ຂອງສັນຍາລັກ virtual ທີ່ຈະປັບປຸງ, ຫຼັງຈາກນັ້ນຕົວປັບປຸງ SSA ເພີ່ມຂຶ້ນປ່ຽນເປັນ a
ການປັບປຸງອັນເຕັມທີ່ສໍາລັບສັນຍາລັກເຫຼົ່ານັ້ນ. ອັດຕາສ່ວນເລີ່ມຕົ້ນແມ່ນ 3.

ssp-buffer-size
ຂະຫນາດຕໍາ່ສຸດທີ່ຂອງ buffers (ie arrays) ທີ່ຈະໄດ້ຮັບການ smashing stack
ການປົກປ້ອງເມື່ອ -fstack ການ​ປ້ອງ​ກັນ​ ຖືກນໍາໃຊ້.

ຄ່າເລີ່ມຕົ້ນນີ້ກ່ອນ Ubuntu 10.10 ແມ່ນ "8". ໃນປັດຈຸບັນມັນແມ່ນ "4", ເພື່ອເພີ່ມການ
ຈໍານວນຂອງຫນ້າທີ່ປ້ອງກັນໂດຍຕົວປ້ອງກັນ stack.

max-jump-thread-duplication-stmts
ຈໍາ​ນວນ​ສູງ​ສຸດ​ຂອງ​ຄໍາ​ຖະ​ແຫຼງ​ການ​ອະ​ນຸ​ຍາດ​ໃຫ້​ຢູ່​ໃນ block ທີ່​ຈໍາ​ເປັນ​ຕ້ອງ​ໄດ້​ຮັບ​ການ​ຊ​້​ໍາ​ກັນ​ໃນ​ເວ​ລາ​ທີ່
ກະທູ້ກະໂດດ.

max-fields-for-field-sensitive
ຈຳນວນຊ່ອງຂໍ້ມູນສູງສຸດໃນໂຄງສ້າງທີ່ພວກເຮົາຈະປະຕິບັດໃນລັກສະນະທີ່ລະອຽດອ່ອນຂອງຊ່ອງຂໍ້ມູນ
ໃນລະຫວ່າງການວິເຄາະຕົວຊີ້. ຄ່າເລີ່ມຕົ້ນແມ່ນສູນສໍາລັບ -O0, ແລະ -O1 ແລະ 100 ສໍາລັບ -Os,
-O2, ແລະ -O3.

prefetch-latency
ຄາດຄະເນກ່ຽວກັບຈໍານວນຄໍາແນະນໍາໂດຍສະເລ່ຍທີ່ດໍາເນີນການກ່ອນທີ່ຈະ prefetch
ສໍາເລັດ. ໄລຍະທາງທີ່ພວກເຮົາເອົາໄປຂ້າງໜ້າແມ່ນອັດຕາສ່ວນກັບຄ່າຄົງທີ່ນີ້.
ການເພີ່ມຈໍານວນນີ້ອາດຈະເຮັດໃຫ້ການຖ່າຍທອດຫນ້ອຍລົງກ່ອນ (ເບິ່ງ
ພ້ອມໆກັນ-prefetches).

ພ້ອມໆກັນ-prefetches
ຈໍານວນສູງສຸດຂອງ prefetches ທີ່ສາມາດດໍາເນີນການໄດ້ໃນເວລາດຽວກັນ.

l1-cache-line-size
ຂະຫນາດຂອງ cache line ໃນ L1 cache, ໃນ bytes.

l1-cache-size
ຂະຫນາດຂອງ L1 cache, ໃນກິໂລໄບ.

l2-cache-size
ຂະຫນາດຂອງ L2 cache, ໃນກິໂລໄບ.

min-insn-to-prefetch-ratio
ອັດຕາສ່ວນຕໍາ່ສຸດທີ່ລະຫວ່າງຈໍານວນຂອງຄໍາແນະນໍາແລະຈໍານວນຂອງ prefetches
ເພື່ອໃຫ້ສາມາດ prefetching ໃນ loop ໄດ້.

prefetch-min-insn-to-mem-ອັດຕາສ່ວນ
ອັດຕາສ່ວນຕໍາ່ສຸດທີ່ລະຫວ່າງຈໍານວນຂອງຄໍາແນະນໍາແລະຈໍານວນຂອງຫນ່ວຍຄວາມຈໍາ
ການອ້າງອິງເພື່ອເປີດໃຊ້ການດຶງຂໍ້ມູນລ່ວງໜ້າໃນ loop.

use-canonical-types
ບໍ່ວ່າຈະເປັນ compiler ຄວນໃຊ້ລະບົບປະເພດ "canonical". ໂດຍຄ່າເລີ່ມຕົ້ນ, ນີ້
ຄວນເປັນ 1 ສະເໝີ, ເຊິ່ງໃຊ້ກົນໄກພາຍໃນທີ່ມີປະສິດທິພາບກວ່າໃນການປຽບທຽບ
ປະເພດໃນ C++ ແລະ Objective-C++. ຢ່າງໃດກໍຕາມ, ຖ້າແມງໄມ້ໃນລະບົບປະເພດ canonical ແມ່ນ
ເຮັດໃຫ້ເກີດຄວາມລົ້ມເຫລວໃນການລວບລວມ, ຕັ້ງຄ່ານີ້ເປັນ 0 ເພື່ອປິດການໃຊ້ງານປະເພດ canonical.

switch-conversion-max-branch-ratio
ການປ່ຽນເບື້ອງຕົ້ນຂອງ Switch ຈະປະຕິເສດການສ້າງ arrays ທີ່ໃຫຍ່ກວ່າ
switch-conversion-max-branch-ratio ເທົ່າຂອງຈໍານວນສາຂາໃນສະຫຼັບ.

max-partial-antic-length
ຄວາມຍາວສູງສຸດຂອງຊຸດເກົ່າແກ່ບາງສ່ວນທີ່ຄິດໄລ່ໃນລະຫວ່າງຕົ້ນໄມ້ບາງສ່ວນ
ການເພີ່ມປະສິດທິພາບການລົບລ້າງການຊໍ້າຊ້ອນ (-ftre-pre) ເມື່ອ optimizing ຢູ່ -O3 ແລະຂ້າງເທິງ.
ສໍາລັບບາງປະເພດຂອງລະຫັດແຫຼ່ງ, ການປັບປຸງການລົບລ້າງການຊ້ໍາຊ້ອນບາງສ່ວນ
ການເພີ່ມປະສິດທິພາບສາມາດແລ່ນຫນີໄດ້, ການໃຊ້ຫນ່ວຍຄວາມຈໍາທັງຫມົດທີ່ມີຢູ່ໃນເຈົ້າພາບ
ເຄື່ອງ. ພາລາມິເຕີນີ້ກໍານົດຂອບເຂດຈໍາກັດກ່ຽວກັບຄວາມຍາວຂອງຊຸດທີ່ຖືກຄິດໄລ່,
ເຊິ່ງປ້ອງກັນພຶດຕິກຳການໜີ. ການກໍານົດຄ່າຂອງ 0 ສໍາລັບພາລາມິເຕີນີ້ຈະ
ອະນຸຍາດໃຫ້ມີຄວາມຍາວທີ່ກໍານົດໄວ້ບໍ່ຈໍາກັດ.

sccvn-max-scc-size
ຂະໜາດສູງສຸດຂອງອົງປະກອບເຊື່ອມຕໍ່ທີ່ເຂັ້ມແຂງ (SCC) ໃນລະຫວ່າງການປະມວນຜົນ SCCVN. ຖ້າ
ຂອບເຂດຈໍາກັດນີ້ຖືກຕີ, ການປຸງແຕ່ງ SCCVN ສໍາລັບຫນ້າທີ່ທັງຫມົດຈະບໍ່ຖືກເຮັດແລະ
ການເພີ່ມປະສິດທິພາບຂຶ້ນຢູ່ກັບມັນຈະຖືກປິດໃຊ້ງານ. ຂະໜາດ SCC ສູງສຸດເລີ່ມຕົ້ນແມ່ນ
10000​.

ira-max-loops-num
IRA ໃຊ້ການຈັດສັນການລົງທະບຽນພາກພື້ນຕາມຄ່າເລີ່ມຕົ້ນ. ຖ້າຟັງຊັນມີຫຼາຍກວ່ານັ້ນ
loops ຫຼາຍກວ່າຕົວເລກທີ່ໃຫ້ໂດຍພາລາມິເຕີນີ້, ພຽງແຕ່ຢູ່ໃນຈໍານວນຫຼາຍທີ່ສຸດຂອງ
loops ທີ່ຖືກປະຕິບັດຫຼາຍທີ່ສຸດເປັນພາກພື້ນສໍາລັບການຈັດສັນການລົງທະບຽນພາກພື້ນ.
ຄ່າເລີ່ມຕົ້ນຂອງພາລາມິເຕີແມ່ນ 100.

ira-max-conflict-table-size
ເຖິງແມ່ນວ່າ IRA ໃຊ້ algorithm ທີ່ຊັບຊ້ອນເພື່ອບີບອັດຕາຕະລາງການຂັດແຍ້ງ,
ຕາຕະລາງຍັງສາມາດຕ້ອງການຄວາມຊົງຈໍາຫຼາຍເກີນໄປສໍາລັບຫນ້າທີ່ຂະຫນາດໃຫຍ່. ຖ້າ
ຕາຕະລາງຂໍ້ຂັດແຍ່ງສໍາລັບຟັງຊັນອາດຈະຫຼາຍກວ່າຂະຫນາດໃນ MB ທີ່ມອບໃຫ້ໂດຍນີ້
ພາລາມິເຕີ, ຜູ້ຈັດສັນທະບຽນແທນທີ່ຈະໃຊ້ໄວກວ່າ, ງ່າຍດາຍ, ແລະຕ່ໍາກວ່າ.
ສູດການຄິດໄລ່ຄຸນນະພາບທີ່ບໍ່ຮຽກຮ້ອງໃຫ້ມີການສ້າງຕາຕະລາງຂໍ້ຂັດແຍ່ງ pseudo-register.
ຄ່າເລີ່ມຕົ້ນຂອງພາລາມິເຕີແມ່ນ 2000.

ira-loop-reserved-regs
IRA ສາມາດຖືກນໍາໃຊ້ເພື່ອປະເມີນຄວາມກົດດັນການລົງທະບຽນທີ່ຖືກຕ້ອງຫຼາຍຂຶ້ນໃນ loops ສໍາລັບການຕັດສິນໃຈ
ເພື່ອຍ້າຍ loop invariant (ເບິ່ງ -O3). ຈໍານວນການລົງທະບຽນທີ່ມີສະຫງວນໄວ້ສໍາລັບ
ບາງຈຸດປະສົງອື່ນແມ່ນໃຫ້ໂດຍພາລາມິເຕີນີ້. ຄ່າເລີ່ມຕົ້ນຂອງ
ພາລາມິເຕີແມ່ນ 2, ເຊິ່ງເປັນຈໍານວນການລົງທະບຽນຫນ້ອຍທີ່ສຸດທີ່ຕ້ອງການໂດຍປົກກະຕິ
ຄໍາແນະນໍາ. ມູນຄ່ານີ້ແມ່ນດີທີ່ສຸດທີ່ພົບເຫັນຈາກການທົດລອງຈໍານວນຫລາຍ.

loop-invariant-max-bbs-in-loop
Loop invariant motion ສາມາດມີລາຄາແພງຫຼາຍ, ທັງໃນເວລາລວບລວມແລະໃນ
ຈໍາ​ນວນ​ຂອງ​ຄວາມ​ຈໍາ​ທີ່​ຈໍາ​ເປັນ​ໃນ​ການ​ສັງ​ລວມ​ເວ​ລາ​, ມີ loops ຂະ​ຫນາດ​ໃຫຍ່​ຫຼາຍ​. Loops ກັບຫຼາຍ
ຕັນພື້ນຖານກ່ວາພາລາມິເຕີນີ້ຈະບໍ່ມີການເພີ່ມປະສິດທິພາບການເຄື່ອນໄຫວແບບ loop invariant
ປະຕິບັດໃຫ້ເຂົາເຈົ້າ. ຄ່າເລີ່ມຕົ້ນຂອງພາລາມິເຕີແມ່ນ 1000 ສໍາລັບ -O1 ແລະ 10000
ສໍາລັບ -O2 ແລະສູງກວ່າ.

loop-max-datarefs-for-datadeps
ການສ້າງ dapendencies ຂໍ້ມູນແມ່ນລາຄາແພງສໍາລັບ loops ຂະຫນາດໃຫຍ່ຫຼາຍ. ພາລາມິເຕີນີ້
ຈໍາກັດຈໍານວນການອ້າງອິງຂໍ້ມູນໃນ loops ທີ່ຖືກພິຈາລະນາສໍາລັບຂໍ້ມູນ
ການວິເຄາະເອື່ອຍອີງ. ເຫຼົ່ານີ້ loops ຂະຫນາດໃຫຍ່ຈະບໍ່ຖືກຈັດການຫຼັງຈາກນັ້ນໂດຍ
ການເພີ່ມປະສິດທິພາບໂດຍໃຊ້ການຂື້ນກັບຂໍ້ມູນ loop. ຄ່າເລີ່ມຕົ້ນແມ່ນ 1000.

max-vartrack-size
ກໍານົດຈໍານວນສູງສຸດຂອງຊ່ອງຕາຕະລາງ hash ເພື່ອໃຊ້ໃນລະຫວ່າງການຕິດຕາມຂໍ້ມູນການປ່ຽນແປງ
ການ​ວິ​ເຄາະ​ຫນ້າ​ທີ່​ໃດ​ຫນຶ່ງ​. ຖ້າ​ຫາກ​ວ່າ​ຈໍາ​ກັດ​ນີ້​ແມ່ນ​ເກີນ​ທີ່​ມີ​ການ​ຕິດ​ຕາມ​ຕົວ​ປ່ຽນ​ແປງ​ທີ່​
ການມອບຫມາຍຖືກເປີດໃຊ້ງານ, ການວິເຄາະສໍາລັບຟັງຊັນນັ້ນຖືກລອງໃຫມ່ໂດຍບໍ່ມີມັນ, ຫຼັງຈາກ
ການເອົາ inss ດີບັກທັງໝົດອອກຈາກຟັງຊັນ. ຖ້າເກີນຂອບເຂດຈໍາກັດເຖິງແມ່ນວ່າບໍ່ມີ
debug insns, ການວິເຄາະການຕິດຕາມ var ແມ່ນຖືກປິດໃຊ້ງານຢ່າງສົມບູນສໍາລັບຟັງຊັນ.
ການຕັ້ງຄ່າພາລາມິເຕີເປັນສູນເຮັດໃຫ້ມັນບໍ່ຈໍາກັດ.

max-vartrack-expr-depth
ກໍານົດຈໍານວນສູງສຸດຂອງລະດັບ recursion ໃນເວລາທີ່ພະຍາຍາມແຜນທີ່ຊື່ຕົວແປຫຼື
debug temporaries ກັບການສະແດງຄຸນຄ່າ. ນີ້ໃຊ້ເວລາການລວບລວມການຄ້າສໍາລັບການເພີ່ມເຕີມ
ຂໍ້ມູນດີບັກຄົບຖ້ວນ. ຖ້າອັນນີ້ຖືກຕັ້ງໄວ້ຕໍ່າເກີນໄປ, ຄ່າທີ່ສະແດງອອກແມ່ນ
ມີຢູ່ແລະສາມາດເປັນຕົວແທນໃນຂໍ້ມູນ debug ອາດຈະບໍ່ຖືກນໍາໃຊ້;
ການຕັ້ງຄ່າທີ່ສູງກວ່ານີ້ອາດຈະເຮັດໃຫ້ compiler ຊອກຫາການດີບັກທີ່ສັບສົນຫຼາຍ
ການສະແດງອອກ, ແຕ່ການລວບລວມເວລາແລະຄວາມຊົງຈໍາອາດຈະເຕີບໂຕ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 12.

min-nondebug-insn-uid
ໃຊ້ uids ເລີ່ມຕົ້ນທີ່ພາລາມິເຕີນີ້ສໍາລັບ insns nondebug. ຂອບເຂດຂ້າງລຸ່ມນີ້
ພາລາມິເຕີແມ່ນສະຫງວນໄວ້ສະເພາະສໍາລັບ debug insns ສ້າງໂດຍ
-fvar-tracking-assignments, ແຕ່ debug insns ອາດຈະໄດ້ຮັບ (ບໍ່ທັບຊ້ອນກັນ) uids ຂ້າງເທິງ
ມັນຖ້າຂອບເຂດທີ່ສະຫງວນໄວ້ຫມົດແລ້ວ.

ipa-sra-ptr-growth-factor
IPA-SRA ຈະປ່ຽນຕົວຊີ້ໄປຫາຕົວຊີ້ລວມດ້ວຍໜຶ່ງ ຫຼືຫຼາຍກວ່າຕົວກໍານົດການໃໝ່
ເມື່ອຂະໜາດສະສົມຂອງພວກມັນໜ້ອຍກວ່າ ຫຼືເທົ່າກັບ ipa-sra-ptr-growth-factor
ເທົ່າຂອງຂະຫນາດຂອງຕົວຊີ້ຕົ້ນສະບັບ.

tm-max-aggregate-size
ໃນເວລາທີ່ເຮັດສໍາເນົາຂອງຕົວແປ thread-local ໃນການເຮັດທຸລະກໍາ, ພາລາມິເຕີນີ້
ລະບຸຂະໜາດໃນໄບຕ໌ ຫຼັງຈາກຕົວແປຕ່າງໆຈະຖືກບັນທຶກໄວ້ດ້ວຍການບັນທຶກ
ປະຕິບັດຫນ້າທີ່ກົງກັນຂ້າມກັບບັນທຶກ / ຟື້ນຟູຄູ່ລໍາດັບລະຫັດ. ທາງເລືອກນີ້ເທົ່ານັ້ນ
ນຳໃຊ້ໃນເວລານຳໃຊ້ -fgnu-tm.

graphite-max-nb-scop-params
ເພື່ອຫຼີກເວັ້ນການຜົນກະທົບ exponential ໃນວົງ Graphite transforms, ຈໍານວນຂອງ
ພາລາມິເຕີໃນສ່ວນຄວບຄຸມຄົງທີ່ (SCoP) ຖືກຜູກມັດ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 10
ຕົວກໍານົດການ. ຕົວແປທີ່ບໍ່ຮູ້ຄ່າໃນເວລາລວບລວມ ແລະກຳນົດ
ນອກ SCoP ແມ່ນຕົວກໍານົດການຂອງ SCoP.

graphite-max-bbs-per-function
ເພື່ອຫຼີກເວັ້ນການຜົນກະທົບ exponential ໃນການກວດຫາ SCoPs, ຂະຫນາດຂອງຫນ້າທີ່
ການວິເຄາະໂດຍ Graphite ແມ່ນ bounded. ຄ່າເລີ່ມຕົ້ນແມ່ນ 100 ຕັນພື້ນຖານ.

loop-block-tile-size
Loop blocking ຫຼື strip mining transforms, ເປີດໃຊ້ງານດ້ວຍ -floop-block or
-floop-strip-mine, strip mine ແຕ່ລະ loop ໃນ loop ຮັງໂດຍຈໍານວນຂອງ
ຊ້ຳ. ຄວາມຍາວຂອງແຖບສາມາດປ່ຽນແປງໄດ້ໂດຍໃຊ້ loop-block-tile-size
ພາລາມິເຕີ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 51 ຊ້ຳ.

ipa-cp-value-list-size
IPA-CP ພະຍາຍາມຕິດຕາມຄ່າທີ່ເປັນໄປໄດ້ທັງໝົດ ແລະປະເພດທີ່ສົ່ງໄປຫາຟັງຊັນໃດໜຶ່ງ
ຕົວກໍານົດການເພື່ອຂະຫຍາຍພວກມັນແລະປະຕິບັດ devirtualization. ipa-cp-value-
ຂະຫນາດລາຍການ ແມ່ນຈໍານວນສູງສຸດຂອງຄ່າແລະປະເພດທີ່ມັນເກັບຮັກສາຕໍ່ຫນຶ່ງຢ່າງເປັນທາງການ
ພາລາມິເຕີຂອງຟັງຊັນ.

lto-partitions
ລະບຸຈໍານວນພາທິຊັນທີ່ຕ້ອງການທີ່ຜະລິດໃນລະຫວ່າງການລວບລວມ WHOPR. ໄດ້
ຈໍານວນຂອງການແບ່ງສ່ວນຄວນເກີນຈໍານວນ CPU ທີ່ໃຊ້ສໍາລັບການລວບລວມ. ໄດ້
ຄ່າເລີ່ມຕົ້ນແມ່ນ 32.

lto-minpartition
ຂະໜາດຂອງການແບ່ງປັນໜ້ອຍທີ່ສຸດສຳລັບ WHOPR (ຕາມຄຳແນະນຳທີ່ຄາດຄະເນ). ນີ້ປ້ອງກັນ
ຄ່າ​ໃຊ້​ຈ່າຍ​ຂອງ​ການ​ແຍກ​ໂຄງ​ການ​ຂະ​ຫນາດ​ນ້ອຍ​ຫຼາຍ​ເຂົ້າ​ໄປ​ໃນ​ການ​ແບ່ງ​ປັນ​ຫຼາຍ​ເກີນ​ໄປ​.

cxx-max-namespaces-for-diagnostic-help
ຈໍາ​ນວນ​ສູງ​ສຸດ​ຂອງ namespaces ທີ່​ຈະ​ປຶກ​ສາ​ຫາ​ລື​ສໍາ​ລັບ​ຄໍາ​ແນະ​ນໍາ​ໃນ​ເວ​ລາ​ທີ່​ການ​ຊອກ​ຫາ​ຊື່ C++​
ລົ້ມເຫລວສໍາລັບຕົວລະບຸ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 1000.

sink-frequency-threshold
ຄວາມຖີ່ຂອງການປະຕິບັດສູງສຸດທີ່ກ່ຽວຂ້ອງ (ເປັນເປີເຊັນ) ຂອງຕັນເປົ້າຫມາຍ
ປຽບທຽບກັບຕັນຕົ້ນສະບັບຂອງຄໍາຖະແຫຼງທີ່ຈະອະນຸຍາດໃຫ້ຄໍາຖະແຫຼງທີ່ຈົມລົງຂອງ a
ຖະແຫຼງການ. ຕົວເລກທີ່ໃຫຍ່ກວ່າສົ່ງຜົນໃຫ້ຄໍາຖະແຫຼງທີ່ຮຸກຮານຫຼາຍຂື້ນ. ໄດ້
ຄ່າເລີ່ມຕົ້ນແມ່ນ 75. ການປັບຄ່າທາງບວກເລັກນ້ອຍແມ່ນໃຊ້ສໍາລັບຄໍາຖະແຫຼງທີ່ມີ
ປະຕິບັດການຫນ່ວຍຄວາມຈໍາຍ້ອນວ່າເຫຼົ່ານັ້ນແມ່ນມີກໍາໄລຫຼາຍດັ່ງນັ້ນຈົມລົງ.

max-stores-to-sink
ຈໍາ​ນວນ​ສູງ​ສຸດ​ຂອງ​ຄູ່​ຮ້ານ​ທີ່​ມີ​ເງື່ອນ​ໄຂ​ທີ່​ສາ​ມາດ​ຖືກ sunk​. ຕັ້ງເປັນ 0 ຖ້າ
ທັງ vectorization (-ftree-vectorize) ຫຼື if-conversion (-ftree-loop-if-convert)
ຖືກປິດໃຊ້ງານ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 2.

allow-load-data-races
ອະນຸຍາດໃຫ້ຜູ້ເພີ່ມປະສິດທິພາບແນະນໍາການແຂ່ງຂັນຂໍ້ມູນໃຫມ່ກ່ຽວກັບການໂຫຼດ. ກໍານົດເປັນ 1 ເພື່ອອະນຸຍາດໃຫ້,
ຖ້າ ບໍ່ ດັ່ງ ນັ້ນ ເປັນ 0. ທາງ ເລືອກ ນີ້ ແມ່ນ ເປີດ ໃຊ້ ງານ ໂດຍ ໄວ້ ໃນ ຕອນ ຕົ້ນ ເວັ້ນ ເສຍ ແຕ່ implicitly ກໍາ ນົດ ໂດຍ
-fmemory-model= ທາງເລືອກ.

ອະນຸຍາດໃຫ້ເກັບຮັກສາຂໍ້ມູນ-ເຊື້ອຊາດ
ອະນຸຍາດໃຫ້ຜູ້ເພີ່ມປະສິດທິພາບແນະນໍາການແຂ່ງຂັນຂໍ້ມູນໃຫມ່ໃນຮ້ານຄ້າ. ກໍານົດເປັນ 1 ເພື່ອອະນຸຍາດໃຫ້,
ຖ້າ ບໍ່ ດັ່ງ ນັ້ນ ເປັນ 0. ທາງ ເລືອກ ນີ້ ແມ່ນ ເປີດ ໃຊ້ ງານ ໂດຍ ໄວ້ ໃນ ຕອນ ຕົ້ນ ເວັ້ນ ເສຍ ແຕ່ implicitly ກໍາ ນົດ ໂດຍ
-fmemory-model= ທາງເລືອກ.

allow-packed-load-data-races
ອະນຸຍາດໃຫ້ຜູ້ເພີ່ມປະສິດທິພາບແນະນໍາການແຂ່ງຂັນຂໍ້ມູນໃຫມ່ກ່ຽວກັບການໂຫຼດຂໍ້ມູນທີ່ຖືກບັນຈຸ. ຕັ້ງເປັນ 1 ຫາ
ອະ​ນຸ​ຍາດ​ໃຫ້, ຖ້າ​ບໍ່​ດັ່ງ​ນັ້ນ​ເປັນ 0. ທາງ​ເລືອກ​ນີ້​ແມ່ນ​ໄດ້​ຮັບ​ການ​ເປີດ​ນໍາ​ໃຊ້​ໂດຍ​ຄ່າ​ເລີ່ມ​ຕົ້ນ​ເວັ້ນ​ເສຍ​ແຕ່​ກໍາ​ນົດ implicitly ໂດຍ
ໄດ້ -fmemory-model= ທາງເລືອກ.

allow-packed-store-data-races
ອະນຸຍາດໃຫ້ຜູ້ເພີ່ມປະສິດທິພາບແນະນຳການແຂ່ງຂັນຂໍ້ມູນໃໝ່ຢູ່ໃນບ່ອນເກັບຂໍ້ມູນທີ່ຖືກບັນຈຸ. ຕັ້ງເປັນ 1 ຫາ
ອະ​ນຸ​ຍາດ​ໃຫ້, ຖ້າ​ບໍ່​ດັ່ງ​ນັ້ນ​ເປັນ 0. ທາງ​ເລືອກ​ນີ້​ແມ່ນ​ໄດ້​ຮັບ​ການ​ເປີດ​ນໍາ​ໃຊ້​ໂດຍ​ຄ່າ​ເລີ່ມ​ຕົ້ນ​ເວັ້ນ​ເສຍ​ແຕ່​ກໍາ​ນົດ implicitly ໂດຍ
ໄດ້ -fmemory-model= ທາງເລືອກ.

case-values-threshold
ຈໍານວນນ້ອຍທີ່ສຸດຂອງຄ່າທີ່ແຕກຕ່າງກັນສໍາລັບການທີ່ດີທີ່ສຸດທີ່ຈະໃຊ້ຕາຕະລາງໂດດ
ແທນທີ່ຈະເປັນຕົ້ນໄມ້ຂອງສາຂາທີ່ມີເງື່ອນໄຂ. ຖ້າຄ່າແມ່ນ 0, ໃຊ້ຄ່າເລີ່ມຕົ້ນສໍາລັບ
ເຄື່ອງ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 0.

tree-reassoc-width
ກໍານົດຈໍານວນສູງສຸດຂອງຄໍາແນະນໍາທີ່ປະຕິບັດໃນຂະຫນານໃນຕົ້ນໄມ້ reassociated.
ພາຣາມິເຕີນີ້ overrides heuristics ຂຶ້ນກັບເປົ້າຫມາຍທີ່ໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຖ້າຫາກວ່າບໍ່ມີ
ຄ່າສູນ.

ທາງເລືອກໃນການ ການຄວບຄຸມ ໄດ້ ໂປເຈັກເຕີ້
ທາງ​ເລືອກ​ເຫຼົ່າ​ນີ້​ຄວບ​ຄຸມ C preprocessor, ເຊິ່ງ​ແມ່ນ​ດໍາ​ເນີນ​ການ​ໃນ​ແຕ່​ລະ​ໄຟລ​໌ C source ກ່ອນ​ທີ່​ຈະ​ເປັນ​ຈິງ
ການລວບລວມ.

ຖ້າທ່ານໃຊ້ -E ທາງເລືອກ, ບໍ່ມີຫຍັງເຮັດໄດ້ຍົກເວັ້ນການປຸງແຕ່ງກ່ອນ. ບາງທາງເລືອກເຫຼົ່ານີ້
ເຮັດໃຫ້ຄວາມຮູ້ສຶກພຽງແຕ່ຮ່ວມກັນກັບ -E ເນື່ອງຈາກວ່າພວກມັນເຮັດໃຫ້ຜົນຜະລິດ preprocessor ເປັນ
ບໍ່ເຫມາະສົມສໍາລັບການລວບລວມຕົວຈິງ.

-Wp​,ທາງເລືອກ
ທ່ານສາມາດໃຊ້ -Wp​,ທາງເລືອກ ເພື່ອຂ້າມໄດເວີ compiler ແລະຜ່ານ ທາງເລືອກ ໂດຍ​ກົງ​ໂດຍ​ຜ່ານ​ການ​
ກັບ preprocessor ໄດ້. ຖ້າ ທາງເລືອກ ມີເຄື່ອງໝາຍຈຸດ, ມັນຖືກແບ່ງອອກເປັນຫຼາຍທາງເລືອກຢູ່ທີ່
ເຄື່ອງໝາຍຈຸດ. ຢ່າງ​ໃດ​ກໍ​ຕາມ​, ທາງ​ເລືອກ​ຈໍາ​ນວນ​ຫຼາຍ​ແມ່ນ​ການ​ດັດ​ແກ້​, ການ​ແປ​ພາ​ສາ​ຫຼື​ການ​ຕີ​ລາ​ຄາ​ໂດຍ​
ໄດເວີ compiler ກ່ອນທີ່ຈະຖືກສົ່ງໄປຫາ preprocessor, ແລະ -Wp ບັງຄັບ bypasses
ໄລຍະນີ້. ການໂຕ້ຕອບໂດຍກົງຂອງ preprocessor ແມ່ນ undocumented ແລະຂຶ້ນກັບ
ປ່ຽນແປງ, ດັ່ງນັ້ນທຸກຄັ້ງທີ່ເປັນໄປໄດ້ທ່ານຄວນຫຼີກເວັ້ນການໃຊ້ -Wp ແລະໃຫ້ຄົນຂັບລົດຈັດການ
ທາງເລືອກແທນ.

- ໂປເຊດເຊີ Xpre ທາງເລືອກ
ຜ່ານ ທາງເລືອກ ເປັນທາງເລືອກສໍາລັບ preprocessor ໄດ້. ທ່ານ​ສາ​ມາດ​ນໍາ​ໃຊ້​ນີ້​ເພື່ອ​ສະ​ຫນອງ​ລະ​ບົບ -
ຕົວເລືອກສະເພາະຕົວປະມວນຜົນກ່ອນທີ່ GCC ບໍ່ຮູ້ວິທີຮັບຮູ້.

ຖ້າທ່ານຕ້ອງການຜ່ານທາງເລືອກທີ່ໃຊ້ການໂຕ້ຖຽງ, ທ່ານຕ້ອງໃຊ້ - ໂປເຊດເຊີ Xpre
ສອງຄັ້ງ, ຫນຶ່ງຄັ້ງສໍາລັບທາງເລືອກແລະຫນຶ່ງຄັ້ງສໍາລັບການໂຕ້ຖຽງ.

-D ຊື່
ກຳນົດລ່ວງໜ້າ ຊື່ ເປັນມະຫາພາກ, ມີນິຍາມ 1.

-D ຊື່=ຄໍານິຍາມ
ເນື້ອໃນຂອງ ຄໍານິຍາມ ແມ່ນ tokenized ແລະປຸງແຕ່ງເປັນຖ້າຫາກວ່າພວກເຂົາເຈົ້າປະກົດວ່າໃນລະຫວ່າງ
ການແປພາສາໄລຍະສາມໃນ a #ກໍານົດ ຄໍາສັ່ງ. ໂດຍສະເພາະ, ຄໍານິຍາມຈະເປັນ
ຫຍໍ້ດ້ວຍຕົວອັກສອນແຖວໃໝ່ທີ່ຝັງໄວ້.

ຖ້າທ່ານກໍາລັງເອີ້ນ preprocessor ຈາກໂຄງການ shell ຫຼື shell, ທ່ານອາດຈະຕ້ອງການ
ເພື່ອໃຊ້ syntax ວົງຢືມຂອງ shell ເພື່ອປົກປ້ອງຕົວອັກສອນເຊັ່ນຊ່ອງທີ່ມີ a
ຄວາມຫມາຍໃນ syntax ຂອງ shell.

ຖ້າທ່ານຕ້ອງການກໍານົດ macro ຄ້າຍຄືຟັງຊັນຢູ່ໃນເສັ້ນຄໍາສັ່ງ, ຂຽນ argument ຂອງມັນ
ລາຍຊື່ທີ່ມີວົງເລັບອ້ອມຂ້າງກ່ອນເຄື່ອງໝາຍເທົ່າກັບ (ຖ້າມີ). ວົງເລັບແມ່ນ
ມີຄວາມຫມາຍສໍາລັບແກະສ່ວນໃຫຍ່, ດັ່ງນັ້ນທ່ານຈະຕ້ອງອ້າງເຖິງທາງເລືອກ. ກັບ sh ແລະ csh,
-D'ຊື່(ໂຕ້ຖຽງ...)=ຄໍານິຍາມ' ວຽກງານ.

-D ແລະ -U ທາງ​ເລືອກ​ແມ່ນ​ໄດ້​ຮັບ​ການ​ປະ​ຕິ​ບັດ​ຕາມ​ຄໍາ​ສັ່ງ​ທີ່​ເຂົາ​ເຈົ້າ​ໄດ້​ຮັບ​ໃນ​ບັນ​ຊີ​ຄໍາ​ສັ່ງ​. ທັງໝົດ
- ໄອມາໂຄຣ ເອກະສານ ແລະ - ລວມ​ທັງ​ ເອກະສານ ທາງ​ເລືອກ​ແມ່ນ​ໄດ້​ຮັບ​ການ​ປຸງ​ແຕ່ງ​ຫຼັງ​ຈາກ​ທີ່​ທັງ​ຫມົດ​ -D ແລະ -U ຕົວເລືອກ

-U ຊື່
ຍົກເລີກຄໍານິຍາມທີ່ຜ່ານມາຂອງ ຊື່, ບໍ່ວ່າຈະສ້າງຂຶ້ນໃນຫຼືສະຫນອງໃຫ້ກັບ a -D ທາງເລືອກ.

-undef
ຢ່າກຳນົດມາໂຄຣສະເພາະລະບົບ ຫຼື GCC ສະເພາະໃດໆລ່ວງໜ້າ. ມາດຕະຖານທີ່ກຳນົດໄວ້ລ່ວງໜ້າ
ມະຫາພາກຍັງຄົງຖືກກໍານົດ.

-I dir
ເພີ່ມໄດເລກະທໍລີ dir ໄປຫາບັນຊີລາຍຊື່ຂອງໄດເລກະທໍລີທີ່ຈະຊອກຫາໄຟລ໌ header.
ລາຍຊື່ໂດຍ -I ຖືກຄົ້ນຫາກ່ອນທີ່ລະບົບມາດຕະຖານປະກອບມີໄດເລກະທໍລີ.
ຖ້າໄດເລກະທໍລີ dir ເປັນລະບົບມາດຕະຖານປະກອບມີໄດເລກະທໍລີ, ທາງເລືອກແມ່ນຖືກລະເວັ້ນ
ໃຫ້ແນ່ໃຈວ່າຄໍາສັ່ງຄົ້ນຫາໃນຕອນຕົ້ນສໍາລັບລະບົບລະບົບແລະການປິ່ນປົວພິເສດ
ສ່ວນຫົວຂອງລະບົບບໍ່ໄດ້ພ່າຍແພ້. ຖ້າ dir ເລີ່ມຕົ້ນດ້ວຍ "=", ຈາກນັ້ນ "=" ຈະເປັນ
ແທນທີ່ດ້ວຍຄໍານໍາຫນ້າ sysroot; ເບິ່ງ --sysroot ແລະ -isysroot.

-o ເອກະສານ
ຂຽນຜົນໄດ້ຮັບໃສ່ ເອກະສານ. ນີ້ແມ່ນຄືກັນກັບການລະບຸ ເອກະສານ ເປັນທາງເລືອກທີສອງທີ່ບໍ່ແມ່ນ
ການໂຕ້ຖຽງກັບ cpp. gcc ມີການຕີຄວາມແຕກຕ່າງກັນຂອງການໂຕ້ຖຽງທີ່ບໍ່ແມ່ນທາງເລືອກທີສອງ,
ດັ່ງນັ້ນທ່ານຕ້ອງໃຊ້ -o ເພື່ອລະບຸໄຟລ໌ຜົນຜະລິດ.

- ຝາ
ເປີດ​ການ​ເຕືອນ​ທາງ​ເລືອກ​ທັງ​ຫມົດ​ທີ່​ຕ້ອງ​ການ​ສໍາ​ລັບ​ລະ​ຫັດ​ປົກ​ກະ​ຕິ​. ໃນປັດຈຸບັນນີ້
is - ຄໍາເຫັນ, -Wtrigraphs, -Wmultichar ແລະການເຕືອນກ່ຽວກັບການສົ່ງເສີມຈໍານວນເຕັມທີ່ເຮັດໃຫ້ເກີດ a
ການປ່ຽນແປງຂອງເຄື່ອງຫມາຍໃນ "#if" ສະແດງອອກ. ໃຫ້ສັງເກດວ່າຫຼາຍຄໍາເຕືອນຂອງ preprocessor
ເປີດໂດຍຄ່າເລີ່ມຕົ້ນ ແລະບໍ່ມີທາງເລືອກທີ່ຈະຄວບຄຸມພວກມັນ.

- ຄໍາເຫັນ
- ຄໍາເຫັນ
ເຕືອນທຸກຄັ້ງທີ່ລຳດັບຄຳເຫັນເລີ່ມຕົ້ນ /* ປາກົດຢູ່ໃນ a /* ຄໍາເຫັນ, ຫຼືທຸກຄັ້ງ a
backslash-newline ປະກົດຢູ່ໃນ a // ຄໍາເຫັນ. (ທັງສອງຮູບແບບມີຜົນກະທົບດຽວກັນ.)

-Wtrigraphs
trigraphs ສ່ວນໃຫຍ່ໃນຄໍາເຫັນບໍ່ສາມາດສົ່ງຜົນກະທົບຕໍ່ຄວາມຫມາຍຂອງໂຄງການ. ຢ່າງໃດກໍ່ຕາມ, ກ
trigraph ທີ່ຈະປະກອບເປັນເສັ້ນໃຫມ່ຫນີ (??/ ໃນຕອນທ້າຍຂອງເສັ້ນ) ສາມາດ, ໂດຍ
ການປ່ຽນແປງບ່ອນທີ່ຄໍາຄິດເຫັນເລີ່ມຕົ້ນຫຼືສິ້ນສຸດ. ເພາະສະນັ້ນ, ພຽງແຕ່ trigraphs ທີ່ຈະປະກອບ
ແຖວໃໝ່ທີ່ຫຼົບໜີອອກມາ ຜະລິດຄຳເຕືອນພາຍໃນຄຳເຫັນ.

ທາງເລືອກນີ້ແມ່ນຊີ້ໃຫ້ເຫັນໂດຍ - ຝາທີ່ຢູ່ ຖ້າຫາກວ່າ - ຝາ ບໍ່ໄດ້ຖືກມອບໃຫ້, ຕົວເລືອກນີ້ຍັງຖືກເປີດໃຊ້ຢູ່
ເວັ້ນເສຍແຕ່ວ່າ trigraphs ຖືກເປີດໃຊ້. ເພື່ອໃຫ້ໄດ້ຮັບການແປງ trigraph ໂດຍບໍ່ມີການເຕືອນ, ແຕ່ໄດ້ຮັບ
ອື່ນໆ - ຝາ ຄໍາ​ເຕືອນ​, ການ​ນໍາ​ໃຊ້​ -trigraphs - ຝາ -Wno-trigraphs.

- ແບບດັ້ງເດີມ
ເຕືອນກ່ຽວກັບສິ່ງກໍ່ສ້າງບາງຢ່າງທີ່ມີລັກສະນະແຕກຕ່າງກັນໃນແບບດັ້ງເດີມ ແລະ ISO C. ນອກຈາກນີ້
ເຕືອນກ່ຽວກັບໂຄງສ້າງ ISO C ທີ່ບໍ່ມີການທຽບເທົ່າ C ແບບດັ້ງເດີມ, ແລະມີບັນຫາ
ການກໍ່ສ້າງທີ່ຄວນຫຼີກເວັ້ນ.

-Wundef
ເຕືອນທຸກຄັ້ງທີ່ພົບຕົວລະບຸທີ່ບໍ່ແມ່ນມະຫາພາກຢູ່ໃນ # ຖ້າ ທິດ​ທາງ​,
ນອກຂອງ ກໍານົດໄວ້. ຕົວລະບຸດັ່ງກ່າວຖືກແທນທີ່ດ້ວຍສູນ.

-Wunused-macros
ເຕືອນກ່ຽວກັບມະຫາພາກທີ່ກຳນົດໄວ້ໃນໄຟລ໌ຫຼັກທີ່ບໍ່ໄດ້ໃຊ້. ມະຫາພາກແມ່ນ ໃຫມ່ ຖ້າມັນແມ່ນ
ຂະຫຍາຍຫຼືທົດສອບການມີຢູ່ຢ່າງຫນ້ອຍຫນຶ່ງຄັ້ງ. preprocessor ຍັງຈະເຕືອນຖ້າຫາກວ່າ
macro ບໍ່ໄດ້ຖືກນໍາໃຊ້ໃນເວລາທີ່ມັນຖືກກໍານົດຄືນໃຫມ່ຫຼືບໍ່ໄດ້ກໍານົດ.

ມາໂຄໃນຕົວ, ມະຫາພາກທີ່ກຳນົດໄວ້ໃນເສັ້ນຄຳສັ່ງ, ແລະ ມະຫາພາກທີ່ກຳນົດໄວ້ໃນລວມມີ
ໄຟລ໌ບໍ່ໄດ້ຖືກເຕືອນກ່ຽວກັບ.

ຫມາຍ​ເຫດ​: ຖ້າມະຫາພາກຖືກນໍາໃຊ້ຕົວຈິງ, ແຕ່ວ່າພຽງແຕ່ໃຊ້ໃນບລັອກທີ່ມີເງື່ອນໄຂທີ່ຂ້າມ, ຫຼັງຈາກນັ້ນ
CPP ຈະລາຍງານວ່າມັນບໍ່ໄດ້ຖືກໃຊ້. ເພື່ອຫຼີກເວັ້ນການເຕືອນໃນກໍລະນີດັ່ງກ່າວ, ທ່ານອາດຈະປັບປຸງ
ຂອບເຂດຂອງຄໍານິຍາມຂອງມະຫາພາກໂດຍ, ສໍາລັບການຍົກຕົວຢ່າງ, ຍ້າຍມັນເຂົ້າໄປໃນຄັ້ງທໍາອິດຂ້າມ
ຕັນ. ອີກທາງເລືອກ, ທ່ານສາມາດສະຫນອງການນໍາໃຊ້ dummy ກັບບາງສິ່ງບາງຢ່າງເຊັ່ນ:

#if ກໍານົດ the_macro_causing_the_warning
#ສຸດທ້າຍ

-Wendif-ປ້າຍ
ເຕືອນທຸກຄັ້ງທີ່ #ອື່ນ or an #ສຸດທ້າຍ ຕິດຕາມດ້ວຍຂໍ້ຄວາມ. ນີ້ມັກຈະເກີດຂຶ້ນໃນ
ລະຫັດຂອງແບບຟອມ

#ຖ້າ FOO
...
# FOO ອື່ນ
...
#endif FOO

"FOO" ທີສອງແລະທີສາມຄວນຈະຢູ່ໃນຄໍາເຫັນ, ແຕ່ມັກຈະບໍ່ມີຢູ່ໃນໂຄງການເກົ່າ.
ການເຕືອນໄພນີ້ແມ່ນຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

- ຄວາມ​ຜິດ​ພາດ​
ເຮັດໃຫ້ການເຕືອນໄພທັງຫມົດເຂົ້າໄປໃນຄວາມຜິດພາດທີ່ຍາກ. ລະຫັດແຫຼ່ງທີ່ເຮັດໃຫ້ເກີດການເຕືອນໄພ
ຖືກປະຕິເສດ.

-Wsystem-headers
ອອກຄໍາເຕືອນສໍາລັບລະຫັດໃນສ່ວນຫົວຂອງລະບົບ. ເຫຼົ່ານີ້ແມ່ນປົກກະຕິບໍ່ມີປະໂຫຍດໃນການຄົ້ນຫາ
ແມງໄມ້ໃນລະຫັດຂອງທ່ານເອງ, ສະນັ້ນສະກັດກັ້ນ. ຖ້າເຈົ້າຮັບຜິດຊອບລະບົບ
ຫ້ອງສະຫມຸດ, ທ່ານອາດຈະຕ້ອງການເບິ່ງເຂົາເຈົ້າ.

-w ສະກັດກັ້ນການເຕືອນໄພທັງຫມົດ, ລວມທັງສິ່ງທີ່ GNU CPP ອອກໂດຍຄ່າເລີ່ມຕົ້ນ.

- pedantic
ອອກການວິນິດໄສບັງຄັບທັງໝົດທີ່ລະບຸໄວ້ໃນມາດຕະຖານ C. ບາງສ່ວນຂອງເຂົາເຈົ້າໄດ້ຖືກປະໄວ້
ອອກໂດຍຄ່າເລີ່ມຕົ້ນ, ນັບຕັ້ງແຕ່ພວກມັນກະຕຸ້ນເລື້ອຍໆກ່ຽວກັບລະຫັດທີ່ບໍ່ມີອັນຕະລາຍ.

-pedantic ຜິດ​ພາດ​
ອອກການວິນິດໄສທີ່ບັງຄັບທັງໝົດ, ແລະເຮັດໃຫ້ການວິນິດໄສທີ່ບັງຄັບທັງໝົດເປັນຄວາມຜິດພາດ.
ນີ້ລວມມີການວິນິດໄສບັງຄັບທີ່ GCC ມີບັນຫາໂດຍບໍ່ມີ - pedantic ແຕ່ປະຕິບັດເປັນ
ຄຳ ເຕືອນ.

-M ແທນ​ທີ່​ຈະ​ໃຫ້​ຜົນ​ໄດ້​ຮັບ​ຂອງ​ການ​ປຸງ​ແຕ່ງ​ກ່ອນ​, ອອກ​ກົດ​ລະ​ບຽບ​ທີ່​ເຫມາະ​ສົມ​ສໍາ​ລັບ​ການ​ ເຮັດໃຫ້
ອະ​ທິ​ບາຍ​ການ​ຂຶ້ນ​ກັບ​ໄຟລ​໌​ຕົ້ນ​ຕໍ​ຂອງ​. preprocessor ຜົນໄດ້ຮັບຫນຶ່ງ
ເຮັດໃຫ້ ກົດລະບຽບທີ່ມີຊື່ໄຟລ໌ວັດຖຸສໍາລັບໄຟລ໌ແຫຼ່ງນັ້ນ, ຈໍ້າສອງເມັດ, ແລະຊື່
ຂອງໄຟລ໌ທັງຫມົດລວມ, ລວມທັງໄຟລ໌ທີ່ມາຈາກ - ລວມ​ທັງ​ or - ໄອມາໂຄຣ ຄໍາສັ່ງ
ຕົວເລືອກສາຍ.

ເວັ້ນເສຍແຕ່ໄດ້ລະບຸຢ່າງຊັດເຈນ (ກັບ -MT or -MQ), ຊື່ໄຟລ໌ວັດຖຸປະກອບດ້ວຍ
ຊື່ຂອງໄຟລ໌ແຫຼ່ງທີ່ມີ suffix ແທນທີ່ດ້ວຍ object file suffix ແລະກັບໃດໆ
ເອົາພາກສ່ວນໄດເລກະທໍລີຊັ້ນນໍາ. ຖ້າມີຫຼາຍໄຟລ໌ລວມແລ້ວກົດລະບຽບແມ່ນ
ແບ່ງອອກເປັນຫຼາຍສາຍໂດຍໃຊ້ - ແຖວໃໝ່. ກົດລະບຽບບໍ່ມີຄໍາສັ່ງ.

ຕົວເລືອກນີ້ບໍ່ໄດ້ສະກັດກັ້ນຜົນດີບັ໊ກຂອງຕົວປະມວນຜົນກ່ອນ, ເຊັ່ນ: -dM. ເພື່ອຫລີກລ້ຽງ
ການປະສົມຜົນດີບັກດັ່ງກ່າວກັບກົດລະບຽບການເພິ່ງພາອາໄສທີ່ທ່ານຄວນລະບຸຢ່າງຊັດເຈນ
ໄຟລ໌ຜົນຜະລິດຂຶ້ນກັບ -MF, ຫຼືໃຊ້ຕົວແປສະພາບແວດລ້ອມເຊັ່ນ
DEPENDENCIES_OUTPUT. ຜົນອອກມາດີບັ໊ກຈະຍັງຄົງຖືກສົ່ງໄປຫາກະແສຜົນຜະລິດປົກກະຕິ
ທຳ ມະດາ.

Passing -M ຫມາຍເຖິງຄົນຂັບລົດ -E, ແລະສະກັດກັ້ນການເຕືອນໄພໂດຍມີເຫດຜົນ -w.

ເອັມ ຄື -M ແຕ່ຢ່າກ່າວເຖິງໄຟລ໌ header ທີ່ພົບເຫັນຢູ່ໃນລະບົບ header directory,
ຫຼືໄຟລ໌ header ທີ່ຖືກລວມເຂົ້າ, ໂດຍກົງຫຼືໂດຍທາງອ້ອມ, ຈາກ header ດັ່ງກ່າວ.

ນີ້ຫມາຍຄວາມວ່າທາງເລືອກຂອງວົງເລັບມຸມຫຼືວົງຢືມຄູ່ໃນ an #include
ຄໍາສັ່ງບໍ່ໄດ້ຢູ່ໃນຕົວຂອງມັນເອງກໍານົດວ່າສ່ວນຫົວນັ້ນຈະປາກົດຢູ່ໃນ ເອັມ
ຜົນ​ຜະ​ລິດ​ທີ່​ອີງ​ໃສ່​. ນີ້ແມ່ນການປ່ຽນແປງເລັກນ້ອຍໃນ semantics ຈາກ GCC ຮຸ່ນ 3.0 ແລະ
ກ່ອນ ໜ້າ ນີ້.

-MF ເອກະສານ
ເມື່ອໃຊ້ກັບ -M or ເອັມ, ກໍານົດໄຟລ໌ທີ່ຈະຂຽນການຂຶ້ນກັບ. ຖ້າບໍ່ມີ -MF
switch ແມ່ນໃຫ້ preprocessor ສົ່ງກົດລະບຽບໄປຫາບ່ອນດຽວກັນທີ່ມັນຈະສົ່ງ
ຜົນຜະລິດທີ່ປຸງແຕ່ງກ່ອນ.

ເມື່ອໃຊ້ກັບຕົວເລືອກໄດເວີ -MD or -MMD, -MF overrides ການເພິ່ງພາອາໄສເລີ່ມຕົ້ນ
ໄຟລ໌ຜົນຜະລິດ.

-MG ໂດຍສົມທົບກັບທາງເລືອກເຊັ່ນ: -M ການ​ຮ້ອງ​ຂໍ​ການ​ຜະ​ລິດ​ທີ່​ເພິ່ງ​ພາ​ອາ​ໄສ​, -MG ສົມມຸດ
ໄຟລ໌ header ທີ່ຂາດຫາຍໄປແມ່ນໄຟລ໌ທີ່ສ້າງຂຶ້ນແລະເພີ່ມພວກມັນໃສ່ບັນຊີລາຍຊື່ການເພິ່ງພາອາໄສໂດຍບໍ່ມີ
ການ​ເພີ່ມ​ຄວາມ​ຜິດ​ພາດ​. ຊື່ໄຟລ໌ທີ່ເພິ່ງພາອາໄສແມ່ນເອົາໂດຍກົງຈາກ "#include"
ທິດ​ທາງ​ໂດຍ​ບໍ່​ມີ​ການ prepending ເສັ້ນ​ທາງ​ໃດ​ຫນຶ່ງ​. -MG ຍັງສະກັດກັ້ນຜົນຜະລິດທີ່ປຸງແຕ່ງກ່ອນ, ເປັນ
ໄຟລ໌ສ່ວນຫົວທີ່ຂາດຫາຍໄປເຮັດໃຫ້ນີ້ບໍ່ມີປະໂຫຍດ.

ຄຸນນະສົມບັດນີ້ຖືກນໍາໃຊ້ໃນການປັບປຸງອັດຕະໂນມັດຂອງ makefiles.

-MP ທາງເລືອກນີ້ແນະນໍາ CPP ເພື່ອເພີ່ມເປົ້າຫມາຍ phony ສໍາລັບແຕ່ລະ dependency ອື່ນນອກຈາກ
ໄຟລ໌ຕົ້ນຕໍ, ເຮັດໃຫ້ແຕ່ລະຄົນຂຶ້ນກັບບໍ່ມີຫຍັງ. ກົດລະບຽບ dummy ເຫຼົ່ານີ້ເຮັດວຽກກ່ຽວກັບຄວາມຜິດພາດ
ເຮັດໃຫ້ ໃຫ້ຖ້າຫາກວ່າທ່ານເອົາໄຟລ໌ header ໂດຍບໍ່ມີການປັບປຸງ makefile ກົງກັນ.

ນີ້ແມ່ນຜົນຜະລິດປົກກະຕິ:

test.o: test.c test.h

test.h:

-MT ເປົ້າ​ຫມາຍ
ປ່ຽນແປງເປົ້າຫມາຍຂອງກົດລະບຽບທີ່ປ່ອຍອອກມາໂດຍການຜະລິດການເພິ່ງພາອາໄສ. ໂດຍຄ່າເລີ່ມຕົ້ນ CPP ໃຊ້ເວລາ
ຊື່​ຂອງ​ໄຟລ​໌​ທີ່​ນໍາ​ເຂົ້າ​ຕົ້ນ​ຕໍ​, ລຶບ​ອົງ​ປະ​ກອບ​ລະ​ບົບ​ແລະ​ຄໍາ​ຕໍ່​ທ້າຍ​ໄຟລ​໌​ໃດ​ຫນຶ່ງ​
ເຊັ່ນ​ວ່າ .c, ແລະຕໍ່ທ້າຍຂອງວັດຖຸປົກກະຕິຂອງເວທີ. ຜົນໄດ້ຮັບແມ່ນເປົ້າຫມາຍ.

An -MT ທາງ​ເລືອກ​ຈະ​ຕັ້ງ​ເປົ້າ​ຫມາຍ​ໃຫ້​ແນ່​ນອນ​ສະ​ຕ​ຣິງ​ທີ່​ທ່ານ​ລະ​ບຸ​ໄວ້​. ຖ້າ​ເຈົ້າ​ຕ້ອງ​ການ
ເປົ້າຫມາຍຫຼາຍ, ທ່ານສາມາດກໍານົດໃຫ້ເຂົາເຈົ້າເປັນການໂຕ້ຖຽງດຽວກັບ -MT, ຫຼືໃຊ້ຫຼາຍອັນ
-MT ຕົວເລືອກ

ຍົກ​ຕົວ​ຢ່າງ, -MT '$(objpfx)foo.o' ອາດຈະໃຫ້

$(objpfx)foo.o: foo.c

-MQ ເປົ້າ​ຫມາຍ
ຄື​ກັນ​ກັບ -MT, ແຕ່ມັນອ້າງເຖິງຕົວລະຄອນໃດນຶ່ງທີ່ເປັນພິເສດເພື່ອເຮັດ.
-MQ '$(objpfx)foo.o' ເຮັດໃຫ້

$$(objpfx)foo.o: foo.c

ເປົ້າໝາຍເລີ່ມຕົ້ນຖືກອ້າງອີງໂດຍອັດຕະໂນມັດ, ຄືກັບວ່າມັນຖືກມອບໃຫ້ -MQ.

-MD -MD ເທົ່າກັບ -M -MF ເອກະສານ, ຍົກເວັ້ນນັ້ນ -E ບໍ່ໄດ້ຫມາຍຄວາມວ່າ. ຄົນຂັບລົດ
ກໍານົດ ເອກະສານ ອີງໃສ່ບໍ່ວ່າຈະເປັນ -o ທາງເລືອກແມ່ນໃຫ້. ຖ້າມັນເປັນ, ຄົນຂັບລົດໃຊ້ຂອງມັນ
ການໂຕ້ຖຽງແຕ່ມີ suffix ຂອງ .dຖ້າ​ບໍ່​ດັ່ງ​ນັ້ນ​ມັນ​ໃຊ້​ເວ​ລາ​ຊື່​ຂອງ​ໄຟລ​໌​ທີ່​ປ້ອນ​ຂໍ້​ມູນ​,
ເອົາອົງປະກອບຂອງໄດເລກະທໍລີແລະຄໍາຕໍ່ທ້າຍ, ແລະນໍາໃຊ້ a .d បច្ច័យ.

If -MD ແມ່ນໃຊ້ຮ່ວມກັບ -E, ໃດໆ -o switch ແມ່ນເຂົ້າໃຈເພື່ອລະບຸ
ໄຟລ​໌​ຜົນ​ຜະ​ລິດ​ທີ່​ອີງ​ໃສ່​, ແຕ່​ຖ້າ​ຫາກ​ວ່າ​ນໍາ​ໃຊ້​ໂດຍ​ບໍ່​ມີ​ການ​ -E, ແຕ່ລະຄົນ -o ແມ່ນເຂົ້າໃຈເພື່ອລະບຸ a
ໄຟລ໌ວັດຖຸເປົ້າໝາຍ.

ນັບຕັ້ງແຕ່ -E ບໍ່​ໄດ້​ຫມາຍ​ຄວາມ​ວ່າ​, -MD ສາມາດໃຊ້ເພື່ອສ້າງໄຟລ໌ຜົນຜະລິດທີ່ຂຶ້ນກັບເປັນ
ຜົນຂ້າງຄຽງຂອງຂະບວນການລວບລວມ.

-MMD
ຄື -MD ຍົກເວັ້ນການກ່າວເຖິງໄຟລ໌ສ່ວນຫົວຂອງຜູ້ໃຊ້ເທົ່ານັ້ນ, ບໍ່ແມ່ນໄຟລ໌ສ່ວນຫົວຂອງລະບົບ.

-fpch-deps
ເມື່ອໃຊ້ສ່ວນຫົວທີ່ລວບລວມໄວ້ລ່ວງໜ້າ, ທຸງນີ້ຈະເຮັດໃຫ້ທຸງຜົນການເພິ່ງພາອາໄສ
ຍັງລາຍຊື່ໄຟລ໌ຈາກການຂຶ້ນກັບສ່ວນຫົວຂອງ precompiled. ຖ້າບໍ່ໄດ້ລະບຸໄວ້ເທົ່ານັ້ນ
header precompiled ຈະຖືກລະບຸໄວ້ແລະບໍ່ແມ່ນໄຟລ໌ທີ່ຖືກນໍາໃຊ້ເພື່ອສ້າງມັນ
ເນື່ອງຈາກວ່າໄຟລ໌ເຫຼົ່ານັ້ນບໍ່ໄດ້ຖືກປຶກສາຫາລືໃນເວລາທີ່ header precompiled ຖືກນໍາໃຊ້.

-fpch-preprocess
ຕົວເລືອກນີ້ອະນຸຍາດໃຫ້ໃຊ້ header precompiled ຮ່ວມກັບ -E. ມັນແຊກພິເສດ
"#pragma", "#pragma GCC pch_preprocess"ຊື່​ເອ​ກະ​ສານ"" ໃນຜົນຜະລິດເພື່ອຫມາຍສະຖານທີ່
ບ່ອນທີ່ຫົວຂໍ້ precompiled ໄດ້ພົບເຫັນ, ແລະຂອງມັນ ຊື່​ເອ​ກະ​ສານທີ່ຢູ່ ເມື່ອ​ໃດ​ -fpreprocessed ແມ່ນຢູ່ໃນ
ການນໍາໃຊ້, GCC ຮັບຮູ້ "#pragma" ນີ້ແລະໂຫຼດ PCH.

ທາງ​ເລືອກ​ນີ້​ຈະ​ປິດ​ເປັນ​ຄ່າ​ເລີ່ມ​ຕົ້ນ​, ເນື່ອງ​ຈາກ​ວ່າ​ຜົນ​ຜະ​ລິດ​ກ່ອນ​ການ​ຜະ​ລິດ​ຜົນ​ໄດ້​ຮັບ​ພຽງ​ແຕ່​
ເໝາະແທ້ໆສຳລັບການປ້ອນຂໍ້ມູນໃສ່ GCC. ມັນຖືກເປີດໂດຍ - save-temps​.

ທ່ານບໍ່ຄວນຂຽນ "#pragma" ນີ້ຢູ່ໃນລະຫັດຂອງທ່ານເອງ, ແຕ່ມັນປອດໄພທີ່ຈະແກ້ໄຂ
ຊື່ໄຟລ໌ຖ້າໄຟລ໌ PCH ມີຢູ່ໃນບ່ອນອື່ນ. ຊື່ໄຟລ໌ອາດຈະເປັນ
absolute ຫຼືມັນອາດຈະເປັນພີ່ນ້ອງກັບໄດເລກະທໍລີປະຈຸບັນຂອງ GCC.

-x c
-x c ++
-x ຈຸດປະສົງ - ຄ
-x assembler-with-cpp
ລະບຸພາສາຕົ້ນສະບັບ: C, C++, Objective-C, ຫຼືການປະກອບ. ນີ້ບໍ່ມີຫຍັງເຮັດ
ມີການປະຕິບັດຕາມມາດຕະຖານຫຼືການຂະຫຍາຍ; ມັນພຽງແຕ່ເລືອກ syntax ພື້ນຖານໃດ
ຄາດຫວັງ. ຖ້າທ່ານບໍ່ໃຫ້ທາງເລືອກເຫຼົ່ານີ້, cpp ຈະ deduce ພາສາຈາກ
ສ່ວນຂະຫຍາຍຂອງໄຟລ໌ແຫຼ່ງ: .c, cc, .m, ຫຼື .S. ບາງສ່ວນຂະຫຍາຍທົ່ວໄປອື່ນໆສໍາລັບ
C ++ ແລະການປະກອບຍັງຖືກຮັບຮູ້. ຖ້າ cpp ບໍ່ຮັບຮູ້ການຂະຫຍາຍ, ມັນ
ຈະຮັກສາໄຟລ໌ເປັນ C; ນີ້ແມ່ນຮູບແບບທົ່ວໄປທີ່ສຸດ.

ຫມາຍ​ເຫດ​: ລຸ້ນກ່ອນໜ້າຂອງ cpp ຍອມຮັບ a - ພາສາ ທາງ​ເລືອກ​ທີ່​ເລືອກ​ທັງ​ສອງ​
ພາສາ ແລະລະດັບຄວາມສອດຄ່ອງຂອງມາດຕະຖານ. ທາງເລືອກນີ້ໄດ້ຖືກໂຍກຍ້າຍ, ເພາະວ່າ
ມັນຂັດແຍ້ງກັບ -l ທາງເລືອກ.

-std=ມາດຕະຖານ
-ansi
ລະບຸມາດຕະຖານທີ່ລະຫັດຄວນປະຕິບັດຕາມ. ປະຈຸ​ບັນ CPP ຮູ້​ກ່ຽວ​ກັບ C
ແລະມາດຕະຖານ C++; ຄົນອື່ນອາດຈະຖືກເພີ່ມໃນອະນາຄົດ.

ມາດຕະຖານ ອາດ​ຈະ​ເປັນ​ຫນຶ່ງ​ໃນ​:

"c90"
"c89"
"iso9899: 1990"
ມາດຕະຖານ ISO C ຈາກປີ 1990. c90 ແມ່ນ shorthand ປະເພນີສໍາລັບການສະບັບນີ້ຂອງ
ມາດຕະຖານ.

ໄດ້ -ansi ທາງເລືອກແມ່ນທຽບເທົ່າກັບ -std=c90.

"iso9899: 199409"
ມາດ​ຕະ​ຖານ C ປີ 1990, ດັ່ງ​ທີ່​ໄດ້​ປັບ​ປຸງ​ໃນ​ປີ 1994.

"iso9899: 1999"
"c99"
"iso9899: 199x"
"c9x"
ມາດຕະຖານ ISO C ສະບັບປັບປຸງ, ຈັດພີມມາໃນເດືອນທັນວາ 1999. ກ່ອນທີ່ຈະພິມເຜີຍແຜ່, ນີ້
ເປັນທີ່ຮູ້ຈັກເປັນ C9X.

"iso9899: 2011"
"c11"
"c1x"
ມາດຕະຖານ ISO C ສະບັບປັບປຸງ, ຈັດພີມມາໃນເດືອນທັນວາ 2011. ກ່ອນທີ່ຈະພິມເຜີຍແຜ່, ນີ້
ເປັນທີ່ຮູ້ຈັກເປັນ C1X.

"gnu90"
"gnu89"
ມາດຕະຖານ C 1990 ບວກກັບສ່ວນຂະຫຍາຍ GNU. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

"gnu99"
"gnu9x"
ມາດຕະຖານ C 1999 ບວກກັບສ່ວນຂະຫຍາຍ GNU.

"gnu11"
"gnu1x"
ມາດຕະຖານ C 2011 ບວກກັບສ່ວນຂະຫຍາຍ GNU.

"c++98"
ມາດຕະຖານ ISO C++ ປີ 1998 ບວກກັບການແກ້ໄຂ.

"gnu++98"
ຄື​ກັນ​ກັບ -std=c++98 ບວກກັບສ່ວນຂະຫຍາຍ GNU. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນຂອງລະຫັດ C++.

-AND- ແຍກເສັ້ນທາງລວມ. ໄດເລກະທໍລີໃດນຶ່ງທີ່ລະບຸດ້ວຍ -I ທາງເລືອກກ່ອນ -AND- ມີ
ຄົ້ນຫາພຽງແຕ່ສ່ວນຫົວທີ່ຮ້ອງຂໍດ້ວຍ "#include"ໄຟລ໌""; ພວກເຂົາບໍ່ໄດ້ຄົ້ນຫາ
"#ລວມໄຟລ໌>". ຖ້າໄດເລກະທໍລີເພີ່ມເຕີມຖືກກໍານົດດ້ວຍ -I ທາງ​ເລືອກ​ຫຼັງ​ຈາກ​
-AND-, ໄດເລກະທໍລີເຫຼົ່ານັ້ນຖືກຄົ້ນຫາທັງຫມົດ #include ທິດທາງ.

ເພີ່ມ​ເຕີມ, -AND- inhibits ການ​ນໍາ​ໃຊ້​ຂອງ​ບັນ​ຊີ​ລາຍ​ການ​ໄຟລ​໌​ປະ​ຈຸ​ບັນ​ເປັນ​
ໄດເລກະທໍລີຄົ້ນຫາທໍາອິດສໍາລັບ "#include"ໄຟລ໌"". ຕົວເລືອກນີ້ຖືກປະຕິເສດ.

-nostdinc
ຢ່າຄົ້ນຫາໄດເລກະທໍລີລະບົບມາດຕະຖານສໍາລັບໄຟລ໌ສ່ວນຫົວ. ພຽງແຕ່ໄດເລກະທໍລີ
ທ່ານ​ໄດ້​ລະ​ບຸ​ໄວ້​ກັບ​ -I ທາງເລືອກ (ແລະໄດເລກະທໍລີຂອງໄຟລ໌ປະຈຸບັນ, ຖ້າ
ທີ່ເຫມາະສົມ) ຖືກຄົ້ນຫາ.

-nostdinc++
ຢ່າຊອກຫາໄຟລ໌ header ໃນໄດເລກະທໍລີມາດຕະຖານສະເພາະ C++, ແຕ່ເຮັດຕໍ່ໄປ
ຄົ້ນຫາໄດເລກະທໍລີມາດຕະຖານອື່ນໆ. (ທາງ​ເລືອກ​ນີ້​ໄດ້​ຖືກ​ນໍາ​ໃຊ້​ໃນ​ເວ​ລາ​ທີ່​ການ​ກໍ່​ສ້າງ C ++​
ຫໍສະໝຸດ.)

- ລວມ​ທັງ​ ເອກະສານ
ຂະບວນການ ເອກະສານ ຄືກັບວ່າ "#include "file" ປາກົດເປັນແຖວທໍາອິດຂອງແຫຼ່ງຕົ້ນຕໍ
ໄຟລ໌. ຢ່າງໃດກໍຕາມ, ໄດເລກະທໍລີທໍາອິດຄົ້ນຫາ ເອກະສານ ແມ່ນ preprocessor ເຮັດວຽກ
ລະບົບ ແທນທີ່ຈະເປັນ of ໄດເລກະທໍລີທີ່ປະກອບດ້ວຍໄຟລ໌ຕົ້ນສະບັບ. ຖ້າບໍ່ພົບ
ຢູ່ທີ່ນັ້ນ, ມັນຖືກຄົ້ນຫາຢູ່ໃນສ່ວນທີ່ເຫລືອຂອງ "#include "..."" ລະບົບຕ່ອງໂສ້ຄົ້ນຫາ
ທຳ ມະດາ.

ຖ້າຫຼາຍ - ລວມ​ທັງ​ ທາງ​ເລືອກ​ແມ່ນ​ໄດ້​ຮັບ​, ໄຟລ​໌​ແມ່ນ​ລວມ​ຢູ່​ໃນ​ຄໍາ​ສັ່ງ​ທີ່​ເຂົາ​ເຈົ້າ​
ປາກົດຢູ່ໃນເສັ້ນຄໍາສັ່ງ.

- ໄອມາໂຄຣ ເອກະສານ
ຄືກັນ - ລວມ​ທັງ​, ຍົກເວັ້ນວ່າຜົນຜະລິດໃດໆທີ່ຜະລິດໂດຍການສະແກນ ເອກະສານ ຖືກຖີ້ມ
ຫ່າງ. Macros ມັນກໍານົດຍັງຄົງຖືກກໍານົດ. ນີ້ອະນຸຍາດໃຫ້ທ່ານສາມາດໄດ້ຮັບມະຫາພາກທັງຫມົດ
ຈາກສ່ວນຫົວໂດຍບໍ່ມີການປະມວນຜົນການປະກາດຂອງມັນ.

ໄຟລ໌ທັງໝົດທີ່ລະບຸໂດຍ - ໄອມາໂຄຣ ຖືກປະມວນຜົນກ່ອນໄຟລ໌ທັງໝົດທີ່ລະບຸໂດຍ - ລວມ​ທັງ​.

-idirafter dir
ຄົ້ນຫາ dir ສໍາລັບໄຟລ໌ header, ແຕ່ເຮັດມັນ ຫຼັງຈາກ ໄດເລກະທໍລີທັງໝົດທີ່ລະບຸດ້ວຍ -I ແລະ
ໄດເລກະທໍລີລະບົບມາດຕະຖານໝົດແລ້ວ. dir ຖືກປະຕິບັດເປັນລະບົບປະກອບມີ
ໄດເລກະທໍລີ. ຖ້າ dir ເລີ່ມຕົ້ນດ້ວຍ "=", ຈາກນັ້ນ "=" ຈະຖືກແທນທີ່ດ້ວຍ sysroot
ຄໍານໍາຫນ້າ; ເບິ່ງ --sysroot ແລະ -isysroot.

- ຄໍາ​ນິ​ຍາມ​ ຄຳ ນຳ ໜ້າ
ລະບຸວ່າ ຄຳ ນຳ ໜ້າ ເປັນຄໍານໍາຫນ້າສໍາລັບການຕໍ່ມາ -iwithprefix ທາງເລືອກ. ຖ້າຄໍານໍາຫນ້າ
ເປັນຕົວແທນຂອງໄດເລກະທໍລີ, ທ່ານຄວນປະກອບມີສຸດທ້າຍ /.

-iwithprefix dir
-iwithprefix ກ່ອນ dir
ເອກະສານຊ້ອນທ້າຍ dir ກັບຄໍານໍາຫນ້າທີ່ລະບຸໄວ້ກ່ອນຫນ້ານີ້ກັບ - ຄໍາ​ນິ​ຍາມ​, ແລະເພີ່ມຜົນໄດ້ຮັບ
ໄດເລກະທໍລີທີ່ປະກອບມີເສັ້ນທາງຄົ້ນຫາ. -iwithprefix ກ່ອນ ເອົາມັນຢູ່ໃນສະຖານທີ່ດຽວກັນ -I
ຈະ; -iwithprefix ວາງມັນໄວ້ບ່ອນໃດ -idirafter ຈະ.

-isysroot dir
ທາງເລືອກນີ້ແມ່ນຄ້າຍຄື --sysroot ທາງ​ເລືອກ​, ແຕ່​ນໍາ​ໃຊ້​ພຽງ​ແຕ່​ກັບ​ໄຟລ​໌ header (ຍົກ​ເວັ້ນ​ສໍາ​ລັບ​ການ​
Darwin ເປົ້າຫມາຍ, ບ່ອນທີ່ມັນໃຊ້ກັບທັງໄຟລ໌ header ແລະຫ້ອງສະຫມຸດ). ເບິ່ງ
--sysroot ທາງ​ເລືອກ​ສໍາ​ລັບ​ຂໍ້​ມູນ​ເພີ່ມ​ເຕີມ​.

-Imultilib dir
ການນໍາໃຊ້ dir ເປັນໄດເລກະທໍລີຍ່ອຍຂອງໄດເລກະທໍລີທີ່ມີສ່ວນຫົວ C++ ສະເພາະເປົ້າໝາຍ.

- ລະບົບ dir
ຄົ້ນຫາ dir ສໍາລັບໄຟລ໌ header, ຫຼັງຈາກໄດເລກະທໍລີທັງຫມົດທີ່ລະບຸໂດຍ -I ແຕ່ກ່ອນ
ໄດເລກະທໍລີລະບົບມາດຕະຖານ. ໝາຍມັນເປັນລະບົບລະບົບ, ເພື່ອໃຫ້ມັນຄືກັນ
ການປິ່ນປົວພິເສດທີ່ຖືກນໍາໃຊ້ກັບລະບົບມາດຕະຖານ. ຖ້າ dir ເລີ່ມຕົ້ນ
ດ້ວຍ "=", ຫຼັງຈາກນັ້ນ "=" ຈະຖືກແທນທີ່ດ້ວຍຄໍານໍາຫນ້າ sysroot; ເບິ່ງ --sysroot ແລະ
-isysroot.

-iquote dir
ຄົ້ນຫາ dir ສະເພາະໄຟລ໌ສ່ວນຫົວທີ່ຮ້ອງຂໍດ້ວຍ "#include"ໄຟລ໌""; ພວກ​ເຂົ້າ​ບໍ່​ແມ່ນ
ຄົ້ນຫາສໍາລັບ "#includeໄຟລ໌>", ກ່ອນທີ່ຈະໄດເລກະທໍລີທັງຫມົດທີ່ກໍານົດໂດຍ -I ແລະກ່ອນ
ໄດເລກະທໍລີລະບົບມາດຕະຖານ. ຖ້າ dir ເລີ່ມຕົ້ນດ້ວຍ "=", ຈາກນັ້ນ "=" ຈະຖືກແທນທີ່ດ້ວຍ
sysroot ຄໍານໍາຫນ້າ; ເບິ່ງ --sysroot ແລະ -isysroot.

-fdirectives ເທົ່ານັ້ນ
ເມື່ອປະມວນຜົນກ່ອນ, ຈັດການຄຳສັ່ງ, ແຕ່ຢ່າຂະຫຍາຍມະຫາພາກ.

ພຶດຕິກໍາຂອງທາງເລືອກແມ່ນຂຶ້ນກັບ -E ແລະ -fpreprocessed ຕົວເລືອກ

ກັບ -E, preprocessing ແມ່ນຈໍາກັດພຽງແຕ່ການຈັດການຄໍາສັ່ງເຊັ່ນ "#define",
"#ifdef", ແລະ "#error". ການດໍາເນີນງານ preprocessor ອື່ນໆ, ເຊັ່ນ: ການຂະຫຍາຍມະຫາພາກແລະ
ການແປງ trigraph ບໍ່ໄດ້ປະຕິບັດ. ນອກຈາກນັ້ນ, ໄດ້ -dD ທາງເລືອກແມ່ນ implicitly
enabled

ກັບ -fpreprocessed, ຄໍານິຍາມຂອງເສັ້ນຄໍາສັ່ງແລະ macro builtin ຫຼາຍທີ່ສຸດແມ່ນ
ຄົນພິການ. Macros ເຊັ່ນ "__LINE__", ເຊິ່ງຂຶ້ນກັບບໍລິບົດ, ຖືກຈັດການ
ປົກກະຕິ. ນີ້ເຮັດໃຫ້ການລວບລວມໄຟລ໌ທີ່ປຸງແຕ່ງກ່ອນຫນ້າດ້ວຍ "-E
-fdirectives ເທົ່ານັ້ນ".

ກັບທັງສອງ -E ແລະ -fpreprocessed, ກົດລະບຽບສໍາລັບ -fpreprocessed ເອົາຄວາມສຳຄັນ. ນີ້
ເຮັດ​ໃຫ້​ການ​ປຸງ​ແຕ່ງ​ເຕັມ​ທີ່​ຂອງ​ໄຟລ​໌​ທີ່​ຜ່ານ​ມາ preprocessed ກັບ "-E
-fdirectives ເທົ່ານັ້ນ".

-fdollars-in-identifiers
ຍອມຮັບ $ ໃນຕົວລະບຸ.

-fextended-identifiers
ຍອມຮັບຊື່ຕົວອັກສອນທົ່ວໄປໃນຕົວລະບຸ. ທາງເລືອກນີ້ແມ່ນທົດລອງ; ຢູ່​ໃນ
GCC ຮຸ່ນໃນອະນາຄົດ, ມັນຈະຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນສໍາລັບ C99 ແລະ C++.

-fpreprocessed
ຊີ້ບອກກັບໂປເຊດເຊີ preprocessor ວ່າໄຟລ໌ input ໄດ້ຖືກປຸງແຕ່ງແລ້ວ. ນີ້
ສະກັດກັ້ນສິ່ງຕ່າງໆເຊັ່ນ: ການຂະຫຍາຍມະຫາພາກ, ການແປງ trigraph, ຫຼຸດພົ້ນຈາກການເຊື່ອມແຖວໃໝ່,
ແລະການປຸງແຕ່ງຄໍາສັ່ງສ່ວນໃຫຍ່. preprocessor ຍັງຮັບຮູ້ແລະເອົາອອກ
ຄໍາເຫັນ, ດັ່ງນັ້ນທ່ານສາມາດຜ່ານໄຟລ໌ preprocessed ກັບ -C ກັບ compiler ໂດຍບໍ່ມີການ
ບັນຫາ. ໃນຮູບແບບນີ້, preprocessor ປະສົມປະສານແມ່ນຫຼາຍກ່ວາ tokenizer ເລັກນ້ອຍ
ສໍາລັບດ້ານຫນ້າ.

-fpreprocessed ແມ່ນ implicit ຖ້າໄຟລ໌ input ມີຫນຶ່ງຂອງນາມສະກຸນ .i, .ii or .ໄມ.
ເຫຼົ່ານີ້ແມ່ນສ່ວນຂະຫຍາຍທີ່ GCC ໃຊ້ສໍາລັບໄຟລ໌ທີ່ສ້າງຂຶ້ນກ່ອນການປຸງແຕ່ງ - save-temps​.

-ftabstop=width
ກໍານົດໄລຍະຫ່າງລະຫວ່າງແຖບຢຸດ. ນີ້ຊ່ວຍໃຫ້ຕົວປະມວນຜົນກ່ອນລາຍງານຖັນທີ່ຖືກຕ້ອງ
ຕົວເລກໃນຄໍາເຕືອນຫຼືຄວາມຜິດພາດ, ເຖິງແມ່ນວ່າແຖບຈະປາກົດຢູ່ໃນເສັ້ນ. ຖ້າມູນຄ່າຫນ້ອຍລົງ
ຫຼາຍກວ່າ 1 ຫຼືຫຼາຍກວ່າ 100, ທາງເລືອກແມ່ນຖືກລະເລີຍ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 8.

-fdebug-cpp
ທາງເລືອກນີ້ແມ່ນເປັນປະໂຫຍດພຽງແຕ່ສໍາລັບການ debugging GCC. ເມື່ອໃຊ້ກັບ -E, dumps debugging
ຂໍ້ມູນກ່ຽວກັບແຜນທີ່ສະຖານທີ່. ທຸກໆ token ໃນຜົນຜະລິດແມ່ນນໍາຫນ້າໂດຍການ dump ຂອງ
ແຜນ​ທີ່​ທີ່​ຕັ້ງ​ຂອງ​ຕົນ​ເປັນ​ຂອງ​. ການຖິ້ມຂີ້ເຫຍື້ອຂອງແຜນທີ່ຖືສະຖານທີ່ຂອງ token
ຈະເປັນ:

{"P":F ;"F":F ;"L": ;"C": ;"S": ;"M": ;"E": "loc": }

ເມື່ອນໍາໃຊ້ໂດຍບໍ່ມີການ -E, ທາງເລືອກນີ້ບໍ່ມີຜົນກະທົບ.

-ftrack-macro-ຂະຫຍາຍ[=ລະດັບ]
ຕິດຕາມສະຖານທີ່ຂອງໂທເຄັນໃນທົ່ວການຂະຫຍາຍຕົວມະຫາພາກ. ນີ້ອະນຸຍາດໃຫ້ compiler ປ່ອຍອອກມາ
ການວິນິໄສກ່ຽວກັບ stack macro expansion stack ໃນປະຈຸບັນເມື່ອມີຂໍ້ຜິດພາດໃນການລວບລວມຂໍ້ມູນເກີດຂຶ້ນ
ການຂະຫຍາຍຕົວມະຫາພາກ. ການນໍາໃຊ້ທາງເລືອກນີ້ເຮັດໃຫ້ preprocessor ແລະ compiler ບໍລິໂພກ
ຄວາມຊົງຈໍາຫຼາຍ. ໄດ້ ລະດັບ ພາລາມິເຕີສາມາດນໍາໃຊ້ເພື່ອເລືອກລະດັບຄວາມແມ່ນຍໍາຂອງ token
ການຕິດຕາມສະຖານທີ່ດັ່ງນັ້ນຈຶ່ງຫຼຸດລົງການບໍລິໂພກຫນ່ວຍຄວາມຈໍາຖ້າຈໍາເປັນ. ມູນຄ່າ 0 of
ລະດັບ de-activates ທາງເລືອກນີ້ຄືກັບວ່າບໍ່ມີ -ftrack-macro-ຂະຫຍາຍ ມີຢູ່
ເສັ້ນຄໍາສັ່ງ. ມູນຄ່າ 1 ຕິດ​ຕາມ​ສະ​ຖານ​ທີ່ tokens ໃນ​ຮູບ​ແບບ​ຊຸດ​ໂຊມ​ສໍາ​ລັບ​ຄວາມ​ສາ​ມາດ​ຂອງ​
ຫນ່ວຍຄວາມຈໍາຫນ້ອຍທີ່ສຸດ overhead. ໃນ​ຮູບ​ແບບ​ນີ້ tokens ທັງ​ຫມົດ​ທີ່​ເປັນ​ຜົນ​ມາ​ຈາກ​ການ​ຂະ​ຫຍາຍ​ຕົວ​ຂອງ​
argument ຂອງ macro ຄ້າຍຄືຟັງຊັນມີສະຖານທີ່ດຽວກັນ. ມູນຄ່າ 2 ຕິດ​ຕາມ tokens
ສະຖານທີ່ຢ່າງສົມບູນ. ຄ່ານີ້ແມ່ນຄວາມຊົງຈໍາທີ່ຫິວທີ່ສຸດ. ເມື່ອທາງເລືອກນີ້ຖືກມອບໃຫ້
ບໍ່ມີການໂຕ້ຖຽງ, ຄ່າພາລາມິເຕີເລີ່ມຕົ້ນແມ່ນ 2.

-fexec-charset=ສາຍໄຟ
ກໍານົດຊຸດຕົວອັກສອນການປະຕິບັດ, ໃຊ້ສໍາລັບຄວາມຄົງທີ່ຂອງສະຕຣິງແລະຕົວອັກສອນ. ຄ່າເລີ່ມຕົ້ນ
ແມ່ນ UTF-8. ສາຍໄຟ ສາມາດເປັນການເຂົ້າລະຫັດໃດໆທີ່ສະຫນັບສະຫນູນໂດຍຫ້ອງສະຫມຸດ "iconv" ຂອງລະບົບ
ປົກກະຕິ.

-fwide-exec-charset=ສາຍໄຟ
ກໍານົດຊຸດຕົວອັກສອນການປະຕິບັດກວ້າງ, ໃຊ້ສໍາລັບສະຕຣິງກວ້າງແລະຄ່າຄົງທີ່ຂອງຕົວອັກສອນ.
ຄ່າເລີ່ມຕົ້ນແມ່ນ UTF-32 ຫຼື UTF-16, ອັນໃດກໍ່ຕາມທີ່ກົງກັບຄວາມກວ້າງຂອງ "wchar_t". ເປັນ
ກັບ -fexec-charset, ສາຍໄຟ ສາມາດເປັນການເຂົ້າລະຫັດໃດໆທີ່ສະຫນັບສະຫນູນໂດຍ "iconv" ຂອງລະບົບ.
ຫໍສະໝຸດ; ແນວໃດກໍ່ຕາມ, ທ່ານຈະມີບັນຫາກັບການເຂົ້າລະຫັດທີ່ບໍ່ເຫມາະ
ແທ້ໃນ "wchar_t".

-finput-charset=ສາຍໄຟ
ຕັ້ງຄ່າຊຸດຕົວອັກສອນທີ່ປ້ອນເຂົ້າ, ໃຊ້ສຳລັບການແປຈາກຊຸດຕົວອັກສອນຂອງຕົວປ້ອນຂໍ້ມູນ
ໄຟລ໌ໄປຫາຕົວອັກສອນຕົ້ນສະບັບທີ່ກໍານົດໄວ້ໂດຍ GCC. ຖ້າທ້ອງຖິ່ນບໍ່ໄດ້ລະບຸ, ຫຼື GCC
ບໍ່ສາມາດໄດ້ຮັບຂໍ້ມູນນີ້ຈາກທ້ອງຖິ່ນ, ຄ່າເລີ່ມຕົ້ນແມ່ນ UTF-8. ນີ້ສາມາດເປັນ
overridden ໂດຍທັງ locale ຫຼືຕົວເລືອກເສັ້ນຄໍາສັ່ງນີ້. ໃນປັດຈຸບັນຄໍາສັ່ງ
ຕົວເລືອກແຖວຈະມີຄວາມສຳຄັນກວ່າຖ້າມີຂໍ້ຂັດແຍ່ງ. ສາຍໄຟ ສາມາດເຂົ້າລະຫັດໃດໆ
ສະຫນັບສະຫນູນໂດຍປົກກະຕິຫ້ອງສະຫມຸດ "iconv" ຂອງລະບົບ.

-fworking-directory
ເປີດໃຊ້ການສ້າງຕົວໝາຍແຖວໃນຜົນອອກຂອງໂປເຊດເຊີ preprocessor ທີ່ຈະປ່ອຍໃຫ້ compiler ໄດ້
ຮູ້ຈັກໄດເລກະທໍລີທີ່ເຮັດວຽກໃນປະຈຸບັນໃນເວລາຂອງການປຸງແຕ່ງກ່ອນ. ໃນເວລາທີ່ທາງເລືອກນີ້ແມ່ນ
ເປີດໃຊ້ງານແລ້ວ, ຕົວປະມວນຜົນກ່ອນຈະປ່ອຍອອກມາ, ຫຼັງຈາກເຄື່ອງໝາຍແຖວເບື້ອງຕົ້ນ, ເປັນເຄື່ອງໝາຍແຖວທີສອງ
ກັບໄດເລກະທໍລີທີ່ເຮັດວຽກໃນປະຈຸບັນຕິດຕາມດ້ວຍສອງເຄື່ອງຊ້ອນ. GCC ຈະໃຊ້ອັນນີ້
ໄດເລກະທໍລີ, ເມື່ອມັນມີຢູ່ໃນວັດສະດຸປ້ອນທີ່ປຸງແຕ່ງກ່ອນ, ເປັນໄດເລກະທໍລີທີ່ປ່ອຍອອກມາ
ໄດເລກະທໍລີທີ່ເຮັດວຽກໃນປະຈຸບັນຢູ່ໃນບາງຮູບແບບຂໍ້ມູນການດີບັກ. ທາງເລືອກນີ້ແມ່ນ
ເປີດໃຊ້ implicitly ຖ້າຂໍ້ມູນ debugging ຖືກເປີດໃຊ້, ແຕ່ນີ້ສາມາດຖືກຍັບຍັ້ງໄດ້
ແບບຟອມທີ່ຖືກປະຕິເສດ -fno-working-directoryທີ່ຢູ່ ຖ້າຫາກວ່າ -P ທຸງມີຢູ່ໃນຄໍາສັ່ງ
ເສັ້ນ, ທາງເລືອກນີ້ບໍ່ມີຜົນ, ເພາະວ່າບໍ່ມີຄໍາສັ່ງ "#line" ຖືກປ່ອຍອອກມາຢ່າງໃດກໍ່ຕາມ.

-fno-show-column
ຢ່າພິມຕົວເລກຖັນໃນການວິນິດໄສ. ນີ້ອາດຈະເປັນສິ່ງຈໍາເປັນຖ້າການວິນິດໄສ
ຖືກສະແກນໂດຍໂຄງການທີ່ບໍ່ເຂົ້າໃຈຕົວເລກຖັນ, ເຊັ່ນ:
dejagnu.

-A ຄາດຄະເນ=ຄໍາຕອບ
ເຮັດການຢືນຢັນກັບ predicate ໄດ້ ຄາດຄະເນ ແລະຕອບ ຄໍາຕອບ. ແບບຟອມນີ້ແມ່ນ
ຕ້ອງການຮູບແບບເກົ່າ -A ຄາດຄະເນ(ຄໍາຕອບ), ທີ່ຍັງສະຫນັບສະຫນູນ, ເນື່ອງຈາກວ່າມັນ
ບໍ່ໄດ້ໃຊ້ຕົວອັກສອນພິເສດຂອງແກະ.

-A -ຄາດຄະເນ=ຄໍາຕອບ
ຍົກເລີກການຢືນຢັນກັບ predicate ຄາດຄະເນ ແລະຕອບ ຄໍາຕອບ.

-dCHARS
CHARS ແມ່ນລຳດັບໜຶ່ງ ຫຼືຫຼາຍກວ່າໜຶ່ງຕົວໜັງສືຕໍ່ໄປນີ້, ແລະຕ້ອງບໍ່ແມ່ນ
ນຳໜ້າດ້ວຍຊ່ອງ. ຕົວອັກສອນອື່ນໆຖືກຕີຄວາມໂດຍ compiler ທີ່ເຫມາະສົມ, ຫຼື
ສະຫງວນໄວ້ສໍາລັບ GCC ຮຸ່ນໃນອະນາຄົດ, ແລະດັ່ງນັ້ນຈິ່ງຖືກລະເລີຍຢ່າງງຽບໆ. ຖ້າທ່ານລະບຸ
ຕົວ​ອັກ​ສອນ​ທີ່​ມີ​ພຶດ​ຕິ​ກໍາ​ຂັດ​ແຍ່ງ​ກັນ​, ຜົນ​ໄດ້​ຮັບ​ແມ່ນ​ບໍ່​ໄດ້​ກໍາ​ນົດ​.

M ແທນທີ່ຈະເປັນຜົນຜະລິດປົກກະຕິ, ສ້າງບັນຊີລາຍຊື່ຂອງ #ກໍານົດ ຄໍາແນະນໍາສໍາລັບທຸກຄົນ
macros ກໍານົດໃນລະຫວ່າງການດໍາເນີນການຂອງ preprocessor, ລວມທັງ predefined
ມະຫາພາກ. ນີ້ເຮັດໃຫ້ທ່ານມີວິທີການຊອກຫາສິ່ງທີ່ຖືກກໍານົດໄວ້ລ່ວງຫນ້າໃນສະບັບຂອງທ່ານ
ໂປເຊດເຊີກ່ອນ. ສົມມຸດວ່າທ່ານບໍ່ມີໄຟລ໌ foo.h, ຄໍາສັ່ງ

ແຕະ foo.h ; cpp -dM foo.h

ຈະສະແດງ macro ທີ່ກໍານົດໄວ້ກ່ອນທັງຫມົດ.

ຖ້າຫາກວ່າທ່ານນໍາໃຊ້ -dM ໂດຍບໍ່ມີການ -E ທາງເລືອກ, -dM ຖືກຕີຄວາມຫມາຍເປັນຄໍາສັບຄ້າຍຄື
-fdump-rtl-mach.

D ຄື M ຍົກເວັ້ນໃນສອງດ້ານ: ມັນເຮັດ ບໍ່ ປະກອບມີ macro ທີ່ກໍານົດໄວ້ກ່ອນ, ແລະມັນ
ຜົນໄດ້ຮັບ ທັງສອງ ໄດ້ #ກໍານົດ ຄໍາແນະນໍາແລະຜົນຂອງການປຸງແຕ່ງກ່ອນ. ທັງສອງປະເພດ
ຂອງຜົນຜະລິດໄປຫາໄຟລ໌ຜົນຜະລິດມາດຕະຖານ.

N ຄື D, ແຕ່ປ່ອຍພຽງແຕ່ຊື່ມະຫາພາກ, ບໍ່ແມ່ນການຂະຫຍາຍຂອງມັນ.

I ຜົນຜະລິດ #include ຄໍາແນະນໍານອກເຫນືອໄປຈາກຜົນຂອງການປຸງແຕ່ງກ່ອນ.

U ຄື D ຍົກ​ເວັ້ນ​ພຽງ​ແຕ່​ມະ​ໂຄ​ທີ່​ໄດ້​ຮັບ​ການ​ຂະ​ຫຍາຍ​, ຫຼື​ການ​ກໍາ​ນົດ​ຂອງ​ການ​ທົດ​ສອບ​
ໃນຄໍາສັ່ງ preprocessor, ແມ່ນຜົນຜະລິດ; ຜົນຜະລິດແມ່ນຊັກຊ້າຈົນກ່ວາການນໍາໃຊ້ຫຼື
ການທົດສອບມະຫາພາກ; ແລະ #ສຸດຍອດ ທິດທາງແມ່ນຜົນຜະລິດສໍາລັບ macros ທົດສອບແຕ່
ບໍ່ໄດ້ກໍານົດໃນເວລານັ້ນ.

-P ຍັບຍັ້ງການສ້າງຕົວໝາຍແຖວໃນຜົນຜະລິດຈາກໂປຣເຊສເຊີກ່ອນ. ນີ້ອາດຈະເປັນ
ເປັນປະໂຫຍດໃນເວລາທີ່ແລ່ນ preprocessor ກ່ຽວກັບບາງສິ່ງບາງຢ່າງທີ່ບໍ່ແມ່ນລະຫັດ C, ແລະຈະຖືກສົ່ງໄປ
ກັບໂຄງການທີ່ອາດຈະສັບສົນໂດຍ linemarkers.

-C ຢ່າປະຖິ້ມຄໍາເຫັນ. ຄໍາເຫັນທັງຫມົດຖືກສົ່ງຜ່ານໄປຫາໄຟລ໌ຜົນຜະລິດ, ຍົກເວັ້ນ
ສໍາ​ລັບ​ຄໍາ​ຄິດ​ເຫັນ​ໃນ​ຄໍາ​ແນະ​ນໍາ​ການ​ປຸງ​ແຕ່ງ​, ທີ່​ຖືກ​ລົບ​ພ້ອມ​ກັບ​ຄໍາ​ແນະ​ນໍາ​.

ທ່ານຄວນກຽມພ້ອມສໍາລັບຜົນຂ້າງຄຽງໃນເວລາທີ່ໃຊ້ -C; ມັນເຮັດໃຫ້ preprocessor ໄດ້
ປະຕິບັດຄໍາຄິດເຫັນເປັນ token ໃນສິດທິຂອງຕົນເອງ. ຕົວຢ່າງ, ຄໍາເຫັນທີ່ປາກົດຢູ່
ການເລີ່ມຕົ້ນຂອງສິ່ງທີ່ຈະເປັນເສັ້ນຄໍາສັ່ງມີຜົນກະທົບຂອງການປ່ຽນເສັ້ນນັ້ນເປັນ
ເສັ້ນແຫຼ່ງທໍາມະດາ, ນັບຕັ້ງແຕ່ token ທໍາອິດໃນເສັ້ນບໍ່ແມ່ນ #.

-CC ຢ່າປະຖິ້ມຄໍາເຫັນ, ລວມທັງໃນລະຫວ່າງການຂະຫຍາຍມະຫາພາກ. ນີ້ແມ່ນຄ້າຍຄື -C, ຍົກເວັ້ນ
ຄໍາຄິດຄໍາເຫັນທີ່ມີຢູ່ໃນ macro ຍັງຖືກສົ່ງຜ່ານໄປຫາໄຟລ໌ຜົນຜະລິດທີ່
ມະຫາພາກໄດ້ຖືກຂະຫຍາຍ.

ນອກ​ເຫນືອ​ໄປ​ຈາກ​ຜົນ​ກະ​ທົບ​ຂ້າງ​ຄຽງ​ຂອງ​ -C ທາງເລືອກ, ໄດ້ -CC ທາງເລືອກເຮັດໃຫ້ C++-style ທັງໝົດ
ຄຳເຫັນພາຍໃນມະຫາພາກທີ່ຈະປ່ຽນເປັນຄຳເຫັນແບບ C. ນີ້ແມ່ນເພື່ອປ້ອງກັນບໍ່ໃຫ້ຕໍ່ມາ
ການນໍາໃຊ້ມະຫາພາກຈາກການສະແດງຄວາມຄິດເຫັນທີ່ບໍ່ໄດ້ຕັ້ງໃຈອອກສ່ວນທີ່ເຫຼືອຂອງສາຍແຫຼ່ງ.

ໄດ້ -CC ທາງເລືອກແມ່ນຖືກນໍາໃຊ້ໂດຍທົ່ວໄປເພື່ອສະຫນັບສະຫນູນຄໍາເຫັນ lint.

-cpp
ພະຍາຍາມຮຽນແບບພຶດຕິກໍາຂອງໂປເຊດເຊີ C preprocessors ແບບເກົ່າ, ກົງກັນຂ້າມກັບ ISO C
ໂປເຊດເຊີກ່ອນ.

-trigraphs
ຂະບວນການລໍາດັບ trigraph. ເຫຼົ່ານີ້ແມ່ນລໍາດັບສາມລັກສະນະ, ທັງຫມົດເລີ່ມຕົ້ນດ້ວຍ
??, ທີ່ຖືກກໍານົດໂດຍ ISO C ເພື່ອຢືນສໍາລັບຕົວອັກສອນດຽວ. ຍົກ​ຕົວ​ຢ່າງ, ??/ ຢືນຢູ່
ສໍາລັບການ , ດັ່ງນັ້ນ '??/n' ແມ່ນຕົວລະຄອນຄົງທີ່ສຳລັບແຖວໃໝ່. ໂດຍຄ່າເລີ່ມຕົ້ນ, GCC ຈະບໍ່ສົນໃຈ
trigraphs, ແຕ່ໃນໂຫມດທີ່ສອດຄ່ອງກັບມາດຕະຖານມັນປ່ຽນພວກມັນ. ເບິ່ງ -std ແລະ -ansi
ຕົວເລືອກ

ເກົ້າ trigraphs ແລະການທົດແທນຂອງເຂົາເຈົ້າແມ່ນ

ໄຕຣກ: ??(??)??<??>??=??/??' ??! ??-
ການທົດແທນ: [ ] { } # \ ^ | ~

-remap
ເປີດ​ໃຊ້​ງານ​ລະ​ຫັດ​ພິ​ເສດ​ເພື່ອ​ເຮັດ​ວຽກ​ກ່ຽວ​ກັບ​ລະ​ບົບ​ໄຟລ​໌​ທີ່​ອະ​ນຸ​ຍາດ​ໃຫ້​ພຽງ​ແຕ່​ໄຟລ​໌​ສັ້ນ​ຫຼາຍ​
ຊື່, ເຊັ່ນ MS-DOS.

- ຊ່ວຍ
--ເປົ້າ​ຫມາຍ​ການ​ຊ່ວຍ​ເຫຼືອ​
ພິມຂໍ້ຄວາມທີ່ອະທິບາຍຕົວເລືອກແຖວຄໍາສັ່ງທັງໝົດ ແທນການປຸງແຕ່ງອັນໃດອັນໜຶ່ງກ່ອນ.

-v ໂຫມດ verbose. ພິມເລກສະບັບຂອງ GNU CPP ໃນຕອນເລີ່ມຕົ້ນຂອງການປະຕິບັດ, ແລະ
ລາຍງານຮູບແບບສຸດທ້າຍຂອງເສັ້ນທາງລວມ.

-H ພິມຊື່ຂອງແຕ່ລະ header file ທີ່ໃຊ້, ນອກຈາກກິດຈະກໍາປົກກະຕິອື່ນໆ. ແຕ່ລະ
ຊື່ແມ່ນ indented ເພື່ອສະແດງໃຫ້ເຫັນວ່າເລິກຢູ່ໃນ #include stack ມັນແມ່ນ. ສ່ວນຫົວທີ່ກຽມໄວ້ແລ້ວ
ໄຟລ໌ຍັງຖືກພິມອອກ, ເຖິງແມ່ນວ່າພວກເຂົາຖືກພົບເຫັນວ່າບໍ່ຖືກຕ້ອງ; precompiled ບໍ່ຖືກຕ້ອງ
ໄຟລ໌ຫົວແມ່ນພິມດ້ວຍ ...x ແລະອັນທີ່ຖືກຕ້ອງກັບ ...! .

-ການປ່ຽນແປງ
- ການປ່ຽນແປງ
ພິມໝາຍເລກລຸ້ນຂອງ GNU CPP. ດ້ວຍເຄື່ອງໝາຍດຽວ, ດຳເນີນການກ່ອນການປະມວນຜົນຕາມປົກກະຕິ.
ດ້ວຍສອງຂີດ, ອອກໄປທັນທີ.

Passing ທາງເລືອກໃນການ to ໄດ້ ຄົນລອບສັງຫານ
ທ່ານສາມາດຜ່ານທາງເລືອກໃນການປະກອບ.

- ວ.ທາງເລືອກ
ຜ່ານ ທາງເລືອກ ເປັນທາງເລືອກໃນການປະກອບ. ຖ້າ ທາງເລືອກ ມີເຄື່ອງໝາຍຈຸດ, ມັນຖືກແບ່ງອອກ
ເປັນຫຼາຍທາງເລືອກໃນເຄື່ອງໝາຍຈຸດ.

-Xassembler ທາງເລືອກ
ຜ່ານ ທາງເລືອກ ເປັນທາງເລືອກໃນການປະກອບ. ທ່ານສາມາດນໍາໃຊ້ນີ້ເພື່ອສະຫນອງລະບົບສະເພາະ
ຕົວເລືອກຕົວປະກອບທີ່ GCC ບໍ່ຮູ້ວິທີການຮັບຮູ້.

ຖ້າທ່ານຕ້ອງການຜ່ານທາງເລືອກທີ່ໃຊ້ການໂຕ້ຖຽງ, ທ່ານຕ້ອງໃຊ້ -Xassembler ສອງຄັ້ງ,
ຫນຶ່ງຄັ້ງສໍາລັບທາງເລືອກແລະຫນຶ່ງຄັ້ງສໍາລັບການໂຕ້ຖຽງ.

ທາງເລືອກໃນການ ສໍາລັບການ ການເຊື່ອມໂຍງ
ຕົວເລືອກເຫຼົ່ານີ້ເຂົ້າມາຫຼິ້ນເມື່ອ compiler ເຊື່ອມຕໍ່ໄຟລ໌ວັດຖຸເຂົ້າໃນການປະຕິບັດ
ໄຟລ໌ຜົນຜະລິດ. ພວກມັນບໍ່ມີຄວາມຫມາຍຖ້າຜູ້ລວບລວມຂໍ້ມູນບໍ່ໄດ້ເຮັດຂັ້ນຕອນການເຊື່ອມໂຍງ.

object-file-name
ຊື່ໄຟລ໌ທີ່ບໍ່ໄດ້ລົງທ້າຍດ້ວຍຄຳຕໍ່ທ້າຍທີ່ຮັບຮູ້ພິເສດແມ່ນຖືວ່າເປັນຊື່
ໄຟລ໌ວັດຖຸ ຫຼືຫ້ອງສະໝຸດ. (ໄຟລ໌ວັດຖຸຖືກແຍກອອກຈາກຫ້ອງສະໝຸດໂດຍຕົວເຊື່ອມຕໍ່
ອີງ​ຕາມ​ເນື້ອ​ໃນ​ຂອງ​ໄຟລ​໌​.) ຖ້າ​ຫາກ​ວ່າ​ການ​ເຊື່ອມ​ຕໍ່​ແມ່ນ​ເຮັດ​ໄດ້​, ໄຟລ​໌​ວັດ​ຖຸ​ເຫຼົ່າ​ນີ້​ໄດ້​ຖືກ​ນໍາ​ໃຊ້​ເປັນ​
ການປ້ອນຂໍ້ມູນໃສ່ຕົວເຊື່ອມຕໍ່.

-c
-S
-E ຖ້າທາງເລືອກໃດໆເຫຼົ່ານີ້ຖືກນໍາໃຊ້, ຫຼັງຈາກນັ້ນຕົວເຊື່ອມຕໍ່ບໍ່ໄດ້ດໍາເນີນການ, ແລະຊື່ໄຟລ໌ວັດຖຸ
ບໍ່ຄວນໃຊ້ເປັນການໂຕ້ຖຽງ.

-lຫ້ອງສະຫມຸດ
-l ຫ້ອງສະຫມຸດ
ຄົ້ນຫາຫ້ອງສະຫມຸດທີ່ມີຊື່ ຫ້ອງສະຫມຸດ ເມື່ອເຊື່ອມຕໍ່. (ທາງເລືອກທີສອງກັບ
ຫ້ອງສະຫມຸດເປັນການໂຕ້ຖຽງແຍກຕ່າງຫາກແມ່ນພຽງແຕ່ສໍາລັບການປະຕິບັດຕາມ POSIX ແລະບໍ່ແນະນໍາ.)

ມັນເຮັດໃຫ້ຄວາມແຕກຕ່າງທີ່ໃນຄໍາສັ່ງທີ່ທ່ານຂຽນທາງເລືອກນີ້; ຕົວເຊື່ອມຕໍ່ຊອກຫາ
ແລະປະມວນຜົນຫ້ອງສະຫມຸດແລະໄຟລ໌ວັດຖຸໃນຄໍາສັ່ງທີ່ເຂົາເຈົ້າໄດ້ຖືກລະບຸໄວ້. ດັ່ງນັ້ນ, foo.o
-lz bar.o ຊອກ​ຫາ​ຫ້ອງ​ສະ​ຫມຸດ​ z ຫຼັງ​ຈາກ​ໄຟລ​໌​ foo.o ແຕ່ກ່ອນ bar.oທີ່ຢູ່ ຖ້າຫາກວ່າ bar.o ຫມາຍເຖິງ
ຫນ້າທີ່ໃນ z, ຟັງຊັນເຫຼົ່ານັ້ນອາດຈະບໍ່ໄດ້ຮັບການໂຫຼດ.

ຕົວເຊື່ອມຕໍ່ຄົ້ນຫາບັນຊີລາຍຊື່ມາດຕະຖານຂອງໄດເລກະທໍລີສໍາລັບຫ້ອງສະຫມຸດ, ເຊິ່ງແມ່ນຕົວຈິງແລ້ວ
ໄຟລ໌ທີ່ມີຊື່ ຫ້ອງສະໝຸດ.a. ຕົວເຊື່ອມຕໍ່ຫຼັງຈາກນັ້ນໃຊ້ໄຟລ໌ນີ້ຄືກັບວ່າມັນຖືກລະບຸໄວ້
ຢ່າງ​ຊັດ​ເຈນ​ໂດຍ​ຊື່​.

ໄດເລກະທໍລີທີ່ຄົ້ນຫາລວມມີລະບົບມາດຕະຖານຫຼາຍລາຍການບວກກັບອັນທີ່ທ່ານ
ລະບຸດ້ວຍ -L.

ປົກກະຕິແລ້ວໄຟລ໌ທີ່ພົບເຫັນດ້ວຍວິທີນີ້ແມ່ນໄຟລ໌ຫ້ອງສະຫມຸດ --- ແຟ້ມຈັດເກັບທີ່ສະມາຊິກແມ່ນ
ໄຟລ໌ວັດຖຸ. ຕົວເຊື່ອມຕໍ່ຈັດການໄຟລ໌ທີ່ເກັບໄວ້ໂດຍການສະແກນຜ່ານມັນສໍາລັບສະມາຊິກ
ເຊິ່ງກໍານົດສັນຍາລັກທີ່ໄດ້ອ້າງເຖິງມາເຖິງຕອນນັ້ນແຕ່ບໍ່ໄດ້ກໍານົດ. ແຕ່ຖ້າຫາກວ່າ
ໄຟລ໌ທີ່ພົບເຫັນແມ່ນໄຟລ໌ວັດຖຸທໍາມະດາ, ມັນຖືກເຊື່ອມຕໍ່ໃນແບບປົກກະຕິ. ໄດ້
ຄວາມແຕກຕ່າງພຽງແຕ່ລະຫວ່າງການໃຊ້ a -l ທາງ​ເລືອກ​ແລະ​ການ​ລະ​ບຸ​ຊື່​ໄຟລ​໌​ແມ່ນ​ວ່າ​ -l
ອ້ອມຮອບ ຫ້ອງສະຫມຸດ ກັບ lib ແລະ .a ແລະຊອກຫາຫຼາຍໄດເລກະທໍລີ.

-lobjc
ທ່ານຕ້ອງການກໍລະນີພິເສດນີ້ -l ທາງເລືອກເພື່ອເຊື່ອມຕໍ່ Objective-C ຫຼື
ໂປຣແກມ Objective-C++.

-nostartfiles
ຢ່າໃຊ້ໄຟລ໌ເລີ່ມຕົ້ນລະບົບມາດຕະຖານເມື່ອເຊື່ອມຕໍ່. ລະບົບມາດຕະຖານ
ຫ້ອງສະຫມຸດຖືກນໍາໃຊ້ເປັນປົກກະຕິ, ເວັ້ນເສຍແຕ່ -nostdlib or -nodefaultlibs ຖືກນໍາໃຊ້.

-nodefaultlibs
ຢ່າໃຊ້ຫ້ອງສະຫມຸດລະບົບມາດຕະຖານເມື່ອເຊື່ອມຕໍ່. ພຽງແຕ່ຫ້ອງສະຫມຸດທີ່ທ່ານລະບຸ
ຈະຖືກສົ່ງກັບຕົວເຊື່ອມຕໍ່, ທາງເລືອກທີ່ລະບຸການເຊື່ອມໂຍງຂອງຫ້ອງສະຫມຸດລະບົບ, ເຊັ່ນ
ເປັນ "-static-libgcc" ຫຼື "-shared-libgcc", ຈະຖືກລະເລີຍ. ໄຟລ໌ເລີ່ມຕົ້ນມາດຕະຖານ
ຖືກນໍາໃຊ້ເປັນປົກກະຕິ, ເວັ້ນເສຍແຕ່ -nostartfiles ຖືກນໍາໃຊ້. compiler ອາດຈະສ້າງການໂທໄປຫາ
"memcmp", "memset", "memcpy" ແລະ "memmove". ລາຍການເຫຼົ່ານີ້ມັກຈະຖືກແກ້ໄຂໂດຍ
ລາຍການໃນ libc. ຈຸດເຂົ້າເຫຼົ່ານີ້ຄວນຈະໄດ້ຮັບການສະຫນອງໂດຍຜ່ານກົນໄກອື່ນໆຈໍານວນຫນຶ່ງ
ເມື່ອຕົວເລືອກນີ້ຖືກລະບຸ.

-nostdlib
ຢ່າໃຊ້ໄຟລ໌ເລີ່ມຕົ້ນລະບົບມາດຕະຖານຫຼືຫ້ອງສະຫມຸດໃນເວລາທີ່ເຊື່ອມຕໍ່. ບໍ່ມີການເລີ່ມຕົ້ນ
ໄຟລ໌ແລະພຽງແຕ່ຫ້ອງສະຫມຸດທີ່ທ່ານລະບຸຈະຖືກສົ່ງໄປຫາຕົວເຊື່ອມຕໍ່, ທາງເລືອກ
ການລະບຸການເຊື່ອມໂຍງຂອງຫ້ອງສະຫມຸດລະບົບເຊັ່ນ "-static-libgcc" ຫຼື
"-shared-libgcc", ຈະຖືກລະເລີຍ. compiler ອາດຈະສ້າງການໂທຫາ "memcmp",
"memset", "memcpy" ແລະ "memmove". ລາຍການເຫຼົ່ານີ້ມັກຈະຖືກແກ້ໄຂໂດຍການປ້ອນເຂົ້າ
libc. ຈຸດເຂົ້າເຫຼົ່ານີ້ຄວນໄດ້ຮັບການສະຫນອງໂດຍຜ່ານກົນໄກອື່ນໆຈໍານວນຫນຶ່ງໃນເວລາທີ່ນີ້
ທາງ​ເລືອກ​ແມ່ນ​ລະ​ບຸ​ໄວ້​.

ຫນຶ່ງໃນຫ້ອງສະຫມຸດມາດຕະຖານ bypassed ໂດຍ -nostdlib ແລະ -nodefaultlibs is libgcc.a, ເປັນ
ຫ້ອງສະໝຸດຂອງສິ່ງທີ່ເຮັດປະຈຳພາຍໃນຍ່ອຍທີ່ GCC ໃຊ້ເພື່ອເອົາຊະນະຂໍ້ບົກຜ່ອງໂດຍສະເພາະ
ເຄື່ອງຈັກ, ຫຼືຄວາມຕ້ອງການພິເສດສໍາລັບບາງພາສາ.

ໃນກໍລະນີຫຼາຍທີ່ສຸດ, ທ່ານຕ້ອງການ libgcc.a ເຖິງແມ່ນວ່າທ່ານຕ້ອງການຫຼີກເວັ້ນຫ້ອງສະຫມຸດມາດຕະຖານອື່ນໆ.
ໃນຄໍາສັບຕ່າງໆອື່ນໆ, ໃນເວລາທີ່ທ່ານກໍານົດ -nostdlib or -nodefaultlibs ປົກກະຕິແລ້ວທ່ານຄວນ
ລະບຸ -lgcc ຄື​ກັນ. ນີ້ຮັບປະກັນວ່າທ່ານບໍ່ມີການອ້າງອີງທີ່ບໍ່ໄດ້ຮັບການແກ້ໄຂ
ບັນຊີຍ່ອຍຂອງຫ້ອງສະໝຸດ GCC ພາຍໃນ. (ຍົກ​ຕົວ​ຢ່າງ, __ຫຼັກ, ໃຊ້ເພື່ອຮັບປະກັນ C ++
ຜູ້ກໍ່ສ້າງຈະຖືກເອີ້ນ.)

-pie
ຜະລິດຕໍາແຫນ່ງທີ່ເປັນເອກະລາດປະຕິບັດໄດ້ກ່ຽວກັບເປົ້າຫມາຍທີ່ສະຫນັບສະຫນູນມັນ. ສໍາລັບການຄາດເດົາ
ຜົນໄດ້ຮັບ, ທ່ານຍັງຕ້ອງລະບຸຊຸດທາງເລືອກດຽວກັນທີ່ຖືກນໍາໃຊ້ເພື່ອສ້າງລະຫັດ
(-fpie, -fPIE, ຫຼືຕົວເລືອກແບບຈໍາລອງ) ເມື່ອທ່ານລະບຸທາງເລືອກນີ້.

-rdynamic
ຜ່ານທຸງ - ສົ່ງ​ອອກ​ແບບ​ເຄື່ອນ​ໄຫວ​ ກັບຕົວເຊື່ອມຕໍ່ ELF, ກ່ຽວກັບເປົ້າຫມາຍທີ່ສະຫນັບສະຫນູນມັນ. ນີ້
ແນະນໍາຕົວເຊື່ອມຕໍ່ເພື່ອເພີ່ມສັນຍາລັກທັງຫມົດ, ບໍ່ພຽງແຕ່ໃຊ້, ໃຫ້ກັບສັນຍາລັກແບບເຄື່ອນໄຫວ
ໂຕະ. ທາງເລືອກນີ້ແມ່ນຈໍາເປັນສໍາລັບບາງການນໍາໃຊ້ "dlopen" ຫຼືເພື່ອອະນຸຍາດໃຫ້ໄດ້ຮັບ
backtraces ຈາກພາຍໃນໂຄງການ.

-s ເອົາຕາຕະລາງສັນຍາລັກທັງຫມົດແລະຂໍ້ມູນການຍົກຍ້າຍອອກຈາກການປະຕິບັດ.

-static
ໃນລະບົບທີ່ສະຫນັບສະຫນູນການເຊື່ອມໂຍງແບບເຄື່ອນໄຫວ, ນີ້ປ້ອງກັນບໍ່ໃຫ້ການເຊື່ອມຕໍ່ກັບການແບ່ງປັນ
ຫ້ອງສະໝຸດ. ໃນລະບົບອື່ນໆ, ທາງເລືອກນີ້ບໍ່ມີຜົນ.

- ແບ່ງ​ປັນ​
ຜະລິດວັດຖຸທີ່ໃຊ້ຮ່ວມກັນເຊິ່ງຫຼັງຈາກນັ້ນສາມາດເຊື່ອມຕໍ່ກັບວັດຖຸອື່ນໆເພື່ອສ້າງເປັນ
ປະຕິບັດໄດ້. ບໍ່ແມ່ນທຸກລະບົບທີ່ຮອງຮັບຕົວເລືອກນີ້. ສໍາລັບຜົນໄດ້ຮັບທີ່ຄາດເດົາໄດ້, ທ່ານຕ້ອງ
ຍັງລະບຸຊຸດຕົວເລືອກດຽວກັນທີ່ຖືກນໍາໃຊ້ເພື່ອສ້າງລະຫັດ (-fpic, -fPIC, ຫຼື
ຕົວເລືອກຍ່ອຍແບບຈໍາລອງ) ເມື່ອທ່ານລະບຸຕົວເລືອກນີ້.[1]

-shared-libgcc
-static-libgcc
ກ່ຽວກັບລະບົບທີ່ສະຫນອງ libgcc ເປັນຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນ, ທາງເລືອກເຫຼົ່ານີ້ບັງຄັບໃຫ້ໃຊ້
ບໍ່ວ່າຈະເປັນສະບັບແບ່ງປັນຫຼື static ຕາມລໍາດັບ. ຖ້າບໍ່ມີສະບັບພາສາທີ່ແບ່ງປັນ libgcc ແມ່ນ
ສ້າງຂຶ້ນເມື່ອ compiler ຖືກຕັ້ງຄ່າ, ທາງເລືອກເຫຼົ່ານີ້ບໍ່ມີຜົນຫຍັງເລີຍ.

ມີຫຼາຍສະຖານະການທີ່ແອັບພລິເຄຊັນຄວນໃຊ້ການແບ່ງປັນ libgcc
ແທນທີ່ຈະເປັນສະບັບ static. ທົ່ວໄປທີ່ສຸດຂອງເຫຼົ່ານີ້ແມ່ນໃນເວລາທີ່ຄໍາຮ້ອງສະຫມັກ
ຕ້ອງການຖິ້ມແລະຈັບຂໍ້ຍົກເວັ້ນໃນທົ່ວຫ້ອງສະຫມຸດຮ່ວມກັນທີ່ແຕກຕ່າງກັນ. ໃນ​ກໍ​ລະ​ນີ​ນັ້ນ,
ແຕ່ລະຫ້ອງສະຫມຸດເຊັ່ນດຽວກັນກັບຄໍາຮ້ອງສະຫມັກຕົວມັນເອງຄວນໃຊ້ການແບ່ງປັນ libgcc.

ດັ່ງນັ້ນ, ໄດເວີ G++ ແລະ GCJ ຈະເພີ່ມອັດຕະໂນມັດ -shared-libgcc ທຸກຄັ້ງທີ່ເຈົ້າສ້າງ
ຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນຫຼືການປະຕິບັດຕົ້ນຕໍ, ເພາະວ່າ C ++ ແລະ Java ປົກກະຕິແລ້ວໃຊ້
ຂໍ້ຍົກເວັ້ນ, ດັ່ງນັ້ນນີ້ແມ່ນສິ່ງທີ່ຖືກຕ້ອງທີ່ຈະເຮັດ.

ຖ້າ, ແທນທີ່ຈະ, ທ່ານໃຊ້ໄດເວີ GCC ເພື່ອສ້າງຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນ, ທ່ານອາດຈະພົບວ່າພວກມັນ
ຈະບໍ່ຖືກເຊື່ອມໂຍງກັບການແບ່ງປັນສະ ເໝີ ໄປ libgcc. ຖ້າ GCC ຊອກຫາ, ໃນການຕັ້ງຄ່າຂອງມັນ
ເວລາ, ທ່ານມີຕົວເຊື່ອມຕໍ່ທີ່ບໍ່ແມ່ນ GNU ຫຼືຕົວເຊື່ອມຕໍ່ GNU ທີ່ບໍ່ສະຫນັບສະຫນູນທາງເລືອກ
--eh-frame-hdr, ມັນຈະເຊື່ອມຕໍ່ສະບັບທີ່ແບ່ງປັນຂອງ libgcc ເຂົ້າໄປໃນຫ້ອງສະຫມຸດຮ່ວມກັນໂດຍ
ຄ່າເລີ່ມຕົ້ນ. ຖ້າບໍ່ດັ່ງນັ້ນ, ມັນຈະໃຊ້ປະໂຫຍດຈາກຕົວເຊື່ອມຕໍ່ແລະເພີ່ມປະສິດທິພາບອອກໄປ
ການ​ເຊື່ອມ​ຕໍ່​ກັບ​ສະ​ບັບ​ທີ່​ແບ່ງ​ປັນ​ຂອງ​ libgcc, ການເຊື່ອມໂຍງກັບສະບັບ static ຂອງ libgcc
ໂດຍຄ່າເລີ່ມຕົ້ນ. ນີ້ອະນຸຍາດໃຫ້ມີຂໍ້ຍົກເວັ້ນເພື່ອເຜີຍແຜ່ຜ່ານຫ້ອງສະຫມຸດຮ່ວມກັນດັ່ງກ່າວ,
ໂດຍ​ບໍ່​ມີ​ການ​ເກີດ​ຄ່າ​ໃຊ້​ຈ່າຍ​ໃນ​ການ​ຍົກ​ຍ້າຍ​ໃນ​ເວ​ລາ​ໂຫຼດ​ຫ້ອງ​ສະ​ຫມຸດ​.

ຢ່າງໃດກໍຕາມ, ຖ້າຫ້ອງສະຫມຸດຫຼືການປະຕິບັດຕົ້ນຕໍແມ່ນຄວນຈະຖິ້ມຫຼືຈັບຂໍ້ຍົກເວັ້ນ, ທ່ານ
ຕ້ອງເຊື່ອມຕໍ່ມັນໂດຍໃຊ້ G++ ຫຼື GCJ driver, ຕາມທີ່ເຫມາະສົມສໍາລັບພາສາທີ່ໃຊ້ໃນ
ໂຄງ​ການ​, ຫຼື​ການ​ນໍາ​ໃຊ້​ທາງ​ເລືອກ​ -shared-libgcc, ເຊັ່ນວ່າມັນຖືກເຊື່ອມໂຍງກັບການແບ່ງປັນ
libgcc.

-static-libstdc++
ໃນ​ເວ​ລາ​ທີ່ g ++ ໂຄງ​ການ​ແມ່ນ​ການ​ນໍາ​ໃຊ້​ເພື່ອ​ເຊື່ອມ​ຕໍ່​ໂຄງ​ການ C ++​, ມັນ​ຈະ​ປົກ​ກະ​ຕິ​ອັດ​ຕະ​ໂນ​ມັດ​
ເຊື່ອມຕໍ່ຕໍ່ libstdc++ທີ່ຢູ່ ຖ້າຫາກວ່າ libstdc++ ແມ່ນມີຢູ່ໃນຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນ, ແລະ
-static ທາງ​ເລືອກ​ບໍ່​ໄດ້​ຖືກ​ນໍາ​ໃຊ້​, ຫຼັງ​ຈາກ​ນັ້ນ​ນີ້​ຈະ​ເຊື່ອມ​ຕໍ່​ກັບ​ສະ​ບັບ​ທີ່​ແບ່ງ​ປັນ​ຂອງ​
libstdc++. ນັ້ນແມ່ນປົກກະຕິດີ. ຢ່າງໃດກໍຕາມ, ບາງຄັ້ງມັນກໍ່ເປັນປະໂຫຍດທີ່ຈະ freeze
ສະບັບຂອງ libstdc++ ນໍາໃຊ້ໂດຍໂຄງການໂດຍບໍ່ມີການໄປທັງຫມົດວິທີການເປັນ static ຢ່າງເຕັມສ່ວນ
ເຊື່ອມຕໍ່. ໄດ້ -static-libstdc++ ທາງ​ເລືອກ​ຊີ້​ນໍາ​ g ++ ຄົນຂັບເພື່ອເຊື່ອມຕໍ່ libstdc++
statically, ໂດຍບໍ່ຈໍາເປັນຕ້ອງເຊື່ອມຕໍ່ຫ້ອງສະຫມຸດອື່ນ statically.

- ສັນ​ຍາ​ລັກ​
ຜູກມັດການອ້າງອີງໃສ່ສັນຍາລັກທົ່ວໂລກເມື່ອສ້າງວັດຖຸທີ່ໃຊ້ຮ່ວມກັນ. ເຕືອນກ່ຽວກັບການໃດໆ
ການອ້າງອີງທີ່ບໍ່ໄດ້ຮັບການແກ້ໄຂ (ເວັ້ນເສຍແຕ່ຈະ overridden ໂດຍຕົວເລືອກຕົວແກ້ໄຂການເຊື່ອມຕໍ່ -Xlinker -z
-Xlinker defs). ມີພຽງແຕ່ລະບົບຈໍານວນຫນ້ອຍທີ່ສະຫນັບສະຫນູນທາງເລືອກນີ້.

-T script
ການນໍາໃຊ້ script ເປັນຕົວເຊື່ອມຕໍ່. ທາງ​ເລືອກ​ນີ້​ແມ່ນ​ສະ​ຫນັບ​ສະ​ຫນູນ​ໂດຍ​ລະ​ບົບ​ຫຼາຍ​ທີ່​ສຸດ​ການ​ນໍາ​ໃຊ້​
ຕົວເຊື່ອມຕໍ່ GNU. ໃນບາງເປົ້າໝາຍ, ເຊັ່ນ: ເປົ້າໝາຍກະດານເປົ່າທີ່ບໍ່ມີລະບົບປະຕິບັດງານ,
ໄດ້ -T ທາງເລືອກອາດຈະຕ້ອງການໃນເວລາທີ່ເຊື່ອມຕໍ່ເພື່ອຫຼີກເວັ້ນການອ້າງອີງເຖິງສັນຍາລັກທີ່ບໍ່ໄດ້ກໍານົດ.

-Xlinker ທາງເລືອກ
ຜ່ານ ທາງເລືອກ ເປັນທາງເລືອກໃຫ້ກັບຕົວເຊື່ອມຕໍ່. ທ່ານສາມາດນໍາໃຊ້ນີ້ເພື່ອສະຫນອງລະບົບສະເພາະ
ຕົວເລືອກຕົວເຊື່ອມຕໍ່ທີ່ GCC ບໍ່ຮັບຮູ້.

ຖ້າທ່ານຕ້ອງການຜ່ານທາງເລືອກທີ່ໃຊ້ການໂຕ້ຖຽງແຍກຕ່າງຫາກ, ທ່ານຕ້ອງໃຊ້ -Xlinker
ສອງຄັ້ງ, ຫນຶ່ງຄັ້ງສໍາລັບທາງເລືອກແລະຫນຶ່ງຄັ້ງສໍາລັບການໂຕ້ຖຽງ. ຕົວຢ່າງ, ຜ່ານ - ຢືນ​ຢັນ​
ຄໍານິຍາມ, ທ່ານຕ້ອງຂຽນ -Xlinker - ຢືນ​ຢັນ​ -Xlinker ຄໍານິຍາມ. ມັນບໍ່ເຮັດວຽກ
ການຂຽນ -Xlinker "-ຢືນຢັນ ຄໍານິຍາມ", ເນື່ອງຈາກວ່ານີ້ຜ່ານສາຍທັງຫມົດເປັນ a
ການໂຕ້ຖຽງດຽວ, ເຊິ່ງບໍ່ແມ່ນສິ່ງທີ່ຜູ້ເຊື່ອມຕໍ່ຄາດຫວັງ.

ເມື່ອໃຊ້ຕົວເຊື່ອມຕໍ່ GNU, ປົກກະຕິແລ້ວມັນສະດວກກວ່າທີ່ຈະຜ່ານການໂຕ້ຖຽງກັບຕົວເຊື່ອມຕໍ່
ທາງ​ເລືອກ​ການ​ນໍາ​ໃຊ້​ ທາງເລືອກ=ມູນຄ່າ syntax ກວ່າເປັນການໂຕ້ຖຽງແຍກຕ່າງຫາກ. ຕົວຢ່າງ, ເຈົ້າ
ສາມາດລະບຸ -Xlinker -map=output.map ແທນ​ທີ່​ຈະ -Xlinker - ແຜນທີ່ -Xlinker output.map.
ຕົວເຊື່ອມຕໍ່ອື່ນໆອາດຈະບໍ່ສະຫນັບສະຫນູນ syntax ນີ້ສໍາລັບຕົວເລືອກແຖວຄໍາສັ່ງ.

-Wl,ທາງເລືອກ
ຜ່ານ ທາງເລືອກ ເປັນທາງເລືອກໃຫ້ກັບຕົວເຊື່ອມຕໍ່. ຖ້າ ທາງເລືອກ ມີເຄື່ອງໝາຍຈຸດ, ມັນແບ່ງອອກເປັນ
ຕົວເລືອກຫຼາຍອັນຢູ່ໃນເຄື່ອງໝາຍຈຸດ. ທ່ານ​ສາ​ມາດ​ນໍາ​ໃຊ້ syntax ນີ້​ເພື່ອ​ຜ່ານ​ການ​ໂຕ້​ຖຽງ​ກັບ​
ທາງເລືອກ. ຍົກ​ຕົວ​ຢ່າງ, -Wl,-Map,output.map passes - ແຜນທີ່ output.map ກັບຕົວເຊື່ອມຕໍ່. ເມື່ອ​ໃດ​
ການນໍາໃຊ້ຕົວເຊື່ອມຕໍ່ GNU, ທ່ານຍັງສາມາດໄດ້ຮັບຜົນກະທົບດຽວກັນກັບ -Wl,-Map=output.map.

ຫມາຍເຫດ: ໃນ Ubuntu 8.10 ແລະຮຸ່ນຕໍ່ມາ, ສໍາລັບ LDFLAGS, ທາງເລືອກ -Wl,-z,relro ຖືກນໍາໃຊ້.
ເພື່ອປິດການ ນຳ ໃຊ້, ໃຊ້ -Wl,-z,norelro.

-u ສັນຍາລັກ
ທຳທ່າສັນຍາລັກ ສັນຍາລັກ ແມ່ນບໍ່ໄດ້ກໍານົດ, ເພື່ອບັງຄັບການເຊື່ອມຕໍ່ຂອງໂມດູນຫ້ອງສະຫມຸດເພື່ອກໍານົດ
ມັນ. ທ່ານສາມາດນໍາໃຊ້ -u ຫຼາຍຄັ້ງທີ່ມີສັນຍາລັກທີ່ແຕກຕ່າງກັນເພື່ອບັງຄັບການໂຫຼດຂອງ
ໂມດູນຫ້ອງສະຫມຸດເພີ່ມເຕີມ.

ທາງເລືອກໃນການ ສໍາລັບການ Directory ຄົ້ນຫາ
ທາງ​ເລືອກ​ເຫຼົ່າ​ນີ້​ລະ​ບຸ​ລະ​ບົບ​ການ​ຄົ້ນ​ຫາ​ສໍາ​ລັບ​ໄຟລ​໌​ສ່ວນ​ຫົວ​, ສໍາ​ລັບ​ຫ້ອງ​ສະ​ຫມຸດ​ແລະ​ສໍາ​ລັບ​ພາກ​ສ່ວນ​
ຂອງ compiler​:

-Idir
ເພີ່ມໄດເລກະທໍລີ dir ໄປຫາຫົວຂອງບັນຊີລາຍຊື່ຂອງໄດເລກະທໍລີທີ່ຈະຊອກຫາ header
ໄຟລ໌. ນີ້ສາມາດຖືກນໍາໃຊ້ເພື່ອ override ໄຟລ໌ສ່ວນຫົວຂອງລະບົບ, ການທົດແທນຂອງທ່ານເອງ
ສະບັບ, ນັບຕັ້ງແຕ່ໄດເລກະທໍລີເຫຼົ່ານີ້ຖືກຄົ້ນຫາກ່ອນໄຟລ໌ສ່ວນຫົວຂອງລະບົບ
ໄດເລກະທໍລີ. ຢ່າງໃດກໍຕາມ, ທ່ານບໍ່ຄວນໃຊ້ທາງເລືອກນີ້ເພື່ອເພີ່ມໄດເລກະທໍລີທີ່ມີ
ໄຟລ໌ສ່ວນຫົວລະບົບທີ່ຜູ້ຂາຍສະໜອງໃຫ້ (ໃຊ້ - ລະບົບ ສໍາລັບການນັ້ນ). ຖ້າທ່ານໃຊ້ຫຼາຍກວ່າຫນຶ່ງ
-I ທາງເລືອກ, ໄດເລກະທໍລີໄດ້ຖືກສະແກນຈາກຊ້າຍຫາຂວາ; ລະບົບມາດຕະຖານ
ໄດເລກະທໍລີມາພາຍຫຼັງ.

ຖ້າລະບົບມາດຕະຖານປະກອບມີໄດເລກະທໍລີ, ຫຼືໄດເລກະທໍລີທີ່ລະບຸໄວ້ - ລະບົບ, ເປັນ
ຍັງລະບຸໄວ້ກັບ -I, ການ -I ທາງເລືອກຈະຖືກລະເລີຍ. ໄດເລກະທໍລີຈະຍັງຄົງຢູ່
ຄົ້ນຫາແຕ່ເປັນລະບົບລະບົບຢູ່ໃນຕໍາແຫນ່ງປົກກະຕິໃນລະບົບປະກອບມີລະບົບຕ່ອງໂສ້.
ນີ້ແມ່ນເພື່ອຮັບປະກັນວ່າຂັ້ນຕອນຂອງ GCC ເພື່ອແກ້ໄຂສ່ວນຫົວຂອງລະບົບ buggy ແລະຄໍາສັ່ງ
ສໍາລັບຄໍາແນະນໍາ include_next ບໍ່ໄດ້ປ່ຽນແປງໂດຍບໍ່ໄດ້ຕັ້ງໃຈ. ຖ້າເຈົ້າຕ້ອງການແທ້ໆ
ປ່ຽນຄໍາສັ່ງຄົ້ນຫາສໍາລັບລະບົບໄດເລກະທໍລີ, ໃຊ້ -nostdinc ແລະ / ຫຼື - ລະບົບ
ຕົວເລືອກ

-iplugindir=dir
ຕັ້ງຄ່າໄດເລກະທໍລີເພື່ອຊອກຫາ plugins ທີ່ຜ່ານ -fplugin=ຊື່ ແທນ​ທີ່
-fplugin=ເສັ້ນທາງ/ຊື່ດັ່ງນັ້ນ,. ທາງເລືອກນີ້ບໍ່ໄດ້ຫມາຍຄວາມວ່າຈະຖືກນໍາໃຊ້ໂດຍຜູ້ໃຊ້, ແຕ່ວ່າພຽງແຕ່
ຜ່ານໄປໂດຍຄົນຂັບລົດ.

-iquotedir
ເພີ່ມໄດເລກະທໍລີ dir ໄປຫາຫົວຂອງບັນຊີລາຍຊື່ຂອງໄດເລກະທໍລີທີ່ຈະຊອກຫາ header
ໄຟລ໌ພຽງແຕ່ສໍາລັບກໍລະນີຂອງ #include "ເອກະສານ"; ພວກເຂົາບໍ່ໄດ້ຄົ້ນຫາ #include <ເອກະສານ>,
ຖ້າບໍ່ດັ່ງນັ້ນຄືກັນກັບ -I.

-Ldir
ເພີ່ມໄດເລກະທໍລີ dir ໄປຫາບັນຊີລາຍຊື່ຂອງໄດເລກະທໍລີທີ່ຈະຄົ້ນຫາ -l.

-Bຄຳ ນຳ ໜ້າ
ທາງ​ເລືອກ​ນີ້​ລະ​ບຸ​ບ່ອນ​ທີ່​ຈະ​ຊອກ​ຫາ​ການ​ປະ​ຕິ​ບັດ​, ຫ້ອງ​ສະ​ຫມຸດ​, ລວມ​ໄຟລ​໌​, ແລະ​
ໄຟລ໌ຂໍ້ມູນຂອງ compiler ຕົວຂອງມັນເອງ.

ໂປລແກລມໄດເວີ compiler ດໍາເນີນການຫນຶ່ງຫຼືຫຼາຍໂຄງການຍ່ອຍ cpp, cc1, as ແລະ ld.
ມັນພະຍາຍາມ ຄຳ ນຳ ໜ້າ ເປັນຄໍານໍາຫນ້າສໍາລັບແຕ່ລະໂຄງການທີ່ມັນພະຍາຍາມດໍາເນີນການ, ທັງມີແລະບໍ່ມີ
ເຄື່ອງ/ສະບັບພາສາ/.

ສໍາລັບແຕ່ລະໂຄງການຍ່ອຍທີ່ຈະດໍາເນີນການ, ໄດເວີ compiler ທໍາອິດພະຍາຍາມ -B ຄໍານໍາຫນ້າ, ຖ້າມີ.
ຖ້າຊື່ນັ້ນບໍ່ພົບ, ຫຼືຖ້າ -B ບໍ່ໄດ້ລະບຸ, ຄົນຂັບພະຍາຍາມສອງມາດຕະຖານ
ຄຳນຳໜ້າ, /usr/lib/gcc/ ແລະ /usr/local/lib/gcc/. ຖ້າທັງສອງອັນນັ້ນບໍ່ໄດ້ຜົນໃນ ກ
ຊື່​ໄຟລ​໌​ທີ່​ພົບ​ເຫັນ​, ຊື່​ໂຄງ​ການ​ທີ່​ບໍ່​ໄດ້​ປັບ​ປຸງ​ແມ່ນ​ການ​ຄົ້ນ​ຫາ​ສໍາ​ລັບ​ການ​ນໍາ​ໃຊ້​
ໄດເລກະທໍລີທີ່ລະບຸໄວ້ໃນຂອງທ່ານ PATH environment variable

compiler ຈະກວດສອບເບິ່ງວ່າເສັ້ນທາງທີ່ສະຫນອງໃຫ້ໂດຍ -B ຫມາຍເຖິງໄດເລກະທໍລີ,
ແລະຖ້າຈໍາເປັນ, ມັນຈະເພີ່ມຕົວແຍກໄດເລກະທໍລີຢູ່ໃນຕອນທ້າຍຂອງເສັ້ນທາງ.

-B ຄໍານໍາຫນ້າທີ່ມີປະສິດຕິຜົນລະບຸຊື່ໄດເລກະທໍລີຍັງໃຊ້ກັບຫ້ອງສະຫມຸດໃນ
linker, ເນື່ອງຈາກວ່າ compiler ແປທາງເລືອກເຫຼົ່ານີ້ເຂົ້າໄປໃນ -L ທາງເລືອກສໍາລັບຕົວເຊື່ອມຕໍ່.
ພວກເຂົາເຈົ້າຍັງນໍາໃຊ້ເພື່ອປະກອບມີໄຟລ໌ໃນ preprocessor, ເນື່ອງຈາກວ່າ compiler ແປ
ທາງເລືອກເຫຼົ່ານີ້ເຂົ້າໄປໃນ - ລະບົບ ທາງ​ເລືອກ​ສໍາ​ລັບ preprocessor ໄດ້​. ໃນກໍລະນີນີ້, compiler
ເພີ່ມເຕີມ ປະກອບດ້ວຍ ກັບຄໍານໍາຫນ້າ.

ໄຟລ໌ສະຫນັບສະຫນູນ runtime libgcc.a ຍັງສາມາດໄດ້ຮັບການຄົ້ນຫາສໍາລັບການນໍາໃຊ້ -B ຄໍານໍາຫນ້າ, ຖ້າ
ຕ້ອງການ. ຖ້າມັນບໍ່ພົບຢູ່ທີ່ນັ້ນ, ສອງຄໍານໍາຫນ້າມາດຕະຖານຂ້າງເທິງແມ່ນພະຍາຍາມ, ແລະນັ້ນ
ແມ່ນທັງຫມົດ. ໄຟລ໌ຖືກປະໄວ້ຈາກການເຊື່ອມຕໍ່ຖ້າມັນບໍ່ພົບໂດຍວິທີການເຫຼົ່ານັ້ນ.

ອີກວິທີໜຶ່ງໃນການລະບຸຄຳນຳໜ້າຄືກັບ -B ຄໍານໍາຫນ້າແມ່ນການນໍາໃຊ້ສະພາບແວດລ້ອມ
ຕົວແປ GCC_EXEC_PREFIX.

ໃນຖານະເປັນ kludge ພິເສດ, ຖ້າຫາກວ່າເສັ້ນທາງສະຫນອງໃຫ້ໂດຍ -B is [dir/]stageN/, ບ່ອນທີ່ N ເປັນຕົວເລກ
ໃນລະຫວ່າງ 0 ຫາ 9, ຫຼັງຈາກນັ້ນມັນຈະຖືກແທນທີ່ດ້ວຍ [dir/]ລວມທັງ. ນີ້ແມ່ນເພື່ອຊ່ວຍ
boot-strapping compiler ໄດ້.

-spec=ເອກະສານ
ຂະບວນການ ເອກະສານ ຫຼັງຈາກ compiler ອ່ານໃນມາດຕະຖານ ຂໍ້ກໍາຫນົດ ໄຟລ໌, ເພື່ອ override
ຄ່າເລີ່ມຕົ້ນທີ່ gcc ໂປລແກລມຄົນຂັບໃຊ້ໃນເວລາທີ່ກໍານົດສິ່ງທີ່ສະຫຼັບທີ່ຈະຜ່ານ
to cc1, cc1plus, as, ld, ແລະອື່ນໆ ຫຼາຍກ່ວາຫນຶ່ງ -spec=ເອກະສານ ສາມາດໄດ້ຮັບການລະບຸໄວ້ໃນ
ເສັ້ນຄໍາສັ່ງ, ແລະພວກມັນຖືກປຸງແຕ່ງຕາມລໍາດັບ, ຈາກຊ້າຍຫາຂວາ.

--sysroot=dir
ການນໍາໃຊ້ dir ເປັນໄດເລກະທໍລີຮາກຢ່າງມີເຫດຜົນສໍາລັບສ່ວນຫົວ ແລະຫ້ອງສະໝຸດ. ສໍາລັບຕົວຢ່າງ, ຖ້າຫາກວ່າ
compiler ປົກກະຕິຈະຊອກຫາ headers ໃນ / usr / ປະກອບມີ ແລະຫ້ອງສະຫມຸດໃນ / usr / lib,
ມັນແທນທີ່ຈະຊອກຫາ dir/usr/ລວມ ແລະ dir/usr/lib.

ຖ້າທ່ານໃຊ້ທັງສອງທາງເລືອກນີ້ແລະ -isysroot ທາງ​ເລືອກ​, ຫຼັງ​ຈາກ​ນັ້ນ​ --sysroot ທາງ​ເລືອກ​ຈະ​
ໃຊ້ກັບຫ້ອງສະຫມຸດ, ແຕ່ -isysroot ທາງ​ເລືອກ​ຈະ​ນໍາ​ໃຊ້​ກັບ​ໄຟລ​໌​ສ່ວນ​ຫົວ​.

ຕົວເຊື່ອມຕໍ່ GNU (ເລີ່ມຕົ້ນດ້ວຍສະບັບ 2.16) ມີການສະຫນັບສະຫນູນທີ່ຈໍາເປັນສໍາລັບການນີ້
ທາງເລືອກ. ຖ້າຕົວເຊື່ອມຕໍ່ຂອງເຈົ້າບໍ່ສະຫນັບສະຫນູນທາງເລືອກນີ້, ລັກສະນະຂອງໄຟລ໌ header ຂອງ
--sysroot ຍັງຈະເຮັດວຽກ, ແຕ່ລັກສະນະຫ້ອງສະຫມຸດຈະບໍ່.

-AND- ຕົວເລືອກນີ້ຖືກປະຕິເສດ. ກະລຸນາໃຊ້ -iquote ແທນທີ່ -I ໄດເລກະທໍລີກ່ອນ
ໄດ້ -AND- ແລະເອົາ -AND-. ໄດເລກະທໍລີໃດໆທີ່ທ່ານລະບຸດ້ວຍ -I ທາງ​ເລືອກ​ກ່ອນ​ທີ່​ຈະ​
-AND- ທາງ​ເລືອກ​ແມ່ນ​ຊອກ​ຫາ​ພຽງ​ແຕ່​ສໍາ​ລັບ​ກໍ​ລະ​ນີ​ຂອງ​ #include "ເອກະສານ"; ພວກເຂົາບໍ່ໄດ້ຄົ້ນຫາ
ສໍາລັບການ #include <ເອກະສານ>.

ຖ້າໄດເລກະທໍລີເພີ່ມເຕີມຖືກກໍານົດດ້ວຍ -I ທາງ​ເລືອກ​ຫຼັງ​ຈາກ​ -AND-, ເຫຼົ່ານີ້
ໄດເລກະທໍລີຖືກຄົ້ນຫາສໍາລັບທັງຫມົດ #include ຄຳແນະນຳ. (ປົກກະຕິ ທັງຫມົດ -I ໄດເລກະທໍລີ
ໄດ້​ຖືກ​ນໍາ​ໃຊ້​ວິ​ທີ​ການ​ນີ້​.)

ນອກຈາກນັ້ນ, -AND- ທາງ​ເລືອກ inhibits ການ​ນໍາ​ໃຊ້​ລະ​ບົບ​ປະ​ຈຸ​ບັນ (ບ່ອນ​ທີ່
ໄຟລ໌ປ້ອນຂໍ້ມູນໃນປະຈຸບັນມາຈາກ) ເປັນໄດເລກະທໍລີຄົ້ນຫາທໍາອິດສໍາລັບ #include "ເອກະສານ".
ບໍ່ມີທາງທີ່ຈະ override ຜົນກະທົບນີ້ຂອງ -AND-ທີ່ຢູ່ ມີ - ນ. ທ່ານສາມາດກໍານົດການຊອກຫາ
ໄດເລກະທໍລີທີ່ເປັນປະຈຸບັນໃນເວລາທີ່ compiler ໄດ້ຖືກເອີ້ນ. ນັ້ນບໍ່ແມ່ນແທ້
ຄືກັນກັບສິ່ງທີ່ preprocessor ເຮັດໂດຍຄ່າເລີ່ມຕົ້ນ, ແຕ່ມັນມັກຈະເປັນທີ່ຫນ້າພໍໃຈ.

-AND- ບໍ່ໄດ້ຍັບຍັ້ງການນໍາໃຊ້ລະບົບມາດຕະຖານສໍາລັບໄຟລ໌ header.
ດັ່ງນັ້ນ, -AND- ແລະ -nostdinc ເປັນເອກະລາດ.

ການລະບຸ ເປົ້າຫມາຍ ເຄື່ອງ ແລະ ຜູ້ລວບລວມຂໍ້ມູນ Version
ວິທີການປົກກະຕິທີ່ຈະດໍາເນີນການ GCC ແມ່ນເພື່ອດໍາເນີນການທີ່ເອີ້ນວ່າ executable gcc, ຫຼື ເຄື່ອງ-gcc ເມື່ອຂ້າມ -
ການລວບລວມ, ຫຼື ເຄື່ອງ-gcc-ສະບັບພາສາ ເພື່ອແລ່ນເວີຊັນອື່ນທີ່ບໍ່ແມ່ນອັນທີ່ຕິດຕັ້ງໄວ້
ສຸດທ້າຍ.

ອຸປະກອນ ແບບຈໍາລອງ ແລະ Configurations
ແຕ່ລະປະເພດເຄື່ອງຈັກເປົ້າຫມາຍສາມາດມີທາງເລືອກພິເສດຂອງຕົນເອງ, ເລີ່ມຕົ້ນດ້ວຍ -m, ເລືອກ
ໃນບັນດາຮູບແບບຮາດແວຕ່າງໆຫຼືການຕັ້ງຄ່າ --- ຕົວຢ່າງ, 68010 vs 68020, ແບບເລື່ອນ
coprocessor ຫຼືບໍ່ມີ. ສະບັບຕິດຕັ້ງດຽວຂອງ compiler ສາມາດລວບລວມສໍາລັບທຸກຮູບແບບ
ຫຼືການຕັ້ງຄ່າ, ອີງຕາມທາງເລືອກທີ່ລະບຸໄວ້.

ບາງການຕັ້ງຄ່າຂອງ compiler ຍັງສະຫນັບສະຫນູນທາງເລືອກພິເສດເພີ່ມເຕີມ, ປົກກະຕິແລ້ວສໍາລັບ
ຄວາມເຂົ້າກັນໄດ້ກັບ compilers ອື່ນໆໃນເວທີດຽວກັນ.

Adapteva Epiphany ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ -m ທາງເລືອກແມ່ນຖືກກໍານົດສໍາລັບ Adapteva Epiphany:

-mhalf-reg-file
ຢ່າຈັດສັນການລົງທະບຽນໃດໆຢູ່ໃນຂອບເຂດ "r32"..."r63". ທີ່ອະນຸຍາດໃຫ້ລະຫັດດໍາເນີນການ
ຮາດແວ variants ທີ່ຂາດການລົງທະບຽນເຫຼົ່ານີ້.

-mprefer-short-insn-regs
ມັກຈັດສັນທະບຽນທີ່ອະນຸຍາດໃຫ້ສ້າງການສອນສັ້ນ. ນີ້ສາມາດ
ສົ່ງຜົນໃຫ້ມີຈໍານວນຄໍາແນະນໍາເພີ່ມຂຶ້ນ, ດັ່ງນັ້ນຖ້າອັນນີ້ຫຼຸດລົງຫຼືເພີ່ມຂະຫນາດລະຫັດ
ອາດຈະແຕກຕ່າງກັນໃນແຕ່ລະກໍລະນີ.

-mbranch-cost=num
ກໍານົດຄ່າໃຊ້ຈ່າຍຂອງສາຂາເປັນປະມານ num ຄໍາແນະນໍາ "ງ່າຍດາຍ". ຄ່າໃຊ້ຈ່າຍນີ້ແມ່ນພຽງແຕ່ a
heuristic ແລະບໍ່ໄດ້ຮັບການຮັບປະກັນໃຫ້ຜົນໄດ້ຮັບທີ່ສອດຄ່ອງໃນທົ່ວການປ່ອຍ.

-mcmove
ເປີດໃຊ້ການຜະລິດການເຄື່ອນໄຫວຕາມເງື່ອນໄຂ.

-mnops=num
ປ່ອຍ num nops ກ່ອນທຸກໆຄໍາແນະນໍາທີ່ສ້າງຂຶ້ນອື່ນໆ.

-mno-soft-cmpsf
ສໍາລັບການປຽບທຽບຈຸດລອຍແບບຄວາມຊັດເຈນດຽວ, ປ່ອຍຄໍາແນະນໍາ fsub ແລະທົດສອບ
ທຸງ. ນີ້ແມ່ນໄວກວ່າການປຽບທຽບຊອບແວ, ແຕ່ສາມາດໄດ້ຮັບຜົນໄດ້ຮັບທີ່ບໍ່ຖືກຕ້ອງໃນ
ການປະກົດຕົວຂອງ NaNs, ຫຼືເມື່ອສອງຕົວເລກນ້ອຍທີ່ແຕກຕ່າງກັນຖືກປຽບທຽບກັບພວກມັນ
ຄວາມແຕກຕ່າງແມ່ນຄິດໄລ່ເປັນສູນ. ຄ່າເລີ່ມຕົ້ນແມ່ນ -msoft-cmpsf, ເຊິ່ງໃຊ້ຊ້າກວ່າ, ແຕ່
ສອດຄ່ອງ IEEE, ການປຽບທຽບຊອບແວ.

-mstack-offset=num
ກໍານົດການຊົດເຊີຍລະຫວ່າງເທິງຂອງ stack ແລະຕົວຊີ້ stack. ຕົວຢ່າງ: ຄ່າຂອງ 8
ຫມາຍຄວາມວ່າແປດ bytes ໃນໄລຍະ sp+0...sp+7 ສາມາດຖືກນໍາໃຊ້ໂດຍຟັງຊັນໃບ
ໂດຍບໍ່ມີການຈັດສັນ stack. ຄຸນຄ່ານອກເໜືອໄປຈາກ 8 or 16 ແມ່ນ untested ແລະຄົງຈະບໍ່ເປັນ
ເຮັດວຽກ. ໃຫ້ສັງເກດວ່າທາງເລືອກນີ້ປ່ຽນແປງ ABI, ລວບລວມໂຄງການທີ່ມີ a
stack offset ທີ່ແຕກຕ່າງກັນກ່ວາຫ້ອງສະຫມຸດໄດ້ຖືກລວບລວມໂດຍໂດຍທົ່ວໄປຈະບໍ່
ເຮັດວຽກ. ທາງເລືອກນີ້ສາມາດເປັນປະໂຫຍດຖ້າຫາກວ່າທ່ານຕ້ອງການທີ່ຈະປະເມີນຖ້າຫາກວ່າເປັນ stack offset ທີ່ແຕກຕ່າງກັນ
ຈະໃຫ້ທ່ານລະຫັດທີ່ດີກວ່າ, ແຕ່ຕົວຈິງແລ້ວການນໍາໃຊ້ stack offset ທີ່ແຕກຕ່າງກັນເພື່ອສ້າງ
ໂປລແກລມທີ່ເຮັດວຽກ, ແນະນໍາໃຫ້ຕັ້ງຄ່າລະບົບຕ່ອງໂສ້ເຄື່ອງມືທີ່ເຫມາະສົມ
--with-stack-offset=num ທາງເລືອກ.

-mno-ຮອບ-ໃກ້ທີ່ສຸດ
ເຮັດໃຫ້ຕົວກໍານົດເວລາສົມມຸດວ່າຮູບແບບການຮອບໄດ້ຖືກຕັ້ງເປັນການຕັດ. ໄດ້
ມາດຕະຖານແມ່ນ -mround-ໃກ້ທີ່ສຸດ.

-mlong-ໂທ
ຖ້າບໍ່ໄດ້ລະບຸໄວ້ເປັນຢ່າງອື່ນໂດຍຄຸນສົມບັດ, ສົມມຸດວ່າການໂທທັງໝົດອາດຈະເກີນ
offset range ຂອງຄໍາແນະນໍາ b / bl, ແລະດັ່ງນັ້ນການໂຫຼດທີ່ຢູ່ຟັງຊັນເຂົ້າໄປໃນ
ລົງທະບຽນກ່ອນທີ່ຈະດໍາເນີນການໂທ (ຖ້າບໍ່ດັ່ງນັ້ນໂດຍກົງ). ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-mshort-ໂທ
ຖ້າບໍ່ໄດ້ລະບຸໄວ້ເປັນຢ່າງອື່ນໂດຍຄຸນລັກສະນະ, ສົມມຸດວ່າການໂທໂດຍກົງທັງຫມົດແມ່ນຢູ່ໃນຂອບເຂດ
ຂອງຄໍາແນະນໍາ b / bl, ດັ່ງນັ້ນການນໍາໃຊ້ຄໍາແນະນໍາເຫຼົ່ານີ້ສໍາລັບການໂທຫາໂດຍກົງ. ຄ່າເລີ່ມຕົ້ນ
is -mlong-ໂທ.

-msmall16
ສົມມຸດວ່າທີ່ຢູ່ສາມາດຖືກໂຫລດເປັນຄ່າ 16-bit unsigned. ນີ້ບໍ່ໄດ້ນໍາໃຊ້ກັບ
ທີ່​ຢູ່​ຫນ້າ​ທີ່​ສໍາ​ລັບ​ການ​ທີ່​ -mlong-ໂທ semantics ມີຜົນບັງຄັບໃຊ້.

-mfp-mode=ຮູບແບບການ
ຕັ້ງຄ່າໂຫມດທີ່ເດັ່ນຂອງຫນ່ວຍງານຈຸດລອຍ. ນີ້​ກໍາ​ນົດ​ການ​ເລື່ອນ -
ໂຫມດຈຸດທີ່ສະຫນອງໃຫ້ແລະຄາດວ່າຈະຢູ່ໃນຫນ້າທີ່ໂທຫາແລະເວລາກັບຄືນ. ການເຮັດ
ຮູບ​ແບບ​ນີ້​ກົງ​ກັບ​ຮູບ​ແບບ​ທີ່​ທ່ານ​ສ່ວນ​ໃຫຍ່​ຕ້ອງ​ການ​ໃນ​ການ​ເລີ່ມ​ຕົ້ນ​ການ​ທໍາ​ງານ​ສາ​ມາດ​ເຮັດ​ໃຫ້​ທ່ານ​
ໂປຣແກມນ້ອຍລົງ ແລະໄວຂຶ້ນໂດຍການຫຼີກລ່ຽງການສະຫຼັບໂໝດທີ່ບໍ່ຈຳເປັນ.

ຮູບແບບການ ສາມາດຕັ້ງເປັນຄ່າໜຶ່ງຕໍ່ໄປນີ້:

ຜູ້ໂທ
ໂໝດໃດໆກໍຕາມຢູ່ໃນການເຂົ້າຟັງຊັນແມ່ນຖືກຕ້ອງ, ແລະຖືກຮັກສາໄວ້ ຫຼືຟື້ນຟູເມື່ອຟັງຊັນ
ກັບຄືນ, ແລະໃນເວລາທີ່ມັນໂທຫາຫນ້າທີ່ອື່ນໆ. ຮູບແບບນີ້ແມ່ນເປັນປະໂຫຍດສໍາລັບການລວບລວມ
ຫ້ອງສະຫມຸດຫຼືຫນ່ວຍງານລວບລວມອື່ນໆທີ່ເຈົ້າອາດຈະຕ້ອງການລວມເຂົ້າກັບທີ່ແຕກຕ່າງກັນ
ໂປລແກລມທີ່ມີໂຫມດ FPU ທີ່ແຕກຕ່າງກັນ, ແລະຄວາມສະດວກສະບາຍຂອງຄວາມສາມາດ
ໃຊ້ໄຟລ໌ວັດຖຸອັນດຽວເກີນຂະໜາດ ແລະຄວາມໄວເກີນຂະໜາດສຳລັບໂໝດພິເສດໃດໆ
ສະຫຼັບທີ່ອາດຈະຕ້ອງການ, ເມື່ອທຽບກັບສິ່ງທີ່ຕ້ອງການກັບຫຼາຍ
ທາງເລືອກສະເພາະຂອງຮູບແບບ FPU ທີ່ຊະນະ.

ລຳ ຕົ້ນ
ນີ້​ແມ່ນ​ຮູບ​ແບບ​ການ​ນໍາ​ໃຊ້​ສໍາ​ລັບ​ການ​ຄິດ​ໄລ່​ຈຸດ​ທີ່​ເລື່ອນ​ໄດ້​ທີ່​ມີ​ການ​ຕັດ​ອອກ (ເຊັ່ນ​: ຮອບ​
ໄປສູ່ສູນ) ຮູບແບບການຮອບ. ນັ້ນລວມມີການປ່ຽນຈາກຈຸດທີ່ລອຍໄປເປັນ
ເລກເຕັມ.

ຮອບ-ໃກ້ທີ່ສຸດ
ນີ້​ແມ່ນ​ຮູບ​ແບບ​ການ​ນໍາ​ໃຊ້​ສໍາ​ລັບ​ການ​ຄິດ​ໄລ່​ຈຸດ​ທີ່​ເລື່ອນ​ໄດ້​ທີ່​ມີ​ຮອບ​ຫາ​ໃກ້​ທີ່​ສຸດ​ຫຼື​.
ແມ້ແຕ່ຮູບຊົງມົນ.

int ນີ້​ແມ່ນ​ຮູບ​ແບບ​ການ​ນໍາ​ໃຊ້​ເພື່ອ​ປະ​ຕິ​ບັດ​ການ​ຄິດ​ໄລ່​ຈໍາ​ນວນ​ເຕັມ​ໃນ FPU​, ເຊັ່ນ​: integer​
ຄູນ, ຫຼືຈຳນວນເຕັມຄູນ ແລະສະສົມ.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -mfp-mode=ຜູ້ໂທ

-mnosplit-lohi
-mno-postinc
-mno-postmodify
ການປັບປຸງລະຫັດການຜະລິດທີ່ປິດການທໍາງານ, ຕາມລໍາດັບ, ການແບ່ງປັນການໂຫຼດ 32-bit,
ການສ້າງທີ່ຢູ່ຫຼັງການເພີ່ມ, ແລະການສ້າງທີ່ຢູ່ຫຼັງການດັດແກ້. ໄດ້
ຄ່າເລີ່ມຕົ້ນແມ່ນ msplit-lohi, -mpost-inc, ແລະ -mpost-ປັບ​ປຸງ​ແກ້​ໄຂ​.

-mnovect-double
ປ່ຽນໂຫມດ SIMD ທີ່ຕ້ອງການເປັນ SImode. ຄ່າເລີ່ມຕົ້ນແມ່ນ -mvect-double, ເຊິ່ງໃຊ້
DImode ເປັນໂຫມດ SIMD ທີ່ຕ້ອງການ.

-max-vect-align=num
ການຈັດຮຽງສູງສຸດສໍາລັບປະເພດຮູບແບບ vector ຂອງ SIMD. num ອາດຈະເປັນ 4 ຫຼື 8. ຄ່າເລີ່ມຕົ້ນແມ່ນ
8. ໃຫ້ສັງເກດວ່ານີ້ແມ່ນການປ່ຽນແປງ ABI, ເຖິງແມ່ນວ່າການໂຕ້ຕອບຫນ້າທີ່ຫ້ອງສະຫມຸດຈໍານວນຫຼາຍຈະ
ຈະບໍ່ໄດ້ຮັບຜົນກະທົບ, ຖ້າພວກເຂົາບໍ່ໃຊ້ໂຫມດ vector SIMD ໃນສະຖານທີ່ທີ່ພວກເຂົາມີຜົນກະທົບຂະຫນາດ
ແລະ/ຫຼືການຈັດປະເພດທີ່ກ່ຽວຂ້ອງ.

-msplit-vecmove-ຕົ້ນ
ແຍກ vector ຍ້າຍເຂົ້າໄປໃນການເຄື່ອນໄຫວຄໍາດຽວກ່ອນທີ່ຈະໂຫຼດໃຫມ່. ໃນທາງທິດສະດີ, ນີ້ສາມາດໃຫ້
ການຈັດສັນການລົງທະບຽນທີ່ດີກວ່າ, ແຕ່ມາຮອດປະຈຸບັນ, ກົງກັນຂ້າມເບິ່ງຄືວ່າໂດຍທົ່ວໄປແລ້ວ.

-m1reg-reg
ກໍານົດການລົງທະບຽນເພື່ອຖືຄ່າຄົງທີ່ -1, ເຊິ່ງເຮັດໃຫ້ການໂຫຼດຂະຫນາດນ້ອຍເປັນລົບ
ຄົງທີ່ແລະບາງ bitmasks ໄວຂຶ້ນ. ຄ່າທີ່ອະນຸຍາດສຳລັບ reg ແມ່ນ r43 ແລະ r63,
ເຊິ່ງລະບຸໃຫ້ໃຊ້ທະບຽນນັ້ນເປັນທະບຽນຄົງທີ່, ແລະບໍ່ມີ, ຊຶ່ງໝາຍຄວາມວ່າບໍ່ມີ
ການລົງທະບຽນແມ່ນໃຊ້ເພື່ອຈຸດປະສົງນີ້. ຄ່າເລີ່ມຕົ້ນແມ່ນ -m1reg-none.

AAArch64 ທາງເລືອກໃນການ

ຕົວເລືອກເຫຼົ່ານີ້ຖືກກໍານົດໄວ້ສໍາລັບການຈັດຕັ້ງປະຕິບັດ AArch64:

-mbig-endian
ສ້າງລະຫັດ big-endian. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນເມື່ອ GCC ຖືກຕັ້ງຄ່າສໍາລັບ an
aarch64_be-*-* ເປົ້າຫມາຍ.

-mgeneral-regs-ເທົ່ານັ້ນ
ສ້າງລະຫັດທີ່ໃຊ້ພຽງແຕ່ການລົງທະບຽນທົ່ວໄປ.

-mlittle-endian
ສ້າງລະຫັດ little-endian. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນເມື່ອ GCC ຖືກຕັ້ງຄ່າສໍາລັບ an
aarch64-*-* ແຕ່ບໍ່ແມ່ນ aarch64_be-*-* ເປົ້າຫມາຍ.

-mcmodel=ຂະໜາດນ້ອຍ
ສ້າງລະຫັດສໍາລັບຮູບແບບລະຫັດຂະຫນາດນ້ອຍ. ໂຄງ​ການ​ແລະ​ສັນ​ຍາ​ລັກ​ທີ່​ກໍາ​ນົດ​ໄວ້​ສະ​ຖິ​ຕິ​ຂອງ​ຕົນ​
ຕ້ອງຢູ່ພາຍໃນ 1GB ຂອງກັນແລະກັນ. ຕົວຊີ້ແມ່ນ 64 ບິດ. ໂຄງ​ການ​ສາ​ມາດ​ສະ​ຖິ​ຕິ​
ຫຼືເຊື່ອມຕໍ່ແບບໄດນາມິກ. ຮູບແບບນີ້ບໍ່ໄດ້ຖືກປະຕິບັດຢ່າງເຕັມສ່ວນແລະສ່ວນຫຼາຍແມ່ນປະຕິບັດເປັນ
"ຂະຫນາດນ້ອຍ".

-mcmodel=ຂະໜາດນ້ອຍ
ສ້າງລະຫັດສໍາລັບຮູບແບບລະຫັດຂະຫນາດນ້ອຍ. ໂຄງ​ການ​ແລະ​ການ​ກໍາ​ນົດ​ສະ​ຖິ​ຕິ​ຂອງ​ຕົນ​
ສັນຍາລັກຈະຕ້ອງຢູ່ພາຍໃນ 4GB ຂອງກັນແລະກັນ. ຕົວຊີ້ແມ່ນ 64 ບິດ. ໂຄງການສາມາດເປັນ
ເຊື່ອມໂຍງແບບຄົງທີ່ ຫຼືແບບເຄື່ອນໄຫວ. ນີ້ແມ່ນຮູບແບບລະຫັດເລີ່ມຕົ້ນ.

-mcmodel=ໃຫຍ່
ສ້າງລະຫັດສໍາລັບຮູບແບບລະຫັດຂະຫນາດໃຫຍ່. ນີ້ເຮັດໃຫ້ບໍ່ມີການສົມມຸດຕິຖານກ່ຽວກັບທີ່ຢູ່ແລະ
ຂະ​ຫນາດ​ຂອງ​ພາກ​ສ່ວນ​. ຕົວຊີ້ແມ່ນ 64 ບິດ. ໂຄງການສາມາດເຊື່ອມຕໍ່ແບບຄົງທີ່ເທົ່ານັ້ນ.

-mstrict-align
ຢ່າສົມມຸດວ່າການອ້າງອີງຄວາມຊົງຈໍາທີ່ບໍ່ສອດຄ່ອງຈະຖືກຈັດການໂດຍລະບົບ.

-momit-leaf-frame-pointer
-mno-omit-leaf-frame-pointer
ຍົກເລີກ ຫຼືຮັກສາຕົວຊີ້ກອບຢູ່ໃນໜ້າທີ່ຂອງໃບ. ພຶດຕິກໍາທີ່ຜ່ານມາແມ່ນ
Default

-mtls-dialect=desc
ໃຊ້ຕົວອະທິບາຍ TLS ເປັນກົນໄກການເກັບຮັກສາ thread-local ສໍາລັບການເຂົ້າເຖິງແບບເຄື່ອນໄຫວຂອງ TLS
ຕົວແປ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-mtls-dialect=ແບບດັ້ງເດີມ
ໃຊ້ TLS ແບບດັ້ງເດີມເປັນກົນໄກການເກັບຮັກສາ thread-local ສໍາລັບການເຂົ້າເຖິງແບບເຄື່ອນໄຫວຂອງ TLS
ຕົວແປ

- ມີນາ=ຊື່
ລະບຸຊື່ຂອງສະຖາປັດຕະຍະກຳເປົ້າໝາຍ, ເລືອກຕໍ່ທ້າຍດ້ວຍໜຶ່ງ ຫຼືຫຼາຍກວ່ານັ້ນ
ຕົວແກ້ໄຂຄຸນສົມບັດ. ທາງເລືອກນີ້ມີແບບຟອມ - ມີນາ=ໂຄ້ງ{+[no]ຄຸນນະສົມບັດ}*, ບ່ອນທີ່
ມູນຄ່າພຽງແຕ່ສໍາລັບ ໂຄ້ງ is armv8-a. ມູນຄ່າທີ່ເປັນໄປໄດ້ສໍາລັບ ຄຸນນະສົມບັດ ໄດ້ຖືກບັນທຶກໄວ້ໃນ
ພາກສ່ວນຍ່ອຍຂ້າງລຸ່ມນີ້.

ບ່ອນທີ່ມີການລະບຸຕົວແກ້ໄຂຄຸນສົມບັດທີ່ຂັດແຍ້ງກັນ, ຄຸນສົມບັດທີ່ຖືກຕ້ອງທີ່ສຸດແມ່ນຖືກນໍາໃຊ້.

GCC ໃຊ້ຊື່ນີ້ເພື່ອກໍານົດປະເພດຂອງຄໍາແນະນໍາທີ່ມັນສາມາດປ່ອຍອອກມາເມື່ອສ້າງ
ລະຫັດປະກອບ. ທາງເລືອກນີ້ສາມາດຖືກນໍາໃຊ້ຮ່ວມກັບຫຼືແທນທີ່ຈະເປັນ -mcpu=
ທາງເລືອກ.

-mcpu=ຊື່
ລະບຸຊື່ຂອງໂປເຊດເຊີເປົ້າຫມາຍ, ທາງເລືອກ suffixed ໂດຍຫນຶ່ງຫຼືຫຼາຍຄຸນສົມບັດ
ຕົວແກ້ໄຂ. ທາງເລືອກນີ້ມີແບບຟອມ -mcpu=cpu{+[no]ຄຸນນະສົມບັດ}*, ບ່ອນທີ່ເປັນໄປໄດ້
ຄຸນຄ່າ ສຳ ລັບ cpu ມີ generic, ຂະຫນາດໃຫຍ່. ມູນຄ່າທີ່ເປັນໄປໄດ້ສໍາລັບ ຄຸນນະສົມບັດ ໄດ້ຖືກບັນທຶກໄວ້ໃນ
ພາກສ່ວນຍ່ອຍຂ້າງລຸ່ມນີ້.

ບ່ອນທີ່ມີການລະບຸຕົວແກ້ໄຂຄຸນສົມບັດທີ່ຂັດແຍ້ງກັນ, ຄຸນສົມບັດທີ່ຖືກຕ້ອງທີ່ສຸດແມ່ນຖືກນໍາໃຊ້.

GCC ໃຊ້ຊື່ນີ້ເພື່ອກໍານົດປະເພດຂອງຄໍາແນະນໍາທີ່ມັນສາມາດປ່ອຍອອກມາເມື່ອສ້າງ
ລະຫັດປະກອບ.

-mtune=ຊື່
ລະບຸຊື່ຂອງໂປເຊດເຊີເພື່ອປັບແຕ່ງປະສິດທິພາບ. ລະຫັດຈະຖືກປັບ
ຄືກັບວ່າໂປເຊດເຊີເປົ້າ ໝາຍ ແມ່ນປະເພດທີ່ລະບຸໄວ້ໃນຕົວເລືອກນີ້, ແຕ່ຍັງໃຊ້ຢູ່
ຄໍາແນະນໍາທີ່ເຫມາະສົມກັບໂຮງງານຜະລິດເປົ້າຫມາຍທີ່ລະບຸໄວ້ໂດຍ a -mcpu= ທາງເລືອກ. ນີ້
ທາງ​ເລືອກ​ບໍ່​ສາ​ມາດ​ຕໍ່​ທ້າຍ​ໂດຍ​ການ​ປັບ​ປຸງ​ຄຸນ​ສົມ​ບັດ​.

- ມີນາ ແລະ -mcpu ຕົວແກ້ໄຂຄຸນສົມບັດ

ຕົວແກ້ໄຂຄຸນສົມບັດທີ່ໃຊ້ກັບ - ມີນາ ແລະ -mcpu ສາ​ມາດ​ເປັນ​ຫນຶ່ງ​ດັ່ງ​ຕໍ່​ໄປ​ນີ້​:

crypto
ເປີດໃຊ້ການຂະຫຍາຍ Crypto. ນີ້ຫມາຍຄວາມວ່າ Advanced SIMD ຖືກເປີດໃຊ້.

fp ເປີດໃຊ້ຄໍາແນະນໍາຈຸດລອຍ.

ຊິມ
ເປີດໃຊ້ຄໍາແນະນໍາຂັ້ນສູງ SIMD. ນີ້ຫມາຍເຖິງຄໍາແນະນໍາທີ່ເລື່ອນໄດ້
ເປີດໃຊ້ງານ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນຂອງຄ່າທີ່ເປັນໄປໄດ້ທັງໝົດໃນປະຈຸບັນສຳລັບທາງເລືອກ - ມີນາ ແລະ
-mcpu=.

ARM ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ -m ທາງເລືອກແມ່ນຖືກກໍານົດສໍາລັບ Advanced RISC Machines (ARM) ສະຖາປັດຕະຍະກໍາ:

-mabi=ຊື່
ສ້າງລະຫັດສໍາລັບ ABI ທີ່ລະບຸ. ຄ່າທີ່ອະນຸຍາດແມ່ນ: apcs-gnu, atpcs, aapcs,
aapcs-linux ແລະ iwmmxt.

-mapcs-frame
ສ້າງກອບ stack ທີ່ສອດຄ່ອງກັບມາດຕະຖານການໂທຂັ້ນຕອນ ARM ສໍາລັບທຸກຄົນ
ຫນ້າທີ່, ເຖິງແມ່ນວ່ານີ້ບໍ່ມີຄວາມຈໍາເປັນຢ່າງເຂັ້ມງວດສໍາລັບການປະຕິບັດທີ່ຖືກຕ້ອງຂອງລະຫັດ.
ການລະບຸ -fomit-frame-pointer ດ້ວຍຕົວເລືອກນີ້ຈະເຮັດໃຫ້ກອບ stack ບໍ່ເປັນ
ສ້າງຂຶ້ນສໍາລັບຫນ້າທີ່ຂອງໃບ. ຄ່າເລີ່ມຕົ້ນແມ່ນ -mno-apcs-frame.

- ແຜນທີ່
ນີ້ແມ່ນຄໍາສັບຄ້າຍຄື -mapcs-frame.

-mthumb-interwork
ສ້າງລະຫັດທີ່ຮອງຮັບການໂທລະຫວ່າງຊຸດຄຳສັ່ງ ARM ແລະ Thumb.
ຖ້າບໍ່ມີທາງເລືອກນີ້, ໃນສະຖາປັດຕະຍະກໍາກ່ອນ v5, ສອງຊຸດຄໍາແນະນໍາບໍ່ສາມາດເປັນ
ການ​ນໍາ​ໃຊ້​ທີ່​ເຊື່ອ​ຖື​ໄດ້​ຢູ່​ໃນ​ຫນຶ່ງ​ໂຄງ​ການ​. ຄ່າເລີ່ມຕົ້ນແມ່ນ -mno-thumb-interwork, ນັບຕັ້ງແຕ່ເລັກນ້ອຍ
ລະ​ຫັດ​ຂະ​ຫນາດ​ໃຫຍ່​ແມ່ນ​ໄດ້​ຖືກ​ສ້າງ​ຂຶ້ນ​ໃນ​ເວ​ລາ​ທີ່​ -mthumb-interwork ຖືກກໍານົດ. ໃນການຕັ້ງຄ່າ AAPCS
ທາງເລືອກນີ້ແມ່ນບໍ່ມີຄວາມຫມາຍ.

-mno-sched-prolog
ປ້ອງກັນບໍ່ໃຫ້ການຈັດລໍາດັບໃຫມ່ຂອງຄໍາແນະນໍາໃນ prologue ຫນ້າທີ່, ຫຼືການລວມຕົວຂອງ
ຄໍາແນະນໍາເຫຼົ່ານັ້ນກັບຄໍາແນະນໍາຢູ່ໃນຮ່າງກາຍຂອງຫນ້າທີ່. ນີ້ຫມາຍຄວາມວ່າທັງຫມົດ
ຫນ້າທີ່ຈະເລີ່ມຕົ້ນດ້ວຍຊຸດຄໍາແນະນໍາທີ່ສາມາດຮັບຮູ້ໄດ້ (ຫຼືໃນຄວາມເປັນຈິງຫນຶ່ງຂອງ a
ເລືອກຈາກຊຸດນ້ອຍຂອງ prologues ຫນ້າທີ່ທີ່ແຕກຕ່າງກັນ), ແລະຂໍ້ມູນນີ້ສາມາດເປັນ
ໃຊ້ເພື່ອຊອກຫາຈຸດເລີ່ມຕົ້ນຖ້າຟັງຊັນພາຍໃນລະຫັດທີ່ສາມາດປະຕິບັດໄດ້. ຄ່າເລີ່ມຕົ້ນ
is -msched-prolog.

-mfloat-abi=ຊື່
ລະບຸວ່າຈະໃຊ້ ABI ຈຸດໃດ. ຄ່າທີ່ອະນຸຍາດແມ່ນ: ອ່ອນໆ, softfp ແລະ
ຍາກ.

ການລະບຸ ອ່ອນໆ ເຮັດໃຫ້ GCC ຜະລິດຜົນຜະລິດທີ່ມີຫ້ອງສະຫມຸດໂທຫາສໍາລັບການເລື່ອນ
ການ​ດໍາ​ເນີນ​ງານ​ຈຸດ​. softfp ອະ​ນຸ​ຍາດ​ໃຫ້​ການ​ຜະ​ລິດ​ຂອງ​ລະ​ຫັດ​ການ​ນໍາ​ໃຊ້​ຮາດ​ແວ Floating-point​
ຄໍາແນະນໍາ, ແຕ່ຍັງຄົງໃຊ້ສົນທິສັນຍາການໂທແບບເລື່ອນໄດ້. ຍາກ ອະນຸຍາດໃຫ້
ການຜະລິດຄໍາແນະນໍາຈຸດລອຍແລະນໍາໃຊ້ສົນທິສັນຍາການໂທຫາສະເພາະ FPU.

ຄ່າເລີ່ມຕົ້ນແມ່ນຂຶ້ນກັບການຕັ້ງຄ່າເປົ້າໝາຍສະເພາະ. ໃຫ້ສັງເກດວ່າແຂງ-ເລື່ອນໄດ້
ແລະ Soft-float ABIs ບໍ່ເຂົ້າກັນໄດ້ກັບການເຊື່ອມຕໍ່; ທ່ານຕ້ອງລວບລວມໂຄງການທັງຫມົດຂອງທ່ານກັບ
ABI ດຽວກັນ, ແລະເຊື່ອມຕໍ່ກັບຊຸດຫ້ອງສະຫມຸດທີ່ເຂົ້າກັນໄດ້.

-mlittle-endian
ສ້າງລະຫັດສໍາລັບໂປເຊດເຊີທີ່ເຮັດວຽກຢູ່ໃນໂຫມດ little-endian. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນຂອງ
ການ​ຕັ້ງ​ຄ່າ​ມາດ​ຕະ​ຖານ​ທັງ​ຫມົດ​.

-mbig-endian
ສ້າງລະຫັດສໍາລັບໂປເຊດເຊີທີ່ເຮັດວຽກຢູ່ໃນໂຫມດ big-endian; ຄ່າເລີ່ມຕົ້ນແມ່ນການລວບລວມ
ລະຫັດສໍາລັບໂປເຊດເຊີພຽງເລັກນ້ອຍ endian.

-mwords-little-endian
ຕົວເລືອກນີ້ໃຊ້ພຽງແຕ່ເມື່ອສ້າງລະຫັດສໍາລັບໂປເຊດເຊີໃຫຍ່ endian. ສ້າງ
ລະຫັດສໍາລັບຄໍາສັ່ງຄໍາພຽງເລັກນ້ອຍ endian ແຕ່ຄໍາສັ່ງ byte ໃຫຍ່ endian. ນັ້ນແມ່ນ, ໄບຕ໌
ຄໍາສັ່ງຂອງແບບຟອມ 32107654. ຫມາຍເຫດ: ທາງເລືອກນີ້ຄວນຈະຖືກນໍາໃຊ້ພຽງແຕ່ຖ້າຫາກວ່າທ່ານຕ້ອງການ
ຄວາມເຂົ້າກັນໄດ້ກັບລະຫັດສໍາລັບໂປເຊດເຊີ ARM ໃຫຍ່-endian ທີ່ສ້າງຂຶ້ນໂດຍຮຸ່ນຂອງ
compiler ກ່ອນ 2.8. ຕອນນີ້ຕົວເລືອກນີ້ຖືກຍົກເລີກແລ້ວ.

- ມີນາ=ຊື່
ອັນນີ້ລະບຸຊື່ຂອງສະຖາປັດຕະຍະກຳ ARM ເປົ້າໝາຍ. GCC ໃຊ້ຊື່ນີ້ເພື່ອ
ກໍານົດປະເພດຂອງຄໍາແນະນໍາທີ່ມັນສາມາດປ່ອຍອອກມາເມື່ອສ້າງລະຫັດການປະກອບ. ນີ້
ທາງ​ເລືອກ​ສາ​ມາດ​ຖືກ​ນໍາ​ໃຊ້​ຮ່ວມ​ກັບ​ຫຼື​ແທນ​ທີ່​ຈະ​ເປັນ​ -mcpu= ທາງເລືອກ. ອະນຸຍາດ
ຊື່ແມ່ນ: armv2, armv2a, armv3, armv3m, armv4, armv4t, armv5, armv5t, armv5e,
armv5te, armv6, armv6j, armv6t2, armv6z, armv6zk, armv6-ມ, armv7, armv7-a, armv7-r,
armv7-ມ, armv7e-m, iwmmxt, iwmmxt2, ep9312.

-march=native ເຮັດໃຫ້ compiler ກວດພົບອັດຕະໂນມັດສະຖາປັດຕະຍະກໍາຂອງການກໍ່ສ້າງ
ຄອມ​ພິວ​ເຕີ. ໃນປັດຈຸບັນ, ຄຸນນະສົມບັດນີ້ແມ່ນສະຫນັບສະຫນູນພຽງແຕ່ຢູ່ໃນ Linux, ແລະບໍ່ແມ່ນທັງຫມົດ
ສະຖາປັດຕະຍະກໍາໄດ້ຖືກຮັບຮູ້. ຖ້າ​ຫາກ​ວ່າ​ການ​ກວດ​ສອບ​ອັດ​ຕະ​ໂນ​ມັດ​ບໍ່​ສໍາ​ເລັດ​ທາງ​ເລືອກ​ທີ່​ບໍ່​ມີ​
ຜົນກະທົບ.

-mtune=ຊື່
ຕົວເລືອກນີ້ລະບຸຊື່ຂອງໂປເຊດເຊີ ARM ເປົ້າໝາຍທີ່ GCC ຄວນປັບ
ການປະຕິບັດຂອງລະຫັດ. ສໍາລັບບາງການປະຕິບັດ ARM ການປະຕິບັດທີ່ດີກວ່າສາມາດເປັນ
ໄດ້​ຮັບ​ໂດຍ​ການ​ນໍາ​ໃຊ້​ທາງ​ເລືອກ​ນີ້​. ຊື່ທີ່ອະນຸຍາດແມ່ນ: arm2, arm250, arm3, arm6,
arm60, arm600, arm610, arm620, arm7, ແຂນ7ມ, ແຂນ7ງ, ແຂນ 7dm, arm7di, ແຂນ 7dmi, arm70,
arm700, ແຂນ700i, arm710, ແຂນ 710c, arm7100, arm720, arm7500, ແຂນ7500fe, arm7tdmi,
arm7tdmi-s, ແຂນ 710t, ແຂນ 720t, ແຂນ 740t, ເຂັ້ມແຂງ, ປືນ​ໃຫຍ່ 110, ປືນ​ໃຫຍ່ 1100,
ປືນ​ໃຫຍ່ 1110, arm8, arm810, arm9, ແຂນ9e, arm920, ແຂນ 920t, ແຂນ 922t, arm946e-s,
arm966e-s, arm968e-s, arm926ej-s, ແຂນ 940t, arm9tdmi, arm10tdmi, ແຂນ 1020t, arm1026ej-s,
ແຂນ10e, ແຂນ1020e, ແຂນ1022e, arm1136j-s, arm1136jf-s, mpcore, mpcorenovfp, arm1156t2-s,
arm1156t2f-s, arm1176jz-s, arm1176jzf-s, cortex-a5, cortex-a7, cortex-a8, cortex-a9,
cortex-a15, cortex-r4, cortex-r4f, cortex-r5, cortex-m4, cortex-m3, cortex-m1,
cortex-m0, xscale, iwmmxt, iwmmxt2, ep9312, fa526, fa626, fa606te, fa626te, fmp626,
fa726te.

-mtune=ທົ່ວໄປ-ໂຄ້ງ ກໍານົດວ່າ GCC ຄວນປັບປະສິດທິພາບສໍາລັບການຜະສົມຜະສານ
ໂປເຊດເຊີພາຍໃນສະຖາປັດຕະຍະກໍາ ໂຄ້ງ. ຈຸດປະສົງແມ່ນເພື່ອສ້າງລະຫັດທີ່ເຮັດວຽກໄດ້ດີໃນ
ໂປເຊດເຊີທີ່ນິຍົມທີ່ສຸດໃນປະຈຸບັນ, ການດຸ່ນດ່ຽງລະຫວ່າງການເພີ່ມປະສິດທິພາບທີ່ມີປະໂຫຍດບາງຢ່າງ
CPUs ໃນລະດັບ, ແລະຫຼີກເວັ້ນການ pitfalls ປະສິດທິພາບຂອງ CPUs ອື່ນໆ. ຜົນກະທົບຂອງ
ຕົວເລືອກນີ້ອາດຈະມີການປ່ຽນແປງໃນຮຸ່ນ GCC ໃນອະນາຄົດຍ້ອນວ່າຮຸ່ນ CPU ມາແລະໄປ.

-mtune=native ເຮັດໃຫ້ compiler ກວດພົບ CPU ຂອງຄອມພິວເຕີສ້າງໂດຍອັດຕະໂນມັດ. ທີ່
ໃນປັດຈຸບັນ, ຄຸນນະສົມບັດນີ້ແມ່ນສະຫນັບສະຫນູນພຽງແຕ່ຢູ່ໃນ Linux, ແລະບໍ່ແມ່ນສະຖາປັດຕະຍະກໍາທັງຫມົດ
ຮັບຮູ້. ຖ້າການກວດສອບອັດຕະໂນມັດບໍ່ປະສົບຜົນສໍາເລັດ, ທາງເລືອກທີ່ບໍ່ມີຜົນ.

-mcpu=ຊື່
ນີ້ລະບຸຊື່ຂອງໂຮງງານຜະລິດ ARM ເປົ້າຫມາຍ. GCC ໃຊ້ຊື່ນີ້ເພື່ອມາຈາກ
ຊື່ຂອງສະຖາປັດຕະຍະກຳ ARM ເປົ້າໝາຍ (ຄືກັບທີ່ລະບຸໂດຍ - ມີນາ) ແລະໂຮງງານຜະລິດ ARM
ປະ​ເພດ​ສໍາ​ລັບ​ການ​ປັບ​ສໍາ​ລັບ​ການ​ປະ​ຕິ​ບັດ (ເປັນ​ຖ້າ​ຫາກ​ວ່າ​ລະ​ບຸ​ໄວ້​ໂດຍ​ -mtune). ບ່ອນທີ່ທາງເລືອກນີ້
ແມ່ນໃຊ້ຮ່ວມກັບ - ມີນາ or -mtune, ທາງ​ເລືອກ​ເຫຼົ່າ​ນັ້ນ​ມີ​ຄວາມ​ສໍາ​ຄັນ​ໃນ​ໄລ​ຍະ​
ສ່ວນທີ່ເຫມາະສົມຂອງທາງເລືອກນີ້.

ຊື່ທີ່ອະນຸຍາດສໍາລັບທາງເລືອກນີ້ແມ່ນຄືກັນກັບທີ່ສໍາລັບ -mtune.

-mcpu=ທົ່ວໄປ-ໂຄ້ງ ຍັງອະນຸຍາດ, ແລະເທົ່າກັບ - ມີນາ=ໂຄ້ງ
-mtune=ທົ່ວໄປ-ໂຄ້ງ, ທະເລສາບ -mtune ສໍາລັບຂໍ້ມູນເພີ່ມເຕີມ.

-mcpu=ເດີມ ເຮັດໃຫ້ compiler ກວດພົບ CPU ຂອງຄອມພິວເຕີສ້າງໂດຍອັດຕະໂນມັດ. ທີ່
ໃນປັດຈຸບັນ, ຄຸນນະສົມບັດນີ້ແມ່ນສະຫນັບສະຫນູນພຽງແຕ່ຢູ່ໃນ Linux, ແລະບໍ່ແມ່ນສະຖາປັດຕະຍະກໍາທັງຫມົດ
ຮັບຮູ້. ຖ້າການກວດສອບອັດຕະໂນມັດບໍ່ປະສົບຜົນສໍາເລັດ, ທາງເລືອກທີ່ບໍ່ມີຜົນ.

-mfpu=ຊື່
-mfpe=ຈໍານວນ
-mfp=ຈໍານວນ
ນີ້ລະບຸວ່າຮາດແວຈຸດລອຍ (ຫຼືການຈໍາລອງຮາດແວ) ມີຢູ່ໃນ
ເປົ້າ​ຫມາຍ. ຊື່ທີ່ອະນຸຍາດແມ່ນ: fpa, fpe2, fpe3, maverick, vfp, vfpv3, vfpv3-fp16,
vfpv3-d16, vfpv3-d16-fp16, vfpv3xd, vfpv3xd-fp16, neon, ນີອອນ-fp16, vfpv4, vfpv4-d16,
fpv4-sp-d16 ແລະ ນີອອນ-vfpv4. -mfp ແລະ -mfpe ແມ່ນຄໍາສັບຄ້າຍຄືສໍາລັບ -mfpu=fpeຈໍານວນ, for
ຄວາມເຂົ້າກັນໄດ້ກັບ GCC ລຸ້ນເກົ່າ.

If -msoft-float ແມ່ນລະບຸໄວ້ນີ້ກໍານົດຮູບແບບຂອງຄ່າຈຸດລອຍ.

ຖ້າຮາດແວຈຸດລອຍທີ່ເລືອກປະກອບມີສ່ວນຂະຫຍາຍ NEON (ຕົວຢ່າງ -mfpu=neon),
ຈື່ໄວ້ວ່າການດຳເນີນການຈຸດລອຍຈະບໍ່ຖືກໃຊ້ໂດຍໃບຜ່ານການກວດອັດຕະໂນມັດຂອງ GCC
ເວັ້ນເສຍແຕ່ວ່າ -funsafe-math-optimizations ຍັງ​ໄດ້​ລະ​ບຸ​ໄວ້​. ນີ້ແມ່ນຍ້ອນວ່າຮາດແວ NEON
ບໍ່ໄດ້ປະຕິບັດຢ່າງເຕັມສ່ວນມາດຕະຖານ IEEE 754 ສໍາລັບເລກເລກຄະນິດທີ່ລອຍຕົວ (ໃນ
ຄ່າຜິດປົກກະຕິໂດຍສະເພາະຖືກປະຕິບັດເປັນສູນ), ດັ່ງນັ້ນການນໍາໃຊ້ຄໍາແນະນໍາຂອງ NEON ອາດຈະ
ນໍາໄປສູ່ການສູນເສຍຄວາມຊັດເຈນ.

-mfp16-format=ຊື່
ລະບຸຮູບແບບຂອງ "__fp16" ປະເພດຈຸດເລື່ອນເຄິ່ງຄວາມຊັດເຈນ. ອະນຸຍາດ
ຊື່ແມ່ນ none, ieee, ແລະ ທາງ​ເລືອກ; ຄ່າເລີ່ມຕົ້ນແມ່ນ none, ໃນກໍລະນີນີ້ "__fp16"
ປະເພດບໍ່ໄດ້ກໍານົດ.

-mstructure-size-boundary=n
ຂະໜາດຂອງໂຄງສ້າງ ແລະ ສະຫະພັນທັງໝົດຈະຖືກຮວບຮວມເປັນຈຳນວນຫຼາຍ
ຂອງ bits ກໍານົດໂດຍທາງເລືອກນີ້. ຄ່າທີ່ອະນຸຍາດແມ່ນ 8, 32 ແລະ 64. ຄ່າເລີ່ມຕົ້ນ
ແຕກຕ່າງກັນສໍາລັບຕ່ອງໂສ້ເຄື່ອງມືທີ່ແຕກຕ່າງກັນ. ສໍາ​ລັບ COFF ເປົ້າ​ຫມາຍ​ເຄື່ອງ​ມື​ຂອງ​ຄ່າ​ເລີ່ມ​ຕົ້ນ​ແມ່ນ​
8. ຄ່າຂອງ 64 ແມ່ນອະນຸຍາດໃຫ້ພຽງແຕ່ຖ້າ ABI ພື້ນຖານສະຫນັບສະຫນູນມັນ.

ການລະບຸຈໍານວນຂະຫນາດໃຫຍ່ສາມາດຜະລິດລະຫັດໄວ, ປະສິດທິພາບຫຼາຍ, ແຕ່ຍັງສາມາດເຮັດໄດ້
ເພີ່ມ​ຂະ​ຫນາດ​ຂອງ​ໂຄງ​ການ​. ຄ່າທີ່ແຕກຕ່າງກັນແມ່ນອາດຈະບໍ່ສາມາດເຂົ້າກັນໄດ້.
ລະຫັດທີ່ລວບລວມດ້ວຍຄ່າຫນຶ່ງບໍ່ສາມາດຄາດຫວັງວ່າຈະເຮັດວຽກກັບລະຫັດຫຼືຫ້ອງສະຫມຸດ
ລວບລວມດ້ວຍມູນຄ່າອື່ນ, ຖ້າພວກເຂົາແລກປ່ຽນຂໍ້ມູນໂດຍໃຊ້ໂຄງສ້າງຫຼືສະຫະພັນ.

-mabort-on-norturn
ສ້າງການໂທໄປຫາຟັງຊັນ "ຍົກເລີກ" ໃນຕອນທ້າຍຂອງຟັງຊັນ "noreturn". ມັນ​ຈະ
ຈະຖືກປະຕິບັດຖ້າຟັງຊັນພະຍາຍາມກັບຄືນ.

-mlong-ໂທ
-mno-long-calls
ບອກ compiler ເພື່ອປະຕິບັດການເອີ້ນຟັງຊັນໂດຍການໂຫຼດທີ່ຢູ່ຂອງທໍາອິດ
ປະຕິບັດຫນ້າທີ່ເຂົ້າໄປໃນທະບຽນແລະຫຼັງຈາກນັ້ນປະຕິບັດການໂທຫາ subroutine ໃນທະບຽນນີ້. ນີ້
ສະວິດແມ່ນຈໍາເປັນຖ້າຫາກວ່າຫນ້າທີ່ເປົ້າຫມາຍຈະນອນຢູ່ນອກທີ່ຢູ່ 64 megabyte
ຂອບເຂດຂອງສະບັບທີ່ອີງໃສ່ການຊົດເຊີຍຂອງຄໍາແນະນໍາການໂທຫາປົກກະຕິຍ່ອຍ.

ເຖິງແມ່ນວ່າສະວິດນີ້ຖືກເປີດໃຊ້, ບໍ່ແມ່ນການເອີ້ນຟັງຊັນທັງໝົດຈະປ່ຽນເປັນການໂທຍາວ.
heuristic ແມ່ນວ່າຫນ້າທີ່ static, ຫນ້າທີ່ທີ່ມີ ໂທສັ້ນ ຄຸນລັກສະນະ,
ຫນ້າທີ່ຢູ່ໃນຂອບເຂດຂອງ a #pragma no_long_calls ຄໍາສັ່ງແລະຫນ້າທີ່
ຄໍານິຍາມຂອງພວກມັນໄດ້ຖືກລວບລວມແລ້ວພາຍໃນຫນ່ວຍງານລວບລວມຂໍ້ມູນໃນປະຈຸບັນ, ຈະ
ບໍ່ໄດ້ປ່ຽນເປັນການໂທຍາວ. ຂໍ້ຍົກເວັ້ນຂອງກົດລະບຽບນີ້ແມ່ນຫນ້າທີ່ອ່ອນແອ
ຄໍານິຍາມ, ປະຕິບັດຫນ້າກັບ ໂທຍາວ ຄຸນ​ລັກ​ສະ​ນະ​ຫຼື​ ສ່ວນ ຄຸນ​ລັກ​ສະ​ນະ​, ແລະ​
ຫນ້າທີ່ຢູ່ໃນຂອບເຂດຂອງ a #pragma long_calls ຄໍາສັ່ງ, ຈະເປັນສະເຫມີ
ກາຍເປັນການໂທຍາວ.

ຄຸນສົມບັດນີ້ບໍ່ໄດ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ. ການລະບຸ -mno-long-calls ຈະຟື້ນຟູ
ພຶດຕິກໍາເລີ່ມຕົ້ນ, ເຊັ່ນດຽວກັນກັບການວາງການໂທຟັງຊັນພາຍໃນຂອບເຂດຂອງ a #pragma
long_calls_off ຄໍາສັ່ງ. ໃຫ້ສັງເກດວ່າປຸ່ມເຫຼົ່ານີ້ບໍ່ມີຜົນຕໍ່ວິທີການລວບລວມຂໍ້ມູນ
ສ້າງລະຫັດເພື່ອຈັດການການໂທຟັງຊັນຜ່ານຕົວຊີ້ຟັງຊັນ.

-msingle-pic-base
ປະຕິບັດການລົງທະບຽນທີ່ໃຊ້ສໍາລັບທີ່ຢູ່ PIC ເປັນການອ່ານເທົ່ານັ້ນ, ແທນທີ່ຈະໂຫລດມັນຢູ່ໃນ
prologue ສໍາລັບແຕ່ລະຫນ້າທີ່. ລະບົບເວລາແລ່ນແມ່ນຮັບຜິດຊອບສໍາລັບການເລີ່ມຕົ້ນນີ້
ລົງທະບຽນດ້ວຍມູນຄ່າທີ່ເຫມາະສົມກ່ອນທີ່ຈະເລີ່ມຕົ້ນການປະຕິບັດ.

-mpic ມັກສະມາຊິກ =reg
ລະບຸການລົງທະບຽນທີ່ຈະໃຊ້ສໍາລັບທີ່ຢູ່ PIC. ຄ່າເລີ່ມຕົ້ນແມ່ນ R10 ເວັ້ນເສຍແຕ່ stack-
ການກວດສອບຖືກເປີດໃຊ້, ເມື່ອ R9 ຖືກໃຊ້.

-mcirrus-fix-invalid-insns
ໃສ່ NOPs ເຂົ້າໄປໃນກະແສຄໍາແນະນໍາເພື່ອເຮັດວຽກກັບບັນຫາ
ການປະສົມຄໍາແນະນໍາ Maverick ບໍ່ຖືກຕ້ອງ. ທາງເລືອກນີ້ແມ່ນຖືກຕ້ອງພຽງແຕ່ຖ້າຫາກວ່າ
-mcpu=ep9312 ທາງເລືອກໄດ້ຖືກໃຊ້ເພື່ອເປີດໃຊ້ການສ້າງຄໍາແນະນໍາສໍາລັບ Cirrus
Maverick ໂຮງງານຜະລິດຮ່ວມຈຸດລອຍ. ຕົວເລືອກນີ້ບໍ່ໄດ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ, ນັບຕັ້ງແຕ່
ບັນຫາແມ່ນມີພຽງແຕ່ຢູ່ໃນການປະຕິບັດ Maverick ເກົ່າ. ຄ່າເລີ່ມຕົ້ນສາມາດ re-
ເປີດໃຊ້ໂດຍການນໍາໃຊ້ -mno-cirrus-fix-invalid-insns ສະຫຼັບ.

-mpoke-function-name
ຂຽນຊື່ຂອງແຕ່ລະຫນ້າທີ່ໃສ່ໃນສ່ວນຂໍ້ຄວາມ, ໂດຍກົງກ່ອນຫນ້າ
ບົດບັນຍາຍ. ລະຫັດທີ່ສ້າງຂຶ້ນແມ່ນຄ້າຍຄືກັນກັບນີ້:

t0
.ascii "arm_poke_function_name", 0
.ຈັດຮຽງ
t1
.word 0xff000000 + (t1 - t0)
arm_poke_function_name
mov ip, sp
stmfd sp!, {fp, ip, lr, pc}
ຍ່ອຍ fp, ip, #4

ເມື່ອປະຕິບັດ stack backtrace, ລະຫັດສາມາດກວດສອບມູນຄ່າຂອງ "pc" ທີ່ເກັບໄວ້ໃນ "fp +
0. ຖ້າ​ຫາກ​ວ່າ​ການ​ທໍາ​ງານ​ຂອງ​ການ​ຕິດ​ຕາມ​ຫຼັງ​ຈາກ​ນັ້ນ​ເບິ່ງ​ທີ່​ຕັ້ງ "pc - 12​" ແລະ​ເທິງ 8 bits​.
ຕັ້ງ, ຫຼັງຈາກນັ້ນພວກເຮົາຮູ້ວ່າມີຊື່ຟັງຊັນທີ່ຖືກຝັງໄວ້ກ່ອນຫນ້ານີ້
ສະຖານທີ່ແລະມີຄວາມຍາວ "((pc[-3]) & 0xff000000)".

- ໂປ້ມື
- ມາມ
ເລືອກລະຫວ່າງການສ້າງລະຫັດທີ່ປະຕິບັດຢູ່ໃນລັດ ARM ແລະ Thumb. ຄ່າເລີ່ມຕົ້ນສໍາລັບ
ການຕັ້ງຄ່າສ່ວນໃຫຍ່ແມ່ນເພື່ອສ້າງລະຫັດທີ່ປະຕິບັດຢູ່ໃນສະຖານະ ARM, ແຕ່ຄ່າເລີ່ມຕົ້ນ
ສາມາດປ່ຽນແປງໄດ້ໂດຍການຕັ້ງຄ່າ GCC ກັບ --with-mode=ລັດ ຕັ້ງຄ່າທາງເລືອກ.

-mtpcs-frame
ສ້າງກອບ stack ທີ່ສອດຄ່ອງກັບມາດຕະຖານການໂທຂອງ Thumb Procedure ສໍາລັບ
ຫນ້າທີ່ບໍ່ແມ່ນໃບທັງຫມົດ. (ການທໍາງານຂອງໃບແມ່ນຫນຶ່ງທີ່ບໍ່ໄດ້ໂທຫາອັນອື່ນ
functions.) ຄ່າເລີ່ມຕົ້ນແມ່ນ -mno-tpcs-frame.

-mtpcs-ໃບ-ກອບ
ສ້າງກອບ stack ທີ່ສອດຄ່ອງກັບມາດຕະຖານການໂທຂອງ Thumb Procedure ສໍາລັບ
ຫນ້າທີ່ຂອງໃບທັງຫມົດ. (ການທໍາງານຂອງໃບແມ່ນຫນຶ່ງທີ່ບໍ່ໄດ້ໂທຫາຫນ້າທີ່ອື່ນໆ.)
ຄ່າເລີ່ມຕົ້ນແມ່ນ -mno-apcs-ໃບ-ກອບ.

-mcallee-super-interworking
ໃຫ້ຟັງຊັນທີ່ເບິ່ງເຫັນພາຍນອກທັງໝົດໃນໄຟລ໌ທີ່ຖືກລວບລວມຄໍາແນະນໍາ ARM
ຕັ້ງ header ທີ່ສະຫຼັບໄປໃຊ້ Thumb mode ກ່ອນທີ່ຈະດໍາເນີນການສ່ວນທີ່ເຫຼືອຂອງຟັງຊັນ.
ນີ້ອະນຸຍາດໃຫ້ຟັງຊັນເຫຼົ່ານີ້ຖືກເອີ້ນຈາກລະຫັດທີ່ບໍ່ເຮັດວຽກຮ່ວມກັນ. ທາງເລືອກນີ້ແມ່ນ
ບໍ່ຖືກຕ້ອງໃນການຕັ້ງຄ່າ AAPCS ເພາະວ່າການເຮັດວຽກຮ່ວມກັນຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-mcaller-super-interworking
ອະນຸຍາດໃຫ້ການໂທຜ່ານຕົວຊີ້ຟັງຊັນ (ລວມທັງຟັງຊັນສະເໝືອນ) ດໍາເນີນການຢ່າງຖືກຕ້ອງ
ໂດຍບໍ່ຄໍານຶງເຖິງວ່າລະຫັດເປົ້າຫມາຍໄດ້ຖືກລວບລວມສໍາລັບການເຮັດວຽກຮ່ວມກັນຫຼືບໍ່.
ມີຄ່າໃຊ້ຈ່າຍເລັກນ້ອຍໃນການປະຕິບັດຕົວຊີ້ຟັງຊັນຖ້າຫາກວ່າທາງເລືອກນີ້
ຖືກເປີດໃຊ້. ຕົວເລືອກນີ້ບໍ່ຖືກຕ້ອງໃນການຕັ້ງຄ່າ AAPCS ເພາະວ່າມີການເຮັດວຽກຮ່ວມກັນ
ເປີດໃຊ້ຕາມຄ່າເລີ່ມຕົ້ນ.

-mtp=ຊື່
ລະບຸຮູບແບບການເຂົ້າເຖິງສໍາລັບຕົວຊີ້ບ່ອນເກັບຂໍ້ມູນຂອງກະທູ້. ຮູບແບບທີ່ຖືກຕ້ອງແມ່ນ
ອ່ອນໆ, ເຊິ່ງສ້າງການໂທໄປຫາ "__aeabi_read_tp", cp15, ເຊິ່ງດຶງເອົາກະທູ້
ຕົວຊີ້ຈາກ "cp15" ໂດຍກົງ (ສະຫນັບສະຫນູນໃນສະຖາປັດຕະຍະກໍາ arm6k), ແລະ ອັດຕະໂນມັດ, ທີ່
ໃຊ້ວິທີການທີ່ດີທີ່ສຸດສໍາລັບໂປເຊດເຊີທີ່ເລືອກ. ການຕັ້ງຄ່າເລີ່ມຕົ້ນແມ່ນ
ອັດຕະໂນມັດ.

-mtls-ພາສາ =ພາສາ
ລະບຸພາສາເພື່ອໃຊ້ໃນການເຂົ້າເຖິງບ່ອນເກັບຂໍ້ມູນທ້ອງຖິ່ນ. ສອງພາສາແມ່ນ
ສະ​ຫນັບ​ສະ​ຫນູນ --- gnu ແລະ gnu2. ໄດ້ gnu ພາສາເລືອກໂຄງການ GNU ຕົ້ນສະບັບສໍາລັບ
ສະຫນັບສະຫນູນແບບເຄື່ອນໄຫວ TLS ທ້ອງຖິ່ນແລະທົ່ວໂລກ. ໄດ້ gnu2 ພາສາເລືອກ GNU
ໂຄງ​ການ​ອະ​ທິ​ບາຍ​, ທີ່​ສະ​ຫນອງ​ການ​ປະ​ຕິ​ບັດ​ທີ່​ດີກ​ວ່າ​ສໍາ​ລັບ​ຫ້ອງ​ສະ​ຫມຸດ​ແບ່ງ​ປັນ​. GNU
ໂຄງ​ການ​ອະ​ທິ​ບາຍ​ແມ່ນ​ເຂົ້າ​ກັນ​ໄດ້​ກັບ​ໂຄງ​ການ​ຕົ້ນ​ສະ​ບັບ​, ແຕ່​ບໍ່​ຕ້ອງ​ການ​ໃຫມ່​
assembler, linker ແລະສະຫນັບສະຫນູນຫ້ອງສະຫມຸດ. ຮູບແບບ TLS exec ເບື້ອງຕົ້ນແລະທ້ອງຖິ່ນແມ່ນ
ບໍ່ໄດ້ຮັບຜົນກະທົບຈາກທາງເລືອກນີ້ແລະສະເຫມີໃຊ້ໂຄງການຕົ້ນສະບັບ.

-mword ການ​ຍົກ​ຍ້າຍ​
ສ້າງພຽງແຕ່ການຍົກຍ້າຍຢ່າງແທ້ຈິງກ່ຽວກັບຄ່າຂະຫນາດຄໍາ (ເຊັ່ນ: R_ARM_ABS32). ນີ້​ແມ່ນ
ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນໃນເປົ້າໝາຍ (uClinux, SymbianOS) ບ່ອນທີ່ຕົວໂຫຼດເວລາແລ່ນກຳນົດ.
ຂໍ້ຈໍາກັດນີ້, ແລະເວລາໃດ -fpic or -fPIC ຖືກກໍານົດ.

-mfix-cortex-m3-ldrd
ບາງ Cortex-M3 cores ສາມາດເຮັດໃຫ້ເກີດຄວາມເສຍຫາຍຂໍ້ມູນໃນເວລາທີ່ "ldrd" ຄໍາແນະນໍາກັບ
ການທັບຊ້ອນຈຸດຫມາຍປາຍທາງແລະການລົງທະບຽນພື້ນຖານຖືກນໍາໃຊ້. ທາງເລືອກນີ້ຫຼີກເວັ້ນການສ້າງ
ຄໍາແນະນໍາເຫຼົ່ານີ້. ຕົວເລືອກນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນເມື່ອ -mcpu=cortex-m3 is
ລະບຸ.

-munaligned-ເຂົ້າ​ເຖິງ​
-mno-unaligned-access
ເປີດໃຊ້ (ຫຼືປິດການໃຊ້ງານ) ການອ່ານ ແລະການຂຽນຄ່າ 16- ແລະ 32-ບິດຈາກທີ່ຢູ່
ນັ້ນບໍ່ແມ່ນການຈັດຮຽງ 16- ຫຼື 32-ບິດ. ໂດຍຄ່າເລີ່ມຕົ້ນການເຂົ້າເຖິງ unaligned ແມ່ນຖືກປິດໃຊ້ງານສໍາລັບທຸກຄົນ
pre-ARMv6 ແລະສະຖາປັດຕະຍະກໍາ ARMv6-M ທັງໝົດ, ແລະເປີດໃຊ້ງານສໍາລັບສະຖາປັດຕະຍະກໍາອື່ນໆທັງໝົດ. ຖ້າ
ການເຂົ້າເຖິງ unaligned ບໍ່ໄດ້ຖືກເປີດໃຊ້ຫຼັງຈາກນັ້ນຄໍາສັບຕ່າງໆໃນໂຄງສ້າງຂໍ້ມູນທີ່ບັນຈຸຈະຖືກເຂົ້າເຖິງ
byte ໃນເວລາ.

ຄຸນລັກສະນະ ARM "Tag_CPU_unaligned_access" ຈະຖືກຕັ້ງຢູ່ໃນໄຟລ໌ວັດຖຸທີ່ສ້າງຂຶ້ນ.
ເປັນຄວາມຈິງ ຫຼືຜິດ, ຂຶ້ນກັບການຕັ້ງຄ່າຂອງຕົວເລືອກນີ້. ຖ້າບໍ່ສອດຄ່ອງ
ການເຂົ້າເຖິງຖືກເປີດໃຊ້ງານແລ້ວສັນຍາລັກຂອງຕົວປະມວນຜົນກ່ອນ "__ARM_FEATURE_UNALIGNED" ຈະເປັນຄືກັນ.
ກໍານົດ.

-mneon-for-64bits
ເປີດໃຊ້ການໃຊ້ Neon ເພື່ອຈັດການການດຳເນີນການ 64-bits scalar. ອັນນີ້ຖືກປິດໃຊ້ງານໂດຍຄ່າເລີ່ມຕົ້ນ
ເນື່ອງຈາກຄ່າໃຊ້ຈ່າຍຂອງການເຄື່ອນຍ້າຍຂໍ້ມູນຈາກທະບຽນຫຼັກໄປຫາ Neon ແມ່ນສູງ.

APR ທາງເລືອກໃນການ

-mmcu=mcu
ລະບຸສະຖາປັດຕະຍະກໍາຊຸດຄໍາແນະນໍາ Atmel AVR (ISA) ຫຼືປະເພດ MCU.

ຄ່າເລີ່ມຕົ້ນຂອງຕົວເລືອກນີ້ແມ່ນ@tie{}"avr2".

GCC ຮອງຮັບອຸປະກອນ AVR ແລະ ISA ຕໍ່ໄປນີ້:

"avr2"
ອຸປະກອນ "ຄລາສສິກ" ທີ່ມີເຖິງ 8@tie{}KiB ຂອງຫນ່ວຍຄວາມຈໍາຂອງໂຄງການ. mcu@tie{}= "attiny22",
"attiny26", "at90c8534", "at90s2313", "at90s2323", "at90s2333", "at90s2343",
"at90s4414", "at90s4433", "at90s4434", "at90s8515", "at90s8535".

"avr25"
ອຸປະກອນ "ຄລາສສິກ" ທີ່ມີເຖິງ 8@tie{}KiB ຂອງຫນ່ວຍຄວາມຈໍາຂອງໂປລແກລມແລະດ້ວຍ "MOVW"
ຄຳ ແນະ ນຳ. mcu@tie{}="ata6289", "attiny13", "attiny13a", "attiny2313",
"attiny2313a", "attiny24", "attiny24a", "attiny25", "attiny261", "attiny261a",
"attiny43u", "attiny4313", "attiny44", "attiny44a", "attiny45", "attiny461",
"attiny461a", "attiny48", "attiny84", "attiny84a", "attiny85", "attiny861",
"attiny861a", "attiny87", "attiny88", "at86rf401".

"avr3"
ອຸປະກອນ "Classic" ທີ່ມີ 16@tie{}KiB ສູງສຸດ 64@tie{}KiB ຂອງຫນ່ວຍຄວາມຈໍາຂອງໂຄງການ.
mcu@tie{}= "at43usb355", "at76c711".

"avr31"
ອຸປະກອນ "ຄລາສສິກ" ທີ່ມີ 128@tie{}KiB ຂອງຫນ່ວຍຄວາມຈໍາຂອງໂຄງການ. mcu@tie{}= "atmega103",
"at43usb320".

"avr35"
ອຸປະກອນ "Classic" ທີ່ມີ 16@tie{}KiB ສູງສຸດ 64@tie{}KiB ຂອງຫນ່ວຍຄວາມຈໍາໂຄງການແລະກັບ
ຄໍາແນະນໍາ "MOVW". mcu@tie{}= "atmega16u2", "atmega32u2", "atmega8u2",
"attiny167", "at90usb162", "at90usb82".

"avr4"
ອຸປະກອນ "ປັບປຸງ" ທີ່ມີສູງເຖິງ 8@tie{}KiB ຂອງຫນ່ວຍຄວາມຈໍາຂອງໂຄງການ. mcu@tie{}=
"atmega48", "atmega48a", "atmega48p", "atmega8", "atmega8hva", "atmega8515",
"atmega8535", "atmega88", "atmega88a", "atmega88p", "atmega88pa", "at90pwm1",
"at90pwm2", "at90pwm2b", "at90pwm3", "at90pwm3b", "at90pwm81".

"avr5"
ອຸປະກອນ "ປັບປຸງ" ທີ່ມີ 16@tie{}KiB ສູງສຸດ 64@tie{}KiB ຂອງຫນ່ວຍຄວາມຈໍາຂອງໂຄງການ.
mcu@tie{}= "atmega16", "atmega16a", "atmega16hva", "atmega16hva2", "atmega16hvb",
"atmega16m1", "atmega16u4", "atmega161", "atmega162", "atmega163", "atmega164a",
"atmega164p", "atmega165", "atmega165a", "atmega165p", "atmega168", "atmega168a",
"atmega168p", "atmega169", "atmega169a", "atmega169p", "atmega169pa", "atmega32",
"atmega32c1", "atmega32hvb", "atmega32m1", "atmega32u4", "atmega32u6",
"atmega323", "atmega324a", "atmega324p", "atmega324pa", "atmega325", "atmega325a",
"atmega325p", "atmega3250", "atmega3250a", "atmega3250p", "atmega328",
"atmega328p", "atmega329", "atmega329a", "atmega329p", "atmega329pa",
"atmega3290", "atmega3290a", "atmega3290p", "atmega406", "atmega64", "atmega64c1",
"atmega64hve", "atmega64m1", "atmega640", "atmega644", "atmega644a", "atmega644p",
"atmega644pa", "atmega645", "atmega645a", "atmega645p", "atmega6450",
"atmega6450a", "atmega6450p", "atmega649", "atmega649a", "atmega649p",
"atmega6490", "at90can32", "at90can64", "at90pwm216", "at90pwm316", "at90scr100",
"at90usb646", "at90usb647", "at94k", "m3000".

"avr51"
ອຸປະກອນ "ປັບປຸງ" ທີ່ມີ 128@tie{}KiB ຂອງຫນ່ວຍຄວາມຈໍາຂອງໂຄງການ. mcu@tie{}= "atmega128",
"atmega128rfa1", "atmega1280", "atmega1281", "atmega1284p", "at90can128",
"at90usb1286", "at90usb1287".

"avr6"
ອຸປະກອນ "ປັບປຸງ" ທີ່ມີ PC 3-byte, ເຊັ່ນວ່າມີຫຼາຍກວ່າ 128@tie{}KiB ຂອງໂປຣແກຣມ.
ຄວາມຊົງ ຈຳ. mcu@tie{}= "atmega2560", "atmega2561".

"avrxmega2"
ອຸປະກອນ "XMEGA" ທີ່ມີຫຼາຍກວ່າ 8@tie{}KiB ແລະສູງສຸດ 64@tie{}KiB ຂອງໜ່ວຍຄວາມຈຳໂປຣແກຣມ.
mcu@tie{}= "atxmega16a4", "atxmega16d4", "atxmega16x1", "atxmega32a4",
"atxmega32d4", "atxmega32x1".

"avrxmega4"
ອຸປະກອນ "XMEGA" ທີ່ມີຫຼາຍກວ່າ 64@tie{}KiB ແລະສູງສຸດ 128@tie{}KiB ຂອງໂປຣແກຣມ
ຄວາມຊົງ ຈຳ. mcu@tie{}= "atxmega64a3", "atxmega64d3".

"avrxmega5"
ອຸປະກອນ "XMEGA" ທີ່ມີຫຼາຍກວ່າ 64@tie{}KiB ແລະສູງສຸດ 128@tie{}KiB ຂອງໂປຣແກຣມ
ໜ່ວຍຄວາມຈຳ ແລະ ຫຼາຍກວ່າ 64@tie{}KiB ຂອງ RAM. mcu@tie{}= "atxmega64a1",
"atxmega64a1u".

"avrxmega6"
ອຸປະກອນ "XMEGA" ທີ່ມີຫຼາຍກວ່າ 128@tie{}KiB ຂອງໜ່ວຍຄວາມຈຳໂປຣແກຣມ. mcu@tie{}=
"atxmega128a3", "atxmega128d3", "atxmega192a3", "atxmega192d3", "atxmega256a3",
"atxmega256a3b", "atxmega256a3bu", "atxmega256d3".

"avrxmega7"
ອຸປະກອນ "XMEGA" ທີ່ມີຫຼາຍກວ່າ 128@tie{}KiB ຂອງໜ່ວຍຄວາມຈຳໂປຣແກຣມ ແລະຫຼາຍກວ່າ
64@tie{}KiB ຂອງ RAM. mcu@tie{}= "atxmega128a1", "atxmega128a1u".

"avr1"
ISA ນີ້ຖືກຈັດຕັ້ງປະຕິບັດໂດຍຫຼັກ AVR ໜ້ອຍທີ່ສຸດ ແລະຮອງຮັບສະເພາະຕົວປະກອບເທົ່ານັ້ນ.
mcu@tie{}="attiny11", "attiny12", "attiny15", "attiny28", "at90s1200".

-maccumulate-args
ສະສົມອາກິວເມັນຟັງຊັນຂາອອກແລະໄດ້ຮັບ / ປ່ອຍພື້ນທີ່ stack ທີ່ຈໍາເປັນສໍາລັບ
ການໂຕ້ແຍ້ງຟັງຊັນຂາອອກຄັ້ງດຽວໃນຟັງຊັນ prologue/epilogue. ຖ້າບໍ່ມີທາງເລືອກນີ້,
ການໂຕ້ແຍ້ງທີ່ອອກມາແມ່ນ pushed ກ່ອນທີ່ຈະໂທຫາຫນ້າທີ່ແລະ popped ຫຼັງຈາກນັ້ນ.

Popping ການໂຕ້ຖຽງຫຼັງຈາກການໂທຫາຟັງຊັນສາມາດມີລາຄາແພງໃນ AVR ດັ່ງນັ້ນ
ການສະສົມພື້ນທີ່ stack ອາດຈະນໍາໄປສູ່ການປະຕິບັດຂະຫນາດນ້ອຍກວ່າເພາະວ່າການໂຕ້ຖຽງຕ້ອງການ
ບໍ່ໃຫ້ເອົາອອກຈາກ stack ຫຼັງຈາກການໂທຟັງຊັນດັ່ງກ່າວ.

ທາງ​ເລືອກ​ນີ້​ສາ​ມາດ​ນໍາ​ໄປ​ສູ່​ການ​ຫຼຸດ​ຜ່ອນ​ຂະ​ຫນາດ​ລະ​ຫັດ​ສໍາ​ລັບ​ຫນ້າ​ທີ່​ທີ່​ປະ​ຕິ​ບັດ​ການ​ໂທ​ຫຼາຍ​ເພື່ອ​
ຟັງຊັນທີ່ມີການໂຕ້ຖຽງຂອງພວກເຂົາຢູ່ໃນ stack ເຊັ່ນການໂທຫາຫນ້າທີ່ຄ້າຍຄື printf.

-mbranch-cost=ຄ່າໃຊ້ຈ່າຍ
ກໍານົດຄ່າໃຊ້ຈ່າຍສາຂາສໍາລັບຄໍາແນະນໍາສາຂາຕາມເງື່ອນໄຂເພື່ອ ຄ່າໃຊ້ຈ່າຍ. ຄຸນຄ່າທີ່ສົມເຫດສົມຜົນ
ສໍາລັບການ ຄ່າໃຊ້ຈ່າຍ ເປັນຈໍານວນນ້ອຍ, ຈໍານວນທີ່ບໍ່ແມ່ນລົບ. ຄ່າໃຊ້ຈ່າຍຂອງສາຂາເລີ່ມຕົ້ນແມ່ນ 0.

-mcall-prologues
ຟັງຊັນ prologues/epilogues ໄດ້ຖືກຂະຫຍາຍອອກເປັນການໂທໄປຫາລາຍການຍ່ອຍທີ່ເໝາະສົມ. ລະຫັດ
ຂະໜາດນ້ອຍລົງ.

- mint8
ສົມມຸດ "int" ເປັນຈໍານວນ 8-bit. ອັນນີ້ມີຜົນກະທົບກັບຂະຫນາດຂອງທຸກປະເພດ: a "char" ແມ່ນ 1
byte, "int" ແມ່ນ 1 byte, "long" ແມ່ນ 2 bytes, ແລະ "long long" ແມ່ນ 4 bytes. ກະລຸນາ
ສັງເກດວ່າທາງເລືອກນີ້ບໍ່ສອດຄ່ອງກັບມາດຕະຖານ C, ແຕ່ມັນເຮັດໃຫ້ນ້ອຍລົງ
ຂະຫນາດລະຫັດ.

-mno-interrupts
ລະຫັດທີ່ສ້າງຂຶ້ນບໍ່ເຂົ້າກັນໄດ້ກັບການຂັດຂວາງຮາດແວ. ລະຫັດຂະໜາດນ້ອຍລົງ.

-mrelax
ພະຍາຍາມປ່ຽນແທນ "CALL" resp. ຄໍາແນະນໍາ "JMP" ໂດຍ "RCALL" resp ທີ່ສັ້ນກວ່າ. "RJMP"
ຄໍາແນະນໍາຖ້າມີ. ການຕັ້ງຄ່າ "-mrelax" ພຽງແຕ່ເພີ່ມທາງເລືອກ "--relax" ກັບ
linker command line ເມື່ອຕົວເຊື່ອມຕໍ່ຖືກເອີ້ນ.

Jump relaxing ແມ່ນປະຕິບັດໂດຍ linker ເນື່ອງຈາກວ່າການຊົດເຊີຍການໂດດບໍ່ເປັນທີ່ຮູ້ຈັກກ່ອນ
ລະຫັດຕັ້ງຢູ່. ດັ່ງນັ້ນ, ລະຫັດ assembler ທີ່ສ້າງຂຶ້ນໂດຍ compiler ແມ່ນຄືກັນ,
ແຕ່ຄໍາແນະນໍາໃນຕົວປະຕິບັດອາດຈະແຕກຕ່າງຈາກຄໍາແນະນໍາໃນຕົວປະກອບ
ລະຫັດ.

ການຜ່ອນຄາຍຕ້ອງຖືກເປີດໃຊ້ຖ້າຕ້ອງການຕົວເຊື່ອມຕໍ່, ເບິ່ງພາກ "EIND" ແລະ
linker stubs ຂ້າງລຸ່ມນີ້.

-mshort-ໂທ
ຕົວເລືອກນີ້ໄດ້ຖືກຍົກເລີກ ແລະຈະຖືກລຶບອອກໃນ GCC 4.8. ເບິ່ງ "-mrelax" ສໍາລັບ a
ທົດແທນ.

ໃຊ້ຄໍາແນະນໍາ "RCALL"/"RJMP" ເຖິງແມ່ນວ່າຢູ່ໃນອຸປະກອນທີ່ມີ 16@tie{}KiB ຫຼືຫຼາຍກວ່ານັ້ນຂອງໂປຣແກຣມ.
ຫນ່ວຍຄວາມຈໍາ, ie ໃນອຸປະກອນທີ່ມີຄໍາແນະນໍາ "CALL" ແລະ "JMP".

-msp8
ປະຕິບັດການລົງທະບຽນຕົວຊີ້ stack ເປັນການລົງທະບຽນ 8-bit, ເຊັ່ນວ່າສົມມຸດວ່າ byte ສູງຂອງ
ຕົວຊີ້ stack ແມ່ນສູນ. ໂດຍທົ່ວໄປ, ທ່ານບໍ່ຈໍາເປັນຕ້ອງກໍານົດທາງເລືອກນີ້ດ້ວຍມື.

ຕົວເລືອກນີ້ຖືກນໍາໃຊ້ພາຍໃນໂດຍ compiler ເພື່ອເລືອກແລະສ້າງ multilibs ສໍາລັບ
ສະຖາປັດຕະຍະກໍາ "avr2" ແລະ "avr25". ສະຖາປັດຕະຍະກໍາເຫຼົ່ານີ້ປະສົມອຸປະກອນທີ່ມີແລະບໍ່ມີ
"SPH". ສໍາລັບການຕັ້ງຄ່າອື່ນນອກຈາກ "-mmcu=avr2" ຫຼື "-mmcu=avr25" ໄດເວີ compiler
ຈະເພີ່ມຫຼືເອົາຕົວເລືອກນີ້ອອກຈາກເສັ້ນຄໍາສັ່ງທີ່ເຫມາະສົມຂອງ compiler, ເນື່ອງຈາກວ່າ
compiler ຫຼັງຈາກນັ້ນຮູ້ວ່າອຸປະກອນຫຼືສະຖາປັດຕະຍະມີຕົວຊີ້ stack 8-bit ແລະດັ່ງນັ້ນ
ບໍ່ມີ "SPH" ລົງທະບຽນຫຼືບໍ່.

-mstrict-X
ໃຊ້ການລົງທະບຽນທີ່ຢູ່ "X" ໃນວິທີການທີ່ຮາດແວສະເຫນີ. ນີ້ຫມາຍຄວາມວ່າ "X" ແມ່ນ
ໃຊ້ພຽງແຕ່ໃນການແກ້ໄຂທາງອ້ອມ, ຫຼັງການເພີ່ມ ຫຼືການຫຼຸດໜ້ອຍລົງເທົ່ານັ້ນ.

ໂດຍບໍ່ມີທາງເລືອກນີ້, ການລົງທະບຽນ "X" ອາດຈະຖືກນໍາໃຊ້ໃນລັກສະນະດຽວກັນກັບ "Y" ຫຼື "Z" ເຊິ່ງ
ຫຼັງຈາກນັ້ນ, emulated ໂດຍຄໍາແນະນໍາເພີ່ມເຕີມ. ຕົວຢ່າງ, ການໂຫຼດຄ່າທີ່ມີ
"X+const" ທີ່ຢູ່ກັບ "const < 64" ທີ່ບໍ່ແມ່ນທາງລົບຂະຫນາດນ້ອຍໄປຫາທະບຽນ Rn is
ປະຕິບັດເປັນ

adiw r26, const ; X += const
ld , X ; =*X
sbiw r26, const ; X -= const

-mtiny-stack
ພຽງແຕ່ປ່ຽນ 8@tie{}bits ຕ່ໍາຂອງຕົວຊີ້ stack.

"EIND" ແລະອຸປະກອນທີ່ມີຫຼາຍກ່ວາ 128 Ki Bytes ຂອງ Flash

ຕົວຊີ້ໃນການຈັດຕັ້ງປະຕິບັດແມ່ນ 16@tie{}bits wide. ທີ່ຢູ່ຂອງຟັງຊັນ ຫຼືປ້າຍກຳກັບ
ຖືກສະແດງເປັນທີ່ຢູ່ຂອງຄໍາສັບເພື່ອໃຫ້ການກະໂດດທາງອ້ອມແລະການໂທສາມາດເປົ້າຫມາຍລະຫັດໃດໆ
ທີ່ຢູ່ໃນໄລຍະ 64@tie{}Ki ຄໍາ.

ເພື່ອສ້າງຄວາມສະດວກໃນການໂດດທາງອ້ອມໃນອຸປະກອນທີ່ມີຫຼາຍກວ່າ 128@tie{}Ki bytes ຂອງ
ພື້ນທີ່ຫນ່ວຍຄວາມຈໍາຂອງໂຄງການ, ມີການລົງທະບຽນຫນ້າທີ່ພິເສດທີ່ເອີ້ນວ່າ "EIND" ທີ່ເຮັດຫນ້າທີ່ເປັນ
ສ່ວນທີ່ສໍາຄັນທີ່ສຸດຂອງທີ່ຢູ່ເປົ້າຫມາຍໃນເວລາທີ່ຄໍາແນະນໍາ "EICALL" ຫຼື "EIJMP" ແມ່ນ
ໃຊ້ແລ້ວ.

ການກະໂດດທາງອ້ອມແລະການໂທຫາອຸປະກອນເຫຼົ່ານີ້ຖືກຈັດການດັ່ງຕໍ່ໄປນີ້ໂດຍ compiler ແລະແມ່ນ
ຂຶ້ນກັບຂໍ້ຈຳກັດບາງອັນ:

· compiler ບໍ່ເຄີຍກໍານົດ "EIND".

· compiler ໃຊ້ "EIND" implicitely ໃນ "EICALL"/"EIJMP" ຄໍາແນະນໍາຫຼືອາດຈະອ່ານ
"EIND" ໂດຍກົງເພື່ອເຮັດຕາມການໂທຫາທາງອ້ອມ / ເຕັ້ນໄປຫາໂດຍວິທີ "RET"
ຄຳ ແນະ ນຳ.

· compiler ສົມມຸດວ່າ "EIND" ບໍ່ເຄີຍມີການປ່ຽນແປງໃນລະຫວ່າງການລະຫັດເລີ່ມຕົ້ນຫຼືໃນລະຫວ່າງການ
ຄໍາຮ້ອງສະຫມັກ. ໂດຍສະເພາະ, "EIND" ບໍ່ໄດ້ຖືກບັນທຶກ / ຟື້ນຟູໃນຫນ້າທີ່ຫຼືຂັດຂວາງ
ການບໍລິການປົກກະຕິ prologue/epilogue.

·ສໍາລັບການໂທຫາໂດຍທາງອ້ອມກັບຫນ້າທີ່ແລະ goto ຄອມພິວເຕີ້, ຕົວເຊື່ອມຕໍ່ຈະສ້າງ ລຳ ຕົ້ນ. ລຳຕົ້ນ
ແມ່ນ pads ເຕັ້ນໄປຫາບາງຄັ້ງເອີ້ນວ່າ trampolines. ດັ່ງນັ້ນ, ການໂທທາງອ້ອມ / ເຕັ້ນໄປຫາ
ຕົ້ນໄມ້ດັ່ງກ່າວ. stub ປະກອບດ້ວຍການກະໂດດໂດຍກົງໄປຫາທີ່ຢູ່ທີ່ຕ້ອງການ.

· ການຜ່ອນຄາຍຕົວເຊື່ອມຕໍ່ຕ້ອງຖືກເປີດເພື່ອໃຫ້ຕົວເຊື່ອມຕໍ່ຈະສ້າງສະແຕມ
ຖືກຕ້ອງທຸກສະຖານະການ. ເບິ່ງຕົວເລືອກ compiler "-mrelax" ແລະທາງເລືອກ linler
"--ຜ່ອນຄາຍ". ມີກໍລະນີມຸມທີ່ຕົວເຊື່ອມຕໍ່ແມ່ນຄວນຈະສ້າງ stubs ແຕ່
ເອົາລູກອອກໂດຍບໍ່ມີການຜ່ອນຄາຍແລະບໍ່ມີຂໍ້ຄວາມສະແດງຂໍ້ຜິດພາດທີ່ເປັນປະໂຫຍດ.

· script linker ເລີ່ມຕົ້ນຖືກຈັດລຽງສໍາລັບລະຫັດທີ່ມີ "EIND = 0". ຖ້າລະຫັດແມ່ນ supposed
ເພື່ອເຮັດວຽກສໍາລັບການຕິດຕັ້ງ "EIND != 0", script linker ກໍານົດເອງຕ້ອງຖືກນໍາໃຊ້ໃນຄໍາສັ່ງ.
ເພື່ອວາງພາກສ່ວນທີ່ມີຊື່ເລີ່ມຕົ້ນດ້ວຍ ".trampolines" ເຂົ້າໄປໃນພາກສ່ວນທີ່
"EIND" ຊີ້ໃຫ້ເຫັນ.

· ລະຫັດເລີ່ມຕົ້ນຈາກ libgcc ບໍ່ເຄີຍຕັ້ງ "EIND". ສັງເກດເຫັນວ່າລະຫັດເລີ່ມຕົ້ນແມ່ນການຜະສົມຜະສານ
ຂອງລະຫັດຈາກ libgcc ແລະ AVR-LibC. ສໍາລັບຜົນກະທົບຂອງ AVR-LibC ກ່ຽວກັບ "EIND", ເບິ່ງ AVR-
ຄູ່ມືຜູ້ໃຊ້ LibC ("http://nongnu.org/avr-libc/user-manual/")

· ມັນເປັນທີ່ຖືກຕ້ອງສໍາລັບລະຫັດເລີ່ມຕົ້ນຂອງຜູ້ໃຊ້ສະເພາະເພື່ອຕັ້ງຄ່າ "EIND" ໃນຕອນຕົ້ນ, ຕົວຢ່າງໂດຍ
ຫມາຍຄວາມວ່າລະຫັດເບື້ອງຕົ້ນຢູ່ໃນພາກ ".init3". ລະຫັດດັ່ງກ່າວດໍາເນີນການກ່ອນ
ລະຫັດເລີ່ມຕົ້ນທົ່ວໄປທີ່ເລີ່ມຕົ້ນ RAM ແລະໂທຫາຜູ້ກໍ່ສ້າງ, ແຕ່ຫຼັງຈາກບິດຂອງ
ລະຫັດເລີ່ມຕົ້ນຈາກ AVR-LibC ທີ່ກໍານົດ "EIND" ກັບພາກສ່ວນທີ່ຕາຕະລາງ vector ແມ່ນ
ຕັ້ງຢູ່.

#ລວມທັງ

void static
__attribute__((section(.init3"),naked,used,no_instrument_function))
init3_set_eind (void)
{
__asm ​​volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t"
"ອອກ %i0,r24" :: "n" (&EIND): "r24","ໜ່ວຍຄວາມຈຳ");
}

ສັນຍາລັກ "__trampolines_start" ຖືກກໍານົດໄວ້ໃນຕົວເຊື່ອມຕໍ່.

· Stubs ຖືກສ້າງຂື້ນໂດຍອັດຕະໂນມັດໂດຍຕົວເຊື່ອມຕໍ່ຖ້າມີສອງເງື່ອນໄຂຕໍ່ໄປນີ້
ໄດ້ພົບ:

-
(ສັ້ນ ສຳ ລັບ ຜະລິດ ລຳ ຕົ້ນ) ເຊັ່ນ​ດຽວ​ກັນ​:

LDI r24, lo8(gs( ))
LDI r25, hi8(gs( ))

-
ນອກ ພາກສ່ວນທີ່ stubs ຕັ້ງຢູ່.

· compiler ປ່ອຍຕົວແກ້ໄຂ "gs" ດັ່ງກ່າວສໍາລັບປ້າຍລະຫັດໃນສະຖານະການຕໍ່ໄປນີ້:

-
-
- -mcall-prologues>
ທາງເລືອກແຖວຄໍາສັ່ງ.

-
ຕາຕະລາງທີ່ທ່ານສາມາດກໍານົດໄດ້ -fno-jump-tables ທາງເລືອກແຖວຄໍາສັ່ງ.

-
-
· ໂດດໄປຫາທີ່ຢູ່ທີ່ບໍ່ແມ່ນສັນຍາລັກຄືກັບນັ້ນ ບໍ່ ສະຫນັບສະຫນູນ:

int main (void)
{
/* ການ​ທໍາ​ງານ​ການ​ໂທ​ທີ່​ຢູ່​ຄໍາ​ສັບ 0x2 */
ກັບຄືນ ((int(*)(void)) 0x2)();
}

ແທນທີ່ຈະ, stub ຕ້ອງໄດ້ຮັບການສ້າງຕັ້ງຂຶ້ນ, ie ຫນ້າທີ່ຕ້ອງໄດ້ຮັບການເອີ້ນວ່າໂດຍຜ່ານສັນຍາລັກ
("func_4" ໃນຕົວຢ່າງ):

int main (void)
{
extern int func_4 (void);

/* ຟັງຊັນໂທຢູ່ທີ່ byte address 0x4 */
ກັບຄືນ func_4();
}

ແລະແອັບພລິເຄຊັນຖືກເຊື່ອມຕໍ່ດ້ວຍ "-Wl,--defsym, func_4=0x4". ອີກທາງເລືອກ, "func_4"
ສາມາດຖືກກໍານົດໄວ້ໃນຕົວເຊື່ອມຕໍ່.

ການຈັດການຂອງ "RAMPD", "RAMPX", "RAMPY" ແລະ "RAMPZ" ການລົງທະບຽນຟັງຊັນພິເສດ

ບາງອຸປະກອນ AVR ຮອງຮັບຄວາມຊົງຈໍາທີ່ໃຫຍ່ກວ່າ 64@tie{}KiB range ທີ່ສາມາດເຂົ້າເຖິງໄດ້
ດ້ວຍຕົວຊີ້ 16 ບິດ. ເພື່ອເຂົ້າເຖິງສະຖານທີ່ຫນ່ວຍຄວາມຈໍາທີ່ຢູ່ນອກຂອບເຂດ 64@tie{}KiB ນີ້, ໄດ້
ເນື້ອໃນຂອງທະບຽນ "RAMP" ຖືກນໍາໃຊ້ເປັນສ່ວນທີ່ສູງຂອງທີ່ຢູ່: "X", "Y", "Z"
ລົງທະບຽນທີ່ຢູ່ແມ່ນສົມທົບກັບຫນ້າທີ່ພິເສດ "RAMPX", "RAMPY", "RAMPZ".
ລົງທະບຽນ, ຕາມລໍາດັບ, ເພື່ອໃຫ້ໄດ້ຮັບທີ່ຢູ່ກວ້າງ. ເຊັ່ນດຽວກັນ, "RAMPD" ແມ່ນໃຊ້ຮ່ວມກັນກັບ
ທີ່ຢູ່ໂດຍກົງ.

· ລະ​ຫັດ​ການ​ເລີ່ມ​ຕົ້ນ​ການ​ເລີ່ມ​ຕົ້ນ "RAMP​" ການ​ທໍາ​ງານ​ພິ​ເສດ​ການ​ລົງ​ທະ​ບຽນ​ກັບ​ສູນ​.

· ຖ້າ ກ APR ຊື່ ທີ່ຢູ່ Spaces, ຊື່ ທີ່ຢູ່ ຊ່ອງ ນອກ​ຈາກ​ທົ່ວ​ໄປ​ຫຼື "__flash​" ແມ່ນ​
ຖືກນໍາໃຊ້, ຫຼັງຈາກນັ້ນ "RAMPZ" ຖືກກໍານົດຕາມຄວາມຕ້ອງການກ່ອນທີ່ຈະດໍາເນີນການ.

· ຖ້າອຸປະກອນຮອງຮັບ RAM ໃຫຍ່ກວ່າ 64@tie{KiB} ແລະຄອມພີວເຊີຕ້ອງປ່ຽນ.
"RAMPZ" ເພື່ອປະຕິບັດການສໍາເລັດ, "RAMPZ" ຖືກຕັ້ງໃຫມ່ເປັນສູນຫຼັງຈາກການດໍາເນີນງານ.

· ຖ້າອຸປະກອນມາພ້ອມກັບການລົງທະບຽນ "RAMP" ສະເພາະ, ISR prologue/epilogue
ບັນທຶກ / ຟື້ນຟູ SFR ແລະເລີ່ມຕົ້ນດ້ວຍສູນໃນກໍລະນີທີ່ລະຫັດ ISR ອາດຈະ
(ໂດຍ implicitly) ໃຊ້ມັນ.

· RAM ໃຫຍ່ກວ່າ 64@tie{KiB} ບໍ່ຮອງຮັບໂດຍ GCC ສໍາລັບເປົ້າໝາຍ AVR. ຖ້າທ່ານໃຊ້
inline assembler ເພື່ອອ່ານຈາກສະຖານທີ່ນອກຂອບເຂດທີ່ຢູ່ 16-bit ແລະການປ່ຽນແປງ
ຫນຶ່ງໃນ "RAMP" ລົງທະບຽນ, ທ່ານຕ້ອງປັບມັນເປັນສູນຫຼັງຈາກການເຂົ້າເຖິງ.

AVR ມາໂຄຣໃນຕົວ

GCC ກໍານົດ macro ໃນຕົວຈໍານວນຫນຶ່ງເພື່ອໃຫ້ລະຫັດຜູ້ໃຊ້ສາມາດທົດສອບການມີຢູ່ຫຼື
ຂາດຄຸນສົມບັດ. ເກືອບທຸກ macro ໃນຕົວຕໍ່ໄປນີ້ແມ່ນ deduced ຈາກອຸປະກອນ
ຄວາມສາມາດແລະດັ່ງນັ້ນຈຶ່ງຖືກກະຕຸ້ນໂດຍ "-mmcu=" ທາງເລືອກເສັ້ນຄໍາສັ່ງ.

ສຳລັບມາໂຄຣທີ່ສ້າງຂຶ້ນໃນສະເພາະ AVR ເພີ່ມເຕີມໃຫ້ເບິ່ງ APR ຊື່ ທີ່ຢູ່ ຊ່ອງຫວ່າງ ແລະ APR Built-in
ຫນ້າທີ່.

"__AVR_ARCH__"
Build-in macro ທີ່ແກ້ໄຂເປັນຕົວເລກທົດສະນິຍົມທີ່ລະບຸສະຖາປັດຕະຍະກໍາແລະ
ຂຶ້ນກັບ "-mmcu=mcu" ທາງເລືອກ. ຄ່າທີ່ເປັນໄປໄດ້ແມ່ນ:

2, 25, 3, 31, 35, 4, 5, 51, 6, 102, 104, 105, 106, 107

ສໍາລັບການ mcu= "avr2", "avr25", "avr3", "avr31", "avr35", "avr4", "avr5", "avr51", "avr6",
"avrxmega2", "avrxmega4", "avrxmega5", "avrxmega6", "avrxmega7", ຕາມລໍາດັບ. ຖ້າ mcu
ລະບຸອຸປະກອນ, ມະຫາພາກໃນຕົວນີ້ຖືກຕັ້ງຕາມຄວາມເໝາະສົມ. ຕົວຢ່າງ, ກັບ
"-mmcu=atmega8" macro ຈະຖືກກໍານົດເປັນ 4.

"__AVR_ອຸປະກອນ__"
ການຕັ້ງຄ່າ "-mmcu=ອຸປະກອນ" ກໍານົດ macro ໃນຕົວນີ້ເຊິ່ງສະທ້ອນເຖິງຊື່ຂອງອຸປະກອນ.
ຕົວຢ່າງ, "-mmcu=atmega8" ກໍານົດ macro ທີ່ມີໃນຕົວ "__AVR_ATmega8__",
"-mmcu=attiny261a" ກໍານົດ "__AVR_ATtiny261A__", ແລະອື່ນໆ.

ຊື່ macro ໃນຕົວແມ່ນປະຕິບັດຕາມໂຄງການ "__AVR_ອຸປະກອນ__" ບ່ອນທີ່ ອຸປະກອນ ເປັນ
ຊື່ອຸປະກອນຈາກຄູ່ມືຜູ້ໃຊ້ AVR. ຄວາມແຕກຕ່າງລະຫວ່າງ ອຸປະກອນ ໃນການກໍ່ສ້າງໃນ
ມະຫາພາກ ແລະ ອຸປະກອນ ໃນ "-mmcu=ອຸປະກອນ" ແມ່ນວ່າອັນສຸດທ້າຍແມ່ນຕົວພິມນ້ອຍສະເໝີ.

If ອຸປະກອນ ບໍ່ແມ່ນອຸປະກອນແຕ່ເປັນສະຖາປັດຕະຍະກໍາຫຼັກເຊັ່ນ "avr51", ມະຫາພາກນີ້ຈະ
ບໍ່ໄດ້ຖືກກໍານົດ.

"__AVR_XMEGA__"
ອຸປະກອນ/ສະຖາປັດຕະຍະກຳເປັນຂອງອຸປະກອນຄອບຄົວ XMEGA.

"__AVR_HAVE_ELPM__"
ອຸປະກອນມີຄໍາແນະນໍາ "ELPM".

"__AVR_HAVE_ELPMX__"
ອຸປະກອນມີ "ELPM Rn,Z" ແລະ "ELPM Rn,Z+" ຄໍາແນະນໍາ.

"__AVR_HAVE_MOVW__"
ອຸປະກອນມີຄໍາແນະນໍາ "MOVW" ເພື່ອປະຕິບັດການເຄື່ອນໄຫວລົງທະບຽນ 16-ບິດ.

"__AVR_HAVE_LPMX__"
ອຸປະກອນມີ "LPM Rn,Z" ແລະ "LPM Rn,Z+" ຄໍາແນະນໍາ.

"__AVR_HAVE_MUL__"
ອຸປະກອນມີຕົວຄູນຮາດແວ.

"__AVR_HAVE_JMP_CALL__"
ອຸປະກອນມີຄໍາແນະນໍາ "JMP" ແລະ "CALL". ນີ້ແມ່ນກໍລະນີສໍາລັບອຸປະກອນທີ່ມີ
ຢ່າງໜ້ອຍ 16@tie{}KiB ຂອງໜ່ວຍຄວາມຈຳໂປຣແກຣມ ແລະຖ້າ "-mshort-calls" ບໍ່ໄດ້ຕັ້ງ.

"__AVR_HAVE_EIJMP_EICALL__"
"__AVR_3_BYTE_PC__"
ອຸປະກອນມີຄໍາແນະນໍາ "EIJMP" ແລະ "EICALL". ນີ້ແມ່ນກໍລະນີສໍາລັບອຸປະກອນ
ມີຫຼາຍກວ່າ 128@tie{}KiB ຂອງໜ່ວຍຄວາມຈຳໂປຣແກຣມ. ນີ້ກໍ່ຫມາຍຄວາມວ່າໂຄງການ
counter (PC) ແມ່ນ 3@tie{}byte wide.

"__AVR_2_BYTE_PC__"
ຕົວນັບໂປຣແກຣມ (PC) ແມ່ນ 2@tie{}byte wide. ນີ້ແມ່ນກໍລະນີສໍາລັບອຸປະກອນທີ່ມີເຖິງ
128@tie{}KiB ຂອງໜ່ວຍຄວາມຈຳໂປຣແກຣມ.

"__AVR_HAVE_8BIT_SP__"
"__AVR_HAVE_16BIT_SP__"
ການລົງທະບຽນຕົວຊີ້ stack (SP) ຖືກປະຕິບັດເປັນ 8-bit ຕາມລໍາດັບ 16-bit ລົງທະບຽນໂດຍ
compiler ໄດ້. ຄໍານິຍາມຂອງມະຫາພາກເຫຼົ່ານີ້ໄດ້ຮັບຜົນກະທົບຈາກ "-mtiny-stack".

"__AVR_HAVE_SPH__"
"__AVR_SP8__"
ອຸປະກອນມີ SPH (ສ່ວນສູງຂອງຕົວຊີ້ stack) ຫນ້າທີ່ພິເສດລົງທະບຽນຫຼືມີ
ຕົວຊີ້ stack 8-bit, ຕາມລໍາດັບ. ຄໍານິຍາມຂອງມະຫາພາກເຫຼົ່ານີ້ໄດ້ຮັບຜົນກະທົບຈາກ
"-mmcu=" ແລະໃນກໍລະນີຂອງ "-mmcu=avr2" ແລະ "-mmcu=avr25" ຍັງໂດຍ "-msp8".

"__AVR_HAVE_RAMPD__"
"__AVR_HAVE_RAMPX__"
"__AVR_HAVE_RAMPY__"
"__AVR_HAVE_RAMPZ__"
ອຸປະກອນມີ "RAMPD", "RAMPX", "RAMPY", "RAMPZ" ລົງທະບຽນຟັງຊັນພິເສດ,
ຕາມລໍາດັບ.

"__NO_INTERRUPTS__"
ມະຫາພາກນີ້ສະທ້ອນເຖິງຕົວເລືອກແຖວຄໍາສັ່ງ "-mno-interrupts".

"__AVR_ERRATA_SKIP__"
"__AVR_ERRATA_SKIP_JMP_CALL__"
ບາງອຸປະກອນ AVR (AT90S8515, ATmega103) ຈະຕ້ອງບໍ່ຂ້າມຄໍາແນະນໍາ 32-bit ເນື່ອງຈາກມີ
ຮາດແວຜິດພາດ. ຂ້າມຄໍາແນະນໍາແມ່ນ "SBRS", "SBRC", "SBIS", "SBIC" ແລະ "CPSE".
ມະຫາພາກທີສອງຖືກກຳນົດພຽງແຕ່ຖ້າ "__AVR_HAVE_JMP_CALL__" ຖືກຕັ້ງໄວ້ນຳ.

"__AVR_SFR_OFFSET__=ຊົດເຊີຍ"
ຄໍາແນະນໍາທີ່ສາມາດແກ້ໄຂການລົງທະບຽນຟັງຊັນພິເສດຂອງ I/O ໂດຍກົງເຊັ່ນ "IN",
"OUT", "SBI", ແລະອື່ນໆ. ອາດຈະໃຊ້ທີ່ຢູ່ອື່ນຄືກັບທີ່ແກ້ໄຂໂດຍຄໍາແນະນໍາທີ່ຈະ
ເຂົ້າເຖິງ RAM ເຊັ່ນ "LD" ຫຼື "STS". ການຊົດເຊີຍນີ້ແມ່ນຂຶ້ນກັບສະຖາປັດຕະຍະກໍາອຸປະກອນແລະມີ
ທີ່ຈະຫັກອອກຈາກທີ່ຢູ່ RAM ເພື່ອໃຫ້ໄດ້ຮັບທີ່ຢູ່ I/O@tie{}ຕາມລໍາດັບ.

"__WITH_AVRLIBC__"
compiler ໄດ້ຖືກຕັ້ງຄ່າໃຫ້ໃຊ້ຮ່ວມກັນກັບ AVR-Libc. ເບິ່ງ
"--with-avrlibc" ຕົວເລືອກການຕັ້ງຄ່າ.

ດຳ ທາງເລືອກໃນການ

-mcpu=cpu[-sirevision]
ລະບຸຊື່ຂອງໂປເຊດເຊີ Blackfin ເປົ້າໝາຍ. ໃນປັດຈຸບັນ, cpu ສາມາດເປັນຫນຶ່ງໃນ
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. ທາງເລືອກ sirevision ລະບຸ
ການປັບປຸງຊິລິຄອນຂອງໂຮງງານຜະລິດ Blackfin ເປົ້າຫມາຍ. ການແກ້ໄຂໃດໆທີ່ມີຢູ່ສໍາລັບການ
ການແກ້ໄຂຊິລິໂຄນເປົ້າຫມາຍຈະຖືກເປີດໃຊ້. ຖ້າ sirevision is none, ບໍ່ມີການແກ້ໄຂແມ່ນ
ເປີດໃຊ້ງານ. ຖ້າ sirevision is ໃດ, ການແກ້ໄຂທັງຫມົດສໍາລັບໂຮງງານຜະລິດເປົ້າຫມາຍຈະເປັນ
ເປີດໃຊ້ງານ. ມະຫາພາກ "__SILICON_REVISION__" ຖືກກໍານົດເປັນສອງຕົວເລກຖານສິບຫົກ
ເປັນຕົວແທນຂອງຕົວເລກທີ່ສໍາຄັນແລະຫນ້ອຍໃນການແກ້ໄຂຊິລິໂຄນ. ຖ້າ sirevision is
none, "__SILICON_REVISION__" ບໍ່ໄດ້ຖືກກໍານົດ. ຖ້າ sirevision is ໃດ, ການ
"__SILICON_REVISION__" ຖືກກຳນົດໃຫ້ເປັນ 0xffff. ຖ້າທາງເລືອກນີ້ sirevision ບໍ່​ແມ່ນ
ຖືກນໍາໃຊ້, GCC ຖືວ່າການດັດແກ້ຊິລິຄອນທີ່ຮູ້ຈັກຫລ້າສຸດຂອງ Blackfin ເປົ້າຫມາຍ
ໂປເຊດເຊີ.

ສະຫນັບສະຫນູນສໍາລັບ bf561 ບໍ່ສົມບູນ. ສໍາລັບ bf561, ພຽງແຕ່ macro ໂປເຊດເຊີແມ່ນຖືກກໍານົດ.
ຖ້າບໍ່ມີທາງເລືອກນີ້, bf532 ຖືກໃຊ້ເປັນໂປເຊດເຊີໂດຍຄ່າເລີ່ມຕົ້ນ. ທີ່​ສອດ​ຄ້ອງ​ກັນ​
macro ໂປເຊດເຊີທີ່ກໍານົດໄວ້ລ່ວງຫນ້າສໍາລັບ cpu ແມ່ນເພື່ອກໍານົດ. ແລະສໍາລັບ bfin-elf ຕ່ອງໂສ້ເຄື່ອງມື,
ນີ້ເຮັດໃຫ້ BSP ຮາດແວທີ່ສະຫນອງໂດຍ libgloss ຖືກເຊື່ອມຕໍ່ໃນ if - ຊິມ ບໍ່​ແມ່ນ
ໃຫ້.

- ຊິມ
ລະບຸວ່າໂຄງການຈະດໍາເນີນການຢູ່ໃນ simulator ໄດ້. ນີ້ເຮັດໃຫ້ເກີດການຈໍາລອງ
BSP ສະຫນອງໃຫ້ໂດຍ libgloss ທີ່ຈະເຊື່ອມຕໍ່ໃນ. ທາງເລືອກນີ້ມີຜົນກະທົບພຽງແຕ່ສໍາລັບ bfin-elf
ຕ່ອງໂສ້ເຄື່ອງມື. ທາງເລືອກອື່ນທີ່ແນ່ນອນ, ເຊັ່ນ: - ຫໍສະໝຸດກາງ ແລະ -mfdpic, ໝາຍເຖິງ
- ຊິມ.

-momit-leaf-frame-pointer
ຢ່າເກັບຮັກສາຕົວຊີ້ກອບຢູ່ໃນທະບຽນສໍາລັບຫນ້າທີ່ຂອງໃບ. ນີ້ຫຼີກລ້ຽງການ
ຄໍາ​ແນະ​ນໍາ​ເພື່ອ​ຊ່ວຍ​ປະ​ຢັດ​, ການ​ຕັ້ງ​ຄ່າ​ແລະ​ການ​ຟື້ນ​ຟູ​ຕົວ​ຊີ້​ກອບ​ແລະ​ເຮັດ​ໃຫ້​ການ​ລົງ​ທະ​ບຽນ​ເພີ່ມ​ເຕີມ​
ມີຢູ່ໃນຫນ້າທີ່ຂອງໃບ. ທາງເລືອກ -fomit-frame-pointer ເອົາກອບ
ຕົວຊີ້ສໍາລັບຟັງຊັນທັງໝົດ, ເຊິ່ງອາດຈະເຮັດໃຫ້ການດີບັກຍາກຂຶ້ນ.

-mspecld-ຜິດປົກກະຕິ
ເມື່ອເປີດໃຊ້ງານ, compiler ຈະຮັບປະກັນວ່າລະຫັດທີ່ສ້າງຂຶ້ນບໍ່ມີ
ການໂຫຼດຄາດຄະເນຫຼັງຈາກຄໍາແນະນໍາກະໂດດ. ຖ້າຕົວເລືອກນີ້ຖືກໃຊ້,
"__WORKAROUND_SPECULATIVE_LOADS" ຖືກກຳນົດ.

-mno-specld-ຜິດປົກກະຕິ
ຢ່າສ້າງລະຫັດເພີ່ມເຕີມເພື່ອປ້ອງກັນການໂຫຼດທີ່ຄາດເດົາໄດ້.

-mcsync-ຜິດປົກກະຕິ
ເມື່ອເປີດໃຊ້ງານ, ຄອມພີວເຕີຈະຮັບປະກັນວ່າລະຫັດທີ່ສ້າງຂຶ້ນບໍ່ມີ CSYNC
ຫຼືຄໍາແນະນໍາ SSYNC ໄວເກີນໄປຫຼັງຈາກສາຂາທີ່ມີເງື່ອນໄຂ. ຖ້າຕົວເລືອກນີ້ຖືກໃຊ້,
"__WORKAROUND_SPECULATIVE_SYNCS" ຖືກກຳນົດ.

-mno-csync-ຜິດປົກກະຕິ
ຢ່າສ້າງລະຫັດເພີ່ມເຕີມເພື່ອປ້ອງກັນບໍ່ໃຫ້ຄໍາແນະນໍາ CSYNC ຫຼື SSYNC ເກີດຂຶ້ນເຊັ່ນກັນ
ທັນທີຫຼັງຈາກສາຂາທີ່ມີເງື່ອນໄຂ.

-mlow-64k
ເມື່ອເປີດໃຊ້ງານ, compiler ແມ່ນບໍ່ເສຍຄ່າເພື່ອໃຊ້ປະໂຫຍດຈາກຄວາມຮູ້ທີ່ທັງຫມົດ
ໂປລແກລມເຫມາະກັບຫນ່ວຍຄວາມຈໍາຕ່ໍາ 64k.

-mno-low-64k
ສົມມຸດວ່າໂຄງການມີຂະຫນາດໃຫຍ່ arbitrarily. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-mstack-check-l1
ເຮັດການກວດສອບ stack ໂດຍໃຊ້ຂໍ້ມູນທີ່ວາງໄວ້ໃນຫນ່ວຍຄວາມຈໍາ scratchpad L1 ໂດຍ uClinux
ແກ່ນ.

- ຫໍສະໝຸດກາງ
ສ້າງລະຫັດທີ່ຮອງຮັບຫ້ອງສະໝຸດທີ່ໃຊ້ຮ່ວມກັນຜ່ານວິທີການ ID ຫ້ອງສະໝຸດ. ນີ້ອະນຸຍາດໃຫ້
ສໍາລັບການປະຕິບັດຢູ່ໃນສະຖານທີ່ແລະຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນໃນສະພາບແວດລ້ອມທີ່ບໍ່ມີຫນ່ວຍຄວາມຈໍາ virtual
ການຄຸ້ມຄອງ. ທາງເລືອກນີ້ຫມາຍເຖິງ -fPIC. ດ້ວຍ bfin-elf ເປົ້າຫມາຍ, ທາງເລືອກນີ້ຫມາຍເຖິງ
- ຊິມ.

-mno-id-shared-library
ສ້າງລະຫັດທີ່ບໍ່ສົມມຸດວ່າຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນໂດຍ ID ແມ່ນຖືກນໍາໃຊ້. ນີ້​ແມ່ນ
ຄ່າເລີ່ມຕົ້ນ.

-mleaf-id-shared-library
ສ້າງລະຫັດທີ່ສະຫນັບສະຫນູນຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນໂດຍຜ່ານວິທີການ ID ຫ້ອງສະຫມຸດ, ແຕ່ສົມມຸດ
ວ່າຫ້ອງສະຫມຸດນີ້ຫຼືປະຕິບັດໄດ້ຈະບໍ່ເຊື່ອມຕໍ່ກັບຫ້ອງສະຫມຸດທີ່ແບ່ງປັນ ID ອື່ນໆ.
ນັ້ນເຮັດໃຫ້ຜູ້ລວບລວມຂໍ້ມູນໃຊ້ລະຫັດໄວຂຶ້ນສໍາລັບການໂດດແລະການໂທ.

-mno-leaf-id-shared-library
ຢ່າສົມມຸດວ່າລະຫັດທີ່ຖືກລວບລວມຈະບໍ່ເຊື່ອມຕໍ່ກັບຫ້ອງສະຫມຸດທີ່ແບ່ງປັນ ID ໃດ.
ລະຫັດຊ້າກວ່າຈະຖືກສ້າງຂື້ນເພື່ອເຕັ້ນໄປຫາ ແລະໂທ insns.

-mshared-library-id=n
ລະບຸໝາຍເລກປະຈຳຕົວຂອງຫ້ອງສະໝຸດທີ່ໃຊ້ຮ່ວມກັນ ID ທີ່ຖືກລວບລວມ.
ການລະບຸຄ່າຂອງ 0 ຈະສ້າງລະຫັດທີ່ຫນາແຫນ້ນກວ່າ, ການລະບຸຄ່າອື່ນໆຈະ
ບັງ​ຄັບ​ການ​ຈັດ​ສັນ​ຈໍາ​ນວນ​ນັ້ນ​ກັບ​ຫ້ອງ​ສະ​ຫມຸດ​ໃນ​ປັດ​ຈຸ​ບັນ​ແຕ່​ບໍ່​ມີ​ພື້ນ​ທີ່​ຫຼາຍ​ຫຼື​
ເວລາມີປະສິດທິພາບຫຼາຍກ່ວາການລະເວັ້ນທາງເລືອກນີ້.

-msep-ຂໍ້ມູນ
ສ້າງລະຫັດທີ່ອະນຸຍາດໃຫ້ພາກສ່ວນຂໍ້ມູນຕັ້ງຢູ່ໃນພື້ນທີ່ທີ່ແຕກຕ່າງກັນຂອງຫນ່ວຍຄວາມຈໍາ
ຈາກພາກສ່ວນຂໍ້ຄວາມ. ນີ້ອະນຸຍາດໃຫ້ປະຕິບັດໃນສະຖານທີ່ໃນສະພາບແວດລ້ອມທີ່ບໍ່ມີ
ການຄຸ້ມຄອງຄວາມຊົງຈໍາ virtual ໂດຍການກໍາຈັດການຍົກຍ້າຍກັບພາກສ່ວນຂໍ້ຄວາມ.

-mno-sep-data
ສ້າງລະຫັດທີ່ສົມມຸດວ່າສ່ວນຂໍ້ມູນປະຕິບັດຕາມສ່ວນຂໍ້ຄວາມ. ນີ້​ແມ່ນ
ຄ່າເລີ່ມຕົ້ນ.

-mlong-ໂທ
-mno-long-calls
ບອກ compiler ເພື່ອປະຕິບັດການເອີ້ນຟັງຊັນໂດຍການໂຫຼດທີ່ຢູ່ຂອງທໍາອິດ
ປະຕິບັດຫນ້າທີ່ເຂົ້າໄປໃນທະບຽນແລະຫຼັງຈາກນັ້ນປະຕິບັດການໂທຫາ subroutine ໃນທະບຽນນີ້. ນີ້
ສະວິດແມ່ນຈໍາເປັນຖ້າຫາກວ່າຫນ້າທີ່ເປົ້າຫມາຍແມ່ນຢູ່ນອກຂອບເຂດທີ່ຢູ່ 24-bit ຂອງ
ສະບັບທີ່ອີງໃສ່ການຊົດເຊີຍຂອງຄໍາແນະນໍາການໂທແບບປົກກະຕິ.

ຄຸນສົມບັດນີ້ບໍ່ໄດ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ. ການລະບຸ -mno-long-calls ຈະຟື້ນຟູ
ພຶດຕິກໍາເລີ່ມຕົ້ນ. ກະລຸນາຮັບຊາບວ່າສະວິດເຫຼົ່ານີ້ບໍ່ມີຜົນຕໍ່ວິທີການສ້າງຄອມພີວເຕີ
ລະຫັດເພື່ອຈັດການການໂທຟັງຊັນຜ່ານຕົວຊີ້ຟັງຊັນ.

-mfast-fp
ເຊື່ອມຕໍ່ກັບຫ້ອງສະຫມຸດຈຸດທີ່ເລື່ອນໄດ້ໄວ. ຫ້ອງສະຫມຸດນີ້ຜ່ອນຄາຍບາງສ່ວນຂອງ IEEE
ກົດລະບຽບຂອງມາດຕະຖານຈຸດລອຍສໍາລັບການກວດສອບການປ້ອນຂໍ້ມູນຕໍ່ກັບ Not-a-Number (NAN), ໃນ
ຄວາມ​ສົນ​ໃຈ​ຂອງ​ການ​ປະ​ຕິ​ບັດ​.

-minline-plt
ເປີດໃຊ້ inlining ຂອງລາຍການ PLT ໃນການເອີ້ນຟັງຊັນໄປຫາຟັງຊັນທີ່ບໍ່ຮູ້ຈັກ
ຜູກມັດຢູ່ໃນທ້ອງຖິ່ນ. ມັນບໍ່ມີຜົນກະທົບທີ່ບໍ່ມີ -mfdpic.

- mmulticore
ສ້າງແອັບພລິເຄຊັນແບບສະແຕນໂດດສໍາລັບໂປເຊດເຊີ Multicore Blackfin. ໄຟລ໌ເລີ່ມຕົ້ນທີ່ເຫມາະສົມແລະ
link scripts ຈະຖືກນໍາໃຊ້ເພື່ອສະຫນັບສະຫນູນ multicore. ທາງເລືອກນີ້ກໍານົດ
"__BFIN_MULTICORE". ມັນສາມາດໃຊ້ໄດ້ພຽງແຕ່ກັບ -mcpu=bf561[-sirevision]. ມັນສາມາດນໍາໃຊ້ໄດ້
ກັບ - mcorea or -mcoreb. ຖ້າຫາກວ່າມັນຖືກນໍາໃຊ້ໂດຍບໍ່ມີການ - mcorea or -mcoreb, ດຽວ
ຮູບແບບການຂຽນໂປລແກລມແອັບພລິເຄຊັນ/ສອງຫຼັກແມ່ນໃຊ້. ໃນຮູບແບບນີ້, ຫນ້າທີ່ຕົ້ນຕໍຂອງ
Core B ຄວນມີຊື່ເປັນ coreb_main. ຖ້າມັນໃຊ້ກັບ - mcorea or -mcoreb, ຫນຶ່ງ
ຄໍາຮ້ອງສະຫມັກຕໍ່ຮູບແບບການຂຽນໂປລແກລມຫຼັກຖືກນໍາໃຊ້. ຖ້າຕົວເລືອກນີ້ບໍ່ໄດ້ໃຊ້, ດຽວ
ຮູບແບບການຂຽນໂປລແກລມຄໍາຮ້ອງສະຫມັກຫຼັກຖືກນໍາໃຊ້.

- mcorea
ສ້າງແອັບພລິເຄຊັນແບບດ່ຽວສຳລັບ Core A ຂອງ BF561 ເມື່ອໃຊ້ໜຶ່ງແອັບພລິເຄຊັນຕໍ່ຫຼັກ
ຮູບແບບການຂຽນໂປລແກລມ. ໄຟລ໌ເລີ່ມຕົ້ນທີ່ຖືກຕ້ອງ ແລະສະຄຣິບເຊື່ອມຕໍ່ຈະຖືກໃຊ້ເພື່ອຮອງຮັບ Core A.
ຕົວເລືອກນີ້ກໍານົດ "__BFIN_COREA". ມັນຕ້ອງຖືກນໍາໃຊ້ກັບ - mmulticore.

-mcoreb
ສ້າງແອັບພລິເຄຊັນແບບດ່ຽວສຳລັບ Core B ຂອງ BF561 ເມື່ອໃຊ້ໜຶ່ງແອັບພລິເຄຊັນຕໍ່ຫຼັກ
ຮູບແບບການຂຽນໂປລແກລມ. ໄຟລ໌ເລີ່ມຕົ້ນທີ່ຖືກຕ້ອງ ແລະສະຄຣິບເຊື່ອມຕໍ່ຈະຖືກໃຊ້ເພື່ອຮອງຮັບ Core B.
ຕົວເລືອກນີ້ກໍານົດ "__BFIN_COREB". ເມື່ອຕົວເລືອກນີ້ຖືກນໍາໃຊ້, coreb_main ຄວນຈະເປັນ
ໃຊ້ແທນຫຼັກ. ມັນຕ້ອງຖືກນໍາໃຊ້ກັບ - mmulticore.

-msdram
ສ້າງແອັບພລິເຄຊັນແບບດ່ຽວສຳລັບ SDRAM. ໄຟລ໌ເລີ່ມຕົ້ນທີ່ເຫມາະສົມແລະສະຄິບເຊື່ອມຕໍ່ຈະເປັນ
ໃຊ້ເພື່ອເອົາແອັບພລິເຄຊັນເຂົ້າໄປໃນ SDRAM. Loader ຄວນເລີ່ມຕົ້ນ SDRAM ກ່ອນທີ່ຈະໂຫລດ
ຄໍາຮ້ອງສະຫມັກເຂົ້າໄປໃນ SDRAM. ຕົວເລືອກນີ້ກໍານົດ "__BFIN_SDRAM".

-micplb
ສົມມຸດວ່າ ICPLBs ຖືກເປີດໃຊ້ໃນເວລາແລ່ນ. ນີ້ມີຜົນກະທົບກ່ຽວກັບຄວາມຜິດປົກກະຕິທີ່ແນ່ນອນ
ການແກ້ໄຂບັນຫາ. ສໍາລັບເປົ້າຫມາຍ Linux, ຄ່າເລີ່ມຕົ້ນແມ່ນຖືວ່າ ICPLBs ຖືກເປີດໃຊ້; ສໍາລັບ
ແອັບພລິເຄຊັນສະແຕນອະໂລນຄ່າເລີ່ມຕົ້ນຖືກປິດໄວ້.

C6X ທາງເລືອກໃນການ

- ມີນາ=ຊື່
ນີ້ລະບຸຊື່ຂອງສະຖາປັດຕະຍະກໍາເປົ້າຫມາຍ. GCC ໃຊ້ຊື່ນີ້ເພື່ອກໍານົດ
ປະເພດຂອງຄໍາແນະນໍາທີ່ມັນສາມາດປ່ອຍອອກມາເມື່ອສ້າງລະຫັດການປະກອບ. ອະນຸຍາດ
ຊື່ແມ່ນ: c62x, c64x, c64x+, c67x, c67x+, c674x.

-mbig-endian
ສ້າງລະຫັດສໍາລັບເປົ້າຫມາຍໃຫຍ່.

-mlittle-endian
ສ້າງລະຫັດສໍາລັບເປົ້າຫມາຍພຽງເລັກນ້ອຍ endian. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

- ຊິມ
ເລືອກໄຟລ໌ເລີ່ມຕົ້ນແລະຕົວເຊື່ອມຕໍ່ທີ່ເຫມາະສົມສໍາລັບ simulator.

-msdata=ຄ່າເລີ່ມຕົ້ນ
ເອົາຂໍ້ມູນຂະໜາດນ້ອຍ ແລະຂໍ້ມູນສະຖິດຢູ່ໃນໂລກ .ຂໍ້ມູນໃກ້ຄຽງ ພາກ, ເຊິ່ງຊີ້ໃຫ້ເຫັນໂດຍ
ລົງທະບຽນ "B14". ເອົາຂໍ້ມູນຂະໜາດນ້ອຍ ແລະຂໍ້ມູນສະຖິດທົ່ວໂລກທີ່ຍັງບໍ່ທັນໄດ້ເລີ່ມນຳໃຊ້ເຂົ້າໃນ .bss ພາກ,
ເຊິ່ງຢູ່ຕິດກັບ .ຂໍ້ມູນໃກ້ຄຽງ ພາກ. ເອົາຂໍ້ມູນຂະຫນາດນ້ອຍທີ່ອ່ານເທົ່ານັ້ນເຂົ້າໄປໃນ .rodata
ພາກ. ພາກສ່ວນທີ່ສອດຄ້ອງກັນທີ່ໃຊ້ສໍາລັບຂໍ້ມູນຂະຫນາດໃຫຍ່ແມ່ນ .fardata, .ໄກ
ແລະ .const.

-msdata=ທັງໝົດ
ເອົາຂໍ້ມູນທັງຫມົດ, ບໍ່ພຽງແຕ່ວັດຖຸຂະຫນາດນ້ອຍ, ເຂົ້າໄປໃນພາກສ່ວນທີ່ສະຫງວນໄວ້ສໍາລັບຂໍ້ມູນຂະຫນາດນ້ອຍ, ແລະ
ໃຊ້ທີ່ຢູ່ທີ່ກ່ຽວຂ້ອງກັບການລົງທະບຽນ "B14" ເພື່ອເຂົ້າເຖິງພວກມັນ.

-msdata=ບໍ່ມີ
ຢ່າໃຊ້ພາກສ່ວນທີ່ສະຫງວນໄວ້ສໍາລັບຂໍ້ມູນຂະຫນາດນ້ອຍ, ແລະໃຊ້ທີ່ຢູ່ຢ່າງແທ້ຈິງ
ເຂົ້າເຖິງຂໍ້ມູນທັງໝົດ. ເອົາຂໍ້ມູນທົ່ວໂລກ ແລະຂໍ້ມູນສະຖິດທີ່ຕັ້ງເບື້ອງຕົ້ນທັງໝົດໃສ່ໃນ .fardata ພາກ,
ແລະ​ຂໍ້​ມູນ​ທີ່​ບໍ່​ລິ​ເລີ່ມ​ທັງ​ຫມົດ​ໃນ​ .ໄກ ພາກ. ເອົາຂໍ້ມູນຄົງທີ່ທັງຫມົດເຂົ້າໄປໃນ .const
ສ່ວນ.

CRIS ທາງເລືອກໃນການ

ຕົວເລືອກເຫຼົ່ານີ້ຖືກກໍານົດໂດຍສະເພາະສໍາລັບພອດ CRIS.

- ມີນາ=ປະເພດສະຖາປັດຕະຍະກໍາ
-mcpu=ປະເພດສະຖາປັດຕະຍະກໍາ
ສ້າງລະຫັດສໍາລັບສະຖາປັດຕະຍະກໍາທີ່ລະບຸ. ທາງ​ເລືອກ​ສໍາ​ລັບ​ການ​ ປະເພດສະຖາປັດຕະຍະກໍາ ມີ
v3, v8 ແລະ v10 ສໍາລັບ ETRAX 4, ETRAX 100, ແລະ ETRAX 100 LX ຕາມລໍາດັບ. ຄ່າເລີ່ມຕົ້ນແມ່ນ v0
ຍົກເວັ້ນ cris-axis-linux-gnu, ບ່ອນທີ່ຄ່າເລີ່ມຕົ້ນແມ່ນ v10.

-mtune=ປະເພດສະຖາປັດຕະຍະກໍາ
ປບັ ປະເພດສະຖາປັດຕະຍະກໍາ ທຸກຢ່າງທີ່ໃຊ້ໄດ້ກ່ຽວກັບລະຫັດທີ່ສ້າງຂຶ້ນ, ຍົກເວັ້ນ
ABI ແລະຊຸດຄໍາແນະນໍາທີ່ມີຢູ່. ທາງ​ເລືອກ​ສໍາ​ລັບ​ການ​ ປະເພດສະຖາປັດຕະຍະກໍາ ມີ
ເຊັ່ນ​ດຽວ​ກັນ​ກັບ​ສໍາ​ລັບ​ການ​ - ມີນາ=ປະເພດສະຖາປັດຕະຍະກໍາ.

-mmax-stack-frame=n
ເຕືອນເມື່ອກອບ stack ຂອງຟັງຊັນເກີນ n ໄບ.

-metrax4
-metrax100
ທາງເລືອກ -metrax4 ແລະ -metrax100 ແມ່ນຄໍາສັບຄ້າຍຄືສໍາລັບ - ມີນາ=v3 ແລະ - ມີນາ=v8
ຕາມລໍາດັບ.

-mmul-bug-ແກ້ໄຂ
-mno-mul-bug-ແກ້ໄຂ
ເຮັດວຽກກ່ຽວກັບແມງໄມ້ໃນຄໍາແນະນໍາ "muls" ແລະ "mulu" ສໍາລັບຕົວແບບ CPU ທີ່ມັນ
ນຳໃຊ້. ຕົວເລືອກນີ້ແມ່ນໃຊ້ໄດ້ຕາມຄ່າເລີ່ມຕົ້ນ.

-mpdebug
ເປີດໃຊ້ຂໍ້ມູນທີ່ກ່ຽວຂ້ອງກັບການດີບັ໊ກ verbose ສະເພາະ CRIS ໃນລະຫັດການປະກອບ. ນີ້
ທາງເລືອກຍັງມີຜົນກະທົບທີ່ຈະປິດການ #NO_APP formatted-code ຕົວຊີ້ບອກເຖິງ
assembler ໃນຕອນຕົ້ນຂອງເອກະສານປະກອບ.

-mcc-init
ຢ່າໃຊ້ຜົນໄດ້ຮັບລະຫັດເງື່ອນໄຂຈາກຄໍາແນະນໍາທີ່ຜ່ານມາ; ສະເຫມີ emit ປຽບທຽບແລະ
ການທົດສອບຄໍາແນະນໍາກ່ອນທີ່ຈະນໍາໃຊ້ລະຫັດເງື່ອນໄຂ.

-mno-ຜົນຂ້າງຄຽງ
ຢ່າປ່ອຍຄໍາແນະນໍາທີ່ມີຜົນກະທົບຂ້າງຄຽງໃນໂຫມດການແກ້ໄຂນອກເຫນືອຈາກການຕອບ.
ເພີ່ມຂຶ້ນ.

-mstack-align
-mno-stack-align
-mdata-align
-mno-data-align
-mconst-align
-mno-const-align
ທາງເລືອກເຫຼົ່ານີ້ (ບໍ່ມີທາງເລືອກ) ຈັດ (ລົບລ້າງການຈັດການ) ສໍາລັບ stack-frame,
ຂໍ້​ມູນ​ສ່ວນ​ບຸກ​ຄົນ​ແລະ​ຄ່າ​ຄົງ​ທີ່​ທີ່​ຈະ​ສອດ​ຄ່ອງ​ສໍາ​ລັບ​ຂະ​ຫນາດ​ສູງ​ສຸດ​ການ​ເຂົ້າ​ເຖິງ​ຂໍ້​ມູນ​ດຽວ​
ສໍາລັບຮູບແບບ CPU ທີ່ເລືອກ. ຄ່າເລີ່ມຕົ້ນແມ່ນການຈັດລຽງການຈັດຮຽງ 32-bit. ABI
ລາຍ​ລະ​ອຽດ​ເຊັ່ນ​ຮູບ​ແບບ​ໂຄງ​ສ້າງ​ບໍ່​ໄດ້​ຮັບ​ຜົນ​ກະ​ທົບ​ໂດຍ​ທາງ​ເລືອກ​ເຫຼົ່າ​ນີ້​.

-m32-ບິດ
-m16-ບິດ
-m8-ບິດ
ຄ້າຍກັບຕົວເລືອກ stack- data- ແລະ const-align ຂ້າງເທິງ, ທາງເລືອກເຫຼົ່ານີ້ຈັດໃຫ້
stack-frame, ຂໍ້​ມູນ​ທີ່​ຂຽນ​ໄດ້​ແລະ​ຄົງ​ທີ່​ທັງ​ຫມົດ​ແມ່ນ 32-bit, 16-bit ຫຼື 8-bit ຈັດ​ລຽງ​ລໍາ​ດັບ.
ຄ່າເລີ່ມຕົ້ນແມ່ນການຈັດຮຽງ 32-ບິດ.

-mno-prologue-epilogue
-mprologue-epilogue
ກັບ -mno-prologue-epilogue, prologue ຫນ້າທີ່ປົກກະຕິແລະ epilogue ທີ່ສ້າງຕັ້ງຂຶ້ນ
ຂອບ stack ໄດ້ຖືກລະເວັ້ນແລະບໍ່ມີຄໍາແນະນໍາກັບຄືນຫຼືລໍາດັບການກັບຄືນ
ສ້າງຂຶ້ນໃນລະຫັດ. ໃຊ້ທາງເລືອກນີ້ພຽງແຕ່ຮ່ວມກັບການກວດສອບສາຍຕາຂອງ
ລະຫັດທີ່ລວບລວມ: ບໍ່ມີການເຕືອນຫຼືຄວາມຜິດພາດທີ່ສ້າງຂຶ້ນໃນເວລາທີ່ບັນທຶກການໂທຕ້ອງລົງທະບຽນ
ບັນທຶກ, ຫຼືການເກັບຮັກສາສໍາລັບຕົວແປທ້ອງຖິ່ນຕ້ອງໄດ້ຮັບການຈັດສັນ.

-mno-gotplt
-mgotplt
ກັບ -fpic ແລະ -fPIC, ບໍ່ສ້າງ (ເຮັດສ້າງ) ລໍາດັບຄໍາແນະນໍາທີ່ໂຫລດ
ທີ່ຢູ່ສໍາລັບຫນ້າທີ່ຈາກສ່ວນ PLT ຂອງ GOT ແທນທີ່ຈະ (ແບບດັ້ງເດີມກ່ຽວກັບອື່ນໆ
ສະຖາປັດຕະຍະກໍາ) ໂທຫາ PLT. ຄ່າເລີ່ມຕົ້ນແມ່ນ -mgotplt.

-melf
ຕົວເລືອກ no-op ແບບເກົ່າຖືກຮັບຮູ້ກັບ cris-axis-elf ແລະ cris-axis-linux-gnu ເທົ່ານັ້ນ
ເປົ້າ ໝາຍ.

-mlinux
ຕົວເລືອກ no-op ແບບເກົ່າຖືກຮັບຮູ້ກັບເປົ້າໝາຍ cris-axis-linux-gnu ເທົ່ານັ້ນ.

-ຊິມ
ທາງ​ເລືອກ​ນີ້​, ຮັບ​ຮູ້​ສໍາ​ລັບ cris-axis-elf ຈັດ​ການ​ເພື່ອ​ເຊື່ອມ​ຕໍ່​ກັບ​ການ​ປ້ອນ​ຂໍ້​ມູນ​ອອກ​
ຟັງຊັນຈາກຫ້ອງສະຫມຸດ simulator. ລະຫັດ, ຂໍ້ມູນເບື້ອງຕົ້ນ ແລະຂໍ້ມູນເບື້ອງຕົ້ນເປັນສູນ
ຖືກຈັດສັນຕິດຕໍ່ກັນ.

-sim2
ຄື -ຊິມແຕ່ຜ່ານຕົວເລືອກຕົວເຊື່ອມຕໍ່ເພື່ອຊອກຫາຂໍ້ມູນເບື້ອງຕົ້ນຢູ່ທີ່ 0x40000000 ແລະສູນ.
ຂໍ້ມູນເບື້ອງຕົ້ນຢູ່ທີ່ 0x80000000.

CR16 ທາງເລືອກໃນການ

ຕົວເລືອກເຫຼົ່ານີ້ຖືກກໍານົດໂດຍສະເພາະສໍາລັບພອດ CR16.

-mmac
ເປີດການນຳໃຊ້ຄຳແນະນຳການຄູນສະສົມ. ປິດການນຳໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-mcr16cplus
-mcr16c
ສ້າງລະຫັດສໍາລັບສະຖາປັດຕະຍະກໍາ CR16C ຫຼື CR16C+. ສະຖາປັດຕະຍະກຳ CR16C+ ເປັນຄ່າເລີ່ມຕົ້ນ.

- ຊິມ
ເຊື່ອມຕໍ່ຫ້ອງສະໝຸດ libsim.a ທີ່ເຂົ້າກັນໄດ້ກັບເຄື່ອງຈຳລອງ. ໃຊ້ໄດ້ກັບ elf
compiler ເທົ່ານັ້ນ.

- mint32
ເລືອກປະເພດຈຳນວນເຕັມເປັນ 32-bit wide.

-mbit-ops
ສ້າງຄໍາແນະນໍາ sbit / cbit ສໍາລັບການຫມູນໃຊ້ບິດ.

-mdata-model=ຮູບແບບ
ເລືອກຮູບແບບຂໍ້ມູນ. ທາງ​ເລືອກ​ສໍາ​ລັບ​ການ​ ຮູບແບບ ມີ ຢູ່ໃກ້, ໄກ or ຂະຫນາດກາງ. ຂະຫນາດກາງ ເປັນຄ່າເລີ່ມຕົ້ນ.
ຢ່າງໃດກໍຕາມ, ໄກ ບໍ່ຖືກຕ້ອງເມື່ອຕົວເລືອກ -mcr16c ຖືກເລືອກເປັນສະຖາປັດຕະຍະກໍາ CR16C ບໍ່
ສະຫນັບສະຫນູນຮູບແບບຂໍ້ມູນໄກ.

Darwin ທາງເລືອກໃນການ

ຕົວເລືອກເຫຼົ່ານີ້ຖືກກໍານົດສໍາລັບສະຖາປັດຕະຍະກໍາທັງຫມົດທີ່ໃຊ້ລະບົບປະຕິບັດການ Darwin.

FSF GCC on Darwin ບໍ່ສ້າງໄຟລ໌ວັດຖຸ "ໄຂມັນ"; ມັນຈະສ້າງໄຟລ໌ວັດຖຸສໍາລັບ
ສະຖາປັດຕະຍະກໍາດຽວທີ່ມັນຖືກສ້າງຂຶ້ນເພື່ອເປົ້າຫມາຍ. GCC ຂອງ Apple ໃນ Darwin ສ້າງ
ໄຟລ໌ "ໄຂມັນ" ຖ້າຫຼາຍ -ໂຄ້ງ ທາງເລືອກທີ່ຖືກນໍາໃຊ້; ມັນເຮັດແນວນັ້ນໂດຍການແລ່ນ compiler ຫຼື
linker ຫຼາຍຄັ້ງແລະເຂົ້າຮ່ວມຜົນໄດ້ຮັບຮ່ວມກັນກັບ lipo.

ປະເພດຍ່ອຍຂອງໄຟລ໌ທີ່ສ້າງຂຶ້ນ (ເຊັ່ນ: ppc7400 or ppc970 or i686) ຖືກ​ກໍາ​ນົດ​ໂດຍ​
ທຸງທີ່ລະບຸ ISA ທີ່ GCC ກໍາລັງຕັ້ງເປົ້າຫມາຍ, ເຊັ່ນ: -mcpu or - ມີນາ. ໄດ້
-force_cpusubtype_ALL ທາງເລືອກສາມາດຖືກນໍາໃຊ້ເພື່ອ override ນີ້.

ເຄື່ອງມືຂອງ Darwin ແຕກຕ່າງກັນໃນພຶດຕິກໍາຂອງພວກເຂົາເມື່ອນໍາສະເຫນີກັບ ISA ບໍ່ກົງກັນ. ໄດ້
ເຄື່ອງປະກອບ, as, ຈະອະນຸຍາດໃຫ້ພຽງແຕ່ຄໍາແນະນໍາທີ່ຈະນໍາໃຊ້ທີ່ຖືກຕ້ອງສໍາລັບປະເພດຍ່ອຍຂອງ
ໄຟລ໌ທີ່ມັນກໍາລັງສ້າງ, ດັ່ງນັ້ນທ່ານບໍ່ສາມາດໃສ່ຄໍາແນະນໍາ 64-bit ໃນ a ppc750 ໄຟລ object ວັດຖຸ.
ຕົວເຊື່ອມຕໍ່ສໍາລັບຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນ, /usr/bin/libtool, ຈະລົ້ມເຫລວແລະພິມຂໍ້ຜິດພາດຖ້າຖືກຖາມ
ເພື່ອສ້າງຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນທີ່ມີປະເພດຍ່ອຍທີ່ຈໍາກັດຫນ້ອຍກວ່າໄຟລ໌ປ້ອນຂໍ້ມູນຂອງມັນ (ສໍາລັບ
ຕົວຢ່າງ, ພະຍາຍາມເອົາ a ppc970 ໄຟລ໌ວັດຖຸໃນ a ppc7400 ຫໍສະຫມຸດ). ຕົວເຊື່ອມຕໍ່ສໍາລັບ
ການ​ປະ​ຕິ​ບັດ​ໄດ້​, ld, ຊື່ໆຈະໃຫ້ການປະຕິບັດການຍ່ອຍທີ່ຈໍາກັດທີ່ສຸດຂອງໃດໆ
ໄຟລ໌ປ້ອນຂໍ້ມູນຂອງມັນ.

-Fdir
ເພີ່ມໄດເລກະທໍລີກອບ dir ໄປຫາຫົວຂອງບັນຊີລາຍຊື່ຂອງໄດເລກະທໍລີທີ່ຈະຄົ້ນຫາ
ສໍາລັບໄຟລ໌ header. ລາຍ ການ ເຫຼົ່າ ນີ້ ແມ່ນ interleaved ກັບ ທີ່ ກໍາ ນົດ ໄວ້ ໂດຍ -I
ທາງ​ເລືອກ​ແລະ​ຖືກ​ສະ​ແກນ​ໃນ​ລໍາ​ດັບ​ຊ້າຍ​ຫາ​ຂວາ​.

ໄດເລກະທໍລີກອບແມ່ນໄດເລກະທໍລີທີ່ມີກອບໃນມັນ. ກອບເປັນ
ໄດເລກະທໍລີທີ່ມີ a "ສ່ວນຫົວ" ແລະ / ຫຼື "ສ່ວນຫົວສ່ວນຕົວ" ໄດເລກະທໍລີທີ່ມີຢູ່ໃນນັ້ນ
ທີ່ສິ້ນສຸດໃນ ".ກອບ". ຊື່ຂອງກອບເປັນຊື່ຂອງໄດເລກະທໍລີນີ້
ບໍ່ລວມ ".ກອບ". ສ່ວນຫົວທີ່ກ່ຽວຂ້ອງກັບກອບແມ່ນພົບເຫັນຢູ່ໃນຫນຶ່ງໃນ
ທັງສອງໄດເລກະທໍລີ, ກັບ "ສ່ວນຫົວ" ຖືກຄົ້ນຫາກ່ອນ. ກອບຍ່ອຍແມ່ນ ກ
ໄດເລກະທໍລີກອບທີ່ຢູ່ໃນກອບຂອງ "ກອບ" ໄດເລກະທໍລີ. ລວມມີ
subframework headers ພຽງແຕ່ສາມາດປາກົດຢູ່ໃນສ່ວນຫົວຂອງກອບທີ່ປະກອບດ້ວຍ
subframework, ຫຼືຢູ່ໃນຫົວຂໍ້ subframework ພີ່ນ້ອງ. ສອງ subframeworks ແມ່ນອ້າຍນ້ອງຖ້າຫາກວ່າ
ພວກມັນເກີດຂື້ນໃນກອບດຽວກັນ. ກອບຍ່ອຍບໍ່ຄວນມີຊື່ດຽວກັນກັບ a
ໂຄງຮ່າງການ, ການເຕືອນໄພຈະຖືກອອກຖ້າຫາກວ່ານີ້ແມ່ນການລະເມີດ. ໃນປັດຈຸບັນເປັນກອບຍ່ອຍ
ບໍ່ສາມາດມີ subframeworks, ໃນອະນາຄົດ, ກົນໄກການອາດຈະໄດ້ຮັບການຂະຫຍາຍເພື່ອສະຫນັບສະຫນູນ
ນີ້. ກອບມາດຕະຖານສາມາດພົບເຫັນຢູ່ໃນ "/ລະບົບ/ຫ້ອງສະໝຸດ/ກອບ" ແລະ
"/ຫ້ອງສະໝຸດ/ກອບ". ຕົວຢ່າງປະກອບມີເບິ່ງຄືວ່າ "#include ",
ບ່ອນທີ່ Framework ຫມາຍເຖິງຊື່ຂອງກອບແລະ header.h ແມ່ນພົບເຫັນຢູ່ໃນ
"ສ່ວນຫົວສ່ວນຕົວ" or "ສ່ວນຫົວ" ລະບົບ.

- ໂຄງ​ການ​ຮູບ​ພາບ​dir
ຄື -F ຍົກ​ເວັ້ນ​ລະ​ບົບ​ແມ່ນ​ໄດ້​ຮັບ​ການ​ປິ່ນ​ປົວ​ເປັນ​ລະ​ບົບ​ລະ​ບົບ​. ຄວາມແຕກຕ່າງຕົ້ນຕໍ
ລະຫວ່າງນີ້ - ໂຄງ​ການ​ຮູບ​ພາບ​ ແລະ -F ແມ່ນ ວ່າ ມີ - ໂຄງ​ການ​ຮູບ​ພາບ​ compiler ບໍ່ໄດ້ເຕືອນ
ກ່ຽວກັບໂຄງສ້າງທີ່ມີຢູ່ໃນໄຟລ໌ header ພົບເຫັນຜ່ານ dir. ຕົວເລືອກນີ້ແມ່ນຖືກຕ້ອງ
ພຽງ​ແຕ່​ສໍາ​ລັບ​ຄອບ​ຄົວ C ຂອງ​ພາ​ສາ​.

-gused
ປ່ອຍຂໍ້ມູນການດີບັກສໍາລັບສັນຍາລັກທີ່ຖືກນໍາໃຊ້. ສໍາລັບຮູບແບບການດີບັກ STABS,
ອັນນີ້ເຮັດໃຫ້ -feliminate-unused-debug-ສັນຍາລັກ. ອັນນີ້ແມ່ນຕາມຄ່າເລີ່ມຕົ້ນ ON.

- gfull
ປ່ອຍຂໍ້ມູນການດີບັກສຳລັບສັນຍາລັກ ແລະປະເພດທັງໝົດ.

-mmacosx-version-min=ສະບັບພາສາ
ເວີຊັ່ນທຳອິດຂອງ MacOS X ທີ່ executable ນີ້ຈະເປີດໃຊ້ໄດ້ ສະບັບພາສາ. ທຳ ມະດາ
ຄຸນຄ່າຂອງ ສະບັບພາສາ ລວມມີ 10.1, 10.2, ແລະ 10.3.9.

ຖ້າ compiler ຖືກສ້າງຂຶ້ນເພື່ອໃຊ້ headers ຂອງລະບົບໂດຍຄ່າເລີ່ມຕົ້ນ, ຫຼັງຈາກນັ້ນຄ່າເລີ່ມຕົ້ນສໍາລັບ
ທາງເລືອກນີ້ແມ່ນສະບັບລະບົບທີ່ compiler ກໍາລັງແລ່ນ, ຖ້າບໍ່ດັ່ງນັ້ນ
ຄ່າເລີ່ມຕົ້ນແມ່ນເພື່ອເຮັດໃຫ້ທາງເລືອກທີ່ເຂົ້າກັນໄດ້ກັບລະບົບແລະຖານລະຫັດຫຼາຍເທົ່າ
ເປັນໄປໄດ້.

- mkernel
ເປີດໃຊ້ຮູບແບບການພັດທະນາ kernel. ໄດ້ - mkernel ຊຸດທາງເລືອກ -static, -fno-ທົ່ວໄປ,
-fno-cxa-atexit, -fno-ຂໍ້ຍົກເວັ້ນ, -fno-ບໍ່ແມ່ນການໂທ-ຂໍ້ຍົກເວັ້ນ, -fapple-kext, -fno-ອ່ອນແອ
ແລະ -fno-rtti ບ່ອນ​ທີ່​ສາ​ມາດ​ໃຊ້​ໄດ້​. ໂໝດນີ້ຍັງຕັ້ງ -mno-altivec, -msoft-float,
-fno-builtin ແລະ - ສາຂາ ມ ສໍາລັບເປົ້າຫມາຍ PowerPC.

-mone-byte-bool
ລົບລ້າງຄ່າເລີ່ມຕົ້ນສຳລັບ bool ດັ່ງ​ນັ້ນ sizeof(bool)==1. ໂດຍຄ່າເລີ່ມຕົ້ນ ຂະ​ຫນາດ​ຂອງ (bool​) is 4
ເມື່ອລວບລວມຂໍ້ມູນສໍາລັບ Darwin/PowerPC ແລະ 1 ເມື່ອລວບລວມສໍາລັບ Darwin / x86, ດັ່ງນັ້ນທາງເລືອກນີ້
ບໍ່ມີຜົນຕໍ່ x86.

ຄໍາເຕືອນ: ໄດ້ -mone-byte-bool switch ເຮັດໃຫ້ GCC ສ້າງລະຫັດທີ່ບໍ່ແມ່ນ binary
ເຂົ້າກັນໄດ້ກັບລະຫັດທີ່ສ້າງຂຶ້ນໂດຍບໍ່ມີການສະຫຼັບນັ້ນ. ການໃຊ້ສະວິດນີ້ອາດຈະຕ້ອງການ
recompiling ໂມດູນອື່ນໆທັງຫມົດໃນໂຄງການ, ລວມທັງຫ້ອງສະຫມຸດລະບົບ. ໃຊ້ນີ້
ສະຫຼັບເພື່ອປະຕິບັດຕາມແບບຂໍ້ມູນທີ່ບໍ່ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-mfix-and-continue
-ffix-and-ສືບຕໍ່
-findirect-ຂໍ້ມູນ
ສ້າງລະຫັດທີ່ເຫມາະສົມສໍາລັບການພັດທະນາຢ່າງໄວວາ. ຕ້ອງການເປີດໃຊ້ gdb
ໂຫຼດໄຟລ໌ ".o" ແບບໄດນາມິກເຂົ້າໄປໃນໂປຼແກຼມທີ່ເຮັດວຽກຢູ່ແລ້ວ. -findirect-ຂໍ້ມູນ ແລະ
-ffix-and-ສືບຕໍ່ ໄດ້ຖືກສະຫນອງໃຫ້ສໍາລັບການເຂົ້າກັນໄດ້ກັບຄືນໄປບ່ອນ.

-all_load
ໂຫຼດສະມາຊິກທັງໝົດຂອງຫ້ອງສະໝຸດຄັງເກັບຖາວອນ. ເບິ່ງຜູ້ຊາຍ ld(1) ສໍາລັບຂໍ້ມູນເພີ່ມເຕີມ.

-arch_errors_fatal
ເຮັດໃຫ້ຄວາມຜິດພາດທີ່ເກີດຂຶ້ນກັບໄຟລ໌ທີ່ມີສະຖາປັດຕະຍະກໍາທີ່ບໍ່ຖືກຕ້ອງເຮັດໃຫ້ຕາຍ.

-bind_at_load
ເຮັດໃຫ້ໄຟລ໌ຜົນຜະລິດຖືກໝາຍໄວ້ວ່າຕົວເຊື່ອມຕໍ່ແບບເຄື່ອນໄຫວຈະຜູກມັດທັງໝົດ
ການອ້າງອີງທີ່ບໍ່ໄດ້ກໍານົດໃນເວລາທີ່ໄຟລ໌ຖືກໂຫລດຫຼືເປີດຕົວ.

- ມັດ
ຜະລິດໄຟລ໌ຮູບແບບມັດ Mach-o. ເບິ່ງຜູ້ຊາຍ ld(1) ສໍາລັບຂໍ້ມູນເພີ່ມເຕີມ.

-bundle_loader ປະຕິບັດໄດ້
ທາງ​ເລືອກ​ນີ້​ລະ​ບຸ​ ປະຕິບັດໄດ້ ທີ່ຈະໄດ້ຮັບການໂຫຼດໄຟລ໌ຜົນຜະລິດການກໍ່ສ້າງເປັນ
ເຊື່ອມຕໍ່. ເບິ່ງຜູ້ຊາຍ ld(1) ສໍາລັບຂໍ້ມູນເພີ່ມເຕີມ.

-dynamiclib
ເມື່ອຜ່ານທາງເລືອກນີ້, GCC ຈະຜະລິດຫ້ອງສະຫມຸດແບບເຄື່ອນໄຫວແທນທີ່ຈະເປັນການປະຕິບັດ
ໃນເວລາທີ່ເຊື່ອມຕໍ່, ການນໍາໃຊ້ Darwin libtool ຄໍາສັ່ງ.

-force_cpusubtype_ALL
ນີ້ເຮັດໃຫ້ໄຟລ໌ຜົນຜະລິດຂອງ GCC ມີ ທັງຫມົດ subtype, ແທນທີ່ຈະເປັນຫນຶ່ງຄວບຄຸມໂດຍ
ໄດ້ -mcpu or - ມີນາ ທາງເລືອກ.

-allowable_client client_name
-client_name
-compatibility_version
- ຮຸ່ນ_ປະຈຸບັນ
-dead_strip
-dependency-file
-dylib_file
-dylinker_install_name
- ແບບເຄື່ອນໄຫວ
-exported_symbols_list
- ບັນ​ຊີ​ລາຍ​ການ​
-flat_namespace
-force_flat_namespace
-headerpad_max_install_names
-image_base
-ໃນ​ມັນ
-install_name
-keep_private_externs
-multi_module
-multiply_defined
-multiply_defined_unused
-noall_load
-no_dead_strip_inits_and_terms
-nofixprebinding
- ນາມສະກຸນ
- noprebind
-noseglinkedit
-pagezero_size
- prebind
-prebind_all_twolevel_modules
-private_bundle
-read_only_relocs
-sectalign
-sectobject ສັນ​ຍາ​ລັກ​
- ເປັນ​ຫຍັງ​ການ​ໂຫຼດ​
-seg1 addr
-sectcreate
-sectobject ສັນ​ຍາ​ລັກ​
- ຂະ​ແຫນງ​ການ​
-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
-single_module
-static
-sub_library
-sub_umbrella
- twolevel_namespace
- ຄັນຮົ່ມ
- ບໍ່​ໄດ້​ກໍາ​ນົດ​
-unexported_symbols_list
-weak_reference_mismatch
- whatsloaded
ທາງເລືອກເຫຼົ່ານີ້ແມ່ນຖືກສົ່ງໄປຫາຕົວເຊື່ອມຕໍ່ Darwin. ຫນ້າທີ່ Darwin linker man ອະທິບາຍ
ເຂົາເຈົ້າໃນລາຍລະອຽດ.

DEC Alpha ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ -m ທາງເລືອກແມ່ນຖືກກໍານົດສໍາລັບການຈັດຕັ້ງປະຕິບັດ DEC Alpha:

-mno-soft-float
-msoft-float
ໃຊ້ (ບໍ່ໃຊ້) ຄໍາແນະນໍາຈຸດລອຍຂອງຮາດແວສໍາລັບຈຸດລອຍ
ການດໍາເນີນງານ. ເມື່ອ​ໃດ​ -msoft-float ຖືກກໍານົດ, ຫນ້າທີ່ຢູ່ໃນ libgcc.a ຈະຖືກນໍາໃຊ້ເພື່ອ
ປະຕິບັດການດໍາເນີນງານຈຸດລອຍ. ເວັ້ນເສຍແຕ່ວ່າພວກມັນຖືກແທນທີ່ດ້ວຍກິດຈະວັດທີ່ເຮັດຕາມແບບຢ່າງ
ການດໍາເນີນງານຈຸດທີ່ເລື່ອນໄດ້, ຫຼືລວບລວມໃນລັກສະນະເຊັ່ນການເອີ້ນ emulations ດັ່ງກ່າວ
ປົກກະຕິ, ປົກກະຕິເຫຼົ່ານີ້ຈະອອກການດໍາເນີນງານຈຸດທີ່ເລື່ອນໄດ້. ຖ້າທ່ານກໍາລັງລວບລວມ
ສໍາລັບ Alpha ໂດຍບໍ່ມີການປະຕິບັດການຈຸດເລື່ອນ, ທ່ານຕ້ອງຮັບປະກັນວ່າຫ້ອງສະຫມຸດແມ່ນ
ສ້າງຂຶ້ນເພື່ອບໍ່ໃຫ້ໂທຫາເຂົາເຈົ້າ.

ໃຫ້ສັງເກດວ່າການປະຕິບັດ Alpha ໂດຍບໍ່ມີການປະຕິບັດການຈຸດລອຍແມ່ນຈໍາເປັນທີ່ຈະມີ
ການລົງທະບຽນຈຸດລອຍ.

-mfp-reg
-mno-fp-regs
ສ້າງລະຫັດທີ່ໃຊ້ (ບໍ່ໃຊ້) ຊຸດລົງທະບຽນຈຸດລອຍ. -mno-fp-regs
implies -msoft-float. ຖ້າຊຸດການລົງທະບຽນຈຸດລອຍບໍ່ໄດ້ຖືກນໍາໃຊ້, ຈຸດລອຍ
operands ຖືກສົ່ງຜ່ານໃນຈໍານວນ integer registers ຄືກັບວ່າພວກມັນເປັນ integers ແລະ floating-point
ຜົນໄດ້ຮັບແມ່ນຜ່ານໃນ $0 ແທນທີ່ຈະເປັນ $f0. ນີ້ແມ່ນລໍາດັບການໂທທີ່ບໍ່ແມ່ນມາດຕະຖານ, ດັ່ງນັ້ນ
ຟັງຊັນໃດນຶ່ງທີ່ມີການໂຕ້ຖຽງຈຸດລອຍ ຫຼືຄ່າສົ່ງຄືນ ເອີ້ນວ່າໂດຍລະຫັດທີ່ລວບລວມ
ກັບ -mno-fp-regs ຕ້ອງຖືກລວບລວມດ້ວຍທາງເລືອກນັ້ນ.

ການນໍາໃຊ້ແບບປົກກະຕິຂອງທາງເລືອກນີ້ແມ່ນການສ້າງແກ່ນທີ່ບໍ່ໃຊ້, ແລະເພາະສະນັ້ນຈຶ່ງຕ້ອງການ
ບໍ່ບັນທຶກແລະຟື້ນຟູ, ລົງທະບຽນຈຸດລອຍ.

-ມີ່
ສະຖາປັດຕະຍະກຳ Alpha ນຳໃຊ້ຮາດແວຈຸດລອຍທີ່ປັບແຕ່ງໄດ້ສູງສຸດ
ການປະຕິບັດ. ມັນສ່ວນຫຼາຍແມ່ນປະຕິບັດຕາມມາດຕະຖານ IEEE. ແນວໃດກໍ່ຕາມ,
ສໍາລັບການປະຕິບັດຕາມຢ່າງເຕັມທີ່, ການຊ່ວຍເຫຼືອຊອບແວແມ່ນຕ້ອງການ. ຕົວເລືອກນີ້ສ້າງລະຫັດ
ລະຫັດທີ່ສອດຄ່ອງກັບ IEEE ຢ່າງສົມບູນ ຍົກເວັ້ນ ວ່າ inexact-ທຸງ ບໍ່ໄດ້ຖືກຮັກສາ (ເບິ່ງຂ້າງລຸ່ມນີ້).
ຖ້າຕົວເລືອກນີ້ຖືກເປີດໃຊ້, ເມໂຄໂປເຊດເຊີກ່ອນ "_IEEE_FP" ຖືກກໍານົດໃນລະຫວ່າງ
ການລວບລວມ. ລະຫັດຜົນໄດ້ຮັບແມ່ນມີປະສິດທິພາບຫນ້ອຍແຕ່ສາມາດສະຫນັບສະຫນູນຢ່າງຖືກຕ້ອງ
ຕົວເລກ denormalized ແລະຄ່າ IEEE ພິເສດເຊັ່ນ: not-a-number ແລະ plus/minus
ບໍ່ມີຂອບເຂດ. Alpha compilers ອື່ນເອີ້ນທາງເລືອກນີ້ -ieee_with_no_inexact.

-mieee-with-inexact
ນີ້ແມ່ນຄ້າຍຄື -ມີ່ ຍົກເວັ້ນລະຫັດທີ່ສ້າງຂຶ້ນຍັງຮັກສາ IEEE inexact-ທຸງ.
ການເປີດຕົວເລືອກນີ້ເຮັດໃຫ້ລະຫັດທີ່ສ້າງຂຶ້ນເພື່ອປະຕິບັດ IEEE ທີ່ສອດຄ່ອງຢ່າງເຕັມສ່ວນ
ຄະນິດສາດ. ນອກເໜືອໄປຈາກ "_IEEE_FP", "_IEEE_FP_EXACT" ໄດ້ຖືກກຳນົດວ່າເປັນມະຫາພາກກ່ອນໂປຣເຊສເຊີ.
ໃນບາງການປະຕິບັດ Alpha ລະຫັດຜົນໄດ້ຮັບອາດຈະປະຕິບັດຊ້າກວ່າຢ່າງຫຼວງຫຼາຍ
ລະຫັດທີ່ສ້າງຂຶ້ນໂດຍຄ່າເລີ່ມຕົ້ນ. ເນື່ອງຈາກວ່າມີລະຫັດຫນ້ອຍຫຼາຍທີ່ຂຶ້ນກັບ
inexact-ທຸງ, ໂດຍປົກກະຕິທ່ານບໍ່ຄວນລະບຸທາງເລືອກນີ້. Alpha compilers ອື່ນໂທຫາ
ຕົວເລືອກນີ້ -ieee_with_inexact.

-mfp-trap-mode=ໂຫມດໃສ່ກັບດັກ
ຕົວເລືອກນີ້ຄວບຄຸມສິ່ງທີ່ດັກຈັບທີ່ກ່ຽວຂ້ອງກັບຈຸດລອຍໄດ້ຖືກເປີດໃຊ້. Alpha ອື່ນໆ
compilers ເອີ້ນທາງເລືອກນີ້ -fptm ໂຫມດໃສ່ກັບດັກ. ຮູບແບບການໃສ່ກັບດັກສາມາດຖືກຕັ້ງເປັນຫນຶ່ງໃນສີ່
ຄຸນຄ່າ:

n ນີ້ແມ່ນການຕັ້ງຄ່າເລີ່ມຕົ້ນ (ປົກກະຕິ). ການໃສ່ກັບດັກພຽງແຕ່ຖືກເປີດໃຊ້ແມ່ນ
ຊອບແວທີ່ບໍ່ສາມາດປິດການໃຊ້ງານໄດ້ (ເຊັ່ນ: ການແບ່ງແຍກດ້ວຍຈັ່ນຈັບສູນ).

u ນອກ​ເຫນືອ​ໄປ​ຈາກ​ກັບ​ດັກ​ເປີດ​ໃຫ້​ໃຊ້​ງານ​ໂດຍ n, ກັບດັກ underflow ແມ່ນເປີດໃຊ້ເຊັ່ນດຽວກັນ.

su ຄື u, ແຕ່ຄໍາແນະນໍາໄດ້ຖືກຫມາຍວ່າປອດໄພສໍາລັບການສໍາເລັດຊອບແວ (ເບິ່ງ
ຄູ່ມືສະຖາປັດຕະຍະກໍາ Alpha ສໍາລັບລາຍລະອຽດ).

ເກມ heroine ເຫມາະສົມ ຄື su, ແຕ່ໃສ່ກັບດັກ inexact ໄດ້ຖືກເປີດໃຊ້ເຊັ່ນດຽວກັນ.

-mfp-rounding-mode=ຮູບ​ແບບ​ມົນ​
ເລືອກໂໝດການໝຸນຂອງ IEEE. Alpha compilers ອື່ນເອີ້ນທາງເລືອກນີ້ -fprm
ຮູບ​ແບບ​ມົນ​. ໄດ້ ຮູບ​ແບບ​ມົນ​ ສາມາດເປັນຫນຶ່ງໃນ:

n ໂໝດ IEEE ປົກກະຕິ. ຕົວເລກຈຸດທີ່ລອຍຕົວຖືກປັດໄປຫາທີ່ໃກ້ທີ່ສຸດ
ໝາຍເລກເຄື່ອງ ຫຼື ຕໍ່ກັບໝາຍເລກເຄື່ອງຄູ່ ໃນກໍລະນີທີ່ມີການຜູກມັດ.

m ຮອບໄປສູ່ການລົບ infinity.

c ໂໝດການໝຸນຕັດແລ້ວ. ຕົວເລກຈຸດລອຍຕົວຖືກປັດໄປຫາສູນ.

d ໂໝດການໝຸນແບບໄດນາມິກ. ພາກສະຫນາມຢູ່ໃນທະບຽນຄວບຄຸມຈຸດລອຍ (fpcr, ເບິ່ງ
ຄູ່​ມື​ການ​ອ້າງ​ອີງ​ສະ​ຖາ​ປັດ​ຕະ​ຍະ​ກໍາ Alpha​) ຄວບ​ຄຸມ​ຮູບ​ແບບ​ການ​ມົນ​ມີ​ຜົນ​ກະ​ທົບ​. ຄ
ຫ້ອງສະໝຸດເລີ່ມການລົງທະບຽນນີ້ສຳລັບການຫັນໄປສູ່ບວກບວກ. ດັ່ງນັ້ນ,
ເວັ້ນເສຍແຕ່ວ່າໂຄງການຂອງທ່ານດັດແກ້ fpcr, d ເທົ່າກັບຮອບໄປສູ່ບວກ
ບໍ່ມີຂອບເຂດ.

-mtrap-precision=ຈັ່ນຈັບຄວາມແມ່ນຍໍາ
ໃນສະຖາປັດຕະຍະກໍາ Alpha, ກັບດັກຈຸດລອຍແມ່ນບໍ່ຊັດເຈນ. ນີ້ຫມາຍຄວາມວ່າບໍ່ມີ
ການຊ່ວຍເຫຼືອຊອບແວມັນເປັນໄປບໍ່ໄດ້ທີ່ຈະຟື້ນຕົວຈາກຈັ່ນຈັບທີ່ເລື່ອນໄດ້ແລະໂຄງການ
ການປະຕິບັດປົກກະຕິຈໍາເປັນຕ້ອງໄດ້ຢຸດເຊົາ. GCC ສາມາດສ້າງລະຫັດທີ່ສາມາດຊ່ວຍໄດ້
ດັກຈັບລະບົບປະຕິບັດງານໃນການກໍານົດສະຖານທີ່ທີ່ແນ່ນອນທີ່ເຮັດໃຫ້ເກີດ a
ກັບດັກຈຸດລອຍ. ອີງຕາມຄວາມຕ້ອງການຂອງຄໍາຮ້ອງສະຫມັກ, ແຕກຕ່າງກັນ
ລະດັບຄວາມແມ່ນຍໍາສາມາດເລືອກໄດ້:

p ຄວາມແມ່ນຍໍາຂອງໂຄງການ. ທາງ​ເລືອກ​ນີ້​ແມ່ນ​ຄ່າ​ເລີ່ມ​ຕົ້ນ​ແລະ​ຫມາຍ​ຄວາມ​ວ່າ​ຜູ້​ຈັດ​ການ​ກັບ​ດັກ​ສາ​ມາດ​ພຽງ​ແຕ່​
ລະບຸວ່າໂຄງການໃດເຮັດໃຫ້ເກີດຂໍ້ຍົກເວັ້ນຈຸດລອຍ.

f ຄວາມແມ່ນຍໍາຂອງຫນ້າທີ່. ຕົວຈັບຈັ່ນຈັບສາມາດກໍານົດຫນ້າທີ່ທີ່ເຮັດໃຫ້ເກີດ a
ຂໍ້ຍົກເວັ້ນຈຸດລອຍ.

i ຄວາມແມ່ນຍໍາຂອງຄໍາແນະນໍາ. ຕົວຈັບຈັ່ນຈັບສາມາດກໍານົດຄໍາແນະນໍາທີ່ແນ່ນອນ
ເຮັດໃຫ້ເກີດມີການຍົກເວັ້ນຈຸດລອຍ.

Alpha compilers ອື່ນໆສະຫນອງທາງເລືອກທີ່ທຽບເທົ່າທີ່ເອີ້ນວ່າ -scope_safe ແລະ
-resumption_safe.

-mieee-ສອດຄ່ອງ
ຕົວເລືອກນີ້ໝາຍເຖິງລະຫັດທີ່ສ້າງຂຶ້ນເປັນຄວາມສອດຄ່ອງຂອງ IEEE. ເຈົ້າບໍ່ຕ້ອງໃຊ້ຕົວເລືອກນີ້
ເວັ້ນເສຍແຕ່ວ່າທ່ານຍັງລະບຸ -mtrap-precision=i ແລະທັງ -mfp-trap-mode=su or
-mfp-trap-mode=sui. ຜົນກະທົບພຽງແຕ່ຂອງມັນແມ່ນການ emit ສາຍ .ທຸງ 48 ໃນ​ຫນ້າ​ທີ່​
prologue ຂອງໄຟລ໌ປະກອບທີ່ສ້າງຂຶ້ນ. ພາຍໃຕ້ DEC Unix, ນີ້ມີຜົນກະທົບທີ່
ປົກກະຕິຫ້ອງສະໝຸດຄະນິດສາດທີ່ສອດຄ່ອງກັບ IEEE ຈະຖືກເຊື່ອມຕໍ່ເຂົ້າ.

-mbuild-ຄົງທີ່
ໂດຍປົກກະຕິ GCC ກວດສອບຄ່າຄົງທີ່ 32- ຫຼື 64-bit ເພື່ອເບິ່ງວ່າມັນສາມາດສ້າງມັນໄດ້ບໍ
ຈາກຄ່າຄົງທີ່ນ້ອຍກວ່າໃນສອງຫຼືສາມຄໍາແນະນໍາ. ຖ້າ​ຫາກ​ວ່າ​ມັນ​ບໍ່​ສາ​ມາດ​, ມັນ​ຈະ​ສົ່ງ​ຜົນ​ຜະ​ລິດ​ໄດ້​
ຄົງທີ່ເປັນຕົວໜັງສື ແລະສ້າງລະຫັດເພື່ອໂຫລດມັນຈາກພາກສ່ວນຂໍ້ມູນໃນເວລາແລ່ນ.

ໃຊ້ຕົວເລືອກນີ້ເພື່ອຮຽກຮ້ອງໃຫ້ GCC ກໍ່ສ້າງ ທັງຫມົດ ຕົວເລກຄົງທີ່ໂດຍໃຊ້ລະຫັດ, ເຖິງແມ່ນວ່າ
ມັນໃຊ້ເວລາຄໍາແນະນໍາຫຼາຍ (ສູງສຸດແມ່ນຫົກ).

ໂດຍປົກກະຕິແລ້ວເຈົ້າຈະໃຊ້ຕົວເລືອກນີ້ເພື່ອສ້າງຕົວໂຫຼດແບບໄດນາມິກຂອງຫ້ອງສະໝຸດທີ່ໃຊ້ຮ່ວມກັນ. ຕົວຂອງມັນເອງ
ຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນ, ມັນຕ້ອງຍ້າຍຕົວຂອງມັນເອງຢູ່ໃນຫນ່ວຍຄວາມຈໍາກ່ອນທີ່ມັນຈະຊອກຫາຕົວແປໄດ້
ແລະຄົງທີ່ຢູ່ໃນສ່ວນຂໍ້ມູນຂອງຕົນເອງ.

-malpha-as
- ມກ
ເລືອກວ່າຈະສ້າງລະຫັດທີ່ຈະປະກອບໂດຍຕົວປະກອບທີ່ຜູ້ຂາຍສະໜອງໃຫ້ຫຼືບໍ່
(-malpha-as) ຫຼືໂດຍຜູ້ປະກອບ GNU - ມກ.

-mbwx
-mno-bwx
-mcix
-mno-cix
-mfix
-mno-ແກ້ໄຂ
-mmax
-mno-ສູງສຸດ
ລະບຸວ່າ GCC ຄວນສ້າງລະຫັດເພື່ອໃຊ້ທາງເລືອກ BWX, CIX, FIX ແລະ MAX
ຊຸດຄໍາແນະນໍາ. ຄ່າເລີ່ມຕົ້ນແມ່ນການນໍາໃຊ້ຊຸດຄໍາແນະນໍາທີ່ສະຫນັບສະຫນູນໂດຍ CPU
ປະເພດທີ່ກໍານົດໄວ້ໂດຍຜ່ານ -mcpu= ທາງເລືອກຫຼືຂອງ CPU ທີ່ GCC ຖືກສ້າງຂຶ້ນຖ້າບໍ່ມີ
ລະບຸ.

-mfloat-vax
-mfloat-ieee
ສ້າງລະຫັດທີ່ໃຊ້ (ບໍ່ໃຊ້) VAX F ແລະ G floating-point arithmetic ແທນ
ຄວາມແມ່ນຍໍາຂອງ IEEE ດຽວແລະສອງເທົ່າ.

-mexplicit-relocs
-mno-explicit-relocs
ຕົວປະກອບ Alpha ເກົ່າບໍ່ມີວິທີທີ່ຈະສ້າງການຍ້າຍສັນຍາລັກຍົກເວັ້ນຜ່ານ
ມະຫາພາກປະກອບ. ການນໍາໃຊ້ມະຫາພາກເຫຼົ່ານີ້ບໍ່ອະນຸຍາດໃຫ້ກໍານົດເວລາຄໍາແນະນໍາທີ່ດີທີ່ສຸດ.
GNU binutils ເປັນສະບັບ 2.12 ສະຫນັບສະຫນູນ syntax ໃຫມ່ທີ່ອະນຸຍາດໃຫ້ compiler ໄດ້
ໝາຍຢ່າງຈະແຈ້ງວ່າການຍົກຍ້າຍຄວນນຳໃຊ້ກັບຄຳແນະນຳອັນໃດ. ທາງເລືອກນີ້ແມ່ນ
ສ່ວນໃຫຍ່ແມ່ນເປັນປະໂຫຍດສໍາລັບການ debugging, ເນື່ອງຈາກວ່າ GCC ກວດພົບຄວາມສາມາດຂອງ assembler ໃນເວລາທີ່ມັນ
ຖືກສ້າງຂຶ້ນແລະກໍານົດຄ່າເລີ່ມຕົ້ນຕາມຄວາມເຫມາະສົມ.

-msmall-ຂໍ້ມູນ
-mlarge-data
ເມື່ອ​ໃດ​ -mexplicit-relocs ມີຜົນບັງຄັບໃຊ້, ຂໍ້ມູນສະຖິດແມ່ນເຂົ້າເຖິງຜ່ານ gp-ພີ່ນ້ອງ
ການຍົກຍ້າຍ. ເມື່ອ​ໃດ​ -msmall-ຂໍ້ມູນ ຖືກນໍາໃຊ້, ວັດຖຸ 8 bytes ຍາວຫຼືນ້ອຍກວ່າແມ່ນຖືກຈັດໃສ່ໃນ
a ຂະຫນາດນ້ອຍ ຂໍ້ມູນ ພື້ນທີ່ (ພາກສ່ວນ ".sdata" ແລະ ".sbss") ແລະຖືກເຂົ້າເຖິງຜ່ານ 16-bit
ການຍົກຍ້າຍອອກຈາກການລົງທະບຽນ $gp. ນີ້ຈໍາກັດຂະຫນາດຂອງພື້ນທີ່ຂໍ້ມູນຂະຫນາດນ້ອຍເພື່ອ
64KB, ແຕ່ອະນຸຍາດໃຫ້ຕົວແປຕ່າງໆສາມາດເຂົ້າເຖິງໄດ້ໂດຍກົງຜ່ານຄໍາແນະນໍາດຽວ.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -mlarge-data. ດ້ວຍທາງເລືອກນີ້, ພື້ນທີ່ຂໍ້ມູນຖືກຈໍາກັດພຽງແຕ່ຂ້າງລຸ່ມນີ້
2GB. ໂປຣແກຣມທີ່ຕ້ອງການຂໍ້ມູນຫຼາຍກວ່າ 2GB ຈະຕ້ອງໃຊ້ "malloc" ຫຼື "mmap" ເພື່ອ
ຈັດສັນຂໍ້ມູນໃນ heap ແທນທີ່ຈະຢູ່ໃນສ່ວນຂໍ້ມູນຂອງໂຄງການ.

ເມື່ອສ້າງລະຫັດສໍາລັບຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນ, -fpic implies -msmall-ຂໍ້ມູນ ແລະ -fPIC
implies -mlarge-data.

-msmall-text
- ຂະ​ຫນາດ​ໃຫຍ່​ຂໍ້​ຄວາມ​
ເມື່ອ​ໃດ​ -msmall-text ຖືກນໍາໃຊ້, compiler ສົມມຸດວ່າລະຫັດຂອງໂຄງການທັງຫມົດ
(ຫຼືຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນ) ເຫມາະໃນ 4MB, ແລະດັ່ງນັ້ນຈຶ່ງສາມາດບັນລຸໄດ້ດ້ວຍຄໍາແນະນໍາສາຂາ.
ເມື່ອ​ໃດ​ -msmall-ຂໍ້ມູນ ຖືກນໍາໃຊ້, compiler ສາມາດສົມມຸດວ່າສັນຍາລັກທ້ອງຖິ່ນທັງຫມົດແບ່ງປັນ
ຄ່າ $gp ດຽວກັນ, ແລະດັ່ງນັ້ນຈຶ່ງຫຼຸດຜ່ອນຈໍານວນຄໍາແນະນໍາທີ່ຕ້ອງການສໍາລັບຟັງຊັນ
ໂທຈາກ 4 ຫາ 1.

ຄ່າເລີ່ມຕົ້ນແມ່ນ - ຂະ​ຫນາດ​ໃຫຍ່​ຂໍ້​ຄວາມ​.

-mcpu=cpu_type
ກໍານົດຊຸດຄໍາແນະນໍາແລະຕົວກໍານົດການກໍານົດເວລາຄໍາແນະນໍາສໍາລັບປະເພດເຄື່ອງຈັກ
cpu_type. ທ່ານສາມາດກໍານົດບໍ່ວ່າຈະເປັນ EV ຊື່ຮູບແບບ ຫຼືໝາຍເລກຊິບທີ່ສອດຄ້ອງກັນ.
GCC ສະຫນັບສະຫນູນຕົວກໍານົດການກໍານົດເວລາສໍາລັບຄອບຄົວ EV4, EV5 ແລະ EV6 ຂອງໂປເຊດເຊີແລະ
ຈະເລືອກຄ່າເລີ່ມຕົ້ນສໍາລັບຊຸດຄໍາແນະນໍາຈາກໂປເຊດເຊີທີ່ທ່ານລະບຸ.
ຖ້າ​ຫາກ​ວ່າ​ທ່ານ​ບໍ່​ໄດ້​ລະ​ບຸ​ປະ​ເພດ​ຂອງ​ໂປ​ເຊດ​ເຊີ​, GCC ຈະ​ເປັນ​ຄ່າ​ເລີ່ມ​ຕົ້ນ​ຂອງ​ໂຮງ​ງານ​ຜະ​ລິດ​ທີ່​
compiler ຖືກສ້າງຂຶ້ນ.

ຄຸນ​ຄ່າ​ສະ​ຫນັບ​ສະ​ຫນູນ​ສໍາ​ລັບ​ການ​ cpu_type ມີ

ເຮືອນ4
ເຮືອນ45
21064
ກຳນົດເວລາເປັນ EV4 ແລະບໍ່ມີການຂະຫຍາຍຊຸດຄໍາແນະນໍາ.

ເຮືອນ5
21164
ກຳນົດເວລາເປັນ EV5 ແລະບໍ່ມີການຂະຫຍາຍຊຸດຄໍາແນະນໍາ.

ເຮືອນ56
21164a
ກຳນົດເວລາເປັນ EV5 ແລະຮອງຮັບການຂະຫຍາຍ BWX.

pca56
21164pc
21164PC
ກຳນົດເວລາເປັນ EV5 ແລະຮອງຮັບສ່ວນຂະຫຍາຍ BWX ແລະ MAX.

ເຮືອນ6
21264
ກຳນົດເວລາເປັນ EV6 ແລະຮອງຮັບສ່ວນຂະຫຍາຍ BWX, FIX, ແລະ MAX.

ເຮືອນ67
21264a
ກຳນົດເວລາເປັນ EV6 ແລະຮອງຮັບສ່ວນຂະຫຍາຍ BWX, CIX, FIX, ແລະ MAX.

ຕ່ອງໂສ້ເຄື່ອງມືພື້ນເມືອງຍັງສະຫນັບສະຫນູນມູນຄ່າ native, ເຊິ່ງເລືອກສະຖາປັດຕະຍະກໍາທີ່ດີທີ່ສຸດ
ທາງເລືອກສໍາລັບໂຮງງານຜະລິດເຈົ້າພາບ. -mcpu=ເດີມ ບໍ່ມີຜົນຫຍັງຖ້າ GCC ບໍ່ຮັບຮູ້
ໂຮງງານຜະລິດ.

-mtune=cpu_type
ກໍານົດພຽງແຕ່ຕົວກໍານົດການກໍານົດເວລາຄໍາແນະນໍາສໍາລັບປະເພດເຄື່ອງຈັກ cpu_type. ໄດ້
ຊຸດຄໍາແນະນໍາບໍ່ມີການປ່ຽນແປງ.

ຕ່ອງໂສ້ເຄື່ອງມືພື້ນເມືອງຍັງສະຫນັບສະຫນູນມູນຄ່າ native, ເຊິ່ງເລືອກສະຖາປັດຕະຍະກໍາທີ່ດີທີ່ສຸດ
ທາງເລືອກສໍາລັບໂຮງງານຜະລິດເຈົ້າພາບ. -mtune=native ບໍ່ມີຜົນຫຍັງຖ້າ GCC ບໍ່ຮັບຮູ້
ໂຮງງານຜະລິດ.

-mmemory-latency=ທີ່ໃຊ້ເວລາ
ກໍານົດເວລາ latency ທີ່ກໍານົດເວລາຄວນຈະສົມມຸດສໍາລັບການອ້າງອິງຄວາມຊົງຈໍາປົກກະຕິຕາມທີ່ເຫັນໂດຍ
ຄໍາຮ້ອງສະຫມັກ. ຕົວເລກນີ້ແມ່ນຂຶ້ນກັບຮູບແບບການເຂົ້າໃຊ້ຫນ່ວຍຄວາມຈໍາສູງ
ໂດຍຄໍາຮ້ອງສະຫມັກແລະຂະຫນາດຂອງ cache ພາຍນອກຢູ່ໃນເຄື່ອງ.

ທາງເລືອກທີ່ຖືກຕ້ອງສໍາລັບ ທີ່ໃຊ້ເວລາ ມີ

ຈໍານວນ
ຕົວເລກທົດສະນິຍົມທີ່ເປັນຕົວແທນຂອງຮອບວຽນໂມງ.

L1
L2
L3
ຕົ້ນຕໍ
compiler ປະກອບມີການຄາດຄະເນຂອງຈໍານວນຂອງຮອບວຽນໂມງສໍາລັບ "ປົກກະຕິ" EV4 &
ຮາດແວ EV5 ສໍາລັບລະດັບ 1, 2 ແລະ 3 cache (ຍັງເອີ້ນວ່າ Dcache, Scache, ແລະ
Bcache), ເຊັ່ນດຽວກັນກັບຫນ່ວຍຄວາມຈໍາຕົ້ນຕໍ. ກະລຸນາຮັບຊາບວ່າ L3 ສາມາດໃຊ້ໄດ້ກັບ EV5 ເທົ່ານັ້ນ.

DEC Alpha/VMS ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ -m ທາງເລືອກແມ່ນຖືກກໍານົດສໍາລັບການຈັດຕັ້ງປະຕິບັດ DEC Alpha/VMS:

-mvms-return-codes
ສົ່ງຄືນລະຫັດເງື່ອນໄຂ VMS ຈາກຫຼັກ. ຄ່າເລີ່ມຕົ້ນແມ່ນເພື່ອສົ່ງຄືນເງື່ອນໄຂຮູບແບບ POSIX
(ເຊັ່ນ: ຄວາມຜິດພາດ) ລະຫັດ.

-mdebug-main=ຄຳ ນຳ ໜ້າ
ໝາຍສິ່ງທີ່ເຮັດປະຈຳທຳອິດທີ່ຊື່ເລີ່ມຕົ້ນດ້ວຍ ຄຳ ນຳ ໜ້າ ເປັນປົກກະຕິຕົ້ນຕໍສໍາລັບການ
ດີບັກ.

- mmalloc64
ເລີ່ມຕົ້ນເປັນກິດຈະວັດການຈັດສັນໜ່ວຍຄວາມຈຳ 64-ບິດ.

FR30 ທາງເລືອກໃນການ

ຕົວເລືອກເຫຼົ່ານີ້ຖືກກໍານົດໂດຍສະເພາະສໍາລັບພອດ FR30.

-msmall-ແບບ
ໃຊ້ຮູບແບບພື້ນທີ່ທີ່ຢູ່ຂະຫນາດນ້ອຍ. ນີ້ສາມາດຜະລິດລະຫັດຂະຫນາດນ້ອຍກວ່າ, ແຕ່ມັນສົມມຸດວ່າ
ວ່າຄ່າສັນຍາລັກແລະທີ່ຢູ່ທັງຫມົດຈະເຫມາະກັບຂອບເຂດ 20-bit.

-mno-lsim
ສົມມຸດວ່າການສະຫນັບສະຫນູນ runtime ໄດ້ຖືກສະຫນອງໃຫ້ແລະດັ່ງນັ້ນບໍ່ຈໍາເປັນຕ້ອງປະກອບມີ
ຫ້ອງສະຫມຸດຈໍາລອງ (libsim.a) ໃນເສັ້ນຄໍາສັ່ງ linker.

LIF ທາງເລືອກໃນການ

-mgpr-32
ໃຊ້ພຽງແຕ່ການລົງທະບຽນ 32 ສະບັບທໍາອິດ.

-mgpr-64
ນຳໃຊ້ທະບຽນທັງໝົດ 64 ສະບັບ.

-mfpr-32
ໃຊ້ພຽງແຕ່ການລົງທະບຽນ 32 ຈຸດທໍາອິດທີ່ເລື່ອນໄດ້.

-mfpr-64
ນຳໃຊ້ທະບຽນທັງໝົດ 64 ຈຸດ.

-mhard-float
ໃຊ້ຄໍາແນະນໍາຂອງຮາດແວສໍາລັບການດໍາເນີນການຈຸດເລື່ອນ.

-msoft-float
ໃຊ້ສິ່ງທີ່ເຮັດປະຈຳໃນຫ້ອງສະໝຸດສຳລັບການປະຕິບັດງານຈຸດລອຍ.

-malloc-cc
ຈັດສັນການລົງທະບຽນລະຫັດເງື່ອນໄຂແບບໄດນາມິກ.

-mfixed-cc
ຢ່າພະຍາຍາມຈັດສັນການລົງທະບຽນລະຫັດເງື່ອນໄຂແບບເຄື່ອນໄຫວ, ພຽງແຕ່ໃຊ້ "icc0" ແລະ
"fcc0".

-mdword
ປ່ຽນ ABI ເພື່ອໃຊ້ insns ຄໍາສອງຄໍາ.

-mno-dword
ຢ່າໃຊ້ຄໍາແນະນໍາສອງຄໍາ.

-mdouble
ໃຊ້ຄໍາແນະນໍາສອງຈຸດລອຍ.

-mno-double
ຢ່າໃຊ້ຄໍາແນະນໍາສອງຈຸດທີ່ເລື່ອນໄດ້.

- ສື່​ມວນ​ຊົນ
ໃຊ້ຄໍາແນະນໍາສື່.

-mno-media
ຢ່າໃຊ້ຄໍາແນະນໍາສື່.

- ມົວລັດ
ໃຊ້ຄໍາແນະນໍາການຄູນ ແລະບວກ/ລົບ.

-mno-muladd
ຢ່າໃຊ້ຄຳແນະນຳການຄູນ ແລະລົບ.

-mfdpic
ເລືອກ FDPIC ABI, ເຊິ່ງໃຊ້ຕົວອະທິບາຍຟັງຊັນເພື່ອສະແດງຕົວຊີ້ໄປຫາ
ຫນ້າທີ່. ໂດຍບໍ່ມີທາງເລືອກໃດໆທີ່ກ່ຽວຂ້ອງກັບ PIC/PIE, ມັນຫມາຍຄວາມວ່າ -fPIEທີ່ຢູ່ ມີ -fpic or
-fpie, ມັນສົມມຸດວ່າ GOT entries ແລະຂໍ້ມູນຂະຫນາດນ້ອຍຢູ່ໃນຂອບເຂດ 12-bit ຈາກ GOT
ທີ່ຢູ່ຖານ; ກັບ -fPIC or -fPIE, GOT offsets ຖືກຄິດໄລ່ດ້ວຍ 32 bits. ດ້ວຍ ກ
bfin-elf ເປົ້າຫມາຍ, ທາງເລືອກນີ້ຫມາຍເຖິງ - ຊິມ.

-minline-plt
ເປີດໃຊ້ inlining ຂອງລາຍການ PLT ໃນການເອີ້ນຟັງຊັນໄປຫາຟັງຊັນທີ່ບໍ່ຮູ້ຈັກ
ຜູກມັດຢູ່ໃນທ້ອງຖິ່ນ. ມັນບໍ່ມີຜົນກະທົບທີ່ບໍ່ມີ -mfdpic. ມັນຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຖ້າ
ການເພີ່ມປະສິດທິພາບສໍາລັບຄວາມໄວແລະການລວບລວມສໍາລັບຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນ (ie, -fPIC or -fpic), ຫຼື
ໃນເວລາທີ່ທາງເລືອກການເພີ່ມປະສິດທິພາບເຊັ່ນ: -O3 ຫຼືຂ້າງເທິງແມ່ນມີຢູ່ໃນເສັ້ນຄໍາສັ່ງ.

-mTLS
ສົມມຸດສ່ວນ TLS ຂະຫນາດໃຫຍ່ເມື່ອສ້າງລະຫັດທ້ອງຖິ່ນຂອງກະທູ້.

-mtls
ຢ່າຖືເອົາພາກສ່ວນ TLS ຂະຫນາດໃຫຍ່ເມື່ອສ້າງລະຫັດທ້ອງຖິ່ນ.

-mgrel-ro
ເປີດໃຊ້ການນໍາໃຊ້ການຍົກຍ້າຍ "GPREL" ໃນ FDPIC ABI ສໍາລັບຂໍ້ມູນທີ່ຮູ້ວ່າຢູ່ໃນ
ພາກສ່ວນອ່ານເທົ່ານັ້ນ. ມັນຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ, ຍົກເວັ້ນ -fpic or -fpie: ເຖິງ​ແມ່ນ​ວ່າ
ມັນ​ອາດ​ຈະ​ຊ່ວຍ​ເຮັດ​ໃຫ້​ຕາ​ຕະ​ລາງ​ການ​ຊົດ​ເຊີຍ​ໃນ​ທົ່ວ​ໂລກ​ຂະ​ຫນາດ​ນ້ອຍ​, ມັນ​ຄ້າ 1 ຄໍາ​ແນະ​ນໍາ​ສໍາ​ລັບ​ການ 4​
-fPIC or -fPIE, ມັນຊື້ຂາຍ 3 ຄໍາແນະນໍາສໍາລັບ 4, ຫນຶ່ງໃນນັ້ນອາດຈະຖືກແບ່ງປັນໂດຍຫຼາຍ
ສັນຍາລັກ, ແລະມັນຫລີກລ່ຽງຄວາມຕ້ອງການສໍາລັບການເຂົ້າ GOT ສໍາລັບສັນຍາລັກອ້າງອີງ, ສະນັ້ນມັນ
ມີແນວໂນ້ມທີ່ຈະຊະນະ. ຖ້າມັນບໍ່ແມ່ນ, -mno-gprel-ro ສາມາດໃຊ້ເພື່ອປິດການໃຊ້ງານມັນໄດ້.

-multilib-library-pic
ເຊື່ອມຕໍ່ກັບ (ຫ້ອງສະຫມຸດ, ບໍ່ແມ່ນ FD) pic libraries. ມັນຊີ້ໃຫ້ເຫັນໂດຍ -mlibrary-pic, ຄື​ກັນ
ເປັນໂດຍ -fPIC ແລະ -fpic ໂດຍບໍ່ມີການ -mfdpic. ເຈົ້າບໍ່ຄວນໃຊ້ມັນຢ່າງຈະແຈ້ງ.

-mlinked-fp
ປະຕິບັດຕາມຂໍ້ກໍານົດຂອງ EABI ຂອງການສ້າງຕົວຊີ້ກອບທຸກຄັ້ງທຸກຄັ້ງທີ່ກອບ stack
ຖືກຈັດສັນ. ຕົວເລືອກນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ ແລະສາມາດປິດໃຊ້ງານໄດ້
-mno-linked-fp.

-mlong-ໂທ
ໃຊ້ທີ່ຢູ່ທາງອ້ອມເພື່ອໂທຫາຫນ້າທີ່ຢູ່ນອກຫນ່ວຍງານລວບລວມປະຈຸບັນ. ນີ້
ອະ​ນຸ​ຍາດ​ໃຫ້​ປະ​ຕິ​ບັດ​ຫນ້າ​ທີ່​ຈະ​ໄດ້​ຮັບ​ການ​ວາງ​ໄວ້​ທຸກ​ບ່ອນ​ພາຍ​ໃນ​ຊ່ອງ​ທີ່​ຢູ່ 32-bit​.

-malign-labels
ພະຍາຍາມຈັດວາງປ້າຍກຳກັບໃຫ້ເປັນຂອບເຂດ 8-byte ໂດຍການໃສ່ nops ເຂົ້າໃນແພັກເກັດທີ່ຜ່ານມາ.
ຕົວເລືອກນີ້ມີຜົນກະທົບພຽງແຕ່ເມື່ອການຫຸ້ມຫໍ່ VLIW ຖືກເປີດໃຊ້. ມັນ​ບໍ່​ໄດ້​ສ້າງ​ໃຫມ່​
ແພັກເກັດ; ມັນພຽງແຕ່ເພີ່ມ nops ໃຫ້ກັບທີ່ມີຢູ່ແລ້ວ.

-mlibrary-pic
ສ້າງລະຫັດ EABI ທີ່ບໍ່ຂຶ້ນກັບຕຳແໜ່ງ.

-macc-4
ໃຊ້ພຽງແຕ່ສີ່ຕົວສະສົມສື່ທໍາອິດທີ່ລົງທະບຽນ.

-macc-8
ໃຊ້​ທັງ​ຫມົດ​ແປດ​ການ​ສະ​ສົມ​ສື່​ມວນ​ຊົນ​.

-mpack
ຊຸດຄໍາແນະນໍາ VLIW.

-mno-pack
ຢ່າຫຸ້ມຫໍ່ຄໍາແນະນໍາ VLIW.

-mno-ທຸງ
ຢ່າໝາຍສະວິດ ABI ໃນ e_flags.

-mcond-ຍ້າຍ
ເປີດການນຳໃຊ້ຄຳແນະນຳການເຄື່ອນຍ້າຍຕາມເງື່ອນໄຂ (ຄ່າເລີ່ມຕົ້ນ).

ສະວິດນີ້ແມ່ນສ່ວນໃຫຍ່ແມ່ນສໍາລັບການ debugging compiler ແລະອາດຈະຖືກໂຍກຍ້າຍອອກໃນ a
ສະບັບໃນອະນາຄົດ.

-mno-cond-move
ປິດການນຳໃຊ້ຄຳແນະນຳການເຄື່ອນຍ້າຍຕາມເງື່ອນໄຂ.

ສະວິດນີ້ແມ່ນສ່ວນໃຫຍ່ແມ່ນສໍາລັບການ debugging compiler ແລະອາດຈະຖືກໂຍກຍ້າຍອອກໃນ a
ສະບັບໃນອະນາຄົດ.

-mscc
ເປີດໃຊ້ການນໍາໃຊ້ຄໍາແນະນໍາທີ່ກໍານົດໄວ້ຕາມເງື່ອນໄຂ (ຄ່າເລີ່ມຕົ້ນ).

ສະວິດນີ້ແມ່ນສ່ວນໃຫຍ່ແມ່ນສໍາລັບການ debugging compiler ແລະອາດຈະຖືກໂຍກຍ້າຍອອກໃນ a
ສະບັບໃນອະນາຄົດ.

-mno-scc
ປິດການໃຊ້ຄໍາແນະນໍາທີ່ກໍານົດໄວ້ຕາມເງື່ອນໄຂ.

ສະວິດນີ້ແມ່ນສ່ວນໃຫຍ່ແມ່ນສໍາລັບການ debugging compiler ແລະອາດຈະຖືກໂຍກຍ້າຍອອກໃນ a
ສະບັບໃນອະນາຄົດ.

-mcond-exec
ເປີດການນຳໃຊ້ການດຳເນີນການຕາມເງື່ອນໄຂ (ຄ່າເລີ່ມຕົ້ນ).

ສະວິດນີ້ແມ່ນສ່ວນໃຫຍ່ແມ່ນສໍາລັບການ debugging compiler ແລະອາດຈະຖືກໂຍກຍ້າຍອອກໃນ a
ສະບັບໃນອະນາຄົດ.

-mno-cond-exec
ປິດການນຳໃຊ້ການດຳເນີນການຕາມເງື່ອນໄຂ.

ສະວິດນີ້ແມ່ນສ່ວນໃຫຍ່ແມ່ນສໍາລັບການ debugging compiler ແລະອາດຈະຖືກໂຍກຍ້າຍອອກໃນ a
ສະບັບໃນອະນາຄົດ.

-mvliw-ສາຂາ
ແລ່ນຜ່ານເພື່ອບັນຈຸສາຂາເຂົ້າໄປໃນຄໍາແນະນໍາ VLIW (ຄ່າເລີ່ມຕົ້ນ).

ສະວິດນີ້ແມ່ນສ່ວນໃຫຍ່ແມ່ນສໍາລັບການ debugging compiler ແລະອາດຈະຖືກໂຍກຍ້າຍອອກໃນ a
ສະບັບໃນອະນາຄົດ.

-mno-vliw-ສາຂາ
ຢ່າແລ່ນຜ່ານເພື່ອບັນຈຸສາຂາເຂົ້າໃນຄໍາແນະນໍາ VLIW.

ສະວິດນີ້ແມ່ນສ່ວນໃຫຍ່ແມ່ນສໍາລັບການ debugging compiler ແລະອາດຈະຖືກໂຍກຍ້າຍອອກໃນ a
ສະບັບໃນອະນາຄົດ.

-Mmulti-cond-exec-exec
ເປີດໃຊ້ການເພີ່ມປະສິດທິພາບຂອງ "&&" ແລະ "||" ໃນການປະຕິບັດເງື່ອນໄຂ (ຄ່າເລີ່ມຕົ້ນ).

ສະວິດນີ້ແມ່ນສ່ວນໃຫຍ່ແມ່ນສໍາລັບການ debugging compiler ແລະອາດຈະຖືກໂຍກຍ້າຍອອກໃນ a
ສະບັບໃນອະນາຄົດ.

-mno-multi-cond-exec
ປິດການເພີ່ມປະສິດທິພາບຂອງ "&&" ແລະ "||" ໃນ​ການ​ປະ​ຕິ​ບັດ​ຕາມ​ເງື່ອນ​ໄຂ​.

ສະວິດນີ້ແມ່ນສ່ວນໃຫຍ່ແມ່ນສໍາລັບການ debugging compiler ແລະອາດຈະຖືກໂຍກຍ້າຍອອກໃນ a
ສະບັບໃນອະນາຄົດ.

-mnested-cond-exec
ເປີດໃຊ້ການເພີ່ມປະສິດທິພາບການປະຕິບັດຕາມເງື່ອນໄຂທີ່ວາງໄວ້ (ຄ່າເລີ່ມຕົ້ນ).

ສະວິດນີ້ແມ່ນສ່ວນໃຫຍ່ແມ່ນສໍາລັບການ debugging compiler ແລະອາດຈະຖືກໂຍກຍ້າຍອອກໃນ a
ສະບັບໃນອະນາຄົດ.

-mno-nested-cond-exec
ປິດການນຳໃຊ້ການເພີ່ມປະສິດທິພາບການດຳເນີນການຕາມເງື່ອນໄຂທີ່ວາງໄວ້.

ສະວິດນີ້ແມ່ນສ່ວນໃຫຍ່ແມ່ນສໍາລັບການ debugging compiler ແລະອາດຈະຖືກໂຍກຍ້າຍອອກໃນ a
ສະບັບໃນອະນາຄົດ.

-moptimize-membar
ສະວິດນີ້ເອົາຄໍາແນະນໍາ "membar" ທີ່ຊໍ້າຊ້ອນອອກຈາກລະຫັດທີ່ສ້າງຂຶ້ນໂດຍ compiler.
ມັນຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-mno-optimize-membar
ສະວິດນີ້ປິດການທໍາງານການໂຍກຍ້າຍອັດຕະໂນມັດຂອງ "membar" ຊ້ໍາຊ້ອນຄໍາແນະນໍາຈາກ
ລະຫັດທີ່ສ້າງຂຶ້ນ.

-mtomcat-ສະຖິຕິ
ເຮັດໃຫ້ເກີດອາຍແກັສເພື່ອພິມສະຖິຕິ tomcat.

-mcpu=cpu
ເລືອກປະເພດໂປເຊດເຊີທີ່ຈະສ້າງລະຫັດ. ຄ່າທີ່ເປັນໄປໄດ້ແມ່ນ frv, fr550,
tomcat, fr500, fr450, fr405, fr400, fr300 ແລະ ງ່າຍດາຍ.

GNU / Linux ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ -m ທາງເລືອກແມ່ນຖືກກໍານົດສໍາລັບເປົ້າຫມາຍ GNU / Linux:

-mglibc
ໃຊ້ຫ້ອງສະຫມຸດ GNU C. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ ຍົກເວັ້ນໃນ *-*-linux-*uclibc* ແລະ
*-*-linux-*android* ເປົ້າ ໝາຍ.

- muclibc
ໃຊ້ຫ້ອງສະໝຸດ uCibc C. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນທີ່ເປີດຢູ່ *-*-linux-*uclibc* ເປົ້າ ໝາຍ.

-mbionic
ໃຊ້ຫ້ອງສະໝຸດ Bionic C. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນທີ່ເປີດຢູ່ *-*-linux-*android* ເປົ້າ ໝາຍ.

-mandroid
ລວບລວມລະຫັດເຂົ້າກັນໄດ້ກັບແພລະຕະຟອມ Android. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນທີ່ເປີດຢູ່
*-*-linux-*android* ເປົ້າ ໝາຍ.

ເມື່ອລວບລວມ, ທາງເລືອກນີ້ເປີດໃຊ້ງານ -mbionic, -fPIC, -fno-ຂໍ້ຍົກເວັ້ນ ແລະ -fno-rtti by
ຄ່າເລີ່ມຕົ້ນ. ເມື່ອເຊື່ອມຕໍ່, ທາງເລືອກນີ້ເຮັດໃຫ້ໄດເວີ GCC ຜ່ານທາງເລືອກສະເພາະຂອງ Android
ກັບຕົວເຊື່ອມຕໍ່. ສຸດທ້າຍ, ທາງເລືອກນີ້ເຮັດໃຫ້ macro preprocessor "__ANDROID__" ເປັນ
ກໍານົດ.

-tno-android-cc
ປິດການໃຊ້ງານຜົນກະທົບການລວບລວມຂອງ -mandroid, ie, ບໍ່ເປີດໃຊ້ງານ -mbionic, -fPIC,
-fno-ຂໍ້ຍົກເວັ້ນ ແລະ -fno-rtti ໂດຍຄ່າເລີ່ມຕົ້ນ

-tno-android-ld
ປິດການເຊື່ອມຕໍ່ຜົນກະທົບຂອງ -mandroid, ie, ຜ່ານມາດຕະຖານການເຊື່ອມຕໍ່ Linux ທາງເລືອກໃນການ
ຕົວເຊື່ອມຕໍ່.

H8 / 300 ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ -m ທາງເລືອກແມ່ນຖືກກໍານົດໄວ້ສໍາລັບການຈັດຕັ້ງປະຕິບັດ H8/300:

-mrelax
ຫຍໍ້ບາງການອ້າງອີງທີ່ຢູ່ໃນເວລາເຊື່ອມຕໍ່, ເມື່ອເປັນໄປໄດ້; ໃຊ້ຕົວເລືອກຕົວເຊື່ອມຕໍ່
- ຜ່ອນຄາຍ.

-mh ສ້າງລະຫັດສໍາລັບ H8/300H.

-ນາງ​ສາວ ສ້າງລະຫັດສໍາລັບ H8S.

- ນ ສ້າງລະຫັດສໍາລັບ H8S ແລະ H8/300H ໃນຮູບແບບປົກກະຕິ. ສະວິດນີ້ຕ້ອງຖືກນໍາໃຊ້
ບໍ່ວ່າຈະກັບ -mh or -ນາງ​ສາວ.

-ms2600
ສ້າງລະຫັດສໍາລັບ H8S/2600. ສະວິດນີ້ຕ້ອງໃຊ້ກັບ -ນາງ​ສາວ.

- mint32
ເຮັດໃຫ້ຂໍ້ມູນ "int" 32 bits ຕາມຄ່າເລີ່ມຕົ້ນ.

-malign-300
ໃນ H8/300H ແລະ H8S, ໃຊ້ກົດລະບຽບການຈັດຕໍາແຫນ່ງດຽວກັນກັບ H8/300. ຄ່າເລີ່ມຕົ້ນ
ສໍາລັບ H8/300H ແລະ H8S ແມ່ນການຈັດລຽງຄວາມຍາວ ແລະເລື່ອນຢູ່ໃນຂອບເຂດ 4-byte.
-malign-300 ເຮັດໃຫ້ພວກເຂົາສອດຄ່ອງຢູ່ໃນຂອບເຂດ 2-byte. ທາງເລືອກນີ້ບໍ່ມີຜົນ
ໃນ H8/300.

HPPA ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ -m ທາງເລືອກແມ່ນຖືກກໍານົດສໍາລັບຄອບຄົວ HPPA ຂອງຄອມພິວເຕີ:

- ມີນາ=ປະເພດສະຖາປັດຕະຍະກໍາ
ສ້າງລະຫັດສໍາລັບສະຖາປັດຕະຍະກໍາທີ່ລະບຸ. ທາງ​ເລືອກ​ສໍາ​ລັບ​ການ​ ປະເພດສະຖາປັດຕະຍະກໍາ ມີ
1.0 ສໍາລັບ PA 1.0, 1.1 ສໍາລັບ PA 1.1, ແລະ 2.0 ສໍາລັບໂປເຊດເຊີ PA 2.0. ອ້າງ​ເຖິງ
/usr/lib/sched.models ໃນລະບົບ HP-UX ເພື່ອກໍານົດທາງເລືອກສະຖາປັດຕະຍະກໍາທີ່ເຫມາະສົມ
ສໍາລັບເຄື່ອງຂອງທ່ານ. ລະຫັດທີ່ລວບລວມສໍາລັບສະຖາປັດຕະຍະກໍາທີ່ມີຕົວເລກຕ່ໍາຈະດໍາເນີນການສູງກວ່າ
ສະຖາປັດຕະຍະກໍາຕົວເລກ, ແຕ່ບໍ່ແມ່ນທາງອື່ນ.

-mpa-risc-1-0
-mpa-risc-1-1
-mpa-risc-2-0
ຄຳ ສັບຄ້າຍຄືກັນ - ມີນາ=1.0, - ມີນາ=1.1, ແລະ - ມີນາ=2.0 ຕາມລໍາດັບ.

-mbig-ສະຫຼັບ
ສ້າງລະຫັດທີ່ເຫມາະສົມສໍາລັບຕາຕະລາງສະຫຼັບຂະຫນາດໃຫຍ່. ໃຊ້ທາງເລືອກນີ້ພຽງແຕ່ຖ້າຫາກວ່າ
assembler/linker ຈົ່ມກ່ຽວກັບສາຂານອກຂອບເຂດພາຍໃນຕາຕະລາງສະຫຼັບ.

-mjump-in-delay
ຕື່ມຂໍ້ມູນການຊັກຊ້າຂອງການໂທຟັງຊັນດ້ວຍຄໍາແນະນໍາການໂດດແບບບໍ່ມີເງື່ອນໄຂໂດຍການດັດແກ້
ຕົວຊີ້ກັບຄືນສໍາລັບການເອີ້ນຟັງຊັນເປັນເປົ້າຫມາຍຂອງການກະໂດດຕາມເງື່ອນໄຂ.

-mdisable-fpregs
ປ້ອງກັນບໍ່ໃຫ້ການລົງທະບຽນຈຸດທີ່ເລື່ອນໄດ້ຈາກການນໍາໃຊ້ໃນລັກສະນະໃດກໍ່ຕາມ. ນີ້ແມ່ນມີຄວາມຈໍາເປັນສໍາລັບ
ລວບລວມ kernels ທີ່ປະຕິບັດການສະຫຼັບສະພາບການຂີ້ກຽດຂອງທະບຽນຈຸດລອຍ. ຖ້າ
ທ່ານໃຊ້ຕົວເລືອກນີ້ແລະພະຍາຍາມປະຕິບັດການດໍາເນີນການຈຸດທີ່ເລື່ອນໄດ້, compiler
ເອົາລູກອອກ.

-mdisable-indexing
ປ້ອງກັນບໍ່ໃຫ້ compiler ໃຊ້ຮູບແບບທີ່ຢູ່ດັດສະນີ. ນີ້ຫຼີກລ້ຽງບາງແທນທີ່ຈະ
ບັນຫາທີ່ບໍ່ແນ່ນອນໃນເວລາລວບລວມລະຫັດທີ່ສ້າງ MIG ພາຍໃຕ້ MACH.

-mno-space-regs
ສ້າງລະຫັດທີ່ສົມມຸດວ່າເປົ້າຫມາຍບໍ່ມີການລົງທະບຽນພື້ນທີ່. ນີ້ອະນຸຍາດໃຫ້ GCC
ສ້າງການໂທທາງອ້ອມໄວຂຶ້ນ ແລະໃຊ້ໂໝດທີ່ຢູ່ດັດຊະນີທີ່ບໍ່ຂະໜາດ.

ລະຫັດດັ່ງກ່າວແມ່ນເຫມາະສົມສໍາລັບລະດັບ 0 PA ລະບົບແລະແກ່ນ.

-mfast-indirect-calls
ສ້າງລະຫັດທີ່ສົມມຸດວ່າການໂທບໍ່ເຄີຍຂ້າມຊ່ອງຫວ່າງ. ນີ້ອະນຸຍາດໃຫ້ GCC
ປ່ອຍລະຫັດທີ່ປະຕິບັດການໂທທາງອ້ອມໄວຂຶ້ນ.

ຕົວເລືອກນີ້ຈະບໍ່ເຮັດວຽກຢູ່ໃນທີ່ປະທັບຂອງຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນຫຼືຫນ້າທີ່ຊ້ອນກັນ.

-mfixed-range=ໄລຍະລົງທະບຽນ
ສ້າງລະຫັດການປິ່ນປົວຂອບເຂດການລົງທະບຽນທີ່ໃຫ້ມາເປັນການລົງທະບຽນຄົງທີ່. ການລົງທະບຽນຄົງທີ່
ແມ່ນຫນຶ່ງໃນທີ່ຜູ້ຈັດສັນທະບຽນບໍ່ສາມາດໃຊ້ໄດ້. ນີ້ແມ່ນເປັນປະໂຫຍດໃນເວລາທີ່ລວບລວມ kernel
ລະຫັດ. ໄລຍະການລົງທະບຽນແມ່ນລະບຸໄວ້ເປັນສອງທະບຽນທີ່ແຍກອອກໂດຍ dash. ຫຼາຍ
ໄລຍະການລົງທະບຽນສາມາດຖືກລະບຸແຍກດ້ວຍເຄື່ອງໝາຍຈຸດ.

-mlong-load-store
ສ້າງການໂຫຼດ 3-instruction ແລະຈັດລໍາດັບຕາມທີ່ບາງຄັ້ງຕ້ອງການໂດຍ HP-UX 10
ຕົວເຊື່ອມຕໍ່. ນີ້ແມ່ນເທົ່າກັບ +k ທາງ​ເລືອກ​ສໍາ​ລັບ​ການ​ສັງ​ລວມ HP​.

-mportable-runtime
ໃຊ້ສົນທິສັນຍາການໂທແບບເຄື່ອນທີ່ທີ່ສະເໜີໂດຍ HP ສໍາລັບລະບົບ ELF.

- ມກ
ເປີດໃຊ້ຄໍາສັ່ງຂອງ assembler ພຽງແຕ່ GAS ເຂົ້າໃຈ.

-mschedule=cpu-type
ຕາຕະລາງລະຫັດຕາມຂໍ້ຈໍາກັດສໍາລັບປະເພດເຄື່ອງຈັກ cpu-type. ທາງເລືອກ
ສໍາລັບການ cpu-type ມີ 700 7100, 7100LC, 7200, 7300 ແລະ 8000. ອ້າງ​ເຖິງ
/usr/lib/sched.models ໃນລະບົບ HP-UX ເພື່ອກໍານົດທາງເລືອກໃນການກໍານົດເວລາທີ່ເຫມາະສົມ
ເຄື່ອງຂອງເຈົ້າ. ການກຳນົດເວລາເລີ່ມຕົ້ນແມ່ນ 8000.

-mlinker-opt
ເປີດໃຊ້ການເພີ່ມປະສິດທິພາບຜ່ານໃນຕົວເຊື່ອມຕໍ່ HP-UX. ໃຫ້ສັງເກດວ່ານີ້ເຮັດໃຫ້ການດີບັກສັນຍາລັກ
ເປັນໄປບໍ່ໄດ້. ມັນຍັງເຮັດໃຫ້ເກີດຂໍ້ຜິດພາດໃນຕົວເຊື່ອມຕໍ່ HP-UX 8 ແລະ HP-UX 9 ທີ່ພວກມັນ.
ໃຫ້ຂໍ້ຄວາມຜິດພາດ bogus ເມື່ອເຊື່ອມຕໍ່ບາງໂຄງການ.

-msoft-float
ສ້າງຜົນຜະລິດທີ່ມີຫ້ອງສະຫມຸດໂທຫາຈຸດທີ່ເລື່ອນໄດ້. ຄໍາເຕືອນ: ຄວາມຕ້ອງການ
ຫ້ອງສະໝຸດບໍ່ສາມາດໃຊ້ໄດ້ສຳລັບເປົ້າໝາຍ HPPA ທັງໝົດ. ປົກກະຕິແລ້ວສິ່ງອໍານວຍຄວາມສະດວກຂອງ
C compiler ປົກກະຕິຂອງເຄື່ອງຈັກຖືກນໍາໃຊ້, ແຕ່ນີ້ບໍ່ສາມາດເຮັດໄດ້ໂດຍກົງໃນ cross-
ການລວບລວມ. ທ່ານ​ຕ້ອງ​ເຮັດ​ການ​ຈັດ​ການ​ຂອງ​ຕົນ​ເອງ​ເພື່ອ​ໃຫ້​ຫ້ອງ​ສະ​ຫມຸດ​ທີ່​ເຫມາະ​ສົມ​
ຫນ້າທີ່ສໍາລັບການລວບລວມຂ້າມ.

-msoft-float ການປ່ຽນແປງສົນທິສັນຍາການໂທໃນໄຟລ໌ຜົນຜະລິດ; ເພາະສະນັ້ນ, ມັນເປັນພຽງແຕ່
ເປັນປະໂຫຍດຖ້າຫາກວ່າທ່ານລວບລວມ ທັງຫມົດ ຂອງ​ໂຄງ​ການ​ທີ່​ມີ​ທາງ​ເລືອກ​ນີ້​. ໂດຍສະເພາະ, ທ່ານຈໍາເປັນຕ້ອງ
ລວບລວມ libgcc.a, ຫ້ອງສະຫມຸດທີ່ມາພ້ອມກັບ GCC, ກັບ -msoft-float ໃນຄໍາສັ່ງສໍາລັບການນີ້
ເຮັດ​ວຽກ.

-msio
ສ້າງຄ່າກຳນົດລ່ວງໜ້າ, "_SIO", ສຳລັບເຊີບເວີ IO. ຄ່າເລີ່ມຕົ້ນແມ່ນ -mwsio. ນີ້ສ້າງ
ກໍານົດໄວ້ກ່ອນ, "__hp9000s700", "__hp9000s700__" ແລະ "_WSIO", ສໍາລັບສະຖານີເຮັດວຽກ IO.
ທາງເລືອກເຫຼົ່ານີ້ແມ່ນມີຢູ່ໃນ HP-UX ແລະ HI-UX.

-mgnu-ld
ໃຊ້ GNU ld ທາງເລືອກສະເພາະ. ນີ້ຜ່ານ - ແບ່ງ​ປັນ​ to ld ໃນ​ເວ​ລາ​ທີ່​ການ​ກໍ່​ສ້າງ​ການ​ແບ່ງ​ປັນ​
ຫໍສະໝຸດ. ມັນເປັນຄ່າເລີ່ມຕົ້ນເມື່ອ GCC ຖືກຕັ້ງຄ່າ, ຢ່າງຊັດເຈນ ຫຼື implicitly, ກັບ
ຕົວເຊື່ອມຕໍ່ GNU. ທາງເລືອກນີ້ບໍ່ມີຜົນກະທົບໃດໆທີ່ ld ຖືກເອີ້ນ, ມັນເທົ່ານັ້ນ
ປ່ຽນແປງສິ່ງທີ່ພາລາມິເຕີຖືກສົ່ງກັບ ld ນັ້ນ. ld ທີ່​ເອີ້ນ​ວ່າ​ແມ່ນ​ກໍາ​ນົດ​ໂດຍ
ໄດ້ --with-ld configure ທາງເລືອກ, ເສັ້ນທາງຄົ້ນຫາໂຄງການຂອງ GCC, ແລະສຸດທ້າຍໂດຍຜູ້ໃຊ້
PATH. ຕົວເຊື່ອມຕໍ່ທີ່ໃຊ້ໂດຍ GCC ສາມາດພິມໄດ້ໂດຍໃຊ້ ທີ່ `gcc -print-prog-name=ld`.
ທາງເລືອກນີ້ແມ່ນມີພຽງແຕ່ຢູ່ໃນ 64-bit HP-UX GCC, ie configured ກັບ
hppa*64*-*-hpux*.

-mhp-ld
ໃຊ້ທາງເລືອກສະເພາະ HP ld. ນີ້ຜ່ານ -b to ld ໃນ​ເວ​ລາ​ທີ່​ການ​ກໍ່​ສ້າງ​ຫ້ອງ​ສະ​ຫມຸດ​ແບ່ງ​ປັນ​ແລະ​
passes +ຍອມຮັບ ປະເພດບໍ່ກົງກັນ ກັບ ld ໃນການເຊື່ອມຕໍ່ທັງຫມົດ. ມັນເປັນຄ່າເລີ່ມຕົ້ນເມື່ອ GCC ແມ່ນ
ຕັ້ງຄ່າ, ຢ່າງຊັດເຈນ ຫຼື implicitly, ກັບຕົວເຊື່ອມຕໍ່ HP. ທາງເລືອກນີ້ບໍ່ມີ
ຜົນກະທົບໃດໆທີ່ ld ຖືກເອີ້ນ, ມັນພຽງແຕ່ປ່ຽນສິ່ງທີ່ຕົວກໍານົດການຖືກສົ່ງຕໍ່ກັບສິ່ງນັ້ນ
ld. ld ທີ່​ເອີ້ນ​ວ່າ​ແມ່ນ​ກໍາ​ນົດ​ໂດຍ​ --with-ld ການຕັ້ງຄ່າທາງເລືອກ, GCC's
ເສັ້ນທາງຄົ້ນຫາໂຄງການ, ແລະສຸດທ້າຍໂດຍຜູ້ໃຊ້ PATH. ຕົວເຊື່ອມຕໍ່ທີ່ໃຊ້ໂດຍ GCC ສາມາດເປັນ
ພິມ​ໂດຍ​ນໍາ​ໃຊ້​ ທີ່ `gcc -print-prog-name=ld`. ທາງເລືອກນີ້ແມ່ນມີພຽງແຕ່ຢູ່ໃນ
64-bit HP-UX GCC, ie configured ກັບ hppa*64*-*-hpux*.

-mlong-ໂທ
ສ້າງລະຫັດທີ່ໃຊ້ລໍາດັບການໂທຍາວ. ນີ້ຮັບປະກັນວ່າການໂທແມ່ນສາມາດສະເຫມີ
ເພື່ອເຂົ້າຫາ stub ທີ່ສ້າງ linker. ຄ່າເລີ່ມຕົ້ນແມ່ນເພື່ອສ້າງການໂທຍາວພຽງແຕ່ໃນເວລາທີ່
ໄລ​ຍະ​ຫ່າງ​ຈາກ​ເວັບ​ໄຊ​ໂທ​ຫາ​ຈຸດ​ເລີ່ມ​ຕົ້ນ​ຂອງ​ການ​ທໍາ​ງານ​ຫຼື​ຫົວ​ຫນ່ວຍ​ການ​ແປ​ພາ​ສາ​, ເປັນ​
ກໍ​ລະ​ນີ​ທີ່​ອາດ​ຈະ​, ເກີນ​ກໍາ​ນົດ​ໄວ້​ລ່ວງ​ຫນ້າ​ທີ່​ກໍາ​ນົດ​ໄວ້​ໂດຍ​ປະ​ເພດ​ສາ​ຂາ​ທີ່​ຖືກ​ນໍາ​ໃຊ້​. ໄດ້
ຂອບເຂດຈໍາກັດສໍາລັບການໂທປົກກະຕິແມ່ນ 7,600,000 ແລະ 240,000 bytes, ຕາມລໍາດັບສໍາລັບ PA 2.0
ແລະສະຖາປັດຕະຍະກໍາ PA 1.X. Sibcalls ສະເຫມີມີຈໍາກັດຢູ່ທີ່ 240,000 bytes.

ໄລ​ຍະ​ຫ່າງ​ແມ່ນ​ໄດ້​ຮັບ​ການ​ວັດ​ແທກ​ຈາກ​ການ​ເລີ່ມ​ຕົ້ນ​ຂອງ​ຫນ້າ​ທີ່​ໃນ​ເວ​ລາ​ທີ່​ການ​ນໍາ​ໃຊ້​
-function-sections ທາງເລືອກ, ຫຼືໃນເວລາທີ່ການນໍາໃຊ້ - ມກ ແລະ -mno-portable-runtime ທາງເລືອກໃນການ
ຮ່ວມກັນພາຍໃຕ້ HP-UX ກັບຕົວເຊື່ອມຕໍ່ SOM.

ມັນປົກກະຕິແລ້ວບໍ່ຕ້ອງການທີ່ຈະໃຊ້ທາງເລືອກນີ້ຍ້ອນວ່າມັນຈະເຮັດໃຫ້ປະສິດທິພາບຫຼຸດລົງ.
ຢ່າງໃດກໍ່ຕາມ, ມັນອາດຈະເປັນປະໂຫຍດໃນຄໍາຮ້ອງສະຫມັກຂະຫນາດໃຫຍ່, ໂດຍສະເພາະໃນເວລາທີ່ການເຊື່ອມໂຍງບາງສ່ວນ
ໃຊ້ເພື່ອສ້າງຄໍາຮ້ອງສະຫມັກ.

ປະເພດຂອງການໂທຍາວແມ່ນຂຶ້ນກັບຄວາມສາມາດຂອງ assembler ແລະ linker,
ແລະປະເພດຂອງລະຫັດທີ່ຖືກສ້າງຂຶ້ນ. ຜົນກະທົບຕໍ່ລະບົບທີ່ສະຫນັບສະຫນູນຍາວ
ການໂທຢ່າງແທ້ຈິງ, ແລະຄວາມແຕກຕ່າງຂອງສັນຍາລັກ pic ຍາວຫຼື pc-relative ໂທຄວນຈະເປັນ
ຂ້ອນຂ້າງນ້ອຍ. ຢ່າງໃດກໍ່ຕາມ, ການໂທຫາທາງອ້ອມແມ່ນໃຊ້ໃນລະບົບ ELF 32-bit ໃນລະຫັດຮູບ
ແລະມັນຂ້ອນຂ້າງຍາວ.

-muix=unix-std
ສ້າງ compiler predefines ແລະເລືອກ startfile ສໍາລັບມາດຕະຖານ UNIX ທີ່ກໍານົດໄວ້.
ທາງ​ເລືອກ​ສໍາ​ລັບ​ການ​ unix-std ມີ 93, 95 ແລະ 98. 93 ຮອງຮັບທຸກລຸ້ນ HP-UX.
95 ມີຢູ່ໃນ HP-UX 10.10 ແລະຕໍ່ມາ. 98 ມີຢູ່ໃນ HP-UX 11.11 ແລະຕໍ່ມາ.
ຄ່າເລີ່ມຕົ້ນແມ່ນ 93 ສໍາລັບ HP-UX 10.00, 95 ສໍາລັບ HP-UX 10.10 ເຖິງແມ່ນ 11.00, ແລະ 98
ສໍາລັບ HP-UX 11.11 ແລະຕໍ່ມາ.

-muix=93 ໃຫ້ຄໍານິຍາມດຽວກັນກັບ GCC 3.3 ແລະ 3.4. -muix=95 ສະຫນອງໃຫ້
ຄໍານິຍາມເພີ່ມເຕີມສໍາລັບ "XOPEN_UNIX" ແລະ "_XOPEN_SOURCE_EXTENDED", ແລະ startfile
unix95.o. -muix=98 ໃຫ້ຄຳນິຍາມເພີ່ມເຕີມສຳລັບ "_XOPEN_UNIX",
"_XOPEN_SOURCE_EXTENDED", "_INCLUDE__STDC_A1_SOURCE" ແລະ "_INCLUDE_XOPEN_SOURCE_500",
ແລະ startfile unix98.o.

ມັນ​ແມ່ນ ທີ່ສໍາຄັນ ໃຫ້ສັງເກດວ່າທາງເລືອກນີ້ປ່ຽນແປງການໂຕ້ຕອບສໍາລັບຫ້ອງສະຫມຸດຕ່າງໆ
ປົກກະຕິ. ມັນຍັງມີຜົນກະທົບຕໍ່ພຶດຕິກໍາການດໍາເນີນງານຂອງຫ້ອງສະຫມຸດ C. ດັ່ງນັ້ນ, ທີ່ຮ້າ​​ຍ
ການດູແລແມ່ນຈໍາເປັນໃນການນໍາໃຊ້ທາງເລືອກນີ້.

ລະຫັດຫ້ອງສະຫມຸດທີ່ມີຈຸດປະສົງເພື່ອດໍາເນີນການກັບຫຼາຍກ່ວາຫນຶ່ງມາດຕະຖານ UNIX ຈະຕ້ອງທົດສອບ,
ຕັ້ງຄ່າແລະຟື້ນຟູຕົວແປ __xpg4_extended_mask ຕາມ​ຄວາມ​ເຫມາະ​ສົມ. ຊອບແວ GNU ສ່ວນໃຫຍ່
ບໍ່ໄດ້ສະຫນອງຄວາມສາມາດນີ້.

-nolibdld
ສະກັດກັ້ນການສ້າງທາງເລືອກການເຊື່ອມໂຍງໃນການຄົ້ນຫາ libdld.sl ເມື່ອ -static ທາງເລືອກແມ່ນ
ລະບຸໄວ້ໃນ HP-UX 10 ແລະຕໍ່ມາ.

-static
ການປະຕິບັດ HP-UX ຂອງ setlocale ໃນ libc ມີຄວາມຂຶ້ນກັບ libdld.sl. ຢູ່ທີ່ນັ້ນ
ບໍ່ແມ່ນສະບັບເກັບຂອງ libdld.sl. ດັ່ງນັ້ນ, ໃນເວລາທີ່ -static ທາງ​ເລືອກ​ແມ່ນ​ໄດ້​ລະ​ບຸ​ໄວ້​,
ທາງເລືອກການເຊື່ອມຕໍ່ພິເສດແມ່ນຈໍາເປັນເພື່ອແກ້ໄຂການເພິ່ງພາອາໄສນີ້.

ໃນ HP-UX 10 ແລະຕໍ່ມາ, ໄດເວີ GCC ເພີ່ມທາງເລືອກທີ່ຈໍາເປັນເພື່ອເຊື່ອມຕໍ່ກັບ
libdld.sl ເມື່ອ -static ທາງ​ເລືອກ​ແມ່ນ​ລະ​ບຸ​ໄວ້​. ນີ້ເຮັດໃຫ້ຜົນໄດ້ຮັບຂອງຖານສອງ
ເປັນແບບເຄື່ອນໄຫວ. ໃນພອດ 64-bit, ຕົວເຊື່ອມຕໍ່ສ້າງ binaries ແບບເຄື່ອນໄຫວຕາມຄ່າເລີ່ມຕົ້ນໃນ
ກໍລະນີໃດກໍ່ຕາມ. ໄດ້ -nolibdld ທາງເລືອກສາມາດຖືກນໍາໃຊ້ເພື່ອປ້ອງກັນບໍ່ໃຫ້ຄົນຂັບ GCC ຈາກການເພີ່ມ
ຕົວເລືອກການເຊື່ອມຕໍ່ເຫຼົ່ານີ້.

- ກະທູ້
ເພີ່ມການສະຫນັບສະຫນູນສໍາລັບ multithreading ກັບ the dce ກະ​ທູ້ ຫ້ອງສະໝຸດພາຍໃຕ້ HP-UX. ທາງເລືອກນີ້
ກໍານົດທຸງສໍາລັບທັງ preprocessor ແລະ linker.

Intel 386 ແລະ AMD x86-64 ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ -m ທາງ​ເລືອກ​ແມ່ນ​ໄດ້​ກໍາ​ນົດ​ສໍາ​ລັບ​ຄອບ​ຄົວ i386 ແລະ x86-64 ຂອງ​ຄອມ​ພິວ​ເຕີ​:

-mtune=cpu-type
ປບັ cpu-type ທຸກຢ່າງທີ່ໃຊ້ໄດ້ກ່ຽວກັບລະຫັດທີ່ສ້າງຂຶ້ນ, ຍົກເວັ້ນ ABI
ແລະຊຸດຄໍາແນະນໍາທີ່ມີຢູ່. ທາງ​ເລືອກ​ສໍາ​ລັບ​ການ​ cpu-type ແມ່ນ:

generic
ຜະລິດລະຫັດໃຫ້ເໝາະສົມກັບໂປເຊດເຊີ IA32/AMD64/EM64T ທົ່ວໄປທີ່ສຸດ. ຖ້າ​ເຈົ້າ
ຮູ້ CPU ທີ່ລະຫັດຂອງທ່ານຈະດໍາເນີນການ, ຫຼັງຈາກນັ້ນທ່ານຄວນໃຊ້ທີ່ສອດຄ້ອງກັນ
-mtune ທາງ​ເລືອກ​ແທນ​ທີ່​ຈະ​ເປັນ​ -mtune=ທົ່ວໄປ. ແຕ່, ຖ້າທ່ານບໍ່ຮູ້ວ່າ CPU ໃດ
ຜູ້ໃຊ້ຂອງຄໍາຮ້ອງສະຫມັກຂອງທ່ານຈະມີ, ຫຼັງຈາກນັ້ນທ່ານຄວນໃຊ້ທາງເລືອກນີ້.

ເນື່ອງຈາກໂປເຊດເຊີໃຫມ່ຖືກນໍາໄປໃຊ້ໃນຕະຫຼາດ, ພຶດຕິກໍາຂອງທາງເລືອກນີ້
ຈະມີການປ່ຽນແປງ. ດັ່ງນັ້ນ, ຖ້າທ່ານອັບເກຣດເປັນລຸ້ນໃໝ່ຂອງ GCC, ລະຫັດ
ທາງ​ເລືອກ​ທີ່​ສ້າງ​ຂຶ້ນ​ຈະ​ມີ​ການ​ປ່ຽນ​ແປງ​ເພື່ອ​ສະ​ທ້ອນ​ໃຫ້​ເຫັນ​ໂປຣ​ແກຣມ​ປະ​ມວນ​ຜົນ​ທີ່​ມີ​ທົ່ວ​ໄປ​ທີ່​ສຸດ​ໃນ​ເວ​ລາ​ທີ່​
GCC ລຸ້ນນັ້ນຖືກປ່ອຍອອກມາ.

ບໍ່​ມີ -march=ທົ່ວໄປ ທາງ​ເລືອກ​ເພາະ​ວ່າ​ - ມີນາ ຊີ້ບອກຄໍາແນະນໍາທີ່ກໍານົດໄວ້
compiler ສາມາດນໍາໃຊ້ໄດ້, ແລະບໍ່ມີຊຸດຄໍາແນະນໍາທົ່ວໄປທີ່ໃຊ້ໄດ້ກັບທຸກຄົນ
ໂຮງງານຜະລິດ. ໃນ​ທາງ​ກົງ​ກັນ​ຂ້າມ, -mtune ຊີ້ໃຫ້ເຫັນໂຮງງານຜະລິດ (ຫຼື, ໃນກໍລະນີນີ້,
ການລວບລວມໂປເຊດເຊີ) ທີ່ລະຫັດຖືກປັບປຸງໃຫ້ດີທີ່ສຸດ.

native
ນີ້ເລືອກ CPU ເພື່ອປັບເວລາການລວບລວມໂດຍການກໍານົດໂປເຊດເຊີ
ປະເພດຂອງເຄື່ອງລວບລວມ. ການນໍາໃຊ້ -mtune=native ຈະຜະລິດລະຫັດທີ່ດີທີ່ສຸດ
ສໍາລັບເຄື່ອງທ້ອງຖິ່ນພາຍໃຕ້ຂໍ້ຈໍາກັດຂອງຊຸດຄໍາແນະນໍາທີ່ເລືອກ.
ການນໍາໃຊ້ -march=native ຈະເປີດໃຊ້ທຸກຊຸດຍ່ອຍຄໍາແນະນໍາທີ່ສະຫນັບສະຫນູນໂດຍທ້ອງຖິ່ນ
ເຄື່ອງຈັກ (ເພາະສະນັ້ນຜົນໄດ້ຮັບອາດຈະບໍ່ເຮັດວຽກຢູ່ໃນເຄື່ອງທີ່ແຕກຕ່າງກັນ).

i386
CPU i386 ຂອງ Intel ຕົ້ນສະບັບ.

i486
CPU i486 ຂອງ Intel. (ບໍ່​ມີ​ການ​ກໍາ​ນົດ​ເວ​ລາ​ແມ່ນ​ປະ​ຕິ​ບັດ​ສໍາ​ລັບ​ການ chip ນີ້​.

i586, ເພນ
CPU Intel Pentium ທີ່ບໍ່ຮອງຮັບ MMX.

pentium-mmx
CPU Intel PentiumMMX ອີງໃສ່ Pentium core ທີ່ມີການສະຫນັບສະຫນູນຊຸດຄໍາແນະນໍາ MMX.

pentiumpro
CPU Intel PentiumPro.

i686
ຄືກັນກັບ "ທົ່ວໄປ", ແຕ່ເມື່ອໃຊ້ເປັນທາງເລືອກ "ເດືອນມີນາ", PentiumPro ຊຸດຄໍາແນະນໍາ
ຈະຖືກນໍາໃຊ້, ດັ່ງນັ້ນລະຫັດຈະດໍາເນີນການຢູ່ໃນທຸກຊິບຄອບຄົວ i686.

pentium 2
CPU Intel Pentium2 ອີງໃສ່ PentiumPro core ທີ່ມີການສະຫນັບສະຫນູນຊຸດຄໍາແນະນໍາ MMX.

pentium3, pentium 3 ມ
CPU Intel Pentium3 ອີງໃສ່ PentiumPro core ກັບຊຸດຄໍາແນະນໍາ MMX ແລະ SSE
ສະຫນັບສະຫນູນ.

pentium-ມ
ລຸ້ນພະລັງງານຕໍ່າຂອງ Intel Pentium3 CPU ກັບຊຸດຄໍາແນະນໍາ MMX, SSE ແລະ SSE2
ສະຫນັບສະຫນູນ. ໃຊ້ໂດຍປື້ມບັນທຶກ Centrino.

pentium4, pentium 4 ມ
CPU Intel Pentium4 ຮອງຮັບຊຸດຄໍາແນະນໍາ MMX, SSE ແລະ SSE2.

Prescott
ສະບັບປັບປຸງຂອງ CPU Intel Pentium4 ດ້ວຍຄໍາແນະນໍາ MMX, SSE, SSE2 ແລະ SSE3
ກໍາ​ນົດ​ສະ​ຫນັບ​ສະ​ຫນູນ​.

ໂນໂຄນາ
ສະບັບປັບປຸງຂອງ Intel Pentium4 CPU ທີ່ມີສ່ວນຂະຫຍາຍ 64-bit, MMX, SSE, SSE2 ແລະ
ສະຫນັບສະຫນູນຊຸດຄໍາແນະນໍາ SSE3.

ຫຼັກ 2
CPU Intel Core2 ທີ່ມີສ່ວນຂະຫຍາຍ 64-bit, MMX, SSE, SSE2, SSE3 ແລະ SSSE3 ຄໍາແນະນໍາ
ກໍາ​ນົດ​ສະ​ຫນັບ​ສະ​ຫນູນ​.

ຫຼັກ7
CPU Intel Core i7 ທີ່ມີສ່ວນຂະຫຍາຍ 64-bit, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 ແລະ
ສະຫນັບສະຫນູນຊຸດຄໍາແນະນໍາ SSE4.2.

corei7-avx
CPU Intel Core i7 ທີ່ມີສ່ວນຂະຫຍາຍ 64-bit, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, AVX, AES ແລະ PCLMUL ສະຫນັບສະຫນູນຊຸດຄໍາແນະນໍາ.

core-avx-i
CPU Intel Core ທີ່ມີສ່ວນຂະຫຍາຍ 64-bit, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND ແລະ F16C ສະຫນັບສະຫນູນຊຸດຄໍາແນະນໍາ.

ປະ​ລໍາ​ມະ​ນູ
Intel Atom CPU ທີ່ມີສ່ວນຂະຫຍາຍ 64-bit, MMX, SSE, SSE2, SSE3 ແລະ SSSE3 instruction
ກໍາ​ນົດ​ສະ​ຫນັບ​ສະ​ຫນູນ​.

k6 AMD K6 CPU ຮອງຮັບຊຸດຄຳສັ່ງ MMX.

k6-2, k6-3
ລຸ້ນປັບປຸງຂອງ CPU AMD K6 ດ້ວຍ MMX ແລະ 3DNow! ສະຫນັບສະຫນູນຊຸດຄໍາແນະນໍາ.

ກິລາ​ໂອ​ລິ​ມປິກ, athlon-tbird
AMD Athlon CPU ກັບ MMX, 3dNOW!, ປັບປຸງ 3DNow! ແລະຄໍາແນະນໍາ SSE prefetch
ສະຫນັບສະຫນູນ.

ກິລາ-4, athlon-xp, ກິລາ-mp
ປັບປຸງ CPU AMD Athlon ດ້ວຍ MMX, 3DNow!, ປັບປຸງ 3DNow! ແລະຄໍາແນະນໍາ SSE ເຕັມ
ກໍາ​ນົດ​ສະ​ຫນັບ​ສະ​ຫນູນ​.

k8, opteron, ກິລາ 64, ກິລາ-fx
AMD K8 core CPUs ທີ່ມີຊຸດຄໍາແນະນໍາ x86-64 ສະຫນັບສະຫນູນ. (ນີ້ supersets MMX,
SSE, SSE2, 3DNow!, ປັບປຸງ 3DNow! ແລະການຂະຫຍາຍຊຸດຄໍາແນະນໍາ 64-bit.)

k8-sse3, opteron-sse3, athlon64-sse3
ສະບັບປັບປຸງຂອງ k8, opteron ແລະ athlon64 ດ້ວຍການສະຫນັບສະຫນູນຊຸດຄໍາແນະນໍາ SSE3.

amdfam10, ບາເຊໂລນາ
AMD Family 10h cores CPUs ທີ່ຮອງຮັບຊຸດຄໍາແນະນໍາ x86-64. (ນີ້
supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, ປັບປຸງ 3DNow!, ABM ແລະ 64-bit
ການຂະຫຍາຍຊຸດຄໍາແນະນໍາ.)

bdver1
AMD Family 15h cores CPUs ທີ່ຮອງຮັບຊຸດຄໍາແນະນໍາ x86-64. (ນີ້
supersets FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
SSSE3, SSE4.1, SSE4.2, ABM ແລະສ່ວນຂະຫຍາຍຊຸດຄໍາແນະນໍາ 64-bit.)

bdver2
AMD Family 15h cores CPUs ທີ່ຮອງຮັບຊຸດຄໍາແນະນໍາ x86-64. (ນີ້
supersets BMI, TBM, F16C, FMA, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2,
SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM ແລະຊຸດຄໍາແນະນໍາ 64-bit.)

btver1
AMD Family 14h cores CPUs ທີ່ຮອງຮັບຊຸດຄໍາແນະນໍາ x86-64. (ນີ້
supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM ແລະຊຸດຄໍາແນະນໍາ 64-bit
ສ່ວນຂະຫຍາຍ.)

winchip-c6
IDT Winchip C6 CPU, ປະຕິບັດໃນແບບດຽວກັນກັບ i486 ດ້ວຍຊຸດຄໍາແນະນໍາ MMX ເພີ່ມເຕີມ
ສະຫນັບສະຫນູນ.

winchip2
IDT Winchip2 CPU, ຈັດການກັບວິທີດຽວກັນກັບ i486 ດ້ວຍ MMX ແລະ 3DNow ເພີ່ມເຕີມ!
ສະຫນັບສະຫນູນຊຸດຄໍາແນະນໍາ.

c3 ຜ່ານ C3 CPU ກັບ MMX ແລະ 3DNow! ສະຫນັບສະຫນູນຊຸດຄໍາແນະນໍາ. (ບໍ່ມີການກຳນົດເວລາ
ປະຕິບັດສໍາລັບ chip ນີ້.)

c3-2
ຜ່ານ C3-2 CPU ທີ່ມີການສະຫນັບສະຫນູນຊຸດຄໍາແນະນໍາ MMX ແລະ SSE. (ບໍ່ມີການກຳນົດເວລາ
ປະຕິບັດສໍາລັບ chip ນີ້.)

geode
ຝັງ CPU AMD ກັບ MMX ແລະ 3DNow! ສະຫນັບສະຫນູນຊຸດຄໍາແນະນໍາ.

ໃນຂະນະທີ່ເລືອກສະເພາະ cpu-type ຈະຈັດຕາຕະລາງສິ່ງຕ່າງໆທີ່ເຫມາະສົມສໍາລັບສິ່ງນັ້ນ
chip ໂດຍສະເພາະ, compiler ຈະບໍ່ສ້າງລະຫັດໃດໆທີ່ບໍ່ດໍາເນີນການຢູ່ໃນ
ປະເພດເຄື່ອງຈັກເລີ່ມຕົ້ນໂດຍບໍ່ມີການ - ມີນາ=cpu-type ທາງ​ເລືອກ​ທີ່​ຖືກ​ນໍາ​ໃຊ້​. ຕົວຢ່າງ, ຖ້າ
GCC ຖືກຕັ້ງຄ່າສໍາລັບ i686-pc-linux-gnu ຫຼັງຈາກນັ້ນ -mtune=pentium4 ຈະສ້າງລະຫັດທີ່
ແມ່ນ tuned ສໍາລັບ Pentium4 ແຕ່ຈະຍັງແລ່ນຢູ່ໃນເຄື່ອງ i686.

- ມີນາ=cpu-type
ສ້າງຄໍາແນະນໍາສໍາລັບປະເພດເຄື່ອງຈັກ cpu-type. ທາງ​ເລືອກ​ສໍາ​ລັບ​ການ​ cpu-type ແມ່ນ
ເຊັ່ນ​ດຽວ​ກັນ​ກັບ​ສໍາ​ລັບ​ການ​ -mtune. ຍິ່ງໄປກວ່ານັ້ນ, ການລະບຸ - ມີນາ=cpu-type implies -mtune=cpu-type.

-mcpu=cpu-type
ຄຳສັບຄ້າຍຄືກັນທີ່ຖືກປະຕິເສດສຳລັບ -mtune.

-mfpmath=ຫນ່ວຍບໍລິການ
ສ້າງເລກເລກຄະນິດຈຸດລອຍສຳລັບໜ່ວຍທີ່ເລືອກ ຫນ່ວຍບໍລິການ. ທາງ​ເລືອກ​ສໍາ​ລັບ​ການ​ ຫນ່ວຍບໍລິການ ແມ່ນ:

387 ໃຊ້ຕົວປະມວນຜົນຈຸດລອຍແບບມາດຕະຖານ 387 ທີ່ມີຢູ່ໃນຊິບສ່ວນໃຫຍ່
ແລະ emulated ຖ້າບໍ່ດັ່ງນັ້ນ. ລະຫັດທີ່ລວບລວມດ້ວຍຕົວເລືອກນີ້ແລ່ນເກືອບທຸກບ່ອນ.
ຜົນໄດ້ຮັບຊົ່ວຄາວຖືກຄິດໄລ່ໃນຄວາມແມ່ນຍໍາ 80-bit ແທນທີ່ຈະເປັນຄວາມແມ່ນຍໍາ
ລະບຸໂດຍປະເພດ, ເຮັດໃຫ້ຜົນໄດ້ຮັບທີ່ແຕກຕ່າງກັນເລັກນ້ອຍເມື່ອທຽບກັບສ່ວນໃຫຍ່ຂອງ
ຊິບອື່ນໆ. ເບິ່ງ - ຮ້ານຂາຍເຄື່ອງຍ່ອຍ ສໍາລັບລາຍລະອຽດເພີ່ມເຕີມ.

ນີ້ແມ່ນທາງເລືອກເລີ່ມຕົ້ນສໍາລັບ i386 compiler.

sse ໃຊ້ຄໍາແນະນໍາຈຸດເລື່ອນ scalar ທີ່ມີຢູ່ໃນຊຸດຄໍາແນະນໍາ SSE. ນີ້
ຊຸດຄໍາແນະນໍາແມ່ນສະຫນັບສະຫນູນໂດຍ Pentium3 ແລະຊິບໃຫມ່ກວ່າ, ໃນສາຍ AMD ໂດຍ
ຊິບ Athlon-4, Athlon-xp ແລະ Athlon-mp. ສະບັບກ່ອນຫນ້າຂອງຄໍາແນະນໍາ SSE
ຊຸດ​ສະ​ຫນັບ​ສະ​ຫນູນ​ພຽງ​ແຕ່​ເລກ​ຄະ​ນິດ​ສາດ​ຄວາມ​ແມ່ນ​ຍໍາ​ດຽວ​, ດັ່ງ​ນັ້ນ​ສອງ​ແລະ​ຂະ​ຫຍາຍ -
ການຄິດໄລ່ຄວາມແມ່ນຍໍາແມ່ນຍັງເຮັດໄດ້ໂດຍໃຊ້ 387. A ສະບັບຕໍ່ມາ, ປະຈຸບັນພຽງແຕ່ຢູ່ໃນ
Pentium4 ແລະຊິບ AMD x86-64 ໃນອະນາຄົດ, ຮອງຮັບການຄິດໄລ່ເລກທີ່ຊັດເຈນສອງເທົ່າ
ເຊັ່ນດຽວກັນ.

ສໍາລັບ i386 compiler, ທ່ານຈໍາເປັນຕ້ອງໃຊ້ - ມີນາ=cpu-type, -msse or -msse2 switches
ເພື່ອເປີດໃຊ້ການຂະຫຍາຍ SSE ແລະເຮັດໃຫ້ທາງເລືອກນີ້ມີປະສິດທິພາບ. ສໍາລັບ x86-64 compiler,
ສ່ວນຂະຫຍາຍເຫຼົ່ານີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

ລະຫັດຜົນໄດ້ຮັບຄວນຈະໄວຂຶ້ນຢ່າງຫຼວງຫຼາຍໃນກໍລະນີຫຼາຍທີ່ສຸດແລະ
ຫຼີກເວັ້ນບັນຫາຄວາມບໍ່ສະຖຽນລະພາບທາງດ້ານຕົວເລກຂອງລະຫັດ 387, ແຕ່ອາດຈະທໍາລາຍບາງທີ່ມີຢູ່ແລ້ວ
ລະຫັດທີ່ຄາດວ່າຊົ່ວຄາວຈະເປັນ 80 bits.

ນີ້ແມ່ນທາງເລືອກເລີ່ມຕົ້ນສໍາລັບ x86-64 compiler.

ສ., 387
sse+387
ທັງສອງ
ພະຍາຍາມໃຊ້ຊຸດຄໍາແນະນໍາທັງສອງໃນເວລາດຽວກັນ. ນີ້ປະສິດທິຜົນສອງເທົ່າ
ຈໍາ​ນວນ​ຂອງ​ການ​ຈົດ​ທະ​ບຽນ​ທີ່​ມີ​ຢູ່​ແລະ​ໃນ​ຊິບ​ທີ່​ມີ​ຫົວ​ຫນ່ວຍ​ປະ​ຕິ​ບັດ​ແຍກ​ຕ່າງ​ຫາກ​ສໍາ​ລັບ 387​
ແລະ SSE ຊັບພະຍາກອນການປະຕິບັດເຊັ່ນດຽວກັນ. ໃຊ້ຕົວເລືອກນີ້ດ້ວຍຄວາມລະມັດລະວັງ, ຍ້ອນວ່າມັນຍັງຢູ່
ການທົດລອງ, ເພາະວ່າຜູ້ຈັດສັນການລົງທະບຽນ GCC ບໍ່ໄດ້ສ້າງແບບຈໍາລອງແຍກຕ່າງຫາກ
ຫນ່ວຍງານທີ່ເຮັດວຽກໄດ້ດີສົ່ງຜົນໃຫ້ການປະຕິບັດທີ່ບໍ່ຫມັ້ນຄົງ.

-masm=ພາສາ
ອອກຄໍາແນະນໍາ asm ໂດຍໃຊ້ເລືອກ ພາສາ. ທາງເລືອກທີ່ສະຫນັບສະຫນູນແມ່ນ intel or att
(ຄ່າເລີ່ມຕົ້ນ). Darwin ບໍ່ສະຫນັບສະຫນູນ intel.

-mieee-fp
-mno-ieee-fp
ຄວບຄຸມວ່າຜູ້ລວບລວມຂໍ້ມູນໃຊ້ການປຽບທຽບຈຸດລອຍຂອງ IEEE ຫຼືບໍ່. ເຫຼົ່ານີ້
ຈັດການກັບກໍລະນີທີ່ຜົນຂອງການປຽບທຽບຖືກຈັດຮຽງຢ່າງຖືກຕ້ອງ.

-msoft-float
ສ້າງຜົນຜະລິດທີ່ມີຫ້ອງສະຫມຸດໂທຫາຈຸດທີ່ເລື່ອນໄດ້. ຄໍາເຕືອນ: ຄວາມຕ້ອງການ
ຫ້ອງສະຫມຸດບໍ່ແມ່ນສ່ວນຫນຶ່ງຂອງ GCC. ປົກກະຕິສິ່ງອໍານວຍຄວາມສະດວກຂອງເຄື່ອງປົກກະຕິ C
compiler ຖືກໃຊ້, ແຕ່ນີ້ບໍ່ສາມາດເຮັດໄດ້ໂດຍກົງໃນການລວບລວມຂ້າມ. ເຈົ້າ​ຕ້ອງ
ເຮັດການຈັດການຂອງທ່ານເອງເພື່ອສະຫນອງຫນ້າທີ່ຫ້ອງສະຫມຸດທີ່ເຫມາະສົມສໍາລັບການຂ້າມ.
ການລວບລວມ.

ໃນເຄື່ອງຈັກທີ່ຟັງຊັນສົ່ງຜົນໃຫ້ຈຸດລອຍຢູ່ໃນທະບຽນ 80387
stack, ບາງ opcodes ຈຸດລອຍອາດຈະຖືກປ່ອຍອອກມາເຖິງແມ່ນວ່າ -msoft-float ຖືກນໍາໃຊ້.

-mno-fp-ret-in-387
ຢ່າໃຊ້ການລົງທະບຽນ FPU ສໍາລັບຄ່າກັບຄືນຂອງຟັງຊັນ.

ສົນທິສັນຍາການໂທຫາປົກກະຕິມີຫນ້າທີ່ສົ່ງຄືນຄ່າຂອງປະເພດ "float" ແລະ "double"
ໃນການລົງທະບຽນ FPU, ເຖິງແມ່ນວ່າບໍ່ມີ FPU. ແນວຄວາມຄິດແມ່ນວ່າລະບົບປະຕິບັດການ
ຄວນເຮັດຕາມ FPU.

ທາງເລືອກ -mno-fp-ret-in-387 ເຮັດໃຫ້ຄ່າດັ່ງກ່າວຖືກສົ່ງຄືນໃນ CPU ທໍາມະດາ
ລົງທະບຽນແທນ.

-mno-fancy-math-387
ບາງ 387 emulators ບໍ່ສະຫນັບສະຫນູນຄໍາແນະນໍາ "sin", "cos" ແລະ "sqrt" ສໍາລັບ.
387. ລະບຸທາງເລືອກນີ້ເພື່ອຫຼີກເວັ້ນການສ້າງຄໍາແນະນໍາເຫຼົ່ານັ້ນ. ທາງ​ເລືອກ​ນີ້​ແມ່ນ​
ຄ່າເລີ່ມຕົ້ນໃນ FreeBSD, OpenBSD ແລະ NetBSD. ທາງ​ເລືອກ​ນີ້​ແມ່ນ overridden ໃນ​ເວ​ລາ​ທີ່​ - ມີນາ
ຊີ້ໃຫ້ເຫັນວ່າ CPU ເປົ້າຫມາຍຈະມີ FPU ສະເຫມີແລະດັ່ງນັ້ນຄໍາແນະນໍາຈະບໍ່
ຕ້ອງການ emulation. ໃນຖານະເປັນການດັດແກ້ 2.6.1, ຄໍາແນະນໍາເຫຼົ່ານີ້ບໍ່ໄດ້ຖືກສ້າງຂຶ້ນເວັ້ນເສຍແຕ່ວ່າທ່ານ
ຍັງໃຊ້ -funsafe-math-optimizations ສະຫຼັບ.

-malign-double
-mno-align-double
ຄວບຄຸມວ່າ GCC ວາງຕົວແປ "ຄູ່", "ຄູ່ຍາວ", ແລະ "ຍາວຍາວ" ຢູ່ໃນຕົວແປ a
ຂອບ​ເຂດ​ສອງ​ຄໍາ​ຫຼື​ເຂດ​ແດນ​ຄໍາ​ດຽວ​. ການຈັດຮຽງຕົວແປ "ຄູ່" ໃນສອງຄໍາ
boundary ຜະລິດລະຫັດທີ່ເຮັດວຽກໄວຂຶ້ນເລັກນ້ອຍໃນ a Pentium ໃນຄ່າໃຊ້ຈ່າຍເພີ່ມເຕີມ
ຄວາມຊົງ ຈຳ.

ສຸດ x86-64, -malign-double ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

ຄໍາເຕືອນ: ຖ້າທ່ານໃຊ້ -malign-double ສະຫຼັບ, ໂຄງສ້າງທີ່ມີປະເພດຂ້າງເທິງ
ຈະຖືກຈັດຮຽງທີ່ແຕກຕ່າງຈາກການໂຕ້ຕອບຂອງສອງແອັບພລິເຄຊັນທີ່ເຜີຍແຜ່
ຂໍ້ມູນສະເພາະຂອງ 386 ແລະຈະບໍ່ເຂົ້າກັນໄດ້ກັບໂຄງສ້າງໃນລະຫັດ
ລວບລວມໂດຍບໍ່ມີການປ່ຽນນັ້ນ.

-m96bit-ຍາວ-ສອງເທົ່າ
-m128bit-ຍາວ-ສອງເທົ່າ
ສະຫວິດເຫຼົ່ານີ້ຄວບຄຸມຂະຫນາດຂອງປະເພດ "ຄູ່ຍາວ". ໄບນາຣີແອັບພລິເຄຊັນ i386
ການໂຕ້ຕອບກໍານົດຂະຫນາດທີ່ຈະເປັນ 96 bits, ດັ່ງນັ້ນ -m96bit-ຍາວ-ສອງເທົ່າ ເປັນຄ່າເລີ່ມຕົ້ນໃນ
ໂໝດ 32-ບິດ.

ສະຖາປັດຕະຍະກໍາທີ່ທັນສະໄຫມ (Pentium ແລະໃຫມ່ກວ່າ) ຕ້ອງການ "ຄູ່ຍາວ" ເພື່ອສອດຄ່ອງກັບ 8-
ຫຼືຂອບເຂດ 16-byte. ໃນ array ຫຼືໂຄງສ້າງທີ່ສອດຄ່ອງກັບ ABI, ນີ້ບໍ່ແມ່ນ
ເປັນໄປໄດ້. ດັ່ງນັ້ນການລະບຸ -m128bit-ຍາວ-ສອງເທົ່າ ຈັດຮຽງ "ຄູ່ຍາວ" ເປັນ 16-byte
ເຂດແດນໂດຍການໃສ່ "ຄູ່ຍາວ" ກັບສູນ 32-bit ເພີ່ມເຕີມ.

ໃນ x86-64 compiler, -m128bit-ຍາວ-ສອງເທົ່າ ເປັນທາງເລືອກເລີ່ມຕົ້ນເປັນ ABI ຂອງມັນ
ກໍານົດວ່າ "ຄູ່ຍາວ" ຈະຖືກຈັດໃສ່ໃນຂອບເຂດ 16-byte.

ສັງເກດເຫັນວ່າທັງສອງທາງເລືອກເຫຼົ່ານີ້ບໍ່ເຮັດໃຫ້ຄວາມຊັດເຈນພິເສດເກີນມາດຕະຖານ x87
ຂອງ 80 bits ສໍາລັບ "ສອງເທົ່າຍາວ".

ຄໍາເຕືອນ: ຖ້າທ່ານ override ຄ່າເລີ່ມຕົ້ນສໍາລັບ ABI ເປົ້າຫມາຍຂອງທ່ານ, ໂຄງສ້າງແລະ
arrays ທີ່ມີຕົວແປ "ຄູ່ຍາວ" ຈະປ່ຽນຂະຫນາດຂອງເຂົາເຈົ້າເຊັ່ນດຽວກັນກັບຫນ້າທີ່
ສົນທິສັນຍາການໂທຫາການປະຕິບັດຫນ້າທີ່ "ສອງເທົ່າຍາວ" ຈະຖືກດັດແກ້. ເພາະສະນັ້ນເຂົາເຈົ້າ
ຈະບໍ່ເຂົ້າກັນໄດ້ binary ກັບ arrays ຫຼືໂຄງສ້າງໃນລະຫັດທີ່ລວບລວມໂດຍບໍ່ມີການນັ້ນ
ສະຫຼັບ.

-mlarge-data-threshold=ຈໍານວນ
ເມື່ອ​ໃດ​ -mcmodel=ປານກາງ ແມ່ນລະບຸໄວ້, ຂໍ້ມູນໃຫຍ່ກວ່າ threshold ຖືກຈັດໃສ່ໃນຂະຫນາດໃຫຍ່
ພາກສ່ວນຂໍ້ມູນ. ຄ່ານີ້ຈະຕ້ອງຄືກັນທົ່ວທຸກວັດຖຸທີ່ເຊື່ອມຕໍ່ເຂົ້າໃນຖານສອງ
ແລະຄ່າເລີ່ມຕົ້ນເປັນ 65535.

-mrtd
ໃຊ້ສົນທິສັນຍາການເອີ້ນຟັງຊັນທີ່ຕ່າງກັນ, ເຊິ່ງຟັງຊັນທີ່ຕ້ອງແກ້ໄຂ
ຈໍານວນການໂຕ້ຖຽງກັບຄືນດ້ວຍ "ret" num ຄໍາແນະນໍາ, ເຊິ່ງ pops ການໂຕ້ຖຽງຂອງເຂົາເຈົ້າ
ໃນຂະນະທີ່ກັບຄືນ. ນີ້ຊ່ວຍປະຢັດຄໍາແນະນໍາຫນຶ່ງໃນຜູ້ໂທນັບຕັ້ງແຕ່ບໍ່ຈໍາເປັນຕ້ອງ
ປະກົດການໂຕ້ຖຽງຢູ່ທີ່ນັ້ນ.

ທ່ານ​ສາ​ມາດ​ລະ​ບຸ​ວ່າ​ການ​ທໍາ​ງານ​ຂອງ​ບຸກ​ຄົນ​ແມ່ນ​ເອີ້ນ​ວ່າ​ມີ​ລໍາ​ດັບ​ການ​ເອີ້ນ​ນີ້​ກັບ​
ຄຸນ​ລັກ​ສະ​ນະ​ຂອງ​ຫນ້າ​ທີ່​ stdcall. ນອກນັ້ນທ່ານຍັງສາມາດ override ໄດ້ -mrtd ທາງ​ເລືອກ​ໂດຍ​ການ​ນໍາ​ໃຊ້​
ຄຸນ​ລັກ​ສະ​ນະ​ການ​ທໍາ​ງານ​ cdecl.

ຄໍາເຕືອນ: ສົນທິສັນຍາການເອີ້ນນີ້ແມ່ນບໍ່ເຂົ້າກັນໄດ້ກັບອັນທີ່ປົກກະຕິໃຊ້ຢູ່ໃນ Unix,
ດັ່ງນັ້ນທ່ານບໍ່ສາມາດໃຊ້ມັນຖ້າທ່ານຕ້ອງການໂທຫາຫ້ອງສະຫມຸດທີ່ລວບລວມດ້ວຍ Unix compiler.

ນອກຈາກນັ້ນ, ທ່ານຕ້ອງໃຫ້ prototypes ຟັງຊັນສໍາລັບຫນ້າທີ່ທັງຫມົດທີ່ໃຊ້ຕົວແປ
ຈໍານວນການໂຕ້ຖຽງ (ລວມທັງ "printf"); ຖ້າບໍ່ດັ່ງນັ້ນລະຫັດບໍ່ຖືກຕ້ອງຈະຖືກສ້າງ
ສໍາລັບການໂທຫາຫນ້າທີ່ເຫຼົ່ານັ້ນ.

ນອກຈາກນັ້ນ, ລະຫັດບໍ່ຖືກຕ້ອງຢ່າງຮຸນແຮງຈະສົ່ງຜົນໃຫ້ຖ້າທ່ານໂທຫາຟັງຊັນທີ່ມີຫຼາຍເກີນໄປ
ການໂຕ້ຖຽງ. (ປົກກະຕິ, ການໂຕ້ຖຽງພິເສດແມ່ນຖືກລະເລີຍຢ່າງບໍ່ມີອັນຕະລາຍ.)

-mregparm=num
ຄວບຄຸມຈຳນວນທະບຽນທີ່ໃຊ້ເພື່ອຜ່ານອາກິວເມັນຈຳນວນເຕັມ. ໂດຍຄ່າເລີ່ມຕົ້ນ, ບໍ່
ທະບຽນແມ່ນໃຊ້ເພື່ອຜ່ານການໂຕ້ຖຽງ, ແລະໃນ 3 ທະບຽນສາມາດຖືກນໍາໃຊ້ຫຼາຍທີ່ສຸດ. ເຈົ້າ​ສາ​ມາດ
ຄວບຄຸມພຶດຕິກໍານີ້ສໍາລັບຟັງຊັນສະເພາະໂດຍການນໍາໃຊ້ຄຸນສົມບັດຂອງຟັງຊັນ regparm.

ຄໍາເຕືອນ: ຖ້າທ່ານໃຊ້ສະຫຼັບນີ້, ແລະ num ບໍ່ແມ່ນສູນ, ຫຼັງຈາກນັ້ນທ່ານຕ້ອງສ້າງໂມດູນທັງຫມົດ
ມີມູນຄ່າດຽວກັນ, ລວມທັງຫ້ອງສະຫມຸດໃດໆ. ນີ້ປະກອບມີຫ້ອງສະຫມຸດລະບົບແລະ
ໂມດູນການເລີ່ມຕົ້ນ.

-msseregparm
ໃຊ້ SSE register passing conventions for float and double arguments and return values ​​.
ທ່ານ​ສາ​ມາດ​ຄວບ​ຄຸມ​ພຶດ​ຕິ​ກໍາ​ນີ້​ສໍາ​ລັບ​ຫນ້າ​ທີ່​ສະ​ເພາະ​ໃດ​ຫນຶ່ງ​ໂດຍ​ການ​ນໍາ​ໃຊ້​ຄຸນ​ລັກ​ສະ​ນະ​ຂອງ​ການ​ທໍາ​ງານ​
sseregparm.

ຄໍາເຕືອນ: ຖ້າ​ຫາກ​ວ່າ​ທ່ານ​ນໍາ​ໃຊ້​ສະ​ຫຼັບ​ນີ້​, ທ່ານ​ຈະ​ຕ້ອງ​ໄດ້​ສ້າງ​ໂມ​ດູນ​ທັງ​ຫມົດ​ທີ່​ມີ​ຄ່າ​ດຽວ​ກັນ​,
ລວມທັງຫ້ອງສະຫມຸດໃດໆ. ນີ້ປະກອບມີຫ້ອງສະຫມຸດລະບົບແລະໂມດູນການເລີ່ມຕົ້ນ.

-mvect8-ret-in-mem
ກັບຄືນ vectors 8-byte ໃນຫນ່ວຍຄວາມຈໍາແທນທີ່ຈະເປັນການລົງທະບຽນ MMX. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນທີ່ເປີດຢູ່
Solaris@tie{}8 ແລະ 9 ແລະ VxWorks ເພື່ອຈັບຄູ່ ABI ຂອງ Sun Studio compilers ຈົນກ່ວາ
ລຸ້ນ 12. ລຸ້ນ compiler ຕໍ່ມາ (ເລີ່ມດ້ວຍ Studio 12 Update@tie{}1) ຕິດຕາມ.
ABI ທີ່ໃຊ້ໂດຍເປົ້າໝາຍ x86 ອື່ນໆ, ເຊິ່ງເປັນຄ່າເລີ່ມຕົ້ນໃນ Solaris@tie{}10 ​​ແລະຕໍ່ມາ.
ພຽງແຕ່ ໃຊ້ຕົວເລືອກນີ້ຖ້າທ່ານຕ້ອງການຍັງຄົງເຂົ້າກັນໄດ້ກັບລະຫັດທີ່ມີຢູ່ທີ່ຜະລິດໂດຍ
ລຸ້ນ compiler ກ່ອນໜ້າ ຫຼືລຸ້ນເກົ່າຂອງ GCC.

-mpc32
-mpc64
-mpc80
ກໍານົດຄວາມແມ່ນຍໍາຈຸດເລື່ອນ 80387 ເປັນ 32, 64 ຫຼື 80 ບິດ. ເມື່ອ​ໃດ​ -mpc32 ແມ່ນ​ລະ​ບຸ​ໄວ້​,
ຄວາມສໍາຄັນຂອງຜົນໄດ້ຮັບຂອງການດໍາເນີນງານຈຸດລອຍແມ່ນໄດ້ຖືກມົນເປັນ 24 bits
(ຄວາມແມ່ນຍໍາດຽວ); -mpc64 ຮອບຄວາມສໍາຄັນຂອງຜົນໄດ້ຮັບຂອງຈຸດທີ່ເລື່ອນໄດ້
ປະຕິບັດການ 53 bits (ຄວາມແມ່ນຍໍາສອງເທົ່າ) ແລະ -mpc80 ຮອບຄວາມສໍາຄັນຂອງຜົນໄດ້ຮັບ
ຂອງ​ການ​ດໍາ​ເນີນ​ງານ​ຈຸດ​ທີ່​ເລື່ອນ​ໄດ້ 64 bits (ຄວາມ​ແມ່ນ​ຍໍາ​ສອງ​ຂະ​ຫຍາຍ​)​, ຊຶ່ງ​ເປັນ​
ຄ່າເລີ່ມຕົ້ນ. ໃນເວລາທີ່ທາງເລືອກນີ້ຖືກນໍາໃຊ້, ການດໍາເນີນງານຈຸດທີ່ເລື່ອນໄດ້ໃນຄວາມແມ່ນຍໍາສູງກວ່າແມ່ນ
ບໍ່ສາມາດໃຊ້ໄດ້ກັບຜູ້ຂຽນໂປລແກລມໂດຍບໍ່ໄດ້ຕັ້ງຄໍາຄວບຄຸມ FPU ຢ່າງຈະແຈ້ງ.

ການກໍານົດການຮອບຂອງການດໍາເນີນການຈຸດລອຍໃຫ້ຫນ້ອຍກວ່າຄ່າເລີ່ມຕົ້ນ 80 bits ສາມາດ
ເລັ່ງບາງໂຄງການໂດຍ 2% ຫຼືຫຼາຍກວ່ານັ້ນ. ໃຫ້ສັງເກດວ່າບາງຫ້ອງສະຫມຸດຄະນິດສາດສົມມຸດວ່າ
Extend-precision (80-bit) ການດໍາເນີນງານຈຸດລອຍແມ່ນເປີດໃຊ້ງານຕາມຄ່າເລີ່ມຕົ້ນ; ປົກກະຕິ
ໃນຫ້ອງສະຫມຸດດັ່ງກ່າວສາມາດໄດ້ຮັບການສູນເສຍຢ່າງຫຼວງຫຼາຍຂອງຄວາມຖືກຕ້ອງ, ໂດຍປົກກະຕິຜ່ານທາງ.
ເອີ້ນວ່າ "ການຍົກເລີກໄພພິບັດ", ໃນເວລາທີ່ທາງເລືອກນີ້ຖືກນໍາໃຊ້ເພື່ອກໍານົດຄວາມແມ່ນຍໍາຂອງ
ຫນ້ອຍກວ່າຄວາມແມ່ນຍໍາຂະຫຍາຍ.

-mstackrealign
ຈັດວາງ stack ຢູ່ທາງເຂົ້າຄືນໃໝ່. ໃນ Intel x86, the -mstackrealign ທາງ​ເລືອກ​ຈະ​ສ້າງ​
prologue ສຳຮອງ ແລະ epilogue ທີ່ຈັດວາງ stack-time ຄືນໃໝ່ຖ້າຈໍາເປັນ.
ນີ້ສະຫນັບສະຫນູນການປະສົມລະຫັດເກົ່າທີ່ຮັກສາ stack ສອດຄ່ອງ 4-byte ກັບລະຫັດທີ່ທັນສະໄຫມ
ທີ່ຮັກສາ stack 16-byte ສໍາລັບຄວາມເຂົ້າກັນໄດ້ SSE. ເບິ່ງຄຸນລັກສະນະນຳ
"force_align_arg_pointer", ໃຊ້ໄດ້ກັບແຕ່ລະຫນ້າທີ່.

-mpreferred-stack-boundary=num
ພະຍາຍາມຮັກສາຂອບເຂດ stack ສອດຄ່ອງເປັນ 2 ຍົກຂຶ້ນມາ num ຂອບເຂດ byte. ຖ້າ
-mpreferred-stack-ເຂດແດນ ບໍ່ໄດ້ລະບຸໄວ້, ຄ່າເລີ່ມຕົ້ນແມ່ນ 4 (16 bytes ຫຼື 128 bits).

ຄໍາເຕືອນ: ເມື່ອສ້າງລະຫັດສໍາລັບສະຖາປັດຕະຍະ x86-64 ດ້ວຍການຂະຫຍາຍ SSE
ພິການ, -mpreferred-stack-boundary=3 ສາມາດຖືກນໍາໃຊ້ເພື່ອຮັກສາຂອບເຂດ stack ສອດຄ່ອງ
ເຖິງ 8 byte ຂອບເຂດ. ທ່ານຕ້ອງສ້າງໂມດູນທັງຫມົດດ້ວຍ -mpreferred-stack-boundary=3,
ລວມທັງຫ້ອງສະຫມຸດໃດໆ. ນີ້ປະກອບມີຫ້ອງສະຫມຸດລະບົບແລະໂມດູນການເລີ່ມຕົ້ນ.

-mincoming-stack-boundary=num
ສົມມຸດວ່າ stack ທີ່ເຂົ້າມາແມ່ນສອດຄ່ອງກັນກັບ 2 ຍົກຂຶ້ນມາ num ຂອບເຂດ byte. ຖ້າ
-mincoming-stack-ເຂດແດນ ບໍ່​ໄດ້​ລະ​ບຸ​ໄວ້​, ຫນຶ່ງ​ທີ່​ລະ​ບຸ​ໄວ້​ໂດຍ​
-mpreferred-stack-ເຂດແດນ ຈະຖືກນໍາໃຊ້.

ໃນ Pentium ແລະ PentiumPro, ຄ່າ "double" ແລະ "double ຍາວ" ຄວນຖືກຈັດໃສ່ກັບຄ່າ.
ຂອບເຂດ 8-byte (ເບິ່ງ -malign-double) ຫຼືທົນທຸກປະສິດທິພາບທີ່ໃຊ້ເວລາແລ່ນທີ່ສໍາຄັນ
ການລົງໂທດ. ໃນ Pentium III, ປະເພດຂໍ້ມູນ Streaming SIMD Extension (SSE) "__m128" ອາດຈະ
ບໍ່ເຮັດວຽກຢ່າງຖືກຕ້ອງຖ້າມັນບໍ່ແມ່ນການຈັດຮຽງ 16-byte.

ເພື່ອຮັບປະກັນການຈັດຮຽງທີ່ຖືກຕ້ອງຂອງຄ່ານີ້ຢູ່ໃນ stack, ຂອບເຂດ stack ຕ້ອງເປັນ
ຈັດຮຽງຕາມທີ່ຕ້ອງການໂດຍຄ່າໃດໆກໍຕາມທີ່ເກັບໄວ້ໃນ stack. ນອກຈາກນັ້ນ, ທຸກໆຫນ້າທີ່
ຕ້ອງໄດ້ຮັບການຜະລິດເຊັ່ນວ່າມັນຮັກສາ stack ສອດຄ່ອງ. ດັ່ງນັ້ນຈຶ່ງໂທຫາຫນ້າທີ່
ລວບລວມດ້ວຍຂອບເຂດ stack ທີ່ຕ້ອງການສູງກວ່າຈາກຟັງຊັນທີ່ລວບລວມດ້ວຍຕ່ໍາ
ຂອບເຂດຂອງ stack ທີ່ຕ້ອງການສ່ວນຫຼາຍອາດຈະເຮັດໃຫ້ stack ບໍ່ຖືກຕ້ອງ. ມັນໄດ້ຖືກແນະນໍາວ່າ
ຫ້ອງສະຫມຸດທີ່ໃຊ້ການໂທກັບຄືນໄປບ່ອນສະເຫມີໃຊ້ການຕັ້ງຄ່າເລີ່ມຕົ້ນ.

ການຈັດຮຽງພິເສດນີ້ໃຊ້ພື້ນທີ່ stack ພິເສດ, ແລະໂດຍທົ່ວໄປແລ້ວຈະເພີ່ມລະຫັດ
ຂະໜາດ. ລະຫັດທີ່ມີຄວາມອ່ອນໄຫວຕໍ່ກັບການນໍາໃຊ້ພື້ນທີ່ stack, ເຊັ່ນ: ລະບົບຝັງແລະ
kernels ລະ​ບົບ​ປະ​ຕິ​ບັດ​ການ​, ອາດ​ຈະ​ຕ້ອງ​ການ​ທີ່​ຈະ​ຫຼຸດ​ຜ່ອນ​ການ​ສອດ​ຄ່ອງ​ກັບ​
-mpreferred-stack-boundary=2.

-mmmx
-mno-mmx
-msse
-mno-sse
-msse2
-mno-sse2
-msse3
-mno-sse3
-mssse3
-mno-ssse3
-msse4.1
-mno-sse4.1
-msse4.2
-mno-sse4.2
-msse4
-mno-sse4
-mavx
-mno-avx
-mavx2
-mno-avx2
- ແມ່
-mno-aes
-mpclmul
-mno-pclmul
-mfsgsbase
-mno-fsgsbase
-mrdrnd
-mno-rdrnd
-mf16c
-mno-f16c
-mfma
-mno-fma
-msse4a
-mno-sse4a
-mfma4
-mno-fma4
-mxop
-mno-xop
-mlwp
-mno-lwp
-m3dnow
-mno-3dnow
-mpopcnt
-mno-popcnt
- mabm
-mno-abm
-mbmi
-mbmi2
-mno-bmi
-mno-bmi2
-mlzcnt
-mno-lzcnt
-mtbm
-mno-tbm
ສະວິດເຫຼົ່ານີ້ເປີດ ຫຼືປິດການນຳໃຊ້ຄຳແນະນຳໃນ MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, F16C, FMA, SSE4A, FMA4, XOP,
LWP, ABM, BMI, BMI2, LZCNT ຫຼື 3DNow!
ຊຸດຄໍາແນະນໍາທີ່ຂະຫຍາຍ. ສ່ວນຂະຫຍາຍເຫຼົ່ານີ້ຍັງມີຢູ່ໃນຕົວ
ຫນ້າ​ທີ່​: ເບິ່ງ​ X86 Built-in ຫນ້າທີ່, ສໍາລັບລາຍລະອຽດຂອງຫນ້າທີ່ເປີດໃຊ້ງານແລະ
ປິດການໃຊ້ງານໂດຍປຸ່ມເຫຼົ່ານີ້.

ເພື່ອໃຫ້ມີຄໍາແນະນໍາ SSE/SSE2 ທີ່ສ້າງຂຶ້ນໂດຍອັດຕະໂນມັດຈາກລະຫັດຈຸດລອຍ (ເປັນ
ກົງກັນຂ້າມກັບ 387 ຄໍາແນະນໍາ), ເບິ່ງ -mfpmath=sse.

GCC depresses SSEx ຄໍາແນະນໍາໃນເວລາທີ່ -mavx ຖືກນໍາໃຊ້. ແທນທີ່ຈະ, ມັນສ້າງ AVX ໃໝ່
ຄໍາແນະນໍາຫຼືການທຽບເທົ່າ AVX ສໍາລັບຄໍາແນະນໍາ SSEx ທັງຫມົດໃນເວລາທີ່ຈໍາເປັນ.

ຕົວເລືອກເຫຼົ່ານີ້ຈະເຮັດໃຫ້ GCC ໃຊ້ຄໍາແນະນໍາເພີ່ມເຕີມເຫຼົ່ານີ້ຢູ່ໃນລະຫັດທີ່ສ້າງຂຶ້ນ,
ເຖິງແມ່ນວ່າບໍ່ມີ -mfpmath=sse. ແອັບພລິເຄຊັ່ນທີ່ເຮັດການກວດຫາ CPU ແລ່ນເວລາຕ້ອງ
ລວບລວມໄຟລ໌ແຍກຕ່າງຫາກສໍາລັບແຕ່ລະສະຖາປັດຕະຍະກໍາທີ່ສະຫນັບສະຫນູນ, ໂດຍໃຊ້ທຸງທີ່ເຫມາະສົມ.
ໂດຍສະເພາະ, ໄຟລ໌ທີ່ມີລະຫັດກວດຫາ CPU ຄວນຖືກລວບລວມໂດຍບໍ່ມີການ
ທາງເລືອກເຫຼົ່ານີ້.

-mcld
ທາງເລືອກນີ້ສັ່ງໃຫ້ GCC ປ່ອຍຄໍາແນະນໍາ "cld" ໃນ prologue ຂອງຫນ້າທີ່
ທີ່ນໍາໃຊ້ຄໍາແນະນໍາ string. ຄໍາແນະນໍາສາຍແມ່ນຂຶ້ນກັບທຸງ DF ເພື່ອເລືອກ
ລະຫວ່າງ autoincrement ຫຼື autodecrement mode. ໃນຂະນະທີ່ ABI ກໍານົດທຸງ DF ກັບ
ຈະຖືກລຶບລ້າງໃນການເຂົ້າຟັງຊັນ, ບາງລະບົບປະຕິບັດການລະເມີດຂໍ້ກໍາຫນົດນີ້ໂດຍບໍ່ໄດ້
ລ້າງທຸງ DF ໃນຜູ້ສົ່ງຂໍ້ຍົກເວັ້ນຂອງພວກເຂົາ. ຕົວຈັດການຂໍ້ຍົກເວັ້ນສາມາດເປັນ
invoked ກັບຊຸດທຸງ DF, ເຊິ່ງນໍາໄປສູ່ໂຫມດທິດທາງທີ່ບໍ່ຖືກຕ້ອງໃນເວລາທີ່ string
ຄໍາແນະນໍາຖືກນໍາໃຊ້. ທາງເລືອກນີ້ສາມາດຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນໃນ 32-bit x86 ເປົ້າຫມາຍໂດຍ
ການຕັ້ງຄ່າ GCC ກັບ --enable-cld ຕັ້ງຄ່າທາງເລືອກ. ການຜະລິດ "cld"
ຄໍາແນະນໍາສາມາດຖືກສະກັດກັ້ນດ້ວຍ -mno-cld ທາງເລືອກ compiler ໃນກໍລະນີນີ້.

-mvzeroupper
ຕົວເລືອກນີ້ສັ່ງໃຫ້ GCC ປ່ອຍຄໍາແນະນໍາ "vzeroupper" ກ່ອນທີ່ຈະໂອນ
ຄວບຄຸມການໄຫຼອອກຈາກຟັງຊັນເພື່ອຫຼຸດຜ່ອນການລົງໂທດການປ່ຽນ AVX ກັບ SSE ໜ້ອຍທີ່ສຸດ
ເອົາສູນພາຍໃນທີ່ບໍ່ຈໍາເປັນອອກ.

-mprefer-avx128
ຕົວເລືອກນີ້ສັ່ງໃຫ້ GCC ໃຊ້ຄໍາແນະນໍາ 128-bit AVX ແທນ AVX 256-bit
ຄໍາແນະນໍາໃນ auto-vectorizer.

-mcx16
ຕົວເລືອກນີ້ຈະເຮັດໃຫ້ GCC ໃຊ້ຄໍາແນະນໍາ CMPXCHG16B ໃນລະຫັດທີ່ສ້າງຂຶ້ນ.
CMPXCHG16B ອະນຸຍາດໃຫ້ປະຕິບັດການປະລໍາມະນູໃນ 128-bit double quadword (ຫຼື oword) ຂໍ້ມູນ
ປະເພດ. ນີ້ແມ່ນເປັນປະໂຫຍດສໍາລັບເຄື່ອງນັບຄວາມລະອຽດສູງທີ່ສາມາດປັບປຸງໄດ້ໂດຍຫຼາຍ
ໂປເຊດເຊີ (ຫຼືແກນ). ຄໍາແນະນໍານີ້ຖືກສ້າງຂື້ນເປັນສ່ວນໜຶ່ງຂອງອາຕອມໃນຕົວ
ຫນ້າ​ທີ່​: ເບິ່ງ​ __ຊິ້ງ ເກີດຂຶ້ນ or __ປະລໍາມະນູ ເກີດຂຶ້ນ ສໍາລັບລາຍລະອຽດ.

-msahf
ຕົວເລືອກນີ້ຈະເຮັດໃຫ້ GCC ໃຊ້ຄໍາແນະນໍາ SAHF ໃນລະຫັດ 64-ບິດທີ່ສ້າງຂຶ້ນ. ຕົ້ນ
CPUs Intel ກັບ Intel 64 ຂາດຄໍາແນະນໍາ LAHF ແລະ SAHF ສະຫນັບສະຫນູນໂດຍ AMD64 ຈົນກ່ວາ
ການແນະນໍາຂັ້ນຕອນ Pentium 4 G1 ໃນເດືອນທັນວາ 2005. LAHF ແລະ SAHF ແມ່ນການໂຫຼດແລະເກັບຮັກສາ.
ຄໍາແນະນໍາ, ຕາມລໍາດັບ, ສໍາລັບທຸງສະຖານະທີ່ແນ່ນອນ. ໃນໂຫມດ 64-bit, SAHF
ຄໍາແນະນໍາແມ່ນໃຊ້ເພື່ອເພີ່ມປະສິດທິພາບ "fmod", "drem" ຫຼື "ສ່ວນທີ່ເຫຼືອ" ຫນ້າທີ່ສ້າງໃນ: ເບິ່ງ
ອື່ນ ໆ ເກີດຂຶ້ນ ສໍາລັບລາຍລະອຽດ.

- mmovbe
ຕົວເລືອກນີ້ຈະຊ່ວຍໃຫ້ GCC ໃຊ້ຄໍາແນະນໍາ movbe ເພື່ອປະຕິບັດ "__builtin_bswap32"
ແລະ "__builtin_bswap64".

-mcrc32
ຕົວເລືອກນີ້ຈະເປີດໃຊ້ງານໃນຕົວ, "__builtin_ia32_crc32qi",
"__builtin_ia32_crc32hi". "__builtin_ia32_crc32si" ແລະ "__builtin_ia32_crc32di" ເປັນ
ສ້າງຄໍາແນະນໍາເຄື່ອງຈັກ crc32.

-mrecip
ຕົວເລືອກນີ້ຈະຊ່ວຍໃຫ້ GCC ໃຊ້ຄໍາແນະນໍາ RCPSS ແລະ RSQRTSS (ແລະພວກມັນ
vectorized variants RCPPS ແລະ RSQRTPS) ກັບຂັ້ນຕອນ Newton-Raphson ເພີ່ມເຕີມ
ເພີ່ມຄວາມແມ່ນຍໍາແທນທີ່ຈະເປັນ DIVSS ແລະ SQRTSS (ແລະຕົວແປ vectorized ຂອງເຂົາເຈົ້າ) ສໍາລັບ
ການໂຕ້ແຍ້ງຈຸດລອຍຕົວຄວາມຊັດເຈນດຽວ. ຄໍາແນະນໍາເຫຼົ່ານີ້ຖືກສ້າງຂື້ນພຽງແຕ່ເມື່ອ
-funsafe-math-optimizations ຖືກເປີດໃຊ້ຮ່ວມກັນກັບ -finite-math-only ແລະ
-fno-traping-ຄະນິດສາດ. ໃຫ້ສັງເກດວ່າໃນຂະນະທີ່ throughput ຂອງລໍາດັບແມ່ນສູງກວ່າ
throughput ຂອງຄໍາແນະນໍາທີ່ບໍ່ແມ່ນ reciprocal, ຄວາມແມ່ນຍໍາຂອງລໍາດັບສາມາດ
ຫຼຸດລົງເຖິງ 2 ulp (ເຊັ່ນ inverse ຂອງ 1.0 ເທົ່າກັບ 0.99999994).

ໃຫ້ສັງເກດວ່າ GCC ປະຕິບັດ "1.0f/sqrtf(x)" ໃນແງ່ຂອງ RSQRTSS (ຫຼື RSQRTPS) ແລ້ວກັບ
-fast ຄະ​ນິດ​ສາດ​ (ຫຼືການປະສົມປະສານທາງເລືອກຂ້າງເທິງ), ແລະບໍ່ຈໍາເປັນຕ້ອງ -mrecip.

ຍັງສັງເກດວ່າ GCC ປ່ອຍລໍາດັບຂ້າງເທິງດ້ວຍຂັ້ນຕອນ Newton-Raphson ເພີ່ມເຕີມສໍາລັບ
ການແບ່ງ vectorized single-float ແລະ vectorized "sqrtf(x)" ແລ້ວກັບ -fast ຄະ​ນິດ​ສາດ​
(ຫຼືການປະສົມປະສານທາງເລືອກຂ້າງເທິງ), ແລະບໍ່ຈໍາເປັນຕ້ອງ -mrecip.

-mrecip=ເລືອກ
ຕົວເລືອກນີ້ອະນຸຍາດໃຫ້ຄວບຄຸມວ່າຄໍາແນະນໍາການປະເມີນເຊິ່ງກັນແລະກັນອາດຈະຖືກນໍາໃຊ້. ເລືອກ
ແມ່ນລາຍຊື່ຕົວເລືອກທີ່ແຍກດ້ວຍເຄື່ອງໝາຍຈຸດ, ເຊິ່ງອາດຈະຖືກນຳໜ້າດ້ວຍ "!" ກັບ invert ໄດ້
ທາງເລືອກ: "ທັງໝົດ": ເປີດການນຳໃຊ້ຄຳແນະນຳການປະເມີນທັງໝົດ, "ຄ່າເລີ່ມຕົ້ນ": ເປີດໃຊ້ຄ່າເລີ່ມຕົ້ນ
ຄໍາແນະນໍາ, ເທົ່າກັບ -mrecip, "none": ປິດການນຳໃຊ້ຄຳແນະນຳການປະເມີນທັງໝົດ,
ທຽບເທົ່າກັບ -mno-recip, "div": ເປີດໃຊ້ການປະມານການແບ່ງຂັ້ນ,
"vec-div": ເປີດໃຊ້ການປະມານສໍາລັບການແບ່ງ vectorized, "sqrt": ເປີດໃຊ້
approximation for scalar square root, "vec-sqrt": ເປີດໃຊ້ການປະມານສໍາລັບ
ຮາກສີ່ຫລ່ຽມ vectorized.

ດັ່ງນັ້ນ, ສໍາລັບການຍົກຕົວຢ່າງ, -mrecip=ທັງໝົດ,!sqrt ຈະ​ເຮັດ​ໃຫ້​ການ​ທັງ​ຫມົດ​ຂອງ​ການ​ປະ​ມານ​ເຊິ່ງ​ກັນ​ແລະ​ກັນ​,
ຍົກເວັ້ນສໍາລັບຮາກສີ່ຫລ່ຽມ.

-mveclibabi=ປະເພດ
ລະບຸປະເພດ ABI ເພື່ອໃຊ້ສຳລັບ vectorizing intrinsics ໂດຍໃຊ້ຫ້ອງສະໝຸດພາຍນອກ.
ປະເພດທີ່ສະຫນັບສະຫນູນແມ່ນ "svml" ສໍາລັບຫ້ອງສະຫມຸດຄະນິດສາດສັ້ນ vector ຂອງ Intel ແລະ "acml" ສໍາລັບ
ຮູບແບບຫ້ອງສະໝຸດຫຼັກຄະນິດສາດ AMD ຂອງການໂຕ້ຕອບ. ໃນປັດຈຸບັນ GCC ຈະສົ່ງການໂທໄປຫາ
"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" ແລະ "vmlsAcos4" ສໍາລັບ
ປະເພດຟັງຊັນທີ່ສອດຄ້ອງກັນເມື່ອ -mveclibabi=svml ຖືກນໍາໃຊ້ແລະ "__vrd2_sin",
"__vrd2_cos", "__vrd2_exp", "__vrd2_log", "__vrd2_log2", "__vrd2_log10",
"__vrs4_sinf", "__vrs4_cosf", "__vrs4_expf", "__vrs4_logf", "__vrs4_log2f",
"__vrs4_log10f" ແລະ "__vrs4_powf" ສໍາລັບປະເພດຟັງຊັນທີ່ສອດຄ້ອງກັນເມື່ອ
-mveclibabi=acml ຖືກນໍາໃຊ້. ທັງສອງ -ftree-vectorize ແລະ -funsafe-math-optimizations ມີ
ຈະຖືກເປີດໃຊ້. ຫ້ອງສະໝຸດທີ່ເຂົ້າກັນໄດ້ກັບ SVML ຫຼື ACML ABI ຈະຕ້ອງລະບຸໄວ້ໃນລິ້ງ
ເວລາ.

-mabi=ຊື່
ສ້າງລະຫັດສໍາລັບສົນທິສັນຍາການໂທທີ່ລະບຸ. ຄ່າທີ່ອະນຸຍາດແມ່ນ: sysv ສໍາລັບການ
ABI ທີ່ໃຊ້ໃນ GNU/Linux ແລະລະບົບອື່ນໆ ແລະ ms ສໍາລັບ Microsoft ABI. ຄ່າເລີ່ມຕົ້ນ
ແມ່ນການໃຊ້ Microsoft ABI ເມື່ອຕັ້ງເປົ້າໝາຍໃສ່ Windows. ໃນທຸກລະບົບອື່ນໆ, ຄ່າເລີ່ມຕົ້ນ
ແມ່ນ SYSV ABI. ທ່ານສາມາດຄວບຄຸມພຶດຕິກໍານີ້ສໍາລັບຫນ້າທີ່ສະເພາະໂດຍການນໍາໃຊ້
ຄຸນ​ລັກ​ສະ​ນະ​ການ​ທໍາ​ງານ​ ms_abi/sysv_abi.

-mtls-ພາສາ =ປະເພດ
ສ້າງລະຫັດເພື່ອເຂົ້າເຖິງການເກັບຮັກສາ thread-local ໂດຍໃຊ້ gnu or gnu2 ສົນທິສັນຍາ. gnu
ແມ່ນຄ່າເລີ່ມຕົ້ນແບບອະນຸລັກ; gnu2 ມີປະສິດທິພາບຫຼາຍຂຶ້ນ, ແຕ່ມັນອາດຈະເພີ່ມການລວບລວມແລະແລ່ນ-
ຄວາມຕ້ອງການເວລາທີ່ບໍ່ພໍໃຈໃນທຸກລະບົບ.

-mpush-args
-mno-push-args
ໃຊ້ການດໍາເນີນການ PUSH ເພື່ອເກັບຮັກສາພາລາມິເຕີທີ່ສົ່ງອອກ. ວິທີການນີ້ແມ່ນສັ້ນກວ່າແລະປົກກະຕິ
ໄວເທົ່າກັນກັບວິທີການນໍາໃຊ້ການດໍາເນີນງານ SUB/MOV ແລະຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ. ໃນບາງ
ກໍລະນີທີ່ປິດການໃຊ້ງານມັນອາດຈະປັບປຸງການປະຕິບັດເນື່ອງຈາກການປັບປຸງການກໍານົດເວລາແລະຫຼຸດລົງ
ການເພິ່ງພາອາໄສ.

-maccumulate-outgoing-args
ຖ້າເປີດໃຊ້, ຈໍານວນພື້ນທີ່ສູງສຸດທີ່ຕ້ອງການສໍາລັບການໂຕ້ຖຽງທີ່ອອກມາຈະເປັນ
ຄິດໄລ່ໃນ prologue ຟັງຊັນ. ນີ້ແມ່ນໄວຂຶ້ນໃນ CPUs ທີ່ທັນສະໄຫມຫຼາຍທີ່ສຸດເນື່ອງຈາກວ່າ
ຫຼຸດລົງການເພິ່ງພາອາໄສ, ປັບປຸງການກໍານົດເວລາແລະການຫຼຸດຜ່ອນການໃຊ້ stack ເມື່ອ stack ທີ່ຕ້ອງການ
ຂອບເຂດບໍ່ເທົ່າກັບ 2. ຂໍ້ບົກຜ່ອງແມ່ນການເພີ່ມຂຶ້ນທີ່ຫນ້າສັງເກດໃນຂະຫນາດລະຫັດ. ນີ້
ສະຫຼັບໝາຍເຖິງ -mno-push-args.

-mthreads
ຮອງຮັບການຈັດການຂໍ້ຍົກເວັ້ນທີ່ປອດໄພກະທູ້ Mingw32. ລະຫັດທີ່ອີງໃສ່ thread-safe
ການຈັດການຂໍ້ຍົກເວັ້ນຕ້ອງລວບລວມແລະເຊື່ອມຕໍ່ລະຫັດທັງຫມົດກັບ the -mthreads ທາງເລືອກ. ເມື່ອ​ໃດ​
ການ​ສັງ​ລວມ​, -mthreads ກໍານົດ -D_MT; ເມື່ອເຊື່ອມຕໍ່, ມັນເຊື່ອມຕໍ່ໃນຕົວຊ່ວຍກະທູ້ພິເສດ
ຫ້ອງສະຫມຸດ -lmingwthrd ເຊິ່ງເຮັດຄວາມສະອາດຕໍ່ຂໍ້ມູນການຈັດການຂໍ້ຍົກເວັ້ນ.

-mno-align-stringops
ຢ່າຈັດຮຽງປາຍທາງຂອງການປະຕິບັດການສະຕຣິງໃນແຖວ. ສະວິດນີ້ຊ່ວຍຫຼຸດຂະໜາດລະຫັດ
ແລະປັບປຸງການປະຕິບັດໃນກໍລະນີທີ່ຈຸດຫມາຍປາຍທາງຖືກຈັດໃສ່ແລ້ວ, ແຕ່ GCC ບໍ່ໄດ້
ຮູ້ກ່ຽວກັບມັນ.

-minline-all-stringops
ໂດຍຄ່າເລີ່ມຕົ້ນ GCC ຈະ inlines ປະຕິບັດການສະຕຣິງພຽງແຕ່ໃນເວລາທີ່ຈຸດຫມາຍປາຍທາງເປັນທີ່ຮູ້ຈັກ
ຈັດຮຽງເປັນຢ່າງໜ້ອຍ 4-byte boundary. ນີ້ເຮັດໃຫ້ inlining ຫຼາຍ, ເພີ່ມຂະຫນາດລະຫັດ,
ແຕ່ອາດຈະປັບປຸງປະສິດທິພາບຂອງລະຫັດທີ່ຂຶ້ນກັບ memcpy ໄວ, strlen ແລະ memset ສໍາລັບ
ຄວາມຍາວສັ້ນ.

-minline-stringops-ແບບໄດນາມິກ
ສໍາລັບການປະຕິບັດການສະຕຣິງຂອງຂະຫນາດທີ່ບໍ່ຮູ້ຈັກ, ໃຊ້ການກວດສອບເວລາແລ່ນດ້ວຍລະຫັດ inline ສໍາລັບຂະຫນາດນ້ອຍ
ທ່ອນໄມ້ແລະຫໍສະຫມຸດໂທຫາສໍາລັບຕັນຂະຫນາດໃຫຍ່.

-mstringop-strategy=ພຶຊະຄະນິດ
ຂຽນທັບການຕັດສິນໃຈພາຍໃນ heuristic ກ່ຽວກັບ algorithm ໂດຍສະເພາະເພື່ອ inline string
ການ​ດໍາ​ເນີນ​ງານ​ກັບ​. ຄ່າທີ່ອະນຸຍາດແມ່ນ "rep_byte", "rep_4byte", "rep_8byte" ສໍາລັບ
ຂະຫຍາຍໂດຍໃຊ້ i386 "rep" ຄໍານໍາຫນ້າຂອງຂະຫນາດທີ່ກໍານົດໄວ້, "byte_loop", "loop",
"unrolled_loop" ສໍາລັບການຂະຫຍາຍ loop inline, "libcall" ສໍາລັບການຂະຫຍາຍຫ້ອງສະຫມຸດສະເຫມີ
ໂທຫາ.

-momit-leaf-frame-pointer
ຢ່າເກັບຮັກສາຕົວຊີ້ກອບຢູ່ໃນທະບຽນສໍາລັບຫນ້າທີ່ຂອງໃບ. ນີ້ຫຼີກລ້ຽງການ
ຄໍາ​ແນະ​ນໍາ​ເພື່ອ​ຊ່ວຍ​ປະ​ຢັດ​, ການ​ຕັ້ງ​ຄ່າ​ແລະ​ການ​ຟື້ນ​ຟູ​ຕົວ​ຊີ້​ກອບ​ແລະ​ເຮັດ​ໃຫ້​ການ​ລົງ​ທະ​ບຽນ​ເພີ່ມ​ເຕີມ​
ມີຢູ່ໃນຫນ້າທີ່ຂອງໃບ. ທາງເລືອກ -fomit-frame-pointer ເອົາກອບ
ຕົວຊີ້ສໍາລັບຟັງຊັນທັງໝົດ, ເຊິ່ງອາດຈະເຮັດໃຫ້ການດີບັກຍາກຂຶ້ນ.

-mtls-direct-seg-refs
-mno-tls-direct-seg-refs
ຄວບຄຸມວ່າຕົວແປ TLS ອາດຈະຖືກເຂົ້າເຖິງດ້ວຍການຊົດເຊີຍຈາກພາກສ່ວນ TLS
ລົງທະບຽນ (%gs ສໍາລັບ 32-bit, %fs ສໍາລັບ 64-bit), ຫຼືວ່າຕົວຊີ້ຖານ thread ຈະຕ້ອງເປັນ.
ເພີ່ມ. ນີ້​ແມ່ນ​ທາງ​ດ້ານ​ກົດ​ຫມາຍ​ຫຼື​ບໍ່​ແມ່ນ​ຂຶ້ນ​ກັບ​ລະ​ບົບ​ປະ​ຕິ​ບັດ​ການ​, ແລະ​ວ່າ​ມັນ​
ແຜນທີ່ພາກສ່ວນເພື່ອໃຫ້ກວມເອົາພື້ນທີ່ TLS ທັງຫມົດ.

ສໍາລັບລະບົບທີ່ໃຊ້ GNU libc, ຄ່າເລີ່ມຕົ້ນແມ່ນເປີດ.

-msse2avx
-mno-sse2avx
ລະບຸວ່າຕົວປະກອບຄວນເຂົ້າລະຫັດຄໍາແນະນໍາ SSE ດ້ວຍຄໍານໍາຫນ້າ VEX. ທາງເລືອກ
-mavx ເປີດອັນນີ້ຕາມຄ່າເລີ່ມຕົ້ນ.

-mfentry
-mno-fentry
ຖ້າໂປຣໄຟລ໌ຖືກເປີດໃຊ້ - ໜ້າ ເອົາການໂທຫາ counter profile ກ່ອນ prologue. ໝາຍເຫດ: ເປີດ
x86 ສະຖາປັດຕະຍະກໍາຄຸນສົມບັດ "ms_hook_prologue" ແມ່ນບໍ່ເປັນໄປໄດ້ໃນຂະນະນີ້
-mfentry ແລະ - ໜ້າ.

-m8bit-idiv
-mno-8bit-idiv
ໃນບາງໂປເຊດເຊີ, ເຊັ່ນ Intel Atom, 8-bit unsigned integer divide ແມ່ນໄວກວ່າ
ການແບ່ງຈຳນວນເຕັມ 32-ບິດ/64-ບິດ. ຕົວເລືອກນີ້ສ້າງການກວດສອບເວລາແລ່ນ. ຖ້າທັງສອງ
ເງິນປັນຜົນ ແລະຕົວຫານຢູ່ໃນຂອບເຂດຂອງ 0 ຫາ 255, 8-bit unsigned integer divide ແມ່ນ
ໃຊ້ແທນການແບ່ງຈຳນວນເຕັມ 32-ບິດ/64-ບິດ.

-mavx256-split-unaligned-load
-mavx256-split-unaligned-store
ແຍກ 32-byte AVX unaligned load ແລະເກັບຮັກສາ.

ເຫຼົ່ານີ້ -m ສະວິດໄດ້ຮັບການສະຫນັບສະຫນູນນອກເຫນືອໄປຈາກຂ້າງເທິງກ່ຽວກັບໂປເຊດເຊີ AMD x86-64 ໃນ
ສະພາບແວດລ້ອມ 64-bit.

-m32
-m64
-mx32
ສ້າງລະຫັດສໍາລັບສະພາບແວດລ້ອມ 32-bit ຫຼື 64-bit. ໄດ້ -m32 ທາງເລືອກກໍານົດ int, ຍາວແລະ
ຕົວຊີ້ໄປຫາ 32 bits ແລະສ້າງລະຫັດທີ່ເຮັດວຽກຢູ່ໃນລະບົບ i386 ໃດ. ໄດ້ -m64 ທາງເລືອກ
ຕັ້ງ int ເປັນ 32 bits ແລະຍາວແລະ pointer ເປັນ 64 bits ແລະສ້າງລະຫັດສໍາລັບ AMD's
x86-64 ສະຖາປັດຕະຍະກໍາ. ໄດ້ -mx32 ທາງເລືອກກໍານົດ int, ຍາວແລະ pointer ເປັນ 32 bits ແລະ
ສ້າງລະຫັດສໍາລັບສະຖາປັດຕະຍະກໍາ x86-64 ຂອງ AMD. ສໍາລັບ darwin ພຽງແຕ່ -m64 ຫັນທາງເລືອກ
ປິດ -fno-pic ແລະ -mdynamic-no-pic ຕົວເລືອກ

-mno-red-zone
ຢ່າໃຊ້ເຂດສີແດງທີ່ເອີ້ນວ່າ x86-64. ເຂດ​ສີ​ແດງ​ແມ່ນ​ກໍາ​ນົດ​ໂດຍ​
x86-64 ABI, ມັນເປັນພື້ນທີ່ 128-byte ນອກເຫນືອຈາກສະຖານທີ່ຂອງຕົວຊີ້ stack ທີ່ຈະ
ບໍ່​ໄດ້​ຮັບ​ການ​ດັດ​ແກ້​ໂດຍ​ສັນ​ຍານ​ຫຼື​ການ​ຂັດ​ຂວາງ handlers ແລະ​ດັ່ງ​ນັ້ນ​ສາ​ມາດ​ຖືກ​ນໍາ​ໃຊ້​ສໍາ​ລັບ​ການ
ຂໍ້ມູນຊົ່ວຄາວໂດຍບໍ່ມີການປັບຕົວຊີ້ stack. ທຸງ -mno-red-zone ປິດການ ນຳ ໃຊ້
ເຂດ​ສີ​ແດງ​ນີ້​.

-mcmodel=ຂະໜາດນ້ອຍ
ສ້າງລະຫັດສໍາລັບຕົວແບບລະຫັດຂະຫນາດນ້ອຍ: ໂປຼແກຼມແລະສັນຍາລັກຂອງມັນຕ້ອງຖືກເຊື່ອມຕໍ່
ຕ່ໍາກວ່າ 2 GB ຂອງພື້ນທີ່ທີ່ຢູ່. ຕົວຊີ້ແມ່ນ 64 ບິດ. ໂຄງການສາມາດເປັນ
ເຊື່ອມໂຍງແບບຄົງທີ່ ຫຼືແບບເຄື່ອນໄຫວ. ນີ້ແມ່ນຮູບແບບລະຫັດເລີ່ມຕົ້ນ.

-mcmodel=kernel
ສ້າງລະຫັດສໍາລັບຮູບແບບລະຫັດ kernel. kernel ແລ່ນຢູ່ໃນລົບ 2 GB ຂອງ
ພື້ນທີ່ທີ່ຢູ່. ຮູບແບບນີ້ຕ້ອງຖືກໃຊ້ສໍາລັບລະຫັດ Linux kernel.

-mcmodel=ປານກາງ
ສ້າງລະຫັດສໍາລັບຮູບແບບຂະຫນາດກາງ: ໂຄງການໄດ້ຖືກເຊື່ອມຕໍ່ຢູ່ໃນຕ່ໍາ 2 GB ຂອງ
ພື້ນທີ່ທີ່ຢູ່. ສັນຍາລັກຂະຫນາດນ້ອຍກໍ່ຖືກວາງໄວ້ຢູ່ທີ່ນັ້ນ. ສັນຍາລັກທີ່ມີຂະ ໜາດ ໃຫຍ່ກວ່າ
-mlarge-data-threshold ຖືກໃສ່ເຂົ້າໄປໃນຂໍ້ມູນຂະຫນາດໃຫຍ່ຫຼື bss ສ່ວນແລະສາມາດຕັ້ງຢູ່
ສູງກວ່າ 2GB. ບັນດາໂຄງການສາມາດເຊື່ອມໂຍງແບບຄົງທີ່ ຫຼືແບບເຄື່ອນໄຫວ.

-mcmodel=ໃຫຍ່
ສ້າງລະຫັດສໍາລັບຮູບແບບຂະຫນາດໃຫຍ່: ຮູບແບບນີ້ເຮັດໃຫ້ບໍ່ມີການສົມມຸດຕິຖານກ່ຽວກັບທີ່ຢູ່ແລະ
ຂະ​ຫນາດ​ຂອງ​ພາກ​ສ່ວນ​.

-maddress-mode=ຍາວ
ສ້າງລະຫັດສໍາລັບຮູບແບບທີ່ຢູ່ຍາວ. ນີ້ແມ່ນຮອງຮັບພຽງແຕ່ 64-bit ແລະ x32
ສະພາບແວດລ້ອມ. ມັນເປັນຮູບແບບທີ່ຢູ່ເລີ່ມຕົ້ນສໍາລັບສະພາບແວດລ້ອມ 64-bit.

-maddress-mode=ສັ້ນ
ສ້າງລະຫັດສໍາລັບຮູບແບບທີ່ຢູ່ສັ້ນ. ນີ້ແມ່ນຮອງຮັບພຽງແຕ່ 32-bit ແລະ x32
ສະພາບແວດລ້ອມ. ມັນເປັນຮູບແບບທີ່ຢູ່ເລີ່ມຕົ້ນສໍາລັບສະພາບແວດລ້ອມ 32-bit ແລະ x32.

i386 ແລະ x86-64 Windows ທາງເລືອກໃນການ

ທາງ​ເລືອກ​ເພີ່ມ​ເຕີມ​ເຫຼົ່າ​ນີ້​ແມ່ນ​ມີ​ສໍາ​ລັບ​ເປົ້າ​ຫມາຍ Windows​:

-mconsole
ຕົວເລືອກນີ້ມີໃຫ້ສຳລັບເປົ້າໝາຍ Cygwin ແລະ MinGW. ມັນກໍານົດວ່າ console
ຄໍາຮ້ອງສະຫມັກແມ່ນຈະຖືກສ້າງຂື້ນ, ໂດຍແນະນໍາຕົວເຊື່ອມຕໍ່ເພື່ອກໍານົດຫົວຂໍ້ PE
ປະເພດລະບົບຍ່ອຍທີ່ຕ້ອງການສໍາລັບແອັບພລິເຄຊັນ console. ນີ້ແມ່ນພຶດຕິກໍາເລີ່ມຕົ້ນສໍາລັບ
Cygwin ແລະ MinGW ເປົ້າຫມາຍ.

-mdll
ຕົວເລືອກນີ້ມີໃຫ້ສຳລັບເປົ້າໝາຍ Cygwin ແລະ MinGW. ມັນກໍານົດວ່າ DLL - a
ຫໍສະຫມຸດເຊື່ອມຕໍ່ແບບເຄື່ອນໄຫວ - ແມ່ນຈະຖືກສ້າງຂື້ນ, ເຮັດໃຫ້ການຄັດເລືອກທີ່ຕ້ອງການ
runtime startup object ແລະຈຸດເຂົ້າ.

-mnop-fun-dllimport
ຕົວເລືອກນີ້ມີໃຫ້ສຳລັບເປົ້າໝາຍ Cygwin ແລະ MinGW. ມັນ​ລະ​ບຸ​ວ່າ​
dllimport attribute ຄວນຖືກລະເລີຍ.

-mthread
ທາງເລືອກນີ້ສາມາດໃຊ້ໄດ້ສໍາລັບເປົ້າຫມາຍ MinGW. ມັນລະບຸວ່າກະທູ້ສະເພາະ MinGW
ສະຫນັບສະຫນູນແມ່ນຈະຖືກນໍາໃຊ້.

-municode
ຕົວເລືອກນີ້ສາມາດໃຊ້ໄດ້ສໍາລັບເປົ້າຫມາຍ mingw-w64. ມັນກໍານົດວ່າມະຫາພາກ UNICODE
ກໍາລັງໄດ້ຮັບການກໍານົດໄວ້ລ່ວງຫນ້າແລະວ່າລະຫັດການເລີ່ມຕົ້ນຂອງ runtime ສາມາດ unicode ໄດ້ຖືກເລືອກ.

-mwin32
ຕົວເລືອກນີ້ມີໃຫ້ສຳລັບເປົ້າໝາຍ Cygwin ແລະ MinGW. ມັນກໍານົດວ່າປົກກະຕິ
ເມໂຄທີ່ກຳນົດໄວ້ລ່ວງໜ້າຂອງ Windows ຈະຖືກຕັ້ງຢູ່ໃນຕົວປະມວນຜົນກ່ອນ, ແຕ່ບໍ່ມີອິດທິພົນ
ທາງເລືອກຂອງຫ້ອງສະຫມຸດ runtime / ລະຫັດເລີ່ມຕົ້ນ.

- ປ່ອງຢ້ຽມ
ຕົວເລືອກນີ້ມີໃຫ້ສຳລັບເປົ້າໝາຍ Cygwin ແລະ MinGW. ມັນກໍານົດວ່າ GUI
ຄໍາຮ້ອງສະຫມັກແມ່ນຈະຖືກສ້າງຂື້ນໂດຍການແນະນໍາຕົວເຊື່ອມຕໍ່ເພື່ອກໍານົດຫົວຂໍ້ PE
ປະເພດລະບົບຍ່ອຍຢ່າງເໝາະສົມ.

-fno-set-stack-executable
ທາງເລືອກນີ້ສາມາດໃຊ້ໄດ້ສໍາລັບເປົ້າຫມາຍ MinGW. ມັນກໍານົດວ່າທຸງປະຕິບັດສໍາລັບ
ບໍ່ໄດ້ຕັ້ງ stack ທີ່ໃຊ້ໂດຍຟັງຊັນທີ່ຊ້ອນກັນ. ນີ້ແມ່ນມີຄວາມຈໍາເປັນສໍາລັບ binaries ແລ່ນໃນ
ຮູບແບບ kernel ຂອງ Windows, ຍ້ອນວ່າມີ user32 API, ເຊິ່ງຖືກນໍາໃຊ້ເພື່ອກໍານົດການປະຕິບັດ
ສິດທິພິເສດ, ບໍ່ມີໃຫ້.

-mpe-aligned-commons
ຕົວເລືອກນີ້ມີໃຫ້ສຳລັບເປົ້າໝາຍ Cygwin ແລະ MinGW. ມັນກໍານົດວ່າ GNU
ການຂະຫຍາຍໄປຫາຮູບແບບໄຟລ໌ PE ທີ່ອະນຸຍາດໃຫ້ຈັດຮຽງທີ່ຖືກຕ້ອງຂອງຕົວແປ COMMON
ຄວນຖືກນໍາໃຊ້ໃນເວລາສ້າງລະຫັດ. ມັນຈະຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຖ້າ GCC ກວດພົບ
ວ່າຕົວປະກອບເປົ້າຫມາຍທີ່ພົບເຫັນໃນລະຫວ່າງການກໍາຫນົດຄ່າສະຫນັບສະຫນູນຄຸນນະສົມບັດ.

ເບິ່ງພາຍໃຕ້ i386 ແລະ x86-64 ທາງເລືອກໃນການ ສໍາລັບທາງເລືອກມາດຕະຖານ.

IA-64 ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ແມ່ນ -m ທາງເລືອກທີ່ກໍານົດສໍາລັບສະຖາປັດຕະຍະກໍາ Intel IA-64.

-mbig-endian
ສ້າງລະຫັດສໍາລັບເປົ້າຫມາຍໃຫຍ່. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນຂອງ HP-UX.

-mlittle-endian
ສ້າງລະຫັດສໍາລັບເປົ້າຫມາຍພຽງເລັກນ້ອຍ endian. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນຂອງ AIX5 ແລະ GNU/Linux.

-mgnu-as
-mno-gnu-as
ສ້າງ (ຫຼືບໍ່) ລະຫັດສໍາລັບຕົວປະກອບ GNU. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-mgnu-ld
-mno-gnu-ld
ສ້າງ (ຫຼືບໍ່) ລະຫັດສໍາລັບຕົວເຊື່ອມຕໍ່ GNU. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-mno-pic
ສ້າງລະຫັດທີ່ບໍ່ໃຊ້ຕົວຊີ້ຕົວຊີ້ທົ່ວໂລກ. ຜົນໄດ້ຮັບບໍ່ແມ່ນຕໍາແຫນ່ງ
ລະຫັດເອກະລາດ, ແລະລະເມີດ IA-64 ABI.

-mvolatile-asm-stop
-mno-volatile-asm-stop
ສ້າງ (ຫຼືຢ່າ) ຢຸດເລັກນ້ອຍໃນທັນທີກ່ອນແລະຫຼັງຈາກຄໍາຖະແຫຼງການ asm ທີ່ບໍ່ປ່ຽນແປງ.

-mregister-names
-mno-register-names
ສ້າງ (ຫຼື​ບໍ່​) in, loc, ແລະ ອອກ ລົງທະບຽນຊື່ສໍາລັບທະບຽນ stacked. ນີ້
ອາດເຮັດໃຫ້ຜົນຜະລິດຂອງຕົວປະກອບສາມາດອ່ານໄດ້ຫຼາຍຂຶ້ນ.

-mno-sdata
-msdata
ປິດການໃຊ້ງານ (ຫຼືເປີດໃຊ້) ການເພີ່ມປະສິດທິພາບທີ່ໃຊ້ສ່ວນຂໍ້ມູນຂະຫນາດນ້ອຍ. ນີ້ອາດຈະເປັນປະໂຫຍດ
ສໍາລັບການເຮັດວຽກກ່ຽວກັບແມງໄມ້ optimizer.

-mconstant-gp
ສ້າງລະຫັດທີ່ໃຊ້ຄ່າຕົວຊີ້ທົ່ວໂລກຄົງທີ່ອັນດຽວ. ນີ້ແມ່ນເປັນປະໂຫຍດໃນເວລາທີ່
ລວບລວມລະຫັດ kernel.

-mauto-pic
ສ້າງລະຫັດທີ່ສາມາດຍ້າຍຕົນເອງໄດ້. ນີ້ຫມາຍຄວາມວ່າ -mconstant-gp. ນີ້ແມ່ນເປັນປະໂຫຍດ
ເມື່ອລວບລວມລະຫັດເຟີມແວ.

-minline-float-divide-min-latency
ສ້າງລະຫັດສໍາລັບການແບ່ງໃນແຖວຂອງຄ່າຈຸດທີ່ເລື່ອນໄດ້ໂດຍໃຊ້ເວລາ latency ຕໍ່າສຸດ
ສູດການຄິດໄລ່.

-minline-float-divide-max-throughput
ສ້າງລະຫັດສໍາລັບການແບ່ງໃນແຖວຂອງຄ່າຈຸດທີ່ເລື່ອນໄດ້ໂດຍໃຊ້ການປ້ອນຂໍ້ມູນສູງສຸດ
ສູດການຄິດໄລ່.

-mno-inline-float-divide
ຢ່າສ້າງລະຫັດໃນແຖວສໍາລັບການແບ່ງຄ່າຈຸດລອຍ.

-minline-int-divide-min-latency
ສ້າງລະຫັດສໍາລັບການແບ່ງ inline ຂອງຄ່າ integer ໂດຍໃຊ້ latency ຕໍາ່ສຸດທີ່
ສູດການຄິດໄລ່.

-minline-int-divide-max-throughput
ສ້າງລະຫັດສໍາລັບການແບ່ງ inline ຂອງຄ່າ integer ໂດຍໃຊ້ throughput ສູງສຸດ
ສູດການຄິດໄລ່.

-mno-inline-int-divide
ຢ່າສ້າງລະຫັດໃນແຖວສໍາລັບການແບ່ງຄ່າຈໍານວນເຕັມ.

-minline-sqrt-min-latency
ສ້າງລະຫັດສໍາລັບຮາກສີ່ຫຼ່ຽມໃນແຖວໂດຍໃຊ້ວິທີ latency ຕໍາ່ສຸດທີ່.

-minline-sqrt-max-throughput
ສ້າງລະຫັດສໍາລັບຮາກສອງແຖວໃນແຖວໂດຍໃຊ້ສູດການຄິດໄລ່ການສົ່ງຜ່ານສູງສຸດ.

-mno-inline-sqrt
ຢ່າສ້າງລະຫັດ inline ສໍາລັບ sqrt.

-mfused-madd
-mno-fused-madd
ເຮັດ (ບໍ່) ສ້າງລະຫັດທີ່ໃຊ້ fused multiply/add ຫຼື multiply/subtract
ຄໍາແນະນໍາ. ຄ່າເລີ່ມຕົ້ນແມ່ນການນໍາໃຊ້ຄໍາແນະນໍາເຫຼົ່ານີ້.

-mno-dwarf2-asm
-mdwarf2-asm
ຢ່າ (ຫຼືເຮັດ) ສ້າງລະຫັດຕົວປະກອບສໍາລັບຂໍ້ມູນການດີບັກເລກແຖວ DWARF2. ນີ້
ອາດຈະເປັນປະໂຫຍດເມື່ອບໍ່ໃຊ້ຕົວປະກອບ GNU.

-mearly-stop-bits
-mno-early-stop-bits
ອະ​ນຸ​ຍາດ​ໃຫ້​ບິດ​ຢຸດ​ທີ່​ຈະ​ຖືກ​ວາງ​ໄວ​ກ​່​ວາ​ທັນ​ທີ​ກ່ອນ​ຫນ້າ​ຄໍາ​ແນະ​ນໍາ​ທີ່​
ກະຕຸ້ນຈຸດຢຸດ. ນີ້ສາມາດປັບປຸງການກໍານົດເວລາຄໍາແນະນໍາ, ແຕ່ບໍ່ແມ່ນສະເຫມີໄປ
ເຮັດແນວນັ້ນ.

-mfixed-range=ໄລຍະລົງທະບຽນ
ສ້າງລະຫັດການປິ່ນປົວຂອບເຂດການລົງທະບຽນທີ່ໃຫ້ມາເປັນການລົງທະບຽນຄົງທີ່. ການລົງທະບຽນຄົງທີ່
ແມ່ນຫນຶ່ງໃນທີ່ຜູ້ຈັດສັນທະບຽນບໍ່ສາມາດໃຊ້ໄດ້. ນີ້ແມ່ນເປັນປະໂຫຍດໃນເວລາທີ່ລວບລວມ kernel
ລະຫັດ. ໄລຍະການລົງທະບຽນແມ່ນລະບຸໄວ້ເປັນສອງທະບຽນທີ່ແຍກອອກໂດຍ dash. ຫຼາຍ
ໄລຍະການລົງທະບຽນສາມາດຖືກລະບຸແຍກດ້ວຍເຄື່ອງໝາຍຈຸດ.

-mtls-size=tls-size
ລະບຸຂະໜາດນ້ອຍຂອງການຊົດເຊີຍ TLS ທັນທີ. ຄ່າທີ່ຖືກຕ້ອງແມ່ນ 14, 22, ແລະ 64.

-mtune=cpu-type
ປັບຕາຕະລາງການສອນສໍາລັບ CPU ໂດຍສະເພາະ, ຄ່າທີ່ຖືກຕ້ອງແມ່ນ itanium,
itanium1, Merced, itanium2, ແລະ mckinley.

-milp32
-mlp64
ສ້າງລະຫັດສໍາລັບສະພາບແວດລ້ອມ 32-bit ຫຼື 64-bit. ສະພາບແວດລ້ອມ 32-bit ກໍານົດ int,
ຍາວ ແລະຊີ້ໄປຫາ 32 bits. ສະພາບແວດລ້ອມ 64-bit ກໍານົດ int ເປັນ 32 bits ແລະຍາວແລະ
ຊີ້ໄປຫາ 64 bits. ເຫຼົ່ານີ້ແມ່ນທຸງສະເພາະ HP-UX.

-mno-sched-br-data-spec
-msched-br-data-spec
(Dis/En)ສາມາດກຳນົດເວລາການຄາດເດົາຂໍ້ມູນກ່ອນໂຫຼດໃໝ່. ນີ້ຈະສົ່ງຜົນໃຫ້
ການຜະລິດຄໍາແນະນໍາ ld.a ແລະຄໍາແນະນໍາການກວດສອບທີ່ສອດຄ້ອງກັນ (ld.c /
chk.a). ຄ່າເລີ່ມຕົ້ນແມ່ນ 'ປິດການໃຊ້ງານ'.

-msched-ar-data-spec
-mno-sched-ar-data-spec
(En/Dis) ສາມາດກຳນົດເວລາການຄາດເດົາຂໍ້ມູນໄດ້ຫຼັງຈາກໂຫຼດຄືນໃໝ່. ນີ້ຈະສົ່ງຜົນໃຫ້ການຜະລິດ
ຂອງຄໍາແນະນໍາ ld.a ແລະຄໍາແນະນໍາການກວດສອບທີ່ສອດຄ້ອງກັນ (ld.c / chk.a). ໄດ້
ຄ່າເລີ່ມຕົ້ນແມ່ນ 'ເປີດໃຊ້'.

-mno-sched-control-spec
-msched-control-spec
(Dis/En)ສາມາດຄວບຄຸມກຳນົດເວລາການຄາດເດົາໄດ້. ຄຸນສົມບັດນີ້ສາມາດໃຊ້ໄດ້ໃນໄລຍະ
ການກຳນົດເວລາພາກພື້ນ (ເຊັ່ນ: ກ່ອນທີ່ຈະໂຫຼດຄືນໃໝ່). ນີ້ຈະສົ່ງຜົນໃຫ້ການຜະລິດຂອງ ld.s
ຄໍາແນະນໍາແລະຄໍາແນະນໍາການກວດສອບທີ່ສອດຄ້ອງກັນ chk.s . ຄ່າເລີ່ມຕົ້ນແມ່ນ
'ປິດການໃຊ້ງານ'.

-msched-br-in-data-spec
-mno-sched-br-in-data-spec
(En/Dis) ການກຳນົດເວລາການຄາດເດົາຂອງຄຳແນະນຳທີ່ຂຶ້ນກັບຂໍ້ມູນ
ການໂຫຼດທີ່ຄາດເດົາກ່ອນໂຫຼດໃໝ່. ນີ້ແມ່ນປະສິດທິຜົນພຽງແຕ່ກັບ -msched-br-data-spec
ເປີດໃຊ້ງານ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 'ເປີດໃຊ້'.

-msched-ar-in-data-spec
-mno-sched-ar-in-data-spec
(En/Dis) ການກຳນົດເວລາການຄາດເດົາຂອງຄຳແນະນຳທີ່ຂຶ້ນກັບຂໍ້ມູນ
ການໂຫຼດທີ່ຄາດເດົາຫຼັງຈາກໂຫຼດຄືນໃໝ່. ນີ້ແມ່ນປະສິດທິຜົນພຽງແຕ່ກັບ -msched-ar-data-spec
ເປີດໃຊ້ງານ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 'ເປີດໃຊ້'.

-msched-in-control-spec
-mno-sched-in-control-spec
(En/Dis) ການກໍານົດເວລາການຄາດເດົາຂອງຄໍາແນະນໍາທີ່ຂຶ້ນກັບ
ຄວບຄຸມການໂຫຼດການຄາດເດົາ. ນີ້ແມ່ນປະສິດທິຜົນພຽງແຕ່ກັບ -msched-control-spec enabled
ຄ່າເລີ່ມຕົ້ນແມ່ນ 'ເປີດໃຊ້'.

-mno-sched-prefer-non-data-spec-insns
-msched-prefer-non-data-spec-insns
ຖ້າເປີດໃຊ້, ຄໍາແນະນໍາການຄາດເດົາຂໍ້ມູນຈະຖືກເລືອກສໍາລັບຕາຕະລາງພຽງແຕ່ຖ້າມີ
ບໍ່ມີທາງເລືອກອື່ນໃນຂະນະນີ້. ນີ້ຈະເຮັດໃຫ້ການນໍາໃຊ້ການຄາດເດົາຂໍ້ມູນ
ອະນຸລັກຫຼາຍ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 'ປິດການໃຊ້ງານ'.

-mno-sched-prefer-non-control-spec-insns
-msched-prefer-non-control-spec-insns
ຖ້າເປີດໃຊ້, ການຄວບຄຸມຄໍາແນະນໍາການຄາດເດົາຈະຖືກເລືອກສໍາລັບຕາຕະລາງພຽງແຕ່ຖ້າມີ
ບໍ່ມີທາງເລືອກອື່ນໃນຂະນະນີ້. ນີ້ຈະເຮັດໃຫ້ການນໍາໃຊ້ການຄາດເດົາການຄວບຄຸມ
ອະນຸລັກຫຼາຍ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 'ປິດການໃຊ້ງານ'.

-mno-sched-count-spec-in-critical-path
-msched-count-spec-in-critical-path
ຖ້າເປີດໃຊ້ງານ, ການຂຶ້ນກັບການຄາດເດົາຈະຖືກພິຈາລະນາໃນລະຫວ່າງການຄິດໄລ່
ບູລິມະສິດຄໍາແນະນໍາ. ນີ້ຈະເຮັດໃຫ້ການນໍາໃຊ້ການຄາດເດົາເລັກນ້ອຍຫຼາຍ
ອະນຸລັກ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 'ປິດການໃຊ້ງານ'.

-msched-spec-ldc
ໃຊ້ການກວດສອບການຄາດເດົາຂໍ້ມູນແບບງ່າຍໆ. ຕົວເລືອກນີ້ເປີດຢູ່ຕາມຄ່າເລີ່ມຕົ້ນ.

-msched-control-spec-ldc
ໃຊ້ການກວດສອບງ່າຍໆສໍາລັບການຄາດເດົາການຄວບຄຸມ. ຕົວເລືອກນີ້ເປີດຢູ່ຕາມຄ່າເລີ່ມຕົ້ນ.

-msched-stop-bits-ຫຼັງຈາກ-ທຸກໆຮອບວຽນ
ວາງຈຸດຢຸດຫຼັງຈາກທຸກໆຮອບເມື່ອກຳນົດເວລາ. ຕົວເລືອກນີ້ເປີດຢູ່ຕາມຄ່າເລີ່ມຕົ້ນ.

-msched-fp-mem-deps-zero-cost
ສົມມຸດວ່າຈຸດທີ່ເລື່ອນໄດ້ແລະການໂຫຼດແມ່ນບໍ່ມີແນວໂນ້ມທີ່ຈະເຮັດໃຫ້ເກີດຄວາມຂັດແຍ້ງໃນເວລາທີ່
ເຂົ້າໄປໃນກຸ່ມຄໍາແນະນໍາດຽວກັນ. ຕົວເລືອກນີ້ຖືກປິດໃຊ້ງານໂດຍຄ່າເລີ່ມຕົ້ນ.

-msel-sched-dont-check-control-spec
ສ້າງການກວດສອບສໍາລັບການຄວບຄຸມການຄາດເດົາໃນຕາຕະລາງການຄັດເລືອກ. ທຸງນີ້ແມ່ນ
ປິດການໃຊ້ງານໂດຍຄ່າເລີ່ມຕົ້ນ.

-msched-max-memory-insns=max-insns
ຈໍາກັດຈໍານວນຫນ່ວຍຄວາມຈໍາ insns ຕໍ່ກຸ່ມຄໍາແນະນໍາ, ໃຫ້ຄວາມສໍາຄັນຕ່ໍາກວ່າ
insns ຄວາມ​ຊົງ​ຈໍາ​ຕໍ່​ມາ​ພະ​ຍາ​ຍາມ​ທີ່​ຈະ​ກໍາ​ນົດ​ເວ​ລາ​ໃນ​ກຸ່ມ​ຄໍາ​ແນະ​ນໍາ​ດຽວ​ກັນ​.
ເລື້ອຍໆເປັນປະໂຫຍດເພື່ອປ້ອງກັນການຂັດແຍ້ງຂອງທະນາຄານ cache. ຄ່າເລີ່ມຕົ້ນແມ່ນ 1.

-msched-max-memory-insns-hard-limit
ບໍ່ອະນຸຍາດໃຫ້ຫຼາຍກວ່າ 'msched-max-memory-insns' ໃນກຸ່ມຄໍາແນະນໍາ. ຖ້າບໍ່ດັ່ງນັ້ນ, ຈໍາກັດ
ແມ່ນ 'ອ່ອນ' ຊຶ່ງຫມາຍຄວາມວ່າພວກເຮົາຕ້ອງການການດໍາເນີນງານທີ່ບໍ່ແມ່ນຫນ່ວຍຄວາມຈໍາເມື່ອເຖິງຂອບເຂດຈໍາກັດ
ອາດຈະຍັງຈັດຕາຕະລາງການດໍາເນີນງານຫນ່ວຍຄວາມຈໍາ.

IA-64/VMS ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ -m ທາງເລືອກແມ່ນຖືກກໍານົດໄວ້ສໍາລັບການຈັດຕັ້ງປະຕິບັດ IA-64/VMS:

-mvms-return-codes
ສົ່ງຄືນລະຫັດເງື່ອນໄຂ VMS ຈາກຫຼັກ. ຄ່າເລີ່ມຕົ້ນແມ່ນເພື່ອສົ່ງຄືນເງື່ອນໄຂຮູບແບບ POSIX
(ເຊັ່ນ: ຄວາມຜິດພາດ) ລະຫັດ.

-mdebug-main=ຄຳ ນຳ ໜ້າ
ໝາຍສິ່ງທີ່ເຮັດປະຈຳທຳອິດທີ່ຊື່ເລີ່ມຕົ້ນດ້ວຍ ຄຳ ນຳ ໜ້າ ເປັນປົກກະຕິຕົ້ນຕໍສໍາລັບການ
ດີບັກ.

- mmalloc64
ເລີ່ມຕົ້ນເປັນກິດຈະວັດການຈັດສັນໜ່ວຍຄວາມຈຳ 64-ບິດ.

LM32 ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ -m ທາງເລືອກແມ່ນຖືກກໍານົດສໍາລັບສະຖາປັດຕະຍະກໍາ Lattice Mico32:

-mbarrel-shift-enabled
ເປີດການນຳໃຊ້ຄຳແນະນຳການປ່ຽນຖັງ.

-mdivide-ເປີດໃຊ້ງານ
ເປີດໃຊ້ຄໍາແນະນໍາການແບ່ງ ແລະໂມດູລ.

- multiply-enabled
ເປີດໃຊ້ການຄູນຄໍາແນະນໍາ.

-msign-extend-enabled
ເປີດໃຊ້ຄຳແນະນຳການຂະຫຍາຍການເຊັນຊື່.

-muser-enabled
ເປີດໃຊ້ຄໍາແນະນໍາທີ່ຜູ້ໃຊ້ກໍານົດ.

M32C ທາງເລືອກໃນການ

-mcpu=ຊື່
ເລືອກ CPU ສໍາລັບລະຫັດທີ່ຖືກສ້າງຂຶ້ນ. ຊື່ ອາດ​ຈະ​ເປັນ​ຫນຶ່ງ​ໃນ r8 ຄ ສໍາລັບ R8C/Tiny
ໄລຍະການ, m16c ສໍາລັບຊຸດ M16C (ເຖິງ /60), ມ32ຊມ ສໍາລັບຊຸດ M16C/80, ຫຼື m32c
ສໍາລັບຊຸດ M32C/80.

- ຊິມ
ລະບຸວ່າໂຄງການຈະດໍາເນີນການຢູ່ໃນ simulator ໄດ້. ນີ້ເຮັດໃຫ້ເກີດການຈັບສະຫຼັບ
ຫໍສະຫມຸດ runtime ທີ່ຈະເຊື່ອມຕໍ່ທີ່ສະຫນັບສະຫນູນ, ສໍາລັບການຍົກຕົວຢ່າງ, ໄຟລ໌ I/O. ເຈົ້າຕ້ອງບໍ່
ໃຊ້ທາງເລືອກນີ້ໃນເວລາທີ່ສ້າງໂຄງການທີ່ຈະດໍາເນີນການກ່ຽວກັບຮາດແວທີ່ແທ້ຈິງ; ເຈົ້າ​ຕ້ອງ
ສະໜອງຫ້ອງສະໝຸດ runtime ຂອງທ່ານເອງສຳລັບຟັງຊັນ I/O ໃດກໍໄດ້ທີ່ຕ້ອງການ.

-memregs=ຈໍານວນ
ລະບຸຈໍານວນການລົງທະບຽນ pseudo-based ຫນ່ວຍຄວາມຈໍາ GCC ຈະໃຊ້ໃນລະຫວ່າງລະຫັດ
ລຸ້ນ. ການລົງທະບຽນ pseudo-ເຫຼົ່ານີ້ຈະຖືກນໍາໃຊ້ຄືກັບການລົງທະບຽນທີ່ແທ້ຈິງ, ດັ່ງນັ້ນມີ a
ການແລກປ່ຽນລະຫວ່າງຄວາມສາມາດຂອງ GCC ເພື່ອປັບລະຫັດເຂົ້າໄປໃນທະບຽນທີ່ມີຢູ່, ແລະ
ການປະຕິບັດການລົງໂທດຂອງການນໍາໃຊ້ຫນ່ວຍຄວາມຈໍາແທນທີ່ຈະລົງທະບຽນ. ໃຫ້ສັງເກດວ່າທຸກໂມດູນໃນ a
ໂປລແກລມຕ້ອງຖືກລວບລວມດ້ວຍຄ່າດຽວກັນສໍາລັບທາງເລືອກນີ້. ຍ້ອນແນວນັ້ນ, ເຈົ້າ
ບໍ່ຕ້ອງໃຊ້ຕົວເລືອກນີ້ກັບຫ້ອງສະໝຸດ runtime ເລີ່ມຕົ້ນ gcc builds.

M32R/D ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ -m ທາງເລືອກແມ່ນຖືກກໍານົດສໍາລັບສະຖາປັດຕະຍະກໍາ Renesas M32R/D:

-m32r2
ສ້າງລະຫັດສໍາລັບ M32R/2.

-m32rx
ສ້າງລະຫັດສໍາລັບ M32R/X.

-m32r
ສ້າງລະຫັດສໍາລັບ M32R. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-mmodel=ຂະໜາດນ້ອຍ
ສົມມຸດວ່າສິ່ງຂອງທັງຫມົດອາໄສຢູ່ໃນຫນ່ວຍຄວາມຈໍາຕ່ໍາກວ່າ 16MB (ເພື່ອໃຫ້ທີ່ຢູ່ຂອງພວກມັນສາມາດຢູ່ໄດ້
loaded ກັບ "ld24" instruction), ແລະສົມມຸດວ່າ subroutines ທັງຫມົດແມ່ນສາມາດບັນລຸໄດ້ດ້ວຍ
ຄໍາແນະນໍາ "bl". ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

ຄວາມສາມາດທີ່ຢູ່ຂອງວັດຖຸໃດນຶ່ງສາມາດຖືກຕັ້ງດ້ວຍຄຸນລັກສະນະ "ຕົວແບບ".

-mmodel=ປານກາງ
ສົມມຸດວ່າວັດຖຸອາດຈະຢູ່ບ່ອນໃດກໍໄດ້ໃນພື້ນທີ່ທີ່ຢູ່ 32-bit (ຕົວລວບລວມຂໍ້ມູນຈະສ້າງ
"seth/add3" ຄໍາແນະນໍາທີ່ຈະໂຫລດທີ່ຢູ່ຂອງເຂົາເຈົ້າ), ແລະສົມມຸດວ່າທຸກ subroutines ແມ່ນ
ສາມາດບັນລຸໄດ້ດ້ວຍຄໍາແນະນໍາ "bl".

-mmodel=ໃຫຍ່
ສົມມຸດວ່າວັດຖຸອາດຈະຢູ່ບ່ອນໃດກໍໄດ້ໃນພື້ນທີ່ທີ່ຢູ່ 32-bit (ຕົວລວບລວມຂໍ້ມູນຈະສ້າງ
"seth/add3" ຄໍາແນະນໍາເພື່ອໂຫລດທີ່ຢູ່ຂອງເຂົາເຈົ້າ), ແລະສົມມຸດວ່າ subroutines ອາດຈະບໍ່ເປັນ
ສາ​ມາດ​ບັນ​ລຸ​ໄດ້​ດ້ວຍ​ຄໍາ​ແນະ​ນໍາ "bl​" (ການ​ສັງ​ລວມ​ຈະ​ສ້າງ​ການ​ຊ້າ​ຫຼາຍ​
"seth/add3/jl" ລໍາດັບຄໍາແນະນໍາ).

-msdata=ບໍ່ມີ
ປິດການນຳໃຊ້ພື້ນທີ່ຂໍ້ມູນຂະໜາດນ້ອຍ. ຕົວແປຈະຖືກໃສ່ເຂົ້າໄປໃນຫນຶ່ງໃນ .ຂໍ້ມູນ, bsss, ຫຼື
.rodata (ເວັ້ນເສຍແຕ່ໄດ້ລະບຸຄຸນສົມບັດ "ພາກສ່ວນ"). ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

ພື້ນທີ່ຂໍ້ມູນຂະຫນາດນ້ອຍປະກອບດ້ວຍພາກສ່ວນຕ່າງໆ .sdata ແລະ .sbss. ວັດຖຸອາດຈະເປັນຢ່າງຈະແຈ້ງ
ໃສ່ໃນພື້ນທີ່ຂໍ້ມູນຂະຫນາດນ້ອຍດ້ວຍຄຸນລັກສະນະ "ພາກ" ໂດຍໃຊ້ຫນຶ່ງໃນສ່ວນເຫຼົ່ານີ້.

-msdata=sdata
ເອົາຂໍ້ມູນທົ່ວໂລກຂະຫນາດນ້ອຍແລະສະຖິດຢູ່ໃນພື້ນທີ່ຂໍ້ມູນຂະຫນາດນ້ອຍ, ແຕ່ບໍ່ໄດ້ສ້າງພິເສດ
ລະຫັດເພື່ອອ້າງອີງພວກມັນ.

-msdata=ໃຊ້
ເອົາຂໍ້ມູນທົ່ວໂລກແລະສະຖິດຂະຫນາດນ້ອຍໃນພື້ນທີ່ຂໍ້ມູນຂະຫນາດນ້ອຍ, ແລະສ້າງພິເສດ
ຄໍາແນະນໍາເພື່ອອ້າງອີງພວກມັນ.

-G num
ວາງວັດຖຸທົ່ວໂລກ ແລະສະຖິດໜ້ອຍກວ່າ ຫຼືເທົ່າກັບ num bytes ເຂົ້າໄປໃນຂໍ້ມູນຂະຫນາດນ້ອຍຫຼື
ພາກສ່ວນ bss ແທນທີ່ຈະເປັນຂໍ້ມູນປົກກະຕິຫຼືພາກສ່ວນ bss. ຄ່າເລີ່ມຕົ້ນຂອງ num is
8. ໄດ້ -msdata ທາງ​ເລືອກ​ຕ້ອງ​ໄດ້​ຮັບ​ການ​ຕັ້ງ​ເປັນ​ຫນຶ່ງ​ໃນ​ ຂໍ້ມູນ or ການນໍາໃຊ້ ສໍາລັບທາງເລືອກນີ້ທີ່ຈະມີ
ຜົນກະທົບ.

ໂມດູນທັງຫມົດຄວນຈະຖືກລວບລວມດ້ວຍອັນດຽວກັນ -G num ຄ່າ. ການລວບລວມກັບທີ່ແຕກຕ່າງກັນ
ຄຸນຄ່າຂອງ num ອາດຈະ ຫຼືອາດຈະບໍ່ເຮັດວຽກ; ຖ້າມັນບໍ່ແມ່ນຕົວເຊື່ອມຕໍ່ຈະໃຫ້ຂໍ້ຜິດພາດ
ຂໍ້ຄວາມ --- ລະຫັດບໍ່ຖືກຕ້ອງຈະບໍ່ຖືກສ້າງ.

-mdebug
ເຮັດໃຫ້ລະຫັດສະເພາະ M32R ໃນ compiler ສະແດງສະຖິຕິບາງຢ່າງທີ່ອາດຈະຊ່ວຍໄດ້
ໃນໂຄງການ debugging.

-malign-loops
ຈັດຮຽງທຸກ loops ໃຫ້ເປັນຂອບເຂດ 32-byte.

-mno-align-loops
ຢ່າບັງຄັບການຈັດລຽງ 32-byte ສໍາລັບ loops. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-missue-rate=ຈໍານວນ
ບັນຫາ ຈໍານວນ ຄໍາແນະນໍາຕໍ່ຮອບວຽນ. ຈໍານວນ ສາມາດເປັນ 1 ຫຼື 2 ເທົ່ານັ້ນ.

-mbranch-cost=ຈໍານວນ
ຈໍານວນ ພຽງແຕ່ສາມາດເປັນ 1 ຫຼື 2. ຖ້າມັນເປັນ 1 ຫຼັງຈາກນັ້ນສາຂາຈະຖືກເລືອກຫຼາຍກວ່າ
ລະຫັດເງື່ອນໄຂ, ຖ້າມັນເປັນ 2, ຫຼັງຈາກນັ້ນ, ກົງກັນຂ້າມຈະນໍາໃຊ້.

-mflush-trap=ຈໍານວນ
ລະບຸຕົວເລກໃສ່ກັບດັກທີ່ຈະໃຊ້ເພື່ອລ້າງແຄດ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 12. ຖືກຕ້ອງ
ຕົວເລກແມ່ນຢູ່ລະຫວ່າງ 0 ຫາ 15 ລວມ.

-mno-flush-ດັກ
ລະບຸວ່າບໍ່ສາມາດລ້າງແຄດໄດ້ໂດຍການໃຊ້ກັບດັກ.

-mflush-func=ຊື່
ລະບຸຊື່ຂອງຟັງຊັນຂອງລະບົບປະຕິບັດການທີ່ຈະໂທຫາເພື່ອ flush cache. ໄດ້
ມາດຕະຖານແມ່ນ _flush_cache, ແຕ່ການເອີ້ນຟັງຊັນຈະຖືກນໍາໃຊ້ພຽງແຕ່ຖ້າກັບດັກບໍ່ແມ່ນ
ທີ່ມີຢູ່.

-mno-flush-func
ຊີ້ໃຫ້ເຫັນວ່າບໍ່ມີຟັງຊັນ OS ສໍາລັບການລ້າງແຄດ.

M680x0 ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ແມ່ນ -m ທາງເລືອກທີ່ກໍານົດສໍາລັບໂປເຊດເຊີ M680x0 ແລະ ColdFire. ການຕັ້ງຄ່າເລີ່ມຕົ້ນ
ຂຶ້ນກັບວ່າສະຖາປັດຕະຍະກໍາໃດຖືກເລືອກເມື່ອ compiler ໄດ້ຖືກກໍານົດ; ຄ່າເລີ່ມຕົ້ນ
ສໍາລັບທາງເລືອກທົ່ວໄປທີ່ສຸດແມ່ນໃຫ້ຂ້າງລຸ່ມນີ້.

- ມີນາ=ໂຄ້ງ
ສ້າງລະຫັດສໍາລັບສະຖາປັດຕະຍະກໍາຊຸດຄໍາແນະນໍາ M680x0 ຫຼື ColdFire.
ຄ່າທີ່ອະນຸຍາດຂອງ ໂຄ້ງ ສໍາລັບສະຖາປັດຕະຍະກໍາ M680x0 ແມ່ນ: 68000, 68010, 68020, 68030,
68040, 68060 ແລະ cpu32. ສະຖາປັດຕະຍະກໍາ ColdFire ຖືກເລືອກຕາມ Freescale's
ການຈັດປະເພດ ISA ແລະຄ່າທີ່ອະນຸຍາດແມ່ນ: ອິດສະຢາ, isaaplus, isab ແລະ ໄອຊາກ.

gcc ກໍານົດ macro __mcfໂຄ້ງ__ ເມື່ອໃດກໍ່ຕາມທີ່ມັນກໍາລັງສ້າງລະຫັດສໍາລັບເປົ້າຫມາຍ ColdFire.
ໄດ້ ໂຄ້ງ ໃນມະຫາພາກນີ້ແມ່ນຫນຶ່ງໃນ - ມີນາ ການໂຕ້ຖຽງທີ່ໃຫ້ໄວ້ຂ້າງເທິງ.

ເມື່ອໃຊ້ຮ່ວມກັນ, - ມີນາ ແລະ -mtune ເລືອກລະຫັດທີ່ເຮັດວຽກຢູ່ໃນຄອບຄົວທີ່ຄ້າຍຄືກັນ
ໂປເຊດເຊີແຕ່ມັນຖືກປັບປຸງໃຫ້ເຫມາະສົມສໍາລັບສະຖາປັດຕະຍະກໍາຈຸລະພາກໂດຍສະເພາະ.

-mcpu=cpu
ສ້າງລະຫັດສໍາລັບໂປເຊດເຊີ M680x0 ຫຼື ColdFire ສະເພາະ. M680x0 cpus ແມ່ນ:
68000, 68010, 68020, 68030, 68040, 68060, 68302, 68332 ແລະ cpu32. The ColdFire cpus
ແມ່ນໃຫ້ໂດຍຕາຕະລາງຂ້າງລຸ່ມນີ້, ເຊິ່ງຍັງຈັດປະເພດ CPUs ເຂົ້າໄປໃນຄອບຄົວ:

ຄອບຄົວ: -mcpu ກະທູ້ທີ່
51 : 51 51ac 51cn 51 ເອັມ 51 ເຄ
5206 : 5202 5204 5206
5206 : 5206
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 - ມີນາ=ໂຄ້ງ if ໂຄ້ງ ແມ່ນເຂົ້າກັນໄດ້ກັບ cpu. ການປະສົມອື່ນໆຂອງ
-mcpu ແລະ - ມີນາ ຖືກປະຕິເສດ.

gcc ກໍານົດ macro __mcf_cpu_cpu ເມື່ອເປົ້າໝາຍ ColdFire cpu ຖືກເລືອກ. ມັນຍັງ
ກໍານົດ __mcf_family_ຄອບຄົວ, ບ່ອນທີ່ມູນຄ່າຂອງ ຄອບຄົວ ແມ່ນໃຫ້ໂດຍຕາຕະລາງຂ້າງເທິງ.

-mtune=ປບັ
ປັບລະຫັດສໍາລັບສະຖາປັດຕະຍະກໍາຈຸລະພາກສະເພາະ, ພາຍໃນຂໍ້ຈໍາກັດທີ່ກໍານົດໂດຍ - ມີນາ
ແລະ -mcpu. ສະຖາປັດຕະຍະກຳຈຸລະພາກ M680x0 ແມ່ນ: 68000, 68010, 68020, 68030, 68040,
68060 ແລະ cpu32. ສະຖາປັດຕະຍະກຳຈຸລະພາກຂອງ ColdFire ແມ່ນ: cfv1, cfv2, cfv3, cfv4 ແລະ
cfv4e.

ທ່ານຍັງສາມາດໃຊ້ -mtune=68020-40 ສໍາລັບລະຫັດທີ່ຕ້ອງການເຮັດວຽກຂ້ອນຂ້າງດີໃນ 68020,
68030 ແລະ 68040 ເປົ້າຫມາຍ. -mtune=68020-60 ແມ່ນຄ້າຍຄືກັນແຕ່ປະກອບມີ 68060 ເປົ້າຫມາຍເປັນ
ດີ. ທັງ​ສອງ​ທາງ​ເລືອກ​ນີ້​ຄັດ​ເລືອກ​ເອົາ​ການ​ຕັດ​ສິນ​ໃຈ​ການ​ປ​ບ​ັ​ດຽວ​ກັນ​ເປັນ​ -m68020-40 ແລະ -m68020-60
ຕາມລໍາດັບ.

gcc ກໍານົດ macro __mcໂຄ້ງ ແລະ __mcໂຄ້ງ__ ໃນ​ເວ​ລາ​ທີ່​ການ​ປັບ​ສໍາ​ລັບ​ສະ​ຖາ​ປັດ​ຕະ 680x0​
ໂຄ້ງ. ມັນຍັງກໍານົດ mcໂຄ້ງ ເວັ້ນເສຍແຕ່ວ່າ -ansi ຫຼືບໍ່ແມ່ນ GNU -std ທາງເລືອກແມ່ນຖືກນໍາໃຊ້.
ຖ້າ gcc ກໍາລັງປັບລະດັບສະຖາປັດຕະຍະກໍາ, ຕາມທີ່ເລືອກໂດຍ -mtune=68020-40 or
-mtune=68020-60, ມັນກໍານົດ macro ສໍາລັບທຸກໆສະຖາປັດຕະຍະກໍາໃນຂອບເຂດ.

gcc ຍັງກໍານົດ macro __ມອູຣ__ ໃນ​ເວ​ລາ​ທີ່​ປັບ​ສໍາ​ລັບ​ສະ​ຖາ​ປັດ​ຕະ​ຍະ​ກໍາ​ຈຸ​ລະ​ພາກ ColdFire​
ອູຣ, ບ່ອນທີ່ ອູຣ ແມ່ນຫນຶ່ງໃນການໂຕ້ຖຽງທີ່ໄດ້ກ່າວມາຂ້າງເທິງ.

-m68000
-mc68000
ສ້າງຜົນຜະລິດສໍາລັບ 68000. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນເມື່ອ compiler ໄດ້ຖືກຕັ້ງຄ່າສໍາລັບ
ລະບົບທີ່ອີງໃສ່ 68000. ມັນເທົ່າກັບ - ມີນາ=68000.

ໃຊ້ຕົວເລືອກນີ້ສໍາລັບ microcontrollers ທີ່ມີແກນ 68000 ຫຼື EC000, ລວມທັງ 68008,
68302, 68306, 68307, 68322, 68328 ແລະ 68356.

-m68010
ສ້າງຜົນຜະລິດສໍາລັບ 68010. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນເມື່ອ compiler ໄດ້ຖືກຕັ້ງຄ່າສໍາລັບ
ລະບົບທີ່ອີງໃສ່ 68010. ມັນເທົ່າກັບ - ມີນາ=68010.

-m68020
-mc68020
ສ້າງຜົນຜະລິດສໍາລັບ 68020. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນເມື່ອ compiler ໄດ້ຖືກຕັ້ງຄ່າສໍາລັບ
ລະບົບທີ່ອີງໃສ່ 68020. ມັນເທົ່າກັບ - ມີນາ=68020.

-m68030
ສ້າງຜົນຜະລິດສໍາລັບ 68030. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນເມື່ອ compiler ໄດ້ຖືກຕັ້ງຄ່າສໍາລັບ
ລະບົບທີ່ອີງໃສ່ 68030. ມັນເທົ່າກັບ - ມີນາ=68030.

-m68040
ສ້າງຜົນຜະລິດສໍາລັບ 68040. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນເມື່ອ compiler ໄດ້ຖືກຕັ້ງຄ່າສໍາລັບ
ລະບົບທີ່ອີງໃສ່ 68040. ມັນເທົ່າກັບ - ມີນາ=68040.

ທາງເລືອກນີ້ຍັບຍັ້ງການໃຊ້ 68881/68882 ຄໍາແນະນໍາທີ່ຕ້ອງໄດ້ຮັບການປະຕິບັດໂດຍ
ຊອບແວຢູ່ໃນ 68040. ໃຊ້ທາງເລືອກນີ້ຖ້າ 68040 ຂອງທ່ານບໍ່ມີລະຫັດເພື່ອເຮັດຕາມ.
ຄໍາແນະນໍາເຫຼົ່ານັ້ນ.

-m68060
ສ້າງຜົນຜະລິດສໍາລັບ 68060. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນເມື່ອ compiler ໄດ້ຖືກຕັ້ງຄ່າສໍາລັບ
ລະບົບທີ່ອີງໃສ່ 68060. ມັນເທົ່າກັບ - ມີນາ=68060.

ທາງເລືອກນີ້ຍັບຍັ້ງການໃຊ້ຄໍາແນະນໍາ 68020 ແລະ 68881/68882 ທີ່ຕ້ອງມີ
emulated ໂດຍຊອບແວໃນ 68060. ໃຊ້ທາງເລືອກນີ້ຖ້າຫາກວ່າ 68060 ຂອງທ່ານບໍ່ມີລະຫັດ.
ເພື່ອເຮັດຕາມຄຳແນະນຳເຫຼົ່ານັ້ນ.

-mcpu32
ສ້າງຜົນຜະລິດສໍາລັບ CPU32. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນເມື່ອ compiler ຖືກຕັ້ງຄ່າໃຫ້
ລະບົບທີ່ໃຊ້ CPU32. ມັນເທົ່າກັບ -march=cpu32.

ໃຊ້ທາງເລືອກນີ້ສໍາລັບ microcontrollers ທີ່ມີ CPU32 ຫຼື CPU32+ core, ລວມທັງ 68330,
68331, 68332, 68333, 68334, 68336, 68340, 68341, 68349 ແລະ 68360.

-m5200
ສ້າງຜົນຜະລິດສໍາລັບ CPU ColdFire 520X. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນເມື່ອ compiler ແມ່ນ
ຕັ້ງຄ່າສໍາລັບລະບົບ 520X. ມັນເທົ່າກັບ -mcpu=5206, ແລະດຽວນີ້
ຄັດຄ້ານທາງເລືອກນັ້ນ.

ໃຊ້ຕົວເລືອກນີ້ສໍາລັບ microcontroller ທີ່ມີແກນ 5200, ລວມທັງ MCF5202, MCF5203,
MCF5204 ແລະ MCF5206.

-m5206e
ສ້າງຜົນຜະລິດສໍາລັບ CPU ColdFire 5206e. ຕອນນີ້ຕົວເລືອກນີ້ຖືກປະຕິເສດໃນເງື່ອນໄຂ
ທຽບເທົ່າ -mcpu=5206e.

-m528x
ສ້າງຜົນຜະລິດສໍາລັບສະມາຊິກຂອງຄອບຄົວ ColdFire 528X. ທາງເລືອກແມ່ນໃນປັດຈຸບັນ
ຄັດຄ້ານໃນເງື່ອນໄຂທີ່ທຽບເທົ່າ -mcpu=528x.

-m5307
ສ້າງຜົນຜະລິດສໍາລັບ CPU ColdFire 5307. ຕອນນີ້ຕົວເລືອກດັ່ງກ່າວຖືກປະຕິເສດໃນເງື່ອນໄຂຂອງ
ທຽບເທົ່າ -mcpu=5307.

-m5407
ສ້າງຜົນຜະລິດສໍາລັບ CPU ColdFire 5407. ຕອນນີ້ຕົວເລືອກດັ່ງກ່າວຖືກປະຕິເສດໃນເງື່ອນໄຂຂອງ
ທຽບເທົ່າ -mcpu=5407.

-mcfv4e
ສ້າງຜົນຜະລິດສໍາລັບ CPU ຄອບຄົວ ColdFire V4e (ເຊັ່ນ: 547x/548x). ນີ້ປະກອບມີການນໍາໃຊ້
ຄໍາແນະນໍາຈຸດລອຍຂອງຮາດແວ. ທາງເລືອກແມ່ນທຽບເທົ່າກັບ -mcpu=547x, ແລະແມ່ນ
ດຽວນີ້ຖືກປະຕິເສດໃນເງື່ອນໄຂຂອງທາງເລືອກນັ້ນ.

-m68020-40
ສ້າງຜົນຜະລິດສໍາລັບ 68040, ໂດຍບໍ່ຕ້ອງໃຊ້ຄໍາແນະນໍາໃຫມ່ໃດໆ. ຜົນໄດ້ຮັບນີ້
ໃນ​ລະ​ຫັດ​ທີ່​ສາ​ມາດ​ດໍາ​ເນີນ​ການ​ຂ້ອນ​ຂ້າງ​ປະ​ສິດ​ທິ​ພາບ​ກ່ຽວ​ກັບ​ການ 68020/68881 ຫຼື 68030 ຫຼື a
68040. ລະຫັດທີ່ສ້າງຂຶ້ນແມ່ນໃຊ້ຄໍາແນະນໍາ 68881 ທີ່ເຮັດຕາມແບບຈໍາລອງໃນ
68040​.

ທາງເລືອກແມ່ນທຽບເທົ່າກັບ - ມີນາ=68020 -mtune=68020-40.

-m68020-60
ສ້າງຜົນຜະລິດສໍາລັບ 68060, ໂດຍບໍ່ຕ້ອງໃຊ້ຄໍາແນະນໍາໃຫມ່ໃດໆ. ຜົນໄດ້ຮັບນີ້
ໃນ​ລະ​ຫັດ​ທີ່​ສາ​ມາດ​ດໍາ​ເນີນ​ການ​ຂ້ອນ​ຂ້າງ​ປະ​ສິດ​ທິ​ພາບ​ກ່ຽວ​ກັບ​ການ 68020/68881 ຫຼື 68030 ຫຼື a
68040. ລະຫັດທີ່ສ້າງຂຶ້ນແມ່ນໃຊ້ຄໍາແນະນໍາ 68881 ທີ່ເຮັດຕາມແບບຈໍາລອງໃນ
68060​.

ທາງເລືອກແມ່ນທຽບເທົ່າກັບ - ມີນາ=68020 -mtune=68020-60.

-mhard-float
-m68881
ສ້າງຄໍາແນະນໍາຈຸດລອຍ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນຂອງ 68020 ຂຶ້ນໄປ, ແລະ
ສໍາລັບອຸປະກອນ ColdFire ທີ່ມີ FPU. ມັນກໍານົດມະຫາພາກ __HAVE_68881__ ໃນ M680x0
ເປົ້າ​ຫມາຍ​ແລະ​ __mcffpu__ ໃນ​ເປົ້າ​ຫມາຍ ColdFire.

-msoft-float
ຢ່າສ້າງຄໍາແນະນໍາທີ່ເລື່ອນໄດ້; ໃຊ້ການໂທຫ້ອງສະໝຸດແທນ. ນີ້​ແມ່ນ
ຄ່າເລີ່ມຕົ້ນຂອງ 68000, 68010, ແລະ 68832 ເປົ້າໝາຍ. ມັນຍັງເປັນຄ່າເລີ່ມຕົ້ນຂອງ ColdFire
ອຸປະກອນທີ່ບໍ່ມີ FPU.

-mdiv
-mno-div
ສ້າງ (ບໍ່ສ້າງ) ການແບ່ງຮາດແວ ColdFire ແລະຄໍາແນະນໍາທີ່ເຫຼືອ. ຖ້າ
- ມີນາ ຖືກນໍາໃຊ້ໂດຍບໍ່ມີການ -mcpu, ຄ່າເລີ່ມຕົ້ນແມ່ນ "ເປີດ" ສໍາລັບສະຖາປັດຕະຍະກໍາ ColdFire ແລະ "ປິດ"
ສໍາລັບສະຖາປັດຕະຍະກໍາ M680x0. ຖ້າບໍ່ດັ່ງນັ້ນ, ຄ່າເລີ່ມຕົ້ນແມ່ນເອົາມາຈາກ CPU ເປົ້າຫມາຍ (ບໍ່ວ່າຈະ
CPU ເລີ່ມຕົ້ນ, ຫຼືອັນທີ່ລະບຸໄວ້ໂດຍ -mcpu). ຕົວຢ່າງ, ຄ່າເລີ່ມຕົ້ນແມ່ນ "ປິດ"
ສໍາລັບການ -mcpu=5206 ແລະ "ສຸດ" ສໍາລັບ -mcpu=5206e.

gcc ກໍານົດ macro __mcfhwdiv__ ເມື່ອຕົວເລືອກນີ້ຖືກເປີດໃຊ້.

-mshort
ພິຈາລະນາພິມ "int" ເປັນ 16 bits wide, ເຊັ່ນ "short int". ນອກຈາກນັ້ນ, ພາລາມິເຕີ
ຜ່ານ stack ແມ່ນຍັງສອດຄ່ອງກັບຂອບເຂດຊາຍແດນ 16-bit ເຖິງແມ່ນວ່າຢູ່ໃນເປົ້າຫມາຍທີ່ມີ API
ບັງຄັບໃຫ້ສົ່ງເສີມເປັນ 32-bit.

-mno-ສັ້ນ
ຢ່າພິຈາລະນາປະເພດ "int" ກວ້າງ 16 ບິດ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-mnobitfield
-mno-bitfield
ຢ່າໃຊ້ຄໍາແນະນໍາໃນ bit-field. ໄດ້ -m68000, -mcpu32 ແລະ -m5200 ທາງ​ເລືອກ​ຫມາຍ​ເຖິງ​
-mnobitfield.

-mbitfield
ໃຊ້ຄໍາແນະນໍາໃນ bit-field. ໄດ້ -m68020 ທາງເລືອກຫມາຍເຖິງ -mbitfield. ນີ້​ແມ່ນ
ຄ່າເລີ່ມຕົ້ນຖ້າທ່ານໃຊ້ການຕັ້ງຄ່າທີ່ອອກແບບມາສໍາລັບ 68020.

-mrtd
ໃຊ້ສົນທິສັນຍາການເອີ້ນຟັງຊັນທີ່ຕ່າງກັນ, ເຊິ່ງຟັງຊັນທີ່ຕ້ອງແກ້ໄຂ
ຈໍານວນຂອງການໂຕ້ຖຽງກັບຄືນມາດ້ວຍຄໍາແນະນໍາ "rtd", ເຊິ່ງປະກົດການໂຕ້ຖຽງຂອງພວກເຂົາ
ໃນຂະນະທີ່ກັບຄືນ. ນີ້ຊ່ວຍປະຢັດຄໍາແນະນໍາຫນຶ່ງໃນຜູ້ໂທນັບຕັ້ງແຕ່ບໍ່ຈໍາເປັນຕ້ອງ
ປະກົດການໂຕ້ຖຽງຢູ່ທີ່ນັ້ນ.

ສົນທິສັນຍາການເອີ້ນນີ້ບໍ່ເຂົ້າກັນໄດ້ກັບອັນທີ່ປົກກະຕິໃຊ້ຢູ່ໃນ Unix, ດັ່ງນັ້ນເຈົ້າ
ບໍ່ສາມາດໃຊ້ມັນໄດ້ຖ້າທ່ານຕ້ອງການໂທຫາຫ້ອງສະຫມຸດທີ່ລວບລວມດ້ວຍ Unix compiler.

ນອກຈາກນັ້ນ, ທ່ານຕ້ອງໃຫ້ prototypes ຟັງຊັນສໍາລັບຫນ້າທີ່ທັງຫມົດທີ່ໃຊ້ຕົວແປ
ຈໍານວນການໂຕ້ຖຽງ (ລວມທັງ "printf"); ຖ້າບໍ່ດັ່ງນັ້ນລະຫັດບໍ່ຖືກຕ້ອງຈະຖືກສ້າງ
ສໍາລັບການໂທຫາຫນ້າທີ່ເຫຼົ່ານັ້ນ.

ນອກຈາກນັ້ນ, ລະຫັດບໍ່ຖືກຕ້ອງຢ່າງຮຸນແຮງຈະສົ່ງຜົນໃຫ້ຖ້າທ່ານໂທຫາຟັງຊັນທີ່ມີຫຼາຍເກີນໄປ
ການໂຕ້ຖຽງ. (ປົກກະຕິ, ການໂຕ້ຖຽງພິເສດແມ່ນຖືກລະເລີຍຢ່າງບໍ່ມີອັນຕະລາຍ.)

ຄໍາແນະນໍາ "rtd" ແມ່ນສະຫນັບສະຫນູນໂດຍ 68010, 68020, 68030, 68040, 68060 ແລະ CPU32.
ໂປເຊດເຊີ, ແຕ່ບໍ່ແມ່ນ 68000 ຫຼື 5200.

-mno-rtd
ຢ່າໃຊ້ສົນທິສັນຍາການໂທທີ່ເລືອກໂດຍ -mrtd. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-malign-int
-mno-align-int
ຄວບຄຸມວ່າ GCC ວາງ "int", "long", "long long", "float", "double", ແລະ "long.
double" ຕົວແປໃນຂອບເຂດ 32-bit (-malign-int) ຫຼືຂອບເຂດ 16-ບິດ
(-mno-align-int). ການຈັດຮຽງຕົວແປໃນຂອບເຂດ 32-bit ຜະລິດລະຫັດທີ່ເຮັດວຽກ
ຂ້ອນຂ້າງໄວໃນໂປເຊດເຊີທີ່ມີ 32-bit busses ໂດຍຄ່າໃຊ້ຈ່າຍຂອງຫນ່ວຍຄວາມຈໍາຫຼາຍ.

ຄໍາເຕືອນ: ຖ້າທ່ານໃຊ້ -malign-int ສະຫຼັບ, GCC ຈະຈັດໂຄງສ້າງທີ່ປະກອບດ້ວຍ
ຂ້າງເທິງປະເພດທີ່ແຕກຕ່າງກັນກ່ວາການໂຕ້ຕອບສອງຄໍາຮ້ອງສະຫມັກທີ່ຈັດພີມມາຫຼາຍທີ່ສຸດ
ຂໍ້ມູນຈໍາເພາະສໍາລັບ m68k.

-mpcrel
ໃຊ້ pc-relative addressing mode ຂອງ 68000 ໂດຍກົງ, ແທນທີ່ຈະໃຊ້ global
ຕາຕະລາງຊົດເຊີຍ. ໃນປັດຈຸບັນ, ທາງເລືອກນີ້ຫມາຍເຖິງ -fpic, ອະນຸຍາດໃຫ້ມີການຊົດເຊີຍ 16-bit ຫຼາຍທີ່ສຸດ
ສໍາລັບທີ່ຢູ່ pc-relative. -fPIC ບໍ່​ໄດ້​ຮັບ​ການ​ສະ​ຫນັບ​ສະ​ຫນູນ​ໃນ​ປັດ​ຈຸ​ບັນ​ -mpcrel, ເຖິງແມ່ນວ່າ
ນີ້ສາມາດໄດ້ຮັບການສະຫນັບສະຫນູນສໍາລັບໂປເຊດເຊີ 68020 ແລະສູງກວ່າ.

-mno-strict-align
-mstrict-align
ຢ່າ (ເຮັດ) ສົມມຸດວ່າການອ້າງອີງຄວາມຊົງຈໍາທີ່ບໍ່ສອດຄ່ອງຈະຖືກຈັດການໂດຍລະບົບ.

-msep-ຂໍ້ມູນ
ສ້າງລະຫັດທີ່ອະນຸຍາດໃຫ້ພາກສ່ວນຂໍ້ມູນຕັ້ງຢູ່ໃນພື້ນທີ່ທີ່ແຕກຕ່າງກັນຂອງຫນ່ວຍຄວາມຈໍາ
ຈາກພາກສ່ວນຂໍ້ຄວາມ. ນີ້ອະນຸຍາດໃຫ້ປະຕິບັດໃນສະຖານທີ່ໃນສະພາບແວດລ້ອມທີ່ບໍ່ມີ
ການຄຸ້ມຄອງຄວາມຊົງຈໍາ virtual. ທາງເລືອກນີ້ຫມາຍເຖິງ -fPIC.

-mno-sep-data
ສ້າງລະຫັດທີ່ສົມມຸດວ່າສ່ວນຂໍ້ມູນປະຕິບັດຕາມສ່ວນຂໍ້ຄວາມ. ນີ້​ແມ່ນ
ຄ່າເລີ່ມຕົ້ນ.

- ຫໍສະໝຸດກາງ
ສ້າງລະຫັດທີ່ຮອງຮັບຫ້ອງສະໝຸດທີ່ໃຊ້ຮ່ວມກັນຜ່ານວິທີການ ID ຫ້ອງສະໝຸດ. ນີ້ອະນຸຍາດໃຫ້
ສໍາລັບການປະຕິບັດຢູ່ໃນສະຖານທີ່ແລະຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນໃນສະພາບແວດລ້ອມທີ່ບໍ່ມີຫນ່ວຍຄວາມຈໍາ virtual
ການຄຸ້ມຄອງ. ທາງເລືອກນີ້ຫມາຍເຖິງ -fPIC.

-mno-id-shared-library
ສ້າງລະຫັດທີ່ບໍ່ສົມມຸດວ່າຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນໂດຍ ID ແມ່ນຖືກນໍາໃຊ້. ນີ້​ແມ່ນ
ຄ່າເລີ່ມຕົ້ນ.

-mshared-library-id=n
ລະບຸໝາຍເລກປະຈຳຕົວຂອງຫ້ອງສະໝຸດທີ່ໃຊ້ຮ່ວມກັນ ID ທີ່ຖືກລວບລວມ.
ການລະບຸຄ່າຂອງ 0 ຈະສ້າງລະຫັດທີ່ຫນາແຫນ້ນກວ່າ, ການລະບຸຄ່າອື່ນໆຈະ
ບັງ​ຄັບ​ການ​ຈັດ​ສັນ​ຈໍາ​ນວນ​ນັ້ນ​ກັບ​ຫ້ອງ​ສະ​ຫມຸດ​ໃນ​ປັດ​ຈຸ​ບັນ​ແຕ່​ບໍ່​ມີ​ພື້ນ​ທີ່​ຫຼາຍ​ຫຼື​
ເວລາມີປະສິດທິພາບຫຼາຍກ່ວາການລະເວັ້ນທາງເລືອກນີ້.

-mxgot
-mno-xgot
ເມື່ອສ້າງລະຫັດເອກະລາດຕໍາແຫນ່ງສໍາລັບ ColdFire, ສ້າງລະຫັດທີ່ເຮັດວຽກຖ້າ
GOT ມີຫຼາຍກວ່າ 8192 ລາຍການ. ລະຫັດນີ້ໃຫຍ່ກວ່າ ແລະຊ້າກວ່າລະຫັດ
ສ້າງຂຶ້ນໂດຍບໍ່ມີທາງເລືອກນີ້. ໃນໂປເຊດເຊີ M680x0, ທາງເລືອກນີ້ບໍ່ຈໍາເປັນ; -fPIC
ພຽງພໍ.

ໂດຍປົກກະຕິ GCC ໃຊ້ຄໍາແນະນໍາດຽວເພື່ອໂຫລດຄ່າຈາກ GOT. ໃນຂະນະທີ່ນີ້ແມ່ນ
ຂ້ອນຂ້າງມີປະສິດທິພາບ, ມັນເຮັດວຽກພຽງແຕ່ຖ້າ GOT ມີຂະຫນາດນ້ອຍກວ່າປະມານ 64k. ທຸກຢ່າງ
ຂະຫນາດໃຫຍ່ເຮັດໃຫ້ຕົວເຊື່ອມຕໍ່ລາຍງານຂໍ້ຜິດພາດເຊັ່ນ:

ການຍົກຍ້າຍຖືກຕັດໃຫ້ພໍດີ: R_68K_GOT16O foobar

ຖ້າສິ່ງນີ້ເກີດຂື້ນ, ທ່ານຄວນລວບລວມລະຫັດຂອງທ່ານກັບ -mxgot. ຫຼັງຈາກນັ້ນມັນຄວນຈະເຮັດວຽກຮ່ວມກັບ
GOTs ຂະຫນາດໃຫຍ່ຫຼາຍ. ຢ່າງໃດກໍຕາມ, ລະຫັດທີ່ສ້າງຂຶ້ນດ້ວຍ -mxgot ແມ່ນປະສິດທິພາບຫນ້ອຍ, ເນື່ອງຈາກວ່າມັນ
ໃຊ້ 4 ຄໍາແນະນໍາເພື່ອດຶງມູນຄ່າຂອງສັນຍາລັກທົ່ວໂລກ.

ໃຫ້ສັງເກດວ່າບາງຕົວເຊື່ອມຕໍ່, ລວມທັງຮຸ່ນໃຫມ່ຂອງຕົວເຊື່ອມຕໍ່ GNU, ສາມາດສ້າງໄດ້
ຫຼາຍ GOTs ແລະຈັດລຽງ GOT entries. ຖ້າທ່ານມີຕົວເຊື່ອມຕໍ່ດັ່ງກ່າວ, ທ່ານພຽງແຕ່ຕ້ອງການ
ການນໍາໃຊ້ -mxgot ເມື່ອລວບລວມໄຟລ໌ວັດຖຸດຽວທີ່ເຂົ້າເຖິງຫຼາຍກ່ວາ 8192 GOT
ລາຍການ. ໜ້ອຍຫຼາຍເຮັດ.

ຕົວເລືອກເຫຼົ່ານີ້ບໍ່ມີຜົນໃດໆເວັ້ນເສຍແຕ່ GCC ຈະສ້າງລະຫັດທີ່ບໍ່ຂຶ້ນກັບຕໍາແຫນ່ງ.

MCore ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ແມ່ນ -m ທາງ​ເລືອກ​ທີ່​ກໍາ​ນົດ​ສໍາ​ລັບ Motorola M*Core processors​.

-mhardlit
-mno-hardlit
ຄົງທີ່ໃນແຖວເຂົ້າໄປໃນກະແສລະຫັດຖ້າມັນສາມາດເຮັດໄດ້ໃນສອງຄໍາແນະນໍາຫຼືຫນ້ອຍກວ່າ.

-mdiv
-mno-div
ໃຊ້ຄໍາແນະນໍາການແບ່ງ. (ເປີດໃຊ້ງານຕາມຄ່າເລີ່ມຕົ້ນ).

-mrelax ທັນທີ
-mno-ຜ່ອນຄາຍ-ທັນທີ
ອະ​ນຸ​ຍາດ​ໃຫ້​ຂະ​ຫນາດ​ໂດຍ​ຕົນ​ເອງ​ໂດຍ​ໄວ​ໃນ​ການ​ດໍາ​ເນີນ​ງານ bit​.

-mwide-bitfields
-mno-wide-bitfields
ປະຕິບັດ bit-fields ເປັນ int-size ສະເໝີ.

-m4byte functions
-mno-4byte-functions
ບັງຄັບຟັງຊັນທັງໝົດໃຫ້ສອດຄ່ອງກັບຂອບເຂດ 4-byte.

-mcallgraph-data
-mno-callgraph-data
ປ່ອຍຂໍ້ມູນ callgraph.

-mslow-bytes
-mno-slow-bytes
ຕ້ອງການການເຂົ້າເຖິງຄໍາສັບໃນເວລາທີ່ອ່ານປະລິມານ byte.

-mlittle-endian
-mbig-endian
ສ້າງລະຫັດສໍາລັບເປົ້າຫມາຍພຽງເລັກນ້ອຍ endian.

-m210
-m340
ສ້າງລະຫັດສໍາລັບໂປເຊດເຊີ 210.

-mno-lsim
ສົມມຸດວ່າການຮອງຮັບ runtime ໄດ້ຖືກສະຫນອງໃຫ້ແລະດັ່ງນັ້ນຈຶ່ງລະເວັ້ນຫ້ອງສະຫມຸດ simulator
(libsim.a) ຈາກເສັ້ນຄໍາສັ່ງ linker.

-mstack-increment=ຂະຫນາດ
ກໍານົດຈໍານວນສູງສຸດສໍາລັບການດໍາເນີນການເພີ່ມຂຶ້ນ stack ດຽວ. ມູນຄ່າຂະຫນາດໃຫຍ່ສາມາດ
ເພີ່ມ​ຄວາມ​ໄວ​ຂອງ​ໂຄງ​ການ​ທີ່​ປະ​ກອບ​ດ້ວຍ​ຫນ້າ​ທີ່​ຈໍາ​ເປັນ​ຕ້ອງ​ຈໍາ​ນວນ​ຫຼາຍ​ຂອງ​
ພື້ນທີ່ stack, ແຕ່ພວກມັນຍັງສາມາດເຮັດໃຫ້ເກີດຄວາມຜິດຂອງການແບ່ງສ່ວນໄດ້ຖ້າ stack ຖືກຂະຫຍາຍອອກ
ຫຼາຍເກີນໄປ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 0x1000.

ເມປ ທາງເລືອກໃນການ

-mabsdiff
ເປີດໃຊ້ຄໍາແນະນໍາ "abs", ເຊິ່ງເປັນຄວາມແຕກຕ່າງຢ່າງແທ້ຈິງລະຫວ່າງສອງທະບຽນ.

-mall-opts
ເປີດ​ໃຊ້​ງານ​ຄໍາ​ແນະ​ນໍາ​ທາງ​ເລືອກ​ທັງ​ຫມົດ - ສະ​ເລ່ຍ​, ຄູນ​, ແບ່ງ​, ການ​ດໍາ​ເນີນ​ງານ​ບິດ​,
ສູນນຳໜ້າ, ຄວາມແຕກຕ່າງຢ່າງແທ້ຈິງ, ຕ່ຳສຸດ/ສູງສຸດ, ຄລິບ, ແລະຄວາມອີ່ມຕົວ.

- ສະເລ່ຍ
ເປີດໃຊ້ຄໍາແນະນໍາ "ave", ເຊິ່ງຄິດໄລ່ຄ່າສະເລ່ຍຂອງສອງທະບຽນ.

-mbased=n
ຕົວແປຂອງຂະຫນາດ n bytes ຫຼືນ້ອຍກວ່າຈະຖືກຈັດໃສ່ໃນພາກ ".based" ໂດຍ
ຄ່າເລີ່ມຕົ້ນ. ຕົວແປພື້ນຖານໃຊ້ການລົງທະບຽນ $tp ເປັນການລົງທະບຽນພື້ນຖານ, ແລະມີ
ຈໍາກັດ 128-byte ກັບພາກສ່ວນ ".based".

- ບິດ
ເປີດໃຊ້ຄໍາແນະນໍາການປະຕິບັດບິດ - bit test ("btstm"), set ("bsetm"), ຊັດເຈນ
("bclrm"), invert ("bnotm"), ແລະ test-and-set ("tas").

-mc=ຊື່
ເລືອກວ່າຂໍ້ມູນຄົງທີ່ຂອງພາກສ່ວນໃດຈະຖືກວາງໄວ້ໃນ. ຊື່ ອາດຈະເປັນ "ຂະຫນາດນ້ອຍ", "ໃກ້", ຫຼື
"ໄກ".

-mclip
ເປີດໃຊ້ຄໍາແນະນໍາ "clip". ໃຫ້ສັງເກດວ່າ "-mclip" ບໍ່ເປັນປະໂຫຍດເວັ້ນເສຍແຕ່ວ່າທ່ານຍັງ
ໃຫ້ "-mminmax".

-mconfig=ຊື່
ເລືອກໜຶ່ງໃນການຕັ້ງຄ່າຫຼັກຂອງການກໍ່ສ້າງ. ແຕ່ລະຊິບ MeP ມີຫນຶ່ງຫຼືຫຼາຍກວ່ານັ້ນ
ໂມດູນໃນມັນ; ແຕ່ລະໂມດູນມີ CPU ຫຼັກ ແລະຫຼາກຫຼາຍຂອງ coprocessors, ທາງເລືອກ
ຄໍາແນະນໍາ, ແລະອຸປະກອນຕໍ່ພ່ວງ. ເຄື່ອງມື "MeP-Integrator", ບໍ່ແມ່ນສ່ວນຫນຶ່ງຂອງ GCC, ສະຫນອງ
ການຕັ້ງຄ່າເຫຼົ່ານີ້ໂດຍຜ່ານທາງເລືອກນີ້; ການນໍາໃຊ້ທາງເລືອກນີ້ແມ່ນຄືກັນກັບການນໍາໃຊ້ທັງຫມົດ
ຕົວເລືອກແຖວຄໍາສັ່ງທີ່ສອດຄ້ອງກັນ. ການຕັ້ງຄ່າເລີ່ມຕົ້ນແມ່ນ "ຄ່າເລີ່ມຕົ້ນ".

-mcop
ເປີດໃຊ້ຄໍາແນະນໍາຂອງຕົວປະມວນຜົນ. ໂດຍຄ່າເລີ່ມຕົ້ນ, ນີ້ແມ່ນຕົວປະມວນຜົນ 32-bit. ຫມາຍ​ເຫດ​
ປົກກະຕິແລ້ວ coprocessor ຈະຖືກເປີດໃຊ້ຜ່ານຕົວເລືອກ "-mconfig=".

-mcop32
ເປີດໃຊ້ຄໍາແນະນໍາຂອງ coprocessor 32-bit.

-mcop64
ເປີດໃຊ້ຄໍາແນະນໍາຂອງ coprocessor 64-bit.

-mivc2
ເປີດໃຊ້ການກຳນົດເວລາ IVC2. IVC2 ເປັນຕົວປະມວນຜົນ VLIW 64-ບິດ.

-mdc
ເຮັດໃຫ້ຕົວແປຄົງທີ່ຖືກວາງໄວ້ໃນພາກ ". ໃກ້".

-mdiv
ເປີດໃຊ້ຄໍາແນະນໍາ "div" ແລະ "divu".

-ເມບ
ສ້າງລະຫັດ big-endian.

-mel
ສ້າງລະຫັດ little-endian.

-mio-volatile
ບອກຜູ້ລວບລວມຂໍ້ມູນວ່າຕົວແປໃດໆທີ່ມີເຄື່ອງຫມາຍ "io" ຈະເປັນ
ຖືວ່າມີຄວາມຜັນຜວນ.

-ml ເຮັດໃຫ້ຕົວແປຖືກມອບໝາຍໃຫ້ພາກສ່ວນ ".far" ໂດຍຄ່າເລີ່ມຕົ້ນ.

-mleaz
ເປີດໃຊ້ຄໍາແນະນໍາ "leadz" (leading zero).

-ມມ ເຮັດໃຫ້ຕົວແປຖືກມອບໝາຍໃຫ້ພາກສ່ວນ ". ໃກ້" ໂດຍຄ່າເລີ່ມຕົ້ນ.

-mminmax
ເປີດໃຊ້ຄໍາແນະນໍາ "min" ແລະ "max".

- mmult
ເປີດໃຊ້ຄຳແນະນຳການຄູນ ແລະຄູນສະສົມ.

-mno-opts
ປິດການນຳໃຊ້ຄຳແນະນຳທາງເລືອກທັງໝົດທີ່ເປີດໃຊ້ໂດຍ "-mall-opts".

-mrepeat
ເປີດໃຊ້ຄຳສັ່ງ "ເຮັດຊ້ຳ" ແລະ "ເຮັດຊ້ຳ", ນຳໃຊ້ສຳລັບການ looping ຕ່ຳ.

-ນາງ​ສາວ ເຮັດໃຫ້ຕົວແປທັງໝົດເປັນຄ່າເລີ່ມຕົ້ນໄປຫາພາກສ່ວນ ".tiny". ໃຫ້ສັງເກດວ່າມີ a
65536-byte ຈໍາກັດໃນພາກນີ້. ການເຂົ້າເຖິງຕົວແປເຫຼົ່ານີ້ໃຊ້ພື້ນຖານ %gp
ລົງທະບຽນ.

-msatur
ເປີດໃຊ້ຄໍາແນະນໍາການອີ່ມຕົວ. ໃຫ້ສັງເກດວ່າ compiler ບໍ່ໄດ້ປະຈຸບັນ
ສ້າງຕົວມັນເອງ, ແຕ່ທາງເລືອກນີ້ແມ່ນລວມເຂົ້າກັນໄດ້ກັບເຄື່ອງມືອື່ນໆ,
ເຊັ່ນ "ເປັນ".

-msdram
ເຊື່ອມຕໍ່ເວລາແລ່ນທີ່ອີງໃສ່ SDRAM ແທນການແລ່ນຕາມ ROM ເລີ່ມຕົ້ນ.

- ຊິມ
ເຊື່ອມຕໍ່ຫ້ອງສະໝຸດເວລາແລ່ນເຄື່ອງຈຳລອງ.

-msimnovec
ເຊື່ອມຕໍ່ຫ້ອງສະຫມຸດ runtime simulator, ບໍ່ລວມສະຫນັບສະຫນູນໃນຕົວສໍາລັບການປັບແລະ
ການຍົກເວັ້ນ vectors ແລະຕາຕະລາງ.

-mtf
ເຮັດໃຫ້ຟັງຊັນທັງໝົດເປັນຄ່າເລີ່ມຕົ້ນໄປຫາພາກສ່ວນ ".far". ໂດຍບໍ່ມີທາງເລືອກນີ້, ຫນ້າທີ່
ຄ່າເລີ່ມຕົ້ນໄປຫາພາກສ່ວນ ". near".

-mtiny=n
ຕົວແປທີ່ເປັນ n bytes ຫຼືນ້ອຍກວ່າຈະຖືກຈັດສັນໃຫ້ກັບພາກສ່ວນ ".tiny". ເຫຼົ່ານີ້
ຕົວແປໃຊ້ການລົງທະບຽນພື້ນຖານ $gp. ຄ່າເລີ່ມຕົ້ນສໍາລັບຕົວເລືອກນີ້ແມ່ນ 4, ແຕ່ສັງເກດວ່າ
ມັນມີຂອບເຂດຈໍາກັດ 65536 ໄບໄບຕໍ່ສ່ວນ ".tiny".

MicroBlaze ທາງເລືອກໃນການ

-msoft-float
ໃຊ້ການຈຳລອງຊອບແວສຳລັບຈຸດລອຍ (ຄ່າເລີ່ມຕົ້ນ).

-mhard-float
ໃຊ້ຄໍາແນະນໍາຈຸດລອຍຂອງຮາດແວ.

-mmmcpy
ຢ່າເພີ່ມປະສິດທິພາບການເຄື່ອນໄຫວບລັອກ, ໃຊ້ "memcpy".

-mno-clearbss
ຕົວເລືອກນີ້ຖືກປະຕິເສດ. ໃຊ້ -fno-zero-initialized-in-bss ແທນທີ່ຈະເປັນ.

-mcpu=cpu-type
ໃຊ້ຄຸນສົມບັດ ແລະລະຫັດກຳນົດເວລາສຳລັບ CPU ທີ່ໃຫ້ມາ. ຄ່າທີ່ຮອງຮັບແມ່ນຢູ່ໃນຮູບແບບ
vX.YY.Z, ບ່ອນທີ່ X ເປັນ​ສະ​ບັບ​ສໍາ​ຄັນ​, YY ແມ່ນ​ສະ​ບັບ​ທີ່​ເປັນ​ການ​ຄ້າ​ຫນ້ອຍ​, ແລະ​ Z ແມ່ນຄວາມເຂົ້າກັນໄດ້
ລະຫັດ. ຄ່າຕົວຢ່າງແມ່ນ v3.00.a, v4.00.b, v5.00.a, v5.00.b, v5.00.b, v6.00.a.

-mxl-soft-mul
ໃຊ້ຊອບແວ multiply emulation (ຄ່າເລີ່ມຕົ້ນ).

-mxl-soft-div
ໃຊ້ການຈຳລອງຊອບແວສຳລັບການແບ່ງ (ຄ່າເລີ່ມຕົ້ນ).

-mxl-barrel-shift
ໃຊ້ຕົວປ່ຽນຖັງຮາດແວ.

-mxl-pattern-ປຽບທຽບ
ໃຊ້ຮູບແບບການປຽບທຽບຄໍາແນະນໍາ.

-msmall-divides
ໃຊ້ການເພີ່ມປະສິດທິພາບການຊອກຫາຕາຕະລາງສໍາລັບການຫານຈໍານວນເຕັມທີ່ລົງລາຍເຊັນຂະຫນາດນ້ອຍ.

-mxl-stack-ກວດ
ຕົວເລືອກນີ້ຖືກປະຕິເສດ. ໃຊ້ -fstack-check ແທນ.

-mxl-gp-opt
ໃຊ້ພາກສ່ວນ GP relative sdata/sbss.

-mxl-ຄູນ-ສູງ
ໃຊ້ຄໍາແນະນໍາສູງຄູນສໍາລັບສ່ວນສູງຂອງ 32x32 ຄູນ.

-mxl-float-ແປງ
ໃຊ້ຄໍາແນະນໍາການແປງຈຸດລອຍຮາດແວ.

-mxl-float-sqrt
ໃຊ້ການສອນຮາກສີ່ຫຼ່ຽມຂອງຮາດແວ.

-mxl-mode-app-model
ເລືອກຮູບແບບຄໍາຮ້ອງສະຫມັກ app-model. ຮູບແບບທີ່ຖືກຕ້ອງແມ່ນ

ປະຕິບັດໄດ້
ປະຕິບັດໄດ້ຕາມປົກກະຕິ (ຄ່າເລີ່ມຕົ້ນ), ໃຊ້ລະຫັດເລີ່ມຕົ້ນ crt0.o.

xmdstub
ສໍາ​ລັບ​ການ​ນໍາ​ໃຊ້​ກັບ Xilinx Microprocessor Debugger (XMD​) ຊອບ​ແວ​ທີ່​ອີງ​ໃສ່​ການ​ແກ້​ໄຂ​ບັນ​ຫາ intrusive​
ຕົວແທນເອີ້ນວ່າ xmdstub. ນີ້ໃຊ້ໄຟລ໌ເລີ່ມຕົ້ນ crt1.o ແລະກໍານົດທີ່ຢູ່ເລີ່ມຕົ້ນຂອງ
ໂຄງ​ການ​ທີ່​ຈະ 0x800​.

bootstrap
ສໍາລັບແອັບພລິເຄຊັນທີ່ໂຫລດໂດຍໃຊ້ bootloader. ຮູບແບບນີ້ໃຊ້ໄຟລ໌ເລີ່ມຕົ້ນ
crt2.o ເຊິ່ງບໍ່ມີຕົວຈັດການ vector reset processor. ນີ້ແມ່ນເຫມາະສົມ
ສໍາ​ລັບ​ການ​ໂອນ​ການ​ຄວບ​ຄຸມ​ກ່ຽວ​ກັບ​ການ​ປັບ​ໂຮງ​ງານ​ຜະ​ລິດ​ເປັນ bootloader ແທນ​ທີ່​ຈະ​ເປັນ​
ຄໍາຮ້ອງສະຫມັກ.

novectors
ສໍາລັບຄໍາຮ້ອງສະຫມັກທີ່ບໍ່ຈໍາເປັນຕ້ອງມີ vectors MicroBlaze ໃດ. ທາງເລືອກນີ້
ອາດຈະເປັນປະໂຫຍດສໍາລັບແອັບພລິເຄຊັນທີ່ເຮັດວຽກຢູ່ພາຍໃນແອັບພລິເຄຊັນການຕິດຕາມ. ຮູບແບບນີ້
ການນໍາໃຊ້ crt3.o ເປັນໄຟລ໌ເລີ່ມຕົ້ນ.

ທາງເລືອກ -xl-mode-app-model ເປັນນາມແຝງທີ່ຖືກຍົກເລີກ -mxl-mode-app-model.

MIPS ທາງເລືອກໃນການ

-EB ສ້າງລະຫັດ big-endian.

- THE ສ້າງລະຫັດ little-endian. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນຂອງ mips*el-*-* ການຕັ້ງຄ່າ.

- ມີນາ=ໂຄ້ງ
ສ້າງລະຫັດທີ່ຈະດໍາເນີນການ ໂຄ້ງ, ຊຶ່ງສາມາດເປັນຊື່ຂອງ MIPS ISA ທົ່ວໄປ, ຫຼື
ຊື່ຂອງໂປເຊດເຊີສະເພາະ. ຊື່ ISA ແມ່ນ: ໄມ1, ໄມ2, ໄມ3, ໄມ4,
ໄມ32, mips32r2, ໄມ64 ແລະ mips64r2. ຊື່ໂປເຊດເຊີແມ່ນ: 4kc, 4km, 4kp, 4ksc,
4 ເຄ, 4 ເຄມ, 4 ແກ້ວ, 4ksd, 5kc, 5kf, 20kc, 24kc, 24kf2_1, 24kf1_1, 24 ເຄ, 24kef2_1,
24kef1_1, 34kc, 34kf2_1, 34kf1_1, 74kc, 74kf2_1, 74kf1_1, 74kf3_2, 1004kc, 1004kf2_1,
1004kf1_1, loongson2e, loongson2f, loongson3a, M4K, octeon, octeon+, octeon2, orion,
r2000, r3000, r3900, r4000, r4400, r4600, r4650, r6000, r8000, rm7000, rm9000, r10000,
r12000, r14000, r16000, sb1, sr71000, vr4100, vr4111, vr4120, vr4130, vr4300, vr5000,
vr5400, vr5500 ແລະ xlr. ມູນຄ່າພິເສດ ຈາກ-abi ເລືອກ​ທີ່​ເຫມາະ​ສົມ​ທີ່​ສຸດ​
ຖາປັດຕະຍະສໍາລັບ ABI ທີ່ເລືອກ (ນັ້ນແມ່ນ, ໄມ1 ສໍາລັບ 32-bit ABIs ແລະ ໄມ3 ສໍາລັບ 64-bit
ABIs).

Native Linux/GNU ແລະ IRIX toolchains ຍັງສະຫນັບສະຫນູນມູນຄ່າ native, ເຊິ່ງເລືອກ
ທາງເລືອກສະຖາປັດຕະທີ່ດີທີ່ສຸດສໍາລັບໂຮງງານຜະລິດເຈົ້າພາບ. -march=native ບໍ່ມີຜົນຫຍັງຖ້າ GCC
ບໍ່ຮູ້ຈັກໂຮງງານຜະລິດ.

ໃນຊື່ໂປເຊດເຊີ, ສຸດທ້າຍ 000 ສາມາດຫຍໍ້ເປັນ k (ຍົກ​ຕົວ​ຢ່າງ, - ມີນາ=r2k).
ຄໍານໍາຫນ້າແມ່ນທາງເລືອກ, ແລະ vr ອາດຈະຂຽນ r.

ຊື່ຂອງແບບຟອມ nf2_1 ອ້າງເຖິງໂປເຊດເຊີທີ່ມີ FPUs ກໍານົດເວລາເຄິ່ງຫນຶ່ງຂອງອັດຕາ
ຫຼັກ, ຊື່ຂອງແບບຟອມ nf1_1 ອ້າງອີງເຖິງໂປເຊດເຊີທີ່ມີ FPUs clocked ໃນອັດຕາດຽວກັນ
ເປັນຫຼັກ, ແລະຊື່ຂອງແບບຟອມ nf3_2 ອ້າງອີງເຖິງໂປເຊດເຊີທີ່ມີ FPUs clocked ອັດຕາສ່ວນ
ຂອງ 3:2 ກ່ຽວກັບຫຼັກ. ສໍາລັບເຫດຜົນຄວາມເຂົ້າກັນໄດ້, nf ໄດ້ຮັບການຍອມຮັບເປັນ
ຄໍາສັບຄ້າຍຄື nf2_1 ໃນຂະນະທີ່ nx ແລະ bfx ຖືກຍອມຮັບເປັນຄໍາສັບຄ້າຍຄື nf1_1.

GCC ກໍານົດສອງ macro ໂດຍອີງໃສ່ມູນຄ່າຂອງທາງເລືອກນີ້. ທໍາອິດແມ່ນ _MIPS_ARCH,
ເຊິ່ງໃຫ້ຊື່ຂອງສະຖາປັດຕະຍະກຳເປົ້າໝາຍ, ເປັນສະຕຣິງ. ອັນທີສອງມີແບບຟອມ
_MIPS_ARCH_ຟູ, ບ່ອນທີ່ ຟູ ແມ່ນມູນຄ່າຕົວພິມໃຫຍ່ຂອງ _MIPS_ARCHທີ່ຢູ່ ຍົກ​ຕົວ​ຢ່າງ,
- ມີນາ=r2000 ຈະຕັ້ງ _MIPS_ARCH to "r2000" ແລະກໍານົດມະຫາພາກ _MIPS_ARCH_R2000.

ຫມາຍເຫດວ່າ _MIPS_ARCH macro ໃຊ້ຊື່ໂປເຊດເຊີທີ່ໄດ້ກ່າວມາຂ້າງເທິງ. ໃນຄໍາສັບຕ່າງໆອື່ນໆ,
ມັນຈະມີຄໍານໍາຫນ້າເຕັມແລະຈະບໍ່ຫຍໍ້ 000 as k. ໃນກໍລະນີຂອງ ຈາກ-
ຊ່ວຍເຫລືອ, ມະຫາພາກຕັ້ງຊື່ສະຖາປັດຕະຍະກຳທີ່ແກ້ໄຂແລ້ວ (ທັງ "mips1" or "mips3"). ມັນຊື່
ສະຖາປັດຕະຍະ ກຳ ເລີ່ມຕົ້ນເມື່ອບໍ່ມີ - ມີນາ ທາງເລືອກແມ່ນໃຫ້.

-mtune=ໂຄ້ງ
ເພີ່ມປະສິດທິພາບໃຫ້ ໂຄ້ງ. ໃນບັນດາສິ່ງອື່ນໆ, ທາງເລືອກນີ້ຄວບຄຸມວິທີການຄໍາແນະນໍາ
ກໍານົດເວລາ, ແລະຄ່າໃຊ້ຈ່າຍທີ່ຮັບຮູ້ຂອງການດໍາເນີນງານເລກເລກ. ບັນຊີລາຍຊື່ຂອງ ໂຄ້ງ ຄ່າ
ແມ່ນຄືກັນກັບ ສຳ ລັບ - ມີນາ.

ເມື່ອຕົວເລືອກນີ້ບໍ່ໄດ້ໃຊ້, GCC ຈະເພີ່ມປະສິດທິພາບສໍາລັບໂປເຊດເຊີທີ່ລະບຸໄວ້ໂດຍ - ມີນາ.
ໂດຍການນໍາໃຊ້ - ມີນາ ແລະ -mtune ຮ່ວມກັນ, ມັນເປັນໄປໄດ້ທີ່ຈະສ້າງລະຫັດທີ່ຈະດໍາເນີນການ
ຄອບຄົວຂອງໂປເຊດເຊີ, ແຕ່ເພີ່ມປະສິດທິພາບລະຫັດສໍາລັບສະມາຊິກສະເພາະໃດຫນຶ່ງ
ຄອບຄົວ.

-mtune ກໍານົດ macro ໄດ້ _MIPS_TUNE ແລະ _MIPS_TUNE_ຟູ, ເຊິ່ງເຮັດວຽກໃນລັກສະນະດຽວກັນກັບ
ໄດ້ - ມີນາ ທີ່ໄດ້ອະທິບາຍຂ້າງເທິງ.

-mips1
ເທົ່າກັບ -march=mips1.

-mips2
ເທົ່າກັບ -march=mips2.

-mips3
ເທົ່າກັບ -march=mips3.

-mips4
ເທົ່າກັບ -march=mips4.

-mips32
ເທົ່າກັບ -march=mips32.

-mips32r2
ເທົ່າກັບ -march=mips32r2.

-mips64
ເທົ່າກັບ -march=mips64.

-mips64r2
ເທົ່າກັບ -march=mips64r2.

-mips16
-mno-mips16
ສ້າງ (ບໍ່ສ້າງ) ລະຫັດ MIPS16. ຖ້າ GCC ກໍາລັງຕັ້ງເປົ້າໝາຍໃສ່ MIPS32 ຫຼື MIPS64
ສະຖາປັດຕະຍະກໍາ, ມັນຈະນໍາໃຊ້ MIPS16e ASE.

ການຜະລິດລະຫັດ MIPS16 ຍັງສາມາດຄວບຄຸມບົນພື້ນຖານການທໍາງານໂດຍວິທີການ
"mips16" ແລະ "nomips16" ຄຸນລັກສະນະ.

-mflip-mips16
ສ້າງລະຫັດ MIPS16 ໃນຟັງຊັນສະຫຼັບ. ທາງເລືອກນີ້ແມ່ນສະຫນອງໃຫ້ສໍາລັບການຖົດຖອຍ
ການ​ທົດ​ສອບ​ການ​ຜະ​ລິດ​ລະ​ຫັດ MIPS16 / ບໍ່​ແມ່ນ MIPS16 ປະ​ສົມ​, ແລະ​ບໍ່​ໄດ້​ມີ​ຈຸດ​ປະ​ສົງ​ສໍາ​ລັບ​ການ​ທໍາ​ມະ​ດາ​
ໃຊ້ໃນການລວບລວມລະຫັດຜູ້ໃຊ້.

-minterlink-mips16
-mno-interlink-mips16
ຮຽກ​ຮ້ອງ​ໃຫ້ (ບໍ່​ຕ້ອງ​ການ) ລະ​ຫັດ​ທີ່​ບໍ່​ແມ່ນ MIPS16 ເປັນ​ການ​ເຊື່ອມ​ຕໍ່​ທີ່​ເຫມາະ​ສົມ​ກັບ​ລະ​ຫັດ MIPS16.

ຕົວຢ່າງ, ລະຫັດທີ່ບໍ່ແມ່ນ MIPS16 ບໍ່ສາມາດໄປຫາລະຫັດ MIPS16 ໂດຍກົງໄດ້; ມັນຕ້ອງໃຊ້ a
ໂທຫາຫຼືກະໂດດທາງອ້ອມ. -minterlink-mips16 ດັ່ງນັ້ນຈຶ່ງປິດການໂດດໂດຍກົງເວັ້ນເສຍແຕ່
GCC ຮູ້ວ່າເປົ້າຫມາຍຂອງການກະໂດດບໍ່ແມ່ນ MIPS16.

-mabi=32
-mabi=o64
-mabi=n32
-mabi=64
-mabi=ອີບີ
ສ້າງລະຫັດສໍາລັບ ABI ທີ່ໃຫ້.

ໃຫ້ສັງເກດວ່າ EABI ມີ 32-bit ແລະ 64-bit variant. GCC ປົກກະຕິສ້າງ 64-bit
ລະຫັດເມື່ອທ່ານເລືອກສະຖາປັດຕະຍະກໍາ 64-bit, ແຕ່ທ່ານສາມາດນໍາໃຊ້ -mgp32 ເພື່ອໃຫ້ໄດ້ຮັບລະຫັດ 32-bit
ແທນທີ່ຈະເປັນ.

ສໍາລັບຂໍ້ມູນກ່ຽວກັບ O64 ABI, ເບິ່ງhttp://gcc.gnu.org/projects/mipso64-abi.html>.

GCC ສະຫນັບສະຫນູນຕົວແປຂອງ o32 ABI ເຊິ່ງການລົງທະບຽນຈຸດລອຍແມ່ນ 64 ແທນທີ່ຈະ.
ກວ້າງກວ່າ 32 ບິດ. ທ່ານສາມາດເລືອກເອົາການປະສົມປະສານນີ້ກັບ -mabi=32 -mfp64. ABI ນີ້
ຂື້ນກັບ mthc1 ແລະ mfhc1 ຄໍາ​ແນະ​ນໍາ​ແລະ​ເພາະ​ສະ​ນັ້ນ​ສະ​ຫນັບ​ສະ​ຫນູນ​ພຽງ​ແຕ່​ສໍາ​ລັບ​ການ​
ໂປເຊດເຊີ MIPS32R2.

ການມອບຫມາຍລົງທະບຽນສໍາລັບການໂຕ້ຖຽງແລະຄ່າກັບຄືນຍັງຄົງຄືກັນ, ແຕ່ແຕ່ລະຄົນ
ຄ່າ scalar ແມ່ນຜ່ານຢູ່ໃນທະບຽນ 64-bit ດຽວແທນທີ່ຈະເປັນຄູ່ຂອງ 32-bit
ລົງທະບຽນ. ຕົວຢ່າງ, ຄ່າຈຸດເລື່ອນ scalar ຈະຖືກສົ່ງຄືນໃນ $f0 ເທົ່ານັ້ນ, ບໍ່ແມ່ນ a
$f0/$f1 ຄູ່. ຊຸດບັນທຶກການໂທບັນທຶກຍັງຄືກັນ, ແຕ່ທັງຫມົດ 64 bits
ຖືກບັນທືກ.

- mabicalls
-mno-abicalls
ສ້າງ (ບໍ່ສ້າງ) ລະຫັດທີ່ເຫມາະສົມສໍາລັບວັດຖຸໄດນາມິກແບບ SVR4.
- mabicalls ເປັນຄ່າເລີ່ມຕົ້ນຂອງລະບົບ SVR4.

-mshared
-mno-ແບ່ງປັນ
ສ້າງ (ບໍ່ສ້າງ) ລະຫັດທີ່ເປັນເອກະລາດຢ່າງເຕັມສ່ວນ, ແລະທີ່ສາມາດເຮັດໄດ້
ດັ່ງນັ້ນຈຶ່ງຖືກເຊື່ອມໂຍງກັບຫ້ອງສະຫມຸດຮ່ວມກັນ. ທາງເລືອກນີ້ມີຜົນກະທົບເທົ່ານັ້ນ - mabicalls.

ທັງຫມົດ - mabicalls ລະຫັດເປັນປະເພນີເປັນເອກະລາດ, ໂດຍບໍ່ສົນເລື່ອງຂອງທາງເລືອກ
ຄື -fPIC ແລະ -fpic. ຢ່າງໃດກໍຕາມ, ເປັນການຂະຫຍາຍ, GNU toolchain ອະນຸຍາດໃຫ້ປະຕິບັດໄດ້
ການນໍາໃຊ້ການເຂົ້າເຖິງຢ່າງແທ້ຈິງສໍາລັບສັນຍາລັກທີ່ຜູກມັດທ້ອງຖິ່ນ. ມັນຍັງສາມາດໃຊ້ GP ທີ່ສັ້ນກວ່າ
ລໍາດັບເບື້ອງຕົ້ນແລະສ້າງການໂທໂດຍກົງໄປຫາຫນ້າທີ່ກໍານົດທ້ອງຖິ່ນ. ນີ້
ໂຫມດຖືກເລືອກໂດຍ -mno-ແບ່ງປັນ.

-mno-ແບ່ງປັນ ແມ່ນຂຶ້ນກັບ binutils 2.16 ຫຼືສູງກວ່າແລະສ້າງວັດຖຸທີ່ສາມາດພຽງແຕ່
ເຊື່ອມຕໍ່ໂດຍຕົວເຊື່ອມຕໍ່ GNU. ຢ່າງໃດກໍຕາມ, ທາງເລືອກບໍ່ມີຜົນກະທົບ ABI ຂອງສຸດທ້າຍ
ປະຕິບັດໄດ້; ມັນມີຜົນກະທົບພຽງແຕ່ ABI ຂອງວັດຖຸທີ່ສາມາດຍ້າຍໄດ້. ການນໍາໃຊ້ -mno-ແບ່ງປັນ ຈະ
ໂດຍທົ່ວໄປແລ້ວເຮັດໃຫ້ການປະຕິບັດໄດ້ທັງນ້ອຍກວ່າ ແລະໄວກວ່າ.

-mshared ເປັນຄ່າເລີ່ມຕົ້ນ.

-mplt
-mno-plt
ສົມມຸດ (ບໍ່ສົມມຸດ) ວ່າຕົວເຊື່ອມຕໍ່ແບບຄົງທີ່ແລະແບບເຄື່ອນໄຫວສະຫນັບສະຫນູນ PLTs ແລະສໍາເນົາ
ການຍົກຍ້າຍ. ທາງເລືອກນີ້ມີຜົນກະທົບເທົ່ານັ້ນ -mno-ແບ່ງປັນ - mabicalls. ສໍາລັບ n64 ABI, ນີ້
ທາງ​ເລືອກ​ບໍ່​ມີ​ຜົນ​ກະ​ທົບ​ໂດຍ​ບໍ່​ມີ​ການ​ -msym32.

ທ່ານສາມາດເຮັດໄດ້ -mplt ຄ່າເລີ່ມຕົ້ນໂດຍການຕັ້ງຄ່າ GCC ກັບ --with-mips-plt. ຄ່າເລີ່ມຕົ້ນ
is -mno-plt ຖ້າບໍ່ດັ່ງນັ້ນ.

-mxgot
-mno-xgot
ຍົກ (ບໍ່ຍົກ) ຂໍ້ຈໍາກັດປົກກະຕິກ່ຽວກັບຂະຫນາດຂອງຕາຕະລາງຊົດເຊີຍທົ່ວໂລກ.

ໂດຍປົກກະຕິ GCC ໃຊ້ຄໍາແນະນໍາດຽວເພື່ອໂຫລດຄ່າຈາກ GOT. ໃນຂະນະທີ່ນີ້ແມ່ນ
ຂ້ອນຂ້າງມີປະສິດທິພາບ, ມັນຈະເຮັດວຽກພຽງແຕ່ຖ້າ GOT ມີຂະຫນາດນ້ອຍກວ່າປະມານ 64k.
ສິ່ງໃດທີ່ໃຫຍ່ກວ່າຈະເຮັດໃຫ້ຕົວເຊື່ອມຕໍ່ລາຍງານຂໍ້ຜິດພາດເຊັ່ນ:

ການຍົກຍ້າຍຖືກຕັດໃຫ້ພໍດີ: R_MIPS_GOT16 foobar

ຖ້າສິ່ງນີ້ເກີດຂື້ນ, ທ່ານຄວນລວບລວມລະຫັດຂອງທ່ານກັບ -mxgot. ຫຼັງຈາກນັ້ນມັນຄວນຈະເຮັດວຽກຮ່ວມກັບ
GOTs ຂະຫນາດໃຫຍ່ຫຼາຍ, ເຖິງແມ່ນວ່າມັນຈະມີປະສິດທິພາບຫນ້ອຍ, ເນື່ອງຈາກວ່າມັນຈະໃຊ້ເວລາສາມ
ຄໍາແນະນໍາເພື່ອດຶງມູນຄ່າຂອງສັນຍາລັກທົ່ວໂລກ.

ໃຫ້ສັງເກດວ່າບາງຕົວເຊື່ອມຕໍ່ສາມາດສ້າງ GOTs ຫຼາຍ. ຖ້າທ່ານມີຕົວເຊື່ອມຕໍ່ດັ່ງກ່າວ, ທ່ານ
ຄວນໃຊ້ພຽງແຕ່ -mxgot ເມື່ອໄຟລ໌ວັດຖຸດຽວເຂົ້າເຖິງຫຼາຍກ່ວາ 64k
ມູນຄ່າຂອງລາຍການ GOT. ໜ້ອຍຫຼາຍເຮັດ.

ທາງເລືອກເຫຼົ່ານີ້ບໍ່ມີຜົນໃດໆເວັ້ນເສຍແຕ່ GCC ຈະສ້າງລະຫັດເອກະລາດຕໍາແຫນ່ງ.

-mgp32
ສົມມຸດວ່າການລົງທະບຽນຈຸດປະສົງທົ່ວໄປແມ່ນກວ້າງ 32 ບິດ.

-mgp64
ສົມມຸດວ່າການລົງທະບຽນຈຸດປະສົງທົ່ວໄປແມ່ນກວ້າງ 64 ບິດ.

-mfp32
ສົມມຸດວ່າການລົງທະບຽນຈຸດລອຍແມ່ນກວ້າງ 32 ບິດ.

-mfp64
ສົມມຸດວ່າການລົງທະບຽນຈຸດລອຍແມ່ນກວ້າງ 64 ບິດ.

-mhard-float
ໃຊ້ຄໍາແນະນໍາຕົວປະມວນຜົນຈຸດລອຍ.

-msoft-float
ຢ່າໃຊ້ຄຳແນະນຳຕົວປະມວນຜົນແບບຈຸດລອຍ. ປະຕິບັດຈຸດທີ່ເລື່ອນໄດ້
ການ​ຄິດ​ໄລ່​ໂດຍ​ໃຊ້​ການ​ໂທ​ຫ້ອງ​ສະ​ຫມຸດ​ແທນ​ທີ່​ຈະ​.

-msingle-float
ສົມມຸດວ່າຕົວປະມວນຜົນຈຸດທີ່ລອຍຕົວພຽງແຕ່ສະຫນັບສະຫນູນການດໍາເນີນງານຄວາມຊັດເຈນດຽວເທົ່ານັ້ນ.

-mdouble-float
ສົມມຸດວ່າຕົວປະມວນຜົນຈຸດທີ່ລອຍຕົວຮອງຮັບການດຳເນີນການທີ່ມີຄວາມຊັດເຈນສອງເທົ່າ. ນີ້
ເປັນຄ່າເລີ່ມຕົ້ນ.

-mllsc
-mno-llsc
ໃຊ້ (ຫ້າມໃຊ້) ll, sc, ແລະ ຊິງ ຄໍາແນະນໍາເພື່ອປະຕິບັດຫນ່ວຍຄວາມຈໍາປະລໍາມະນູໃນຕົວ
ຫນ້າທີ່. ເມື່ອທັງສອງທາງເລືອກບໍ່ຖືກລະບຸ, GCC ຈະໃຊ້ຄໍາແນະນໍາຖ້າຫາກວ່າ
ສະຖາປັດຕະຍະກໍາເປົ້າຫມາຍສະຫນັບສະຫນູນພວກເຂົາ.

-mllsc ເປັນປະໂຫຍດຖ້າຫາກວ່າສະພາບແວດລ້ອມ runtime ສາມາດ emulate ຄໍາແນະນໍາແລະ -mno-llsc
ສາມາດເປັນປະໂຫຍດໃນເວລາທີ່ລວບລວມສໍາລັບ ISAs ທີ່ບໍ່ແມ່ນມາດຕະຖານ. ທ່ານ​ສາ​ມາດ​ເຮັດ​ໃຫ້​ທາງ​ເລືອກ​ໃດ​ຫນຶ່ງ​
ຄ່າເລີ່ມຕົ້ນໂດຍການຕັ້ງຄ່າ GCC ກັບ --with-llsc ແລະ -- without-llsc ຕາມລໍາດັບ.
--with-llsc ແມ່ນຄ່າເລີ່ມຕົ້ນສໍາລັບບາງການຕັ້ງຄ່າ; ເບິ່ງເອກະສານການຕິດຕັ້ງ
ສໍາລັບລາຍລະອຽດ.

-mdsp
-mno-dsp
ໃຊ້ (ບໍ່ໃຊ້) ການແກ້ໄຂ 1 ຂອງ MIPS DSP ASE.
ຕົວເລືອກນີ້ກໍານົດ macro preprocessor __mips_dsp. ມັນຍັງກໍານົດ
__mips_dsp_rev to 1

-MDSPR2
-mno-dspr2
ໃຊ້ (ບໍ່ໃຊ້) ການແກ້ໄຂ 2 ຂອງ MIPS DSP ASE.
ຕົວເລືອກນີ້ກໍານົດ macro preprocessor __mips_dsp ແລະ __mips_dspr2. ມັນຍັງ
ກໍານົດ __mips_dsp_rev to 2

-msmartmips
-mno-smartmips
ໃຊ້ (ບໍ່ໃຊ້) MIPS SmartMIPS ASE.

- ຄູ່ດຽວ
-mno-paired-single
ໃຊ້ (ຫ້າມໃຊ້) ຄູ່ຄູ່-ຄຳແນະນຳຈຸດລອຍຕົວດຽວ.
ທາງ​ເລືອກ​ນີ້​ຮຽກ​ຮ້ອງ​ໃຫ້​ມີ​ການ​ສະ​ຫນັບ​ສະ​ຫນູນ​ຈຸດ​ລອຍ​ຮາດ​ແວ​ທີ່​ຈະ​ໄດ້​ຮັບ​ການ​ເປີດ​ໃຊ້​ງານ​.

-mdmx
-mno-mdmx
ໃຊ້ (ບໍ່ໃຊ້) ຄໍາແນະນໍາການຂະຫຍາຍສື່ດິຈິຕອລ MIPS. ທາງເລືອກນີ້ພຽງແຕ່ສາມາດເປັນ
ໃຊ້ໃນເວລາທີ່ສ້າງລະຫັດ 64-bit ແລະຮຽກຮ້ອງໃຫ້ມີການສະຫນັບສະຫນູນຈຸດເລື່ອນຮາດແວທີ່ຈະເປັນ
enabled

-mips3d
-mno-mips3d
ໃຊ້ (ບໍ່ໃຊ້) MIPS-3D ASE. ທາງເລືອກ -mips3d implies - ຄູ່ດຽວ.

-mmt
-mno-mt
ໃຊ້ (ບໍ່ໃຊ້) MT Multithreading ຄໍາແນະນໍາ.

-mlong64
ບັງຄັບປະເພດ "ຍາວ" ໃຫ້ກວ້າງ 64 ບິດ. ເບິ່ງ -mlong32 ສໍາລັບຄໍາອະທິບາຍຂອງຄ່າເລີ່ມຕົ້ນ
ແລະວິທີການກໍານົດຂະຫນາດຕົວຊີ້.

-mlong32
ບັງຄັບ "ຍາວ", "int", ແລະປະເພດຕົວຊີ້ໃຫ້ກວ້າງ 32 ບິດ.

ຂະຫນາດເລີ່ມຕົ້ນຂອງ "int", "long"s ແລະ pointers ແມ່ນຂຶ້ນກັບ ABI. ທັງໝົດ
ABIs ທີ່ຮອງຮັບໃຊ້ 32-bit "int"s. n64 ABI ໃຊ້ 64-bit "ຍາວ", ເຊັ່ນດຽວກັນກັບ 64-bit
EABI; ຄົນອື່ນໃຊ້ 32-bit "ຍາວ"s. ຕົວຊີ້ແມ່ນຂະຫນາດດຽວກັນກັບ "ຍາວ", ຫຼື
ຂະ​ຫນາດ​ດຽວ​ກັນ​ກັບ​ການ​ຈົດ​ທະ​ບຽນ​ຈໍາ​ນວນ​ເຕັມ​, ອັນ​ໃດ​ກໍ​ຕາມ​ທີ່​ນ້ອຍ​ກວ່າ​.

-msym32
-mno-sym32
ສົມມຸດ (ບໍ່ສົມມຸດ) ວ່າສັນຍາລັກທັງໝົດມີຄ່າ 32-ບິດ, ໂດຍບໍ່ຄໍານຶງເຖິງສິ່ງທີ່ເລືອກ.
ABI. ທາງເລືອກນີ້ແມ່ນເປັນປະໂຫຍດໃນການປະສົມປະສານກັບ -mabi=64 ແລະ -mno-abicalls ເນື່ອງ​ຈາກ​ວ່າ​ມັນ
ອະນຸຍາດໃຫ້ GCC ສ້າງການອ້າງອີງທີ່ສັ້ນກວ່າ ແລະໄວກວ່າຕໍ່ກັບທີ່ຢູ່ສັນຍາລັກ.

-G num
ເອົາຄໍານິຍາມຂອງຂໍ້ມູນພາຍນອກທີ່ເບິ່ງເຫັນໄດ້ໃນສ່ວນຂໍ້ມູນຂະຫນາດນ້ອຍຖ້າຂໍ້ມູນນັ້ນບໍ່ແມ່ນ
ຂະ​ຫນາດ​ໃຫຍ່​ກວ່າ num ໄບຕ໌. GCC ຫຼັງຈາກນັ້ນສາມາດເຂົ້າເຖິງຂໍ້ມູນໄດ້ຢ່າງມີປະສິດທິພາບ; ເບິ່ງ -mgpopt ສໍາລັບການ
ລາຍລະອຽດ.

ຄ່າເລີ່ມຕົ້ນ -G ທາງເລືອກແມ່ນຂຶ້ນກັບການຕັ້ງຄ່າ.

-mlocal-sdata
-mno-local-sdata
ຂະຫຍາຍ (ບໍ່ຂະຫຍາຍ) ໄດ້ -G ພຶດຕິກໍາກັບຂໍ້ມູນທ້ອງຖິ່ນເຊັ່ນດຽວກັນ, ເຊັ່ນຕົວແປຄົງທີ່
ໃນ C. -mlocal-sdata ເປັນຄ່າເລີ່ມຕົ້ນຂອງການຕັ້ງຄ່າທັງໝົດ.

ຖ້າຕົວເຊື່ອມຕໍ່ຈົ່ມວ່າແອັບພລິເຄຊັນກໍາລັງໃຊ້ຂໍ້ມູນຂະຫນາດນ້ອຍເກີນໄປ, ທ່ານອາດຈະ
ຕ້ອງການພະຍາຍາມສ້າງພາກສ່ວນປະສິດທິພາບຫນ້ອຍທີ່ສໍາຄັນກັບ -mno-local-sdataທີ່ຢູ່ ທ່ານ
ອາດຈະຕ້ອງການສ້າງຫ້ອງສະຫມຸດຂະຫນາດໃຫຍ່ທີ່ມີ -mno-local-sdata, ດັ່ງນັ້ນຫ້ອງສະຫມຸດ
ອອກຈາກຫ້ອງຫຼາຍສໍາລັບໂຄງການຕົ້ນຕໍ.

-mextern-sdata
-mno-extern-sdata
ສົມມຸດ (ບໍ່ສົມມຸດ) ວ່າຂໍ້ມູນທີ່ກໍານົດພາຍນອກຈະຢູ່ໃນສ່ວນຂໍ້ມູນຂະຫນາດນ້ອຍຖ້າ
ຂໍ້ມູນນັ້ນແມ່ນຢູ່ໃນ -G ຂີດ ຈຳ ກັດ. -mextern-sdata ແມ່ນຄ່າເລີ່ມຕົ້ນສໍາລັບທຸກຄົນ
ການຕັ້ງຄ່າ.

ຖ້າທ່ານລວບລວມໂມດູນ Mod ກັບ -mextern-sdata -G num -mgpopt, ແລະ Mod ອ້າງອີງ ກ
ຕົວແປ ວາ ນັ້ນບໍ່ໃຫຍ່ກວ່າ num bytes, ທ່ານຕ້ອງໃຫ້ແນ່ໃຈວ່າ ວາ ແມ່ນຖືກຈັດໃສ່
ໃນ​ພາກ​ສ່ວນ​ຂໍ້​ມູນ​ຂະ​ຫນາດ​ນ້ອຍ​. ຖ້າ ວາ ຖືກກໍານົດໂດຍໂມດູນອື່ນ, ທ່ານຕ້ອງລວບລວມ
ໂມດູນທີ່ມີສູງພຽງພໍ -G ການ​ຕັ້ງ​ຄ່າ​ຫຼື​ຄັດ​ຕິດ​ຄຸນ​ລັກ​ສະ​ນະ "ພາກ​ສ່ວນ​" ກັບ​ ວາ's
ຄໍານິຍາມ. ຖ້າ ວາ ແມ່ນທົ່ວໄປ, ທ່ານຕ້ອງເຊື່ອມຕໍ່ຄໍາຮ້ອງສະຫມັກທີ່ມີລະດັບສູງພຽງພໍ -G
ຕັ້ງ.

ວິທີທີ່ງ່າຍທີ່ສຸດຂອງການຕອບສະຫນອງຂໍ້ຈໍາກັດເຫຼົ່ານີ້ແມ່ນການລວບລວມແລະເຊື່ອມຕໍ່ທຸກໂມດູນ
ກັບດຽວກັນ -G ທາງເລືອກ. ຢ່າງໃດກໍຕາມ, ທ່ານອາດຈະຕ້ອງການສ້າງຫ້ອງສະຫມຸດທີ່ສະຫນັບສະຫນູນ
ຂໍ້​ຈໍາ​ກັດ​ຂະ​ຫນາດ​ນ້ອຍ​ທີ່​ແຕກ​ຕ່າງ​ກັນ​ຈໍາ​ນວນ​ຫນຶ່ງ​. ທ່ານສາມາດເຮັດໄດ້ໂດຍການລວບລວມຫ້ອງສະຫມຸດທີ່ມີ
ສະ​ຫນັບ​ສະ​ຫນູນ​ສູງ​ສຸດ​ -G ການ​ຕັ້ງ​ຄ່າ​ແລະ​ນອກ​ຈາກ​ນັ້ນ​ການ​ນໍາ​ໃຊ້​ -mno-extern-sdata ໃຫ້ຢຸດເຊົາການ
ຫ້ອງສະຫມຸດຈາກການເຮັດໃຫ້ສົມມຸດຕິຖານກ່ຽວກັບຂໍ້ມູນທີ່ກໍານົດພາຍນອກ.

-mgpopt
-mno-gpopt
ໃຊ້ (ບໍ່ໃຊ້) GP-relative accesses ສໍາລັບສັນຍາລັກທີ່ຮູ້ວ່າຢູ່ໃນຂໍ້ມູນຂະຫນາດນ້ອຍ
ພາກ; ເບິ່ງ -G, -mlocal-sdata ແລະ -mextern-sdata. -mgpopt ແມ່ນຄ່າເລີ່ມຕົ້ນສໍາລັບທຸກຄົນ
ການຕັ້ງຄ່າ.

-mno-gpopt ແມ່ນເປັນປະໂຫຍດສໍາລັບກໍລະນີທີ່ລົງທະບຽນ $gp ອາດຈະບໍ່ຖືມູນຄ່າຂອງ
"_gp". ຕົວຢ່າງ, ຖ້າລະຫັດເປັນສ່ວນຫນຶ່ງຂອງຫ້ອງສະຫມຸດທີ່ອາດຈະຖືກນໍາໃຊ້ໃນການບູດ
ຈໍພາບ, ໂປຣແກຣມທີ່ເອີ້ນ boot monitor routines ຈະຜ່ານຄ່າທີ່ບໍ່ຮູ້ຈັກໃນ $gp.
(ໃນສະຖານະການດັ່ງກ່າວ, boot monitor ຕົວມັນເອງມັກຈະຖືກລວບລວມດ້ວຍ 0.)

-mno-gpopt implies -mno-local-sdata ແລະ -mno-extern-sdata.

-membedded-data
-mno-embedded-data
ຈັດສັນຕົວແປໃຫ້ພາກສ່ວນຂໍ້ມູນທີ່ອ່ານເທົ່ານັ້ນກ່ອນຖ້າເປັນໄປໄດ້, ຫຼັງຈາກນັ້ນຕໍ່ໄປໃນພາກ
ພາກສ່ວນຂໍ້ມູນຂະຫນາດນ້ອຍຖ້າເປັນໄປໄດ້, ຖ້າບໍ່ດັ່ງນັ້ນໃນຂໍ້ມູນ. ນີ້ເຮັດໃຫ້ລະຫັດຊ້າລົງເລັກນ້ອຍ
ກ່ວາຄ່າເລີ່ມຕົ້ນ, ແຕ່ຫຼຸດຜ່ອນຈໍານວນ RAM ທີ່ຕ້ອງການໃນເວລາປະຕິບັດ, ແລະດັ່ງນັ້ນອາດຈະ
ຕ້ອງການສໍາລັບບາງລະບົບຝັງຕົວ.

-muninit-const-in-rodata
-mno-uninit-const-in-rodata
ເອົາຕົວແປ "const" ທີ່ບໍ່ໄດ້ໃຊ້ໃນສ່ວນຂໍ້ມູນທີ່ອ່ານເທົ່ານັ້ນ. ທາງເລືອກນີ້ແມ່ນ
ພຽງ​ແຕ່​ມີ​ຄວາມ​ຫມາຍ​ໃນ​ການ​ສົມ​ທົບ​ກັບ​ -membedded-data.

-mcode-readable=ຕັ້ງ
ລະບຸວ່າ GCC ອາດຈະສ້າງລະຫັດທີ່ອ່ານຈາກພາກສ່ວນທີ່ສາມາດປະຕິບັດໄດ້. ມີ
ສາມ​ການ​ຕັ້ງ​ຄ່າ​ທີ່​ເປັນ​ໄປ​ໄດ້​:

-mcode-readable=ແມ່ນ
ຄໍາແນະນໍາອາດຈະເຂົ້າເຖິງພາກສ່ວນທີ່ສາມາດປະຕິບັດໄດ້ຢ່າງເສລີ. ນີ້ແມ່ນການຕັ້ງຄ່າເລີ່ມຕົ້ນ.

-mcode-readable=pcrel
MIPS16 PC-relative ຄໍາແນະນໍາການໂຫຼດສາມາດເຂົ້າເຖິງພາກສ່ວນປະຕິບັດໄດ້, ແຕ່ອື່ນໆ
ຄໍາແນະນໍາບໍ່ຄວນເຮັດແນວນັ້ນ. ຕົວເລືອກນີ້ແມ່ນເປັນປະໂຫຍດໃນໂປເຊດເຊີ 4KSc ແລະ 4KSd
ເມື່ອລະຫັດ TLBs ມີບິດ Read Inhibit. ມັນຍັງເປັນປະໂຫຍດກ່ຽວກັບໂປເຊດເຊີ
ທີ່​ສາ​ມາດ​ໄດ້​ຮັບ​ການ​ຕັ້ງ​ຄ່າ​ທີ່​ຈະ​ມີ​ການ​ໂຕ້​ຕອບ​ຄໍາ​ແນະ​ນໍາ / ຂໍ້​ມູນ​ຄູ່ SRAM ແລະ​ວ່າ​,
ເຊັ່ນດຽວກັບ M4K, ອັດຕະໂນມັດປ່ຽນເສັ້ນທາງການໂຫຼດ PC-relative ໄປຫາ RAM ຄໍາແນະນໍາ.

-mcode-readable=ບໍ່
ຄໍາແນະນໍາຈະຕ້ອງບໍ່ເຂົ້າເຖິງພາກສ່ວນທີ່ສາມາດປະຕິບັດໄດ້. ທາງເລືອກນີ້ສາມາດເປັນປະໂຫຍດໃນ
ເປົ້າຫມາຍທີ່ຖືກຕັ້ງຄ່າໃຫ້ມີການໂຕ້ຕອບຄູ່ຄໍາແນະນໍາ / ຂໍ້ມູນ SRAM ແຕ່
ທີ່ (ບໍ່ເຫມືອນກັບ M4K) ບໍ່ໄດ້ປ່ຽນເສັ້ນທາງການໂຫຼດ PC-relative ໂດຍອັດຕະໂນມັດໄປຫາ
RAM ຄໍາແນະນໍາ.

-msplit-ທີ່ຢູ່
-mno-split-addresses
ເປີດໃຊ້ (ປິດການໃຊ້ງານ) ການໃຊ້ຕົວປະຕິບັດການຍົກຍ້າຍ "%hi()" ແລະ "%lo()". ນີ້
ທາງເລືອກໄດ້ຖືກແທນທີ່ໂດຍ -mexplicit-relocs ແຕ່ຖືກຮັກສາໄວ້ສໍາລັບການຖອຍຫລັງ
ຄວາມເຂົ້າກັນໄດ້.

-mexplicit-relocs
-mno-explicit-relocs
ໃຊ້ (ບໍ່ໃຊ້) ຕົວປະຕິບັດການຍ້າຍຕົວປະກອບເມື່ອຈັດການກັບທີ່ຢູ່ສັນຍາລັກ.
ທາງເລືອກ, ເລືອກໂດຍ -mno-explicit-relocs, ແມ່ນການນໍາໃຊ້ macro assembler ແທນ.

-mexplicit-relocs ແມ່ນຄ່າເລີ່ມຕົ້ນຖ້າ GCC ຖືກຕັ້ງຄ່າໃຫ້ໃຊ້ຕົວປະກອບນັ້ນ
ສະຫນັບສະຫນູນຜູ້ປະຕິບັດການຍົກຍ້າຍ.

-mcheck-ສູນ-ພະແນກ
-mno-check-zero-division
ໃສ່ກັບດັກ (ຢ່າໃສ່ກັບດັກ) ກ່ຽວກັບການຫານຈຳນວນເຕັມດ້ວຍສູນ.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -mcheck-ສູນ-ພະແນກ.

-mdivide-ກັບດັກ
-mdivide-breaks
ລະບົບ MIPS ກວດເບິ່ງການແບ່ງສ່ວນໂດຍສູນໂດຍການສ້າງຈັ່ນຈັບທີ່ມີເງື່ອນໄຂຫຼື a
ທໍາ​ລາຍ​ຄໍາ​ແນະ​ນໍາ​. ການນໍາໃຊ້ໃສ່ກັບດັກສົ່ງຜົນໃຫ້ລະຫັດຂະຫນາດນ້ອຍກວ່າ, ແຕ່ໄດ້ຮັບການສະຫນັບສະຫນູນໃນ MIPS ເທົ່ານັ້ນ
II ແລະຕໍ່ມາ. ນອກຈາກນີ້, ບາງລຸ້ນຂອງ Linux kernel ມີ bug ທີ່ປ້ອງກັນການດັກ
ຈາກການສ້າງສັນຍານທີ່ເຫມາະສົມ ("SIGFPE"). ໃຊ້ -mdivide-ກັບດັກ ອະນຸຍາດໃຫ້ມີເງື່ອນໄຂ
ໃສ່ກັບດັກສະຖາປັດຕະຍະກໍາທີ່ສະຫນັບສະຫນູນພວກເຂົາແລະ -mdivide-breaks ບັງຄັບໃຊ້
ພັກຜ່ອນ.

ຄ່າເລີ່ມຕົ້ນແມ່ນປົກກະຕິແລ້ວ -mdivide-ກັບດັກ, ແຕ່ນີ້ສາມາດ overridden ໃນເວລາ configure
ການນໍາໃຊ້ --with-divide=ແຕກ. ການກວດສອບການແບ່ງໂດຍສູນສາມາດຖືກປິດການໃຊ້ງານຢ່າງສົມບູນ
-mno-check-zero-division.

-mmmcpy
-mno-memcpy
ບັງຄັບ (ບໍ່ບັງຄັບ) ການນໍາໃຊ້ "memcpy()" ສໍາລັບການຍ້າຍຕັນທີ່ບໍ່ແມ່ນ trivial. ຄ່າເລີ່ມຕົ້ນ
is -mno-memcpy, ເຊິ່ງອະນຸຍາດໃຫ້ GCC ຢູ່ໃນແຖວຂອງສໍາເນົາຄົງທີ່ຫຼາຍທີ່ສຸດ.

-mlong-ໂທ
-mno-long-calls
ປິດການໃຊ້ງານ (ຫ້າມປິດການໃຊ້ງານ) ການນໍາໃຊ້ຄໍາແນະນໍາ "jal". ເອີ້ນຟັງຊັນໂດຍໃຊ້ "jal"
ມີປະສິດທິພາບຫຼາຍຂຶ້ນແຕ່ຮຽກຮ້ອງໃຫ້ຜູ້ໂທແລະຜູ້ໂທຢູ່ໃນ 256 megabyte ດຽວກັນ
ສ່ວນແບ່ງ.

ຕົວເລືອກນີ້ບໍ່ມີຜົນຕໍ່ລະຫັດ abicalls. ຄ່າເລີ່ມຕົ້ນແມ່ນ -mno-long-calls.

- ບ້າ
-mno-mad
ເປີດໃຊ້ (ປິດການໃຊ້ງານ) ການນໍາໃຊ້ຄໍາແນະນໍາ "mad", "madu" ແລະ "mul", ຕາມທີ່ສະຫນອງໃຫ້ໂດຍ
R4650 ISA.

-mfused-madd
-mno-fused-madd
ເປີດໃຊ້ (ປິດການໃຊ້ງານ) ການນໍາໃຊ້ຄໍາແນະນໍາທີ່ເລື່ອນໄດ້ multiply-accumulate, ເມື່ອພວກເຂົາ
ມີຢູ່. ຄ່າເລີ່ມຕົ້ນແມ່ນ -mfused-madd.

ເມື່ອຄໍາແນະນໍາການຄູນສະສົມຖືກນໍາໃຊ້, ຜະລິດຕະພັນລະດັບປານກາງຈະຖືກຄິດໄລ່
ເພື່ອຄວາມແມ່ນຍໍາອັນເປັນນິດ ແລະບໍ່ແມ່ນຂຶ້ນກັບ FCSR Flush ກັບ Zero bit. ນີ້ອາດຈະເປັນ
ບໍ່​ຕ້ອງ​ການ​ໃນ​ບາງ​ສະ​ຖາ​ນະ​ການ​.

-nocpp
ບອກຜູ້ປະກອບ MIPS ບໍ່ໃຫ້ດໍາເນີນການ preprocessor ຂອງມັນໃນໄລຍະໄຟລ໌ assembler ຜູ້ໃຊ້ (ມີ a
.s suffix) ໃນເວລາທີ່ປະກອບໃຫ້ເຂົາເຈົ້າ.

-mfix-24k
-mno-fix-24k
ເຮັດວຽກປະມານ 24K E48 (ຂໍ້ມູນສູນເສຍໃນຮ້ານຄ້າໃນລະຫວ່າງການເຕີມເງິນ). ວິທີແກ້ໄຂ
ຖືກຈັດຕັ້ງປະຕິບັດໂດຍຜູ້ປະກອບຫຼາຍກວ່າໂດຍ GCC.

-mfix-r4000
-mno-fix-r4000
ເຮັດວຽກກ່ຽວກັບຄວາມຜິດພາດ CPU R4000 ທີ່ແນ່ນອນ:

- ຄໍາສອງຄໍາຫຼືການປ່ຽນແປງທີ່ມີການປ່ຽນແປງອາດຈະໃຫ້ຜົນໄດ້ຮັບທີ່ບໍ່ຖືກຕ້ອງຖ້າຖືກປະຕິບັດ
ທັນທີຫຼັງຈາກເລີ່ມການຫານຈໍານວນເຕັມ.

- ຄໍາສອງຄໍາຫຼືການປ່ຽນແປງທີ່ມີການປ່ຽນແປງອາດຈະໃຫ້ຜົນໄດ້ຮັບທີ່ບໍ່ຖືກຕ້ອງຖ້າຫາກວ່າດໍາເນີນການໃນຂະນະທີ່
ການຄູນຈຳນວນເຕັມກຳລັງດຳເນີນຢູ່.

- ການຫານຈຳນວນເຕັມອາດຈະໃຫ້ຜົນໄດ້ຮັບທີ່ບໍ່ຖືກຕ້ອງ ຖ້າເລີ່ມຕົ້ນໃນຊ່ອງຊັກຊ້າຂອງ a
ເອົາສາຂາຫຼືກະໂດດ.

-mfix-r4400
-mno-fix-r4400
ເຮັດວຽກກ່ຽວກັບຄວາມຜິດພາດ CPU R4400 ທີ່ແນ່ນອນ:

- ຄໍາສອງຄໍາຫຼືການປ່ຽນແປງທີ່ມີການປ່ຽນແປງອາດຈະໃຫ້ຜົນໄດ້ຮັບທີ່ບໍ່ຖືກຕ້ອງຖ້າຖືກປະຕິບັດ
ທັນທີຫຼັງຈາກເລີ່ມການຫານຈໍານວນເຕັມ.

-mfix-r10000
-mno-fix-r10000
ເຮັດ​ວຽກ​ກ່ຽວ​ກັບ​ຄວາມ​ຜິດ​ພາດ R10000 ທີ່​ແນ່​ນອນ​:

- ລຳດັບ "ll"/"sc" ອາດຈະບໍ່ມີພຶດຕິກຳອະຕອມໃນການດັດແກ້ກ່ອນ 3.0. ພວກເຂົາເຈົ້າອາດຈະ
deadlock ໃນການແກ້ໄຂ 2.6 ແລະກ່ອນຫນ້ານັ້ນ.

ທາງເລືອກນີ້ສາມາດໃຊ້ໄດ້ພຽງແຕ່ຖ້າສະຖາປັດຕະຍະກໍາເປົ້າຫມາຍສະຫນັບສະຫນູນສາຂາ
ຄໍາແນະນໍາ. -mfix-r10000 ເປັນຄ່າເລີ່ມຕົ້ນເມື່ອ - ມີນາ=r10000 ຖືກນໍາໃຊ້; -mno-fix-r10000
ເປັນຄ່າເລີ່ມຕົ້ນຖ້າບໍ່ດັ່ງນັ້ນ.

-mfix-vr4120
-mno-fix-vr4120
ແກ້ໄຂຂໍ້ຜິດພາດ VR4120 ບາງຢ່າງ:

- "dmultu" ບໍ່ສະເຫມີໃຫ້ຜົນໄດ້ຮັບທີ່ຖືກຕ້ອງ.

- "div" ແລະ "ddiv" ບໍ່ສະເຫມີໃຫ້ຜົນໄດ້ຮັບທີ່ຖືກຕ້ອງຖ້າຫາກວ່າຫນຶ່ງຂອງ operands
ແມ່ນທາງລົບ.

ການແກ້ໄຂສໍາລັບຄວາມຜິດພາດຂອງພະແນກແມ່ນອີງໃສ່ຫນ້າທີ່ພິເສດໃນ libgcc.a. ໃນ
ໃນປັດຈຸບັນ, ຫນ້າທີ່ເຫຼົ່ານີ້ແມ່ນສະຫນອງໃຫ້ພຽງແຕ່ໂດຍການຕັ້ງຄ່າ "mips64vr*-elf" ເທົ່ານັ້ນ.

ຄວາມຜິດພາດ VR4120 ອື່ນໆຕ້ອງການ nop ທີ່ຈະໃສ່ລະຫວ່າງບາງຄູ່ຂອງ
ຄໍາແນະນໍາ. ຄວາມຜິດພາດເຫຼົ່ານີ້ຖືກຈັດການໂດຍຜູ້ປະກອບ, ບໍ່ແມ່ນໂດຍ GCC ເອງ.

-mfix-vr4130
ເຮັດວຽກປະມານ VR4130 "mflo"/"mfhi" errata. ການ​ແກ້​ໄຂ​ແມ່ນ​ໄດ້​ຮັບ​ການ​ປະ​ຕິ​ບັດ​ໂດຍ​
assembler ແທນທີ່ຈະໂດຍ GCC, ເຖິງແມ່ນວ່າ GCC ຈະຫຼີກເວັ້ນການໃຊ້ "mflo" ແລະ "mfhi" ຖ້າ
VR4130 "macc", "macchi", "dmacc" ແລະ "dmacchi" ຄໍາແນະນໍາສາມາດໃຊ້ໄດ້ແທນ.

-mfix-sb1
-mno-fix-sb1
ເຮັດວຽກກ່ຽວກັບຄວາມຜິດພາດຫຼັກ CPU SB-1 ທີ່ແນ່ນອນ. (ປະຈຸບັນທຸງນີ້ໃຊ້ໄດ້ປະມານ SB-1
ການແກ້ໄຂ 2 "F1" ແລະ "F2" ຄວາມຜິດພາດຈຸດລອຍ.)

-mr10k-cache-barrier=ຕັ້ງ
ລະບຸວ່າ GCC ຄວນແຊກ cache barriers ເພື່ອຫຼີກເວັ້ນຜົນກະທົບຂ້າງຄຽງຂອງ
ການຄາດເດົາກ່ຽວກັບໂປເຊດເຊີ R10K.

ໂດຍທົ່ວໄປກັບໂປເຊດເຊີຈໍານວນຫຼາຍ, R10K ພະຍາຍາມຄາດຄະເນຜົນໄດ້ຮັບຂອງເງື່ອນໄຂ
ສາຂາແລະ speculatively ປະຕິບັດຄໍາແນະນໍາຈາກສາຂາ "ເອົາ". ມັນຕໍ່ມາ
ຍົກເລີກຄໍາແນະນໍາເຫຼົ່ານີ້ຖ້າຜົນໄດ້ຮັບທີ່ຄາດຄະເນບໍ່ຖືກຕ້ອງ. ຢ່າງໃດກໍຕາມ, ໃນ R10K,
ເຖິງແມ່ນວ່າຄໍາແນະນໍາທີ່ເອົາລູກອອກກໍ່ສາມາດມີຜົນຂ້າງຄຽງ.

ບັນຫານີ້ມີຜົນກະທົບພຽງແຕ່ຮ້ານ kernel ແລະ, ອີງຕາມລະບົບ, ການໂຫຼດ kernel.
ຕົວຢ່າງ, ຮ້ານຄ້າທີ່ປະຕິບັດການຄາດເດົາອາດຈະໂຫລດຫນ່ວຍຄວາມຈໍາເປົ້າຫມາຍເຂົ້າໄປໃນ cache
ແລະໝາຍເສັ້ນ cache ວ່າເປື້ອນ, ເຖິງແມ່ນວ່າຮ້ານຕົວມັນເອງຈະຖືກຍົກເລີກໃນພາຍຫຼັງ. ຖ້າ DMA
ການດໍາເນີນງານຂຽນໃສ່ພື້ນທີ່ດຽວກັນຂອງຫນ່ວຍຄວາມຈໍາກ່ອນທີ່ເສັ້ນ "ເປື້ອນ" ແມ່ນ flushed, ໄດ້
ຂໍ້ມູນທີ່ແຄສໄວ້ຈະຂຽນທັບຂໍ້ມູນ DMA-ed. ເບິ່ງຄູ່ມືໂຮງງານຜະລິດ R10K ສໍາລັບເຕັມ
ລາຍລະອຽດ, ລວມທັງບັນຫາທີ່ອາດເກີດຂຶ້ນອື່ນໆ.

ວິທີແກ້ໄຂບັນຫາອັນໜຶ່ງຄືການໃສ່ຄຳແນະນຳການກີດຂວາງ cache ກ່ອນທີ່ໜ່ວຍຄວາມຈຳທັງໝົດຈະເຂົ້າເຖິງນັ້ນ
ອາດ​ຈະ​ຖືກ​ປະ​ຕິ​ບັດ​ຢ່າງ​ສົມ​ເຫດ​ສົມ​ຜົນ ແລະ​ອາດ​ຈະ​ມີ​ຜົນ​ກະ​ທົບ​ຂ້າງ​ຄຽງ​ເຖິງ​ແມ່ນ​ວ່າ​ຈະ​ເອົາ​ລູກ​ອອກ.
-mr10k-cache-barrier=ຕັ້ງ ຄວບຄຸມການປະຕິບັດຂອງ GCC ກ່ຽວກັບການແກ້ໄຂນີ້. ມັນ
ສົມມຸດວ່າການຍົກເລີກການເຂົ້າເຖິງ byte ໃດໆໃນພາກພື້ນຕໍ່ໄປນີ້ຈະບໍ່ມີຂ້າງ
ຜົນກະທົບ:

1. ຄວາມຊົງຈໍາທີ່ຄອບຄອງໂດຍກອບ stack ຂອງຫນ້າທີ່ປະຈຸບັນ;

2. ຄວາມຊົງຈໍາທີ່ຄອບຄອງໂດຍການໂຕ້ຖຽງ stack ຂາເຂົ້າ;

3. ຫນ່ວຍຄວາມຈໍາທີ່ຖືກຍຶດໂດຍວັດຖຸທີ່ມີທີ່ຢູ່ເຊື່ອມຕໍ່ເວລາຄົງທີ່.

ມັນເປັນຄວາມຮັບຜິດຊອບຂອງ kernel ເພື່ອຮັບປະກັນວ່າມີການຄາດເດົາການເຂົ້າເຖິງພາກພື້ນເຫຼົ່ານີ້
ປອດໄພແທ້ໆ.

ຖ້າໂປຣແກຣມປ້ອນຂໍ້ມູນປະກອບດ້ວຍການປະກາດຟັງຊັນເຊັ່ນ:

void foo (void);

ຫຼັງຈາກນັ້ນ, ການປະຕິບັດ "foo" ຕ້ອງອະນຸຍາດໃຫ້ "j foo" ແລະ "jal foo" ຖືກປະຕິບັດ.
ຄາດຄະເນ. GCC ເຄົາລົບຂໍ້ຈໍາກັດນີ້ສໍາລັບຫນ້າທີ່ມັນລວບລວມຕົວມັນເອງ. ມັນ
ຄາດຫວັງໃຫ້ຟັງຊັນທີ່ບໍ່ແມ່ນ GCC (ເຊັ່ນ: ລະຫັດປະກອບທີ່ຂຽນດ້ວຍມື) ຈະເຮັດເຊັ່ນດຽວກັນ.

ທາງ​ເລືອກ​ມີ​ສາມ​ຮູບ​ແບບ​:

-mr10k-cache-barrier=load-store
ໃສ່ cache barrier ກ່ອນການໂຫຼດຫຼືຮ້ານທີ່ອາດຈະຖືກປະຕິບັດໂດຍການຄາດຄະເນ
ແລະມັນອາດຈະມີຜົນຂ້າງຄຽງເຖິງແມ່ນວ່າຈະເອົາລູກອອກ.

-mr10k-cache-barrier=ຮ້ານ
ໃສ່ cache barrier ກ່ອນຮ້ານທີ່ອາດຈະຖືກປະຕິບັດໂດຍການຄາດຄະເນແລະ
ທີ່ອາດຈະມີຜົນຂ້າງຄຽງເຖິງແມ່ນວ່າຈະເອົາລູກອອກ.

-mr10k-cache-barrier=ບໍ່ມີ
ປິດໃຊ້ງານການແຊກຂອງອຸປະສັກແຄດ. ນີ້ແມ່ນການຕັ້ງຄ່າເລີ່ມຕົ້ນ.

-mflush-func=ມ່ວນ
-mno-flush-func
ກໍານົດຟັງຊັນທີ່ຈະໂທຫາເພື່ອ flush ຖານຄວາມຈໍາ I ແລະ D, ຫຼືບໍ່ໃຫ້ໂທຫາໃດໆ
ຫນ້າທີ່. ຖ້າເອີ້ນວ່າ, ຟັງຊັນຕ້ອງໃຊ້ການໂຕ້ຖຽງດຽວກັນກັບທົ່ວໄປ
"_flush_func()", ນັ້ນແມ່ນ, ທີ່ຢູ່ຂອງຊ່ວງຄວາມຊົງຈໍາທີ່ cache ກໍາລັງຖືກ
flushed, ຂະຫນາດຂອງຊ່ວງຄວາມຈໍາ, ແລະຈໍານວນ 3 (ເພື່ອ flush ທັງສອງ caches). ໄດ້
ຄ່າເລີ່ມຕົ້ນແມ່ນຂຶ້ນກັບ GCC ເປົ້າຫມາຍທີ່ຖືກກໍານົດໄວ້ສໍາລັບ, ແຕ່ໂດຍທົ່ວໄປແມ່ນບໍ່ວ່າຈະ
_flush_func or __cpu_flush.

mbranch-cost=num
ກໍານົດຄ່າໃຊ້ຈ່າຍຂອງສາຂາເປັນປະມານ num ຄໍາແນະນໍາ "ງ່າຍດາຍ". ຄ່າໃຊ້ຈ່າຍນີ້ແມ່ນພຽງແຕ່ a
heuristic ແລະບໍ່ໄດ້ຮັບການຮັບປະກັນໃຫ້ຜົນໄດ້ຮັບທີ່ສອດຄ່ອງໃນທົ່ວການປ່ອຍ. ສູນ
cost redundantly ເລືອກຄ່າເລີ່ມຕົ້ນ, ເຊິ່ງແມ່ນອີງໃສ່ -mtune ຕັ້ງ.

- ສາຂາທີ່ອາດຈະເປັນໄປໄດ້
-mno-ສາຂາ-ອາດຈະ
ເປີດ ຫຼືປິດການນຳໃຊ້ຄຳແນະນຳສາຂາທີ່ໜ້າຈະເປັນ, ໂດຍບໍ່ຄຳນຶງເຖິງຄ່າເລີ່ມຕົ້ນຂອງ
ສະຖາປັດຕະຍະກໍາທີ່ເລືອກ. ໂດຍຄ່າເລີ່ມຕົ້ນ, ຄໍາແນະນໍາສາຂາອາດຈະຖືກສ້າງຂື້ນຖ້າ
ພວກເຂົາເຈົ້າໄດ້ຮັບການສະຫນັບສະຫນູນໂດຍສະຖາປັດຕະຍະກໍາທີ່ເລືອກ. ຂໍ້ຍົກເວັ້ນແມ່ນສໍາລັບ MIPS32 ແລະ
ສະຖາປັດຕະຍະກໍາ MIPS64 ແລະໂປເຊດເຊີທີ່ປະຕິບັດສະຖາປັດຕະຍະກໍາເຫຼົ່ານັ້ນ; ສໍາລັບຜູ້ທີ່,
ຄໍາແນະນໍາສາຂາທີ່ເປັນໄປໄດ້ຈະບໍ່ຖືກສ້າງຂື້ນໂດຍຄ່າເລີ່ມຕົ້ນເພາະວ່າ MIPS32 ແລະ
ສະຖາປັດຕະຍະກຳ MIPS64 ປະຕິເສດການນຳໃຊ້ຂອງເຂົາເຈົ້າໂດຍສະເພາະ.

-mfp-ຂໍ້ຍົກເວັ້ນ
-mno-fp-ຂໍ້ຍົກເວັ້ນ
ລະບຸວ່າຂໍ້ຍົກເວັ້ນ FP ຖືກເປີດໃຊ້ຫຼືບໍ່. ນີ້ມີຜົນກະທົບແນວໃດທີ່ພວກເຮົາກໍານົດເວລາ FP
ຄໍາແນະນໍາສໍາລັບບາງໂປເຊດເຊີ. ຄ່າເລີ່ມຕົ້ນແມ່ນວ່າຂໍ້ຍົກເວັ້ນ FP ຖືກເປີດໃຊ້.

ຍົກຕົວຢ່າງ, ໃນ SB-1, ຖ້າຂໍ້ຍົກເວັ້ນ FP ຖືກປິດການໃຊ້ງານ, ແລະພວກເຮົາກໍາລັງປ່ອຍ 64-bit.
code, ຫຼັງຈາກນັ້ນພວກເຮົາສາມາດນໍາໃຊ້ທັງສອງທໍ່ FP. ຖ້າບໍ່ດັ່ງນັ້ນ, ພວກເຮົາສາມາດໃຊ້ທໍ່ FP ທໍ່ດຽວເທົ່ານັ້ນ.

-mvr4130-ຈັດຮຽງ
-mno-vr4130-align
ທໍ່ VR4130 ແມ່ນສອງທາງ superscalar, ແຕ່ສາມາດອອກພຽງແຕ່ສອງຄໍາແນະນໍາ
ຮ່ວມກັນຖ້າອັນທໍາອິດແມ່ນ 8-byte ຈັດຮຽງ. ເມື່ອຕົວເລືອກນີ້ຖືກເປີດໃຊ້, GCC ຈະ
ວາງຄູ່ຄໍາແນະນໍາທີ່ມັນຄິດວ່າຄວນຈະປະຕິບັດໃນຂະຫນານ.

ຕົວເລືອກນີ້ມີຜົນກະທົບພຽງແຕ່ໃນເວລາທີ່ເພີ່ມປະສິດທິພາບສໍາລັບ VR4130. ມັນປົກກະຕິເຮັດໃຫ້ລະຫັດ
ໄວກວ່າ, ແຕ່ຄ່າໃຊ້ຈ່າຍໃນການເຮັດໃຫ້ມັນໃຫຍ່ຂຶ້ນ. ມັນໄດ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່
ລະດັບການເພີ່ມປະສິດທິພາບ -O3.

-msynci
-mno-sync
ເປີດໃຊ້ (ປິດການໃຊ້ງານ) ການສ້າງຄໍາແນະນໍາ "sync" ກ່ຽວກັບສະຖາປັດຕະຍະກໍາທີ່ສະຫນັບສະຫນູນມັນ.
ຄໍາແນະນໍາ "sync" (ຖ້າເປີດໃຊ້) ຈະຖືກສ້າງຂຶ້ນເມື່ອ
"__builtin___clear_cache()" ຖືກລວບລວມ.

ຕົວເລືອກນີ້ຕັ້ງໄວ້ເປັນ "-mno-synci", ແຕ່ຄ່າເລີ່ມຕົ້ນສາມາດຖືກລົບລ້າງໂດຍການກໍາຫນົດຄ່າ.
ດ້ວຍ "--with-sync".

ເມື່ອລວບລວມລະຫັດສໍາລັບລະບົບໂປເຊດເຊີດຽວ, ໂດຍທົ່ວໄປແລ້ວມັນປອດໄພທີ່ຈະໃຊ້ "sync".
ຢ່າງໃດກໍ່ຕາມ, ໃນລະບົບຫຼາຍຫຼັກ (SMP), ມັນຈະບໍ່ເຮັດໃຫ້ຄໍາແນະນໍາບໍ່ຖືກຕ້ອງ
cache ໃນທຸກແກນແລະອາດຈະນໍາໄປສູ່ພຶດຕິກໍາທີ່ບໍ່ໄດ້ກໍານົດ.

-mrelax-pic-ໂທ
-mno-relax-pic-calls
ພະຍາຍາມປ່ຽນການໂທ PIC ທີ່ປົກກະຕິຖືກສົ່ງຜ່ານລົງທະບຽນ $25 ເປັນການໂທໂດຍກົງ.
ນີ້ແມ່ນເປັນໄປໄດ້ພຽງແຕ່ຖ້າຕົວເຊື່ອມຕໍ່ສາມາດແກ້ໄຂຈຸດຫມາຍປາຍທາງໃນເວລາເຊື່ອມຕໍ່ແລະຖ້າ
ຈຸດຫມາຍປາຍທາງແມ່ນຢູ່ໃນຂອບເຂດສໍາລັບການໂທຫາໂດຍກົງ.

-mrelax-pic-ໂທ ແມ່ນຄ່າເລີ່ມຕົ້ນຖ້າ GCC ຖືກຕັ້ງຄ່າໃຫ້ໃຊ້ຕົວປະກອບ ແລະ a
ຕົວເຊື່ອມຕໍ່ທີ່ສະຫນັບສະຫນູນຄໍາສັ່ງການປະກອບ ".reloc" ແລະ "-mexplicit-relocs" ແມ່ນຢູ່ໃນ
ຜົນກະທົບ. ດ້ວຍ "-mno-explicit-relocs", ການເພີ່ມປະສິດທິພາບນີ້ສາມາດຖືກປະຕິບັດໂດຍ
assembler ແລະ linker ດຽວໂດຍບໍ່ມີການຊ່ວຍເຫຼືອຈາກ compiler.

-mmcount-ra-ທີ່ຢູ່
-mno-mcount-ra-ທີ່ຢູ່
ປ່ອຍ (ບໍ່ emit) ລະຫັດທີ່ອະນຸຍາດໃຫ້ "_mcount" ແກ້ໄຂການກັບຄືນຂອງຟັງຊັນການໂທ
ທີ່ຢູ່. ເມື່ອເປີດໃຊ້, ຕົວເລືອກນີ້ຂະຫຍາຍສ່ວນຕິດຕໍ່ "_mcount" ປົກກະຕິດ້ວຍອັນໃໝ່
ra-ທີ່ຢູ່ ພາລາມິເຕີ, ເຊິ່ງມີປະເພດ "intptr_t *" ແລະຖືກສົ່ງຜ່ານໃນການລົງທະບຽນ $ 12.
ຈາກນັ້ນ "_mcount" ສາມາດແກ້ໄຂທີ່ຢູ່ສົ່ງຄືນໄດ້ໂດຍການເຮັດທັງສອງອັນຕໍ່ໄປນີ້:

· ສົ່ງຄືນທີ່ຢູ່ໃໝ່ໃນການລົງທະບຽນ $31.

· ການ​ເກັບ​ຮັກ​ສາ​ທີ່​ຢູ່​ໃຫມ່​ໃນ "*ra-ທີ່ຢູ່", ຖ້າ ra-ທີ່ຢູ່ ແມ່ນ nonnull.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -mno-mcount-ra-ທີ່ຢູ່.

MMIX ທາງເລືອກໃນການ

ຕົວເລືອກເຫຼົ່ານີ້ຖືກກໍານົດໄວ້ສໍາລັບ MMIX:

-mlibfuncs
-mno-libfuncs
ລະບຸວ່າຟັງຊັນຫ້ອງສະໝຸດພາຍໃນກຳລັງຖືກລວບລວມ, ຖ່າຍທອດຄ່າທັງໝົດໃນ
ລົງທະບຽນ, ບໍ່ວ່າຂະຫນາດ.

- mepsilon
-mno-epsilon
ສ້າງຄໍາແນະນໍາການປຽບທຽບຈຸດລອຍທີ່ປຽບທຽບກັບ "rE"
ລົງທະບຽນ epsilon.

-mabi=mmixware
-mabi=gnu
ສ້າງລະຫັດທີ່ຜ່ານພາລາມິເຕີຟັງຊັນແລະສົ່ງຄືນຄ່າທີ່ (ໃນທີ່ເອີ້ນວ່າ
function) ຖືກເຫັນວ່າເປັນການລົງທະບຽນ $0 ຂຶ້ນໄປ, ກົງກັນຂ້າມກັບ GNU ABI ທີ່ນໍາໃຊ້ທົ່ວໂລກ
ລົງທະບຽນ $231 ຂຶ້ນໄປ.

-mzero-extend
-mno-zero-extend
ເມື່ອ​ອ່ານ​ຂໍ້​ມູນ​ຈາກ​ຫນ່ວຍ​ຄວາມ​ຈໍາ​ໃນ​ຂະ​ຫນາດ​ສັ້ນ​ກ​່​ວາ 64 bits​, ການ​ນໍາ​ໃຊ້ (ບໍ່​ໄດ້​ນໍາ​ໃຊ້​) zero-
ການຂະຫຍາຍຄໍາແນະນໍາການໂຫຼດຕາມຄ່າເລີ່ມຕົ້ນ, ແທນທີ່ຈະເປັນສັນຍານຂະຫຍາຍ.

-mknutdiv
-mno-knuthdiv
ເຮັດໃຫ້ຜົນໄດ້ຮັບຂອງການແບ່ງສ່ວນທີ່ເຫລືອມີເຄື່ອງຫມາຍດຽວກັນກັບຕົວຫານ.
ດ້ວຍຄ່າເລີ່ມຕົ້ນ, -mno-knuthdiv, ອາການຂອງສ່ວນທີ່ເຫຼືອປະຕິບັດຕາມອາການຂອງ
ເງິນປັນຜົນ. ທັງສອງວິທີແມ່ນຖືກຕ້ອງຕາມເລກເລກ, ອັນສຸດທ້າຍແມ່ນເກືອບສະເພາະ
ໃຊ້ແລ້ວ.

-mtoplevel - ສັນ​ຍາ​ລັກ​
-mno-toplevel-ສັນຍາລັກ
ລ່ວງໜ້າ (ຫ້າມລ່ວງໜ້າ) ກ : ກັບສັນຍາລັກທົ່ວໂລກທັງຫມົດ, ດັ່ງນັ້ນລະຫັດປະກອບສາມາດຖືກນໍາໃຊ້
ດ້ວຍຄໍາສັ່ງການປະກອບ "PREFIX".

-melf
ສ້າງການຈັດຕັ້ງປະຕິບັດໃນຮູບແບບ ELF, ແທນທີ່ຈະເປັນຄ່າເລີ່ມຕົ້ນ mmo ຮູບແບບທີ່ໃຊ້ໂດຍ
ໄດ້ ມມ ເຄື່ອງຈຳລອງ.

-mbranch-ຄາດ
-mno-branch-predict
ໃຊ້ (ບໍ່ໃຊ້) ຄໍາແນະນໍາສາຂາທີ່ອາດຈະເປັນໄປໄດ້, ໃນເວລາທີ່ການຄາດຄະເນສາຂາຄົງທີ່
ຊີ້ໃຫ້ເຫັນສາຂາທີ່ເປັນໄປໄດ້.

-mbase-ທີ່ຢູ່
-mno-base-dresses
ສ້າງ (ບໍ່ສ້າງ) ລະຫັດທີ່ໃຊ້ ຖານ ທີ່ຢູ່. ການນໍາໃຊ້ທີ່ຢູ່ພື້ນຖານ
ສ້າງການຮ້ອງຂໍອັດຕະໂນມັດ (ຈັດການໂດຍຜູ້ປະກອບແລະຕົວເຊື່ອມຕໍ່) ສໍາລັບ a
ຄົງທີ່ຈະຖືກສ້າງຕັ້ງຂຶ້ນຢູ່ໃນທະບຽນທົ່ວໂລກ. ທະບຽນແມ່ນໃຊ້ສໍາລັບຫນຶ່ງຫຼືຫຼາຍພື້ນຖານ
ການຮ້ອງຂໍທີ່ຢູ່ພາຍໃນຂອບເຂດ 0 ຫາ 255 ຈາກຄ່າທີ່ຖືຢູ່ໃນທະບຽນ. ໄດ້
ໂດຍທົ່ວໄປແລ້ວເຮັດໃຫ້ລະຫັດສັ້ນແລະໄວ, ແຕ່ຈໍານວນຂອງລາຍການຂໍ້ມູນທີ່ແຕກຕ່າງກັນທີ່
ສາມາດໄດ້ຮັບການແກ້ໄຂແມ່ນຈໍາກັດ. ນີ້ຫມາຍຄວາມວ່າໂຄງການທີ່ໃຊ້ຂໍ້ມູນສະຖິດຫຼາຍ
ອາດຈະຮຽກຮ້ອງໃຫ້ມີ -mno-base-dresses.

-msingle-ອອກ
-mno-single-ອອກ
ບັງຄັບ (ບໍ່ບັງຄັບ) ລະຫັດທີ່ສ້າງຂຶ້ນເພື່ອໃຫ້ມີຈຸດອອກດຽວໃນແຕ່ລະຟັງຊັນ.

MN10300 ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ -m ທາງເລືອກແມ່ນຖືກກໍານົດສໍາລັບສະຖາປັດຕະຍະກໍາ Matsushita MN10300:

- ແມງໄມ້ຫຼາຍ
ສ້າງລະຫັດເພື່ອຫຼີກເວັ້ນຂໍ້ບົກພ່ອງໃນຄໍາແນະນໍາການຄູນສໍາລັບໂປເຊດເຊີ MN10300.
ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-mno-mult-bug
ຢ່າສ້າງລະຫັດເພື່ອຫຼີກເວັ້ນຂໍ້ບົກພ່ອງໃນຄໍາແນະນໍາການຄູນສໍາລັບ MN10300
ຜະລິດຕະພັນ.

-ແມ່33
ສ້າງລະຫັດໂດຍໃຊ້ຄຸນສົມບັດສະເພາະກັບໂປເຊດເຊີ AM33.

-mno-am33
ຢ່າສ້າງລະຫັດໂດຍໃຊ້ຄຸນສົມບັດສະເພາະກັບໂປເຊດເຊີ AM33. ນີ້​ແມ່ນ
Default

-mam33-2
ສ້າງລະຫັດໂດຍໃຊ້ຄຸນສົມບັດສະເພາະກັບໂປເຊດເຊີ AM33/2.0.

-ແມ່34
ສ້າງລະຫັດໂດຍໃຊ້ຄຸນສົມບັດສະເພາະກັບໂປເຊດເຊີ AM34.

-mtune=cpu-type
ໃຊ້ຄຸນລັກສະນະການກໍານົດເວລາຂອງປະເພດ CPU ທີ່ລະບຸໄວ້ໃນເວລາກໍານົດຄໍາແນະນໍາ.
ນີ້ບໍ່ໄດ້ປ່ຽນປະເພດໂປເຊດເຊີເປົ້າຫມາຍ. ປະເພດ CPU ຈະຕ້ອງເປັນຫນຶ່ງໃນ
mn10300, am33, ເວລາ 33-2 or am34.

-mreturn-pointer-on-d0
ເມື່ອສ້າງຟັງຊັນທີ່ສົ່ງຄ່າຕົວຊີ້, ສົ່ງຄືນຕົວຊີ້ທັງ "a0" ແລະ
"d0". ຖ້າບໍ່ດັ່ງນັ້ນ, ຕົວຊີ້ຈະຖືກສົ່ງຄືນພຽງແຕ່ໃນ a0, ແລະພະຍາຍາມໂທຫາແບບນັ້ນ
ຟັງຊັນທີ່ບໍ່ມີຕົວແບບຈະສົ່ງຜົນໃຫ້ເກີດຄວາມຜິດພາດ. ກະລຸນາຮັບຊາບວ່າຕົວເລືອກນີ້ແມ່ນເປີດໂດຍ
ຄ່າເລີ່ມຕົ້ນ; ໃຊ້ -mno-return-pointer-on-d0 ເພື່ອປິດການໃຊ້ງານ.

-mno-crt0
ຢ່າເຊື່ອມຕໍ່ໃນໄຟລ໌ວັດຖຸການເລີ່ມຕົ້ນ C run-time.

-mrelax
ຊີ້ໃຫ້ເຫັນເຖິງຕົວເຊື່ອມຕໍ່ວ່າມັນຄວນຈະປະຕິບັດການເພີ່ມປະສິດທິພາບການຜ່ອນຄາຍຜ່ານໄປ
ຫຍໍ້ສາຂາ, ການໂທ ແລະທີ່ຢູ່ຄວາມຈຳຢ່າງແທ້ຈິງ. ທາງເລືອກນີ້ພຽງແຕ່ມີຜົນກະທົບ
ເມື່ອໃຊ້ໃນເສັ້ນຄໍາສັ່ງສໍາລັບຂັ້ນຕອນການເຊື່ອມຕໍ່ສຸດທ້າຍ.

ທາງເລືອກນີ້ເຮັດໃຫ້ການດີບັກສັນຍາລັກເປັນໄປບໍ່ໄດ້.

- ມະລີ
ອະນຸຍາດໃຫ້ compiler ສ້າງ Long ຄໍາແນະນໍາ Word ຄໍາແນະນໍາຖ້າຫາກວ່າເປົ້າຫມາຍແມ່ນ
AM33 ຫຼືຫຼັງຈາກນັ້ນ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ. ຕົວເລືອກນີ້ກໍານົດ macro preprocessor
__LIW__.

- mnoliw
ບໍ່ອະນຸຍາດໃຫ້ compiler ສ້າງ Long ຄໍາແນະນໍາ Word ຄໍາແນະນໍາ. ທາງເລືອກນີ້
ກໍານົດ macro preprocessor __NO_LIW__.

-msetlb
ອະນຸຍາດໃຫ້ລວບລວມຂໍ້ມູນເພື່ອສ້າງ SETLB ແລະ Lcc ຄໍາແນະນໍາຖ້າຫາກວ່າເປົ້າຫມາຍແມ່ນ
AM33 ຫຼືຫຼັງຈາກນັ້ນ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ. ຕົວເລືອກນີ້ກໍານົດ macro preprocessor
__SETLB__.

- mnosetlb
ບໍ່ອະນຸຍາດໃຫ້ compiler ສ້າງ SETLB or Lcc ຄໍາແນະນໍາ. ທາງເລືອກນີ້ກໍານົດ
macro preprocessor __NO_SETLB__.

PDP-11 ທາງເລືອກໃນການ

ຕົວເລືອກເຫຼົ່ານີ້ຖືກກໍານົດໄວ້ສໍາລັບ PDP-11:

-mfpu
ໃຊ້ຮາດແວ FPP ຈຸດລອຍ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ. (ຈຸດ FIS ລອຍຢູ່ເທິງ
ບໍ່ຮອງຮັບ PDP-11/40.)

-msoft-float
ຢ່າໃຊ້ຈຸດລອຍຂອງຮາດແວ.

-mac0
ສົ່ງຄືນຜົນໄດ້ຮັບຈຸດລອຍໃນ ac0 (fr0 ໃນ syntax ຂອງ Unix assembler).

-mno-ac0
ສົ່ງຄືນຜົນໄດ້ຮັບຈຸດລອຍຢູ່ໃນຄວາມຊົງຈໍາ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-m40
ສ້າງລະຫັດສໍາລັບ PDP-11/40.

-m45
ສ້າງລະຫັດສໍາລັບ PDP-11/45. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-m10
ສ້າງລະຫັດສໍາລັບ PDP-11/10.

-mbcopy-builtin
ໃຊ້ຮູບແບບ inline "movmemhi" ສໍາລັບການຄັດລອກຄວາມຊົງຈໍາ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-mbcopy
ຢ່າໃຊ້ຮູບແບບ inline "movmemhi" ສໍາລັບການຄັດລອກຄວາມຊົງຈໍາ.

- mint16
-mno-int32
ໃຊ້ 16-bit "int". ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

- mint32
-mno-int16
ໃຊ້ 32-bit "int".

-mfloat64
-mno-float32
ໃຊ້ 64-bit "float". ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-mfloat32
-mno-float64
ໃຊ້ 32-bit "float".

- mabshi
ໃຊ້ຮູບແບບ "abshi2". ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-mno-abshi
ຢ່າໃຊ້ຮູບແບບ "abshi2".

-ສາຂາ-ແພງ
ທຳທ່າວ່າສາຂາມີລາຄາແພງ. ນີ້ແມ່ນເພື່ອທົດລອງສ້າງລະຫັດ
ເທົ່ານັ້ນ.

-ສາຂາ-ລາຄາຖືກ
ຢ່າທຳທ່າວ່າສາຂາແພງ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-munix-asm
ໃຊ້ syntax ຕົວປະກອບ Unix. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນເມື່ອຖືກຕັ້ງຄ່າສໍາລັບ pdp11-*-bsd.

-mdec-asm
ໃຊ້ syntax ຂອງ DEC assembler. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນເມື່ອຕັ້ງຄ່າສໍາລັບ PDP-11 ໃດໆກໍຕາມ
ອື່ນກ່ວາ pdp11-*-bsd.

picoChip ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ -m ທາງເລືອກແມ່ນຖືກກໍານົດສໍາລັບການຈັດຕັ້ງປະຕິບັດ picoChip:

-mae=ae_type
ກໍາ​ນົດ​ຊຸດ​ຄໍາ​ສັ່ງ​, ການ​ລົງ​ທະ​ບຽນ​, ແລະ​ຕົວ​ກໍາ​ນົດ​ການ​ກໍາ​ນົດ​ເວ​ລາ​ຄໍາ​ສັ່ງ​ສໍາ​ລັບ​ອາ​ເຣ​
ປະເພດອົງປະກອບ ae_type. ຄຸນ​ຄ່າ​ສະ​ຫນັບ​ສະ​ຫນູນ​ສໍາ​ລັບ​ການ​ ae_type ມີ ໃດ, , ແລະ MAC.

-mae=ອັນໃດກໍໄດ້ ເລືອກປະເພດ AE ທົ່ວໄປຢ່າງສົມບູນ. ລະຫັດທີ່ສ້າງຂຶ້ນດ້ວຍຕົວເລືອກນີ້ຈະ
ແລ່ນຢູ່ໃນປະເພດ AE ອື່ນໆ. ລະຫັດຈະບໍ່ມີປະສິດທິພາບເທົ່າທີ່ມັນເປັນໄປໄດ້
ລວບລວມສໍາລັບປະເພດ AE ສະເພາະ, ແລະບາງປະເພດຂອງການດໍາເນີນງານ (ຕົວຢ່າງ, ການຄູນ)
ຈະບໍ່ເຮັດວຽກຢ່າງຖືກຕ້ອງກັບທຸກປະເພດຂອງ AE.

-mae=MUL ເລືອກປະເພດ MUL AE. ນີ້ແມ່ນປະເພດ AE ທີ່ເປັນປະໂຫຍດທີ່ສຸດສໍາລັບການລວບລວມລະຫັດ,
ແລະເປັນຄ່າເລີ່ມຕົ້ນ.

-mae=MAC ເລືອກ MAC AE ແບບ DSP. ລະຫັດທີ່ລວບລວມດ້ວຍຕົວເລືອກນີ້ອາດຈະທົນທຸກຈາກ
ການປະຕິບັດທີ່ບໍ່ດີຂອງ byte (char) manipulation, ເນື່ອງຈາກວ່າ DSP AE ບໍ່ໄດ້ສະຫນອງ
ສະຫນັບສະຫນູນຮາດແວສໍາລັບການໂຫຼດ byte / ຮ້ານ.

-msymbol-as-address
ເປີດໃຊ້ຕົວລວບລວມຂໍ້ມູນເພື່ອໃຊ້ຊື່ສັນຍາລັກໂດຍກົງເປັນທີ່ຢູ່ໃນການໂຫຼດ/ຮ້ານ
ຄໍາແນະນໍາ, ໂດຍບໍ່ມີການທໍາອິດໂຫລດມັນເຂົ້າໄປໃນທະບຽນ. ໂດຍປົກກະຕິ, ການນໍາໃຊ້ນີ້
ທາງ​ເລືອກ​ຈະ​ສ້າງ​ໂຄງ​ການ​ຂະ​ຫນາດ​ໃຫຍ່​, ທີ່​ເຮັດ​ວຽກ​ໄວ​ກ​່​ວາ​ໃນ​ເວ​ລາ​ທີ່​ທາງ​ເລືອກ​ທີ່​ບໍ່​ແມ່ນ​
ໃຊ້. ຢ່າງໃດກໍຕາມ, ຜົນໄດ້ຮັບແຕກຕ່າງກັນຈາກໂຄງການກັບໂຄງການ, ສະນັ້ນມັນໄດ້ຖືກປະໄວ້ເປັນຜູ້ໃຊ້
ທາງເລືອກ, ແທນທີ່ຈະຖືກເປີດໃຊ້ຢ່າງຖາວອນ.

-mno-inefficient-ເຕືອນ
ປິດການເຕືອນກ່ຽວກັບການສ້າງລະຫັດທີ່ບໍ່ມີປະສິດທິພາບ. ການເຕືອນໄພເຫຼົ່ານີ້ສາມາດເປັນ
ສ້າງຂຶ້ນ, ສໍາລັບການຍົກຕົວຢ່າງ, ເມື່ອລວບລວມລະຫັດທີ່ປະຕິບັດການດໍາເນີນງານຫນ່ວຍຄວາມຈໍາລະດັບ byte
ຢູ່ໃນປະເພດ MAC AE. MAC AE ບໍ່ຮອງຮັບຮາດແວສໍາລັບຫນ່ວຍຄວາມຈໍາລະດັບ byte
ການດໍາເນີນງານ, ດັ່ງນັ້ນການໂຫຼດ byte ທັງຫມົດ / ຮ້ານຕ້ອງໄດ້ຮັບການສັງເຄາະຈາກການໂຫຼດຄໍາ / store
ການດໍາເນີນງານ. ອັນນີ້ບໍ່ມີປະສິດຕິພາບ ແລະຈະສ້າງຄຳເຕືອນທີ່ຊີ້ບອກເຖິງ
ຜູ້ຂຽນໂປລແກລມວ່າພວກເຂົາຄວນຂຽນລະຫັດໃຫມ່ເພື່ອຫຼີກເວັ້ນການປະຕິບັດການ byte, ຫຼືເພື່ອກໍານົດເປົ້າຫມາຍ
ປະເພດ AE ທີ່ມີການສະຫນັບສະຫນູນຮາດແວທີ່ຈໍາເປັນ. ທາງເລືອກນີ້ເຮັດໃຫ້ການເຕືອນໄພ
ປິດ.

ພະລັງງານ PC ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ແມ່ນໄດ້ລະບຸໄວ້ພາຍໃຕ້

RL78 ທາງເລືອກໃນການ

- ຊິມ
ການເຊື່ອມໂຍງໃນຫ້ອງສະຫມຸດເປົ້າຫມາຍເພີ່ມເຕີມເພື່ອສະຫນັບສະຫນູນການດໍາເນີນງານພາຍໃນ simulator.

-mmul=ບໍ່ມີ
-mmul=g13
-mmul=rl78
ລະບຸປະເພດຂອງການຮອງຮັບການຄູນຮາດແວທີ່ຈະໃຊ້. ຄ່າເລີ່ມຕົ້ນແມ່ນ
"none", ເຊິ່ງໃຊ້ຟັງຊັນຄູນຂອງຊອບແວ. ທາງເລືອກ "g13" ແມ່ນສໍາລັບ
ຮາດແວ multiply/divide peripheral ຢູ່ໃນເປົ້າໝາຍ RL78/G13 ເທົ່ານັ້ນ. ທາງເລືອກ "rl78".
ແມ່ນສຳລັບການຄູນຮາດແວມາດຕະຖານທີ່ກຳນົດໄວ້ໃນຄູ່ມືຊອບແວ RL78.

IBM RS / 6000 ແລະ ພະລັງງານ PC ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ -m ທາງເລືອກແມ່ນຖືກກໍານົດສໍາລັບ IBM RS/6000 ແລະ PowerPC:

- ພະ​ລັງ​ງານ​
-mno ພະ​ລັງ​ງານ​
- ພະ​ລັງ​ງານ 2​
-mno-power2
-mpowerpc
-mno-powerpc
-mpowerpc-gpopt
-mno-powerpc-gpopt
-mpowerpc-gfxopt
-mno-powerpc-gfxopt
-mpowerpc64
-mno-powerpc64
-mmfcrf
-mno-mfcrf
-mpopcntb
-mno-popcntb
-mpopcntd
-mno-popcntd
-mfprnd
-mno-fprnd
-mcmpb
-mno-cmpb
-mmfpgpr
-mno-mfpgpr
-mhard-dfp
-mno-hard-dfp
GCC ສະຫນັບສະຫນູນສອງສະຖາປັດຕະຍະກໍາຊຸດຄໍາແນະນໍາທີ່ກ່ຽວຂ້ອງສໍາລັບ RS/6000 ແລະ PowerPC.
ໄດ້ POWER ຊຸດຄໍາແນະນໍາແມ່ນຄໍາແນະນໍາເຫຼົ່ານັ້ນທີ່ສະຫນັບສະຫນູນໂດຍ ແມ່ນ້ໍາ ຊຸດຊິບທີ່ໃຊ້
ໃນລະບົບ RS / 6000 ຕົ້ນສະບັບແລະ ພະລັງງານ PC ຊຸດຄໍາແນະນໍາແມ່ນສະຖາປັດຕະຍະກໍາຂອງ
Freescale MPC5xx, MPC6xx, MPC8xx microprocessors, ແລະ IBM 4xx, 6xx, ແລະ
microprocessors ຕິດຕາມ.

ທັງສະຖາປັດຕະຍະກຳບໍ່ແມ່ນສ່ວນຍ່ອຍຂອງອັນອື່ນ. ຢ່າງໃດກໍຕາມ, ມີຊຸດຍ່ອຍທົ່ວໄປຂະຫນາດໃຫຍ່
ຄໍາແນະນໍາທີ່ສະຫນັບສະຫນູນໂດຍທັງສອງ. ການລົງທະບຽນ MQ ແມ່ນລວມຢູ່ໃນໂປເຊດເຊີ
ສະຫນັບສະຫນູນສະຖາປັດຕະຍະກໍາ POWER.

ທ່ານໃຊ້ທາງເລືອກເຫຼົ່ານີ້ເພື່ອກໍານົດຄໍາແນະນໍາທີ່ມີຢູ່ໃນໂປເຊດເຊີຂອງທ່ານ
ກໍາລັງໃຊ້. ຄ່າເລີ່ມຕົ້ນຂອງຕົວເລືອກເຫຼົ່ານີ້ຖືກກຳນົດເມື່ອກຳນົດຄ່າ GCC.
ການ​ລະ​ບຸ -mcpu=cpu_type overrides ສະເພາະຂອງທາງເລືອກເຫຼົ່ານີ້. ພວກເຮົາ
ແນະນໍາໃຫ້ທ່ານໃຊ້ -mcpu=cpu_type ທາງເລືອກແທນທີ່ຈະເປັນທາງເລືອກທີ່ລະບຸໄວ້ຂ້າງເທິງ.

ໄດ້ - ພະ​ລັງ​ງານ​ ທາງເລືອກອະນຸຍາດໃຫ້ GCC ສ້າງຄໍາແນະນໍາທີ່ພົບເຫັນພຽງແຕ່ຢູ່ໃນ
ສະຖາປັດຕະຍະກໍາ POWER ແລະການນໍາໃຊ້ທະບຽນ MQ. ການລະບຸ - ພະ​ລັງ​ງານ 2​ implies -ພະລັງງານ ແລະ
ຍັງອະນຸຍາດໃຫ້ GCC ສ້າງຄໍາແນະນໍາທີ່ມີຢູ່ໃນສະຖາປັດຕະຍະກໍາ POWER2
ແຕ່ບໍ່ແມ່ນສະຖາປັດຕະຍະກຳ POWER ເດີມ.

ໄດ້ -mpowerpc ທາງເລືອກອະນຸຍາດໃຫ້ GCC ສ້າງຄໍາແນະນໍາທີ່ພົບເຫັນພຽງແຕ່ຢູ່ໃນ
ຊຸດຍ່ອຍ 32-bit ຂອງສະຖາປັດຕະຍະກຳ PowerPC. ການລະບຸ -mpowerpc-gpopt implies
-mpowerpc ແລະຍັງອະນຸຍາດໃຫ້ GCC ໃຊ້ຄໍາແນະນໍາສະຖາປັດຕະຍະກໍາ PowerPC ທາງເລືອກໃນ
ກຸ່ມຈຸດປະສົງທົ່ວໄປ, ລວມທັງຮາກສີ່ຫລ່ຽມທີ່ເລື່ອນໄດ້. ການລະບຸ
-mpowerpc-gfxopt implies -mpowerpc ແລະຍັງອະນຸຍາດໃຫ້ GCC ໃຊ້ PowerPC ທາງເລືອກ
ຄໍາແນະນໍາສະຖາປັດຕະຍະກໍາໃນກຸ່ມກາຟິກ, ລວມທັງການເລືອກຈຸດລອຍ.

ໄດ້ -mmfcrf ທາງເລືອກອະນຸຍາດໃຫ້ GCC ສ້າງການເຄື່ອນຍ້າຍຈາກພາກສະຫນາມລົງທະບຽນເງື່ອນໄຂ
ຄໍາແນະນໍາທີ່ປະຕິບັດຢູ່ໃນໂປເຊດເຊີ POWER4 ແລະໂປເຊດເຊີອື່ນໆທີ່ສະຫນັບສະຫນູນ
ສະຖາປັດຕະຍະກຳ PowerPC V2.01. ໄດ້ -mpopcntb ທາງເລືອກອະນຸຍາດໃຫ້ GCC ເພື່ອສ້າງ popcount
ແລະຄໍາແນະນໍາການປະເມີນເຊິ່ງກັນແລະກັນຂອງ FP ຄວາມຊັດເຈນສອງເທົ່າທີ່ປະຕິບັດຢູ່ໃນ POWER5
ໂປເຊດເຊີແລະໂປເຊດເຊີອື່ນໆທີ່ສະຫນັບສະຫນູນສະຖາປັດຕະຍະກໍາ PowerPC V2.02. ໄດ້
-mpopcntd ທາງເລືອກອະນຸຍາດໃຫ້ GCC ສ້າງຄໍາແນະນໍາ popcount ທີ່ປະຕິບັດຢູ່ໃນ
ໂປເຊດເຊີ POWER7 ແລະໂປເຊດເຊີອື່ນໆທີ່ສະຫນັບສະຫນູນສະຖາປັດຕະຍະກໍາ PowerPC V2.06.
ໄດ້ -mfprnd ທາງເລືອກອະນຸຍາດໃຫ້ GCC ສ້າງຮອບ FP ໄປຫາຄໍາແນະນໍາຈໍານວນເຕັມ
ປະຕິບັດຢູ່ໃນໂປເຊດເຊີ POWER5+ ແລະໂປເຊດເຊີອື່ນໆທີ່ສະຫນັບສະຫນູນ PowerPC
ສະຖາປັດຕະຍະກໍາ V2.03. ໄດ້ -mcmpb ທາງເລືອກອະນຸຍາດໃຫ້ GCC ສ້າງ bytes ປຽບທຽບ
ຄໍາແນະນໍາທີ່ປະຕິບັດຢູ່ໃນໂປເຊດເຊີ POWER6 ແລະໂປເຊດເຊີອື່ນໆທີ່ສະຫນັບສະຫນູນ
ສະຖາປັດຕະຍະກຳ PowerPC V2.05. ໄດ້ -mmfpgpr ທາງເລືອກອະນຸຍາດໃຫ້ GCC ສ້າງການເຄື່ອນໄຫວ FP
ໄປຫາ/ຈາກຄຳແນະນຳການລົງທະບຽນທົ່ວໄປທີ່ປະຕິບັດຢູ່ໃນໂປເຊດເຊີ POWER6X ແລະ
ໂປເຊດເຊີອື່ນໆທີ່ຮອງຮັບສະຖາປັດຕະຍະກຳ PowerPC V2.05 ຂະຫຍາຍ. ໄດ້ -mhard-dfp
ທາງເລືອກອະນຸຍາດໃຫ້ GCC ສ້າງຄໍາແນະນໍາຈຸດເລື່ອນເລກທົດສະນິຍົມທີ່ປະຕິບັດໃນ
ບາງໂປເຊດເຊີ POWER.

ໄດ້ -mpowerpc64 ທາງເລືອກອະນຸຍາດໃຫ້ GCC ສ້າງຄໍາແນະນໍາ 64-bit ເພີ່ມເຕີມທີ່
ໄດ້ຖືກພົບເຫັນຢູ່ໃນສະຖາປັດຕະຍະກໍາ PowerPC64 ເຕັມຮູບແບບແລະປະຕິບັດ GPRs ເປັນ 64-bit, doubleword
ປະລິມານ. GCC ເລີ່ມຕົ້ນເປັນ -mno-powerpc64.

ຖ້າທ່ານລະບຸທັງສອງ -mno ພະ​ລັງ​ງານ​ ແລະ -mno-powerpc, GCC ຈະໃຊ້ພຽງແຕ່ຄໍາແນະນໍາໃນ
ຊຸດຍ່ອຍທົ່ວໄປຂອງສະຖາປັດຕະຍະກໍາທັງສອງບວກກັບບາງການໂທແບບພິເສດ AIX ທົ່ວໄປ, ແລະ
ຈະບໍ່ໃຊ້ການລົງທະບຽນ MQ. ລະບຸທັງສອງ - ພະ​ລັງ​ງານ​ ແລະ -mpowerpc ອະນຸຍາດໃຫ້ GCC
ໃຊ້ຄໍາແນະນໍາໃດໆຈາກສະຖາປັດຕະຍະກໍາແລະອະນຸຍາດໃຫ້ນໍາໃຊ້ການລົງທະບຽນ MQ;
ລະບຸອັນນີ້ສໍາລັບ Motorola MPC601.

-mnew-mnemonics
- mold-mnemonic
ເລືອກ mnemonics ໃດທີ່ຈະໃຊ້ໃນລະຫັດ assembler ທີ່ສ້າງຂຶ້ນ. ກັບ -mnew-mnemonics,
GCC ໃຊ້ assembler mnemonics ທີ່ກຳນົດໄວ້ສຳລັບສະຖາປັດຕະຍະກຳ PowerPC. ກັບ
- mold-mnemonic ມັນໃຊ້ assembler mnemonics ທີ່ກໍານົດສໍາລັບສະຖາປັດຕະຍະກໍາ POWER.
ຄໍາແນະນໍາທີ່ກໍານົດຢູ່ໃນສະຖາປັດຕະຍະກໍາພຽງແຕ່ຫນຶ່ງ mnemonic; GCC ໃຊ້ມັນ
mnemonic ໂດຍບໍ່ຄໍານຶງເຖິງທາງເລືອກໃດເຫຼົ່ານີ້ຖືກລະບຸ.

GCC ກຳນົດຄ່າເລີ່ມຕົ້ນເປັນ mnemonics ທີ່ເໝາະສົມກັບສະຖາປັດຕະຍະກຳທີ່ໃຊ້ຢູ່. ການລະບຸ
-mcpu=cpu_type ບາງຄັ້ງ overrides ຄ່າຂອງທາງເລືອກເຫຼົ່ານີ້. ເວັ້ນເສຍແຕ່ວ່າທ່ານກໍາລັງກໍ່ສ້າງ
cross-compiler, ໂດຍປົກກະຕິທ່ານບໍ່ຄວນລະບຸ -mnew-mnemonics or
- mold-mnemonic, ແຕ່ຄວນຍອມຮັບຄ່າເລີ່ມຕົ້ນແທນ.

-mcpu=cpu_type
ກໍານົດປະເພດສະຖາປັດຕະຍະກໍາ, ລົງທະບຽນການນໍາໃຊ້, ທາງເລືອກຂອງ mnemonics, ແລະການກໍານົດເວລາຄໍາແນະນໍາ
ຕົວກໍານົດການສໍາລັບປະເພດເຄື່ອງຈັກ cpu_type. ຄຸນ​ຄ່າ​ສະ​ຫນັບ​ສະ​ຫນູນ​ສໍາ​ລັບ​ການ​ cpu_type ມີ 401, 403,
405, 405fp, 440, 440fp, 464, 464fp, 476, 476fp, 505, 601, 602, 603, 603, 604, 604,
620, 630, 740, 7400, 7450, 750, 801, 821, 823, 860, 970, 8540, a2, e300c2, e300c3,
e500mc, e500mc64, ec603e, G3, G4, G5, titan, ພະລັງງານ, ພະລັງງານ2, ພະລັງງານ3, ພະລັງງານ4, ພະລັງງານ5,
ພະລັງງານ 5+, ພະລັງງານ6, ພະລັງງານ 6x, ພະລັງງານ7, ທົ່ວໄປ, ພະລັງງານ, powerpc64, ແມ່ນ້ໍາ, ແມ່ນ້ ຳ1, ແມ່ນ້ ຳ2, csr,
ແລະ rs64.

-mcpu=ທົ່ວໄປ ເລືອກໂຮງງານຜະລິດທົ່ວໄປຢ່າງສົມບູນ. ລະຫັດທີ່ສ້າງຂຶ້ນພາຍໃຕ້ຕົວເລືອກນີ້
ຈະແລ່ນຢູ່ໃນໂປເຊດເຊີ POWER ຫຼື PowerPC ໃດ. GCC ຈະໃຊ້ພຽງແຕ່ຄໍາແນະນໍາໃນ
ຊຸດຍ່ອຍທົ່ວໄປຂອງສະຖາປັດຕະຍະກໍາທັງສອງ, ແລະຈະບໍ່ໃຊ້ທະບຽນ MQ. GCC ຖືວ່າ ກ
ຮູບແບບໂຮງງານຜະລິດທົ່ວໄປສໍາລັບຈຸດປະສົງກໍານົດເວລາ.

-mcpu=ພະລັງງານ, -mcpu=power2, -mcpu=powerpc, ແລະ -mcpu=powerpc64 ລະບຸພະລັງງານທົ່ວໄປ,
POWER2, ​​PowerPC 32-bit ບໍລິສຸດ (ເຊັ່ນ, ບໍ່ແມ່ນ MPC601), ແລະສະຖາປັດຕະຍະກຳ PowerPC 64-bit
ປະເພດເຄື່ອງຈັກ, ທີ່ມີຮູບແບບໂປເຊດເຊີທົ່ວໄປທີ່ເຫມາະສົມ, ຄາດວ່າສໍາລັບການກໍານົດເວລາ
ຈຸດປະສົງ.

ທາງເລືອກອື່ນລະບຸໂຮງງານຜະລິດສະເພາະ. ລະຫັດທີ່ສ້າງຂຶ້ນພາຍໃຕ້ຕົວເລືອກເຫຼົ່ານັ້ນ
ຈະເຮັດວຽກດີທີ່ສຸດໃນໂປເຊດເຊີນັ້ນ, ແລະອາດຈະບໍ່ແລ່ນກັບຄົນອື່ນ.

ໄດ້ -mcpu ທາງເລືອກອັດຕະໂນມັດເປີດຫຼືປິດຕົວເລືອກຕໍ່ໄປນີ້:

-maltivec -mfprnd -mhard-float -mmfcrf - ຫຼາຍ -mnew-mnemonics -mpopcntb
-mpopcntd - ພະ​ລັງ​ງານ​ - ພະ​ລັງ​ງານ 2​ -mpowerpc64 -mpowerpc-gpopt -mpowerpc-gfxopt
-msingle-float -mdouble-float -msimple-fpu -mstring - mmulhw -mdlmzb -mmfpgpr -mvsx

ທາງ​ເລືອກ​ທີ່​ກໍາ​ນົດ​ໄວ້​ສໍາ​ລັບ CPU ສະ​ເພາະ​ໃດ​ຫນຶ່ງ​ຈະ​ແຕກ​ຕ່າງ​ກັນ​ລະ​ຫວ່າງ​ສະ​ບັບ compiler​,
ຂຶ້ນກັບການຕັ້ງຄ່າອັນໃດທີ່ເບິ່ງຄືວ່າຈະຜະລິດລະຫັດທີ່ດີທີ່ສຸດສໍາລັບ CPU ນັ້ນ; ມັນບໍ່
ຈໍາເປັນຕ້ອງສະທ້ອນໃຫ້ເຫັນຄວາມສາມາດຕົວຈິງຂອງຮາດແວ. ຖ້າທ່ານຕ້ອງການຕັ້ງຄ່າ
ທາງ​ເລືອກ​ຂອງ​ບຸກ​ຄົນ​ທີ່​ມີ​ມູນ​ຄ່າ​ສະ​ເພາະ​ໃດ​ຫນຶ່ງ​, ທ່ານ​ອາດ​ຈະ​ລະ​ບຸ​ມັນ​ຫຼັງ​ຈາກ​ -mcpu ທາງເລືອກ,
ຄື -mcpu=970 -mno-altivec.

ໃນ AIX, ໄດ້ -maltivec ແລະ -mpowerpc64 ທາງ​ເລືອກ​ແມ່ນ​ບໍ່​ໄດ້​ເປີດ​ໃຊ້​ງານ​ຫຼື​ປິດ​ການ​ໃຊ້​ງານ​ໂດຍ​ -mcpu
ທາງເລືອກໃນປັດຈຸບັນເນື່ອງຈາກວ່າ AIX ບໍ່ໄດ້ຮັບການສະຫນັບສະຫນູນຢ່າງເຕັມທີ່ສໍາລັບທາງເລືອກເຫຼົ່ານີ້. ເຈົ້າອາດຈະ
ຍັງຄົງເປີດໃຊ້ງານ ຫຼືປິດການນຳໃຊ້ພວກມັນເປັນແຕ່ລະອັນຫາກທ່ານແນ່ໃຈວ່າມັນຈະໃຊ້ໄດ້ໃນຕົວຂອງທ່ານ
ສິ່ງແວດລ້ອມ.

-mtune=cpu_type
ກໍານົດຕົວກໍານົດການກໍານົດເວລາຄໍາແນະນໍາສໍາລັບປະເພດເຄື່ອງຈັກ cpu_type, ແຕ່ບໍ່ໄດ້ກໍານົດ
ປະເພດສະຖາປັດຕະຍະກໍາ, ລົງທະບຽນການນໍາໃຊ້, ຫຼືທາງເລືອກຂອງ mnemonic, ເປັນ -mcpu=cpu_type
ຈະ. ຄ່າດຽວກັນສໍາລັບ cpu_type ຖືກນໍາໃຊ້ສໍາລັບການ -mtune ເປັນສໍາລັບການ -mcpu. ຖ້າທັງສອງແມ່ນ
ລະບຸໄວ້, ລະຫັດທີ່ສ້າງຂຶ້ນຈະໃຊ້ຊຸດສະຖາປັດຕະຍະກຳ, ທະບຽນ ແລະ mnemonics
by -mcpu, ແຕ່ຕົວກໍານົດການກໍານົດເວລາທີ່ກໍານົດໄວ້ໂດຍ -mtune.

-mcmodel=ຂະໜາດນ້ອຍ
ສ້າງລະຫັດ PowerPC64 ສໍາລັບຕົວແບບຂະຫນາດນ້ອຍ: TOC ຖືກຈໍາກັດຢູ່ທີ່ 64k.

-mcmodel=ປານກາງ
ສ້າງລະຫັດ PowerPC64 ສໍາລັບຮູບແບບຂະຫນາດກາງ: TOC ແລະຂໍ້ມູນຄົງທີ່ອື່ນໆອາດຈະຂຶ້ນ
ຂະຫນາດທັງຫມົດ 4G.

-mcmodel=ໃຫຍ່
ສ້າງລະຫັດ PowerPC64 ສໍາລັບຮູບແບບຂະຫນາດໃຫຍ່: TOC ອາດຈະສູງເຖິງ 4G ໃນຂະຫນາດ. ອື່ນໆ
ຂໍ້​ມູນ​ແລະ​ລະ​ຫັດ​ແມ່ນ​ຈໍາ​ກັດ​ພຽງ​ແຕ່​ໂດຍ​ຊ່ອງ​ທີ່​ຢູ່ 64-bit​.

-maltivec
-mno-altivec
ສ້າງລະຫັດທີ່ໃຊ້ (ບໍ່ໃຊ້) ຄໍາແນະນໍາ AltiVec, ແລະຍັງເປີດການນໍາໃຊ້
ຟັງຊັນໃນຕົວທີ່ອະນຸຍາດໃຫ້ເຂົ້າເຖິງຊຸດຄໍາແນະນໍາ AltiVec ໂດຍກົງ.
ທ່ານອາດຈະຈໍາເປັນຕ້ອງໄດ້ກໍານົດ -mabi=altivec ເພື່ອປັບ ABI ປະຈຸບັນກັບ AltiVec ABI
ການຍົກລະດັບ.

-mvrsave
-mno-vrsave
ສ້າງຄໍາແນະນໍາ VRSAVE ເມື່ອສ້າງລະຫັດ AltiVec.

-mgen-cell-microcode
ສ້າງ​ຄໍາ​ແນະ​ນໍາ​ຈຸ​ລະ​ພາກ​ໂທລະ​ສັບ​ມື​ຖື​

-mwarn-cell-microcode
ຄຳເຕືອນເມື່ອຄຳສັ່ງໄມໂຄຣໂຄດຂອງເຊລຈະປ່ອຍອອກມາ. ຕົວຢ່າງຂອງ Cell
ຄໍາແນະນໍາ microcode ແມ່ນການປ່ຽນແປງທີ່ມີການປ່ຽນແປງ.

-msecure-plt
ສ້າງລະຫັດທີ່ອະນຸຍາດໃຫ້ ld ແລະ ld.so ກໍ່ສ້າງ executables ແລະຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນກັບ
ພາກສ່ວນທີ່ບໍ່ແມ່ນ exec .plt ແລະ .got. ນີ້ແມ່ນທາງເລືອກ PowerPC 32-bit SYSV ABI.

-mbss-plt
ສ້າງລະຫັດທີ່ໃຊ້ພາກສ່ວນ BSS .plt ທີ່ ld.so ຕື່ມຂໍ້ມູນໃສ່, ແລະຕ້ອງການ .plt ແລະ
.got ພາກສ່ວນທີ່ທັງຂຽນໄດ້ ແລະສາມາດປະຕິບັດໄດ້. ນີ້ແມ່ນ PowerPC 32-bit SYSV
ທາງເລືອກ ABI.

-misel
-mno-isel
ສະວິດນີ້ເປີດຫຼືປິດການຜະລິດຄໍາແນະນໍາ ISEL.

-misel=ແມ່ນ / ບໍ່
ສະວິດນີ້ຖືກຍົກເລີກການສະໜັບສະໜຸນແລ້ວ. ໃຊ້ -misel ແລະ -mno-isel ແທນທີ່ຈະເປັນ.

-mspe
-mno-spe
ສະວິດນີ້ເປີດ ຫຼືປິດການສ້າງຄໍາແນະນໍາ SPE simd.

- ຄູ່
-mno ຄູ່
ສະວິດນີ້ເປີດໃຊ້ງານ ຫຼືປິດການຜະລິດຄໍາແນະນໍາຊິມຄູ່.

-mspe=ແມ່ນ / ບໍ່
ຕົວເລືອກນີ້ຖືກປະຕິເສດ. ໃຊ້ -mspe ແລະ -mno-spe ແທນທີ່ຈະເປັນ.

-mvsx
-mno-vsx
ສ້າງລະຫັດທີ່ໃຊ້ (ບໍ່ໃຊ້) ຄໍາແນະນໍາ vector/scalar (VSX), ແລະເຊັ່ນດຽວກັນ
ເປີດການນຳໃຊ້ຟັງຊັນໃນຕົວທີ່ອະນຸຍາດໃຫ້ເຂົ້າເຖິງ VSX ໂດຍກົງໄດ້ຫຼາຍຂຶ້ນ
ຊຸດຄໍາແນະນໍາ.

-mfloat-gprs=ແມ່ນ/ດຽວ/ຄູ່/ບໍ່
-mfloat-gprs
ສະວິດນີ້ເປີດໃຊ້ງານຫຼືປິດການຜະລິດຂອງການດໍາເນີນງານຈຸດລອຍຢູ່ໃນ
ການລົງທະບຽນຈຸດປະສົງທົ່ວໄປສໍາລັບສະຖາປັດຕະຍະກໍາທີ່ສະຫນັບສະຫນູນມັນ.

ການໂຕ້ຖຽງ yes or ດຽວ ອະນຸຍາດໃຫ້ນໍາໃຊ້ຈຸດເລື່ອນຄວາມຊັດເຈນດຽວ
ການປະຕິບັດງານ.

ການໂຕ້ຖຽງ double ເຮັດໃຫ້ການນໍາໃຊ້ຈຸດລອຍຕົວແບບດຽວແລະສອງເທົ່າ
ການປະຕິບັດງານ.

ການໂຕ້ຖຽງ no ປິດການໃຊ້ງານຈຸດລອຍຢູ່ໃນທະບຽນຈຸດປະສົງທົ່ວໄປ.

ທາງເລືອກນີ້ແມ່ນມີຢູ່ໃນ MPC854x ເທົ່ານັ້ນ.

-m32
-m64
ສ້າງລະຫັດສໍາລັບສະພາບແວດລ້ອມ 32-bit ຫຼື 64-bit ຂອງ Darwin ແລະ SVR4 ເປົ້າຫມາຍ (ລວມທັງ
GNU/Linux). ສະພາບແວດລ້ອມ 32-bit ກໍານົດ int, ຍາວແລະ pointer ເປັນ 32 bits ແລະ
ສ້າງລະຫັດທີ່ເຮັດວຽກຢູ່ໃນ PowerPC variant ໃດ. ສະພາບແວດລ້ອມ 64-bit ກໍານົດ int
32 bits ແລະຍາວແລະຊີ້ໄປຫາ 64 bits, ແລະສ້າງລະຫັດສໍາລັບ PowerPC64, ສໍາລັບ.
-mpowerpc64.

-mful-toc
-mno-fp-in-toc
-mno-sum-in-toc
-ໜ້ອຍສຸດ-toc
ປັບປຸງແກ້ໄຂການສ້າງ TOC (ຕາຕະລາງເນື້ອໃນ), ເຊິ່ງຖືກສ້າງຂື້ນສໍາລັບທຸກໆ
ໄຟລ໌ທີ່ສາມາດປະຕິບັດໄດ້. ໄດ້ -mful-toc ທາງ​ເລືອກ​ແມ່ນ​ໄດ້​ຮັບ​ການ​ຄັດ​ເລືອກ​ໂດຍ​ການ​ເລີ່ມ​ຕົ້ນ​. ໃນກໍລະນີດັ່ງກ່າວ, GCC
ຈະຈັດສັນຢ່າງໜ້ອຍໜຶ່ງລາຍການ TOC ສຳລັບການອ້າງອີງຕົວແປທີ່ບໍ່ອັດຕະໂນມັດແຕ່ລະອັນ
ໃນ​ໂຄງ​ການ​ຂອງ​ທ່ານ​. GCC ຍັງຈະວາງຄ່າຄົງທີ່ຈຸດລອຍຢູ່ໃນ TOC. ແນວໃດກໍ່ຕາມ,
ມີພຽງແຕ່ 16,384 ລາຍການທີ່ມີຢູ່ໃນ TOC.

ຖ້າທ່ານໄດ້ຮັບຂໍ້ຄວາມສະແດງຂໍ້ຜິດພາດຂອງຕົວເຊື່ອມຕໍ່ທີ່ບອກວ່າທ່ານໄດ້ overflowed ທີ່ມີຢູ່
ພື້ນທີ່ TOC, ທ່ານສາມາດຫຼຸດຜ່ອນຈໍານວນພື້ນທີ່ TOC ທີ່ໃຊ້ກັບ -mno-fp-in-toc ແລະ
-mno-sum-in-toc ຕົວເລືອກ -mno-fp-in-toc ປ້ອງກັນບໍ່ໃຫ້ GCC ວາງຈຸດລອຍ
ຄົງທີ່ໃນ TOC ແລະ -mno-sum-in-toc ບັງຄັບໃຫ້ GCC ສ້າງລະຫັດເພື່ອຄິດໄລ່
ຜົນລວມຂອງທີ່ຢູ່ ແລະຄ່າຄົງທີ່ໃນເວລາແລ່ນ ແທນທີ່ຈະເອົາຜົນລວມນັ້ນເຂົ້າໄປໃນ TOC.
ທ່ານອາດຈະລະບຸຫນຶ່ງຫຼືທັງສອງທາງເລືອກເຫຼົ່ານີ້. ແຕ່ລະຄົນເຮັດໃຫ້ GCC ຜະລິດຫຼາຍ
ລະຫັດຊ້າກວ່າເລັກນ້ອຍແລະໃຫຍ່ກວ່າໂດຍຄ່າໃຊ້ຈ່າຍຂອງການອະນຸລັກພື້ນທີ່ TOC.

ຖ້າທ່ານຍັງໃຊ້ພື້ນທີ່ຫວ່າງຢູ່ໃນ TOC ເຖິງແມ່ນວ່າທ່ານຈະລະບຸທັງສອງທາງເລືອກເຫຼົ່ານີ້,
ລະບຸ -ໜ້ອຍສຸດ-toc ແທນ. ທາງເລືອກນີ້ເຮັດໃຫ້ GCC ເຮັດໃຫ້ມີການເຂົ້າ TOC ດຽວເທົ່ານັ້ນ
ທຸກໆໄຟລ໌. ເມື່ອທ່ານລະບຸທາງເລືອກນີ້, GCC ຈະຜະລິດລະຫັດທີ່ຊ້າກວ່າແລະ
ໃຫຍ່ກວ່າແຕ່ໃຊ້ພື້ນທີ່ TOC ໜ້ອຍທີ່ສຸດ. ທ່ານອາດຈະຕ້ອງການໃຊ້ທາງເລືອກນີ້
ພຽງແຕ່ຢູ່ໃນໄຟລ໌ທີ່ມີລະຫັດປະຕິບັດຫນ້ອຍລົງເລື້ອຍໆ.

-maix64
-maix32
ເປີດໃຊ້ 64-bit AIX ABI ແລະສົນທິສັນຍາການໂທ: 64-bit pointers, 64-bit "long" type, ແລະ
ພື້ນຖານໂຄງລ່າງທີ່ຈໍາເປັນເພື່ອສະຫນັບສະຫນູນພວກເຂົາ. ການລະບຸ -maix64 implies -mpowerpc64 ແລະ
-mpowerpc, ໃນຂະນະທີ່ -maix32 ປິດການໃຊ້ງານ ABI 64-bit ແລະຫມາຍຄວາມວ່າ -mno-powerpc64. GCC
ເລີ່ມຕົ້ນເປັນ -maix32.

-mxl-compat
-mno-xl-compat
ຜະລິດລະຫັດທີ່ສອດຄ່ອງຫຼາຍກັບ IBM XL compiler semantics ເມື່ອໃຊ້ AIX-
ABI ເຂົ້າກັນໄດ້. ຜ່ານການໂຕ້ແຍ້ງຈຸດທີ່ລອຍຕົວໄປຫາໜ້າທີ່ແບບຕົ້ນແບບນອກເໜືອໄປຈາກ
ລົງທະບຽນພື້ນທີ່ບັນທຶກ (RSA) ໃນ stack ນອກເຫນືອຈາກການໂຕ້ຖຽງ FPRs. ຢ່າສົມມຸດ
ຕົວເລກສອງເທົ່າທີ່ສຳຄັນທີ່ສຸດໃນມູນຄ່າຄູ່ຍາວ 128-bit ແມ່ນຖືກມົນຢ່າງຖືກຕ້ອງເມື່ອ
ການປຽບທຽບຄ່າແລະການແປງເປັນສອງເທົ່າ. ໃຊ້ຊື່ສັນຍາລັກ XL ສໍາລັບຄູ່ຍາວ
ສະຫນັບສະຫນູນປົກກະຕິ.

ສົນທິສັນຍາການໂທຫາ AIX ໄດ້ຖືກຂະຫຍາຍອອກແຕ່ບໍ່ໄດ້ບັນທຶກໃນເບື້ອງຕົ້ນເພື່ອຈັດການ
ກໍລະນີ K&R C ທີ່ບໍ່ແນ່ນອນຂອງການເອີ້ນຟັງຊັນທີ່ເອົາທີ່ຢູ່ຂອງການໂຕ້ຖຽງຂອງມັນກັບ
ການໂຕ້ຖຽງຫນ້ອຍກວ່າການປະກາດ. IBM XL compilers ເຂົ້າເຖິງການໂຕ້ຖຽງຈຸດທີ່ເລື່ອນໄດ້
ບໍ່ເຫມາະໃນ RSA ຈາກ stack ໃນເວລາທີ່ subroutine ໄດ້ຖືກລວບລວມໂດຍບໍ່ມີການ
ການເພີ່ມປະສິດທິພາບ. ເນື່ອງຈາກວ່າສະເຫມີເກັບຮັກສາການໂຕ້ຖຽງຈຸດລອຍຢູ່ໃນ stack ແມ່ນ
ບໍ່ມີປະສິດທິພາບແລະບໍ່ຄ່ອຍຈໍາເປັນ, ທາງເລືອກນີ້ບໍ່ໄດ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນແລະພຽງແຕ່ເປັນ
ມີຄວາມຈໍາເປັນໃນເວລາທີ່ໂທຫາ subroutines ລວບລວມໂດຍ IBM XL compilers ໂດຍບໍ່ມີການເພີ່ມປະສິດທິພາບ.

-mpe
ສະຫນັບສະຫນູນ IBM RS / 6000 SP ຂະຫນານ ສະພາບແວດລ້ອມ (PE). ເຊື່ອມຕໍ່ແອັບພລິເຄຊັນທີ່ຂຽນເພື່ອໃຊ້
ຂໍ້ຄວາມຜ່ານດ້ວຍລະຫັດເລີ່ມຕົ້ນພິເສດເພື່ອໃຫ້ແອັບພລິເຄຊັນສາມາດແລ່ນໄດ້. ໄດ້
ລະບົບຕ້ອງມີການຕິດຕັ້ງ PE ໃນສະຖານທີ່ມາດຕະຖານ (/usr/lpp/ppe.poe/), ຫຼື
ຂໍ້ກໍາຫນົດ ໄຟລ໌ຕ້ອງໄດ້ຮັບການ overridden ກັບ -spec= ທາງ​ເລືອກ​ທີ່​ຈະ​ລະ​ບຸ​ທີ່​ເຫມາະ​ສົມ​
ສະຖານທີ່ໄດເລກະທໍລີ. ສະພາບແວດລ້ອມຂະຫນານບໍ່ສະຫນັບສະຫນູນກະທູ້, ດັ່ງນັ້ນ -mpe
ທາງ​ເລືອກ​ແລະ​ - ກະທູ້ ທາງເລືອກແມ່ນບໍ່ເຂົ້າກັນໄດ້.

-malign-natural
-malign-power
ໃນ AIX, 32-bit Darwin, ແລະ 64-bit PowerPC GNU/Linux, ທາງເລືອກ -malign-natural
overrides ການ​ຈັດ​ຕັ້ງ​ທີ່​ກໍາ​ນົດ​ໄວ້ ABI ຂອງ​ປະ​ເພດ​ຂະ​ຫນາດ​ໃຫຍ່​, ເຊັ່ນ​: ຄູ່​ຈຸດ​ທີ່​ເລື່ອນ​ໄດ້​,
ບົນ​ພື້ນ​ຖານ​ຂະ​ໜາດ​ຕາມ​ຂະ​ໜາດ​ທຳ​ມະ​ຊາດ​ຂອງ​ເຂົາ​ເຈົ້າ. ທາງເລືອກ -malign-power ແນະນໍາ GCC ກັບ
ປະຕິບັດຕາມກົດລະບຽບການຈັດຕໍາແຫນ່ງທີ່ລະບຸໂດຍ ABI. GCC ວາງໄວ້ຕາມມາດຕະຖານມາດຕະຖານ
ກໍານົດໄວ້ໃນ ABI.

ໃນ Darwin 64-bit, ການສອດຄ່ອງທໍາມະຊາດແມ່ນຄ່າເລີ່ມຕົ້ນ, ແລະ -malign-power ບໍ່​ແມ່ນ
ສະຫນັບສະຫນູນ.

-msoft-float
-mhard-float
ສ້າງລະຫັດທີ່ບໍ່ໃຊ້ (ໃຊ້) ຊຸດລົງທະບຽນຈຸດລອຍ. ຊອບແວ
emulation ຈຸດລອຍແມ່ນສະຫນອງໃຫ້ຖ້າຫາກວ່າທ່ານໃຊ້ -msoft-float ທາງເລືອກ, ແລະຜ່ານ
ທາງເລືອກກັບ GCC ເມື່ອເຊື່ອມຕໍ່.

-msingle-float
-mdouble-float
ສ້າງລະຫັດສໍາລັບການປະຕິບັດງານຈຸດລອຍຕົວແບບດຽວ ຫຼືສອງເທົ່າ.
-mdouble-float implies -msingle-float.

-msimple-fpu
ຢ່າສ້າງຄໍາແນະນໍາ sqrt ແລະ div ສໍາລັບຫນ່ວຍງານຈຸດເລື່ອນຂອງຮາດແວ.

-mfpu
ລະບຸປະເພດຂອງຫົວໜ່ວຍຈຸດລອຍ. ຄ່າທີ່ຖືກຕ້ອງແມ່ນ sp_lite (ທຽບເທົ່າກັບ
-msingle-float -msimple-fpu), dp_lite (ທຽບເທົ່າກັບ -mdouble-float -msimple-fpu),
sp_full (ເທົ່າກັບ -msingle-float), ແລະ dp_full (ເທົ່າກັບ -mdouble-float).

-mxilinx-fpu
ປະຕິບັດການເພີ່ມປະສິດທິພາບສໍາລັບຫນ່ວຍບໍລິການຈຸດລອຍຢູ່ໃນ Xilinx PPC 405/440.

- ຫຼາຍ
-mno-ຫຼາຍ
ສ້າງລະຫັດທີ່ໃຊ້ (ບໍ່ໃຊ້) ການໂຫຼດຄໍາແນະນໍາຄໍາສັບຕ່າງໆແລະ
ເກັບຮັກສາຄໍາແນະນໍາຫຼາຍຄໍາ. ຄໍາແນະນໍາເຫຼົ່ານີ້ແມ່ນສ້າງໂດຍຄ່າເລີ່ມຕົ້ນໃນ
ລະບົບພະລັງງານ, ແລະບໍ່ໄດ້ສ້າງຂຶ້ນໃນລະບົບ PowerPC. ຢ່າໃຊ້ - ຫຼາຍ ກ່ຽວ​ກັບ​ພຽງ​ເລັກ​ນ້ອຍ -
endian PowerPC ລະບົບ, ເນື່ອງຈາກວ່າຄໍາແນະນໍາເຫຼົ່ານັ້ນບໍ່ເຮັດວຽກໃນເວລາທີ່ໂຮງງານຜະລິດຢູ່ໃນ
ໂຫມດນ້ອຍ-endian. ຂໍ້ຍົກເວັ້ນແມ່ນ PPC740 ແລະ PPC750 ທີ່ອະນຸຍາດໃຫ້ເຫຼົ່ານີ້
ຄໍາແນະນໍາໃນຮູບແບບ little-endian.

-mstring
-mno-string
ສ້າງລະຫັດທີ່ໃຊ້ (ບໍ່ໃຊ້) ຄໍາແນະນໍາການໂຫຼດແລະຮ້ານ
ຄໍາ​ແນະ​ນໍາ​ຄໍາ​ສັບ​ສະ​ແດງ​ໃຫ້​ເຫັນ​ເພື່ອ​ຊ່ວຍ​ປະ​ຢັດ​ການ​ລົງ​ທະ​ບຽນ​ຫຼາຍ​ແລະ​ເຮັດ​ການ​ເຄື່ອນ​ຍ້າຍ block ຂະ​ຫນາດ​ນ້ອຍ​. ເຫຼົ່ານີ້
ຄໍາ​ແນະ​ນໍາ​ແມ່ນ​ໄດ້​ຖືກ​ສ້າງ​ຂຶ້ນ​ຕາມ​ຄ່າ​ເລີ່ມ​ຕົ້ນ​ໃນ​ລະ​ບົບ POWER​, ແລະ​ບໍ່​ໄດ້​ຖືກ​ສ້າງ​ຂຶ້ນ​ໃນ PowerPC​
ລະບົບ. ຢ່າໃຊ້ -mstring ກ່ຽວກັບລະບົບ PowerPC ເລັກນ້ອຍ, ນັບຕັ້ງແຕ່ນັ້ນ
ຄໍາແນະນໍາບໍ່ເຮັດວຽກເມື່ອໂປເຊດເຊີຢູ່ໃນຮູບແບບພຽງເລັກນ້ອຍ. ຂໍ້ຍົກເວັ້ນ
ແມ່ນ PPC740 ແລະ PPC750 ທີ່ອະນຸຍາດໃຫ້ຄໍາແນະນໍາເຫຼົ່ານີ້ໃນຮູບແບບພຽງເລັກນ້ອຍ endian.

- ການ​ປັບ​ປຸງ​
-mno-ການ​ປັບ​ປຸງ​
ສ້າງລະຫັດທີ່ໃຊ້ (ບໍ່ໃຊ້) ການໂຫຼດຫຼືເກັບຮັກສາຄໍາແນະນໍາທີ່ປັບປຸງ
ລົງທະບຽນພື້ນຖານໄປຫາທີ່ຢູ່ຂອງສະຖານທີ່ຫນ່ວຍຄວາມຈໍາທີ່ຄິດໄລ່. ຄໍາແນະນໍາເຫຼົ່ານີ້
ຖືກສ້າງຂື້ນໂດຍຄ່າເລີ່ມຕົ້ນ. ຖ້າທ່ານໃຊ້ -mno-ການ​ປັບ​ປຸງ​, ມີປ່ອງຢ້ຽມຂະຫນາດນ້ອຍລະຫວ່າງ
ເວລາທີ່ຕົວຊີ້ stack ຖືກປັບປຸງແລະທີ່ຢູ່ຂອງກອບທີ່ຜ່ານມາແມ່ນ
ເກັບຮັກສາໄວ້, ຊຶ່ງຫມາຍຄວາມວ່າລະຫັດທີ່ຍ່າງເຟຣມ stack ຂ້າມ interrupts ຫຼືສັນຍານອາດຈະ
ໄດ້ຮັບຂໍ້ມູນເສຍຫາຍ.

-mavoid-indexed-addresses
-mno-avoid-indexed-addresses
ສ້າງລະຫັດທີ່ພະຍາຍາມຫຼີກລ້ຽງ (ບໍ່ຫຼີກເວັ້ນ) ການນໍາໃຊ້ການໂຫຼດຫຼືເກັບຮັກສາທີ່ຖືກດັດສະນີ
ຄໍາແນະນໍາ. ຄໍາແນະນໍາເຫຼົ່ານີ້ສາມາດຖືກລົງໂທດປະສິດທິພາບໃນໂປເຊດເຊີ Power6
ໃນບາງສະຖານະການ, ເຊັ່ນເມື່ອກ້າວຜ່ານອາເຣຂະຫນາດໃຫຍ່ທີ່ຂ້າມ 16M
ເຂດແດນ. ຕົວເລືອກນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນເມື່ອຕັ້ງເປົ້າໝາຍໃສ່ Power6 ແລະປິດໃຊ້ງານ
ຖ້າບໍ່ດັ່ງນັ້ນ.

-mfused-madd
-mno-fused-madd
ສ້າງລະຫັດທີ່ໃຊ້ (ບໍ່ໃຊ້) ຈຸດລອຍຕົວຄູນ ແລະສະສົມ
ຄໍາແນະນໍາ. ຄໍາ​ແນະ​ນໍາ​ເຫຼົ່າ​ນີ້​ແມ່ນ​ໄດ້​ຖືກ​ສ້າງ​ຕັ້ງ​ຂຶ້ນ​ໂດຍ​ຄ່າ​ເລີ່ມ​ຕົ້ນ​ຖ້າ​ຫາກ​ວ່າ​ຮາດ​ແວ​ຈຸດ​ທີ່​ເລື່ອນ​ໄດ້​
ຖືກນໍາໃຊ້. ຂຶ້ນກັບເຄື່ອງຈັກ -mfused-madd ທາງ​ເລືອກ​ໃນ​ປັດ​ຈຸ​ບັນ​ມີ​ແຜນ​ທີ່​ເຄື່ອງ​.
ອິສະລະ -ffp-contract=ໄວ ທາງເລືອກ, ແລະ -mno-fused-madd ແຜນທີ່ແມ່ນ
-ffp-contract=ປິດ.

- mmulhw
-mno-mulhw
ສ້າງລະຫັດທີ່ໃຊ້ (ບໍ່ໃຊ້) ເຄິ່ງຫນຶ່ງຄໍາຄູນແລະຄູນສະສົມ
ຄໍາແນະນໍາກ່ຽວກັບໂປເຊດເຊີ IBM 405, 440, 464 ແລະ 476. ຄໍາແນະນໍາເຫຼົ່ານີ້ແມ່ນ
ສ້າງຂຶ້ນໂດຍຄ່າເລີ່ມຕົ້ນເມື່ອຕັ້ງເປົ້າໝາຍໃສ່ໂປເຊດເຊີເຫຼົ່ານັ້ນ.

-mdlmzb
-mno-dlmzb
ສ້າງລະຫັດທີ່ໃຊ້ (ບໍ່ໃຊ້) string-search dlmzb ຄໍາແນະນໍາກ່ຽວກັບ IBM
405, 440, 464 ແລະ 476 ໂຮງງານຜະລິດ. ຄໍາແນະນໍານີ້ຖືກສ້າງຂື້ນໂດຍຄ່າເລີ່ມຕົ້ນເມື່ອ
ການກໍານົດເປົ້າຫມາຍຂອງໂປເຊດເຊີເຫຼົ່ານັ້ນ.

-mno-bit-align
-mbit-align
ໃນລະບົບ V.4 ແລະລະບົບ PowerPC ທີ່ຝັງໄວ້ບໍ່ (ເຮັດ) ໂຄງສ້າງບັງຄັບແລະສະຫະພັນ
ທີ່ມີ bit-fields ທີ່ຈະສອດຄ່ອງກັບປະເພດພື້ນຖານຂອງ bit-field.

ຕົວຢ່າງ, ໂດຍຄ່າເລີ່ມຕົ້ນໂຄງສ້າງທີ່ປະກອບດ້ວຍບໍ່ມີຫຍັງແຕ່ 8 "unsigned" bit-fields ຂອງ
ຄວາມຍາວ 1 ແມ່ນສອດຄ່ອງກັບຂອບເຂດ 4-byte ແລະມີຂະຫນາດຂອງ 4 bytes. ໂດຍການນໍາໃຊ້
-mno-bit-align, ໂຄງສ້າງແມ່ນສອດຄ່ອງກັບຂອບເຂດ 1-byte ແລະເປັນ 1 byte ໃນຂະຫນາດ.

-mno-strict-align
-mstrict-align
ໃນລະບົບ V.4 ແລະລະບົບ PowerPC ທີ່ຝັງໄວ້ບໍ່ (ເຮັດ) ສົມມຸດວ່າຫນ່ວຍຄວາມຈໍາທີ່ບໍ່ສອດຄ່ອງກັນ
ການອ້າງອີງຈະຖືກຈັດການໂດຍລະບົບ.

- ສາມາດຍ້າຍໄດ້
-mno-relocateable
ສ້າງລະຫັດທີ່ອະນຸຍາດໃຫ້ (ບໍ່ອະນຸຍາດໃຫ້) ການປະຕິບັດແບບຄົງທີ່ທີ່ຈະຖືກຍ້າຍໄປ a
ທີ່ຢູ່ຕ່າງກັນໃນເວລາແລ່ນ. ຕົວໂຫຼດລະບົບ PowerPC ແບບຝັງແບບງ່າຍໆຄວນ
ຍ້າຍເນື້ອຫາທັງໝົດຂອງ ".got2" ແລະ 4-byte ທີ່ຢູ່ໃນລາຍການ ".fixup"
ພາກ, ຕາຕະລາງຂອງທີ່ຢູ່ 32 ບິດທີ່ສ້າງຂຶ້ນໂດຍທາງເລືອກນີ້. ເພື່ອເຮັດສິ່ງນີ້, ທັງຫມົດ
ວັດຖຸທີ່ເຊື່ອມຕໍ່ກັນຕ້ອງຖືກລວບລວມດ້ວຍ - ສາມາດຍ້າຍໄດ້ or -mrelocatable-lib.
- ສາມາດຍ້າຍໄດ້ ລະຫັດຈັດວາງ stack ກັບຂອບເຂດ 8-byte.

-mrelocatable-lib
-mno-relocateable-lib
ຄື - ສາມາດຍ້າຍໄດ້, -mrelocatable-lib ສ້າງພາກສ່ວນ ".fixup" ເພື່ອອະນຸຍາດໃຫ້ static
executables ທີ່ຈະຍ້າຍອອກໃນເວລາທີ່ດໍາເນີນການ, ແຕ່ -mrelocatable-lib ບໍ່ໄດ້ໃຊ້
ການຈັດວາງ stack ຂະຫນາດນ້ອຍກວ່າຂອງ - ສາມາດຍ້າຍໄດ້. ວັດຖຸທີ່ລວບລວມດ້ວຍ -mrelocatable-lib ອາດຈະ
ໄດ້​ຮັບ​ການ​ເຊື່ອມ​ຕໍ່​ກັບ​ວັດ​ຖຸ​ປະ​ກອບ​ດ້ວຍ​ການ​ປະ​ສົມ​ປະ​ສານ​ໃດ​ຫນຶ່ງ​ - ສາມາດຍ້າຍໄດ້ ຕົວເລືອກ

-mno-toc
-mtoc
ໃນລະບົບ V.4 ແລະລະບົບ PowerPC ທີ່ຝັງໄວ້ບໍ່ (ເຮັດ) ສົມມຸດວ່າການລົງທະບຽນ 2 ມີ
ຕົວຊີ້ໄປຫາພື້ນທີ່ທົ່ວໂລກຊີ້ໄປຫາທີ່ຢູ່ທີ່ໃຊ້ໃນໂປຣແກຣມ.

- ໜ້ອຍ
-mlittle-endian
ໃນລະບົບ V.4 ແລະລະບົບ PowerPC ທີ່ຝັງໄວ້ຈະລວບລວມລະຫັດສໍາລັບໂປເຊດເຊີໃນພຽງເລັກນ້ອຍ.
ໂໝດ endian. ໄດ້ -mlittle-endian ທາງເລືອກແມ່ນຄືກັນກັບ - ໜ້ອຍ.

- ໃຫຍ່
-mbig-endian
ໃນລະບົບ V.4 ແລະລະບົບ PowerPC ຝັງຕົວລວບລວມລະຫັດສໍາລັບໂປເຊດເຊີໃນຂະຫນາດໃຫຍ່.
ໂໝດ endian. ໄດ້ -mbig-endian ທາງເລືອກແມ່ນຄືກັນກັບ - ໃຫຍ່.

-mdynamic-no-pic
ໃນລະບົບ Darwin ແລະ Mac OS X, ລວບລວມລະຫັດເພື່ອໃຫ້ມັນບໍ່ສາມາດຍ້າຍໄດ້, ແຕ່ວ່າ
ການອ້າງອີງພາຍນອກຂອງມັນແມ່ນສາມາດຍ້າຍໄດ້. ລະຫັດຜົນໄດ້ຮັບແມ່ນເຫມາະສົມສໍາລັບ
ແອັບພລິເຄຊັນ, ແຕ່ບໍ່ແມ່ນຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນ.

-msingle-pic-base
ປະຕິບັດການລົງທະບຽນທີ່ໃຊ້ສໍາລັບທີ່ຢູ່ PIC ເປັນການອ່ານເທົ່ານັ້ນ, ແທນທີ່ຈະໂຫລດມັນຢູ່ໃນ
prologue ສໍາລັບແຕ່ລະຫນ້າທີ່. ລະບົບເວລາແລ່ນແມ່ນຮັບຜິດຊອບສໍາລັບການເລີ່ມຕົ້ນນີ້
ລົງທະບຽນດ້ວຍມູນຄ່າທີ່ເຫມາະສົມກ່ອນທີ່ຈະເລີ່ມຕົ້ນການປະຕິບັດ.

-mprioritize-restricted-insns=ບູລິມະສິດ
ທາງ​ເລືອກ​ນີ້​ຄວບ​ຄຸມ​ບູ​ລິ​ມະ​ສິດ​ທີ່​ຖືກ​ມອບ​ຫມາຍ​ໃຫ້​ຈໍາ​ກັດ dispatch-slot​
ຄໍາແນະນໍາໃນລະຫວ່າງການກໍານົດເວລາທີສອງ. ການໂຕ້ຖຽງ ບູລິມະສິດ ເອົາມູນຄ່າ
0/1/2 ມອບໝາຍ no/highest/second-highest ບູລິມະສິດໃນການສົ່ງສະລັອດຕິງຖືກຈໍາກັດ
ຄໍາແນະນໍາ.

-msched-costly-dep=dependence_type
ທາງ​ເລືອກ​ນີ້​ຄວບ​ຄຸມ​ການ​ເພິ່ງ​ພາ​ອາ​ໄສ​ແມ່ນ​ຖື​ວ່າ​ຄ່າ​ໃຊ້​ຈ່າຍ​ໂດຍ​ເປົ້າ​ຫມາຍ​ໃນ​ລະ​ຫວ່າງ​ການ
ການ​ກໍາ​ນົດ​ເວ​ລາ​ຄໍາ​ແນະ​ນໍາ​. ການໂຕ້ຖຽງ dependence_type ໃຊ້ເວລາຫນຶ່ງຕໍ່ໄປນີ້
ຄຸນຄ່າ: no: ບໍ່​ມີ​ການ​ເພິ່ງ​ພາ​ອາ​ໄສ​ແມ່ນ​ຄ່າ​ໃຊ້​ຈ່າຍ​, ທັງຫມົດ: ການ​ເພິ່ງ​ພາ​ອາ​ໄສ​ທັງ​ຫມົດ​ແມ່ນ​ຄ່າ​ໃຊ້​ຈ່າຍ​,
true_store_to_load: ການເອື່ອຍອີງທີ່ແທ້ຈິງຈາກຮ້ານທີ່ຈະໂຫຼດແມ່ນຄ່າໃຊ້ຈ່າຍ, store_to_load: any
ການເອື່ອຍອີງຈາກຮ້ານໃນການໂຫຼດແມ່ນມີຄ່າໃຊ້ຈ່າຍຫຼາຍ, ຈໍານວນ: ການເອື່ອຍອີງໃດໆທີ່ latency >=
ຈໍານວນ ແມ່ນຄ່າໃຊ້ຈ່າຍ.

-minsert-sched-nops=ໂຄງການ
ໂຕເລືອກນີ້ຄວບຄຸມວ່າຈະໃຊ້ລະບົບການແຊກ nop ໃດໃນລະຫວ່າງທີສອງ
ກໍານົດເວລາຜ່ານ. ການໂຕ້ຖຽງ ໂຄງການ ເອົາໜຶ່ງໃນຄ່າຕໍ່ໄປນີ້: no: ຢ່າ
ໃສ່ nops. pad: pad ກັບ nops ກຸ່ມການຈັດສົ່ງທີ່ມີບັນຫາຊ່ອງຫວ່າງ,
ອີງຕາມການຈັດກຸ່ມຂອງຕາຕະລາງ. regroup_exact: ໃສ່ nops ເພື່ອບັງຄັບຄ່າໃຊ້ຈ່າຍ
insns ຂຶ້ນກັບເປັນກຸ່ມແຍກຕ່າງຫາກ. ສຽບ nops ຫຼາຍເທົ່າທີ່ຕ້ອງການເພື່ອບັງຄັບ
insn ກັບກຸ່ມໃຫມ່, ອີງຕາມການຈັດກຸ່ມຂອງໂຮງງານຜະລິດຄາດຄະເນ. ຈໍານວນ: ໃສ່
nops ເພື່ອບັງຄັບ insns ທີ່ຂຶ້ນກັບຄ່າໃຊ້ຈ່າຍເຂົ້າໄປໃນກຸ່ມແຍກຕ່າງຫາກ. ແຊກ ຈໍານວນ nops ກັບ
ບັງຄັບ insn ໄປຫາກຸ່ມໃຫມ່.

-mcall-sysv
ໃນລະບົບ V.4 ແລະລະບົບ PowerPC ທີ່ຝັງໄວ້ລວບລວມລະຫັດໂດຍໃຊ້ສົນທິສັນຍາການໂທທີ່
ຍຶດຫມັ້ນກັບຮ່າງຂອງເດືອນມີນາ 1995 ຂອງລະບົບ V Application Binary Interface, PowerPC
ໂປເຊດເຊີເສີມ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນເວັ້ນເສຍແຕ່ທ່ານຈະຕັ້ງຄ່າ GCC ໂດຍໃຊ້
powerpc-*-eabiaix.

-mcall-sysv-eabi
-mcall-eabi
ລະບຸທັງສອງ -mcall-sysv ແລະ -meabi ຕົວເລືອກ

-mcall-sysv-noeabi
ລະບຸທັງສອງ -mcall-sysv ແລະ -mno-eabi ຕົວເລືອກ

-mcall-aixdesc
ໃນລະບົບ V.4 ແລະລະບົບ PowerPC ທີ່ຝັງໄວ້ລວບລວມລະຫັດສໍາລັບລະບົບປະຕິບັດການ AIX.

-mcall-linux
ໃນລະບົບ V.4 ແລະລະບົບ PowerPC ທີ່ຝັງໄວ້ລວບລວມລະຫັດສໍາລັບ GNU ທີ່ອີງໃສ່ Linux
ລະບົບ.

-mcall-freebsd
ໃນລະບົບ V.4 ແລະລະບົບ PowerPC ທີ່ຝັງໄວ້ລວບລວມລະຫັດສໍາລັບການປະຕິບັດງານ FreeBSD
ລະບົບ.

-mcall-netbsd
ໃນລະບົບ V.4 ແລະລະບົບ PowerPC ທີ່ຝັງໄວ້ຈະລວບລວມລະຫັດສໍາລັບການປະຕິບັດງານ NetBSD
ລະບົບ.

-mcall-openbsd
ໃນລະບົບ V.4 ແລະລະບົບ PowerPC ທີ່ຝັງໄວ້ລວບລວມລະຫັດສໍາລັບການປະຕິບັດງານ OpenBSD
ລະບົບ.

-maix-struct-return
ສົ່ງຄືນໂຄງສ້າງທັງໝົດໃນໜ່ວຍຄວາມຈຳ (ຕາມທີ່ກຳນົດໄວ້ໂດຍ AIX ABI).

-msvr4-struct-return
ກັບຄືນໂຄງສ້າງທີ່ນ້ອຍກວ່າ 8 bytes ໃນທະບຽນ (ຕາມທີ່ລະບຸໄວ້ໂດຍ SVR4 ABI).

-mabi=ປະເພດ Abi
ຂະຫຍາຍ ABI ປັດຈຸບັນດ້ວຍການຂະຫຍາຍສະເພາະ, ຫຼືເອົາສ່ວນຂະຫຍາຍດັ່ງກ່າວອອກ. ຖືກຕ້ອງ
ຄຸນຄ່າແມ່ນ Altivec, no-altivec, sp, no-spe, ibmlongdouble, ieeelong double.

-mabi=spe
ຂະຫຍາຍ ABI ປະຈຸບັນດ້ວຍການຂະຫຍາຍ SPE ABI. ນີ້ບໍ່ໄດ້ປ່ຽນ ABI ເລີ່ມຕົ້ນ,
ແທນທີ່ມັນຈະເພີ່ມການຂະຫຍາຍ SPE ABI ໃຫ້ກັບ ABI ໃນປັດຈຸບັນ.

-mabi=no-spe
ປິດໃຊ້ງານສ່ວນຂະຫຍາຍ Booke SPE ABI ສໍາລັບ ABI ໃນປັດຈຸບັນ.

-mabi=ibmlongdouble
ປ່ຽນ ABI ປະຈຸບັນເພື່ອໃຊ້ IBM Extended-precision long double. ນີ້ແມ່ນ PowerPC
ທາງເລືອກ SYSV ABI 32-bit.

-mabi=ieeelongdouble
ປ່ຽນ ABI ປະຈຸບັນເພື່ອໃຊ້ IEEE Extended-precision long double. ນີ້ແມ່ນ PowerPC
ທາງເລືອກ Linux ABI 32-bit.

-mprototype
-mno-prototype
ໃນລະບົບ V.4 ແລະລະບົບ PowerPC ຝັງສົມມຸດວ່າທຸກການໂທໄປຫາການໂຕ້ຖຽງຕົວແປ
ຫນ້າ​ທີ່​ແມ່ນ prototyped ຢ່າງ​ຖືກ​ຕ້ອງ​. ຖ້າບໍ່ດັ່ງນັ້ນ, compiler ຕ້ອງໃສ່ຄໍາແນະນໍາ
ກ່ອນທຸກການໂທທີ່ບໍ່ແມ່ນ prototyped ເພື່ອກໍານົດຫຼືລຶບ bit 6 ຂອງການລົງທະບຽນລະຫັດເງື່ອນໄຂ
(CR) ເພື່ອລະບຸວ່າຄ່າຈຸດລອຍໄດ້ຖືກສົ່ງຜ່ານຈຸດລອຍ
ລົງທະບຽນໃນກໍລະນີທີ່ຟັງຊັນໃຊ້ເວລາການໂຕ້ຖຽງຕົວແປ. ກັບ -mprototype, ພຽງແຕ່ໂທຫາ
ຟັງຊັນອາກິວເມັນຕົວແປແບບຕົ້ນແບບຈະຕັ້ງ ຫຼືລຶບລ້າງບິດ.

- ຊິມ
ໃນລະບົບ PowerPC ທີ່ຝັງໄວ້, ສົມມຸດວ່າໂມດູນເລີ່ມຕົ້ນຖືກເອີ້ນ sim-crt0.o ແລະ
ວ່າຫ້ອງສະຫມຸດ C ມາດຕະຖານແມ່ນ libsim.a ແລະ libc.a. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນຂອງ
powerpc-*-eabisim ການຕັ້ງຄ່າ.

-mmvme
ໃນລະບົບ PowerPC ທີ່ຝັງໄວ້, ສົມມຸດວ່າໂມດູນເລີ່ມຕົ້ນຖືກເອີ້ນ crt0.o ແລະ
ຫ້ອງສະຫມຸດ C ມາດຕະຖານແມ່ນ libmvme.a ແລະ libc.a.

- ບ້າ
ໃນລະບົບ PowerPC ທີ່ຝັງໄວ້, ສົມມຸດວ່າໂມດູນເລີ່ມຕົ້ນຖືກເອີ້ນ crt0.o ແລະ
ຫ້ອງສະຫມຸດ C ມາດຕະຖານແມ່ນ libads.a ແລະ libc.a.

- myellowknife
ໃນລະບົບ PowerPC ທີ່ຝັງໄວ້, ສົມມຸດວ່າໂມດູນເລີ່ມຕົ້ນຖືກເອີ້ນ crt0.o ແລະ
ຫ້ອງສະຫມຸດ C ມາດຕະຖານແມ່ນ libyk.a ແລະ libc.a.

-mvxworks
ໃນລະບົບ V.4 ແລະລະບົບ PowerPC ຝັງ, ລະບຸວ່າທ່ານກໍາລັງລວບລວມສໍາລັບ a
ລະບົບ VxWorks.

- memb
ໃນລະບົບ PowerPC ທີ່ຝັງໄວ້, ຕັ້ງຄ່າ PPC_EMB bit ໃນຫົວທຸງ ELF ເພື່ອຊີ້ບອກ
ທີ່ ອີບີ ການຍົກຍ້າຍທີ່ຂະຫຍາຍອອກແມ່ນຖືກນໍາໃຊ້.

-meabi
-mno-eabi
ໃນລະບົບ V.4 ແລະລະບົບ PowerPC ທີ່ຝັງໄວ້ເຮັດ (ບໍ່) ຍຶດຕິດກັບ Embedded
Applications Binary Interface (eabi) ເຊິ່ງເປັນຊຸດຂອງການດັດແປງລະບົບ V.4
ຂໍ້ມູນສະເພາະ. ການເລືອກ -meabi ຫມາຍຄວາມວ່າ stack ແມ່ນສອດຄ່ອງກັບ 8-byte
ເຂດແດນ, ຟັງຊັນ "__eabi" ຖືກເອີ້ນຈາກ "ຕົ້ນຕໍ" ເພື່ອຕັ້ງຄ່າສະພາບແວດລ້ອມ eabi,
ແລະ -msdata ທາງເລືອກສາມາດໃຊ້ທັງ "r2" ແລະ "r13" ເພື່ອຊີ້ໃຫ້ເຫັນສອງຂໍ້ມູນຂະຫນາດນ້ອຍແຍກຕ່າງຫາກ
ເຂດ. ການເລືອກ -mno-eabi ຫມາຍຄວາມວ່າ stack ແມ່ນສອດຄ່ອງກັບຂອບເຂດ 16-byte, ເຮັດ
ບໍ່ໂທຫາຫນ້າທີ່ເລີ່ມຕົ້ນຈາກ "ຕົ້ນຕໍ", ແລະ -msdata ທາງເລືອກພຽງແຕ່ຈະໃຊ້
"r13" ເພື່ອຊີ້ໃຫ້ເຫັນພື້ນທີ່ຂໍ້ມູນຂະຫນາດນ້ອຍດຽວ. ໄດ້ -meabi ທາງເລືອກແມ່ນເປີດໂດຍຄ່າເລີ່ມຕົ້ນຖ້າທ່ານ
ຕັ້ງຄ່າ GCC ໂດຍໃຊ້ຫນຶ່ງໃນ powerpc*-*-eabi* ຕົວເລືອກ

-msdata=eabi
ໃນລະບົບ V.4 ແລະລະບົບ PowerPC ຝັງ, ໃສ່ຂະຫນາດນ້ອຍໃນເບື້ອງຕົ້ນ "const" ທົ່ວໂລກແລະ
ຂໍ້ມູນສະຖິດຢູ່ໃນ .sdata2 ພາກສ່ວນ, ເຊິ່ງຊີ້ໃຫ້ເຫັນເຖິງໂດຍການລົງທະບຽນ "r2". ໃສ່ຂະຫນາດນ້ອຍ
ຂໍ້ມູນເບື້ອງຕົ້ນທີ່ບໍ່ແມ່ນ "const" ທົ່ວໂລກແລະສະຖິດຢູ່ໃນ .sdata ພາກ, ເຊິ່ງຊີ້ໃຫ້ເຫັນ
ໂດຍລົງທະບຽນ "r13". ເອົາຂໍ້ມູນຂະໜາດນ້ອຍ ແລະຂໍ້ມູນສະຖິດທົ່ວໂລກທີ່ຍັງບໍ່ທັນໄດ້ເລີ່ມນຳໃຊ້ເຂົ້າໃນ .sbss
ພາກສ່ວນ, ເຊິ່ງຢູ່ຕິດກັບ .sdata ພາກສ່ວນ. ໄດ້ -msdata=eabi ທາງເລືອກແມ່ນ
ບໍ່ເຂົ້າກັນໄດ້ກັບ - ສາມາດຍ້າຍໄດ້ ທາງເລືອກ. ທ -msdata=eabi ທາງ​ເລືອກ​ຍັງ​ກໍາ​ນົດ​ໄດ້​
- memb ທາງເລືອກ.

-msdata=sysv
ໃນລະບົບ V.4 ແລະລະບົບ PowerPC ທີ່ຝັງໄວ້, ໃຫ້ຂໍ້ມູນຂະໜາດນ້ອຍ ແລະຂໍ້ມູນສະຖິດຂອງໂລກຢູ່ໃນ
.sdata ພາກສ່ວນ, ເຊິ່ງຊີ້ໃຫ້ເຫັນເຖິງໂດຍການລົງທະບຽນ "r13". ເອົາຂະຫນາດນ້ອຍ uninitialized ທົ່ວໂລກ
ແລະຂໍ້ມູນສະຖິດຢູ່ໃນ .sbss ພາກສ່ວນ, ເຊິ່ງຢູ່ຕິດກັບ .sdata ພາກສ່ວນ. ໄດ້
-msdata=sysv ທາງ​ເລືອກ​ແມ່ນ​ບໍ່​ເຫມາະ​ສົມ​ກັບ​ - ສາມາດຍ້າຍໄດ້ ທາງເລືອກ.

-msdata=ຄ່າເລີ່ມຕົ້ນ
-msdata
ໃນລະບົບ V.4 ແລະລະບົບ PowerPC ທີ່ຝັງໄວ້, ຖ້າ -meabi ຖືກນໍາໃຊ້, ລວບລວມລະຫັດດຽວກັນ
as -msdata=eabi, ຖ້າບໍ່ດັ່ງນັ້ນລວບລວມລະຫັດດຽວກັນກັບ -msdata=sysv.

-msdata=ຂໍ້ມູນ
ໃນລະບົບ V.4 ແລະລະບົບ PowerPC ທີ່ຝັງໄວ້, ເອົາຂໍ້ມູນທົ່ວໂລກຂະໜາດນ້ອຍໃສ່ໃນ .sdata
ພາກ. ເອົາຂໍ້ມູນທົ່ວໂລກທີ່ຍັງບໍ່ທັນໄດ້ເລີ່ມນຳໃຊ້ຂະໜາດນ້ອຍໃສ່ໃນ .sbss ພາກ. ຢ່າໃຊ້
ຢ່າງໃດກໍຕາມ, ລົງທະບຽນ "r13" ເພື່ອແກ້ໄຂຂໍ້ມູນຂະຫນາດນ້ອຍ. ນີ້ແມ່ນພຶດຕິກໍາເລີ່ມຕົ້ນເວັ້ນເສຍແຕ່
ອື່ນໆ -msdata ທາງເລືອກແມ່ນຖືກນໍາໃຊ້.

-msdata=ບໍ່ມີ
-mno-sdata
ໃນລະບົບ PowerPC ທີ່ຝັງໄວ້, ເອົາຂໍ້ມູນທົ່ວໂລກ ແລະ static ເບື້ອງຕົ້ນທັງໝົດໃສ່ໃນ .ຂໍ້ມູນ
ພາກ​ສ່ວນ​, ແລະ​ຂໍ້​ມູນ​ທີ່​ຍັງ​ບໍ່​ທັນ​ສະ​ໄຫມ​ທັງ​ຫມົດ​ໃນ​ .bss ສ່ວນ.

-mblock-move-inline-limit=num
ໃນແຖວການຍ້າຍບລັອກທັງໝົດ (ເຊັ່ນ: ການໂທຫາ "memcpy" ຫຼືສຳເນົາໂຄງສ້າງ) ໜ້ອຍກວ່າ ຫຼື
ເທົ່າ​ທຽມ​ກັນ​ກັບ num ໄບຕ໌. ຄ່າຕໍາ່ສຸດທີ່ສໍາລັບ num ແມ່ນ 32 bytes ໃນເປົ້າຫມາຍ 32-bit ແລະ 64
bytes ໃນເປົ້າຫມາຍ 64-bit. ຄ່າເລີ່ມຕົ້ນແມ່ນສະເພາະເປົ້າໝາຍ.

-G num
ໃນລະບົບ PowerPC ທີ່ຝັງໄວ້, ວາງລາຍການທົ່ວໂລກ ແລະ static ໜ້ອຍກວ່າ ຫຼືເທົ່າກັບ num
bytes ເຂົ້າໄປໃນສ່ວນຂໍ້ມູນຂະຫນາດນ້ອຍຫຼື bss ແທນທີ່ຈະເປັນຂໍ້ມູນປົກກະຕິຫຼືພາກ bss.
ໂດຍຕົວຢ່າງ, num ແມ່ນ 8. The -G num ສະຫຼັບຍັງຖືກສົ່ງກັບຕົວເຊື່ອມຕໍ່. ໂມດູນທັງຫມົດ
ຄວນຈະຖືກລວບລວມດ້ວຍອັນດຽວກັນ -G num ມູນຄ່າ.

-mregnames
-mno-regnames
ໃນລະບົບ V.4 ແລະລະບົບ PowerPC ທີ່ຝັງໄວ້ເຮັດ (ບໍ່) ປ່ອຍຊື່ລົງທະບຽນຢູ່ໃນ
ຜົນຜະລິດພາສາປະກອບໂດຍໃຊ້ຮູບແບບສັນຍາລັກ.

-mlongcall
-mno-longcall
ໂດຍຄ່າເລີ່ມຕົ້ນສົມມຸດວ່າການໂທທັງຫມົດແມ່ນຢູ່ໄກເພື່ອໃຫ້ການໂທແພງກວ່າ
ລໍາດັບແມ່ນຕ້ອງການ. ອັນນີ້ແມ່ນຕ້ອງການສໍາລັບການໂທຫຼາຍກວ່າ 32 megabytes
(33,554,432 bytes) ຈາກສະຖານທີ່ປະຈຸບັນ. ໂທສັ້ນຈະຖືກສ້າງຂຶ້ນຖ້າຫາກວ່າ
compiler ຮູ້ວ່າການໂທບໍ່ສາມາດຢູ່ໄກໄດ້. ການຕັ້ງຄ່ານີ້ສາມາດຖືກລົບລ້າງໂດຍ
ຄຸນລັກສະນະຂອງຟັງຊັນ "shortcall", ຫຼືໂດຍ "#pragma ໂທຍາວ(0) ".

ບາງຕົວເຊື່ອມຕໍ່ສາມາດກວດພົບການໂທອອກນອກຂອບເຂດແລະສ້າງລະຫັດກາວໃສ່
ແມງວັນ. ໃນລະບົບເຫຼົ່ານີ້, ການໂທຍາວແມ່ນບໍ່ຈໍາເປັນແລະສ້າງລະຫັດຊ້າລົງ. ເປັນ
ຂອງການຂຽນນີ້, ຕົວເຊື່ອມຕໍ່ AIX ສາມາດເຮັດໄດ້, ເຊັ່ນດຽວກັນກັບຕົວເຊື່ອມຕໍ່ GNU ສໍາລັບ PowerPC/64. ມັນ
ມີການວາງແຜນທີ່ຈະເພີ່ມຄຸນສົມບັດນີ້ໃສ່ຕົວເຊື່ອມຕໍ່ GNU ສໍາລັບລະບົບ PowerPC 32-bit ເຊັ່ນກັນ.

ໃນລະບົບ Darwin/PPC, "#pragma longcall" ຈະສ້າງ "jbsr callee, L42", ບວກກັບ
"ເກາະສາຂາ" (ລະຫັດກາວ). ສອງທີ່ຢູ່ເປົ້າຫມາຍເປັນຕົວແທນຂອງ callee ແລະ
"ເກາະສາຂາ". ຕົວເຊື່ອມຕໍ່ Darwin/PPC ຈະມັກທີ່ຢູ່ທໍາອິດ ແລະສ້າງ a
"bl callee" ຖ້າຄໍາແນະນໍາ PPC "bl" ຈະເຂົ້າຫາຜູ້ໂທໂດຍກົງ; ຖ້າບໍ່ດັ່ງນັ້ນ, ໄດ້
linker ຈະສ້າງ "bl L42" ເພື່ອໂທຫາ "ເກາະສາຂາ". "ເກາະສາຂາ" ແມ່ນ
ຕື່ມໃສ່ກັບຮ່າງກາຍຂອງຫນ້າທີ່ໂທຫາ; ມັນຄິດໄລ່ທີ່ຢູ່ 32-bit ເຕັມຂອງ
callee ແລະ jumps ກັບມັນ.

ໃນລະບົບ Mach-O (Darwin), ທາງເລືອກນີ້ຊີ້ບອກ compiler emit ກັບກາວສໍາລັບ.
ທຸກໆການໂທໂດຍກົງ, ແລະຕົວເຊື່ອມຕໍ່ Darwin ຕັດສິນໃຈວ່າຈະໃຊ້ຫຼືຍົກເລີກມັນ.

ໃນອະນາຄົດ, ພວກເຮົາອາດຈະເຮັດໃຫ້ GCC ບໍ່ສົນໃຈຂໍ້ມູນສະເພາະຂອງ longcall ທັງຫມົດໃນເວລາທີ່ຕົວເຊື່ອມຕໍ່
ເປັນທີ່ຮູ້ຈັກໃນການສ້າງກາວ.

-mtls-ເຄື່ອງໝາຍ
-mno-tls-ເຄື່ອງໝາຍ
ໝາຍ (ບໍ່ໝາຍ) ໂທຫາ "__tls_get_addr" ດ້ວຍການຍ້າຍທີ່ລະບຸຟັງຊັນ.
ການໂຕ້ຖຽງ. ການຍົກຍ້າຍອະນຸຍາດໃຫ້ ld ສາມາດເຊື່ອມໂຍງການໂທຫາຫນ້າທີ່ທີ່ເຊື່ອຖືໄດ້ດ້ວຍການໂຕ້ຖຽງ
ຄໍາແນະນໍາໃນການຕິດຕັ້ງສໍາລັບການເພີ່ມປະສິດທິພາບ TLS, ເຊິ່ງເຮັດໃຫ້ gcc ສາມາດກໍານົດເວລາທີ່ດີກວ່າ
ລໍາດັບ.

- ກະທູ້
ເພີ່ມການສະຫນັບສະຫນູນສໍາລັບ multithreading ກັບ pthreads ຫໍສະໝຸດ. ຕົວເລືອກນີ້ກໍານົດທຸງສໍາລັບ
ທັງ preprocessor ແລະ linker.

-mrecip
-mno-recip
ຕົວເລືອກນີ້ຈະເຮັດໃຫ້ GCC ໃຊ້ການປະເມີນເຊິ່ງກັນແລະກັນ ແລະຮາກສີ່ຫຼ່ຽມທີ່ຕ່າງກັນ
ຄາດຄະເນຄໍາແນະນໍາທີ່ມີຂັ້ນຕອນ Newton-Raphson ເພີ່ມເຕີມເພື່ອເພີ່ມຄວາມແມ່ນຍໍາ
ແທນທີ່ຈະເຮັດການແບ່ງຫຼືຮາກສີ່ຫລ່ຽມແລະການແບ່ງປັນສໍາລັບການໂຕ້ຖຽງຈຸດລອຍ. ເຈົ້າ
ຄວນໃຊ້ -fast ຄະ​ນິດ​ສາດ​ ທາງ​ເລືອກ​ໃນ​ເວ​ລາ​ທີ່​ການ​ນໍາ​ໃຊ້​ -mrecip (ຫຼືຢ່າງຫນ້ອຍ
-funsafe-math-optimizations, -finite-math-only, -freciprocal-ຄະນິດສາດ ແລະ
-fno-traping-ຄະນິດສາດ). ໃຫ້ສັງເກດວ່າໃນຂະນະທີ່ການສົ່ງຕໍ່ຂອງລໍາດັບແມ່ນໂດຍທົ່ວໄປ
ສູງກ່ວາ throughput ຂອງຄໍາແນະນໍາທີ່ບໍ່ແມ່ນເຊິ່ງກັນແລະກັນ, ຄວາມແມ່ນຍໍາຂອງ
ລໍາດັບສາມາດຫຼຸດລົງໄດ້ເຖິງ 2 ulp (ເຊັ່ນ inverse ຂອງ 1.0 ເທົ່າກັບ 0.99999994)
ສໍາລັບຮາກສີ່ຫລ່ຽມທີ່ຕ່າງກັນ.

-mrecip=ເລືອກ
ຕົວເລືອກນີ້ອະນຸຍາດໃຫ້ຄວບຄຸມວ່າຄໍາແນະນໍາການປະເມີນເຊິ່ງກັນແລະກັນອາດຈະຖືກນໍາໃຊ້. ເລືອກ
ແມ່ນລາຍຊື່ຕົວເລືອກທີ່ແຍກດ້ວຍເຄື່ອງໝາຍຈຸດ, ເຊິ່ງອາດຈະຖືກນຳໜ້າດ້ວຍ "!" ກັບ invert ໄດ້
ທາງເລືອກ: "ທັງໝົດ": ເປີດການນຳໃຊ້ຄຳແນະນຳການປະເມີນທັງໝົດ, "ຄ່າເລີ່ມຕົ້ນ": ເປີດໃຊ້ຄ່າເລີ່ມຕົ້ນ
ຄໍາແນະນໍາ, ເທົ່າກັບ -mrecip, "none": ປິດການນຳໃຊ້ຄຳແນະນຳການປະເມີນທັງໝົດ,
ທຽບເທົ່າກັບ -mno-recip; "div": ເປີດໃຊ້ຄໍາແນະນໍາການປະມານການເຊິ່ງກັນແລະກັນສໍາລັບ
ຄວາມແມ່ນຍໍາດຽວແລະສອງເທົ່າ; "divf": ເປີດໃຊ້ຄວາມແມ່ນຍໍາເຊິ່ງກັນແລະກັນ
ຄໍາແນະນໍາໂດຍປະມານ; "divd": ເປີດໃຊ້ຄວາມຊັດເຈນສອງເທົ່າເຊິ່ງກັນແລະກັນ
ຄໍາແນະນໍາໂດຍປະມານ; "rsqrt": ເປີດໃຊ້ການປະມານຂອງຮາກທີ່ສອງເຊິ່ງກັນແລະກັນ
ຄໍາແນະນໍາສໍາລັບຄວາມແມ່ນຍໍາດຽວແລະສອງເທົ່າ; "rsqrtf": ເປີດໃຊ້ single-
ຄວາມແມ່ນຍໍາ reciprocal ຄໍາແນະນໍາການປະມານຮາກສີ່ຫລ່ຽມ; "rsqrtd": ເປີດໃຊ້
double-precision reciprocal square root ຄໍາແນະນໍາໂດຍປະມານ;

ດັ່ງນັ້ນ, ສໍາລັບການຍົກຕົວຢ່າງ, -mrecip=ທັງໝົດ,!rsqrtd ຈະເປີດໃຊ້ທັງໝົດຂອງການຄາດຄະເນເຊິ່ງກັນແລະກັນ
ຄໍາແນະນໍາ, ຍົກເວັ້ນສໍາລັບຄໍາແນະນໍາ "FRSQRTE", "XSRSQRTEDP", ແລະ "XVRSQRTEDP"
ເຊິ່ງຈັດການການຄຳນວນຂອງຮາກສີ່ຫຼ່ຽມສີ່ຫຼ່ຽມທີ່ຊັດເຈນເຊິ່ງກັນແລະກັນ.

-mrecip-precision
-mno-recip-precision
ສົມມຸດ (ບໍ່ສົມມຸດ) ວ່າຄໍາແນະນໍາການປະເມີນເຊິ່ງກັນແລະກັນໃຫ້ສູງກວ່າ,
ການຄາດຄະເນຄວາມແມ່ນຍໍາແມ່ນບັງຄັບໂດຍ PowerPC ABI. ການເລືອກ -mcpu=power6 or
-mcpu=power7 ເລືອກອັດຕະໂນມັດ -mrecip-precision. ສີ່ຫຼ່ຽມຄວາມຊັດເຈນ
ຄໍາແນະນໍາການປະເມີນຮາກບໍ່ໄດ້ຖືກສ້າງຂື້ນໂດຍຄ່າເລີ່ມຕົ້ນໃນເຄື່ອງທີ່ມີຄວາມແມ່ນຍໍາຕ່ໍາ,
ເນື່ອງຈາກວ່າພວກເຂົາເຈົ້າບໍ່ໄດ້ສະຫນອງການຄາດຄະເນທີ່ converges ຫຼັງຈາກສາມຂັ້ນຕອນ.

-mveclibabi=ປະເພດ
ລະບຸປະເພດ ABI ເພື່ອໃຊ້ສຳລັບ vectorizing intrinsics ໂດຍໃຊ້ຫ້ອງສະໝຸດພາຍນອກ.
ປະເພດດຽວທີ່ສະຫນັບສະຫນູນໃນປັດຈຸບັນແມ່ນ "ມະຫາຊົນ", ເຊິ່ງກໍານົດການນໍາໃຊ້ຂອງ IBM
ຫ້ອງສະໝຸດລະບົບຍ່ອຍເລັ່ງທາງຄະນິດສາດ (MASS) ສໍາລັບ vectorizing intrinsics ໂດຍໃຊ້
ຫ້ອງສະຫມຸດພາຍນອກ. ປະຈຸບັນ GCC ຈະສົ່ງສຽງໂທຫາ "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", ແລະ "tanhf4" ເມື່ອສ້າງລະຫັດສໍາລັບ power7. ທັງສອງ -ftree-vectorize ແລະ
-funsafe-math-optimizations ຕ້ອງໄດ້ຮັບການເປີດໃຊ້ງານ. ຫ້ອງສະຫມຸດ MASS ຈະຕ້ອງເປັນ
ລະບຸໃນເວລາເຊື່ອມຕໍ່.

-mfriz
-mno-friz
ສ້າງ (ບໍ່ສ້າງ) ຄໍາແນະນໍາ "friz" ໃນເວລາທີ່ -funsafe-math-optimizations
ທາງ​ເລືອກ​ແມ່ນ​ຖືກ​ນໍາ​ໃຊ້​ເພື່ອ​ປັບ​ປະ​ຕິ​ບັດ​ການ​ມົນ​ຂອງ​ຄ່າ​ຈຸດ​ທີ່​ເລື່ອນ​ໄດ້​ເປັນ​ຈໍາ​ນວນ 64-bit ແລະ​
ກັບໄປຫາຈຸດລອຍ. ຄໍາແນະນໍາ "friz" ບໍ່ສົ່ງຄືນຄ່າດຽວກັນຖ້າຫາກວ່າ
ຕົວເລກຈຸດລອຍໃຫຍ່ເກີນໄປທີ່ຈະພໍດີກັບຈຳນວນເຕັມ.

-mpointers-to-nested-functions
-mno-pointers-to-nested-functions
ສ້າງ (ບໍ່ສ້າງ) ລະຫັດເພື່ອໂຫລດຂຶ້ນທະບຽນລະບົບຕ່ອງໂສ້ຄົງທີ່ (r11) ເມື່ອ​ໃດ​
ການໂທຜ່ານຕົວຊີ້ກ່ຽວກັບລະບົບ AIX ແລະ 64-bit Linux ບ່ອນທີ່ຕົວຊີ້ຟັງຊັນ
ຊີ້ໃຫ້ເຫັນເຖິງຕົວອະທິບາຍ 3 ຄໍາທີ່ໃຫ້ທີ່ຢູ່ຟັງຊັນ, ຄ່າ TOC ທີ່ຈະໂຫລດ
ລົງທະບຽນ r2, ແລະມູນຄ່າຕ່ອງໂສ້ຄົງທີ່ທີ່ຈະໂຫລດຢູ່ໃນທະບຽນ r11. ໄດ້
-mpointers-to-nested-functions ເປີດຢູ່ຕາມຄ່າເລີ່ມຕົ້ນ. ທ່ານຈະບໍ່ສາມາດໂທຜ່ານ
ຕົວຊີ້ໄປຫາຫນ້າທີ່ຊ້ອນກັນຫຼືຕົວຊີ້ໄປຫາຫນ້າທີ່ລວບລວມໃນພາສາອື່ນ
ໃຊ້ລະບົບຕ່ອງໂສ້ຄົງທີ່ຖ້າທ່ານໃຊ້ -mno-pointers-to-nested-functions.

-msave-toc-ທາງອ້ອມ
-mno-save-toc-indirect
ສ້າງ (ບໍ່ສ້າງ) ລະຫັດເພື່ອບັນທຶກຄ່າ TOC ໃນສະຖານທີ່ stack ສະຫງວນ
ໃນ prologue ຟັງຊັນຖ້າຟັງຊັນໂທຜ່ານຕົວຊີ້ໃນ AIX ແລະ 64-bit
ລະບົບ Linux. ຖ້າຄ່າ TOC ບໍ່ໄດ້ຖືກບັນທຶກໄວ້ໃນ prologue, ມັນຖືກບັນທຶກໄວ້ກ່ອນ
ໂທຜ່ານຕົວຊີ້. ໄດ້ -mno-save-toc-indirect ທາງເລືອກແມ່ນຄ່າເລີ່ມຕົ້ນ.

RX ທາງເລືອກໃນການ

ຕົວເລືອກແຖວຄໍາສັ່ງເຫຼົ່ານີ້ຖືກກໍານົດສໍາລັບເປົ້າຫມາຍ RX:

-m64bit-ສອງເທົ່າ
-m32bit-ສອງເທົ່າ
ເຮັດໃຫ້ປະເພດຂໍ້ມູນ "ສອງ" ເປັນ 64 bits (-m64bit-ສອງເທົ່າ) ຫຼື 32 bits (-m32bit-ສອງເທົ່າ)
ໃນຂະຫນາດ. ຄ່າເລີ່ມຕົ້ນແມ່ນ -m32bit-ສອງເທົ່າ. ຫມາຍ​ເຫດ​ ຮາດແວຈຸດລອຍ RX ເຮັດວຽກເທົ່ານັ້ນ
ກ່ຽວກັບຄ່າ 32-bit, ນັ້ນແມ່ນເຫດຜົນທີ່ວ່າຄ່າເລີ່ມຕົ້ນ -m32bit-ສອງເທົ່າ.

-fpu
-nofpu
ເປີດໃຊ້ງານ (-fpu) ຫຼືປິດການໃຊ້ງານ (-nofpu) ການນໍາໃຊ້ຮາດແວຈຸດລອຍ RX. ໄດ້
ຄ່າເລີ່ມຕົ້ນຖືກເປີດໃຊ້ງານສໍາລັບ RX600 ຊຸດແລະພິການສໍາລັບການ RX200 ຊຸດ.

ຄໍາແນະນໍາ Floating-point ຈະຖືກສ້າງຂື້ນພຽງແຕ່ສໍາລັບຄ່າຈຸດລອຍ 32-bit ເທົ່ານັ້ນ
ແນວໃດກໍ່ຕາມ, ສະນັ້ນຖ້າຫາກວ່າ -m64bit-ສອງເທົ່າ ທາງເລືອກແມ່ນຖືກນໍາໃຊ້ຫຼັງຈາກນັ້ນຮາດແວ FPU ຈະບໍ່ເປັນ
ໃຊ້ສໍາລັບຄູ່.

ຫມາຍ​ເຫດ​ ຖ້າ -fpu ທາງ​ເລືອກ​ແມ່ນ​ເປີດ​ໃຊ້​ງານ​ຫຼັງ​ຈາກ​ນັ້ນ​ -funsafe-math-optimizations ຍັງຖືກເປີດໃຊ້
ອັດຕະໂນມັດ. ນີ້ແມ່ນຍ້ອນວ່າຄໍາແນະນໍາ RX FPU ຕົວເອງບໍ່ປອດໄພ.

-mcpu=ຊື່
ເລືອກປະເພດຂອງ RX CPU ທີ່ຈະເປັນເປົ້າຫມາຍ. ໃນປັດຈຸບັນສາມປະເພດແມ່ນສະຫນັບສະຫນູນ, the
generic RX600 ແລະ RX200 ຊຸດຮາດແວແລະສະເພາະ RX610 CPU. ຄ່າເລີ່ມຕົ້ນແມ່ນ
RX600.

ຄວາມແຕກຕ່າງພຽງແຕ່ລະຫວ່າງ RX600 ແລະ RX610 ແມ່ນວ່າ RX610 ບໍ່​ໄດ້​ສະ​ຫນັບ​ສະ​ຫນູນ​
ຄໍາແນະນໍາ "MVTIPL".

ໄດ້ RX200 ຊຸດບໍ່ມີຫົວຫນ່ວຍຈຸດລອຍຂອງຮາດແວແລະອື່ນໆ -nofpu ເປີດໃຊ້ງານ
ໂດຍຄ່າເລີ່ມຕົ້ນເມື່ອປະເພດນີ້ຖືກເລືອກ.

-mbig-endian-data
-mlittle-endian-data
ເກັບຮັກສາຂໍ້ມູນ (ແຕ່ບໍ່ແມ່ນລະຫັດ) ໃນຮູບແບບ big-endian. ຄ່າເລີ່ມຕົ້ນແມ່ນ
-mlittle-endian-data, ie ການເກັບຮັກສາຂໍ້ມູນໃນຮູບແບບ little-endian.

-msmall-data-limit=N
ລະບຸຂະໜາດສູງສຸດເປັນໄບຕ໌ຂອງຕົວແປທົ່ວໂລກ ແລະສະຖິດທີ່ສາມາດວາງໄວ້ໄດ້
ເຂົ້າໄປໃນພື້ນທີ່ຂໍ້ມູນຂະຫນາດນ້ອຍ. ການນໍາໃຊ້ພື້ນທີ່ຂໍ້ມູນຂະຫນາດນ້ອຍສາມາດນໍາໄປສູ່ຂະຫນາດນ້ອຍແລະໄວກວ່າ
code, ແຕ່ຂະຫນາດຂອງພື້ນທີ່ແມ່ນຈໍາກັດແລະມັນຂຶ້ນກັບ programmer ເພື່ອຮັບປະກັນວ່າ
ພື້ນທີ່ບໍ່ລົ້ນ. ນອກຈາກນີ້ໃນເວລາທີ່ພື້ນທີ່ຂໍ້ມູນຂະຫນາດນ້ອຍຖືກນໍາໃຊ້ຫນຶ່ງໃນ RX ຂອງ
ທະບຽນ (ປົກກະຕິແລ້ວ "r13") ແມ່ນສະຫງວນໄວ້ສໍາລັບການນໍາໃຊ້ທີ່ຊີ້ໄປຫາພື້ນທີ່ນີ້, ດັ່ງນັ້ນມັນບໍ່ແມ່ນ
ມີໃຫ້ໃຊ້ໄດ້ດົນກວ່າໂດຍ compiler. ອັນນີ້ອາດຈະສົ່ງຜົນໃຫ້ຊ້າລົງ ແລະ/ຫຼືໃຫຍ່ກວ່າ
ລະຫັດຖ້າຕົວແປທີ່ຄັ້ງດຽວສາມາດຖືກຈັດຢູ່ໃນທະບຽນທີ່ສະຫງວນໄວ້ໃນປັດຈຸບັນ
pushed ໃສ່ stack ໄດ້.

ຫມາຍເຫດ, ຕົວແປທົ່ວໄປ (ຕົວແປທີ່ຍັງບໍ່ໄດ້ເລີ່ມຕົ້ນ) ແລະຄ່າຄົງທີ່
ບໍ່ໄດ້ໃສ່ເຂົ້າໄປໃນພື້ນທີ່ຂໍ້ມູນຂະຫນາດນ້ອຍຍ້ອນວ່າເຂົາເຈົ້າໄດ້ຖືກມອບຫມາຍໃຫ້ພາກສ່ວນອື່ນໆໃນ
ຜົນຜະລິດສາມາດປະຕິບັດໄດ້.

ຄ່າເລີ່ມຕົ້ນແມ່ນສູນ, ເຊິ່ງປິດຄຸນສົມບັດນີ້. ຫມາຍເຫດ, ຄຸນນະສົມບັດນີ້ບໍ່ແມ່ນ
ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນດ້ວຍລະດັບການເພີ່ມປະສິດທິພາບທີ່ສູງຂຶ້ນ (-O2 ແລະອື່ນໆ) ເນື່ອງຈາກວ່າ
ຜົນກະທົບທີ່ອາດຈະເປັນອັນຕະລາຍຂອງການຈອງທະບຽນ. ມັນຂຶ້ນກັບ programmer
ເພື່ອທົດລອງ ແລະຄົ້ນພົບວ່າຄຸນສົມບັດນີ້ມີປະໂຫຍດຕໍ່ໂຄງການຂອງເຂົາເຈົ້າຫຼືບໍ່. ເບິ່ງ
ລາຍ​ລະ​ອຽດ​ຂອງ​ - mpid ທາງເລືອກສໍາລັບຄໍາອະທິບາຍວິທີການລົງທະບຽນຕົວຈິງ
ຖືຕົວຊີ້ພື້ນທີ່ຂໍ້ມູນຂະຫນາດນ້ອຍຖືກເລືອກ.

- ຊິມ
-mno-sim
ໃຊ້ runtime simulator. ຄ່າເລີ່ມຕົ້ນແມ່ນໃຊ້ runtime ສະເພາະກະດານ libgloss.

-mas100- syntax
-mno-as100-syntax
ເມື່ອສ້າງຜົນຜະລິດຂອງຕົວປະກອບໃຫ້ໃຊ້ syntax ທີ່ເຂົ້າກັນໄດ້ກັບ AS100 ຂອງ Renesas.
ເຄື່ອງປະກອບ. syntax ນີ້ຍັງສາມາດຖືກຈັດການໂດຍ GAS assembler ແຕ່ມັນມີບາງອັນ
ຂໍ້ຈໍາກັດດັ່ງນັ້ນການສ້າງມັນບໍ່ແມ່ນທາງເລືອກເລີ່ມຕົ້ນ.

-mmax-constant-size=N
ລະບຸຂະໜາດສູງສຸດ, ເປັນໄບຕ໌, ຂອງຄ່າຄົງທີ່ທີ່ສາມາດໃຊ້ເປັນຕົວດຳເນີນການໃນ
ຄໍາແນະນໍາ RX. ເຖິງແມ່ນວ່າຊຸດຄໍາແນະນໍາ RX ອະນຸຍາດໃຫ້ຄ່າຄົງທີ່ສູງເຖິງ 4
bytes ທີ່ມີຄວາມຍາວທີ່ຈະໃຊ້ໃນຄໍາແນະນໍາ, ຄ່າທີ່ຍາວກວ່າເທົ່າກັບຄ່າທີ່ຍາວກວ່າ
ຄໍາແນະນໍາ. ດັ່ງນັ້ນໃນບາງສະຖານະການ, ມັນສາມາດເປັນປະໂຫຍດທີ່ຈະຈໍາກັດຂະຫນາດຂອງ
ຄົງທີ່ຖືກນໍາໃຊ້ໃນຄໍາແນະນໍາ. ຄົງທີ່ໃຫຍ່ເກີນໄປແມ່ນແທນ
ຖືກຈັດໃສ່ໃນສະນຸກເກີຄົງທີ່ແລະອ້າງອີງໂດຍຜ່ານທາງອ້ອມການລົງທະບຽນ.

ຄຸນຄ່າ N ສາມາດຢູ່ລະຫວ່າງ 0 ແລະ 4. ຄ່າຂອງ 0 (ຄ່າເລີ່ມຕົ້ນ) ຫຼື 4 ຫມາຍຄວາມວ່າ
ອະນຸຍາດໃຫ້ມີການຄົງທີ່ຂອງຂະຫນາດໃດໆ.

-mrelax
ເປີດໃຊ້ການຜ່ອນຄາຍຕົວເຊື່ອມຕໍ່. ການຜ່ອນຄາຍ Linker ແມ່ນຂະບວນການທີ່ຕົວເຊື່ອມຕໍ່ຈະ
ພະຍາຍາມຫຼຸດຂະໜາດຂອງໂປລແກລມໂດຍການຊອກຫາສະບັບທີ່ສັ້ນກວ່າຂອງຕ່າງໆ
ຄໍາແນະນໍາ. ປິດການນຳໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-mint-register=N
ລະບຸຈໍານວນຂອງການລົງທະບຽນເພື່ອສະຫງວນສໍາລັບຫນ້າທີ່ຕົວຈັດການຂັດຂວາງໄວ. ໄດ້
ມູນຄ່າ N ສາມາດຢູ່ລະຫວ່າງ 0 ແລະ 4. ຄ່າຂອງ 1 ຫມາຍຄວາມວ່າການລົງທະບຽນ "r13" ຈະເປັນ
ສະຫງວນໄວ້ສໍາລັບການນໍາໃຊ້ສະເພາະຂອງຕົວຈັດການຂັດຂວາງໄວ. ມູນຄ່າຂອງ 2 ສະຫງວນ
"r13" ແລະ "r12". ຄ່າຂອງ 3 ສະຫງວນ "r13", "r12" ແລະ "r11", ແລະມູນຄ່າຂອງ 4.
ສະຫງວນ "r13" ຜ່ານ "r10". ຄ່າຂອງ 0, ຄ່າເລີ່ມຕົ້ນ, ບໍ່ໄດ້ສະຫງວນໄວ້ໃດໆ
ລົງທະບຽນ.

-msave-acc-in-interrupts
ລະບຸວ່າຫນ້າທີ່ຕົວຈັດການຂັດຂວາງຄວນຮັກສາທະບຽນສະສົມໄວ້.
ນີ້ເປັນສິ່ງຈໍາເປັນພຽງແຕ່ຖ້າລະຫັດປົກກະຕິອາດຈະໃຊ້ການລົງທະບຽນສະສົມ, ຕົວຢ່າງ
ເນື່ອງຈາກວ່າມັນປະຕິບັດການຄູນ 64-bit. ຄ່າເລີ່ມຕົ້ນແມ່ນການບໍ່ສົນໃຈເຄື່ອງສະສົມ
ເນື່ອງຈາກວ່ານີ້ເຮັດໃຫ້ຕົວຈັດການຂັດຂວາງໄວຂຶ້ນ.

- mpid
-mno-pid
ເປີດນຳໃຊ້ການສ້າງຂໍ້ມູນຕຳແໜ່ງທີ່ເປັນເອກະລາດ. ເມື່ອເປີດໃຊ້ການເຂົ້າເຖິງໃດໆ
ຂໍ້​ມູນ​ຄົງ​ທີ່​ຈະ​ເຮັດ​ໄດ້​ໂດຍ​ຜ່ານ​ການ​ຊົດ​ເຊີຍ​ຈາກ​ທີ່​ຢູ່​ຖານ​ທີ່​ມີ​ຢູ່​ໃນ​ການ​ຈົດ​ທະ​ບຽນ​. ນີ້
ອະນຸຍາດໃຫ້ກໍານົດສະຖານທີ່ຂອງຂໍ້ມູນຄົງທີ່ໃນເວລາແລ່ນໂດຍບໍ່ຈໍາເປັນຕ້ອງ
ການປະຕິບັດທີ່ຈະຖືກຍົກຍ້າຍ, ຊຶ່ງເປັນຜົນປະໂຫຍດຕໍ່ຄໍາຮ້ອງສະຫມັກທີ່ຝັງຢູ່ໃນແຫນ້ນ
ຂໍ້ ຈຳ ກັດດ້ານຄວາມ ຈຳ. ຂໍ້​ມູນ​ທີ່​ສາ​ມາດ​ແກ້​ໄຂ​ບໍ່​ໄດ້​ຮັບ​ຜົນ​ກະ​ທົບ​ໂດຍ​ທາງ​ເລືອກ​ນີ້​.

ຫມາຍເຫດ, ການນໍາໃຊ້ຄຸນສົມບັດນີ້ສະຫງວນການລົງທະບຽນ, ປົກກະຕິແລ້ວ "r13", ສໍາລັບຂໍ້ມູນຄົງທີ່
ທີ່ຢູ່ຖານ. ນີ້ສາມາດສົ່ງຜົນໃຫ້ລະຫັດຊ້າລົງແລະ / ຫຼືຂະຫນາດໃຫຍ່, ໂດຍສະເພາະໃນຄວາມສັບສົນ
ປະຕິບັດຫນ້າ.

ການລົງທະບຽນຕົວຈິງທີ່ເລືອກໃຫ້ຖືທີ່ຢູ່ຖານຂໍ້ມູນຄົງທີ່ແມ່ນຂຶ້ນກັບວ່າ
ໄດ້ -msmall-data-limit ແລະ / ຫຼື -mint-ລົງທະບຽນ ຕົວເລືອກແຖວຄໍາສັ່ງຖືກເປີດໃຊ້.
ເລີ່ມຕົ້ນດ້ວຍການລົງທະບຽນ "r13" ແລະສືບຕໍ່ລົງລຸ່ມ, ທະບຽນໄດ້ຖືກຈັດສັນກ່ອນ
ເພື່ອຕອບສະຫນອງຄວາມຕ້ອງການຂອງ -mint-ລົງທະບຽນ, ຫຼັງຈາກນັ້ນ - mpid ແລະສຸດທ້າຍ
-msmall-data-limit. ດັ່ງນັ້ນຈຶ່ງເປັນໄປໄດ້ສໍາລັບການລົງທະບຽນພື້ນທີ່ຂໍ້ມູນຂະຫນາດນ້ອຍເປັນ "r8"
ຖ້າທັງສອງ -mint-register=4 ແລະ - mpid ຖືກລະບຸໄວ້ໃນເສັ້ນຄໍາສັ່ງ.

ໂດຍຄ່າເລີ່ມຕົ້ນຄຸນສົມບັດນີ້ບໍ່ໄດ້ຖືກເປີດໃຊ້. ຄ່າເລີ່ມຕົ້ນສາມາດໄດ້ຮັບການຟື້ນຟູໂດຍຜ່ານ -mno-pid
ທາງເລືອກແຖວຄໍາສັ່ງ.

ຫມາຍ​ເຫດ​: ຕົວເລືອກເສັ້ນຄໍາສັ່ງ GCC ທົ່ວໄປ - ຄົງ​ທີ່ -reg ມີຄວາມສໍາຄັນພິເສດຕໍ່ RX
ພອດເມື່ອໃຊ້ກັບຄຸນສົມບັດຟັງຊັນ "ຂັດຂວາງ". ຄຸນ​ລັກ​ສະ​ນະ​ນີ້​ສະ​ແດງ​ໃຫ້​ເຫັນ a
ຟັງຊັນທີ່ມີຈຸດປະສົງເພື່ອປະມວນຜົນການຂັດຂວາງໄວ. GCC ຈະຮັບປະກັນວ່າມັນພຽງແຕ່ໃຊ້
ລົງທະບຽນ "r10", "r11", "r12" ແລະ / ຫຼື "r13" ແລະພຽງແຕ່ສະຫນອງໃຫ້ວ່າການນໍາໃຊ້ປົກກະຕິຂອງ.
ການລົງທະບຽນທີ່ສອດຄ້ອງກັນໄດ້ຖືກຈໍາກັດໂດຍຜ່ານ - ຄົງ​ທີ່ -reg or -mint-ລົງທະບຽນ
ຕົວເລືອກແຖວຄໍາສັ່ງ.

S / 390 ແລະ zSeries ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ແມ່ນ -m ຕົວເລືອກທີ່ກຳນົດໄວ້ສຳລັບສະຖາປັດຕະຍະກຳ S/390 ແລະ zSeries.

-mhard-float
-msoft-float
ໃຊ້ (ບໍ່ໃຊ້) ຄໍາແນະນໍາຈຸດເລື່ອນຂອງຮາດແວ ແລະລົງທະບຽນສໍາລັບການເລື່ອນ-
ການ​ດໍາ​ເນີນ​ງານ​ຈຸດ​. ເມື່ອ​ໃດ​ -msoft-float ຖືກກໍານົດ, ຫນ້າທີ່ຢູ່ໃນ libgcc.a ຈະຖືກນໍາໃຊ້
ເພື່ອປະຕິບັດການປະຕິບັດງານຈຸດລອຍ. ເມື່ອ​ໃດ​ -mhard-float ຖືກກໍານົດ, compiler
ສ້າງຄໍາແນະນໍາຈຸດເລື່ອນ IEEE. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-mhard-dfp
-mno-hard-dfp
ໃຊ້ (ບໍ່ໃຊ້) ຄໍາແນະນໍາຂອງຮາດແວ - ເລກທົດສະນິຍົມ - floating-point ສໍາລັບ decimal-
ການດໍາເນີນງານຈຸດລອຍ. ເມື່ອ​ໃດ​ -mno-hard-dfp ຖືກກໍານົດ, ຫນ້າທີ່ຢູ່ໃນ libgcc.a
ຈະຖືກນໍາໃຊ້ເພື່ອປະຕິບັດການທົດສະນິຍົມ-floating-point. ເມື່ອ​ໃດ​ -mhard-dfp is
ລະບຸໄວ້, compiler ສ້າງຄໍາແນະນໍາຮາດແວ decimal-floating-point. ນີ້
ເປັນຄ່າເລີ່ມຕົ້ນຂອງ -march=z9-ec ຫຼືສູງກວ່າ.

-mlong-double-64
-mlong-double-128
ສະຫວິດເຫຼົ່ານີ້ຄວບຄຸມຂະຫນາດຂອງປະເພດ "ຄູ່ຍາວ". ຂະຫນາດຂອງ 64 ບິດເຮັດໃຫ້
ປະເພດ "ຄູ່ຍາວ" ເທົ່າກັບປະເພດ "ຄູ່". ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-mbackchain
-mno-backchain
ເກັບຮັກສາ (ບໍ່ເກັບຮັກສາ) ທີ່ຢູ່ຂອງກອບຂອງຜູ້ໂທເປັນຕົວຊີ້ backchain ເຂົ້າໄປໃນ
ກອບ stack ຂອງ callee. ອາດຈະຈໍາເປັນຕ້ອງມີ backchain ເພື່ອອະນຸຍາດໃຫ້ debugging ໂດຍໃຊ້ເຄື່ອງມືທີ່
ບໍ່ເຂົ້າໃຈຂໍ້ມູນກອບການໂທ DWARF-2. ເມື່ອ​ໃດ​ -mno-packed-stack ແມ່ນຢູ່ໃນ
ຜົນກະທົບ, ຕົວຊີ້ backchain ຖືກເກັບໄວ້ຢູ່ດ້ານລຸ່ມຂອງກອບ stack; ເມື່ອ​ໃດ​
-mpacked-stack ແມ່ນມີຜົນບັງຄັບໃຊ້, backchain ແມ່ນຖືກຈັດໃສ່ໃນຄໍາສັບເທິງສຸດຂອງ
96/160 byte ລົງທະບຽນພື້ນທີ່ປະຫຍັດ.

ໂດຍທົ່ວໄປ, ລະຫັດທີ່ລວບລວມດ້ວຍ -mbackchain ແມ່ນການໂທເຂົ້າກັນໄດ້ກັບລະຫັດທີ່ລວບລວມດ້ວຍ
-mmo-backchain; ຢ່າງໃດກໍຕາມ, ການນໍາໃຊ້ backchain ສໍາລັບຈຸດປະສົງ debugging ປົກກະຕິແລ້ວຮຽກຮ້ອງໃຫ້ມີ
ວ່າທັງສອງຄູ່ແມ່ນສ້າງຂຶ້ນດ້ວຍ -mbackchain. ໃຫ້ສັງເກດວ່າການປະສົມປະສານຂອງ
-mbackchain, -mpacked-stack ແລະ -mhard-float ບໍ່ຮອງຮັບ. ເພື່ອສ້າງເປັນ
ການນໍາໃຊ້ linux kernel -msoft-float.

ຄ່າເລີ່ມຕົ້ນແມ່ນເພື່ອບໍ່ຮັກສາ backchain.

-mpacked-stack
-mno-packed-stack
ໃຊ້ (ບໍ່ໃຊ້) ການຈັດວາງ stacked. ເມື່ອ​ໃດ​ -mno-packed-stack ຖືກກໍານົດ, ໄດ້
compiler ໃຊ້ພື້ນທີ່ທັງຫມົດຂອງການລົງທະບຽນ 96/160 byte ພື້ນທີ່ປະຫຍັດພຽງແຕ່ສໍາລັບພວກເຂົາ
ຈຸດປະສົງເລີ່ມຕົ້ນ; ຊ່ອງຂໍ້ມູນທີ່ບໍ່ໄດ້ໃຊ້ຍັງໃຊ້ພື້ນທີ່ stack. ເມື່ອ​ໃດ​ -mpacked-stack is
ລະບຸໄວ້, ລົງທະບຽນບັນທຶກສະລັອດຕິງຖືກຫຸ້ມຢ່າງຫນາແຫນ້ນຢູ່ເທິງສຸດຂອງບັນທຶກບັນທຶກ
ພື້ນທີ່; ພື້ນທີ່ທີ່ບໍ່ໄດ້ໃຊ້ແມ່ນຖືກນໍາໃຊ້ຄືນໃຫມ່ສໍາລັບຈຸດປະສົງອື່ນໆ, ຊ່ວຍໃຫ້ການນໍາໃຊ້ທີ່ມີປະສິດທິພາບຫຼາຍຂຶ້ນ
ພື້ນທີ່ stack ທີ່ມີຢູ່. ຢ່າງໃດກໍຕາມ, ເມື່ອ -mbackchain ຍັງມີຜົນບັງຄັບໃຊ້, ສູງສຸດ
ຄໍາຂອງພື້ນທີ່ປະຫຍັດແມ່ນໃຊ້ສະເຫມີເພື່ອເກັບຮັກສາ backchain, ແລະທີ່ຢູ່ກັບຄືນ
ການລົງທະບຽນຖືກບັນທຶກໄວ້ສະເຫມີສອງຄໍາຂ້າງລຸ່ມນີ້ backchain.

ຕາບໃດທີ່ backchain ກອບ stack ບໍ່ຖືກນໍາໃຊ້, ລະຫັດທີ່ສ້າງຂຶ້ນດ້ວຍ -mpacked-stack
ແມ່ນການໂທເຂົ້າກັນໄດ້ກັບລະຫັດທີ່ສ້າງຂຶ້ນດ້ວຍ -mno-packed-stack. ໃຫ້ສັງເກດວ່າບາງທີ່ບໍ່ແມ່ນ FSF
ການປ່ອຍ GCC 2.95 ສໍາລັບລະຫັດທີ່ສ້າງ S/390 ຫຼື zSeries ທີ່ໃຊ້ stack frame
backchain ໃນເວລາແລ່ນ, ບໍ່ພຽງແຕ່ສໍາລັບຈຸດປະສົງ debugging. ລະຫັດດັ່ງກ່າວບໍ່ແມ່ນການໂທ -
ເຂົ້າກັນໄດ້ກັບລະຫັດທີ່ລວບລວມກັບ -mpacked-stack. ນອກຈາກນີ້, ສັງເກດວ່າການປະສົມປະສານຂອງ
-mbackchain, -mpacked-stack ແລະ -mhard-float ບໍ່ຮອງຮັບ. ເພື່ອສ້າງເປັນ
ການນໍາໃຊ້ linux kernel -msoft-float.

ຄ່າເລີ່ມຕົ້ນແມ່ນເພື່ອບໍ່ໃຊ້ການຈັດວາງ stacked.

-msmall-exec
-mno-small-exec
ສ້າງ (ຫຼືບໍ່ສ້າງ) ລະຫັດໂດຍໃຊ້ຄໍາແນະນໍາ "bras" ເພື່ອເຮັດກິດຈະ ກຳ ຍ່ອຍ
ໂທ. ນີ້ພຽງແຕ່ເຮັດວຽກທີ່ເຊື່ອຖືໄດ້ຖ້າຫາກວ່າຂະຫນາດປະຕິບັດທັງຫມົດບໍ່ເກີນ 64k.
ຄ່າເລີ່ມຕົ້ນແມ່ນໃຊ້ຄໍາແນະນໍາ "basr" ແທນ, ເຊິ່ງບໍ່ມີນີ້
ຂໍ້ຈໍາກັດ.

-m64
-m31
ເມື່ອ​ໃດ​ -m31 ຖືກລະບຸໄວ້, ສ້າງລະຫັດທີ່ສອດຄ່ອງກັບ GNU/Linux ສໍາລັບ S/390 ABI. ເມື່ອ​ໃດ​
-m64 ຖືກລະບຸ, ສ້າງລະຫັດທີ່ສອດຄ່ອງກັບ GNU/Linux ສໍາລັບ zSeries ABI. ນີ້
ອະນຸຍາດໃຫ້ GCC ໂດຍສະເພາະສ້າງຄໍາແນະນໍາ 64-bit. ສໍາ​ລັບ s390 ເປົ້າ​ຫມາຍ, ໄດ້
ມາດຕະຖານແມ່ນ -m31, ໃນຂະນະທີ່ s390x ເປົ້າ​ຫມາຍ​ໃນ​ຕອນ​ຕົ້ນ​ທີ່​ຈະ​ -m64.

-mzarch
-ເມຊາ
ເມື່ອ​ໃດ​ -mzarch ຖືກລະບຸ, ສ້າງລະຫັດໂດຍໃຊ້ຄໍາແນະນໍາທີ່ມີຢູ່ໃນ
z/ສະຖາປັດຕະຍະກໍາ. ເມື່ອ​ໃດ​ -ເມຊາ ຖືກລະບຸ, ສ້າງລະຫັດໂດຍໃຊ້ຄໍາແນະນໍາ
ມີຢູ່ໃນ ESA/390. ໃຫ້ສັງເກດວ່າ -ເມຊາ ເປັນໄປບໍ່ໄດ້ກັບ -m64. ເມື່ອສ້າງ
ລະຫັດປະຕິບັດຕາມ GNU/Linux ສໍາລັບ S/390 ABI, ຄ່າເລີ່ມຕົ້ນແມ່ນ -ເມຊາ. ເມື່ອສ້າງ
ລະຫັດປະຕິບັດຕາມ GNU/Linux ສໍາລັບ zSeries ABI, ຄ່າເລີ່ມຕົ້ນແມ່ນ -mzarch.

-mmvcle
-mno-mvcle
ສ້າງ (ຫຼືບໍ່ສ້າງ) ລະຫັດໂດຍໃຊ້ຄໍາແນະນໍາ "mvcle" ເພື່ອດໍາເນີນການບລັອກ
ຍ້າຍ. ເມື່ອ​ໃດ​ -mno-mvcle ຖືກລະບຸ, ໃຫ້ໃຊ້ "mvc" loop ແທນ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ
ເວັ້ນເສຍແຕ່ຈະເພີ່ມປະສິດທິພາບສໍາລັບຂະຫນາດ.

-mdebug
-mno-debug
ພິມ (ຫຼືບໍ່ພິມ) ຂໍ້ມູນດີບັກເພີ່ມເຕີມໃນເວລາລວບລວມ. ຄ່າເລີ່ມຕົ້ນແມ່ນ
ເພື່ອບໍ່ພິມຂໍ້ມູນດີບັກ.

- ມີນາ=cpu-type
ສ້າງລະຫັດທີ່ຈະດໍາເນີນການ cpu-type, ຊຶ່ງເປັນຊື່ຂອງລະບົບທີ່ເປັນຕົວແທນ a
ໂປເຊດເຊີບາງປະເພດ. ມູນຄ່າທີ່ເປັນໄປໄດ້ສໍາລັບ cpu-type ມີ g5, g6, z900, z990, z9-109,
z9-ec ແລະ z10. ເມື່ອສ້າງລະຫັດໂດຍໃຊ້ຄໍາແນະນໍາທີ່ມີຢູ່ໃນ
z/ສະຖາປັດຕະຍະກຳ, ຄ່າເລີ່ມຕົ້ນແມ່ນ - ມີນາ=z900. ຖ້າບໍ່ດັ່ງນັ້ນ, ຄ່າເລີ່ມຕົ້ນແມ່ນ -march=g5.

-mtune=cpu-type
ປບັ cpu-type ທຸກຢ່າງທີ່ໃຊ້ໄດ້ກ່ຽວກັບລະຫັດທີ່ສ້າງຂຶ້ນ, ຍົກເວັ້ນ ABI
ແລະຊຸດຄໍາແນະນໍາທີ່ມີຢູ່. ບັນຊີລາຍຊື່ຂອງ cpu-type ຄ່າແມ່ນຄືກັນກັບສໍາລັບ
- ມີນາ. ຄ່າເລີ່ມຕົ້ນແມ່ນຄ່າທີ່ໃຊ້ສໍາລັບ - ມີນາ.

-mtpf-trace
-mno-tpf-trace
ສ້າງລະຫັດທີ່ເພີ່ມ (ບໍ່ເພີ່ມ) ໃນສາຂາສະເພາະ TPF OS ເພື່ອຕິດຕາມສິ່ງທີ່ເຮັດປະຈຳ
ໃນ​ລະ​ບົບ​ປະ​ຕິ​ບັດ​ການ​. ທາງ​ເລືອກ​ນີ້​ຈະ​ປິດ​ເປັນ​ຄ່າ​ເລີ່ມ​ຕົ້ນ, ເຖິງ​ແມ່ນ​ວ່າ​ໃນ​ເວ​ລາ​ທີ່​ການ​ສັງ​ລວມ​ສໍາ​ລັບ​ການ
TPF OS.

-mfused-madd
-mno-fused-madd
ສ້າງລະຫັດທີ່ໃຊ້ (ບໍ່ໃຊ້) ຈຸດລອຍຕົວຄູນ ແລະສະສົມ
ຄໍາແນະນໍາ. ຄໍາ​ແນະ​ນໍາ​ເຫຼົ່າ​ນີ້​ແມ່ນ​ໄດ້​ຖືກ​ສ້າງ​ຕັ້ງ​ຂຶ້ນ​ໂດຍ​ຄ່າ​ເລີ່ມ​ຕົ້ນ​ຖ້າ​ຫາກ​ວ່າ​ຮາດ​ແວ​ຈຸດ​ທີ່​ເລື່ອນ​ໄດ້​
ຖືກນໍາໃຊ້.

-mwarn-framesize=ຂອບຂະໜາດ
ສົ່ງຄຳເຕືອນຖ້າຟັງຊັນປັດຈຸບັນເກີນຂະໜາດກອບທີ່ກຳນົດ. ເນື່ອງຈາກວ່ານີ້ແມ່ນ
ການກວດສອບເວລາລວບລວມມັນບໍ່ຈໍາເປັນຕ້ອງເປັນບັນຫາທີ່ແທ້ຈິງໃນເວລາທີ່ໂຄງການແລ່ນ. ມັນ
ມີຈຸດປະສົງເພື່ອກໍານົດຟັງຊັນທີ່ອາດຈະເຮັດໃຫ້ເກີດ stack overflow. ມັນ​ແມ່ນ
ເປັນປະໂຫຍດທີ່ຈະໃຊ້ໃນສະພາບແວດລ້ອມທີ່ມີຂະຫນາດ stack ຈໍາກັດເຊັ່ນ linux kernel.

-mwar-dynamicstack
ສົ່ງຄຳເຕືອນຖ້າຟັງຊັນເອີ້ນ alloca ຫຼືໃຊ້ອາເຣຂະໜາດໄດນາມິກ. ນີ້​ແມ່ນ
ໂດຍທົ່ວໄປແລ້ວເປັນຄວາມຄິດທີ່ບໍ່ດີທີ່ມີຂະຫນາດ stack ຈໍາກັດ.

-mstack-guard=stack-guard
-mstack-size=ຂະໜາດ stack
ຖ້າທາງເລືອກເຫຼົ່ານີ້ຖືກສະຫນອງໃຫ້, s390 back end ປ່ອຍຄໍາແນະນໍາເພີ່ມເຕີມໃນ
ຟັງຊັນ prologue ທີ່ກະຕຸ້ນດັກຖ້າຂະຫນາດ stack ແມ່ນ stack-guard bytes ຂ້າງເທິງ
ໄດ້ ຂະໜາດ stack (ຈື່ໄວ້ວ່າ stack ໃນ s390 ເຕີບໂຕລົງ). ຖ້າ stack-guard
ທາງ​ເລືອກ​ແມ່ນ​ຍົກ​ເວັ້ນ​ພະ​ລັງ​ງານ​ຂະ​ຫນາດ​ນ້ອຍ​ສຸດ​ຂອງ 2 ຂະ​ຫນາດ​ໃຫຍ່​ກ​່​ວາ​ຂະ​ຫນາດ​ກອບ​ຂອງ​ການ​ສັງ​ລວມ​ໄດ້​
ຟັງຊັນຖືກເລືອກ. ຕົວເລືອກເຫຼົ່ານີ້ມີຈຸດປະສົງເພື່ອໃຊ້ເພື່ອຊ່ວຍ debugging stack
ບັນຫາ overflow. ລະຫັດ emitted ເພີ່ມເຕີມເຮັດໃຫ້ພຽງແຕ່ overhead ພຽງເລັກນ້ອຍແລະ
ເພາະສະນັ້ນ, ຍັງສາມາດຖືກນໍາໃຊ້ໃນການຜະລິດເຊັ່ນລະບົບທີ່ບໍ່ມີປະສິດທິພາບຫຼາຍ
ການເຊື່ອມໂຊມ. ຄ່າທີ່ໃຫ້ມາຈະຕ້ອງເປັນອຳນາດທີ່ແນ່ນອນຂອງ 2 ແລະ ຂະໜາດ stack ຕ້ອງເປັນ
ໃຫຍ່​ກວ່າ stack-guard ບໍ່ເກີນ 64k. ເພື່ອໃຫ້ມີປະສິດທິພາບພິເສດ
ລະຫັດເຮັດໃຫ້ສົມມຸດຕິຖານວ່າ stack ເລີ່ມຕົ້ນຢູ່ທີ່ທີ່ຢູ່ສອດຄ່ອງກັບຄ່າ
ມອບ​ໃຫ້​ໂດຍ ຂະໜາດ stack. ໄດ້ stack-guard ທາງ​ເລືອກ​ພຽງ​ແຕ່​ສາ​ມາດ​ນໍາ​ໃຊ້​ຮ່ວມ​ກັບ​
ຂະໜາດ stack.

ຜະລິດແນນ ທາງເລືອກໃນການ

ຕົວເລືອກເຫຼົ່ານີ້ຖືກກໍານົດໄວ້ສໍາລັບການຈັດຕັ້ງປະຕິບັດຄະແນນ:

-ເມບ
ລວບລວມລະຫັດສໍາລັບຮູບແບບ big-endian. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-mel
ລວບລວມລະຫັດສໍາລັບຮູບແບບ little-endian.

-mnhwloop
ປິດການໃຊ້ງານການສ້າງຄໍາແນະນໍາ bcnz.

-muls
ເປີດໃຊ້ການສ້າງການໂຫຼດທີ່ບໍ່ສອດຄ່ອງກັນ ແລະຄໍາແນະນໍາການເກັບຮັກສາ.

-mmac
ເປີດການນຳໃຊ້ຄຳແນະນຳການຄູນສະສົມ. ປິດການນຳໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

- ຄະ​ແນນ 5
ລະບຸ SCORE5 ເປັນສະຖາປັດຕະຍະກໍາເປົ້າຫມາຍ.

- ຄະແນນ 5u
ລະບຸ SCORE5U ຂອງສະຖາປັດຕະຍະກໍາເປົ້າຫມາຍ.

- ຄະ​ແນນ 7
ລະບຸ SCORE7 ເປັນສະຖາປັດຕະຍະກຳເປົ້າໝາຍ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-mscore7d
ລະບຸ SCORE7D ເປັນສະຖາປັດຕະຍະກຳເປົ້າໝາຍ.

SH ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ -m ທາງ​ເລືອກ​ແມ່ນ​ໄດ້​ກໍາ​ນົດ​ສໍາ​ລັບ​ການ​ປະ​ຕິ​ບັດ SH​:

-m1 ສ້າງລະຫັດສໍາລັບ SH1.

-m2 ສ້າງລະຫັດສໍາລັບ SH2.

-m2e
ສ້າງລະຫັດສໍາລັບ SH2e.

-m2a-nofpu
ສ້າງລະຫັດສໍາລັບ SH2a ໂດຍບໍ່ມີ FPU, ຫຼືສໍາລັບ SH2a-FPU ໃນລັກສະນະດັ່ງກ່າວ.
ຫນ່ວຍບໍລິການຈຸດລອຍບໍ່ໄດ້ຖືກນໍາໃຊ້.

-m2a-ດຽວເທົ່ານັ້ນ
ສ້າງລະຫັດສໍາລັບ SH2a-FPU, ໃນແບບທີ່ບໍ່ມີຈຸດລອຍທີ່ມີຄວາມຊັດເຈນສອງເທົ່າ
ການ​ດໍາ​ເນີນ​ງານ​ໄດ້​ຖືກ​ນໍາ​ໃຊ້​.

-m2a-ດຽວ
ສ້າງລະຫັດສໍາລັບ SH2a-FPU ໂດຍສົມມຸດວ່າຫນ່ວຍບໍລິການຈຸດລອຍຢູ່ໃນຄວາມຊັດເຈນດຽວ
ຮູບແບບໂດຍໃນຕອນຕົ້ນ.

-m2a
ສ້າງລະຫັດສໍາລັບ SH2a-FPU ໂດຍສົມມຸດວ່າຫນ່ວຍບໍລິການຈຸດລອຍຢູ່ໃນຄວາມຊັດເຈນສອງເທົ່າ
ຮູບແບບໂດຍໃນຕອນຕົ້ນ.

-m3 ສ້າງລະຫັດສໍາລັບ SH3.

-m3e
ສ້າງລະຫັດສໍາລັບ SH3e.

-m4-nofpu
ສ້າງລະຫັດສໍາລັບ SH4 ໂດຍບໍ່ມີຫນ່ວຍບໍລິການຈຸດລອຍ.

-m4-ດຽວເທົ່ານັ້ນ
ສ້າງລະຫັດສໍາລັບ SH4 ດ້ວຍຫນ່ວຍບໍລິການຈຸດລອຍທີ່ຮອງຮັບພຽງແຕ່ດຽວເທົ່ານັ້ນ.
ເລກເລກທີ່ຊັດເຈນ.

-m4-ດຽວ
ສ້າງລະຫັດສໍາລັບ SH4 ໂດຍສົມມຸດວ່າຫນ່ວຍງານຈຸດລອຍຢູ່ໃນໂຫມດຄວາມຊັດເຈນດຽວ
ໂດຍຄ່າເລີ່ມຕົ້ນ

-m4 ສ້າງລະຫັດສໍາລັບ SH4.

-m4a-nofpu
ສ້າງລະຫັດສໍາລັບ SH4al-dsp, ຫຼືສໍາລັບ SH4a ໃນຮູບແບບທີ່ຈຸດລອຍ.
ຫນ່ວຍງານບໍ່ໄດ້ຖືກນໍາໃຊ້.

-m4a-ດຽວເທົ່ານັ້ນ
ສ້າງລະຫັດສໍາລັບ SH4a, ໃນລັກສະນະທີ່ບໍ່ມີຄວາມຊັດເຈນ double-precision floating-point
ການ​ດໍາ​ເນີນ​ງານ​ໄດ້​ຖືກ​ນໍາ​ໃຊ້​.

-m4a-ດຽວ
ສ້າງລະຫັດສໍາລັບ SH4a ໂດຍສົມມຸດວ່າຫນ່ວຍງານຈຸດລອຍຢູ່ໃນຄວາມຊັດເຈນດຽວ
ຮູບແບບໂດຍໃນຕອນຕົ້ນ.

-m4a
ສ້າງລະຫັດສໍາລັບ SH4a.

-m4al
ຄື​ກັນ​ກັບ -m4a-nofpu, ຍົກເວັ້ນວ່າມັນຜ່ານ implicitly -dsp ກັບຜູ້ປະກອບ. GCC
ບໍ່ໄດ້ສ້າງຄໍາແນະນໍາ DSP ໃດໆໃນເວລານີ້.

-mb ລວບລວມລະຫັດສໍາລັບໂປເຊດເຊີໃນຮູບແບບໃຫຍ່.

-ml ລວບລວມລະຫັດສໍາລັບໂປເຊດເຊີໃນໂຫມດ little-endian.

-mdalign
ຈັດຮຽງສອງເທົ່າຢູ່ທີ່ຂອບເຂດ 64-ບິດ. ໃຫ້ສັງເກດວ່ານີ້ມີການປ່ຽນແປງສົນທິສັນຍາການເອີ້ນ,
ແລະດັ່ງນັ້ນບາງຫນ້າທີ່ຈາກຫ້ອງສະຫມຸດ C ມາດຕະຖານຈະບໍ່ເຮັດວຽກເວັ້ນເສຍແຕ່ວ່າທ່ານ recompile
ມັນຄັ້ງທໍາອິດກັບ -mdalign.

-mrelax
ຫຍໍ້ບາງການອ້າງອີງທີ່ຢູ່ໃນເວລາເຊື່ອມຕໍ່, ເມື່ອເປັນໄປໄດ້; ໃຊ້ຕົວເລືອກຕົວເຊື່ອມຕໍ່
- ຜ່ອນຄາຍ.

-migtable
ໃຊ້ການຊົດເຊີຍ 32-bit ໃນຕາຕະລາງ "ສະຫຼັບ". ຄ່າເລີ່ມຕົ້ນແມ່ນການໃຊ້ 16-bit offsets.

- ບິດ
ເປີດໃຊ້ຄໍາແນະນໍາການຫມູນໃຊ້ບິດໃນ SH2A.

-mfmovd
ເປີດນໍາໃຊ້ຄໍາແນະນໍາ "fmovd". ກວດສອບ -mdalign ສໍາລັບຂໍ້ຈໍາກັດການຈັດຕໍາແຫນ່ງ.

-mhitachi
ປະຕິບັດຕາມສົນທິສັນຍາການໂທຫາທີ່ກໍານົດໂດຍ Renesas.

-mrenesas
ປະຕິບັດຕາມສົນທິສັນຍາການໂທຫາທີ່ກໍານົດໂດຍ Renesas.

-mno-renesas
ປະຕິບັດຕາມສົນທິສັນຍາການໂທຫາທີ່ກໍານົດສໍາລັບ GCC ກ່ອນສົນທິສັນຍາ Renesas
ມີຢູ່. ຕົວເລືອກນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນສໍາລັບທຸກເປົ້າໝາຍຂອງຕ່ອງໂສ້ເຄື່ອງມື SH.

-mnomacsave
ຫມາຍ "MAC" ລົງທະບຽນເປັນ call-clobbered, ເຖິງແມ່ນວ່າ -mhitachi ແມ່ນໃຫ້.

-ມີ່
-mno-ieee
ຄວບຄຸມການປະຕິບັດຕາມ IEEE ຂອງການປຽບທຽບຈຸດລອຍ, ເຊິ່ງມີຜົນກະທົບຕໍ່ການຈັດການ
ຂອງກໍລະນີທີ່ຜົນຂອງການປຽບທຽບບໍ່ມີຄໍາສັ່ງ. ໂດຍຄ່າເລີ່ມຕົ້ນ -ມີ່ is
ເປີດໃຊ້ໂດຍທາງອ້ອມ. ຖ້າ -ffinite-math-ເທົ່ານັ້ນ ເປີດໃຊ້ງານ -mno-ieee ໄດ້​ຖືກ​ກໍາ​ນົດ​ໂດຍ​ທາງ​ການ​,
ເຊິ່ງເຮັດໃຫ້ການປຽບທຽບຈຸດທີ່ລອຍຕົວໄວກວ່າ ແລະສະເໝີພາບໜ້ອຍກວ່າ. ໄດ້
ການຕັ້ງຄ່າ implcit ສາມາດຖືກລົບລ້າງໂດຍການລະບຸ -ມີ່ or -mno-ieee.

-minline-ic_invalidate
ລະຫັດໃນແຖວເພື່ອຍົກເລີກການປ້ອນຂໍ້ມູນ cache ຄໍາແນະນໍາຫຼັງຈາກຕັ້ງຄ່າການທໍາງານທີ່ຊ້ອນກັນ
trampolines. ຕົວເລືອກນີ້ບໍ່ມີຜົນຖ້າ -musermode ມີຜົນບັງຄັບໃຊ້ແລະເລືອກ
ທາງເລືອກການສ້າງລະຫັດ (ຕົວຢ່າງ -m4) ບໍ່ອະນຸຍາດໃຫ້ໃຊ້ຄໍາແນະນໍາ icbi. ຖ້າ
ທາງເລືອກການຜະລິດລະຫັດທີ່ເລືອກບໍ່ອະນຸຍາດໃຫ້ໃຊ້ຄໍາແນະນໍາ icbi,
ແລະ -musermode ບໍ່ມີຜົນບັງຄັບໃຊ້, ລະຫັດ inlined ຈະ manipulate ຄໍາແນະນໍາ
cache address array ໂດຍກົງກັບ associative write. ນີ້ບໍ່ພຽງແຕ່ຮຽກຮ້ອງໃຫ້ມີ
ຮູບແບບສິດທິພິເສດ, ແຕ່ມັນກໍ່ຈະລົ້ມເຫລວຖ້າເສັ້ນ cache ໄດ້ຖືກແຜນທີ່ຜ່ານ TLB
ແລະໄດ້ກາຍເປັນທີ່ບໍ່ມີແຜນທີ່.

- misize
ຖິ້ມຂະຫນາດຄໍາແນະນໍາແລະສະຖານທີ່ຢູ່ໃນລະຫັດການປະກອບ.

- ຂົວ
ຕົວເລືອກນີ້ຖືກປະຕິເສດ. ມັນ pads ໂຄງສ້າງເພື່ອຄວາມຫຼາກຫຼາຍຂອງ 4 bytes, ເຊິ່ງແມ່ນ
ບໍ່ເຂົ້າກັນໄດ້ກັບ SH ABI.

-msoft-atomic
ສ້າງ GNU/Linux ທີ່ເຂົ້າກັນໄດ້ກັບຊອບແວ gUSA ລໍາດັບປະລໍາມະນູສໍາລັບປະລໍາມະນູໃນຕົວ
ຫນ້າທີ່. ລໍາດັບປະລໍາມະນູທີ່ຜະລິດຮຽກຮ້ອງໃຫ້ມີການສະຫນັບສະຫນູນຈາກການຂັດຂວາງ /.
ລະຫັດການຈັດການຂໍ້ຍົກເວັ້ນຂອງລະບົບ ແລະເໝາະສົມກັບລະບົບຫຼັກດຽວເທົ່ານັ້ນ.
ພວກມັນຈະບໍ່ປະຕິບັດຢ່າງຖືກຕ້ອງໃນລະບົບຫຼາຍຫຼັກ. ຕົວເລືອກນີ້ຖືກເປີດໃຊ້ໂດຍ
ຄ່າເລີ່ມຕົ້ນເມື່ອເປົ້າໝາຍແມ່ນ "sh-*-linux*". ສໍາລັບລາຍລະອຽດກ່ຽວກັບເຄື່ອງປະກອບອາລໍາມະນູ
ຫນ້າ​ທີ່​ເບິ່ງ​ __ປະລໍາມະນູ ເກີດຂຶ້ນ.

-mspace
ປັບແຕ່ງພື້ນທີ່ແທນຄວາມໄວ. ບົ່ງບອກໂດຍ -ອສ.

- ມັກ
ເມື່ອສ້າງລະຫັດເອກະລາດຕໍາແຫນ່ງ, ປ່ອຍຟັງຊັນການໂທໂດຍໃຊ້ Global Offset
ຕາຕະລາງແທນທີ່ຈະເປັນຕາຕະລາງການເຊື່ອມໂຍງຂັ້ນຕອນ.

-musermode
ຢ່າສ້າງລະຫັດຮູບແບບສິດທິພິເສດເທົ່ານັ້ນ; ຫມາຍຄວາມວ່າ -mno-inline-ic_invalidate ຖ້າ
ລະຫັດໃນແຖວຈະບໍ່ເຮັດວຽກຢູ່ໃນໂໝດຜູ້ໃຊ້. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນໃນເວລາທີ່ເປົ້າຫມາຍແມ່ນ
"sh-*-linux*".

-multcost=ຈໍານວນ
ກໍານົດຄ່າໃຊ້ຈ່າຍເພື່ອສົມມຸດສໍາລັບ insn ຄູນ.

-mdiv=ແຜນຍຸດທະສາດ
ກໍານົດຍຸດທະສາດການແບ່ງເພື່ອນໍາໃຊ້ສໍາລັບການປະຕິບັດງານການແບ່ງຈໍານວນເຕັມ. ສໍາລັບ SHmedia
ແຜນຍຸດທະສາດ ສາມາດເປັນຫນຶ່ງໃນ:

fp ປະຕິບັດການດໍາເນີນງານຢູ່ໃນຈຸດທີ່ເລື່ອນໄດ້. ນີ້ມີ latency ສູງຫຼາຍ, ແຕ່ຄວາມຕ້ອງການ
ພຽງແຕ່ຄໍາແນະນໍາຈໍານວນຫນ້ອຍ, ດັ່ງນັ້ນມັນອາດຈະເປັນທາງເລືອກທີ່ດີຖ້າລະຫັດຂອງທ່ານມີພຽງພໍ
easy-exploitable ILP ເພື່ອອະນຸຍາດໃຫ້ compiler ກໍານົດເວລາຂອງຈຸດທີ່ເລື່ອນໄດ້
ຄໍາແນະນໍາພ້ອມກັບຄໍາແນະນໍາອື່ນໆ. ການແບ່ງສູນສາເຫດ ກ
ຂໍ້ຍົກເວັ້ນຈຸດລອຍ.

ເຊີນ ໃຊ້ການດໍາເນີນການຈໍານວນເຕັມເພື່ອຄິດໄລ່ການປີ້ນຂອງຕົວຫານ, ແລະຫຼັງຈາກນັ້ນ
ຄູນເງິນປັນຜົນດ້ວຍການປີ້ນ. ຍຸດທະສາດນີ້ອະນຸຍາດໃຫ້ CSE ແລະ hoisting
ຂອງການຄິດໄລ່ປີ້ນກັບກັນ. ການ​ແບ່ງ​ສູນ​ໂດຍ​ການ​ຄິດ​ໄລ່​ຜົນ​ໄດ້​ຮັບ​ທີ່​ບໍ່​ໄດ້​ລະ​ບຸ​ໄວ້​,
ແຕ່ບໍ່ໃສ່ກັບດັກ.

inv:minlat
variant ຂອງ ເຊີນ ບ່ອນທີ່, ຖ້າບໍ່ມີ CSE ຫຼືໂອກາດ hoisting ໄດ້ຖືກພົບເຫັນ, ຫຼືຖ້າຫາກວ່າ
ການ​ດໍາ​ເນີນ​ງານ​ທັງ​ຫມົດ​ໄດ້​ຮັບ​ການ hoisted ກັບ​ສະ​ຖານ​ທີ່​ດຽວ​ກັນ​, ຂັ້ນ​ຕອນ​ສຸດ​ທ້າຍ​ຂອງ​
ການຄິດໄລ່ແບບປີ້ນກັບແມ່ນ intertwined ກັບຕົວຄູນສຸດທ້າຍເພື່ອຫຼຸດຜ່ອນການລວມ
latency, ໃນຄ່າໃຊ້ຈ່າຍຂອງການນໍາໃຊ້ຄໍາແນະນໍາເພີ່ມເຕີມຈໍານວນຫນ້ອຍ, ແລະດັ່ງນັ້ນຈຶ່ງສະເຫນີຫນ້ອຍ
ກໍານົດໂອກາດທີ່ມີລະຫັດອື່ນໆ.

ໂທ
ໂທຫາຫນ້າທີ່ຫ້ອງສະຫມຸດທີ່ປົກກະຕິແລ້ວປະຕິບັດການ inv:minlat ຍຸດ​ທະ​ສາດ. ນີ້
ໃຫ້ຄວາມຫນາແຫນ້ນຂອງລະຫັດສູງສໍາລັບການລວບລວມ "m5-*media-nofpu".

ໂທ 2
ໃຊ້ຈຸດເຂົ້າທີ່ແຕກຕ່າງກັນຂອງຟັງຊັນຫ້ອງສະຫມຸດດຽວກັນ, ບ່ອນທີ່ມັນສົມມຸດວ່າ a
ຕົວຊີ້ໄປຫາຕາຕະລາງຊອກຫາໄດ້ຖືກຕັ້ງໄວ້ແລ້ວ, ເຊິ່ງເປີດເຜີຍການໂຫຼດຕົວຊີ້
ກັບ CSE ແລະການເພີ່ມປະສິດທິພາບລະຫັດ hoisting.

inv: ໂທ
inv:ໂທ2
inv:fp
ການນໍາໃຊ້ ເຊີນ algorithm ສໍາລັບການສ້າງລະຫັດເບື້ອງຕົ້ນ, ແຕ່ຖ້າລະຫັດຍັງຄົງຢູ່
unoptimized, ກັບໄປ ໂທ, ໂທ 2, ຫຼື fp ຍຸດທະສາດ, ຕາມລໍາດັບ. ໃຫ້ສັງເກດວ່າ
ຜົນ​ຂ້າງ​ຄຽງ​ທີ່​ອາດ​ຈະ​ຕິດ​ກັບ​ການ​ແບ່ງ​ປັນ​ໂດຍ​ສູນ​ແມ່ນ​ປະ​ຕິ​ບັດ​ໂດຍ​ການ​ແຍກ​ຕ່າງ​ຫາກ
ຄໍາແນະນໍາ, ສະນັ້ນມັນເປັນໄປໄດ້ວ່າຄໍາແນະນໍາຈໍານວນທັງຫມົດແມ່ນ hoisted ອອກ,
ແຕ່ເຄື່ອງຫມາຍສໍາລັບຜົນກະທົບຂ້າງຄຽງຍັງຄົງຢູ່ບ່ອນທີ່ມັນຢູ່. ການປະສົມກັບ
ໃນກໍລະນີດັ່ງກ່າວນີ້, ການດໍາເນີນງານຈຸດເລື່ອນຫຼືການໂທແມ່ນເປັນໄປບໍ່ໄດ້.

inv20u
inv20l
ຕົວແປຂອງ inv:minlat ຍຸດ​ທະ​ສາດ. ໃນກໍລະນີທີ່ການຄິດໄລ່ແບບກົງກັນຂ້າມແມ່ນ
ບໍ່ໄດ້ແຍກອອກຈາກທະວີຄູນ, ພວກເຂົາເລັ່ງການແບ່ງສ່ວນທີ່ເງິນປັນຜົນພໍດີ
ເຂົ້າໄປໃນ 20 bits (ບວກກັບເຄື່ອງຫມາຍທີ່ສາມາດໃຊ້ໄດ້) ໂດຍການໃສ່ການທົດສອບເພື່ອຂ້າມຈໍານວນຂອງ
ການດໍາເນີນງານໃນກໍລະນີນີ້; ການທົດສອບນີ້ເຮັດໃຫ້ຊ້າລົງກໍລະນີຂອງເງິນປັນຜົນຂະຫນາດໃຫຍ່.
inv20u ສົມມຸດວ່າກໍລະນີຂອງເງິນປັນຜົນຂະຫນາດນ້ອຍດັ່ງກ່າວຈະເປັນໄປບໍ່ໄດ້, ແລະ inv20l
ສົມມຸດວ່າມັນເປັນໄປໄດ້.

ສໍາລັບເປົ້າຫມາຍອື່ນທີ່ບໍ່ແມ່ນ SHmedia ແຜນຍຸດທະສາດ ສາມາດເປັນຫນຶ່ງໃນ:

ໂທ-div1
ເອີ້ນຟັງຊັນຫ້ອງສະໝຸດທີ່ໃຊ້ຄຳສັ່ງການແບ່ງຂັ້ນຕອນດຽວ "div1" ຫາ
ດໍາເນີນການປະຕິບັດງານ. ການແບ່ງໂດຍສູນຄິດໄລ່ຜົນໄດ້ຮັບທີ່ບໍ່ລະບຸແລະເຮັດ
ບໍ່ໃສ່ກັບດັກ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນຍົກເວັ້ນ SH4, SH2A ແລະ SHcompact.

ໂທ-fp
ເອີ້ນຟັງຊັນຫ້ອງສະໝຸດທີ່ເຮັດໜ້າທີ່ໃນການເລື່ອນຄວາມແມ່ນຍໍາສອງເທົ່າ
ຈຸດ. ການແບ່ງເປັນສູນເຮັດໃຫ້ເກີດຂໍ້ຍົກເວັ້ນຈຸດລອຍ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ
ສໍາລັບ SHcompact ກັບ FPU. ການລະບຸນີ້ສໍາລັບເປົ້າຫມາຍທີ່ບໍ່ມີສອງເທົ່າ
ຄວາມແມ່ນຍໍາ FPU ຈະເລີ່ມຕົ້ນເປັນ "call-div1".

ຕາ​ຕະ​ລາງ​ໂທ​
ເອີ້ນຟັງຊັນຫ້ອງສະໝຸດທີ່ໃຊ້ຕາຕະລາງຊອກຫາສຳລັບຕົວຫານຂະໜາດນ້ອຍ ແລະ
ຄໍາແນະນໍາ "div1" ທີ່ມີການຈໍາແນກກໍລະນີສໍາລັບຕົວແບ່ງຂະຫນາດໃຫຍ່. ແບ່ງໂດຍສູນ
ຄິດໄລ່ຜົນໄດ້ຮັບທີ່ບໍ່ໄດ້ກໍານົດແລະບໍ່ໃສ່ກັບດັກ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນຂອງ SH4.
ການລະບຸນີ້ສໍາລັບເປົ້າຫມາຍທີ່ບໍ່ມີຄໍາແນະນໍາການປ່ຽນແປງແບບເຄື່ອນໄຫວຈະ
ເລີ່ມຕົ້ນເປັນ "call-div1".

ເມື່ອຍຸດທະສາດການແບ່ງສ່ວນບໍ່ໄດ້ຖືກລະບຸ, ຍຸດທະສາດເລີ່ມຕົ້ນຈະຖືກເລືອກ
ອີງ​ຕາມ​ເປົ້າ​ຫມາຍ​ໃນ​ປັດ​ຈຸ​ບັນ​. ສໍາລັບ SH2A ຍຸດທະສາດເລີ່ມຕົ້ນແມ່ນການນໍາໃຊ້ "divs" ແລະ
ຄໍາແນະນໍາ "divu" ແທນທີ່ຈະໂທຫາຫນ້າທີ່ຫ້ອງສະຫມຸດ.

-maccumulate-outgoing-args
ຈອງພື້ນທີ່ຫນຶ່ງຄັ້ງສໍາລັບການໂຕ້ຖຽງທີ່ອອກມາໃນ prologue ຟັງຊັນແທນທີ່ຈະປະມານ
ໂທແຕ່ລະຄັ້ງ. ໂດຍທົ່ວໄປແລ້ວມີປະໂຫຍດຕໍ່ການປະຕິບັດແລະຂະຫນາດ. ຍັງຕ້ອງການສໍາລັບການ unwinding
ເພື່ອຫຼີກເວັ້ນການປ່ຽນ stack frame ປະມານລະຫັດເງື່ອນໄຂ.

-mdivsi3_libfunc=ຊື່
ກໍານົດຊື່ຂອງຟັງຊັນຫ້ອງສະຫມຸດທີ່ໃຊ້ສໍາລັບການແບ່ງ 32-bit ເຊັນກັບ ຊື່. ນີ້
ມີຜົນກະທົບພຽງແຕ່ຊື່ທີ່ໃຊ້ໃນການໂທແລະ inv: ຍຸດທະສາດການແບ່ງການໂທ, ແລະ
compiler ຈະຍັງຄາດຫວັງວ່າຊຸດດຽວກັນຂອງ input/output/clobbered registers ຄືກັບວ່າ
ຕົວເລືອກນີ້ບໍ່ມີຢູ່.

-mfixed-range=ໄລຍະລົງທະບຽນ
ສ້າງລະຫັດການປິ່ນປົວຂອບເຂດການລົງທະບຽນທີ່ໃຫ້ມາເປັນການລົງທະບຽນຄົງທີ່. ການລົງທະບຽນຄົງທີ່
ແມ່ນຫນຶ່ງໃນທີ່ຜູ້ຈັດສັນທະບຽນບໍ່ສາມາດໃຊ້ໄດ້. ນີ້ແມ່ນເປັນປະໂຫຍດໃນເວລາທີ່ລວບລວມ kernel
ລະຫັດ. ໄລຍະການລົງທະບຽນແມ່ນລະບຸໄວ້ເປັນສອງທະບຽນທີ່ແຍກອອກໂດຍ dash. ຫຼາຍ
ໄລຍະການລົງທະບຽນສາມາດຖືກລະບຸແຍກດ້ວຍເຄື່ອງໝາຍຈຸດ.

-madjust-unroll
ຍົກເລີກການບີບອັດເພື່ອຫຼີກລ່ຽງການທຳລາຍການລົງທະບຽນເປົ້າໝາຍ. ທາງເລືອກນີ້ມີພຽງແຕ່
ຜົນກະທົບຖ້າພື້ນຖານລະຫັດ gcc ຮອງຮັບ hook ເປົ້າໝາຍ TARGET_ADJUST_UNROLL_MAX.

-mindexed-addressing
ເປີດໃຊ້ຮູບແບບທີ່ຢູ່ທີ່ຖືກດັດສະນີສໍາລັບ SHmedia32/SHcompact. ນີ້ແມ່ນພຽງແຕ່
ປອດໄພຖ້າຮາດແວ ແລະ/ຫຼື OS ປະຕິບັດ 32-bit wrap-around semantics ສໍາລັບດັດສະນີ.
ຮູບແບບທີ່ຢູ່. ສະຖາປັດຕະຍະກໍາອະນຸຍາດໃຫ້ປະຕິບັດໂປເຊດເຊີທີ່ມີ 64-bit
MMU, ເຊິ່ງ OS ສາມາດໃຊ້ເພື່ອຮັບທີ່ຢູ່ 32-bit, ແຕ່ເນື່ອງຈາກບໍ່ມີຮາດແວໃນປະຈຸບັນ
ການປະຕິບັດສະຫນັບສະຫນູນວິທີນີ້ຫຼືວິທີອື່ນເພື່ອເຮັດໃຫ້ຮູບແບບທີ່ຢູ່ທີ່ຖືກດັດສະນີປອດໄພ
ເພື່ອໃຊ້ໃນ 32-bit ABI, ຄ່າເລີ່ມຕົ້ນແມ່ນ -mno-indexed-addressing.

-mgettrcost=ຈໍານວນ
ກໍານົດຄ່າໃຊ້ຈ່າຍທີ່ສົມມຸດຕິຖານສໍາລັບຄໍາແນະນໍາ gettr ກັບ ຈໍານວນ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 2 ຖ້າ
-mpt-ແກ້ໄຂ ມີຜົນບັງຄັບໃຊ້, 100 ຖ້າບໍ່ດັ່ງນັ້ນ.

-mpt-ແກ້ໄຂ
ສົມມຸດວ່າຄໍາແນະນໍາ pt* ຈະບໍ່ດັກ. ນີ້ໂດຍທົ່ວໄປຈະສ້າງຕາຕະລາງທີ່ດີກວ່າ
ລະຫັດ, ແຕ່ບໍ່ປອດໄພໃນຮາດແວປະຈຸບັນ. ຄໍານິຍາມຂອງຖາປັດຕະຍະປະຈຸບັນເວົ້າວ່າ
ວ່າ ptabs ແລະຈັ່ນຈັບ ptrel ໃນເວລາທີ່ເປົ້າຫມາຍແລະ 3 ແມ່ນ 3. ນີ້ມີ
ຜົນກະທົບທີ່ບໍ່ຕັ້ງໃຈທີ່ຈະເຮັດໃຫ້ມັນບໍ່ປອດໄພໃນຕາຕະລາງ ptabs / ptrel ກ່ອນສາຂາ, ຫຼື
ຍົກມັນອອກຈາກວົງ. ຕົວຢ່າງ, __do_global_ctors, ສ່ວນຫນຶ່ງຂອງ libgcc ທີ່ດໍາເນີນການ
constructors ໃນ​ການ​ເລີ່ມ​ຕົ້ນ​ໂຄງ​ການ​, ໂທ​ຫາ​ຫນ້າ​ທີ່​ໃນ​ບັນ​ຊີ​ລາຍ​ການ​ທີ່​ຖືກ​ຈໍາ​ກັດ​ໂດຍ -1​.
ດ້ວຍຕົວເລືອກ -mpt-fixed, ptabs ຈະຖືກເຮັດກ່ອນທີ່ຈະທົດສອບກັບ -1. ນັ້ນ
ຫມາຍຄວາມວ່າຜູ້ກໍ່ສ້າງທັງຫມົດຈະຖືກດໍາເນີນການໄວຂຶ້ນ, ແຕ່ເມື່ອ loop ມາ
ໃນຕອນທ້າຍຂອງບັນຊີລາຍຊື່, ໂປຣແກຣມຂັດຂ້ອງເພາະວ່າ ptabs ໂຫລດ -1 ເຂົ້າໄປໃນເປົ້າຫມາຍ
ລົງທະບຽນ. ເນື່ອງຈາກທາງເລືອກນີ້ບໍ່ປອດໄພສໍາລັບຮາດແວໃດໆທີ່ປະຕິບັດໃນປະຈຸບັນ
ສະຖາປັດຕະຍະ ກຳ ສະເພາະ, ຄ່າເລີ່ມຕົ້ນແມ່ນ -mno-pt-fixed. ເວັ້ນເສຍແຕ່ວ່າຜູ້ໃຊ້ກໍານົດ a
ຄ່າໃຊ້ຈ່າຍສະເພາະກັບ -mgettrcost, -mno-pt-fixed ຍັງຫມາຍຄວາມວ່າ -mgettrcost=100; ນີ້
deters ລົງທະບຽນການຈັດສັນໂດຍໃຊ້ທະບຽນເປົ້າຫມາຍສໍາລັບການເກັບຮັກສາຈໍານວນເຕັມທໍາມະດາ.

-minvalid-ສັນຍາລັກ
ສົມມຸດວ່າສັນຍາລັກອາດຈະບໍ່ຖືກຕ້ອງ. ສັນຍາລັກຟັງຊັນທຳມະດາທີ່ສ້າງຂຶ້ນໂດຍຄອມພີວເຊີ
ຈະໃຊ້ໄດ້ສະເໝີໃນການໂຫຼດດ້ວຍ movi/shori/ptabs ຫຼື movi/shori/ptrel, ແຕ່ມີ
assembler ແລະ/ຫຼື linker tricks ມັນເປັນໄປໄດ້ທີ່ຈະສ້າງສັນຍາລັກທີ່ຈະເຮັດໃຫ້ເກີດ
ptabs / ptrel ກັບດັກ. ທາງເລືອກນີ້ແມ່ນມີຄວາມຫມາຍພຽງແຕ່ໃນເວລາທີ່ -mno-pt-ແກ້ໄຂ ແມ່ນຢູ່ໃນ
ຜົນກະທົບ. ຫຼັງຈາກນັ້ນມັນຈະປ້ອງກັນບໍ່ໃຫ້ cse ຂ້າມພື້ນຖານ, hoisting ແລະກໍານົດເວລາທີ່ສຸດຂອງ
ສັນຍາລັກໂຫຼດ. ຄ່າເລີ່ມຕົ້ນແມ່ນ -mno-invalid-ສັນຍາລັກ.

-mbranch-cost=num
ສົມມຸດຕິຖານ num ເພື່ອເປັນຄ່າໃຊ້ຈ່າຍໃນການສອນສາຂາ. ຕົວເລກທີ່ສູງຂຶ້ນຈະເຮັດໃຫ້
compiler ພະຍາຍາມສ້າງລະຫັດທີ່ບໍ່ມີສາຂາເພີ່ມເຕີມຖ້າເປັນໄປໄດ້. ຖ້າ​ຫາກ​ວ່າ​ບໍ່​ໄດ້​ລະ​ບຸ​ໄວ້​
ຄ່າຖືກເລືອກໂດຍຂຶ້ນກັບປະເພດຂອງໂປເຊດເຊີທີ່ກໍາລັງຖືກລວບລວມສໍາລັບ.

- mcbranchdi
ເປີດໃຊ້ຮູບແບບຄໍາແນະນໍາ "cbranchdi4".

-mcmpeqdi
ປ່ອຍຮູບແບບການສິດສອນ "cmpeqdi_t" ເຖິງແມ່ນວ່າໃນເວລາ - mcbranchdi ແມ່ນຢູ່ໃນຜົນກະທົບ.

-mfused-madd
ອະນຸຍາດໃຫ້ນໍາໃຊ້ຄໍາແນະນໍາ "fmac" (floating-point multiply-accumulate) ຖ້າ
ປະເພດໂປເຊດເຊີສະຫນັບສະຫນູນມັນ. ການເປີດໃຊ້ຕົວເລືອກນີ້ອາດຈະສ້າງລະຫັດທີ່ຜະລິດ
ຜົນໄດ້ຮັບຈຸດລອຍຕົວຕົວເລກທີ່ແຕກຕ່າງກັນເມື່ອປຽບທຽບກັບເລກເລກ IEEE 754 ທີ່ເຄັ່ງຄັດ.

-mpretend-cmove
ຕ້ອງການສາຂາທີ່ມີເງື່ອນໄຂການຍ້າຍສູນສໍາລັບຄໍາແນະນໍາການຍ້າຍຕາມເງື່ອນໄຂ
ຮູບແບບ. ນີ້ສາມາດສົ່ງຜົນໃຫ້ລະຫັດໄວຂຶ້ນໃນໂປເຊດເຊີ SH4.

ແສງອາທິດ 2 ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ -m ທາງ​ເລືອກ​ແມ່ນ​ສະ​ຫນັບ​ສະ​ຫນູນ​ໃນ Solaris 2​:

- ຂໍ້ຄວາມທີ່ບໍ່ສະອາດ
- ຂໍ້ຄວາມທີ່ບໍ່ສະອາດ, ນໍາ​ໃຊ້​ນອກ​ເຫນືອ​ໄປ​ຈາກ​ - ແບ່ງ​ປັນ​, ບອກ compiler ບໍ່ຜ່ານ -z ຂໍ້ຄວາມ to
linker ເມື່ອເຊື່ອມຕໍ່ວັດຖຸທີ່ໃຊ້ຮ່ວມກັນ. ການນໍາໃຊ້ທາງເລືອກນີ້, ທ່ານສາມາດເຊື່ອມຕໍ່ຕໍາແຫນ່ງ -
ລະຫັດຂຶ້ນກັບວັດຖຸທີ່ໃຊ້ຮ່ວມກັນ.

- ຂໍ້ຄວາມທີ່ບໍ່ສະອາດ ສະກັດກັ້ນ "ການຍົກຍ້າຍທີ່ຍັງຄົງຢູ່ຕໍ່ກັບການຈັດສັນແຕ່ບໍ່ສາມາດຂຽນໄດ້
sections" linker ຂໍ້​ຄວາມ​ຜິດ​ພາດ. ແນວ​ໃດ​ກໍ​ຕາມ, ການ​ຍ້າຍ​ທີ່​ຈໍາ​ເປັນ​ຈະ​ເຮັດ​ໃຫ້​ເກີດ​ການ​ສໍາ​ເນົາ
on-write, ແລະວັດຖຸທີ່ແບ່ງປັນບໍ່ໄດ້ແບ່ງປັນຕົວຈິງໃນທົ່ວຂະບວນການ. ແທນ​ທີ່
ການນໍາໃຊ້ - ຂໍ້ຄວາມທີ່ບໍ່ສະອາດ, ທ່ານຄວນລວບລວມລະຫັດແຫຼ່ງທັງຫມົດດ້ວຍ -fpic or -fPIC.

ສະວິດເຫຼົ່ານີ້ໄດ້ຮັບການສະຫນັບສະຫນູນນອກເຫນືອໄປຈາກຂ້າງເທິງໃນ Solaris 2:

- ກະທູ້
ເພີ່ມການຮອງຮັບ multithreading ໂດຍໃຊ້ POSIX threads library. ຕົວເລືອກນີ້ກໍານົດ
ທຸງສໍາລັບທັງ preprocessor ແລະ linker. ຕົວເລືອກນີ້ບໍ່ມີຜົນຕໍ່ກະທູ້
ຄວາມປອດໄພຂອງລະຫັດວັດຖຸທີ່ຜະລິດໂດຍ compiler ຫຼືຂອງຫ້ອງສະຫມຸດທີ່ສະຫນອງໃຫ້ກັບມັນ.

- ກະທູ້
ນີ້ແມ່ນຄໍາສັບຄ້າຍຄື - ກະທູ້.

SPARC ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ -m ທາງ​ເລືອກ​ແມ່ນ​ສະ​ຫນັບ​ສະ​ຫນູນ SPARC​:

-mno-app-regs
-mapp-regs
ລະບຸວ່າ -mapp-regs ເພື່ອສ້າງຜົນຜະລິດໂດຍໃຊ້ທະບຽນທົ່ວໂລກ 2 ຫາ 4, ເຊິ່ງ
ສະຫງວນ SPARC SVR4 ABI ສໍາລັບຄໍາຮ້ອງສະຫມັກ. ເຊັ່ນດຽວກັນກັບການລົງທະບຽນທົ່ວໂລກ 1, ແຕ່ລະທົ່ວໂລກ
ລົງທະບຽນ 2 ຫາ 4 ຫຼັງຈາກນັ້ນຖືກປະຕິບັດເປັນທະບຽນຈັດສັນທີ່ clobbered ໂດຍ
ຟັງຊັນໂທ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

ເພື່ອໃຫ້ສອດຄ່ອງກັບ SVR4 ABI ຢ່າງເຕັມທີ່ໃນຄ່າໃຊ້ຈ່າຍຂອງການສູນເສຍການປະຕິບັດບາງຢ່າງ, ໃຫ້ລະບຸ
-mno-app-regs. ທ່ານຄວນລວບລວມຫ້ອງສະຫມຸດແລະຊອບແວລະບົບດ້ວຍທາງເລືອກນີ້.

-mflat
-mno-ແປ
ກັບ -mflat, compiler ບໍ່ສ້າງຄໍາແນະນໍາບັນທຶກ / ຟື້ນຟູແລະນໍາໃຊ້ a
"ແປ" ຫຼືຮູບແບບປ່ອງຢ້ຽມລົງທະບຽນດຽວ. ຮູບແບບນີ້ແມ່ນເຫມາະສົມກັບແບບປົກກະຕິ
ລົງ​ທະ​ບຽນ​ຮູບ​ແບບ​ປ່ອງ​ຢ້ຽມ​. ທະບຽນທ້ອງຖິ່ນ ແລະທະບຽນປ້ອນຂໍ້ມູນ (0--5) ແມ່ນຍັງຢູ່
ຖືວ່າເປັນການລົງທະບຽນ "ບັນທຶກການໂທ" ແລະຈະຖືກບັນທຶກໄວ້ໃນ stack ຕາມຄວາມຕ້ອງການ.

ກັບ -mno-ແປ (ຄ່າເລີ່ມຕົ້ນ), compiler ສ້າງຄໍາແນະນໍາບັນທຶກ / ຟື້ນຟູ (ຍົກເວັ້ນ
ສໍາລັບຫນ້າທີ່ຂອງໃບ). ນີ້ແມ່ນຮູບແບບການເຮັດວຽກປົກກະຕິ.

-mfpu
-mhard-float
ສ້າງຜົນຜະລິດທີ່ມີຄໍາແນະນໍາຈຸດລອຍ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-mno-fpu
-msoft-float
ສ້າງຜົນຜະລິດທີ່ມີຫ້ອງສະຫມຸດໂທຫາຈຸດທີ່ເລື່ອນໄດ້. ຄໍາເຕືອນ: ຄວາມຕ້ອງການ
ຫ້ອງສະຫມຸດບໍ່ສາມາດໃຊ້ໄດ້ສໍາລັບເປົ້າຫມາຍ SPARC ທັງຫມົດ. ປົກກະຕິແລ້ວສິ່ງອໍານວຍຄວາມສະດວກຂອງ
C compiler ປົກກະຕິຂອງເຄື່ອງຈັກຖືກນໍາໃຊ້, ແຕ່ນີ້ບໍ່ສາມາດເຮັດໄດ້ໂດຍກົງໃນ cross-
ການລວບລວມ. ທ່ານ​ຕ້ອງ​ເຮັດ​ການ​ຈັດ​ການ​ຂອງ​ຕົນ​ເອງ​ເພື່ອ​ໃຫ້​ຫ້ອງ​ສະ​ຫມຸດ​ທີ່​ເຫມາະ​ສົມ​
ຫນ້າທີ່ສໍາລັບການລວບລວມຂ້າມ. ເປົ້າ​ຫມາຍ​ຝັງ​ sparc-*-out ແລະ ຮອຍແປ້ວ-*-*
ເຮັດ​ໃຫ້​ສະ​ຫນັບ​ສະ​ຫນູນ​ຊອບ​ແວ​ຈຸດ​ທີ່​ເລື່ອນ​ໄດ້​.

-msoft-float ການປ່ຽນແປງສົນທິສັນຍາການໂທໃນໄຟລ໌ຜົນຜະລິດ; ເພາະສະນັ້ນ, ມັນເປັນພຽງແຕ່
ເປັນປະໂຫຍດຖ້າຫາກວ່າທ່ານລວບລວມ ທັງຫມົດ ຂອງ​ໂຄງ​ການ​ທີ່​ມີ​ທາງ​ເລືອກ​ນີ້​. ໂດຍສະເພາະ, ທ່ານຈໍາເປັນຕ້ອງ
ລວບລວມ libgcc.a, ຫ້ອງສະຫມຸດທີ່ມາພ້ອມກັບ GCC, ກັບ -msoft-float ໃນຄໍາສັ່ງສໍາລັບການນີ້
ເຮັດ​ວຽກ.

-mhard-quad-float
ສ້າງຜົນຜະລິດທີ່ມີຄໍາແນະນໍາສີ່ຄໍາ (ຍາວສອງເທົ່າ) ແບບເລື່ອນ.

-msoft-quad-float
ສ້າງຜົນຜະລິດທີ່ມີຫ້ອງສະຫມຸດໂທຫາ quad-word (ຍາວ double) floating-point
ຄໍາແນະນໍາ. ຫນ້າທີ່ເອີ້ນວ່າແມ່ນຫນ້າທີ່ລະບຸໄວ້ໃນ SPARC ABI. ນີ້​ແມ່ນ
Default

ໃນຖານະເປັນລາຍລັກອັກສອນນີ້, ບໍ່ມີການປະຕິບັດ SPARC ທີ່ມີການສະຫນັບສະຫນູນຮາດແວສໍາລັບ
ຄໍາແນະນໍາ quad-word floating-point. ພວກເຂົາເຈົ້າທັງຫມົດ invoke handler ກັບດັກສໍາລັບຫນຶ່ງຂອງ
ຄໍາ​ແນະ​ນໍາ​ເຫຼົ່າ​ນີ້​, ແລະ​ຫຼັງ​ຈາກ​ນັ້ນ​ຜູ້​ຈັດ​ການ​ກັບ​ດັກ​ເຮັດ​ຕາມ​ຜົນ​ກະ​ທົບ​ຂອງ​ຄໍາ​ແນະ​ນໍາ​.
ເນື່ອງຈາກຕົວຈັບຈັ່ນຈັບຢູ່ເທິງຫົວ, ນີ້ແມ່ນຊ້າກວ່າການໂທຫາຫ້ອງສະຫມຸດ ABI
ປົກກະຕິ. ດັ່ງນັ້ນຈຶ່ງ -msoft-quad-float ທາງເລືອກແມ່ນຄ່າເລີ່ມຕົ້ນ.

-mno-unaligned-doubles
-munaligned-ສອງເທົ່າ
ສົມມຸດວ່າ doubles ມີການຈັດຮຽງ 8-byte. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

ກັບ -munaligned-ສອງເທົ່າ, GCC ຖືວ່າ doubles ມີການຈັດຮຽງ 8-byte ພຽງແຕ່ຖ້າພວກເຂົາ
ບັນຈຸຢູ່ໃນປະເພດອື່ນ, ຫຼືຖ້າພວກເຂົາມີທີ່ຢູ່ຢ່າງແທ້ຈິງ. ຖ້າບໍ່ດັ່ງນັ້ນ, ມັນ
ສົມມຸດວ່າພວກເຂົາມີການຈັດລໍາດັບ 4-byte. ການລະບຸທາງເລືອກນີ້ຫຼີກເວັ້ນບາງອັນທີ່ຫາຍາກ
ບັນຫາຄວາມເຂົ້າກັນໄດ້ກັບລະຫັດທີ່ສ້າງຂຶ້ນໂດຍ compilers ອື່ນໆ. ມັນບໍ່ແມ່ນຄ່າເລີ່ມຕົ້ນ
ເນື່ອງຈາກວ່າມັນເຮັດໃຫ້ການສູນເສຍປະສິດທິພາບ, ໂດຍສະເພາະສໍາລັບລະຫັດຈຸດທີ່ເລື່ອນໄດ້.

-mno-ໄວ-ໂຄງສ້າງ
-mfaster-structs
ກັບ -mfaster-structs, compiler ສົມມຸດວ່າໂຄງສ້າງຄວນຈະມີ 8-byte
ການຈັດວາງ. ນີ້ເຮັດໃຫ້ການນໍາໃຊ້ຄູ່ຂອງຄໍາແນະນໍາ "ldd" ແລະ "std" ສໍາລັບສໍາເນົາ
ໃນການມອບໝາຍໂຄງສ້າງ, ແທນຄູ່ "ld" ແລະ "st" ສອງເທົ່າ. ຢ່າງໃດກໍຕາມ, ໄດ້
ການ​ນໍາ​ໃຊ້​ການ​ປ່ຽນ​ແປງ​ການ​ຈັດ​ວາງ​ນີ້​ລະ​ເມີດ SPARC ABI ໂດຍ​ກົງ​. ດັ່ງນັ້ນ, ມັນມີຈຸດປະສົງ
ພຽງແຕ່ສໍາລັບການນໍາໃຊ້ເປົ້າຫມາຍທີ່ນັກພັດທະນາຮັບຮູ້ວ່າລະຫັດຜົນໄດ້ຮັບຂອງພວກເຂົາ
ຈະບໍ່ສອດຄ່ອງກັບກົດລະບຽບຂອງ ABI ໂດຍກົງ.

-mcpu=cpu_type
ກໍາ​ນົດ​ຊຸດ​ຄໍາ​ສັ່ງ​, ການ​ລົງ​ທະ​ບຽນ​, ແລະ​ຕົວ​ກໍາ​ນົດ​ການ​ກໍາ​ນົດ​ເວ​ລາ​ຄໍາ​ແນະ​ນໍາ​ສໍາ​ລັບ​ການ​
ປະເພດເຄື່ອງຈັກ cpu_type. ຄຸນ​ຄ່າ​ສະ​ຫນັບ​ສະ​ຫນູນ​ສໍາ​ລັບ​ການ​ cpu_type ມີ v7, ຊີດ, v8, supersparc,
hypersparc, leon, ກະຈ່າງໃສ, f930, f934, sparclite86x, ຮອຍແປ້ວ, tsc701, v9,
ultrasparc, ultrasparc3, niagara, ນີກາຣາ2, ນີກາຣາ3, ແລະ ນີກາຣາ4.

Native Solaris ແລະ GNU/Linux toolchains ຍັງສະຫນັບສະຫນູນມູນຄ່າ native, ທີ່ເລືອກ
ທາງເລືອກສະຖາປັດຕະຍະທີ່ດີທີ່ສຸດສໍາລັບໂຮງງານຜະລິດເຈົ້າພາບ. -mcpu=ເດີມ ບໍ່​ມີ​ຜົນ​ກະ​ທົບ​ຖ້າ​ຫາກ​ວ່າ​
GCC ບໍ່ຮູ້ຈັກໂປເຊດເຊີ.

ຕົວກໍານົດການກໍານົດເວລາຄໍາແນະນໍາມາດຕະຖານຖືກນໍາໃຊ້ສໍາລັບຄ່າທີ່ເລືອກ an
ສະຖາປັດຕະຍະກໍາແລະບໍ່ແມ່ນການປະຕິບັດ. ພວກ​ນີ້​ແມ່ນ v7, v8, ກະຈ່າງໃສ, ຮອຍແປ້ວ, v9.

ນີ້ແມ່ນບັນຊີລາຍຊື່ຂອງແຕ່ລະສະຖາປັດຕະຍະກໍາທີ່ສະຫນັບສະຫນູນແລະການປະຕິບັດທີ່ສະຫນັບສະຫນູນຂອງພວກເຂົາ.

v7 cypress

v8 superspark, hypersparc, leon

ກະຈ່າງໃສ
f930, f934, sparclite86x

ຮອຍແປ້ວ
tsc701

v9 ultrasparc, ultrasparc3, ​​ໄນກາຣາ, ໄນກາຣາ 2, ໄນກາຣາ 3, ໄນກາຣາ4

ໂດຍຄ່າເລີ່ມຕົ້ນ (ເວັ້ນເສຍແຕ່ຈະຕັ້ງຄ່າເປັນຢ່າງອື່ນ), GCC ສ້າງລະຫັດສໍາລັບຕົວແປ V7 ຂອງ
ສະຖາປັດຕະຍະກຳ SPARC. ກັບ -mcpu=cypress, compiler ນອກຈາກນັ້ນ optimizes ມັນສໍາລັບ
ຊິບ Cypress CY7C602, ຕາມທີ່ໃຊ້ໃນຊຸດ SPARCStation/SPARCServer 3xx. ນີ້​ແມ່ນ
ຍັງເຫມາະສົມສໍາລັບ SPARCStation ເກົ່າແກ່ 1, 2, IPX ແລະອື່ນໆ.

ກັບ -mcpu=v8, GCC ສ້າງລະຫັດສໍາລັບຕົວແປ V8 ຂອງສະຖາປັດຕະຍະກໍາ SPARC. ໄດ້
ຄວາມແຕກຕ່າງພຽງແຕ່ຈາກລະຫັດ V7 ແມ່ນວ່າ compiler ປ່ອຍຕົວຄູນຄູນແລະ
ຄຳແນະນຳການແບ່ງຈຳນວນເຕັມທີ່ມີຢູ່ໃນ SPARC-V8 ແຕ່ບໍ່ແມ່ນຢູ່ໃນ SPARC-V7. ກັບ
-mcpu=supersparc, compiler ນອກຈາກນັ້ນ optimizes ມັນສໍາລັບຊິບ SuperSPARC, ເປັນ
ໃຊ້ໃນ SPARCStation 10, 1000 ແລະ 2000 ຊຸດ.

ກັບ -mcpu=sparclite, GCC ສ້າງລະຫັດສໍາລັບຕົວແປ SPARClite ຂອງ SPARC
ຖາປັດຕະຍະ. ນີ້ຈະເປັນການເພີ່ມຈຳນວນເຕັມຄູນ, ຂັ້ນຕອນການແບ່ງຈຳນວນເຕັມ ແລະສະແກນ ("ffs")
ຄໍາແນະນໍາທີ່ມີຢູ່ໃນ SPARClite ແຕ່ບໍ່ແມ່ນຢູ່ໃນ SPARC-V7. ກັບ -mcpu=f930, ການ
compiler ນອກຈາກນັ້ນ optimize ມັນສໍາລັບຊິບ Fujitsu MB86930, ເຊິ່ງເປັນຕົ້ນສະບັບ
SPAClite, ບໍ່ມີ FPU. ກັບ -mcpu=f934, compiler ນອກຈາກນັ້ນ optimizes ມັນສໍາລັບ
ຊິບ Fujitsu MB86934, ເຊິ່ງເປັນ SPAClite ຫຼ້າສຸດທີ່ມີ FPU.

ກັບ -mcpu=sparclet, GCC ສ້າງລະຫັດສໍາລັບ SPARClet variant ຂອງ SPARC
ຖາປັດຕະຍະ. ອັນນີ້ເພີ່ມຈຳນວນເຕັມຄູນ, ຄູນ/ສະສົມ, ການຫານຈຳນວນເຕັມ
ຂັ້ນຕອນ ແລະສະແກນ ("ffs") ຄໍາແນະນໍາທີ່ມີຢູ່ໃນ SPARClet ແຕ່ບໍ່ແມ່ນຢູ່ໃນ SPARC-V7. ກັບ
-mcpu=tsc701, compiler ເພີ່ມເຕີມປັບປຸງມັນສໍາລັບຊິບ TEMIC SPARClet.

ກັບ -mcpu=v9, GCC ສ້າງລະຫັດສໍາລັບຕົວແປ V9 ຂອງສະຖາປັດຕະຍະກໍາ SPARC. ນີ້
ເພີ່ມຈຳນວນເຕັມ 64-ບິດ ແລະຄຳແນະນຳການເລື່ອນຈຸດ, 3 ຈຸດລອຍເພີ່ມເຕີມ
ການລົງທະບຽນລະຫັດເງື່ອນໄຂ ແລະຄໍາແນະນໍາການເຄື່ອນຍ້າຍຕາມເງື່ອນໄຂ. ກັບ -mcpu=ultrasparc,
compiler ເພີ່ມເຕີມປັບປຸງມັນສໍາລັບຊິບ Sun UltraSPARC I/II/IIi. ກັບ
-mcpu=ultrasparc3, compiler ນອກຈາກນັ້ນ optimizes ມັນສໍາລັບ Sun UltraSPARC
ຊິບ III/III+/IIIi/IIIi+/IV/IV+. ກັບ -mcpu=ໄນອາກາຣາ, compiler ນອກຈາກນັ້ນ
ປັບປຸງມັນໃຫ້ເໝາະສົມກັບຊິບ Sun UltraSPARC T1. ກັບ -mcpu=niagara2, compiler ໄດ້
ນອກຈາກນັ້ນ, ເພີ່ມປະສິດທິພາບມັນສໍາລັບຊິບ Sun UltraSPARC T2. ກັບ -mcpu=niagara3, ການ
compiler ນອກຈາກນັ້ນຍັງ optimize ມັນສໍາລັບຊິບ Sun UltraSPARC T3. ກັບ -mcpu=niagara4,
compiler ເພີ່ມເຕີມປັບປຸງມັນສໍາລັບຊິບ Sun UltraSPARC T4.

-mtune=cpu_type
ກໍານົດຕົວກໍານົດການກໍານົດເວລາຄໍາແນະນໍາສໍາລັບປະເພດເຄື່ອງຈັກ cpu_type, ແຕ່ບໍ່ໄດ້ກໍານົດ
ຊຸດຄໍາແນະນໍາຫຼືລົງທະບຽນກໍານົດທາງເລືອກນັ້ນ -mcpu=cpu_type ຈະ.

ຄ່າດຽວກັນສໍາລັບ -mcpu=cpu_type ສາມາດໃຊ້ໄດ້ສໍາລັບ -mtune=cpu_type, ແຕ່ວ່າເທົ່ານັ້ນ
ຄຸນຄ່າທີ່ເປັນປະໂຫຍດແມ່ນຜູ້ທີ່ເລືອກການປະຕິບັດ CPU ໂດຍສະເພາະ. ເຫຼົ່ານັ້ນ
ຊີດ, supersparc, hypersparc, leon, f930, f934, sparclite86x, tsc701, ultrasparc,
ultrasparc3, niagara, ນີກາຣາ2, ນີກາຣາ3 ແລະ ນີກາຣາ4. ກັບ native Solaris ແລະ
GNU/Linux toolchains, native ຍັງສາມາດ ນຳ ໃຊ້ໄດ້.

-mv8plus
-mno-v8plus
ກັບ -mv8plus, GCC ສ້າງລະຫັດສໍາລັບ SPARC-V8+ ABI. ຄວາມແຕກຕ່າງຈາກ V8
ABI ແມ່ນວ່າການລົງທະບຽນທົ່ວໂລກແລະອອກແມ່ນຖືວ່າກວ້າງ 64 bits. ອັນນີ້ຖືກເປີດໃຊ້
ໂດຍຄ່າເລີ່ມຕົ້ນໃນ Solaris ໃນໂຫມດ 32-bit ສໍາລັບໂປເຊດເຊີ SPARC-V9 ທັງຫມົດ.

-mvis
-mno-vis
ກັບ -mvis, GCC ສ້າງລະຫັດທີ່ໃຊ້ປະໂຫຍດຈາກ UltraSPARC Visual
ການຂະຫຍາຍຊຸດຄໍາແນະນໍາ. ຄ່າເລີ່ມຕົ້ນແມ່ນ -mno-vis.

-mvis2
-mno-vis2
ກັບ -mvis2, GCC ສ້າງລະຫັດທີ່ໃຊ້ປະໂຫຍດຈາກເວີຊັນ 2.0 ຂອງ UltraSPARC
Visual Instruction Set extensions. ຄ່າເລີ່ມຕົ້ນແມ່ນ -mvis2 ເມື່ອຕັ້ງເປົ້າໝາຍໃສ່ CPU ນັ້ນ
ສະຫນັບສະຫນູນຄໍາແນະນໍາດັ່ງກ່າວ, ເຊັ່ນ UltraSPARC-III ແລະຕໍ່ມາ. ການຕັ້ງຄ່າ -mvis2 ຍັງ
ຊຸດ -mvis.

-mvis3
-mno-vis3
ກັບ -mvis3, GCC ສ້າງລະຫັດທີ່ໃຊ້ປະໂຫຍດຈາກເວີຊັນ 3.0 ຂອງ UltraSPARC
Visual Instruction Set extensions. ຄ່າເລີ່ມຕົ້ນແມ່ນ -mvis3 ເມື່ອຕັ້ງເປົ້າໝາຍໃສ່ CPU ນັ້ນ
ສະຫນັບສະຫນູນຄໍາແນະນໍາດັ່ງກ່າວ, ເຊັ່ນ: niagara-3 ແລະຕໍ່ມາ. ການຕັ້ງຄ່າ -mvis3 ຍັງກໍານົດ
-mvis2 ແລະ -mvis.

-mpopc
-mno-popc
ກັບ -mpopc, GCC ສ້າງລະຫັດທີ່ໃຊ້ປະໂຫຍດຈາກປະຊາກອນ UltraSPARC
ນັບ​ຄໍາ​ແນະ​ນໍາ​. ຄ່າເລີ່ມຕົ້ນແມ່ນ -mpopc ໃນເວລາທີ່ກໍາຫນົດເປົ້າຫມາຍ CPU ທີ່ສະຫນັບສະຫນູນດັ່ງກ່າວ
ຄໍາແນະນໍາ, ເຊັ່ນ Niagara-2 ແລະຕໍ່ມາ.

-mfmaf
-mno-fmaf
ກັບ -mfmaf, GCC ສ້າງລະຫັດທີ່ໃຊ້ປະໂຫຍດຈາກ UltraSPARC Fused Multiply-
ເພີ່ມສ່ວນຂະຫຍາຍຈຸດລອຍ. ຄ່າເລີ່ມຕົ້ນແມ່ນ -mfmaf ເມື່ອຕັ້ງເປົ້າໝາຍໃສ່ CPU ນັ້ນ
ສະຫນັບສະຫນູນຄໍາແນະນໍາດັ່ງກ່າວ, ເຊັ່ນ Niagara-3 ແລະຕໍ່ມາ.

-mfix-at697f
ເປີດໃຊ້ການແກ້ໄຂເອກະສານສໍາລັບຄວາມຜິດພາດດຽວຂອງໂປເຊດເຊີ Atmel AT697F
(ເຊິ່ງກົງກັບຄວາມຜິດພາດ #13 ຂອງໂປເຊດເຊີ AT697E).

ເຫຼົ່ານີ້ -m ທາງ​ເລືອກ​ຕ່າງໆ​ແມ່ນ​ໄດ້​ຮັບ​ການ​ສະ​ຫນັບ​ສະ​ຫນູນ​ນອກ​ເຫນືອ​ໄປ​ຈາກ​ຂ້າງ​ເທິງ​ນີ້​ກ່ຽວ​ກັບ​ການ SPARC​-V9 processors ໃນ 64-bit​
ສະພາບແວດລ້ອມ:

-m32
-m64
ສ້າງລະຫັດສໍາລັບສະພາບແວດລ້ອມ 32-bit ຫຼື 64-bit. ສະພາບແວດລ້ອມ 32-bit ກໍານົດ int,
ຍາວ ແລະຊີ້ໄປຫາ 32 bits. ສະພາບແວດລ້ອມ 64-bit ກໍານົດ int ເປັນ 32 bits ແລະຍາວແລະ
ຊີ້ໄປຫາ 64 bits.

-mcmodel=ທີ່
ກໍານົດຮູບແບບລະຫັດເປັນຫນຶ່ງຂອງ

ຈືດໆ
ຮູບແບບລະຫັດປານກາງ/ຕ່ໍາ: ທີ່ຢູ່ 64-bit, ໂປຣແກຣມຈະຕ້ອງເຊື່ອມຕໍ່ຢູ່ໃນ 32 ຕ່ໍາ.
ບິດຂອງຄວາມຊົງຈໍາ. ບັນດາໂຄງການສາມາດເຊື່ອມໂຍງແບບຄົງທີ່ ຫຼືແບບເຄື່ອນໄຫວ.

medmid
ຮູບແບບລະຫັດຂະຫນາດກາງ / ກາງ: ທີ່ຢູ່ 64-bit, ໂປລແກລມຕ້ອງເຊື່ອມຕໍ່ຢູ່ໃນຕ່ໍາ
44 bits ຂອງຫນ່ວຍຄວາມຈໍາ, ສ່ວນຂໍ້ຄວາມແລະຂໍ້ມູນຈະຕ້ອງຫນ້ອຍກ່ວາ 2GB ໃນຂະຫນາດແລະ
ພາກສ່ວນຂໍ້ມູນຕ້ອງຕັ້ງຢູ່ພາຍໃນ 2GB ຂອງພາກສ່ວນຂໍ້ຄວາມ.

medany
ຮູບແບບລະຫັດ Medium/Anywhere: ທີ່ຢູ່ 64-bit, ໂປຣແກຣມອາດຈະເຊື່ອມຕໍ່ຢູ່ບ່ອນໃດກໍໄດ້
ໃນຫນ່ວຍຄວາມຈໍາ, ພາກສ່ວນຂໍ້ຄວາມແລະຂໍ້ມູນຕ້ອງມີຫນ້ອຍກວ່າ 2GB ໃນຂະຫນາດແລະຂໍ້ມູນ
ພາກສ່ວນຕ້ອງຕັ້ງຢູ່ພາຍໃນ 2GB ຂອງພາກສ່ວນຂໍ້ຄວາມ.

ຝັງ
ຮູບແບບລະຫັດ Medium/Anywhere ສໍາລັບລະບົບຝັງຕົວ: ທີ່ຢູ່ 64-bit, ຂໍ້ຄວາມ
ແລະພາກສ່ວນຂໍ້ມູນຕ້ອງມີຂະໜາດນ້ອຍກວ່າ 2GB, ທັງສອງເລີ່ມຈາກບ່ອນໃດກໍໄດ້ໃນໜ່ວຍຄວາມຈຳ
(ກໍານົດໃນເວລາເຊື່ອມຕໍ່). ການລົງທະບຽນທົ່ວໂລກ %g4 ຊີ້ໄປທີ່ຖານຂອງຂໍ້ມູນ
ພາກສ່ວນ. ໂປຣແກຣມຕ່າງໆມີການເຊື່ອມໂຍງແບບຄົງທີ່ ແລະ PIC ບໍ່ຮອງຮັບ.

-mmemory-model=ຕົວແບບຈໍາລອງ
ກໍານົດຮູບແບບຫນ່ວຍຄວາມຈໍາທີ່ບັງຄັບຢູ່ໃນໂປເຊດເຊີເປັນຫນຶ່ງຂອງ

Default
ຮູບແບບຫນ່ວຍຄວາມຈໍາເລີ່ມຕົ້ນສໍາລັບໂປເຊດເຊີແລະລະບົບປະຕິບັດການ.

rmo ລຳດັບຄວາມຊົງຈຳທີ່ຜ່ອນຄາຍ

pso ຄໍາສັ່ງຮ້ານບາງສ່ວນ

ປ່ອຍ ການສັ່ງຊື້ທັງໝົດຂອງຮ້ານ

sc ຄວາມສອດຄ່ອງຕາມລໍາດັບ

ຮູບແບບຄວາມຈຳເຫຼົ່ານີ້ຖືກກຳນົດຢ່າງເປັນທາງການໃນເອກະສານຊ້ອນທ້າຍ D ຂອງສະຖາປັດຕະຍະກຳ Sparc V9
ຄູ່ມື, ຕາມທີ່ໄດ້ກໍານົດໄວ້ໃນພາກສະຫນາມ "PSTATE.MM" ຂອງໂປເຊດເຊີ.

-mstack-ອະຄະຕິ
-mno-stack-bias
ກັບ -mstack-ອະຄະຕິ, GCC ສົມມຸດວ່າຕົວຊີ້ stack, ແລະຕົວຊີ້ກອບຖ້າມີ,
ຖືກຊົດເຊີຍໂດຍ -2047 ເຊິ່ງຕ້ອງຖືກເພີ່ມຄືນເມື່ອເຮັດການອ້າງອີງກອບ stack. ນີ້
ເປັນຄ່າເລີ່ມຕົ້ນໃນໂຫມດ 64-bit. ຖ້າບໍ່ດັ່ງນັ້ນ, ສົມມຸດວ່າບໍ່ມີການຊົດເຊີຍດັ່ງກ່າວ.

SPU ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ -m ທາງ​ເລືອກ​ແມ່ນ​ສະ​ຫນັບ​ສະ​ຫນູນ SPU​:

-mwar-reloc
-merror-reloc
ເຄື່ອງໂຫລດສໍາລັບ SPU ບໍ່ໄດ້ຈັດການການຍົກຍ້າຍແບບເຄື່ອນໄຫວ. ໂດຍຄ່າເລີ່ມຕົ້ນ, GCC ຈະໃຫ້
ຂໍ້ຜິດພາດໃນເວລາທີ່ມັນສ້າງລະຫັດທີ່ຮຽກຮ້ອງໃຫ້ມີການຍົກຍ້າຍແບບເຄື່ອນໄຫວ. -mno-error-reloc
ປິດ​ການ​ທໍາ​ງານ​ຄວາມ​ຜິດ​ພາດ​, -mwar-reloc ຈະສ້າງການແຈ້ງເຕືອນແທນ.

-msafe-dma
-munsafe-dma
ຄໍາແນະນໍາທີ່ລິເລີ່ມຫຼືການທົດສອບສໍາເລັດຂອງ DMA ຈະຕ້ອງບໍ່ຖືກຈັດລໍາດັບໃຫມ່ດ້ວຍ
ກ່ຽວກັບການໂຫຼດແລະເກັບຮັກສາຄວາມຊົງຈໍາທີ່ກໍາລັງເຂົ້າເຖິງ. ໂດຍປົກກະຕິຜູ້ໃຊ້
ແກ້ໄຂບັນຫານີ້ໂດຍໃຊ້ຄໍາທີ່ປ່ຽນແປງໄດ້, ແຕ່ວ່າສາມາດນໍາໄປສູ່ລະຫັດທີ່ບໍ່ມີປະສິດທິພາບ
ໃນສະຖານທີ່ບ່ອນທີ່ຄວາມຊົງຈໍາແມ່ນຮູ້ວ່າບໍ່ປ່ຽນແປງ. ແທນທີ່ຈະໝາຍຄວາມຊົງຈຳເປັນ
ການຜັນຜວນ ພວກເຮົາປະຕິບັດຕໍ່ຄໍາແນະນໍາ DMA ເປັນຜົນກະທົບຂອງຫນ່ວຍຄວາມຈໍາທັງໝົດ. ກັບ
-munsafe-dma ຜູ້ໃຊ້ຕ້ອງໃຊ້ຄໍາທີ່ປ່ຽນແປງໄດ້ເພື່ອປົກປ້ອງການເຂົ້າເຖິງຫນ່ວຍຄວາມຈໍາ.

-branch - ຄໍາ​ແນະ​ນໍາ​
ໂດຍຄ່າເລີ່ມຕົ້ນ, GCC ຈະສ້າງຄໍາແນະນໍາກ່ຽວກັບສາຂາເພື່ອຫຼີກເວັ້ນການວາງທໍ່ສໍາລັບ
ກິນຢູ່ສະເໝີ ຫຼືອາດຈະເອົາສາຂາ. ຄຳໃບ້ຈະບໍ່ຖືກສ້າງຂື້ນໃກ້ກວ່າ 8
ຄໍາແນະນໍາຫ່າງຈາກສາຂາຂອງມັນ. ມີເຫດຜົນເລັກນ້ອຍທີ່ຈະປິດການໃຊ້ງານພວກມັນ, ຍົກເວັ້ນ
ຈຸດ​ປະ​ສົງ​ການ​ແກ້​ໄຂ​ບັນ​ຫາ​, ຫຼື​ເພື່ອ​ເຮັດ​ໃຫ້​ວັດ​ຖຸ​ຂະ​ຫນາດ​ນ້ອຍ​ເລັກ​ນ້ອຍ​.

-msmall-mem
-mlarge-mem
ໂດຍຄ່າເລີ່ມຕົ້ນ, GCC ຈະສ້າງລະຫັດໂດຍສົມມຸດວ່າທີ່ຢູ່ບໍ່ເຄີຍໃຫຍ່ກວ່າ 18 ບິດ.
ກັບ -mlarge-mem ລະຫັດຖືກສ້າງຂື້ນທີ່ສົມມຸດເປັນທີ່ຢູ່ 32-bit ເຕັມ.

-mstdmain
ໂດຍຄ່າເລີ່ມຕົ້ນ, GCC ເຊື່ອມຕໍ່ກັບລະຫັດເລີ່ມຕົ້ນທີ່ສົມມຸດວ່າຫນ້າທີ່ຕົ້ນຕໍແບບ SPU
ການໂຕ້ຕອບ (ເຊິ່ງມີບັນຊີລາຍຊື່ພາລາມິເຕີທີ່ບໍ່ທໍາມະດາ). ກັບ -mstdmain, GCC ຈະເຊື່ອມຕໍ່
ໂຄງການຂອງທ່ານຕໍ່ກັບລະຫັດເລີ່ມຕົ້ນທີ່ສົມມຸດການໂຕ້ຕອບແບບ C99 ເປັນ "ຕົ້ນຕໍ",
ລວມທັງສໍາເນົາທ້ອງຖິ່ນຂອງ "argv" strings.

-mfixed-range=ໄລຍະລົງທະບຽນ
ສ້າງລະຫັດການປິ່ນປົວຂອບເຂດການລົງທະບຽນທີ່ໃຫ້ມາເປັນການລົງທະບຽນຄົງທີ່. ການລົງທະບຽນຄົງທີ່
ແມ່ນຫນຶ່ງໃນທີ່ຜູ້ຈັດສັນທະບຽນບໍ່ສາມາດໃຊ້ໄດ້. ນີ້ແມ່ນເປັນປະໂຫຍດໃນເວລາທີ່ລວບລວມ kernel
ລະຫັດ. ໄລຍະການລົງທະບຽນແມ່ນລະບຸໄວ້ເປັນສອງທະບຽນທີ່ແຍກອອກໂດຍ dash. ຫຼາຍ
ໄລຍະການລົງທະບຽນສາມາດຖືກລະບຸແຍກດ້ວຍເຄື່ອງໝາຍຈຸດ.

-mea32
-mea64
ລວບລວມລະຫັດໂດຍສົມມຸດວ່າຕົວຊີ້ໄປຫາພື້ນທີ່ທີ່ຢູ່ PPU ເຂົ້າເຖິງໂດຍຜ່ານ "__ea"
ຄຸນສົມບັດພື້ນທີ່ທີ່ຢູ່ທີ່ມີຊື່ແມ່ນກວ້າງ 32 ຫຼື 64 ບິດ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 32 bits.
ເນື່ອງຈາກວ່ານີ້ແມ່ນທາງເລືອກການປ່ຽນແປງ ABI, ລະຫັດວັດຖຸທັງຫມົດໃນການປະຕິບັດຕ້ອງໄດ້ຮັບການລວບລວມ
ດ້ວຍການຕັ້ງຄ່າດຽວກັນ.

-maddress-space-ແປງ
-mno-address-space-ການແປງ
ອະ​ນຸ​ຍາດ​ໃຫ້ / ບໍ່​ອະ​ນຸ​ຍາດ​ໃຫ້​ການ​ປິ່ນ​ປົວ​ຊ່ອງ​ທີ່​ຢູ່ "__ea​" ເປັນ superset ຂອງ​ທີ່​ຢູ່​ທົ່ວ​ໄປ​
ຊ່ອງ. ອັນນີ້ເຮັດໃຫ້ປະເພດທີ່ຊັດເຈນລະຫວ່າງ "__ea" ແລະຕົວຊີ້ທົ່ວໄປເຊັ່ນດຽວກັນ
ການປ່ຽນໂດຍຫຍໍ້ຂອງຕົວຊີ້ທົ່ວໄປເປັນຕົວຊີ້ "__ea". ຄ່າເລີ່ມຕົ້ນແມ່ນເພື່ອອະນຸຍາດໃຫ້
ການປ່ຽນແປງຕົວຊີ້ຊ່ອງທີ່ຢູ່.

-mcache-size=ຂະຫນາດ cache
ຕົວເລືອກນີ້ຄວບຄຸມເວີຊັນຂອງ libgcc ທີ່ compiler ເຊື່ອມຕໍ່ໄປຫາ executable
ແລະເລືອກ cache ທີ່ຈັດການໂດຍຊອບແວສໍາລັບການເຂົ້າເຖິງຕົວແປໃນທີ່ຢູ່ "__ea".
ພື້ນທີ່ທີ່ມີຂະຫນາດແຄດສະເພາະ. ທາງເລືອກທີ່ເປັນໄປໄດ້ສໍາລັບ ຂະຫນາດ cache ມີ 8, 16, 32, 64
ແລະ 128. ຂະໜາດແຄດເລີ່ມຕົ້ນແມ່ນ 64KB.

- ການ​ປັບ​ປຸງ matomic​
-mno-atomic-ການອັບເດດ
ຕົວເລືອກນີ້ຄວບຄຸມເວີຊັນຂອງ libgcc ທີ່ compiler ເຊື່ອມຕໍ່ໄປຫາ executable
ແລະເລືອກວ່າມີການປັບປຸງປະລໍາມະນູຕໍ່ກັບ cache ທີ່ມີການຄຸ້ມຄອງຊອບແວຂອງຕົວແປຂ້າງ PPU
ຖືກນໍາໃຊ້. ຖ້າທ່ານໃຊ້ການປັບປຸງປະລໍາມະນູ, ການປ່ຽນແປງເປັນຕົວແປ PPU ຈາກລະຫັດ SPU ໂດຍໃຊ້
"__ea" ຄຸນສົມບັດພື້ນທີ່ທີ່ຢູ່ທີ່ມີຊື່ຈະບໍ່ແຊກແຊງການປ່ຽນແປງກັບ PPU ອື່ນໆ
ຕົວແປທີ່ຢູ່ໃນສາຍ cache ດຽວກັນຈາກລະຫັດ PPU. ຖ້າທ່ານບໍ່ໃຊ້ປະລໍາມະນູ
ການປັບປຸງ, ການແຊກແຊງດັ່ງກ່າວອາດຈະເກີດຂື້ນ; ແນວໃດກໍ່ຕາມ, ການຂຽນ back cache line ຈະມີຫຼາຍຂຶ້ນ
ປະສິດທິພາບ. ພຶດຕິກໍາເລີ່ມຕົ້ນແມ່ນການນໍາໃຊ້ການປັບປຸງປະລໍາມະນູ.

-mdual-nops
-mdual-nops=n
ໂດຍຄ່າເລີ່ມຕົ້ນ, GCC ຈະໃສ່ nops ເພື່ອເພີ່ມບັນຫາສອງເທົ່າເມື່ອມັນຄາດວ່າຈະເພີ່ມຂຶ້ນ
ການປະຕິບັດງານ. n ສາມາດເປັນຄ່າຈາກ 0 ຫາ 10. A ນ້ອຍກວ່າ n ຈະໃສ່ nops ຫນ້ອຍລົງ. 10
ແມ່ນຄ່າເລີ່ມຕົ້ນ, 0 ແມ່ນຄືກັນກັບ -mno-dual-nops. ຄົນພິການກັບ -ອສ.

-mhint-max-nops=n
ຈໍານວນສູງສຸດຂອງ nops ທີ່ຈະໃສ່ສໍາລັບຄໍາແນະນໍາສາຂາ. ຄຳໃບ້ສາຂາຕ້ອງມີຢ່າງໜ້ອຍ 8
ຄໍາ​ແນະ​ນໍາ​ຢູ່​ຫ່າງ​ຈາກ​ສາ​ຂາ​ທີ່​ມັນ​ມີ​ຜົນ​ກະ​ທົບ​. GCC ຈະໃສ່ເຖິງ n nops ກັບ
ບັງຄັບໃຊ້ອັນນີ້, ຖ້າບໍ່ດັ່ງນັ້ນມັນຈະບໍ່ສ້າງຄໍາແນະນໍາສາຂາ.

-mhint-max-distance=n
ການເຂົ້າລະຫັດຂອງຄໍາແນະນໍາຂອງສາຂາຈໍາກັດການ hint ພາຍໃນ 256
ຄໍາແນະນໍາຂອງສາຂາທີ່ມັນມີຜົນກະທົບ. ໂດຍຄ່າເລີ່ມຕົ້ນ, GCC ໃຫ້ແນ່ໃຈວ່າມັນຢູ່ໃນ
125​.

-msafe-ຄໍາ​ແນະ​ນໍາ​
ເຮັດວຽກກ່ຽວກັບຂໍ້ບົກພ່ອງຂອງຮາດແວທີ່ເຮັດໃຫ້ SPU ຢຸດຢ່າງບໍ່ມີກຳນົດ. ໂດຍຄ່າເລີ່ມຕົ້ນ, GCC
ຈະໃສ່ຄໍາແນະນໍາ "hbrp" ເພື່ອໃຫ້ແນ່ໃຈວ່າຮ້ານນີ້ຈະບໍ່ເກີດຂຶ້ນ.

ທາງເລືອກໃນການ ສໍາລັບການ ລະບົບ V

ທາງເລືອກເພີ່ມເຕີມເຫຼົ່ານີ້ແມ່ນມີຢູ່ໃນ System V Release 4 ເພື່ອຄວາມເຂົ້າກັນໄດ້ກັບເຄື່ອງອື່ນໆ
compilers ໃນ​ລະ​ບົບ​ເຫຼົ່າ​ນີ້​:

-G ສ້າງວັດຖຸທີ່ໃຊ້ຮ່ວມກັນ. ມັນໄດ້ຖືກແນະນໍາວ່າ - ສັນ​ຍາ​ລັກ​ or - ແບ່ງ​ປັນ​ ໃຊ້ແທນ.

- ຖາມ ລະບຸລຸ້ນຂອງແຕ່ລະເຄື່ອງມືທີ່ໃຊ້ໂດຍ compiler, ໃນຕົວປະກອບ ".ident".
ຄໍາສັ່ງໃນຜົນຜະລິດ.

-Qn ຫຼີກລ່ຽງການເພີ່ມຄຳສັ່ງ ".ident" ໃສ່ໄຟລ໌ຜົນຜະລິດ (ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ).

-YP,ທີ່ຢູ່
ຄົ້ນຫາໄດເລກະທໍລີ ທີ່ຢູ່, ແລະບໍ່ມີບ່ອນອື່ນ, ສໍາລັບຫ້ອງສະຫມຸດທີ່ລະບຸໄວ້ກັບ -l.

-Ym,dir
ເບິ່ງຢູ່ໃນໄດເລກະທໍລີ dir ເພື່ອຊອກຫາ M4 preprocessor. ຜູ້ປະກອບການນໍາໃຊ້ນີ້
ທາງເລືອກ.

TILE-Gx ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ -m ທາງເລືອກແມ່ນສະຫນັບສະຫນູນຢູ່ໃນ TILE-Gx:

-mcpu=ຊື່
ເລືອກປະເພດຂອງ CPU ທີ່ຈະເປັນເປົ້າຫມາຍ. ປະ​ຈຸ​ບັນ​ສະ​ຫນັບ​ສະ​ຫນູນ​ພຽງ​ແຕ່​ປະ​ເພດ​ tilegx.

-m32
-m64
ສ້າງລະຫັດສໍາລັບສະພາບແວດລ້ອມ 32-bit ຫຼື 64-bit. ສະພາບແວດລ້ອມ 32-bit ກໍານົດ int,
ຍາວ, ແລະຊີ້ໄປຫາ 32 bits. ສະພາບແວດລ້ອມ 64-bit ກໍານົດ int ເປັນ 32 bits ແລະຍາວແລະ
ຊີ້ໄປຫາ 64 bits.

TILEPro ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ -m ທາງ​ເລືອກ​ແມ່ນ​ສະ​ຫນັບ​ສະ​ຫນູນ​ຢູ່​ໃນ TILEPro​:

-mcpu=ຊື່
ເລືອກປະເພດຂອງ CPU ທີ່ຈະເປັນເປົ້າຫມາຍ. ປະ​ຈຸ​ບັນ​ສະ​ຫນັບ​ສະ​ຫນູນ​ພຽງ​ແຕ່​ປະ​ເພດ​ tilepro.

-m32
ສ້າງລະຫັດສໍາລັບສະພາບແວດລ້ອມ 32-bit, ເຊິ່ງກໍານົດ int, long, ແລະ pointer ເປັນ 32 bits.
ນີ້ແມ່ນພຶດຕິກໍາທີ່ສະຫນັບສະຫນູນເທົ່ານັ້ນ, ດັ່ງນັ້ນທຸງຈຶ່ງຖືກລະເລີຍ.

V850 ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ -m ທາງ​ເລືອກ​ແມ່ນ​ໄດ້​ກໍາ​ນົດ​ສໍາ​ລັບ​ການ​ປະ​ຕິ​ບັດ V850​:

-mlong-ໂທ
-mno-long-calls
ປະຕິບັດທຸກການໂທເປັນຢູ່ໄກ (ໃກ້). ຖ້າ​ຫາກ​ວ່າ​ການ​ໂທ​ແມ່ນ​ຄາດ​ວ່າ​ຈະ​ຢູ່​ຫ່າງ​ໄກ​, ໄດ້​
compiler ສະເຫມີຈະໂຫລດຫນ້າທີ່ຢູ່ໃນທະບຽນ, ແລະໂທຫາທາງອ້ອມ
ຜ່ານຕົວຊີ້.

-mno-ep
-mep
ຢ່າເພີ່ມປະສິດທິພາບ (ເຮັດ optimize) ບລັອກພື້ນຖານທີ່ໃຊ້ຕົວຊີ້ດັດສະນີດຽວກັນ 4 ຫຼືຫຼາຍກວ່ານັ້ນ
ເວລາທີ່ຈະຄັດລອກຕົວຊີ້ເຂົ້າໄປໃນການລົງທະບຽນ "ep", ແລະໃຊ້ "sld" ແລະ "sst" ທີ່ສັ້ນກວ່າ.
ຄໍາແນະນໍາ. ໄດ້ -mep ທາງ​ເລືອກ​ແມ່ນ​ເປີດ​ເປັນ​ຄ່າ​ເລີ່ມ​ຕົ້ນ​ຖ້າ​ຫາກ​ວ່າ​ທ່ານ​ປັບ​ແຕ່ງ​.

-mno-prolog-function
-mprolog-function
ຢ່າໃຊ້ (ເຮັດ) ຫນ້າທີ່ພາຍນອກເພື່ອບັນທຶກແລະຟື້ນຟູການລົງທະບຽນຢູ່ທີ່ prologue
ແລະບົດສະຫຼຸບຂອງຫນ້າທີ່. ຟັງຊັນພາຍນອກຊ້າກວ່າ, ແຕ່ໃຊ້ລະຫັດຫນ້ອຍລົງ
space ຖ້າຫຼາຍກວ່າຫນຶ່ງຟັງຊັນຈະຊ່ວຍປະຢັດຈໍານວນດຽວກັນຂອງທະບຽນ. ໄດ້
-mprolog-function ທາງ​ເລືອກ​ແມ່ນ​ເປີດ​ເປັນ​ຄ່າ​ເລີ່ມ​ຕົ້ນ​ຖ້າ​ຫາກ​ວ່າ​ທ່ານ​ປັບ​ແຕ່ງ​.

-mspace
ພະຍາຍາມເຮັດໃຫ້ລະຫັດນ້ອຍເທົ່າທີ່ເປັນໄປໄດ້. ໃນປັດຈຸບັນ, ນີ້ພຽງແຕ່ turns ສຸດ -mep
ແລະ -mprolog-function ຕົວເລືອກ

-mtda=n
ໃສ່ຕົວແປສະຖິດ ຫຼື ທົ່ວໂລກທີ່ມີຂະໜາດ n bytes ຫຼືຫນ້ອຍລົງໃນພື້ນທີ່ຂໍ້ມູນຂະຫນາດນ້ອຍ
ທີ່ລົງທະບຽນ "ep" ຊີ້ໃຫ້ເຫັນ. ພື້ນທີ່ຂໍ້ມູນຂະຫນາດນ້ອຍສາມາດເກັບໄດ້ເຖິງ 256 bytes ໃນຈໍານວນທັງຫມົດ
(128 bytes ສໍາລັບການອ້າງອິງ byte).

-msda=n
ໃສ່ຕົວແປສະຖິດ ຫຼື ທົ່ວໂລກທີ່ມີຂະໜາດ n bytes ຫຼືຫນ້ອຍລົງໃນພື້ນທີ່ຂໍ້ມູນຂະຫນາດນ້ອຍ
ທີ່ລົງທະບຽນ "gp" ຊີ້ໃຫ້ເຫັນ. ພື້ນທີ່ຂໍ້ມູນຂະຫນາດນ້ອຍສາມາດເກັບໄດ້ເຖິງ 64 ກິໂລແມັດ.

-mzda=n
ໃສ່ຕົວແປສະຖິດ ຫຼື ທົ່ວໂລກທີ່ມີຂະໜາດ n bytes ຫຼືຫນ້ອຍລົງໃນ 32 ທໍາອິດ
ກິໂລໄບຂອງຫນ່ວຍຄວາມຈໍາ.

-mv850
ລະບຸວ່າໂຮງງານຜະລິດເປົ້າໝາຍແມ່ນ V850.

-mbig-ສະຫຼັບ
ສ້າງລະຫັດທີ່ເຫມາະສົມສໍາລັບຕາຕະລາງສະຫຼັບຂະຫນາດໃຫຍ່. ໃຊ້ທາງເລືອກນີ້ພຽງແຕ່ຖ້າຫາກວ່າ
assembler/linker ຈົ່ມກ່ຽວກັບສາຂານອກຂອບເຂດພາຍໃນຕາຕະລາງສະຫຼັບ.

-mapp-regs
ຕົວເລືອກນີ້ຈະເຮັດໃຫ້ r2 ແລະ r5 ຖືກນໍາໃຊ້ໃນລະຫັດທີ່ສ້າງໂດຍ compiler.
ການຕັ້ງຄ່ານີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-mno-app-regs
ຕົວເລືອກນີ້ຈະເຮັດໃຫ້ r2 ແລະ r5 ຖືກປະຕິບັດເປັນທະບຽນຄົງທີ່.

-mv850e2v3
ລະບຸວ່າໂຮງງານຜະລິດເປົ້າໝາຍແມ່ນ V850E2V3. preprocessor ຄົງທີ່
__v850e2v3__ ຈະຖືກກໍານົດຖ້າທາງເລືອກນີ້ຖືກນໍາໃຊ້.

-mv850e2
ລະບຸວ່າໂຮງງານຜະລິດເປົ້າໝາຍແມ່ນ V850E2. preprocessor ຄົງທີ່
__v850e2__ ຈະຖືກກໍານົດຖ້າທາງເລືອກນີ້ຖືກນໍາໃຊ້.

-mv850e1
ລະບຸວ່າໂຮງງານຜະລິດເປົ້າໝາຍແມ່ນ V850E1. preprocessor ຄົງທີ່
__v850e1__ ແລະ __v850e__ ຈະຖືກກໍານົດຖ້າທາງເລືອກນີ້ຖືກນໍາໃຊ້.

-mv850es
ລະບຸວ່າໂຮງງານຜະລິດເປົ້າໝາຍແມ່ນ V850ES. ນີ້ແມ່ນນາມແຝງສໍາລັບ -mv850e1
ທາງເລືອກ.

-mv850e
ລະບຸວ່າໂຮງງານຜະລິດເປົ້າໝາຍແມ່ນ V850E. preprocessor ຄົງທີ່ __v850e__
ຈະຖືກກໍານົດຖ້າທາງເລືອກນີ້ຖືກນໍາໃຊ້.

ຖ້າບໍ່ -mv850 neither -mv850e neither -mv850e1 neither -mv850e2 neither -mv850e2v3 ຖືກກໍານົດ
ຫຼັງຈາກນັ້ນ, ໂຮງງານຜະລິດເປົ້າຫມາຍເລີ່ມຕົ້ນຈະຖືກເລືອກແລະທີ່ກ່ຽວຂ້ອງ __v850*__ ໂປເຊດເຊີກ່ອນ
ຄົງຈະຖືກກໍານົດ.

preprocessor ຄົງທີ່ __v850 ແລະ __v851__ ຖືກກໍານົດສະເຫມີ, ບໍ່ວ່າຈະເປັນອັນໃດ
ຕົວແປຂອງໂປເຊດເຊີແມ່ນເປົ້າຫມາຍ.

-mdisable-callt
ຕົວເລືອກນີ້ຈະສະກັດກັ້ນການສ້າງຄໍາແນະນໍາ CALLT ສໍາລັບ v850e, v850e1,
v850e2 ແລະ v850e2v3 ລົດຊາດຂອງສະຖາປັດຕະຍະກໍາ v850. ຄ່າເລີ່ມຕົ້ນແມ່ນ
-mno-disable-callt ເຊິ່ງອະນຸຍາດໃຫ້ໃຊ້ຄຳສັ່ງ CALLT.

Vax ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ -m ທາງເລືອກແມ່ນຖືກກໍານົດສໍາລັບ VAX:

- munix
ຢ່າອອກຄໍາແນະນໍາການໂດດທີ່ແນ່ນອນ ("aobleq" ແລະອື່ນໆ) ທີ່ເຄື່ອງປະກອບ Unix
ສໍາລັບ VAX ບໍ່ສາມາດຈັດການກັບໄລຍະໄກໄດ້.

-mgnu
ເຮັດ​ໃຫ້​ອອກ​ຄໍາ​ແນະ​ນໍາ​ກະ​ໂດດ​ເຫຼົ່າ​ນັ້ນ​, ກ່ຽວ​ກັບ​ສົມ​ມຸດ​ຕິ​ຖານ​ທີ່​ທ່ານ​ຈະ​ປະ​ຊຸມ​ກັບ​
ເຄື່ອງປະກອບ GNU.

- ມກ ລະຫັດອອກສໍາລັບຕົວເລກຈຸດລອຍຮູບແບບ G ແທນທີ່ຈະເປັນຮູບແບບ D.

VxWorks ທາງເລືອກໃນການ

ທາງເລືອກໃນພາກນີ້ແມ່ນຖືກກໍານົດສໍາລັບເປົ້າຫມາຍ VxWorks ທັງຫມົດ. ທາງເລືອກທີ່ສະເພາະກັບ
ຮາດແວເປົ້າໝາຍຖືກລະບຸໄວ້ພ້ອມກັບຕົວເລືອກອື່ນສຳລັບເປົ້າໝາຍນັ້ນ.

-mrtp
GCC ສາມາດສ້າງລະຫັດສໍາລັບທັງສອງແກ່ນ VxWorks ແລະຂະບວນການເວລາຈິງ (RTPs). ນີ້
ທາງເລືອກປ່ຽນຈາກອະດີດໄປຫາອັນສຸດທ້າຍ. ມັນຍັງກໍານົດ macro preprocessor
"__RTP__".

- ບໍ່ສະຖິດ
ເຊື່ອມຕໍ່ RTP ທີ່ປະຕິບັດໄດ້ກັບຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນແທນທີ່ຈະເປັນຫ້ອງສະຫມຸດຄົງທີ່. ໄດ້
ທາງເລືອກໃນການ -static ແລະ - ແບ່ງ​ປັນ​ ຍັງສາມາດຖືກນໍາໃຊ້ສໍາລັບ RTPs; -static ເປັນຄ່າເລີ່ມຕົ້ນ.

-Bstatic
-Bdynamic
ທາງເລືອກເຫຼົ່ານີ້ຖືກສົ່ງຜ່ານໄປຫາຕົວເຊື່ອມຕໍ່. ພວກມັນຖືກ ກຳ ນົດເພື່ອຄວາມເຂົ້າກັນໄດ້ກັບ
Diab.

-Xbind-lazy
ເປີດໃຊ້ການຜູກມັດຂອງການໂທຟັງຊັນ. ທາງເລືອກນີ້ແມ່ນທຽບເທົ່າກັບ -Wl,-z, ດຽວນີ້ ແລະແມ່ນ
ກໍານົດສໍາລັບຄວາມເຂົ້າກັນໄດ້ກັບ Diab.

-Xbind-ດຽວນີ້
ປິດໃຊ້ງານການຜູກມັດຂອງການໂທຟັງຊັນ. ທາງເລືອກນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນແລະຖືກກໍານົດໄວ້ສໍາລັບ
ຄວາມເຂົ້າກັນໄດ້ກັບ Diab.

x86-64 ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ແມ່ນໄດ້ລະບຸໄວ້ພາຍໃຕ້

Xstormy16 ທາງເລືອກໃນການ

ຕົວເລືອກເຫຼົ່ານີ້ຖືກກໍານົດສໍາລັບ Xstormy16:

- ຊິມ
ເລືອກໄຟລ໌ເລີ່ມຕົ້ນແລະຕົວເຊື່ອມຕໍ່ທີ່ເຫມາະສົມສໍາລັບ simulator.

Xtensa ທາງເລືອກໃນການ

ທາງເລືອກເຫຼົ່ານີ້ແມ່ນສະຫນັບສະຫນູນສໍາລັບເປົ້າຫມາຍ Xtensa:

-mconst16
-mno-const16
ເປີດໃຊ້ຫຼືປິດການໃຊ້ຄໍາແນະນໍາ "CONST16" ສໍາລັບການໂຫຼດຄ່າຄົງທີ່. ໄດ້
ຄໍາແນະນໍາ "CONST16" ໃນປັດຈຸບັນບໍ່ແມ່ນທາງເລືອກມາດຕະຖານຈາກ Tensilica. ເມື່ອ​ໃດ​
ເປີດໃຊ້, ຄໍາແນະນໍາ "CONST16" ຖືກໃຊ້ແທນ "L32R" ມາດຕະຖານສະເຫມີ.
ຄໍາແນະນໍາ. ການນໍາໃຊ້ "CONST16" ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນພຽງແຕ່ຖ້າ "L32R" ເທົ່ານັ້ນ
ບໍ່ມີຄໍາແນະນໍາ.

-mfused-madd
-mno-fused-madd
ເປີດ ຫຼືປິດການນຳໃຊ້ fused multiply/add and multiply/subtract ຄໍາແນະນໍາໃນ
ຕົວເລືອກຈຸດລອຍ. ອັນນີ້ບໍ່ມີຜົນຫຍັງຖ້າຕົວເລືອກຈຸດທີ່ເລື່ອນບໍ່ໄດ້ຄືກັນ
ເປີດໃຊ້ງານ. ການປິດການນຳໃຊ້ fused multiply/add and multiply/subtract instruction force the
compiler ເພື່ອໃຊ້ຄໍາແນະນໍາແຍກຕ່າງຫາກສໍາລັບການດໍາເນີນງານການຄູນແລະລົບ.
ອັນນີ້ອາດຈະຕ້ອງການໃນບາງກໍລະນີທີ່ຜົນໄດ້ຮັບທີ່ສອດຄ່ອງກັບ IEEE 754 ທີ່ເຄັ່ງຄັດ
ຕ້ອງການ: ຄໍາແນະນໍາການບວກ/ລົບທີ່ບວກບວກບໍ່ເປັນຮອບຕົວກາງ
ຜົນ​ໄດ້​ຮັບ​, ສະ​ນັ້ນ​ການ​ຜະ​ລິດ​ຜົນ​ໄດ້​ຮັບ​ທີ່​ມີ​ ເພີ່ມເຕີມ bits ຂອງຄວາມແມ່ນຍໍາກວ່າທີ່ລະບຸໄວ້ໂດຍ
ມາດຕະຖານ IEEE. ການປິດການນຳໃຊ້ fused multiply add/subtract ຄໍາແນະນໍາຍັງຮັບປະກັນວ່າ
ຜົນ​ຜະ​ລິດ​ຂອງ​ໂຄງ​ການ​ແມ່ນ​ບໍ່​ມີ​ຄວາມ​ລະ​ອຽດ​ອ່ອນ​ກັບ​ຄວາມ​ສາ​ມາດ​ຂອງ compiler ໃນ​ການ​ສົມ​ທົບ​ການ​ຄູນ​ແລະ​
ການ​ປະ​ຕິ​ບັດ​ການ​ເພີ່ມ / ລົບ​.

-mserialize-volatile
-mno-serialize-volatile
ເມື່ອຕົວເລືອກນີ້ຖືກເປີດໃຊ້, GCC ຈະໃສ່ຄໍາແນະນໍາ "MEMW" ກ່ອນຫນ່ວຍຄວາມຈໍາ "volatile".
ການອ້າງອີງເພື່ອຮັບປະກັນຄວາມສອດຄ່ອງຕາມລໍາດັບ. ຄ່າເລີ່ມຕົ້ນແມ່ນ -mserialize-volatile.
ການນໍາໃຊ້ -mno-serialize-volatile ເພື່ອຍົກເລີກຄໍາແນະນໍາ "MEMW".

-mforce-no-pic
ສໍາລັບເປົ້າຫມາຍ, ເຊັ່ນ GNU/Linux, ບ່ອນທີ່ທຸກຮູບແບບຜູ້ໃຊ້ລະຫັດ Xtensa ຕ້ອງເປັນຕໍາແຫນ່ງ-
ລະຫັດເອກະລາດ (PIC), ທາງເລືອກນີ້ປິດການໃຊ້ງານ PIC ສໍາລັບການລວບລວມລະຫັດ kernel.

-mtext-section-literals
-mno-text-section-literals
ຄວບຄຸມການປິ່ນປົວຂອງສະນຸກເກີທີ່ຮູ້ຫນັງສື. ຄ່າເລີ່ມຕົ້ນແມ່ນ -mno-text-section-literals,
ເຊິ່ງວາງຕົວໜັງສືຢູ່ໃນພາກແຍກຕ່າງຫາກໃນໄຟລ໌ຜົນຜະລິດ. ນີ້ອະນຸຍາດໃຫ້
ສະນຸກເກີທີ່ຮູ້ຫນັງສືຈະຖືກຈັດໃສ່ໃນ RAM / ROM, ແລະມັນຍັງອະນຸຍາດໃຫ້ຕົວເຊື່ອມຕໍ່ປະສົມປະສານ
ສະນຸກເກີຕົວຫນັງສືຈາກໄຟລ໌ວັດຖຸແຍກຕ່າງຫາກເພື່ອເອົາຕົວຫນັງສືທີ່ຊ້ໍາກັນແລະປັບປຸງລະຫັດ
ຂະໜາດ. ກັບ -mtext-section-literals, ຕົວຫນັງສືແມ່ນ interspersed ໃນພາກສ່ວນຂໍ້ຄວາມ
ເພື່ອເຮັດໃຫ້ພວກເຂົາໃກ້ຊິດເທົ່າທີ່ເປັນໄປໄດ້ກັບການອ້າງອີງຂອງພວກເຂົາ. ນີ້ອາດຈະມີຄວາມຈໍາເປັນ
ສໍາລັບໄຟລ໌ປະກອບຂະຫນາດໃຫຍ່.

-mtarget-align
-mno-target-align
ເມື່ອຕົວເລືອກນີ້ຖືກເປີດໃຊ້, GCC ຈະສັ່ງໃຫ້ຜູ້ປະກອບການຈັດຮຽງອັດຕະໂນມັດ
ຄໍາແນະນໍາເພື່ອຫຼຸດຜ່ອນການລົງໂທດສາຂາໂດຍຄ່າໃຊ້ຈ່າຍຂອງຄວາມຫນາແຫນ້ນຂອງລະຫັດບາງຢ່າງ. ໄດ້
assembler ພະຍາຍາມຂະຫຍາຍຄໍາແນະນໍາຄວາມຫນາແຫນ້ນເພື່ອຈັດວາງເປົ້າຫມາຍສາຂາແລະ
ຄໍາແນະນໍາປະຕິບັດຕາມຄໍາແນະນໍາການໂທ. ຖ້າບໍ່ມີພຽງພໍກ່ອນຫນ້າປອດໄພ
ຄໍາແນະນໍາກ່ຽວກັບຄວາມຫນາແຫນ້ນເພື່ອຈັດວາງເປົ້າຫມາຍ, ບໍ່ມີການຂະຫຍາຍອອກໄປ. ຄ່າເລີ່ມຕົ້ນແມ່ນ
-mtarget-align. ທາງເລືອກເຫຼົ່ານີ້ບໍ່ມີຜົນກະທົບຕໍ່ການປິ່ນປົວແບບອັດຕະໂນມັດ
ຄໍາແນະນໍາເຊັ່ນ "LOOP", ເຊິ່ງຕົວປະກອບຈະສອດຄ່ອງສະເຫມີ, ບໍ່ວ່າຈະເປັນການຂະຫຍາຍ
ຄໍາແນະນໍາຄວາມຫນາແຫນ້ນຫຼືໂດຍການໃສ່ຄໍາແນະນໍາ no-op.

-mlongcalls
-mno-longcalls
ເມື່ອຕົວເລືອກນີ້ຖືກເປີດໃຊ້, GCC ຈະສັ່ງໃຫ້ຜູ້ປະກອບການແປການໂທໂດຍກົງຫາ
ການໂທທາງອ້ອມເວັ້ນເສຍແຕ່ວ່າມັນສາມາດກໍານົດວ່າເປົ້າຫມາຍຂອງການໂທໂດຍກົງແມ່ນຢູ່ໃນ
ໄລຍະທີ່ອະນຸຍາດໂດຍຄໍາແນະນໍາການໂທ. ການແປນີ້ມັກຈະເກີດຂຶ້ນສໍາລັບການໂທຫາ
ຟັງຊັນໃນໄຟລ໌ແຫຼ່ງອື່ນໆ. ໂດຍສະເພາະ, ຜູ້ປະກອບການແປພາສາໂດຍກົງ
ຄໍາແນະນໍາ "CALL" ເຂົ້າໄປໃນ "L32R" ປະຕິບັດຕາມຄໍາແນະນໍາ "CALLX". ຄ່າເລີ່ມຕົ້ນແມ່ນ
-mno-longcalls. ທາງເລືອກນີ້ຄວນຈະຖືກນໍາໃຊ້ໃນໂຄງການທີ່ເປົ້າຫມາຍການໂທສາມາດ
ອາດຈະຢູ່ນອກຂອບເຂດ. ທາງເລືອກນີ້ແມ່ນປະຕິບັດຢູ່ໃນຕົວປະກອບ, ບໍ່ແມ່ນ
compiler, ດັ່ງນັ້ນລະຫັດການປະກອບທີ່ສ້າງຂຶ້ນໂດຍ GCC ຈະຍັງຄົງສະແດງການໂທໂດຍກົງ
ຄໍາ​ແນະ​ນໍາ --- ເບິ່ງ​ທີ່​ລະ​ຫັດ​ວັດ​ຖຸ disassembled ເພື່ອ​ເບິ່ງ​ຄໍາ​ແນະ​ນໍາ​ຕົວ​ຈິງ​.
ໃຫ້ສັງເກດວ່າຜູ້ປະກອບຈະໃຊ້ການໂທທາງອ້ອມສໍາລັບທຸກໆການໂທຂ້າມໄຟລ໌, ບໍ່ພຽງແຕ່
ເຫຼົ່ານັ້ນແທ້ໆຈະຢູ່ນອກຂອບເຂດ.

zSeries ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ແມ່ນໄດ້ລະບຸໄວ້ພາຍໃຕ້

ທາງເລືອກໃນການ ສໍາລັບການ ລະຫັດ ການຜະລິດ ອະນຸສັນຍາ
ຕົວເລືອກທີ່ບໍ່ຂຶ້ນກັບເຄື່ອງຈັກເຫຼົ່ານີ້ຄວບຄຸມສົນທິສັນຍາການໂຕ້ຕອບທີ່ໃຊ້ໃນລະຫັດ
ການຜະລິດ.

ສ່ວນໃຫຍ່ຂອງພວກເຂົາມີທັງຮູບແບບທາງບວກແລະທາງລົບ; ຮູບ​ແບບ​ທາງ​ລົບ​ຂອງ​ -ffoo ຈະ
-fno-foo. ໃນຕາຕະລາງຂ້າງລຸ່ມນີ້, ມີພຽງແຕ່ຫນຶ່ງໃນແບບຟອມທີ່ຖືກລະບຸໄວ້ --- ຮູບແບບທີ່ບໍ່ແມ່ນ
ຄ່າເລີ່ມຕົ້ນ. ທ່ານສາມາດຄິດອອກຮູບແບບອື່ນໂດຍການຖອນອອກ ບໍ່- ຫຼືເພີ່ມມັນ.

-fbounds-ກວດ​ສອບ​
ສໍາລັບດ້ານຫນ້າທີ່ສະຫນັບສະຫນູນມັນ, ສ້າງລະຫັດເພີ່ມເຕີມເພື່ອກວດເບິ່ງຕົວຊີ້ວັດທີ່ເຄີຍໃຊ້
array ການເຂົ້າເຖິງແມ່ນຢູ່ພາຍໃນຂອບເຂດທີ່ປະກາດ. ນີ້​ແມ່ນ​ປະ​ຈຸ​ບັນ​ສະ​ຫນັບ​ສະ​ຫນູນ​ພຽງ​ແຕ່​
Java ແລະ Fortran ດ້ານຫນ້າ, ບ່ອນທີ່ທາງເລືອກນີ້ເລີ່ມຕົ້ນເປັນຄວາມຈິງແລະຜິດ
ຕາມລໍາດັບ.

-ftrapv
ທາງ​ເລືອກ​ນີ້​ສ້າງ​ກັບ​ດັກ​ສໍາ​ລັບ​ການ​ລົງ​ນາມ overflow ໃນ​ການ​ບວກ​, ການ​ລົບ​,
ການດໍາເນີນງານຄູນ.

-fwrapv
ທາງ​ເລືອກ​ນີ້​ແນະ​ນໍາ​ໃຫ້​ຜູ້​ສັງ​ລວມ​ສົມ​ມຸດ​ວ່າ​ການ​ລົງ​ນາມ​ເລກ​ຄະ​ນິດ​ສາດ overflow ຂອງ​
ການບວກ, ການຫັກລົບ ແລະ ການຄູນຫໍ່ອ້ອມຮອບໂດຍໃຊ້ twos-complement
ການເປັນຕົວແທນ. ທຸງນີ້ເຮັດໃຫ້ການເພີ່ມປະສິດທິພາບບາງຢ່າງ ແລະປິດການໃຊ້ງານອັນອື່ນ. ນີ້
ທາງ​ເລືອກ​ແມ່ນ​ໄດ້​ຮັບ​ການ​ເປີດ​ໃຊ້​ໂດຍ​ຄ່າ​ເລີ່ມ​ຕົ້ນ​ສໍາ​ລັບ​ການ Java front end, ຕາມ​ທີ່​ຕ້ອງ​ການ​ໂດຍ​ພາ​ສາ Java
ຂໍ້ ກຳ ນົດ.

- ຂໍ້​ຍົກ​ເວັ້ນ​
ເປີດໃຊ້ການຈັດການຂໍ້ຍົກເວັ້ນ. ສ້າງລະຫັດເພີ່ມເຕີມທີ່ຈໍາເປັນເພື່ອເຜີຍແຜ່ຂໍ້ຍົກເວັ້ນ. ສໍາລັບ
ບາງເປົ້າຫມາຍ, ນີ້ຫມາຍຄວາມວ່າ GCC ຈະສ້າງຂໍ້ມູນ unwind frame ສໍາລັບທຸກຄົນ
ຫນ້າທີ່, ຊຶ່ງສາມາດຜະລິດຂະຫນາດຂໍ້ມູນທີ່ສໍາຄັນ overhead, ເຖິງແມ່ນວ່າມັນບໍ່ໄດ້
ຜົນກະທົບຕໍ່ການປະຕິບັດ. ຖ້າທ່ານບໍ່ລະບຸຕົວເລືອກນີ້, GCC ຈະເປີດໃຊ້ມັນຕາມຄ່າເລີ່ມຕົ້ນ
ສໍາລັບພາສາເຊັ່ນ C ++ ທີ່ປົກກະຕິຮຽກຮ້ອງໃຫ້ມີການຈັດການຂໍ້ຍົກເວັ້ນ, ແລະປິດການໃຊ້ງານມັນສໍາລັບ
ພາສາເຊັ່ນ C ທີ່ປົກກະຕິບໍ່ຕ້ອງການມັນ. ຢ່າງໃດກໍຕາມ, ທ່ານອາດຈະຈໍາເປັນຕ້ອງໄດ້ເປີດ
ທາງເລືອກນີ້ໃນເວລາທີ່ລວບລວມລະຫັດ C ທີ່ຕ້ອງການ interoperate ຢ່າງຖືກຕ້ອງໂດຍມີຂໍ້ຍົກເວັ້ນ
handlers ຂຽນໃນ C ++. ທ່ານອາດຈະຕ້ອງການປິດທາງເລືອກນີ້ຖ້າທ່ານຢູ່
ລວບລວມໂປຼແກຼມ C++ ເກົ່າທີ່ບໍ່ໃຊ້ການຈັດການຂໍ້ຍົກເວັ້ນ.

-fnon-call-exceptions
ສ້າງລະຫັດທີ່ອະນຸຍາດໃຫ້ຄໍາແນະນໍາໃສ່ກັບດັກຖິ້ມຂໍ້ຍົກເວັ້ນ. ໃຫ້ສັງເກດວ່ານີ້
ຕ້ອງການການຮອງຮັບເວລາແລ່ນສະເພາະເວທີທີ່ບໍ່ມີຢູ່ທົ່ວທຸກແຫ່ງ. ຍິ່ງໄປກວ່ານັ້ນ,
ມັນພຽງແຕ່ອະນຸຍາດໃຫ້ ກັບດັກ ຄໍາແນະນໍາທີ່ຈະຖິ້ມຂໍ້ຍົກເວັ້ນ, ie ການອ້າງອິງຄວາມຊົງຈໍາຫຼື
ຄໍາແນະນໍາຈຸດລອຍ. ມັນບໍ່ອະນຸຍາດໃຫ້ມີຂໍ້ຍົກເວັ້ນທີ່ຈະຖິ້ມຈາກ arbitrary
ຕົວຈັດການສັນຍານເຊັ່ນ "SIGALRM".

-funwind-ຕາຕະລາງ
ຄ້າຍ​ຄື​ກັບ - ຂໍ້​ຍົກ​ເວັ້ນ​, ຍົກເວັ້ນວ່າມັນພຽງແຕ່ຈະສ້າງຂໍ້ມູນສະຖິດທີ່ຈໍາເປັນ, ແຕ່
ຈະບໍ່ສົ່ງຜົນກະທົບຕໍ່ລະຫັດທີ່ສ້າງຂຶ້ນໃນທາງອື່ນ. ປົກກະຕິທ່ານຈະບໍ່ເປີດໃຊ້ງານ
ທາງເລືອກນີ້; ແທນທີ່ຈະ, ໂປເຊດເຊີພາສາທີ່ຕ້ອງການການຈັດການນີ້ຈະເປີດໃຊ້ມັນ
ຕາງ ໜ້າ ທ່ານ.

-fasynchronous-unwind-ຕາຕະລາງ
ສ້າງຕາຕະລາງ unwind ໃນຮູບແບບ dwarf2, ຖ້າສະຫນັບສະຫນູນໂດຍເຄື່ອງຈັກເປົ້າຫມາຍ. ຕາຕະລາງແມ່ນ
ທີ່ແນ່ນອນຢູ່ແຕ່ລະຂອບເຂດຄໍາແນະນໍາ, ສະນັ້ນມັນສາມາດຖືກນໍາໃຊ້ສໍາລັບການ stack unwinding ຈາກ
ເຫດການບໍ່ກົງກັນ (ເຊັ່ນ: debugger ຫຼືຕົວເກັບຂີ້ເຫຍື້ອ).

-fpcc-struct-return
ສົ່ງຄ່າ "short" "struct" ແລະ "union" ໃນຄວາມຊົງຈໍາຄືກັບຄ່າທີ່ຍາວກວ່າ, ແທນທີ່ຈະຢູ່ໃນ
ລົງທະບຽນ. ສົນທິສັນຍານີ້ມີປະສິດທິພາບຫນ້ອຍ, ແຕ່ມັນມີປະໂຫຍດໃນການອະນຸຍາດໃຫ້
intercallability ລະຫວ່າງໄຟລ໌ GCC-compiled ແລະໄຟລ໌ທີ່ລວບລວມກັບ compilers ອື່ນໆ,
ໂດຍສະເພາະ Portable C Compiler (pcc).

ສົນທິສັນຍາທີ່ຊັດເຈນສໍາລັບການກັບຄືນໂຄງສ້າງໃນຫນ່ວຍຄວາມຈໍາແມ່ນຂຶ້ນກັບເປົ້າຫມາຍ
macro ການ​ຕັ້ງ​ຄ່າ​.

ໂຄງສ້າງສັ້ນແລະສະຫະພັນແມ່ນຜູ້ທີ່ມີຂະຫນາດແລະການຈັດຕໍາແຫນ່ງກົງກັບບາງສ່ວນ
ປະເພດຈໍານວນເຕັມ.

ຄໍາເຕືອນ: ລະຫັດທີ່ລວບລວມດ້ວຍ -fpcc-struct-return ສະຫຼັບບໍ່ເຂົ້າກັນໄດ້ສອງເທົ່າ
ດ້ວຍລະຫັດທີ່ລວບລວມດ້ວຍ -freg-struct-return ສະຫຼັບ. ໃຊ້ມັນເພື່ອສອດຄ່ອງກັບສິ່ງທີ່ບໍ່ເປັນ.
ແອັບພລິເຄຊັນ binary interface ເລີ່ມຕົ້ນ.

-freg-struct-return
ສົ່ງຄ່າ "ໂຄງສ້າງ" ແລະ "ສະຫະພັນ" ໃນທະບຽນເມື່ອເປັນໄປໄດ້. ນີ້ແມ່ນປະສິດທິພາບຫຼາຍ
ສໍາລັບໂຄງສ້າງຂະຫນາດນ້ອຍກວ່າ -fpcc-struct-return.

ຖ້າທ່ານບໍ່ລະບຸ -fpcc-struct-return neither -freg-struct-return, GCC ເລີ່ມຕົ້ນເປັນ
ສົນທິສັນຍາອັນໃດເປັນມາດຕະຖານສຳລັບເປົ້າໝາຍ. ຖ້າບໍ່ມີສົນທິສັນຍາມາດຕະຖານ,
GCC ເລີ່ມຕົ້ນເປັນ -fpcc-struct-returnຍົກເວັ້ນເປົ້າໝາຍທີ່ GCC ເປັນຫຼັກ
ສັງລວມ. ໃນກໍລະນີເຫຼົ່ານັ້ນ, ພວກເຮົາສາມາດເລືອກມາດຕະຖານ, ແລະພວກເຮົາເລືອກທີ່ມີປະສິດທິພາບຫຼາຍຂຶ້ນ
ລົງທະບຽນທາງເລືອກການກັບຄືນ.

ຄໍາເຕືອນ: ລະຫັດທີ່ລວບລວມດ້ວຍ -freg-struct-return ສະຫຼັບບໍ່ເຂົ້າກັນໄດ້ສອງເທົ່າ
ດ້ວຍລະຫັດທີ່ລວບລວມດ້ວຍ -fpcc-struct-return ສະຫຼັບ. ໃຊ້ມັນເພື່ອສອດຄ່ອງກັບສິ່ງທີ່ບໍ່ເປັນ.
ແອັບພລິເຄຊັນ binary interface ເລີ່ມຕົ້ນ.

-fshort-enums
ຈັດສັນເປັນປະເພດ "enum" ພຽງແຕ່ຫຼາຍ bytes ເທົ່າທີ່ມັນຕ້ອງການສໍາລັບຂອບເຂດປະກາດຂອງ
ຄຸນຄ່າທີ່ເປັນໄປໄດ້. ໂດຍສະເພາະ, ປະເພດ "enum" ຈະທຽບເທົ່າກັບຂະຫນາດນ້ອຍສຸດ
ປະເພດຈໍານວນເຕັມທີ່ມີຫ້ອງພຽງພໍ.

ຄໍາເຕືອນ: ໄດ້ -fshort-enums switch ເຮັດໃຫ້ GCC ສ້າງລະຫັດທີ່ບໍ່ແມ່ນ binary
ເຂົ້າກັນໄດ້ກັບລະຫັດທີ່ສ້າງຂຶ້ນໂດຍບໍ່ມີການສະຫຼັບນັ້ນ. ໃຊ້ມັນເພື່ອສອດຄ່ອງກັບສິ່ງທີ່ບໍ່ເປັນ.
ແອັບພລິເຄຊັນ binary interface ເລີ່ມຕົ້ນ.

-fshort-double
ໃຊ້ຂະຫນາດດຽວກັນສໍາລັບ "double" ເປັນສໍາລັບ "float".

ຄໍາເຕືອນ: ໄດ້ -fshort-double switch ເຮັດໃຫ້ GCC ສ້າງລະຫັດທີ່ບໍ່ແມ່ນ binary
ເຂົ້າກັນໄດ້ກັບລະຫັດທີ່ສ້າງຂຶ້ນໂດຍບໍ່ມີການສະຫຼັບນັ້ນ. ໃຊ້ມັນເພື່ອສອດຄ່ອງກັບສິ່ງທີ່ບໍ່ເປັນ.
ແອັບພລິເຄຊັນ binary interface ເລີ່ມຕົ້ນ.

-fshort-wchar
ລົບລ້າງປະເພດທີ່ຕິດພັນກັບ wchar_t ຈະ ສັ້ນ ລົງນາມ int ແທນທີ່ຈະ
ຄ່າເລີ່ມຕົ້ນສໍາລັບເປົ້າຫມາຍ. ທາງເລືອກນີ້ແມ່ນເປັນປະໂຫຍດສໍາລັບການກໍ່ສ້າງໂຄງການທີ່ຈະດໍາເນີນການພາຍໃຕ້
ເຫຼົ້າແວງ.

ຄໍາເຕືອນ: ໄດ້ -fshort-wchar switch ເຮັດໃຫ້ GCC ສ້າງລະຫັດທີ່ບໍ່ແມ່ນ binary
ເຂົ້າກັນໄດ້ກັບລະຫັດທີ່ສ້າງຂຶ້ນໂດຍບໍ່ມີການສະຫຼັບນັ້ນ. ໃຊ້ມັນເພື່ອສອດຄ່ອງກັບສິ່ງທີ່ບໍ່ເປັນ.
ແອັບພລິເຄຊັນ binary interface ເລີ່ມຕົ້ນ.

-fno-ທົ່ວໄປ
ໃນລະຫັດ C, ຄວບຄຸມການຈັດວາງຂອງຕົວແປທົ່ວໂລກທີ່ບໍ່ໄດ້ໃຊ້. Unix C compilers
ໄດ້ອະນຸຍາດຕາມປະເພນີຫຼາຍຄໍານິຍາມຂອງຕົວແປດັ່ງກ່າວໃນທີ່ແຕກຕ່າງກັນ
ການລວບລວມຫນ່ວຍງານໂດຍການວາງຕົວແປໃນບລັອກທົ່ວໄປ. ນີ້ແມ່ນພຶດຕິກໍາ
ລະບຸໂດຍ -fcommon, ແລະເປັນຄ່າເລີ່ມຕົ້ນຂອງ GCC ໃນເປົ້າໝາຍສ່ວນໃຫຍ່. ໃນທາງກົງກັນຂ້າມ,
ພຶດຕິກໍານີ້ແມ່ນບໍ່ຕ້ອງການໂດຍ ISO C, ແລະໃນບາງເປົ້າຫມາຍອາດຈະປະຕິບັດຄວາມໄວຫຼືລະຫັດ
ການລົງໂທດຂະໜາດໃນການອ້າງອີງຕົວແປ. ໄດ້ -fno-ທົ່ວໄປ ທາງ​ເລືອກ​ລະ​ບຸ​ວ່າ​
compiler ຄວນວາງຕົວແປທົ່ວໂລກທີ່ບໍ່ໄດ້ໃຊ້ໃນສ່ວນຂໍ້ມູນຂອງວັດຖຸ
ໄຟລ໌, ແທນທີ່ຈະສ້າງພວກມັນເປັນບລັອກທົ່ວໄປ. ນີ້ມີຜົນກະທົບວ່າຖ້າຫາກວ່າ
ຕົວແປດຽວກັນຖືກປະກາດ (ໂດຍບໍ່ມີ "extern") ໃນສອງການລວບລວມທີ່ແຕກຕ່າງກັນ, ທ່ານຈະ
ໄດ້ຮັບຄວາມຜິດພາດຫຼາຍຄໍານິຍາມເມື່ອທ່ານເຊື່ອມຕໍ່ພວກມັນ. ໃນກໍລະນີນີ້, ທ່ານຕ້ອງລວບລວມ
ກັບ -fcommon ແທນ. ສັງລວມກັບ -fno-ທົ່ວໄປ ເປັນປະໂຫຍດຕໍ່ເປົ້າຫມາຍທີ່ມັນ
ໃຫ້ປະສິດທິພາບທີ່ດີກວ່າ, ຫຼືຖ້າຫາກວ່າທ່ານຕ້ອງການທີ່ຈະກວດສອບວ່າໂຄງການຈະເຮັດວຽກ
ລະບົບອື່ນໆທີ່ສະເຫມີປະຕິບັດການປະກາດຕົວແປທີ່ບໍ່ໄດ້ກໍານົດເອງດ້ວຍວິທີນີ້.

-fno-ident
ບໍ່ສົນໃຈ #ລະບຸຕົວຕົນ ທິດທາງ.

-finhibit-size-directive
ຫ້າມອອກຄຳສັ່ງ ".size" assembler, ຫຼືອັນອື່ນທີ່ເຮັດໃຫ້ເກີດບັນຫາ
ຖ້າຟັງຊັນຖືກແບ່ງອອກໃນກາງ, ແລະສອງເຄິ່ງແມ່ນຖືກຈັດໃສ່ໃນສະຖານທີ່ໄກ
ນອກ​ຈາກ​ຄວາມ​ຊົງ​ຈໍາ​. ຕົວເລືອກນີ້ຖືກນໍາໃຊ້ໃນເວລາລວບລວມ crtstuff.c; ທ່ານບໍ່ຄວນຕ້ອງການ
ເພື່ອໃຊ້ມັນສໍາລັບສິ່ງອື່ນ.

-fverbose-asm
ເອົາຂໍ້ມູນຄໍາຄິດຄໍາເຫັນເພີ່ມເຕີມໃນລະຫັດການປະກອບທີ່ສ້າງຂຶ້ນເພື່ອເຮັດໃຫ້ມັນຫຼາຍຂຶ້ນ
ອ່ານໄດ້. ຕົວເລືອກນີ້ໂດຍທົ່ວໄປແລ້ວພຽງແຕ່ໃຊ້ກັບຜູ້ທີ່ຕ້ອງການອ່ານ
ສ້າງລະຫັດປະກອບ (ບາງທີໃນຂະນະທີ່ debugging compiler ຕົວຂອງມັນເອງ).

-fno-verbose-asm, ໃນຕອນຕົ້ນ, ເຮັດໃຫ້ຂໍ້ມູນເພີ່ມເຕີມຖືກລະເວັ້ນແລະເປັນ
ເປັນປະໂຫຍດເມື່ອປຽບທຽບສອງໄຟລ໌ປະກອບ.

-frecord-gcc-ສະຫຼັບ
ສະວິດນີ້ເຮັດໃຫ້ເສັ້ນຄໍາສັ່ງທີ່ຖືກນໍາໃຊ້ເພື່ອເອີ້ນ compiler ເປັນ
ບັນທຶກເຂົ້າໄປໃນໄຟລ໌ວັດຖຸທີ່ກໍາລັງຖືກສ້າງຂື້ນ. ສະວິດນີ້ຖືກປະຕິບັດເທົ່ານັ້ນ
ໃນບາງເປົ້າຫມາຍແລະຮູບແບບທີ່ແນ່ນອນຂອງການບັນທຶກແມ່ນເປົ້າຫມາຍແລະຮູບແບບເອກະສານຖານສອງ
ຂຶ້ນກັບ, ແຕ່ມັນມັກຈະໃຊ້ຮູບແບບຂອງພາກສ່ວນທີ່ມີຂໍ້ຄວາມ ASCII. ນີ້
switch ແມ່ນກ່ຽວຂ້ອງກັບ -fverbose-asm switch, ແຕ່ວ່າສະຫຼັບນັ້ນພຽງແຕ່ບັນທຶກ
ຂໍ້​ມູນ​ໃນ​ໄຟລ​໌​ຜົນ​ຜະ​ລິດ assembler ເປັນ​ຄໍາ​ຄິດ​ເຫັນ​, ສະ​ນັ້ນ​ມັນ​ບໍ່​ເຄີຍ​ໄປ​ເຖິງ​ວັດ​ຖຸ​
ໄຟລ໌. ເບິ່ງນຳ -grecord-gcc-ສະຫຼັບ ສໍາລັບວິທີການອື່ນຂອງການເກັບຮັກສາທາງເລືອກ compiler ເຂົ້າໄປໃນ
ໄຟລ໌ວັດຖຸ.

-fpic
ສ້າງລະຫັດເອກະລາດຕໍາແຫນ່ງ (PIC) ທີ່ເຫມາະສົມສໍາລັບການນໍາໃຊ້ໃນຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນ, ຖ້າ
ສະຫນັບສະຫນູນສໍາລັບເຄື່ອງຈັກເປົ້າຫມາຍ. ລະຫັດດັ່ງກ່າວເຂົ້າເຖິງທີ່ຢູ່ຄົງທີ່ທັງຫມົດໂດຍຜ່ານ a
ຕາຕະລາງຊົດເຊີຍທົ່ວໂລກ (GOT). ຕົວໂຫຼດແບບໄດນາມິກແກ້ໄຂລາຍການ GOT ເມື່ອ
ໂປຣແກມເລີ່ມຕົ້ນ (ຕົວໂຫຼດແບບໄດນາມິກບໍ່ແມ່ນສ່ວນໜຶ່ງຂອງ GCC; ມັນແມ່ນສ່ວນໜຶ່ງຂອງການເຮັດວຽກ
ລະບົບ). ຖ້າຂະຫນາດ GOT ສໍາລັບການເຊື່ອມຕໍ່ທີ່ປະຕິບັດໄດ້ເກີນຈໍານວນສູງສຸດສະເພາະເຄື່ອງຈັກ
ຂະຫນາດ, ທ່ານໄດ້ຮັບຂໍ້ຄວາມສະແດງຂໍ້ຜິດພາດຈາກຕົວເຊື່ອມຕໍ່ທີ່ຊີ້ໃຫ້ເຫັນວ່າ -fpic ບໍ່ເຮັດວຽກ; ໃນ
ກໍລະນີ, recompile ກັບ -fPIC ແທນ. (ສູງສຸດເຫຼົ່ານີ້ແມ່ນ 8k ໃນ SPARC ແລະ 32k
ໃນ m68k ແລະ RS/6000. 386 ບໍ່ມີຂອບເຂດຈໍາກັດດັ່ງກ່າວ.)

ລະຫັດຕໍາແຫນ່ງເອກະລາດຮຽກຮ້ອງໃຫ້ມີການສະຫນັບສະຫນູນພິເສດ, ແລະດັ່ງນັ້ນຈຶ່ງເຮັດວຽກພຽງແຕ່ໃນ
ເຄື່ອງທີ່ແນ່ນອນ. ສໍາລັບ 386, GCC ສະຫນັບສະຫນູນ PIC ສໍາລັບລະບົບ V ແຕ່ບໍ່ແມ່ນສໍາລັບ Sun
386i. ລະຫັດທີ່ສ້າງຂຶ້ນສໍາລັບ IBM RS/6000 ແມ່ນຂຶ້ນກັບຕຳແໜ່ງທີ່ເປັນເອກະລາດສະເໝີ.

ເມື່ອທຸງນີ້ຖືກຕັ້ງ, ມາໂຄຣ "__pic__" ແລະ "__PIC__" ຖືກກຳນົດເປັນ 1.

-fPIC
ຖ້າ​ຫາກ​ວ່າ​ສະ​ຫນັບ​ສະ​ຫນູນ​ເຄື່ອງ​ເປົ້າ​ຫມາຍ​, ປ່ອຍ​ລະ​ຫັດ​ຕໍາ​ແຫນ່ງ​ເປັນ​ເອ​ກະ​ລາດ​, ທີ່​ເຫມາະ​ສົມ​ສໍາ​ລັບ​ການ​
ການເຊື່ອມໂຍງແບບເຄື່ອນໄຫວແລະຫຼີກເວັ້ນການຈໍາກັດໃດໆກ່ຽວກັບຂະຫນາດຂອງຕາຕະລາງຊົດເຊີຍທົ່ວໂລກ. ນີ້
ທາງເລືອກເຮັດໃຫ້ຄວາມແຕກຕ່າງໃນ m68k, PowerPC ແລະ SPARC.

ລະຫັດຕໍາແຫນ່ງເອກະລາດຮຽກຮ້ອງໃຫ້ມີການສະຫນັບສະຫນູນພິເສດ, ແລະດັ່ງນັ້ນຈຶ່ງເຮັດວຽກພຽງແຕ່ໃນ
ເຄື່ອງທີ່ແນ່ນອນ.

ເມື່ອທຸງນີ້ຖືກຕັ້ງ, ມາໂຄຣ "__pic__" ແລະ "__PIC__" ຖືກກຳນົດເປັນ 2.

-fpie
-fPIE
ທາງເລືອກເຫຼົ່ານີ້ແມ່ນຄ້າຍຄືກັນກັບ -fpic ແລະ -fPIC, ແຕ່ສ້າງລະຫັດເອກະລາດຕໍາແຫນ່ງ
ສາມາດເຊື່ອມຕໍ່ພຽງແຕ່ເຂົ້າໄປໃນ executables. ປົກກະຕິແລ້ວທາງເລືອກເຫຼົ່ານີ້ຖືກນໍາໃຊ້ໃນເວລາທີ່ -pie GCC
ທາງເລືອກຈະຖືກໃຊ້ໃນລະຫວ່າງການເຊື່ອມຕໍ່.

-fpie ແລະ -fPIE ທັງສອງກໍານົດ macro "__pie__" ແລະ "__PIE__". ມະຫາພາກມີ
ຄ່າ 1 ສໍາລັບ -fpie ແລະ 2 ສໍາລັບ -fPIE.

-fno-jump-tables
ຢ່າໃຊ້ຕາຕະລາງກະໂດດເພື່ອສະຫຼັບຄຳຖະແຫຼງທີ່ເຖິງແມ່ນວ່າມັນຈະມີປະສິດທິພາບຫຼາຍຂຶ້ນ
ກ່ວາຍຸດທະສາດການສ້າງລະຫັດອື່ນໆ. ທາງເລືອກນີ້ແມ່ນໃຊ້ຮ່ວມກັນກັບ
-fpic or -fPIC ສໍາລັບລະຫັດການກໍ່ສ້າງທີ່ປະກອບເປັນສ່ວນຂອງຕົວເຊື່ອມຕໍ່ແບບເຄື່ອນໄຫວແລະບໍ່ສາມາດເຮັດໄດ້
ອ້າງອີງທີ່ຢູ່ຂອງຕາຕະລາງໂດດ. ໃນບາງເປົ້າຫມາຍ, ຕາຕະລາງເຕັ້ນໄປຫາບໍ່ຕ້ອງການ a
GOT ແລະທາງເລືອກນີ້ບໍ່ຈໍາເປັນ.

- ຄົງ​ທີ່ -reg
ປະຕິບັດການລົງທະບຽນທີ່ມີຊື່ reg ເປັນທະບຽນຄົງທີ່; ລະຫັດທີ່ສ້າງຂຶ້ນບໍ່ຄວນອ້າງອີງເຖິງ
ມັນ (ຍົກເວັ້ນບາງທີອາດຈະເປັນຕົວຊີ້ stack, ຕົວຊີ້ກອບຫຼືໃນບາງບົດບາດຄົງທີ່ອື່ນໆ).

reg ຕ້ອງເປັນຊື່ຂອງທະບຽນ. ຊື່ລົງທະບຽນທີ່ຍອມຮັບແມ່ນສະເພາະເຄື່ອງຈັກ
ແລະຖືກກໍານົດໄວ້ໃນ "REGISTER_NAMES" macro ໃນໄຟລ໌ macro ຄໍາອະທິບາຍເຄື່ອງ.

ທຸງນີ້ບໍ່ມີຮູບແບບທາງລົບ, ເພາະວ່າມັນກໍານົດທາງເລືອກສາມທາງ.

-fcall-ໃຊ້-reg
ປະຕິບັດການລົງທະບຽນທີ່ມີຊື່ reg ເປັນ​ການ​ຈົດ​ທະ​ບຽນ​ອະ​ນຸ​ຍາດ​ທີ່ clobbered ໂດຍ​ການ​ທໍາ​ງານ​
ໂທ. ມັນ​ອາດ​ຈະ​ໄດ້​ຮັບ​ການ​ຈັດ​ສັນ​ສໍາ​ລັບ​ການ​ຊົ່ວ​ຄາວ​ຫຼື​ຕົວ​ແປ​ທີ່​ບໍ່​ໄດ້​ອາ​ໄສ​ຢູ່​ໃນ​ທົ່ວ a
ໂທ. ຟັງຊັນທີ່ລວບລວມດ້ວຍວິທີນີ້ຈະບໍ່ບັນທຶກແລະຟື້ນຟູການລົງທະບຽນ reg.

ມັນເປັນຄວາມຜິດພາດທີ່ຈະໃຊ້ທຸງນີ້ກັບຕົວຊີ້ກອບ ຫຼືຕົວຊີ້ stack. ການນໍາໃຊ້ນີ້
ທຸງສໍາລັບທະບຽນອື່ນໆທີ່ກໍານົດພາລະບົດບາດແຜ່ຂະຫຍາຍໃນການປະຕິບັດຂອງເຄື່ອງຈັກ
ແບບຈໍາລອງຈະສ້າງຜົນເສຍຫາຍ.

ທຸງນີ້ບໍ່ມີຮູບແບບທາງລົບ, ເພາະວ່າມັນກໍານົດທາງເລືອກສາມທາງ.

-fcall-ບັນທຶກ-reg
ປະຕິບັດການລົງທະບຽນທີ່ມີຊື່ reg ເປັນ​ການ​ຈົດ​ທະ​ບຽນ​ການ​ຈັດ​ສັນ​ບັນ​ທຶກ​ໄວ້​ໂດຍ​ຫນ້າ​ທີ່​. ມັນອາດຈະເປັນ
ການຈັດສັນເຖິງແມ່ນວ່າຊົ່ວຄາວຫຼືຕົວແປທີ່ມີຊີວິດຢູ່ໃນທົ່ວການໂທ. ຟັງຊັນ
ລວບລວມວິທີການນີ້ຈະຊ່ວຍປະຢັດແລະຟື້ນຟູການລົງທະບຽນ reg ຖ້າພວກເຂົາໃຊ້ມັນ.

ມັນເປັນຄວາມຜິດພາດທີ່ຈະໃຊ້ທຸງນີ້ກັບຕົວຊີ້ກອບ ຫຼືຕົວຊີ້ stack. ການນໍາໃຊ້ນີ້
ທຸງສໍາລັບທະບຽນອື່ນໆທີ່ກໍານົດພາລະບົດບາດແຜ່ຂະຫຍາຍໃນການປະຕິບັດຂອງເຄື່ອງຈັກ
ແບບຈໍາລອງຈະສ້າງຜົນເສຍຫາຍ.

ໄພພິບັດປະເພດທີ່ແຕກຕ່າງກັນຈະເກີດຈາກການນໍາໃຊ້ທຸງນີ້ສໍາລັບການລົງທະບຽນໃນ
ຄ່າຟັງຊັນໃດອາດຈະຖືກສົ່ງຄືນ.

ທຸງນີ້ບໍ່ມີຮູບແບບທາງລົບ, ເພາະວ່າມັນກໍານົດທາງເລືອກສາມທາງ.

-fpack-struct[=n]
ໂດຍບໍ່ມີການກໍານົດຄ່າ, ຫໍ່ສະມາຊິກໂຄງສ້າງທັງຫມົດຮ່ວມກັນໂດຍບໍ່ມີຮູ. ເມື່ອ ກ
ຄ່າແມ່ນຖືກກໍານົດ (ເຊິ່ງຈະຕ້ອງເປັນພະລັງງານຂະຫນາດນ້ອຍຂອງສອງ), ສະມາຊິກໂຄງສ້າງຊອງ
ອີງຕາມຄ່ານີ້, ເປັນຕົວແທນຂອງການຈັດຕໍາແຫນ່ງສູງສຸດ (ນັ້ນແມ່ນ, ວັດຖຸທີ່ມີ
ຄວາມຕ້ອງການການຈັດວາງເລີ່ມຕົ້ນທີ່ໃຫຍ່ກວ່ານີ້ຈະຖືກສົ່ງອອກທີ່ອາດບໍ່ສອດຄ່ອງ
ຢູ່ທີ່ສະຖານທີ່ທີ່ເຫມາະສົມຕໍ່ໄປ.

ຄໍາເຕືອນ: ໄດ້ -fpack-struct switch ເຮັດໃຫ້ GCC ສ້າງລະຫັດທີ່ບໍ່ແມ່ນ binary
ເຂົ້າກັນໄດ້ກັບລະຫັດທີ່ສ້າງຂຶ້ນໂດຍບໍ່ມີການສະຫຼັບນັ້ນ. ນອກຈາກນັ້ນ, ມັນເຮັດໃຫ້ລະຫັດ
ເໝາະສົມທີ່ສຸດ. ໃຊ້ມັນເພື່ອສອດຄ່ອງກັບສ່ວນຕິດຕໍ່ຄູ່ຂອງແອັບພລິເຄຊັນທີ່ບໍ່ແມ່ນຄ່າເລີ່ມຕົ້ນ.

- finstrument - ຫນ້າ​ທີ່​
ສ້າງ​ການ​ຮຽກ​ຮ້ອງ​ເຄື່ອງ​ມື​ສໍາ​ລັບ​ການ​ເຂົ້າ​ແລະ​ອອກ​ໄປ​ຫນ້າ​ທີ່​. ພຽງ​ແຕ່​ຫຼັງ​ຈາກ​ການ​ທໍາ​ງານ​
ການເຂົ້າແລະພຽງແຕ່ກ່ອນທີ່ຈະອອກຫນ້າທີ່, ຫນ້າທີ່ profileing ຕໍ່ໄປນີ້ຈະຖືກເອີ້ນ
ກັບທີ່ຢູ່ຂອງຫນ້າທີ່ປະຈຸບັນແລະສະຖານທີ່ໂທຫາຂອງມັນ. (ໃນບາງເວທີ,
"__builtin_return_address" ບໍ່ໄດ້ເຮັດວຽກນອກເຫນືອການທໍາງານໃນປະຈຸບັນ, ດັ່ງນັ້ນສະຖານທີ່ໂທຫາ
ຂໍ້​ມູນ​ອາດ​ຈະ​ບໍ່​ມີ​ໃຫ້​ກັບ​ການ​ທໍາ​ງານ​ຂອງ profile ເປັນ​ຢ່າງ​ອື່ນ​.)

void __cyg_profile_func_enter (void *this_fn,
void *call_site);
void __cyg_profile_func_exit (void *this_fn,
void *call_site);

ການໂຕ້ຖຽງທໍາອິດແມ່ນທີ່ຢູ່ຂອງການເລີ່ມຕົ້ນຂອງຫນ້າທີ່ປະຈຸບັນ, ເຊິ່ງອາດຈະເປັນ
ຊອກຫາຢູ່ໃນຕາຕະລາງສັນຍາລັກ.

ເຄື່ອງມືນີ້ຍັງເຮັດໄດ້ສໍາລັບຫນ້າທີ່ຂະຫຍາຍຢູ່ໃນແຖວໃນຫນ້າທີ່ອື່ນໆ.
ການໂທ profileing ຈະຊີ້ບອກບ່ອນທີ່, ແນວຄວາມຄິດ, ຟັງຊັນ inline ຖືກປ້ອນ
ແລະອອກ. ນີ້ຫມາຍຄວາມວ່າສະບັບທີ່ສາມາດແກ້ໄຂໄດ້ຂອງຫນ້າທີ່ດັ່ງກ່າວຈະຕ້ອງມີ.
ຖ້າທຸກການໃຊ້ຟັງຊັນຂອງທ່ານຖືກຂະຫຍາຍຢູ່ໃນແຖວ, ນີ້ອາດຈະຫມາຍເຖິງການເພີ່ມເຕີມ
ການຂະຫຍາຍຂະຫນາດລະຫັດ. ຖ້າທ່ານໃຊ້ ພາຍນອກ inline ໃນລະຫັດ C ຂອງທ່ານ, ເປັນທີ່ຢູ່
ສະບັບຂອງຫນ້າທີ່ດັ່ງກ່າວຕ້ອງໄດ້ຮັບການສະຫນອງໃຫ້. (ໂດຍປົກກະຕິນີ້ແມ່ນກໍລະນີໃດກໍ່ຕາມ, ແຕ່
ຖ້າທ່ານໂຊກດີແລະ optimizer ສະເຫມີຂະຫຍາຍຫນ້າທີ່ຢູ່ໃນເສັ້ນ, ທ່ານອາດຈະມີ
ໄດ້​ໄປ​ໂດຍ​ບໍ່​ມີ​ການ​ສະ​ຫນອງ​ສໍາ​ເນົາ​ສະ​ຖິ​ຕິ​.)

ຟັງຊັນອາດຈະໄດ້ຮັບຄຸນລັກສະນະ "no_instrument_function", ໃນກໍລະນີນີ້
ເຄື່ອງມືຈະບໍ່ຖືກເຮັດ. ນີ້ສາມາດຖືກນໍາໃຊ້, ສໍາລັບການຍົກຕົວຢ່າງ, ສໍາລັບ profileing ໄດ້
ຟັງຊັນທີ່ລະບຸໄວ້ຂ້າງເທິງ, ບູລິມະສິດການຂັດຂວາງການປົກກະຕິ, ແລະຟັງຊັນຕ່າງໆຈາກນັ້ນ
ຟັງຊັນໂປຣໄຟລ໌ບໍ່ສາມາດເອີ້ນໄດ້ຢ່າງປອດໄພ (ບາງທີຕົວຈັດການສັນຍານ, ຖ້າ
profileing routines ສ້າງຜົນຜະລິດຫຼືຈັດສັນຫນ່ວຍຄວາມຈໍາ).

-finstrument-functions-exclude-file-list=ເອກະສານ,ເອກະສານ...
ກໍາ​ນົດ​ບັນ​ຊີ​ລາຍ​ການ​ຂອງ​ຫນ້າ​ທີ່​ທີ່​ຖືກ​ຍົກ​ເວັ້ນ​ຈາກ​ເຄື່ອງ​ມື (ເບິ່ງ​ຄໍາ​ອະ​ທິ​ບາຍ​
ຂອງ "-finstrument-functions"). ຖ້າໄຟລ໌ທີ່ມີຄໍານິຍາມຟັງຊັນກົງກັນ
ກັບຫນຶ່ງຂອງ ເອກະສານ, ຫຼັງຈາກນັ້ນ, ຫນ້າທີ່ບໍ່ໄດ້ຖືກນໍາໃຊ້. ການແຂ່ງຂັນແມ່ນສໍາເລັດສຸດ
substrings: ຖ້າ​ຫາກ​ວ່າ​ ເອກະສານ ພາລາມິເຕີແມ່ນ substring ຂອງຊື່ໄຟລ໌, ມັນແມ່ນພິຈາລະນາ
ເປັນການແຂ່ງຂັນ.

ຍົກ​ຕົວ​ຢ່າງ:

-finstrument-functions-exclude-file-list=/bits/stl,include/sys

ຈະຍົກເວັ້ນຟັງຊັນໃນແຖວໃດນຶ່ງທີ່ກຳນົດໄວ້ໃນໄຟລ໌ທີ່ຊື່ເສັ້ນທາງມີ "/bits/stl"
ຫຼື "ລວມ / sys".

ຖ້າ, ສໍາລັບເຫດຜົນບາງຢ່າງ, ທ່ານຕ້ອງການລວມເອົາຈົດຫມາຍ ',' ໃນຫນຶ່ງຂອງ ຊິມ, ຂຽນ ','. ສໍາລັບ
ຕົວຢ່າງ, "-finstrument-functions-exclude-file-list=',,tmp'" (ໝາຍເຫດຄຳອ້າງອີງດຽວ
ອ້ອມ​ຂ້າງ​ທາງ​ເລືອກ​)​.

-finstrument-functions-exclude-function-list=ຊິມ,ຊິມ...
ນີ້ແມ່ນຄ້າຍຄືກັນກັບ "-finstrument-functions-exclude-file-list", ແຕ່ຕົວເລືອກນີ້ກໍານົດ.
ບັນຊີລາຍຊື່ຂອງຫນ້າທີ່ຈະຖືກຍົກເວັ້ນຈາກເຄື່ອງມື. ຊື່ຟັງຊັນເປັນ
be matched ແມ່ນຊື່ທີ່ຜູ້ໃຊ້ສາມາດເຫັນໄດ້, ເຊັ່ນ "vector blah(const vector &)",
ບໍ່ແມ່ນຊື່ທີ່ຫຼອກລວງພາຍໃນ (ຕົວຢ່າງ, "_Z4blahRSt6vectorIiSaIiEE"). ການແຂ່ງຂັນແມ່ນແລ້ວ
on substrings: ຖ້າ​ຫາກ​ວ່າ​ ຊິມ ພາລາມິເຕີແມ່ນສາຍຍ່ອຍຂອງຊື່ຟັງຊັນ, ມັນແມ່ນ
ຖືວ່າເປັນການແຂ່ງຂັນ. ສໍາລັບຕົວລະບຸຂະຫຍາຍ C99 ແລະ C++, ຊື່ຟັງຊັນ
ຈະຕ້ອງໃຫ້ຢູ່ໃນ UTF-8, ບໍ່ໃຫ້ໃຊ້ຊື່ຕົວອັກສອນທົ່ວໄປ.

-fstack-ກວດ​ສອບ​
ສ້າງລະຫັດເພື່ອກວດສອບວ່າທ່ານບໍ່ເກີນຂອບເຂດຂອງ stack. ເຈົ້າ
ຄວນລະບຸທຸງນີ້ ຖ້າທ່ານກຳລັງແລ່ນຢູ່ໃນສະພາບແວດລ້ອມທີ່ມີຫຼາຍຫົວຂໍ້,
ແຕ່ບໍ່ຄ່ອຍຈະຕ້ອງລະບຸມັນຢູ່ໃນສະພາບແວດລ້ອມກະທູ້ດຽວນັບຕັ້ງແຕ່ stack
overflow ຈະຖືກກວດພົບໂດຍອັດຕະໂນມັດໃນເກືອບທຸກລະບົບຖ້າມີພຽງແຕ່ stack ດຽວ.

ໃຫ້ສັງເກດວ່າສະຫວິດນີ້ບໍ່ໄດ້ເຮັດໃຫ້ການກວດສອບຕົວຈິງແລ້ວ; ການດໍາເນີນງານ
ລະບົບຫຼື runtime ພາສາຕ້ອງເຮັດແນວນັ້ນ. ສະຫຼັບເຮັດໃຫ້ການສ້າງລະຫັດ
ໃຫ້ແນ່ໃຈວ່າພວກເຂົາເຫັນ stack ໄດ້ຖືກຂະຫຍາຍອອກ.

ນອກນັ້ນທ່ານຍັງສາມາດກໍານົດຕົວກໍານົດການສະຕຣິງ: "ບໍ່" ຫມາຍຄວາມວ່າບໍ່ມີການກວດສອບ, "ທົ່ວໄປ"
ຫມາຍຄວາມວ່າບັງຄັບໃຊ້ການກວດສອບແບບເກົ່າ, "ສະເພາະ" ຫມາຍຄວາມວ່າໃຊ້ການກວດສອບທີ່ດີທີ່ສຸດ
ວິທີການແລະເທົ່າກັບເປົ່າ -fstack-ກວດ​ສອບ​.

ການກວດສອບແບບເກົ່າແມ່ນກົນໄກທົ່ວໄປທີ່ບໍ່ຕ້ອງການການສະຫນັບສະຫນູນເປົ້າຫມາຍສະເພາະໃນ
compiler ແຕ່ມາພ້ອມກັບຂໍ້ບົກຜ່ອງດັ່ງຕໍ່ໄປນີ້:

1. ປັບປຸງຍຸດທະສາດການຈັດສັນສໍາລັບວັດຖຸຂະຫນາດໃຫຍ່: ພວກມັນຈະຖືກຈັດສັນສະເຫມີ
dynamically ຖ້າຂະຫນາດຂອງພວກມັນເກີນຂອບເຂດກໍານົດ.

2. ກໍານົດຂອບເຂດຈໍາກັດກ່ຽວກັບຂະຫນາດຂອງກອບ static ຂອງຫນ້າທີ່: ເມື່ອມັນຖືກ topped ໂດຍ a
ຫນ້າ​ທີ່​ໂດຍ​ສະ​ເພາະ​, ການ​ກວດ​ສອບ stack ແມ່ນ​ບໍ່​ຫນ້າ​ເຊື່ອ​ຖື​ແລະ​ຄໍາ​ເຕືອນ​ແມ່ນ​ອອກ​ໂດຍ​ການ​
ນັກຂຽນ.

3. ຄວາມບໍ່ມີປະສິດທິພາບ: ເປັນຍ້ອນທັງຍຸດທະສາດການຈັດສັນທີ່ຖືກດັດແກ້ ແລະ ທົ່ວໄປ
ການປະຕິບັດ, ການປະຕິບັດຂອງລະຫັດໄດ້ຖືກຂັດຂວາງ.

ໃຫ້ສັງເກດວ່າການກວດສອບ stack ແບບເກົ່າຍັງເປັນວິທີການຫຼຸດລົງສໍາລັບ "ສະເພາະ" ຖ້າບໍ່ມີ
ການສະຫນັບສະຫນູນເປົ້າຫມາຍໄດ້ຖືກເພີ່ມເຂົ້າໃນ compiler.

-fstack-limit-register=reg
-fstack-limit-symbol=ຊິມ
-fno-stack-ຈຳກັດ
ສ້າງລະຫັດເພື່ອຮັບປະກັນວ່າ stack ບໍ່ເຕີບໂຕເກີນມູນຄ່າທີ່ແນ່ນອນ, ບໍ່ວ່າຈະ
ຄ່າຂອງທະບຽນ ຫຼືທີ່ຢູ່ຂອງສັນຍາລັກ. ຖ້າ stack ຈະເຕີບໂຕເກີນກວ່າ
ມູນຄ່າ, ສັນຍານຖືກຍົກຂຶ້ນມາ. ສໍາລັບເປົ້າຫມາຍສ່ວນໃຫຍ່, ສັນຍານໄດ້ຖືກຍົກຂຶ້ນມາກ່ອນທີ່ຈະ
stack overruns ເຂດແດນ, ສະນັ້ນມັນເປັນໄປໄດ້ທີ່ຈະຈັບສັນຍານໂດຍບໍ່ມີການກິນ
ລະມັດລະວັງເປັນພິເສດ.

ຕົວຢ່າງ, ຖ້າ stack ເລີ່ມຕົ້ນຢູ່ທີ່ທີ່ຢູ່ຢ່າງແທ້ຈິງ 0x80000000 ແລະ​ຂະ​ຫຍາຍ​ຕົວ​ລົງ​,
ທ່ານສາມາດນໍາໃຊ້ທຸງ -fstack-limit-symbol=__stack_limit ແລະ
-Wl,--defsym,__stack_limit=0x7ffe0000 ເພື່ອບັງຄັບໃຊ້ຈໍາກັດ stack ຂອງ 128KB. ໃຫ້ສັງເກດວ່າ
ອັນນີ້ອາດຈະເຮັດວຽກກັບຕົວເຊື່ອມຕໍ່ GNU ເທົ່ານັ້ນ.

-fsplit-stack
ສ້າງລະຫັດເພື່ອແຍກ stack ອັດຕະໂນມັດກ່ອນທີ່ມັນຈະລົ້ນ. ຜົນໄດ້ຮັບ
ໂປຣແກມມີ stack discontiguous ເຊິ່ງພຽງແຕ່ສາມາດ overflow ໄດ້ຖ້າຫາກວ່າໂຄງການບໍ່ສາມາດທີ່ຈະ
ຈັດສັນຄວາມຊົງຈຳເພີ່ມເຕີມ. ນີ້ແມ່ນເປັນປະໂຫຍດທີ່ສຸດໃນເວລາທີ່ແລ່ນໂຄງການ threaded, ຍ້ອນວ່າມັນ
ແມ່ນບໍ່ຈໍາເປັນທີ່ຈະຄິດໄລ່ຂະຫນາດ stack ທີ່ດີທີ່ຈະນໍາໃຊ້ສໍາລັບແຕ່ລະ thread. ນີ້​ແມ່ນ
ໃນປັດຈຸບັນປະຕິບັດພຽງແຕ່ສໍາລັບ i386 ແລະ x86_64 back ends ແລ່ນ GNU/Linux.

ເມື່ອລະຫັດຖືກລວບລວມດ້ວຍ -fsplit-stack ລະຫັດການໂທລວບລວມໂດຍບໍ່ມີການ -fsplit-stack, ມີ
ອາດຈະບໍ່ມີພື້ນທີ່ stack ຫຼາຍສໍາລັບລະຫັດສຸດທ້າຍທີ່ຈະດໍາເນີນການ. ຖ້າລວບລວມທັງຫມົດ
ລະຫັດ, ລວມທັງລະຫັດຫ້ອງສະຫມຸດ, ກັບ -fsplit-stack ບໍ່ແມ່ນທາງເລືອກ, ຫຼັງຈາກນັ້ນຕົວເຊື່ອມຕໍ່ສາມາດ
ແກ້ໄຂການໂທເຫຼົ່ານີ້ເພື່ອໃຫ້ລະຫັດລວບລວມໂດຍບໍ່ມີການ -fsplit-stack ສະເຫມີມີຂະຫນາດໃຫຍ່
stack. ການສະຫນັບສະຫນູນສໍາລັບການນີ້ແມ່ນປະຕິບັດໃນຕົວເຊື່ອມຕໍ່ຄໍາໃນການປ່ອຍ GNU binutils
ປີ 2.21 ແລະຕໍ່ມາ.

-fleading-underscore
ທາງ​ເລືອກ​ນີ້​ແລະ​ຄູ່​ຮ່ວມ​ງານ​ຂອງ​ຕົນ​, -fno-leading-underscore, ບັງຄັບໃຫ້ປ່ຽນວິທີ C
ສັນຍາລັກແມ່ນສະແດງຢູ່ໃນໄຟລ໌ວັດຖຸ. ການນໍາໃຊ້ຫນຶ່ງແມ່ນເພື່ອຊ່ວຍໃຫ້ການເຊື່ອມຕໍ່ກັບມໍລະດົກ
ລະຫັດປະກອບ.

ຄໍາເຕືອນ: ໄດ້ -fleading-underscore switch ເຮັດໃຫ້ GCC ສ້າງລະຫັດທີ່ບໍ່ແມ່ນ
binary ເຂົ້າກັນໄດ້ກັບລະຫັດທີ່ສ້າງຂຶ້ນໂດຍບໍ່ມີການສະຫຼັບນັ້ນ. ໃຊ້ມັນເພື່ອສອດຄ່ອງກັບ a
ການໂຕ້ຕອບຄູ່ຂອງແອັບພລິເຄຊັນທີ່ບໍ່ແມ່ນຄ່າເລີ່ມຕົ້ນ. ບໍ່ແມ່ນເປົ້າຫມາຍທັງຫມົດສະຫນອງການສະຫນັບສະຫນູນຢ່າງສົມບູນ
ສໍາລັບການປ່ຽນນີ້.

-ftls-model=ຮູບແບບ
ປ່ຽນແປງຮູບແບບການເກັບຮັກສາ thread-local ເພື່ອໃຊ້. ໄດ້ ຮູບແບບ ການໂຕ້ຖຽງຄວນຈະເປັນຫນຶ່ງໃນ
"global-dynamic", "local-dynamic", "initial-exec" ຫຼື "local-exec".

ຄ່າເລີ່ມຕົ້ນໂດຍບໍ່ມີການ -fpic ແມ່ນ "initial-exec"; ກັບ -fpic ຄ່າເລີ່ມຕົ້ນແມ່ນ
"ທົ່ວໂລກ-ເຄື່ອນໄຫວ".

-fvisibility=ຄ່າເລີ່ມຕົ້ນ|ພາຍໃນ|ເຊື່ອງໄວ້|ຖືກປົກປ້ອງ
ກໍານົດຄ່າເລີ່ມຕົ້ນການເບິ່ງເຫັນສັນຍາລັກຮູບພາບ ELF ເປັນທາງເລືອກທີ່ລະບຸໄວ້ --- ສັນຍາລັກທັງຫມົດຈະ
ຈະຖືກໝາຍດ້ວຍອັນນີ້ ເວັ້ນເສຍແຕ່ຈະ overridden ພາຍໃນລະຫັດ. ການນໍາໃຊ້ຄຸນນະສົມບັດນີ້ສາມາດຫຼາຍ
ປັບປຸງການເຊື່ອມໂຍງແລະເວລາໂຫຼດຂອງຫ້ອງສະຫມຸດວັດຖຸທີ່ໃຊ້ຮ່ວມກັນຢ່າງຫຼວງຫຼາຍ, ຜະລິດຫຼາຍ
ລະ​ຫັດ​ທີ່​ເຫມາະ​ສົມ​, ສະ​ຫນອງ​ການ​ສົ່ງ​ອອກ API ທີ່​ໃກ້​ສົມ​ບູນ​ແບບ​ແລະ​ປ້ອງ​ກັນ​ການ​ປະ​ທະ​ກັນ​ສັນ​ຍາ​ລັກ​. ມັນ​ແມ່ນ
ຢ່າງແຂງແຮງ ແນະນໍາໃຫ້ທ່ານໃຊ້ອັນນີ້ໃນວັດຖຸທີ່ໃຊ້ຮ່ວມກັນທີ່ທ່ານແຈກຢາຍ.

ເຖິງວ່າຈະມີນາມສະກຸນ, "ຄ່າເລີ່ມຕົ້ນ" ສະເຫມີຫມາຍຄວາມວ່າສາທາລະນະ; ie, ສາມາດໃຊ້ໄດ້ທີ່ຈະເຊື່ອມຕໍ່
ຕໍ່ຕ້ານຈາກພາຍນອກວັດຖຸທີ່ໃຊ້ຮ່ວມກັນ. "ປ້ອງກັນ" ແລະ "ພາຍໃນ" ແມ່ນບໍ່ມີປະໂຫຍດຫຼາຍ
ໃນ​ການ​ນໍາ​ໃຊ້​ໃນ​ໂລກ​ທີ່​ແທ້​ຈິງ​ສະ​ນັ້ນ​ພຽງ​ແຕ່​ທາງ​ເລືອກ​ທີ່​ໃຊ້​ທົ່ວ​ໄປ​ອື່ນໆ​ທີ່​ຈະ "ເຊື່ອງ​ໄວ້​"​. ໄດ້
ຄ່າເລີ່ມຕົ້ນຖ້າ - ການເບິ່ງເຫັນ ບໍ່ໄດ້ລະບຸໄວ້ແມ່ນ "ຄ່າເລີ່ມຕົ້ນ", ie, ເຮັດໃຫ້ທຸກສັນຍາລັກ
ສາທາລະນະ --- ນີ້ເຮັດໃຫ້ເກີດພຶດຕິກໍາດຽວກັນກັບ GCC ຮຸ່ນກ່ອນຫນ້າ.

ຄໍາອະທິບາຍທີ່ດີກ່ຽວກັບຜົນປະໂຫຍດທີ່ສະເຫນີໂດຍການຮັບປະກັນສັນຍາລັກ ELF ຖືກຕ້ອງ
ການເບິ່ງເຫັນແມ່ນໃຫ້ໂດຍ "ວິທີການຂຽນຫ້ອງສະຫມຸດທີ່ແບ່ງປັນ" ໂດຍ Ulrich Drepper (ເຊິ່ງສາມາດເປັນ.
ພົບຢູ່http://people.redhat.com/~drepper/>)--- ແນວໃດກໍ່ຕາມການແກ້ໄຂທີ່ດີກວ່າໄດ້ເຮັດ
ເປັນໄປໄດ້ໂດຍທາງເລືອກນີ້ເພື່ອຫມາຍສິ່ງທີ່ເຊື່ອງໄວ້ໃນເວລາທີ່ຄ່າເລີ່ມຕົ້ນແມ່ນສາທາລະນະທີ່ຈະເຮັດ
ຄ່າເລີ່ມຕົ້ນຖືກເຊື່ອງໄວ້ ແລະໝາຍສິ່ງທີ່ເປັນສາທາລະນະ. ນີ້ແມ່ນມາດຕະຖານທີ່ມີ DLL ໃນ Windows ແລະ
ກັບ -fvisibility=hidden ແລະ "__attribute__ ((ການເບິ່ງເຫັນ("ຄ່າເລີ່ມຕົ້ນ")))" ແທນ
"__declspec(dllexport)" ທ່ານໄດ້ຮັບ semantics ເກືອບດຽວກັນກັບ syntax ຄືກັນ.
ນີ້ແມ່ນຜົນປະໂຫຍດອັນໃຫຍ່ຫຼວງຕໍ່ຜູ້ທີ່ເຮັດວຽກກັບໂຄງການຂ້າມເວທີ.

ສໍາລັບຜູ້ທີ່ເພີ່ມການສະຫນັບສະຫນູນການເບິ່ງເຫັນກັບລະຫັດທີ່ມີຢູ່, ທ່ານອາດຈະຊອກຫາ #pragma GCC
ການເບິ່ງເຫັນ ຂອງ​ການ​ນໍາ​ໃຊ້​. ນີ້ເຮັດວຽກໂດຍການປິດການປະກາດທີ່ທ່ານຕ້ອງການຕັ້ງ
ການເບິ່ງເຫັນກັບ (ຕົວຢ່າງ) #pragma GCC ການເບິ່ງເຫັນ push(ເຊື່ອງ) ແລະ #pragma GCC
ການເບິ່ງເຫັນ ບໍ່. ຈົ່ງຈື່ໄວ້ວ່າການເບິ່ງເຫັນສັນຍາລັກຄວນຈະຖືກເບິ່ງ as ສ່ວນ of ໄດ້
API ການໂຕ້ຕອບ ສັນຍາ ແລະດັ່ງນັ້ນລະຫັດໃຫມ່ທັງຫມົດຄວນຈະກໍານົດການເບິ່ງເຫັນໃນເວລາທີ່ມັນ
ບໍ່ແມ່ນຄ່າເລີ່ມຕົ້ນ; ie, ການປະກາດພຽງແຕ່ສໍາລັບການນໍາໃຊ້ພາຍໃນ DSO ທ້ອງຖິ່ນຄວນ ສະເຫມີໄປ
ຖືກຫມາຍຢ່າງຊັດເຈນວ່າຖືກເຊື່ອງໄວ້ເພື່ອຫຼີກເວັ້ນການ overhead PLT indirection --- ການເຮັດສິ່ງນີ້.
ອຸດົມສົມບູນຢ່າງຈະແຈ້ງຍັງຊ່ວຍອ່ານແລະເອກະສານດ້ວຍຕົນເອງຂອງລະຫັດ. ໃຫ້ສັງເກດວ່າ
ເນື່ອງ​ຈາກ​ຄວາມ​ຕ້ອງ​ການ​ສະ​ເພາະ ISO C++​, ປະ​ຕິ​ບັດ​ການ​ໃຫມ່​ແລະ​ປະ​ຕິ​ບັດ​ການ​ລົບ​ຕ້ອງ​ໄດ້​
ສະເຫມີເປັນການເບິ່ງເຫັນໃນຕອນຕົ້ນ.

ຈົ່ງຮູ້ວ່າ headers ຈາກພາຍນອກໂຄງການຂອງທ່ານ, ໂດຍສະເພາະ headers ລະບົບແລະ
headers ຈາກຫ້ອງສະຫມຸດອື່ນໆທີ່ທ່ານໃຊ້, ອາດຈະບໍ່ຄາດວ່າຈະຖືກລວບລວມກັບ
ການເບິ່ງເຫັນນອກເໜືອໄປຈາກຄ່າເລີ່ມຕົ້ນ. ເຈົ້າອາດຈະຕ້ອງເວົ້າຢ່າງຈະແຈ້ງ #pragma GCC
ການເບິ່ງເຫັນ push(ຄ່າເລີ່ມຕົ້ນ) ກ່ອນທີ່ຈະລວມເອົາຫົວຂໍ້ດັ່ງກ່າວ.

ພາຍນອກ ການ​ປະ​ກາດ​ບໍ່​ໄດ້​ຮັບ​ຜົນ​ກະ​ທົບ​ໂດຍ​ - ການເບິ່ງເຫັນ, ດັ່ງນັ້ນຫຼາຍລະຫັດສາມາດເປັນ
ລວບລວມກັບ -fvisibility=hidden ໂດຍບໍ່ມີການດັດແປງ. ຢ່າງໃດກໍຕາມ, ນີ້ຫມາຍຄວາມວ່າ
ໂທຫາ ພາຍນອກ ຟັງຊັນທີ່ບໍ່ມີການເບິ່ງເຫັນຢ່າງຊັດເຈນຈະໃຊ້ PLT, ດັ່ງນັ້ນມັນຫຼາຍກວ່າ
ປະສິດທິຜົນການນໍາໃຊ້ __ຄຸນລັກສະນະ ((ການເບິ່ງເຫັນ)) ແລະ / ຫຼື #pragma GCC ການເບິ່ງເຫັນ ເພື່ອບອກ
compiler ທີ່ ພາຍນອກ ການປະກາດຄວນຖືກຖືວ່າຖືກເຊື່ອງໄວ້.

ໃຫ້ສັງເກດວ່າ - ການເບິ່ງເຫັນ ມີຜົນກະທົບ C ++ ຫນ່ວຍງານການເຊື່ອມໂຍງທີ່ບໍ່ຊັດເຈນ. ນີ້ຫມາຍຄວາມວ່າ, ສໍາລັບ
ຕົວຢ່າງ, ຫ້ອງຮຽນຍົກເວັ້ນທີ່ຈະຖືກຖິ້ມລະຫວ່າງ DSOs ຕ້ອງໄດ້ຮັບການຊັດເຈນ
ໝາຍດ້ວຍການເບິ່ງເຫັນໃນຕອນຕົ້ນເພື່ອວ່າ type_info nodes ຈະໄດ້ຮັບການເປັນເອກະພາບລະຫວ່າງ
DSOs.

ພາບລວມຂອງເຕັກນິກເຫຼົ່ານີ້, ຜົນປະໂຫຍດແລະວິທີການນໍາໃຊ້ພວກມັນແມ່ນຢູ່ທີ່
<http://gcc.gnu.org/wiki/Visibility>.

-fstrict-volatile-bitfields
ຕົວເລືອກນີ້ຄວນຈະຖືກໃຊ້ຖ້າເຂົ້າເຖິງຊ່ອງບິດທີ່ປ່ຽນແປງໄດ້ (ຫຼືໂຄງສ້າງອື່ນໆ
ທົ່ງນາ, ເຖິງແມ່ນວ່າຜູ້ລວບລວມຂໍ້ມູນມັກຈະໃຫ້ກຽດປະເພດເຫຼົ່ານັ້ນຢ່າງໃດກໍ່ຕາມ) ຄວນໃຊ້ອັນດຽວ
ການເຂົ້າເຖິງຄວາມກວ້າງຂອງປະເພດພາກສະຫນາມ, ສອດຄ່ອງຕາມທໍາມະຊາດຖ້າເປັນໄປໄດ້.
ຕົວຢ່າງ, ເປົ້າໝາຍທີ່ມີການລົງທະບຽນອຸປະກອນຕໍ່ພ່ວງທີ່ມີແຜນທີ່ໜ່ວຍຄວາມຈຳອາດຈະຕ້ອງການທັງໝົດດັ່ງກ່າວ
ການເຂົ້າເຖິງກວ້າງ 16 ບິດ; ດ້ວຍທຸງນີ້, ຜູ້ໃຊ້ສາມາດປະກາດ bit peripheral ທັງຫມົດ.
ຊ່ອງຂໍ້ມູນເປັນ "unsigned short" (ສົມມຸດວ່າສັ້ນແມ່ນ 16 bits ໃນເປົ້າຫມາຍເຫຼົ່ານີ້) ເພື່ອບັງຄັບ GCC
ການນໍາໃຊ້ການເຂົ້າເຖິງ 16-bit ແທນທີ່ຈະ, ບາງທີ, ການເຂົ້າເຖິງ 32-bit ທີ່ມີປະສິດທິພາບຫຼາຍ.

ຖ້າຕົວເລືອກນີ້ຖືກປິດໃຊ້ງານ, ຄອມພີວເຕີຈະໃຊ້ຄໍາແນະນໍາທີ່ມີປະສິດທິພາບທີ່ສຸດ. ໃນ
ຕົວຢ່າງທີ່ຜ່ານມາ, ນັ້ນອາດຈະເປັນຄໍາແນະນໍາການໂຫຼດ 32-bit, ເຖິງແມ່ນວ່າຈະ
ເຂົ້າເຖິງ bytes ທີ່ບໍ່ມີສ່ວນໃດນຶ່ງຂອງ bit-field, ຫຼື memory-mapped
ລົງທະບຽນທີ່ບໍ່ກ່ຽວຂ້ອງກັບອັນທີ່ກຳລັງຖືກປັບປຸງ.

ຖ້າ​ຫາກ​ວ່າ​ເປົ້າ​ຫມາຍ​ຮຽກ​ຮ້ອງ​ໃຫ້​ມີ​ການ​ສອດ​ຄ່ອງ​ຢ່າງ​ເຂັ້ມ​ງວດ​, ແລະ​ໃຫ້​ກຽດ​ປະ​ເພດ​ພາກ​ສະ​ຫນາມ​ຈະ​ຮຽກ​ຮ້ອງ​ໃຫ້​ມີ​
ລະ​ເມີດ​ການ​ຈັດ​ຕັ້ງ​ນີ້​, ຄໍາ​ເຕືອນ​ແມ່ນ​ອອກ​ມາ​. ຖ້າພາກສະຫນາມມີຄຸນສົມບັດ "packed",
ການເຂົ້າເຖິງແມ່ນເຮັດໂດຍບໍ່ມີການໃຫ້ກຽດປະເພດພາກສະຫນາມ. ຖ້າພາກສະຫນາມບໍ່ມີ
ຄຸນ​ລັກ​ສະ​ນະ "packed​"​, ການ​ເຂົ້າ​ເຖິງ​ແມ່ນ​ເຮັດ​ໃຫ້​ກຽດ​ຂອງ​ປະ​ເພດ​ພາກ​ສະ​ຫນາມ​. ໃນທັງສອງກໍລະນີ, GCC
ສົມມຸດວ່າຜູ້ໃຊ້ຮູ້ບາງສິ່ງບາງຢ່າງກ່ຽວກັບຮາດແວເປົ້າຫມາຍທີ່ມັນບໍ່ຮູ້.

ຄ່າເລີ່ມຕົ້ນຂອງຕົວເລືອກນີ້ຖືກກໍານົດໂດຍການໂຕ້ຕອບຄູ່ຂອງແອັບພລິເຄຊັນສໍາລັບ
ໂຮງງານຜະລິດເປົ້າຫມາຍ.

ENVIRONMENT


ພາກສ່ວນນີ້ອະທິບາຍຕົວແປສະພາບແວດລ້ອມຫຼາຍອັນທີ່ມີຜົນກະທົບຕໍ່ວິທີການເຮັດວຽກຂອງ GCC. ບາງ
ພວກມັນເຮັດວຽກໂດຍການລະບຸໄດເລກະທໍລີຫຼືຄໍານໍາຫນ້າເພື່ອໃຊ້ໃນເວລາທີ່ຊອກຫາປະເພດຕ່າງໆ
ຂອງ​ໄຟລ​໌​. ບາງອັນຖືກນໍາໃຊ້ເພື່ອລະບຸລັກສະນະອື່ນໆຂອງສະພາບແວດລ້ອມການລວບລວມ.

ໃຫ້ສັງເກດວ່າທ່ານຍັງສາມາດກໍານົດສະຖານທີ່ຄົ້ນຫາໂດຍໃຊ້ທາງເລືອກເຊັ່ນ: -B, -I ແລະ -L.
ສິ່ງເຫຼົ່ານີ້ມີຄວາມສຳຄັນກວ່າສະຖານທີ່ທີ່ລະບຸໄວ້ໂດຍໃຊ້ຕົວແປສະພາບແວດລ້ອມ, ເຊິ່ງໃນທາງກັບກັນ
ມີຄວາມສຳຄັນກວ່າສິ່ງທີ່ກຳນົດໄວ້ໂດຍການຕັ້ງຄ່າຂອງ GCC.

ພາສາ
LC_CTYPE
LC_MESSAGES
LC_ALL
ຕົວແປສະພາບແວດລ້ອມເຫຼົ່ານີ້ຄວບຄຸມວິທີທີ່ GCC ໃຊ້ຂໍ້ມູນທ້ອງຖິ່ນ
ເຊິ່ງອະນຸຍາດໃຫ້ GCC ເຮັດວຽກຮ່ວມກັບສົນທິສັນຍາແຫ່ງຊາດທີ່ແຕກຕ່າງກັນ. GCC ກວດກາສະຖານທີ່
ປະເພດ LC_CTYPE ແລະ LC_MESSAGES ຖ້າມັນຖືກຕັ້ງຄ່າໃຫ້ເຮັດແນວນັ້ນ. ທ້ອງຖິ່ນເຫຼົ່ານີ້
ໝວດໝູ່ສາມາດຖືກຕັ້ງເປັນຄ່າໃດໜຶ່ງທີ່ຮອງຮັບໂດຍການຕິດຕັ້ງຂອງເຈົ້າ. ຄ່າປົກກະຕິແມ່ນ
en_GBUTF-8 ສໍາລັບພາສາອັງກິດໃນສະຫະລາຊະອານາຈັກເຂົ້າລະຫັດໃນ UTF-8.

ໄດ້ LC_CTYPE ຕົວແປສະພາບແວດລ້ອມກໍານົດການຈັດປະເພດຕົວອັກສອນ. GCC ໃຊ້ມັນ
ກໍານົດຂອບເຂດຕົວອັກສອນໃນສະຕຣິງ; ນີ້ແມ່ນຈໍາເປັນສໍາລັບບາງ multibyte
ການເຂົ້າລະຫັດທີ່ມີຄໍາເວົ້າ ແລະຕົວອັກສອນທີ່ຫລົບຫນີທີ່ຈະຖືກຕີຄວາມໝາຍໃນທາງອື່ນ
ເປັນປາຍສາຍຫຼືຫນີ.

ໄດ້ LC_MESSAGES ຕົວແປສະພາບແວດລ້ອມກໍານົດພາສາທີ່ຈະໃຊ້ໃນການວິນິດໄສ
ຂໍ້ຄວາມ.

ຖ້າ LC_ALL ຕົວແປສະພາບແວດລ້ອມໄດ້ຖືກກໍານົດ, ມັນ overrides ມູນຄ່າຂອງ LC_CTYPE ແລະ
LC_MESSAGES; ຖ້າບໍ່ດັ່ງນັ້ນ, LC_CTYPE ແລະ LC_MESSAGES ຄ່າເລີ່ມຕົ້ນຂອງມູນຄ່າຂອງ ພາສາ
ສະພາບແວດລ້ອມປ່ຽນແປງ. ຖ້າບໍ່ມີຕົວແປເຫຼົ່ານີ້ຖືກຕັ້ງ, GCC ຈະເລີ່ມເປັນແບບດັ້ງເດີມ
C ພຶດຕິກໍາພາສາອັງກິດ.

TMPDIR
If TMPDIR ຖືກກໍານົດໄວ້, ມັນກໍານົດໄດເລກະທໍລີທີ່ຈະໃຊ້ສໍາລັບໄຟລ໌ຊົ່ວຄາວ. GCC ໃຊ້
ໄຟລ​໌​ຊົ່ວ​ຄາວ​ເພື່ອ​ຖື​ເອົາ​ຜົນ​ຜະ​ລິດ​ຂອງ​ຂັ້ນ​ຕອນ​ຂອງ​ການ​ຮວບ​ຮວມ​ທີ່​ຈະ​ນໍາ​ໃຊ້​ເປັນ​
input ກັບຂັ້ນຕອນຕໍ່ໄປ: ຕົວຢ່າງ, ຜົນຜະລິດຂອງ preprocessor, ຊຶ່ງເປັນ
ການປ້ອນຂໍ້ມູນໃສ່ຄອມພີວເຕີຢ່າງຖືກຕ້ອງ.

GCC_COMPARE_DEBUG
ການຕັ້ງຄ່າ GCC_COMPARE_DEBUG ແມ່ນເກືອບເທົ່າກັບການຜ່ານ -fcompare-debug ການ
ໄດເວີ compiler. ເບິ່ງເອກະສານຂອງທາງເລືອກນີ້ສໍາລັບລາຍລະອຽດເພີ່ມເຕີມ.

GCC_EXEC_PREFIX
If GCC_EXEC_PREFIX ຖືກກໍານົດ, ມັນກໍານົດຄໍານໍາຫນ້າເພື່ອນໍາໃຊ້ໃນຊື່ຂອງ
ໂຄງ​ການ​ຍ່ອຍ​ປະ​ຕິ​ບັດ​ໂດຍ compiler ໄດ້​. ບໍ່ມີການເພີ່ມການທັບຊ້ອນເມື່ອຄຳນຳໜ້ານີ້ຖືກລວມເຂົ້າກັນ
ດ້ວຍຊື່ຂອງໂປຣແກມຍ່ອຍ, ແຕ່ເຈົ້າສາມາດລະບຸຄຳນຳໜ້າທີ່ລົງທ້າຍດ້ວຍ slash if
ເຈົ້າ​ປາດ​ຖະ​ຫ​ນາ.

If GCC_EXEC_PREFIX ບໍ່ໄດ້ຕັ້ງ, GCC ຈະພະຍາຍາມຊອກຫາຄໍານໍາຫນ້າທີ່ເຫມາະສົມກັບ
ໃຊ້ໂດຍອີງໃສ່ຊື່ເສັ້ນທາງທີ່ມັນຖືກເອີ້ນດ້ວຍ.

ຖ້າ GCC ບໍ່ສາມາດຊອກຫາໂຄງການຍ່ອຍໂດຍໃຊ້ຄໍານໍາຫນ້າທີ່ລະບຸໄວ້, ມັນພະຍາຍາມຊອກຫາຢູ່ໃນ
ສະຖານທີ່ປົກກະຕິສໍາລັບໂຄງການຍ່ອຍ.

ຄ່າເລີ່ມຕົ້ນຂອງ GCC_EXEC_PREFIX is ຄຳນຳໜ້າ/lib/gcc/ ບ່ອນທີ່ ຄຳ ນຳ ໜ້າ ແມ່ນຄໍານໍາຫນ້າ
compiler ຕິດຕັ້ງ. ໃນຫຼາຍໆກໍລະນີ ຄຳ ນຳ ໜ້າ ແມ່ນຄ່າຂອງ "prefix" ເມື່ອທ່ານແລ່ນ
configure script

ຄຳນຳໜ້າອື່ນໆທີ່ລະບຸດ້ວຍ -B ສຳຄັນກວ່າຄຳນຳໜ້ານີ້.

ຄໍານໍາຫນ້ານີ້ຍັງຖືກນໍາໃຊ້ສໍາລັບການຊອກຫາໄຟລ໌ເຊັ່ນ: crt0.o ທີ່ຖືກນໍາໃຊ້ສໍາລັບການເຊື່ອມຕໍ່.

ນອກຈາກນັ້ນ, ຄໍານໍາຫນ້າແມ່ນໃຊ້ໃນທາງທີ່ຜິດປົກກະຕິໃນການຊອກຫາໄດເລກະທໍລີເພື່ອຄົ້ນຫາ
ສໍາລັບໄຟລ໌ header. ສໍາລັບແຕ່ລະໄດເລກະທໍລີມາດຕະຖານທີ່ຊື່ປົກກະຕິເລີ່ມຕົ້ນ
ກັບ /usr/local/lib/gcc (ທີ່ຊັດເຈນກວ່າ, ດ້ວຍມູນຄ່າຂອງ GCC_INCLUDE_DIR), GCC ພະຍາຍາມ
ການປ່ຽນແທນທີ່ເລີ່ມຕົ້ນດ້ວຍຄໍານໍາຫນ້າທີ່ກໍານົດໄວ້ເພື່ອຜະລິດໄດເລກະທໍລີທາງເລືອກ
ຊື່. ດັ່ງນັ້ນ, ກັບ -Bfoo/, GCC ຈະຄົ້ນຫາ foo/bar ບ່ອນທີ່ມັນມັກຈະຊອກຫາ
/usr/local/lib/bar. ລາຍຊື່ສະລັບເຫຼົ່ານີ້ຖືກຄົ້ນຫາກ່ອນ; ມາດຕະຖານ
ໄດເລກະທໍລີມາຕໍ່ໄປ. ຖ້າໄດເລກະທໍລີມາດຕະຖານເລີ່ມຕົ້ນດ້ວຍການຕັ້ງຄ່າ ຄຳ ນຳ ໜ້າ ຫຼັງຈາກນັ້ນ
ມູນຄ່າຂອງ ຄຳ ນຳ ໜ້າ ຖືກແທນທີ່ດ້ວຍ GCC_EXEC_PREFIX ເມື່ອຊອກຫາໄຟລ໌ຫົວ.

COMPILER_PATH
ມູນຄ່າຂອງ COMPILER_PATH ແມ່ນບັນຊີລາຍຊື່ທີ່ແຍກອອກຈາກຈໍ້າສອງເມັດຂອງໄດເລກະທໍລີ, ຄືກັນກັບ PATH.
GCC ພະຍາຍາມໄດເລກະທໍລີທີ່ລະບຸໄວ້ໃນເວລາຄົ້ນຫາໂຄງການຍ່ອຍ, ຖ້າມັນເຮັດບໍ່ໄດ້
ຊອກຫາໂຄງການຍ່ອຍໂດຍໃຊ້ GCC_EXEC_PREFIX.

LIBRARY_PATH
ມູນຄ່າຂອງ LIBRARY_PATH ແມ່ນບັນຊີລາຍຊື່ທີ່ແຍກອອກຈາກຈໍ້າສອງເມັດຂອງໄດເລກະທໍລີ, ຄືກັນກັບ PATH.
ເມື່ອຖືກຕັ້ງຄ່າເປັນ compiler ພື້ນເມືອງ, GCC ພະຍາຍາມໄດເລກະທໍລີດັ່ງນັ້ນຈຶ່ງກໍານົດເວລາ
ຄົ້ນຫາໄຟລ໌ເຊື່ອມຕໍ່ພິເສດ, ຖ້າມັນບໍ່ສາມາດຊອກຫາພວກມັນໄດ້ໂດຍໃຊ້ GCC_EXEC_PREFIX.
ການເຊື່ອມໂຍງໂດຍໃຊ້ GCC ຍັງໃຊ້ໄດເລກະທໍລີເຫຼົ່ານີ້ໃນເວລາທີ່ຊອກຫາຫ້ອງສະຫມຸດທໍາມະດາ
ສໍາ​ລັບ -l ທາງເລືອກ (ແຕ່ໄດເລກະທໍລີທີ່ລະບຸດ້ວຍ -L ມາກ່ອນ).

ພາສາ
ຕົວແປນີ້ຖືກນໍາໃຊ້ເພື່ອສົ່ງຂໍ້ມູນທ້ອງຖິ່ນໄປຫາຜູ້ລວບລວມຂໍ້ມູນ. ວິທີການຫນຶ່ງທີ່
ຂໍ້ມູນນີ້ຖືກນໍາໃຊ້ເພື່ອກໍານົດຕົວອັກສອນທີ່ກໍານົດໄວ້ເພື່ອນໍາໃຊ້ໃນເວລາທີ່ມີລັກສະນະ
ຕົວໜັງສື, ຕົວໜັງສືສະຕຣິງ ແລະຄຳຄິດເຫັນຖືກວິເຄາະໃນ C ແລະ C++. ໃນເວລາທີ່ compiler ແມ່ນ
ຕັ້ງຄ່າເພື່ອອະນຸຍາດໃຫ້ຕົວອັກສອນ multibyte, ຄ່າຕໍ່ໄປນີ້ສໍາລັບ ພາສາ ມີ
ຮັບຮູ້:

C-JIS
ຮັບຮູ້ຕົວອັກສອນ JIS.

C-SJIS
ຮັບຮູ້ຕົວອັກສອນ SJIS.

C-EUCJP
ຮັບຮູ້ຕົວອັກສອນ EUCJP.

If ພາສາ ບໍ່ໄດ້ຖືກກໍານົດ, ຫຼືຖ້າມັນມີມູນຄ່າອື່ນ, ຫຼັງຈາກນັ້ນ compiler ຈະໃຊ້
mblen ແລະ mbtowc ຕາມທີ່ກໍານົດໂດຍສະຖານທີ່ເລີ່ມຕົ້ນເພື່ອຮັບຮູ້ແລະແປ multibyte
ລັກສະນະ.

ບາງຕົວແປສະພາບແວດລ້ອມເພີ່ມເຕີມມີຜົນກະທົບຕໍ່ພຶດຕິກໍາຂອງຕົວປະມວນຜົນກ່ອນ.

CPATH
C_INCLUDE_PATH
CPLUS_INCLUDE_PATH
OBJC_INCLUDE_PATH
ຄ່າຂອງແຕ່ລະຕົວແປແມ່ນບັນຊີລາຍຊື່ຂອງໄດເລກະທໍລີທີ່ແຍກອອກໂດຍລັກສະນະພິເສດ, ຫຼາຍ
ຄື PATH, ໃນທີ່ຈະຊອກຫາໄຟລ໌ header. ລັກ​ສະ​ນະ​ພິ​ເສດ​,
"PATH_SEPARATOR", ແມ່ນຂຶ້ນກັບເປົ້າໝາຍ ແລະກຳນົດໃນເວລາສ້າງ GCC. ສໍາລັບ Microsoft
ເປົ້າຫມາຍທີ່ອີງໃສ່ Windows ມັນເປັນ semicolon, ແລະສໍາລັບເກືອບທັງຫມົດເປົ້າຫມາຍອື່ນໆມັນແມ່ນ a
ຈໍ້າສອງເມັດ.

CPATH ລະບຸລາຍຊື່ຂອງໄດເລກະທໍລີທີ່ຈະຄົ້ນຫາຄືກັບທີ່ລະບຸໄວ້ -I, ແຕ່
ຫຼັງ​ຈາກ​ເສັ້ນ​ທາງ​ໃດ​ຫນຶ່ງ​ໃຫ້​ກັບ​ -I ທາງເລືອກໃນແຖວຄໍາສັ່ງ. ສະພາບແວດລ້ອມນີ້ປ່ຽນແປງໄດ້
ຖືກໃຊ້ໂດຍບໍ່ຄໍານຶງເຖິງວ່າພາສາໃດຈະຖືກປຸງແຕ່ງກ່ອນ.

ຕົວແປສະພາບແວດລ້ອມທີ່ຍັງເຫຼືອໃຊ້ພຽງແຕ່ໃນເວລາທີ່ preprocessing ໂດຍສະເພາະ
ພາ​ສາ​ສະ​ແດງ​ໃຫ້​ເຫັນ​. ແຕ່ລະຄົນກໍານົດບັນຊີລາຍຊື່ຂອງໄດເລກະທໍລີທີ່ຈະຄົ້ນຫາເປັນຖ້າຫາກວ່າ
ລະບຸໄວ້ກັບ - ລະບົບ, ແຕ່ ຫຼັງ ຈາກ ເສັ້ນ ທາງ ທີ່ ໄດ້ ຮັບ ກັບ - ລະບົບ ທາງ​ເລືອກ​ໃນ​ການ​
ບັນທັດຄໍາສັ່ງ.

ໃນຕົວແປທັງຫມົດເຫຼົ່ານີ້, ອົງປະກອບທີ່ຫວ່າງເປົ່າຈະສັ່ງໃຫ້ compiler ຄົ້ນຫາປັດຈຸບັນຂອງມັນ
ໄດເລກະທໍລີເຮັດວຽກ. ອົງປະກອບຫວ່າງເປົ່າສາມາດປາກົດຢູ່ໃນຕອນຕົ້ນ ຫຼືຈຸດສິ້ນສຸດຂອງເສັ້ນທາງ. ສໍາລັບ
ຕົວຢ່າງ, ຖ້າມູນຄ່າຂອງ CPATH ແມ່ນ ":/special/include", ທີ່ມີຜົນກະທົບດຽວກັນກັບ
- ນ. -I / ພິເສດ / ລວມ.

DEPENDENCIES_OUTPUT
ຖ້າຕົວແປນີ້ຖືກຕັ້ງ, ມູນຄ່າຂອງມັນກໍານົດວິທີການສົ່ງອອກການເພິ່ງພາອາໄສສໍາລັບ Make based
ຢູ່ໃນໄຟລ໌ header ທີ່ບໍ່ແມ່ນລະບົບທີ່ປະມວນຜົນໂດຍ compiler. ໄຟລ໌ສ່ວນຫົວຂອງລະບົບແມ່ນ
ຖືກລະເລີຍໃນຜົນຜະລິດການເພິ່ງພາອາໄສ.

ມູນຄ່າຂອງ DEPENDENCIES_OUTPUT ສາມາດເປັນພຽງແຕ່ຊື່ໄຟລ໌, ໃນກໍລະນີນີ້ກົດລະບຽບ Make
ຖືກຂຽນໃສ່ໄຟລ໌ນັ້ນ, ຄາດເດົາຊື່ເປົ້າຫມາຍຈາກຊື່ໄຟລ໌ແຫຼ່ງ. ຫຼື
ຄ່າສາມາດມີແບບຟອມ ເອກະສານ ເປົ້າ​ຫມາຍ, ໃນກໍລະນີກົດລະບຽບແມ່ນຂຽນເພື່ອຍື່ນ ເອກະສານ
ການນໍາໃຊ້ ເປົ້າ​ຫມາຍ ເປັນ​ຊື່​ເປົ້າ​ຫມາຍ​.

ໃນຄໍາສັບຕ່າງໆອື່ນໆ, ຕົວແປສະພາບແວດລ້ອມນີ້ແມ່ນທຽບເທົ່າກັບການສົມທົບທາງເລືອກ ເອັມ
ແລະ -MF, ມີທາງເລືອກ -MT ສະຫຼັບຄືກັນ.

SUNPRO_DEPENDENCIES
ຕົວແປນີ້ແມ່ນຄືກັນກັບ DEPENDENCIES_OUTPUT (ເບິ່ງຂ້າງເທິງ), ຍົກເວັ້ນລະບົບນັ້ນ
ໄຟລ໌ header ບໍ່ໄດ້ຖືກລະເລີຍ, ສະນັ້ນມັນຫມາຍຄວາມວ່າ -M ແທນ​ທີ່​ຈະ ເອັມທີ່ຢູ່ ຢ່າງໃດກໍ່ຕາມ, ໄດ້
ການເພິ່ງພາອາໄສໄຟລ໌ປ້ອນຂໍ້ມູນຕົ້ນຕໍແມ່ນຖືກລະເວັ້ນ.

ໃຊ້ g++-4.7 ອອນລາຍໂດຍໃຊ້ບໍລິການ onworks.net



ລ່າສຸດ Linux ແລະ Windows ໂຄງການອອນໄລນ໌