این فرمان powerpc-linux-gnu-g++-4.9 است که می تواند در ارائه دهنده هاست رایگان OnWorks با استفاده از یکی از چندین ایستگاه کاری آنلاین رایگان ما مانند Ubuntu Online، Fedora Online، شبیه ساز آنلاین ویندوز یا شبیه ساز آنلاین MAC OS اجرا شود.
برنامه:
نام
gcc - کامپایلر پروژه GNU C و C++
خلاصه
gcc [-c|-S|-E] [-std=استاندارد]
[-g] [-صفحه] [-Oسطح]
[-Wهشدار دادن...] [-پدانتیک]
[-Iدیر...] [-Lدیر...]
[-Dدرشت دستور[=تعریف کنید]...] [-Uدرشت دستور]
[-fانتخاب...] [-mگزینه ماشین...]
[-o مجموعه] [@پرونده] پرونده...
فقط مفیدترین گزینه ها در اینجا فهرست شده اند. برای بقیه موارد زیر را ببینید. g ++ قبول می کند
اکثراً همان گزینه ها gcc.
شرح
وقتی GCC را فراخوانی می کنید، معمولاً پیش پردازش، کامپایل، مونتاژ و پیوند را انجام می دهد.
"گزینه های کلی" به شما این امکان را می دهد که این روند را در یک مرحله میانی متوقف کنید. برای
به عنوان مثال، -c گزینه می گوید لینکر را اجرا نکنید. سپس خروجی شامل شی است
فایل های خروجی توسط اسمبلر
گزینه های دیگر به یک مرحله از پردازش منتقل می شوند. برخی از گزینه ها کنترل می کنند
پیش پردازنده و دیگران خود کامپایلر. با این حال گزینه های دیگر اسمبلر و را کنترل می کنند
پیوند دهنده؛ بسیاری از این موارد در اینجا مستند نشده اند، زیرا به ندرت نیاز به استفاده از آنها دارید.
اکثر گزینه های خط فرمان که می توانید با GCC استفاده کنید برای برنامه های C مفید هستند. چه زمانی
یک گزینه فقط با یک زبان دیگر (معمولا C++) مفید است، توضیح اینطور می گوید
به صراحت اگر در توضیحات یک گزینه خاص منبعی ذکر نشده باشد
زبان، می توانید از آن گزینه با تمام زبان های پشتیبانی شده استفاده کنید.
La gcc برنامه گزینه ها و نام فایل ها را به عنوان عملوند می پذیرد. بسیاری از گزینه ها دارای چند
نام حروف؛ بنابراین گزینه های تک حرفی متعدد ممکن است نه گروه بندی شود: -دی وی بسیار
متفاوت از -d -v.
می توانید گزینه ها و دیگر آرگومان ها را با هم ترکیب کنید. در بیشتر موارد، ترتیبی که استفاده می کنید اینطور نیست
موضوع. وقتی از چندین گزینه از یک نوع استفاده می کنید، ترتیب اهمیت دارد. به عنوان مثال، اگر
شما مشخص می کنید -L بیش از یک بار، دایرکتوری ها به ترتیب مشخص شده جستجو می شوند. همچنین،
قرار دادن -l گزینه قابل توجه است
بسیاری از گزینه ها نام های طولانی دارند که با آنها شروع می شود -f یا با -W---مثلا،
-fmove-loop-invariants, -فرمت و غیره اکثر اینها هم مثبت و هم منفی دارند
تشکیل می دهد؛ شکل منفی از -فو is -fno-foo. این کتابچه راهنمای تنها یکی از این موارد را مستند می کند
دو فرم، هر کدام که پیش فرض نباشد.
OPTIONS
گزینه خلاصه
در اینجا خلاصه ای از همه گزینه ها، گروه بندی شده بر اساس نوع آورده شده است. توضیحات در ادامه آمده است
بخش.
به طور کلی گزینه
-c -S -E -o پرونده -بدون پیشوندهای متعارف لوله کدهای عبور-خروج -x زبان -v
-### --کمک[=کلاس[، ...]] --هدف-کمک - نسخه لفاف @پرونده -fplugin=پرونده
-fplugin-arg-نام=ارگ -fdump-ada-spec[-سلیم] -fada-spec-parent=واحد
-fdump-go-spec=پرونده
C زبان گزینه
-ansi -std=استاندارد -fgnu89-inline -aux-info نام فایل
-fallow-less-variadic-functions -فنو-اسم -فنو ساخته شده است -fno-builtin-تابع
-Fhosted -مناسب -فوپنمپ -fopenmp-simd -اف ام اس-افزونه ها -fplan9-extensions
سه نمودارها -سنتی سنتی-cpp آیش-تک-دقیق -fcond-عدم تطابق
تبدیل -بردار کتان -fsigned-bitfields -fsigned-char -funsigned-bitfields
-funsigned-char
++C زبان گزینه
-fabi-version=n -fno-access-control -fcheck-جدید -fconstexpr-depth=n
-friend-injection fno-elide-constructors مشخصات -fno-enforce-eh -for-scope
-fno-for-scope -fno-gnu-words -fno- implicit-templates
الگوهای -fno- ضمنی-داخلی -fno-implement-inlines -اف ام اس-افزونه ها
-fno-nonansi-builtins -fnothrow-opt -fno-operator-names -fno-optional-diags
-مجاز -fno-pretty-templates -فرپو -fno-rtti -fstats
-ftemplate-backtrace-limit=n -ftemplate-depth=n -fno-threadsafe-statics
-fuse-cxa-atexit -فنو ضعیف -nostdinc++ -fvisibility-inlines-hidden
-fvtable- Verify =std|preinit|هیچکدام -fvtv- شمارش می کند -fvtv-debug -fvisibility-ms-compat
-fext-numeric-literals -وابی -Wconversion-null -Wctor-dtor-privacy
-dtor-non-virtual-delete-dtor -Wliteral-پسوند - تنگ کردن -به جز غیر مجازی-dtor
-Wreorder -Weffc++ Wstrict-null-sentinel -بدون قالب-دوست بازیگران به سبک وولد
-Woverloaded-مجازی -Wno-pmf-تبدیل -Wsign-Promo
هدف-C و Objective-C++ زبان گزینه
-fconstant-string-class =نام کلاس -fgnu-runtime -fnext-runtime گیرنده های fno-nil
-fobjc-abi-version=n -fobjc-call-cxx-cdtors -fobjc-direct-dispatch -fobjc-استثناها
-fobjc-gc -fobjc-nilcheck -fobjc-std=objc1 -freplace-objc-classes -fzero-link
-gen-decls -Wassign-intercept - پروتکل Wno -انتخاب کننده -Wstrict-Selector-Match
-Wundeclared-Selector
زبان مستقل گزینه
-fmessage-length=n -fdiagnostics-show-location=[یک بار|هر خط]
-fdiagnostics-color=[خودکار|هرگز|همیشه] -fno-diagnostics-show-option
-fno-diagnostics-show-caret
هشدار گزینه
-fsyntax-only -fmax-errors=n -پدانتیک -اشتباهات -w -وکسترا -دیو
-وادرس -تجمیع-بازگشت -بهینه سازی های حلقه متحرک -محدوده های جنگی
-Wno-ویژگی ها -Wno-ساخته-کلان-بازتعریف شده است -Wc++-compat -Wc++11-compat -Wcast-align
-استاک -Wchar-مشترک ها -وکلوببر شده -کامنت کنید بدون شرط پشتیبانی می شود
-تبدیل -پوشش-عدم تطابق -تاریخ-زمان حذف - ناقص -Wno-cpp
-منسوخ شده است -Wno-منسوخ-اعلامیه -Wdisabled-بهینه سازی -Wno-div-by-zero
-ترفیع دوگانه -جسم خیس -Wenum-مقایسه کنید Wno-endif-labels -خطا -خطا=*
-Wfatal-خطاها -Wfloat-برابر -فرمت -Wformat=2 -Wno-format-contains-nul
-Wno-format-extra-args -Wformat-غیر تحت اللفظی -Wformat-security -Wformat-y2k
-Wframe-larger-than=لن -Wno-free-nonheap-object -Wjump-misses-init
نادیده گرفته شده واجد شرایط -حرفه ای -Wimplicit-function-declaration -Wimplicit-int
-برخود -وین لاین -Wmaybe-unitialized -بازیگرها از بین نرفتن به اشاره گر
-Wno-invalid-offsetof -Winvalid-PCH -بزرگتر از=لن -بهینه سازی های حلقه Wunsafe
Wlogical-op -طولانی طولانی -Wmain -Wmaybe-unitialized -Wmemset-transposed-args
پرانتزهای Wmissing Wmissing-field-initializers -Wmissing-include-dirs -Wno-multichar
-بدون هیچ -سرریز -Wopenmp-simd -طبقه های تار بسته بندی شده
-Wpacked-bitfield-compat -پد شده -پرانتزها -فرمت Wpedantic-ms
-فرمت Wno-pedantic-ms -wpointer-arith بدون اشاره گر به غیر بازیگری -Wredundant-decls
-Wno-return-local-addr - نوع چرخشی -توالی-نقطه -سایه -Wsign-مقایسه کنید
-Wsign-تبدیل -Wfloat-تبدیل -Wsizeof-pointer-memaccess -Wstack-محافظ
-Wstack-usage=لن Wstrict-aliasing -Wstrict-aliasing=n -سرریز مچ دست
-Wstrict-overflow=n -Wsuggest-attribute=[خالص|طراح|بدون بازگشت|قالب]
-Wmissing-format-attribute -سوئیچ -Switch-default -Switch-enum -Wsync-nand
Wsystem-headers -ترامپولین Wtrigraphs Wtype-Limits -وندف -Wunitarized
-Wunknown-pragmas -Wno-pragmas -ثابت-شناور-بدون پسوند -استفاده نشده
-Wunused-function Wunused-برچسب Wunused-local-typedefs -پارامتر Wunused
-نتیجه استفاده نشده است -ارزش استفاده نشده -Wunused-متغیر پارامتر -Wunused-but-set
-متغیر-استفاده نشده-اما-ست بازیگران بی فایده ماکروهای Wvariadic
-بردار-عملیات-عملکرد -وولا -Wvolatile-register-var -نوشتن رشته ها
-Wzero-as-null-pointer-constant
C و هدف-C-فقط هشدار گزینه
-Wbad-function-cast -Wmissing-اعلامیه ها -Wmissing-پارامتر-نوع
-Wmissing-نمونه های اولیه -خارجی ها -Wold-style-اعلامیه تعریف -Wold-style
Wstrict-نمونه های اولیه -غیر سنتی -تبدیل سنتی
-اعلامیه پس از بیانیه -Wpointer-Sign
اشکال زدایی گزینه
-dنامه ها زباله ها -ماشین تخلیه - تخلیه -fsanitize=سبک -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-Numbered-Links
-fdump-translation-unit[-n] -fdump-class-hierarchy[-n] -fdump-ipa-all
-fdump-ipa-cgrap -fdump-ipa-inline -fdump-passes -fdump-statistics -fdump-tree-all
-fdump-tree-original[-n] -fdump-tree-optimized[-n] -fdump-tree-cfg -fdump-tree-نام مستعار
-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-second
-feliminate-dwarf2-dups -fno-eliminate-unused-debug-types
-symbols-feliminate-unused-debug-symbols -femit-class-debug-always -قابل دفاع-نوع-عبور
-قابل دفاع-نوع-عبور=محدوده-لیست -fdebug-types-section -fmem-report-wpa -fmem-report
-fpre-ipa-mem-گزارش -fpost-ipa-mem-report -fprofile-arcs -fopt-info
-fopt-info-گزینه های[=پرونده] -frandom-seed=رشته -fsched-verbose=n -fsel-sched-verbose
-fsel-sched-dump-cfg -fsel-sched-pipelining-verbose -fstack-usage -آزمایش-پوشش
-ftime-گزارش -fvar-ردیابی -fvar-ردیابی-تکالیف
-fvar-tracking-assignments-toggle -g -gسطح -تغییر -gcoff -کوتوله-نسخه -ggdb
-سوئیچهای grecord-gcc -gno-record-gcc-switches -gstabs -gstabs+ -قطعه-کوتوله
-gno-sight-dwarf -gvms -gxcoff -gxcoff+ -fno-merge-debug-strings
-fno-dwarf2-cfi-aasm -fdebug-prefix-map=قدیمی=جدید -femit-struct-debug-baseonly
-femit-struct-debug-reduced -femit-struct-debug-detailed[=لیست مشخصات] -p -صفحه
-print-file-name=کتابخانه -print-libgcc-file-name -چاپ-چند دایرکتوری
-چاپ-چند لیب -چاپ-چاپ-دایرکتوری -Print-prog-name =برنامه
-چاپ-جستجو-dirs -Q -print-sysroot پسوند -print-sysroot-headers -Save- Temps
-save-temps=cwd -save-temps=obj -زمان[=پرونده]
بهینه سازی گزینه
-بهینه سازی های حلقه-faggressive -falign-functions[=n] -falign-jumps[=n]
-falign-labels[=n] -falign-loops[=n] -تعدادی-ریاضی -fauto-inc-dec
-شاخه-احتمالات -fbranch-target-load-optimize -fbranch-هدف-بار-بهینه 2
-fbtr-bb-exclusive -fcaller-save -fcheck-data-deps -fcombine-stack-adjustments
-fconserve-stack -FCOMPARE-elim -fcprop-رجیستر می کند fcrossjumping -fcse-follow-jumps
-fcse-skip-blocks -fcx-fortran-rules -fcx-limited-range بخشهای fdata -fdce
-تاخیر-شاخه -fdelete-null-pointer-checks -مجازی کردن
-fdevirtualize-speculatively -fdse ترسناک درون ریز -fipa-sra
-بهینه سازی ها -ffat-lto-اشیاء سریع-ریاضی -فقط ریاضی محدود
-float-store -fexcess-precision=سبک - فوروارد-تبلیغ کردن -ffp-contract=سبک
-function-sections -fgcse -fgcse-after-reload -fgcse-las -fgcse-lm
-فگرافیت-هویت -fgcse-sm -fhoist- مجاور-بارها تبدیل -fif -fif-conversion2
-findirect-inlining توابع -finline توابع-finline-یک بار فراخوانی می شود -Finline-limit =n
-finline-small-functions -fipa-cp -fipa-cp-clone -فیپا-پتا -fipa-profile
-fipa-pure-const -fipa-reference -fira-algorithm=الگوریتم -فیرا-منطقه=منطقه
-فیرا-بالابر-فشار -فیرا-حلقه-فشار -fno-ira-share-save-slots
-fno-ira-share-spill-slots -FIRA-VERBOSE =n -fisolate-erronous-paths-dereference
ویژگی-fisolate-erroneous paths -فیووپت -fkeep-inline-functions
-fkeep-static-consts -رشد-محدوده-کوچک شدن -فلوپ بلوک -فلوپ-تبادل
-فلوپ-نوار-معدن -floop-nest-optimize -floop-parallelize-all -flto
-flto-compression-level -flto-partition =جلبک -flto-گزارش -flto-report-wpa
-fmerge-all-constants ثابت-fmerge -fmodulo-sched -fmodulo-sched-allow-regmoves
-fmove-loop-invariants -fno-branch-count-reg -fno-defer-pop -fno-function-cse
-فنو-حدس-شاخه-احتمال -fno-inline -fno-math-errno -فنو-چشمک -fno-peephole2
-fno-sched-interblock -fno-sched-spec -fno-signed-zeros -fno-toplevel-reorder
-fno-به دام انداختن-ریاضی -fno-zero-initialized-in-bss -fomit-frame-pointer
-بهینه سازی تماس های خواهر و برادر -fpartial-inlining -fpeel-loops - پیش بینی کننده - مشترک
-fprefetch-loop-arrays -fprofile-report -fprofile-correction -fprofile-dir=مسیر
-fprofile-generate -fprofile-generate=مسیر -fprofile-use -fprofile-use=مسیر
-fprofile-values -fprofile-reorder-functions -مقاومتی-ریاضی -رایگان
-frename-registers -بلاک های سفارشی -freorder-blocks-and-partition توابع -freorder
-frerun-cse-after-loop -freschedule-modulo-scheduled-loops -بنیادسازی-ریاضی
-FSched2-he-superblocks -fsched-pressure -fsched-spec-load
-fsched-spec-load-dangerous -fsched-stalled-insns-dep[=n] -fsched-stalled-insns[=n]
-fsched-group-heuristic -fsched-critical-path-heuristic -fsched-spec-insn-heuristic
-fsched-rank-heuristic -fsched-last-insn-heuristic -fsched-dep-count-heuristic
-fschedule-insns -fschedule-insns2 -قطعات-لنگرها -برنامه ریزی انتخابی
-زمانبندی-fselective2 -صیل صفحه بندی حلقه های بیرونی لوله گذاری-fsel-sched
-Fshrink-Wrap -fsignaling-nans -fsingle-precision-constant -fsplit-ivs-in-unroller
-fsplit-wide-types محافظ چوب -fstack-protector-all -fstack-محافظ-قوی
fstrict-aliasing -fstrict-سرریز -fthread-jumps ردیاب -ftree-bit-ccp
-ftree-builtin-call-dce -ftree-ccp -ftree-ch -ftree-Coalesce-inline-vars
-ftree-Coalesce-vars -ftree-copy-prop -ftree-copyrename -ftree-dce
-ftree-dominator-opts -ftree-dse -ftree-forwprop -free-free -ftree-loop-if-convert
-ftree-loop-if-convert-stores -ftree-loop-im -ftree-phiprop توزیع -ftree-loop
الگوی-حلقه-دور-توزیع -ftree-loop-ivcanon -ftree-loop-linear
-ftree-loop-optimize -ftree-loop-vectorize -ftree-parallelize-loops=n -ftree-pre
-ftree-partial-pre -ftree-pta -ftree-reassoc سه سینک -ftree-slsr -ftree-sra
تبدیل -ftree-switch -ftree-tail-ادغام -ftree-ter -ftree-vectorize -ftree-vrp
-funit در یک زمان -funroll-all-loops -funroll-loops -بهینهسازیهای حلقه امن
-بهینهسازیهای ریاضی و سرگرمکننده -funswitch-loops -fvariable-expansion-in-unroller
-fvect-cost-model -fvpt - وب کل برنامه -fwpa -fuse-ld=ها
فیوز-لینکر-پلاگین --پارام نام=ارزش -O -O0 -O1 -O2 -O3 -اواس سریع -اوگ
پیش پردازنده گزینه
-Aسوال=پاسخ -آ-سوال[=پاسخ] -C -DD -dI -dM -dN -Dدرشت دستور[=تعریف کنید] -E -H
-idirafter دیر -عبارتند از پرونده -ایماکرو پرونده -پیوند پرونده -ithprefix دیر
-IwwithPrefixBefore دیر -سیستم دیر -imultilib دیر -isysroot دیر -M -مامان -MF -MG
-نماینده مجلس -MQ -MT -nostdinc -P -fdebug-cpp -افتراک-کلان-گسترش دایرکتوری fworking
نقشه برداری سه نمودارها -دف -Uدرشت دستور -Wp،انتخاب -Xpreprocessor انتخاب -no-integrated-cpp
همگذار گزینه
-وا،انتخاب -Xassembler انتخاب
لینک دهنده گزینه
شی-فایل-نام -lکتابخانه -nostartfiles -nodefaultlibs -nostdlib - پای -rdynamic -s
-استاتیک -static-libgcc -static-libstdc++ -static-libasan static-libtsan
استاتیک-لیبلسان استاتیک-لیبوسان -به اشتراک گذاشته شده -shared-libgcc - نمادین -T خط
-Wl،انتخاب -xlinker انتخاب -u نماد
فهرست راهنما گزینه
-Bپیشوند -Iدیر -iplugindir=دیر -نقل دادندیر -Lدیر -specs =پرونده -من- --sysroot=دیر
--no-sysroot-پسوند
دستگاه وابسته گزینه
AAArch64 گزینه -mabi=نام -mbig-endian -mlittle-endian -mgeneral-regs-only
-mcmodel=کوچک -mcmodel=small -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=نام
آداپتوا ظهور و تجلی عیسی گزینه -mhalf-reg-file -mprefer-short-insn-regs -branch-cost=تعداد
-mcmove -mnops=تعداد -msoft-cmpsf -msplit-lohi -mpost-inc -mpost-modify
-mstack-offset=تعداد -Mround-نزدیکترین تماس های طولانی تماس های کوتاه -msmall16 -mfp-mode=حالت
-مره -max-vect-align=تعداد -msplit-vecmove-early -m1reg-REG
ARC گزینه بشکه-شفتر -mcpu=پردازنده -mA6 -mARC600 -mA7 -mARC700 -mdpfp
-mdpfp-compact -mdpfp-سریع -mno-dpfp-lrsr -میا -mno-mpy -mmul32x16 -mmul64 -mnorm
-mspfp -mspfp-compact -MSPFP سریع -msimd -msoft-float -mswap -mcrc -mdsp-packa -mdvbf
-ملاک -mmac-d16 -mmac-24 -mrtsc mswape -متلفونی -mxy -نادرست کردن -mannotate-align
-مارکلینوکس -marclinux_prof -mepilogue-cfi تماس های طولانی -تماس های متوسط -msdata
-mucb-mcount -mvolatile-cache بدخیم تماس بگیرید -mauto-modify-reg -mbbit-peephole -mno-brcc
-mcase-vector-pcrel mcompact-casesi -mno-cond-exec -مرغ-cbranchsi -mexpand-adddi
بارهای ترکیبی -mlra -mlra-priority-none -mlra-priority-compact mlra-اولویت-
غیر فشرده -mno-millicode کد مختلط -mq-class -mRcq -mRcw -msize-level=سطح
-mtune=پردازنده -multcost=تعداد -munalign-prob-threshold=احتمال
ARM گزینه -mapcs-frame -mno-apcs-frame -mabi=نام -mapcs-stack-check
-mno-apcs-stack-check -mapcs-float -mno-apcs-float -mapcs-reentrant
-mno-apcs-reentrant -msched-prolog -mno-sched-prolog -mlittle-endian -mbig-endian
-mwords-little-endian -mfloat-abi=نام -mfp16-format=نام -mthumb-interwork
-mno-thumb-interwork -mcpu=نام -مارس=نام -mfpu=نام -mstructure-size-boundary=n
-mabort-on-noreturn تماس های طولانی -mno-long-تماس -msingle-pic-base
-mno-single-pic-base -mpic-register=REG -mnop-fun-dllimport -mpoke-function-name
-مهم -مارم -mtpcs-frame -mtpcs-leaf-frame -mcaller-super-interworking
-mcallee-super-interworking -mtp=نام -mtls-dialect=گویش -mword-relocations
-mfix-cortex-m3-ldrd -دسترسی چندجانبه -mneon-for-64bit mslow-flash-data
آن را محدود کن
APR گزینه -mmcu=mcu تجمع-args -branch-cost=هزینه -mcall-prologues -mint8
-mno-وقفه می کند -آرامش کن -Mstrict-X -مدی استک -Waddr-space-convert
بلک فین گزینه -mcpu=پردازنده[-sirevision] -msim -momit-leaf-frame-pointer
-mno-omit-leaf-frame-pointer -mspecld-ناهنجاری -mno-specld-anomaly -mcsync-anomaly
-mno-csync-anomaly -mlow-64k -mno-low64k -mstack-check-l1 -کتابخانه مشترک
-mno-id-shred-library -mshared-library-id=n -mleaf-id-shred-library
-mno-leaf-id-shred-library -msep-data -mno-sep-data تماس های طولانی -mno-long-تماس
-mfast-fp -minline-plt چند هسته ای -mcorea -mcoreb -msdram -micplb
C6X گزینه -mbig-endian -mlittle-endian -مارس=پردازنده -msim -msdata=نوع sdata
CRIS گزینه -mcpu=پردازنده -مارس=پردازنده -mtune=پردازنده -mmax-stack-frame =n
-melinux-stacksize=n -metrax4 -metrax100 -mpdebug -mcc-init عوارض جانبی mno
-mstack-align -mdata-align -mconst-align -m32-bit -m16-bit -m8-bit
-mno-prologue-epilogue -mno-gotplt -ملف -معوت -ملینوکس -mlinux سیم کارت -sim2
-mmul-bug-راهکار -mno-mul-bug-راهکار
CR16 گزینه -mmac -mcr16cplus -mcr16c -msim -mint32 -mbit-ops -mdata-model=مدل
داروین گزینه -all_load -allowable_client -ارشی -arch_errors_fatal -arch_only
-bind_at_load -دسته -bundle_loader -نام مشتری -compatibility_version
-نسخه فعلی نوار_مرده فایل-وابستگی -dylib_file -dylinker_install_name
-پویا -dynamiclib -list_symbols_exported -فیلست -flat_namespace
-force_cpusubtype_ALL -force_flat_namespace -headerpad_max_install_names -iframework
-پایه_تصویر -init -install_name -keep_private_externs -multi_module
-multiply_defined -Multiply_duped_Unused -noall_load
-no_dead_strip_inits_and_terms -nofixprebinding -نومولتیفز -ناربند
noseglinkedit -pagezero_size -پیشبندی -prebind_all_twolevel_modules -بسته_خصوصی
-Read_Only_Relocs -بخشی - نمادهای بخش -whyload -seg1addr -فرقه آفرینی
- نمادهای بخش -بخش -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 -استاتیک -زیر_کتابخانه -sub_umbrella
-twolevel_namespace -بله -تعریف نشده -لیست_symbols_unexported
-ناهمخوانی_اشاره_ضعیف -واتس لود -F حدس زد -خوشحال -mmacosx-version-min=نسخه
-mkernel -mone-byte-bool
دسامبر آلفا گزینه -mno-fp-regs -msoft-float -مییی -mieee-with-inexact
-mieee-conformant -mfp-trap-mode=حالت -MFP-Rounding-Mode =حالت -MTRAP-RECISION =حالت
-mbuild-constants -mcpu=نوع cpu -mtune=نوع cpu -mbwx -mmax -mfix -mcix
-mfloat-vax -mfloat-ieee -mexplicit-relocs -msmall-data داده های بزرگ -msmall-text
-متن بزرگ -mmmory-latency=زمان
FR30 گزینه -msmall-model -mno-lsim
LIF گزینه -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 -mhard-float -msoft-float
-Malloc-CC -mfixed-cc -mdword -mno-dword - دوبل -mno-دبل - رسانه -mno-media
-mmuladd -mno-muladd -mfdpic -minline-plt -mgprel-ro - multilib-library-pic
-mlinked-fp تماس های طولانی برچسب های بدخیم -مجموعه-عکس -macc-4 -macc-8 -مپک
-mno-pack پرچم های mno -mcond-move -mno-cond-move -moptimize-membar
-mno-optimize-membar -mscc -mno-scc -mcond-exec -mno-cond-exec -mvliw-branch
-mno-vliw-branch -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec
-mno-nested-cond-exec -mtomcat-stats -mTLS -mtls -mcpu=پردازنده
گنو / لینوکس گزینه -mglibc - muclibc -مبیونیک -ماندروید -tno-android-cc -tno-android-ld
H8 / 300 گزینه -آرامش کن -mh -اماس - دقیقه -مکسر -mno-exr -mint32 -بدخیم-300
HPPA گزینه -مارس=نوع معماری -mdisable-fpregs -ندار-نشانگر
-mfast-غیر مستقیم-تماس -mgas -mgnu-ld -mhp-ld -Mfixed-Range =محدوده ثبت نام
-mjump-in-delay -mlinker-opt تماس های طولانی -mlong-load-store -mno-disable-fpregs
-mno-disable-indexing -تماس های غیرمستقیم-منو-سریع -منو گاز -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 قابل حمل - زمان اجرا
-mschedule=نوع cpu -mspace-regs -msio -mwsio -munix=unix-std -nolibdld -استاتیک
-موضوعات
i386 و x86-64 گزینه -mtune=نوع cpu -مارس=نوع cpu -mtune-ctrl=لیست ویژگی
ویژگی های mdump-tune -mno-default -mfpmath=واحد -masm=گویش -mno-fancy-math-387
-mno-fp-ret-in-387 -msoft-float -mno-wide-multiply -mrtd بدخیم-دوبرابر
-mpreferred-stack-boundary=تعداد -mincoming-stack-boundary=تعداد -mcld -mcx16 -مصحف
-mmovbe -mcrc32 -مندی -mrecip=انتخاب کردن -mvzeroupper -mprefer-avx128 -mmmx -msse -msse2
-msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx -mavx2 -mavx512f -mavx512pf -mavx512er
-mavx512cd -مشا -میس -mpclmul -mfsgsbase -مردرند -mf16c -mfma -mprefetchwt1 -msse4a
-m3dnow -mpopcnt -mabm -mbmi -MTBM -mfma4 -mxop -mlzcnt -mbmi2 -mfxsr -mxsave
-mxsaveopt -mrtm -mlwp -mthreads -منهای متناوب -minline-all-stringops
-minline-stringops-به صورت پویا -mstringop-strategy=جلبک -mmemcpy-strategy=استراتژی
-mmemset-strategy=استراتژی -mpush-args انباشته-خروجی-آرگ
-m128bit-long-double -m96bit-long-double -mlong-double-64 -mlong-double-80
-mlong-double-128 -mregparm =تعداد -msseregparm -mveclibabi=نوع -mvect8-ret-in-mem
-mpc32 -mpc64 -mpc80 -mstackrealign -momit-leaf-frame-pointer -mno-red-zone
-mno-tls-direct-seg-refs -mcmodel=کد-مدل -mabi=نام -maddress-mode=حالت -32 -64
-mx32 -16 -mlarge-data-threshold=تعداد -msse2avx -mfentry -m8bit-idiv
-mavx256-split-unaligned-load -mavx256-split-unaligned-store
-mstack-protector-guard=گارد
i386 و x86-64 ویندوز گزینه -mconsole -mcygwin -mno-cygwin -mdll
-mnop-fun-dllimport -mthread -مونیکد -mwin32 -mwindows -fno-set-stack-executable
IA-64 گزینه -mbig-endian -mlittle-endian -mgnu-as-as -mgnu-ld -mno-pic
-mvolatile-asm-stop -mregister-names -msdata -mno-sdata -mconstant-gp -عکس خودکار
-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 -stop-bits
-Mfixed-Range =محدوده ثبت نام -mtls-size=اندازه tls -mtune=نوع cpu -milp32 -mlp64
-msched-br-data-spec -msched-ar-da-spec -msched-control-spec -msched-br-in-data-spec
-msched-ar-in-da-spec -msched-in-control-spec -msched-spec-ldc
-msched-spec-control-ldc -msched-prefer-non-data-spec-insns
-msched-prefer-non-control-spec-insns -msched-stop-bits-after- every-cycle
-msched-count-spec-in-critical-path -msel-sched-dont-check-control-spec
-msched-fp-mem-deps-zero-cost -msched-max-memory-insns-hard-limit
-msched-max-memory-insns=max-insns
LM32 گزینه -barrel-shift-enabled -mdivide-enabled -Multiply-enabled
-msign-extend-enabled -muser-enabled
M32R/D گزینه -m32r2 -m32rx -m32r -mdebug -حلقه های بدخیم -mno-align-loops
-missue-rate=عدد -branch-cost=عدد -mmodel=کد-اندازه-مدل-نوع -msdata=sdata-
نوع -mno-flush-func -mflush-func=نام -mno-flush-trap -mflush-trap=عدد -G تعداد
M32C گزینه -mcpu=پردازنده -msim -memregs=عدد
M680x0 گزینه -مارس=قوس -mcpu=پردازنده -mtune=اهنگ -68000 -68020 -m68020-40
-m68020-60 -68030 -68040 -68060 -mcpu32 -5200 -m5206e -m528x -5307 -5407
-mcfv4e -mbitfield -منو بیتفیلد -mc68000 -mc68020 -mnobitfield -mrtd -mno-rtd
-mdiv -mno-div -mshort -mno-کوتاه -mhard-float -68881 -msoft-float -mpcrel
بدخیم -mstrict-align -msep-data -mno-sep-data -mshared-library-id=n
-کتابخانه مشترک -mno-id-shred-library -mxgot -mno-xgot
MCore گزینه -mhardlit -mno-hardlit -mdiv -mno-div -mrelax- فوری
-mno-relax-فوراً -mwide-bitfields -mno-wide-bitfields -m4byte-توابع
-mno-4byte-functions -mcalgraph-data -mno-calgraph-data -mslow-bytes
-mno-slow-bytes -mno-lsim -mlittle-endian -mbig-endian -210 -340
-mstack-increment
MeP گزینه -mabsdiff -مرکز خرید -متوسط -mbased =n -mbitops -mc=n -mclip
-mconfig=نام -mcop -mcop32 -mcop64 -mivc2 -mdc -mdiv -meb -مل میکرو فرار میلی لیتر
-mleadz -می -mminmax -ملت -mno-opts -تکرار مجدد -اماس -مساتور -msdram -msim -msimnovec
-mtf -mtiny=n
MicroBlaze گزینه -msoft-float -mhard-float -msmall-divides -mcpu=پردازنده -mmemcpy
-mxl-soft-mul -mxl-soft-div -mxl-barrel-shift -mxl-pattern-compare -mxl-stack-check
-mxl-gp-opt -mno-clearbss -mxl-multiply-high -mxl-float-convert -mxl-float-sqrt
-mbig-endian -mlittle-endian -mxl-reorder -mxl-mode-برنامه-مدل
میپس گزینه -The -EB -مارس=قوس -mtune=قوس -mips1 -mips2 -mips3 -mips4
-mips32 -mips32r2 -mips64 -mips64r2 -mips16 -mno-mips16 -mflip-mips16
-minterlink فشرده شده است -mno-interlink-compressed -minterlink-mips16
-mno-interlink-mips16 -mabi=ابی -Mabiccals -mno-abicals -mshared -mno-اشتراک گذاری شده
-mplt -mno-plt -mxgot -mno-xgot -mgp32 -mgp64 -mfp32 -mfp64 -mhard-float
-msoft-float -mno-float چند شناور -mdouble-float -mabs=حالت -mnan=پشتیبانی می کند
-mdsp -mno-dsp -mdspr2 -mno-dspr2 -mmcu -mmno-mcu -موا -mno-eva -mvirt -mno-virt
-mmicromips -mno-micromips -mfpu=نوع fpu -msmartmips -mno-smartmips -مقابل-مجرد
-mno-paired-single -mdmx -mno-mdmx -mips3d -mno-mips3d -mmt -mno-mt -mlsc
-mno-llsc -mlong64 -mlong32 -msym32 -mno-sym32 -Gتعداد -mlocal-sdata
-mno-local-sdata -مترن-سیتا -mno-extern-sdata -mgpopt -mno-gopt داده های عضو شده
-mno-embedded-data -muninit-const-in-rodata -mno-unit-const-in-rodata
-mcode-readable=محیط -msplit-addresss -mno-split-addresss -mexplicit-relocs
-mno-explicit-relocs -mcheck-zero-division -mno-check-zero-division -mdivide-traps
-mdivide- breaks -mmemcpy -mno-memcpy تماس های طولانی -mno-long-تماس -ممم -mno-mad
-میمد -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
-branch-cost=تعداد -شاخه محتمل -mno-branch- احتمال دارد -mfp-exceptions
-mno-fp-exceptions -mvr4130-align -mno-vr4130-align -msynci -mno-synci
-mrelax-pic-calls -تماسهای mno-relax-pic -mmcount-ra-address
MMIX گزینه -mlibfuncs -mno-libfuncs -مپسیلون -mno-epsilon -mabi=gnu
-mabi=mmixware -mzero-extend -mknuthdiv -mtoplevel-symbols -ملف -شاخه-پیش بینی
-mno-branch-predict -آدرس های mbase -mno-base-addresss چند خروجی
-mno-single-exit
MN10300 گزینه -mult-bug -mno-mult-bug -mno-am33 -mam33 -mam33-2 -mam34 -mtune=cpu-
نوع -mreturn-pointer-on-d0 -mno-crt0 -آرامش کن -mliw -msetlb
مکسی گزینه -meb -مل -mno-crt0
MSP430 گزینه -msim -masm-hex -mmcu= -mcpu= -بزرگ - کوچک -آرامش کن -mhwmult= -minrt
NDS32 گزینه -mbig-endian -mlittle-endian -کاهش-regs -mfull-regs -mcmov -mno-cmov
-mperf-ext -mno-perf-extext -mv3push -mno-v3push -m16bit -mno-16bit -mgp-direct
-mno-gp-direct -misr-vector-size=تعداد -mcache-block-size=تعداد -مارس=قوس
-mforce-fp-as-gp -mforbid-fp-as-gp -mex9 -mctor-dtor -آرامش کن
نیوس II گزینه -G تعداد -mgpopt -mno-gpopt -مل -meb -mno-bypass-cache -mbypass-cache
-mno-cache-volatile -mcache-volatile -mno-fast-sw-div -mfast-sw-div -mhw-mul
-mno-hw-mul -mhw-mulx -mno-hw-mulx -mno-hw-div -mhw-div -عادی-insn=N
-mno-custom-insn -mcustom-fpu-cfg=نام -محل -msmallc -msys-crt0=نام -msys-lib=نام
PDP-11 گزینه -mfpu -msoft-float -mac0 -mno-ac0 -40 -45 -10 -mbcopy
-mbcopy-builtin -mint32 -mno-int16 -mint16 -mno-int32 -mfloat32 -mno-float64
-mfloat64 -mno-float32 -مبشی -mno-abshi -شاخه گران است -شاخه-ارزان
-munix-asm -mdec-asm
پیکو چیپ گزینه -mae=ae_type -mvliw-lookahead=N -symbol-as-address
-mno-inefficient-warnings
PowerPC گزینه به گزینه های RS/6000 و PowerPC مراجعه کنید.
RL78 گزینه -msim -mmul=هیچ -mmul=g13 -mmul=rl78
RS / 6000 و PowerPC گزینه -mcpu=نوع cpu -mtune=نوع cpu -mcmodel=کد-مدل
-mpowerpc64 -مالتیفک -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-cmbb -mmfpgpr -mno-mfpgpr
-mhard-dfp -mno-hard-dfp -mfull-toc -mminimal-toc -mno-fp-in-toc -mno-sum-in-toc
-64 -32 -mxl-compat -MNO-XL-COMPAT -mpe قدرت بدخیم -بدخیم-طبیعی
-msoft-float -mhard-float -چندین -mno-چند چند شناور -mdouble-float
-msimple-fpu -mstring -mno-string -به روز رسانی -mno-update -mavoid-index-addresss
-mno-ouced-indexed-Addresses -mfused-madd -mno-fused-madd -bit-align
mno-bit-align -mstrict-align -mno-strict-align -قابل جابجایی -mno-replaceable
-mrelocatable-lib -mno-relocatable-lib -mtoc -mno-toc -کم -mlittle-endian
-بزرگ -mbig-endian -mdynamic-no-pic -مالتیفک -mswdiv -msingle-pic-base
-mprioritize-restricted-insns=اولویت -msched-costly-dep=نوع_وابستگی
-minsert-sched-nops=طرح -mcall-sysv -mcall-netbsd -maix-struct-return
-msvr4-struct-return -mabi=ابی نوع -msecure-plt -mbss-plt
-mblock-move-inline-limit=تعداد -میزل -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=no
-mfloat-gprs=تک -mfloat-gprs=دوبل - نمونه اولیه -mno-نمونه اولیه -msim -mmvme
دیوانه ها -چاقوی میلو -عضو -msdata -msdata=انتخاب کردن -mvxworks -G تعداد - نخ -مندی
-mrecip=انتخاب کردن -mno-recip -mrecip-precision -MNO-REPRIAL-DRECISION -mveclibabi=نوع -مفریز
-mno-friz توابع -mpointers-to-nested -mno-pointers-to-nested-functions
-msave-toc-indirect -mno-save-toc-intrect -power8-fusion -mno-mpower8-fusion
-power8-وکتور -mno-power8-وکتور -mcrypto -mno-crypto -mdirect-move -mno-direct-move
-mquad-memory -mno-quad-memory -mquad-memory-atomic -mno-quad-memory-atomic
-mcompat-align-parm -mno-compat-align-parm
RX گزینه -m64bit-دبل -m32bit-دبل -fpu -nofpu -mcpu= -MBIG-ANDIAN-DATA
داده های کوچک انددیان -msmall-data -msim -mno-sim -mas100-syntax -mno-as100-syntax
-آرامش کن -mmax-constant-size= -mint-register= -بی حال -mno-warn-multiple-fast-interrupts
-مساوه-در مداخلات
S / 390 و سری z گزینه -mtune=نوع cpu -مارس=نوع cpu -mhard-float -msoft-float
-mhard-dfp -mno-hard-dfp -mlong-double-64 -mlong-double-128 - زنجیره پشتی
-mno-backchain -mpacked-stack -mno-packed-stack -msmall-exec -mno-small-exec
-mmvcle -mno-mvcle -64 -31 -mdebug -mno-debug -مسا -مزارچ -mtpf-trace
-MNO-TPF-TRACE -mfused-madd -mno-fused-madd -mwarn-framesize -mwarn-dynamicstack
-mstack-size -mstack-guard -mhotpatch=نیمه کلمات,نیمه کلمات
نمره گزینه -meb -مل -mnhwloop -مولس -mmac -mscore5 -mscore5u -mscore7 -mscore7d
SH گزینه -1 -2 -m2e -m2a-nofpu -m2a-تنها -m2a-تک -m2a -3 -m3e
-m4-nofpu -m4-تنها -m4-تک -4 -m4a-nofpu -m4a-تنها -m4a-تک
-m4a -m4al -m5-64media -m5-64media-nofpu -m5-32media -m5-32media-nofpu -m5-compact
-M5-compact-nofpu -MB میلی لیتر -mdalign -آرامش کن بزرگ -mfmovd -میتاچی -مرنساس
-mno-renesas -mnomacsave -مییی -mno-ieee -mbitops -نادرست کردن -minline-ic_invalidate
-mpadstruct -mspace ترجیح دادن -musermode -MultCost =عدد -mdiv=استراتژی
-mdivsi3_libfunc=نام -Mfixed-Range =محدوده ثبت نام -مخاطبی-مخاطبی
-mgettrcost=عدد -mpt-fixed انباشته-خروجی-آرگ -منهای نمادین
-matomic-model=مدل اتمی -branch-cost=تعداد -mzdcbranch -mno-zdcbranch -mfused-madd
-mno-fused-madd -mfsca -mno-fsca -mfsrra -mno-fsrra وانمود کردن - حرکت کردن -متاس
سولاریس 2 گزینه -mclear-hwcap -mno-clear-hwcap -متن ناخالص -mno-npure-text
- نخ ها - نخ
SPARC گزینه -mcpu=نوع cpu -mtune=نوع cpu -mcmodel=کد-مدل -mmmory-model=یادداشت-
مدل -32 -64 -mapp-regs -mno-app-regs -mfaster-structs -mno-faster-structs
-mflat -mno-flat -mfpu -mno-fpu -mhard-float -msoft-float -مارد-طبقه شناور
-msoft-quad-float -mstack-bias -mno-stack-bias دوبل
-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
SPS گزینه -mwarn-reloc -mirror-reloc -msafe-dma -munsafe-dma -شاخه-اشاره
-msmall-mem -mlarge-mem -mstdmain -Mfixed-Range =محدوده ثبت نام -mea32 -mea64
-مدرس-فضا-تبدیل mno-address-space-conversion -Mcache size =اندازه حافظه پنهان
-به روز رسانی های matomic به روز رسانی های mno-atomic
سیستم V گزینه -کی -Qn -YP،راه ها -ایم،دیر
TILE-Gx گزینه -mcpu=CPU -32 -64 -mbig-endian -mlittle-endian -mcmodel=کد-مدل
TILEPro گزینه -mcpu=پردازنده -32
V850 گزینه تماس های طولانی -mno-long-تماس -مپ -mno-ep -mprolog-function
-mno-prolog-function -mspace -mtda=n -msda=n -مزدا=n -mapp-regs -mno-app-regs
-mdisable-call -mno-disable-call -mv850e2v3 -MV850E2 -MV850E1 -mv850s -mv850e
-mv850 -mv850e3v5 -mloop -آرامش کن -پرش های بلند -msoft-float -mhard-float -mgcc-abi
-mrh850-abi سوئیچ -mbig
VAX گزینه -میلی گرم -mgnu -munix
VMS گزینه -mvms-return-codes -mdebug-main=پیشوند -mmalloc64 -mpointer-size=اندازه
VxWorks گزینه -MRTP -غیر ساکن -Bstatic -بی دینامیک -Xbind-تنبل -Xbind-اکنون
x86-64 گزینه به گزینه های i386 و x86-64 مراجعه کنید.
Xstormy16 گزینه -msim
Xtensa گزینه -mconst16 -mno-const16 -mfused-madd -mno-fused-madd -mforce-no-pic
-mserialize-volatile -mno-serialize-volatile -مکس-لیترال
-mno-text-literals -Mtarget-Aligget -mno-target-align -mlong calls
-mno-long calls
سری z گزینه S/390 و zSeries Options را ببینید.
رمز نسل گزینه
-fcall-saved-REG -fcall-استفاده شده-REG -تثبیت شده-REG - استثنائات -fnon-call-exceptions
-fdelete-dead-exceptions -funwind-جدول جداول -فاسینکرون-باز کردن -fno-gnu-unique
-finhibit-size-directive -فشار-توابع
-Finstrument-Functions-Function-Function-List =همزاد,همزاد، ...
-Finstrument-Functions- لیست-فایل-لیست =پرونده,پرونده، ... -fno-common -fno-ident
-fpcc-struct-return -fpic -fPIC -fpie -fPIE -Fno-Jump-Table -فرکورد-gcc-سوئیچ
-Freg-struct-return -fshort-enums -fshort-double -fshort-wchar -fverbose-asm
-fpack-struct[=n] -fstack-check -fstack-limit-register=REG -fstack-limit-symbol=همزاد
-fno-stack-limit -fsplit-stack -فرار-برآمده -ftls-model=مدل
-fstack-reuse=استفاده مجدد -FTRAPV -fwrapv -fbounds-بررسی -قابلیت مشاهده
-fstrict-volatile-bitfields -fsync-libcalls
گزینه کنترل la نوع of تولید
کامپایل می تواند تا چهار مرحله را شامل شود: پیش پردازش، کامپایل مناسب، مونتاژ و
پیوند دادن، همیشه به همین ترتیب. GCC قادر به پیش پردازش و کامپایل چندین مورد است
فایل ها یا در چندین فایل ورودی اسمبلر، یا در یک فایل ورودی اسمبلر. سپس
هر فایل ورودی اسمبلر یک فایل شی تولید می کند و پیوند دادن تمام شی را ترکیب می کند
فایل ها (آنهایی که به تازگی کامپایل شده اند و آنهایی که به عنوان ورودی مشخص شده اند) در یک فایل اجرایی.
برای هر فایل ورودی داده شده، پسوند نام فایل تعیین می کند که چه نوع کامپایل است
انجام شده:
پرونده.c
کد منبع C که باید از قبل پردازش شود.
پرونده.i
کد منبع C که نباید از قبل پردازش شود.
پرونده.ii
کد منبع C++ که نباید از قبل پردازش شود.
پرونده.m
کد منبع Objective-C. توجه داشته باشید که باید با libobjc کتابخانه برای ساختن
کار برنامه Objective-C.
پرونده.mi
کد منبع Objective-C که نباید از قبل پردازش شود.
پرونده.mm
پرونده.M
کد منبع Objective-C++. توجه داشته باشید که باید با libobjc کتابخانه برای ساختن
یک برنامه Objective-C++ کار می کند. توجه داشته باشید که .M به حروف بزرگ M اشاره دارد.
پروندهmii
کد منبع Objective-C++ که نباید از قبل پردازش شود.
پرونده.h
فایل هدر C، C++، Objective-C یا Objective-C++ به یک فایل از پیش کامپایل شده تبدیل شود.
هدر (پیشفرض)، یا فایل هدر C، C++ برای تبدیل شدن به مشخصات Ada (از طریق
-fdump-ada-spec تعویض).
پرونده. رونوشت
پرونده.cp
پروندهcxx
پروندهcpp
پرونده.CPP
پروندهc++
پرونده.C
کد منبع C++ که باید از قبل پردازش شود. توجه داشته باشید که در cxx، دو حرف آخر
هر دو باید به معنای واقعی کلمه باشند x. به همین ترتیب، .C به حرف بزرگ C اشاره دارد.
پرونده.mm
پرونده.M
کد منبع Objective-C++ که باید از قبل پردازش شود.
پروندهmii
کد منبع Objective-C++ که نباید از قبل پردازش شود.
پروندههه
پرونده.H
پرونده.hp
پروندهhxx
پروندهhpp
پرونده.hpp
پرونده.h++
پروندهtcc
فایل هدر C++ به یک هدر از پیش کامپایل شده یا مشخصات Ada تبدیل شود.
پرونده.f
پرونده.برای
پروندهftn
کد منبع فرترن که نباید از قبل پردازش شود.
پرونده.F
پرونده.برای
پروندهfpp
پرونده.FPP
پرونده.FTN
کد منبع فرترن فرم ثابت که باید از قبل پردازش شود (با نسخه سنتی
پیش پردازنده).
پروندهf90
پروندهf95
پروندهf03
پروندهf08
کد منبع رایگان فرم فرترن که نباید از قبل پردازش شود.
پرونده.F90
پرونده.F95
پرونده.F03
پرونده.F08
فرم رایگان کد منبع فرترن که باید از قبل پردازش شود (با نسخه سنتی
پیش پردازنده).
پروندهبرو
برو کد منبع
پرونده.آد
فایل کد منبع Ada که حاوی یک اعلامیه واحد کتابخانه است (اعلامیه a
بسته، زیربرنامه، یا عمومی، یا یک نمونه عمومی)، یا یک واحد کتابخانه
اعلامیه تغییر نام (اعلام تغییر نام بسته، عمومی یا زیربرنامه). چنین
فایل ها نیز نامیده می شوند مشخصات.
پرونده.ادب
فایل کد منبع Ada حاوی بدنه واحد کتابخانه (یک زیربرنامه یا بدنه بسته).
چنین فایل هایی نیز نامیده می شوند بدن.
پرونده.d
فایل کد منبع D.
پرونده.di
فایل کد رابط D.
پرونده.DD
فایل کد اسناد D.
پرونده.s
کد اسمبلر
پرونده.S
پرونده.sx
کد اسمبلر که باید از قبل پردازش شود.
دیگر
یک فایل شی که مستقیماً به پیوند داده می شود. هر نام فایل بدون شناسایی
پسوند به این صورت رفتار می شود.
شما می توانید زبان ورودی را به صراحت با -x گزینه:
-x زبان
را به صراحت مشخص کنید زبان برای فایل های ورودی زیر (به جای اجازه دادن به
کامپایلر یک پیش فرض را بر اساس پسوند نام فایل انتخاب می کند). این گزینه برای همه اعمال می شود
فایل های ورودی را تا بعدی دنبال کنید -x گزینه. مقادیر ممکن برای زبان هستند:
c-header cpp-output
c++ c++-header c++-cpp-output
هدف-c هدف-c-هدر هدف-c-cpp-خروجی
هدف-c++ هدف-c++-هدر هدف-c++-cpp-خروجی
اسمبلر اسمبلر-با-cpp
ADA
d
f77 f77-cpp-ورودی f95 f95-cpp-ورودی
go
جاوه
-x هیچ
هر گونه مشخصات یک زبان را خاموش کنید تا فایل های بعدی مدیریت شوند
با توجه به پسوندهای نام فایل آنها (همانطور که هستند -x اصلا استفاده نشده است).
کدهای عبور-خروج
به طور معمول gcc در صورت بازگشت هر مرحله از کامپایلر، برنامه با کد 1 خارج می شود
یک کد بازگشت ناموفق اگر مشخص کنید کدهای عبور-خروجاز gcc در عوض برنامه
با بالاترین عدد خطای تولید شده توسط هر فازی که خطا را برمی گرداند، برمی گردد
نشانه در صورت بروز خطای کامپایلر داخلی، قسمت جلویی C، C++ و Fortran عدد 4 را برمیگرداند
مواجه می شود.
اگر فقط برخی از مراحل تدوین را می خواهید، می توانید استفاده کنید -x (یا پسوند نام فایل)
گفتن gcc از کجا شروع کنیم و یکی از گزینه ها -c, -S، یا -E برای گفتن کجا gcc به
متوقف کردن. توجه داشته باشید که برخی از ترکیبات (به عنوان مثال، -x CPP-output -E) دستور دهید gcc به انجام
اصلا هیچی
-c فایل های منبع را کامپایل یا مونتاژ کنید، اما پیوند ندهید. مرحله پیوند به سادگی است
انجام نشده. خروجی نهایی به شکل یک فایل شی برای هر فایل منبع است.
به طور پیش فرض، نام فایل شی برای یک فایل منبع با جایگزینی پسوند ساخته می شود .c,
.i, .sو غیره با .o.
فایل های ورودی شناسایی نشده، که نیازی به کامپایل یا مونتاژ ندارند، نادیده گرفته می شوند.
-S توقف پس از مرحله تدوین مناسب. مونتاژ نکنید خروجی در
فرم یک فایل کد اسمبلر برای هر فایل ورودی غیر اسمبلر مشخص شده است.
به طور پیش فرض، نام فایل اسمبلر برای یک فایل منبع با جایگزینی پسوند ساخته می شود
.c, .iو غیره با .s.
فایل های ورودی که نیازی به کامپایل ندارند نادیده گرفته می شوند.
-E توقف پس از مرحله پیش پردازش؛ کامپایلر را به درستی اجرا نکنید. خروجی در است
فرم کد منبع از پیش پردازش شده، که به خروجی استاندارد ارسال می شود.
فایل های ورودی که نیازی به پیش پردازش ندارند نادیده گرفته می شوند.
-o پرونده
خروجی را در فایل قرار دهید پرونده. این در مورد هر نوع خروجی که تولید می شود صدق می کند،
خواه یک فایل اجرایی، یک فایل شی، یک فایل اسمبلر یا C از پیش پردازش شده باشد
کد
If -o مشخص نشده است، پیش فرض قرار دادن یک فایل اجرایی است a.out، شیء
پرونده برای منبع.پسوند in منبع.o، فایل اسمبلر آن در منبع.s، از پیش کامپایل شده
فایل هدر در منبع.پسوند.gchو تمام منبع C از پیش پردازش شده در خروجی استاندارد.
-v چاپ (در خروجی خطای استاندارد) دستورات اجرا شده برای اجرای مراحل
تلفیقی. همچنین شماره نسخه برنامه درایور کامپایلر و نسخه را چاپ کنید
پیش پردازنده و کامپایلر مناسب
-###
پسندیدن -v به جز اینکه دستورات اجرا نمی شوند و آرگومان ها نقل قول می شوند مگر اینکه آنها را انجام دهند
فقط شامل کاراکترهای الفبایی یا "./-_" باشد. این برای اسکریپت های پوسته مفید است
خطوط فرمان تولید شده توسط راننده را ضبط کنید.
لوله
برای ارتباط بین مراحل مختلف به جای فایل های موقت از لوله ها استفاده کنید
تلفیقی. این در برخی از سیستم هایی که اسمبلر قادر به خواندن نیست کار نمی کند
از یک لوله؛ اما اسمبلر گنو مشکلی ندارد.
--کمک
چاپ (روی خروجی استاندارد) شرحی از گزینه های خط فرمان که توسط آنها قابل درک است
gcc. اگر -v سپس گزینه نیز مشخص می شود --کمک به انواع مختلف نیز منتقل می شود
فرآیندهای فراخوانی شده توسط gcc، به طوری که آنها می توانند گزینه های خط فرمان خود را نمایش دهند
تایید کنید. اگر -وکسترا گزینه نیز مشخص شده است (قبل از --کمک گزینه)،
سپس گزینه های خط فرمان که هیچ سندی با آنها مرتبط نیست نیز هستند
نمایش داده.
--هدف-کمک
چاپ (روی خروجی استاندارد) شرح گزینه های خط فرمان خاص هدف
برای هر ابزار برای برخی از اهداف، ممکن است اطلاعات اضافی مربوط به هدف نیز وجود داشته باشد
چاپ شده.
--help={کلاس|[^]مقدماتی}[، ...]
چاپ (روی خروجی استاندارد) شرحی از گزینه های خط فرمان که توسط آنها قابل درک است
کامپایلری که در تمام کلاس ها و واجد شرایط قرار می گیرد. اینها هستند
کلاس های پشتیبانی شده:
بهینه سازها
نمایش تمام گزینه های بهینه سازی پشتیبانی شده توسط کامپایلر.
هشدارها
نمایش تمام گزینه های کنترل کننده پیام های هشدار تولید شده توسط کامپایلر.
هدف
نمایش گزینه های خاص هدف بر خلاف --هدف-کمک گزینه با این حال، هدف-
گزینه های خاص پیوند دهنده و اسمبلر نمایش داده نمی شود. این به دلیل این هست که
این ابزارها در حال حاضر توسعه یافته را پشتیبانی نمی کنند --کمک= نحو.
پارام ها
نمایش مقادیر شناسایی شده توسط --پارام گزینه.
زبان
نمایش گزینه های پشتیبانی شده برای زبان، که در آن زبان نام یکی از
زبان های پشتیبانی شده در این نسخه از GCC.
مشترک
نمایش گزینه هایی که در همه زبان ها مشترک است.
اینها واجد شرایط پشتیبانی شده هستند:
بدون ثبت نام
فقط آن دسته از گزینه هایی را نمایش دهید که بدون سند هستند.
پیوست
نمایش گزینه هایی که آرگومان را پس از علامت مساوی در همان آرگومان نشان می دهد
متن پیوسته، مانند: --help=هدف.
جداگانه
نمایش گزینه هایی که آرگومان هایی را در نظر می گیرند که به عنوان یک کلمه جداگانه در زیر نشان داده می شود
گزینه اصلی، مانند: -o فایل خروجی.
بنابراین برای مثال برای نمایش تمام سوئیچ های غیرمستند خاص هدف پشتیبانی شده توسط
کامپایلر، استفاده کنید:
--help=هدف، بدون سند
حس یک واجد شرایط را میتوان با پیشوند آن برعکس کرد ^ شخصیت، بنابراین برای
مثال برای نمایش همه گزینه های هشدار باینری (یعنی آنهایی که روشن یا خاموش هستند
و که استدلال نمی گیرند) که دارای توصیف هستند، از:
--help=warnings,^joined,^undocumented
استدلال به --کمک= نباید فقط از وارونه های وارونه تشکیل شود.
ترکیب چندین کلاس ممکن است، اگرچه این معمولاً خروجی را محدود می کند
چیز زیادی برای نمایش وجود ندارد. با این حال، یکی از مواردی که کار می کند، زمانی است
یکی از کلاس ها است هدف. به عنوان مثال، برای نمایش تمام اهداف خاص
گزینه های بهینه سازی، استفاده از:
--help=هدف،بهینه سازها
La --کمک= گزینه را می توان در خط فرمان تکرار کرد. هر استفاده متوالی نمایش داده می شود
کلاس از گزینه های درخواستی آن، از گزینه هایی که قبلاً نمایش داده شده اند صرفنظر می کند.
اگر -Q گزینه قبل از خط فرمان در خط فرمان ظاهر می شود --کمک= گزینه، سپس
متن توصیفی نمایش داده شده توسط --کمک= تغییر کرده است. به جای توصیف نمایش داده شده
گزینه ها، نشانه ای مبنی بر فعال بودن، غیرفعال بودن یا تنظیم بودن گزینه داده می شود
به یک مقدار خاص (با فرض اینکه کامپایلر این را در نقطه ای که
--کمک= گزینه استفاده می شود).
در اینجا یک نمونه کوتاه از پورت ARM آمده است gcc:
% gcc -Q -mabi=2 --help=target -c
گزینه های زیر مختص هدف هستند:
-mabi= 2
-mabort-on-noreturn [غیرفعال]
-mapcs [غیرفعال]
خروجی به اثرات گزینه های خط فرمان قبلی حساس است، بنابراین برای
به عنوان مثال می توان فهمید که در کدام بهینه سازی فعال شده است -O2 با استفاده از:
-Q -O2 --help=بهینه سازها
یا می توانید کشف کنید که کدام بهینه سازی های باینری توسط کدام فعال می شوند -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 فعال شد
-بدون پیشوندهای متعارف
هیچ پیوند نمادینی را گسترش ندهید، ارجاعات را حل کنید /../ or /./، یا مسیر را بسازید
مطلق هنگام ایجاد یک پیشوند نسبی.
- نسخه
نمایش شماره نسخه و حق نسخه برداری GCC مورد استناد.
لفاف
همه دستورات فرعی را تحت یک برنامه wrapper فراخوانی کنید. نام برنامه wrapper و
پارامترهای آن به عنوان یک لیست جدا شده با کاما ارسال می شود.
gcc -c tc -wrapper gdb,--args
این همه زیربرنامه های را فراخوانی می کند gcc زیر gdb --آرگس، بنابراین فراخوانی از cc1 is
gdb --آرگس cc1 ....
-fplugin=نام.بنابراین
کد افزونه را در فایل بارگیری کنید نام.so، فرض می شود که یک شی مشترک است که باید توسط آن حذف شود
کامپایلر از نام پایه فایل شی مشترک برای شناسایی افزونه استفاده می شود
برای اهداف تجزیه آرگومان (نگاه کنید به -fplugin-arg-نام-کلید=ارزش زیر). هر یک
افزونه باید توابع پاسخ به تماس مشخص شده در Plugins API را تعریف کند.
-fplugin-arg-نام-کلید=ارزش
یک آرگومان به نام تعریف کنید کلید با مقدار ارزش برای افزونه به نام نام.
-fdump-ada-spec[-سلیم]
برای منبع C و C++ و شامل فایلها، مشخصات Ada مربوطه را ایجاد کنید.
-fada-spec-parent=واحد
در رابطه با -fdump-ada-spec[-سلیم] در بالا، مشخصات Ada را به عنوان واحدهای فرزند تولید کنید
پدر یا مادر واحد.
-fdump-go-spec=پرونده
برای فایل های ورودی به هر زبانی، اعلان های Go مربوطه را در آن ایجاد کنید پرونده. این
اعلان های Go "const"، "type"، "var" و "func" را تولید می کند که ممکن است راه مفیدی باشد.
برای شروع نوشتن رابط Go برای کد نوشته شده به زبان دیگری.
@پرونده
گزینه های خط فرمان را از پرونده. گزینه های خوانده شده به جای گزینه درج می شوند
اصلی @پرونده گزینه. اگر پرونده وجود ندارد، یا نمی توان آن را خواند، پس گزینه
به معنای واقعی کلمه رفتار خواهد شد و حذف نخواهد شد.
گزینه ها در پرونده با فضای خالی از هم جدا می شوند. ممکن است یک کاراکتر فضای خالی گنجانده شود
در یک گزینه با احاطه کردن کل گزینه به صورت تک یا دو گیومه. هر
کاراکتر (از جمله بک اسلش) ممکن است با پیشوند کردن کاراکتر to be گنجانده شود
همراه با اسلش. در پرونده ممکن است خود حاوی @ اضافی باشدپرونده گزینه ها؛ هر
چنین گزینه هایی به صورت بازگشتی پردازش می شوند.
تدوین ++C برنامه ها
فایل های منبع C++ به طور معمول از یکی از پسوندها استفاده می کنند .C, . رونوشت, cpp, .CPP, c++, .cp، یا
cxx; فایل های هدر C++ اغلب استفاده می شود هه, hpp, .H، یا (برای کد الگوی مشترک) tccو
فایل های C++ از پیش پردازش شده از پسوند استفاده می کنند .ii. GCC فایل هایی با این نام ها و
آنها را به عنوان برنامه های C++ کامپایل می کند حتی اگر کامپایلر را به همان روشی که برای کامپایل فراخوانی می شود، فراخوانی کنید
برنامه های C (معمولا با نام gcc).
با این حال ، استفاده از gcc کتابخانه ++C را اضافه نمی کند. g ++ برنامه ای است که GCC و
به طور خودکار پیوند در برابر کتابخانه C++ را مشخص می کند. درمان می کند .c, .h و .i فایل ها به عنوان
فایل های منبع C++ به جای فایل های منبع C، مگر اینکه -x استفاده می شود. این برنامه نیز مفید است
هنگام پیش کامپایل کردن یک فایل هدر C با a .h پسوند برای استفاده در کامپایل های ++C. بر
بسیاری از سیستم ها، g ++ همچنین با نام نصب شده است c ++.
هنگامی که برنامه های C++ را کامپایل می کنید، ممکن است بسیاری از گزینه های خط فرمان مشابه را مشخص کنید
شما برای کامپایل برنامه ها به هر زبانی استفاده می کنید. یا گزینه های خط فرمان معنی دار برای C
و زبان های مرتبط یا گزینه هایی که فقط برای برنامه های ++C معنی دارند.
گزینه کنترل C گفتار
گزینه های زیر گویش C (یا زبان های مشتق شده از C مانند C++ را کنترل می کنند،
Objective-C و Objective-C++) که کامپایلر می پذیرد:
-ansi
در حالت C، این معادل است -std=c90. در حالت C++ معادل است با
-std = C ++ 98.
این کار برخی از ویژگیهای GCC را که با ISO C90 ناسازگار هستند خاموش میکند (زمانی که
کامپایل کردن کد C)، یا C++ استاندارد (هنگام کامپایل کد C++)، مانند "asm" و
کلمات کلیدی "نوع" و ماکروهای از پیش تعریف شده مانند "unix" و "vax" که
نوع سیستمی که استفاده می کنید همچنین ISO نامطلوب و به ندرت استفاده شده را فعال می کند
ویژگی سه گراف برای کامپایلر C، تشخیص سبک C++ را غیرفعال می کند //
نظرات و همچنین کلمه کلیدی "داخلی".
کلیدواژه های جایگزین "__asm__"، "__extension__"، "__inline__" و "__typeof__"
با وجود -ansi. شما نمی خواهید از آنها در یک برنامه ISO C استفاده کنید،
البته، اما قرار دادن آنها در فایل های هدر که ممکن است در آن گنجانده شود مفید است
تلفیقی انجام شده با -ansi. ماکروهای از پیش تعریف شده جایگزین مانند "__unix__" و
"__vax__" نیز با یا بدون موجود است -ansi.
La -ansi این گزینه باعث نمی شود برنامه های غیر ISO به طور بلاعوض رد شوند. برای
که، -پدانتیک لازم است علاوه بر -ansi.
زمانی که ماکرو "__STRICT_ANSI__" از پیش تعریف شده است -ansi گزینه استفاده می شود. مقداری سربرگ
فایلها ممکن است متوجه این ماکرو شوند و از اعلام برخی عملکردها یا تعریف کردن خودداری کنند
ماکروهای خاصی که استاندارد ISO به آنها نیاز ندارد. این برای جلوگیری از دخالت است
با هر برنامه ای که ممکن است از این نام ها برای موارد دیگر استفاده کند.
توابعی که معمولاً ساخته می شوند اما معنایی تعریف شده توسط ISO C ندارند (مانند
به عنوان "alloca" و "ffs") توابع داخلی نیستند زمانی که -ansi استفاده می شود.
-std=
استاندارد زبان را تعیین کنید. این گزینه در حال حاضر فقط زمانی پشتیبانی می شود که
کامپایل C یا C++
کامپایلر می تواند چندین استاندارد پایه را بپذیرد، مانند c90 or c++98، و گویش های گنو
از آن استانداردها، مانند gnu90 or gnu++98. هنگامی که یک استاندارد پایه مشخص می شود،
کامپایلر همه برنامه هایی را که از آن استاندارد پیروی می کنند به اضافه برنامه هایی که از پسوندهای گنو استفاده می کنند می پذیرد
که منافاتی با آن ندارند. مثلا، -std=c90 برخی از ویژگی های GCC را خاموش می کند
که با ISO C90 ناسازگار هستند، مانند کلمات کلیدی "asm" و "typeof"، اما نه
سایر پسوندهای گنو که در ISO C90 معنی ندارند، مانند حذف آن
عبارت میانی یک عبارت "?:". از سوی دیگر، زمانی که یک گویش گنو از یک استاندارد
مشخص شده است، تمام ویژگی های پشتیبانی شده توسط کامپایلر فعال هستند، حتی اگر آن ها
ویژگی ها معنای استاندارد پایه را تغییر می دهند. در نتیجه، برخی از سخت انطباق
ممکن است برنامه ها رد شوند. استاندارد خاص توسط -پدانتیک برای شناسایی
با توجه به آن نسخه استاندارد، کدام ویژگی پسوندهای گنو هستند. مثلا
-std=gnu90 -پدانتیک در مورد سبک C++ هشدار می دهد // نظرات، در حالی که -std=gnu99 -پدانتیک
نمی کند
یک مقدار برای این گزینه باید ارائه شود. مقادیر ممکن هستند
c90
c89
iso9899: 1990
پشتیبانی از همه برنامه های ISO C90 (برخی برنامه های افزودنی گنو که با ISO C90 در تضاد هستند
غیر فعال هستند). مثل -ansi برای کد C
iso9899: 199409
ISO C90 همانطور که در اصلاحیه 1 اصلاح شده است.
c99
c9x
iso9899: 1999
iso9899:199x
ISO C99. این استاندارد بطور قابل ملاحظه ای به طور کامل پشتیبانی می شود، اشکالات ماژول،
شناسه های توسعه یافته (پشتیبانی می شود به جز موارد گوشه ای که
-fextended-identifiers استفاده می شود) و مسائل ممیز شناور (عمدتاً اما نه به طور کامل).
مربوط به ویژگی های اختیاری C99 از پیوست های F و G). دیدن
<http://gcc.gnu.org/c99status.html> برای اطلاعات بیشتر نام ها c9x و
iso9899:199x منسوخ شده اند.
c11
c1x
iso9899: 2011
ISO C11، تجدید نظر در سال 2011 استاندارد ISO C. این استاندارد به طور قابل ملاحظه ای است
به طور کامل پشتیبانی می شود، اشکالات مدولو، شناسه های توسعه یافته (پشتیبانی می شود به جز برای
موارد گوشه ای که -fextended-identifiers استفاده می شود)، مسائل ممیز شناور (عمدتا
اما به طور کامل به ویژگی های اختیاری C11 از ضمیمه های F و G) و
ضمیمه های اختیاری K (واسط های بررسی مرزها) و L (قابلیت تجزیه و تحلیل). نام
c1x منسوخ شده است.
gnu90
gnu89
گویش گنو ISO C90 (شامل برخی از ویژگی های C99). این پیش فرض برای C است
کد
gnu99
gnu9x
گویش گنو ISO C99. نام gnu9x منسوخ شده است.
gnu11
gnu1x
گویش گنو ISO C11. این در نظر گرفته شده است که در آینده به حالت پیش فرض تبدیل شود
انتشار GCC نام gnu1x منسوخ شده است.
c++98
c++03
استاندارد ISO C++ 1998 به علاوه تصحیح فنی 2003 و برخی موارد دیگر
گزارش های نقص مثل -ansi برای کد ++C
gnu++98
gnu++03
گویش گنو از -std = C ++ 98. این کد پیش فرض برای C++ است.
c++11
c++0x
استاندارد ISO C++ 2011 به همراه اصلاحات. نام c++0x منسوخ شده است.
gnu++11
gnu++0x
گویش گنو از -std = C ++ 11. نام gnu++0x منسوخ شده است.
c++1y
بازنگری بعدی استاندارد ISO C++، به طور آزمایشی برای سال 2014 برنامه ریزی شده است. پشتیبانی
بسیار تجربی است و تقریباً به طور قطع به روش های ناسازگاری تغییر خواهد کرد
نسخه های آینده
gnu++1y
گویش گنو از -std=c++1y. پشتیبانی بسیار آزمایشی است و تقریباً انجام خواهد شد
مطمئناً در نسخه های بعدی به روش های ناسازگار تغییر می کند.
-fgnu89-inline
گزینه -fgnu89-inline به شورای همکاری خلیج فارس می گوید که از معنای سنتی گنو برای «داخلی» استفاده کند.
در حالت C99 کار می کند.
این گزینه توسط نسخه های GCC 4.1.3 تا، اما شامل آن، پذیرفته شده و نادیده گرفته می شود
4.3. در نسخه های GCC 4.3 به بعد، رفتار GCC را در حالت C99 تغییر می دهد. استفاده كردن
این گزینه تقریباً معادل افزودن ویژگی تابع "gnu_inline" به همه است
توابع درون خطی
گزینه -fno-gnu89-inline صریحاً به GCC میگوید که از معنای C99 استفاده کند
"inline" در حالت C99 یا gnu99 (یعنی رفتار پیش فرض را مشخص می کند). این
گزینه برای اولین بار در GCC 4.3 پشتیبانی شد. این گزینه در پشتیبانی نمی شود -std=c90 or
-std=gnu90 حالت.
ماکروهای پیش پردازنده "__GNUC_GNU_INLINE__" و "__GNUC_STDC_INLINE__" ممکن است استفاده شوند
برای بررسی اینکه کدام معناها برای توابع "داخلی" موثر هستند.
-aux-info نام فایل
خروجی به نام فایل داده شده، اعلان های نمونه اولیه برای همه توابع اعلام شده و/یا
تعریف شده در یک واحد ترجمه، از جمله موارد موجود در فایلهای هدر. این گزینه است
بی سر و صدا در هر زبانی غیر از C نادیده گرفته می شود.
علاوه بر اظهارنامه ها، فایل در نظرات، مبدأ هر اظهارنامه را نشان می دهد
(فایل منبع و خط)، چه بیانیه ضمنی، نمونه اولیه یا
بدون نمونه (I, N برای جدید یا O برای قدیمی، به ترتیب، در شخصیت اول پس از
شماره خط و دو نقطه)، و اینکه آیا از یک اعلان یا یک تعریف آمده است
(C or Fبه ترتیب در کاراکتر زیر). در مورد عملکرد
تعاریف، فهرستی به سبک K&R از آرگومان ها و به دنبال آن اعلانات آنها نیز وجود دارد
ارائه شده، در نظرات، پس از اعلامیه.
-fallow-less-variadic-functions
توابع متغیر را بدون پارامترهای نامگذاری شده بپذیرید.
اگرچه می توان چنین تابعی را تعریف کرد، اما آنطور که هست خیلی مفید نیست
خواندن استدلال ها ممکن نیست این فقط برای C پشتیبانی می شود، همانطور که این ساختار است
توسط C++ مجاز است.
-فنو-اسم
"asm"، "inline" یا "typeof" را به عنوان یک کلمه کلیدی شناسایی نکنید، بنابراین کد می تواند از این کلمات استفاده کند.
کلمات به عنوان شناسه می توانید از کلمات کلیدی "__asm__"، "__inline__" و
در عوض "__typeof__". -ansi دلالت دارد -فنو-اسم.
در C++، این سوئیچ فقط بر کلمه کلیدی "typeof" تاثیر می گذارد، زیرا "asm" و "inline" هستند.
کلمات کلیدی استاندارد ممکن است بخواهید از -fno-gnu-words پرچم به جای آن، که دارد
همان اثر در حالت C99 (-std=c99 or -std=gnu99، این سوئیچ فقط بر روی
کلمات کلیدی "asm" و "typeof"، زیرا "inline" یک کلمه کلیدی استاندارد در ISO C99 است.
-فنو ساخته شده است
-fno-builtin-تابع
توابع داخلی را که با آن شروع نمی شوند شناسایی نکنید __ساخت_ به عنوان پیشوند
GCC معمولاً کد خاصی را برای رسیدگی بیشتر به برخی عملکردهای داخلی تولید می کند
کارآمد؛ به عنوان مثال، فراخوانی به "alloca" ممکن است به دستورالعمل های واحد تبدیل شود که
پشته را مستقیماً تنظیم کنید و تماسهای "memcpy" ممکن است به حلقههای کپی درونی تبدیل شوند. در
کد حاصل اغلب کوچکتر و سریعتر است، اما از آنجایی که تابع شماره را صدا می کند
برای مدت طولانی تری به این صورت ظاهر می شود، نمی توانید برای آن تماس ها نقطه انفصال تعیین کنید، و همچنین نمی توانید تغییر دهید
رفتار توابع از طریق پیوند با کتابخانه ای دیگر. علاوه بر این، زمانی که
یک تابع به عنوان یک تابع داخلی شناخته می شود، GCC ممکن است از اطلاعات مربوط به آن استفاده کند
این تابع برای هشدار در مورد مشکلات مربوط به تماس های آن تابع، یا ایجاد موارد بیشتر
کد کارآمد، حتی اگر کد به دست آمده همچنان شامل فراخوانی به آن تابع باشد. برای
به عنوان مثال، هشدارها با داده شده است -فرمت برای تماس های بد به "printf" زمانی که "printf" است
ساخته شده و "strlen" شناخته شده است که حافظه جهانی را تغییر نمی دهد.
با -fno-builtin-تابع گزینه فقط تابع داخلی است تابع غیرفعال است
تابع نباید با شروع شود __ساخت_. اگر تابعی نامگذاری شود که داخلی نباشد
در این نسخه از GCC، این گزینه نادیده گرفته می شود. متناظری وجود ندارد
-fbuiltin-تابع گزینه؛ اگر می خواهید عملکردهای داخلی را به صورت انتخابی فعال کنید
با استفاده از -فنو ساخته شده است or -مناسب، می توانید ماکروهایی مانند:
#define abs(n) __builtin_abs ((n))
#define strcpy(d, s) __builtin_strcpy ((d)، (s))
-Fhosted
ادعا کنید که کامپایل یک محیط میزبان را هدف قرار می دهد. این دلالت می کنه که -fbuiltin.
محیط میزبانی شده محیطی است که در آن کل کتابخانه استاندارد در دسترس است و در
که "main" نوع بازگشتی "int" دارد. مثالها تقریباً همه چیز هستند به جز a
هسته این معادل است -Fno-freestanding.
-مناسب
ادعا کنید که کامپایل یک محیط مستقل را هدف قرار می دهد. این دلالت می کنه که
-فنو ساخته شده است. یک محیط مستقل محیطی است که کتابخانه استاندارد ممکن است در آن نباشد
وجود دارد، و راه اندازی برنامه ممکن است لزوما در "اصلی" نباشد. بارزترین مثال
یک هسته سیستم عامل است. این معادل است میزبانی fno.
-فوپنمپ
مدیریت دستورات OpenMP "#pragma omp" در C/C++ و "!$omp" در Fortran را فعال کنید.
چه زمانی -فوپنمپ مشخص شده است، کامپایلر مطابق با کد موازی تولید می کند
رابط برنامه کاربردی OpenMP نسخه 4.0http://www.openmp.org/> این گزینه
دلالت دارد - نخ، و بنابراین فقط در اهدافی پشتیبانی می شود که از آنها پشتیبانی می کنند
- نخ. -فوپنمپ دلالت دارد -fopenmp-simd.
-fopenmp-simd
فعال کردن مدیریت دستورات SIMD OpenMP با "#pragma omp" در C/C++ و "!$omp" در
فرترن سایر دستورالعمل های OpenMP نادیده گرفته می شوند.
-fcilkplus
استفاده از ویژگی های برنامه افزودنی زبان Cilk Plus را برای C/C++ فعال کنید. زمانی که گزینه
-fcilkplus مشخص شده است، استفاده از ویژگی های برنامه افزودنی زبان Cilk Plus را فعال کنید
برای C/C++. اجرای حاضر از نسخه 1.2 ABI پیروی می کند. این یک
ویژگی آزمایشی که فقط تا حدی کامل شده است و رابط کاربری آن ممکن است تغییر کند
در نسخه های بعدی GCC با تغییر مشخصات رسمی. در حال حاضر، همه
ویژگی هایی اما "_Cilk_for" پیاده سازی شده است.
-fgnu-tm
زمانی که گزینه -fgnu-tm مشخص شده است، کامپایلر کدی را برای لینوکس تولید می کند
گونه ای از سند مشخصات ABI حافظه تراکنش فعلی اینتل (بازبینی
1.1، 6 مه 2009). این یک ویژگی آزمایشی است که ممکن است رابط کاربری آن تغییر کند
نسخه های آینده GCC، با تغییر مشخصات رسمی. لطفا توجه داشته باشید که نه
تمام معماری ها برای این ویژگی پشتیبانی می شوند.
برای اطلاعات بیشتر در مورد پشتیبانی GCC از حافظه تراکنشی،
توجه داشته باشید که ویژگی حافظه تراکنشی با استثناهای غیر تماس پشتیبانی نمی شود
(-fnon-call-exceptions).
-اف ام اس-افزونه ها
برخی از ساختارهای غیر استاندارد مورد استفاده در فایلهای هدر مایکروسافت را بپذیرید.
در کد ++C، این اجازه می دهد تا نام اعضا در ساختارها مشابه انواع قبلی باشد
اعلامیه ها
typedef int UOW;
ساختار ABC {
UOW UOW;
};
برخی از فیلدهای بدون نام در ساختارها و اتحادیه ها فقط با این مورد پذیرفته می شوند
گزینه.
توجه داشته باشید که این گزینه برای همه اهداف غیرفعال است اما اهداف i?86 و x86_64 با استفاده از ms-abi.
-fplan9-extensions
برخی از ساختارهای غیر استاندارد مورد استفاده در کد پلان 9 را بپذیرید.
این را قادر می سازد -اف ام اس-افزونه ها، اجازه می دهد تا نشانگرها را به ساختارهایی با ناشناس ارسال کنند
فیلدها به توابعی که انتظار نشانگرهایی به عناصر نوع فیلد دارند و
مجوزهای اشاره به فیلدهای ناشناس اعلام شده با استفاده از typedef. این فقط
برای C پشتیبانی می شود، نه C++.
سه نمودارها
پشتیبانی از سه گراف ISO C در -ansi گزینه (و -std گزینه هایی برای ISO سختگیرانه C
انطباق) دلالت دارد سه نمودارها.
-سنتی
سنتی-cpp
قبلاً، این گزینهها باعث میشد GCC تلاش کند تا یک کامپایلر پیشاستاندارد C را تقلید کند.
آنها در حال حاضر تنها با پشتیبانی می شوند -E تعویض. پیش پردازنده به پشتیبانی خود ادامه می دهد
یک حالت پیش استاندارد برای جزئیات به کتابچه راهنمای GNU CPP مراجعه کنید.
-fcond-عدم تطابق
در آرگومان های دوم و سوم، عبارات شرطی با انواع نامتناسب را مجاز کنید.
ارزش چنین عبارتی باطل است. این گزینه برای C++ پشتیبانی نمی شود.
تبدیل -بردار کتان
تبدیل ضمنی بین بردارهایی با تعداد عناصر و/یا متفاوت مجاز است
انواع عناصر ناسازگار این گزینه نباید برای کد جدید استفاده شود.
-funsigned-char
بگذارید نوع «char» بدون علامت باشد، مانند «char unsigned».
هر نوع ماشین یک پیشفرض برای آنچه «char» باید باشد دارد. یا شبیه است
بهطور پیشفرض «نویسه بدون علامت» یا بهطور پیشفرض مانند «نویسه امضاشده».
در حالت ایدهآل، یک برنامه قابل حمل همیشه باید از «char Signed» یا «unsigned char» استفاده کند.
به امضای یک شی بستگی دارد. اما برنامه های زیادی برای استفاده نوشته شده است
"char" ساده باشد و انتظار داشته باشید که امضا شود یا انتظار داشته باشید که بسته به آن بدون امضا باشد
ماشین هایی که برای آنها نوشته شده اند. این گزینه، و معکوس آن، به شما اجازه می دهد چنین چیزی را بسازید
کار برنامه با پیش فرض مخالف
نوع "char" همیشه یک نوع متمایز از هر یک از "charsigned char" یا "unsigned" است.
char، حتی اگر رفتارش همیشه شبیه یکی از آن دو باشد.
-fsigned-char
اجازه دهید نوع "char" مانند "char Signed" امضا شود.
توجه داشته باشید که این معادل است -fno-unsigned-char، که شکل منفی آن است
-funsigned-char. به همین ترتیب، گزینه -منوم-امضای برابر است با
-funsigned-char.
-fsigned-bitfields
-funsigned-bitfields
-fno-signed-bitfields
-fno-unsigned-bitfields
این گزینهها کنترل میکنند که آیا یک فیلد بیت در هنگام اعلان امضا یا بدون علامت باشد
از "امضا" یا "بدون امضا" استفاده نمی کند. به طور پیش فرض، چنین فیلد بیتی امضا شده است،
زیرا این سازگار است: انواع اعداد صحیح اصلی مانند "int" انواع علامت دار هستند.
گزینه کنترل ++C گفتار
این بخش گزینههای خط فرمان را که فقط برای برنامههای ++C معنیدار هستند، توضیح میدهد.
شما همچنین می توانید از اکثر گزینه های کامپایلر گنو صرف نظر از زبان برنامه خود استفاده کنید
به عنوان مثال، شما ممکن است یک فایل "firstClass.C" را مانند این کامپایل کنید:
g ++ -g -frepo -o -c firstClass.c
در این مثال فقط -فرپو گزینه ای است که فقط برای برنامه های C++ در نظر گرفته شده است. می توانید از
گزینه های دیگر با هر زبانی که توسط GCC پشتیبانی می شود.
در اینجا لیستی از گزینه های موجود است فقط برای کامپایل برنامه های ++C:
-fabi-version=n
از نسخه استفاده کنید n از C++ ABI. پیش فرض نسخه 2 است.
نسخه 0 به نسخه ای اشاره دارد که بیشترین مطابقت را با مشخصات C++ ABI دارد.
بنابراین، ABI به دست آمده با استفاده از نسخه 0 در نسخه های مختلف G++ تغییر خواهد کرد
به عنوان اشکالات ABI رفع شده است.
نسخه 1 نسخه C++ ABI است که برای اولین بار در G++ 3.2 ظاهر شد.
نسخه 2 نسخه C++ ABI است که برای اولین بار در G++ 3.4 ظاهر شد.
نسخه 3 یک خطا را در مخفی کردن یک آدرس ثابت به عنوان آرگومان الگو تصحیح می کند.
نسخه 4 که برای اولین بار در G++ 4.5 ظاهر شد، یک mangling استاندارد برای برداری را پیاده سازی می کند.
انواع.
نسخه 5 که برای اولین بار در G++ 4.6 ظاهر شد، اشتباه بودن ویژگی را تصحیح می کند
const/volatile در انواع نشانگر تابع، decltype یک decl ساده و استفاده از a
پارامتر تابع در اعلام یک پارامتر دیگر.
نسخه 6 که برای اولین بار در G++ 4.7 ظاهر شد، رفتار تبلیغاتی C++11 را تصحیح می کند.
فهرستهای دامنهدار و مخدوش کردن بستههای آرگومان الگو، const/static_cast، پیشوند ++
و -- و یک تابع محدوده کلاس که به عنوان آرگومان الگو استفاده می شود.
همچنین مشاهده کنید -وابی.
-fno-access-control
تمام بررسی دسترسی را خاموش کنید. این سوئیچ عمدتاً برای رفع اشکالات مفید است
کد کنترل دسترسی
-fcheck-جدید
قبل از تلاش، بررسی کنید که نشانگر بازگردانده شده توسط "اپراتور جدید" تهی نباشد
ذخیره سازی اختصاص داده شده را تغییر دهید. این بررسی معمولاً غیر ضروری است زیرا C++
استاندارد مشخص می کند که "اپراتور جدید" تنها در صورتی که اعلان شده باشد 0 را برمی گرداند پرت کردن()، در
در این صورت کامپایلر همیشه مقدار بازگشتی را حتی بدون این گزینه بررسی می کند. که در
همه موارد دیگر، زمانی که "اپراتور جدید" دارای یک ویژگی استثنای غیر خالی، حافظه است
خستگی با پرتاب "std::bad_alloc" نشان داده می شود. همچنین ببینید جدید (نه از طرف دیگر).
-fconstexpr-depth=n
حداکثر عمق ارزیابی تو در تو را برای توابع C++11 constexpr روی آن تنظیم کنید n. یک حد
برای تشخیص بازگشت بی پایان در طول ارزیابی بیان ثابت مورد نیاز است. در
حداقل تعیین شده توسط استاندارد 512 است.
-fdeduce-init-list
فعال کردن کسر پارامتر نوع الگو به عنوان "std::initializer_list" از یک پرانتز-
لیست اولیه محصور شده است، به عنوان مثال
قالب جلو خودکار (T t) -> decltype (realfn (t))
{
بازگشت realfn (t);
}
void f ()
{
به جلو ({1,2}); // انتقال تماس >
}
این کسر به عنوان یک گسترش احتمالی برای پیشنهاد اولیه اجرا شد
معناشناسی برای استاندارد C++11، اما بخشی از استاندارد نهایی نبود، بنابراین همینطور است
به طور پیش فرض غیرفعال است. این گزینه منسوخ شده است و ممکن است در آینده حذف شود
نسخه G++.
-friend-injection
توابع دوست را در فضای نام محصور تزریق کنید تا در خارج قابل مشاهده باشند
محدوده کلاسی که در آن اعلام شده اند. توابع دوست مستند شد
به این روش در راهنمای مرجع قدیمی Annotated C++ و نسخههای G++ قبلی
4.1 همیشه همینطور کار می کرد. با این حال، در ISO C++ یک تابع دوست که نیست
تنها با استفاده از جستجوی وابسته به آرگومان می توان آن را در یک محدوده ضمیمه ای یافت.
این گزینه باعث می شود که دوستان مانند نسخه های قبلی تزریق شوند.
این گزینه برای سازگاری است و ممکن است در نسخه بعدی G++ حذف شود.
fno-elide-constructors
استاندارد C++ به یک پیاده سازی اجازه می دهد تا ایجاد موقتی را که فقط است حذف کند
برای مقداردهی اولیه یک شی دیگر از همان نوع استفاده می شود. با تعیین این گزینه غیرفعال می شود
این بهینه سازی، و G++ را مجبور می کند تا سازنده کپی را در همه موارد فراخوانی کند.
مشخصات -fno-enforce-eh
برای بررسی نقض مشخصات استثنا در زمان اجرا، کد تولید نکنید.
این گزینه استاندارد C++ را نقض می کند، اما ممکن است برای کاهش اندازه کد مفید باشد
تولید می سازد، بسیار شبیه به تعریف NDEBUG. این اجازه کد کاربر را نمی دهد
برای ایجاد استثنا در نقض مشخصات استثنا. کامپایلر هنوز
بر اساس مشخصات بهینه می شود، بنابراین ایجاد یک استثنا غیرمنتظره منجر به نتیجه می شود
رفتار تعریف نشده در زمان اجرا
-fextern-tls-init
-fno-extern-tls-init
استانداردهای C++11 و OpenMP اجازه می دهند thread_local و threadprivate متغیرهایی برای داشتن
مقداردهی اولیه پویا (زمان اجرا). برای پشتیبانی از این، هر گونه استفاده از چنین متغیری می رود
از طریق یک تابع wrapper که هر مقدار اولیه لازم را انجام می دهد. زمانی که استفاده
و تعریف متغیر در همان واحد ترجمه هستند، این سربار می تواند باشد
بهینه شده است، اما زمانی که استفاده در یک واحد ترجمه متفاوت است، وجود دارد
سربار قابل توجه حتی اگر متغیر واقعاً به دینامیک نیاز نداشته باشد
مقداردهی اولیه. اگر برنامه نویس بتواند مطمئن باشد که هیچ استفاده ای از متغیر در غیر
تعریف TU نیاز به راه اندازی اولیه سازی پویا دارد (یا به این دلیل که متغیر است
به صورت استاتیکی مقداردهی اولیه می شود، یا استفاده از متغیر در TU تعریف کننده اجرا خواهد شد
قبل از هر گونه استفاده در TU دیگر)، آنها می توانند از این سربار اجتناب کنند
-fno-extern-tls-init گزینه.
در اهدافی که از نام مستعار نماد پشتیبانی می کنند، پیش فرض این است -fextern-tls-init. روی اهداف
که از نام مستعار نماد پشتیبانی نمی کنند، پیش فرض است -fno-extern-tls-init.
-for-scope
-fno-for-scope
If -for-scope مشخص شده است، محدوده متغیرهای اعلام شده در a for-init-statement
محدود به برای خود حلقه، همانطور که توسط استاندارد C++ مشخص شده است. اگر
-fno-for-scope مشخص شده است، محدوده متغیرهای اعلام شده در a for-init-statement
همانطور که در نسخههای قدیمی G++ وجود داشت، تا انتهای محدوده محصور گسترش مییابد، و
سایر پیاده سازی های (سنتی) C++.
اگر هیچ یک از پرچم ها داده نشده است، پیش فرض پیروی از استاندارد است، اما اجازه دادن و دادن است
یک هشدار برای کدهای سبک قدیمی که در غیر این صورت نامعتبر هستند یا متفاوت هستند
رفتار.
-fno-gnu-words
"typeof" را به عنوان یک کلمه کلیدی شناسایی نکنید، بنابراین کد می تواند از این کلمه به عنوان یک کلمه استفاده کند
مشخص کننده. به جای آن می توانید از کلمه کلیدی "__typeof__" استفاده کنید. -ansi دلالت دارد
-fno-gnu-words.
-fno- implicit-templates
هرگز برای الگوهای غیرخطی که به طور ضمنی (به عنوان مثال توسط
استفاده کنید)؛ فقط کدهایی را برای نمونه های صریح منتشر می کند.
الگوهای -fno- ضمنی-داخلی
برای نمونه های ضمنی الگوهای درون خطی نیز کد ارسال نکنید. پیشفرض
این است که خطوط داخلی را به گونه ای متفاوت مدیریت کنیم تا با و بدون نیاز بهینه سازی کامپایل شود
همان مجموعه ای از مصادیق صریح.
-fno-implement-inlines
برای صرفه جویی در فضا، کپی های خارج از خط از توابع درون خطی که توسط کنترل می شوند منتشر نکنید
#پراگما پیاده سازی. اگر این توابع درون خطی نباشند، این باعث خطاهای پیوند دهنده می شود
همه جا به آنها گفته می شود.
-اف ام اس-افزونه ها
اخطارهای Wpedantic را در مورد ساختارهای مورد استفاده در MFC، مانند int ضمنی و
گرفتن اشاره گر به تابع عضو از طریق نحو غیر استاندارد.
-fno-nonansi-builtins
اعلانهای داخلی توابعی که توسط ANSI/ISO C اجباری نشدهاند را غیرفعال کنید
شامل «ffs»، «alloca»، «_exit»، «index»، «bzero»، «conjf» و سایر موارد مرتبط
توابع.
-fnothrow-opt
با مشخصات استثنایی "throw()" طوری رفتار کنید که انگار یک مشخصات "noexcept" است
کاهش یا حذف سربار اندازه متن نسبت به یک تابع بدون استثناء
مشخصات. اگر تابع دارای متغیرهای محلی از انواع غیر بی اهمیت باشد
تخریبگرها، مشخصات استثنا در واقع عملکرد را کوچکتر می کند زیرا
پاکسازی EH برای آن متغیرها را می توان بهینه کرد. اثر معنایی است
که یک استثنا از یک تابع با چنین مشخصات استثنایی پرتاب می شود
منجر به فراخوانی برای "خاتمه" به جای "غیر منتظره" می شود.
-fno-operator-names
از کلمات کلیدی نام اپراتور "and"، "bitand"، "bitor"، "compl"، "not"، "or" استفاده نکنید.
و "xor" به عنوان مترادف به عنوان کلمات کلیدی.
-fno-optional-diags
عیبیابی را که استاندارد میگوید کامپایلر نیازی به صدور آن ندارد، غیرفعال کنید.
در حال حاضر، تنها تشخیصی که توسط G++ صادر میشود، تشخیصی برای یک نام است
معانی متعدد در یک کلاس
-مجاز
برخی از تشخیصهای مربوط به کد ناسازگار را از خطا به هشدار تنزل دهید. بدین ترتیب،
با استفاده از -مجاز اجازه می دهد تا برخی از کدهای ناسازگار کامپایل شوند.
-fno-pretty-templates
هنگامی که یک پیغام خطا به تخصص یک الگوی تابع، کامپایلر اشاره دارد
به طور معمول امضای الگو را به دنبال آرگومان های قالب چاپ می کند و
هر نوع تایپ یا نامی در امضا (مثلاً "void f(T) [با T = int]"
از "void f(int)") تا مشخص شود که کدام الگو درگیر است. وقتی یک خطا
پیام به تخصص یک الگوی کلاس اشاره دارد، کامپایلر هر کدام را حذف می کند
آرگومان های قالب که با آرگومان های قالب پیش فرض برای آن الگو مطابقت دارند. اگر
هر یک از این رفتارها درک پیام خطا را دشوارتر می کند
راحت تر، می توانید استفاده کنید -fno-pretty-templates برای غیر فعال کردن آنها
-فرپو
نمونه سازی خودکار الگو را در زمان پیوند فعال کنید. این گزینه نیز دلالت دارد
-fno- implicit-templates.
-fno-rtti
غیرفعال کردن تولید اطلاعات در مورد هر کلاس با توابع مجازی برای استفاده توسط
ویژگی های شناسایی نوع زمان اجرا C++ (دینامیک_کست و نوع گونه). اگر این کار را نکنید
با استفاده از آن قسمت های زبان، می توانید با استفاده از این پرچم مقداری فضا ذخیره کنید. توجه داشته باشید
مدیریت استثنا از همان اطلاعات استفاده می کند، اما G++ آن را در صورت نیاز تولید می کند. در
دینامیک_کست هنوز هم می توان از عملگر برای کست هایی استفاده کرد که به نوع زمان اجرا نیاز ندارند
اطلاعات، به عنوان مثال به "void *" یا به کلاس های پایه بدون ابهام فرستاده می شود.
-fstats
در پایان کامپایل، آماری در مورد پردازش جلویی ارسال کنید. این
اطلاعات عموماً فقط برای تیم توسعه G++ مفید است.
-fstrict-enums
به کامپایلر اجازه دهید با استفاده از این فرض که یک مقدار از نوع شمارش شده است، بهینه سازی کند
فقط می تواند یکی از مقادیر شمارش باشد (همانطور که در استاندارد C++ تعریف شده است.
اساساً، مقداری که می تواند در حداقل تعداد بیت های مورد نیاز نمایش داده شود
نشان دهنده همه شمارش کنندگان). اگر برنامه از آن استفاده کند، این فرض ممکن است معتبر نباشد
یک cast برای تبدیل یک مقدار صحیح دلخواه به نوع شمارش شده.
-ftemplate-backtrace-limit=n
حداکثر تعداد یادداشت های نمونه سازی الگو را برای یک اخطار یا خطا تنظیم کنید
به n. مقدار پیش فرض 10 است.
-ftemplate-depth=n
حداکثر عمق نمونه سازی را برای کلاس های الگو تنظیم کنید n. محدودیتی در
عمق نمونه سازی الگو برای شناسایی بازگشت های بی پایان در طول قالب مورد نیاز است
نمونه سازی کلاس برنامه های منطبق با ANSI/ISO C++ نباید به حداکثر متکی باشند
عمق بیشتر از 17 (در C++1024 به 11 تغییر یافت). مقدار پیش فرض 900 است
کامپایلر ممکن است قبل از رسیدن به 1024 در برخی شرایط فضای پشته تمام شود.
-fno-threadsafe-statics
کد اضافی را برای استفاده از روال های مشخص شده در C++ ABI برای رشته ارسال نکنید.
مقداردهی اولیه ایمن استاتیک محلی می توانید از این گزینه برای کاهش حجم کد استفاده کنید
کمی در کدی که نیازی به thread-safe بودن ندارد.
-fuse-cxa-atexit
با استفاده از «__cxa_atexit»، تخریبکنندهها را برای اشیا با مدت زمان ذخیرهسازی ثابت ثبت کنید.
تابع به جای تابع "atexit". این گزینه برای به طور کامل مورد نیاز است
مدیریت منطبق با استانداردها با تخریبگرهای استاتیک، اما فقط در صورتی کار می کند که کتابخانه C شما
از "__cxa_atexit" پشتیبانی می کند.
-fno-use-cxa-get-exception-ptr
از روال زمان اجرا "__cxa_get_exception_ptr" استفاده نکنید. این باعث می شود
"std::uncaught_exception" نادرست است، اما اگر روال زمان اجرا باشد ضروری است
در دسترس نیست.
-fvisibility-inlines-hidden
این سوئیچ اعلام میکند که کاربر تلاشی برای مقایسه نشانگرها با درون خطی نمیکند
توابع یا روشهایی که آدرسهای دو تابع در آنها متفاوت است
اشیاء مشترک
تأثیر این امر این است که GCC ممکن است، به طور مؤثر، روش های درون خطی را با آن علامت گذاری کند
"__ویژگی__ ((قابل مشاهده ("پنهان")))" تا در صادرات ظاهر نشوند
جدول یک DSO و در هنگام استفاده در DSO نیازی به غیر جهت PLT ندارند.
فعال کردن این گزینه می تواند تأثیر چشمگیری بر بارگذاری و زمان پیوند یک DSO داشته باشد
هنگامی که کتابخانه سنگین می شود، اندازه جدول صادرات پویا را به شدت کاهش می دهد
استفاده از قالب ها
رفتار این سوئیچ کاملاً مشابه علامت گذاری روش ها به عنوان پنهان نیست
به طور مستقیم، زیرا بر متغیرهای استاتیک محلی برای تابع یا علت تأثیر نمی گذارد
کامپایلر استنباط کند که تابع تنها در یک شیء مشترک تعریف شده است.
شما میتوانید روشی را بهعنوان دارای دید مشخص برای نفی تأثیر آن علامتگذاری کنید
سوئیچ برای آن روش برای مثال، اگر می خواهید اشاره گرها را با a مقایسه کنید
روش درون خطی خاص، ممکن است آن را به عنوان دارای قابلیت مشاهده پیش فرض علامت گذاری کنید. علامت گذاری
محصور کردن کلاس با دید واضح هیچ تاثیری ندارد.
روشهای درون خطی که به صراحت نمونهسازی شدهاند، تحت تأثیر این گزینه بهعنوان پیوندشان قرار نمیگیرند
در غیر این صورت ممکن است از یک مرز کتابخانه مشترک عبور کند.
-fvisibility-ms-compat
این پرچم سعی میکند از تنظیمات دید برای ساخت مدل پیوند C++ GCC استفاده کند
سازگار با مایکروسافت ویژوال استودیو.
پرچم این تغییرات را در مدل پیوند GCC ایجاد می کند:
1. قابلیت مشاهده پیشفرض را روی «مخفی» تنظیم میکند fvisibility = پنهان.
2. تایپ ها، اما اعضای آن ها، به طور پیش فرض مخفی نمی شوند.
3. قانون One Definition برای انواعی که قابل مشاهده نیستند راحت است
مشخصاتی که در بیش از یک شی مشترک تعریف شده اند: آن اعلان ها
در صورت عدم استفاده از این گزینه مجاز هستند.
در کد جدید بهتر است استفاده کنید fvisibility = پنهان و آن کلاس هایی را که هستند صادر کنید
در نظر گرفته شده است که از خارج قابل مشاهده باشد. متأسفانه امکان تکیه کد برای کد وجود دارد،
شاید به طور تصادفی، در رفتار ویژوال استودیو.
از جمله پیامدهای این تغییرات این است که اعضای داده ایستا از یک نوع هستند
با همان نام اما در اشیاء مشترک متفاوت تعریف شده است، بنابراین تغییر می کند
یکی دیگری را تغییر نمی دهد; و اشاره گر به اعضای تابع تعریف شده در
اشیاء مشترک مختلف ممکن است با هم مقایسه نشوند. وقتی این پرچم داده می شود، یک است
نقض ODR برای تعریف انواع با نام مشابه متفاوت است.
-fvtable- Verify =std|preinit|هیچکدام
روشن (یا خاموش، در صورت استفاده). -fvtable-verify=هیچکدام) ویژگی امنیتی که در تأیید می شود
زمان اجرا، برای هر تماس مجازی که انجام می شود، نشانگر vtable که از طریق آن
تماس برقرار شده برای نوع شی معتبر است و خراب نشده است یا
رونویسی شده است. اگر یک نشانگر vtable نامعتبر (در زمان اجرا) شناسایی شود، یک خطا وجود دارد
گزارش شده و اجرای برنامه بلافاصله متوقف می شود.
این گزینه باعث می شود که ساختارهای داده زمان اجرا در هنگام راه اندازی برنامه ساخته شوند
بررسی نشانگرهای vtable گزینه های "std" و "preinit" زمان بندی را کنترل می کنند
زمانی که این ساختارهای داده ساخته می شوند. در هر دو مورد، ساختارهای داده ساخته می شوند
قبل از اینکه اجرا به "اصلی" برسد. در -fvtable-verify=std باعث ایجاد این ساختار داده ها می شود
پس از بارگیری و تنظیم اولیه کتابخانه های مشترک ساخته می شود.
-fvtable- Verify = preinit باعث می شود آنها قبل از ایجاد کتابخانه های مشترک ساخته شوند
بارگیری و مقداردهی اولیه شد.
اگر این گزینه چندین بار در خط کامپایلر ظاهر شود، با مقادیر متفاوت
مشخص شده، "هیچ" بالاترین اولویت را نسبت به "std" و "preinit" خواهد داشت. "preinit"
بر 'std' اولویت خواهد داشت.
-fvtv-debug
باعث اشکال زدایی نسخه های توابع زمان اجرا برای ویژگی تأیید vtable می شود
به نام. این فرض می کند -fvtable-verify=std or -fvtable- Verify = preinit بوده است
استفاده شده. این پرچم همچنین باعث می شود که کامپایلر نشانگرهای vtable را دنبال کند
برای هر کلاس پیدا کرد و آن اطلاعات را در فایل ثبت کرد
"vtv_set_ptr_data.log"، در فهرست فایل dump در دستگاه کاربر.
توجه: این ویژگی داده ها را به فایل گزارش اضافه می کند. اگر یک فایل لاگ تازه می خواهید، باشید
مطمئن شوید که هر مورد موجود را حذف کنید.
-fvtv- شمارش می کند
این یک پرچم اشکال زدایی است. هنگام استفاده همراه با -fvtable-verify=std or
-fvtable- Verify = preinit، این باعث می شود که کامپایلر تعداد کل موارد را پیگیری کند
تماس های مجازی با آن و تعداد تأییدیه هایی که درج کرده است. آن را نیز
تعداد تماسهایی را که به برخی از توابع کتابخانه زمان اجرا وارد میکند، میشمارد. این
اطلاعات، برای هر واحد کامپایل، در فایلی به نام نوشته می شود
"vtv_count_data.log"، در فهرست dump_file در دستگاه کاربر. آن را نیز
اندازه مجموعه های اشاره گر vtable را برای هر کلاس می شمارد و این اطلاعات را می نویسد
به "vtv_class_set_sizes.log" در همان فهرست.
توجه: این ویژگی داده ها را به فایل های گزارش اضافه می کند. برای دریافت فایل های گزارش تازه، مطمئن شوید
برای حذف موارد موجود
-فنو ضعیف
از پشتیبانی نماد ضعیف استفاده نکنید، حتی اگر توسط پیوند دهنده ارائه شده باشد. به طور پیش فرض، G++
در صورت موجود بودن از نمادهای ضعیف استفاده می کند. این گزینه فقط برای تست وجود دارد و
نباید توسط کاربران نهایی استفاده شود. منجر به کد پایین تر می شود و هیچ مزیتی ندارد.
این گزینه ممکن است در نسخه بعدی G++ حذف شود.
-nostdinc++
فایل های هدر را در دایرکتوری های استاندارد مخصوص C++ جستجو نکنید، اما این کار را انجام دهید
هنوز دایرکتوری های استاندارد دیگر را جستجو کنید. (این گزینه در هنگام ساخت استفاده می شود
کتابخانه C++.)
علاوه بر این، این گزینه های بهینه سازی، هشدار و تولید کد فقط معانی دارند
برای برنامه های ++C:
-وابی (فقط C، Objective-C، C++ و Objective-C++)
هنگامی که G++ کدی را تولید می کند که احتمالاً با فروشنده خنثی سازگار نیست، هشدار دهید
C++ ABI. اگرچه تلاش شده است در مورد همه این موارد هشدار داده شود، اما وجود دارد
احتمالاً برخی از مواردی که در مورد آنها هشدار داده نشده است، حتی اگر G++ در حال ایجاد است
کد ناسازگار همچنین ممکن است مواردی وجود داشته باشد که اخطارها صادر شود حتی اگر
کد تولید شده سازگار است.
اگر در مورد آن نگران هستید، باید کد خود را بازنویسی کنید تا از این هشدارها جلوگیری کنید
این واقعیت که کد تولید شده توسط G++ ممکن است با کد تولید شده توسط باینری سازگار نباشد
سایر کامپایلرها
ناسازگاری های شناخته شده در -fabi-version=2 (پیش فرض) شامل:
· یک الگو با پارامتر الگوی غیر نوع از نوع مرجع مخدوش شده است
نادرست:
خارجی int N;
قالب ساختار S {};
void n (S ) {2}
این در ثابت شده است -fabi-version=3.
· انواع بردار SIMD اعلام شده با استفاده از "__خصیصه ((اندازه_بردار))" در یک
روشی غیر استاندارد که اجازه بارگذاری بیش از حد توابع بردار را نمی دهد
در اندازه های مختلف
مانگلینگ در عوض شده است -fabi-version=4.
ناسازگاری های شناخته شده در -fabi-version=1 عبارتند از:
· مدیریت نادرست دم بالشتک برای فیلدهای بیتی. G++ ممکن است سعی کند داده ها را بسته بندی کند
به همان بایت کلاس پایه. مثلا:
ساختار A { virtual void f(); int f1 : 1; };
ساختار B : public A { int f2 : 1; };
در این مورد، G++ "B::f2" را در همان بایت "A::f1" قرار می دهد. کامپایلرهای دیگر انجام می دهند
نه شما می توانید با اضافه کردن صریح "A" به طوری که اندازه آن a باشد، از این مشکل جلوگیری کنید
چند برابر اندازه بایت در پلتفرم شما؛ که باعث می شود G++ و سایر کامپایلرها
"B" را یکسان قرار دهید.
· مدیریت نادرست دم بالشتک برای پایگاه های مجازی. G++ از دم استفاده نمی کند
بالشتک هنگام چیدمان پایه های مجازی. مثلا:
ساختار A { virtual void f(); char c1; };
ساختار B { B(); char c2; };
ساختار C : عمومی A، عمومی مجازی B {};
در این مورد، G++ "B" را در قسمت دم برای "A" قرار نمی دهد. دیگر
کامپایلرها انجام می دهند. شما می توانید با قرار دادن صریح "A" از این مشکل جلوگیری کنید
اندازه مضرب تراز آن است (با نادیده گرفتن کلاس های پایه مجازی). که باعث می شود
G++ و سایر کامپایلرها برای چیدمان "C" به طور یکسان.
· مدیریت نادرست فیلدهای بیت با عرض اعلام شده بیشتر از عرض آنها
زمانی که فیلدهای بیت در یک اتحادیه ظاهر می شوند، انواع زیرین. مثلا:
union U { int i : 4096; }
با فرض اینکه یک "int" 4096 بیت ندارد، G++ اتحادیه را بسیار کوچک می کند.
تعداد بیت ها در یک "int".
· کلاس های خالی را می توان در افست های نادرست قرار داد. مثلا:
ساختار A {};
ساختار B {
A a
فضای خالی مجازی f ();
};
ساختار C: عمومی B، عمومی A {};
G++ کلاس پایه "A" از "C" را در یک افست غیر صفر قرار می دهد. باید در آن قرار گیرد
افست صفر G++ به اشتباه معتقد است که عضو داده "A" از "B" قبلاً وجود دارد
در افست صفر
· نام توابع الگو که انواع آنها شامل "نام تایپ" یا الگوی قالب است
پارامترها را می توان به اشتباه مخدوش کرد.
قالب
void f(نام نوع Q::X) {}
قالب کلاس Q>
void f(نام تایپ Q ::ایکس) {}
نمونههای این الگوها ممکن است به اشتباه مخدوش شده باشند.
همچنین در مورد تغییرات مربوط به psABI هشدار می دهد. psABI شناخته شده در این مرحله تغییر می کند
عبارتند از:
· برای SysV/x86-64، اتحادیه های دارای اعضای "long double" به عنوان در حافظه منتقل می شوند
در psABI مشخص شده است. مثلا:
اتحادیه U {
بلند دوبل ld;
بین من
};
"union U" همیشه در حافظه منتقل می شود.
-Wctor-dtor-privacy (فقط C++ و Objective-C++)
هنگامی که یک کلاس غیرقابل استفاده به نظر می رسد هشدار دهید زیرا تمام سازنده ها یا تخریب کننده ها در آن هستند
کلاس خصوصی است و نه دوستان دارد و نه توابع عضو استاتیک عمومی.
همچنین اگر روشهای غیرخصوصی وجود ندارد و حداقل یک عضو خصوصی وجود دارد، هشدار دهید
تابعی که سازنده یا تخریب کننده نیست.
-dtor-non-virtual-delete-dtor (فقط C++ و Objective-C++)
هشدار دهید چه زمانی حذف کردن برای از بین بردن نمونه ای از کلاسی که دارای توابع مجازی است استفاده می شود
و تخریبگر غیر مجازی. حذف یک نمونه از کلاس مشتق شده ناامن است
اگر کلاس پایه مجازی نداشته باشد از طریق اشاره گر به کلاس پایه
ویرانگر این هشدار توسط -دیو.
-Wliteral-پسوند (فقط C++ و Objective-C++)
هنگامی که یک رشته یا کاراکتر با پسوند ud دنبال می شود، هشدار دهید
با خط زیر شروع کنید به عنوان یک پسوند منطبق، GCC پسوندهایی را به عنوان
توکن های پیش پردازش را جدا کنید تا سازگاری با کد را حفظ کنید
که از قالب بندی ماکروها استفاده می کند ". مثلا:
#define __STDC_FORMAT_MACROS
#عبارتند از
#عبارتند از
int main () {
int64_t i64 = 123;
printf("My int64: %"PRID64"\n"، i64);
}
در این مورد، "PRId64" به عنوان یک توکن پیش پردازش جداگانه در نظر گرفته می شود.
این هشدار به طور پیش فرض فعال است.
- تنگ کردن (فقط C++ و Objective-C++)
هنگامی که یک تبدیل محدود شده توسط C++11 ممنوع شده است، هشدار دهید { }، به عنوان مثال
int i = { 2.2 }; // خطا: باریک شدن از double به int
این پرچم در -دیو و -Wc++11-compat.
با -std = C ++ 11, -بدون باریک شدن تشخیصی مورد نیاز استاندارد را سرکوب می کند.
توجه داشته باشید که این امر بر معنای کد خوش فرم تأثیر نمی گذارد. تبدیل های باریک
هنوز در بافت SFINAE بد شکل تلقی می شوند.
-به جز (فقط C++ و Objective-C++)
هنگامی که یک عبارت noexcept به دلیل فراخوانی یک تابع به نادرست ارزیابی می شود، هشدار دهید
که دارای مشخصات استثنایی غیر پرتاب کننده نیست (به عنوان مثال پرت کردن() or جز)
اما توسط کامپایلر شناخته شده است که هرگز استثنا نمی گذارد.
غیر مجازی-dtor (فقط C++ و Objective-C++)
هنگامی که یک کلاس دارای توابع مجازی و یک تخریبگر غیر مجازی قابل دسترسی است هشدار دهید
خود یا در یک کلاس پایه چندشکلی قابل دسترس، در این صورت ممکن است اما
حذف نمونه ای از کلاس مشتق شده از طریق یک اشاره گر به خود کلاس، امن نیست
یا کلاس پایه این هشدار به طور خودکار فعال می شود اگر -Weffc++ مشخص شده است.
-Wreorder (فقط C++ و Objective-C++)
هنگامی که ترتیب اولیه سازهای عضو داده شده در کد با ترتیب مطابقت ندارد، هشدار دهید
که در آن باید اعدام شوند. برای مثال:
ساختار A {
بین من
int j;
A(): j (0)، i (1) { }
};
کامپایلر مقدار دهی اولیه کننده های عضو را مجدداً مرتب می کند i و j برای مطابقت با اعلامیه
دستور اعضا، با صدور اخطار در این زمینه. این هشدار توسط
-دیو.
-fext-numeric-literals (فقط C++ و Objective-C++)
پسوندهای اعداد فرضی، نقطه ثابت یا ماشینی را به عنوان GNU بپذیرید
پسوندها هنگامی که این گزینه خاموش است، این پسوندها به عنوان کاربر C++11 در نظر گرفته می شوند.
پسوندهای عددی تحت اللفظی تعریف شده است. این به طور پیشفرض برای همه گویشهای قبل از C++11 روشن است
و همه لهجه های گنو: -std = C ++ 98, -std=gnu++98, -std=gnu++11, -std=gnu++1y. این
گزینه به طور پیش فرض برای ISO C++11 به بعد خاموش است (-std = C ++ 11، ...).
در زیر -و... گزینه ها تحت تاثیر قرار نمی گیرند -دیو.
-Weffc++ (فقط C++ و Objective-C++)
هشدار در مورد نقض دستورالعمل های سبک زیر توسط اسکات مایرز موثر
++C سری کتاب:
یک سازنده کپی و یک عملگر انتساب برای کلاس هایی با پویا تعریف کنید
حافظه اختصاص داده شده
· ترجیح دادن مقداردهی اولیه به انتساب در سازنده ها.
· آیا "operator=" یک مرجع به *این برگرداند.
· زمانی که باید یک شی را برگردانید، سعی نکنید یک مرجع را برگردانید.
· تمایز بین اشکال پیشوند و پسوند عملگرهای افزایشی و کاهشی.
· هرگز «&&»، «||»، یا «،» را بیش از حد بارگذاری نکنید.
این گزینه را نیز فعال می کند غیر مجازی-dtorکه یکی از C++های موثر نیز می باشد
توصیه ها با این حال، چک برای هشدار در مورد عدم وجود مجازی تمدید شده است
ویرانگر در کلاس های پایه های غیر چند شکلی قابل دسترس نیز.
هنگام انتخاب این گزینه، توجه داشته باشید که سرصفحه های استاندارد کتابخانه از همه پیروی نمی کنند
از این دستورالعمل ها؛ استفاده کنید grep استفاده -v برای فیلتر کردن آن هشدارها
Wstrict-null-sentinel (فقط C++ و Objective-C++)
در مورد استفاده از "NULL" بدون ریخته گری به عنوان نگهبان هشدار دهید. هنگام کامپایل فقط با GCC
این یک نگهبان معتبر است، زیرا "NULL" به "__null" تعریف شده است. اگرچه باطل است
ثابت اشاره گر به جای یک اشاره گر تهی، تضمین می شود که اندازه آن یکسان باشد
به عنوان یک اشاره گر اما این استفاده در کامپایلرهای مختلف قابل حمل نیست.
-بدون قالب-دوست (فقط C++ و Objective-C++)
هنگامی که توابع دوست بدون الگو در یک الگو اعلام می شوند، هشدارها را غیرفعال کنید.
از زمان ظهور پشتیبانی از مشخصات قالب صریح در G++، اگر نام
دوست یک شناسه فاقد صلاحیت است (یعنی دوست foo (int))، مشخصات زبان C++
از دوست می خواهد که یک تابع معمولی و غیرقابلیت تعریف یا تعریف کند. (بخش
14.5.3). قبل از اینکه G++ مشخصات صریح را پیادهسازی کند، شناسههای فاقد صلاحیت میتوانستند
به عنوان یک تخصص خاص از یک تابع الگو تفسیر می شود. چون این
رفتار ناسازگار دیگر رفتار پیشفرض برای G++ نیست،
-دوست-قالب نشده به کامپایلر اجازه می دهد تا کد موجود را برای مشکلات احتمالی بررسی کند
لکه می کند و به طور پیش فرض روشن است. این رفتار کامپایلر جدید را می توان با خاموش کرد
-بدون قالب-دوست، که کد کامپایلر سازگار را نگه می دارد اما آن را غیرفعال می کند
هشدار مفید
بازیگران به سبک وولد (فقط C++ و Objective-C++)
در صورتی که در یک برنامه C++ از کست قدیمی (سبک C) به نوع غیر خالی استفاده می شود، هشدار دهید.
بازیگران سبک جدید (دینامیک_کست, پخش_استاتیک, تفسیر_بازیو const_cast) هستند
کمتر در برابر اثرات ناخواسته آسیب پذیر است و جستجو برای آنها بسیار آسان تر است.
-Woverloaded-مجازی (فقط C++ و Objective-C++)
هنگامی که یک اعلان تابع، توابع مجازی را از یک کلاس پایه پنهان می کند، هشدار دهید. برای
به عنوان مثال، در:
ساختار A {
فضای خالی مجازی f();
};
ساختار B: عمومی A {
void f(int);
};
نسخه کلاس "A" "f" در "B" پنهان است و کدی مانند:
b* b ؛
b->f();
موفق به کامپایل نمی شود.
-Wno-pmf-تبدیل (فقط C++ و Objective-C++)
تشخیصی را برای تبدیل یک نشانگر محدود به تابع عضو به یک ساده غیرفعال کنید
اشاره گر
-Wsign-Promo (فقط C++ و Objective-C++)
هنگامی که وضوح اضافه بار تبلیغاتی را از نوع بدون امضا یا شمارش شده انتخاب می کند، هشدار دهید
یک نوع امضا شده، بیش از تبدیل به یک نوع بدون علامت با همان اندازه. قبلی
نسخههای G++ سعی کردند بدون امضا را حفظ کنند، اما استاندارد جریان فعلی را الزامی میکند
رفتار.
گزینه کنترل هدف-C و Objective-C++ لهجه ها
(توجه: این راهنما زبان های Objective-C و Objective-C++ را توصیف نمی کند
خودشان
این بخش گزینه های خط فرمان را که فقط برای Objective-C معنادار هستند، توضیح می دهد
و برنامه های Objective-C++. شما همچنین می توانید از بیشتر گنو مستقل از زبان استفاده کنید
گزینه های کامپایلر به عنوان مثال، می توانید یک فایل "some_class.m" را مانند این کامپایل کنید:
gcc -g -fgnu-runtime -O -c some_class.m
در این مثال ، -fgnu-runtime گزینه ای است که فقط برای Objective-C و Objective-C++ در نظر گرفته شده است
برنامه ها؛ می توانید از گزینه های دیگر با هر زبانی که توسط GCC پشتیبانی می شود استفاده کنید.
توجه داشته باشید که از آنجایی که Objective-C پسوند زبان C است، کامپایل های Objective-C
همچنین ممکن است از گزینه های خاص C front-end استفاده کند (به عنوان مثال، -غیر سنتی). به طور مشابه،
کامپایلهای Objective-C++ ممکن است از گزینههای خاص C++ استفاده کنند (به عنوان مثال، -وابی).
در اینجا لیستی از گزینه های موجود است فقط برای کامپایل Objective-C و Objective-C++
برنامه ها:
-fconstant-string-class =نام کلاس
استفاده کنید نام کلاس به عنوان نام کلاس برای نمونه سازی برای هر رشته تحت اللفظی
با نحو "@" مشخص شده است. نام کلاس پیش فرض "NXConstantString" است اگر
زمان اجرای گنو در حال استفاده است، و اگر زمان اجرا NeXT در حال استفاده باشد، «NSConstantString»
استفاده می شود (به زیر مراجعه کنید). در -fconstant-cfstrings گزینه، در صورت وجود، لغو می شود
-fconstant-string-class تنظیم می شود و باعث می شود که لفظ های "@"" به صورت ثابت قرار بگیرند
رشته های CoreFoundation.
-fgnu-runtime
کد شی سازگار با زمان اجرا استاندارد GNU Objective-C ایجاد کنید. این هست
پیش فرض برای اکثر انواع سیستم ها
-fnext-runtime
خروجی سازگار با زمان اجرا NeXT ایجاد کنید. این پیش فرض برای NeXT-based است
سیستمها، از جمله داروین و Mac OS X. ماکرو "__NEXT_RUNTIME__" از پیش تعریف شده است اگر
(و فقط اگر) از این گزینه استفاده شود.
گیرنده های fno-nil
فرض کنید که تمام پیام های Objective-C ("[receiver message:arg]") در این
واحد ترجمه اطمینان حاصل می کند که گیرنده " صفر" نیست. این اجازه می دهد تا برای بیشتر
نقاط ورودی کارآمد در زمان اجرا مورد استفاده قرار گیرد. این گزینه فقط در دسترس است
همراه با زمان اجرا NeXT و ABI نسخه 0 یا 1.
-fobjc-abi-version=n
از نسخه استفاده کنید n از Objective-C ABI برای زمان اجرا انتخاب شده. این گزینه است
در حال حاضر فقط برای زمان اجرا NeXT پشتیبانی می شود. در این صورت، نسخه 0 همان است
ABI سنتی (32 بیتی) بدون پشتیبانی از ویژگی ها و سایر Objective-C 2.0
اضافات نسخه 1 ABI سنتی (32 بیتی) با پشتیبانی از ویژگی ها و
سایر اضافات Objective-C 2.0. نسخه 2 ABI مدرن (64 بیتی) است. اگر هیچ چیز نیست
مشخص شده، نسخه پیشفرض نسخه 0 در ماشینهای هدف 32 بیتی و نسخه 2 در 64 بیت است.
ماشین آلات هدف
-fobjc-call-cxx-cdtors
برای هر کلاس Objective-C، بررسی کنید که آیا هر یک از متغیرهای نمونه آن یک شی C++ است یا خیر
با یک سازنده پیش فرض غیر ضروری. اگر چنین است، یک "- (id) ویژه ترکیب کنید
متد نمونه .cxx_construct" که سازندههای پیشفرض غیر پیشفرض را روی هر کدام اجرا میکند
چنین متغیرهای نمونه، به ترتیب، و سپس بازگشت "خود". به طور مشابه، اگر وجود دارد، بررسی کنید
متغیر نمونه یک شی C++ با یک تخریبگر غیر ضروری است، و اگر چنین است، ترکیب کنید
یک روش خاص "- (void) .cxx_destruct" که تمام این مخرب های پیش فرض را اجرا می کند، در
به صورت برعکس.
روشهای "- (id) .cxx_construct" و "- (void) .cxx_destruct" بنابراین فقط تولید میشوند
بر روی متغیرهای نمونه ای که در کلاس Objective-C فعلی اعلام شده اند، کار می کنند و نه آن ها
از سوپرکلاس ها به ارث رسیده است. این مسئولیت زمان اجرا Objective-C است
همه این روش ها را در سلسله مراتب ارثی یک شیء فراخوانی کنید. شناسه)
متدهای .cxx_construct" توسط زمان اجرا بلافاصله پس از یک شی جدید فراخوانی می شوند
نمونه اختصاص داده شده است. متدهای "- (void) .cxx_destruct بلافاصله فراخوانی می شوند
قبل از اینکه زمان اجرا یک نمونه شی را اختصاص دهد.
از زمان نگارش این مقاله، فقط زمان اجرا NeXT در Mac OS X 10.4 و نسخه های جدیدتر از آن پشتیبانی می کند
فراخوانی متدهای "- (id) .cxx_construct" و "- (void) .cxx_destruct".
-fobjc-direct-dispatch
اجازه پرش های سریع به ارسال کننده پیام را بدهید. در داروین این کار از طریق
صفحه کام.
-fobjc-استثناها
فعال کردن پشتیبانی نحوی برای مدیریت ساختار ساختار یافته در Objective-C، مشابه
آنچه توسط C++ و جاوا ارائه می شود. این گزینه برای استفاده از Objective-C مورد نیاز است
کلمات کلیدی @try، @throw، @catch، @finally و @synchronized. این گزینه موجود است
با هر دو زمان اجرا گنو و زمان اجرا NeXT (اما در ارتباط با آن موجود نیست
زمان اجرا NeXT در Mac OS X 10.2 و قبل از آن).
-fobjc-gc
جمع آوری زباله (GC) را در برنامه های Objective-C و Objective-C++ فعال کنید. این گزینه
فقط با زمان اجرا NeXT در دسترس است. زمان اجرا گنو یک آشغال متفاوت دارد
پیاده سازی مجموعه که به پرچم های کامپایلر خاصی نیاز ندارد.
-fobjc-nilcheck
برای زمان اجرا NeXT با نسخه 2 ABI، یک گیرنده صفر را در روش بررسی کنید
فراخوانی ها قبل از انجام فراخوانی متد واقعی. این پیش فرض است و می تواند باشد
غیرفعال استفاده از -fno-objc-nilcheck. روش های کلاس و تماس های فوق العاده هرگز بررسی نمی شوند
بدون توجه به این که این پرچم روی چه چیزی تنظیم شده است. در حال حاضر این پرچم انجام می دهد
وقتی از زمان اجرا گنو یا یک نسخه قدیمی تر از NeXT زمان اجرا ABI استفاده می شود، هیچ چیز وجود ندارد.
-fobjc-std=objc1
مطابق با نحو زبان Objective-C 1.0، زبانی که توسط GCC 4.0 به رسمیت شناخته شده است.
این فقط بر اضافات Objective-C به زبان C/C++ تأثیر می گذارد. تاثیر نمی گذارد
مطابقت با استانداردهای C/C++، که توسط گویش جداگانه C/C++ کنترل می شود
پرچم های گزینه وقتی این گزینه با Objective-C یا Objective-C++ استفاده می شود
کامپایلر، هر نحو Objective-C که توسط GCC 4.0 شناسایی نشده باشد رد می شود. این
اگر باید مطمئن شوید که کد Objective-C شما می تواند با آن کامپایل شود مفید است
نسخه های قدیمی GCC
-freplace-objc-classes
یک دستورالعمل نشانگر ویژه منتشر کنید ld(1) نه اینکه به صورت ایستا در شیء حاصل پیوند برقرار کند
فایل، و اجازه دهید غول(1) به جای آن در زمان اجرا آن را بارگیری کنید. این در استفاده می شود
همراه با حالت رفع اشکال Fix-and-Continue، جایی که فایل شی در آن قرار دارد
سوال ممکن است دوباره کامپایل شده و به صورت پویا در دوره برنامه بارگذاری مجدد شود
بدون نیاز به راه اندازی مجدد خود برنامه اجرا شود. در حال حاضر، اصلاح و
عملکرد Continue فقط در ارتباط با زمان اجرا NeXT در Mac در دسترس است
OS X 10.3 و بالاتر.
-fzero-link
هنگام کامپایل برای زمان اجرا NeXT، کامپایلر معمولاً فراخوانی ها را جایگزین می کند
"objc_getClass("...")" (زمانی که نام کلاس در زمان کامپایل مشخص باشد) با
ارجاعات کلاس ایستا که در زمان بارگذاری مقداردهی اولیه می شوند، که زمان اجرا را بهبود می بخشد
کارایی. مشخص کردن -fzero-link پرچم این رفتار و باعث سرکوب می شود
فراخوانی به "objc_getClass("...")" حفظ شود. این در Zero-Link مفید است
حالت اشکال زدایی، از آنجایی که اجازه می دهد تا پیاده سازی کلاس های فردی تغییر یابد
در طول اجرای برنامه زمان اجرا گنو در حال حاضر همیشه تماس ها را حفظ می کند
"objc_get_class("...")" بدون توجه به گزینه های خط فرمان.
-gen-decls
اعلانهای واسط برای همه کلاسهایی که در فایل منبع دیده میشوند را به فایلی با نام تخلیه کنید
sourcename.decl.
-Wassign-intercept (فقط Objective-C و Objective-C++)
هر زمان که یک تکلیف Objective-C توسط زباله جمع کن رهگیری می شود، هشدار دهید.
- پروتکل Wno (فقط Objective-C و Objective-C++)
اگر کلاسی برای پیاده سازی یک پروتکل اعلان شود، برای هر متد یک هشدار صادر می شود
در پروتکلی که توسط کلاس پیاده سازی نشده است. رفتار پیش فرض این است که
برای هر روشی که به صراحت در کلاس پیاده سازی نشده است، یک هشدار صادر کنید، حتی اگر a
پیاده سازی روش از superclass به ارث رسیده است. اگر از - پروتکل Wno
گزینه، سپس روش های به ارث رسیده از سوپرکلاس به عنوان پیاده سازی در نظر گرفته می شوند،
و هیچ اخطاری برای آنها صادر نمی شود.
-انتخاب کننده (فقط Objective-C و Objective-C++)
اگر چندین روش از انواع مختلف برای انتخابگر یکسان در طول پیدا شد هشدار دهید
تلفیقی. بررسی در لیست روش ها در مرحله نهایی انجام می شود
تلفیقی. علاوه بر این، برای هر انتخابگر که در a ظاهر می شود، یک بررسی انجام می شود
عبارت "@selector(...)" و متد مربوط به آن انتخابگر بوده است
در طول تدوین یافت شد. زیرا این بررسی ها جدول روش را فقط در انتها اسکن می کنند
از تدوین، اگر مرحله نهایی تدوین باشد، این هشدارها تولید نمی شود
به دست نیامده، برای مثال به این دلیل که در حین کامپایل خطایی پیدا شد، یا به این دلیل که
-fsyntax-only گزینه در حال استفاده است
-Wstrict-Selector-Match (فقط Objective-C و Objective-C++)
اگر چندین روش با آرگومان و/یا انواع برگشتی متفاوت برای a یافت شد هشدار دهید
هنگام تلاش برای ارسال پیام با استفاده از این انتخابگر به گیرنده، انتخابگر داده می شود
"id" یا "Class" را تایپ کنید. وقتی این پرچم خاموش است (که رفتار پیش فرض است)،
کامپایلر چنین هشدارهایی را حذف میکند، اگر تفاوتهای یافت شده به انواعی که اشتراکگذاری میکنند محدود شود
به همان اندازه و تراز
-Wundeclared-Selector (فقط Objective-C و Objective-C++)
در صورت یافتن عبارت «@selector(...)» که به یک انتخابگر اعلام نشده اشاره دارد، هشدار دهید. آ
انتخابگر اعلام نشده در نظر گرفته می شود اگر هیچ روشی با آن نام قبلاً اعلام نشده باشد
عبارت "@selector(...)"، یا به طور صریح در یک @interface یا @protocol
اعلامیه، یا به طور ضمنی در یک بخش @implementation. این گزینه همیشه کار می کند
به محض اینکه عبارت «@selector(...)» پیدا شد، آن را بررسی میکند -انتخاب کننده فقط
بررسی های خود را در مرحله نهایی تدوین انجام می دهد. این نیز کدگذاری را اجرا می کند
قرارداد سبک که متدها و انتخابگرها باید قبل از استفاده اعلام شوند.
-print-objc-runtime-info
هدر C را ایجاد کنید که بزرگترین ساختاری را که در صورت وجود مقدار ارسال شده است را توصیف می کند.
گزینه به کنترل تشخیصی پیام ها قالب بندی
به طور سنتی، پیام های تشخیصی بدون توجه به دستگاه خروجی فرمت می شوند
جنبه (به عنوان مثال عرض آن، ...). می توانید از گزینه های توضیح داده شده در زیر برای کنترل استفاده کنید
الگوریتم قالببندی برای پیامهای تشخیصی، به عنوان مثال چند کاراکتر در هر خط، چند بار
اطلاعات مکان منبع باید گزارش شود. توجه داشته باشید که برخی از جلوه های زبان ممکن است
این گزینه ها را رعایت نکنید
-fmessage-length=n
سعی کنید پیام های خطا را طوری قالب بندی کنید که در خطوط حدودی قرار بگیرند n شخصیت ها.
پیش فرض 72 کاراکتر برای g ++ و 0 برای بقیه قسمت های جلویی پشتیبانی شده توسط
شورای همکاری خلیج فارس اگر n صفر است، پس هیچ خط پیچی انجام نمی شود. هر پیغام خطا روی a ظاهر می شود
تک خط
-fdiagnostics-show-location=یک بار
فقط در حالت بسته بندی خط معنادار است. به خبرنگار پیام های تشخیصی دستور می دهد
اطلاعات مکان منبع را منتشر می کند یک بار; یعنی در صورتی که پیام خیلی طولانی باشد که مناسب نباشد
روی یک خط فیزیکی واحد و باید پیچیده شود، مکان منبع منتشر نخواهد شد
(به عنوان پیشوند) دوباره، بارها و بارها، در خطوط ادامه بعدی. این است
رفتار پیش فرض
-fdiagnostics-show-location=هر خط
فقط در حالت بسته بندی خط معنادار است. به خبرنگار پیام های تشخیصی دستور می دهد
همان اطلاعات مکان منبع (به عنوان پیشوند) را برای خطوط فیزیکی ایجاد می کند
از فرآیند شکستن پیامی که آنقدر طولانی است که در یک خط قرار نمی گیرد.
-fdiagnostics-color[=WHEN]
-fno-diagnostics-color
از رنگ در تشخیص استفاده کنید. WHEN is هرگز, همیشه، یا خودکار. پیش فرض است هرگز if
GCC_COLORS متغیر محیطی در محیط وجود ندارد و خودکار در غیر این صورت.
خودکار به معنای استفاده از رنگ تنها زمانی است که خطای استاندارد ترمینال باشد. فرم ها
-fdiagnostics-color و -fno-diagnostics-color نام مستعار برای
-fdiagnostics-color=همیشه و -fdiagnostics-color=هرگزبود.
رنگ ها توسط متغیر محیطی تعریف می شوند GCC_COLORS. مقدار آن یک کولون است-
فهرستی از قابلیتها جدا شده و زیررشتههای نمایش گرافیکی (SGR) را انتخاب کنید. SGR
دستورات توسط ترمینال یا شبیه ساز ترمینال تفسیر می شوند. (به بخش در مراجعه کنید
مستندات پایانه متنی شما برای مقادیر مجاز و معانی آنها به عنوان
ویژگی های کاراکتر.) این مقادیر زیر رشته ای اعداد صحیح در نمایش اعشاری هستند
و می توان با نقطه ویرگول الحاق کرد. مقادیر رایج برای الحاق عبارتند از 1 برای
جسورانه ، 4 برای خط کشی، 5 برای پلک زدن، 7 برای معکوس، 39 برای رنگ پیش زمینه پیش فرض، 30
به 37 برای رنگ های پیش زمینه، 90 به 97 برای رنگ های پیش زمینه حالت 16 رنگ، 38؛ 5؛ 0 به
38؛ 5؛ 255 برای رنگ های پیش زمینه 88 رنگ و 256 رنگ، 49 برای پس زمینه پیش فرض
رنگ ، 40 به 47 برای رنگ های پس زمینه، 100 به 107 برای رنگ های پس زمینه حالت 16 رنگ،
و 48؛ 5؛ 0 به 48؛ 5؛ 255 برای رنگ های پس زمینه 88 رنگ و 256 رنگ.
به طور پیش فرض 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 برای خطا: نشانگرها.
"هشدار="
زیر رشته SGR برای هشدار: نشانگرها.
"توجه"
زیر رشته SGR برای یادداشت: نشانگرها.
"caret="
زیر رشته SGR برای خط کارت.
"منبع = "
زیر رشته SGR برای اطلاعات مکان، فایل: خط or فایل:خط:ستون و غیره.
" نقل قول "
زیر رشته SGR برای اطلاعات چاپ شده در داخل نقل قول.
-fno-diagnostics-show-option
بهطور پیشفرض، هر تشخیصی که منتشر میشود شامل متنی است که گزینه خط فرمان را نشان میدهد
که مستقیماً تشخیص را کنترل می کند (اگر چنین گزینه ای برای تشخیصی شناخته شده باشد
دستگاه). مشخص کردن -fno-diagnostics-show-option پرچم آن را سرکوب می کند
رفتار.
-fno-diagnostics-show-caret
بهطور پیشفرض، هر تشخیصی صادر شده شامل خط منبع اصلی و یک علامت «^» است.
نشان دهنده ستون این گزینه این اطلاعات را مخفی می کند.
گزینه به درخواست or سرکوب کردن هشدارها
هشدارها پیامهای تشخیصی هستند که ساختارهایی را گزارش میکنند که ذاتاً نیستند
اشتباه است اما خطرناک است یا نشان می دهد که ممکن است خطایی وجود داشته باشد.
گزینههای مستقل از زبان زیر هشدارهای خاصی را فعال نمیکنند، اما آن را کنترل میکنند
انواع تشخیص های تولید شده توسط GCC.
-fsyntax-only
کد را برای خطاهای نحوی بررسی کنید، اما کاری فراتر از آن انجام ندهید.
-fmax-errors=n
حداکثر تعداد پیام های خطا را محدود می کند n، در آن مرحله GCC به جای وثیقه نجات می یابد
از تلاش برای ادامه پردازش کد منبع. اگر n 0 است (پیش فرض)،
هیچ محدودیتی در تعداد پیام های خطای تولید شده وجود ندارد. اگر -Wfatal-خطاها همچنین
مشخص شد، پس -Wfatal-خطاها بر این گزینه ارجحیت دارد.
-w همه پیام های هشدار را مهار کنید.
-خطا
همه هشدارها را به خطا تبدیل کنید.
-خطا=
اخطار مشخص شده را به خطا تبدیل کنید. مشخص کننده یک هشدار اضافه شده است.
مثلا -خطا=سوئیچ اخطارهای کنترل شده توسط -سوئیچ به اشتباهات
این سوئیچ شکل منفی به خود می گیرد که برای نفی استفاده می شود -خطا برای هشدارهای خاص؛
مثلا -Wno-error=switch می سازد -سوئیچ هشدارها خطا نباشند، حتی زمانی که -خطا
در عمل است
پیام هشدار برای هر هشدار قابل کنترل شامل گزینه ای است که کنترل می کند
اخطار. سپس می توان از آن گزینه استفاده کرد -خطا= و -Wno-error= همانطور که شرح داده شد
در بالا. (چاپ گزینه موجود در پیام هشدار را می توان با استفاده از
-fno-diagnostics-show-option پرچم.)
توجه داشته باشید که مشخص کردن -خطا=فو به طور خودکار دلالت می کند -Wفواست. با این حال، -Wno-error=فو
چیزی دلالت نمی کند
-Wfatal-خطاها
این گزینه باعث می شود که کامپایلر در اولین خطای رخ داده، کامپایل را متوقف کند
به جای تلاش برای ادامه دادن و چاپ پیام های خطای بیشتر.
شما می توانید بسیاری از هشدارهای خاص را با گزینه هایی که با آنها شروع می شود درخواست کنید -W، به عنوان مثال
-حرفه ای درخواست هشدار در مورد اعلامیه های ضمنی. هر یک از این هشدارهای خاص
گزینه ها نیز شروعی شکل منفی دارند -نه- برای خاموش کردن هشدارها؛ مثلا،
-غیر ضمنی. این راهنما فقط یکی از دو فرم را فهرست می کند، هر کدام که پیش فرض نباشد.
برای گزینه های بیشتر مربوط به زبان نیز مراجعه کنید ++C گفتار گزینه و هدف-C
و Objective-C++ گفتار گزینه.
هنگامی که یک گزینه هشدار ناشناخته درخواست می شود (به عنوان مثال، -Wunknown-هشدار، GCC یک را منتشر می کند
تشخیصی مبنی بر عدم شناسایی گزینه. با این حال، اگر -نه- فرم استفاده می شود،
رفتار کمی متفاوت است: هیچ تشخیصی برای آن تولید نشده است -هشدار ناشناخته
مگر اینکه تشخیص های دیگری تولید شود. این امکان استفاده از جدید را فراهم می کند -نه- گزینه های
با کامپایلرهای قدیمی، اما اگر مشکلی پیش بیاید، کامپایلر هشدار می دهد که ناشناخته است
گزینه موجود است
-پدانتیک
-پدانتیک
همه اخطارهای مورد نیاز ISO C و ISO C++ را صادر کنید. همه برنامه هایی که
از پسوندهای ممنوعه و برخی برنامه های دیگر که از ISO C و ISO پیروی نمی کنند استفاده کنید
C++. برای ISO C، از نسخه استاندارد ISO C که توسط هر کدام مشخص شده است پیروی می کند -std
گزینه استفاده شده
برنامه های معتبر ISO C و ISO C++ باید با یا بدون این گزینه به درستی کامپایل شوند
(اگرچه تعداد کمی از آنها نیاز دارند -ansi یا یک -std گزینه ای که نسخه مورد نیاز را مشخص می کند
ISO C). با این حال، بدون این گزینه، پسوندهای گنو و سنتی C و
ویژگی های C++ نیز پشتیبانی می شوند. با این گزینه رد می شوند.
-پدانتیک برای استفاده از کلیدواژه های جایگزین که پیام های هشدار دهنده ایجاد نمی کند
نام ها با شروع و پایان می یابند __. هشدارهای pedantic نیز در بیان غیرفعال هستند
که به دنبال "__extension__" است. با این حال، فقط فایل های هدر سیستم باید از اینها استفاده کنند
راه های فرار؛ برنامه های کاربردی باید از آنها اجتناب کنند.
برخی از کاربران سعی می کنند استفاده کنند -پدانتیک برای بررسی برنامه ها از نظر انطباق دقیق ISO C. آنها
به زودی متوجه می شوند که آن چیزی را که آنها می خواهند انجام نمی دهد: برخی از روش های غیر ISO را پیدا می کند،
اما نه همه --- فقط آنهایی که برای آنها ISO C نیاز یک تشخیصی، و برخی دیگر برای
که تشخیص اضافه شده است.
یک ویژگی برای گزارش هر گونه شکست در انطباق با ISO C ممکن است در برخی موارد مفید باشد.
اما به کار اضافی قابل توجهی نیاز دارد و کاملاً متفاوت خواهد بود
-پدانتیک. ما برنامه ای برای پشتیبانی از چنین ویژگی در آینده نزدیک نداریم.
جایی که استاندارد مشخص شده با -std نشان دهنده یک گویش بسط یافته گنو از C، مانند
gnu90 or gnu99، مربوطه وجود دارد پایه استاندارد، نسخه ISO C که در آن
گویش توسعه یافته گنو مبتنی است. هشدارها از -پدانتیک در جایی که هستند داده می شود
توسط استاندارد پایه مورد نیاز است. (این گونه هشدارها منطقی نیست
فقط برای ویژگی هایی که در گویش مشخص شده گنو C نیستند، زیرا طبق تعریف گنو
لهجه های C شامل تمام ویژگی هایی است که کامپایلر با گزینه داده شده پشتیبانی می کند و
چیزی برای هشدار وجود نخواهد داشت.)
-اشتباهات
پسندیدن -پدانتیک، با این تفاوت که خطاها به جای هشدار تولید می شوند.
-دیو
این همه هشدارها را در مورد ساخت و سازهایی که برخی از کاربران در نظر می گیرند فعال می کند
مشکوک است، و اجتناب از آنها (یا اصلاح آنها برای جلوگیری از هشدار) آسان است، حتی در
در ارتباط با ماکروها این همچنین برخی از هشدارهای خاص زبان را که شرح داده شده اند فعال می کند
in ++C گفتار گزینه و هدف-C و Objective-C++ گفتار گزینه.
-دیو پرچم های هشدار زیر را روشن می کند:
-وادرس -محدوده های جنگی (فقط با -O2) -Wc++11-compat -Wchar-مشترک ها
-Wenum-مقایسه کنید (در C/ObjC؛ این به طور پیش فرض در C++ روشن است) -Wimplicit-int (C و
فقط هدف-C) -Wimplicit-function-declaration (فقط C و Objective-C) -کامنت کنید
-فرمت -Wmain (فقط برای C/ObjC و مگر اینکه -مناسب) -Wmaybe-unitialized
پرانتزهای Wmissing (فقط برای C/ObjC) -بدون هیچ -Wopenmp-simd -پرانتزها
-Wpointer-Sign -Wreorder - نوع چرخشی -توالی-نقطه -Wsign-مقایسه کنید (فقط در C++)
Wstrict-aliasing -Wstrict-overflow=1 -سوئیچ Wtrigraphs -Wunitarized
-Wunknown-pragmas -Wunused-function Wunused-برچسب -ارزش استفاده نشده -Wunused-متغیر
-Wvolatile-register-var
توجه داشته باشید که برخی از پرچم های هشدار به طور ضمنی نشان داده نمی شوند -دیو. برخی از آنها هشدار می دهند
سازه هایی که کاربران عموماً آنها را مشکوک نمی دانند، اما کدام
گاهی اوقات ممکن است بخواهید بررسی کنید؛ دیگران در مورد ساخت و سازهایی که هستند هشدار می دهند
اجتناب از آن در برخی موارد ضروری یا سخت است و هیچ راه ساده ای برای اصلاح آن وجود ندارد
کدی برای سرکوب هشدار برخی از آنها توسط -وکسترا اما بسیاری از آنها
باید به صورت جداگانه فعال شود.
-وکسترا
این برخی از پرچم های هشدار اضافی را فعال می کند که توسط آنها فعال نشده اند -دیو. (از این گزینه استفاده شده است
به نام -W. نام قدیمیتر هنوز پشتیبانی میشود، اما نام جدیدتر بیشتر است
توصیفی.)
-وکلوببر شده -جسم خیس نادیده گرفته شده واجد شرایط Wmissing-field-initializers
-Wmissing-پارامتر-نوع (فقط C) -Wold-style-اعلامیه (فقط C) -Woverride-init
-Wsign-مقایسه کنید Wtype-Limits -Wunitarized -پارامتر Wunused (فقط با -استفاده نشده or
-دیو) پارامتر -Wunused-but-set (فقط با -استفاده نشده or -دیو)
گزینه -وکسترا همچنین پیام های هشدار را برای موارد زیر چاپ می کند:
یک اشاره گر با عدد صحیح صفر با مقایسه می شود <, <=, >، یا >=.
· (فقط C++) شمارشگر و غیر شمارشگر هر دو در یک شرطی ظاهر می شوند
اصطلاح.
· (فقط C++) پایگاه های مجازی مبهم.
· (فقط C++) اشتراک آرایه ای که اعلام شده است ثبت نام.
· (فقط C++) گرفتن آدرس متغیری که اعلام شده است ثبت نام.
· (فقط C++) یک کلاس پایه در سازنده کپی کلاس مشتق شده مقداردهی اولیه نمی شود.
-Wchar-مشترک ها
اگر زیرنویس آرایه دارای نوع "char" باشد هشدار دهید. این یک علت رایج خطا است، به عنوان
برنامه نویسان اغلب فراموش می کنند که این نوع در برخی از ماشین ها امضا شده است. این هشدار است
فعال شده توسط -دیو.
-کامنت کنید
هر زمان که یک دنباله شروع نظر اخطار کنید /* ظاهر می شود در a /* نظر دهید، یا هر زمان که الف
بک اسلش-Newline در یک ظاهر می شود // اظهار نظر. این هشدار توسط -دیو.
-بدون پوشش-عدم تطابق
در صورت عدم تطابق نمایههای بازخورد هنگام استفاده از آن هشدار دهید -fprofile-use گزینه. اگر یک
فایل منبع بین کامپایل با تغییر می کند -fprofile-gen و با -fprofile-use,
فایلهای دارای بازخورد نمایه ممکن است با فایل منبع مطابقت نداشته باشند و GCC نمیتواند
از اطلاعات بازخورد نمایه استفاده کنید به طور پیش فرض، این هشدار فعال است و فعال است
به عنوان یک خطا تلقی می شود. -بدون پوشش-عدم تطابق می توان برای غیرفعال کردن هشدار یا
-Wno-error=پوشش-عدم تطابق می توان از آن برای غیرفعال کردن خطا استفاده کرد. غیرفعال کردن خطا
زیرا این اخطار می تواند منجر به بهینه سازی ضعیف کد شود و فقط در مورد مفید است
تغییرات بسیار جزئی مانند رفع اشکال در یک پایگاه کد موجود. کاملا غیر فعال کردن
هشدار توصیه نمی شود
-Wno-cpp
(فقط C، Objective-C، C++، Objective-C++ و Fortran)
پیام های هشدار صادر شده توسط دستورالعمل های "#warning" را سرکوب کنید.
-ترفیع دوگانه (فقط C، C++، Objective-C و Objective-C++)
هنگامی که مقداری از نوع "float" به طور ضمنی به "دو برابر" ارتقا داده می شود، هشدار دهید. CPU ها
با یک واحد ممیز شناور 32 بیتی "تک دقیق" "float" را در سخت افزار پیاده سازی می کند،
اما "دو" را در نرم افزار شبیه سازی کنید. در چنین ماشینی، انجام محاسبات با استفاده از
مقادیر "دو" به دلیل سربار مورد نیاز برای نرم افزار بسیار گران تر است
تقلید
انجام محاسبات تصادفی با "دبل" آسان است زیرا ممیز شناور است
لفظ ها به طور ضمنی از نوع «دوگانه» هستند. به عنوان مثال، در:
منطقه شناور (شعاع شناور)
{
بازگشت 3.14159 * شعاع * شعاع.
}
کامپایلر کل محاسبات را با "دبل" انجام می دهد زیرا ممیز شناور است
تحت اللفظی یک "دو" است.
-فرمت
-Wformat=n
تماس های "printf" و "scanf" و غیره را بررسی کنید تا مطمئن شوید که آرگومان های ارائه شده
دارای انواع مناسب با رشته فرمت مشخص شده و تبدیل ها هستند
مشخص شده در رشته فرمت منطقی است. این شامل توابع استاندارد و
بقیه با ویژگی های قالب مشخص شده اند، در "printf"، "scanf"، "strftime" و
"strfmon" (یک پسوند X/Open، نه در استاندارد C) خانواده ها (یا دیگر هدف-
خانواده های خاص). کدام توابع بدون داشتن ویژگی های قالب بررسی می شوند
مشخص شده به نسخه استاندارد انتخاب شده و چنین بررسی هایی از توابع بستگی دارد
بدون ویژگی مشخص شده توسط غیرفعال می شوند -مناسب or -فنو ساخته شده است.
فرمت ها با ویژگی های قالب پشتیبانی شده توسط GNU libc نسخه 2.2 بررسی می شوند.
اینها شامل تمام ویژگی های ISO C90 و C99 و همچنین ویژگی های Single Unix می شود
مشخصات و برخی پسوندهای BSD و GNU. سایر پیاده سازی های کتابخانه ممکن است این کار را انجام ندهند
پشتیبانی از همه این ویژگی ها؛ GCC از هشدار در مورد ویژگی هایی که فراتر از آن هستند پشتیبانی نمی کند
محدودیت های یک کتابخانه خاص با این حال، اگر -پدانتیک با استفاده می شود -فرمت,
هشدارهایی در مورد ویژگی های فرمت داده می شود که در نسخه استاندارد انتخاب شده نیست (اما نه
برای فرمت های "strfmon"، زیرا آنها در هیچ نسخه ای از استاندارد C نیستند).
-Wformat=1
-فرمت
گزینه -فرمت برابر است با -Wformat=1و -فرمت Wno برابر است با
-Wformat=0. پس از -فرمت همچنین آرگومان های فرمت تهی را برای چندین مورد بررسی می کند
توابع، -فرمت نیز دلالت دارد -بدون هیچ. برخی از جنبه های این سطح از قالب
بررسی را می توان با گزینه های زیر غیرفعال کرد: -Wno-format-contains-nul,
-Wno-format-extra-argsو -فرمت-Wno-طول صفر. -فرمت توسط فعال می شود
-دیو.
-Wno-format-contains-nul
If -فرمت مشخص شده است، در مورد رشته های قالب حاوی بایت های NUL هشدار ندهید.
-Wno-format-extra-args
If -فرمت مشخص شده است، در مورد آرگومان های اضافی به "printf" یا هشدار ندهید
تابع قالب "scanf". استاندارد C مشخص می کند که چنین آرگومان هایی هستند
نادیده گرفته شد
جایی که آرگومان های استفاده نشده بین آرگومان های استفاده شده قرار می گیرند که با آنها مشخص شده اند $
مشخصات شماره عملوند، معمولاً هشدارها هنوز داده می شود، زیرا
پیاده سازی نمی تواند بداند چه نوع را به "va_arg" منتقل کند تا از موارد استفاده نشده عبور کند
استدلال ها با این حال، در مورد فرمت های "scanf"، این گزینه سرکوب می کند
هشدار در صورتی که آرگومان های استفاده نشده همه نشانگر هستند، از یونیکس منفرد
مشخصات می گوید که چنین آرگومان های استفاده نشده مجاز هستند.
-فرمت-Wno-طول صفر
If -فرمت مشخص شده است، در مورد فرمت های با طول صفر هشدار ندهید. استاندارد C
مشخص می کند که فرمت های با طول صفر مجاز هستند.
-Wformat=2
فعال -فرمت به علاوه بررسی های فرمت اضافی در حال حاضر معادل -فرمت
-Wformat-غیر تحت اللفظی -Wformat-security -Wformat-y2k.
-Wformat-غیر تحت اللفظی
If -فرمت مشخص شده است، همچنین اگر رشته قالب یک رشته واقعی نیست هشدار دهید
و بنابراین نمی توان آن را بررسی کرد، مگر اینکه تابع قالب آرگومان های قالب خود را به عنوان
یک "va_list".
-Wformat-security
If -فرمت مشخص شده است، همچنین در مورد استفاده از توابع قالبی که نشان می دهند هشدار می دهد
مشکلات امنیتی احتمالی در حال حاضر، این هشدار در مورد تماس به "printf" و
توابع "scanf" که در آن رشته قالب یک رشته واقعی نیست و وجود ندارد
آرگومان های قالب بندی، مانند "printf (foo);". این ممکن است یک حفره امنیتی باشد اگر
رشته فرمت از ورودی نامعتبر آمده و حاوی است %n. (این در حال حاضر یک
زیر مجموعه چه -Wformat-غیر تحت اللفظی هشدار می دهد، اما در آینده ممکن است هشدار داده شود
اضافه شده به -Wformat-security که شامل نمی شوند -Wformat-غیر تحت اللفظی.)
توجه: در اوبونتو 8.10 و نسخه های بعدی این گزینه به طور پیش فرض برای C فعال است،
C++، ObjC، ObjC++. برای غیرفعال کردن، استفاده کنید -Wno-format-security، یا همه قالب ها را غیرفعال کنید
هشدار با -Wformat=0. برای کشنده کردن هشدارهای امنیتی قالب، مشخص کنید
-خطا=فرمت-امنیت.
-Wformat-y2k
If -فرمت مشخص شده است، همچنین در مورد فرمت های "strftime" که ممکن است فقط a را ایجاد کنند هشدار دهید
سال دو رقمی
-بدون هیچ
در مورد ارسال یک اشاره گر تهی برای آرگومان هایی که به عنوان نیاز به مقدار غیر تهی علامت گذاری شده اند هشدار دهید
توسط ویژگی تابع "nonnull".
-بدون هیچ گنجانده شده است -دیو و -فرمت. می توان آن را با -بدون تهی
گزینه.
-برخود (فقط C، C++، Objective-C و Objective-C++)
در مورد متغیرهای اولیه که با خودشان مقداردهی اولیه شده اند هشدار دهید. به این نکته توجه کنید
گزینه فقط با -Wunitarized گزینه.
برای مثال، شورای همکاری خلیج فارس فقط در قطعه زیر در مورد عدم مقداردهی اولیه «i» هشدار می دهد
چه زمانی -برخود مشخص شده است:
int f ()
{
int i = i ؛
بازگشت من؛
}
این هشدار توسط -دیو در C++
-Wimplicit-int (فقط C و Objective-C)
هنگامی که یک اعلان یک نوع را مشخص نمی کند هشدار دهید. این هشدار توسط -دیو.
-Wimplicit-function-declaration (فقط C و Objective-C)
هر زمان که یک تابع قبل از اعلام استفاده می شود، یک اخطار بدهید. در حالت C99
(-std=c99 or -std=gnu99)، این اخطار به صورت پیش فرض فعال است و به صورت an تبدیل می شود
خطا توسط -اشتباهات. این هشدار نیز توسط -دیو.
-حرفه ای (فقط C و Objective-C)
مثل -Wimplicit-int و -Wimplicit-function-declaration. این هشدار فعال است
by -دیو.
نادیده گرفته شده واجد شرایط (فقط C و C++)
اگر نوع برگشتی یک تابع دارای یک نوع واجد شرایط مانند "const" باشد، هشدار دهید. برای ISO C
از آنجایی که مقدار بازگردانده شده توسط یک تابع an نیست، چنین نوع واجد شرایطی تأثیری ندارد
ارزش برای C++، اخطار فقط برای انواع اسکالر یا "void" صادر می شود. ISO C
انواع بازگشتی واجد شرایط "باطل" را در تعاریف تابع ممنوع می کند، بنابراین چنین انواع بازگشتی
همیشه حتی بدون این گزینه یک هشدار دریافت کنید.
این هشدار نیز توسط -وکسترا.
-Wmain
هشدار در صورت نوع اصلی مشکوک است اصلی باید تابعی با خارجی باشد
پیوند، بازگشت int، گرفتن آرگومان صفر، دو یا سه آرگومان از
انواع مناسب این اخطار به طور پیش فرض در C++ فعال است و توسط هر کدام فعال می شود
-دیو or -پدانتیک.
پرانتزهای Wmissing
اگر یک مجموع یا اتحاد اولیه به طور کامل براکت نشده است، هشدار دهید. در ادامه مطلب
به عنوان مثال، مقداردهی اولیه برای a به طور کامل پرانتز نیست، اما برای b کاملاً
پرانتز شده این هشدار توسط -دیو در سی.
int a[2][2] = { 0, 1, 2, 3 };
int b [2] [2] = {{0 ، 1} ، {2 ، 3}} ؛
این هشدار توسط -دیو.
-Wmissing-include-dirs (فقط C، C++، Objective-C و Objective-C++)
اگر دایرکتوری شامل ارائه شده توسط کاربر وجود نداشته باشد، هشدار دهید.
-پرانتزها
در صورت حذف پرانتز در زمینه های خاص، مانند زمانی که یک علامت وجود دارد، هشدار دهید
تخصیص در زمینه ای که در آن مقدار صدق مورد انتظار است، یا زمانی که عملگرها تو در تو هستند
که مردم اغلب در مورد تقدم آن گیج می شوند.
همچنین در صورت مقایسه مانند هشدار دهید x<=y<=z ظاهر می شود؛ این معادل است (x<=y ? 1 : 0)
<= z، که تفسیری متفاوت از نمادهای ریاضی معمولی است.
همچنین در مورد ساخت و سازهایی که ممکن است سردرگمی وجود داشته باشد به کدام عبارت "اگر" هشدار دهید
شاخه "دیگر" تعلق دارد. در اینجا نمونه ای از چنین موردی آورده شده است:
{
اگر یک)
اگر (ب)
foo ();
دیگر
بار ()؛
}
در C/C++، هر شاخه «دیگر» به درونی ترین عبارت ممکن «if» تعلق دارد که
در این مثال "اگر (ب)" است. این اغلب آن چیزی نیست که برنامه نویس انتظارش را داشت
در مثال بالا با تورفتگی که برنامه نویس انتخاب کرده نشان داده شده است. وقتی که هست
بالقوه این سردرگمی، GCC زمانی که این پرچم مشخص شده است یک هشدار صادر می کند.
برای حذف اخطار، پرانتزهای صریح را در اطراف درونی ترین عبارت «اگر» اضافه کنید
هیچ راهی وجود ندارد که «دیگر» به «اگر» محصور شود. کد حاصل به نظر می رسد
مثل این:
{
اگر یک)
{
اگر (ب)
foo ();
دیگر
بار ()؛
}
}
همچنین برای استفاده خطرناک از پسوند گنو به "?:" با عملوند وسط حذف شده هشدار دهید.
هنگامی که شرط در عملگر "?": یک عبارت بولی است، مقدار حذف شده است
همیشه 1. اغلب برنامه نویسان انتظار دارند که مقداری باشد که در داخل شرطی محاسبه می شود
بیان به جای
این هشدار توسط -دیو.
-توالی-نقطه
در مورد کدهایی که ممکن است به دلیل نقض توالی معنایی تعریف نشده داشته باشند هشدار دهید
قوانین نقطه در استانداردهای C و C++.
استانداردهای C و C++ ترتیب قرار گرفتن عبارات در برنامه C/C++ را مشخص می کنند
از نظر دنباله نقطه، که نشان دهنده نظم بخشی بین
اجرای بخش هایی از برنامه: آنهایی که قبل از نقطه توالی اجرا شده اند و آن ها
پس از آن اجرا شد. اینها پس از ارزیابی یک عبارت کامل (یک عبارت که
بخشی از یک عبارت بزرگتر نیست)، پس از ارزیابی اولین عملوند a
عملگر "&&"، "||"، "? :" یا "" (کاما)، قبل از فراخوانی یک تابع (اما بعد از
ارزیابی آرگومان های آن و عبارتی که تابع فراخوانی شده را نشان می دهد) و در
مکان های خاص دیگر به غیر از آنچه که توسط قوانین نقطه توالی بیان شده است، ترتیب
ارزیابی عبارات فرعی یک عبارت مشخص نشده است. همه این قوانین
فقط یک ترتیب جزئی را به جای یک مرتبه کلی توصیف کنید، زیرا، برای مثال، اگر دو
توابع در یک عبارت بدون هیچ نقطه توالی بین آنها فراخوانی می شوند
ترتیب فراخوانی توابع مشخص نشده است. با این حال، استانداردها
کمیته حکم داده است که فراخوانی های تابع با هم تداخل ندارند.
مشخص نشده است که چه زمانی بین نقاط توالی تغییرات مقادیر از
اشیاء اثر می گذارند برنامه هایی که رفتارشان به این بستگی دارد، رفتار تعریف نشده ای دارند.
استانداردهای C و C++ مشخص می کنند که "بین نقطه توالی قبلی و بعدی an
مقدار ذخیره شده شی باید حداکثر یک بار با ارزیابی یک تغییر یابد
اصطلاح. علاوه بر این، مقدار قبلی فقط برای تعیین مقدار باید خوانده شود
ذخیره شود.". اگر برنامه ای این قوانین را زیر پا بگذارد، نتایج آن بر روی هر مورد خاصی خواهد بود
اجرا کاملا غیر قابل پیش بینی هستند.
نمونه هایی از کد با رفتار تعریف نشده عبارتند از: "a = a++;"، "a[n] = b[n++]" و "a[i++] =
i;". برخی از موارد پیچیده تر با این گزینه تشخیص داده نمی شوند و ممکن است باعث شود
گاهی اوقات نتیجه مثبت کاذب است، اما به طور کلی در آن نسبتاً مؤثر است
تشخیص این نوع مشکل در برنامه ها
استاندارد به گونه ای گیج کننده بیان شده است، بنابراین بحث هایی در مورد دقیق وجود دارد
معنی قواعد نقطه توالی در موارد ظریف. پیوندهایی به بحث های مربوط به
مشکل، از جمله تعاریف رسمی پیشنهادی، ممکن است در صفحه خواندن شورای همکاری خلیج فارس یافت شود،
درhttp://gcc.gnu.org/readings.html>.
این هشدار توسط -دیو برای C و C++.
-Wno-return-local-addr
در مورد برگرداندن یک اشاره گر (یا در C++، یک مرجع) به متغیری که می رود هشدار ندهید
پس از بازگشت تابع خارج از محدوده.
- نوع چرخشی
هر زمان که تابعی با نوع بازگشتی که پیشفرض "int" است، اخطار کنید. همچنین
هشدار در مورد هر عبارت "return" بدون مقدار بازگشتی در تابعی که نوع بازگشت آن وجود دارد
"باطل" نیست (افتادن انتهای بدنه عملکرد بازگشتی در نظر گرفته می شود
بدون مقدار)، و در مورد یک عبارت "return" با یک عبارت در یک تابع
که نوع برگشت آن "باطل" است.
برای C++، یک تابع بدون نوع بازگشت همیشه یک پیام تشخیصی حتی یکنواخت تولید می کند
چه زمانی -از نوع بدون بازگشت مشخص شده است. تنها استثنا هستند اصلی و توابع
در هدرهای سیستم تعریف شده است.
این هشدار توسط -دیو.
-سوئیچ
هر زمان که یک عبارت "switch" دارای شاخصی از نوع شمارش شده و فاقد "مورد" باشد، هشدار دهید.
برای یک یا چند کد نامگذاری شده آن شمارش. (وجود یک "پیش فرض"
برچسب از این هشدار جلوگیری می کند.) برچسب های "case" خارج از محدوده شمارش نیز
هنگام استفاده از این گزینه، هشدارها را تحریک کنید (حتی اگر یک برچسب "پیش فرض" وجود داشته باشد). این
هشدار توسط فعال می شود -دیو.
-Switch-default
هر زمان که عبارت «switch» دارای حالت «پیشفرض» نباشد، هشدار دهید.
-Switch-enum
هر زمان که یک عبارت "switch" دارای شاخصی از نوع شمارش شده و فاقد "مورد" باشد، هشدار دهید.
برای یک یا چند کد نامگذاری شده آن شمارش. برچسب های "مورد" خارج از
محدوده شمارش همچنین هنگام استفاده از این گزینه هشدارهایی را ایجاد می کند. تنها تفاوت
میان -سوئیچ و این گزینه به این صورت است که این گزینه هشداری در مورد حذف شده می دهد
کد شمارش حتی اگر یک برچسب "پیش فرض" وجود داشته باشد.
-Wsync-nand (فقط C و C++)
هنگامی که توابع داخلی "__sync_fetch_and_nand" و "__sync_nand_and_fetch" هستند، هشدار دهید
استفاده شده. این توابع معنایی را در GCC 4.4 تغییر دادند.
Wtrigraphs
در صورت مواجه شدن با سه نموداری که ممکن است معنای برنامه را تغییر دهد، هشدار دهید
(سه نمودارهای داخل نظرات هشدار داده نمی شوند). این هشدار توسط -دیو.
پارامتر -Wunused-but-set
هر زمان که یک پارامتر تابع به آن اختصاص داده شود، اما در غیر این صورت استفاده نشده است (به غیر از
اعلامیه آن).
برای سرکوب این هشدار از استفاده نشده ویژگی.
این هشدار نیز توسط -استفاده نشده با -وکسترا.
-متغیر-استفاده نشده-اما-ست
هر زمان که یک متغیر محلی به آن اختصاص داده شود، اما در غیر این صورت استفاده نشده است (به غیر از آن، هشدار دهید
اعلام). این هشدار توسط -دیو.
برای سرکوب این هشدار از استفاده نشده ویژگی.
این هشدار نیز توسط -استفاده نشده، که توسط فعال می شود -دیو.
-Wunused-function
هر زمان که یک تابع استاتیک اعلام می شود اما تعریف نشده است یا یک تابع غیر خطی است، هشدار می دهد
تابع استفاده نشده است این هشدار توسط -دیو.
Wunused-برچسب
هر زمان که برچسبی اعلام شد اما استفاده نشد هشدار دهید. این هشدار توسط -دیو.
برای سرکوب این هشدار از استفاده نشده ویژگی.
Wunused-local-typedefs (فقط C، Objective-C، C++ و Objective-C++)
وقتی از typedef تعریف شده محلی در یک تابع استفاده نمی شود هشدار دهید. این هشدار است
فعال شده توسط -دیو.
-پارامتر Wunused
هر زمان که یک پارامتر تابع به غیر از اعلان آن استفاده نشود، هشدار دهید.
برای سرکوب این هشدار از استفاده نشده ویژگی.
-نتیجه استفاده نشده است
اگر فراخوان دهنده تابعی که با ویژگی "warn_unused_result" علامت گذاری شده است، هشدار ندهید
از مقدار برگشتی آن استفاده نکنید. پیش فرض است استفاده نشده-نتیجه.
-Wunused-متغیر
هر زمان که یک متغیر محلی یا متغیر ثابت غیر ثابت به غیر از آن استفاده نشود، هشدار دهید
اعلامیه آن این هشدار توسط -دیو.
برای سرکوب این هشدار از استفاده نشده ویژگی.
-ارزش استفاده نشده
هر زمان که عبارتی نتیجه ای را محاسبه می کند که صراحتاً استفاده نمی شود هشدار دهید. سرکوب کردن
این هشدار عبارت استفاده نشده را به از درجه اعتبار ساقط. این شامل یک بیانیه است
یا سمت چپ عبارت کاما که هیچ عوارض جانبی ندارد. برای
به عنوان مثال، عبارتی مانند x[i,j] باعث هشدار می شود، در حالی که x[(باطل)i،j] نمی کند
این هشدار توسط -دیو.
-استفاده نشده
همه موارد بالا -استفاده نشده گزینه های ترکیب شده
برای دریافت اخطار در مورد یک پارامتر تابع استفاده نشده، باید یکی را مشخص کنید
-وکسترا -استفاده نشده (توجه داشته باشید که -دیو دلالت دارد -استفاده نشده) یا به طور جداگانه مشخص کنید
-پارامتر Wunused.
-Wunitarized
در صورت استفاده از یک متغیر خودکار بدون مقداردهی اولیه یا در صورت استفاده از متغیر، هشدار دهید
ممکن است با یک تماس "setjmp" clobber شود. در C++، اگر یک مرجع غیر ایستا یا غیر ایستا
ایستا طراح عضو در یک کلاس بدون سازنده ظاهر می شود.
اگر می خواهید در مورد کدی که از مقدار اولیه متغیر in استفاده می کند هشدار دهید
از مقداردهی اولیه خود استفاده کنید -برخود گزینه.
این اخطارها برای هر یک از عناصر غیر اولیه یا گیجشده ساختار رخ میدهد.
متغیرهای اتحادیه یا آرایه و همچنین برای متغیرهایی که مقدار اولیه اولیه یا clobber شده اند
در کل. آنها برای متغیرها یا عناصر اعلام شده "فرار" رخ نمی دهند. زیرا
این هشدارها به بهینه سازی، متغیرها یا عناصر دقیقی که برای آنها وجود دارد بستگی دارد
هشدارها به گزینه های بهینه سازی دقیق و نسخه GCC مورد استفاده بستگی دارد.
توجه داشته باشید که ممکن است هیچ هشداری در مورد متغیری که فقط برای محاسبه a استفاده می شود وجود نداشته باشد
مقداری که خود هرگز استفاده نمی شود، زیرا چنین محاسباتی ممکن است توسط جریان داده حذف شوند
تجزیه و تحلیل قبل از چاپ هشدارها
-Wmaybe-unitialized
برای یک متغیر خودکار، اگر مسیری از ورودی تابع تا استفاده از وجود داشته باشد
متغیری که مقداردهی اولیه شده است، اما مسیرهای دیگری نیز وجود دارد که
متغیر مقداردهی اولیه نشده است، در صورتی که کامپایلر نتواند آن را ثابت کند، یک هشدار ارسال می کند
مسیرهای بدون مقدار اولیه در زمان اجرا اجرا نمی شوند. این هشدارها اختیاری هستند
زیرا GCC به اندازه کافی هوشمند نیست تا همه دلایلی که ممکن است کد ممکن است درست باشد را ببیند
با وجود اینکه به نظر می رسد خطا دارد. در اینجا یک مثال از چگونگی این اتفاق میافتد:
{
int x ؛
سوئیچ (y)
{
مورد 1: x = 1;
زنگ تفريح؛
مورد 2: x = 4;
زنگ تفريح؛
مورد 3: x = 5;
}
فو (x)؛
}
اگر مقدار "y" همیشه 1، 2 یا 3 باشد، "x" همیشه مقداردهی اولیه می شود، اما GCC
این را نمی داند برای سرکوب اخطار، باید یک مورد پیش فرض ارائه کنید
ادعا(0) یا کد مشابه.
این گزینه همچنین هشدار می دهد که یک متغیر خودکار غیر فرار ممکن است با a تغییر کند
با "longjmp" تماس بگیرید. این هشدارها نیز فقط در بهینه سازی امکان پذیر است
تلفیقی.
کامپایلر فقط تماس های "setjmp" را می بیند. نمی تواند بداند "longjmp" کجا خواهد بود
نامیده شد؛ در واقع، یک کنترل کننده سیگنال می تواند آن را در هر نقطه ای از کد فراخوانی کند. به عنوان یک
در نتیجه، ممکن است یک هشدار دریافت کنید، حتی زمانی که در واقع مشکلی وجود ندارد زیرا "longjmp"
در واقع نمی توان در مکانی که باعث ایجاد مشکل می شود تماس گرفت.
اگر همه عملکردهایی را که استفاده می کنید را اعلام کنید، می توان از برخی هشدارهای جعلی جلوگیری کرد
هرگز به عنوان "noreturn" برنگرد.
این هشدار توسط -دیو or -وکسترا.
-Wunknown-pragmas
در صورت مواجه شدن با دستورالعمل "#pragma" که توسط GCC قابل درک نیست، هشدار دهید. اگر این
از گزینه خط فرمان استفاده می شود، حتی برای پراگم های ناشناخته در سیستم اخطار صادر می شود
فایل های هدر در صورتی که اخطارها فقط توسط اخطارها فعال شوند، اینطور نیست -دیو
گزینه خط فرمان
-Wno-pragmas
در مورد استفاده نادرست از پراگماها، مانند پارامترهای نادرست، نحو نامعتبر یا
تعارض بین پراگماها همچنین ببینید -Wunknown-pragmas.
Wstrict-aliasing
این گزینه فقط زمانی فعال است که fstrict-aliasing فعال است. در مورد کدی که هشدار می دهد
ممکن است قوانین سخت گیرانه ای را که کامپایلر برای بهینه سازی استفاده می کند، بشکند.
اخطار همه موارد را نمیگیرد، اما سعی میکند موارد رایجتر را بگیرد
دام در آن گنجانده شده است -دیو. معادل آن است با -Wstrict-aliasing=3
-Wstrict-aliasing=n
این گزینه فقط زمانی فعال است که fstrict-aliasing فعال است. در مورد کدی که هشدار می دهد
ممکن است قوانین سخت گیرانه ای را که کامپایلر برای بهینه سازی استفاده می کند، بشکند.
سطوح بالاتر مربوط به دقت بالاتر (کمتر مثبت کاذب). سطوح بالاتر
همچنین با تلاش بیشتر، مشابه راه مطابقت دارد -O کار می کند. Wstrict-aliasing is
معادل -Wstrict-aliasing=3.
سطح 1: تهاجمی ترین، سریع ترین، کم دقت ترین. احتمالاً در سطوح بالاتر مفید است
هشدار نده اما fstrict-aliasing همچنان کد را می شکند، زیرا تعداد کمی از موارد نادرست دارد
منفی ها با این حال، مثبت کاذب بسیاری دارد. برای همه تبدیل های اشاره گر هشدار می دهد
بین انواع احتمالاً ناسازگار، حتی اگر هرگز ارجاع داده نشود. در جلو می دود
فقط پایان
سطح 2: تهاجمی، سریع، نه خیلی دقیق. ممکن است هنوز نکات مثبت کاذب زیادی داشته باشد (نه
به اندازه سطح 1، و تعداد کمی منفی کاذب (اما احتمالاً بیشتر از سطح 1).
برخلاف سطح 1، فقط زمانی هشدار می دهد که آدرسی گرفته شود. در مورد انواع ناقص هشدار می دهد.
فقط در قسمت جلو اجرا می شود.
سطح 3 (پیش فرض برای Wstrict-aliasing): باید مثبت کاذب بسیار کم و تعداد کمی داشته باشد
منفی های کاذب زمانی که بهینه سازی فعال است کمی کندتر از سطوح 1 یا 2 است.
از الگوی رایج pun+dereference در قسمت جلو مراقبت می کند:
"*(int*)&some_float". اگر بهینه سازی فعال باشد، در قسمت پشتی نیز اجرا می شود، جایی که
با استفاده از نقاط حساس به جریان اطلاعات، با موارد بیانیه های متعدد سروکار دارد.
فقط زمانی هشدار می دهد که اشاره گر تبدیل شده ارجاع داده نشود. در مورد ناقص هشدار نمی دهد
انواع.
-سرریز مچ دست
-Wstrict-overflow=n
این گزینه فقط زمانی فعال است که -fstrict-سرریز فعال است. در مورد موارد هشدار می دهد
جایی که کامپایلر بر اساس این فرض بهینه سازی می کند که سرریز امضا شده انجام نمی شود
روی دادن. توجه داشته باشید که در مورد همه مواردی که ممکن است کد سرریز شود هشدار نمی دهد: it
فقط در مورد مواردی هشدار می دهد که کامپایلر مقداری بهینه سازی را اجرا می کند. بنابراین این
هشدار بستگی به سطح بهینه سازی دارد.
بهینهسازی که فرض میکند سرریز علامتدار رخ نمیدهد، کاملاً ایمن است
مقادیر متغیرهای درگیر به گونه ای است که سرریز هرگز انجام نمی شود، در واقع،
روی دادن. بنابراین این اخطار به راحتی می تواند یک مثبت کاذب بدهد: یک هشدار در مورد کد
که در واقع مشکلی نیست برای کمک به تمرکز روی مسائل مهم، چندین هشدار
سطوح تعریف شده است. هیچ اخطاری برای استفاده از سرریز امضا شده تعریف نشده صادر نمی شود
هنگام تخمین تعداد تکرارهای مورد نیاز یک حلقه، به ویژه هنگام تعیین
آیا یک حلقه اصلا اجرا می شود یا خیر.
-Wstrict-overflow=1
در مورد مواردی که هم مشکوک هستند و هم اجتناب از آنها آسان است، هشدار دهید. به عنوان مثال، با
-fstrict-سرریز، کامپایلر "x + 1 > x" را به 1 ساده می کند. این سطح از
-سرریز مچ دست توسط فعال می شود -دیو; سطوح بالاتر نیستند و باید باشند
به صراحت درخواست شده است.
-Wstrict-overflow=2
همچنین در مورد موارد دیگری که مقایسه به یک ثابت ساده شده است هشدار دهید. برای
مثال: "abs (x) >= 0". این تنها زمانی می تواند ساده شود -fstrict-سرریز هست در
اثر، زیرا "abs (INT_MIN)" به "INT_MIN" سرریز می شود، که کمتر از صفر است.
-سرریز مچ دست (بدون سطح) همان است -Wstrict-overflow=2.
-Wstrict-overflow=3
همچنین در مورد سایر مواردی که مقایسه ساده شده است هشدار دهید. به عنوان مثال: "x + 1
> 1" به "x > 0" ساده شده است.
-Wstrict-overflow=4
همچنین در مورد سایر ساده سازی هایی که در موارد فوق پوشش داده نمی شود هشدار دهید. برای
به عنوان مثال: "(x * 10) / 5" به "x * 2" ساده شده است.
-Wstrict-overflow=5
همچنین در مورد مواردی که کامپایلر بزرگی یک ثابت را کاهش می دهد هشدار دهید
درگیر مقایسه به عنوان مثال: "x + 2 > y" به "x + 1 >= y" ساده شده است.
این فقط در بالاترین سطح هشدار گزارش می شود زیرا این ساده سازی است
برای بسیاری از مقایسه ها اعمال می شود، بنابراین این سطح هشدار تعداد بسیار زیادی از
مثبت کاذب
-Wsuggest-attribute=[خالص|طراح|بدون بازگشت|قالب]
برای مواردی که افزودن یک ویژگی ممکن است مفید باشد هشدار دهید. صفات در حال حاضر
پشتیبانی شده در زیر ذکر شده است.
-Wsuggest-attribute=خالص
-Wsuggest-attribute=const
-Wsuggest-attribute=noreturn
هشدار در مورد توابعی که ممکن است نامزد ویژگی های "pure"، "const" یا
"بدون بازگشت". کامپایلر فقط برای توابع قابل مشاهده در کامپایل های دیگر هشدار می دهد
واحدها یا (در مورد "خالص" و "const") اگر نتواند این تابع را ثابت کند
به طور عادی برمی گردد. اگر تابعی شامل بی نهایت نباشد، به طور معمول برمی گردد
حلقه یا بازگشت غیرعادی با پرتاب کردن، فراخوانی "abort()" یا به دام انداختن. این
تجزیه و تحلیل نیاز به گزینه دارد -fipa-pure-const، که به طور پیش فرض در فعال است -O و
بالاتر سطوح بهینه سازی بالاتر دقت تحلیل را بهبود می بخشد.
-Wsuggest-attribute=قالب
-Wmissing-format-attribute
در مورد اشاره گرهای تابعی که ممکن است کاندید ویژگی های "format" باشند، هشدار دهید.
توجه داشته باشید که اینها فقط نامزدهای احتمالی هستند، نه مطلق. GCC این را حدس می زند
نشانگرهای تابع با ویژگی های "format" که در انتساب استفاده می شوند،
دستورات مقداردهی اولیه، ارسال پارامتر یا بازگشت باید دارای یک متناظر باشند
ویژگی "format" در نوع حاصل. یعنی سمت چپ
تخصیص یا مقداردهی اولیه، نوع متغیر پارامتر یا بازگشت
نوع تابع حاوی نیز به ترتیب باید دارای ویژگی "format" باشد
برای جلوگیری از هشدار
GCC همچنین در مورد تعاریف تابعی که ممکن است نامزد "قالب" باشند هشدار می دهد.
ویژگی های. باز هم، اینها فقط نامزدهای احتمالی هستند. شورای همکاری خلیج فارس آن "قالب" را حدس می زند
ویژگی ها ممکن است برای هر تابعی که تابعی را فراخوانی می کند مناسب باشد
"vprintf" یا "vscanf"، اما ممکن است همیشه اینطور نباشد، و برخی از توابع
که ویژگی های "قالب" برای آنها مناسب است ممکن است شناسایی نشود.
-محدوده های جنگی
این گزینه فقط زمانی فعال است که -ftree-vrp فعال است (پیش فرض برای -O2 و بالاتر). آی تی
در مورد زیرنویس های آرایه هایی که همیشه خارج از محدوده هستند هشدار می دهد. این هشدار است
فعال شده توسط -دیو.
-Wno-div-by-zero
در مورد تقسیم اعداد صحیح کامپایل بر صفر هشدار ندهید. تقسیم ممیز شناور بر
در مورد صفر هشدار داده نمی شود، زیرا می تواند یک راه قانونی برای به دست آوردن بی نهایت و
NaNs.
Wsystem-headers
پیامهای هشدار را برای ساختارهای موجود در فایلهای هدر سیستم چاپ کنید. هشدارها از
هدرهای سیستم معمولاً سرکوب می شوند، با این فرض که معمولاً این کار را نمی کنند
مشکلات واقعی را نشان می دهد و تنها خواندن خروجی کامپایلر را سخت تر می کند. استفاده كردن
این گزینه خط فرمان به شورای همکاری خلیج فارس میگوید که اخطارهایی را از سرصفحههای سیستم صادر کند، انگار که آنها هشدار میدهند
در کد کاربر رخ داده است. با این حال، توجه داشته باشید که با استفاده از -دیو در ارتباط با این گزینه
میکند نه هشدار در مورد پراگماهای ناشناخته در هدرهای سیستم --- برای آن، -Wunknown-pragmas
همچنین باید استفاده شود
-ترامپولین
در مورد ترامپولین های ایجاد شده برای نشانگرهای توابع تو در تو هشدار دهید.
ترامپولین قطعه کوچکی از داده یا کد است که هنگام اجرا ایجاد می شود
زمان در پشته زمانی که آدرس یک تابع تودرتو گرفته می شود، و
برای فراخوانی غیر مستقیم تابع تودرتو استفاده می شود. برای برخی از اهداف، آن را
فقط از داده ها تشکیل شده است و بنابراین نیازی به درمان خاصی ندارد. ولی،
برای اکثر اهداف، از کد تشکیل شده است و بنابراین به پشته نیاز دارد
قابل اجرا باشد تا برنامه به درستی کار کند.
-Wfloat-برابر
در صورت استفاده از مقادیر ممیز شناور در مقایسه برابری هشدار دهید.
ایده پشت این کار این است که گاهی اوقات (برای برنامه نویس) راحت است
مقادیر ممیز شناور را تقریبی به اعداد واقعی بی نهایت دقیق در نظر بگیرید.
اگر این کار را انجام می دهید، پس باید محاسبه کنید (با تجزیه و تحلیل کد، یا در برخی موارد
به روش دیگر) حداکثر یا حداکثر خطای احتمالی که محاسبات معرفی می کند، و
هنگام انجام مقایسه (و هنگام تولید خروجی، اما این یک
مشکل متفاوت). به ویژه، به جای آزمایش برابری، باید بررسی کنید
برای دیدن اینکه آیا دو مقدار دارای محدوده هایی هستند که همپوشانی دارند یا خیر. و این کار با
عملگرهای رابطه ای، بنابراین مقایسه برابری احتمالاً اشتباه است.
-غیر سنتی (فقط C و Objective-C)
در مورد ساختارهای خاصی که در سنتی و ISO C رفتار متفاوتی دارند هشدار دهید
در مورد ساختارهای ISO C که معادل C سنتی ندارند و/یا مشکل ساز هستند هشدار دهید
سازه هایی که باید از آنها اجتناب کرد.
· پارامترهای کلان که در لفظ رشته در بدنه ماکرو ظاهر می شوند. که در
جایگزینی ماکرو سنتی C در لفظ رشته ای انجام می شود، اما در ISO C
انجام نمیدهد.
· در C سنتی، برخی از دستورالعمل های پیش پردازنده وجود نداشت. سنتی
پیش پردازشگرها تنها در صورتی خط را به عنوان یک دستورالعمل در نظر می گیرند # در ستون ظاهر شد
1 در خط. از این رو -غیر سنتی در مورد دستورالعمل هایی هشدار می دهد که C سنتی
می فهمد اما نادیده می گیرد زیرا # به عنوان کاراکتر اول ظاهر نمی شود
خط همچنین به شما پیشنهاد میکند دستورالعملهایی مانند #پراگما توسط
C سنتی با تورفتگی آنها. برخی از پیاده سازی های سنتی این کار را نمی کنند
شناختن #الیف، بنابراین این گزینه پیشنهاد می کند به طور کلی از آن اجتناب کنید.
· یک ماکرو تابع مانند که بدون آرگومان ظاهر می شود.
· عملگر unary plus.
· U پسوند ثابت عدد صحیح یا the F or L پسوندهای ثابت ممیز شناور
(C سنتی از این پشتیبانی می کند L پسوند روی ثابت های عدد صحیح.) به این ها توجه کنید
پسوندها در ماکروهای تعریف شده در هدرهای سیستم اکثر سیستم های مدرن ظاهر می شوند.
به عنوان مثال _MIN/max ماکروها در " استفاده از این ماکروها در کد کاربر ممکن است
به طور معمول منجر به هشدارهای جعلی می شود، با این حال پیش پردازنده یکپارچه GCC
زمینه کافی برای جلوگیری از هشدار در این موارد.
· یک تابع در یک بلوک خارجی اعلام شده و پس از پایان استفاده می شود
مسدود کردن.
· دستور "switch" دارای یک عملوند از نوع "long" است.
· یک اعلان تابع غیر «استاتیک» از یک «ایستا» پیروی می کند. این سازه نیست
توسط برخی از کامپایلرهای سنتی C پذیرفته شده است.
· نوع ISO یک ثابت عدد صحیح دارای عرض یا علامت متفاوت با آن است
نوع سنتی این هشدار فقط در صورتی صادر می شود که پایه ثابت ده باشد.
یعنی مقادیر هگزادسیمال یا اکتال، که معمولاً الگوهای بیت را نشان می دهند، نیستند
در مورد هشدار داد.
· استفاده از الحاق رشته ISO شناسایی شده است.
· اولیه سازی سنگدانه های اتوماتیک.
· تضاد شناسه با برچسب ها. C سنتی فاقد فضای نام مجزا برای آن است
برچسب ها.
· راه اندازی اتحادیه ها. اگر مقدار اولیه صفر باشد، اخطار حذف می شود.
این کار با این فرض انجام می شود که مقدار اولیه صفر در کد کاربر ظاهر می شود
مشروط به "__STDC__" برای جلوگیری از گم شدن هشدارهای اولیه و اتکا به
مقداردهی اولیه اولیه در حالت سنتی C به صفر می رسد.
· تبدیل توسط نمونه های اولیه بین مقادیر ثابت / ممیز شناور و بالعکس. در
عدم وجود این نمونه های اولیه هنگام کامپایل با C سنتی باعث جدی می شود
چالش ها و مسائل. این زیر مجموعه ای از هشدارهای احتمالی تبدیل است. برای مجموعه کامل
استفاده کنید -تبدیل سنتی.
· استفاده از تعاریف تابع سبک ISO C. این هشدار عمدا است نه صادر شده
برای اعلان های نمونه اولیه یا توابع متغیر زیرا این ویژگی های ISO C است
هنگام استفاده از ماکروهای سازگار سنتی C libiberty در کد شما ظاهر می شود،
"PARAMS" و "VPARAMS". این هشدار برای توابع تو در تو نیز دور زده می شود
زیرا آن ویژگی قبلاً یک برنامه افزودنی GCC است و بنابراین مربوط به آن نیست
سازگاری سنتی C
-تبدیل سنتی (فقط C و Objective-C)
اگر یک نمونه اولیه باعث تبدیل نوع متفاوتی با آنچه میشود میشود، هشدار دهید
به همان استدلال در غیاب نمونه اولیه. این شامل تبدیل
نقطه ثابت به شناور و بالعکس، و تبدیل تغییر عرض یا
امضای یک آرگومان نقطه ثابت به جز زمانی که همان تبلیغ پیش فرض باشد.
-اعلامیه پس از بیانیه (فقط C و Objective-C)
هنگامی که یک اعلان بعد از یک عبارت در یک بلوک پیدا می شود، هشدار دهید. این سازه، شناخته شده است
از C++، با ISO C99 معرفی شد و به طور پیش فرض در GCC مجاز است. این نیست
توسط ISO C90 پشتیبانی می شود و توسط نسخه های GCC قبل از GCC 3.0 پشتیبانی نمی شد.
-وندف
اگر یک شناسه تعریف نشده در یک ارزیابی شود هشدار دهید #اگر بخشنامه.
Wno-endif-labels
هر زمان که شد هشدار ندهید # دیگر و یا # اندیف با متن دنبال می شوند.
-سایه
هر زمان که یک متغیر محلی یا اعلان نوع متغیر دیگری را تحت الشعاع قرار داد، هشدار دهید،
پارامتر، نوع یا عضو کلاس (در C++)، یا هر زمان که یک تابع داخلی وجود دارد
سایه انداخته توجه داشته باشید که در C++، کامپایلر در صورتی که یک متغیر محلی یک مقدار واضح را سایه بزند، هشدار می دهد
typedef، اما اگر یک struct/class/enum را سایه می اندازد نه.
-بزرگتر از=لن
هر زمان که یک شی بزرگتر از لن بایت تعریف شده است.
-Wframe-larger-than=لن
اخطار اگر اندازه یک قاب تابع بزرگتر از لن بایت ها محاسبات انجام شد
برای تعیین اندازه قاب پشته تقریبی است و محافظه کارانه نیست. واقعی
الزامات ممکن است تا حدودی بیشتر از لن حتی اگر اخطاری دریافت نکنید. که در
علاوه بر این، هر فضایی که از طریق "alloca"، آرایه های با طول متغیر یا مرتبط اختصاص داده شده است
سازه ها توسط کامپایلر در هنگام تعیین اینکه آیا باید a را صادر کنند یا خیر شامل نمی شوند
هشدار
-Wno-free-nonheap-object
هنگام تلاش برای آزاد کردن شیئی که روی پشته تخصیص داده نشده است هشدار ندهید.
-Wstack-usage=لن
اگر میزان استفاده پشته از یک تابع ممکن است بزرگتر از آن باشد، هشدار دهید لن بایت ها محاسبات
انجام شده برای تعیین استفاده پشته محافظه کارانه است. هر فضای اختصاص داده شده از طریق "alloca"،
زمانی که آرایه های با طول متغیر یا ساختارهای مرتبط توسط کامپایلر گنجانده می شود
تعیین اینکه آیا اخطار صادر شود یا خیر.
پیام مطابق با خروجی است -fstack-usage.
· اگر میزان استفاده از پشته کاملاً ثابت باشد اما از مقدار مشخص شده بیشتر باشد، عبارت است از:
هشدار: استفاده از پشته 1120 بایت است
· اگر استفاده از پشته (تا حدی) پویا اما محدود باشد، این است:
هشدار: مصرف پشته ممکن است 1648 بایت باشد
· اگر استفاده از پشته (تا حدی) پویا باشد و محدود نباشد، به این صورت است:
هشدار: استفاده از پشته ممکن است نامحدود باشد
-بهینه سازی های حلقه Wunsafe
اگر حلقه را نمی توان بهینه کرد هشدار دهید زیرا کامپایلر نمی تواند چیزی را روی آن فرض کند
مرزهای شاخص های حلقه با -بهینهسازیهای حلقه امن در صورت کامپایلر هشدار دهید
چنین فرضیاتی را مطرح می کند.
-فرمت Wno-pedantic-ms (فقط اهداف MinGW)
هنگامی که در ترکیب با -فرمت و -پدانتیک بدون پسوند گنو، این
گزینه اخطارهای مربوط به تعیین کننده های عرض قالب "printf" / "scanf" غیر ISO را غیرفعال می کند.
"I32"، "I64" و "I" در اهداف ویندوز استفاده می شود که به زمان اجرا MS بستگی دارد.
-wpointer-arith
در مورد هر چیزی که به "اندازه" یک نوع تابع یا "void" بستگی دارد هشدار دهید. گنو سی
برای راحتی در محاسبات با "void *" به این انواع اندازه 1 اختصاص می دهد.
اشاره گرها و اشاره گرها به توابع. در C++، هنگام انجام عملیات حسابی نیز هشدار دهید
شامل "NULL" است. این هشدار نیز توسط -پدانتیک.
Wtype-Limits
اخطار دهید اگر یک مقایسه همیشه درست است یا همیشه نادرست است به دلیل محدوده محدود
نوع داده، اما برای عبارات ثابت هشدار ندهید. به عنوان مثال، اگر علامتی ندارد، هشدار دهید
متغیر با صفر مقایسه می شود < or >=. این هشدار نیز توسط
-وکسترا.
-Wbad-function-cast (فقط C و Objective-C)
هر زمان که یک فراخوانی تابع به یک نوع غیر منطبق ارسال می شود، هشدار دهید. برای مثال هشدار دهید اگر
"int malloc()" به "هر چیزی *" فرستاده می شود.
-Wc++-compat (فقط C و Objective-C)
در مورد ساختارهای ISO C که خارج از زیرمجموعه مشترک ISO C و ISO هستند هشدار دهید
C++، به عنوان مثال درخواست تبدیل ضمنی از "void *" به یک اشاره گر به غیر"void"
تایپ کنید
-Wc++11-compat (فقط C++ و Objective-C++)
هشدار در مورد ساختارهای ++C که معنی آنها بین ISO C++ 1998 و ISO C++ 2011 متفاوت است،
به عنوان مثال، شناسههایی در ISO C++ 1998 که کلمات کلیدی در ISO C++ 2011 هستند. این هشدار
روشن - تنگ کردن و توسط -دیو.
-استاک
هر زمان که یک اشاره گر فرستاده می شود، هشدار دهید تا یک واجد شرایط نوع از نوع هدف حذف شود.
به عنوان مثال، اگر یک "const char *" به یک "char *" معمولی فرستاده شود، هشدار دهید.
همچنین هنگام ساختن بازیگرانی که یک نوع واجد شرایط را به روشی ناامن معرفی می کند، هشدار دهید. برای
برای مثال، ریختن "char **" به "const char **" ناامن است، مانند این مثال:
/* p مقدار char ** است. */
const char **q = (const char **) p;
/* انتساب رشته فقط خواندنی به const char * درست است. */
*q = "رشته";
/* اکنون نشانگر char** به حافظه فقط خواندنی اشاره می کند. */
**p = 'b';
-Wcast-align
هر زمان که یک اشاره گر به گونه ای پرتاب می شود که تراز مورد نیاز هدف باشد، هشدار دهید
افزایش یافت. به عنوان مثال، اگر یک "char *" به "int *" در ماشینهایی که در آن قرار دارند فرستاده شود هشدار دهید
اعداد صحیح فقط در مرزهای دو یا چهار بایت قابل دسترسی هستند.
-نوشتن رشته ها
هنگام کامپایل C، به ثابت های رشته ای نوع "const char[ بدهید.طول]" به طوری که کپی کردن
آدرس یک به یک اشاره گر غیر "const" "char *" یک هشدار تولید می کند. اینها
اخطارها به شما کمک می کنند در زمان کامپایل کدی را پیدا کنید که می تواند سعی کند در یک رشته بنویسد
ثابت است، اما فقط در صورتی که در استفاده از «const» در اعلانها بسیار دقت کرده باشید
و نمونه های اولیه در غیر این صورت، فقط یک مزاحمت است. به همین دلیل ما درست نکردیم -دیو
این هشدارها را درخواست کنید
هنگام کامپایل کردن ++C، در مورد تبدیل منسوخ شده از حروف الفبای رشته به "char" هشدار دهید.
*". این هشدار به طور پیش فرض برای برنامه های ++C فعال است.
-وکلوببر شده
هشدار برای متغیرهایی که ممکن است توسط LongJMP or vfork. این هشدار نیز هست
فعال شده توسط -وکسترا.
بدون شرط پشتیبانی می شود (فقط C++ و Objective-C++)
هشدار برای ساختارهای با پشتیبانی شرطی (C++11 [intro.defs]).
-تبدیل
برای تبدیلهای ضمنی که ممکن است یک مقدار را تغییر دهند هشدار دهید. این شامل تبدیل ها می شود
بین واقعی و صحیح، مانند "abs (x)" زمانی که "x" "دو" است. تبدیل بین
امضا شده و بدون علامت، مانند "unsigned UI = -1"؛ و تبدیل به انواع کوچکتر مانند
"sqrtf (M_PI)". برای بازیگران صریح مانند "abs ((int) x)" و "ui =" هشدار ندهید
(بدون علامت) -1"، یا اگر مقدار با تبدیل مانند "abs (2.0)" تغییر نکند.
هشدارها در مورد تبدیل بین اعداد صحیح امضا شده و بدون علامت را می توان توسط
با استفاده از -Wno-sign-conversion.
برای C++، همچنین در مورد وضوح اضافه بار گیج کننده برای تبدیل های تعریف شده توسط کاربر هشدار دهید. و
تبدیلهایی که هرگز از عملگر تبدیل نوع استفاده نمیکنند: تبدیلها به «باطل»، همان
نوع، یک کلاس پایه یا یک مرجع به آنها. هشدارها در مورد تبدیل بین امضا شده
و اعداد صحیح بدون علامت به طور پیش فرض در C++ غیرفعال هستند مگر اینکه -Wsign-تبدیل is
به صراحت فعال شده است.
-Wno-conversion-null (فقط C++ و Objective-C++)
برای تبدیل بین انواع "NULL" و غیر اشاره گر هشدار ندهید. -Wconversion-null is
به طور پیش فرض فعال است
-Wzero-as-null-pointer-constant (فقط C++ و Objective-C++)
هنگامی که یک "0" تحت اللفظی به عنوان ثابت نشانگر تهی استفاده می شود، هشدار دهید. این می تواند مفید باشد
تبدیل به "nullptr" در C++11 را تسهیل کنید.
-تاریخ-زمان
هنگامی که ماکروهای "__TIME__"، "__DATE__" یا "__TIMESTAMP__" با آنها مواجه می شوند، هشدار می دهند.
ممکن است از کامپایلهای تکثیرپذیر یکسان به صورت بیتی جلوگیری کند.
حذف - ناقص (فقط C++ و Objective-C++)
هنگام حذف یک اشاره گر به نوع ناقص هشدار دهید، که ممکن است باعث رفتار نامشخص در آن شود
زمان اجرا این هشدار به طور پیش فرض فعال است.
بازیگران بی فایده (فقط C++ و Objective-C++)
هنگامی که یک عبارت به نوع خودش ریخته می شود هشدار دهید.
-جسم خیس
اگر جسم خالی در یک رخ دهد هشدار دهید if, دیگر or do در حین بیانیه. این هشدار است
همچنین توسط -وکسترا.
-Wenum-مقایسه کنید
در مورد مقایسه بین مقادیر انواع مختلف برشمرده شده هشدار دهید. در شماره C++
عدم تطابق در عبارات شرطی نیز تشخیص داده می شود و هشدار توسط فعال می شود
پیش فرض در C این هشدار توسط فعال می شود -دیو.
-Wjump-misses-init (فقط C، Objective-C)
اگر عبارت «goto» یا عبارت «switch» به جلو میپرد، هشدار دهید
مقداردهی اولیه یک متغیر، یا پس از انجام متغیر به سمت برچسب به عقب پرش می کند
اولیه شد. این فقط در مورد متغیرهایی که در زمان شروع اولیه هستند هشدار می دهد
اعلام کرد. این هشدار فقط برای C و Objective-C پشتیبانی می شود. در C++ این نوع
شعبه در هر صورت یک خطا است.
-Wjump-misses-init گنجانده شده است -Wc++-compat. می توان آن را با
-Wno-jump-misses-init گزینه.
-Wsign-مقایسه کنید
هنگامی که مقایسه بین مقادیر علامت دار و بدون علامت ممکن است باعث اشتباه شود هشدار دهید
نتیجه زمانی است که مقدار امضا شده به بدون علامت تبدیل شود. این هشدار نیز فعال است
by -وکسترا; برای دریافت سایر هشدارها -وکسترا بدون این هشدار، استفاده کنید -وکسترا
-Wno-Sign-Compare.
-Wsign-تبدیل
برای تبدیلهای ضمنی که ممکن است علامت یک مقدار صحیح را تغییر دهند، هشدار دهید
اختصاص یک عبارت عدد صحیح علامت دار به یک متغیر عدد صحیح بدون علامت. یک صریح
بازیگران هشدار را خاموش می کند. در C نیز این گزینه توسط -تبدیل.
-Wfloat-تبدیل
برای تبدیلهای ضمنی که دقت یک مقدار واقعی را کاهش میدهند، هشدار دهید. این
شامل تبدیل از واقعی به عدد صحیح، و از دقت بالاتر واقعی به کمتر است
مقادیر واقعی دقیق این گزینه نیز توسط -تبدیل.
-Wsizeof-pointer-memaccess
برای پارامترهای طول مشکوک به رشته ها و توابع داخلی حافظه هشدار دهید
اگر آرگومان از "sizeof" استفاده کند. این هشدار به عنوان مثال در مورد "memset (ptr, 0, sizeof
(ptr));" اگر "ptr" یک آرایه نیست، بلکه یک اشاره گر است و یک راه حل ممکن را پیشنهاد می کند، یا
در مورد "memcpy (&foo، ptr، sizeof (&foo));". این هشدار توسط -دیو.
-Wmemset-transposed-args
برای فراخوانی های مشکوک به تابع داخلی "memset" هشدار دهید، اگر آرگومان دوم باشد
صفر نیست و آرگومان سوم صفر است. این به عنوان مثال @ در مورد "memset (buf, sizeof
buf, 0)" که به احتمال زیاد "memset (buf, 0, sizeof buf)" به جای آن منظور شده است.
تشخیص تنها در صورتی صادر می شود که آرگومان سوم به معنای واقعی کلمه صفر باشد، اگر مقداری باشد
عبارتی که به صفر تا شده باشد، یا مثلاً یک قالب صفر تا فلان نوع و غیره، دور است.
کمتر احتمال دارد که کاربر به اشتباه آرگومان ها را رد و بدل کرده باشد و هیچ هشداری وجود ندارد
منتشر شده است. این هشدار توسط -دیو.
-وادرس
در مورد استفاده های مشکوک از آدرس های حافظه هشدار دهید. اینها شامل استفاده از آدرس a
تابع در یک عبارت شرطی، مانند "void func(void); if (func)" و
مقایسه با آدرس حافظه یک رشته تحت اللفظی، مانند "if (x == "abc")".
چنین استفاده هایی معمولاً نشان دهنده یک خطای برنامه نویس است: آدرس یک تابع همیشه
به درستی ارزیابی می شود، بنابراین استفاده از آنها در یک شرطی معمولاً نشان می دهد که برنامه نویس
پرانتزها را در فراخوانی تابع فراموش کرد. و مقایسه در برابر لفظ رشته
منجر به رفتار نامشخص می شوند و در C قابل حمل نیستند، بنابراین معمولاً نشان می دهند
که برنامه نویس قصد استفاده از "strcmp" را داشته است. این هشدار توسط -دیو.
Wlogical-op
در مورد استفاده مشکوک از عملگرهای منطقی در عبارات هشدار دهید. این شامل استفاده از
عملگرهای منطقی در زمینه هایی که احتمالاً یک عملگر بیت عاقلانه انتظار می رود.
-تجمیع-بازگشت
در صورت تعریف یا فراخوانی توابعی که ساختارها یا اتحادیه ها را برمی گرداند هشدار دهید. (که در
زبانهایی که میتوانید آرایهای را برگردانید، این نیز یک هشدار ایجاد میکند.)
-بهینه سازی های حلقه-تهاجمی-Wno
اگر در یک حلقه با تعداد تکرار ثابت، کامپایلر تعریف نشده را تشخیص دهد هشدار دهید
رفتار در برخی از گزاره ها در طول یک یا چند تکرار.
-Wno-ویژگی ها
اگر از یک "__خصیصه__" غیرمنتظره استفاده می شود، مانند ویژگی های ناشناخته، هشدار ندهید،
ویژگی های تابع اعمال شده بر روی متغیرها، و غیره. این خطاها را متوقف نمی کند
استفاده نادرست از ویژگی های پشتیبانی شده
-Wno-ساخته-کلان-بازتعریف شده است
در صورت بازتعریف برخی از ماکروهای داخلی هشدار ندهید. این هشدارها را برای
تعریف مجدد "__TIMESTAMP__"، "__TIME__"، "__DATE__"، "__FILE__"، و
"__BASE_FILE__".
Wstrict-نمونه های اولیه (فقط C و Objective-C)
اگر تابعی بدون مشخص کردن انواع آرگومان اعلان یا تعریف شود هشدار دهید. (یک
تعریف تابع به سبک قدیمی بدون اخطار مجاز است اگر قبل از آن علامت الف باشد
اعلانی که انواع آرگومان را مشخص می کند.)
-Wold-style-اعلامیه (فقط C و Objective-C)
با توجه به استاندارد C، در یک اعلامیه برای استفاده های منسوخ هشدار دهید. برای
به عنوان مثال، اگر مشخصکنندههای کلاس ذخیرهسازی مانند "static" اولین چیزهای موجود در a نیستند، هشدار دهید
اعلام. این هشدار نیز توسط -وکسترا.
تعریف -Wold-style (فقط C و Objective-C)
در صورت استفاده از تعریف تابع به سبک قدیمی هشدار دهید. اخطار داده می شود حتی اگر وجود داشته باشد
نمونه اولیه قبلی
-Wmissing-پارامتر-نوع (فقط C و Objective-C)
یک پارامتر تابع بدون مشخص کننده نوع در توابع سبک K&R اعلام می شود:
void foo(bar) {}
این هشدار نیز توسط -وکسترا.
-Wmissing-نمونه های اولیه (فقط C و Objective-C)
اگر یک تابع سراسری بدون اعلان نمونه اولیه قبلی تعریف شده باشد هشدار دهید. این
هشدار صادر می شود حتی اگر خود تعریف یک نمونه اولیه ارائه دهد. از این گزینه استفاده کنید
برای شناسایی توابع سراسری که اعلان نمونه مشابهی در a ندارند
فایل هدر این گزینه برای C++ معتبر نیست زیرا همه اعلان های تابع
نمونه های اولیه را ارائه کنید و یک اعلان غیر منطبق به جای اینکه اضافه بار را اعلام کند
مغایرت با اعلامیه قبلی استفاده کنید -Wmissing-اعلامیه ها برای شناسایی گمشده
اعلان ها در C++
-Wmissing-اعلامیه ها
اگر یک تابع سراسری بدون اعلان قبلی تعریف شده باشد هشدار دهید. حتی اگر این کار را انجام دهید
خود تعریف یک نمونه اولیه را ارائه می دهد. از این گزینه برای شناسایی جهانی استفاده کنید
توابعی که در فایل های هدر اعلان نشده اند. در C هیچ اخطاری برای آن صادر نمی شود
توابع با اعلامیه های غیر نمونه اولیه قبلی؛ استفاده کنید -Wmissing-نمونه اولیه تشخیص
نمونه های اولیه گم شده در C++، هیچ هشداری برای الگوهای تابع یا برای صادر نمی شود
توابع درون خطی یا برای توابع در فضای نام ناشناس.
Wmissing-field-initializers
اگر مقداری فیلد در مقداردهی اولیه سازه وجود نداشته باشد، هشدار دهید. به عنوان مثال موارد زیر
کد باعث ایجاد چنین هشداری می شود، زیرا "xh" به طور ضمنی صفر است:
ساختار s { int f, g, h; };
ساختار sx = { 3, 4 };
این گزینه در مورد اولیه سازهای تعیین شده هشدار نمی دهد، بنابراین اصلاحات زیر را انجام دهید
اخطار ایجاد نمی کند:
ساختار s { int f, g, h; };
ساختار sx = { .f = 3، .g = 4 };
این هشدار درج شده است -وکسترا. برای بدست آوردن دیگری -وکسترا اخطار بدون این،
استفاده کنید -وکسترا -Wno-missing-field-initializers.
-Wno-multichar
در صورت ثابت بودن چند نویسه هشدار ندهید ("FOOF") استفاده می شود. معمولاً الف را نشان می دهند
اشتباه تایپی در کد کاربر، زیرا دارای مقادیر تعریف شده توسط پیاده سازی است و نباید باشد
در کدهای قابل حمل استفاده می شود.
غیر عادی شده=
در ISO C و ISO C++، دو شناسه اگر دنباله های متفاوتی از یکدیگر باشند، متفاوت هستند
شخصیت ها. با این حال، گاهی اوقات زمانی که کاراکترها خارج از مجموعه اصلی کاراکترهای ASCII هستند
استفاده می شود، می توانید دو دنباله کاراکتر متفاوت داشته باشید که یکسان به نظر می رسند. برای جلوگیری
سردرگمی، استاندارد ISO 10646 برخی از موارد را مشخص می کند هنجارسازی قوانین که هنگام اعمال
اطمینان حاصل کنید که دو دنباله ای که شبیه به هم هستند به یک دنباله تبدیل می شوند. شورای همکاری خلیج فارس
اگر از شناسه هایی استفاده می کنید که عادی نشده اند، می تواند به شما هشدار دهد. این گزینه
آن هشدار را کنترل می کند.
چهار سطح هشدار وجود دارد که توسط GCC پشتیبانی می شود. پیش فرض است -wnormalized = nfc,
که در مورد هر شناسه ای که در فرم عادی ISO 10646 "C" نیست هشدار می دهد،
NFC. NFC فرم توصیه شده برای اکثر موارد است.
متأسفانه، برخی از کاراکترها در شناسه های ISO C و ISO C++ مجاز هستند
هنگامی که به NFC تبدیل می شوند، در شناسه ها مجاز نیستند. یعنی راهی نیست
برای استفاده از این نمادها در ISO C یا C++ قابل حمل و داشتن تمام شناسه های خود در NFC.
-Wnormalized=id هشدار برای این شخصیت ها را سرکوب می کند. امید است که آینده
نسخه های استانداردهای مربوطه این را اصلاح می کنند، به همین دلیل است که این گزینه درست نیست
پیشفرض.
می توانید با نوشتن اخطار را برای همه کاراکترها خاموش کنید -غیر عادی = هیچکداماست. شما
فقط در صورتی این کار را انجام دهید که از طرح عادی سازی دیگری استفاده می کنید (مانند "D")،
زیرا در غیر این صورت شما به راحتی می توانید اشکالاتی ایجاد کنید که به معنای واقعی کلمه قابل مشاهده نیستند.
برخی از کاراکترها در ISO 10646 معانی متمایزی دارند اما در برخی فونت ها یکسان به نظر می رسند
یا متدولوژی های نمایش، به خصوص زمانی که قالب بندی اعمال شده است. برای مثال
"\u207F"، "SUPERSCRIPT LATIN SMALL LETTER N"، درست مانند یک "n" معمولی نمایش داده می شود که
در یک بالانویس قرار داده شده است. ISO 10646 تعریف می کند NFKC طرح عادی سازی به
همه اینها را نیز به یک فرم استاندارد تبدیل کنید و اگر کد شما وارد نشده باشد، GCC هشدار می دهد
اگر از NFKC استفاده می کنید -Wnormalized=nfkc. این هشدار با هشدار در مورد هر یک قابل مقایسه است
شناسه ای که حاوی حرف O است زیرا ممکن است با رقم 0 اشتباه گرفته شود،
و بنابراین پیشفرض نیست، اما ممکن است به عنوان یک قرارداد کدگذاری محلی مفید باشد
محیط برنامه نویسی را نمی توان برای نمایش مشخص این کاراکترها اصلاح کرد.
-منسوخ شده است
در مورد استفاده از ویژگی های منسوخ هشدار ندهید.
-Wno-منسوخ-اعلامیه
در مورد استفاده از توابع، متغیرها و انواع علامت گذاری شده به عنوان منسوخ شده هشدار ندهید
با استفاده از ویژگی "منسوخ شده".
-سرریز
در مورد سرریز زمان کامپایل در عبارات ثابت هشدار ندهید.
-Wopenmp-simd
اگر مدل هزینه بردارساز OpenMP یا دستورالعمل simd Cilk Plus را لغو کند، هشدار دهید
توسط کاربر تنظیم شده است در -fsimd-cost-model=نامحدود می توان برای آرام کردن مدل هزینه استفاده کرد.
-Woverride-init (فقط C و Objective-C)
اگر یک فیلد اولیه بدون عوارض جانبی هنگام استفاده از تعیین شده لغو شود، هشدار دهید
مقداردهی اولیه
این هشدار درج شده است -وکسترا. برای بدست آوردن دیگری -وکسترا اخطار بدون این،
استفاده کنید -وکسترا -Wno-override-init.
بسته بندی شده
اگر به ساختاری ویژگی packed داده می شود، اما ویژگی packed هیچ مشخصه ای ندارد، هشدار دهید
تأثیر بر طرح یا اندازه سازه. چنین ساختارهایی ممکن است نادرست تراز شوند
سود اندک به عنوان مثال، در این کد، متغیر "fx" در "struct bar" است
نادرست است، حتی اگر «نوار ساختار» خود ویژگی بسته بندی را ندارد:
struct foo {
int x ؛
char a, b, c, d;
} __ ویژگی __ ((بسته بندی شده))؛
نوار ساختار {
char z;
struct foo f;
};
-Wpacked-bitfield-compat
سری های 4.1، 4.2 و 4.3 GCC از ویژگی "packed" در فیلدهای بیتی نوع نادیده می گیرند.
"کاراکتر". این در GCC 4.4 ثابت شده است، اما این تغییر میتواند منجر به تفاوتهایی در آن شود
طرح ساختار GCC به شما اطلاع می دهد که افست چنین فیلدی در GCC تغییر کند
4.4. به عنوان مثال، دیگر یک padding 4 بیتی بین فیلد "a" و "b" در این وجود ندارد
ساختار:
ساختن فو
{
char a:4;
char b:8;
} __ویژگی__ ((بسته بندی شده))؛
این هشدار به طور پیش فرض فعال است. استفاده کنید -Wno-packed-bitfield-compat برای غیرفعال کردن این
هشدار
-پد شده
هشدار می دهد اگر بالشتک در یک ساختار گنجانده شده است، یا برای تراز کردن یک عنصر از
ساختار یا تراز کردن کل ساختار. گاهی اوقات وقتی این اتفاق می افتد ممکن است
برای بازآرایی فیلدهای سازه برای کاهش بالشتک و به همین ترتیب
ساختار کوچکتر
-Wredundant-decls
اگر چیزی بیش از یک بار در یک محدوده اعلام شده است، هشدار دهید، حتی در مواردی که
چند اعلان معتبر است و چیزی را تغییر نمی دهد.
-خارجی ها (فقط C و Objective-C)
در صورت مواجه شدن با اعلان "خارجی" در یک تابع، هشدار دهید.
-Wno-ارثی-variadic-ctor
اخطارهای مربوط به استفاده از سازنده های ارث بری C++11 را در کلاس پایه حذف کنید
به ارث رسیده از دارای یک سازنده متغیر C است. هشدار به طور پیش فرض روشن است زیرا
بیضی ارثی نیست
-وین لاین
اگر تابعی که به عنوان درون خطی اعلام شده است، نمی تواند خطی شود، هشدار دهید. حتی با این
گزینه، کامپایلر در مورد خرابی توابع درون خطی اعلام شده در هشدار نمی دهد
سرصفحه های سیستم
کامپایلر از انواع اکتشافی برای تعیین اینکه آیا a را درون خطی کند یا نه استفاده می کند
عملکرد. به عنوان مثال، کامپایلر اندازه تابع موجود را در نظر می گیرد
inlined و مقدار inlining که قبلاً در تابع فعلی انجام شده است.
بنابراین، تغییرات به ظاهر ناچیز در برنامه منبع می تواند باعث شود
هشدارهای تولید شده توسط -وین لاین ظاهر شدن یا ناپدید شدن
-Wno-invalid-offsetof (فقط C++ و Objective-C++)
سرکوب هشدارها از اعمال جبران ماکرو به نوع غیر POD. مطابق با
استاندارد ISO C++ 1998، اعمال می شود جبران به یک نوع غیر POD تعریف نشده است. که در
با این حال، پیاده سازی های C++ موجود، جبران معمولاً نتایج معنی داری می دهد
حتی زمانی که برای انواع خاصی از انواع غیر POD (مانند ساده ساختار که
تنها به دلیل داشتن سازنده نمی تواند یک نوع POD باشد). این پرچم برای
کاربرانی که از نوشتن کد غیرقابل حمل آگاه هستند و به عمد این کار را انجام داده اند
برای نادیده گرفتن هشدار در مورد آن انتخاب شده است.
محدودیت ها در جبران ممکن است در نسخه بعدی استاندارد C++ آرام شود.
-بازیگرها از بین نرفتن به اشاره گر
اخطارها را از کست به نوع اشاره گر یک عدد صحیح با اندازه متفاوت سرکوب کنید. که در
C++، ارسال به یک نوع اشاره گر با اندازه کوچکتر یک خطا است. بازیگران زمستان به اشاره گر is
به طور پیش فرض فعال است
بدون اشاره گر به غیر بازیگری (فقط C و Objective-C)
اخطارهای ارسالی از یک اشاره گر به یک نوع عدد صحیح با اندازه متفاوت را سرکوب کنید.
-Winvalid-PCH
اگر سرصفحه ای از پیش کامپایل شده در مسیر جستجو یافت شد اما نمی توان از آن استفاده کرد، هشدار دهید.
-طولانی طولانی
هشدار دهید اگر طولانی طولانی نوع استفاده می شود. این توسط هر دو فعال می شود -پدانتیک or -غیر سنتی
در حالت های ISO C90 و C++98. برای ممانعت از پیام های هشدار، استفاده کنید -Wno-long-long.
ماکروهای Wvariadic
در صورت استفاده از ماکروهای متغیر در حالت ISO C90 pedantic یا نحو جایگزین گنو هشدار دهید
زمانی که در حالت pedantic ISO C99 هستید. این پیش فرض است. برای ممانعت از پیام های هشدار، استفاده کنید
Wno-variadic-macros.
-واررگس
در مورد استفاده مشکوک از ماکروهایی که برای مدیریت آرگومان های متغیری مانند استفاده می شود هشدار دهید
va_start. این پیش فرض است. برای ممانعت از پیام های هشدار، استفاده کنید -wno-varargs.
-بردار-عملیات-عملکرد
در صورت عدم اجرای عملیات برداری از طریق قابلیت های SIMD معماری هشدار دهید.
عمدتا برای تنظیم عملکرد مفید است. عملیات برداری قابل پیاده سازی است
"تکه ای"، به این معنی که عملیات اسکالر روی هر بردار انجام می شود
عنصر "در موازی"، به این معنی که عملیات بردار با استفاده از
اسکالر از نوع گسترده تر، که معمولا کارایی بیشتری دارد. و "به عنوان مجرد
اسکالر"، به این معنی که بردار در یک نوع اسکالر قرار می گیرد.
-Wno-Virtual-Move-assign
اخطارهای مربوط به ارث بردن از پایگاه مجازی را با یک حرکت غیر ضروری C++11 سرکوب کنید
اپراتور واگذاری این خطرناک است زیرا اگر پایگاه مجازی در امتداد قابل دسترسی باشد
بیش از یک مسیر، چندین بار جابجا خواهد شد، که می تواند به معنای پایان هر دو شی باشد
در حالت انتقال از اگر عملگر انتساب حرکت برای اجتناب نوشته شده باشد
حرکت از یک شی منتقل شده از، این هشدار را می توان غیر فعال کرد.
-وولا
در صورت استفاده از آرایه با طول متغیر در کد، هشدار دهید. -wno-vla مانع از -پدانتیک
هشدار آرایه طول متغیر
-Wvolatile-register-var
اگر متغیر ثبات فرار اعلام شد هشدار دهید. اصلاح کننده فرار این کار را نمی کند
همه بهینهسازیهایی را که ممکن است خواندن و/یا نوشتن را برای ثبت حذف کنند، مهار کنید
متغیرها این هشدار توسط -دیو.
-Wdisabled-بهینه سازی
اگر مجوز بهینهسازی درخواستی غیرفعال است، هشدار دهید. این هشدار به طور کلی نیست
نشان دهید که مشکلی در کد شما وجود دارد. این فقط نشان می دهد که GCC
بهینه سازها قادر به مدیریت موثر کد نیستند. اغلب، مشکل این است که شما
کد خیلی بزرگ یا خیلی پیچیده است. GCC از بهینه سازی برنامه ها در هنگام بهینه سازی امتناع می ورزد
خود احتمالاً زمان زیادی را می گیرد.
-Wpointer-Sign (فقط C و Objective-C)
برای عبور آرگومان اشاره گر یا تخصیص با نشانه های متفاوت هشدار دهید. این
گزینه فقط برای C و Objective-C پشتیبانی می شود. دلالت بر آن دارد -دیو و با
-پدانتیک، که می توان با آن غیر فعال کرد - نشانگر Wno.
-Wstack-محافظ
این گزینه فقط زمانی فعال است که محافظ چوب فعال است. در مورد عملکردها هشدار می دهد
که در برابر خرد شدن پشته محافظت نمی شوند.
-طبقه های تار
در مورد ثابت های رشته ای که بیشتر از طول "حداقل حداکثر" هستند هشدار دهید
در استاندارد C مشخص شده است. کامپایلرهای مدرن معمولاً ثابت های رشته ای را مجاز می دانند
بسیار طولانی تر از حداقل حد استاندارد هستند، اما برنامه های بسیار قابل حمل باید
از استفاده از رشته های بلندتر خودداری کنید.
محدودیت اعمال می شود بعد از الحاق رشته ثابت، و دنباله را به حساب نمی آورد
NUL. در C90، محدودیت 509 کاراکتر بود. در C99، به 4095 افزایش یافت. C++98 این کار را انجام می دهد
ماکزیمم حداقل هنجاری را مشخص نمی کنیم، بنابراین رشته های طولی را در آن تشخیص نمی دهیم
++ C
این گزینه توسط -پدانتیک، و می توان با آن غیر فعال کرد
رشته های بدون طول.
-ثابت-شناور-بدون پسوند (فقط C و Objective-C)
برای هر ثابت شناوری که پسوند ندارد، هشدار صادر کنید. هنگام استفاده
با Wsystem-headers در مورد چنین ثابت هایی در فایل های هدر سیستم هشدار می دهد.
این می تواند هنگام تهیه کد برای استفاده با پراگما "FLOAT_CONST_DECIMAL64" مفید باشد.
از پسوند ممیز شناور اعشاری تا C99.
گزینه برای اشکال زدایی شما برنامه or GCC
GCC دارای گزینه های ویژه مختلفی است که برای اشکال زدایی برنامه یا GCC شما استفاده می شود:
-g اطلاعات اشکال زدایی را در قالب اصلی سیستم عامل تولید کنید (Stab، COFF،
XCOFF یا DWARF 2). GDB می تواند با این اطلاعات اشکال زدایی کار کند.
در اکثر سیستم هایی که از قالب stabs استفاده می کنند، -g استفاده از اطلاعات دیباگ اضافی را امکان پذیر می کند
که فقط GDB می تواند از آن استفاده کند. این اطلاعات اضافی باعث می شود که اشکال زدایی در GDB بهتر عمل کند اما
احتمالاً باعث می شود دیگر اشکال زداها خراب شوند یا از خواندن برنامه امتناع کنند. اگر شما می خواهید
برای اطمینان از تولید اطلاعات اضافی، استفاده کنید -gstabs+, -gstabs,
-gxcoff+, -gxcoff، یا -gvms (به زیر مراجعه کنید)
GCC به شما امکان استفاده را می دهد -g با -O. میانبرهای گرفته شده توسط کد بهینه شده ممکن است
گاهی اوقات نتایج شگفت انگیزی ایجاد می کنند: برخی از متغیرهایی که اعلام کرده اید ممکن است وجود نداشته باشند
همه؛ جریان کنترل ممکن است برای مدت کوتاهی در جایی که شما انتظارش را نداشتید حرکت کند. برخی اظهارات ممکن است
اجرا نمی شود زیرا آنها نتایج ثابت را محاسبه می کنند یا مقادیر آنها از قبل روی است
دست برخی از دستورات ممکن است در مکان های مختلف اجرا شوند، زیرا آنها خارج شده اند
از حلقه ها
با این وجود، اشکال زدایی خروجی بهینه شده ممکن است. این امر آن را معقول می کند
برای استفاده از بهینه ساز برای برنامه هایی که ممکن است اشکال داشته باشند.
گزینه های زیر زمانی مفید هستند که GCC با قابلیت بیشتر تولید شود
بیش از یک فرمت اشکال زدایی
-gsplit-dwarf
تا حد امکان اطلاعات مربوط به اشکال زدایی کوتوله را در یک فایل خروجی جداگانه جدا کنید
با پسوند dwo. این گزینه به سیستم ساخت اجازه می دهد تا از پیوند دادن فایل ها جلوگیری کند
با اطلاعات رفع اشکال برای مفید بودن، این گزینه به یک دیباگر با قابلیت نیاز دارد
خواندن فایل های .dwo.
-ggdb
اطلاعات اشکال زدایی را برای استفاده توسط GDB تولید کنید. این به معنای استفاده از رساترین است
قالب موجود (DWARF 2، stabs، یا قالب اصلی در صورتی که هیچکدام از اینها نیستند
پشتیبانی می شود)، از جمله پسوندهای GDB در صورت امکان.
-gpubnames
بخشهای .debug_pubnames و .debug_pubtypes را ایجاد کنید.
-ggnu-pubnames
ایجاد بخشهای .debug_pubnames و .debug_pubtypes در قالبی مناسب برای
تبدیل به شاخص GDB این گزینه فقط با پیوند دهنده ای که می تواند مفید است
نسخه 7 شاخص GDB را تولید کنید.
-gstabs
اطلاعات اشکال زدایی را در قالب stabs (در صورت پشتیبانی) بدون GDB تولید کنید
پسوندها این فرمتی است که توسط DBX در اکثر سیستم های BSD استفاده می شود. در MIPS، آلفا و
System V Release 4 این گزینه خروجی اشکال زدایی stabs تولید می کند که اینطور نیست
توسط DBX یا SDB قابل درک است. در سیستم های System V Release 4 این گزینه به GNU نیاز دارد
مونتاژ کننده
-symbols-feliminate-unused-debug-symbols
اطلاعات اشکال زدایی را در قالب stabs (در صورت پشتیبانی) فقط برای نمادها تولید کنید
که در واقع استفاده می شوند.
-femit-class-debug-always
به جای انتشار اطلاعات اشکال زدایی برای کلاس C++ تنها در یک فایل شی،
آن را در تمام فایل های شی با استفاده از کلاس منتشر کنید. این گزینه باید فقط با استفاده شود
اشکال زدایی که نمی توانند روشی را که GCC معمولاً اطلاعات اشکال زدایی را منتشر می کند کنترل کنند
برای کلاس ها زیرا استفاده از این گزینه اندازه اطلاعات اشکال زدایی را افزایش می دهد
به اندازه ضریب دو
-fdebug-types-section
هنگام استفاده از DWARF نسخه 4 یا بالاتر، نوع DIE را می توان در خود قرار داد
بخش ".debug_types" به جای اینکه آنها را بخشی از بخش ".debug_info" کنید. آی تی
قرار دادن آنها در یک بخش Comdat جداگانه کارآمدتر است زیرا پیوند دهنده می تواند پس از آن
موارد تکراری را حذف کنید اما همه مصرف کنندگان DWARF هنوز از بخش های ".debug_types" پشتیبانی نمی کنند
و در برخی از اشیاء ".debug_types" به جای اشکال زدایی کوچکتر، بزرگتر تولید می کند
اطلاعات.
-gstabs+
اطلاعات اشکال زدایی را در قالب stabs (در صورت پشتیبانی) با استفاده از گنو تولید کنید
برنامه های افزودنی فقط توسط دیباگر گنو (GDB) قابل درک است. استفاده از این پسوندها می باشد
به احتمال زیاد باعث از کار افتادن سایر اشکال زداها یا امتناع از خواندن برنامه می شود.
-gcoff
اطلاعات اشکال زدایی را در قالب COFF (در صورت پشتیبانی) تولید کنید. این است
قالب مورد استفاده SDB در اکثر سیستم های System V قبل از System V Release 4.
-gxcoff
اطلاعات اشکال زدایی را در قالب XCOFF تولید کنید (در صورت پشتیبانی). این است
فرمت مورد استفاده توسط دیباگر DBX در سیستم های IBM RS/6000.
-gxcoff+
اطلاعات اشکال زدایی را در قالب XCOFF (در صورت پشتیبانی) با استفاده از گنو تولید کنید
برنامه های افزودنی فقط توسط دیباگر گنو (GDB) قابل درک است. استفاده از این پسوندها می باشد
به احتمال زیاد باعث از کار افتادن سایر اشکال زدا یا امتناع از خواندن برنامه می شود و ممکن است باعث شود
اسمبلرهای غیر از اسمبلر گنو (GAS) با یک خطا از کار می افتند.
-کوتوله-نسخه
اطلاعات اشکال زدایی را در قالب DWARF (در صورت پشتیبانی) تولید کنید. ارزش
نسخه ممکن است 2، 3 یا 4 باشد. نسخه پیش فرض برای اکثر اهداف 4 است.
توجه داشته باشید که با DWARF نسخه 2، برخی از پورت ها نیاز دارند و همیشه از مقداری غیر متناقض استفاده می کنند
پسوند DWARF 3 در جداول باز کردن.
نسخه 4 ممکن است به GDB 7.0 و -fvar-ردیابی-تکالیف برای حداکثر سود
-سوئیچهای grecord-gcc
این سوئیچ باعث می شود که گزینه های خط فرمان مورد استفاده برای فراخوانی کامپایلر که ممکن است
تولید کد را تحت تأثیر قرار دهید تا به ویژگی DW_AT_producer در DWARF اضافه شود
اشکال زدایی اطلاعات گزینه ها با فضاهایی که آنها را از هم جدا می کند به هم پیوسته اند
یکدیگر و از نسخه کامپایلر. همچنین ببینید -فرکورد-gcc-سوئیچ برای دیگری
روش ذخیره گزینه های کامپایلر در فایل شی. این پیش فرض است.
-gno-record-gcc-switches
اضافه کردن گزینههای خط فرمان به ویژگی DW_AT_producer در DWARF را مجاز نکنید
اشکال زدایی اطلاعات
-قطعه-کوتوله
استفاده از افزونههای نسخه استاندارد DWARF جدید نسبت به انتخاب با آن ممنوع است
-کوتوله-نسخه. در بیشتر اهداف با استفاده از پسوندهای DWARF غیر متعارض از بعد
نسخه های استاندارد مجاز است.
-gno-sight-dwarf
اجازه استفاده از پسوندهای نسخه استاندارد DWARF جدید نسبت به انتخاب شده با آن
-کوتوله-نسخه.
-gvms
اطلاعات اشکال زدایی را در قالب اشکال زدایی Alpha/VMS (در صورت پشتیبانی) تولید کنید. این
فرمتی است که توسط DEBUG در سیستم های Alpha/VMS استفاده می شود.
-gسطح
-ggdbسطح
-gstabsسطح
-gcoffسطح
-gxcoffسطح
-gvmsسطح
اطلاعات اشکال زدایی را درخواست کنید و همچنین استفاده کنید سطح برای تعیین میزان اطلاعات در
سطح پیش فرض 2 است.
سطح 0 اصلاً اطلاعات اشکال زدایی تولید نمی کند. بدین ترتیب، -g0 نفی می کند -g.
سطح 1 حداقل اطلاعات را تولید می کند، که برای ایجاد بک تری در قسمت هایی از آن کافی است
برنامه ای که قصد اشکال زدایی آن را ندارید. این شامل توضیحات توابع و
متغیرهای خارجی و جداول شماره خطوط، اما اطلاعاتی در مورد متغیرهای محلی وجود ندارد.
سطح 3 شامل اطلاعات اضافی، مانند تمام تعاریف کلان موجود در
برنامه برخی از دیباگرها هنگام استفاده از توسعه ماکرو پشتیبانی می کنند -g3.
-gdwarf-2 سطح اشکال زدایی پیوسته را نمی پذیرد، زیرا GCC از یک پشتیبانی می کرد
انتخاب -کوتوله این به معنای تولید اطلاعات اشکال زدایی در نسخه 1 DWARF بود
فرمت (که با نسخه 2 بسیار متفاوت است)، و خیلی گیج کننده بود.
فرمت اشکال زدایی مدت زیادی است که منسوخ شده است، اما اکنون نمی توان گزینه را تغییر داد. در عوض استفاده کنید
اضافی -gسطح گزینه ای برای تغییر سطح اشکال زدایی برای DWARF.
-تغییر
تولید اطلاعات اشکال زدایی را خاموش کنید، اگر کنار گذاشتن این گزینه باعث ایجاد آن شد، یا آن را روشن کنید
در سطح 2 در غیر این صورت. موقعیت این آرگومان در خط فرمان نیست
موضوع؛ پس از پردازش همه گزینه های دیگر اعمال می شود و فقط این کار را انجام می دهد
یک بار، مهم نیست چند بار داده شود. این عمدتا برای استفاده در نظر گرفته شده است
-fcompare-debug.
-fsanitize=آدرس
AddressSanitizer، آشکارساز سریع خطای حافظه را فعال کنید. دستورالعمل های دسترسی به حافظه
ابزاری برای شناسایی اشکالات خارج از محدوده و استفاده پس از رایگان خواهد بود. دیدن
<http://code.google.com/p/address-sanitizer/> برای جزئیات بیشتر رفتار زمان اجرا
را می توان با استفاده از ASAN_OPTIONS متغیر محیطی؛ دیدن
<https://code.google.com/p/address-sanitizer/wiki/Flags#Run-time_flags> برای لیستی از
گزینه های پشتیبانی شده
-fsanitize=آدرس هسته
AddressSanitizer را برای هسته لینوکس فعال کنید. دیدن
<http://code.google.com/p/address-sanitizer/wiki/AddressSanitizerForKernel> برای بیشتر
جزئیات.
-fsanitize=نخ
ThreadSanitizer، آشکارساز مسابقه سریع داده را فعال کنید. دستورالعمل های دسترسی به حافظه خواهد بود
ابزاری برای شناسایی اشکالات مسابقه داده. دیدن
<http://code.google.com/p/thread-sanitizer/> برای جزئیات بیشتر رفتار زمان اجرا
را می توان با استفاده از TSAN_OPTIONS متغیر محیطی؛ دیدن
<https://code.google.com/p/thread-sanitizer/wiki/Flags> برای لیستی از موارد پشتیبانی شده
گزینه.
-fsanitize=نشت
LeakSanitizer، یک آشکارساز نشت حافظه را فعال کنید. این گزینه فقط برای پیوند دادن اهمیت دارد
فایل های اجرایی و اگر هیچ کدام -fsanitize=آدرس نه -fsanitize=نخ استفاده می شود. در آن
در این صورت، فایل اجرایی را با کتابخانهای مرتبط میکند که «malloc» و موارد دیگر را لغو میکند
توابع تخصیص دهنده دیدن
<https://code.google.com/p/address-sanitizer/wiki/LeakSanitizer> برای جزئیات بیشتر
رفتار زمان اجرا را می توان با استفاده از LSAN_OPTIONS متغیر محیطی.
-fsanitize=تعریف نشده
UndefinedBehaviorSanitizer، یک آشکارساز رفتار تعریف نشده سریع را فعال کنید. مختلف
محاسبات برای تشخیص رفتار نامشخص در زمان اجرا به کار خواهند رفت. جاری
گزینه های فرعی عبارتند از:
-fsanitize = تغییر
این گزینه بررسی اینکه نتیجه عملیات شیفت نیست را فعال می کند
تعریف نشده توجه داشته باشید که آنچه دقیقاً تعریف نشده در نظر گرفته می شود کمی متفاوت است
بین C و C++ و همچنین بین ISO C90 و C99 و غیره.
-fsanitize=عدد صحیح تقسیم بر صفر
تقسیم عدد صحیح بر صفر و همچنین تقسیم "INT_MIN / -1" را تشخیص دهید.
-fsanitize=دست نیافتنی
با این گزینه، کامپایلر فراخوانی "__builtin_unreachable" را به یک تبدیل می کند
به جای آن پیام تشخیصی تماس بگیرید. هنگام رسیدن به تماس "__builtin_unreachable"،
رفتار تعریف نشده است
-fsanitize=vla-bound
این گزینه به کامپایلر دستور می دهد که اندازه یک طول متغیر را بررسی کند
آرایه مثبت است این گزینه هیچ تاثیری در آن ندارد -std=c++1y حالت، به عنوان
استاندارد مستلزم آن است که به جای آن استثناء پرتاب شود.
-fsanitize=null
این گزینه بررسی اشاره گر را فعال می کند. به ویژه، برنامه ساخته شده با
این گزینه روشن شده زمانی که سعی می کند ارجاع a را لغو کند، پیغام خطا صادر می کند
اشاره گر NULL، یا اگر یک مرجع (احتمالاً یک مرجع rvalue) به یک NULL محدود شده باشد
اشاره گر
-fsanitize=بازگشت
این گزینه بررسی بیانیه بازگشت را فعال می کند. برنامه های ساخته شده با این گزینه
هنگامی که یک تابع غیر باطل به پایان می رسد، یک پیام خطا صادر می کند
بدون برگرداندن مقدار واقعی به آن رسیده است. این گزینه فقط در C++ کار می کند.
-fsanitize=signed-integer-overflow
این گزینه بررسی سرریز اعداد صحیح امضا شده را فعال می کند. ما بررسی می کنیم که نتیجه از
"+"، "*"، و "-" یکپارچه و باینری در علامت سرریز نمی شود
حسابی توجه داشته باشید، قوانین ارتقاء عدد صحیح باید در نظر گرفته شود. به این معنا که،
موارد زیر سرریز نیست:
امضا شده char a = SCHAR_MAX;
a++;
در حالی که -FTRAPV باعث می شود تله هایی برای سرریزهای امضا شده منتشر شود، -fsanitize=تعریف نشده
یک پیام تشخیصی می دهد. این در حال حاضر فقط برای خانواده زبان های C کار می کند.
-fdump-final-insns[=پرونده]
نمایش داخلی نهایی (RTL) را در آن تخلیه کنید پرونده. اگر آرگومان اختیاری باشد
حذف شده (یا اگر پرونده "." است)، نام فایل dump با ضمیمه تعیین می شود
".gkd" به نام فایل خروجی کامپایل.
-fcompare-debug[=انتخاب می کند]
اگر در حین کامپایل خطایی رخ نداد، کامپایلر را برای بار دوم اجرا کنید و اضافه کنید انتخاب می کند و
-fcompare-debug-second به استدلال های ارائه شده به مجموعه دوم. تخلیه کنید
نمایش داخلی نهایی در هر دو کامپایل، و چاپ خطا در صورت متفاوت بودن.
اگر علامت مساوی حذف شود، پیش فرض است -تغییر استفاده می شود.
متغیر محیطی gcc_compare_debug، در صورت تعریف، غیر خالی و غیر صفر،
به طور ضمنی امکان می دهد -fcompare-debug. اگر gcc_compare_debug به یک رشته تعریف شده است
با یک خط تیره شروع می شود، سپس برای استفاده می شود انتخاب می کند، در غیر این صورت پیش فرض است -تغییر is
استفاده شده.
-fcompare-debug=، با علامت مساوی اما بدون انتخاب می کند، برابر است با
-fno-compare-debug، که باعث غیرفعال شدن دامپینگ نمایش نهایی و
تدوین دوم، جلوگیری از حتی gcc_compare_debug از اثرگذاری
برای تایید پوشش کامل در طول -fcompare-debug تست، تنظیم gcc_compare_debug گفتن
-FCOMPARE-DEBUG-NOT-OVERRIDDEND، که GCC آن را به عنوان یک گزینه نامعتبر در هر موردی رد می کند
کامپایل (به جای پیش پردازش، مونتاژ یا پیوند). برای دریافت فقط یک هشدار،
محیط gcc_compare_debug به -w%n-fcompare-debug نه نادیده گرفته شده انجام خواهد داد
-fcompare-debug-second
این گزینه به طور ضمنی به کامپایلر برای کامپایل دوم درخواستی ارسال می شود
by -fcompare-debug، همراه با گزینه هایی برای خاموش کردن هشدارها و حذف گزینه های دیگر
که باعث خروجی های کامپایلر به فایل ها یا خروجی استاندارد می شود.
نام فایلهای Dump و فایلهای موقت حفظ شده به گونهای تغییر داده میشوند که حاوی ".gk" باشند.
پسوند اضافی در طول کامپایل دوم، برای جلوگیری از بازنویسی آنها
تولید شده توسط اولین
هنگامی که این گزینه به درایور کامپایلر منتقل می شود، باعث می شود اول تالیف به
نادیده گرفته شود، که آن را برای مواردی غیر از اشکال زدایی مناسب کامپایلر مفید می کند.
-feliminate-dwarf2-dups
فشرده سازی اطلاعات اشکال زدایی DWARF 2 با حذف اطلاعات تکراری در مورد
هر نماد این گزینه فقط در هنگام ایجاد اشکال زدایی DWARF 2 منطقی است
اطلاعات با -gdwarf-2.
-femit-struct-debug-baseonly
اطلاعات اشکال زدایی را برای انواع ساختار مانند تنها زمانی که نام پایه آن منتشر می شود
فایل منبع کامپایل با نام پایه فایلی که ساختار در آن تعریف شده است مطابقت دارد.
این گزینه به طور قابل ملاحظه ای اندازه اطلاعات اشکال زدایی را کاهش می دهد، اما در
از دست دادن بالقوه قابل توجه در اطلاعات نوع به دیباگر. دیدن
-femit-struct-debug-reduced برای یک گزینه کمتر تهاجمی دیدن
-femit-struct-debug-detailed برای کنترل دقیق تر
این گزینه فقط با DWARF 2 کار می کند.
-femit-struct-debug-reduced
اطلاعات اشکال زدایی را برای انواع ساختار مانند تنها زمانی که نام پایه آن منتشر می شود
فایل منبع کامپایل با نام پایه فایلی که نوع آن در آن تعریف شده است مطابقت دارد.
مگر اینکه ساختار یک الگو یا تعریف شده در یک هدر سیستم باشد.
این گزینه به طور قابل توجهی اندازه اطلاعات اشکال زدایی را کاهش می دهد
از دست دادن احتمالی اطلاعات نوع به دیباگر. دیدن -femit-struct-debug-baseonly
برای یک گزینه تهاجمی تر دیدن -femit-struct-debug-detailed برای جزئیات بیشتر
کنترل.
این گزینه فقط با DWARF 2 کار می کند.
-femit-struct-debug-detailed[=لیست مشخصات]
انواع ساختار مانند که کامپایلر اطلاعات اشکال زدایی را برای آنها تولید می کند را مشخص کنید. در
هدف این است که اطلاعات اشکال زدایی ساختار تکراری بین فایل های شی مختلف کاهش یابد
در همان برنامه
این گزینه یک نسخه دقیق از -femit-struct-debug-reduced و
-femit-struct-debug-baseonly، که برای اکثر نیازها خدمت می کند.
یک مشخصات دارای نحو[کارگردان:|ind:][یا:|جنس:](هر|سیستم|پایه|هیچ)
کلمه اول اختیاری مشخصات را به ساختارهایی که مستقیماً استفاده می شوند محدود می کند
(کارگردان:) یا به صورت غیر مستقیم استفاده می شود (ind:). یک نوع ساختار مستقیماً زمانی استفاده می شود که نوع آن باشد
از یک متغیر، عضو. استفاده غیرمستقیم از طریق اشاره گرها به ساختارها ایجاد می شود. به این معنا که،
وقتی استفاده از یک ساختار ناقص معتبر است، استفاده غیرمستقیم است. یک مثال است ساختار
یک مستقیم؛ ساختار دو * غیر مستقیم.
کلمه دوم اختیاری مشخصات را به ساختارهای معمولی محدود می کند (یا:) و یا
ساختارهای عمومی (جنس:). توضیح ساختارهای عمومی کمی پیچیده است. برای C++،
اینها تخصصهای غیر صریح کلاسهای قالب یا کلاسهای غیرقابلیت هستند
در موارد فوق سایر زبان های برنامه نویسی کلی دارند، اما
-femit-struct-debug-detailed هنوز آنها را اجرا نمی کند.
کلمه سوم فایل های منبع را برای ساختارهایی که کامپایلر برای آن ها هستند مشخص می کند
باید اطلاعات اشکال زدایی را منتشر کند. ارزش ها هیچ و هر معنای عادی داشته باشد در
ارزش پایه به این معنی است که پایه نام فایلی که در آن نوع اعلان شده است
ظاهر شده باید با پایه نام فایل کامپایل اصلی مطابقت داشته باشد. در عمل،
این بدان معنی است که هنگام کامپایل foo.c، اطلاعات اشکال زدایی برای انواع تولید می شود
در آن فایل اعلام شده و foo.h، اما نه فایل های هدر دیگر. ارزش سیستم به معنی
آن انواع راضی کننده پایه یا در هدرهای سیستم یا کامپایلر اعلام شده است.
ممکن است لازم باشد برای تعیین بهترین تنظیمات برای برنامه خود آزمایش کنید.
پیش فرض این است -femit-struct-debug-detailed=all.
این گزینه فقط با DWARF 2 کار می کند.
-fno-merge-debug-strings
پیوند دهنده را هدایت کنید تا رشته ها را در اطلاعات اشکال زدایی که هستند با هم ادغام نکند
در فایل های شی مختلف یکسان است. ادغام توسط همه اسمبلرها پشتیبانی نمی شود
پیوند دهنده ها ادغام اندازه اطلاعات اشکال زدایی را در فایل خروجی کاهش می دهد
هزینه افزایش زمان پردازش لینک ادغام به طور پیش فرض فعال است.
-fdebug-prefix-map=قدیمی=جدید
هنگام کامپایل فایل ها در دایرکتوری قدیمی، اطلاعات اشکال زدایی را ضبط کنید و آنها را به عنوان توصیف کنید
in جدید به جای آن.
-fno-dwarf2-cfi-aasm
به جای استفاده از بخش ".eh_frame" ایجاد شده توسط کامپایلر، اطلاعات بازگشایی DWARF 2 را منتشر کنید.
دستورالعمل های گاز ".cfi_*".
-p کد اضافی برای نوشتن اطلاعات نمایه مناسب برای برنامه تجزیه و تحلیل ایجاد کنید
معلم. شما باید از این گزینه هنگام کامپایل فایل های منبع مورد نظر خود استفاده کنید.
و همچنین هنگام لینک دادن باید از آن استفاده کنید.
-صفحه کد اضافی برای نوشتن اطلاعات نمایه مناسب برای برنامه تجزیه و تحلیل ایجاد کنید
gprof. شما باید از این گزینه هنگام کامپایل فایل های منبع مورد نظر خود استفاده کنید.
و همچنین هنگام لینک دادن باید از آن استفاده کنید.
-Q کامپایلر را وادار می کند تا نام هر تابع را همانطور که کامپایل می شود چاپ کند و تعدادی را چاپ کند
آمار مربوط به هر پاس پس از پایان آن.
-ftime-گزارش
کامپایلر را وادار می کند تا برخی از آمارهای مربوط به زمان مصرف شده توسط هر پاس را در هنگام آن چاپ کند
تمام می شود
-fmem-report
کامپایلر را وادار می کند تا در هنگام تخصیص حافظه دائمی، آماری را چاپ کند
تمام می شود
-fmem-report-wpa
کامپایلر را وادار می کند تا برخی از آمارهای مربوط به تخصیص حافظه دائمی برای WPA را چاپ کند
فقط فاز
-fpre-ipa-mem-گزارش
-fpost-ipa-mem-report
کامپایلر را وادار می کند تا برخی از آمارهای مربوط به تخصیص حافظه دائمی را قبل از یا چاپ کند
پس از بهینه سازی بین رویه ای
-fprofile-report
باعث می شود کامپایلر برخی از آمارهای مربوط به سازگاری نمایه (تخمینی) را چاپ کند
و تاثیر پاس های فردی
-fstack-usage
اطلاعات استفاده از پشته خروجی کامپایلر را برای برنامه، بر اساس هر تابع، می سازد
اساس نام فایل برای dump با افزودن ساخته می شود .su به auxname. auxname is
تولید شده از نام فایل خروجی، در صورتی که به صراحت مشخص شده باشد و یک فایل نباشد
قابل اجرا است، در غیر این صورت نام پایه فایل منبع است. یک ورودی تشکیل شده است
سه زمینه:
· نام تابع.
· تعدادی بایت.
· یک یا چند واجد شرایط: "ایستا"، "پویا"، "محدود".
واجد شرایط "static" به این معنی است که تابع پشته را به صورت ایستا دستکاری می کند: a
تعداد ثابتی از بایت ها برای فریم در هنگام ورود تابع اختصاص داده می شود و در آن آزاد می شود
خروج تابع؛ در غیر این صورت هیچ تنظیم پشته در عملکرد انجام نمی شود. دومین
فیلد این تعداد ثابت بایت است.
واجد شرایط "دینامیک" به این معنی است که تابع پشته را به صورت پویا دستکاری می کند: in
علاوه بر تخصیص استاتیکی که در بالا توضیح داده شد، تنظیمات پشته در آن انجام می شود
بدنه تابع، به عنوان مثال برای فشار/پاپ آرگومان ها در اطراف فراخوانی تابع. اگر
واجد شرایط "bounded" نیز وجود دارد، مقدار این تنظیمات محدود شده است
زمان کامپایل و فیلد دوم کران بالایی از مقدار کل پشته استفاده شده است
توسط تابع در صورت عدم وجود، مقدار این تنظیمات محدود نمی شود
در زمان کامپایل و فیلد دوم فقط قسمت محدود شده را نشان می دهد.
-fprofile-arcs
کد اضافه کنید تا برنامه جریان پیدا کند قوس ابزارسازی می شوند. در حین اجرای برنامه
ثبت می کند که هر شاخه و فراخوان چند بار اجرا شده و چند بار گرفته شده است
یا برمی گردد. هنگامی که برنامه کامپایل شده خارج می شود، این داده ها را در فایلی به نام ذخیره می کند
auxname.gcda برای هر فایل منبع داده ها ممکن است برای نمایه هدایت شونده استفاده شوند
بهینه سازی (-شاخه-احتمالات، یا برای تجزیه و تحلیل پوشش تست
(-آزمایش-پوشش). هر فایل شی auxname از نام the ایجاد می شود
فایل خروجی، اگر به صراحت مشخص شده باشد و فایل اجرایی نهایی نباشد، در غیر این صورت
نام پایه فایل منبع است. در هر دو مورد هر پسوند حذف می شود (مثلاً
foo.gcda برای فایل ورودی dir/foo.c، یا dir/foo.gcda برای فایل خروجی مشخص شده به عنوان -o
dir/foo.o).
-- پوشش
این گزینه برای کامپایل و پیوند کدهای ابزاری برای تجزیه و تحلیل پوشش استفاده می شود. در
گزینه مترادف برای است -fprofile-arcs -آزمایش-پوشش (هنگام تالیف) و -lgcov
(هنگام لینک دادن). برای جزئیات بیشتر به اسناد آن گزینه ها مراجعه کنید.
· کامپایل فایل های منبع با -fprofile-arcs به علاوه بهینه سازی و تولید کد
گزینه ها. برای تجزیه و تحلیل پوشش تست، از موارد اضافی استفاده کنید -آزمایش-پوشش گزینه.
شما نیازی به مشخصات هر فایل منبع در یک برنامه ندارید.
· پیوند فایل های شی خود را با -lgcov or -fprofile-arcs (مورد دوم دلالت بر این دارد
سابق).
· برنامه را روی حجم کاری نماینده اجرا کنید تا نمایه قوس ایجاد شود
اطلاعات این ممکن است هر چند بار تکرار شود. می توانید همزمان اجرا کنید
نمونه هایی از برنامه شما و به شرطی که سیستم فایل از قفل کردن پشتیبانی کند،
فایل های داده به درستی به روز خواهند شد. همچنین تماس های "فشار" شناسایی می شوند و
به درستی مدیریت شود (شمارش مضاعف اتفاق نمی افتد).
· برای بهینه سازی های پروفایل، فایل های منبع را دوباره با همان کامپایل کنید
گزینه های بهینه سازی و تولید کد به علاوه -شاخه-احتمالات.
· برای تجزیه و تحلیل پوشش تست، استفاده کنید gcov برای تولید اطلاعات قابل خواندن برای انسان از
la .gcno و gcda فایل ها. رجوع به gcov مستندات برای ادامه
اطلاعات.
با -fprofile-arcs، برای هر تابع از برنامه شما GCC یک جریان برنامه ایجاد می کند
نمودار، سپس یک درخت پوشا برای نمودار پیدا می کند. فقط کمان هایی که روی آن نیستند
درخت پوشا باید ابزاری باشد: کامپایلر کد را برای شمارش تعداد اضافه می کند
زمان هایی که این کمان ها اجرا می شوند. زمانی که یک قوس تنها خروجی یا تنها ورودی است
یک بلوک، کد ابزار دقیق را می توان به بلوک اضافه کرد. در غیر این صورت، یک پایه جدید
برای نگهداری کد ابزار دقیق باید بلوکی ایجاد شود.
-آزمایش-پوشش
یک فایل یادداشت تهیه کنید که gcov ابزار کد پوشش می تواند برای نمایش برنامه استفاده کند
پوشش. فایل یادداشت هر فایل منبع فراخوانی می شود auxname.gcno. رجوع به
-fprofile-arcs گزینه بالا برای توضیح auxname و دستورالعمل در مورد چگونگی
تولید داده های پوشش آزمایشی داده های پوشش با فایل های منبع بیشتر مطابقت دارند اگر
شما بهینه سازی نمی کنید
-fdbg-cnt-list
نام و کران بالای شمارنده را برای همه شمارنده های اشکال زدایی چاپ کنید.
-fdbg-cnt=لیست ضد ارزش
کران بالای شمارنده اشکال زدایی داخلی را تنظیم کنید. لیست ضد ارزش با کاما از هم جدا شده است
لیستی از نام:ارزش جفت هایی که کران بالایی هر شمارشگر اشکال زدایی را تعیین می کند نام به
ارزش. همه شمارندههای اشکالزدایی دارای کران بالای اولیه "UINT_MAX" هستند. بدین ترتیب
"dbg_cnt()" همیشه true را برمی گرداند مگر اینکه کران بالایی توسط این گزینه تنظیم شده باشد. برای
به عنوان مثال، با -fdbg-cnt=dce:10,tail_call:0، "dbg_cnt(dce)" فقط برای اول true برمی گرداند
10 فراخوانی
-قابل دفاع-نوع-عبور
-غیرفعال کردن-نوع-عبور=محدوده-لیست
این مجموعه ای از گزینه هایی است که برای غیرفعال کردن/فعال کردن صریح بهینه سازی استفاده می شود
عبور می کند. این گزینه ها برای استفاده برای اشکال زدایی GCC در نظر گرفته شده اند. کاربران کامپایلر باید
به جای آن از گزینه های معمولی برای فعال/غیرفعال کردن پاس ها استفاده کنید.
-fdisable-ipa-عبور
غیرفعال کردن مجوز IPA عبور. عبور نام پاس است. اگر همان پاس استاتیک باشد
پس از چند بار فراخوانی در کامپایلر، نام پاس باید با a اضافه شود
شماره ترتیبی که از 1 شروع می شود.
-fdisable-rtl-عبور
-fdisable-rtl-عبور=محدوده-لیست
پاس RTL را غیرفعال کنید عبور. عبور نام پاس است. اگر همان پاس استاتیک باشد
پس از چند بار فراخوانی در کامپایلر، نام پاس باید با a اضافه شود
شماره ترتیبی که از 1 شروع می شود. محدوده-لیست یک لیست جدا شده با کاما از
محدوده تابع یا نام اسمبلر. هر محدوده یک جفت عددی است که با a از هم جدا شده اند
روده بزرگ محدوده شامل هر دو طرف است. اگر محدوده بی اهمیت است، عدد
جفت را می توان به عنوان یک عدد ساده ساده کرد. اگر گره گراف فراخوانی تابع باشد
UID در یکی از محدوده های مشخص شده قرار می گیرد عبور برای آن غیرفعال است
تابع. UID در هدر تابع یک فایل dump و پاس نشان داده شده است
اسامی را می توان با استفاده از گزینه حذف کرد -fdump-passes.
-fdisable-tree-عبور
-fdisable-tree-عبور=محدوده-لیست
غیرفعال کردن مجوز درختی عبوراست. دیدن -fdisable-rtl برای توضیح گزینه
استدلال
-فناپذیر-ipa-عبور
پاس IPA را فعال کنید عبور. عبور نام پاس است. اگر همان پاس استاتیک باشد
پس از چند بار فراخوانی در کامپایلر، نام پاس باید با a اضافه شود
شماره ترتیبی که از 1 شروع می شود.
-با- rtl-عبور
-با- rtl-عبور=محدوده-لیست
پاس RTL را فعال کنید عبوراست. دیدن -fdisable-rtl برای توضیح آرگومان گزینه و
مثال ها.
-درخت قابل فن-عبور
-درخت قابل فن-عبور=محدوده-لیست
عبور درختی را فعال کنید عبوراست. دیدن -fdisable-rtl برای توضیح آرگومان های گزینه
در اینجا چند نمونه وجود دارد که کاربرد این گزینه ها را نشان می دهد.
# ccp1 را برای همه توابع غیرفعال کنید
-fdisable-tree-ccp1
# unroll کامل را برای تابعی که uid گره cgraph آن 1 است غیرفعال کنید
-1-کونرول = XNUMX
# gcse2 را برای توابع در محدوده های زیر غیرفعال کنید [1,1،XNUMX]،
# [300,400] و [400,1000]
# gcse2 را برای توابع foo و foo2 غیرفعال کنید
-fdisable-rtl-gcse2 = foo ، foo2
# خطبندی اولیه را غیرفعال کنید
-fdisable-tree-einline
# inlining ipa را غیرفعال کنید
-fdisable-ipa-inline
# باز کردن کامل درخت را فعال کنید
-پندار-درخت-باز کردن
-dنامه ها
-fdump-rtl-عبور
-fdump-rtl-عبور=نام فایل
می گوید که در زمان کامپایل کردن، در زمان هایی که توسط آن مشخص شده است، اشکال زدایی dump ایجاد کنید نامه ها. این
برای اشکال زدایی پاس های مبتنی بر RTL کامپایلر استفاده می شود. نام فایل برای بیشتر
روگرفت ها با الحاق یک عدد پاس و یک کلمه به آن ساخته می شوند نام زباله، و
فایل ها در دایرکتوری فایل خروجی ایجاد می شوند. در صورت =نام فایل گزینه،
dump به جای فایل های dump شماره گذاری شده روی فایل داده شده خروجی می شود. توجه داشته باشید
که شماره پاس به صورت ایستا محاسبه می شود که پاس ها در پاس ثبت می شوند
مدیر. بنابراین شماره گذاری به ترتیب دینامیکی اجرای آن مربوط نمی شود
عبور می کند. به طور خاص، یک پاس نصب شده توسط یک افزونه می تواند عددی بیش از 200 زوج داشته باشد
اگر خیلی زود اجرا شود. نام زباله از نام فایل خروجی تولید می شود،
اگر به صراحت مشخص شده باشد و قابل اجرا نباشد، در غیر این صورت نام پایه آن است
فایل منبع این سوئیچ ها ممکن است اثرات متفاوتی داشته باشند -E استفاده شده برای
پیش پردازش
اشکالزدایی dump را میتوان با a فعال کرد -fdump-rtl سوئیچ یا برخی -d انتخاب نامه ها. اینجا
حروف ممکن برای استفاده در هستند عبور و نامه هاو معانی آنها:
-fdump-rtl-alignments
پس از محاسبه ترازهای شاخه، تخلیه
-fdump-rtl-asmcons
پس از رفع عبارات rtl که دارای محدودیتهای ورودی/خروجی ناراضی هستند، تخلیه کنید.
-fdump-rtl-auto_inc_dec
پس از کشف auto-inc-dec تخلیه کنید. این پاس فقط روی معماری هایی اجرا می شود که
دارای دستورالعمل های auto inc یا auto dec.
-fdump-rtl-barriers
پس از تمیز کردن دستورالعمل های مانع تخلیه کنید.
-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
پس از کپی کردن 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
پس از ترکیب تنظیمات پشته تخلیه کنید.
-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
تخلیه پس از نهایی شدن کد مدیریت EH.
-fdump-rtl-eh_ranges
پس از تبدیل نواحی محدوده کنترل EH تخلیه شود.
-FDump-RTL-Expand
پس از تولید 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 امکان دامپینگ پس از مشترک جهانی
حذف زیرعبارات
-FDump-RTL-init-Regs
پس از مقداردهی اولیه رجیسترها تخلیه کنید.
-fdump-rtl-initvals
پس از محاسبه مجموعه های ارزش اولیه، تخلیه کنید.
-fdump-rtl-into_cfglayout
پس از تبدیل به حالت cfglayout تخلیه کنید.
-fdump-rtl-ira
پس از تخصیص رجیستر تکرار شده تخلیه کنید.
-fdump-rtl-jump
پس از بهینه سازی پرش دوم تخلیه کنید.
-fdump-rtl-loop2
-fdump-rtl-loop2 پس از گذراندن بهینه سازی حلقه rtl، دامپینگ را فعال می کند.
-fdump-rtl-mach
پس از انجام پاس سازماندهی مجدد وابسته به ماشین، در صورت تصویب، تخلیه کنید
وجود دارد
-fdump-rtl-mode_sw
پس از حذف سوئیچ های حالت اضافی، تخلیه کنید.
-fdump-rtl-rnreg
پس از شماره گذاری مجدد ثبت، تخلیه کنید.
-fdump-rtl-outof_cfglayout
پس از تبدیل از حالت cfglayout تخلیه کنید.
-fdump-rtl-peephole2
پس از عبور از روزنه تخلیه کنید.
-fdump-rtl-posreload
پس از بهینه سازی پس از بارگذاری مجدد، تخلیه کنید.
-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- خواهر و برادر
پس از بهینه سازی تماس خواهر و برادر، تخلیه کنید.
-fdump-rtl-split1
-fdump-rtl-split2
-fdump-rtl-split3
-fdump-rtl-split4
-fdump-rtl-split5
-fdump-rtl-split1, -fdump-rtl-split2, -fdump-rtl-split3, -fdump-rtl-split4 و
-fdump-rtl-split5 پس از پنج دور تقسیم دستورالعمل، تخلیه را فعال کنید.
-fdump-rtl-sms
تخلیه پس از برنامه ریزی مدولو. این پاس فقط روی برخی معماری ها اجرا می شود.
-FDump-RTL-Stack
پس از تبدیل از "پرونده ثبت مسطح" GCC به x87 ثبت می شود
رجیسترهای پشته مانند این پاس فقط بر روی انواع x86 اجرا می شود.
-fdump-rtl-subreg1
-fdump-rtl-subreg2
-fdump-rtl-subreg1 و -fdump-rtl-subreg2 امکان تخلیه پس از دو زیررگ
گسترش عبور می کند.
-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
این dump ها تعریف شده اند اما همیشه فایل های خالی تولید می کنند.
-in
-fdump-rtl-all
تمام زباله های ذکر شده در بالا را تولید کنید.
-dA خروجی اسمبلر را با اطلاعات اشکال زدایی متفرقه حاشیه نویسی کنید.
-DD تمام تعاریف کلان را، در پایان پیش پردازش، علاوه بر عادی، خالی کنید
خروجی.
-dh هر زمان که خطایی رخ می دهد، یک core dump ایجاد کنید.
-درد خروجی اسمبلر را با یک نظر حاشیه نویسی کنید که نشان می دهد کدام الگو و
جایگزین استفاده می شود. طول هر دستورالعمل نیز چاپ شده است.
-dP قبل از هر دستورالعمل، RTL را به عنوان یک نظر در خروجی اسمبلر قرار دهید. همچنین
روشن -درد حاشیه نویسی
-dx فقط به جای کامپایل کردن یک تابع، RTL را تولید کنید. معمولا با استفاده می شود
-FDump-RTL-Expand.
-fdump-noaddr
هنگام انجام اشکال زدایی dumps، خروجی آدرس را سرکوب کنید. این باعث می شود که آن را امکان پذیرتر کند
برای فراخوانی های کامپایلر با باینری های مختلف کامپایلر از diff برای اشکال زدایی dump استفاده کنید
و/یا متن / bss / داده / پشته / پشته / مکان های شروع dso مختلف.
-fdump-بدون شماره
هنگام انجام اشکالزدایی dumps، شماره دستورالعملها و خروجی آدرس را حذف کنید. این
استفاده از diff در اشکال زدایی dump ها برای فراخوانی کامپایلر را امکان پذیرتر می کند
گزینه های مختلف، به ویژه با و بدون -g.
-Fdump-Numbered-Links
هنگام انجام اشکال زدایی dump (نگاه کنید به -d گزینه بالا)، اعداد دستورالعمل را سرکوب کنید
پیوندهایی به دستورالعمل های قبلی و بعدی به صورت متوالی.
-fdump-translation-unit (فقط C++)
-fdump-translation-unit-گزینه های (فقط C++)
نمایشی از ساختار درختی کل واحد ترجمه را در یک فایل تخلیه کنید.
نام فایل با ضمیمه ساخته شده است .تو به نام فایل منبع، و فایل است
در همان دایرکتوری فایل خروجی ایجاد شده است. اگر -گزینه های فرم استفاده می شود،
گزینه های جزئیات تخلیه را همانطور که برای -fdump-tree گزینه.
-fdump-class-hierarchy (فقط C++)
-fdump-class-hierarchy-گزینه های (فقط C++)
نمایشی از سلسله مراتب و چیدمان جدول تابع مجازی هر کلاس را در a قرار دهید
فایل. نام فایل با ضمیمه ساخته شده است .کلاس به نام فایل منبع و فایل
در همان دایرکتوری فایل خروجی ایجاد می شود. اگر -گزینه های فرم استفاده می شود،
گزینه های جزئیات تخلیه را همانطور که برای -fdump-tree گزینه.
-fdump-ipa-گزینه
کنترل دامپینگ در مراحل مختلف درخت زبان تجزیه و تحلیل بین رویه ای به الف
فایل. نام فایل با اضافه کردن یک پسوند خاص سوئیچ به منبع ایجاد می شود
نام فایل، و فایل در همان دایرکتوری فایل خروجی ایجاد می شود. در
تخلیه زیر ممکن است:
تمام همه تخلیه های تحلیل بین رویه ای را فعال می کند.
cgraph
اطلاعات مربوط به بهینه سازی گراف فراخوانی، حذف توابع استفاده نشده و
تصمیمات درونی
خطی
تخلیه پس از تابع درونی.
-fdump-passes
فهرست پاس های بهینه سازی که با جریان روشن و خاموش می شوند را خالی کنید
گزینه های خط فرمان
-ممپام-آمپولیک-انتخاب
فعال کردن و کنترل تخلیه آمار پاس در یک فایل جداگانه. نام فایل است
با اضافه کردن پسوندی به پایان می رسد .آمار به نام فایل منبع، و
فایل در همان دایرکتوری فایل خروجی ایجاد می شود. اگر -انتخاب شکل است
استفاده شده، -آمار باعث می شود شمارنده ها در کل واحد کامپایل در حالی که جمع شوند
-جزئیات هر رویدادی را به عنوان پاسها ایجاد میکنند. پیش فرض بدون گزینه است
برای جمع شمارنده ها برای هر تابع کامپایل شده.
-fdump-tree-گزینه
-fdump-tree-گزینه-گزینه های
-fdump-tree-گزینه-گزینه های=نام فایل
کنترل دامپینگ در مراحل مختلف پردازش درخت زبان میانی به
یک فایل. نام فایل با الحاق یک پسوند خاص سوئیچ به آن ایجاد می شود
نام فایل منبع، و فایل در همان دایرکتوری فایل خروجی ایجاد می شود. که در
مورد =نام فایل گزینه، Dump به جای خودکار بر روی فایل داده شده خروجی می شود
فایل های دامپ نامگذاری شده اگر -گزینه های فرم استفاده می شود، گزینه های لیستی از - جدا از هم
گزینه هایی که جزئیات تخلیه را کنترل می کنند. همه گزینه ها برای همه قابل اجرا نیستند
زباله ها آنهایی که معنی ندارند نادیده گرفته می شوند. گزینه های ذیل در دسترس هستند
نشانی
آدرس هر گره را چاپ کنید. معمولاً این با تغییر معنادار نیست
با توجه به محیط و فایل منبع کاربرد اصلی آن برای بستن الف است
فایل dump با محیط دیباگ.
اسم نام
اگر «DECL_ASSEMBLER_NAME» برای یک decl مشخص تنظیم شده است، از آن در dump استفاده کنید
به جای "DECL_NAME". کاربرد اصلی آن سهولت استفاده از کار به عقب است
نام های مخدوش شده در فایل اسمبلی
لاغر
هنگام ریختن نمایشهای میانی جلویی، از ریختن اعضای آن جلوگیری کنید
یک محدوده یا بدنه یک تابع صرفاً به این دلیل که به آن محدوده رسیده است. فقط
چنین اقلامی را زمانی که مستقیماً از طریق مسیر دیگری قابل دسترسی هستند، رها کنید.
هنگام ریختن درختان با چاپ زیبا، این گزینه از ریختن اجسام جلوگیری می کند
ساختارهای کنترلی
هنگام تخلیه RTL، RTL را بهجای پیشفرض به شکل باریک (متراکم) چاپ کنید
نمایش LISP مانند.
خام چاپ یک نمایش خام از درخت. بهطور پیشفرض، درختها به زیبایی چاپ میشوند
یک نمایش C مانند
جزئیات
Dump های دقیق تر را فعال کنید (در هر گزینه dump رعایت نمی شود). همچنین شامل شود
اطلاعات از پاس های بهینه سازی
آمار
انتشار آمارهای مختلف در مورد پاس را فعال کنید (که توسط هر روگرفتی رعایت نمی شود
گزینه).
بلوک
فعال کردن نمایش مرزهای بلوک اصلی (غیرفعال در تخلیه خام).
گراف
برای هر یک از فایل های دامپ مشخص شده دیگر (-fdump-rtl-عبور)، تخلیه A
نمایش گراف جریان کنترل مناسب برای مشاهده با GraphViz به
file.passid.pass.dot. هر تابع در فایل به صورت زیرگراف زیبا چاپ شده است،
به طوری که GraphViz می تواند همه آنها را در یک طرح واحد ارائه دهد.
این گزینه در حال حاضر فقط برای تخلیههای RTL کار میکند و RTL همیشه در آن ریخته میشود
فرم باریک
vops
نمایش عملوندهای مجازی برای هر عبارت را فعال کنید.
لیننو
نمایش اعداد خط برای عبارات را فعال کنید.
UID نمایش شناسه منحصر به فرد ("DECL_UID") برای هر متغیر را فعال کنید.
واژگان
نمایش درخت dump برای هر عبارت را فعال کنید.
eh نمایش شماره منطقه EH حاوی هر عبارت را فعال کنید.
scev
نمایش جزئیات تجزیه و تحلیل تکامل اسکالر را فعال کنید.
بهینه
نمایش اطلاعات بهینه سازی را فعال کنید (فقط در پاس های خاص موجود است).
از دست رفته
نمایش اطلاعات بهینه سازی از دست رفته را فعال کنید (فقط در پاس های خاص موجود است).
یادداشت ها
سایر اطلاعات بهینه سازی دقیق را فعال کنید (فقط در پاس های خاص موجود است).
=نام فایل
به جای یک فایل dump با نام خودکار، در نام فایل داده شده خروجی بگیرید. پرونده
نام stdout و استدرر به طور خاص درمان می شوند و از قبل باز در نظر گرفته می شوند
جریان های استاندارد مثلا،
gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump
-fdump-tree-pre=stderr file.c
خروجی بردار تخلیه به foo.dump، در حالی که PRE dump روی به خروجی است استدرر.
اگر دو نام فایل dump متناقض برای یک پاس داده شود، دومی
گزینه قبلی را لغو می کند.
تمام همه گزینه ها را روشن کنید، به جز خام, لاغر, واژگان و لیننو.
اپتال
همه گزینه های بهینه سازی را روشن کنید، به عنوان مثال، بهینه, از دست رفتهو توجه داشته باشید.
تخلیه درختان زیر امکان پذیر است:
اصلی
قبل از هر بهینه سازی مبتنی بر درخت، تخلیه کنید file.original.
بهینه
پس از همه بهینهسازیهای درختی، تخلیه به پرونده. بهینه سازی شده.
ساده
هر تابع را قبل و بعد از ارسال ساده سازی به یک فایل تخلیه کنید. پرونده
نام با الحاق ساخته شده است .gimple به نام فایل منبع
cfg نمودار جریان کنترل هر تابع را در یک فایل تخلیه کنید. نام فایل توسط
ضمیمه کردن .cfg به نام فایل منبع
ch پس از کپی کردن هدرهای حلقه، هر تابع را تخلیه کنید. نام فایل با ضمیمه ساخته شده است
.ch به نام فایل منبع
SSA اطلاعات مربوط به SSA را در یک فایل تخلیه کنید. نام فایل با ضمیمه ساخته شده است .ssa
به نام فایل منبع
نام مستعار
اطلاعات نامگذاری را برای هر تابع تخلیه کنید. نام فایل با ضمیمه ساخته شده است
نام مستعار به نام فایل منبع
حزب کمونیست چین هر تابع را پس از CCP تخلیه کنید. نام فایل با ضمیمه ساخته شده است ccp به
نام فایل منبع
storeccp
هر تابع را پس از STORE-CCP تخلیه کنید. نام فایل با ضمیمه ساخته شده است .storeccp
به نام فایل منبع
پیش پس از حذف جزئی افزونگی، درختان را تخلیه کنید. نام فایل توسط
ضمیمه کردن .پیش به نام فایل منبع
فرکانس پس از حذف کامل افزونگی درختان را تخلیه کنید. نام فایل با ضمیمه ساخته شده است
.free به نام فایل منبع
کپی پروپ
پس از تکثیر کپی درختان را تخلیه کنید. نام فایل با ضمیمه ساخته شده است .copyprop
به نام فایل منبع
store_copyprop
پس از انتشار کپی در فروشگاه، درختان را تخلیه کنید. نام فایل با ضمیمه ساخته شده است
.store_copyprop به نام فایل منبع
dce پس از حذف کد مرده، هر تابع را تخلیه کنید. نام فایل توسط
ضمیمه کردن .DE به نام فایل منبع
آقا خانم پس از انجام جایگزینی اسکالر سنگدانه ها، هر تابع را تخلیه کنید. پرونده
نام با الحاق ساخته شده است .sra به نام فایل منبع
فرو رفتن
پس از انجام کد سینک کردن، هر تابع را تخلیه کنید. نام فایل توسط
ضمیمه کردن .فرو رفتن به نام فایل منبع
هدیه هر تابع را پس از اعمال بهینهسازی درختی Dominator تخلیه کنید. نام فایل است
با الحاق ساخته شده است .dom به نام فایل منبع
گفتن پس از اعمال حذف فروشگاه مرده، هر تابع را تخلیه کنید. نام فایل ساخته شده است
با الحاق .dse به نام فایل منبع
فیوپت
هر تابع را پس از بهینه سازی گره های PHI در کد مستقیم تخلیه کنید. پرونده
نام با الحاق ساخته شده است فیوپت به نام فایل منبع
forwprop
هر تابع را پس از انتشار رو به جلو متغیرهای یکبار مصرف تخلیه کنید. نام فایل
با الحاق ساخته می شود . forwrprop به نام فایل منبع
نام کپی
پس از اعمال بهینه سازی تغییر نام کپی، هر تابع را تخلیه کنید. نام فایل است
با الحاق ساخته شده است .نام کپی به نام فایل منبع
nrv هر تابع را پس از اعمال بهینه سازی مقدار بازگشتی نامگذاری شده در حالت عمومی، تخلیه کنید
درختان. نام فایل با ضمیمه ساخته شده است nrv به نام فایل منبع
بردار
پس از اعمال برداری از حلقه ها، هر تابع را تخلیه کنید. نام فایل ساخته شده است
با الحاق .vect به نام فایل منبع
اسلپ پس از اعمال برداری از بلوک های اساسی، هر تابع را تخلیه کنید. نام فایل است
با الحاق ساخته شده است .slp به نام فایل منبع
vp هر تابع را پس از انتشار محدوده ارزش (VRP) تخلیه کنید. نام فایل توسط
ضمیمه کردن vrp به نام فایل منبع
تمام با پرچم های ارائه شده در این گزینه، تمام درختان dump های موجود را فعال کنید.
-fopt-info
-fopt-info-گزینه های
-fopt-info-گزینه های=نام فایل
تخلیه های بهینه سازی را از پاس های بهینه سازی مختلف کنترل می کند. اگر -گزینه های شکل است
استفاده شده، گزینه های لیستی از - گزینه های جدا شده برای انتخاب جزئیات روگرفت و
بهینه سازی ها اگر گزینه های مشخص نشده است، به طور پیش فرض روی آن تنظیم شده است بهینه برای جزئیات و
اپتال برای گروه های بهینه سازی اگر نام فایل مشخص نشده است، به طور پیش فرض روی آن تنظیم شده است
استدرر. توجه داشته باشید که خروجی نام فایل در صورت چندتایی بازنویسی می شود
واحدهای ترجمه اگر خروجی ترکیبی از چندین واحد ترجمه مورد نظر باشد،
استدرر باید به جای آن استفاده شود
گزینه ها را می توان به دو گروه تقسیم کرد، 1) گزینه هایی که پرحرفی را توصیف می کنند
dump، و 2) گزینه هایی که توضیح می دهند کدام بهینه سازی باید گنجانده شود. گزینه ها
از هر دو گروه می توان آزادانه با هم مخلوط کرد زیرا همپوشانی ندارند. با این حال، در صورت
از هر گونه تضاد، گزینه های اخیر گزینه های قبلی در خط فرمان را لغو می کنند.
اگرچه چندین گزینه -fopt-info پذیرفته می شود، فقط یکی از آنها می تواند داشته باشد =نام فایل.
اگر نام فایل های دیگری ارائه شود، همه به جز اولین نام نادیده گرفته می شوند.
Dump verbosity گزینه های زیر را دارد
بهینه
هنگامی که بهینه سازی با موفقیت اعمال شد، اطلاعات را چاپ کنید. تا یک پاس است
تصمیم بگیرید که کدام اطلاعات مرتبط است. به عنوان مثال، وکتوریزر چاپ را عبور می دهد
محل منبع حلقه هایی که با موفقیت بردار شدند.
از دست رفته
اطلاعات مربوط به بهینه سازی های از دست رفته را چاپ کنید. پاس های فردی کنترل که
اطلاعاتی که باید در خروجی گنجانده شود. مثلا،
gcc -O2 -ftree-vectorize -fopt-info-vec-missed
اطلاعات مربوط به فرصت های بهینه سازی از دست رفته را از بردارسازی چاپ می کند
روی stderr می گذرد.
توجه داشته باشید
چاپ اطلاعات مفصل درباره بهینه سازی ها، مانند تبدیل های خاص،
پیام های دقیق تر در مورد تصمیمات و غیره
تمام چاپ اطلاعات دقیق بهینه سازی این شامل بهینه, از دست رفتهو
توجه داشته باشید.
مجموعه دوم گزینه ها گروهی از بهینه سازی ها را توصیف می کند و ممکن است شامل یکی یا
بیشتر از موارد زیر
خشونت تخلیهها را از همه بهینهسازیهای بین رویهای فعال کنید.
حلقه
Dump ها را از همه بهینه سازی های حلقه فعال کنید.
خطی
Dump ها را از همه بهینه سازی های درون خطی فعال کنید.
ویکی Dump ها را از همه بهینه سازی های برداری فعال کنید.
اپتال
Dump ها را از همه بهینه سازی ها فعال کنید. این مجموعه ای از گروه های بهینه سازی است
ذکر شده در بالا
به عنوان مثال،
gcc -O3 -fopt-info-missed=missed.all
گزارش بهینه سازی از دست رفته را از همه پاس ها به خروجی می دهد از دست رفته.همه.
به عنوان مثال دیگر،
gcc -O3 -fopt-info-inline-optimized-missed=inline.txt
اطلاعات مربوط به بهینه سازی های از دست رفته و همچنین مکان های بهینه شده را از خروجی خروجی می دهد
تمام خطوط درونی به inline.txt.
اگر نام فایل ارائه شده است، سپس تخلیه از تمام بهینه سازی های قابل اجرا است
الحاق شده به نام فایل. در غیر این صورت تخلیه بر روی خروجی است استدرر. اگر گزینه های
حذف شده است، به طور پیش فرض به تمام اپتال، به این معنی که تمام بهینه سازی های موجود را تخلیه کنید
اطلاعات از همه پاس ها در مثال زیر، تمام اطلاعات بهینه سازی خروجی روشن است
به استدرر.
gcc -O3 -fopt-info
توجه داشته باشید که -Fopt-info-vec-sissed رفتاری مشابه دارد -fopt-info-missed-vec.
به عنوان مثال دیگری در نظر بگیرید
GCC -FOPT-INFO-VEC-MISSED = VEC.MISS -FOPT-INFO-LOOP-OPTIMISED = loop.opt
در اینجا دو نام فایل خروجی وجود دارد vec.miss و loop.opt در تضاد هستند زیرا تنها یکی
فایل خروجی مجاز است در این صورت فقط گزینه اول اثر می گذارد و
گزینه های بعدی نادیده گرفته می شوند. بنابراین تنها vec.miss تولید می شود که حاوی
اطلاعاتی از وکتوریزر در مورد فرصت های از دست رفته.
-frandom-seed=رشته
این گزینه دانه ای را ارائه می دهد که GCC به جای اعداد تصادفی در تولید استفاده می کند
نام نمادهای خاصی که باید در هر فایل کامپایل شده متفاوت باشد. همچنین است
برای قرار دادن مهرهای منحصر به فرد در فایل های داده پوشش و فایل های شی تولید شده استفاده می شود
آنها می توانید استفاده کنید بذر تصادفی گزینه ای برای تولید یک شیء مشابه با قابلیت تکرار
فایل های.
La رشته باید برای هر فایلی که کامپایل می کنید متفاوت باشد.
-fsched-verbose=n
در اهدافی که از زمانبندی دستورالعمل استفاده میکنند، این گزینه مقدار آن را کنترل میکند
خروجی اشکال زدایی که زمانبندی چاپ می کند. این اطلاعات با خطای استاندارد نوشته شده است،
مگر -fdump-rtl-sched1 or -fdump-rtl-sched2 مشخص شده است که در این صورت خروجی است
به فایل فهرست روگرفت معمولی، .sched1 or .sched2 به ترتیب. با این حال برای n
بیشتر از نه، خروجی همیشه با خطای استاندارد چاپ می شود.
برای n بزرگتر از صفر، -fsched-verbose همان اطلاعات را خروجی می دهد
-fdump-rtl-sched1 و -fdump-rtl-sched2. برای n بزرگتر از یک، خروجی پایه نیز دارد
احتمالات بلوک، اطلاعات لیست آماده دقیق و اطلاعات واحد/inn. برای n
بیشتر از دو، شامل RTL در نقطه سقط، کنترل جریان و اطلاعات مناطق است. و
برای n بیش از چهار، -fsched-verbose همچنین شامل اطلاعات وابستگی است.
-Save- Temps
-save-temps=cwd
فایلهای میانی «موقت» معمولی را بهطور دائم ذخیره کنید. آنها را در جریان قرار دهید
دایرکتوری و آنها را بر اساس فایل منبع نامگذاری کنید. بنابراین، تدوین foo.c با -c
-Save- Temps فایل ها را تولید می کند foo.i و foo.s، و همچنین foo.o. این یک ایجاد می کند
پیش پردازش شده foo.i فایل خروجی حتی اگر کامپایلر در حال حاضر به طور معمول از یک استفاده می کند
پیش پردازنده یکپارچه
هنگامی که در ترکیب با -x گزینه خط فرمان، -Save- Temps معقول است
به اندازه کافی برای جلوگیری از نوشتن یک فایل منبع ورودی با پسوند یکسان
فایل میانی فایل میانی مربوطه را می توان با تغییر نام به دست آورد
فایل منبع قبل از استفاده -Save- Temps.
اگر GCC را به صورت موازی فراخوانی کنید، چندین فایل منبع مختلف را کامپایل میکنید که a را به اشتراک میگذارند
نام پایه مشترک در زیر شاخه های مختلف یا همان فایل منبع کامپایل شده برای
چندین مقصد خروجی، این احتمال وجود دارد که کامپایلرهای موازی مختلف این کار را انجام دهند
با یکدیگر تداخل کنند و فایل های موقت را بازنویسی کنند. برای مثال:
gcc -save-temps -o outdir1/foo.o indir1/foo.c&
gcc -save-temps -o outdir2/foo.o indir2/foo.c&
ممکن است منجر شود foo.i و foo.o به طور همزمان توسط هر دو کامپایلر نوشته می شود.
-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 صرف شده توسط هر زیرفرآیند را در دنباله کامپایل گزارش کنید. برای سی
فایل های منبع، این کامپایلر مناسب و اسمبلر است (به علاوه پیوند دهنده در صورت وجود پیوند
انجام شده).
بدون مشخصات فایل خروجی، خروجی به صورت زیر است:
# cc1 0.12 0.01
# به عنوان 0.00 0.01
اولین عدد در هر خط "زمان کاربر" است، یعنی زمان صرف شده برای اجرای آن
خود برنامه عدد دوم "زمان سیستم" است، زمان صرف شده برای اجرای عملیات
روال های سیستم از طرف برنامه هر دو عدد در ثانیه هستند.
با مشخصات یک فایل خروجی، خروجی به فایل نامگذاری شده اضافه می شود.
و به نظر می رسد این است:
0.12 0.01 سی سی 1
0.00 0.01 به عنوان
«زمان کاربر» و «زمان سیستم» قبل از نام برنامه منتقل میشوند
گزینه های ارسال شده به برنامه نمایش داده می شود تا بعداً بتوان تشخیص داد که چه فایلی بوده است
در حال کامپایل شدن و با کدام گزینه ها
-fvar-ردیابی
پاس ردیابی متغیر را اجرا کنید. محل ذخیره متغیرها در هر موقعیت را محاسبه می کند
در کد سپس اطلاعات اشکال زدایی بهتری تولید می شود (اگر اطلاعات اشکال زدایی باشد
فرمت این اطلاعات را پشتیبانی می کند).
هنگام کامپایل با بهینه سازی به طور پیش فرض فعال است (-اواس, -O, -O2، ...) ،
اشکال زدایی اطلاعات (-g) و فرمت اطلاعات اشکال زدایی از آن پشتیبانی می کند.
-fvar-ردیابی-تکالیف
در اوایل کامپایل، تکالیف را به متغیرهای کاربر حاشیه نویسی کنید و سعی کنید آن را انجام دهید
حاشیه نویسی در سراسر مجموعه تا انتها، در تلاشی
برای بهبود اطلاعات اشکال زدایی در حین بهینه سازی. استفاده از -gdwarf-4 همراه توصیه می شود
با آن است.
حتی اگر var-tracking غیرفعال باشد، می توان آن را فعال کرد، در این صورت حاشیه نویسی ها هستند
ایجاد و نگهداری شد، اما در پایان دور انداخته شد.
-fvar-tracking-assignments-toggle
تعویض -fvar-ردیابی-تکالیف، به همان روشی که -تغییر ضامن -g.
-print-file-name=کتابخانه
نام مطلق کامل فایل کتابخانه را چاپ کنید کتابخانه که زمانی استفاده می شود
پیوند --- و هیچ کار دیگری انجام ندهید. با این گزینه، GCC کامپایل یا پیوند نمی دهد
هر چیزی؛ فقط نام فایل را چاپ می کند.
-چاپ-چند دایرکتوری
نام دایرکتوری مربوط به multilib انتخاب شده توسط هر سوییچ دیگر را چاپ کنید
موجود در خط فرمان این دایرکتوری قرار است در وجود داشته باشد GCC_EXEC_PREFIX.
-چاپ-چند لیب
نگاشت را از نام دایرکتوری های multilib به سوئیچ های کامپایلری که آنها را فعال می کنند چاپ کنید.
نام دایرکتوری با سوئیچ ها جدا می شود ;، و هر سوئیچ با یک شروع می شود
@ به جای -، بدون فاصله بین چندین سوئیچ. این قرار است
سهولت پردازش پوسته
-چاپ-چاپ-دایرکتوری
مسیر کتابخانه های سیستم عامل را برای چندلیب انتخابی، نسبت به برخی، چاپ کنید لوب
دایرکتوری فرعی اگر کتابخانه های سیستم عامل در لوب زیر شاخه و بدون چند لیب
استفاده می شود، این معمولا فقط است .، اگر کتابخانه های سیستم عامل در آن وجود داشته باشد پسوند lib خواهر و برادر
دایرکتوری هایی که این چاپ می کند ../lib64, ../ lib or ../lib32، یا اگر کتابخانه های سیستم عامل هستند
حاضر در lib/subdir دایرکتوری های فرعی که چاپ می کند amd64, sparcv9 or ev6.
-چاپ-چندارچ
مسیر کتابخانههای سیستمعامل را برای چند آرکی انتخابی، نسبت به برخی، چاپ کنید لوب
زیرشاخه
-Print-prog-name =برنامه
پسندیدن -چاپ-فایل-نام، اما به دنبال برنامه ای مانند cpp.
-print-libgcc-file-name
مثل -print-file-name=libgcc.a.
این در هنگام استفاده مفید است -nostdlib or -nodefaultlibs اما شما می خواهید با آن پیوند برقرار کنید
libgcc.a. شما می توانید انجام دهید:
gcc -nostdlib ... `gcc -print-libgcc-file-name`
-چاپ-جستجو-dirs
نام دایرکتوری نصب پیکربندی شده و لیستی از برنامه ها را چاپ کنید
دایرکتوری های کتابخانه gcc جستجو کنید --- و هیچ کار دیگری انجام ندهید.
این زمانی مفید است که gcc پیغام خطا را چاپ می کند نصب و راه اندازی مسئله، نمی توان exec
cpp0: نه چنین پرونده or فهرست راهنما. برای حل این مشکل شما باید قرار دهید cpp0 و
سایر اجزای کامپایلر که در آن gcc انتظار دارد آنها را پیدا کند، یا می توانید تنظیم کنید
متغیر محیطی GCC_EXEC_PREFIX به دایرکتوری که آنها را نصب کرده اید. نکن
دنباله رو فراموش کن /.
-print-sysroot
دایرکتوری sysroot هدف را که در حین کامپایل استفاده می شود چاپ کنید. این است
sysroot هدف مشخص شده یا در زمان پیکربندی یا با استفاده از --sysroot گزینه،
احتمالاً با یک پسوند اضافی که به گزینه های کامپایل بستگی دارد. اگر هدف نیست
sysroot مشخص شده است، گزینه چیزی چاپ نمی کند.
پسوند -print-sysroot-headers
پسوند اضافه شده به sysroot هدف را هنگام جستجوی هدر چاپ کنید یا یک علامت بدهید
خطا اگر کامپایلر با چنین پسوندی پیکربندی نشده باشد --- و کاری انجام ندهید
چیز دیگری
-ماشین تخلیه
چاپ ماشین هدف کامپایلر (به عنوان مثال، i686-pc-linux-gnu)---و انجام نده
چیز دیگری مد نظر دارید.
- تخلیه
نسخه کامپایلر را چاپ کنید (به عنوان مثال، 3.0)--- و هیچ کار دیگری انجام ندهید.
زباله ها
مشخصات داخلی کامپایلر را چاپ کنید --- و هیچ کار دیگری انجام ندهید. (این زمانی استفاده می شود که
خود GCC در حال ساخت است.)
-fno-eliminate-unused-debug-types
به طور معمول، هنگام تولید خروجی DWARF 2، GCC از تولید خروجی نماد اشکال زدایی برای
انواعی که هیچ کجا در فایل منبع در حال کامپایل استفاده نمی شوند. گاهی اوقات مفید است
برای اینکه GCC اطلاعات اشکال زدایی را برای همه انواع اعلام شده در یک واحد کامپایل منتشر کند،
صرف نظر از اینکه آنها واقعاً در آن واحد کامپایل استفاده می شوند یا خیر
به عنوان مثال اگر در دیباگر بخواهید مقداری را به نوعی ارسال کنید که در واقع چنین نیست
در برنامه شما استفاده می شود (اما اعلام شده است). با این حال، بیشتر اوقات، این منجر به یک
مقدار قابل توجهی از فضای تلف شده
گزینه که کنترل بهینه سازی
این گزینه ها انواع مختلفی از بهینه سازی ها را کنترل می کنند.
بدون هیچ گزینه بهینه سازی، هدف کامپایلر کاهش هزینه کامپایل است
و اشکال زدایی نتایج مورد انتظار را ایجاد کند. بیانیه ها مستقل هستند: اگر شما
برنامه را با نقطه انفصال بین دستورات متوقف کنید، سپس می توانید یک مقدار جدید به آن اختصاص دهید
هر متغیر یا شمارنده برنامه را به هر دستور دیگری در تابع تغییر دهید و دریافت کنید
دقیقاً نتایجی که از کد منبع انتظار دارید.
روشن کردن پرچمهای بهینهسازی باعث میشود کامپایلر تلاش کند عملکرد و/یا را بهبود بخشد
اندازه کد به هزینه زمان کامپایل و احتمالاً امکان اشکال زدایی
برنامه است.
کامپایلر بر اساس دانشی که از برنامه دارد بهینه سازی را انجام می دهد.
کامپایل چند فایل به طور همزمان در یک حالت فایل خروجی به کامپایلر امکان استفاده از آن را می دهد
اطلاعاتی که از تمام فایل ها هنگام کامپایل کردن هر یک از آنها به دست می آید.
همه بهینه سازی ها مستقیماً توسط یک پرچم کنترل نمی شوند. فقط بهینه سازی هایی که الف دارند
پرچم در این بخش ذکر شده است.
بیشتر بهینهسازیها فقط در صورتی فعال میشوند که -O سطح در خط فرمان تنظیم شده است. در غیر این صورت
آنها غیرفعال هستند، حتی اگر پرچم های بهینه سازی فردی مشخص شده باشند.
بسته به هدف و نحوه پیکربندی GCC، مجموعه کمی متفاوت است
بهینه سازی ممکن است در هر یک فعال شود -O سطح از موارد ذکر شده در اینجا. شما می توانید GCC را فراخوانی کنید
با -Q --help=بهینه سازها برای پیدا کردن مجموعه دقیق بهینهسازیهایی که در آن فعال شدهاند
هر سطح
-O
-O1 بهینه سازی کنید. بهینه سازی کامپایل تا حدودی زمان بیشتری می برد و حافظه بسیار بیشتری برای آن می طلبد
یک تابع بزرگ
با -O، کامپایلر سعی می کند اندازه کد و زمان اجرا را کاهش دهد، بدون اینکه انجام دهد
هر بهینه سازی که زمان زیادی را برای کامپایل می گیرد.
-O پرچم های بهینه سازی زیر را روشن می کند:
-fauto-inc-dec -FCOMPARE-elim -fcprop-رجیستر می کند -fdce -fdefer-pop -تاخیر-شاخه
-fdse fguess-branch-probability -fif-conversion2 تبدیل -fif -fipa-pure-const
-fipa-profile -fipa-reference ثابت-fmerge -fsplit-wide-types -ftree-bit-ccp
-ftree-builtin-call-dce -ftree-ccp -ftree-ch -ftree-copyrename -ftree-dce
-ftree-dominator-opts -ftree-dse -ftree-forwprop -free-free -ftree-phiprop -ftree-slsr
-ftree-sra -ftree-pta -ftree-ter -funit در یک زمان
-O نیز روشن می شود -fomit-frame-pointer در ماشین هایی که انجام این کار تداخلی ندارد
با اشکال زدایی
-O2 حتی بیشتر بهینه سازی کنید. GCC تقریباً تمام بهینه سازی های پشتیبانی شده را انجام می دهد که این کار را نمی کنند
شامل یک معاوضه سرعت فضایی است. در مقایسه با -O، این گزینه هر دو را افزایش می دهد
زمان کامپایل و عملکرد کد تولید شده
-O2 تمام پرچم های بهینه سازی مشخص شده توسط را روشن می کند -O. موارد زیر را نیز روشن می کند
پرچم های بهینه سازی: -fthread-jumps -عملکردهای falign -فالین-پرش -فالین-حلقه ها
-falign-labels -fcaller-save fcrossjumping -fcse-follow-jumps -fcse-skip-blocks
-fdelete-null-pointer-checks -مجازی کردن -fdevirtualize-speculatively
-بهینه سازی ها -fgcse -fgcse-lm -fhoist- مجاور-بارها
-finline-small-functions -findirect-inlining -fipa-sra
-fisolate-erronous-paths-dereference -بهینه سازی تماس های خواهر و برادر -fpartial-inlining
-fpeepole2 -بلاک های سفارشی توابع -freorder -frerun-cse-after-loop
-fsched-interblock -fsched-spec -fschedule-insns -fschedule-insns2 fstrict-aliasing
-fstrict-سرریز تبدیل -ftree-switch -ftree-tail-ادغام -ftree-pre -ftree-vrp
لطفا به هشدار زیر توجه کنید -fgcse در مورد استناد -O2 در برنامه هایی که از محاسبات استفاده می کنند
gotos
توجه: در اوبونتو 8.10 و نسخه های بعدی، -D_FORTIFY_SOURCE=2 به طور پیش فرض تنظیم شده است، و است
زمانی فعال می شود -O روی 2 یا بالاتر تنظیم شده است. این زمان کامپایل اضافی و
بررسی زمان اجرا برای چندین تابع libc. برای غیرفعال کردن، یکی را مشخص کنید
-U_FORTIFY_SOURCE or -D_FORTIFY_SOURCE=0.
-O3 بهینه سازی بیشتر -O3 تمام بهینه سازی های مشخص شده توسط را روشن می کند -O2 و همچنین روشن می شود
la توابع -finline, -funswitch-loops, - پیش بینی کننده - مشترک, -fgcse-after-reload,
-ftree-loop-vectorize, -FTREE-SLP-Vectorize, -fvect-cost-model, -ftree-partial-pre و
-fipa-cp-clone گزینه.
-O0 زمان کامپایل را کاهش دهید و اشکال زدایی نتایج مورد انتظار را ایجاد کند. این است
به طور پیش فرض
-اواس بهینه سازی برای اندازه -اواس همه را قادر می سازد -O2 بهینه سازی هایی که معمولاً افزایش نمی یابند
اندازه کد همچنین بهینه سازی های بیشتری را انجام می دهد که برای کاهش اندازه کد طراحی شده اند.
-اواس پرچم های بهینه سازی زیر را غیرفعال می کند: -عملکردهای falign -فالین-پرش
-فالین-حلقه ها -falign-labels -بلاک های سفارشی -freorder-blocks-and-partition
-fprefetch-loop-arrays
سریع
رعایت استانداردهای سختگیرانه را نادیده بگیرید. سریع همه را قادر می سازد -O3 بهینه سازی ها آن را نیز
بهینه سازی هایی را فعال می کند که برای همه برنامه های سازگار با استاندارد معتبر نیستند. آی تی
روشن سریع-ریاضی و مخصوص فرترن -FNO-PRECTECT-PARENS و آرایه های fstack.
-اوگ تجربه اشکال زدایی را بهینه کنید. -اوگ بهینه سازی هایی را فعال می کند که تداخلی با آن نداشته باشند
اشکال زدایی. این باید سطح بهینه سازی انتخابی برای ویرایش استاندارد باشد.
چرخه کامپایل-اشکال زدایی، ارائه سطح معقولی از بهینه سازی در حین حفظ
کامپایل سریع و یک تجربه اشکال زدایی خوب.
اگر از چندگانه استفاده می کنید -O گزینه ها، با یا بدون اعداد سطح، آخرین گزینه چنین است
اونی که موثره
گزینه های فرم -fپرچم پرچم های مستقل از ماشین را مشخص کنید. اکثر پرچم ها هر دو را دارند
اشکال مثبت و منفی؛ شکل منفی از -فو is -fno-foo. در جدول زیر،
فقط یکی از فرم ها فهرست شده است --- فرمی که معمولاً استفاده می کنید. شما می توانید دیگری را کشف کنید
با حذف هر دو شکل دهید نه- یا اضافه کردن آن
گزینه های زیر بهینه سازی های خاص را کنترل می کنند. آنها یا توسط فعال می شوند -O
گزینه ها یا مربوط به مواردی هستند که هستند. شما می توانید از پرچم های زیر در موارد نادر استفاده کنید
مواردی که "تنظیم دقیق" بهینه سازی هایی که باید انجام شوند مورد نظر است.
-fno-defer-pop
همیشه به محض بازگشت آن تابع، آرگومان ها را به هر فراخوانی تابع اضافه کنید. برای
معمولاً کامپایلر اجازه می دهد تا ماشین هایی که باید آرگومان هایی را پس از فراخوانی تابع ایجاد کنند
آرگومانها در پشته برای چندین فراخوانی تابع جمع میشوند و همه آنها را به نمایش میگذارند
یک بار.
در سطوح غیر فعال است -O, -O2, -O3, -اواس.
- فوروارد-تبلیغ کردن
یک پاس انتشار رو به جلو در RTL انجام دهید. پاس سعی می کند دو دستورالعمل را ترکیب کند
و بررسی می کند که آیا می توان نتیجه را ساده کرد. اگر حلقه unrolling فعال باشد، دو پاس می شود
انجام می شود و دومی پس از باز کردن حلقه برنامه ریزی می شود.
این گزینه به طور پیش فرض در سطوح بهینه سازی فعال است -O, -O2, -O3, -اواس.
-ffp-contract=سبک
-ffp-contract = خاموش انقباض بیان ممیز شناور را غیرفعال می کند. -ffp-contract=سریع
انقباض بیان ممیز شناور مانند تشکیل ضرب-جمع ذوب شده را ممکن می کند
اگر هدف از آنها پشتیبانی بومی داشته باشد. -ffp-contract=on را قادر می سازد
اگر استاندارد زبان مجاز باشد، انقباض عبارت ممیز شناور. این هست
در حال حاضر اجرا نشده و برابر با -ffp-contract = خاموش.
پیش فرض این است -ffp-contract=سریع.
-fomit-frame-pointer
نشانگر فریم را در یک رجیستر برای توابعی که نیازی به آن ندارند، نگه ندارید. این
از دستورالعملهای ذخیره، تنظیم و بازیابی نشانگرهای فریم اجتناب میکند. آن را نیز می سازد
ثبت اضافی در بسیاری از توابع موجود است. It همچنین می سازد اشکال زدایی غیر ممکن on
برخی از ماشین آلات.
در برخی از ماشین ها، مانند VAX، این پرچم هیچ تاثیری ندارد، زیرا استاندارد است
دنباله فراخوانی به طور خودکار نشانگر فریم را کنترل می کند و هیچ چیزی توسط آن ذخیره نمی شود
تظاهر به اینکه وجود ندارد ماکرو توصیف ماشین "FRAME_POINTER_REQUIRED"
کنترل می کند که آیا یک ماشین هدف از این پرچم پشتیبانی می کند یا خیر.
با شروع GCC نسخه 4.6، تنظیمات پیشفرض (در صورت بهینهسازی برای اندازه) برای
اهداف 32 بیتی گنو/لینوکس x86 و 32 بیتی Darwin x86 به
-fomit-frame-pointer. پیش فرض را می توان به حالت پیش فرض برگرداند -fno-omit-frame-pointer by
پیکربندی GCC با --enable-frame-pointer گزینه پیکربندی
در سطوح فعال شده است -O, -O2, -O3, -اواس.
-بهینه سازی تماس های خواهر و برادر
بهینه سازی تماس های بازگشتی خواهر و برادر.
در سطوح فعال شده است -O2, -O3, -اواس.
-fno-inline
هیچ توابعی را به صورت درون خطی به غیر از آنهایی که با "always_inline" مشخص شده اند گسترش ندهید.
صفت. زمانی که بهینه سازی نمی شود این حالت پیش فرض است.
توابع منفرد را می توان با علامت گذاری آنها با "noinline" از درون خط کردن معاف کرد.
ویژگی.
-finline-small-functions
هنگامی که بدن آنها کوچکتر از حد انتظار است، عملکردها را در تماس گیرندگان خود ادغام کنید
کد فراخوانی تابع (بنابراین اندازه کلی برنامه کوچکتر می شود). کامپایلر
به صورت اکتشافی تصمیم می گیرد که کدام توابع به اندازه کافی ساده هستند که ارزش ادغام در آنها را داشته باشند
بدین ترتیب. این خطبندی برای همه توابع اعمال میشود، حتی آنهایی که به صورت درون خطی اعلام نشدهاند.
در سطح فعال شد -O2.
-findirect-inlining
همچنین تماس های غیرمستقیم درون خطی که به لطف آنها در زمان کامپایل شناخته می شوند
خط کشی قبلی این گزینه تنها زمانی تأثیری دارد که خود inlining روشن باشد
توسط توابع -finline or -finline-small-functions گزینه.
در سطح فعال شد -O2.
توابع -finline
همه توابع را برای inlining در نظر بگیرید، حتی اگر به صورت inline تعریف نشده باشند. در
کامپایلر به صورت اکتشافی تصمیم می گیرد که کدام توابع ارزش ادغام را در این راه دارند.
اگر همه فراخوانی های یک تابع معین یکپارچه شوند و تابع اعلام شود
"استاتیک"، پس تابع معمولاً به تنهایی به عنوان کد اسمبلر خروجی نمی شود.
در سطح فعال شد -O3.
توابع-finline-یک بار فراخوانی می شود
تمام توابع "استاتیک" را یک بار برای ورود به تماس گیرنده خود فراخوانی می کنند حتی اگر
آنها "در خط" علامت گذاری نشده اند. اگر فراخوانی به یک تابع داده شده یکپارچه شود،
تابع به خودی خود به عنوان کد اسمبلر خروجی نیست.
در سطوح فعال شده است -O1, -O2, -O3 و -اواس.
ترسناک درون ریز
توابع درون خطی مشخص شده با "همیشه_در خط" و توابعی که بدن آنها کوچکتر از
فراخوانی تابع سربار قبل از انجام -fprofile-generate ابزار دقیق و
پاس داخلی واقعی انجام این کار باعث می شود پروفایل به طور قابل توجهی ارزان تر و معمولا
در برنامههایی که زنجیرههای بزرگی از توابع بستهبندی تودرتو دارند، سریعتر میشوند.
به طور پیش فرض فعال شده است.
-fipa-sra
انجام جایگزینی اسکالر بین رویه ای سنگدانه ها، حذف پارامترهای استفاده نشده
و جایگزینی پارامترهای ارسال شده توسط مرجع با پارامترهای ارسال شده توسط مقدار.
در سطوح فعال شده است -O2, -O3 و -اواس.
-Finline-limit =n
بهطور پیشفرض، GCC اندازه توابع قابل تنظیم را محدود میکند. این پرچم اجازه می دهد
کنترل درشت این حد. n اندازه توابعی است که می توان درون آن خط بندی کرد
تعداد شبه دستورات
Inlining در واقع توسط تعدادی پارامتر کنترل می شود که ممکن است مشخص شود
به صورت جداگانه با استفاده از --پارام نام=ارزش. -Finline-limit =n گزینه برخی از
این پارامترها به شرح زیر است:
max-inline-insns-single
تنظیم شده است n/ 2.
Max-Inline-insns-auto
تنظیم شده است n/ 2.
برای مستنداتی از پارامترهای فردی که Inlining و را کنترل می کنند به زیر مراجعه کنید
برای پیش فرض های این پارامترها.
توجه داشته باشید: ممکن است هیچ ارزشی برای -finline-limit که منجر به رفتار پیش فرض می شود.
توجه داشته باشید: شبه دستورالعمل، در این زمینه خاص، یک انتزاع را نشان می دهد
اندازه گیری اندازه تابع به هیچ وجه نشان دهنده تعداد مونتاژ نیست
دستورالعمل ها و به این ترتیب معنای دقیق آن ممکن است از یک نسخه به یک تغییر کند
دیگر.
-fno-keep-inline-dllexport
این یک نسخه ریزدانه تر است -fkeep-inline-functions، که فقط برای
توابعی که با استفاده از ویژگی "dllexport" یا declspec اعلان می شوند
-fkeep-inline-functions
در C، توابع "استاتیک" را که "inline" در فایل شیء اعلان می شوند، منتشر کنید، حتی اگر
این تابع در تمام تماس گیرنده های آن گنجانده شده است. این سوئیچ تاثیری ندارد
توابع با استفاده از پسوند "خارجی درون خطی" در گنو C90. در C++، هر و همه را منتشر کنید
توابع درون خطی در فایل شی
-fkeep-static-consts
هنگامی که بهینهسازی روشن نیست، متغیرهایی را منتشر میکند که "Static Const" را اعلام میکنند، حتی اگر روشن باشد
به متغیرها ارجاع داده نمی شود
GCC این گزینه را به طور پیش فرض فعال می کند. اگر می خواهید کامپایلر را مجبور کنید بررسی کند که آیا a
متغیر ارجاع داده می شود، صرف نظر از اینکه بهینه سازی روشن است یا نه، استفاده کنید
la -FNo-Keep-Static-Consts گزینه.
ثابت-fmerge
تلاش برای ادغام ثابت های یکسان (ثابت رشته ها و ثابت های ممیز شناور)
در سراسر واحدهای تلفیقی
این گزینه پیش فرض برای کامپایل بهینه سازی شده در صورت اسمبلر و لینکر است
آن را حمایت کن. استفاده کنید -fno-merge-constants برای جلوگیری از این رفتار
در سطوح فعال شده است -O, -O2, -O3, -اواس.
-fmerge-all-constants
تلاش برای ادغام ثابت های یکسان و متغیرهای یکسان.
این گزینه دلالت دارد ثابت-fmerge. بعلاوه ثابت-fmerge این
به عنوان مثال، آرایه های اولیه ثابت یا متغیرهای ثابت اولیه با
انواع انتگرال یا ممیز شناور زبان هایی مانند C یا C++ به هر متغیر نیاز دارند،
از جمله چندین نمونه از یک متغیر در تماس های بازگشتی، برای داشتن متمایز
مکانها، بنابراین استفاده از این گزینه منجر به رفتار ناسازگار میشود.
-fmodulo-sched
برنامه ریزی مدول نوسان را بلافاصله قبل از اولین پاس برنامه ریزی انجام دهید. این
pass به درونیترین حلقهها نگاه میکند و دستورالعملهای آنها را با همپوشانی متفاوت مرتب میکند
تکرار
-fmodulo-sched-allow-regmoves
برنامه ریزی ماژول مبتنی بر پیامک تهاجمی تر را با حرکات ثبت مجاز انجام دهید. توسط
با تنظیم این پرچم، لبه های ضد وابستگی خاصی حذف می شوند، که باعث می شود
تولید reg-moves بر اساس تجزیه و تحلیل محدوده عمر. این گزینه موثر است
فقط با -fmodulo-sched فعال شده است
-fno-branch-count-reg
از دستورالعملهای «کاهش و انشعاب» در یک رجیستر شمارش استفاده نکنید، بلکه به جای آن
دنباله ای از دستورالعمل ها را ایجاد کنید که یک ثبات را کاهش می دهد، آن را با آن مقایسه کنید
صفر، سپس بر اساس نتیجه منشعب می شود. این گزینه فقط در حالت معنی دار است
معماری هایی که از چنین دستورالعمل هایی پشتیبانی می کنند، که شامل x86، PowerPC، IA-64 و
S / 390.
پیش فرض این است -fbranch-count-reg.
-fno-function-cse
آدرس های تابع را در رجیسترها قرار ندهید. هر دستورالعملی را که a را فراخوانی می کند، بسازید
تابع ثابت آدرس تابع را به صراحت در بر می گیرد.
این گزینه منجر به کد کمتر کارآمد می شود، اما برخی هک های عجیب و غریب که این کد را تغییر می دهند
خروجی اسمبلر ممکن است با بهینه سازی های انجام شده در زمانی که این گزینه وجود دارد اشتباه گرفته شود
استفاده نشده.
پیش فرض این است -function-cse
-fno-zero-initialized-in-bss
اگر هدف از یک بخش BSS پشتیبانی می کند، GCC به طور پیش فرض متغیرهایی را قرار می دهد که هستند
به صفر در BSS مقداردهی شد. این می تواند فضا را در کد حاصل ذخیره کند.
این گزینه این رفتار را خاموش می کند زیرا برخی از برنامه ها به طور صریح به متغیرها متکی هستند
رفتن به بخش داده --- به عنوان مثال، به طوری که فایل اجرایی به دست آمده می تواند آن را پیدا کند
شروع آن بخش و/یا فرضیاتی بر اساس آن ایجاد کنید.
پیش فرض این است -fzero-initialized-in-bss.
-fthread-jumps
بهینهسازیهایی را انجام دهید که بررسی کنید آیا پرش به مکانی منشعب میشود یا خیر
مقایسه ای که توسط اولی جمع شده است یافت می شود. اگر چنین است، شاخه اول به آن هدایت می شود
مقصد شعبه دوم یا نقطه بلافاصله پس از آن،
بسته به اینکه شرایط به درستی یا نادرستی شناخته شود.
در سطوح فعال شده است -O2, -O3, -اواس.
-fsplit-wide-types
هنگام استفاده از نوعی که چندین رجیستر را اشغال می کند، مانند "long long" در یک 32 بیت
سیستم، رجیسترها را از هم جدا کرده و آنها را به طور مستقل تخصیص می دهد. این به طور معمول
کد بهتری را برای آن انواع تولید می کند، اما ممکن است اشکال زدایی را دشوارتر کند.
در سطوح فعال شده است -O, -O2, -O3, -اواس.
-fcse-follow-jumps
در حذف عبارات فرعی رایج (CSE)، دستورالعمل های پرش را اسکن کنید
هدف پرش با هیچ مسیر دیگری قابل دسترسی نیست. به عنوان مثال، زمانی که CSE با
یک عبارت "اگر" با بند "دیگر"، CSE از پرش در هنگام شرط پیروی می کند
تست شده غلط است
در سطوح فعال شده است -O2, -O3, -اواس.
-fcse-skip-blocks
این شبیه به -fcse-follow-jumps، اما باعث می شود که CSE جهش هایی را دنبال کند
به صورت مشروط از بلوک ها عبور کنید. هنگامی که CSE با یک عبارت ساده "اگر" با شماره روبرو می شود
بند دیگری، -fcse-skip-blocks باعث می شود که CSE پرش را در اطراف بدنه دنبال کند
"اگر".
در سطوح فعال شده است -O2, -O3, -اواس.
-frerun-cse-after-loop
پس از انجام بهینه سازی حلقه، حذف زیرعبارت رایج را مجددا اجرا کنید.
در سطوح فعال شده است -O2, -O3, -اواس.
-fgcse
یک پاس حذف عمومی مشترک فرعی انجام دهید. این پاس نیز اجرا می کند
ثابت جهانی و انتشار کپی
توجه داشته باشید: هنگام کامپایل یک برنامه با استفاده از gotos محاسبه شده، یک پسوند GCC، ممکن است دریافت کنید
در صورت غیرفعال کردن حذف عمومی زیر بیان عمومی، عملکرد زمان اجرا بهتر است
با افزودن عبور کنید -fno-gcse به خط فرمان
در سطوح فعال شده است -O2, -O3, -اواس.
-fgcse-lm
چه زمانی -fgcse-lm فعال است، حذف زیرعبارت مشترک جهانی تلاش می کند حرکت کند
بارهایی که فقط توسط فروشگاه ها به درون خود کشته می شوند. این اجازه می دهد تا یک حلقه حاوی a
توالی بارگذاری/ذخیره به یک بار خارج از حلقه و یک کپی/ذخیره در داخل تغییر کند
چرخه.
زمانی که به طور پیش فرض فعال می شود -fgcse فعال شده است.
-fgcse-sm
چه زمانی -fgcse-sm فعال است، یک پاس حرکت فروشگاه پس از مشترک جهانی اجرا می شود
حذف زیرعبارات این پاس سعی می کند فروشگاه ها را از حلقه ها خارج کند. هنگام استفاده
در رابطه با -fgcse-lm، حلقه های حاوی یک توالی بار/ذخیره را می توان تغییر داد
به یک بار قبل از حلقه و یک ذخیره بعد از حلقه.
در هیچ سطح بهینه سازی فعال نیست.
-fgcse-las
چه زمانی -fgcse-las فعال است، پاس حذف عمومی زیرعبارت عمومی
بارهای اضافی را که پس از ذخیره در یک مکان حافظه (هر دو
تعدیل جزئی و کامل).
در هیچ سطح بهینه سازی فعال نیست.
-fgcse-after-reload
چه زمانی -fgcse-after-reload فعال است، یک پاس حذف بار اضافی انجام می شود
پس از بارگذاری مجدد هدف از این پاس، پاکسازی نشت های اضافی است.
-بهینه سازی های حلقه-faggressive
این گزینه به بهینهساز حلقه میگوید که از محدودیتهای زبان برای استخراج کران استفاده کند
تعداد تکرارهای یک حلقه این فرض می کند که کد حلقه فراخوانی نمی کند
رفتار نامشخص با ایجاد سرریز اعداد صحیح امضا شده یا خارج از محدوده
دسترسی های آرایه ای کران تعداد تکرارهای یک حلقه برای راهنمایی استفاده می شود
بهینه سازی تست باز کردن حلقه و لایه برداری و خروج حلقه. این گزینه فعال است
به صورت پیش فرض.
-بهینهسازیهای حلقه امن
این گزینه به بهینه ساز حلقه می گوید که فرض کند شاخص های حلقه سرریز نمی شوند و
که حلقههای با شرایط خروج غیرمعمول بینهایت نیستند. این امکان را به صورت گسترده تر می دهد
محدوده بهینه سازی حلقه حتی اگر خود بهینه ساز حلقه نتواند این موارد را ثابت کند
مفروضات معتبر هستند اگر استفاده می کنید -بهینه سازی های حلقه Wunsafe، کامپایلر به شما هشدار می دهد
اگر این نوع حلقه را پیدا کند.
fcrossjumping
تبدیل متقاطع پرش را انجام دهید. این تبدیل کد معادل و
اندازه کد را ذخیره می کند کد به دست آمده ممکن است عملکرد بهتری نسبت به بدون متقاطع داشته باشد یا نداشته باشد.
پریدن
در سطوح فعال شده است -O2, -O3, -اواس.
-fauto-inc-dec
افزایش یا کاهش آدرس ها را با دسترسی های حافظه ترکیب کنید. این پاس است
همیشه از معماری هایی که دستورالعمل هایی برای پشتیبانی از آن ندارند صرف نظر می شود.
فعال به طور پیش فرض در -O و بالاتر در معماری هایی که از این پشتیبانی می کنند.
-fdce
حذف کد مرده (DCE) را در RTL انجام دهید. فعال به طور پیش فرض در -O و بالاتر
-fdse
حذف فروشگاه مرده (DSE) را در RTL انجام دهید. فعال به طور پیش فرض در -O و بالاتر
تبدیل -fif
تلاش برای تبدیل پرش های شرطی به معادل های بدون شاخه. این شامل
استفاده از حرکات شرطی، حداقل، حداکثر، دستورات ست پرچم و شکم و برخی ترفندها
با محاسبات استاندارد قابل انجام است. استفاده از اجرای مشروط در تراشه هایی که در آن قرار دارد
موجود توسط "if-conversion2" کنترل می شود.
در سطوح فعال شده است -O, -O2, -O3, -اواس.
-fif-conversion2
از اجرای شرطی (در صورت وجود) برای تبدیل پرش های شرطی به
معادل های بدون شاخه
در سطوح فعال شده است -O, -O2, -O3, -اواس.
-fdeclone-ctor-dtor
C++ ABI به چندین نقطه ورودی برای سازنده و مخرب نیاز دارد: یکی برای a
زیر شی پایه، یکی برای یک شی کامل، و دیگری برای یک تخریبگر مجازی که فراخوانی می کند
اپراتور پس از آن حذف شود. برای یک سلسله مراتب با پایگاه های مجازی، پایه و کامل است
واریانت ها کلون هستند که به معنای دو کپی از تابع است. با این گزینه،
انواع پایه و کامل به Thunk هایی تبدیل می شوند که پیاده سازی مشترک را می نامند.
فعال شده توسط -اواس.
-fdelete-null-pointer-checks
فرض کنید که برنامه ها نمی توانند به طور ایمن اشاره گرهای تهی را حذف کنند و هیچ کد یا داده ای وجود ندارد
عنصر در آنجا ساکن است. این امکان بهینه سازی ساده تاشوی ثابت را در همه فراهم می کند
سطوح بهینه سازی علاوه بر این، سایر پاس های بهینه سازی در GCC از این پرچم استفاده می کنند
کنترل تجزیه و تحلیل جریان داده های جهانی که بررسی های بی فایده برای نشانگرهای پوچ را حذف می کند.
اینها فرض می کنند که اگر یک اشاره گر بعد از اینکه قبلاً ارجاع داده نشده است بررسی شود، آن را
نمی تواند پوچ باشد
البته توجه داشته باشید که در برخی محیط ها این فرض درست نیست. استفاده کنید
-fno-delete-null-pointer-checks برای غیرفعال کردن این بهینه سازی برای برنامه هایی که وابسته هستند
روی آن رفتار
برخی از اهداف، به خصوص موارد تعبیه شده، این گزینه را در تمام سطوح غیرفعال می کنند. در غیر این صورت
در تمام سطوح فعال است: -O0, -O1, -O2, -O3, -اواس. پاس هایی که از اطلاعات استفاده می کنند
به طور مستقل در سطوح مختلف بهینه سازی فعال می شوند.
-مجازی کردن
سعی کنید تماس ها را به توابع مجازی به تماس های مستقیم تبدیل کنید. این هر دو انجام می شود
در یک رویه و به صورت بین رویه ای به عنوان بخشی از خط کشی غیرمستقیم
("-findirect-inlining") و انتشار ثابت بین رویه ای (-fipa-cp). فعال شد
در سطوح -O2, -O3, -اواس.
-fdevirtualize-speculatively
سعی کنید تماس ها را به توابع مجازی به تماس های مستقیم گمانه زنی تبدیل کنید. بر اساس
تجزیه و تحلیل گراف وراثت نوع، تعیین مجموعه ای از برای یک فراخوانی داده شده است
اهداف احتمالی اگر مجموعه کوچک است، ترجیحاً اندازه 1، تماس را به an تغییر دهید
تصمیم گیری مشروط در تماس مستقیم و غیر مستقیم تماس های سوداگرانه بیشتر را قادر می سازد
بهینه سازی ها، مانند درون خطی. وقتی بعد از بهینه سازی بیشتر بی فایده به نظر می رسند،
آنها دوباره به شکل اصلی تبدیل می شوند.
-بهینه سازی ها
تعدادی بهینه سازی جزئی را انجام دهید که نسبتاً گران هستند.
در سطوح فعال شده است -O2, -O3, -اواس.
-رایگان
سعی کنید دستورالعمل های افزونه اضافی را حذف کنید. این به ویژه برای
معماری x86-64، که به طور ضمنی در ثبات های 64 بیتی پس از
نوشتن به نیمه 32 بیتی پایین آنها.
برای Alpha، AArch64 و x86 در سطوح فعال است -O2, -O3, -اواس.
-fno-lifetime-dse
در C++ مقدار یک شی فقط تحت تأثیر تغییرات در طول عمر آن قرار می گیرد: وقتی
سازنده شروع می شود، شی دارای یک مقدار نامشخص است، و هر گونه تغییر در طول
زمانی که شیء از بین می رود، عمر جسم مرده است. فروشگاه به طور معمول مرده
حذف از این مزیت استفاده خواهد کرد. اگر کد شما متکی به مقدار است
ذخیره سازی اشیا فراتر از طول عمر جسم باقی می ماند، می توانید از این پرچم استفاده کنید
این بهینه سازی را غیرفعال کنید
-رشد-محدوده-کوچک شدن
تلاش برای کاهش فشار رجیستر از طریق انقباض محدوده زنده ثبت. این هست
برای پردازنده های سریع با مجموعه های ثبت اندازه کوچک یا متوسط مفید است.
-fira-algorithm=الگوریتم
از الگوریتم رنگ آمیزی مشخص شده برای تخصیص دهنده ثبت یکپارچه استفاده کنید. در
الگوریتم استدلال می تواند باشد اولویت، که رنگ آمیزی اولویت Chow را مشخص می کند یا CB,
که رنگ آمیزی Chaitin-Briggs را مشخص می کند. رنگ آمیزی Chaitin-Briggs اجرا نمی شود
برای همه معماری ها، اما برای اهدافی که از آن پشتیبانی می کنند، پیش فرض است
زیرا کد بهتری تولید می کند.
-فیرا-منطقه=منطقه
از مناطق مشخص شده برای تخصیص دهنده ثبت یکپارچه استفاده کنید. در منطقه استدلال
باید یکی از موارد زیر باشد:
تمام از همه حلقه ها به عنوان مناطق تخصیص ثبت استفاده کنید. این می تواند بهترین نتایج را برای
ماشینهایی با مجموعه رجیستر کوچک و/یا نامنظم.
مخلوط
از همه حلقه ها به جز حلقه هایی با فشار رجیستر کوچک به عنوان مناطق استفاده کنید. این
ارزش معمولاً در اکثر موارد و برای اکثر معماری ها بهترین نتایج را می دهد و
هنگام کامپایل با بهینه سازی سرعت، به طور پیش فرض فعال است (-O, -O2، ...).
یک از همه توابع به عنوان یک منطقه استفاده کنید. این معمولا منجر به کوچکترین کد می شود
اندازه، و به طور پیش فرض برای فعال است -اواس or -O0.
-فیرا-بالابر-فشار
از IRA برای ارزیابی فشار رجیستر در کارت بالابر کد برای تصمیم گیری برای بالا بردن استفاده کنید
اصطلاحات. این گزینه معمولا منجر به کدهای کوچکتر می شود، اما می تواند سرعت را کاهش دهد
کامپایلر پایین
این گزینه در سطح فعال است -اواس برای همه اهداف
-فیرا-حلقه-فشار
از IRA برای ارزیابی فشار ثبت در حلقه ها برای تصمیم گیری برای جابجایی متغیرهای حلقه استفاده کنید.
این گزینه معمولاً منجر به تولید کدهای سریعتر و کوچکتر در ماشینهای با
فایل های رجیستر بزرگ (>= 32 رجیستر)، اما می تواند سرعت کامپایلر را کاهش دهد.
این گزینه در سطح فعال است -O3 برای برخی از اهداف
-fno-ira-share-save-slots
اشتراکگذاری شکافهای پشتهای را که برای ذخیره رجیسترهای سخت استفادهشده از تماس استفاده میشوند، غیرفعال کنید
تماس. هر رجیستر سخت یک اسلات پشته جداگانه و در نتیجه پشته تابع دریافت می کند
قاب ها بزرگتر هستند
-fno-ira-share-spill-slots
اشتراک گذاری شکاف های پشته ای اختصاص داده شده برای شبه ثبت نام ها را غیرفعال کنید. هر شبه ثبت
که یک رجیستر سخت دریافت نمی کند، یک اسلات پشته جداگانه و در نتیجه تابع دریافت می کند
قاب های پشته بزرگتر هستند.
-FIRA-VERBOSE =n
گویا بودن فایل dump را برای تخصیص دهنده ثبت یکپارچه کنترل کنید. در
مقدار پیش فرض 5 است. اگر مقدار n بزرگتر یا مساوی 10 باشد، خروجی dump ارسال می شود
به stderr با استفاده از همان فرمت n منهای 10
-تاخیر-شاخه
اگر برای ماشین هدف پشتیبانی می شود، سعی کنید دستورات را برای بهره برداری مجدد ترتیب دهید
اسلات های دستورالعمل پس از دستورالعمل های شعبه با تأخیر در دسترس هستند.
در سطوح فعال شده است -O, -O2, -O3, -اواس.
-fschedule-insns
اگر برای ماشین هدف پشتیبانی میشود، سعی کنید دستورالعملها را برای حذف مجدد ترتیب دهید
به دلیل در دسترس نبودن داده های مورد نیاز، اجرا متوقف می شود. این به ماشین هایی کمک می کند که
با اجازه دادن به دستورالعملهای دیگر، دستورالعملهای ممیز شناور یا بار حافظه آهسته داشته باشید
تا زمانی که نتیجه بارگذاری یا دستورالعمل ممیز شناور مورد نیاز باشد صادر شود.
در سطوح فعال شده است -O2, -O3.
-fschedule-insns2
مشابه -fschedule-insns، اما یک مجوز اضافی برای زمانبندی دستورالعمل درخواست می کند
پس از تخصیص ثبت نام انجام شد. این امر به ویژه در ماشینهایی با a مفید است
تعداد نسبتاً کم رجیسترها و جایی که دستورالعملهای بارگذاری حافظه بیشتر از آن طول میکشد
یک چرخه
در سطوح فعال شده است -O2, -O3, -اواس.
-fno-sched-interblock
دستورالعمل ها را در بلوک های اصلی برنامه ریزی نکنید. این معمولاً به طور پیش فرض فعال است
هنگام برنامه ریزی قبل از تخصیص ثبت نام، یعنی با -fschedule-insns و یا در -O2 or
بالاتر
-fno-sched-spec
اجازه حرکت گمانهزنانه دستورالعملهای بدون بار را ندهید. این معمولا توسط فعال می شود
پیش فرض هنگام برنامه ریزی قبل از تخصیص ثبت نام، یعنی با -fschedule-insns و یا در
-O2 و یا بالاتر.
-fsched-pressure
قبل از تخصیص رجیستر، زمانبندی insn حساس به فشار ثبت را فعال کنید. این
تنها زمانی معنا پیدا می کند که زمان بندی قبل از اینکه تخصیص ثبت فعال شود، یعنی با
-fschedule-insns و یا در -O2 یا بالاتر استفاده از این گزینه می تواند تولید را بهبود بخشد
کد کنید و اندازه آن را با جلوگیری از افزایش فشار ثبت بیش از عدد کاهش دهید
از رجیسترهای سخت موجود و نشتهای بعدی در تخصیص ثبت.
-fsched-spec-load
اجازه حرکت گمانه زنی برخی دستورالعمل های بار را بدهید. این فقط زمانی معنا پیدا می کند که
برنامه ریزی قبل از تخصیص ثبت نام، یعنی با -fschedule-insns و یا در -O2 و یا بالاتر.
-fsched-spec-load-dangerous
اجازه حرکت گمانهزنی دستورالعملهای بار بیشتری را بدهید. این فقط زمانی معنا پیدا می کند که
برنامه ریزی قبل از تخصیص ثبت نام، یعنی با -fschedule-insns و یا در -O2 و یا بالاتر.
-fsched-stalled-insns
-fsched-stalled-insns=n
تعریف کنید که چه تعداد ins (در صورت وجود) می تواند پیش از موعد از صف متوقف شده جابجا شود.
در طول دومین پاس برنامه ریزی وارد لیست آماده می شود. -fno-sched-stalled-insns
به این معنی که هیچ شرکتی پیش از موعد جابجا نمی شود، -fsched-stalled-insns=0 یعنی وجود ندارد
محدودیت در تعداد insns های صف را می توان پیش از موعد جابجا کرد. -fsched-stalled-insns
بدون مقدار معادل است -fsched-stalled-insns=1.
-fsched-stalled-insns-dep
-fsched-stalled-insns-dep=n
تعریف کنید که چند گروه insn (چرخه) برای وابستگی به یک insn متوقف شده بررسی می شوند
که کاندیدای حذف زودهنگام از صف انس های متوقف شده است. این دارد
یک اثر فقط در طول دومین پاس برنامه ریزی، و فقط اگر -fsched-stalled-insns is
استفاده شده. -fno-sched-stalled-insns-dep برابر است با -fsched-stalled-insns-dep = 0.
-fsched-stalled-insns-dep بدون مقدار معادل است
-fsched-stalled-insns-dep = 1.
-FSched2-he-superblocks
هنگام برنامه ریزی پس از تخصیص رجیستر، از زمان بندی superblock استفاده کنید. این اجازه می دهد
حرکت در سراسر مرزهای بلوک اصلی، که منجر به برنامهریزی سریعتر میشود. این گزینه است
تجربی، زیرا تمام توصیفات ماشین استفاده شده توسط GCC به اندازه کافی CPU را مدل نمی کنند
برای جلوگیری از نتایج غیر قابل اعتماد از الگوریتم.
این فقط در هنگام برنامه ریزی پس از تخصیص ثبت، یعنی با
-fschedule-insns2 و یا در -O2 و یا بالاتر.
-fsched-group-heuristic
اکتشافی گروهی را در زمانبندی فعال کنید. این اکتشافی به نفع دستورالعمل است
که متعلق به یک گروه برنامه ریزی است. این به طور پیش فرض در هنگام برنامه ریزی فعال است
فعال، یعنی با -fschedule-insns or -fschedule-insns2 و یا در -O2 و یا بالاتر.
-fsched-critical-path-heuristic
اکتشافی مسیر بحرانی را در زمانبندی فعال کنید. این اکتشافی به نفع
دستورالعمل در مسیر بحرانی این به طور پیش فرض در هنگام برنامه ریزی فعال است
فعال، یعنی با -fschedule-insns or -fschedule-insns2 و یا در -O2 و یا بالاتر.
-fsched-spec-insn-heuristic
اکتشافی دستورات نظری را در زمانبندی فعال کنید. این اکتشافی به نفع
دستورالعمل های سوداگرانه با ضعف وابستگی بیشتر این به طور پیش فرض فعال است
زمانی که زمانبندی فعال است، یعنی با -fschedule-insns or -fschedule-insns2 و یا در -O2
و یا بالاتر.
-fsched-rank-heuristic
اکتشافی رتبه را در زمانبندی فعال کنید. این اکتشافی به نفع دستورالعمل است
متعلق به یک بلوک اصلی با اندازه یا فرکانس بیشتر. این به طور پیش فرض فعال است
زمانی که زمانبندی فعال است، یعنی با -fschedule-insns or -fschedule-insns2 و یا در -O2
و یا بالاتر.
-fsched-last-insn-heuristic
اکتشافی آخرین دستورالعمل را در زمانبندی فعال کنید. این اکتشافی به نفع
دستورالعملی که کمتر به آخرین دستورالعمل برنامه ریزی شده وابسته است. این فعال است
به طور پیش فرض زمانی که زمان بندی فعال است، یعنی با -fschedule-insns or -fschedule-insns2
و یا در -O2 و یا بالاتر.
-fsched-dep-count-heuristic
اکتشافی شمارش وابسته را در زمانبندی فعال کنید. این اکتشافی به نفع
دستورالعملی که بسته به آن دستورات بیشتری دارد. این به طور پیش فرض فعال است
زمانی که زمانبندی فعال است، یعنی با -fschedule-insns or -fschedule-insns2 و یا در -O2
و یا بالاتر.
-freschedule-modulo-scheduled-loops
زمانبندی مدول قبل از زمانبندی سنتی انجام میشود. اگر یک حلقه مدول باشد
برنامهریزیشده، پاسهای زمانبندی بعدی ممکن است برنامه آن را تغییر دهد. از این گزینه استفاده کنید تا
آن رفتار را کنترل کنید
-برنامه ریزی انتخابی
دستورالعمل ها را با استفاده از الگوریتم زمان بندی انتخابی برنامه ریزی کنید. برنامه ریزی انتخابی اجرا می شود
به جای اولین پاس زمانبندی
-زمانبندی-fselective2
دستورالعمل ها را با استفاده از الگوریتم زمان بندی انتخابی برنامه ریزی کنید. برنامه ریزی انتخابی اجرا می شود
به جای پاس زمانبندی دوم.
-صیل صفحه بندی
در طول زمانبندی انتخابی، لولهگذاری نرمافزاری درونیترین حلقهها را فعال کنید. این
گزینه تاثیری ندارد مگر اینکه یکی از -برنامه ریزی انتخابی or -زمانبندی-fselective2
روشن است
حلقه های بیرونی لوله گذاری-fsel-sched
هنگام لولهکشی حلقهها در طول زمانبندی انتخابی، حلقههای بیرونی را نیز خطکشی کنید. این
گزینه تاثیری ندارد مگر اینکه -صیل صفحه بندی روشن است
-Fshrink-Wrap
پیشگفتارهای تابع را فقط قبل از بخشهایی از تابع که به آن نیاز دارند، منتشر کنید
بالای تابع این پرچم به طور پیش فرض در فعال است -O و بالاتر
-fcaller-save
فعال کردن تخصیص مقادیر به رجیسترهایی که توسط فراخوانی توابع clobber شده اند
ارسال دستورالعمل های اضافی برای ذخیره و بازیابی رجیسترها در اطراف چنین تماس هایی. چنین
تخصیص تنها زمانی انجام می شود که به نظر می رسد منجر به کد بهتر شود.
این گزینه همیشه به صورت پیشفرض در ماشینهای خاصی فعال است، معمولاً ماشینهایی که این کار را انجام میدهند
هیچ ثبت فراخوانی برای استفاده در عوض وجود ندارد.
در سطوح فعال شده است -O2, -O3, -اواس.
-fcombine-stack-adjustments
تنظیمات پشته (فشار و باز کردن) و منابع حافظه را پشته ردیابی می کند و سپس تلاش می کند
برای یافتن راه هایی برای ترکیب آنها.
فعال به طور پیش فرض در -O1 و بالاتر
-fconserve-stack
سعی کنید استفاده از پشته را به حداقل برسانید. کامپایلر سعی می کند از فضای پشته کمتری استفاده کند، حتی
اگر این باعث کندی برنامه شود. این گزینه به معنای تنظیم قاب پشته بزرگ
پارامتر به 100 و پشته بزرگ-قاب-رشد پارامتر تا 400
-ftree-reassoc
پیوند مجدد را روی درختان انجام دهید. این پرچم به طور پیش فرض در فعال است -O و بالاتر
-ftree-pre
حذف افزونگی جزئی (PRE) را روی درختان انجام دهید. این پرچم توسط فعال شده است
پیش فرض در -O2 و -O3.
-ftree-partial-pre
حذف جزئی افزونگی (PRE) را تهاجمی تر کنید. این پرچم توسط فعال شده است
پیش فرض در -O3.
-ftree-forwprop
انجام تکثیر رو به جلو روی درختان. این پرچم به طور پیش فرض در فعال است -O و
بالاتر
-free-free
حذف کامل افزونگی (رایگان) روی درختان انجام دهید. تفاوت بین FRE و
PRE این است که FRE فقط عباراتی را در نظر می گیرد که در تمام مسیرهای منتهی به محاسبه می شوند
محاسبات اضافی این تجزیه و تحلیل سریعتر از PRE است، اگرچه تعداد کمتری را در معرض دید قرار می دهد
تعدیل کار این پرچم به طور پیش فرض در فعال است -O و بالاتر
-ftree-phiprop
انجام بلند کردن بارها از نشانگرهای شرطی روی درختان. این پاس توسط فعال شده است
پیش فرض در -O و بالاتر
-fhoist- مجاور-بارها
اگر بارها از هر دو شاخه اگر بارها از
مکان های مجاور در همان ساختار و معماری هدف دارای شرطی است
آموزش حرکت این پرچم به طور پیش فرض در فعال است -O2 و بالاتر
-ftree-copy-prop
انجام تکثیر کپی روی درختان. این پاس عملیات کپی غیر ضروری را حذف می کند.
این پرچم به طور پیش فرض در فعال است -O و بالاتر
-fipa-pure-const
کشف کنید که کدام توابع خالص یا ثابت هستند. فعال به طور پیش فرض در -O و بالاتر
-fipa-reference
کشف کنید که کدام متغیرهای استاتیک از واحد کامپایل خارج نمی شوند. فعال شده توسط
پیش فرض در -O و بالاتر
-فیپا-پتا
انجام تجزیه و تحلیل اشاره گر بین رویه ای و اصلاح بین رویه ای و
تجزیه و تحلیل مرجع این گزینه می تواند باعث افزایش حافظه و استفاده از زمان کامپایل روشن شود
واحدهای تلفیقی بزرگ به طور پیش فرض در هیچ سطح بهینه سازی فعال نیست.
-fipa-profile
انتشار پروفایل بین رویه ای را انجام دهید. توابع فقط از سرما فراخوانی می شوند
عملکردها به عنوان سرد علامت گذاری شده اند. همچنین توابع یک بار اجرا می شوند (مانند "سرد"،
"noreturn"، سازنده های ساکن یا تخریب کننده ها) شناسایی می شوند. توابع سرد و
بخش های کمتری از توابع که یک بار اجرا می شوند، برای اندازه بهینه می شوند. فعال شده توسط
پیش فرض در -O و بالاتر
-fipa-cp
انتشار ثابت بین رویه ای را انجام دهید. این بهینه سازی برنامه را تحلیل می کند
برای تعیین اینکه چه زمانی مقادیر ارسال شده به توابع ثابت هستند و سپس بهینه می شود
بر این اساس. این بهینه سازی می تواند به طور قابل ملاحظه ای عملکرد را افزایش دهد اگر
برنامه دارای ثابت هایی است که به توابع منتقل می شوند. این پرچم به طور پیش فرض در فعال است
-O2, -اواس و -O3.
-fipa-cp-clone
شبیه سازی تابع را انجام دهید تا انتشار ثابت بین رویه ای قوی تر شود. چه زمانی
فعال، انتشار ثابت بین رویهای، شبیهسازی تابع را انجام میدهد
تابع قابل مشاهده خارجی را می توان با آرگومان های ثابت فراخوانی کرد. چون این
بهینه سازی می تواند چندین نسخه از توابع ایجاد کند، ممکن است به طور قابل توجهی افزایش یابد
اندازه کد (نگاه کنید به --پارام ipcp-unit-growth=ارزش). این پرچم به طور پیش فرض در فعال است
-O3.
-fisolate-erronous-paths-dereference
مسیرهایی را که به دلیل عدم ارجاع a باعث ایجاد رفتار نادرست یا تعریف نشده می شوند، شناسایی کنید
نشانگر NULL. آن مسیرها را از جریان کنترل اصلی جدا کنید و عبارت را بچرخانید
با رفتار نادرست یا تعریف نشده در یک تله.
ویژگی-fisolate-erroneous paths
مسیرهایی را که به دلیل وجود مقدار NULL باعث ایجاد رفتار نادرست یا تعریف نشده می شوند را شناسایی کنید
به گونه ای استفاده می شود که توسط ویژگی "returns_nonnull" یا "nonnull" ممنوع است.
آن مسیرها را از جریان کنترل اصلی جدا کنید و عبارت را با اشتباه تبدیل کنید
یا رفتار تعریف نشده در یک تله. این در حال حاضر فعال نیست، اما ممکن است فعال باشد
توسط "-O2" در آینده.
سه سینک
حرکت ذخیره رو به جلو را روی درختان انجام دهید. این پرچم به طور پیش فرض در فعال است -O و
بالاتر
-ftree-bit-ccp
انتشار ثابت بیت شرطی پراکنده را روی درختان انجام دهید و نشانگر را منتشر کنید
اطلاعات تراز این پاس فقط بر روی متغیرهای اسکالر محلی عمل می کند و می باشد
فعال به طور پیش فرض در -O و بالاتر. مستلزم آن است -ftree-ccp فعال شده است.
-ftree-ccp
انتشار ثابت شرطی پراکنده (CCP) را روی درختان انجام دهید. فقط این پاس
روی متغیرهای اسکالر محلی عمل می کند و به طور پیش فرض در فعال است -O و بالاتر
تبدیل -ftree-switch
تبدیل مقادیر اولیه ساده در یک سوئیچ به مقداردهی اولیه از a را انجام دهید
آرایه اسکالر این پرچم به طور پیش فرض در فعال است -O2 و بالاتر
-ftree-tail-ادغام
دنبال دنباله کدهای یکسان باشید. وقتی پیدا شد، یکی را با پرش به دیگری جایگزین کنید.
این بهینه سازی به عنوان ادغام دم یا پرش متقاطع شناخته می شود. این پرچم توسط فعال شده است
پیش فرض در -O2 و بالاتر. زمان تدوین در این پاس را می توان با استفاده محدود کرد
حداکثر-دم-ادغام-مقایسه پارامتر و حداکثر-دم-ادغام-تکرار پارامتر.
-ftree-dce
حذف کد مرده (DCE) را روی درختان انجام دهید. این پرچم به طور پیش فرض در فعال است -O
و بالاتر
-ftree-builtin-call-dce
انجام حذف کد مرده شرطی (DCE) برای فراخوانی توابع داخلی که
ممکن است "errno" را تنظیم کند اما در غیر این صورت عاری از عوارض جانبی است. این پرچم به طور پیش فرض فعال است
at -O2 و بالاتر اگر -اواس نیز مشخص نشده است.
-ftree-dominator-opts
انجام انواع پاکسازی اسکالر ساده (تکثیر ثابت/کپی، افزونگی).
حذف، انتشار دامنه و ساده سازی بیان) بر اساس یک غالب
پیمایش درخت این نیز پرش threading را انجام می دهد (برای کاهش پرش به پرش). این
پرچم به طور پیش فرض در فعال است -O و بالاتر
-ftree-dse
حذف فروشگاه مرده (DSE) را روی درختان انجام دهید. یک فروشگاه مرده ذخیره ای برای یک خاطره است
مکانی که بعداً توسط فروشگاه دیگری بدون هیچ بار مداخلهای بازنویسی میشود. که در
در این مورد فروشگاه قبلی را می توان حذف کرد. این پرچم به طور پیش فرض در فعال است -O و
بالاتر
-ftree-ch
کپی هدر حلقه را روی درختان انجام دهید. این مفید است زیرا افزایش می یابد
اثربخشی بهینه سازی حرکت کد همچنین یک پرش را ذخیره می کند. این پرچم است
فعال به طور پیش فرض در -O و بالاتر. برای آن فعال نیست -اواس، از آنجایی که معمولا
اندازه کد را افزایش می دهد.
-ftree-loop-optimize
بهینه سازی حلقه ها را روی درختان انجام دهید. این پرچم به طور پیش فرض در فعال است -O و
بالاتر
-ftree-loop-linear
تبدیل های تبادل حلقه را روی درخت انجام دهید. مثل -فلوپ-تبادل. برای استفاده
این تبدیل کد، GCC باید با آن پیکربندی شود --with-ppl و --with-cloog به
زیرساخت تبدیل حلقه گرافیت را فعال کنید.
-فلوپ-تبادل
تبدیل های تبادل حلقه را روی حلقه ها انجام دهید. تعویض دو حلقه تو در تو
حلقه های داخلی و خارجی را تغییر می دهد. به عنوان مثال، یک حلقه مانند:
DO J = 1، M
DO I = 1، N
A(J, I) = A(J, I) * C
در پایان
در پایان
تبادل حلقه حلقه را طوری تبدیل می کند که انگار نوشته شده است:
DO I = 1، N
DO J = 1، M
A(J, I) = A(J, I) * C
در پایان
در پایان
زمانی که "N" بزرگتر از حافظه پنهان باشد، می تواند مفید باشد، زیرا در Fortran، the
عناصر یک آرایه به طور پیوسته توسط ستون و نسخه اصلی در حافظه ذخیره می شوند
حلقه روی ردیفها تکرار میشود و به طور بالقوه در هر دسترسی یک حافظه پنهان ایجاد میکند. این
بهینه سازی برای همه زبان های پشتیبانی شده توسط GCC اعمال می شود و محدود به آن نیست
فرترن برای استفاده از این تبدیل کد، GCC باید با آن پیکربندی شود --with-ppl
و --with-cloog برای فعال کردن زیرساخت تبدیل حلقه گرافیت.
-فلوپ-نوار-معدن
تبدیلهای استخراج نوار حلقه را روی حلقهها انجام دهید. استخراج نواری یک حلقه را به آن تقسیم می کند
دو حلقه تو در تو حلقه بیرونی دارای گام هایی برابر با اندازه نوار و داخلی است
حلقه دارای گام هایی از حلقه اصلی در یک نوار است. طول نوار قابل تغییر است
با استفاده از حلقه-بلوک-کاشی-اندازه پارامتر. به عنوان مثال، یک حلقه مانند:
DO I = 1، N
A(I) = A(I) + C
در پایان
استخراج نوار حلقه حلقه را طوری تبدیل می کند که انگار نوشته شده است:
DO II = 1، N، 51
DO I = II، دقیقه (II + 50، N)
A(I) = A(I) + C
در پایان
در پایان
این بهینه سازی برای همه زبان های پشتیبانی شده توسط GCC اعمال می شود و به آن محدود نمی شود
فرترن برای استفاده از این تبدیل کد، GCC باید با آن پیکربندی شود --with-ppl
و --with-cloog برای فعال کردن زیرساخت تبدیل حلقه گرافیت.
-فلوپ بلوک
تبدیل حلقه مسدود کننده را روی حلقه ها انجام دهید. Blocking strip mines هر حلقه در
لانه حلقه به گونه ای است که دسترسی های حافظه حلقه های عنصر در حافظه نهان قرار می گیرد. در
طول نوار را می توان با استفاده از حلقه-بلوک-کاشی-اندازه پارامتر. مثلا،
حلقه ای مانند:
DO I = 1، N
DO J = 1، M
A (j ، i) = b (i) + c (j)
در پایان
در پایان
مسدود کردن حلقه حلقه را طوری تبدیل می کند که انگار نوشته شده است:
DO II = 1، N، 51
DO JJ = 1، M، 51
DO I = II، دقیقه (II + 50، N)
DO J = JJ، دقیقه (JJ + 50، M)
A (j ، i) = b (i) + c (j)
در پایان
در پایان
در پایان
در پایان
که می تواند مفید باشد زمانی که "M" بزرگتر از حافظه پنهان است، زیرا درونی ترین حلقه است
بر روی مقدار کمتری از داده ها که می تواند در حافظه پنهان نگهداری شود، تکرار می شود. این
بهینه سازی برای همه زبان های پشتیبانی شده توسط GCC اعمال می شود و محدود به آن نیست
فرترن برای استفاده از این تبدیل کد، GCC باید با آن پیکربندی شود --with-ppl
و --with-cloog برای فعال کردن زیرساخت تبدیل حلقه گرافیت.
-فگرافیت-هویت
تبدیل هویت برای گرافیت را فعال کنید. برای هر SCOP ما تولید می کنیم
نمایش چند وجهی و تبدیل آن به gimple. استفاده كردن -فگرافیت-هویت
ما می توانیم هزینه ها یا مزایای تبدیل GIMPLE -> GRAPHITE -> GIMPLE را بررسی کنیم.
برخی از حداقل بهینهسازیها نیز توسط CLooG مولد کد انجام میشوند، مانند index
تقسیم و حذف کد مرده در حلقه ها.
-floop-nest-optimize
بهینهساز آشیانه حلقه مبتنی بر ISL را فعال کنید. این یک بهینه ساز لانه حلقه عمومی است
در الگوریتم های بهینه سازی پلوتون یک ساختار حلقه بهینه شده را محاسبه می کند
داده-محلی و موازی. این گزینه آزمایشی است.
-floop-parallelize-all
از تحلیل وابستگی داده های گرافیت برای شناسایی حلقه هایی که می توانند موازی شوند استفاده کنید.
همه حلقههایی را که میتوان آنالیز کرد موازی کرد تا وابستگیهای حامل حلقه را نداشته باشند
بدون بررسی اینکه موازی کردن حلقه ها سودآور است.
-fcheck-data-deps
نتایج چندین تحلیلگر وابستگی داده را مقایسه کنید. این گزینه برای
اشکال زدایی تحلیلگرهای وابستگی داده ها
-ftree-loop-if-convert
سعی کنید پرش های شرطی در درونی ترین حلقه ها را به بدون شاخه تبدیل کنید
معادل ها هدف حذف کنترل جریان از درونی ترین حلقه ها به ترتیب است
برای بهبود توانایی پاس برداری برای مدیریت این حلقه ها. این هست
اگر برداری فعال باشد به طور پیش فرض فعال می شود.
-ftree-loop-if-convert-stores
سعی کنید پرش های شرطی حاوی نوشته های حافظه را نیز تبدیل کنید. این
تبدیل می تواند برای برنامه های چند رشته ای ناامن باشد زیرا تبدیل به شرطی می شود
حافظه در حافظه بدون قید و شرط می نویسد. مثلا،
برای (i = 0؛ i < N؛ i++)
اگر (شرط)
A[i] = expr;
تبدیل می شود به
برای (i = 0؛ i < N؛ i++)
A[i] = شرایط expr : A[i];
به طور بالقوه رقابت های داده را تولید می کند.
توزیع -ftree-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
در پایان
الگوی-حلقه-دور-توزیع
توزیع حلقهای از الگوهایی را انجام دهید که میتوانند کد با فراخوانی به a تولید شوند
کتابخانه این پرچم به طور پیش فرض در فعال است -O3.
این پاس حلقه های اولیه را توزیع می کند و یک فراخوانی به memset صفر ایجاد می کند.
به عنوان مثال، حلقه
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
در پایان
و حلقه اولیه به یک فراخوانی به memset صفر تبدیل می شود.
-ftree-loop-im
حرکت ثابت حلقه را روی درختان انجام دهید. این پاس فقط ثابت هایی را که سخت هستند حرکت می دهد
برای رسیدگی در سطح RTL (تماس های تابع، عملیاتی که به دنباله های غیر ضروری گسترش می یابد
از insns). با -funswitch-loops همچنین عملوندهای شرایطی را که هستند حرکت می دهد
ثابت خارج از حلقه، به طوری که ما می توانیم فقط از تجزیه و تحلیل تغییر ناپذیری بی اهمیت در آن استفاده کنیم
حلقه لغو سوئیچینگ پاس همچنین شامل حرکت فروشگاه است.
-ftree-loop-ivcanon
یک شمارنده متعارف برای تعداد تکرارها در حلقه هایی که برای آنها تعیین می شود ایجاد کنید
تعداد تکرار نیاز به تجزیه و تحلیل پیچیده دارد. بهینه سازی های بعدی ممکن است
تعداد را به راحتی تعیین کنید به ویژه در ارتباط با باز کردن چرخش مفید است.
-فیووپت
انجام بهینه سازی متغیرهای القایی (کاهش قدرت، متغیر القایی
ادغام و حذف متغیر القایی) روی درختان.
-ftree-parallylize-loops = n
حلقه ها را موازی کنید، یعنی فضای تکرار آنها را برای اجرا در n رشته تقسیم کنید. این هست
فقط برای حلقه هایی که تکرار آنها مستقل هستند و می توانند دلخواه باشند امکان پذیر است
دوباره سفارش داد. بهینه سازی فقط در ماشین های چند پردازنده ای برای حلقه ها سودآور است
که به جای اینکه به عنوان مثال توسط پهنای باند حافظه محدود شوند، CPU فشرده هستند. این گزینه
دلالت دارد - نخ، و بنابراین فقط در اهدافی پشتیبانی می شود که از آنها پشتیبانی می کنند
- نخ.
-ftree-pta
تجزیه و تحلیل تابع-محلی نقاط-به روی درختان را انجام دهید. این پرچم به طور پیش فرض فعال است
at -O و بالاتر
-ftree-sra
انجام تعویض اسکالر سنگدانه ها. این پاس جایگزین مراجع ساختاری می شود
با اسکالرها برای جلوگیری از تسلیم شدن ساختارها به حافظه خیلی زود. این پرچم است
فعال به طور پیش فرض در -O و بالاتر
-ftree-copyrename
تغییر نام کپی را روی درختان انجام دهید. این پاس سعی می کند نام کامپایلر موقت را به آن تغییر دهد
سایر متغیرها در مکانهای کپی، معمولاً منجر به نامهای متغیر میشوند که بیشتر
شباهت زیادی به متغیرهای اصلی دارد. این پرچم به طور پیش فرض در فعال است -O و
بالاتر
-ftree-Coalesce-inlined-vars
مجوز نام کپی را بگویید (نگاه کنید به -ftree-copyrename) تلاش برای ترکیب کاربر کوچک
متغیرها را نیز تعریف میکند، اما تنها در صورتی که از توابع دیگر خطبندی شده باشند. این هست یک
شکل محدودتر -ftree-Coalesce-vars. این ممکن است به اطلاعات اشکال زدایی این موارد آسیب برساند
متغیرهای inlined، اما متغیرهای تابع inlined-in را از هم جدا نگه می دارد
یکدیگر، به طوری که احتمال بیشتری وجود دارد که مقادیر مورد انتظار را در a داشته باشند
جلسه رفع اشکال این پیشفرض در نسخههای GCC قدیمیتر از 4.7 بود.
-ftree-Coalesce-vars
مجوز نام کپی را بگویید (نگاه کنید به -ftree-copyrename) تلاش برای ترکیب کاربر کوچک
به جای صرفاً موقتی کامپایلر، متغیرها را نیز تعریف کرد. این ممکن است به شدت محدود کند
توانایی اشکال زدایی یک برنامه بهینه سازی شده کامپایل شده با -fno-var-tracking-assignments.
در شکل نفی، این پرچم از ادغام SSA از متغیرهای کاربر از جمله جلوگیری می کند
خطوط خطی شده این گزینه به طور پیش فرض فعال است.
-ftree-ter
جایگزینی موقت بیان را در مرحله SSA-> طبیعی انجام دهید. تنها
استفاده/تک دف موقت در محل استفاده خود با تعریف خود جایگزین می شود
اصطلاح. این منجر به کد غیر GIMPLE می شود، اما به توسعه دهنده ها بسیار بیشتر می دهد
درختان پیچیده برای کار بر روی تولید RTL بهتر. این توسط فعال می شود
پیش فرض در -O و بالاتر
-ftree-slsr
کاهش قدرت خط مستقیم را روی درختان انجام دهید. این مربوطه را به رسمیت می شناسد
عباراتی که شامل ضرب هستند و آنها را با محاسبات کم هزینه جایگزین می کند
در صورت امکان این به طور پیش فرض در فعال است -O و بالاتر
-ftree-vectorize
بردارسازی را روی درختان انجام دهید. این پرچم را قادر می سازد -ftree-loop-vectorize و
-FTREE-SLP-Vectorize اگر به صراحت مشخص نشده باشد.
-ftree-loop-vectorize
بردارسازی حلقه را روی درختان انجام دهید. این پرچم به طور پیش فرض در فعال است -O3 و وقتی که
-ftree-vectorize فعال شده است.
-FTREE-SLP-Vectorize
بردارسازی بلوک پایه را روی درختان انجام دهید. این پرچم به طور پیش فرض در فعال است -O3 و
چه زمانی -ftree-vectorize فعال شده است.
-fvect-cost-model=مدل
مدل هزینه مورد استفاده برای برداری را تغییر دهید. در مدل استدلال باید یکی از
"نامحدود"، "پویا" یا "ارزان". با مدل "نامحدود" کد برداری شده
مسیر سودآور فرض می شود در حالی که با مدل "دینامیک" یک بررسی زمان اجرا انجام می شود
از مسیر کد برداری شده محافظت کنید تا آن را فقط برای تعداد تکراری که احتمال دارد فعال کنید
سریعتر از زمان اجرای حلقه اسکالر اصلی اجرا شود. مدل "ارزان" خواهد بود
برای مثال، بردارسازی حلقهها را غیرفعال کنید، جایی که انجام این کار هزینه بالایی دارد
به دلیل بررسی های زمان اجرا مورد نیاز برای وابستگی یا تراز داده ها، اما در غیر این صورت برابر است
به مدل "دینامیک". مدل هزینه پیشفرض به سایر پرچمهای بهینهسازی بستگی دارد
و یا "پویا" یا "ارزان" است.
-fsimd-cost-model=مدل
مدل هزینه مورد استفاده برای برداری حلقه هایی که با OpenMP یا Cilk مشخص شده اند را تغییر دهید
دستورالعمل پلاس simd. در مدل آرگومان باید یکی از "نامحدود"، "پویا" باشد،
"ارزان". تمام ارزش های مدل همان معنایی دارند که در آن توضیح داده شد -fvect-cost-model
و به طور پیش فرض یک مدل هزینه تعریف شده با -fvect-cost-model استفاده می شود.
-ftree-vrp
انتشار محدوده ارزش را روی درختان انجام دهید. این شبیه به انتشار ثابت است
عبور می کند، اما به جای مقادیر، محدوده ای از مقادیر منتشر می شود. این اجازه می دهد تا
بهینه سازها برای حذف بررسی های غیر ضروری محدوده مانند بررسی های محدود آرایه و اشاره گر تهی
چک ها این به طور پیش فرض در فعال است -O2 و بالاتر. حذف بررسی نشانگر تهی
فقط در صورتی انجام می شود که -fdelete-null-pointer-checks فعال شده است.
ردیاب
برای بزرگ کردن اندازه سوپر بلوک، تکثیر دم را انجام دهید. این تحول ساده می کند
جریان کنترل تابع به بهینه سازی های دیگر اجازه می دهد کار بهتری انجام دهند.
-funroll-loops
حلقههایی که تعداد تکرارهای آنها در زمان کامپایل یا بعد از آن قابل تعیین است را باز کنید
ورود به حلقه -funroll-loops دلالت دارد -frerun-cse-after-loop. این گزینه می سازد
کد بزرگتر است و ممکن است باعث شود سریعتر اجرا شود یا نه.
-funroll-all-loops
همه حلقه ها را باز کنید، حتی اگر تعداد تکرارهای آنها در زمانی که حلقه است نامشخص باشد
وارد شد. این معمولا باعث می شود برنامه ها کندتر اجرا شوند. -funroll-all-loops حاکی از
گزینه های مشابه -funroll-loops,
-fsplit-ivs-in-unroller
بیان مقادیر متغیرهای القایی را در تکرارهای بعدی فعال می کند
حلقه unrolled با استفاده از مقدار در اولین تکرار. این وابستگی طولانی مدت را از بین می برد
زنجیرهها، بنابراین کارایی پاسهای برنامهریزی را بهبود میبخشد.
ترکیبی از - وب و CSE اغلب برای به دست آوردن همان اثر کافی است.
با این حال، در مواردی که بدنه حلقه پیچیده تر از a است، قابل اعتماد نیست
تک بلوک پایه همچنین به دلیل اینکه در برخی از معماری ها اصلا کار نمی کند
محدودیت در پاس CSE
این بهینه سازی به صورت پیش فرض فعال است.
-fvariable-expansion-in-unroller
با استفاده از این گزینه، کامپایلر چندین کپی از برخی از متغیرهای محلی ایجاد می کند
باز کردن یک حلقه، که می تواند منجر به کد برتر شود.
-fpartial-inlining
بخش های درون خطی توابع. این گزینه تنها زمانی تأثیری دارد که خود inlining باشد
روشن شده توسط توابع -finline or -finline-small-functions گزینه.
در سطح فعال شد -O2.
- پیش بینی کننده - مشترک
بهینه سازی مشترک پیش بینی را انجام دهید، به عنوان مثال، استفاده مجدد از محاسبات (به ویژه
بارگذاری و ذخیره حافظه) در تکرارهای قبلی حلقه ها انجام شده است.
این گزینه در سطح فعال است -O3.
-fprefetch-loop-arrays
اگر توسط ماشین مورد نظر پشتیبانی میشود، دستورالعملهایی را برای واکشی اولیه حافظه ایجاد کنید
بهبود عملکرد حلقه هایی که به آرایه های بزرگ دسترسی دارند.
این گزینه ممکن است کد بهتر یا بدتری تولید کند. نتایج به شدت به
ساختار حلقه ها در کد منبع
غیر فعال در سطح -اواس.
-فنو-چشمک
-fno-peephole2
غیرفعال کردن هر گونه بهینه سازی سوراخ مخصوص ماشین. تفاوت میان
-فنو-چشمک و -fno-peephole2 نحوه پیاده سازی آنها در کامپایلر است. مقداری
اهداف از یکی استفاده می کنند، برخی از دیگری استفاده می کنند، تعداد کمی از هر دو استفاده می کنند.
-fpeephole به طور پیش فرض فعال است. -fpeepole2 در سطوح فعال شده است -O2, -O3, -اواس.
-فنو-حدس-شاخه-احتمال
با استفاده از اکتشافی احتمالات شاخه را حدس نزنید.
GCC از اکتشافی برای حدس زدن احتمالات شاخه استفاده می کند، اگر آنها توسط آنها ارائه نشده باشند
بازخورد پروفایل (-fprofile-arcs). این اکتشافات مبتنی بر جریان کنترل است
نمودار اگر برخی از احتمالات شاخه توسط __ساخته_انتظار، سپس
اکتشافی برای حدس زدن احتمالات شاخه برای بقیه جریان کنترل استفاده می شود
نمودار، گرفتن __ساخته_انتظار اطلاعات در نظر گرفته شود تعاملات بین
اکتشافی و __ساخته_انتظار می تواند پیچیده باشد، و در برخی موارد، ممکن است مفید باشد
غیر فعال کردن اکتشافی به طوری که اثرات __ساخته_انتظار راحت تر هستند
فهمیدن.
پیش فرض این است fguess-branch-probability در سطوح -O, -O2, -O3, -اواس.
-بلاک های سفارشی
ترتیب بلوک های اساسی را در تابع کامپایل شده مجدداً ترتیب دهید تا تعداد موارد گرفته شده کاهش یابد
شاخه ها و بهبود محل کد.
در سطوح فعال شده است -O2, -O3.
-freorder-blocks-and-partition
علاوه بر مرتب سازی مجدد بلوک های اساسی در تابع کامپایل شده، به منظور کاهش
تعداد شاخه های گرفته شده، بلوک های سرد و گرم اصلی را به بخش های جداگانه تقسیم می کند
از فایل های اسمبلی و .o، برای بهبود عملکرد صفحه بندی و محل ذخیره کش.
این بهینه سازی به صورت خودکار در حضور مدیریت استثنا خاموش می شود.
برای بخش های linkonce، برای توابع با ویژگی بخش تعریف شده توسط کاربر و در هر کدام
معماری که از بخش های نامگذاری شده پشتیبانی نمی کند.
برای x86 در سطوح فعال شده است -O2, -O3.
توابع -freorder
ترتیب توابع را در فایل شیء به منظور بهبود موقعیت کد. این هست
با استفاده از بخش های فرعی ویژه ".text.hot" برای اغلب موارد اجرا شده پیاده سازی شده است
توابع و ".text.unlikely" برای توابع غیرمحتمل اجرا شده. سفارش مجدد توسط
پیوند دهنده بنابراین فرمت فایل شی باید از بخش های نامگذاری شده پشتیبانی کند و پیوند دهنده باید قرار گیرد
آنها را به روشی معقول.
همچنین بازخورد نمایه باید در دسترس باشد تا این گزینه موثر باشد. دیدن
-fprofile-arcs برای جزئیات بیشتر.
در سطوح فعال شده است -O2, -O3, -اواس.
fstrict-aliasing
به کامپایلر اجازه دهید تا سختگیرانهترین قوانین نامگذاری را که برای زبان قابل اعمال است، در نظر بگیرد
در حال تدوین برای C (و C++)، این بهینهسازیها را بر اساس نوع فعال میکند
اصطلاحات. به طور خاص، یک شی از یک نوع فرض می شود که هرگز در آن ساکن نیست
همان آدرس به عنوان یک شی از نوع متفاوت، مگر اینکه انواع تقریباً یکسان باشند.
به عنوان مثال، یک "int بدون علامت" می تواند مستعار "int" باشد، اما نه "void*" یا "double". آ
نوع کاراکتر ممکن است مستعار هر نوع دیگری باشد.
به کدهای زیر توجه ویژه ای داشته باشید:
اتحادیه a_union {
بین من
دو d;
};
int f() {
اتحادیه a_union t;
td = 3.0;
بازگشت ti;
}
تمرین خواندن از اعضای اتحادیه متفاوت از اخیرا
نوشته شده به (به نام "نوع مجازات") رایج است. حتی با fstrict-aliasing، نوع
punning مجاز است، مشروط بر اینکه حافظه از طریق نوع اتحاد قابل دسترسی باشد. بنابراین
کد بالا همانطور که انتظار می رود کار می کند. با این حال، این کد ممکن است:
int f() {
اتحادیه a_union t;
int* ip ؛
td = 3.0;
ip = &t.i;
بازگشت *ip;
}
به طور مشابه، با گرفتن آدرس، ارسال نشانگر به دست آمده و
عدم ارجاع نتیجه رفتار نامشخصی دارد، حتی اگر بازیگران از نوع اتحاد استفاده کنند،
به عنوان مثال:
int f() {
دو برابر d = 3.0;
return ((union a_union *) &d)->i;
}
La fstrict-aliasing گزینه در سطوح فعال است -O2, -O3, -اواس.
-fstrict-سرریز
به کامپایلر اجازه دهید بسته به زبان، قوانین سرریز امضا شده سختگیرانه را در نظر بگیرد
در حال تدوین برای C (و C++) این به این معنی است که هنگام انجام حساب با آن سرریز می شود
اعداد امضا شده تعریف نشده است، به این معنی که کامپایلر ممکن است فرض کند که اینطور نیست
به وقوع پیوستن. این امکان بهینه سازی های مختلف را فراهم می کند. برای مثال، کامپایلر چنین فرض می کند
عبارتی مانند "i + 10 > i" همیشه برای علامت "i" صادق است. این فرض است
فقط در صورتی معتبر است که سرریز علامت تعریف نشده باشد، زیرا اگر "i + 10" عبارت نادرست است.
هنگام استفاده از محاسبات مکمل دوگانه سرریز می شود. هنگامی که این گزینه در حال اجرا است
تلاش برای تعیین اینکه آیا عملیات روی سرریز اعداد امضا شده باید نوشته شود یا خیر
دقت کنید تا در واقع سرریز نشود.
این گزینه همچنین به کامپایلر اجازه می دهد تا معنای دقیق اشاره گر را فرض کند: با توجه به a
اشاره گر به یک شی، اگر اضافه کردن یک افست به آن اشاره گر نشانگر تولید نمی کند
به همان شیء، اضافه تعریف نشده است. این به کامپایلر اجازه می دهد تا نتیجه گیری کند
که "p + u > p" همیشه برای یک اشاره گر "p" و عدد صحیح بدون علامت "u" صادق است. این
فرض فقط به این دلیل معتبر است که نشانگر wraparound تعریف نشده است، همانطور که عبارت است
نادرست است اگر "p + u" با استفاده از محاسبات مکمل دو سرریز شود.
همچنین ببینید -fwrapv گزینه. استفاده كردن -fwrapv به این معنی است که سرریز علامت عدد صحیح است
کاملاً تعریف شده: می پیچد. چه زمانی -fwrapv استفاده می شود، هیچ تفاوتی بین آنها وجود ندارد
-fstrict-سرریز و -فنو-سخت-سرریز برای اعداد صحیح با -fwrapv انواع خاصی
سرریز مجاز هستند. به عنوان مثال، اگر کامپایلر هنگام انجام یک سرریز شود
با محاسبه روی ثابت ها، مقدار سرریز شده همچنان می تواند با آن استفاده شود -fwrapv، اما نه
در غیر این صورت.
La -fstrict-سرریز گزینه در سطوح فعال است -O2, -O3, -اواس.
-عملکردهای falign
-falign-functions=n
شروع توابع را با توان بعدی دو بزرگتر تراز کنید n، پرش تا n
بایت ها برای مثال، -falign-functions=32 توابع را با 32 بایت بعدی تراز می کند
مرز، اما -falign-functions=24 فقط در این صورت با مرز 32 بایت بعدی تراز می شود
را می توان با رد 23 بایت یا کمتر انجام داد.
-fno-align-functions و -falign-functions=1 معادل هستند و به معنی توابع هستند
همسو نیستند.
برخی اسمبلرها فقط زمانی از این پرچم پشتیبانی می کنند n توان دو است. در آن صورت است
گرد کردن.
If n مشخص نشده است یا صفر است، از یک پیش فرض وابسته به ماشین استفاده کنید.
در سطوح فعال شده است -O2, -O3.
-falign-labels
-این برچسب ها =n
همه اهداف شاخه را در یک مرز توان دو، با پرش تا مرز تراز کنید n بایت مانند
-عملکردهای falign. این گزینه به راحتی می تواند کد را کندتر کند، زیرا باید درج شود
عملیات ساختگی برای زمانی که به هدف شاخه در جریان معمول کد رسیده است.
-fno-align-labels و -بای برچسب = 1 معادل هستند و به این معنی است که برچسب ها نیستند
هم راستا.
If -فالین-حلقه ها or -فالین-پرش قابل اجرا هستند و بزرگتر از این مقدار هستند
به جای آن از مقادیر آنها استفاده می شود.
If n مشخص نشده است یا صفر است، از یک پیش فرض وابسته به ماشین استفاده کنید که بسیار محتمل است
به 1، به معنی عدم تراز.
در سطوح فعال شده است -O2, -O3.
-فالین-حلقه ها
-falign-loops=n
حلقهها را به مرز دو توان تراز کنید و از آن بگذرید n بایت مانند -عملکردهای falign.
اگر حلقه ها بارها اجرا شوند، هر گونه اجرای ساختگی را جبران می کند
عملیات.
-fno-align-loops و -falign-loops=1 معادل هستند و به این معنی است که حلقه ها نیستند
هم راستا.
If n مشخص نشده است یا صفر است، از یک پیش فرض وابسته به ماشین استفاده کنید.
در سطوح فعال شده است -O2, -O3.
-فالین-پرش
-falign-jumps=n
اهداف شاخهای را با مرز قدرت دو تنظیم کنید، برای اهداف شاخهای که در آن اهداف قرار دارند
فقط با پریدن و پرش تا بالا می توان به آن رسید n بایت مانند -عملکردهای falign. به
در این مورد، هیچ عملیات ساختگی لازم نیست اجرا شود.
-fno-align-jumps و -falign-jumps=1 معادل هستند و به این معنی است که حلقه ها نیستند
هم راستا.
If n مشخص نشده است یا صفر است، از یک پیش فرض وابسته به ماشین استفاده کنید.
در سطوح فعال شده است -O2, -O3.
-funit در یک زمان
این گزینه به دلایل سازگاری باقی مانده است. -funit در یک زمان هیچ تاثیری ندارد، در حالی که
-fno-واحد-در-یک-زمان دلالت دارد -fno-toplevel-reorder و fno-section-anchors.
به طور پیش فرض فعال شده است.
-fno-toplevel-reorder
توابع سطح بالا، متغیرها و عبارات "asm" را دوباره ترتیب ندهید. آنها را در خروجی قرار دهید
همان ترتیبی که در فایل ورودی ظاهر می شوند. وقتی از این گزینه استفاده می شود،
متغیرهای استاتیک ارجاع نشده حذف نمی شوند. این گزینه برای پشتیبانی در نظر گرفته شده است
کد موجود که بر یک سفارش خاص متکی است. برای کد جدید بهتر است استفاده کنید
صفات در صورت امکان
در سطح فعال شد -O0. هنگامی که به طور صریح غیرفعال است، همچنین به معنای آن است fno-section-anchors,
که در غیر این صورت در فعال می شود -O0 روی برخی اهداف
- وب
وب ها را همانطور که معمولاً برای اهداف تخصیص ثبت استفاده می شود می سازد و هر وب را اختصاص می دهد
ثبت شبه فردی این اجازه می دهد تا پاس تخصیص ثبت نام کار کند
شبه مستقیم، اما چندین پاس بهینه سازی دیگر مانند CSE را نیز تقویت می کند،
بهینه ساز حلقه و حذف کننده کد مرده بی اهمیت. با این حال، می تواند اشکال زدایی ایجاد کند
غیر ممکن است، زیرا متغیرها دیگر در یک "ثبت خانه" باقی نمی مانند.
فعال به طور پیش فرض با -funroll-loops.
کل برنامه
فرض کنید واحد کامپایل فعلی کل برنامه در حال کامپایل را نشان می دهد.
همه توابع و متغیرهای عمومی به استثنای "main" و آنهایی که توسط ادغام شده اند
ویژگی "externally_visible" به توابع ثابت تبدیل می شود و در عمل بهینه می شود
به طور تهاجمی تر توسط بهینه سازهای بین رویه ای.
این گزینه نباید در ترکیب با "-flto" استفاده شود. به جای تکیه بر الف
پلاگین لینکر باید اطلاعات امن تر و دقیق تری ارائه دهد.
-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 یک نمایش بایت کد GIMPLE را در قسمت ویژه ذخیره می کند
بخش ELF در داخل foo.o و bar.o. فراخوان نهایی بایت کد GIMPLE را می خواند
از جانب foo.o و bar.o، دو فایل را در یک تصویر داخلی ادغام می کند و کامپایل می کند
نتیجه طبق معمول از آنجایی که هر دو foo.o و bar.o در یک تصویر واحد ادغام می شوند، این
باعث می شود تمام تحلیل ها و بهینه سازی های بین رویه ای در GCC در سراسر جهان کار کنند
دو فایل که انگار یک فایل واحد هستند. این به این معنی است که برای مثال، inliner است
قادر به درون خط کردن توابع در bar.o به توابع در foo.o و بالعکس.
راه دیگر (ساده تر) برای فعال کردن بهینه سازی زمان پیوند این است:
gcc -o myprog -flto -O2 foo.c bar.c
در بالا بایت کد برای foo.c و نوار، آنها را با هم در یک واحد ادغام می کند
نمایش GIMPLE و بهینه سازی آنها به طور معمول برای تولید myprog.
تنها نکته مهمی که باید در نظر داشته باشید این است که بهینه سازی زمان پیوند را فعال کنید
برای انجام پیوند مرحله باید از درایور GCC استفاده کنید. سپس GCC به طور خودکار انجام می شود
بهینه سازی زمان پیوند اگر هر یک از اشیاء درگیر با آن کامپایل شده باشد -flto.
به طور کلی باید گزینه های بهینه سازی مورد استفاده برای زمان پیوند را مشخص کنید
بهینه سازی اگرچه GCC سعی خواهد کرد در حدس زدن سطح بهینه سازی برای استفاده هوشمندانه عمل کند
از گزینه هایی که در زمان کامپایل استفاده می شود، اگر نتوانستید یکی را در زمان پیوند مشخص کنید. شما
همیشه می تواند تصمیم خودکار برای انجام بهینه سازی زمان پیوند در زمان پیوند را لغو کند
با گذراندن -fno-lto به دستور پیوند.
برای اینکه بهینه سازی کل برنامه موثر باشد، لازم است یک کل مشخصی ایجاد شود
مفروضات برنامه کامپایلر باید بداند که چه توابع و متغیرهایی می توانند باشند
توسط کتابخانه ها و زمان اجرا خارج از واحد بهینه سازی زمان پیوند قابل دسترسی است. چه زمانی
پشتیبانی شده توسط پیوند دهنده، افزونه پیوند دهنده (نگاه کنید به فیوز-لینکر-پلاگین) می گذرد
اطلاعات به کامپایلر در مورد نمادهای استفاده شده و قابل مشاهده خارجی. وقتی که
پلاگین لینکر در دسترس نیست، کل برنامه باید برای اجازه دادن به کامپایلر استفاده شود
برای ایجاد این مفروضات، که منجر به تصمیمات بهینه سازی تهاجمی تر می شود.
چه زمانی فیوز-لینکر-پلاگین هنگامی که یک فایل با کامپایل می شود فعال نمی شود -fltoاز
فایل شی تولید شده بزرگتر از یک فایل شی معمولی است زیرا حاوی GIMPLE است
کدهای بایت و کد نهایی معمول (نگاه کنید به -ffat-lto-اشیاء. این به معنای آن شی است
فایل های دارای اطلاعات LTO را می توان به عنوان فایل های شی معمولی پیوند داد. اگر -fno-lto تصویب شده است
برای پیوند دهنده، هیچ بهینه سازی بین رویه ای اعمال نمی شود. توجه داشته باشید که وقتی
-fno-fat-lto-objects فعال است مرحله کامپایل سریعتر است اما نمی توانید a را انجام دهید
پیوند منظم و غیر 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
این فایلهای شی منفرد را با کد اسمبلر بهینهنشده تولید میکند، اما
باینری حاصل myprog در بهینه سازی شده است -O3. اگر در عوض، باینری نهایی باشد
تولید شده با -fno-lto، و سپس myprog بهینه نشده است
هنگام تولید باینری نهایی، GCC فقط بهینهسازی زمان پیوند را برای آنها اعمال میکند
فایل هایی که حاوی بایت کد هستند. بنابراین، می توانید فایل های شی را با هم ترکیب و مطابقت دهید
کتابخانه هایی با کد بایت GIMPLE و کد شی نهایی. GCC به طور خودکار انتخاب می کند
کدام فایلها را در حالت LTO بهینهسازی کنید و کدام فایلها را بدون بیشتر پیوند دهید
در حال پردازش.
برخی از پرچم های تولید کد وجود دارند که توسط GCC هنگام تولید بایت کدها حفظ می شوند
آنها باید در مرحله پیوند نهایی استفاده شوند. به طور کلی گزینه های مشخص شده در
پیوند-زمان مواردی را که در زمان کامپایل مشخص شده اند نادیده می گیرد.
اگر گزینه سطح بهینه سازی را مشخص نکنید -O در زمان پیوند پس از آن GCC خواهد شد
یکی را بر اساس سطوح بهینه سازی مورد استفاده در هنگام کامپایل فایل های شی محاسبه کنید.
بالاترین سطح بهینه سازی در اینجا برنده خواهد شد.
در حال حاضر گزینه های زیر و تنظیمات آنها برگرفته از فایل شی اول است
که به صراحت آن را مشخص کرد: -fPIC, -fpic, -fpie, -fcommon, - استثنائات,
-fnon-call-exceptions, -fgnu-tm و همه -m پرچم های هدف
برخی از پرچمهای تغییر ABI باید در همه واحدهای کامپایل و آزمایش مطابقت داشته باشند
برای لغو این در زمان پیوند با مقدار متضاد نادیده گرفته می شود. این شامل
گزینه هایی مانند -Freg-struct-return و -fpcc-struct-return.
گزینه های دیگر مانند -ffp-contract, -فنو-سخت-سرریز, -fwrapv, -fno-trapv or
-fno-strict-aliasing به مرحله پیوند منتقل می شوند و به صورت محافظه کارانه ادغام می شوند
برای واحدهای ترجمه متناقض به طور مشخص -فنو-سخت-سرریز, -fwrapv و
-fno-trapv اولویت داشته باشند و به عنوان مثال -ffp-contract = خاموش بر آن اولویت دارد
-ffp-contract=سریع. شما می توانید آنها را در زمان پیوند لغو کنید.
توصیه می شود تمام فایل های شرکت کننده در همان لینک را با آن کامپایل کنید
همان گزینه ها و همچنین آن گزینه ها را در زمان پیوند مشخص کنید.
اگر 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++ و
-lgfortran برای دریافت کتابخانه های زمان اجرا فرترن اضافه شده است. به طور کلی، هنگام مخلوط کردن
زبانها در حالت LTO، باید از همان گزینههای فرمان پیوند مانند هنگام میکس استفاده کنید
زبان ها در یک تلفیقی معمولی (غیر LTO).
اگر فایلهای شی حاوی بایت کد GIMPLE در یک آرشیو کتابخانه ذخیره میشوند، مثلاً
libfoo.a، امکان استخراج و استفاده از آنها در یک لینک LTO وجود دارد اگر از a استفاده می کنید
پیوند دهنده با پشتیبانی از افزونه برای ایجاد کتابخانه های استاتیک مناسب برای LTO، استفاده کنید gcc-ar
و gcc-ranlib بجای ar و «رانلب»؛ برای نشان دادن نمادهای فایل های شی با
بایت کد GIMPLE، استفاده کنید gcc-nm. این دستورات مستلزم آن هستند ar, ranlib و nm شده اند
با پشتیبانی افزونه کامپایل شده است. در زمان پیوند، از پرچم استفاده کنید فیوز-لینکر-پلاگین به
اطمینان حاصل کنید که کتابخانه در فرآیند بهینه سازی LTO شرکت می کند:
gcc -o myprog -O2 -flto -fuse-linker-plugin ao bo -lfoo
با فعال بودن پلاگین لینکر، پیوند دهنده فایل های GIMPLE مورد نیاز را از آن استخراج می کند
libfoo.a و آنها را به شورای همکاری خلیج فارس در حال اجرا منتقل می کند تا آنها را به بخشی از مجموعه تبدیل کند
تصویر GIMPLE بهینه می شود.
اگر از پیوند دهنده با پشتیبانی افزونه استفاده نمی کنید و/یا پیوند دهنده را فعال نمی کنید
افزونه، سپس اشیاء داخل libfoo.a طبق معمول استخراج و پیوند می شوند، اما آنها
در فرآیند بهینه سازی LTO شرکت نکنید. به منظور ایجاد یک کتابخانه استاتیک
هم برای بهینه سازی LTO و هم برای پیوند معمولی مناسب است، فایل های شی آن را با
-flto «-ففت-لتو-اشیاء».
بهینه سازی زمان لینک برای کار کردن نیازی به حضور کل برنامه ندارد.
اگر برنامه نیاز به هیچ علامتی برای صادرات نداشته باشد، امکان ترکیب وجود دارد
-flto و کل برنامه به بهینه سازهای بین رویه ای اجازه می دهد تا بیشتر استفاده کنند
مفروضات تهاجمی که ممکن است منجر به بهبود فرصت های بهینه سازی شود. استفاده از
کل برنامه هنگامی که افزونه پیوند دهنده فعال است مورد نیاز نیست (نگاه کنید به فیوز-لینکر-پلاگین).
اجرای فعلی LTO هیچ تلاشی برای تولید بایت کدی که هست انجام نمی دهد
قابل حمل بین انواع مختلف هاست فایل های بایت کد نسخه شده و وجود دارد
یک بررسی دقیق نسخه است، بنابراین فایل های بایت کد تولید شده در یک نسخه از GCC انجام نمی شود
با نسخه قدیمی یا جدیدتر GCC کار کنید.
بهینه سازی زمان لینک با تولید اطلاعات اشکال زدایی به خوبی کار نمی کند.
ترکیب -flto با -g در حال حاضر آزمایشی است و انتظار می رود تولید غیرمنتظره ای داشته باشد
نتایج.
اگر اختیاری را مشخص کنید n، بهینه سازی و تولید کد در زمان پیوند انجام می شود
با استفاده موازی اجرا می شود n کارهای موازی با استفاده از نصب شده ساخت برنامه است.
متغیر محیطی خلق کنید ممکن است برای نادیده گرفتن برنامه استفاده شده استفاده شود. پیشفرض
ارزش برای n 1 است
همچنین می توانید مشخص کنید -flto=jobserver برای استفاده از حالت سرور شغلی ساخت گنو برای تعیین
تعداد مشاغل موازی این زمانی مفید است که Makefile در حال فراخوانی GCC باشد
اجرا به صورت موازی شما باید a + به دستور دستور در والد
برای این کار فایل ایجاد کنید. این گزینه احتمالا فقط در صورتی کار می کند که خلق کنید ساخت گنو است.
-flto-partition =جلبک
الگوریتم پارتیشن بندی مورد استفاده توسط بهینه ساز زمان پیوند را مشخص کنید. ارزش است
یا "1to1" برای تعیین پارتیشن بندی که فایل های منبع اصلی را منعکس می کند یا
"متعادل" برای تعیین پارتیشن بندی به قطعات هم اندازه (در صورت امکان) یا
"max" برای ایجاد پارتیشن جدید برای هر نماد در صورت امکان. مشخص کردن "هیچ" به عنوان
یک الگوریتم پارتیشن بندی و استریم را به طور کامل غیرفعال می کند. مقدار پیش فرض است
"متعادل". در حالی که "1to1" می تواند به عنوان یک راه حل برای ترتیب کدهای مختلف استفاده شود
مسائل، پارتیشن بندی "max" فقط برای آزمایش داخلی در نظر گرفته شده است.
-flto-compression-level=n
این گزینه میزان فشرده سازی مورد استفاده برای زبان نوشتاری متوسط را مشخص می کند
به فایل های شی LTO، و تنها در رابطه با حالت LTO معنادار است (-flto).
مقادیر معتبر 0 (بدون فشرده سازی) تا 9 (حداکثر فشرده سازی) است. ارزش های خارج از این
محدوده به 0 یا 9 بسته می شود. اگر گزینه داده نشده است، یک تعادل پیش فرض وجود دارد
تنظیم فشرده سازی استفاده می شود.
-flto-گزارش
گزارشی با جزئیات داخلی در مورد عملکرد بهینهساز زمان پیوند چاپ میکند. را
محتوای این گزارش از نسخه ای به نسخه دیگر متفاوت است. قرار است برای GCC مفید باشد
توسعه دهندگان هنگام پردازش فایل های شی در حالت LTO (از طریق -flto).
به طور پیش فرض غیر فعال شده است
-flto-report-wpa
پسندیدن -flto-گزارش، اما فقط برای مرحله WPA از Link Time Optimization چاپ کنید.
فیوز-لینکر-پلاگین
استفاده از پلاگین لینکر را در طول بهینه سازی زمان پیوند فعال می کند. این گزینه متکی است
در پشتیبانی از افزونه در پیوند دهنده، که به رنگ طلایی یا در GNU ld 2.21 یا موجود است
جدیدتر
این گزینه استخراج فایل های شی با بایت کد GIMPLE را از کتابخانه فعال می کند
آرشیوها این امر کیفیت بهینه سازی را با قرار دادن کدهای بیشتر در پیوند بهبود می بخشد.
بهینه ساز زمان این اطلاعات مشخص می کند که به چه نمادهایی می توان از خارج دسترسی داشت
(توسط شی غیر LTO یا در حین پیوند پویا). در نتیجه بهبود کیفیت کد روشن است
باینری ها (و کتابخانه های مشترکی که از قابلیت مشاهده پنهان استفاده می کنند) مشابه هستند
"-fwhole-program". دیدن -flto برای توضیح تأثیر این پرچم و نحوه انجام آن
از آن استفاده کنید.
زمانی که پشتیبانی LTO در GCC فعال باشد و GCC فعال باشد این گزینه به طور پیش فرض فعال می شود
برای استفاده با پلاگین های پشتیبانی کننده پیوند دهنده (GNU ld 2.21 یا جدیدتر یا طلایی) پیکربندی شده است.
-ffat-lto-اشیاء
اشیاء Fat LTO فایل های شی هستند که هم شامل زبان میانی و هم زبان هستند
کد شی این باعث می شود که آنها هم برای پیوند LTO و هم برای پیوند عادی قابل استفاده باشند. این
گزینه فقط در هنگام کامپایل با -flto و در زمان پیوند نادیده گرفته می شود.
-fno-fat-lto-objects زمان کامپایل را نسبت به LTO ساده بهبود می بخشد، اما به آن نیاز دارد
زنجیره ابزار کامل برای آگاهی از LTO. این به یک پیوند دهنده با پشتیبانی از پلاگین لینکر نیاز دارد
برای عملکرد اولیه علاوه بر این، nm, ar و ranlib نیاز به پشتیبانی از لینکر
پلاگین هایی برای اجازه دادن به یک محیط ساخت با امکانات کامل (قابلیت ایجاد استاتیک
کتابخانه ها و غیره). GCC فراهم می کند gcc-ar, gcc-nm, gcc-ranlib لفاف برای عبور از
گزینه های مناسب برای این ابزار. با استفاده از فایل های LTO بدون چربی، برای استفاده باید اصلاح شوند
آنها.
پیش فرض این است -fno-fat-lto-objects در اهداف با پشتیبانی از پلاگین لینکر.
-FCOMPARE-elim
پس از تخصیص ثبت و تقسیم دستورالعمل تخصیص پس از ثبت نام، شناسایی کنید
دستورالعمل های حسابی که پرچم های پردازنده را شبیه به یک عملیات مقایسه محاسبه می کند
بر اساس آن حساب در صورت امکان، عملیات مقایسه صریح را حذف کنید.
این مجوز فقط برای اهداف خاصی اعمال می شود که نمی توانند به صراحت نشان دهند
عملیات مقایسه قبل از تکمیل تخصیص ثبت.
در سطوح فعال شده است -O, -O2, -O3, -اواس.
-fuse-ld=bfd
استفاده از bfd پیوند دهنده به جای پیوند دهنده پیش فرض.
-fuse-ld=طلا
استفاده از طلا پیوند دهنده به جای پیوند دهنده پیش فرض.
-fcprop-رجیستر می کند
پس از تخصیص ثبت و تقسیم دستورالعمل تخصیص پس از ثبت نام، انجام دهید
یک مجوز انتشار کپی برای کاهش وابستگیهای زمانبندی و گاهی اوقات
کپی را حذف کنید
در سطوح فعال شده است -O, -O2, -O3, -اواس.
-fprofile-correction
نمایه های جمع آوری شده با استفاده از یک باینری ابزار برای برنامه های چند رشته ای ممکن است
به دلیل بهروزرسانیهای پیشخوان از دست رفته، ناسازگار است. هنگامی که این گزینه مشخص شده است، GCC استفاده می کند
اکتشافی برای اصلاح یا هموار کردن چنین ناسازگاری ها. به طور پیش فرض، GCC یک علامت را منتشر می کند
پیام خطا هنگام شناسایی نمایه ناسازگار.
-fprofile-dir=مسیر
دایرکتوری را برای جستجوی فایل های داده پروفایل در آن تنظیم کنید مسیر. این گزینه
فقط بر داده های نمایه تولید شده توسط -fprofile-generate, -آزمایش-پوشش,
-fprofile-arcs و استفاده شده توسط -fprofile-use و -شاخه-احتمالات و مرتبط با آن
گزینه ها. می توان از هر دو مسیر مطلق و نسبی استفاده کرد. به طور پیش فرض، GCC از
دایرکتوری فعلی به عنوان مسیر، بنابراین فایل داده پروفایل در همان دایرکتوری ظاهر می شود
فایل شی
-fprofile-generate
-fprofile-generate=مسیر
فعال کردن گزینههایی که معمولاً برای برنامههای ابزار دقیق استفاده میشوند تا نمایه مفید تولید شود
برای کامپایل مجدد بعدی با بهینه سازی مبتنی بر بازخورد نمایه. شما باید استفاده کنید
-fprofile-generate هم هنگام کامپایل و هم هنگام پیوند دادن برنامه شما.
گزینه های زیر فعال هستند: "-fprofile-arcs"، "-fprofile-values"، "-fvpt".
If مسیر مشخص شده است، GCC به نظر می رسد مسیر برای یافتن فایل های داده بازخورد نمایه
دیدن -fprofile-dir.
-fprofile-use
-fprofile-use=مسیر
بهینهسازیهای هدایت شده با بازخورد نمایه و بهینهسازیها به طور کلی سودآور را فعال کنید
فقط با بازخورد نمایه موجود است.
گزینه های زیر فعال هستند: "-fbranch-probabilities"، "-fvpt"،
"-funroll-loops"، "-fpeel-loops"، "-ftracer"، "-ftree-vectorize"،
"فره حلقه- توزیع-الگوها"
بهطور پیشفرض، اگر نمایههای بازخورد با آن مطابقت نداشته باشند، GCC یک پیام خطا منتشر میکند
کد منبع این خطا را می توان با استفاده به یک هشدار تبدیل کرد -پوشش-عدم تطابق.
توجه داشته باشید این ممکن است منجر به بهینه سازی ضعیف کد شود.
If مسیر مشخص شده است، GCC به نظر می رسد مسیر برای یافتن فایل های داده بازخورد نمایه
دیدن -fprofile-dir.
گزینه های زیر رفتار کامپایلر را در مورد محاسبات ممیز شناور کنترل می کنند.
این گزینه ها بین سرعت و درستی معامله می شوند. همه باید به طور خاص فعال شوند.
-float-store
متغیرهای ممیز شناور را در رجیسترها ذخیره نکنید و گزینه های دیگر را مهار نکنید
ممکن است تغییر کند که آیا یک مقدار ممیز شناور از یک ثبات یا حافظه گرفته شده است.
این گزینه از دقت بیش از حد نامطلوب در ماشین هایی مانند 68000 جلوگیری می کند
رجیسترهای شناور (از 68881) دقت بیشتری نسبت به "دبل" فرضی دارند.
داشتن. به طور مشابه برای معماری x86. برای اکثر برنامه ها، دقت بیش از حد
فقط خوب است، اما چند برنامه به تعریف دقیق IEEE شناور تکیه می کنند
نقطه. استفاده کنید -float-store برای چنین برنامه هایی، پس از تغییر آنها برای ذخیره همه
محاسبات میانی مربوط به متغیرها
-fexcess-precision=سبک
این گزینه اجازه می دهد تا کنترل بیشتری بر دقت بیش از حد در ماشین هایی که شناور هستند
رجیسترهای نقطه ای دقت بیشتری نسبت به انواع "float" و "double" IEEE دارند
پردازنده از عملیات گرد کردن به آن انواع پشتیبانی نمی کند. به صورت پیش فرض،
-fexcess-precision=سریع در حال اجرا است؛ این بدان معنی است که عملیات در
دقت رجیسترها و غیرقابل پیش بینی بودن آن هنگام گرد کردن به انواع
مشخص شده در کد منبع صورت می گیرد. هنگام کامپایل C، اگر
-fexcess-precision=استاندارد مشخص می شود سپس دقت بیش از حد از قوانین پیروی می کند
مشخص شده در ISO C99؛ به طور خاص، هر دو نقش و تخصیص باعث می شوند که مقادیر باشند
گرد شده به انواع معنایی آنها (در حالی که -float-store فقط بر تکالیف تأثیر می گذارد).
این گزینه به طور پیش فرض برای C فعال است اگر یک گزینه انطباق دقیق مانند
-std=c99 استفاده می شود.
-fexcess-precision=استاندارد برای زبان هایی غیر از C اجرا نمی شود و هیچ
اثر اگر -بهینهسازیهای ریاضی و سرگرمکننده or سریع-ریاضی مشخص شده است. در x86، آن را
همچنین هیچ تاثیری ندارد اگر -mfpMath = SSE or -mfpmath=sse+387 مشخص شده است؛ در سابق
در مورد، معنای IEEE بدون دقت بیش از حد اعمال می شود، و در مورد دوم، گرد کردن است
غیر قابل پیش بینی.
سریع-ریاضی
مجموعه -fno-math-errno, -بهینهسازیهای ریاضی و سرگرمکننده, -فقط ریاضی محدود,
-منهای دور, -fno-signaling-nans و -fcx-limited-range.
این گزینه باعث می شود که ماکرو پیش پردازنده "__FAST_MATH__" تعریف شود.
این گزینه توسط هیچ کدام روشن نمی شود -O علاوه بر این گزینه سریع از آنجایی که می تواند منجر شود
خروجی نادرست برای برنامه هایی که به اجرای دقیق IEEE یا ISO بستگی دارد
قوانین/مشخصات برای توابع ریاضی. با این حال، ممکن است کد سریع تری برای آن ارائه دهد
برنامه هایی که به ضمانت این مشخصات نیاز ندارند.
-fno-math-errno
پس از فراخوانی توابع ریاضی که با یک واحد اجرا می شوند، «errno» را تنظیم نکنید
دستورالعمل، به عنوان مثال، "sqrt". برنامه ای که برای خطاهای ریاضی به استثناهای IEEE متکی است
هندلینگ ممکن است بخواهد از این پرچم برای سرعت و در عین حال حفظ محاسبات IEEE استفاده کند
سازگاری.
این گزینه توسط هیچ کدام روشن نمی شود -O گزینه زیرا می تواند منجر به خروجی نادرست شود
برای برنامه هایی که به اجرای دقیق IEEE یا ISO بستگی دارند
قوانین/مشخصات برای توابع ریاضی. با این حال، ممکن است کد سریع تری برای آن ارائه دهد
برنامه هایی که به ضمانت این مشخصات نیاز ندارند.
پیش فرض این است -fmath-errno.
در سیستم های داروین، کتابخانه ریاضی هرگز "errno" را تنظیم نمی کند. بنابراین هیچ دلیلی وجود ندارد
تا کامپایلر این امکان را در نظر بگیرد که ممکن است، و -fno-math-errno هست
به طور پیش فرض
-بهینهسازیهای ریاضی و سرگرمکننده
بهینه سازی هایی برای محاسبات ممیز شناور مجاز است که (الف) آرگومان ها و
نتایج معتبر هستند و (ب) ممکن است استانداردهای IEEE یا ANSI را نقض کنند. هنگامی که در زمان پیوند استفاده می شود،
ممکن است شامل کتابخانه ها یا فایل های راه اندازی باشد که کلمه کنترل پیش فرض FPU یا
سایر بهینه سازی های مشابه
این گزینه توسط هیچ کدام روشن نمی شود -O گزینه زیرا می تواند منجر به خروجی نادرست شود
برای برنامه هایی که به اجرای دقیق IEEE یا ISO بستگی دارند
قوانین/مشخصات برای توابع ریاضی. با این حال، ممکن است کد سریع تری برای آن ارائه دهد
برنامه هایی که به ضمانت این مشخصات نیاز ندارند. را قادر می سازد
-fno-signed-zeros, -fno-به دام انداختن-ریاضی, -تعدادی-ریاضی و -مقاومتی-ریاضی.
پیش فرض این است -fno-unsafe-math-optimizations.
-تعدادی-ریاضی
اجازه ارتباط مجدد عملوندها در یک سری عملیات ممیز شناور. این
با احتمالاً تغییر در نتیجه محاسبات، استاندارد زبان ISO C و C++ را نقض می کند.
توجه: مرتب کردن مجدد ممکن است علامت صفر را تغییر دهد و همچنین NaN ها را نادیده بگیرد و از یا
ایجاد underflow یا overflow (و بنابراین نمی توان روی کدهایی که متکی به گرد کردن هستند استفاده کرد
رفتاری مانند "(x + 2**52) - 2**52". همچنین ممکن است مقایسه های ممیز شناور را دوباره ترتیب دهد و
بنابراین زمانی که نیاز به مقایسه سفارشی است، نمی توان از آن استفاده کرد. این گزینه به آن نیاز دارد
هر دو -fno-signed-zeros و -fno-به دام انداختن-ریاضی در حال اجرا باشد. علاوه بر این، آن را نمی سازد
حس بسیار با -بنیادسازی-ریاضی. برای Fortran این گزینه به طور خودکار فعال می شود زمانی که
هر دو -fno-signed-zeros و -fno-به دام انداختن-ریاضی در حال اجرا هستند.
پیش فرض این است -fno-تداعی-ریاضی.
-مقاومتی-ریاضی
در صورت این، به جای تقسیم بر مقدار، اجازه استفاده متقابل یک مقدار را بدهید
بهینه سازی را امکان پذیر می کند. به عنوان مثال "x / y" را می توان با "x * (1/y)" جایگزین کرد
در صورتی مفید است که "(1/y)" در معرض حذف زیرعبارات رایج باشد. توجه داشته باشید که این
دقت را از دست می دهد و تعداد فلاپ هایی را که روی مقدار کار می کنند افزایش می دهد.
پیش فرض این است -fno-reciprocal-math.
-فقط ریاضی محدود
اجازه بهینه سازی برای محاسبات ممیز شناور که آرگومان ها و
نتایج NaN یا +-Infs نیستند.
این گزینه توسط هیچ کدام روشن نمی شود -O گزینه زیرا می تواند منجر به خروجی نادرست شود
برای برنامه هایی که به اجرای دقیق IEEE یا ISO بستگی دارند
قوانین/مشخصات برای توابع ریاضی. با این حال، ممکن است کد سریع تری برای آن ارائه دهد
برنامه هایی که به ضمانت این مشخصات نیاز ندارند.
پیش فرض این است -فقط-fno-finite-math.
-fno-signed-zeros
اجازه بهینه سازی برای محاسبات ممیز شناور که علامت صفر را نادیده می گیرد.
محاسبات IEEE رفتار مقادیر متمایز +0.0 و -0.0 را مشخص می کند که سپس
ساده سازی عباراتی مانند x+0.0 یا 0.0*x (حتی با
-فقط ریاضی محدود). این گزینه به این معنی است که علامت یک نتیجه صفر نیست
قابل توجه.
پیش فرض این است -fsigned-صفرها.
-fno-به دام انداختن-ریاضی
کامپایل کد با این فرض که عملیات ممیز شناور نمی تواند کاربر قابل مشاهده است
تله ها این تله ها شامل تقسیم بر صفر، سرریز، زیر جریان، نتیجه غیر دقیق و
عملیات نامعتبر این گزینه به آن نیاز دارد -fno-signaling-nans در حال اجرا باشد.
تنظیم این گزینه ممکن است کدهای سریع تری را در صورت تکیه بر محاسبات "بدون توقف" IEEE امکان پذیر کند.
به عنوان مثال.
این گزینه هرگز نباید توسط هیچکس روشن شود -O گزینه از آنجایی که می تواند منجر شود
خروجی نادرست برای برنامه هایی که به اجرای دقیق IEEE یا ISO بستگی دارد
قوانین/مشخصات برای توابع ریاضی.
پیش فرض این است -trapping-math.
-بنیادسازی-ریاضی
تبدیل ها و بهینه سازی هایی را که گرد کردن ممیز شناور پیش فرض را فرض می کنند غیرفعال کنید
رفتار - اخلاق. این دور به صفر برای همه تبدیلهای ممیز شناور به عدد صحیح است و
گرد به نزدیک ترین برای همه برش های حسابی دیگر. این گزینه باید باشد
برای برنامه هایی که حالت گرد کردن FP را به صورت پویا تغییر می دهند، یا ممکن است مشخص شود
با حالت گرد کردن غیر پیش فرض اجرا می شود. این گزینه تا زدن دائمی را غیرفعال می کند
عبارات ممیز شناور در زمان کامپایل (که ممکن است تحت تأثیر حالت گرد کردن قرار گیرند)
و تبدیلات حسابی که در حضور وابسته به علامت ناامن هستند
حالت های گرد کردن
پیش فرض این است -منهای دور.
این گزینه آزمایشی است و در حال حاضر تضمینی برای غیرفعال کردن همه GCC نمی دهد
بهینه سازی هایی که تحت تاثیر حالت گرد کردن قرار می گیرند. ممکن است نسخه های آینده GCC ارائه شود
کنترل دقیق تر این تنظیم با استفاده از پراگما "FENV_ACCESS" C99. این خط فرمان
گزینه برای تعیین حالت پیش فرض برای "FENV_ACCESS" استفاده خواهد شد.
-fsignaling-nans
کامپایل کد با این فرض که IEEE سیگنالینگ NaNs ممکن است تله های قابل مشاهده توسط کاربر در طول ایجاد کند
عملیات ممیز شناور تنظیم این گزینه بهینه سازی هایی را که ممکن است تغییر کنند غیرفعال می کند
تعداد استثناهای قابل مشاهده با سیگنال NaNs. این گزینه دلالت دارد
-trapping-math.
این گزینه باعث می شود که ماکرو پیش پردازنده "__SUPPORT_SNAN__" تعریف شود.
پیش فرض این است -fno-signaling-nans.
این گزینه آزمایشی است و در حال حاضر تضمینی برای غیرفعال کردن همه GCC نمی دهد
بهینهسازیهایی که بر رفتار سیگنالدهی NaN تأثیر میگذارند.
-fsingle-precision-constant
به جای تبدیل ضمنی، ثابت های ممیز شناور را به عنوان یک دقت واحد در نظر بگیرید
آنها را به ثابت های با دقت دو برابر می کنند.
-fcx-limited-range
هنگامی که فعال است، این گزینه بیان می کند که یک مرحله کاهش محدوده زمانی لازم نیست
انجام تقسیم پیچیده همچنین، هیچ بررسی وجود ندارد که آیا نتیجه a
ضرب یا تقسیم مختلط "NaN + I*NaN" است، با تلاش برای نجات
وضعیت در آن مورد پیش فرض است -fno-cx-limited-range، اما توسط فعال می شود
سریع-ریاضی.
این گزینه تنظیمات پیش فرض ISO C99 "CX_LIMITED_RANGE" را کنترل می کند.
با این وجود، این گزینه برای همه زبان ها اعمال می شود.
-fcx-fortran-rules
ضرب و تقسیم مختلط از قوانین فرترن پیروی می کنند. کاهش دامنه به صورت انجام می شود
بخشی از تقسیم پیچیده است، اما هیچ بررسی وجود ندارد که آیا نتیجه یک مجتمع است
ضرب یا تقسیم "NaN + I*NaN" است، با تلاش برای نجات وضعیت
در این مورد.
پیش فرض این است -fno-cx-fortran-rules.
گزینه های زیر بهینه سازی هایی را کنترل می کنند که ممکن است عملکرد را بهبود بخشند، اما اینطور نیستند
فعال شده توسط هر -O گزینه ها. این بخش شامل گزینه های آزمایشی است که ممکن است تولید کنند
کد شکسته
-شاخه-احتمالات
پس از اجرای یک برنامه کامپایل شده با -fprofile-arcs، می توانید آن را برای بار دوم کامپایل کنید
با استفاده از -شاخه-احتمالات، برای بهبود بهینه سازی بر اساس تعداد دفعات
هر شاخه گرفته شد. زمانی که یک برنامه با -fprofile-arcs خارج می شود، ذخیره می کند
اجرای قوس در فایلی به نام خوانده می شود sourcename.gcda برای هر فایل منبع در
اطلاعات موجود در این فایل داده بسیار به ساختار تولید شده بستگی دارد
کد، بنابراین باید از کد منبع یکسان و گزینه های بهینه سازی یکسان برای هر دو استفاده کنید
تالیفات
با -شاخه-احتمالات، GCC قرار می دهد REG_BR_PROB روی هر کدام یادداشت کنید JUMP_INSN و
CALL_INSN. از این موارد می توان برای بهبود بهینه سازی استفاده کرد. در حال حاضر فقط مورد استفاده قرار می گیرند
در یک مکان: در reorg.c، به جای حدس زدن به کدام مسیر یک شاخه بیشتر احتمال دارد
گرفتن، REG_BR_PROB از مقادیر برای تعیین دقیق مسیر بیشتر استفاده می شود
غالبا.
-fprofile-values
اگر با -fprofile-arcs، کد را اضافه می کند تا مقداری داده در مورد مقادیر از
عبارات در برنامه جمع آوری شده است.
با -شاخه-احتمالات، داده های جمع آوری شده از مقادیر پروفایل را بازخوانی می کند
عباراتی برای استفاده در بهینه سازی
فعال شده با -fprofile-generate و -fprofile-use.
-fprofile-reorder-functions
ترتیب مجدد عملکرد بر اساس ابزار دقیق نمایه، اولین بار اجرا را جمع آوری می کند
یک تابع و این توابع را به ترتیب صعودی مرتب می کند.
فعال شده با -fprofile-use.
-fvpt
اگر با -fprofile-arcs، این گزینه به کامپایلر دستور اضافه کردن کد را می دهد
جمع آوری اطلاعات در مورد مقادیر عبارات
با -شاخه-احتمالات، داده های جمع آوری شده را بازخوانی می کند و در واقع آن را انجام می دهد
بهینه سازی بر اساس آنها در حال حاضر بهینه سازی ها شامل تخصص
عملیات تقسیم با استفاده از دانش در مورد مقدار مخرج.
-frename-registers
با استفاده از رجیسترهای سمت چپ، سعی کنید از وابستگی نادرست در کد برنامه ریزی شده جلوگیری کنید
پس از تخصیص ثبت نام به پایان رسید. این بهینه سازی بیشترین سود را برای پردازنده ها دارد
از ثبت ها بسته به فرمت اطلاعات اشکال زدایی پذیرفته شده توسط هدف،
با این حال، می تواند اشکال زدایی را غیرممکن کند، زیرا متغیرها دیگر در خانه نمی مانند
ثبت نام".
فعال به طور پیش فرض با -funroll-loops و -fpeel-loops.
ردیاب
برای بزرگ کردن اندازه سوپر بلوک، تکثیر دم را انجام دهید. این تحول ساده می کند
جریان کنترل تابع به بهینه سازی های دیگر اجازه می دهد کار بهتری انجام دهند.
فعال شده با -fprofile-use.
-funroll-loops
حلقههایی که تعداد تکرارهای آنها در زمان کامپایل یا بعد از آن قابل تعیین است را باز کنید
ورود به حلقه -funroll-loops دلالت دارد -frerun-cse-after-loop, - وب و
-frename-registers. همچنین لایه برداری کامل حلقه را روشن می کند (یعنی حذف کامل
حلقه هایی با تعداد تکرار ثابت کم). این گزینه کد را بزرگتر می کند و
ممکن است باعث شود سریعتر اجرا شود یا نه.
فعال شده با -fprofile-use.
-funroll-all-loops
همه حلقه ها را باز کنید، حتی اگر تعداد تکرارهای آنها در زمانی که حلقه است نامشخص باشد
وارد شد. این معمولا باعث می شود برنامه ها کندتر اجرا شوند. -funroll-all-loops حاکی از
گزینه های مشابه -funroll-loops.
-fpeel-loops
حلقه های لایه برداری که اطلاعات کافی برای آنها وجود دارد که زیاد غلت نمی خورند (از
بازخورد نمایه). همچنین لایه برداری کامل حلقه را روشن می کند (یعنی حذف کامل
حلقه هایی با تعداد تکرار ثابت کم).
فعال شده با -fprofile-use.
-fmove-loop-invariants
پاس حرکت ثابت حلقه را در بهینه ساز حلقه RTL فعال می کند. در سطح فعال شد
-O1
-funswitch-loops
شاخه ها را با شرایط ثابت حلقه به خارج از حلقه، با تکراری از حلقه منتقل کنید
حلقه روی هر دو شاخه (بر اساس نتیجه شرایط اصلاح شده است).
-function-sections
بخشهای fdata
هر تابع یا آیتم داده را در بخش خود در فایل خروجی در صورت هدف قرار دهید
از بخش های دلخواه پشتیبانی می کند. نام تابع یا نام آیتم داده
نام بخش را در فایل خروجی تعیین می کند.
از این گزینه ها در سیستم هایی استفاده کنید که پیوند دهنده می تواند بهینه سازی هایی را برای بهبود انجام دهد
محل مرجع در فضای دستورالعمل اکثر سیستم ها از شی ELF استفاده می کنند
فرمت و پردازنده های SPARC که Solaris 2 را اجرا می کنند دارای پیوندهایی با چنین بهینه سازی هایی هستند.
AIX ممکن است این بهینه سازی ها را در آینده داشته باشد.
فقط زمانی از این گزینه ها استفاده کنید که مزایای قابل توجهی از انجام این کار وجود داشته باشد. وقتی تو
این گزینه ها را مشخص کنید، اسمبلر و لینکر شی بزرگتر و قابل اجرایی ایجاد می کنند
فایل ها و همچنین کندتر هستند. اگر این را مشخص کنید، نمی توانید از "gprof" در همه سیستم ها استفاده کنید
گزینه، و اگر هم این گزینه و هم را مشخص کنید ممکن است با اشکال زدایی مشکل داشته باشید
-g.
-fbranch-target-load-optimize
بهینه سازی بار رجیستر هدف شاخه را قبل از threading/prologue/epilogue انجام دهید.
استفاده از رجیسترهای هدف معمولاً فقط در هنگام بارگذاری مجدد و در نتیجه بالا بردن قابل مشاهده است
بارگذاری خارج از حلقه و انجام زمانبندی بین بلوکی نیاز به یک بهینهسازی جداگانه دارد
عبور.
-fbranch-هدف-بار-بهینه 2
بهینه سازی بار رجیستر هدف شاخه را بعد از threading/prologue/epilogue انجام دهید.
-fbtr-bb-exclusive
هنگام انجام بهینهسازی بار ثبت هدف شاخه، از هدف شعبه مجدد استفاده نکنید
در هر بلوک اصلی ثبت می شود.
محافظ چوب
برای بررسی سرریزهای بافر، مانند حملات شکست پشته، کد اضافی منتشر کنید. این
با افزودن یک متغیر محافظ به توابع دارای اشیاء آسیب پذیر انجام می شود. این
شامل توابعی است که "alloca" را صدا می کنند و توابعی با بافرهای بزرگتر از 8 بایت.
هنگامی که یک تابع وارد می شود، محافظ ها مقداردهی اولیه می شوند و پس از آن بررسی می شوند
تابع خارج می شود اگر یک بررسی گارد ناموفق باشد، یک پیام خطا چاپ می شود و برنامه
خارج می شود.
-fstack-protector-all
پسندیدن محافظ چوب به جز اینکه همه عملکردها محافظت می شوند.
-fstack-محافظ-قوی
پسندیدن محافظ چوب اما شامل توابع اضافی برای محافظت --- آن
که دارای تعاریف آرایه محلی هستند یا به آدرس های فریم محلی ارجاع دارند.
توجه: در اوبونتو 14.10 و نسخه های بعدی، -fstack-محافظ-قوی توسط فعال می شود
پیشفرض برای C، C++، ObjC، ObjC++، اگر هیچکدام از آنها نباشد -fno-stack-protector, -nostdlib، نه
-مناسب پیدا شدند.
-قطعات-لنگرها
سعی کنید تعداد محاسبات نشانی نمادین را با استفاده از "لنگر" مشترک کاهش دهید.
نمادها برای آدرس دادن به اشیاء نزدیک. این تبدیل می تواند به کاهش تعداد کمک کند
از ورودی های GOT و دسترسی های GOT در برخی از اهداف.
به عنوان مثال، اجرای تابع زیر "foo":
static int a, b, c;
int foo (void) { return a + b + c; }
معمولا آدرس هر سه متغیر را محاسبه می کند، اما اگر آن را با آن کامپایل کنید
-قطعات-لنگرها، به جای آن از یک نقطه لنگر مشترک به متغیرها دسترسی پیدا می کند. در
اثر مشابه شبه کد زیر است (که C معتبر نیست):
int foo (باطل)
{
ثبت نام int *xr = &x;
xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
}
همه اهداف از این گزینه پشتیبانی نمی کنند.
--پارام نام=ارزش
در برخی مکانها، GCC از ثابتهای مختلفی برای کنترل میزان بهینهسازی استفاده میکند
انجام شد. به عنوان مثال، GCC توابع درون خطی که حاوی بیش از یک معین باشد را وارد نمی کند
تعداد دستورالعمل می توانید برخی از این ثابت ها را در خط فرمان کنترل کنید
با استفاده از --پارام گزینه.
نام پارامترهای خاص، و معنای مقادیر، به آن گره خورده است
داخلی کامپایلر، و ممکن است بدون اطلاع قبلی در آینده تغییر کنند
منتشر شده.
در هر مورد، ارزش یک عدد صحیح است انتخاب های مجاز برای نام هستند:
قابل پیش بینی-شاخه-نتیجه
زمانی که پیش بینی می شود شاخه با احتمال کمتر از این آستانه گرفته شود
(در درصد)، سپس به خوبی قابل پیش بینی در نظر گرفته می شود. پیش فرض 10 است.
max-crossjump-edges
حداکثر تعداد لبه های ورودی که برای پرش متقاطع باید در نظر گرفته شود. الگوریتم
استفاده شده توسط fcrossjumping تعداد یال های ورودی به هر بلوک O(N^2) است.
افزایش مقادیر به معنای بهینهسازی تهاجمیتر است که زمان کامپایل را افزایش میدهد
افزایش احتمالاً با بهبود کوچک در اندازه اجرایی.
min-crossjump-insns
حداقل تعداد دستورالعمل هایی که باید در انتهای دو بلوک مطابقت داده شود
قبل از اینکه پرش متقاطع روی آنها انجام شود. این مقدار در مورد نادیده گرفته می شود
جایی که تمام دستورالعمل های بلوکی که از آن پرش متقاطع می شود مطابقت دارند. را
مقدار پیش فرض 5 است.
max-grow-copy-bb-insns
حداکثر ضریب گسترش اندازه کد هنگام کپی کردن بلوک های اصلی به جای
پریدن بسط نسبت به یک دستورالعمل پرش است. مقدار پیش فرض است
8.
max-goto-duplication-insns
حداکثر تعداد دستورالعملها برای کپی کردن به بلوکی که به a میپرد
را محاسبه کرد. برای جلوگیری از رفتار O(N^2) در تعدادی از پاس ها، GCC فاکتورها را فاکتور می کند
در اوایل فرآیند کامپایل، gotos را محاسبه میکند و تا اواخر آنها را از بین میبرد
ممکن است. فقط جهش های محاسبه شده در انتهای یک بلوک اصلی با حداکثر حداکثر
goto-duplication-insns بدون عامل هستند. مقدار پیش فرض 8 است.
max-delay-slot-insn-search
حداکثر تعداد دستورالعمل هایی که باید در هنگام جستجوی دستورالعمل در نظر گرفته شوند
یک شکاف تاخیر را پر کنید اگر بیش از این تعداد دلخواه دستورالعمل باشد
جستجو، صرفه جویی در زمان پر کردن شکاف تاخیر حداقل است، بنابراین متوقف شوید
جستجوکردن. افزایش مقادیر به معنای بهینه سازی تهاجمی تر است که باعث می شود
زمان کامپایل با بهبودی اندک در زمان اجرا افزایش می یابد.
max-delay-slot-live-search
هنگام تلاش برای پر کردن شکافهای تاخیر، حداکثر تعداد دستورالعملها را در نظر بگیرید
هنگام جستجو برای بلوکی با اطلاعات ثبت زنده معتبر. افزایش این
مقدار دلخواه انتخاب شده به معنای بهینه سازی تهاجمی تر، افزایش مقدار است
زمان تدوین زمانی که کد شکاف تاخیر وجود دارد، این پارامتر باید حذف شود
برای حفظ نمودار کنترل جریان بازنویسی شده است.
max-gcse-memory
حداکثر مقدار تقریبی حافظه ای که می توان به منظور اجرا اختصاص داد
بهینه سازی حذف زیرعبارت مشترک جهانی اگر حافظه بیشتر از
مشخص شده مورد نیاز است، بهینه سازی انجام نشده است.
max-gcse-insertion-ratio
اگر نسبت درج عبارت به حذف بزرگتر از این مقدار برای
هر عبارتی، سپس RTL PRE عبارت را درج یا حذف می کند و بنابراین خارج می شود
محاسبات جزئی زائد در جریان دستورالعمل مقدار پیش فرض است
20.
max-pending-list-length
حداکثر تعداد زمانبندی وابستگیهای معلق اجازه میدهد قبل از شستشوی آن
وضعیت فعلی و شروع دوباره توابع بزرگ با چند شاخه یا تماس می توانند
لیست های بسیار بزرگی ایجاد کنید که بیهوده حافظه و منابع را مصرف می کند.
max-modulo-backtrack-attempts
حداکثر تعداد تلاشهایی که زمانبندی باید هنگام مدول کردن برای بازگشت به عقب انجام دهد
برنامه ریزی یک حلقه مقادیر بزرگتر می توانند زمان کامپایل را به صورت تصاعدی افزایش دهند.
max-inline-insns-single
چندین پارامتر خط داخلی درخت مورد استفاده در GCC را کنترل می کنند. این عدد تعیین می کند
حداکثر تعداد دستورالعمل ها (شمرده شده در نمایندگی داخلی شورای همکاری خلیج فارس) در الف
تابع تکی که خط داخلی درخت برای درون ریزی در نظر می گیرد. این فقط تاثیر می گذارد
توابع درون خطی اعلام شده و متدهای پیاده سازی شده در یک اعلان کلاس (C++).
مقدار پیش فرض 400 است.
Max-Inline-insns-auto
هنگام استفاده از توابع -finline (شامل در -O3)، بسیاری از توابع است که
در غیر این صورت برای inlining توسط کامپایلر مورد بررسی قرار نمی گیرند. به
آن توابع، یک محدودیت متفاوت (محدود کننده تر) در مقایسه با توابع
اعلام شده درون خطی را می توان اعمال کرد. مقدار پیش فرض 40 است.
inline-min-speedup
زمانی که بهبود عملکرد تخمین زده شده زمان اجرا تماس گیرنده + تماس گیرنده بیش از این باشد
آستانه (به صورت Precent)، تابع را می توان بدون در نظر گرفتن محدودیت در خط خطی کرد
--پارام max-inline-insns-single و --پارام Max-Inline-insns-auto.
کارکردهای بزرگ
محدودیتی که توابع واقعاً بزرگ را مشخص می کند. برای توابع بزرگتر از این حد
پس از inlining، inlining توسط محدود شده است --پارام عملکرد بزرگ - رشد. این
پارامتر در درجه اول برای جلوگیری از زمان فشرده سازی شدید ناشی از غیر
الگوریتم های خطی مورد استفاده در قسمت پشتی مقدار پیش فرض 2700 است.
عملکرد بزرگ - رشد
حداکثر رشد تابع بزرگ ناشی از خطبندی را بر حسب درصد مشخص میکند. در
مقدار پیش فرض 100 است که رشد عملکرد بزرگ را به 2.0 برابر اصلی محدود می کند
اندازه.
واحدهای بزرگ
محدودیتی که واحد ترجمه بزرگ را مشخص می کند. رشد ناشی از داخل شدن واحدها
بزرگتر از این حد محدود شده است --پارام درون خطی واحد رشد. برای واحدهای کوچک
این ممکن است خیلی تنگ باشد برای مثال، واحدی متشکل از تابع A را در نظر بگیرید
که خطی است و B که فقط A را سه بار صدا می کند. اگر B نسبت به A کوچک باشد،
رشد واحد 300% است و در عین حال چنین خطی بسیار منطقی است. برای خیلی بزرگ
واحدهای متشکل از توابع خطی کوچک، با این حال، رشد واحد کلی است
برای جلوگیری از انفجار نمایی اندازه کد، محدودیت لازم است. بنابراین برای کوچکتر
واحد، اندازه افزایش یافته است --پارام واحدهای بزرگ قبل از درخواست --پارام
درون خطی واحد رشد. پیش فرض 10000 است.
درون خطی واحد رشد
حداکثر رشد کلی واحد کامپایل ناشی از خطبندی را مشخص میکند. در
مقدار پیش فرض 30 است که رشد واحد را به 1.3 برابر اندازه اصلی محدود می کند.
ipcp-unit-growth
حداکثر رشد کلی واحد کامپایل ناشی از بین رویه ای را مشخص می کند
انتشار ثابت مقدار پیش فرض 10 است که رشد واحد را به 1.1 محدود می کند
برابر اندازه اصلی
قاب پشته بزرگ
محدودیتی که قاب های پشته بزرگ را مشخص می کند. در حالی که الگوریتم درون خطی در تلاش است
تا بیش از حد از این حد عبور نکنیم. مقدار پیش فرض 256 بایت است.
پشته بزرگ-قاب-رشد
حداکثر رشد فریمهای پشتهای بزرگ را که بهدلیل قرار گرفتن درونی در درصد ایجاد میشود، مشخص میکند.
مقدار پیش فرض 1000 است که رشد قاب پشته های بزرگ را به 11 برابر محدود می کند
اندازه اصلی
max-inline-insns-recursive
max-inline-insns-recursive-auto
حداکثر تعداد دستورالعمل ها را مشخص می کند که یک کپی خارج از خط از یک خودکار
تابع درون خطی بازگشتی میتواند با انجام خطبندی بازگشتی رشد کند.
برای توابع اعلام شده درون خطی، --پارام max-inline-insns-recursive در نظر گرفته شده است
حساب. برای توابعی که به صورت درون خطی اعلام نشده اند، درون خطی بازگشتی تنها زمانی اتفاق می افتد که
توابع -finline (شامل در -O3) فعال است و --پارام max-inline-insns-
بازگشتی-خودکار استفاده می شود. مقدار پیش فرض 450 است.
حداکثر عمق درون خطی بازگشتی
max-inline-recursive-depth-auto
حداکثر عمق بازگشتی مورد استفاده برای خطبندی بازگشتی را مشخص میکند.
برای توابع اعلام شده درون خطی، --پارام حداکثر عمق درون خطی بازگشتی در نظر گرفته شده است
حساب. برای توابعی که به صورت درون خطی اعلام نشده اند، درون خطی بازگشتی تنها زمانی اتفاق می افتد که
توابع -finline (شامل در -O3) فعال است و --پارام حدا
عمق خودکار استفاده می شود. مقدار پیش فرض 8 است.
min-inline-recursive-probability
درون خطی بازگشتی فقط برای تابعی که بازگشت عمیق درون دارد سودآور است
متوسط است و می تواند برای عملکردی که عمق بازگشت کمی دارد با افزایش آن صدمه بزند
اندازه پرولوگ یا پیچیدگی بدنه تابع به بهینه سازهای دیگر.
وقتی بازخورد نمایه در دسترس است (نگاه کنید به -fprofile-generate) بازگشت واقعی
عمق را می توان از روی احتمال بازگشت تابع از طریق یک فراخوانی مشخص حدس زد
اصطلاح. این پارامتر، inlining را فقط به فراخوانی عباراتی که
احتمال بیشتر از آستانه داده شده (در درصد). مقدار پیش فرض 10 است.
اولیه-inlining-insns
رشدی را مشخص کنید که داخلی اولیه می تواند ایجاد کند. در واقع مقدار آن را افزایش می دهد
از inlining برای کد که جریمه انتزاعی زیادی دارد. مقدار پیش فرض 10 است.
max-early-inliner-iterations
max-early-inliner-iterations
محدودیت تکرارهای داخلی اولیه. این اساساً تعداد را محدود می کند
تماسهای غیرمستقیم تودرتو که خط داخلی اولیه میتواند حل کند. زنجیرهای عمیق تر هنوز هستند
توسط خط کشی دیر انجام می شود.
قابلیت تقسیم مشترک
قابلیت تقسیم مشترک
احتمال (بر حسب درصد) که تابع درون خطی C++ با قابلیت مشاهده comdat هستند
به اشتراک گذاشته شده در چندین واحد کامپایل. مقدار پیش فرض 20 است.
min-vect-loop-bound
حداقل تعداد تکرارهایی که تحت آن حلقه ها بردار نیستند وقتی
-ftree-vectorize استفاده می شود. تعداد تکرارها پس از بردارسازی نیاز دارد
بزرگتر از مقدار مشخص شده توسط این گزینه باشد تا امکان برداری را فراهم کند. در
مقدار پیش فرض 0 است.
gcse-cost-distance-ratio
ضریب مقیاس در محاسبه حداکثر فاصله یک عبارت را می توان با آن جابجا کرد
بهینه سازی GCSE این در حال حاضر فقط در کد بالابر پاس پشتیبانی می شود.
هر چه این نسبت بزرگتر باشد، بالا بردن کد تهاجمی تر با ساده است
عبارتها، یعنی عباراتی که هزینه کمتری دارند gcse-unrestricted-
هزینه. تعیین 0 باعث غیرفعال کردن بالا بردن عبارات ساده می شود. مقدار پیش فرض است
10.
gcse-unrestricted-cost
هزینه، تقریباً به عنوان هزینه یک دستورالعمل ماشین معمولی اندازه گیری می شود
که بهینه سازی های GCSE فاصله ای را که یک عبارت می تواند طی کند محدود نمی کند.
این در حال حاضر فقط در کد بالابر پاس پشتیبانی می شود. هر چه هزینه کمتر،
بالا بردن کد تهاجمی تر است. تعیین 0 به همه عبارات اجازه می دهد
مسافت های نامحدود را طی کنید مقدار پیش فرض 3 است.
حداکثر عمق بالابر
عمق جستجو در درخت غالب برای عباراتی که باید بالا بروند. این مورد استفاده قرار می گیرد
برای جلوگیری از رفتار درجه دوم در الگوریتم بالابر. مقدار 0 محدود نمی شود
در جستجو، اما ممکن است کامپایل توابع عظیم را کند کند. مقدار پیش فرض
30 است
حداکثر-دم-ادغام-مقایسه
حداکثر مقدار bbs مشابه برای مقایسه یک bb با. این برای اجتناب استفاده می شود
رفتار درجه دوم در ادغام دم درختان مقدار پیش فرض 10 است.
حداکثر-دم-ادغام-تکرار
حداکثر مقدار تکرار عبور از تابع. این عادت دارد
محدود کردن زمان تدوین در ادغام دم درخت مقدار پیش فرض 2 است.
max-unrolled-insns
حداکثر تعداد دستورالعمل هایی که ممکن است یک حلقه باید باز شود. اگر یک حلقه
باز می شود، این پارامتر همچنین تعیین می کند که کد حلقه چند بار است
باز شد.
max-average-unrolled-insns
حداکثر تعداد دستورات مغرضانه با احتمال اجرای آنها که
ممکن است یک حلقه باید باز شود. اگر یک حلقه باز شود، این پارامتر نیز
تعیین می کند که کد حلقه چند بار باز شده است.
حداکثر زمان بازگشایی
حداکثر تعداد باز شدن یک حلقه.
max-peeled-insns
حداکثر تعداد دستورالعمل هایی که ممکن است یک حلقه باید کنده شود. اگر یک حلقه
لایه برداری می شود، این پارامتر همچنین تعیین می کند که کد حلقه چند بار لایه برداری شود.
حداکثر زمان لایه برداری
حداکثر تعداد لایه برداری از یک حلقه.
max-peel- شاخه ها
حداکثر تعداد شاخه ها در مسیر گرم از طریق دنباله پوست کنده.
max-complely-peeled-insns
حداکثر تعداد insns یک حلقه کاملاً کنده شده.
حداکثر زمان لایه برداری
حداکثر تعداد تکرار یک حلقه که برای لایه برداری کامل مناسب باشد.
حداکثر-کاملاً لایه برداری-حلقه-لانه-عمق
حداکثر عمق یک لانه حلقه مناسب برای لایه برداری کامل.
max-unswitch-insns
حداکثر تعداد insns یک حلقه بدون سوئیچ.
حداکثر سطح حذف سوئیچ
حداکثر تعداد انشعابات بدون سوئیچ در یک حلقه.
لیم گران
حداقل هزینه یک عبارت گران قیمت در حرکت ثابت حلقه.
iv-consider-all-candidates-bound
محدود به تعداد نامزدها برای متغیرهای القایی، که زیر آن همه نامزدها
برای هر استفاده در بهینه سازی متغیر القایی در نظر گرفته می شوند. اگر وجود دارد
نامزدهای بیشتر از این، فقط مرتبطترین آنها در نظر گرفته میشوند که از آنها اجتناب شود
پیچیدگی زمانی درجه دوم
iv-max-considered-uses
بهینهسازیهای متغیر القایی از حلقههایی که حاوی القاء بیشتری هستند صرفنظر میکنند
کاربردهای متغیر
iv-always-prune-cand-set-bound
اگر تعداد نامزدهای مجموعه از این مقدار کمتر است، همیشه سعی کنید
هنگام اضافه کردن یک iv های غیر ضروری از مجموعه حذف کنید.
scev-max-expr-size
محدود به اندازه عبارات استفاده شده در تحلیلگر تکامل اسکالر. بزرگ
عبارات تحلیلگر را کند می کند.
scev-max-expr-complexity
محدود به پیچیدگی عبارات در تحلیلگر تکامل اسکالر.
عبارات پیچیده تحلیلگر را کند می کند.
omega-max-vars
حداکثر تعداد متغیرها در یک سیستم محدودیت امگا. مقدار پیش فرض
128 است
omega-max-geqs
حداکثر تعداد نابرابری در یک سیستم محدودیت امگا. پیشفرض
مقدار 256 است.
امگا-max-eqs
حداکثر تعداد برابری ها در یک سیستم محدودیت امگا. مقدار پیش فرض
128 است
omega-max-wild-cards
حداکثر تعداد متغیرهای wildcard که حل کننده امگا قادر به درج آن است.
مقدار پیش فرض 18 است.
امگا-هش-اندازه جدول
اندازه جدول هش در حل کننده امگا. مقدار پیش فرض 550 است.
کلیدهای امگا حداکثر
حداکثر تعداد کلیدهای استفاده شده توسط حل کننده امگا. مقدار پیش فرض 500 است.
امگا-از بین بردن-زائد-محدودیت
هنگامی که روی 1 تنظیم می شود، از روش های گران قیمت برای حذف تمام محدودیت های اضافی استفاده کنید. در
مقدار پیش فرض 0 است.
vect-max-version-for-alignment-checks
حداکثر تعداد بررسیهای زمان اجرا که میتوان هنگام انجام حلقه انجام داد
نسخه سازی برای تراز در وکتورایزر.
vect-max-version-for-alias-checks
حداکثر تعداد بررسیهای زمان اجرا که میتوان هنگام انجام حلقه انجام داد
نسخه سازی برای نام مستعار در vectorizer.
vect-max-peeling-for-alignment
حداکثر تعداد لایه برداری حلقه برای افزایش تراز دسترسی برای بردار. ارزش
-1 به معنای "بدون محدودیت" است.
حداکثر تکرار برای ردیابی
حداکثر تعداد تکرار یک حلقه الگوریتم brute-force برای تجزیه و تحلیل
تعداد تکرارهای حلقه سعی در ارزیابی دارد.
hot-bb-count-ws-permille
اگر به مقدار داده شده کمک کند، یک تعداد نمایه بلوک اولیه داغ در نظر گرفته می شود
پرمیلاژ (یعنی 0...1000) کل اجرای پروفیل.
داغ-bb-فرکانس-کسری
کسری از فرکانس بلوک ورودی اجرای بلوک اصلی را انتخاب کنید
تابع داده شده بلوک اصلی باید داغ در نظر گرفته شود.
حداکثر-پیش بینی-تکرار
حداکثر تعداد تکرارهای حلقه ای که به صورت ایستا پیش بینی می کنیم. این مفید است در
مواردی که یک تابع شامل یک حلقه منفرد با کران شناخته شده و یک حلقه دیگر است
با کران نامعلوم تعداد شناخته شده تکرار به درستی پیش بینی می شود، در حالی که
تعداد مجهول تکرارها به طور متوسط تقریباً 10 است. این بدان معنی است که حلقه
بدون مرز نسبت به دیگری به طور مصنوعی سرد به نظر می رسد.
ساخته شده-انتظار-احتمال
احتمال اینکه عبارت دارای مقدار مشخص شده باشد را کنترل کنید. این
پارامتر یک درصد (یعنی 0 ... 100) را به عنوان ورودی می گیرد. احتمال پیش فرض
از 90 به صورت تجربی به دست می آید.
آستانه تراز
کسری از حداکثر فرکانس اجرای یک بلوک پایه را در a انتخاب کنید
عملکرد تراز کردن بلوک اصلی.
تکرارهای align-loop
حلقه ای که انتظار می رود حداقل تعداد تکرار انتخابی را تکرار کند، تراز شده است.
ردیاب-دینامیک-پوشش
ردیاب-دینامیک-پوشش-بازخورد
این مقدار برای محدود کردن تشکیل سوپر بلوک یک بار درصد داده شده استفاده می شود
دستورالعمل های اجرا شده پوشش داده شده است. این گسترش غیر ضروری اندازه کد را محدود می کند.
La ردیاب-دینامیک-پوشش-بازخورد فقط زمانی استفاده می شود که بازخورد نمایه باشد
در دسترس. پروفایل های واقعی (برخلاف پروفایل های تخمین زده شده به صورت ایستا) بسیار زیاد است
متعادل تر است و اجازه می دهد آستانه مقدار بیشتری داشته باشد.
tracer-max-code-growth
وقتی رشد کد به درصد معین رسید، تکثیر دنباله را متوقف کنید. این یک است
محدودیت نسبتاً مصنوعی، زیرا اکثر موارد تکراری بعداً به صورت متقاطع حذف می شوند
پرش، بنابراین ممکن است روی مقادیر بسیار بالاتر از رشد کد مورد نظر تنظیم شود.
نسبت ردیاب-دقیقه-شاخه
زمانی که احتمال معکوس بهترین لبه کمتر از این باشد، رشد معکوس را متوقف کنید
آستانه (در درصد).
نسبت ردیاب-دقیقه-شاخه
tracer-min-branch-ratio-feedback
اگر بهترین یال احتمال کمتری از این آستانه داشته باشد، رشد رو به جلو را متوقف کنید.
به همین ترتیب ردیاب-دینامیک-پوشش دو مقدار وجود دارد، یکی برای کامپایل
برای بازخورد نمایه و یکی برای گردآوری بدون. مقدار برای کامپایل
برای ایجاد بازخورد نمایه باید محافظه کارانه تر (بالاتر) باشد
ردیاب موثر
max-cse-path-length
حداکثر تعداد بلوک های اساسی در مسیری که CSE در نظر می گیرد. پیش فرض 10 است.
max-cse-insns
حداکثر تعداد دستورالعمل هایی که CSE قبل از فلاشینگ پردازش می کند. پیش فرض است
1000.
ggc-min-expand
شورای همکاری خلیج فارس از یک جمع کننده زباله برای مدیریت تخصیص حافظه خود استفاده می کند. این پارامتر
حداقل درصدی را مشخص می کند که توده زباله جمع کننده باید در آن باشد
امکان گسترش بین مجموعه ها وجود دارد. تنظیم این ممکن است سرعت کامپایل را بهبود بخشد.
هیچ تاثیری در تولید کد ندارد.
پیشفرض 30% + 70% * (RAM/1GB) با کران بالای 100% زمانی که RAM >= 1GB است.
اگر "getrlimit" در دسترس باشد، مفهوم "RAM" کوچکترین رم واقعی است و
"RLIMIT_DATA" یا "RLIMIT_AS". اگر GCC قادر به محاسبه RAM در یک خاص نباشد
پلت فرم، از حد پایین 30٪ استفاده می شود. تنظیم این پارامتر و ggc-min-
هیپسایز کردن به صفر باعث می شود در هر فرصتی یک مجموعه کامل رخ دهد. این هست
بسیار کند است، اما می تواند برای اشکال زدایی مفید باشد.
GGC-min-Heapsize
حداقل اندازه انبوه زباله جمع کن قبل از شروع به زحمت جمع آوری
زباله اولین مجموعه پس از بزرگ شدن پشته رخ می دهد ggc-min-expand%
خارج از GGC-min-Heapsize. باز هم، تنظیم این ممکن است سرعت کامپایل را بهبود بخشد، و
هیچ تاثیری در تولید کد ندارد.
پیش فرض کوچکتر از RAM/8، RLIMIT_RSS یا محدودیتی است که سعی می کند اطمینان حاصل کند
که از RLIMIT_DATA یا RLIMIT_AS تجاوز نمی شود، اما با کران پایین 4096
(چهار مگابایت) و حد بالایی 131072 (128 مگابایت). اگر GCC قادر نیست
برای محاسبه RAM در یک پلت فرم خاص، از کران پایین استفاده می شود. تنظیم این
پارامتر بسیار بزرگ به طور موثر جمع آوری زباله را غیرفعال می کند. تنظیم این
پارامتر و ggc-min-expand به صفر باعث می شود که یک مجموعه کامل در هر اتفاق بیفتد
فرصت.
max-reload-search-insns
حداکثر تعداد بارگذاری مجدد دستورالعمل باید به دنبال معادل به عقب باشد
ثبت نام. افزایش مقادیر به معنای بهینه سازی تهاجمی تر است که باعث می شود
زمان تدوین با عملکرد احتمالا کمی بهتر افزایش می یابد. پیشفرض
مقدار 100 است.
max-cselib-memory-locations
حداکثر تعداد مکانهای حافظه که cselib باید در نظر گرفته شود.
افزایش مقادیر به معنای بهینهسازی تهاجمیتر است که زمان کامپایل را افزایش میدهد
افزایش با عملکرد احتمالا کمی بهتر است. مقدار پیش فرض 500 است.
reorder-blocks-duplicate
بازگرداندن بلوک ها
برای تصمیم گیری در مورد استفاده بدون قید و شرط از طریق مجوز مرتب سازی مجدد بلوک اصلی استفاده می شود
کد را در مقصد خود شاخه یا کپی کنید. کد زمانی کپی می شود
اندازه تخمینی کوچکتر از این مقدار ضربدر اندازه تخمینی است
پرش بی قید و شرط در نقاط داغ برنامه.
La reorder-block-duplicate-feedback فقط زمانی استفاده می شود که بازخورد نمایه باشد
در دسترس. ممکن است روی مقادیر بالاتر از Reorder-Block-Duplice پس از
اطلاعات در مورد نقاط داغ دقیق تر است.
max-sched-ready-insns
حداکثر تعداد دستورالعمل های آماده برای صدور زمانبندی باید
در هر زمان معینی در طول اولین پاس برنامه ریزی در نظر بگیرید. افزایش ارزش ها
به معنای جستجوهای دقیق تر است که باعث می شود زمان تدوین با احتمال زیاد افزایش یابد
سود اندک مقدار پیش فرض 100 است.
max-sched-region-blocks
حداکثر تعداد بلوکها در یک منطقه که برای بین بلوک در نظر گرفته میشود
برنامه ریزی. مقدار پیش فرض 10 است.
max-pipeline-region-blocks
حداکثر تعداد بلوک در یک منطقه که برای خط لوله در نظر گرفته می شود
زمانبندی انتخابی مقدار پیش فرض 15 است.
max-sched-region-insns
حداکثر تعداد insns در یک منطقه که برای اینتربلاک در نظر گرفته می شود
برنامه ریزی. مقدار پیش فرض 100 است.
حداکثر صفحه اصلی
حداکثر تعداد insns در یک منطقه که برای خط لوله در نظر گرفته می شود
زمانبندی انتخابی مقدار پیش فرض 200 است.
min-spec-prob
حداقل احتمال (بر حسب درصد) رسیدن به یک بلوک منبع برای اینتربلاک
زمان بندی سوداگرانه مقدار پیش فرض 40 است.
حداکثر-ثبت شده-دیافراگم
حداکثر تعداد تکرار از طریق CFG برای گسترش مناطق. مقدار 0 (
پیش فرض) پسوندهای منطقه را غیرفعال می کند.
max-sched-insn-conflict-delay
حداکثر تاخیر در تعارض برای یک insn که برای حرکت گمانهزنی در نظر گرفته میشود.
مقدار پیش فرض 3 است.
sched-spec-prob-cutoff
حداقل احتمال موفقیت حدس و گمان (در درصد)، به طوری که حدس و گمان
inss برنامه ریزی شده است. مقدار پیش فرض 40 است.
sched-spec-state-edge-prob-cutoff
حداقل احتمالی که یک یال باید داشته باشد تا زمانبندی کننده حالت خود را ذخیره کند
در سراسر آن مقدار پیش فرض 10 است.
sched-mem-true-dep-cost
حداقل فاصله (در چرخه های CPU) بین ذخیره و بارگذاری که همان حافظه را هدف قرار می دهد
مکان ها مقدار پیش فرض 1 است.
باکره حداکثر
حداکثر اندازه پنجره پیش بینی برنامه ریزی انتخابی. یک عمق است
جستجو برای دستورالعمل های موجود مقدار پیش فرض 50 است.
selsched-max-sched-times
حداکثر تعداد دفعاتی که یک دستورالعمل در طول انتخابی برنامه ریزی می شود
برنامه ریزی. این محدودیت در تعداد تکرارهایی است که از طریق آن انجام می شود
دستورالعمل ممکن است خط لوله شود. مقدار پیش فرض 2 است.
selsched-max-insns-to-rename
حداکثر تعداد بهترین دستورالعمل ها در لیست آماده که برای آنها در نظر گرفته شده است
تغییر نام در زمانبندی انتخابی مقدار پیش فرض 2 است.
sms-min-sc
حداقل مقدار تعداد مرحله که زمانبندی مدول نوسانی ایجاد میکند. در
مقدار پیش فرض 2 است.
max-last-value-rtl
حداکثر اندازه اندازه گیری شده به عنوان تعداد RTLهایی که می توانند در یک عبارت ثبت شوند
در ترکیب کننده برای یک ثبات شبه به عنوان آخرین مقدار شناخته شده آن ثبات. در
پیش فرض 10000 است.
عدد صحیح سهم
ثابت های اعداد صحیح کوچک می توانند از یک ساختار داده مشترک استفاده کنند و کامپایلر را کاهش دهند
استفاده از حافظه و افزایش سرعت آن. این حداکثر مقدار اشتراک گذاری شده را تعیین می کند
ثابت عدد صحیح مقدار پیش فرض 256 است.
ssp-buffer-size
حداقل اندازه بافرها (یعنی آرایه ها) که محافظت در برابر شکست پشته را دریافت می کنند
چه زمانی fstack-protection استفاده می شود.
این پیش فرض قبل از اوبونتو 10.10 "8" بود. در حال حاضر "4" است، برای افزایش
تعداد عملکردهای محافظت شده توسط محافظ پشته
اندازه کوچک برای اشتراک گذاری پشته
حداقل اندازه متغیرهایی که در اشتراکگذاری شکاف پشته شرکت میکنند، در حالی که نه
بهینه سازی مقدار پیش فرض 32 است.
max-jump-thread-duplication-stmts
حداکثر تعداد عبارات مجاز در یک بلوک که باید در زمانی که باید تکرار شود
پرش نخ
max-fields-for-field-sensitive
حداکثر تعداد فیلدها در ساختاری که به روشی حساس به میدان درمان شده است
تحلیل اشاره گر پیش فرض برای صفر است -O0 و -O1، و 100 برای -اواس, -O2و
-O3.
پیش واکشی-تاخیر
میانگین تعداد دستورالعمل هایی که قبل از واکشی اولیه اجرا می شوند را تخمین بزنید
به پایان می رسد. فاصله از پیش واکشی شده با این ثابت متناسب است.
افزایش این تعداد همچنین ممکن است منجر به واکشی کمتر جریانی شود (نگاه کنید به
پیشگفتارهای همزمان).
پیشگفتارهای همزمان
حداکثر تعداد واکشیهای اولیه که میتوانند همزمان اجرا شوند.
l1-cache-line-size
اندازه خط کش در حافظه نهان L1، بر حسب بایت.
l1-cache-size
اندازه حافظه نهان L1، بر حسب کیلوبایت.
l2-cache-size
اندازه حافظه نهان L2، بر حسب کیلوبایت.
نسبت min-insn به prefetch
حداقل نسبت بین تعداد دستورالعمل ها و تعداد پیش واکشی ها
برای فعال کردن واکشی اولیه در یک حلقه.
نسبت prefetch-min-insn-to-mem
حداقل نسبت بین تعداد دستورالعمل ها و تعداد حافظه
ارجاعاتی برای فعال کردن واکشی اولیه در یک حلقه.
استفاده-معارف-انواع
آیا کامپایلر باید از سیستم نوع "کانونیکال" استفاده کند یا خیر. به طور پیش فرض، این
همیشه باید 1 باشد که از مکانیزم داخلی کارآمدتری برای مقایسه استفاده می کند
انواع در C++ و Objective-C++. با این حال، اگر اشکالات در سیستم نوع متعارف باشد
با ایجاد خرابی در کامپایل، این مقدار را روی 0 تنظیم کنید تا انواع متعارف غیرفعال شود.
سوئیچ-تبدیل-حداکثر-نسبت شاخه
تبدیل اولیه سوئیچ از ایجاد آرایه هایی که بزرگتر از آن هستند خودداری می کند
سوئیچ-تبدیل-حداکثر-نسبت شاخه برابر تعداد شاخه های سوئیچ.
حداکثر طول - جزئی - ضد
حداکثر طول مجموعه آنتیتیک جزئی محاسبه شده در طول درخت جزئی
بهینه سازی حذف افزونگی (-ftree-pre) هنگام بهینه سازی در -O3 و بالاتر.
برای برخی از انواع کد منبع، حذف افزونگی جزئی افزایش یافته است
بهینه سازی ممکن است از بین برود و تمام حافظه موجود در هاست را مصرف کند
دستگاه. این پارامتر محدودیتی را برای طول مجموعه هایی که محاسبه می شوند تعیین می کند.
که از رفتار فراری جلوگیری می کند. تنظیم مقدار 0 برای این پارامتر
طول مجموعه نامحدود را اجازه می دهد.
sccvn-max-scc-size
حداکثر اندازه یک جزء قوی (SCC) در طول پردازش SCCVN. اگر
این محدودیت زده می شود، پردازش SCCVN برای کل تابع انجام نمی شود و
بهینه سازی بسته به آن غیرفعال است. حداکثر اندازه SCC پیش فرض است
10000.
sccvn-max-alias-queries-per-access
حداکثر تعداد پرسوجوهای alias-oracle که هنگام جستجوی افزونگیها انجام میدهیم
برای بارها و فروشگاه ها در صورت رسیدن به این حد، جستجو لغو می شود و بارگذاری یا
فروشگاه اضافی محسوب نمی شود تعداد پرس و جوها به صورت الگوریتمی است
محدود به تعداد ذخایر در همه مسیرها از بارگذاری تا ورودی تابع.
حداکثر تعداد پیش فرض پرس و جوها 1000 است.
ira-max-loops-num
IRA به طور پیش فرض از تخصیص ثبت منطقه ای استفاده می کند. اگر تابعی حاوی مقدار بیشتری باشد
حلقه ها از تعداد داده شده توسط این پارامتر، فقط حداکثر تعداد داده شده از
حلقه هایی که اغلب اجرا می شوند، مناطقی را برای تخصیص ثبات منطقه ای تشکیل می دهند.
مقدار پیش فرض پارامتر 100 است.
ira-max-conflict-table-size
اگرچه IRA از یک الگوریتم پیچیده برای فشرده سازی جدول تضاد استفاده می کند
جدول هنوز هم می تواند به مقدار بیش از حد حافظه برای عملکردهای بزرگ نیاز داشته باشد. اگر
جدول تضاد برای یک تابع می تواند بیشتر از اندازه در مگابایت باشد
پارامتر، تخصیص دهنده ثبات در عوض از یک پارامتر سریعتر، ساده تر و پایین تر استفاده می کند.
الگوریتم کیفیت که نیازی به ساخت جدول تضاد شبه ثبت ندارد.
مقدار پیش فرض پارامتر 2000 است.
ira-loop-reserved-regs
IRA می تواند برای ارزیابی دقیق تر فشار ثبت در حلقه ها برای تصمیم گیری استفاده شود
برای جابجایی متغیرهای حلقه (نگاه کنید به -O3). تعداد ثبت های موجود رزرو شده برای
برخی اهداف دیگر توسط این پارامتر ارائه شده است. مقدار پیش فرض از
پارامتر 2 است که حداقل تعداد رجیسترهای مورد نیاز معمولی است
دستورالعمل ها. این مقدار بهترین چیزی است که از آزمایش های متعدد بدست آمده است.
loop-invariant-max-bbs-in-loop
حرکت ثابت حلقه می تواند بسیار گران باشد، چه در زمان کامپایل و چه در زمان
مقدار حافظه کامپایل زمان مورد نیاز، با حلقه های بسیار بزرگ. حلقه با بیشتر
بلوک های اصلی از این پارامتر، بهینه سازی حرکت ثابت حلقه را نخواهند داشت
روی آنها اجرا شد. مقدار پیش فرض پارامتر 1000 برای است -O1 و 10000
برای -O2 و بالاتر.
حلقه های حداکثر برای داده های
ایجاد وابستگی داده ها برای حلقه های بسیار بزرگ گران است. این پارامتر
تعداد ارجاع داده ها را در حلقه هایی که برای داده ها در نظر گرفته می شود، محدود می کند
تجزیه و تحلیل وابستگی این حلقه های بزرگ توسط بهینه سازی استفاده نمی شود
وابستگی های داده حلقه مقدار پیش فرض 1000 است.
max-vartrack-size
حداکثر تعداد اسلات جدول هش را برای استفاده در جریان داده ردیابی متغیر تنظیم می کند
تجزیه و تحلیل هر تابع اگر این محدودیت با ردیابی متغیر در
تکالیف فعال است، تجزیه و تحلیل برای آن تابع بدون آن، پس از آن دوباره امتحان می شود
حذف همه اشکالزداییها از تابع. اگر از حد تجاوز شود حتی بدون
اشکال زدایی insns، تجزیه و تحلیل ردیابی var برای عملکرد کاملاً غیرفعال است.
صفر کردن پارامتر آن را نامحدود می کند.
max-vartrack-expr-depth
هنگام تلاش برای نگاشت نام متغیرها، حداکثر تعداد سطوح بازگشتی را تنظیم می کند
اشکال زدایی موقت برای عبارات ارزش. این زمان کامپایل را با بیشتر معامله می کند
اطلاعات کامل اشکال زدایی اگر این خیلی کم تنظیم شده است، عباراتی را که هستند ارزش گذاری کنید
در دسترس است و می تواند در اطلاعات اشکال زدایی نمایش داده شود، ممکن است در نهایت استفاده نشود.
تنظیم این بالاتر ممکن است کامپایلر را قادر سازد تا اشکال زدایی پیچیده تری را پیدا کند
عبارات، اما زمان کامپایل و استفاده از حافظه ممکن است افزایش یابد. پیش فرض 12 است.
min-nondebug-insn-uid
از uid هایی که با این پارامتر شروع می شوند برای insns های nondebug استفاده کنید. محدوده زیر
پارامتر منحصراً برای اشکال زدایی insns ایجاد شده توسط
-fvar-ردیابی-تکالیف، اما insns های اشکال زدایی ممکن است Uid های (غیر همپوشانی) در بالا دریافت کنند
اگر محدوده رزرو شده تمام شود.
ipa-sra-ptr-factor-growth-factor
IPA-SRA تنها با یک یا چند پارامتر جدید یک اشاره گر به یک مجموعه را جایگزین می کند
زمانی که اندازه تجمعی آنها کمتر یا مساوی باشد ipa-sra-ptr-factor-growth-factor چند بار
اندازه پارامتر اشاره گر اصلی
tm-max-aggregate-size
هنگام ساخت کپی از متغیرهای thread-local در یک تراکنش، این پارامتر
اندازه را بر حسب بایت مشخص می کند که پس از آن متغیرها با ورود به سیستم ذخیره می شوند
توابع بر خلاف ذخیره/بازیابی جفت دنباله کد. فقط این گزینه
هنگام استفاده اعمال می شود -fgnu-tm.
graphite-max-nb-scop-params
برای جلوگیری از اثرات نمایی در تبدیل حلقه گرافیت، تعداد
پارامترها در بخش کنترل استاتیک (SCoP) محدود است. مقدار پیش فرض 10 است
مولفه های. متغیری که مقدار آن در زمان کامپایل ناشناخته و تعریف شده است
خارج از یک SCoP یک پارامتر از SCoP است.
graphite-max-bbs-per-function
برای جلوگیری از اثرات نمایی در تشخیص SCoP ها، اندازه توابع
تجزیه و تحلیل شده توسط گرافیت محدود است. مقدار پیش فرض 100 بلوک اصلی است.
حلقه-بلوک-کاشی-اندازه
مسدود کردن حلقه یا تبدیلهای استخراج نواری، فعال با -فلوپ بلوک or
-فلوپ-نوار-معدن، هر حلقه را در لانه حلقه با تعداد معینی از آن جدا کنید
تکرارها طول نوار را می توان با استفاده از حلقه-بلوک-کاشی-اندازه
پارامتر. مقدار پیش فرض 51 تکرار است.
IPA-CP-List-List
IPA-CP سعی می کند تمام مقادیر و انواع ممکن را که به یک تابع ارسال می شود ردیابی کند
پارامتر به منظور انتشار آنها و انجام مجازی سازی. ipa-cp-value-
اندازه فهرست حداکثر تعداد مقادیر و انواعی است که در هر فرمال ذخیره می کند
پارامتر یک تابع
ipa-cp-eval-threshold
IPA-CP امتیاز خود را از اکتشافات سودآوری شبیه سازی محاسبه می کند و انجام می دهد
آن فرصت های شبیه سازی با امتیازهای بیش از حد ipa-cp-eval-threshold.
ipa-max-agg-items
IPA-CP همچنین قادر به انتشار تعدادی از مقادیر اسکالر ارسال شده در یک است
تجمیع. ipa-max-agg-items حداکثر تعداد چنین مقادیری را در هر یک کنترل می کند
پارامتر.
ipa-cp-loop-hint-bonus
هنگامی که IPA-CP تعیین می کند که یک کاندید شبیه سازی می تواند تعداد آنها را ایجاد کند
تکرار یک حلقه شناخته شده، یک جایزه اضافه می کند ipa-cp-loop-hint-bonus پاداش به
امتیاز سودآوری نامزد
ipa-cp-array-index-hint-bonus
هنگامی که IPA-CP تعیین می کند که یک کاندید شبیه سازی می تواند شاخص یک آرایه را ایجاد کند
دسترسی شناخته شده، آن را اضافه می کند یک جایزه از ipa-cp-array-index-hint-bonus پاداش به
امتیاز سودآوری نامزد
پارتیشن های lto
تعداد دلخواه پارتیشن های تولید شده در طول کامپایل WHOPR را مشخص کنید. در
تعداد پارتیشن ها باید از تعداد CPU های استفاده شده برای کامپایل بیشتر باشد. در
مقدار پیش فرض 32 است.
lto-minpartition
اندازه حداقل پارتیشن برای WHOPR (در دستورالعمل های تخمینی). این مانع می شود
هزینه های تقسیم برنامه های بسیار کوچک به پارتیشن های بسیار زیاد.
cxx-max-namespaces-for-diagnostic-help
حداکثر تعداد فضاهای نامی که باید هنگام جستجوی نام C++ برای پیشنهادات مشورت کنید
برای یک شناسه ناموفق است. پیش فرض 1000 است.
سینک-فرکانس-آستانه
حداکثر فرکانس اجرای نسبی (بر حسب درصد) بلوک هدف
نسبت به بلوک اصلی یک دستور تا اجازه غرق شدن دستور a را بدهد
بیانیه. اعداد بزرگتر منجر به غرق شدن بیانیه تهاجمی تر می شود. در
مقدار پیش فرض 75 است. یک تعدیل مثبت کوچک برای عبارات با اعمال می شود
عملگرهای حافظه که حتی سودآورتر هستند بنابراین غرق شوید.
حداکثر ذخیره به سینک
حداکثر تعداد جفت فروشگاه های مشروط که می توانند غرق شوند. اگر 0 را تنظیم کنید
یا برداری (-ftree-vectorize) یا تبدیل اگر (-ftree-loop-if-convert)
از کار افتاده است. پیش فرض 2 است.
اجازه-بار-داده-مسابقه
به بهینهسازها اجازه دهید مسابقههای داده جدیدی را روی بارها معرفی کنند. برای اجازه دادن روی 1 تنظیم کنید،
در غیر این صورت به 0. این گزینه به طور پیش فرض فعال است مگر اینکه به طور ضمنی توسط
-fmemory-model= گزینه.
اجازه-ذخیره-مسابقه داده
به بهینهسازها اجازه دهید مسابقههای داده جدید را در فروشگاهها معرفی کنند. برای اجازه دادن روی 1 تنظیم کنید،
در غیر این صورت به 0. این گزینه به طور پیش فرض فعال است مگر اینکه به طور ضمنی توسط
-fmemory-model= گزینه.
اجازه می دهد-بسته-بار-داده-مسابقه
به بهینهسازان اجازه دهید تا دادههای جدیدی را در بارهای دادههای بستهشده معرفی کنند. روی 1 تا تنظیم کنید
اجازه، در غیر این صورت به 0. این گزینه به طور پیش فرض فعال است مگر اینکه به طور ضمنی توسط تنظیم شده باشد
la -fmemory-model= گزینه.
مسابقات دادههای ذخیرهشده مجاز
به بهینهسازها اجازه دهید مسابقههای داده جدید را در فروشگاههای دادههای بستهبندی شده معرفی کنند. روی 1 تا تنظیم کنید
اجازه، در غیر این صورت به 0. این گزینه به طور پیش فرض فعال است مگر اینکه به طور ضمنی توسط تنظیم شده باشد
la -fmemory-model= گزینه.
مورد-مقدار-آستانه
کمترین تعداد مقادیر مختلف که برای آنها بهتر است از جدول پرش استفاده شود
به جای درختی از شاخه های مشروط اگر مقدار 0 است، از پیش فرض برای استفاده کنید
ماشین. پیش فرض 0 است.
tree-reassoc-width
حداکثر تعداد دستورات اجرا شده به صورت موازی را در درخت مرتبط تنظیم کنید.
این پارامتر اکتشافی وابسته به هدف را که به طور پیشفرض مورد استفاده قرار میگیرد، در صورتی که فاقد آن باشد، لغو میکند
مقدار صفر
الگوریتم sched-pressure
بین دو پیاده سازی موجود از را انتخاب کنید -fsched-pressure. الگوریتم 1
پیاده سازی اصلی است و به احتمال زیاد از دستورالعمل ها جلوگیری می کند
در حال سفارش مجدد الگوریتم 2 برای سازش بین
رویکرد نسبتا محافظه کارانه الگوریتم 1 و نسبتاً تهاجمی اتخاذ شده است
رویکرد اتخاذ شده توسط زمانبندی پیش فرض. بیشتر به داشتن یک متکی است
فایل رجیستر معمولی و کلاس های فشار رجیستر دقیق. دیدن haifa-sched.c
در منابع GCC برای جزئیات بیشتر.
انتخاب پیش فرض بستگی به هدف دارد.
max-slsr-cand-scan
حداکثر تعداد نامزدهای موجود را که هنگام جستجو در نظر گرفته می شوند، تنظیم کنید
مبنایی برای کاندیدای جدید کاهش قدرت خط مستقیم.
asan-globals
فعال کردن تشخیص سرریز بافر برای اشیاء سراسری. این نوع حفاظت است
در صورت استفاده به طور پیش فرض فعال است -fsanitize=آدرس گزینه. برای غیرفعال کردن جهانی
استفاده از حفاظت از اشیاء --پارام asan-globals = 0.
asan-stack
فعال کردن تشخیص سرریز بافر برای اشیاء پشته. این نوع حفاظت است
هنگام استفاده به طور پیش فرض فعال می شود-fsanitize=آدرس. برای غیرفعال کردن استفاده از حفاظت پشته
--پارام asan-stack=0 گزینه.
asan-instrust-reads
شناسایی سرریز بافر را برای خواندن حافظه فعال کنید. این نوع حفاظت است
هنگام استفاده به طور پیش فرض فعال می شود -fsanitize=آدرس. برای غیرفعال کردن حافظه خواندن
استفاده حفاظتی --پارام asan-instrument-reads=0.
asan-instrument-نوشته
فعال کردن تشخیص سرریز بافر برای نوشتن حافظه. این نوع حفاظت است
هنگام استفاده به طور پیش فرض فعال می شود -fsanitize=آدرس. برای غیر فعال کردن حافظه می نویسد
استفاده حفاظتی --پارام asan-instrument-writes=0 گزینه.
asan-memintrin
فعال کردن تشخیص برای توابع داخلی. این نوع حفاظت توسط فعال می شود
پیش فرض هنگام استفاده -fsanitize=آدرس. برای غیرفعال کردن محافظت از عملکردهای داخلی
استفاده کنید --پارام Asan-Memintrin = 0.
آسان-استفاده-پس از بازگشت
فعال کردن تشخیص استفاده پس از بازگشت. این نوع حفاظت توسط فعال می شود
پیش فرض هنگام استفاده -fsanitize=آدرس گزینه. برای غیرفعال کردن استفاده پس از بازگشت
استفاده تشخیص --پارام asan-use-after-return = 0.
با آستانه کالی
اگر تعداد دسترسیهای حافظه در تابع مورد استفاده بیشتر یا مساوی باشد
این شماره، به جای چک های درون خطی، از تماس های برگشتی استفاده کنید. به عنوان مثال برای غیرفعال کردن کد درون خطی
استفاده کنید --پارام asan-instrumentation-with-call-threshold=0.
گزینه کنترل la پیش پردازنده
این گزینهها پیشپردازنده C را کنترل میکنند که روی هر فایل منبع C قبل از واقعی اجرا میشود
تلفیقی.
اگر از شما استفاده می کنید -E گزینه، هیچ کاری به جز پیش پردازش انجام نمی شود. برخی از این گزینه ها
فقط همراه با معنا پیدا کند -E زیرا باعث می شوند خروجی پیش پردازنده باشد
نامناسب برای تدوین واقعی
-Wp،انتخاب
شما می توانید -Wp،انتخاب برای دور زدن درایور کامپایلر و عبور انتخاب به طور مستقیم از طریق
به پیش پردازنده اگر انتخاب حاوی کاما است، به چندین گزینه تقسیم می شود
ویرگول با این حال، بسیاری از گزینه ها اصلاح، ترجمه یا تفسیر می شوند
درایور کامپایلر قبل از انتقال به پیش پردازنده و -Wp به زور دور می زند
این فاز رابط مستقیم پیش پردازنده غیرمستند و مشمول است
تغییر دهید، بنابراین در صورت امکان باید از استفاده خودداری کنید -Wp و اجازه دهید راننده آن را مدیریت کند
در عوض گزینه ها
-Xpreprocessor انتخاب
عبور انتخاب به عنوان گزینه ای برای پیش پردازنده شما می توانید از این برای تامین سیستم استفاده کنید
گزینه های پیش پردازنده خاصی که GCC آنها را نمی شناسد.
اگر می خواهید گزینه ای را ارسال کنید که آرگومان می گیرد، باید از آن استفاده کنید -Xpreprocessor
دو بار، یک بار برای گزینه و یک بار برای استدلال.
-no-integrated-cpp
قبل از کامپایل، پیش پردازش را به عنوان یک پاس جداگانه انجام دهید. به طور پیش فرض، GCC انجام می دهد
پیش پردازش به عنوان بخشی یکپارچه از نشانه گذاری و تجزیه ورودی. اگر این گزینه
ارائه شده است، جلوی زبان مناسب (cc1, cc1plus، یا cc1obj برای C، C++،
و Objective-C به ترتیب) در عوض دو بار فراخوانی می شود، یک بار فقط برای پیش پردازش
و یک بار برای کامپایل واقعی ورودی از پیش پردازش شده. این گزینه ممکن است مفید باشد
در رابطه با -B or لفاف گزینه هایی برای تعیین پیش پردازنده جایگزین یا
انجام پردازش اضافی از منبع برنامه بین پیش پردازش عادی و
تلفیقی.
-D نام
از پیش تعریف کنید نام به عنوان یک کلان، با تعریف 1.
-D نام=تعریف
محتویات تعریف نشانه گذاری می شوند و طوری پردازش می شوند که گویی در طی آن ظاهر شده اند
ترجمه فاز سه در الف #تعريف كردن بخشنامه به طور خاص، تعریف خواهد بود
توسط کاراکترهای جدید جاسازی شده کوتاه شده است.
اگر پیش پردازنده را از یک برنامه پوسته یا پوسته مانند فراخوانی می کنید، ممکن است نیاز داشته باشید
برای استفاده از نحو نقل قول پوسته برای محافظت از کاراکترهایی مانند فضاهایی که دارای a
معنی در نحو پوسته.
اگر می خواهید یک ماکرو تابع مانند در خط فرمان تعریف کنید، آرگومان آن را بنویسید
لیست با پرانتزهای اطراف قبل از علامت مساوی (در صورت وجود). پرانتز هستند
برای اکثر پوسته ها معنی دار است، بنابراین باید گزینه را نقل قول کنید. با sh و csh,
-دنام(ارگ...)=تعریف' کار می کند.
-D و -U گزینه ها به ترتیبی که در خط فرمان داده شده اند پردازش می شوند. همه
-ایماکرو پرونده و -عبارتند از پرونده پس از همه، گزینه ها پردازش می شوند -D و -U گزینه.
-U نام
هر گونه تعریف قبلی را لغو کنید نام، یا ساخته شده یا با یک -D گزینه.
-دف
ماکروهای خاص سیستم یا GCC را از پیش تعریف نکنید. استاندارد از پیش تعریف شده
ماکروها تعریف شده باقی می مانند.
-I دیر
دایرکتوری را اضافه کنید دیر به لیست دایرکتوری هایی که باید برای فایل های سرصفحه جستجو شوند.
فهرست راهنماهای نامگذاری شده توسط -I قبل از اینکه سیستم استاندارد شامل دایرکتوری ها باشد جستجو می شوند.
اگر دایرکتوری دیر یک سیستم استاندارد شامل دایرکتوری است، گزینه نادیده گرفته می شود
اطمینان حاصل کنید که ترتیب جستجوی پیشفرض برای فهرستهای سیستم و رفتار ویژه
هدرهای سیستم شکست نمی خورد. اگر دیر با "="" شروع می شود، سپس "=" خواهد بود
با پیشوند sysroot جایگزین شده است. دیدن --sysroot و -isysroot.
-o پرونده
خروجی را بنویسید پرونده. این همان مشخص کردن است پرونده به عنوان دومین غیر گزینه
استدلال به cpp. gcc تفسیر متفاوتی از آرگومان غیر گزینه دوم دارد،
پس باید استفاده کنید -o برای تعیین فایل خروجی
-دیو
همه اخطارهای اختیاری را که برای کد معمولی مطلوب هستند روشن می کند. در حال حاضر این
is -کامنت کنید, Wtrigraphs, -Wmultichar و یک هشدار در مورد ارتقاء عدد صحیح که باعث a
تغییر علامت در عبارات "#if". توجه داشته باشید که بسیاری از هشدارهای پیش پردازنده
به طور پیش فرض روشن هستند و هیچ گزینه ای برای کنترل آنها ندارند.
-کامنت کنید
-نظرات
هر زمان که یک دنباله شروع نظر اخطار کنید /* ظاهر می شود در a /* نظر دهید، یا هر زمان که الف
بک اسلش-newline در یک ظاهر می شود // اظهار نظر. (هر دو شکل اثر یکسانی دارند.)
Wtrigraphs
اکثر سه نمودارها در نظرات نمی توانند بر معنای برنامه تأثیر بگذارند. با این حال، الف
سه گراف که یک خط جدید فرار تشکیل می دهد (??/ در انتهای یک خط) می تواند، توسط
تغییر نقطه شروع یا پایان نظر بنابراین، فقط سه نمودارهایی که تشکیل می شوند
خطوط جدید فراری هشدارهایی را در داخل یک نظر ایجاد می کنند.
این گزینه توسط -دیو. اگر -دیو داده نشده است، این گزینه همچنان فعال است
مگر اینکه سه نمودارها فعال باشند. برای دریافت تبدیل تریگراف بدون هشدار، اما دریافت کنید
دیگر -دیو هشدارها، استفاده کنید سه نمودارها -دیو Wno-trigraphs.
-غیر سنتی
در مورد ساختارهای خاصی که در سنتی و ISO C رفتار متفاوتی دارند هشدار دهید
در مورد ساختارهای ISO C که معادل C سنتی ندارند و مشکل ساز هستند هشدار دهید
سازه هایی که باید از آنها اجتناب کرد.
-وندف
هر زمان که یک شناسه که ماکرو نیست در یک مواجه شد هشدار دهید #اگر بخشنامه،
خارج از مشخص. چنین شناسه هایی با صفر جایگزین می شوند.
Wunused-macros
در مورد ماکروهای تعریف شده در فایل اصلی که استفاده نشده اند هشدار دهید. یک ماکرو است استفاده اگر هست
حداقل یک بار گسترش یافته یا برای وجود آزمایش شده است. پیش پردازنده همچنین هشدار می دهد اگر
ماکرو در زمان تعریف مجدد یا تعریف نشده استفاده نشده است.
ماکروهای داخلی، ماکروهای تعریف شده در خط فرمان و ماکروهای تعریف شده در شامل
فایل ها در مورد آنها هشدار داده نمی شود.
توجه داشته باشید: اگر واقعاً از یک ماکرو استفاده می شود، اما فقط در بلوک های شرطی نادیده گرفته شده استفاده می شود، پس
CPP آن را به عنوان استفاده نشده گزارش خواهد کرد. برای جلوگیری از هشدار در چنین مواردی، ممکن است بهبود پیدا کنید
محدوده تعریف ماکرو، برای مثال، با انتقال آن به اولین مورد پرش
مسدود کردن. از طرف دیگر، می توانید یک استفاده ساختگی با چیزی شبیه به:
#اگر_کلان_علت_هشدار تعریف شده است
# اندیف
برچسب های Wendif
هر زمان که # دیگر و یا # اندیف با متن دنبال می شوند. این معمولا در
کد فرم
#اگر FOO
...
#دیگر FOO
...
#NDIF FOO
دوم و سوم "FOO" باید در نظرات باشد، اما اغلب در برنامه های قدیمی تر نیستند.
این هشدار به طور پیش فرض روشن است.
-خطا
همه هشدارها را به خطاهای سخت تبدیل کنید. کد منبعی که باعث ایجاد هشدار می شود خواهد بود
رد شد
Wsystem-headers
اخطارهایی را برای کد در هدرهای سیستم صادر کنید. اینها معمولاً برای یافتن مفید نیستند
اشکالات در کد شما، بنابراین سرکوب شده است. اگر شما مسئول سیستم هستید
کتابخانه، ممکن است بخواهید آنها را ببینید.
-w تمام هشدارها، از جمله هشدارهایی که GNU CPP به طور پیش فرض صادر می کند، سرکوب کنید.
-پدانتیک
همه تشخیص های اجباری مندرج در استاندارد C را صادر کنید. برخی از آنها باقی مانده است
به طور پیشفرض خارج میشوند، زیرا اغلب روی کدهای بیضرر فعال میشوند.
-اشتباهات
همه تشخیص های اجباری را صادر کنید و همه تشخیص های اجباری را به خطا تبدیل کنید.
این شامل تشخیص های اجباری است که GCC بدون آن صادر می کند -پدانتیک اما به عنوان رفتار می کند
هشدارها
-M به جای خروجی گرفتن نتیجه پیش پردازش، یک قانون مناسب برای خروجی ارائه دهید ساخت
شرح وابستگی های فایل منبع اصلی. پیش پردازنده یک خروجی می دهد
ساخت قانون حاوی نام فایل شی برای آن فایل منبع، یک دونقطه و نام ها
از همه فایلهای موجود، از جمله فایلهایی که از آنها میآیند -عبارتند از or -ایماکرو فرمان
گزینه های خط
مگر اینکه به صراحت مشخص شده باشد (با -MT or -MQ)، نام فایل شی از عبارت تشکیل شده است
نام فایل مبدأ با هر پسوندی جایگزین پسوند فایل شی و با هر
قطعات دایرکتوری اصلی حذف شدند. اگر تعداد زیادی فایل گنجانده شده باشد، قانون این است
تقسیم به چند خط با استفاده از \-خط جدید. قانون هیچ فرمانی ندارد.
این گزینه خروجی اشکال زدایی پیش پردازنده را سرکوب نمی کند، مانند -dM. برای جلوگیری
مخلوط کردن چنین خروجی اشکال زدایی با قوانین وابستگی، باید به صراحت آن را مشخص کنید
فایل خروجی وابستگی با -MF، یا از یک متغیر محیطی مانند استفاده کنید
DEPENDENCIES_OUTPUT. خروجی اشکال زدایی همچنان به جریان خروجی معمولی ارسال می شود
طبیعی است.
عبور -M به راننده اشاره می کند -E، و هشدارها را به طور ضمنی سرکوب می کند -w.
-مامان پسندیدن -M اما به فایلهای هدری که در فهرستهای هدر سیستم یافت میشوند اشاره نکنید،
و نه فایلهای سرصفحهای که بهطور مستقیم یا غیرمستقیم از چنین هدری گنجانده شدهاند.
این به این معنی است که انتخاب براکت های زاویه یا دو نقل قول در یک #include
دستورالعمل به خودی خود تعیین نمی کند که آیا آن هدر در ظاهر می شود یا خیر -مامان
خروجی وابستگی این یک تغییر جزئی در معناشناسی از GCC نسخه 3.0 و
قبلا
-MF پرونده
هنگامی که با استفاده می شود -M or -مامان، فایلی را برای نوشتن وابستگی ها مشخص می کند. اگر نه -MF
سوئیچ داده می شود که پیش پردازنده قوانین را به همان جایی که می فرستاد می فرستد
خروجی از پیش پردازش شده
هنگامی که با گزینه های درایور استفاده می شود -MD or -MMD, -MF وابستگی پیش فرض را لغو می کند
فایل خروجی.
-MG در ارتباط با گزینه ای مانند -M درخواست تولید وابستگی، -MG فرض می کند
فایلهای هدر از دست رفته فایلهایی تولید میشوند و بدون آنها را به لیست وابستگی اضافه میکنند
بالا بردن یک خطا نام فایل وابستگی مستقیماً از "#include" گرفته شده است.
دستورالعمل بدون پیش بینی هیچ مسیری. -MG همچنین خروجی از پیش پردازش شده را سرکوب می کند
فایل هدر از دست رفته این را بی فایده می کند.
این ویژگی در به روز رسانی خودکار فایل های make-files استفاده می شود.
-نماینده مجلس این گزینه به CPP دستور می دهد تا برای هر وابستگی به غیر از آن یک هدف ساختگی اضافه کند
فایل اصلی، که باعث می شود هر کدام به هیچ چیز وابسته نشوند. این قوانین ساختگی روی خطاها کار می کنند
ساخت می دهد اگر شما فایل های هدر را بدون به روز رسانی حذف کنید 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 گزینه داده شده است. اگر اینطور باشد، درایور از آن استفاده می کند
آرگومان اما با پسوند .d، در غیر این صورت نام فایل ورودی را می گیرد،
هر جزء و پسوند دایرکتوری را حذف می کند و a را اعمال می کند .d پسوند.
If -MD همراه با استفاده می شود -E، هرکسی -o سوئیچ برای مشخص کردن
فایل خروجی وابستگی، اما اگر بدون استفاده شود -E، هر یک -o برای مشخص کردن a درک می شود
فایل شی هدف
پس از -E ضمنی نیست، -MD می توان از آن برای تولید یک فایل خروجی وابستگی به صورت a استفاده کرد
عوارض جانبی فرآیند کامپایل
-MMD
پسندیدن -MD به جز ذکر فقط فایل های هدر کاربر، نه فایل های هدر سیستم.
-FPCH-DEPS
هنگام استفاده از هدرهای از پیش کامپایل شده، این پرچم باعث می شود که پرچم های وابستگی-خروجی به آن تبدیل شوند
همچنین فایل ها را از وابستگی های هدر از پیش کامپایل شده لیست کنید. اگر فقط مشخص نشده باشد
هدر از پیش کامپایل شده لیست می شود و نه فایل هایی که برای ایجاد آن استفاده شده اند
زیرا هنگام استفاده از هدر از پیش کامپایل شده، از آن فایل ها استفاده نمی شود.
-fpch-پیش پردازش
این گزینه اجازه می دهد تا از یک هدر از پیش کامپایل شده همراه با -E. خاصی را درج می کند
"#pragma"، "#pragma GCC pch_preprocess"نام فایل"" در خروجی برای علامت گذاری مکان
جایی که هدر از پیش کامپایل شده یافت شد و آن نام فایلاست. وقتی که -پیش پردازش شده هست در
استفاده کنید، GCC این "#pragma" را تشخیص داده و PCH را بارگیری می کند.
این گزینه بهطور پیشفرض خاموش است، زیرا تنها خروجی از پیش پردازش شده به دست آمده است
واقعاً به عنوان ورودی GCC مناسب است. توسط آن روشن می شود -Save- Temps.
شما نباید این "#pragma" را در کد خود بنویسید، اما ویرایش آن امن است
نام فایل اگر فایل PCH در مکان دیگری در دسترس باشد. نام فایل ممکن است باشد
مطلق یا ممکن است نسبت به فهرست فعلی GCC باشد.
-x c
-x c ++
-x هدف-ج
-x اسمبلر-با-cpp
زبان مبدأ را مشخص کنید: C، C++، Objective-C، یا اسمبلی. این ربطی نداره
با انطباق با استانداردها یا الحاقات؛ صرفاً دستور پایه را انتخاب می کند
انتظار. اگر هیچ یک از این گزینه ها را ندهید، cpp زبان را از روی استنتاج می کند
پسوند فایل منبع: .c, . رونوشت, .m، یا .S. برخی از پسوندهای رایج دیگر برای
C++ و اسمبلی نیز شناخته شده است. اگر cpp پسوند را نشناسد، آن را
با فایل به صورت C رفتار می کند. این عمومی ترین حالت است.
توجه داشته باشید: نسخههای قبلی cpp a -زمانی گزینه ای که هر دو را انتخاب کرد
زبان و سطح انطباق استانداردها این گزینه حذف شده است، زیرا
با -l گزینه.
-std=استاندارد
-ansi
استانداردی را که کد باید با آن مطابقت داشته باشد را مشخص کنید. در حال حاضر CPP در مورد C می داند
و استانداردهای C++; سایرین ممکن است در آینده اضافه شوند.
استاندارد ممکن است یکی از:
"c90"
"c89"
"iso9899:1990"
استاندارد ISO C از سال 1990. c90 مخفف مرسوم این نسخه است
استاندارد.
La -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 به همراه پسوندهای گنو. این پیش فرض است.
"gnu99"
"gnu9x"
استاندارد C 1999 به همراه پسوندهای گنو.
"gnu11"
"gnu1x"
استاندارد C 2011 به همراه پسوندهای گنو.
"c++98"
استاندارد ISO C++ 1998 به همراه اصلاحات.
"gnu++98"
همان -std = C ++ 98 به علاوه پسوندهای گنو این کد پیش فرض برای C++ است.
-من- مسیر شامل را تقسیم کنید. هر دایرکتوری مشخص شده با -I گزینه های قبل -من- هستند
فقط برای سرصفحه های درخواست شده با "#include" جستجو شدفایل""; آنها جستجو نمی شوند
"#عبارتند ازفایل>". اگر دایرکتوری های اضافی با -I گزینه های بعد از
-من-، آن دایرکتوری ها برای همه جستجو می شوند #include دستورالعمل.
علاوه بر این، -من- مانع استفاده از دایرکتوری دایرکتوری فایل فعلی به عنوان
اولین فهرست جستجو برای "#include"فایل"". این گزینه منسوخ شده است.
-nostdinc
در فهرست های استاندارد سیستم برای فایل های هدر جستجو نکنید. فقط دایرکتوری ها
شما مشخص کرده اید با -I گزینه ها (و دایرکتوری فایل فعلی، اگر
مناسب) جستجو می شوند.
-nostdinc++
فایل های هدر را در دایرکتوری های استاندارد خاص C++ جستجو نکنید، اما همچنان انجام دهید
سایر دایرکتوری های استاندارد را جستجو کنید. (این گزینه هنگام ساخت ++C استفاده می شود
کتابخانه.)
-عبارتند از پرونده
روند پرونده مثل اینکه "#include "file"" به عنوان اولین خط منبع اصلی ظاهر شد
فایل. با این حال، اولین دایرکتوری جستجو شد پرونده پیش پردازنده کار می کند
فهرست راهنما در عوض of دایرکتوری حاوی فایل منبع اصلی اگر پیدا نشد
در آنجا، در بقیه زنجیره جستجوی "#include "..." به عنوان جستجو می شود
طبیعی است.
اگر چندتایی باشد -عبارتند از گزینه های داده شده است، فایل ها به ترتیب آنها گنجانده شده است
در خط فرمان ظاهر شود.
-ایماکرو پرونده
دقیقا شبیه -عبارتند از، با این تفاوت که هر خروجی با اسکن تولید می شود پرونده پرتاب می شود
دور. ماکروهایی که تعریف می کند همچنان تعریف شده باقی می مانند. این به شما امکان می دهد تمام ماکروها را بدست آورید
از یک هدر بدون پردازش اعلان های آن.
تمام فایل های مشخص شده توسط -ایماکرو قبل از تمام فایل های مشخص شده توسط پردازش می شوند -عبارتند از.
-idirafter دیر
جستجو دیر برای فایل های هدر، اما این کار را انجام دهید بعد از همه دایرکتوری های مشخص شده با -I و
فهرست های استاندارد سیستم تمام شده اند. دیر به عنوان یک سیستم شامل
فهرست راهنما. اگر دیر با "="" شروع می شود، سپس "=" با sysroot جایگزین می شود
پیشوند؛ دیدن --sysroot و -isysroot.
-پیوند پیشوند
مشخص کردن پیشوند به عنوان پیشوند بعدی -ithprefix گزینه ها. اگر پیشوند
نشان دهنده یک دایرکتوری است، شما باید فینال را وارد کنید /.
-ithprefix دیر
-IwwithPrefixBefore دیر
ضمیمه کردن دیر به پیشوند مشخص شده قبلا با -پیوند، و حاصل را اضافه کنید
دایرکتوری به مسیر جستجو شامل. -IwwithPrefixBefore آن را در همان مکان قرار می دهد -I
خواهد شد -ithprefix آن را در جایی قرار می دهد -idirafter می توانست
-isysroot دیر
این گزینه مانند --sysroot گزینه ای است، اما فقط برای فایل های هدر (به جز برای
داروین را هدف می گیرد، جایی که هم برای فایل های هدر و هم برای کتابخانه ها اعمال می شود). را ببینید
--sysroot گزینه برای اطلاعات بیشتر
-imultilib دیر
استفاده کنید دیر به عنوان زیر شاخه ای از دایرکتوری حاوی سرصفحه های C++ خاص هدف.
-سیستم دیر
جستجو دیر برای فایل های هدر، بعد از همه دایرکتوری های مشخص شده توسط -I اما قبل از
دایرکتوری های سیستم استاندارد آن را به عنوان یک دایرکتوری سیستم علامت گذاری کنید، به طوری که یکسان شود
رفتار ویژه ای که برای فهرست های سیستم استاندارد اعمال می شود. اگر دیر آغاز می شود
با "="، سپس "=" با پیشوند sysroot جایگزین می شود. دیدن --sysroot و
-isysroot.
-نقل دادن دیر
جستجو دیر فقط برای فایل های هدر درخواست شده با "#include"فایل""; آنها نیستند
"#includeفایل>"، قبل از همه دایرکتوری های مشخص شده توسط -I و قبل از
دایرکتوری های سیستم استاندارد اگر دیر با "="" شروع می شود، سپس "="" جایگزین می شود
پیشوند sysroot؛ دیدن --sysroot و -isysroot.
fdirectives-only
هنگام پیش پردازش، دستورالعمل ها را مدیریت کنید، اما ماکروها را گسترش ندهید.
رفتار گزینه بستگی به -E و -پیش پردازش شده گزینه.
با -E، پیش پردازش محدود به رسیدگی به دستورالعمل هایی مانند "#define" است.
"#ifdef" و "#error". سایر عملیات پیش پردازنده، مانند توسعه ماکرو و
تبدیل سه گراف انجام نمی شود. علاوه بر این -DD گزینه به طور ضمنی است
فعال شده است
با -پیش پردازش شده، از پیش تعریف خط فرمان و اکثر ماکروهای داخلی می باشد
معلول. ماکروهایی مانند "__LINE__" که به بافت وابسته هستند، مدیریت می شوند
به طور معمول این امکان کامپایل فایلهایی را فراهم میکند که قبلاً با «-E» از پیش پردازش شدهاند
-fdirectives-only".
با هر دو -E و -پیش پردازش شده، قوانین برای -پیش پردازش شده اولویت داشته باشد. این
پیش پردازش کامل فایل هایی را که قبلاً با "-E" از پیش پردازش شده اند، فعال می کند
-fdirectives-only".
-فرالورها در شناسایی کننده ها
پذیرفتن $ در شناسه ها
-fextended-identifiers
نام کاراکترهای جهانی را در شناسه ها بپذیرید. این گزینه آزمایشی است. در یک
نسخه آینده GCC، به طور پیش فرض برای C99 و C++ فعال خواهد شد.
-Fno-canonical-system-headers
هنگام پیش پردازش، مسیرهای هدر سیستم را با متعارف سازی کوتاه نکنید.
-پیش پردازش شده
به پیش پردازنده نشان دهید که فایل ورودی قبلاً پردازش شده است. این
مواردی مانند بسط ماکرو، تبدیل سه گراف، اتصال خط جدید فرار شده را سرکوب می کند،
و پردازش بیشتر دستورالعمل ها. پیش پردازنده هنوز تشخیص می دهد و حذف می کند
نظرات، به طوری که شما می توانید یک فایل از پیش پردازش شده با ارسال کنید -C به کامپایلر بدون
چالش ها و مسائل. در این حالت، پیش پردازنده یکپارچه کمی بیشتر از یک توکنایزر است
برای قسمت های جلویی
-پیش پردازش شده اگر فایل ورودی دارای یکی از پسوندها باشد، ضمنی است .i, .ii or .mi.
اینها پسوندهایی هستند که GCC برای فایل های از پیش پردازش شده ایجاد شده توسط آنها استفاده می کند -Save- Temps.
-ftabstop =عرض
فاصله بین ایستگاه های تب را تنظیم کنید. این به پیش پردازنده کمک می کند تا ستون صحیح را گزارش دهد
اعداد در اخطارها یا خطاها، حتی اگر برگه ها در خط ظاهر شوند. اگر مقدار کمتر باشد
از 1 یا بیشتر از 100، گزینه نادیده گرفته می شود. پیش فرض 8 است.
-fdebug-cpp
این گزینه فقط برای اشکال زدایی GCC مفید است. هنگام استفاده با -E، اشکال زدایی را تخلیه می کند
اطلاعات در مورد نقشه های مکان قبل از هر نشانه در خروجی، dump of قرار می گیرد
نقشه ای که موقعیت آن به آن تعلق دارد. روگرفت نقشه که محل یک نشانه را در خود جای داده است
خواهد بود:
{"P":F ;"F":F ;"L": ;"C": ;"S": ;"م": ;"E": "محل": }
هنگام استفاده بدون -E، این گزینه هیچ تاثیری ندارد.
-افتراک-کلان-گسترش[=سطح]
ردیابی مکان نشانهها در میان بسطهای کلان. این به کامپایلر امکان انتشار می دهد
تشخیصی در مورد پشته گسترش ماکرو فعلی هنگامی که یک خطای کامپایل در آن رخ می دهد
یک گسترش کلان استفاده از این گزینه باعث مصرف پیش پردازنده و کامپایلر می شود
حافظه بیشتر را سطح پارامتر را می توان برای انتخاب سطح دقت نشانه استفاده کرد
ردیابی مکان بنابراین در صورت لزوم مصرف حافظه را کاهش می دهد. ارزش 0 of
سطح این گزینه را غیرفعال می کند مثل اینکه خیر -افتراک-کلان-گسترش حضور داشت در
خط فرمان ارزش 1 بهخاطر این، مکانهای نشانهها را در حالت تنزل ردیابی میکند
حداقل سربار حافظه در این حالت تمام نشانه های حاصل از گسترش یک
آرگومان یک ماکرو تابع مانند مکان یکسانی دارد. ارزش 2 توکن ها را ردیابی می کند
مکان ها به طور کامل این مقدار بیشترین حافظه را تشنه می کند. وقتی این گزینه داده می شود
بدون آرگومان، مقدار پارامتر پیش فرض است 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 است. این میتواند باشد
توسط گزینه محلی یا این خط فرمان لغو می شود. در حال حاضر فرمان
در صورت وجود تضاد، گزینه line اولویت دارد. کاراکتر می تواند هر کدگذاری باشد
توسط روال کتابخانه "iconv" سیستم پشتیبانی می شود.
دایرکتوری fworking
تولید خط نشانگرها را در خروجی پیش پردازنده فعال کنید که به کامپایلر اجازه می دهد
دایرکتوری کاری فعلی را در زمان پیش پردازش بدانید. وقتی این گزینه است
فعال شود، پیش پردازنده پس از نشانگر خط اولیه، نشانگر خط دوم را منتشر می کند
با دایرکتوری کاری فعلی که با دو اسلش همراه است. GCC از این استفاده خواهد کرد
دایرکتوری، زمانی که در ورودی از پیش پردازش شده وجود دارد، به عنوان دایرکتوری که به عنوان ساطع می شود
دایرکتوری فعلی در برخی از فرمت های اطلاعات اشکال زدایی. این گزینه است
اگر اطلاعات اشکال زدایی فعال باشد، به طور ضمنی فعال می شود، اما می توان از این کار جلوگیری کرد
شکل نفی -fno-working-directory. اگر -P پرچم در دستور وجود دارد
خط، این گزینه هیچ تاثیری ندارد، زیرا هیچ دستورالعمل "#line" منتشر نمی شود.
-fno-show-column
شماره ستون ها را در عیب یابی چاپ نکنید. در صورت انجام تشخیص، این ممکن است ضروری باشد
اسکن شدن توسط برنامه ای که اعداد ستون ها را نمی فهمد، مانند
دژاگنو.
-A گزاره=پاسخ
با محمول ادعا کنید گزاره و پاسخ پاسخ. این فرم است
به شکل قدیمی تر ترجیح داده می شود -A گزاره(پاسخ)، که هنوز هم پشتیبانی می شود، زیرا
از کاراکترهای خاص پوسته استفاده نمی کند.
-A -گزاره=پاسخ
یک ادعا با محمول را لغو کنید گزاره و پاسخ پاسخ.
-dCHARS
کاراکترها دنباله ای از یک یا چند کاراکتر زیر است و نباید باشد
قبل از یک فاصله کاراکترهای دیگر توسط کامپایلر مناسب تفسیر می شوند
برای نسخههای آینده GCC محفوظ است، و بنابراین بیصدا نادیده گرفته میشوند. اگر مشخص کنید
شخصیت هایی که رفتارشان در تضاد است، نتیجه تعریف نشده است.
M به جای خروجی معمولی، فهرستی از #تعريف كردن بخشنامه برای همه
ماکروهای تعریف شده در طول اجرای پیش پردازنده، از جمله از پیش تعریف شده
ماکروها این به شما راهی می دهد تا بفهمید چه چیزی در نسخه شما از پیش تعریف شده است
پیش پردازنده با فرض اینکه فایلی ندارید foo.h، دستور
لمس foo.h; cpp -dM foo.h
تمام ماکروهای از پیش تعریف شده را نشان می دهد.
در صورت استفاده از -dM بدون -E گزینه، -dM به عنوان مترادف برای
-fdump-rtl-mach.
D پسندیدن M جز از دو جهت: انجام می دهد نه شامل ماکروهای از پیش تعریف شده و آن می شود
خروجی هر دو la #تعريف كردن دستورالعمل ها و نتیجه پیش پردازش هر دو نوع
خروجی به فایل خروجی استاندارد بروید.
N پسندیدن D، اما فقط نام های کلان را منتشر می کنند، نه بسط آنها.
I تولید #include دستورالعمل ها علاوه بر نتیجه پیش پردازش.
U پسندیدن D به جز اینکه فقط ماکروهایی که بسط می یابند یا تعریف آنها آزمایش می شود
در دستورالعمل های پیش پردازنده، خروجی هستند. خروجی تا زمان استفاده به تعویق می افتد
تست ماکرو؛ و # وندف دستورالعمل ها نیز خروجی برای ماکروهای آزمایش شده اما
در آن زمان تعریف نشده بود
-P جلوگیری از تولید نشانگرهای خط در خروجی از پیش پردازنده. این ممکن است
هنگام اجرای پیش پردازنده روی چیزی که کد C نیست مفید است و ارسال خواهد شد
به برنامه ای که ممکن است توسط خط نشانگرها اشتباه گرفته شود.
-C نظرات را نادیده نگیرید. همه نظرات به فایل خروجی ارسال می شوند، به جز
برای نظرات در دستورالعمل های پردازش شده، که همراه با دستورالعمل حذف می شوند.
هنگام استفاده باید برای عوارض جانبی آماده باشید -C; باعث می شود پیش پردازنده به
نظرات را در نوع خود به عنوان نشانه در نظر بگیرید. به عنوان مثال، نظرات ظاهر شده در
شروع این که چه چیزی می تواند یک خط دستورالعمل باشد، باعث می شود که آن خط به یک خط تبدیل شود
خط منبع معمولی، زیرا اولین نشانه روی خط دیگر a نیست #.
-CCC نظرات را نادیده نگیرید، از جمله در هنگام گسترش ماکرو. این شبیه است -C، بجز
که نظرات موجود در ماکروها نیز به فایل خروجی منتقل می شوند
ماکرو گسترش یافته است.
علاوه بر عوارض جانبی -C گزینه، -CCC گزینه باعث ایجاد تمام سبک های C++ می شود
نظرات داخل یک ماکرو برای تبدیل به نظرات به سبک C. این برای جلوگیری از بعد است
استفاده از آن ماکرو از اظهار نظر ناخواسته باقی مانده خط منبع.
La -CCC گزینه به طور کلی برای پشتیبانی از نظرات lint استفاده می شود.
سنتی-cpp
سعی کنید رفتار پیش پردازنده های قدیمی C را بر خلاف ISO C تقلید کنید
پیش پردازشگرها
سه نمودارها
توالی های سه گراف را پردازش کنید. اینها دنباله های سه شخصیتی هستند که همه با آنها شروع می شود
??، که توسط ISO C برای مخفف کاراکترهای منفرد تعریف می شوند. مثلا، ??/ می ایستد
برای \، به طوری که '??/n' یک کاراکتر ثابت برای یک خط جدید است. به طور پیش فرض، GCC نادیده می گیرد
سه گراف ها، اما در حالت های منطبق با استاندارد آنها را تبدیل می کند. را ببینید -std و -ansi
گزینه.
XNUMX تریگراف و جایگزین های آنها هستند
Trigraph: ??( ??) ??< ??> ??= ??/ ??' ؟؟! ??-
جایگزینی: [ ] { } # \ ^ | ~
نقشه برداری
کد ویژه را برای کار در سیستم های فایلی که فقط فایل های بسیار کوتاه را مجاز می دانند، فعال کنید
نام هایی مانند MS-DOS.
--کمک
--هدف-کمک
متنی را چاپ کنید که تمام گزینه های خط فرمان را به جای پیش پردازش هر چیزی توصیف می کند.
-v حالت پرمخاطب. شماره نسخه GNU CPP را در ابتدای اجرا چاپ کنید و
فرم نهایی مسیر شامل را گزارش دهید.
-H نام هر فایل هدر مورد استفاده را علاوه بر سایر فعالیت های عادی چاپ کنید. هر یک
نام تورفتگی نشان می دهد که چقدر در عمق است #include پشته آن است. هدر از پیش کامپایل شده
فایلها نیز چاپ میشوند، حتی اگر نامعتبر باشند. یک از پیش کامپایل شده نامعتبر
فایل هدر با چاپ شده است ...ایکس و معتبر با ...! .
-version
- نسخه
شماره نسخه GNU CPP را چاپ کنید. با یک خط تیره، به طور معمول به پیش پردازش ادامه دهید.
با دو خط تیره فوراً خارج شوید.
عبور گزینه به la همگذار
می توانید گزینه ها را به اسمبلر منتقل کنید.
-وا،انتخاب
عبور انتخاب به عنوان یک گزینه برای اسمبلر. اگر انتخاب حاوی کاما است، تقسیم شده است
به گزینه های متعدد در کاما.
-Xassembler انتخاب
عبور انتخاب به عنوان یک گزینه برای اسمبلر. شما می توانید از این برای تامین سیستم خاص استفاده کنید
گزینه های اسمبلری که GCC آنها را نمی شناسد.
اگر می خواهید گزینه ای را ارسال کنید که آرگومان می گیرد، باید از آن استفاده کنید -Xassembler دو برابر،
یک بار برای گزینه و یک بار برای استدلال.
گزینه برای لینک
زمانی که کامپایلر فایل های شی را به یک فایل اجرایی پیوند می دهد، این گزینه ها وارد عمل می شوند
فایل خروجی. اگر کامپایلر یک مرحله پیوند را انجام ندهد، آنها بی معنی هستند.
شی-فایل-نام
نام فایلی که به یک پسوند شناخته شده خاص ختم نمی شود برای نام گذاری an در نظر گرفته می شود
فایل شی یا کتابخانه (فایل های شی با پیوند دهنده از کتابخانه ها متمایز می شوند
با توجه به محتویات فایل.) اگر پیوند انجام شود، از این فایل های شی به عنوان استفاده می شود
ورودی به پیوند دهنده
-c
-S
-E اگر هر یک از این گزینه ها استفاده شود، پیوند دهنده اجرا نمی شود و نام فایل ها را شیء می کند
نباید به عنوان استدلال استفاده شود.
-lکتابخانه
-l کتابخانه
کتابخانه نامگذاری شده را جستجو کنید کتابخانه هنگام پیوند دادن (دومین جایگزین با
کتابخانه به عنوان یک آرگومان جداگانه فقط برای انطباق با POSIX است و توصیه نمی شود.)
فرق می کند که در کدام دستور این گزینه را بنویسید. لینک دهنده جستجو می کند
و کتابخانه ها و فایل های شی را به ترتیبی که مشخص شده اند پردازش می کند. بدین ترتیب، foo.o
-lz bar.o کتابخانه را جستجو می کند z پس از فایل foo.o اما قبلاً bar.o. اگر bar.o اشاره دارد به
توابع در z، این توابع ممکن است بارگیری نشوند.
پیوند دهنده یک لیست استاندارد از دایرکتوری ها را برای کتابخانه جستجو می کند که در واقع همینطور است
فایلی به نام library.a. سپس پیوند دهنده از این فایل به گونه ای استفاده می کند که گویی مشخص شده است
دقیقا با نام
دایرکتوری های جستجو شده شامل چندین دایرکتوری استاندارد سیستم به علاوه هر کدام از شما هستند
مشخص کنید با -L.
معمولاً فایلهایی که از این طریق یافت میشوند فایلهای کتابخانهای هستند --- فایلهای بایگانی که اعضای آنها هستند
فایل های شی پیوند دهنده یک فایل بایگانی را با اسکن آن برای اعضا مدیریت می کند
که نمادهایی را تعریف می کنند که تاکنون به آنها ارجاع داده شده اما تعریف نشده اند. اما اگر
فایلی که پیدا می شود یک فایل شی معمولی است، به روش معمول پیوند داده شده است. در
تنها تفاوت بین استفاده از -l گزینه و تعیین نام فایل است که -l
احاطه می کند کتابخانه با لوب و .a و چندین دایرکتوری را جستجو می کند.
-lobjc
شما به این مورد خاص نیاز دارید -l گزینه ای به منظور پیوند Objective-C یا
برنامه Objective-C++.
-nostartfiles
هنگام پیوند از فایل های راه اندازی استاندارد سیستم استفاده نکنید. سیستم استاندارد
کتابخانه ها به طور معمول استفاده می شوند، مگر اینکه -nostdlib or -nodefaultlibs استفاده می شود.
-nodefaultlibs
هنگام پیوند از کتابخانه های سیستم استاندارد استفاده نکنید. فقط کتابخانه هایی که شما مشخص کرده اید
به پیوند دهنده منتقل می شوند و گزینه هایی که پیوند کتابخانه های سیستم را مشخص می کنند، مانند
به عنوان "-static-libgcc" یا "-shared-libgcc"، نادیده گرفته می شوند. فایل های راه اندازی استاندارد هستند
به طور معمول استفاده می شود، مگر اینکه -nostartfiles استفاده می شود.
کامپایلر ممکن است برای "memcmp"، "memset"، "memcpy" و "memmove" فراخوانی ایجاد کند. اینها
ورودی ها معمولاً با ورودی های libc حل می شوند. این نقاط ورود باید باشد
زمانی که این گزینه مشخص شده باشد از طریق مکانیسم دیگری عرضه می شود.
-nostdlib
هنگام پیوند، از فایل ها یا کتابخانه های راه اندازی سیستم استاندارد استفاده نکنید. بدون راه اندازی
فایلها و فقط کتابخانههایی که مشخص میکنید به پیوند دهنده و گزینهها منتقل میشوند
تعیین پیوند کتابخانه های سیستم، مانند "-static-libgcc" یا
"-shared-libgcc"، نادیده گرفته می شوند.
کامپایلر ممکن است برای "memcmp"، "memset"، "memcpy" و "memmove" فراخوانی ایجاد کند. اینها
ورودی ها معمولاً با ورودی های libc حل می شوند. این نقاط ورود باید باشد
زمانی که این گزینه مشخص شده باشد از طریق مکانیسم دیگری عرضه می شود.
یکی از کتابخانه های استاندارد دور زده شده توسط -nostdlib و -nodefaultlibs is libgcc.a، یک
کتابخانه ای از زیر برنامه های داخلی که GCC برای غلبه بر کاستی های خاص استفاده می کند
ماشینها یا نیازهای ویژه برای برخی از زبانها.
در بیشتر موارد، شما نیاز دارید libgcc.a حتی زمانی که می خواهید از دیگر کتابخانه های استاندارد خودداری کنید.
به عبارت دیگر، زمانی که شما مشخص می کنید -nostdlib or -nodefaultlibs معمولا باید
مشخص كردن -lgcc همچنین. این تضمین می کند که هیچ مرجع حل نشده ای به آن ندارید
زیربرنامه های داخلی کتابخانه GCC (نمونه ای از چنین زیربرنامه داخلی است
__اصلی، برای اطمینان از فراخوانی سازنده های C++ استفاده می شود.)
- پای
یک موقعیت اجرایی مستقل بر روی اهدافی که از آن پشتیبانی می کنند، تولید کنید. برای قابل پیش بینی
نتایج، شما همچنین باید همان مجموعه ای از گزینه های مورد استفاده برای کامپایل را مشخص کنید (-fpie,
-fPIE، یا گزینه های فرعی مدل) زمانی که این گزینه پیوند دهنده را مشخص می کنید.
-rdynamic
پرچم را پاس کن صادرات - پویا به پیوند دهنده ELF، در اهدافی که از آن پشتیبانی می کنند. این
به پیوند دهنده دستور می دهد تا همه نمادها، نه تنها مورد استفاده، را به نماد پویا اضافه کند
جدول. این گزینه برای برخی از کاربردهای "dlopen" یا اجازه به دست آوردن مورد نیاز است
ردیابی از داخل یک برنامه
-s تمام جدول نمادها و اطلاعات جابجایی را از فایل اجرایی حذف کنید.
-استاتیک
در سیستمهایی که از پیوند پویا پشتیبانی میکنند، این از پیوند با اشتراکگذاری شده جلوگیری میکند
کتابخانه ها در سیستم های دیگر، این گزینه هیچ تاثیری ندارد.
-به اشتراک گذاشته شده
یک شی به اشتراک گذاشته شده تولید کنید که سپس می تواند با اشیاء دیگر پیوند داده شود تا یک شیء را تشکیل دهد
قابل اجرا همه سیستم ها از این گزینه پشتیبانی نمی کنند. برای نتایج قابل پیش بینی، شما باید
همچنین مجموعه ای از گزینه های مورد استفاده برای کامپایل را مشخص کنید (-fpic, -fPIC، یا مدل
suboptions) هنگامی که این گزینه پیوند دهنده را مشخص می کنید.[1]
-shared-libgcc
-static-libgcc
در سیستم هایی که ارائه می کنند libgcc به عنوان یک کتابخانه مشترک، این گزینه ها استفاده از
به ترتیب نسخه اشتراکی یا استاتیک. اگر نسخه مشترکی وجود ندارد libgcc بود
زمانی که کامپایلر پیکربندی شده بود ساخته شد، این گزینه ها هیچ تاثیری ندارند.
چندین موقعیت وجود دارد که در آن یک برنامه باید از اشتراک گذاری شده استفاده کند libgcc
به جای نسخه استاتیک رایج ترین آنها زمانی است که برنامه
مایل است استثناها را در کتابخانه های مشترک مختلف پرتاب کند و بگیرد. در این مورد،
هر یک از کتابخانه ها و همچنین خود برنامه باید از اشتراک گذاری استفاده کند libgcc.
بنابراین، درایورهای G++ و GCJ به طور خودکار اضافه می شوند -shared-libgcc هر وقت ساختی
یک کتابخانه مشترک یا یک فایل اجرایی اصلی، زیرا برنامه های C++ و جاوا معمولا از آن استفاده می کنند
استثناها، بنابراین این کار درستی است که باید انجام شود.
اگر در عوض از درایور GCC برای ایجاد کتابخانه های مشترک استفاده کنید، ممکن است متوجه شوید که آنها
همیشه با اشتراک گذاری مرتبط نیستند libgcc. اگر GCC پیدا کند، در پیکربندی آن
زمانی که شما یک پیوند دهنده غیر گنو یا یک پیوند دهنده گنو دارید که از گزینه پشتیبانی نمی کند
--eh-frame-hdr، نسخه مشترک را پیوند می دهد libgcc به کتابخانه های مشترک توسط
پیش فرض در غیر این صورت، از لینک دهنده استفاده می کند و پیوند را بهینه می کند
با نسخه مشترک libgcc، پیوند دادن با نسخه ثابت libgcc توسط
پیش فرض این اجازه می دهد تا استثناها از طریق چنین کتابخانه های مشترک منتشر شوند، بدون
متحمل شدن هزینه های جابجایی در زمان بارگذاری کتابخانه.
با این حال، اگر یک کتابخانه یا فایل اجرایی اصلی قرار است استثناهایی را ایجاد کند یا آن را بگیرد، شما
باید آن را با استفاده از درایور G++ یا GCJ، مطابق با زبانهای مورد استفاده در آن، پیوند دهید
برنامه یا با استفاده از گزینه -shared-libgcc، به گونه ای که با اشتراک گذاری مرتبط است
libgcc.
-static-libasan
هنگامی که -fsanitize=آدرس گزینه برای پیوند دادن یک برنامه، درایور GCC استفاده می شود
به طور خودکار علیه لیباسان. اگر لیباسان به عنوان یک کتابخانه مشترک در دسترس است، و
la -استاتیک گزینه استفاده نمی شود، سپس این در برابر نسخه مشترک لینک می شود لیباسان.
La -static-libasan گزینه درایور GCC را به پیوند هدایت می کند لیباسان به صورت ایستا، بدون
لزوماً کتابخانه های دیگر را به صورت ایستا پیوند می دهد.
static-libtsan
هنگامی که -fsanitize=نخ گزینه برای پیوند دادن یک برنامه، درایور GCC استفاده می شود
به طور خودکار علیه لیبتسان. اگر لیبتسان به عنوان یک کتابخانه مشترک در دسترس است، و
la -استاتیک گزینه استفاده نمی شود، سپس این در برابر نسخه مشترک لینک می شود لیبتسان.
La static-libtsan گزینه درایور GCC را به پیوند هدایت می کند لیبتسان به صورت ایستا، بدون
لزوماً کتابخانه های دیگر را به صورت ایستا پیوند می دهد.
استاتیک-لیبلسان
هنگامی که -fsanitize=نشت گزینه برای پیوند دادن یک برنامه، درایور GCC استفاده می شود
به طور خودکار علیه لیبلسان. اگر لیبلسان به عنوان یک کتابخانه مشترک در دسترس است، و
la -استاتیک گزینه استفاده نمی شود، سپس این در برابر نسخه مشترک لینک می شود لیبلسان.
La استاتیک-لیبلسان گزینه درایور GCC را به پیوند هدایت می کند لیبلسان به صورت ایستا، بدون
لزوماً کتابخانه های دیگر را به صورت ایستا پیوند می دهد.
استاتیک-لیبوسان
هنگامی که -fsanitize=تعریف نشده گزینه برای پیوند دادن یک برنامه، درایور GCC استفاده می شود
به طور خودکار علیه لیبوبسان. اگر لیبوبسان به عنوان یک کتابخانه مشترک در دسترس است،
و -استاتیک گزینه استفاده نمی شود، سپس این در برابر نسخه مشترک لینک می شود
لیبوبسان. استاتیک-لیبوسان گزینه درایور GCC را به پیوند هدایت می کند لیبوبسان
به صورت ایستا، بدون اینکه لزوماً کتابخانه های دیگر را به صورت ایستا به هم مرتبط کنند.
-static-libstdc++
هنگامی که g ++ برنامه برای پیوند دادن یک برنامه ++C استفاده می شود، معمولاً به طور خودکار پیوند می دهد
در برابر libstdc++. اگر libstdc++ به عنوان یک کتابخانه مشترک در دسترس است، و -استاتیک
گزینه استفاده نمی شود، سپس این در برابر نسخه مشترک لینک می شود libstdc++. به این معنا که
به طور معمول خوب است با این حال، گاهی اوقات فریز کردن نسخه مفید است libstdc++
توسط برنامه بدون رفتن به یک پیوند کاملاً ثابت استفاده می شود. در
-static-libstdc++ گزینه را هدایت می کند g ++ درایور به پیوند libstdc++ به صورت ایستا، بدون
لزوماً کتابخانه های دیگر را به صورت ایستا پیوند می دهد.
- نمادین
هنگام ساخت یک شی مشترک، ارجاعات را به نمادهای جهانی متصل کنید. هشدار در مورد هر
مراجع حل نشده (مگر اینکه توسط گزینه ویرایشگر پیوند لغو شود -xlinker -z
-xlinker دفاع می کند). فقط تعداد کمی از سیستم ها از این گزینه پشتیبانی می کنند.
-T خط
استفاده کنید خط به عنوان اسکریپت پیوند دهنده این گزینه توسط اکثر سیستم هایی که از آن استفاده می کنند پشتیبانی می شود
پیوند دهنده گنو. در برخی از اهداف، مانند اهداف بدون سیستم عامل،
la -T برای اجتناب از ارجاع به نمادهای تعریف نشده ممکن است هنگام پیوند مورد نیاز باشد.
-xlinker انتخاب
عبور انتخاب به عنوان گزینه ای برای پیوند دهنده. شما می توانید از این برای تامین سیستم خاص استفاده کنید
گزینه های پیوند دهنده که GCC آنها را نمی شناسد.
اگر می خواهید گزینه ای را ارسال کنید که یک آرگومان جداگانه می گیرد، باید از آن استفاده کنید -xlinker
دو بار، یک بار برای گزینه و یک بار برای استدلال. مثلا پاس دادن -اصرار
تعاریف، باید بنویسید -xlinker -اصرار -xlinker تعاریف. این کار نمی کند
به ارسال -xlinker "-اصرار تعاریف"، زیرا این کل رشته را به صورت a عبور می دهد
آرگومان واحد، که آن چیزی نیست که پیوند دهنده انتظار دارد.
هنگام استفاده از پیوند دهنده گنو، انتقال آرگومان ها به پیوند دهنده معمولا راحت تر است
گزینه ها با استفاده از انتخاب=ارزش نحو به عنوان آرگومان های جداگانه. مثلا شما
می تواند مشخص کند -xlinker -Map=output.map به جای -xlinker -نقشه -xlinker خروجی.نقشه.
سایر پیوند دهنده ها ممکن است از این نحو برای گزینه های خط فرمان پشتیبانی نکنند.
-Wl،انتخاب
عبور انتخاب به عنوان گزینه ای برای پیوند دهنده. اگر انتخاب حاوی کاما است، به تقسیم می شود
چندین گزینه در کاما می توانید از این نحو برای ارسال آرگومان به آن استفاده کنید
گزینه. مثلا، -Wl،-Map،output.map عبور می کند -نقشه خروجی.نقشه به پیوند دهنده چه زمانی
با استفاده از پیوند دهنده گنو، می توانید همان جلوه را با استفاده از آن نیز دریافت کنید -Wl،-Map=output.map.
توجه: در اوبونتو 8.10 و نسخههای بعدی، برای LDFLAGS، این گزینه وجود دارد -wl ، -z ، relro استفاده می شود.
برای غیرفعال کردن ، استفاده کنید -Wl،-z، نورلرو.
-u نماد
وانمود کردن نماد نماد تعریف نشده است، برای وادار کردن پیوند ماژول های کتابخانه برای تعریف
آی تی. شما می توانید استفاده کنید -u چندین بار با نمادهای مختلف برای بارگذاری اجباری
ماژول های کتابخانه اضافی
گزینه برای فهرست راهنما جستجو
این گزینه ها دایرکتوری هایی را برای جستجوی فایل های هدر، کتابخانه ها و قطعات مشخص می کنند
از کامپایلر:
-Iدیر
دایرکتوری را اضافه کنید دیر به سر فهرست دایرکتوری هایی که برای سربرگ جستجو می شوند
فایل ها. این می تواند برای نادیده گرفتن فایل هدر سیستم، جایگزین فایل شما استفاده شود
نسخه، زیرا این دایرکتوری ها قبل از فایل هدر سیستم جستجو می شوند
دایرکتوری ها با این حال، شما نباید از این گزینه برای افزودن دایرکتوری هایی که حاوی هستند استفاده کنید
فایل های هدر سیستم ارائه شده توسط فروشنده (استفاده از -سیستم برای آن). اگر از بیش از یک مورد استفاده می کنید
-I گزینه، دایرکتوری ها به ترتیب چپ به راست اسکن می شوند. سیستم استاندارد
دایرکتوری ها بعد از آن می آیند.
اگر یک سیستم استاندارد شامل دایرکتوری یا دایرکتوری مشخص شده با -سیستماست،
نیز مشخص شده است -Iاز -I گزینه نادیده گرفته می شود دایرکتوری هنوز جستجو می شود اما
به عنوان دایرکتوری سیستم در موقعیت عادی خود در سیستم شامل زنجیره می شود. این برای
اطمینان حاصل کنید که رویه شورای همکاری خلیج فارس برای رفع هدرهای سیستم باگ و سفارش برای آن
دستورالعمل "include_next" سهوا تغییر نکرده است. اگر واقعاً نیاز به تغییر دارید
ترتیب جستجو برای دایرکتوری های سیستم، از -nostdinc و / یا -سیستم گزینه.
-iplugindir=دیر
دایرکتوری را برای جستجوی افزونه هایی تنظیم کنید که از آنها عبور می کنند -fplugin=نام بجای
-fplugin=مسیر/نام.بنابراین. این گزینه برای استفاده کاربر نیست، بلکه فقط مورد استفاده قرار می گیرد
از کنار راننده گذشت
-نقل دادندیر
دایرکتوری را اضافه کنید دیر به سر فهرست دایرکتوری هایی که برای سربرگ جستجو می شوند
فایل ها فقط برای مورد #include "پرونده"; آنها جستجو نمی شوند #include <پرونده>,
در غیر این صورت درست مثل -I.
-Lدیر
دایرکتوری اضافه کنید دیر به لیست دایرکتوری هایی که باید جستجو شوند -l.
-Bپیشوند
این گزینه مشخص می کند که کجا باید فایل های اجرایی، کتابخانه ها، شامل فایل ها و
فایل های داده خود کامپایلر
برنامه درایور کامپایلر یک یا چند زیربرنامه را اجرا می کند cpp, cc1, as و ld.
تلاش می کند پیشوند به عنوان پیشوند برای هر برنامه ای که سعی می کند اجرا شود، هم با و هم بدون
دستگاه/نسخه/.
برای اجرای هر زیربرنامه، درایور کامپایلر ابتدا آن را امتحان می کند -B پیشوند، در صورت وجود
اگر آن نام یافت نشد، یا اگر -B مشخص نشده است، راننده دو استاندارد را امتحان می کند
پیشوندها، /usr/lib/gcc/ و /usr/local/lib/gcc/. اگر هیچ کدام از اینها منجر به الف نشود
نام فایلی که پیدا می شود، نام برنامه اصلاح نشده با استفاده از آن جستجو می شود
دایرکتوری های مشخص شده در شما PATH متغیر محیطی.
کامپایلر بررسی می کند که آیا مسیر ارائه شده توسط -B به یک دایرکتوری اشاره دارد و
در صورت لزوم یک کاراکتر جداکننده دایرکتوری را در انتهای مسیر اضافه می کند.
-B پیشوندهایی که به طور موثر نام دایرکتوری ها را مشخص می کنند برای کتابخانه های موجود نیز اعمال می شوند
لینکر، زیرا کامپایلر این گزینه ها را به آن ترجمه می کند -L گزینه های پیوند دهنده
آنها همچنین برای گنجاندن فایل ها در پیش پردازنده اعمال می شوند، زیرا کامپایلر ترجمه می کند
این گزینه ها به -سیستم گزینه هایی برای پیش پردازنده در این مورد، کامپایلر
ضمیمه می کند شامل به پیشوند
فایل پشتیبانی زمان اجرا libgcc.a همچنین می توان با استفاده از -B پیشوند، اگر
مورد نیاز است. اگر در آنجا یافت نشد، دو پیشوند استاندارد بالا امتحان میشوند و این
همش است. اگر فایل به این وسیله پیدا نشود از لینک خارج می شود.
راه دیگری برای تعیین یک پیشوند بسیار شبیه به -B پیشوند استفاده از محیط است
متغیر GCC_EXEC_PREFIX.
به عنوان یک کلاژ خاص، اگر مسیر ارائه شده توسط -B is [dir/]stageN/، که در آن N یک عدد است
در محدوده 0 تا 9، سپس با جایگزین می شود [dir/]شامل. این برای کمک به بوت است-
بستن کامپایلر
-specs =پرونده
روند پرونده پس از خواندن کامپایلر در استاندارد مشخصات فایل، به منظور لغو
پیش فرض هایی که gcc برنامه درایور هنگام تعیین سوئیچ هایی که باید عبور کنند استفاده می کند
به cc1, cc1plus, as, ldو غیره بیش از یک -specs =پرونده را می توان بر روی مشخص کرد
خط فرمان، و آنها به ترتیب، از چپ به راست پردازش می شوند.
--sysroot=دیر
استفاده کنید دیر به عنوان دایرکتوری ریشه منطقی برای هدرها و کتابخانه ها. به عنوان مثال، اگر
کامپایلر معمولاً سرصفحه ها را در داخل جستجو می کند / usr / شامل و کتابخانه ها در / usr / معاونت، آن
در عوض جستجو می کند dir/usr/include و dir/usr/lib.
اگر هم از این گزینه و هم از -isysroot گزینه، سپس --sysroot انتخاب
برای کتابخانه ها اعمال می شود، اما -isysroot گزینه برای فایل های هدر اعمال می شود.
پیوند دهنده گنو (با نسخه 2.16 شروع می شود) پشتیبانی لازم برای این کار را دارد
گزینه. اگر پیوند دهنده شما از این گزینه پشتیبانی نمی کند، جنبه فایل هدر از
--sysroot هنوز کار می کند، اما جنبه کتابخانه ای کار نمی کند.
--no-sysroot-پسوند
برای برخی از اهداف، یک پسوند به دایرکتوری ریشه مشخص شده با اضافه می شود --sysroot,
بسته به سایر گزینه های مورد استفاده، به طوری که برای مثال ممکن است سرصفحه ها در آنها یافت شوند
dir/پسوند/usr/include بجای dir/usr/include. این گزینه افزودن را غیرفعال می کند
از چنین پسوندی
-من- این گزینه منسوخ شده است. خواهش می کنم استفاده کنید -نقل دادن در عوض برای -I دایرکتوری های قبل
la -من- و حذف کنید -من-. هر دایرکتوری که با آن مشخص می کنید -I گزینه های قبل از
-من- گزینه فقط برای مورد جستجو می شود #include "پرونده"; آنها جستجو نمی شوند
برای #include <پرونده>.
اگر دایرکتوری های اضافی با -I گزینه های بعد از -من-، این
دایرکتوری ها برای همه جستجو می شوند #include بخشنامه ها (معمولا تمام -I دایرکتوری
از این طریق استفاده می شود.)
علاوه بر این، -من- گزینه استفاده از دایرکتوری فعلی (که در آن
فایل ورودی فعلی از) به عنوان اولین فهرست جستجو برای #include "پرونده".
هیچ راهی برای نادیده گرفتن این اثر وجود ندارد -من-. با -NS. می توانید جستجو را مشخص کنید
دایرکتوری که هنگام فراخوانی کامپایلر جاری است. این دقیقاً این نیست
همان کاری که پیش پردازنده به طور پیش فرض انجام می دهد، اما اغلب رضایت بخش است.
-من- استفاده از دایرکتوری های سیستم استاندارد برای فایل های هدر را مهار نمی کند.
به این ترتیب، -من- و -nostdinc مستقل هستند.
تعیین هدف دستگاه و کامپایلر نسخه
روش معمول برای اجرای GCC اجرای فایل اجرایی فراخوانی شده است gcc، یا دستگاه-gcc وقتی متقابل
تدوین، یا دستگاه-gcc-نسخه برای اجرای نسخه ای غیر از نسخه ای که نصب شده است
آخر.
سخت افزار مدل و پیکربندی
هر نوع ماشین هدف میتواند گزینههای خاص خود را داشته باشد، با شروع -m، انتخاب کنید
در میان مدلها یا پیکربندیهای سختافزاری مختلف --- برای مثال، 68010 در مقابل 68020، شناور
پردازنده مشترک یا هیچ کدام یک نسخه نصب شده از کامپایلر می تواند برای هر مدلی کامپایل شود
یا پیکربندی، با توجه به گزینه های مشخص شده.
برخی از تنظیمات کامپایلر نیز از گزینه های ویژه اضافی، معمولاً برای
سازگاری با سایر کامپایلرها در همان پلتفرم
AAArch64 گزینه
این گزینه ها برای پیاده سازی AArch64 تعریف شده اند:
-mabi=نام
کد برای مدل داده مشخص شده ایجاد کنید. مقادیر مجاز هستند ilp32 برای SysV-
مانند مدل داده که در آن int، long int و اشاره گر 32 بیتی هستند و lp64 برای SysV مانند
مدل داده ای که در آن int 32 بیتی است، اما int طولانی و اشاره گر 64 بیتی است.
پیش فرض بستگی به پیکربندی هدف خاص دارد. توجه داشته باشید که LP64 و
ABI های ILP32 با پیوند سازگار نیستند. شما باید کل برنامه خود را با همان کامپایل کنید
ABI، و پیوند با مجموعه ای از کتابخانه های سازگار.
-mbig-endian
کد big-endian را تولید کنید. زمانی که GCC برای یک پیکربندی شده است، این پیشفرض است
aarch64_be-*-* هدف.
-mgeneral-regs-only
کدی را ایجاد کنید که فقط از رجیسترهای عمومی استفاده می کند.
-mlittle-endian
کد کمی endian تولید کنید. زمانی که GCC برای یک پیکربندی شده است، این پیشفرض است
aarch64-*-* اما نه aarch64_be-*-* هدف.
-mcmodel=کوچک
کد برای مدل کد کوچک تولید کنید. برنامه و نمادهای ایستا تعریف شده آن
باید در 1 گیگابایت از یکدیگر باشند. اشاره گرها 64 بیت هستند. برنامه ها می توانند به صورت ایستا باشند
یا به صورت پویا پیوند داده شده است. این مدل به طور کامل اجرا نشده است و بیشتر به عنوان
کوچک.
-mcmodel=small
کد برای مدل کد کوچک تولید کنید. برنامه و تعریف استاتیک آن
نمادها باید در 4 گیگابایت از یکدیگر باشند. اشاره گرها 64 بیت هستند. برنامه ها می توانند باشند
به صورت ایستا یا پویا پیوند خورده است. این مدل کد پیش فرض است.
-mcmodel=بزرگ
کد برای مدل کد بزرگ تولید کنید. این هیچ فرضی در مورد آدرس و
اندازه بخش ها اشاره گرها 64 بیت هستند. برنامه ها فقط می توانند به صورت ایستا پیوند شوند.
-mstrict-align
فرض نکنید که مراجع حافظه غیر تراز توسط سیستم مدیریت می شوند.
-momit-leaf-frame-pointer
-mno-omit-leaf-frame-pointer
نشانگر فریم را در توابع برگ حذف یا نگه دارید. رفتار سابق است
به طور پیش فرض
-mtls-dialect=desc
از توصیفگرهای TLS به عنوان مکانیزم ذخیرهسازی محلی برای دسترسیهای پویا به TLS استفاده کنید
متغیرها این پیش فرض است.
-mtls-dialect=سنتی
از TLS سنتی به عنوان مکانیزم ذخیرهسازی محلی برای دسترسیهای پویا به TLS استفاده کنید
متغیرها
-mfix-cortex-a53-835769
-MNO-FIX-CORTEX-A53-835769
راه حل ARM Cortex-A53 erratum شماره 835769 را فعال یا غیرفعال کنید.
شامل قرار دادن یک دستورالعمل NOP بین دستورالعمل های حافظه و 64 بیتی است
دستورات ضرب-انباشت عدد صحیح
-mfix-cortex-a53-843419
-MNO-FIX-CORTEX-A53-843419
راه حل ARM Cortex-A53 erratum شماره 843419 را فعال یا غیرفعال کنید.
راه حل اشتباه در زمان پیوند ایجاد می شود و این فقط پرچم مربوطه را عبور می دهد
به پیوند دهنده
-مارس=نام
نام معماری هدف را مشخص کنید که به صورت اختیاری با یک یا چند پسوند اضافه می شود
اصلاح کننده های ویژگی این گزینه دارای فرم است -مارس=قوس{+[نه]از ویژگی های}*، جایی که
فقط مقدار مجاز برای قوس is armv8-a. مقادیر مجاز برای از ویژگی های هستند
در زیر بخش زیر مستند شده است.
در جایی که اصلاح کننده های ویژگی متضاد مشخص شده اند، از سمت راست ترین ویژگی استفاده می شود.
GCC از این نام برای تعیین نوع دستورالعملهایی که میتواند هنگام تولید صادر کند استفاده میکند
کد اسمبلی
جایی که -مارس بدون هیچ یک از آنها مشخص شده است -mtune or -mcpu همچنین مشخص شده است،
کد به گونهای تنظیم میشود که در طیف وسیعی از پردازندههای هدف پیادهسازی شده به خوبی عمل کند
معماری هدف
-mtune=نام
نام پردازنده هدفی را که GCC باید عملکرد آن را تنظیم کند، مشخص کنید
کد. مقادیر مجاز برای این گزینه عبارتند از: عمومی, قشر-a53, قشر-a57.
علاوه بر این، این گزینه می تواند مشخص کند که GCC باید عملکرد کد را تنظیم کند
برای یک سیستم big.LITTLE. تنها مقدار مجاز است cortex-a57.cortex-a53.
جایی که هیچ کدام -mtune=, -mcpu= or -مارس= مشخص شده است، کد تنظیم خواهد شد
عملکرد خوبی در طیف وسیعی از پردازنده های هدف دارد.
این گزینه توسط اصلاح کننده های ویژگی نمی تواند پسوند شود.
-mcpu=نام
نام پردازنده مورد نظر را که به صورت اختیاری با یک یا چند ویژگی پسوند می شود، مشخص کنید
اصلاح کننده ها این گزینه دارای فرم است -mcpu=پردازنده{+[نه]از ویژگی های}*، جایی که جایز است
مقادیر برای پردازنده همان موارد موجود برای -mtune.
مقادیر مجاز برای از ویژگی های در زیر بخش زیر مستند شده است.
در جایی که اصلاح کننده های ویژگی متضاد مشخص شده اند، از سمت راست ترین ویژگی استفاده می شود.
GCC از این نام برای تعیین نوع دستورالعملهایی که میتواند هنگام تولید صادر کند استفاده میکند
کد اسمبلی (مثل اینکه توسط -مارس) و برای تعیین پردازنده هدف که برای
کوک برای اجرا (مثل اینکه توسط -mtune). جایی که این گزینه همراه با استفاده می شود
-مارس or -mtune، آن گزینه ها بر قسمت مناسب این قسمت اولویت دارند
گزینه.
-مارس و -mcpu اصلاح کننده های ویژگی
اصلاح کننده های ویژگی مورد استفاده با -مارس و -mcpu می تواند یکی از موارد زیر باشد:
CRC برنامه افزودنی CRC را فعال کنید.
عضو سازمانهای سری ومخفی
افزونه Crypto را فعال کنید. این بدان معناست که SIMD پیشرفته فعال است.
fp دستورالعمل های ممیز شناور را فعال کنید.
شبیه سازی
دستورالعمل های پیشرفته SIMD را فعال کنید. این بدان معناست که دستورالعمل های ممیز شناور هستند
فعال شد. این پیش فرض برای تمام مقادیر ممکن فعلی برای گزینه ها است -مارس و
-mcpu=.
آداپتوا ظهور و تجلی عیسی گزینه
اینها -m گزینه هایی برای Adapteva Epiphany تعریف شده است:
-mhalf-reg-file
هیچ ثباتی را در محدوده "r32"..."r63" اختصاص ندهید. این اجازه می دهد تا کد روی آن اجرا شود
انواع سخت افزاری که فاقد این رجیسترها هستند.
-mprefer-short-insn-regs
ترجیحاً رجیسترهایی را تخصیص دهید که اجازه تولید دستورالعمل کوتاه را می دهند. این می تواند
منجر به افزایش تعداد دستورالعمل ها می شود، بنابراین ممکن است به طور کلی کاهش یا افزایش یابد
اندازه کد
-branch-cost=تعداد
هزینه شعب را تقریباً تنظیم کنید تعداد دستورالعمل های "ساده" این هزینه فقط یک است
اکتشافی است و تضمینی برای تولید نتایج ثابت در سراسر نسخه ها وجود ندارد.
-mcmove
تولید حرکات شرطی را فعال کنید.
-mnops=تعداد
منتشر می کنند تعداد NOP قبل از هر دستورالعمل تولید شده دیگر.
-mno-soft-cmpsf
برای مقایسههای ممیز شناور با دقت تک، یک دستورالعمل «fsub» منتشر کنید و آزمایش کنید
پرچم ها این سریعتر از مقایسه نرم افزاری است، اما می تواند نتایج نادرستی داشته باشد
در حضور NaNs، یا زمانی که دو عدد کوچک متفاوت با هم مقایسه میشوند
تفاوت آنها صفر محاسبه می شود. پیش فرض است -msoft-cmpsf، که با استفاده از
مقایسه نرم افزاری کندتر، اما مطابق با IEEE.
-mstack-offset=تعداد
فاصله بین بالای پشته و نشانگر پشته را تنظیم کنید. به عنوان مثال، مقدار 8
به این معنی که هشت بایت در محدوده "sp+0...sp+7" را می توان توسط توابع برگ استفاده کرد
بدون تخصیص پشته ارزش هایی غیر از 8 or 16 آزمایش نشده و بعید است
کار همچنین توجه داشته باشید که این گزینه ABI را تغییر می دهد. کامپایل کردن برنامه با a
آفست پشته های مختلف نسبت به کتابخانه هایی که با آنها کامپایل شده اند، به طور کلی نمی کند
کار کردن این گزینه می تواند مفید باشد اگر بخواهید ارزیابی کنید که آیا یک پشته متفاوت افست شده است یا خیر
کد بهتری به شما می دهد، اما در واقع از یک پشته افست متفاوت برای ساخت استفاده کنید
برنامه های کاری، توصیه می شود زنجیره ابزار را با مناسب پیکربندی کنید
--with-stack-offset=تعداد گزینه.
-منو-دور-شب
زمانبند را طوری فرض کنید که حالت گرد کردن روی کوتاهی تنظیم شده است. را
پیش فرض است -Mround-نزدیکترین.
تماس های طولانی
اگر غیر از این توسط یک ویژگی مشخص نشده است، فرض کنید همه فراخوانی ها ممکن است فراتر از این باشند
محدوده دستورات "b" / "bl" را جبران کنید و در نتیجه آدرس تابع را بارگیری کنید
قبل از انجام یک تماس (در غیر این صورت مستقیم) وارد یک ثبت نام کنید. این پیش فرض است.
تماس های کوتاه
اگر غیر از این توسط یک ویژگی مشخص نشده است، فرض کنید همه تماس های مستقیم در محدوده هستند
از دستورالعمل های "b" / "bl"، بنابراین از این دستورالعمل ها برای تماس های مستقیم استفاده کنید. در
پیش فرض است تماس های طولانی.
-msmall16
فرض کنید آدرس ها را می توان به صورت مقادیر بدون علامت 16 بیتی بارگذاری کرد. این مربوط به
آدرس های تابع که تماس های طولانی معناشناسی در کار است.
-mfp-mode=حالت
حالت غالب واحد ممیز شناور را تنظیم کنید. این شناور را تعیین می کند
حالت نقطه ای که در زمان فراخوانی تابع و زمان بازگشت ارائه و انتظار می رود. ساخت
این حالت مطابق با حالتی است که شما در شروع عملکرد به آن نیاز دارید
برنامه های کوچکتر و سریعتر با اجتناب از سوئیچ های غیر ضروری حالت.
حالت را می توان به یکی از مقادیر زیر تنظیم کرد:
تماس گیرنده
هر حالتی در ورود تابع معتبر است و در هنگام عملکرد حفظ یا بازیابی می شود
برمی گرداند و زمانی که توابع دیگر را فراخوانی می کند. این حالت برای کامپایل مفید است
کتابخانه ها یا سایر واحدهای تلفیقی که ممکن است بخواهید آنها را در قالب های مختلف ادغام کنید
برنامههایی با حالتهای مختلف FPU غالب و سهولت در انجام آن
استفاده از یک فایل شی منفرد بیشتر از اندازه و سرعت سربار برای هر حالت اضافی است
تغییری که ممکن است مورد نیاز باشد، در مقایسه با آنچه که با موارد بیشتر مورد نیاز است
انتخاب خاص حالت FPU غالب.
کوتاه کردن
این حالتی است که برای محاسبات ممیز شناور با کوتاه کردن (یعنی دور
به سمت صفر) حالت گرد کردن. این شامل تبدیل از نقطه شناور به
عدد صحیح
دور نزدیکترین
این حالتی است که برای محاسبات ممیز شناور با دور به نزدیکترین یا
حتی حالت گرد کردن
INT این حالتی است که برای انجام محاسبات اعداد صحیح در FPU، به عنوان مثال عدد صحیح، استفاده می شود
ضرب، یا عدد صحیح ضرب-و-انباشت.
پیش فرض این است -mfp-mode=تماس گیرنده
-mnosplit-lohi
-mno-postinc
-mno-postmodify
ترفندهای تولید کد که به ترتیب، تقسیم بارهای 32 بیتی را غیرفعال می کند.
تولید آدرسهای پس از افزایش، و تولید آدرسهای پس از اصلاح. در
پیش فرض ها هستند msplit-lohi, -mpost-incو -mpost-modify.
-mnovect-double
حالت ترجیحی SIMD را به SImode تغییر دهید. پیش فرض است -مره، که با استفاده از
DImode به عنوان حالت ترجیحی SIMD.
-max-vect-align=تعداد
حداکثر تراز برای انواع حالت برداری SIMD. تعداد ممکن است 4 یا 8 باشد. پیش فرض این است
8. توجه داشته باشید که این یک تغییر ABI است، حتی اگر بسیاری از رابط های تابع کتابخانه چنین هستند
اگر از حالتهای برداری SIMD در مکانهایی که بر اندازه و/یا تأثیر میگذارند استفاده نکنند، تحت تأثیر قرار نمیگیرند
تراز انواع مربوطه
-msplit-vecmove-early
بردار تقسیم به تک کلمه حرکت می کند قبل از بارگذاری مجدد. در تئوری این می تواند بدهد
تخصیص ثبت نام بهتر است، اما تا کنون به نظر می رسد به طور کلی برعکس است.
-m1reg-REG
یک ثبات را برای نگه داشتن ثابت -1 مشخص کنید، که بارگذاری کوچک را منفی می کند
ثابت ها و بیت ماسک های خاص سریع تر. مقادیر مجاز برای REG هستند r43 و r63,
که استفاده از آن رجیستر را به عنوان یک ثبت ثابت مشخص می کند و هیچ، یعنی خیر
ثبت نام برای این منظور استفاده می شود. پیش فرض است -m1reg-هیچکدام.
ARC گزینه
گزینه های زیر نوع معماری که کد برای آن کامپایل می شود را کنترل می کنند:
بشکه-شفتر
دستورالعمل های پشتیبانی شده توسط شیفتر بشکه را ایجاد کنید. این پیش فرض است مگر اینکه
-mcpu=ARC601 در عمل است
-mcpu=پردازنده
نوع معماری، استفاده از ثبت، و پارامترهای زمان بندی دستورالعمل را برای پردازنده.
همچنین گزینه های نام مستعار میانبر برای سازگاری با عقب و
راحتی مقادیر پشتیبانی شده برای پردازنده هستند
ARC600
کامپایل برای ARC600. نام مستعار: -mA6, -mARC600.
ARC601
کامپایل برای ARC601. نام مستعار: -mARC601.
ARC700
کامپایل برای ARC700. نام مستعار: -mA7, -mARC700. این حالت پیش فرض در هنگام پیکربندی است
با --with-cpu=arc700.
-mdpfp
-mdpfp-compact
FPX: دستورالعمل های FPX Double Precision را ایجاد کنید، که برای اجرای فشرده تنظیم شده است.
-mdpfp-سریع
FPX: دستورالعمل های FPX Double Precision را ایجاد کنید، که برای اجرای سریع تنظیم شده است.
-mno-dpfp-lrsr
دستورالعمل های LR و SR را از استفاده از رجیسترهای اکستنشن FPX غیرفعال کنید.
-میا
دستورالعمل های حسابی توسعه یافته را ایجاد کنید. در حال حاضر فقط "divaw"، "adds"، "subs"،
و "sat16" پشتیبانی می شوند. این همیشه برای فعال است -mcpu=ARC700.
-mno-mpy
دستورالعمل های mpy را برای ARC700 تولید نکنید.
-mmul32x16
دستورالعمل های ضرب و مک 32x16 بیتی را ایجاد کنید.
-mmul64
دستورالعمل های mul64 و mulu64 را ایجاد کنید. فقط برای -mcpu=ARC600.
-mnorm
ایجاد دستورالعمل هنجار. این پیش فرض اگر است -mcpu=ARC700 در عمل است
-mspfp
-mspfp-compact
FPX: دستورالعمل های Single Precision FPX را ایجاد کنید، که برای اجرای فشرده تنظیم شده است.
-MSPFP سریع
FPX: دستورالعمل های Single Precision FPX را ایجاد کنید که برای اجرای سریع تنظیم شده است.
-msimd
تولید دستورالعمل های ARC SIMD را از طریق داخلی های خاص هدف فعال کنید. فقط معتبر
برای -mcpu=ARC700.
-msoft-float
این گزینه نادیده گرفته شد. فقط برای اهداف سازگاری ارائه شده است. نرم افزار
کد ممیز شناور به طور پیش فرض منتشر می شود و این پیش فرض می تواند توسط FPX لغو شود
گزینه ها؛ mspfp, mspfp-compact، یا mspfp-fast برای دقت تک، و mdpfp, mdpfp-
جمع و جور، یا mdpfp-fast برای دقت مضاعف
-mswap
دستورالعمل های مبادله را ایجاد کنید.
گزینه های زیر به اسمبلر منتقل می شوند و پیش پردازنده را نیز تعریف می کنند
نمادهای کلان
-mdsp-packa
برای فعال کردن پسوندهای DSP Pack A به اسمبلر منتقل شد. را نیز تنظیم می کند
نماد پیش پردازنده "__Xdsp_packa".
-mdvbf
برای فعال کردن پسوند پروانه ای دوگانه ویتربی به اسمبلر منتقل شد. همچنین
نماد پیش پردازنده "__Xdvbf" را تنظیم می کند.
-ملاک
برای فعال کردن پسوند Locked Load/Store Conditional به اسمبلر منتقل شد.
همچنین نماد پیش پردازنده "__Xlock" را تنظیم می کند.
-mmac-d16
به اسمبلر منتقل شد. همچنین نماد پیش پردازنده "__Xxmac_d16" را تنظیم می کند.
-mmac-24
به اسمبلر منتقل شد. همچنین نماد پیش پردازنده "__Xxmac_24" را تنظیم می کند.
-mrtsc
برای فعال کردن پسوند 64 بیتی Time-Stamp Counter به اسمبلر منتقل شد
دستورالعمل همچنین نماد پیش پردازنده "__Xrtsc" را تنظیم می کند.
mswape
به اسمبلر منتقل شد تا دستور الحاقی سفارش بایت مبادله را فعال کند.
همچنین نماد پیش پردازنده "__Xswape" را تنظیم می کند.
-متلفونی
برای فعال کردن دستورالعملهای عملوند دوگانه و تکی به اسمبلر منتقل شد
تلفن همچنین نماد پیش پردازنده "__Xtelephony" را تنظیم می کند.
-mxy
برای فعال کردن پسوند حافظه XY به اسمبلر منتقل شد. را نیز تنظیم می کند
نماد پیش پردازنده "__Xxy".
گزینه های زیر نحوه حاشیه نویسی کد اسمبلی را کنترل می کنند:
-نادرست کردن
دستورالعمل های اسمبلر را با آدرس های تخمینی حاشیه نویسی کنید.
-mannotate-align
توضیح دهید که چه ملاحظات همسویی منجر به تصمیم گیری برای یک دستورالعمل می شود
کوتاه یا بلند
گزینه های زیر به پیوند دهنده منتقل می شوند:
-مارکلینوکس
برای مشخص کردن استفاده از شبیه سازی "arclinux" به پیوند دهنده منتقل می شود. این گزینه
به طور پیش فرض در زنجیره های ابزار ساخته شده برای "arc-linux-uclibc" و فعال است
"arceb-linux-uclibc" زمانی را هدف قرار می دهد که پروفایل درخواستی نباشد.
-marclinux_prof
برای مشخص کردن استفاده از شبیه سازی "arclinux_prof" به پیوند دهنده منتقل می شود. این
گزینه به طور پیش فرض در زنجیره های ابزار ساخته شده برای "arc-linux-uclibc" فعال است و
"arceb-linux-uclibc" زمانی که پروفایل درخواست می شود هدف می گیرد.
گزینه های زیر معنای کد تولید شده را کنترل می کنند:
-mepilogue-cfi
تولید اطلاعات فریم تماس را برای اپیلوگ ها فعال کنید.
-mno-epilogue-cfi
تولید اطلاعات فریم تماس را برای اپیلوگ ها غیرفعال کنید.
تماس های طولانی
insns تماس را به عنوان تماس های غیرمستقیم ثبت کنید، بنابراین دسترسی کامل را فراهم کنید
محدوده آدرس 32 بیتی
-تماس های متوسط
از محدوده آدرس دهی کمتر از 25 بیت برای تماس ها استفاده نکنید، که افست موجود است
برای یک دستورالعمل شاخه و پیوند بدون قید و شرط. اجرای مشروط تابع
تماسها سرکوب میشوند تا امکان استفاده از محدوده 25 بیتی به جای محدوده 21 بیتی فراهم شود.
با شاخه و پیوند مشروط. این پیشفرض برای زنجیرههای ابزار ساخته شده برای آن است
اهداف "arc-linux-uclibc" و "arceb-linux-uclibc".
-mno-sdata
ارجاعات sdata تولید نکنید. این پیشفرض برای زنجیرههای ابزار ساخته شده برای آن است
اهداف "arc-linux-uclibc" و "arceb-linux-uclibc".
-mucb-mcount
ابزاری با تماس های mcount همانطور که در کد UCB استفاده می شود. یعنی شمارش را در فراخوان انجام دهید،
تماس گیرنده نیست به طور پیش فرض ابزار دقیق ARC در تماس گیرنده حساب می شود.
-mvolatile-cache
برای مراجع فرار از دسترسی های حافظه کش معمولی استفاده کنید. این پیش فرض است.
-mno-cache-cache
بای پس کش را برای مراجع فرار فعال کنید.
گزینه های زیر تولید کد دقیق را تنظیم کنید:
بدخیم تماس بگیرید
بهینه سازی تراز را برای دستورالعمل های تماس انجام دهید.
-mauto-modify-reg
استفاده از اصلاح قبل/پست با جابجایی ثبت را فعال کنید.
-mbbit-peephole
bbit peephole2 را فعال کنید.
-mno-brcc
این گزینه یک ورود به هدف خاص را غیرفعال می کند arc_reorg برای تولید "BRcc"
دستورالعمل ها. این هیچ تأثیری بر تولید "BRcc" که توسط پاس ترکیبی هدایت می شود ندارد.
-mcase-vector-pcrel
از جداول سوئیچ مربوط به کامپیوتر استفاده کنید - این کار کوتاه کردن میز کیس را امکان پذیر می کند. این است
پیش فرض برای -اواس.
mcompact-casesi
الگوی فشرده فشرده را فعال کنید. این پیش فرض برای است -اواس.
-mno-cond-exec
برای ایجاد دستورالعمل های اجرای مشروط، پاس خاص ARCompact را غیرفعال کنید. ناشی از
برای به تاخیر انداختن زمانبندی شکافها و برهمکنشهای بین اعداد عملوند، اندازههای تحت اللفظی،
طول دستورالعمل، و پشتیبانی از اجرای مشروط، مستقل از هدف
عبور برای تولید اجرای شرطی اغلب وجود ندارد، بنابراین پورت ARC a را نگه داشته است
پاس ویژه ای که سعی می کند اجرای مشروط بیشتری را تولید کند
فرصتها پس از تخصیص ثبت، کوتاه شدن شعبه و زمانبندی شکاف تاخیر
انجام شده است. این پاس به طور کلی، اما نه همیشه، عملکرد و کد را بهبود می بخشد
اندازه، به هزینه زمان اضافی کامپایل، به همین دلیل است که گزینه ای برای تغییر وجود دارد
آن را خاموش کنید. اگر با دستورات تماس بیش از مقدار مجاز آنها مشکل دارید
محدوده چون شرطی هستند، باید استفاده از آنها را در نظر بگیرید -تماس های متوسط
به جای آن.
-مرغ-cbranchsi
استفاده از پیش بارگیری مجدد الگوی cbranchsi را فعال کنید.
-mexpand-adddi
"adddi3" و "subdi3" را در زمان تولید rtl به "add.f"، "adc" و غیره گسترش دهید.
بارهای ترکیبی
استفاده از بارهای فهرست شده را فعال کنید. این می تواند مشکل ساز باشد زیرا برخی از بهینه سازها این کار را می کنند
سپس فرض کنید که فروشگاه های نمایه شده وجود دارند، که اینطور نیست.
-mlra
تخصیص ثبت محلی را فعال کنید. این هنوز برای ARC آزمایشی است، بنابراین به طور پیش فرض
کامپایلر از بارگذاری مجدد استاندارد (به عنوان مثال -mno-lra).
-mlra-priority-none
هیچ اولویتی برای ثبت های هدف مشخص نکنید.
-mlra-priority-compact
اولویت ثبت هدف را برای r0..r3 / r12..r15 نشان دهید.
-mlra-priority-noncompact
اولویت ثبت کننده هدف را برای r0..r3 / r12..r15 کاهش دهید.
-mno-millicode
هنگام بهینه سازی برای اندازه (استفاده از -اواس)، پیش درآمدها و پایانی هایی که باید ذخیره یا
بازیابی تعداد زیادی از رجیسترها اغلب با استفاده از فراخوانی به ویژه کوتاه می شوند
تابع در libgcc; این به عنوان یک نامیده می شود میلی کد صدا زدن. همانطور که این تماس ها می توانند مطرح شوند
مشکلات عملکرد، و/یا ایجاد مشکلات پیوند هنگام پیوند دادن به روشی غیراستاندارد،
این گزینه برای خاموش کردن تولید تماس میلیکد ارائه شده است.
کد مختلط
تخصیص رجیستر را برای کمک به تولید دستورالعمل 16 بیتی تغییر دهید. این به طور کلی دارد
اثر کاهش متوسط اندازه دستورالعمل در حین افزایش دستورالعمل
شمردن.
-mq-class
گزینه های دستورالعمل 'q' را فعال کنید. این پیش فرض برای است -اواس.
-mRcq
کنترل محدودیت Rcq را فعال کنید - اکثر تولید کدهای کوتاه به این بستگی دارد. این هست
پیشفرض.
-mRcw
کنترل محدودیت Rcw را فعال کنید - ccfsm condexec بیشتر به این بستگی دارد. این است
به طور پیش فرض
-msize-level=سطح
بهینه سازی اندازه دقیق با توجه به طول دستورالعمل و تراز. در
مقادیر شناخته شده برای سطح هستند:
0 بدون بهینه سازی اندازه این سطح منسوخ شده و مانند آن رفتار می شود 1.
1 دستورالعمل های کوتاه به طور فرصت طلبانه استفاده می شود.
2 علاوه بر این، تراز حلقه ها و کد پس از موانع حذف می شوند.
3 علاوه بر این، تراز داده های اختیاری حذف می شود و گزینه Os فعال شده است.
این به صورت پیش فرض است 3 چه زمانی -اواس در حال اجرا است. در غیر این صورت، رفتار زمانی که این نیست
مجموعه معادل سطح است 1.
-mtune=پردازنده
تنظیم پارامترهای زمانبندی دستورالعمل برای پردازنده، نادیده گرفتن هر مورد ضمنی توسط -mcpu=.
مقادیر پشتیبانی شده برای پردازنده هستند
ARC600
برای cpu ARC600 تنظیم کنید.
ARC601
برای cpu ARC601 تنظیم کنید.
ARC700
برای cpu ARC700 با بلوک ضریب استاندارد تنظیم کنید.
ARC700-xmac
برای پردازنده ARC700 با بلوک XMAC تنظیم کنید.
ARC725D
برای پردازنده ARC725D تنظیم کنید.
ARC750D
برای پردازنده ARC750D تنظیم کنید.
-multcost=تعداد
هزینه در نظر گرفته شده برای یک دستور ضرب، با 4 برابر بودن با یک دستورالعمل معمولی
-munalign-prob-threshold=احتمال
آستانه احتمال را برای شاخه های بدون تراز تنظیم کنید. هنگام تنظیم برای ARC700 و
با بهینه سازی سرعت، شاخه های بدون شکاف تاخیر پر شده ترجیحا ساطع می شوند
بدون تراز و طولانی، مگر اینکه نمایه نشان دهد که احتمال شعبه به
گرفته شود در زیر آمده است احتمال. پیش فرض (REG_BR_PROB_BASE/2)، یعنی 5000 است.
گزینه های زیر برای سازگاری با عقب نگهداری می شوند، اما اکنون منسوخ شده اند
و در نسخه بعدی حذف خواهد شد:
-مارگونات
FPX منسوخ شده
-mbig-endian
-EB کامپایل کد برای اهداف بزرگ اندیان. استفاده از این گزینه ها اکنون منسوخ شده است. کاربران
اگر کد بزرگ endian می خواهید، باید از اهداف "arceb-elf32" و "arceb-linux-uclibc" استفاده کنید.
هنگام ساخت زنجیره ابزار، که big-endian پیش فرض آن است.
-mlittle-endian
-The کامپایل کد برای اهداف اندیان کوچک. استفاده از این گزینه ها اکنون منسوخ شده است.
کاربرانی که خواهان کد کمی اندین هستند باید از "arc-elf32" و "arc-linux-uclibc" استفاده کنند.
در هنگام ساخت زنجیره ابزار، که کمی endian پیشفرض است، هدفگذاری میکند.
-barrel_shifter
جایگزین توسط بشکه-شفتر
-mdpfp_compact
جایگزین توسط -mdpfp-compact
-mdpfp_fast
جایگزین توسط -mdpfp-سریع
-mdsp_packa
جایگزین توسط -mdsp-packa
-mEA
جایگزین توسط -میا
-mmac_24
جایگزین توسط -mmac-24
-mmac_d16
جایگزین توسط -mmac-d16
-MSPFP_COMPACT
جایگزین توسط -mspfp-compact
-mspfp_fast
جایگزین توسط -MSPFP سریع
-mtune=پردازنده
ارزشها ARC600, ARC601, ARC700 و arc700-xmac برای پردازنده جایگزین می شوند با ARC600, ARC601,
ARC700 و ARC700-xmac به ترتیب
-MultCost =تعداد
جایگزین توسط چند هزینه.
ARM گزینه
اینها -m گزینه ها برای معماری ماشین های پیشرفته RISC (ARM) تعریف شده اند:
-mabi=نام
کد برای ABI مشخص شده تولید کنید. مقادیر مجاز عبارتند از: apcs-gnu, atpcs, aapcs,
aapcs-linux و iwmmxt.
-mapcs-frame
یک قاب پشته ای ایجاد کنید که با استاندارد تماس رویه ARM برای همه سازگار باشد
توابع، حتی اگر این به شدت برای اجرای صحیح کد ضروری نباشد.
تعیین -fomit-frame-pointer با این گزینه باعث می شود که قاب های پشته ای نباشند
برای توابع برگ تولید شده است. پیش فرض است -mno-apcs-frame.
-mapcs
این مترادف برای -mapcs-frame.
-mthumb-interwork
کدی را ایجاد کنید که از تماس بین مجموعه دستورات ARM و Thumb پشتیبانی می کند.
بدون این گزینه، در معماری های pre-v5، دو مجموعه دستورالعمل نمی توانند باشند
به طور قابل اعتماد در داخل یک برنامه استفاده می شود. پیش فرض است -mno-thumb-interwork، از آنجایی که کمی
کد بزرگتر زمانی تولید می شود -mthumb-interwork مشخص شده است. در تنظیمات AAPCS
این گزینه بی معنی است
-mno-sched-prolog
از ترتیب مجدد دستورالعمل ها در پیش درآمد تابع یا ادغام آنها جلوگیری کنید
آن دستورالعمل ها با دستورالعمل های موجود در بدنه تابع. این بدان معنی است که همه
توابع با مجموعه ای قابل تشخیص از دستورالعمل ها (یا در واقع یکی از انتخاب ها) شروع می شوند
از مجموعه کوچکی از پیش درآمدهای مختلف عملکرد)، و این اطلاعات می تواند مورد استفاده قرار گیرد
شروع توابع را در داخل یک قطعه کد اجرایی قرار دهید. پیش فرض است
-msched-prolog.
-mfloat-abi=نام
مشخص می کند که از کدام ABI ممیز شناور استفاده شود. مقادیر مجاز عبارتند از: نرم, softfp و
سخت.
تعیین نرم باعث می شود GCC خروجی حاوی فراخوان های کتابخانه ای برای شناور تولید کند.
عملیات نقطه ای softfp امکان تولید کد با استفاده از ممیز شناور سخت افزاری را فراهم می کند
دستورالعمل ها، اما همچنان از قراردادهای فراخوانی نرم شناور استفاده می کند. سخت اجازه می دهد تا
تولید دستورالعمل های ممیز شناور و از قراردادهای فراخوانی خاص FPU استفاده می کند.
پیش فرض بستگی به پیکربندی هدف خاص دارد. توجه داشته باشید که هارد شناور
و ABI های شناور نرم با پیوند سازگار نیستند. شما باید کل برنامه خود را با
همان ABI، و پیوند با مجموعه ای از کتابخانه های سازگار.
-mlittle-endian
کدی را برای پردازنده ای که در حالت کمی اندین کار می کند ایجاد کنید. این پیش فرض برای است
تمام تنظیمات استاندارد
-mbig-endian
تولید کد برای پردازنده ای که در حالت big-endian اجرا می شود. پیش فرض کامپایل است
کد برای یک پردازنده کوچک اندین
-mwords-little-endian
این گزینه فقط در هنگام تولید کد برای پردازنده های بزرگ اندیان اعمال می شود. تولید می کنند
کد برای ترتیب کلمات کمی اندین اما ترتیب بایت های بزرگ اندین. یعنی یک بایت
ترتیب فرم 32107654. توجه: این گزینه فقط در صورت نیاز باید استفاده شود
سازگاری با کد برای پردازنده های ARM بزرگ endian تولید شده توسط نسخه های
کامپایلر قبل از 2.8. این گزینه اکنون منسوخ شده است.
-مارس=نام
این نام معماری ARM هدف را مشخص می کند. GCC از این نام استفاده می کند
تعیین کنید که چه نوع دستورالعمل هایی می تواند هنگام تولید کد اسمبلی صادر کند. این
گزینه را می توان همراه یا به جای آن استفاده کرد -mcpu= گزینه. جایز است
اسامی عبارتند از: armv2, armv2a, armv3, armv3m, armv4, armv4t, armv5, armv5t, armv5e,
armv5te, armv6, armv6j, armv6t2, armv6z, armv6zk, armv6-m, armv7, armv7-a, armv7-r,
armv7-m, armv7e-m, armv7ve, armv8-a, armv8-a+crc, iwmmxt, iwmmxt2, ep9312.
-مارچ=armv7ve معماری armv7-a با پسوندهای مجازی سازی است.
-مارس=armv8-a+crc تولید کد را برای معماری ARMv8-A همراه با
پسوندهای اختیاری CRC32
-مارس=بومی باعث می شود کامپایلر به طور خودکار معماری بیلد را شناسایی کند
کامپیوتر. در حال حاضر، این ویژگی فقط در گنو/لینوکس پشتیبانی میشود و نه همه
معماری ها شناخته می شوند. اگر تشخیص خودکار ناموفق باشد، گزینه هیچ ندارد
اثر.
-mtune=نام
این گزینه نام پردازنده ARM مورد نظر را که GCC باید برای آن تنظیم کند، مشخص می کند
عملکرد کد برای برخی از پیاده سازی های ARM می توان عملکرد بهتری داشت
با استفاده از این گزینه به دست می آید. اسامی مجاز عبارتند از: arm2, arm250, arm3, arm6,
arm60, arm600, arm610, arm620, arm7, بازو 7 متر, arm7d, arm7dm, arm7di, arm7dmi, arm70,
arm700, arm700i, arm710, arm710c, arm7100, arm720, arm7500, arm7500fe, arm7tdmi,
arm7tdmi-s, arm710t, arm720t, arm740t, بازوی قوی, Strongarm110, Strongarm1100,
Strongarm1110, arm8, arm810, arm9, arm9e, arm920, arm920t, arm922t, arm946e-s,
arm966e-s, arm968e-s, arm926ej-s, arm940t, arm9tdmi, arm10tdmi, arm1020t, arm1026ej-s,
arm10e, arm1020e, arm1022e, arm1136j-s, arm1136jf-s, mpcore, mpcorenovfp, arm1156t2-s,
arm1156t2f-s, arm1176jz-s, arm1176jzf-s, قشر-a5, قشر-a7, قشر-a8, قشر-a9,
قشر-a12, قشر-a15, قشر-a53, قشر-a57, cortex-r4, cortex-r4f, cortex-r5,
cortex-r7, cortex-m4, cortex-m3, cortex-m1, cortex-m0, cortex-m0plus, marvell-pj4,
xscale, iwmmxt, iwmmxt2, ep9312, fa526, fa626, fa606te, fa626te, fmp626, fa726te.
علاوه بر این، این گزینه می تواند مشخص کند که GCC باید عملکرد کد را تنظیم کند
برای یک سیستم big.LITTLE. اسامی مجاز عبارتند از: cortex-a15.cortex-a7,
cortex-a57.cortex-a53.
-mtune=generic-قوس مشخص می کند که GCC باید عملکرد را برای ترکیبی از تنظیم کند
پردازنده ها در معماری قوس. هدف تولید کدی است که به خوبی روی آن اجرا شود
محبوب ترین پردازنده های فعلی، تعادل بین بهینه سازی هایی که به نفع برخی هستند
CPU در محدوده، و اجتناب از مشکلات عملکرد دیگر CPU. اثرات از
این گزینه ممکن است در نسخه های بعدی GCC تغییر کند، زیرا مدل های CPU می آیند و می روند.
-mtune=بومی باعث می شود کامپایلر به طور خودکار CPU کامپیوتر ساخت را شناسایی کند. در
در حال حاضر، این ویژگی فقط در گنو/لینوکس پشتیبانی می شود و همه معماری ها پشتیبانی نمی شوند
شناسایی شده. اگر تشخیص خودکار ناموفق باشد، گزینه تاثیری ندارد.
-mcpu=نام
این نام پردازنده ARM مورد نظر را مشخص می کند. GCC از این نام برای استخراج استفاده می کند
نام معماری ARM هدف (مثل اینکه توسط -مارس) و پردازنده ARM
تایپ کنید که برای عملکرد تنظیم شود (مثل اینکه توسط -mtune). جایی که این گزینه
همراه با استفاده می شود -مارس or -mtune، آن گزینه ها بر گزینه ها اولویت دارند
بخش مناسب این گزینه
نام های مجاز برای این گزینه مانند نام های برای است -mtune.
-mcpu=generic-قوس نیز جایز است و معادل است -مارس=قوس
-mtune=generic-قوساست. دیدن -mtune برای اطلاعات بیشتر.
-mcpu=بومی باعث می شود کامپایلر به طور خودکار CPU کامپیوتر ساخت را شناسایی کند. در
در حال حاضر، این ویژگی فقط در گنو/لینوکس پشتیبانی می شود و همه معماری ها پشتیبانی نمی شوند
شناسایی شده. اگر تشخیص خودکار ناموفق باشد، گزینه تاثیری ندارد.
-mfpu=نام
این مشخص می کند که چه سخت افزاری با ممیز شناور (یا شبیه سازی سخت افزار) در دسترس است
هدف. اسامی مجاز عبارتند از: vfp, vfpv3, vfpv3-fp16, vfpv3-d16, vfpv3-d16-fp16,
vfpv3xd, vfpv3xd-fp16, گاز نئون, نئون-fp16, vfpv4, vfpv4-d16, fpv4-sp-d16, نئون-vfpv4,
fp-armv8, neon-fp-armv8و crypto-neon-fp-armv8.
If -msoft-float مشخص شده است این فرمت مقادیر ممیز شناور را مشخص می کند.
اگر سخت افزار ممیز شناور انتخابی شامل پسوند NEON باشد (به عنوان مثال -mfpu=گاز نئون),
توجه داشته باشید که عملیات ممیز شناور توسط عبور خودکار GCC ایجاد نمی شود
مگر -بهینهسازیهای ریاضی و سرگرمکننده نیز مشخص شده است. این به دلیل سخت افزار NEON است
استاندارد IEEE 754 را برای محاسبات ممیز شناور (در
مقادیر غیر طبیعی خاص به عنوان صفر در نظر گرفته می شوند)، بنابراین استفاده از دستورالعمل های NEON ممکن است
منجر به از دست دادن دقت شود.
-mfp16-format=نام
فرمت نوع ممیز شناور نیمه دقیق "__fp16" را مشخص کنید. جایز است
نام ها هستند هیچ, یعنیو جایگزین; پیش فرض است هیچ، در این صورت "__fp16"
نوع تعریف نشده است
-mstructure-size-boundary=n
اندازه تمام ساختارها و اتحادیه ها به مضربی از تعداد گرد می شود
بیت های تنظیم شده توسط این گزینه. مقادیر مجاز 8، 32 و 64 هستند. مقدار پیش فرض
برای زنجیره های ابزار مختلف متفاوت است. برای زنجیره ابزار هدف COFF مقدار پیش فرض است
8. مقدار 64 تنها در صورتی مجاز است که ABI اصلی آن را پشتیبانی کند.
تعیین یک عدد بزرگتر می تواند کد سریعتر و کارآمدتر تولید کند، اما همچنین می تواند
حجم برنامه را افزایش دهید مقادیر مختلف به طور بالقوه ناسازگار هستند.
کد کامپایل شده با یک مقدار لزوماً نمی تواند انتظار داشته باشد که با کد یا کتابخانه ها کار کند
اگر با استفاده از ساختارها یا اتحادیه ها اطلاعات را مبادله کنند، با مقدار دیگری کامپایل می شود.
-mabort-on-noreturn
یک فراخوانی برای تابع "abort" در انتهای یک تابع "noreturn" ایجاد کنید. این است
اگر تابع بخواهد برگردد اجرا می شود.
تماس های طولانی
-mno-long-تماس
به کامپایلر میگوید ابتدا با بارگذاری آدرس تابع، فراخوانیهای تابع را انجام دهد
وارد یک ثبات شده و سپس یک فراخوانی زیر روال را روی این ثبات انجام می دهد. این
اگر تابع هدف خارج از آدرس دهی 64 مگابایتی باشد، سوئیچ مورد نیاز است
محدوده دستورالعمل فراخوانی مبتنی بر افست.
حتی اگر این سوئیچ فعال باشد، همه تماسهای عملکرد به تماسهای طولانی تبدیل نمیشوند.
اکتشافی این است که توابع ایستا، توابعی که دارای تماس کوتاه صفت،
توابعی که در محدوده a هستند #پراگما no_long_calls بخشنامه، و
توابعی که تعاریف آنها قبلاً در کامپایل فعلی کامپایل شده است
واحد به تماس طولانی تبدیل نمی شود. استثناهای این قاعده بسیار ضعیف هستند
تعاریف تابع، توابع با تماس طولانی صفت یا بخش صفت،
و توابعی که در محدوده الف هستند #پراگما طولانی_تماس بخشنامه همیشه هستند
به تماس های طولانی تبدیل شد
این ویژگی به طور پیش فرض فعال نیست. مشخص کردن -mno-long-تماس بازیابی
رفتار پیش فرض، مانند قرار دادن فراخوانی تابع در محدوده a #پراگما
تماس های طولانی بخشنامه توجه داشته باشید که این سوئیچ ها هیچ تاثیری بر نحوه کامپایلر ندارند
کدی را برای رسیدگی به فراخوانی تابع از طریق نشانگرهای تابع تولید می کند.
-msingle-pic-base
رجیستر مورد استفاده برای آدرس دهی PIC را به عنوان فقط خواندنی در نظر بگیرید، نه اینکه آن را در آن بارگیری کنید
مقدمه برای هر تابع سیستم زمان اجرا مسئول اولیه سازی این است
قبل از شروع اجرا با یک مقدار مناسب ثبت نام کنید.
-mpic-register=REG
رجیستر مورد استفاده برای آدرس دهی PIC را مشخص کنید. برای کیس پایه PIC استاندارد،
پیش فرض هر ثبات مناسبی است که توسط کامپایلر تعیین می شود. برای پایه PIC تک
مورد، پیش فرض است R9 اگر هدف مبتنی بر EABI باشد یا چک کردن پشته فعال باشد،
در غیر این صورت پیش فرض است R10.
-mpic-data-is-text-relative
فرض کنید که هر بخش داده نسبت به بخش متن در زمان بارگذاری است. از این رو،
این امکان آدرس دهی داده ها را با استفاده از عملیات مربوط به رایانه شخصی فراهم می کند. این گزینه به صورت پیش فرض روشن است
برای اهدافی غیر از 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}
فریم فریم فریم، آی پی، #4
هنگام اجرای پشته پشته، کد می تواند مقدار "pc" ذخیره شده در "fp +" را بازرسی کند.
0. اگر تابع ردیابی به مکان "pc - 12" نگاه کند و 8 بیت بالا هستند
تنظیم کنید، سپس می دانیم که یک نام تابع بلافاصله قبل از آن تعبیه شده است
مکان و دارای طول "((pc[-3]) & 0xff000000) است.
-مهم
-مارم
بین تولید کدی که در حالت های ARM و Thumb اجرا می شود، انتخاب کنید. پیش فرض برای
اکثر تنظیمات برای تولید کدی است که در حالت ARM اجرا می شود، اما به طور پیش فرض
را می توان با پیکربندی GCC با --with-mode=بود گزینه پیکربندی
-mtpcs-frame
یک قاب پشته ای ایجاد کنید که با استاندارد فراخوانی روش شست مطابقت دارد
همه عملکردهای غیر برگ (یک تابع برگ تابعی است که تابع دیگری را فراخوانی نمی کند
توابع.) پیش فرض است -mno-tpcs-frame.
-mtpcs-leaf-frame
یک قاب پشته ای ایجاد کنید که با استاندارد فراخوانی روش شست مطابقت دارد
تمام عملکردهای برگ (یک تابع برگ تابعی است که هیچ تابع دیگری را فراخوانی نمی کند.)
پیش فرض این است -mno-apcs-leaf-frame.
-mcallee-super-interworking
به تمام توابع قابل مشاهده خارجی در فایل در حال کامپایل یک دستورالعمل ARM می دهد
هدر را تنظیم کنید که قبل از اجرای بقیه عملکرد به حالت Thumb تغییر کند.
این اجازه می دهد تا این توابع از کدهای غیر متقابل فراخوانی شوند. این گزینه است
در پیکربندیهای AAPCS معتبر نیست زیرا کار درونی بهطور پیشفرض فعال است.
-mcaller-super-interworking
به تماس ها از طریق نشانگرهای تابع (از جمله توابع مجازی) اجازه می دهد تا به درستی اجرا شوند
صرف نظر از اینکه کد هدف برای کار درونی کامپایل شده است یا خیر.
هزینه اجرای یک نشانگر تابع در صورتی که این گزینه وجود داشته باشد، سربار کمی دارد
فعال شده است. این گزینه در پیکربندیهای AAPCS معتبر نیست زیرا interworking معتبر است
به طور پیش فرض فعال است
-mtp=نام
مدل دسترسی را برای نشانگر ذخیرهسازی محلی رشته مشخص کنید. مدل های معتبر هستند
نرم، که تماس هایی به "__aeabi_read_tp" ایجاد می کند، cp15، که نخ را واکشی می کند
اشاره گر مستقیماً از "cp15" (در معماری arm6k پشتیبانی می شود)، و خودکار، که
از بهترین روش موجود برای پردازنده انتخاب شده استفاده می کند. تنظیمات پیش فرض است
خودکار.
-mtls-dialect=گویش
لهجه مورد استفاده برای دسترسی به حافظه محلی رشته را مشخص کنید. دو گویشهستند
پشتیبانی---گوزن یالدار و gnu2. گوزن یالدار گویش طرح اصلی گنو را برای آن انتخاب می کند
پشتیبانی از مدل های پویا TLS محلی و جهانی در gnu2 گویش گنو را انتخاب می کند
طرح توصیفگر، که عملکرد بهتری را برای کتابخانه های مشترک ارائه می دهد. گنو
طرح توصیفگر با طرح اصلی سازگار است، اما نیاز به جدید دارد
اسمبلر، لینکر و پشتیبانی کتابخانه. مدل های TLS exec اولیه و محلی هستند
تحت تأثیر این گزینه قرار نگرفته و همیشه از طرح اصلی استفاده کنید.
-mword-relocations
فقط جابجایی های مطلق را روی مقادیر به اندازه کلمه ایجاد کنید (یعنی R_ARM_ABS32). این هست
به طور پیش فرض در اهداف (uClinux، SymbianOS) که در آن لودر زمان اجرا اعمال می شود، فعال می شود.
این محدودیت و چه زمانی -fpic or -fPIC مشخص شده است.
-mfix-cortex-m3-ldrd
برخی از هستههای Cortex-M3 میتوانند باعث خرابی دادهها با دستورالعملهای "ldrd" شوند
از رجیسترهای مقصد و پایه همپوشانی استفاده می شود. این گزینه از تولید جلوگیری می کند
این دستورالعمل ها این گزینه به طور پیش فرض در زمانی فعال می شود -mcpu = Cortex-M3 is
مشخص شده.
-دسترسی چندجانبه
-mno-unaligned-access
خواندن و نوشتن مقادیر 16 و 32 بیتی از آدرس ها را فعال (یا غیرفعال می کند)
که 16 یا 32 بیت تراز نیستند. به طور پیش فرض دسترسی بدون تراز برای همه غیرفعال است
pre-ARMv6 و تمام معماری های ARMv6-M و برای تمام معماری های دیگر فعال است. اگر
دسترسی بدون تراز فعال نیست، سپس کلمات موجود در ساختارهای داده بسته بندی شده قابل دسترسی خواهند بود
یک بایت در یک زمان
ویژگی ARM "Tag_CPU_unaligned_access" در فایل شی تولید شده تنظیم خواهد شد.
به درست یا نادرست، بسته به تنظیمات این گزینه. در صورت عدم تراز
دسترسی فعال است سپس نماد پیش پردازنده "__ARM_FEATURE_UNALIGNED" نیز خواهد بود
تعریف شده است.
-mneon-for-64bit
استفاده از نئون را برای مدیریت عملیات اسکالر 64 بیتی فعال می کند. این به طور پیش فرض غیرفعال است
از آنجایی که هزینه انتقال داده ها از ثبات های اصلی به نئون بالا است.
mslow-flash-data
فرض کنید بارگیری داده ها از فلش کندتر از واکشی دستورالعمل است. بنابراین تحت اللفظی
بار برای عملکرد بهتر به حداقل می رسد. این گزینه فقط زمانی پشتیبانی می شود که
کامپایل برای نمایه M ARMv7 و به طور پیش فرض خاموش است.
آن را محدود کن
تولید بلوک های IT را برای مطابقت با قوانین ARMv8 محدود می کند. بلوک های فناوری اطلاعات می توانند
فقط شامل یک دستورالعمل 16 بیتی از مجموعه منتخبی از دستورالعمل ها است. این
گزینه به طور پیش فرض برای حالت ARMv8 Thumb روشن است.
APR گزینه
این گزینه ها برای پیاده سازی AVR تعریف شده اند:
-mmcu=mcu
معماری مجموعه دستورات Atmel AVR (ISA) یا نوع MCU را مشخص کنید.
پیش فرض این گزینه @tie{}"avr2" است.
GCC از دستگاه های AVR و ISA های زیر پشتیبانی می کند:
"avr2"
دستگاههای «کلاسیک» با حداکثر 8@tie{}کی بایت حافظه برنامه. mcu@tie{}= "attiny22"،
"attiny26", "at90c8534", "at90s2313", "at90s2323", "at90s2333", "at90s2343",
"at90s4414", "at90s4433", "at90s4434", "at90s8515", "at90s8535".
"avr25"
دستگاههای «کلاسیک» با حداکثر 8@tie{}KB حافظه برنامه و با «MOVW»
دستورالعمل mcu@tie{}= "ata5272"، "ata6289"، "attiny13"، "attiny13a"،
"attiny2313"، "attiny2313a"، "attiny24"، "attiny24a"، "attiny25"، "attiny261"،
"attiny261a"، "attiny43u"، "attiny4313"، "attiny44"، "attiny44a"، "attiny45"،
"attiny461"، "attiny461a"، "attiny48"، "attiny84"، "attiny84a"، "attiny85"،
"attiny861"، "attiny861a"، "attiny87"، "attiny88"، "at86rf401".
"avr3"
دستگاههای "کلاسیک" با حافظه برنامه 16@tie{}KiB تا 64@tie{}KiB.
mcu@tie{}= "at43usb355"، "at76c711".
"avr31"
دستگاه های "کلاسیک" با 128@tie{}KiB حافظه برنامه. mcu@tie{}= "atmega103"،
"at43usb320".
"avr35"
دستگاههای "کلاسیک" با حافظه برنامه 16@tie{}KiB تا 64@tie{}KiB و با
دستورالعمل "MOVW". mcu@tie{}= "ata5505"، "atmega16u2"، "atmega32u2"،
"atmega8u2"، "attiny1634"، "attiny167"، "at90usb162"، "at90usb82".
"avr4"
دستگاههای «پیشرفته» با حداکثر 8@tie{}کی بایت حافظه برنامه. mcu@tie{}= "ata6285"،
"ata6286"، "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{}= "ata5790"، "ata5790n"، "ata5795"، "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"، "atmega26hvg"، "atmega32"، "atmega32a"، "atmega32c1"،
"atmega32hvb"، "atmega32hvbrevb"، "atmega32m1"، "atmega32u4"، "atmega32u6"،
"atmega323"، "atmega324a"، "atmega324p"، "atmega324pa"، "atmega325"، "atmega325a"،
"atmega325p"، "atmega3250"، "atmega3250a"، "atmega3250p"، "atmega3250pa"،
"atmega328"، "atmega328p"، "atmega329"، "atmega329a"، "atmega329p"، "atmega329pa"،
"atmega3290"، "atmega3290a"، "atmega3290p"، "atmega3290pa"، "atmega406"،
"atmega48hvf"، "atmega64"، "atmega64a"، "atmega64c1"، "atmega64hve"، "atmega64m1"،
"atmega64rfa2"، "atmega64rfr2"، "atmega640"، "atmega644"، "atmega644a"،
"atmega644p"، "atmega644pa"، "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"، "atmega1280"، "atmega1281"، "atmega1284"،
"atmega1284p", "at90can128", "at90usb1286", "at90usb1287".
"avr6"
دستگاههای «پیشرفته» با رایانه شخصی 3 بایت، یعنی با بیش از 128@tie{}KB برنامه
حافظه است. mcu@tie{}= "atmega2560"، "atmega2561".
"avrxmega2"
دستگاه های "XMEGA" با حافظه برنامه بیش از 8@tie{}KiB و حداکثر 64@tie{}KiB.
mcu@tie{}= "atmxt112sl"، "atmxt224"، "atmxt224e"، "atmxt336s"، "atxmega16a4"،
"atxmega16a4u", "atxmega16c4", "atxmega16d4", "atxmega32a4", "atxmega32a4u",
"atxmega32c4", "atxmega32d4", "atxmega32e5", "atxmega32x1".
"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 رم. mcu@tie{}= "atxmega64a1"،
"atxmega64a1u".
"avrxmega6"
دستگاه های "XMEGA" با بیش از 128@tie{}KiB حافظه برنامه. mcu@tie{}=
"atmxt540s"، "atmxt540sreva"، "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{}کی بایت رم. mcu@tie{}= "atxmega128a1"، "atxmega128a1u"، "atxmega128a4u".
"avr1"
این ISA توسط حداقل هسته AVR پیاده سازی شده و فقط برای اسمبلر پشتیبانی می شود.
mcu@tie{}= "attiny11"، "attiny12"، "attiny15"، "attiny28"، "at90s1200".
تجمع-args
آرگومان های تابع خروجی را جمع آوری کنید و فضای پشته مورد نیاز را بدست آورید/آزاد کنید
آرگومان های تابع خروجی یک بار در مقدمه/موارض تابع. بدون این گزینه،
آرگومان های خروجی قبل از فراخوانی یک تابع فشار داده می شوند و پس از آن ظاهر می شوند.
ظاهر کردن آرگومانها پس از فراخوانی تابع میتواند در AVR گران تمام شود
انباشتن فضای پشته ممکن است به فایل های اجرایی کوچکتری منجر شود زیرا آرگومان ها نیاز دارند
پس از چنین فراخوانی تابعی از پشته حذف نشود.
این گزینه می تواند منجر به کاهش اندازه کد برای عملکردهایی شود که چندین تماس را انجام می دهند
توابعی که آرگومان های خود را در پشته دریافت می کنند مانند فراخوانی توابع printf مانند.
-branch-cost=هزینه
هزینه های انشعاب را برای دستورالعمل های انشعاب مشروط به تنظیم کنید هزینه. ارزش های معقول
برای هزینه اعداد صحیح کوچک و غیر منفی هستند. هزینه شعبه پیش فرض 0 است.
-mcall-prologues
توابع پیشگفتار/اپیلوگها به عنوان فراخوانی به برنامههای فرعی مناسب گسترش مییابند. کد
اندازه کوچکتر است
-mint8
"int" را 8 بیتی صحیح فرض کنید. این روی اندازههای همه نوع تأثیر میگذارد: یک "char" 1 است
بایت، "int" 1 بایت، "long" 2 بایت و "long long" 4 بایت است. لطفا
توجه داشته باشید که این گزینه با استانداردهای C مطابقت ندارد، اما باعث کوچکتر شدن آن می شود
اندازه کد
-mno-وقفه می کند
کد تولید شده با وقفه های سخت افزاری سازگار نیست. اندازه کد کوچکتر است.
-آرامش کن
سعی کنید پاسخ "CALL" را جایگزین کنید. دستورالعمل "JMP" توسط "RCALL" کوتاهتر پاسخ. "RJMP"
دستورالعمل در صورت وجود تنظیم "-mrelax" فقط گزینه "--relax" را به آن اضافه می کند
خط فرمان linker هنگامی که پیوند دهنده فراخوانی می شود.
شل کردن پرش توسط پیوند دهنده انجام می شود زیرا قبلاً جبران پرش شناخته نشده بود
کد واقع شده است. بنابراین، کد اسمبلر تولید شده توسط کامپایلر یکسان است،
اما دستورالعمل های موجود در فایل اجرایی ممکن است با دستورالعمل های اسمبلر متفاوت باشد
کد
در صورت نیاز به پیوندهای خرد، Relaxing باید روشن شود، به بخش "EIND" و
پیوندهای خرد زیر.
-msp8
رجیستر اشاره گر پشته را به عنوان یک ثبات 8 بیتی در نظر بگیرید، یعنی بایت بالا را در نظر بگیرید
نشانگر پشته صفر است. به طور کلی، نیازی به تنظیم این گزینه با دست ندارید.
این گزینه به صورت داخلی توسط کامپایلر برای انتخاب و ساخت مولتی لیب برای آن استفاده می شود
معماری های "avr2" و "avr25". این معماری ها دستگاه ها را با و بدون ترکیب می کنند
"SPH". برای هر تنظیمی غیر از "-mmcu=avr2" یا "-mmcu=avr25" درایور کامپایلر
این گزینه را از خط فرمان کامپایلر اضافه یا حذف خواهد کرد، زیرا
سپس کامپایلر می داند که آیا دستگاه یا معماری دارای نشانگر پشته 8 بیتی است یا خیر
ثبت نام "SPH" وجود ندارد یا خیر.
-Mstrict-X
از ثبت آدرس "X" به روشی که سخت افزار پیشنهاد می کند استفاده کنید. این به این معنی است که "X" است
فقط در آدرس دهی غیر مستقیم، پس از افزایش یا قبل از کاهش استفاده می شود.
بدون این گزینه، ثبات "X" ممکن است به همان روشی که "Y" یا "Z" استفاده می شود
سپس توسط دستورالعمل های اضافی شبیه سازی می شود. به عنوان مثال، بارگذاری یک مقدار با
آدرس دهی "X+const" با یک "const < 64" غیر منفی کوچک به یک ثبات Rn is
انجام شده است
adiw r26, const ; X += Const
ld ، ایکس ؛ = *X
sbiw r26, const ; X - = ثابت
-مدی استک
فقط 8@tie{}بیت های پایینی نشانگر پشته را تغییر دهید.
-Waddr-space-convert
هشدار در مورد تبدیل بین فضاهای آدرس در موردی که آدرس حاصل می شود
فضا در فضای آدرس ورودی موجود نیست.
"EIND" و دستگاه هایی با بیش از 128 کیلو بایت فلش
نشانگرها در پیاده سازی 16@tie{}بیت عرض دارند. آدرس یک تابع یا برچسب
به عنوان آدرس کلمه نمایش داده می شود به طوری که پرش ها و تماس های غیر مستقیم می توانند هر کدی را هدف قرار دهند
آدرس در محدوده 64@tie{}کلمات Ki.
به منظور تسهیل پرش غیرمستقیم در دستگاههای با بیش از 128@tie{}کی بایت
فضای حافظه برنامه، یک ثبات تابع خاص به نام "EIND" وجود دارد که به عنوان کار می کند
مهم ترین بخش از آدرس هدف زمانی که دستورالعمل های "EICALL" یا "EIJMP" هستند
استفاده شده.
پرش ها و تماس های غیرمستقیم در این دستگاه ها به شرح زیر توسط کامپایلر انجام می شود و می باشد
مشروط به برخی محدودیت ها:
· کامپایلر هرگز "EIND" را تنظیم نمی کند.
· کامپایلر به طور ضمنی از "EIND" در دستورالعمل های "EICALL"/"EIJMP" استفاده می کند یا ممکن است بخواند
"EIND" به طور مستقیم به منظور تقلید یک تماس غیر مستقیم / پرش با استفاده از "RET"
دستورالعمل
· کامپایلر فرض می کند که "EIND" هرگز در طول کد راه اندازی یا در طول آن تغییر نمی کند
کاربرد. به طور خاص، "EIND" در عملکرد یا وقفه ذخیره/بازیابی نمی شود
مقدمه/مخاطره روتین خدمات.
· برای فراخوانی غیرمستقیم توابع و گفتوهای محاسبه شده، پیوند دهنده تولید می کند خرد خرد. خرد
پدهای پرش گاهی اوقات نیز نامیده می شوند ترامپولین ها. بنابراین، تماس غیرمستقیم/پرش به
چنین خرد خرد حاوی یک پرش مستقیم به آدرس مورد نظر است.
· آرامش پیوند دهنده باید روشن شود تا پیوند دهنده، خرد را تولید کند
به درستی همه موقعیت ها گزینه کامپایلر "-mrelax" و گزینه linler را ببینید
"--آروم باش". موارد گوشهای وجود دارد که قرار است پیوند دهنده، خرد تولید کند اما
بدون آرامش و بدون پیام خطای مفید سقط می شود.
· اسکریپت پیوند دهنده پیش فرض برای کد با "EIND = 0" مرتب شده است. اگر قرار باشد کد
برای کار کردن برای راه اندازی با "EIND != 0"، یک اسکریپت پیوند دهنده سفارشی باید به ترتیب استفاده شود
برای قرار دادن بخش هایی که نام آنها با ".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" را در قسمتی که جدول برداری در آن قرار دارد تنظیم می کند.
واقع شده است.
#عبارتند از
باطل استاتیک
__خصیصه__((بخش(.init3")،خالی،استفاده شده،بدون_عملکرد_ابزار))
init3_set_eind (باطل)
{
__asm فرار ("ldi r24,pm_hh8(__trampolines_start)\n\t"
"out %i0,r24" :: "n" (&EIND): "r24"، "memory");
}
نماد "__trampolines_start" در اسکریپت پیوند دهنده تعریف شده است.
· در صورت وجود دو شرط زیر، خردهها بهطور خودکار توسط پیوند دهنده تولید میشوند
ملاقات کرد:
-
(کوتاه برای تولید می کنند خرد خرد) اینطوری:
LDI r24, lo8(gs( ))
LDI r25, hi8(gs( ))
-
خارج از بخشی که خرده ها در آن قرار دارند.
· کامپایلر چنین اصلاح کننده های "gs" را برای برچسب های کد در شرایط زیر منتشر می کند:
-
-
- -mcall-prologues>
گزینه خط فرمان
-
جداول را می توانید مشخص کنید -Fno-Jump-Table گزینه خط فرمان
-
-
پرش به آدرس های غیر نمادین مانند چنین است نه پشتیبانی:
int main (خلأ)
{
/* فراخوانی تابع در آدرس word 0x2 */
بازگشت ((int(*)(void)) 0x2)();
}
در عوض، یک خرد باید تنظیم شود، یعنی تابع باید از طریق یک نماد فراخوانی شود
("func_4" در مثال):
int main (خلأ)
{
extern int func_4 (باطل) ؛
/* فراخوانی تابع در آدرس بایت 0x4 */
return func_4();
}
و برنامه با "-Wl,--defsym,func_4=0x4" پیوند داده شود. از طرف دیگر، "func_4"
را می توان در اسکریپت لینکر تعریف کرد.
مدیریت رجیسترهای عملکرد ویژه "RAMPD"، "RAMPX"، "RAMPY" و "RAMPZ"
برخی از دستگاههای AVR از حافظههای بزرگتر از محدوده 64@tie{}KiB پشتیبانی میکنند که قابل دسترسی است.
با اشاره گرهای 16 بیتی برای دسترسی به مکانهای حافظه خارج از این محدوده 64@tie{}KiB،
محتوای یک ثبات "RAMP" به عنوان قسمت بالای آدرس استفاده می شود: "X"، "Y"، "Z"
ثبت آدرس با عملکرد ویژه "RAMPX"، "RAMPY"، "RAMPZ" الحاق شده است
برای دریافت آدرس گسترده به ترتیب ثبت نام کنید. به طور مشابه، "RAMPD" همراه با استفاده می شود
آدرس دهی مستقیم
· کد راه اندازی، رجیسترهای تابع ویژه "RAMP" را با صفر مقداردهی اولیه می کند.
· اگر یک APR تحت عنوان نشانی: فضاها، نامگذاری شده است نشانی فضا غیر از عمومی یا "__flash" است
استفاده می شود، سپس "RAMPZ" در صورت نیاز قبل از عملیات تنظیم می شود.
· اگر دستگاه از رم بزرگتر از 64@tie{}KiB پشتیبانی می کند و کامپایلر باید تغییر کند
"RAMPZ" برای انجام یک عملیات، "RAMPZ" پس از عملیات به صفر بازنشانی می شود.
· اگر دستگاه دارای یک رجیستر «RAMP» خاص باشد، مقدمه/پایان ISR
آن SFR را ذخیره/بازیابی می کند و در صورتی که کد ISR ممکن است آن را با صفر مقدار دهی اولیه می کند
(به طور ضمنی) از آن استفاده کنید.
· RAM بزرگتر از 64@tie{}KiB توسط GCC برای اهداف AVR پشتیبانی نمی شود. اگر استفاده می کنید
اسمبلر درون خطی برای خواندن از مکان های خارج از محدوده آدرس 16 بیتی و تغییر
یکی از رجیسترهای "RAMP" پس از دسترسی باید آن را به صفر برگردانید.
ماکروهای داخلی AVR
GCC چندین ماکرو داخلی را تعریف می کند تا کد کاربر بتواند حضور یا را آزمایش کند
عدم وجود ویژگی ها تقریباً هر یک از ماکروهای داخلی زیر از دستگاه استنباط می شود
قابلیت ها و در نتیجه توسط گزینه "-mmcu=" خط فرمان فعال می شود.
حتی بیشتر ماکروهای داخلی مخصوص AVR را ببینید APR تحت عنوان نشانی: فضاهای و APR توکار
توابع.
"__AVR_ARCH__"
ماکرو داخلی که به یک عدد اعشاری که معماری و مشخص می کند حل می شود
بستگی به "-mmcu=mcu" گزینه. مقادیر ممکن عبارتند از:
2، 25، 3، 31، 35، 4، 5، 51، 6، 102، 104، 105، 106، 107
برای mcu"avr2"، "avr25"، "avr3"، "avr31"، "avr35"، "avr4"، "avr5"، "avr51"، "avr6"،
به ترتیب "avrxmega2"، "avrxmega4"، "avrxmega5"، "avrxmega6"، "avrxmega7". اگر mcu
دستگاهی را مشخص می کند، این ماکرو داخلی بر این اساس تنظیم می شود. به عنوان مثال، با
"-mmcu=atmega8" ماکرو به 4 تعریف می شود.
"__AVR_دستگاه__"
تنظیم "-mmcu=دستگاه" این ماکرو داخلی را تعریف می کند که نام دستگاه را منعکس می کند.
به عنوان مثال، "-mmcu=atmega8" ماکرو داخلی "__AVR_ATmega8__" را تعریف می کند،
"-mmcu=attiny261a" "__AVR_ATtiny261A__" و غیره را تعریف می کند.
نام ماکروهای داخلی از طرح "__AVR_ پیروی می کند.دستگاه__" جایی که دستگاه هست
نام دستگاه مطابق دفترچه راهنمای کاربر AVR. تفاوت میان دستگاه در داخلی
ماکرو و دستگاه در "-mmcu=دستگاه" این است که دومی همیشه کوچک است.
If دستگاه یک دستگاه نیست بلکه فقط یک معماری هسته ای مانند "avr51" است، این ماکرو خواهد بود
تعریف نشود
"__AVR_XMEGA__"
دستگاه / معماری متعلق به خانواده دستگاه های XMEGA است.
"__AVR_HAVE_ELPM__"
دستگاه دارای دستورالعمل "ELPM" است.
"__AVR_HAVE_ELPMX__"
این دستگاه دارای "ELPM Rn، z" و "ELPM Rn، Z+" دستورالعمل.
"__AVR_HAVE_MOVW__"
این دستگاه دارای دستورالعمل "MOVW" برای انجام حرکات ثبت-رجیستر 16 بیتی است.
"__AVR_HAVE_LPMX__"
این دستگاه دارای "LPM Rn، z" و "LPM Rn، Z+" دستورالعمل.
"__AVR_HAVE_MUL__"
دستگاه دارای ضریب سخت افزاری است.
"__AVR_HAVE_JMP_CALL__"
دستگاه دارای دستورالعمل های "JMP" و "CALL" است. این مورد برای دستگاه های با
حداقل 16@tie{}KiB حافظه برنامه.
"__AVR_HAVE_EIJMP_EICALL__"
"__AVR_3_BYTE_PC__"
این دستگاه دارای دستورالعمل های "EIJMP" و "EICALL" است. این مورد برای دستگاه ها است
با بیش از 128@tie{}KiB حافظه برنامه. این نیز به این معنی است که برنامه
شمارنده (PC) 3@tie{}بایت عرض دارد.
"__AVR_2_BYTE_PC__"
شمارنده برنامه (PC) 2@tie{}بایت عرض دارد. این مورد برای دستگاه هایی با تا
128@tie{}کی بایت حافظه برنامه.
"__AVR_HAVE_8BIT_SP__"
"__AVR_HAVE_16BIT_SP__"
رجیستر نشانگر پشته (SP) به ترتیب توسط ثبات 8 بیتی 16 بیتی در نظر گرفته می شود
کامپایلر تعریف این ماکروها تحت تأثیر "-mtiny-stack" است.
"__AVR_HAVE_SPH__"
"__AVR_SP8__"
دستگاه دارای ثبت عملکرد ویژه SPH (قسمت بالای نشانگر پشته) است یا دارای
به ترتیب یک نشانگر پشته 8 بیتی. تعریف این ماکروها متاثر از
"-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 بیتی را به دلیل
اشتباه سخت افزاری دستورالعمل های رد شدن عبارتند از "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__"
کامپایلر برای استفاده همراه با AVR-Libc پیکربندی شده است. را ببینید
گزینه پیکربندی "--with-avrlibc".
بلک فین گزینه
-mcpu=پردازنده[-sirevision]
نام پردازنده Blackfin هدف را مشخص می کند. در حال حاضر، پردازنده می تواند یکی از
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 هیچ، هیچ راه حلی فعال نیست. اگر sirevision is هر، همه
راه حل برای پردازنده هدف فعال است. ماکرو "__SILICON_REVISION__".
به دو رقم هگزادسیمال تعریف می شود که نشان دهنده اعداد اصلی و کوچک هستند
تجدید نظر سیلیکون اگر sirevision is هیچ، "__SILICON_REVISION__" تعریف نشده است.
If sirevision is هر، "__SILICON_REVISION__" به صورت 0xffff تعریف شده است. اگر این
اختیاری sirevision استفاده نمی شود، GCC آخرین ویرایش سیلیکونی شناخته شده را فرض می کند
پردازنده Blackfin هدفمند
GCC یک ماکرو پیش پردازنده برای موارد مشخص شده تعریف می کند پردازنده. برای bfin-elf زنجیره ابزار،
این گزینه باعث می شود که BSP سخت افزاری ارائه شده توسط libgloss به if مرتبط شود -msim is
داده نشده.
بدون این گزینه، bf532 به طور پیش فرض به عنوان پردازنده استفاده می شود.
توجه داشته باشید که پشتیبانی برای bf561 ناقص است برای bf561، فقط ماکرو پیش پردازنده است
تعریف شده است.
-msim
مشخص می کند که برنامه روی شبیه ساز اجرا شود. این باعث شبیه ساز می شود
BSP ارائه شده توسط libgloss برای پیوند دادن. این گزینه فقط برای bfin-elf
زنجیره ابزار برخی از گزینه های دیگر، مانند -کتابخانه مشترک و -mfdpic، دلالت
-msim.
-momit-leaf-frame-pointer
نشانگر فریم را در یک رجیستر برای توابع برگ نگه ندارید. این از
دستورالعمل ذخیره، تنظیم و بازیابی نشانگرهای فریم و ایجاد یک ثبت اضافی
در توابع برگ موجود است. گزینه -fomit-frame-pointer قاب را برمی دارد
اشاره گر برای همه توابع، که ممکن است اشکال زدایی را سخت تر کند.
-mspecld-ناهنجاری
هنگامی که فعال می شود، کامپایلر اطمینان حاصل می کند که کد تولید شده حاوی کد نیست
بارهای گمانه زنی پس از دستورالعمل های پرش. در صورت استفاده از این گزینه،
"__WORKAROUND_SPECULATIVE_LOADS" تعریف شده است.
-mno-specld-anomaly
برای جلوگیری از بارهای گمانه زنی، کد اضافی تولید نکنید.
-mcsync-anomaly
هنگامی که فعال می شود، کامپایلر اطمینان حاصل می کند که کد تولید شده حاوی CSYNC یا نیست
دستورالعمل های SSYNC خیلی زود پس از شاخه های شرطی. در صورت استفاده از این گزینه،
"__WORKAROUND_SPECULATIVE_SYNCS" تعریف شده است.
-mno-csync-anomaly
برای جلوگیری از وقوع دستورالعملهای CSYNC یا SSYNC، کد اضافی تولید نکنید
به زودی پس از یک شاخه مشروط.
-mlow-64k
هنگامی که فعال می شود، کامپایلر آزاد است تا از دانش کل استفاده کند
این برنامه در حافظه کم 64k جای می گیرد.
-mno-low-64k
فرض کنید که برنامه به طور دلخواه بزرگ است. این پیش فرض است.
-mstack-check-l1
چک کردن پشته را با استفاده از اطلاعاتی که توسط uClinux در حافظه L1 Scratchpad قرار داده شده است انجام دهید
هسته
-کتابخانه مشترک
کدی را ایجاد کنید که از کتابخانه های مشترک از طریق روش شناسه کتابخانه پشتیبانی می کند. این اجازه می دهد
برای اجرای در محل و کتابخانه های مشترک در محیطی بدون حافظه مجازی
مدیریت. این گزینه دلالت دارد -fPIC. با یک bfin-elf هدف، این گزینه دلالت دارد
-msim.
-mno-id-shred-library
کدی را ایجاد کنید که فرض نمیکند از کتابخانههای مشترک مبتنی بر شناسه استفاده میشود. این هست
پیشفرض.
-mleaf-id-shred-library
کدی را ایجاد کنید که از کتابخانه های مشترک از طریق روش شناسه کتابخانه پشتیبانی می کند، اما فرض می کند
که این کتابخانه یا فایل اجرایی به هیچ کتابخانه مشترک شناسه دیگری پیوند نمی خورد.
این به کامپایلر اجازه می دهد تا از کدهای سریع تری برای پرش ها و تماس ها استفاده کند.
-mno-leaf-id-shred-library
تصور نکنید که کدی که کامپایل می شود با هیچ کتابخانه مشترک ID پیوندی ندارد.
کدهای آهسته تر برای پرش و فراخوانی insns تولید می شود.
-mshared-library-id=n
شماره شناسایی کتابخانه مشترک مبتنی بر شناسه در حال کامپایل را مشخص می کند.
تعیین مقدار 0 کد فشرده تری تولید می کند. تعیین نیروهای ارزشی دیگر
تخصیص آن عدد به کتابخانه فعلی اما دیگر فضا یا زمانی نیست
کارآمد از حذف این گزینه است.
-msep-data
کدی را ایجاد کنید که به بخش داده اجازه می دهد در ناحیه متفاوتی از حافظه قرار گیرد
از بخش متن این اجازه می دهد تا در محل در یک محیط بدون
مدیریت حافظه مجازی با حذف جابجایی در قسمت متن.
-mno-sep-data
کدی را ایجاد کنید که فرض میکند بخش داده از بخش متن پیروی میکند. این هست
پیشفرض.
تماس های طولانی
-mno-long-تماس
به کامپایلر میگوید ابتدا با بارگذاری آدرس تابع، فراخوانیهای تابع را انجام دهد
وارد یک ثبات شده و سپس یک فراخوانی زیر روال را روی این ثبات انجام می دهد. این
اگر تابع هدف خارج از محدوده آدرس دهی 24 بیتی باشد، سوئیچ مورد نیاز است
نسخه مبتنی بر افست دستورالعمل فراخوانی زیر روال.
این ویژگی به طور پیش فرض فعال نیست. مشخص کردن -mno-long-تماس بازیابی
رفتار پیش فرض توجه داشته باشید که این سوئیچ ها هیچ تاثیری بر نحوه تولید کامپایلر ندارند
کد برای رسیدگی به فراخوانی تابع از طریق نشانگرهای تابع.
-mfast-fp
پیوند با کتابخانه سریع ممیز شناور. این کتابخانه برخی از IEEE را آرام می کند
قوانین استاندارد ممیز شناور برای بررسی ورودی ها در برابر غیر عددی (NAN)، در
علاقه به عملکرد
-minline-plt
فعال کردن ورودی های PLT در فراخوانی توابع به توابعی که شناخته شده نیستند
به صورت محلی متصل شود. بدون اثری ندارد -mfdpic.
چند هسته ای
یک برنامه مستقل برای پردازنده های چند هسته ای Blackfin بسازید. این گزینه باعث می شود
فایل های شروع مناسب و اسکریپت های پیوند پشتیبانی چند هسته ای مورد استفاده قرار می گیرد و تعریف می کند
ماکرو "__BFIN_MULTICORE". فقط با آن قابل استفاده است -mcpu=bf561[-sirevision].
این گزینه را می توان با -mcorea or -mcoreb، که یک برنامه را انتخاب می کند
مدل برنامه نویسی هر هسته بدون -mcorea or -mcorebاز
از مدل برنامه نویسی تک برنامه ای/دو هسته ای استفاده شده است. در این مدل، اصلی
تابع Core B باید به عنوان "coreb_main" نامگذاری شود.
در صورت عدم استفاده از این گزینه، از مدل برنامه نویسی اپلیکیشن تک هسته ای استفاده می شود.
-mcorea
هنگام استفاده از برنامه one-application-per- یک برنامه مستقل برای Core A از BF561 بسازید.
مدل برنامه نویسی اصلی فایل های شروع مناسب و اسکریپت های پیوند برای پشتیبانی از Core استفاده می شود
A، و ماکرو "__BFIN_COREA" تعریف شده است. این گزینه فقط در
پیوند با چند هسته ای.
-mcoreb
هنگام استفاده از برنامه one-application-per- یک برنامه مستقل برای Core B از BF561 بسازید.
مدل برنامه نویسی اصلی فایل های شروع مناسب و اسکریپت های پیوند برای پشتیبانی از Core استفاده می شود
B، و ماکرو "__BFIN_COREB" تعریف شده است. وقتی از این گزینه استفاده می شود، "coreb_main"
باید به جای "اصلی" استفاده شود. این گزینه را فقط می توان در ارتباط با
چند هسته ای.
-msdram
یک برنامه مستقل برای SDRAM بسازید. فایل های شروع مناسب و اسکریپت های پیوند استفاده می شود
برای قرار دادن برنامه در SDRAM، و ماکرو "__BFIN_SDRAM" تعریف می شود. در
لودر باید قبل از بارگیری برنامه، SDRAM را مقداردهی اولیه کند.
-micplb
فرض کنید ICPLB ها در زمان اجرا فعال هستند. این بر ناهنجاری خاصی تأثیر می گذارد
راه حل ها برای اهداف لینوکس، پیش فرض این است که فرض کنیم ICPLB ها فعال هستند. برای
برنامه های مستقل پیش فرض خاموش است.
C6X گزینه
-مارس=نام
این نام معماری هدف را مشخص می کند. GCC از این نام برای تعیین استفاده می کند
چه نوع دستورالعمل هایی می تواند هنگام تولید کد اسمبلی صادر کند. جایز است
اسامی عبارتند از: c62x, c64x, c64x+, c67x, c67x+, c674x.
-mbig-endian
کد برای یک هدف بزرگ endian ایجاد کنید.
-mlittle-endian
کدی را برای یک هدف کوچک endian ایجاد کنید. این پیش فرض است.
-msim
فایل های راه اندازی و اسکریپت پیوند دهنده مناسب برای شبیه ساز را انتخاب کنید.
-msdata=پیشفرض
داده های کوچک جهانی و ثابت را در آن قرار دهید .neardata بخش، که توسط
ثبت نام "B14". داده های جهانی و ایستا کوچک را که مقداردهی اولیه نشده اند در آن قرار دهید .bss بخش،
که در مجاورت است .neardata بخش. داده های کوچک فقط خواندنی را در آن قرار دهید rodata
بخش. بخش های مربوطه مورد استفاده برای داده های بزرگ هستند .fardata, دور
و .const.
-msdata=همه
همه داده ها، نه فقط اشیاء کوچک، را در بخش های رزرو شده برای داده های کوچک قرار دهید، و
برای دسترسی به آنها از آدرس دهی مربوط به رجیستر "B14" استفاده کنید.
-msdata=هیچ
از بخش های رزرو شده برای داده های کوچک استفاده نکنید و از آدرس های مطلق استفاده کنید
دسترسی به تمام داده ها همه داده های جهانی و استاتیک اولیه را در داخل قرار دهید .fardata بخش،
و تمام داده های اولیه در دور بخش. همه داده های ثابت را در .const
بخش.
CRIS گزینه
این گزینه ها به طور خاص برای پورت های CRIS تعریف شده اند.
-مارس=نوع معماری
-mcpu=نوع معماری
برای معماری مشخص شده کد تولید کنید. انتخاب ها برای نوع معماری هستند
v3, v8 و v10 به ترتیب برای ETRAX 4، ETRAX 100 و ETRAX 100 LX. پیش فرض است v0
به جز cris-axis-linux-gnu که پیشفرض آن است v10.
-mtune=نوع معماری
تنظیم کنید نوع معماری همه چیز قابل اجرا در مورد کد تولید شده، به جز
ABI و مجموعه دستورالعمل های موجود. انتخاب ها برای نوع معماری هستند
همان برای -مارس=نوع معماری.
-mmax-stack-frame =n
هنگامی که قاب پشته یک تابع بیشتر شد هشدار دهید n بایت
-metrax4
-metrax100
گزینه ها -metrax4 و -metrax100 مترادف هستند برای -مارس=v3 و -مارس=v8
بود.
-mmul-bug-راهکار
-mno-mul-bug-راهکار
در مورد یک اشکال در دستورالعمل های "muls" و "mulu" برای مدل های CPU که در آن وجود دارد، کار کنید
اعمال میشود. این گزینه به صورت پیش فرض فعال است.
-mpdebug
اطلاعات مربوط به اشکال زدایی دقیق CRIS را در کد اسمبلی فعال کنید. این
گزینه همچنین دارای اثر خاموش کردن است #بدون_برنامه نشانگر کد قالب بندی شده به
اسمبلر در ابتدای فایل اسمبلی.
-mcc-init
از نتایج کد شرط از دستورالعمل قبلی استفاده نکنید. همیشه منتشر می کنند مقایسه و
دستورالعمل تست قبل از استفاده از کدهای شرایط
عوارض جانبی mno
دستورالعملهای دارای عوارض جانبی را در حالتهای آدرسدهی به غیر از پس از انتشار ارسال نکنید.
افزایش
-mstack-align
-mno-stack-align
-mdata-align
-mno-data-align
-mconst-align
-mno-const-align
این گزینه ها (نه- گزینه ها) ترتیب (حذف ترتیبات) برای قاب پشته،
داده ها و ثابت های منفرد برای حداکثر اندازه دسترسی به داده ها تراز شوند
برای مدل CPU انتخاب شده پیش فرض این است که برای تراز 32 بیتی ترتیب دهید. ABI
جزئیاتی مانند طرح ساختار تحت تأثیر این گزینه ها قرار نمی گیرند.
-m32-bit
-m16-bit
-m8-bit
مشابه گزینه های stack-data- و const-align در بالا، این گزینه ها ترتیب می دهند
قاب پشتهای، دادههای قابل نوشتن و ثابتهای همگی 32 بیتی، 16 بیتی یا 8 بیتی تراز شده باشند.
پیش فرض تراز 32 بیتی است.
-mno-prologue-epilogue
-مقدمه-مخاطره
با -mno-prologue-epilogue، پیش درآمد عملکرد عادی و پایانی که راه اندازی می شود
قاب پشته حذف شده است و هیچ دستورالعمل بازگشت یا دنباله بازگشتی وجود ندارد
در کد ایجاد شده است. از این گزینه فقط همراه با بازرسی بصری استفاده کنید
کد کامپایل شده: هیچ اخطاری یا خطایی در زمانی که ثبت های ذخیره شده در تماس باید وجود داشته باشند ایجاد نمی شود
ذخیره شده یا باید برای متغیرهای محلی فضای ذخیره سازی اختصاص داده شود.
-mno-gotplt
-mgotplt
با -fpic و -fPIC، توالی دستورالعمل هایی را که بارگذاری می کنند تولید نکنید (انجام دهید).
آدرس برای توابع از بخش PLT از GOT به جای (سنتی در سایر موارد
معماری) فراخوانی به PLT. پیش فرض است -mgotplt.
-ملف
گزینه بدون عملیات قدیمی فقط با cris-axis-elf و cris-axis-linux-gnu شناخته می شود.
اهداف.
-mlinux
گزینه no-op قدیمی فقط با هدف cris-axis-linux-gnu شناخته می شود.
سیم کارت
این گزینه که برای جنک محور cris شناخته شده است، ارتباط با ورودی-خروجی را ترتیب می دهد
توابع از یک کتابخانه شبیه ساز. کد، داده های اولیه و داده های صفر اولیه
به صورت متوالی تخصیص داده می شوند.
-sim2
پسندیدن سیم کارت، اما گزینه های پیوند دهنده را برای مکان یابی داده های اولیه در 0x40000000 و صفر ارسال کنید
داده های اولیه در 0x80000000.
CR16 گزینه
این گزینه ها به طور خاص برای پورت های CR16 تعریف شده اند.
-mmac
استفاده از دستورالعملهای multiply-cumulate را فعال کنید. به طور پیش فرض غیرفعال است.
-mcr16cplus
-mcr16c
کد برای معماری CR16C یا CR16C+ ایجاد کنید. معماری CR16C+ پیش فرض است.
-msim
کتابخانه libsim.a را که با شبیه ساز سازگار است پیوند می دهد. قابل اجرا برای ELF
فقط کامپایلر
-mint32
نوع عدد صحیح را با عرض 32 بیت انتخاب کنید.
-mbit-ops
دستورالعمل های "sbit"/"cbit" را برای دستکاری بیت ها ایجاد می کند.
-mdata-model=مدل
یک مدل داده را انتخاب کنید. انتخاب ها برای مدل هستند نزدیک, بسیار or متوسط. متوسط پیش فرض است.
با این حال، بسیار معتبر نیست با -mcr16c، زیرا معماری CR16C از این پشتیبانی نمی کند
مدل داده های دور
داروین گزینه
این گزینه ها برای تمام معماری هایی که سیستم عامل داروین را اجرا می کنند تعریف شده اند.
FSF GCC در داروین فایل های شیء "چربی" ایجاد نمی کند. یک فایل شی برای
معماری واحدی که GCC برای هدف قرار دادن آن ساخته شده است. GCC اپل در مورد داروین باعث ایجاد "چربی" می شود
فایل ها در صورت متعدد بودن -ارشی گزینه ها استفاده می شود؛ این کار را با اجرای کامپایلر یا پیوند دهنده انجام می دهد
چندین بار و پیوستن نتایج به همراه لیپو.
نوع فرعی فایل ایجاد شده (مانند ppc7400 or ppc970 or i686) توسط تعیین می شود
پرچم هایی که ISA را مشخص می کنند که شورای همکاری خلیج فارس هدف قرار می دهد، مانند -mcpu or -مارس.
-force_cpusubtype_ALL می توان از گزینه برای نادیده گرفتن آن استفاده کرد.
ابزار داروین وقتی با عدم تطابق ISA ارائه می شود، رفتارشان متفاوت است. در
مونتاژ کننده، as، فقط اجازه استفاده از دستورالعمل هایی را می دهد که برای نوع فرعی معتبر هستند
فایلی که در حال تولید است، بنابراین نمی توانید دستورالعمل های 64 بیتی را در یک قرار دهید ppc750 فایل شی در
پیوند دهنده برای کتابخانه های مشترک، /usr/bin/libtool، خراب می شود و در صورت درخواست، خطا را چاپ می کند
ایجاد یک کتابخانه مشترک با یک نوع فرعی کمتر محدودتر از فایل های ورودی آن (برای
به عنوان مثال، تلاش برای قرار دادن a ppc970 فایل شی در a ppc7400 کتابخانه). پیوند دهنده برای
فایل های اجرایی، ld، به صورت بی سر و صدا محدودترین نوع فرعی را به فایل اجرایی می دهد
فایل های ورودی
-Fدیر
فهرست فریمورک را اضافه کنید دیر به سر فهرست دایرکتوری هایی که باید جستجو شوند
برای فایل های هدر این دایرکتوری ها با آنهایی که توسط مشخص شده اند در هم می آمیزند -I
گزینه ها و به ترتیب چپ به راست اسکن می شوند.
دایرکتوری فریمورک دایرکتوری با فریمورک ها در آن است. یک چارچوب یک است
دایرکتوری با a سرآیندهای و / یا PrivateHeaders دایرکتوری که مستقیماً در آن موجود است
به پایان می رسد در .چارچوب. نام یک چارچوب نام این دایرکتوری است به استثنای
la .چارچوب. سرصفحه های مرتبط با چارچوب در یکی از آن دو یافت می شوند
دایرکتوری ها، با سرآیندهای ابتدا جستجو می شود زیر چارچوب یک چارچوب است
دایرکتوری که در یک چارچوب است چارچوب فهرست راهنما. شامل زیر چارچوب
سرصفحه ها فقط می توانند در هدر چارچوبی ظاهر شوند که حاوی زیرفریم ورک یا
در هدر زیر چارچوب خواهر و برادر. دو زیر چارچوب اگر در آن رخ دهند خواهر و برادر هستند
همان چارچوب یک فریم ورک نباید همنام فریمورک باشد. آ
در صورت نقض این اخطار صادر می شود. در حال حاضر یک زیر چارچوب نمی تواند داشته باشد
زیر چارچوب ها؛ در آینده، مکانیسم ممکن است برای پشتیبانی از این گسترش یابد. در
چارچوب های استاندارد را می توان در / سیستم / کتابخانه / قاب و
/ کتابخانه / قاب. یک مثال شامل به نظر می رسد مانند "#include "،
جایی که چارچوب نشان دهنده نام چارچوب و header.h در یافت می شود
PrivateHeaders or سرآیندهای دایرکتوری.
-iframeworkدیر
پسندیدن -F به جز دایرکتوری که به عنوان دایرکتوری سیستم در نظر گرفته می شود. تفاوت اصلی
بین این -iframework و -F است که با -iframework کامپایلر هشدار نمی دهد
درباره ساختارهای موجود در فایلهای سرصفحه یافت شده از طریق دیر. این گزینه معتبر است
فقط برای خانواده زبان های C.
حدس زد
اطلاعات اشکال زدایی را برای نمادهایی که استفاده می شود منتشر کنید. برای قالب اشکال زدایی stabs،
این را قادر می سازد -symbols-feliminate-unused-debug-symbols. این به طور پیش فرض روشن است.
-خوشحال
اطلاعات اشکال زدایی را برای همه نمادها و انواع منتشر می کند.
-mmacosx-version-min=نسخه
اولین نسخه MacOS X که این فایل اجرایی روی آن اجرا می شود، است نسخه. معمول
ارزش های نسخه شامل 10.1، 10.2 و 10.3.9 می شود.
اگر کامپایلر برای استفاده از هدرهای سیستم به طور پیش فرض ساخته شده است، پیش فرض برای
این گزینه نسخه سیستمی است که کامپایلر روی آن اجرا می شود، در غیر این صورت
پیشفرض انتخابهایی است که با هر تعداد سیستم و پایه کد سازگار هستند
امکان پذیر است.
-mkernel
حالت توسعه هسته را فعال کنید. را -mkernel مجموعه های گزینه -استاتیک, -fno-common,
-fno-use-cxa-atexit, -fno-استثناها, -fno-non-call-exceptions, -fapple-kext,
-فنو ضعیف و -fno-rtti جایی که قابل اجراست این حالت نیز تنظیم می شود -mno-altivec,
-msoft-float, -فنو ساخته شده است و -mlong-branch برای اهداف PowerPC
-mone-byte-bool
نادیده گرفتن پیش فرض ها برای بول به طوری که sizeof(bool)==1به به صورت پیش فرض اندازه (bool) is 4
هنگام کامپایل برای Darwin/PowerPC و 1 هنگام کامپایل برای Darwin/x86، بنابراین این گزینه
روی x86 تاثیری نداره
هشدار: La -mone-byte-bool سوئیچ باعث می شود GCC کدی تولید کند که باینری نیست
سازگار با کد تولید شده بدون آن سوئیچ. استفاده از این سوئیچ ممکن است نیاز داشته باشد
کامپایل مجدد همه ماژول های دیگر در یک برنامه، از جمله کتابخانه های سیستم. از این استفاده کن
برای مطابقت با یک مدل داده غیر پیش فرض تغییر دهید.
-مفیکس
-fix-and-continue
-findirect-data
کد مناسب برای توسعه سریع چرخش ایجاد کنید، مانند اجازه دادن به GDB
به صورت پویا فایل های ".o" را در برنامه های در حال اجرا بارگذاری کنید. -findirect-data و
-fix-and-continue برای سازگاری با عقب ارائه شده است.
-all_load
همه اعضای کتابخانه های آرشیو ایستا را بارگیری می کند. ببین مرد ld(1) برای اطلاعات بیشتر
-arch_errors_fatal
باعث می شود که خطاهای مربوط به فایل هایی که دارای معماری اشتباه هستند کشنده باشد.
-bind_at_load
باعث می شود فایل خروجی به گونه ای علامت گذاری شود که پیوند دهنده پویا همه را متصل کند
ارجاعات تعریف نشده هنگام بارگیری یا راه اندازی فایل.
-دسته
یک فایل با فرمت Mach-o باندل تولید کنید. ببین مرد ld(1) برای اطلاعات بیشتر
-bundle_loader قابل اجرا
این گزینه را مشخص می کند قابل اجرا که فایل خروجی ساخت را بارگذاری می کند
مرتبط. ببین مرد ld(1) برای اطلاعات بیشتر
-dynamiclib
با تصویب این گزینه، GCC یک کتابخانه پویا به جای یک فایل اجرایی زمانی تولید می کند
پیوند دادن، با استفاده از داروین لیبوتول فرمان
-force_cpusubtype_ALL
این باعث می شود که فایل خروجی GCC دارای این باشد همه نوع فرعی، به جای یکی که توسط کنترل می شود
la -mcpu or -مارس گزینه.
-allowable_client نام مشتری
-نام مشتری
-compatibility_version
-نسخه فعلی
نوار_مرده
فایل-وابستگی
-dylib_file
-dylinker_install_name
-پویا
-list_symbols_exported
-فیلست
-flat_namespace
-force_flat_namespace
-headerpad_max_install_names
-پایه_تصویر
-init
-install_name
-keep_private_externs
-multi_module
-multiply_defined
-Multiply_duped_Unused
-noall_load
-no_dead_strip_inits_and_terms
-nofixprebinding
-نومولتیفز
-ناربند
noseglinkedit
-pagezero_size
-پیشبندی
-prebind_all_twolevel_modules
-بسته_خصوصی
-Read_Only_Relocs
-بخشی
- نمادهای بخش
-whyload
-seg1addr
-فرقه آفرینی
- نمادهای بخش
-بخش
-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
-استاتیک
-زیر_کتابخانه
-sub_umbrella
-twolevel_namespace
-بله
-تعریف نشده
-لیست_symbols_unexported
-ناهمخوانی_اشاره_ضعیف
-واتس لود
این گزینه ها به پیوند دهنده داروین منتقل می شوند. صفحه مرد پیوند دهنده داروین توضیح می دهد
آنها را با جزئیات
دسامبر آلفا گزینه
اینها -m گزینه ها برای پیاده سازی های DEC Alpha تعریف شده اند:
-mno-soft-float
-msoft-float
از دستورالعمل های ممیز شناور سخت افزاری برای ممیز شناور استفاده کنید (استفاده نکنید).
عملیات چه زمانی -msoft-float مشخص شده است، توابع در libgcc.a برای اجرا استفاده می شوند
عملیات ممیز شناور مگر اینکه با روتین هایی جایگزین شوند که شبیه سازی شوند
عملیات ممیز شناور یا کامپایل شده به گونه ای که چنین شبیه سازی هایی را فراخوانی کند
روتین ها، این روال ها عملیات ممیز شناور را صادر می کنند. اگر در حال تدوین برای
یک آلفا بدون عملیات ممیز شناور، باید مطمئن شوید که کتابخانه ساخته شده است
تا با آنها تماس نگیریم
توجه داشته باشید که اجرای آلفا بدون عملیات ممیز شناور الزامی است
رجیسترهای ممیز شناور
-MFP- reg
-mno-fp-regs
کدی را ایجاد کنید که از مجموعه ثبت ممیز شناور استفاده می کند (از آن استفاده نمی کند). -mno-fp-regs
دلالت دارد -msoft-float. اگر از مجموعه ثبت ممیز شناور استفاده نمی شود، ممیز شناور
عملوندها به گونه ای که اعداد صحیح و ممیز شناور هستند در رجیسترهای اعداد صحیح ارسال می شوند
نتایج به جای $f0 در $0 ارسال می شود. این یک توالی فراخوانی غیر استاندارد است، بنابراین
هر تابع با آرگومان ممیز شناور یا مقدار بازگشتی که توسط کد کامپایل شده فراخوانی شده است
با -mno-fp-regs همچنین باید با آن گزینه کامپایل شود.
یک استفاده معمولی از این گزینه ساختن هسته ای است که از آن استفاده نمی کند و بنابراین نیاز دارد
هیچ ثبت ممیز شناور را ذخیره و بازیابی نکنید.
-مییی
معماری آلفا سخت افزار ممیز شناور را برای حداکثر بهینه سازی شده پیاده سازی می کند
کارایی. بیشتر با استاندارد ممیز شناور IEEE مطابقت دارد. با این حال،
برای انطباق کامل، کمک نرم افزار مورد نیاز است. این گزینه کد تولید می کند
کد کاملاً مطابق با IEEE جز که غیر دقیق پرچم نگهداری نمی شود (به زیر مراجعه کنید).
اگر این گزینه روشن باشد، ماکرو پیش پردازنده "_IEEE_FP" در طول تعریف می شود
تلفیقی. کد به دست آمده کارایی کمتری دارد اما می تواند به درستی پشتیبانی کند
اعداد غیرعادی شده و مقادیر استثنایی IEEE مانند عددی نیست و مثبت/منفی
بی نهایت. سایر کامپایلرهای آلفا این گزینه را فراخوانی می کنند -ieee_with_no_inexact.
-mieee-with-inexact
این مثل -مییی به جز کد تولید شده، IEEE را نیز حفظ می کند غیر دقیق پرچم.
روشن کردن این گزینه باعث می شود کد تولید شده IEEE کاملاً سازگار را پیاده سازی کند
ریاضی. علاوه بر "_IEEE_FP"، "_IEEE_FP_EXACT" به عنوان یک ماکرو پیش پردازنده تعریف می شود.
در برخی از پیادهسازیهای آلفا، کدهای بهدستآمده ممکن است بسیار کندتر از آن اجرا شوند
کد تولید شده به طور پیش فرض از آنجایی که کد بسیار کمی وجود دارد که به آن بستگی دارد
غیر دقیق پرچم، معمولاً نباید این گزینه را مشخص کنید. سایر کامپایلرهای آلفا تماس می گیرند
این گزینه -ieee_with_inexact.
-mfp-trap-mode=حالت تله
این گزینه کنترل می کند که چه تله های مربوط به ممیز شناور فعال هستند. آلفای دیگر
کامپایلرها این گزینه را فراخوانی می کنند -fptm حالت تله. حالت تله را می توان روی یکی از چهار تنظیم کرد
ارزش های:
n این تنظیم پیش فرض (عادی) است. تنها تلههایی که فعال هستند عبارتند از
مواردی که در نرم افزار غیرفعال نمی شوند (مثلاً تقسیم بر تله صفر).
u علاوه بر تله های فعال شده توسط n، تله های زیر جریان نیز فعال هستند.
su پسندیدن u، اما دستورالعمل ها برای تکمیل نرم افزار ایمن علامت گذاری شده اند (نگاه کنید به
راهنمای معماری آلفا برای جزئیات).
سای پسندیدن su، اما تله های غیر دقیق نیز فعال هستند.
-MFP-Rounding-Mode =حالت گرد
حالت گرد کردن IEEE را انتخاب می کند. سایر کامپایلرهای آلفا این گزینه را فراخوانی می کنند -fprm
حالت گرد. حالت گرد می تواند یکی از موارد زیر باشد:
n حالت عادی گرد کردن IEEE. اعداد ممیز شناور به سمت نزدیکترین گرد می شوند
شماره دستگاه یا به سمت شماره دستگاه زوج در صورت تساوی.
m گرد به سمت منهای بی نهایت.
c حالت گرد خرد شده. اعداد ممیز شناور به سمت صفر گرد می شوند.
d حالت گرد کردن پویا یک فیلد در رجیستر کنترل ممیز شناور (fpcr، نگاه کنید به
راهنمای مرجع معماری آلفا) حالت گرد کردن را کنترل می کند. سی
کتابخانه این رجیستر را برای گرد کردن به اضافه بی نهایت مقداردهی می کند. بدین ترتیب،
مگر اینکه برنامه شما آن را تغییر دهد fpcr, d مربوط به دور به مثبت است
بی نهایت.
-MTRAP-RECISION =تله دقیق
در معماری آلفا، تله های نقطه شناور نادقیق هستند. این یعنی بدون
کمک نرم افزاری غیر ممکن است که از یک تله شناور و برنامه بازیابی شود
اجرا معمولاً باید خاتمه یابد. GCC می تواند کدی تولید کند که می تواند کمک کند
کنترل کننده های تله سیستم عامل در تعیین مکان دقیقی که باعث ایجاد یک
تله ممیز شناور بسته به نیازهای یک برنامه، متفاوت است
سطوح دقت را می توان انتخاب کرد:
p دقت برنامه این گزینه پیش فرض است و به این معنی است که یک کنترل کننده تله فقط می تواند
مشخص کنید کدام برنامه باعث ایجاد استثنای ممیز شناور شده است.
f دقت عملکرد کنترل کننده تله می تواند عملکردی را که باعث a
استثنای ممیز شناور
i دقت دستورالعمل کنترل کننده تله می تواند دستورالعمل دقیق آن را تعیین کند
باعث استثنای ممیز شناور شد.
سایر کامپایلرهای آلفا گزینه های معادلی را ارائه می دهند که نامیده می شوند -scope_safe و
-Resumption_safe.
-mieee-conformant
این گزینه کد تولید شده را مطابق با IEEE علامت گذاری می کند. شما نباید از این گزینه استفاده کنید
مگر اینکه شما هم مشخص کنید -MTRAP-CENCISION = من و یا -mfp-trap-mode=su or
-mfp-trap-mode=sui. تنها اثر آن انتشار خط است .پرچم 48 در تابع
مقدمه فایل اسمبلی تولید شده
-mbuild-constants
به طور معمول GCC یک عدد صحیح 32 یا 64 بیتی را بررسی می کند تا ببیند آیا می تواند آن را بسازد یا خیر.
از ثابت های کوچکتر در دو یا سه دستورالعمل. اگر نتواند، آن را خروجی می دهد
به عنوان یک کلمه ثابت است و کدی را برای بارگذاری آن از بخش داده در زمان اجرا تولید می کند.
برای ساختن GCC از این گزینه استفاده کنید تمام ثابت های عدد صحیح با استفاده از کد، حتی اگر
دستورالعمل های بیشتری را می طلبد (حداکثر شش است).
شما معمولاً از این گزینه برای ایجاد یک لودر دینامیک کتابخانه مشترک استفاده می کنید. خودش الف
کتابخانه مشترک، قبل از اینکه بتواند متغیرها را پیدا کند، باید خود را در حافظه جابجا کند
ثابت در بخش داده خودش.
-mbwx
-mno-bwx
-mcix
-mno-cix
-mfix
-mno-fix
-mmax
-mno-max
مشخص کنید که آیا GCC باید کدی برای استفاده از BWX، CIX، FIX و MAX اختیاری ایجاد کند یا خیر
مجموعه های دستورالعمل پیش فرض استفاده از مجموعه دستورالعمل های پشتیبانی شده توسط CPU است
نوع مشخص شده از طریق -mcpu= گزینه یا CPU که GCC روی آن ساخته شده است، اگر هیچ کدام وجود ندارد
مشخص شده.
-mfloat-vax
-mfloat-ieee
کدی ایجاد کنید که به جای آن از محاسبات ممیز شناور VAX F و G استفاده می کند (از آن استفاده نمی کند).
با دقت تک و دوگانه IEEE.
-mexplicit-relocs
-mno-explicit-relocs
اسمبلرهای قدیمی آلفا هیچ راهی برای ایجاد جابجایی نمادها به جز از طریق ارائه نکردند
ماکروهای اسمبلر استفاده از این ماکروها امکان برنامه ریزی بهینه دستورالعمل را نمی دهد.
GNU binutils در نسخه 2.12 از یک نحو جدید پشتیبانی می کند که به کامپایلر اجازه می دهد تا
صراحتاً علامت گذاری کنید که کدام جابجایی باید در کدام دستورالعمل اعمال شود. این گزینه است
بیشتر برای اشکال زدایی مفید است، زیرا GCC قابلیت های اسمبلر را در هنگام تشخیص تشخیص می دهد
ساخته شده است و پیش فرض را بر اساس آن تنظیم می کند.
-msmall-data
داده های بزرگ
چه زمانی -mexplicit-relocs در واقع، داده های استاتیک از طریق gp-نسبی
جابجایی ها چه زمانی -msmall-data استفاده می شود، اشیایی به طول 8 بایت یا کوچکتر در آن قرار می گیرند
a کوچک داده ها منطقه (بخش های ".sdata" و ".sbss") و از طریق 16 بیت قابل دسترسی هستند.
جابجایی خارج از ثبات $gp. این اندازه ناحیه داده کوچک را محدود می کند
64 کیلوبایت، اما اجازه می دهد تا متغیرها مستقیماً از طریق یک دستورالعمل واحد دسترسی داشته باشند.
پیش فرض این است داده های بزرگ. با این گزینه، ناحیه داده فقط به زیر محدود می شود
2 گیگابایت. برنامه هایی که به بیش از 2 گیگابایت داده نیاز دارند باید از "malloc" یا "mmap" استفاده کنند
تخصیص داده ها در پشته به جای در بخش داده برنامه.
هنگام تولید کد برای کتابخانه های مشترک، -fpic دلالت دارد -msmall-data و -fPIC
دلالت دارد داده های بزرگ.
-msmall-text
-متن بزرگ
چه زمانی -msmall-text استفاده می شود، کامپایلر فرض می کند که کد کل برنامه است
(یا کتابخانه مشترک) در 4 مگابایت قرار می گیرد و بنابراین با دستورالعمل شعبه قابل دسترسی است.
چه زمانی -msmall-data استفاده می شود، کامپایلر می تواند فرض کند که همه نمادهای محلی به اشتراک گذاشته می شوند
همان مقدار gp $، و بنابراین تعداد دستورالعمل های مورد نیاز برای یک تابع را کاهش می دهد
از 4 تا 1 تماس بگیرید
پیش فرض این است -متن بزرگ.
-mcpu=cpu_type
مجموعه دستورالعمل و پارامترهای زمانبندی دستورالعمل را برای نوع ماشین تنظیم کنید
cpu_type. می توانید یکی را مشخص کنید EV نام سبک یا شماره تراشه مربوطه.
GCC از پارامترهای زمان بندی برای خانواده پردازنده های EV4، EV5 و EV6 پشتیبانی می کند و
مقادیر پیش فرض مجموعه دستورات را از پردازنده ای که مشخص کرده اید انتخاب می کند. اگر
شما یک نوع پردازنده را مشخص نمی کنید، GCC به طور پیش فرض پردازنده ای است که روی آن قرار دارد
کامپایلر ساخته شد
مقادیر پشتیبانی شده برای cpu_type هستند
ev4
ev45
21064
به عنوان یک EV4 برنامه ریزی می کند و هیچ پسوند مجموعه دستورالعملی ندارد.
ev5
21164
به عنوان یک EV5 برنامه ریزی می کند و هیچ پسوند مجموعه دستورالعملی ندارد.
ev56
21164a
به عنوان یک EV5 برنامه ریزی می کند و از پسوند BWX پشتیبانی می کند.
pca56
21164pc
21164PC
به عنوان یک EV5 برنامه ریزی می کند و از افزونه های BWX و MAX پشتیبانی می کند.
ev6
21264
به عنوان EV6 برنامه ریزی می کند و از افزونه های BWX، FIX و MAX پشتیبانی می کند.
ev67
21264a
به عنوان یک EV6 برنامه ریزی می کند و از برنامه های افزودنی BWX، CIX، FIX و MAX پشتیبانی می کند.
زنجیره های ابزار بومی نیز از این ارزش پشتیبانی می کنند بومی، که بهترین معماری را انتخاب می کند
گزینه ای برای پردازنده میزبان -mcpu=بومی اگر GCC تشخیص ندهد هیچ تاثیری ندارد
پردازنده
-mtune=cpu_type
فقط پارامترهای زمانبندی دستورالعمل را برای نوع ماشین تنظیم کنید cpu_type.
مجموعه دستورالعمل تغییر نکرده است.
زنجیره های ابزار بومی نیز از این ارزش پشتیبانی می کنند بومی، که بهترین معماری را انتخاب می کند
گزینه ای برای پردازنده میزبان -mtune=بومی اگر GCC تشخیص ندهد هیچ تاثیری ندارد
پردازنده
-mmmory-latency=زمان
تأخیر زمانی را که زمانبندی باید برای مراجع معمول حافظه در نظر بگیرد را تنظیم می کند
برنامه. این عدد به شدت به الگوهای دسترسی به حافظه استفاده شده بستگی دارد
با استفاده از برنامه و اندازه حافظه پنهان خارجی روی دستگاه.
گزینه های معتبر برای زمان هستند
عدد
یک عدد اعشاری که نشان دهنده چرخه های ساعت است.
L1
L2
L3
اصلی
کامپایلر شامل تخمینهایی از تعداد چرخههای ساعت برای EV4 و "معمولی" است.
سخت افزار EV5 برای کش های سطح 1، 2 و 3 (همچنین Dcache، Scache و
Bcache)، و همچنین به حافظه اصلی. توجه داشته باشید که L3 فقط برای EV5 معتبر است.
FR30 گزینه
این گزینه ها به طور خاص برای پورت FR30 تعریف شده اند.
-msmall-model
از مدل فضای آدرس کوچک استفاده کنید. این می تواند کد کوچکتری تولید کند، اما فرض می کند
که تمام مقادیر نمادین و آدرس ها در یک محدوده 20 بیتی قرار می گیرند.
-mno-lsim
فرض کنید پشتیبانی زمان اجرا ارائه شده است و بنابراین نیازی به گنجاندن آن نیست
کتابخانه شبیه ساز (libsim.a) در خط فرمان لینکر.
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
از دستورالعمل های دو کلمه ای استفاده نکنید.
- دوبل
از دستورالعمل های دوگانه ممیز شناور استفاده کنید.
-mno-دبل
از دستورالعمل های دوگانه ممیز شناور استفاده نکنید.
- رسانه
از دستورالعمل های رسانه استفاده کنید.
-mno-media
از دستورالعمل های رسانه استفاده نکنید.
-mmuladd
از دستورات ضرب و جمع/ تفریق استفاده کنید.
-mno-muladd
از دستورات ضرب و جمع و تفریق استفاده نکنید.
-mfdpic
FDPIC ABI را انتخاب کنید که از توصیفگرهای تابع برای نشان دادن نشانگرها استفاده می کند
کارکرد. بدون هیچ گونه گزینه مرتبط با PIC/PIE، به این معنی است -fPIE. با -fpic or
-fpie، فرض می کند ورودی های GOT و داده های کوچک در محدوده 12 بیتی از GOT قرار دارند
آدرس پایه؛ با -fPIC or -fPIE، افست های GOT با 32 بیت محاسبه می شوند. با یک
bfin-elf هدف، این گزینه دلالت دارد -msim.
-minline-plt
فعال کردن ورودی های PLT در فراخوانی توابع به توابعی که شناخته شده نیستند
به صورت محلی متصل شود. بدون اثری ندارد -mfdpic. به طور پیش فرض فعال است اگر
بهینه سازی برای سرعت و کامپایل برای کتابخانه های مشترک (به عنوان مثال، -fPIC or -fpic)، یا
هنگامی که یک گزینه بهینه سازی مانند -O3 یا بالاتر در خط فرمان وجود دارد.
-mTLS
هنگام تولید کد محلی رشته، یک بخش TLS بزرگ را در نظر بگیرید.
-mtls
هنگام تولید کد محلی رشته، یک بخش TLS بزرگ در نظر نگیرید.
-mgprel-ro
استفاده از جابجایی های "GPREL" را در FDPIC ABI برای داده هایی که مشخص است در
بخش های فقط خواندنی این به طور پیش فرض فعال است، به جز برای -fpic or -fpie: بااینکه
ممکن است به کوچکتر کردن جدول افست جهانی کمک کند، 1 دستورالعمل را با 4 مبادله می کند
-fPIC or -fPIE، 3 دستورالعمل را با 4 مورد معامله می کند که یکی از آنها ممکن است توسط چندین مورد به اشتراک گذاشته شود
نمادها، و از نیاز به ورودی GOT برای نماد ارجاع شده جلوگیری می کند، بنابراین همینطور است
احتمال برد بیشتر است اگر نیست، -mno-gprel-ro می توان برای غیرفعال کردن آن استفاده کرد.
- multilib-library-pic
پیوند با کتابخانه های عکس (کتابخانه، نه FD). این به طور ضمنی توسط -مجموعه-عکس، همچنین
توسط توسط -fPIC و -fpic بدون -mfdpic. شما هرگز نباید به طور صریح از آن استفاده کنید.
-mlinked-fp
از الزامات EABI پیروی کنید که همیشه یک نشانگر فریم هر زمان که یک قاب پشته ایجاد می شود، ایجاد کنید
اختصاص داده شده است. این گزینه به طور پیش فرض فعال است و می توان با آن غیر فعال کرد
-mno-linked-fp.
تماس های طولانی
از آدرس دهی غیر مستقیم برای فراخوانی توابع خارج از واحد کامپایل فعلی استفاده کنید. این
به توابع اجازه می دهد تا در هر جایی در فضای آدرس 32 بیتی قرار گیرند.
برچسب های بدخیم
سعی کنید با قرار دادن NOPها در بسته قبلی، برچسب ها را با یک مرز 8 بایتی تراز کنید.
این گزینه فقط زمانی تأثیر می گذارد که بسته بندی VLIW فعال باشد. جدید ایجاد نمی کند
بسته ها؛ فقط NOPها را به موارد موجود اضافه می کند.
-مجموعه-عکس
کد EABI مستقل از موقعیت را ایجاد کنید.
-macc-4
فقط از چهار رجیستر ذخیره کننده رسانه اول استفاده کنید.
-macc-8
از هر هشت رجیستر ذخیره کننده رسانه استفاده کنید.
-مپک
دستورالعمل های VLIW را بسته بندی کنید.
-mno-pack
دستورالعمل های VLIW را بسته بندی نکنید.
پرچم های mno
سوئیچ های ABI را در e_flag ها علامت گذاری نکنید.
-mcond-move
استفاده از دستورالعملهای انتقال شرطی (پیشفرض) را فعال کنید.
این سوئیچ عمدتاً برای رفع اشکال کامپایلر است و احتمالاً در یک حذف خواهد شد
نسخه آینده
-mno-cond-move
استفاده از دستورالعمل های حرکت شرطی را غیرفعال کنید.
این سوئیچ عمدتاً برای رفع اشکال کامپایلر است و احتمالاً در یک حذف خواهد شد
نسخه آینده
-mscc
استفاده از دستورالعمل های مجموعه شرطی (پیش فرض) را فعال کنید.
این سوئیچ عمدتاً برای رفع اشکال کامپایلر است و احتمالاً در یک حذف خواهد شد
نسخه آینده
-mno-scc
استفاده از دستورالعمل های مجموعه شرطی را غیرفعال کنید.
این سوئیچ عمدتاً برای رفع اشکال کامپایلر است و احتمالاً در یک حذف خواهد شد
نسخه آینده
-mcond-exec
استفاده از اجرای شرطی (پیشفرض) را فعال کنید.
این سوئیچ عمدتاً برای رفع اشکال کامپایلر است و احتمالاً در یک حذف خواهد شد
نسخه آینده
-mno-cond-exec
غیرفعال کردن استفاده از اجرای شرطی
این سوئیچ عمدتاً برای رفع اشکال کامپایلر است و احتمالاً در یک حذف خواهد شد
نسخه آینده
-mvliw-branch
یک پاس برای بسته بندی شاخه ها در دستورالعمل های VLIW (پیش فرض) اجرا کنید.
این سوئیچ عمدتاً برای رفع اشکال کامپایلر است و احتمالاً در یک حذف خواهد شد
نسخه آینده
-mno-vliw-branch
برای بستهبندی شاخهها در دستورالعملهای VLIW، پاسی را اجرا نکنید.
این سوئیچ عمدتاً برای رفع اشکال کامپایلر است و احتمالاً در یک حذف خواهد شد
نسخه آینده
-mmulti-cond-exec
فعال کردن بهینه سازی "&&" و "||" در اجرای مشروط (پیش فرض).
این سوئیچ عمدتاً برای رفع اشکال کامپایلر است و احتمالاً در یک حذف خواهد شد
نسخه آینده
-mno-multi-cond-exec
غیرفعال کردن بهینه سازی "&&" و "||" در اجرای مشروط
این سوئیچ عمدتاً برای رفع اشکال کامپایلر است و احتمالاً در یک حذف خواهد شد
نسخه آینده
-mnested-cond-exec
بهینهسازیهای اجرای شرطی تودرتو (پیشفرض) را فعال کنید.
این سوئیچ عمدتاً برای رفع اشکال کامپایلر است و احتمالاً در یک حذف خواهد شد
نسخه آینده
-mno-nested-cond-exec
بهینهسازیهای اجرای شرطی تودرتو را غیرفعال کنید.
این سوئیچ عمدتاً برای رفع اشکال کامپایلر است و احتمالاً در یک حذف خواهد شد
نسخه آینده
-moptimize-membar
این سوئیچ دستورالعمل های اضافی "membar" را از کدهای تولید شده توسط کامپایلر حذف می کند.
به طور پیش فرض فعال است.
-mno-optimize-membar
این سوئیچ حذف خودکار دستورالعملهای «عضو» اضافی را غیرفعال میکند
کد تولید شده
-mtomcat-stats
باعث می شود که گاز آمار تامکت را چاپ کند.
-mcpu=پردازنده
نوع پردازنده ای را که برای آن کد تولید می شود انتخاب کنید. مقادیر ممکن هستند frv, fr550,
گربه نر, fr500, fr450, fr405, fr400, fr300 و ساده.
گنو / لینوکس گزینه
اینها -m گزینه ها برای اهداف گنو/لینوکس تعریف شده اند:
-mglibc
از کتابخانه گنو سی استفاده کنید. این پیش فرض است به جز روشن *-*-linux-*uclibc* و
*-*-linux-*اندروید* اهداف.
- muclibc
از کتابخانه uClibc C استفاده کنید. این پیش فرض روشن است *-*-linux-*uclibc* اهداف.
-مبیونیک
از کتابخانه Bionic C استفاده کنید. این پیش فرض روشن است *-*-linux-*اندروید* اهداف.
-ماندروید
کامپایل کد سازگار با پلتفرم اندروید. این پیش فرض روشن است
*-*-linux-*اندروید* اهداف.
هنگام کامپایل، این گزینه فعال می شود -مبیونیک, -fPIC, -fno-استثناها و -fno-rtti by
پیش فرض هنگام پیوند دادن، این گزینه باعث میشود درایور GCC از گزینههای مخصوص اندروید عبور کند
به پیوند دهنده در نهایت، این گزینه باعث می شود که ماکرو پیش پردازنده "__ANDROID__" باشد
تعریف شده است.
-tno-android-cc
غیر فعال کردن اثرات کامپایل از -ماندروید، یعنی فعال نکنید -مبیونیک, -fPIC,
-fno-استثناها و -fno-rtti به صورت پیش فرض.
-tno-android-ld
غیرفعال کردن اثرات پیوند -ماندروید، به عنوان مثال، گزینه های استاندارد پیوند لینوکس را به
پیوند دهنده
H8 / 300 گزینه
اینها -m گزینه هایی برای اجرای H8/300 تعریف شده است:
-آرامش کن
در صورت امکان برخی از مراجع آدرس را در زمان پیوند کوتاه کنید. از گزینه linker استفاده می کند
-آروم باش.
-mh کد برای H8/300H ایجاد کنید.
-اماس کد برای H8S تولید کنید.
- دقیقه کد H8S و H8/300H را در حالت عادی ایجاد کنید. این سوئیچ باید استفاده شود
یا با -mh or -اماس.
-ms2600
کد برای H8S/2600 ایجاد کنید. این سوئیچ باید با استفاده شود -اماس.
-مکسر
رجیسترهای توسعه یافته قبل از اجرای عملکرد با مانیتور در پشته ذخیره می شوند
صفت. گزینه پیش فرض است -مکسر. این گزینه فقط برای اهداف H8S معتبر است.
-mno-exr
ثبات های توسعه یافته قبل از اجرای عملکرد با مانیتور در پشته ذخیره نمی شوند
صفت. گزینه پیش فرض است -mno-exr. این گزینه فقط برای اهداف H8S معتبر است.
-mint32
داده های "int" را به طور پیش فرض 32 بیت کنید.
-بدخیم-300
در H8/300H و H8S، از قوانین ترازبندی مشابه برای H8/300 استفاده کنید. پیشفرض
برای H8/300H و H8S تراز کردن طول ها و شناورها در مرزهای 4 بایتی است.
-بدخیم-300 باعث تراز شدن آنها در مرزهای 2 بایتی می شود. این گزینه هیچ تاثیری ندارد
در 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
از استفاده از رجیسترهای ممیز شناور به هر نحوی جلوگیری کنید. این برای
کامپایل کردن هسته هایی که تغییر بافت تنبلی از ثبات های ممیز شناور را انجام می دهند. اگر
شما از این گزینه استفاده می کنید و سعی می کنید عملیات ممیز شناور، کامپایلر را انجام دهید
سقط می کند.
-ندار-نشانگر
از استفاده کامپایلر از حالت های آدرس نمایه سازی جلوگیری کنید. این امر باعث جلوگیری از برخی بیشتر می شود
مشکلات مبهم هنگام کامپایل کد تولید شده MIG تحت MACH.
-mno-space-regs
کدی را ایجاد کنید که فرض کند هدف هیچ ثبت فضایی ندارد. این به GCC اجازه می دهد
تماسهای غیرمستقیم سریعتر ایجاد کنید و از حالتهای نشانی شاخص مقیاسناپذیر استفاده کنید.
چنین کدی برای سیستم ها و هسته های PA سطح 0 مناسب است.
-mfast-غیر مستقیم-تماس
کدی را ایجاد کنید که فرض میکند تماسها هرگز از مرزهای فضا عبور نمیکنند. این به GCC اجازه می دهد
کدی را منتشر می کند که تماس های غیرمستقیم را سریعتر انجام می دهد.
این گزینه در حضور کتابخانه های مشترک یا توابع تو در تو کار نمی کند.
-Mfixed-Range =محدوده ثبت نام
کدی را ایجاد کنید که محدوده رجیستر داده شده را به عنوان ثبات ثابت در نظر می گیرد. ثبت ثابت
یکی از مواردی است که تخصیص دهنده ثبات نمی تواند از آن استفاده کند. این در هنگام کامپایل کرنل مفید است
کد محدوده رجیستر به صورت دو رجیستر که با یک خط تیره از هم جدا شده اند، مشخص می شود. چندگانه
محدوده های ثبت را می توان با کاما از هم جدا کرد.
-mlong-load-store
ایجاد بار 3 دستورالعملی و ذخیره توالی ها همانطور که گاهی اوقات توسط HP-UX 10 لازم است
پیوند دهنده این معادل است +k گزینه ای برای کامپایلرهای HP.
قابل حمل - زمان اجرا
از قراردادهای تماس قابل حمل پیشنهاد شده توسط HP برای سیستم های ELF استفاده کنید.
-mgas
استفاده از دستورالعملهای اسمبلر را فعال کنید که فقط GAS میفهمد.
-mschedule=نوع cpu
کد را با توجه به محدودیت های نوع ماشین برنامه ریزی کنید نوع cpu. انتخاب ها
برای نوع cpu هستند 700 7100, 7100LC, 7200, 7300 و 8000. رجوع شود به
/usr/lib/sched.models در یک سیستم HP-UX برای تعیین گزینه زمانبندی مناسب برای
ماشین شما زمان بندی پیش فرض است 8000.
-mlinker-opt
پاس بهینه سازی را در پیوند دهنده HP-UX فعال کنید. توجه داشته باشید که این باعث اشکال زدایی نمادین می شود
غیر ممکن همچنین باعث ایجاد یک باگ در پیوندهای HP-UX 8 و HP-UX 9 می شود که در آن آنها
هنگام پیوند دادن برخی از برنامه ها، پیام های خطای جعلی بدهید.
-msoft-float
خروجی حاوی فراخوان های کتابخانه ای برای ممیز شناور تولید کنید. هشدار: مورد نیاز
کتابخانه ها برای همه اهداف HPPA در دسترس نیستند. به طور معمول امکانات از
از کامپایلر C معمولی ماشین استفاده می شود، اما این کار را نمی توان مستقیماً در حالت متقابل انجام داد.
تلفیقی. شما باید ترتیبات خود را برای تهیه کتابخانه مناسب انجام دهید
توابع برای کامپایل متقابل
-msoft-float قرارداد فراخوانی را در فایل خروجی تغییر می دهد. بنابراین، آن را تنها
مفید است اگر کامپایل کنید تمام برنامه ای با این گزینه به طور خاص، شما نیاز دارید
گردآوری libgcc.a، کتابخانه ای که با GCC ارائه می شود، با -msoft-float به منظور این
به کار می کنند.
-msio
پیش تعریف "_SIO" را برای سرور IO ایجاد کنید. پیش فرض است -mwsio. این تولید می کند
از پیش تعریف شده، "__hp9000s700"، "__hp9000s700__" و "_WSIO"، برای ایستگاه کاری IO.
این گزینه ها تحت HP-UX و HI-UX در دسترس هستند.
-mgnu-ld
از گزینه های مخصوص گنو استفاده کنید ld. این می گذرد -به اشتراک گذاشته شده به ld هنگام ساخت یک اشتراک گذاری
کتابخانه زمانی که GCC به طور صریح یا ضمنی با پیکربندی شده باشد، پیشفرض است
پیوند دهنده گنو. این گزینه بر کدام یک تأثیر نمی گذارد ld نامیده میشود؛ فقط چیزی را تغییر می دهد
پارامترها به آن منتقل می شوند ld. ld که نامیده می شود توسط تعیین می شود
-با-LD گزینه پیکربندی، مسیر جستجوی برنامه GCC و در نهایت توسط کاربر PATH.
پیوند دهنده مورد استفاده توسط GCC را می توان با استفاده از آن چاپ کرد که gcc -print-prog-name=ld`. این
گزینه فقط در HP-UX GCC 64 بیتی موجود است، یعنی با پیکربندی شده است
hppa*64*-*-hpux*.
-mhp-ld
از گزینه های خاص HP استفاده کنید ld. این می گذرد -b به ld هنگام ساخت یک کتابخانه مشترک
و پاس می دهد +قبول نوع عدم تطابق به ld در تمام لینک ها زمانی که GCC باشد پیشفرض است
به طور صریح یا ضمنی با پیوند دهنده HP پیکربندی شده است. این گزینه تاثیری ندارد
که ld نامیده میشود؛ این فقط پارامترهایی را که به آن ارسال می شود تغییر می دهد ld. ld
که نامیده می شود توسط تعیین می شود -با-LD گزینه پیکربندی، جستجوی برنامه GCC
مسیر و در نهایت توسط کاربر PATH. پیوند دهنده مورد استفاده توسط GCC را می توان با استفاده از آن چاپ کرد
که gcc -print-prog-name=ld`. این گزینه فقط در HP-UX 64 بیتی موجود است
GCC، یعنی با پیکربندی شده است hppa*64*-*-hpux*.
تماس های طولانی
کدی را ایجاد کنید که از توالی تماس های طولانی استفاده می کند. این تضمین می کند که یک تماس همیشه امکان پذیر است
برای رسیدن به خردهای ایجاد شده توسط پیوند دهنده. پیشفرض این است که تماسهای طولانی فقط زمانی ایجاد شود که
فاصله از محل تماس تا ابتدای تابع یا واحد ترجمه، به عنوان
ممکن است مورد، از حد از پیش تعریف شده تعیین شده توسط نوع شاخه مورد استفاده فراتر رود. را
محدودیت برای تماس های معمولی برای PA 7,600,000 به ترتیب 240,000 و 2.0 بایت است.
و معماری PA 1.X. Sibcals همیشه در 240,000 بایت محدود است.
فاصله ها از ابتدای توابع در هنگام استفاده اندازه گیری می شوند
-function-sections گزینه، یا هنگام استفاده از -mgas و -mno-portable-runtime گزینه های
با هم تحت HP-UX با پیوند دهنده SOM.
معمولاً استفاده از این گزینه مطلوب نیست زیرا عملکرد را کاهش می دهد. با این حال،
ممکن است در برنامه های کاربردی بزرگ مفید باشد، به خصوص زمانی که از پیوند جزئی استفاده می شود
برنامه را بسازید
انواع تماس های طولانی مورد استفاده بستگی به قابلیت اسمبلر و لینکر دارد.
و نوع کد تولید شده تأثیر بر سیستم هایی که طولانی مدت پشتیبانی می کنند
تماس های مطلق، و طولانی pic نماد-تفاوت یا تماس های نسبی pc باید باشد
نسبتا کوچک. با این حال، یک تماس غیر مستقیم در سیستم های ELF 32 بیتی در کد تصویر استفاده می شود
و بسیار طولانی است
-munix=unix-std
ایجاد کامپایلر از پیش تعریف شده و یک فایل شروع برای استاندارد یونیکس مشخص شده انتخاب کنید.
انتخاب ها برای 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 و جدیدتر.
-munix=93 همان پیش تعریف های GCC 3.3 و 3.4 را ارائه می دهد. -munix=95 فراهم می کند
پیش تعریف های اضافی برای "XOPEN_UNIX" و "_XOPEN_SOURCE_EXTENDED" و فایل شروع
unix95.o. -munix=98 پیش تعریف های اضافی برای "_XOPEN_UNIX" فراهم می کند،
"_XOPEN_SOURCE_EXTENDED"، "_INCLUDE__STDC_A1_SOURCE" و "_INCLUDE_XOPEN_SOURCE_500"،
و فایل شروع unix98.o.
است مهم توجه داشته باشید که این گزینه رابط های کتابخانه های مختلف را تغییر می دهد
کارهای روزمره. همچنین بر رفتار عملیاتی کتابخانه C تأثیر می گذارد. بدین ترتیب، مفرط
در استفاده از این گزینه دقت لازم است.
کد کتابخانه ای که قرار است با بیش از یک استاندارد یونیکس کار کند باید آزمایش شود،
متغیر را تنظیم و بازیابی کنید __xpg4_extended_mask به عنوان مناسب. اکثر نرم افزارهای گنو
این قابلیت را ارائه نمی دهد
-nolibdld
سرکوب تولید گزینه های پیوند برای جستجوی libdld.sl هنگامی که -استاتیک گزینه است
در HP-UX 10 و جدیدتر مشخص شده است.
-استاتیک
اجرای HP-UX setlocale در libc به libdld.sl وابسته است. آنجا
نسخه آرشیو libdld.sl نیست. بنابراین، زمانی که -استاتیک گزینه مشخص شده است،
برای حل این وابستگی به گزینه های پیوند خاصی نیاز است.
در HP-UX 10 و جدیدتر، درایور GCC گزینههای لازم را برای پیوند اضافه میکند
libdld.sl زمانی که -استاتیک گزینه مشخص شده است. این باعث می شود که باینری حاصل به
پویا باشد در پورت 64 بیتی، پیوند دهنده ها به طور پیش فرض باینری های پویا را تولید می کنند
هر مورد را -nolibdld می توان از گزینه برای جلوگیری از اضافه شدن درایور GCC استفاده کرد
این گزینه های پیوند
-موضوعات
اضافه کردن پشتیبانی برای multithreading با dce موضوع کتابخانه تحت HP-UX. این گزینه
پرچم ها را برای پیش پردازنده و پیوند دهنده تنظیم می کند.
اینتل 386 و AMD x86-64 گزینه
اینها -m گزینهها برای رایانههای خانواده i386 و x86-64 تعریف شدهاند:
-مارس=نوع cpu
دستورالعمل هایی را برای نوع ماشین ایجاد کنید نوع cpu. در مقابل -mtune=نوع cpu,
که صرفاً کد تولید شده را برای موارد مشخص شده تنظیم می کند نوع cpu, -مارس=نوع cpu
به GCC اجازه می دهد تا کدی تولید کند که ممکن است اصلاً روی پردازنده های دیگری غیر از آن اجرا نشود
نشان داد. مشخص کردن -مارس=نوع cpu دلالت دارد -mtune=نوع cpu.
انتخاب ها برای نوع cpu هستند:
بومی
این CPU را برای تولید کد در زمان کامپایل با تعیین مقدار انتخاب می کند
نوع پردازنده ماشین کامپایل استفاده كردن -مارس=بومی همه را قادر می سازد
زیرمجموعه های دستورالعمل که توسط ماشین محلی پشتیبانی می شوند (از این رو ممکن است نتیجه اجرا نشود
در ماشین های مختلف). استفاده كردن -mtune=بومی کد بهینه شده برای محلی را تولید می کند
ماشین تحت محدودیت های مجموعه دستورالعمل انتخاب شده است.
i386
سی پی یو اصلی اینتل i386.
i486
سی پی یو اینتل i486. (هیچ برنامه ریزی برای این تراشه اجرا نشده است.)
i586
پنتیوم
سی پی یو پنتیوم اینتل بدون پشتیبانی از MMX.
پنتیوم-mmx
CPU Intel Pentium MMX، مبتنی بر هسته Pentium با پشتیبانی از مجموعه دستورالعمل MMX.
پنتیوم پرو
سی پی یو پنتیوم پرو اینتل.
i686
هنگامی که با استفاده می شود -مارس، از مجموعه دستورالعمل Pentium Pro استفاده می شود، بنابراین کد اجرا می شود
در تمام تراشه های خانواده i686. هنگام استفاده با -mtune، همان معنی را دارد
عمومی.
پنتیوم 2
CPU Intel Pentium II، مبتنی بر هسته Pentium Pro با پشتیبانی از مجموعه دستورالعمل MMX.
پنتیوم 3
پنتیوم 3 متر
CPU Intel Pentium III، بر اساس هسته Pentium Pro با مجموعه دستورالعمل MMX و SSE
پشتیبانی می کند.
پنتیوم-m
اینتل پنتیوم ام; نسخه کم مصرف CPU Intel Pentium III با MMX، SSE و SSE2
پشتیبانی مجموعه دستورالعمل توسط نوت بوک های Centrino استفاده می شود.
پنتیوم 4
پنتیوم 4 متر
CPU Intel Pentium 4 با پشتیبانی از مجموعه دستورالعمل MMX، SSE و SSE2.
پیش فرض
نسخه بهبودیافته CPU Intel Pentium 4 با دستورات MMX، SSE، SSE2 و SSE3
پشتیبانی را تنظیم کنید
نوکونا
نسخه بهبودیافته CPU Intel Pentium 4 با پسوندهای 64 بیتی، MMX، SSE، SSE2 و
پشتیبانی از مجموعه دستورالعمل SSE3.
هسته 2
CPU Intel Core 2 با پسوندهای 64 بیتی، MMX، SSE، SSE2، SSE3 و SSSE3
پشتیبانی مجموعه دستورالعمل
نهالم
CPU اینتل نهالم با پسوندهای 64 بیتی، MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1،
پشتیبانی از مجموعه دستورات SSE4.2 و POPCNT.
وستمر
CPU Intel Westmere با پسوندهای 64 بیتی، MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1،
پشتیبانی از مجموعه دستورات SSE4.2، POPCNT، AES و PCLMUL.
پل ماسه ای
CPU اینتل Sandy Bridge با پسوندهای 64 بیتی، MMX، SSE، SSE2، SSE3، SSSE3،
پشتیبانی از مجموعه دستورالعمل های SSE4.1، SSE4.2، POPCNT، AVX، AES و PCLMUL.
پیچک
CPU Intel Ivy Bridge با پسوندهای 64 بیتی، MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1،
مجموعه دستورات SSE4.2، POPCNT، AVX، AES، PCLMUL، FSGSBASE، RDRND و F16C
پشتیبانی می کند.
خداحافظ
CPU اینتل Haswell با پسوندهای 64 بیتی، MOVBE، MMX، SSE، SSE2، SSE3، SSSE3،
SSE4.1، SSE4.2، POPCNT، AVX، AVX2، AES، PCLMUL، FSGSBASE، RDRND، FMA، BMI، BMI2
و مجموعه دستورالعمل F16C را پشتیبانی می کند.
خداحافظی
CPU Intel Broadwell با پسوندهای 64 بیتی، MOVBE، MMX، SSE، SSE2، SSE3، SSSE3،
SSE4.1، SSE4.2، POPCNT، AVX، AVX2، AES، PCLMUL، FSGSBASE، RDRND، FMA، BMI، BMI2،
پشتیبانی از مجموعه دستورالعمل های F16C، RDSEED، ADCX و PREFETCHW.
بونل
CPU اینتل Bonnell با پسوندهای 64 بیتی، MOVBE، MMX، SSE، SSE2، SSE3 و SSSE3
پشتیبانی مجموعه دستورالعمل
سیلورمونت
CPU Intel Silvermont با پسوندهای 64 بیتی، MOVBE، MMX، SSE، SSE2، SSE3، SSSE3،
پشتیبانی از مجموعه دستورالعمل های SSE4.1، SSE4.2، POPCNT، AES، PCLMUL و RDRND.
k6 CPU AMD K6 با پشتیبانی از مجموعه دستورالعمل MMX.
k6-2
k6-3
نسخه های بهبود یافته CPU AMD K6 با MMX و 3DNow! پشتیبانی مجموعه دستورالعمل
پردازنده های Athlon
athlon-tbird
CPU AMD Athlon با MMX، 3dNOW!، 3DNow پیشرفته! و دستورالعمل های پیش واکشی SSE
پشتیبانی می کند.
Athlon-4
athlon-xp
athlon-mp
CPU AMD Athlon با MMX، 3DNow!، 3DNow پیشرفته! و آموزش کامل SSE
پشتیبانی را تنظیم کنید
k8
اپترون
athlon64
athlon-fx
پردازنده های مبتنی بر هسته AMD K8 با پشتیبانی از مجموعه دستورالعمل x86-64، از جمله
پردازنده های AMD Opteron، Athlon 64 و Athlon 64 FX. (این MMX را فوق مجموعه می کند،
SSE، SSE2، 3DNow!، بهبود یافته 3DNow! و پسوندهای مجموعه دستورالعمل 64 بیتی.)
k8-sse3
opteron-sse3
athlon64-sse3
نسخه های بهبود یافته هسته های AMD K8 با پشتیبانی از مجموعه دستورالعمل SSE3.
amdfam10
بارسلونا
پردازندههای مبتنی بر هستههای AMD Family 10h با پشتیبانی از مجموعه دستورالعمل x86-64. (این
supersets MMX، SSE، SSE2، SSE3، SSE4A، 3DNow!، بهبود یافته 3DNow!، ABM و 64 بیتی
پسوندهای مجموعه دستورالعمل.)
bdver1
پردازندههای مبتنی بر هستههای AMD Family 15h با پشتیبانی از مجموعه دستورالعمل x86-64. (این
فوق مجموعه های FMA4، AVX، XOP، LWP، AES، PCL_MUL، CX16، MMX، SSE، SSE2، SSE3، SSE4A،
پسوندهای مجموعه دستورالعمل SSSE3، SSE4.1، SSE4.2، ABM و 64 بیتی.)
bdver2
پردازندههای مبتنی بر هسته خانواده 15 ساعت AMD با پشتیبانی از مجموعه دستورالعمل 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 بیتی
پسوند.)
bdver3
پردازندههای مبتنی بر هسته خانواده 15 ساعت AMD با پشتیبانی از مجموعه دستورالعمل 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 بیتی
پسوند ها
bdver4
پردازندههای مبتنی بر هسته خانواده 15 ساعت AMD با پشتیبانی از مجموعه دستورالعمل 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 بیتی.
btver1
پردازندههای مبتنی بر هستههای AMD Family 14h با پشتیبانی از مجموعه دستورالعمل x86-64. (این
مجموعه دستورات فوق مجموعه MMX، SSE، SSE2، SSE3، SSSE3، SSE4A، CX16، ABM و 64 بیتی
پسوند.)
btver2
پردازندههای مبتنی بر هستههای AMD Family 16h با پشتیبانی از مجموعه دستورالعمل x86-64. این
شامل MOVBE، F16C، BMI، AVX، PCL_MUL، AES، SSE4.2، SSE4.1، CX16، ABM، SSE4A،
پسوندهای مجموعه دستورالعمل SSSE3، SSE3، SSE2، SSE، MMX و 64 بیتی.
winchip-c6
CPU IDT WinChip C6، به همان روش i486 با مجموعه دستورات اضافی MMX
پشتیبانی می کند.
winchip2
CPU IDT WinChip 2، به همان شیوه i486 با MMX اضافی و 3DNow برخورد می کند!
پشتیبانی مجموعه دستورالعمل
c3 CPU از طریق C3 با MMX و 3DNow! پشتیبانی مجموعه دستورالعمل (بدون برنامه ریزی
برای این تراشه پیاده سازی شده است.)
c3-2
CPU VIA C3-2 (Nehemiah/C5XL) با پشتیبانی از مجموعه دستورالعمل MMX و SSE. (خیر
زمانبندی برای این تراشه اجرا شده است.)
ژئود
پردازنده جاسازی شده AMD Geode با MMX و 3DNow! پشتیبانی مجموعه دستورالعمل
-mtune=نوع cpu
تنظیم کنید نوع cpu همه چیز در مورد کد تولید شده قابل اجرا است، به جز ABI
و مجموعه دستورالعمل های موجود در حین انتخاب یک مورد خاص نوع cpu برنامه
چیزهای مناسب برای آن تراشه خاص، کامپایلر هیچ کدی تولید نمی کند
که نمی تواند روی نوع ماشین پیش فرض اجرا شود مگر اینکه از a استفاده کنید -مارس=نوع cpu گزینه.
برای مثال، اگر GCC برای i686-pc-linux-gnu پیکربندی شده باشد، پس -mtune=pentium4 تولید می کند
کدی که برای پنتیوم 4 تنظیم شده است اما همچنان روی دستگاه های i686 اجرا می شود.
انتخاب ها برای نوع cpu مانند برای هستند -مارس. علاوه بر این، -mtune پشتیبانی از 2
انتخاب های اضافی برای نوع cpu:
عمومی
کد بهینه سازی شده برای رایج ترین پردازنده های IA32/AMD64/EM64T تولید کنید. اگر شما
CPU را که کد شما روی آن اجرا می شود را بدانید، سپس باید از کد مربوطه استفاده کنید
-mtune or -مارس گزینه به جای -mtune=عمومی. اما، اگر نمی دانید
دقیقا همان چیزی که کاربران CPU برنامه شما خواهند داشت، پس باید از آن استفاده کنید
گزینه.
همانطور که پردازنده های جدید در بازار مستقر می شوند، رفتار این گزینه
تغییر خواهد کرد. بنابراین، اگر به نسخه جدیدتر GCC ارتقا دهید، تولید کد را انجام دهید
کنترل شده توسط این گزینه برای منعکس کننده پردازنده هایی که بیشتر هستند تغییر می کند
در زمان انتشار آن نسخه GCC رایج است.
وجود ندارد -مارس=عمومی گزینه زیرا -مارس مجموعه دستورالعمل را نشان می دهد
کامپایلر می تواند استفاده کند، و هیچ مجموعه دستورالعمل عمومی قابل اجرا برای همه وجود ندارد
پردازنده ها متقابلا، -mtune پردازنده را نشان می دهد (یا در این مورد،
مجموعه ای از پردازنده ها) که کد برای آنها بهینه شده است.
اینتل
کد بهینهسازی شده برای جدیدترین پردازندههای اینتل، که Haswell هستند، تولید کنید
و Silvermont برای این نسخه از GCC. اگر CPU را که روی آن کد شما را می شناسید
اجرا خواهد شد، سپس باید از متن مربوطه استفاده کنید -mtune or -مارس گزینه به جای
-mtune=intel. اما، اگر می خواهید برنامه شما در هر دو Haswell بهتر عمل کند
و Silvermont، پس باید از این گزینه استفاده کنید.
همانطور که پردازنده های جدید اینتل در بازار مستقر شده اند، رفتار این است
گزینه تغییر خواهد کرد بنابراین، اگر به نسخه جدیدتر GCC ارتقا دهید، کد کنید
نسل کنترل شده توسط این گزینه تغییر خواهد کرد تا منعکس کننده جدیدترین اینتل باشد
پردازنده ها در زمان عرضه آن نسخه GCC.
وجود ندارد -مارس=اطلاعات گزینه زیرا -مارس مجموعه دستورالعمل را نشان می دهد
کامپایلر می تواند استفاده کند، و هیچ مجموعه دستورالعمل مشترکی برای همه وجود ندارد
پردازنده ها متقابلا، -mtune پردازنده را نشان می دهد (یا در این مورد،
مجموعه ای از پردازنده ها) که کد برای آنها بهینه شده است.
-mcpu=نوع cpu
مترادف منسوخ شده برای -mtune.
-mfpmath=واحد
ایجاد محاسبات ممیز شناور برای واحد انتخاب شده واحد. انتخاب ها برای واحد هستند:
387 استفاده از پردازنده مشترک ممیز شناور استاندارد 387 موجود در اکثر تراشه ها
و در غیر این صورت تقلید می شود. کد کامپایل شده با این گزینه تقریباً در همه جا اجرا می شود.
نتایج موقت به جای دقت با دقت 80 بیتی محاسبه می شوند
بر اساس نوع مشخص شده، و در نتیجه نتایج کمی متفاوت در مقایسه با بسیاری از آنها حاصل می شود
تراشه های دیگر دیدن -float-store برای توضیحات بیشتر
این گزینه پیش فرض برای کامپایلر i386 است.
ESS از دستورالعمل های اسکالر ممیز شناور موجود در مجموعه دستورات SSE استفاده کنید. این
مجموعه دستورالعمل توسط تراشه های Pentium III و جدیدتر و در خط AMD پشتیبانی می شود
توسط تراشه های Athlon-4، Athlon XP و Athlon MP. نسخه قبلی SSE
مجموعه دستورالعمل فقط از محاسبات تک دقیق پشتیبانی می کند، بنابراین دو و
محاسبات با دقت گسترده هنوز با استفاده از 387 انجام می شود. نسخه بعدی موجود است
فقط در تراشه های Pentium 4 و AMD x86-64، از محاسبات با دقت دوگانه نیز پشتیبانی می کند.
برای کامپایلر i386 باید استفاده کنید -مارس=نوع cpu, -msse or -msse2 تغییر می کند به
پسوندهای SSE را فعال کنید و این گزینه را موثر کنید. برای کامپایلر x86-64،
این افزونه ها به صورت پیش فرض فعال هستند.
کد حاصل باید در اکثر موارد بسیار سریعتر باشد
از مشکلات بی ثباتی عددی کد 387 اجتناب کنید، اما ممکن است برخی از کدهای موجود را از بین ببرد
کدی که انتظار دارد موقتی 80 بیت باشد.
این انتخاب پیش فرض برای کامپایلر x86-64 است.
sse,387
sse+387
هر دو
سعی کنید از هر دو مجموعه دستورالعمل به طور همزمان استفاده کنید. این به طور موثر دو برابر می شود
تعداد رجیسترهای موجود و روی تراشههایی با واحدهای اجرایی مجزا برای 387
و SSE منابع اجرایی نیز. از این گزینه همانطور که هنوز است با احتیاط استفاده کنید
آزمایشی، زیرا تخصیص دهنده ثبات GCC مدل جداگانه ای را انجام نمی دهد
واحدهای عملکردی به خوبی، در نتیجه عملکرد ناپایدار.
-masm=گویش
دستورالعمل مونتاژ خروجی با استفاده از انتخاب شده گویش. گزینه های پشتیبانی شده هستند اینتل or
att (پیشفرض). داروین پشتیبانی نمی کند اینتل.
-mieee-fp
-mno-ieee-fp
کنترل کنید که آیا کامپایلر از مقایسه های ممیز شناور IEEE استفاده می کند یا خیر. اینها
در مواردی که نتیجه مقایسه نامرتب است به درستی رسیدگی کنید.
-msoft-float
خروجی حاوی فراخوان های کتابخانه ای برای ممیز شناور تولید کنید.
هشدار: کتابخانه های مورد نیاز بخشی از GCC نیستند. به طور معمول امکانات از
از کامپایلر C معمولی ماشین استفاده می شود، اما این کار را نمی توان مستقیماً در حالت متقابل انجام داد.
تلفیقی. شما باید ترتیبات خود را برای تهیه کتابخانه مناسب انجام دهید
توابع برای کامپایل متقابل
در ماشینهایی که تابعی ممیز شناور را برمیگرداند، رجیستر 80387 را نشان میدهد
پشته، برخی از کدهای عملیاتی ممیز شناور ممکن است منتشر شوند حتی اگر -msoft-float استفاده می شود.
-mno-fp-ret-in-387
از رجیسترهای FPU برای مقادیر بازگشتی توابع استفاده نکنید.
قرارداد فراخوانی معمول دارای توابعی است که مقادیری از انواع "float" و "double" را برمی گرداند.
در یک رجیستر FPU، حتی اگر FPU وجود نداشته باشد. ایده این است که سیستم عامل
باید یک FPU را شبیه سازی کند.
گزینه -mno-fp-ret-in-387 باعث می شود که چنین مقادیری در CPU معمولی برگردانده شوند
در عوض ثبت می کند.
-mno-fancy-math-387
برخی از 387 شبیه ساز از دستورالعمل های "sin"، "cos" و "sqrt" برای
387. برای جلوگیری از ایجاد آن دستورالعمل ها، این گزینه را مشخص کنید. این گزینه است
به طور پیش فرض در FreeBSD، OpenBSD و NetBSD. زمانی که این گزینه لغو می شود -مارس
نشان می دهد که CPU هدف همیشه یک FPU دارد و بنابراین دستورالعمل نیازی ندارد
تقلید این دستورالعملها ایجاد نمیشوند مگر اینکه شما نیز از آن استفاده کنید
-بهینهسازیهای ریاضی و سرگرمکننده سوئیچ.
بدخیم-دوبرابر
-mno-align-double
کنترل کنید که آیا GCC متغیرهای "double"، "long double" و "long long" را روی a تراز می کند یا خیر
مرز دو کلمه ای یا مرز یک کلمه ای. تراز کردن متغیرهای "دو" در دو کلمه
مرز کدی را تولید میکند که تا حدودی سریعتر روی پنتیوم اجرا میشود که هزینههای بیشتری را به همراه دارد
حافظه است.
در x86-64، بدخیم-دوبرابر به طور پیش فرض فعال است.
هشدار: اگر از بدخیم-دوبرابر سوئیچ، سازه های حاوی انواع فوق
متفاوت از مشخصات رابط باینری برنامه منتشر شده تراز شده اند
برای 386 و با ساختارهای کد کامپایل شده بدون باینری سازگار نیستند
آن سوئیچ
-m96bit-long-double
-m128bit-long-double
این سوئیچ ها اندازه "دبل طولانی" را کنترل می کنند. باینری برنامه i386
رابط اندازه را 96 بیت تعیین می کند، بنابراین -m96bit-long-double پیش فرض در است
حالت 32 بیتی
معماریهای مدرن (پنتیوم و جدیدتر) ترجیح میدهند "طولان دوبل" با 8 تراز شود.
یا مرز 16 بایتی. در آرایه ها یا ساختارهای منطبق با ABI، اینطور نیست
ممکن است. بنابراین مشخص کردن -m128bit-long-double "long double" را به 16 بایت تراز می کند
با اضافه کردن "دبل طولانی" با یک صفر 32 بیتی اضافی، مرز را تعیین کنید.
در کامپایلر x86-64، -m128bit-long-double انتخاب پیش فرض به عنوان ABI آن است
مشخص می کند که "long double" روی مرز 16 بایتی تراز شده است.
توجه داشته باشید که هیچ یک از این گزینه ها هیچ دقت بیشتری را نسبت به استاندارد x87 فعال نمی کنند
80 بیت برای "دبل طولانی".
هشدار: اگر مقدار پیش فرض را برای ABI هدف خود لغو کنید، این اندازه را تغییر می دهد
از ساختارها و آرایه های حاوی متغیرهای "long double" و همچنین تغییر در
کنوانسیون فراخوانی تابع برای توابعی که "long double" دریافت می کنند. از این رو آنها نیستند
سازگار با کد باینری که بدون آن سوئیچ کامپایل شده است.
-mlong-double-64
-mlong-double-80
-mlong-double-128
این سوئیچ ها اندازه "دبل طولانی" را کنترل می کنند. اندازه 64 بیت باعث می شود
نوع "طولانی دوبل" معادل نوع "دو". این پیش فرض برای 32 بیت است
کتابخانه Bionic C. اندازه 128 بیتی، نوع "long double" را معادل می کند
نوع "__float128". این پیش فرض برای کتابخانه Bionic C 64 بیتی است.
هشدار: اگر مقدار پیش فرض را برای ABI هدف خود لغو کنید، این اندازه را تغییر می دهد
از ساختارها و آرایه های حاوی متغیرهای "long double" و همچنین تغییر در
کنوانسیون فراخوانی تابع برای توابعی که "long double" دریافت می کنند. از این رو آنها نیستند
سازگار با کد باینری که بدون آن سوئیچ کامپایل شده است.
-mlarge-data-threshold=آستانه
چه زمانی -mcmodel=متوسط مشخص شده است، اشیاء داده بزرگتر از آستانه در قرار می گیرند
بخش داده های بزرگ این مقدار باید در تمام اشیاء مرتبط به یکسان باشد
باینری و پیش فرض 65535 است.
-mrtd
از یک قرارداد فراخوانی تابع متفاوت استفاده کنید، که در آن توابعی که یک حالت ثابت دارند
تعداد آرگومان ها با "ret تعداد" دستورالعمل، که استدلال های آنها را نشان می دهد
در حین بازگشت این یک دستورالعمل را در تماس گیرنده ذخیره می کند زیرا نیازی به آن نیست
استدلال ها را در آنجا مطرح کنید.
می توانید مشخص کنید که یک تابع جداگانه با این دنباله فراخوانی با فراخوانی شود
ویژگی تابع stdcall. شما همچنین می توانید لغو کنید -mrtd گزینه با استفاده از
ویژگی تابع cdecl.
هشدار: این قرارداد فراخوانی با قراردادی که معمولاً در یونیکس استفاده می شود ناسازگار است،
بنابراین اگر نیاز به فراخوانی کتابخانه های کامپایل شده با کامپایلر یونیکس دارید، نمی توانید از آن استفاده کنید.
همچنین، شما باید نمونه های اولیه تابع را برای همه توابعی که متغیر می گیرند ارائه دهید
تعداد آرگومان ها (از جمله "printf")؛ در غیر این صورت کد نادرستی برای آن تولید می شود
به آن توابع فراخوانی می کند.
علاوه بر این، اگر تابعی را با تعداد زیاد فراخوانی کنید، کد به طور جدی نادرست است
استدلال ها (به طور معمول، استدلال های اضافی بی ضرر نادیده گرفته می شوند.)
-mregparm =تعداد
کنترل تعداد رجیسترهایی که برای ارسال آرگومان های عدد صحیح استفاده می شوند. به طور پیش فرض، خیر
ثبات ها برای ارسال آرگومان ها استفاده می شوند و حداکثر می توان از 3 ثبات استفاده کرد. تو می توانی
این رفتار را برای یک تابع خاص با استفاده از ویژگی تابع کنترل کنید regparm.
هشدار: اگر از این سوئیچ استفاده می کنید، و تعداد غیر صفر است، پس باید همه ماژول ها را بسازید
با همان مقدار، از جمله هر کتابخانه. این شامل کتابخانه های سیستم و
ماژول های راه اندازی
-msseregparm
از قراردادهای عبور ثبت SSE برای آرگومان های شناور و دوبل و مقادیر بازگشتی استفاده کنید.
شما می توانید این رفتار را برای یک تابع خاص با استفاده از ویژگی تابع کنترل کنید
sseregparm.
هشدار: اگر از این سوئیچ استفاده می کنید، باید همه ماژول ها را با یک مقدار بسازید،
از جمله هر کتابخانه این شامل کتابخانه های سیستم و ماژول های راه اندازی می شود.
-mvect8-ret-in-mem
بردارهای 8 بایتی را به جای رجیسترهای MMX برگردانید. این پیش فرض روشن است
Solaris@tie{}8 و 9 و VxWorks برای مطابقت با ABI کامپایلرهای Sun Studio تا
نسخه 12. نسخههای کامپایلر بعدی (شروع با Studio 12 Update@tie{}1)
ABI مورد استفاده سایر اهداف x86، که پیشفرض در Solaris@tie{}10 و بالاتر است.
تنها اگر نیاز به سازگاری با کدهای موجود تولید شده توسط دارید از این گزینه استفاده کنید
آن نسخه های کامپایلر قبلی یا نسخه های قدیمی GCC.
-mpc32
-mpc64
-mpc80
دقت ممیز شناور 80387 را روی 32، 64 یا 80 بیت تنظیم کنید. چه زمانی -mpc32 مشخص شده است،
معنی نتایج عملیات ممیز شناور به 24 بیت گرد می شود
(تک دقت)؛ -mpc64 معانی نتایج ممیز شناور را گرد می کند
عملیات تا 53 بیت (دقت دو برابر) و -mpc80 معنی نتایج را گرد می کند
از عملیات ممیز شناور تا 64 بیت (دقت مضاعف توسعه یافته)، که این است
پیش فرض وقتی از این گزینه استفاده می شود، عملیات ممیز شناور با دقت بالاتری انجام می شود
بدون تنظیم کلمه کنترل FPU به طور صریح برای برنامه نویس در دسترس نیست.
تنظیم گرد کردن عملیات ممیز شناور به کمتر از 80 بیت پیش فرض
سرعت برخی از برنامه ها 2 درصد یا بیشتر. توجه داشته باشید که برخی از کتابخانه های ریاضی چنین فرض می کنند
عملیات ممیز شناور با دقت گسترده (80 بیتی) به طور پیش فرض فعال هستند. کارهای روزمره
در چنین کتابخانههایی معمولاً از طریق
زمانی که از این گزینه برای تنظیم دقت استفاده می شود، "لغو فاجعه بار" نامیده می شود
کمتر از دقت گسترده
-mstackrealign
پشته را در هنگام ورود مجدداً تنظیم کنید. در Intel x86، -mstackrealign گزینه یک را ایجاد می کند
مقدمه و پایانی متناوب که در صورت لزوم پشته زمان اجرا را مجدداً تنظیم می کند. این
از ترکیب کدهای قدیمی پشتیبانی می کند که همراستایی پشته 4 بایتی را با کدهای مدرن حفظ می کند
تراز پشته 16 بایتی را برای سازگاری با SSE حفظ کنید. صفت را نیز ببینید
"force_align_arg_pointer"، قابل اجرا برای توابع جداگانه.
-mpreferred-stack-boundary=تعداد
سعی کنید مرز پشته در تراز با 2 افزایش یافته باشد تعداد مرز بایت اگر
-مرجع پشته ترجیح داده شده مشخص نشده است، پیش فرض 4 (16 بایت یا 128 بیت) است.
هشدار: هنگام تولید کد برای معماری x86-64 با پسوندهای SSE
معلول، -mpreferred-stack-boundary=3 می توان برای تراز نگه داشتن مرز پشته استفاده کرد
تا مرز 8 بایت از آنجایی که x86-64 ABI به تراز پشته 16 بایتی نیاز دارد، این ABI است
ناسازگار و در نظر گرفته شده برای استفاده در محیط کنترل شده که فضای پشته است
محدودیت مهم این گزینه در هنگام کامپایل شدن توابع منجر به کد اشتباه می شود
با تراز پشته 16 بایتی (مانند توابع از یک کتابخانه استاندارد) فراخوانی می شود
با پشته نامناسب. در این مورد، دستورالعمل های SSE ممکن است منجر به عدم تراز حافظه شود
تله های دسترسی علاوه بر این، آرگومان های متغیر برای 16 بایت به اشتباه مدیریت می شوند
اشیاء تراز شده (از جمله x87 long double و __int128)، که منجر به نتایج اشتباه می شود.
شما باید تمام ماژول ها را با -mpreferred-stack-boundary=3، از جمله هر کتابخانه.
این شامل کتابخانه های سیستم و ماژول های راه اندازی می شود.
-mincoming-stack-boundary=تعداد
فرض کنید پشته ورودی به 2 تراز شده است تعداد مرز بایت اگر
-mincoming-stack-boundary مشخص نشده است، یکی که توسط
-مرجع پشته ترجیح داده شده استفاده می شود.
در Pentium و Pentium Pro، مقادیر "double" و "long double" باید با یک تراز شوند.
مرز 8 بایتی (نگاه کنید به بدخیم-دوبرابر) یا از عملکرد قابل توجهی در زمان اجرا رنج می برند
مجازات ها در Pentium III، نوع داده SIMD Extension Streaming (SSE) "__m128" ممکن است
اگر 16 بایت تراز نباشد به درستی کار نمی کند.
برای اطمینان از تراز مناسب این مقادیر در پشته، مرز پشته باید مانند باشد
مطابق با مقدار مورد نیاز هر مقدار ذخیره شده در پشته تراز می شود. علاوه بر این، هر تابع
باید به گونه ای تولید شود که پشته را در یک راستا نگه دارد. بنابراین فراخوانی یک تابع
با یک مرز پشته ترجیحی بالاتر از تابعی که با یک پایین کامپایل شده است
مرز پشته ترجیحی به احتمال زیاد پشته را نادرست تراز می کند. توصیه می شود که
کتابخانه هایی که از تماس های برگشتی استفاده می کنند همیشه از تنظیمات پیش فرض استفاده می کنند.
این تراز اضافی فضای اضافی پشته را مصرف می کند و به طور کلی کد را افزایش می دهد
اندازه. کدهایی که به استفاده از فضای پشته حساس هستند، مانند سیستم های تعبیه شده و
هسته های سیستم عامل، ممکن است بخواهند تراز ترجیحی را کاهش دهند
-mpreferred-stack-boundary=2.
-mmmx
-mno-mmx
-msse
-mno-sse
-msse2
-mno-sse2
-msse3
-mno-sse3
-mssse3
-mno-ssse3
-msse4.1
-mno-sse4.1
-msse4.2
-mno-sse4.2
-msse4
-mno-sse4
-mavx
-mno-avx
-mavx2
-mno-avx2
-mavx512f
-mno-avx512f
-mavx512pf
-mno-avx512pf
-mavx512er
-mno-avx512er
-mavx512cd
-mno-avx512cd
-مشا
-mno-sha
-میس
-mno-aes
-mpclmul
-mno-pclmul
-mfsgsbase
-mno-fsgsbase
-مردرند
-mno-rdrnd
-mf16c
-mno-f16c
-mfma
-mno-fma
-mprefetchwt1
-mno-prefetchwt1
-msse4a
-mno-sse4a
-mfma4
-mno-fma4
-mxop
-mno-xop
-mlwp
-mno-lwp
-m3dnow
-mno-3dnow
-mpopcnt
-mno-popcnt
-mabm
-mno-abm
-mbmi
-mbmi2
-mno-bmi
-mno-bmi2
-mlzcnt
-mno-lzcnt
-mfxsr
-mxsave
-mxsaveopt
-mrtm
-MTBM
-mno-tbm
این سوئیچ ها استفاده از دستورالعمل ها را در 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، یا 3DNow! مجموعه دستورالعمل های توسعه یافته این پسوندها نیز هستند
به عنوان توابع داخلی موجود است: ببینید X86 توکار توابع، برای جزئیات بیشتر
عملکردهایی که توسط این سوئیچ ها فعال و غیرفعال می شوند.
برای تولید دستورالعمل های SSE/SSE2 به طور خودکار از کد ممیز شناور (برعکس
به 387 دستورالعمل) را ببینید -mfpMath = SSE.
GCC دستورات SSEx را در زمانی که -mavx استفاده می شود. در عوض، AVX جدید تولید می کند
دستورالعمل ها یا معادل AVX برای تمام دستورالعمل های SSEx در صورت نیاز.
این گزینهها GCC را قادر میسازد تا از این دستورالعملهای توسعهیافته در کدهای تولید شده استفاده کند
بدون -mfpMath = SSE. برنامه هایی که تشخیص CPU در زمان اجرا را انجام می دهند باید کامپایل شوند
فایل های جداگانه برای هر معماری پشتیبانی شده، با استفاده از پرچم های مناسب. که در
به ویژه، فایل حاوی کد شناسایی CPU باید بدون کامپایل شود
این گزینه ها
ویژگی های mdump-tune
این گزینه به GCC دستور می دهد تا نام ویژگی های تنظیم عملکرد x86 و
تنظیمات پیش فرض. نام ها را می توان در استفاده کرد -mtune-ctrl=لیست ویژگی.
-mtune-ctrl=لیست ویژگی
این گزینه برای کنترل دانه های ریز ویژگی های تولید کد x86 استفاده می شود.
لیست ویژگی یک لیست جدا شده از کاما است از ویژگی های نام ها همچنین ببینید
ویژگی های mdump-tune. وقتی مشخص شد، از ویژگی های اگر نباشد روشن خواهد شد
قبل از "^"، در غیر این صورت، خاموش خواهد شد. -mtune-ctrl=لیست ویژگی is
در نظر گرفته شده برای توسعه دهندگان GCC استفاده شود. استفاده از آن ممکن است منجر به مسیرهای کدی شود که تحت پوشش نیستند
تست می شود و به طور بالقوه می تواند منجر به ICE های کامپایلر یا خطاهای زمان اجرا شود.
-mno-default
این گزینه به GCC دستور می دهد تا همه ویژگی های قابل تنظیم را خاموش کند. همچنین ببینید
-mtune-ctrl=لیست ویژگی و ویژگی های mdump-tune.
-mcld
این گزینه به GCC دستور می دهد تا یک دستورالعمل "cld" را در مقدمه توابع منتشر کند
که از دستورالعمل های رشته ای استفاده می کنند. دستورالعمل های رشته برای انتخاب به پرچم DF بستگی دارد
بین حالت افزایش خودکار یا کاهش خودکار. در حالی که ABI پرچم DF را مشخص می کند
در هنگام ورود عملکرد پاک شود، برخی از سیستم عامل ها این مشخصات را با عدم تخطی می کنند
پاک کردن پرچم DF در توزیع کننده های استثنای خود. کنترل کننده استثنا می تواند باشد
با مجموعه پرچم DF فراخوانی می شود، که منجر به حالت جهت اشتباه در هنگام رشته می شود
دستورالعمل استفاده می شود. این گزینه را می توان به طور پیش فرض روی اهداف x32 86 بیتی فعال کرد
پیکربندی GCC با --enable-cld گزینه پیکربندی تولید "cld"
دستورالعمل ها را می توان با -mno-cld گزینه کامپایلر در این مورد.
-mvzeroupper
این گزینه به GCC دستور می دهد تا قبل از انتقال یک دستورالعمل "vzeroupper" را صادر کند
جریان خارج از تابع را کنترل کنید تا جریمه انتقال AVX به SSE را نیز به حداقل برسانید
به عنوان حذف غیر ضروری "صفر" ذاتی.
-mprefer-avx128
این گزینه به GCC دستور می دهد تا از دستورالعمل های AVX 128 بیتی به جای AVX 256 بیتی استفاده کند.
دستورالعمل ها در بردار خودکار
-mcx16
این گزینه GCC را قادر می سازد تا دستورالعمل های "CMPXCHG16B" را ایجاد کند. "CMPXCHG16B" اجازه می دهد
برای عملیات اتمی بر روی انواع داده های چهار کلمه ای (یا oword) 128 بیتی. این هست
مفید برای شمارنده های با وضوح بالا که می توانند توسط چندین پردازنده به روز شوند (یا
هسته ها). این دستورالعمل به عنوان بخشی از توابع داخلی اتمی تولید می شود: ببینید
__همگام سازی ساخته شده است or __اتمی ساخته شده است برای جزئیات بیشتر.
-مصحف
این گزینه تولید دستورالعمل های "SAHF" را در کد 64 بیتی فعال می کند. اینتل اولیه
پردازندههای پنتیوم 4 با پشتیبانی از Intel 64، قبل از معرفی مرحله Pentium 4 G1
در دسامبر 2005، فاقد دستورالعمل های "LAHF" و "SAHF" بود که توسط
AMD64. اینها به ترتیب دستورالعمل های بارگیری و ذخیره برای پرچم های وضعیت خاص هستند.
در حالت 64 بیتی، دستور SAHF برای بهینه سازی fmod، drem و
توابع داخلی "باقی مانده"؛ دیدن دیگر ساخته شده است برای جزئیات بیشتر.
-mmovbe
این گزینه استفاده از دستورالعمل "movbe" را برای پیاده سازی "__builtin_bswap32" فعال می کند.
و "__builtin_bswap64".
-mcrc32
این گزینه توابع داخلی "__builtin_ia32_crc32qi" را فعال می کند.
"__builtin_ia32_crc32hi"، "__builtin_ia32_crc32si" و "__builtin_ia32_crc32di" به
دستور ماشین crc32 را تولید کنید.
-مندی
این گزینه استفاده از دستورالعمل های "RCPSS" و "RSQRTSS" (و بردار آنها) را فعال می کند
انواع "RCPPS" و "RSQRTPS") با یک گام اضافی نیوتن رافسون برای افزایش
دقت به جای "DIVSS" و "SQRTSS" (و انواع بردار آنها) برای تک
آرگومان های ممیز شناور دقیق این دستورالعمل ها تنها زمانی تولید می شوند که
-بهینهسازیهای ریاضی و سرگرمکننده همراه با فعال می شود -فقط ریاضی محدود و
-fno-به دام انداختن-ریاضی. توجه داشته باشید که در حالی که توان عملیاتی دنباله بالاتر از مقدار است
توان عملیات غیر متقابل دستورالعمل، دقت توالی می تواند باشد
تا 2 ulp کاهش یافت (یعنی معکوس 1.0 برابر 0.99999994 است).
توجه داشته باشید که GCC "1.0f/sqrtf(ایکس)" از نظر "RSQRTSS" (یا "RSQRTPS") در حال حاضر
با سریع-ریاضی (یا ترکیب گزینه بالا)، و نیازی ندارد -مندی.
همچنین توجه داشته باشید که GCC دنباله فوق را با گام اضافی نیوتن-رافسون منتشر می کند
بردار تقسیم تک شناور و بردار "sqrtf(ایکس)" در حال حاضر با سریع-ریاضی
(یا ترکیب گزینه بالا)، و نیازی ندارد -مندی.
-mrecip=انتخاب کردن
این گزینه کنترل می کند که کدام دستورالعمل های برآورد متقابل ممکن است استفاده شود. انتخاب کردن هست یک
فهرستی از گزینههای جدا شده با کاما، که ممکن است قبل از آن a ! برای معکوس کردن گزینه:
تمام تمام دستورالعمل های برآورد را فعال کنید.
به طور پیش فرض
دستورالعمل های پیش فرض را فعال کنید، معادل -مندی.
هیچ
غیرفعال کردن همه دستورالعمل های تخمینی، معادل -mno-recip.
DIV تقریب را برای تقسیم اسکالر فعال کنید.
vec-div
تقریب را برای تقسیم بردار فعال کنید.
sqrt
تقریب را برای ریشه مربع اسکالر فعال کنید.
vec-sqrt
تقریب را برای ریشه مربع بردار فعال کنید.
به عنوان مثال ، -mrecip=همه،!sqrt تمام تقریب های متقابل را فعال می کند،
به جز جذر
-mveclibabi=نوع
نوع ABI را برای استفاده برای بردار کردن ذاتی با استفاده از یک کتابخانه خارجی مشخص می کند.
مقادیر پشتیبانی شده برای نوع هستند svml برای کتابخانه ریاضی بردار کوتاه اینتل و acml
برای کتابخانه هسته ریاضی AMD. برای استفاده از این گزینه، هر دو -ftree-vectorize و
-بهینهسازیهای ریاضی و سرگرمکننده باید فعال باشد و یک 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 مورد استفاده در گنو/لینوکس و سایر سیستم ها، و ms برای Microsoft ABI در
پیش فرض استفاده از Microsoft ABI هنگام هدف قرار دادن Microsoft Windows و SysV ABI است
در تمام سیستم های دیگر با استفاده از آن می توانید این رفتار را برای یک تابع خاص کنترل کنید
ویژگی تابع ms_abi/sysv_abi.
-mtls-dialect=نوع
ایجاد کد برای دسترسی به حافظه محلی رشته با استفاده از گوزن یالدار or gnu2 قراردادها گوزن یالدار
پیش فرض محافظه کارانه است. gnu2 کارآمدتر است، اما ممکن است کامپایل و اجرا را اضافه کند
نیازهای زمانی که در همه سیستم ها برآورده نمی شود.
-mpush-args
-mno-push-args
از عملیات PUSH برای ذخیره پارامترهای خروجی استفاده کنید. این روش کوتاهتر و معمولاً است
به همان اندازه سریع با استفاده از عملیات SUB/MOV و به طور پیش فرض فعال است. در برخی
موارد غیرفعال کردن آن ممکن است عملکرد را به دلیل بهبود زمانبندی و کاهش آن بهبود بخشد
وابستگی ها
انباشته-خروجی-آرگ
اگر فعال باشد، حداکثر فضای مورد نیاز برای آرگومان های خروجی محاسبه می شود
پیش درآمد تابع این سرعت در اکثر CPUهای مدرن به دلیل کاهش سرعت بیشتر است
وابستگیها، بهبود زمانبندی و کاهش استفاده از پشته زمانی که پشته ترجیح داده میشود
مرز برابر با 2 نیست. اشکال آن افزایش قابل توجه در اندازه کد است. این
سوئیچ دلالت می کند -mno-push-args.
-mthreads
از مدیریت استثنایی ایمن رشته در MinGW پشتیبانی کنید. برنامه هایی که به Thread-safe متکی هستند
مدیریت استثنا باید همه کدها را با کد کامپایل و پیوند دهد -mthreads گزینه. چه زمانی
تدوین، -mthreads "-D_MT" را تعریف می کند. هنگام پیوند، در یک موضوع خاص لینک می شود
کتابخانه کمکی -lmingwthrd که داده های رسیدگی به استثنای هر رشته را پاک می کند.
-منهای متناوب
مقصد عملیات رشته خطی را تراز نکنید. این سوئیچ کد را کاهش می دهد
اندازه و عملکرد را بهبود می بخشد در صورتی که مقصد از قبل تراز شده باشد، اما GCC
در مورد آن نمی داند
-minline-all-stringops
بهطور پیشفرض GCC عملیات رشتهای را تنها زمانی که مقصد مشخص باشد، درونریزی میکند
با حداقل یک مرز 4 بایت تراز شده است. این کار باعث می شود تا کدهای درونی بیشتر و کد افزایش یابد
اندازه، اما ممکن است عملکرد کد را بهبود بخشد که به سریع "memcpy"، "strlen" و
"ممست" برای قدهای کوتاه.
-minline-stringops-به صورت پویا
برای عملیات رشته ای با اندازه ناشناخته، از چک های زمان اجرا با کد درون خطی برای کوچک استفاده کنید
بلوک ها و یک کتابخانه برای بلوک های بزرگ فراخوانی می کند.
-mstringop-strategy=جلبک
نادیده گرفتن اکتشافی تصمیم داخلی برای الگوریتم خاص برای استفاده
عملیات رشته درونی مقادیر مجاز برای جلبک هستند:
rep_byte
rep_4byte
rep_8byte
با استفاده از پیشوند i386 "rep" با اندازه مشخص شده را باز کنید.
بایت_حلقه
حلقه
unrolled_loop
به یک حلقه درون خطی گسترش دهید.
libcall
همیشه از تماس کتابخانه استفاده کنید.
-mmemcpy-strategy=استراتژی
برای تصمیم گیری در مورد اینکه آیا "__builtin_memcpy" باید باشد یا خیر، اکتشافی تصمیم داخلی را لغو کنید
خطی و چه الگوریتم درون خطی برای اندازه مورد انتظار عملیات کپی استفاده شود
شناخته شده است. استراتژی یک لیست جدا شده با کاما از جلبک:حداکثر_اندازه:dest_align سه قلو جلبک
مشخص شده است در -mstringop-strategy, حداکثر_اندازه حداکثر اندازه بایت را مشخص می کند
الگوریتم درون خطی جلبک مجاز است. برای آخرین سه قلو، حداکثر_اندازه باید "-1" باشد. را
حداکثر_اندازه سه قلوهای موجود در لیست باید به ترتیب افزایشی مشخص شوند. در
حداقل اندازه بایت برای جلبک برای اولین سه قلو صفر است و "حداکثر_اندازه + 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 بیت، %fs برای 64 بیت)، یا اینکه آیا نشانگر پایه رشته باید باشد
اضافه. معتبر بودن یا نبودن این مورد به سیستم عامل و اینکه آیا آن معتبر است بستگی دارد
بخش را برای پوشش کل منطقه TLS ترسیم می کند.
برای سیستم هایی که از کتابخانه گنو سی استفاده می کنند، پیش فرض روشن است.
-msse2avx
-mno-sse2avx
مشخص کنید که اسمبلر باید دستورالعمل های SSE را با پیشوند VEX رمزگذاری کند. گزینه
-mavx این را به طور پیش فرض روشن می کند.
-mfentry
-Mno-Fentry
اگر پروفایل فعال است (-صفحه)، فراخوان پیشخوان پروفایل را قبل از مقدمه قرار دهید.
توجه: در معماری های x86 ویژگی "ms_hook_prologue" در آن امکان پذیر نیست
لحظه ای برای -mfentry و -صفحه.
-m8bit-idiv
-mno-8bit-idiv
در برخی از پردازندهها، مانند Intel Atom، تقسیم اعداد صحیح بدون علامت 8 بیتی بسیار سریعتر از
تقسیم اعداد صحیح 32 بیتی/64 بیتی. این گزینه یک بررسی زمان اجرا ایجاد می کند. اگر هر دو
تقسیم کننده و تقسیم کننده در محدوده 0 تا 255 هستند، تقسیم عدد صحیح بدون علامت 8 بیتی است
به جای تقسیم اعداد صحیح 32 بیتی/64 بیتی استفاده می شود.
-mavx256-split-unaligned-load
-mavx256-split-unaligned-store
بار 32 بایتی AVX بدون تراز را تقسیم کرده و ذخیره کنید.
-mstack-protector-guard=گارد
کد حفاظت پشته را با استفاده از canary at ایجاد کنید گارد. مکان های پشتیبانی شده هستند جهانی
برای قناری جهانی یا TLS برای قناری هر رشته در بلوک TLS (پیشفرض). این
گزینه فقط زمانی اثر دارد که محافظ چوب or -fstack-protector-all مشخص شده است.
اینها -m سوئیچ ها علاوه بر موارد فوق در پردازنده های x86-64 در 64 بیت پشتیبانی می شوند
محیط.
-32
-64
-mx32
-16
کد برای یک محیط 16 بیتی، 32 بیتی یا 64 بیتی تولید کنید. در -32 گزینه "int" را تنظیم می کند،
"long" و نوع اشاره گر به 32 بیت، و کدی تولید می کند که روی هر سیستم i386 اجرا می شود.
La -64 گزینه "int" را روی 32 بیت و "long" و انواع اشاره گر را روی 64 بیت تنظیم می کند.
کد برای معماری x86-64 تولید می کند. فقط برای داروین -64 گزینه نیز
خاموش می کند -fno-pic و -mdynamic-no-pic گزینه.
La -mx32 گزینه "int"، "long" و انواع اشاره گر را روی 32 بیت تنظیم می کند و کد تولید می کند
برای معماری x86-64.
La -16 گزینه همان است -32، به جز اینکه "code16gcc." را خروجی می دهد
دستورالعمل اسمبلی در ابتدای خروجی اسمبلی به طوری که باینری بتواند اجرا شود
در حالت 16 بیتی
-mno-red-zone
برای کد x86-64 از به اصطلاح "منطقه قرمز" استفاده نکنید. منطقه قرمز توسط
x86-64 ABI; این یک منطقه 128 بایتی فراتر از مکان نشانگر پشته است که نیست
توسط کنترل کننده های سیگنال یا وقفه تغییر یافته و بنابراین می توان برای داده های موقت استفاده کرد
بدون تنظیم نشانگر پشته پرچم -mno-red-zone این منطقه قرمز را غیرفعال می کند.
-mcmodel=small
ایجاد کد برای مدل کد کوچک: برنامه و نمادهای آن باید به آن پیوند داده شوند
2 گیگابایت پایین فضای آدرس. اشاره گرها 64 بیت هستند. برنامه ها می توانند باشند
به صورت ایستا یا پویا پیوند خورده است. این مدل کد پیش فرض است.
-mcmodel=kernel
برای مدل کد هسته کد تولید کنید. هسته در منفی 2 گیگابایت اجرا می شود
فضای آدرس این مدل باید برای کد هسته لینوکس استفاده شود.
-mcmodel=متوسط
ایجاد کد برای مدل متوسط: برنامه در 2 گیگابایت پایین لینک شده است
فضای آدرس نمادهای کوچک نیز در آنجا قرار داده شده است. نمادهایی با اندازه های بزرگتر از
آستانه داده های بزرگ در داده های بزرگ یا بخش های BSS قرار می گیرند و می توانند مکان یابی شوند
بالای 2 گیگابایت برنامه ها را می توان به صورت ایستا یا پویا پیوند داد.
-mcmodel=بزرگ
کد برای مدل بزرگ تولید کنید. این مدل هیچ فرضی در مورد آدرس ها ندارد
و اندازه بخش ها
-maddress-mode=طولانی
کد برای حالت آدرس طولانی تولید کنید. این فقط برای 64 بیت و x32 پشتیبانی می شود
محیط ها این حالت آدرس پیش فرض برای محیط های 64 بیتی است.
-maddress-mode=کوتاه
کد برای حالت آدرس کوتاه تولید کنید. این فقط برای 32 بیت و x32 پشتیبانی می شود
محیط ها این حالت آدرس پیش فرض برای محیط های 32 بیتی و x32 است.
i386 و x86-64 ویندوز گزینه
این گزینه های اضافی برای اهداف Microsoft Windows در دسترس هستند:
-mconsole
این گزینه مشخص می کند که یک برنامه کنسول با دستور تولید می شود
پیوند دهنده برای تنظیم نوع زیرسیستم هدر PE مورد نیاز برای برنامه های کنسول.
این گزینه برای اهداف Cygwin و MinGW موجود است و به طور پیش فرض فعال است
آن اهداف
-mdll
این گزینه برای اهداف Cygwin و MinGW موجود است. مشخص می کند که یک DLL---a
کتابخانه پیوند پویا --- باید تولید شود و امکان انتخاب موارد مورد نیاز را فراهم کند
شی راه اندازی زمان اجرا و نقطه ورودی.
-mnop-fun-dllimport
این گزینه برای اهداف Cygwin و MinGW موجود است. مشخص می کند که
ویژگی "dllimport" باید نادیده گرفته شود.
-mthread
این گزینه برای اهداف MinGW موجود است. آن رشته مخصوص MinGW را مشخص می کند
پشتیبانی استفاده شود
-مونیکد
این گزینه برای اهداف MinGW-w64 موجود است. باعث ایجاد پیش پردازنده "یونیکد" می شود
ماکرو از پیش تعریف شده است و کد راه اندازی زمان اجرا با قابلیت یونیکد را انتخاب می کند.
-mwin32
این گزینه برای اهداف Cygwin و MinGW موجود است. مشخص می کند که معمولی
ماکروهای از پیش تعریف شده ویندوز مایکروسافت باید در پیش پردازنده تنظیم شوند، اما اینطور نیست
بر انتخاب کتابخانه زمان اجرا/کد راه اندازی تأثیر می گذارد.
-mwindows
این گزینه برای اهداف Cygwin و MinGW موجود است. مشخص می کند که یک رابط کاربری گرافیکی
برنامه باید با دستور دادن به پیوند دهنده برای تنظیم هدر PE ایجاد شود
نوع زیرسیستم مناسب
-fno-set-stack-executable
این گزینه برای اهداف MinGW موجود است. مشخص می کند که پرچم اجرایی برای
پشته استفاده شده توسط توابع تو در تو تنظیم نشده است. این برای اجرای باینری ها ضروری است
در حالت هسته مایکروسافت ویندوز، همانطور که User32 API وجود دارد که برای تنظیم استفاده می شود
امتیازات اجرایی، در دسترس نیست.
-fwritable-relocated-data
این گزینه برای اهداف MinGW و Cygwin موجود است. مشخص می کند که تغییر مکان-
داده ها در بخش فقط خواندنی در بخش .data قرار می گیرند. این برای افراد مسن ضروری است
زمانهای اجرا از اصلاح بخشهای .rdata برای جابجایی شبه پشتیبانی نمیکنند.
-mpe-aligned-commons
این گزینه برای اهداف Cygwin و MinGW موجود است. مشخص می کند که گنو
پسوند فرمت فایل PE که امکان تراز صحیح متغیرهای COMMON را فراهم می کند
باید هنگام تولید کد استفاده شود. اگر GCC تشخیص دهد که این به طور پیش فرض فعال می شود
اسمبلر هدف پیدا شده در طول پیکربندی از این ویژگی پشتیبانی می کند.
همچنین به زیر مراجعه کنید i386 و x86-64 گزینه برای گزینه های استاندارد
IA-64 گزینه
اینها هستند -m گزینه های تعریف شده برای معماری Intel IA-64.
-mbig-endian
کد برای یک هدف بزرگ endian ایجاد کنید. این پیش فرض برای HP-UX است.
-mlittle-endian
کدی را برای یک هدف کوچک endian ایجاد کنید. این پیش فرض برای AIX5 و GNU/Linux است.
-mgnu-as-as
-mno-gnu-as
برای اسمبلر گنو کد تولید کنید (یا نکنید). این پیش فرض است.
-mgnu-ld
-mno-gnu-ld
برای پیوند دهنده گنو کد تولید کنید (یا نکنید). این پیش فرض است.
-mno-pic
کدی را ایجاد کنید که از یک ثبت اشاره گر جهانی استفاده نمی کند. نتیجه موقعیت نیست
کد مستقل، و IA-64 ABI را نقض می کند.
-mvolatile-asm-stop
-mno-volatile-asm-stop
بلافاصله قبل و بعد از عبارات فرار asm کمی توقف ایجاد کنید (یا نکنید).
-mregister-names
-mno-register-names
ایجاد کنید (یا نکنید) in, LOCو خارج ثبت نام برای ثبت های پشته ای. این
ممکن است خروجی اسمبلر را خواناتر کند.
-mno-sdata
-msdata
بهینهسازیهایی را که از بخش دادههای کوچک استفاده میکنند غیرفعال کنید (یا فعال کنید). این ممکن است مفید باشد
برای رفع اشکالات بهینه ساز.
-mconstant-gp
کدی را ایجاد کنید که از یک مقدار نشانگر جهانی واحد استفاده می کند. این زمانی مفید است که
کامپایل کردن کد هسته
-عکس خودکار
کدی را ایجاد کنید که قابلیت جابجایی خود را داشته باشد. این دلالت می کنه که -mconstant-gp. این مفید است
هنگام کامپایل کد سیستم عامل
-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
کد درون خطی برای "sqrt" تولید نکنید.
-mfused-madd
-mno-fused-madd
کدی تولید نکنید که از ضرب/افزودن یا ضرب/ تفریق استفاده می کند
دستورالعمل ها. پیش فرض این است که از این دستورالعمل ها استفاده کنید.
-mno-dwarf2-amp
-mdwarf2-asm
کد اسمبلر برای اطلاعات اشکال زدایی شماره خط DWARF 2 تولید نکنید (یا انجام ندهید).
این ممکن است زمانی مفید باشد که از اسمبلر گنو استفاده نمی کنید.
-stop-bits
-Mno-Early-Stop-Bits
اجازه دهید بیت های توقف زودتر از بلافاصله قبل از دستور قرار داده شوند
بیت توقف را فعال کرد. این می تواند زمان بندی آموزش را بهبود بخشد، اما همیشه اینطور نیست
همینطور
-Mfixed-Range =محدوده ثبت نام
کدی را ایجاد کنید که محدوده رجیستر داده شده را به عنوان ثبات ثابت در نظر می گیرد. ثبت ثابت
یکی از مواردی است که تخصیص دهنده ثبات نمی تواند از آن استفاده کند. این در هنگام کامپایل کرنل مفید است
کد محدوده رجیستر به صورت دو رجیستر که با یک خط تیره از هم جدا شده اند، مشخص می شود. چندگانه
محدوده های ثبت را می توان با کاما از هم جدا کرد.
-mtls-size=اندازه tls
اندازه بیت افست های فوری TLS را مشخص کنید. مقادیر معتبر 14، 22 و 64 هستند.
-mtune=نوع cpu
زمانبندی دستورالعمل را برای یک CPU خاص تنظیم کنید، مقادیر معتبر هستند ایتانیوم,
ایتانیوم 1, رحمت, ایتانیوم 2و مک کینلی.
-milp32
-mlp64
کد برای یک محیط 32 بیتی یا 64 بیتی تولید کنید. محیط 32 بیتی int را تنظیم می کند،
طولانی و اشاره گر به 32 بیت. محیط 64 بیتی به 32 بیت و طولانی و
اشاره گر به 64 بیت اینها پرچم های خاص HP-UX هستند.
-mno-sched-br-data-spec
-msched-br-data-spec
(غیرفعال/فعال) زمانبندی گمانهزنی دادهها قبل از بارگیری مجدد. این منجر به تولید
دستورالعمل های "ld.a" و دستورالعمل های چک مربوطه ("ld.c" / "chk.a"). در
پیش فرض "غیرفعال" است.
-msched-ar-da-spec
-mno-sched-ar-da-spec
(En/غیرفعال کردن) زمانبندی گمانهزنی دادهها پس از بارگیری مجدد. این منجر به تولید
دستورالعمل های "ld.a" و دستورالعمل های چک مربوطه ("ld.c" / "chk.a"). در
پیش فرض "فعال" است.
-mno-sched-control-spec
-msched-control-spec
(غیرفعال/فعال کردن) برنامه ریزی سوداگرانه را کنترل کنید. این ویژگی فقط در طول
برنامه ریزی منطقه (یعنی قبل از بارگذاری مجدد). این منجر به تولید "ld.s" می شود.
دستورالعمل ها و دستورالعمل های چک مربوطه "chk.s". پیش فرض است
'غیرفعال کردن'.
-msched-br-in-data-spec
-mno-sched-br-in-data-spec
(En/Dis)قابل برنامه ریزی گمانه زنی دستورالعمل هایی که به داده ها وابسته هستند
بارهای احتمالی قبل از بارگیری مجدد این تنها با موثر است -msched-br-data-spec
فعال شد. پیش فرض "فعال" است.
-msched-ar-in-da-spec
-mno-sched-ar-in-da-spec
(En/Dis)قابل برنامه ریزی گمانه زنی دستورالعمل هایی که به داده ها وابسته هستند
بارهای احتمالی پس از بارگذاری مجدد این تنها با موثر است -msched-ar-da-spec
فعال شد. پیش فرض "فعال" است.
-msched-in-control-spec
-mno-sched-in-control-spec
(En/Dis)قابل برنامه ریزی گمانه زنی دستورالعمل هایی که وابسته به
کنترل بارهای سوداگرانه این تنها با موثر است -msched-control-spec فعال شده است
پیش فرض "فعال" است.
-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-spec-in-critical-path
-msched-count-spec-in-critical-path
در صورت فعال بودن، وابستگی های احتمالی در حین محاسبه در نظر گرفته می شوند
اولویت های دستورالعمل این امر استفاده از حدس و گمان را کمی بیشتر می کند
محافظه کار. پیش فرض "غیرفعال" است.
-msched-spec-ldc
از یک بررسی حدس و گمان داده ساده استفاده کنید. این گزینه به صورت پیش فرض روشن است.
-msched-control-spec-ldc
برای کنترل حدس و گمان از یک چک ساده استفاده کنید. این گزینه به صورت پیش فرض روشن است.
-msched-stop-bits-after- every-cycle
پس از هر چرخه هنگام برنامه ریزی، یک بیت توقف قرار دهید. این گزینه به صورت پیش فرض روشن است.
-msched-fp-mem-deps-zero-cost
فرض کنید که انبارها و بارهای ممیز شناور به احتمال زیاد باعث ایجاد تضاد نمی شوند
در همان گروه دستورالعمل قرار داده شده است. این گزینه به طور پیش فرض غیر فعال است.
-msel-sched-dont-check-control-spec
ایجاد چک برای کنترل حدس و گمان در برنامه ریزی انتخابی. این پرچم است
به طور پیش فرض غیرفعال است.
-msched-max-memory-insns=max-insns
محدود کردن تعداد insns حافظه در هر گروه دستورالعمل، دادن اولویت کمتر به
حافظه های بعدی تلاش می کنند تا در همان گروه دستورالعمل برنامه ریزی کنند.
اغلب برای جلوگیری از درگیری های بانک حافظه پنهان مفید است. مقدار پیش فرض 1 است.
-msched-max-memory-insns-hard-limit
حد مشخص شده توسط msched-max-memory-insns یک محدودیت سخت، عدم اجازه بیشتر
از آن عدد در یک گروه دستورالعمل. وگرنه حد «نرم» است یعنی
این که عملیات غیرحافظه ای ترجیح داده می شود زمانی که به محدودیت رسیده است، اما حافظه
ممکن است عملیات هنوز برنامه ریزی شده باشد.
LM32 گزینه
اینها -m گزینه هایی برای معماری LatticeMico32 تعریف شده اند:
-barrel-shift-enabled
دستورالعمل های تغییر لوله را فعال کنید.
-mdivide-enabled
دستورالعمل های تقسیم و مدول را فعال کنید.
-Multiply-enabled
دستورالعمل های ضرب را فعال کنید.
-msign-extend-enabled
دستورالعمل های گسترش علامت را فعال کنید.
-muser-enabled
دستورالعمل های تعریف شده توسط کاربر را فعال کنید.
M32C گزینه
-mcpu=نام
CPU که کد برای آن تولید می شود را انتخاب کنید. نام ممکن است یکی از R8C برای R8C/Tiny
سلسله، m16c برای سری M16C (تا /60)، متر 32 سانتی متر برای سری M16C/80، یا m32c
برای سری M32C/80.
-msim
مشخص می کند که برنامه روی شبیه ساز اجرا شود. این باعث جایگزینی می شود
کتابخانه زمان اجرا پیوند داده می شود که در آن، به عنوان مثال، فایل ورودی/خروجی را پشتیبانی می کند. شما نباید
هنگام تولید برنامه هایی که روی سخت افزار واقعی اجرا می شوند از این گزینه استفاده کنید. شما باید
کتابخانه زمان اجرا خود را برای هر عملکرد ورودی/خروجی مورد نیاز فراهم کنید.
-memregs=عدد
تعداد شبه ثبتکنندههای مبتنی بر حافظه را که GCC در طول تولید کد استفاده میکند، مشخص میکند.
این شبهثبتکنندهها مانند رجیسترهای واقعی استفاده میشوند، بنابراین یک مبادله بین وجود دارد
توانایی GCC برای جا دادن کد در رجیسترهای موجود و جریمه عملکرد
استفاده از حافظه به جای ثبات توجه داشته باشید که همه ماژول های یک برنامه باید باشند
با همان مقدار برای این گزینه کامپایل شده است. به همین دلیل، شما نباید از این استفاده کنید
گزینه ای با کتابخانه های زمان اجرا پیش فرض GCC.
M32R/D گزینه
اینها -m گزینه ها برای معماری های Renesas M32R/D تعریف شده اند:
-m32r2
کد M32R/2 را ایجاد کنید.
-m32rx
کد M32R/X را ایجاد کنید.
-m32r
کد M32R را ایجاد کنید. این پیش فرض است.
-mmodel=small
فرض کنید همه اشیا در 16 مگابایت کمتر حافظه زندگی می کنند (به طوری که آدرس آنها می تواند باشد
با دستورالعمل "ld24" بارگذاری شده است)، و فرض کنید همه زیر روال ها با
دستورالعمل "bl". این پیش فرض است.
آدرس پذیری یک شی خاص را می توان با ویژگی "model" تنظیم کرد.
-mmodel=متوسط
فرض کنید اشیا ممکن است در هر جایی از فضای آدرس 32 بیتی باشند (کامپایلر تولید می کند
دستورالعملهای "seth/add3" برای بارگذاری آدرسهای آنها)، و فرض کنید همه زیرروالها هستند
با دستورالعمل "bl" قابل دسترسی است.
-mmodel=بزرگ
فرض کنید اشیا ممکن است در هر جایی از فضای آدرس 32 بیتی باشند (کامپایلر تولید می کند
دستورالعملهای "seth/add3" برای بارگیری آدرسهایشان)، و فرض کنید که برنامههای فرعی ممکن است نباشند
قابل دسترسی با دستور "bl" (کامپایلر بسیار کندتر تولید می کند
توالی دستورالعمل "seth/add3/jl").
-msdata=هیچ
استفاده از ناحیه داده کوچک را غیرفعال کنید. متغیرها در یکی از قرار می گیرند .داده ها, .bss، یا
rodata (مگر اینکه ویژگی «بخش» مشخص شده باشد). این پیش فرض است.
ناحیه داده های کوچک از بخش هایی تشکیل شده است .sdata و .sbss. اشیاء ممکن است به صراحت باشد
با استفاده از یکی از این بخش ها، در ناحیه داده کوچک با ویژگی "section" قرار دهید.
-msdata=sdata
داده های کوچک جهانی و ثابت را در ناحیه داده های کوچک قرار دهید، اما خاص تولید نکنید
کد برای ارجاع به آنها
-msdata=استفاده
داده های کوچک جهانی و ثابت را در ناحیه داده های کوچک قرار دهید و خاص تولید کنید
دستورالعمل برای ارجاع به آنها
-G تعداد
اشیاء سراسری و ثابت را کمتر یا مساوی قرار دهید تعداد بایت به داده های کوچک یا
بخش های BSS به جای داده های معمولی یا بخش های BSS. مقدار پیش فرض از تعداد is
8. -msdata گزینه باید روی یکی از تنظیم شود sdata or استفاده کنید برای این گزینه برای داشتن هر
اثر.
همه ماژول ها باید با همان کامپایل شوند -G تعداد ارزش. تدوین با متفاوت
ارزش های تعداد ممکن است کار کند یا نباشد؛ اگر اینطور نشد لینک دهنده خطا می دهد
پیام --- کد نادرستی ایجاد نمی شود.
-mdebug
باعث میشود کد مخصوص M32R در کامپایلر آماری را نشان دهد که ممکن است کمک کند
در برنامه های اشکال زدایی
-حلقه های بدخیم
همه حلقه ها را در یک مرز 32 بایت تراز کنید.
-mno-align-loops
تراز 32 بایتی را برای حلقه ها اعمال نکنید. این پیش فرض است.
-missue-rate=عدد
موضوع عدد دستورالعمل در هر چرخه عدد فقط می تواند 1 یا 2 باشد.
-branch-cost=عدد
عدد فقط می تواند 1 یا 2 باشد. اگر 1 باشد، شاخه ها بر شرطی ترجیح داده می شوند
کد، اگر 2 باشد، برعکس اعمال می شود.
-mflush-trap=عدد
شماره تله را مشخص می کند تا از آن برای شستشوی کش استفاده شود. پیش فرض 12 است. معتبر است
اعداد بین 0 تا 15 را شامل می شود.
-mno-flush-trap
مشخص می کند که کش را نمی توان با استفاده از یک تله پاک کرد.
-mflush-func=نام
نام تابع سیستم عاملی را که باید برای شستشوی حافظه پنهان فراخوانی شود، مشخص می کند. در
پیش فرض است _flush_cache، اما فراخوانی تابع فقط در صورتی استفاده می شود که تله در دسترس نباشد.
-mno-flush-func
نشان می دهد که هیچ عملکرد سیستم عامل برای شستشوی حافظه پنهان وجود ندارد.
M680x0 گزینه
اینها هستند -m گزینه های تعریف شده برای پردازنده های M680x0 و ColdFire. تنظیمات پیش فرض
بستگی به معماری انتخاب شده در هنگام پیکربندی کامپایلر دارد. پیش فرض ها
برای رایج ترین انتخاب ها در زیر آورده شده است.
-مارس=قوس
کدی را برای معماری مجموعه دستورات M680x0 یا ColdFire خاص ایجاد کنید.
مقادیر مجاز از قوس برای معماری های M680x0 عبارتند از: 68000, 68010, 68020, 68030,
68040, 68060 و CPU32. معماری ColdFire بر اساس Freescale انتخاب می شود
طبقه بندی ISA و مقادیر مجاز عبارتند از: ایسا, ایزاپلوس, ایزاب و ایساک.
GCC یک ماکرو را تعریف می کند __mcfقوس__ هر زمان که برای یک هدف ColdFire کد تولید می کند.
La قوس در این ماکرو یکی از -مارس استدلال های ارائه شده در بالا
هنگام استفاده با هم، -مارس و -mtune کدی را انتخاب کنید که روی یک خانواده مشابه اجرا شود
پردازنده ها اما برای یک ریزمعماری خاص بهینه شده است.
-mcpu=پردازنده
کد برای یک پردازنده خاص M680x0 یا ColdFire ایجاد کنید. M680x0 پردازندهs هستند:
68000, 68010, 68020, 68030, 68040, 68060, 68302, 68332 و CPU32. ColdFire پردازندهs
در جدول زیر آورده شده است که CPU ها را نیز به خانواده ها طبقه بندی می کند:
خانواده : -mcpu استدلال
51 : 51 51ac 51 گرم 51cn 51 ساعت 51 جی 51jf 51 جی جی 51 jm 51mm 51q 51 متر مربع
5206 : 5202 5204 5206
5206e : 5206e
5208 : 5207 5208
5211a : 5210a 5211a
5213 : 5211 5212 5213
5216 : 5214 5216
52235 : 52230 52231 52232 52233 52234 52235
5225 : 5224 5225
52259 : 52252 52254 52255 52256 52258 52259
5235 : 5232 5233 5234 5235 523x
5249 : 5249
5250 : 5250
5271 : 5270 5271
5272 : 5272
5275 : 5274 5275
5282 : 5280 5281 5282 528x
53017 : 53011 53012 53013 53014 53015 53016 53017
5307 : 5307
5329 : 5327 5328 5329 532x
5373 : 5372 5373 537x
5407 : 5407
5475 : 5470 5471 5472 5473 5474 5475 547x 5480 5481 5482 5483 5484 5485
-mcpu=پردازنده نادیده گرفتن -مارس=قوس if قوس سازگار با پردازنده. ترکیبات دیگر از
-mcpu و -مارس رد می شوند
GCC ماکرو را تعریف می کند __mcf_cpu_پردازنده هنگامی که ColdFire هدف قرار می گیرد پردازنده انتخاب شده است. آن را نیز
تعریف می کند __mcf_family_خانواده، جایی که ارزش خانواده در جدول بالا آورده شده است.
-mtune=اهنگ
کد را برای یک ریزمعماری خاص با محدودیت های تعیین شده تنظیم کنید -مارس
و -mcpu. ریزمعماری های M680x0 عبارتند از: 68000, 68010, 68020, 68030, 68040,
68060 و CPU32. ریزمعماری ColdFire عبارتند از: cfv1, cfv2, cfv3, cfv4 و
cfv4e.
VOUS استفاده pouvez aussi -mtune=68020-40 برای کدهایی که باید روی 68020 به خوبی اجرا شوند،
اهداف 68030 و 68040. -mtune=68020-60 مشابه است اما شامل 68060 هدف است
خوب. این دو گزینه همان تصمیمات تنظیم را انتخاب می کنند -m68020-40 و -m68020-60
بود.
GCC ماکروها را تعریف می کند __mcقوس و __mcقوس__ هنگام تنظیم برای معماری 680x0
قوس. همچنین تعریف می کند mcقوس مگر اینکه یکی -ansi یا غیر گنو -std گزینه استفاده می شود.
اگر GCC برای طیف وسیعی از معماریها تنظیم میکند، همانطور که توسط -mtune=68020-40 or
-mtune=68020-60، ماکروها را برای هر معماری در محدوده تعریف می کند.
GCC همچنین کلان را تعریف می کند __مارش__ هنگام تنظیم ریزمعماری ColdFire
ارش، که در آن ارش یکی از استدلال های ارائه شده در بالا است.
-68000
-mc68000
تولید خروجی برای 68000. این پیش فرض زمانی است که کامپایلر برای پیکربندی
سیستم های مبتنی بر 68000 معادل است با -مارس=68000.
از این گزینه برای میکروکنترلرهای با هسته 68000 یا EC000 از جمله 68008 استفاده کنید.
68302، 68306، 68307، 68322، 68328 و 68356.
-68010
تولید خروجی برای 68010. این پیش فرض زمانی است که کامپایلر برای پیکربندی
سیستم های مبتنی بر 68010 معادل است با -مارس=68010.
-68020
-mc68020
تولید خروجی برای 68020. این پیش فرض زمانی است که کامپایلر برای پیکربندی
سیستم های مبتنی بر 68020 معادل است با -مارس=68020.
-68030
تولید خروجی برای 68030. این پیش فرض زمانی است که کامپایلر برای پیکربندی
سیستم های مبتنی بر 68030 معادل است با -مارس=68030.
-68040
تولید خروجی برای 68040. این پیش فرض زمانی است که کامپایلر برای پیکربندی
سیستم های مبتنی بر 68040 معادل است با -مارس=68040.
این گزینه استفاده از دستورالعمل های 68881/68882 را که باید توسط
نرم افزار روی 68040. اگر 68040 شما کدی برای شبیه سازی ندارد از این گزینه استفاده کنید
آن دستورالعمل ها
-68060
تولید خروجی برای 68060. این پیش فرض زمانی است که کامپایلر برای پیکربندی
سیستم های مبتنی بر 68060 معادل است با -مارس=68060.
این گزینه استفاده از دستورالعمل های 68020 و 68881/68882 را که باید
شبیه سازی شده توسط نرم افزار در 68060. اگر 68060 شما کد ندارد از این گزینه استفاده کنید
برای تقلید از آن دستورالعمل ها
-mcpu32
تولید خروجی برای CPU32. زمانی که کامپایلر برای آن پیکربندی شده است، این پیش فرض است
سیستم های مبتنی بر CPU32 معادل است با -مارس=cpu32.
از این گزینه برای میکروکنترلرهایی با هسته CPU32 یا CPU32+ از جمله 68330 استفاده کنید.
68331، 68332، 68333، 68334، 68336، 68340، 68341، 68349 و 68360.
-5200
خروجی برای یک CPU ColdFire 520X ایجاد کنید. زمانی که کامپایلر باشد این پیش فرض است
برای سیستم های مبتنی بر 520X پیکربندی شده است. معادل است با -MCPU = 5206، و اکنون است
به نفع آن گزینه منسوخ شد.
از این گزینه برای میکروکنترلر با هسته 5200 استفاده کنید، از جمله MCF5202، MCF5203،
MCF5204 و MCF5206.
-m5206e
خروجی برای CPU ColdFire 5206e ایجاد کنید. اکنون گزینه به نفع منسوخ شده است
معادل -mcpu=5206e.
-m528x
خروجی برای یکی از اعضای خانواده ColdFire 528X ایجاد کنید. گزینه در حال حاضر است
به نفع معادل منسوخ شد -mcpu = 528x.
-5307
خروجی برای CPU ColdFire 5307 تولید کنید. این گزینه اکنون به نفع این منسوخ شده است
معادل -MCPU = 5307.
-5407
خروجی برای CPU ColdFire 5407 تولید کنید. این گزینه اکنون به نفع این منسوخ شده است
معادل -MCPU = 5407.
-mcfv4e
خروجی برای یک CPU خانواده ColdFire V4e (به عنوان مثال 547x/548x) تولید کنید. این شامل استفاده از
دستورالعمل های ممیز شناور سخت افزاری گزینه معادل است -mcpu = 547x، و است
اکنون به نفع آن گزینه منسوخ شده است.
-m68020-40
خروجی 68040 را بدون استفاده از هیچ یک از دستورالعمل های جدید تولید کنید. این نتیجه می شود
در کدی که می تواند به طور نسبتاً کارآمدی روی 68020/68881 یا 68030 یا
68040. کد تولید شده از دستورالعمل های 68881 استفاده می کند که در
68040.
گزینه معادل است -مارس=68020 -mtune=68020-40.
-m68020-60
خروجی 68060 را بدون استفاده از هیچ یک از دستورالعمل های جدید تولید کنید. این نتیجه می شود
در کدی که می تواند به طور نسبتاً کارآمدی روی 68020/68881 یا 68030 یا
68040. کد تولید شده از دستورالعمل های 68881 استفاده می کند که در
68060.
گزینه معادل است -مارس=68020 -mtune=68020-60.
-mhard-float
-68881
دستورالعمل های ممیز شناور را ایجاد کنید. این پیش فرض برای 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 ماکرو را تعریف می کند __mcfhwdiv__ زمانی که این گزینه فعال است.
-mshort
نوع "int" را با عرض 16 بیت، مانند "int کوتاه" در نظر بگیرید. علاوه بر این، پارامترها
در پشته نیز با مرز 16 بیتی تراز می شوند حتی در اهدافی که API آنها
ارتقاء به 32 بیت را الزامی می کند.
-mno-کوتاه
نوع "int" را 16 بیت عرض در نظر نگیرید. این پیش فرض است.
-mnobitfield
-منو بیتفیلد
از دستورالعمل های فیلد بیت استفاده نکنید. در -68000, -mcpu32 و -5200 گزینه ها دلالت دارند
-mnobitfield.
-mbitfield
از دستورالعمل های فیلد بیتی استفاده کنید. را -68020 گزینه دلالت دارد -mbitfield. این هست
اگر از پیکربندی طراحی شده برای 68020 استفاده می کنید، پیش فرض است.
-mrtd
از یک قرارداد فراخوانی تابع متفاوت استفاده کنید، که در آن توابعی که یک حالت ثابت دارند
تعداد آرگومانها با دستور «rtd» برمیگردند، که آرگومانهای آنها را نمایش میدهد
در حین بازگشت این یک دستورالعمل را در تماس گیرنده ذخیره می کند زیرا نیازی به آن نیست
استدلال ها را در آنجا مطرح کنید.
این قرارداد فراخوانی با آنچه که معمولاً در یونیکس استفاده می شود ناسازگار است، بنابراین شما
اگر نیاز به فراخوانی کتابخانه های کامپایل شده با کامپایلر یونیکس دارید، نمی توانید از آن استفاده کنید.
همچنین، شما باید نمونه های اولیه تابع را برای همه توابعی که متغیر می گیرند ارائه دهید
تعداد آرگومان ها (از جمله "printf")؛ در غیر این صورت کد نادرستی برای آن تولید می شود
به آن توابع فراخوانی می کند.
علاوه بر این، اگر تابعی را با تعداد زیاد فراخوانی کنید، کد به طور جدی نادرست است
استدلال ها (به طور معمول، استدلال های اضافی بی ضرر نادیده گرفته می شوند.)
دستورالعمل "rtd" توسط 68010، 68020، 68030، 68040، 68060 و CPU32 پشتیبانی می شود.
پردازنده ها، اما نه با 68000 یا 5200.
-mno-rtd
از قراردادهای تماس انتخاب شده توسط استفاده نکنید -mrtd. این پیش فرض است.
بدخیم
-mno-align-int
کنترل کنید که آیا GCC "int"، "long"، "long long"، "float"، "double" و "long" تراز شود یا خیر
متغیرهای double" روی یک مرز 32 بیتی (بدخیم) یا یک مرز 16 بیتی
(-mno-align-int). تراز کردن متغیرها روی مرزهای 32 بیتی کدی را تولید می کند که اجرا می شود
در پردازنده هایی با گذرگاه های 32 بیتی تا حدودی سریعتر در هزینه حافظه بیشتر.
هشدار: اگر از بدخیم سوئیچ، GCC ساختارهای حاوی موارد فوق را تراز می کند
انواع متفاوت از بیشتر مشخصات رابط باینری برنامه منتشر شده برای
m68k.
-mpcrel
از حالت آدرس دهی نسبی pc 68000 مستقیماً به جای استفاده از جهانی استفاده کنید
جدول افست در حال حاضر، این گزینه دلالت دارد -fpic، حداکثر امکان افست 16 بیتی را فراهم می کند
برای آدرس دهی نسبی کامپیوتر -fPIC در حال حاضر با پشتیبانی نمی شود -mpcrel، هر چند
این می تواند برای پردازنده های 68020 و بالاتر پشتیبانی شود.
-mno-strict-align
-mstrict-align
(نباید) تصور کنید که مراجع حافظه غیر تراز توسط سیستم مدیریت می شوند.
-msep-data
کدی را ایجاد کنید که به بخش داده اجازه می دهد در ناحیه متفاوتی از حافظه قرار گیرد
از بخش متن این امکان اجرا در محل را در محیطی بدون
مدیریت حافظه مجازی این گزینه دلالت دارد -fPIC.
-mno-sep-data
کدی را ایجاد کنید که فرض میکند بخش داده از بخش متن پیروی میکند. این هست
پیشفرض.
-کتابخانه مشترک
کدی را ایجاد کنید که از کتابخانه های مشترک از طریق روش شناسه کتابخانه پشتیبانی می کند. این اجازه می دهد
برای اجرای در محل و کتابخانه های مشترک در محیطی بدون حافظه مجازی
مدیریت. این گزینه دلالت دارد -fPIC.
-mno-id-shred-library
کدی را ایجاد کنید که فرض نمیکند از کتابخانههای مشترک مبتنی بر شناسه استفاده میشود. این هست
پیشفرض.
-mshared-library-id=n
شماره شناسایی کتابخانه مشترک مبتنی بر شناسه در حال کامپایل را مشخص می کند.
تعیین مقدار 0 کد فشرده تری تولید می کند. تعیین نیروهای ارزشی دیگر
تخصیص آن عدد به کتابخانه فعلی، اما دیگر فضا یا زمانی نیست
کارآمد از حذف این گزینه است.
-mxgot
-mno-xgot
هنگام تولید کد مستقل از موقعیت برای ColdFire، کدی تولید کنید که اگر کار کند
GOT بیش از 8192 ورودی دارد. این کد بزرگتر و کندتر از کد است
بدون این گزینه تولید می شود. در پردازنده های M680x0، این گزینه مورد نیاز نیست. -fPIC
کافی است
GCC معمولاً از یک دستورالعمل برای بارگذاری مقادیر از GOT استفاده می کند. در حالی که این است
نسبتا کارآمد، فقط در صورتی کار می کند که GOT کوچکتر از حدود 64k باشد. هر چیزی
بزرگتر باعث می شود که پیوند دهنده خطایی مانند:
جابجایی کوتاه شده به تناسب: R_68K_GOT16O فووبار
اگر این اتفاق افتاد، باید کد خود را دوباره با آن کامپایل کنید -mxgot. سپس باید با آن کار کند
GOT های بسیار بزرگ با این حال، کد تولید شده با -mxgot کارایی کمتری دارد، زیرا
برای واکشی ارزش یک نماد جهانی 4 دستورالعمل لازم است.
توجه داشته باشید که برخی از پیوند دهنده ها، از جمله نسخه های جدیدتر پیوند دهنده گنو، می توانند ایجاد کنند
چندین GOT و مرتب سازی ورودی های GOT. اگر چنین پیوند دهنده ای دارید، فقط باید نیاز داشته باشید
به استفاده از -mxgot هنگام کامپایل یک فایل شی منفرد که به بیش از 8192 GOT دسترسی دارد
ورودی های. تعداد بسیار کمی انجام می دهند.
این گزینه ها تاثیری ندارند مگر اینکه GCC کد مستقل از موقعیت تولید کند.
MCore گزینه
اینها هستند -m گزینه های تعریف شده برای پردازنده های Motorola M*Core.
-mhardlit
-mno-hardlit
اگر بتوان آن را در دو دستورالعمل یا کمتر انجام داد، ثابت های درونی در جریان کد.
-mdiv
-mno-div
از دستورالعمل تقسیم استفاده کنید. (به طور پیش فرض فعال است).
-mrelax- فوری
-mno-relax-فوری
اجازه دادن فوریت های با اندازه دلخواه در عملیات بیت.
-mwide-bitfields
-mno-wide-bitfields
همیشه فیلدهای بیت را به اندازه "int" در نظر بگیرید.
-m4byte-توابع
-mno-4byte-functions
همه توابع را مجبور کنید تا در یک مرز 4 بایتی تراز شوند.
-mcalgraph-data
-mno-calgraph-data
انتشار اطلاعات کالنگراف
-mslow-bytes
-mno-slow-bytes
هنگام خواندن مقادیر بایت، دسترسی به کلمه را ترجیح دهید.
-mlittle-endian
-mbig-endian
کدی را برای یک هدف کوچک endian ایجاد کنید.
-210
-340
کد برای پردازنده 210 تولید کنید.
-mno-lsim
فرض کنید پشتیبانی از زمان اجرا ارائه شده است و بنابراین کتابخانه شبیه ساز را حذف کنید
(libsim.a) از خط فرمان لینکر.
-mstack-increment=اندازه
حداکثر مقدار را برای یک عملیات افزایشی تک پشته تنظیم کنید. مقادیر بزرگ می تواند
افزایش سرعت برنامه هایی که حاوی توابعی هستند که به مقدار زیادی نیاز دارند
فضای پشته، اما اگر پشته گسترش یابد، می توانند یک خطای تقسیم بندی را ایجاد کنند
خیلی زیاد. مقدار پیش فرض 0x1000 است.
MeP گزینه
-mabsdiff
دستور "abs" را فعال می کند، که تفاوت مطلق بین دو ثبات است.
-مرکز خرید
تمام دستورالعمل های اختیاری---میانگین، ضرب، تقسیم، عملیات بیت را فعال می کند،
صفر اول، تفاوت مطلق، حداقل/حداکثر، کلیپ و اشباع.
-متوسط
دستور "ave" را فعال می کند که میانگین دو رجیستر را محاسبه می کند.
-mbased =n
متغیرهای اندازه n بایت یا کوچکتر به طور پیش فرض در بخش ".based" قرار می گیرد.
متغیرهای مبتنی بر ثبات $tp به عنوان ثبات پایه استفاده می کنند و محدودیت 128 بایتی وجود دارد.
به بخش ".based".
-mbitops
دستورالعمل های عملیات بیت را فعال می کند --- تست بیت ("btstm")، تنظیم ("bsetm")، پاک کردن
("bclrm")، معکوس ("bnotm")، و تست و تنظیم ("tas").
-mc=نام
انتخاب می کند که داده های ثابت در کدام بخش قرار گیرد. نام ممکن است "کوچک"، "نزدیک" یا
"دور".
-mclip
دستور "کلیپ" را فعال می کند. توجه داشته باشید که "-mclip" مفید نیست مگر اینکه شما نیز
"-mminmax" را ارائه کنید.
-mconfig=نام
یکی از پیکربندی های هسته داخلی را انتخاب می کند. هر چیپ MeP یک یا چند تراشه دارد
ماژول های موجود در آن؛ هر ماژول دارای یک CPU هسته و انواع پردازنده های کمکی، اختیاری است
دستورالعمل ها و تجهیزات جانبی ابزار "MeP-Integrator" که بخشی از GCC نیست، فراهم می کند
این تنظیمات از طریق این گزینه; استفاده از این گزینه مانند استفاده از همه است
گزینه های خط فرمان مربوطه پیکربندی پیش فرض "پیش فرض" است.
-mcop
دستورات پردازنده کمکی را فعال می کند. به طور پیش فرض، این یک پردازنده مشترک 32 بیتی است. توجه داشته باشید
که معمولاً پردازنده مشترک از طریق گزینه "-mconfig=" فعال می شود.
-mcop32
دستورالعمل های پردازنده مشترک 32 بیتی را فعال می کند.
-mcop64
دستورالعمل های پردازنده مشترک 64 بیتی را فعال می کند.
-mivc2
برنامه ریزی IVC2 را فعال می کند. IVC2 یک پردازنده مشترک 64 بیتی VLIW است.
-mdc
باعث می شود که متغیرهای ثابت در بخش ".near" قرار گیرند.
-mdiv
دستورالعمل های "div" و "divu" را فعال می کند.
-meb
کد big-endian را تولید کنید.
-مل
کد کمی اندین تولید کنید.
میکرو فرار
به کامپایلر می گوید که هر متغیری که با ویژگی "io" مشخص شده باشد، باید باشد
فرار محسوب می شود.
میلی لیتر باعث می شود که متغیرها به طور پیش فرض به بخش ".far" اختصاص داده شوند.
-mleadz
دستور "leadz" (صفر اول) را فعال می کند.
-می باعث می شود که متغیرها به طور پیش فرض به بخش ".near" اختصاص داده شوند.
-mminmax
دستورالعمل های "min" و "max" را فعال می کند.
-ملت
دستورات ضرب و انباشتگی را فعال می کند.
-mno-opts
تمام دستورالعمل های اختیاری فعال شده توسط "-mall-opts" را غیرفعال می کند.
-تکرار مجدد
دستورالعملهای «تکرار» و «تکرار» را فعال میکند، که برای حلقههای سربار پایین استفاده میشود.
-اماس باعث می شود همه متغیرها به طور پیش فرض در بخش ".tiny" قرار گیرند. توجه داشته باشید که یک وجود دارد
محدودیت 65536 بایت برای این بخش. دسترسی به این متغیرها از پایه %gp استفاده می کند
ثبت نام.
-مساتور
دستورالعمل های اشباع را فعال می کند. توجه داشته باشید که کامپایلر در حال حاضر این کار را نمی کند
خود اینها را تولید کند، اما این گزینه برای سازگاری با ابزارهای دیگر گنجانده شده است.
مثل".
-msdram
زمان اجرا مبتنی بر SDRAM را به جای زمان اجرای پیش فرض مبتنی بر رام پیوند دهید.
-msim
کتابخانه های زمان اجرا شبیه ساز را پیوند دهید.
-msimnovec
پیوند کتابخانه های زمان اجرا شبیه ساز، به استثنای پشتیبانی داخلی برای بازنشانی و
بردارها و جداول استثنا
-mtf
باعث می شود همه توابع به طور پیش فرض در بخش ".far" قرار گیرند. بدون این گزینه، توابع
به طور پیش فرض در بخش ".near".
-mtiny=n
متغیرهایی که هستند n بایت یا کمتر به بخش ".tiny" اختصاص داده می شود. اینها
متغیرها از ثبات پایه $gp استفاده می کنند. پیش فرض این گزینه 4 است، اما توجه داشته باشید که
یک محدودیت 65536 بایتی برای بخش ".tiny" وجود دارد.
MicroBlaze گزینه
-msoft-float
از شبیه سازی نرم افزار برای ممیز شناور (پیش فرض) استفاده کنید.
-mhard-float
از دستورالعمل های ممیز شناور سخت افزاری استفاده کنید.
-mmemcpy
حرکات بلوک را بهینه نکنید، از "memcpy" استفاده کنید.
-mno-clearbss
این گزینه منسوخ شده است. استفاده کنید -fno-zero-initialized-in-bss به جای آن.
-mcpu=نوع cpu
از ویژگی ها و کد برنامه ریزی برای CPU داده شده استفاده کنید. مقادیر پشتیبانی شده در
قالب vX.YY.Z، که در آن X نسخه اصلی است، YY نسخه مینور است و Z is
کد سازگاری مقادیر نمونه هستند نسخه 3.00.a, v4.00.b, نسخه 5.00.a, v5.00.b, v5.00.b,
نسخه 6.00.a.
-mxl-soft-mul
از نرم افزار شبیه سازی ضرب (پیش فرض) استفاده کنید.
-mxl-soft-div
از شبیه سازی نرم افزاری برای تقسیم ها (پیش فرض) استفاده کنید.
-mxl-barrel-shift
از شیفتر بشکه سخت افزاری استفاده کنید.
-mxl-pattern-compare
از دستورالعمل های مقایسه الگو استفاده کنید.
-msmall-divides
از بهینه سازی جستجوی جدول برای تقسیمات اعداد صحیح امضا شده کوچک استفاده کنید.
-mxl-stack-check
این گزینه منسوخ شده است. استفاده کنید -fstack-check به جای آن.
-mxl-gp-opt
از بخش های ".sdata"/.sbss مربوط به GP استفاده کنید.
-mxl-multiply-high
برای قسمت بالای ضرب 32x32 از دستورالعمل های ضرب در بالا استفاده کنید.
-mxl-float-convert
از دستورالعمل های تبدیل ممیز شناور سخت افزاری استفاده کنید.
-mxl-float-sqrt
از دستورالعمل ممیز شناور سخت افزاری ریشه مربع استفاده کنید.
-mbig-endian
کد برای یک هدف بزرگ endian ایجاد کنید.
-mlittle-endian
کدی را برای یک هدف کوچک endian ایجاد کنید.
-mxl-reorder
از دستورالعملهای ترتیب مجدد استفاده کنید (بارگذاری/ذخیره معکوس بایت و تعویض بایت).
-mxl-mode-برنامه-مدل
مدل برنامه را انتخاب کنید برنامه-مدل. مدل های معتبر هستند
قابل اجرا
نرمال اجرایی (پیش فرض)، از کد راه اندازی استفاده می کند crt0.o.
xmdstub
برای استفاده با Xilinx Microprocessor Debugger (XMD) مبتنی بر نرم افزار اشکال زدایی نفوذی
عاملی به نام xmdstub. این از فایل راه اندازی استفاده می کند crt1.o و آدرس شروع را تنظیم می کند
برنامه را به 0x800.
بوت استرپ
برای برنامه هایی که با استفاده از بوت لودر بارگذاری می شوند. این مدل از فایل راه اندازی استفاده می کند
crt2.o که شامل کنترل کننده برداری بازنشانی پردازنده نیست. این مناسب است
برای انتقال کنترل روی ریست پردازنده به بوت لودر به جای
نرم افزار.
نوکتورها
برای برنامه هایی که به هیچ یک از بردارهای MicroBlaze نیاز ندارند. این گزینه
ممکن است برای برنامه هایی که در یک برنامه نظارتی اجرا می شوند مفید باشد. این مدل
استفاده crt3.o به عنوان یک فایل راه اندازی
گزینه -xl-mode-برنامه-مدل نام مستعار منسوخ شده برای است -mxl-mode-برنامه-مدل.
میپس گزینه
-EB کد big-endian را تولید کنید.
-The کد کمی اندین تولید کنید. این پیش فرض برای است mips*el-*-* پیکربندی.
-مارس=قوس
کدی را ایجاد کنید که روی آن اجرا شود قوس، که می تواند نام یک MIPS ISA عمومی یا همان باشد
نام یک پردازنده خاص اسامی ISA عبارتند از: mips1, mips2, mips3, mips4,
mips32, mips32r2, mips64 و mips64r2. نام پردازنده ها عبارتند از: 4 کیلوگرم, 4km, 4 کیلوگرم, 4kc,
4kec, 4 کیلومتر, 4 نگهدارنده, 4 کیلو گرم, 5 کیلوگرم, 5 کیلومتر, 20 کیلوگرم, 24 کیلوگرم, 24kf2_1, 24kf1_1, 24kec, 24kef2_1,
24kef1_1, 34 کیلوگرم, 34kf2_1, 34kf1_1, 34kn, 74 کیلوگرم, 74kf2_1, 74kf1_1, 74kf3_2, 1004 کیلوگرم,
1004kf2_1, 1004kf1_1, لنگسون 2E, loongson2f, loongson3a, M4K, M14K, m14kc, m14ke,
m14kec, اکتئون, octeon +, octeon2, جبار, 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.
ارزش ویژه from-abi سازگارترین معماری را برای انتخاب شده انتخاب می کند
ABI (یعنی mips1 برای ABI های 32 بیتی و mips3 برای ABI های 64 بیتی).
زنجیره ابزار اصلی Linux/GNU نیز از این مقدار پشتیبانی می کند بومی، که بهترین ها را انتخاب می کند
گزینه معماری برای پردازنده میزبان. -مارس=بومی اگر GCC تاثیری داشته باشد
پردازنده را نمی شناسد
در نام پردازنده، یک نهایی 000 را می توان به طور خلاصه به عنوان k (مثلا، -مارس=r2k).
پیشوندها اختیاری هستند و vr ممکن است نوشته شود r.
اسامی فرم ها nf2_1 به پردازندههایی با FPUهایی که به نصف سرعت کلاک دارند مراجعه کنید
هسته، نام فرم nf1_1 به پردازنده هایی با FPU با سرعت یکسان کلاک مراجعه کنید
به عنوان هسته و نام های فرم nf3_2 به پردازنده هایی با نسبت کلاک FPU مراجعه کنید
از 3:2 با توجه به هسته. به دلایل سازگاری، nf به عنوان یک پذیرفته شده است
مترادف برای nf2_1 در حین nx و bfx به عنوان مترادف برای پذیرفته شده است nf1_1.
GCC بر اساس مقدار این گزینه دو ماکرو تعریف می کند. اولی این است _MIPS_ARCH,
که نام معماری هدف را به عنوان یک رشته می دهد. دومی فرم دارد
_MIPS_ARCH_فو، که در آن فو مقدار بزرگ شده است _MIPS_ARCH. مثلا،
-مارس=r2000 مجموعه _MIPS_ARCH به "r2000" و ماکرو را تعریف می کند _MIPS_ARCH_R2000.
توجه داشته باشید که _MIPS_ARCH ماکرو از نام پردازنده های ذکر شده در بالا استفاده می کند. به عبارت دیگر،
دارای پیشوند کامل است و مخفف نمی شود 000 as k. در شرایطی که from-abiاز
ماکرو معماری حل شده را نامگذاری می کند (یا "mips1" or "mips3"). نام گذاری می کند
معماری پیش فرض زمانی که نه -مارس گزینه داده شده است.
-mtune=قوس
برای بهینه سازی قوس. از جمله موارد دیگر، این گزینه نحوه دستورالعمل ها را کنترل می کند
برنامه ریزی شده و هزینه درک شده عملیات حسابی. لیست از قوس ارزش
همان است که برای -مارس.
هنگامی که این گزینه استفاده نمی شود، GCC برای پردازنده مشخص شده توسط بهینه سازی می شود -مارس. توسط
با استفاده از -مارس و -mtune با هم، امکان تولید کدی وجود دارد که روی a اجرا شود
خانواده پردازندهها، اما کد را برای یک عضو خاص از آن خانواده بهینه کنید.
-mtune ماکروها را تعریف می کند _MIPS_TUNE و _MIPS_TUNE_فو، که به همان روش کار می کنند
la -مارس مواردی که در بالا توضیح داده شد
-mips1
معادل با -مارس=mips1.
-mips2
معادل با -مارس=mips2.
-mips3
معادل با -مارس=mips3.
-mips4
معادل با -مارس=mips4.
-mips32
معادل با -مارس=mips32.
-mips32r2
معادل با -مارس=mips32r2.
-mips64
معادل با -مارس=mips64.
-mips64r2
معادل با -مارس=mips64r2.
-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. این گزینه ها
قبل از microMIPS ASE هستند و برای سازگاری با عقب حفظ می شوند.
-mabi=32
-mabi=o64
-mabi=n32
-mabi=64
-mabi=eabi
کد برای ABI داده شده ایجاد کنید.
توجه داشته باشید که EABI دارای دو نسخه 32 بیتی و 64 بیتی است. GCC معمولاً 64 بیت تولید می کند
زمانی که معماری 64 بیتی را انتخاب می کنید کد کنید، اما می توانید از آن استفاده کنید -mgp32 برای دریافت کد 32 بیتی
به جای آن.
برای اطلاعات در مورد O64 ABI، نگاه کنیدhttp://gcc.gnu.org/projects/mipso64-abi.html>.
GCC از گونه ای از O32 ABI پشتیبانی می کند که در آن ثبات های ممیز شناور 64 هستند.
عرض بیش از 32 بیت می توانید این ترکیب را با -mabi=32 -mfp64. این ABI
به دستورالعمل های "mthc1" و "mfhc1" متکی است و بنابراین فقط برای آنها پشتیبانی می شود
پردازنده های MIPS32R2
تخصیص ثبات برای آرگومان ها و مقادیر بازگشتی یکسان باقی می مانند، اما هر کدام
مقدار اسکالر در یک ثبات 64 بیتی به جای یک جفت 32 بیتی منتقل می شود
ثبت می کند. به عنوان مثال، مقادیر ممیز شناور اسکالر برگردانده می شوند f0 دلار فقط، نه a
f0 دلار/f1 دلار جفت مجموعه رجیسترهای ذخیره شده در تماس نیز ثابت می ماند، اما همه 64 بیت
ذخیره می شوند.
-Mabiccals
-mno-abicals
کدی را ایجاد کنید (تولید نکنید) که برای اشیاء پویا به سبک SVR4 مناسب است.
-Mabiccals پیش فرض برای سیستم های مبتنی بر SVR4 است.
-mshared
-mno-اشتراک گذاری شده
کدی را ایجاد کنید (تولید نکنید) که کاملاً مستقل از موقعیت باشد و می تواند
بنابراین به کتابخانه های مشترک پیوند داده شود. این گزینه فقط تاثیر می گذارد -Mabiccals.
همه -Mabiccals کد به طور سنتی بدون توجه به گزینه ها مستقل از موقعیت بوده است
پسندیدن -fPIC و -fpic. با این حال، به عنوان یک افزونه، زنجیره ابزار گنو به فایل های اجرایی اجازه می دهد
برای استفاده از دسترسی های مطلق برای نمادهای اتصال محلی. همچنین می تواند از پزشک عمومی کوتاه تری استفاده کند
توالی های اولیه سازی و ایجاد فراخوانی مستقیم به توابع تعریف شده محلی. این
حالت توسط انتخاب شده است -mno-اشتراک گذاری شده.
-mno-اشتراک گذاری شده به binutils 2.16 یا بالاتر بستگی دارد و اشیایی را تولید می کند که فقط می توانند باشند
توسط پیوند دهنده گنو پیوند داده شده است. با این حال، این گزینه بر ABI نهایی تأثیر نمی گذارد
قابل اجرا فقط ABI اشیاء قابل جابجایی را تحت تأثیر قرار می دهد. استفاده كردن -mno-اشتراک گذاری شده
به طور کلی فایل های اجرایی را کوچکتر و سریعتر می کند.
-mshared پیش فرض است.
-mplt
-mno-plt
فرض کنید (فرض نکنید) که پیوندهای استاتیک و پویا از PLT ها پشتیبانی می کنند و کپی می کنند
جابجایی ها این گزینه فقط تاثیر می گذارد -mno-اشتراک گذاری شده -Mabiccals. برای n64 ABI، این
گزینه بدون هیچ تاثیری ندارد -msym32.
شما می توانید -mplt پیش فرض با پیکربندی GCC با --with-mips-plt. به طور پیش فرض
is -mno-plt در غیر این صورت.
-mxgot
-mno-xgot
محدودیت های معمول در اندازه جدول افست جهانی را بردارید (بلند نکنید).
GCC معمولاً از یک دستورالعمل برای بارگذاری مقادیر از GOT استفاده می کند. در حالی که این است
نسبتا کارآمد، فقط در صورتی کار می کند که GOT کوچکتر از حدود 64k باشد. هر چیزی
بزرگتر باعث می شود که پیوند دهنده خطایی مانند:
جابجایی کوتاه شده به تناسب: R_MIPS_GOT16 foobar
اگر این اتفاق افتاد، باید کد خود را دوباره با آن کامپایل کنید -mxgot. این با خیلی کار می کند
GOT های بزرگ، اگرچه کد نیز کارآمدی کمتری دارد، زیرا سه مورد طول می کشد
دستورالعمل هایی برای دریافت ارزش یک نماد جهانی
توجه داشته باشید که برخی از لینکرها می توانند چندین GOT ایجاد کنند. اگر شما چنین پیوند دهنده ای دارید، شما
فقط باید استفاده کرد -mxgot هنگامی که یک فایل شی منفرد به بیش از 64k دسترسی دارد
ارزش ورودی های GOT تعداد بسیار کمی انجام می دهند.
این گزینه ها تأثیری ندارند مگر اینکه GCC کد مستقل از موقعیت را ایجاد کند.
-mgp32
فرض کنید که ثبات های همه منظوره 32 بیت عرض دارند.
-mgp64
فرض کنید که ثبات های همه منظوره 64 بیت عرض دارند.
-mfp32
فرض کنید رجیسترهای ممیز شناور 32 بیت عرض دارند.
-mfp64
فرض کنید رجیسترهای ممیز شناور 64 بیت عرض دارند.
-mhard-float
از دستورالعمل های هم پردازنده ممیز شناور استفاده کنید.
-msoft-float
از دستورالعمل های هم پردازنده ممیز شناور استفاده نکنید. اجرای ممیز شناور
محاسبات با استفاده از تماس های کتابخانه در عوض.
-mno-float
معادل با -msoft-float، اما علاوه بر این ادعا می کند که برنامه در حال کامپایل است
هیچ عملیات ممیز شناور را انجام نمی دهد. این گزینه در حال حاضر پشتیبانی می شود
فقط توسط برخی از پیکربندیهای MIPS بدون فلز، که در آن ممکن است مجموعه خاصی از آن را انتخاب کند
کتابخانه هایی که فاقد تمام پشتیبانی ممیز شناور هستند (از جمله، برای مثال، floating-
فرمت های نقطه ای "printf"). اگر کد کامپایل شده با "-mno-float" به طور تصادفی حاوی
عملیات ممیز شناور، احتمالاً دچار شکست در زمان پیوند یا زمان اجرا می شود.
چند شناور
فرض کنید که پردازنده مشترک ممیز شناور فقط از عملیات تک دقیق پشتیبانی می کند.
-mdouble-float
فرض کنید که پردازنده مشترک ممیز شناور از عملیات با دقت دوگانه پشتیبانی می کند. این
پیش فرض است.
-Mabs = 2008
-mabs=میراث
این گزینهها درمان IEEE 754 ویژه بدون عدد (NaN) را کنترل میکنند
داده های ممیز شناور با "abs.fmt" و "نفیfmt" دستورالعمل ماشین
به طور پیش فرض یا زمانی که -mabs=میراث استفاده می شود درمان میراث انتخاب شده است. در این
در صورتی که این دستورالعملها حسابی در نظر گرفته میشوند و در صورت انجام صحیح از آن اجتناب میشود
مورد نیاز است و عملوند ورودی ممکن است یک NaN باشد. دنباله ای طولانی تر از دستورالعمل ها
که بیت علامت داده ممیز شناور را به صورت دستی دستکاری می کند به جای آن استفاده می شود مگر اینکه
la -فقط ریاضی محدود گزینه نیز مشخص شده است.
La -Mabs = 2008 گزینه درمان IEEE 754-2008 را انتخاب می کند. در این مورد اینها
دستورالعمل ها غیر حسابی در نظر گرفته می شوند و بنابراین در همه به درستی عمل می کنند
موارد، از جمله به ویژه در مواردی که عملوند ورودی یک NaN است. این دستورالعمل ها
بنابراین همیشه برای عملیات مربوطه استفاده می شود.
-mnan=2008
-mnan=میراث
این گزینه ها رمزگذاری IEEE 754 ویژه غیر شماره (NaN) را کنترل می کنند.
داده های ممیز شناور
La -mnan=میراث گزینه رمزگذاری قدیمی را انتخاب می کند. در این مورد NaN های آرام (qNaNs)
با اولین بیت از میدان معنادار انتهایی آنها 0 نشان داده می شوند، در حالی که
سیگنال دهی NaNs (sNaNs) با اولین بیت از معنی دنباله آنها نشان داده می شود.
میدان بودن 1.
La -mnan=2008 گزینه کدگذاری IEEE 754-2008 را انتخاب می کند. در این مورد qNaN ها هستند
با اولین بیت از میدان معنادار انتهایی آنها 1 نشان داده می شود، در حالی که sNaN ها
با اولین بیت از میدان معنادار انتهایی آنها 0 نشان داده می شوند.
پیش فرض این است -mnan=میراث مگر اینکه GCC با آن پیکربندی شده باشد --with-nan=2008.
-mlsc
-mno-llsc
استفاده کنید (استفاده نکنید) ll, scو همگام دستورالعمل های پیاده سازی حافظه اتمی داخلی
کارکرد. هنگامی که هیچ یک از گزینه ها مشخص نشده است، GCC از دستورالعمل ها در صورت هدف استفاده می کند
معماری از آنها پشتیبانی می کند.
-mlsc اگر محیط زمان اجرا بتواند دستورالعمل ها را تقلید کند مفید است -mno-llsc
می تواند هنگام کامپایل برای ISA های غیر استاندارد مفید باشد. شما می توانید هر یک از گزینه ها را بسازید
پیش فرض با پیکربندی GCC با --with-llsc و --without-llsc بود.
--with-llsc پیش فرض برای برخی از تنظیمات است. مستندات نصب را ببینید
برای جزئیات بیشتر.
-mdsp
-mno-dsp
از نسخه 1 MIPS DSP ASE (استفاده نکنید) استفاده کنید.
این گزینه ماکرو پیش پردازنده را تعریف می کند __mips_dsp. همچنین تعریف می کند
__mips_dsp_rev به 1.
-mdspr2
-mno-dspr2
از نسخه 2 MIPS DSP ASE (استفاده نکنید) استفاده کنید.
این گزینه ماکروهای پیش پردازنده را تعریف می کند __mips_dsp و __mips_dspr2. این نیز
تعریف می کند __mips_dsp_rev به 2.
-msmartmips
-mno-smartmips
از MIPS SmartMIPS ASE استفاده کنید (استفاده نکنید).
-مقابل-مجرد
-mno-paired-single
از دستورالعمل های ممیز شناور جفت-تک استفاده کنید (استفاده نکنید).
این گزینه برای فعال کردن پشتیبانی از نقطه شناور سخت افزاری نیاز دارد.
-mdmx
-mno-mdmx
از دستورالعمل های MIPS Digital Media Extension استفاده کنید (استفاده نکنید). این گزینه فقط می تواند باشد
هنگام تولید کد 64 بیتی استفاده می شود و برای پشتیبانی از نقطه شناور سخت افزاری نیاز دارد
فعال شده است
-mips3d
-mno-mips3d
از MIPS-3D ASE استفاده کنید (استفاده نکنید). گزینه -mips3d دلالت دارد -مقابل-مجرد.
-mmicromips
-mno-micromips
کد microMIPS را تولید کنید (تولید نکنید).
تولید کد MicroMIPS را نیز می توان بر اساس هر تابع با استفاده از کنترل کرد
ویژگی های "micromips" و "nomicromips".
-mmt
-mno-mt
از دستورالعمل های MT Multithreading (استفاده نکنید) استفاده کنید.
-mmcu
-mno-mcu
از دستورالعمل های MIPS MCU ASE استفاده کنید (استفاده نکنید).
-موا
-mno-eva
از دستورالعمل های آدرس دهی مجازی پیشرفته MIPS استفاده کنید (استفاده نکنید).
-mvirt
-mno-virt
از دستورالعمل های خاص برنامه مجازی سازی MIPS استفاده کنید (استفاده نکنید).
-mlong64
انواع "طولان" را مجبور کنید که 64 بیت عرض داشته باشند. دیدن -mlong32 برای توضیح پیش فرض
و روشی که اندازه اشاره گر تعیین می شود.
-mlong32
انواع "long"، "int" و اشاره گر را مجبور کنید که 32 بیت عرض داشته باشند.
اندازه پیشفرض «int»، «long» و اشارهگرها به ABI بستگی دارد. همه
ABI های پشتیبانی شده از "int" 32 بیتی استفاده می کنند. n64 ABI از 64 بیت طولانی استفاده می کند، همانطور که از 64 بیت استفاده می کند
EABI; بقیه از 32 بیتی "long" استفاده می کنند. اشاره گرها به اندازه "long" یا the هستند
اندازه رجیسترهای عدد صحیح، هر کدام کوچکتر باشد.
-msym32
-mno-sym32
فرض کنید (فرض نکنید) که همه نمادها دارای مقادیر 32 بیتی هستند، صرف نظر از انتخاب شده
ABI. این گزینه در ترکیب با -mabi=64 و -mno-abicals به این دلیل که
به GCC اجازه می دهد تا ارجاعات کوتاه تر و سریع تری به آدرس های نمادین ایجاد کند.
-G تعداد
تعاریف دادههای قابل مشاهده خارجی را در یک بخش داده کوچک قرار دهید اگر آن داده وجود ندارد
بزرگتر از تعداد بایت ها سپس GCC می تواند دسترسی های کارآمدتری به داده ها ایجاد کند. دیدن
-mgpopt برای جزئیات بیشتر.
به طور پیش فرض -G گزینه بستگی به پیکربندی دارد.
-mlocal-sdata
-mno-local-sdata
تمدید کردن (بسط ندادن) the -G رفتار نسبت به داده های محلی نیز مانند متغیرهای استاتیک
در سی. -mlocal-sdata پیش فرض برای همه تنظیمات است.
اگر پیوند دهنده شکایت کند که یک برنامه از داده های بسیار کوچک استفاده می کند، ممکن است
میخواهید سعی کنید قطعاتی که عملکرد کمتر حیاتی دارند را بازسازی کنید -mno-local-sdataاست. شما
همچنین ممکن است بخواهید با آن کتابخانه های بزرگ بسازید -mno-local-sdata، به طوری که کتابخانه ها
فضای بیشتری برای برنامه اصلی بگذارید.
-مترن-سیتا
-mno-extern-sdata
فرض کنید (فرض نکنید) که داده های تعریف شده خارجی در یک بخش داده کوچک هستند اگر
اندازه آن داده ها در داخل است -G حد. -مترن-سیتا پیش فرض برای همه است
پیکربندی.
اگر ماژول را کامپایل کنید وزارت دفاع با -مترن-سیتا -G تعداد -mgpoptو وزارت دفاع مراجع الف
متغیر هر که بزرگتر از آن نیست تعداد بایت، شما باید مطمئن شوید که هر قرار داده شده
در بخش داده های کوچک اگر هر توسط ماژول دیگری تعریف شده است، شما باید یا کامپایل کنید
که ماژول با به اندازه کافی بالا -G یک ویژگی "بخش" را تنظیم یا پیوست کنید هر's
تعریف. اگر هر رایج است، شما باید برنامه را با یک برنامه به اندازه کافی بالا پیوند دهید -G
تنظیم می باشد.
ساده ترین راه برای ارضای این محدودیت ها، کامپایل و پیوند دادن هر ماژول است
با همان -G گزینه. با این حال، ممکن است بخواهید کتابخانه ای بسازید که پشتیبانی کند
چندین محدودیت داده کوچک مختلف شما می توانید این کار را با کامپایل کتابخانه با
بالاترین پشتیبانی -G تنظیم و استفاده اضافی -mno-extern-sdata متوقف کردن
کتابخانه از ایجاد مفروضات در مورد داده های تعریف شده خارجی.
-mgpopt
-mno-gpopt
از دسترسی های مربوط به GP برای نمادهایی که مشخص است در یک داده کوچک هستند استفاده کنید
بخش؛ دیدن -G, -mlocal-sdata و -مترن-سیتا. -mgpopt پیش فرض برای همه است
پیکربندی.
-mno-gpopt برای مواردی که ثبات $gp ممکن است مقدار of را حفظ نکند مفید است
"_gp". به عنوان مثال، اگر کد بخشی از یک کتابخانه است که ممکن است در بوت استفاده شود
monitor، برنامههایی که روتینهای مانیتور بوت را فراخوانی میکنند، مقدار ناشناختهای را در gp$ ارسال میکنند. (که در
در چنین شرایطی، خود مانیتور بوت معمولاً با آن کامپایل می شود -G0.)
-mno-gpopt دلالت دارد -mno-local-sdata و -mno-extern-sdata.
داده های عضو شده
-mno-embedded-data
در صورت امکان ابتدا متغیرها را به بخش داده فقط خواندنی اختصاص دهید و سپس در قسمت بعدی
بخش داده کوچک در صورت امکان، در غیر این صورت در داده ها. این کد کمی کندتر می دهد
از حالت پیشفرض است، اما مقدار RAM مورد نیاز هنگام اجرا را کاهش میدهد و در نتیجه ممکن است
برای برخی از سیستم های تعبیه شده ترجیح داده شود.
-muninit-const-in-rodata
-mno-unit-const-in-rodata
متغیرهای "const" را که مقداردهی اولیه نشده اند را در بخش داده فقط خواندنی قرار دهید. این گزینه است
فقط در رابطه با داده های عضو شده.
-mcode-readable=محیط
مشخص کنید که آیا GCC ممکن است کدی تولید کند که از بخشهای اجرایی خوانده شود. وجود دارد
سه تنظیمات ممکن:
-mcode-readable=بله
دستورالعمل ها ممکن است آزادانه به بخش های اجرایی دسترسی داشته باشند. این تنظیمات پیش فرض است.
-mcode-readable=pcrel
دستورالعملهای بار مربوط به رایانه شخصی MIPS16 میتوانند به بخشهای اجرایی دسترسی داشته باشند، اما موارد دیگر
دستورالعمل ها نباید این کار را انجام دهند. این گزینه در پردازنده های 4KSc و 4KSd مفید است
زمانی که TLB های کد دارای مجموعه بیت Read Inhibit هستند. در پردازنده ها نیز مفید است
که می تواند پیکربندی شود تا یک رابط SRAM دستورالعمل/داده دوگانه داشته باشد و اینکه
مانند M4K، بارهای مربوط به رایانه شخصی را به طور خودکار به رم دستورالعمل هدایت کنید.
-mcode-readable=نه
دستورالعمل ها نباید به بخش های اجرایی دسترسی داشته باشند. این گزینه می تواند مفید باشد
اهدافی که برای داشتن یک رابط SRAM دستورالعمل/داده دوگانه پیکربندی شده اند اما
که (برخلاف M4K) به طور خودکار بارهای مربوط به رایانه شخصی را به سمت دیگر هدایت نمی کنند
رم دستورالعمل
-msplit-addresss
-mno-split-addresss
استفاده از اپراتورهای جابجایی اسمبلر "%hi()" و "%lo()" را فعال کنید. این
گزینه جایگزین شده است -mexplicit-relocs اما برای عقب نگه داشته می شود
سازگاری.
-mexplicit-relocs
-mno-explicit-relocs
هنگام برخورد با آدرس های نمادین از اپراتورهای جابجایی اسمبلر استفاده کنید (از استفاده نکنید).
جایگزین، انتخاب شده توسط -mno-explicit-relocs، استفاده از ماکروهای اسمبلر است.
-mexplicit-relocs اگر GCC برای استفاده از اسمبلری پیکربندی شده باشد، پیش فرض است
از اپراتورهای جابجایی پشتیبانی می کند.
-mcheck-zero-division
-mno-check-zero-division
در تقسیم اعداد صحیح بر صفر تله بزنید (به دام نیفتید).
پیش فرض این است -mcheck-zero-division.
-mdivide-traps
-mdivide- breaks
سیستم های MIPS با ایجاد یک تله شرطی یا a تقسیم بر صفر را بررسی می کنند
آموزش شکستن استفاده از تله ها باعث ایجاد کد کوچکتر می شود، اما فقط در MIPS پشتیبانی می شود
II و بعد. همچنین، برخی از نسخه های هسته لینوکس دارای یک باگ هستند که از تله جلوگیری می کند
از تولید سیگنال مناسب ("SIGFPE"). استفاده کنید -mdivide-traps مشروط اجازه دادن
تله بر روی معماری هایی که از آنها پشتیبانی می کنند و -mdivide- breaks برای اجبار استفاده از
می شکند.
پیش فرض معمولاً است -mdivide-traps، اما این می تواند در زمان پیکربندی لغو شود
با استفاده از --with-divide=شکست. چک های تقسیم بر صفر را می توان با استفاده از آن به طور کامل غیرفعال کرد
-mno-check-zero-division.
-mmemcpy
-mno-memcpy
استفاده از "memcpy()" را برای حرکات بلوک اجباری (اجبار نکنید). پیشفرض
is -mno-memcpy، که به GCC اجازه می دهد تا اکثر کپی های با اندازه ثابت را درون خطی کند.
تماس های طولانی
-mno-long-تماس
استفاده از دستور "jal" را غیرفعال کنید (غیرفعال نکنید). فراخوانی توابع با استفاده از "jal"
کارآمدتر است اما نیاز دارد که تماس گیرنده و تماس گیرنده در یک 256 مگابایت باشند
بخش.
این گزینه روی کد abicalls تاثیری ندارد. پیش فرض است -mno-long-تماس.
-ممم
-mno-mad
استفاده از دستورالعمل های "mad"، "madu" و "mul" را همانطور که توسط
R4650 ISA.
-میمد
-mno-imadd
استفاده از دستورات عدد صحیح "madd" و "msub" را فعال (غیرفعال) کنید. پیش فرض است
-میمد در معماری هایی که از "madd" و "msub" به جز 74k پشتیبانی می کنند
معماری که در آن مشخص شد کد کندتر تولید می کند.
-mfused-madd
-mno-fused-madd
استفاده از دستورات ضرب-انباشت ممیز شناور را فعال (غیرفعال) کنید، زمانی که آنها
موجود هستند. پیش فرض است -mfused-madd.
در CPU R8000 وقتی از دستورالعملهای multiply-accumulate استفاده میشود، متوسط است
محصول با دقت بینهایت محاسبه میشود و مشمول FCSR Flush نمیشود
بیت صفر این ممکن است در برخی شرایط نامطلوب باشد. در پردازنده های دیگر
نتیجه از نظر عددی با محاسبه معادل با استفاده از ضرب جداگانه یکسان است،
دستورات را جمع، تفریق و نفی کنید.
-nocpp
به اسمبلر MIPS بگویید که پیش پردازنده خود را روی فایل های اسمبلر کاربر اجرا نکند (با یک
.s پسوند) هنگام مونتاژ آنها.
-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 رفتار اتمی نداشته باشند. آنها ممکن است
بن بست در نسخه های 2.6 و قبل از آن.
این گزینه تنها در صورتی می تواند مورد استفاده قرار گیرد که معماری هدف از شاخه احتمالی پشتیبانی کند
دستورالعمل. -mfix-r10000 پیش فرض زمانی است -مارس=r10000 استفاده می شود؛ -mno-fix-r10000
در غیر این صورت پیش فرض است.
-mfix-rm7000
-mno-fix-rm7000
روی خطای RM7000 "dmult"/"dmultu" کار کنید. راه حل ها توسط
اسمبلر به جای GCC.
-mfix-vr4120
-mno-fix-vr4120
روی برخی خطاهای VR4120 کار کنید:
- "dmultu" همیشه نتیجه صحیح را ایجاد نمی کند.
- "div" و "ddiv" همیشه در صورت یکی از عملوندها نتیجه صحیح را ایجاد نمی کنند
منفی است
راهحلها برای خطای تقسیم بر توابع ویژه در آن تکیه دارند libgcc.a. در
در حال حاضر، این توابع فقط توسط تنظیمات "mips64vr*-elf" ارائه می شوند.
سایر خطاهای VR4120 نیاز به قرار دادن NOP بین جفت های خاصی دارند
دستورالعمل ها. این خطاها توسط اسمبلر مدیریت می شود، نه توسط خود GCC.
-mfix-vr4130
روی خطای "mflo"/"mfhi" VR4130 کار کنید. راه حل ها توسط
اسمبلر و نه توسط GCC، اگرچه GCC از استفاده از "mflo" و "mfhi" اجتناب می کند
دستورالعمل های "macc"، "macchi"، "dmacc" و "dmacchi" VR4130 به جای آن در دسترس هستند.
-mfix-sb1
-mno-fix-sb1
در مورد برخی خطاهای هسته CPU SB-1 کار کنید. (این پرچم در حال حاضر در اطراف SB-1 کار می کند
بازبینی 2 "F1" و "F2" اشتباه ممیز شناور.)
-mr10k-cache-barrier=محیط
مشخص کنید که آیا GCC باید موانع کش را وارد کند تا از عوارض جانبی جلوگیری شود
حدس و گمان در مورد پردازنده های R10K
همانند بسیاری از پردازنده ها، R10K سعی می کند نتیجه یک شرطی را پیش بینی کند
شاخه و به صورت نظری دستورات را از شاخه "گرفته شده" اجرا می کند. بعدا
اگر نتیجه پیشبینیشده اشتباه باشد، این دستورالعملها را لغو میکند. با این حال، در R10K،
حتی دستورالعمل های سقط شده می تواند عوارض جانبی داشته باشد.
این مشکل فقط بر روی حافظه های هسته و بسته به سیستم بارگذاری هسته تاثیر می گذارد.
به عنوان مثال، یک ذخیرهسازی که به صورت فرضی اجرا شده ممکن است حافظه مورد نظر را در حافظه پنهان بارگذاری کند
و خط کش را به عنوان کثیف علامت گذاری کنید، حتی اگر خود فروشگاه بعداً لغو شود. اگر DMA
عملیات قبل از پاک شدن خط "کثیف" در همان ناحیه از حافظه می نویسد
داده های کش داده های DMA-ed را بازنویسی می کند. راهنمای کامل پردازنده R10K را ببینید
توضیحات، از جمله سایر مشکلات احتمالی
یک راه حل این است که قبل از هر دسترسی به حافظه، دستورالعمل های مانع کش را وارد کنید
ممکن است به صورت فرضی اجرا شود و حتی در صورت سقط شدن ممکن است عوارض جانبی داشته باشد.
-mr10k-cache-barrier=محیط اجرای این راه حل توسط GCC را کنترل می کند. آی تی
فرض میکند که دسترسیهای قطع شده به هر بایت در مناطق زیر، سمت ندارد
اثرات:
1. حافظه اشغال شده توسط قاب پشته تابع فعلی.
2. حافظه اشغال شده توسط آرگومان پشته ورودی.
3. حافظه اشغال شده توسط یک شی با آدرس پیوند زمان ثابت.
این مسئولیت هسته است که از دسترسی های احتمالی به این مناطق اطمینان حاصل کند
واقعا امن هستند
اگر برنامه ورودی حاوی یک اعلان تابع مانند:
void foo (باطل);
سپس اجرای "foo" باید اجازه دهد "j foo" و "jal foo" اجرا شود.
به صورت حدس و گمان GCC این محدودیت را برای توابعی که خودش کامپایل می کند رعایت می کند. آی تی
انتظار دارد توابع غیر GCC (مانند کد اسمبلی دست نویس) همین کار را انجام دهند.
گزینه سه شکل دارد:
-mr10k-cache-barrier=load-store
یک مانع حافظه پنهان را قبل از بارگذاری یا ذخیرهسازی که ممکن است به صورت فرضی اجرا شود، وارد کنید
و حتی در صورت سقط جنین ممکن است عوارض جانبی داشته باشد.
-mr10k-cache-barrier=store
یک مانع کش را قبل از یک فروشگاه قرار دهید که ممکن است به صورت فرضی اجرا شود و
که حتی در صورت سقط جنین ممکن است عوارض جانبی داشته باشد.
-mr10k-cache-barrier=هیچکدام
درج موانع کش را غیرفعال کنید. این تنظیمات پیش فرض است.
-mflush-func=عملکرد
-mno-flush-func
تابعی را برای فراخوانی برای شستشوی کش های I و D یا عدم فراخوانی چنین مواردی مشخص می کند
عملکرد. اگر فراخوانی شود، تابع باید همان آرگومان های مشترک را بگیرد
"_flush_func()"، یعنی آدرس محدوده حافظه ای که کش برای آن وجود دارد
flushed، اندازه محدوده حافظه و عدد 3 (برای شستشوی هر دو کش). را
پیشفرض بستگی به هدفی دارد که GCC برای آن پیکربندی شده است، اما معمولاً یکی است
_flush_func or __cpu_flush.
شاخه-هزینه =تعداد
هزینه شعب را تقریباً تنظیم کنید تعداد دستورالعمل های "ساده" این هزینه فقط یک است
اکتشافی است و تضمینی برای تولید نتایج ثابت در سراسر نسخه ها وجود ندارد. یک صفر
هزینه به طور اضافی پیش فرض را انتخاب می کند که بر اساس آن است -mtune تنظیم می باشد.
-شاخه محتمل
-mno-branch- احتمال دارد
فعال یا غیرفعال کردن استفاده از دستورالعمل های Branch Likely، صرف نظر از پیش فرض برای
معماری انتخاب شده بهطور پیشفرض، ممکن است دستورالعملهای Branch Likely ایجاد شود اگر
آنها توسط معماری انتخاب شده پشتیبانی می شوند. یک استثنا برای MIPS32 و
معماری ها و پردازنده های MIPS64 که این معماری ها را پیاده سازی می کنند. برای آنها،
دستورالعمل های Branch Likely به طور پیش فرض تولید نمی شوند زیرا MIPS32 و
معماری MIPS64 به طور خاص استفاده از آنها را منسوخ می کند.
-mfp-exceptions
-mno-fp-exceptions
مشخص می کند که آیا استثناهای FP فعال هستند یا خیر. این بر نحوه دستورالعمل های FP تأثیر می گذارد
برای برخی از پردازنده ها برنامه ریزی شده است. پیش فرض این است که استثناهای FP فعال هستند.
به عنوان مثال، در SB-1، اگر استثناهای FP غیرفعال باشد، و ما 64 بیتی را منتشر می کنیم.
کد، سپس می توانیم از هر دو لوله FP استفاده کنیم. در غیر این صورت، ما فقط می توانیم از یک لوله FP استفاده کنیم.
-mvr4130-align
-mno-vr4130-align
خط لوله VR4130 فوق اسکالر دو طرفه است، اما فقط می تواند دو دستورالعمل صادر کند
با هم اگر اولی 8 بایت تراز باشد. هنگامی که این گزینه فعال است، GCC تراز می شود
جفت دستوراتی که فکر می کند باید به صورت موازی اجرا شوند.
این گزینه فقط هنگام بهینه سازی برای VR4130 تأثیر می گذارد. به طور معمول کد می سازد
سریعتر، اما به قیمت بزرگتر کردن آن. این به طور پیش فرض در فعال است
سطح بهینه سازی -O3.
-msynci
-mno-synci
فعال کردن (غیرفعال) تولید دستورالعملهای «همگامسازی» در معماریهایی که از آن پشتیبانی میکنند.
دستورالعمل های "synci" (در صورت فعال بودن) زمانی تولید می شوند که "__builtin___clear_cache()"
تدوین شده است.
این گزینه به طور پیشفرض روی "-mno-synci" است، اما پیشفرض را میتوان با پیکربندی لغو کرد.
با "--with-synci".
هنگام کامپایل کد برای سیستم های تک پردازنده، به طور کلی استفاده از "synci" بی خطر است.
با این حال، در بسیاری از سیستم های چند هسته ای (SMP)، دستورالعمل را باطل نمی کند
در تمام هسته ها ذخیره می شود و ممکن است منجر به رفتار نامشخص شود.
-mrelax-pic-calls
-تماسهای mno-relax-pic
سعی کنید تماسهای PIC که معمولاً از طریق ثبت نام ۲۵ دلاری ارسال میشوند را به تماسهای مستقیم تبدیل کنید.
این تنها در صورتی امکان پذیر است که پیوند دهنده بتواند مقصد را در زمان پیوند و اگر تعیین کند
مقصد در محدوده تماس مستقیم است.
-mrelax-pic-calls اگر GCC برای استفاده از اسمبلر و a پیکربندی شده باشد، پیش فرض است
پیوندی که از دستورالعمل اسمبلی ".reloc" پشتیبانی می کند و "-mexplicit-relocs" در
اثر با "-mno-explicit-relocs"، این بهینه سازی را می توان توسط
اسمبلر و لینکر به تنهایی بدون کمک کامپایلر.
-mmcount-ra-address
-mno-mcount-ra-address
کدی را ارسال کنید (انتشار نکنید) که به "_mcount" اجازه می دهد تا بازگشت تابع فراخوان را تغییر دهد
نشانی. هنگامی که فعال باشد، این گزینه رابط معمول "_mcount" را با یک رابط جدید گسترش می دهد
نشانی ra پارامتر، که دارای نوع "intptr_t *" است و در ثبات $12 ارسال می شود.
سپس "_mcount" می تواند آدرس برگشتی را با انجام هر دو مورد زیر تغییر دهد:
· بازگشت آدرس جدید در ثبت نام $31.
· ذخیره آدرس جدید در "*نشانی ra"، اگر نشانی ra غیر پوچ است.
پیش فرض این است -mno-mcount-ra-address.
MMIX گزینه
این گزینه ها برای MMIX تعریف شده اند:
-mlibfuncs
-mno-libfuncs
مشخص کنید که توابع کتابخانه ذاتی در حال کامپایل هستند و همه مقادیر را وارد می کنند
بدون توجه به اندازه، ثبت می کند.
-مپسیلون
-mno-epsilon
دستورالعمل های مقایسه ممیز شناور را ایجاد کنید که با توجه به "rE" مقایسه شوند.
ثبت اپسیلون
-mabi=mmixware
-mabi=gnu
کدی تولید کنید که پارامترهای تابع را ارسال می کند و مقادیری را برمی گرداند که (در فراخوانی شده
تابع) به عنوان رجیسترهای $0 و بالاتر دیده می شوند، برخلاف GNU ABI که از global استفاده می کند
231 دلار و بالاتر ثبت می کند.
-mzero-extend
-mno-zero-extend
هنگام خواندن داده ها از حافظه در اندازه های کمتر از 64 بیت، از صفر استفاده کنید (استفاده نکنید)
گسترش دستورالعملهای بار بهطور پیشفرض، بهجای تمدید نشانهها.
-mknuthdiv
-mno-knuthdiv
نتیجه تقسیمی را که باقیمانده به دست میآید همان علامت مقسومگیرنده باشد.
با پیش فرض، -mno-knuthdiv، علامت باقیمانده به دنبال علامت the می آید
سود سهام هر دو روش از نظر حسابی معتبر هستند، دومی تقریباً منحصراً است
استفاده شده.
-mtoplevel-symbols
-mno-toplevel-symbols
Prepend (پیش نبندید) الف : به همه نمادهای جهانی، بنابراین کد اسمبلی می تواند استفاده شود
با دستورالعمل مونتاژ "PREFIX".
-ملف
یک فایل اجرایی در قالب ELF به جای پیش فرض ایجاد کنید mmo فرمت استفاده شده توسط
la mmix شبیه ساز
-شاخه-پیش بینی
-mno-branch-predict
هنگام پیشبینی شاخه ایستا از دستورالعملهای شاخه احتمالی (استفاده نکنید) استفاده کنید
شاخه احتمالی را نشان می دهد.
-آدرس های mbase
-mno-base-addresss
کدی را ایجاد کنید (تولید نکنید). پایه آدرس. با استفاده از آدرس پایه
به طور خودکار یک درخواست (که توسط اسمبلر و پیوند دهنده انجام می شود) برای a ایجاد می کند
ثابتی که باید در یک ثبت جهانی تنظیم شود. ثبات برای یک یا چند پایه استفاده می شود
آدرس درخواست ها در محدوده 0 تا 255 از مقدار موجود در رجیستر. را
به طور کلی منجر به کد کوتاه و سریع می شود، اما تعداد آیتم های داده های مختلف که
قابل رسیدگی محدود است. این بدان معنی است که برنامه ای که از داده های ثابت زیادی استفاده می کند
ممکن است مورد نیاز باشد -mno-base-addresss.
چند خروجی
-mno-single-exit
کد تولید شده را مجبور کنید (اجبار نکنید) یک نقطه خروج در هر تابع داشته باشد.
MN10300 گزینه
اینها -m گزینه ها برای معماری های Matsushita MN10300 تعریف شده اند:
-mult-bug
کد ایجاد کنید تا از اشکال در دستورالعمل های ضرب برای پردازنده های MN10300 جلوگیری کنید.
این پیش فرض است.
-mno-mult-bug
برای جلوگیری از اشکال در دستورالعمل های ضرب برای MN10300 کد تولید نکنید
پردازنده ها
-mam33
با استفاده از ویژگی های مخصوص پردازنده AM33 کد تولید کنید.
-mno-am33
با استفاده از ویژگی های خاص پردازنده AM33 کد تولید نکنید. این است
به طور پیش فرض
-mam33-2
با استفاده از ویژگی های مخصوص پردازنده AM33/2.0 کد تولید کنید.
-mam34
با استفاده از ویژگی های مخصوص پردازنده AM34 کد تولید کنید.
-mtune=نوع cpu
هنگام برنامه ریزی دستورالعمل ها از ویژگی های زمان بندی نوع CPU مشخص شده استفاده کنید.
این نوع پردازنده هدفمند را تغییر نمی دهد. نوع CPU باید یکی از آنها باشد
mn10300, am33, am33-2 or am34.
-mreturn-pointer-on-d0
هنگام تولید تابعی که نشانگر را برمی گرداند، نشانگر را در هر دو حالت "a0" و
"d0". در غیر این صورت، اشاره گر فقط در "a0" برگردانده می شود و تلاش می کند تا آن را فراخوانی کند
عملکردهای بدون نمونه اولیه منجر به خطا می شوند. توجه داشته باشید که این گزینه توسط فعال است
پیش فرض استفاده کنید -mno-return-pointer-on-d0 آن را غیرفعال کنید
-mno-crt0
در فایل شی مقداردهی اولیه C در زمان اجرا پیوند داده نشود.
-آرامش کن
به پیوند دهنده نشان دهید که باید یک پاس بهینه سازی آرامش را انجام دهد
شاخه ها، فراخوانی ها و آدرس های حافظه مطلق را کوتاه کنید. این گزینه فقط اثر دارد
هنگامی که در خط فرمان برای مرحله پیوند نهایی استفاده می شود.
این گزینه اشکال زدایی نمادین را غیرممکن می کند.
-mliw
به کامپایلر اجازه تولید بدهید طولانی دستور العمل کلمه دستورالعمل اگر هدف است
AM33 و یا بعد. این پیش فرض است. این گزینه ماکرو پیش پردازنده را تعریف می کند
__LIW__.
-منولیو
اجازه تولید کامپایلر را ندهید طولانی دستور العمل کلمه دستورالعمل ها. این گزینه
ماکرو پیش پردازنده را تعریف می کند __NO_LIW__.
-msetlb
به کامپایلر اجازه تولید SETLB و ال سی سی دستورالعمل اگر هدف است
AM33 و یا بعد. این پیش فرض است. این گزینه ماکرو پیش پردازنده را تعریف می کند
__SETLB__.
-منوستلب
اجازه تولید کامپایلر را ندهید SETLB or ال سی سی دستورالعمل ها. این گزینه تعریف می کند
ماکرو پیش پردازنده __NO_SETLB__.
مکسی گزینه
-meb
کد big-endian را تولید کنید. این پیش فرض برای است موکسی-*-* پیکربندی.
-مل
کد کمی اندین تولید کنید.
-mno-crt0
در فایل شی مقداردهی اولیه C در زمان اجرا پیوند داده نشود.
MSP430 گزینه
این گزینه ها برای MSP430 تعریف شده اند:
-masm-hex
خروجی مونتاژ را مجبور کنید همیشه از ثابت های هگزا استفاده کند. معمولاً چنین ثابت هایی امضا می شوند
اعشاری، اما این گزینه برای اهداف آزمایشی و/یا زیبایی شناختی موجود است.
-mmcu=
MCU مورد نظر را انتخاب کنید. این برای ایجاد یک نماد پیش پردازنده C بر اساس استفاده می شود
نام MCU، به حروف بزرگ تبدیل شده و قبل و بعد با "__" ثابت شده است. این در
turn توسط فایل هدر "msp430.h" برای انتخاب یک MCU خاص استفاده می شود
فایل هدر تکمیلی
این گزینه همچنین ISA را برای استفاده تنظیم می کند. اگر نام MCU نامی است که فقط برای آن شناخته شده است
از 430 ISA پشتیبانی کنید سپس آن انتخاب می شود، در غیر این صورت 430X ISA انتخاب می شود. آ
نام عمومی MCU "msp430" همچنین می تواند برای انتخاب 430 ISA استفاده شود. به طور مشابه
نام عمومی MCU "msp430x" 430X ISA را انتخاب می کند.
علاوه بر این، یک اسکریپت پیوند دهنده خاص MCU به خط فرمان لینکر اضافه خواهد شد.
نام اسکریپت نام MCU با ".ld" است. بدین ترتیب مشخص می کند
-mmcu=xxx در خط فرمان gcc نماد پیش پردازنده C "__XXX__" و
باعث می شود پیوند دهنده به دنبال اسکریپتی به نام xxx.ld.
این گزینه نیز به اسمبلر منتقل می شود.
-mcpu=
ISA مورد استفاده را مشخص می کند. مقادیر پذیرفته شده عبارتند از "msp430"، "msp430x" و "msp430xv2".
این گزینه منسوخ شده است. در -mmcu= برای انتخاب ISA باید از گزینه استفاده شود.
-msim
پیوند به کتابخانه های زمان اجرا شبیه ساز و اسکریپت پیوند دهنده. هر اسکریپت را لغو می کند
توسط -mmcu= گزینه.
-بزرگ
از آدرس دهی مدل بزرگ (نشانگرهای 20 بیتی، "size_t" 32 بیتی) استفاده کنید.
- کوچک
از آدرس دهی مدل کوچک (نشانگرهای 16 بیتی، "size_t" 16 بیتی) استفاده کنید.
-آرامش کن
این گزینه به اسمبلر و لینکر داده می شود و به لینکر اجازه انجام کار را می دهد
بهینه سازی های خاصی که تا لینک نهایی قابل انجام نیستند.
mhwmult=
نوع سخت افزاری که توسط هدف پشتیبانی می شود را توصیف می کند. ارزش های پذیرفته شده هستند
"هیچ" برای ضرب بدون سخت افزار، "16 بیت" برای ضرب 16 بیتی اصلی
توسط MCU های اولیه پشتیبانی می شود. "32bit" برای ضرب 16/32 بیتی که توسط MCU های بعدی پشتیبانی می شود
و "f5series" برای ضربدر 16/32 بیتی که توسط MCU های سری F5 پشتیبانی می شود. یک ارزش از
"خودکار" نیز می تواند داده شود. این به GCC میگوید که پشتیبانی چند برابری سختافزار را استنباط کند
بر اساس نام MCU ارائه شده توسط -mmcu گزینه. اگر نه -mmcu گزینه مشخص شده است
سپس پشتیبانی از چند برابری سخت افزار "32 بیتی" فرض می شود. "auto" تنظیم پیش فرض است.
ضرب سخت افزار معمولاً با فراخوانی یک روال کتابخانه انجام می شود. این باعث صرفه جویی می شود
فضای موجود در کد تولید شده هنگام کامپایل در "-O3" یا بالاتر با این حال سخت افزار
ضریب به صورت درون خطی فراخوانی می شود. این باعث ایجاد کد بزرگتر، اما سریعتر می شود.
روال های ضرب سخت افزار، وقفه ها را در حین اجرا غیرفعال می کند و آن را بازیابی می کند
حالت وقفه قبلی پس از پایان آنها. این باعث می شود آنها در داخل استفاده کنند
کنترل کننده های وقفه و همچنین در کد معمولی.
-minrt
استفاده از محیط حداقل زمان اجرا را فعال کنید - بدون مقداردهی اولیه یا
سازندگان این برای دستگاه های دارای محدودیت حافظه در نظر گرفته شده است. کامپایلر خواهد کرد
شامل نمادهای ویژه در برخی از اشیاء است که به پیوند دهنده و زمان اجرا می گوید کدام کد
قطعات مورد نیاز است.
NDS32 گزینه
این گزینه ها برای پیاده سازی NDS32 تعریف شده اند:
-mbig-endian
کد را در حالت big-endian ایجاد کنید.
-mlittle-endian
کد را در حالت کمی اندین ایجاد کنید.
-کاهش-regs
برای تخصیص رجیستر از ثبات های با مجموعه کاهش یافته استفاده کنید.
-mfull-regs
برای تخصیص رجیستر از ثبات های کامل استفاده کنید.
-mcmov
دستورالعمل های حرکت مشروط را ایجاد کنید.
-mno-cmov
دستورالعمل های حرکت مشروط را ایجاد نکنید.
-mperf-ext
دستورالعمل های برنامه افزودنی عملکرد را ایجاد کنید.
-mno-perf-extext
دستورالعمل های توسعه عملکرد را ایجاد نکنید.
-mv3push
دستورات v3 push25/pop25 را ایجاد کنید.
-mno-v3push
دستورالعمل های v3 push25/pop25 را تولید نکنید.
-m16-bit
دستورالعمل های 16 بیتی را ایجاد کنید.
-mno-16-bit
دستورالعمل های 16 بیتی تولید نکنید.
-mgp-direct
دستورالعمل های پایه GP را مستقیماً ایجاد کنید.
-mno-gp-direct
دستورالعمل های پایه GP را مستقیماً تولید نکنید.
-misr-vector-size=تعداد
اندازه هر بردار وقفه را مشخص کنید که باید 4 یا 16 باشد.
-mcache-block-size=تعداد
اندازه هر بلوک کش را مشخص کنید که باید توان 2 بین 4 تا 512 باشد.
-مارس=قوس
نام معماری هدف را مشخص کنید.
-mforce-fp-as-gp
از تخصیص $fp در حین تخصیص رجیستر جلوگیری کنید تا کامپایلر بتواند
مجبور به انجام بهینه سازی fp-as-gp.
-mforbid-fp-as-gp
استفاده از $fp را برای دسترسی به متغیرهای ثابت و سراسری ممنوع کنید. این گزینه به شدت ممنوع است
بهینه سازی fp-as-gp بدون توجه به -mforce-fp-as-gp.
-mex9
از دستورالعمل های ویژه برای هدایت لینکر در انجام بهینه سازی ex9 استفاده کنید.
-mctor-dtor
فعال کردن ویژگی سازنده/ویرانگر.
-آرامش کن
راهنمای پیوند دهنده برای آرامش دستورالعمل ها.
نیوس II گزینه
اینها گزینه هایی هستند که برای پردازنده Altera Nios II تعریف شده اند.
-G تعداد
اشیاء سراسری و ثابت را کمتر یا مساوی قرار دهید تعداد بایت به داده های کوچک یا
بخش های BSS به جای داده های معمولی یا بخش های BSS. مقدار پیش فرض از تعداد is
8.
-mgpopt
-mno-gpopt
دسترسی های مربوط به GP را برای اشیاء موجود در داده های کوچک یا BSS ایجاد کنید (تولید نکنید).
بخش ها پیش فرض است -mgpopt به جز زمانی که -fpic or -fPIC برای تولید مشخص شده است
کد مستقل از موقعیت توجه داشته باشید که Nios II ABI اجازه GP-relative را نمی دهد
دسترسی از کتابخانه های مشترک
شاید لازم باشد مشخص کنید -mno-gpopt به صراحت هنگام ساخت برنامه هایی که شامل
مقادیر زیادی از داده های کوچک، از جمله بخش های بزرگ داده GOT. در این مورد،
افست 16 بیتی برای آدرس دهی نسبی GP ممکن است به اندازه کافی بزرگ نباشد که اجازه دسترسی به آن را بدهد
کل بخش داده های کوچک
-مل
-meb
به ترتیب کد کمی (پیشفرض) یا بزرگ-اندین (تجربی) ایجاد کنید.
-mbypass-cache
-mno-bypass-cache
با استفاده از انواع ورودی/خروجی، همه دستورالعملهای بارگیری و ذخیره را مجبور کنید که همیشه حافظه پنهان را دور بزنند
دستورالعمل ها. پیش فرض این است که حافظه پنهان را دور نزنیم.
-mno-cache-volatile
-mcache-volatile
دسترسی به حافظه فرار با استفاده از انواع ورودی/خروجی بارگذاری و ذخیره، کش را دور می زند
دستورالعمل ها. پیش فرض این است که حافظه پنهان را دور نزنیم.
-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" منتشر نشود.
-عادی-insn=N
-mno-custom-insn
هر یک -عادی-insn=N گزینه استفاده از یک دستورالعمل سفارشی با رمزگذاری را امکان پذیر می کند N چه زمانی
تولید کدی که استفاده می کند insn. به عنوان مثال، "-mcustom-fadds=253" سفارشی ایجاد می کند
دستورالعمل 253 برای عملیات اضافه کردن نقطه شناور تک دقیق به جای
رفتار پیش فرض استفاده از تماس کتابخانه
مقادیر زیر از insn پشتیبانی می شوند. به جز مواردی که در غیر این صورت ذکر شده است، ممیز شناور
انتظار می رود عملیات با معنایی معمولی IEEE 754 و
مستقیماً با عملگرهای C یا توابع داخلی GCC معادل آن مطابقت دارد.
ممیز شناور تک دقیق:
مدها, fsubs, fdivs, fmuls
عملیات حسابی باینری
fnegs
نفی واحد.
fabss
مقدار مطلق یکپارچه
fcmpeqs, fcmpges, fcmpgts, fcmples, fcmplts, fcmpnes
عملیات مقایسه
fmins, fmaxs
حداقل و حداکثر ممیز شناور. این دستورالعمل ها فقط در صورتی تولید می شوند که
-فقط ریاضی محدود مشخص شده است.
fsqrts
عملیات ریشه مربع یکنواخت.
fcoss, fsins, فتان ها, فتان ها, fexps, شلاق زدن
توابع مثلثاتی و نمایی ممیز شناور. این دستورالعمل ها هستند
فقط در صورتی که -بهینهسازیهای ریاضی و سرگرمکننده نیز مشخص شده است.
ممیز شناور با دقت دوگانه:
فدد, fsubd, fdivd, fmuld
عملیات حسابی باینری
fnegd
نفی واحد.
fabsd
مقدار مطلق یکپارچه
fcmpeqd, fcmpged, fcmpgtd, fcmpled, fcmpltd, fcmpned
عملیات مقایسه
پیدا کردن, fmaxd
حداقل و حداکثر دقت دوگانه. این دستورالعمل ها فقط در صورتی تولید می شوند که
-فقط ریاضی محدود مشخص شده است.
fsqrtd
عملیات ریشه مربع یکنواخت.
fcosd, fsind, ftand, fatand, fexpd, شلاق زدن
توابع مثلثاتی و نمایی با دقت دوگانه. این دستورالعمل ها هستند
فقط در صورتی که -بهینهسازیهای ریاضی و سرگرمکننده نیز مشخص شده است.
تبدیل ها:
fextsd
تبدیل از دقت تک به دقت دوگانه.
پشت سر هم
تبدیل از دقت دوگانه به دقت تک.
fixsi, فیکسسو, fixdi, fixdu
تبدیل از ممیز شناور به انواع عدد صحیح علامت دار یا بدون علامت، با
کوتاه شدن به سمت صفر
شناور, شناور, شناور, شناور
تبدیل انواع اعداد صحیح علامت دار یا بدون علامت به انواع ممیز شناور.
علاوه بر این، تمام دستورالعمل های انتقال زیر برای ثبات های داخلی X و Y
باید برای استفاده از هر یک از دستورالعمل های ممیز شناور با دقت دوگانه ارائه شود.
دستورالعملهای سفارشی که دو عملوند منبع با دقت دوگانه را دریافت میکنند، انتظار اولین را دارند
عملوند در ثبات 64 بیتی X. عملوند دیگر (یا تنها عملوند یک یوناری)
عملیات) به دستور محاسباتی سفارشی با کمترین معنادار داده می شود
نیمی در ثبت منبع src1 و مهمترین نیمه در src2. یک سفارش
دستورالعملی که یک نتیجه با دقت مضاعف را برمی گرداند، مهم ترین 32 را برمی گرداند
بیت ها در ثبات مقصد و نیمی دیگر در رجیستر 32 بیتی Y. GCC
به طور خودکار دنباله های کد لازم برای نوشتن ثبات X و/یا خواندن را تولید می کند
هنگامی که از دستورالعمل های ممیز شناور با دقت دوگانه استفاده می شود، Y را ثبت کنید.
fwrx
نوشتن src1 به نیمه قابل توجه ترین X و src2 به مهم ترین
نیمی از X.
فری
نوشتن src1 به Y.
فردجی, frdxlo
بیشترین یا کمترین (به ترتیب) نیمی از X را بخوانید و آن را در آن ذخیره کنید دزد.
فردی
مقدار Y را بخوانید و آن را در آن ذخیره کنید دزد.
توجه داشته باشید که می توانید کنترل محلی بیشتری بر تولید سفارشی Nios II به دست آورید
دستورالعمل ها با استفاده از "target("custom-insn=N")" و "هدف("بدون سفارشی-insn")"
ویژگی های تابع یا پراگماها.
-mcustom-fpu-cfg=نام
این گزینه مجموعه ای از پیش تعریف شده و نامگذاری شده از کدگذاری دستورالعمل های سفارشی را فعال می کند (نگاه کنید به
-عادی-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-fcmpgts=246 -mcustom-fcmples=249 -mcustom-fcmpeqs=250
-mcustom-fcmpnes=251 -mcustom-fmuls=252 -mcustom-fadds=253 -mcustom-fsubs=254
-mcustom-fdivs=255 -fsingle-precision-constant
تکالیف دستورالعمل سفارشی داده شده توسط فرد -عادی-insn= گزینه ها لغو می شوند
کسانی که توسط -mcustom-fpu-cfg=، صرف نظر از ترتیب گزینه ها در
خط فرمان.
توجه داشته باشید که می توانید کنترل محلی بیشتری بر انتخاب یک پیکربندی FPU بدست آورید
با استفاده از "target("custom-fpu-cfg=نام")" ویژگی تابع یا پراگما.
این اضافی -m گزینه هایی برای هدف Altera Nios II ELF (فلز برهنه) موجود است:
-محل
پیوند با HAL BSP. این امر ارتباط با راه اندازی زمان اجرا C ارائه شده توسط GCC را متوقف می کند
و کد پایان، و معمولاً همراه با استفاده می شود -msys-crt0= برای مشخص کردن
محل کد راه اندازی جایگزین ارائه شده توسط HAL BSP.
-msmallc
پیوند با نسخه محدودی از کتابخانه C، -lsmallc، به جای Newlib.
-msys-crt0=فایل شروع
فایل شروع نام فایل startfile (crt0) است که هنگام پیوند استفاده می شود. این گزینه
فقط در ارتباط با -محل.
-msys-lib=systemlib
systemlib نام کتابخانه کتابخانه ای است که تماس های سیستمی سطح پایین را ارائه می دهد
مورد نیاز کتابخانه C، به عنوان مثال "خواندن" و "نوشتن". این گزینه معمولاً برای
پیوند با یک کتابخانه ارائه شده توسط HAL BSP.
PDP-11 گزینه
این گزینه ها برای PDP-11 تعریف شده اند:
-mfpu
از سخت افزار FPP ممیز شناور استفاده کنید. این پیش فرض است. (نقطه شناور FIS روی
PDP-11/40 پشتیبانی نمی شود.)
-msoft-float
از ممیز شناور سخت افزاری استفاده نکنید.
-mac0
نتایج ممیز شناور را به ac0 برگردانید (fr0 در نحو اسمبلر یونیکس).
-mno-ac0
نتایج ممیز شناور را در حافظه برگردانید. این پیش فرض است.
-40
کد PDP-11/40 را ایجاد کنید.
-45
کد PDP-11/45 را ایجاد کنید. این پیش فرض است.
-10
کد PDP-11/10 را ایجاد کنید.
-mbcopy-builtin
برای کپی کردن حافظه از الگوهای "movmemhi" درون خطی استفاده کنید. این پیش فرض است.
-mbcopy
از الگوهای درون خطی "movmemhi" برای کپی کردن حافظه استفاده نکنید.
-mint16
-mno-int32
از "int" 16 بیتی استفاده کنید. این پیش فرض است.
-mint32
-mno-int16
از "int" 32 بیتی استفاده کنید.
-mfloat64
-mno-float32
از "float" 64 بیتی استفاده کنید. این پیش فرض است.
-mfloat32
-mno-float64
از "float" 32 بیتی استفاده کنید.
-مبشی
از الگوی "abshi2" استفاده کنید. این پیش فرض است.
-mno-abshi
از الگوی "abshi2" استفاده نکنید.
-شاخه گران است
وانمود کنید که شاخه ها گران هستند. این برای آزمایش با تولید کد است
تنها.
-شاخه-ارزان
وانمود نکنید که شاخه ها گران هستند. این پیش فرض است.
-munix-asm
از دستور اسمبلر یونیکس استفاده کنید. این پیشفرض هنگام پیکربندی برای pdp11-*-bsd.
-mdec-asm
از دستور اسمبلر DEC استفاده کنید. هنگامی که برای هر هدف PDP-11 پیکربندی شده است، این پیش فرض است
به غیر از pdp11-*-bsd.
پیکو چیپ گزینه
اینها -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 را انتخاب می کند. کد کامپایل شده با این گزینه ممکن است دچار مشکل شود
عملکرد ضعیف دستکاری بایت (char) زیرا DSP AE ارائه نمی دهد
پشتیبانی سخت افزاری برای بارگذاری/ذخیره های بایت.
-symbol-as-address
کامپایلر را فعال کنید تا مستقیماً از یک نام نماد به عنوان آدرس در یک بارگذاری/فروشگاه استفاده کند
دستورالعمل، بدون اینکه ابتدا آن را در یک ثبات بارگیری کنید. به طور معمول، استفاده از این
گزینه برنامه های بزرگتری تولید می کند که سریعتر از زمانی که از گزینه استفاده نمی شود اجرا می شوند.
با این حال، نتایج از برنامه ای به برنامه دیگر متفاوت است، بنابراین به عنوان یک گزینه کاربر باقی می ماند.
به جای اینکه برای همیشه فعال شود.
-mno-inefficient-warnings
هشدارهای مربوط به تولید کد ناکارآمد را غیرفعال می کند. این هشدارها می تواند باشد
برای مثال، هنگام کامپایل کدی که عملیات حافظه در سطح بایت را انجام می دهد، تولید می شود
در نوع MAC AE MAC AE هیچ پشتیبانی سخت افزاری برای حافظه سطح بایت ندارد
عملیات، بنابراین تمام بار/ذخیرههای بایت باید از بارگذاری/ذخیره کلمه سنتز شوند
عملیات این ناکارآمد است و یک هشدار برای نشان دادن اینکه شما ایجاد می شود
باید کد را بازنویسی کند تا از عملیات بایت جلوگیری کند، یا یک نوع AE را هدف قرار دهد که دارای آن است
پشتیبانی سخت افزاری لازم این گزینه این هشدارها را غیرفعال می کند.
PowerPC گزینه
این موارد در زیر ذکر شده است
RL78 گزینه
-msim
پیوندهایی در کتابخانه های هدف اضافی برای پشتیبانی از عملیات در یک شبیه ساز.
-mmul=هیچ
-mmul=g13
-mmul=rl78
نوع پشتیبانی از ضرب سخت افزار مورد استفاده را مشخص می کند. پیش فرض است
"none" که از توابع ضرب نرم افزار استفاده می کند. گزینه "g13" برای
ضرب/تقسیم سخت افزار جانبی فقط در اهداف RL78/G13. گزینه "rl78".
برای ضرب استاندارد سخت افزار تعریف شده در کتابچه راهنمای نرم افزار RL78 است.
آی بی ام RS / 6000 و PowerPC گزینه
اینها -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-cmbb
-mmfpgpr
-mno-mfpgpr
-mhard-dfp
-mno-hard-dfp
شما از این گزینه ها استفاده می کنید تا مشخص کنید کدام دستورالعمل ها در پردازنده شما موجود است
استفاده می کنند. مقدار پیش فرض این گزینه ها هنگام پیکربندی GCC تعیین می شود.
مشخص کردن -mcpu=cpu_type مشخصات این گزینه ها را نادیده می گیرد. ما
توصیه می کنیم از -mcpu=cpu_type گزینه به جای گزینه های ذکر شده در بالا.
تعیین -mpowerpc-gpopt به GCC اجازه می دهد تا از معماری اختیاری PowerPC استفاده کند
دستورالعمل ها در گروه هدف عمومی، از جمله جذر ممیز شناور.
تعیین -mpowerpc-gfxopt به GCC اجازه می دهد تا از معماری اختیاری PowerPC استفاده کند
دستورالعمل ها در گروه Graphics، از جمله انتخاب ممیز شناور.
La -mmfcrf گزینه به GCC اجازه می دهد تا حرکت را از قسمت ثبت شرط ایجاد کند
دستورالعمل اجرا شده بر روی پردازنده POWER4 و سایر پردازنده هایی که از آن پشتیبانی می کنند
معماری PowerPC V2.01. در -mpopcntb گزینه به GCC اجازه می دهد تا popcount را ایجاد کند
و دستورالعمل تخمین متقابل FP با دقت دوگانه بر روی POWER5 پیاده سازی شده است
پردازنده و سایر پردازنده هایی که از معماری PowerPC V2.02 پشتیبانی می کنند. در
-mpopcntd این گزینه به GCC اجازه می دهد تا دستور popcount پیاده سازی شده در را ایجاد کند
پردازنده POWER7 و سایر پردازنده هایی که از معماری PowerPC V2.06 پشتیبانی می کنند.
La -mfprnd این گزینه به GCC اجازه می دهد تا دستورات دور FP به عدد صحیح را تولید کند
بر روی پردازنده POWER5+ و سایر پردازنده هایی که از PowerPC پشتیبانی می کنند پیاده سازی شده است
معماری V2.03. در -mcmpb این گزینه به GCC اجازه می دهد تا بایت های مقایسه را تولید کند
دستورالعمل اجرا شده بر روی پردازنده POWER6 و سایر پردازنده هایی که از آن پشتیبانی می کنند
معماری PowerPC V2.05. در -mmfpgpr گزینه به GCC اجازه می دهد تا حرکت FP را ایجاد کند
به/از دستورالعمل های ثبت همه منظوره که بر روی پردازنده POWER6X اجرا شده است و
پردازنده های دیگری که از معماری توسعه یافته PowerPC V2.05 پشتیبانی می کنند. در -mhard-dfp
این گزینه به GCC اجازه می دهد تا دستورالعمل های ممیز شناور اعشاری اجرا شده در آن را تولید کند
برخی از پردازنده های POWER
La -mpowerpc64 این گزینه به GCC اجازه می دهد تا دستورالعمل های 64 بیتی اضافی را ایجاد کند
در معماری کامل PowerPC64 یافت می شوند و GPR ها را به عنوان 64 بیتی دو کلمه ای در نظر می گیرند
مقادیر. GCC به طور پیش فرض روی است -mno-powerpc64.
-mcpu=cpu_type
نوع معماری، استفاده از ثبت، و پارامترهای زمان بندی دستورالعمل را برای
ماشین تایپ cpu_type. مقادیر پشتیبانی شده برای cpu_type هستند 401, 403, 405, 405 فریم در ثانیه, 440,
440 فریم در ثانیه, 464, 464 فریم در ثانیه, 476, 476 فریم در ثانیه, 505, 601, 602, 603, 603e, 604, 604e, 620, 630, 740,
7400, 7450, 750, 801, 821, 823, 860, 970, 8540, a2, e300c2, e300c3, e500mc, e500mc64,
e5500, e6500, ec603e, G3, G4, G5, تیتان, 3, 4, 5, power5+, 6,
قدرت 6x, 7, 8, پاور پی سی, powerpc64, powerpc64leو rs64.
-MCPU = PowerPC, -mcpu=powerpc64و -mcpu=powerpc64le PowerPC خالص 32 بیتی را مشخص کنید
(اعم از اندیان)، پاور پی سی اندین بزرگ 64 بیتی و پاور پی سی اندین کوچک 64 بیتی
انواع ماشین های معماری، با یک مدل پردازشگر عمومی مناسب که برای آن در نظر گرفته شده است
اهداف برنامه ریزی
گزینه های دیگر یک پردازنده خاص را مشخص می کنند. کد تولید شده تحت آن گزینه ها
روی آن پردازنده به بهترین شکل اجرا می شود و ممکن است اصلاً روی پردازنده های دیگر اجرا نشود.
La -mcpu گزینه ها به طور خودکار گزینه های زیر را فعال یا غیرفعال می کنند:
-مالتیفک -mfprnd -mhard-float -mmfcrf -چندین -mpopcntb -mpopcntd -mpowerpc64
-mpowerpc-gpopt -mpowerpc-gfxopt چند شناور -mdouble-float -msimple-fpu -mstring
-mmulhw -mdlmzb -mmfpgpr -mvsx -mcrypto -mdirect-move -power8-fusion
-power8-وکتور -mquad-memory -mquad-memory-atomic
گزینه های خاص تنظیم شده برای هر CPU خاص بین نسخه های کامپایلر متفاوت است.
بسته به اینکه به نظر می رسد چه تنظیماتی کد بهینه را برای آن CPU تولید می کند. آن را نمی کند
لزوماً منعکس کننده قابلیت های سخت افزار واقعی است. اگر مایل به تنظیم یک
گزینه فردی به یک مقدار خاص، می توانید آن را بعد از آن مشخص کنید -mcpu گزینه،
پسندیدن -MCPU = 970 -mno-altivec.
در AIX، -مالتیفک و -mpowerpc64 گزینه ها توسط این فعال یا غیرفعال نمی شوند -mcpu
در حال حاضر گزینه ای است زیرا AIX پشتیبانی کاملی از این گزینه ها ندارد. شما ممکن است
اگر مطمئن هستید که در شما کار می کند، همچنان آنها را به صورت جداگانه فعال یا غیرفعال کنید
محیط زیست است.
-mtune=cpu_type
پارامترهای زمانبندی دستورالعمل را برای نوع ماشین تنظیم کنید cpu_type، اما تنظیم نکنید
نوع معماری یا استفاده از ثبت نام، به عنوان -mcpu=cpu_type میکند. همان مقادیر برای
cpu_type برای استفاده می شود -mtune با توجه به -mcpu. اگر هر دو مشخص شده باشند، کد تولید می شود
از معماری و ثبات های تنظیم شده توسط استفاده می کند -mcpu، اما پارامترهای زمانبندی تنظیم شده توسط
-mtune.
-mcmodel=small
کد PowerPC64 را برای مدل کوچک ایجاد کنید: TOC به 64k محدود شده است.
-mcmodel=متوسط
کد PowerPC64 را برای مدل متوسط ایجاد کنید: TOC و سایر داده های استاتیک ممکن است بالا باشند
در مجموع به اندازه 4G.
-mcmodel=بزرگ
کد PowerPC64 را برای مدل بزرگ ایجاد کنید: اندازه TOC ممکن است تا 4G باشد. دیگر
داده ها و کد فقط توسط فضای آدرس 64 بیتی محدود می شود.
-مالتیفک
-mno-altivec
کدی را ایجاد کنید که از دستورالعمل های AltiVec استفاده می کند (از آن استفاده نمی کند) و همچنین استفاده را فعال کنید
از توابع داخلی که امکان دسترسی مستقیم بیشتری به مجموعه دستورالعمل AltiVec را فراهم می کند.
همچنین ممکن است نیاز به تنظیم داشته باشید -mabi=altivec برای تنظیم ABI فعلی با AltiVec ABI
پیشرفت ها
چه زمانی -مالتیفک استفاده می شود، به جای -maltivec=le or -maltivec=be، ترتیب عنصر
برای Altivec ذاتی مانند "vec_splat"، "vec_extract"، و "vec_insert" مطابقت دارند
ترتیب عناصر آرایه مربوط به endianness هدف. یعنی عنصر
صفر سمت چپ ترین عنصر یک ثبات برداری را هنگام هدف قرار دادن یک big-endian مشخص می کند
پلتفرم، و سمت راست ترین عنصر را در یک ثبات برداری هنگام هدف قرار دادن a شناسایی می کند
پلت فرم کمی اندین
-maltivec=be
بدون توجه به اینکه آیا دستورات Altivec را با استفاده از ترتیب عناصر big-endian ایجاد کنید
هدف بزرگ یا کوچک اندین است. این پیشفرض هنگام هدف قرار دادن یک big-endian است
پلت فرم.
ترتیب عناصر برای تفسیر اعداد عناصر در ذاتی Altivec مانند
"vec_splat"، "vec_extract"، و "vec_insert". به طور پیش فرض، این ها با آرایه مطابقت دارند
ترتیب عنصر مربوط به endianness برای هدف.
-maltivec=le
بدون توجه به اینکه آیا دستورات Altivec را با استفاده از ترتیب عناصر کمی اندین ایجاد کنید
هدف بزرگ یا کوچک اندین است. این پیشفرض هنگام هدف قرار دادن کمی است
پلت فرم اندیان این گزینه در حال حاضر هنگام هدف قرار دادن یک big-endian نادیده گرفته می شود
پلت فرم.
ترتیب عناصر برای تفسیر اعداد عناصر در ذاتی Altivec مانند
"vec_splat"، "vec_extract"، و "vec_insert". به طور پیش فرض، این ها با آرایه مطابقت دارند
ترتیب عنصر مربوط به endianness برای هدف.
-mvrsave
-mno-vrsave
هنگام تولید کد AltiVec دستورالعمل های VRSAVE را ایجاد کنید.
-mgen-cell-microcode
دستورالعمل های میکروکد سلول را ایجاد کنید.
-mwarn-cell-microcode
هنگامی که یک دستورالعمل میکروکد سلولی منتشر می شود، هشدار دهید. نمونه ای از میکروکد سلولی
دستورالعمل یک تغییر متغیر است.
-msecure-plt
کدی را ایجاد کنید که اجازه می دهد ld و ld. بنابراین برای ساخت فایل های اجرایی و کتابخانه های مشترک با
بخش های غیر قابل اجرا "plt" و ".got". این یک گزینه PowerPC 32 بیتی SYSV ABI است.
-mbss-plt
کدی را ایجاد کنید که از بخش BSS ".plt" استفاده می کند ld. بنابراین را پر می کند و به ".plt" نیاز دارد
و بخش های ".got" که هم قابل نوشتن و هم قابل اجرا هستند. این یک PowerPC 32 بیتی است
گزینه SYSV ABI.
-میزل
-mno-isel
این سوئیچ تولید دستورالعمل های ISEL را فعال یا غیرفعال می کند.
-misel=بله خیر
این سوئیچ منسوخ شده است. استفاده کنید -میزل و -mno-isel به جای آن.
-mspe
-mno-spe
این سوئیچ تولید دستورالعمل های SPE simd را فعال یا غیرفعال می کند.
-آسیب شده
-mno-paired
این سوئیچ تولید دستورالعمل های PAIRED simd را فعال یا غیرفعال می کند.
-mspe=بله خیر
این گزینه منسوخ شده است. استفاده کنید -mspe و -mno-spe به جای آن.
-mvsx
-mno-vsx
کدی را ایجاد کنید که از دستورالعمل های برداری/اسکالر (VSX) و همچنین استفاده می کند (از آن استفاده نمی کند).
استفاده از توابع داخلی را فعال کنید که امکان دسترسی مستقیم بیشتری به VSX را فراهم می کند
مجموعه دستورالعمل.
-mcrypto
-mno-crypto
استفاده (غیرفعال) از توابع داخلی را فعال کنید که امکان دسترسی مستقیم به
دستورالعمل های رمزنگاری که در نسخه 2.07 PowerPC ISA اضافه شده است.
-mdirect-move
-mno-direct-move
کدی را ایجاد کنید که از دستورالعمل ها برای جابجایی داده ها بین کدها استفاده کند (از آن استفاده نمی کند).
ثباتهای هدف عمومی و ثباتهای برداری/اسکالر (VSX) که به آن اضافه شدهاند
نسخه 2.07 PowerPC ISA.
-power8-fusion
-mno-power8-fusion
کدی را ایجاد کنید که برخی از عملیات اعداد صحیح را در مجاورت خود نگه می دارد (حفظ نمی کند) به طوری که
دستورالعمل ها را می توان در پردازنده های power8 و جدیدتر با هم ترکیب کرد.
-power8-وکتور
-mno-power8-وکتور
کدی را ایجاد کنید که از دستورالعمل های برداری و اسکالر استفاده می کند (استفاده نمی کند).
در نسخه 2.07 PowerPC ISA اضافه شده است. همچنین استفاده از توابع داخلی را فعال کنید
که امکان دسترسی مستقیم بیشتری به دستورالعمل های برداری را فراهم می کند.
-mquad-memory
-mno-quad-memory
کدی را ایجاد کنید که از دستورالعملهای حافظه چهار کلمه غیراتمی استفاده میکند (از آن استفاده نمیکند).
La -mquad-memory گزینه نیاز به استفاده از حالت 64 بیتی دارد.
-mquad-memory-atomic
-mno-quad-memory-atomic
کدی را ایجاد کنید که از دستورالعمل های حافظه چهار کلمه اتمی استفاده می کند (از آن استفاده نمی کند). در
-mquad-memory-atomic گزینه نیاز به استفاده از حالت 64 بیتی دارد.
-mfloat-gprs=بله / تک / دو / خیر
-mfloat-gprs
این سوئیچ تولید عملیات ممیز شناور را فعال یا غیرفعال می کند
ثبت های همه منظوره برای معماری هایی که از آن پشتیبانی می کنند.
بحث و جدل بله or تنها استفاده از نقطه شناور تک دقیق را امکان پذیر می کند
عملیات.
بحث و جدل دو برابر امکان استفاده از ممیز شناور با دقت تک و دوگانه را فراهم می کند
عملیات.
بحث و جدل نه عملیات ممیز شناور در رجیسترهای همه منظوره را غیرفعال می کند.
این گزینه در حال حاضر فقط در MPC854x موجود است.
-32
-64
ایجاد کد برای محیط های 32 بیتی یا 64 بیتی اهداف داروین و SVR4 (شامل
گنو/لینوکس). محیط 32 بیتی int، long و pointer را روی 32 بیت و
کدی را تولید می کند که روی هر نوع PowerPC اجرا می شود. محیط 64 بیتی تنظیم می شود
32 بیت و طولانی و اشاره گر به 64 بیت، و کد برای PowerPC64 تولید می کند.
-mpowerpc64.
-mfull-toc
-mno-fp-in-toc
-mno-sum-in-toc
-mminimal-toc
تغییر نسل TOC (جدول مطالب)، که برای هر ایجاد شده است
فایل اجرایی. در -mfull-toc گزینه به طور پیش فرض انتخاب شده است. در آن صورت، GCC
حداقل یک ورودی TOC را برای هر مرجع متغیر غیر خودکار منحصر به فرد در داخل اختصاص می دهد
برنامه شما GCC همچنین ثابت های ممیز شناور را در TOC قرار می دهد. با این حال، تنها
16,384 ورودی در TOC موجود است.
اگر یک پیام خطای پیوند دهنده دریافت کردید که می گوید شما در دسترس را سرریز کرده اید
فضای 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 فضای خالی دارید،
مشخص كردن -mminimal-toc بجای. این گزینه باعث می شود GCC تنها یک ورودی TOC برای آن ایجاد کند
هر فایل وقتی این گزینه را مشخص می کنید، GCC کدی را تولید می کند که کندتر و بزرگتر است
اما از فضای TOC بسیار کمی استفاده می کند. ممکن است بخواهید فقط از این گزینه استفاده کنید
فایل هایی که حاوی کدهایی هستند که کمتر اجرا می شوند.
-maix64
-maix32
AIX ABI 64 بیتی و قرارداد فراخوانی را فعال کنید: نشانگرهای 64 بیتی، نوع "طولانی" 64 بیتی، و
زیرساخت های مورد نیاز برای حمایت از آنها. مشخص کردن -maix64 دلالت دارد -mpowerpc64,
در حین -maix32 ABI 64 بیتی را غیرفعال می کند و به این معنی است -mno-powerpc64. GCC به طور پیش فرض روی است
-maix32.
-mxl-compat
-MNO-XL-COMPAT
هنگام استفاده از AIX- کدی تولید کنید که با معنایی کامپایلر IBM XL مطابقت بیشتری داشته باشد.
ABI سازگار ارسال آرگومان های ممیز شناور به توابع نمونه سازی شده فراتر از
علاوه بر آرگومان های FPR، ناحیه ذخیره (RSA) را در پشته ثبت کنید. فرض نکنید
مهمترین دوبل در مقدار دو برابر طولانی 128 بیتی به درستی گرد میشود
مقایسه مقادیر و تبدیل به دو برابر. از نام نمادهای XL برای دوبل طولانی استفاده کنید
روال های پشتیبانی
کنوانسیون فراخوانی AIX تمدید شد اما در ابتدا برای رسیدگی به یک سند ثبت نشد
مورد مبهم K&R C فراخوانی تابعی که آدرس آرگومان های خود را با آن می گیرد
آرگومان های کمتر از آنچه اعلام شده است. کامپایلرهای IBM XL به آرگومان های ممیز شناور دسترسی دارند که
وقتی زیرروال بدون کامپایل می شود، در RSA از پشته قرار نمی گیرد
بهینه سازی. زیرا همیشه ذخیره آرگومان های ممیز شناور در پشته است
ناکارآمد و به ندرت مورد نیاز است، این گزینه به طور پیش فرض فعال نیست و فقط فعال است
هنگام فراخوانی زیربرنامه های کامپایل شده توسط کامپایلرهای IBM XL بدون بهینه سازی ضروری است.
-mpe
پشتیبــانی آی بی ام RS / 6000 SP موازی محیط (پلی اتیلن). برنامه ای را که برای استفاده نوشته شده است پیوند دهید
ارسال پیام با کد راه اندازی ویژه برای فعال کردن برنامه برای اجرا. را
سیستم باید PE در محل استاندارد نصب شده باشد (/usr/lpp/ppe.poe/)، یا
مشخصات فایل باید با -specs = گزینه مناسب را مشخص کنید
محل دایرکتوری محیط موازی از رشته ها پشتیبانی نمی کند، بنابراین -mpe
گزینه و - نخ گزینه ناسازگار هستند
-بدخیم-طبیعی
قدرت بدخیم
در AIX، داروین 32 بیتی و گنو/لینوکس PowerPC 64 بیتی، این گزینه -بدخیم-طبیعی
تراز تعریف شده توسط ABI انواع بزرگتر، مانند دو برابر ممیز شناور را نادیده می گیرد.
در مرز مبتنی بر اندازه طبیعی آنها. گزینه قدرت بدخیم به GCC دستور می دهد
قوانین تراز مشخص شده توسط ABI را دنبال کنید. GCC به طور پیش فرض به تراز استاندارد است
در ABI تعریف شده است.
در داروین 64 بیتی، تراز طبیعی پیش فرض است و قدرت بدخیم نیست
پشتیبانی.
-msoft-float
-mhard-float
کدی را ایجاد کنید که از مجموعه ثبت ممیز شناور استفاده نمی کند. نرم افزار
در صورت استفاده از شبیه سازی ممیز شناور ارائه می شود -msoft-float گزینه، و عبور از
گزینه GCC هنگام پیوند.
چند شناور
-mdouble-float
کد برای عملیات ممیز شناور با دقت تک یا دوگانه ایجاد کنید.
-mdouble-float دلالت دارد چند شناور.
-msimple-fpu
دستورالعمل های "sqrt" و "div" را برای واحد ممیز شناور سخت افزاری تولید نکنید.
-mfpu=نام
نوع واحد ممیز شناور را مشخص کنید. مقادیر معتبر برای نام هستند sp_lite (معادل
چند شناور -msimple-fpu), dp_lite (معادل -mdouble-float -msimple-fpu),
sp_full (معادل چند شناور)، و dp_full (معادل -mdouble-float).
-mxilinx-fpu
بهینه سازی واحد ممیز شناور را در Xilinx PPC 405/440 انجام دهید.
-چندین
-mno-چند
کدی را ایجاد کنید که از بارگیری دستورالعمل های چند کلمه ای استفاده می کند (استفاده نمی کند).
دستورالعمل های چند کلمه ای را ذخیره کنید. این دستورالعمل ها به طور پیش فرض در ایجاد می شوند
سیستم های POWER، و در سیستم های PowerPC تولید نمی شوند. استفاده نکن -چندین در کمی -
سیستمهای PowerPC endian، زیرا این دستورالعملها زمانی که پردازنده در دسترس است کار نمیکنند
حالت کمی اندین استثناها PPC740 و PPC750 هستند که این موارد را مجاز می دانند
دستورالعمل ها در حالت کمی اندین
-mstring
-mno-string
کدی را ایجاد کنید که از دستورالعمل های رشته بارگیری و ذخیره استفاده می کند (از آن استفاده نمی کند).
دستورات کلمه رشته ای برای ذخیره چندین رجیستر و انجام حرکات بلوک کوچک. اینها
دستورالعمل ها به طور پیش فرض در سیستم های POWER تولید می شوند و در PowerPC تولید نمی شوند
سیستم های. استفاده نکن -mstring در سیستمهای PowerPC کوچک، از آن زمان
دستورالعمل ها زمانی که پردازنده در حالت کمی اندین است کار نمی کند. استثناها
PPC740 و PPC750 هستند که این دستورالعمل ها را در حالت اندک اندین مجاز می کنند.
-به روز رسانی
-mno-update
کدی را ایجاد کنید که از بارگیری استفاده کند (استفاده نمی کند) یا دستورالعمل هایی را ذخیره می کند که به روز رسانی می شوند
ثبت پایه به آدرس محل حافظه محاسبه شده. این دستورالعمل ها
به صورت پیش فرض تولید می شوند. اگر استفاده می کنید -mno-update، یک پنجره کوچک بین
زمانی که نشانگر پشته به روز می شود و آدرس فریم قبلی است
ذخیره شده، به این معنی است که کدی که فریم پشته را از طریق وقفه ها یا سیگنال ها عبور می دهد
دریافت داده های خراب
-mavoid-index-addresss
-mno-ouced-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
کدی را ایجاد کنید که از جستجوی رشته ای استفاده می کند (از آن استفاده نمی کند). dlmzb دستورالعمل در مورد IBM
پردازنده های 405، 440، 464 و 476. این دستورالعمل به طور پیش فرض زمانی تولید می شود که
هدف قرار دادن آن پردازنده ها
mno-bit-align
-bit-align
در سیستم V.4 و سیستمهای PowerPC تعبیهشده، ساختارها و اتحادیهها را مجبور نمیکنند
که حاوی فیلدهای بیتی هستند که باید با نوع پایه فیلد بیتی تراز شوند.
برای مثال، بهطور پیشفرض ساختاری حاوی چیزی جز 8 فیلد بیتی «بدون علامت» است
طول 1 با مرز 4 بایت تراز شده و اندازه آن 4 بایت است. با استفاده از
mno-bit-align، ساختار با یک مرز 1 بایت تراز شده است و اندازه آن 1 بایت است.
-mno-strict-align
-mstrict-align
در سیستم V.4 و سیستمهای PowerPC تعبیهشده، این حافظه غیرهمتراز را فرض نمیکنند
مراجع توسط سیستم مدیریت می شود.
-قابل جابجایی
-mno-replaceable
کدی را ایجاد کنید که اجازه می دهد (اجازه نمی دهد) یک فایل اجرایی استاتیک به a منتقل شود
آدرس های مختلف در زمان اجرا یک لودر سیستم PowerPC جاسازی شده ساده باید
کل محتویات "got2." و مکان های 4 بایتی فهرست شده در ".fixup" را جابجا کنید.
بخش، جدولی از آدرس های 32 بیتی ایجاد شده توسط این گزینه. برای این کار، همه
اشیاء مرتبط با هم باید با آنها کامپایل شوند -قابل جابجایی or -mrelocatable-lib.
-قابل جابجایی کد پشته را با مرز 8 بایت تراز می کند.
-mrelocatable-lib
-mno-relocatable-lib
پسندیدن -قابل جابجایی, -mrelocatable-lib یک بخش ".fixup" را ایجاد می کند تا ثابت کند
فایل های اجرایی باید در زمان اجرا جابه جا شوند، اما -mrelocatable-lib استفاده نمی کند
تراز پشته کوچکتر از -قابل جابجایی. اشیاء کامپایل شده با -mrelocatable-lib ممکن است
با اشیاء کامپایل شده با هر ترکیبی از -قابل جابجایی گزینه.
-mno-toc
-mtoc
در سیستم V.4 و سیستمهای PowerPC تعبیهشده، فرض نمیکنند که ثبات 2 شامل
یک اشاره گر به یک منطقه جهانی که به آدرس های استفاده شده در برنامه اشاره می کند.
-کم
-mlittle-endian
در System V.4 و سیستمهای PowerPC تعبیهشده، کدهای پردازنده را در اندکی کامپایل میکنند.
حالت اندیان در -mlittle-endian گزینه همان است -کم.
-بزرگ
-mbig-endian
در System V.4 و سیستمهای PowerPC تعبیهشده، کدهای پردازنده را در ابعاد بزرگ کامپایل میکنند.
حالت اندیان در -mbig-endian گزینه همان است -بزرگ.
-mdynamic-no-pic
در سیستمهای Darwin و Mac OS X، کد را کامپایل کنید تا قابل جابهجایی نباشد، اما همین
مراجع خارجی آن قابل جابجایی هستند. کد به دست آمده برای
برنامه ها، اما نه کتابخانه های مشترک.
-msingle-pic-base
رجیستر مورد استفاده برای آدرس دهی PIC را به عنوان فقط خواندنی در نظر بگیرید، نه اینکه آن را در آن بارگیری کنید
مقدمه برای هر تابع سیستم زمان اجرا مسئول اولیه سازی این است
قبل از شروع اجرا با یک مقدار مناسب ثبت نام کنید.
-mprioritize-restricted-insns=اولویت
این گزینه اولویتی را که به Slot-Slot محدود شده اختصاص داده شده است را کنترل می کند
دستورالعمل ها در طول پاس برنامه ریزی دوم. بحث و جدل اولویت ارزش را می گیرد
0, 1، یا 2 برای اختصاص دادن هیچ، بالاترین یا دومین اولویت (به ترتیب) به
دستورالعمل های محدود شده در اسلات اعزام
-msched-costly-dep=نوع_وابستگی
این گزینه کنترل میکند که کدام وابستگیها در طول مدت توسط هدف پرهزینه در نظر گرفته شوند
زمان بندی آموزش بحث و جدل نوع_وابستگی یکی از موارد زیر را می گیرد
ارزش های:
نه هیچ وابستگی پرهزینه نیست
تمام همه وابستگی ها پرهزینه هستند.
true_store_to_load
وابستگی واقعی از فروشگاه به بار پرهزینه است.
store_to_load
هر گونه وابستگی از فروشگاه به بار پرهزینه است.
عدد
هر وابستگی که تاخیر آن بیشتر یا مساوی باشد عدد پرهزینه است
-minsert-sched-nops=طرح
این گزینه کنترل میکند که کدام طرح درج NOP در زمانبندی دوم استفاده شود
عبور. بحث و جدل طرح یکی از مقادیر زیر را می گیرد:
نه NOP ها را وارد نکنید.
لایی با توجه به
گروه بندی زمانبندی
regroup_exact
NOPها را وارد کنید تا ins های وابسته پرهزینه را به گروه های جداگانه وادار کنید. دقیقا درج کنید
طبق برآوردهای تخمین زده شده، به تعداد NOPها برای مجبور کردن یک گروه جدید به یک گروه جدید نیاز است
گروه بندی پردازنده
عدد
NOPها را وارد کنید تا ins های وابسته پرهزینه را به گروه های جداگانه وادار کنید. درج کنید عدد
NOPها برای اجبار یک insn به یک گروه جدید.
-mcall-sysv
در سیستم V.4 و سیستمهای PowerPC جاسازی شده کد را با استفاده از قراردادهای فراخوانی کامپایل میکنند
به پیش نویس مارس 1995 رابط باینری برنامه System V، PowerPC پایبند باشید
مکمل پردازنده این پیشفرض است مگر اینکه GCC را با استفاده از آن پیکربندی کرده باشید
powerpc-*-eabiaix.
-mcall-sysv-eabi
-mcall-eabi
هر دو را مشخص کنید -mcall-sysv و -میابی گزینه.
-mcall-sysv-noeabi
هر دو را مشخص کنید -mcall-sysv و -mno-eabi گزینه.
-mcall-aixdesc
در System V.4 و سیستمهای PowerPC تعبیهشده کد را برای سیستم عامل AIX کامپایل میکنند.
-mcall-linux
در System V.4 و سیستمهای PowerPC تعبیهشده کد را برای GNU مبتنی بر لینوکس کامپایل میکنند
سیستم.
-mcall-freebsd
در System 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 بایت را در رجیسترها برگردانید (همانطور که توسط SVR4 ABI مشخص شده است).
-mabi=ابی نوع
ABI فعلی را با یک پسوند خاص گسترش دهید یا آن را حذف کنید. معتبر
ارزشها هستند altivec, بدون جایگزین, حرکت, بدون سرعت, ibmlongdouble, ieeelongdouble, elfv1,
elfv2.
-mabi=spe
ABI فعلی را با پسوندهای SPE ABI گسترش دهید. این ABI پیش فرض را تغییر نمی دهد،
در عوض، پسوندهای SPE ABI را به ABI فعلی اضافه می کند.
-Mabi = NO-SPE
افزونه های Book-E SPE ABI را برای ABI فعلی غیرفعال کنید.
-mabi=ibmlongdouble
ABI فعلی را برای استفاده از IBM با دقت طولانی طولانی تغییر دهید. این یک پاور پی سی است
گزینه 32 بیتی SYSV ABI.
-mabi=ieeelongdouble
ABI فعلی را برای استفاده از IEEE با دقت طولانی طولانی تغییر دهید. این یک پاور پی سی است
گزینه 32 بیتی لینوکس ABI.
-mabi=elfv1
ABI فعلی را برای استفاده از ELFv1 ABI تغییر دهید. این ABI پیش فرض برای big-endian است
PowerPC لینوکس 64 بیتی. نادیده گرفتن ABI پیش فرض نیاز به پشتیبانی سیستم خاص دارد و
به احتمال زیاد به روش های دیدنی شکست خواهد خورد.
-mabi=elfv2
ABI فعلی را برای استفاده از ELFv2 ABI تغییر دهید. این ABI پیش فرض برای کوچک است
اندیان PowerPC لینوکس 64 بیتی. لغو ABI پیش فرض نیاز به سیستم خاصی دارد
حمایت می کند و احتمالاً به روش های دیدنی شکست می خورد.
- نمونه اولیه
-mno-نمونه اولیه
در سیستم V.4 و سیستمهای PowerPC تعبیهشده فرض میکنند که همه به آرگومان متغیر فراخوانی میشوند
توابع به درستی نمونه اولیه هستند. در غیر این صورت، کامپایلر باید یک دستورالعمل درج کند
قبل از هر فراخوانی غیر نمونه اولیه برای تنظیم یا پاک کردن بیت 6 از ثبت کد شرط
(CR) برای نشان دادن اینکه آیا مقادیر ممیز شناور در ممیز شناور ارسال می شوند یا خیر
در صورتی که تابع آرگومان های متغیر را بگیرد، ثبت می کند. با - نمونه اولیه، فقط تماس می گیرد
به نمونه اولیه توابع آرگومان متغیر، بیت را تنظیم یا پاک کنید.
-msim
در سیستم های 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.
-چاقوی میلو
در سیستم های PowerPC جاسازی شده، فرض کنید که ماژول راه اندازی فراخوانی شده است crt0.o و
کتابخانه های استاندارد C هستند libyk.a و libc.a.
-mvxworks
در System V.4 و سیستم های PowerPC جاسازی شده، مشخص کنید که در حال کامپایل کردن برای a هستید
سیستم VxWorks
-عضو
در سیستم های PowerPC تعبیه شده، تنظیم کنید PPC_EMB برای نشان دادن، در هدر ELF flags قرار دهید
که eabi جابجایی های طولانی استفاده می شود.
-میابی
-mno-eabi
در System V.4 و سیستمهای PowerPC تعبیهشده به Embedded (نمیپیوندند)
رابط باینری برنامه ها (EABI)، که مجموعه ای از تغییرات در سیستم است
مشخصات V.4. انتخاب کردن -میابی به این معنی است که پشته به اندازه 8 بایت تراز شده است
مرز، یک تابع "__eabi" از "main" فراخوانی می شود تا محیط EABI را تنظیم کند.
و -msdata گزینه می تواند از "r2" و "r13" برای اشاره به دو داده کوچک جداگانه استفاده کند
مناطق. انتخاب کردن -mno-eabi به این معنی است که پشته با یک مرز 16 بایتی تراز شده است، نه
تابع مقداردهی اولیه EABI از "main" فراخوانی می شود -msdata گزینه فقط استفاده می کند
"r13" برای اشاره به یک منطقه داده کوچک. را -میابی گزینه به طور پیش فرض روشن است اگر شما
GCC را با استفاده از یکی از تنظیمات پیکربندی کرد powerpc*-*-eabi* گزینه.
-msdata=eabi
در System V.4 و سیستمهای PowerPC تعبیهشده، «const» اولیه کوچک جهانی و
داده های استاتیک در sdata2 بخش، که با ثبات "r2" به آن اشاره می کند. کوچک قرار دهید
داده های سراسری و استاتیک غیر "const" اولیه در .sdata بخش، که اشاره شده است
با ثبت "r13". داده های جهانی و ایستا کوچک را که مقداردهی اولیه نشده اند در آن قرار دهید .sbss
بخش، که در مجاورت است .sdata بخش. -msdata=eabi گزینه است
ناسازگار با -قابل جابجایی گزینه. -msdata=eabi گزینه را نیز تنظیم می کند
-عضو گزینه.
-msdata=sysv
در System V.4 و سیستمهای PowerPC تعبیهشده، دادههای کوچک جهانی و ثابت را در آن قرار دهید
.sdata بخش، که توسط ثبات "r13" به آن اشاره شده است. جهانی کوچک بدون مقدار اولیه قرار دهید
و داده های استاتیک در .sbss بخش، که در مجاورت است .sdata بخش.
-msdata=sysv گزینه ناسازگار با -قابل جابجایی گزینه.
-msdata=پیشفرض
-msdata
در سیستم V.4 و سیستم های PowerPC تعبیه شده، اگر -میابی استفاده می شود، کد را کامپایل کنید
as -msdata=eabi، در غیر این صورت کد مشابه را کامپایل کنید -msdata=sysv.
-msdata=داده
در System V.4 و سیستمهای PowerPC تعبیهشده، دادههای جهانی کوچک را در آن قرار دهید .sdata
بخش. داده های جهانی کوچک و بدون مقدار اولیه را در آن قرار دهید .sbss بخش. استفاده نکن
با این حال، "r13" را برای آدرس دادن به داده های کوچک ثبت کنید. این رفتار پیش فرض است مگر اینکه
دیگر -msdata گزینه ها استفاده می شود.
-msdata=هیچ
-mno-sdata
در سیستمهای PowerPC تعبیهشده، تمام دادههای جهانی و استاتیک اولیه را در آن قرار دهید .داده ها
بخش، و تمام داده های اولیه در .bss بخش.
-mblock-move-inline-limit=تعداد
درون خطی همه حرکتهای بلوک (مانند تماسهای "memcpy" یا کپیهای ساختاری) کمتر از یا
مساوی با تعداد بایت ها حداقل مقدار برای تعداد 32 بایت در اهداف 32 بیتی و 64 است
بایت در اهداف 64 بیتی مقدار پیش فرض برای هدف خاص است.
-G تعداد
در سیستمهای PowerPC تعبیهشده، موارد کلی و ثابت را کمتر یا مساوی قرار دهید تعداد
بایت به داده های کوچک یا بخش های BSS به جای داده های معمولی یا بخش BSS.
به طور پیش فرض، تعداد 8 است -G تعداد سوئیچ نیز به لینکر ارسال می شود. همه ماژول ها
باید با همان کامپایل شود -G تعداد ارزش.
-mregnames
-mno-regnames
در سیستم V.4 و سیستمهای PowerPC تعبیهشده، نامهای رجیستر را منتشر نمیکنند
خروجی زبان اسمبلی با استفاده از فرم های نمادین
-mlongcall
-mno-longcall
به طور پیش فرض فرض کنید که همه تماس ها دور هستند به طوری که طولانی تر و گران تر است
دنباله فراخوانی مورد نیاز است. این برای تماس های بیشتر از 32 مگابایت مورد نیاز است
(33,554,432 بایت) از مکان فعلی. یک تماس کوتاه ایجاد می شود اگر
کامپایلر می داند که تماس نمی تواند آنقدر دور باشد. این تنظیم را می توان با آن لغو کرد
ویژگی تابع "shortcall" یا با "#pragma تماس طولانی(0) ".
برخی از لینکرها قادر به تشخیص تماس های خارج از محدوده و تولید کد چسب هستند
پرواز. در این سیستم ها، تماس های طولانی غیر ضروری هستند و کد کندتری تولید می کنند. مانند
در این نوشته، پیوند دهنده AIX می تواند این کار را انجام دهد، و همچنین پیوند دهنده گنو برای PowerPC/64. آی تی
برنامه ریزی شده است که این ویژگی را برای سیستم های PowerPC 32 بیتی نیز به لینکر گنو اضافه کند.
در سیستمهای داروین/PPC، "#pragma longcall" "jbsr callee, L42" و یک شاخه
جزیره (کد چسب). دو آدرس هدف نشان دهنده تماس گیرنده و شعبه است
جزیره پیوند دهنده داروین/PPC آدرس اول را ترجیح می دهد و یک "bl callee" تولید می کند.
اگر دستور PPC "bl" مستقیماً به تماس گیرنده برسد. در غیر این صورت، پیوند دهنده
"bl L42" را برای فراخوانی جزیره شاخه تولید می کند. جزیره شعبه به
بدنه تابع فراخوانی؛ آدرس کامل 32 بیتی تماس گیرنده را محاسبه می کند و
به سمت آن می پرد.
در سیستم های Mach-O (داروین)، این گزینه کامپایلر را به چسب هدایت می کند.
هر تماس مستقیم، و پیوند دهنده داروین تصمیم می گیرد که از آن استفاده کند یا کنار بگذارد.
در آینده، GCC ممکن است تمام مشخصات تماس طولانی را نادیده بگیرد، زمانی که پیوند دهنده شناخته شده است
تولید چسب
-mtls-نشانگرها
-mno-tls-نشانگرها
علامتگذاری (علامتگذاری نکنید) تماسهای "__tls_get_addr" را با تغییر مکان که تابع را مشخص میکند
بحث و جدل. جابجایی به پیوند دهنده اجازه می دهد تا به طور قابل اعتمادی فراخوانی تابع را با آن مرتبط کند
دستورالعمل های تنظیم آرگومان برای بهینه سازی TLS، که به نوبه خود اجازه می دهد GCC بهتر شود
ترتیب را برنامه ریزی کنید
- نخ
پشتیبانی از multithreading را با نخ ها کتابخانه این گزینه پرچم ها را برای
هم پیش پردازنده و هم پیوند دهنده.
-مندی
-mno-recip
این گزینه استفاده از تخمین متقابل و تخمین ریشه مربع متقابل را امکان پذیر می کند
دستورالعمل ها با مراحل اضافی نیوتن رافسون برای افزایش دقت به جای
انجام یک تقسیم یا جذر و تقسیم برای آرگومان های ممیز شناور. شما باید استفاده کنید
la سریع-ریاضی گزینه هنگام استفاده -مندی (یا حداقل -بهینهسازیهای ریاضی و سرگرمکننده,
-فقط ریاضی محدود, -مقاومتی-ریاضی و -fno-به دام انداختن-ریاضی). توجه داشته باشید که در حالی که
توان عملیاتی دنباله به طور کلی بالاتر از توان عملیاتی غیر
دستورالعمل متقابل، دقت دنباله را می توان تا 2 اولپ کاهش داد
(یعنی معکوس 1.0 برابر است با 0.99999994) برای ریشه های مربع متقابل.
-mrecip=انتخاب کردن
این گزینه کنترل می کند که کدام دستورالعمل های برآورد متقابل ممکن است استفاده شود. انتخاب کردن هست یک
فهرستی از گزینههای جدا شده با کاما، که ممکن است قبل از آن یک "!" برای معکوس کردن گزینه:
"all": فعال کردن تمام دستورالعمل های تخمینی، "پیش فرض": فعال کردن دستورالعمل های پیش فرض،
معادل -مندی، "none": غیرفعال کردن همه دستورالعمل های تخمینی، معادل
-mno-recip; "div": دستورالعمل های تقریب متقابل را برای هر دو واحد فعال کنید
و دقت مضاعف؛ "divf": تقریب متقابل تک دقیق را فعال کنید
دستورالعمل ها؛ "divd": تقریب متقابل با دقت دوگانه را فعال کنید
دستورالعمل ها؛ "rsqrt": دستورالعمل های تقریب ریشه مربع متقابل را فعال کنید
برای هر دو دقت تک و دو. "rsqrtf": فعال کردن تک دقیق متقابل
دستورالعمل تقریب ریشه مربع؛ "rsqrtd": دقت دوگانه را فعال کنید
دستورالعمل تقریب متقابل ریشه مربع؛
به عنوان مثال ، -mrecip=all،!rsqrtd همه برآوردهای متقابل را فعال می کند
دستورالعمل ها، به جز دستورالعمل های "FRSQRTE"، "XSRSQRTEDP" و "XVRSQRTEDP"
که محاسبات دوطرفه دوطرفه متقابل را انجام می دهند.
-mrecip-precision
-MNO-REPRIAL-DRECISION
فرض کنید (فرض نکنید) که دستورالعمل های برآورد متقابل بالاتری را ارائه می دهد.
تخمین های دقیقی که توسط PowerPC ABI اجباری شده است. انتخاب کردن -mcpu=power6,
-mcpu=power7 or -mcpu=power8 به صورت خودکار انتخاب می کند -mrecip-precision. دوتایی
دستورالعملهای تخمین ریشه مربع دقیق بهطور پیشفرض در موارد کم تولید نمیشوند.
ماشینهای دقیق، زیرا تخمینی ارائه نمیکنند که بعد از سه همگرا شود
مراحل
-mveclibabi=نوع
نوع ABI را برای استفاده برای بردار کردن ذاتی با استفاده از یک کتابخانه خارجی مشخص می کند.
تنها نوع پشتیبانی شده در حال حاضر "انبوه" است که استفاده از IBM را مشخص می کند
کتابخانه های زیرسیستم شتاب ریاضی (MASS) برای بردارسازی ذاتی با استفاده از
کتابخانه های خارجی GCC در حال حاضر تماس هایی را به "acosd2"، "acosf4"، "acoshd2" ارسال می کند.
"acoshf4"، "asind2"، "asinf4"، "asinhd2"، "asinhf4"، "atan2d2"، "atan2f4"، "atand2"،
"atanf4"، "atanhd2"، "atanhf4"، "cbrtd2"، "cbrtf4"، "cosd2"، "cosf4"، "coshd2"،
"coshf4"، "erfcd2"، "erfcf4"، "erfd2"، "erff4"، "exp2d2"، "exp2f4"، "expd2"، "expf4"،
"expm1d2"، "expm1f4"، "hypotd2"، "hypotf4"، "lgammad2"، "lgammaf4"، "log10d2"،
"log10f4"، "log1pd2"، "log1pf4"، "log2d2"، "log2f4"، "logd2"، "logf4"، "powd2"،
"powf4"، "sind2"، "sinf4"، "sinhd2"، "sinhf4"، "sqrtd2"، "sqrtf4"، "tand2"، "tanf4"،
"tanhd2" و "tanhf4" هنگام تولید کد برای power7. هر دو -ftree-vectorize و
-بهینهسازیهای ریاضی و سرگرمکننده نیز باید فعال شود. کتابخانه های MASS باید باشند
در زمان پیوند مشخص شده است.
-مفریز
-mno-friz
زمانی که دستور "friz" را تولید کنید (تولید نکنید). -بهینهسازیهای ریاضی و سرگرمکننده
گزینه برای بهینه سازی گرد کردن مقادیر ممیز شناور به عدد صحیح 64 بیتی و
بازگشت به نقطه شناور اگر دستور "friz" همان مقدار را برگرداند
عدد ممیز شناور آنقدر بزرگ است که در یک عدد صحیح قرار نمی گیرد.
توابع -mpointers-to-nested
-mno-pointers-to-nested-functions
برای بارگیری رجیستر زنجیره ایستا کد تولید کنید (تولید نکنید)r11) چه زمانی
فراخوانی از طریق یک اشاره گر در سیستم های لینوکس AIX و 64 بیتی که در آن یک اشاره گر تابع
به یک توصیفگر 3 کلمه ای اشاره می کند که آدرس تابع، مقدار TOC که باید در آن بارگذاری شود را نشان می دهد
ثبت نام r2، و مقدار زنجیره ایستا در رجیستر بارگذاری شود r11.
توابع -mpointers-to-nested به طور پیش فرض روشن است. شما نمی توانید از طریق اشاره گر به تماس بگیرید
توابع تو در تو یا اشاره گر به توابع کامپایل شده در زبان های دیگری که از آن استفاده می کنند
اگر از زنجیره استاتیک استفاده کنید -mno-pointers-to-nested-functions.
-msave-toc-indirect
-mno-save-toc-intrect
برای ذخیره مقدار TOC در محل ذخیره شده پشته کد تولید کنید (تولید نکنید).
اگر تابع از طریق یک اشاره گر در AIX و 64 بیتی فراخوانی می کند، در مقدمه تابع
سیستم های لینوکس اگر مقدار TOC در مقدمه ذخیره نشود، درست قبل از آن ذخیره می شود
تماس از طریق اشاره گر در -mno-save-toc-intrect گزینه پیش فرض است.
-mcompat-align-parm
-mno-compat-align-parm
برای عبور پارامترهای ساختار با حداکثر تراز، کد تولید کنید (تولید نکنید).
64 بیت، برای سازگاری با نسخه های قدیمی GCC.
نسخه های قدیمی GCC (قبل از 4.9.0) به اشتباه پارامتر ساختار را تراز نکردند
در یک مرز 128 بیتی زمانی که آن ساختار حاوی عضوی است که به 128 بیت نیاز دارد
هم ترازی. این در نسخه های جدیدتر GCC تصحیح شده است. ممکن است از این گزینه استفاده شود
برای تولید کد سازگار با توابع کامپایل شده با نسخه های قدیمی تر
شورای همکاری خلیج فارس
La -mno-compat-align-parm گزینه پیش فرض است.
RX گزینه
این گزینه های خط فرمان برای اهداف RX تعریف شده اند:
-m64bit-دبل
-m32bit-دبل
نوع داده "دو" را 64 بیتی کنید (-m64bit-دبل) یا 32 بیت (-m32bit-دبل)
در اندازه. پیش فرض است -m32bit-دبل. توجه داشته باشید: سخت افزار ممیز شناور RX فقط کار می کند
در مقادیر 32 بیتی، به همین دلیل است که پیش فرض است -m32bit-دبل.
-fpu
-nofpu
را قادر می سازد (-fpu) یا غیرفعال می کند (-nofpu) استفاده از سخت افزار ممیز شناور RX. را
پیش فرض برای RX600 سری و غیر فعال برای RX200 سری.
دستورالعمل های ممیز شناور فقط برای مقادیر ممیز شناور 32 بیتی تولید می شوند.
با این حال، بنابراین سخت افزار FPU برای دو برابر استفاده نمی شود -m64bit-دبل گزینه است
استفاده شده.
توجه داشته باشید: اگر -fpu سپس گزینه فعال می شود -بهینهسازیهای ریاضی و سرگرمکننده نیز فعال است
بطور خودکار. این به این دلیل است که دستورالعمل های RX FPU خود ناامن هستند.
-mcpu=نام
نوع CPU RX مورد نظر را انتخاب می کند. در حال حاضر سه نوع پشتیبانی می شود
عمومی RX600 و RX200 سخت افزار سری و خاص RX610 CPU. پیش فرض است
RX600.
تنها تفاوت بین RX600 و RX610 این است که RX610 را پشتیبانی نمی کند
دستورالعمل "MVTIPL".
La RX200 سری واحد ممیز شناور سخت افزاری ندارد و غیره -nofpu فعال شده است
به طور پیش فرض زمانی که این نوع انتخاب شده است.
-MBIG-ANDIAN-DATA
داده های کوچک انددیان
داده ها (اما نه کد) را در قالب big-endian ذخیره کنید. پیش فرض است
داده های کوچک انددیان، یعنی برای ذخیره داده ها در قالب کمی اندین.
-msmall-data-limit =N
حداکثر اندازه را بر حسب بایت از متغیرهای سراسری و ثابتی که می توان قرار داد را مشخص می کند
به ناحیه داده های کوچک استفاده از ناحیه کوچک داده می تواند منجر به کوچکتر و سریعتر شود
کد، اما اندازه منطقه محدود است و اطمینان از آن به عهده برنامه نویس است
منطقه سرریز نمی شود همچنین زمانی که از ناحیه داده های کوچک یکی از RX ها استفاده می شود
ثبات ها (معمولا "r13") برای استفاده با اشاره به این ناحیه رزرو شده است، بنابراین خیر
مدت زمان بیشتری برای استفاده توسط کامپایلر در دسترس است. این می تواند منجر به کندتر و/یا بزرگتر شود
اگر متغیرها به جای نگه داشتن در این رجیستر، روی پشته فشار داده شوند، کد کنید.
توجه داشته باشید، متغیرهای رایج (متغیرهایی که مقداردهی اولیه نشده اند) و ثابت هستند
در ناحیه داده های کوچک قرار نمی گیرند زیرا به بخش های دیگر در آن اختصاص داده شده اند
خروجی قابل اجرا
مقدار پیش فرض صفر است که این ویژگی را غیرفعال می کند. توجه داشته باشید، این ویژگی نیست
به طور پیش فرض با سطوح بهینه سازی بالاتر فعال شده است (-O2 و غیره) به دلیل
اثرات مخرب بالقوه رزرو ثبت نام بستگی به برنامه نویس داره
برای آزمایش و کشف اینکه آیا این ویژگی برای برنامه آنها مفید است یا خیر. دیدن
شرح -بی حال گزینه ای برای توضیح نحوه ثبت نام واقعی
نگه دارید نشانگر منطقه داده کوچک انتخاب شده است.
-msim
-mno-sim
از زمان اجرا شبیه ساز استفاده کنید. پیشفرض استفاده از زمان اجرا مخصوص برد libgloss است.
-mas100-syntax
-mno-as100-syntax
هنگام تولید خروجی اسمبلر از نحوی استفاده کنید که با AS100 Renesas سازگار است.
مونتاژ کننده این نحو نیز می تواند توسط اسمبلر GAS مدیریت شود، اما برخی از آنها را دارد
محدودیت ها، بنابراین به طور پیش فرض تولید نمی شود.
-mmax-constant-size=N
حداکثر اندازه ثابت را بر حسب بایت مشخص می کند که می تواند به عنوان عملوند در استفاده شود
یک دستورالعمل RX اگرچه مجموعه دستورات RX ثابت هایی تا 4 را مجاز می کند
طول بایت ها برای استفاده در دستورالعمل ها، مقدار طولانی تر برابر با طولانی تر است
دستورالعمل بنابراین در برخی شرایط محدود کردن اندازه آن می تواند مفید باشد
ثابت هایی که در دستورالعمل ها استفاده می شوند. ثابت هایی که خیلی بزرگ هستند در عوض هستند
در یک استخر ثابت قرار داده شده و از طریق غیر جهت ثبت ارجاع داده می شود.
ارزش N می تواند بین 0 و 4 باشد. مقدار 0 (پیش فرض) یا 4 به این معنی است
ثابت با هر اندازه مجاز است.
-آرامش کن
فعال کردن آرامش پیوند دهنده آرامش پیوند دهنده فرآیندی است که در آن پیوند دهنده تلاش می کند
برای کاهش اندازه یک برنامه با یافتن نسخه های کوتاه تر دستورالعمل های مختلف.
به طور پیش فرض غیر فعال شده است
-mint-register=N
تعداد رجیسترهایی را که باید برای عملکردهای کنترل کننده وقفه سریع رزرو شوند، مشخص کنید. را
ارزش N می تواند بین 0 و 4 باشد. مقدار 1 به این معنی است که ثبات "r13" رزرو شده است
برای استفاده انحصاری از کنترل کننده های وقفه سریع. مقدار 2 ذخیره "r13" و
"r12". مقدار 3 ذخیره "r13"، "r12" و "r11" و مقدار 4 ذخیره "r13"
از طریق "r10". مقدار 0، پیش فرض، هیچ ثبتی را رزرو نمی کند.
-مساوه-در مداخلات
مشخص می کند که توابع کنترل کننده وقفه باید رجیستر انباشت کننده را حفظ کند.
این فقط در صورتی ضروری است که کد معمولی ممکن است برای مثال از رجیستر انباشت کننده استفاده کند
زیرا ضرب های 64 بیتی را انجام می دهد. پیش فرض نادیده گرفتن انباشت کننده است
زیرا این باعث می شود که کنترل کننده های وقفه سریعتر شوند.
-بی حال
-mno-pid
تولید داده های مستقل از موقعیت را فعال می کند. وقتی فعال است هر گونه دسترسی به
داده های ثابت از طریق یک آفست از یک آدرس پایه که در یک ثبات نگهداری می شود انجام می شود. این
اجازه می دهد تا مکان داده های ثابت در زمان اجرا بدون نیاز تعیین شود
فایل اجرایی برای جابجایی، که یک مزیت برای برنامه های جاسازی شده با تنگ است
محدودیت های حافظه داده هایی که قابل تغییر هستند تحت تأثیر این گزینه قرار نمی گیرند.
توجه داشته باشید، با استفاده از این ویژگی یک ثبات، معمولاً "r13" برای داده های ثابت رزرو می کند
آدرس پایه این می تواند منجر به کد کندتر و/یا بزرگتر شود، به خصوص در کدهای پیچیده
توابع.
ثبت واقعی انتخاب شده برای نگهداری آدرس پایگاه داده ثابت بستگی به این دارد که آیا
la -msmall-data-limit و / یا - ثبت نام ضرابخانه گزینه های خط فرمان فعال هستند.
با شروع ثبت "r13" و ادامه به سمت پایین، ابتدا رجیسترها تخصیص داده می شوند
برای برآوردن الزامات - ثبت نام ضرابخانه، و سپس -بی حال و در نهایت
-msmall-data-limit. بنابراین ممکن است برای ثبت منطقه داده کوچک "r8" باشد.
اگر هر دو -mint-register=4 و -بی حال در خط فرمان مشخص می شوند.
به طور پیش فرض این ویژگی فعال نیست. پیش فرض را می توان از طریق بازیابی کرد -mno-pid
گزینه خط فرمان
-mno-warn-multiple-fast-interrupts
-mwarn-multiple-fast-interrupts
در صورت مشاهده بیش از یک وقفه سریع، از صدور پیام هشدار GCC جلوگیری می کند
زمانی که در حال کامپایل کردن یک فایل است. پیش فرض این است که برای هر اضافی یک اخطار صادر کنید
کنترل کننده وقفه سریع یافت شد، زیرا RX فقط از یک وقفه پشتیبانی می کند.
توجه داشته باشید: گزینه خط فرمان عمومی GCC -تثبیت شده-REG اهمیت ویژه ای برای RX دارد
پورت زمانی که با ویژگی تابع "وقفه" استفاده می شود. این ویژگی نشان می دهد a
عملکردی که برای پردازش وقفه های سریع در نظر گرفته شده است. GCC تضمین می کند که فقط از رجیسترها استفاده می کند
"r10"، "r11"، "r12" و/یا "r13" و فقط به شرطی که استفاده عادی از
ثبت های مربوطه از طریق محدود شده اند -تثبیت شده-REG or - ثبت نام ضرابخانه
گزینه های خط فرمان
S / 390 و سری z گزینه
اینها هستند -m گزینه های تعریف شده برای معماری S/390 و zSeries.
-mhard-float
-msoft-float
از دستورالعمل های ممیز شناور سخت افزاری و ثبت نام های شناور استفاده کنید (استفاده نکنید)
عملیات نقطه ای چه زمانی -msoft-float مشخص شده است، توابع در libgcc.a عادت کرده اند
انجام عملیات ممیز شناور چه زمانی -mhard-float مشخص شده است، کامپایلر
دستورالعمل های ممیز شناور IEEE را تولید می کند. این پیش فرض است.
-mhard-dfp
-mno-hard-dfp
از دستورالعمل های سخت افزاری اعشاری ممیز شناور برای اعشار استفاده کنید (استفاده نکنید)
عملیات ممیز شناور چه زمانی -mno-hard-dfp مشخص شده است، توابع در libgcc.a هستند
برای انجام عملیات ممیز شناور اعشاری استفاده می شود. چه زمانی -mhard-dfp مشخص شده است،
کامپایلر دستورالعمل های سخت افزاری ممیز شناور اعشاری را تولید می کند. این پیش فرض است
برای -مارس=z9-ec و یا بالاتر.
-mlong-double-64
-mlong-double-128
این سوئیچ ها اندازه "دبل طولانی" را کنترل می کنند. اندازه 64 بیت باعث می شود
نوع "طولانی دوبل" معادل نوع "دو". این پیش فرض است.
- زنجیره پشتی
-mno-backchain
آدرس فریم تماس گیرنده را به عنوان نشانگر پشتیبان در آن ذخیره کنید (ذخیره نکنید).
قاب پشته callee. ممکن است به یک Backchain نیاز باشد تا امکان اشکال زدایی با استفاده از ابزارهایی وجود داشته باشد
اطلاعات فریم فراخوانی DWARF 2 را درک نمی کنم. چه زمانی -mno-packed-stack هست در
در اثر، نشانگر backchain در پایین قاب پشته ذخیره می شود. چه زمانی
-mpacked-stack در واقع، زنجیره پشتی در بالاترین کلمه قرار می گیرد
96/160 بایت منطقه ذخیره ثبت نام.
به طور کلی، کد کامپایل شده با - زنجیره پشتی با کد کامپایل شده با تماس سازگار است
-mmo-backchain; با این حال، استفاده از backchain برای اهداف اشکال زدایی معمولاً نیاز دارد
که کل باینری با آن ساخته شده است - زنجیره پشتی. توجه داشته باشید که ترکیبی از
- زنجیره پشتی, -mpacked-stack و -mhard-float پشتیبانی نمی شود. به منظور ساخت یک
استفاده از کرنل لینوکس -msoft-float.
پیش فرض این است که زنجیره پشتی را حفظ نکنید.
-mpacked-stack
-mno-packed-stack
از طرح بندی پشته بسته بندی شده استفاده کنید (استفاده نکنید). چه زمانی -mno-packed-stack مشخص شده است،
کامپایلر از تمام فیلدهای منطقه ذخیره 96/160 بایتی فقط برای آنها استفاده می کند
هدف پیش فرض؛ فیلدهای استفاده نشده هنوز فضای پشته را اشغال می کنند. چه زمانی -mpacked-stack is
مشخص شده، شیارهای ذخیره رجیستر به صورت متراکم در بالای ذخیره رجیستر بسته بندی شده اند
حوزه؛ فضای بلااستفاده برای مقاصد دیگر مورد استفاده مجدد قرار می گیرد که امکان استفاده کارآمدتر را فراهم می کند
فضای پشته موجود با این حال، زمانی که - زنجیره پشتی همچنین در عمل، بالاترین
کلمه ناحیه ذخیره همیشه برای ذخیره سازی backchain و آدرس بازگشت استفاده می شود
ثبت همیشه دو کلمه در زیر زنجیره پشتی ذخیره می شود.
تا زمانی که پشته فریم پشته استفاده نمی شود، کد تولید شده با -mpacked-stack
با کد تولید شده با تماس سازگار است -mno-packed-stack. توجه داشته باشید که برخی غیر از FSF
نسخه GCC 2.95 برای S/390 یا کد zSeries تولید شده که از قاب پشته استفاده می کند
backchain در زمان اجرا، نه فقط برای اهداف اشکال زدایی. چنین کدی فراخوانی نیست-
سازگار با کد کامپایل شده با -mpacked-stack. همچنین توجه داشته باشید که ترکیبی از
- زنجیره پشتی, -mpacked-stack و -mhard-float پشتیبانی نمی شود. به منظور ساخت یک
استفاده از کرنل لینوکس -msoft-float.
پیش فرض این است که از طرح بندی پشته های بسته بندی شده استفاده نکنید.
-msmall-exec
-mno-small-exec
با استفاده از دستورالعمل "bras" برای انجام زیر روال کد تولید کنید (یا تولید نکنید).
تماس می گیرد. این تنها در صورتی قابل اعتماد عمل می کند که حجم کل قابل اجرا از 64k تجاوز نکند.
به طور پیش فرض استفاده از دستورالعمل "basr" به جای آن است که این را ندارد
محدودیت
-64
-31
چه زمانی -31 مشخص شده است، کدی مطابق با GNU/Linux برای S/390 ABI ایجاد کنید. چه زمانی
-64 مشخص شده است، کدی مطابق با گنو/لینوکس برای zSeries ABI تولید کنید. این
به ویژه به GCC اجازه می دهد تا دستورالعمل های 64 بیتی را تولید کند. برای s390 اهداف،
پیش فرض است -31، در حالی که s390x پیش فرض را هدف قرار می دهد -64.
-مزارچ
-مسا
چه زمانی -مزارچ مشخص شده است، کد را با استفاده از دستورالعمل های موجود در آن تولید کنید
z/معماری. چه زمانی -مسا مشخص شده است، با استفاده از دستورالعمل ها کد تولید کنید
موجود در ESA/390. توجه داشته باشید که -مسا امکان پذیر نیست با -64. هنگام تولید
کد مطابق با GNU/Linux برای S/390 ABI، پیشفرض است -مسا. هنگام تولید
کد مطابق با گنو/لینوکس برای zSeries ABI، پیشفرض است -مزارچ.
-mmvcle
-mno-mvcle
با استفاده از دستورالعمل "mvcle" برای اجرای بلوک، کد تولید کنید (یا تولید نکنید).
حرکت می کند. چه زمانی -mno-mvcle مشخص شده است، به جای آن از یک حلقه "mvc" استفاده کنید. این پیش فرض است
مگر اینکه برای اندازه بهینه شود.
-mdebug
-mno-debug
هنگام کامپایل، اطلاعات دیباگ اضافی را چاپ کنید (یا چاپ نکنید). پیش فرض است
تا اطلاعات اشکال زدایی چاپ نشود.
-مارس=نوع cpu
کدی را ایجاد کنید که روی آن اجرا شود نوع cpu، که نام سیستمی است که نشان دهنده a است
نوع پردازنده خاص مقادیر ممکن برای نوع cpu هستند g5, g6, z900, z990, z9-109,
z9-ec, z10, z196و zEC12. هنگام تولید کد با استفاده از دستورالعمل های موجود در
z/Architecture، پیش فرض است -مارس=z900. در غیر این صورت، پیش فرض است -مارس=g5.
-mtune=نوع cpu
تنظیم کنید نوع cpu همه چیز در مورد کد تولید شده قابل اجرا است، به جز ABI
و مجموعه دستورالعمل های موجود لیست از نوع cpu مقادیر مانند for است
-مارس. پیش فرض مقداری است که برای آن استفاده می شود -مارس.
-mtpf-trace
-MNO-TPF-TRACE
کدی را ایجاد کنید که در شاخههای خاص سیستم عامل TPF برای ردیابی روتینها اضافه میکند (افزوده نمیکند)
در سیستم عامل این گزینه به طور پیش فرض خاموش است، حتی در هنگام کامپایل کردن برای
سیستم عامل TPF
-mfused-madd
-mno-fused-madd
کدی را ایجاد کنید که از ضرب و انباشت ممیز شناور استفاده می کند (از آن استفاده نمی کند).
دستورالعمل ها. این دستورالعمل ها به صورت پیش فرض در صورت نقطه شناور سخت افزاری تولید می شوند
استفاده می شود.
-mwarn-framesize=اندازه قاب
در صورتی که عملکرد فعلی از اندازه قاب داده شده بیشتر شود، هشدار ارسال کنید. زیرا این است
یک بررسی زمان کامپایل، لازم نیست هنگام اجرای برنامه مشکلی واقعی ایجاد کند. آی تی
هدف آن شناسایی توابعی است که به احتمال زیاد باعث سرریز پشته می شوند. این است
برای استفاده در محیطی با اندازه پشته محدود به عنوان مثال هسته لینوکس مفید است.
-mwarn-dynamicstack
اگر تابع "alloca" را فراخوانی کند یا از آرایههایی با اندازه پویا استفاده کند، یک هشدار ارسال میکند. این
به طور کلی ایده بدی با اندازه پشته محدود است.
-mstack-guard=پشته نگهبان
-mstack-size=به اندازه پشته
اگر این گزینهها ارائه شوند، S/390 بکاند دستورالعملهای اضافی را در قسمت ارسال میکند
پیش درآمد تابعی که اگر اندازه پشته باشد، یک دام را راه اندازی می کند پشته نگهبان بایت بالاتر از
به اندازه پشته (به یاد داشته باشید که پشته در S/390 به سمت پایین رشد می کند). اگر پشته نگهبان
گزینه حذف شده است کوچکترین قدرت 2 بزرگتر از اندازه فریم از کامپایل
تابع انتخاب شده است. این گزینه ها برای کمک به اشکال زدایی پشته استفاده می شوند
مشکلات سرریز کد ساطع شده اضافی فقط باعث سربار کمی می شود و
از این رو می توان در سیستم های تولید مانند بدون عملکرد بیشتر نیز استفاده کرد
تنزل. مقادیر داده شده باید توان های دقیق 2 و باشند به اندازه پشته باید باشد
بزرگتر از پشته نگهبان بدون بیش از 64 هزار به منظور کارآمدی اضافی
کد این فرض را ایجاد می کند که پشته در یک آدرس تراز شده با مقدار شروع می شود
داده شده توسط به اندازه پشته. پشته نگهبان گزینه فقط می تواند در ارتباط با
به اندازه پشته.
-mhotpatch=پیش از نیم کلمه,پس از نیم کلمه
اگر گزینه hotpatch فعال باشد، یک پیش درآمد تابع "hot-patching" برای
تمام توابع در واحد کامپایل. برچسب تابع با داده شده اضافه می شود
تعداد دستورالعمل های NOP دو بایتی (پیش از نیم کلمه، حداکثر 1000000). پس از
برچسب، 2 * پس از نیم کلمه بایت ها با استفاده از بزرگترین NOP مانند دستورالعمل ها اضافه می شوند
معماری اجازه می دهد (حداکثر 1000000).
اگر هر دو آرگومان صفر باشند، Hotpatching غیرفعال است.
این گزینه را می توان برای توابع جداگانه با ویژگی "hotpatch" لغو کرد.
نمره گزینه
این گزینه ها برای اجرای امتیاز تعریف شده اند:
-meb
کامپایل کد برای حالت big-endian. این پیش فرض است.
-مل
کد را برای حالت کمی اندین کامپایل کنید.
-mnhwloop
تولید دستورالعمل های "bcnz" را غیرفعال کنید.
-مولس
تولید بار و دستورالعملهای ذخیرهسازی ناهمتراز را فعال کنید.
-mmac
استفاده از دستورالعملهای multiply-cumulate را فعال کنید. به طور پیش فرض غیرفعال است.
-mscore5
SCORE5 را به عنوان معماری هدف مشخص کنید.
-mscore5u
SCORE5U معماری هدف را مشخص کنید.
-mscore7
SCORE7 را به عنوان معماری هدف مشخص کنید. این پیش فرض است.
-mscore7d
SCORE7D را به عنوان معماری هدف مشخص کنید.
SH گزینه
اینها -m گزینه هایی برای پیاده سازی SH تعریف شده است:
-1 کد برای SH1 تولید کنید.
-2 کد برای SH2 تولید کنید.
-m2e
کد برای SH2e ایجاد کنید.
-m2a-nofpu
برای SH2a بدون FPU یا برای SH2a-FPU کد ایجاد کنید به گونه ای که
واحد ممیز شناور استفاده نمی شود.
-m2a-تنها
کدی برای SH2a-FPU ایجاد کنید، به گونه ای که ممیز شناور با دقت دوگانه وجود نداشته باشد.
عملیات استفاده می شود.
-m2a-تک
ایجاد کد برای SH2a-FPU با فرض اینکه واحد ممیز شناور با دقت تک است.
حالت به طور پیش فرض
-m2a
ایجاد کد برای SH2a-FPU با فرض اینکه واحد ممیز شناور با دقت مضاعف است.
حالت به طور پیش فرض
-3 کد برای SH3 تولید کنید.
-m3e
کد برای SH3e ایجاد کنید.
-m4-nofpu
کد برای SH4 بدون واحد ممیز شناور ایجاد کنید.
-m4-تنها
ایجاد کد برای SH4 با واحد ممیز شناور که فقط از تک
محاسبات دقیق
-m4-تک
با فرض اینکه واحد ممیز شناور در حالت تک دقیق است، کدی برای SH4 ایجاد کنید
به صورت پیش فرض.
-4 کد برای SH4 تولید کنید.
-m4-100
کد برای SH4-100 تولید کنید.
-m4-100-nofpu
کد SH4-100 را طوری ایجاد کنید که از واحد ممیز شناور استفاده نشود.
-m4-100-تک
ایجاد کد برای SH4-100 با فرض اینکه واحد ممیز شناور در حالت تک دقیق است.
به صورت پیش فرض.
-m4-100-تنها
کد SH4-100 را به گونه ای ایجاد کنید که ممیز شناور با دقت دوگانه وجود نداشته باشد.
عملیات استفاده می شود.
-m4-200
کد برای SH4-200 تولید کنید.
-m4-200-nofpu
کد SH4-200 را به گونه ای تولید کنید که واحد ممیز شناور نباشد
استفاده شده.
-m4-200-تک
ایجاد کد برای SH4-200 با فرض اینکه واحد ممیز شناور در حالت تک دقیق است.
به صورت پیش فرض.
-m4-200-تنها
کد SH4-200 را به گونه ای ایجاد کنید که ممیز شناور با دقت دوگانه وجود نداشته باشد.
عملیات استفاده می شود.
-m4-300
کد برای SH4-300 تولید کنید.
-m4-300-nofpu
کد SH4-300 را به گونه ای تولید کنید که واحد ممیز شناور نباشد
استفاده شده.
-m4-300-تک
کد SH4-300 را به گونه ای ایجاد کنید که ممیز شناور با دقت دوگانه وجود نداشته باشد.
عملیات استفاده می شود.
-m4-300-تنها
کد SH4-300 را به گونه ای ایجاد کنید که ممیز شناور با دقت دوگانه وجود نداشته باشد.
عملیات استفاده می شود.
-m4-340
کد SH4-340 را ایجاد کنید (بدون MMU، بدون FPU).
-m4-500
کد برای SH4-500 (بدون FPU) تولید کنید. پاس می دهد -isa=sh4-nofpu به مونتاژ کننده
-m4a-nofpu
کد برای SH4al-dsp یا برای SH4a به گونه ای ایجاد کنید که ممیز شناور
واحد استفاده نمی شود
-m4a-تنها
کدی برای SH4a ایجاد کنید، به گونه ای که ممیز شناور با دقت دوگانه وجود نداشته باشد
عملیات استفاده می شود.
-m4a-تک
با فرض اینکه واحد ممیز شناور تک دقیق است، کدی برای SH4a ایجاد کنید
حالت به طور پیش فرض
-m4a
کد برای SH4a تولید کنید.
-m4al
مثل -m4a-nofpu، با این تفاوت که به طور ضمنی می گذرد -dsp به مونتاژ کننده شورای همکاری خلیج فارس
در حال حاضر هیچ دستورالعمل DSP تولید نمی کند.
-m5-32media
کد 32 بیتی برای SHmedia تولید کنید.
-m5-32media-nofpu
کد 32 بیتی برای SHmedia به گونه ای ایجاد کنید که واحد ممیز شناور نباشد
استفاده شده.
-m5-64media
کد 64 بیتی برای SHmedia تولید کنید.
-m5-64media-nofpu
کد 64 بیتی برای SHmedia به گونه ای ایجاد کنید که واحد ممیز شناور نباشد
استفاده شده.
-m5-compact
کد برای SHcompact تولید کنید.
-M5-compact-nofpu
کد SHcompact را طوری ایجاد کنید که از واحد ممیز شناور استفاده نشود.
-MB کد را برای پردازنده در حالت big-endian کامپایل کنید.
میلی لیتر کامپایل کد برای پردازنده در حالت کمی اندین.
-mdalign
تراز دو برابر در مرزهای 64 بیتی. توجه داشته باشید که این امر قراردادهای فراخوانی را تغییر می دهد،
و بنابراین برخی از توابع از کتابخانه استاندارد C کار نمی کنند مگر اینکه شما دوباره کامپایل کنید
آن را ابتدا با -mdalign.
-آرامش کن
در صورت امکان برخی از مراجع آدرس را در زمان پیوند کوتاه کنید. از گزینه linker استفاده می کند
-آروم باش.
بزرگ
از افست های 32 بیتی در جداول "سوئیچ" استفاده کنید. پیش فرض استفاده از افست های 16 بیتی است.
-mbitops
استفاده از دستورالعمل های دستکاری بیت را در SH2A فعال کنید.
-mfmovd
استفاده از دستورالعمل "fmovd" را فعال کنید. بررسی -mdalign برای محدودیت های تراز
-مرنساس
مطابق با قراردادهای تماس تعریف شده توسط Renesas.
-mno-renesas
با کنوانسیونهای فراخوانی که قبل از کنوانسیونهای Renesas برای GCC تعریف شدهاند، پیروی کنید
در دسترس بودند. این گزینه پیش فرض برای تمام اهداف زنجیره ابزار SH است.
-mnomacsave
ثبت "MAC" را به عنوان call-clobbered علامت گذاری کنید، حتی اگر -مرنساس داده شده است.
-مییی
-mno-ieee
انطباق IEEE را در مقایسه با ممیز شناور کنترل کنید، که بر روی مدیریت تأثیر می گذارد
مواردی که نتیجه مقایسه نامرتب است. به صورت پیش فرض -مییی is
به طور ضمنی فعال شده است. اگر -فقط ریاضی محدود فعال شده است -mno-ieee به طور ضمنی تنظیم شده است،
که منجر به مقایسه سریعتر ممیز شناور بیشتر برابر و کمتر برابر می شود. در
تنظیمات ضمنی را می توان با مشخص کردن یکی از آنها لغو کرد -مییی or -mno-ieee.
-minline-ic_invalidate
کد درون خطی برای باطل کردن ورودی های کش دستورالعمل ها پس از تنظیم عملکرد تودرتو
ترامپولین ها این گزینه هیچ تاثیری ندارد اگر -musermode در حال اجرا است و انتخاب شده است
گزینه تولید کد (مثلا -4) استفاده از دستورالعمل "icbi" را اجازه نمی دهد.
اگر گزینه تولید کد انتخاب شده اجازه استفاده از "icbi" را نمی دهد
دستورالعمل، و -musermode در اثر نیست، کد خطی شده را دستکاری می کند
آرایه آدرس کش دستورالعمل به طور مستقیم با نوشتن انجمنی. این نه تنها
در زمان اجرا به حالت ممتاز نیاز دارد، اما اگر خط کش وجود داشته باشد نیز از کار می افتد
از طریق TLB نگاشت شده و نقشه برداری نشده است.
-نادرست کردن
اندازه و مکان دستورالعمل را در کد اسمبلی قرار دهید.
-mpadstruct
این گزینه منسوخ شده است. این ساختارها را به مضرب 4 بایت اضافه می کند که این است
با SH ABI ناسازگار است.
-matomic-model=مدل
مدل عملیات اتمی و پارامترهای اضافی را با کاما جدا می کند
فهرست برای جزئیات بیشتر در مورد توابع داخلی اتمی را ببینید __اتمی ساخته شده است.
مدل ها و پارامترهای زیر پشتیبانی می شوند:
هیچ
توالی های اتمی ایجاد شده توسط کامپایلر را غیرفعال کنید و فراخوان های کتابخانه ای را برای اتمی ارسال کنید
عملیات اگر هدف "sh*-*-linux*" نباشد، این پیش فرض است.
نرم گوسا
ایجاد توالی اتمی نرم افزار gUSA سازگار با گنو/لینوکس برای اتمی ساخته شده
در توابع توالی های اتمی تولید شده نیاز به پشتیبانی اضافی از سوی دارند
کد مدیریت وقفه/استثنا سیستم و فقط برای SH3* و مناسب هستند
سیستم های تک هسته ای SH4*. این گزینه به طور پیش فرض زمانی که هدف فعال است فعال می شود
"sh*-*-linux*" و SH3* یا SH4*. هنگامی که هدف SH4A باشد، این گزینه نیز انجام خواهد شد
تا حدی از دستورالعمل های اتمی سخت افزاری "movli.l" و "movco.l" استفاده کنید
کد کارآمدتری ایجاد کنید، مگر اینکه سخت مشخص شده است.
soft-tcb
توالی های اتمی نرم افزاری را ایجاد کنید که از یک متغیر در کنترل رشته استفاده می کنند
مسدود کردن. این نوعی از توالی های gUSA است که می تواند در SH1* نیز استفاده شود
و اهداف SH2*. توالی های اتمی تولید شده نیاز به پشتیبانی بیشتری دارند
کد مدیریت وقفه/استثنا سیستم و فقط برای
سیستم های تک هسته ای هنگام استفاده از این مدل، gbr-offset= پارامتر باید باشد
نیز مشخص شده است.
ماسک نرم
توالی های اتمی نرم افزاری را ایجاد کنید که با تنظیم موقتاً وقفه ها را غیرفعال می کند
"SR.IMASK = 1111". این مدل فقط زمانی کار می کند که برنامه در حالت ممتاز اجرا شود
و فقط برای سیستم های تک هسته ای مناسب است. پشتیبانی اضافی از
کد مدیریت وقفه/استثنا سیستم مورد نیاز نیست. این مدل است
زمانی که هدف "sh*-*-linux*" و SH1* یا SH2* باشد به طور پیش فرض فعال می شود.
hard-llcs
توالی های اتمی سخت افزاری را با استفاده از دستورالعمل های "movli.l" و "movco.l" ایجاد کنید
فقط. این فقط در SH4A موجود است و برای سیستم های چند هسته ای مناسب است.
از آنجایی که دستورالعمل های سخت افزاری تنها از دسترسی متغیرهای اتمی 32 بیتی به 8 پشتیبانی می کنند
یا متغیرهای 16 بیتی با دسترسی های 32 بیتی شبیه سازی می شوند. کد کامپایل شده با این
گزینه همچنین با سایر نرم افزارهای مدل اتمی سازگار خواهد بود
سیستم های رسیدگی به وقفه/استثنا اگر روی سیستم SH4A اجرا شوند. اضافی
پشتیبانی از کد مدیریت وقفه/استثنا سیستم مورد نیاز نیست
برای این مدل
gbr-offset=
این پارامتر مقدار افست متغیر در کنترل رشته را بر حسب بایت مشخص می کند
ساختار بلوکی که باید توسط توالی های اتمی تولید شده استفاده شود
soft-tcb مدل انتخاب شده است برای مدل های دیگر این پارامتر نادیده گرفته می شود.
مقدار مشخص شده باید مضرب صحیحی از چهار و در محدوده 0-1020 باشد.
سخت
این پارامتر از استفاده ترکیبی از چندین مدل اتمی، حتی اگر آنها جلوگیری می کند
سازگار خواهد بود و کامپایلر را وادار می کند توالی های اتمی را تولید کند
فقط مدل مشخص شده
-متاس
کد opcode "tas.b" را برای "__atomic_test_and_set" تولید کنید. توجه داشته باشید که بسته به
پیکربندی خاص سخت افزار و نرم افزار می تواند عملکرد کلی را کاهش دهد
به دلیل فلاش های خط کش عملوند که توسط دستور "tas.b" ذکر شده است. بر
پردازندههای چند هستهای SH4A دستورالعمل "tas.b" باید با احتیاط مورد استفاده قرار گیرد زیرا این دستورالعمل
می تواند منجر به خراب شدن داده ها برای پیکربندی های کش خاص شود.
ترجیح دادن
هنگام تولید کد مستقل از موقعیت، با استفاده از Global Offset فراخوانی تابع را ارسال کنید
جدول به جای جدول پیوند رویه.
-musermode
-mno-usermode
اجازه ندهید (اجازه دهید) کامپایلر کد حالت ممتاز را ایجاد کند. مشخص کردن
-musermode نیز دلالت دارد -mno-inline-ic_invalidate اگر کد خطی کار نمی کند
در حالت کاربر -musermode زمانی که هدف "sh*-*-linux*" باشد پیش فرض است. اگر
هدف SH1* یا SH2* است -musermode هیچ تاثیری ندارد، زیرا حالت کاربری وجود ندارد.
-MultCost =عدد
هزینه را برای یک insn چند برابری در نظر بگیرید.
-mdiv=استراتژی
استراتژی تقسیم را برای استفاده برای عملیات تقسیم عدد صحیح تنظیم کنید. برای SHmedia
استراتژی می تواند یکی از موارد زیر باشد:
fp عملیات را در ممیز شناور انجام می دهد. این تاخیر بسیار بالایی دارد، اما نیاز دارد
فقط چند دستورالعمل، بنابراین اگر کد شما به اندازه کافی باشد، ممکن است انتخاب خوبی باشد
ILP با قابلیت بهره برداری آسان به کامپایلر اجازه می دهد تا ممیز شناور را برنامه ریزی کند
دستورالعمل همراه با دستورالعمل های دیگر تقسیم بر صفر باعث الف می شود
استثنای ممیز شناور
INV از عملیات اعداد صحیح برای محاسبه معکوس مقسوم علیه و سپس استفاده می کند
سود تقسیمی را در معکوس ضرب می کند. این استراتژی اجازه می دهد تا CSE و بالا بردن
از محاسبه معکوس تقسیم بر صفر یک نتیجه نامشخص را محاسبه می کند،
اما به دام نمی اندازد.
inv:minlat
گونه ای از INV که در آن، اگر هیچ فرصت CSE یا بالا بردن یافت نشد، یا اگر
کل عملیات به همان مکان بالا رفته است، آخرین مراحل
محاسبات معکوس با ضرب نهایی در هم تنیده می شوند تا کل را کاهش دهند
تأخیر، به قیمت استفاده از چند دستورالعمل بیشتر، و در نتیجه ارائه کمتر
فرصت های زمان بندی با کدهای دیگر
صدا
تابع کتابخانه ای را فراخوانی می کند که معمولاً آن را پیاده سازی می کند inv:minlat استراتژی این
تراکم کد بالایی را برای کامپایل های "m5-*media-nofpu" می دهد.
call2
از نقطه ورودی متفاوتی از تابع کتابخانه یکسان استفاده می کند، جایی که فرض می کند a
اشاره گر به یک جدول جستجو قبلاً تنظیم شده است که بار اشاره گر را نشان می دهد
به CSE و بهینه سازی افزایش کد.
inv: call
inv:call2
inv:fp
استفاده از INV الگوریتم برای تولید کد اولیه، اما اگر کد باقی بماند
بهینه نشده، به صدا, call2، یا fp استراتژی ها، به ترتیب. توجه داشته باشید که
اثر جانبی بالقوه به دام انداختن تقسیم بر صفر توسط یک جداگانه انجام می شود
دستورالعمل، بنابراین ممکن است که تمام دستورالعمل های اعداد صحیح بالا بروند،
اما نشانگر عوارض جانبی در جایی که هست باقی می ماند. یک نوترکیب به
عملیات ممیز شناور یا تماس در آن صورت امکان پذیر نیست.
inv20u
inv20l
انواع از inv:minlat استراتژی در صورتی که محاسبه معکوس باشد
از ضرب جدا نمی شوند، آنها تقسیم را در جایی که سود تقسیم می کند سرعت می بخشند
به 20 بیت (علامت بعلاوه در صورت لزوم) با قرار دادن یک آزمایش برای رد شدن از تعدادی از
عملیات در این مورد؛ این آزمون باعث کاهش سرعت سود سهام بیشتر می شود.
inv20u فرض می کند که چنین سود سهام کوچکی بعید است، و inv20l
احتمال می دهد.
برای اهدافی غیر از SHmedia استراتژی می تواند یکی از موارد زیر باشد:
call-div1
تابع کتابخانه ای را فراخوانی می کند که از دستورالعمل تقسیم تک مرحله ای "div1" استفاده می کند
عملیات را انجام دهد. تقسیم بر صفر یک نتیجه نامشخص را محاسبه می کند و انجام می دهد
تله نیست این پیش فرض است به جز SH4، SH2A و SHcompact.
call-fp
تابع کتابخانه ای را فراخوانی می کند که عملیات را با دقت مضاعف شناور انجام می دهد
نقطه. تقسیم بر صفر باعث استثنای ممیز شناور می شود. این پیش فرض است
برای SHcompact با FPU. مشخص کردن این مورد برای اهدافی که دوتایی ندارند
Precision FPU به طور پیش فرض روی "call-div1" خواهد بود.
میز تماس
تابع کتابخانه ای را فراخوانی می کند که از یک جدول جستجو برای مقسوم علیه های کوچک استفاده می کند
دستورالعمل "div1" با تمایز حروف برای مقسومگیرندههای بزرگتر. تقسیم بر صفر
یک نتیجه نامشخص را محاسبه می کند و به دام نمی اندازد. این پیش فرض برای SH4 است.
تعیین این مورد برای اهدافی که دستورالعمل های تغییر پویا ندارند
به طور پیش فرض "call-div1" است.
هنگامی که یک استراتژی تقسیم مشخص نشده است، استراتژی پیش فرض انتخاب می شود
بر اساس هدف فعلی برای SH2A استراتژی پیش فرض استفاده از "divs" و
دستورالعمل های "divu" به جای فراخوانی تابع کتابخانه.
انباشته-خروجی-آرگ
یک بار برای آرگومان های خروجی در پرولوگ تابع به جای اطراف، فضا رزرو کنید
هر تماس به طور کلی برای عملکرد و اندازه مفید است. همچنین برای باز کردن نیاز است
برای جلوگیری از تغییر قاب پشته در اطراف کد شرطی.
-mdivsi3_libfunc=نام
نام تابع کتابخانه مورد استفاده برای تقسیم امضا شده 32 بیتی را روی آن تنظیم کنید نام. این
فقط روی نام استفاده شده در صدا و inv: call استراتژی های تقسیم، و
کامپایلر همچنان انتظار دارد مجموعههای یکسانی از رجیسترهای ورودی/خروجی/کلببر شده مانند این باشد
گزینه وجود نداشت
-Mfixed-Range =محدوده ثبت نام
کدی را ایجاد کنید که محدوده رجیستر داده شده را به عنوان ثبات ثابت در نظر می گیرد. ثبت ثابت
یکی از مواردی است که تخصیص دهنده ثبات نمی تواند از آن استفاده کند. این در هنگام کامپایل کرنل مفید است
کد محدوده رجیستر به صورت دو رجیستر که با یک خط تیره از هم جدا شده اند، مشخص می شود. چندگانه
محدوده های ثبت را می توان با کاما از هم جدا کرد.
-مخاطبی-مخاطبی
استفاده از حالت آدرس دهی نمایه شده را برای SHmedia32/SHcompact فعال کنید. این فقط
اگر سختافزار و/یا سیستمعامل معنایی 32 بیتی را برای نمایهسازیشده پیادهسازی کنند، ایمن است.
حالت آدرس دهی این معماری امکان اجرای پردازنده های 64 بیتی را فراهم می کند
MMU، که سیستم عامل می تواند از آن برای دریافت آدرس 32 بیتی استفاده کند، اما از آنجایی که سخت افزار فعلی وجود ندارد
پیاده سازی از این یا هر روش دیگری برای ایمن کردن حالت آدرس دهی نمایه شده پشتیبانی می کند
برای استفاده در ABI 32 بیتی، پیش فرض است -mno-indexed-addressing.
-mgettrcost=عدد
هزینه در نظر گرفته شده برای دستور "gettr" را تنظیم کنید عدد. پیش فرض 2 اگر است
-mpt-fixed در حال اجرا است، 100 در غیر این صورت.
-mpt-fixed
فرض کنید دستورالعمل های "pt*" به دام نمی افتند. این به طور کلی کد برنامه ریزی شده بهتری تولید می کند،
اما روی سخت افزار فعلی ناامن است. تعریف فعلی معماری این را می گوید
"ptabs" و "ptrel" زمانی که هدف و با 3 برابر 3 باشد، تله میکنند
اثر غیر عمدی ناامن کردن برنامه ریزی این دستورالعمل ها قبل از الف
شاخه یا آنها را از یک حلقه بلند کنید. به عنوان مثال، "__do_global_ctors"، بخشی از
libgcc که سازنده ها را در هنگام راه اندازی برنامه اجرا می کند، توابع را در لیستی فراخوانی می کند
محدود شده با -1. با -mpt-fixed گزینه، "ptabs" قبل از آزمایش انجام می شود
در برابر -1. این بدان معنی است که همه سازنده ها کمی سریعتر اجرا می شوند، اما زمانی که
حلقه به انتهای لیست می رسد، برنامه از کار می افتد زیرا "ptabs" -1 را در یک بارگذاری می کند.
ثبت هدف
از آنجایی که این گزینه برای هر سخت افزاری که معماری فعلی را پیاده سازی می کند ناامن است
مشخصات، پیش فرض است -mno-pt-fixed. مگر اینکه به صراحت با
-mgettrcost, -mno-pt-fixed نیز دلالت دارد -mgettrcost=100; این مانع از ثبت نام می شود
تخصیص از استفاده از ثبات های هدف برای ذخیره اعداد صحیح معمولی.
-منهای نمادین
فرض کنید نمادها ممکن است نامعتبر باشند. نمادهای تابع معمولی تولید شده توسط کامپایلر
همیشه برای بارگیری با "movi"/"shori"/"ptabs" یا "movi"/"shori"/"ptrel" معتبر هستند، اما
با ترفندهای اسمبلر و/یا لینکر می توان نمادهایی تولید کرد که باعث ایجاد آن می شوند
"ptabs" یا "ptrel" به دام انداختن. این گزینه فقط زمانی معنی دارد که -mno-pt-fixed هست در
اثر از CSE بلوک متقاطع، بالا بردن و بیشتر برنامه ریزی نمادها جلوگیری می کند
بارها پیش فرض است -mno-Invalid-symbols.
-branch-cost=تعداد
فرض تعداد هزینه آموزش شعبه باشد. اعداد بالاتر کامپایلر را می سازد
در صورت امکان سعی کنید کدهای بدون شعبه بیشتری تولید کنید. اگر مشخص نشده است مقدار است
بسته به نوع پردازنده ای که برای آن کامپایل می شود انتخاب می شود.
-mzdcbranch
-mno-zdcbranch
فرض کنید (فرض نکنید) دستورات شاخه شرطی جابجایی صفر "bt" و
"bf" سریع هستند. اگر -mzdcbranch مشخص شده است، کامپایلر سعی خواهد کرد صفر را ترجیح دهد
توالی کد شاخه جابجایی. این به طور پیش فرض در هنگام تولید کد فعال می شود
برای SH4 و SH4A. می توان آن را به صراحت با مشخص کردن غیرفعال کرد -mno-zdcbranch.
-mfused-madd
-mno-fused-madd
کدی را ایجاد کنید که از ضرب و انباشت ممیز شناور استفاده می کند (از آن استفاده نمی کند).
دستورالعمل ها. این دستورالعمل ها به صورت پیش فرض در صورت نقطه شناور سخت افزاری تولید می شوند
استفاده می شود. وابسته به ماشین -mfused-madd اکنون گزینه به ماشین نگاشت شده است-
مستقل -ffp-contract=سریع گزینه ، و -mno-fused-madd به نقشه برداری می شود
-ffp-contract = خاموش.
-mfsca
-mno-fsca
به کامپایلر اجازه داده یا اجازه نمی دهد دستور "fsca" را برای سینوس و کسینوس منتشر کند.
تقریب ها گزینه "-mfsca" باید در ترکیب با استفاده شود
"-funsafe-math-optimizations". این به طور پیش فرض در هنگام تولید کد فعال است
SH4A. استفاده از "-mno-fsca" تقریب های سینوسی و کسینوس را غیرفعال می کند حتی اگر
"-funsafe-math-optimizations" در حال اجرا است.
-mfsrra
-mno-fsrra
به کامپایلر اجازه داده یا اجازه نمی دهد که دستور "fsrra" را برای مربع متقابل منتشر کند
تقریب ریشه گزینه "-mfsrra" باید در ترکیب با استفاده شود
"-funsafe-math-optimizations" و "-finite-math-only". زمانی که به طور پیش فرض فعال می شود
تولید کد برای SH4A. استفاده از "-mno-fsrra" ریشه مربع متقابل را غیرفعال می کند
تقریب ها حتی اگر "-funsafe-math-optimizations" و "-finite-math-only" در
اثر.
وانمود کردن - حرکت کردن
برای آموزش حرکت شرطی شاخه های شرطی با جابجایی صفر را ترجیح دهید
الگوها این می تواند منجر به کد سریعتر در پردازنده SH4 شود.
سولاریس 2 گزینه
اینها -m گزینه ها در Solaris 2 پشتیبانی می شوند:
-mclear-hwcap
-mclear-hwcap به کامپایلر می گوید که قابلیت های سخت افزاری ایجاد شده توسط
مونتاژ کننده سولاریس این تنها زمانی ضروری است که فایل های شی از پسوندهای ISA استفاده نمی کنند
توسط ماشین فعلی پشتیبانی می شود، اما در زمان اجرا بررسی کنید که آیا از آنها استفاده کنید یا خیر.
-متن ناخالص
-متن ناخالص، علاوه بر استفاده از -به اشتراک گذاشته شده، به کامپایلر می گوید که پاس ندهد -z متن به
پیوند دهنده هنگام پیوند دادن یک شی مشترک. با استفاده از این گزینه، می توانید موقعیت را پیوند دهید-
کد وابسته به یک شی مشترک
-متن ناخالص "تغییر مکان ها در مقابل قابل تخصیص باقی می مانند اما غیرقابل نوشتن" را سرکوب می کند
پیام خطای پیوند دهنده بخشها. با این حال، جابهجاییهای لازم باعث ایجاد کپی روی
را بنویسید، و شی به اشتراک گذاشته شده در واقع بین فرآیندها به اشتراک گذاشته نمی شود. بجای
با استفاده از -متن ناخالص، باید تمام کد منبع را با آن کامپایل کنید -fpic or -fPIC.
این سوئیچ ها علاوه بر موارد فوق در Solaris 2 پشتیبانی می شوند:
- نخ ها
با استفاده از کتابخانه رشته های POSIX، پشتیبانی از چند رشته ای را اضافه کنید. این گزینه تنظیم می شود
پرچمگذاری برای پیشپردازنده و پیوند دهنده. این گزینه روی موضوع تاثیری ندارد
ایمنی کد شی تولید شده توسط کامپایلر یا کتابخانه های ارائه شده با آن.
- نخ
این مترادف برای - نخ ها.
SPARC گزینه
اینها -m گزینه ها در SPARC پشتیبانی می شوند:
-mno-app-regs
-mapp-regs
مشخص کردن -mapp-regs برای تولید خروجی با استفاده از ثبت جهانی 2 تا 4 که
SPARC SVR4 ABI برای برنامه ها ذخیره می کند. مانند ثبت جهانی 1، هر جهانی
ثبت 2 تا 4 به عنوان یک ثبات قابل تخصیص در نظر گرفته می شود که توسط clobber شده است
فراخوانی تابع این پیش فرض است.
برای اینکه کاملاً با SVR4 ABI مطابقت داشته باشد به قیمت کاهش عملکرد، مشخص کنید
-mno-app-regs. شما باید کتابخانه ها و نرم افزار سیستم را با این گزینه کامپایل کنید.
-mflat
-mno-flat
با -mflat، کامپایلر دستورالعمل های ذخیره/بازیابی را ایجاد نمی کند و از a استفاده می کند
مدل پنجره "مسطح" یا تک ثبت. این مدل با معمولی سازگار است
مدل پنجره ثبت نام ثبات های محلی و رجیسترهای ورودی (0--5) هنوز هستند
به عنوان رجیسترهای "ذخیره شده در تماس" در نظر گرفته می شوند و در صورت نیاز در پشته ذخیره می شوند.
با -mno-flat (به طور پیش فرض)، کامپایلر دستورالعمل های ذخیره/بازیابی را تولید می کند (به جز
برای توابع برگ). این حالت عملکرد عادی است.
-mfpu
-mhard-float
خروجی حاوی دستورالعمل های ممیز شناور تولید کنید. این پیش فرض است.
-mno-fpu
-msoft-float
خروجی حاوی فراخوان های کتابخانه ای برای ممیز شناور تولید کنید. هشدار: مورد نیاز
کتابخانه ها برای همه اهداف SPARC در دسترس نیستند. به طور معمول امکانات از
از کامپایلر C معمولی ماشین استفاده می شود، اما این کار را نمی توان مستقیماً در حالت متقابل انجام داد.
تلفیقی. شما باید ترتیبات خود را برای تهیه کتابخانه مناسب انجام دهید
توابع برای کامپایل متقابل اهداف تعبیه شده sprc-*-aout و اسپارکلیت-*-*
پشتیبانی نرم افزار ممیز شناور را ارائه دهید.
-msoft-float قرارداد فراخوانی را در فایل خروجی تغییر می دهد. بنابراین، آن را تنها
مفید است اگر کامپایل کنید تمام برنامه ای با این گزینه به طور خاص، شما نیاز دارید
گردآوری libgcc.a، کتابخانه ای که با GCC ارائه می شود، با -msoft-float به منظور این
به کار می کنند.
-مارد-طبقه شناور
خروجی حاوی دستورالعمل های ممیز شناور چهار کلمه ای (طولانی دوگانه) تولید کنید.
-msoft-quad-float
خروجی حاوی فراخوان های کتابخانه ای برای ممیز شناور چهار کلمه ای (طولانی دوگانه) ایجاد کنید
دستورالعمل ها. توابع فراخوانی شده آنهایی هستند که در SPARC ABI مشخص شده اند. این است
به طور پیش فرض
تا زمان نگارش این مقاله، هیچ پیاده سازی SPARC که پشتیبانی سخت افزاری داشته باشد، وجود ندارد
دستورالعمل های ممیز شناور چهار کلمه ای. همه آنها یک Trap handler را برای یکی از آنها فراخوانی می کنند
این دستورالعمل ها، و سپس کنترل کننده تله اثر دستورالعمل را تقلید می کند.
به دلیل سربار کنترل کننده تله، این کار بسیار کندتر از فراخوانی کتابخانه ABI است
کارهای روزمره. بنابراین -msoft-quad-float گزینه پیش فرض است.
-mno-unaligned-doubles
دوبل
فرض کنید دوبل ها دارای تراز 8 بایتی هستند. این پیش فرض است.
با دوبل، GCC فرض می کند که دوبل ها فقط در صورتی تراز 8 بایتی دارند
در نوع دیگری وجود دارند، یا اگر آدرس مطلق دارند. در غیر این صورت، آن را
فرض می کند که آنها دارای تراز 4 بایتی هستند. با مشخص کردن این گزینه از موارد نادر جلوگیری می شود
مشکلات سازگاری با کدهای تولید شده توسط سایر کامپایلرها. پیش فرض نیست
زیرا منجر به از دست دادن عملکرد، به خصوص برای کد ممیز شناور می شود.
-Muser-mode
-mno-user-mode
کدی تولید نکنید که فقط در حالت سرپرست اجرا شود. این فقط مربوط به
دستورالعمل "casa" صادر شده برای پردازنده LEON3. پیش فرض است
-mno-user-mode.
-mno-faster-structs
-mfaster-structs
با -mfaster-structs، کامپایلر فرض می کند که ساختارها باید 8 بایت داشته باشند
هم ترازی. این امکان استفاده از جفت دستورالعمل های "ldd" و "std" را برای کپی ها فراهم می کند
در انتساب ساختار، به جای دو برابر جفت "ld" و "st". با این حال
استفاده از این تراز تغییر یافته مستقیماً SPARC ABI را نقض می کند. بنابراین، در نظر گرفته شده است
فقط برای استفاده در اهدافی که توسعهدهنده تصدیق میکند که کد حاصل از آنها وجود دارد
مستقیماً مطابق با قوانین ABI نیست.
-mcpu=cpu_type
مجموعه دستورالعمل، مجموعه ثبت، و پارامترهای زمانبندی دستورالعمل را برای
ماشین تایپ cpu_type. مقادیر پشتیبانی شده برای cpu_type هستند v7, درخت سرو, v8, سوپراسپارک,
هایپر اسپارک, لئون, leon3, leon3v7, اسپارکلیت, f930, f934, sprclite86x, اسپارلت,
tsc701, v9, اولتراسپارک, ultrasparc3, نیاگارا, نیاگارا 2, نیاگارا 3 و نیاگارا 4.
زنجیرههای ابزار Native Solaris و GNU/Linux نیز از این مقدار پشتیبانی میکنند بومی، که انتخاب می کند
بهترین گزینه معماری برای پردازنده میزبان. -mcpu=بومی تاثیری ندارد اگر
GCC پردازنده را نمی شناسد.
پارامترهای زمانبندی دستورالعمل پیش فرض برای مقادیری که an را انتخاب می کنند استفاده می شود
معماری و نه اجرا. اینها هستند v7, v8, اسپارکلیت, اسپارلت, v9.
در اینجا لیستی از هر معماری پشتیبانی شده و پیاده سازی های پشتیبانی شده آنها آمده است.
v7 سرو، leon3v7
v8 supersparc، hypersparc، leon، leon3
اسپارکلیت
f930, f934, sparclite86x
اسپارلت
tsc701
v9 اولتراسپارک، اولتراسپارک3، نیاگارا، نیاگارا2، نیاگارا3، نیاگارا4
بهطور پیشفرض (مگر اینکه پیکربندی دیگری انجام شده باشد)، GCC کدی را برای نوع V7 تولید میکند
معماری SPARC با -mcpu=سرو، کامپایلر به علاوه آن را برای آن بهینه می کند
تراشه Cypress CY7C602، همانطور که در سری SPARCStation/SPARCServer 3xx استفاده می شود. این هست
همچنین برای SPARCStation قدیمی 1، 2، IPX و غیره مناسب است.
با -mcpu=v8، GCC کدی را برای نوع V8 معماری SPARC تولید می کند. در
تنها تفاوت با کد V7 این است که کامپایلر ضرب عدد صحیح و را منتشر می کند
دستورالعمل های تقسیم عدد صحیح که در SPARC-V8 وجود دارد اما در SPARC-V7 وجود ندارد. با
-mcpu=supersparc، کامپایلر علاوه بر این، آن را برای تراشه SuperSPARC بهینه می کند
در سری SPARCStation 10، 1000 و 2000 استفاده می شود.
با -mcpu=sparclite، GCC کدی را برای نوع SPARClite SPARC تولید می کند
معماری. با این کار ضرب عدد صحیح، مرحله تقسیم عدد صحیح و اسکن ("ffs") اضافه می شود.
دستورالعمل هایی که در SPARClite وجود دارد اما در SPARC-V7 وجود ندارد. با -mcpu=f930از
کامپایلر علاوه بر این، آن را برای تراشه فوجیتسو MB86930 که تراشه اصلی است، بهینه می کند
SPARClite، بدون FPU. با -mcpu=f934، کامپایلر به علاوه آن را برای آن بهینه می کند
تراشه فوجیتسو MB86934، که جدیدترین SPARClite با FPU است.
با -mcpu= اسپارکلت، GCC کدی را برای نوع SPARClet SPARC تولید می کند
معماری. این عدد صحیح ضرب، ضرب/انباشته، تقسیم عدد صحیح را اضافه می کند
مرحله و اسکن ("ffs") دستورالعمل هایی که در SPARClet وجود دارد اما در SPARC-V7 وجود ندارد. با
-mcpu=tsc701، کامپایلر علاوه بر این آن را برای تراشه TEMIC SPARClet بهینه می کند.
با -mcpu=v9، GCC کدی را برای نوع V9 معماری SPARC تولید می کند. این
دستورالعمل حرکت اعداد صحیح و ممیز شناور 64 بیتی، 3 ممیز شناور اضافی را اضافه می کند
ثبت کد شرط و دستورالعمل های حرکت شرطی. با -mcpu=ultrasparc,
کامپایلر همچنین آن را برای تراشه های Sun UltraSPARC I/II/IIi بهینه می کند. با
-mcpu=ultrasparc3، کامپایلر علاوه بر این آن را برای Sun UltraSPARC بهینه می کند
تراشه های III/III+/IIIi/IIIi+/IV/IV+. با -mcpu=نیاگارا، کامپایلر علاوه بر این
آن را برای تراشه های Sun UltraSPARC T1 بهینه می کند. با -mcpu = niagara2، کامپایلر
علاوه بر این، آن را برای تراشه های Sun UltraSPARC T2 بهینه می کند. با -mcpu = niagara3از
کامپایلر علاوه بر این، آن را برای تراشه های Sun UltraSPARC T3 بهینه می کند. با -mcpu = niagara4,
کامپایلر علاوه بر این، آن را برای تراشه های Sun UltraSPARC T4 بهینه می کند.
-mtune=cpu_type
پارامترهای زمانبندی دستورالعمل را برای نوع ماشین تنظیم کنید cpu_type، اما تنظیم نکنید
مجموعه دستورات یا ثبت نام آن گزینه را تنظیم می کند -mcpu=cpu_type انجام می دهد.
همان مقادیر برای -mcpu=cpu_type می توان برای استفاده -mtune=cpu_type، اما تنها
مقادیر مفید آنهایی هستند که اجرای CPU خاصی را انتخاب می کنند. آنها هستند
درخت سرو, سوپراسپارک, هایپر اسپارک, لئون, leon3, leon3v7, f930, f934, sprclite86x,
tsc701, اولتراسپارک, ultrasparc3, نیاگارا, نیاگارا 2, نیاگارا 3 و نیاگارا 4. با
زنجیره های ابزار بومی سولاریس و گنو/لینوکس، بومی همچنین می تواند استفاده شود.
-mv8plus
-mno-v8plus
با -mv8plus، GCC کد برای SPARC-V8+ ABI تولید می کند. تفاوت با V8
ABI این است که رجیسترهای جهانی و خروجی با عرض 64 بیت در نظر گرفته می شوند. این فعال است
به طور پیش فرض در Solaris در حالت 32 بیتی برای همه پردازنده های SPARC-V9.
-mvis
-mno-vis
با -mvis، GCC کدی تولید می کند که از UltraSPARC Visual بهره می برد
پسوندهای مجموعه دستورالعمل. پیش فرض است -mno-vis.
-mvis2
-mno-vis2
با -mvis2، GCC کدی را تولید می کند که از نسخه 2.0 UltraSPARC بهره می برد
پسوندهای مجموعه دستورالعمل بصری. پیش فرض است -mvis2 هنگام هدف قرار دادن یک CPU که
از چنین دستورالعمل هایی مانند UltraSPARC-III و نسخه های جدیدتر پشتیبانی می کند. تنظیمات -mvis2 همچنین
مجموعه -mvis.
-mvis3
-mno-vis3
با -mvis3، GCC کدی را تولید می کند که از نسخه 3.0 UltraSPARC بهره می برد
پسوندهای مجموعه دستورالعمل بصری. پیش فرض است -mvis3 هنگام هدف قرار دادن یک CPU که
از چنین دستورالعمل هایی مانند niagara-3 و نسخه های جدیدتر پشتیبانی می کند. تنظیمات -mvis3 را نیز تنظیم می کند
-mvis2 و -mvis.
-mcbcond
-mno-cbcond
با -mcbcond، GCC کدی را تولید می کند که از مزیت مقایسه و انشعاب استفاده می کند
دستورالعمل ها، همانطور که در Sparc Architecture 2011 تعریف شده است. پیش فرض این است -mcbcond چه زمانی
هدف قرار دادن پردازندهای که از چنین دستورالعملهایی مانند niagara-4 و جدیدتر پشتیبانی میکند.
-mpopc
-mno-popc
با -mpopc، GCC کدی تولید می کند که از جمعیت UltraSPARC بهره می برد
دستور شمارش پیش فرض است -mpopc هنگام هدف قرار دادن پردازنده ای که از چنین چیزی پشتیبانی می کند
دستورالعمل هایی مانند نیاگارا-2 و نسخه های جدیدتر.
-mfmaf
-mno-fmaf
با -mfmaf، GCC کدی تولید می کند که از مزیت UltraSPARC Fused Multiply- بهره می برد.
افزودن پسوندهای ممیز شناور پیش فرض است -mfmaf هنگام هدف قرار دادن یک CPU که
از چنین دستورالعمل هایی مانند Niagara-3 و نسخه های جدیدتر پشتیبانی می کند.
-mfix-at697f
راه حل مستند برای خطای واحد پردازنده Atmel AT697F را فعال کنید
(که با خطای شماره 13 پردازنده AT697E مطابقت دارد).
-mfix-ut699
راه حل های مستند شده برای خطای ممیز شناور و حافظه پنهان داده را فعال کنید
خطاهای پردازنده UT699 را باطل کنید.
اینها -m گزینه ها علاوه بر موارد فوق در پردازنده های SPARC-V9 در 64 بیت پشتیبانی می شوند
محیط ها:
-32
-64
کد برای یک محیط 32 بیتی یا 64 بیتی تولید کنید. محیط 32 بیتی int را تنظیم می کند،
طولانی و اشاره گر به 32 بیت. محیط 64 بیتی به 32 بیت و طولانی و
اشاره گر به 64 بیت
-mcmodel=که
مدل کد را روی یکی از آن قرار دهید
medlow
مدل کد متوسط/پایین: آدرسهای 64 بیتی، برنامهها باید در 32 پایین پیوند داده شوند.
تکه های حافظه برنامه ها را می توان به صورت ایستا یا پویا پیوند داد.
medmid
مدل کد متوسط/متوسط: آدرسهای 64 بیتی، برنامهها باید در پایین لینک شوند
44 بیت حافظه، بخش های متن و داده باید کمتر از 2 گیگابایت در حجم و
بخش داده باید در 2 گیگابایت از بخش متن قرار گیرد.
مدانی
مدل کد Medium/Anywhere: آدرسهای 64 بیتی، برنامهها ممکن است در هر جایی پیوند شوند
در حافظه، بخش های متن و داده باید کمتر از 2 گیگابایت و حجم داده ها باشد
بخش باید در 2 گیگابایت از بخش متن قرار گیرد.
ریختن
مدل کد Medium/Anywhere برای سیستم های جاسازی شده: آدرس های 64 بیتی، متن
و بخش های داده باید کمتر از 2 گیگابایت اندازه داشته باشند، هر دو از هر جایی از حافظه شروع می شوند
(در زمان پیوند تعیین می شود). ثبت جهانی %g4 به پایه داده ها اشاره می کند
بخش. برنامه ها به صورت ایستا مرتبط هستند و PIC پشتیبانی نمی شود.
-mmmory-model=مم-مدل
مدل حافظه موجود در پردازنده را روی یکی از آنها قرار دهید
به طور پیش فرض
مدل حافظه پیش فرض برای پردازنده و سیستم عامل.
rmo سفارش حافظه آرام
pso سفارش فروشگاهی جزئی
تسو کل سفارش فروشگاه
sc سازگاری ترتیبی
این مدل های حافظه به طور رسمی در ضمیمه D معماری Sparc V9 تعریف شده اند
همانطور که در قسمت "PSTATE.MM" پردازنده تنظیم شده است.
-mstack-bias
-mno-stack-bias
با -mstack-bias، GCC فرض می کند که نشانگر پشته و نشانگر فریم در صورت وجود،
با -2047 جبران می شوند که باید هنگام ایجاد ارجاعات قاب پشته به آن اضافه شود. این
پیش فرض در حالت 64 بیتی است. در غیر این صورت، فرض کنید چنین افستی وجود ندارد.
SPS گزینه
اینها -m گزینه ها در SPU پشتیبانی می شوند:
-mwarn-reloc
-mirror-reloc
لودر SPU جابجایی های پویا را مدیریت نمی کند. به طور پیش فرض، GCC یک عدد می دهد
خطا در هنگام تولید کدی که نیاز به جابجایی پویا دارد. -mno-error-reloc
خطا را غیرفعال می کند، -mwarn-reloc در عوض یک هشدار ایجاد می کند.
-msafe-dma
-munsafe-dma
دستورالعملهایی که شروع یا آزمایش تکمیل DMA را انجام میدهند، نباید دوباره سفارش داده شوند
با توجه به بارها و ذخایر حافظه ای که در حال دسترسی است. با -munsafe-dma
شما باید از کلمه کلیدی "فرار" برای محافظت از دسترسی های حافظه استفاده کنید، اما این می تواند منجر به
کد ناکارآمد در مکان هایی که حافظه تغییر نمی کند. به جای علامت زدن
حافظه به عنوان فرار، شما می توانید استفاده کنید -msafe-dma به کامپایلر بگوییم که DMA را درمان کند
دستورالعمل ها به طور بالقوه بر تمام حافظه تأثیر می گذارد.
-شاخه-اشاره
بهطور پیشفرض، GCC یک دستورالعمل راهنمایی برای جلوگیری از توقف خط لوله ایجاد میکند
شاخه های همیشه گرفته یا احتمالاً گرفته شده. یک اشاره نزدیکتر از 8 ایجاد نمی شود
دستورالعمل دور از شاخه آن دلیل کمی برای غیرفعال کردن آنها وجود دارد، به جز
اهداف اشکال زدایی یا کوچکتر کردن یک شی.
-msmall-mem
-mlarge-mem
بهطور پیشفرض، GCC با این فرض که آدرسها هرگز بزرگتر از 18 بیت نیستند، کد تولید میکند.
با -mlarge-mem کدی تولید می شود که یک آدرس کامل 32 بیتی را فرض می کند.
-mstdmain
بهطور پیشفرض، GCC با کد راهاندازی پیوند میخورد که عملکرد اصلی به سبک SPU را بر عهده میگیرد
رابط (که دارای یک لیست پارامترهای غیر متعارف است). با -mstdmain، پیوندهای GCC
برنامه شما در برابر کد راه اندازی که یک رابط به سبک C99 را به "اصلی" فرض می کند،
از جمله یک کپی محلی از رشته های "argv".
-Mfixed-Range =محدوده ثبت نام
کدی را ایجاد کنید که محدوده رجیستر داده شده را به عنوان ثبات ثابت در نظر می گیرد. ثبت ثابت
یکی از مواردی است که تخصیص دهنده ثبات نمی تواند از آن استفاده کند. این در هنگام کامپایل کرنل مفید است
کد محدوده رجیستر به صورت دو رجیستر که با یک خط تیره از هم جدا شده اند، مشخص می شود. چندگانه
محدوده های ثبت را می توان با کاما از هم جدا کرد.
-mea32
-mea64
با فرض اینکه اشاره گرها به فضای آدرس PPU از طریق "__ea" قابل دسترسی هستند، کد را کامپایل کنید.
ردهبندی فضای آدرس نامگذاری شده 32 یا 64 بیت عرض دارند. پیش فرض 32 بیت است.
از آنجایی که این یک گزینه در حال تغییر ABI است، تمام کدهای شی در یک فایل اجرایی باید کامپایل شوند
با همین تنظیمات
-مدرس-فضا-تبدیل
mno-address-space-conversion
اجازه/عدم استفاده از فضای آدرس "__ea" به عنوان ابرمجموعه آدرس عمومی
فضا. این امکان ارسال نوع صریح بین "__ea" و اشاره گر عمومی را نیز فراهم می کند
تبدیل ضمنی نشانگرهای عمومی به اشاره گرهای "__ea". پیش فرض اجازه دادن است
تبدیل نشانگر فضای آدرس
-Mcache size =اندازه حافظه پنهان
این گزینه نسخه libgcc را که کامپایلر به یک فایل اجرایی پیوند می دهد، کنترل می کند
و یک حافظه پنهان تحت مدیریت نرم افزار را برای دسترسی به متغیرهای آدرس "__ea" انتخاب می کند
فضایی با اندازه کش خاص گزینه های ممکن برای اندازه حافظه پنهان هستند 8, 16, 32, 64
و 128. اندازه پیش فرض کش 64 کیلوبایت است.
-به روز رسانی های matomic
به روز رسانی های mno-atomic
این گزینه نسخه libgcc را که کامپایلر به یک فایل اجرایی پیوند می دهد، کنترل می کند
و انتخاب می کند که آیا حافظه پنهان مدیریت شده توسط نرم افزار متغیرهای سمت PPU به روز شود یا خیر
استفاده می شود. اگر از بهروزرسانیهای اتمی استفاده میکنید، با استفاده از کد SPU به متغیر PPU تغییر میکند
واجد شرایط فضای آدرس "__ea" با تغییرات PPU دیگر تداخلی ندارد
متغیرهای ساکن در همان خط کش از کد PPU. اگر از اتمی استفاده نمی کنید
به روز رسانی، چنین تداخلی ممکن است رخ دهد. با این حال، نوشتن پشت خطوط کش بیشتر است
کارآمد. رفتار پیش فرض استفاده از به روز رسانی اتمی است.
-mdual-nops
-Mdual-nops =n
بهطور پیشفرض، GCC nops را درج میکند تا مشکل دوگانه را در زمانی که انتظار افزایش دارد افزایش دهد
عملکرد. n می تواند مقداری از 0 تا 10 باشد. کوچکتر n نوپ های کمتری را وارد می کند. 10 است
به طور پیش فرض، 0 همان است -mno-dual-nops. غیر فعال با -اواس.
-mhint-max-nops=n
حداکثر تعداد نوپ برای درج یک اشاره شاخه. یک اشاره شاخه باید حداقل 8 باشد
دستورالعمل های دور از شاخه ای که بر آن تأثیر می گذارد. درج GCC تا n نه به
این را اجرا کنید، در غیر این صورت اشاره شاخه را ایجاد نمی کند.
-mhint-max-distance=n
رمزگذاری دستورالعمل راهنمایی شاخه، اشاره را در محدوده 256 محدود می کند
دستورالعمل های شعبه تاثیرگذار است. به طور پیش فرض، GCC مطمئن می شود که در داخل است
125.
-msafe-hints
یک باگ سخت افزاری را حل کنید که باعث می شود SPU به طور نامحدود متوقف شود. به طور پیش فرض، GCC
دستورالعمل "hbrp" را درج می کند تا مطمئن شود که این Stall اتفاق نمی افتد.
گزینه برای سیستم V
این گزینه های اضافی در System V Release 4 برای سازگاری با سایر گزینه ها در دسترس هستند
کامپایلرها در آن سیستم ها:
-G یک شیء مشترک ایجاد کنید. توصیه می شود که - نمادین or -به اشتراک گذاشته شده به جای آن استفاده شود.
-کی نسخههای هر ابزار مورد استفاده توسط کامپایلر را در اسمبلر «ident.» شناسایی کنید
دستورالعمل در خروجی
-Qn از افزودن دستورالعمل های ".ident" به فایل خروجی خودداری کنید (این حالت پیش فرض است).
-YP،دیر
دایرکتوری ها را جستجو کنید دیرو نه موارد دیگر، برای کتابخانه های مشخص شده با -l.
-ایم،دیر
تو دایرکتوری نگاه کن دیر برای پیدا کردن پیش پردازنده M4 اسمبلر از این استفاده می کند
گزینه.
TILE-Gx گزینه
اینها -m گزینه ها در TILE-Gx پشتیبانی می شوند:
-mcmodel=small
کد برای مدل کوچک تولید کنید. فاصله برای تماس مستقیم به 500 متر محدود شده است
در هر دو جهت آدرس های مربوط به رایانه شخصی 32 بیتی هستند. پشتیبانی از آدرس های مطلق
محدوده آدرس کامل
-mcmodel=بزرگ
کد برای مدل بزرگ تولید کنید. هیچ محدودیتی در فاصله تماس وجود ندارد، کامپیوتر
آدرس های نسبی یا آدرس های مطلق.
-mcpu=نام
نوع CPU مورد نظر را انتخاب می کند. در حال حاضر تنها نوع پشتیبانی شده است tilegx.
-32
-64
کد برای یک محیط 32 بیتی یا 64 بیتی تولید کنید. محیط 32 بیتی int را تنظیم می کند،
طولانی و اشاره گر به 32 بیت است. محیط 64 بیتی به 32 بیت و طولانی و
اشاره گر به 64 بیت
-mbig-endian
-mlittle-endian
کد را به ترتیب در حالت اندیان بزرگ/کوچک تولید کنید.
TILEPro گزینه
اینها -m گزینه ها در TILEPro پشتیبانی می شوند:
-mcpu=نام
نوع CPU مورد نظر را انتخاب می کند. در حال حاضر تنها نوع پشتیبانی شده است tilepro.
-32
کدی را برای یک محیط 32 بیتی ایجاد کنید که int، long و اشاره گر را روی 32 بیت تنظیم می کند.
این تنها رفتار پشتیبانی شده است، بنابراین پرچم اساسا نادیده گرفته می شود.
V850 گزینه
اینها -m گزینه هایی برای پیاده سازی V850 تعریف شده اند:
تماس های طولانی
-mno-long-تماس
همه تماس ها را به عنوان تماس های دور (نزدیک) تلقی کنید. اگر تماس ها دور فرض شود،
کامپایلر همیشه آدرس تابع را در یک ثبات بارگذاری می کند و غیر مستقیم فراخوانی می کند
از طریق اشاره گر
-mno-ep
-مپ
بلوک های اساسی را که از نشانگر شاخص 4 یا بیشتر استفاده می کنند، بهینه نکنید (بهینه سازی کنید).
بارها برای کپی کردن نشانگر در ثبات "ep" و استفاده از "sld" و "sst" کوتاهتر
دستورالعمل ها. در -مپ اگر بهینه سازی کنید گزینه به طور پیش فرض روشن است.
-mno-prolog-function
-mprolog-function
از توابع خارجی برای ذخیره و بازیابی رجیسترها در مقدمه استفاده نکنید
و پایان یک تابع. عملکردهای خارجی کندتر هستند، اما از کد کمتری استفاده می کنند
فاصله اگر بیش از یک تابع همان تعداد ثبات را ذخیره کند. در
-mprolog-function اگر بهینه سازی کنید گزینه به طور پیش فرض روشن است.
-mspace
سعی کنید کد را تا حد امکان کوچک کنید. در حال حاضر، این فقط روشن می شود -مپ
و -mprolog-function گزینه.
-mtda=n
متغیرهای ایستا یا سراسری را که اندازه آنها باشد قرار دهید n بایت یا کمتر در ناحیه داده کوچک
که ثبت "ep" به آن اشاره می کند. فضای کوچک داده در کل می تواند تا 256 بایت را در خود جای دهد
(128 بایت برای مراجع بایت).
-msda=n
متغیرهای ایستا یا سراسری را که اندازه آنها باشد قرار دهید n بایت یا کمتر در ناحیه داده کوچک
که ثبت "gp" به آن اشاره می کند. فضای کوچک داده می تواند تا 64 کیلوبایت را در خود جای دهد.
-مزدا=n
متغیرهای ایستا یا سراسری را که اندازه آنها باشد قرار دهید n بایت یا کمتر به 32 اول
کیلوبایت حافظه
-mv850
مشخص کنید که پردازنده مورد نظر V850 باشد.
-mv850e3v5
مشخص کنید که پردازنده مورد نظر V850E3V5 باشد. ثابت پیش پردازنده
__v850e3v5__ در صورت استفاده از این گزینه تعریف می شود.
-mv850e2v4
مشخص کنید که پردازنده مورد نظر V850E3V5 باشد. این نام مستعار برای
-mv850e3v5 گزینه.
-mv850e2v3
مشخص کنید که پردازنده مورد نظر V850E2V3 باشد. ثابت پیش پردازنده
__v850e2v3__ در صورت استفاده از این گزینه تعریف می شود.
-MV850E2
مشخص کنید که پردازنده مورد نظر V850E2 باشد. ثابت پیش پردازنده __v850e2__
در صورت استفاده از این گزینه تعریف می شود.
-MV850E1
مشخص کنید که پردازنده مورد نظر V850E1 باشد. ثابت های پیش پردازنده
__v850e1__ و __v850e__ در صورت استفاده از این گزینه تعریف می شوند.
-mv850s
مشخص کنید که پردازنده مورد نظر V850ES باشد. این نام مستعار برای -MV850E1
گزینه.
-mv850e
مشخص کنید که پردازنده مورد نظر V850E باشد. ثابت پیش پردازنده __v850e__
در صورت استفاده از این گزینه تعریف می شود.
اگر هیچ کدام -mv850 نه -mv850e نه -MV850E1 نه -MV850E2 نه -mv850e2v3 نه -mv850e3v5
سپس یک پردازنده هدف پیش فرض و مربوطه انتخاب می شود __v850*__
ثابت پیش پردازنده تعریف شده است.
ثابت های پیش پردازنده __v850 و __v851__ همیشه بدون توجه به اینکه کدام تعریف می شوند
نوع پردازنده هدف است.
-mdisable-call
-mno-disable-call
این گزینه تولید دستورالعمل "CALLT" را برای v850e، v850e1 سرکوب می کند،
طعم های v850e2، v850e2v3 و v850e3v5 از معماری v850.
هنگامی که RH850 ABI در حال استفاده است، این گزینه به طور پیش فرض فعال می شود (نگاه کنید به -mrh850-abi)، و
هنگامی که GCC ABI در حال استفاده است به طور پیش فرض غیرفعال است. اگر دستورالعمل های "CALLT" وجود دارد
تولید می شود سپس نماد پیش پردازنده C "__V850_CALLT__" تعریف می شود.
-آرامش کن
-منو آرامش
را منتقل کنید (یا منتقل نکنید). -آرامش کن گزینه خط فرمان به اسمبلر.
-پرش های بلند
-mno- بلند پرش
تولید دستورالعمل های پرش مربوط به رایانه شخصی را غیرفعال کنید (یا دوباره فعال کنید).
-msoft-float
-mhard-float
تولید دستورالعمل های ممیز شناور سخت افزاری را غیرفعال کنید (یا دوباره فعال کنید). این
گزینه تنها زمانی مهم است که معماری هدف باشد V850E2V3 یا بالاتر اگر
دستورالعملهای ممیز شناور سختافزاری تولید میشوند و سپس پیش پردازنده C تولید میشوند
نماد "__FPU_OK__" تعریف می شود، در غیر این صورت نماد "__NO_FPU__" خواهد بود
تعریف شده است.
-mloop
استفاده از دستورالعمل LOOP e3v5 را فعال می کند. استفاده از این دستورالعمل نیست
هنگامی که معماری e3v5 انتخاب شده است به طور پیش فرض فعال می شود زیرا استفاده از آن همچنان ادامه دارد
تجربی
-mrh850-abi
mghs
پشتیبانی از نسخه RH850 V850 ABI را فعال می کند. این پیش فرض است. با
این نسخه از ABI قوانین زیر اعمال می شود:
· ساختارها و اتحادهای با اندازه صحیح از طریق یک اشاره گر حافظه به جای بازگردانده می شوند
یک ثبت نام
· ساختارها و اتحادهای بزرگ (با اندازه بیش از 8 بایت) با مقدار ارسال می شوند.
· توابع با مرزهای 16 بیتی تراز شده اند.
· -m8byte-align گزینه خط فرمان پشتیبانی می شود.
· -mdisable-call گزینه خط فرمان به طور پیش فرض فعال است. را
-mno-disable-call گزینه خط فرمان پشتیبانی نمی شود.
وقتی این نسخه از ABI فعال است، نماد پیش پردازنده C "__V850_RH850_ABI__"
تعریف شده است.
-mgcc-abi
پشتیبانی از نسخه قدیمی GCC V850 ABI را فعال می کند. با این نسخه از ABI
قوانین زیر اعمال می شود:
· ساختارها و اتحادهای با اندازه صحیح در ثبات "r10" برگردانده می شوند.
· ساختارها و اتحادهای بزرگ (با اندازه بیش از 8 بایت) با مرجع ارسال می شوند.
· توابع با مرزهای 32 بیتی تراز می شوند، مگر اینکه برای اندازه بهینه شوند.
· -m8byte-align گزینه خط فرمان پشتیبانی نمی شود.
· -mdisable-call گزینه خط فرمان پشتیبانی می شود اما به طور پیش فرض فعال نیست.
وقتی این نسخه از ABI فعال است، نماد پیش پردازنده C "__V850_GCC_ABI__"
تعریف شده است.
-m8byte-align
-mno-8byte-align
پشتیبانی از انواع "دبل" و "طولان طولانی" را فعال می کند تا در 8 بایت تراز شوند
مرزها پیش فرض این است که تراز همه اشیا را به حداکثر محدود کنید
4 بایت. چه زمانی -m8byte-align در واقع نماد پیش پردازنده C است
"__V850_8BYTE_ALIGN__" تعریف خواهد شد.
سوئیچ -mbig
کد مناسب برای جداول سوئیچ بزرگ تولید کنید. از این گزینه فقط در صورتی استفاده کنید که
اسمبلر/لینکر از شاخه های خارج از محدوده در جدول سوئیچ شکایت دارد.
-mapp-regs
این گزینه باعث می شود از r2 و r5 در کد تولید شده توسط کامپایلر استفاده شود. این
تنظیم پیش فرض است.
-mno-app-regs
این گزینه باعث می شود که r2 و r5 به عنوان ثبات ثابت در نظر گرفته شوند.
VAX گزینه
اینها -m گزینه ها برای VAX تعریف شده اند:
-munix
دستورات پرش خاصی ("aobleq" و غیره) که اسمبلر یونیکس است را خروجی ندهید
زیرا VAX نمی تواند در محدوده های طولانی کار کند.
-mgnu
با این فرض که اسمبلر گنو وجود دارد، دستورالعمل های پرش را خروجی بگیرید
استفاده شده.
-میلی گرم کد خروجی برای اعداد ممیز شناور با فرمت G به جای فرمت D.
VMS گزینه
اینها -m گزینه هایی برای پیاده سازی VMS تعریف شده است:
-mvms-return-codes
کدهای شرایط VMS را از "main" برگردانید. پیش فرض برگرداندن شرایط به سبک POSIX است
کدهای (مثلاً خطا).
-mdebug-main=پیشوند
اولین روتینی را که نامش با آن شروع می شود علامت گذاری کنید پیشوند به عنوان روال اصلی برای
اشکال زدا.
-mmalloc64
روال های تخصیص حافظه 64 بیتی پیش فرض.
-mpointer-size=اندازه
اندازه پیش فرض نشانگرها را تنظیم کنید. گزینه های ممکن برای اندازه هستند 32 or کوتاه برای 32 بیت
اشاره گر، 64 or طولانی برای اشاره گرهای 64 بیتی و نه برای پشتیبانی فقط از نشانگرهای 32 بیتی.
گزینه later "pragma pointer_size" را غیرفعال می کند.
VxWorks گزینه
گزینه های این بخش برای تمام اهداف VxWorks تعریف شده است. گزینه های خاص برای
سخت افزار هدف همراه با گزینه های دیگر برای آن هدف فهرست شده است.
-MRTP
GCC می تواند هم برای کرنل های VxWorks و هم برای فرآیندهای زمان واقعی (RTP) کد تولید کند. این
گزینه از اولی به دومی تغییر می کند. همچنین ماکرو پیش پردازنده را تعریف می کند
"__RTP__".
-غیر ساکن
یک فایل اجرایی RTP را با کتابخانه های مشترک به جای کتابخانه های ایستا پیوند دهید. را
گزینه های -استاتیک و -به اشتراک گذاشته شده همچنین می تواند برای RTP ها استفاده شود. -استاتیک پیش فرض است.
-Bstatic
-بی دینامیک
این گزینه ها به لینک دهنده منتقل می شوند. آنها برای سازگاری با
دیاب
-Xbind-تنبل
اتصال تنبل فراخوانی تابع را فعال کنید. این گزینه معادل است -Wl،-z، اکنون و است
برای سازگاری با Diab تعریف شده است.
-Xbind-اکنون
اتصال تنبل فراخوانی تابع را غیرفعال کنید. این گزینه پیش فرض است و برای آن تعریف شده است
سازگاری با دیاب
x86-64 گزینه
این موارد در زیر ذکر شده است
Xstormy16 گزینه
این گزینه ها برای Xstormy16 تعریف شده اند:
-msim
فایل های راه اندازی و اسکریپت پیوند دهنده مناسب برای شبیه ساز را انتخاب کنید.
Xtensa گزینه
این گزینه ها برای اهداف Xtensa پشتیبانی می شوند:
-mconst16
-mno-const16
استفاده از دستورالعمل های "CONST16" را برای بارگیری مقادیر ثابت فعال یا غیرفعال کنید. در
دستورالعمل "CONST16" در حال حاضر یک گزینه استاندارد از Tensilica نیست. چه زمانی
فعال باشد، دستورالعمل های "CONST16" همیشه به جای استاندارد "L32R" استفاده می شود.
دستورالعمل ها. استفاده از "CONST16" به طور پیش فرض تنها در صورتی فعال است که "L32R"
دستورالعمل در دسترس نیست
-mfused-madd
-mno-fused-madd
فعال یا غیرفعال کردن استفاده از دستورات ضرب/افزودن و ضرب/ تفریق ذوب شده در
گزینه ممیز شناور اگر گزینه ممیز شناور نیز نباشد، این تأثیری ندارد
فعال شد. غیرفعال کردن دستورات ضرب/جمع و ضرب/ تفریق ذوب شده را مجبور می کند
کامپایلر برای استفاده از دستورالعمل های جداگانه برای عملیات ضرب و جمع/ تفریق.
این ممکن است در برخی موارد که نتایج دقیق مطابق با IEEE 754 هستند، مطلوب باشد
مورد نیاز: دستورات افزودن/ تفریق ضرب ذوب شده میانی را گرد نمی کند
نتیجه، در نتیجه تولید نتایج با بیش بیت از دقت مشخص شده توسط
استاندارد IEEE غیرفعال کردن دستورالعملهای جمع و تفریق ضرب ذوب شده نیز این امر را تضمین میکند
خروجی برنامه به توانایی کامپایلر برای ترکیب ضرب و حساس نیست
عملیات جمع/ تفریق
-mserialize-volatile
-mno-serialize-volatile
هنگامی که این گزینه فعال است، GCC دستورالعمل های "MEMW" را قبل از حافظه "فرار" درج می کند
ارجاعاتی برای تضمین سازگاری متوالی پیش فرض است -mserialize-volatile.
استفاده کنید -mno-serialize-volatile برای حذف دستورالعمل های "MEMW".
-mforce-no-pic
برای اهداف، مانند گنو/لینوکس، که در آن همه کدهای Xtensa حالت کاربر باید موقعیت-
کد مستقل (PIC)، این گزینه PIC را برای کامپایل کد هسته غیرفعال می کند.
-مکس-لیترال
-mno-text-literals
درمان استخرهای تحت اللفظی را کنترل کنید. پیش فرض است -mno-text-literals,
که literals را در قسمتی جداگانه در فایل خروجی قرار می دهد. این اجازه می دهد تا
استخر تحت اللفظی در RAM/ROM داده قرار می گیرد و همچنین به پیوند دهنده اجازه می دهد تا ترکیب شود
استخرهای تحت اللفظی از فایل های شی مجزا برای حذف حروف اضافی و بهبود کد
اندازه. با -مکس-لیترال، لفظ ها در قسمت متن قرار گرفته اند
به منظور نزدیک نگه داشتن آنها تا حد امکان به مراجع خود. این ممکن است ضروری باشد
برای فایل های مونتاژ بزرگ
-Mtarget-Aligget
-mno-target-align
هنگامی که این گزینه فعال است، GCC به اسمبلر دستور می دهد تا به طور خودکار تراز شود
دستورالعمل هایی برای کاهش جریمه های شعب با هزینه برخی از تراکم کد. در
اسمبلر تلاش می کند تا دستورالعمل های چگالی را برای تراز کردن اهداف شاخه و
دستورالعمل های زیر دستورالعمل تماس اگر گاوصندوق قبلی کافی نباشد
دستورالعمل تراکم برای تراز کردن یک هدف، هیچ گشادی انجام نمی شود. پیش فرض است
-Mtarget-Aligget. این گزینه ها روی درمان تراز خودکار تأثیری ندارند
دستورالعمل هایی مانند "LOOP"، که اسمبلر همیشه آنها را تراز می کند، یا با باز کردن
دستورالعمل های چگالی یا با درج دستورالعمل های NOP.
-mlong calls
-mno-long calls
هنگامی که این گزینه فعال است، GCC به اسمبلر دستور می دهد تا تماس های مستقیم را به آن ترجمه کند
تماس های غیرمستقیم مگر اینکه بتواند تعیین کند که هدف تماس مستقیم در این است
محدوده مجاز توسط دستورالعمل تماس این ترجمه معمولاً برای تماسها انجام میشود
توابع در فایل های منبع دیگر به طور خاص، اسمبلر یک مستقیم را ترجمه می کند
دستور "CALL" به یک "L32R" و به دنبال آن یک دستورالعمل "CALLX". پیش فرض است
-mno-long calls. این گزینه باید در برنامه هایی که هدف تماس می تواند استفاده شود
به طور بالقوه خارج از محدوده باشد. این گزینه در اسمبلر اجرا می شود نه در
کامپایلر، بنابراین کد اسمبلی تولید شده توسط GCC هنوز تماس مستقیم را نشان می دهد
دستورالعمل --- برای مشاهده دستورالعمل های واقعی به کد شیء جدا شده نگاه کنید.
توجه داشته باشید که اسمبلر از یک فراخوانی غیرمستقیم برای هر تماس بین فایلی استفاده می کند، نه فقط
آنهایی که واقعاً خارج از محدوده هستند.
سری z گزینه
این موارد در زیر ذکر شده است
گزینه برای رمز نسل کنوانسیون
این گزینه های مستقل از ماشین، قراردادهای رابط مورد استفاده در کد را کنترل می کنند
نسل.
اکثر آنها هم اشکال مثبت و هم اشکال منفی دارند. شکل منفی از -فو is
-fno-foo. در جدول زیر، تنها یکی از فرمها فهرست شده است --- فرمی که نیست
پیش فرض با حذف هر یک از آنها می توانید شکل دیگر را کشف کنید نه- یا اضافه کردن آن
-fbounds-بررسی
برای فرانتاندهایی که از آن پشتیبانی میکنند، کد اضافی ایجاد کنید تا شاخصها را بررسی کنید
آرایه های دسترسی در محدوده اعلام شده قرار دارند. این در حال حاضر فقط توسط
جاوا و فرترن به پایان می رسد، جایی که این گزینه به طور پیش فرض درست و نادرست است
بود.
-fstack-reuse=سطح استفاده مجدد
این گزینه استفاده مجدد از فضای پشته را برای متغیرهای محلی/خودکار اعلام شده توسط کاربر و
کامپایلر موقت تولید می کند. استفاده مجدد می تواند تمام, به نام_vars، یا هیچ. تمام
استفاده مجدد پشته را برای همه متغیرهای محلی و موقت فعال می کند، به نام_vars را قادر می سازد
استفاده مجدد فقط برای متغیرهای محلی تعریف شده توسط کاربر با نام و هیچ استفاده مجدد پشته را غیرفعال می کند
به طور کامل. مقدار پیش فرض است تمام. این گزینه زمانی مورد نیاز است که برنامه گسترش یابد
طول عمر یک متغیر محلی محدوده یا یک کامپایلر تولید شده به طور موقت فراتر از آن
نقطه پایانی که توسط زبان تعریف شده است. زمانی که طول عمر یک متغیر به پایان می رسد، و اگر
متغیر در حافظه زندگی می کند، کامپایلر بهینه سازی آزادی استفاده مجدد از پشته خود را دارد
فضایی با سایر متغیرهای موقتی یا محلی با محدوده که محدوده زنده آنها وجود ندارد
با آن همپوشانی داشته باشد. کد قدیمی که طول عمر محلی را افزایش میدهد احتمالاً با کد قطع میشود
بهینه سازی استفاده مجدد پشته
به عنوان مثال،
int *p;
{
int local1 ؛
p = &local1;
local1 = 10;
....
}
{
int local2 ؛
local2 = 20;
...
}
اگر (*p == 10) // خارج از محدوده استفاده از local1
{
}
مثال دیگر:
ساختار A
{
A(int k): i(k)، j(k) { }
بین من
int j;
};
A *ap;
void foo (const A&ar)
{
ap = &ar;
}
نوار خالی()
{
فوو(A(10))؛ // عمر شی temp با بازگشت foo به پایان می رسد
{
A a(20)؛
....
}
ap->i+= 10; // ap به دمای خارج از محدوده اشاره می کند که فضای آن
// با a استفاده مجدد می شود. ارزش ap->i چیست؟
}
طول عمر یک کامپایلر موقت تولید شده توسط استاندارد C++ به خوبی تعریف شده است.
وقتی یک عمر موقت به پایان می رسد، و اگر موقت در خاطره بماند،
کامپایلر بهینه سازی آزادی استفاده مجدد از فضای پشته خود را با سایر موقت یا
متغیرهای محلی scoped که محدوده زنده آنها با آن همپوشانی ندارد. با این حال برخی از
کد قدیمی متکی به رفتار کامپایلرهای قدیمی است که در پشته موقتی هستند
فضا مجددا استفاده نمی شود، استفاده مجدد از پشته تهاجمی می تواند منجر به خطاهای زمان اجرا شود. این
گزینه برای کنترل بهینه سازی استفاده مجدد از پشته موقت استفاده می شود.
-FTRAPV
این گزینه تله هایی را برای سرریز علامت دار هنگام جمع، تفریق و
عملیات ضرب
-fwrapv
این گزینه به کامپایلر دستور می دهد که سرریز حسابی امضا شده را فرض کند
جمع، تفریق و ضرب در اطراف با استفاده از مکمل دو نفره پیچیده می شود
نمایندگی. این پرچم برخی بهینه سازی ها را فعال و برخی دیگر را غیرفعال می کند. این
همانطور که توسط زبان جاوا مورد نیاز است، گزینه به طور پیش فرض برای قسمت جلویی جاوا فعال است
مشخصات.
- استثنائات
کنترل استثنا را فعال کنید. کد اضافی مورد نیاز برای انتشار استثناها را ایجاد می کند. برای
برخی از اهداف، این بدان معناست که GCC اطلاعات باز کردن قاب را برای همه عملکردها تولید می کند.
که می تواند سربار حجم داده قابل توجهی را تولید کند، اگرچه تاثیری ندارد
اجرا. اگر این گزینه را مشخص نکنید، GCC آن را به طور پیش فرض برای زبان ها فعال می کند
مانند C++ که معمولاً به مدیریت استثنا نیاز دارند و آن را برای زبان هایی مانند غیرفعال می کند
C که معمولاً به آن نیاز ندارند. با این حال، ممکن است لازم باشد زمانی که این گزینه را فعال کنید
کامپایل کردن کد C که باید به درستی با گرداننده های استثنایی نوشته شده همکاری کند
در C++ همچنین اگر در حال کامپایل کردن C++ قدیمی هستید، ممکن است بخواهید این گزینه را غیرفعال کنید
برنامه هایی که از مدیریت استثنا استفاده نمی کنند.
-fnon-call-exceptions
کدی را ایجاد کنید که به دستورالعملهای به دام انداختن اجازه میدهد استثناها را پرتاب کند. توجه داشته باشید که این
به پشتیبانی زمان اجرا مخصوص پلتفرم نیاز دارد که در همه جا وجود ندارد. علاوه بر این،
فقط اجازه می دهد به دام انداختن دستورالعمل برای پرتاب استثناها، به عنوان مثال مراجع حافظه یا
دستورالعمل های ممیز شناور این اجازه نمی دهد که استثناها از دلخواه پرتاب شوند
کنترل کننده های سیگنال مانند "SIGALRM".
-fdelete-dead-exceptions
دستورالعمل هایی را در نظر بگیرید که ممکن است استثناهایی ایجاد کنند، اما در غیر این صورت به آنها کمک نمی کنند
اجرای برنامه را می توان دور بهینه کرد. این گزینه به طور پیش فرض فعال است
برای بخش جلویی Ada، همانطور که توسط مشخصات زبان Ada مجاز است. بهینه سازی
پاس هایی که باعث حذف استثناهای مرده می شوند به طور مستقل در موارد مختلف فعال می شوند
سطوح بهینه سازی
-funwind-جدول
مشابه - استثنائات، با این تفاوت که فقط هر داده استاتیک مورد نیاز را تولید می کند، اما
به هیچ وجه بر کد تولید شده تأثیر نمی گذارد. شما معمولاً نیازی به این کار ندارید
این گزینه را فعال کنید؛ در عوض، یک پردازشگر زبان که به این مدیریت نیاز دارد، آن را فعال می کند
از طرف شما.
جداول -فاسینکرون-باز کردن
در صورت پشتیبانی از دستگاه هدف، جدول باز کردن در قالب DWARF 2 ایجاد کنید. جدول است
دقیق در هر مرز دستورالعمل، بنابراین می توان از آن برای باز کردن پشته استفاده کرد
رویدادهای ناهمزمان (مانند دیباگر یا زباله گرد).
-fno-gnu-unique
در سیستمهایی با اسمبلر جدید گنو و کتابخانه C، کامپایلر C++ از آن استفاده میکند
اتصال "STB_GNU_UNIQUE" برای اطمینان از اینکه تعاریف اعضای داده ایستا الگو
و متغیرهای محلی استاتیک در توابع درون خطی حتی در حضور هم منحصر به فرد هستند
"RTLD_LOCAL"؛ این برای جلوگیری از مشکلات با یک کتابخانه مورد استفاده توسط دو مختلف ضروری است
پلاگین های "RTLD_LOCAL" بسته به تعریف در یکی از آنها و بنابراین
مخالفت با دیگری در مورد الزام آور بودن نماد. اما این باعث می شود
"dlclose" برای DSO های آسیب دیده نادیده گرفته شود. اگر برنامه شما متکی به شروع مجدد است
از یک DSO از طریق "dlclose" و "dlopen" می توانید استفاده کنید -fno-gnu-unique.
-fpcc-struct-return
مقادیر "کوتاه" "struct" و "union" را در حافظه مانند مقادیر طولانی تر به جای in برگردانید
ثبت می کند. این کنوانسیون کارایی کمتری دارد، اما مزیت اجازه دادن را دارد
قابلیت فراخوانی بین فایل های کامپایل شده توسط GCC و فایل های کامپایل شده با سایر کامپایلرها،
به ویژه کامپایلر C قابل حمل (pcc).
قرارداد دقیق برای بازگرداندن ساختارها در حافظه به هدف بستگی دارد
ماکروهای پیکربندی
ساختارها و اتحادیه های کوتاه آنهایی هستند که اندازه و هم ترازی آنها با برخی مطابقت دارد
نوع عدد صحیح
هشدار: کد کامپایل شده با -fpcc-struct-return سوئیچ باینری سازگار نیست
با کد کامپایل شده با -Freg-struct-return تعویض. از آن برای مطابقت با یک غیر
رابط باینری برنامه پیش فرض
-Freg-struct-return
در صورت امکان مقادیر "struct" و "union" را در ثبات ها برگردانید. این کارایی بیشتری دارد
برای سازه های کوچک از -fpcc-struct-return.
اگر هیچ کدام را مشخص نکنید -fpcc-struct-return نه -Freg-struct-return، GCC به طور پیش فرض روی است
هر قراردادی که برای هدف استاندارد باشد. اگر کنوانسیون استانداردی وجود نداشته باشد،
GCC به طور پیش فرض روی است -fpcc-struct-return، به جز در اهدافی که GCC اصلی است
کامپایلر در این موارد، ما می توانیم استاندارد را انتخاب کنیم و کارآمدتر را انتخاب کنیم
ثبت نام جایگزین بازگشت.
هشدار: کد کامپایل شده با -Freg-struct-return سوئیچ باینری سازگار نیست
با کد کامپایل شده با -fpcc-struct-return تعویض. از آن برای مطابقت با یک غیر
رابط باینری برنامه پیش فرض
-fshort-enums
به یک نوع "enum" فقط به همان تعداد بایت که برای محدوده اعلام شده نیاز دارد اختصاص دهید
مقادیر ممکن به طور خاص، نوع "enum" معادل کوچکترین عدد صحیح است
نوعی که فضای کافی دارد.
هشدار: la -fshort-enums سوئیچ باعث می شود GCC کدی تولید کند که باینری نیست
سازگار با کد تولید شده بدون آن سوئیچ. از آن برای مطابقت با یک غیر
رابط باینری برنامه پیش فرض
-fshort-double
برای «دبل» از همان اندازه برای «شناور» استفاده کنید.
هشدار: la -fshort-double سوئیچ باعث می شود GCC کدی تولید کند که باینری نیست
سازگار با کد تولید شده بدون آن سوئیچ. از آن برای مطابقت با یک غیر
رابط باینری برنامه پیش فرض
-fshort-wchar
نادیده گرفتن نوع زیربنایی برای wchar_t به کوتاه بدون امضا INT به جای
پیش فرض برای هدف این گزینه برای ساخت برنامه هایی که تحت آن اجرا می شوند مفید است
شراب.
هشدار: la -fshort-wchar سوئیچ باعث می شود GCC کدی تولید کند که باینری نیست
سازگار با کد تولید شده بدون آن سوئیچ. از آن برای مطابقت با یک غیر
رابط باینری برنامه پیش فرض
-fno-common
در کد C، قرار دادن متغیرهای سراسری اولیه را کنترل می کند. کامپایلرهای یونیکس سی
به طور سنتی تعاریف متعددی از این متغیرها را در موارد مختلف مجاز دانستهاند
واحدهای کامپایل با قرار دادن متغیرها در یک بلوک مشترک. این رفتار است
مشخص شده توسط -fcommon، و پیش فرض برای GCC در اکثر اهداف است. از سوی دیگر،
این رفتار توسط ISO C مورد نیاز نیست و در برخی از اهداف ممکن است دارای سرعت یا کد باشد
جریمه اندازه در مراجع متغیر در -fno-common گزینه مشخص می کند که
کامپایلر باید متغیرهای سراسری اولیه را در بخش داده شی قرار دهد
فایل، به جای تولید آنها به عنوان بلوک های مشترک. این اثر دارد که اگر
همان متغیر (بدون "خارجی") در دو کامپایل مختلف اعلام شده است، شما یک را دریافت می کنید
هنگامی که آنها را پیوند می دهید، خطای چند تعریفی دارند. در این مورد، شما باید با
-fcommon بجای. تدوین با -fno-common برای اهدافی مفید است
عملکرد بهتری را ارائه می دهد، یا اگر می خواهید تأیید کنید که برنامه روی آن کار می کند
سیستمهای دیگری که همیشه با اعلانهای متغیر بدون مقدار اولیه به این روش برخورد میکنند.
-fno-ident
نادیده گرفتن #شناسایی بخشنامه.
-finhibit-size-directive
دستور اسمبلر "size." یا هر چیز دیگری که باعث ایجاد مشکل می شود را خروجی ندهید
اگر تابع در وسط تقسیم شود، و دو نیمه در مکان های دور قرار گیرند
جدا در حافظه این گزینه در هنگام کامپایل استفاده می شود crtstuff.c; شما نباید نیاز داشته باشید
برای استفاده از آن برای هر چیز دیگری
-fverbose-asm
اطلاعات تفسیری اضافی را در کد اسمبلی تولید شده قرار دهید تا بیشتر شود
قابل خواندن این گزینه عموماً فقط برای کسانی کاربرد دارد که واقعاً نیاز به خواندن آن دارند
کد اسمبلی تولید شده (شاید در حین رفع اشکال خود کامپایلر).
-fno-verbose-asm، پیش فرض، باعث حذف اطلاعات اضافی می شود و است
هنگام مقایسه دو فایل اسمبلر مفید است.
-فرکورد-gcc-سوئیچ
این سوئیچ باعث می شود که خط فرمان مورد استفاده برای فراخوانی کامپایلر در آن ضبط شود
فایل شی که در حال ایجاد است. این سوئیچ فقط روی برخی اجرا می شود
اهداف و فرمت دقیق ضبط فرمت فایل هدف و باینری است
وابسته است، اما معمولاً به شکل یک بخش حاوی متن ASCII است. این
سوئیچ مربوط به -fverbose-asm سوئیچ، اما آن سوئیچ فقط ضبط می کند
اطلاعات موجود در فایل خروجی اسمبلر به صورت کامنت است، بنابراین هرگز به شیء نمی رسد
فایل. همچنین ببینید -سوئیچهای grecord-gcc برای روش دیگری برای ذخیره گزینه های کامپایلر در
فایل شی
-fpic
ایجاد کد مستقل از موقعیت (PIC) مناسب برای استفاده در یک کتابخانه مشترک، اگر
برای ماشین هدف پشتیبانی می شود. چنین کدی از طریق a به تمام آدرس های ثابت دسترسی دارد
جدول افست جهانی (GOT). لودر پویا ورودی های GOT را زمانی که
برنامه شروع می شود (لودر پویا بخشی از GCC نیست، بلکه بخشی از عملیات است
سیستم). اگر اندازه GOT برای فایل اجرایی پیوند داده شده از حداکثر ماشین خاص بیشتر شود
اندازه، یک پیام خطا از لینک دهنده دریافت می کنید که نشان دهنده آن است -fpic کار نمی کند؛ که در
آن مورد، دوباره کامپایل با -fPIC بجای. (این حداکثرها در SPARC 8k و 32k هستند
در m68k و RS/6000. 386 چنین محدودیتی ندارد.)
کد مستقل از موقعیت به پشتیبانی ویژه نیاز دارد و بنابراین فقط روی آن کار می کند
ماشین های خاص برای 386، GCC از PIC برای سیستم V پشتیبانی می کند اما برای خورشید نه
386i. کد تولید شده برای IBM RS/6000 همیشه مستقل از موقعیت است.
هنگامی که این پرچم تنظیم می شود، ماکروهای "__pic__" و "__PIC__" به 1 تعریف می شوند.
-fPIC
اگر برای ماشین هدف پشتیبانی می شود، کد مستقل از موقعیت، مناسب برای
پیوند پویا و اجتناب از هرگونه محدودیت در اندازه جدول افست جهانی. این
این گزینه در m68k، PowerPC و SPARC تفاوت ایجاد می کند.
کد مستقل از موقعیت به پشتیبانی ویژه نیاز دارد و بنابراین فقط روی آن کار می کند
ماشین های خاص
هنگامی که این پرچم تنظیم می شود، ماکروهای "__pic__" و "__PIC__" به 2 تعریف می شوند.
-fpie
-fPIE
این گزینه ها مشابه هستند -fpic و -fPIC، اما کد مستقل موقعیت را ایجاد کرد
فقط می توان به فایل های اجرایی پیوند داد. معمولا این گزینه ها زمانی استفاده می شوند که - پای GCC
گزینه در هنگام پیوند استفاده می شود.
-fpie و -fPIE هر دو ماکروهای "__pie__" و "__PIE__" را تعریف می کنند. ماکروها دارای
مقدار 1 برای -fpie و 2 برای -fPIE.
-Fno-Jump-Table
از جداول پرش برای دستورهای سوئیچ حتی در جایی که کارآمدتر است استفاده نکنید
نسبت به سایر استراتژی های تولید کد. این گزینه در ارتباط با
-fpic or -fPIC برای ساخت کدی که بخشی از یک پیوند دهنده پویا را تشکیل می دهد و نمی تواند
به آدرس جدول پرش مراجعه کنید. در برخی از اهداف، میزهای پرش نیازی به الف ندارند
GOT و این گزینه مورد نیاز نیست.
-تثبیت شده-REG
ثبت نام را درمان کنید REG به عنوان یک ثبت ثابت؛ کد تولید شده هرگز نباید به آن اشاره کند
آن را (به جز شاید به عنوان نشانگر پشته، نشانگر فریم یا در نقش ثابت دیگری).
REG باید نام یک ثبت نام باشد. نام های ثبت پذیرفته شده مختص ماشین هستند
و در ماکرو "REGISTER_NAMES" در فایل ماکرو توضیحات ماشین تعریف شده اند.
این پرچم شکل منفی ندارد، زیرا انتخاب سه طرفه را مشخص می کند.
-fcall-استفاده شده-REG
ثبت نام را درمان کنید REG به عنوان یک ثبات قابل تخصیص که توسط تابع clobber شده است
تماس می گیرد. ممکن است برای متغیرهای موقت یا متغیرهایی که در سراسر a زندگی نمی کنند اختصاص داده شود
صدا زدن. توابع کامپایل شده با این روش رجیستر را ذخیره و بازیابی نمی کنند REG.
استفاده از این پرچم با نشانگر فریم یا نشانگر پشته یک خطا است. استفاده از این
برای سایر رجیسترها که نقش های فراگیر در اجرای ماشین ثابت کرده اند، پرچم گذاری کنید
مدل نتایج فاجعه بار تولید می کند.
این پرچم شکل منفی ندارد، زیرا انتخاب سه طرفه را مشخص می کند.
-fcall-saved-REG
ثبت نام را درمان کنید REG به عنوان یک ثبات قابل تخصیص که توسط توابع ذخیره می شود. ممکن است
حتی برای متغیرهای موقت یا متغیرهایی که در یک تماس زندگی می کنند اختصاص داده شده است. کارکرد
به این ترتیب رجیستر را ذخیره و بازیابی کنید REG اگر از آن استفاده کنند
استفاده از این پرچم با نشانگر فریم یا نشانگر پشته یک خطا است. استفاده از این
برای سایر رجیسترها که نقش های فراگیر در اجرای ماشین ثابت کرده اند، پرچم گذاری کنید
مدل نتایج فاجعه بار تولید می کند.
نوع متفاوتی از فاجعه ناشی از استفاده از این پرچم برای ثبتی است که در آن
مقادیر تابع ممکن است برگردانده شوند.
این پرچم شکل منفی ندارد، زیرا انتخاب سه طرفه را مشخص می کند.
-fpack-struct[=n]
بدون مقدار مشخص، تمام اعضای سازه را بدون سوراخ در کنار هم قرار دهید. وقتی یک
مقدار مشخص شده است (که باید توان کمی از دو باشد)، اعضای ساختار بسته
با توجه به این مقدار، نشان دهنده حداکثر تراز (یعنی اشیاء با
الزامات تراز پیش فرض بزرگتر از این، خروجی بالقوه بدون تراز در خروجی است
مکان مناسب بعدی
هشدار: la -fpack-struct سوئیچ باعث می شود GCC کدی تولید کند که باینری نیست
سازگار با کد تولید شده بدون آن سوئیچ. علاوه بر این، کد را می سازد
زیرمجموعه. از آن برای مطابقت با یک رابط باینری برنامه غیر پیش فرض استفاده کنید.
-فشار-توابع
فراخوانی ابزار دقیق برای ورود و خروج به توابع ایجاد کنید. درست بعد از عملکرد
ورود و درست قبل از خروج تابع، توابع نمایه سازی زیر با آن فراخوانی می شوند
آدرس تابع فعلی و سایت فراخوانی آن. (در برخی از سکوها،
"__builtin_return_address" فراتر از تابع فعلی کار نمی کند، بنابراین سایت تماس بگیرید
در غیر این صورت ممکن است اطلاعات برای توابع پروفایل در دسترس نباشد.)
void __cyg_profile_func_enter (باطل *this_fn،
void *call_site) ؛
void __cyg_profile_func_exit (باطل *this_fn،
void *call_site) ؛
اولین آرگومان آدرس شروع تابع فعلی است که ممکن است باشد
دقیقاً در جدول نمادها نگاه کرد.
این ابزار دقیق برای توابع گسترش یافته درون خطی در سایر توابع نیز انجام می شود.
فراخوانی های پروفایل نشان می دهد که از نظر مفهومی، تابع درون خطی کجا وارد شده است و
خارج شد. این بدان معنی است که نسخه های آدرس پذیر چنین توابعی باید در دسترس باشند. اگر
تمام استفاده های شما از یک تابع به صورت درون خطی گسترش یافته است، این ممکن است به معنای گسترش اضافی باشد
اندازه کد اگر استفاده می کنید بیرونی خطی در کد C شما، یک نسخه آدرس پذیر از آن
توابع باید ارائه شود. (به هر حال معمولاً چنین است، اما اگر خوش شانس باشید
و بهینهساز همیشه توابع را به صورت درون خطی گسترش میدهد، ممکن است از آن دور شده باشید
بدون ارائه کپی های ثابت.)
ممکن است به یک تابع ویژگی "no_instrument_function" داده شود، در این صورت این است
ابزار دقیق انجام نشده است این را می توان برای مثال برای پروفایل استفاده کرد
توابع ذکر شده در بالا، روتین های وقفه با اولویت بالا، و هر توابعی که از آنها وجود دارد
توابع پروفایل را نمی توان به طور ایمن فراخوانی کرد (شاید کنترل کننده های سیگنال، اگر
روال های پروفایل تولید خروجی یا تخصیص حافظه).
-Finstrument-Functions- لیست-فایل-لیست =پرونده,پرونده، ...
فهرستی از توابع حذف شده از ابزار دقیق را تنظیم کنید (به توضیحات مراجعه کنید
از "-instrument-functions"). اگر فایلی که حاوی یک تعریف تابع است مطابقت دارد
با یکی از پرونده، سپس آن تابع ابزاری نیست. مسابقه در تاریخ انجام می شود
رشته های فرعی: اگر پرونده پارامتر زیر رشته ای از نام فایل است که در نظر گرفته می شود
همسان باشد
مثلا:
-finstrument-functions-exclude-file-list=/bits/stl,include/sys
هر تابع درون خطی تعریف شده در فایل هایی که نام مسیر آنها حاوی "/bits/stl" یا است را حذف می کند
"شامل/sys".
اگر به دلایلی میخواهید حرف '،' را در یکی از آنها اضافه کنید همزاد، نوشتن '،'. برای
به عنوان مثال، "-finstrument-functions-exclude-file-list=',,tmp'" (به نقل قول تکی توجه کنید
اطراف گزینه).
-Finstrument-Functions-Function-Function-List =همزاد,همزاد، ...
این شبیه به "-finstrument-functions-exclude-file-list" است، اما این گزینه تنظیم می شود
لیستی از نام توابع که از ابزار دقیق حذف می شوند. نام تابع به
be matched نام قابل مشاهده کاربر آن است، مانند "بردار blah(بردار const &)"
نه نام مخدوش داخلی (به عنوان مثال، "_Z4blahRSt6vectorIiSaIiEE"). مسابقه انجام شد
در زیر رشته ها: اگر همزاد پارامتر زیر رشته ای از نام تابع است
به عنوان یک مسابقه در نظر گرفته شده است. برای شناسه های توسعه یافته C99 و C++، نام تابع
باید در UTF-8 داده شود، بدون استفاده از نام کاراکترهای جهانی.
-fstack-check
کد ایجاد کنید تا مطمئن شوید که از مرز پشته فراتر نمی روید. شما
اگر در محیطی با چندین رشته در حال اجرا هستید، باید این پرچم را مشخص کنید.
اما شما به ندرت نیاز دارید که آن را در یک محیط تک رشته ای از زمان پشته مشخص کنید
اگر فقط یک پشته وجود داشته باشد، سرریز به طور خودکار در تقریباً همه سیستم ها شناسایی می شود.
توجه داشته باشید که این سوئیچ در واقع باعث بررسی انجام نمی شود. عامل
سیستم یا زمان اجرا زبان باید این کار را انجام دهد. سوئیچ باعث تولید کد می شود
مطمئن شوید که پشته در حال گسترش است.
علاوه بر این می توانید یک پارامتر رشته را مشخص کنید: "no" به معنای عدم بررسی، "عمومی" است.
به معنای اجبار استفاده از چک کردن به سبک قدیمی، "خاص" به معنای استفاده از بهترین بررسی است
روش و معادل برهنه است -fstack-check.
بررسی سبک قدیمی یک مکانیسم عمومی است که نیازی به پشتیبانی هدف خاصی ندارد
کامپایلر اما دارای اشکالات زیر است:
1. استراتژی تخصیص اصلاح شده برای اشیاء بزرگ: آنها همیشه تخصیص داده می شوند
اگر اندازه آنها از یک آستانه ثابت بیشتر شود، به صورت پویا.
2. محدودیت ثابت در اندازه قاب استاتیک توابع: زمانی که با a در بالای آن قرار دارد
عملکرد خاص، چک کردن پشته قابل اعتماد نیست و یک هشدار توسط
گردآورنده
3. ناکارآمدی: به دلیل هر دو استراتژی تخصیص اصلاح شده و عمومی
پیاده سازی، عملکرد کد مختل شده است.
توجه داشته باشید که بررسی پشته به سبک قدیمی نیز روش بازگشتی برای «خاص» است، اگر خیر
پشتیبانی هدف در کامپایلر اضافه شده است.
-fstack-limit-register=REG
-fstack-limit-symbol=همزاد
-fno-stack-limit
کد ایجاد کنید تا مطمئن شوید که پشته از مقدار معینی نیز رشد نمی کند
مقدار یک رجیستر یا آدرس یک نماد. اگر پشته بزرگتر مورد نیاز است، a
سیگنال در زمان اجرا افزایش می یابد. برای اکثر اهداف، سیگنال قبل از پشته بلند می شود
از مرز فراتر می رود، بنابراین می توان سیگنال را بدون گرفتن خاصیت دریافت کرد
موارد احتیاط.
به عنوان مثال، اگر پشته از آدرس مطلق شروع شود 0x80000000 و به سمت پایین رشد می کند،
می توانید از پرچم ها استفاده کنید -fstack-limit-symbol=__stack_limit و
-Wl,--defsym,__stack_limit=0x7ffe0000 برای اعمال محدودیت پشته 128 کیلوبایت. توجه داشته باشید که
این ممکن است فقط با پیوند دهنده گنو کار کند.
-fsplit-stack
برای تقسیم خودکار پشته قبل از سرریز شدن، کد ایجاد کنید. نتیجه
برنامه دارای یک پشته ناپیوسته است که فقط در صورتی می تواند سرریز شود که برنامه قادر به انجام آن نباشد
هر حافظه دیگری را اختصاص دهید این برای اجرای برنامه های رشته ای بسیار مفید است
دیگر نیازی به محاسبه اندازه پشته خوب برای استفاده برای هر رشته نیست. این هست
در حال حاضر فقط برای i386 و x86_64 با گنو/لینوکس اجرا شده است.
وقتی کد با -fsplit-stack کد تماس کامپایل شده بدون -fsplit-stack، آنجا
ممکن است فضای پشته زیادی برای اجرای کد دوم در دسترس نباشد. در صورت کامپایل کردن همه
کد، از جمله کد کتابخانه، با -fsplit-stack یک گزینه نیست، پس پیوند دهنده می تواند
این تماس ها را برطرف کنید تا کد بدون کامپایل شود -fsplit-stack همیشه بزرگ است
پشته. پشتیبانی از این در پیوند طلا در نسخه GNU binutils پیاده سازی شده است
2.21 و بعد
-فرار-برآمده
این گزینه و مشابه آن، -fno-Leading-Underscore، به زور راه C را تغییر دهید
نمادها در فایل شی نشان داده می شوند. یکی از کاربردها کمک به پیوند با میراث است
کد اسمبلی
هشدار: la -فرار-برآمده سوئیچ باعث می شود GCC کدی تولید کند که اینطور نیست
باینری سازگار با کد تولید شده بدون آن سوئیچ. از آن برای مطابقت با a استفاده کنید
رابط باینری برنامه غیر پیش فرض همه اهداف پشتیبانی کامل را ارائه نمی دهند
برای این سوئیچ
-ftls-model=مدل
مدل ذخیره سازی thread-local مورد استفاده را تغییر دهید. در مدل استدلال باید یکی از
«جهانی-دینامیک»، «محلی-دینامیک»، «محلی-اجرایی» یا «محلی-اجرایی». توجه داشته باشید که
انتخاب منوط به بهینه سازی است: کامپایلر ممکن است از مدل کارآمدتری برای آن استفاده کند
نمادهایی که خارج از واحد ترجمه قابل مشاهده نیستند، یا اگر -fpic بر روی داده نمی شود
خط فرمان.
پیش فرض بدون -fpic "initial-exec" است. با -fpic پیش فرض است
"جهانی - پویا".
-قابلیت مشاهده=پیش فرض|داخلی|پنهان|محافظت شده
رویت نماد تصویر ELF پیش فرض را روی گزینه مشخص شده تنظیم کنید --- همه نمادها هستند
با این علامت گذاری شده است مگر اینکه در کد لغو شود. استفاده از این ویژگی می تواند بسیار
به طور قابل ملاحظه ای پیوند و زمان بارگذاری کتابخانه های اشیاء مشترک را بهبود می بخشد، بیشتر تولید می کند
کد بهینه سازی شده، صادرات API تقریباً عالی را ارائه می دهد و از برخورد نمادها جلوگیری می کند. این است
به شدت توصیه می شود که از آن در هر شیء مشترکی که توزیع می کنید استفاده کنید.
با وجود نامگذاری، "پیش فرض" همیشه به معنای عمومی است. به عنوان مثال، برای پیوند در دسترس است
در مقابل از خارج از شی مشترک. "محافظت شده" و "داخلی" بسیار بی فایده هستند
در استفاده در دنیای واقعی، بنابراین تنها گزینه رایج دیگر "پنهان" است. پیشفرض
if -قابلیت مشاهده مشخص نشده است "پیش فرض" است، به عنوان مثال، هر نماد را عمومی کنید --- این
رفتار مشابه نسخه های قبلی GCC را ایجاد می کند.
توضیح خوبی در مورد مزایای ارائه شده توسط اطمینان از صحت نمادهای ELF
قابلیت مشاهده توسط "چگونه کتابخانه های مشترک بنویسیم" توسط اولریش درپر (که می تواند
یافت شده درhttp://people.redhat.com/~drepper/>) --- با این حال راه حل برتر ساخته شده است
با این گزینه میتوان مواردی را که در حالت پیشفرض عمومی است علامتگذاری کرد
بهطور پیشفرض چیزها را پنهان کرده و علامتگذاری کنید. این هنجار با DLL ها در ویندوز و
با fvisibility = پنهان و "__ویژگی__ ((قابلیت مشاهده ("پیش فرض")))" به جای
"__declspec(dllexport)" معنایی تقریباً یکسان با نحو یکسان دریافت می کنید.
این یک موهبت بزرگ برای کسانی است که با پروژه های چند پلتفرمی کار می کنند.
برای کسانی که پشتیبانی قابلیت مشاهده را به کد موجود اضافه می کنند، می توانید پیدا کنید #پراگما GCC
دید استفاده این کار به این صورت است که شما اعلانهایی را که میخواهید تنظیم کنید، ضمیمه میکنید
دید برای با (مثلا) #پراگما GCC دید فشار (پنهان) و #پراگما GCC
دید پاپ. به خاطر داشته باشید که نمایان بودن نماد باید مشاهده شود as بخش of la
API رابط قرارداد و بنابراین همه کدهای جدید باید همیشه قابلیت مشاهده را مشخص کنند
پیش فرض نیست. به عنوان مثال، اعلانات فقط برای استفاده در DSO محلی باید همیشه
برای جلوگیری از هزینه های غیرمستقیم PLT به طور واضح به عنوان مخفی علامت گذاری شود---با این کار
واضح بودن بسیار به خوانایی و مستندسازی کد کمک می کند. توجه داشته باشید که
با توجه به الزامات مشخصات ISO C++، "اپراتور جدید" و "حذف اپراتور" باید
همیشه از دید پیش فرض باشد.
توجه داشته باشید که هدرهای خارج از پروژه شما، به ویژه هدرهای سیستم و
سرصفحه های هر کتابخانه دیگری که استفاده می کنید، ممکن است انتظار نداشته باشید که با آنها کامپایل شوند
دید غیر از حالت پیش فرض شاید لازم باشد به صراحت بگویید #پراگما GCC
دید فشار (پیشفرض) قبل از درج چنین هدرهایی
بیرونی اعلامیه ها تحت تاثیر قرار نمی گیرند -قابلیت مشاهده، بنابراین تعداد زیادی کد می تواند باشد
دوباره کامپایل شده با fvisibility = پنهان بدون هیچ تغییری با این حال، این بدان معنی است که
فراخوانی به توابع "خارجی" بدون دید واضح از PLT استفاده می کند، بنابراین بیشتر است
برای استفاده از "__ویژگی ((قابلیت مشاهده))" و/یا "#pragma نمایان بودن شورای همکاری خلیج فارس" موثر است.
کامپایلر که اعلانهای "خارجی" باید به عنوان مخفی تلقی شوند.
توجه داشته باشید که -قابلیت مشاهده بر موجودیت های پیوند مبهم C++ تأثیر می گذارد. این بدان معنی است که، برای
به عنوان مثال، یک کلاس استثنایی که بین DSO پرتاب می شود باید به صراحت علامت گذاری شود
با دید پیش فرض به طوری که type_info گره ها بین DSO ها متحد می شوند.
مروری بر این تکنیک ها، مزایای آن ها و نحوه استفاده از آن ها در اینجا آمده است
<http://gcc.gnu.org/wiki/Visibility>.
-fstrict-volatile-bitfields
این گزینه باید در صورت دسترسی به فیلدهای بیت فرار (یا ساختارهای دیگر) استفاده شود
فیلدها، اگرچه کامپایلر معمولاً به هر حال آن انواع را ارج نهاده است) باید از یک تک استفاده کند
دسترسی به عرض نوع میدان، در صورت امکان به تراز طبیعی تراز شود.
به عنوان مثال، اهداف با رجیسترهای جانبی نقشهبرداری شده با حافظه ممکن است به همه این موارد نیاز داشته باشند
دسترسی به عرض 16 بیت. با این پرچم می توانید تمام فیلدهای بیتی محیطی را اعلام کنید
به عنوان "کوتاه بدون علامت" (با فرض اینکه کوتاه 16 بیت در این اهداف است) برای مجبور کردن GCC به استفاده از
دسترسی های 16 بیتی به جای دسترسی 32 بیتی کارآمدتر.
اگر این گزینه غیرفعال باشد، کامپایلر از کارآمدترین دستورالعمل استفاده می کند. در
مثال قبلی، ممکن است یک دستورالعمل بار 32 بیتی باشد، حتی اگر دسترسی داشته باشد
بایت هایی که حاوی هیچ بخشی از فیلد بیت یا رجیسترهای نگاشت شده با حافظه نیستند
نامربوط به موردی که به روز می شود.
در برخی موارد، مانند زمانی که ویژگی "packed" به یک فیلد ساختار اعمال می شود، آن را
ممکن است دسترسی به فیلد با یک خواندن یا نوشتن صحیح امکان پذیر نباشد
برای ماشین هدف تراز شده است. در این مورد GCC به تولید چندگانه بازمی گردد
به جای کدی که نتیجه را در زمان اجرا خطا یا کوتاه می کند، به آن دسترسی پیدا می کند.
توجه: به دلیل محدودیت های مدل حافظه C/C++11، دسترسی به نوشتن مجاز نیست
برای لمس اعضای غیر میدان بیتی. بنابراین توصیه می شود همه بیت ها را تعریف کنید
نوع فیلد به عنوان اعضای میدان بیتی.
مقدار پیش فرض این گزینه توسط رابط باینری برنامه تعیین می شود
پردازنده هدف
-fsync-libcalls
این گزینه کنترل می کند که آیا هر نمونه خارج از خط خانواده "__sync" از
توابع ممکن است برای پیاده سازی خانواده توابع "__atomic" C++11 استفاده شوند.
مقدار پیش فرض این گزینه فعال است، بنابراین تنها شکل مفید گزینه است
is -fno-sync-libcalls. این گزینه در پیاده سازی استفاده می شود لیباتومیک
کتابخانه زمان اجرا
محیط زیست
این بخش چندین متغیر محیطی را توصیف می کند که بر نحوه عملکرد GCC تأثیر می گذارد. مقداری
از آنها با تعیین دایرکتوری ها یا پیشوندهایی برای استفاده در هنگام جستجوی انواع مختلف کار می کنند
از فایل ها برخی برای مشخص کردن سایر جنبههای محیط کامپایل استفاده میشوند.
توجه داشته باشید که می توانید مکان هایی را برای جستجو با استفاده از گزینه هایی مانند -B, -I و -L.
این موارد بر مکانهایی که با استفاده از متغیرهای محیطی مشخص شدهاند، اولویت دارند
بر مواردی که توسط پیکربندی GCC مشخص شده است اولویت دارند.
زبان
LC_CTYPE
LC_MESSAGES
LC_ALL
این متغیرهای محیطی نحوه استفاده GCC از اطلاعات محلی سازی را کنترل می کنند
که به GCC اجازه می دهد تا با کنوانسیون های ملی مختلف کار کند. GCC منطقه را بازرسی می کند
دسته LC_CTYPE و LC_MESSAGES اگر برای این کار پیکربندی شده باشد. این محلی
دسته ها را می توان به هر مقداری که توسط نصب شما پشتیبانی می شود تنظیم کرد. یک مقدار معمولی است
en_GB.UTF-8 برای انگلیسی در بریتانیا کدگذاری شده در UTF-8.
La LC_CTYPE متغیر محیطی طبقه بندی کاراکترها را مشخص می کند. GCC از آن استفاده می کند
تعیین مرزهای کاراکتر در یک رشته؛ این برای چند بایت مورد نیاز است
رمزگذاری هایی که حاوی کاراکترهای نقل قول و فرار هستند که در غیر این صورت به عنوان a تفسیر می شوند
انتهای رشته یا گریز
La LC_MESSAGES متغیر محیطی زبان مورد استفاده در تشخیص را مشخص می کند
پیام ها.
اگر LC_ALL متغیر محیطی تنظیم شده است، مقدار آن را لغو می کند LC_CTYPE و
LC_MESSAGES؛ در غیر این صورت، LC_CTYPE و LC_MESSAGES به طور پیش فرض به مقدار زبان
متغیر محیطی. اگر هیچ یک از این متغیرها تنظیم نشده باشد، GCC به طور پیش فرض روی حالت سنتی قرار می گیرد
ج رفتار انگلیسی
TMPDIR
If TMPDIR تنظیم شده است، دایرکتوری مورد استفاده برای فایل های موقت را مشخص می کند. GCC استفاده می کند
فایل های موقت برای نگهداری خروجی یک مرحله از کامپایل که قرار است به عنوان استفاده شود
ورودی به مرحله بعدی: به عنوان مثال، خروجی پیش پردازنده، که عبارت است از
ورودی به کامپایلر مناسب
gcc_compare_debug
محیط gcc_compare_debug تقریبا معادل پاس کردن است -fcompare-debug به
درایور کامپایلر برای جزئیات بیشتر به مستندات این گزینه مراجعه کنید.
GCC_EXEC_PREFIX
If GCC_EXEC_PREFIX تنظیم شده است، پیشوندی را برای استفاده در نام های تعیین می کند
زیربرنامه هایی که توسط کامپایلر اجرا می شوند. هنگامی که این پیشوند ترکیب می شود، هیچ اسلشی اضافه نمی شود
با نام یک زیربرنامه، اما می توانید پیشوندی را مشخص کنید که با علامت اسلش به پایان می رسد اگر
شما آرزو دارید
If GCC_EXEC_PREFIX تنظیم نشده است، GCC تلاش می کند پیشوند مناسبی برای استفاده پیدا کند
بر اساس نام مسیری که با آن فراخوانی می شود.
اگر GCC نتواند زیربرنامه را با استفاده از پیشوند مشخص شده پیدا کند، سعی می کند در آن جستجو کند
مکان های معمول برای زیربرنامه
مقدار پیش فرض از GCC_EXEC_PREFIX is پیشوند/lib/gcc/ جایی که پیشوند پیشوند است
کامپایلر نصب شده در خیلی از موارد پیشوند مقدار "پیشوند" در هنگام اجرا است
پیکربندی اسکریپت
سایر پیشوندهای مشخص شده با -B بر این پیشوند ارجحیت دارد.
این پیشوند برای یافتن فایل هایی مانند crt0.o که برای پیوند استفاده می شود.
علاوه بر این، پیشوند به روشی غیرمعمول در یافتن دایرکتوری های مورد جستجو استفاده می شود
برای فایل های هدر برای هر یک از دایرکتوری های استاندارد که نام آنها معمولا شروع می شود
با /usr/local/lib/gcc (به طور دقیق تر، با ارزش GCC_INCLUDE_DIR، GCC تلاش می کند
جایگزین کردن آن با پیشوند مشخص شده برای تولید یک فهرست جایگزین
نام. بنابراین، با -بفو/، جستجوهای GCC فو / بار درست قبل از اینکه استاندارد را جستجو کند
فهرست راهنما /usr/local/lib/bar. اگر یک دایرکتوری استاندارد با پیکربندی شده شروع شود
پیشوند سپس ارزش پیشوند جایگزین شده است GCC_EXEC_PREFIX هنگامی که به دنبال هدر هستید
فایل های.
COMPILER_PATH
ارزش COMPILER_PATH فهرستی از دایرکتوری ها که با دو نقطه جدا شده است، بسیار شبیه به PATH.
GCC در صورت عدم امکان، دایرکتوری های مشخص شده را هنگام جستجوی زیربرنامه ها امتحان می کند
زیربرنامه ها را با استفاده از GCC_EXEC_PREFIX.
LIBRARY_PATH
ارزش LIBRARY_PATH فهرستی از دایرکتوری ها که با دو نقطه جدا شده است، بسیار شبیه به PATH.
هنگامی که به عنوان یک کامپایلر بومی پیکربندی می شود، GCC دایرکتوری هایی را که به این ترتیب مشخص شده است، امتحان می کند
جستجو برای فایل های پیوند دهنده خاص، در صورتی که با استفاده از آنها نتواند آنها را پیدا کند GCC_EXEC_PREFIX.
پیوند با استفاده از GCC همچنین از این دایرکتوری ها هنگام جستجوی کتابخانه های معمولی استفاده می کند
برای -l گزینه (اما دایرکتوری های مشخص شده با -L اول بیا).
زبان
این متغیر برای ارسال اطلاعات محلی به کامپایلر استفاده می شود. یک راه که در آن
این اطلاعات برای تعیین مجموعه کاراکتر مورد استفاده در هنگام کاراکتر استفاده می شود
literals، string literals و comments در C و C++ تجزیه می شوند. زمانی که کامپایلر است
پیکربندی شده است تا به کاراکترهای چند بایتی اجازه دهد، مقادیر زیر برای زبان هستند
شناسایی شده:
C-JIS
شخصیت های JIS را بشناسید.
C-SJIS
شخصیت های SJIS را بشناسید.
C-EUCJP
شخصیت های EUCJP را بشناسید.
If زبان تعریف نشده است، یا اگر مقدار دیگری دارد، کامپایلر از "mblen" استفاده می کند.
و "mbtowc" همانطور که توسط محلی پیش فرض برای شناسایی و ترجمه چند بایت تعریف شده است
کاراکتر باشد.
برخی از متغیرهای محیطی اضافی بر رفتار پیش پردازنده تأثیر می گذارند.
CPATH
C_INCLUDE_PATH
cplus_include_path
OBJC_INCLUDE_PATH
مقدار هر متغیر فهرستی از دایرکتوری ها است که با یک کاراکتر خاص از هم جدا شده اند
پسندیدن PATH، که در آن به دنبال فایل های هدر بگردید. شخصیت خاص،
"PATH_SEPARATOR" وابسته به هدف است و در زمان ساخت GCC تعیین می شود. برای مایکروسافت
اهداف مبتنی بر ویندوز یک نقطه ویرگول است و تقریباً برای همه اهداف دیگر یک است
روده بزرگ
CPATH فهرستی از دایرکتوریها را مشخص میکند که گویی با آنها مشخص شده است -I، اما
پس از هر مسیر داده شده با -I گزینه های موجود در خط فرمان این متغیر محیطی
بدون توجه به اینکه کدام زبان در حال پیش پردازش است استفاده می شود.
متغیرهای محیطی باقیمانده فقط هنگام پیش پردازش یک مورد خاص اعمال می شوند
زبان نشان داده شده است. هر کدام فهرستی از دایرکتوری ها را مشخص می کند که باید جستجو شوند
مشخص شده با -سیستم، اما پس از هر مسیر داده شده با -سیستم گزینه های موجود در
خط فرمان.
در تمام این متغیرها، یک عنصر خالی به کامپایلر دستور می دهد تا جریان خود را جستجو کند
دایرکتوری کار عناصر خالی می توانند در ابتدا یا انتهای یک مسیر ظاهر شوند. برای
به عنوان مثال، اگر مقدار CPATH ":/special/include" است که همان اثر را دارد
-NS. -I/ویژه/شامل.
DEPENDENCIES_OUTPUT
اگر این متغیر تنظیم شده باشد، مقدار آن نحوه خروجیسازی وابستگیها را برای Make based مشخص میکند
روی فایلهای هدر غیر سیستمی که توسط کامپایلر پردازش میشوند. فایل های هدر سیستم هستند
در خروجی وابستگی نادیده گرفته شده است.
ارزش DEPENDENCIES_OUTPUT می تواند فقط یک نام فایل باشد، در این صورت قوانین Make
با حدس زدن نام هدف از روی نام فایل منبع، روی آن فایل نوشته می شوند. یا
مقدار می تواند فرم داشته باشد پرونده هدف، در این صورت قوانین در فایل نوشته می شوند پرونده
با استفاده از هدف به عنوان نام هدف
به عبارت دیگر، این متغیر محیطی معادل ترکیب گزینه ها است -مامان
و -MF، با اختیاری -MT سوئیچ نیز
SUNPRO_DEPENDENCIES
این متغیر همان است DEPENDENCIES_OUTPUT (به بالا مراجعه کنید)، به جز آن سیستم
فایلهای هدر نادیده گرفته نمیشوند، بنابراین دلالت دارد -M به جای -مامان. با این حال
وابستگی به فایل ورودی اصلی حذف شده است.
از powerpc-linux-gnu-g++-4.9 به صورت آنلاین با استفاده از خدمات onworks.net استفاده کنید