ພາສາອັງກິດພາສາຝຣັ່ງແອສປາໂຍນ

OnWorks favicon

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

ເປີດໃຊ້ g++ ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີຜ່ານ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator

ນີ້ແມ່ນຄໍາສັ່ງ g ++ ທີ່ສາມາດດໍາເນີນການໄດ້ໃນ 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ເຕືອນ... ] [-Wpedantic]
[-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 is -fno-foo. ເອກະສານຄູ່ມືນີ້ມີພຽງແຕ່ຫນຶ່ງໃນເຫຼົ່ານີ້
ສອງຮູບແບບ, ອັນໃດບໍ່ແມ່ນຄ່າເລີ່ມຕົ້ນ.

OPTIONS


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

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

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

C ++ ພາສາ ທາງເລືອກໃນການ
-fabi-version=n -fno-access-control -fcheck-ໃໝ່ -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 -fsized-deallocation -fstats
-ftemplate-backtrace-limit=n -ftemplate-depth=n -fno-threadsafe-statics
-fuse-cxa-atexit -fno-ອ່ອນແອ -nostdinc++ -fvisibility-inlines-hidden
-fvtable-verify=[std|ເບື້ອງຕົ້ນ|none] -fvtv-ນັບ -fvtv-debug -fvisibility-ms-compat
-fext-ຕົວເລກ-ຕົວໜັງສື -Wabi=n -wabi-tag -Wconversion-null -Wctor-dtor-ຄວາມເປັນສ່ວນຕົວ
-Wdelete-ບໍ່ແມ່ນ virtual-dtor -Wliteral-suffix - ການ​ຂັດ​ຂວາງ​ - ຍົກເວັ້ນ -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 -fno-local-ivars
-fivar-visibility=[ສາທາລະນະ|ປ້ອງກັນ|ສ່ວນຕົວ|ຊຸດ] -freplace-objc-classes
-fzero-link -gen-decls -Wassign-intercept -Wno-protocol - ຜູ້​ເລືອກ​
-Wstrict-select-match -Wunddeclared-ເລືອກ

ພາສາ ເອກະລາດ ທາງເລືອກໃນການ
-fmessage-length=n -fdiagnostics-show-location=[ຄັ້ງຫນຶ່ງ|ທຸກເສັ້ນ]
-fdiagnostics-color=[ອັດຕະໂນມັດ|ບໍ່ເຄີຍ|ສະເຫມີໄປ] -fno-diagnostics-show-option
-fno-diagnostics-show-caret

ການ​ເຕືອນ​ໄພ ທາງເລືອກໃນການ
-fsyntax ເທົ່ານັ້ນ -fmax-errors=n -Wpedantic -pedantic ຜິດ​ພາດ​ -w -Wextra - ຝາ
-waddress -Waggregate-ກັບຄືນ -Waggressive-loop-optimizations - Warray-bounds
-Warray-bounds=n -Wbool-ປຽບທຽບ - ຄຸນ​ລັກ​ສະ​ນະ Wno​ -Wno-builtin-macro-redefined
-Wc90-c99-compat -Wc99-c11-compat -Wc++-compat -Wc++11-compat -Wc++14-compat
-Wcast-align -Wcast-qual -Wchar-subscripts - Wclobbered - ຄໍາເຫັນ
- ສະ​ຫນັບ​ສະ​ຫນູນ​ຕາມ​ເງື່ອນ​ໄຂ​ - ການ​ປ່ຽນ​ແປງ​ -Wcoverage-mismatch -Wdate-time
-Wdelete-ບໍ່ສົມບູນ -Wno-cpp -Wno-deprecated -Wno-deprecated-ປະກາດ
-Wno-designated-init -Wdisabled-optimization -Wno-discarded-qualifiers
-Wno-discarded-array-qualifiers -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 -Wincompatible-pointer-types - Wimplicit
-Wimplicit-function-ປະກາດ -Wimplicit-int - ວິນ​ຍານ​ຕົນ​ເອງ​ - Winline
-Wno-int-ແປງ -Wno-int-to-pointer-cast -Wno-invalid-offsetof -Winvalid-pch
-Wlarger-than=len -Wunsafe-loop-optimizations -Wlogical-op -Wlogical-not-partheses
- ຍາວ - ຍາວ - ຜູ້ຍິງ -Wmaybe-unitialized -Wmemset-transposed-args -Wmissing-braces
-Wmissing-field-initializers -Wmissing-include-dirs -Wno-multichar -Wnonnull
-Wnormalized=[none|id|nfc|nfkc]
-Wodr -Wno-ລົ້ນ -Wopenmp-simd -Woverlength-strings - ຫໍ່
-Wpacked-bitfield-compat - ແຜ່ນແພ -Wparentheses -Wpedantic-ms-format
-Wno-pedantic-ms-format -Wpointer-arith -Wno-pointer-to-int-cast -Wredundant-decls
-Wno-return-local-addr - ປະ​ເພດ Wreturn​ - ລໍາດັບຈຸດ - ເງົາ -Wno-shadow-ivar
-Wshift-ນັບ-ລົບ -Wshift-count-overflow -Wsign-ປຽບທຽບ -Wsign ການ​ປ່ຽນ​ແປງ​
- ການ​ປ່ຽນ​ແປງ Wfloat​ -Wsizeof-pointer-memaccess -Wsizeof-array-argument
-Wstack-protector -Wstack-usage=len - ເປັນການລ້າສຸດ -Wstrict-aliasing=n
-Wstrict-ລົ້ນ -Wstrict-overflow=n -Wsuggest-attribute=[ບໍລິສຸດ|const|noreturn|ຮູບແບບ]
-Wsuggest-final-types -Wsuggest-final-methods -Wsuggest-override
-Wmissing-format-attribute - ສະຫວິດ -Wswitch-default -Wwwitch-enum -Wswitch-bool
-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 -Wuseless-cast -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 -fsanitize=ແບບ -fsanitize-ຟື້ນຕົວ
-fsanitize-recover=ແບບ -fasan-shadow-offset=ຈໍານວນ
-fsanitize-undefined-trap-on-error -fcheck-pointer-bounds -fchkp-check-incomplete-type
-fchkp-first-field-has-own-bounds -fchkp-ແຄບ-ຂອບເຂດ
-fchkp-narrow-to-innermost-array -fchkp-optimize -fchkp-use-fast-string-functions
-fchkp-use-nochk-string-functions -fchkp-use-static-bounds
-fchkp-use-static-const-bounds -fchkp-treat-zero-dynamic-size-as-infinite
-fchkp-check-read -fchkp-check-read -fchkp-check-write -fchkp-store-bounds
-fchkp-instrument-calls -fchkp-instrument-marked-only -fchkp-use-wrappers
-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-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-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-vtable-verify -fdump-tree-vrp[-n] -fdump-tree-storeccp[-n]
-fdump-final-insns=ເອກະສານ -fcompare-debug[=ເລືອກ] -fcompare-debug-ວິນາທີ
-feliminate-dwarf2-dups -fno-eliminate-unused-debug-types
-feliminate-unused-debug-ສັນຍາລັກ -femit-class-debug-ສະເໝີ -fenable-ປະເພດ-ຜ່ານ
-fenable-ປະເພດ-ຜ່ານ=ບັນຊີລາຍຊື່ໄລຍະ -fdebug-types-section -fmem-report-wpa -fmem ບົດລາຍງານ
-fpre-ipa-mem-ລາຍງານ -fpost-ipa-mem-report -fprofile-arcs -fopt-info
- fopt-ຂໍ້​ມູນ-ທາງເລືອກໃນການ[=ເອກະສານ] -frandom-seed=ຈໍານວນ -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+ -gz[=ປະເພດ] -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 ເວລາ[=ເອກະສານ]

ທີ່ດີທີ່ສຸດ ທາງເລືອກໃນການ
-faggressive-loop-optimizations -falign-functions[=n] -falign-jumps[=n]
-falign-labels[=n] -falign-loops[=n] -fassociative-ຄະນິດສາດ -fauto-profile
-fauto-profile[=ເສັ້ນທາງ] -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 -fdevirtualize-speculatively
-fdevirtualize-at-ltrans -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
-fhoist-adjacent-loads -fif ການ​ປ່ຽນ​ແປງ​ -fif ການ​ປ່ຽນ​ແປງ 2​ -findirect-inlining
-finline-functions -finline-functions-called-one ດຽວ -finline-limit=n
-finline-small-functions -fipa-cp -fipa-cp-clone -fipa-cp-alignment -fipa-pta
-fipa-profile -fipa-pure-const -fipa ອ້າງ​ອີງ​ -fipa-icf -fira-algorithm=ຂັ້ນຕອນວິທີ
-fira-region=ພູມິພາກ -fira-hoist-pressure -fira-loop-pressure -fno-ira-share-save-slots
-fno-ira-share-spill-slots -fira-verbose=n -fisolate-erroneous-paths-dereference
-fisolate-erroneous-paths-attribute -fivopts -fkeep-inline-ຟັງຊັນ
-fkeep-static-consts -flive-range-shrinkage -floop-block -floop-interchange
-floop-strip-mine -floop-unroll-and- jam -floop-nest-optimize -floop-parallelize-ທັງໝົດ
-flra-remat -flto -flto-compression-level -flto-partition=ພຶຊະຄະນິດ flto-ບົດລາຍງານ
-flto-report-wpa -fmerge-ທັງໝົດ-ຄົງທີ່ -fmerge-ຄົງທີ່ -fmodulo-sched
-fmodulo-sched-allow-regmoves -fmove-loop-invariants -fno-branch-count-reg
-fno-defer-pop -fno-function-cse -fno-guess-branch-probability -fno-inline
-fno-math-errno -fno-peephole -fno-peephole2 -fno-sched-interblock -fno-sched-spec
-fno-ເຊັນຊື່-ສູນ -fno-toplevel-reorder -fno-traping-ຄະນິດສາດ
-fno-zero-initialized-in-bss -fomit-frame-pointer -foptimize-sibling-calls
-fpartial-inlining -fpeel-loops -fpredictive-commoning -fprefetch-loop-arrays
-fprofile-report -fprofile-ການ​ແກ້​ໄຂ​ -fprofile-dir=ເສັ້ນທາງ -fprofile-generate
-fprofile-generate=ເສັ້ນທາງ -fprofile-ໃຊ້ -fprofile-use=ເສັ້ນທາງ -fprofile-ຄ່າ
-fprofile-reorder-functions -freciprocal-ຄະນິດສາດ ຟຣີ -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-fusion -fschedule-insns -fschedule-insns2 -fsection-anchors
-fselective-ການ​ກໍາ​ນົດ​ເວ​ລາ​ -fselective-ກຳນົດ​ເວລາ2 -fsel-sched-pipelining
-fsel-sched-pipelining-outer-loops -fsemantic-interposition -fshrink-wrap
-fsignaling-nans -fsingle-precision-constant -fsplit-ivs-in-unroller
-fsplit-wide-types -fssa-phiopt -stack-protector -fstack-protector-ທັງໝົດ
-fstack-protector-strong -fstack-protector-explicit -fstdarg-opt -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-loop-vectorize
-ftree-parallelize-loops=n -ftre-pre -ftree-partial-pre -ftree-pta -ftree-reassoc
- ອ່າງລ້າງມື -ftree-slsr -ftree-sra -ftre-switch-ແປງ -ftree-tail-merge
- ຫ້າ​ປີ​ -ftree-vectorize -ftree-vrp -funit-at-a-time -funroll-all-loops
-funroll-loops -funsafe-loop-optimizations -funsafe-math-optimizations
-funswitch-loops -fipa-ra -fvariable-expansion-in-unroller -fvect-cost-model -fvpt
-fweb - ໂຄງ​ການ​ທັງ​ຫມົດ​ -fwpa -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 ທາງເລືອກ -no-integrated-cpp

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

ຜູ້ເຊື່ອມໂຍງ ທາງເລືອກໃນການ
object-file-name -fuse-ld=linker -lຫ້ອງສະຫມຸດ -nostartfiles -nodefaultlibs -nostdlib
-pie -rdynamic -s -static -static-libgcc -static-libstdc++ -static-libasan
-static-libtsan -static-liblsan -static-libubsan -static-libmpx -static-libmpxwrappers
- ແບ່ງ​ປັນ​ -shared-libgcc - ສັນ​ຍາ​ລັກ​ -T script -Wl,ທາງເລືອກ -Xlinker ທາງເລືອກ -u ສັນຍາລັກ -z
ຄໍາ

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

ເຄື່ອງ ເພິ່ງພາອາໄສ ທາງເລືອກໃນການ
AAArch64 ທາງເລືອກໃນການ -mabi=ຊື່ -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=ແບບດັ້ງເດີມ
-mfix-cortex-a53-835769 -mno-fix-cortex-a53-835769 -mfix-cortex-a53-843419
-mno-fix-cortex-a53-843419 - ມີນາ=ຊື່ -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

ARC ທາງເລືອກໃນການ -mbarrel-shifter -mcpu=cpu -mA6 -mARC600 -mA7 -mARC700 -mdpfp
-mdpfp-ກະທັດຮັດ -mdpfp-ໄວ -mno-dpfp-lrsr - ເມ -mno-mpy - mmul32x16 -mmul64 -mnorm
-mspfp -mspfp-ກະທັດຮັດ -mspfp-ໄວ -msimd -msoft-float -mswap -mcrc -mdsp-packa -mdvbf
- mlock -mmac-d16 -mmac-24 -mrtsc -mswpe - ໂທ​ລະ​ສັບ -mxy - misize -mannotate-align
-marclinux -marclinux_prof -mepilogue-cfi -mlong-ໂທ -ໂທປານກາງ -msdata
-mucb-mcount -mvolatile-cache -malign-ໂທ -mauto-modify-reg -mbbit-peephole -mno-brcc
-mcase-vector-pcrel -mcompact-casesi -mno-cond-exec -mearly-cbranchsi -mexpand-adddi
-mindexed-loads -mlra -mlra-priority-none -mlra-priority-compact mlra ບູລິມະສິດ-
ບໍ່ກະທັດຮັດ -mno-millicode - ລະ​ຫັດ​ປະ​ສົມ​ -mq-ຊັ້ນ -mRcq -mRcw -msize-level=ລະດັບ
-mtune=cpu -mmultcost=num -munalign-prob-threshold=ການຄາດຄະເນ

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
-mfloat-abi=ຊື່ -mfp16-format=ຊື່ -mthumb-interwork -mno-thumb-interwork -mcpu=ຊື່
- ມີນາ=ຊື່ -mfpu=ຊື່ -mtune=ຊື່ -mprint-tune-info -mstructure-size-boundary=n
-mabort-on-norturn -mlong-ໂທ -mno-long-calls -msingle-pic-base
-mno-single-pic-base -mpic ມັກສະມາຊິກ =reg -mnop-fun-dllimport -mpoke-function-name
- ໂປ້ມື - ມາມ -mtpcs-frame -mtpcs-ໃບ-ກອບ -mcaller-super-interworking
-mcallee-super-interworking -mtp=ຊື່ -mtls-ພາສາ =ພາສາ -mword ການ​ຍົກ​ຍ້າຍ​
-mfix-cortex-m3-ldrd -munaligned-ເຂົ້າ​ເຖິງ​ -mneon-for-64bits -mslow-flash-data
-masm-syntax-unified - ຈໍາ​ກັດ​ມັນ​

APR ທາງເລືອກໃນການ -mmcu=mcu -maccumulate-args -mbranch-cost=ຄ່າໃຊ້ຈ່າຍ -mcall-prologues - mint8
-mn_flash=ຂະຫນາດ -mno-interrupts -mrelax -mrmw -mstrict-X -mtiny-stack -nodevicelib
-Waddr-space-ແປງ

ດຳ ທາງເລືອກໃນການ -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 -ມີ່ -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=ທີ່ໃຊ້ເວລາ

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 -ນາງ​ສາວ - ນ -mexr -mno-exr - mint32 -malign-300

HPPA ທາງເລືອກໃນການ - ມີນາ=ປະເພດສະຖາປັດຕະຍະກໍາ -mdisable-fpregs -mdisable-indexing
-mfast-indirect-calls - ມກ -mgnu-ld -mhp-ld -mfixed-range=ໄລຍະລົງທະບຽນ
-mjump-in-delay -mlinker-opt -mlong-ໂທ -mlong-load-store -mno-disable-fpregs
-mno-disable-indexing -mno-fast-indirect-calls -mno-gas -mno-jump-in-delay
-mno-long-load-store -mno-portable-runtime -mno-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
- ກະທູ້

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

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
-mbig-endian -mlittle-endian -mxl-ສັ່ງຄືນໃໝ່ -mxl-mode-app-model

MIPS ທາງເລືອກໃນການ - THE -EB - ມີນາ=ໂຄ້ງ -mtune=ໂຄ້ງ -mips1 -mips2 -mips3 -mips4
-mips32 -mips32r2 -mips32r3 -mips32r5 -mips32r6 -mips64 -mips64r2 -mips64r3
-mips64r5 -mips64r6 -mips16 -mno-mips16 -mflip-mips16 -minterlink-ບີບອັດ
-mno-interlink-compressed -minterlink-mips16 -mno-interlink-mips16 -mabi=ຊ່ວຍເຫລືອ
- mabicalls -mno-abicalls -mshared -mno-ແບ່ງປັນ -mplt -mno-plt -mxgot -mno-xgot
-mgp32 -mgp64 -mfp32 -mfpx -mfp64 -mhard-float -msoft-float -mno-float
-msingle-float -mdouble-float -modd-spreg -mno-odd-spreg -mabs=ຮູບແບບການ -mnan=ການເຂົ້າລະຫັດ
-mdsp -mno-dsp -MDSPR2 -mno-dspr2 -mmcu -mmno-mcu - ເມວາ -mno-eva -mvirt -mno-virt
-mxpa -mno-xpa -mmmicromips -mno-micromips -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 - mimadd -mno-imadd -mfused-madd
-mno-fused-madd -nocpp -mfix-24k -mno-fix-24k -mfix-r4000 -mno-fix-r4000
-mfix-r4400 -mno-fix-r4400 -mfix-r10000 -mno-fix-r10000 -mfix-rm7000 -mno-fix-rm7000
-mfix-vr4120 -mno-fix-vr4120 -mfix-vr4130 -mno-fix-vr4130 -mfix-sb1 -mno-fix-sb1
-mflush-func=ມ່ວນ -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

Moxie ທາງເລືອກໃນການ -ເມບ -mel -mmul.x -mno-crt0

MSP430 ທາງເລືອກໃນການ - ຊິມ -masm-hex -mmcu= -mcpu= - ຂະ​ຫນາດ​ໃຫຍ່​ -msall -mrelax -mhwmult= - minrt

NDS32 ທາງເລືອກໃນການ -mbig-endian -mlittle-endian -mreduced-regs -mful-regs -mcmov -mno-cmov
-mperf-ext -mno-perf-ext -mv3push -mno-v3push -m16bit -mno-16bit -misr-vector-size=num
-mcache-block-size=num - ມີນາ=ໂຄ້ງ -mcmodel=code-model -mctor-dtor -mrelax

Nios II ທາງເລືອກໃນການ -G num -mgpopt=ທາງເລືອກ -mgpopt -mno-gpopt -mel -ເມບ -mno-bypass-cache
-mbypass-cache -mno-cache-volatile -mcache-volatile -mno-fast-sw-div -mfast-sw-div
-mhw-mul -mno-hw-mul -mhw-mulx -mno-hw-mulx -mno-hw-div -mhw-div -mcustom-insn=N
-mno- custom-insn -mcustom-fpu-cfg=ຊື່ - mhal -msmallc -msys-crt0=ຊື່ -msys-lib=ຊື່

Nvidia PTX ທາງເລືອກໃນການ -m32 -m64 -mmainkernel

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 -m64bit-ສອງເທົ່າ -m32bit-ສອງເທົ່າ

RS / 6000 ແລະ ພະລັງງານ PC ທາງເລືອກໃນການ -mcpu=cpu-type -mtune=cpu-type -mcmodel=code-model
-mpowerpc64 -maltivec -mno-altivec -mpowerpc-gpopt -mno-powerpc-gpopt
-mpowerpc-gfxopt -mno-powerpc-gfxopt -mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb
-mpopcntd -mno-popcntd -mfprnd -mno-fprnd -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr
-mhard-dfp -mno-hard-dfp -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 -mpower8-fusion -mno-mpower8-fusion
-mpower8-vector -mno-power8-vector -mcrypto -mno-crypto -mdirect-ຍ້າຍ -mno-direct-ຍ້າຍ
-mquad ຄວາມ​ຈໍາ​ -mno-quad-memory -mquad-memory-atomic -mno-quad-memory-atomic
-mcompat-align-parm -mno-compat-align-parm -mupper-regs-df -mno-upper-regs-df
-mupper-regs-sf -mno-upper-regs-sf -mupper-regs -mno-upper-regs

RX ທາງເລືອກໃນການ -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 -mno-warn-multiple-fast-interrupts
-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-ກອງ -mhotpatch=ຄໍາເຄິ່ງ,ຄໍາເຄິ່ງ

ຜະລິດແນນ ທາງເລືອກໃນການ -ເມບ -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=ໄລຍະລົງທະບຽນ -mindexed-addressing
-mgettrcost=ຈໍານວນ -mpt-ແກ້ໄຂ -maccumulate-outgoing-args -minvalid-ສັນຍາລັກ
-matomic-model=ຮູບແບບປະລໍາມະນູ -mbranch-cost=num -mzdcbranch -mno-zdcbranch
-mcbranch-force-delay-slot -mfused-madd -mno-fused-madd -mfsca -mno-fsca -mfsrra
-mno-fsrra -mpretend-cmove -mtas

ແສງອາທິດ 2 ທາງເລືອກໃນການ -mclear-hwcap -mno-clear-hwcap - ຂໍ້ຄວາມທີ່ບໍ່ສະອາດ -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 -muser-mode -mno-user-mode -mv8plus -mno-v8plus -mvis
-mno-vis -mvis2 -mno-vis2 -mvis3 -mno-vis3 -mcbcond -mno-cbcond -mfmaf -mno-fmaf
-mpopc -mno-popc -mfix-at697f -mfix-ut699

SPU ທາງເລືອກໃນການ -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 -mbig-endian -mlittle-endian -mcmodel=code-model

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 -mv850e3v5 - ມົວ -mrelax -mlong-ໂດດ -msoft-float -mhard-float -mgcc-abi
-mrh850-abi -mbig-ສະຫຼັບ

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

ວິໄສທັດ ທາງເລືອກໃນການ -mdebug - ຊິມ -mfpu -mno-fpu -mhard-float -msoft-float -mcpu=cpu-type
-mtune=cpu-type -msv-mode -muser-mode

ສ່ວນຂະຫຍາຍ VMS ທາງເລືອກໃນການ -mvms-return-codes -mdebug-main=ຄຳ ນຳ ໜ້າ - mmalloc64 -mpointer-size=ຂະຫນາດ

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

x86 ທາງເລືອກໃນການ -mtune=cpu-type - ມີນາ=cpu-type -mtune-ctrl=ບັນຊີລາຍຊື່ຄຸນນະສົມບັດ
-mdump-tune-ຄຸນນະສົມບັດ -mno-default -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 -mavx512f -mavx512pf -mavx512er
-mavx512cd -msha - ແມ່ -mpclmul -mfsgsbase -mrdrnd -mf16c -mfma -mprefetchwt1
-mclflushopt -mxsavec -mxsaves -msse4a -m3dnow -mpopcnt - mabm -mbmi -mtbm -mfma4 -mxop
-mlzcnt -mbmi2 -mfxsr -mxsave -mxsaveopt -mrtm -mlwp -mmpx -mmwaitx -mthreads
-mno-align-stringops -minline-all-stringops -minline-stringops-ແບບໄດນາມິກ
-mstringop-strategy=ພຶຊະຄະນິດ -mmemcpy-strategy=ແຜນຍຸດທະສາດ -mmemset-strategy=ແຜນຍຸດທະສາດ
-mpush-args -maccumulate-outgoing-args -m128bit-ຍາວ-ສອງເທົ່າ -m96bit-ຍາວ-ສອງເທົ່າ
-mlong-double-64 -mlong-double-80 -mlong-double-128 -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 -m16 -mlarge-data-threshold=num
-msse2avx -mfentry -mrecord-mcount -mnop-mcount -m8bit-idiv
-mavx256-split-unaligned-load -mavx256-split-unaligned-store -malign-data=ປະເພດ
-mstack-protector-guard=ກອງ

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

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
-fdelete-dead-exceptions -funwind-ຕາຕະລາງ -fasynchronous-unwind-ຕາຕະລາງ -fno-gnu-ເປັນເອກະລັກ
-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=ຮູບແບບ
-fstack-reuse=reuse_level -ftrapv -fwrapv -fbounds-ກວດ​ສອບ​
-fvisibility=[Default|ພາຍໃນ|ເຊື່ອງໄວ້|ປ້ອງກັນ] -fstrict-volatile-bitfields
-fsync-libcalls

ທາງເລືອກໃນການ ການຄວບຄຸມ ໄດ້ ປະເພດ 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 ກັບຄືນມາ 4 ຖ້າມີຂໍ້ຜິດພາດໃນການລວບລວມຂໍ້ມູນພາຍໃນ
ແມ່ນພົບ.

ຖ້າທ່ານຕ້ອງການພຽງແຕ່ບາງຂັ້ນຕອນຂອງການລວບລວມ, ທ່ານສາມາດນໍາໃຊ້ -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 ເອກະສານ
ວາງຜົນຜະລິດໃນໄຟລ໌ ເອກະສານ. ນີ້ໃຊ້ກັບຜົນຜະລິດປະເພດໃດກໍ່ຕາມ,
ບໍ່​ວ່າ​ຈະ​ເປັນ​ໄຟລ​໌​ປະ​ຕິ​ບັດ​ໄດ້​, ໄຟລ​໌​ວັດ​ຖຸ​, ໄຟລ​໌ assembler ຫຼື preprocessed 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 ທາງ​ເລືອກ​ຍັງ​ໄດ້​ຮັບ​ການ​ລະ​ບຸ​ໄວ້ (ກ່ອນ​ທີ່​ຈະ​ - ຊ່ວຍ ທາງ​ເລືອກ​)
ຫຼັງຈາກນັ້ນ, ທາງເລືອກແຖວຄໍາສັ່ງທີ່ບໍ່ມີເອກະສານທີ່ກ່ຽວຂ້ອງກັບພວກມັນແມ່ນຄືກັນ
ສະແດງ.

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

--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 is
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 ທີ່ສອດຄ້ອງກັນ.

-fada-spec-parent=ຫນ່ວຍບໍລິການ
ຮ່ວມກັນກັບ -fdump-ada-spec[-ບາງ] ຂ້າງເທິງ, ສ້າງ Ada specs ເປັນຫນ່ວຍງານລູກຂອງ
ພໍ່ແມ່ ຫນ່ວຍບໍລິການ.

-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 ++. ມັນປິ່ນປົວ .c, .h ແລະ .i ໄຟລ໌ເປັນ
ໄຟລ໌ແຫຼ່ງ C++ ແທນໄຟລ໌ແຫຼ່ງ C ເວັ້ນເສຍແຕ່ -x ຖືກນໍາໃຊ້. ໂຄງ​ການ​ນີ້​ຍັງ​ເປັນ​ປະ​ໂຫຍດ​
ໃນເວລາທີ່ 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 ຖືກປະຕິເສດໂດຍບໍ່ເສຍຄ່າ. ສໍາລັບ
ວ່າ, -Wpedantic ແມ່ນຕ້ອງການນອກເຫນືອໄປຈາກ -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 ໄດ້ຖືກເປີດໃຊ້, ເຖິງແມ່ນວ່າໃນເວລາທີ່
ລັກສະນະການປ່ຽນແປງຄວາມຫມາຍຂອງມາດຕະຖານພື້ນຖານ. ດັ່ງນັ້ນ, ບາງອັນທີ່ເຄັ່ງຄັດ
ໂຄງການອາດຈະຖືກປະຕິເສດ. ມາດຕະຖານໂດຍສະເພາະຖືກນໍາໃຊ້ໂດຍ -Wpedantic ການລະບຸ
ຄຸນສົມບັດໃດເປັນສ່ວນຂະຫຍາຍ GNU ທີ່ໃຫ້ມາດຕະຖານສະບັບນັ້ນ. ຍົກ​ຕົວ​ຢ່າງ
-std=gnu90 -Wpedantic ເຕືອນກ່ຽວກັບຮູບແບບ C++ // ຄໍາເຫັນ, ໃນຂະນະທີ່ -std=gnu99 -Wpedantic
ບໍ່.

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

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

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

c99
c9x
iso9899:1999
iso9899:199x
ISO C99. ມາດ​ຕະ​ຖານ​ນີ້​ແມ່ນ​ສະ​ຫນັບ​ສະ​ຫນູນ​ຢ່າງ​ຫຼວງ​ຫຼາຍ​, ແມງ​ໄມ້ modulo ແລະ​
ບັນຫາຈຸດລອຍ (ສ່ວນໃຫຍ່ແມ່ນແຕ່ບໍ່ກ່ຽວຂ້ອງກັບຄຸນສົມບັດທາງເລືອກ C99
ຈາກເອກະສານຊ້ອນທ້າຍ F ແລະ G). ເບິ່ງhttp://gcc.gnu.org/c99status.html> ສໍາລັບການເພີ່ມເຕີມ
ຂໍ້ມູນ. ຊື່ c9x ແລະ iso9899:199x ຖືກຄັດຄ້ານ.

c11
c1x
iso9899:2011
ISO C11, ການແກ້ໄຂມາດຕະຖານ ISO C ປີ 2011. ມາດຕະຖານນີ້ແມ່ນຢ່າງຫຼວງຫຼາຍ
ສະ​ຫນັບ​ສະ​ຫນູນ​ຢ່າງ​ສົມ​ບູນ​, ແມງ​ໄມ້ modulo​, ບັນ​ຫາ​ຈຸດ​ທີ່​ເລື່ອນ​ໄດ້ (ສ່ວນ​ໃຫຍ່​ແມ່ນ​ແຕ່​ບໍ່​ແມ່ນ​ທັງ​ຫມົດ​
ກ່ຽວຂ້ອງກັບລັກສະນະທາງເລືອກ C11 ຈາກເອກະສານຊ້ອນທ້າຍ F ແລະ G) ແລະເອກະສານຄັດຕິດທາງເລືອກ K
(Bounds-checking interfaces) ແລະ L (Analyzability). ຊື່ c1x ຖືກຄັດຄ້ານ.

gnu90
gnu89
ພາສາ GNU ຂອງ ISO C90 (ລວມທັງບາງລັກສະນະ C99).

gnu99
gnu9x
ພາສາ GNU ຂອງ ISO C99. ຊື່ gnu9x ຖືກຄັດຄ້ານ.

gnu11
gnu1x
ພາສາ GNU ຂອງ ISO C11. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນຂອງລະຫັດ C. ຊື່ gnu1x is
ເຊົາໃຊ້ແລ້ວ.

c++98
c++03
ມາດຕະຖານ ISO C++ ປີ 1998 ບວກກັບ corrigendum ດ້ານວິຊາການ 2003 ແລະ ເພີ່ມເຕີມບາງອັນ
ບົດ​ລາຍ​ງານ​ຂໍ້​ບົກ​ຜ່ອງ​. ຄື​ກັນ​ກັບ -ansi ສໍາລັບລະຫັດ C++.

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

c++11
c++0x
ມາດຕະຖານ ISO C++ ປີ 2011 ບວກກັບການແກ້ໄຂ. ຊື່ c++0x ຖືກຄັດຄ້ານ.

gnu++11
gnu++0x
ພາສາ GNU ຂອງ -std=c++11ທີ່ຢູ່ ຊື່ gnu++0x ຖືກຄັດຄ້ານ.

c++14
c++1y
ມາດຕະຖານ ISO C++ ປີ 2014 ບວກກັບການແກ້ໄຂ. ຊື່ c++1y ຖືກຄັດຄ້ານ.

gnu++14
gnu++1y
ພາສາ GNU ຂອງ -std=c++14ທີ່ຢູ່ ຊື່ gnu++1y ຖືກຄັດຄ້ານ.

c++1z
ການປັບປຸງມາດຕະຖານ ISO C++ ຕໍ່ໄປ, ວາງແຜນໄວ້ຢ່າງບໍ່ຢຸດຢັ້ງສຳລັບປີ 2017. ສະໜັບສະໜູນ
ແມ່ນ​ການ​ທົດ​ລອງ​ສູງ, ແລະ​ເກືອບ​ແນ່​ນອນ​ວ່າ​ຈະ​ມີ​ການ​ປ່ຽນ​ແປງ​ໃນ​ວິ​ທີ​ທີ່​ບໍ່​ເຂົ້າ​ກັນ​ໄດ້​ໃນ
ການປ່ອຍໃນອະນາຄົດ.

gnu++1z
ພາສາ GNU ຂອງ -std=c++1z. ສະຫນັບສະຫນູນແມ່ນການທົດລອງສູງ, ແລະເກືອບຈະ
ແນ່ນອນວ່າມີການປ່ຽນແປງໃນວິທີການທີ່ບໍ່ເຂົ້າກັນໄດ້ໃນການປ່ອຍໃນອະນາຄົດ.

-fgnu89-inline
ທາງເລືອກ -fgnu89-inline ບອກ GCC ໃຫ້ໃຊ້ຄໍາສັບ GNU ແບບດັ້ງເດີມສໍາລັບ "inline"
ເຮັດວຽກໃນເວລາທີ່ຢູ່ໃນໂຫມດ C99.

ການໃຊ້ຕົວເລືອກນີ້ແມ່ນເທົ່າກັບການເພີ່ມຄຸນສົມບັດຂອງຟັງຊັນ "gnu_inline".
ກັບຟັງຊັນ inline ທັງຫມົດ.

ທາງເລືອກ -fno-gnu89-inline ບອກ GCC ຢ່າງຈະແຈ້ງໃຫ້ໃຊ້ C99 semantics ສໍາລັບ
"inline" ເມື່ອຢູ່ໃນໂຫມດ C99 ຫຼື gnu99 (ie, ມັນກໍານົດພຶດຕິກໍາໃນຕອນຕົ້ນ). ນີ້
ບໍ່ຮອງຮັບທາງເລືອກໃນ -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. A
ສະພາບແວດລ້ອມທີ່ເປັນເຈົ້າພາບແມ່ນຫນຶ່ງທີ່ຫ້ອງສະຫມຸດມາດຕະຖານທັງຫມົດແມ່ນມີຢູ່, ແລະໃນ
ເຊິ່ງ "ຕົ້ນຕໍ" ມີປະເພດຜົນຕອບແທນຂອງ "int". ຕົວຢ່າງແມ່ນເກືອບທຸກຢ່າງຍົກເວັ້ນ a
ແກ່ນ. ນີ້ແມ່ນເທົ່າກັບ -fno-freestanding.

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

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

ຈົ່ງຈື່ໄວ້ວ່ານີ້ແມ່ນຄຸນສົມບັດທົດລອງ, ບໍ່ສົມບູນ, ແລະມີການປ່ຽນແປງໃນອະນາຄົດ
ລຸ້ນຂອງ GCC. ເບິ່ງhttps://gcc.gnu.org/wiki/OpenACC> ສຳ ລັບຂໍ້ມູນເພີ່ມເຕີມ.

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

-fopenmp-simd
ເປີດໃຊ້ການຈັດການຄຳສັ່ງ SIMD ຂອງ OpenMP ດ້ວຍ "#pragma omp" ໃນ C/C++ ແລະ "!$omp" ໃນ
ຟໍຣັນ. ຄຳສັ່ງ OpenMP ອື່ນໆແມ່ນຖືກລະເລີຍ.

-fcilkplus
ເປີດໃຊ້ຄຸນສົມບັດການຂະຫຍາຍພາສາ Cilk Plus ສໍາລັບ C/C++. ໃນເວລາທີ່ທາງເລືອກ
-fcilkplus ຖືກລະບຸໄວ້, ເປີດໃຊ້ຄຸນສົມບັດການຂະຫຍາຍພາສາ Cilk Plus
ສໍາລັບ C/C++. ການປະຕິບັດໃນປັດຈຸບັນປະຕິບັດຕາມ ABI ຮຸ່ນ 1.2. ນີ້ແມ່ນ
ລັກສະນະການທົດລອງທີ່ສົມບູນພຽງແຕ່ບາງສ່ວນ, ແລະການໂຕ້ຕອບຂອງມັນອາດຈະມີການປ່ຽນແປງ
ໃນ GCC ຮຸ່ນໃນອະນາຄົດເນື່ອງຈາກການປ່ຽນແປງສະເພາະຢ່າງເປັນທາງການ. ໃນປັດຈຸບັນ, ທັງຫມົດ
ຄຸນນະສົມບັດແຕ່ "_Cilk_for" ໄດ້ຖືກປະຕິບັດ.

-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;
};

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

ໃຫ້ສັງເກດວ່າທາງເລືອກນີ້ແມ່ນປິດສໍາລັບເປົ້າຫມາຍທັງຫມົດແຕ່ເປົ້າຫມາຍ x86 ໂດຍໃຊ້ ms-abi.

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

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

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

- ແບບດັ້ງເດີມ
-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. ຄ່າເລີ່ມຕົ້ນແມ່ນລຸ້ນ 0.

ເວີຊັ່ນ 0 ຫມາຍເຖິງສະບັບທີ່ສອດຄ່ອງກັບສະເພາະ C++ ABI.
ດັ່ງນັ້ນ, ABI ທີ່ໄດ້ຮັບໂດຍໃຊ້ເວີຊັນ 0 ຈະມີການປ່ຽນແປງໃນລຸ້ນຕ່າງໆຂອງ G++
ຍ້ອນວ່າແມງໄມ້ ABI ຖືກແກ້ໄຂ.

ເວີຊັ່ນ 1 ແມ່ນລຸ້ນຂອງ C++ ABI ທີ່ປະກົດຕົວທຳອິດໃນ G++ 3.2.

ເວີຊັ່ນ 2 ແມ່ນລຸ້ນຂອງ C++ ABI ທີ່ປະກົດຕົວຄັ້ງທຳອິດໃນ G++ 3.4, ແລະແມ່ນ
ຄ່າເລີ່ມຕົ້ນຜ່ານ G++ 4.9.

ເວີຊັນ 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​, ຄໍາ​ນໍາ​ຫນ້າ ++
ແລະ --, ແລະຟັງຊັນຂອບເຂດຫ້ອງຮຽນທີ່ໃຊ້ເປັນອາກິວເມັນແມ່ແບບ.

ເວີຊັ່ນ 7, ເຊິ່ງປາກົດໃນ G++ 4.8 ທຳອິດ, ທີ່ປະຕິບັດຕໍ່ nullptr_t ເປັນປະເພດ buildin.
ແລະແກ້ໄຂການຫຼອກລວງຂອງ lambdas ໃນຂອບເຂດການໂຕ້ຖຽງເລີ່ມຕົ້ນ.

ເວີຊັນ 8, ເຊິ່ງປາກົດໃນ G++ 4.9 ຄັ້ງທໍາອິດ, ແກ້ໄຂພຶດຕິກໍາການທົດແທນຂອງ
ປະເພດຟັງຊັນທີ່ມີ function-cv-qualifiers.

ເບິ່ງ - ວາບີ.

-fabi-compat-version=n
ກ່ຽວກັບເປົ້າຫມາຍທີ່ສະຫນັບສະຫນູນນາມແຝງທີ່ເຂັ້ມແຂງ, G++ ເຮັດວຽກກ່ຽວກັບການປ່ຽນແປງ mangling ໂດຍການສ້າງ
alias ທີ່ມີຊື່ mangled ທີ່ຖືກຕ້ອງໃນເວລາທີ່ກໍານົດສັນຍາລັກທີ່ບໍ່ຖືກຕ້ອງ
ຊື່​ສາ​ກົນ​. ສະຫຼັບນີ້ລະບຸວ່າ ABI ລຸ້ນໃດທີ່ຈະໃຊ້ສຳລັບນາມແຝງ.

ກັບ -fabi-version=0 (ຄ່າເລີ່ມຕົ້ນ), ນີ້ຄ່າເລີ່ມຕົ້ນເປັນ 2. ຖ້າລຸ້ນ ABI ອື່ນແມ່ນ
ເລືອກຢ່າງຈະແຈ້ງ, ນີ້ກຳນົດຄ່າເລີ່ມຕົ້ນເປັນ 0.

ສະບັບເຂົ້າກັນໄດ້ຖືກກໍານົດໂດຍ -Wabi=n.

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

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

-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-ສັກຢາ
ສັກຢາຟັງຊັນຂອງໝູ່ເຂົ້າໄປໃນຊ່ອງຊື່ທີ່ປິດລ້ອມ, ເພື່ອໃຫ້ພວກມັນເບິ່ງເຫັນໄດ້ພາຍນອກ
ຂອບເຂດຂອງຫ້ອງຮຽນທີ່ເຂົາເຈົ້າໄດ້ຖືກປະກາດ. ຫນ້າທີ່ເພື່ອນໄດ້ຖືກບັນທຶກໄວ້
ເຮັດວຽກດ້ວຍວິທີນີ້ໃນ Annotated C++ Reference Manual. ຢ່າງໃດກໍຕາມ, ໃນ ISO C++ a
ຟັງຊັນເພື່ອນທີ່ບໍ່ໄດ້ຖືກປະກາດຢູ່ໃນຂອບເຂດທີ່ປິດລ້ອມສາມາດພົບໄດ້ໂດຍໃຊ້ເທົ່ານັ້ນ
ການຊອກຫາການໂຕ້ຖຽງຂຶ້ນກັບ. GCC ເລີ່ມຕົ້ນເປັນພຶດຕິກໍາມາດຕະຖານ.

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

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

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

-fextern-tls-init
-fno-extern-tls-init
ມາດຕະຖານ C ++ 11 ແລະ OpenMP ອະນຸຍາດໃຫ້ຕົວແປ "thread_local" ແລະ "threadprivate" ເພື່ອ
ມີການເລີ່ມຕົ້ນແບບເຄື່ອນໄຫວ (runtime). ເພື່ອສະຫນັບສະຫນູນນີ້, ການນໍາໃຊ້ຕົວແປດັ່ງກ່າວ
ຜ່ານຟັງຊັນ wrapper ທີ່ປະຕິບັດການເລີ່ມຕົ້ນທີ່ຈໍາເປັນ. ໃນ​ເວ​ລາ​ທີ່
ການ​ນໍາ​ໃຊ້​ແລະ​ຄໍາ​ນິ​ຍາມ​ຂອງ​ຕົວ​ປ່ຽນ​ແປງ​ແມ່ນ​ຢູ່​ໃນ​ຫນ່ວຍ​ບໍ​ລິ​ການ​ແປ​ພາ​ສາ​ດຽວ​ກັນ​, overhead ນີ້​ສາ​ມາດ​ເຮັດ​ໄດ້​
ໄດ້ຮັບການ optimized ທັນທີ, ແຕ່ໃນເວລາທີ່ການນໍາໃຊ້ແມ່ນຢູ່ໃນຫນ່ວຍງານການແປພາສາທີ່ແຕກຕ່າງກັນມີ
ທີ່ສໍາຄັນ overhead ເຖິງແມ່ນວ່າຕົວແປບໍ່ຈໍາເປັນຕ້ອງເປັນແບບເຄື່ອນໄຫວ
ການເລີ່ມຕົ້ນ. ຖ້ານັກຂຽນໂປລແກລມສາມາດແນ່ໃຈວ່າບໍ່ມີການນໍາໃຊ້ຕົວແປໃນ non-
ການກໍານົດ TU ຕ້ອງການກະຕຸ້ນການເລີ່ມຕົ້ນແບບເຄື່ອນໄຫວ (ບໍ່ວ່າຈະເປັນຕົວແປແມ່ນ
ການເລີ່ມຕົ້ນທາງສະຖິຕິ, ຫຼືການນໍາໃຊ້ຕົວແປໃນການກໍານົດ TU ຈະຖືກປະຕິບັດ
ກ່ອນທີ່ຈະໃຊ້ໃນ TU ອື່ນ), ພວກເຂົາສາມາດຫຼີກລ້ຽງການ overhead ນີ້ກັບ
-fno-extern-tls-init ທາງເລືອກ.

ກ່ຽວກັບເປົ້າຫມາຍທີ່ສະຫນັບສະຫນູນສັນຍາລັກນາມແຝງ, ຄ່າເລີ່ມຕົ້ນແມ່ນ -fextern-tls-init. ເປົ້າໝາຍ
ທີ່ບໍ່ຮອງຮັບສັນຍາລັກນາມແຝງ, ຄ່າເລີ່ມຕົ້ນແມ່ນ -fno-extern-tls-init.

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

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

-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-ສ່ວນຂະຫຍາຍ
ປິດການເຕືອນ Wpedantic ກ່ຽວກັບການກໍ່ສ້າງທີ່ໃຊ້ໃນ MFC, ເຊັ່ນ implicit int ແລະ
ໄດ້ຮັບຕົວຊີ້ໄປຫາຫນ້າທີ່ສະມາຊິກໂດຍຜ່ານ syntax ທີ່ບໍ່ແມ່ນມາດຕະຖານ.

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

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

-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++ ("dynamic_cast" ແລະ "typeid"). ຖ້າ​ເຈົ້າ
ຢ່າໃຊ້ພາກສ່ວນເຫຼົ່ານັ້ນຂອງພາສາ, ທ່ານສາມາດປະຫຍັດພື້ນທີ່ບາງຢ່າງໂດຍການໃຊ້ທຸງນີ້.
ໃຫ້ສັງເກດວ່າການຈັດການຂໍ້ຍົກເວັ້ນໃຊ້ຂໍ້ມູນດຽວກັນ, ແຕ່ G++ ສ້າງມັນເປັນ
ຕ້ອງການ. ຕົວປະຕິບັດການ "dynamic_cast" ຍັງສາມາດຖືກນໍາໃຊ້ສໍາລັບການສົ່ງສັນຍານທີ່ບໍ່ຕ້ອງການ
ຂໍ້ມູນປະເພດເວລາແລ່ນ, ເຊັ່ນ: ໂຍນເປັນ "void *" ຫຼືໄປຫາຫ້ອງຮຽນພື້ນຖານທີ່ບໍ່ຊັດເຈນ.

-fsized-deallocation
ເປີດໃຊ້ການປະກາດທົ່ວໂລກໃນຕົວ

void operator ລົບ (void *, std::size_t) noexcept;
void operator delete[] (void *, std::size_t) noexcept;

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

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

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

-ftemplate-backtrace-limit=n
ກໍານົດຈໍານວນສູງສຸດຂອງບັນທຶກການກະຕຸ້ນແມ່ແບບສໍາລັບຄໍາເຕືອນດຽວຫຼືຄວາມຜິດພາດ
to n. ຄ່າເລີ່ມຕົ້ນແມ່ນ 10.

-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". ທາງເລືອກນີ້ແມ່ນຕ້ອງການສໍາລັບການຢ່າງເຕັມສ່ວນ
ການ​ຈັດ​ການ​ຕາມ​ມາດ​ຕະ​ຖານ​ຂອງ​ການ​ທໍາ​ລາຍ​ສະ​ຖິດ​, ແຕ່​ວ່າ​ຈະ​ເຮັດ​ວຽກ​ພຽງ​ແຕ່​ຖ້າ​ຫາກ​ວ່າ​ຫ້ອງ​ສະ​ຫມຸດ 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 ເພື່ອກໍານົດປະເພດທີ່ມີຊື່ດຽວກັນແຕກຕ່າງກັນ.

-fvtable-verify=[std|ເບື້ອງຕົ້ນ|none]
ເປີດ (ຫຼືປິດ, ຖ້າໃຊ້ -fvtable-verify=ບໍ່ມີ) ຄຸນ​ນະ​ສົມ​ບັດ​ຄວາມ​ປອດ​ໄພ​ທີ່​ກວດ​ສອບ​ທີ່​
ແລ່ນເວລາ, ສໍາລັບທຸກໆການໂທ virtual, ວ່າຕົວຊີ້ vtable ຜ່ານການໂທແມ່ນ
ເຮັດແມ່ນຖືກຕ້ອງສໍາລັບປະເພດຂອງວັດຖຸ, ແລະບໍ່ໄດ້ຮັບການເສຍຫາຍຫຼືຂຽນທັບ.
ຖ້າຕົວຊີ້ vtable ທີ່ບໍ່ຖືກຕ້ອງຖືກກວດພົບໃນເວລາແລ່ນ, ຂໍ້ຜິດພາດຈະຖືກລາຍງານແລະ
ການ​ປະ​ຕິ​ບັດ​ໂຄງ​ການ​ແມ່ນ​ຢຸດ​ເຊົາ​ທັນ​ທີ​.

ທາງ​ເລືອກ​ນີ້​ເຮັດ​ໃຫ້​ໂຄງ​ສ້າງ​ຂໍ້​ມູນ​ທີ່​ໃຊ້​ເວ​ລາ​ທີ່​ຈະ​ໄດ້​ຮັບ​ການ​ສ້າງ​ຕັ້ງ​ຂຶ້ນ​ໃນ​ການ​ເລີ່ມ​ຕົ້ນ​ໂຄງ​ການ​, ເຊິ່ງ​ແມ່ນ​
ໃຊ້ສໍາລັບການກວດສອບຕົວຊີ້ vtable. ທາງເລືອກ std ແລະ ເບື້ອງຕົ້ນ ຄວບ​ຄຸມ
ໄລຍະເວລາຂອງເວລາທີ່ໂຄງສ້າງຂໍ້ມູນເຫຼົ່ານີ້ຖືກສ້າງຂຶ້ນ. ໃນທັງສອງກໍລະນີໂຄງສ້າງຂໍ້ມູນແມ່ນ
ການກໍ່ສ້າງກ່ອນທີ່ຈະປະຕິບັດເຖິງ "ຕົ້ນຕໍ". ການນໍາໃຊ້ -fvtable-verify=std ເຮັດໃຫ້ຂໍ້ມູນ
ໂຄງສ້າງທີ່ຈະຖືກສ້າງຂຶ້ນຫຼັງຈາກຫ້ອງສະຫມຸດຮ່ວມກັນໄດ້ຖືກໂຫລດແລະເລີ່ມຕົ້ນ.
-fvtable-verify=preinit ເຮັດໃຫ້ພວກເຂົາຖືກສ້າງຂຶ້ນກ່ອນທີ່ຈະມີຫ້ອງສະຫມຸດຮ່ວມກັນ
ໂຫລດ​ແລະ​ເລີ່ມ​ຕົ້ນ​.

ຖ້າຕົວເລືອກນີ້ປາກົດຫຼາຍຄັ້ງໃນແຖວຄໍາສັ່ງທີ່ມີຄ່າທີ່ແຕກຕ່າງກັນ
ລະບຸ, none ເອົາບູລິມະສິດສູງສຸດທັງສອງ std ແລະ ເບື້ອງຕົ້ນ; ເບື້ອງຕົ້ນ ໃຊ້ເວລາ
ບູລິມະສິດຫຼາຍກວ່າ std.

-fvtv-debug
ເມື່ອໃຊ້ຮ່ວມກັບ -fvtable-verify=std or -fvtable-verify=preinit, ສາເຫດ
ສະບັບ debug ຂອງຟັງຊັນ runtime ສໍາລັບຄຸນນະສົມບັດການກວດສອບ vtable ຈະເປັນ
ເອີ້ນວ່າ. ທຸງນີ້ຍັງເຮັດໃຫ້ compiler ບັນທຶກຂໍ້ມູນກ່ຽວກັບ vtable ໃດ
ຕົວຊີ້ວັດທີ່ມັນຊອກຫາສໍາລັບແຕ່ລະຫ້ອງຮຽນ. ຂໍ້ມູນນີ້ຖືກຂຽນໃສ່ໄຟລ໌ທີ່ມີຊື່
vtv_set_ptr_data.log ໃນໄດເລກະທໍລີທີ່ມີຊື່ໂດຍຕົວແປສະພາບແວດລ້ອມ VTV_LOGS_DIR
ຖ້າມັນຖືກກໍານົດໄວ້ຫຼືໄດເລກະທໍລີທີ່ເຮັດວຽກໃນປະຈຸບັນ.

ຫມາຍ​ເຫດ​: ຄຸນ​ນະ​ສົມ​ບັດ​ນີ້​ ເພີ່ມເຕີມ ຂໍ້ມູນໃສ່ໄຟລ໌ບັນທຶກ. ຖ້າທ່ານຕ້ອງການໄຟລ໌ບັນທຶກສົດ, ເປັນ
ໃຫ້ແນ່ໃຈວ່າຈະລຶບອັນໃດນຶ່ງທີ່ມີຢູ່ແລ້ວອອກ.

-fvtv-ນັບ
ນີ້ແມ່ນທຸງດີບັກ. ເມື່ອໃຊ້ຮ່ວມກັບ -fvtable-verify=std or
-fvtable-verify=preinit, ນີ້ເຮັດໃຫ້ compiler ຕິດຕາມຈໍານວນທັງຫມົດຂອງ
ການໂທ virtual ທີ່ມັນພົບແລະຈໍານວນການຢືນຢັນທີ່ມັນໃສ່. ມັນຍັງ
ນັບຈໍານວນການໂທໄປຫາບາງຟັງຊັນຫ້ອງສະໝຸດເວລາແລ່ນທີ່ມັນໃສ່ ແລະ
ບັນທຶກຂໍ້ມູນນີ້ສໍາລັບແຕ່ລະຫນ່ວຍງານລວບລວມ. compiler ຂຽນຂໍ້ມູນນີ້
ກັບໄຟລ໌ທີ່ມີຊື່ vtv_count_data.log ໃນໄດເລກະທໍລີທີ່ມີຊື່ໂດຍຕົວແປສະພາບແວດລ້ອມ
VTV_LOGS_DIR ຖ້າມັນຖືກກໍານົດໄວ້ຫຼືໄດເລກະທໍລີທີ່ເຮັດວຽກໃນປະຈຸບັນ. ມັນຍັງ
ນັບຂະຫນາດຂອງຊຸດຕົວຊີ້ vtable ສໍາລັບແຕ່ລະຫ້ອງຮຽນ, ແລະຂຽນຂໍ້ມູນນີ້
to vtv_class_set_sizes.log ໃນໄດເລກະທໍລີດຽວກັນ.

ຫມາຍ​ເຫດ​: ຄຸນ​ນະ​ສົມ​ບັດ​ນີ້​ ເພີ່ມເຕີມ ຂໍ້ມູນໄປຍັງໄຟລ໌ບັນທຶກ. ເພື່ອໃຫ້ໄດ້ຮັບໄຟລ໌ບັນທຶກສົດ, ໃຫ້ແນ່ໃຈວ່າ
ລຶບອັນໃດນຶ່ງທີ່ມີຢູ່ແລ້ວອອກ.

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

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

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

- ວາບີ (C, Objective-C, C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ໃນເວລາທີ່ຈະແຈ້ງ -fabi-version=n ທາງເລືອກແມ່ນຖືກນໍາໃຊ້, ເຮັດໃຫ້ G ++ ເຕືອນເມື່ອມັນສ້າງ
ລະຫັດທີ່ອາດຈະບໍ່ເຂົ້າກັນໄດ້ກັບ vendor-neutral C++ ABI. ຕັ້ງແຕ່ G++ ດຽວນີ້
ເລີ່ມຕົ້ນເປັນ -fabi-version=0, - ວາບີ ບໍ່ມີຜົນໃດໆເວັ້ນເສຍແຕ່ວ່າ ABI ລຸ້ນເກົ່າແມ່ນ
ເລືອກ (ມີ -fabi-version=n) ຫຼືລຸ້ນທີ່ເຂົ້າກັນໄດ້ທີ່ເກົ່າກວ່າຖືກເລືອກ (ກັບ
-Wabi=n or -fabi-compat-version=n).

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

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

- ວາບີ ຍັງສາມາດໃຊ້ກັບໝາຍເລກເວີຊັນທີ່ຊັດເຈນເພື່ອເຕືອນກ່ຽວກັບຄວາມເຂົ້າກັນໄດ້
ສະເພາະ - ສະ​ບັບ Fabi​ ລະດັບ, ຕົວຢ່າງ -Wabi=2 ເພື່ອເຕືອນກ່ຽວກັບການປ່ຽນແປງທີ່ກ່ຽວຂ້ອງກັບ
-fabi-version=2. ການລະບຸໝາຍເລກເວີຊັນຍັງກຳນົດ -fabi-compat-version=n.

ຄວາມບໍ່ເຂົ້າກັນທີ່ຮູ້ຈັກໃນ -fabi-version=2 (ເຊິ່ງເປັນຄ່າເລີ່ມຕົ້ນຈາກ GCC 3.4 ຫາ
4.9) ລວມມີ:

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

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

ນີ້ໄດ້ຖືກແກ້ໄຂໃນ -fabi-version=3.

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

mangling ໄດ້ມີການປ່ຽນແປງໃນ -fabi-version=4.

* "__attribute ((const))" ແລະ "noreturn" ຖືກທໍາລາຍເປັນຕົວກໍານົດປະເພດ, ແລະ
"decltype" ຂອງການປະກາດທໍາມະດາຖືກພັບອອກໄປ.

ບັນ​ຫາ​ລັກ​ສະ​ນະ​ເຫຼົ່າ​ນີ້​ໄດ້​ຮັບ​ການ​ແກ້​ໄຂ​ໃນ​ -fabi-version=5.

* ຕົວເລກທີ່ກຳນົດຂອບເຂດທີ່ຜ່ານການໂຕ້ແຍ້ງຕໍ່ກັບໜ້າທີ່ປ່ຽນແປງແມ່ນໄດ້ຮັບການສົ່ງເສີມຄື
unscoped enumerators, ເຮັດໃຫ້ "va_arg" ຈົ່ມ. ໃນເປົ້າຫມາຍສ່ວນໃຫຍ່ນີ້ບໍ່ໄດ້
ຕົວຈິງແລ້ວຜົນກະທົບຕໍ່ພາລາມິເຕີທີ່ຜ່ານ ABI, ຍ້ອນວ່າບໍ່ມີທາງທີ່ຈະຜ່ານການໂຕ້ຖຽງ
ຂະຫນາດນ້ອຍກວ່າ "int".

ນອກຈາກນີ້, ABI ໄດ້ປ່ຽນການບີບບັງຄັບຂອງຊຸດການໂຕ້ຖຽງແມ່ແບບ, "const_cast",
"static_cast", prefix increment/decrement, ແລະຟັງຊັນຂອບເຂດຫ້ອງຮຽນທີ່ໃຊ້ເປັນ a
ການໂຕ້ຖຽງແມ່ແບບ.

ບັນຫາເຫຼົ່ານີ້ໄດ້ຖືກແກ້ໄຂໃນ -fabi-version=6.

* Lambdas ຢູ່ໃນຂອບເຂດການໂຕ້ຖຽງເລີ່ມຕົ້ນຖືກທໍາລາຍຢ່າງບໍ່ຖືກຕ້ອງ, ແລະ ABI ໄດ້ປ່ຽນແປງ.
ການຫຼອກລວງຂອງ "nullptr_t".

ບັນຫາເຫຼົ່ານີ້ໄດ້ຖືກແກ້ໄຂໃນ -fabi-version=7.

* ໃນ​ເວ​ລາ​ທີ່​ການ​ຈັດ​ປະ​ເພດ​ການ​ທໍາ​ງານ​ທີ່​ມີ function-cv​-qualifiers​, ບໍ່​ມີ​ຄຸນ​ສົມ​ບັດ​
ປະເພດຟັງຊັນຖືກປະຕິບັດບໍ່ຖືກຕ້ອງໃນຖານະຜູ້ສະໝັກແທນ.

ນີ້ໄດ້ຖືກແກ້ໄຂໃນ -fabi-version=8.

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

* ສໍາລັບ SysV/x86-64, ສະຫະພັນທີ່ມີສະມາຊິກ "ຄູ່ຍາວ" ແມ່ນຜ່ານໃນຄວາມຊົງຈໍາ
ລະບຸໄວ້ໃນ psABI. ຍົກ​ຕົວ​ຢ່າງ:

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

"ສະຫະພັນ U" ແມ່ນຜ່ານຄວາມຊົງຈໍາສະເຫມີ.

-wabi-tag (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນເມື່ອປະເພດທີ່ມີແທັກ ABI ຖືກໃຊ້ໃນບໍລິບົດທີ່ບໍ່ມີແທັກ ABI ນັ້ນ.
ເບິ່ງ C ++ ຄຸນລັກສະນະ ສໍາລັບຂໍ້ມູນເພີ່ມເຕີມກ່ຽວກັບ tags ABI.

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

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

-Wliteral-suffix (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນເມື່ອສະຕຣິງ ຫຼືຕົວໜັງສືຖືກຕາມດ້ວຍ ud-suffix ເຊິ່ງບໍ່ແມ່ນ
ເລີ່ມຕົ້ນດ້ວຍຂີດກ້ອງ. ໃນຖານະເປັນສ່ວນຂະຫຍາຍທີ່ສອດຄ່ອງ, GCC ປະຕິບັດຕໍ່ທ້າຍເຊັ່ນ:
tokens preprocessing ແຍກຕ່າງຫາກເພື່ອຮັກສາຄວາມເຂົ້າກັນໄດ້ໃນດ້ານຫລັງກັບລະຫັດ
ທີ່ໃຊ້ຮູບແບບ macro ຈາກ " ". ຍົກ​ຕົວ​ຢ່າງ:

#define __STDC_FORMAT_MACROS
#ລວມທັງ
#ລວມ

int ຕົ້ນຕໍ () {
int64_t i64 = 123;
printf("int64 ຂອງຂ້ອຍ: %"PRId64"\n", i64);
}

ໃນກໍລະນີນີ້, "PRId64" ຖືກປະຕິບັດເປັນ token preprocessing ແຍກຕ່າງຫາກ.

ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

- ການ​ຂັດ​ຂວາງ​ (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 ປະເມີນເປັນຜິດເນື່ອງຈາກການໂທຫາຟັງຊັນ
ທີ່​ບໍ່​ມີ​ຂໍ້​ຍົກ​ເວັ້ນ​ການ​ຍົກ​ເວັ້ນ​ການ​ບໍ່​ຖິ້ມ (ເຊັ່ນ "ຖິ້ມ()" ຫຼື
"noexcept") ແຕ່ເປັນທີ່ຮູ້ຈັກໂດຍ compiler ວ່າບໍ່ເຄີຍຖິ້ມຂໍ້ຍົກເວັ້ນ.

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

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

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

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

-fext-ຕົວເລກ-ຕົວໜັງສື (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ຍອມຮັບຕົວໜັງສືຕາມຈິນຕະນາການ, ຈຸດຄົງທີ່, ຫຼືຕົວໜັງສືທີ່ກຳນົດໄວ້ໂດຍເຄື່ອງຈັກເປັນ GNU
ສ່ວນຂະຫຍາຍ. ເມື່ອຕົວເລືອກນີ້ຖືກປິດການຕໍ່ທ້າຍເຫຼົ່ານີ້ຈະຖືກຖືວ່າເປັນຜູ້ໃຊ້ C++11-
ກຳນົດຄຳຕໍ່ທ້າຍຕົວເລກຕາມຕົວໜັງສື. ອັນນີ້ຖືກເປີດເປັນຄ່າເລີ່ມຕົ້ນສຳລັບທຸກພາສາກ່ອນ C++11
ແລະພາສາ GNU ທັງໝົດ: -std=c++98, -std=gnu++98, -std=gnu++11, -std=gnu++14. ນີ້
ທາງ​ເລືອກ​ແມ່ນ​ປິດ​ເປັນ​ຄ່າ​ເລີ່ມ​ຕົ້ນ​ສໍາ​ລັບ ISO C++ 11 ເປັນ​ຕົ້ນ​ໄປ (-std=c++11, ...).

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

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

* ກໍາ​ນົດ​ຕົວ​ສ້າງ​ສໍາ​ເນົາ​ແລະ​ຕົວ​ປະ​ຕິ​ບັດ​ການ​ມອບ​ຫມາຍ​ສໍາ​ລັບ​ຫ້ອງ​ຮຽນ​ທີ່​ມີ​ການ​ເຄື່ອນ​ໄຫວ -
ຫນ່ວຍຄວາມຈໍາຈັດສັນ.

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

* ມີ "operator=" ສົ່ງຄືນການອ້າງອີງເຖິງ * ນີ້.

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

* ຈໍາ​ແນກ​ລະ​ຫວ່າງ​ຄໍາ​ນໍາ​ຫນ້າ​ແລະ​ຮູບ​ແບບ postfix ຂອງ increment ແລະ​ການ​ຫຼຸດ​ລົງ​ປະ​ຕິ​ບັດ​ການ​.

* ຢ່າໂຫຼດ "&&", "||", ຫຼື ",".

ຕົວເລືອກນີ້ຍັງເປີດໃຊ້ງານ -Wnon-virtual-dtor, ເຊິ່ງເປັນຫນຶ່ງໃນ C ++ ທີ່ມີປະສິດທິພາບ
ຄຳແນະນຳ. ຢ່າງໃດກໍ່ຕາມ, ການກວດສອບແມ່ນຂະຫຍາຍອອກໄປເພື່ອເຕືອນກ່ຽວກັບການຂາດ virtual
destructor ໃນຫ້ອງຮຽນພື້ນຖານທີ່ບໍ່ແມ່ນ polymorphic ທີ່ສາມາດເຂົ້າເຖິງໄດ້ຄືກັນ.

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

-Wstrict-null-sentinel (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນກ່ຽວກັບການນໍາໃຊ້ "NULL" ທີ່ບໍ່ມີການຂັບໄລ່ເປັນ sentinel. ເມື່ອລວບລວມພຽງແຕ່ກັບ GCC
ນີ້ແມ່ນຕົວສົ່ງທີ່ຖືກຕ້ອງ, ຍ້ອນວ່າ "NULL" ຖືກກໍານົດເປັນ "__null". ເຖິງແມ່ນວ່າມັນເປັນ null
ຕົວຊີ້ຄົງທີ່ແທນທີ່ຈະເປັນຕົວຊີ້ null, ມັນຮັບປະກັນວ່າມີຂະຫນາດດຽວກັນ
ເປັນຕົວຊີ້. ແຕ່ການນໍາໃຊ້ນີ້ແມ່ນບໍ່ສາມາດເຄື່ອນທີ່ໃນທົ່ວ 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", "static_cast", "reinterpret_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 ++ ພະຍາຍາມຮັກສາຄວາມບໍ່ລົງນາມ, ແຕ່ມາດຕະຖານບັງຄັບໃຊ້ໃນປະຈຸບັນ
ພຶດຕິ ກຳ.

ທາງເລືອກໃນການ ການຄວບຄຸມ 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 ທາງ​ເລືອກ, ຖ້າ​ຫາກ​ວ່າ​ປະ​ຈຸ​ບັນ, overrides ໄດ້
-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 ທີ່ເອີ້ນໃຊ້ຕົວສ້າງເລີ່ມຕົ້ນທີ່ບໍ່ແມ່ນເລື່ອງຫຍໍ້ໆ
ຕົວແປດັ່ງກ່າວ, ໃນຄໍາສັ່ງ, ແລະຫຼັງຈາກນັ້ນກັບຄືນ "ຕົນເອງ". ເຊັ່ນດຽວກັນ, ກວດເບິ່ງວ່າມີ
ຕົວແປ instance ແມ່ນວັດຖຸ C ++ ທີ່ມີຕົວທໍາລາຍທີ່ບໍ່ແມ່ນເລື່ອງເລັກໆນ້ອຍໆ, ແລະຖ້າເປັນດັ່ງນັ້ນ, ສັງເຄາະ.
ພິເສດ "- (void).cxx_destruct" ວິທີການທີ່ດໍາເນີນການ destructors ເລີ່ມຕົ້ນດັ່ງກ່າວທັງຫມົດ, ໃນ
ຄໍາສັ່ງປີ້ນກັບກັນ.

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

ໃນ​ຖາ​ນະ​ເປັນ​ຂອງ​ລາຍ​ລັກ​ອັກ​ສອນ​ນີ້​, ພຽງ​ແຕ່​ແລ່ນ 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("...")" ໂດຍບໍ່ຄໍານຶງເຖິງຕົວເລືອກແຖວຄໍາສັ່ງ.

-fno-local-ivars
ໂດຍຄ່າເລີ່ມຕົ້ນຕົວແປ instance ໃນ Objective-C ສາມາດເຂົ້າເຖິງໄດ້ຄືກັບວ່າພວກມັນຢູ່ໃນທ້ອງຖິ່ນ
ຕົວແປຈາກພາຍໃນວິທີການຂອງຫ້ອງຮຽນທີ່ເຂົາເຈົ້າໄດ້ຖືກປະກາດໃນ. ນີ້ສາມາດນໍາໄປສູ່ການ
shadowing ລະຫວ່າງຕົວແປ instance ແລະຕົວແປອື່ນໆທີ່ປະກາດຢູ່ໃນທ້ອງຖິ່ນ
ພາຍໃນວິທີການຫ້ອງຮຽນຫຼືທົ່ວໂລກທີ່ມີຊື່ດຽວກັນ. ການ​ລະ​ບຸ -fno-local-ivars
ທຸງປິດການທໍາງານນີ້ດັ່ງນັ້ນຈຶ່ງຫຼີກເວັ້ນບັນຫາ shadowing ຕົວປ່ຽນແປງ.

-fivar-visibility=[ສາທາລະນະ|ປ້ອງກັນ|ສ່ວນຕົວ|ຊຸດ]
ຕັ້ງຄ່າການເບິ່ງເຫັນຕົວແປ instance ເລີ່ມຕົ້ນເປັນທາງເລືອກທີ່ລະບຸໄວ້ເພື່ອໃຫ້ຕົວຢ່າງນັ້ນ
ຕົວແປທີ່ປະກາດຢູ່ນອກຂອບເຂດຂອງຄໍາແນະນໍາຕົວແກ້ໄຂການເຂົ້າເຖິງໃດໆທີ່ເປັນຄ່າເລີ່ມຕົ້ນຂອງ
ການ​ສັງ​ເກດ​ທີ່​ລະ​ບຸ​ໄວ້​.

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

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

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

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

-fdiagnostics-color[=ເມື່ອ​ໃດ​]
-fno-diagnostics-ສີ
ໃຊ້ສີໃນການວິນິດໄສ. ເມື່ອ​ໃດ​ is ບໍ່ເຄີຍ, ສະເຫມີໄປ, ຫຼື ອັດຕະໂນມັດ. ຄ່າເລີ່ມຕົ້ນແມ່ນຂຶ້ນກັບວິທີການ
compiler ໄດ້ຖືກກໍານົດ, ມັນສາມາດເປັນອັນໃດອັນຫນຶ່ງຂ້າງເທິງ ເມື່ອ​ໃດ​ ທາງ​ເລືອກ​ຫຼື​ຍັງ​
ບໍ່ເຄີຍ if GCC_COLORS ຕົວແປສະພາບແວດລ້ອມແມ່ນບໍ່ມີຢູ່ໃນສະພາບແວດລ້ອມ, ແລະ ອັດຕະໂນມັດ
ຖ້າບໍ່ດັ່ງນັ້ນ. ອັດຕະໂນມັດ ຫມາຍຄວາມວ່າຈະໃຊ້ສີພຽງແຕ່ເມື່ອຄວາມຜິດພາດມາດຕະຖານເປັນຈຸດ. ໄດ້
ຮູບແບບ -fdiagnostics-ສີ ແລະ -fno-diagnostics-ສີ ແມ່ນນາມແຝງສໍາລັບ
-fdiagnostics-color=ສະເໝີ ແລະ -fdiagnostics-color=ບໍ່ເຄີຍ, ຕາມລໍາດັບ.

ສີແມ່ນຖືກກໍານົດໂດຍຕົວແປສະພາບແວດລ້ອມ GCC_COLORS. ມູນ​ຄ່າ​ຂອງ​ມັນ​ແມ່ນ​ລໍາ​ໄສ້
ລາຍຊື່ຄວາມສາມາດທີ່ແຍກອອກ ແລະເລືອກສາຍຍ່ອຍຂອງ Graphic Rendition (SGR). SGR
ຄໍາສັ່ງຖືກຕີຄວາມຫມາຍໂດຍ terminal ຫຼື terminal emulator. (ເບິ່ງພາກໃນ
ເອ ກະ ສານ ຂອງ terminal ຂໍ້ ຄວາມ ຂອງ ທ່ານ ສໍາ ລັບ ຄຸນ ຄ່າ ທີ່ ອະ ນຸ ຍາດ ແລະ ຄວາມ ຫມາຍ ຂອງ ເຂົາ ເຈົ້າ ເປັນ
ຄຸນ​ລັກ​ສະ​ນະ​ຂອງ​ຕົວ​ອັກ​ສອນ​
ແລະສາມາດ concatenated ກັບ semicolons. ຄ່າທົ່ວໄປທີ່ຈະລວມເຂົ້າກັນລວມມີ 1 ສໍາລັບການ
ກ້າຫານ, 4 ສໍາລັບການ underline, 5 ສໍາລັບການກະພິບ, 7 ສໍາລັບປີ້ນກັບກັນ, 39 ສໍາລັບສີພື້ນຫລັງເລີ່ມຕົ້ນ, 30
to 37 ສໍາ​ລັບ​ສີ​ພື້ນ​ຫນ້າ​, 90 to 97 ສໍາ​ລັບ​ການ 16 ສີ​ໃນ​ຮູບ​ແບບ​ສີ​ທາງ​ຫນ້າ​, 38 5 0 to
38 5 255 ສໍາລັບ 88 ສີແລະ 256 ໂຫມດສີດ້ານຫນ້າ, 49 ສໍາລັບພື້ນຫລັງເລີ່ມຕົ້ນ
ສີ, 40 to 47 ສໍາ​ລັບ​ສີ​ພື້ນ​ຖານ​, 100 to 107 ສໍາລັບສີພື້ນຫຼັງຂອງໂໝດ 16 ສີ,
ແລະ 48 5 0 to 48 5 255 ສໍາລັບ 88-color ແລະ 256-color modes ສີພື້ນຫລັງ.

ຄ່າເລີ່ມຕົ້ນ GCC_COLORS is

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

ບ່ອນທີ່ 01 31 ເປັນສີແດງເຂັ້ມ, 01 35 ເປັນສີມ່ວງແດງເຂັ້ມ, 01 36 ແມ່ນສີຟ້າເຂັ້ມ, 01 32 ແມ່ນກ້າຫານ
ສີຂຽວແລະ 01 ແມ່ນກ້າຫານ. ການຕັ້ງຄ່າ GCC_COLORS ໄປຫາສະຕຣິງຫວ່າງເປົ່າປິດການໃຊ້ງານສີ.
ຄວາມ​ສາ​ມາດ​ສະ​ຫນັບ​ສະ​ຫນູນ​ແມ່ນ​ດັ່ງ​ຕໍ່​ໄປ​ນີ້​.

"ຄວາມຜິດພາດ="
SGR substring ສໍາລັບຄວາມຜິດພາດ: ເຄື່ອງຫມາຍ.

"ຄຳເຕືອນ="
SGR substring ສໍາລັບການເຕືອນໄພ: ເຄື່ອງຫມາຍ.

"ຫມາຍເຫດ="
SGR substring ສໍາລັບຫມາຍເຫດ: ເຄື່ອງຫມາຍ.

"caret="
SGR substring ສໍາລັບເສັ້ນ cart.

"locus="
SGR substring ສໍາລັບຂໍ້ມູນສະຖານທີ່, file:line or file:line:column ແລະອື່ນໆ

"quote="
SGR substring ສໍາລັບຂໍ້ມູນທີ່ພິມຢູ່ໃນວົງຢືມ.

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

-fno-diagnostics-show-caret
ໂດຍຄ່າເລີ່ມຕົ້ນ, ແຕ່ລະການວິນິດໄສທີ່ປ່ອຍອອກມາລວມມີສາຍຕົ້ນສະບັບ ແລະ ຄາບ '^'
ຊີ້ບອກຖັນ. ທາງເລືອກນີ້ສະກັດກັ້ນຂໍ້ມູນນີ້. ເສັ້ນແຫຼ່ງແມ່ນ
ຕັດເປັນ n ລັກສະນະ, ຖ້າຫາກວ່າ -fmessage-length=n ທາງເລືອກແມ່ນໃຫ້. ເມື່ອຜົນຜະລິດ
ແມ່ນເຮັດກັບ terminal, width ໄດ້ຖືກຈໍາກັດກັບ width ໃຫ້ໂດຍ ສີ
ຕົວແປສະພາບແວດລ້ອມຫຼື, ຖ້າບໍ່ໄດ້ຕັ້ງ, ເປັນຄວາມກວ້າງຂອງເຄື່ອງໃຊ້ໄຟຟ້າ.

ທາງເລືອກໃນການ 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++ ພາສາ ທາງເລືອກໃນການ.

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

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

-Wpedantic
- 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 ++ ໄດ້ຮັບການສະຫນັບສະຫນູນເຊັ່ນດຽວກັນ. ດ້ວຍທາງເລືອກນີ້, ພວກເຂົາຖືກປະຕິເສດ.

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

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

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

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

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

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

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

-waddress -Warray-bounds=1 (ພຽງແຕ່ກັບ -O2) -Wc++11-compat -Wc++14-compat
-Wchar-subscripts -Wenum ປຽບທຽບ (ໃນ C/ObjC; ອັນນີ້ແມ່ນເປີດໂດຍຄ່າເລີ່ມຕົ້ນໃນ C++)
-Wimplicit-int (C ແລະ Objective-C ເທົ່ານັ້ນ) -Wimplicit-function-ປະກາດ (ຄ ແລະ
Objective-C ເທົ່ານັ້ນ) - ຄໍາເຫັນ -Wformat - ຜູ້ຍິງ (ພຽງແຕ່ສໍາລັບ C/ObjC ແລະເວັ້ນເສຍແຕ່
- freestanding) -Wmaybe-unitialized -Wmissing-braces (ສະເພາະ C/ObjC) -Wnonnull
-Wopenmp-simd -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++ ເທົ່ານັ້ນ) ພື້ນຖານສະເໝືອນທີ່ບໍ່ຊັດເຈນ.

* (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
-Wformat=n
ກວດເບິ່ງການໂທຫາ "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 ບໍ່ຮອງຮັບການເຕືອນກ່ຽວກັບຄຸນສົມບັດທີ່ເກີນກວ່າ
ຂໍ້ຈໍາກັດຂອງຫ້ອງສະຫມຸດສະເພາະ. ຢ່າງໃດກໍຕາມ, ຖ້າ -Wpedantic ຖືກນໍາໃຊ້ກັບ -Wformat,
ມີການເຕືອນກ່ຽວກັບລັກສະນະຮູບແບບທີ່ບໍ່ແມ່ນຢູ່ໃນສະບັບມາດຕະຖານທີ່ເລືອກ (ແຕ່ບໍ່ແມ່ນ
ສໍາລັບຮູບແບບ "strfmon", ນັບຕັ້ງແຕ່ນັ້ນບໍ່ແມ່ນຢູ່ໃນສະບັບຂອງມາດຕະຖານ C).

-Wformat=1
-Wformat
ທາງເລືອກ -Wformat ເທົ່າກັບ -Wformat=1, ແລະ -Wno ຮູບ​ແບບ​ ເທົ່າກັບ
-Wformat=0ທີ່ຢູ່ ຕັ້ງແຕ່ -Wformat ຍັງກວດເບິ່ງການໂຕ້ຖຽງຮູບແບບ null ສໍາລັບຫຼາຍໆອັນ
ໜ້າ ທີ່, -Wformat ຍັງໝາຍເຖິງ -Wnonnull. ບາງດ້ານຂອງຮູບແບບລະດັບນີ້
ການກວດສອບສາມາດປິດໄດ້ໂດຍທາງເລືອກ: -Wno-format-contains-nul,
-Wno-format-extra-args, ແລະ -Wno-format-zero-length. -Wformat ຖືກເປີດໃຊ້ໂດຍ
- ຝາ.

-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=2
ເປີດນໍາໃຊ້ -Wformat ບວກກັບການກວດສອບຮູບແບບເພີ່ມເຕີມ. ໃນປັດຈຸບັນເທົ່າກັບ -Wformat
-Wformat-nonliteral -Wformat ຄວາມ​ປອດ​ໄພ​ -Wformat-y2k.

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

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

- ການ​ລົງ​ນາມ​ຮູບ​ແບບ​ຮູບ​ແບບ​
If -Wformat ໄດ້ຖືກລະບຸໄວ້, ຍັງເຕືອນຖ້າຫາກວ່າສະຕຣິງຮູບແບບຕ້ອງການ unsigned
ການໂຕ້ຖຽງແລະການໂຕ້ຖຽງໄດ້ຖືກເຊັນແລະໃນທາງກັບກັນ.

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

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

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

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

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

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

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

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

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

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

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();
ອື່ນ
ບາ ();
}
}

ນອກຈາກນີ້ຍັງເຕືອນສໍາລັບການນໍາໃຊ້ອັນຕະລາຍຂອງການຂະຫຍາຍ GNU ກັບ "?:" ທີ່ມີ operand ກາງທີ່ຖືກລະເວັ້ນ.
ເມື່ອເງື່ອນໄຂໃນ "?": 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 ++.

-Wno-return-local-addr
ຢ່າເຕືອນກ່ຽວກັບການກັບຄືນຕົວຊີ້ (ຫຼືໃນ C ++, ເອກະສານອ້າງອີງ) ໄປຫາຕົວແປທີ່ໄປ
ອອກຈາກຂອບເຂດຫຼັງຈາກຟັງຊັນກັບຄືນມາ.

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

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

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

-Wshift-ນັບ-ລົບ
ເຕືອນຖ້າການນັບການປ່ຽນແປງເປັນລົບ. ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-Wshift-count-overflow
ເຕືອນຖ້າ shift ນັບ >= width of type. ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

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

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

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

-Wswitch-bool
ເຕືອນທຸກຄັ້ງທີ່ຂໍ້ຄວາມ "ສະຫຼັບ" ມີດັດຊະນີຂອງປະເພດ boolean. ມັນເປັນໄປໄດ້
ສະກັດກັ້ນການເຕືອນນີ້ໂດຍການສົ່ງສັນຍານການຄວບຄຸມໄປຫາປະເພດອື່ນທີ່ບໍ່ແມ່ນ
"ບູລ". ຍົກ​ຕົວ​ຢ່າງ:

ສະຫຼັບ ((int) (a == 4))
{
...
}

ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນສຳລັບໂປຣແກຣມ C ແລະ C++.

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

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

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

ເພື່ອສະກັດກັ້ນການເຕືອນນີ້ໃຫ້ໃຊ້ຄຸນລັກສະນະ "ບໍ່ໄດ້ໃຊ້".

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

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

ເພື່ອສະກັດກັ້ນການເຕືອນນີ້ໃຫ້ໃຊ້ຄຸນລັກສະນະ "ບໍ່ໄດ້ໃຊ້".

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

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

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

ເພື່ອສະກັດກັ້ນການເຕືອນນີ້ໃຫ້ໃຊ້ຄຸນລັກສະນະ "ບໍ່ໄດ້ໃຊ້".

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

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

ເພື່ອສະກັດກັ້ນການເຕືອນນີ້ໃຫ້ໃຊ້ຄຸນລັກສະນະ "ບໍ່ໄດ້ໃຊ້".

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

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

ເພື່ອສະກັດກັ້ນການເຕືອນນີ້ໃຫ້ໃຊ້ຄຸນລັກສະນະ "ບໍ່ໄດ້ໃຊ້".

-Wunused-value
ເຕືອນທຸກຄັ້ງທີ່ຄຳຖະແຫຼງຄຳນວນຜົນທີ່ບໍ່ໄດ້ໃຊ້ຢ່າງຈະແຈ້ງ. ເພື່ອສະກັດກັ້ນ
ການເຕືອນໄພນີ້ເຮັດໃຫ້ການສະແດງອອກທີ່ບໍ່ໄດ້ໃຊ້ເປັນ "ໂມ້". ນີ້​ປະ​ກອບ​ມີ​ການ​ສະ​ແດງ​ອອກ -
ຖະແຫຼງການ ຫຼືທາງຊ້າຍຂອງເຄື່ອງໝາຍຈຸດທີ່ບໍ່ມີຜົນຂ້າງຄຽງ.
ຕົວຢ່າງເຊັ່ນ "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
ສໍາລັບຕົວແປອັດຕະໂນມັດ, ຖ້າມີເສັ້ນທາງຈາກຫນ້າທີ່ເຂົ້າໄປຫາການນໍາໃຊ້
ຕົວ​ປ່ຽນ​ແປງ​ທີ່​ໄດ້​ຮັບ​ການ​ເລີ່ມ​ຕົ້ນ​, ແຕ່​ວ່າ​ມີ​ບາງ​ເສັ້ນ​ທາງ​ອື່ນໆ​ສໍາ​ລັບ​ການ​
ຕົວແປບໍ່ໄດ້ຖືກເລີ່ມຕົ້ນ, compiler ປ່ອຍຄໍາເຕືອນຖ້າມັນບໍ່ສາມາດພິສູດໄດ້
ເສັ້ນທາງທີ່ບໍ່ໄດ້ເລີ່ມຕົ້ນແມ່ນບໍ່ໄດ້ປະຕິບັດໃນເວລາແລ່ນ. ການເຕືອນເຫຼົ່ານີ້ຖືກສ້າງເປັນທາງເລືອກ
ເນື່ອງຈາກວ່າ 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=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
ເຕືອນກ່ຽວກັບກໍລະນີທີ່ມີທັງຄໍາຖາມແລະງ່າຍທີ່ຈະຫຼີກເວັ້ນ. ຕົວຢ່າງ, ກັບ
-fstrict-ລົ້ນ, compiler simplifies "x + 1 > x" ເປັນ 1. ລະດັບນີ້
-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" ແມ່ນ simplified ກັບ "x * 2".

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

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

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

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

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

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

-Wsuggest-final-methods
ເຕືອນກ່ຽວກັບວິທີການ virtual ທີ່ຄຸນນະພາບລະຫັດຈະຖືກປັບປຸງຖ້າຫາກວ່າວິທີການແມ່ນ
ປະກາດດ້ວຍຕົວລະບຸ "ສຸດທ້າຍ" C++11, ຫຼື, ຖ້າເປັນໄປໄດ້, ປະເພດຂອງມັນຖືກປະກາດໃນ
namespace ທີ່ບໍ່ເປີດເຜີຍຊື່ ຫຼືມີຕົວລະບຸ "ສຸດທ້າຍ". ການເຕືອນໄພນີ້ມີປະສິດທິພາບຫຼາຍຂຶ້ນ
ດ້ວຍການເພີ່ມປະສິດທິພາບເວລາເຊື່ອມຕໍ່, ບ່ອນທີ່ຂໍ້ມູນກ່ຽວກັບກາຟລໍາດັບຊັ້ນແມ່ນ
ສົມບູນກວ່າ. ມັນແມ່ນແນະນໍາໃຫ້ທໍາອິດພິຈາລະນາຄໍາແນະນໍາຂອງ
-Wsuggest-final-types ແລະຫຼັງຈາກນັ້ນສ້າງໃຫມ່ດ້ວຍຄໍາບັນຍາຍໃຫມ່.

-Wsuggest-override
ເຕືອນກ່ຽວກັບການ overriding ຟັງຊັນ virtual ທີ່ບໍ່ໄດ້ຫມາຍດ້ວຍ override keyword.

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

-Warray-bounds=1
ນີ້ແມ່ນລະດັບການເຕືອນໄພຂອງ - Warray-bounds ແລະຖືກເປີດໃຊ້ໂດຍ - ຝາ; ລະດັບສູງ
ບໍ່ແມ່ນ, ແລະຕ້ອງໄດ້ຮັບການຮ້ອງຂໍຢ່າງຈະແຈ້ງ.

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

-Wbool-ປຽບທຽບ
ເຕືອນກ່ຽວກັບການສະແດງອອກ boolean ທຽບກັບຄ່າ integer ທີ່ແຕກຕ່າງຈາກ
"ຈິງ"/"ບໍ່ຖືກຕ້ອງ". ຕົວຢ່າງ, ການປຽບທຽບຕໍ່ໄປນີ້ແມ່ນບໍ່ຖືກຕ້ອງສະເໝີ:

int n = 5;
...
ຖ້າ ((n > 1) == 2) { ... }

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

-Wno-discarded-qualifiers (C ແລະ Objective-C ເທົ່ານັ້ນ)
ຢ່າເຕືອນຖ້າຕົວຊີ້ປະເພດຢູ່ໃນຕົວຊີ້ຖືກຍົກເລີກ. ໂດຍປົກກະຕິ, ໄດ້
compiler ເຕືອນຖ້າຕົວແປ "const char *" ຖືກສົ່ງກັບຟັງຊັນທີ່ໃຊ້ "char
*" ພາລາມິເຕີ. ທາງເລືອກນີ້ສາມາດຖືກໃຊ້ເພື່ອສະກັດກັ້ນການເຕືອນດັ່ງກ່າວ.

-Wno-discarded-array-qualifiers (C ແລະ Objective-C ເທົ່ານັ້ນ)
ຢ່າເຕືອນຖ້າປະເພດຄຸນສົມບັດຢູ່ໃນອາເຣທີ່ເປັນເປົ້າໝາຍຕົວຊີ້
ຍົກເລີກ. ໂດຍປົກກະຕິ, compiler ເຕືອນຖ້າຕົວແປ "const int (*)[]" ຖືກສົ່ງໄປຫາ.
ຟັງຊັນທີ່ໃຊ້ພາລາມິເຕີ "int (*)[]". ທາງເລືອກນີ້ສາມາດຖືກນໍາໃຊ້ເພື່ອສະກັດກັ້ນ
ການເຕືອນໄພດັ່ງກ່າວ.

-Wno-incompatible-pointer-types (C ແລະ Objective-C ເທົ່ານັ້ນ)
ຢ່າເຕືອນເມື່ອມີການແປງລະຫວ່າງຕົວຊີ້ທີ່ມີປະເພດທີ່ບໍ່ເຂົ້າກັນໄດ້.
ຄໍາເຕືອນນີ້ແມ່ນສໍາລັບກໍລະນີທີ່ບໍ່ກວມເອົາໂດຍ -Wno-pointer-sign, ເຊິ່ງເຕືອນສໍາລັບຕົວຊີ້
argument passing ຫຼືການມອບຫມາຍທີ່ມີເຊັນທີ່ແຕກຕ່າງກັນ.

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

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

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

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

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

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

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

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

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

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

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

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

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

-wno-endif-labels
ຢ່າເຕືອນທຸກຄັ້ງທີ່ "#else" ຫຼື "#endif" ຖືກຕິດຕາມດ້ວຍຂໍ້ຄວາມ.

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

-Wno-shadow-ivar (ຈຸດປະສົງ-C ເທົ່ານັ້ນ)
ຢ່າເຕືອນທຸກຄັ້ງທີ່ຕົວແປທ້ອງຖິ່ນບັງຕົວແປຕົວແປໃນ Objective-C
ວິທີການ.

-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 ເທົ່ານັ້ນ)
ເມື່ອໃຊ້ປະສົມປະສານກັບ -Wformat ແລະ - pedantic ໂດຍບໍ່ມີການຂະຫຍາຍ GNU, ນີ້
ທາງເລືອກປິດການເຕືອນກ່ຽວກັບການທີ່ບໍ່ແມ່ນ ISO "printf" / "scanf" ຕົວລະບຸຄວາມກວ້າງຂອງຮູບແບບ
"I32", "I64", ແລະ "I" ທີ່ໃຊ້ໃນເປົ້າຫມາຍ Windows, ເຊິ່ງຂຶ້ນກັບເວລາແລ່ນ MS.

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

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

-Wbad-function-cast (C ແລະ Objective-C ເທົ່ານັ້ນ)
ເຕືອນເມື່ອການໂທຟັງຊັນຖືກສົ່ງສັນຍານໄປຫາປະເພດທີ່ບໍ່ກົງກັນ. ຕົວຢ່າງ, ເຕືອນຖ້າມີການໂທ
ໄປຫາຟັງຊັນທີ່ສົ່ງຄືນປະເພດຈຳນວນເຕັມແມ່ນຖືກສົ່ງກັບປະເພດຕົວຊີ້.

-Wc90-c99-compat (C ແລະ Objective-C ເທົ່ານັ້ນ)
ເຕືອນກ່ຽວກັບຄຸນສົມບັດທີ່ບໍ່ມີຢູ່ໃນ ISO C90, ແຕ່ມີຢູ່ໃນ ISO C99. ຕົວ​ຢ່າງ,
ເຕືອນກ່ຽວກັບການນໍາໃຊ້ array ຄວາມຍາວຕົວແປ, ປະເພດ "ຍາວຍາວ", ປະເພດ "bool", ປະສົມ
ຕົວອັກສອນ, ຕົວກໍານົດການເລີ່ມຕົ້ນ, ແລະອື່ນໆ. ທາງເລືອກນີ້ແມ່ນເປັນເອກະລາດຂອງ
ຮູບ​ແບບ​ມາດ​ຕະ​ຖານ​. ຄຳເຕືອນຖືກປິດການນຳໃຊ້ໃນການສະແດງຜົນທີ່ຕໍ່ໄປນີ້ "__extension__".

-Wc99-c11-compat (C ແລະ Objective-C ເທົ່ານັ້ນ)
ເຕືອນກ່ຽວກັບຄຸນສົມບັດທີ່ບໍ່ມີຢູ່ໃນ ISO C99, ແຕ່ມີຢູ່ໃນ ISO C11. ຕົວ​ຢ່າງ,
ເຕືອນກ່ຽວກັບການນໍາໃຊ້ໂຄງສ້າງທີ່ບໍ່ເປີດເຜີຍຊື່ແລະສະຫະພັນ, "_Atomic" qualifier,
"_Thread_local" ຕົວລະບຸລະດັບການເກັບຮັກສາ, "_Alignas", ຕົວປະຕິບັດການ "Alignof",
ຄໍາສໍາຄັນ "_generic", ແລະອື່ນໆ. ຕົວເລືອກນີ້ແມ່ນບໍ່ຂຶ້ນກັບຮູບແບບມາດຕະຖານ.
ຄຳເຕືອນຖືກປິດການນຳໃຊ້ໃນການສະແດງຜົນທີ່ຕໍ່ໄປນີ້ "__extension__".

-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. ຄໍາເຕືອນນີ້
ເປີດ - ການ​ຂັດ​ຂວາງ​ ແລະຖືກເປີດໃຊ້ໂດຍ - ຝາ.

-Wc++14-compat (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນກ່ຽວກັບໂຄງສ້າງ C++ ທີ່ມີຄວາມໝາຍແຕກຕ່າງກັນລະຫວ່າງ ISO C++ 2011 ແລະ ISO C++ 2014.
ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ.

-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" ຫຼື "vfork". ການເຕືອນໄພນີ້ແມ່ນ
ຍັງເປີດໃຊ້ງານໂດຍ -Wextra.

- ສະ​ຫນັບ​ສະ​ຫນູນ​ຕາມ​ເງື່ອນ​ໄຂ​ (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນສໍາລັບໂຄງສ້າງທີ່ຮອງຮັບ (C++11 [intro.defs]).

- ການ​ປ່ຽນ​ແປງ​
ເຕືອນສໍາລັບການແປງ 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 ການ​ປ່ຽນ​ແປງ​ is
ເປີດໃຊ້ຢ່າງຈະແຈ້ງ.

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

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

-Wdate-time
ເຕືອນເມື່ອພົບມາໂຄຣ "__TIME__", "__DATE__" ຫຼື "__TIMESTAMP__" ຍ້ອນພວກມັນ
ອາດຈະປ້ອງກັນການລວບລວມການແຜ່ພັນທີ່ມີລັກສະນະຄ້າຍຄືກັນເລັກນ້ອຍ.

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

-Wuseless-cast (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນເມື່ອສະແດງອອກເປັນປະເພດຂອງຕົນເອງ.

- ຮ່າງກາຍອ່ອນເພຍ
ເຕືອນຖ້າຫາກວ່າຮ່າງກາຍຫວ່າງເປົ່າເກີດຂຶ້ນໃນ "ຖ້າ", "ອື່ນ" ຫຼື "ເຮັດໃນຂະນະທີ່". ຄຳເຕືອນນີ້
ຍັງຖືກເປີດໃຊ້ໂດຍ -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, ທາງເລືອກນີ້ຖືກເປີດໃຊ້ໂດຍ - ການ​ປ່ຽນ​ແປງ​.

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

- ການ​ຈັດ​ແບ່ງ​ຂະ​ຫນາດ​ໃຫຍ່​ (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນກ່ຽວກັບຄຳນິຍາມຂອງຟັງຊັນການຈັດສັນທີ່ບໍ່ຂະໜາດ

void operator ລົບ (void *) noexcept;
void operator delete[] (void *) noexcept;

ໂດຍບໍ່ມີຄໍານິຍາມຂອງຫນ້າທີ່ການຈັດສັນຂະຫນາດທີ່ສອດຄ້ອງກັນ

void operator ລົບ (void *, std::size_t) noexcept;
void operator delete[] (void *, std::size_t) noexcept;

ຫຼືໃນທາງກັບກັນ. ເປີດໃຊ້ໂດຍ -Wextra ຄຽງຄູ່ກັບການ -fsized-deallocation.

-Wsizeof-pointer-memaccess
ເຕືອນສໍາລັບພາລາມິເຕີຄວາມຍາວທີ່ຫນ້າສົງໄສຕໍ່ກັບຟັງຊັນສະຕຣິງແລະຫນ່ວຍຄວາມຈໍາທີ່ແນ່ນອນ
ຖ້າການໂຕ້ຖຽງໃຊ້ "sizeof". ຄໍາເຕືອນນີ້ເຕືອນ eg ກ່ຽວກັບ "memset (ptr, 0, sizeof
(ptr));" ຖ້າ "ptr" ບໍ່ແມ່ນ array, ແຕ່ເປັນຕົວຊີ້, ແລະແນະນໍາການແກ້ໄຂທີ່ເປັນໄປໄດ້, ຫຼື.
ກ່ຽວກັບ "memcpy (&foo, ptr, sizeof (&foo));". ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ.

-Wsizeof-array-argument
ເຕືອນເມື່ອຕົວປະຕິບັດການ "sizeof" ຖືກນໍາໃຊ້ກັບພາລາມິເຕີທີ່ຖືກປະກາດວ່າເປັນອາເຣ
ໃນ​ຄໍາ​ນິ​ຍາມ​ຫນ້າ​ທີ່​. ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນສຳລັບໂປຣແກຣມ C ແລະ C++.

-Wmemset-transposed-args
ເຕືອນສໍາລັບການໂທທີ່ຫນ້າສົງໄສກັບ "memset" ຟັງຊັນໃນຕົວ, ຖ້າການໂຕ້ຖຽງທີສອງແມ່ນ.
ບໍ່ແມ່ນສູນ ແລະການໂຕ້ຖຽງທີສາມແມ່ນສູນ. ນີ້ເຕືອນ eg@ ກ່ຽວກັບ "memset (buf, sizeof
buf, 0)" ເຊິ່ງສ່ວນຫຼາຍອາດຈະເປັນ "memset (buf, 0, sizeof buf)" ແທນ.
ການວິນິດໄສຈະຖືກປ່ອຍອອກມາພຽງແຕ່ຖ້າການໂຕ້ຖຽງທີສາມແມ່ນສູນຕົວໜັງສື. ຖ້າຫາກວ່າມັນເປັນບາງ
ການສະແດງຜົນທີ່ຖືກພັບເປັນສູນ, ສຽງໂຫວດທັງຫມົດສູນໄປຫາບາງປະເພດ, ແລະອື່ນໆ, ມັນແມ່ນຫນ້ອຍ
ອາດຈະເປັນທີ່ຜູ້ໃຊ້ໄດ້ແລກປ່ຽນການໂຕ້ຖຽງຜິດພາດແລະບໍ່ມີການເຕືອນໄພຖືກປ່ອຍອອກມາ.
ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ.

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

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

-Wlogical-not-partheses
ເຕືອນກ່ຽວກັບເຫດຜົນບໍ່ໄດ້ໃຊ້ໃນຕົວປະຕິບັດການດ້ານຊ້າຍມືຂອງການປຽບທຽບ. ນີ້
ທາງເລືອກບໍ່ໄດ້ເຕືອນຖ້າ RHS operand ເປັນປະເພດ boolean. ຈຸດປະສົງຂອງມັນແມ່ນເພື່ອ
ກວດຫາລະຫັດທີ່ໜ້າສົງໄສເຊັ່ນ:

int a;
...
ຖ້າ (!a > 1) { ... }

ມັນເປັນໄປໄດ້ທີ່ຈະສະກັດກັ້ນການເຕືອນໄພໂດຍການຫໍ່ LHS ເຂົ້າໄປໃນວົງເລັບ:

ຖ້າ ((!a) > 1) { ... }

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

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

-Wno-aggressive-loop-optimizations
ເຕືອນຖ້າຫາກວ່າຢູ່ໃນ loop ທີ່ມີຈໍານວນຄົງທີ່ຂອງ reterations, compiler ກວດພົບບໍ່ໄດ້ກໍານົດ
ພຶດຕິກຳໃນບາງຄຳຖະແຫຼງໃນລະຫວ່າງການເຮັດຊ້ຳໜຶ່ງ ຫຼືຫຼາຍກວ່ານັ້ນ.

- ຄຸນ​ລັກ​ສະ​ນະ 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 ເທົ່ານັ້ນ)
ເຕືອນຖ້າຟັງຊັນທົ່ວໂລກຖືກກຳນົດໂດຍບໍ່ມີການປະກາດຕົ້ນແບບກ່ອນໜ້າ. ນີ້
ການເຕືອນໄພແມ່ນອອກເຖິງແມ່ນວ່າຄໍານິຍາມຕົວມັນເອງສະຫນອງຕົວແບບ. ໃຊ້ຕົວເລືອກນີ້
ເພື່ອກວດຫາຟັງຊັນທົ່ວໂລກທີ່ບໍ່ມີການປະກາດຕົ້ນແບບທີ່ກົງກັນໃນ a
ໄຟລ໌ຫົວ. ຕົວເລືອກນີ້ບໍ່ຖືກຕ້ອງສໍາລັບ C++ ເພາະວ່າການປະກາດຟັງຊັນທັງໝົດ
ໃຫ້ prototypes ແລະການປະກາດທີ່ບໍ່ກົງກັນປະກາດ overload ແທນທີ່ຈະ
ຂັດກັບການປະກາດກ່ອນໜ້ານີ້. ໃຊ້ -Wmissing ການ​ປະ​ກາດ​ ເພື່ອ​ຊອກ​ຫາ​ທີ່​ຂາດ​ຫາຍ​ໄປ​
ປະກາດໃນ C++.

-Wmissing ການ​ປະ​ກາດ​
ເຕືອນຖ້າຟັງຊັນທົ່ວໂລກຖືກກຳນົດໂດຍບໍ່ມີການປະກາດກ່ອນໜ້າ. ເຮັດແນວນັ້ນເຖິງແມ່ນວ່າ
ຄໍານິຍາມຂອງຕົວມັນເອງສະຫນອງຕົ້ນແບບ. ໃຊ້ຕົວເລືອກນີ້ເພື່ອກວດຫາທົ່ວໂລກ
ຟັງຊັນທີ່ບໍ່ໄດ້ຖືກປະກາດໃນໄຟລ໌ header. ໃນ C, ບໍ່ມີການເຕືອນໄພອອກສໍາລັບ
ປະຕິບັດຫນ້າກັບການປະກາດທີ່ບໍ່ແມ່ນຕົວແບບທີ່ຜ່ານມາ; ໃຊ້ -Wmissing-prototypes ການກວດສອບ
ຕົ້ນແບບທີ່ຂາດຫາຍໄປ. ໃນ 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 } ;

ໃນ C++ ຕົວເລືອກນີ້ບໍ່ໄດ້ເຕືອນກ່ຽວກັບຕົວເລີ່ມຕົ້ນ { } ຫວ່າງເປົ່າ, ຕົວຢ່າງ:

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

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

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

- ປົກກະຕິ[=<none|id|nfc|nfkc>]
ໃນ 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 or
-Wno-ປົກກະຕິ. ທ່ານຄວນເຮັດສິ່ງນີ້ພຽງແຕ່ຖ້າຫາກວ່າທ່ານກໍາລັງໃຊ້ບາງ normalization ອື່ນໆ
scheme (ເຊັ່ນ "D"), ເພາະວ່າຖ້າບໍ່ດັ່ງນັ້ນທ່ານສາມາດສ້າງແມງໄມ້ທີ່ຮູ້ຫນັງສືໄດ້ຢ່າງງ່າຍດາຍ
ເປັນ​ໄປ​ບໍ່​ໄດ້​ທີ່​ຈະ​ເບິ່ງ​.

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

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

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

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

-Wno-odr
ເຕືອນກ່ຽວກັບການລະເມີດກົດລະບຽບຫນຶ່ງຄໍານິຍາມໃນລະຫວ່າງການເພີ່ມປະສິດທິພາບເວລາເຊື່ອມຕໍ່. ຕ້ອງການ
-flto-odr-type-merging ຈະຖືກເປີດໃຊ້. ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-Wopenmp-simd
ເຕືອນຖ້າຕົວແບບລາຄາ vectorizer overrides ຄໍາສັ່ງ OpenMP ຫຼື Cilk Plus simd
ກໍານົດໂດຍຜູ້ໃຊ້. ໄດ້ -fsimd-cost-model=ບໍ່ຈຳກັດ ທາງເລືອກສາມາດນໍາໃຊ້ເພື່ອຜ່ອນຄາຍຄ່າໃຊ້ຈ່າຍ
model

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

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

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

ໂຄງສ້າງ 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" ຢູ່ໃນຟັງຊັນ.

-Wno-inherited-variadic-ctor
ສະກັດກັ້ນການເຕືອນກ່ຽວກັບການໃຊ້ C++11 ສືບທອດຕົວສ້າງເມື່ອຫ້ອງຮຽນພື້ນຖານ
ສືບທອດມາຈາກມີຕົວສ້າງ C variadic; ການເຕືອນໄພແມ່ນເປີດໂດຍຄ່າເລີ່ມຕົ້ນເພາະວ່າ
ellipsis ບໍ່ໄດ້ຖືກສືບທອດ.

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

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

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

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

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

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

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

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

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

-Wvarargs
ເຕືອນເມື່ອມີຄໍາຖາມກ່ຽວກັບການນໍາໃຊ້ macros ທີ່ໃຊ້ເພື່ອຈັດການກັບການໂຕ້ຖຽງຕົວແປເຊັ່ນ
"va_start". ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ. ເພື່ອຍັບຍັ້ງຂໍ້ຄວາມເຕືອນ, ໃຊ້ -Wno-varargs.

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

-Wno-virtual-move-assign
ສະກັດກັ້ນການເຕືອນກ່ຽວກັບການສືບທອດຈາກຖານສະເໝືອນຈິງດ້ວຍການຍ້າຍ C++11 ທີ່ບໍ່ແມ່ນເລື່ອງເລັກໆນ້ອຍໆ
ຜູ້ປະຕິບັດການມອບຫມາຍ. ນີ້ແມ່ນອັນຕະລາຍເພາະວ່າຖ້າພື້ນຖານ virtual ແມ່ນສາມາດບັນລຸໄດ້
ຫຼາຍກວ່າຫນຶ່ງເສັ້ນທາງ, ມັນຖືກຍ້າຍຫຼາຍຄັ້ງ, ຊຶ່ງສາມາດຫມາຍຄວາມວ່າວັດຖຸທັງສອງສິ້ນສຸດລົງໃນ
ການ​ຍ້າຍ​ອອກ​ຈາກ​ລັດ​. ຖ້າຜູ້ປະຕິບັດການມອບຫມາຍຍ້າຍຖືກຂຽນເພື່ອຫຼີກເວັ້ນການຍ້າຍຈາກ
ວັດຖຸທີ່ຍ້າຍມາຈາກ, ການເຕືອນໄພນີ້ສາມາດຖືກປິດໃຊ້ງານໄດ້.

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

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

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

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

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

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

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

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

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

-Wno-designated-init (C ແລະ Objective-C ເທົ່ານັ້ນ)
ສະກັດກັ້ນການເຕືອນໄພເມື່ອຕົວຕັ້ງຕົວຕັ້ງຕົວຕີຖືກໃຊ້ເພື່ອເລີ່ມຕົ້ນໂຄງສ້າງທີ່
ໄດ້ຖືກໝາຍດ້ວຍຄຸນສົມບັດ "designated_init".

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

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

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

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

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

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

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

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

-gpubnames
ສ້າງພາກສ່ວນ .debug_pubnames dwarf ແລະ .debug_pubtypes.

-ggnu-pubnames
ສ້າງພາກສ່ວນ .debug_pubnames ແລະ .debug_pubtypes ໃນຮູບແບບທີ່ເໝາະສົມກັບ
ການປ່ຽນເປັນດັດຊະນີ GDB. ຕົວເລືອກນີ້ມີປະໂຫຍດພຽງແຕ່ກັບຕົວເຊື່ອມຕໍ່ທີ່ສາມາດ
ຜະລິດດັດຊະນີ GDB ຮຸ່ນ 7.

-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 ປົກກະຕິປ່ອຍຂໍ້ມູນການດີບັກ
ສໍາລັບຫ້ອງຮຽນເນື່ອງຈາກວ່າການນໍາໃຊ້ທາງເລືອກນີ້ເພີ່ມຂະຫນາດຂອງຂໍ້ມູນການແກ້ບັນຫາໂດຍ
ຫຼາຍເທົ່າທີ່ເປັນປັດໄຈຂອງສອງ.

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

-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 (ຖ້າອັນນັ້ນຖືກຮອງຮັບ). ມູນຄ່າຂອງ
ສະບັບພາສາ ອາດຈະເປັນ 2, 3, 4 ຫຼື 5; ສະບັບເລີ່ມຕົ້ນສໍາລັບເປົ້າຫມາຍຫຼາຍທີ່ສຸດແມ່ນ 4. DWARF
ເວີຊັ່ນ 5 ແມ່ນພຽງແຕ່ການທົດລອງ.

ໃຫ້ສັງເກດວ່າດ້ວຍ 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-ສະບັບພາສາ.

-gz[=ປະເພດ]
ຜະລິດພາກສ່ວນດີບັກທີ່ຖືກບີບອັດໃນຮູບແບບ DWARF, ຖ້າອັນນັ້ນຖືກຮອງຮັບ. ຖ້າ ປະເພດ is
ບໍ່ໄດ້ໃຫ້, ປະເພດເລີ່ມຕົ້ນແມ່ນຂຶ້ນກັບຄວາມສາມາດຂອງຕົວປະກອບແລະຕົວເຊື່ອມຕໍ່
ໃຊ້ແລ້ວ. ປະເພດ ອາດ​ຈະ​ເປັນ​ຫນຶ່ງ​ໃນ none (ຢ່າບີບອັດພາກສ່ວນດີບັກ), ຊົ່ວຮ້າຍ (ໃຊ້ zlib
ການບີບອັດໃນຮູບແບບ ELF gABI), ຫຼື zlib-gnu (ໃຊ້ການບີບອັດ zlib ໃນ GNU ແບບດັ້ງເດີມ
ຮູບແບບ). ຖ້າຕົວເຊື່ອມຕໍ່ບໍ່ສະຫນັບສະຫນູນການຂຽນສ່ວນດີບັກທີ່ຖືກບີບອັດ, ທາງເລືອກ
ຖືກປະຕິເສດ. ຖ້າບໍ່ດັ່ງນັ້ນ, ຖ້າຜູ້ປະກອບບໍ່ສະຫນັບສະຫນູນພວກເຂົາ, -gz ແມ່ນງຽບໆ
ບໍ່ສົນໃຈໃນເວລາຜະລິດໄຟລ໌ວັດຖຸ.

-gvms
ຜະລິດຂໍ້ມູນການດີບັກໃນຮູບແບບການດີບັກ Alpha/VMS (ຖ້າອັນນັ້ນຖືກຮອງຮັບ). ນີ້
ແມ່ນຮູບແບບທີ່ໃຊ້ໂດຍ DEBUG ໃນລະບົບ Alpha/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.

-fsanitize=ທີ່ຢູ່
ເປີດໃຊ້ AddressSanitizer, ເຄື່ອງກວດຈັບຄວາມຜິດພາດຄວາມຈຳໄວ. ຄໍາແນະນໍາການເຂົ້າເຖິງຫນ່ວຍຄວາມຈໍາແມ່ນ
ເຄື່ອງ​ມື​ເພື່ອ​ກວດ​ສອບ​ນອກ​ເຂດ​ແດນ​ແລະ​ການ​ນໍາ​ໃຊ້​ຫຼັງ​ຈາກ​ການ​ບໍ່​ມີ​ຂໍ້​ບົກ​ພ່ອງ​. ເບິ່ງ
<https://github.com/google/sanitizers/wiki/AddressSanitizer> ສໍາລັບລາຍລະອຽດເພີ່ມເຕີມ. ໄດ້
ພຶດຕິກໍາການແລ່ນເວລາສາມາດໄດ້ຮັບອິດທິພົນໂດຍໃຊ້ ASAN_OPTIONS ສະພາບແວດລ້ອມປ່ຽນແປງ. ເມື່ອ​ໃດ​
ຕັ້ງຄ່າເປັນ "help=1", ທາງເລືອກທີ່ມີຢູ່ແມ່ນສະແດງໃຫ້ເຫັນໃນຕອນເລີ່ມຕົ້ນຂອງ instrumended
ໂຄງການ. ເບິ່ງ
<https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags> ສໍາລັບ ກ
ບັນຊີລາຍຊື່ຂອງທາງເລືອກທີ່ສະຫນັບສະຫນູນ.

-fsanitize=kernel-address
ເປີດໃຊ້ AddressSanitizer ສໍາລັບ Linux kernel. ເບິ່ງhttps://github.com/google/kasan/wiki>
ສໍາລັບລາຍລະອຽດເພີ່ມເຕີມ.

-fsanitize=ກະທູ້
ເປີດໃຊ້ ThreadSanitizer, ເຄື່ອງກວດຈັບຂໍ້ມູນເຊື້ອຊາດໄວ. ຄໍາແນະນໍາການເຂົ້າເຖິງຫນ່ວຍຄວາມຈໍາແມ່ນ
ເຄື່ອງ​ມື​ເພື່ອ​ກວດ​ສອບ​ຂໍ້​ມູນ​ເຊື້ອ​ຊາດ​ແມງ​ໄມ້​. ເບິ່ງ
<https://github.com/google/sanitizers/wiki#threadsanitizer> ສໍາລັບລາຍລະອຽດເພີ່ມເຕີມ. ການ​ແລ່ນ -
ພຶດຕິກໍາທີ່ໃຊ້ເວລາສາມາດໄດ້ຮັບອິດທິພົນໂດຍໃຊ້ TSAN_OPTIONS ສະພາບແວດລ້ອມປ່ຽນແປງ; ເບິ່ງ
<https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags> ສໍາລັບບັນຊີລາຍຊື່ຂອງ
ທາງ​ເລືອກ​ທີ່​ສະ​ຫນັບ​ສະ​ຫນູນ​.

-fsanitize=ຮົ່ວ
ເປີດໃຊ້ LeakSanitizer, ເຄື່ອງກວດຈັບຄວາມຈຳຮົ່ວ. ທາງເລືອກນີ້ພຽງແຕ່ສໍາຄັນສໍາລັບການເຊື່ອມຕໍ່ຂອງ
ສາມາດປະຕິບັດໄດ້ ແລະຖ້າບໍ່ແມ່ນ -fsanitize=ທີ່ຢູ່ neither -fsanitize=ກະທູ້ ຖືກນໍາໃຊ້. ໃນ​ນັ້ນ
ກໍ​ລະ​ນີ​ທີ່​ປະ​ຕິ​ບັດ​ແມ່ນ​ເຊື່ອມ​ຕໍ່​ກັບ​ຫ້ອງ​ສະ​ຫມຸດ​ທີ່ overrides "malloc​" ແລະ​ອື່ນໆ​
ຫນ້າທີ່ຜູ້ຈັດສັນ. ເບິ່ງ
<https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer> ສໍາລັບການເພີ່ມເຕີມ
ລາຍລະອຽດ. ພຶດຕິກໍາການແລ່ນເວລາສາມາດໄດ້ຮັບອິດທິພົນໂດຍໃຊ້ LSAN_OPTIONS ສະພາບແວດລ້ອມ
ຕົວແປ.

-fsanitize=ບໍ່ໄດ້ກຳນົດ
ເປີດໃຊ້ UndefinedBehaviorSanitizer, ເຄື່ອງກວດຈັບພຶດຕິກຳທີ່ບໍ່ໄດ້ກຳນົດໄວ. ຕ່າງໆ
ການ​ຄິດ​ໄລ່​ແມ່ນ​ເປັນ​ເຄື່ອງ​ມື​ເພື່ອ​ກວດ​ສອບ​ພຶດ​ຕິ​ກໍາ​ທີ່​ບໍ່​ໄດ້​ກໍາ​ນົດ​ຢູ່​ໃນ runtime​. ປະຈຸບັນ
ຕົວເລືອກຍ່ອຍແມ່ນ:

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

-fsanitize=integer-divide-by-zero
ກວດພົບການຫານຈໍານວນເຕັມດ້ວຍສູນເຊັ່ນດຽວກັນກັບການຫານ "INT_MIN / -1".

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

-fsanitize=vla-bound
ຕົວເລືອກນີ້ສັ່ງໃຫ້ compiler ກວດເບິ່ງວ່າຂະຫນາດຂອງຄວາມຍາວຕົວແປ
array ເປັນບວກ.

-fsanitize=null
ຕົວເລືອກນີ້ເປີດໃຊ້ການກວດສອບຕົວຊີ້. ໂດຍສະເພາະ, ຄໍາຮ້ອງສະຫມັກທີ່ສ້າງຂຶ້ນດ້ວຍ
ທາງ​ເລືອກ​ນີ້​ເປີດ​ຈະ​ອອກ​ຂໍ້​ຄວາມ​ຜິດ​ພາດ​ໃນ​ເວ​ລາ​ທີ່​ມັນ​ພະ​ຍາ​ຍາມ​ທີ່​ຈະ dereference a
ຕົວຊີ້ NULL, ຫຼືຖ້າການອ້າງອີງ (ອາດຈະເປັນການອ້າງອີງ rvalue) ຖືກຜູກມັດກັບ NULL
ຕົວຊີ້, ຫຼືຖ້າວິທີການຖືກເອີ້ນໃສ່ວັດຖຸທີ່ຊີ້ໂດຍຕົວຊີ້ NULL.

-fsanitize=ກັບຄືນ
ຕົວເລືອກນີ້ເຮັດໃຫ້ການກວດສອບໃບແຈ້ງຍອດກັບຄືນ. ໂຄງການທີ່ສ້າງຂຶ້ນດ້ວຍທາງເລືອກນີ້
ເປີດຈະອອກຂໍ້ຄວາມສະແດງຂໍ້ຜິດພາດໃນເວລາທີ່ສິ້ນສຸດຂອງຟັງຊັນທີ່ບໍ່ແມ່ນ void ແມ່ນ
ບັນລຸໄດ້ໂດຍບໍ່ໄດ້ສົ່ງຄືນຄ່າຕົວຈິງ. ທາງເລືອກນີ້ເຮັດວຽກຢູ່ໃນ C ++ ເທົ່ານັ້ນ.

-fsanitize=signed-integer-overflow
ຕົວເລືອກນີ້ເປີດໃຊ້ການກວດສອບການລົ້ນຈຳນວນເຕັມທີ່ເຊັນແລ້ວ. ພວກເຮົາກວດເບິ່ງວ່າຜົນໄດ້ຮັບຂອງ
"+", "*", ແລະທັງ unary ແລະ binary "-" ບໍ່ overflow ໃນເຊັນ
ເລກຄະນິດສາດ. ໝາຍເຫດ, ກົດລະບຽບການສົ່ງເສີມຈຳນວນເຕັມຈະຕ້ອງຖືກພິຈາລະນາ. ນັ້ນ​ແມ່ນ,
ຕໍ່ໄປນີ້ບໍ່ແມ່ນ overflow:

ເຊັນ char a = SCHAR_MAX;
a++;

-fsanitize=ຂອບເຂດ
ຕົວເລືອກນີ້ເປີດໃຊ້ເຄື່ອງມືຂອງຂອບເຂດອາເຣ. ຕ່າງໆນອກຂອບເຂດ
ກວດພົບການເຂົ້າເຖິງ. ສະ​ມາ​ຊິກ array ຢືດ​ຢຸ່ນ​, ອາ​ເຣ​ສະ​ມາ​ຊິກ array ຢືດ​ຢຸ່ນ​,
ແລະຕົວກໍານົດເບື້ອງຕົ້ນຂອງຕົວແປທີ່ມີການເກັບຮັກສາແບບຄົງທີ່ບໍ່ໄດ້ຖືກປະຕິບັດ.

-fsanitize=ການຈັດຮຽງ
ຕົວເລືອກນີ້ເຮັດໃຫ້ການກວດສອບການຈັດລຽງຂອງຕົວຊີ້ເມື່ອພວກມັນຖືກອ້າງອີງ
ຫຼືໃນເວລາທີ່ການອ້າງອີງຖືກຜູກມັດກັບເປົ້າຫມາຍທີ່ສອດຄ່ອງບໍ່ພຽງພໍ, ຫຼືໃນເວລາທີ່ວິທີການຫຼື
constructor ແມ່ນ invoked ໃນວັດຖຸທີ່ສອດຄ່ອງບໍ່ພຽງພໍ.

-fsanitize=object-size
ທາງ​ເລືອກ​ນີ້​ເຮັດ​ໃຫ້​ການ​ນໍາ​ໃຊ້​ເຄື່ອງ​ມື​ຂອງ​ການ​ອ້າງ​ອີງ​ຄວາມ​ຊົງ​ຈໍາ​ໂດຍ​ການ​ນໍາ​ໃຊ້​
ຟັງຊັນ "__builtin_object_size". ການເຂົ້າເຖິງຕົວຊີ້ອອກນອກຂອບເຂດຕ່າງໆແມ່ນ
ກວດພົບ.

-fsanitize=float-divide-by-zero
ກວດພົບການແບ່ງຈຸດລອຍດ້ວຍສູນ. ແຕກຕ່າງຈາກທາງເລືອກອື່ນທີ່ຄ້າຍຄືກັນ,
-fsanitize=float-divide-by-zero ບໍ່ໄດ້ເປີດໃຊ້ໂດຍ -fsanitize=ບໍ່ໄດ້ກຳນົດ, ນັບຕັ້ງແຕ່
ການແບ່ງຈຸດເລື່ອນໂດຍສູນສາມາດເປັນວິທີທີ່ຖືກຕ້ອງຂອງການໄດ້ຮັບອັນເປັນນິດ
ແລະ NaNs.

-fsanitize=float-cast-overflow
ຕົວເລືອກນີ້ເປີດໃຊ້ງານປະເພດຈຸດລອຍເພື່ອກວດສອບການແປງຈຳນວນເຕັມ. ພວກເຮົາກວດສອບ
ວ່າຜົນຂອງການປ່ຽນໃຈເຫລື້ອມໃສບໍ່ overflow. ແຕກຕ່າງຈາກອື່ນໆທີ່ຄ້າຍຄືກັນ
ທາງເລືອກ, -fsanitize=float-cast-overflow ບໍ່ໄດ້ເປີດໃຊ້ໂດຍ -fsanitize=ບໍ່ໄດ້ກຳນົດ.
ຕົວເລືອກນີ້ໃຊ້ບໍ່ໄດ້ດີກັບຂໍ້ຍົກເວັ້ນ "FE_INVALID" ທີ່ເປີດໃຊ້ງານ.

-fsanitize=nonnull-attribute
ຕົວເລືອກນີ້ເປີດໃຊ້ເຄື່ອງມືການໂທ, ກວດເບິ່ງວ່າຄ່າ null ບໍ່ແມ່ນບໍ
ຜ່ານໄປຫາ arguments ທີ່ໝາຍວ່າຕ້ອງການຄ່າທີ່ບໍ່ແມ່ນ null ໂດຍຟັງຊັນ "nonnull".
attribute

-fsanitize=returns-nonnull-attribute
ທາງ​ເລືອກ​ນີ້​ເຮັດ​ໃຫ້​ການ​ນໍາ​ໃຊ້​ເຄື່ອງ​ມື​ຂອງ​ຄໍາ​ບັນ​ຍາຍ​ຜົນ​ຕອບ​ແທນ​ໃນ​ຫນ້າ​ທີ່​ຫມາຍ​ດ້ວຍ​
"returns_nonnull" ຄຸນ​ລັກ​ສະ​ນະ​ການ​ທໍາ​ງານ​, ເພື່ອ​ກວດ​ສອບ​ການ​ກັບ​ຄືນ​ຂອງ​ຄ່າ null ຈາກ​ດັ່ງ​ກ່າວ​
ປະຕິບັດຫນ້າ.

-fsanitize=bool
ທາງເລືອກນີ້ເຮັດໃຫ້ເຄື່ອງມືການໂຫຼດຈາກ bool. ຖ້າຄ່າອື່ນນອກຈາກ 0/1
ຖືກໂຫລດ, ຂໍ້ຜິດພາດໃນເວລາແລ່ນແມ່ນອອກ.

-fsanitize=enum
ຕົວເລືອກນີ້ເປີດໃຊ້ເຄື່ອງມືການໂຫຼດຈາກປະເພດ enum. ຖ້າມູນຄ່າ
ຢູ່ນອກຂອບເຂດຂອງຄ່າສໍາລັບປະເພດ enum ແມ່ນການໂຫຼດ, ຂໍ້ຜິດພາດໃນເວລາແລ່ນແມ່ນ
ອອກ.

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

ໃນຂະນະທີ່ -ftrapv ເຮັດ​ໃຫ້​ກັບ​ດັກ​ສໍາ​ລັບ​ການ overflows ໄດ້​ລົງ​ນາມ​ທີ່​ຈະ​ຖືກ​ປ່ອຍ​ອອກ​ມາ​, -fsanitize=ບໍ່ໄດ້ກຳນົດ
ໃຫ້ຂໍ້ຄວາມວິນິດໄສ. ໃນປັດຈຸບັນນີ້ໃຊ້ໄດ້ກັບພາສາ C ຄອບຄົວເທົ່ານັ້ນ.

-fno-sanitize=ທັງໝົດ
ຕົວເລືອກນີ້ປິດການທໍາງານຂອງຢາຂ້າເຊື້ອອະສຸຈິທັງຫມົດທີ່ເປີດໃຊ້ກ່ອນຫນ້ານີ້. -fsanitize=ທັງໝົດ ບໍ່​ແມ່ນ
ອະ​ນຸ​ຍາດ​ໃຫ້​, ເນື່ອງ​ຈາກ​ວ່າ​ຢາ​ອະ​ນາ​ໄມ​ບາງ​ຢ່າງ​ບໍ່​ສາ​ມາດ​ນໍາ​ໃຊ້​ຮ່ວມ​ກັນ​.

-fasan-shadow-offset=ຈໍານວນ
ຕົວເລືອກນີ້ບັງຄັບໃຫ້ GCC ໃຊ້ການຊົດເຊີຍເງົາແບບກຳນົດເອງໃນການກວດສອບ AddressSanitizer. ມັນ​ແມ່ນ
ເປັນປະໂຫຍດສໍາລັບການທົດລອງກັບ shadow memory layouts ທີ່ແຕກຕ່າງກັນໃນ Kernel
ທີ່ຢູ່

-fsanitize-ຟື້ນຕົວ[=ເລືອກ]
-fsanitize-recover= ຄວບຄຸມຮູບແບບການຟື້ນຕົວຄວາມຜິດພາດສໍາລັບຢາຂ້າເຊື້ອທີ່ໄດ້ກ່າວໄວ້ໃນເຄື່ອງໝາຍຈຸດ-
ບັນຊີລາຍຊື່ທີ່ແຍກອອກ ເລືອກ. ການເປີດໃຊ້ງານທາງເລືອກນີ້ສໍາລັບອົງປະກອບຂອງສຸຂາພິບານເຮັດໃຫ້ມັນ
ພະຍາຍາມສືບຕໍ່ແລ່ນໂຄງການຄືກັບວ່າບໍ່ມີຂໍ້ຜິດພາດເກີດຂຶ້ນ. ນີ້ຫມາຍຄວາມວ່າຫຼາຍ
ຄວາມຜິດພາດ runtime ສາມາດຖືກລາຍງານຢູ່ໃນໂຄງການດຽວແລ່ນ, ແລະລະຫັດອອກຂອງ
ໂຄງ​ການ​ອາດ​ຈະ​ຊີ້​ບອກ​ຄວາມ​ສໍາ​ເລັດ​ເຖິງ​ແມ່ນ​ວ່າ​ໃນ​ເວ​ລາ​ທີ່​ຂໍ້​ຜິດ​ພາດ​ໄດ້​ຮັບ​ການ​ລາຍ​ງານ​. ໄດ້
-fno-sanitize-recover= ທາງ​ເລືອກ​ສາ​ມາດ​ຖືກ​ນໍາ​ໃຊ້​ເພື່ອ​ປັບ​ປຸງ​ພຶດ​ຕິ​ກໍາ​ນີ້​: ພຽງ​ແຕ່​ຄັ້ງ​ທໍາ​ອິດ​
ຂໍ້ຜິດພາດທີ່ກວດພົບຈະຖືກລາຍງານ ແລະໂປຣແກຣມຈະອອກດ້ວຍລະຫັດອອກທີ່ບໍ່ແມ່ນສູນ.

ໃນປັດຈຸບັນຄຸນນະສົມບັດນີ້ພຽງແຕ່ເຮັດວຽກສໍາລັບ -fsanitize=ບໍ່ໄດ້ກຳນົດ (ແລະຕົວເລືອກຍ່ອຍຂອງມັນຍົກເວັ້ນ
ສໍາລັບການ -fsanitize=ບໍ່ສາມາດເຂົ້າເຖິງໄດ້ ແລະ -fsanitize=ກັບຄືນ), -fsanitize=float-cast-overflow,
-fsanitize=float-divide-by-zero ແລະ -fsanitize=kernel-address. ສໍາລັບຢາຂ້າເຊື້ອໂລກເຫຼົ່ານີ້
ການ​ຟື້ນ​ຟູ​ຄວາມ​ຜິດ​ພາດ​ແມ່ນ​ໄດ້​ເປີດ​ໂດຍ​ຄ່າ​ເລີ່ມ​ຕົ້ນ​. -fsanitize-recover=ທັງໝົດ ແລະ
-fno-sanitize-recover=ທັງໝົດ ຍັງໄດ້ຮັບການຍອມຮັບ, ອະດີດເຮັດໃຫ້ການຟື້ນຕົວສໍາລັບທຸກຄົນ
ສຸຂາພິບານທີ່ສະຫນັບສະຫນູນມັນ, ສຸດທ້າຍປິດການໃຊ້ງານການຟື້ນຕົວສໍາລັບສຸຂາພິບານທັງຫມົດທີ່
ສະຫນັບສະຫນູນມັນ.

Syntax ໂດຍບໍ່ມີຄວາມຊັດເຈນ ເລືອກ ພາຣາມິເຕີຖືກປະຕິເສດ. ມັນເທົ່າກັບ

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

ຄ້າຍຄືກັນ -fno-sanitize-ຟື້ນຕົວ ເທົ່າກັບ

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

-fsanitize-undefined-trap-on-error
ໄດ້ -fsanitize-undefined-trap-on-error ທາງເລືອກສັ່ງໃຫ້ compiler ລາຍງານ
ພຶດຕິກໍາທີ່ບໍ່ໄດ້ກໍານົດໂດຍໃຊ້ "__builtin_trap" ແທນທີ່ຈະເປັນຫ້ອງສະຫມຸດ "libubsan".
ປະໂຫຍດຂອງສິ່ງນີ້ແມ່ນວ່າຫ້ອງສະຫມຸດ "libubsan" ບໍ່ຈໍາເປັນແລະບໍ່ມີການເຊື່ອມໂຍງ
ໃນ, ດັ່ງນັ້ນນີ້ແມ່ນໃຊ້ໄດ້ເຖິງແມ່ນວ່າໃນສະພາບແວດລ້ອມເອກະລາດ.

-fcheck-pointer-bounds
ເປີດໃຊ້ເຄື່ອງມືກວດສອບ Pointer Bounds Checker. ແຕ່ລະເອກະສານອ້າງອີງຄວາມຊົງຈໍາແມ່ນເຄື່ອງມື
ກັບການກວດສອບຕົວຊີ້ທີ່ໃຊ້ສໍາລັບການເຂົ້າເຖິງຫນ່ວຍຄວາມຈໍາຕໍ່ກັບຂອບເຂດທີ່ກ່ຽວຂ້ອງກັບສິ່ງນັ້ນ
ຕົວຊີ້.

ໃນປັດຈຸບັນມີພຽງແຕ່ການປະຕິບັດສໍາລັບ Intel MPX ທີ່ມີຢູ່, ດັ່ງນັ້ນ x86 ເປົ້າຫມາຍແລະ
-mmpx ຕ້ອງການເພື່ອເປີດໃຊ້ຄຸນສົມບັດນີ້. ເຄື່ອງມືທີ່ອີງໃສ່ MPX ຕ້ອງການ a
runtime library ເພື່ອເປີດໃຊ້ MPX ໃນຮາດແວແລະຈັດການສັນຍານການລະເມີດຂອບເຂດ. ໂດຍ
ຄ່າເລີ່ມຕົ້ນເມື່ອ -fcheck-pointer-bounds ແລະ -mmpx ທາງ ເລືອກ ໃນ ການ ນໍາ ໃຊ້ ເພື່ອ ເຊື່ອມ ຕໍ່ ໂຄງ ການ, ໄດ້
ຄົນຂັບ GCC ເຊື່ອມຕໍ່ກັບ libmpx ຫໍສະຫມຸດ runtime ແລະ libmpxwrappers ຫໍສະໝຸດ. ມັນ
ຍັງຜ່ານ '-z bndplt' ໄປຫາຕົວເຊື່ອມຕໍ່ໃນກໍລະນີທີ່ມັນສະຫນັບສະຫນູນທາງເລືອກນີ້ (ເຊິ່ງຖືກກວດສອບ.
ໃນ​ການ​ຕັ້ງ​ຄ່າ libmpx​)​. ໃຫ້ສັງເກດວ່າຕົວເຊື່ອມຕໍ່ຮຸ່ນເກົ່າອາດຈະບໍ່ສົນໃຈທາງເລືອກ. ຄໍາ
linker ບໍ່ສະຫນັບສະຫນູນ '-z bndplt' ທາງເລືອກ. ໂດຍບໍ່ມີການສະຫນັບສະຫນູນ '-z bndplt' ໃນ linker ທັງຫມົດ
ການໂທຫາຫ້ອງສະຫມຸດແບບເຄື່ອນໄຫວໄດ້ສູນເສຍຂອບເຂດການຫຼຸດຜ່ອນລະດັບການປົກປ້ອງໂດຍລວມ. ມັນ
ແນະນໍາໃຫ້ໃຊ້ຕົວເຊື່ອມຕໍ່ທີ່ມີການສະຫນັບສະຫນູນ '-z bndplt'. ໃນກໍລະນີທີ່ຕົວເຊື່ອມຕໍ່ດັ່ງກ່າວບໍ່ແມ່ນ
ສາມາດໃຊ້ໄດ້, ມັນແມ່ນແນະນໍາໃຫ້ໃຊ້ຢູ່ສະເຫມີ -static-libmpxwrappers ເພື່ອການປ້ອງກັນທີ່ດີກວ່າ
ລະດັບຫຼືການນໍາໃຊ້ -static ເພື່ອຫຼີກເວັ້ນການໂທຫາພາຍນອກກັບຫ້ອງສະຫມຸດແບບເຄື່ອນໄຫວຢ່າງສົມບູນ. MPX-
ເຄື່ອງມືໂດຍອີງໃສ່ອາດຈະຖືກນໍາໃຊ້ສໍາລັບການ debugging ແລະຍັງອາດຈະຖືກລວມເຂົ້າໃນການຜະລິດ
ລະຫັດເພື່ອເພີ່ມຄວາມປອດໄພຂອງໂປຣແກຣມ. ອີງຕາມການນໍາໃຊ້, ທ່ານອາດຈະແຕກຕ່າງກັນ
ຄວາມຕ້ອງການສໍາລັບຫ້ອງສະຫມຸດ runtime. ສະບັບປະຈຸບັນຂອງຫ້ອງສະຫມຸດເວລາແລ່ນ MPX
ແມ່ນຮັດກຸມຫຼາຍສໍາລັບການນໍາໃຊ້ເປັນເຄື່ອງມືແກ້ບັນຫາ. ການ​ນໍາ​ໃຊ້​ຫ້ອງ​ສະ​ຫມຸດ runtime MPX ຫມາຍ​ຄວາມ​ວ່າ​
- ຫົວຂໍ້. ເບິ່ງຕື່ມ -static-libmpx. ພຶດຕິກໍາຫ້ອງສະຫມຸດ runtime ສາມາດໄດ້ຮັບອິດທິພົນ
ການ​ນໍາ​ໃຊ້​ຕ່າງໆ​ CHKP_RT_* ຕົວແປສະພາບແວດລ້ອມ. ເບິ່ງ
<https://gcc.gnu.org/wiki/Intel%20MPX%20support%20in%20the%20GCC%20compiler> ສໍາລັບການເພີ່ມເຕີມ
ລາຍລະອຽດ.

ເຄື່ອງມືທີ່ສ້າງຂຶ້ນອາດຈະຖືກຄວບຄຸມໂດຍຕ່າງໆ -fchkp-* ທາງ​ເລືອກ​ແລະ​ໂດຍ​
"bnd_variable_size" ຄຸນສົມບັດພາກສະຫນາມໂຄງສ້າງແລະ "bnd_legacy", ແລະ "bnd_instrument"
ຄຸນ​ລັກ​ສະ​ນະ​ການ​ທໍາ​ງານ​. GCC ຍັງສະຫນອງຫນ້າທີ່ສ້າງໃນຈໍານວນສໍາລັບການຄວບຄຸມ
ຕົວກວດສອບການຜູກມັດຕົວຊີ້.

-fchkp-check-incomplete-type
ສ້າງການກວດສອບຂອບເຂດຕົວຊີ້ສໍາລັບຕົວແປທີ່ມີປະເພດບໍ່ຄົບຖ້ວນ. ເປີດໃຊ້ໂດຍ
Default

-fchkp-ແຄບ-ຂອບເຂດ
ຂອບເຂດການຄວບຄຸມທີ່ໃຊ້ໂດຍ Pointer Bounds Checker ສໍາລັບຕົວຊີ້ໄປຫາຊ່ອງຂໍ້ມູນ. ຖ້າ
ແຄບແມ່ນເປີດໃຊ້ແລ້ວຂອບພາກສະຫນາມຖືກນໍາໃຊ້. ຖ້າບໍ່ດັ່ງນັ້ນ, ຂອບເຂດວັດຖຸຖືກໃຊ້.
ເບິ່ງ -fchkp-narrow-to-innermost-array ແລະ -fchkp-first-field-has-own-bounds.
ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-fchkp-first-field-has-own-bounds
Forces Pointer Bounds Checker ເພື່ອໃຊ້ຂອບເຂດແຄບສໍາລັບທີ່ຢູ່ຂອງທໍາອິດ
ພາກສະຫນາມໃນໂຄງສ້າງ. ໂດຍຄ່າເລີ່ມຕົ້ນຕົວຊີ້ໄປຫາຊ່ອງຂໍ້ມູນທໍາອິດມີຂອບເຂດດຽວກັນ
ເປັນຕົວຊີ້ເຖິງໂຄງສ້າງທັງຫມົດ.

-fchkp-narrow-to-innermost-array
Forces Pointer Bounds Checker ເພື່ອໃຊ້ຂອບເຂດຂອງ arrays ຊັ້ນໃນສຸດໃນກໍລະນີຂອງ nested
ການເຂົ້າເຖິງ array static. ໂດຍຄ່າເລີ່ມຕົ້ນທາງເລືອກນີ້ຖືກປິດໃຊ້ງານແລະຂອບເຂດຂອງນອກທີ່ສຸດ
array ຖືກນໍາໃຊ້.

-fchkp-optimize
ເປີດໃຊ້ການເພີ່ມປະສິດທິພາບຕົວຊີ້ຕົວກວດສອບຂອບເຂດ. ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ການເພີ່ມປະສິດທິພາບ
ລະດັບ -O, -O2, -O3.

-fchkp-use-fast-string-functions
ເປີດໃຊ້ການໃຊ້ງານ *_nobnd ເວີຊັນຂອງຟັງຊັນສະຕຣິງ (ບໍ່ສຳເນົາຂອບເຂດ) ໂດຍຕົວຊີ້
Bounds Checker. ປິດການນຳໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-fchkp-use-nochk-string-functions
ເປີດໃຊ້ການໃຊ້ງານ *_nochk ເວີຊັນຂອງຟັງຊັນສະຕຣິງ (ບໍ່ກວດສອບຂອບເຂດ) ໂດຍຕົວຊີ້
Bounds Checker. ປິດການນຳໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-fchkp-use-static-bounds
ອະນຸຍາດໃຫ້ຕົວກວດສອບຂອບເຂດຕົວຊີ້ເພື່ອສ້າງຂອບເຂດຄົງທີ່ຖືຂອບເຂດຄົງທີ່
ຕົວແປ. ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-fchkp-use-static-const-bounds
ໃຊ້ statically-initialized bounds ສໍາລັບຂອບເຂດຄົງທີ່ແທນທີ່ຈະສ້າງໃຫ້ເຂົາເຈົ້າແຕ່ລະຄົນ
ເວລາທີ່ເຂົາເຈົ້າຕ້ອງການ. ໂດຍຄ່າເລີ່ມຕົ້ນເປີດໃຊ້ງານເມື່ອ -fchkp-use-static-bounds ເປີດໃຊ້ງານ.

-fchkp-treat-zero-dynamic-size-as-infinite
ດ້ວຍຕົວເລືອກນີ້, ວັດຖຸທີ່ມີປະເພດບໍ່ສົມບູນທີ່ຂະໜາດທີ່ໄດ້ຮັບແບບໄດນາມິກແມ່ນສູນ
ຖືກປະຕິບັດວ່າເປັນຂະຫນາດທີ່ບໍ່ມີຂອບເຂດແທນໂດຍ Pointer Bounds Checker. ທາງເລືອກນີ້
ອາດຈະເປັນປະໂຫຍດຖ້າໂຄງການເຊື່ອມໂຍງກັບຫ້ອງສະຫມຸດທີ່ບໍ່ມີຂໍ້ມູນຂະຫນາດສໍາລັບບາງຄົນ
ສັນຍາລັກ. ປິດການນຳໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-fchkp-check-read
ແນະນຳຕົວກວດສອບຈຸດຜູກມັດຂອງຕົວຊີ້ເພື່ອສ້າງການກວດສອບສຳລັບການເຂົ້າເຖິງການອ່ານທັງໝົດຂອງໜ່ວຍຄວາມຈຳ.
ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-fchkp-check-write
ແນະນຳຕົວກວດສອບຈຸດຜູກມັດຂອງຕົວຊີ້ເພື່ອສ້າງການກວດສອບສຳລັບການເຂົ້າເຖິງການຂຽນທັງໝົດໃນໜ່ວຍຄວາມຈຳ.
ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-fchkp-store-bounds
ແນະນຳຕົວກວດສອບການຜູກມັດຕົວຊີ້ເພື່ອສ້າງຮ້ານຄ້າຂອບເຂດສຳລັບການຂຽນຕົວຊີ້.
ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-fchkp-instrument-calls
ແນະນຳຕົວກວດສອບຈຸດຜູກມັດຕົວຊີ້ເພື່ອຜ່ານຂອບເຂດຕົວຊີ້ໄປຫາການໂທ. ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-fchkp-instrument-marked-only
ແນະນຳຕົວກວດສອບການຜູກມັດຕົວຊີ້ໄປຫາເຄື່ອງມືທີ່ເຮັດໜ້າທີ່ໝາຍດ້ວຍເຄື່ອງໝາຍເທົ່ານັ້ນ
"bnd_instrument" ຄຸນລັກສະນະ. ປິດການນຳໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-fchkp-use-wrappers
ອະນຸຍາດໃຫ້ Pointer Bounds Checker ທົດແທນການໂທໄປຫາຟັງຊັນໃນຕົວດ້ວຍການໂທຫາ
ຟັງຊັນ wrapper. ເມື່ອ​ໃດ​ -fchkp-use-wrappers ຖືກນໍາໃຊ້ເພື່ອເຊື່ອມຕໍ່ໂຄງການ, ໄດເວີ GCC
ເຊື່ອມຕໍ່ອັດຕະໂນມັດຕໍ່ກັບ libmpxwrappers. ເບິ່ງຕື່ມ -static-libmpxwrappers. ເປີດໃຊ້ແລ້ວ
ໂດຍຄ່າເລີ່ມຕົ້ນ

-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
ບີບອັດຂໍ້ມູນການດີບັກ DWARF 2 ໂດຍການກໍາຈັດຂໍ້ມູນທີ່ຊໍ້າກັນກ່ຽວກັບ
ແຕ່ລະສັນຍາລັກ. ຕົວເລືອກນີ້ເຮັດໃຫ້ຄວາມຮູ້ສຶກພຽງແຕ່ເມື່ອສ້າງການດີບັກ DWARF 2
ຂໍ້ມູນກັບ -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, ຂໍ້ມູນ debug ຖືກສ້າງຂຶ້ນສໍາລັບປະເພດ
ປະກາດໃນເອກະສານນັ້ນແລະ 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 ພິມສະຖິຕິບາງຢ່າງກ່ຽວກັບການຈັດສັນຫນ່ວຍຄວາມຈໍາຖາວອນໃນເວລາທີ່ມັນ
ສຳ ເລັດຮູບ.

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

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

-fprofile-report
ເຮັດໃຫ້ compiler ພິມສະຖິຕິບາງຢ່າງກ່ຽວກັບຄວາມສອດຄ່ອງຂອງ profile (ຄາດຄະເນ).
ແລະຜົນກະທົບຂອງ passes ບຸກຄົນ.

-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 (ອັນສຸດທ້າຍຫມາຍເຖິງ
ອະດີດ).

* ດໍາ​ເນີນ​ການ​ໂຄງ​ການ​ກ່ຽວ​ກັບ​ວຽກ​ງານ​ຕົວ​ແທນ​ເພື່ອ​ສ້າງ profile 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-ປະເພດ-ຜ່ານ=ບັນຊີລາຍຊື່ໄລຍະ
ນີ້​ແມ່ນ​ຊຸດ​ຂອງ​ທາງ​ເລືອກ​ທີ່​ຖືກ​ນໍາ​ໃຊ້​ເພື່ອ​ຢ່າງ​ຊັດ​ເຈນ​ປິດ​ການ​ທໍາ​ງານ / ເຮັດ​ໃຫ້​ເຫມາະ​ສົມ​
ຜ່ານ. ຕົວເລືອກເຫຼົ່ານີ້ແມ່ນມີຈຸດປະສົງເພື່ອໃຊ້ສໍາລັບການດີບັກ GCC. ຜູ້ໃຊ້ Compiler ຄວນ
ໃຊ້ຕົວເລືອກປົກກະຕິສໍາລັບການເປີດ/ປິດການໃຊ້ງານບັດຜ່ານແທນ.

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

-fdisable-rtl-ຜ່ານ
-fdisable-rtl-ຜ່ານ=ບັນຊີລາຍຊື່ໄລຍະ
ປິດການໃຊ້ງານ RTL pass ຜ່ານ. ຜ່ານ ແມ່ນຊື່ຜ່ານ. ຖ້າຜ່ານທາງດຽວກັນແມ່ນສະຖິຕິ
invoked ໃນ compiler ຫຼາຍຄັ້ງ, ຊື່ pass ຄວນຖືກຕໍ່ທ້າຍດ້ວຍ a
ເລກລໍາດັບເລີ່ມຕົ້ນຈາກ 1. ບັນຊີລາຍຊື່ໄລຍະ ແມ່ນບັນຊີລາຍຊື່ທີ່ຂັ້ນດ້ວຍເຄື່ອງໝາຍຈຸດ
ຊ່ວງຟັງຊັນ ຫຼືຊື່ຕົວປະກອບ. ແຕ່ລະໄລຍະແມ່ນຄູ່ຕົວເລກທີ່ແຍກອອກດ້ວຍ a
ຈໍ້າສອງເມັດ. ໄລຍະແມ່ນລວມຢູ່ໃນທັງສອງສົ້ນ. ຖ້າໄລຍະແມ່ນເລັກນ້ອຍ, ຕົວເລກ
ຄູ່ສາມາດງ່າຍເປັນຕົວເລກດຽວ. ຖ້າຟັງຊັນຂອງ call graph node's
uid ຕົກຢູ່ໃນຂອບເຂດທີ່ລະບຸໄວ້, ໄດ້ ຜ່ານ ແມ່ນພິການສໍາລັບການນັ້ນ
ໜ້າ ທີ່. ທ 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-ຕົ້ນໄມ້-ຜ່ານ
-fenable-ຕົ້ນໄມ້-ຜ່ານ=ບັນຊີລາຍຊື່ໄລຍະ
ເປີດໃຊ້ໃບຜ່ານຕົ້ນໄມ້ ຜ່ານ, ທະເລສາບ -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-ຜ່ານ
-fdump-rtl-ຜ່ານ=ຊື່​ເອ​ກະ​ສານ
ເວົ້າວ່າເພື່ອເຮັດໃຫ້ debugging dumps ໃນລະຫວ່າງການລວບລວມໃນເວລາທີ່ກໍານົດໂດຍ ຕົວອັກສອນ. ນີ້
ຖືກນໍາໃຊ້ສໍາລັບການ debugging ຜ່ານ RTL-based ຂອງ compiler. ຊື່ໄຟລ໌ສ່ວນໃຫຍ່
ຂອງການຖິ້ມຂີ້ເຫຍື້ອແມ່ນເຮັດໄດ້ໂດຍການຕື່ມຕົວເລກຜ່ານແລະຄໍາສັບໃສ່ກັບ dumpname, ແລະ
ໄຟລ໌ຖືກສ້າງຂື້ນຢູ່ໃນໄດເລກະທໍລີຂອງໄຟລ໌ຜົນຜະລິດ. ໃນ​ກໍ​ລະ​ນີ​ຂອງ =ຊື່​ເອ​ກະ​ສານ ທາງເລືອກ,
dump ແມ່ນຜົນຜະລິດໃນໄຟລ໌ທີ່ໃຫ້ແທນທີ່ຈະເປັນ pass numbered dump ໄຟລ໌. ຫມາຍ​ເຫດ​
ວ່າຕົວເລກຜ່ານໄດ້ຖືກຄິດໄລ່ຢ່າງສະຖິດຍ້ອນວ່າບັດຜ່ານໄດ້ຮັບການລົງທະບຽນເຂົ້າໄປໃນບັດ
ຜູ້​ຈັດ​ການ. ດັ່ງນັ້ນຕົວເລກບໍ່ກ່ຽວຂ້ອງກັບຄໍາສັ່ງແບບເຄື່ອນໄຫວຂອງການປະຕິບັດ
ຜ່ານ. ໂດຍສະເພາະ, 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 ເປີດໃຊ້ການຖິ້ມຂີ້ເຫຍື້ອຫຼັງຈາກສອງທົ່ວໄປ
ການລົບລ້າງ subexpression ຜ່ານ.

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

-fdump-rtl-ree
ຖິ້ມຫຼັງການລົບລ້າງການຂະຫຍາຍສັນຍານ/ສູນ.

-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-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 ຄຳ ອະທິບາຍ.

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

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

-freport-bug
ເກັບກໍາແລະ dump ຂໍ້ມູນ debug ເຂົ້າໄປໃນໄຟລ໌ຊົ່ວຄາວຖ້າຫາກວ່າ ICE ໃນ C/C++ compiler
ເກີດຂຶ້ນ.

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

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

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

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

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

ໃນເວລາທີ່ dumping ຕົ້ນໄມ້ pretty-printed, ທາງເລືອກນີ້ inhibits dumping ອົງການຈັດຕັ້ງຂອງ
ໂຄງ​ສ້າງ​ການ​ຄວບ​ຄຸມ​.

ເມື່ອຖິ້ມ RTL, ພິມ RTL ໃນຮູບແບບກະທັດຮັດ (ຂົ້ນ) ແທນທີ່ຈະເປັນຄ່າເລີ່ມຕົ້ນ
ການເປັນຕົວແທນຂອງ LISP.

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

ລາຍລະອຽດ
ເປີດໃຊ້ການ dumps ທີ່ມີລາຍລະອຽດເພີ່ມເຕີມ (ບໍ່ເປັນກຽດໂດຍທຸກໆທາງເລືອກ dump). ລວມທັງ
ຂໍ້ມູນຈາກການເພີ່ມປະສິດທິພາບຜ່ານ.

ສະຖິຕິ
ເປີດໃຊ້ການຖິ້ມສະຖິຕິຕ່າງໆກ່ຽວກັບບັດຜ່ານ (ບໍ່ຖືກຍົກຍ້ອງຈາກທຸກໆການຖິ້ມ
ທາງ​ເລືອກ).

ຕັນ
ເປີດໃຊ້ການສະແດງຂອບເຂດບລັອກພື້ນຖານ (ປິດການໃຊ້ງານຢູ່ໃນບ່ອນຖິ້ມຂີ້ເຫຍື້ອ).

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

ທາງເລືອກນີ້ປະຈຸບັນພຽງແຕ່ໃຊ້ໄດ້ສໍາລັບການ dumps RTL, ແລະ RTL ໄດ້ຖືກ dumped ສະເຫມີ
ຮູບແບບກະທັດຮັດ.

vops
ເປີດໃຊ້ການສະແດງຕົວປະຕິບັດການ virtual ສໍາລັບທຸກໆຄໍາຖະແຫຼງການ.

lineno
ເປີດໃຊ້ການສະແດງຕົວເລກແຖວສໍາລັບຄໍາຖະແຫຼງການ.

uid ເປີດໃຊ້ການສະແດງ ID ທີ່ເປັນເອກະລັກ ("DECL_UID") ສໍາລັບແຕ່ລະຕົວແປ.

ຄຳເວົ້າ
ເປີດໃຊ້ການສະແດງການຖິ້ມຕົ້ນໄມ້ສໍາລັບແຕ່ລະຄໍາຖະແຫຼງການ.

eh ເປີດໃຊ້ການສະແດງຕົວເລກພາກພື້ນ EH ຖືແຕ່ລະຄໍາຖະແຫຼງການ.

scev
ເປີດໃຊ້ການສະແດງລາຍລະອຽດການວິເຄາະວິວັຖນາການ.

ທີ່ດີທີ່ສຸດ
ເປີດໃຊ້ການສະແດງຂໍ້ມູນການເພີ່ມປະສິດທິພາບ (ມີຢູ່ໃນບາງບັດເທົ່ານັ້ນ).

ພາດໂອກາດນີ້
ເປີດໃຊ້ການສະແດງຂໍ້ມູນການເພີ່ມປະສິດທິພາບທີ່ພາດໄປ (ມີຢູ່ໃນບາງບັດເທົ່ານັ້ນ).

ຫມາຍ​ເຫດ​
ເປີດໃຊ້ຂໍ້ມູນການເພີ່ມປະສິດທິພາບລະອຽດອື່ນໆ (ມີຢູ່ໃນບາງບັດເທົ່ານັ້ນ).

=ຊື່​ເອ​ກະ​ສານ
ແທນ​ທີ່​ຈະ​ເປັນ​ໄຟລ​໌ dump ທີ່​ມີ​ຊື່​ອັດ​ຕະ​ໂນ​ມັດ​, ຜົນ​ຜະ​ລິດ​ເຂົ້າ​ໄປ​ໃນ​ຊື່​ໄຟລ​໌​ທີ່​ໄດ້​ຮັບ​. ໄຟລ໌
ຊື່ stdout ແລະ stderr ໄດ້ຖືກປະຕິບັດເປັນພິເສດແລະຖືວ່າເປີດແລ້ວ
ກະແສມາດຕະຖານ. ຍົກ​ຕົວ​ຢ່າງ,

gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump
-fdump-tree-pre=stderr file.c

ສົ່ງຜົນໃຫ້ vectorizer dump ເຂົ້າໄປໃນ foo.dump, ໃນຂະນະທີ່ dump PRE ແມ່ນຜົນຜະລິດສຸດ stderr.
ຖ້າສອງຊື່ໄຟລ໌ dump ທີ່ຂັດແຍ້ງກັນໄດ້ຖືກມອບໃຫ້ສໍາລັບການຜ່ານດຽວກັນ, ຫຼັງຈາກນັ້ນ
ທາງເລືອກແມ່ນ overrides ກ່ອນຫນ້ານີ້.

ທັງຫມົດ ເປີດຕົວເລືອກທັງໝົດ, ຍົກເວັ້ນ ວັດຖຸດິບ, ກະທັດຮັດ, ຄຳເວົ້າ ແລະ lineno.

optall
ເປີດຕົວເລືອກການເພີ່ມປະສິດທິພາບທັງໝົດ, ເຊັ່ນ: ທີ່ດີທີ່ສຸດ, ພາດໂອກາດນີ້, ແລະ ຫມາຍ​ເຫດ​.

ການຖິ້ມຂີ້ເຫຍື້ອຕົ້ນໄມ້ຕໍ່ໄປນີ້ແມ່ນເປັນໄປໄດ້:

ຕົ້ນສະບັບ
ຖິ້ມກ່ອນການເພີ່ມປະສິດທິພາບໂດຍອີງໃສ່ຕົ້ນໄມ້, ເພື່ອ file.original.

ທີ່ດີທີ່ສຸດ
dump ຫຼັງ​ຈາກ​ການ​ປັບ​ປຸງ​ຕົ້ນ​ໄມ້​ທັງ​ຫມົດ​ທີ່​ເຫມາະ​ສົມ​, ກັບ​ file.optimized.

gimple
ຖິ້ມແຕ່ລະຟັງຊັນກ່ອນ ແລະຫຼັງຈາກ gimplification ຜ່ານໄປຫາໄຟລ໌. ໄຟລ໌
ຊື່ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ .gimple ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

cfg ຖິ້ມເສັ້ນສະແດງການໄຫຼຂອງການຄວບຄຸມຂອງແຕ່ລະຟັງຊັນໃສ່ໄຟລ໌. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍ
ເພີ່ມເຕີມ .cfg ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

ch ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກຄັດລອກສ່ວນຫົວຂອງ loop. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ
ch ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

ssa ຖິ້ມຂໍ້ມູນທີ່ກ່ຽວຂ້ອງກັບ SSA ໃສ່ໄຟລ໌. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ .ສສ
ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

alias
ຖິ້ມຂໍ້ມູນນາມແຝງສຳລັບແຕ່ລະຟັງຊັນ. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ
.ນາມແຝງ ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

CCP ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກ CCP. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ .ccp ການ
ຊື່ໄຟລ໌ແຫຼ່ງ.

storeccp
ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກ STORE-CCP. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ .storeccp
ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

pre ຖິ້ມຕົ້ນໄມ້ຫຼັງຈາກການກໍາຈັດການຊໍ້າຊ້ອນບາງສ່ວນ. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍ
ເພີ່ມເຕີມ .ກ່ອນ ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

ອິດສະລະ ຖິ້ມຕົ້ນໄມ້ຫຼັງຈາກການກໍາຈັດການຊໍ້າຊ້ອນຢ່າງເຕັມທີ່. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ
.ຟຣີ ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

copyprop
ຖິ້ມຕົ້ນໄມ້ພາຍຫຼັງການຂະຫຍາຍພັນ. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ .copyprop
ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

store_copyprop
ຖິ້ມຕົ້ນໄມ້ຫຼັງຈາກເກັບຮັກສາສໍາເນົາການຂະຫຍາຍພັນ. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ
.store_copyprop ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

dce ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກການກໍາຈັດລະຫັດຕາຍ. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍ
ເພີ່ມເຕີມ .dce ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

ທ່ານ / ນາງ ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກປະຕິບັດການທົດແທນການລວບລວມຂໍ້ມູນ. ໄຟລ໌
ຊື່ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ .sra ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

ຈົມລົງ
ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກປະຕິບັດການຈົມລົງລະຫັດ. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍ
ເພີ່ມເຕີມ .ຈົມ ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

dom ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກນຳໃຊ້ການປັບແຕ່ງຕົ້ນໄມ້ເດັ່ນ. ຊື່ໄຟລ໌ແມ່ນ
ເຮັດ​ໂດຍ​ການ​ຕໍ່​ເຕີມ​ .dom ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

ເວົ້າ ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກໃຊ້ການກໍາຈັດຮ້ານຄ້າທີ່ຕາຍແລ້ວ. ຊື່ໄຟລ໌ແມ່ນເຮັດ
ໂດຍ​ການ​ຕໍ່​ທ້າຍ​ .dse ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

phiopt
ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກເພີ່ມປະສິດທິພາບ PHI nodes ເຂົ້າໄປໃນລະຫັດເສັ້ນກົງ. ໄຟລ໌
ຊື່ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ .phiopt ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

forwprop
ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກສົ່ງຕໍ່ຂະຫຍາຍຕົວແປທີ່ໃຊ້ດຽວ. ຊື່ໄຟລ໌
ແມ່ນ​ເຮັດ​ໄດ້​ໂດຍ​ການ​ຕໍ່​ທ້າຍ​ .forwprop ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

ຊື່ສຳເນົາ
ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກນຳໃຊ້ການປັບແຕ່ງການປ່ຽນຊື່ສຳເນົາ. ຊື່ໄຟລ໌ແມ່ນ
ເຮັດ​ໂດຍ​ການ​ຕໍ່​ເຕີມ​ .copyrename ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

ສະບັບເລກທີ ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກນຳໃຊ້ການປັບແຕ່ງຄ່າສົ່ງຄືນທີ່ມີຊື່ໃນແບບທົ່ວໄປ
ຕົ້ນໄມ້. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ .nrv ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

ວີທີ
ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກໃຊ້ vectorization ຂອງ loops. ຊື່ໄຟລ໌ແມ່ນເຮັດ
ໂດຍ​ການ​ຕໍ່​ທ້າຍ​ .vect ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

slp ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກໃຊ້ vectorization ຂອງຕັນພື້ນຖານ. ຊື່ໄຟລ໌ແມ່ນ
ເຮັດ​ໂດຍ​ການ​ຕໍ່​ເຕີມ​ .slp ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

vp ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກການຂະຫຍາຍພັນມູນຄ່າ (VRP). ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍ
ເພີ່ມເຕີມ .vrp ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

ທັງຫມົດ ເປີດໃຊ້ການຖິ້ມຕົ້ນໄມ້ທັງໝົດທີ່ມີທຸງທີ່ມີໃຫ້ຢູ່ໃນຕົວເລືອກນີ້.

-fopt-info
- fopt-ຂໍ້​ມູນ-ທາງເລືອກໃນການ
- fopt-ຂໍ້​ມູນ-ທາງເລືອກໃນການ=ຊື່​ເອ​ກະ​ສານ
ຄວບ​ຄຸມ​ການ​ປະ​ຕິ​ບັດ dumps ຈາກ​ຜ່ານ​ການ​ປັບ​ປຸງ​ຕ່າງໆ​. ຖ້າ -ທາງເລືອກໃນການ ແບບຟອມແມ່ນ
ໃຊ້ແລ້ວ, ທາງເລືອກໃນການ ແມ່ນບັນຊີລາຍຊື່ຂອງ - ແຍກຄໍາທາງເລືອກໃນການເລືອກລາຍລະອຽດ dump ແລະ
ການເພີ່ມປະສິດທິພາບ.

ໄດ້ ທາງເລືອກໃນການ ສາມາດແບ່ງອອກເປັນສອງກຸ່ມ: ທາງເລືອກໃນການອະທິບາຍ verbosity ຂອງ
dump, ແລະທາງເລືອກທີ່ອະທິບາຍວ່າການເພີ່ມປະສິດທິພາບຄວນຖືກລວມເຂົ້າ. ທາງ​ເລືອກ​ຈາກ​
ທັງສອງກຸ່ມສາມາດປະສົມກັນໄດ້ຢ່າງເສລີຍ້ອນວ່າພວກມັນບໍ່ທັບຊ້ອນກັນ. ຢ່າງໃດກໍຕາມ, ໃນກໍລະນີຂອງ
ຂໍ້ຂັດແຍ່ງໃດໆ, ທາງເລືອກຕໍ່ມາ override ທາງເລືອກກ່ອນຫນ້ານີ້ໃນເສັ້ນຄໍາສັ່ງ.

ຕົວເລືອກຕໍ່ໄປນີ້ຄວບຄຸມການ dump verbosity:

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

ພາດໂອກາດນີ້
ພິມຂໍ້ມູນກ່ຽວກັບການເພີ່ມປະສິດທິພາບທີ່ພາດ. ບຸກຄົນຜ່ານການຄວບຄຸມທີ່
ຂໍ້ມູນທີ່ຈະລວມຢູ່ໃນຜົນຜະລິດ.

ຫມາຍ​ເຫດ​
ພິມຂໍ້ມູນ verbose ກ່ຽວກັບການເພີ່ມປະສິດທິພາບ, ເຊັ່ນ: ການຫັນປ່ຽນທີ່ແນ່ນອນ,
ຂໍ້ຄວາມລາຍລະອຽດເພີ່ມເຕີມກ່ຽວກັບການຕັດສິນໃຈແລະອື່ນໆ.

ທັງຫມົດ ພິມຂໍ້ມູນການເພີ່ມປະສິດທິພາບລະອຽດ. ນີ້ປະກອບມີ ທີ່ດີທີ່ສຸດ, ພາດໂອກາດນີ້, ແລະ
ຫມາຍ​ເຫດ​.

ຫນຶ່ງຫຼືຫຼາຍຄໍາທາງເລືອກຕໍ່ໄປນີ້ສາມາດຖືກນໍາໃຊ້ເພື່ອອະທິບາຍກຸ່ມຂອງ
ການເພີ່ມປະສິດທິພາບ:

ອີນເຕີເນັດ ເປີດໃຊ້ການຖິ້ມຂີ້ເຫຍື້ອຈາກການເພີ່ມປະສິດທິພາບລະຫວ່າງຂັ້ນຕອນທັງຫມົດ.

loop
ເປີດໃຊ້ການ dumps ຈາກການເພີ່ມປະສິດທິພາບ loop ທັງຫມົດ.

inline
ເປີດໃຊ້ການ dumps ຈາກການເພີ່ມປະສິດທິພາບ inlining ທັງຫມົດ.

ສິ່ງໜຶ່ງ ເປີດໃຊ້ການຖິ້ມຂີ້ເຫຍື້ອຈາກການເພີ່ມປະສິດທິພາບ vectorization ທັງຫມົດ.

optall
ເປີດໃຊ້ການຖິ້ມຂີ້ເຫຍື້ອຈາກການເພີ່ມປະສິດທິພາບທັງຫມົດ. ນີ້ແມ່ນ superset ຂອງກຸ່ມການເພີ່ມປະສິດທິພາບ
ລາຍຊື່ຂ້າງເທິງ.

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

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

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

ໃນຕົວຢ່າງຕໍ່ໄປນີ້, ຂໍ້ມູນການເພີ່ມປະສິດທິພາບແມ່ນຜົນຜະລິດໄປຫາ stderr:

gcc -O3 -fopt-info

ຕົວຢ່າງນີ້:

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

ຜົນ​ໄດ້​ຮັບ​ພາດ​ໂອ​ກາດ​ການ​ປັບ​ປຸງ​ບົດ​ລາຍ​ງານ​ຈາກ​ການ​ຜ່ານ​ທັງ​ຫມົດ​ເຂົ້າ​ໄປ​ໃນ missed.ທັງໝົດ, ແລະອັນນີ້:

gcc -O2 -ftree-vectorize -fopt-info-vec-ພາດ

ພິມຂໍ້ມູນກ່ຽວກັບໂອກາດການເພີ່ມປະສິດທິພາບທີ່ພາດຈາກການສົ່ງຜ່ານ vectorization
on stderr. ໃຫ້ສັງເກດວ່າ -fopt-info-vec-ພາດ ເທົ່າກັບ -fopt-info-missed-vec.

ເປັນຕົວຢ່າງອື່ນ,

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

ຜົນໄດ້ຮັບຂໍ້ມູນກ່ຽວກັບການເພີ່ມປະສິດທິພາບທີ່ພາດໄປເຊັ່ນດຽວກັນກັບສະຖານທີ່ທີ່ດີທີ່ສຸດຈາກທັງຫມົດ
inlining ໄດ້ ຜ່ານ ເຂົ້າ ໄປ ໃນ inline.txt.

ສຸດທ້າຍ, ພິຈາລະນາ:

gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt

ທີ່ນີ້ທັງສອງຊື່ໄຟລ໌ຜົນຜະລິດ vec.mis ແລະ loop.opt ມີຄວາມຂັດແຍ້ງນັບຕັ້ງແຕ່ພຽງແຕ່ຫນຶ່ງ
ໄຟລ໌ຜົນຜະລິດໄດ້ຮັບອະນຸຍາດ. ໃນກໍລະນີນີ້, ພຽງແຕ່ທາງເລືອກທໍາອິດທີ່ມີຜົນກະທົບແລະ
ທາງເລືອກຕໍ່ມາຖືກລະເລີຍ. ດັ່ງນັ້ນເທົ່ານັ້ນ vec.mis ແມ່ນຜະລິດທີ່ບັນຈຸຂີ້ເຫຍື້ອ
ຈາກ vectorizer ກ່ຽວກັບໂອກາດພາດ.

-frandom-seed=ຈໍານວນ
ຕົວເລືອກນີ້ສະຫນອງແນວພັນທີ່ GCC ໃຊ້ແທນຕົວເລກແບບສຸ່ມໃນການສ້າງ
ຊື່ສັນຍາລັກທີ່ແນ່ນອນຈະຕ້ອງແຕກຕ່າງກັນໃນທຸກໄຟລ໌ທີ່ລວບລວມ. ມັນຍັງເປັນ
ໃຊ້ເພື່ອວາງສະແຕມທີ່ເປັນເອກະລັກໃນໄຟລ໌ຂໍ້ມູນການຄຸ້ມຄອງແລະໄຟລ໌ວັດຖຸທີ່ຜະລິດ
ເຂົາເຈົ້າ. ທ່ານສາມາດນໍາໃຊ້ໄດ້ - ເມັດພັນ ທາງເລືອກທີ່ຈະຜະລິດວັດຖຸທີ່ມີລັກສະນະດຽວກັນ
ໄຟລ໌.

ໄດ້ ຈໍານວນ ຄວນຈະແຕກຕ່າງກັນສໍາລັບທຸກໆໄຟລ໌ທີ່ທ່ານລວບລວມ.

-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-ຕິດຕາມ, ຍົກ​ເວັ້ນ​ໃນ​ເວ​ລາ​ທີ່​ການ​ກໍາ​ນົດ​ເວ​ລາ​ການ​ຄັດ​ເລືອກ​ໄດ້​ຖືກ​ເປີດ​ໃຊ້​ງານ​.

-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 ຕົວມັນເອງກໍາລັງຖືກສ້າງ.)

-fno-eliminate-unused-debug-types
ໂດຍປົກກະຕິ, ເມື່ອຜະລິດຜົນຜະລິດ DWARF 2, GCC ຫຼີກເວັ້ນການຜະລິດສັນຍາລັກດີບັກສໍາລັບ
ປະ​ເພດ​ທີ່​ບໍ່​ມີ​ບ່ອນ​ທີ່​ນໍາ​ໃຊ້​ໃນ​ໄຟລ​໌​ແຫຼ່ງ​ທີ່​ຖືກ​ລວບລວມ​. ບາງຄັ້ງມັນເປັນປະໂຫຍດ
ເພື່ອໃຫ້ GCC ປ່ອຍຂໍ້ມູນການດີບັກສໍາລັບທຸກປະເພດທີ່ຖືກປະກາດຢູ່ໃນຫນ່ວຍງານລວບລວມ,
ໂດຍບໍ່ຄໍານຶງເຖິງວ່າພວກມັນຖືກນໍາໃຊ້ຢ່າງແທ້ຈິງໃນຫນ່ວຍງານລວບລວມນັ້ນ, ສໍາລັບ
ຕົວຢ່າງຖ້າ, ໃນ debugger, ທ່ານຕ້ອງການສົ່ງຄ່າໄປຫາປະເພດທີ່ບໍ່ແມ່ນຕົວຈິງ
ໃຊ້ໃນໂຄງການຂອງທ່ານ (ແຕ່ຖືກປະກາດ). ເລື້ອຍໆ, ແນວໃດກໍ່ຕາມ, ນີ້ສົ່ງຜົນໃຫ້ a
ພື້ນທີ່ເສຍເງິນຢ່າງຫຼວງຫຼາຍ.

ທາງເລືອກໃນການ ທີ່ ການຄວບຄຸມ ທີ່ດີທີ່ສຸດ
ຕົວເລືອກເຫຼົ່ານີ້ຄວບຄຸມການເພີ່ມປະສິດທິພາບປະເພດຕ່າງໆ.

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

ການເປີດທຸງການເພີ່ມປະສິດທິພາບເຮັດໃຫ້ compiler ພະຍາຍາມປັບປຸງປະສິດທິພາບ ແລະ/ຫຼື
ຂະ​ຫນາດ​ລະ​ຫັດ​ທີ່​ໃຊ້​ເວ​ລາ​ຂອງ​ການ​ລວບ​ລວມ​ແລະ​ຄວາມ​ສາ​ມາດ​ທີ່​ຈະ debug ໄດ້​
ໂຄງການ.

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

ບໍ່ແມ່ນການເພີ່ມປະສິດທິພາບທັງໝົດຖືກຄວບຄຸມໂດຍກົງໂດຍທຸງ. ພຽງແຕ່ການເພີ່ມປະສິດທິພາບທີ່ມີ a
ທຸງແມ່ນລະບຸໄວ້ໃນພາກນີ້.

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

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

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

ກັບ -O, compiler ພະຍາຍາມຫຼຸດຜ່ອນຂະຫນາດລະຫັດແລະເວລາປະຕິບັດ, ໂດຍບໍ່ມີການປະຕິບັດ
ການເພີ່ມປະສິດທິພາບໃດໆທີ່ຈະໃຊ້ເວລາການລວບລວມຢ່າງຫຼວງຫຼາຍ.

-O ເປີດທຸງການເພີ່ມປະສິດທິພາບຕໍ່ໄປນີ້:

-fauto-inc, ຄະ -fbranch-count-reg -fcombine-stack-ປັບ -fcompare-elim
-fcprop-ລົງທະບຽນ -fdce -fdefer-pop -fdelayed-ສາຂາ -fdse -fforward-ຂະຫຍາຍພັນ
-fguess-ສາຂາ-ຄວາມເປັນໄປໄດ້ -fif ການ​ປ່ຽນ​ແປງ 2​ -fif ການ​ປ່ຽນ​ແປງ​
-finline-functions-called-one ດຽວ -fipa-pure-const -fipa-profile -fipa ອ້າງ​ອີງ​
-fmerge-ຄົງທີ່ -fmove-loop-invariants -fshrink-wrap -fsplit-wide-types
-ftree-bit-ccp -ftree-ccp -fssa-phiopt -ftre-ch -ftree-copy-prop -free-copyrename
-ftree-dce -ftree-dominator-opts -ftree-dse -ftree-forwprop - ຟຣີ​ຟຣີ​ -ftree-phiprop
- ອ່າງລ້າງມື -ftree-slsr -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 -fdevirtualize-speculatively
-fexpensive-optimizations -fgcse -fgcse-lm -fhoist-adjacent-loads
-finline-small-functions -findirect-inlining -fipa-cp -fipa-cp-alignment -fipa-sra
-fipa-icf -fisolate-erroneous-paths-dereference -flra-remat -foptimize-sibling-calls
-foptimize-strlen -fpartial-inlining -fpeephole2 -freorder-ຕັນ
-freorder-blocks-and-partition -freorder - ຫນ້າ​ທີ່​ -frerun-cse-after-loop
-fsched-interblock -fsched-spec -fschedule-insns -fschedule-insns2 -fstrict-aliasing
-fstrict-ລົ້ນ -ftree-builtin-call-dce -ftre-switch-ແປງ -ftree-tail-merge
-ftre-pre -ftree-vrp -fipa-ra

ກະລຸນາສັງເກດຄໍາເຕືອນພາຍໃຕ້ -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-loop-vectorize, -ftree-loop-distribute-patterns, -ftree-slp-vectorize,
-fvect-cost-model, -ftree-partial-pre ແລະ -fipa-cp-clone ຕົວເລືອກ

-O0 ຫຼຸດຜ່ອນເວລາການລວບລວມແລະເຮັດໃຫ້ການດີບັກສ້າງຜົນໄດ້ຮັບທີ່ຄາດໄວ້. ນີ້​ແມ່ນ
Default

-ອສ ປັບແຕ່ງຂະໜາດ. -ອສ ເຮັດໃຫ້ທັງຫມົດ -O2 ການເພີ່ມປະສິດທິພາບທີ່ບໍ່ປົກກະຕິເພີ່ມຂຶ້ນ
ຂະຫນາດລະຫັດ. ມັນຍັງດໍາເນີນການເພີ່ມປະສິດທິພາບເພີ່ມເຕີມທີ່ຖືກອອກແບບມາເພື່ອຫຼຸດຜ່ອນຂະຫນາດລະຫັດ.

-ອສ ປິດການໃຊ້ງານທຸງການເພີ່ມປະສິດທິພາບຕໍ່ໄປນີ້: -falign-functions -falign-jumps
-falign-loops -falign-ປ້າຍ -freorder-ຕັນ -freorder-blocks-and-partition
-fprefetch-loop-arrays

- ໄວ
ບໍ່ສົນໃຈການປະຕິບັດຕາມມາດຕະຖານທີ່ເຄັ່ງຄັດ. - ໄວ ເຮັດໃຫ້ທັງຫມົດ -O3 ການເພີ່ມປະສິດທິພາບ. ມັນຍັງ
ເປີດໃຊ້ການເພີ່ມປະສິດທິພາບທີ່ບໍ່ຖືກຕ້ອງສໍາລັບທຸກໂຄງການທີ່ສອດຄ່ອງກັບມາດຕະຖານ. ມັນ
ເປີດ -fast ຄະ​ນິດ​ສາດ​ ແລະ Fortran ສະເພາະ -fno-protect-parens ແລະ -fstack-arrays.

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

ຖ້າທ່ານໃຊ້ຫຼາຍ -O ທາງເລືອກ, ມີຫຼືບໍ່ມີຕົວເລກລະດັບ, ທາງເລືອກສຸດທ້າຍແມ່ນ
ອັນທີ່ມີປະສິດທິຜົນ.

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

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

-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"
ຄວບຄຸມວ່າເຄື່ອງຈັກເປົ້າໝາຍຮອງຮັບທຸງນີ້ຫຼືບໍ່.

ການຕັ້ງຄ່າເລີ່ມຕົ້ນ (ເມື່ອບໍ່ປັບແຕ່ງຂະໜາດ) ສໍາລັບ 32-bit GNU/Linux x86 ແລະ 32-bit
Darwin x86 ເປົ້າຫມາຍແມ່ນ -fomit-frame-pointer. ທ່ານສາມາດ configure GCC ກັບ
--enable-frame-pointer ຕັ້ງຄ່າຕົວເລືອກເພື່ອປ່ຽນຄ່າເລີ່ມຕົ້ນ.

ເປີດໃຊ້ໃນລະດັບ -O, -O2, -O3, -ອສ.

-foptimize-sibling-calls
ປັບແຕ່ງການໂທຫາອ້າຍເອື້ອຍນ້ອງ ແລະຫາງສຽງຊ້ຳ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3, -ອສ.

-foptimize-strlen
ປັບແຕ່ງຟັງຊັນ C string ມາດຕະຖານຕ່າງໆ (ເຊັ່ນ: "strlen", "strchr" ຫຼື "strcpy") ແລະ
ຄູ່ "_FORTIFY_SOURCE" ຂອງເຂົາເຈົ້າເປັນທາງເລືອກທີ່ໄວກວ່າ.

ເປີດໃຊ້ໃນລະດັບ -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 ກວດເບິ່ງວ່າ a
ຕົວແປແມ່ນອ້າງອີງ, ໂດຍບໍ່ຄໍານຶງເຖິງການເພີ່ມປະສິດທິພາບຫຼືບໍ່ເປີດ, ໃຫ້ໃຊ້
ໄດ້ -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
ປະຕິບັດການກຳນົດເວລາໂມດູໂລທີ່ອີງໃສ່ SMS ທີ່ຮຸກຮານຫຼາຍຂຶ້ນດ້ວຍການຍ້າຍການລົງທະບຽນທີ່ອະນຸຍາດ. ໂດຍ
ການຕັ້ງທຸງນີ້ ຂອບຕ້ານການເອື່ອຍອີງທີ່ແນ່ນອນຈະຖືກລຶບ, ເຊິ່ງກໍ່ໃຫ້ເກີດການ
ການຜະລິດຂອງການເຄື່ອນໄຫວ reg ໂດຍອີງໃສ່ການວິເຄາະໄລຍະຊີວິດ. ທາງເລືອກນີ້ມີປະສິດທິພາບ
ພຽງແຕ່ມີ -fmodulo-sched enabled

-fno-branch-count-reg
ຢ່າໃຊ້ຄໍາແນະນໍາ "ຫຼຸດລົງແລະສາຂາ" ໃນທະບຽນການນັບ, ແຕ່ແທນທີ່ຈະ
ສ້າງລໍາດັບຂອງຄໍາແນະນໍາທີ່ຫຼຸດລົງການລົງທະບຽນ, ປຽບທຽບກັບ
ສູນ, ຫຼັງຈາກນັ້ນສາຂາໂດຍອີງໃສ່ຜົນໄດ້ຮັບ. ຕົວເລືອກນີ້ມີຄວາມຫມາຍພຽງແຕ່ກ່ຽວກັບ
ສະຖາປັດຕະຍະກໍາທີ່ສະຫນັບສະຫນູນຄໍາແນະນໍາດັ່ງກ່າວ, ເຊິ່ງປະກອບມີ x86, PowerPC, IA-64 ແລະ
S / 390.

ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O1 ແລະສູງກວ່າ.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -fbranch-count-reg.

-fno-function-cse
ຢ່າໃສ່ທີ່ຢູ່ຂອງຫນ້າທີ່ຢູ່ໃນທະບຽນ; ເຮັດແຕ່ລະຄໍາແນະນໍາທີ່ໂທຫາ a
ຟັງຊັນຄົງທີ່ປະກອບດ້ວຍທີ່ຢູ່ຂອງຟັງຊັນຢ່າງຊັດເຈນ.

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

ຄ່າເລີ່ມຕົ້ນແມ່ນ -function-cse

-fno-zero-initialized-in-bss
ຖ້າເປົ້າຫມາຍສະຫນັບສະຫນູນພາກສ່ວນ BSS, GCC ໂດຍຄ່າເລີ່ມຕົ້ນຈະວາງຕົວແປທີ່ເປັນ
ເລີ່ມຕົ້ນເປັນສູນເຂົ້າໄປໃນ BSS. ນີ້ສາມາດປະຫຍັດພື້ນທີ່ໃນລະຫັດຜົນໄດ້ຮັບ.

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

ຄ່າເລີ່ມຕົ້ນແມ່ນ -fzero-initialized-in-bss.

-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 ປະກອບດ້ວຍ a
ລຳດັບການໂຫຼດ/ເກັບຮັກສາເພື່ອປ່ຽນເປັນການໂຫຼດຢູ່ນອກວົງການ, ແລະສຳເນົາ/ເກັບຮັກສາພາຍໃນ
the loop

ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນເມື່ອ -fgcse ເປີດໃຊ້ງານ.

-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 ຖືກເປີດໃຊ້ແລ້ວ, ການກໍາຈັດການໂຫຼດຊໍ້າຊ້ອນແມ່ນດໍາເນີນການ
ຫຼັງຈາກໂຫຼດໃໝ່. ຈຸດ​ປະ​ສົງ​ຂອງ​ການ​ຜ່ານ​ຄັ້ງ​ນີ້​ແມ່ນ​ເພື່ອ​ທໍາ​ຄວາມ​ສະ​ອາດ​ການ​ຮົ່ວ​ໄຫລ​ຊ້ຳ​ຊ້ອນ.

-faggressive-loop-optimizations
ຕົວເລືອກນີ້ບອກຕົວເພີ່ມປະສິດທິພາບຂອງ loop ໃຫ້ໃຊ້ຂໍ້ຈໍາກັດຂອງພາສາເພື່ອກໍານົດຂອບເຂດສໍາລັບ
ຈໍາ​ນວນ​ຂອງ​ການ​ຊ​້​ໍາ​ຂອງ loop ໄດ້​. ນີ້ສົມມຸດວ່າລະຫັດ loop ບໍ່ໄດ້ຮຽກຮ້ອງ
ພຶດຕິກໍາທີ່ບໍ່ໄດ້ກໍານົດໂດຍຕົວຢ່າງເຮັດໃຫ້ຈໍານວນເຕັມລົງລາຍເຊັນ overflows ຫຼື out-of-bound
ການເຂົ້າເຖິງ array. ຂອບເຂດສໍາລັບຈໍານວນຂອງການຊໍ້າຄືນຂອງ loop ຖືກນໍາໃຊ້ເພື່ອນໍາພາ
loop unrolling ແລະການປອກເປືອກແລະ loop exit ການເພີ່ມປະສິດທິພາບການທົດສອບ. ຕົວເລືອກນີ້ຖືກເປີດໃຊ້
ໂດຍຄ່າເລີ່ມຕົ້ນ

-funsafe-loop-optimizations
ຕົວເລືອກນີ້ບອກຕົວເພີ່ມປະສິດທິພາບ loop ໃຫ້ສົມມຸດວ່າດັດຊະນີ loop ບໍ່ overflow, ແລະ
ວ່າ loops ທີ່ມີເງື່ອນໄຂທາງອອກ nontrivial ແມ່ນບໍ່ເປັນນິດ. ນີ້ເຮັດໃຫ້ກວ້າງຂຶ້ນ
ຊ່ວງຂອງການເພີ່ມປະສິດທິພາບຂອງ loop ເຖິງແມ່ນວ່າຕົວເພີ່ມປະສິດທິພາບ loop ຕົວມັນເອງບໍ່ສາມາດພິສູດໄດ້ວ່າສິ່ງເຫຼົ່ານີ້
ສົມມຸດຕິຖານຖືກຕ້ອງ. ຖ້າທ່ານໃຊ້ -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
ສາມາດເຮັດໄດ້ໂດຍເລກເລກມາດຕະຖານ. ການນໍາໃຊ້ການປະຕິບັດເງື່ອນໄຂໃນຊິບບ່ອນທີ່ມັນຢູ່
ສາມາດໃຊ້ໄດ້ແມ່ນຄວບຄຸມໂດຍ -fif ການ​ປ່ຽນ​ແປງ 2​.

ເປີດໃຊ້ໃນລະດັບ -O, -O2, -O3, -ອສ.

-fif ການ​ປ່ຽນ​ແປງ 2​
ໃຊ້ການປະຕິບັດຕາມເງື່ອນໄຂ (ບ່ອນມີ) ເພື່ອປ່ຽນການກະໂດດຕາມເງື່ອນໄຂ
ສາຂາ-ໜ້ອຍທຽບເທົ່າ.

ເປີດໃຊ້ໃນລະດັບ -O, -O2, -O3, -ອສ.

-fdeclone-ctor-dtor
C ++ ABI ຕ້ອງການຈຸດເຂົ້າຫຼາຍຈຸດສໍາລັບຜູ້ກໍ່ສ້າງ ແລະຕົວທໍາລາຍ: ຫນຶ່ງສໍາລັບ a
subobject ພື້ນຖານ, ຫນຶ່ງສໍາລັບວັດຖຸທີ່ສົມບູນ, ແລະຫນຶ່ງສໍາລັບການ destructor virtual ທີ່ໂທຫາ
ຜູ້ປະກອບການລຶບອອກຫຼັງຈາກນັ້ນ. ສໍາລັບລໍາດັບຊັ້ນທີ່ມີຖານ virtual, ພື້ນຖານແລະສົມບູນ
variants ແມ່ນ clones, ຊຶ່ງຫມາຍຄວາມວ່າສອງສໍາເນົາຂອງຫນ້າທີ່. ດ້ວຍທາງເລືອກນີ້, ໄດ້
ພື້ນຖານແລະຕົວແປທີ່ສົມບູນໄດ້ຖືກປ່ຽນເປັນຂອບໃຈທີ່ເອີ້ນການປະຕິບັດທົ່ວໄປ.

ເປີດໃຊ້ໂດຍ -ອສ.

-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, -ອສ.

-fdevirtualize-speculatively
ພະຍາຍາມປ່ຽນການໂທໄປເປັນຟັງຊັນສະເໝືອນເປັນການໂທໂດຍກົງແບບຄາດເດົາ. ອີງໃສ່
ການ​ວິ​ເຄາະ​ຮູບ​ການ​ສືບ​ທອດ​ປະ​ເພດ​, ການ​ກໍາ​ນົດ​ສໍາ​ລັບ​ການ​ເອີ້ນ​ທີ່​ກໍາ​ນົດ​ໄວ້​ຂອງ​
ເປົ້າ​ຫມາຍ​ທີ່​ເປັນ​ໄປ​ໄດ້​. ຖ້າຊຸດມີຂະຫນາດນ້ອຍ, ມັກຂະຫນາດ 1, ປ່ຽນການໂທເປັນ a
ການຕັດສິນໃຈຕາມເງື່ອນໄຂລະຫວ່າງການໂທໂດຍກົງແລະທາງອ້ອມ. ການໂທທີ່ຄາດເດົາໄດ້ເປີດໃຊ້ງານ
ການເພີ່ມປະສິດທິພາບເພີ່ມເຕີມ, ເຊັ່ນ inlining. ໃນເວລາທີ່ພວກເຂົາເບິ່ງຄືວ່າບໍ່ມີປະໂຫຍດຕໍ່ໄປອີກ
ການເພີ່ມປະສິດທິພາບ, ພວກມັນຖືກປ່ຽນເປັນຮູບແບບຕົ້ນສະບັບ.

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

-fexpensive-optimizations
ປະຕິບັດການເພີ່ມປະສິດທິພາບເລັກນ້ອຍທີ່ຂ້ອນຂ້າງແພງ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3, -ອສ.

ຟຣີ
ພະຍາຍາມເອົາຄໍາແນະນໍາການຂະຫຍາຍທີ່ຊໍ້າຊ້ອນ. ນີ້ແມ່ນເປັນປະໂຫຍດໂດຍສະເພາະສໍາລັບ
ສະຖາປັດຕະຍະກໍາ x86-64, ເຊິ່ງ implicitly zero-extens ໃນ 64-bit registers ຫຼັງຈາກ.
ຂຽນໃສ່ເຄິ່ງ 32-bit ຕ່ໍາຂອງພວກເຂົາ.

ເປີດໃຊ້ສໍາລັບ Alpha, AArch64 ແລະ x86 ໃນລະດັບ -O2, -O3, -ອສ.

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

-flive-range-shrinkage
ພະຍາຍາມຫຼຸດຜ່ອນຄວາມກົດດັນຂອງການລົງທະບຽນໂດຍຜ່ານການຫົດຕົວຂອງລະດັບຊີວິດການລົງທະບຽນ. ນີ້​ແມ່ນ
ທີ່ເປັນປະໂຫຍດສໍາລັບໂປເຊດເຊີໄວທີ່ມີຊຸດລົງທະບຽນຂະຫນາດນ້ອຍຫຼືປານກາງ.

-fira-algorithm=ຂັ້ນຕອນວິທີ
ໃຊ້ສູດການໃສ່ສີທີ່ລະບຸໄວ້ສໍາລັບຜູ້ຈັດສັນການລົງທະບຽນປະສົມປະສານ. ໄດ້
ຂັ້ນຕອນວິທີ ການໂຕ້ຖຽງສາມາດເປັນ ບູລິມະສິດ, ເຊິ່ງກໍານົດສີບູລິມະສິດຂອງ Chow, ຫຼື CB,
ເຊິ່ງລະບຸການໃສ່ສີ Chaitin-Briggs. ການໃສ່ສີ Chaitin-Briggs ບໍ່ໄດ້ຖືກປະຕິບັດ
ສໍາລັບສະຖາປັດຕະຍະກໍາທັງຫມົດ, ແຕ່ສໍາລັບເປົ້າຫມາຍເຫຼົ່ານັ້ນທີ່ສະຫນັບສະຫນູນມັນ, ມັນເປັນຄ່າເລີ່ມຕົ້ນ
ເນື່ອງຈາກວ່າມັນສ້າງລະຫັດທີ່ດີກວ່າ.

-fira-region=ພູມິພາກ
ໃຊ້ພາກພື້ນທີ່ລະບຸໄວ້ສໍາລັບຜູ້ຈັດສັນການລົງທະບຽນປະສົມປະສານ. ໄດ້ ພູມິພາກ ການໂຕ້ຖຽງ
ຄວນຈະເປັນຫນຶ່ງໃນດັ່ງຕໍ່ໄປນີ້:

ທັງຫມົດ ໃຊ້ loops ທັງໝົດເປັນເຂດການຈັດສັນການລົງທະບຽນ. ນີ້ສາມາດໃຫ້ຜົນໄດ້ຮັບທີ່ດີທີ່ສຸດສໍາລັບ
ເຄື່ອງຈັກທີ່ມີຊຸດການລົງທະບຽນຂະຫນາດນ້ອຍແລະ / ຫຼືສະຫມໍ່າສະເຫມີ.

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

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

-fira-hoist-pressure
ໃຊ້ IRA ເພື່ອປະເມີນຄວາມກົດດັນຂອງການລົງທະບຽນໃນລະຫັດ hoisting pass ສໍາລັບການຕັດສິນໃຈທີ່ຈະ hoist
ການສະແດງອອກ. ຕົວເລືອກນີ້ມັກຈະເຮັດໃຫ້ລະຫັດຂະຫນາດນ້ອຍກວ່າ, ແຕ່ມັນສາມາດຊ້າລົງ
compiler ລົງ.

ຕົວເລືອກນີ້ຖືກເປີດໃຊ້ໃນລະດັບ -ອສ ສໍາລັບເປົ້າຫມາຍທັງຫມົດ.

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

-flra-remat
ເປີດໃຊ້ CFG-sensitive rematerialization ໃນ LRA. ແທນທີ່ຈະໂຫລດມູນຄ່າຂອງການຮົ່ວໄຫລ
pseudos, LRA ພະຍາຍາມ rematerialize (recalculate) ຄ່າຖ້າຫາກວ່າມັນມີກໍາໄລ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3, -ອສ.

-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 is
ໃຊ້ແລ້ວ. -fno-sched-stalled-insns-dep ເທົ່າກັບ -fsched-stalled-insns-dep=0.
-fsched-stalled-insns-dep ບໍ່ມີຄ່າເທົ່າກັບ
-fsched-stalled-insns-dep=1.

-fsched2-use-superblocks
ເມື່ອກໍານົດເວລາຫຼັງຈາກການຈັດສັນການລົງທະບຽນ, ໃຊ້ການກໍານົດເວລາ superblock. ນີ້ອະນຸຍາດໃຫ້
ການເຄື່ອນໄຫວຂ້າມຂອບເຂດຕັນພື້ນຖານ, ສົ່ງຜົນໃຫ້ຕາຕະລາງໄວຂຶ້ນ. ທາງເລືອກນີ້ແມ່ນ
ການທົດລອງ, ຍ້ອນວ່າບໍ່ແມ່ນຄໍາອະທິບາຍເຄື່ອງຈັກທັງຫມົດທີ່ໃຊ້ໂດຍ GCC ແບບຈໍາລອງ CPU ຢ່າງໃກ້ຊິດພຽງພໍ
ເພື່ອຫຼີກເວັ້ນການຜົນໄດ້ຮັບທີ່ບໍ່ຫນ້າເຊື່ອຖືຈາກ algorithm.

ນີ້ພຽງແຕ່ເຮັດໃຫ້ຄວາມຮູ້ສຶກໃນເວລາທີ່ກໍານົດເວລາຫຼັງຈາກການຈັດສັນການລົງທະບຽນ, 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
ການກຳນົດເວລາຂອງໂມດູໂລແມ່ນປະຕິບັດກ່ອນການກຳນົດເວລາແບບດັ້ງເດີມ. ຖ້າ loop ເປັນ modulo
ກໍານົດເວລາ, ຕໍ່ມາການກໍານົດເວລາຜ່ານອາດຈະມີການປ່ຽນແປງຕາຕະລາງຂອງມັນ. ໃຊ້ຕົວເລືອກນີ້ເພື່ອ
ຄວບຄຸມພຶດຕິກຳນັ້ນ.

-fselective-ການ​ກໍາ​ນົດ​ເວ​ລາ​
ກໍານົດເວລາຄໍາແນະນໍາໂດຍໃຊ້ສູດການຄິດໄລ່ການເລືອກ. ການເລືອກຕາຕະລາງການແລ່ນ
ແທນການຜ່ານຕາຕະລາງທໍາອິດ.

-fselective-ກຳນົດ​ເວລາ2
ກໍານົດເວລາຄໍາແນະນໍາໂດຍໃຊ້ສູດການຄິດໄລ່ການເລືອກ. ການເລືອກຕາຕະລາງການແລ່ນ
ແທນການຜ່ານຕາຕະລາງທີສອງ.

-fsel-sched-pipelining
ເປີດໃຊ້ການວາງທໍ່ຊອບແວຂອງ loops ພາຍໃນທີ່ສຸດໃນລະຫວ່າງການກໍານົດເວລາການເລືອກ. ນີ້
ທາງເລືອກທີ່ບໍ່ມີຜົນກະທົບເວັ້ນເສຍແຕ່ວ່າຫນຶ່ງໃນ -fselective-ການ​ກໍາ​ນົດ​ເວ​ລາ​ or -fselective-ກຳນົດ​ເວລາ2
ແມ່ນໄດ້ຫັນສຸດ.

-fsel-sched-pipelining-outer-loops
ໃນເວລາທີ່ທໍ່ loops ໃນລະຫວ່າງການກໍານົດເວລາການຄັດເລືອກ, ຍັງທໍ່ loops ພາຍນອກ. ນີ້
ທາງເລືອກທີ່ບໍ່ມີຜົນກະທົບເວັ້ນເສຍແຕ່ -fsel-sched-pipelining ແມ່ນໄດ້ຫັນສຸດ.

-fsemantic-interposition
ຮູບແບບວັດຖຸບາງອັນ, ເຊັ່ນ ELF, ອະນຸຍາດໃຫ້ມີການເຊື່ອມໂຍງຂອງສັນຍາລັກໂດຍຕົວເຊື່ອມຕໍ່ແບບເຄື່ອນໄຫວ.
ນີ້ຫມາຍຄວາມວ່າສໍາລັບສັນຍາລັກທີ່ສົ່ງອອກມາຈາກ DSO, compiler ບໍ່ສາມາດປະຕິບັດໄດ້
ການຂະຫຍາຍພັນແບບ interprocedural, inlining ແລະການເພີ່ມປະສິດທິພາບອື່ນໆທີ່ຄາດວ່າຈະມີ
ຟັງຊັນຫຼືຕົວແປໃນຄໍາຖາມອາດຈະມີການປ່ຽນແປງ. ໃນຂະນະທີ່ຄຸນນະສົມບັດນີ້ແມ່ນເປັນປະໂຫຍດ, ສໍາລັບ
ຕົວຢ່າງ, ເພື່ອຂຽນຄືນຫນ້າທີ່ການຈັດສັນຫນ່ວຍຄວາມຈໍາໂດຍການດໍາເນີນການ debugging, ມັນແມ່ນ
ລາຄາແພງໃນດ້ານຄຸນນະພາບຂອງລະຫັດ. ກັບ -fno-semantic-interposition compiler ໄດ້
ສົມມຸດວ່າຖ້າ interposition ເກີດຂຶ້ນສໍາລັບຟັງຊັນ, ຟັງຊັນການຂຽນທັບຈະມີ
ຊັດເຈນ semantics ດຽວກັນ (ແລະຜົນຂ້າງຄຽງ). ເຊັ່ນດຽວກັນຖ້າຫາກວ່າ interposition ເກີດຂຶ້ນ
ສໍາລັບຕົວແປ, constructor ຂອງຕົວແປຈະຄືກັນ. ທຸງບໍ່ມີ
ຜົນ​ກະ​ທົບ​ສໍາ​ລັບ​ຫນ້າ​ທີ່​ປະ​ກາດ​ຢ່າງ​ຊັດ​ເຈນ​ໃນ​ເສັ້ນ (ທີ່​ມັນ​ບໍ່​ເຄີຍ​ອະ​ນຸ​ຍາດ​ໃຫ້​ສໍາ​ລັບ​ການ​
interposition ການປ່ຽນແປງ semantics) ແລະສໍາລັບສັນຍາລັກປະກາດຢ່າງຈະແຈ້ງວ່າອ່ອນແອ.

-fshrink-wrap
ປ່ອຍ prologues ຟັງຊັນພຽງແຕ່ກ່ອນບາງສ່ວນຂອງຟັງຊັນທີ່ຕ້ອງການ, ແທນທີ່ຈະຢູ່
ເທິງສຸດຂອງຫນ້າທີ່. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າ.

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

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

ເປີດໃຊ້ໃນລະດັບ -O2, -O3, -ອສ.

-fcombine-stack-ປັບ
ຕິດຕາມການປັບຕົວ stack (pushes ແລະ pops) ແລະ stack ການອ້າງອີງຫນ່ວຍຄວາມຈໍາແລະຫຼັງຈາກນັ້ນພະຍາຍາມ
ເພື່ອຊອກຫາວິທີທີ່ຈະສົມທົບພວກມັນ.

ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O1 ແລະສູງກວ່າ.

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

ເປີດໃຊ້ໃນລະດັບ -O2, -O3, -ອສ.

-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 ແລະສູງກວ່າ.

-fhoist-adjacent-loads
ໂດຍຄາດການວ່າ hoist loads ຈາກທັງສອງສາຂາຂອງ if-then-else ຖ້າການໂຫຼດມາຈາກ
ສະຖານທີ່ໃກ້ຄຽງໃນໂຄງສ້າງດຽວກັນແລະສະຖາປັດຕະຍະກໍາເປົ້າຫມາຍມີເງື່ອນໄຂ
ການ​ເຄື່ອນ​ໄຫວ​ຄໍາ​ແນະ​ນໍາ​. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O2 ແລະສູງກວ່າ.

-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-cp-alignment
ເມື່ອເປີດໃຊ້ງານ, ການເພີ່ມປະສິດທິພາບນີ້ຂະຫຍາຍການຈັດລຽງຂອງຕົວກໍານົດການຟັງຊັນເພື່ອສະຫນັບສະຫນູນ
ການປະຕິບັດ vectorization ແລະ string ທີ່ດີກວ່າ.

ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O2 ແລະ -ອສ. ມັນຮຽກຮ້ອງໃຫ້ມີນັ້ນ -fipa-cp ເປີດໃຊ້ງານ.

-fipa-icf
ປະຕິບັດການພັບລະຫັດທີ່ຄືກັນສຳລັບຟັງຊັນ ແລະຕົວແປທີ່ອ່ານເທົ່ານັ້ນ. ໄດ້
ການເພີ່ມປະສິດທິພາບຈະຫຼຸດຂະໜາດຂອງລະຫັດ ແລະອາດຈະລົບກວນການຍົກເລີກການຕອບໂຕ້ໂດຍການປ່ຽນຟັງຊັນໃດໜຶ່ງ
ເທົ່າກັບຊື່ອື່ນ. ການເພີ່ມປະສິດທິພາບເຮັດວຽກມີປະສິດທິພາບຫຼາຍຂຶ້ນກັບ
ເປີດໃຊ້ການເພີ່ມປະສິດທິພາບເວລາເຊື່ອມຕໍ່ແລ້ວ.

ຢ່າງໃດກໍຕາມ, ພຶດຕິກໍາແມ່ນຄ້າຍຄືກັນກັບການເພີ່ມປະສິດທິພາບ Gold Linker ICF, GCC ICF ເຮັດວຽກ
ລະດັບທີ່ແຕກຕ່າງກັນແລະດັ່ງນັ້ນການເພີ່ມປະສິດທິພາບແມ່ນບໍ່ຄືກັນ - ມີຄວາມທຽບເທົ່າ
ຖືກພົບເຫັນພຽງແຕ່ໂດຍ GCC ແລະຄວາມທຽບເທົ່າທີ່ພົບເຫັນພຽງແຕ່ໂດຍຄໍາ.

ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O2 ແລະ -ອສ.

-fisolate-erroneous-paths-dereference
ກວດຫາເສັ້ນທາງທີ່ເຮັດໃຫ້ເກີດພຶດຕິກຳທີ່ຜິດພາດ ຫຼືບໍ່ໄດ້ກຳນົດໄວ້ ເນື່ອງຈາກການປະຕິເສດການອ້າງອີງ null
ຕົວຊີ້. ແຍກເສັ້ນທາງເຫຼົ່ານັ້ນອອກຈາກກະແສການຄວບຄຸມຕົ້ນຕໍແລະຫັນຄໍາຖະແຫຼງທີ່
ພຶດຕິກຳທີ່ຜິດພາດ ຫຼືບໍ່ໄດ້ກຳນົດໃຫ້ເປັນຈັ່ນຈັບ. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O2
ແລະສູງກວ່າ.

-fisolate-erroneous-paths-attribute
ກວດຫາເສັ້ນທາງທີ່ເຮັດໃຫ້ເກີດພຶດຕິກຳທີ່ຜິດພາດ ຫຼືບໍ່ໄດ້ກຳນົດເນື່ອງຈາກຄ່າ null ຖືກໃຊ້
ໃນທາງທີ່ຫ້າມໂດຍຄຸນສົມບັດ "returns_nonnull" ຫຼື "nonnull". ແຍກເສັ້ນທາງເຫຼົ່ານັ້ນ
ຈາກການໄຫຼເຂົ້າຂອງການຄວບຄຸມຕົ້ນຕໍແລະປ່ຽນຄໍາຖະແຫຼງທີ່ມີພຶດຕິກໍາທີ່ຜິດພາດຫຼືບໍ່ໄດ້ກໍານົດ
ເຂົ້າໄປໃນຈັ່ນຈັບ. ອັນນີ້ບໍ່ໄດ້ຖືກເປີດໃຊ້ໃນຂະນະນີ້, ແຕ່ອາດຈະຖືກເປີດໃຊ້ໂດຍ -O2 ໃນ​ອາ​ນາ​ຄົດ.

- ອ່າງລ້າງມື
ປະຕິບັດການເຄື່ອນໄຫວເກັບຮັກສາໄປຂ້າງຫນ້າກ່ຽວກັບຕົ້ນໄມ້. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະ
ສູງຂຶ້ນ.

-ftree-bit-ccp
ປະຕິບັດການຂະຫຍາຍພັນແບບຄົງທີ່ເລັກນ້ອຍຕາມເງື່ອນໄຂ ແລະ ຂະຫຍາຍພັນດ້ວຍຕົວຊີ້
ຂໍ້​ມູນ​ການ​ຈັດ​ຕັ້ງ​. pass ນີ້ດໍາເນີນການພຽງແຕ່ຢູ່ໃນຕົວແປ scalar ທ້ອງຖິ່ນແລະແມ່ນ
ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າ. ມັນຮຽກຮ້ອງໃຫ້ມີນັ້ນ -ftree-ccp ເປີດໃຊ້ງານ.

-ftree-ccp
ປະຕິບັດການຂະຫຍາຍພັນແບບຄົງທີ່ຕາມເງື່ອນໄຂ (CCP) ຢູ່ເທິງຕົ້ນໄມ້. ຜ່ານນີ້ເທົ່ານັ້ນ
ດໍາເນີນການຢູ່ໃນຕົວແປ scalar ທ້ອງຖິ່ນແລະຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າ.

-fssa-phiopt
ປະຕິບັດການຈັບຄູ່ຮູບແບບໃນ nodes SSA PHI ເພື່ອປັບປຸງລະຫັດເງື່ອນໄຂ. ຜ່ານນີ້ແມ່ນ
ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -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-isl ເພື່ອເປີດໃຊ້ງານ
ໂຄງລ່າງພື້ນຖານການຫັນປ່ຽນ 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-isl to
ເປີດໃຊ້ໂຄງສ້າງການຫັນປ່ຽນ 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-isl to
ເປີດໃຊ້ໂຄງສ້າງການຫັນປ່ຽນ 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 ພາຍໃນທີ່ສຸດ
iterates ຫຼາຍກວ່າຈໍານວນຂໍ້ມູນຂະຫນາດນ້ອຍກວ່າທີ່ສາມາດເກັບຮັກສາໄວ້ໃນຖານຄວາມຈໍາ. ນີ້
ການເພີ່ມປະສິດທິພາບໃຊ້ກັບທຸກພາສາທີ່ສະຫນັບສະຫນູນໂດຍ GCC ແລະບໍ່ຈໍາກັດ
ຟໍຣັນ. ເພື່ອໃຊ້ການປ່ຽນລະຫັດນີ້, GCC ຕ້ອງໄດ້ຮັບການຕັ້ງຄ່າດ້ວຍ --with-isl to
ເປີດໃຊ້ໂຄງສ້າງການຫັນປ່ຽນ Graphite loop.

-fgraphite-ຕົວຕົນ
ເປີດໃຊ້ການຫັນປ່ຽນຕົວຕົນສໍາລັບ graphite. ສໍາລັບທຸກໆ SCoP ພວກເຮົາສ້າງ
ການສະແດງ polyhedral ແລະປ່ຽນມັນກັບຄືນໄປບ່ອນ gimple. ການນໍາໃຊ້ -fgraphite-ຕົວຕົນ
ພວກເຮົາສາມາດກວດສອບຄ່າໃຊ້ຈ່າຍຫຼືຜົນປະໂຫຍດຂອງ GIMPLE -> GRAPHITE -> ການຫັນເປັນ GIMPLE.
ບາງການເພີ່ມປະສິດທິພາບຫນ້ອຍກໍ່ຖືກປະຕິບັດໂດຍຕົວສ້າງລະຫັດ ISL ເຊັ່ນ: ດັດສະນີ
ການແຍກແລະການລົບລ້າງລະຫັດຕາຍໃນ loops.

-floop-nest-optimize
ເປີດໃຊ້ຕົວເພີ່ມປະສິດທິພາບຂອງ loop nest ທີ່ອີງໃສ່ ISL. ນີ້ແມ່ນຕົວເພີ່ມປະສິດທິພາບຂອງ loop ທົ່ວໄປທີ່ອີງໃສ່
ຢູ່ໃນລະບົບການເພີ່ມປະສິດທິພາບຂອງ Pluto. ມັນຄິດໄລ່ໂຄງສ້າງ loop ເຫມາະສໍາລັບ
data-locality ແລະຂະຫນານ. ທາງເລືອກນີ້ແມ່ນທົດລອງ.

-floop-unroll-and- jam
ເປີດໃຊ້ການຖອດຖອນ ແລະຕິດຂັດສໍາລັບຕົວເພີ່ມປະສິດທິພາບຂອງ loop nest ຂອງ ISL. ປັດໄຈ unroll ສາມາດ
ການ​ປ່ຽນ​ແປງ​ໂດຍ​ການ​ນໍາ​ໃຊ້​ loop-unroll-jam-size ພາລາມິເຕີ. ຂະໜາດທີ່ຖອດອອກ (ນັບ
ຈາກພາຍໃນທີ່ສຸດ) ສາມາດປ່ຽນແປງໄດ້ໂດຍໃຊ້ loop-unroll-jam-depth ພາລາມິເຕີ.
.

-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 (ການໂທຟັງຊັນ, ການດໍາເນີນງານທີ່ຂະຫຍາຍໄປສູ່ລໍາດັບທີ່ບໍ່ແມ່ນເລື່ອງຫຍໍ້
ຂອງ 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 ນອກຈາກແຕ່ລະ.
ອື່ນ, ເຊັ່ນວ່າພວກມັນມີແນວໂນ້ມທີ່ຈະມີຄ່າທີ່ຄາດໄວ້ໃນການດີບັກ
session

-ftree-coalesce-vars
ບອກຊື່ copyrename pass (ເບິ່ງ -free-copyrename) ເພື່ອ​ພະ​ຍາ​ຍາມ​ທີ່​ຈະ​ລວມ​ຜູ້​ໃຊ້​ຂະ​ຫນາດ​ນ້ອຍ -
ກໍານົດຕົວແປເຊັ່ນດຽວກັນ, ແທນທີ່ຈະພຽງແຕ່ compiler temporaries. ນີ້ອາດຈະຈໍາກັດຢ່າງຮ້າຍແຮງ
ຄວາມ​ສາ​ມາດ​ແກ້​ໄຂ​ບັນ​ຫາ​ໂຄງ​ການ​ທີ່​ເຫມາະ​ສົມ​ທີ່​ສັງ​ລວມ​ກັບ​ -fno-var-tracking-assignments.
ໃນຮູບແບບທີ່ຖືກປະຕິເສດ, ທຸງນີ້ປ້ອງກັນບໍ່ໃຫ້ SSA coalescing ຂອງຕົວແປຂອງຜູ້ໃຊ້, ລວມທັງ
ຢູ່ໃນແຖວ. ຕົວເລືອກນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

- ຫ້າ​ປີ​
ດໍາເນີນການທົດແທນການສະແດງອອກຊົ່ວຄາວໃນໄລຍະ SSA->ໄລຍະປົກກະຕິ. ໂສດ
use/single def temporaries ແມ່ນຖືກແທນທີ່ຢູ່ໃນສະຖານທີ່ໃຊ້ຂອງພວກເຂົາດ້ວຍການກໍານົດຂອງພວກເຂົາ
ການສະແດງອອກ. ນີ້ສົ່ງຜົນໃຫ້ລະຫັດທີ່ບໍ່ແມ່ນ GIMPLE, ແຕ່ໃຫ້ຕົວຂະຫຍາຍຫຼາຍ
ຕົ້ນໄມ້ທີ່ຊັບຊ້ອນເພື່ອເຮັດວຽກເຮັດໃຫ້ການຜະລິດ RTL ດີຂຶ້ນ. ອັນນີ້ຖືກເປີດໃຊ້ໂດຍ
ຄ່າເລີ່ມຕົ້ນຢູ່ -O ແລະສູງກວ່າ.

-ftree-slsr
ປະຕິບັດການຫຼຸດຜ່ອນຄວາມເຂັ້ມແຂງເສັ້ນຊື່ໃສ່ຕົ້ນໄມ້. ນີ້ຮັບຮູ້ທີ່ກ່ຽວຂ້ອງ
ການສະແດງຜົນທີ່ກ່ຽວຂ້ອງກັບການຄູນ ແລະແທນທີ່ພວກມັນດ້ວຍການຄຳນວນລາຄາຖືກກວ່າ
ເມື່ອເປັນໄປໄດ້. ອັນນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າ.

-ftree-vectorize
ປະຕິບັດ vectorization ກ່ຽວກັບຕົ້ນໄມ້. ທຸງນີ້ເປີດໃຊ້ງານ -ftree-loop-vectorize ແລະ
-ftree-slp-vectorize ຖ້າ​ຫາກ​ວ່າ​ບໍ່​ໄດ້​ລະ​ບຸ​ຢ່າງ​ຊັດ​ເຈນ​.

-ftree-loop-vectorize
ປະຕິບັດ vectorization loop ກ່ຽວກັບຕົ້ນໄມ້. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O3 ແລະເວລາໃດ
-ftree-vectorize ເປີດໃຊ້ງານ.

-ftree-slp-vectorize
ປະຕິບັດການສ້າງ vectorization ພື້ນຖານກ່ຽວກັບຕົ້ນໄມ້. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O3 ແລະ
ໃນເວລາທີ່ -ftree-vectorize ເປີດໃຊ້ງານ.

-fvect-cost-model=ຮູບແບບ
ປ່ຽນແປງຮູບແບບຄ່າໃຊ້ຈ່າຍທີ່ໃຊ້ສໍາລັບ vectorization. ໄດ້ ຮູບແບບ ການໂຕ້ຖຽງຄວນຈະເປັນຫນຶ່ງໃນ
ບໍ່ຈໍາກັດ, ການເຄື່ອນໄຫວ or ລາຄາຖືກ. ກັບ ບໍ່ຈໍາກັດ ຮູບແບບເສັ້ນທາງລະຫັດ vectorized ແມ່ນ
ສົມມຸດວ່າມີກໍາໄລໃນຂະນະທີ່ມີ ການເຄື່ອນໄຫວ ແບບຈໍາລອງ runtime checks ໄດ້
ເສັ້ນທາງລະຫັດ vectorized ເພື່ອເປີດໃຊ້ມັນພຽງແຕ່ສໍາລັບການນັບຊໍ້າຄືນທີ່ອາດຈະດໍາເນີນການ
ໄວກວ່າເມື່ອປະຕິບັດການ loop scalar ຕົ້ນສະບັບ. ໄດ້ ລາຄາຖືກ ຕົວແບບປິດໃຊ້ງານ
vectorization ຂອງ loops ບ່ອນທີ່ການເຮັດດັ່ງນັ້ນຈະເປັນຄ່າໃຊ້ຈ່າຍຫ້າມສໍາລັບຕົວຢ່າງເນື່ອງຈາກ
runtime ທີ່ຕ້ອງການກວດສອບການເອື່ອຍອີງຂອງຂໍ້ມູນຫຼືການຈັດຕໍາແຫນ່ງແຕ່ຖ້າບໍ່ດັ່ງນັ້ນເທົ່າກັບ
ການເຄື່ອນໄຫວ ຕົວແບບ. ຮູບແບບຄ່າໃຊ້ຈ່າຍເລີ່ມຕົ້ນແມ່ນຂຶ້ນກັບທຸງການເພີ່ມປະສິດທິພາບອື່ນໆແລະແມ່ນ
ບໍ່ວ່າຈະເປັນ ການເຄື່ອນໄຫວ or ລາຄາຖືກ.

-fsimd-cost-model=ຮູບແບບ
ປ່ຽນແປງຮູບແບບຄ່າໃຊ້ຈ່າຍທີ່ໃຊ້ສໍາລັບ vectorization ຂອງ loops ຫມາຍດ້ວຍ OpenMP ຫຼື Cilk
ບວກກັບຄໍາສັ່ງ simd. ໄດ້ ຮູບແບບ ການໂຕ້ຖຽງຄວນຈະເປັນຫນຶ່ງໃນ ບໍ່ຈໍາກັດ, ການເຄື່ອນໄຫວ, ລາຄາຖືກ.
ຄຸນ​ຄ່າ​ທັງ​ຫມົດ​ຂອງ​ ຮູບແບບ ມີ​ຄວາມ​ຫມາຍ​ດຽວ​ກັນ​ກັບ​ການ​ອະ​ທິ​ບາຍ​ໃນ​ -fvect-cost-model ແລະໂດຍ
ເລີ່ມຕົ້ນຮູບແບບຄ່າໃຊ້ຈ່າຍທີ່ກໍານົດດ້ວຍ -fvect-cost-model ຖືກນໍາໃຊ້.

-ftree-vrp
ປະຕິບັດການຂະຫຍາຍພັນຂອງມູນຄ່າຕາມຕົ້ນໄມ້. ນີ້ແມ່ນຄ້າຍຄືກັນກັບການຂະຫຍາຍພັນຢ່າງຕໍ່ເນື່ອງ
pass, ແຕ່ແທນທີ່ຈະເປັນຄ່າ, ໄລຍະຂອງຄ່າຈະຖືກຂະຫຍາຍພັນ. ນີ້ອະນຸຍາດໃຫ້
optimizers ເພື່ອເອົາການກວດສອບຂອບເຂດທີ່ບໍ່ຈໍາເປັນເຊັ່ນ: ການກວດສອບຂອບເຂດ array ແລະຕົວຊີ້ null
ກວດກາ. ອັນນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O2 ແລະສູງກວ່າ. ການລົບລ້າງການກວດສອບຕົວຊີ້ null
ແມ່ນເຮັດໄດ້ພຽງແຕ່ຖ້າຫາກວ່າ -fdelete-null-pointer-checks ເປີດໃຊ້ງານ.

-fsplit-ivs-in-unroller
ເປີດໃຊ້ການສະແດງອອກຂອງຄ່າຂອງຕົວແປ induction ໃນການຊໍ້າຄືນຕໍ່ມາຂອງ
unrolled loop ໂດຍໃຊ້ຄ່າໃນ iteration ທໍາອິດ. ນີ້ທໍາລາຍການເພິ່ງພາອາໄສຍາວ
ລະບົບຕ່ອງໂສ້, ດັ່ງນັ້ນການປັບປຸງປະສິດທິພາບຂອງການກໍານົດເວລາຜ່ານ.

ປະສົມປະສານຂອງ -fweb ແລະ CSE ມັກຈະພຽງພໍເພື່ອໃຫ້ໄດ້ຜົນດຽວກັນ.
ຢ່າງໃດກໍ່ຕາມ, ນັ້ນບໍ່ຫນ້າເຊື່ອຖືໃນກໍລະນີທີ່ຮ່າງກາຍຂອງ loop ແມ່ນສັບສົນຫຼາຍກ່ວາ a
ຕັນພື້ນຖານດຽວ. ມັນຍັງບໍ່ເຮັດວຽກຢູ່ໃນສະຖາປັດຕະຍະກໍາບາງຢ່າງເນື່ອງຈາກ
ຂໍ້ຈໍາກັດໃນ 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_expect", ຫຼັງຈາກນັ້ນ
heuristics ຖືກນໍາໃຊ້ເພື່ອຄາດເດົາຄວາມເປັນໄປໄດ້ຂອງສາຂາສໍາລັບສ່ວນທີ່ເຫຼືອຂອງການໄຫຼຂອງການຄວບຄຸມ
graph, ເອົາ "__builtin_expect" ຂໍ້ມູນເຂົ້າໄປໃນບັນຊີ. ການ​ພົວ​ພັນ​ລະ​ຫວ່າງ​
heuristics ແລະ "__builtin_expect" ສາມາດສັບສົນ, ແລະໃນບາງກໍລະນີ, ມັນອາດຈະເປັນປະໂຫຍດ.
ເພື່ອປິດການທໍາງານຂອງ heuristics ເພື່ອໃຫ້ຜົນກະທົບຂອງ "__builtin_expect" ງ່າຍຂຶ້ນ
ເຂົ້າໃຈ

ຄ່າເລີ່ມຕົ້ນແມ່ນ -fguess-ສາຂາ-ຄວາມເປັນໄປໄດ້ ໃນ​ລະ​ດັບ​ -O, -O2, -O3, -ອສ.

-freorder-ຕັນ
Reorder blocks ພື້ນຖານໃນຟັງຊັນລວບລວມເພື່ອຫຼຸດຜ່ອນຈໍານວນຂອງການເອົາ
ສາຂາ ແລະປັບປຸງລະຫັດທ້ອງຖິ່ນ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3.

-freorder-blocks-and-partition
ນອກເຫນືອໄປຈາກ reordering ຕັນພື້ນຖານໃນຫນ້າທີ່ລວບລວມ, ເພື່ອຫຼຸດຜ່ອນ
ຈໍາ​ນວນ​ຂອງ​ສາ​ຂາ​ປະ​ຕິ​ບັດ​, ການ​ແບ່ງ​ປັນ​ທ່ອນ​ໄມ້​ພື້ນ​ຖານ​ຮ້ອນ​ແລະ​ເຢັນ​ເປັນ​ພາກ​ສ່ວນ​ແຍກ​ຕ່າງ​ຫາກ​
ຂອງ​ການ​ປະ​ກອບ​ແລະ​ໄຟລ​໌ .o​, ເພື່ອ​ປັບ​ປຸງ​ຫນ້າ​ທີ່​ແລະ​ການ​ປະ​ຕິ​ບັດ​ທ້ອງ​ຖິ່ນ​ຖານ​ຄວາມ​ຈໍາ​.

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

ເປີດໃຊ້ສໍາລັບ x86 ໃນລະດັບ -O2, -O3.

-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 ເລກຄະນິດສາດ. ເມື່ອທາງເລືອກນີ້ມີຜົນກະທົບໃດໆ
ພະຍາຍາມກໍານົດວ່າການດໍາເນີນການກ່ຽວກັບການ overflows ຕົວເລກທີ່ລົງນາມຕ້ອງໄດ້ຮັບການຂຽນ
ລະມັດລະວັງເພື່ອບໍ່ໃຫ້ມີສ່ວນກ່ຽວຂ້ອງຢ່າງແທ້ຈິງ.

ທາງ​ເລືອກ​ນີ້​ຍັງ​ອະ​ນຸ​ຍາດ​ໃຫ້​ຜູ້​ສັງ​ລວມ​ສົມ​ມຸດ​ຄວາມ​ຫມາຍ​ຕົວ​ຊີ້​ທີ່​ເຂັ້ມ​ງວດ​: ໃຫ້ 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.
ຖ້າ loops ຖືກປະຕິບັດຫຼາຍຄັ້ງ, ນີ້ເຮັດໃຫ້ເຖິງການປະຕິບັດໃດໆຂອງ 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
ຮຸກຮານຫຼາຍຂຶ້ນໂດຍຕົວເພີ່ມປະສິດທິພາບລະຫວ່າງຂັ້ນຕອນ.

ທາງເລືອກນີ້ບໍ່ຄວນຖືກນໍາໃຊ້ໃນການປະສົມປະສານກັບ -flto. ແທນທີ່ຈະອີງໃສ່ຕົວເຊື່ອມຕໍ່
plugin ຄວນໃຫ້ຂໍ້ມູນທີ່ປອດໄພກວ່າແລະຊັດເຈນກວ່າ.

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

ສິ່ງດຽວທີ່ສໍາຄັນທີ່ຕ້ອງຢູ່ໃນໃຈແມ່ນເພື່ອໃຫ້ສາມາດເພີ່ມປະສິດທິພາບການເຊື່ອມຕໍ່ເວລາ
ຈໍາເປັນຕ້ອງໃຊ້ໄດເວີ GCC ເພື່ອປະຕິບັດການເຊື່ອມໂຍງຂັ້ນຕອນ. GCC ຫຼັງຈາກນັ້ນດໍາເນີນການອັດຕະໂນມັດ
link-time optimization ຖ້າມີວັດຖຸທີ່ກ່ຽວຂ້ອງຖືກລວບລວມດ້ວຍ -flto
ທາງເລືອກແຖວຄໍາສັ່ງ. ໂດຍທົ່ວໄປແລ້ວທ່ານຄວນລະບຸຕົວເລືອກການເພີ່ມປະສິດທິພາບທີ່ຈະໃຊ້
ສໍາລັບການເພີ່ມປະສິດທິພາບເວລາເຊື່ອມຕໍ່ເຖິງແມ່ນວ່າ GCC ພະຍາຍາມສະຫລາດໃນການຄາດເດົາການເພີ່ມປະສິດທິພາບ
ລະດັບທີ່ຈະໃຊ້ຈາກທາງເລືອກທີ່ໃຊ້ໃນເວລາລວບລວມຖ້າທ່ານບໍ່ລະບຸຫນຶ່ງໃນການເຊື່ອມຕໍ່-
ເວລາ. ທ່ານສະເຫມີສາມາດ override ການຕັດສິນໃຈອັດຕະໂນມັດເພື່ອເຮັດ link-time optimization ຢູ່
link-time ຜ່ານ -fno-lto ກັບຄໍາສັ່ງເຊື່ອມຕໍ່.

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

ເມື່ອ​ໃດ​ -fuse-linker-plugin ບໍ່ໄດ້ຖືກເປີດໃຊ້ຫຼັງຈາກນັ້ນ, ເມື່ອໄຟລ໌ຖືກລວບລວມດ້ວຍ -flto, ການ
ໄຟລ໌ວັດຖຸທີ່ສ້າງຂຶ້ນມີຂະຫນາດໃຫຍ່ກວ່າໄຟລ໌ວັດຖຸປົກກະຕິເນື່ອງຈາກວ່າມັນມີ GIMPLE
bytecodes ແລະລະຫັດສຸດທ້າຍປົກກະຕິ (ເບິ່ງ -ffat-lto-ວັດຖຸ. ນີ້ຫມາຍຄວາມວ່າວັດຖຸນັ້ນ
ໄຟລ໌ທີ່ມີຂໍ້ມູນ LTO ສາມາດເຊື່ອມຕໍ່ເປັນໄຟລ໌ວັດຖຸປົກກະຕິ; ຖ້າ -fno-lto ແມ່ນຜ່ານ
ກັບຕົວເຊື່ອມຕໍ່, ບໍ່ມີການເພີ່ມປະສິດທິພາບ interprocedural ຖືກນໍາໃຊ້. ໃຫ້ສັງເກດວ່າເມື່ອ
-fno-fat-lto-objects ຖືກເປີດໃຊ້ງານ compile-stage ແມ່ນໄວຂຶ້ນ ແຕ່ທ່ານບໍ່ສາມາດປະຕິບັດໄດ້
ປົກກະຕິ, ການເຊື່ອມຕໍ່ທີ່ບໍ່ແມ່ນ LTO ກ່ຽວກັບພວກມັນ.

ນອກຈາກນັ້ນ, ທຸງການເພີ່ມປະສິດທິພາບທີ່ໃຊ້ໃນການລວບລວມໄຟລ໌ສ່ວນບຸກຄົນບໍ່ແມ່ນ
ມີຄວາມຈໍາເປັນທີ່ກ່ຽວຂ້ອງກັບສິ່ງທີ່ຖືກນໍາໃຊ້ໃນເວລາເຊື່ອມຕໍ່. ຕົວ​ຢ່າງ,

gcc -c -O0 -ffat-lto-objects -flto foo.c
gcc -c -O0 -ffat-lto-objects -flto bar.c
gcc -o myprog -O3 foo.o bar.o

ນີ້ຜະລິດໄຟລ໌ວັດຖຸສ່ວນບຸກຄົນທີ່ມີລະຫັດ assembler unoptimized, ແຕ່
binary ຜົນໄດ້ຮັບ myprog ແມ່ນ optimized ຢູ່ -O3. ຖ້າ, ແທນທີ່ຈະ, ຄູ່ສຸດທ້າຍແມ່ນ
ສ້າງຂຶ້ນດ້ວຍ -fno-lto, ຫຼັງຈາກນັ້ນ myprog ບໍ່ໄດ້ຖືກປັບປຸງໃຫ້ເໝາະສົມ.

ເມື່ອຜະລິດຄູ່ສຸດທ້າຍ, GCC ພຽງແຕ່ໃຊ້ການເພີ່ມປະສິດທິພາບເວລາເຊື່ອມຕໍ່ກັບສິ່ງເຫຼົ່ານັ້ນ
ໄຟລ໌ທີ່ມີ bytecode. ດັ່ງນັ້ນ, ທ່ານສາມາດປະສົມແລະກົງກັບໄຟລ໌ວັດຖຸແລະ
ຫ້ອງສະຫມຸດທີ່ມີ GIMPLE bytecodes ແລະລະຫັດວັດຖຸສຸດທ້າຍ. GCC ເລືອກອັດຕະໂນມັດ
ໄຟລ໌ໃດທີ່ຈະເພີ່ມປະສິດທິພາບໃນໂຫມດ LTO ແລະໄຟລ໌ໃດທີ່ຈະເຊື່ອມຕໍ່ໂດຍບໍ່ມີການເພີ່ມເຕີມ
ການປຸງແຕ່ງ.

ມີບາງທຸງການສ້າງລະຫັດທີ່ຖືກຮັກສາໄວ້ໂດຍ GCC ເມື່ອສ້າງ bytecodes, ເປັນ
ພວກເຂົາເຈົ້າຈໍາເປັນຕ້ອງໄດ້ຖືກນໍາໃຊ້ໃນໄລຍະການເຊື່ອມຕໍ່ສຸດທ້າຍ. ໂດຍທົ່ວໄປແລ້ວທາງເລືອກທີ່ລະບຸໄວ້ຢູ່ທີ່
link-time override ທີ່ລະບຸໄວ້ໃນເວລາລວບລວມ.

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

ໃນປັດຈຸບັນ, ທາງເລືອກຕໍ່ໄປນີ້ແລະການຕັ້ງຄ່າຂອງພວກເຂົາແມ່ນເອົາມາຈາກໄຟລ໌ວັດຖຸທໍາອິດ
ທີ່​ໄດ້​ລະ​ບຸ​ຢ່າງ​ຊັດ​ເຈນ​ວ່າ​: -fPIC, -fpic, -fpie, -fcommon, - ຂໍ້​ຍົກ​ເວັ້ນ​,
-fnon-call-exceptions, -fgnu-tm ແລະທັງ ໝົດ -m ທຸງ​ເປົ້າ​ຫມາຍ​.

ທຸງການປ່ຽນແປງ ABI ທີ່ແນ່ນອນແມ່ນຕ້ອງການໃຫ້ກົງກັນໃນທຸກຫນ່ວຍງານລວບລວມແລະພະຍາຍາມ
ເພື່ອ override ນີ້ໃນເວລາເຊື່ອມຕໍ່ທີ່ມີຄ່າທີ່ຂັດແຍ້ງແມ່ນຖືກລະເລີຍ. ນີ້ປະກອບມີ
ທາງ​ເລືອກ​ເຊັ່ນ​: -freg-struct-return ແລະ -fpcc-struct-return.

ທາງເລືອກອື່ນເຊັ່ນ: -ffp-ສັນຍາ, -fno-strict-overflow, -fwrapv, -fno-trapv or
-fno-strict-aliasing ຖືກສົ່ງຜ່ານໄປສູ່ຂັ້ນຕອນການເຊື່ອມໂຍງແລະຖືກລວມເຂົ້າກັນແບບອະນຸລັກ
ສໍາລັບຫນ່ວຍງານການແປທີ່ຂັດແຍ້ງກັນ. ໂດຍສະເພາະ -fno-strict-overflow, -fwrapv ແລະ
-fno-trapv ເອົາຄວາມສໍາຄັນແລະຕົວຢ່າງ -ffp-contract=ປິດ ມີຄວາມສຳຄັນກວ່າ
-ffp-contract=ໄວ. ທ່ານສາມາດ override ເຂົາເຈົ້າໃນເວລາເຊື່ອມຕໍ່.

ມັນແນະນໍາໃຫ້ທ່ານລວບລວມໄຟລ໌ທັງຫມົດທີ່ເຂົ້າຮ່ວມໃນການເຊື່ອມຕໍ່ດຽວກັນກັບ
ທາງເລືອກດຽວກັນແລະຍັງລະບຸທາງເລືອກເຫຼົ່ານັ້ນໃນເວລາເຊື່ອມຕໍ່.

ຖ້າ LTO ພົບກັບວັດຖຸທີ່ມີການເຊື່ອມໂຍງ C ທີ່ປະກາດກັບປະເພດທີ່ບໍ່ເຂົ້າກັນໄດ້ແຍກຕ່າງຫາກ
ໜ່ວຍ​ການ​ແປ​ພາ​ສາ​ທີ່​ຈະ​ເຊື່ອມ​ໂຍງ​ເຂົ້າ​ກັນ (ພຶດ​ຕິ​ກຳ​ທີ່​ບໍ່​ໄດ້​ກຳ​ນົດ​ຕາມ ISO C99
6.2.7), ການວິນິດໄສທີ່ບໍ່ເປັນອັນຕະລາຍອາດຈະຖືກອອກ. ພຶດຕິກຳດັ່ງກ່າວຍັງບໍ່ຖືກກຳນົດໃນເວລາແລ່ນ
ເວລາ. ການວິນິດໄສທີ່ຄ້າຍຄືກັນອາດຈະຖືກຍົກຂຶ້ນມາເປັນພາສາອື່ນ.

ຄຸນນະສົມບັດອີກອັນຫນຶ່ງຂອງ LTO ແມ່ນວ່າມັນເປັນໄປໄດ້ທີ່ຈະນໍາໃຊ້ການເພີ່ມປະສິດທິພາບລະຫວ່າງຂັ້ນຕອນ
ຢູ່ໃນໄຟລ໌ທີ່ຂຽນເປັນພາສາຕ່າງໆ:

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

ຖ້າໄຟລ໌ວັດຖຸທີ່ມີ GIMPLE bytecode ຖືກເກັບໄວ້ໃນຄັງເກັບມ້ຽນ, ເວົ້າ
libfoo.a, ມັນເປັນໄປໄດ້ທີ່ຈະສະກັດແລະນໍາໃຊ້ພວກມັນຢູ່ໃນການເຊື່ອມຕໍ່ LTO ຖ້າທ່ານກໍາລັງໃຊ້ a
linker ສະຫນັບສະຫນູນ plugin. ເພື່ອສ້າງຫ້ອງສະຫມຸດຄົງທີ່ເຫມາະສົມສໍາລັບ LTO, ໃຊ້ gcc-ar
ແລະ gcc-ranlib ແທນ​ທີ່ ar ແລະ ranlib; ເພື່ອສະແດງສັນຍາລັກຂອງໄຟລ໌ວັດຖຸທີ່ມີ
GIMPLE bytecode, ໃຊ້ gcc-nm. ຄໍາສັ່ງເຫຼົ່ານັ້ນຕ້ອງການນັ້ນ ar, ranlib ແລະ nm ໄດ້
ລວບລວມດ້ວຍການສະຫນັບສະຫນູນ plugin. ໃນເວລາເຊື່ອມຕໍ່, ໃຊ້ທຸງ -fuse-linker-plugin to
ໃຫ້ແນ່ໃຈວ່າຫ້ອງສະຫມຸດເຂົ້າຮ່ວມໃນຂະບວນການເພີ່ມປະສິດທິພາບ LTO:

gcc -o myprog -O2 -flto -fuse-linker-plugin ao bo -lfoo

ດ້ວຍການເປີດໃຊ້ plugin ເຊື່ອມຕໍ່, ຕົວເຊື່ອມຕໍ່ສະກັດໄຟລ໌ GIMPLE ທີ່ຈໍາເປັນຈາກ
libfoo.a ແລະສົ່ງພວກເຂົາໄປສູ່ GCC ແລ່ນເພື່ອເຮັດໃຫ້ພວກເຂົາເປັນສ່ວນຫນຶ່ງຂອງການລວບລວມ
ຮູບພາບ GIMPLE ທີ່ຈະເພີ່ມປະສິດທິພາບ.

ຖ້າທ່ານບໍ່ໄດ້ໃຊ້ຕົວເຊື່ອມຕໍ່ທີ່ມີການສະຫນັບສະຫນູນ plugin ແລະ / ຫຼືບໍ່ເປີດໃຊ້ຕົວເຊື່ອມຕໍ່
plugin, ຫຼັງຈາກນັ້ນວັດຖຸພາຍໃນ libfoo.a ຖືກສະກັດແລະເຊື່ອມໂຍງຕາມປົກກະຕິ, ແຕ່ພວກມັນ
ບໍ່ໄດ້ເຂົ້າຮ່ວມໃນຂະບວນການເພີ່ມປະສິດທິພາບ LTO. ເພື່ອເຮັດໃຫ້ຫ້ອງສະຫມຸດສະຖິດ
ທີ່ເຫມາະສົມສໍາລັບທັງການເພີ່ມປະສິດທິພາບ LTO ແລະການເຊື່ອມໂຍງແບບປົກກະຕິ, ລວບລວມໄຟລ໌ວັດຖຸຂອງມັນດ້ວຍ
-flto -ffat-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 ການ​ລະ​ບຸ​ການ​ແບ່ງ​ປັນ mirroring ໄຟລ​໌​ຕົ້ນ​ສະ​ບັບ​ຫຼື​ ສົມດຸນ
ເພື່ອ​ລະ​ບຸ​ການ​ແບ່ງ​ປັນ​ເປັນ chunk ຂະ​ຫນາດ​ເທົ່າ​ທຽມ​ກັນ (ທຸກ​ຄັ້ງ​ທີ່​ເປັນ​ໄປ​ໄດ້​) ຫຼື​ ສູງສຸດທີ່ເຄຍ ເພື່ອສ້າງ
ການແບ່ງສ່ວນໃຫມ່ສໍາລັບທຸກໆສັນຍາລັກທີ່ເປັນໄປໄດ້. ການລະບຸ none ເປັນ algorithm
ປິດການແບ່ງສ່ວນ ແລະການຖ່າຍທອດຢ່າງສົມບູນ. ຄ່າເລີ່ມຕົ້ນແມ່ນ ສົມດຸນ. ໃນຂະນະທີ່
1to1 ສາ​ມາດ​ຖືກ​ນໍາ​ໃຊ້​ເປັນ workaround ສໍາ​ລັບ​ບັນ​ຫາ​ການ​ສັ່ງ​ລະ​ຫັດ​ຕ່າງໆ​, ໄດ້​ ສູງສຸດທີ່ເຄຍ
ການແບ່ງສ່ວນແມ່ນມີຈຸດປະສົງສໍາລັບການທົດສອບພາຍໃນເທົ່ານັ້ນ. ມູນຄ່າ ຫນຶ່ງ ລະບຸວ່າ
ແນ່ນອນວ່າຫນຶ່ງພາທິຊັນຄວນຈະຖືກນໍາໃຊ້ໃນຂະນະທີ່ຄ່າ none bypasses ການ​ແບ່ງ​ປັນ​ແລະ​
ປະຕິບັດຂັ້ນຕອນການເພີ່ມປະສິດທິພາບເວລາເຊື່ອມຕໍ່ໂດຍກົງຈາກໄລຍະ WPA.

-flto-odr-type-merging
ເປີດໃຊ້ການຖ່າຍທອດຊື່ປະເພດ mangled ຂອງປະເພດ C ++ ແລະການລວມຕົວຂອງພວກເຂົາຢູ່ທີ່
ເວລາເຊື່ອມຕໍ່. ນີ້ຈະເພີ່ມຂະຫນາດຂອງໄຟລ໌ວັດຖຸ LTO, ແຕ່ເປີດໃຊ້ການວິນິດໄສກ່ຽວກັບຫນຶ່ງ
ການລະເມີດກົດລະບຽບນິຍາມ.

-flto-compression-level=n
ຕົວເລືອກນີ້ກໍານົດລະດັບການບີບອັດທີ່ໃຊ້ສໍາລັບພາສາລະດັບປານກາງທີ່ຂຽນ
ກັບໄຟລ໌ວັດຖຸ LTO, ແລະມີຄວາມຫມາຍພຽງແຕ່ສົມທົບກັບໂຫມດ LTO (-flto).
ຄ່າທີ່ຖືກຕ້ອງແມ່ນ 0 (ບໍ່ມີການບີບອັດ) ຫາ 9 (ການບີບອັດສູງສຸດ). ຄຸນຄ່ານອກນີ້
ຊ່ວງແມ່ນຖືກຍຶດເປັນ 0 ຫຼື 9. ຖ້າທາງເລືອກບໍ່ໄດ້ຖືກມອບໃຫ້, ຄ່າເລີ່ມຕົ້ນຈະສົມດູນ
ການຕັ້ງຄ່າການບີບອັດຖືກນໍາໃຊ້.

flto-ບົດລາຍງານ
ພິມບົດລາຍງານທີ່ມີລາຍລະອຽດພາຍໃນກ່ຽວກັບການເຮັດວຽກຂອງ link-time optimizer. ໄດ້
ເນື້ອໃນຂອງບົດລາຍງານນີ້ແຕກຕ່າງກັນໄປແຕ່ລະສະບັບ. ມັນຫມາຍຄວາມວ່າຈະເປັນປະໂຫຍດຕໍ່ GCC
ນັກພັດທະນາໃນເວລາປະມວນຜົນໄຟລ໌ວັດຖຸຢູ່ໃນໂຫມດ LTO (ຜ່ານ -flto).

ພິການໂດຍຄ່າເລີ່ມຕົ້ນ.

-flto-report-wpa
ຄື flto-ບົດລາຍງານ, ແຕ່ພຽງແຕ່ພິມສໍາລັບໄລຍະ WPA ຂອງ Link Time Optimization.

-fuse-linker-plugin
ເປີດນຳໃຊ້ການໃຊ້ຕົວເຊື່ອມຕໍ່ຕົວເຊື່ອມຕໍ່ລະຫວ່າງການປັບແຕ່ງເວລາເຊື່ອມຕໍ່. ທາງເລືອກນີ້ອີງໃສ່
ກ່ຽວກັບການສະຫນັບສະຫນູນ plugin ໃນຕົວເຊື່ອມຕໍ່, ທີ່ມີຢູ່ໃນຄໍາຫຼືໃນ GNU ld 2.21 ຫຼື
ໃໝ່ກວ່າ.

ຕົວເລືອກນີ້ເຮັດໃຫ້ສາມາດສະກັດໄຟລ໌ວັດຖຸດ້ວຍ GIMPLE bytecode ອອກຈາກຫ້ອງສະໝຸດ
ຮວບຮວມ. ນີ້ປັບປຸງຄຸນນະພາບຂອງການເພີ່ມປະສິດທິພາບໂດຍການເປີດເຜີຍລະຫັດເພີ່ມເຕີມຕໍ່ກັບການເຊື່ອມຕໍ່ -
ຕົວເພີ່ມປະສິດທິພາບເວລາ. ຂໍ້ມູນນີ້ລະບຸວ່າສັນຍາລັກໃດທີ່ສາມາດເຂົ້າເຖິງພາຍນອກໄດ້
(ໂດຍວັດຖຸທີ່ບໍ່ແມ່ນ LTO ຫຼືໃນລະຫວ່າງການເຊື່ອມໂຍງແບບເຄື່ອນໄຫວ). ຜົນໄດ້ຮັບການປັບປຸງຄຸນນະພາບລະຫັດໃນ
binary (ແລະຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນທີ່ໃຊ້ການເບິ່ງເຫັນທີ່ເຊື່ອງໄວ້) ແມ່ນຄ້າຍຄືກັນກັບ
- ໂຄງ​ການ​ທັງ​ຫມົດ​, ທະເລສາບ -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 ຈໍາເປັນຕ້ອງສະຫນັບສະຫນູນ linker
plugins ເພື່ອອະນຸຍາດໃຫ້ສະພາບແວດລ້ອມການກໍ່ສ້າງແບບເຕັມຮູບແບບ (ສາມາດສ້າງສະຖິດ
ຫ້ອງສະຫມຸດແລະອື່ນໆ). GCC ສະຫນອງ gcc-ar, gcc-nm, gcc-ranlib wrappers ຜ່ານ
ທາງເລືອກທີ່ເຫມາະສົມກັບເຄື່ອງມືເຫຼົ່ານີ້. ມີ makefiles ທີ່ບໍ່ມີໄຂມັນ LTO ຕ້ອງໄດ້ຮັບການດັດແກ້ເພື່ອນໍາໃຊ້
ໃຫ້ເຂົາເຈົ້າ.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -fno-fat-lto-objects ໃນເປົ້າຫມາຍທີ່ມີການສະຫນັບສະຫນູນ plugin linker.

-fcompare-elim
ຫຼັງ​ຈາກ​ການ​ລົງ​ທະ​ບຽນ​ການ​ຈັດ​ສັນ​ແລະ​ຫຼັງ​ຈາກ​ການ​ລົງ​ທະ​ບຽນ​ການ​ແບ່ງ​ປັນ​ຄໍາ​ແນະ​ນໍາ​ການ​ຈັດ​ສັນ​, ກໍາ​ນົດ​
ຄໍາແນະນໍາທາງເລກຄະນິດທີ່ຄໍານວນທຸງຂອງໂປເຊດເຊີທີ່ຄ້າຍຄືກັບການປະຕິບັດການປຽບທຽບ
ອີງໃສ່ເລກຄະນິດສາດນັ້ນ. ຖ້າເປັນໄປໄດ້, ລົບລ້າງການປະຕິບັດການປຽບທຽບທີ່ຊັດເຈນ.

ຜ່ານນີ້ໃຊ້ໄດ້ກັບບາງເປົ້າໝາຍທີ່ບໍ່ສາມາດເປັນຕົວແທນໄດ້ຢ່າງຊັດເຈນ
ການ​ປະ​ຕິ​ບັດ​ການ​ປຽບ​ທຽບ​ກ່ອນ​ທີ່​ຈະ​ຈັດ​ສັນ​ການ​ຈົດ​ທະ​ບຽນ​ສໍາ​ເລັດ​.

ເປີດໃຊ້ໃນລະດັບ -O, -O2, -O3, -ອສ.

-fcprop-ລົງທະບຽນ
ຫຼັງ​ຈາກ​ການ​ລົງ​ທະ​ບຽນ​ການ​ຈັດ​ສັນ​ແລະ​ຫຼັງ​ຈາກ​ການ​ລົງ​ທະ​ບຽນ​ການ​ແບ່ງ​ປັນ​ຄໍາ​ແນະ​ນໍາ​ການ​ຈັດ​ສັນ​, ປະ​ຕິ​ບັດ​
copy-propagation pass ເພື່ອພະຍາຍາມຫຼຸດຜ່ອນການຂຶ້ນກັບການກຳນົດເວລາ ແລະບາງຄັ້ງຄາວ
ລົບລ້າງສໍາເນົາ.

ເປີດໃຊ້ໃນລະດັບ -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-ຄ່າ, -fvpt.

If ເສັ້ນທາງ ຖືກກໍານົດ, GCC ເບິ່ງຢູ່ໃນ ເສັ້ນທາງ ເພື່ອຊອກຫາໄຟລ໌ຂໍ້ມູນຄໍາຕິຊົມຂອງໂປຣໄຟລ໌.
ເບິ່ງ -fprofile-dir.

-fprofile-ໃຊ້
-fprofile-use=ເສັ້ນທາງ
ເປີດໃຊ້ການເພີ່ມປະສິດທິພາບການຕິຊົມຂອງໂປຣໄຟລ໌, ແລະການເພີ່ມປະສິດທິພາບຕໍ່ໄປນີ້ເຊິ່ງ
ໂດຍທົ່ວໄປແລ້ວມີກໍາໄລພຽງແຕ່ມີຄໍາຕິຊົມໂປຣໄຟລ໌ທີ່ມີຢູ່: -fbranch-ຄວາມເປັນໄປໄດ້,
-fvpt, -funroll-loops, -fpeel-loops, -ftracer, -ftree-vectorize, ແລະ ftree-loop-
ການ​ແຜ່​ກະ​ຈາຍ​ຮູບ​ແບບ​.

ໂດຍຄ່າເລີ່ມຕົ້ນ, GCC ປ່ອຍຂໍ້ຄວາມສະແດງຂໍ້ຜິດພາດຖ້າໂປຣໄຟລ໌ຄໍາຕິຊົມບໍ່ກົງກັບ
ລະຫັດແຫຼ່ງ. ຄວາມ​ຜິດ​ພາດ​ນີ້​ສາ​ມາດ​ປ່ຽນ​ເປັນ​ການ​ເຕືອນ​ໄພ​ໂດຍ​ການ​ນໍາ​ໃຊ້​ -Wcoverage-mismatch.
ກະລຸນາຮັບຊາບວ່າອັນນີ້ອາດຈະສົ່ງຜົນໃຫ້ລະຫັດປັບປຸງບໍ່ດີ.

If ເສັ້ນທາງ ຖືກກໍານົດ, GCC ເບິ່ງຢູ່ໃນ ເສັ້ນທາງ ເພື່ອຊອກຫາໄຟລ໌ຂໍ້ມູນຄໍາຕິຊົມຂອງໂປຣໄຟລ໌.
ເບິ່ງ -fprofile-dir.

-fauto-profile
-fauto-profile=ເສັ້ນທາງ
ເປີດໃຊ້ການເພີ່ມປະສິດທິພາບທີ່ອີງໃສ່ຄໍາຕິຊົມຕາມຕົວຢ່າງ, ແລະການເພີ່ມປະສິດທິພາບຕໍ່ໄປນີ້
ເຊິ່ງໂດຍທົ່ວໄປແລ້ວມີກໍາໄລພຽງແຕ່ມີຄໍາຕິຊົມໂປຣໄຟລ໌ທີ່ມີຢູ່:
-fbranch-ຄວາມເປັນໄປໄດ້, -fvpt, -funroll-loops, -fpeel-loops, -ftracer,
-ftree-vectorize, -finline-functions, -fipa-cp, -fipa-cp-clone,
-fpredictive-commoning, -funswitch-loops, -fgcse-after-reload, ແລະ
-ftree-loop-distribute-patterns.

ເສັ້ນທາງ ແມ່ນຊື່ຂອງໄຟລ໌ທີ່ມີຂໍ້ມູນໂປຣໄຟລ໌ AutoFDO. ຖ້າຖືກລະເວັ້ນ, ມັນ
ເລີ່ມຕົ້ນເປັນ fbdata.afdo ໃນ​ລະ​ບົບ​ປະ​ຈຸ​ບັນ​.

ການ​ຜະ​ລິດ​ໄຟລ​໌​ຂໍ້​ມູນ​ຂໍ້​ມູນ AutoFDO ຮຽກ​ຮ້ອງ​ໃຫ້​ການ​ດໍາ​ເນີນ​ໂຄງ​ການ​ຂອງ​ທ່ານ​ກັບ​ ງາມ
ປະໂຫຍດໃນລະບົບເປົ້າໝາຍ GNU/Linux ທີ່ຮອງຮັບ. ສໍາລັບຂໍ້ມູນເພີ່ມເຕີມ, ເບິ່ງ
<https://perf.wiki.kernel.org/>.

ຕົວຢ່າງ

perf record -e br_inst_retired:near_taken -b -o perf.data \
-- your_program

ຫຼັງຈາກນັ້ນ, ນຳ ໃຊ້ ສ້າງ_gcov ເຄື່ອງ​ມື​ທີ່​ຈະ​ປ່ຽນ​ຂໍ້​ມູນ profile ເປັນ​ຮູບ​ແບບ​ທີ່​ສາ​ມາດ​ເປັນ​
ໃຊ້ໂດຍ GCC. ນອກນັ້ນທ່ານຍັງຕ້ອງໄດ້ສະຫນອງ binary unstripped ສໍາລັບໂຄງການຂອງທ່ານກັບນີ້
ເຄື່ອງ​ມື. ເບິ່ງhttps://github.com/google/autofdo>.

ຕົວຢ່າງ

create_gcov --binary=your_program.unstripped --profile=perf.data \
--gcov=profile.afdo

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

- ຮ້ານຂາຍເຄື່ອງຍ່ອຍ
ຢ່າເກັບຮັກສາຕົວແປຈຸດລອຍຢູ່ໃນທະບຽນ, ແລະຂັດຂວາງທາງເລືອກອື່ນ
ອາດຈະປ່ຽນວ່າຄ່າຈຸດລອຍແມ່ນເອົາມາຈາກທະບຽນ ຫຼື ໜ່ວຍຄວາມຈຳ.

ທາງເລືອກນີ້ປ້ອງກັນຄວາມແມ່ນຍໍາເກີນທີ່ບໍ່ຕ້ອງການໃນເຄື່ອງຈັກເຊັ່ນ 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-ໃຊ້.

-fprofile-reorder-functions
ການຈັດລໍາດັບຟັງຊັນຄືນໃໝ່ໂດຍອີງໃສ່ເຄື່ອງມືໂປຣໄຟລ໌ຈະເກັບກຳຄັ້ງທຳອິດຂອງການປະຕິບັດ
ຂອງຟັງຊັນໃດນຶ່ງ ແລະສັ່ງໃຫ້ຟັງຊັນເຫຼົ່ານີ້ຢູ່ໃນລໍາດັບຕັ້ງຊັນຂຶ້ນ.

ເປີດໃຊ້ດ້ວຍ -fprofile-ໃຊ້.

-fvpt
ຖ້າລວມກັບ -fprofile-arcs, ທາງເລືອກນີ້ສັ່ງໃຫ້ compiler ເພີ່ມລະຫັດໃສ່
ລວບລວມຂໍ້ມູນກ່ຽວກັບຄຸນຄ່າຂອງການສະແດງອອກ.

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

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

ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນດ້ວຍ -funroll-loops ແລະ -fpeel-loops.

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

ເປີດໃຊ້ໃນລະດັບ -O2, -O3, -ອສ.

-ftracer
ດໍາເນີນການຊໍ້າຊ້ອນຫາງເພື່ອຂະຫຍາຍຂະຫນາດ superblock. ການຫັນປ່ຽນນີ້ເຮັດໃຫ້ງ່າຍດາຍ
ການຄວບຄຸມການໄຫຼເຂົ້າຂອງຫນ້າທີ່ອະນຸຍາດໃຫ້ການເພີ່ມປະສິດທິພາບອື່ນໆເຮັດວຽກທີ່ດີກວ່າ.

ເປີດໃຊ້ດ້ວຍ -fprofile-ໃຊ້.

-funroll-loops
ຖອດ loops ທີ່ມີຈໍານວນການຊໍ້າຄືນສາມາດຖືກກໍານົດໃນເວລາລວບລວມຫຼືຕາມ
ເຂົ້າໄປໃນ loop ໄດ້. -funroll-loops implies -frerun-cse-after-loop, -fweb ແລະ
-frename-ລົງທະບຽນ. ມັນຍັງເປີດການປອກເປືອກ loop ຢ່າງສົມບູນ (ເຊັ່ນການໂຍກຍ້າຍຢ່າງສົມບູນຂອງ
loops ທີ່ມີຈໍານວນຄົງທີ່ເລັກນ້ອຍ). ທາງເລືອກນີ້ເຮັດໃຫ້ລະຫັດຂະຫນາດໃຫຍ່, ແລະ
ອາດຈະ ຫຼືອາດຈະບໍ່ເຮັດໃຫ້ມັນແລ່ນໄວຂຶ້ນ.

ເປີດໃຊ້ດ້ວຍ -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 ອາດມີການເພີ່ມປະສິດທິພາບເຫຼົ່ານີ້ໃນອະນາຄົດ.

ພຽງແຕ່ໃຊ້ທາງເລືອກເຫຼົ່ານີ້ເມື່ອມີຜົນປະໂຫຍດທີ່ສໍາຄັນຈາກການເຮັດເຊັ່ນນັ້ນ. ເມື່ອ​ເຈົ້າ
ລະບຸຕົວເລືອກເຫຼົ່ານີ້, ຕົວປະກອບແລະຕົວເຊື່ອມຕໍ່ສ້າງວັດຖຸທີ່ໃຫຍ່ກວ່າແລະສາມາດປະຕິບັດໄດ້
ໄຟລ໌ແລະຍັງຊ້າກວ່າ. ທ່ານບໍ່ສາມາດໃຊ້ ກປ ໃນທຸກລະບົບຖ້າທ່ານລະບຸອັນນີ້
ທາງເລືອກ, ແລະທ່ານອາດຈະມີບັນຫາກັບ debugging ຖ້າຫາກວ່າທ່ານລະບຸທັງສອງທາງເລືອກນີ້ແລະ
-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.
ກອງໄດ້ຖືກເລີ່ມຕົ້ນເມື່ອຟັງຊັນຖືກໃສ່ແລະຫຼັງຈາກນັ້ນກວດເບິ່ງໃນເວລາທີ່
ຟັງຊັນອອກ. ຖ້າການກວດສອບຄວາມລົ້ມເຫລວ, ຂໍ້ຄວາມສະແດງຂໍ້ຜິດພາດຈະຖືກພິມອອກແລະໂຄງການ
ອອກ.

-fstack-protector-ທັງໝົດ
ຄື -stack-protector ຍົກ​ເວັ້ນ​ແຕ່​ຫນ້າ​ທີ່​ທັງ​ຫມົດ​ແມ່ນ​ໄດ້​ຮັບ​ການ​ປ້ອງ​ກັນ​.

-fstack-protector-strong
ຄື -stack-protector ແຕ່ປະກອບມີຫນ້າທີ່ເພີ່ມເຕີມທີ່ຈະໄດ້ຮັບການປົກປ້ອງ --- ເຫຼົ່ານັ້ນ
ທີ່ມີຄໍານິຍາມ array ທ້ອງຖິ່ນ, ຫຼືມີການອ້າງອີງເຖິງທີ່ຢູ່ກອບທ້ອງຖິ່ນ.

-fstack-protector-explicit
ຄື -stack-protector ແຕ່ພຽງແຕ່ປົກປ້ອງຫນ້າທີ່ທີ່ມີ
"stack_protect" ຄຸນລັກສະນະ

-fstdarg-opt
ເພີ່ມປະສິດທິພາບຂອງ prologue ຂອງຫນ້າທີ່ການໂຕ້ຖຽງທີ່ແຕກຕ່າງກັນກ່ຽວກັບການນໍາໃຊ້ເຫຼົ່ານັ້ນ
ການໂຕ້ຖຽງ.

ຫມາຍເຫດ: ໃນ Ubuntu 14.10 ແລະຮຸ່ນຕໍ່ມາ, -fstack-protector-strong ຖືກເປີດໃຊ້ໂດຍ
ຄ່າເລີ່ມຕົ້ນສໍາລັບ C, C ++, ObjC, ObjC ++, ຖ້າບໍ່ມີ -fno-stack-protector, -nostdlib, ແລະ
- freestanding ພົບເຫັນ.

-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
ຈໍານວນຂອບຂາເຂົ້າສູງສຸດທີ່ຈະພິຈາລະນາສໍາລັບການໂດດຂ້າມ. ສູດການຄິດໄລ່
ໃຊ້ໂດຍ -fcrossjumping ແມ່ນ O(N^2) ໃນຈຳນວນຂອບທີ່ເຂົ້າມາແຕ່ລະທ່ອນໄມ້.
ການເພີ່ມມູນຄ່າຫມາຍເຖິງການເພີ່ມປະສິດທິພາບທີ່ຮຸກຮານຫຼາຍ, ເຮັດໃຫ້ເວລາການລວບລວມ
ເພີ່ມຂຶ້ນໂດຍອາດຈະເປັນການປັບປຸງຂະຫນາດນ້ອຍໃນຂະຫນາດປະຕິບັດໄດ້.

min-crossjump-insns
ຈໍານວນຄໍາແນະນໍາຕໍາ່ສຸດທີ່ຈະຕ້ອງຖືກຈັບຄູ່ໃນຕອນທ້າຍຂອງສອງຕັນ
ກ່ອນທີ່ຈະໂດດຂ້າມແມ່ນປະຕິບັດໃຫ້ເຂົາເຈົ້າ. ຄ່ານີ້ຖືກລະເລີຍໃນກໍລະນີ
ບ່ອນທີ່ຄໍາແນະນໍາທັງຫມົດໃນບລັອກທີ່ຖືກຂ້າມຂ້າມຈາກແມ່ນກົງກັນ. ໄດ້
ຄ່າເລີ່ມຕົ້ນແມ່ນ 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
ຈໍາ​ນວນ​ສູງ​ສຸດ​ຂອງ​ການ​ກໍາ​ນົດ​ເວ​ລາ​ທີ່​ຍັງ​ຄ້າງ​ຢູ່​ອະ​ນຸ​ຍາດ​ໃຫ້​ກ່ອນ​ທີ່​ຈະ​ລ້າງ​
ສະຖານະປັດຈຸບັນ ແລະເລີ່ມຕົ້ນໃໝ່. ຫນ້າທີ່ຂະຫນາດໃຫຍ່ທີ່ມີສາຂາຈໍານວນຫນ້ອຍຫຼືການໂທສາມາດ
ສ້າງບັນຊີລາຍຊື່ຂະຫນາດໃຫຍ່ເກີນໄປທີ່ບໍລິໂພກຄວາມຊົງຈໍາແລະຊັບພະຍາກອນໂດຍບໍ່ຈໍາເປັນຕ້ອງ.

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.

inline-min-speedup
ເມື່ອການຄາດຄະເນການປັບປຸງການປະຕິບັດຂອງຜູ້ໂທ + callee runtime ເກີນນີ້
threshold (ໃນ​ກ່ອນ​ຫນ້າ​ນີ້), ການ​ທໍາ​ງານ​ທີ່​ສາ​ມາດ​ໄດ້​ຮັບ​ການ inlined ໂດຍ​ບໍ່​ສົນ​ເລື່ອງ​ຈໍາ​ກັດ​ກ່ຽວ​ກັບ​ການ​ຈໍາ​ກັດ
--param max-inline-insns-single ແລະ --param max-inline-insns-auto.

large-function-insns
ຂອບເຂດຈໍາກັດການກໍານົດຫນ້າທີ່ຂະຫນາດໃຫຍ່ແທ້ໆ. ສໍາລັບຫນ້າທີ່ໃຫຍ່ກວ່າຂອບເຂດຈໍາກັດນີ້
ຫຼັງຈາກ inlining, inlining ແມ່ນຈໍາກັດໂດຍ --param ຂະ​ຫນາດ​ໃຫຍ່​ຫນ້າ​ທີ່​ການ​ຂະ​ຫຍາຍ​ຕົວ​. ນີ້
ພາລາມິເຕີແມ່ນເປັນປະໂຫຍດຕົ້ນຕໍເພື່ອຫຼີກເວັ້ນການລວບລວມເວລາທີ່ຮຸນແຮງທີ່ເກີດຈາກການບໍ່.
ສູດການຄິດໄລ່ເສັ້ນຊື່ທີ່ໃຊ້ໂດຍປາຍຫຼັງ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 2700.

ຂະ​ຫນາດ​ໃຫຍ່​ຫນ້າ​ທີ່​ການ​ຂະ​ຫຍາຍ​ຕົວ​
ລະບຸການຂະຫຍາຍຕົວສູງສຸດຂອງຟັງຊັນຂະຫນາດໃຫຍ່ທີ່ເກີດຈາກການ inlining ເປັນເປີເຊັນ. ໄດ້
ຄ່າເລີ່ມຕົ້ນແມ່ນ 100 ເຊິ່ງຈໍາກັດການຂະຫຍາຍຕົວຂອງຫນ້າທີ່ຂະຫນາດໃຫຍ່ເຖິງ 2.0 ເທົ່າຂອງຕົ້ນສະບັບ
ຂະຫນາດ.

ໜ່ວຍໃຫຍ່
ຂອບ​ເຂດ​ຈໍາ​ກັດ​ການ​ລະ​ບຸ​ຫົວ​ຫນ່ວຍ​ການ​ແປ​ພາ​ສາ​ຂະ​ຫນາດ​ໃຫຍ່​. ການຂະຫຍາຍຕົວທີ່ເກີດຈາກການ inlining ຂອງຫນ່ວຍງານ
ຂະຫນາດໃຫຍ່ກວ່າຂອບເຂດຈໍາກັດນີ້ຖືກຈໍາກັດໂດຍ --param inline-unit-growth. ສໍາລັບຫນ່ວຍງານຂະຫນາດນ້ອຍ
ນີ້ອາດຈະເຄັ່ງຄັດເກີນໄປ. ສໍາລັບຕົວຢ່າງ, ພິຈາລະນາຫນ່ວຍງານທີ່ປະກອບດ້ວຍຫນ້າທີ່ A
ນັ້ນແມ່ນ inline ແລະ B ທີ່ພຽງແຕ່ໂທຫາ A ສາມເທື່ອ. ຖ້າ B ແມ່ນນ້ອຍທຽບກັບ A,
ການຂະຫຍາຍຕົວຂອງຫນ່ວຍງານແມ່ນ 300% ແລະຍັງ inlining ດັ່ງກ່າວແມ່ນ sane ຫຼາຍ. ສໍາລັບຂະຫນາດໃຫຍ່ຫຼາຍ
ຫນ່ວຍງານປະກອບດ້ວຍຫນ້າທີ່ inlineable ຂະຫນາດນ້ອຍ, ແນວໃດກໍ່ຕາມ, ການຂະຫຍາຍຕົວຂອງຫນ່ວຍງານໂດຍລວມ
ຈໍາ​ກັດ​ແມ່ນ​ຈໍາ​ເປັນ​ເພື່ອ​ຫຼີກ​ເວັ້ນ​ການ​ລະ​ເບີດ exponential ຂອງ​ຂະ​ຫນາດ​ລະ​ຫັດ​. ດັ່ງນັ້ນສໍາລັບຂະຫນາດນ້ອຍກວ່າ
ຫນ່ວຍ, ຂະຫນາດແມ່ນເພີ່ມຂຶ້ນ --param ໜ່ວຍໃຫຍ່ ກ່ອນການນໍາໃຊ້ --param
inline-unit-growth. ຄ່າເລີ່ມຕົ້ນແມ່ນ 10000.

inline-unit-growth
ລະບຸການຂະຫຍາຍຕົວໂດຍລວມສູງສຸດຂອງຫນ່ວຍງານລວບລວມທີ່ເກີດຈາກ inlining. ໄດ້
ຄ່າເລີ່ມຕົ້ນແມ່ນ 20 ເຊິ່ງຈໍາກັດການຂະຫຍາຍຕົວຂອງຫນ່ວຍເປັນ 1.2 ເທົ່າຂອງຂະຫນາດຕົ້ນສະບັບ. ໜາວ
ຟັງຊັນຕ່າງໆ (ໝາຍເຖິງຄວາມເຢັນຜ່ານຄຸນລັກສະນະ ຫຼືໂດຍຄໍາຕິຊົມໂປຣໄຟລ໌) ບໍ່ແມ່ນ
ກວມ​ເອົາ​ຂະ​ຫນາດ​ຫນ່ວຍ​ບໍ​ລິ​ການ​.

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
ລະບຸຈໍານວນຄໍາແນະນໍາສູງສຸດເປັນສໍາເນົານອກສາຍຂອງຕົວຕົນເອງ.
ຟັງຊັນ inline recursive ສາມາດເຕີບໂຕໄດ້ໂດຍການປະຕິບັດ 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 ສູງສຸດທີ່ໃຊ້ສໍາລັບການ recursive inlining.

--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 ຕົວ​ຈິງ​
ຄວາມເລິກສາມາດຄາດເດົາໄດ້ຈາກຄວາມເປັນໄປໄດ້ທີ່ຟັງຊັນ recurses ຜ່ານການໂທທີ່ໃຫ້
ການສະແດງອອກ. ພາລາມິເຕີນີ້ຈໍາກັດ inlining ພຽງແຕ່ໂທຫາການສະແດງອອກທີ່ມີ
ຄວາມເປັນໄປໄດ້ເກີນເກນທີ່ກຳນົດໄວ້ (ເປັນເປີເຊັນ). ຄ່າເລີ່ມຕົ້ນແມ່ນ 10.

Early-inlining-insns
ກໍານົດການຂະຫຍາຍຕົວທີ່ inliner ຕົ້ນສາມາດເຮັດໄດ້. ໃນຄວາມເປັນຈິງ, ມັນເພີ່ມປະລິມານ
ຂອງ inlining ສໍາລັບລະຫັດທີ່ມີການລົງໂທດ abstraction ຂະຫນາດໃຫຍ່. ຄ່າເລີ່ມຕົ້ນແມ່ນ 14.

max-early-inliner-iterations
ຈໍາ​ກັດ​ການ​ເຮັດ​ຊ້ຳ​ຂອງ inliner ຕົ້ນ​. ນີ້ໂດຍພື້ນຖານແລ້ວ bounds ຈໍານວນຂອງ
nested indirect calls the inliner ຕົ້ນສາມາດແກ້ໄຂ. ໂສ້ທີ່ເລິກກວ່າແມ່ນຍັງຢູ່
ຈັດການໂດຍ inlining ຊ້າ.

comdat-sharing-probability
ຄວາມເປັນໄປໄດ້ (ເປັນເປີເຊັນ) ທີ່ຟັງຊັນໃນແຖວຂອງ C++ ທີ່ມີການເບິ່ງເຫັນ comdat ແມ່ນ
ແບ່ງປັນໃນທົ່ວຫນ່ວຍງານລວບລວມຫຼາຍ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 20.

profile-func-internal-id
ພາຣາມິເຕີເພື່ອຄວບຄຸມວ່າຈະໃຊ້ function id ພາຍໃນໃນຖານຂໍ້ມູນໂປຣໄຟລ໌ຫຼືບໍ່
ຊອກຫາ. ຖ້າຄ່າແມ່ນ 0, compiler ໃຊ້ id ທີ່ອີງໃສ່ຟັງຊັນ
ຊື່ຕົວປະກອບ ແລະຊື່ໄຟລ໌, ເຊິ່ງເຮັດໃຫ້ຂໍ້ມູນໂປຣໄຟລ໌ເກົ່າມີຄວາມທົນທານຕໍ່ກັບແຫຼ່ງທີ່ມາ
ການ​ປ່ຽນ​ແປງ​ເຊັ່ນ​ການ​ຈັດ​ລໍາ​ດັບ​ການ​ທໍາ​ງານ​ແລະ​ອື່ນໆ​ຄ່າ​ເລີ່ມ​ຕົ້ນ​ແມ່ນ 0​.

min-vect-loop-bound
ຈໍານວນຕໍາ່ສຸດທີ່ຂອງການຊໍ້າຄືນທີ່ loops ບໍ່ໄດ້ຖືກ 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 ອາດ​ຈະ​ຕ້ອງ​ໄດ້​ຮັບ​ການ unrolled​. ຖ້າ loop
ແມ່ນ unrolled, ພາລາມິເຕີນີ້ຍັງກໍານົດຈໍານວນເວລາທີ່ລະຫັດ loop ແມ່ນ
ຍົກເລີກ.

max-average-unrolled-insns
ຈໍານວນຄໍາແນະນໍາສູງສຸດທີ່ລໍາອຽງໂດຍຄວາມເປັນໄປໄດ້ຂອງການປະຕິບັດຂອງພວກເຂົາວ່າ
loop ອາດຈະຕ້ອງໄດ້ຮັບການ unrolled. ຖ້າ loop ຖືກຖອດອອກ, ພາລາມິເຕີນີ້ຄືກັນ
ກຳນົດຈຳນວນຄັ້ງທີ່ລະຫັດ loop ຖືກຖອດອອກ.

max-unroll-times
ຈໍາ​ນວນ​ສູງ​ສຸດ​ຂອງ unrollings ຂອງ loop ດຽວ​.

max-peeled-insns
ຈໍານວນຄໍາແນະນໍາສູງສຸດທີ່ loop ອາດຈະຕ້ອງໄດ້ຮັບການປອກເປືອກ. ຖ້າ loop
ຖືກປອກເປືອກ, ພາລາມິເຕີນີ້ຍັງກໍານົດຈໍານວນເວລາທີ່ລະຫັດ loop ຖືກປອກເປືອກ.

max-peel-times
ຈໍານວນສູງສຸດຂອງການປອກເປືອກຂອງ loop ດຽວ.

max-peel-ສາຂາ
ຈໍານວນສູງສຸດຂອງສາຂາໃນເສັ້ນທາງຮ້ອນໂດຍຜ່ານລໍາດັບປອກເປືອກ.

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 ທີ່ບໍ່ຈໍາເປັນອອກຈາກຊຸດໃນເວລາທີ່ເພີ່ມໃຫມ່.

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.

vect-max-version-for-alias-checks
ຈໍານວນສູງສຸດຂອງການກວດສອບເວລາແລ່ນທີ່ສາມາດປະຕິບັດໄດ້ໃນເວລາທີ່ເຮັດ loop
ຮຸ່ນສໍາລັບນາມແຝງໃນ vectorizer.

vect-max-peeling-for-alignment
ຈໍາ​ນວນ​ສູງ​ສຸດ​ຂອງ​ການ​ປອກ​ເປືອກ loop ເພື່ອ​ເສີມ​ຂະ​ຫຍາຍ​ການ​ຈັດ​ສັນ​ການ​ເຂົ້າ​ເຖິງ​ສໍາ​ລັບ vectorizer​. ມູນຄ່າ
-1 ຫມາຍຄວາມວ່າ 'ບໍ່ຈໍາກັດ'.

max-iterations-to-track
ຈໍາ​ນວນ​ສູງ​ສຸດ​ຂອງ​ການ​ຊ​້​ໍ​າ​ຂອງ loop ເປັນ brute-force algorithm ສໍາ​ລັບ​ການ​ວິ​ເຄາະ
ຂອງຈໍານວນການຊໍ້າຄືນຂອງ loop ພະຍາຍາມປະເມີນ.

hot-bb-count-ws-permille
ການນັບໂປຣໄຟລ໌ບລັອກພື້ນຖານແມ່ນຖືວ່າຮ້ອນຖ້າມັນປະກອບສ່ວນໃຫ້
permillage (ie 0) ຂອງການປະຕິບັດ profiled ທັງຫມົດ.

hot-bb-frequency-fraction
ເລືອກສ່ວນຫນຶ່ງຂອງຄວາມຖີ່ຂອງຕັນເຂົ້າຂອງການປະຕິບັດຂອງຕັນພື້ນຖານໃນ
ຟັງຊັນທີ່ໄດ້ຮັບຕັນພື້ນຖານຈໍາເປັນຕ້ອງໄດ້ຮັບການພິຈາລະນາຮ້ອນ.

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

ຄວາມເປັນໄປໄດ້ທີ່ຄາດໄວ້
ຄວບຄຸມຄວາມເປັນໄປໄດ້ຂອງການສະແດງຜົນທີ່ມີຄ່າທີ່ລະບຸໄວ້. ນີ້
ພາລາມິເຕີໃຊ້ເວລາເປີເຊັນ (ie 0 ... 100) ເປັນ input. ຄວາມເປັນໄປໄດ້ເລີ່ມຕົ້ນ
ຂອງ 90 ແມ່ນ​ໄດ້​ຮັບ​ໂດຍ​ກົງ​.

align-threshold
ເລືອກສ່ວນໜຶ່ງຂອງຄວາມຖີ່ສູງສຸດຂອງການປະຕິບັດຂອງຕັນພື້ນຖານໃນ a
ຟັງຊັນເພື່ອຈັດວາງຕັນພື້ນຖານ.

align-loop-iterations
loop ທີ່ຄາດວ່າຈະເຮັດຊ້ຳຢ່າງໜ້ອຍຈຳນວນການຊໍ້າຄືນທີ່ເລືອກແມ່ນສອດຄ່ອງ.

tracer-dynamic- coverage
tracer-dynamic-coverage-feedback
ຄ່ານີ້ຖືກນໍາໃຊ້ເພື່ອຈໍາກັດການສ້າງ superblock ເມື່ອອັດຕາສ່ວນທີ່ໃຫ້
ຄໍາແນະນໍາທີ່ຖືກປະຕິບັດແມ່ນກວມເອົາ. ນີ້ຈໍາກັດການຂະຫຍາຍຂະຫນາດລະຫັດທີ່ບໍ່ຈໍາເປັນ.

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

tracer-max-code-growth
ຢຸດເຊົາການຊໍ້າຊ້ອນຫາງເມື່ອການເຕີບໂຕຂອງລະຫັດໄດ້ບັນລຸອັດຕາສ່ວນ. ນີ້​ແມ່ນ
ແທນທີ່ຈະເປັນຂອບເຂດຈໍາກັດປອມ, ຍ້ອນວ່າສ່ວນໃຫຍ່ຂອງການຊໍ້າກັນໄດ້ຖືກລົບລ້າງຕໍ່ມາໃນຂ້າມ
ໂດດ, ດັ່ງນັ້ນມັນອາດຈະຖືກຕັ້ງເປັນມູນຄ່າທີ່ສູງກວ່າຫຼາຍກ່ວາການເຕີບໃຫຍ່ຂອງລະຫັດທີ່ຕ້ອງການ.

tracer-min-branch-ratio
ຢຸດເຊົາການຂະຫຍາຍຕົວແບບປີ້ນກັບກັນເມື່ອຄວາມເປັນໄປໄດ້ຂອງປີ້ນກັບກັນຂອງຂອບທີ່ດີທີ່ສຸດແມ່ນຫນ້ອຍກວ່ານີ້
ເກນ (ເປັນເປີເຊັນ).

tracer-min-branch-ratio
tracer-min-branch-ratio-feedback
ຢຸດການຂະຫຍາຍຕົວໄປຂ້າງຫນ້າຖ້າຂອບທີ່ດີທີ່ສຸດມີຄວາມເປັນໄປໄດ້ຕ່ໍາກວ່າຂອບເຂດນີ້.

ຄ້າຍຄືກັນກັບ 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
ໃຊ້ໂດຍຄໍາສັ່ງ reordering ຕັນພື້ນຖານເພື່ອຕັດສິນໃຈວ່າຈະໃຊ້ໂດຍບໍ່ມີເງື່ອນໄຂ
ສາຂາ ຫຼືສຳເນົາລະຫັດຢູ່ປາຍທາງຂອງມັນ. ລະຫັດຖືກຊ້ໍາກັນເມື່ອມັນ
ຂະ​ຫນາດ​ທີ່​ຄາດ​ຄະ​ເນ​ແມ່ນ​ຂະ​ຫນາດ​ນ້ອຍ​ກ​່​ວາ​ຄ່າ​ນີ້​ຄູນ​ດ້ວຍ​ຂະ​ຫນາດ​ການ​ຄາດ​ຄະ​ເນ​ຂອງ​
ໂດດໂດຍບໍ່ມີເງື່ອນໄຂໃນຈຸດຮ້ອນຂອງໂຄງການ.

ໄດ້ 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 (the
default) ປິດໃຊ້ງານການຂະຫຍາຍພາກພື້ນ.

max-sched-insn-conflict-delay
ຄວາມລ່າຊ້າຂອງຂໍ້ຂັດແຍ່ງສູງສຸດສໍາລັບ insn ທີ່ຈະພິຈາລະນາການເຄື່ອນໄຫວການຄາດເດົາ.
ຄ່າເລີ່ມຕົ້ນແມ່ນ 3.

sched-spec-prob-cutoff
ຄວາມເປັນໄປໄດ້ຫນ້ອຍທີ່ສຸດຂອງຄວາມສໍາເລັດຂອງການຄາດຄະເນ (ເປັນສ່ວນຮ້ອຍ), ດັ່ງນັ້ນການຄາດເດົາ
insns ຖືກກໍານົດ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 40.

sched-spec-state-edge-prob-cutoff
ຄວາມເປັນໄປໄດ້ຕໍ່າສຸດທີ່ຂອບຕ້ອງມີສໍາລັບຕົວກໍານົດເວລາທີ່ຈະຊ່ວຍປະຢັດສະຖານະຂອງມັນ
ຂ້າມມັນ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 10.

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.

max-combine-insns
ຈໍານວນຄໍາແນະນໍາສູງສຸດທີ່ຜູ້ສົມທົບ RTL ພະຍາຍາມສົມທົບ. ຄ່າເລີ່ມຕົ້ນ
ຄ່າແມ່ນ 2 ຢູ່ທີ່ - ອຈ ແລະ 4 ຖ້າບໍ່ດັ່ງນັ້ນ.

integer-share-limit
ຈໍານວນຄົງທີ່ນ້ອຍສາມາດໃຊ້ໂຄງສ້າງຂໍ້ມູນຮ່ວມກັນ, ຫຼຸດຜ່ອນການລວບລວມຂໍ້ມູນ
ການນໍາໃຊ້ຫນ່ວຍຄວາມຈໍາແລະການເພີ່ມຄວາມໄວຂອງມັນ. ນີ້ກໍານົດຄ່າສູງສຸດຂອງການແບ່ງປັນ
ຈໍານວນຄົງທີ່. ຄ່າເລີ່ມຕົ້ນແມ່ນ 256.

ssp-buffer-size
ຂະໜາດຕໍາ່ສຸດຂອງ buffers (ie arrays) ທີ່ໄດ້ຮັບການປ້ອງກັນ stack smashing
ໃນເວລາທີ່ -fstack ການ​ປ້ອງ​ກັນ​ ຖືກນໍາໃຊ້.

ຄ່າເລີ່ມຕົ້ນນີ້ກ່ອນ Ubuntu 10.10 ແມ່ນ "8". ໃນປັດຈຸບັນມັນແມ່ນ "4", ເພື່ອເພີ່ມການ
ຈໍານວນຂອງຫນ້າທີ່ປ້ອງກັນໂດຍຕົວປ້ອງກັນ stack.

min-size-for-stack-sharing
ຂະຫນາດຕໍາ່ສຸດທີ່ຂອງຕົວແປທີ່ມີສ່ວນຮ່ວມໃນການແບ່ງປັນ stack slot ໃນເວລາທີ່ບໍ່ມີ
ການເພີ່ມປະສິດທິພາບ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 32.

max-jump-thread-duplication-stmts
ຈໍາ​ນວນ​ສູງ​ສຸດ​ຂອງ​ຄໍາ​ຖະ​ແຫຼງ​ການ​ອະ​ນຸ​ຍາດ​ໃຫ້​ຢູ່​ໃນ block ທີ່​ຈໍາ​ເປັນ​ຕ້ອງ​ໄດ້​ຮັບ​ການ​ຊ​້​ໍາ​ກັນ​ໃນ​ເວ​ລາ​ທີ່
ກະທູ້ກະໂດດ.

max-fields-for-field-sensitive
ຈຳນວນຊ່ອງຂໍ້ມູນສູງສຸດໃນໂຄງສ້າງທີ່ໄດ້ຮັບການປິ່ນປົວໃນລັກສະນະທີ່ລະອຽດອ່ອນຂອງຊ່ອງຂໍ້ມູນໃນລະຫວ່າງ
ການວິເຄາະຕົວຊີ້. ຄ່າເລີ່ມຕົ້ນແມ່ນສູນສຳລັບ -O0 ແລະ -O1, ແລະ 100 ສຳ ລັບ -ອສ, -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 ປະຕິເສດການສ້າງອາເຣທີ່ໃຫຍ່ກວ່າ
switch-conversion-max-branch-ratio ເທົ່າຂອງຈໍານວນສາຂາໃນສະຫຼັບ.

max-partial-antic-length
ຄວາມຍາວສູງສຸດຂອງຊຸດເກົ່າແກ່ບາງສ່ວນທີ່ຄິດໄລ່ໃນລະຫວ່າງຕົ້ນໄມ້ບາງສ່ວນ
ການເພີ່ມປະສິດທິພາບການລົບລ້າງການຊໍ້າຊ້ອນ (-ftre-pre) ເມື່ອ optimizing ຢູ່ -O3 ແລະຂ້າງເທິງ.
ສໍາລັບບາງປະເພດຂອງລະຫັດແຫຼ່ງ, ການປັບປຸງການລົບລ້າງການຊ້ໍາຊ້ອນບາງສ່ວນ
ການເພີ່ມປະສິດທິພາບສາມາດແລ່ນຫນີໄດ້, ການໃຊ້ຫນ່ວຍຄວາມຈໍາທັງຫມົດທີ່ມີຢູ່ໃນເຈົ້າພາບ
ເຄື່ອງ. ພາລາມິເຕີນີ້ກໍານົດຂອບເຂດຈໍາກັດກ່ຽວກັບຄວາມຍາວຂອງຊຸດທີ່ຖືກຄິດໄລ່,
ເຊິ່ງປ້ອງກັນພຶດຕິກຳການໜີ. ກໍານົດຄ່າຂອງ 0 ສໍາລັບພາລາມິເຕີນີ້
ອະນຸຍາດໃຫ້ມີຄວາມຍາວທີ່ກໍານົດໄວ້ບໍ່ຈໍາກັດ.

sccvn-max-scc-size
ຂະໜາດສູງສຸດຂອງອົງປະກອບເຊື່ອມຕໍ່ທີ່ເຂັ້ມແຂງ (SCC) ໃນລະຫວ່າງການປະມວນຜົນ SCCVN. ຖ້າ
ຂອບເຂດຈໍາກັດນີ້ຖືກຕີ, ການປຸງແຕ່ງ SCCVN ສໍາລັບຫນ້າທີ່ທັງຫມົດແມ່ນບໍ່ໄດ້ເຮັດແລະ
ການເພີ່ມປະສິດທິພາບຂຶ້ນຢູ່ກັບມັນຖືກປິດໃຊ້ງານ. ຂະໜາດ SCC ສູງສຸດເລີ່ມຕົ້ນແມ່ນ
10000​.

sccvn-max-alias-queries-per-access
ຈໍານວນການສອບຖາມ alias-oracle ສູງສຸດທີ່ພວກເຮົາປະຕິບັດໃນເວລາທີ່ຊອກຫາການຊໍ້າຊ້ອນ
ສໍາລັບການໂຫຼດແລະຮ້ານຄ້າ. ຖ້າ​ຫາກ​ວ່າ​ຂໍ້​ຈໍາ​ກັດ​ນີ້​ແມ່ນ​ມົນ​ຕີ​ການ​ຊອກ​ຫາ​ໄດ້​ຖືກ​ຍົກ​ເລີກ​ແລະ​ການ​ໂຫຼດ​ຫຼື​
ຮ້ານຄ້າບໍ່ໄດ້ຖືກພິຈາລະນາຊໍ້າຊ້ອນ. ຈໍານວນຂອງການສອບຖາມແມ່ນ algorithm
ຈໍາ​ກັດ​ຈໍາ​ນວນ​ຂອງ​ຮ້ານ​ຢູ່​ໃນ​ເສັ້ນ​ທາງ​ທັງ​ຫມົດ​ຈາກ​ການ​ໂຫຼດ​ທີ່​ຈະ​ເຂົ້າ​ຫນ້າ​ທີ່​.
ຈໍານວນການສອບຖາມສູງສຸດໃນຕອນຕົ້ນແມ່ນ 1000.

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, ເຊິ່ງເປັນຈໍານວນການລົງທະບຽນຫນ້ອຍທີ່ສຸດທີ່ຕ້ອງການໂດຍປົກກະຕິ
ຄໍາແນະນໍາ. ມູນຄ່ານີ້ແມ່ນດີທີ່ສຸດທີ່ພົບເຫັນຈາກການທົດລອງຈໍານວນຫລາຍ.

lra-inheritance-ebb-probability-cutoff
LRA ພະຍາຍາມໃຊ້ຄືນຄ່າທີ່ໂຫຼດຄືນໃໝ່ຢູ່ໃນທະບຽນໃນ insns ຕໍ່ມາ. ນີ້
ການເພີ່ມປະສິດທິພາບແມ່ນເອີ້ນວ່າມໍລະດົກ. EBB ຖືກນໍາໃຊ້ເປັນພາກພື້ນເພື່ອເຮັດສິ່ງນີ້
ການເພີ່ມປະສິດທິພາບ. ພາຣາມິເຕີກຳນົດຄວາມເປັນໄປໄດ້ໜ້ອຍສຸດຂອງການຕົກຜ່ານຂອບໃນ
ເປີເຊັນທີ່ໃຊ້ເພື່ອເພີ່ມ BB ເຂົ້າໃນການສືບທອດ EBB ໃນ LRA. ຄ່າເລີ່ມຕົ້ນຂອງ
ພາຣາມິເຕີແມ່ນ 40. ຄ່າໄດ້ຖືກເລືອກຈາກການແລ່ນຈໍານວນຫລາຍຂອງ SPEC2000 ໃນ x86-64.

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 ເວລາ
ຂະໜາດຂອງຕົວຊີ້ຕົ້ນສະບັບ.

sra-max-scalarization-size-Ospeed
sra-max-scalarization-size-Osize
ທັງສອງ Scalar Reduction of Aggregates passes (SRA ແລະ IPA-SRA) ມີຈຸດປະສົງເພື່ອທົດແທນ
ພາກສ່ວນສະເກັດເງິນຂອງຜົນລວມທີ່ມີການນໍາໃຊ້ຕົວແປສະເກັດເງິນເອກະລາດ. ເຫຼົ່ານີ້
ຕົວກໍານົດການຄວບຄຸມຂະຫນາດສູງສຸດ, ໃນຫນ່ວຍເກັບຮັກສາ, ຂອງການລວບລວມຊຶ່ງເປັນ
ພິຈາລະນາສໍາລັບການທົດແທນໃນເວລາທີ່ລວບລວມສໍາລັບຄວາມໄວ (sra-max-scalarization-size-
ຄວາມໄວ) ຫຼື​ຂະ​ຫນາດ (sra-max-scalarization-size-Osize) ຕາມ ລຳ ດັບ.

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 ຊ້ຳ.

loop-unroll-jam-size
ລະບຸປັດໄຈ unroll ສໍາລັບ -floop-unroll-and- jam ທາງເລືອກ. ຄ່າເລີ່ມຕົ້ນ
ແມ່ນ 4.

loop-unroll-jam-depth
ກໍານົດຂະຫນາດທີ່ຈະ unrolled (ນັບຈາກ loop ພາຍໃນທີ່ສຸດ) ສໍາລັບ
-floop-unroll-and- jam. ຄ່າເລີ່ມຕົ້ນແມ່ນ 2.

ipa-cp-value-list-size
IPA-CP ພະຍາຍາມຕິດຕາມຄ່າທີ່ເປັນໄປໄດ້ທັງໝົດ ແລະປະເພດທີ່ສົ່ງໄປຫາຟັງຊັນໃດໜຶ່ງ
ຕົວກໍານົດການເພື່ອຂະຫຍາຍພວກມັນແລະປະຕິບັດ devirtualization. ipa-cp-value-
ຂະຫນາດລາຍການ ແມ່ນຈໍານວນສູງສຸດຂອງຄ່າແລະປະເພດທີ່ມັນເກັບຮັກສາຕໍ່ຫນຶ່ງຢ່າງເປັນທາງການ
ພາລາມິເຕີຂອງຟັງຊັນ.

ipa-cp-eval-threshold
IPA-CP ຄິດໄລ່ຄະແນນຂອງຕົນເອງຂອງ cloning heuristics ກໍາໄລແລະປະຕິບັດ
ໂອກາດ cloning ທີ່ມີຄະແນນເກີນ ipa-cp-eval-threshold.

ipa-cp-recursion-ການລົງໂທດ
ການລົງໂທດເປີເຊັນທີ່ຫນ້າທີ່ recursive ຈະໄດ້ຮັບເມື່ອພວກເຂົາຖືກປະເມີນ
ສໍາລັບ cloning.

ipa-cp-single-call-ລົງໂທດ
ຟັງຊັນການລົງໂທດເປີເຊັນປະກອບດ້ວຍການໂທດຽວໄປຫາຟັງຊັນອື່ນຈະ
ໄດ້ຮັບໃນເວລາທີ່ເຂົາເຈົ້າໄດ້ຖືກປະເມີນສໍາລັບການ cloning.

ipa-max-agg-ລາຍການ
IPA-CP ຍັງສາມາດຂະຫຍາຍພັນທຸກໍາຂອງຄ່າ scalar ທີ່ຜ່ານໃນ
ລວມ. ipa-max-agg-ລາຍການ ຄວບຄຸມຈໍານວນສູງສຸດຂອງຄ່າດັ່ງກ່າວຕໍ່ຫນຶ່ງ
ພາລາມິເຕີ.

ipa-cp-loop-hint-bonus
ເມື່ອ IPA-CP ກໍານົດວ່າຜູ້ສະຫມັກ cloning ຈະເຮັດໃຫ້ຈໍານວນ
iterations ຂອງ loop ເປັນທີ່ຮູ້ຈັກ, ມັນເພີ່ມໂບນັດຂອງ ipa-cp-loop-hint-bonus ການ
ຄະແນນຜົນກຳໄລຂອງຜູ້ສະໝັກ.

ipa-cp-array-index-hint-bonus
ເມື່ອ IPA-CP ກໍານົດວ່າຜູ້ສະຫມັກ cloning ຈະເຮັດໃຫ້ດັດສະນີຂອງອາເຣ
ການເຂົ້າເຖິງທີ່ຮູ້ຈັກ, ມັນເພີ່ມໂບນັດຂອງ ipa-cp-array-index-hint-bonus ການ
ຄະແນນຜົນກຳໄລຂອງຜູ້ສະໝັກ.

ipa-max-aa-ຂັ້ນຕອນ
ໃນ​ລະ​ຫວ່າງ​ການ​ວິ​ເຄາະ​ຂອງ​ອົງ​ການ​ທໍາ​ງານ​ຂອງ​ຕົນ​, IPA-CP ຈ້າງ​ງານ​ການ​ວິ​ເຄາະ​ນາມ​ແຝງ​ເພື່ອ​
ຕິດຕາມຄ່າທີ່ຊີ້ໄປໂດຍພາລາມິເຕີຟັງຊັນ. ເພື່ອບໍ່ໃຫ້ໃຊ້ເວລາຫຼາຍເກີນໄປ
ການ​ວິ​ເຄາະ​ຫນ້າ​ທີ່​ຂະ​ຫນາດ​ໃຫຍ່​, ມັນ​ເຮັດ​ໃຫ້​ເຖິງ​ແລະ​ພິ​ຈາ​ລະ​ນາ​ຄວາມ​ຊົງ​ຈໍາ​ທັງ​ຫມົດ clobbered ຫຼັງ​ຈາກ​
ການກວດສອບ ipa-max-aa-ຂັ້ນຕອນ ຂໍ້ຄວາມແກ້ໄຂຄວາມຊົງຈໍາ.

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.

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

case-values-threshold
ຈໍານວນນ້ອຍທີ່ສຸດຂອງຄ່າທີ່ແຕກຕ່າງກັນສໍາລັບການທີ່ດີທີ່ສຸດທີ່ຈະໃຊ້ຕາຕະລາງໂດດ
ແທນທີ່ຈະເປັນຕົ້ນໄມ້ຂອງສາຂາທີ່ມີເງື່ອນໄຂ. ຖ້າຄ່າແມ່ນ 0, ໃຊ້ຄ່າເລີ່ມຕົ້ນສໍາລັບ
ເຄື່ອງ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 0.

tree-reassoc-width
ກໍານົດຈໍານວນສູງສຸດຂອງຄໍາແນະນໍາທີ່ປະຕິບັດໃນຂະຫນານໃນຕົ້ນໄມ້ reassociated.
ພາຣາມິເຕີນີ້ overrides heuristics ຂຶ້ນກັບເປົ້າຫມາຍທີ່ໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຖ້າຫາກວ່າບໍ່ມີ
ຄ່າສູນ.

sched-pressure-algorithm
ເລືອກລະຫວ່າງສອງການປະຕິບັດທີ່ມີຢູ່ຂອງ -fsched-ຄວາມກົດດັນ. ສູດການຄິດໄລ່ 1
ແມ່ນການປະຕິບັດຕົ້ນສະບັບແລະເປັນແນວໂນ້ມທີ່ຈະປ້ອງກັນບໍ່ໃຫ້ຄໍາແນະນໍາຈາກ
ຖືກສັ່ງຄືນ. Algorithm 2 ໄດ້ຖືກອອກແບບເພື່ອເປັນການປະນີປະນອມລະຫວ່າງ
ວິທີການອະນຸລັກທີ່ຂ້ອນຂ້າງປະຕິບັດໂດຍ algorithm 1 ແລະຂ້ອນຂ້າງຮຸກຮານ
ວິທີການປະຕິບັດໂດຍຕົວກໍານົດເວລາເລີ່ມຕົ້ນ. ມັນຂື້ນກັບຫຼາຍຂື້ນກັບການມີ
ເອກະສານລົງທະບຽນປົກກະຕິແລະຫ້ອງຮຽນຄວາມກົດດັນລົງທະບຽນທີ່ຖືກຕ້ອງ. ເບິ່ງ haifa-sched.c
ໃນແຫຼ່ງ GCC ສໍາລັບລາຍລະອຽດເພີ່ມເຕີມ.

ທາງເລືອກເລີ່ມຕົ້ນແມ່ນຂຶ້ນກັບເປົ້າຫມາຍ.

max-slsr-cand-scan
ກໍານົດຈໍານວນສູງສຸດຂອງຜູ້ສະຫມັກທີ່ມີຢູ່ແລ້ວທີ່ພິຈາລະນາໃນເວລາທີ່ຊອກຫາ a
ພື້ນຖານສໍາລັບຜູ້ສະຫມັກການຫຼຸດຜ່ອນຄວາມເຂັ້ມແຂງເສັ້ນຊື່ໃຫມ່.

asan-ທົ່ວໂລກ
ເປີດໃຊ້ການກວດສອບການລົ້ນບັບເຟີສຳລັບວັດຖຸທົ່ວໂລກ. ປະເພດຂອງການປົກປ້ອງນີ້ແມ່ນ
ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຖ້າທ່ານໃຊ້ -fsanitize=ທີ່ຢູ່ ທາງເລືອກ. ເພື່ອປິດການໃຊ້ງານທົ່ວໂລກ
ການນໍາໃຊ້ການປົກປ້ອງວັດຖຸ --param asan-globals=0.

asan-stack
ເປີດໃຊ້ການກວດສອບການລົ້ນບັບເຟີສໍາລັບວັດຖຸ stack. ປະເພດຂອງການປົກປ້ອງນີ້ແມ່ນ
ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນເມື່ອໃຊ້-fsanitize=ທີ່ຢູ່. ເພື່ອປິດການໃຊ້ການປ້ອງກັນ stack
--param asan-stack=0 ທາງເລືອກ.

asan-instrument-reads
ເປີດໃຊ້ການກວດສອບການລົ້ນບັບເຟີສຳລັບການອ່ານໜ່ວຍຄວາມຈຳ. ປະເພດຂອງການປົກປ້ອງນີ້ແມ່ນ
ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນເມື່ອໃຊ້ -fsanitize=ທີ່ຢູ່. ເພື່ອປິດການອ່ານຫນ່ວຍຄວາມຈໍາ
ການ​ນໍາ​ໃຊ້​ປົກ​ປັກ​ຮັກ​ສາ​ --param asan-instrument-reads=0.

asan-instrument-writes
ເປີດໃຊ້ການກວດສອບການລົ້ນບັບເຟີສໍາລັບການຂຽນຫນ່ວຍຄວາມຈໍາ. ປະເພດຂອງການປົກປ້ອງນີ້ແມ່ນ
ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນເມື່ອໃຊ້ -fsanitize=ທີ່ຢູ່. ເພື່ອປິດການທໍາງານຂອງຫນ່ວຍຄວາມຈໍາ
ການ​ນໍາ​ໃຊ້​ປົກ​ປັກ​ຮັກ​ສາ​ --param asan-instrument-writes=0 ທາງເລືອກ.

asan-memintrin
ເປີດໃຊ້ການກວດຫາຟັງຊັນໃນຕົວ. ປະເພດຂອງການປົກປ້ອງນີ້ຖືກເປີດໃຊ້ໂດຍ
ຄ່າເລີ່ມຕົ້ນເມື່ອໃຊ້ -fsanitize=ທີ່ຢູ່. ເພື່ອປິດການທໍາງານການປ້ອງກັນໃນຕົວ
ການນໍາໃຊ້ --param asan-memintrin=0.

asan-use-after-return
ເປີດໃຊ້ການກວດຫາການໃຊ້ຫຼັງການກັບຄືນມາ. ປະເພດຂອງການປົກປ້ອງນີ້ຖືກເປີດໃຊ້ໂດຍ
ຄ່າເລີ່ມຕົ້ນເມື່ອໃຊ້ -fsanitize=ທີ່ຢູ່ ທາງເລືອກ. ເພື່ອປິດການນຳໃຊ້ຫຼັງການສົ່ງຄືນ
ການ​ນໍາ​ໃຊ້​ການ​ກວດ​ສອບ​ --param asan-use-after-return=0.

asan-instrumentation-with-call-threshold
ຖ້າ​ຫາກ​ວ່າ​ຈໍາ​ນວນ​ຂອງ​ການ​ເຂົ້າ​ເຖິງ​ຫນ່ວຍ​ຄວາມ​ຈໍາ​ໃນ​ການ​ທໍາ​ງານ​ທີ່​ຖືກ​ນໍາ​ໃຊ້​ແມ່ນ​ຫຼາຍ​ກວ່າ​ຫຼື​ເທົ່າ​ທຽມ​ກັບ​
ເບີໂທນີ້, ໃຊ້ການໂທກັບແທນການກວດກາໃນແຖວ. ເຊັ່ນ: ປິດການໃຊ້ງານລະຫັດ inline
ການນໍາໃຊ້ --param asan-instrumentation-with-call-threshold=0.

chkp-max-ctor-size
ໂຄງສ້າງຄົງທີ່ທີ່ສ້າງຂຶ້ນໂດຍ Pointer Bounds Checker ອາດຈະກາຍເປັນຂະຫນາດໃຫຍ່ຫຼາຍແລະ
ເພີ່ມທະວີການລວບລວມເວລາຢ່າງຫຼວງຫຼາຍໃນລະດັບການເພີ່ມປະສິດທິພາບ -O1 ແລະສູງກວ່າ. ນີ້
ພາລາມິເຕີແມ່ນ nubmer ສູງສຸດຂອງຖະແຫຼງການໃນຕົວສ້າງທີ່ສ້າງຂຶ້ນດຽວ.
ຄ່າເລີ່ມຕົ້ນແມ່ນ 5000.

max-fsm-thread-path-insns
ຈໍາ​ນວນ​ສູງ​ສຸດ​ຂອງ​ຄໍາ​ແນະ​ນໍາ​ທີ່​ຈະ​ສໍາ​ເນົາ​ໃນ​ເວ​ລາ​ທີ່​ການ​ຊ​້​ໍາ​ກັນ blocks ໃນ​ສະ​ຖາ​ນະ​ການ​ຈໍາ​ກັດ​
ເສັ້ນທາງກະທູ້ກະໂດດອັດຕະໂນມັດ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 100.

max-fsm-thread-length
ຈຳນວນທ່ອນໄມ້ຂັ້ນພື້ນຖານສູງສຸດໃນລັດຈຳກັດ automaton jump thread. ໄດ້
ຄ່າເລີ່ມຕົ້ນແມ່ນ 10.

max-fsm-thread-paths
ຈຳນວນສູງສຸດຂອງເສັ້ນທາງກະທູ້ກະໂດດໃໝ່ເພື່ອສ້າງເປັນລະບົບອັດຕະໂນມັດແບບກຳນົດ.
ຄ່າເລີ່ມຕົ້ນແມ່ນ 50.

ທາງເລືອກໃນການ ການຄວບຄຸມ ໄດ້ ໂປເຈັກເຕີ້
ທາງ​ເລືອກ​ເຫຼົ່າ​ນີ້​ຄວບ​ຄຸມ C preprocessor, ເຊິ່ງ​ແມ່ນ​ດໍາ​ເນີນ​ການ​ໃນ​ແຕ່​ລະ​ໄຟລ​໌ C source ກ່ອນ​ທີ່​ຈະ​ເປັນ​ຈິງ
ການລວບລວມ.

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

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

- ໂປເຊດເຊີ Xpre ທາງເລືອກ
ຜ່ານ ທາງເລືອກ ເປັນທາງເລືອກສໍາລັບ preprocessor ໄດ້. ທ່ານ​ສາ​ມາດ​ນໍາ​ໃຊ້​ນີ້​ເພື່ອ​ສະ​ຫນອງ​ລະ​ບົບ -
ຕົວເລືອກສະເພາະຕົວປະມວນຜົນກ່ອນທີ່ GCC ບໍ່ຮັບຮູ້.

ຖ້າທ່ານຕ້ອງການຜ່ານທາງເລືອກທີ່ໃຊ້ການໂຕ້ຖຽງ, ທ່ານຕ້ອງໃຊ້ - ໂປເຊດເຊີ Xpre
ສອງຄັ້ງ, ຫນຶ່ງຄັ້ງສໍາລັບທາງເລືອກແລະຫນຶ່ງຄັ້ງສໍາລັບການໂຕ້ຖຽງ.

-no-integrated-cpp
ດໍາເນີນການ preprocessing ເປັນ pass ແຍກຕ່າງຫາກກ່ອນທີ່ຈະລວບລວມ. ໂດຍຄ່າເລີ່ມຕົ້ນ, GCC ດໍາເນີນການ
preprocessing ເປັນສ່ວນລວມຂອງ input tokenization ແລະ parsing. ຖ້າທາງເລືອກນີ້
ໄດ້ຖືກສະຫນອງໃຫ້, ພາສາຫນ້າທີ່ເຫມາະສົມ (cc1, cc1plus, ຫຼື cc1obj ສໍາລັບ C, C++,
ແລະ Objective-C, ຕາມລໍາດັບ) ແທນທີ່ຈະຖືກເອີ້ນສອງຄັ້ງ, ຄັ້ງດຽວສໍາລັບການປຸງແຕ່ງກ່ອນເທົ່ານັ້ນ
ແລະຄັ້ງດຽວສໍາລັບການລວບລວມຕົວຈິງຂອງການປ້ອນຂໍ້ມູນ preprocessed. ຕົວເລືອກນີ້ອາດຈະເປັນປະໂຫຍດ
ໂດຍສົມທົບກັບ -B or - ຫໍ່ ທາງ​ເລືອກ​ໃນ​ການ​ລະ​ບຸ preprocessor ສະ​ຫຼັບ​ຫຼື​
ດໍາເນີນການເພີ່ມເຕີມຂອງແຫຼ່ງໂຄງການລະຫວ່າງ preprocessing ປົກກະຕິແລະ
ການລວບລວມ.

-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
ຍອມຮັບຊື່ຕົວອັກສອນທົ່ວໄປໃນຕົວລະບຸ. ຕົວເລືອກນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ
ສຳລັບ C99 (ແລະ ຮຸ່ນ C ມາດຕະຖານຕໍ່ມາ) ແລະ C++.

-fno-canonical-system-headers
ເມື່ອການປະມວນຜົນກ່ອນ, ຢ່າຫຍໍ້ເສັ້ນທາງສ່ວນຫົວຂອງລະບົບດ້ວຍ canonicalization.

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

ໃຫ້ສັງເກດວ່າ "-ftrack-macro-expansion=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. ນີ້ສາມາດເປັນ
ແທນທີ່ໂດຍສະຖານທີ່ ຫຼືຕົວເລືອກແຖວຄຳສັ່ງນີ້. ໃນປັດຈຸບັນຄໍາສັ່ງ -
ຕົວເລືອກແຖວຈະມີຄວາມສຳຄັນກວ່າຖ້າມີຂໍ້ຂັດແຍ່ງ. ສາຍໄຟ ສາມາດເຂົ້າລະຫັດໃດໆ
ສະຫນັບສະຫນູນໂດຍປົກກະຕິຫ້ອງສະຫມຸດ "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 ຖ້າທາງເລືອກໃດໆເຫຼົ່ານີ້ຖືກນໍາໃຊ້, ຫຼັງຈາກນັ້ນຕົວເຊື່ອມຕໍ່ບໍ່ໄດ້ດໍາເນີນການ, ແລະຊື່ໄຟລ໌ວັດຖຸ
ບໍ່ຄວນໃຊ້ເປັນການໂຕ້ຖຽງ.

-fuse-ld=bfd
ການນໍາໃຊ້ bfd linker ແທນທີ່ຈະເປັນຕົວເຊື່ອມຕໍ່ເລີ່ມຕົ້ນ.

-fuse-ld=ທອງ
ການນໍາໃຊ້ ຄໍາ linker ແທນທີ່ຈະເປັນຕົວເຊື່ອມຕໍ່ເລີ່ມຕົ້ນ.

-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
ຢ່າໃຊ້ຫ້ອງສະຫມຸດລະບົບມາດຕະຖານເມື່ອເຊື່ອມຕໍ່. ພຽງແຕ່ຫ້ອງສະຫມຸດທີ່ທ່ານລະບຸ
ຖືກສົ່ງໄປຫາຕົວເຊື່ອມຕໍ່, ແລະທາງເລືອກທີ່ລະບຸການເຊື່ອມໂຍງຂອງຫ້ອງສະຫມຸດລະບົບ, ເຊັ່ນ
as -static-libgcc or -shared-libgcc, ຖືກລະເລີຍ. ໄຟລ໌ເລີ່ມຕົ້ນມາດຕະຖານຖືກນໍາໃຊ້
ຕາມປົກກະຕິ, ເວັ້ນເສຍແຕ່ -nostartfiles ຖືກນໍາໃຊ້.

compiler ອາດຈະສ້າງການໂທຫາ "memcmp", "memset", "memcpy" ແລະ "memmove". ເຫຼົ່ານີ້
ປົກກະຕິລາຍການຖືກແກ້ໄຂໂດຍລາຍການໃນ libc. ຈຸດເຂົ້າເຫຼົ່ານີ້ຄວນຈະເປັນ
ສະໜອງໃຫ້ໂດຍຜ່ານກົນໄກອື່ນເມື່ອຕົວເລືອກນີ້ຖືກລະບຸ.

-nostdlib
ຢ່າໃຊ້ໄຟລ໌ເລີ່ມຕົ້ນລະບົບມາດຕະຖານຫຼືຫ້ອງສະຫມຸດໃນເວລາທີ່ເຊື່ອມຕໍ່. ບໍ່ມີການເລີ່ມຕົ້ນ
ໄຟລ໌ແລະພຽງແຕ່ຫ້ອງສະຫມຸດທີ່ທ່ານລະບຸແມ່ນຖືກສົ່ງໄປຫາຕົວເຊື່ອມຕໍ່, ແລະທາງເລືອກ
ການລະບຸການເຊື່ອມໂຍງຂອງຫ້ອງສະຫມຸດລະບົບ, ເຊັ່ນ: -static-libgcc or -shared-libgcc,
ຖືກລະເລີຍ.

compiler ອາດຈະສ້າງການໂທຫາ "memcmp", "memset", "memcpy" ແລະ "memmove". ເຫຼົ່ານີ້
ປົກກະຕິລາຍການຖືກແກ້ໄຂໂດຍລາຍການໃນ libc. ຈຸດເຂົ້າເຫຼົ່ານີ້ຄວນຈະເປັນ
ສະໜອງໃຫ້ໂດຍຜ່ານກົນໄກອື່ນເມື່ອຕົວເລືອກນີ້ຖືກລະບຸ.

ຫນຶ່ງໃນຫ້ອງສະຫມຸດມາດຕະຖານ bypassed ໂດຍ -nostdlib ແລະ -nodefaultlibs is libgcc.a, ເປັນ
ຫ້ອງສະໝຸດຂອງສິ່ງທີ່ເຮັດປະຈຳພາຍໃນຍ່ອຍທີ່ GCC ໃຊ້ເພື່ອເອົາຊະນະຂໍ້ບົກຜ່ອງໂດຍສະເພາະ
ເຄື່ອງຈັກ, ຫຼືຄວາມຕ້ອງການພິເສດສໍາລັບບາງພາສາ.

ໃນກໍລະນີຫຼາຍທີ່ສຸດ, ທ່ານຕ້ອງການ libgcc.a ເຖິງແມ່ນວ່າທ່ານຕ້ອງການຫຼີກເວັ້ນຫ້ອງສະຫມຸດມາດຕະຖານອື່ນໆ.
ໃນຄໍາສັບຕ່າງໆອື່ນໆ, ໃນເວລາທີ່ທ່ານກໍານົດ -nostdlib or -nodefaultlibs ປົກກະຕິແລ້ວທ່ານຄວນ
ລະບຸ -lgcc ຄື​ກັນ. ນີ້ຮັບປະກັນວ່າທ່ານບໍ່ມີການອ້າງອີງທີ່ບໍ່ໄດ້ຮັບການແກ້ໄຂ
ບັນຊີຍ່ອຍຂອງຫ້ອງສະໝຸດ GCC ພາຍໃນ. (ຕົວຢ່າງຂອງ routine ພາຍໃນແມ່ນ
"__main", ໃຊ້ເພື່ອຮັບປະກັນວ່າຕົວສ້າງ C++ ຖືກເອີ້ນ.)

-pie
ຜະລິດຕໍາແຫນ່ງທີ່ເປັນເອກະລາດປະຕິບັດໄດ້ກ່ຽວກັບເປົ້າຫມາຍທີ່ສະຫນັບສະຫນູນມັນ. ສໍາລັບການຄາດເດົາ
ຜົນໄດ້ຮັບ, ທ່ານຕ້ອງລະບຸຊຸດດຽວກັນຂອງທາງເລືອກທີ່ໃຊ້ສໍາລັບການລວບລວມ (-fpie,
-fPIE, ຫຼືຕົວເລືອກຍ່ອຍແບບຈໍາລອງ) ເມື່ອທ່ານລະບຸຕົວເລືອກຕົວເຊື່ອມຕໍ່ນີ້.

-no-pie
ຢ່າຜະລິດຕໍາແຫນ່ງທີ່ເປັນເອກະລາດທີ່ສາມາດປະຕິບັດໄດ້.

-rdynamic
ຜ່ານທຸງ - ສົ່ງ​ອອກ​ແບບ​ເຄື່ອນ​ໄຫວ​ ກັບຕົວເຊື່ອມຕໍ່ ELF, ກ່ຽວກັບເປົ້າຫມາຍທີ່ສະຫນັບສະຫນູນມັນ. ນີ້
ແນະນໍາຕົວເຊື່ອມຕໍ່ເພື່ອເພີ່ມສັນຍາລັກທັງຫມົດ, ບໍ່ພຽງແຕ່ໃຊ້, ໃຫ້ກັບສັນຍາລັກແບບເຄື່ອນໄຫວ
ໂຕະ. ທາງເລືອກນີ້ແມ່ນຈໍາເປັນສໍາລັບບາງການນໍາໃຊ້ "dlopen" ຫຼືເພື່ອອະນຸຍາດໃຫ້ໄດ້ຮັບ
backtraces ຈາກພາຍໃນໂຄງການ.

-s ເອົາຕາຕະລາງສັນຍາລັກທັງຫມົດແລະຂໍ້ມູນການຍົກຍ້າຍອອກຈາກການປະຕິບັດ.

-static
ໃນລະບົບທີ່ສະຫນັບສະຫນູນການເຊື່ອມໂຍງແບບເຄື່ອນໄຫວ, ນີ້ປ້ອງກັນບໍ່ໃຫ້ການເຊື່ອມຕໍ່ກັບການແບ່ງປັນ
ຫ້ອງສະໝຸດ. ໃນລະບົບອື່ນໆ, ທາງເລືອກນີ້ບໍ່ມີຜົນ.

- ແບ່ງ​ປັນ​
ຜະລິດວັດຖຸທີ່ໃຊ້ຮ່ວມກັນເຊິ່ງຫຼັງຈາກນັ້ນສາມາດເຊື່ອມຕໍ່ກັບວັດຖຸອື່ນໆເພື່ອສ້າງເປັນ
ປະຕິບັດໄດ້. ບໍ່ແມ່ນທຸກລະບົບທີ່ຮອງຮັບຕົວເລືອກນີ້. ສໍາລັບຜົນໄດ້ຮັບທີ່ຄາດເດົາໄດ້, ທ່ານຕ້ອງ
ຍັງລະບຸຊຸດຕົວເລືອກດຽວກັນທີ່ໃຊ້ສໍາລັບການລວບລວມ (-fpic, -fPIC, ຫຼືຕົວແບບ
suboptions) ເມື່ອທ່ານລະບຸຕົວເລືອກຕົວເຊື່ອມຕໍ່ນີ້.[1]

-shared-libgcc
-static-libgcc
ກ່ຽວກັບລະບົບທີ່ສະຫນອງ libgcc ເປັນຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນ, ທາງເລືອກເຫຼົ່ານີ້ບັງຄັບໃຫ້ໃຊ້
ບໍ່ວ່າຈະເປັນສະບັບທີ່ແບ່ງປັນຫຼືສະຖິດ, ຕາມລໍາດັບ. ຖ້າບໍ່ມີສະບັບພາສາທີ່ແບ່ງປັນ libgcc ແມ່ນ
ສ້າງຂຶ້ນເມື່ອ compiler ຖືກຕັ້ງຄ່າ, ທາງເລືອກເຫຼົ່ານີ້ບໍ່ມີຜົນຫຍັງເລີຍ.

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

ດັ່ງນັ້ນ, ໄດເວີ G++ ແລະ GCJ ຈະເພີ່ມອັດຕະໂນມັດ -shared-libgcc ທຸກຄັ້ງທີ່ເຈົ້າສ້າງ
ຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນຫຼືການປະຕິບັດຕົ້ນຕໍ, ເພາະວ່າ C ++ ແລະ Java ປົກກະຕິແລ້ວໃຊ້
ຂໍ້ຍົກເວັ້ນ, ດັ່ງນັ້ນນີ້ແມ່ນສິ່ງທີ່ຖືກຕ້ອງທີ່ຈະເຮັດ.

ຖ້າ, ແທນທີ່ຈະ, ທ່ານໃຊ້ໄດເວີ GCC ເພື່ອສ້າງຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນ, ທ່ານອາດຈະພົບວ່າພວກມັນ
ບໍ່ໄດ້ເຊື່ອມຕໍ່ສະເຫມີກັບການແບ່ງປັນ libgcc. ຖ້າ GCC ຊອກຫາ, ໃນການຕັ້ງຄ່າຂອງມັນ
ເວລາ, ທ່ານມີຕົວເຊື່ອມຕໍ່ທີ່ບໍ່ແມ່ນ GNU ຫຼືຕົວເຊື່ອມຕໍ່ GNU ທີ່ບໍ່ສະຫນັບສະຫນູນທາງເລືອກ
--eh-frame-hdr, ມັນເຊື່ອມຕໍ່ສະບັບແບ່ງປັນຂອງ libgcc ເຂົ້າໄປໃນຫ້ອງສະຫມຸດຮ່ວມກັນໂດຍ
ຄ່າເລີ່ມຕົ້ນ. ຖ້າບໍ່ດັ່ງນັ້ນ, ມັນໃຊ້ປະໂຍດຈາກຕົວເຊື່ອມຕໍ່ແລະ optimizes ຫ່າງການເຊື່ອມຕໍ່
ກັບ​ສະ​ບັບ​ທີ່​ແບ່ງ​ປັນ​ຂອງ​ libgcc, ການເຊື່ອມໂຍງກັບສະບັບ static ຂອງ libgcc ໂດຍ
ຄ່າເລີ່ມຕົ້ນ. ນີ້ອະນຸຍາດໃຫ້ມີຂໍ້ຍົກເວັ້ນເພື່ອເຜີຍແຜ່ຜ່ານຫ້ອງສະຫມຸດຮ່ວມກັນດັ່ງກ່າວ, ໂດຍບໍ່ມີການ
ຄ່າໃຊ້ຈ່າຍໃນການຍົກຍ້າຍທີ່ເກີດຂື້ນໃນເວລາໂຫຼດຫ້ອງສະຫມຸດ.

ຢ່າງໃດກໍຕາມ, ຖ້າຫ້ອງສະຫມຸດຫຼືການປະຕິບັດຕົ້ນຕໍແມ່ນຄວນຈະຖິ້ມຫຼືຈັບຂໍ້ຍົກເວັ້ນ, ທ່ານ
ຕ້ອງເຊື່ອມຕໍ່ມັນໂດຍໃຊ້ G++ ຫຼື GCJ driver, ຕາມທີ່ເຫມາະສົມສໍາລັບພາສາທີ່ໃຊ້ໃນ
ໂຄງ​ການ​, ຫຼື​ການ​ນໍາ​ໃຊ້​ທາງ​ເລືອກ​ -shared-libgcc, ເຊັ່ນວ່າມັນຖືກເຊື່ອມໂຍງກັບການແບ່ງປັນ
libgcc.

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

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

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

-static-libubsan
ໃນ​ເວ​ລາ​ທີ່ -fsanitize=ບໍ່ໄດ້ກຳນົດ ທາງເລືອກແມ່ນໃຊ້ເພື່ອເຊື່ອມຕໍ່ໂຄງການ, ໄດເວີ GCC
ເຊື່ອມຕໍ່ອັດຕະໂນມັດຕໍ່ກັບ ລີບູຊານທີ່ຢູ່ ຖ້າຫາກວ່າ ລີບູຊານ ມີ​ໃຫ້​ເປັນ​ຫ້ອງ​ສະ​ຫມຸດ​ແບ່ງ​ປັນ​,
ແລະ -static ທາງ​ເລືອກ​ບໍ່​ໄດ້​ຖືກ​ນໍາ​ໃຊ້​, ຫຼັງ​ຈາກ​ນັ້ນ​ການ​ເຊື່ອມ​ຕໍ່​ກັບ​ສະ​ບັບ​ທີ່​ແບ່ງ​ປັນ​ຂອງ​
ລີບູຊານ. ໄດ້ -static-libubsan ທາງ​ເລືອກ​ຊີ້​ນໍາ​ຄົນ​ຂັບ GCC ການ​ເຊື່ອມ​ຕໍ່​ ລີບູຊານ
statically, ໂດຍບໍ່ຈໍາເປັນຕ້ອງເຊື່ອມຕໍ່ຫ້ອງສະຫມຸດອື່ນ statically.

-static-libmpx
ໃນ​ເວ​ລາ​ທີ່ -fcheck-pointer ຂອບເຂດ ແລະ -mmpx ທາງເລືອກແມ່ນໃຊ້ເພື່ອເຊື່ອມຕໍ່ໂຄງການ, GCC
ໄດເວີເຊື່ອມຕໍ່ອັດຕະໂນມັດຕໍ່ກັບ libmpxທີ່ຢູ່ ຖ້າຫາກວ່າ libmpx ສາມາດໃຊ້ໄດ້ເປັນການແບ່ງປັນ
ຫ້ອງສະຫມຸດ, ແລະ -static ທາງເລືອກບໍ່ໄດ້ຖືກນໍາໃຊ້, ຫຼັງຈາກນັ້ນການເຊື່ອມຕໍ່ນີ້ຕໍ່ກັບການແບ່ງປັນ
ສະບັບຂອງ libmpx. ໄດ້ -static-libmpx ທາງ​ເລືອກ​ຊີ້​ນໍາ​ຄົນ​ຂັບ GCC ການ​ເຊື່ອມ​ຕໍ່​ libmpx
statically, ໂດຍບໍ່ຈໍາເປັນຕ້ອງເຊື່ອມຕໍ່ຫ້ອງສະຫມຸດອື່ນ statically.

-static-libmpxwrappers
ໃນ​ເວ​ລາ​ທີ່ -fcheck-pointer ຂອບເຂດ ແລະ -mmpx ທາງເລືອກແມ່ນໃຊ້ເພື່ອເຊື່ອມຕໍ່ໂຄງການທີ່ບໍ່ມີ
ຍັງໃຊ້ -fno-chkp-use-wrappers, ໄດເວີ GCC ເຊື່ອມຕໍ່ອັດຕະໂນມັດຕໍ່ກັບ
libmpxwrappersທີ່ຢູ່ ຖ້າຫາກວ່າ libmpxwrappers ແມ່ນມີຢູ່ໃນຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນ, ແລະ -static
ທາງ​ເລືອກ​ບໍ່​ໄດ້​ຖືກ​ນໍາ​ໃຊ້​, ຫຼັງ​ຈາກ​ນັ້ນ​ການ​ເຊື່ອມ​ຕໍ່​ກັບ​ສະ​ບັບ​ທີ່​ແບ່ງ​ປັນ​ຂອງ​ libmpxwrappers. ໄດ້
-static-libmpxwrappers ທາງ​ເລືອກ​ຊີ້​ນໍາ​ຄົນ​ຂັບ GCC ການ​ເຊື່ອມ​ຕໍ່​ libmpxwrappers
statically, ໂດຍບໍ່ຈໍາເປັນຕ້ອງເຊື່ອມຕໍ່ຫ້ອງສະຫມຸດອື່ນ statically.

-static-libstdc++
ໃນ​ເວ​ລາ​ທີ່ g ++ ໂຄງ​ການ​ແມ່ນ​ນໍາ​ໃຊ້​ເພື່ອ​ເຊື່ອມ​ຕໍ່​ໂຄງ​ການ C ++​, ໂດຍ​ປົກ​ກະ​ຕິ​ມັນ​ຈະ​ເຊື່ອມ​ຕໍ່​ອັດ​ຕະ​ໂນ​ມັດ​
ຕໍ່ libstdc++ທີ່ຢູ່ ຖ້າຫາກວ່າ libstdc++ ແມ່ນມີຢູ່ໃນຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນ, ແລະ -static
ທາງ​ເລືອກ​ບໍ່​ໄດ້​ຖືກ​ນໍາ​ໃຊ້​, ຫຼັງ​ຈາກ​ນັ້ນ​ການ​ເຊື່ອມ​ຕໍ່​ກັບ​ສະ​ບັບ​ທີ່​ແບ່ງ​ປັນ​ຂອງ​ libstdc++. ນັ້ນ​ແມ່ນ
ປົກກະຕິດີ. ຢ່າງໃດກໍຕາມ, ບາງຄັ້ງມັນເປັນປະໂຫຍດທີ່ຈະ freeze ສະບັບຂອງ libstdc++
ໃຊ້ໂດຍໂຄງການໂດຍບໍ່ໄດ້ໄປຫາການເຊື່ອມຕໍ່ແບບຄົງທີ່ຢ່າງເຕັມສ່ວນ. ໄດ້
-static-libstdc++ ທາງ​ເລືອກ​ຊີ້​ນໍາ​ g ++ ຄົນຂັບເພື່ອເຊື່ອມຕໍ່ libstdc++ ສະຖິຕິ, ໂດຍບໍ່ມີການ
ຈໍາເປັນຕ້ອງເຊື່ອມຕໍ່ຫ້ອງສະຫມຸດອື່ນໆຢ່າງສະຖິດ.

- ສັນ​ຍາ​ລັກ​
ຜູກມັດການອ້າງອີງໃສ່ສັນຍາລັກທົ່ວໂລກເມື່ອສ້າງວັດຖຸທີ່ໃຊ້ຮ່ວມກັນ. ເຕືອນກ່ຽວກັບການໃດໆ
ການອ້າງອີງທີ່ບໍ່ໄດ້ຮັບການແກ້ໄຂ (ເວັ້ນເສຍແຕ່ຈະ 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 ຫຼາຍຄັ້ງທີ່ມີສັນຍາລັກທີ່ແຕກຕ່າງກັນເພື່ອບັງຄັບການໂຫຼດຂອງ
ໂມດູນຫ້ອງສະຫມຸດເພີ່ມເຕີມ.

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

ທາງເລືອກໃນການ ສໍາລັບການ 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 ທາງ​ເລືອກ​ແມ່ນ​ນໍາ​ໃຊ້​ກັບ​ໄຟລ​໌ header​.

ຕົວເຊື່ອມຕໍ່ GNU (ເລີ່ມຕົ້ນດ້ວຍສະບັບ 2.16) ມີການສະຫນັບສະຫນູນທີ່ຈໍາເປັນສໍາລັບການນີ້
ທາງເລືອກ. ຖ້າຕົວເຊື່ອມຕໍ່ຂອງເຈົ້າບໍ່ສະຫນັບສະຫນູນທາງເລືອກນີ້, ລັກສະນະຂອງໄຟລ໌ header ຂອງ
--sysroot ຍັງເຮັດວຽກ, ແຕ່ລັກສະນະຫ້ອງສະຫມຸດບໍ່ໄດ້.

--no-sysroot-suffix
ສໍາລັບບາງເປົ້າຫມາຍ, suffix ຈະຖືກເພີ່ມໃສ່ໄດເລກະທໍລີຮາກທີ່ລະບຸໄວ້ --sysroot,
ອີງຕາມທາງເລືອກອື່ນທີ່ໃຊ້, ດັ່ງນັ້ນສ່ວນຫົວອາດຈະພົບເຫັນຢູ່ໃນຕົວຢ່າງ
dir/suffix/usr/include ແທນ​ທີ່ dir/usr/ລວມ. ຕົວເລືອກນີ້ປິດການເພີ່ມເຕີມ
ຂອງ suffix ດັ່ງກ່າວ.

-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 ອື່ນໆໃນເວທີດຽວກັນ.

AAArch64 ທາງເລືອກໃນການ

ຕົວເລືອກເຫຼົ່ານີ້ຖືກກໍານົດໄວ້ສໍາລັບການຈັດຕັ້ງປະຕິບັດ AArch64:

-mabi=ຊື່
ສ້າງລະຫັດສໍາລັບຕົວແບບຂໍ້ມູນທີ່ກໍານົດໄວ້. ຄ່າທີ່ອະນຸຍາດແມ່ນ ilp32 ສໍາ​ລັບ SysV-
ຄືກັບຕົວແບບຂໍ້ມູນທີ່ int, long int ແລະ pointer ແມ່ນ 32-bit, ແລະ lp64 ສໍາລັບ SysV ຄ້າຍຄື
ຮູບແບບຂໍ້ມູນທີ່ int ແມ່ນ 32-bit, ແຕ່ int ແລະຕົວຊີ້ຍາວແມ່ນ 64-bit.

ຄ່າເລີ່ມຕົ້ນແມ່ນຂຶ້ນກັບການຕັ້ງຄ່າເປົ້າໝາຍສະເພາະ. ໃຫ້ສັງເກດວ່າ LP64 ແລະ
ILP32 ABIs ບໍ່ເຂົ້າກັນໄດ້ກັບການເຊື່ອມຕໍ່; ທ່ານຕ້ອງລວບລວມໂຄງການທັງຫມົດຂອງທ່ານດ້ວຍອັນດຽວກັນ
ABI, ແລະເຊື່ອມຕໍ່ກັບຊຸດຫ້ອງສະຫມຸດທີ່ເຂົ້າກັນໄດ້.

-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
ຕົວແປ

-mfix-cortex-a53-835769
-mno-fix-cortex-a53-835769
ເປີດຫຼືປິດການແກ້ໄຂບັນຫາສໍາລັບ ARM Cortex-A53 erratum ເລກ 835769. ນີ້
ກ່ຽວຂ້ອງກັບການໃສ່ຄໍາສັ່ງ NOP ລະຫວ່າງຄໍາແນະນໍາຫນ່ວຍຄວາມຈໍາແລະຈໍານວນ 64-bit
multiply-accumulate ຄໍາແນະນໍາ.

-mfix-cortex-a53-843419
-mno-fix-cortex-a53-843419
ເປີດຫຼືປິດການແກ້ໄຂບັນຫາສໍາລັບ ARM Cortex-A53 erratum ເລກ 843419. ນີ້
erratum workaround ແມ່ນເຮັດໃນເວລາທີ່ເຊື່ອມຕໍ່ແລະນີ້ພຽງແຕ່ຈະຜ່ານທຸງທີ່ສອດຄ້ອງກັນ
ກັບຕົວເຊື່ອມຕໍ່.

- ມີນາ=ຊື່
ລະບຸຊື່ຂອງສະຖາປັດຕະຍະກຳເປົ້າໝາຍ, ເລືອກຕໍ່ທ້າຍດ້ວຍໜຶ່ງ ຫຼືຫຼາຍກວ່ານັ້ນ
ຕົວແກ້ໄຂຄຸນສົມບັດ. ທາງເລືອກນີ້ມີແບບຟອມ - ມີນາ=ໂຄ້ງ{+[no]ຄຸນນະສົມບັດ}*, ບ່ອນທີ່
ຄ່າອະນຸຍາດພຽງແຕ່ສໍາລັບ ໂຄ້ງ is armv8-a. ຄ່າ​ທີ່​ອະ​ນຸ​ຍາດ​ໃຫ້​ສໍາ​ລັບ​ການ​ ຄຸນນະສົມບັດ ມີ
ເອກະສານຢູ່ໃນພາກຍ່ອຍຂ້າງລຸ່ມນີ້.

ບ່ອນທີ່ມີການລະບຸຕົວແກ້ໄຂຄຸນສົມບັດທີ່ຂັດແຍ້ງກັນ, ຄຸນສົມບັດທີ່ຖືກຕ້ອງທີ່ສຸດແມ່ນຖືກນໍາໃຊ້.

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

ບ່ອນທີ່ - ມີນາ ແມ່ນ​ລະ​ບຸ​ໄວ້​ໂດຍ​ບໍ່​ມີ​ການ​ທັງ​ຂອງ​ -mtune or -mcpu ຍັງຖືກລະບຸໄວ້, ໄດ້
ລະ​ຫັດ​ແມ່ນ tuned ເພື່ອ​ປະ​ຕິ​ບັດ​ໄດ້​ດີ​ໃນ​ທົ່ວ​ລະ​ດັບ​ຂອງ​ການ​ປະ​ຕິ​ບັດ​ເປົ້າ​ຫມາຍ​ການ​ປະ​ຕິ​ບັດ​
ສະຖາປັດຕະຍະກໍາເປົ້າຫມາຍ.

-mtune=ຊື່
ລະບຸຊື່ຂອງໂປເຊດເຊີເປົ້າໝາຍທີ່ GCC ຄວນປັບແຕ່ງປະສິດທິພາບ
ລະ​ຫັດ. ຄ່າທີ່ອະນຸຍາດສຳລັບຕົວເລືອກນີ້ແມ່ນ: generic, cortex-a53, cortex-a57,
cortex-a72, exynos-m1, ຟ້າຮ້ອງ, xgene1.

ນອກຈາກນັ້ນ, ທາງເລືອກນີ້ສາມາດລະບຸວ່າ GCC ຄວນປັບປະສິດທິພາບຂອງລະຫັດ
ສໍາລັບລະບົບ big.LITTLE. ຄ່າທີ່ອະນຸຍາດສຳລັບຕົວເລືອກນີ້ແມ່ນ:
cortex-a57.cortex-a53, cortex-a72.cortex-a53.

ບ່ອນທີ່ບໍ່ມີ -mtune=, -mcpu= or - ມີນາ= ຖືກລະບຸໄວ້, ລະຫັດຖືກປັບເພື່ອປະຕິບັດ
ດີໃນທົ່ວລະດັບຂອງໂປເຊດເຊີເປົ້າຫມາຍ.

ຕົວເລືອກນີ້ບໍ່ສາມາດຖືກຕໍ່ທ້າຍໂດຍຕົວປັບຄຸນສົມບັດ.

-mcpu=ຊື່
ລະບຸຊື່ຂອງໂປເຊດເຊີເປົ້າຫມາຍ, ທາງເລືອກ suffixed ໂດຍຫນຶ່ງຫຼືຫຼາຍຄຸນສົມບັດ
ຕົວແກ້ໄຂ. ທາງເລືອກນີ້ມີແບບຟອມ -mcpu=cpu{+[no]ຄຸນນະສົມບັດ}*, ບ່ອນທີ່ອະນຸຍາດ
ຄຸນຄ່າ ສຳ ລັບ cpu ແມ່ນຄືກັນກັບສິ່ງທີ່ມີຢູ່ -mtune.

ຄ່າ​ທີ່​ອະ​ນຸ​ຍາດ​ໃຫ້​ສໍາ​ລັບ​ການ​ ຄຸນນະສົມບັດ ໄດ້ຖືກບັນທຶກໄວ້ໃນພາກຍ່ອຍຂ້າງລຸ່ມນີ້.

ບ່ອນທີ່ມີການລະບຸຕົວແກ້ໄຂຄຸນສົມບັດທີ່ຂັດແຍ້ງກັນ, ຄຸນສົມບັດທີ່ຖືກຕ້ອງທີ່ສຸດແມ່ນຖືກນໍາໃຊ້.

GCC ໃຊ້ຊື່ນີ້ເພື່ອກໍານົດປະເພດຂອງຄໍາແນະນໍາທີ່ມັນສາມາດປ່ອຍອອກມາເມື່ອສ້າງ
ລະຫັດປະກອບ (ຄືກັບວ່າໂດຍ - ມີນາ) ແລະເພື່ອກໍານົດໂຮງງານຜະລິດເປົ້າຫມາຍທີ່ຈະ
tune ສໍາລັບການປະຕິບັດ (ເປັນຖ້າຫາກວ່າໂດຍ -mtune). ບ່ອນທີ່ທາງເລືອກນີ້ຖືກນໍາໃຊ້ໂດຍສົມທົບກັບ
- ມີນາ or -mtune, ທາງ​ເລືອກ​ເຫຼົ່າ​ນັ້ນ​ມີ​ອັນ​ດັບ​ຕົ້ນ​ໃນ​ພາກ​ສ່ວນ​ທີ່​ເຫມາະ​ສົມ​ຂອງ​ນີ້​
ທາງເລືອກ.

- ມີນາ ແລະ -mcpu ຕົວແກ້ໄຂຄຸນສົມບັດ

ຕົວແກ້ໄຂຄຸນສົມບັດທີ່ໃຊ້ກັບ - ມີນາ ແລະ -mcpu ສາ​ມາດ​ເປັນ​ຫນຶ່ງ​ດັ່ງ​ຕໍ່​ໄປ​ນີ້​:

crc ເປີດໃຊ້ສ່ວນຂະຫຍາຍ CRC.

crypto
ເປີດໃຊ້ການຂະຫຍາຍ Crypto. ນີ້ຫມາຍຄວາມວ່າ Advanced SIMD ຖືກເປີດໃຊ້.

fp ເປີດໃຊ້ຄໍາແນະນໍາຈຸດລອຍ.

ຊິມ
ເປີດໃຊ້ຄໍາແນະນໍາຂັ້ນສູງ SIMD. ນີ້ຫມາຍເຖິງຄໍາແນະນໍາທີ່ເລື່ອນໄດ້
ເປີດໃຊ້ງານ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນຂອງຄ່າທີ່ເປັນໄປໄດ້ທັງໝົດໃນປະຈຸບັນສຳລັບທາງເລືອກ - ມີນາ ແລະ
-mcpu=.

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-ໂທ
ຖ້າບໍ່ໄດ້ລະບຸໄວ້ເປັນຢ່າງອື່ນໂດຍຄຸນສົມບັດ, ສົມມຸດວ່າການໂທທັງໝົດອາດຈະເກີນ
ຂອບເຂດການຊົດເຊີຍຂອງຄໍາແນະນໍາ "b" / "bl", ແລະດັ່ງນັ້ນການໂຫຼດທີ່ຢູ່ຟັງຊັນ
ເຂົ້າໄປໃນທະບຽນກ່ອນທີ່ຈະດໍາເນີນການໂທຫາ (ຖ້າບໍ່ດັ່ງນັ້ນໂດຍກົງ). ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-mshort-ໂທ
ຖ້າບໍ່ໄດ້ລະບຸໄວ້ເປັນຢ່າງອື່ນໂດຍຄຸນລັກສະນະ, ສົມມຸດວ່າການໂທໂດຍກົງທັງຫມົດແມ່ນຢູ່ໃນຂອບເຂດ
ຂອງຄໍາແນະນໍາ "b" / "bl", ດັ່ງນັ້ນການນໍາໃຊ້ຄໍາແນະນໍາເຫຼົ່ານີ້ສໍາລັບການໂທຫາໂດຍກົງ. ໄດ້
ມາດຕະຖານແມ່ນ -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,
ເຊິ່ງລະບຸການນໍາໃຊ້ທະບຽນນັ້ນເປັນທະບຽນຄົງທີ່, ແລະ none, ຊຶ່ງຫມາຍຄວາມວ່າບໍ່ມີ
ການລົງທະບຽນແມ່ນໃຊ້ເພື່ອຈຸດປະສົງນີ້. ຄ່າເລີ່ມຕົ້ນແມ່ນ -m1reg-none.

ARC ທາງເລືອກໃນການ

ຕົວເລືອກຕໍ່ໄປນີ້ຄວບຄຸມຕົວແປຂອງສະຖາປັດຕະຍະກໍາສໍາລັບລະຫັດທີ່ກໍາລັງຖືກລວບລວມ:

-mbarrel-shifter
ສ້າງຄໍາແນະນໍາທີ່ສະຫນັບສະຫນູນໂດຍ barrel shifter. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນເວັ້ນເສຍແຕ່
-mcpu=ARC601 ແມ່ນຢູ່ໃນຜົນກະທົບ.

-mcpu=cpu
ກໍາ​ນົດ​ປະ​ເພດ​ສະ​ຖາ​ປັດ​ຕະ​, ລົງ​ທະ​ບຽນ​ການ​ນໍາ​ໃຊ້​, ແລະ​ການ​ກໍາ​ນົດ​ເວ​ລາ​ຄໍາ​ແນະ​ນໍາ​ການ​ກໍາ​ນົດ​ເວ​ລາ​ສໍາ​ລັບ​ການ​ cpu.
ຍັງມີທາງເລືອກທາງລັດ alias ທີ່ມີຢູ່ສໍາລັບການເຂົ້າກັນໄດ້ກັບຄືນໄປບ່ອນແລະ
ຄວາມສະດວກສະບາຍ. ຄຸນ​ຄ່າ​ສະ​ຫນັບ​ສະ​ຫນູນ​ສໍາ​ລັບ​ການ​ cpu ມີ

ARC600
ລວບລວມສໍາລັບ ARC600. ນາມແຝງ: -mA6, -mARC600.

ARC601
ລວບລວມສໍາລັບ ARC601. ນາມແຝງ: -mARC601.

ARC700
ລວບລວມສໍາລັບ ARC700. ນາມແຝງ: -mA7, -mARC700. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນເມື່ອຖືກຕັ້ງຄ່າ
ກັບ --with-cpu=arc700.

-mdpfp
-mdpfp-ກະທັດຮັດ
FPX: ສ້າງຄໍາແນະນໍາ FPX ຄວາມແມ່ນຍໍາສອງເທົ່າ, ປັບແຕ່ງການຈັດຕັ້ງປະຕິບັດທີ່ຫນາແຫນ້ນ.

-mdpfp-ໄວ
FPX: ສ້າງຄໍາແນະນໍາ FPX ຄວາມແມ່ນຍໍາສອງເທົ່າ, ໄດ້ຮັບການປັບປຸງໃຫ້ມີປະສິດທິພາບໄວ.

-mno-dpfp-lrsr
ປິດການໃຊ້ງານຄໍາແນະນໍາ LR ແລະ SR ຈາກການໃຊ້ FPX extension aux registers.

- ເມ
ສ້າງຄໍາແນະນໍາເລກຄະນິດແບບຂະຫຍາຍ. ໃນປັດຈຸບັນມີພຽງແຕ່ "divaw", "ເພີ່ມ", "subs",
ແລະ "sat16" ໄດ້ຮັບການສະຫນັບສະຫນູນ. ອັນນີ້ຖືກເປີດໃຊ້ສະເໝີສຳລັບ -mcpu=ARC700.

-mno-mpy
ຢ່າສ້າງຄໍາແນະນໍາ mpy ສໍາລັບ ARC700.

- mmul32x16
ສ້າງ 32x16 bit multiply ແລະຄໍາແນະນໍາ mac.

-mmul64
ສ້າງຄໍາແນະນໍາ mul64 ແລະ mulu64. ໃຊ້ໄດ້ພຽງແຕ່ສໍາລັບ -mcpu=ARC600.

-mnorm
ສ້າງຄໍາແນະນໍາມາດຕະຖານ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນຖ້າ -mcpu=ARC700 ແມ່ນຢູ່ໃນຜົນກະທົບ.

-mspfp
-mspfp-ກະທັດຮັດ
FPX: ສ້າງຄໍາແນະນໍາ FPX ຄວາມແມ່ນຍໍາດຽວ, tuned ສໍາລັບການປະຕິບັດທີ່ຫນາແຫນ້ນ.

-mspfp-ໄວ
FPX: ສ້າງຄໍາແນະນໍາ FPX ຄວາມແມ່ນຍໍາດຽວ, tuned ສໍາລັບການປະຕິບັດໄວ.

-msimd
ເປີດໃຊ້ການສ້າງຄໍາແນະນໍາ ARC SIMD ຜ່ານຕົວສ້າງສະເພາະເປົ້າໝາຍ. ຖືກຕ້ອງເທົ່ານັ້ນ
ສໍາລັບການ -mcpu=ARC700.

-msoft-float
ຕົວເລືອກນີ້ຖືກລະເລີຍ; ມັນຖືກສະຫນອງໃຫ້ເພື່ອຈຸດປະສົງຄວາມເຂົ້າກັນໄດ້ເທົ່ານັ້ນ. ຊອບແວ
ລະຫັດຈຸດລອຍແມ່ນປ່ອຍອອກມາໂດຍຄ່າເລີ່ມຕົ້ນ, ແລະຄ່າເລີ່ມຕົ້ນນີ້ສາມາດ overridden ໂດຍ FPX
ທາງເລືອກ; mspfp, mspfp-ກະທັດຮັດ, ຫຼື mspfp-ໄວ ສໍາລັບຄວາມແມ່ນຍໍາດຽວ, ແລະ mdpfp, mdpfp-
ຫນາແຫນ້ນ, ຫຼື mdpfp-ໄວ ສໍາລັບຄວາມແມ່ນຍໍາສອງເທົ່າ.

-mswap
ສ້າງຄໍາແນະນໍາສະຫຼັບ.

ທາງ​ເລືອກ​ດັ່ງ​ຕໍ່​ໄປ​ນີ້​ແມ່ນ​ໄດ້​ຮັບ​ການ​ຜ່ານ​ການ​ປະ​ກອບ​, ແລະ​ຍັງ​ກໍາ​ນົດ preprocessor​
ສັນຍາລັກມະຫາພາກ.

-mdsp-packa
ຜ່ານລົງໄປຫາຕົວປະກອບເພື່ອເປີດໃຊ້ສ່ວນຂະຫຍາຍ DSP Pack A. ຍັງໄດ້ກໍານົດ
ສັນຍາລັກຕົວປະມວນຜົນ "__Xdsp_packa".

-mdvbf
ຜ່ານລົງໄປຫາຕົວປະກອບເພື່ອເປີດໃຊ້ການຂະຫຍາຍ butterfly ສອງ viterbi. ນອກຈາກນີ້
ກໍານົດສັນຍາລັກ preprocessor "__Xdvbf".

- mlock
ຜ່ານລົງໄປຫາຕົວປະກອບເພື່ອເປີດໃຊ້ສ່ວນຂະຫຍາຍເງື່ອນໄຂການໂຫຼດ/ຮ້ານທີ່ຖືກລັອກ.
ນອກຈາກນີ້ຍັງກໍານົດສັນຍາລັກ preprocessor "__Xlock".

-mmac-d16
ຖ່າຍທອດລົງໄປຫາຜູ້ປະກອບ. ນອກຈາກນີ້ຍັງກໍານົດສັນຍາລັກ preprocessor "__Xxmac_d16".

-mmac-24
ຖ່າຍທອດລົງໄປຫາຜູ້ປະກອບ. ນອກຈາກນີ້ຍັງກໍານົດສັນຍາລັກ preprocessor "__Xxmac_24".

-mrtsc
ຜ່ານລົງໄປຫາຕົວປະກອບເພື່ອເປີດໃຊ້ການຂະຫຍາຍເວລາ 64-bit
ຄໍາແນະນໍາ. ນອກຈາກນີ້ຍັງກໍານົດສັນຍາລັກ preprocessor "__Xrtsc".

-mswpe
ຖືກສົ່ງໄປຫາຕົວປະກອບເພື່ອເປີດໃຊ້ຄໍາແນະນໍາການຂະຫຍາຍການສັ່ງຊື້ swap byte.
ນອກຈາກນີ້ຍັງກໍານົດສັນຍາລັກ preprocessor "__Xswape".

- ໂທ​ລະ​ສັບ
ຜ່ານລົງໄປຫາຜູ້ປະກອບເພື່ອໃຫ້ສາມາດຄໍາແນະນໍາ operand ຄູ່ແລະດຽວສໍາລັບ
ໂທລະສັບ. ຍັງຕັ້ງສັນຍາລັກ preprocessor "__Xtelephony".

-mxy
ຜ່ານລົງໄປຫາຕົວປະກອບເພື່ອເປີດໃຊ້ສ່ວນຂະຫຍາຍ XY Memory. ຍັງໄດ້ກໍານົດ
ສັນຍາລັກຕົວປະມວນຜົນ "__Xxy".

ຕົວເລືອກຕໍ່ໄປນີ້ຄວບຄຸມວິທີການປະກອບລະຫັດປະກອບ:

- misize
ອະທິບາຍຄໍາແນະນໍາຜູ້ປະກອບດ້ວຍທີ່ຢູ່ໂດຍປະມານ.

-mannotate-align
ອະທິບາຍວ່າການພິຈາລະນາການຈັດວາງອັນໃດນໍາໄປສູ່ການຕັດສິນໃຈເຮັດຄໍາແນະນໍາ
ສັ້ນ ຫຼື ຍາວ.

ທາງເລືອກຕໍ່ໄປນີ້ແມ່ນຜ່ານໄປຫາຕົວເຊື່ອມຕໍ່:

-marclinux
ຜ່ານໄປຫາຕົວເຊື່ອມຕໍ່, ເພື່ອກໍານົດການນໍາໃຊ້ "arclinux" emulation. ທາງເລືອກນີ້
ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນໃນຕ່ອງໂສ້ເຄື່ອງມືທີ່ສ້າງຂຶ້ນສໍາລັບ "arc-linux-uclibc" ແລະ
"arceb-linux-uclibc" ເປົ້າຫມາຍໃນເວລາທີ່ profileing ບໍ່ໄດ້ຖືກຮ້ອງຂໍ.

-marclinux_prof
ຜ່ານໄປຫາຕົວເຊື່ອມຕໍ່, ເພື່ອລະບຸການໃຊ້ "arclinux_prof" emulation. ນີ້
ທາງເລືອກແມ່ນຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນໃນລະບົບຕ່ອງໂສ້ເຄື່ອງມືທີ່ສ້າງຂຶ້ນສໍາລັບ "arc-linux-uclibc" ແລະ
"arceb-linux-uclibc" ເປົ້າຫມາຍໃນເວລາທີ່ profileing ຖືກຮ້ອງຂໍ.

ຕົວເລືອກຕໍ່ໄປນີ້ຄວບຄຸມ semantics ຂອງລະຫັດທີ່ສ້າງຂຶ້ນ:

-mepilogue-cfi
ເປີດໃຊ້ການສ້າງຂໍ້ມູນກອບການໂທສໍາລັບບົດສະຫຼຸບ.

-mno-epilogue-cfi
ປິດການນຳໃຊ້ການສ້າງຂໍ້ມູນກອບການໂທສຳລັບບົດເລື່ອງ.

-mlong-ໂທ
ສ້າງການໂທ insns ເປັນລົງທະບຽນການໂທທາງອ້ອມ, ດັ່ງນັ້ນການສະຫນອງການເຂົ້າເຖິງຢ່າງເຕັມທີ່
ໄລຍະທີ່ຢູ່ 32-ບິດ.

-ໂທປານກາງ
ຢ່າໃຊ້ໄລຍະທີ່ຢູ່ໜ້ອຍກວ່າ 25 bit ສໍາລັບການໂທ, ເຊິ່ງເປັນຄ່າຊົດເຊີຍທີ່ມີຢູ່
ສໍາລັບຄໍາແນະນໍາສາຂາແລະການເຊື່ອມໂຍງທີ່ບໍ່ມີເງື່ອນໄຂ. ການປະຕິບັດຫນ້າທີ່ຕາມເງື່ອນໄຂ
ການໂທຖືກສະກັດກັ້ນ, ເພື່ອອະນຸຍາດໃຫ້ໃຊ້ຊ່ວງ 25-ບິດ, ແທນທີ່ຈະເປັນຊ່ວງ 21-ບິດ
ກັບສາຂາແລະການເຊື່ອມໂຍງທີ່ມີເງື່ອນໄຂ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນຂອງຕ່ອງໂສ້ເຄື່ອງມືທີ່ສ້າງຂຶ້ນສໍາລັບ
ເປົ້າໝາຍ "arc-linux-uclibc" ແລະ "arceb-linux-uclibc".

-mno-sdata
ຢ່າສ້າງການອ້າງອີງ sdata. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນຂອງຕ່ອງໂສ້ເຄື່ອງມືທີ່ສ້າງຂຶ້ນສໍາລັບ
ເປົ້າໝາຍ "arc-linux-uclibc" ແລະ "arceb-linux-uclibc".

-mucb-mcount
ເຄື່ອງມືທີ່ມີການໂທ mcount ຕາມທີ່ໃຊ້ໃນລະຫັດ UCB. ຄື​ເຮັດ​ການ​ນັບ​ໃນ callee ໄດ້​,
ບໍ່ແມ່ນຜູ້ໂທ. ຕາມຄ່າເລີ່ມຕົ້ນຂອງເຄື່ອງມື ARC ຈະນັບຢູ່ໃນຜູ້ໂທ.

-mvolatile-cache
ໃຊ້ການເຂົ້າເຖິງຄວາມຊົງຈໍາທີ່ເກັບໄວ້ໃນຖານຄວາມຈໍາແບບປົກກະຕິສໍາລັບການອ້າງອີງທີ່ປ່ຽນແປງໄດ້. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-mno-volatile-cache
ເປີດໃຊ້ cache bypass ສໍາລັບການອ້າງອີງທີ່ປ່ຽນແປງໄດ້.

ທາງ​ເລືອກ​ດັ່ງ​ຕໍ່​ໄປ​ນີ້​ປັບ​ແຕ່ງ​ລະ​ຫັດ​ປັບ​ແຕ່ງ​:

-malign-ໂທ
ເຮັດການເພີ່ມປະສິດທິພາບການຈັດຕໍາແຫນ່ງສໍາລັບຄໍາແນະນໍາການໂທ.

-mauto-modify-reg
ເປີດການນຳໃຊ້ການດັດແກ້ກ່ອນ/ຫຼັງດ້ວຍການຍ້າຍການລົງທະບຽນ.

-mbbit-peephole
ເປີດໃຊ້ bbit Peephole2.

-mno-brcc
ຕົວເລືອກນີ້ປິດການນຳໃຊ້ການຜ່ານສະເພາະເປົ້າໝາຍ arc_reorg ເພື່ອສ້າງ "BRcc"
ຄໍາແນະນໍາ. ມັນບໍ່ມີຜົນຕໍ່ການຜະລິດ "BRcc" ທີ່ຖືກຂັບເຄື່ອນໂດຍບັດລວມ.

-mcase-vector-pcrel
ໃຊ້ຕາຕະລາງກໍລະນີສະຫຼັບ pc-relative - ນີ້ເຮັດໃຫ້ຕາຕະລາງກໍລະນີສັ້ນລົງ. ນີ້​ແມ່ນ
ຄ່າເລີ່ມຕົ້ນສໍາລັບ -ອສ.

-mcompact-casesi
ເປີດໃຊ້ຮູບແບບກະທັດຮັດ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນຂອງ -ອສ.

-mno-cond-exec
ປິດການໃຊ້ບັດຜ່ານສະເພາະ ARCompact ເພື່ອສ້າງຄໍາແນະນໍາການປະຕິບັດຕາມເງື່ອນໄຂ. ຮອດກຳນົດ
ເພື່ອຊັກຊ້າການກໍານົດເວລາຂອງຊ່ອງແລະການໂຕ້ຕອບລະຫວ່າງຕົວເລກ operand, ຂະຫນາດຕົວຫນັງສື,
ຄວາມ​ຍາວ​ຂອງ​ຄໍາ​ສັ່ງ​, ແລະ​ການ​ສະ​ຫນັບ​ສະ​ຫນູນ​ສໍາ​ລັບ​ການ​ປະ​ຕິ​ບັດ​ຕາມ​ເງື່ອນ​ໄຂ​, ເປົ້າ​ຫມາຍ​ທີ່​ເປັນ​ເອ​ກະ​ລາດ​
pass ເພື່ອສ້າງການປະຕິບັດຕາມເງື່ອນໄຂມັກຈະຂາດ, ດັ່ງນັ້ນພອດ ARC ໄດ້ເກັບຮັກສາໄວ້
pass ພິເສດປະມານທີ່ພະຍາຍາມຊອກຫາການປະຕິບັດເງື່ອນໄຂເພີ່ມເຕີມສ້າງ
ໂອກາດຫຼັງຈາກການຈັດສັນການລົງທະບຽນ, ການຫຼຸດສາຂາ, ແລະການຈັດຕາຕະລາງການຊັກຊ້າ
ໄດ້ເຮັດແລ້ວ. ຜ່ານນີ້ໂດຍທົ່ວໄປ, ແຕ່ບໍ່ແມ່ນສະເຫມີໄປ, ປັບປຸງການປະຕິບັດແລະລະຫັດ
ຂະ​ຫນາດ​, ໃນ​ຄ່າ​ໃຊ້​ຈ່າຍ​ຂອງ​ການ​ທີ່​ໃຊ້​ເວ​ລາ​ການ​ລວບ​ລວມ​ພິ​ເສດ​, ຊຶ່ງ​ເປັນ​ຫຍັງ​ຈຶ່ງ​ມີ​ທາງ​ເລືອກ​ທີ່​ຈະ​ສະ​ຫຼັບ​
ມັນປິດ. ຖ້າທ່ານມີບັນຫາກັບຄໍາແນະນໍາການໂທເກີນການຊົດເຊີຍທີ່ອະນຸຍາດ
ຊ່ວງຍ້ອນວ່າພວກມັນຖືກປັບຕາມເງື່ອນໄຂ, ທ່ານຄວນພິຈາລະນາໃຊ້ -ໂທປານກາງ
ແທນທີ່ຈະເປັນ.

-mearly-cbranchsi
ເປີດໃຊ້ການໂຫຼດໃໝ່ກ່ອນການໃຊ້ຮູບແບບ cbranchsi.

-mexpand-adddi
ຂະຫຍາຍ "adddi3" ແລະ "subdi3" ໃນເວລາການຜະລິດ rtl ເຂົ້າໄປໃນ "add.f", "adc" ແລະອື່ນໆ.

-mindexed-loads
ເປີດການນຳໃຊ້ການໂຫຼດທີ່ຖືກດັດສະນີ. ນີ້ອາດຈະເປັນບັນຫາເພາະວ່າບາງ optimizers ຫຼັງຈາກນັ້ນ
ສົມມຸດວ່າຮ້ານຄ້າທີ່ຖືກດັດສະນີມີຢູ່, ເຊິ່ງບໍ່ແມ່ນກໍລະນີ.

-mlra
ເປີດໃຊ້ການຈັດສັນການລົງທະບຽນທ້ອງຖິ່ນ. ນີ້ຍັງເປັນການທົດລອງສໍາລັບ ARC, ດັ່ງນັ້ນໂດຍຄ່າເລີ່ມຕົ້ນ
compiler ໃຊ້ມາດຕະຖານ reload (ie -mno-lra).

-mlra-priority-none
ຢ່າຊີ້ບອກບູລິມະສິດໃດໆສໍາລັບການລົງທະບຽນເປົ້າຫມາຍ.

-mlra-priority-compact
ຊີ້ໃຫ້ເຫັນບູລິມະສິດລົງທະບຽນເປົ້າຫມາຍສໍາລັບ r0..r3 / r12..r15.

-mlra-priority-noncompact
ຫຼຸດຜ່ອນຄວາມສໍາຄັນ regsiter ເປົ້າຫມາຍສໍາລັບ r0..r3 / r12..r15.

-mno-millicode
ໃນເວລາທີ່ optimizing ສໍາລັບຂະຫນາດ (ການນໍາໃຊ້ -ອສ), prologues ແລະ epilogues ທີ່ມີເພື່ອຊ່ວຍປະຢັດຫຼື
ຟື້ນຟູການລົງທະບຽນຈໍານວນຫຼວງຫຼາຍມັກຈະສັ້ນລົງໂດຍໃຊ້ການໂທໄປຫາພິເສດ
ຟັງຊັນໃນ libgcc; ອັນນີ້ເອີ້ນວ່າເປັນ ມິນລິໂຄດ ໂທ. ຍ້ອນວ່າການໂທເຫຼົ່ານີ້ສາມາດສ້າງ
ບັນຫາການປະຕິບັດ, ແລະ / ຫຼືເຮັດໃຫ້ເກີດບັນຫາການເຊື່ອມໂຍງໃນເວລາທີ່ການເຊື່ອມໂຍງໃນທາງທີ່ບໍ່ໄດ້ມາດຕະຖານ,
ທາງເລືອກນີ້ແມ່ນສະຫນອງໃຫ້ເພື່ອປິດການຜະລິດການໂທ millicode.

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

-mq-ຊັ້ນ
ເປີດໃຊ້ທາງເລືອກການສອນ 'q'. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນຂອງ -ອສ.

-mRcq
ເປີດໃຊ້ການຈັດການຂໍ້ຈໍາກັດ Rcq - ການສ້າງລະຫັດສັ້ນສ່ວນຫຼາຍແມ່ນຂຶ້ນກັບນີ້. ນີ້​ແມ່ນ
ຄ່າເລີ່ມຕົ້ນ.

-mRcw
ເປີດໃຊ້ການຈັດການຂໍ້ຈໍາກັດ Rcw - ccfsm condexec ສ່ວນໃຫຍ່ແມ່ນຂຶ້ນກັບນີ້. ນີ້​ແມ່ນ
Default

-msize-level=ລະດັບ
ການປັບແຕ່ງຂະໜາດລະອຽດກ່ຽວກັບຄວາມຍາວຂອງຄຳແນະນຳ ແລະການຈັດຮຽງ. ໄດ້
ຄຸນ​ຄ່າ​ທີ່​ຮັບ​ຮູ້​ສໍາ​ລັບ​ການ​ ລະດັບ ແມ່ນ:

0 ບໍ່ມີການເພີ່ມປະສິດທິພາບຂະຫນາດ. ລະດັບນີ້ຖືກປະຕິເສດ ແລະຖືກປະຕິບັດຄື 1.

1 ຄໍາແນະນໍາສັ້ນຖືກນໍາໃຊ້ໃນໂອກາດ.

2 ນອກຈາກນັ້ນ, ການສອດຄ່ອງຂອງ loops ແລະຂອງລະຫັດຫຼັງຈາກອຸປະສັກຖືກຫຼຸດລົງ.

3 ນອກຈາກນັ້ນ, ການຈັດລໍາດັບຂໍ້ມູນທາງເລືອກແມ່ນຫຼຸດລົງ, ແລະທາງເລືອກ Os ເປີດໃຊ້ງານ.

ນີ້ເປັນຄ່າເລີ່ມຕົ້ນທີ່ຈະ 3 ໃນເວລາທີ່ -ອສ ມີຜົນບັງຄັບໃຊ້. ຖ້າບໍ່ດັ່ງນັ້ນ, ພຶດຕິກໍາໃນເວລາທີ່ນີ້ບໍ່ແມ່ນ
ທີ່ກໍານົດໄວ້ເທົ່າກັບລະດັບ 1.

-mtune=cpu
ກໍານົດຕົວກໍານົດການກໍານົດເວລາຄໍາແນະນໍາສໍາລັບ cpu, overriding ໃດໆ implied ໂດຍ -mcpu=.

ຄຸນ​ຄ່າ​ສະ​ຫນັບ​ສະ​ຫນູນ​ສໍາ​ລັບ​ການ​ cpu ມີ

ARC600
ປັບສໍາລັບ ARC600 cpu.

ARC601
ປັບສໍາລັບ ARC601 cpu.

ARC700
ປບັສຳລັບ ARC700 cpu ດ້ວຍຕົວຄູນມາດຕະຖານ.

ARC700-xmac
ປັບສໍາລັບ ARC700 cpu ກັບ XMAC block.

ARC725D
ປັບແຕ່ງ CPU ARC725D.

ARC750D
ປັບແຕ່ງ CPU ARC750D.

-mmultcost=num
ຄ່າ​ໃຊ້​ຈ່າຍ​ໃນ​ການ​ສົມ​ມຸດ​ວ່າ​ສໍາ​ລັບ​ຄໍາ​ແນະ​ນໍາ​ທີ່​ຄູນ​, ມີ​ 4 ເທົ່າກັບຄໍາແນະນໍາປົກກະຕິ.

-munalign-prob-threshold=ການຄາດຄະເນ
ກໍານົດຂອບເຂດຄວາມເປັນໄປໄດ້ສໍາລັບສາຂາທີ່ບໍ່ສອດຄ່ອງກັນ. ໃນເວລາທີ່ tuning ສໍາລັບ ARC700 ແລະ
ການເພີ່ມປະສິດທິພາບສໍາລັບຄວາມໄວ, ສາຂາທີ່ບໍ່ມີຊ່ອງຫວ່າງທີ່ເຕັມໄປດ້ວຍຄວາມລ່າຊ້າແມ່ນຖືກປ່ອຍອອກມາ
unaligned ແລະຍາວ, ເວັ້ນເສຍແຕ່ profileing ຊີ້ໃຫ້ເຫັນວ່າຄວາມເປັນໄປໄດ້ສໍາລັບສາຂາທີ່ຈະ
ໄດ້​ຮັບ​ການ​ປະ​ຕິ​ບັດ​ແມ່ນ​ຂ້າງ​ລຸ່ມ​ນີ້​ ການຄາດຄະເນ. ຄ່າເລີ່ມຕົ້ນແມ່ນ (REG_BR_PROB_BASE/2), ເຊັ່ນ: 5000.

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

- margonaut
FPX ລ້າສະໄຫມ.

-mbig-endian
-EB ລວບລວມລະຫັດສໍາລັບເປົ້າຫມາຍ endian ໃຫຍ່. ຕອນນີ້ເຊົາໃຊ້ຕົວເລືອກເຫຼົ່ານີ້ແລ້ວ. ຜູ້ໃຊ້
ຕ້ອງການລະຫັດ big-endian, ຄວນໃຊ້ເປົ້າຫມາຍ "arceb-elf32" ແລະ "arceb-linux-uclibc"
ເມື່ອສ້າງລະບົບຕ່ອງໂສ້ເຄື່ອງມື, ເຊິ່ງ big-endian ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-mlittle-endian
- THE ລວບລວມລະຫັດສໍາລັບເປົ້າຫມາຍ endian ນ້ອຍ. ຕອນນີ້ເຊົາໃຊ້ຕົວເລືອກເຫຼົ່ານີ້ແລ້ວ.
ຜູ້ໃຊ້ທີ່ຕ້ອງການລະຫັດ little-endian ຄວນໃຊ້ "arc-elf32" ແລະ "arc-linux-uclibc"
ເປົ້າຫມາຍໃນເວລາທີ່ການກໍ່ສ້າງລະບົບຕ່ອງໂສ້ເຄື່ອງມື, ສໍາລັບທີ່ little-endian ເປັນຄ່າເລີ່ມຕົ້ນ.

-mbarrel_shifter
ປ່ຽນແທນໂດຍ -mbarrel-shifter.

-mdpfp_compact
ປ່ຽນແທນໂດຍ -mdpfp-ກະທັດຮັດ.

-mdpfp_fast
ປ່ຽນແທນໂດຍ -mdpfp-ໄວ.

-mdsp_packa
ປ່ຽນແທນໂດຍ -mdsp-packa.

-mEA
ປ່ຽນແທນໂດຍ - ເມ.

-mmac_24
ປ່ຽນແທນໂດຍ -mmac-24.

-mmac_d16
ປ່ຽນແທນໂດຍ -mmac-d16.

-mspfp_compact
ປ່ຽນແທນໂດຍ -mspfp-ກະທັດຮັດ.

-mspfp_fast
ປ່ຽນແທນໂດຍ -mspfp-ໄວ.

-mtune=cpu
ມູນຄ່າ ໂຄ້ງ 600, ໂຄ້ງ 601, ໂຄ້ງ 700 ແລະ arc700-xmac ສໍາລັບການ cpu ຖືກແທນທີ່ດ້ວຍ ARC600, ARC601,
ARC700 ແລະ ARC700-xmac ຕາມ ລຳ ດັບ

-multcost=num
ປ່ຽນແທນໂດຍ -mmultcost.

ARM ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ -m ທາງເລືອກແມ່ນຖືກກໍານົດສໍາລັບພອດ 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 ຫນ້າທີ່, ຫຼືການລວມຕົວຂອງ
ຄໍາແນະນໍາເຫຼົ່ານັ້ນກັບຄໍາແນະນໍາຢູ່ໃນຮ່າງກາຍຂອງຫນ້າທີ່. ນີ້ຫມາຍຄວາມວ່າທັງຫມົດ
ຫນ້າທີ່ເລີ່ມຕົ້ນດ້ວຍຊຸດຄໍາແນະນໍາທີ່ສາມາດຮັບຮູ້ໄດ້ (ຫຼືໃນຄວາມເປັນຈິງທາງເລືອກຫນຶ່ງ
ຈາກຊຸດຂະຫນາດນ້ອຍຂອງ prologues ຫນ້າທີ່ທີ່ແຕກຕ່າງກັນ), ແລະຂໍ້ມູນນີ້ສາມາດຖືກນໍາໃຊ້ເພື່ອ
ຊອກຫາຈຸດເລີ່ມຕົ້ນຂອງຫນ້າທີ່ພາຍໃນລະຫັດທີ່ສາມາດປະຕິບັດໄດ້. ຄ່າເລີ່ມຕົ້ນແມ່ນ
-msched-prolog.

-mfloat-abi=ຊື່
ລະບຸວ່າຈະໃຊ້ ABI ຈຸດໃດ. ຄ່າທີ່ອະນຸຍາດແມ່ນ: ອ່ອນໆ, softfp ແລະ
ຍາກ.

ການລະບຸ ອ່ອນໆ ເຮັດໃຫ້ GCC ຜະລິດຜົນຜະລິດທີ່ມີຫ້ອງສະຫມຸດໂທຫາສໍາລັບການເລື່ອນ
ການ​ດໍາ​ເນີນ​ງານ​ຈຸດ​. softfp ອະ​ນຸ​ຍາດ​ໃຫ້​ການ​ຜະ​ລິດ​ຂອງ​ລະ​ຫັດ​ການ​ນໍາ​ໃຊ້​ຮາດ​ແວ Floating-point​
ຄໍາແນະນໍາ, ແຕ່ຍັງຄົງໃຊ້ສົນທິສັນຍາການໂທແບບເລື່ອນໄດ້. ຍາກ ອະນຸຍາດໃຫ້
ການຜະລິດຄໍາແນະນໍາຈຸດລອຍແລະນໍາໃຊ້ສົນທິສັນຍາການໂທຫາສະເພາະ FPU.

ຄ່າເລີ່ມຕົ້ນແມ່ນຂຶ້ນກັບການຕັ້ງຄ່າເປົ້າໝາຍສະເພາະ. ໃຫ້ສັງເກດວ່າແຂງ-ເລື່ອນໄດ້
ແລະ Soft-float ABIs ບໍ່ເຂົ້າກັນໄດ້ກັບການເຊື່ອມຕໍ່; ທ່ານຕ້ອງລວບລວມໂຄງການທັງຫມົດຂອງທ່ານກັບ
ABI ດຽວກັນ, ແລະເຊື່ອມຕໍ່ກັບຊຸດຫ້ອງສະຫມຸດທີ່ເຂົ້າກັນໄດ້.

-mlittle-endian
ສ້າງລະຫັດສໍາລັບໂປເຊດເຊີທີ່ເຮັດວຽກຢູ່ໃນໂຫມດ little-endian. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນຂອງ
ການ​ຕັ້ງ​ຄ່າ​ມາດ​ຕະ​ຖານ​ທັງ​ຫມົດ​.

-mbig-endian
ສ້າງລະຫັດສໍາລັບໂປເຊດເຊີທີ່ເຮັດວຽກຢູ່ໃນໂຫມດ big-endian; ຄ່າເລີ່ມຕົ້ນແມ່ນການລວບລວມ
ລະຫັດສໍາລັບໂປເຊດເຊີພຽງເລັກນ້ອຍ endian.

- ມີນາ=ຊື່
ອັນນີ້ລະບຸຊື່ຂອງສະຖາປັດຕະຍະກຳ 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, armv7ve, armv8-a, armv8-a+crc, iwmmxt, iwmmxt2, ep9312.

-march=armv7ve ແມ່ນ armv7-a ສະຖາປັດຕະຍະກໍາທີ່ມີການຂະຫຍາຍ virtualization.

-march=armv8-a+crc ເປີດໃຊ້ການສ້າງລະຫັດສໍາລັບສະຖາປັດຕະຍະກໍາ ARMv8-A ຮ່ວມກັບ
ສ່ວນຂະຫຍາຍ CRC32 ທາງເລືອກ.

-march=native ເຮັດໃຫ້ compiler ກວດພົບອັດຕະໂນມັດສະຖາປັດຕະຍະກໍາຂອງການກໍ່ສ້າງ
ຄອມ​ພິວ​ເຕີ. ໃນປັດຈຸບັນ, ຄຸນນະສົມບັດນີ້ແມ່ນສະຫນັບສະຫນູນພຽງແຕ່ໃນ GNU / 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-a12, cortex-a15, cortex-a53, cortex-a57, cortex-a72, cortex-r4, cortex-r4f,
cortex-r5, cortex-r7, cortex-m7, cortex-m4, cortex-m3, cortex-m1, cortex-m0,
cortex-m0plus, cortex-m1.small-multiply, cortex-m0.small-multiply,
cortex-m0plus.small-multiply, exynos-m1, marvell-pj4, xscale, iwmmxt, iwmmxt2, ep9312,
fa526, fa626, fa606te, fa626te, fmp626, fa726te, xgene1.

ນອກຈາກນັ້ນ, ທາງເລືອກນີ້ສາມາດລະບຸວ່າ GCC ຄວນປັບປະສິດທິພາບຂອງລະຫັດ
ສໍາລັບລະບົບ big.LITTLE. ຊື່ທີ່ອະນຸຍາດແມ່ນ: cortex-a15.cortex-a7,
cortex-a57.cortex-a53, cortex-a72.cortex-a53.

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

-mtune=native ເຮັດໃຫ້ compiler ກວດພົບ CPU ຂອງຄອມພິວເຕີສ້າງໂດຍອັດຕະໂນມັດ. ທີ່
ປະຈຸບັນ, ຄຸນສົມບັດນີ້ຮອງຮັບສະເພາະໃນ GNU/Linux, ແລະບໍ່ແມ່ນສະຖາປັດຕະຍະກຳທັງໝົດ
ຮັບຮູ້. ຖ້າການກວດສອບອັດຕະໂນມັດບໍ່ປະສົບຜົນສໍາເລັດ, ທາງເລືອກທີ່ບໍ່ມີຜົນ.

-mcpu=ຊື່
ນີ້ລະບຸຊື່ຂອງໂຮງງານຜະລິດ ARM ເປົ້າຫມາຍ. GCC ໃຊ້ຊື່ນີ້ເພື່ອມາຈາກ
ຊື່ຂອງສະຖາປັດຕະຍະກຳ ARM ເປົ້າໝາຍ (ຄືກັບທີ່ລະບຸໂດຍ - ມີນາ) ແລະໂຮງງານຜະລິດ ARM
ປະ​ເພດ​ສໍາ​ລັບ​ການ​ປັບ​ສໍາ​ລັບ​ການ​ປະ​ຕິ​ບັດ (ເປັນ​ຖ້າ​ຫາກ​ວ່າ​ລະ​ບຸ​ໄວ້​ໂດຍ​ -mtune). ບ່ອນທີ່ທາງເລືອກນີ້
ແມ່ນໃຊ້ຮ່ວມກັບ - ມີນາ or -mtune, ທາງ​ເລືອກ​ເຫຼົ່າ​ນັ້ນ​ມີ​ຄວາມ​ສໍາ​ຄັນ​ໃນ​ໄລ​ຍະ​
ສ່ວນທີ່ເຫມາະສົມຂອງທາງເລືອກນີ້.

ຊື່ທີ່ອະນຸຍາດສໍາລັບທາງເລືອກນີ້ແມ່ນຄືກັນກັບທີ່ສໍາລັບ -mtune.

-mcpu=ທົ່ວໄປ-ໂຄ້ງ ຍັງອະນຸຍາດ, ແລະເທົ່າກັບ - ມີນາ=ໂຄ້ງ
-mtune=ທົ່ວໄປ-ໂຄ້ງ, ທະເລສາບ -mtune ສໍາລັບຂໍ້ມູນເພີ່ມເຕີມ.

-mcpu=ເດີມ ເຮັດໃຫ້ compiler ກວດພົບ CPU ຂອງຄອມພິວເຕີສ້າງໂດຍອັດຕະໂນມັດ. ທີ່
ປະຈຸບັນ, ຄຸນສົມບັດນີ້ຮອງຮັບສະເພາະໃນ GNU/Linux, ແລະບໍ່ແມ່ນສະຖາປັດຕະຍະກຳທັງໝົດ
ຮັບຮູ້. ຖ້າການກວດສອບອັດຕະໂນມັດບໍ່ປະສົບຜົນສໍາເລັດ, ທາງເລືອກທີ່ບໍ່ມີຜົນ.

-mfpu=ຊື່
ນີ້ລະບຸວ່າຮາດແວຈຸດລອຍ (ຫຼືການຈໍາລອງຮາດແວ) ມີຢູ່ໃນ
ເປົ້າ​ຫມາຍ. ຊື່ທີ່ອະນຸຍາດແມ່ນ: vfp, vfpv3, vfpv3-fp16, vfpv3-d16, vfpv3-d16-fp16,
vfpv3xd, vfpv3xd-fp16, neon, ນີອອນ-fp16, vfpv4, vfpv4-d16, fpv4-sp-d16, ນີອອນ-vfpv4,
fpv5-d16, fpv5-sp-d16, fp-armv8, ນີອອນ-fp-armv8, ແລະ crypto-neon-fp-armv8.

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 ແມ່ນວ່າຫນ້າທີ່ຄົງທີ່, ຫນ້າທີ່ທີ່ມີ "short_call"
ຄຸນລັກສະນະ, ຫນ້າທີ່ຢູ່ໃນຂອບເຂດຂອງຄໍາສັ່ງ "#pragma no_long_calls",
ແລະຫນ້າທີ່ຄໍານິຍາມໄດ້ຖືກລວບລວມແລ້ວພາຍໃນປະຈຸບັນ
ຫນ່ວຍງານລວບລວມບໍ່ໄດ້ຫັນເປັນການໂທຍາວ. ຂໍ້ຍົກເວັ້ນຂອງກົດລະບຽບນີ້ແມ່ນວ່າ
ຄໍານິຍາມຟັງຊັນອ່ອນແອ, ຟັງຊັນທີ່ມີຄຸນສົມບັດ "long_call" ຫຼື "ພາກສ່ວນ"
ຄຸນລັກສະນະ, ແລະຫນ້າທີ່ຢູ່ໃນຂອບເຂດຂອງຄໍາສັ່ງ "#pragma long_calls"
ສະເຫມີກາຍເປັນການໂທຍາວ.

ຄຸນສົມບັດນີ້ບໍ່ໄດ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ. ການລະບຸ -mno-long-calls ຟື້ນຟູ
ພຶດຕິກໍາເລີ່ມຕົ້ນ, ເຊັ່ນດຽວກັນກັບການວາງຫນ້າທີ່ໂທຫາພາຍໃນຂອບເຂດຂອງ "#pragma
long_calls_off" ຄໍາສັ່ງ. ກະລຸນາຮັບຊາບວ່າສະວິດເຫຼົ່ານີ້ບໍ່ມີຜົນຕໍ່ວິທີການ compiler
ສ້າງລະຫັດເພື່ອຈັດການການໂທຟັງຊັນຜ່ານຕົວຊີ້ຟັງຊັນ.

-msingle-pic-base
ປະຕິບັດການລົງທະບຽນທີ່ໃຊ້ສໍາລັບທີ່ຢູ່ PIC ເປັນການອ່ານເທົ່ານັ້ນ, ແທນທີ່ຈະໂຫລດມັນຢູ່ໃນ
prologue ສໍາລັບແຕ່ລະຫນ້າທີ່. ລະບົບເວລາແລ່ນແມ່ນຮັບຜິດຊອບສໍາລັບການເລີ່ມຕົ້ນນີ້
ລົງທະບຽນດ້ວຍມູນຄ່າທີ່ເຫມາະສົມກ່ອນທີ່ຈະເລີ່ມຕົ້ນການປະຕິບັດ.

-mpic ມັກສະມາຊິກ =reg
ລະບຸການລົງທະບຽນທີ່ຈະໃຊ້ສໍາລັບທີ່ຢູ່ PIC. ສໍາລັບກໍລະນີພື້ນຖານ PIC ມາດຕະຖານ, the
ຄ່າເລີ່ມຕົ້ນແມ່ນການລົງທະບຽນທີ່ເຫມາະສົມທີ່ກໍານົດໂດຍ compiler. ສໍາລັບກໍລະນີພື້ນຖານ PIC ດຽວ,
ຄ່າເລີ່ມຕົ້ນແມ່ນ R9 ຖ້າເປົ້າຫມາຍແມ່ນອີງໃສ່ EABI ຫຼືການກວດສອບ stack ຖືກເປີດໃຊ້, ຖ້າບໍ່ດັ່ງນັ້ນ
ມາດຕະຖານແມ່ນ R10.

-mpic-data-is-text-relative
ສົມມຸດວ່າແຕ່ລະສ່ວນຂໍ້ມູນແມ່ນກ່ຽວຂ້ອງກັບພາກສ່ວນຂໍ້ຄວາມໃນເວລາໂຫຼດ. ດັ່ງນັ້ນ,
ມັນອະນຸຍາດໃຫ້ແກ້ໄຂຂໍ້ມູນໂດຍໃຊ້ການດໍາເນີນການທີ່ກ່ຽວຂ້ອງກັບ PC. ຕົວເລືອກນີ້ເປີດຢູ່ຕາມຄ່າເລີ່ມຕົ້ນ
ສໍາລັບເປົ້າຫມາຍອື່ນທີ່ບໍ່ແມ່ນ VxWorks RTP.

-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-ພາສາ =ພາສາ
ລະບຸພາສາເພື່ອໃຊ້ໃນການເຂົ້າເຖິງບ່ອນເກັບຂໍ້ມູນທ້ອງຖິ່ນ. ສອງ ພາສາs ແມ່ນ
ສະ​ຫນັບ​ສະ​ຫນູນ ---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 ບໍ່ໄດ້ຖືກເປີດໃຊ້ຫຼັງຈາກນັ້ນຄໍາສັບຕ່າງໆໃນໂຄງສ້າງຂໍ້ມູນທີ່ຖືກບັນຈຸແມ່ນເຂົ້າເຖິງ a
byte ໃນເວລາ.

ຄຸນລັກສະນະ ARM "Tag_CPU_unaligned_access" ຖືກຕັ້ງຢູ່ໃນໄຟລ໌ວັດຖຸທີ່ສ້າງຂຶ້ນເປັນ
ບໍ່ວ່າຈະເປັນຄວາມຈິງຫຼືຜິດ, ຂຶ້ນກັບການຕັ້ງຄ່າຂອງທາງເລືອກນີ້. ຖ້າບໍ່ສອດຄ່ອງການເຂົ້າເຖິງ
ຖືກເປີດໃຊ້ແລ້ວສັນຍາລັກຂອງຕົວປະມວນຜົນກ່ອນ "__ARM_FEATURE_UNALIGNED" ຍັງຖືກກໍານົດ.

-mneon-for-64bits
ເປີດໃຊ້ການໃຊ້ Neon ເພື່ອຈັດການການດຳເນີນການ 64-bits scalar. ອັນນີ້ຖືກປິດໃຊ້ງານໂດຍຄ່າເລີ່ມຕົ້ນ
ເນື່ອງຈາກຄ່າໃຊ້ຈ່າຍຂອງການເຄື່ອນຍ້າຍຂໍ້ມູນຈາກທະບຽນຫຼັກໄປຫາ Neon ແມ່ນສູງ.

-mslow-flash-data
ສົມມຸດວ່າການໂຫຼດຂໍ້ມູນຈາກແຟລດແມ່ນຊ້າກວ່າການດຶງຂໍ້ມູນຄຳສັ່ງ. ເພາະສະນັ້ນຈຶ່ງຮູ້ຫນັງສື
ການໂຫຼດຖືກຫຼຸດໜ້ອຍລົງເພື່ອປະສິດທິພາບທີ່ດີຂຶ້ນ. ທາງເລືອກນີ້ແມ່ນສະຫນັບສະຫນູນພຽງແຕ່ໃນເວລາທີ່
ການລວບລວມສໍາລັບ ARMv7 M-profile ແລະປິດໂດຍຄ່າເລີ່ມຕົ້ນ.

-masm-syntax-unified
ສົມມຸດວ່າຕົວປະກອບ inline ກໍາລັງໃຊ້ syntax asm unified. ຄ່າເລີ່ມຕົ້ນແມ່ນປິດຢູ່
ເຊິ່ງຫມາຍເຖິງ syntax ແບ່ງອອກ. ໃນປັດຈຸບັນທາງເລືອກນີ້ແມ່ນມີພຽງແຕ່ສໍາລັບ Thumb1 ແລະ
ບໍ່ມີຜົນຕໍ່ກັບສະຖານະ ARM ແລະ Thumb2. ຢ່າງໃດກໍຕາມ, ນີ້ອາດຈະມີການປ່ຽນແປງໃນການປ່ອຍໃນອະນາຄົດຂອງ
GCC. syntax ແບ່ງອອກຄວນຈະຖືກພິຈາລະນາປະຕິເສດ.

- ຈໍາ​ກັດ​ມັນ​
ຈໍາກັດການຜະລິດ IT blocks ເພື່ອໃຫ້ສອດຄ່ອງກັບກົດລະບຽບຂອງ ARMv8. ຕັນ IT ສາມາດ
ມີພຽງແຕ່ຄໍາແນະນໍາ 16-bit ດຽວຈາກຊຸດຄໍາແນະນໍາທີ່ເລືອກ. ນີ້
ທາງ​ເລືອກ​ແມ່ນ​ເປີດ​ເປັນ​ຄ່າ​ເລີ່ມ​ຕົ້ນ​ສໍາ​ລັບ​ຮູບ​ແບບ ARMv8 Thumb​.

-mprint-tune-info
ພິມຂໍ້ມູນການປັບ CPU ເປັນຄໍາຄິດເຫັນໃນໄຟລ໌ assembler. ນີ້ແມ່ນທາງເລືອກທີ່ໃຊ້
ພຽງແຕ່ສໍາລັບການທົດສອບ regression ຂອງ compiler ແລະບໍ່ມີຈຸດປະສົງສໍາລັບການນໍາໃຊ້ທົ່ວໄປໃນ
ການລວບລວມລະຫັດ. ຕົວເລືອກນີ້ຖືກປິດໃຊ້ງານໂດຍຄ່າເລີ່ມຕົ້ນ.

APR ທາງເລືອກໃນການ

ຕົວເລືອກເຫຼົ່ານີ້ຖືກກໍານົດໄວ້ສໍາລັບການຈັດຕັ້ງປະຕິບັດ AVR:

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

"avr3"
ອຸປະກອນ "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{}= "ata5505", "ata6617c", "ata664251",
"atmega16u2", "atmega32u2", "atmega8u2", "attiny1634", "attiny167", "at90usb162",
"at90usb82".

"avr4"
ອຸປະກອນ "ປັບປຸງ" ທີ່ມີສູງເຖິງ 8@tie{}KiB ຂອງຫນ່ວຍຄວາມຈໍາຂອງໂຄງການ. mcu@tie{}= "ata6285",
"ata6286", "ata6289", "ata6612c", "atmega48", "atmega48a", "atmega48p",
"atmega48pa", "atmega8", "atmega8a", "atmega8hva", "atmega8515", "atmega8535",
"atmega88", "atmega88a", "atmega88p", "atmega88pa", "at90pwm1", "at90pwm2",
"at90pwm2b", "at90pwm3", "at90pwm3b", "at90pwm81".

"avr5"
ອຸປະກອນ "ປັບປຸງ" ທີ່ມີ 16@tie{}KiB ສູງສຸດ 64@tie{}KiB ຂອງຫນ່ວຍຄວາມຈໍາຂອງໂຄງການ.
mcu@tie{}= "ata5702m322", "ata5782", "ata5790", "ata5790n", "ata5795", "ata5831",
"ata6613c", "ata6614q", "atmega16", "atmega16a", "atmega16hva", "atmega16hva2",
"atmega16hvb", "atmega16hvbrevb", "atmega16m1", "atmega16u4", "atmega161",
"atmega162", "atmega163", "atmega164a", "atmega164p", "atmega164pa", "atmega165",
"atmega165a", "atmega165p", "atmega165pa", "atmega168", "atmega168a",
"atmega168p", "atmega168pa", "atmega169", "atmega169a", "atmega169p",
"atmega169pa", "atmega32", "atmega32a", "atmega32c1", "atmega32hvb",
"atmega32hvbrevb", "atmega32m1", "atmega32u4", "atmega32u6", "atmega323",
"atmega324a", "atmega324p", "atmega324pa", "atmega325", "atmega325a",
"atmega325p", "atmega325pa", "atmega3250", "atmega3250a", "atmega3250p",
"atmega3250pa", "atmega328", "atmega328p", "atmega329", "atmega329a",
"atmega329p", "atmega329pa", "atmega3290", "atmega3290a", "atmega3290p",
"atmega3290pa", "atmega406", "atmega64", "atmega64a", "atmega64c1", "atmega64hve",
"atmega64hve2", "atmega64m1", "atmega64rfr2", "atmega640", "atmega644",
"atmega644a", "atmega644p", "atmega644pa", "atmega644rfr2", "atmega645",
"atmega645a", "atmega645p", "atmega6450", "atmega6450a", "atmega6450p",
"atmega649", "atmega649a", "atmega649p", "atmega6490", "atmega6490a",
"atmega6490p", "at90can32", "at90can64", "at90pwm161", "at90pwm216", "at90pwm316",
"at90scr100", "at90usb646", "at90usb647", "at94k", "m3000".

"avr51"
ອຸປະກອນ "ປັບປຸງ" ທີ່ມີ 128@tie{}KiB ຂອງຫນ່ວຍຄວາມຈໍາຂອງໂຄງການ. mcu@tie{}= "atmega128",
"atmega128a", "atmega128rfa1", "atmega128rfr2", "atmega1280", "atmega1281",
"atmega1284", "atmega1284p", "atmega1284rfr2", "at90can128", "at90usb1286",
"at90usb1287".

"avr6"
ອຸປະກອນ "ປັບປຸງ" ທີ່ມີ PC 3-byte, ເຊັ່ນວ່າມີຫຼາຍກວ່າ 128@tie{}KiB ຂອງໂປຣແກຣມ.
ຄວາມຊົງ ຈຳ. mcu@tie{}= "atmega256rfr2", "atmega2560", "atmega2561", "atmega2564rfr2".

"avrxmega2"
ອຸປະກອນ "XMEGA" ທີ່ມີຫຼາຍກວ່າ 8@tie{}KiB ແລະສູງສຸດ 64@tie{}KiB ຂອງໜ່ວຍຄວາມຈຳໂປຣແກຣມ.
mcu@tie{}= "atxmega16a4", "atxmega16a4u", "atxmega16c4", "atxmega16d4",
"atxmega16e5", "atxmega32a4", "atxmega32a4u", "atxmega32c3", "atxmega32c4",
"atxmega32d3", "atxmega32d4", "atxmega32e5", "atxmega8e5".

"avrxmega4"
ອຸປະກອນ "XMEGA" ທີ່ມີຫຼາຍກວ່າ 64@tie{}KiB ແລະສູງສຸດ 128@tie{}KiB ຂອງໂປຣແກຣມ
ຄວາມຊົງ ຈຳ. mcu@tie{}= "atxmega64a3", "atxmega64a3u", "atxmega64a4u", "atxmega64b1",
"atxmega64b3", "atxmega64c3", "atxmega64d3", "atxmega64d4".

"avrxmega5"
ອຸປະກອນ "XMEGA" ທີ່ມີຫຼາຍກວ່າ 64@tie{}KiB ແລະສູງສຸດ 128@tie{}KiB ຂອງໂປຣແກຣມ
ໜ່ວຍຄວາມຈຳ ແລະ ຫຼາຍກວ່າ 64@tie{}KiB ຂອງ RAM. mcu@tie{}= "atxmega64a1",
"atxmega64a1u".

"avrxmega6"
ອຸປະກອນ "XMEGA" ທີ່ມີຫຼາຍກວ່າ 128@tie{}KiB ຂອງໜ່ວຍຄວາມຈຳໂປຣແກຣມ. mcu@tie{}=
"atxmega128a3", "atxmega128a3u", "atxmega128b1", "atxmega128b3", "atxmega128c3",
"atxmega128d3", "atxmega128d4", "atxmega192a3", "atxmega192a3u", "atxmega192c3",
"atxmega192d3", "atxmega256a3", "atxmega256a3b", "atxmega256a3bu",
"atxmega256a3u", "atxmega256c3", "atxmega256d3", "atxmega384c3", "atxmega384d3".

"avrxmega7"
ອຸປະກອນ "XMEGA" ທີ່ມີຫຼາຍກວ່າ 128@tie{}KiB ຂອງໜ່ວຍຄວາມຈຳໂປຣແກຣມ ແລະຫຼາຍກວ່າ
64@tie{}KiB ຂອງ RAM. mcu@tie{}= "atxmega128a1", "atxmega128a1u", "atxmega128a4u".

"avrtiny"
"TINY" ອຸປະກອນຫຼັກຂະໜາດນ້ອຍທີ່ມີ 512@tie{}B ສູງສຸດ 4@tie{}KiB ຂອງຫນ່ວຍຄວາມຈໍາຂອງໂປຣແກຣມ.
mcu@tie{}= "attiny10", "attiny20", "attiny4", "attiny40", "attiny5", "attiny9".

"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, ແຕ່ມັນເຮັດໃຫ້ນ້ອຍລົງ
ຂະຫນາດລະຫັດ.

-mn-flash=num
ສົມມຸດວ່າຫນ່ວຍຄວາມຈໍາ flash ມີຂະຫນາດຂອງ num ເທື່ອ 64@tie{}KiB.

-mno-interrupts
ລະຫັດທີ່ສ້າງຂຶ້ນບໍ່ເຂົ້າກັນໄດ້ກັບການຂັດຂວາງຮາດແວ. ລະຫັດຂະໜາດນ້ອຍລົງ.

-mrelax
ພະຍາຍາມປ່ຽນແທນ "CALL" resp. ຄໍາແນະນໍາ "JMP" ໂດຍ "RCALL" resp ທີ່ສັ້ນກວ່າ. "RJMP"
ຄໍາແນະນໍາຖ້າມີ. ການຕັ້ງຄ່າ -mrelax ພຽງແຕ່ເພີ່ມ --mlink-ຜ່ອນຄາຍ ທາງ​ເລືອກ​ໃນ​ການ​
ເສັ້ນຄໍາສັ່ງຂອງ assembler ແລະ --ພັກຜ່ອນ ທາງເລືອກໃນແຖວຄໍາສັ່ງຂອງຕົວເຊື່ອມຕໍ່.

Jump relaxing ແມ່ນປະຕິບັດໂດຍ linker ເນື່ອງຈາກວ່າການຊົດເຊີຍການໂດດບໍ່ເປັນທີ່ຮູ້ຈັກກ່ອນ
ລະຫັດຕັ້ງຢູ່. ດັ່ງນັ້ນ, ລະຫັດ assembler ທີ່ສ້າງຂຶ້ນໂດຍ compiler ແມ່ນຄືກັນ,
ແຕ່ຄໍາແນະນໍາໃນຕົວປະຕິບັດອາດຈະແຕກຕ່າງຈາກຄໍາແນະນໍາໃນຕົວປະກອບ
ລະຫັດ.

ການຜ່ອນຄາຍຕ້ອງຖືກເປີດໃຊ້ຖ້າຕ້ອງການຕົວເຊື່ອມຕໍ່, ເບິ່ງພາກ "EIND" ແລະ
linker stubs ຂ້າງລຸ່ມນີ້.

-mrmw
ສົມມຸດວ່າອຸປະກອນຮອງຮັບຄໍາແນະນໍາອ່ານ-ດັດແກ້-ຂຽນ "XCH", "LAC", "LAS"
ແລະ "LAT".

-msp8
ປະຕິບັດການລົງທະບຽນຕົວຊີ້ stack ເປັນການລົງທະບຽນ 8-bit, ເຊັ່ນວ່າສົມມຸດວ່າ byte ສູງຂອງ
ຕົວຊີ້ stack ແມ່ນສູນ. ໂດຍທົ່ວໄປ, ທ່ານບໍ່ຈໍາເປັນຕ້ອງກໍານົດທາງເລືອກນີ້ດ້ວຍມື.

ຕົວເລືອກນີ້ຖືກນໍາໃຊ້ພາຍໃນໂດຍ compiler ເພື່ອເລືອກແລະສ້າງ multilibs ສໍາລັບ
ສະຖາປັດຕະຍະກໍາ "avr2" ແລະ "avr25". ສະຖາປັດຕະຍະກໍາເຫຼົ່ານີ້ປະສົມອຸປະກອນທີ່ມີແລະບໍ່ມີ
"SPH". ສໍາລັບການຕັ້ງຄ່າອື່ນນອກຈາກ -mmcu=avr2 or -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.

-nodevicelib
ຢ່າເຊື່ອມຕໍ່ຫາຫ້ອງສະໝຸດສະເພາະອຸປະກອນຂອງ AVR-LibC "libdev.a".

-Waddr-space-ແປງ
ເຕືອນກ່ຽວກັບການແປງລະຫວ່າງສະຖານທີ່ທີ່ຢູ່ໃນກໍລະນີທີ່ທີ່ຢູ່ຜົນໄດ້ຮັບ
space ບໍ່ໄດ້ບັນຈຸຢູ່ໃນພື້ນທີ່ທີ່ຢູ່ຂາເຂົ້າ.

"EIND" ແລະອຸປະກອນທີ່ມີຫຼາຍກ່ວາ 128 Ki Bytes ຂອງ Flash

ຕົວຊີ້ໃນການຈັດຕັ້ງປະຕິບັດແມ່ນ 16@tie{}bits wide. ທີ່ຢູ່ຂອງຟັງຊັນ ຫຼືປ້າຍກຳກັບ
ຖືກສະແດງເປັນທີ່ຢູ່ຂອງຄໍາສັບເພື່ອໃຫ້ການກະໂດດທາງອ້ອມແລະການໂທສາມາດເປົ້າຫມາຍລະຫັດໃດໆ
ທີ່ຢູ່ໃນໄລຍະ 64@tie{}Ki ຄໍາ.

ເພື່ອສ້າງຄວາມສະດວກໃນການໂດດທາງອ້ອມໃນອຸປະກອນທີ່ມີຫຼາຍກວ່າ 128@tie{}Ki bytes ຂອງ
ພື້ນທີ່ຫນ່ວຍຄວາມຈໍາຂອງໂຄງການ, ມີການລົງທະບຽນຫນ້າທີ່ພິເສດທີ່ເອີ້ນວ່າ "EIND" ທີ່ເຮັດຫນ້າທີ່ເປັນ
ສ່ວນທີ່ສໍາຄັນທີ່ສຸດຂອງທີ່ຢູ່ເປົ້າຫມາຍໃນເວລາທີ່ຄໍາແນະນໍາ "EICALL" ຫຼື "EIJMP" ແມ່ນ
ໃຊ້ແລ້ວ.

ການກະໂດດທາງອ້ອມແລະການໂທຫາອຸປະກອນເຫຼົ່ານີ້ຖືກຈັດການດັ່ງຕໍ່ໄປນີ້ໂດຍ compiler ແລະແມ່ນ
ຂຶ້ນກັບຂໍ້ຈຳກັດບາງອັນ:

* ຄອມພີວເຊີບໍ່ເຄີຍຕັ້ງ "EIND".

* ຄອມພີວເຕີໃຊ້ "EIND" implicitely ໃນ "EICALL"/"EIJMP" ຄໍາແນະນໍາຫຼືອາດຈະອ່ານ
"EIND" ໂດຍກົງເພື່ອເຮັດຕາມການໂທຫາທາງອ້ອມ / ເຕັ້ນໄປຫາໂດຍວິທີ "RET"
ຄຳ ແນະ ນຳ.

* ຜູ້ລວບລວມຂໍ້ມູນສົມມຸດວ່າ "EIND" ບໍ່ເຄີຍປ່ຽນແປງໃນລະຫວ່າງລະຫັດເລີ່ມຕົ້ນຫຼືໃນລະຫວ່າງການ
ຄໍາຮ້ອງສະຫມັກ. ໂດຍສະເພາະ, "EIND" ບໍ່ໄດ້ຖືກບັນທຶກ / ຟື້ນຟູໃນຫນ້າທີ່ຫຼືຂັດຂວາງ
ການບໍລິການປົກກະຕິ prologue/epilogue.

* ສໍາລັບການໂທທາງອ້ອມໄປຫາຫນ້າທີ່ແລະ goto computed, ຕົວເຊື່ອມຕໍ່ສ້າງ ລຳ ຕົ້ນ. ລຳຕົ້ນ
ແມ່ນ pads ເຕັ້ນໄປຫາບາງຄັ້ງເອີ້ນວ່າ trampolines. ດັ່ງນັ້ນ, ການໂທທາງອ້ອມ / ເຕັ້ນໄປຫາ
ຕົ້ນໄມ້ດັ່ງກ່າວ. stub ປະກອບດ້ວຍການກະໂດດໂດຍກົງໄປຫາທີ່ຢູ່ທີ່ຕ້ອງການ.

* ການຜ່ອນຄາຍ Linker ຕ້ອງໄດ້ຮັບການເປີດເພື່ອໃຫ້ຕົວເຊື່ອມຕໍ່ສ້າງ stubs ຢ່າງຖືກຕ້ອງ
ໃນທຸກສະຖານະການ. ເບິ່ງຕົວເລືອກ compiler -mrelax ແລະຕົວເລືອກຕົວເຊື່ອມຕໍ່ --ພັກຜ່ອນ.
ມີກໍລະນີມຸມທີ່ຕົວເຊື່ອມຕໍ່ແມ່ນ supposed ຈະສ້າງ stubs ແຕ່ aborts
ໂດຍບໍ່ມີການຜ່ອນຄາຍແລະບໍ່ມີຂໍ້ຄວາມສະແດງຂໍ້ຜິດພາດທີ່ເປັນປະໂຫຍດ.

* 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 ແລະ compiler ຕ້ອງມີການປ່ຽນແປງ.
"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

ສໍາລັບການ mcu= "avr2", "avr25", "avr3", "avr31", "avr35", "avr4", "avr5", "avr51", "avr6",

ຕາມລໍາດັບ ແລະ

100, 102, 104, 105, 106, 107

ສໍາລັບການ mcu= "avrtiny", "avrxmega2", "avrxmega4", "avrxmega5", "avrxmega6", "avrxmega7",
ຕາມລໍາດັບ. ຖ້າ mcu ລະບຸອຸປະກອນ, ມະຫາພາກໃນຕົວນີ້ຖືກຕັ້ງຕາມຄວາມເໝາະສົມ. ສໍາລັບ
ຕົວຢ່າງ, ກັບ -mmcu=atmega8 ມະຫາພາກແມ່ນກໍານົດເປັນ 4.

"__AVR_ອຸປະກອນ__"
ການຕັ້ງຄ່າ -mmcu=ອຸປະກອນ ກໍານົດ macro ໃນຕົວນີ້ເຊິ່ງສະທ້ອນເຖິງຊື່ຂອງອຸປະກອນ. ສໍາລັບ
ຍົກຕົວຢ່າງ, -mmcu=atmega8 ກໍານົດ macro ໃນຕົວ "__AVR_ATmega8__", -mmcu=attiny261a
ກໍານົດ "__AVR_ATtiny261A__", ແລະອື່ນໆ.

ຊື່ macro ໃນຕົວແມ່ນປະຕິບັດຕາມໂຄງການ "__AVR_ອຸປະກອນ__" ບ່ອນທີ່ ອຸປະກອນ ເປັນ
ຊື່ອຸປະກອນຈາກຄູ່ມືຜູ້ໃຊ້ AVR. ຄວາມແຕກຕ່າງລະຫວ່າງ ອຸປະກອນ ໃນການກໍ່ສ້າງໃນ
ມະຫາພາກ ແລະ ອຸປະກອນ in -mmcu=ອຸປະກອນ ແມ່ນວ່າອັນສຸດທ້າຍແມ່ນຕົວພິມນ້ອຍສະເໝີ.

If ອຸປະກອນ ບໍ່​ແມ່ນ​ອຸ​ປະ​ກອນ​ແຕ່​ມີ​ພຽງ​ແຕ່​ສະ​ຖາ​ປັດ​ຕະ​ຫຼັກ​ເຊັ່ນ​ avr51, ມະຫາພາກນີ້ບໍ່ແມ່ນ
ກໍານົດ.

"__AVR_DEVICE_NAME__"
ການຕັ້ງຄ່າ -mmcu=ອຸປະກອນ ກໍານົດ macro ໃນຕົວນີ້ໃຫ້ກັບຊື່ຂອງອຸປະກອນ. ຍົກ​ຕົວ​ຢ່າງ,
ກັບ -mmcu=atmega8 macro ຖືກກໍານົດເປັນ "atmega8".

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 ຂອງໜ່ວຍຄວາມຈຳໂປຣແກຣມ.

"__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_ISA_RMW__"
ອຸປະກອນມີຄໍາແນະນໍາ Read-Modify-Write (XCH, LAC, LAS ແລະ LAT).

"__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 ເປົ້າຫມາຍ
ໂຮງງານຜະລິດ. ການແກ້ໄຂໃດໆທີ່ມີຢູ່ສໍາລັບການແກ້ໄຂຊິລິໂຄນເປົ້າຫມາຍແມ່ນໄດ້ຖືກເປີດໃຊ້.
If sirevision is none, ບໍ່ມີການເປີດໃຊ້ວຽກໃດໆ. ຖ້າ sirevision is ໃດ, ທັງຫມົດ
ການແກ້ໄຂບັນຫາສໍາລັບໂປເຊດເຊີເປົ້າຫມາຍໄດ້ຖືກເປີດໃຊ້. ມະຫາພາກ "__SILICON_REVISION__".
ຖືກກໍານົດເປັນສອງຕົວເລກເລກຖານສິບຫົກທີ່ເປັນຕົວແທນຂອງຕົວເລກທີ່ສໍາຄັນແລະຕົວເລກເລັກນ້ອຍໃນ
ການແກ້ໄຂຊິລິໂຄນ. ຖ້າ sirevision is none, "__SILICON_REVISION__" ບໍ່ໄດ້ຖືກກໍານົດ.
If sirevision is ໃດ, the "__SILICON_REVISION__" ຖືກກຳນົດໃຫ້ເປັນ 0xffff. ຖ້ານີ້
ທາງເລືອກ sirevision ບໍ່ໄດ້ຖືກນໍາໃຊ້, GCC ຖືວ່າການປັບປຸງໃຫມ່ຫຼ້າສຸດຂອງຊິລິໂຄນທີ່ຮູ້ຈັກ
ໂຮງງານຜະລິດ Blackfin ເປົ້າຫມາຍ.

GCC ກໍານົດ macro preprocessor ສໍາລັບທີ່ກໍານົດໄວ້ cpuທີ່ຢູ່ ສໍາ​ລັບ bfin-elf ຕ່ອງໂສ້ເຄື່ອງມື,
ຕົວເລືອກນີ້ເຮັດໃຫ້ BSP ຮາດແວທີ່ສະຫນອງໂດຍ libgloss ຖືກເຊື່ອມຕໍ່ໃນ if - ຊິມ is
ບໍ່ໄດ້ໃຫ້.

ຖ້າບໍ່ມີທາງເລືອກນີ້, bf532 ຖືກໃຊ້ເປັນໂປເຊດເຊີໂດຍຄ່າເລີ່ມຕົ້ນ.

ໃຫ້ສັງເກດວ່າການສະຫນັບສະຫນູນສໍາລັບ bf561 ບໍ່ສົມບູນ. ສໍາລັບ bf561, ມີພຽງແຕ່ macro preprocessor ເທົ່ານັ້ນ
ກໍານົດ.

- ຊິມ
ລະບຸວ່າໂຄງການຈະດໍາເນີນການຢູ່ໃນ simulator ໄດ້. ນີ້ເຮັດໃຫ້ເກີດການຈໍາລອງ
BSP ສະຫນອງໃຫ້ໂດຍ libgloss ທີ່ຈະເຊື່ອມຕໍ່ໃນ. ທາງເລືອກນີ້ມີຜົນກະທົບພຽງແຕ່ສໍາລັບ bfin-elf
ຕ່ອງໂສ້ເຄື່ອງມື. ທາງເລືອກອື່ນທີ່ແນ່ນອນ, ເຊັ່ນ: - ຫໍສະໝຸດກາງ ແລະ -mfdpic, ໝາຍເຖິງ
- ຊິມ.

-momit-leaf-frame-pointer
ຢ່າເກັບຮັກສາຕົວຊີ້ກອບຢູ່ໃນທະບຽນສໍາລັບຫນ້າທີ່ຂອງໃບ. ນີ້ຫຼີກລ້ຽງການ
ຄໍາ​ແນະ​ນໍາ​ເພື່ອ​ຊ່ວຍ​ປະ​ຢັດ​, ການ​ຕັ້ງ​ຄ່າ​ແລະ​ການ​ຟື້ນ​ຟູ​ຕົວ​ຊີ້​ກອບ​ແລະ​ເຮັດ​ໃຫ້​ການ​ລົງ​ທະ​ບຽນ​ເພີ່ມ​ເຕີມ​
ມີຢູ່ໃນຫນ້າທີ່ຂອງໃບ. ທາງເລືອກ -fomit-frame-pointer ເອົາກອບ
ຕົວຊີ້ສໍາລັບຟັງຊັນທັງໝົດ, ເຊິ່ງອາດຈະເຮັດໃຫ້ການດີບັກຍາກຂຶ້ນ.

-mspecld-ຜິດປົກກະຕິ
ເມື່ອເປີດໃຊ້ງານ, ຄອມພີວເຕີຈະຮັບປະກັນວ່າລະຫັດທີ່ສ້າງຂຶ້ນບໍ່ມີ
ການໂຫຼດຄາດຄະເນຫຼັງຈາກຄໍາແນະນໍາກະໂດດ. ຖ້າຕົວເລືອກນີ້ຖືກໃຊ້,
"__WORKAROUND_SPECULATIVE_LOADS" ຖືກກຳນົດ.

-mno-specld-ຜິດປົກກະຕິ
ຢ່າສ້າງລະຫັດເພີ່ມເຕີມເພື່ອປ້ອງກັນການໂຫຼດທີ່ຄາດເດົາໄດ້.

-mcsync-ຜິດປົກກະຕິ
ເມື່ອເປີດໃຊ້ງານ, compiler ໃຫ້ແນ່ໃຈວ່າລະຫັດທີ່ສ້າງຂຶ້ນບໍ່ມີ 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. ທາງເລືອກນີ້ເຮັດໃຫ້ເກີດ
ໄຟລ໌ເລີ່ມຕົ້ນທີ່ເຫມາະສົມແລະເຊື່ອມຕໍ່ scripts ສະຫນັບສະຫນູນ multicore ທີ່ຈະນໍາໃຊ້, ແລະກໍານົດ
ມະຫາພາກ "__BFIN_MULTICORE". ມັນສາມາດໃຊ້ໄດ້ພຽງແຕ່ກັບ -mcpu=bf561[-sirevision].

ທາງເລືອກນີ້ສາມາດຖືກນໍາໃຊ້ກັບ - mcorea or -mcoreb, ເຊິ່ງເລືອກຫນຶ່ງຄໍາຮ້ອງສະຫມັກ-
ຮູບແບບການຂຽນໂປຼແກຼມຕໍ່ຫຼັກ. ໂດຍບໍ່ມີການ - mcorea or -mcoreb, ການ
ຮູບແບບການຂຽນໂປລແກລມ single-application/dual-core ຖືກໃຊ້. ໃນຮູບແບບນີ້, ຕົ້ນຕໍ
ຟັງຊັນຂອງ Core B ຄວນມີຊື່ເປັນ "coreb_main".

ຖ້າຕົວເລືອກນີ້ບໍ່ຖືກໃຊ້, ຮູບແບບການຂຽນໂປລແກລມຄໍາຮ້ອງສະຫມັກຫຼັກດຽວຖືກນໍາໃຊ້.

- mcorea
ສ້າງແອັບພລິເຄຊັນແບບດ່ຽວສຳລັບ Core A ຂອງ BF561 ໃນເວລານຳໃຊ້ one-application-per-
ຮູບແບບການຂຽນໂປລແກລມຫຼັກ. ໄຟລ໌ເລີ່ມຕົ້ນທີ່ເຫມາະສົມແລະສະຄິບເຊື່ອມຕໍ່ຖືກນໍາໃຊ້ເພື່ອສະຫນັບສະຫນູນ Core
A, ແລະມະຫາພາກ "__BFIN_COREA" ຖືກກໍານົດ. ທາງເລືອກນີ້ສາມາດໃຊ້ໄດ້ພຽງແຕ່ໃນ
ສົມທົບກັບ - mmulticore.

-mcoreb
ສ້າງແອັບພລິເຄຊັນແບບສະແຕນເລດສໍາລັບ Core B ຂອງ BF561 ເມື່ອນໍາໃຊ້ຫນຶ່ງແອັບພລິເຄຊັນຕໍ່.
ຮູບແບບການຂຽນໂປລແກລມຫຼັກ. ໄຟລ໌ເລີ່ມຕົ້ນທີ່ເຫມາະສົມແລະສະຄິບເຊື່ອມຕໍ່ຖືກນໍາໃຊ້ເພື່ອສະຫນັບສະຫນູນ Core
B, ແລະມະຫາພາກ "__BFIN_COREB" ຖືກກໍານົດ. ເມື່ອຕົວເລືອກນີ້ຖືກນໍາໃຊ້, "coreb_main"
ຄວນໃຊ້ແທນ "ຕົ້ນຕໍ". ທາງເລືອກນີ້ສາມາດໃຊ້ໄດ້ພຽງແຕ່ສົມທົບກັບ
- mmulticore.

-msdram
ສ້າງແອັບພລິເຄຊັນແບບດ່ຽວສຳລັບ SDRAM. ໄຟລ໌ເລີ່ມຕົ້ນທີ່ເຫມາະສົມແລະສະຄິບເຊື່ອມຕໍ່ຖືກນໍາໃຊ້
ເພື່ອເຮັດໃຫ້ແອັບພລິເຄຊັນເຂົ້າໄປໃນ SDRAM, ແລະ macro "__BFIN_SDRAM" ຖືກກໍານົດ. ໄດ້
ຕົວໂຫລດຄວນເລີ່ມຕົ້ນ SDRAM ກ່ອນທີ່ຈະໂຫລດແອັບພລິເຄຊັນ.

-micplb
ສົມມຸດວ່າ ICPLBs ຖືກເປີດໃຊ້ໃນເວລາແລ່ນ. ນີ້ມີຜົນກະທົບກ່ຽວກັບຄວາມຜິດປົກກະຕິທີ່ແນ່ນອນ
ການແກ້ໄຂບັນຫາ. ສໍາລັບເປົ້າຫມາຍ Linux, ຄ່າເລີ່ມຕົ້ນແມ່ນຖືວ່າ ICPLBs ຖືກເປີດໃຊ້; ສໍາລັບ
ແອັບພລິເຄຊັນສະແຕນອະໂລນຄ່າເລີ່ມຕົ້ນຖືກປິດໄວ້.

C6X ທາງເລືອກໃນການ

- ມີນາ=ຊື່
ນີ້ລະບຸຊື່ຂອງສະຖາປັດຕະຍະກໍາເປົ້າຫມາຍ. GCC ໃຊ້ຊື່ນີ້ເພື່ອກໍານົດ
ປະເພດຂອງຄໍາແນະນໍາທີ່ມັນສາມາດປ່ອຍອອກມາເມື່ອສ້າງລະຫັດການປະກອບ. ອະນຸຍາດ
ຊື່ແມ່ນ: c62x, c64x, c64x+, c67x, c67x+, c674x.

-mbig-endian
ສ້າງລະຫັດສໍາລັບເປົ້າຫມາຍໃຫຍ່.

-mlittle-endian
ສ້າງລະຫັດສໍາລັບເປົ້າຫມາຍພຽງເລັກນ້ອຍ endian. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

- ຊິມ
ເລືອກໄຟລ໌ເລີ່ມຕົ້ນແລະຕົວເຊື່ອມຕໍ່ທີ່ເຫມາະສົມສໍາລັບ simulator.

-msdata=ຄ່າເລີ່ມຕົ້ນ
ເອົາຂໍ້ມູນຂະໜາດນ້ອຍ ແລະຂໍ້ມູນສະຖິດຢູ່ໃນສ່ວນ ".neardata", ເຊິ່ງຊີ້ໄປ
ລົງທະບຽນ "B14". ເອົາຂໍ້ມູນຂະໜາດນ້ອຍ ແລະຂໍ້ມູນສະຖິດທົ່ວໂລກທີ່ບໍ່ໄດ້ໃຊ້ໃນສ່ວນ ".bss",
ເຊິ່ງຢູ່ຕິດກັບພາກສ່ວນ ".neardata". ເອົາຂໍ້ມູນຂະຫນາດນ້ອຍທີ່ອ່ານເທົ່ານັ້ນເຂົ້າໄປໃນ
ພາກສ່ວນ ".rodata". ພາກສ່ວນທີ່ສອດຄ້ອງກັນທີ່ໃຊ້ສໍາລັບຂໍ້ມູນຂະຫນາດໃຫຍ່ແມ່ນ
".fardata", ".far" ແລະ ".const".

-msdata=ທັງໝົດ
ເອົາຂໍ້ມູນທັງຫມົດ, ບໍ່ພຽງແຕ່ວັດຖຸຂະຫນາດນ້ອຍ, ເຂົ້າໄປໃນພາກສ່ວນທີ່ສະຫງວນໄວ້ສໍາລັບຂໍ້ມູນຂະຫນາດນ້ອຍ, ແລະ
ໃຊ້ທີ່ຢູ່ທີ່ກ່ຽວຂ້ອງກັບການລົງທະບຽນ "B14" ເພື່ອເຂົ້າເຖິງພວກມັນ.

-msdata=ບໍ່ມີ
ຢ່າໃຊ້ພາກສ່ວນທີ່ສະຫງວນໄວ້ສໍາລັບຂໍ້ມູນຂະຫນາດນ້ອຍ, ແລະໃຊ້ທີ່ຢູ່ຢ່າງແທ້ຈິງ
ເຂົ້າເຖິງຂໍ້ມູນທັງໝົດ. ເອົາຂໍ້ມູນທົ່ວໂລກ ແລະຂໍ້ມູນສະຖິດທີ່ເລີ່ມຕົ້ນທັງໝົດໄວ້ໃນ ".fardata"
ພາກ, ແລະຂໍ້ມູນ uninitialized ທັງຫມົດທີ່ຢູ່ໃນພາກ ".far". ເອົາຂໍ້ມູນຄົງທີ່ທັງຫມົດເຂົ້າໄປໃນ
ພາກສ່ວນ ".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​,
ຂໍ້​ມູນ​ສ່ວນ​ບຸກ​ຄົນ​ແລະ​ຄ່າ​ຄົງ​ທີ່​ທີ່​ຈະ​ສອດ​ຄ່ອງ​ສໍາ​ລັບ​ຂະ​ຫນາດ​ສູງ​ສຸດ​ການ​ເຂົ້າ​ເຖິງ​ຂໍ້​ມູນ​ດຽວ​
ສໍາລັບຮູບແບບ 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, ຈັດແຈງການເຊື່ອມຕໍ່ກັບ input-output
ຟັງຊັນຈາກຫ້ອງສະຫມຸດ 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 ຖືກສ້າງຂຶ້ນເພື່ອເປົ້າຫມາຍ. 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 ໄຟລ໌ວັດຖຸ. ໄດ້
ຕົວເຊື່ອມຕໍ່ສໍາລັບຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນ, /usr/bin/libtool, ລົ້ມເຫລວແລະພິມຂໍ້ຜິດພາດຖ້າຮ້ອງຂໍໃຫ້
ສ້າງຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນທີ່ມີປະເພດຍ່ອຍທີ່ຈໍາກັດຫນ້ອຍກວ່າໄຟລ໌ປ້ອນຂໍ້ມູນຂອງມັນ (ສໍາລັບ
ຕົວຢ່າງ, ພະຍາຍາມເອົາ a ppc970 ໄຟລ໌ວັດຖຸໃນ a ppc7400 ຫໍສະຫມຸດ). ຕົວເຊື່ອມຕໍ່ສໍາລັບ
ການ​ປະ​ຕິ​ບັດ​ໄດ້​, ld, ງຽບໆໃຫ້ຜູ້ປະຕິບັດການປະເພດຍ່ອຍທີ່ຈໍາກັດທີ່ສຸດຂອງອັນໃດນຶ່ງຂອງມັນ
ໄຟລ໌ປ້ອນຂໍ້ມູນ.

-Fdir
ເພີ່ມໄດເລກະທໍລີກອບ dir ໄປຫາຫົວຂອງບັນຊີລາຍຊື່ຂອງໄດເລກະທໍລີທີ່ຈະຄົ້ນຫາ
ສໍາລັບໄຟລ໌ header. ລາຍ ການ ເຫຼົ່າ ນີ້ ແມ່ນ interleaved ກັບ ທີ່ ກໍາ ນົດ ໄວ້ ໂດຍ -I
ທາງ​ເລືອກ​ແລະ​ຖືກ​ສະ​ແກນ​ໃນ​ລໍາ​ດັບ​ຊ້າຍ​ຫາ​ຂວາ​.

ໄດເລກະທໍລີກອບແມ່ນໄດເລກະທໍລີທີ່ມີກອບໃນມັນ. ກອບເປັນ
ໄດເລກະທໍລີທີ່ມີ a Headers ແລະ / ຫຼື ສ່ວນຫົວສ່ວນຕົວ ໄດເລກະທໍລີທີ່ມີຢູ່ໃນນັ້ນໂດຍກົງ
ສິ້ນສຸດໃນ .ກອບ. ຊື່ຂອງກອບເປັນຊື່ຂອງໄດເລກະທໍລີນີ້ບໍ່ລວມ
ໄດ້ .ກອບ. ສ່ວນຫົວທີ່ກ່ຽວຂ້ອງກັບກອບແມ່ນພົບເຫັນຢູ່ໃນຫນຶ່ງໃນສອງເຫຼົ່ານັ້ນ
ໄດເລກະທໍລີ, ກັບ Headers ຖືກຄົ້ນຫາກ່ອນ. ກອບຍ່ອຍແມ່ນກອບ
ໄດເລກະທໍລີທີ່ຢູ່ໃນກອບຂອງ Frameworks ໄດເລກະທໍລີ. ລວມມີກອບຍ່ອຍ
headers ພຽງແຕ່ສາມາດປາກົດຢູ່ໃນສ່ວນຫົວຂອງກອບທີ່ປະກອບດ້ວຍ subframework, ຫຼື
ໃນສ່ວນຫົວຂອງກອບຍ່ອຍຂອງພີ່ນ້ອງ. ສອງ subframeworks ແມ່ນອ້າຍນ້ອງຖ້າຫາກວ່າພວກເຂົາເຈົ້າເກີດຂຶ້ນໃນ
ກອບດຽວກັນ. ກອບຍ່ອຍບໍ່ຄວນມີຊື່ດຽວກັນກັບກອບ; ກ
ການເຕືອນໄພຈະຖືກອອກຖ້າຫາກວ່ານີ້ຖືກລະເມີດ. ໃນປັດຈຸບັນກອບຍ່ອຍບໍ່ສາມາດມີ
ກອບຍ່ອຍ; ໃນ​ອະ​ນາ​ຄົດ, ກົນ​ໄກ​ອາດ​ຈະ​ໄດ້​ຮັບ​ການ​ຂະ​ຫຍາຍ​ຕົວ​ເພື່ອ​ສະ​ຫນັບ​ສະ​ຫນູນ​ນີ້. ໄດ້
ກອບມາດຕະຖານສາມາດພົບເຫັນຢູ່ໃນ / System / Library / ຂອບ ແລະ
/ Library / ຂອບ. ຕົວຢ່າງປະກອບມີເບິ່ງຄືວ່າ "#include ",
ບ່ອນທີ່ Framework ຫມາຍເຖິງຊື່ຂອງກອບແລະ header.h ພົບເຫັນຢູ່ໃນ
ສ່ວນຫົວສ່ວນຕົວ or Headers ລະບົບ.

- ໂຄງ​ການ​ຮູບ​ພາບ​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-use-cxa-atexit, -fno-ຂໍ້ຍົກເວັ້ນ, -fno-ບໍ່ແມ່ນການໂທ-ຂໍ້ຍົກເວັ້ນ, -fapple-kext,
-fno-ອ່ອນແອ ແລະ -fno-rtti ບ່ອນ​ທີ່​ສາ​ມາດ​ໃຊ້​ໄດ້​. ໂໝດນີ້ຍັງຕັ້ງ -mno-altivec,
-msoft-float, -fno-builtin ແລະ - ສາຂາ ມ ສໍາລັບເປົ້າຫມາຍ PowerPC.

-mone-byte-bool
ລົບລ້າງຄ່າເລີ່ມຕົ້ນຂອງ "bool" ດັ່ງນັ້ນ "sizeof(bool)==1". ໂດຍຄ່າເລີ່ມຕົ້ນ "sizeof(bool)"
ແມ່ນ 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 ຖືກນໍາໃຊ້ເພື່ອປະຕິບັດ
ການດໍາເນີນງານຈຸດລອຍ. ເວັ້ນ ເສຍ ແຕ່ ວ່າ ພວກ ເຂົາ ເຈົ້າ ໄດ້ ຖືກ ທົດ ແທນ ໂດຍ ການ ປົກ ກະ ຕິ ທີ່ emulate ໄດ້
ການດໍາເນີນງານຈຸດລອຍ, ຫຼືລວບລວມໃນລັກສະນະເຊັ່ນການເອີ້ນ emulations ດັ່ງກ່າວ
routines, routines ເຫຼົ່ານີ້ບັນຫາການດໍາເນີນງານຈຸດເລື່ອນ. ຖ້າທ່ານກໍາລັງລວບລວມສໍາລັບ
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 ຂອງໄຟລ໌ປະກອບທີ່ສ້າງຂຶ້ນ.

-mbuild-ຄົງທີ່
ໂດຍປົກກະຕິ GCC ກວດສອບຄ່າຄົງທີ່ 32- ຫຼື 64-bit ເພື່ອເບິ່ງວ່າມັນສາມາດສ້າງມັນໄດ້ບໍ
ຈາກຄ່າຄົງທີ່ນ້ອຍກວ່າໃນສອງຫຼືສາມຄໍາແນະນໍາ. ຖ້າມັນບໍ່ສາມາດ, ມັນ outputs ໄດ້
ຄົງທີ່ເປັນຕົວໜັງສື ແລະສ້າງລະຫັດເພື່ອໂຫລດມັນຈາກພາກສ່ວນຂໍ້ມູນໃນເວລາແລ່ນ.

ໃຊ້ຕົວເລືອກນີ້ເພື່ອຮຽກຮ້ອງໃຫ້ GCC ກໍ່ສ້າງ ທັງຫມົດ ຕົວເລກຄົງທີ່ໂດຍໃຊ້ລະຫັດ, ເຖິງແມ່ນວ່າ
ມັນໃຊ້ເວລາຄໍາແນະນໍາຫຼາຍ (ສູງສຸດແມ່ນຫົກ).

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

-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 ເທົ່ານັ້ນ.

FR30 ທາງເລືອກໃນການ

ຕົວເລືອກເຫຼົ່ານີ້ຖືກກໍານົດໂດຍສະເພາະສໍາລັບພອດ FR30.

-msmall-ແບບ
ໃຊ້ຮູບແບບພື້ນທີ່ທີ່ຢູ່ຂະຫນາດນ້ອຍ. ນີ້ສາມາດຜະລິດລະຫັດຂະຫນາດນ້ອຍກວ່າ, ແຕ່ມັນສົມມຸດວ່າ
ວ່າຄ່າສັນຍາລັກ ແລະທີ່ຢູ່ທັງໝົດເໝາະສົມກັບຂອບເຂດ 20-ບິດ.

-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. ສະວິດນີ້ຕ້ອງໃຊ້ກັບ -ນາງ​ສາວ.

-mexr
ທະບຽນທີ່ຂະຫຍາຍຖືກເກັບໄວ້ໃນ stack ກ່ອນທີ່ຈະປະຕິບັດຫນ້າທີ່ດ້ວຍຈໍພາບ
ຄຸນ​ລັກ​ສະ​ນະ. ທາງເລືອກເລີ່ມຕົ້ນແມ່ນ -mexr. ຕົວເລືອກນີ້ໃຊ້ໄດ້ກັບເປົ້າໝາຍ H8S ເທົ່ານັ້ນ.

-mno-exr
ທະບຽນທີ່ຂະຫຍາຍບໍ່ໄດ້ເກັບຮັກສາໄວ້ໃນ stack ກ່ອນທີ່ຈະປະຕິບັດການທໍາງານຂອງຈໍພາບ
ຄຸນ​ລັກ​ສະ​ນະ. ທາງເລືອກເລີ່ມຕົ້ນແມ່ນ -mno-exr. ຕົວເລືອກນີ້ໃຊ້ໄດ້ກັບເປົ້າໝາຍ H8S ເທົ່ານັ້ນ.

- 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 ຕາມລໍາດັບ.

-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 ເມື່ອສ້າງຫ້ອງສະໝຸດຮ່ວມກັນ
ແລະຜ່ານ +ຍອມຮັບ ປະເພດບໍ່ກົງກັນ to ld ໃນການເຊື່ອມຕໍ່ທັງຫມົດ. ມັນເປັນຄ່າເລີ່ມຕົ້ນເມື່ອ GCC ແມ່ນ
ຕັ້ງຄ່າ, ຢ່າງຊັດເຈນ ຫຼື implicitly, ກັບຕົວເຊື່ອມຕໍ່ HP. ທາງເລືອກນີ້ບໍ່ມີຜົນກະທົບ
ທີ່ ld ເອີ້ນວ່າ; ມັນພຽງແຕ່ປ່ຽນສິ່ງທີ່ພາລາມິເຕີຖືກສົ່ງໄປຫານັ້ນ ld. ໄດ້ ld
ທີ່ຖືກເອີ້ນວ່າຖືກກໍານົດໂດຍ --with-ld ການຕັ້ງຄ່າທາງເລືອກ, ການຊອກຫາໂຄງການຂອງ GCC
ເສັ້ນທາງ, ແລະສຸດທ້າຍໂດຍຜູ້ໃຊ້ PATH. ຕົວເຊື່ອມຕໍ່ທີ່ໃຊ້ໂດຍ GCC ສາມາດພິມໄດ້ໂດຍໃຊ້
ທີ່ `gcc -print-prog-name=ld`. ຕົວເລືອກນີ້ມີຢູ່ໃນ HP-UX 64-bit ເທົ່ານັ້ນ
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.

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
ຢ່າ (ຫຼືເຮັດ) ສ້າງລະຫັດຕົວປະກອບສໍາລັບຂໍ້ມູນການດີບັ໊ກເລກແຖວ DWARF 2.
ອັນນີ້ອາດຈະເປັນປະໂຫຍດເມື່ອບໍ່ໃຊ້ຕົວປະກອບ GNU.

-mearly-stop-bits
-mno-early-stop-bits
ອະ​ນຸ​ຍາດ​ໃຫ້​ບິດ​ຢຸດ​ທີ່​ຈະ​ຖືກ​ວາງ​ໄວ​ກ​່​ວາ​ທັນ​ທີ​ກ່ອນ​ຫນ້າ​ຄໍາ​ແນະ​ນໍາ​ທີ່​
ກະຕຸ້ນຈຸດຢຸດ. ນີ້ສາມາດປັບປຸງການກໍານົດເວລາຄໍາແນະນໍາ, ແຕ່ບໍ່ແມ່ນສະເຫມີໄປ
ເຮັດແນວນັ້ນ.

-mfixed-range=ໄລຍະລົງທະບຽນ
ສ້າງລະຫັດການປິ່ນປົວຂອບເຂດການລົງທະບຽນທີ່ໃຫ້ມາເປັນການລົງທະບຽນຄົງທີ່. ການລົງທະບຽນຄົງທີ່
ແມ່ນອັນໜຶ່ງທີ່ຜູ້ຈັດສັນທະບຽນບໍ່ສາມາດນຳໃຊ້ໄດ້. ນີ້ແມ່ນເປັນປະໂຫຍດໃນເວລາທີ່ລວບລວມ kernel
ລະຫັດ. ໄລຍະການລົງທະບຽນແມ່ນລະບຸໄວ້ເປັນສອງທະບຽນທີ່ແຍກອອກໂດຍ dash. ຫຼາຍ
ໄລຍະການລົງທະບຽນສາມາດຖືກລະບຸແຍກດ້ວຍເຄື່ອງໝາຍຈຸດ.

-mtls-size=tls-size
ລະບຸຂະໜາດນ້ອຍຂອງການຊົດເຊີຍ TLS ທັນທີ. ຄ່າທີ່ຖືກຕ້ອງແມ່ນ 14, 22, ແລະ 64.

-mtune=cpu-type
ປັບແຕ່ງການກຳນົດເວລາການສອນສຳລັບ CPU ໂດຍສະເພາະ, ຄ່າທີ່ຖືກຕ້ອງແມ່ນ ທາດເນລະນຽມ,
itanium1, ລວມເຂົ້າກັນ, 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 ຂອບ​ເຂດ​ທີ່​ຍາກ, ບໍ່​ອະ​ນຸ​ຍາດ​ໃຫ້​ເພີ່ມ​ເຕີມ
ຫຼາຍກວ່າຈໍານວນນັ້ນຢູ່ໃນກຸ່ມຄໍາແນະນໍາ. ຖ້າບໍ່ດັ່ງນັ້ນ, ຂອບເຂດຈໍາກັດແມ່ນ "ອ່ອນ", ຫມາຍຄວາມວ່າ
ການດໍາເນີນງານທີ່ບໍ່ແມ່ນຫນ່ວຍຄວາມຈໍາແມ່ນມັກໃນເວລາທີ່ກໍານົດຂອບເຂດຈໍາກັດ, ແຕ່ຫນ່ວຍຄວາມຈໍາ
ການດໍາເນີນງານອາດຈະຍັງຖືກກໍານົດໄວ້.

LM32 ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ -m ທາງເລືອກແມ່ນຖືກກໍານົດສໍາລັບສະຖາປັດຕະຍະກໍາ LatticeMico32:

-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-ເຫຼົ່ານີ້ຖືກນໍາໃຊ້ຄືກັບການລົງທະບຽນທີ່ແທ້ຈິງ, ດັ່ງນັ້ນມີການຊື້ຂາຍລະຫວ່າງ
ຄວາມສາມາດຂອງ GCC ເຫມາະກັບລະຫັດເຂົ້າໄປໃນທະບຽນທີ່ມີຢູ່, ແລະການລົງໂທດການປະຕິບັດຂອງ
ການນໍາໃຊ້ຫນ່ວຍຄວາມຈໍາແທນທີ່ຈະລົງທະບຽນ. ໃຫ້ສັງເກດວ່າທຸກໂມດູນໃນໂຄງການຕ້ອງເປັນ
ລວບລວມດ້ວຍຄ່າດຽວກັນສໍາລັບທາງເລືອກນີ້. ດ້ວຍເຫດຜົນນີ້, ເຈົ້າບໍ່ຄວນໃຊ້ມັນ
ທາງເລືອກທີ່ມີຫ້ອງສະຫມຸດ runtime ເລີ່ມຕົ້ນຂອງ GCC.

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=ບໍ່ມີ
ປິດການນຳໃຊ້ພື້ນທີ່ຂໍ້ມູນຂະໜາດນ້ອຍ. ຕົວແປຖືກໃສ່ເຂົ້າໄປໃນຫນຶ່ງໃນ ".data", ".bss", ຫຼື
".rodata" (ເວັ້ນເສຍແຕ່ໄດ້ລະບຸຄຸນສົມບັດ "section"). ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

ພື້ນທີ່ຂໍ້ມູນຂະຫນາດນ້ອຍປະກອບດ້ວຍພາກສ່ວນ ".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 ກໍານົດມະຫາພາກ "__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 51 ກ 51cn 51 ເອັມ 51 ແມ່ນ 51jf 51 ປີ 51jm 51mm 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 ຍັງກໍານົດມະຫາພາກ "__mອູຣ__" ໃນ​ເວ​ລາ​ທີ່​ປັບ​ສໍາ​ລັບ​ສະ​ຖາ​ປັດ​ຕະ​ຍະ​ກໍາ​ຈຸ​ລະ​ພາກ 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".

- ບິດ
ເປີດ​ໃຊ້​ງານ​ຄໍາ​ແນະ​ນໍາ​ການ​ປະ​ຕິ​ບັດ​ການ​ບິດ --- ການ​ທົດ​ສອບ​ບິດ ("btstm​"​)​, set ("bsetm​"​) , clear
("bclrm"), invert ("bnotm"), ແລະ test-and-set ("tas").

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

-mclip
ເປີດໃຊ້ຄໍາແນະນໍາ "clip". ໃຫ້ສັງເກດວ່າ -mclip ບໍ່ເປັນປະໂຫຍດເວັ້ນເສຍແຕ່ວ່າທ່ານຍັງ
ໃຫ້ -mminmax.

-mconfig=ຊື່
ເລືອກໜຶ່ງໃນການຕັ້ງຄ່າຫຼັກໃນຕົວ. ແຕ່ລະຊິບ MeP ມີຫນຶ່ງຫຼືຫຼາຍກວ່ານັ້ນ
ໂມດູນໃນມັນ; ແຕ່ລະໂມດູນມີ CPU ຫຼັກ ແລະຫຼາກຫຼາຍຂອງ coprocessors, ທາງເລືອກ
ຄໍາແນະນໍາ, ແລະອຸປະກອນຕໍ່ພ່ວງ. ເຄື່ອງມື "MeP-Integrator", ບໍ່ແມ່ນສ່ວນຫນຶ່ງຂອງ GCC, ສະຫນອງ
ການຕັ້ງຄ່າເຫຼົ່ານີ້ໂດຍຜ່ານທາງເລືອກນີ້; ການນໍາໃຊ້ທາງເລືອກນີ້ແມ່ນຄືກັນກັບການນໍາໃຊ້ທັງຫມົດ
ຕົວເລືອກແຖວຄໍາສັ່ງທີ່ສອດຄ້ອງກັນ. ການຕັ້ງຄ່າເລີ່ມຕົ້ນແມ່ນ Default.

-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 ໄບຕ໌ ຫຼືນ້ອຍກວ່ານັ້ນຖືກຈັດສັນໃຫ້ພາກສ່ວນ ".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 is
ລະຫັດເຂົ້າກັນໄດ້. ຄ່າຕົວຢ່າງແມ່ນ 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-ກວດ​ສອບ​ ແທນທີ່ຈະເປັນ.

-mxl-gp-opt
ໃຊ້ພາກສ່ວນ ".sdata"/"sbss" GP-relative.

-mxl-ຄູນ-ສູງ
ໃຊ້ຄໍາແນະນໍາສູງຄູນສໍາລັບສ່ວນສູງຂອງ 32x32 ຄູນ.

-mxl-float-ແປງ
ໃຊ້ຄໍາແນະນໍາການແປງຈຸດລອຍຮາດແວ.

-mxl-float-sqrt
ໃຊ້ການສອນຮາກສີ່ຫຼ່ຽມຂອງຮາດແວ.

-mbig-endian
ສ້າງລະຫັດສໍາລັບເປົ້າຫມາຍໃຫຍ່.

-mlittle-endian
ສ້າງລະຫັດສໍາລັບເປົ້າຫມາຍພຽງເລັກນ້ອຍ endian.

-mxl-ສັ່ງຄືນໃໝ່
ໃຊ້ຄໍາແນະນໍາການສັ່ງຄືນໃຫມ່ (swap ແລະ byte reversed load/store).

-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, mips32r3, mips32r5, mips32r6, ໄມ64, mips64r2, mips64r3, mips64r5
ແລະ mips64r6. ຊື່ໂປເຊດເຊີແມ່ນ: 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, 34kn, 74kc, 74kf2_1, 74kf1_1, 74kf3_2, 1004kc, 1004kf2_1, 1004kf1_1,
loongson2e, loongson2f, loongson3a, M4K, M14K, m14kc, m14ke, m14kec, octeon, octeon+,
octeon2, octeon3, orion, p5600, r2000, r3000, r3900, r4000, r4400, r4600, r4650,
r4700, r6000, r8000, rm7000, rm9000, r10000, r12000, r14000, r16000, sb1, sr71000,
vr4100, vr4111, vr4120, vr4130, vr4300, vr5000, vr5400, vr5500, xlr ແລະ xlp. ໄດ້
ມູນຄ່າພິເສດ ຈາກ-abi ເລືອກສະຖາປັດຕະຍະກໍາທີ່ເຫມາະສົມທີ່ສຸດສໍາລັບ ABI ທີ່ເລືອກ
(ນັ້ນ​ແມ່ນ, ໄມ1 ສໍາລັບ 32-bit ABIs ແລະ ໄມ3 ສໍາລັບ 64-bit ABIs).

ລະບົບຕ່ອງໂສ້ເຄື່ອງມື Linux/GNU ພື້ນເມືອງຍັງສະຫນັບສະຫນູນມູນຄ່າ 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" ເປັນ "r2000" ແລະກໍານົດມະຫາພາກ "_MIPS_ARCH_R2000".

ໃຫ້ສັງເກດວ່າ "_MIPS_ARCH" macro ໃຊ້ຊື່ຂອງໂປເຊດເຊີຂ້າງເທິງ. ໃນ​ອື່ນໆ
ຄໍາສັບຕ່າງໆ, ມັນມີຄໍານໍາຫນ້າເຕັມແລະບໍ່ໄດ້ຫຍໍ້ 000 as k. ໃນກໍລະນີຂອງ ຈາກ-
ຊ່ວຍເຫລືອ, ມະຫາພາກຕັ້ງຊື່ສະຖາປັດຕະຍະກຳທີ່ແກ້ໄຂແລ້ວ (ທັງ "mips1" ຫຼື "mips3"). ມັນຊື່
ສະຖາປັດຕະຍະ ກຳ ເລີ່ມຕົ້ນເມື່ອບໍ່ມີ - ມີນາ ທາງເລືອກແມ່ນໃຫ້.

-mtune=ໂຄ້ງ
ເພີ່ມປະສິດທິພາບໃຫ້ ໂຄ້ງ. ໃນບັນດາສິ່ງອື່ນໆ, ທາງເລືອກນີ້ຄວບຄຸມວິທີການຄໍາແນະນໍາ
ກໍານົດເວລາ, ແລະຄ່າໃຊ້ຈ່າຍທີ່ຮັບຮູ້ຂອງການດໍາເນີນງານເລກເລກ. ບັນຊີລາຍຊື່ຂອງ ໂຄ້ງ ຄ່າ
ແມ່ນຄືກັນກັບ ສຳ ລັບ - ມີນາ.

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

-mtune ກໍານົດ macro "_MIPS_TUNE" ແລະ "_MIPS_TUNE_ຟູ", ເຊິ່ງເຮັດວຽກດຽວກັນ
ວິທີການເປັນ - ມີນາ ທີ່ໄດ້ອະທິບາຍຂ້າງເທິງ.

-mips1
ເທົ່າກັບ -march=mips1.

-mips2
ເທົ່າກັບ -march=mips2.

-mips3
ເທົ່າກັບ -march=mips3.

-mips4
ເທົ່າກັບ -march=mips4.

-mips32
ເທົ່າກັບ -march=mips32.

-mips32r3
ເທົ່າກັບ -march=mips32r3.

-mips32r5
ເທົ່າກັບ -march=mips32r5.

-mips32r6
ເທົ່າກັບ -march=mips32r6.

-mips64
ເທົ່າກັບ -march=mips64.

-mips64r2
ເທົ່າກັບ -march=mips64r2.

-mips64r3
ເທົ່າກັບ -march=mips64r3.

-mips64r5
ເທົ່າກັບ -march=mips64r5.

-mips64r6
ເທົ່າກັບ -march=mips64r6.

-mips16
-mno-mips16
ສ້າງ (ບໍ່ສ້າງ) ລະຫັດ MIPS16. ຖ້າ GCC ກໍາລັງຕັ້ງເປົ້າໝາຍໃສ່ MIPS32 ຫຼື MIPS64
ສະຖາປັດຕະຍະກໍາ, ມັນເຮັດໃຫ້ການນໍາໃຊ້ຂອງ MIPS16e ASE.

ການຜະລິດລະຫັດ MIPS16 ຍັງສາມາດຄວບຄຸມບົນພື້ນຖານການທໍາງານໂດຍວິທີການ
"mips16" ແລະ "nomips16" ຄຸນລັກສະນະ.

-mflip-mips16
ສ້າງລະຫັດ MIPS16 ໃນຟັງຊັນສະຫຼັບ. ທາງເລືອກນີ້ແມ່ນສະຫນອງໃຫ້ສໍາລັບການຖົດຖອຍ
ການ​ທົດ​ສອບ​ການ​ຜະ​ລິດ​ລະ​ຫັດ MIPS16 / ບໍ່​ແມ່ນ MIPS16 ປະ​ສົມ​, ແລະ​ບໍ່​ໄດ້​ມີ​ຈຸດ​ປະ​ສົງ​ສໍາ​ລັບ​ການ​ທໍາ​ມະ​ດາ​
ໃຊ້ໃນການລວບລວມລະຫັດຜູ້ໃຊ້.

-minterlink-ບີບອັດ
-mno-interlink-compressed
ຕ້ອງ​ການ (ບໍ່​ຕ້ອງ​ການ) ລະ​ຫັດ​ນັ້ນ​ໂດຍ​ການ​ນໍາ​ໃຊ້​ມາດ​ຕະ​ຖານ (ບໍ່​ໄດ້​ບີບ​ອັດ) MIPS ISA ເປັນ​ການ​ເຊື່ອມ​ຕໍ່-
ເຂົ້າກັນໄດ້ກັບລະຫັດ MIPS16 ແລະ microMIPS, ແລະໃນທາງກັບກັນ.

ຕົວຢ່າງ, ລະຫັດທີ່ໃຊ້ການເຂົ້າລະຫັດ ISA ມາດຕະຖານບໍ່ສາມາດເຕັ້ນໄປຫາ MIPS16 ໂດຍກົງ ຫຼື
ລະຫັດ microMIPS; ມັນຕ້ອງໃຊ້ການໂທ ຫຼືການໂດດທາງອ້ອມ. -minterlink-ບີບອັດ
ດັ່ງນັ້ນຈຶ່ງປິດການໂດດໂດຍກົງເວັ້ນເສຍແຕ່ GCC ຮູ້ວ່າເປົ້າໝາຍຂອງການໂດດບໍ່ແມ່ນ
ຖືກບີບອັດ.

-minterlink-mips16
-mno-interlink-mips16
ນາມແຝງຂອງ -minterlink-ບີບອັດ ແລະ -mno-interlink-compressed. ທາງເລືອກເຫຼົ່ານີ້
predate microMIPS ASE ແລະຖືກເກັບຮັກສາໄວ້ສໍາລັບການເຂົ້າກັນໄດ້ໃນດ້ານຫລັງ.

-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, MIPS32R3 ແລະ MIPS32R5.

ການມອບຫມາຍລົງທະບຽນສໍາລັບການໂຕ້ຖຽງແລະຄ່າກັບຄືນຍັງຄົງຄືກັນ, ແຕ່ແຕ່ລະຄົນ
ຄ່າ scalar ແມ່ນຜ່ານຢູ່ໃນທະບຽນ 64-bit ດຽວແທນທີ່ຈະເປັນຄູ່ຂອງ 32-bit
ລົງທະບຽນ. ຕົວຢ່າງ, ຄ່າຈຸດເລື່ອນ scalar ຈະຖືກສົ່ງຄືນໃນ $f0 ເທົ່ານັ້ນ, ບໍ່ແມ່ນ a
$f0/$f1 ຄູ່. ຊຸດຂອງບັນທຶກການໂທ - ບັນທຶກຍັງຄືກັນໃນວ່າເຖິງແມ່ນວ່າ -
ບັນທຶກຄວາມຊັດເຈນສອງຕົວເລກຖືກບັນທຶກໄວ້.

ສອງຕົວແປເພີ່ມເຕີມຂອງ o32 ABI ໄດ້ຮັບການສະຫນັບສະຫນູນເພື່ອໃຫ້ສາມາດປ່ຽນຈາກ
ລົງທະບຽນ 32-bit ຫາ 64-bit. ເຫຼົ່ານີ້ແມ່ນ FPXX (-mfpx) ແລະ FP64A (-mfp64
-mno-odd-spreg). ສ່ວນຂະຫຍາຍ FPXX ບັງຄັບໃຫ້ລະຫັດທັງໝົດຕ້ອງປະຕິບັດຢ່າງຖືກຕ້ອງ
ເມື່ອແລ່ນໂດຍໃຊ້ 32-bit ຫຼື 64-bit registers. ລະຫັດສາມາດເຊື່ອມຕໍ່ກັນໄດ້
FP32 ຫຼື FP64, ແຕ່ບໍ່ແມ່ນທັງສອງ. ສ່ວນຂະຫຍາຍ FP64A ແມ່ນຄ້າຍຄືກັນກັບສ່ວນຂະຫຍາຍ FP64 ແຕ່
ຫ້າມບໍ່ໃຫ້ໃຊ້ທະບຽນຄວາມຊັດເຈນອັນດຽວທີ່ມີຕົວເລກຄີກ. ນີ້ສາມາດຖືກນໍາໃຊ້ໃນ
ສົມທົບກັບຮູບແບບ "FRE" ຂອງ FPUs ໃນໂປເຊດເຊີ MIPS32R5 ແລະອະນຸຍາດໃຫ້ທັງ FP32.
ແລະລະຫັດ FP64A ເພື່ອເຊື່ອມຕໍ່ກັນແລະດໍາເນີນການໃນຂະບວນການດຽວກັນໂດຍບໍ່ມີການປ່ຽນຮູບແບບ FPU.

- 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 ບິດ.

-mfpx
ຢ່າສົມມຸດຄວາມກວ້າງຂອງການລົງທະບຽນຈຸດລອຍ.

-mhard-float
ໃຊ້ຄໍາແນະນໍາຕົວປະມວນຜົນຈຸດລອຍ.

-msoft-float
ຢ່າໃຊ້ຄຳແນະນຳຕົວປະມວນຜົນແບບຈຸດລອຍ. ປະຕິບັດຈຸດທີ່ເລື່ອນໄດ້
ການ​ຄິດ​ໄລ່​ໂດຍ​ໃຊ້​ການ​ໂທ​ຫ້ອງ​ສະ​ຫມຸດ​ແທນ​ທີ່​ຈະ​.

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

-msingle-float
ສົມມຸດວ່າຕົວປະມວນຜົນຈຸດທີ່ລອຍຕົວພຽງແຕ່ສະຫນັບສະຫນູນການດໍາເນີນງານຄວາມຊັດເຈນດຽວເທົ່ານັ້ນ.

-mdouble-float
ສົມມຸດວ່າຕົວປະມວນຜົນຈຸດທີ່ລອຍຕົວຮອງຮັບການດຳເນີນການທີ່ມີຄວາມຊັດເຈນສອງເທົ່າ. ນີ້
ເປັນຄ່າເລີ່ມຕົ້ນ.

-modd-spreg
-mno-odd-spreg
ເປີດໃຊ້ການລົງທະບຽນຈຸດລອຍຕົວແບບດຽວຕົວເລກຄີກສໍາລັບ o32
ABI. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນສໍາລັບໂປເຊດເຊີທີ່ຮູ້ວ່າສະຫນັບສະຫນູນການລົງທະບຽນເຫຼົ່ານີ້.
ເມື່ອໃຊ້ o32 FPXX ABI, -mno-odd-spreg ຖືກກໍານົດໂດຍຄ່າເລີ່ມຕົ້ນ.

-mabs=2008
-mabs=ມໍລະດົກ
ທາງ​ເລືອກ​ເຫຼົ່າ​ນີ້​ຄວບ​ຄຸມ​ການ​ປິ່ນ​ປົວ​ຂອງ​ບໍ່​ຫມາຍ​ເລກ​ພິ​ເສດ (NaN​) IEEE 754​
ຂໍ້ມູນຈຸດລອຍດ້ວຍ "abs.fmt" ແລະ "ບໍ່.fmt" ຄໍາແນະນໍາເຄື່ອງຈັກ.

ໂດຍຄ່າເລີ່ມຕົ້ນຫຼືເວລາໃດ -mabs=ມໍລະດົກ ຖືກ​ນໍາ​ໃຊ້​ການ​ປິ່ນ​ປົວ​ມໍ​ລະ​ດົກ​ໄດ້​ຖືກ​ຄັດ​ເລືອກ​. ໃນ​ນີ້
ກໍ​ລະ​ນີ​ທີ່​ຄໍາ​ແນະ​ນໍາ​ເຫຼົ່າ​ນີ້​ແມ່ນ​ພິ​ຈາ​ລະ​ນາ​ເລກ​ຄະ​ນິດ​ສາດ​ແລະ​ຫຼີກ​ເວັ້ນ​ການ​ທີ່​ການ​ດໍາ​ເນີນ​ງານ​ທີ່​ຖືກ​ຕ້ອງ​
ຕ້ອງການແລະຕົວປະຕິບັດການປ້ອນຂໍ້ມູນອາດຈະເປັນ NaN. ລໍາດັບຄໍາແນະນໍາທີ່ຍາວກວ່າ
ທີ່ manipulate ອາການຂອງ datum ຈຸດທີ່ເລື່ອນໄດ້ດ້ວຍຕົນເອງແມ່ນຖືກນໍາໃຊ້ແທນເວັ້ນເສຍແຕ່
ໄດ້ -ffinite-math-ເທົ່ານັ້ນ ທາງ​ເລືອກ​ຍັງ​ໄດ້​ຖືກ​ລະ​ບຸ​ໄວ້​.

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

-mnan=2008
-mnan=ມໍລະດົກ
ຕົວເລືອກເຫຼົ່ານີ້ຄວບຄຸມການເຂົ້າລະຫັດຂອງຕົວເລກພິເສດທີ່ບໍ່ແມ່ນຕົວເລກ (NaN) IEEE 754
ຂໍ້ມູນຈຸດລອຍ.

ໄດ້ -mnan=ມໍລະດົກ ຕົວເລືອກເລືອກການເຂົ້າລະຫັດແບບເກົ່າ. ໃນກໍລະນີນີ້ NaNs ງຽບ (qNaNs)
ແມ່ນໝາຍເຖິງໂດຍຊ່ອງຂໍ້ມູນອັນສຳຄັນອັນທຳອິດຂອງພວກມັນເປັນ 0, ໃນຂະນະທີ່
ການສົ່ງສັນຍານ NaNs (sNaNs) ແມ່ນໝາຍເຖິງໂດຍສ່ວນທຳອິດຂອງຄວາມໝາຍຕໍ່ທ້າຍຂອງພວກມັນ.
ສະໜາມ 1.

ໄດ້ -mnan=2008 ທາງເລືອກເລືອກການເຂົ້າລະຫັດ IEEE 754-2008. ໃນກໍລະນີນີ້ qNaNs ແມ່ນ
ສະແດງໃຫ້ເຫັນໂດຍ bit ທໍາອິດຂອງພາກສະຫນາມທີ່ສໍາຄັນຕໍ່ຫນ້າຂອງເຂົາເຈົ້າເປັນ 1, ໃນຂະນະທີ່ sNaNs
ແມ່ນໝາຍເຖິງໂດຍຊ່ອງຂໍ້ມູນອັນສຳຄັນອັນທຳອິດຂອງພວກມັນຄື 0.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -mnan=ມໍລະດົກ ເວັ້ນເສຍແຕ່ GCC ໄດ້ຖືກຕັ້ງຄ່າດ້ວຍ --with-nan=2008.

-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" ເປັນ 1.

-MDSPR2
-mno-dspr2
ໃຊ້ (ບໍ່ໃຊ້) ການແກ້ໄຂ 2 ຂອງ MIPS DSP ASE.
ຕົວເລືອກນີ້ກໍານົດ macro preprocessor "__mips_dsp" ແລະ "__mips_dspr2". ມັນ
ຍັງກໍານົດ "__mips_dsp_rev" ເປັນ 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 - ຄູ່ດຽວ.

-mmmicromips
-mno-micromips
ສ້າງ (ບໍ່ສ້າງ) ລະຫັດ microMIPS.

ການສ້າງລະຫັດ MicroMIPS ຍັງສາມາດຄວບຄຸມບົນພື້ນຖານການທໍາງານໂດຍວິທີການ
ຄຸນລັກສະນະ "micromips" ແລະ "nomicromips".

-mmt
-mno-mt
ໃຊ້ (ບໍ່ໃຊ້) MT Multithreading ຄໍາແນະນໍາ.

-mmcu
-mno-mcu
ໃຊ້ (ບໍ່ໃຊ້) ຄໍາແນະນໍາ MIPS MCU ASE.

- ເມວາ
-mno-eva
ໃຊ້ (ບໍ່ໃຊ້) ຄໍາແນະນໍາ MIPS Enhanced Virtual Addressing.

-mvirt
-mno-virt
ໃຊ້ (ບໍ່ໃຊ້) ຄໍາແນະນໍາສະເພາະຂອງ MIPS Virtualization Application.

-mxpa
-mno-xpa
ໃຊ້ (ຢ່າໃຊ້) ຄໍາແນະນໍາ MIPS eXtended Physical Address (XPA).

-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". ຕົວຢ່າງ, ຖ້າລະຫັດເປັນສ່ວນຫນຶ່ງຂອງຫ້ອງສະຫມຸດທີ່ອາດຈະຖືກນໍາໃຊ້ໃນການບູດ
monitor, ໂປຣແກຣມທີ່ເອີ້ນ boot monitor routines ຜ່ານຄ່າທີ່ບໍ່ຮູ້ຈັກໃນ $gp. (ໃນ
ສະ​ຖາ​ນະ​ການ​ດັ່ງ​ກ່າວ​, ການ​ຕິດ​ຕາມ​ກວດ​ກາ boot ຕົວ​ຂອງ​ມັນ​ເອງ​ແມ່ນ​ປົກ​ກະ​ຕິ​ແລ້ວ​ໄດ້​ຖືກ​ສັງ​ລວມ​ກັບ​ 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. ຄ່າເລີ່ມຕົ້ນແມ່ນ
-mno-memcpy, ເຊິ່ງອະນຸຍາດໃຫ້ GCC ຢູ່ໃນແຖວຂອງສໍາເນົາຄົງທີ່ຫຼາຍທີ່ສຸດ.

-mlong-ໂທ
-mno-long-calls
ປິດການໃຊ້ງານ (ຫ້າມປິດການໃຊ້ງານ) ການນໍາໃຊ້ຄໍາແນະນໍາ "jal". ເອີ້ນຟັງຊັນໂດຍໃຊ້ "jal"
ມີປະສິດທິພາບຫຼາຍຂຶ້ນແຕ່ຮຽກຮ້ອງໃຫ້ຜູ້ໂທແລະຜູ້ໂທຢູ່ໃນ 256 megabyte ດຽວກັນ
ສ່ວນແບ່ງ.

ຕົວເລືອກນີ້ບໍ່ມີຜົນຕໍ່ລະຫັດ abicalls. ຄ່າເລີ່ມຕົ້ນແມ່ນ -mno-long-calls.

- ບ້າ
-mno-mad
ເປີດໃຊ້ (ປິດການໃຊ້ງານ) ການນໍາໃຊ້ຄໍາແນະນໍາ "mad", "madu" ແລະ "mul", ຕາມທີ່ສະຫນອງໃຫ້ໂດຍ
R4650 ISA.

- mimadd
-mno-imadd
ເປີດໃຊ້ (ປິດການໃຊ້ງານ) ຄໍາແນະນໍາຈໍານວນ "madd" ແລະ "msub". ຄ່າເລີ່ມຕົ້ນແມ່ນ
- mimadd ກ່ຽວກັບສະຖາປັດຕະຍະກໍາທີ່ສະຫນັບສະຫນູນ "madd" ແລະ "msub" ຍົກເວັ້ນສໍາລັບ 74k
ສະຖາປັດຕະຍະກໍາບ່ອນທີ່ມັນຖືກພົບເຫັນວ່າສ້າງລະຫັດຊ້າລົງ.

-mfused-madd
-mno-fused-madd
ເປີດໃຊ້ (ປິດການໃຊ້ງານ) ການນໍາໃຊ້ຄໍາແນະນໍາທີ່ເລື່ອນໄດ້ multiply-accumulate, ເມື່ອພວກເຂົາ
ມີຢູ່. ຄ່າເລີ່ມຕົ້ນແມ່ນ -mfused-madd.

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

-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-rm7000
-mno-fix-rm7000
ເຮັດວຽກປະມານ RM7000 "dmult"/"dmultu" errata. ການແກ້ໄຂແມ່ນປະຕິບັດໂດຍ
ຜູ້ປະກອບຫຼາຍກວ່າໂດຍ GCC.

-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, ໄດ້
ຂໍ້ມູນ cache ຂຽນທັບຂໍ້ມູນ 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" ຫຼື "__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-sync, ແຕ່ຄ່າເລີ່ມຕົ້ນສາມາດ overridden ໂດຍການຕັ້ງຄ່າ
GCC ກັບ --with-sync.

ເມື່ອລວບລວມລະຫັດສໍາລັບລະບົບໂປເຊດເຊີດຽວ, ໂດຍທົ່ວໄປແລ້ວມັນປອດໄພທີ່ຈະໃຊ້ "sync".
ຢ່າງໃດກໍຕາມ, ໃນຫຼາຍລະບົບຫຼາຍແກນ (SMP), ມັນບໍ່ໄດ້ເຮັດໃຫ້ຄໍາແນະນໍາ invalidate
cache ໃນທຸກແກນແລະອາດຈະນໍາໄປສູ່ພຶດຕິກໍາທີ່ບໍ່ໄດ້ກໍານົດ.

-mrelax-pic-ໂທ
-mno-relax-pic-calls
ພະຍາຍາມປ່ຽນການໂທ PIC ທີ່ປົກກະຕິຖືກສົ່ງຜ່ານລົງທະບຽນ $25 ເປັນການໂທໂດຍກົງ.
ນີ້ແມ່ນເປັນໄປໄດ້ພຽງແຕ່ຖ້າຕົວເຊື່ອມຕໍ່ສາມາດແກ້ໄຂຈຸດຫມາຍປາຍທາງໃນເວລາເຊື່ອມຕໍ່ແລະຖ້າ
ຈຸດຫມາຍປາຍທາງແມ່ນຢູ່ໃນຂອບເຂດສໍາລັບການໂທຫາໂດຍກົງ.

-mrelax-pic-ໂທ ແມ່ນຄ່າເລີ່ມຕົ້ນຖ້າ GCC ຖືກຕັ້ງຄ່າໃຫ້ໃຊ້ຕົວປະກອບ ແລະ a
linker ທີ່ສະຫນັບສະຫນູນ ".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 ຄໍາແນະນໍາ. ທາງເລືອກນີ້ກໍານົດ
ມະຫາພາກກ່ອນໂປຣເຊສເຊີ "__NO_SETLB__".

Moxie ທາງເລືອກໃນການ

-ເມບ
ສ້າງລະຫັດ big-endian. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນຂອງ moxie-*-* ການຕັ້ງຄ່າ.

-mel
ສ້າງລະຫັດ little-endian.

-mmul.x
ສ້າງຄໍາແນະນໍາ mul.x ແລະ umul.x. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນຂອງ moxiebox-*-*
ການຕັ້ງຄ່າ.

-mno-crt0
ຢ່າເຊື່ອມຕໍ່ໃນໄຟລ໌ວັດຖຸການເລີ່ມຕົ້ນ C run-time.

MSP430 ທາງເລືອກໃນການ

ຕົວເລືອກເຫຼົ່ານີ້ຖືກກໍານົດສໍາລັບ MSP430:

-masm-hex
ບັງຄັບຜົນການປະກອບການປະກອບເພື່ອໃຊ້ຄ່າຄົງທີ່ hex ສະເໝີ. ໂດຍປົກກະຕິຄ່າຄົງທີ່ດັ່ງກ່າວຖືກເຊັນ
ເລກທົດສະນິຍົມ, ແຕ່ຕົວເລືອກນີ້ມີໃຫ້ສຳລັບ testsuite ແລະ/ຫຼື ຈຸດປະສົງດ້ານຄວາມງາມ.

-mmcu=
ເລືອກ MCU ເພື່ອເປົ້າຫມາຍ. ນີ້ຖືກນໍາໃຊ້ເພື່ອສ້າງສັນຍາລັກ C preprocessor ໂດຍອີງໃສ່
ຊື່ MCU, ປ່ຽນເປັນຕົວພິມໃຫຍ່ ແລະກ່ອນ ແລະຫຼັງການແກ້ໄຂດ້ວຍ __. ອັນນີ້
ຖືກນໍາໃຊ້ໂດຍ msp430.ຊມ ໄຟລ໌ສ່ວນຫົວເພື່ອເລືອກສ່ວນຫົວເພີ່ມເຕີມສະເພາະ MCU
ຍື່ນ.

ທາງເລືອກຍັງກໍານົດ ISA ເພື່ອໃຊ້. ຖ້າຊື່ MCU ແມ່ນຫນຶ່ງໃນທີ່ຮູ້ຈັກເທົ່ານັ້ນ
ສະຫນັບສະຫນູນ 430 ISA ຫຼັງຈາກນັ້ນຖືກເລືອກ, ຖ້າບໍ່ດັ່ງນັ້ນ 430X ISA ຖືກເລືອກ. ກ
ຊື່ MCU ທົ່ວໄປຂອງ msp430 ຍັງສາມາດຖືກນໍາໃຊ້ເພື່ອເລືອກ 430 ISA. ເຊັ່ນດຽວກັນ
generic msp430x ຊື່ MCU ເລືອກ 430X ISA.

ນອກຈາກນັ້ນ, MCU-specific linker script ໄດ້ຖືກເພີ່ມໃສ່ເສັ້ນຄໍາສັ່ງ linker. ໄດ້
ຊື່ script ແມ່ນຊື່ຂອງ MCU ກັບ .ld ຕໍ່ທ້າຍ. ສະ​ແດງ​ໃຫ້​ເຫັນ​ດັ່ງ​ນັ້ນ​ -mmcu=xxx on
ໄດ້ gcc ເສັ້ນຄໍາສັ່ງກໍານົດສັນຍາລັກ C preprocessor "__XXX__" ແລະເຮັດໃຫ້ເກີດຕົວເຊື່ອມຕໍ່
ເພື່ອຊອກຫາ script ທີ່ເອີ້ນວ່າ xxx.ld.

ທາງ​ເລືອກ​ນີ້​ຍັງ​ໄດ້​ຖືກ​ສົ່ງ​ຕໍ່​ກັບ​ການ​ປະ​ກອບ​.

-mcpu=
ລະບຸ ISA ທີ່ຈະໃຊ້. ຄ່າທີ່ຍອມຮັບແມ່ນ msp430, msp430x ແລະ msp430xv2. ນີ້
ຕົວເລືອກຖືກປະຕິເສດ. ໄດ້ -mmcu= ທາງເລືອກຄວນຈະຖືກນໍາໃຊ້ເພື່ອເລືອກ ISA.

- ຊິມ
ເຊື່ອມຕໍ່ກັບຫ້ອງສະຫມຸດ runtime simulator ແລະ linker script. ລົບລ້າງສະຄຣິບໃດໆກໍຕາມ
ຈະ​ໄດ້​ຮັບ​ການ​ຄັດ​ເລືອກ​ໂດຍ​ -mmcu= ທາງເລືອກ.

- ຂະ​ຫນາດ​ໃຫຍ່​
ໃຊ້ທີ່ຢູ່ແບບຈໍາລອງຂະຫນາດໃຫຍ່ (20-bit pointers, 32-bit "size_t").

-msall
ໃຊ້ທີ່ຢູ່ແບບຈໍາລອງຂະຫນາດນ້ອຍ (16-bit pointers, 16-bit "size_t").

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

mhwmult=
ອະທິບາຍປະເພດຂອງຮາດແວຄູນທີ່ຮອງຮັບໂດຍເປົ້າໝາຍ. ຄ່າທີ່ຍອມຮັບແມ່ນ
none ສໍາ​ລັບ​ການ​ບໍ່​ມີ​ຮາດ​ແວ​ຄູນ​, 16bit ສໍາລັບຕົ້ນສະບັບ 16-bit-ເທົ່ານັ້ນທີ່ສະຫນັບສະຫນູນ multiply
ໂດຍ MCUs ຕົ້ນ. 32bit ສໍາລັບ 16/32-bit multiply ສະຫນັບສະຫນູນໂດຍ MCUs ຕໍ່ມາແລະ ຊຸດ f5
ສໍາລັບ 16/32-bit multiply ສະຫນັບສະຫນູນໂດຍ F5-series MCUs. ມູນຄ່າຂອງ ອັດຕະໂນມັດ ຍັງສາມາດເປັນເຊັ່ນກັນ
ມອບໃຫ້. ອັນນີ້ບອກ GCC ໃຫ້ຫັກການຮອງຮັບຮາດແວຄູນໂດຍອີງຕາມຊື່ MCU
ສະຫນອງໃຫ້ໂດຍ -mmcu ທາງເລືອກ. ຖ້າບໍ່ມີ -mmcu ທາງ​ເລືອກ​ແມ່ນ​ໄດ້​ລະ​ບຸ​ໄວ້​ຫຼັງ​ຈາກ​ນັ້ນ​ 32bit ຮາດແວ
ສະຫນັບສະຫນູນຄູນແມ່ນສົມມຸດ. ອັດຕະໂນມັດ ແມ່ນການຕັ້ງຄ່າເລີ່ມຕົ້ນ.

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

ຮາດແວ multiply routines ປິດການທໍາງານຂັດຂວາງໃນຂະນະທີ່ແລ່ນແລະຟື້ນຟູ
ສະຖານະຂັດຂວາງກ່ອນຫນ້າເມື່ອພວກເຂົາສໍາເລັດ. ນີ້ເຮັດໃຫ້ພວກເຂົາປອດໄພໃນການນໍາໃຊ້ພາຍໃນ
ຂັດຂວາງຕົວຈັດການເຊັ່ນດຽວກັນກັບລະຫັດປົກກະຕິ.

- minrt
ເປີດໃຊ້ສະພາບແວດລ້ອມ runtime ຕໍາ່ສຸດທີ່ - ບໍ່ມີ static initializers ຫຼື
ຜູ້ກໍ່ສ້າງ. ອັນນີ້ມີຈຸດປະສົງສຳລັບອຸປະກອນທີ່ຈຳກັດຄວາມຈຳ. compiler ປະ​ກອບ​ມີ​
ສັນ​ຍາ​ລັກ​ພິ​ເສດ​ໃນ​ບາງ​ວັດ​ຖຸ​ທີ່​ບອກ​ຕົວ​ເຊື່ອມ​ຕໍ່​ແລະ runtime ທີ່​ລະ​ຫັດ fragments
ແມ່ນຕ້ອງການ.

NDS32 ທາງເລືອກໃນການ

ຕົວເລືອກເຫຼົ່ານີ້ຖືກກໍານົດໄວ້ສໍາລັບການຈັດຕັ້ງປະຕິບັດ NDS32:

-mbig-endian
ສ້າງລະຫັດໃນຮູບແບບ big-endian.

-mlittle-endian
ສ້າງລະຫັດໃນຮູບແບບ little-endian.

-mreduced-regs
ໃຊ້ການລົງທະບຽນທີ່ຫຼຸດລົງສໍາລັບການຈັດສັນການລົງທະບຽນ.

-mful-regs
ໃຊ້ການລົງທະບຽນຊຸດເຕັມສໍາລັບການຈັດສັນການລົງທະບຽນ.

-mcmov
ສ້າງຄໍາແນະນໍາການເຄື່ອນຍ້າຍຕາມເງື່ອນໄຂ.

-mno-cmov
ຢ່າສ້າງຄໍາແນະນໍາການເຄື່ອນຍ້າຍຕາມເງື່ອນໄຂ.

-mperf-ext
ສ້າງຄໍາແນະນໍາການຂະຫຍາຍການປະຕິບັດ.

-mno-perf-ext
ຢ່າສ້າງຄໍາແນະນໍາການຂະຫຍາຍການປະຕິບັດ.

-mv3push
ສ້າງຄໍາແນະນໍາ v3 push25/pop25.

-mno-v3push
ຢ່າສ້າງຄໍາແນະນໍາ v3 push25/pop25.

-m16-ບິດ
ສ້າງຄໍາແນະນໍາ 16-bit.

-mno-16-bit
ຢ່າສ້າງຄໍາແນະນໍາ 16-bit.

-misr-vector-size=num
ລະບຸຂະໜາດຂອງແຕ່ລະ vector interrupt, ເຊິ່ງຈະຕ້ອງເປັນ 4 ຫຼື 16.

-mcache-block-size=num
ລະບຸຂະຫນາດຂອງແຕ່ລະ cache block, ເຊິ່ງຈະຕ້ອງເປັນພະລັງງານ 2 ລະຫວ່າງ 4 ແລະ 512.

- ມີນາ=ໂຄ້ງ
ລະບຸຊື່ຂອງສະຖາປັດຕະຍະກໍາເປົ້າຫມາຍ.

-mcmodel=code-model
ກໍານົດຮູບແບບລະຫັດເປັນຫນຶ່ງຂອງ

ຂະຫນາດນ້ອຍ
ຂໍ້ມູນທັງໝົດ ແລະສ່ວນຂໍ້ມູນທີ່ອ່ານເທົ່ານັ້ນຕ້ອງຢູ່ໃນພື້ນທີ່ທີ່ຢູ່ 512KB.
ພາກສ່ວນຂໍ້ຄວາມຕ້ອງຢູ່ພາຍໃນພື້ນທີ່ທີ່ຢູ່ 16MB.

ຂະຫນາດກາງ
ພາກສ່ວນຂໍ້ມູນຕ້ອງຢູ່ພາຍໃນ 512KB ໃນຂະນະທີ່ສ່ວນຂໍ້ມູນທີ່ສາມາດອ່ານໄດ້ເທົ່ານັ້ນ
ພາຍໃນພື້ນທີ່ທີ່ຢູ່ 4GB. ພາກສ່ວນຂໍ້ຄວາມຄວນຈະຍັງຢູ່ໃນ 16MB
ທີ່ຢູ່ ທີ່ຢູ່.

ຂະຫນາດໃຫຍ່
ພາກສ່ວນຂໍ້ຄວາມ ແລະຂໍ້ມູນທັງໝົດສາມາດຢູ່ໃນພື້ນທີ່ທີ່ຢູ່ 4GB.

-mctor-dtor
ເປີດໃຊ້ຄຸນສົມບັດຕົວສ້າງ/ຕົວທຳລາຍ.

-mrelax
ຕົວເຊື່ອມຕໍ່ຄໍາແນະນໍາເພື່ອຜ່ອນຄາຍຄໍາແນະນໍາ.

Nios II ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ແມ່ນທາງເລືອກທີ່ກໍານົດສໍາລັບໂປເຊດເຊີ Altera Nios II.

-G num
ວາງວັດຖຸທົ່ວໂລກ ແລະສະຖິດໜ້ອຍກວ່າ ຫຼືເທົ່າກັບ num bytes ເຂົ້າໄປໃນຂໍ້ມູນຂະຫນາດນ້ອຍຫຼື
ພາກສ່ວນ BSS ແທນທີ່ຈະເປັນຂໍ້ມູນປົກກະຕິຫຼືພາກສ່ວນ BSS. ຄ່າເລີ່ມຕົ້ນຂອງ num is
8.

-mgpopt=ທາງເລືອກ
-mgpopt
-mno-gpopt
ສ້າງ (ບໍ່ສ້າງ) ການເຂົ້າເຖິງພີ່ນ້ອງຂອງ GP. ຕໍ່ໄປນີ້ ທາງເລືອກ ຊື່ແມ່ນ
ຮັບຮູ້:

none
ຢ່າສ້າງການເຂົ້າເຖິງ GP-relative.

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

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

ຂໍ້ມູນ
ສ້າງການເຂົ້າເຖິງ GP-relative ສໍາລັບວັດຖຸຂໍ້ມູນທັງຫມົດໃນໂຄງການ. ຖ້າທ່ານໃຊ້
ທາງເລືອກນີ້, ຂໍ້ມູນທັງຫມົດແລະສ່ວນ BSS ຂອງໂຄງການຂອງທ່ານຕ້ອງເຫມາະໃນ 64K ຂອງ
ຄວາມຊົງຈໍາແລະທ່ານຕ້ອງໃຊ້ຕົວເຊື່ອມຕໍ່ທີ່ເຫມາະສົມເພື່ອຈັດສັນໃຫ້ເຂົາເຈົ້າພາຍໃນ
ຂອບເຂດທີ່ຢູ່ຂອງຕົວຊີ້ທົ່ວໂລກ.

ທັງຫມົດ ສ້າງທີ່ຢູ່ GP-relative ສໍາລັບຕົວຊີ້ຟັງຊັນເຊັ່ນດຽວກັນກັບຕົວຊີ້ຂໍ້ມູນ. ຖ້າ
ທ່ານໃຊ້ທາງເລືອກນີ້, ຂໍ້ຄວາມທັງຫມົດ, ຂໍ້ມູນ, ແລະສ່ວນ BSS ຂອງໂຄງການຂອງທ່ານຕ້ອງ
ພໍດີກັບຫນ່ວຍຄວາມຈໍາ 64K ແລະທ່ານຕ້ອງໃຊ້ຕົວເຊື່ອມຕໍ່ທີ່ເຫມາະສົມເພື່ອຈັດສັນ
ພວກມັນຢູ່ໃນຂອບເຂດທີ່ຢູ່ຂອງຕົວຊີ້ທົ່ວໂລກ.

-mgpopt ເທົ່າກັບ -mgpopt=ທ້ອງຖິ່ນ, ແລະ -mno-gpopt ເທົ່າກັບ -mgpopt=ບໍ່ມີ.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -mgpopt ຍົກເວັ້ນເວລາ -fpic or -fPIC ໄດ້​ລະ​ບຸ​ໄວ້​ເພື່ອ​ສ້າງ​ຕໍາ​ແຫນ່ງ -
ລະຫັດເອກະລາດ. ໃຫ້ສັງເກດວ່າ Nios II ABI ບໍ່ອະນຸຍາດໃຫ້ GP-relative ເຂົ້າເຖິງ
ຫ້ອງສະໝຸດທີ່ແບ່ງປັນ.

ທ່ານອາດຈະຈໍາເປັນຕ້ອງໄດ້ກໍານົດ -mno-gpopt ຢ່າງຊັດເຈນໃນເວລາທີ່ການກໍ່ສ້າງໂຄງການທີ່ປະກອບມີ
ຈໍານວນຂະຫນາດໃຫຍ່ຂອງຂໍ້ມູນຂະຫນາດນ້ອຍ, ລວມທັງພາກສ່ວນຂໍ້ມູນ GOT ຂະຫນາດໃຫຍ່. ໃນກໍລະນີດັ່ງກ່າວນີ້, ໄດ້
16-bit offset ສໍາລັບທີ່ຢູ່ GP-relative ອາດຈະບໍ່ມີຂະຫນາດໃຫຍ່ພຽງພໍທີ່ຈະອະນຸຍາດໃຫ້ເຂົ້າເຖິງ
ພາກສ່ວນຂໍ້ມູນຂະຫນາດນ້ອຍທັງຫມົດ.

-mel
-ເມບ
ສ້າງລະຫັດ little-endian (ຄ່າເລີ່ມຕົ້ນ) ຫຼື big-endian (ທົດລອງ) ຕາມລໍາດັບ.

-mbypass-cache
-mno-bypass-cache
ບັງຄັບໃຫ້ຄໍາແນະນໍາການໂຫຼດ ແລະເກັບຮັກສາທັງໝົດເພື່ອຂ້າມແຄດສະເໝີໂດຍການໃຊ້ຕົວແປ I/O ຂອງ
ຄໍາແນະນໍາ. ຄ່າເລີ່ມຕົ້ນບໍ່ແມ່ນເພື່ອ bypass cache.

-mno-cache-volatile
-mcache-volatile
ການເຂົ້າເຖິງໜ່ວຍຄວາມຈຳທີ່ປ່ຽນແປງໄດ້ຂ້າມແຄດໂດຍໃຊ້ຕົວແປ I/O ຂອງການໂຫຼດ ແລະເກັບຮັກສາ
ຄໍາແນະນໍາ. ຄ່າເລີ່ມຕົ້ນບໍ່ແມ່ນເພື່ອ bypass cache.

-mno-fast-sw-div
-mfast-sw-div
ຢ່າໃຊ້ການແບ່ງໄວຕາມຕາຕະລາງສໍາລັບຕົວເລກນ້ອຍໆ. ຄ່າເລີ່ມຕົ້ນແມ່ນໃຊ້ໄວ
ແບ່ງຢູ່ -O3 ແລະຂ້າງເທິງ.

-mno-hw-mul
-mhw-mul
-mno-hw-mulx
-mhw-mulx
-mno-hw-div
-mhw-div
ເປີດໃຊ້ຫຼືປິດການໃຊ້ "mul", "mulx" ແລະ "div" ຄອບຄົວຂອງຄໍາແນະນໍາໂດຍ
ສັງລວມ. ຄ່າເລີ່ມຕົ້ນແມ່ນເພື່ອປ່ອຍ "mul" ແລະບໍ່ປ່ອຍ "div" ແລະ "mulx".

-mcustom-insn=N
-mno- custom-insn
ແຕ່ລະຄົນ -mcustom-insn=N ທາງ​ເລືອກ​ເຮັດ​ໃຫ້​ການ​ນໍາ​ໃຊ້​ຄໍາ​ແນະ​ນໍາ​ທີ່​ກໍາ​ນົດ​ເອງ​ທີ່​ມີ​ການ​ເຂົ້າ​ລະ​ຫັດ​ N ໃນເວລາທີ່
ການສ້າງລະຫັດທີ່ໃຊ້ insnທີ່ຢູ່ ຍົກ​ຕົວ​ຢ່າງ, -mcustom-fadds=253 ສ້າງ custom
ຄໍາ​ແນະ​ນໍາ 253 ສໍາ​ລັບ​ຈຸດ​ດຽວ​ຄວາມ​ແມ່ນ​ຍໍາ​ທີ່​ເລື່ອນ​ໄດ້​ເພີ່ມ​ການ​ດໍາ​ເນີນ​ງານ​ແທນ​ທີ່​ຈະ​ເປັນ​
ພຶດຕິກຳເລີ່ມຕົ້ນຂອງການໃຊ້ການໂທຫ້ອງສະໝຸດ.

ຄຸນຄ່າຕໍ່ໄປນີ້ຂອງ insn ໄດ້ຮັບການສະຫນັບສະຫນູນ. ຍົກ​ເວັ້ນ​ດັ່ງ​ທີ່​ໄດ້​ບັນ​ທຶກ​ໄວ້​ເປັນ​ຢ່າງ​ອື່ນ​, floating-point​
ການດໍາເນີນງານຄາດວ່າຈະຖືກປະຕິບັດກັບ IEEE 754 semantics ປົກກະຕິແລະ
ກົງກັບຕົວປະຕິບັດການ C ຫຼືທຽບເທົ່າ GCC ຟັງຊັນໃນຕົວ.

ຈຸດລອຍຄວາມຊັດເຈນດຽວ:

fadds, fsubs, fdivs, fmuls
ການດໍາເນີນງານເລກເລກຖານສອງ.

fnegs
ການປະຕິເສດທີ່ບໍ່ເປັນລະບຽບ.

fabss
Unary ຄ່າຢ່າງແທ້ຈິງ.

fcmpeqs, fcmpges, fcmpgts, fcmples, fcmplts, fcmpnes
ການປະຕິບັດການປຽບທຽບ.

fmins, fmaxs
ຈຸດເລື່ອນຂັ້ນຕໍ່າສຸດ ແລະສູງສຸດ. ຄໍາແນະນໍາເຫຼົ່ານີ້ແມ່ນພຽງແຕ່ສ້າງຂຶ້ນຖ້າຫາກວ່າ
-ffinite-math-ເທົ່ານັ້ນ ຖືກກໍານົດ.

fsqrts
ການດໍາເນີນງານຂອງຮາກສອງ Unary.

fcoss, fsins, ftans, ໄຂມັນ, fexps, ໄມ້ຄ້ອນເທົ້າ
ຟັງຊັນ trigonometric ຈຸດລອຍ ແລະເລກກຳລັງ. ຄໍາແນະນໍາເຫຼົ່ານີ້ແມ່ນ
ສ້າງຂຶ້ນພຽງແຕ່ຖ້າຫາກວ່າ -funsafe-math-optimizations ຍັງ​ໄດ້​ລະ​ບຸ​ໄວ້​.

ຈຸດລອຍທີ່ມີຄວາມຊັດເຈນສອງເທົ່າ:

faddd, fsubd, fdivd, fmuld
ການດໍາເນີນງານເລກເລກຖານສອງ.

fnegd
ການປະຕິເສດທີ່ບໍ່ເປັນລະບຽບ.

fabsd
Unary ຄ່າຢ່າງແທ້ຈິງ.

fcmpeqd, fcmpged, fcmpgtd, fcmpled, fcmpltd, fcmpned
ການປະຕິບັດການປຽບທຽບ.

ໃຈ, fmaxd
ຄວາມແມ່ນຍໍາສອງເທົ່າ ແລະສູງສຸດ. ຄໍາແນະນໍາເຫຼົ່ານີ້ແມ່ນພຽງແຕ່ສ້າງຂຶ້ນຖ້າຫາກວ່າ
-ffinite-math-ເທົ່ານັ້ນ ຖືກກໍານົດ.

fsqrtd
ການດໍາເນີນງານຂອງຮາກສອງ Unary.

fcosd, fsin, ftand, ໄຂມັນ, fexpd, flogd
ຟັງຊັນ trigonometric ຄວາມແມ່ນຍໍາສອງເທົ່າ ແລະ exponential. ຄໍາແນະນໍາເຫຼົ່ານີ້ແມ່ນ
ສ້າງຂຶ້ນພຽງແຕ່ຖ້າຫາກວ່າ -funsafe-math-optimizations ຍັງ​ໄດ້​ລະ​ບຸ​ໄວ້​.

ການສົນທະນາ:

fextsd
ການປ່ຽນຈາກຄວາມແມ່ນຍໍາດຽວໄປສູ່ຄວາມແມ່ນຍໍາສອງເທົ່າ.

ftruncds
ການແປງຈາກຄວາມແມ່ນຍໍາສອງເທົ່າໄປສູ່ຄວາມແມ່ນຍໍາດຽວ.

ແກ້ໄຂ, ແກ້ໄຂ, fixdi, fixdu
ການ​ປ່ຽນ​ແປງ​ຈາກ​ຈຸດ​ທີ່​ເລື່ອນ​ໄປ​ເປັນ​ປະ​ເພດ​ຈໍາ​ນວນ​ເຕັມ​ທີ່​ເຊັນ​ຫຼື​ບໍ່​ໄດ້​ລົງ​ນາມ​, ກັບ​
ຕັດໄປຫາສູນ.

ໄດ້ຕະຫຼອດ
ການປ່ຽນຈາກຈຸດເລື່ອນຄວາມຊັດເຈນດຽວໄປຫາຈຳນວນເຕັມທີ່ລົງລາຍເຊັນ, ໝູນເປັນຈຸດ
ຈຳນວນທີ່ໃກ້ທີ່ສຸດ ແລະ ຜູກພັນຢູ່ຫ່າງຈາກສູນ. ນີ້​ສອດ​ຄ່ອງ​ກັບ
"__builtin_lroundf" ຟັງຊັນເມື່ອ -fno-math-errno ຖືກນໍາໃຊ້.

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

ນອກຈາກນັ້ນ, ຄໍາແນະນໍາການໂອນຍ້າຍຕໍ່ໄປນີ້ທັງຫມົດສໍາລັບການລົງທະບຽນພາຍໃນ X ແລະ Y
ຕ້ອງໄດ້ຮັບການສະຫນອງໃຫ້ເພື່ອນໍາໃຊ້ໃດໆຂອງຄໍາແນະນໍາ double-precision floating-point.
ຄໍາແນະນໍາທີ່ກໍາຫນົດເອງໃຊ້ເວລາສອງ operands ແຫຼ່ງ double-precision ຄາດວ່າຈະທໍາອິດ
operand ໃນ 64-bit register X. operand ອື່ນໆ (ຫຼືພຽງແຕ່ operand ຂອງ unary ເປັນ.
ການດໍາເນີນງານ) ແມ່ນໃຫ້ຄໍາແນະນໍາກ່ຽວກັບເລກຄະນິດສາດແບບກໍານົດເອງທີ່ມີຫນ້ອຍທີ່ສຸດ
ເຄິ່ງຫນຶ່ງຂອງການລົງທະບຽນແຫຼ່ງ src1 ແລະເຄິ່ງຫນຶ່ງທີ່ສໍາຄັນທີ່ສຸດໃນ src2. ປະເພນີ
ຄໍາແນະນໍາທີ່ໃຫ້ຜົນຕອບແທນຄວາມຊັດເຈນສອງເທົ່າສົ່ງຄືນຄວາມສໍາຄັນທີ່ສຸດ 32
bits ໃນທະບຽນປາຍທາງ ແລະອີກເຄິ່ງຫນຶ່ງຢູ່ໃນທະບຽນ 32-bit Y. GCC
ອັດຕະໂນມັດສ້າງລໍາດັບລະຫັດທີ່ຈໍາເປັນເພື່ອຂຽນລົງທະບຽນ X ແລະ / ຫຼືອ່ານ
ລົງທະບຽນ Y ເມື່ອຄໍາແນະນໍາຈຸດລອຍທີ່ມີຄວາມຊັດເຈນສອງເທົ່າຖືກນໍາໃຊ້.

fwrx
ຂຽນ src1 ເຂົ້າໄປໃນເຄິ່ງຫນຶ່ງທີ່ສໍາຄັນຫນ້ອຍຂອງ X ແລະ src2 ເຂົ້າໄປໃນຄວາມສໍາຄັນທີ່ສຸດ
ເຄິ່ງຫນຶ່ງຂອງ X.

fwry
ຂຽນ src1 ເຂົ້າໄປໃນ Y.

frdxhi, frdxlo
ອ່ານເກືອບຫຼືຫນ້ອຍທີ່ສຸດ (ຕາມລໍາດັບ) ເຄິ່ງຫນຶ່ງທີ່ສໍາຄັນຂອງ X ແລະເກັບໄວ້ໃນ ຈຸດຫມາຍປາຍທາງ.

frdy
ອ່ານມູນຄ່າ Y ແລະເກັບໄວ້ໃນ ຈຸດຫມາຍປາຍທາງ.

ໃຫ້ສັງເກດວ່າທ່ານສາມາດໄດ້ຮັບການຄວບຄຸມໃນທ້ອງຖິ່ນຫຼາຍກວ່າການຜະລິດຂອງ Nios II custom
ຄໍາແນະນໍາໂດຍໃຊ້ "ເປົ້າຫມາຍ ("custom-insn=N")" ແລະ "ເປົ້າ​ຫມາຍ("no-custom-insn")"
ຄຸນ​ລັກ​ສະ​ນະ​ການ​ທໍາ​ງານ​ຫຼື pragmas​.

-mcustom-fpu-cfg=ຊື່
ທາງ​ເລືອກ​ນີ້​ເຮັດ​ໃຫ້​ການ​ຕັ້ງ​ຄ່າ​ທີ່​ກໍາ​ນົດ​ໄວ້​ລ່ວງ​ຫນ້າ​, ມີ​ຊື່​ຂອງ​ການ​ເຂົ້າ​ລະ​ຫັດ​ຄໍາ​ສັ່ງ​ທີ່​ກໍາ​ນົດ​ເອງ (ເບິ່ງ​
-mcustom-insn ຂ້າງເທິງ). ໃນປັດຈຸບັນ, ຊຸດຕໍ່ໄປນີ້ຖືກກໍານົດ:

-mcustom-fpu-cfg=60-1 ເທົ່າກັບ: -mcustom-fmuls=252 -mcustom-fadds=253
-mcustom-fsubs=254 -fsingle-precision-constant

-mcustom-fpu-cfg=60-2 ເທົ່າກັບ: -mcustom-fmuls=252 -mcustom-fadds=253
-mcustom-fsubs=254 -mcustom-fdivs=255 -fsingle-precision-constant

-mcustom-fpu-cfg=72-3 ເທົ່າກັບ: -mcustom-floatus=243 -mcustom-fixsi=244
-mcustom-floatis=245 -mcustom-fcmmpgts=246 -mcustom-fcmples=249 -mcustom-fcmpeqs=250
-mcustom-fcmpnes=251 -mcustom-fmuls=252 -mcustom-fadds=253 -mcustom-fsubs=254
-mcustom-fdivs=255 -fsingle-precision-constant

ການ​ມອບ​ໝາຍ​ການ​ສັ່ງ​ສອນ​ທີ່​ກຳ​ນົດ​ໄວ້​ໃຫ້​ໂດຍ​ບຸກ​ຄົນ -mcustom-insn= ຍົກເລີກທາງເລືອກ
ທີ່ມອບໃຫ້ໂດຍ -mcustom-fpu-cfg=, ໂດຍບໍ່ສົນເລື່ອງຂອງຄໍາສັ່ງຂອງທາງເລືອກໃນການ
ບັນທັດຄໍາສັ່ງ.

ໃຫ້ສັງເກດວ່າທ່ານສາມາດໄດ້ຮັບການຄວບຄຸມທ້ອງຖິ່ນຫຼາຍກວ່າການເລືອກການຕັ້ງຄ່າ FPU ໂດຍ
ໂດຍໃຊ້ "ເປົ້າໝາຍ("custom-fpu-cfg=ຊື່")" function attribute ຫຼື pragma.

ເຫຼົ່ານີ້ເພີ່ມເຕີມ -m ທາງ​ເລືອກ​ທີ່​ມີ​ຢູ່​ສໍາ​ລັບ​ເປົ້າ​ຫມາຍ Altera Nios II ELF (ໂລຫະ​ເປົ່າ​)​:

- mhal
ເຊື່ອມຕໍ່ກັບ HAL BSP. ນີ້ສະກັດກັ້ນການເຊື່ອມຕໍ່ກັບການເລີ່ມຕົ້ນ C runtime ທີ່ GCC ສະຫນອງ
ແລະ​ລະ​ຫັດ​ການ​ສິ້ນ​ສຸດ​ລົງ​, ແລະ​ໂດຍ​ປົກ​ກະ​ຕິ​ໄດ້​ຖືກ​ນໍາ​ໃຊ້​ຮ່ວມ​ກັບ​ -msys-crt0= ກໍານົດ
ທີ່ຕັ້ງຂອງລະຫັດເລີ່ມຕົ້ນສຳຮອງທີ່ສະໜອງໃຫ້ໂດຍ HAL BSP.

-msmallc
ເຊື່ອມ​ຕໍ່​ກັບ​ສະ​ບັບ​ຈໍາ​ກັດ​ຂອງ​ຫ້ອງ​ສະ​ຫມຸດ C​, -lsmallc, ແທນທີ່ຈະ Newlib.

-msys-crt0=startfile
startfile ແມ່ນຊື່ໄຟລ໌ຂອງ startfile (crt0) ເພື່ອໃຊ້ເມື່ອເຊື່ອມຕໍ່. ທາງເລືອກນີ້
ແມ່ນ​ພຽງ​ແຕ່​ເປັນ​ປະ​ໂຫຍດ​ຮ່ວມ​ກັບ​ - mhal.

-msys-lib=systemlib
systemlib ແມ່ນຊື່ຫ້ອງສະຫມຸດຂອງຫ້ອງສະຫມຸດທີ່ສະຫນອງການໂທລະບົບລະດັບຕ່ໍາ
ຕ້ອງການໂດຍຫ້ອງສະຫມຸດ C, ຕົວຢ່າງ "ອ່ານ" ແລະ "ຂຽນ". ຕົວເລືອກນີ້ມັກຈະຖືກນໍາໃຊ້ເພື່ອ
ເຊື່ອມຕໍ່ກັບຫ້ອງສະຫມຸດທີ່ສະຫນອງໂດຍ HAL BSP.

Nvidia PTX ທາງເລືອກໃນການ

ຕົວເລືອກເຫຼົ່ານີ້ຖືກກໍານົດສໍາລັບ Nvidia PTX:

-m32
-m64
ສ້າງລະຫັດສໍາລັບ 32-bit ຫຼື 64-bit ABI.

-mmainkernel
ເຊື່ອມຕໍ່ໃນລະຫັດສໍາລັບ __ kernel ຫຼັກ. ນີ້ແມ່ນສໍາລັບການຢືນຢູ່ຄົນດຽວແທນທີ່ຈະ offloading
ການປະຫານຊີວິດ.

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 ເທົ່ານັ້ນ. ໄດ້ ລາຄາ 78 ບາດ ທາງເລືອກແມ່ນ
ສຳລັບການຄູນຮາດແວມາດຕະຖານທີ່ກຳນົດໄວ້ໃນຄູ່ມືຊອບແວ RL78.

-m64bit-ສອງເທົ່າ
-m32bit-ສອງເທົ່າ
ເຮັດໃຫ້ປະເພດຂໍ້ມູນ "ສອງ" ເປັນ 64 bits (-m64bit-ສອງເທົ່າ) ຫຼື 32 bits (-m32bit-ສອງເທົ່າ)
ໃນຂະຫນາດ. ຄ່າເລີ່ມຕົ້ນແມ່ນ -m32bit-ສອງເທົ່າ.

IBM RS / 6000 ແລະ ພະລັງງານ PC ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ -m ທາງເລືອກແມ່ນຖືກກໍານົດສໍາລັບ IBM RS/6000 ແລະ 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.
ການ​ລະ​ບຸ -mcpu=cpu_type overrides ສະເພາະຂອງທາງເລືອກເຫຼົ່ານີ້. ພວກເຮົາ
ແນະນໍາໃຫ້ທ່ານໃຊ້ -mcpu=cpu_type ທາງເລືອກແທນທີ່ຈະເປັນທາງເລືອກທີ່ລະບຸໄວ້ຂ້າງເທິງ.

ການລະບຸ -mpowerpc-gpopt ອະນຸຍາດໃຫ້ GCC ໃຊ້ສະຖາປັດຕະຍະກຳ PowerPC ທາງເລືອກ
ຄໍາແນະນໍາໃນກຸ່ມຈຸດປະສົງທົ່ວໄປ, ລວມທັງຮາກສີ່ຫລ່ຽມທີ່ເລື່ອນໄດ້.
ການລະບຸ -mpowerpc-gfxopt ອະນຸຍາດໃຫ້ 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.

-mcpu=cpu_type
ກໍາ​ນົດ​ປະ​ເພດ​ສະ​ຖາ​ປັດ​ຕະ​, ລົງ​ທະ​ບຽນ​ການ​ນໍາ​ໃຊ້​, ແລະ​ການ​ກໍາ​ນົດ​ເວ​ລາ​ຄໍາ​ແນະ​ນໍາ​ການ​ກໍາ​ນົດ​ເວ​ລາ​ສໍາ​ລັບ​ການ​
ປະເພດເຄື່ອງຈັກ 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,
e5500, e6500, ec603e, G3, G4, G5, titan, ພະລັງງານ3, ພະລັງງານ4, ພະລັງງານ5, ພະລັງງານ 5+, ພະລັງງານ6,
ພະລັງງານ 6x, ພະລັງງານ7, ພະລັງງານ8, ພະລັງງານ, powerpc64, powerpc64le, ແລະ rs64.

-mcpu=powerpc, -mcpu=powerpc64, ແລະ -mcpu=powerpc64le ລະບຸ PowerPC 32-bit ອັນບໍລິສຸດ
(ທັງ endian), PowerPC endian ໃຫຍ່ 64-bit ແລະ 64-bit ນ້ອຍ endian PowerPC
ປະເພດຂອງເຄື່ອງຈັກສະຖາປັດຕະ, ທີ່ມີຮູບແບບໂປເຊດເຊີທີ່ເຫມາະສົມ, ໂດຍທົ່ວໄປສົມມຸດວ່າສໍາລັບ
ຈຸດ​ປະ​ສົງ​ການ​ກໍາ​ນົດ​ເວ​ລາ​.

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

ໄດ້ -mcpu ທາງເລືອກອັດຕະໂນມັດເປີດຫຼືປິດຕົວເລືອກຕໍ່ໄປນີ້:

-maltivec -mfprnd -mhard-float -mmfcrf - ຫຼາຍ -mpopcntb -mpopcntd -mpowerpc64
-mpowerpc-gpopt -mpowerpc-gfxopt -msingle-float -mdouble-float -msimple-fpu -mstring
- mmulhw -mdlmzb -mmfpgpr -mvsx -mcrypto -mdirect-ຍ້າຍ -mpower8-fusion
-mpower8-vector -mquad ຄວາມ​ຈໍາ​ -mquad-memory-atomic

ຕົວເລືອກສະເພາະທີ່ກຳນົດໄວ້ສຳລັບ CPU ໃດໜຶ່ງແຕກຕ່າງກັນລະຫວ່າງລຸ້ນ compiler,
ຂຶ້ນກັບການຕັ້ງຄ່າອັນໃດທີ່ເບິ່ງຄືວ່າຈະຜະລິດລະຫັດທີ່ດີທີ່ສຸດສໍາລັບ CPU ນັ້ນ; ມັນບໍ່
ຈໍາເປັນຕ້ອງສະທ້ອນໃຫ້ເຫັນຄວາມສາມາດຕົວຈິງຂອງຮາດແວ. ຖ້າທ່ານຕ້ອງການຕັ້ງຄ່າ
ທາງ​ເລືອກ​ຂອງ​ບຸກ​ຄົນ​ທີ່​ມີ​ມູນ​ຄ່າ​ສະ​ເພາະ​ໃດ​ຫນຶ່ງ​, ທ່ານ​ອາດ​ຈະ​ລະ​ບຸ​ມັນ​ຫຼັງ​ຈາກ​ -mcpu ທາງເລືອກ,
ຄື -mcpu=970 -mno-altivec.

ໃນ AIX, ໄດ້ -maltivec ແລະ -mpowerpc64 ທາງ​ເລືອກ​ແມ່ນ​ບໍ່​ໄດ້​ເປີດ​ໃຊ້​ງານ​ຫຼື​ປິດ​ການ​ໃຊ້​ງານ​ໂດຍ​ -mcpu
ທາງເລືອກໃນປັດຈຸບັນເນື່ອງຈາກວ່າ AIX ບໍ່ໄດ້ຮັບການສະຫນັບສະຫນູນຢ່າງເຕັມທີ່ສໍາລັບທາງເລືອກເຫຼົ່ານີ້. ເຈົ້າອາດຈະ
ຍັງຄົງເປີດໃຊ້ງານ ຫຼືປິດການນຳໃຊ້ພວກມັນເປັນແຕ່ລະອັນຫາກທ່ານແນ່ໃຈວ່າມັນຈະໃຊ້ໄດ້ໃນຕົວຂອງທ່ານ
ສິ່ງແວດລ້ອມ.

-mtune=cpu_type
ກໍານົດຕົວກໍານົດການກໍານົດເວລາຄໍາແນະນໍາສໍາລັບປະເພດເຄື່ອງຈັກ cpu_type, ແຕ່ບໍ່ໄດ້ກໍານົດ
ປະເພດສະຖາປັດຕະຍະກໍາຫຼືລົງທະບຽນການນໍາໃຊ້, ເປັນ -mcpu=cpu_type ບໍ່. ຄ່າດຽວກັນສໍາລັບ
cpu_type ຖືກນໍາໃຊ້ສໍາລັບການ -mtune ເປັນສໍາລັບການ -mcpu. ຖ້າທັງສອງຖືກລະບຸ, ລະຫັດທີ່ສ້າງຂຶ້ນ
ໃຊ້ສະຖາປັດຕະຍະກໍາແລະທະບຽນທີ່ກໍານົດໄວ້ໂດຍ -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
ການຍົກລະດັບ.

ເມື່ອ​ໃດ​ -maltivec ຖືກນໍາໃຊ້, ແທນທີ່ຈະ -maltivec=le or -maltivec=be, ຄໍາສັ່ງອົງປະກອບ
ສໍາລັບ Altivec intrinsics ເຊັ່ນ "vec_splat", "vec_extract", ແລະ "vec_insert" ການຈັບຄູ່
ລຳດັບອົງປະກອບ array ທີ່ສອດຄ້ອງກັບ endianness ຂອງເປົ້າໝາຍ. ນັ້ນແມ່ນ, ອົງປະກອບ
zero ລະບຸອົງປະກອບຊ້າຍສຸດໃນ vector register ເມື່ອຕັ້ງເປົ້າໝາຍໃສ່ big-endian
ແພລະຕະຟອມ, ແລະກໍານົດອົງປະກອບທີ່ຖືກຕ້ອງທີ່ສຸດໃນທະບຽນ vector ໃນເວລາທີ່ກໍານົດເປົ້າຫມາຍ a
ເວທີ little-endian.

-maltivec=be
ສ້າງຄໍາແນະນໍາ Altivec ໂດຍໃຊ້ຄໍາສັ່ງອົງປະກອບ big-endian, ບໍ່ວ່າຈະເປັນ
ເປົ້າໝາຍແມ່ນໃຫຍ່ ຫຼືໜ້ອຍທີ່ສຸດ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນເມື່ອຕັ້ງເປົ້າໝາຍໃສ່ຕົວໃຫຍ່
ເວທີ.

ຄໍາສັ່ງອົງປະກອບຖືກນໍາໃຊ້ເພື່ອຕີຄວາມຫມາຍຕົວເລກອົງປະກອບໃນ Altivec intrinsics ເຊັ່ນ:
"vec_splat", "vec_extract", ແລະ "vec_insert". ໂດຍຄ່າເລີ່ມຕົ້ນ, ອົງປະກອບອາເຣທີ່ກົງກັນເຫຼົ່ານີ້
ຄໍາສັ່ງທີ່ສອດຄ້ອງກັນກັບ endianness ສໍາລັບເປົ້າຫມາຍ.

-maltivec=le
ສ້າງຄໍາແນະນໍາ Altivec ໂດຍໃຊ້ຄໍາສັ່ງອົງປະກອບພຽງເລັກນ້ອຍ endian, ບໍ່ວ່າຈະເປັນ
ເປົ້າໝາຍແມ່ນໃຫຍ່ ຫຼືໜ້ອຍທີ່ສຸດ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນເມື່ອຕັ້ງເປົ້າໝາຍໜ້ອຍໜຶ່ງ-
ເວທີ endian. ຕົວເລືອກນີ້ຖືກລະເລີຍໃນຂະນະນີ້ເມື່ອຕັ້ງເປົ້າໝາຍໃສ່ຄົນໃຫຍ່
ເວທີ.

ຄໍາສັ່ງອົງປະກອບຖືກນໍາໃຊ້ເພື່ອຕີຄວາມຫມາຍຕົວເລກອົງປະກອບໃນ Altivec intrinsics ເຊັ່ນ:
"vec_splat", "vec_extract", ແລະ "vec_insert". ໂດຍຄ່າເລີ່ມຕົ້ນ, ອົງປະກອບອາເຣທີ່ກົງກັນເຫຼົ່ານີ້
ຄໍາສັ່ງທີ່ສອດຄ້ອງກັນກັບ endianness ສໍາລັບເປົ້າຫມາຍ.

-mvrsave
-mno-vrsave
ສ້າງຄໍາແນະນໍາ VRSAVE ເມື່ອສ້າງລະຫັດ AltiVec.

-mgen-cell-microcode
ສ້າງ​ຄໍາ​ແນະ​ນໍາ​ຈຸ​ລະ​ພາກ​ໂທລະ​ສັບ​ມື​ຖື​.

-mwarn-cell-microcode
ເຕືອນເມື່ອການອອກຄຳສັ່ງໄມໂຄຣລະຫັດເຊລຖືກປ່ອຍອອກມາ. ຕົວຢ່າງຂອງ Cell microcode
ຄໍາແນະນໍາແມ່ນການປ່ຽນແປງທີ່ມີການປ່ຽນແປງ.

-msecure-plt
ສ້າງລະຫັດທີ່ອະນຸຍາດໃຫ້ ld ແລະ ດັ່ງນັ້ນ ເພື່ອສ້າງຫ້ອງສະຫມຸດທີ່ປະຕິບັດໄດ້ແລະແບ່ງປັນກັບ
ພາກສ່ວນ ".plt" ແລະ ".got" ທີ່ບໍ່ສາມາດປະຕິບັດໄດ້. ນີ້ແມ່ນທາງເລືອກ PowerPC 32-bit SYSV ABI.

-mbss-plt
ສ້າງລະຫັດທີ່ໃຊ້ BSS ".plt" ພາກສ່ວນທີ່ ດັ່ງນັ້ນ ຕື່ມຂໍ້ມູນໃສ່, ແລະຕ້ອງການ ".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 ໂດຍກົງໄດ້ຫຼາຍຂຶ້ນ
ຊຸດຄໍາແນະນໍາ.

-mcrypto
-mno-crypto
ເຮັດໃຫ້ການນໍາໃຊ້ (ປິດການທໍາງານ) ຂອງຫນ້າທີ່ສ້າງໃນທີ່ອະນຸຍາດໃຫ້ເຂົ້າເຖິງໂດຍກົງກັບ
ຄໍາແນະນໍາການເຂົ້າລະຫັດລັບທີ່ຖືກເພີ່ມເຂົ້າໃນເວີຊັ່ນ 2.07 ຂອງ PowerPC ISA.

-mdirect-ຍ້າຍ
-mno-direct-ຍ້າຍ
ສ້າງລະຫັດທີ່ໃຊ້ (ບໍ່ໃຊ້) ຄໍາແນະນໍາເພື່ອຍ້າຍຂໍ້ມູນລະຫວ່າງ
ທະບຽນຈຸດປະສົງທົ່ວໄປ ແລະທະບຽນ vector/scalar (VSX) ທີ່ຖືກເພີ່ມເຂົ້າໃນ
ເວີຊັ່ນ 2.07 ຂອງ PowerPC ISA.

-mpower8-fusion
-mno-power8-fusion
ສ້າງລະຫັດທີ່ຮັກສາ (ບໍ່ຮັກສາ) ການປະຕິບັດຈໍານວນເຕັມທີ່ຕິດກັນເພື່ອວ່າ
ຄໍາແນະນໍາສາມາດຖືກລວມເຂົ້າກັນຢູ່ໃນໂປເຊດເຊີ power8 ແລະຕໍ່ມາ.

-mpower8-vector
-mno-power8-vector
ສ້າງລະຫັດທີ່ໃຊ້ (ບໍ່ໃຊ້) vector ແລະ scalar ຄໍາແນະນໍາທີ່ເປັນ
ເພີ່ມໃນເວີຊັ່ນ 2.07 ຂອງ PowerPC ISA. ນອກ​ຈາກ​ນີ້​ຍັງ​ເຮັດ​ໃຫ້​ການ​ນໍາ​ໃຊ້​ຂອງ​ການ​ຕິດ​ຕັ້ງ​ໃນ​ຕົວ​
ທີ່ອະນຸຍາດໃຫ້ເຂົ້າເຖິງຄໍາແນະນໍາ vector ໄດ້ໂດຍກົງ.

-mquad ຄວາມ​ຈໍາ​
-mno-quad-memory
ສ້າງລະຫັດທີ່ໃຊ້ (ບໍ່ໃຊ້) ຄໍາແນະນໍາຄວາມຊົງຈໍາຂອງຄໍາທີ່ບໍ່ແມ່ນປະລໍາມະນູ quad.
ໄດ້ -mquad ຄວາມ​ຈໍາ​ ທາງ​ເລືອກ​ຮຽກ​ຮ້ອງ​ໃຫ້​ມີ​ການ​ນໍາ​ໃຊ້​ຮູບ​ແບບ 64-bit​.

-mquad-memory-atomic
-mno-quad-memory-atomic
ສ້າງລະຫັດທີ່ໃຊ້ (ບໍ່ໃຊ້) ຄໍາແນະນໍາກ່ຽວກັບຄວາມຊົງຈໍາຂອງຄໍາ quad ປະລໍາມະນູ. ໄດ້
-mquad-memory-atomic ທາງ​ເລືອກ​ຮຽກ​ຮ້ອງ​ໃຫ້​ມີ​ການ​ນໍາ​ໃຊ້​ຮູບ​ແບບ 64-bit​.

-mupper-regs-df
-mno-upper-regs-df
ສ້າງລະຫັດທີ່ໃຊ້ (ບໍ່ໃຊ້) scalar double precision ຄໍາແນະນໍາທີ່
ເປົ້າໝາຍທັງໝົດ 64 ທະບຽນໃນຊຸດທະບຽນຈຸດລອຍ vector/scalar ທີ່ເປັນ
ເພີ່ມໃນເວີຊັ່ນ 2.06 ຂອງ PowerPC ISA. -mupper-regs-df ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຖ້າ
ເຈົ້າໃຊ້ອັນໃດອັນໜຶ່ງ -mcpu=power7, -mcpu=power8, ຫຼື -mvsx ຕົວເລືອກ

-mupper-regs-sf
-mno-upper-regs-sf
ສ້າງລະຫັດທີ່ໃຊ້ (ບໍ່ໃຊ້) scalar ຄໍາແນະນໍາຄວາມແມ່ນຍໍາດຽວທີ່
ເປົ້າໝາຍທັງໝົດ 64 ທະບຽນໃນຊຸດທະບຽນຈຸດລອຍ vector/scalar ທີ່ເປັນ
ເພີ່ມໃນເວີຊັ່ນ 2.07 ຂອງ PowerPC ISA. -mupper-regs-sf ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຖ້າ
ເຈົ້າໃຊ້ອັນໃດອັນໜຶ່ງ -mcpu=power8 or -mpower8-vector ຕົວເລືອກ

-mupper-regs
-mno-upper-regs
ສ້າງລະຫັດທີ່ໃຊ້ (ບໍ່ໃຊ້) ຄໍາແນະນໍາ scalar ທີ່ເປົ້າຫມາຍທັງຫມົດ 64
ລົງທະບຽນໃນ vector/scalar floating point register set, ຂຶ້ນກັບຕົວແບບຂອງ
ເຄື່ອງ.

ຖ້າ -mno-upper-regs ທາງເລືອກແມ່ນຖືກນໍາໃຊ້, ມັນປິດທັງສອງ -mupper-regs-sf ແລະ
-mupper-regs-df ຕົວເລືອກ

-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,
ໃນຂະນະທີ່ -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 ມອບໝາຍບໍ່, ສູງສຸດ, ຫຼືສູງສຸດທີສອງ (ຕາມລໍາດັບ) ບູລິມະສິດ
ຄໍາແນະນໍາທີ່ຈໍາກັດ dispatch-slot.

-msched-costly-dep=dependence_type
ທາງ​ເລືອກ​ນີ້​ຄວບ​ຄຸມ​ການ​ເພິ່ງ​ພາ​ອາ​ໄສ​ແມ່ນ​ຖື​ວ່າ​ຄ່າ​ໃຊ້​ຈ່າຍ​ໂດຍ​ເປົ້າ​ຫມາຍ​ໃນ​ລະ​ຫວ່າງ​ການ
ການ​ກໍາ​ນົດ​ເວ​ລາ​ຄໍາ​ແນະ​ນໍາ​. ການໂຕ້ຖຽງ dependence_type ໃຊ້ເວລາຫນຶ່ງຕໍ່ໄປນີ້
ຄຸນຄ່າ:

no ບໍ່ມີການເພິ່ງພາອາໄສຄ່າໃຊ້ຈ່າຍໃດໆ.

ທັງຫມົດ ການເພິ່ງພາອາໄສທັງໝົດແມ່ນມີຄ່າໃຊ້ຈ່າຍຫຼາຍ.

true_store_to_load
ການເອື່ອຍອີງທີ່ແທ້ຈິງຈາກຮ້ານເພື່ອການໂຫຼດແມ່ນຄ່າໃຊ້ຈ່າຍ.

store_to_load
ການເອື່ອຍອີງໃດໆຈາກຮ້ານທີ່ຈະໂຫລດແມ່ນມີຄ່າໃຊ້ຈ່າຍຫຼາຍ.

ຈໍານວນ
ການເພິ່ງພາອາໄສອັນໃດນຶ່ງທີ່ເວລາ 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, elfv1,
elfv2.

-mabi=spe
ຂະຫຍາຍ ABI ປະຈຸບັນດ້ວຍການຂະຫຍາຍ SPE ABI. ນີ້ບໍ່ໄດ້ປ່ຽນ ABI ເລີ່ມຕົ້ນ,
ແທນທີ່ມັນຈະເພີ່ມການຂະຫຍາຍ SPE ABI ໃຫ້ກັບ ABI ໃນປັດຈຸບັນ.

-mabi=no-spe
ປິດໃຊ້ງານສ່ວນຂະຫຍາຍ Book-E 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.

-mabi=elfv1
ປ່ຽນ ABI ປະຈຸບັນເພື່ອໃຊ້ ELFv1 ABI. ນີ້ແມ່ນ ABI ເລີ່ມຕົ້ນສໍາລັບ big-endian
PowerPC 64-ບິດ Linux. ການລົບລ້າງຄ່າເລີ່ມຕົ້ນ ABI ຮຽກຮ້ອງໃຫ້ມີການສະຫນັບສະຫນູນລະບົບພິເສດແລະ
ມີແນວໂນ້ມທີ່ຈະລົ້ມເຫລວໃນວິທີທີ່ຫນ້າປະທັບໃຈ.

-mabi=elfv2
ປ່ຽນ ABI ປະຈຸບັນເພື່ອໃຊ້ ELFv2 ABI. ນີ້ແມ່ນ ABI ເລີ່ມຕົ້ນສໍາລັບພຽງເລັກນ້ອຍ -
endian PowerPC 64-bit Linux. ການລົບລ້າງຄ່າເລີ່ມຕົ້ນ ABI ຕ້ອງການລະບົບພິເສດ
ສະຫນັບສະຫນູນແລະມີແນວໂນ້ມທີ່ຈະລົ້ມເຫລວໃນວິທີການທີ່ຫນ້າປະທັບໃຈ.

-mprototype
-mno-prototype
ໃນລະບົບ V.4 ແລະລະບົບ PowerPC ຝັງສົມມຸດວ່າທຸກການໂທໄປຫາການໂຕ້ຖຽງຕົວແປ
ຫນ້າ​ທີ່​ແມ່ນ prototyped ຢ່າງ​ຖືກ​ຕ້ອງ​. ຖ້າບໍ່ດັ່ງນັ້ນ, compiler ຕ້ອງໃສ່ຄໍາແນະນໍາ
ກ່ອນທຸກໆການໂທທີ່ບໍ່ແມ່ນຕົວແບບເພື່ອກໍານົດຫຼືລຶບ 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" ໃນສ່ວນຫົວຂອງທຸງ 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, ບໍ່
ຟັງຊັນການເລີ່ມຕົ້ນຂອງ EABI ຖືກເອີ້ນວ່າ "ຕົ້ນຕໍ", ແລະ -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 ທີ່ຝັງໄວ້, ໃຫ້ໃສ່ຂໍ້ມູນທົ່ວໂລກ ແລະຂໍ້ມູນສະຖິດທັງໝົດທີ່ເລີ່ມຕົ້ນໄວ້ຢູ່ໃນ ".data"
ພາກ​ສ່ວນ, ແລະ​ຂໍ້​ມູນ​ທີ່​ບໍ່​ລິ​ເລີ່ມ​ທັງ​ຫມົດ​ໃນ​ພາກ ".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 ຕ້ອງການທີ່ຢູ່ທໍາອິດແລະສ້າງ "bl callee"
ຖ້າຄໍາແນະນໍາ PPC "bl" ໄປຫາຜູ້ໂທໂດຍກົງ; ຖ້າບໍ່ດັ່ງນັ້ນ, ຕົວເຊື່ອມຕໍ່
ສ້າງ "bl L42" ເພື່ອໂທຫາເກາະສາຂາ. ເກາະສາຂາຖືກຕໍ່ທ້າຍກັບ
ຮ່າງກາຍຂອງຫນ້າທີ່ໂທຫາ; ມັນຄິດໄລ່ທີ່ຢູ່ 32-bit ເຕັມຂອງ callee ແລະ
ໂດດໄປຫາມັນ.

ໃນລະບົບ Mach-O (Darwin), ທາງເລືອກນີ້ຊີ້ບອກ compiler emit ກັບກາວສໍາລັບ.
ທຸກໆການໂທໂດຍກົງ, ແລະຕົວເຊື່ອມຕໍ່ Darwin ຕັດສິນໃຈວ່າຈະໃຊ້ຫຼືຍົກເລີກມັນ.

ໃນອະນາຄົດ, GCC ອາດຈະບໍ່ສົນໃຈຂໍ້ມູນສະເພາະຂອງ longcall ທັງຫມົດເມື່ອຕົວເຊື່ອມຕໍ່ເປັນທີ່ຮູ້ຈັກ
ສ້າງກາວ.

-mtls-ເຄື່ອງໝາຍ
-mno-tls-ເຄື່ອງໝາຍ
ໝາຍ (ບໍ່ໝາຍ) ໂທຫາ "__tls_get_addr" ດ້ວຍການຍ້າຍທີ່ລະບຸຟັງຊັນ.
ການໂຕ້ຖຽງ. ການຍົກຍ້າຍອະນຸຍາດໃຫ້ຜູ້ເຊື່ອມຕໍ່ສາມາດໂທຫາຫນ້າທີ່ເຊື່ອມໂຍງຢ່າງຫນ້າເຊື່ອຖືໄດ້
ຄໍາແນະນໍາການຕັ້ງຄ່າການໂຕ້ຖຽງສໍາລັບການເພີ່ມປະສິດທິພາບ TLS, ເຊິ່ງເຮັດໃຫ້ GCC ດີຂຶ້ນ
ຈັດຕາຕະລາງລໍາດັບ.

- ກະທູ້
ເພີ່ມການສະຫນັບສະຫນູນສໍາລັບ multithreading ກັບ pthreads ຫໍສະໝຸດ. ຕົວເລືອກນີ້ກໍານົດທຸງສໍາລັບ
ທັງ preprocessor ແລະ linker.

-mrecip
-mno-recip
ຕົວເລືອກນີ້ເຮັດໃຫ້ການນຳໃຊ້ການປະເມີນເຊິ່ງກັນ ແລະກັນ ແລະ ການຄາດຄະເນຮາກສີ່ຫຼ່ຽມທີ່ຕ່າງຝ່າຍຕ່າງໄດ້
ຄໍາແນະນໍາທີ່ມີຂັ້ນຕອນ Newton-Raphson ເພີ່ມເຕີມເພື່ອເພີ່ມຄວາມແມ່ນຍໍາແທນທີ່ຈະເປັນ
ເຮັດການແບ່ງຫຼືຮາກສີ່ຫລ່ຽມແລະແບ່ງສໍາລັບການໂຕ້ຖຽງຈຸດລອຍ. ທ່ານຄວນໃຊ້
ໄດ້ -fast ຄະ​ນິດ​ສາດ​ ທາງ​ເລືອກ​ໃນ​ເວ​ລາ​ທີ່​ການ​ນໍາ​ໃຊ້​ -mrecip (ຫຼືຢ່າງຫນ້ອຍ -funsafe-math-optimizations,
-finite-math-only, -freciprocal-ຄະນິດສາດ ແລະ -fno-traping-ຄະນິດສາດ). ໃຫ້ສັງເກດວ່າໃນຂະນະທີ່
throughput ຂອງລໍາດັບໂດຍທົ່ວໄປແມ່ນສູງກ່ວາ throughput ຂອງທີ່ບໍ່ແມ່ນ.
ຄໍາແນະນໍາເຊິ່ງກັນແລະກັນ, ຄວາມແມ່ນຍໍາຂອງລໍາດັບສາມາດຫຼຸດລົງເຖິງ 2 ulp
(ເຊັ່ນວ່າຄ່າປີ້ນກັບຂອງ 1.0 ເທົ່າກັບ 0.99999994) ສໍາລັບຮາກທີ່ສອງເຊິ່ງກັນແລະກັນ.

-mrecip=ເລືອກ
ຕົວເລືອກນີ້ຄວບຄຸມວ່າຄໍາແນະນໍາການປະເມີນເຊິ່ງກັນແລະກັນອາດຈະຖືກນໍາໃຊ້. ເລືອກ ເປັນ
ລາຍຊື່ຕົວເລືອກທີ່ຂັ້ນດ້ວຍເຄື່ອງໝາຍຈຸດ, ເຊິ່ງອາດຈະຖືກນຳໜ້າດ້ວຍ "!" ການ​ປ່ຽນ​ທາງ​ເລືອກ​:

ທັງຫມົດ ເປີດໃຊ້ຄຳແນະນຳການປະເມີນທັງໝົດ.

Default
ເປີດໃຊ້ຄໍາແນະນໍາໃນຕອນຕົ້ນ, ເທົ່າກັບ -mrecip.

none
ປິດການທໍາງານຄໍາແນະນໍາການຄາດຄະເນທັງຫມົດ, ທຽບເທົ່າກັບ -mno-recip.

div ເປີດໃຊ້ຄໍາແນະນໍາການປະມານເຊິ່ງກັນແລະກັນສໍາລັບທັງສອງດຽວແລະຄູ່
ຄວາມແມ່ນຍໍາ.

divf
ເປີດການນຳໃຊ້ຄຳແນະນຳການປະມານການເຊິ່ງກັນ ແລະກັນທີ່ມີຄວາມຊັດເຈນອັນດຽວ.

divd
ເປີດການນຳໃຊ້ຄຳແນະນຳການປະມານການເຊິ່ງກັນແລະກັນທີ່ມີຄວາມຊັດເຈນສອງເທົ່າ.

rsqrt
ເປີດໃຊ້ຄໍາແນະນໍາການປະມານຂອງຮາກສອງຂ້າງເຊິ່ງກັນແລະກັນສໍາລັບທັງສອງອັນດຽວ ແລະ
ຄວາມແມ່ນຍໍາສອງເທົ່າ.

rsqrtf
ເປີດໃຊ້ຄໍາແນະນໍາການປະມານການປະມານຂອງຮາກສີ່ຫຼ່ຽມຄວາມຊັດເຈນອັນດຽວ.

rsqrtd
ເປີດໃຊ້ຄໍາແນະນໍາການປະມານການປະມານຂອງຮາກສີ່ຫຼ່ຽມສອງຄວາມຊັດເຈນ.

ສະນັ້ນ, ຕົວຢ່າງ, -mrecip=ທັງໝົດ,!rsqrtd ເປີດໃຊ້ທັງໝົດຂອງການຄາດຄະເນເຊິ່ງກັນແລະກັນ
ຄໍາແນະນໍາ, ຍົກເວັ້ນສໍາລັບຄໍາແນະນໍາ "FRSQRTE", "XSRSQRTEDP", ແລະ "XVRSQRTEDP"
ເຊິ່ງຈັດການການຄຳນວນຂອງຮາກສີ່ຫຼ່ຽມສີ່ຫຼ່ຽມທີ່ຊັດເຈນເຊິ່ງກັນແລະກັນ.

-mrecip-precision
-mno-recip-precision
ສົມມຸດ (ບໍ່ສົມມຸດ) ວ່າຄໍາແນະນໍາການປະເມີນເຊິ່ງກັນແລະກັນໃຫ້ສູງກວ່າ,
ການຄາດຄະເນຄວາມແມ່ນຍໍາແມ່ນບັງຄັບໂດຍ PowerPC ABI. ການເລືອກ -mcpu=power6,
-mcpu=power7 or -mcpu=power8 ເລືອກອັດຕະໂນມັດ -mrecip-precision. ສອງ​ເທົ່າ -
ຄໍາ​ແນະ​ນໍາ​ການ​ຄາດ​ຄະ​ເນ​ການ​ຮາກ​ທີ່​ຖືກ​ຕ້ອງ​ສອງ​ແມ່ນ​ບໍ່​ໄດ້​ຖືກ​ສ້າງ​ຕັ້ງ​ໂດຍ​ຄ່າ​ເລີ່ມ​ຕົ້ນ​ໃນ​ການ​ຕ​່​ໍ​າ
ເຄື່ອງຈັກຄວາມແມ່ນຍໍາ, ເນື່ອງຈາກວ່າພວກເຂົາເຈົ້າບໍ່ໄດ້ສະຫນອງການຄາດຄະເນທີ່ converges ຫຼັງຈາກສາມ
ຂັ້ນຕອນ.

-mveclibabi=ປະເພດ
ລະບຸປະເພດ ABI ເພື່ອໃຊ້ສຳລັບ vectorizing intrinsics ໂດຍໃຊ້ຫ້ອງສະໝຸດພາຍນອກ.
ປະເພດດຽວທີ່ສະຫນັບສະຫນູນໃນປັດຈຸບັນແມ່ນ ຕັ້ງມະຫາຊົນ, ເຊິ່ງກໍານົດການນໍາໃຊ້ຄະນິດສາດຂອງ IBM
ຫໍສະໝຸດລະບົບຍ່ອຍເລັ່ງ (MASS) ສໍາລັບ vectorizing intrinsics ໂດຍໃຊ້ພາຍນອກ
ຫ້ອງສະໝຸດ. ໃນປັດຈຸບັນ GCC ປ່ອຍການໂທໄປຫາ "acosd2", "acosf4", "acoshd2", "acosf4",
"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 ເປີດຢູ່ຕາມຄ່າເລີ່ມຕົ້ນ. ທ່ານບໍ່ສາມາດໂທຫາຕົວຊີ້ໄປຫາ
ຟັງຊັນທີ່ຊ້ອນກັນຫຼືຕົວຊີ້ໄປຫາຫນ້າທີ່ລວບລວມໃນພາສາອື່ນທີ່ໃຊ້
ລະບົບຕ່ອງໂສ້ static ຖ້າທ່ານໃຊ້ -mno-pointers-to-nested-functions.

-msave-toc-ທາງອ້ອມ
-mno-save-toc-indirect
ສ້າງ (ບໍ່ສ້າງ) ລະຫັດເພື່ອບັນທຶກຄ່າ TOC ໃນສະຖານທີ່ stack ສະຫງວນ
ໃນ prologue ຟັງຊັນຖ້າຟັງຊັນໂທຜ່ານຕົວຊີ້ໃນ AIX ແລະ 64-bit
ລະບົບ Linux. ຖ້າຄ່າ TOC ບໍ່ໄດ້ຖືກບັນທຶກໄວ້ໃນ prologue, ມັນຖືກບັນທຶກໄວ້ກ່ອນ
ໂທຜ່ານຕົວຊີ້. ໄດ້ -mno-save-toc-indirect ທາງເລືອກແມ່ນຄ່າເລີ່ມຕົ້ນ.

-mcompat-align-parm
-mno-compat-align-parm
ສ້າງ (ບໍ່ສ້າງ) ລະຫັດເພື່ອຜ່ານຕົວກໍານົດໂຄງສ້າງທີ່ມີການຈັດຕໍາແຫນ່ງສູງສຸດ
ຂອງ 64 ບິດ, ສໍາລັບຄວາມເຂົ້າກັນໄດ້ກັບ GCC ຮຸ່ນເກົ່າ.

GCC ລຸ້ນເກົ່າ (ກ່ອນໜ້າ 4.9.0) ບໍ່ຖືກຕ້ອງ ບໍ່ໄດ້ຈັດວາງພາລາມິເຕີໂຄງສ້າງ.
ໃນຂອບເຂດ 128-bit ເມື່ອໂຄງສ້າງນັ້ນມີສະມາຊິກທີ່ຕ້ອງການ 128-bit
ການຈັດວາງ. ອັນນີ້ຖືກແກ້ໄຂໃນ GCC ຮຸ່ນຫຼ້າສຸດ. ທາງເລືອກນີ້ອາດຈະຖືກນໍາໃຊ້
ເພື່ອສ້າງລະຫັດທີ່ເຂົ້າກັນໄດ້ກັບຫນ້າທີ່ລວບລວມກັບຮຸ່ນເກົ່າກວ່າ
GCC.

ໄດ້ -mno-compat-align-parm ທາງເລືອກແມ່ນຄ່າເລີ່ມຕົ້ນ.

RX ທາງເລືອກໃນການ

ຕົວເລືອກແຖວຄໍາສັ່ງເຫຼົ່ານີ້ຖືກກໍານົດສໍາລັບເປົ້າຫມາຍ RX:

-m64bit-ສອງເທົ່າ
-m32bit-ສອງເທົ່າ
ເຮັດໃຫ້ປະເພດຂໍ້ມູນ "ສອງ" ເປັນ 64 bits (-m64bit-ສອງເທົ່າ) ຫຼື 32 bits (-m32bit-ສອງເທົ່າ)
ໃນຂະຫນາດ. ຄ່າເລີ່ມຕົ້ນແມ່ນ -m32bit-ສອງເທົ່າ. ຫມາຍ​ເຫດ​ ຮາດແວຈຸດລອຍ RX ເຮັດວຽກເທົ່ານັ້ນ
ກ່ຽວກັບຄ່າ 32-bit, ນັ້ນແມ່ນເຫດຜົນທີ່ວ່າຄ່າເລີ່ມຕົ້ນ -m32bit-ສອງເທົ່າ.

-fpu
-nofpu
ເປີດໃຊ້ງານ (-fpu) ຫຼືປິດການໃຊ້ງານ (-nofpu) ການນໍາໃຊ້ຮາດແວຈຸດລອຍ RX. ໄດ້
ຄ່າເລີ່ມຕົ້ນແມ່ນເປີດໃຊ້ງານສໍາລັບຊຸດ RX600 ແລະຖືກປິດໃຊ້ງານສໍາລັບຊຸດ RX200.

ຄຳແນະນຳຈຸດລອຍແມ່ນສ້າງຂຶ້ນສຳລັບຄ່າຈຸດລອຍ 32-ບິດເທົ່ານັ້ນ,
ຢ່າງໃດກໍຕາມ, ດັ່ງນັ້ນຮາດແວ FPU ບໍ່ໄດ້ຖືກນໍາໃຊ້ສໍາລັບການເພີ່ມຂຶ້ນສອງເທົ່າຖ້າຫາກວ່າ -m64bit-ສອງເທົ່າ ທາງເລືອກແມ່ນ
ໃຊ້ແລ້ວ.

ຫມາຍ​ເຫດ​ ຖ້າ -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. ອັນນີ້ອາດຈະສົ່ງຜົນໃຫ້ຊ້າລົງ ແລະ/ຫຼືໃຫຍ່ກວ່າ
ລະຫັດຖ້າຕົວແປຖືກກົດໃສ່ 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 relaxation ແມ່ນຂະບວນການທີ່ 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
ທາງເລືອກແຖວຄໍາສັ່ງ.

-mno-warn-multiple-fast-interrupts
-mwarn-multiple-fast-interrupts
ປ້ອງກັນບໍ່ໃຫ້ GCC ອອກຂໍ້ຄວາມເຕືອນ ຖ້າມັນພົບການລົບກວນໄວຫຼາຍກວ່າໜຶ່ງອັນ
handler ໃນເວລາທີ່ມັນກໍາລັງລວບລວມໄຟລ໌. ຄ່າເລີ່ມຕົ້ນແມ່ນເພື່ອອອກຄໍາເຕືອນສໍາລັບແຕ່ລະພິເສດ
ພົບຕົວຈັດການການລົບກວນໄວ, ເພາະວ່າ RX ຮອງຮັບການຂັດຂວາງດັ່ງກ່າວເທົ່ານັ້ນ.

ຫມາຍ​ເຫດ​: ຕົວເລືອກເສັ້ນຄໍາສັ່ງ 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 ຖືກກໍານົດ, ໄດ້
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, z196, zEC12, ແລະ z13. ເມື່ອສ້າງລະຫັດໂດຍໃຊ້ຄໍາແນະນໍາ
ມີຢູ່ໃນ z/Architecture, ຄ່າເລີ່ມຕົ້ນແມ່ນ - ມີນາ=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" ຫຼືໃຊ້ arrays ຂະຫນາດໄດນາມິກ. ນີ້
ໂດຍທົ່ວໄປແລ້ວເປັນຄວາມຄິດທີ່ບໍ່ດີທີ່ມີຂະຫນາດ stack ຈໍາກັດ.

-mstack-guard=stack-guard
-mstack-size=ຂະໜາດ stack
ຖ້າທາງເລືອກເຫຼົ່ານີ້ຖືກສະຫນອງໃຫ້ S/390 back end ປ່ອຍຄໍາແນະນໍາເພີ່ມເຕີມໃນ
ຟັງຊັນ prologue ທີ່ກະຕຸ້ນດັກຖ້າຂະຫນາດ stack ແມ່ນ stack-guard bytes ຂ້າງເທິງ
ຂະໜາດ stack (ຈື່ໄວ້ວ່າ stack ໃນ S/390 ເຕີບໂຕລົງ). ຖ້າ stack-guard
ທາງ​ເລືອກ​ແມ່ນ​ຍົກ​ເວັ້ນ​ພະ​ລັງ​ງານ​ຂະ​ຫນາດ​ນ້ອຍ​ສຸດ​ຂອງ 2 ຂະ​ຫນາດ​ໃຫຍ່​ກ​່​ວາ​ຂະ​ຫນາດ​ກອບ​ຂອງ​ການ​ສັງ​ລວມ​ໄດ້​
ຟັງຊັນຖືກເລືອກ. ຕົວເລືອກເຫຼົ່ານີ້ມີຈຸດປະສົງເພື່ອໃຊ້ເພື່ອຊ່ວຍ debugging stack
ບັນຫາ overflow. ລະຫັດ emitted ເພີ່ມເຕີມເຮັດໃຫ້ພຽງແຕ່ overhead ພຽງເລັກນ້ອຍແລະ
ເພາະສະນັ້ນ, ຍັງສາມາດຖືກນໍາໃຊ້ໃນລະບົບການຜະລິດທີ່ບໍ່ມີປະສິດທິພາບຫຼາຍ
ການເຊື່ອມໂຊມ. ຄ່າທີ່ໃຫ້ມາຈະຕ້ອງເປັນອຳນາດທີ່ແນ່ນອນຂອງ 2 ແລະ ຂະໜາດ stack ຕ້ອງເປັນ
ໃຫຍ່​ກວ່າ stack-guard ບໍ່ເກີນ 64k. ເພື່ອໃຫ້ມີປະສິດທິພາບພິເສດ
ລະຫັດເຮັດໃຫ້ສົມມຸດຕິຖານວ່າ stack ເລີ່ມຕົ້ນຢູ່ທີ່ທີ່ຢູ່ສອດຄ່ອງກັບຄ່າ
ມອບ​ໃຫ້​ໂດຍ ຂະໜາດ stack. ໄດ້ stack-guard ທາງ​ເລືອກ​ພຽງ​ແຕ່​ສາ​ມາດ​ນໍາ​ໃຊ້​ຮ່ວມ​ກັບ​
ຂະໜາດ stack.

-mhotpatch=ກ່ອນເຄິ່ງຄຳສັບ,ຫຼັງ​ຈາກ​ເຄິ່ງ​ຫນຶ່ງ​
ຖ້າຕົວເລືອກ hotpatch ຖືກເປີດໃຊ້, prologue ຟັງຊັນ "hot-patching" ແມ່ນຖືກສ້າງຂຶ້ນສໍາລັບ
ຫນ້າທີ່ທັງຫມົດໃນຫນ່ວຍງານລວບລວມ. ປ້າຍ funtion ແມ່ນ prepended ກັບໃຫ້
ຈໍານວນຄໍາແນະນໍາ NOP ສອງໄບໄບ (ກ່ອນເຄິ່ງຄຳສັບ, ສູງສຸດ 1000000). ຫຼັງຈາກ
ປ້າຍຊື່, 2 * ຫຼັງ​ຈາກ​ເຄິ່ງ​ຫນຶ່ງ​ bytes ຖືກຕໍ່ທ້າຍ, ໂດຍໃຊ້ NOP ທີ່ໃຫຍ່ທີ່ສຸດເຊັ່ນຄໍາແນະນໍາ
ສະຖາປັດຕະຍະກໍາອະນຸຍາດໃຫ້ (ສູງສຸດ 1000000).

ຖ້າທັງສອງ argument ເປັນສູນ, hotpatching ຈະຖືກປິດໃຊ້ງານ.

ທາງເລືອກນີ້ສາມາດຖືກລົບລ້າງສໍາລັບຫນ້າທີ່ສ່ວນບຸກຄົນດ້ວຍຄຸນລັກສະນະ "hotpatch".

ຜະລິດແນນ ທາງເລືອກໃນການ

ຕົວເລືອກເຫຼົ່ານີ້ຖືກກໍານົດໄວ້ສໍາລັບການຈັດຕັ້ງປະຕິບັດຄະແນນ:

-ເມບ
ລວບລວມລະຫັດສໍາລັບຮູບແບບ 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.

-m4-100
ສ້າງລະຫັດສໍາລັບ SH4-100.

-m4-100-nofpu
ສ້າງລະຫັດສໍາລັບ SH4-100 ໃນລັກສະນະທີ່ຫນ່ວຍບໍລິການຈຸດລອຍບໍ່ໄດ້ຖືກນໍາໃຊ້.

-m4-100-ດຽວ
ສ້າງລະຫັດສໍາລັບ SH4-100 ໂດຍສົມມຸດວ່າຫນ່ວຍບໍລິການຈຸດລອຍຢູ່ໃນໂຫມດຄວາມຊັດເຈນດຽວ
ໂດຍຄ່າເລີ່ມຕົ້ນ

-m4-100-ດຽວເທົ່ານັ້ນ
ສ້າງລະຫັດສໍາລັບ SH4-100 ໃນລັກສະນະທີ່ບໍ່ມີຄວາມຊັດເຈນ double-precision floating-point
ການ​ດໍາ​ເນີນ​ງານ​ໄດ້​ຖືກ​ນໍາ​ໃຊ້​.

-m4-200
ສ້າງລະຫັດສໍາລັບ SH4-200.

-m4-200-nofpu
ສ້າງລະຫັດສໍາລັບ SH4-200 ໂດຍບໍ່ມີການໃນລັກສະນະທີ່ຫນ່ວຍບໍລິການຈຸດລອຍບໍ່ແມ່ນ
ໃຊ້ແລ້ວ.

-m4-200-ດຽວ
ສ້າງລະຫັດສໍາລັບ SH4-200 ໂດຍສົມມຸດວ່າຫນ່ວຍບໍລິການຈຸດລອຍຢູ່ໃນໂຫມດຄວາມຊັດເຈນດຽວ
ໂດຍຄ່າເລີ່ມຕົ້ນ

-m4-200-ດຽວເທົ່ານັ້ນ
ສ້າງລະຫັດສໍາລັບ SH4-200 ໃນລັກສະນະທີ່ບໍ່ມີຄວາມຊັດເຈນ double-precision floating-point
ການ​ດໍາ​ເນີນ​ງານ​ໄດ້​ຖືກ​ນໍາ​ໃຊ້​.

-m4-300
ສ້າງລະຫັດສໍາລັບ SH4-300.

-m4-300-nofpu
ສ້າງລະຫັດສໍາລັບ SH4-300 ໂດຍບໍ່ມີການໃນລັກສະນະທີ່ຫນ່ວຍບໍລິການຈຸດລອຍບໍ່ແມ່ນ
ໃຊ້ແລ້ວ.

-m4-300-ດຽວ
ສ້າງລະຫັດສໍາລັບ SH4-300 ໃນລັກສະນະທີ່ບໍ່ມີຄວາມຊັດເຈນ double-precision floating-point
ການ​ດໍາ​ເນີນ​ງານ​ໄດ້​ຖືກ​ນໍາ​ໃຊ້​.

-m4-300-ດຽວເທົ່ານັ້ນ
ສ້າງລະຫັດສໍາລັບ SH4-300 ໃນລັກສະນະທີ່ບໍ່ມີຄວາມຊັດເຈນ double-precision floating-point
ການ​ດໍາ​ເນີນ​ງານ​ໄດ້​ຖືກ​ນໍາ​ໃຊ້​.

-m4-340
ສ້າງລະຫັດສໍາລັບ SH4-340 (ບໍ່ມີ MMU, ບໍ່ມີ FPU).

-m4-500
ສ້າງລະຫັດສໍາລັບ SH4-500 (ບໍ່ມີ FPU). ຜ່ານ -isa=sh4-nofpu ກັບຜູ້ປະກອບ.

-m4a-nofpu
ສ້າງລະຫັດສໍາລັບ SH4al-dsp, ຫຼືສໍາລັບ SH4a ໃນຮູບແບບທີ່ຈຸດລອຍ.
ຫນ່ວຍງານບໍ່ໄດ້ຖືກນໍາໃຊ້.

-m4a-ດຽວເທົ່ານັ້ນ
ສ້າງລະຫັດສໍາລັບ SH4a, ໃນລັກສະນະທີ່ບໍ່ມີຄວາມຊັດເຈນ double-precision floating-point
ການ​ດໍາ​ເນີນ​ງານ​ໄດ້​ຖືກ​ນໍາ​ໃຊ້​.

-m4a-ດຽວ
ສ້າງລະຫັດສໍາລັບ SH4a ໂດຍສົມມຸດວ່າຫນ່ວຍງານຈຸດລອຍຢູ່ໃນຄວາມຊັດເຈນດຽວ
ຮູບແບບໂດຍໃນຕອນຕົ້ນ.

-m4a
ສ້າງລະຫັດສໍາລັບ SH4a.

-m4al
ຄື​ກັນ​ກັບ -m4a-nofpu, ຍົກເວັ້ນວ່າມັນຜ່ານ implicitly -dsp ກັບຜູ້ປະກອບ. GCC
ບໍ່ໄດ້ສ້າງຄໍາແນະນໍາ DSP ໃດໆໃນເວລານີ້.

-m5-32media
ສ້າງລະຫັດ 32-bit ສໍາລັບ SHmedia.

-m5-32media-nofpu
ສ້າງລະຫັດ 32-bit ສໍາລັບ SHmedia ໃນລັກສະນະທີ່ຫນ່ວຍບໍລິການຈຸດລອຍບໍ່ແມ່ນ
ໃຊ້ແລ້ວ.

-m5-64media
ສ້າງລະຫັດ 64-bit ສໍາລັບ SHmedia.

-m5-64media-nofpu
ສ້າງລະຫັດ 64-bit ສໍາລັບ SHmedia ໃນລັກສະນະທີ່ຫນ່ວຍບໍລິການຈຸດລອຍບໍ່ແມ່ນ
ໃຊ້ແລ້ວ.

-m5-ກະທັດຮັດ
ສ້າງລະຫັດສໍາລັບ SHcompact.

-m5-compact-nofpu
ສ້າງລະຫັດສໍາລັບ SHcompact ໃນລັກສະນະທີ່ຫນ່ວຍບໍລິການຈຸດລອຍບໍ່ໄດ້ຖືກນໍາໃຊ້.

-mb ລວບລວມລະຫັດສໍາລັບໂປເຊດເຊີໃນຮູບແບບໃຫຍ່.

-ml ລວບລວມລະຫັດສໍາລັບໂປເຊດເຊີໃນໂຫມດ little-endian.

-mdalign
ຈັດຮຽງສອງເທົ່າຢູ່ທີ່ຂອບເຂດ 64-ບິດ. ໃຫ້ສັງເກດວ່ານີ້ມີການປ່ຽນແປງສົນທິສັນຍາການເອີ້ນ,
ແລະດັ່ງນັ້ນບາງຫນ້າທີ່ຈາກຫ້ອງສະຫມຸດ C ມາດຕະຖານຈະບໍ່ເຮັດວຽກເວັ້ນເສຍແຕ່ວ່າທ່ານລວບລວມຄືນໃຫມ່
ມັນຄັ້ງທໍາອິດກັບ -mdalign.

-mrelax
ຫຍໍ້ບາງການອ້າງອີງທີ່ຢູ່ໃນເວລາເຊື່ອມຕໍ່, ເມື່ອເປັນໄປໄດ້; ໃຊ້ຕົວເລືອກຕົວເຊື່ອມຕໍ່
- ຜ່ອນຄາຍ.

-migtable
ໃຊ້ການຊົດເຊີຍ 32-bit ໃນຕາຕະລາງ "ສະຫຼັບ". ຄ່າເລີ່ມຕົ້ນແມ່ນການໃຊ້ 16-bit offsets.

- ບິດ
ເປີດໃຊ້ຄໍາແນະນໍາການຫມູນໃຊ້ບິດໃນ SH2A.

-mfmovd
ເປີດນໍາໃຊ້ຄໍາແນະນໍາ "fmovd". ກວດສອບ -mdalign ສໍາລັບຂໍ້ຈໍາກັດການຈັດຕໍາແຫນ່ງ.

-mrenesas
ປະຕິບັດຕາມສົນທິສັນຍາການໂທຫາທີ່ກໍານົດໂດຍ Renesas.

-mno-renesas
ປະຕິບັດຕາມສົນທິສັນຍາການໂທຫາທີ່ກໍານົດສໍາລັບ GCC ກ່ອນສົນທິສັນຍາ Renesas
ມີຢູ່. ຕົວເລືອກນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນສໍາລັບທຸກເປົ້າໝາຍຂອງຕ່ອງໂສ້ເຄື່ອງມື SH.

-mnomacsave
ຫມາຍ "MAC" ລົງທະບຽນເປັນ call-clobbered, ເຖິງແມ່ນວ່າ -mrenesas ແມ່ນໃຫ້.

-ມີ່
-mno-ieee
ຄວບຄຸມການປະຕິບັດຕາມ IEEE ຂອງການປຽບທຽບຈຸດລອຍ, ເຊິ່ງມີຜົນກະທົບຕໍ່ການຈັດການ
ຂອງກໍລະນີທີ່ຜົນຂອງການປຽບທຽບບໍ່ມີຄໍາສັ່ງ. ໂດຍຄ່າເລີ່ມຕົ້ນ -ມີ່ is
ເປີດໃຊ້ໂດຍທາງອ້ອມ. ຖ້າ -ffinite-math-ເທົ່ານັ້ນ ເປີດໃຊ້ງານ -mno-ieee ໄດ້​ຖືກ​ກໍາ​ນົດ​ໂດຍ​ທາງ​ການ​,
ເຊິ່ງເຮັດໃຫ້ການປຽບທຽບຈຸດທີ່ລອຍຕົວໄວກວ່າ ແລະສະເໝີພາບໜ້ອຍກວ່າ. ໄດ້
ການຕັ້ງຄ່າ implcit ສາມາດຖືກລົບລ້າງໂດຍການລະບຸ -ມີ່ or -mno-ieee.

-minline-ic_invalidate
ລະຫັດໃນແຖວເພື່ອຍົກເລີກການປ້ອນຂໍ້ມູນ cache ຄໍາແນະນໍາຫຼັງຈາກຕັ້ງຄ່າການທໍາງານທີ່ຊ້ອນກັນ
trampolines. ຕົວເລືອກນີ້ບໍ່ມີຜົນຖ້າ -musermode ມີຜົນບັງຄັບໃຊ້ແລະເລືອກ
ທາງເລືອກການສ້າງລະຫັດ (ຕົວຢ່າງ: -m4) ບໍ່ອະນຸຍາດໃຫ້ໃຊ້ຄໍາແນະນໍາ "icbi".
ຖ້າຕົວເລືອກການສ້າງລະຫັດທີ່ເລືອກບໍ່ອະນຸຍາດໃຫ້ໃຊ້ "icbi"
ຄໍາແນະນໍາ, ແລະ -musermode ບໍ່ມີຜົນບັງຄັບໃຊ້, ລະຫັດ inlined manipulates ໄດ້
instruction cache address array ໂດຍກົງກັບ associative write. ນີ້ບໍ່ພຽງແຕ່
ຕ້ອງການໂຫມດສິດທິພິເສດໃນເວລາແລ່ນ, ແຕ່ມັນຍັງລົ້ມເຫລວຖ້າສາຍ cache
ແຜນທີ່ຜ່ານ TLB ແລະໄດ້ກາຍເປັນທີ່ບໍ່ມີແຜນທີ່.

- misize
ຖິ້ມຂະຫນາດຄໍາແນະນໍາແລະສະຖານທີ່ຢູ່ໃນລະຫັດການປະກອບ.

- ຂົວ
ຕົວເລືອກນີ້ຖືກປະຕິເສດ. ມັນ pads ໂຄງສ້າງເພື່ອຄວາມຫຼາກຫຼາຍຂອງ 4 bytes, ເຊິ່ງແມ່ນ
ບໍ່ເຂົ້າກັນໄດ້ກັບ SH ABI.

-matomic-model=ຮູບແບບ
ກຳນົດຮູບແບບການດຳເນີນການປະລໍາມະນູ ແລະຕົວກໍານົດການເພີ່ມເຕີມເປັນເຄື່ອງໝາຍຈຸດທີ່ແຍກອອກ
ບັນຊີລາຍຊື່. ສໍາລັບລາຍລະອຽດກ່ຽວກັບຫນ້າທີ່ສ້າງໃນປະລໍາມະນູເບິ່ງ __ປະລໍາມະນູ ເກີດຂຶ້ນ. ໄດ້
ສະ​ຫນັບ​ສະ​ຫນູນ​ຕົວ​ແບບ​ແລະ​ຕົວ​ກໍາ​ນົດ​ການ​ດັ່ງ​ຕໍ່​ໄປ​ນີ້​:

none
ປິດການທໍາງານຂອງ compiler ທີ່ສ້າງລໍາດັບປະລໍາມະນູແລະ emit ຫໍສະຫມຸດໂທຫາປະລໍາມະນູ
ການດໍາເນີນງານ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນຖ້າເປົ້າໝາຍບໍ່ແມ່ນ "sh*-*-linux*".

soft-gusa
ສ້າງ GNU/Linux ທີ່ເຂົ້າກັນໄດ້ກັບຊອບແວ gUSA ລໍາດັບປະລໍາມະນູສໍາລັບປະລໍາມະນູທີ່ສ້າງຂຶ້ນ.
ໃນ​ຫນ້າ​ທີ່​. ລໍາດັບປະລໍາມະນູທີ່ຜະລິດຮຽກຮ້ອງໃຫ້ມີການສະຫນັບສະຫນູນເພີ່ມເຕີມຈາກ
ລະ​ຫັດ​ການ​ຈັດ​ການ​ຂັດ​ຂວາງ / ຂໍ້​ຍົກ​ເວັ້ນ​ຂອງ​ລະ​ບົບ​ແລະ​ເຫມາະ​ສົມ​ພຽງ​ແຕ່​ສໍາ​ລັບ SH3 * ແລະ​
SH4* ລະບົບຫຼັກດຽວ. ຕົວເລືອກນີ້ຈະຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນເມື່ອເປົ້າໝາຍແມ່ນ
"sh*-*-linux*" ແລະ SH3* ຫຼື SH4*. ໃນເວລາທີ່ເປົ້າຫມາຍແມ່ນ SH4A, ທາງເລືອກນີ້ຍັງ
ບາງສ່ວນນໍາໃຊ້ຄໍາແນະນໍາຂອງຮາດແວປະລໍາມະນູ "movli.l" ແລະ "movco.l" ເພື່ອ
ສ້າງລະຫັດທີ່ມີປະສິດທິພາບຫຼາຍ, ເວັ້ນເສຍແຕ່ ຢ່າງເຄັ່ງຄັດ ຖືກກໍານົດ.

soft-tcb
ສ້າງລໍາດັບອະຕອມຂອງຊອບແວທີ່ໃຊ້ຕົວແປໃນການຄວບຄຸມກະທູ້
ຕັນ. ນີ້ແມ່ນການປ່ຽນແປງຂອງລໍາດັບ gUSA ເຊິ່ງຍັງສາມາດຖືກນໍາໃຊ້ໃນ SH1*
ແລະເປົ້າໝາຍ SH2*. ລໍາດັບປະລໍາມະນູທີ່ຜະລິດຮຽກຮ້ອງໃຫ້ມີການສະຫນັບສະຫນູນເພີ່ມເຕີມຈາກ
ລະ​ຫັດ​ການ​ຈັດ​ການ​ຂັດ​ຂວາງ / ຂໍ້​ຍົກ​ເວັ້ນ​ຂອງ​ລະ​ບົບ​ແລະ​ເຫມາະ​ສົມ​ພຽງ​ແຕ່​ສໍາ​ລັບ​ການ​
ລະບົບຫຼັກດຽວ. ໃນເວລາທີ່ການນໍາໃຊ້ຮູບແບບນີ້, ໄດ້ gbr-offset= ພາລາມິເຕີຈະຕ້ອງເປັນ
ລະບຸໄວ້ເຊັ່ນດຽວກັນ.

soft-imask
ສ້າງລໍາດັບປະລໍາມະນູຊອບແວທີ່ປິດການຂັດຂວາງຊົ່ວຄາວໂດຍການຕັ້ງຄ່າ
"SR.IMASK = 1111". ຮູບແບບນີ້ເຮັດວຽກພຽງແຕ່ເມື່ອໂຄງການເຮັດວຽກຢູ່ໃນໂຫມດສິດທິພິເສດ
ແລະແມ່ນເຫມາະສົມສໍາລັບລະບົບຫຼັກດຽວເທົ່ານັ້ນ. ການ​ສະ​ຫນັບ​ສະ​ຫນູນ​ເພີ່ມ​ເຕີມ​ຈາກ​
ລະ​ຫັດ​ການ​ຈັດ​ການ​ຂັດ​ຂວາງ / ຂໍ້​ຍົກ​ເວັ້ນ​ຂອງ​ລະ​ບົບ​ແມ່ນ​ບໍ່​ຈໍາ​ເປັນ​ຕ້ອງ​. ຮູບແບບນີ້ແມ່ນ
ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນເມື່ອເປົ້າໝາຍແມ່ນ "sh*-*-linux*" ແລະ SH1* ຫຼື SH2*.

hard-llcs
ສ້າງລໍາດັບປະລໍາມະນູຂອງຮາດແວໂດຍໃຊ້ຄໍາແນະນໍາ "movli.l" ແລະ "movco.l"
ເທົ່ານັ້ນ. ນີ້ແມ່ນມີພຽງແຕ່ຢູ່ໃນ SH4A ແລະເຫມາະສົມສໍາລັບລະບົບຫຼາຍແກນ.
ເນື່ອງຈາກຄໍາແນະນໍາຂອງຮາດແວສະຫນັບສະຫນູນພຽງແຕ່ 32 bit atomic variables ເຂົ້າເຖິງ 8
ຫຼືຕົວແປ 16 ບິດແມ່ນເຮັດຕາມດ້ວຍການເຂົ້າເຖິງ 32 ບິດ. ລະຫັດທີ່ລວບລວມດ້ວຍນີ້
ທາງ​ເລືອກ​ຍັງ​ເຫມາະ​ສົມ​ກັບ​ຕົວ​ແບບ​ປະ​ລໍາ​ມະ​ນູ​ຊອບ​ແວ​ອື່ນໆ interrupt / ຂໍ້​ຍົກ​ເວັ້ນ​
ລະບົບການຈັດການຖ້າຖືກປະຕິບັດໃນລະບົບ SH4A. ການ​ສະ​ຫນັບ​ສະ​ຫນູນ​ເພີ່ມ​ເຕີມ​ຈາກ​
ລະ​ຫັດ​ການ​ຈັດ​ການ​ຂັດ​ຂວາງ / ຂໍ້​ຍົກ​ເວັ້ນ​ຂອງ​ລະ​ບົບ​ແມ່ນ​ບໍ່​ຈໍາ​ເປັນ​ຕ້ອງ​ສໍາ​ລັບ​ຮູບ​ແບບ​ນີ້​.

gbr-offset=
ພາລາມິເຕີນີ້ກໍານົດການຊົດເຊີຍໃນໄບຕ໌ຂອງຕົວແປໃນການຄວບຄຸມກະທູ້
ໂຄງສ້າງຕັນທີ່ຄວນຈະຖືກນໍາໃຊ້ໂດຍລໍາດັບປະລໍາມະນູທີ່ຜະລິດໃນເວລາທີ່
soft-tcb ຮູບແບບໄດ້ຖືກເລືອກ. ສໍາລັບຕົວແບບອື່ນ, ພາລາມິເຕີນີ້ຖືກລະເລີຍ.
ຄ່າທີ່ລະບຸຈະຕ້ອງເປັນຈຳນວນຄູນຄູນຂອງສີ່ ແລະຢູ່ໃນໄລຍະ 0-1020.

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

-mtas
ສ້າງ "tas.b" opcode ສໍາລັບ "__atomic_test_and_set". ສັງເກດເຫັນວ່າຂຶ້ນກັບ
ການກຳນົດຄ່າຮາດແວ ແລະຊອບແວໂດຍສະເພາະ ນີ້ສາມາດຫຼຸດປະສິດທິພາບໂດຍລວມ
ອັນເນື່ອງມາຈາກ operand cache line flushes ທີ່ສະແດງໂດຍຄໍາແນະນໍາ "tas.b". ສຸດ
ໂປເຊດເຊີ SH4A multi-core ຄໍາແນະນໍາ "tas.b" ຕ້ອງໄດ້ຮັບການນໍາໃຊ້ຢ່າງລະມັດລະວັງນັບຕັ້ງແຕ່ມັນ
ສາມາດສົ່ງຜົນໃຫ້ຂໍ້ມູນເສຍຫາຍສໍາລັບການຕັ້ງຄ່າ cache ບາງ.

- ມັກ
ເມື່ອສ້າງລະຫັດເອກະລາດຕໍາແຫນ່ງ, ປ່ອຍຟັງຊັນການໂທໂດຍໃຊ້ Global Offset
ຕາຕະລາງແທນທີ່ຈະເປັນຕາຕະລາງການເຊື່ອມໂຍງຂັ້ນຕອນ.

-musermode
-mno-usermode
ບໍ່ອະນຸຍາດໃຫ້ (ອະນຸຍາດໃຫ້) ຄອມພີວເຕີສ້າງລະຫັດໂຫມດສິດທິພິເສດ. ການລະບຸ
-musermode ຍັງໝາຍເຖິງ -mno-inline-ic_invalidate ຖ້າລະຫັດ inline ຈະບໍ່ເຮັດວຽກ
ໃນ​ຮູບ​ແບບ​ຜູ້​ໃຊ້​. -musermode ເປັນຄ່າເລີ່ມຕົ້ນເມື່ອເປົ້າໝາຍແມ່ນ "sh*-*-linux*". ຖ້າ
ເປົ້າໝາຍແມ່ນ SH1* ຫຼື SH2* -musermode ບໍ່ມີຜົນ, ເພາະວ່າບໍ່ມີຮູບແບບຜູ້ໃຊ້.

-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. ຫຼາຍ
ໄລຍະການລົງທະບຽນສາມາດຖືກລະບຸແຍກດ້ວຍເຄື່ອງໝາຍຈຸດ.

-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" ໃສ່ກັບດັກໃນເວລາທີ່ເປົ້າຫມາຍ anded ກັບ 3 ແມ່ນ 3. ນີ້ມີ
ຜົນກະທົບທີ່ບໍ່ຕັ້ງໃຈທີ່ຈະເຮັດໃຫ້ມັນບໍ່ປອດໄພໃນການຈັດຕາຕະລາງຄໍາແນະນໍາເຫຼົ່ານີ້ກ່ອນ a
ສາຂາ, ຫຼືຍົກພວກມັນອອກຈາກວົງ. ຕົວຢ່າງ, "__do_global_ctors", ສ່ວນຫນຶ່ງຂອງ
libgcc ທີ່ເອີ້ນໃຊ້ constructors ໃນການເລີ່ມຕົ້ນໂຄງການ, ໂທຫາຫນ້າທີ່ຢູ່ໃນບັນຊີລາຍຊື່ທີ່ເປັນ
ຂີດຈຳກັດດ້ວຍ -1. ກັບ -mpt-ແກ້ໄຂ ທາງເລືອກ, "ptabs" ແມ່ນເຮັດກ່ອນການທົດສອບ
ຕ້ານ -1. ນັ້ນ ໝາຍ ຄວາມວ່າຜູ້ກໍ່ສ້າງທັງ ໝົດ ແລ່ນໄວຫຼາຍ, ແຕ່ເມື່ອ
loop ມາຮອດທ້າຍລາຍການ, ໂປຣແກຣມຂັດຂ້ອງເພາະວ່າ "ptabs" ໂຫລດ -1 ເຂົ້າໄປໃນ a
ລົງ​ທະ​ບຽນ​ເປົ້າ​ຫມາຍ​.

ເນື່ອງຈາກທາງເລືອກນີ້ບໍ່ປອດໄພສໍາລັບຮາດແວໃດໆທີ່ປະຕິບັດສະຖາປັດຕະຍະກໍາປະຈຸບັນ
ສະເພາະ, ຄ່າເລີ່ມຕົ້ນແມ່ນ -mno-pt-ແກ້ໄຂ. ເວັ້ນເສຍແຕ່ໄດ້ລະບຸຢ່າງຊັດເຈນກັບ
-mgettrcost, -mno-pt-ແກ້ໄຂ ຍັງໝາຍເຖິງ -mgettrcost=100; ນີ້ຂັດຂວາງການລົງທະບຽນ
ການຈັດສັນຈາກການນໍາໃຊ້ການລົງທະບຽນເປົ້າຫມາຍສໍາລັບການເກັບຮັກສາຈໍານວນເຕັມທໍາມະດາ.

-minvalid-ສັນຍາລັກ
ສົມມຸດວ່າສັນຍາລັກອາດຈະບໍ່ຖືກຕ້ອງ. ສັນຍາລັກຟັງຊັນທຳມະດາທີ່ສ້າງຂຶ້ນໂດຍຄອມພີວເຊີ
ຖືກຕ້ອງສະເໝີໃນການໂຫຼດດ້ວຍ "movi"/"shori"/"ptabs" ຫຼື "movi"/"shori"/"ptrel", ແຕ່.
ດ້ວຍ tricks assembler ແລະ / ຫຼື linker ມັນເປັນໄປໄດ້ທີ່ຈະສ້າງສັນຍາລັກທີ່ເຮັດໃຫ້ເກີດ
"ptabs" ຫຼື "ptrel" ເພື່ອໃສ່ກັບດັກ. ທາງເລືອກນີ້ແມ່ນມີຄວາມຫມາຍພຽງແຕ່ໃນເວລາທີ່ -mno-pt-ແກ້ໄຂ ແມ່ນຢູ່ໃນ
ຜົນກະທົບ. ມັນປ້ອງກັນບໍ່ໃຫ້ CSE ຂ້າມພື້ນຖານ, hoisting ແລະການກໍານົດເວລາທີ່ສຸດຂອງສັນຍາລັກ
ໂຫຼດ. ຄ່າເລີ່ມຕົ້ນແມ່ນ -mno-invalid-ສັນຍາລັກ.

-mbranch-cost=num
ສົມມຸດຕິຖານ num ເພື່ອເປັນຄ່າໃຊ້ຈ່າຍໃນການສອນສາຂາ. ຕົວເລກທີ່ສູງຂຶ້ນເຮັດໃຫ້ compiler
ພະຍາຍາມສ້າງລະຫັດທີ່ບໍ່ມີສາຂາເພີ່ມເຕີມຖ້າເປັນໄປໄດ້. ຖ້າບໍ່ລະບຸຄ່າແມ່ນ
ເລືອກໂດຍອີງຕາມປະເພດຂອງໂປເຊດເຊີທີ່ກໍາລັງຖືກລວບລວມສໍາລັບ.

-mzdcbranch
-mno-zdcbranch
ສົມມຸດ (ບໍ່ສົມມຸດ) ວ່າສູນຄໍາແນະນໍາສາຂາເງື່ອນໄຂ "bt" ແລະ
"bf" ແມ່ນໄວ. ຖ້າ -mzdcbranch ຖືກກໍານົດໄວ້, compiler ມັກສູນ displacement
ລຳດັບລະຫັດສາຂາ. ອັນນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນເມື່ອສ້າງລະຫັດສໍາລັບ SH4 ແລະ
SH4A. ມັນສາມາດຖືກປິດການໃຊ້ງານຢ່າງຊັດເຈນໂດຍການລະບຸ -mno-zdcbranch.

-mcbranch-force-delay-slot
ບັງຄັບໃຊ້ຊ່ອງຊັກຊ້າສໍາລັບສາຂາທີ່ມີເງື່ອນໄຂ, ເຊິ່ງເຮັດໃຫ້ຊ່ອງຊັກຊ້າ
ດ້ວຍ "nop" ຖ້າບໍ່ພົບຄໍາແນະນໍາທີ່ເຫມາະສົມ. ໂດຍຄ່າເລີ່ມຕົ້ນທາງເລືອກນີ້ແມ່ນ
ຄົນພິການ. ມັນສາມາດຖືກເປີດໃຊ້ງານເພື່ອເຮັດວຽກປະມານຂໍ້ບົກພ່ອງຂອງຮາດແວຕາມທີ່ພົບເຫັນຢູ່ໃນຕົ້ນສະບັບ
SH7055.

-mfused-madd
-mno-fused-madd
ສ້າງລະຫັດທີ່ໃຊ້ (ບໍ່ໃຊ້) ຈຸດລອຍຕົວຄູນ ແລະສະສົມ
ຄໍາແນະນໍາ. ຄໍາ​ແນະ​ນໍາ​ເຫຼົ່າ​ນີ້​ແມ່ນ​ໄດ້​ຖືກ​ສ້າງ​ຕັ້ງ​ຂຶ້ນ​ໂດຍ​ຄ່າ​ເລີ່ມ​ຕົ້ນ​ຖ້າ​ຫາກ​ວ່າ​ຮາດ​ແວ​ຈຸດ​ທີ່​ເລື່ອນ​ໄດ້​
ຖືກນໍາໃຊ້. ຂຶ້ນກັບເຄື່ອງຈັກ -mfused-madd ທາງ​ເລືອກ​ໃນ​ປັດ​ຈຸ​ບັນ​ມີ​ແຜນ​ທີ່​ເຄື່ອງ​.
ອິສະລະ -ffp-contract=ໄວ ທາງເລືອກ, ແລະ -mno-fused-madd ແຜນທີ່ແມ່ນ
-ffp-contract=ປິດ.

-mfsca
-mno-fsca
ອະ​ນຸ​ຍາດ​ໃຫ້​ຫຼື​ບໍ່​ອະ​ນຸ​ຍາດ​ໃຫ້ compiler ປ່ອຍ​ຄໍາ​ແນະ​ນໍາ "fsca​" ສໍາ​ລັບ sine ແລະ cosine
ປະມານ. ທາງເລືອກ -mfsca ຕ້ອງ​ໄດ້​ຮັບ​ການ​ນໍາ​ໃຊ້​ຮ່ວມ​ກັບ​
-funsafe-math-optimizations. ມັນຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນເມື່ອສ້າງລະຫັດສໍາລັບ SH4A.
ການນໍາໃຊ້ -mno-fsca ປິດການນຳໃຊ້ການປະມານ sine ແລະ cosine ເຖິງແມ່ນວ່າ
-funsafe-math-optimizations ແມ່ນຢູ່ໃນຜົນກະທົບ.

-mfsrra
-mno-fsrra
ອະ​ນຸ​ຍາດ​ໃຫ້​ຫຼື​ບໍ່​ອະ​ນຸ​ຍາດ​ໃຫ້ compiler ປ່ອຍ​ຄໍາ​ແນະ​ນໍາ "fsrra​" ສໍາ​ລັບ​ການ​ສີ່​ຫຼ່ຽມ​ມົນ​ລະ​ຫວ່າງ​ກັນ
ປະມານຮາກ. ທາງເລືອກ -mfsrra ຕ້ອງ​ໄດ້​ຮັບ​ການ​ນໍາ​ໃຊ້​ຮ່ວມ​ກັບ​
-funsafe-math-optimizations ແລະ -ffinite-math-ເທົ່ານັ້ນ. ມັນຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນເມື່ອ
ການສ້າງລະຫັດສໍາລັບ SH4A. ການນໍາໃຊ້ -mno-fsrra ປິດການນຳໃຊ້ຮາກສີ່ຫຼ່ຽມທີ່ຕ່າງກັນ
ປະມານເຖິງແມ່ນວ່າ -funsafe-math-optimizations ແລະ -ffinite-math-ເທົ່ານັ້ນ ແມ່ນຢູ່ໃນ
ຜົນກະທົບ.

-mpretend-cmove
ຕ້ອງການສາຂາທີ່ມີເງື່ອນໄຂການຍ້າຍສູນສໍາລັບຄໍາແນະນໍາການຍ້າຍຕາມເງື່ອນໄຂ
ຮູບແບບ. ນີ້ສາມາດສົ່ງຜົນໃຫ້ລະຫັດໄວຂຶ້ນໃນໂປເຊດເຊີ SH4.

ແສງອາທິດ 2 ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ -m ທາງ​ເລືອກ​ແມ່ນ​ສະ​ຫນັບ​ສະ​ຫນູນ​ໃນ Solaris 2​:

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

- ຂໍ້ຄວາມທີ່ບໍ່ສະອາດ
- ຂໍ້ຄວາມທີ່ບໍ່ສະອາດ, ນໍາ​ໃຊ້​ນອກ​ເຫນືອ​ໄປ​ຈາກ​ - ແບ່ງ​ປັນ​, ບອກ compiler ບໍ່ຜ່ານ -z ຂໍ້ຄວາມ to
linker ເມື່ອເຊື່ອມຕໍ່ວັດຖຸທີ່ໃຊ້ຮ່ວມກັນ. ການນໍາໃຊ້ທາງເລືອກນີ້, ທ່ານສາມາດເຊື່ອມຕໍ່ຕໍາແຫນ່ງ -
ລະຫັດຂຶ້ນກັບວັດຖຸທີ່ໃຊ້ຮ່ວມກັນ.

- ຂໍ້ຄວາມທີ່ບໍ່ສະອາດ ສະກັດກັ້ນ "ການຍົກຍ້າຍທີ່ຍັງຄົງຢູ່ຕໍ່ກັບການຈັດສັນແຕ່ບໍ່ສາມາດຂຽນໄດ້
sections" linker ຂໍ້​ຄວາມ​ຜິດ​ພາດ. ແນວ​ໃດ​ກໍ​ຕາມ, ການ​ຍົກ​ຍ້າຍ​ທີ່​ຈໍາ​ເປັນ​ກະ​ຕຸ້ນ​ໃຫ້​ເກີດ copy-on-
ຂຽນ, ແລະວັດຖຸທີ່ໃຊ້ຮ່ວມກັນບໍ່ໄດ້ແບ່ງປັນຕົວຈິງໃນທົ່ວຂະບວນການ. ແທນ​ທີ່
ການນໍາໃຊ້ - ຂໍ້ຄວາມທີ່ບໍ່ສະອາດ, ທ່ານຄວນລວບລວມລະຫັດແຫຼ່ງທັງຫມົດດ້ວຍ -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 ອື່ນໆ. ມັນບໍ່ແມ່ນຄ່າເລີ່ມຕົ້ນ
ເນື່ອງຈາກວ່າມັນເຮັດໃຫ້ການສູນເສຍປະສິດທິພາບ, ໂດຍສະເພາະສໍາລັບລະຫັດຈຸດທີ່ເລື່ອນໄດ້.

-muser-mode
-mno-user-mode
ຢ່າສ້າງລະຫັດທີ່ສາມາດແລ່ນໄດ້ໃນໂໝດຜູ້ຄຸມເທົ່ານັ້ນ. ນີ້ແມ່ນກ່ຽວຂ້ອງພຽງແຕ່ສໍາລັບ
ຄໍາແນະນໍາ "casa" ປ່ອຍອອກມາສໍາລັບໂປເຊດເຊີ LEON3. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-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, leon3, leon3v7, ກະຈ່າງໃສ, 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, leon3v7

v8 superspark, hypersparc, leon, leon3

ກະຈ່າງໃສ
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, leon3, leon3v7, f930, f934, sparclite86x,
tsc701, ultrasparc, ultrasparc3, niagara, ນີກາຣາ2, ນີກາຣາ3 ແລະ ນີກາຣາ4ທີ່ຢູ່ ມີ
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.

-mcbcond
-mno-cbcond
ກັບ -mcbcond, GCC ສ້າງລະຫັດທີ່ໃຊ້ປະໂຫຍດຈາກການປຽບທຽບແລະສາຂາ
ຄໍາແນະນໍາ, ຕາມທີ່ໄດ້ກໍານົດໄວ້ໃນສະຖາປັດຕະຍະກໍາ Sparc 2011. ຄ່າເລີ່ມຕົ້ນແມ່ນ -mcbcond ໃນເວລາທີ່
ການກໍາຫນົດເປົ້າຫມາຍ CPU ທີ່ສະຫນັບສະຫນູນຄໍາແນະນໍາດັ່ງກ່າວ, ເຊັ່ນ: niagara-4 ແລະຕໍ່ມາ.

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

-mfix-ut699
ເປີດໃຊ້ການແກ້ໄຂບັນຫາທີ່ເປັນເອກະສານສໍາລັບ errata ຈຸດລອຍ ແລະແຄດຂໍ້ມູນ
nullify errata ຂອງໂປເຊດເຊີ UT699.

ເຫຼົ່ານີ້ -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 ໃຫ້ an
ຂໍ້ຜິດພາດໃນເວລາທີ່ມັນສ້າງລະຫັດທີ່ຮຽກຮ້ອງໃຫ້ມີການຍົກຍ້າຍແບບເຄື່ອນໄຫວ. -mno-error-reloc
ປິດ​ການ​ທໍາ​ງານ​ຄວາມ​ຜິດ​ພາດ​, -mwar-reloc ສ້າງການແຈ້ງເຕືອນແທນ.

-msafe-dma
-munsafe-dma
ຄໍາແນະນໍາທີ່ລິເລີ່ມຫຼືການທົດສອບສໍາເລັດຂອງ DMA ຈະຕ້ອງບໍ່ຖືກຈັດລໍາດັບໃຫມ່ດ້ວຍ
ກ່ຽວກັບການໂຫຼດແລະເກັບຮັກສາຄວາມຊົງຈໍາທີ່ກໍາລັງເຂົ້າເຖິງ. ກັບ -munsafe-dma
ທ່ານຕ້ອງໃຊ້ຄໍາສໍາຄັນ "volatile" ເພື່ອປ້ອງກັນການເຂົ້າເຖິງຫນ່ວຍຄວາມຈໍາ, ແຕ່ວ່າສາມາດນໍາໄປສູ່
ລະຫັດທີ່ບໍ່ມີປະສິດທິພາບໃນສະຖານທີ່ທີ່ຮູ້ວ່າຫນ່ວຍຄວາມຈໍາບໍ່ປ່ຽນແປງ. ແທນທີ່ຈະຫມາຍ
ຫນ່ວຍຄວາມຈໍາເປັນຕົວປ່ຽນແປງ, ທ່ານສາມາດນໍາໃຊ້ -msafe-dma ເພື່ອບອກຜູ້ລວບລວມຂໍ້ມູນໃຫ້ປະຕິບັດ 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" ຄຸນສົມບັດພື້ນທີ່ທີ່ຢູ່ທີ່ມີຊື່ວ່າ "__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:

-mcmodel=ຂະໜາດນ້ອຍ
ສ້າງລະຫັດສໍາລັບຕົວແບບຂະຫນາດນ້ອຍ. ໄລຍະຫ່າງສໍາລັບການໂທໂດຍກົງແມ່ນຈໍາກັດຢູ່ທີ່ 500M
ໃນທິດທາງໃດກໍ່ຕາມ. ທີ່ຢູ່ PC-relative ແມ່ນ 32 bits. ທີ່ຢູ່ຢ່າງແທ້ຈິງສະຫນັບສະຫນູນ
ຂອບເຂດທີ່ຢູ່ເຕັມ.

-mcmodel=ໃຫຍ່
ສ້າງລະຫັດສໍາລັບຮູບແບບຂະຫນາດໃຫຍ່. ບໍ່​ມີ​ຂໍ້​ຈໍາ​ກັດ​ໃນ​ໄລ​ຍະ​ການ​ໂທ​, PC-
ທີ່ຢູ່ທີ່ກ່ຽວຂ້ອງ, ຫຼືທີ່ຢູ່ຢ່າງແທ້ຈິງ.

-mcpu=ຊື່
ເລືອກປະເພດຂອງ CPU ທີ່ຈະເປັນເປົ້າຫມາຍ. ປະ​ຈຸ​ບັນ​ສະ​ຫນັບ​ສະ​ຫນູນ​ພຽງ​ແຕ່​ປະ​ເພດ​ tilegx.

-m32
-m64
ສ້າງລະຫັດສໍາລັບສະພາບແວດລ້ອມ 32-bit ຫຼື 64-bit. ສະພາບແວດລ້ອມ 32-bit ກໍານົດ int,
ຍາວ, ແລະຊີ້ໄປຫາ 32 bits. ສະພາບແວດລ້ອມ 64-bit ກໍານົດ int ເປັນ 32 bits ແລະຍາວແລະ
ຊີ້ໄປຫາ 64 bits.

-mbig-endian
-mlittle-endian
ສ້າງລະຫັດໃນຮູບແບບ endian ໃຫຍ່/ນ້ອຍ, ຕາມລໍາດັບ.

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.

-mv850e3v5
ລະບຸວ່າໂຮງງານຜະລິດເປົ້າໝາຍແມ່ນ V850E3V5. preprocessor ຄົງທີ່
"__v850e3v5__" ຖືກກໍານົດຖ້າຕົວເລືອກນີ້ຖືກນໍາໃຊ້.

-mv850e2v4
ລະບຸວ່າໂຮງງານຜະລິດເປົ້າໝາຍແມ່ນ V850E3V5. ນີ້ແມ່ນນາມແຝງສໍາລັບ
-mv850e3v5 ທາງເລືອກ.

-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 neither -mv850e3v5
ຖືກກໍານົດຫຼັງຈາກນັ້ນໂຮງງານຜະລິດເປົ້າຫມາຍເລີ່ມຕົ້ນຖືກເລືອກແລະທີ່ກ່ຽວຂ້ອງ __v850*__
preprocessor ຄົງທີ່ຖືກກໍານົດ.

ຄ່າຄົງທີ່ຂອງຕົວປະມວນຜົນກ່ອນ "__v850" ແລະ "__v851__" ແມ່ນຖືກກໍານົດສະເໝີ, ໂດຍບໍ່ຄໍານຶງເຖິງ.
ຕົວແປຂອງໂປເຊດເຊີໃດແມ່ນເປົ້າຫມາຍ.

-mdisable-callt
-mno-disable-callt
ຕົວເລືອກນີ້ສະກັດກັ້ນການສ້າງ "CALLT" ຄໍາແນະນໍາສໍາລັບ v850e, v850e1,
v850e2, v850e2v3 ແລະ v850e3v5 ລົດຊາດຂອງສະຖາປັດຕະຍະກໍາ v850.

ຕົວເລືອກນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນເມື່ອ RH850 ABI ຖືກໃຊ້ (ເບິ່ງ -mrh850-abi), ແລະ
ປິດການນຳໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນເມື່ອ GCC ABI ນຳໃຊ້ຢູ່. ຖ້າ "CALLT" ຄໍາແນະນໍາແມ່ນເປັນ
ສ້າງຂຶ້ນຫຼັງຈາກນັ້ນສັນຍາລັກ C preprocessor "__V850_CALLT__" ຖືກກໍານົດ.

-mrelax
-mno-ຜ່ອນຄາຍ
ຜ່ານ (ຫຼືບໍ່ຜ່ານ) ໄດ້ -mrelax ຕົວເລືອກເສັ້ນຄໍາສັ່ງໃຫ້ກັບຜູ້ປະກອບ.

-mlong-ໂດດ
-mno-ຍາວ-ໂດດ
ປິດການໃຊ້ງານ (ຫຼືເປີດໃຊ້ຄືນໃຫມ່) ການສ້າງຄໍາແນະນໍາກ່ຽວກັບ PC-relative jump.

-msoft-float
-mhard-float
ປິດໃຊ້ງານ (ຫຼືເປີດໃຊ້ໃຫມ່) ການສ້າງຄໍາແນະນໍາຈຸດເລື່ອນຂອງຮາດແວ. ນີ້
ທາງເລືອກແມ່ນມີຄວາມສໍາຄັນພຽງແຕ່ເມື່ອສະຖາປັດຕະຍະກໍາເປົ້າຫມາຍແມ່ນ V850E2V3 ຫຼືສູງກວ່າ. ຖ້າ
ຄໍາແນະນໍາຈຸດລອຍຂອງຮາດແວກໍາລັງຖືກສ້າງຂື້ນຫຼັງຈາກນັ້ນ C preprocessor
ສັນຍາລັກ "__FPU_OK__" ແມ່ນຖືກກໍານົດ, ຖ້າບໍ່ດັ່ງນັ້ນສັນຍາລັກ "__NO_FPU__" ແມ່ນຖືກກໍານົດ.

- ມົວ
ເປີດການນຳໃຊ້ຄຳສັ່ງ e3v5 LOOP. ການນໍາໃຊ້ຄໍາແນະນໍານີ້ແມ່ນບໍ່
ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນເມື່ອສະຖາປັດຕະຍະກຳ e3v5 ຖືກເລືອກເນື່ອງຈາກການນຳໃຊ້ຂອງມັນຍັງຢູ່
ທົດລອງ.

-mrh850-abi
-mghs
ເປີດໃຊ້ການຮອງຮັບສຳລັບລຸ້ນ RH850 ຂອງ V850 ABI. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ. ກັບ
ABI ສະບັບນີ້ໃຊ້ກົດລະບຽບຕໍ່ໄປນີ້:

* ໂຄງສ້າງຂະໜາດຈຳນວນເຕັມ ແລະສະຫະພັນແມ່ນສົ່ງຄືນຜ່ານຕົວຊີ້ໜ່ວຍຄວາມຈຳແທນ
ລົງທະບຽນ.

* ໂຄງສ້າງຂະຫນາດໃຫຍ່ແລະສະຫະພັນ (ຫຼາຍກວ່າ 8 bytes ໃນຂະຫນາດ) ແມ່ນຜ່ານມູນຄ່າ.

* ຟັງຊັນແມ່ນສອດຄ່ອງກັບຂອບເຂດ 16-bit.

* The -m8byte-align ທາງເລືອກແຖວຄໍາສັ່ງແມ່ນສະຫນັບສະຫນູນ.

* The -mdisable-callt ຕົວເລືອກແຖວຄໍາສັ່ງຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ. ໄດ້
-mno-disable-callt ບໍ່ຮອງຮັບຕົວເລືອກແຖວຄຳສັ່ງ.

ເມື່ອ ABI ລຸ້ນນີ້ຖືກເປີດໃຊ້, ສັນຍາລັກ C preprocessor "__V850_RH850_ABI__"
ຖືກກໍານົດ.

-mgcc-abi
ເປີດໃຊ້ການຮອງຮັບ GCC ລຸ້ນເກົ່າຂອງ V850 ABI. ດ້ວຍ ABI ລຸ້ນນີ້
ກົດ​ລະ​ບຽບ​ດັ່ງ​ຕໍ່​ໄປ​ນີ້​ນໍາ​ໃຊ້​:

* ໂຄງສ້າງຂະໜາດຈຳນວນເຕັມ ແລະ ສະຫະພັນຖືກສົ່ງຄືນໃນທະບຽນ "r10".

* ໂຄງສ້າງຂະຫນາດໃຫຍ່ແລະສະຫະພັນ (ຫຼາຍກວ່າ 8 bytes ໃນຂະຫນາດ) ແມ່ນຜ່ານການອ້າງອີງ.

* ຟັງຊັນແມ່ນສອດຄ່ອງຕາມຂອບເຂດ 32-bit, ເວັ້ນເສຍແຕ່ຈະເພີ່ມປະສິດທິພາບສໍາລັບຂະຫນາດ.

* The -m8byte-align ບໍ່ຮອງຮັບຕົວເລືອກແຖວຄຳສັ່ງ.

* The -mdisable-callt ທາງເລືອກແຖວຄໍາສັ່ງແມ່ນສະຫນັບສະຫນູນແຕ່ບໍ່ໄດ້ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

ເມື່ອ ABI ລຸ້ນນີ້ຖືກເປີດໃຊ້, ສັນຍາລັກ C preprocessor "__V850_GCC_ABI__"
ຖືກກໍານົດ.

-m8byte-align
-mno-8byte-align
ເປີດໃຊ້ການຮອງຮັບປະເພດ "ຄູ່" ແລະ "ຍາວຍາວ" ເພື່ອຈັດລຽງຕາມຂອບເຂດ 8-byte.
ຄ່າເລີ່ມຕົ້ນແມ່ນເພື່ອຈໍາກັດການຈັດຕໍາແຫນ່ງຂອງວັດຖຸທັງຫມົດຢູ່ທີ່ສູງສຸດ 4-bytes. ເມື່ອ​ໃດ​
-m8byte-align ມີຜົນບັງຄັບໃຊ້ສັນຍາລັກ C preprocessor "__V850_8BYTE_ALIGN__" ແມ່ນ
ກໍານົດ.

-mbig-ສະຫຼັບ
ສ້າງລະຫັດທີ່ເຫມາະສົມສໍາລັບຕາຕະລາງສະຫຼັບຂະຫນາດໃຫຍ່. ໃຊ້ທາງເລືອກນີ້ພຽງແຕ່ຖ້າຫາກວ່າ
assembler/linker ຈົ່ມກ່ຽວກັບສາຂານອກຂອບເຂດພາຍໃນຕາຕະລາງສະຫຼັບ.

-mapp-regs
ຕົວເລືອກນີ້ເຮັດໃຫ້ r2 ແລະ r5 ຖືກນໍາໃຊ້ໃນລະຫັດທີ່ສ້າງຂຶ້ນໂດຍ compiler. ນີ້
ການຕັ້ງຄ່າແມ່ນຄ່າເລີ່ມຕົ້ນ.

-mno-app-regs
ທາງເລືອກນີ້ເຮັດໃຫ້ r2 ແລະ r5 ຖືກປະຕິບັດເປັນທະບຽນຄົງທີ່.

Vax ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ -m ທາງເລືອກແມ່ນຖືກກໍານົດສໍາລັບ VAX:

- munix
ຢ່າອອກຄໍາແນະນໍາການໂດດທີ່ແນ່ນອນ ("aobleq" ແລະອື່ນໆ) ທີ່ເຄື່ອງປະກອບ Unix
ສໍາລັບ VAX ບໍ່ສາມາດຈັດການກັບໄລຍະໄກໄດ້.

-mgnu
ເຮັດອອກຄໍາແນະນໍາການກະໂດດເຫຼົ່ານັ້ນ, ຕາມສົມມຸດຕິຖານວ່າຕົວປະກອບ GNU ກໍາລັງເປັນ
ໃຊ້ແລ້ວ.

- ມກ ລະຫັດອອກສໍາລັບຕົວເລກຈຸດລອຍຮູບແບບ G ແທນທີ່ຈະເປັນຮູບແບບ D.

ວິໄສທັດ ທາງເລືອກໃນການ

-mdebug
ໂປຣແກມທີ່ປະຕິບັດໄຟລ໌ I/O ແລະຖືກກຳນົດໃຫ້ແລ່ນຢູ່ໃນເປົ້າໝາຍ MCM ຄວນເປັນ
ເຊື່ອມໂຍງກັບທາງເລືອກນີ້. ມັນເຮັດໃຫ້ຫ້ອງສະຫມຸດ libc.a ແລະ libdebug.a ເຊື່ອມໂຍງ.
ໂປລແກລມຄວນຈະຖືກດໍາເນີນການຢູ່ໃນເປົ້າຫມາຍພາຍໃຕ້ການຄວບຄຸມຂອງ GDB ການດີບັກທາງໄກ
ຕົ້ນຫົວ.

- ຊິມ
ໂຄງ​ການ​ທີ່​ປະ​ຕິ​ບັດ I/O ໄຟລ​໌​ແລະ​ຈຸດ​ຫມາຍ​ປາຍ​ທາງ​ທີ່​ຈະ​ດໍາ​ເນີນ​ການ​ໃນ simulator ຄວນ​ຈະ​ເປັນ​
ເຊື່ອມໂຍງກັບທາງເລືອກ. ນີ້ເຮັດໃຫ້ຫ້ອງສະຫມຸດ libc.a ແລະ libsim.a ເຊື່ອມໂຍງ.

-mfpu
-mhard-float
ສ້າງລະຫັດທີ່ມີຄໍາແນະນໍາຈຸດລອຍ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-mno-fpu
-msoft-float
ສ້າງລະຫັດທີ່ມີຫ້ອງສະຫມຸດໂທຫາຈຸດເລື່ອນ.

-msoft-float ການປ່ຽນແປງສົນທິສັນຍາການໂທໃນໄຟລ໌ຜົນຜະລິດ; ເພາະສະນັ້ນ, ມັນເປັນພຽງແຕ່
ເປັນປະໂຫຍດຖ້າຫາກວ່າທ່ານລວບລວມ ທັງຫມົດ ຂອງ​ໂຄງ​ການ​ທີ່​ມີ​ທາງ​ເລືອກ​ນີ້​. ໂດຍສະເພາະ, ທ່ານຈໍາເປັນຕ້ອງ
ລວບລວມ libgcc.a, ຫ້ອງສະຫມຸດທີ່ມາພ້ອມກັບ GCC, ກັບ -msoft-float ໃນຄໍາສັ່ງສໍາລັບການນີ້
ເຮັດ​ວຽກ.

-mcpu=cpu_type
ກໍາ​ນົດ​ຊຸດ​ຄໍາ​ສັ່ງ​, ການ​ລົງ​ທະ​ບຽນ​, ແລະ​ຕົວ​ກໍາ​ນົດ​ການ​ກໍາ​ນົດ​ເວ​ລາ​ຄໍາ​ແນະ​ນໍາ​ສໍາ​ລັບ​ການ​
ປະເພດເຄື່ອງຈັກ cpu_type. ຄຸນ​ຄ່າ​ສະ​ຫນັບ​ສະ​ຫນູນ​ສໍາ​ລັບ​ການ​ cpu_type ມີ mcm, gr5 ແລະ gr6.

mcm ແມ່ນຄໍາສັບຄ້າຍຄື gr5 ປະຈຸບັນເພື່ອຄວາມເຂົ້າກັນໄດ້ກັບຫຼັງ.

ໂດຍຄ່າເລີ່ມຕົ້ນ (ເວັ້ນເສຍແຕ່ຈະຕັ້ງຄ່າເປັນຢ່າງອື່ນ), GCC ສ້າງລະຫັດສໍາລັບຕົວແປ GR5 ຂອງ
ສະຖາປັດຕະຍະກໍາ Visium.

ກັບ -mcpu=gr6, GCC ສ້າງລະຫັດສໍາລັບຕົວແປ GR6 ຂອງສະຖາປັດຕະຍະກໍາ Visium.
ຄວາມແຕກຕ່າງພຽງແຕ່ຈາກລະຫັດ GR5 ແມ່ນວ່າ compiler ຈະສ້າງການເຄື່ອນໄຫວບລັອກ
ຄໍາແນະນໍາ.

-mtune=cpu_type
ກໍານົດຕົວກໍານົດການກໍານົດເວລາຄໍາແນະນໍາສໍາລັບປະເພດເຄື່ອງຈັກ cpu_type, ແຕ່ບໍ່ໄດ້ກໍານົດ
ຊຸດຄໍາແນະນໍາຫຼືລົງທະບຽນກໍານົດທາງເລືອກນັ້ນ -mcpu=cpu_type ຈະ.

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

-muser-mode
ສ້າງລະຫັດສໍາລັບຮູບແບບຜູ້ໃຊ້, ບ່ອນທີ່ມີການເຂົ້າເຖິງການລົງທະບຽນທົ່ວໄປບາງຢ່າງ
ຫ້າມ: ໃນ GR5, ລົງທະບຽນ r24 ຫາ r31 ບໍ່ສາມາດເຂົ້າເຖິງໄດ້ໃນຮູບແບບນີ້; ສຸດ
GR6, ພຽງແຕ່ລົງທະບຽນ r29 ຫາ r31 ໄດ້ຮັບຜົນກະທົບ.

ສ່ວນຂະຫຍາຍ VMS ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ -m ທາງເລືອກແມ່ນຖືກກໍານົດສໍາລັບການຈັດຕັ້ງປະຕິບັດ VMS:

-mvms-return-codes
ກັບຄືນລະຫັດເງື່ອນໄຂ VMS ຈາກ "ຕົ້ນຕໍ". ຄ່າເລີ່ມຕົ້ນແມ່ນເພື່ອສົ່ງຄືນເງື່ອນໄຂແບບ POSIX
(ເຊັ່ນ: ຄວາມຜິດພາດ) ລະຫັດ.

-mdebug-main=ຄຳ ນຳ ໜ້າ
ໝາຍສິ່ງທີ່ເຮັດປະຈຳທຳອິດທີ່ຊື່ເລີ່ມຕົ້ນດ້ວຍ ຄຳ ນຳ ໜ້າ ເປັນປົກກະຕິຕົ້ນຕໍສໍາລັບການ
ດີບັກ.

- mmalloc64
ເລີ່ມຕົ້ນເປັນກິດຈະວັດການຈັດສັນໜ່ວຍຄວາມຈຳ 64-ບິດ.

-mpointer-size=ຂະຫນາດ
ກໍານົດຂະຫນາດເລີ່ມຕົ້ນຂອງຕົວຊີ້. ທາງເລືອກທີ່ເປັນໄປໄດ້ສໍາລັບ ຂະຫນາດ ມີ 32 or ສັ້ນ ສໍາລັບ 32 ບິດ
ຕົວ​ຊີ້​, 64 or ຍາວ ສໍາລັບຕົວຊີ້ 64 ບິດ, ແລະ no ສໍາ​ລັບ​ການ​ສະ​ຫນັບ​ສະ​ຫນູນ​ພຽງ​ແຕ່ 32 ຕົວ​ຊີ້​.
ທາງເລືອກຕໍ່ມາປິດການໃຊ້ງານ "pragma pointer_size".

VxWorks ທາງເລືອກໃນການ

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

-mrtp
GCC ສາມາດສ້າງລະຫັດສໍາລັບທັງສອງແກ່ນ VxWorks ແລະຂະບວນການເວລາຈິງ (RTPs). ນີ້
ທາງເລືອກປ່ຽນຈາກອະດີດໄປຫາອັນສຸດທ້າຍ. ມັນຍັງກໍານົດ macro preprocessor
"__RTP__".

- ບໍ່ສະຖິດ
ເຊື່ອມຕໍ່ RTP ທີ່ປະຕິບັດໄດ້ກັບຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນແທນທີ່ຈະເປັນຫ້ອງສະຫມຸດຄົງທີ່. ໄດ້
ທາງເລືອກໃນການ -static ແລະ - ແບ່ງ​ປັນ​ ຍັງສາມາດຖືກນໍາໃຊ້ສໍາລັບ RTPs; -static ເປັນຄ່າເລີ່ມຕົ້ນ.

-Bstatic
-Bdynamic
ທາງເລືອກເຫຼົ່ານີ້ຖືກສົ່ງຜ່ານໄປຫາຕົວເຊື່ອມຕໍ່. ພວກມັນຖືກ ກຳ ນົດເພື່ອຄວາມເຂົ້າກັນໄດ້ກັບ
Diab.

-Xbind-lazy
ເປີດໃຊ້ການຜູກມັດຂອງການໂທຟັງຊັນ. ທາງເລືອກນີ້ແມ່ນທຽບເທົ່າກັບ -Wl,-z, ດຽວນີ້ ແລະແມ່ນ
ກໍານົດສໍາລັບຄວາມເຂົ້າກັນໄດ້ກັບ Diab.

-Xbind-ດຽວນີ້
ປິດໃຊ້ງານການຜູກມັດຂອງການໂທຟັງຊັນ. ທາງເລືອກນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນແລະຖືກກໍານົດໄວ້ສໍາລັບ
ຄວາມເຂົ້າກັນໄດ້ກັບ Diab.

x86 ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ -m ທາງເລືອກແມ່ນຖືກກໍານົດສໍາລັບຄອບຄົວ x86 ຂອງຄອມພິວເຕີ.

- ມີນາ=cpu-type
ສ້າງຄໍາແນະນໍາສໍາລັບປະເພດເຄື່ອງຈັກ cpu-type. ກົງກັນຂ້າມກັບ -mtune=cpu-type,
ເຊິ່ງພຽງແຕ່ປັບລະຫັດທີ່ສ້າງຂຶ້ນເພື່ອກໍານົດໄວ້ cpu-type, - ມີນາ=cpu-type
ອະນຸຍາດໃຫ້ GCC ສ້າງລະຫັດທີ່ອາດຈະບໍ່ເຮັດວຽກຢູ່ໃນໂປເຊດເຊີອື່ນນອກເຫນືອຈາກຫນຶ່ງ
ຊີ້ບອກ. ການລະບຸ - ມີນາ=cpu-type implies -mtune=cpu-type.

ທາງ​ເລືອກ​ສໍາ​ລັບ​ການ​ cpu-type ແມ່ນ:

native
ນີ້ເລືອກ CPU ເພື່ອສ້າງລະຫັດສໍາລັບການລວບລວມເວລາໂດຍການກໍານົດ
ປະເພດໂປເຊດເຊີຂອງເຄື່ອງຈັກລວບລວມ. ການນໍາໃຊ້ -march=native ເຮັດໃຫ້ທັງຫມົດ
ຊຸດຍ່ອຍຄໍາແນະນໍາທີ່ສະຫນັບສະຫນູນໂດຍເຄື່ອງຈັກທ້ອງຖິ່ນ (ດັ່ງນັ້ນຜົນໄດ້ຮັບອາດຈະບໍ່ດໍາເນີນການ
ໃນເຄື່ອງທີ່ແຕກຕ່າງກັນ). ການນໍາໃຊ້ -mtune=native ຜະລິດລະຫັດທີ່ດີທີ່ສຸດສໍາລັບທ້ອງຖິ່ນ
ເຄື່ອງພາຍໃຕ້ຂໍ້ຈໍາກັດຂອງຊຸດຄໍາແນະນໍາທີ່ເລືອກ.

i386
CPU Intel i386 ຕົ້ນສະບັບ.

i486
CPU Intel i486. (ບໍ່​ມີ​ການ​ກໍາ​ນົດ​ເວ​ລາ​ແມ່ນ​ປະ​ຕິ​ບັດ​ສໍາ​ລັບ​ການ chip ນີ້​.

i586
ເພນ
CPU Intel Pentium ທີ່ບໍ່ຮອງຮັບ MMX.

pentium-mmx
Intel Pentium MMX CPU, ອີງໃສ່ Pentium core ທີ່ມີການສະຫນັບສະຫນູນຊຸດຄໍາແນະນໍາ MMX.

pentiumpro
CPU Intel Pentium Pro.

i686
ເມື່ອໃຊ້ກັບ - ມີນາ, ຊຸດຄໍາແນະນໍາ Pentium Pro ຖືກນໍາໃຊ້, ດັ່ງນັ້ນລະຫັດແລ່ນ
ໃນຊິບຄອບຄົວ i686 ທັງໝົດ. ເມື່ອໃຊ້ກັບ -mtune, ມັນ​ມີ​ຄວາມ​ຫມາຍ​ດຽວ​ກັນ​ກັບ​
generic.

pentium 2
CPU Intel Pentium II, ອີງໃສ່ Pentium Pro core ທີ່ມີການສະຫນັບສະຫນູນຊຸດຄໍາແນະນໍາ MMX.

pentium 3
pentium 3 ມ
CPU Intel Pentium III, ອີງໃສ່ Pentium Pro core ກັບຊຸດຄໍາແນະນໍາ MMX ແລະ SSE
ສະຫນັບສະຫນູນ.

pentium-ມ
Intel Pentium M; ລຸ້ນພະລັງງານຕໍ່າຂອງ CPU Intel Pentium III ທີ່ມີ MMX, SSE ແລະ SSE2
ສະຫນັບສະຫນູນຊຸດຄໍາແນະນໍາ. ໃຊ້ໂດຍປື້ມບັນທຶກ Centrino.

pentium 4
pentium 4 ມ
CPU Intel Pentium 4 ຮອງຮັບຊຸດຄໍາແນະນໍາ MMX, SSE ແລະ SSE2.

Prescott
ສະບັບປັບປຸງຂອງ CPU Intel Pentium 4 ດ້ວຍຄໍາແນະນໍາ MMX, SSE, SSE2 ແລະ SSE3
ກໍາ​ນົດ​ສະ​ຫນັບ​ສະ​ຫນູນ​.

ໂນໂຄນາ
ສະບັບປັບປຸງຂອງ CPU Intel Pentium 4 ທີ່ມີສ່ວນຂະຫຍາຍ 64-bit, MMX, SSE, SSE2 ແລະ
ສະຫນັບສະຫນູນຊຸດຄໍາແນະນໍາ SSE3.

ຫຼັກ 2
CPU Intel Core 2 ທີ່ມີສ່ວນຂະຫຍາຍ 64-bit, MMX, SSE, SSE2, SSE3 ແລະ SSSE3
ສະຫນັບສະຫນູນຊຸດຄໍາແນະນໍາ.

ເນຮາເລັມ
CPU Intel Nehalem ທີ່ມີສ່ວນຂະຫຍາຍ 64-bit, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2 ແລະຊຸດຄໍາແນະນໍາ POPCNT ສະຫນັບສະຫນູນ.

ເວດມົນ
CPU Intel Westmere ທີ່ມີສ່ວນຂະຫຍາຍ 64-bit, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, POPCNT, AES ແລະ PCLMUL ສະຫນັບສະຫນູນຊຸດຄໍາແນະນໍາ.

ຂົວຊາຍ
CPU Intel Sandy Bridge ທີ່ມີສ່ວນຂະຫຍາຍ 64-bit, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AES ແລະ PCLMUL ສະຫນັບສະຫນູນຊຸດຄໍາແນະນໍາ.

ຂົວໄອວີ
CPU Intel Ivy Bridge ທີ່ມີສ່ວນຂະຫຍາຍ 64-bit, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
ຊຸດຄໍາແນະນໍາ SSE4.2, POPCNT, AVX, AES, PCLMUL, FSGSBASE, RDRND ແລະ F16C
ສະຫນັບສະຫນູນ.

ສະບາຍ
CPU Intel Haswell ທີ່ມີສ່ວນຂະຫຍາຍ 64-bit, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2
ແລະຊຸດຄໍາແນະນໍາ F16C ສະຫນັບສະຫນູນ.

ກວ້າງ
Intel Broadwell CPU ທີ່ມີສ່ວນຂະຫຍາຍ 64-bit, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2,
F16C, RDSEED, ADCX ແລະ PREFETCHW ສະຫນັບສະຫນູນຊຸດຄໍາແນະນໍາ.

bonnell
Intel Bonnell CPU ທີ່ມີສ່ວນຂະຫຍາຍ 64-bit, MOVBE, MMX, SSE, SSE2, SSE3 ແລະ SSSE3
ສະຫນັບສະຫນູນຊຸດຄໍາແນະນໍາ.

ເງິນມອນ
CPU Intel Silvermont ທີ່ມີສ່ວນຂະຫຍາຍ 64-bit, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, SSE4.2, POPCNT, AES, PCLMUL ແລະ RDRND ສະຫນັບສະຫນູນຊຸດຄໍາແນະນໍາ.

knl Intel Knight's Landing CPU ທີ່ມີສ່ວນຂະຫຍາຍ 64-bit, MOVBE, MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, SSE4.2,POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI,
BMI2, F16C, RDSEED, ADCX, PREFETCHW, AVX512F, AVX512PF, AVX512ER ແລະ AVX512CD
ສະຫນັບສະຫນູນຊຸດຄໍາແນະນໍາ.

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
ທາງເລືອກ
ກິລາ 64
ກິລາ-fx
ໂປເຊດເຊີທີ່ອີງໃສ່ AMD K8 core ທີ່ມີຊຸດຄໍາແນະນໍາ x86-64 ສະຫນັບສະຫນູນ, ລວມທັງ
ໂປເຊດເຊີ AMD Opteron, Athlon 64, ແລະ Athlon 64 FX. (ນີ້ supersets MMX,
SSE, SSE2, 3DNow!, ປັບປຸງ 3DNow! ແລະການຂະຫຍາຍຊຸດຄໍາແນະນໍາ 64-bit.)

k8-sse3
opteron-sse3
athlon64-sse3
ຮຸ່ນທີ່ປັບປຸງຂອງ AMD K8 cores ດ້ວຍການສະຫນັບສະຫນູນຊຸດຄໍາແນະນໍາ SSE3.

amdfam10
ບາເຊໂລນາ
CPUs ອີງໃສ່ AMD Family 10h cores ທີ່ມີຊຸດຄໍາແນະນໍາ x86-64 ສະຫນັບສະຫນູນ. (ນີ້
supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, ປັບປຸງ 3DNow!, ABM ແລະ 64-bit
ການຂະຫຍາຍຊຸດຄໍາແນະນໍາ.)

bdver1
CPUs ອີງໃສ່ AMD Family 15h cores ທີ່ມີຊຸດຄໍາແນະນໍາ 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, FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE,
SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM ແລະຊຸດຄໍາແນະນໍາ 64-bit
ສ່ວນຂະຫຍາຍ.)

bdver3
AMD Family 15h cores CPUs ທີ່ຮອງຮັບຊຸດຄໍາແນະນໍາ x86-64. (ນີ້
supersets BMI, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, XOP, LWP, AES, PCL_MUL, CX16,
MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM ແລະຊຸດຄໍາແນະນໍາ 64-bit
extensions

bdver4
AMD Family 15h cores CPUs ທີ່ຮອງຮັບຊຸດຄໍາແນະນໍາ x86-64. (ນີ້
supersets BMI, BMI2, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, AVX2, XOP, LWP, AES,
PCL_MUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM ແລະ
ການຂະຫຍາຍຊຸດຄໍາແນະນໍາ 64-bit.

btver1
CPUs ອີງໃສ່ AMD Family 14h cores ທີ່ມີຊຸດຄໍາແນະນໍາ x86-64 ສະຫນັບສະຫນູນ. (ນີ້
supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM ແລະຊຸດຄໍາແນະນໍາ 64-bit
ສ່ວນຂະຫຍາຍ.)

btver2
CPUs ອີງໃສ່ AMD Family 16h cores ທີ່ມີຊຸດຄໍາແນະນໍາ x86-64 ສະຫນັບສະຫນູນ. ນີ້
ລວມມີ MOVBE, F16C, BMI, AVX, PCL_MUL, AES, SSE4.2, SSE4.1, CX16, ABM, SSE4A,
SSSE3, SSE3, SSE2, SSE, MMX ແລະຊຸດຄໍາແນະນໍາ 64-ບິດ.

winchip-c6
IDT WinChip C6 CPU, ປະຕິບັດໃນແບບດຽວກັນກັບ i486 ດ້ວຍຊຸດຄໍາແນະນໍາ MMX ເພີ່ມເຕີມ
ສະຫນັບສະຫນູນ.

winchip2
IDT WinChip 2 CPU, ຈັດການກັບວິທີດຽວກັນກັບ i486 ດ້ວຍ MMX ແລະ 3DNow ເພີ່ມເຕີມ!
ສະຫນັບສະຫນູນຊຸດຄໍາແນະນໍາ.

c3 VIA C3 CPU ກັບ MMX ແລະ 3DNow! ສະຫນັບສະຫນູນຊຸດຄໍາແນະນໍາ. (ບໍ່ມີການກຳນົດເວລາ
ປະຕິບັດສໍາລັບ chip ນີ້.)

c3-2
VIA C3-2 (Nehemiah/C5XL) CPU ທີ່ຮອງຮັບຊຸດຄຳສັ່ງ MMX ແລະ SSE. (ບໍ່
ການກໍານົດເວລາແມ່ນປະຕິບັດສໍາລັບຊິບນີ້.)

geode
AMD Geode ຝັງໂປເຊດເຊີທີ່ມີ MMX ແລະ 3DNow! ສະຫນັບສະຫນູນຊຸດຄໍາແນະນໍາ.

-mtune=cpu-type
ປບັ cpu-type ທຸກຢ່າງທີ່ໃຊ້ໄດ້ກ່ຽວກັບລະຫັດທີ່ສ້າງຂຶ້ນ, ຍົກເວັ້ນ ABI
ແລະຊຸດຄໍາແນະນໍາທີ່ມີຢູ່. ໃນຂະນະທີ່ເລືອກສະເພາະ cpu-type ຕາຕະລາງ
ສິ່ງທີ່ເຫມາະສົມສໍາລັບຊິບສະເພາະນັ້ນ, compiler ບໍ່ໄດ້ສ້າງລະຫັດໃດໆ
ທີ່ບໍ່ສາມາດແລ່ນຢູ່ໃນປະເພດເຄື່ອງຈັກເລີ່ມຕົ້ນເວັ້ນເສຍແຕ່ວ່າທ່ານໃຊ້ a - ມີນາ=cpu-type ທາງເລືອກ.
ຕົວຢ່າງ, ຖ້າ GCC ຖືກຕັ້ງຄ່າສໍາລັບ i686-pc-linux-gnu ຫຼັງຈາກນັ້ນ -mtune=pentium4 ສ້າງ
ລະຫັດທີ່ຖືກປັບສໍາລັບ Pentium 4 ແຕ່ຍັງເຮັດວຽກຢູ່ໃນເຄື່ອງ i686.

ທາງ​ເລືອກ​ສໍາ​ລັບ​ການ​ cpu-type ແມ່ນຄືກັນກັບສໍາລັບ - ມີນາທີ່ຢູ່ ເພີ່ມ​ເຕີມ, -mtune ສະ ໜັບ ສະ ໜູນ 2
ທາງ​ເລືອກ​ພິ​ເສດ​ສໍາ​ລັບ​ການ​ cpu-type:

generic
ຜະລິດລະຫັດໃຫ້ເໝາະສົມກັບໂປເຊດເຊີ IA32/AMD64/EM64T ທົ່ວໄປທີ່ສຸດ. ຖ້າ​ເຈົ້າ
ຮູ້ CPU ທີ່ລະຫັດຂອງທ່ານຈະດໍາເນີນການ, ຫຼັງຈາກນັ້ນທ່ານຄວນໃຊ້ທີ່ສອດຄ້ອງກັນ
-mtune or - ມີນາ ທາງ​ເລືອກ​ແທນ​ທີ່​ຈະ​ເປັນ​ -mtune=ທົ່ວໄປ. ແຕ່, ຖ້າທ່ານບໍ່ຮູ້
ແນ່ນອນວ່າຜູ້ໃຊ້ CPU ຂອງແອັບພລິເຄຊັນຂອງເຈົ້າຈະມີຫຍັງແດ່, ຫຼັງຈາກນັ້ນທ່ານຄວນໃຊ້ມັນ
ທາງເລືອກ.

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

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

intel
ຜະລິດລະຫັດທີ່ດີທີ່ສຸດສໍາລັບໂປເຊດເຊີ Intel ໃນປະຈຸບັນທີ່ສຸດ, ເຊິ່ງແມ່ນ Haswell
ແລະ Silvermont ສໍາລັບ GCC ຮຸ່ນນີ້. ຖ້າເຈົ້າຮູ້ CPU ທີ່ລະຫັດຂອງເຈົ້າ
ຈະດໍາເນີນການ, ຫຼັງຈາກນັ້ນທ່ານຄວນໃຊ້ທີ່ສອດຄ້ອງກັນ -mtune or - ມີນາ ທາງ​ເລືອກ​ແທນ​ທີ່​ຈະ​ເປັນ​
-mtune=intel. ແຕ່, ຖ້າທ່ານຕ້ອງການໃຫ້ຄໍາຮ້ອງສະຫມັກຂອງທ່ານເຮັດວຽກດີຂຶ້ນໃນທັງສອງ Haswell
ແລະ Silvermont, ຫຼັງຈາກນັ້ນທ່ານຄວນໃຊ້ທາງເລືອກນີ້.

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

ບໍ່​ມີ -march=intel ທາງ​ເລືອກ​ເພາະ​ວ່າ​ - ມີນາ ຊີ້ບອກຄໍາແນະນໍາທີ່ກໍານົດໄວ້
compiler ສາມາດນໍາໃຊ້ໄດ້, ແລະບໍ່ມີຊຸດຄໍາແນະນໍາທົ່ວໄປທີ່ໃຊ້ໄດ້ກັບທຸກຄົນ
ໂຮງງານຜະລິດ. ໃນ​ທາງ​ກົງ​ກັນ​ຂ້າມ, -mtune ຊີ້ໃຫ້ເຫັນໂຮງງານຜະລິດ (ຫຼື, ໃນກໍລະນີນີ້,
ການລວບລວມໂປເຊດເຊີ) ທີ່ລະຫັດຖືກປັບປຸງໃຫ້ດີທີ່ສຸດ.

-mcpu=cpu-type
ຄຳສັບຄ້າຍຄືກັນທີ່ຖືກປະຕິເສດສຳລັບ -mtune.

-mfpmath=ຫນ່ວຍບໍລິການ
ສ້າງເລກເລກຄະນິດຈຸດລອຍສຳລັບໜ່ວຍທີ່ເລືອກ ຫນ່ວຍບໍລິການ. ທາງ​ເລືອກ​ສໍາ​ລັບ​ການ​ ຫນ່ວຍບໍລິການ ແມ່ນ:

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

ນີ້ແມ່ນທາງເລືອກເລີ່ມຕົ້ນສໍາລັບ x86-32 ເປົ້າຫມາຍ.

sse ໃຊ້ຄໍາແນະນໍາຈຸດເລື່ອນ scalar ທີ່ມີຢູ່ໃນຊຸດຄໍາແນະນໍາ SSE. ນີ້
ຊຸດຄໍາແນະນໍາແມ່ນສະຫນັບສະຫນູນໂດຍ Pentium III ແລະຊິບໃຫມ່ກວ່າ, ແລະໃນສາຍ AMD
ໂດຍ Athlon-4, Athlon XP ແລະ Athlon MP chips. ຮຸ່ນກ່ອນຫນ້າຂອງ SSE
ຊຸດຄໍາແນະນໍາສະຫນັບສະຫນູນພຽງແຕ່ເລກຄະນິດສາດຄວາມແມ່ນຍໍາດຽວ, ດັ່ງນັ້ນຄູ່ແລະ
ເລກເລກຄະນິດແບບຍືດຍາວແມ່ນຍັງເຮັດໄດ້ໂດຍໃຊ້ 387. ສະບັບຕໍ່ມາ, ປະຈຸບັນ
ສະເພາະໃນຊິບ Pentium 4 ແລະ AMD x86-64, ຮອງຮັບການຄິດໄລ່ເລກທີ່ຊັດເຈນສອງເທົ່າ.

ສໍາລັບ x86-32 compiler, ທ່ານຕ້ອງໃຊ້ - ມີນາ=cpu-type, -msse or -msse2 ສະຫຼັບກັບ
ເປີດໃຊ້ການຂະຫຍາຍ SSE ແລະເຮັດໃຫ້ທາງເລືອກນີ້ມີປະສິດທິພາບ. ສໍາລັບ x86-64 compiler,
ສ່ວນຂະຫຍາຍເຫຼົ່ານີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

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

ນີ້ແມ່ນທາງເລືອກເລີ່ມຕົ້ນສໍາລັບ x86-64 compiler.

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

-masm=ພາສາ
ຄໍາແນະນໍາການປະກອບຜົນຜະລິດໂດຍໃຊ້ທີ່ເລືອກ ພາສາ. ຍັງມີຜົນກະທົບຕໍ່ພາສາໃດ
ໃຊ້ສໍາລັບ "asm" ພື້ນຖານແລະຂະຫຍາຍ "asm". ທາງເລືອກທີ່ສະຫນັບສະຫນູນ (ໃນຄໍາສັ່ງພາສາ) ແມ່ນ att
or intel. ຄ່າເລີ່ມຕົ້ນແມ່ນ att. Darwin ບໍ່ສະຫນັບສະຫນູນ intel.

-mieee-fp
-mno-ieee-fp
ຄວບຄຸມວ່າຜູ້ລວບລວມຂໍ້ມູນໃຊ້ການປຽບທຽບຈຸດລອຍຂອງ IEEE ຫຼືບໍ່. ເຫຼົ່ານີ້
ຈັດການກໍລະນີທີ່ຜົນຂອງການປຽບທຽບຖືກຈັດຮຽງຢ່າງຖືກຕ້ອງ.

-msoft-float
ສ້າງຜົນຜະລິດທີ່ມີຫ້ອງສະຫມຸດໂທຫາຈຸດທີ່ເລື່ອນໄດ້.

ຄໍາເຕືອນ: ຫ້ອງສະຫມຸດທີ່ຈໍາເປັນບໍ່ແມ່ນສ່ວນຫນຶ່ງຂອງ GCC. ປົກກະຕິແລ້ວສິ່ງອໍານວຍຄວາມສະດວກຂອງ
C compiler ປົກກະຕິຂອງເຄື່ອງຈັກຖືກນໍາໃຊ້, ແຕ່ນີ້ບໍ່ສາມາດເຮັດໄດ້ໂດຍກົງໃນ cross-
ການລວບລວມ. ທ່ານ​ຕ້ອງ​ເຮັດ​ການ​ຈັດ​ການ​ຂອງ​ຕົນ​ເອງ​ເພື່ອ​ໃຫ້​ຫ້ອງ​ສະ​ຫມຸດ​ທີ່​ເຫມາະ​ສົມ​
ຫນ້າທີ່ສໍາລັບການລວບລວມຂ້າມ.

ໃນເຄື່ອງຈັກທີ່ຟັງຊັນສົ່ງຜົນໃຫ້ຈຸດລອຍຢູ່ໃນທະບຽນ 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. ລະບຸທາງເລືອກນີ້ເພື່ອຫຼີກເວັ້ນການສ້າງຄໍາແນະນໍາເຫຼົ່ານັ້ນ. ທາງ​ເລືອກ​ນີ້​ແມ່ນ​
ຄ່າເລີ່ມຕົ້ນໃນ OpenBSD ແລະ NetBSD. ທາງ​ເລືອກ​ນີ້​ແມ່ນ overridden ໃນ​ເວ​ລາ​ທີ່​ - ມີນາ ຊີ້ໃຫ້ເຫັນວ່າ
CPU ເປົ້າຫມາຍສະເຫມີມີ FPU ແລະດັ່ງນັ້ນຄໍາແນະນໍາບໍ່ຈໍາເປັນຕ້ອງມີ emulation.
ຄໍາແນະນໍາເຫຼົ່ານີ້ບໍ່ໄດ້ຖືກສ້າງຂຶ້ນເວັ້ນເສຍແຕ່ວ່າທ່ານຍັງໃຊ້
-funsafe-math-optimizations ສະຫຼັບ.

-malign-double
-mno-align-double
ຄວບຄຸມວ່າ GCC ວາງຕົວແປ "ຄູ່", "ຄູ່ຍາວ", ແລະ "ຍາວຍາວ" ຢູ່ໃນຕົວແປ a
ຂອບ​ເຂດ​ສອງ​ຄໍາ​ຫຼື​ເຂດ​ແດນ​ຄໍາ​ດຽວ​. ການຈັດຮຽງຕົວແປ "ຄູ່" ໃນສອງຄໍາ
ຂອບເຂດຜະລິດລະຫັດທີ່ແລ່ນໄວຂຶ້ນໃນ Pentium ທີ່ມີຄ່າໃຊ້ຈ່າຍຫຼາຍ
ຄວາມຊົງ ຈຳ.

ສຸດ x86-64, -malign-double ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

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

-m96bit-ຍາວ-ສອງເທົ່າ
-m128bit-ຍາວ-ສອງເທົ່າ
ສະຫວິດເຫຼົ່ານີ້ຄວບຄຸມຂະຫນາດຂອງປະເພດ "ຄູ່ຍາວ". ໄບນາຣີຂອງແອັບພລິເຄຊັນ x86-32
ການໂຕ້ຕອບກໍານົດຂະຫນາດທີ່ຈະເປັນ 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-ເຂົ້າກັນໄດ້ກັບລະຫັດລວບລວມໂດຍບໍ່ມີການສະຫຼັບນັ້ນ.

-mlong-double-64
-mlong-double-80
-mlong-double-128
ສະຫວິດເຫຼົ່ານີ້ຄວບຄຸມຂະຫນາດຂອງປະເພດ "ຄູ່ຍາວ". ຂະຫນາດຂອງ 64 ບິດເຮັດໃຫ້
ປະເພດ "ຄູ່ຍາວ" ເທົ່າກັບປະເພດ "ຄູ່". ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນຂອງ 32-bit
ຫ້ອງສະໝຸດ Bionic C. ຂະຫນາດຂອງ 128 bits ເຮັດໃຫ້ປະເພດ "ຄູ່ຍາວ" ທຽບເທົ່າກັບ
ປະເພດ "__float128". ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນຂອງຫ້ອງສະໝຸດ Bionic C 64-ບິດ.

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

-malign-data=ປະເພດ
ຄວບຄຸມວິທີ GCC ຈັດຮຽງຕົວແປ. ຄຸນ​ຄ່າ​ສະ​ຫນັບ​ສະ​ຫນູນ​ສໍາ​ລັບ​ການ​ ປະເພດ ມີ compat ການ​ນໍາ​ໃຊ້​ເພີ່ມ​ຂຶ້ນ​
alignment value ເຂົ້າກັນໄດ້ໃຊ້ GCC 4.8 ແລະກ່ອນໜ້ານັ້ນ, ຊ່ວຍເຫລືອ ໃຊ້ຄ່າການຈັດຮຽງເປັນ
ກໍານົດໂດຍ psABI, ແລະ cacheline ໃຊ້ມູນຄ່າການຈັດລໍາດັບທີ່ເພີ່ມຂຶ້ນເພື່ອໃຫ້ກົງກັບ
ຂະຫນາດເສັ້ນ cache. compat ເປັນຄ່າເລີ່ມຕົ້ນ.

-mlarge-data-threshold=threshold
ເມື່ອ​ໃດ​ -mcmodel=ປານກາງ ແມ່ນລະບຸໄວ້, ວັດຖຸຂໍ້ມູນໃຫຍ່ກວ່າ threshold ແມ່ນຖືກຈັດໃສ່ໃນ
ພາກສ່ວນຂໍ້ມູນຂະຫນາດໃຫຍ່. ຄ່ານີ້ຈະຕ້ອງຄືກັນທົ່ວທຸກວັດຖຸທີ່ເຊື່ອມຕໍ່ເຂົ້າ
ໄບນາຣີ, ແລະຄ່າເລີ່ມຕົ້ນເປັນ 65535.

-mrtd
ໃຊ້ສົນທິສັນຍາການເອີ້ນຟັງຊັນທີ່ຕ່າງກັນ, ເຊິ່ງຟັງຊັນທີ່ຕ້ອງແກ້ໄຂ
ຈໍານວນຂອງການໂຕ້ຖຽງກັບຄືນດ້ວຍ "ret ຕົວເລກ ຄໍາແນະນໍາ, ເຊິ່ງ pops ການໂຕ້ຖຽງຂອງເຂົາເຈົ້າ
ໃນຂະນະທີ່ກັບຄືນ. ນີ້ຊ່ວຍປະຢັດຄໍາແນະນໍາຫນຶ່ງໃນຜູ້ໂທນັບຕັ້ງແຕ່ບໍ່ຈໍາເປັນຕ້ອງ
ປະກົດການໂຕ້ຖຽງຢູ່ທີ່ນັ້ນ.

ທ່ານ​ສາ​ມາດ​ລະ​ບຸ​ວ່າ​ການ​ທໍາ​ງານ​ຂອງ​ບຸກ​ຄົນ​ແມ່ນ​ເອີ້ນ​ວ່າ​ມີ​ລໍາ​ດັບ​ການ​ເອີ້ນ​ນີ້​ກັບ​
ຄຸນສົມບັດຂອງຟັງຊັນ "stdcall". ນອກນັ້ນທ່ານຍັງສາມາດ override ໄດ້ -mrtd ທາງ​ເລືອກ​ໂດຍ​ການ​ນໍາ​ໃຊ້​
function attribute "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 ຢູ່ທາງເຂົ້າຄືນໃໝ່. ໃນ x86, ໄດ້ -mstackrealign ທາງເລືອກສ້າງ
prologue ແລະ epilogue ສະລັບກັນທີ່ realigns stack-time run ຖ້າຈໍາເປັນ. ນີ້
ສະຫນັບສະຫນູນການປະສົມລະຫັດມໍລະດົກທີ່ຮັກສາການຈັດລໍາດັບ 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 ຂອບເຂດ. ເນື່ອງຈາກ x86-64 ABI ຕ້ອງການການຈັດຮຽງ stack 16 byte, ນີ້ແມ່ນ ABI
ບໍ່ເຂົ້າກັນໄດ້ ແລະມີຈຸດປະສົງເພື່ອໃຊ້ໃນສະພາບແວດລ້ອມທີ່ມີການຄວບຄຸມທີ່ພື້ນທີ່ stack
ຂໍ້​ຈໍາ​ກັດ​ທີ່​ສໍາ​ຄັນ​. ຕົວເລືອກນີ້ນໍາໄປສູ່ລະຫັດຜິດເມື່ອຟັງຊັນທີ່ລວບລວມດ້ວຍ 16
byte stack alignment (ເຊັ່ນ: ຫນ້າທີ່ຈາກຫ້ອງສະຫມຸດມາດຕະຖານ) ຖືກເອີ້ນດ້ວຍ
stack ຜິດ. ໃນກໍລະນີນີ້, ຄໍາແນະນໍາ SSE ອາດຈະນໍາໄປສູ່ການເຂົ້າເຖິງຫນ່ວຍຄວາມຈໍາທີ່ບໍ່ຖືກຕ້ອງ
ກັບດັກ. ນອກຈາກນັ້ນ, ການໂຕ້ຖຽງຕົວແປຖືກຈັດການບໍ່ຖືກຕ້ອງສໍາລັບ 16 byte aligned
ວັດຖຸ (ລວມທັງ x87 long double ແລະ __int128), ນໍາໄປສູ່ຜົນໄດ້ຮັບທີ່ບໍ່ຖືກຕ້ອງ. ເຈົ້າ​ຕ້ອງ
ສ້າງໂມດູນທັງຫມົດດ້ວຍ -mpreferred-stack-boundary=3, ລວມທັງຫ້ອງສະຫມຸດໃດໆ. ນີ້
ປະກອບມີຫ້ອງສະຫມຸດລະບົບແລະໂມດູນການເລີ່ມຕົ້ນ.

-mincoming-stack-boundary=num
ສົມມຸດວ່າ stack ທີ່ເຂົ້າມາແມ່ນສອດຄ່ອງກັນກັບ 2 ຍົກຂຶ້ນມາ num ຂອບເຂດ byte. ຖ້າ
-mincoming-stack-ເຂດແດນ ບໍ່​ໄດ້​ລະ​ບຸ​ໄວ້​, ຫນຶ່ງ​ທີ່​ລະ​ບຸ​ໄວ້​ໂດຍ​
-mpreferred-stack-ເຂດແດນ ຖືກນໍາໃຊ້.

ໃນ Pentium ແລະ Pentium Pro, ຄ່າ "double" ແລະ "double long" ຄວນຖືກຈັດໃສ່ກັບຄ່າ.
ຂອບເຂດ 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
-msse
-msse2
-msse3
-mssse3
-msse4
-msse4a
-msse4.1
-msse4.2
-mavx
-mavx2
-mavx512f
-mavx512pf
-mavx512er
-mavx512cd
-msha
- ແມ່
-mpclmul
-mclfushopt
-mfsgsbase
-mrdrnd
-mf16c
-mfma
-mfma4
-mno-fma4
-mprefetchwt1
-mxop
-mlwp
-m3dnow
-mpopcnt
- mabm
-mbmi
-mbmi2
-mlzcnt
-mfxsr
-mxsave
-mxsaveopt
-mxsavec
-mxsaves
-mrtm
-mtbm
-mmpx
-mmwaitx
ສະວິດເຫຼົ່ານີ້ເຮັດໃຫ້ການນໍາໃຊ້ຄໍາແນະນໍາໃນ MMX, SSE, SSE2, SSE3, SSSE3,
SSE4.1, AVX, AVX2, AVX512F, AVX512PF, AVX512ER, AVX512CD, SHA, AES, PCLMUL, FSGSBASE,
RDRND, F16C, FMA, SSE4A, FMA4, XOP, LWP, ABM, BMI, BMI2, FXSR, XSAVE, XSaveOPT, LZCNT,
RTM, MPX, MWAITX ຫຼື 3DNow! ຊຸດຄໍາແນະນໍາທີ່ຂະຫຍາຍ. ແຕ່ລະຄົນມີທີ່ສອດຄ້ອງກັນ -mno-
ທາງເລືອກທີ່ຈະປິດການໃຊ້ຄໍາແນະນໍາເຫຼົ່ານີ້.

ສ່ວນຂະຫຍາຍເຫຼົ່ານີ້ຍັງມີຢູ່ໃນຫນ້າທີ່ສ້າງໃນ: ເບິ່ງ x86 Built-in ຫນ້າທີ່,
ສໍາ​ລັບ​ລາຍ​ລະ​ອຽດ​ຂອງ​ຫນ້າ​ທີ່​ເປີດ​ໃຊ້​ງານ​ແລະ​ປິດ​ການ​ໃຊ້​ງານ​ໂດຍ​ການ​ສະ​ຫຼັບ​ເຫຼົ່າ​ນີ້​.

ເພື່ອສ້າງຄໍາແນະນໍາ SSE/SSE2 ອັດຕະໂນມັດຈາກລະຫັດຈຸດລອຍ (ກົງກັນຂ້າມ
ເຖິງ 387 ຄໍາແນະນໍາ), ເບິ່ງ -mfpmath=sse.

GCC depresses SSEx ຄໍາແນະນໍາໃນເວລາທີ່ -mavx ຖືກນໍາໃຊ້. ແທນທີ່ຈະ, ມັນສ້າງ AVX ໃໝ່
ຄໍາແນະນໍາຫຼືການທຽບເທົ່າ AVX ສໍາລັບຄໍາແນະນໍາ SSEx ທັງຫມົດໃນເວລາທີ່ຈໍາເປັນ.

ຕົວເລືອກເຫຼົ່ານີ້ເຮັດໃຫ້ GCC ໃຊ້ຄໍາແນະນໍາເພີ່ມເຕີມເຫຼົ່ານີ້ຢູ່ໃນລະຫັດທີ່ສ້າງຂຶ້ນ, ເຖິງແມ່ນວ່າ
ໂດຍບໍ່ມີການ -mfpmath=sse. ແອັບພລິເຄຊັ່ນທີ່ເຮັດການກວດຫາ CPU ທີ່ເຮັດວຽກຕ້ອງລວບລວມ
ໄຟລ໌ແຍກຕ່າງຫາກສໍາລັບແຕ່ລະສະຖາປັດຕະຍະກໍາທີ່ສະຫນັບສະຫນູນ, ການນໍາໃຊ້ທຸງທີ່ເຫມາະສົມ. ໃນ
ໂດຍສະເພາະ, ໄຟລ໌ທີ່ມີລະຫັດກວດຫາ CPU ຄວນຖືກລວບລວມໂດຍບໍ່ມີການ
ທາງເລືອກເຫຼົ່ານີ້.

-mdump-tune-ຄຸນນະສົມບັດ
ຕົວເລືອກນີ້ສັ່ງໃຫ້ GCC ຖິ້ມຊື່ຂອງຄຸນສົມບັດການປັບແຕ່ງການປະຕິບັດ x86 ແລະ
ການຕັ້ງຄ່າເລີ່ມຕົ້ນ. ຊື່ສາມາດຖືກນໍາໃຊ້ໃນ -mtune-ctrl=ບັນຊີລາຍຊື່ຄຸນນະສົມບັດ.

-mtune-ctrl=ບັນຊີລາຍຊື່ຄຸນນະສົມບັດ
ຕົວເລືອກນີ້ຖືກນໍາໃຊ້ເພື່ອເຮັດການຄວບຄຸມເມັດພືດທີ່ດີຂອງລັກສະນະການສ້າງລະຫັດ x86.
ບັນຊີລາຍຊື່ຄຸນນະສົມບັດ ແມ່ນບັນຊີລາຍຊື່ທີ່ແຍກດ້ວຍເຄື່ອງໝາຍຈຸດ ຄຸນນະສົມບັດ ຊື່. ເບິ່ງນຳ
-mdump-tune-ຄຸນນະສົມບັດ. ໃນເວລາທີ່ກໍານົດ, ໄດ້ ຄຸນນະສົມບັດ ເປີດຖ້າມັນບໍ່ຖືກນຳໜ້າ
ກັບ ^, ຖ້າບໍ່ດັ່ງນັ້ນ, ມັນຖືກປິດ. -mtune-ctrl=ບັນຊີລາຍຊື່ຄຸນນະສົມບັດ ມີຈຸດປະສົງເພື່ອນໍາໃຊ້
ໂດຍນັກພັດທະນາ GCC. ການນໍາໃຊ້ມັນອາດຈະນໍາໄປສູ່ເສັ້ນທາງລະຫັດທີ່ບໍ່ໄດ້ກວມເອົາໂດຍການທົດສອບແລະສາມາດເຮັດໄດ້
ອາດຈະສົ່ງຜົນໃຫ້ compiler ICEs ຫຼື runtime ຜິດພາດ.

-mno-default
ຕົວເລືອກນີ້ສັ່ງໃຫ້ GCC ປິດຄຸນສົມບັດທີ່ສາມາດປັບໄດ້ທັງໝົດ. ເບິ່ງນຳ
-mtune-ctrl=ບັນຊີລາຍຊື່ຄຸນນະສົມບັດ ແລະ -mdump-tune-ຄຸນນະສົມບັດ.

-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 ໜ້ອຍທີ່ສຸດເຊັ່ນກັນ
ຍ້ອນວ່າການກໍາຈັດ "zeroupper" ທີ່ບໍ່ຈໍາເປັນພາຍໃນ.

-mprefer-avx128
ຕົວເລືອກນີ້ສັ່ງໃຫ້ GCC ໃຊ້ຄໍາແນະນໍາ 128-bit AVX ແທນ AVX 256-bit
ຄໍາແນະນໍາໃນ auto-vectorizer.

-mcx16
ຕົວເລືອກນີ້ເຮັດໃຫ້ GCC ສ້າງຄໍາແນະນໍາ "CMPXCHG16B". "CMPXCHG16B" ອະນຸຍາດໃຫ້
ສໍາລັບການປະຕິບັດງານຂອງປະລໍາມະນູກ່ຽວກັບ 128-bit double quadword (ຫຼື oword) ປະເພດຂໍ້ມູນ. ນີ້​ແມ່ນ
ທີ່ເປັນປະໂຫຍດສໍາລັບເຄື່ອງນັບຄວາມລະອຽດສູງທີ່ສາມາດປັບປຸງໂດຍໂປເຊດເຊີຫຼາຍ (ຫຼື
ຫຼັກ). ຄໍາແນະນໍານີ້ຖືກສ້າງຂື້ນເປັນສ່ວນຫນຶ່ງຂອງຫນ້າທີ່ສ້າງໃນປະລໍາມະນູ: ເບິ່ງ
__ຊິ້ງ ເກີດຂຶ້ນ or __ປະລໍາມະນູ ເກີດຂຶ້ນ ສໍາລັບລາຍລະອຽດ.

-msahf
ທາງເລືອກນີ້ເຮັດໃຫ້ການສ້າງຄໍາແນະນໍາ "SAHF" ໃນລະຫັດ 64-bit. Intel ຕົ້ນ
Pentium 4 CPUs ທີ່ມີການສະຫນັບສະຫນູນ Intel 64, ກ່ອນທີ່ຈະແນະນໍາຂັ້ນຕອນ Pentium 4 G1.
ໃນເດືອນທັນວາ 2005, ຂາດຄໍາແນະນໍາ "LAHF" ແລະ "SAHF" ເຊິ່ງໄດ້ຮັບການສະຫນັບສະຫນູນຈາກ.
AMD64. ເຫຼົ່ານີ້ແມ່ນຄໍາແນະນໍາການໂຫຼດແລະເກັບຮັກສາ, ຕາມລໍາດັບ, ສໍາລັບທຸງສະຖານະທີ່ແນ່ນອນ.
ໃນໂຫມດ 64-bit, ຄໍາແນະນໍາ "SAHF" ຖືກນໍາໃຊ້ເພື່ອເພີ່ມປະສິດທິພາບ "fmod", "drem", ແລະ.
"ສ່ວນທີ່ເຫຼືອ" ຫນ້າທີ່ສ້າງໃນ; ເບິ່ງ ອື່ນ ໆ ເກີດຂຶ້ນ ສໍາລັບລາຍລະອຽດ.

- mmovbe
ຕົວເລືອກນີ້ອະນຸຍາດໃຫ້ໃຊ້ຄໍາແນະນໍາ "movbe" ເພື່ອປະຕິບັດ "__builtin_bswap32"
ແລະ "__builtin_bswap64".

-mcrc32
ຕົວເລືອກນີ້ເປີດໃຊ້ງານໃນຕົວ "__builtin_ia32_crc32qi",
"__builtin_ia32_crc32hi", "__builtin_ia32_crc32si" ແລະ "__builtin_ia32_crc32di" ເພື່ອ
ສ້າງຄໍາແນະນໍາເຄື່ອງຈັກ "crc32".

-mrecip
ທາງເລືອກນີ້ເຮັດໃຫ້ການນໍາໃຊ້ "RCPSS" ແລະ "RSQRTSS" ຄໍາແນະນໍາ (ແລະ vectorized ຂອງເຂົາເຈົ້າ
variants "RCPPS" ແລະ "RSQRTPS") ດ້ວຍຂັ້ນຕອນ Newton-Raphson ເພີ່ມເຕີມເພື່ອເພີ່ມ
ຄວາມແມ່ນຍໍາແທນ "DIVSS" ແລະ "SQRTSS" (ແລະຕົວແປ vectorized ຂອງເຂົາເຈົ້າ) ສໍາລັບ single-
ຄວາມແມ່ນຍໍາຂອງການໂຕ້ຖຽງຈຸດລອຍ. ຄໍາແນະນໍາເຫຼົ່ານີ້ຖືກສ້າງຂື້ນພຽງແຕ່ເມື່ອ
-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=ເລືອກ
ຕົວເລືອກນີ້ຄວບຄຸມວ່າຄໍາແນະນໍາການປະເມີນເຊິ່ງກັນແລະກັນອາດຈະຖືກນໍາໃຊ້. ເລືອກ ເປັນ
ລາຍຊື່ຕົວເລືອກທີ່ຂັ້ນດ້ວຍເຄື່ອງໝາຍຈຸດ, ເຊິ່ງອາດຈະນຳໜ້າດ້ວຍ a ! ການ​ປ່ຽນ​ທາງ​ເລືອກ​:

ທັງຫມົດ ເປີດໃຊ້ຄຳແນະນຳການປະເມີນທັງໝົດ.

Default
ເປີດໃຊ້ຄໍາແນະນໍາໃນຕອນຕົ້ນ, ເທົ່າກັບ -mrecip.

none
ປິດການທໍາງານຄໍາແນະນໍາການຄາດຄະເນທັງຫມົດ, ທຽບເທົ່າກັບ -mno-recip.

div ເປີດໃຊ້ການປະມານສໍາລັບການແບ່ງສະເກັດເງິນ.

vec-div
ເປີດໃຊ້ການປະມານສໍາລັບການແບ່ງ vectorized.

sqrt
ເປີດໃຊ້ການປະມານສໍາລັບ scalar ຮາກສີ່ຫລ່ຽມ.

vec-sqrt
ເປີດໃຊ້ການປະມານສໍາລັບຮາກສີ່ຫລ່ຽມ vectorized.

ສະນັ້ນ, ຕົວຢ່າງ, -mrecip=ທັງໝົດ,!sqrt ເຮັດ​ໃຫ້​ທັງ​ຫມົດ​ຂອງ​ການ​ປະ​ມານ​ທີ່​ຕ່າງ​ກັນ​,
ຍົກເວັ້ນສໍາລັບຮາກສີ່ຫລ່ຽມ.

-mveclibabi=ປະເພດ
ລະບຸປະເພດ ABI ເພື່ອໃຊ້ສຳລັບ vectorizing intrinsics ໂດຍໃຊ້ຫ້ອງສະໝຸດພາຍນອກ.
ຄຸນ​ຄ່າ​ສະ​ຫນັບ​ສະ​ຫນູນ​ສໍາ​ລັບ​ການ​ ປະເພດ ມີ svml ສໍາລັບຫ້ອງສະຫມຸດຄະນິດສາດສັ້ນ vector ຂອງ Intel ແລະ acml
ສໍາລັບຫ້ອງສະຫມຸດຫຼັກຄະນິດສາດ AMD. ເພື່ອໃຊ້ທາງເລືອກນີ້, ທັງສອງ -ftree-vectorize ແລະ
-funsafe-math-optimizations ຕ້ອງໄດ້ຮັບການເປີດໃຊ້ງານ, ແລະ SVML ຫຼື ACML ABI-ເຂົ້າກັນໄດ້
ຫ້ອງສະຫມຸດຕ້ອງຖືກລະບຸໃນເວລາເຊື່ອມຕໍ່.

ໃນປັດຈຸບັນ 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 is
ໃຊ້, ແລະ "__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 ຖືກນໍາໃຊ້.

-mabi=ຊື່
ສ້າງລະຫັດສໍາລັບສົນທິສັນຍາການໂທທີ່ລະບຸໄວ້. ຄ່າທີ່ອະນຸຍາດແມ່ນ sysv ສໍາລັບການ
ABI ທີ່ໃຊ້ໃນ GNU/Linux ແລະລະບົບອື່ນໆ, ແລະ ms ສໍາລັບ Microsoft ABI. ໄດ້
ຄ່າເລີ່ມຕົ້ນແມ່ນການໃຊ້ Microsoft ABI ເມື່ອຕັ້ງເປົ້າໝາຍໃສ່ Microsoft 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 ຫນ້າທີ່. ນີ້ແມ່ນໄວຂຶ້ນຢູ່ໃນ CPU ທີ່ທັນສະໄຫມສ່ວນໃຫຍ່ເນື່ອງຈາກການຫຼຸດລົງ
ການເພິ່ງພາອາໄສ, ການປັບປຸງການກໍານົດເວລາແລະການຫຼຸດຜ່ອນການໃຊ້ stack ເມື່ອ stack ທີ່ຕ້ອງການ
ຂອບເຂດບໍ່ເທົ່າກັບ 2. ຂໍ້ບົກຜ່ອງແມ່ນການເພີ່ມຂຶ້ນທີ່ຫນ້າສັງເກດໃນຂະຫນາດລະຫັດ. ນີ້
ສະຫຼັບໝາຍເຖິງ -mno-push-args.

-mthreads
ຮອງຮັບການຈັດການຂໍ້ຍົກເວັ້ນທີ່ປອດໄພໃນຫົວຂໍ້ MinGW. ໂປຣແກຣມທີ່ອີງໃສ່ 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=ພຶຊະຄະນິດ
override heuristic ການຕັດສິນໃຈພາຍໃນສໍາລັບ algorithm ໂດຍສະເພາະທີ່ຈະໃຊ້ສໍາລັບ
inlining ການ​ດໍາ​ເນີນ​ງານ string​. ຄ່າທີ່ອະນຸຍາດໃຫ້ສໍາລັບ ພຶຊະຄະນິດ ແມ່ນ:

rep_byte
rep_4byte
rep_8byte
ຂະຫຍາຍໂດຍໃຊ້ i386 "rep" ຄໍານໍາຫນ້າຂອງຂະຫນາດທີ່ກໍານົດໄວ້.

byte_loop
loop
unrolled_loop
ຂະຫຍາຍເປັນວົງໃນແຖວ.

libcall
ໃຊ້ໂທຫ້ອງສະໝຸດສະເໝີ.

-mmemcpy-strategy=ແຜນຍຸດທະສາດ
override heuristic ການຕັດສິນໃຈພາຍໃນເພື່ອຕັດສິນໃຈວ່າ "__builtin_memcpy" ຄວນຈະເປັນ
inlined ແລະສິ່ງທີ່ inline algorithm ທີ່ຈະໃຊ້ໃນເວລາທີ່ຂະຫນາດທີ່ຄາດໄວ້ຂອງການດໍາເນີນງານສໍາເນົາ
ເປັນທີ່ຮູ້ຈັກ. ແຜນຍຸດທະສາດ ແມ່ນບັນຊີລາຍຊື່ທີ່ຂັ້ນດ້ວຍເຄື່ອງໝາຍຈຸດ ພຶຊະຄະນິດ:ຂະໜາດສູງສຸດ:dest_align triplets. ພຶຊະຄະນິດ
ແມ່ນ​ລະ​ບຸ​ໄວ້​ໃນ -mstringop-ຍຸດ​ທະ​ສາດ​, ຂະໜາດສູງສຸດ ລະບຸຂະໜາດ max byte ທີ່
ສູດການຄິດໄລ່ໃນແຖວ ພຶຊະຄະນິດ ແມ່ນອະນຸຍາດ. ສໍາລັບ triplet ສຸດທ້າຍ, ໄດ້ ຂະໜາດສູງສຸດ ຕ້ອງເປັນ "-1". ໄດ້
ຂະໜາດສູງສຸດ ຂອງ triplets ໃນບັນຊີລາຍຊື່ຕ້ອງໄດ້ຮັບການລະບຸໃນລໍາດັບເພີ່ມຂຶ້ນ. ໄດ້
ຂະຫນາດ byte ຫນ້ອຍທີ່ສຸດສໍາລັບ ພຶຊະຄະນິດ ແມ່ນ 0 ສໍາລັບ triplet ທໍາອິດແລະ "ຂະໜາດສູງສຸດ + 1" ຂອງ
ຊ່ວງກ່ອນໜ້າ.

-mmemset-strategy=ແຜນຍຸດທະສາດ
ທາງເລືອກແມ່ນຄ້າຍຄືກັນກັບ -mmemcpy-strategy= ຍົກເວັ້ນວ່າມັນເປັນການຄວບຄຸມ
ການຂະຫຍາຍຕົວ "__builtin_memset".

-momit-leaf-frame-pointer
ຢ່າເກັບຮັກສາຕົວຊີ້ກອບຢູ່ໃນທະບຽນສໍາລັບຫນ້າທີ່ຂອງໃບ. ນີ້ຫຼີກລ້ຽງການ
ຄໍາ​ແນະ​ນໍາ​ເພື່ອ​ຊ່ວຍ​ປະ​ຢັດ​, ການ​ຕັ້ງ​ຄ່າ​, ແລະ​ຟື້ນ​ຟູ​ຕົວ​ຊີ້​ກອບ​ແລະ​ເຮັດ​ໃຫ້​ການ​ລົງ​ທະ​ບຽນ​ເພີ່ມ​ເຕີມ​
ມີຢູ່ໃນຫນ້າທີ່ຂອງໃບ. ທາງເລືອກ -fomit-leaf-frame-pointer ເອົາກອບ
ຕົວຊີ້ສໍາລັບຫນ້າທີ່ຂອງໃບ, ເຊິ່ງອາດຈະເຮັດໃຫ້ການດີບັກຍາກຂຶ້ນ.

-mtls-direct-seg-refs
-mno-tls-direct-seg-refs
ຄວບຄຸມວ່າຕົວແປ TLS ອາດຈະຖືກເຂົ້າເຖິງດ້ວຍການຊົດເຊີຍຈາກພາກສ່ວນ TLS
ລົງທະບຽນ (%gs ສໍາລັບ 32-bit, %fs ສໍາລັບ 64-bit), ຫຼືວ່າຕົວຊີ້ຖານ thread ຈະຕ້ອງເປັນ.
ເພີ່ມ. ນີ້ຈະຖືກຕ້ອງຫຼືບໍ່ແມ່ນຂຶ້ນກັບລະບົບປະຕິບັດການ, ແລະບໍ່ວ່າຈະເປັນ
ແຜນທີ່ພາກສ່ວນເພື່ອໃຫ້ກວມເອົາພື້ນທີ່ TLS ທັງຫມົດ.

ສໍາລັບລະບົບທີ່ໃຊ້ GNU C Library, ຄ່າເລີ່ມຕົ້ນແມ່ນເປີດຢູ່.

-msse2avx
-mno-sse2avx
ລະບຸວ່າຕົວປະກອບຄວນເຂົ້າລະຫັດຄໍາແນະນໍາ SSE ດ້ວຍຄໍານໍາຫນ້າ VEX. ທາງເລືອກ
-mavx ເປີດອັນນີ້ຕາມຄ່າເລີ່ມຕົ້ນ.

-mfentry
-mno-fentry
ຖ້າໂປຣໄຟລ໌ຖືກເປີດໃຊ້ (- ໜ້າ), ເອົາການໂທຫາ counter profile ກ່ອນ prologue ໄດ້.
ໝາຍເຫດ: ໃນສະຖາປັດຕະຍະກຳ x86 ຄຸນສົມບັດ "ms_hook_prologue" ເປັນໄປບໍ່ໄດ້ຢູ່ທີ່
ປັດ​ຈຸ​ບັນ​ສໍາ​ລັບ​ການ​ -mfentry ແລະ - ໜ້າ.

-mrecord-mcount
-mno-record-mcount
ຖ້າໂປຣໄຟລ໌ຖືກເປີດໃຊ້ (- ໜ້າ), ສ້າງພາກສ່ວນ __mcount_loc ທີ່ມີຕົວຊີ້
ແຕ່ລະການໂທ profileing. ນີ້ແມ່ນເປັນປະໂຫຍດສໍາລັບການ patching ແລະອອກການໂທອັດຕະໂນມັດ.

-mnop-mcount
-mno-nop-mcount
ຖ້າໂປຣໄຟລ໌ຖືກເປີດໃຊ້ (- ໜ້າ), ສ້າງການໂທໄປຫາຫນ້າທີ່ profileing ເປັນ nops.
ນີ້ແມ່ນເປັນປະໂຫຍດໃນເວລາທີ່ພວກເຂົາຄວນຈະຖືກ patched ໃນແບບເຄື່ອນໄຫວຕໍ່ມາ. ນີ້ອາດຈະເປັນພຽງແຕ່
ທີ່​ເປັນ​ປະ​ໂຫຍດ​ຮ່ວມ​ກັບ​ -mrecord-mcount.

-mskip-rax-setup
-mno-skip-rax-setup
ເມື່ອສ້າງລະຫັດສໍາລັບສະຖາປັດຕະ x86-64 ທີ່ມີການຂະຫຍາຍ SSE ປິດການໃຊ້ງານ,
-skip-rax-setup ສາມາດໃຊ້ເພື່ອຂ້າມການຕັ້ງຄ່າ RAX ລົງທະບຽນເມື່ອບໍ່ມີຕົວແປ
arguments ຜ່ານໃນ vector registers.

ຄໍາເຕືອນ: ນັບຕັ້ງແຕ່ການລົງທະບຽນ RAX ຖືກນໍາໃຊ້ເພື່ອຫຼີກເວັ້ນການປະຫຍັດ vector registers ທີ່ບໍ່ຈໍາເປັນ
stack ເມື່ອຜ່ານການໂຕ້ຖຽງຕົວແປ, ຜົນກະທົບຂອງທາງເລືອກນີ້ແມ່ນ callees ອາດຈະ
ເສຍພື້ນທີ່ stack ບາງອັນ, ປະພຶດຜິດ ຫຼືໂດດໄປຫາສະຖານທີ່ແບບສຸ່ມ. GCC 4.4 ຫຼືໃໝ່ກວ່າ
ບໍ່ມີບັນຫາເຫຼົ່ານັ້ນ, ບໍ່ວ່າຈະເປັນຄ່າລົງທະບຽນ RAX.

-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 ແລະເກັບຮັກສາ.

-mstack-protector-guard=ກອງ
ສ້າງລະຫັດປ້ອງກັນ stack ໂດຍໃຊ້ canary at ກອງ. ສະ​ຖານ​ທີ່​ສະ​ຫນັບ​ສະ​ຫນູນ​ແມ່ນ​ ທົ່ວໂລກ
ສໍາລັບ canary ທົ່ວໂລກຫຼື tls ສໍາລັບຕໍ່ກະທູ້ canary ໃນຕັນ TLS (ຄ່າເລີ່ມຕົ້ນ). ນີ້
ທາງເລືອກທີ່ມີຜົນກະທົບພຽງແຕ່ໃນເວລາທີ່ -stack-protector or -fstack-protector-ທັງໝົດ ຖືກກໍານົດ.

ເຫຼົ່ານີ້ -m ສະວິດໄດ້ຮັບການສະຫນັບສະຫນູນນອກເຫນືອໄປຈາກຂ້າງເທິງກ່ຽວກັບໂປເຊດເຊີ x86-64 ໃນ 64-bit
ສະພາບແວດລ້ອມ.

-m32
-m64
-mx32
-m16
ສ້າງລະຫັດສໍາລັບສະພາບແວດລ້ອມ 16-bit, 32-bit ຫຼື 64-bit. ໄດ້ -m32 ຕົວເລືອກກໍານົດ "int",
"ຍາວ", ແລະປະເພດຕົວຊີ້ໄປຫາ 32 ບິດ, ແລະສ້າງລະຫັດທີ່ເຮັດວຽກຢູ່ໃນລະບົບ i386 ໃດ.

ໄດ້ -m64 ທາງເລືອກກໍານົດ "int" ເປັນ 32 bits ແລະ "ຍາວ" ແລະປະເພດ pointer ເປັນ 64 bits, ແລະ.
ສ້າງລະຫັດສໍາລັບສະຖາປັດຕະຍະ x86-64. ສໍາລັບ Darwin ພຽງແຕ່ -m64 ທາງ​ເລືອກ​ຍັງ​
ປິດ -fno-pic ແລະ -mdynamic-no-pic ຕົວເລືອກ

ໄດ້ -mx32 ທາງເລືອກກໍານົດ "int", "ຍາວ", ແລະປະເພດ pointer ເປັນ 32 bits, ແລະສ້າງລະຫັດ
ສໍາລັບສະຖາປັດຕະຍະ x86-64.

ໄດ້ -m16 ທາງເລືອກແມ່ນຄືກັນກັບ -m32, ຍົກ​ເວັ້ນ​ສໍາ​ລັບ​ການ​ທີ່​ມັນ​ອອກ ".code16gcc​"
assembly directive ໃນຕອນຕົ້ນຂອງຜົນໄດ້ຮັບການປະກອບເພື່ອໃຫ້ binary ສາມາດດໍາເນີນການ
ໃນໂຫມດ 16-bit.

-mno-red-zone
ຢ່າໃຊ້ອັນທີ່ເອີ້ນວ່າ "ເຂດສີແດງ" ສໍາລັບລະຫັດ x86-64. ເຂດ​ສີ​ແດງ​ແມ່ນ​ກໍາ​ນົດ​ໂດຍ​
x86-64 ABI; ມັນເປັນພື້ນທີ່ 128-byte ນອກເຫນືອຈາກສະຖານທີ່ຂອງຕົວຊີ້ stack ທີ່ບໍ່ແມ່ນ
ຖືກແກ້ໄຂໂດຍຕົວຈັດການສັນຍານຫຼືຂັດຂວາງແລະດັ່ງນັ້ນຈຶ່ງສາມາດຖືກນໍາໃຊ້ສໍາລັບຂໍ້ມູນຊົ່ວຄາວ
ໂດຍບໍ່ມີການປັບຕົວຊີ້ 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.

x86 Windows ທາງເລືອກໃນການ

ທາງເລືອກເພີ່ມເຕີມເຫຼົ່ານີ້ແມ່ນມີໃຫ້ສໍາລັບເປົ້າຫມາຍຂອງ Microsoft Windows:

-mconsole
ທາງ​ເລືອກ​ນີ້​ລະ​ບຸ​ວ່າ​ຄໍາ​ຮ້ອງ​ສະ​ຫມັກ console ແມ່ນ​ຈະ​ໄດ້​ຮັບ​ການ​ຜະ​ລິດ​, ໂດຍ​ການ​ແນະ​ນໍາ​
ຕົວເຊື່ອມຕໍ່ເພື່ອກໍານົດປະເພດລະບົບຍ່ອຍຂອງ PE header ທີ່ຕ້ອງການສໍາລັບຄໍາຮ້ອງສະຫມັກ console.
ຕົວເລືອກນີ້ມີໃຫ້ສຳລັບເປົ້າໝາຍ Cygwin ແລະ MinGW ແລະຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ
ເປົ້າໝາຍເຫຼົ່ານັ້ນ.

-mdll
ຕົວເລືອກນີ້ມີໃຫ້ສຳລັບເປົ້າໝາຍ Cygwin ແລະ MinGW. ມັນກໍານົດວ່າ DLL---a
ຫໍສະຫມຸດເຊື່ອມຕໍ່ແບບໄດນາມິກ --- ຈະຖືກສ້າງຂື້ນ, ເຮັດໃຫ້ການເລືອກທີ່ຕ້ອງການ
runtime startup object ແລະຈຸດເຂົ້າ.

-mnop-fun-dllimport
ຕົວເລືອກນີ້ມີໃຫ້ສຳລັບເປົ້າໝາຍ Cygwin ແລະ MinGW. ມັນ​ລະ​ບຸ​ວ່າ​
ຄຸນສົມບັດ "dllimport" ຄວນຖືກລະເລີຍ.

-mthread
ທາງເລືອກນີ້ສາມາດໃຊ້ໄດ້ສໍາລັບເປົ້າຫມາຍ MinGW. ມັນລະບຸວ່າກະທູ້ສະເພາະ MinGW
ສະຫນັບສະຫນູນແມ່ນຈະຖືກນໍາໃຊ້.

-municode
ຕົວເລືອກນີ້ມີໃຫ້ສຳລັບເປົ້າໝາຍ MinGW-w64. ມັນເຮັດໃຫ້ເກີດ "UNICODE" preprocessor
ມະຫາພາກທີ່ຈະຖືກກໍານົດໄວ້ລ່ວງໜ້າ, ແລະເລືອກລະຫັດເລີ່ມຕົ້ນເວລາແລ່ນທີ່ມີຄວາມສາມາດ Unicode.

-mwin32
ຕົວເລືອກນີ້ມີໃຫ້ສຳລັບເປົ້າໝາຍ Cygwin ແລະ MinGW. ມັນກໍານົດວ່າປົກກະຕິ
ເມໂຄ Microsoft Windows ທີ່ກຳນົດໄວ້ລ່ວງໜ້າແມ່ນຈະຕ້ອງຖືກຕັ້ງຢູ່ໃນຕົວປະມວນຜົນກ່ອນ, ແຕ່ບໍ່ແມ່ນ
ມີອິດທິພົນຕໍ່ການເລືອກຫ້ອງສະຫມຸດ runtime / ລະຫັດເລີ່ມຕົ້ນ.

- ປ່ອງຢ້ຽມ
ຕົວເລືອກນີ້ມີໃຫ້ສຳລັບເປົ້າໝາຍ Cygwin ແລະ MinGW. ມັນກໍານົດວ່າ GUI
ຄໍາຮ້ອງສະຫມັກແມ່ນຈະຖືກສ້າງຂື້ນໂດຍການແນະນໍາຕົວເຊື່ອມຕໍ່ເພື່ອກໍານົດຫົວຂໍ້ PE
ປະເພດລະບົບຍ່ອຍຢ່າງເໝາະສົມ.

-fno-set-stack-executable
ທາງເລືອກນີ້ສາມາດໃຊ້ໄດ້ສໍາລັບເປົ້າຫມາຍ MinGW. ມັນກໍານົດວ່າທຸງປະຕິບັດສໍາລັບ
ບໍ່ໄດ້ຕັ້ງ stack ທີ່ໃຊ້ໂດຍຟັງຊັນທີ່ຊ້ອນກັນ. ນີ້ແມ່ນມີຄວາມຈໍາເປັນສໍາລັບການແລ່ນ binaries
ໃນຮູບແບບ kernel ຂອງ Microsoft Windows, ຍ້ອນວ່າມີ User32 API, ເຊິ່ງຖືກນໍາໃຊ້ເພື່ອກໍານົດ
ສິດທິພິເສດທີ່ສາມາດປະຕິບັດໄດ້, ບໍ່ມີໃຫ້.

-fwritable-relocated-rdata
ທາງເລືອກນີ້ສາມາດໃຊ້ໄດ້ສໍາລັບເປົ້າຫມາຍ MinGW ແລະ Cygwin. ມັນ​ລະ​ບຸ​ວ່າ​ການ​ຍົກ​ຍ້າຍ -
ຂໍ້​ມູນ​ໃນ​ພາກ​ສ່ວນ​ອ່ານ​ເທົ່າ​ນັ້ນ​ແມ່ນ​ເອົາ​ໃສ່​ໃນ​ພາກ .data​. ນີ້ແມ່ນສິ່ງຈໍາເປັນສໍາລັບຜູ້ສູງອາຍຸ
runtimes ບໍ່ຮອງຮັບການດັດແກ້ຂອງພາກສ່ວນ .rdata ສໍາລັບ pseudo-relocation.

-mpe-aligned-commons
ຕົວເລືອກນີ້ມີໃຫ້ສຳລັບເປົ້າໝາຍ Cygwin ແລະ MinGW. ມັນກໍານົດວ່າ GNU
ການຂະຫຍາຍໄປຫາຮູບແບບໄຟລ໌ PE ທີ່ອະນຸຍາດໃຫ້ຈັດຮຽງທີ່ຖືກຕ້ອງຂອງຕົວແປ COMMON
ຄວນຖືກນໍາໃຊ້ໃນເວລາສ້າງລະຫັດ. ມັນຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຖ້າ GCC ກວດພົບວ່າ
ຕົວປະກອບເປົ້າຫມາຍທີ່ພົບເຫັນໃນລະຫວ່າງການກໍາຫນົດຄ່າສະຫນັບສະຫນູນຄຸນນະສົມບັດ.

ເບິ່ງພາຍໃຕ້ x86 ທາງເລືອກໃນການ ສໍາລັບທາງເລືອກມາດຕະຖານ.

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", ເຊິ່ງຕົວປະກອບສະເຫມີສອດຄ່ອງ, ບໍ່ວ່າຈະເປັນການຂະຫຍາຍ
ຄໍາແນະນໍາຄວາມຫນາແຫນ້ນຫຼືໂດຍການໃສ່ຄໍາແນະນໍາ NOP.

-mlongcalls
-mno-longcalls
ເມື່ອຕົວເລືອກນີ້ຖືກເປີດໃຊ້, GCC ຈະສັ່ງໃຫ້ຜູ້ປະກອບການແປການໂທໂດຍກົງຫາ
ການໂທທາງອ້ອມເວັ້ນເສຍແຕ່ວ່າມັນສາມາດກໍານົດວ່າເປົ້າຫມາຍຂອງການໂທໂດຍກົງແມ່ນຢູ່ໃນ
ໄລຍະທີ່ອະນຸຍາດໂດຍຄໍາແນະນໍາການໂທ. ການແປນີ້ມັກຈະເກີດຂຶ້ນສໍາລັບການໂທຫາ
ຟັງຊັນໃນໄຟລ໌ແຫຼ່ງອື່ນໆ. ໂດຍສະເພາະ, ຜູ້ປະກອບການແປພາສາໂດຍກົງ
ຄໍາແນະນໍາ "CALL" ເຂົ້າໄປໃນ "L32R" ປະຕິບັດຕາມຄໍາແນະນໍາ "CALLX". ຄ່າເລີ່ມຕົ້ນແມ່ນ
-mno-longcalls. ທາງເລືອກນີ້ຄວນຈະຖືກນໍາໃຊ້ໃນໂຄງການທີ່ເປົ້າຫມາຍການໂທສາມາດ
ອາດຈະຢູ່ນອກຂອບເຂດ. ທາງເລືອກນີ້ແມ່ນປະຕິບັດຢູ່ໃນຕົວປະກອບ, ບໍ່ແມ່ນ
compiler, ດັ່ງນັ້ນລະຫັດການປະກອບທີ່ສ້າງຂຶ້ນໂດຍ GCC ຍັງສະແດງໃຫ້ເຫັນການໂທໂດຍກົງ
ຄໍາ​ແນະ​ນໍາ --- ເບິ່ງ​ທີ່​ລະ​ຫັດ​ວັດ​ຖຸ disassembled ເພື່ອ​ເບິ່ງ​ຄໍາ​ແນະ​ນໍາ​ຕົວ​ຈິງ​.
ໃຫ້ສັງເກດວ່າຜູ້ປະກອບໃຊ້ການໂທທາງອ້ອມສໍາລັບທຸກໆການໂທຂ້າມໄຟລ໌, ບໍ່ພຽງແຕ່
ເຫຼົ່ານັ້ນກໍ່ຢູ່ນອກຂອບເຂດ.

zSeries ທາງເລືອກໃນການ

ເຫຼົ່ານີ້ແມ່ນໄດ້ລະບຸໄວ້ພາຍໃຕ້

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

ສ່ວນໃຫຍ່ຂອງພວກເຂົາມີທັງຮູບແບບທາງບວກແລະທາງລົບ; ຮູບ​ແບບ​ທາງ​ລົບ​ຂອງ​ -ffoo is
-fno-foo. ໃນຕາຕະລາງຂ້າງລຸ່ມນີ້, ມີພຽງແຕ່ຫນຶ່ງໃນແບບຟອມທີ່ຖືກລະບຸໄວ້ --- ຮູບແບບທີ່ບໍ່ແມ່ນ
ຄ່າເລີ່ມຕົ້ນ. ທ່ານສາມາດຄິດອອກຮູບແບບອື່ນໂດຍການຖອນອອກ ບໍ່- ຫຼືເພີ່ມມັນ.

-fbounds-ກວດ​ສອບ​
ສໍາລັບດ້ານຫນ້າທີ່ສະຫນັບສະຫນູນມັນ, ສ້າງລະຫັດເພີ່ມເຕີມເພື່ອກວດເບິ່ງຕົວຊີ້ວັດທີ່ເຄີຍໃຊ້
array ການເຂົ້າເຖິງແມ່ນຢູ່ພາຍໃນຂອບເຂດທີ່ປະກາດ. ນີ້​ແມ່ນ​ປະ​ຈຸ​ບັນ​ສະ​ຫນັບ​ສະ​ຫນູນ​ພຽງ​ແຕ່​
Java ແລະ Fortran ດ້ານຫນ້າ, ບ່ອນທີ່ທາງເລືອກນີ້ເລີ່ມຕົ້ນເປັນຄວາມຈິງແລະຜິດ
ຕາມລໍາດັບ.

-fstack-reuse=ລະດັບການນໍາໃຊ້ຄືນ
ທາງ​ເລືອກ​ນີ້​ຄວບ​ຄຸມ​ການ​ນໍາ​ໃຊ້​ພື້ນ​ທີ່ stack ສໍາ​ລັບ​ຜູ້​ໃຊ້​ປະ​ກາດ​ຕົວ​ແປ​ໃນ​ທ້ອງ​ຖິ່ນ / ອັດ​ຕະ​ໂນ​ມັດ​ແລະ​
compiler ສ້າງຊົ່ວຄາວ. reuse_level ສາມາດ ທັງຫມົດ, ຊື່_vars, ຫຼື none. ທັງຫມົດ
ເປີດໃຊ້ stack reuse ສໍາລັບທຸກຕົວແປໃນທ້ອງຖິ່ນແລະຊົ່ວຄາວ, ຊື່_vars ເຮັດໃຫ້ໄດ້
ໃຊ້ຄືນພຽງແຕ່ສໍາລັບຜູ້ໃຊ້ທີ່ກໍານົດຕົວແປທ້ອງຖິ່ນທີ່ມີຊື່, ແລະ none ປິດການນຳໃຊ້ stack ຄືນໃໝ່
ສົມບູນ. ຄ່າເລີ່ມຕົ້ນແມ່ນ ທັງຫມົດ. ທາງເລືອກແມ່ນຈໍາເປັນໃນເວລາທີ່ໂຄງການຂະຫຍາຍ
ຕະຫຼອດຊີວິດຂອງຕົວແປທ້ອງຖິ່ນທີ່ມີຂອບເຂດ ຫຼື compiler ທີ່ສ້າງຂຶ້ນຊົ່ວຄາວນອກເໜືອໄປຈາກ
ຈຸດສິ້ນສຸດທີ່ກໍານົດໂດຍພາສາ. ໃນເວລາທີ່ຊີວິດຂອງຕົວແປສິ້ນສຸດລົງ, ແລະຖ້າຫາກວ່າ
ຊີວິດທີ່ປ່ຽນແປງໄດ້ຢູ່ໃນຄວາມຊົງຈໍາ, ຄອມພີລເດີ optimizing ມີອິດສະລະໃນການໃຊ້ stack ຂອງມັນຄືນ
ຊ່ອງຫວ່າງກັບຕົວແປຊົ່ວຄາວອື່ນໆ ຫຼືຕົວແປທ້ອງຖິ່ນທີ່ມີຂອບເຂດທີ່ໄລຍະສົດບໍ່ມີ
ທັບຊ້ອນກັນກັບມັນ. ລະ​ຫັດ​ມໍ​ລະ​ດົກ​ການ​ຂະ​ຫຍາຍ​ຊີ​ວິດ​ຂອງ​ທ້ອງ​ຖິ່ນ​ມີ​ແນວ​ໂນ້ມ​ທີ່​ຈະ​ທໍາ​ລາຍ​ກັບ​
stack ການເພີ່ມປະສິດທິພາບການນໍາໃຊ້ຄືນໃຫມ່.

ຍົກ​ຕົວ​ຢ່າງ,

int *p;
{
int local1;

p = &local1;
local1 = 10;
....
}
{
int local2;
local2 = 20;
...
}

ຖ້າ (*p == 10) // ອອກຈາກຂອບເຂດການນໍາໃຊ້ local1
{

}

ຕົວຢ່າງອື່ນ:

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

A *ap;

void foo(const A&ar)
{
ap = & ar;
}

void bar()
{
ຟູ(A(10)); // ໄລຍະເວລາຂອງວັດຖຸ temp ສິ້ນສຸດລົງເມື່ອ foo ກັບຄືນມາ

{
A a(20)
....
}
ap->i+= 10; // ap ອ້າງອີງອອກຈາກຂອບເຂດ temp ທີ່ມີພື້ນທີ່
// ຖືກນໍາໃຊ້ຄືນດ້ວຍ a. ຄ່າຂອງ ap->i ແມ່ນຫຍັງ?
}

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

-ftrapv
ທາງ​ເລືອກ​ນີ້​ສ້າງ​ກັບ​ດັກ​ສໍາ​ລັບ​ການ​ລົງ​ນາມ overflow ໃນ​ການ​ບວກ​, ການ​ລົບ​,
ການດໍາເນີນງານຄູນ.

-fwrapv
ທາງ​ເລືອກ​ນີ້​ແນະ​ນໍາ​ໃຫ້​ຜູ້​ສັງ​ລວມ​ສົມ​ມຸດ​ວ່າ​ການ​ລົງ​ນາມ​ເລກ​ຄະ​ນິດ​ສາດ overflow ຂອງ​
ການບວກ, ການຫັກລົບ ແລະ ການຄູນຫໍ່ອ້ອມຮອບໂດຍໃຊ້ twos-complement
ການເປັນຕົວແທນ. ທຸງນີ້ເຮັດໃຫ້ການເພີ່ມປະສິດທິພາບບາງຢ່າງ ແລະປິດການໃຊ້ງານອັນອື່ນ. ນີ້
ທາງ​ເລືອກ​ແມ່ນ​ໄດ້​ຮັບ​ການ​ເປີດ​ໃຊ້​ໂດຍ​ຄ່າ​ເລີ່ມ​ຕົ້ນ​ສໍາ​ລັບ​ການ Java front end, ຕາມ​ທີ່​ຕ້ອງ​ການ​ໂດຍ​ພາ​ສາ Java
ຂໍ້ ກຳ ນົດ.

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

-fnon-call-exceptions
ສ້າງລະຫັດທີ່ອະນຸຍາດໃຫ້ຄໍາແນະນໍາໃສ່ກັບດັກຖິ້ມຂໍ້ຍົກເວັ້ນ. ໃຫ້ສັງເກດວ່ານີ້
ຕ້ອງການການຮອງຮັບເວລາແລ່ນສະເພາະເວທີທີ່ບໍ່ມີຢູ່ທົ່ວທຸກແຫ່ງ. ຍິ່ງໄປກວ່ານັ້ນ,
ມັນພຽງແຕ່ອະນຸຍາດໃຫ້ ກັບດັກ ຄໍາແນະນໍາທີ່ຈະຖິ້ມຂໍ້ຍົກເວັ້ນ, ie ການອ້າງອິງຄວາມຊົງຈໍາຫຼື
ຄໍາແນະນໍາຈຸດລອຍ. ມັນບໍ່ອະນຸຍາດໃຫ້ມີຂໍ້ຍົກເວັ້ນທີ່ຈະຖິ້ມຈາກ arbitrary
ຕົວຈັດການສັນຍານເຊັ່ນ "SIGALRM".

-fdelete-dead-exceptions
ພິຈາລະນາຄໍາແນະນໍາທີ່ອາດຈະຖິ້ມຂໍ້ຍົກເວັ້ນແຕ່ບໍ່ໄດ້ປະກອບສ່ວນຢ່າງອື່ນ
ການປະຕິບັດໂຄງການສາມາດໄດ້ຮັບການ optimized ທັນທີ. ຕົວເລືອກນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ
ສໍາລັບສ່ວນຫນ້າຂອງ Ada, ຕາມທີ່ອະນຸຍາດໂດຍຂໍ້ກໍານົດພາສາ Ada. ການເພີ່ມປະສິດທິພາບ
passes ທີ່ເຮັດໃຫ້ການຍົກເວັ້ນຕາຍໄດ້ຖືກໂຍກຍ້າຍອອກໄດ້ຖືກເປີດໃຊ້ເປັນເອກະລາດທີ່ແຕກຕ່າງກັນ
ລະດັບການເພີ່ມປະສິດທິພາບ.

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

-fasynchronous-unwind-ຕາຕະລາງ
ສ້າງຕາຕະລາງ unwind ໃນຮູບແບບ DWARF 2, ຖ້າສະຫນັບສະຫນູນໂດຍເຄື່ອງຈັກເປົ້າຫມາຍ. ຕາຕະລາງແມ່ນ
ທີ່ແນ່ນອນຢູ່ແຕ່ລະຂອບເຂດຄໍາແນະນໍາ, ສະນັ້ນມັນສາມາດຖືກນໍາໃຊ້ສໍາລັບການ stack unwinding ຈາກ
ເຫດການບໍ່ກົງກັນ (ເຊັ່ນ: debugger ຫຼືຕົວເກັບຂີ້ເຫຍື້ອ).

-fno-gnu-ເປັນເອກະລັກ
ໃນລະບົບທີ່ມີ GNU assembler ແລະ C library, C++ compiler ໃຊ້
"STB_GNU_UNIQUE" ການຜູກມັດເພື່ອໃຫ້ແນ່ໃຈວ່າຄໍານິຍາມຂອງສະມາຊິກຂໍ້ມູນສະຖິດຂອງແມ່ແບບ
ແລະຕົວແປທ້ອງຖິ່ນ static ໃນຫນ້າທີ່ inline ແມ່ນເປັນເອກະລັກເຖິງແມ່ນວ່າຢູ່ໃນທີ່ປະທັບຂອງ
"RTLD_LOCAL"; ນີ້ເປັນສິ່ງຈໍາເປັນເພື່ອຫຼີກເວັ້ນບັນຫາກັບຫ້ອງສະຫມຸດທີ່ໃຊ້ໂດຍສອງທີ່ແຕກຕ່າງກັນ
"RTLD_LOCAL" plugins ຂຶ້ນກັບຄໍານິຍາມໃນຫນຶ່ງຂອງເຂົາເຈົ້າແລະດັ່ງນັ້ນ
ບໍ່ເຫັນດີກັບຄົນອື່ນກ່ຽວກັບການຜູກມັດຂອງສັນຍາລັກ. ແຕ່ສາເຫດນີ້
"dlclose" ທີ່ຈະຖືກລະເວັ້ນສໍາລັບ DSOs ທີ່ຖືກກະທົບ; ຖ້າໂຄງການຂອງທ່ານອີງໃສ່ reinitialization
ຂອງ DSO ຜ່ານ "dlclose" ແລະ "dlopen", ທ່ານສາມາດນໍາໃຊ້ -fno-gnu-ເປັນເອກະລັກ.

-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" ເປັນ "short unsigned int" ແທນທີ່ຈະເປັນ.
ຄ່າເລີ່ມຕົ້ນສໍາລັບເປົ້າຫມາຍ. ທາງເລືອກນີ້ແມ່ນເປັນປະໂຫຍດສໍາລັບການກໍ່ສ້າງໂຄງການທີ່ຈະດໍາເນີນການພາຍໃຕ້
ເຫຼົ້າແວງ.

ຄໍາເຕືອນ: ໄດ້ -fshort-wchar switch ເຮັດໃຫ້ GCC ສ້າງລະຫັດທີ່ບໍ່ແມ່ນ binary
ເຂົ້າກັນໄດ້ກັບລະຫັດທີ່ສ້າງຂຶ້ນໂດຍບໍ່ມີການສະຫຼັບນັ້ນ. ໃຊ້ມັນເພື່ອສອດຄ່ອງກັບສິ່ງທີ່ບໍ່ເປັນ.
ແອັບພລິເຄຊັນ binary interface ເລີ່ມຕົ້ນ.

-fno-ທົ່ວໄປ
ໃນລະຫັດ C, ຄວບຄຸມການຈັດວາງຂອງຕົວແປທົ່ວໂລກທີ່ບໍ່ໄດ້ໃຊ້. Unix C compilers
ໄດ້ອະນຸຍາດຕາມປະເພນີຫຼາຍຄໍານິຍາມຂອງຕົວແປດັ່ງກ່າວໃນທີ່ແຕກຕ່າງກັນ
ການລວບລວມຫນ່ວຍງານໂດຍການວາງຕົວແປໃນບລັອກທົ່ວໄປ. ນີ້ແມ່ນພຶດຕິກໍາ
ລະບຸໂດຍ -fcommon, ແລະເປັນຄ່າເລີ່ມຕົ້ນຂອງ GCC ໃນເປົ້າໝາຍສ່ວນໃຫຍ່. ໃນທາງກົງກັນຂ້າມ,
ພຶດຕິກໍານີ້ແມ່ນບໍ່ຕ້ອງການໂດຍ ISO C, ແລະໃນບາງເປົ້າຫມາຍອາດຈະປະຕິບັດຄວາມໄວຫຼືລະຫັດ
ການລົງໂທດຂະໜາດໃນການອ້າງອີງຕົວແປ. ໄດ້ -fno-ທົ່ວໄປ ທາງ​ເລືອກ​ລະ​ບຸ​ວ່າ​
compiler ຄວນວາງຕົວແປທົ່ວໂລກທີ່ບໍ່ໄດ້ໃຊ້ໃນສ່ວນຂໍ້ມູນຂອງວັດຖຸ
ໄຟລ໌, ແທນທີ່ຈະສ້າງພວກມັນເປັນບລັອກທົ່ວໄປ. ນີ້ມີຜົນກະທົບວ່າຖ້າຫາກວ່າ
ຕົວແປດຽວກັນຖືກປະກາດ (ໂດຍບໍ່ມີ "extern") ໃນສອງການລວບລວມທີ່ແຕກຕ່າງກັນ, ທ່ານໄດ້ຮັບ a
ຄວາມຜິດພາດຫຼາຍຄໍານິຍາມເມື່ອທ່ານເຊື່ອມຕໍ່ພວກມັນ. ໃນກໍລະນີນີ້, ທ່ານຕ້ອງລວບລວມກັບ
-fcommon ແທນ. ສັງລວມກັບ -fno-ທົ່ວໄປ ເປັນປະໂຫຍດຕໍ່ເປົ້າຫມາຍທີ່ມັນ
ໃຫ້ປະສິດທິພາບທີ່ດີກວ່າ, ຫຼືຖ້າຫາກວ່າທ່ານຕ້ອງການທີ່ຈະກວດສອບວ່າໂຄງການຈະເຮັດວຽກ
ລະບົບອື່ນໆທີ່ສະເຫມີປະຕິບັດການປະກາດຕົວແປທີ່ບໍ່ໄດ້ກໍານົດເອງດ້ວຍວິທີນີ້.

-fno-ident
ບໍ່ສົນໃຈຄຳສັ່ງ "#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. x86 ບໍ່ມີຂອບເຂດຈໍາກັດດັ່ງກ່າວ.)

ລະຫັດຕໍາແຫນ່ງເອກະລາດຮຽກຮ້ອງໃຫ້ມີການສະຫນັບສະຫນູນພິເສດ, ແລະດັ່ງນັ້ນຈຶ່ງເຮັດວຽກພຽງແຕ່ໃນ
ເຄື່ອງທີ່ແນ່ນອນ. ສໍາລັບ x86, 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]
ໂດຍບໍ່ມີການກໍານົດຄ່າ, ຫໍ່ສະມາຊິກໂຄງສ້າງທັງຫມົດຮ່ວມກັນໂດຍບໍ່ມີຮູ. ເມື່ອ ກ
ຄ່າແມ່ນຖືກກໍານົດ (ເຊິ່ງຈະຕ້ອງເປັນພະລັງງານຂະຫນາດນ້ອຍຂອງສອງ), ສະມາຊິກໂຄງສ້າງຊອງ
ອີງຕາມຄ່ານີ້, ເປັນຕົວແທນຂອງການຈັດຕໍາແຫນ່ງສູງສຸດ (ນັ້ນແມ່ນ, ວັດຖຸທີ່ມີ
ຄວາມຕ້ອງການການຈັດວາງເລີ່ມຕົ້ນທີ່ໃຫຍ່ກວ່ານີ້ແມ່ນຜົນຜະລິດທີ່ອາດຈະ unaligned ຢູ່
ສະຖານທີ່ທີ່ເຫມາະສົມຕໍ່ໄປ.

ຄໍາເຕືອນ: ໄດ້ -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 ຖືກໃສ່ແລະ
ອອກແລ້ວ. ນີ້ຫມາຍຄວາມວ່າສະບັບທີ່ສາມາດແກ້ໄຂໄດ້ຂອງຫນ້າທີ່ດັ່ງກ່າວຈະຕ້ອງມີ. ຖ້າ
ການ​ນໍາ​ໃຊ້​ຫນ້າ​ທີ່​ທັງ​ຫມົດ​ຂອງ​ທ່ານ​ແມ່ນ​ຂະ​ຫຍາຍ​ຕົວ​ໃນ​ເສັ້ນ​, ນີ້​ອາດ​ຈະ​ຫມາຍ​ເຖິງ​ການ​ຂະ​ຫຍາຍ​ຕົວ​ເພີ່ມ​ເຕີມ​
ຂະຫນາດລະຫັດ. ຖ້າທ່ານໃຊ້ "extern inline" ໃນລະຫັດ C ຂອງທ່ານ, ສະບັບທີ່ຢູ່ຂອງ
ຫນ້າທີ່ດັ່ງກ່າວຕ້ອງໄດ້ຮັບການສະຫນອງໃຫ້. (ນີ້ປົກກະຕິແລ້ວແມ່ນກໍລະນີໃດກໍ່ຕາມ, ແຕ່ຖ້າຫາກວ່າທ່ານໄດ້ຮັບ
ໂຊກດີແລະ optimizer ສະເຫມີຂະຫຍາຍຫນ້າທີ່ inline, ທ່ານອາດຈະໄດ້ຮັບ
ໄປໂດຍບໍ່ໄດ້ໃຫ້ສຳເນົາແບບຄົງທີ່.)

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

-finstrument-functions-exclude-file-list=ເອກະສານ,ເອກະສານ...
ກໍາ​ນົດ​ບັນ​ຊີ​ລາຍ​ການ​ຂອງ​ຫນ້າ​ທີ່​ທີ່​ຖືກ​ຍົກ​ເວັ້ນ​ຈາກ​ເຄື່ອງ​ມື (ເບິ່ງ​ຄໍາ​ອະ​ທິ​ບາຍ​
of - finstrument - ຫນ້າ​ທີ່​). ຖ້າໄຟລ໌ທີ່ມີຄໍານິຍາມຟັງຊັນກົງກັນ
ກັບຫນຶ່ງຂອງ ເອກະສານ, ຫຼັງຈາກນັ້ນ, ຫນ້າທີ່ບໍ່ໄດ້ຖືກນໍາໃຊ້. ການແຂ່ງຂັນແມ່ນສໍາເລັດສຸດ
substrings: ຖ້າ​ຫາກ​ວ່າ​ ເອກະສານ ພາລາມິເຕີແມ່ນ substring ຂອງຊື່ໄຟລ໌, ມັນແມ່ນພິຈາລະນາ
ເປັນການແຂ່ງຂັນ.

ຍົກ​ຕົວ​ຢ່າງ:

-finstrument-functions-exclude-file-list=/bits/stl,include/sys

ບໍ່ລວມເອົາຟັງຊັນໃນແຖວໃດນຶ່ງທີ່ກຳນົດໄວ້ໃນໄຟລ໌ທີ່ມີຊື່ເສັ້ນທາງ /bits/stl or
ລວມເອົາ/sys.

ຖ້າ, ດ້ວຍເຫດຜົນບາງຢ່າງ, ທ່ານຕ້ອງການໃສ່ຈົດຫມາຍ , ໃນຫນຶ່ງຂອງ ຊິມ, ຂຽນ ,ທີ່ຢູ່ ຍົກ​ຕົວ​ຢ່າງ,
-finstrument-functions-exclude-file-list=',,tmp' (ຫມາຍ​ເຫດ​ຄໍາ​ເວົ້າ​ດຽວ​ທີ່​ຢູ່​ອ້ອມ​ຂ້າງ​
ທາງ​ເລືອກ).

-finstrument-functions-exclude-function-list=ຊິມ,ຊິມ...
ນີ້ແມ່ນຄ້າຍຄືກັນກັບ -finstrument-functions-exclude-file-list, ແຕ່ທາງເລືອກນີ້ກໍານົດ
ບັນຊີລາຍຊື່ຂອງຫນ້າທີ່ຈະຖືກຍົກເວັ້ນຈາກເຄື່ອງມື. ຊື່ຟັງຊັນທີ່ຈະເປັນ
matched ແມ່ນຊື່ທີ່ຜູ້ໃຊ້ສາມາດເຫັນໄດ້, ເຊັ່ນ "vector blah(const vector &)", ບໍ່ແມ່ນ
ຊື່ mangled ພາຍໃນ (ເຊັ່ນ, "_Z4blahRSt6vectorIiSaIiEE"). ການແຂ່ງຂັນແມ່ນສໍາເລັດສຸດ
substrings: ຖ້າ​ຫາກ​ວ່າ​ ຊິມ ພາລາມິເຕີແມ່ນສາຍຍ່ອຍຂອງຊື່ຟັງຊັນ, ມັນຖືກພິຈາລະນາ
ເພື່ອເປັນການແຂ່ງຂັນ. ສໍາລັບຕົວລະບຸຂະຫຍາຍ C99 ແລະ C++, ຕ້ອງລະບຸຊື່ຟັງຊັນ
ໃນ UTF-8, ບໍ່ໃຊ້ຊື່ຕົວອັກສອນທົ່ວໄປ.

-fstack-ກວດ​ສອບ​
ສ້າງລະຫັດເພື່ອກວດສອບວ່າທ່ານບໍ່ເກີນຂອບເຂດຂອງ stack. ເຈົ້າ
ຄວນລະບຸທຸງນີ້ ຖ້າທ່ານກຳລັງແລ່ນຢູ່ໃນສະພາບແວດລ້ອມທີ່ມີຫຼາຍຫົວຂໍ້,
ແຕ່ທ່ານພຽງແຕ່ບໍ່ຄ່ອຍຕ້ອງການທີ່ຈະລະບຸມັນຢູ່ໃນສະພາບແວດລ້ອມກະທູ້ດຽວນັບຕັ້ງແຕ່ stack
overflow ຈະຖືກກວດພົບໂດຍອັດຕະໂນມັດໃນເກືອບທຸກລະບົບຖ້າມີພຽງແຕ່ stack ດຽວ.

ໃຫ້ສັງເກດວ່າສະຫວິດນີ້ບໍ່ໄດ້ເຮັດໃຫ້ການກວດສອບຕົວຈິງແລ້ວ; ການດໍາເນີນງານ
ລະບົບຫຼື runtime ພາສາຕ້ອງເຮັດແນວນັ້ນ. ສະຫຼັບເຮັດໃຫ້ການສ້າງລະຫັດ
ໃຫ້ແນ່ໃຈວ່າພວກເຂົາເຫັນ stack ໄດ້ຖືກຂະຫຍາຍອອກ.

ນອກຈາກນັ້ນ, ທ່ານຍັງສາມາດລະບຸຕົວກໍານົດການສະຕຣິງໄດ້: no ຫມາຍ​ຄວາມ​ວ່າ​ບໍ່​ມີ​ການ​ກວດ​ສອບ​, generic ວິທີການ
ບັງຄັບໃຊ້ການກວດສອບແບບເກົ່າ, ສະເພາະ ຫມາຍຄວາມວ່າໃຊ້ວິທີການກວດສອບທີ່ດີທີ່ສຸດແລະ
ເທົ່າກັບເປົ່າ -fstack-ກວດ​ສອບ​.

ການກວດສອບແບບເກົ່າແມ່ນກົນໄກທົ່ວໄປທີ່ບໍ່ຕ້ອງການການສະຫນັບສະຫນູນເປົ້າຫມາຍສະເພາະໃນ
compiler ແຕ່ມາພ້ອມກັບຂໍ້ບົກຜ່ອງດັ່ງຕໍ່ໄປນີ້:

1. ປັບປຸງຍຸດທະສາດການຈັດສັນສໍາລັບວັດຖຸຂະຫນາດໃຫຍ່: ເຂົາເຈົ້າໄດ້ຖືກຈັດສັນສະເຫມີ
dynamically ຖ້າຂະຫນາດຂອງພວກມັນເກີນຂອບເຂດກໍານົດ.

2. ກໍານົດຂອບເຂດຈໍາກັດກ່ຽວກັບຂະຫນາດຂອງກອບ static ຂອງຫນ້າທີ່: ເມື່ອມັນຖືກ topped ໂດຍ a
ຫນ້າ​ທີ່​ໂດຍ​ສະ​ເພາະ​, ການ​ກວດ​ສອບ stack ແມ່ນ​ບໍ່​ຫນ້າ​ເຊື່ອ​ຖື​ແລະ​ຄໍາ​ເຕືອນ​ແມ່ນ​ອອກ​ໂດຍ​ການ​
ນັກຂຽນ.

3. ຄວາມບໍ່ມີປະສິດທິພາບ: ເປັນຍ້ອນທັງຍຸດທະສາດການຈັດສັນທີ່ຖືກດັດແກ້ ແລະ ທົ່ວໄປ
ການປະຕິບັດ, ການປະຕິບັດລະຫັດຖືກຂັດຂວາງ.

ໃຫ້ສັງເກດວ່າການກວດສອບ stack ແບບເກົ່າແມ່ນຍັງເປັນວິທີການ fallback ສໍາລັບ ສະເພາະ ຖ້າບໍ່ມີ
ການສະຫນັບສະຫນູນເປົ້າຫມາຍໄດ້ຖືກເພີ່ມເຂົ້າໃນ compiler.

-fstack-limit-register=reg
-fstack-limit-symbol=ຊິມ
-fno-stack-ຈຳກັດ
ສ້າງລະຫັດເພື່ອຮັບປະກັນວ່າ stack ບໍ່ເຕີບໂຕເກີນມູນຄ່າທີ່ແນ່ນອນ, ບໍ່ວ່າຈະ
ຄ່າຂອງທະບຽນ ຫຼືທີ່ຢູ່ຂອງສັນຍາລັກ. ຖ້າຕ້ອງການ stack ໃຫຍ່ກວ່າ, a
ສັນຍານຖືກຍົກຂຶ້ນມາໃນເວລາແລ່ນ. ສໍາລັບເປົ້າຫມາຍສ່ວນໃຫຍ່, ສັນຍານຖືກຍົກຂຶ້ນມາກ່ອນທີ່ຈະ 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. ນີ້​ແມ່ນ
ໃນປັດຈຸບັນປະຕິບັດພຽງແຕ່ສໍາລັບເປົ້າຫມາຍ x86 ທີ່ໃຊ້ 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 or local-exec. ໃຫ້ສັງເກດວ່າທາງເລືອກແມ່ນ
ຂຶ້ນກັບການເພີ່ມປະສິດທິພາບ: compiler ອາດຈະໃຊ້ຕົວແບບທີ່ມີປະສິດທິພາບກວ່າສໍາລັບສັນຍາລັກທີ່ບໍ່ແມ່ນ
ສັງເກດເຫັນຢູ່ນອກຫນ່ວຍບໍລິການແປພາສາ, ຫຼືຖ້າ -fpic ບໍ່ໄດ້ໃຫ້ຢູ່ໃນເສັ້ນຄໍາສັ່ງ.

ຄ່າເລີ່ມຕົ້ນໂດຍບໍ່ມີການ -fpic is initial-exec; ກັບ -fpic ຄ່າເລີ່ມຕົ້ນແມ່ນ global-dynamic.

-fvisibility=[Default|ພາຍໃນ|ເຊື່ອງໄວ້|ປ້ອງກັນ]
ກໍານົດຄ່າເລີ່ມຕົ້ນການເບິ່ງເຫັນສັນຍາລັກຮູບພາບ ELF ເປັນທາງເລືອກທີ່ລະບຸໄວ້ --- ສັນຍາລັກທັງຫມົດແມ່ນ
ໝາຍດ້ວຍອັນນີ້ ເວັ້ນເສຍແຕ່ຈະ overridden ພາຍໃນລະຫັດ. ການນໍາໃຊ້ຄຸນນະສົມບັດນີ້ສາມາດຫຼາຍ
ປັບປຸງການເຊື່ອມໂຍງແລະເວລາໂຫຼດຂອງຫ້ອງສະຫມຸດວັດຖຸທີ່ໃຊ້ຮ່ວມກັນຢ່າງຫຼວງຫຼາຍ, ຜະລິດຫຼາຍ
ລະ​ຫັດ​ທີ່​ເຫມາະ​ສົມ​, ສະ​ຫນອງ​ການ​ສົ່ງ​ອອກ API ທີ່​ໃກ້​ສົມ​ບູນ​ແບບ​ແລະ​ປ້ອງ​ກັນ​ການ​ປະ​ທະ​ກັນ​ສັນ​ຍາ​ລັກ​. ມັນ​ແມ່ນ
ຢ່າງແຂງແຮງ ແນະນໍາໃຫ້ທ່ານໃຊ້ອັນນີ້ໃນວັດຖຸທີ່ໃຊ້ຮ່ວມກັນທີ່ທ່ານແຈກຢາຍ.

ເຖິງວ່າຈະມີນາມສະກຸນ, Default ສະເຫມີຫມາຍຄວາມວ່າສາທາລະນະ; ie, ສາມາດໃຊ້ໄດ້ທີ່ຈະເຊື່ອມຕໍ່
ຕໍ່ຕ້ານຈາກພາຍນອກວັດຖຸທີ່ໃຊ້ຮ່ວມກັນ. ປ້ອງກັນ ແລະ ພາຍໃນ ແມ່ນ pretty useless ໃນ
ການນໍາໃຊ້ໃນໂລກທີ່ແທ້ຈິງດັ່ງນັ້ນທາງເລືອກດຽວທີ່ໃຊ້ທົ່ວໄປອື່ນໆແມ່ນ ເຊື່ອງໄວ້. ຄ່າເລີ່ມຕົ້ນຖ້າ
- ການເບິ່ງເຫັນ ບໍ່​ໄດ້​ລະ​ບຸ​ໄວ້​ແມ່ນ​ Defaultie, ເຮັດໃຫ້ທຸກສັນຍາລັກສາທາລະນະ.

ຄໍາອະທິບາຍທີ່ດີກ່ຽວກັບຜົນປະໂຫຍດທີ່ສະເຫນີໂດຍການຮັບປະກັນສັນຍາລັກ ELF ຖືກຕ້ອງ
ການເບິ່ງເຫັນແມ່ນໃຫ້ໂດຍ "ວິທີການຂຽນຫ້ອງສະຫມຸດທີ່ແບ່ງປັນ" ໂດຍ Ulrich Drepper (ເຊິ່ງສາມາດເປັນ.
ພົບຢູ່http://www.akkadia.org/drepper/>)--- ແນວໃດກໍ່ຕາມການແກ້ໄຂທີ່ດີກວ່າໄດ້ເຮັດ
ເປັນໄປໄດ້ໂດຍທາງເລືອກນີ້ເພື່ອຫມາຍສິ່ງທີ່ເຊື່ອງໄວ້ໃນເວລາທີ່ຄ່າເລີ່ມຕົ້ນແມ່ນສາທາລະນະທີ່ຈະເຮັດ
ຄ່າເລີ່ມຕົ້ນຖືກເຊື່ອງໄວ້ ແລະໝາຍສິ່ງທີ່ເປັນສາທາລະນະ. ນີ້ແມ່ນມາດຕະຖານທີ່ມີ DLLs ໃນ Windows ແລະ
ກັບ -fvisibility=hidden ແລະ "__attribute__ ((ການເບິ່ງເຫັນ("ຄ່າເລີ່ມຕົ້ນ")))" ແທນ
"__declspec(dllexport)" ທ່ານໄດ້ຮັບ semantics ເກືອບດຽວກັນກັບ syntax ຄືກັນ.
ນີ້ແມ່ນຜົນປະໂຫຍດອັນໃຫຍ່ຫຼວງຕໍ່ຜູ້ທີ່ເຮັດວຽກກັບໂຄງການຂ້າມເວທີ.

ສໍາລັບຜູ້ທີ່ເພີ່ມການສະຫນັບສະຫນູນການເບິ່ງເຫັນກັບລະຫັດທີ່ມີຢູ່, ທ່ານອາດຈະຊອກຫາ "#pragma GCC
visibility" ຂອງການນໍາໃຊ້. ນີ້ເຮັດວຽກໂດຍການປິດການປະກາດທີ່ທ່ານຕ້ອງການຕັ້ງ
visibility for with (ຕົວຢ່າງ) "#pragma GCC visibility push(hidden)" ແລະ "#pragma
ປະກົດການເບິ່ງເຫັນ GCC as ສ່ວນ of
ໄດ້ API ການໂຕ້ຕອບ ສັນຍາ ແລະດັ່ງນັ້ນລະຫັດໃຫມ່ທັງຫມົດຄວນຈະກໍານົດການເບິ່ງເຫັນໄດ້ຕະຫຼອດເວລາ
ມັນບໍ່ແມ່ນຄ່າເລີ່ມຕົ້ນ; ie, ການປະກາດພຽງແຕ່ສໍາລັບການນໍາໃຊ້ພາຍໃນ DSO ທ້ອງຖິ່ນຄວນ
ສະເຫມີໄປ ຈະຖືກໝາຍໄວ້ຢ່າງຈະແຈ້ງວ່າຖືກເຊື່ອງໄວ້ເພື່ອຫຼີກເວັ້ນທາງອ້ອມ PLT
overheads--- ການເຮັດໃຫ້ມີຄວາມຊັດເຈນອັນນີ້ຢ່າງອຸດົມສົມບູນຍັງຊ່ວຍໃຫ້ການອ່ານແລະເອກະສານດ້ວຍຕົນເອງ.
ຂອງລະຫັດ. ໃຫ້ສັງເກດວ່າເນື່ອງຈາກຄວາມຕ້ອງການສະເພາະ ISO C++, "operator ໃຫມ່" ແລະ
"ການລຶບຜູ້ປະຕິບັດງານ" ຈະຕ້ອງເປັນການເບິ່ງເຫັນໃນຕອນຕົ້ນສະເໝີ.

ຈົ່ງຮູ້ວ່າ headers ຈາກພາຍນອກໂຄງການຂອງທ່ານ, ໂດຍສະເພາະ headers ລະບົບແລະ
headers ຈາກຫ້ອງສະຫມຸດອື່ນໆທີ່ທ່ານໃຊ້, ອາດຈະບໍ່ຄາດວ່າຈະຖືກລວບລວມກັບ
ການເບິ່ງເຫັນນອກເໜືອໄປຈາກຄ່າເລີ່ມຕົ້ນ. ທ່ານອາດຈະຕ້ອງເວົ້າຢ່າງຈະແຈ້ງ "#pragma GCC
visibility push(default)" ກ່ອນທີ່ຈະລວມເອົາຫົວຂໍ້ດັ່ງກ່າວ.

ການປະກາດ "ພາຍນອກ" ບໍ່ໄດ້ຮັບຜົນກະທົບຈາກ - ການເບິ່ງເຫັນ, ດັ່ງນັ້ນຫຼາຍລະຫັດສາມາດເປັນ
ລວບລວມກັບ -fvisibility=hidden ໂດຍບໍ່ມີການດັດແປງ. ຢ່າງໃດກໍຕາມ, ນີ້ຫມາຍຄວາມວ່າ
ການໂທຫາຫນ້າທີ່ "extern" ທີ່ບໍ່ມີການເບິ່ງເຫັນຢ່າງຊັດເຈນໃຊ້ PLT, ດັ່ງນັ້ນມັນມີຫຼາຍ
ມີປະສິດທິພາບໃນການໃຊ້ "__attribute ((visibility))" ແລະ/ຫຼື "#pragma GCC visibility" ເພື່ອບອກ.
compiler ທີ່ "extern" ປະກາດຄວນໄດ້ຮັບການປະຕິບັດເປັນການເຊື່ອງໄວ້.

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

ພາບລວມຂອງເຕັກນິກເຫຼົ່ານີ້, ຜົນປະໂຫຍດແລະວິທີການນໍາໃຊ້ພວກມັນແມ່ນຢູ່ທີ່
<http://gcc.gnu.org/wiki/Visibility>.

-fstrict-volatile-bitfields
ຕົວເລືອກນີ້ຄວນຈະຖືກໃຊ້ຖ້າເຂົ້າເຖິງຊ່ອງບິດທີ່ປ່ຽນແປງໄດ້ (ຫຼືໂຄງສ້າງອື່ນໆ
ທົ່ງນາ, ເຖິງແມ່ນວ່າຜູ້ລວບລວມຂໍ້ມູນມັກຈະໃຫ້ກຽດປະເພດເຫຼົ່ານັ້ນຢ່າງໃດກໍ່ຕາມ) ຄວນໃຊ້ອັນດຽວ
ການເຂົ້າເຖິງຄວາມກວ້າງຂອງປະເພດພາກສະຫນາມ, ສອດຄ່ອງຕາມທໍາມະຊາດຖ້າເປັນໄປໄດ້.
ຕົວຢ່າງ, ເປົ້າໝາຍທີ່ມີການລົງທະບຽນອຸປະກອນຕໍ່ພ່ວງທີ່ມີແຜນທີ່ໜ່ວຍຄວາມຈຳອາດຈະຕ້ອງການທັງໝົດດັ່ງກ່າວ
ການເຂົ້າເຖິງກວ້າງ 16 ບິດ; ດ້ວຍທຸງນີ້, ທ່ານສາມາດປະກາດທຸກ bit-fields peripheral
ເປັນ "unsigned short" (ສົມມຸດວ່າສັ້ນແມ່ນ 16 bits ໃນເປົ້າຫມາຍເຫຼົ່ານີ້) ເພື່ອບັງຄັບໃຫ້ GCC ໃຊ້.
ການເຂົ້າເຖິງ 16-bit ແທນທີ່ຈະ, ບາງທີ, ການເຂົ້າເຖິງ 32-bit ທີ່ມີປະສິດທິພາບຫຼາຍ.

ຖ້າຕົວເລືອກນີ້ຖືກປິດໃຊ້ງານ, ຄອມພີວເຕີຈະໃຊ້ຄໍາແນະນໍາທີ່ມີປະສິດທິພາບທີ່ສຸດ. ໃນ
ຕົວຢ່າງກ່ອນຫນ້ານີ້, ນັ້ນອາດຈະເປັນຄໍາແນະນໍາການໂຫຼດ 32-bit, ເຖິງແມ່ນວ່າການເຂົ້າເຖິງນັ້ນ
bytes ທີ່ບໍ່ມີສ່ວນໃດນຶ່ງຂອງ bit-field, ຫຼື memory-mapped registers
ບໍ່ກ່ຽວຂ້ອງກັບອັນທີ່ຖືກປັບປຸງ.

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

ໝາຍເຫດ: ເນື່ອງຈາກຂໍ້ຈຳກັດຂອງໂມເດວໜ່ວຍຄວາມຈຳ C/C++11, ການເຂົ້າເຖິງການຂຽນບໍ່ໄດ້ຖືກອະນຸຍາດ
ເພື່ອແຕະສະມາຊິກທີ່ບໍ່ແມ່ນ bit-field. ດັ່ງນັ້ນ, ມັນໄດ້ຖືກແນະນໍາໃຫ້ກໍານົດ bits ທັງຫມົດຂອງ
ປະເພດຂອງພາກສະຫນາມເປັນ bit-field ສະມາຊິກ.

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

-fsync-libcalls
ຕົວເລືອກນີ້ຄວບຄຸມບໍ່ວ່າຈະເປັນຕົວຢ່າງນອກສາຍຂອງຄອບຄົວ "__sync" ຂອງ
ຟັງຊັນອາດຈະຖືກໃຊ້ເພື່ອປະຕິບັດໜ້າທີ່ຂອງຄອບຄົວ C++11 "__atomic".

ຄ່າເລີ່ມຕົ້ນຂອງຕົວເລືອກນີ້ຖືກເປີດໃຊ້, ດັ່ງນັ້ນຮູບແບບທີ່ເປັນປະໂຫຍດພຽງແຕ່ຂອງທາງເລືອກ
is -fno-sync-libcalls. ທາງ​ເລືອກ​ນີ້​ໄດ້​ຖືກ​ນໍາ​ໃຊ້​ໃນ​ການ​ປະ​ຕິ​ບັດ​ຂອງ​ libatomic
ຫ້ອງສະຫມຸດ runtime.

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
ການເຂົ້າລະຫັດທີ່ມີຄໍາເວົ້າ ແລະຕົວອັກສອນຫລົບຫນີທີ່ຖືກຕີຄວາມໝາຍໃນທາງອື່ນເປັນ
string end ຫຼື escape.

ໄດ້ 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 ໃນເວລາທີ່ຊອກຫາ header
ໄຟລ໌.

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 ພາສາ ບໍ່ໄດ້ຖືກກໍານົດ, ຫຼືວ່າມັນມີມູນຄ່າອື່ນ, ຫຼັງຈາກນັ້ນຜູ້ລວບລວມຂໍ້ມູນໃຊ້ "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++ ອອນໄລນ໌ໂດຍໃຊ້ບໍລິການ onworks.net


ເຊີບເວີ ແລະສະຖານີເຮັດວຽກຟຣີ

ດາວໂຫຼດແອັບ Windows ແລະ Linux

  • 1
    GeoServer
    GeoServer
    GeoServer ເປັນຊອບແວ open-source
    ເຊີບເວີຂຽນໃນ Java ທີ່ອະນຸຍາດໃຫ້ຜູ້ໃຊ້
    ເພື່ອແບ່ງປັນ ແລະແກ້ໄຂຂໍ້ມູນພູມສາດ.
    ອອກແບບສໍາລັບການເຮັດວຽກຮ່ວມກັນ, ມັນ
    ເຜີຍແຜ່ da...
    ດາວໂຫລດ GeoServer
  • 2
    Firefly III
    Firefly III
    ການເງິນສ່ວນຕົວທີ່ບໍ່ເສຍຄ່າ ແລະເປີດແຫຼ່ງ
    ຜູ້​ຈັດ​ການ. Firefly III ລັກສະນະ ກ
    ລະບົບການບັນຊີສອງຄັ້ງ. ເຈົ້າ​ສາ​ມາດ
    ເຂົ້າໄປໄວ ແລະຈັດລະບຽບຂອງເຈົ້າ
    ທຸລະກຳ i...
    ດາວໂຫລດ Firefly III
  • 3
    ສ່ວນຂະຫຍາຍ Apache OpenOffice
    ສ່ວນຂະຫຍາຍ Apache OpenOffice
    ລາຍການຢ່າງເປັນທາງການຂອງ Apache
    ສ່ວນຂະຫຍາຍ OpenOffice. ເຈົ້າຈະພົບເຫັນ
    ສ່ວນຂະຫຍາຍຕັ້ງແຕ່ວັດຈະນານຸກົມຫາ
    ເຄື່ອງ​ມື​ທີ່​ຈະ​ນໍາ​ເຂົ້າ​ໄຟລ​໌ PDF ແລະ​ການ​ເຊື່ອມ​ຕໍ່​
    ກັບ ext...
    ດາວໂຫລດ Apache OpenOffice Extensions
  • 4
    MantisBT
    MantisBT
    Mantis ເປັນເວັບທີ່ສາມາດນຳໃຊ້ໄດ້ງ່າຍ
    bugtracker ອີງໃສ່ການຊ່ວຍເຫຼືອ bug ຜະລິດຕະພັນ
    ການຕິດຕາມ. ມັນຮຽກຮ້ອງໃຫ້ມີ PHP, MySQL ແລະ a
    ເຊີບເວີເວັບ. ກວດເບິ່ງຕົວຢ່າງຂອງພວກເຮົາ ແລະເປັນເຈົ້າພາບ
    ຂໍ້ສະເໜີ...
    ດາວໂຫລດ MantisBT
  • 5
    LAN Messenger
    LAN Messenger
    LAN Messenger ເປັນແອັບພລິເຄຊັນສົນທະນາ p2p
    ສໍາລັບການສື່ສານ intranet ແລະບໍ່
    ຕ້ອງການເຄື່ອງແມ່ຂ່າຍ. ຫຼາກຫຼາຍຂອງ handy
    ຄຸນນະສົມບັດແມ່ນສະຫນັບສະຫນູນລວມທັງ
    ແຈ້ງ​ການ...
    ດາວໂຫລດ LAN Messenger
  • 6
    DrJava
    DrJava
    DrJava ແມ່ນໂຄງການທີ່ມີນ້ໍາຫນັກເບົາ
    ສະພາບແວດລ້ອມສໍາລັບ Java ທີ່ຖືກອອກແບບເພື່ອສົ່ງເສີມ
    ການພັດທະນາຊອບແວທີ່ຂັບເຄື່ອນດ້ວຍການທົດສອບ. ມັນ
    ປະກອບມີບັນນາທິການໂຄງການອັດສະລິຍະ,
    int...
    ດາວໂຫລດ DrJava
  • ເພີ່ມເຕີມ »

Linux ຄຳ ສັ່ງ

Ad