นี่คือคำสั่ง aarch64-linux-gnu-g++-4.8 ที่สามารถเรียกใช้ในผู้ให้บริการโฮสติ้งฟรีของ OnWorks โดยใช้หนึ่งในเวิร์กสเตชันออนไลน์ฟรีของเรา เช่น Ubuntu Online, Fedora Online, โปรแกรมจำลองออนไลน์ของ Windows หรือโปรแกรมจำลองออนไลน์ของ MAC OS
โครงการ:
ชื่อ
gcc - คอมไพเลอร์โปรเจ็กต์ GNU C และ C++
เรื่องย่อ
จีซีซี [-c|-S|-E] [-std=มาตรฐาน]
[-g] [หน้า] [-Oระดับ]
[-Wเตือน... ] [-Wpedantic]
[-Idir... ] [-Ldir... ]
[-Dแมโคร[=ป้องกัน--Uแมโคร]
[-fตัวเลือก... ] [-mตัวเลือกเครื่อง... ]
[-o ออกจากไฟล์-ไฟล์] แฟ้ม...
เฉพาะตัวเลือกที่มีประโยชน์ที่สุดเท่านั้นที่แสดงไว้ที่นี่ ดูด้านล่างสำหรับส่วนที่เหลือ g ++ ยอมรับ
ส่วนใหญ่ตัวเลือกเดียวกับ gcc.
DESCRIPTION
เมื่อคุณเรียกใช้ GCC โดยปกติจะทำการประมวลผลล่วงหน้า คอมไพล์ แอสเซมบลี และลิงก์
"ตัวเลือกโดยรวม" อนุญาตให้คุณหยุดกระบวนการนี้ในระยะกลาง สำหรับ
ตัวอย่างเช่น -c ตัวเลือกบอกว่าจะไม่เรียกใช้ตัวเชื่อมโยง จากนั้นผลลัพธ์จะประกอบด้วยวัตถุ
ไฟล์ที่ส่งออกโดยแอสเซมเบลอร์
ตัวเลือกอื่นๆ จะถูกส่งต่อไปยังขั้นตอนหนึ่งของการประมวลผล บางตัวเลือกควบคุม
ตัวประมวลผลล่วงหน้าและอื่น ๆ ที่คอมไพเลอร์เอง ยังมีตัวเลือกอื่นๆ ที่ควบคุมแอสเซมเบลอร์และ
ลิงเกอร์; สิ่งเหล่านี้ส่วนใหญ่ไม่ได้ระบุไว้ที่นี่ เนื่องจากคุณแทบไม่ต้องใช้เลย
ตัวเลือกบรรทัดคำสั่งส่วนใหญ่ที่คุณสามารถใช้กับ GCC นั้นมีประโยชน์สำหรับโปรแกรม C; เมื่อไร
ตัวเลือกมีประโยชน์กับภาษาอื่นเท่านั้น (โดยปกติคือ C ++) คำอธิบายบอกว่าดังนั้น
อย่างชัดเจน หากคำอธิบายสำหรับตัวเลือกใดตัวเลือกหนึ่งไม่ระบุแหล่งที่มา
ภาษา คุณสามารถใช้ตัวเลือกนั้นกับภาษาที่รองรับทั้งหมด
โครงการ gcc โปรแกรมยอมรับตัวเลือกและชื่อไฟล์เป็นตัวถูกดำเนินการ หลายตัวเลือกมีหลาย-
ชื่อตัวอักษร; ดังนั้นตัวเลือกตัวอักษรเดี่ยวหลายตัวอาจ ไม่ จัดกลุ่ม: -dv เป็นอย่างมาก
แตกต่างจาก -d -v.
คุณสามารถผสมตัวเลือกและอาร์กิวเมนต์อื่นๆ ได้ ลำดับที่คุณใช้ส่วนใหญ่ไม่
เรื่อง. คำสั่งซื้อมีความสำคัญเมื่อคุณใช้ตัวเลือกหลายประเภทในประเภทเดียวกัน ตัวอย่างเช่น if
คุณระบุ -L มากกว่าหนึ่งครั้ง ไดเร็กทอรีจะถูกค้นหาตามลำดับที่ระบุ อีกด้วย,
ตำแหน่งของ -l ตัวเลือกมีความสำคัญ
หลายตัวเลือกมีชื่อยาวขึ้นต้นด้วย -f หรือกับ -W---ตัวอย่างเช่น,
-fmove-loop-ค่าคงที่, -Wรูปแบบ และอื่นๆ ส่วนใหญ่มีทั้งด้านบวกและด้านลบ
แบบฟอร์ม; รูปแบบเชิงลบของ -foo is -fno-ฟู. คู่มือนี้จัดทำเอกสารเพียงฉบับเดียวเท่านั้น
สองรูปแบบ แล้วแต่ว่ารูปแบบใดไม่ใช่ค่าเริ่มต้น
OPTIONS
ตัวเลือกเสริม (Option) สรุป
นี่คือข้อมูลสรุปของตัวเลือกทั้งหมด โดยจัดกลุ่มตามประเภท คำอธิบายอยู่ในต่อไปนี้
ส่วน
ทั้งหมด Options
-c -S -E -o ไฟล์ -ไม่มีบัญญัติ-คำนำหน้า -ท่อ -รหัสผ่าน-ออก-รหัส -x language -v
- --ช่วยด้วย[=ชั้น[...]] --เป้าหมาย-ช่วยเหลือ --รุ่น -เครื่องห่อ @ไฟล์ -fปลั๊กอิน=ไฟล์
-fplugin-หาเรื่อง-ชื่อ=หาเรื่อง -fdump-ada-ข้อมูลจำเพาะ[-บาง] -fada-spec-parent=หน่วย
-fdump-go-ข้อมูลจำเพาะ=ไฟล์
C ภาษา Options
-แอนซี -std=มาตรฐาน -fgnu89-อินไลน์ -aux-ข้อมูล ชื่อไฟล์
-fallow-parameterless-variadic-ฟังก์ชั่น -fno-asm -fno-ในตัว -fno-ในตัว-ฟังก์ชัน
- เป็นเจ้าภาพ - อิสระ -fopenmp -fms-ส่วนขยาย -fplan9-ส่วนขยาย -ไตรกราฟ
สไตล์ทรง -แบบดั้งเดิม-cpp -ฟอลโล-เดียว-ความแม่นยำ -fcond-ไม่ตรงกัน
-flax-เวกเตอร์การแปลง -fsigned-บิตฟิลด์ -fsigned-ถ่าน -funsigned-บิตฟิลด์
-funsigned-ถ่าน
C + + ภาษา Options
-fabi-เวอร์ชั่น=n -fno-การเข้าถึง-การควบคุม -fcheck-ใหม่ -fconstexpr-ความลึก=n
-ffriend-ฉีด -fno-elide-ตัวสร้าง -fno-enforce-eh-ข้อมูลจำเพาะ -ffor-ขอบเขต
-fno-for-ขอบเขต -fno-gnu-คำหลัก -fno-โดยนัย-เทมเพลต
-fno-implicit-inline-เทมเพลต -fno-ใช้อินไลน์ -fms-ส่วนขยาย
-fno-nonansi-บิวอิน -fnothrow-เลือก -fno-ชื่อผู้ประกอบการ -fno-ตัวเลือก-diags
-fอนุญาต -fno-สวย-แม่แบบ -เฟรโป -fno-rti -fstats
-f template-backtrace-limit=n -ftemplate-deep=n -fno-threadsafe-สถิติ
-ฟิวส์-cxa-atexit -fno-อ่อนแอ -nostdinc++ -fno-default-อินไลน์
-fvisibility-inline-ซ่อน -fvisibility-ms-เข้ากันได้ -fext-ตัวเลข-ตัวอักษร -วาบิ
-Wconversion-null -Wctor-dtor-ความเป็นส่วนตัว -Wdelete-ไม่ใช่เสมือน-dtor -Wliteral-ต่อท้าย
-การหดตัว -ไม่ยกเว้น -Wnon-เสมือน-dtor - สั่งของ -เวฟเอฟซี++ -Wstrict-null-แมวมอง
-Wno-ไม่ใช่แม่แบบ-เพื่อน -Wold-สไตล์หล่อ -Woverloaded-เสมือน -Wno-pmf-การแปลง
-Wsign-โปรโมชั่น
Objective-C และ วัตถุประสงค์-C++ ภาษา Options
-fconstant-string-คลาส=ชื่อคลาส -fgnu-รันไทม์ -fnext-รันไทม์ -fno-nil-เครื่องรับ
-fobjc-abi-รุ่น=n -FOBJC-CALL-CXX-CDTORS -fobjc-ส่งตรง -fobjc-ข้อยกเว้น
-fobjc-gc -fobjc-nilcheck -fobjc-std=objc1 -freplace-objc-คลาส -fzero-ลิงค์
-gen-ประกาศ -Wassign-สกัดกั้น -Wno-โปรโตคอล -Wตัวเลือก -Wstrict-ตัวเลือกการแข่งขัน
-Wundeclared-ตัวเลือก
ภาษา อิสระ Options
-fmessage-ความยาว=n -fdiagnostics-แสดงตำแหน่ง=[ครั้งเดียว|ทุกบรรทัด]
-fno-diagnostics-แสดงตัวเลือก -fno-diagnostics-show-caret
การเตือน Options
-fsyntax เท่านั้น -fmax-ข้อผิดพลาด=n -Wpedantic -pedantic-ข้อผิดพลาด -w -เว็กซ์ตร้า -ผนัง
-Waddress -Waggregate-กลับ -Waggressive-ห่วง-การเพิ่มประสิทธิภาพ -Warray ขอบเขต
-Wno-แอตทริบิวต์ -Wno-builtin-มาโครกำหนดใหม่ -Wc++-เข้ากันได้กับ -Wc++11-เข้ากันได้ -Wcast-จัดตำแหน่ง
-Wcast-คุณภาพ -Wchar-ตัวห้อย - อุดตัน -ความคิดเห็น -Wแปลง -Wcoverage-ไม่ตรงกัน
-Wno-cpp -Wno-เลิกใช้ -Wno-เลิกใช้-ประกาศ -Wdisabled-เพิ่มประสิทธิภาพ
-Wno-div-by-ศูนย์ -Wdouble-โปรโมชั่น -ร่างกายเปียกปอน -Wenum-เปรียบเทียบ -Wno-endif-ป้ายกำกับ
- ผิดพลาด -ข้อผิดพลาด=* -Wfatal-ข้อผิดพลาด -Wfloat-เท่ากับ -Wรูปแบบ -Wรูปแบบ=2
-Wno-format-contain-nul -Wno-รูปแบบพิเศษหาเรื่อง -Wformat-ไม่ใช่ตัวอักษร -Wformat-การรักษาความปลอดภัย
-Wformat-y2k -Wframe-ขนาดใหญ่กว่า=len -Wno-free-nonheap-วัตถุ -Wjump-คิดถึง-init
-Wignored-รอบคัดเลือก -วิปริต -Wimplicit-ฟังก์ชั่น-การประกาศ -Wimplicit-int
-Winit-ตัวเอง -วินไลน์ -Wmaybe-ไม่ได้กำหนดค่าเริ่มต้น -Wno-int-to-pointer-cast
-Wno-ไม่ถูกต้อง offsetof -Winvalid-pc - ใหญ่กว่า =len -Wunsafe-loop-การเพิ่มประสิทธิภาพ
-Wlogic-สหกรณ์ -ยาว-ยาว -Wเมน -Wmaybe-ไม่ได้กำหนดค่าเริ่มต้น -Wmissing-เหล็กดัดฟัน
-Wmissing ฟิลด์เริ่มต้น -Wmissing-รวม-dirs -Wno-แผ่นกันโคลน -Wno-มัลติชาร์
-Wไม่เป็นโมฆะ -Wno-ล้น -Woverlength-สตริง -บรรจุห่อ -Wpacked-bitfield-เข้ากันได้
- หุ้มเบาะ -วงเล็บ -Wpedantic-ms-รูปแบบ -Wno-อวดดี-ms-รูปแบบ -Wpointer-อริธ
-Wno-ตัวชี้ไปยัง int-cast -Wredundant-decl -Wno-กลับ-ท้องถิ่น-addr -Wreturn-ประเภท
-Wsequence จุด -เงา -Wsign-เปรียบเทียบ -Wsign-แปลง
-Wsizeof-ตัวชี้-memaccess -Wstack ป้องกัน -Wstack-การใช้งาน=len -Wstrict-นามแฝง
-Wstrict-นามแฝง=n -Wstrict-ล้น -Wstrict-ล้น=n
-Wsuggest-แอตทริบิวต์=[บริสุทธิ์|const|นอร์เทิร์น|รูป] -Wmissing รูปแบบแอตทริบิวต์ -สวิตช์
-Wswitch-ค่าเริ่มต้น -Wswitch-enum -Wsync-nand -Wsystem-ส่วนหัว -แทรมโพลีน
-Wtrigraphs -Wtype-จำกัด -วันเดฟ - กำหนดค่าเริ่มต้น -Wunknown-pragmas -Wno-ปรากมาส
-Wunsuffixed-ลอยคงที่ - ใช้งานไม่ได้ -Wunused-ฟังก์ชั่น -Wunused-ฉลาก
-Wunused-local-typedefs -Wunused-พารามิเตอร์ -Wno-ไม่ได้ใช้-ผลลัพธ์ -Wunused-ค่า
-Wunused-ตัวแปร -Wunused-แต่-ตั้งค่า-พารามิเตอร์ -Wunused-แต่-ตั้งค่า-ตัวแปร -Wuseless-โยน
-Wvariadic-มาโคร -Wvector-การทำงาน-ประสิทธิภาพ -วลา -Wvolatile-ลงทะเบียน-var
-Wwrite-สตริง -Wzero-as-null-ตัวชี้-ค่าคงที่
C และ วัตถุประสงค์-C-เท่านั้น การเตือน Options
-Wbad-ฟังก์ชั่น-cast -Wmissing-ประกาศ -Wmissing-พารามิเตอร์-type
-Wmissing-ต้นแบบ -Wnested-ภายนอก -Wold-style-ประกาศ -Wold-สไตล์-นิยาม
-Wstrict-ต้นแบบ -แบบดั้งเดิม -Wtraditional-การแปลง
-Wdeclaration-หลังคำสั่ง -Wpointer-สัญญาณ
การแก้จุดบกพร่อง Options
-dตัวอักษร -dumpspec -เครื่องทิ้งขยะ - การถ่ายโอนข้อมูล -fฆ่าเชื้อ=สไตล์ -fdbg-cnt-รายการ
-fdbg-cnt=รายการค่าเคาน์เตอร์ -fdisable-ipa-รหัสผ่าน_ชื่อ -fdisable-rtl-รหัสผ่าน_ชื่อ
-fdisable-rtl-ชื่อรหัสผ่าน=ช่วงรายการ -fdisable-ต้นไม้-รหัสผ่าน_ชื่อ -fdisable-ต้นไม้-ผ่าน-
ชื่อ=ช่วงรายการ -fdump-noaddr -fdump-ไม่มีหมายเลข -fdump-unnumbered-ลิงค์
-fdump-translation-หน่วย[-n] -fdump-คลาส-ลำดับชั้น[-n] -fdump-ipa-ทั้งหมด
-fdump-ipa-cgraph -fdump-ipa-อินไลน์ -fdump-ผ่าน -fdump-สถิติ -fdump ต้นไม้ทั้งหมด
-fdump-tree-ดั้งเดิม[-n] -fdump-tree-ปรับให้เหมาะสม[-n] -fdump-ต้นไม้-cfg -fdump-tree-นามแฝง
-fdump-ต้นไม้-ช -fdump-ต้นไม้-ssa[-n] -fdump-ต้นไม้-pre[-n] -fdump ต้นไม้ CCP[-n]
-fdump-ต้นไม้-dce[-n] -fdump-ต้นไม้-gimple[-ดิบ] -fdump-ต้นไม้โคลน[-n]
-fdump-ต้นไม้-dom[-n] -fdump-ต้นไม้-dse[-n] -fdump-ต้นไม้-phiprop[-n] -fdump-ต้นไม้-phiopt[-n]
-fdump ต้นไม้ forwprop[-n] -fdump-ต้นไม้-copyrename[-n] -fdump-ต้นไม้-nrv -fdump ต้นไม้เวกเตอร์
-fdump-ต้นไม้อ่างล้างจาน -fdump-ต้นไม้-สระ[-n] -fdump ต้นไม้ forwprop[-n] -fdump-ต้นไม้ฟรี[-n]
-fdump-ต้นไม้-vrp[-n] -ftree-vectorizer-verbose=n -fdump-ต้นไม้-storeccp[-n]
-fdump-final-insns=ไฟล์ -fcompare-debug[=ตัวเลือก] -fcompare-debug-วินาที
-felimate-dwarf2-dups -fno-กำจัด-ไม่ได้ใช้-debug-types
-felimate-ไม่ได้ใช้-debug-symbols -femit-class-debug-เสมอ -เฟเนเบิล-ชนิด-ส่ง
-เฟเนเบิล-ชนิด-ส่ง=ช่วงรายการ -fdebug-ประเภทส่วน -fmem-รายงาน-wpa -fmem-รายงาน
-fpre-ipa-mem-รายงาน -fpost-ipa-mem-รายงาน -fprofile-ส่วนโค้ง -fopt-ข้อมูล
-fopt-ข้อมูล-ตัวเลือก[=ไฟล์] -frandom-seed=เชือก -fsched-รายละเอียด=n -fsel-กำหนด-รายละเอียด
-fsel-กำหนดการการถ่ายโอนข้อมูล-cfg -fsel-sched-pipelining-รายละเอียด -fstack-การใช้งาน -ftest-ครอบคลุม
-ftime-รายงาน -fvar-ติดตาม -fvar-การติดตามการมอบหมาย
-fvar-การติดตามการมอบหมายสลับ -g -gระดับ -gtoggle -gcoff -คนแคระ-รุ่น -ggdb
-grecord-gcc-สวิตช์ -gno-record-gcc-สวิตช์ -gstabs -gstabs+ -gstrict-คนแคระ
-gno-เข้มงวด-คนแคระ -gvms -gxcoff -gxcoff+ -fno-merge-debug-strings
-fno-dwarf2-cfi-asm -fdebug-คำนำหน้าแผนที่=เก่า=ใหม่ -femit-struct-debug-baseonly
-femit-struct-debug-reduced -femit-struct-debug-รายละเอียด[=รายการข้อมูลจำเพาะ] -p หน้า
-พิมพ์ชื่อไฟล์=ห้องสมุด -print-libgcc-ชื่อไฟล์ -print-หลายไดเรกทอรี
-print-multi-lib -print-multi-os-ไดเรกทอรี -print-prog-name =โครงการ
-พิมพ์-ค้นหา-dirs -Q -พิมพ์-sysroot พิมพ์ sysroot ส่วนหัวต่อท้าย -save-อุณหภูมิ
-บันทึกอุณหภูมิ=cwd -บันทึกอุณหภูมิ=obj -เวลา[=ไฟล์]
การเพิ่มประสิทธิภาพ Options
-faggressive-loop-การเพิ่มประสิทธิภาพ -falign-ฟังก์ชั่น[=n] -falign-กระโดด[=n]
-Falign-Labels [=n] -falign-ลูป[=n] -fassociative-คณิตศาสตร์ -fauto-inc-ธ.ค
-fbranch-ความน่าจะเป็น -fbranch-เป้าหมาย-โหลด-เพิ่มประสิทธิภาพ -fbranch-เป้าหมาย-โหลด-เพิ่มประสิทธิภาพ2
-fbtr-bb-พิเศษ -fcaller-บันทึก -fcheck-ข้อมูล-deps -fombine-stack-adjustments
-fconserve-กอง -fcompare-เอลิม -fcprop-ลงทะเบียน -fcrossjumping -fcse-ติดตามกระโดด
-fcse-ข้ามบล็อก -fcx-fortran-กฎ -fcx-จำกัดช่วง -fdata-ส่วน -fdce
-fdelayed-สาขา -fdelete-null-pointer-ตรวจสอบ -fdevirtualize -fdse -เกรงใจ-inlining
-fipa-sra -การเพิ่มประสิทธิภาพราคาแพง -ffat-lto-วัตถุ -ffast-คณิตศาสตร์ -ffinite-คณิตศาสตร์เท่านั้น
-ลอยเก็บ -fexcess-ความแม่นยำ=สไตล์ -ส่งต่อ-เผยแพร่ -ffp-สัญญา=สไตล์
-ffunction-ส่วน -fgcse -fgcse-หลังรีโหลด -fgcse-ลาส -fgcse-lm
-fgraphite-เอกลักษณ์ -fgcse-เอสเอ็ม -fhoist-adjacent-โหลด -fif-แปลง -fif-การแปลง2
-findirect-inlining -finline-ฟังก์ชั่น -finline-ฟังก์ชั่นที่เรียกว่าครั้งเดียว -finline-จำกัด=n
-finline-small-ฟังก์ชั่น -FIPA-CP -fipa-cp-โคลน -FIPA-PTA -fipa-โปรไฟล์
-fipa-บริสุทธิ์-const -fipa-อ้างอิง -fira-อัลกอริทึม=ขั้นตอนวิธี -fira-ภาค=ภูมิภาค
-fira-hoist-ความดัน -fira-loop-ความดัน -fno-ira-share-save-สล็อต
-fno-ira-share-รั่วไหล-สล็อต -fira-verbose=n -fivopts -fkeep-อินไลน์-ฟังก์ชั่น
-fkeep-คงที่-consts -floop-บล็อก -floop-แลกเปลี่ยน -floop-สตริป-เหมือง
-floop-nest-ปรับให้เหมาะสม -flop-parallelize-ทั้งหมด -flto -flto-บีบอัดระดับ
-flto-พาร์ทิชัน=ALG -flto-รายงาน -fmerge-all-ค่าคงที่ -fmerge-ค่าคงที่
-fmodulo-กำหนดการ -fmodulo-sched-allow-regmoves -fmove-loop-ค่าคงที่ fmudflap
-fmudflapir -fmudflapth -fno-สาขานับ-reg -fno-default-อินไลน์ -fno-defer-ป๊อป
-fno-ฟังก์ชัน-cse -fno-เดา-สาขา-ความน่าจะเป็น -fno-อินไลน์ -fno-คณิตศาสตร์เออร์โน
-fno-ช่องมอง -fno-ช่องมอง2 -fno-กำหนด-interblock -fno-กำหนดการ-ข้อมูลจำเพาะ -fno-ลงนาม-ศูนย์
-fno-toplevel-เรียงลำดับใหม่ -fno-trapping-คณิตศาสตร์ -fno-ศูนย์-เริ่มต้น-in-bss
-fomit-frame-ตัวชี้ -foptimize-ลงทะเบียนย้าย -foptimize-พี่น้อง-โทร
-fpartial-inlining -fpeel-ลูป -fpredictive-ทั่วไป -fprefetch-ลูปอาร์เรย์
-fprofile-รายงาน -fprofile-แก้ไข -fprofile-dir=เส้นทาง -fprofile-สร้าง
-fprofile-สร้าง=เส้นทาง -fprofile-ใช้ -fprofile-use=เส้นทาง -fprofile-ค่า
-freciprocal-คณิตศาสตร์ -ฟรี - เฟรกมูฟ -frename-ลงทะเบียน -freeorder-บล็อก
-freeorder-blocks-and-partition -freeorder-ฟังก์ชั่น -frerun-cse-หลังลูป
-freschedule-modulo-scheduled-ลูป -Founding-คณิตศาสตร์ -fsched2-ใช้-ซุปเปอร์บล็อก
-fsched-ความดัน -fsched-spec-โหลด -fsched-spec-load-อันตราย
-fsched-stalled-insns-dep[= .]n] -fsched-stalled-insns[= .]n] -fsched-group-ฮิวริสติก
-fsched-สำคัญเส้นทาง-ฮิวริสติก -fsched-spec-insn-ฮิวริสติก -fsched-อันดับฮิวริสติก
-fsched-last-insn-ฮิวริสติก -fsched-dep-count-ฮิวริสติก -fschedule-อินน์
-fschedule-insns2 -fsection-สมอ -fselective-การตั้งเวลา -fselective-การตั้งเวลา2
-fsel-sched-pipeling -fsel-sched-pipelining-outer-loop -fshrink-ห่อ
-fsignaling-แนนส์ -fsingle-precision-คงที่ -fsplit-ivs-in-unroller
-fsplit-กว้าง-ประเภท -fstack- ป้องกัน -fstack-protector-ทั้งหมด -fstrict-นามแฝง
-fstrict-ล้น -fthread-กระโดด -รถเทรเซอร์ -ftree-บิต-ccp -ftree-builtin-โทร-dce
-ftree-ccp -ftree-ช -ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree-คัดลอก-prop
-ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse -ftree-forwprop
-ฟรีฟรี -ftree-วน-ถ้า-แปลง -ftree-loop-if-convert-stores -ftree-วน-im
-ftree-piprop -ftree-วน-กระจาย -ftree-loop-กระจายรูปแบบ
-ftree-วน-ivcanon -ftree-วน-เชิงเส้น -ftree-วน-เพิ่มประสิทธิภาพ -ftree-parallelize-ลูป=n
-ftree-ก่อน -ftree-บางส่วน-pre -ftree-พีทีเอ -ftree-reassoc -ftree-อ่างล้างจาน -ftree-slsr
-ftree-สระ -ftree-สวิตช์แปลง -ftree-tail-ผสาน -ftree-ter -ftree- vectorize
-ftree-vrp -สนุกในแต่ละครั้ง -funroll-all-ลูป -funroll-ลูป
-funsafe-loop-การเพิ่มประสิทธิภาพ -funsafe-คณิตศาสตร์-optimizations -funswitch-ลูป
-fvariable-ขยาย-in-unroller -fvect-ต้นทุน-รุ่น -fvpt -fweb -fwhole-โปรแกรม -fwpa
-ฟิวส์-ld=ลิงค์ -ฟิวส์-ลิงเกอร์-ปลั๊กอิน --พารามิเตอร์ ชื่อ=ความคุ้มค่า -O -O0 -O1 -O2 -O3 -คุณ
-Ofast -อ
ตัวประมวลผลล่วงหน้า Options
-Aคำถาม=คำตอบ -NS-คำถาม[=คำตอบ] -C -วว -ดีไอ -ดีเอ็ม -ดีเอ็น -Dแมโคร[=ป้องกัน] -E -H
-idirอาฟเตอร์ dir - รวม ไฟล์ -ไอมาครอส ไฟล์ -iprefix ไฟล์ -iกับคำนำหน้า dir
-iกับคำนำหน้าก่อน dir -ไอซิสเต็ม dir -imultilib dir -isysroot dir -M -มม -มฟล -มก
-ส.ส -เอ็มคิว -มท -nostdinc -P -fdebug-cpp -ftrack-มาโครขยาย -fworking-ไดเรกทอรี
-รีแมป -ไตรกราฟ -Undef -Uแมโคร -Wp,ตัวเลือก -Xpreprocessor ตัวเลือก -ไม่มีบูรณาการ-cpp
ผู้ประกอบ ตัวเลือกเสริม (Option)
-วาตัวเลือก -Xแอสเซมเบลอร์ ตัวเลือก
linker Options
วัตถุไฟล์ชื่อ -lห้องสมุด -NostartFiles -nodedefaultlibs -nostdlib -พาย -ไดนามิค -s
-คงที่ -คงที่-libgcc -คงที่-libstdc++ -คง-libasan -คง-libtsan - แบ่งปัน
-Shared-Libgcc -สัญลักษณ์ -T ต้นฉบับ -Wlตัวเลือก -เอ็กซ์ลิงค์เกอร์ ตัวเลือก -u เครื่องหมาย
ค้นหาสถานที่ Options
-Bอุปสรรค -Idir -iplugindir=dir -iquotedir -Ldir -ข้อมูลจำเพาะ=ไฟล์ -ผม- --sysroot=dir
--no-sysroot-ต่อท้าย
เครื่อง ขึ้นอยู่กับ Options
AAArch64 Options -mbig-endian -little-endian -mgeneral-regs-เท่านั้น -mcmodel=จิ๋ว
-mcmodel=เล็ก -mcmodel=ขนาดใหญ่ -mstrict-จัดตำแหน่ง -momit-leaf-frame-ตัวชี้
-mno-ละเว้น-leaf-frame-pointer -mtls-dialect=รายละเอียด -mtls-dialect=ดั้งเดิม
-mfix-cortex-a53-835769 -mno-แก้ไข-cortex-a53-835769 -มีนาคม=ชื่อ -mcpu=ชื่อ
-mtune=ชื่อ
อแดปเทวา ศักดิ์สิทธิ์ Options -mhalf-reg-ไฟล์ -mprefer-สั้น insn-regs -mbranch-ต้นทุน=NUM
-mcmove -mnops=NUM -msoft-cmpsf -msplit-lohi -mpost-อิงค์ -mpost-แก้ไข
-mstack-ชดเชย=NUM -mround-ใกล้ที่สุด -mlong-โทร -mshort-โทร -msmall16 -mfp-โหมด=โหมด
-mvect-ดับเบิ้ล -max-vect-align =NUM -msplit-vecmove-ต้น -m1reg-reg
ARM Options -mapcs-เฟรม -mno-apcs-เฟรม -มาบิ=ชื่อ -mapcs-stack-ตรวจสอบ
-mno-apcs-stack-ตรวจสอบ -mapcs-ลอย -mno-apcs-ลอย -mapcs-กลับเข้ามาใหม่
-mno-apcs-กลับเข้าใหม่ -msched-อารัมภบท -mno-กำหนดการอารัมภบท -little-endian -mbig-endian
-mwords-ลิตเติ้ลเอนเดียน -mfloat-abi=ชื่อ -mfp16-รูปแบบ=ชื่อ -mthumb-การทำงานร่วมกัน
-mno-thumb-การทำงานร่วมกัน -mcpu=ชื่อ -มีนาคม=ชื่อ -mfpu=ชื่อ -mstruction-size-boundary=n
-มาบอร์-ออน-นอร์เทิร์น -mlong-โทร -นาทีโทรยาว -msingle-รูปฐาน
-mno-single-pic-ฐาน -mpic-register=reg -mnop-สนุก-dllimport -mpoke-ฟังก์ชั่นชื่อ
-นิ้วหัวแม่มือ - มาร์ม -mtpcs-เฟรม -mtpcs-ใบไม้กรอบ -mcaller-super-การทำงานร่วมกัน
-mcallee-super-การทำงานร่วมกัน -mtp=ชื่อ -mtls ภาษา =ภาษาถิ่น -mword-ย้ายตำแหน่ง
-mfix-cortex-m3-ldrd -munaligned-เข้าถึง -mneon-สำหรับ-64bits -mrestrict-มัน
AVR Options -mmcu=มจร -สะสม-args -mbranch-ต้นทุน=ราคา -mcall-อารัมภบท -มิ้นต์8
-mno-ขัดจังหวะ -mrelax -mstrit-X -mtiny-กอง -Waddr-พื้นที่แปลง
Blackfin Options -mcpu=ซีพียู[-การตรวจทาน] -msim -momit-leaf-frame-ตัวชี้
-mno-ละเว้น-leaf-frame-pointer -mspecld-ความผิดปกติ -mno-specld-ความผิดปกติ -mcsync-ความผิดปกติ
-mno-csync-ความผิดปกติ -mlow-64k -mno-ต่ำ64k -mstack-ตรวจสอบ-l1 -middle-shared-library
-mno-id-shared-library -msshared-library-id=n -mleaf-id-shared-library
-mno-leaf-id-shared-library -msep-ข้อมูล -mno-sep-ข้อมูล -mlong-โทร -นาทีโทรยาว
-mfast-fp -minline-plt -มัลติคอร์ -mcorea -mcoreb -msdram -micplb
ซีทูเอ็กซ์ Options -mbig-endian -little-endian -มีนาคม=ซีพียู -msim -msdata=sdata ชนิด
คริส Options -mcpu=ซีพียู -มีนาคม=ซีพียู -mtune=ซีพียู -mmax-stack-frame=n
-melinux-stacksize=n -metrax4 -metrax100 -mpdebug -mcc-เริ่มต้น -mno-ผลข้างเคียง
-mstack-จัดตำแหน่ง -mdata-จัดตำแหน่ง -mconst-จัดตำแหน่ง -m32-บิต -m16-บิต -m8-บิต
-mno-prologue-บทส่งท้าย -mno-gotplt -เมลฟ์ -เมาต์ -เมลินุกซ์ -mlinux -ซิม -ซิม2
-mmul-bug-วิธีแก้ปัญหา -mno-mul-bug-วิธีแก้ปัญหา
CR16 Options -เอ็มแมค -mcr16cplus -mcr16c -msim -มิ้นต์32 -mbit-ops -mdata-model=แบบ
ดาร์วิน Options -all_load -allowable_client -โค้ง -arch_errors_fatal -arch_only
-bind_at_load - มัด -bundle_loader -ชื่อลูกค้า -ความเข้ากันได้_รุ่น
-current_version -dead_strip -dependency-ไฟล์ -dylib_file -dylinker_install_name
- ไดนามิก -ไดนามิกlib -exported_ symbols_list -รายการไฟล์ -flat_namespace
-force_cpusubtype_ALL -force_flat_namespace -headerpad_max_install_names -iframework
-image_base -ในนั้น -install_name -keep_private_externs -multi_module
-คูณ_กำหนด -คูณ_กำหนด_ไม่ได้ใช้ -noall_load
-no_dead_strip_inits_and_terms -nofixprebinding -nomultidefs -ไม่พรีบินด์
-noseglinkแก้ไข -pagezero_size - ผูกมัด -prebind_all_twolevel_modules -private_bundle
-read_only_relocs -sectalign -สัญลักษณ์วัตถุ -ทำไมโหลด -seg1addr -seccreate
-สัญลักษณ์วัตถุ -ภาคส่วน -segaddr -segs_read_only_addr -segs_read_write_addr
-seg_addr_table -seg_addr_table_filename -seglinkแก้ไข -เซปโปร -segs_read_only_addr
-segs_read_write_addr -single_module -คงที่ -sub_library -sub_umbrella
-twolevel_namespace -ร่ม -ไม่ได้กำหนด -unexported_ symbols_list
-weak_reference_mismatches -Whatsloaded -F -guused -gfull -mmacosx-เวอร์ชัน-min=รุ่น
-เคอร์เนล -mone ไบต์บูล
ธันวาคม แอลฟา Options -mno-fp-regs -msoft-ลอย -มี่ -mieee-with-ไม่แน่นอน
-mieee-สอดคล้อง -mfp-กับดัก-โหมด=โหมด -mfp-ปัดเศษโหมด=โหมด -mtrap-ความแม่นยำ=โหมด
-mbuild-ค่าคงที่ -mcpu=ประเภทซีพียู -mtune=ประเภทซีพียู -mbwx -มม.สูงสุด -mfix -mcix
-mfloat-vax -mfloat-ieee -meexplicit-relocs -msmall-ข้อมูล -mlarge-ข้อมูล -msmall-ข้อความ
-mlarge-ข้อความ -หน่วยความจำแฝง=เวลา
FR30 Options -msmall-แบบ -mno-lsim
ลิฟ Options -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 -mhard-ลอย -msoft-ลอย
-malloc-ซีซี -mfixed-ซีซี -mdword -mno-dword -mdouble -mno-สองเท่า -มีเดีย -mno-สื่อ
-mmuladd -Mno-Muladd -mfdpic -minline-plt -mgplel-ro -multilib-library-รูป
-mlinked-fp -mlong-โทร ป้ายชื่อ-malign -mlibrary-รูป -macc-4 -macc-8 -เอ็มแพ็ก
-mno-แพ็ค -mno-flags -mcond-ย้าย -mno-cond-ย้าย -moptimize-สมาชิก
-mno-เพิ่มประสิทธิภาพ-สมาชิก -mscc -mno-scc -mcond-ผู้บริหาร -mno-cond-exec -mvliw-สาขา
-mno-vliw-สาขา -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec
-mno-ซ้อน-cond-exec -mtomcat-สถิติ -mTLS -mtl -mcpu=ซีพียู
GNU / Linux Options -มกลิบซี -muclibc -mionic -แมนดรอยด์ -tno-android-cc -tno-android-ld
H8 / 300 Options -mrelax -ม -นางสาว -ม -เม็กซ์ -mno-exr -มิ้นต์32 -malign-300
HPPA Options -มีนาคม=สถาปัตยกรรมประเภท -mbig-สวิตช์ -mdisable-fpregs
-mdisable-การจัดทำดัชนี -mfast-ทางอ้อมโทร -แก๊ส -mgnu-ld -mhp-ld
-mfixed-ช่วง=ช่วงการลงทะเบียน -mjump-ในความล่าช้า -mlinker-ตัวเลือก -mlong-โทร
-mlong-โหลดร้านค้า -mno-บิ๊กสวิตช์ -mno-ปิดการใช้งาน-fpregs -mno-disable-การจัดทำดัชนี
-mno-สายด่วนทางอ้อม -mno-แก๊ส -mno-jump-in-ดีเลย์ -mno-long-load-store
-mno-portable-รันไทม์ -mno-นุ่มลอย -mno-space-regs -msoft-ลอย -mpa-risc-1-0
-mpa-risc-1-1 -mpa-risc-2-0 -mportable-รันไทม์ -mschedule=ประเภทซีพียู -mspace-regs
-msio -mwsio -มูนิกซ์=ยูนิกซ์-std -nolibdld -คงที่ -กระทู้
i386 และ x86-64 Options -mtune=ประเภทซีพียู -มีนาคม=ประเภทซีพียู -mfpmath=หน่วย -มาสม์=ภาษาถิ่น
-mno-fancy-คณิต-387 -mno-fp-ret-in-387 -msoft-ลอย -mno-wide-คูณ -mrtd
-malign-ดับเบิ้ล -mpreferred-stack-ขอบเขต=NUM -mincoming-stack-boundary=NUM -mcld
-mcx16 -msahf -mmovbe -mcrc32 -mrecip -mrecip=เลือก -mvzerouper -mprefer-avx128 -mmmmx
-msse -mse2 -mse3 -mssse3 -mse4.1 -mse4.2 -mse4 -mavx -mavx2 -แม่ -mclmul
-mfsgsฐาน -mrdrd -mf16c -mfma -mse4a -m3dnow -mpopcnt -แมม -mbmi -เอ็มทีบีเอ็ม -mfma4
-mxop -mlzcnt -mbmi2 -mrtm -mlwp -mthreads -mno-จัด-stringops
-minline-ทั้งหมด-stringops -minline-stringops-ไดนามิก -mstringop-กลยุทธ์=ALG
-mpush-หาเรื่อง -สะสม-ออก-args -m128bit-ยาวสองเท่า -m96bit-ยาวสองเท่า
-mlong-double-64 -mlong-double-80 -MregParm =NUM -msseregparm -mveclabi=ชนิด
-mvect8-ret-ในเมม -mpc32 -mpc64 -mpc80 -mstackrealign -momit-leaf-frame-ตัวชี้
-mno-โซนสีแดง -mno-tls-direct-seg-refs -mcmodel=รหัสรุ่น -มาบิ=ชื่อ
-โหมดแมดเดรส=โหมด - ลบ.ม - ลบ.ม -mx32 -mlarge-data-threshold=NUM -mse2avx -mfentry
-m8bit-idiv -mavx256-split-unaligned-โหลด -mavx256-แยก-ไม่จัดแนว-จัดเก็บ
i386 และ x86-64 Windows Options -mconsole -mcygwin -mno-cygwin -mdll
-mnop-สนุก-dllimport -mthread -มิวนิโค้ด -mwin32 -mwindows -fno-set-stack-ปฏิบัติการได้
IA-64 Options -mbig-endian -little-endian -mgnu-เป็น -mgnu-ld -mno-รูป
-mvolatile-asm-หยุด -mregister-ชื่อ -msdata -mno-sdata -mconstan-gp -mauto-รูป
-mfused-mad -minline-float-divide-min-latency -minline-float-divide-max-throughput
-mno-inline-float-หาร -minline-int-divide-min-latency
-minline-int-divide-max-throughput -mno-inline-int-หาร -minline-sqrt-นาทีแฝง
-minline-sqrt-max-ปริมาณงาน -mno-อินไลน์-sqrt -mdwarf2-asm -Mearly-หยุดบิต
-mfixed-ช่วง=ช่วงการลงทะเบียน -mtls-ขนาด=tls-ขนาด -mtune=ประเภทซีพียู -milp32 -mlp64
-msched-br-ข้อมูลจำเพาะ -msched-ar-ข้อมูลจำเพาะ -msched-ควบคุมข้อมูลจำเพาะ -msched-br-in-ข้อมูลจำเพาะ
-msched-ar-in-ข้อมูลจำเพาะ -msched-in-ควบคุมข้อมูลจำเพาะ -msched-spec-ldc
-msched-spec-ควบคุม-ldc -msched-prefer-non-data-spec-insns
-msched-prefer-non-control-spec-insns -msched-stop-bits-after-ever-ทุกรอบ
-msched-count-spec-in-critical-path -msel-sched-dont-check-control-spec
-msched-fp-mem-deps-zero-ราคา -msched-max-memory-insns-hard-จำกัด
-msched-max-memory-insns=แม็กซ์อินน์
LM32 Options -mbarrel-shift-เปิดใช้งาน -mdivide ที่เปิดใช้งาน -เปิดใช้งานหลายหลาก
-msign-ขยาย-เปิดใช้งาน -เปิดใช้งาน Muser
M32R/D Options -m32r2 -m32rx -m32r -mdebug -malign-ลูป -mno-align-ลูป
-อัตราความผิดพลาด=จำนวน -mbranch-ต้นทุน=จำนวน -mmodel=รหัสขนาดรุ่นรุ่นประเภท -msdata=สดาต้า-
ชนิด -mno-ฟลัช-func -mflush-func=ชื่อ -mno-flush-กับดัก -mflush-กับดัก=จำนวน -G NUM
M32C Options -mcpu=ซีพียู -msim -memregs=จำนวน
M680x0 Options -มีนาคม=โค้ง -mcpu=ซีพียู -mtune=ปรับแต่ง - ลบ.ม - ลบ.ม -m68020-40
-m68020-60 - ลบ.ม - ลบ.ม - ลบ.ม -mcpu32 - ลบ.ม -m5206e -m528x - ลบ.ม - ลบ.ม
-mcfv4e -mbitfield -mno-บิตฟิลด์ -mc68000 -mc68020 -mnobitfield -mrtd -mno-rtd
-mdiv -mno-div -mshort -mno-สั้น -mhard-ลอย - ลบ.ม -msoft-ลอย -mpcrel
-malign-int -mstrict-จัดตำแหน่ง -msep-ข้อมูล -mno-sep-ข้อมูล -msshared-library-id=n
-middle-shared-library -mno-id-shared-library -mxgot -mno-xgot
เอ็มคอร์ Options - ฮาร์ดไลท์ -mno-ฮาร์ดไลท์ -mdiv -mno-div -mrelax-ทันที
-mno-ผ่อนคลายทันที -mwide-บิตฟิลด์ -mno-กว้าง bitfields -m4byte-ฟังก์ชั่น
-mno-4byte-ฟังก์ชั่น -mcallgraph-ข้อมูล -mno-callgraph-ข้อมูล -mslow ไบต์
-mno-ช้าไบต์ -mno-lsim -little-endian -mbig-endian - ลบ.ม - ลบ.ม
-mstack-เพิ่มขึ้น
เมพ Options -แม็บดิฟฟ์ -mall-ตัวเลือก - เฉลี่ย -mbase=n -เอ็มบิท็อป -mc=n -mclip
-mconfig=ชื่อ -เอ็มคอป -mcop32 -mcop64 -mvc2 -mdc -mdiv -meb -เมล -mio-ระเหย -มล
-mleadz มม -mminmax -mmult -mno-ตัวเลือก -mrepeat -นางสาว -มสตูร์ -msdram -msim -msimnovec
-เอ็มทีเอฟ -mtiny=n
ไมโครเบลซ Options -msoft-ลอย -mhard-ลอย -msmall-หาร -mcpu=ซีพียู -mmmcpy
-mxl-soft-mul -mxl-soft-div -mxl-บาร์เรลกะ -mxl-รูปแบบเปรียบเทียบ -mxl-stack-ตรวจสอบ
-mxl-gp-ตัวเลือก -mno-ชัดเจน -mxl-คูณสูง -mxl-float-แปลง -mxl-float-ตร.ม
-mbig-endian -little-endian -mxl-เรียงลำดับใหม่ -mxl-โหมด-แอพรุ่น
MIPS Options -THE -อี.บี -มีนาคม=โค้ง -mtune=โค้ง -mips1 -mips2 -mips3 -mips4
-mips32 -mips32r2 -mips64 -mips64r2 -mips16 -mno-mips16 -mflip-mips16
-mininterlink-mips16 -mno-อินเตอร์ลิงค์-mips16 -มาบิ=ABI -มาบิคอล -mno-เอบิคอล
-msshared -mno- แบ่งปัน -mplt -mno-plt -mxgot -mno-xgot -mgp32 -mgp64 -mfp32
-mfp64 -mhard-ลอย -msoft-ลอย -mno-ลอย -msingle-ลอย -mdouble-ลอย -mdsp
-mno-dsp -mdspr2 -mno-dspr2 -มม -mmno-mcu -mfpu=ประเภท fpu -msmartmips
-mno-smartmips -mpaired-เดียว -mno-คู่เดียว -mdmx -mno-mdmx -mips3d
-mno-mips3d -มม -mno-ภูเขา -mlsc -mno-llsc -mlong64 -mlong32 -msym32 -mno-sym32
-GNUM -mlocal-sdata -mno-local-sdata -mextern-sdata -mno-ภายนอก-sdata -mgpopt
-mno-gopt -membedded-ข้อมูล -mno-ฝังข้อมูล -muninit-const-in-rodata
-mno-uninit-const-in-rodata -mcode-อ่านได้=การตั้งค่า -msplit-ที่อยู่
-mno-แยกที่อยู่ -meexplicit-relocs -mno-ชัดเจน-relocs -mcheck-zero-ดิวิชั่น
-mno-ตรวจสอบศูนย์หาร -mdivide-กับดัก -mdivide-ตัวแบ่ง -mmmcpy -mno-memcpy
-mlong-โทร -นาทีโทรยาว - แมด -mno-บ้า -mfused-mad -mno-ฟิวส์ madd -nocpp
-mfix-24k -mno-แก้ไข-24k -mfix-r4000 -mno-แก้ไข-r4000 -mfix-r4400 -mno-แก้ไข-r4400
-mfix-r10000 -mno-แก้ไข-r10000 -mfix-vr4120 -mno-แก้ไข-vr4120 -mfix-vr4130
-mno-แก้ไข-vr4130 -mfix-sb1 -mno-แก้ไข-sb1 -mflush-func=ฟังก์ชั่น -mno-ฟลัช-func
-mbranch-ต้นทุน=NUM -mbranch-มีแนวโน้ม -mno-สาขามีแนวโน้ม -mfp-ข้อยกเว้น
-mno-fp-ข้อยกเว้น -mvr4130-จัดเรียง -mno-vr4130-จัดเรียง -msynci -mno-ซิงค์
-mrelax-pic-โทร -mno-ผ่อนคลาย-pic-calls -mmcount-ra-ที่อยู่
เอ็มมิกซ์ Options -mlibfuncs -mno-libfuncs -เมปซิลอน -mno-เอปไซลอน -mabi=gnu
-mabi = mmixware -mzero-ขยาย -mknuthdiv -mtoplevel-สัญลักษณ์ -เมลฟ์ -mbranch-ทำนาย
-mno-สาขาทำนาย -mbase-ที่อยู่ -mno-ฐานที่อยู่ -msingle-ทางออก
-mno-ทางออกเดียว
MN10300 Options -mmult-บั๊ก -mno-mult-บั๊ก -mno-am33 -แม่33 -แมม33-2 -แม่34 -mtune=ซีพียู-
ชนิด -mreturn-ตัวชี้บน-d0 -mno-crt0 -mrelax -มลิว -msetlb
Moxie Options -meb -เมล -mno-crt0
กปปส -11 Options -mfpu -msoft-ลอย -mac0 -mno-ac0 - ลบ.ม - ลบ.ม - ลบ.ม -mbcopy
-mbcopy-ในตัว -มิ้นต์32 -mno-int16 -มิ้นต์16 -mno-int32 -mfloat32 -mno-ลอย64
-mfloat64 -mno-ลอย32 -มาบชิ -mno-Abshi -mbranch-แพง -mbranch-ราคาถูก
-munix-asm -mdec-asm
พิโคชิป Options -แม่=ae_type -mvliw-lookahead=N -สัญลักษณ์ตามที่อยู่
-mno-ไม่มีประสิทธิภาพ-คำเตือน
PowerPC Options ดู RS/6000 และตัวเลือก PowerPC
RL78 Options -msim -mmul=ไม่มี -มมมูล=g13 -mmul=rl78
RS / 6000 และ PowerPC Options -mcpu=ประเภทซีพียู -mtune=ประเภทซีพียู -mcmodel=รหัสรุ่น
-mpowerpc64 -มัลทีฟ -mno-อัลทีฟเทค -mpowerpc-gpopt -mno-powerpc-gpopt
-mpowerpc-gfxopt -mno-powerpc-gfxopt -mmcrf -mno-mfcrf -mpopcntb -mno-popcntb
-mpopcntd -mno-popcntd -mfprnd -mno-fprnd -mcmpb -mno-cmpb -mmpgppr -mno-mfpgpr
-mhard-dfp -mno-ฮาร์ด-dfp -mfull-toc -mminimal-toc -mno-fp-ใน-toc -mno-ผลรวมใน-toc
- ลบ.ม - ลบ.ม -mxl-เข้ากันได้ -mno-xl-เข้ากันได้ -mpe -malign-อำนาจ -malign-ธรรมชาติ
-msoft-ลอย -mhard-ลอย -หลายหลาก -mno-หลาย -msingle-ลอย -mdouble-ลอย
-msimple-fpu -mstring -mno-สตริง - อัพเดท -mno-อัปเดต -mavoid-indexed-ที่อยู่
-mno-หลีกเลี่ยงที่อยู่จัดทำดัชนี -mfused-mad -mno-ฟิวส์ madd -mbit-จัดตำแหน่ง
-mno-บิต-จัด -mstrict-จัดตำแหน่ง -mno-เข้มงวด-จัด -mrelocated -mno-ย้ายได้
-mrelocatable-lib -mno-relolocable-lib -mtoc -mno-toc - เล็กน้อย -little-endian
-mbig -mbig-endian -mdynamic ไม่มีรูป -มัลทีฟ -mswdiv -msingle-รูปฐาน
-mprioritize-จำกัด-insns=ลำดับความสำคัญ -msched-ค่าใช้จ่าย-dep=การพึ่งพาอาศัยกัน_type
-minsert-sched-nops=โครงการ -mcall-sysv -mcall-netbsd -maix-struct-ส่งคืน
-msvr4-struct-ส่งคืน -มาบิ=ประเภท abi -msecure-plt -mbss-plt
-mblock-ย้ายอินไลน์จำกัด=NUM -มิเซล -mno-isel -misel=ใช่ -misel=ไม่ -msp -mno-ความเร็ว
-msp=ใช่ -msp=ไม่ - พิการ -mgen-เซลล์-ไมโครโค้ด -mwar-เซลล์-ไมโครโค้ด -mvrบันทึก
-mno-vrsave -มม -mno-mulhw -mdlmzb -mno-dlmzb -mfloat-gprs=ใช่ -mfloat-gprs=ไม่
-mfloat-gprs=โสด -mfloat-gprs=สองเท่า -ต้นแบบ -mno-ต้นแบบ -msim -mmvme
-บ้า -มีดพับ -สมาชิก -msdata -msdata=เลือก -mvxworks -G NUM -pthread -mrecip
-mrecip=เลือก -mno-recip -mrecip-ความแม่นยำ -mno-สูตรความแม่นยำ -mveclabi=ชนิด -มฟริซ
-mno-friz -mpointers-to-ซ้อนฟังก์ชัน -mno-pointers-to-ซ้อนกัน-ฟังก์ชั่น
-msave-toc-ทางอ้อม -mno-save-toc-ทางอ้อม -mpower8-ฟิวชั่น -mno-mpower8-ฟิวชั่น
-mpower8-เวกเตอร์ -mno-power8-เวกเตอร์ -mcrypto -mno-crypto -mdirect-ย้าย -mno-ตรงย้าย
-mquad-หน่วยความจำ -mno-quad-หน่วยความจำ -mquad-หน่วยความจำอะตอม -mno-quad-หน่วยความจำอะตอม
-mcompat-align-parm -mno-compat-align-parm
RX Options -m64bit-ดับเบิ้ล -m32bit-ดับเบิ้ล -fpu -โนฟปุ -mcpu= -mbig-endian-ข้อมูล
-mlittle-endian-ข้อมูล -msmall-ข้อมูล -msim -mno-ซิม -mas100-ไวยากรณ์ -mno-as100-ไวยากรณ์
-mrelax -mmmax-ขนาดคงที่= -mint-ลงทะเบียน= -mpid -mno-เตือนหลายอย่างรวดเร็วขัดจังหวะ
-msave-acc-in-ขัดจังหวะ
S / 390 และ zซีรี่ส์ Options -mtune=ประเภทซีพียู -มีนาคม=ประเภทซีพียู -mhard-ลอย -msoft-ลอย
-mhard-dfp -mno-ฮาร์ด-dfp -mlong-double-64 -mlong-double-128 -mbackchain
-mno-แบ็คเชน -mpacked-กอง -mno-บรรจุสแต็ค -msmall-exec -mno-small-ผู้บริหาร
-mmvcle -mno-mvcle - ลบ.ม - ลบ.ม -mdebug -mno-debug -เมซ่า -mzarch -mtpf-ติดตาม
-mno-tpf-ติดตาม -mfused-mad -mno-ฟิวส์ madd -mwarn-ขนาดเฟรม -mwarn-ไดนามิกสแต็ค
-mstack-ขนาด -mstack-ยาม -mhotpatch=ครึ่งคำ,ครึ่งคำ
คะแนน Options -meb -เมล -mhwloop -muls -เอ็มแมค -mscore5 -mscore5u -mscore7 -mscore7d
SH Options - ลบ.ม - ลบ.ม -m2e -m2a-nofpu -m2a-เดี่ยวเท่านั้น -m2a-ซิงเกิล -m2a - ลบ.ม -m3e
-m4-โนฟปุ -m4-เดี่ยวเท่านั้น -m4-เดี่ยว - ลบ.ม -m4a-nofpu -m4a-เดี่ยวเท่านั้น -m4a-ซิงเกิล
-m4a -m4al -m5-64สื่อ -m5-64media-nofpu -m5-32สื่อ -m5-32media-nofpu -m5-กะทัดรัด
-m5-compact-nofpu -mb -มล -mdalign -mrelax -เคลื่อนย้ายได้ -mfmovd -มิทาจิ -mrenesas
-mno-เรเนซาส -mnomacsave -มี่ -mno-ieee -เอ็มบิท็อป -ผิดขนาด -minline-ic_invalidate
-mpadstruct -mspace -mprefergot -musermode -ราคาหลายทุน=จำนวน -mdiv=กลยุทธ์
-mdivsi3_libfunc=ชื่อ -mfixed-ช่วง=ช่วงการลงทะเบียน -mindexed-ที่อยู่
-mgetrcost=จำนวน -mpt-คงที่ -สะสม-ออก-args -minvalid-สัญลักษณ์
-แบบจำลองทางคณิตศาสตร์=แบบจำลองอะตอม -mbranch-ต้นทุน=NUM -mzdcสาขา -mno-zdcbranch -mcbranchdi
-mcpeqdi -mfused-mad -mno-ฟิวส์ madd -mfsca -mno-fsca -mfsrra -mno-fsrra
-mppretend-cmove -mtas
Solaris 2 Options -mimpure-ข้อความ -mno-ไม่บริสุทธิ์-ข้อความ -pthreads -pthread
SPARC Options -mcpu=ประเภทซีพียู -mtune=ประเภทซีพียู -mcmodel=รหัสรุ่น -memory-model=เมม-
แบบ - ลบ.ม - ลบ.ม -mapp-regs -mno-แอป-regs -mfaster โครงสร้าง -mno-เร็วกว่าโครงสร้าง
-แฟลต -mno-แบน -mfpu -mno-fpu -mhard-ลอย -msoft-ลอย -mhard-quad-ลอย
-msoft-quad-ลอย -mstack-ลำเอียง -mno-stack-ลำเอียง -Munaligned-คู่
-mno-unaligned-double -muser โหมด -mno-โหมดผู้ใช้ -mv8plus -mno-v8plus -mvis
-mno-vis -mvis2 -mno-vis2 -mvis3 -mno-vis3 -mcbcond -mno-cbcond -mfmaf -mno-fmaf
-mpopc -mno-popc -mfix-at697f -mfix-ut699
SPU Options -mwarn-reloc -merror-ย้าย -msafe-dma -munsafe-dma -mbranch-คำใบ้
-msmall-mem -mlarge-เม็ม -mstdmain -mfixed-ช่วง=ช่วงการลงทะเบียน -mea32 -mea64
-maddress-space-แปลง -mno-ที่อยู่-พื้นที่-แปลง -mcache-ขนาด=ขนาดแคช
-matomic-อัพเดท -mno-atomic-อัพเดท
System V Options -คิว -Qn -วายพีเส้นทาง -อืมdir
กระเบื้อง-Gx Options -mcpu=ซีพียู - ลบ.ม - ลบ.ม -mcmodel=รหัสรุ่น
ไทล์โปร Options -mcpu=ซีพียู - ลบ.ม
V850 Options -mlong-โทร -นาทีโทรยาว -เมพ -mno-ep -mprolog-ฟังก์ชั่น
-mno-prolog-ฟังก์ชัน -mspace -mtda=n -msda=n -mzda=n -mapp-regs -mno-แอป-regs
-mdisable-callt -mno-disable-callt -MV850E2V3 -mv850e2 -mv850e1 -mv850es -mv850e
-mv850 -MV850E3V5 -มลูป -mrelax -mlong-กระโดด -msoft-ลอย -mhard-ลอย -mgcc-เอบี
-mrh850-อาบี -mbig-สวิตช์
VAX Options - มก -มก -มิวนิค
VMS Options -mvms-ส่งคืนรหัส -mdebug-main=อุปสรรค -mmalloc64 -mpointer-ขนาด=ขนาด
วีเอ็กซ์เวิร์คส Options -mrtp -ไม่คงที่ -บีสแตติก -บีไดนามิค -Xbind-ขี้เกียจ -Xbind-ตอนนี้
x86-64 Options ดูตัวเลือก i386 และ x86-64
เอ็กซ์สตอร์มี่16 Options -msim
เอ็กซ์เทนซ่า Options -mconst16 -mno-const16 -mfused-mad -mno-ฟิวส์ madd -mforce ไม่มีรูป
-mserialize-ระเหย -mno-serialize-ระเหย -mtext-section-ตัวอักษร
-mno-text-section-ตัวอักษร -mtarget-จัด -mno-เป้าหมายจัด -mlongcalls
-mno-ลองโทร
zซีรี่ส์ Options ดูตัวเลือก S/390 และ zSeries
รหัส รุ่น Options
-fcall-บันทึก-reg -fcall-มือสอง-reg -แก้ไขแล้ว-reg - ข้อยกเว้น -fnon-call-ข้อยกเว้น
-fdelete-dead-ข้อยกเว้น -funwind-ตาราง -fasynchronous-ผ่อนคลายตาราง -fno-gnu-ไม่ซ้ำกัน
-finhibit-size-คำสั่ง -finstrument-ฟังก์ชั่น
-finstrument-functions-exclude-function-list=ซิม,ซิม...
-finstrument-functions-exclude-file-list=ไฟล์,ไฟล์... -fno-ธรรมดา -fno-ident
-fpcc-struct-return -fpic -fPIC -fpie -fPIE -fno-กระโดดตาราง -frecord-gcc-สวิตช์
-freg-struct-กลับ -fshort-enums -fshort-ดับเบิ้ล -fshort-wchar -fverbose-asm
-fpack-struct[= .]n] -fstack-ตรวจสอบ -fstack-จำกัด-ลงทะเบียน=reg -fstack-limit- symbol=ซิม
-fno-stack-จำกัด -fsplit-กอง -fleading-ขีดเส้นใต้ -ftls-รุ่น=แบบ
-fstack-นำมาใช้ใหม่=ใช้ซ้ำ_ระดับ -ftrapv -fwrapv -fbounds-ตรวจสอบ -การมองเห็นได้ชัดเจน
-fstrict ระเหยบิตฟิลด์ -fsync-libcalls
Options การควบคุม ชนิด of เอาท์พุต
การคอมไพล์อาจเกี่ยวข้องกับสี่ขั้นตอน: การประมวลผลล่วงหน้า การรวบรวมที่เหมาะสม การประกอบ และ
เชื่อมโยงกันเสมอในลำดับนั้น GCC สามารถประมวลผลล่วงหน้าและคอมไพล์ได้หลายอย่าง
ไฟล์ไม่ว่าจะเป็นไฟล์อินพุตแอสเซมเบลอร์หลายไฟล์หรือเป็นไฟล์อินพุตแอสเซมเบลอร์เดียว แล้ว
ไฟล์อินพุตแอสเซมเบลอร์แต่ละไฟล์จะสร้างไฟล์อ็อบเจ็กต์ และการลิงก์จะรวมออบเจกต์ทั้งหมดเข้าด้วยกัน
ไฟล์ (ที่คอมไพล์ใหม่และที่ระบุเป็นอินพุต) ลงในไฟล์ปฏิบัติการ
สำหรับไฟล์อินพุตที่กำหนด คำต่อท้ายชื่อไฟล์จะกำหนดว่าการคอมไพล์เป็นประเภทใด
เสร็จแล้ว:
ไฟล์.c
ซอร์สโค้ด C ที่ต้องประมวลผลล่วงหน้า
ไฟล์.i
ซอร์สโค้ด C ที่ไม่ควรประมวลผลล่วงหน้า
ไฟล์.ii
ซอร์สโค้ด C++ ที่ไม่ควรประมวลผลล่วงหน้า
ไฟล์.m
ซอร์สโค้ด Objective-C โปรดทราบว่าคุณต้องเชื่อมโยงกับ libobjc ห้องสมุดที่จะทำให้
การทำงานของโปรแกรม Objective-C
ไฟล์.ไมล์
ซอร์สโค้ด Objective-C ที่ไม่ควรประมวลผลล่วงหน้า
ไฟล์.mm
ไฟล์.M
ซอร์สโค้ด Objective-C++ โปรดทราบว่าคุณต้องเชื่อมโยงกับ libobjc ห้องสมุดที่จะทำ
การทำงานของโปรแกรม Objective-C++ สังเกตว่า .M หมายถึงตัวพิมพ์ใหญ่ M
ไฟล์.mii
ซอร์สโค้ด Objective-C++ ที่ไม่ควรประมวลผลล่วงหน้า
ไฟล์.h
ไฟล์ส่วนหัว C, C++, Objective-C หรือ Objective-C++ ที่จะเปลี่ยนเป็นไฟล์ที่คอมไพล์ล่วงหน้า
ส่วนหัว (ค่าเริ่มต้น) หรือไฟล์ส่วนหัว C, C ++ ที่จะเปลี่ยนเป็นข้อมูลจำเพาะ Ada (ผ่านทาง
-fdump-ada-ข้อมูลจำเพาะ สวิตซ์).
ไฟล์ซีซี.
ไฟล์.ซีพี
ไฟล์.cxx
ไฟล์.ซีพีพี
ไฟล์.ปชป
ไฟล์.c++
ไฟล์.C
ซอร์สโค้ด C++ ที่ต้องประมวลผลล่วงหน้า โปรดทราบว่าใน .cxx, สองตัวอักษรสุดท้าย
จะต้องเป็นอักษร x. ในทำนองเดียวกัน .C หมายถึงตัวพิมพ์ใหญ่ C
ไฟล์.mm
ไฟล์.M
ซอร์สโค้ด Objective-C++ ที่ต้องประมวลผลล่วงหน้า
ไฟล์.mii
ซอร์สโค้ด Objective-C++ ที่ไม่ควรประมวลผลล่วงหน้า
ไฟล์.ห๊ะ
ไฟล์.H
ไฟล์.แรงม้า
ไฟล์.hxx
ไฟล์.hp
ไฟล์.ปชป
ไฟล์.h++
ไฟล์.tcc
ไฟล์ส่วนหัว C++ ที่จะเปลี่ยนเป็นส่วนหัวที่คอมไพล์แล้วหรือข้อมูลจำเพาะ Ada
ไฟล์.f
ไฟล์.สำหรับ
ไฟล์.ftn
แก้ไขซอร์สโค้ด Fortran ที่ไม่ควรประมวลผลล่วงหน้า
ไฟล์.F
ไฟล์.สำหรับ
ไฟล์.fpp
ไฟล์.ศปภ
ไฟล์.เอฟ.ที.เอ็น
ซอร์สโค้ด Fortran แบบคงที่ที่ต้องประมวลผลล่วงหน้า (ด้วยตัวดั้งเดิม
พรีโปรเซสเซอร์)
ไฟล์.f90
ไฟล์.f95
ไฟล์.f03
ไฟล์.f08
ซอร์สโค้ด Fortran แบบฟรีที่ไม่ควรประมวลผลล่วงหน้า
ไฟล์.F90
ไฟล์.F95
ไฟล์.F03
ไฟล์.F08
ซอร์สโค้ด Fortran แบบอิสระที่ต้องประมวลผลล่วงหน้า (ด้วยแบบดั้งเดิม
พรีโปรเซสเซอร์)
ไฟล์.ไป
ไปที่ซอร์สโค้ด
ไฟล์.โฆษณา
ไฟล์ซอร์สโค้ด Ada ที่มีการประกาศหน่วยไลบรารี (การประกาศของa
แพ็คเกจ โปรแกรมย่อย หรือทั่วไป หรืออินสแตนซ์ทั่วไป) หรือหน่วยไลบรารี
การประกาศเปลี่ยนชื่อ (แพ็คเกจ ทั่วไป หรือการประกาศเปลี่ยนชื่อโปรแกรมย่อย) เช่น
ไฟล์เรียกอีกอย่างว่า รายละเอียด.
ไฟล์.adb
ไฟล์ซอร์สโค้ด Ada ที่มีเนื้อหาหน่วยไลบรารี (โปรแกรมย่อยหรือเนื้อหาของแพ็คเกจ)
ไฟล์ดังกล่าวเรียกอีกอย่างว่า ร่างกาย.
ไฟล์.d
ไฟล์ซอร์สโค้ด D
ไฟล์.ดิ
ไฟล์โค้ดอินเตอร์เฟส D
ไฟล์.วว
ไฟล์รหัสเอกสาร D
ไฟล์.s
รหัสแอสเซมเบลอร์
ไฟล์.S
ไฟล์.sx
รหัสแอสเซมเบลอร์ที่ต้องประมวลผลล่วงหน้า
อื่น ๆ
ไฟล์อ็อบเจ็กต์ที่จะป้อนเข้าในการเชื่อมโยงโดยตรง ชื่อไฟล์ใด ๆ ที่ไม่รู้จัก
คำต่อท้ายได้รับการปฏิบัติด้วยวิธีนี้
คุณสามารถระบุภาษาที่ป้อนได้อย่างชัดเจนด้วยปุ่ม -x ตัวเลือก:
-x language
ระบุให้ชัดเจน language สำหรับไฟล์อินพุตต่อไปนี้ (แทนที่จะปล่อยให้
คอมไพเลอร์เลือกค่าเริ่มต้นตามส่วนต่อท้ายชื่อไฟล์) ตัวเลือกนี้ใช้ได้กับทุกคน
ติดตามไฟล์อินพุตจนถึงต่อไป -x ตัวเลือก. ค่าที่เป็นไปได้สำหรับ language คือ:
c c-ส่วนหัว cpp-output
c++ c++-ส่วนหัว c++-cpp-output
วัตถุประสงค์-c วัตถุประสงค์-c-ส่วนหัว วัตถุประสงค์-c-cpp-output
วัตถุประสงค์-c++ วัตถุประสงค์-c++-ส่วนหัววัตถุประสงค์-c++-cpp-output
แอสเซมเบลอร์ แอสเซมเบลอร์-กับ-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-เอาต์พุต -E) สั่งสอน gcc ที่ต้องทำ
ไม่มีอะไรทั้งนั้น.
-c รวบรวมหรือรวบรวมไฟล์ต้นฉบับ แต่อย่าลิงก์ ขั้นตอนการเชื่อมโยงง่ายๆคือ
ยังไม่เสร็จ. ผลลัพธ์สุดท้ายจะอยู่ในรูปแบบของไฟล์อ็อบเจ็กต์สำหรับไฟล์ต้นฉบับแต่ละไฟล์
ตามค่าเริ่มต้น ชื่อไฟล์อ็อบเจ็กต์สำหรับไฟล์ต้นฉบับถูกสร้างขึ้นโดยแทนที่คำต่อท้าย .c,
.i, .sฯลฯ ด้วย .o.
ไฟล์อินพุตที่ไม่รู้จัก ไม่จำเป็นต้องคอมไพล์หรือแอสเซมบลี จะถูกละเว้น
-S หยุดหลังจากขั้นตอนการรวบรวมที่เหมาะสม อย่าประกอบ ผลลัพธ์อยู่ใน
รูปแบบของไฟล์โค้ดแอสเซมเบลอร์สำหรับแต่ละไฟล์อินพุตที่ไม่ใช่แอสเซมเบลอร์ที่ระบุ
ตามค่าดีฟอลต์ ชื่อไฟล์แอสเซมเบลอร์สำหรับไฟล์ต้นฉบับถูกสร้างขึ้นโดยการแทนที่คำต่อท้าย
.c, .iฯลฯ ด้วย .s.
ไฟล์อินพุตที่ไม่ต้องการการคอมไพล์จะถูกละเว้น
-E หยุดหลังจากขั้นตอนก่อนการประมวลผล อย่าเรียกใช้คอมไพเลอร์อย่างเหมาะสม เอาต์พุตอยู่ใน
รูปแบบของซอร์สโค้ดที่ประมวลผลล่วงหน้าซึ่งถูกส่งไปยังเอาต์พุตมาตรฐาน
ไฟล์อินพุตที่ไม่ต้องการการประมวลผลล่วงหน้าจะถูกละเว้น
-o ไฟล์
วางเอาต์พุตในไฟล์ ไฟล์. สิ่งนี้ใช้กับผลผลิตทุกประเภท
ไม่ว่าจะเป็นไฟล์ปฏิบัติการ ไฟล์อ็อบเจ็กต์ ไฟล์แอสเซมเบลอร์ หรือ C . ที่ประมวลผลล่วงหน้า
รหัส.
If -o ไม่ได้ระบุไว้ ค่าเริ่มต้นคือการใส่ไฟล์ปฏิบัติการใน ออก, วัตถุ
ไฟล์ แหล่งที่มา.คำต่อท้าย in ที่มา.o, ไฟล์แอสเซมเบลอร์ใน ที่มา.s, คอมไพล์ล่วงหน้า
ไฟล์ส่วนหัวใน แหล่งที่มา.suffix.gchและซอร์ส C ที่ประมวลผลล่วงหน้าทั้งหมดบนเอาต์พุตมาตรฐาน
-v พิมพ์ (บนเอาต์พุตข้อผิดพลาดมาตรฐาน) คำสั่งที่ดำเนินการเพื่อเรียกใช้ขั้นตอนของ
การรวบรวม พิมพ์หมายเลขเวอร์ชันของโปรแกรมควบคุมคอมไพเลอร์และของ .ด้วย
พรีโปรเซสเซอร์และคอมไพเลอร์ที่เหมาะสม
-
Like -v ยกเว้นว่าคำสั่งจะไม่ถูกดำเนินการและมีการอ้างถึงอาร์กิวเมนต์ เว้นแต่ว่า
มีเฉพาะอักขระที่เป็นตัวอักษรและตัวเลขคละกันหรือ "./-_" สิ่งนี้มีประโยชน์สำหรับเชลล์สคริปต์ถึง
จับภาพบรรทัดคำสั่งที่สร้างโดยไดรเวอร์
-ท่อ
ใช้ไพพ์แทนไฟล์ชั่วคราวสำหรับการสื่อสารระหว่างขั้นตอนต่างๆ ของ
การรวบรวม สิ่งนี้ล้มเหลวในการทำงานกับบางระบบที่แอสเซมเบลอร์ไม่สามารถอ่านได้
จากท่อ แต่แอสเซมเบลอร์ GNU ไม่มีปัญหา
--ช่วยด้วย
พิมพ์ (บนเอาต์พุตมาตรฐาน) คำอธิบายของตัวเลือกบรรทัดคำสั่งที่เข้าใจโดย
gcc. หาก -v ระบุตัวเลือกด้วยแล้ว --ช่วยด้วย ยังส่งต่อไปยังหลากหลาย
กระบวนการที่เรียกใช้โดย gccเพื่อให้สามารถแสดงตัวเลือกบรรทัดคำสั่งที่พวกเขา
ยอมรับ. ถ้า -เว็กซ์ตร้า มีการระบุตัวเลือกด้วย (ก่อน --ช่วยด้วย ตัวเลือก),
จากนั้นตัวเลือกบรรทัดคำสั่งที่ไม่มีเอกสารที่เกี่ยวข้องก็เช่นกัน
แสดง
--เป้าหมาย-ช่วยเหลือ
พิมพ์ (บนเอาต์พุตมาตรฐาน) คำอธิบายของตัวเลือกบรรทัดคำสั่งเฉพาะเป้าหมาย
สำหรับแต่ละเครื่องมือ สำหรับบางเป้าหมาย ข้อมูลเฉพาะเป้าหมายเพิ่มเติมอาจเป็น
พิมพ์
--ช่วย={ชั้น|[^]มีคุณสมบัติ}[...]
พิมพ์ (บนเอาต์พุตมาตรฐาน) คำอธิบายของตัวเลือกบรรทัดคำสั่งที่เข้าใจโดย
คอมไพเลอร์ที่เหมาะกับคลาสและตัวระบุทั้งหมดที่ระบุ เหล่านี้เป็น
คลาสที่รองรับ:
เครื่องมือเพิ่มประสิทธิภาพ
แสดงตัวเลือกการปรับให้เหมาะสมทั้งหมดที่สนับสนุนโดยคอมไพเลอร์
คำเตือน
แสดงตัวเลือกทั้งหมดที่ควบคุมข้อความเตือนที่สร้างโดยคอมไพเลอร์
เป้า
แสดงตัวเลือกเฉพาะเป้าหมาย ไม่เหมือนกับ --เป้าหมาย-ช่วยเหลือ ตัวเลือกอย่างไรก็ตามเป้าหมาย-
ตัวเลือกเฉพาะของตัวเชื่อมโยงและแอสเซมเบลอร์จะไม่แสดง นี้เป็นเพราะ
เครื่องมือเหล่านั้นไม่สนับสนุนส่วนขยาย --ช่วย= วากยสัมพันธ์
params
แสดงค่าที่รับรู้โดย --พารามิเตอร์ ตัวเลือก
language
แสดงตัวเลือกที่รองรับสำหรับ languageที่นี่มี language เป็นชื่อหนึ่งของ
ภาษาที่รองรับใน GCC เวอร์ชันนี้
ร่วมกัน
แสดงตัวเลือกที่ใช้กันทั่วไปในทุกภาษา
นี่คือตัวระบุที่รองรับ:
ซึ่งไม่มีเอกสารประกอบ
แสดงเฉพาะตัวเลือกที่ไม่มีเอกสาร
เข้าร่วม
แสดงตัวเลือกการรับอาร์กิวเมนต์ที่ปรากฏหลังเครื่องหมายเท่ากับในเดียวกัน
ข้อความต่อเนื่องกัน เช่น --help=เป้าหมาย.
แยก
แสดงตัวเลือกการรับอาร์กิวเมนต์ที่ปรากฏเป็นคำที่แยกจากกันตามหลัง
ตัวเลือกเดิม เช่น -o ไฟล์เอาต์พุต.
ตัวอย่างเช่นเพื่อแสดงสวิตช์เฉพาะเป้าหมายที่ไม่มีเอกสารทั้งหมดที่สนับสนุนโดย
คอมไพเลอร์ใช้:
--help=target, ไม่มีเอกสาร
ความรู้สึกของการคัดเลือกสามารถกลับด้านได้โดยการนำหน้าด้วย ^ ตัวอักษรดังนั้นสำหรับ
ตัวอย่างเพื่อแสดงตัวเลือกการเตือนไบนารีทั้งหมด (เช่น ตัวเลือกที่เปิดหรือปิด
และที่ไม่โต้แย้ง) ที่มีคำอธิบาย ให้ใช้:
--help=warnings,^join,^undocumented
อาร์กิวเมนต์เพื่อ --ช่วย= ไม่ควรประกอบด้วยตัวระบุกลับด้านเพียงอย่างเดียว
การรวมหลายคลาสเป็นไปได้ แม้ว่าสิ่งนี้มักจะจำกัดเอาต์พุตดังนั้น
มากจนไม่มีอะไรจะแสดง อย่างไรก็ตาม กรณีหนึ่งที่ใช้ได้ผลคือเมื่อ
หนึ่งในชั้นเรียนคือ เป้า. ตัวอย่างเช่น เพื่อแสดงเฉพาะเป้าหมายทั้งหมด
ตัวเลือกการเพิ่มประสิทธิภาพ ใช้:
--help=target,ตัวเพิ่มประสิทธิภาพ
โครงการ --ช่วย= ตัวเลือกสามารถทำซ้ำได้ในบรรทัดคำสั่ง การใช้งานต่อเนื่องแต่ละครั้งจะแสดง
คลาสของตัวเลือกที่ร้องขอโดยข้ามตัวเลือกที่แสดงแล้ว
ถ้า -Q ตัวเลือกปรากฏบนบรรทัดคำสั่งก่อน --ช่วย= ตัวเลือก จากนั้น
คำอธิบายที่แสดงโดย --ช่วย= มีการเปลี่ยนแปลง แทนที่จะอธิบายที่แสดง
ตัวเลือก ระบุว่าตัวเลือกถูกเปิดใช้งาน ปิดใช้งาน หรือตั้งค่า
เป็นค่าเฉพาะ (สมมติว่าคอมไพเลอร์รู้สิ่งนี้ ณ จุดที่
--ช่วย= ใช้ตัวเลือก)
นี่คือตัวอย่างที่ตัดทอนจากพอร์ต ARM ของ gcc:
% gcc -Q -mabi=2 --help=target -c
ตัวเลือกต่อไปนี้เป็นเป้าหมายเฉพาะ:
-มาบิ= 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 ที่เรียกใช้
-เครื่องห่อ
เรียกใช้คำสั่งย่อยทั้งหมดภายใต้โปรแกรมแรปเปอร์ ชื่อของโปรแกรมห่อหุ้มและ
พารามิเตอร์จะถูกส่งผ่านเป็นรายการที่คั่นด้วยเครื่องหมายจุลภาค
gcc -c tc -wrapper gdb,--args
สิ่งนี้เรียกโปรแกรมย่อยทั้งหมดของ gcc ภายใต้ จีดีบี --argsดังนั้นการวิงวอนของ cc1 is
จีดีบี --args cc1 ....
-fปลั๊กอิน=ชื่อ.ดังนั้น
โหลดโค้ดปลั๊กอินในไฟล์ ชื่อ.so ถือว่าเป็นอ็อบเจ็กต์ที่ใช้ร่วมกันที่จะ dlopen'd โดย
คอมไพเลอร์ ชื่อฐานของไฟล์อ็อบเจ็กต์ที่ใช้ร่วมกันใช้เพื่อระบุ plugin
เพื่อวัตถุประสงค์ในการแยกวิเคราะห์อาร์กิวเมนต์ (See -fplugin-หาเรื่อง-ชื่อ-สำคัญ=ความคุ้มค่า ด้านล่าง). แต่ละ
ปลั๊กอินควรกำหนดฟังก์ชันการโทรกลับที่ระบุใน Plugins API
-fplugin-หาเรื่อง-ชื่อ-สำคัญ=ความคุ้มค่า
กำหนดอาร์กิวเมนต์ที่เรียกว่า สำคัญ มีค่า ความคุ้มค่า สำหรับปลั๊กอินที่เรียกว่า ชื่อ.
-fdump-ada-ข้อมูลจำเพาะ[-บาง]
สำหรับซอร์ส C และ C++ และรวมไฟล์ ให้สร้างข้อกำหนด Ada ที่สอดคล้องกัน
-fada-spec-parent=หน่วย
ร่วมกับ -fdump-ada-ข้อมูลจำเพาะ[-บาง] ด้านบน สร้างข้อกำหนด Ada เป็นหน่วยย่อยของ
ผู้ปกครอง หน่วย.
-fdump-go-ข้อมูลจำเพาะ=ไฟล์
สำหรับไฟล์อินพุตในภาษาใด ๆ ให้สร้างการประกาศ Go ที่สอดคล้องกันใน ไฟล์. นี้
สร้างการประกาศ Go "const", "type", "var" และ "func" ซึ่งอาจเป็นวิธีที่มีประโยชน์
เพื่อเริ่มเขียนส่วนต่อประสาน Go เพื่อเขียนโค้ดในภาษาอื่น
@ไฟล์
อ่านตัวเลือกบรรทัดคำสั่งจาก ไฟล์. ตัวเลือกที่อ่านจะถูกแทรกแทนที่
ต้นฉบับ @ไฟล์ ตัวเลือก. ถ้า ไฟล์ ไม่มีอยู่หรือไม่สามารถอ่านได้ดังนั้นตัวเลือก
จะได้รับการปฏิบัติอย่างแท้จริงและจะไม่ถูกลบออก
ตัวเลือกใน ไฟล์ ถูกคั่นด้วยช่องว่าง อาจรวมอักขระช่องว่าง
ในตัวเลือกโดยล้อมรอบตัวเลือกทั้งหมดในเครื่องหมายคำพูดเดี่ยวหรือคู่ ใด ๆ
อักขระ (รวมถึงแบ็กสแลช) อาจรวมด้วยคำนำหน้าอักขระเป็น
รวมกับแบ็กสแลช NS ไฟล์ ตัวเองอาจมี @ เพิ่มเติมไฟล์ ตัวเลือก; ใด ๆ
ตัวเลือกดังกล่าวจะได้รับการประมวลผลซ้ำ
กำลังรวบรวม C + + โปรแกรม
ไฟล์ต้นฉบับ C ++ ตามอัตภาพใช้คำต่อท้ายอย่างใดอย่างหนึ่ง .C, ซีซี., .ซีพีพี, .ปชป, .c++, .ซีพี,หรือ
.cxx; ไฟล์ส่วนหัว C++ มักใช้ .ห๊ะ, .hp, .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++ เท่านั้น
Options การควบคุม C ภาษาถิ่น
ตัวเลือกต่อไปนี้ควบคุมภาษาของ C (หรือภาษาที่ได้มาจาก C เช่น C ++
Objective-C และ Objective-C++) ที่คอมไพเลอร์ยอมรับ:
-แอนซี
ในโหมด C จะเท่ากับ -std=c90. ในโหมด C++ จะเท่ากับ
-std = C ++ 98.
การดำเนินการนี้จะปิดคุณลักษณะบางอย่างของ GCC ที่ไม่เข้ากันกับ ISO C90 (เมื่อ
คอมไพล์โค้ด C) หรือมาตรฐาน C++ (เมื่อคอมไพล์โค้ด C++) เช่น "asm" และ
คีย์เวิร์ด "typeof" และมาโครที่กำหนดไว้ล่วงหน้า เช่น "unix" และ "vax" ที่ระบุ
ประเภทของระบบที่คุณใช้ นอกจากนี้ยังเปิดใช้งาน ISO . ที่ไม่พึงประสงค์และไม่ค่อยได้ใช้
คุณสมบัติตรีโกณมิติ สำหรับคอมไพเลอร์ C จะปิดใช้งานการจดจำสไตล์ C++ //
ความคิดเห็นเช่นเดียวกับคำหลัก "ในบรรทัด"
คำหลักสำรอง "__asm__", "__extension__", "__inline__" และ "__typeof__"
ทำงานต่อไปทั้งๆที่ -แอนซี. คุณไม่ต้องการใช้ในโปรแกรม ISO C
แน่นอน แต่มันมีประโยชน์ที่จะใส่ไว้ในไฟล์ส่วนหัวที่อาจรวมอยู่ใน
รวบรวมเสร็จแล้วกับ -แอนซี. มาโครที่กำหนดไว้ล่วงหน้าสำรอง เช่น "__unix__" และ
"__vax__" ก็มีให้เช่นกัน ไม่ว่าจะมีหรือไม่มี -แอนซี.
โครงการ -แอนซี ตัวเลือกไม่ทำให้โปรแกรมที่ไม่ใช่ ISO ถูกปฏิเสธโดยเปล่าประโยชน์ สำหรับ
ที่, -Wpedantic จำเป็นนอกเหนือจาก -แอนซี.
แมโคร "__STRICT_ANSI__" ถูกกำหนดไว้ล่วงหน้าเมื่อ -แอนซี ใช้ตัวเลือก ส่วนหัวบางส่วน
ไฟล์อาจสังเกตเห็นมาโครนี้และงดเว้นจากการประกาศฟังก์ชันบางอย่างหรือการกำหนด
มาโครบางตัวที่มาตรฐาน ISO ไม่เรียกร้อง นี้เพื่อหลีกเลี่ยงการรบกวน
กับโปรแกรมใด ๆ ที่อาจใช้ชื่อเหล่านี้เพื่อสิ่งอื่น
ฟังก์ชันที่ปกติมีอยู่แล้วภายใน แต่ไม่มีความหมายที่กำหนดโดย ISO C (เช่น
เนื่องจาก "alloca" และ "ffs") ไม่ใช่ฟังก์ชันในตัวเมื่อ -แอนซี ถูกนำมาใช้.
-std=
กำหนดมาตรฐานภาษา ขณะนี้ตัวเลือกนี้รองรับเฉพาะเมื่อ
รวบรวม C หรือ C ++
คอมไพเลอร์สามารถยอมรับมาตรฐานพื้นฐานต่างๆ เช่น c90 or ค++98และภาษาถิ่นของ GNU
ของมาตรฐานเหล่านั้น เช่น gnu90 or กนู++98. เมื่อกำหนดมาตรฐานพื้นฐานแล้ว
คอมไพเลอร์ยอมรับโปรแกรมทั้งหมดตามมาตรฐานนั้นรวมทั้งโปรแกรมที่ใช้ส่วนขยาย GNU
ที่ไม่ขัดแย้งกับมัน ตัวอย่างเช่น, -std=c90 ปิดคุณสมบัติบางอย่างของ GCC
ที่เข้ากันไม่ได้กับ ISO C90 เช่นคีย์เวิร์ด "asm" และ "typeof" แต่ไม่ใช่
นามสกุล GNU อื่น ๆ ที่ไม่มีความหมายใน ISO C90 เช่นละเว้น
ระยะกลางของนิพจน์ "?:" ในทางกลับกัน เมื่อภาษา GNU ของมาตรฐาน
ถูกระบุ คุณลักษณะทั้งหมดที่สนับสนุนโดยคอมไพเลอร์จะเปิดใช้งาน แม้ว่าจะเป็น
คุณสมบัติเปลี่ยนความหมายของมาตรฐานพื้นฐาน ส่งผลให้มีการปฏิบัติตามอย่างเข้มงวด
โปรแกรมอาจถูกปฏิเสธ มาตรฐานเฉพาะถูกใช้โดย -Wpedantic เพื่อระบุ
คุณลักษณะใดที่เป็นส่วนขยายของ GNU เมื่อพิจารณาจากเวอร์ชันมาตรฐานนั้น ตัวอย่างเช่น
-std=gnu90 -Wpedantic เตือนเกี่ยวกับสไตล์ C++ // ความคิดเห็นในขณะที่ -std=gnu99 -Wpedantic
ไม่.
ต้องระบุค่าสำหรับตัวเลือกนี้ ค่าที่เป็นไปได้คือ
c90
c89
iso9899: 1990
รองรับโปรแกรม ISO C90 ทั้งหมด (ส่วนขยาย GNU บางตัวที่ขัดแย้งกับ ISO C90
ถูกปิดใช้งาน) เหมือนกับ -แอนซี สำหรับรหัส C
iso9899: 199409
ISO C90 ตามที่แก้ไขในการแก้ไข 1
c99
ซีทูเอ็กซ์
iso9899: 1999
iso9899:199x
ISO C99. โปรดทราบว่ามาตรฐานนี้ยังไม่รองรับอย่างสมบูรณ์ ดู
<http://gcc.gnu.org/c99status.html> สำหรับข้อมูลเพิ่มเติม ชื่อ ซีทูเอ็กซ์ และ
iso9899:199x เลิกใช้แล้ว
c11
ซีทูเอ็กซ์
iso9899: 2011
ISO C11 ฉบับปรับปรุงปี 2011 ของมาตรฐาน ISO C การสนับสนุนไม่สมบูรณ์และ
ทดลอง ชื่อ ซีทูเอ็กซ์ เลิกใช้แล้ว
gnu90
gnu89
ภาษา GNU ของ ISO C90 (รวมถึงคุณสมบัติ C99 บางอย่าง) นี่เป็นค่าเริ่มต้นสำหรับ C
รหัส.
gnu99
gnu9x
ภาษา GNU ของ ISO C99 เมื่อ ISO C99 ถูกนำไปใช้อย่างสมบูรณ์ใน GCC สิ่งนี้จะ
กลายเป็นค่าเริ่มต้น ชื่อ gnu9x เลิกใช้แล้ว
gnu11
gnu1x
ภาษา GNU ของ ISO C11 การสนับสนุนไม่สมบูรณ์และอยู่ในช่วงทดลอง ชื่อ gnu1x
เลิกใช้แล้ว
ค++98
ค++03
มาตรฐาน ISO C++ ปี 1998 บวกคอร์ริเจนดัมทางเทคนิคปี 2003 และเพิ่มเติมบางส่วน
รายงานข้อบกพร่อง เหมือนกับ -แอนซี สำหรับรหัส C++
กนู++98
กนู++03
ภาษาถิ่น GNU ของ -std = C ++ 98. นี่เป็นค่าเริ่มต้นสำหรับรหัส C++
ค++11
ค++0x
มาตรฐาน ISO C++ ปี 2011 พร้อมการแก้ไขเพิ่มเติม ยังคงรองรับ C++11 อยู่
ทดลองและอาจเปลี่ยนแปลงในลักษณะที่เข้ากันไม่ได้ในรุ่นต่อๆ ไป ชื่อ
ค++0x เลิกใช้แล้ว
กนู++11
กนู++0x
ภาษาถิ่น GNU ของ -std = C ++ 11. การรองรับ C++11 ยังคงอยู่ในขั้นทดลอง และอาจเปลี่ยนแปลงได้
ในรูปแบบที่เข้ากันไม่ได้ในรุ่นต่อๆ ไป ชื่อ กนู++0x เลิกใช้แล้ว
ค++1ปี
การแก้ไขมาตรฐาน ISO C++ ครั้งต่อไป ซึ่งวางแผนไว้คร่าวๆ สำหรับปี 2017 สนับสนุน
อยู่ในขั้นทดลองอย่างมาก และเกือบจะเปลี่ยนแปลงไปในทางที่เข้ากันไม่ได้ใน
การเปิดตัวในอนาคต
gnu++1ปี
ภาษาถิ่น GNU ของ -std=c++1y. การสนับสนุนอยู่ในขั้นทดลองอย่างมาก และเกือบจะ
เปลี่ยนไปในทางที่เข้ากันไม่ได้อย่างแน่นอนในรุ่นต่อๆ ไป
-fgnu89-อินไลน์
ทางเลือก -fgnu89-อินไลน์ บอกให้ GCC ใช้ความหมายของ GNU ดั้งเดิมสำหรับ "อินไลน์"
ทำงานเมื่ออยู่ในโหมด C99
ตัวเลือกนี้ได้รับการยอมรับและละเว้นโดย GCC เวอร์ชัน 4.1.3 จนถึงแต่ไม่รวม
4.3. ใน GCC เวอร์ชัน 4.3 และใหม่กว่า จะเปลี่ยนพฤติกรรมของ GCC ในโหมด C99 โดยใช้
ตัวเลือกนี้เทียบเท่ากับการเพิ่มแอตทริบิวต์ฟังก์ชัน "gnu_inline" ให้กับall
ฟังก์ชันอินไลน์
ทางเลือก -fno-gnu89-แบบอินไลน์ บอก GCC อย่างชัดเจนให้ใช้ซีแมนทิกส์ C99 สำหรับ
"อินไลน์" เมื่ออยู่ในโหมด C99 หรือ gnu99 (กล่าวคือ จะระบุการทำงานเริ่มต้น) นี้
ตัวเลือกได้รับการสนับสนุนครั้งแรกใน GCC 4.3 ไม่รองรับตัวเลือกนี้ใน -std=c90 or
-std=gnu90 โหมด.
อาจใช้มาโครตัวประมวลผลล่วงหน้า "__GNUC_GNU_INLINE__" และ "__GNUC_STDC_INLINE__"
เพื่อตรวจสอบว่าความหมายใดมีผลกับฟังก์ชัน "อินไลน์"
-aux-ข้อมูล ชื่อไฟล์
เอาต์พุตไปยังการประกาศชื่อไฟล์ต้นแบบสำหรับฟังก์ชันทั้งหมดที่ประกาศและ/หรือ
กำหนดไว้ในหน่วยการแปล รวมถึงที่อยู่ในไฟล์ส่วนหัว ตัวเลือกนี้คือ
ละเลยอย่างเงียบ ๆ ในภาษาอื่นที่ไม่ใช่ C
นอกจากการประกาศ ไฟล์ยังระบุในความคิดเห็น ที่มาของการประกาศแต่ละครั้ง
(ไฟล์ต้นฉบับและบรรทัด) ไม่ว่าจะเป็นการประกาศโดยปริยาย ต้นแบบ หรือ
ไม่ได้ต้นแบบ (I, N สำหรับใหม่หรือ O สำหรับเก่าตามลำดับในอักขระตัวแรกหลังจาก
หมายเลขบรรทัดและโคลอน) และไม่ว่าจะมาจากการประกาศหรือคำจำกัดความ
(C or Fตามลำดับในอักขระต่อไปนี้) ในกรณีของฟังก์ชัน
คำจำกัดความ รายการอาร์กิวเมนต์สไตล์ K&R ตามด้วยการประกาศก็เช่นกัน
ให้ความเห็นภายในหลังจากการประกาศ
-fallow-parameterless-variadic-ฟังก์ชั่น
ยอมรับฟังก์ชันแบบแปรผันโดยไม่มีพารามิเตอร์ที่มีชื่อ
แม้ว่าจะเป็นไปได้ที่จะกำหนดฟังก์ชันดังกล่าว แต่ก็ไม่มีประโยชน์เท่าที่เป็นอยู่
ไม่สามารถอ่านข้อโต้แย้งได้ รองรับเฉพาะ C เนื่องจากโครงสร้างนี้คือ
อนุญาตโดย C ++
-fno-asm
ไม่รู้จัก "asm", "inline" หรือ "typeof" เป็นคีย์เวิร์ด เพื่อให้โค้ดใช้สิ่งเหล่านี้ได้
คำเป็นตัวระบุ คุณสามารถใช้คำหลัก "__asm__", "__inline__" และ
"__typeof__" แทน -แอนซี หมายถึง -fno-asm.
ใน C ++ สวิตช์นี้จะมีผลกับคำหลัก "typeof" เท่านั้น เนื่องจาก "asm" และ "inline" เป็น
คำหลักมาตรฐาน คุณอาจต้องการใช้ -fno-gnu-คำหลัก ธงแทนซึ่งมี
ผลเดียวกัน ในโหมด C99 (-std=c99 or -std=gnu99) สวิตช์นี้มีผลกับ .เท่านั้น
คีย์เวิร์ด "asm" และ "typeof" เนื่องจาก "inline" เป็นคีย์เวิร์ดมาตรฐานใน ISO C99
-fno-ในตัว
-fno-ในตัว-ฟังก์ชัน
ไม่รู้จักฟังก์ชันในตัวที่ไม่ได้ขึ้นต้นด้วย __บิวอิน_ เป็นคำนำหน้า
โดยปกติแล้ว GCC จะสร้างโค้ดพิเศษเพื่อจัดการกับฟังก์ชันในตัวบางอย่างเพิ่มเติม
อย่างมีประสิทธิภาพ ตัวอย่างเช่น การเรียก "alloca" อาจกลายเป็นคำสั่งเดียวซึ่ง
ปรับสแต็กโดยตรงและการเรียก "memcpy" อาจกลายเป็นลูปการคัดลอกแบบอินไลน์ NS
โค้ดผลลัพธ์มักจะเล็กกว่าและเร็วกว่า แต่เนื่องจากฟังก์ชันเรียก no
ปรากฏอีกต่อไปเช่นนี้ คุณไม่สามารถตั้งค่าเบรกพอยต์ในการโทรเหล่านั้น และคุณไม่สามารถเปลี่ยนแปลงได้
ลักษณะการทำงานของฟังก์ชันโดยเชื่อมโยงกับไลบรารีอื่น นอกจากนี้ เมื่อ
ฟังก์ชั่นได้รับการยอมรับว่าเป็นฟังก์ชั่นในตัว GCC อาจใช้ข้อมูลเกี่ยวกับสิ่งนั้น
ฟังก์ชันเพื่อเตือนปัญหาเกี่ยวกับการเรียกใช้ฟังก์ชันนั้น หรือเพื่อสร้างเพิ่มเติม
โค้ดที่มีประสิทธิภาพ แม้ว่าโค้ดผลลัพธ์จะยังคงมีการเรียกใช้ฟังก์ชันนั้นอยู่ก็ตาม สำหรับ
ตัวอย่าง คำเตือนจะได้รับกับ -Wรูปแบบ สำหรับการเรียก "printf" ที่ไม่ดีเมื่อ "printf" เป็น
สร้างขึ้นในและ "strlen" เป็นที่รู้จักว่าไม่แก้ไขหน่วยความจำส่วนกลาง
กับ -fno-ในตัว-ฟังก์ชัน ตัวเลือกเฉพาะฟังก์ชั่นในตัว ฟังก์ชัน ถูกปิดใช้งาน.
ฟังก์ชัน ต้องไม่ขึ้นต้นด้วย __บิวอิน_. หากชื่อฟังก์ชันนั้นไม่มีในตัว
ใน GCC เวอร์ชันนี้ ตัวเลือกนี้จะถูกละเว้น ไม่มีความสอดคล้อง
-fบิลท์อิน-ฟังก์ชัน ตัวเลือก; หากคุณต้องการเปิดใช้งานฟังก์ชั่นในตัวแบบเลือกเมื่อ
การใช้ -fno-ในตัว or - อิสระคุณอาจกำหนดมาโครเช่น:
#define เอบีเอส (n) __builtin_abs ((n))
#กำหนด strcpy(d, s) __buildin_strcpy ((d), (s))
- เป็นเจ้าภาพ
ยืนยันว่าการคอมไพล์กำหนดเป้าหมายสภาพแวดล้อมที่โฮสต์ นี่หมายความว่า -fbuilt-in.
สภาพแวดล้อมที่โฮสต์เป็นสภาพแวดล้อมที่มีไลบรารีมาตรฐานทั้งหมดและใน
ซึ่ง "main" มีประเภทส่งคืนเป็น "int" ตัวอย่างเกือบทุกอย่างยกเว้น a
เคอร์เนล ซึ่งเทียบเท่ากับ -fno-อิสระ.
- อิสระ
ยืนยันว่าการรวบรวมกำหนดเป้าหมายสภาพแวดล้อมแบบอิสระ นี่หมายความว่า
-fno-ในตัว. สภาพแวดล้อมอิสระเป็นสิ่งที่ห้องสมุดมาตรฐานไม่อาจ
มีอยู่ และการเริ่มต้นโปรแกรมอาจไม่จำเป็นต้องอยู่ที่ "หลัก" ตัวอย่างที่ชัดเจนที่สุด
เป็นเคอร์เนล OS ซึ่งเทียบเท่ากับ -fno-โฮสต์.
-fopenmp
เปิดใช้งานการจัดการคำสั่ง OpenMP "#pragma omp" ใน C/C++ และ "!$omp" ใน Fortran
เมื่อ -fopenmp ถูกระบุคอมไพเลอร์สร้างรหัสคู่ขนานตาม
อินเทอร์เฟซโปรแกรมแอปพลิเคชัน OpenMP v3.0http://www.openmp.org/>. ตัวเลือกนี้
หมายถึง -pthreadและดังนั้นจึงรองรับเฉพาะเป้าหมายที่รองรับ
-pthread.
-fgnu-tm
เมื่อตัวเลือก -fgnu-tm ถูกระบุ คอมไพเลอร์สร้างรหัสสำหรับ Linux
ตัวแปรของเอกสารข้อมูลจำเพาะของหน่วยความจำธุรกรรม ABI ปัจจุบันของ Intel (การแก้ไข
1.1 6 พฤษภาคม 2009) นี่เป็นคุณลักษณะทดลองที่อินเทอร์เฟซอาจเปลี่ยนแปลงใน
GCC เวอร์ชันอนาคต เนื่องจากข้อกำหนดอย่างเป็นทางการมีการเปลี่ยนแปลง โปรดทราบว่าไม่
สถาปัตยกรรมทั้งหมดได้รับการสนับสนุนสำหรับคุณลักษณะนี้
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการสนับสนุนหน่วยความจำธุรกรรมของ GCC
โปรดทราบว่าคุณลักษณะหน่วยความจำธุรกรรมไม่ได้รับการสนับสนุนโดยมีข้อยกเว้นที่ไม่ใช่การโทร
(-fnon-call-ข้อยกเว้น).
-fms-ส่วนขยาย
ยอมรับโครงสร้างที่ไม่ได้มาตรฐานบางอย่างที่ใช้ในไฟล์ส่วนหัวของ Microsoft
ในโค้ด C++ จะทำให้ชื่อสมาชิกในโครงสร้างคล้ายกับประเภทก่อนหน้า
ประกาศ
พิมพ์ int UOW;
โครงสร้าง ABC {
อุ้ย อุ้ย;
};
บางกรณีของฟิลด์ที่ไม่มีชื่อในโครงสร้างและสหภาพจะยอมรับกับสิ่งนี้เท่านั้น
ตัวเลือก
-fplan9-ส่วนขยาย
ยอมรับโครงสร้างที่ไม่ได้มาตรฐานบางส่วนที่ใช้ในโค้ดแผน 9
สิ่งนี้ทำให้ -fms-ส่วนขยายอนุญาตให้ส่งตัวชี้ไปยังโครงสร้างโดยไม่ระบุชื่อ
เขตข้อมูลไปยังฟังก์ชันที่คาดหวังตัวชี้ไปยังองค์ประกอบของประเภทของเขตข้อมูลและ
อนุญาตให้อ้างถึงฟิลด์ที่ไม่ระบุชื่อที่ประกาศโดยใช้ typedef นี้เท่านั้น
รองรับ C ไม่ใช่ C ++
-ไตรกราฟ
รองรับไตรกราฟ ISO C NS -แอนซี ตัวเลือก (และ -มาตรฐาน ตัวเลือกสำหรับ ISO C . ที่เข้มงวด
สอดคล้อง) หมายถึง -ไตรกราฟ.
สไตล์ทรง
-แบบดั้งเดิม-cpp
ก่อนหน้านี้ ตัวเลือกเหล่านี้ทำให้ GCC พยายามจำลองคอมไพเลอร์ C ที่ได้มาตรฐาน
ขณะนี้ได้รับการสนับสนุนเฉพาะกับ -E สวิตซ์. ตัวประมวลผลล่วงหน้ายังคงรองรับ
โหมดก่อนมาตรฐาน ดูคู่มือ GNU CPP สำหรับรายละเอียด
-fcond-ไม่ตรงกัน
อนุญาตนิพจน์เงื่อนไขที่มีประเภทไม่ตรงกันในอาร์กิวเมนต์ที่สองและสาม
ค่าของนิพจน์ดังกล่าวถือเป็นโมฆะ ตัวเลือกนี้ไม่รองรับ C++
-flax-เวกเตอร์การแปลง
อนุญาตให้มีการแปลงโดยนัยระหว่างเวกเตอร์ที่มีจำนวนองค์ประกอบต่างกันและ/หรือ
ประเภทองค์ประกอบที่เข้ากันไม่ได้ ไม่ควรใช้ตัวเลือกนี้สำหรับรหัสใหม่
-funsigned-ถ่าน
ปล่อยให้ประเภท "ถ่าน" ไม่ถูกลงชื่อเช่น "ถ่านที่ไม่ได้ลงนาม"
เครื่องแต่ละประเภทมีค่าเริ่มต้นสำหรับสิ่งที่ควรเป็น "อักขระ" มันเป็นอย่างใดอย่างหนึ่งเช่น
"ถ่านที่ไม่ได้ลงนาม" โดยค่าเริ่มต้นหรือเช่น "ถ่านที่ลงนาม" โดยค่าเริ่มต้น
ตามหลักการแล้ว โปรแกรมแบบพกพาควรใช้ "signed char" หรือ "unsigned char" เสมอเมื่อ
ขึ้นอยู่กับการลงนามของวัตถุ แต่มีหลายโปรแกรมที่เขียนขึ้นเพื่อใช้
"ถ่าน" ธรรมดาและคาดว่าจะได้รับการลงนาม หรือคาดว่าจะไม่มีการลงนาม ทั้งนี้ขึ้นอยู่กับ
เครื่องที่พวกเขาเขียนขึ้นสำหรับ ตัวเลือกนี้และผกผันของมัน ให้คุณสร้าง a . ได้
โปรแกรมทำงานกับค่าเริ่มต้นตรงข้าม
ประเภท "ถ่าน" เป็นประเภทที่แตกต่างจาก "ถ่านที่ลงนาม" หรือ "ไม่ได้ลงนาม
char" แม้ว่าพฤติกรรมจะเหมือนกับหนึ่งในสองคนนั้นเสมอ
-fsigned-ถ่าน
ให้ลงชื่อประเภท "ถ่าน" เช่น "ถ่านที่ลงนาม"
โปรดทราบว่านี่เทียบเท่ากับ -fno-unsigned-ถ่านซึ่งเป็นรูปเชิงลบของ
-funsigned-ถ่าน. ในทำนองเดียวกันตัวเลือก -fno-ลงนาม-char เทียบเท่ากับ
-funsigned-ถ่าน.
-fsigned-บิตฟิลด์
-funsigned-บิตฟิลด์
-fno-ลงนาม bitfields
-fno-บิตฟิลด์ที่ไม่ได้ลงนาม
ตัวเลือกเหล่านี้ควบคุมว่าฟิลด์บิตถูกเซ็นชื่อหรือไม่เซ็น เมื่อการประกาศ
ไม่ใช้ "ลงนาม" หรือ "ไม่ได้ลงนาม" โดยค่าเริ่มต้น ฟิลด์บิตดังกล่าวถูกเซ็นชื่อ
เนื่องจากสิ่งนี้สอดคล้องกัน: ประเภทจำนวนเต็มพื้นฐานเช่น "int" เป็นประเภทที่มีการเซ็นชื่อ
Options การควบคุม C + + ภาษาถิ่น
ส่วนนี้อธิบายตัวเลือกบรรทัดคำสั่งที่มีความหมายสำหรับโปรแกรม C++ เท่านั้น
คุณยังสามารถใช้ตัวเลือกคอมไพเลอร์ GNU ได้เกือบทั้งหมด ไม่ว่าโปรแกรมของคุณจะเป็นภาษาอะไร
อยู่ ตัวอย่างเช่น คุณอาจรวบรวมไฟล์ "firstClass.C" ดังนี้:
g++ -g -frepo -O -c firstClass.C
ในตัวอย่างนี้ เท่านั้น -เฟรโป เป็นตัวเลือกสำหรับโปรแกรม C++ เท่านั้น คุณสามารถใช้
ตัวเลือกอื่น ๆ ด้วยภาษาใด ๆ ที่ GCC รองรับ
นี่คือรายการตัวเลือกที่ เพียง สำหรับการคอมไพล์โปรแกรม C++:
-fabi-เวอร์ชั่น=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 ใช้การแมงเกิลมาตรฐานสำหรับ vector
ประเภท
เวอร์ชัน 5 ซึ่งปรากฏตัวครั้งแรกใน G++ 4.6 แก้ไขการบิดเบือนแอตทริบิวต์
const/volatile บนประเภทตัวชี้ฟังก์ชัน ประเภท decl ของ decl ธรรมดา และการใช้a
พารามิเตอร์ฟังก์ชันในการประกาศพารามิเตอร์อื่น
เวอร์ชัน 6 ซึ่งปรากฏตัวครั้งแรกใน G++ 4.7 แก้ไขพฤติกรรมการโปรโมตของ C++11
ขอบเขต enums และ mangling ของชุดอาร์กิวเมนต์แม่แบบ const/static_cast คำนำหน้า ++
และ -- และฟังก์ชันขอบเขตคลาสที่ใช้เป็นอาร์กิวเมนต์เทมเพลต
ดูสิ่งนี้ด้วย -วาบิ.
-fno-การเข้าถึง-การควบคุม
ปิดการตรวจสอบการเข้าถึงทั้งหมด สวิตช์นี้มีประโยชน์หลักในการแก้ไขข้อผิดพลาดใน
รหัสควบคุมการเข้าถึง
-fcheck-ใหม่
ตรวจสอบว่าตัวชี้ที่ส่งคืนโดย "ตัวดำเนินการใหม่" ไม่ใช่ค่าว่างก่อนที่จะพยายาม
แก้ไขการจัดเก็บที่จัดสรรไว้ โดยปกติการตรวจสอบนี้ไม่จำเป็นเพราะ C++
standard ระบุว่า "operator new" จะคืนค่า 0 เท่านั้นหากมีการประกาศ โยน()ใน
ซึ่งในกรณีนี้คอมไพเลอร์จะตรวจสอบค่าที่ส่งกลับเสมอแม้จะไม่มีตัวเลือกนี้ก็ตาม ใน
กรณีอื่น ๆ ทั้งหมดเมื่อ "ตัวดำเนินการใหม่" มีข้อกำหนดข้อยกเว้นที่ไม่ว่างเปล่า memory
สัญญาณหมดแรงโดยการโยน "std::bad_alloc" ดูสิ่งนี้ด้วย ใหม่ (โนทรอว์).
-fconstexpr-ความลึก=n
ตั้งค่าความลึกการประเมินซ้อนสูงสุดสำหรับฟังก์ชัน C++11 constexpr เป็น n. ขีดจำกัด
จำเป็นสำหรับการตรวจจับการเรียกซ้ำไม่รู้จบในระหว่างการประเมินนิพจน์คงที่ NS
ขั้นต่ำที่กำหนดโดยมาตรฐานคือ 512
-fdeduce-init-รายการ
เปิดใช้งานการหักพารามิเตอร์ประเภทเทมเพลตเป็น "std::initializer_list" จากวงเล็บปีกกา-
รายการตัวเริ่มต้นที่แนบมา เช่น
แม่แบบ ส่งต่ออัตโนมัติ (T เสื้อ) -> decltype (realfn (t))
{
ส่งคืน realfn (t);
}
เป็นโมฆะ f()
{
ไปข้างหน้า({1,2}); // โทรไปข้างหน้า >
}
การหักนี้ถูกนำมาใช้เป็นการขยายเวลาที่เป็นไปได้สำหรับข้อเสนอเดิม
ความหมายสำหรับมาตรฐาน C++11 แต่ไม่ได้เป็นส่วนหนึ่งของมาตรฐานสุดท้าย จึงเป็น
ปิดใช้งานโดยค่าเริ่มต้น ตัวเลือกนี้เลิกใช้แล้วและอาจถูกลบในอนาคต
เวอร์ชันของ G++
-ffriend-ฉีด
แทรกฟังก์ชันเพื่อนลงในเนมสเปซที่ล้อมรอบเพื่อให้มองเห็นได้ภายนอก
ขอบเขตของคลาสที่ประกาศ ฟังก์ชั่นของเพื่อนได้รับการบันทึกไว้
เพื่อทำงานในลักษณะนี้ในคู่มืออ้างอิง C++ แบบเก่าที่มีคำอธิบายประกอบ และเวอร์ชันของ G++ ก่อนหน้า
4.1 ทำงานแบบนั้นเสมอ อย่างไรก็ตามใน ISO C++ ฟังก์ชั่นเพื่อนที่ไม่ใช่
ประกาศในขอบเขตที่ล้อมรอบสามารถพบได้โดยใช้การค้นหาที่ขึ้นกับอาร์กิวเมนต์เท่านั้น
ตัวเลือกนี้ทำให้เพื่อน ๆ ถูกฉีดเหมือนในรุ่นก่อนหน้า
ตัวเลือกนี้มีไว้เพื่อความเข้ากันได้ และอาจถูกลบใน G++ รุ่นต่อๆ ไป
-fno-elide-ตัวสร้าง
มาตรฐาน C ++ อนุญาตให้ใช้งานโดยละเว้นการสร้างชั่วคราวที่เป็นเพียง
ใช้เพื่อเริ่มต้นวัตถุอื่นที่เป็นประเภทเดียวกัน การระบุตัวเลือกนี้จะปิดการใช้งาน
การเพิ่มประสิทธิภาพนั้นและบังคับให้ G++ เรียกตัวสร้างการคัดลอกในทุกกรณี
-fno-enforce-eh-ข้อมูลจำเพาะ
อย่าสร้างรหัสเพื่อตรวจสอบการละเมิดข้อกำหนดข้อยกเว้นในขณะใช้งาน
ตัวเลือกนี้ละเมิดมาตรฐาน C++ แต่อาจมีประโยชน์สำหรับการลดขนาดโค้ดใน
การสร้างการผลิต เหมือนกับการกำหนด เอ็นดีบัก. ไม่อนุญาตให้ใช้รหัสผู้ใช้
โยนข้อยกเว้นที่ละเมิดข้อกำหนดข้อยกเว้น คอมไพเลอร์ยังคง
ปรับให้เหมาะสมตามข้อกำหนด ดังนั้นการโยนข้อยกเว้นที่ไม่คาดคิดให้ผลลัพธ์ใน
พฤติกรรมที่ไม่ได้กำหนด ณ รันไทม์
-fextern-tls-init
-fno-extern-tls-init
มาตรฐาน C++11 และ OpenMP อนุญาต thread_local และ เธรดส่วนตัว ตัวแปรที่ต้องมี
ไดนามิก (รันไทม์) การเริ่มต้น เพื่อสนับสนุนสิ่งนี้ การใช้ตัวแปรดังกล่าวใดๆ ก็ตามไป
ผ่านฟังก์ชัน wrapper ที่ดำเนินการเริ่มต้นที่จำเป็น เมื่อใช้งาน
และคำจำกัดความของตัวแปรอยู่ในหน่วยการแปลเดียวกัน ค่าโสหุ้ยนี้สามารถ
ปรับให้เหมาะสม แต่เมื่อใช้งานในหน่วยการแปลอื่นจะมี
ค่าโสหุ้ยที่สำคัญแม้ว่าตัวแปรจะไม่ต้องการไดนามิกก็ตาม
การเริ่มต้น. หากโปรแกรมเมอร์สามารถมั่นใจได้ว่าไม่มีการใช้ตัวแปรใน
การกำหนด TU จำเป็นต้องทริกเกอร์การเริ่มต้นแบบไดนามิก (เนื่องจากตัวแปร is
เริ่มต้นแบบคงที่หรือใช้ตัวแปรในการกำหนด TU จะถูกดำเนินการ
ก่อนการใช้งานใน TU อื่น) พวกเขาสามารถหลีกเลี่ยงค่าใช้จ่ายนี้ด้วย
-fno-extern-tls-init ตัวเลือก
บนเป้าหมายที่รองรับนามแฝงสัญลักษณ์ ค่าเริ่มต้นคือ -fextern-tls-init. ตามเป้าหมาย
ที่ไม่รองรับนามแฝงของสัญลักษณ์ ค่าเริ่มต้นคือ -fno-extern-tls-init.
-ffor-ขอบเขต
-fno-for-ขอบเขต
If -ffor-ขอบเขต ระบุขอบเขตของตัวแปรที่ประกาศในa for-init-คำสั่ง
ถูก จำกัด ไว้ที่ไฟล์ for วนซ้ำตามที่กำหนดโดยมาตรฐาน C++ ถ้า
-fno-for-ขอบเขต ระบุขอบเขตของตัวแปรที่ประกาศในa for-init-คำสั่ง
ขยายไปยังจุดสิ้นสุดของขอบเขตการปิดล้อม เช่นเดียวกับในเวอร์ชันเก่าของ G++ และ
การใช้งาน (ดั้งเดิม) อื่น ๆ ของ C ++
หากไม่ระบุแฟล็ก ค่าเริ่มต้นจะเป็นไปตามมาตรฐาน แต่จะอนุญาตและให้
คำเตือนสำหรับโค้ดแบบเก่าที่อาจใช้การไม่ได้ หรือมีโค้ดต่างกัน
พฤติกรรม
-fno-gnu-คำหลัก
ไม่รู้จัก "typeof" เป็นคีย์เวิร์ด เพื่อให้โค้ดใช้คำนี้เป็น an . ได้
ตัวระบุ คุณสามารถใช้คำหลัก "__typeof__" แทนได้ -แอนซี หมายถึง
-fno-gnu-คำหลัก.
-fno-โดยนัย-เทมเพลต
อย่าปล่อยโค้ดสำหรับเทมเพลตที่ไม่ใช่แบบอินไลน์ที่สร้างอินสแตนซ์โดยปริยาย (เช่น โดย
ใช้); ปล่อยรหัสสำหรับการสร้างอินสแตนซ์ที่ชัดเจนเท่านั้น
-fno-implicit-inline-เทมเพลต
อย่าปล่อยโค้ดสำหรับการสร้างอินสแตนซ์โดยปริยายของเทมเพลตอินไลน์เช่นกัน ค่าเริ่มต้น
คือการจัดการอินไลน์ที่แตกต่างกันเพื่อให้คอมไพล์โดยมีและไม่จำเป็นต้องปรับให้เหมาะสม
อินสแตนซ์ที่ชัดเจนชุดเดียวกัน
-fno-ใช้อินไลน์
เพื่อประหยัดพื้นที่ อย่าปล่อยสำเนาฟังก์ชันอินไลน์ที่ควบคุมโดย
#ปรากมา การดำเนินงาน. สิ่งนี้ทำให้เกิดข้อผิดพลาดของตัวเชื่อมโยงหากฟังก์ชันเหล่านี้ไม่อยู่ในบรรทัด
ทุกที่ที่พวกเขาถูกเรียก
-fms-ส่วนขยาย
ปิดใช้งานคำเตือน Wpedantic เกี่ยวกับโครงสร้างที่ใช้ใน MFC เช่น int โดยนัยและ
รับตัวชี้ไปยังฟังก์ชันสมาชิกผ่านไวยากรณ์ที่ไม่ได้มาตรฐาน
-fno-nonansi-บิวอิน
ปิดใช้งานการประกาศฟังก์ชันในตัวที่ไม่ได้รับคำสั่งจาก ANSI/ISO C สิ่งเหล่านี้
รวมถึง "ffs", "alloca", "_exit", "index", "bzero", "conjf" และอื่นๆ ที่เกี่ยวข้อง
ฟังก์ชั่น
-fnothrow-เลือก
ปฏิบัติต่อข้อกำหนดข้อยกเว้น "throw()" ราวกับว่าเป็นข้อกำหนด "noexcept" to
ลดหรือกำจัดโอเวอร์เฮดของขนาดข้อความที่สัมพันธ์กับฟังก์ชันโดยไม่มีข้อยกเว้น
ข้อกำหนด หากฟังก์ชันมีตัวแปรประเภทท้องถิ่นที่ไม่สำคัญ
destructors ข้อกำหนดข้อยกเว้นทำให้ฟังก์ชันมีขนาดเล็กลงเพราะ
การล้างข้อมูล EH สำหรับตัวแปรเหล่านั้นสามารถเพิ่มประสิทธิภาพได้ ความหมายคือ
ว่ามีข้อยกเว้นจากฟังก์ชันที่มีข้อกำหนดข้อยกเว้นดังกล่าว
ส่งผลให้มีการเรียกร้องให้ "ยุติ" มากกว่า "ไม่คาดคิด"
-fno-ชื่อผู้ประกอบการ
อย่าใช้คำสำคัญชื่อโอเปอเรเตอร์ "and", "bitand", "bitor", "compl", "not", "or"
และ "xor" เป็นคำพ้องความหมายเป็นคีย์เวิร์ด
-fno-ตัวเลือก-diags
ปิดใช้งานการวินิจฉัยที่มาตรฐานระบุว่าคอมไพเลอร์ไม่จำเป็นต้องมีปัญหา
ปัจจุบัน การวินิจฉัยดังกล่าวที่ออกโดย G++ เพียงอย่างเดียวคือชื่อที่มี
หลายความหมายภายในคลาส
-fอนุญาต
ปรับลดรุ่นการวินิจฉัยบางอย่างเกี่ยวกับโค้ดที่ไม่เป็นไปตามข้อกำหนดจากข้อผิดพลาดเป็นคำเตือน ดังนั้น,
การใช้ -fอนุญาต อนุญาตให้คอมไพล์โค้ดที่ไม่เป็นไปตามข้อกำหนดบางส่วน
-fno-สวย-แม่แบบ
เมื่อข้อความแสดงข้อผิดพลาดอ้างถึงความเชี่ยวชาญพิเศษของเทมเพลตฟังก์ชัน คอมไพเลอร์
ปกติพิมพ์ลายเซ็นของเทมเพลตตามด้วยอาร์กิวเมนต์เทมเพลตและ
typedefs หรือ typenames ใด ๆ ในลายเซ็น (เช่น "void f(T) [with T = int]" แทน
มากกว่า "void f(int)") เพื่อให้ชัดเจนว่าเทมเพลตใดที่เกี่ยวข้อง เมื่อผิดพลาด
ข้อความหมายถึงความเชี่ยวชาญของเทมเพลตคลาส คอมไพเลอร์ละเว้นใดๆ
อาร์กิวเมนต์เทมเพลตที่ตรงกับอาร์กิวเมนต์เทมเพลตเริ่มต้นสำหรับเทมเพลตนั้น ถ้า
พฤติกรรมเหล่านี้ทำให้เข้าใจข้อความแสดงข้อผิดพลาดได้ยากขึ้นมากกว่า
ง่ายขึ้นคุณสามารถใช้ -fno-สวย-แม่แบบ เพื่อปิดการใช้งาน
-เฟรโป
เปิดใช้งานการสร้างอินสแตนซ์เทมเพลตอัตโนมัติในเวลาที่ลิงก์ ตัวเลือกนี้ยังหมายถึง
-fno-โดยนัย-เทมเพลต.
-fno-rti
ปิดใช้งานการสร้างข้อมูลเกี่ยวกับทุกคลาสด้วยฟังก์ชันเสมือนสำหรับใช้งานโดย
คุณลักษณะการระบุประเภทรันไทม์ C++ (ไดนามิก_แคสต์ และ typeid). ถ้าคุณไม่
ใช้ส่วนต่างๆ ของภาษานั้น คุณสามารถประหยัดพื้นที่บางส่วนได้โดยใช้แฟล็กนี้ บันทึก
การจัดการข้อยกเว้นนั้นใช้ข้อมูลเดียวกัน แต่ G++ จะสร้างตามความจำเป็น NS
ไดนามิก_แคสต์ โอเปอเรเตอร์ยังคงใช้สำหรับการแคสต์ที่ไม่ต้องการประเภทรันไทม์
ข้อมูลเช่นส่งเป็น "โมฆะ *" หรือคลาสพื้นฐานที่ชัดเจน
-fstats
ส่งสถิติเกี่ยวกับการประมวลผลส่วนหน้าเมื่อสิ้นสุดการรวบรวม นี้
โดยทั่วไปข้อมูลจะมีประโยชน์เฉพาะกับทีมพัฒนา G++ เท่านั้น
-fstrict-enums
อนุญาตให้คอมไพเลอร์ปรับให้เหมาะสมโดยใช้สมมติฐานว่าค่าของประเภทที่แจกแจงแล้ว
สามารถเป็นหนึ่งในค่าของการแจงนับ (ตามที่กำหนดไว้ในมาตรฐาน C++;
โดยพื้นฐานแล้วค่าที่สามารถแสดงเป็นจำนวนบิตขั้นต่ำที่จำเป็นในการ
เป็นตัวแทนของการแจงนับทั้งหมด) สมมติฐานนี้อาจไม่ถูกต้องหากโปรแกรมใช้
การโยนเพื่อแปลงค่าจำนวนเต็มตามอำเภอใจเป็นประเภทที่แจกแจง
-f template-backtrace-limit=n
ตั้งค่าจำนวนสูงสุดของบันทึกการสร้างอินสแตนซ์ของเทมเพลตสำหรับคำเตือนหรือข้อผิดพลาดเดียว
ไปยัง n. ค่าเริ่มต้นคือ 10
-ftemplate-deep=n
ตั้งค่าความลึกสูงสุดของการสร้างอินสแตนซ์สำหรับคลาสเทมเพลตเป็น n. ขีดจำกัดของ
จำเป็นต้องมีความลึกของการสร้างอินสแตนซ์ของเทมเพลตเพื่อตรวจจับการเรียกซ้ำไม่รู้จบระหว่างเทมเพลต
การสร้างอินสแตนซ์ของคลาส โปรแกรมที่สอดคล้องกับ ANSI/ISO C++ ต้องไม่ใช้ค่าสูงสุด
ความลึกมากกว่า 17 (เปลี่ยนเป็น 1024 ใน C++11) ค่าเริ่มต้นคือ 900 เนื่องจาก
คอมไพเลอร์สามารถใช้พื้นที่สแต็กหมดก่อนที่จะกด 1024 ในบางสถานการณ์
-fno-threadsafe-สถิติ
อย่าปล่อยรหัสพิเศษเพื่อใช้รูทีนที่ระบุใน C++ ABI สำหรับเธรด-
การเริ่มต้นที่ปลอดภัยของสถิตยศาสตร์ในพื้นที่ คุณสามารถใช้ตัวเลือกนี้เพื่อลดขนาดโค้ดได้
ในโค้ดเล็กน้อยที่ไม่จำเป็นต้องปลอดภัยต่อเธรด
-ฟิวส์-cxa-atexit
ลงทะเบียน destructors สำหรับวัตถุที่มีระยะเวลาการจัดเก็บแบบคงที่ด้วย "__cxa_atexit"
ฟังก์ชันมากกว่าฟังก์ชัน "atexit" ตัวเลือกนี้จำเป็นสำหรับอย่างเต็มที่
การจัดการตัวทำลายแบบคงที่ที่เป็นไปตามมาตรฐาน แต่จะใช้ได้ก็ต่อเมื่อไลบรารี C ของคุณ
รองรับ "__cxa_atexit"
-fno-use-cxa-get-ข้อยกเว้น-ptr
อย่าใช้รูทีนรันไทม์ "__cxa_get_exception_ptr" สิ่งนี้ทำให้เกิด
"std::uncaught_exception" ไม่ถูกต้อง แต่จำเป็นหากรูทีนรันไทม์คือ
ไม่สามารถใช้ได้
-fvisibility-inline-ซ่อน
สวิตช์นี้ประกาศว่าผู้ใช้ไม่พยายามเปรียบเทียบพอยน์เตอร์กับอินไลน์
ฟังก์ชันหรือวิธีการที่แอดเดรสของฟังก์ชันทั้งสองใช้ต่างกัน
วัตถุที่ใช้ร่วมกัน
ผลของสิ่งนี้คือ GCC อาจทำเครื่องหมายวิธีการแบบอินไลน์ด้วย
"__attribute__ ((การมองเห็น ("ซ่อน")))" เพื่อไม่ให้ปรากฏในการส่งออก
ตารางของ DSO และไม่ต้องการ PLT ทางอ้อมเมื่อใช้ภายใน DSO
การเปิดใช้งานตัวเลือกนี้อาจส่งผลกระทบอย่างมากต่อเวลาในการโหลดและลิงก์ของ DSO เนื่องจาก
ลดขนาดของตารางการส่งออกแบบไดนามิกอย่างมากเมื่อไลบรารีทำให้หนัก
การใช้แม่แบบ
ลักษณะการทำงานของสวิตช์นี้ไม่เหมือนกับการทำเครื่องหมายเมธอดว่าซ่อนอยู่
โดยตรง เนื่องจากไม่มีผลต่อตัวแปรสแตติกภายในฟังก์ชันหรือสาเหตุ
คอมไพเลอร์เพื่ออนุมานว่าฟังก์ชันถูกกำหนดไว้ในอ็อบเจ็กต์ที่ใช้ร่วมกันเพียงออบเจกต์เดียวเท่านั้น
คุณอาจทำเครื่องหมายวิธีการที่มีการมองเห็นอย่างชัดเจนเพื่อลบล้างผลกระทบของ
เปลี่ยนไปใช้วิธีนั้น ตัวอย่างเช่น หากคุณต้องการเปรียบเทียบพอยน์เตอร์กับ a
วิธีการแบบอินไลน์โดยเฉพาะ คุณอาจทำเครื่องหมายว่ามีการมองเห็นเริ่มต้น ทำเครื่องหมาย
คลาสที่ปิดล้อมด้วยการมองเห็นที่ชัดเจนไม่มีผล
วิธีการอินไลน์ที่สร้างอินสแตนซ์ไว้อย่างชัดเจนจะไม่ได้รับผลกระทบจากตัวเลือกนี้เป็นการเชื่อมโยง
มิฉะนั้นอาจข้ามขอบเขตห้องสมุดที่ใช้ร่วมกัน
-fvisibility-ms-เข้ากันได้
แฟล็กนี้พยายามใช้การตั้งค่าการเปิดเผยเพื่อสร้างโมเดลการเชื่อมโยง C++ ของ GCC
เข้ากันได้กับ Microsoft Visual Studio
แฟล็กทำการเปลี่ยนแปลงเหล่านี้กับโมเดลการเชื่อมโยงของ GCC:
1. ตั้งค่าการมองเห็นเริ่มต้นเป็น "ซ่อน" เช่น -fvisibility=ซ่อนอยู่.
2. ประเภท แต่ไม่ใช่สมาชิกจะไม่ถูกซ่อนโดยค่าเริ่มต้น
3. กฎคำจำกัดความเดียวนั้นผ่อนคลายสำหรับประเภทที่ไม่มีการมองเห็นที่ชัดเจน
ข้อกำหนดที่กำหนดไว้ในวัตถุที่ใช้ร่วมกันมากกว่าหนึ่งรายการ: ประกาศเหล่านั้น
จะได้รับอนุญาตหากได้รับอนุญาตเมื่อไม่ได้ใช้ตัวเลือกนี้
ในรหัสใหม่จะดีกว่าที่จะใช้ -fvisibility=ซ่อนอยู่ และส่งออกคลาสเหล่านั้นที่เป็น
ตั้งใจให้มองเห็นภายนอกได้ น่าเสียดายที่รหัสสามารถพึ่งพาได้
อาจเป็นเพราะพฤติกรรมของ Visual Studio โดยไม่ได้ตั้งใจ
ผลที่ตามมาของการเปลี่ยนแปลงเหล่านี้ก็คือสมาชิกข้อมูลคงที่ที่เป็นประเภทเดียวกัน
ที่มีชื่อเดียวกันแต่กำหนดไว้ในอ็อบเจกต์ที่ใช้ร่วมกันต่างกันจึงเปลี่ยน
หนึ่งไม่เปลี่ยนแปลงอีก; และตัวชี้ไปยังสมาชิกฟังก์ชันที่กำหนดไว้ใน
วัตถุที่ใช้ร่วมกันต่างกันอาจไม่เท่ากัน เมื่อให้แฟล็กนี้ มันคือ
การละเมิด ODR เพื่อกำหนดประเภทที่มีชื่อเดียวกันแตกต่างกัน
-fno-อ่อนแอ
อย่าใช้การสนับสนุนสัญลักษณ์อ่อนแอ แม้ว่าจะมีให้โดยลิงเกอร์ก็ตาม โดยค่าเริ่มต้น G++
ใช้สัญลักษณ์ที่อ่อนแอหากมี ตัวเลือกนี้มีไว้เพื่อการทดสอบเท่านั้นและ
ผู้ใช้ปลายทางไม่ควรใช้; มันส่งผลให้เกิดรหัสที่ด้อยกว่าและไม่มีประโยชน์
ตัวเลือกนี้อาจถูกลบออกใน G++ รุ่นต่อๆ ไป
-nostdinc++
อย่าค้นหาไฟล์ส่วนหัวในไดเร็กทอรีมาตรฐานเฉพาะสำหรับ C ++ แต่ทำ
ยังคงค้นหาไดเร็กทอรีมาตรฐานอื่นๆ (ตัวเลือกนี้ใช้เมื่อสร้าง
ไลบรารี C++)
นอกจากนี้ ตัวเลือกการเพิ่มประสิทธิภาพ คำเตือน และการสร้างโค้ดเหล่านี้มีความหมายเท่านั้น
สำหรับโปรแกรม C++:
-fno-default-อินไลน์
อย่าถือสา แบบอินไลน์ สำหรับฟังก์ชันที่กำหนดไว้ภายในขอบเขตของคลาส
โปรดทราบว่าฟังก์ชันเหล่านี้มีการเชื่อมโยงเหมือนฟังก์ชันอินไลน์ พวกเขาไม่ได้
ฝังไว้โดยค่าเริ่มต้น
-วาบิ (C, Objective-C, C++ และ Objective-C++ เท่านั้น)
เตือนเมื่อ G++ สร้างรหัสที่อาจเข้ากันไม่ได้กับผู้ขายที่เป็นกลาง
C++ ABI แม้ว่าจะมีความพยายามที่จะเตือนเกี่ยวกับกรณีดังกล่าวทั้งหมด แต่ก็มี
อาจเป็นบางกรณีที่ไม่ได้รับการเตือนแม้ว่า G++ กำลังสร้าง
รหัสที่เข้ากันไม่ได้ อาจมีบางกรณีที่ส่งคำเตือนแม้ว่า
รหัสที่สร้างขึ้นเข้ากันได้
คุณควรเขียนโค้ดใหม่เพื่อหลีกเลี่ยงคำเตือนเหล่านี้หากคุณกังวลเกี่ยวกับ
ความจริงที่ว่ารหัสที่สร้างโดย G++ อาจไม่เข้ากันได้กับไบนารีกับรหัสที่สร้างโดย
คอมไพเลอร์อื่น ๆ
ความไม่ลงรอยกันที่รู้จักกันใน -fabi-เวอร์ชั่น=2 (ค่าเริ่มต้น) รวมถึง:
· เทมเพลตที่มีพารามิเตอร์เทมเพลตที่ไม่ใช่ประเภทอ้างอิงจะถูกทำลาย
ไม่ถูกต้อง:
ภายนอกภายใน N;
แม่แบบ โครงสร้าง S {};
โมฆะ n (S ) {2}
สิ่งนี้ได้รับการแก้ไขใน -fabi-เวอร์ชั่น=3.
· ประเภทเวกเตอร์ SIMD ที่ประกาศโดยใช้ "__attribute ((vector_size))" จะถูกแยกออกเป็น
วิธีที่ไม่ได้มาตรฐานที่ไม่อนุญาตให้มีการทำงานมากเกินไปโดยใช้เวกเตอร์
ที่มีขนาดแตกต่างกัน
ความโกลาหลเปลี่ยนไปใน -fabi-เวอร์ชั่น=4.
ความไม่ลงรอยกันที่รู้จักกันใน -fabi-เวอร์ชั่น=1 รวมถึง:
· การจัดการส่วนท้ายสำหรับบิตฟิลด์ไม่ถูกต้อง G++ อาจพยายามแพ็คข้อมูล
เป็นไบต์เดียวกับคลาสฐาน ตัวอย่างเช่น:
โครงสร้าง A { โมฆะเสมือน f (); int f1 : 1; };
โครงสร้าง B: สาธารณะ A { int f2: 1; };
ในกรณีนี้ G++ จะใส่ "B::f2" ลงในไบต์เดียวกับ "A::f1"; คอมไพเลอร์อื่นทำ
ไม่. คุณสามารถหลีกเลี่ยงปัญหานี้ได้ด้วยการเติม "A" ให้ชัดเจนเพื่อให้มีขนาดเท่ากับ a
หลายขนาดไบต์บนแพลตฟอร์มของคุณ ที่ทำให้ G++ และคอมไพเลอร์อื่น ๆ กลายเป็น
วาง "B" เหมือนกัน
· การจัดการส่วนท้ายไม่ถูกต้องสำหรับฐานเสมือน G++ ไม่ใช้หาง
padding เมื่อวางฐานเสมือน ตัวอย่างเช่น:
โครงสร้าง A { โมฆะเสมือน f (); ถ่าน c1; };
โครงสร้าง B { B(); ถ่าน c2; };
struct C : สาธารณะ A, เสมือนสาธารณะ B {};
ในกรณีนี้ G++ จะไม่ใส่ "B" ลงในส่วนท้ายของ "A"; อื่น ๆ
คอมไพเลอร์ทำ คุณสามารถหลีกเลี่ยงปัญหานี้ได้โดยการเติม "A" ให้ชัดเจนเพื่อให้เป็น
ขนาดเป็นการจัดตำแหน่งหลายแบบ (ละเว้นคลาสฐานเสมือน); ที่ทำให้เกิด
G++ และคอมไพเลอร์อื่น ๆ เพื่อจัดวาง "C" เหมือนกัน
· การจัดการบิตฟิลด์ที่ไม่ถูกต้องด้วยความกว้างที่ประกาศมากกว่าความกว้าง
ชนิดพื้นฐาน เมื่อบิตฟิลด์ปรากฏในสหภาพ ตัวอย่างเช่น:
ยูเนี่ยน ยู { int i : 4096; };
สมมติว่า "int" ไม่มี 4096 บิต G++ ทำให้ยูเนี่ยนมีขนาดเล็กเกินไปโดย
จำนวนบิตใน "int"
· คลาสว่างสามารถวางที่ออฟเซ็ตที่ไม่ถูกต้อง ตัวอย่างเช่น:
โครงสร้าง A {};
โครงสร้าง B {
เอ เอ;
เสมือนเป็นโมฆะ f ();
};
โครงสร้าง C : สาธารณะ B สาธารณะ A {};
G++ วางคลาสฐาน "A" ของ "C" ไว้ที่ออฟเซ็ตที่ไม่ใช่ศูนย์ ควรวางไว้ที่
ออฟเซ็ตศูนย์ G++ เข้าใจผิดคิดว่าข้อมูล "A" ของ "B" อยู่แล้ว
ที่ออฟเซ็ตศูนย์
· ชื่อของฟังก์ชันเทมเพลตที่มีประเภทที่เกี่ยวข้องกับ "typename" หรือ template template
พารามิเตอร์สามารถจัดการได้ไม่ถูกต้อง
แม่แบบ
เป็นโมฆะ f(พิมพ์ชื่อ Q::X) {}
แม่แบบ คลาส Q>
โมฆะ f(พิมพ์ชื่อ Q ::NS) {}
อินสแตนซ์ของเทมเพลตเหล่านี้อาจเสียหายอย่างไม่ถูกต้อง
นอกจากนี้ยังเตือนเกี่ยวกับการเปลี่ยนแปลงที่เกี่ยวข้องกับ psABI psABI ที่รู้จักเปลี่ยนแปลง ณ จุดนี้
รวมถึง:
· สำหรับ SysV/x86-64 สหภาพแรงงานที่มีสมาชิก "long double" จะถูกส่งต่อในหน่วยความจำเป็น
ระบุไว้ใน psABI ตัวอย่างเช่น:
ยูเนี่ยน ยู {
ยาวสองเท่า ld;
int ฉัน;
};
"ยูเนี่ยนยู" อยู่ในความทรงจำเสมอ
-Wctor-dtor-ความเป็นส่วนตัว (C++ และ Objective-C++ เท่านั้น)
เตือนเมื่อคลาสดูเหมือนใช้ไม่ได้เพราะตัวสร้างหรือตัวทำลายทั้งหมดในนั้น
คลาสเป็นแบบส่วนตัวและไม่มีทั้งเพื่อนหรือสมาชิกแบบสแตติกสาธารณะ
เตือนด้วยหากไม่มีวิธีการที่ไม่ใช่แบบส่วนตัวและมีสมาชิกส่วนตัวอย่างน้อยหนึ่งราย
ฟังก์ชันที่ไม่ใช่ตัวสร้างหรือตัวทำลาย
-Wdelete-ไม่ใช่เสมือน-dtor (C++ และ Objective-C++ เท่านั้น)
เตือนเมื่อ ลบ ใช้เพื่อทำลายอินสแตนซ์ของคลาสที่มีฟังก์ชันเสมือน
และตัวทำลายที่ไม่ใช่เสมือน การลบอินสแตนซ์ของคลาสที่ได้รับไม่ปลอดภัย
ผ่านตัวชี้ไปยังคลาสฐานถ้าคลาสฐานไม่มี virtual
ผู้ทำลาย คำเตือนนี้เปิดใช้งานโดย -ผนัง.
-Wliteral-ต่อท้าย (C++ และ Objective-C++ เท่านั้น)
เตือนเมื่อสตริงหรือตัวอักษรตามตัวอักษร ud-suffix ซึ่งไม่
เริ่มต้นด้วยขีดล่าง ในฐานะส่วนขยายที่สอดคล้อง GCC ถือว่าส่วนต่อท้ายเช่น
แยกโทเค็นการประมวลผลล่วงหน้าเพื่อรักษาความเข้ากันได้ย้อนหลังกับโค้ด
ที่ใช้การจัดรูปแบบมาโครจาก " ". ตัวอย่างเช่น:
#กำหนด __STDC_FORMAT_MACROS
#รวม
#รวม
int หลัก () {
int64_t i64 = 123;
printf("Int64 ของฉัน: %"PRId64"\n", i64);
}
ในกรณีนี้ "PRId64" จะถือเป็นโทเค็นการประมวลผลล่วงหน้าที่แยกต่างหาก
คำเตือนนี้เปิดใช้งานโดยค่าเริ่มต้น
-การหดตัว (C++ และ Objective-C++ เท่านั้น)
เตือนเมื่อมีการจำกัดการแปลงที่ห้ามโดย C++11 ภายใน { }, เช่น
int i = { 2.2 }; // ข้อผิดพลาด: การจำกัดจาก double เป็น int
ธงนี้รวมอยู่ใน -ผนัง และ -Wc++11-เข้ากันได้.
ด้วยระบบเส้นทาง -std = C ++ 11, -Wno-แคบ ระงับการวินิจฉัยที่กำหนดโดยมาตรฐาน
โปรดทราบว่าสิ่งนี้ไม่ส่งผลต่อความหมายของโค้ดที่มีรูปแบบที่ดี การแปลงให้แคบลง
ยังคงถือว่าผิดรูปแบบในบริบทของ SFINAE
-ไม่ยกเว้น (C++ และ Objective-C++ เท่านั้น)
เตือนเมื่อไม่มีนิพจน์ประเมินเป็นเท็จเนื่องจากการเรียกใช้ฟังก์ชัน
ที่ไม่มีข้อกำหนดข้อยกเว้นการไม่โยน (เช่น โยน() or ไม่มีข้อยกเว้น)
แต่เป็นที่รู้จักโดยคอมไพเลอร์ว่าจะไม่ส่งข้อยกเว้น
-Wnon-เสมือน-dtor (C++ และ Objective-C++ เท่านั้น)
เตือนเมื่อคลาสมีฟังก์ชันเสมือนและตัวทำลายล้างที่ไม่ใช่เสมือนที่เข้าถึงได้ in
ซึ่งเป็นไปได้แต่ไม่ปลอดภัยที่จะลบอินสแตนซ์ของคลาสที่ได้รับผ่าน
ตัวชี้ไปยังคลาสพื้นฐาน คำเตือนนี้ยังเปิดใช้งานถ้า -เวฟเอฟซี++ ระบุไว้
- สั่งของ (C++ และ Objective-C++ เท่านั้น)
เตือนเมื่อลำดับของตัวเริ่มต้นสมาชิกที่ให้ในรหัสไม่ตรงกับลำดับ
ซึ่งพวกเขาจะต้องถูกประหารชีวิต ตัวอย่างเช่น:
โครงสร้าง A {
int ฉัน;
int เจ;
A(): j (0), ผม (1) { }
};
คอมไพเลอร์จัดเรียงตัวเริ่มต้นสมาชิกใหม่สำหรับ i และ j เพื่อให้ตรงกับคำประกาศ
คำสั่งของสมาชิกโดยส่งเสียงเตือนถึงผลกระทบนั้น คำเตือนนี้เปิดใช้งานโดย
-ผนัง.
-fext-ตัวเลข-ตัวอักษร (C++ และ Objective-C++ เท่านั้น)
ยอมรับส่วนต่อท้ายตัวเลขตามตัวอักษรจินตภาพ จุดคงที่ หรือที่เครื่องกำหนดเป็น GNU
ส่วนขยาย เมื่อปิดตัวเลือกนี้ ส่วนต่อท้ายเหล่านี้จะถือว่าเป็นผู้ใช้ C++11-
คำต่อท้ายตัวเลขตามตัวอักษรที่กำหนดไว้ นี่เป็นค่าเริ่มต้นสำหรับภาษาถิ่นก่อน C++11 ทั้งหมด
และภาษาถิ่นของ GNU ทั้งหมด: -std = C ++ 98, -std = gnu ++ 98, -std = gnu ++ 11, -std=gnu++1y. นี้
ตัวเลือกถูกปิดโดยค่าเริ่มต้นสำหรับ ISO C++11 เป็นต้นไป (-std = C ++ 11, ...)
ดังต่อไปนี้ -ว... ตัวเลือกจะไม่ได้รับผลกระทบจาก -ผนัง.
-เวฟเอฟซี++ (C++ และ Objective-C++ เท่านั้น)
เตือนเกี่ยวกับการละเมิดหลักเกณฑ์รูปแบบต่อไปนี้จาก Scott Meyers มีประสิทธิภาพ
ค ++, ที่สอง ฉบับที่ หนังสือ:
· รายการที่ 11: กำหนดตัวสร้างสำเนาและตัวดำเนินการมอบหมายสำหรับชั้นเรียนด้วย
หน่วยความจำที่จัดสรรแบบไดนามิก
· รายการที่ 12: ต้องการการกำหนดค่าเริ่มต้นให้กับการกำหนดในตัวสร้าง
· รายการที่ 14: สร้าง destructors เสมือนในคลาสพื้นฐาน
· รายการที่ 15: ให้ "operator=" คืนค่าการอ้างอิงถึง *this
· รายการที่ 23: อย่าพยายามส่งคืนข้อมูลอ้างอิงเมื่อคุณต้องส่งคืนวัตถุ
ยังเตือนเกี่ยวกับการละเมิดหลักเกณฑ์รูปแบบต่อไปนี้จาก Scott Meyers เพิ่มเติม
มีประสิทธิภาพ C + + หนังสือ:
· รายการที่ 6: แยกแยะระหว่างคำนำหน้าและรูปแบบหลังการแก้ไขของการเพิ่มขึ้นและการลดลง
ผู้ประกอบการ
· ข้อ 7: ห้ามโอเวอร์โหลด "&&", "||" หรือ ","
เมื่อเลือกตัวเลือกนี้ โปรดทราบว่าส่วนหัวของไลบรารีมาตรฐานไม่ปฏิบัติตามทั้งหมด
ของแนวทางเหล่านี้ ใช้ grep -v เพื่อกรองคำเตือนเหล่านั้น
-Wstrict-null-แมวมอง (C++ และ Objective-C++ เท่านั้น)
เตือนเกี่ยวกับการใช้ "NULL" ที่ไม่มีการแคสต์เป็นยาม เมื่อคอมไพล์ด้วย GCC . เท่านั้น
นี่คือหน่วยรักษาการณ์ที่ถูกต้อง เนื่องจาก "NULL" ถูกกำหนดเป็น "__null" แม้ว่ามันจะเป็นโมฆะ
ค่าคงที่ของตัวชี้แทนที่จะเป็นตัวชี้ null รับประกันว่าจะมีขนาดเท่ากัน
เป็นตัวชี้ แต่การใช้งานนี้ไม่สามารถเคลื่อนย้ายข้ามคอมไพเลอร์ต่างๆ ได้
-Wno-ไม่ใช่แม่แบบ-เพื่อน (C++ และ Objective-C++ เท่านั้น)
ปิดใช้งานคำเตือนเมื่อมีการประกาศฟังก์ชันของเพื่อนที่ไม่ใช่เทมเพลตภายในเทมเพลต
ตั้งแต่การถือกำเนิดของข้อกำหนดเท็มเพลตที่ชัดเจนสนับสนุนใน G++ ถ้าชื่อของ
เพื่อนคือ ID ที่ไม่มีเงื่อนไข (เช่น เพื่อน ฟู(int)) ข้อกำหนดภาษา C++
เรียกร้องให้เพื่อนประกาศหรือกำหนดฟังก์ชันธรรมดาที่ไม่ใช่เทมเพลต (ส่วน
14.5.3) ก่อนที่ G++ จะใช้ข้อกำหนดที่ชัดเจน รหัสที่ไม่มีเงื่อนไขอาจเป็น
ตีความว่าเป็นความเชี่ยวชาญเฉพาะด้านของฟังก์ชันเทมเพลต เพราะสิ่งนี้
พฤติกรรมที่ไม่เป็นไปตามข้อกำหนดจะไม่เป็นพฤติกรรมเริ่มต้นสำหรับ G++ อีกต่อไป
-ไม่ใช่แม่แบบ-เพื่อน อนุญาตให้คอมไพเลอร์ตรวจสอบรหัสที่มีอยู่เพื่อหาปัญหาที่อาจเกิดขึ้น
จุดและเปิดอยู่โดยค่าเริ่มต้น พฤติกรรมคอมไพเลอร์ใหม่นี้สามารถปิดได้ด้วย
-Wno-ไม่ใช่แม่แบบ-เพื่อนซึ่งเก็บรหัสคอมไพเลอร์ Conformant แต่ปิดการใช้งาน
คำเตือนที่เป็นประโยชน์
-Wold-สไตล์หล่อ (C++ และ Objective-C++ เท่านั้น)
เตือนหากมีการใช้รูปแบบเก่า (สไตล์ C) ที่ส่งไปยังประเภทที่ไม่ใช่โมฆะภายในโปรแกรม C++
นักแสดงรูปแบบใหม่ (ไดนามิก_แคสต์, static_cast, ตีความใหม่_castและ const_cast) คือ
เสี่ยงน้อยกว่าที่จะเกิดผลกระทบที่ไม่ได้ตั้งใจและค้นหาได้ง่ายกว่ามาก
-Woverloaded-เสมือน (C++ และ Objective-C++ เท่านั้น)
เตือนเมื่อการประกาศฟังก์ชันซ่อนฟังก์ชันเสมือนจากคลาสพื้นฐาน สำหรับ
ตัวอย่าง ใน:
โครงสร้าง A {
โมฆะเสมือน f();
};
โครงสร้าง B: สาธารณะ A {
เป็นโมฆะ f(int);
};
เวอร์ชันคลาส "A" ของ "f" ถูกซ่อนอยู่ใน "B" และโค้ดเช่น:
ข*ข;
b->f();
ล้มเหลวในการรวบรวม
-Wno-pmf-การแปลง (C++ และ Objective-C++ เท่านั้น)
ปิดใช้งานการวินิจฉัยสำหรับการแปลงตัวชี้ที่ถูกผูกไว้เป็นฟังก์ชันสมาชิกเป็นแบบธรรมดา
ตัวชี้
-Wsign-โปรโมชั่น (C++ และ Objective-C++ เท่านั้น)
เตือนเมื่อความละเอียดเกินเลือกโปรโมชั่นจากประเภทที่ไม่ได้ลงนามหรือแจกแจงถึง
ประเภทที่ลงนาม มากกว่าการแปลงเป็นประเภทที่ไม่ได้ลงนามซึ่งมีขนาดเท่ากัน ก่อนหน้า
เวอร์ชันของ G++ พยายามรักษา unsignedness แต่มาตรฐานบังคับปัจจุบัน
พฤติกรรม
Options การควบคุม Objective-C และ วัตถุประสงค์-C++ ภาษาถิ่น
(หมายเหตุ: คู่มือนี้ไม่ได้อธิบายเกี่ยวกับภาษา Objective-C และ Objective-C++
ตัวเอง
ส่วนนี้อธิบายตัวเลือกบรรทัดคำสั่งที่มีความหมายสำหรับ Objective-C . เท่านั้น
และโปรแกรม Objective-C++ คุณยังสามารถใช้ GNU . ที่ไม่ขึ้นกับภาษาได้เกือบทั้งหมด
ตัวเลือกคอมไพเลอร์ ตัวอย่างเช่น คุณอาจรวบรวมไฟล์ "some_class.m" ดังนี้:
gcc -g -fgnu-รันไทม์ -O -c some_class.m
ในตัวอย่างนี้ -fgnu-รันไทม์ เป็นตัวเลือกที่มีไว้สำหรับ Objective-C และ Objective-C++ . เท่านั้น
โปรแกรม; คุณสามารถใช้ตัวเลือกอื่นกับภาษาใดก็ได้ที่ GCC รองรับ
โปรดทราบว่าเนื่องจาก Objective-C เป็นส่วนขยายของภาษา C การรวบรวม Objective-C
อาจใช้ตัวเลือกเฉพาะสำหรับส่วนหน้า C (เช่น -แบบดั้งเดิม) ในทำนองเดียวกัน
การรวบรวม Objective-C++ อาจใช้ตัวเลือกเฉพาะ C++ (เช่น -วาบิ).
นี่คือรายการตัวเลือกที่ เพียง สำหรับการคอมไพล์ Objective-C และ Objective-C++
โปรแกรม:
-fconstant-string-คลาส=ชื่อคลาส
ใช้ ชื่อคลาส เป็นชื่อของคลาสที่จะสร้างอินสแตนซ์สำหรับแต่ละสตริงตามตัวอักษร
ระบุด้วยไวยากรณ์ "@"..."" ชื่อคลาสเริ่มต้นคือ "NXConstantString" if
กำลังใช้รันไทม์ของ GNU และ "NSConstantString" หากรันไทม์ NeXT เป็น
ใช้แล้ว (ดูด้านล่าง) NS -fconstant-cfstrings ตัวเลือก ถ้ามีอยู่ด้วย จะแทนที่
-fconstant สตริงคลาส การตั้งค่าและทำให้ตัวอักษร "@"..."" ถูกจัดวางเป็นค่าคงที่
สตริง CoreFoundation
-fgnu-รันไทม์
สร้างโค้ดอ็อบเจ็กต์ที่เข้ากันได้กับรันไทม์ GNU Objective-C มาตรฐาน นี่คือ
ค่าเริ่มต้นสำหรับระบบส่วนใหญ่
-fnext-รันไทม์
สร้างเอาต์พุตที่เข้ากันได้กับรันไทม์ของ NeXT นี่เป็นค่าเริ่มต้นสำหรับ NeXT-based
รวมถึงดาร์วินและ Mac OS X มาโคร "__NEXT_RUNTIME__" ถูกกำหนดไว้ล่วงหน้า if
(และเฉพาะในกรณีที่) ใช้ตัวเลือกนี้
-fno-nil-เครื่องรับ
สมมติว่าข้อความ Objective-C ทั้งหมดถูกส่ง ("[receiver message:arg]") ในนี้
หน่วยการแปลรับรองว่าผู้รับไม่ใช่ "ศูนย์" นี้ช่วยให้มากขึ้น
จุดเริ่มต้นที่มีประสิทธิภาพในการรันไทม์ที่จะใช้ ตัวเลือกนี้ใช้ได้เฉพาะใน
ร่วมกับรันไทม์ NeXT และ ABI เวอร์ชัน 0 หรือ 1
-fobjc-abi-รุ่น=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++ ที่มีตัวทำลายล้างที่ไม่ซับซ้อน และถ้าเป็นเช่นนั้น ให้สังเคราะห์
วิธีการพิเศษ "- (เป็นโมฆะ) .cxx_destruct" ซึ่งรันตัวทำลายเริ่มต้นดังกล่าวทั้งหมดใน
ลำดับย้อนกลับ
วิธีการ "- (id) .cxx_construct" และ "- (เป็นโมฆะ) .cxx_destruct" จึงสร้างขึ้นเท่านั้น
ดำเนินการกับตัวแปรอินสแตนซ์ที่ประกาศในคลาส Objective-C ปัจจุบัน ไม่ใช่เหล่านั้น
สืบทอดมาจากซูเปอร์คลาส เป็นความรับผิดชอบของรันไทม์ Objective-C ถึง
เรียกใช้เมธอดดังกล่าวทั้งหมดในลำดับชั้นการสืบทอดของอ็อบเจ็กต์ เครื่องหมาย "- (id)
เมธอด .cxx_construct" ถูกเรียกใช้โดยรันไทม์ทันทีหลังจากอ็อบเจกต์ใหม่
มีการจัดสรรอินสแตนซ์ เมธอด "- (เป็นโมฆะ) .cxx_destruct" จะถูกเรียกใช้ทันที
ก่อนที่รันไทม์จะจัดสรรคืนอินสแตนซ์ของอ็อบเจ็กต์
ในขณะที่เขียนนี้ เฉพาะรันไทม์ NeXT บน Mac OS X 10.4 และใหม่กว่าเท่านั้นที่รองรับ
เรียกใช้เมธอด "- (id) .cxx_construct" และ "- (เป็นโมฆะ) .cxx_destruct"
-fobjc-ส่งตรง
อนุญาตให้ข้ามไปยังผู้ส่งข้อความอย่างรวดเร็ว ในดาร์วินสิ่งนี้ทำได้ผ่าน
หน้าคอม
-fobjc-ข้อยกเว้น
เปิดใช้งานการสนับสนุนวากยสัมพันธ์สำหรับการจัดการข้อยกเว้นที่มีโครงสร้างใน Objective-C คล้ายกับ
สิ่งที่นำเสนอโดย C ++ และ Java ตัวเลือกนี้จำเป็นต้องใช้วัตถุประสงค์-C
คำหลัก @try, @throw, @catch, @finally และ @synchronized ตัวเลือกนี้ใช้ได้
ที่มีทั้งรันไทม์ GNU และรันไทม์ NeXT (แต่ไม่สามารถใช้ร่วมกับ
รันไทม์ NeXT บน Mac OS X 10.2 และรุ่นก่อนหน้า)
-fobjc-gc
เปิดใช้งานการรวบรวมขยะ (GC) ในโปรแกรม Objective-C และ Objective-C++ ตัวเลือกนี้
ใช้ได้เฉพาะกับรันไทม์ NeXT เท่านั้น รันไทม์ของ GNU มีขยะที่แตกต่างกัน
การใช้งานคอลเลกชันที่ไม่ต้องการแฟล็กคอมไพเลอร์พิเศษ
-fobjc-nilcheck
สำหรับรันไทม์ NeXT ที่มี ABI เวอร์ชัน 2 ให้ตรวจหาตัวรับ nil ในเมธอด
การร้องขอก่อนทำการเรียกเมธอดจริง นี่เป็นค่าเริ่มต้นและสามารถเป็นได้
ปิดการใช้งาน -fno-objc-ไม่มีการตรวจสอบ. ไม่มีการตรวจสอบวิธีการเรียนและการโทรพิเศษ
สำหรับ nil ในลักษณะนี้ ไม่ว่าแฟล็กนี้จะตั้งไว้ที่ใด ปัจจุบันธงนี้ไม่
ไม่มีอะไรเกิดขึ้นเมื่อรันไทม์ GNU หรือ ABI รันไทม์ NeXT รุ่นเก่ากว่าถูกใช้
-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-คลาส
ปล่อยเครื่องหมายพิเศษสอน ld(1) ไม่เชื่อมโยงแบบคงที่ในวัตถุผลลัพธ์
ไฟล์และอนุญาต ดีล(1) เพื่อโหลดในเวลาทำงานแทน ใช้ใน
ร่วมกับโหมดการดีบัก Fix-and-Continue โดยที่ไฟล์อ็อบเจ็กต์อยู่ใน
คำถามอาจถูกคอมไพล์ใหม่และโหลดซ้ำแบบไดนามิกในระหว่างโปรแกรม
โดยไม่ต้องรีสตาร์ทโปรแกรมเอง ปัจจุบัน Fix-and-
ฟังก์ชันการทำงานต่อจะใช้ได้กับรันไทม์ NeXT บน Mac . เท่านั้น
OS X 10.3 และใหม่กว่า
-fzero-ลิงค์
เมื่อทำการคอมไพล์สำหรับรันไทม์ NeXT คอมไพเลอร์มักจะแทนที่การเรียกไปยัง
"objc_getClass("...")" (เมื่อทราบชื่อของคลาส ณ เวลารวบรวม) ด้วย
การอ้างอิงคลาสสแตติกที่เริ่มต้นในเวลาโหลด ซึ่งช่วยปรับปรุงรันไทม์
ประสิทธิภาพ. การระบุ -fzero-ลิงค์ แฟล็กระงับพฤติกรรมและสาเหตุนี้
เรียก "objc_getClass("...")" เพื่อคงไว้ สิ่งนี้มีประโยชน์ใน Zero-Link
โหมดดีบัก เนื่องจากอนุญาตให้แก้ไขการใช้งานคลาสแต่ละคลาสได้
ระหว่างดำเนินการโปรแกรม ปัจจุบันรันไทม์ของ GNU จะเก็บการเรียกไปยัง . เสมอ
"objc_get_class("...")" โดยไม่คำนึงถึงตัวเลือกบรรทัดคำสั่ง
-gen-ประกาศ
การประกาศอินเทอร์เฟซการถ่ายโอนข้อมูลสำหรับคลาสทั้งหมดที่เห็นในไฟล์ต้นทางไปยังไฟล์ชื่อ
sourcename.decl.
-Wassign-สกัดกั้น (Objective-C และ Objective-C++ เท่านั้น)
เตือนเมื่อใดก็ตามที่งาน Objective-C ถูกดักจับโดยตัวรวบรวมขยะ
-Wno-โปรโตคอล (Objective-C และ Objective-C++ เท่านั้น)
หากมีการประกาศคลาสเพื่อใช้โปรโตคอล จะมีการออกคำเตือนสำหรับทุกเมธอด
ในโปรโตคอลที่ไม่ได้ใช้งานโดยคลาส พฤติกรรมเริ่มต้นคือto
ออกคำเตือนสำหรับทุกวิธีที่ไม่ได้ใช้งานอย่างชัดเจนในคลาส แม้ว่าa
การนำวิธีการไปใช้นั้นสืบทอดมาจากซูเปอร์คลาส หากคุณใช้ -Wno-โปรโตคอล
อ็อพชัน ดังนั้นเมธอดที่สืบทอดมาจากซูเปอร์คลาสจะถือว่าถูกนำไปใช้งาน
และไม่มีการเตือนสำหรับพวกเขา
-Wตัวเลือก (Objective-C และ Objective-C++ เท่านั้น)
เตือนหากพบวิธีการหลายประเภทที่แตกต่างกันสำหรับตัวเลือกเดียวกันในระหว่าง
การรวบรวม การตรวจสอบจะดำเนินการในรายการวิธีการในขั้นตอนสุดท้ายของ
การรวบรวม นอกจากนี้ จะมีการตรวจสอบสำหรับตัวเลือกแต่ละตัวที่ปรากฏใน a
นิพจน์ "@selector(...)" และวิธีการที่สอดคล้องกันสำหรับตัวเลือกนั้น
พบในระหว่างการรวบรวม เนื่องจากการตรวจสอบเหล่านี้จะสแกนตารางวิธีการเฉพาะที่ส่วนท้าย
ของการรวบรวม คำเตือนเหล่านี้จะไม่เกิดขึ้นหากขั้นตอนสุดท้ายของการรวบรวมคือ
ไม่ถึง เช่น เนื่องจากพบข้อผิดพลาดระหว่างการรวบรวม หรือเนื่องจาก
-fsyntax เท่านั้น กำลังใช้ตัวเลือก
-Wstrict-ตัวเลือกการแข่งขัน (Objective-C และ Objective-C++ เท่านั้น)
เตือนหากพบวิธีการหลายวิธีที่มีอาร์กิวเมนต์และ/หรือประเภทการส่งคืนที่แตกต่างกันสำหรับa
ให้ตัวเลือกเมื่อพยายามส่งข้อความโดยใช้ตัวเลือกนี้ไปยังผู้รับของ
พิมพ์ "id" หรือ "Class" เมื่อแฟล็กนี้ปิดอยู่ (ซึ่งเป็นพฤติกรรมเริ่มต้น) ค่า
คอมไพเลอร์ละเว้นคำเตือนดังกล่าวหากพบความแตกต่างใด ๆ ที่ จำกัด เฉพาะประเภทที่แชร์
ขนาดและการจัดตำแหน่งเท่ากัน
-Wundeclared-ตัวเลือก (Objective-C และ Objective-C++ เท่านั้น)
เตือนหากพบนิพจน์ "@selector(...)" ที่อ้างถึงตัวเลือกที่ไม่ได้ประกาศ NS
ตัวเลือกจะถือว่าไม่ประกาศหากไม่มีการประกาศวิธีการที่มีชื่อนั้นมาก่อน
นิพจน์ "@selector(...)" อย่างชัดแจ้งใน @interface หรือ @protocol
การประกาศหรือโดยปริยายในหัวข้อ @implementation ตัวเลือกนี้ทำงานเสมอ
จะตรวจสอบทันทีที่พบนิพจน์ "@selector(...)" ในขณะที่ -Wตัวเลือก เพียง
ดำเนินการตรวจสอบในขั้นตอนสุดท้ายของการรวบรวม นอกจากนี้ยังบังคับใช้การเข้ารหัส
แบบแผนซึ่งจะต้องประกาศวิธีการและตัวเลือกก่อนใช้งาน
-print-objc-รันไทม์ข้อมูล
สร้างส่วนหัว C ที่อธิบายโครงสร้างที่ใหญ่ที่สุดที่ส่งผ่านตามค่า หากมี
Options ไปยัง Control การวินิจฉัย Messages การจัดรูปแบบ
ตามเนื้อผ้า ข้อความวินิจฉัยได้รับการจัดรูปแบบโดยไม่คำนึงถึงอุปกรณ์เอาท์พุต
ด้าน (เช่น ความกว้าง ...) คุณสามารถใช้ตัวเลือกที่อธิบายไว้ด้านล่างเพื่อควบคุม
อัลกอริธึมการจัดรูปแบบสำหรับข้อความวินิจฉัย เช่น จำนวนอักขระต่อบรรทัด ความถี่
ข้อมูลตำแหน่งต้นทางควรรายงาน โปรดทราบว่าส่วนหน้าของบางภาษาอาจ
ไม่ให้เกียรติตัวเลือกเหล่านี้
-fmessage-ความยาว=n
ลองจัดรูปแบบข้อความแสดงข้อผิดพลาดเพื่อให้พอดีกับบรรทัดของ about n อักขระ
ค่าเริ่มต้นคือ 72 ตัวอักษรสำหรับ g ++ และ 0 สำหรับส่วนหน้าที่เหลือที่รองรับโดย
จีซีซี. ถ้า n เป็นศูนย์ ไม่มีการพันบรรทัด แต่ละข้อความแสดงข้อผิดพลาดจะปรากฏบน a
แถวเดียว.
-fdiagnostics-show-location=ครั้งเดียว
มีความหมายเฉพาะในโหมดตัดบรรทัด สั่งให้ผู้รายงานข้อความวินิจฉัยไปที่
ส่งข้อมูลตำแหน่งต้นทาง ครั้งเดียว; นั่นคือในกรณีที่ข้อความยาวเกินไปที่จะพอดี
ในบรรทัดเดียวและต้องห่อ ตำแหน่งต้นทางจะไม่ถูกปล่อยออก
(เป็นคำนำหน้า) ซ้ำแล้วซ้ำเล่าในบรรทัดต่อๆ ไป นี้เป็น
พฤติกรรมเริ่มต้น
-fdiagnostics-show-location=ever-line
มีความหมายเฉพาะในโหมดตัดบรรทัด สั่งให้ผู้รายงานข้อความวินิจฉัยไปที่
ปล่อยข้อมูลตำแหน่งต้นทางเดียวกัน (เป็นคำนำหน้า) สำหรับเส้นทางกายภาพที่ส่งผล
จากกระบวนการทำลายข้อความที่ยาวเกินกว่าจะใส่เป็นบรรทัดเดียวได้
-fno-diagnostics-แสดงตัวเลือก
โดยค่าเริ่มต้น การวินิจฉัยแต่ละรายการที่ปล่อยออกมาจะมีข้อความระบุตัวเลือกบรรทัดคำสั่ง
ที่ควบคุมการวินิจฉัยโดยตรง (หากตัวเลือกดังกล่าวเป็นที่รู้จักในการวินิจฉัย
เครื่องจักร) การระบุ -fno-diagnostics-แสดงตัวเลือก ธงระงับสิ่งนั้น
พฤติกรรม
-fno-diagnostics-show-caret
โดยค่าเริ่มต้น การวินิจฉัยแต่ละรายการที่ปล่อยออกมาจะมีบรรทัดต้นฉบับและเครื่องหมายรูปหมวก '^'
ระบุคอลัมน์ ตัวเลือกนี้จะระงับข้อมูลนี้
Options ไปยัง ขอร้อง or ปราบปราม คำแนะนำ:
คำเตือนเป็นข้อความวินิจฉัยที่รายงานโครงสร้างที่ไม่อยู่ในเนื้อแท้
ผิดพลาดแต่มีความเสี่ยงหรือแนะนำว่าอาจมีข้อผิดพลาด
ตัวเลือกที่ไม่ขึ้นกับภาษาต่อไปนี้ไม่ได้เปิดใช้งานคำเตือนเฉพาะ แต่ควบคุม
ประเภทของการวินิจฉัยที่ผลิตโดย GCC
-fsyntax เท่านั้น
ตรวจสอบรหัสเพื่อหาข้อผิดพลาดทางไวยากรณ์ แต่อย่าทำอะไรเกินกว่านั้น
-fmax-ข้อผิดพลาด=n
จำกัดจำนวนข้อความแสดงข้อผิดพลาดสูงสุดไว้ที่ nณ จุดนั้น GCC ประกันตัวค่อนข้าง
มากกว่าที่จะพยายามประมวลผลซอร์สโค้ดต่อไป ถ้า n คือ 0 (ค่าเริ่มต้น)
ไม่มีการจำกัดจำนวนข้อความแสดงข้อผิดพลาดที่ผลิต ถ้า -Wfatal-ข้อผิดพลาด นอกจากนี้ยังมี
ระบุแล้ว -Wfatal-ข้อผิดพลาด มีความสำคัญเหนือตัวเลือกนี้
-w ยับยั้งข้อความเตือนทั้งหมด
- ผิดพลาด
ทำให้คำเตือนทั้งหมดเป็นข้อผิดพลาด
-ข้อผิดพลาด=
ทำให้คำเตือนที่ระบุเป็นข้อผิดพลาด ตัวระบุสำหรับคำเตือนถูกผนวก;
เช่น -Werror = สวิตช์ เปลี่ยนคำเตือนที่ควบคุมโดย -สวิตช์ เป็นข้อผิดพลาด
สวิตช์นี้ใช้รูปแบบเชิงลบ เพื่อใช้ในการปฏิเสธ - ผิดพลาด สำหรับคำเตือนเฉพาะ
เช่น - ไม่มีข้อผิดพลาด = สวิตช์ ทำให้ -สวิตช์ คำเตือนไม่ใช่ข้อผิดพลาดแม้ว่า - ผิดพลาด
มีผลบังคับใช้
ข้อความเตือนสำหรับแต่ละคำเตือนที่ควบคุมได้รวมถึงตัวเลือกที่ควบคุม
คำเตือน สามารถใช้ตัวเลือกนั้นกับ -ข้อผิดพลาด= และ -Wno-ข้อผิดพลาด= ตามที่อธิบายไว้
ข้างต้น. (การพิมพ์ตัวเลือกในข้อความเตือนสามารถปิดใช้งานได้โดยใช้ปุ่ม
-fno-diagnostics-แสดงตัวเลือก ธง.)
โปรดทราบว่าการระบุ -ข้อผิดพลาด=foo หมายความโดยอัตโนมัติ -Wfoo. อย่างไรก็ตาม -Wno-ข้อผิดพลาด=foo
ไม่ได้หมายความถึงอะไร
-Wfatal-ข้อผิดพลาด
ตัวเลือกนี้ทำให้คอมไพเลอร์ยกเลิกการคอมไพล์เมื่อเกิดข้อผิดพลาดครั้งแรก
แทนที่จะพยายามพิมพ์ข้อความแสดงข้อผิดพลาดต่อไป
คุณสามารถขอคำเตือนเฉพาะมากมายด้วยตัวเลือกที่ขึ้นต้นด้วย -W, ตัวอย่างเช่น
-วิปริต เพื่อขอคำเตือนเกี่ยวกับการประกาศโดยนัย แต่ละคำเตือนเฉพาะเหล่านี้
ตัวเลือกยังมีการเริ่มต้นรูปแบบเชิงลบ -ไม่- เพื่อปิดคำเตือน ตัวอย่างเช่น,
-Wno-โดยปริยาย. คู่มือนี้แสดงรายการเพียงหนึ่งในสองแบบฟอร์ม แล้วแต่ว่ากรณีใดไม่ใช่ค่าเริ่มต้น
สำหรับตัวเลือกเฉพาะภาษาเพิ่มเติม โปรดดูที่ C + + ภาษาถิ่น Options และ Objective-C
และ วัตถุประสงค์-C++ ภาษาถิ่น Options.
เมื่อมีการร้องขอตัวเลือกคำเตือนที่ไม่รู้จัก (เช่น -Wunknown-คำเตือน), GCC ปล่อย a
การวินิจฉัยระบุว่าไม่รู้จักตัวเลือก อย่างไรก็ตาม หาก -ไม่- ใช้แบบฟอร์ม,
พฤติกรรมแตกต่างกันเล็กน้อย: ไม่มีการสร้างการวินิจฉัยสำหรับ -Wno-unknown-คำเตือน
เว้นแต่จะมีการสร้างการวินิจฉัยอื่นๆ ซึ่งช่วยให้สามารถใช้ new -ไม่- ตัวเลือก
กับคอมไพเลอร์เก่า แต่ถ้ามีอะไรผิดพลาด คอมไพเลอร์เตือนว่าไม่รู้จัก
มีตัวเลือกอยู่
-Wpedantic
-อวดดี
ออกคำเตือนทั้งหมดตามข้อกำหนด ISO C และ ISO C++ ที่เข้มงวด ปฏิเสธทุกโปรแกรมที่
ใช้ส่วนขยายที่ต้องห้าม และโปรแกรมอื่นๆ บางโปรแกรมที่ไม่เป็นไปตาม ISO C และ ISO
ค ++ สำหรับ ISO C ให้เป็นไปตามเวอร์ชันของมาตรฐาน ISO C ที่ระบุโดย any -มาตรฐาน
ตัวเลือกที่ใช้
โปรแกรม ISO C และ ISO C++ ที่ถูกต้องควรคอมไพล์อย่างถูกต้องโดยมีหรือไม่มีตัวเลือกนี้
(แม้ว่าหายากน้อยต้องการ -แอนซี หรือ -มาตรฐาน ตัวเลือกระบุเวอร์ชันที่ต้องการของ
ISO C). อย่างไรก็ตาม หากไม่มีตัวเลือกนี้ ส่วนขยาย GNU บางรายการและ C และ . ดั้งเดิม
รองรับคุณสมบัติ C ++ เช่นกัน ด้วยตัวเลือกนี้ พวกเขาจะถูกปฏิเสธ
-Wpedantic ไม่ก่อให้เกิดข้อความเตือนสำหรับการใช้คำสำคัญอื่นซึ่ง
ชื่อขึ้นต้นและลงท้ายด้วย __. คำเตือน Pedantic ยังปิดการใช้งานในนิพจน์
ที่ตามหลัง "__extension__" อย่างไรก็ตาม ไฟล์ส่วนหัวของระบบเท่านั้นที่ควรใช้ไฟล์เหล่านี้
เส้นทางหลบหนี โปรแกรมแอปพลิเคชันควรหลีกเลี่ยง
ผู้ใช้บางคนลองใช้ -Wpedantic เพื่อตรวจสอบโปรแกรมเพื่อให้สอดคล้องกับมาตรฐาน ISO C ที่เข้มงวด พวกเขา
ไม่ช้าก็พบว่ามันไม่ได้ทำในสิ่งที่พวกเขาต้องการ: พบแนวทางปฏิบัติที่ไม่ใช่ ISO
แต่ไม่ทั้งหมด---เฉพาะที่ ISO C ต้อง การวินิจฉัยและอื่น ๆ สำหรับ
ที่มีการเพิ่มการวินิจฉัย
คุณลักษณะในการรายงานความล้มเหลวในการปฏิบัติตาม ISO C อาจมีประโยชน์ในบางกรณี
แต่จะต้องใช้งานเพิ่มเติมอีกมาก และจะค่อนข้างแตกต่างไปจาก
-Wpedantic. เราไม่มีแผนจะสนับสนุนคุณลักษณะดังกล่าวในอนาคตอันใกล้นี้
โดยที่มาตรฐานกำหนดไว้ด้วย -มาตรฐาน แสดงถึงภาษาถิ่นขยาย GNU ของ C เช่น
gnu90 or gnu99, มีความสอดคล้อง ฐาน มาตรฐาน, เวอร์ชันของ ISO C ที่
ภาษาถิ่นขยาย GNU เป็นพื้นฐาน คำเตือนจาก -Wpedantic จะได้รับที่ที่พวกเขาอยู่
ที่ต้องการตามมาตรฐานฐาน (ไม่สมควรที่จะตักเตือนเช่นนั้น
สำหรับคุณสมบัติที่ไม่ได้อยู่ในภาษา GNU C ที่ระบุเท่านั้นเนื่องจากตามคำจำกัดความของ GNU
ภาษาถิ่นของ C รวมถึงคุณสมบัติทั้งหมดที่คอมไพเลอร์รองรับด้วยตัวเลือกที่กำหนดและ
จะได้ไม่ต้องเตือนอะไร)
-pedantic-ข้อผิดพลาด
Like -Wpedanticยกเว้นว่ามีการสร้างข้อผิดพลาดมากกว่าการเตือน
-ผนัง
ซึ่งจะทำให้คำเตือนทั้งหมดเกี่ยวกับโครงสร้างที่ผู้ใช้บางคนพิจารณา
น่าสงสัยและง่ายต่อการหลีกเลี่ยง (หรือแก้ไขเพื่อป้องกันการเตือน) แม้แต่ใน
ร่วมกับมาโคร นอกจากนี้ยังเปิดใช้งานคำเตือนเฉพาะบางภาษาที่อธิบายไว้
in C + + ภาษาถิ่น Options และ Objective-C และ วัตถุประสงค์-C++ ภาษาถิ่น Options.
-ผนัง เปิดแฟล็กคำเตือนต่อไปนี้:
-Waddress -Warray ขอบเขต (เฉพาะกับ -O2) -Wc++11-เข้ากันได้ -Wchar-ตัวห้อย
-Wenum-เปรียบเทียบ (ใน C/ObjC นี่เป็นค่าเริ่มต้นใน C++) -Wimplicit-int (ค และ
วัตถุประสงค์-C เท่านั้น) -Wimplicit-ฟังก์ชั่น-การประกาศ (C และ Objective-C เท่านั้น) -ความคิดเห็น
-Wรูปแบบ -Wเมน (สำหรับ C/ObjC เท่านั้น และเว้นแต่ - อิสระ) -Wmaybe-ไม่ได้กำหนดค่าเริ่มต้น
-Wmissing-เหล็กดัดฟัน (สำหรับ C/ObjC เท่านั้น) -Wไม่เป็นโมฆะ -วงเล็บ -Wpointer-สัญญาณ - สั่งของ
-Wreturn-ประเภท -Wsequence จุด -Wsign-เปรียบเทียบ (เฉพาะใน C ++) -Wstrict-นามแฝง
-Wstrict-ล้น=1 -สวิตช์ -Wtrigraphs - กำหนดค่าเริ่มต้น -Wunknown-pragmas
-Wunused-ฟังก์ชั่น -Wunused-ฉลาก -Wunused-ค่า -Wunused-ตัวแปร
-Wvolatile-ลงทะเบียน-var
โปรดทราบว่าแฟล็กคำเตือนบางอย่างไม่ได้หมายความถึง -ผนัง. บางคนเตือนเกี่ยวกับ
โครงสร้างที่ผู้ใช้โดยทั่วไปไม่ถือว่าน่าสงสัย แต่ซึ่ง
บางครั้งคุณอาจต้องการตรวจสอบ; คนอื่นเตือนเกี่ยวกับการก่อสร้างที่
จำเป็นหรือหลีกเลี่ยงได้ยากในบางกรณี และไม่มีวิธีง่ายๆ ในการปรับเปลี่ยน
รหัสเพื่อระงับการเตือน บางส่วนเปิดใช้งานโดย -เว็กซ์ตร้า แต่หลายคน
ต้องเปิดใช้งานเป็นรายบุคคล
-เว็กซ์ตร้า
สิ่งนี้จะเปิดใช้งานแฟล็กคำเตือนพิเศษบางอย่างที่ไม่ได้เปิดใช้งานโดย -ผนัง. (ตัวเลือกนี้ใช้
ที่จะเรียกว่า -W. ยังคงรองรับชื่อเก่า แต่ชื่อที่ใหม่กว่านั้นมากกว่า
คำอธิบาย)
- อุดตัน -ร่างกายเปียกปอน -Wignored-รอบคัดเลือก -Wmissing ฟิลด์เริ่มต้น
-Wmissing-พารามิเตอร์-type (ซีเท่านั้น) -Wold-style-ประกาศ (ซีเท่านั้น) -Woverride-เริ่มต้น
-Wsign-เปรียบเทียบ -Wtype-จำกัด - กำหนดค่าเริ่มต้น -Wunused-พารามิเตอร์ (เฉพาะกับ - ใช้งานไม่ได้ or
-ผนัง) -Wunused-แต่-ตั้งค่า-พารามิเตอร์ (เฉพาะกับ - ใช้งานไม่ได้ or -ผนัง)
ทางเลือก -เว็กซ์ตร้า ยังพิมพ์ข้อความเตือนสำหรับกรณีต่อไปนี้:
· ตัวชี้ถูกเปรียบเทียบกับศูนย์จำนวนเต็มด้วย <, <=, >,หรือ >=.
· (เฉพาะ C++) ทั้งตัวแจงนับและตัวนับไม่ปรากฏอยู่ในเงื่อนไข
การแสดงออก
· (C++ เท่านั้น) ฐานเสมือนที่คลุมเครือ
· (C++ เท่านั้น) การสมัครสมาชิกอาร์เรย์ที่ได้รับการประกาศ ทะเบียน.
· (C++ เท่านั้น) รับแอดเดรสของตัวแปรที่ประกาศไว้ ทะเบียน.
· (C++ เท่านั้น) คลาสฐานไม่ได้เตรียมใช้งานในตัวสร้างสำเนาของคลาสที่ได้รับ
-Wchar-ตัวห้อย
เตือนว่าตัวห้อยอาร์เรย์มีประเภท "char" นี่เป็นสาเหตุของข้อผิดพลาดทั่วไป เช่น
โปรแกรมเมอร์มักจะลืมไปว่าประเภทนี้มีการลงนามในเครื่องบางเครื่อง คำเตือนนี้คือ
เปิดใช้งานโดย -ผนัง.
-ความคิดเห็น
เตือนเมื่อใดก็ตามที่ความคิดเห็นเริ่มต้นลำดับ /* ปรากฏใน a /* แสดงความคิดเห็นหรือเมื่อใดก็ตามที่
แบ็กสแลช-Newline ปรากฏใน a // ความคิดเห็น คำเตือนนี้เปิดใช้งานโดย -ผนัง.
-Wno-ครอบคลุม-ไม่ตรงกัน
เตือนหากโปรไฟล์คำติชมไม่ตรงกันเมื่อใช้ -fprofile-ใช้ ตัวเลือก. ถ้า
ไฟล์ต้นฉบับมีการเปลี่ยนแปลงระหว่างการคอมไพล์ด้วย -fprofile-gen และมี -fprofile-ใช้,
ไฟล์ที่มีข้อเสนอแนะโปรไฟล์อาจไม่ตรงกับไฟล์ต้นฉบับและ GCC ไม่สามารถทำได้
ใช้ข้อมูลป้อนกลับของโปรไฟล์ โดยค่าเริ่มต้น คำเตือนนี้จะเปิดใช้งานและเป็น
ถือเป็นข้อผิดพลาด -Wno-ครอบคลุม-ไม่ตรงกัน สามารถใช้ปิดการเตือนหรือ
-Wno-error=ความครอบคลุม-ไม่ตรงกัน สามารถใช้เพื่อปิดการใช้งานข้อผิดพลาด ปิดการใช้งานข้อผิดพลาด
สำหรับคำเตือนนี้อาจส่งผลให้โค้ดที่ปรับให้เหมาะสมไม่ดีและมีประโยชน์เฉพาะในกรณีของ
การเปลี่ยนแปลงเล็กน้อยมาก เช่น การแก้ไขข้อผิดพลาดในฐานรหัสที่มีอยู่ ปิดการใช้งานโดยสิ้นเชิง
ไม่แนะนำคำเตือน
-Wno-cpp
(C, Objective-C, C++, Objective-C++ และ Fortran เท่านั้น)
ระงับข้อความเตือนที่ส่งโดยคำสั่ง "#warning"
-Wdouble-โปรโมชั่น (C, C++, Objective-C และ Objective-C++ เท่านั้น)
ให้คำเตือนเมื่อค่าของประเภท "float" ได้รับการเลื่อนระดับเป็น "สองเท่า" โดยปริยาย ซีพียู
ด้วยหน่วยทศนิยม "ความแม่นยำเดียว" แบบ 32 บิตใช้ "ลอย" ในฮาร์ดแวร์
แต่เลียนแบบ "สองเท่า" ในซอฟต์แวร์ บนเครื่องดังกล่าว ทำการคำนวณโดยใช้
ค่า "สองเท่า" มีราคาแพงกว่ามากเนื่องจากค่าใช้จ่ายที่จำเป็นสำหรับซอฟต์แวร์
การจำลอง
มันง่ายที่จะคำนวณด้วย "สองเท่า" โดยไม่ตั้งใจเพราะว่าทศนิยม
ตัวอักษรโดยปริยายของประเภท "คู่" ตัวอย่างเช่นใน:
พื้นที่ลอย (รัศมีลอย)
{
ส่งคืน 3.14159 * รัศมี * รัศมี;
}
คอมไพเลอร์ทำการคำนวณทั้งหมดด้วย "double" เพราะค่าทศนิยม
อักษรคือ "คู่"
-Wรูปแบบ
-Wรูปแบบ=n
ตรวจสอบการเรียก "printf" และ "scanf" เป็นต้น เพื่อให้แน่ใจว่าอาร์กิวเมนต์ที่ให้มา
มีประเภทที่เหมาะสมกับสตริงรูปแบบที่ระบุและการแปลง
ระบุไว้ในสตริงรูปแบบที่เหมาะสม ซึ่งรวมถึงฟังก์ชันมาตรฐานและ
อื่นๆ ที่ระบุโดยแอตทริบิวต์รูปแบบ ใน "printf", "scanf", "strftime" และ
"strfmon" (ส่วนขยาย X/Open ไม่ใช่ในมาตรฐาน C) (หรือเป้าหมายอื่นๆ-
ครอบครัวเฉพาะ) ฟังก์ชันใดได้รับการตรวจสอบโดยไม่มีแอตทริบิวต์รูปแบบ
ที่ระบุขึ้นอยู่กับรุ่นมาตรฐานที่เลือกและการตรวจสอบฟังก์ชั่นดังกล่าว
โดยไม่มีแอตทริบิวต์ที่ระบุถูกปิดใช้งานโดย - อิสระ or -fno-ในตัว.
รูปแบบจะถูกตรวจสอบโดยเทียบกับคุณลักษณะรูปแบบที่สนับสนุนโดย GNU libc เวอร์ชัน 2.2
ซึ่งรวมถึงคุณลักษณะ ISO C90 และ C99 ทั้งหมด ตลอดจนคุณลักษณะจาก Single Unix
ข้อมูลจำเพาะและส่วนขยาย BSD และ GNU บางส่วน การใช้งานห้องสมุดอื่น ๆ อาจไม่
รองรับคุณสมบัติเหล่านี้ทั้งหมด GCC ไม่รองรับการเตือนเกี่ยวกับคุณสมบัติที่เหนือกว่า
ข้อจำกัดของห้องสมุดโดยเฉพาะ อย่างไรก็ตาม ถ้า -Wpedantic ใช้กับ -Wรูปแบบ,
มีการเตือนเกี่ยวกับคุณสมบัติของรูปแบบที่ไม่ได้อยู่ในรุ่นมาตรฐานที่เลือก (แต่ไม่ใช่
สำหรับรูปแบบ "strfmon" เนื่องจากรูปแบบเหล่านี้ไม่ได้อยู่ในมาตรฐาน C เวอร์ชันใดๆ)
-Wรูปแบบ=1
-Wรูปแบบ
ตัวเลือกเสริม (Option) -Wรูปแบบ เทียบเท่ากับ -Wรูปแบบ=1และ -Wno-รูปแบบ เทียบเท่ากับ
-Wรูปแบบ=0. ตั้งแต่ -Wรูปแบบ ยังตรวจสอบอาร์กิวเมนต์รูปแบบ null สำหรับหลาย ๆ
ฟังก์ชั่น -Wรูปแบบ ยังหมายความถึง -Wไม่เป็นโมฆะ. บางส่วนของรูปแบบระดับนี้
การตรวจสอบสามารถปิดใช้งานได้โดยตัวเลือก: -Wno-format-contain-nul,
-Wno-รูปแบบพิเศษหาเรื่องและ -Wno-รูปแบบความยาวเป็นศูนย์. -Wรูปแบบ เปิดใช้งานโดย
-ผนัง.
-Wno-format-contain-nul
If -Wรูปแบบ ถูกระบุ ห้ามเตือนเกี่ยวกับรูปแบบสตริงที่มี NUL ไบต์
-Wno-รูปแบบพิเศษหาเรื่อง
If -Wรูปแบบ ถูกระบุ ห้ามเตือนเกี่ยวกับอาร์กิวเมนต์ส่วนเกินสำหรับ "printf" หรือ
ฟังก์ชันรูปแบบ "scanf" มาตรฐาน C ระบุว่าอาร์กิวเมนต์ดังกล่าวเป็น
ละเว้น
โดยที่อาร์กิวเมนต์ที่ไม่ได้ใช้อยู่ระหว่างอาร์กิวเมนต์ที่ใช้ซึ่งระบุด้วย $
ข้อมูลจำเพาะของหมายเลขตัวถูกดำเนินการ โดยปกติจะยังคงได้รับคำเตือน เนื่องจาก
การใช้งานไม่สามารถทราบประเภทที่จะส่งผ่านไปยัง "va_arg" เพื่อข้ามส่วนที่ไม่ได้ใช้
อาร์กิวเมนต์ อย่างไรก็ตาม ในกรณีของรูปแบบ "scanf" ตัวเลือกนี้จะระงับ
เตือนถ้าอาร์กิวเมนต์ที่ไม่ได้ใช้เป็นตัวชี้ทั้งหมดตั้งแต่ Single Unix
ข้อมูลจำเพาะระบุว่าอนุญาตให้ใช้อาร์กิวเมนต์ที่ไม่ได้ใช้ดังกล่าว
-Wno-รูปแบบความยาวเป็นศูนย์
If -Wรูปแบบ มีการระบุ ห้ามเตือนเกี่ยวกับรูปแบบที่มีความยาวเป็นศูนย์ มาตรฐานซี
ระบุว่าอนุญาตให้ใช้รูปแบบที่มีความยาวเป็นศูนย์
-Wรูปแบบ=2
ทำให้สามารถ -Wรูปแบบ บวกกับการตรวจสอบรูปแบบเพิ่มเติม ปัจจุบันเทียบเท่ากับ -Wรูปแบบ
-Wformat-ไม่ใช่ตัวอักษร -Wformat-การรักษาความปลอดภัย -Wformat-y2k.
-Wformat-ไม่ใช่ตัวอักษร
If -Wรูปแบบ ถูกระบุ และเตือนด้วยว่าสตริงรูปแบบไม่ใช่สตริงตามตัวอักษร
ดังนั้นจึงไม่สามารถตรวจสอบได้ เว้นแต่ฟังก์ชันรูปแบบจะใช้อาร์กิวเมนต์รูปแบบเป็น
"va_list"
-Wformat-การรักษาความปลอดภัย
If -Wรูปแบบ ระบุยังเตือนเกี่ยวกับการใช้ฟังก์ชั่นรูปแบบที่เป็นตัวแทนของ
ปัญหาด้านความปลอดภัยที่อาจเกิดขึ้น ปัจจุบันนี้เตือนเรื่องการเรียก "printf" และ
ฟังก์ชัน "scanf" โดยที่สตริงรูปแบบไม่ใช่สตริงตามตัวอักษร และไม่มี
อาร์กิวเมนต์รูปแบบเช่นเดียวกับใน "printf (foo);" นี่อาจเป็นช่องโหว่ด้านความปลอดภัยหาก
สตริงรูปแบบมาจากอินพุตที่ไม่น่าเชื่อถือและมี %n. (ขณะนี้คือ
เซตย่อยของอะไร -Wformat-ไม่ใช่ตัวอักษร เตือนแต่ในอนาคตอาจจะเตือน
เพิ่มไปยัง -Wformat-การรักษาความปลอดภัย ที่ไม่รวมอยู่ใน -Wformat-ไม่ใช่ตัวอักษร.)
หมายเหตุ: ใน Ubuntu 8.10 และเวอร์ชันที่ใหม่กว่า ตัวเลือกนี้จะเปิดใช้งานโดยค่าเริ่มต้นสำหรับ C
C++, ObjC, ObjC++ หากต้องการปิดใช้งาน ให้ใช้ -Wno-รูปแบบการรักษาความปลอดภัยหรือปิดการใช้งานทุกรูปแบบ
คำเตือนด้วย -Wรูปแบบ=0. หากต้องการให้คำเตือนเกี่ยวกับความปลอดภัยของรูปแบบร้ายแรง ให้ระบุ
-Werror=รูปแบบการรักษาความปลอดภัย.
-Wformat-y2k
If -Wรูปแบบ ถูกระบุ และยังเตือนเกี่ยวกับรูปแบบ "strftime" ที่อาจให้ผลเพียง a
ปีสองหลัก
-Wไม่เป็นโมฆะ
เตือนเกี่ยวกับการส่งผ่านตัวชี้ค่าว่างสำหรับอาร์กิวเมนต์ที่ทำเครื่องหมายว่าต้องการค่าที่ไม่ใช่ค่าว่าง
โดยแอตทริบิวต์ฟังก์ชัน "nonnull"
-Wไม่เป็นโมฆะ รวมอยู่ใน -ผนัง และ -Wรูปแบบ. มันสามารถปิดการใช้งานด้วย -Wno-ไม่เป็นโมฆะ
ตัวเลือก
-Winit-ตัวเอง (C, C++, Objective-C และ Objective-C++ เท่านั้น)
เตือนเกี่ยวกับตัวแปรที่ไม่ได้กำหนดค่าเริ่มต้นที่เริ่มต้นด้วยตัวเอง หมายเหตุ
สามารถใช้ตัวเลือกได้เฉพาะกับ - กำหนดค่าเริ่มต้น ตัวเลือก
ตัวอย่างเช่น GCC เตือนเกี่ยวกับ "i" ที่ไม่ได้กำหนดค่าเริ่มต้นในตัวอย่างต่อไปนี้เท่านั้น
เมื่อ -Winit-ตัวเอง ได้รับการระบุ:
int ฉ()
{
int ผม = ผม;
กลับฉัน;
}
คำเตือนนี้เปิดใช้งานโดย -ผนัง ใน C++
-Wimplicit-int (C และ Objective-C เท่านั้น)
เตือนเมื่อการประกาศไม่ได้ระบุประเภท คำเตือนนี้เปิดใช้งานโดย -ผนัง.
-Wimplicit-ฟังก์ชั่น-การประกาศ (C และ Objective-C เท่านั้น)
แจ้งเตือนทุกครั้งที่มีการใช้ฟังก์ชันก่อนที่จะประกาศ ในโหมด C99
(-std=c99 or -std=gnu99) คำเตือนนี้เปิดใช้งานโดยค่าเริ่มต้นและถูกทำให้เป็น an
ผิดพลาดโดย -pedantic-ข้อผิดพลาด. คำเตือนนี้ยังเปิดใช้งานโดย -ผนัง.
-วิปริต (C และ Objective-C เท่านั้น)
เหมือนกับ -Wimplicit-int และ -Wimplicit-ฟังก์ชั่น-การประกาศ. คำเตือนนี้เปิดใช้งานอยู่
by -ผนัง.
-Wignored-รอบคัดเลือก (เฉพาะ C และ C++)
เตือนหากประเภทการส่งคืนของฟังก์ชันมีตัวระบุประเภท เช่น "const" สำหรับ ISO C
ตัวระบุประเภทดังกล่าวไม่มีผลเนื่องจากค่าที่ส่งคืนโดยฟังก์ชันไม่ใช่
ค่า สำหรับ C++ คำเตือนจะออกสำหรับประเภทสเกลาร์หรือ "เป็นโมฆะ" เท่านั้น ISO C
ห้ามประเภทการส่งคืน "เป็นโมฆะ" ที่มีคุณสมบัติตามคำจำกัดความของฟังก์ชัน ดังนั้นประเภทการส่งคืนดังกล่าว
ได้รับคำเตือนเสมอแม้จะไม่มีตัวเลือกนี้
คำเตือนนี้ยังเปิดใช้งานโดย -เว็กซ์ตร้า.
-Wเมน
เตือนถ้าประเภทของ หลัก เป็นที่น่าสงสัย หลัก ควรเป็นฟังก์ชันที่มีภายนอก
เชื่อมโยง, ส่งคืน int, รับอาร์กิวเมนต์ศูนย์อย่างใดอย่างหนึ่ง, อาร์กิวเมนต์สองหรือสามอาร์กิวเมนต์ของ
ประเภทที่เหมาะสม คำเตือนนี้เปิดใช้งานโดยค่าเริ่มต้นใน C ++ และเปิดใช้งานโดย
-ผนัง or -Wpedantic.
-Wmissing-เหล็กดัดฟัน
เตือนถ้าตัวเริ่มต้นการรวมหรือการรวมไม่ได้ถูกคร่อมไว้อย่างสมบูรณ์ ดังต่อไปนี้
ตัวอย่าง ตัวเริ่มต้นสำหรับ a ไม่ได้วงเล็บทั้งหมด แต่สำหรับ b อย่างเต็มที่
วงเล็บ คำเตือนนี้เปิดใช้งานโดย -ผนัง ใน C.
int[2][2] = { 0, 1, 2, 3 };
int ข[2] [2] = { { 0, 1 }, { 2, 3 } };
คำเตือนนี้เปิดใช้งานโดย -ผนัง.
-Wmissing-รวม-dirs (C, C++, Objective-C และ Objective-C++ เท่านั้น)
เตือนหากไม่มีไดเร็กทอรี include ที่ผู้ใช้จัดหา
-วงเล็บ
เตือนหากเว้นวงเล็บในบางบริบท เช่น เมื่อมี
การมอบหมายในบริบทที่คาดหวังค่าความจริงหรือเมื่อผู้ประกอบการซ้อนกัน
ที่คนมาก่อนมักจะสับสนเกี่ยวกับ
เตือนด้วยถ้าการเปรียบเทียบเช่น x<=y<=z ปรากฏขึ้น; นี่เทียบเท่ากับ (x<=y ? 1 : 0)
<= zซึ่งเป็นการตีความที่แตกต่างจากสัญกรณ์คณิตศาสตร์ทั่วไป
ยังเตือนเกี่ยวกับสิ่งปลูกสร้างที่อาจเกิดความสับสนว่าคำสั่ง "ถ้า" an
สาขา "อื่น" เป็นของ นี่คือตัวอย่างของกรณีดังกล่าว:
{
ถ้า (ก)
ถ้า (ข)
ฟู ();
อื่น
บาร์ ();
}
ใน C/C++ ทุกสาขา "อื่น" เป็นของคำสั่ง "if" ที่อยู่ลึกสุดซึ่ง
ในตัวอย่างนี้คือ "if (b)" ซึ่งมักไม่เป็นไปตามที่โปรแกรมเมอร์คาดหวังไว้ เนื่องจาก
แสดงในตัวอย่างข้างต้นโดยเยื้องโปรแกรมเมอร์เลือก เมื่อมี
โอกาสที่จะเกิดความสับสนนี้ GCC จะออกคำเตือนเมื่อมีการระบุแฟล็กนี้
หากต้องการกำจัดคำเตือน ให้ใส่เครื่องหมายวงเล็บปีกการอบๆ คำสั่ง "if" ในสุดดังนั้น
ไม่มีทางที่ "อื่น" จะเป็นของ "ถ้า" ที่ล้อมรอบอยู่ รหัสผลลัพธ์มีลักษณะ
อย่างนี้:
{
ถ้า (ก)
{
ถ้า (ข)
ฟู ();
อื่น
บาร์ ();
}
}
ยังเตือนด้วยการใช้ส่วนขยาย GNU ที่เป็นอันตรายเป็น "?:" โดยละเว้นตัวถูกดำเนินการกลาง
เมื่อเงื่อนไขในโอเปอเรเตอร์ "?": เป็นนิพจน์บูลีน ค่าที่ละไว้คือ
เสมอ 1 บ่อยครั้งที่โปรแกรมเมอร์คาดหวังว่ามันจะเป็นค่าที่คำนวณได้ภายในเงื่อนไข
การแสดงออกแทน
คำเตือนนี้เปิดใช้งานโดย -ผนัง.
-Wsequence จุด
คำเตือนเกี่ยวกับโค้ดที่อาจมีความหมายไม่ได้เนื่องจากการละเมิดลำดับ
ชี้กฎในมาตรฐาน C และ C++
มาตรฐาน C และ C++ กำหนดลำดับของนิพจน์ในโปรแกรม C/C++
ประเมินในแง่ของ ลำดับ จุดซึ่งแสดงถึงการสั่งซื้อบางส่วนระหว่าง
การดำเนินการของส่วนต่างๆ ของโปรแกรม: ส่วนที่ดำเนินการก่อนจุดลำดับ และส่วนเหล่านั้น
ดำเนินการหลังจากนั้น สิ่งเหล่านี้เกิดขึ้นหลังจากการประเมินการแสดงออกทั้งหมด (อันที่
ไม่ได้เป็นส่วนหนึ่งของนิพจน์ที่ใหญ่กว่า) หลังจากการประเมินตัวถูกดำเนินการตัวแรกของ a
ตัวดำเนินการ "&&", "||", "? :" หรือ "," (เครื่องหมายจุลภาค) ก่อนที่ฟังก์ชันจะถูกเรียก (แต่หลังจาก
การประเมินอาร์กิวเมนต์และนิพจน์ที่แสดงถึงฟังก์ชันที่เรียก) และใน
บางสถานที่อื่น ๆ นอกเหนือจากที่แสดงโดยกฎจุดลำดับ คำสั่ง
ไม่ได้ระบุการประเมินนิพจน์ย่อยของนิพจน์ กฎทั้งหมดนี้
อธิบายเฉพาะคำสั่งซื้อบางส่วนมากกว่าคำสั่งซื้อทั้งหมด เนื่องจาก ตัวอย่างเช่น ถ้า two
ฟังก์ชันถูกเรียกภายในนิพจน์เดียวโดยไม่มีจุดลำดับระหว่างกัน
ไม่ได้ระบุลำดับการเรียกใช้ฟังก์ชัน อย่างไรก็ตาม มาตรฐาน
คณะกรรมการได้วินิจฉัยว่าการเรียกฟังก์ชันไม่ทับซ้อนกัน
ไม่ได้ระบุเมื่อระหว่างจุดลำดับปรับเปลี่ยนค่าของ
วัตถุมีผล โปรแกรมที่มีพฤติกรรมขึ้นอยู่กับสิ่งนี้มีพฤติกรรมที่ไม่ได้กำหนด
มาตรฐาน C และ C++ ระบุว่า "ระหว่างจุดลำดับก่อนหน้าและถัดไปan
วัตถุจะต้องมีการแก้ไขค่าที่เก็บไว้อย่างมากที่สุดหนึ่งครั้งโดยการประเมินของ
การแสดงออก. นอกจากนี้ ค่าก่อนหน้าจะต้องอ่านอย่างเดียวเพื่อกำหนดค่าเป็น
ถูกเก็บไว้" หากโปรแกรมฝ่าฝืนกฎเหล่านี้ผลลัพธ์ใด ๆ โดยเฉพาะ
การนำไปปฏิบัติเป็นสิ่งที่คาดเดาไม่ได้โดยสิ้นเชิง
ตัวอย่างของโค้ดที่มีการทำงานที่ไม่ได้กำหนดไว้คือ "a = a++;", "a[n] = b[n++]" และ "a[i++] =
i;" บางกรณีที่ซับซ้อนกว่านี้ไม่ได้วินิจฉัยโดยตัวเลือกนี้และอาจทำให้
ผลบวกปลอมเป็นครั้งคราว แต่โดยทั่วไปพบว่ามีประสิทธิภาพพอสมควรที่
ตรวจพบปัญหาประเภทนี้ในโปรแกรม
มาตรฐานมีถ้อยคำที่สับสน ดังนั้นจึงมีการถกเถียงกันในเรื่องความแม่นยำ
ความหมายของกฎจุดลำดับในกรณีที่ละเอียดอ่อน ลิงก์ไปยังการสนทนาของ
ปัญหา รวมถึงคำจำกัดความที่เป็นทางการที่เสนอ อาจพบได้ในหน้าการอ่าน GCC
ที่http://gcc.gnu.org/readings.html>.
คำเตือนนี้เปิดใช้งานโดย -ผนัง สำหรับ C และ C++
-Wno-กลับ-ท้องถิ่น-addr
อย่าเตือนเกี่ยวกับการส่งคืนตัวชี้ (หรือใน C ++ การอ้างอิง) ไปยังตัวแปรที่ไป
อยู่นอกขอบเขตหลังจากฟังก์ชันส่งคืน
-Wreturn-ประเภท
เตือนทุกครั้งที่มีการกำหนดฟังก์ชันด้วยประเภทการส่งคืนที่มีค่าเริ่มต้นเป็น "int" อีกด้วย
เตือนเกี่ยวกับคำสั่ง "return" ใด ๆ ที่ไม่มีค่าส่งคืนในฟังก์ชันที่มี return type
ไม่ "เป็นโมฆะ" (การตกจากจุดสิ้นสุดของตัวฟังก์ชันถือว่ากลับคืนมา
ไม่มีค่า) และเกี่ยวกับคำสั่ง "return" ที่มีนิพจน์ในฟังก์ชัน
ซึ่งมีประเภทการส่งคืนเป็น "โมฆะ"
สำหรับ C++ ฟังก์ชันที่ไม่มีประเภทส่งคืนจะสร้างข้อความวินิจฉัยเสมอ แม้กระทั่ง
เมื่อ -Wno-ประเภทผลตอบแทน ระบุไว้ ข้อยกเว้นเพียงอย่างเดียวคือ หลัก และฟังก์ชั่น
กำหนดไว้ในส่วนหัวของระบบ
คำเตือนนี้เปิดใช้งานโดย -ผนัง.
-สวิตช์
เตือนเมื่อใดก็ตามที่คำสั่ง "switch" มีดัชนีประเภทที่แจกแจงและไม่มี "case"
สำหรับรหัสที่มีชื่ออย่างน้อยหนึ่งรหัสของการแจงนับนั้น (การปรากฏตัวของ "ค่าเริ่มต้น"
ฉลากป้องกันคำเตือนนี้) ป้าย "กรณี" นอกช่วงการแจงนับยัง
กระตุ้นคำเตือนเมื่อใช้ตัวเลือกนี้ (แม้ว่าจะมีป้ายกำกับ "ค่าเริ่มต้น") นี้
คำเตือนเปิดใช้งานโดย -ผนัง.
-Wswitch-ค่าเริ่มต้น
เตือนเมื่อใดก็ตามที่คำสั่ง "switch" ไม่มีกรณี "default"
-Wswitch-enum
เตือนเมื่อใดก็ตามที่คำสั่ง "switch" มีดัชนีประเภทที่แจกแจงและไม่มี "case"
สำหรับรหัสที่มีชื่ออย่างน้อยหนึ่งรหัสของการแจงนับนั้น ป้าย "กรณี" นอก
ช่วงการแจงนับยังกระตุ้นคำเตือนเมื่อใช้ตัวเลือกนี้ ความแตกต่างเพียงอย่างเดียว
ระหว่าง -สวิตช์ และตัวเลือกนี้คือตัวเลือกนี้จะให้คำเตือนเกี่ยวกับการละเว้น
รหัสการแจงนับแม้ว่าจะมีป้ายกำกับ "ค่าเริ่มต้น"
-Wsync-nand (เฉพาะ C และ C++)
เตือนเมื่อฟังก์ชันในตัว "__sync_fetch_and_nand" และ "__sync_nand_and_fetch"
ใช้แล้ว. ฟังก์ชันเหล่านี้เปลี่ยนความหมายใน GCC 4.4
-Wtrigraphs
เตือนหากพบไตรกราฟที่อาจเปลี่ยนความหมายของโปรแกรม
(ไม่เตือนไตรกราฟในความคิดเห็น) คำเตือนนี้เปิดใช้งานโดย -ผนัง.
-Wunused-แต่-ตั้งค่า-พารามิเตอร์
เตือนทุกครั้งที่มีการกำหนดพารามิเตอร์ของฟังก์ชัน แต่อย่างอื่นไม่ได้ใช้ (นอกเหนือจาก
ประกาศ)
ในการระงับคำเตือนนี้ ให้ใช้ปุ่ม ไม่ได้ใช้ คุณลักษณะ
คำเตือนนี้ยังเปิดใช้งานโดย - ใช้งานไม่ได้ พร้อมด้วย -เว็กซ์ตร้า.
-Wunused-แต่-ตั้งค่า-ตัวแปร
เตือนเมื่อใดก็ตามที่ตัวแปรท้องถิ่นถูกกำหนดให้ แต่อย่างอื่นไม่ได้ใช้ (นอกเหนือจากตัวแปรของมัน
ประกาศ) คำเตือนนี้เปิดใช้งานโดย -ผนัง.
ในการระงับคำเตือนนี้ ให้ใช้ปุ่ม ไม่ได้ใช้ คุณลักษณะ
คำเตือนนี้ยังเปิดใช้งานโดย - ใช้งานไม่ได้ซึ่งเปิดใช้งานโดย -ผนัง.
-Wunused-ฟังก์ชั่น
เตือนทุกครั้งที่มีการประกาศฟังก์ชันสแตติกแต่ไม่ได้กำหนดไว้ หรือไม่ใช่สแตติกแบบอินไลน์
ฟังก์ชั่นไม่ได้ใช้ คำเตือนนี้เปิดใช้งานโดย -ผนัง.
-Wunused-ฉลาก
เตือนทุกครั้งที่มีการประกาศป้ายกำกับแต่ไม่ได้ใช้ คำเตือนนี้เปิดใช้งานโดย -ผนัง.
ในการระงับคำเตือนนี้ ให้ใช้ปุ่ม ไม่ได้ใช้ คุณลักษณะ
-Wunused-local-typedefs (C, Objective-C, C++ และ Objective-C++ เท่านั้น)
เตือนเมื่อไม่มีการใช้ typedef ที่กำหนดไว้ในเครื่อง คำเตือนนี้คือ
เปิดใช้งานโดย -ผนัง.
-Wunused-พารามิเตอร์
เตือนเมื่อใดก็ตามที่ไม่ได้ใช้พารามิเตอร์ของฟังก์ชันนอกเหนือจากการประกาศ
ในการระงับคำเตือนนี้ ให้ใช้ปุ่ม ไม่ได้ใช้ คุณลักษณะ
-Wno-ไม่ได้ใช้-ผลลัพธ์
อย่าเตือนหากผู้เรียกใช้ฟังก์ชันที่มีแอตทริบิวต์ "warn_unused_result" ไม่
ไม่ใช้มูลค่าที่ส่งคืน ค่าเริ่มต้นคือ -Wunused-ผลลัพธ์.
-Wunused-ตัวแปร
เตือนเมื่อใดก็ตามที่ไม่ได้ใช้ตัวแปรท้องถิ่นหรือตัวแปรคงที่ที่ไม่คงที่นอกเหนือจาก
การประกาศ คำเตือนนี้เปิดใช้งานโดย -ผนัง.
ในการระงับคำเตือนนี้ ให้ใช้ปุ่ม ไม่ได้ใช้ คุณลักษณะ
-Wunused-ค่า
เตือนเมื่อใดก็ตามที่คำสั่งคำนวณผลลัพธ์ที่ไม่ได้ใช้อย่างชัดเจน เพื่อปราบปราม
คำเตือนนี้ใช้นิพจน์ที่ไม่ได้ใช้ไปที่ ถือเป็นโมฆะ. ซึ่งรวมถึงนิพจน์คำสั่ง
หรือด้านซ้ายมือของนิพจน์จุลภาคที่ไม่มีผลข้างเคียง สำหรับ
ตัวอย่าง นิพจน์เช่น x[ฉัน,เจ] ทำให้เกิดการเตือนในขณะที่ x[(เป็นโมฆะ)ผม,เจ] ไม่.
คำเตือนนี้เปิดใช้งานโดย -ผนัง.
- ใช้งานไม่ได้
ทั้งหมดข้างต้น - ใช้งานไม่ได้ ตัวเลือกรวมกัน
ในการรับคำเตือนเกี่ยวกับพารามิเตอร์ฟังก์ชันที่ไม่ได้ใช้ คุณต้องระบุ
-เว็กซ์ตร้า - ใช้งานไม่ได้ (โปรดทราบว่า -ผนัง หมายถึง - ใช้งานไม่ได้) หรือแยกระบุ
-Wunused-พารามิเตอร์.
- กำหนดค่าเริ่มต้น
เตือนว่ามีการใช้ตัวแปรอัตโนมัติโดยไม่ได้เตรียมข้อมูลเบื้องต้นก่อนหรือถ้าตัวแปร
อาจถูกปิดโดยการโทร "setjmp" ใน C ++ เตือนว่าการอ้างอิงที่ไม่คงที่หรือไม่
คงที่ const สมาชิกปรากฏในคลาสที่ไม่มีตัวสร้าง
หากคุณต้องการเตือนเกี่ยวกับโค้ดที่ใช้ค่าที่ไม่ได้กำหนดค่าเริ่มต้นของตัวแปรin
ตัวเริ่มต้นของมันเอง ใช้ -Winit-ตัวเอง ตัวเลือก
คำเตือนเหล่านี้เกิดขึ้นสำหรับองค์ประกอบของโครงสร้างที่ยังไม่ได้กำหนดค่าเริ่มต้นหรือปิดบัง
ตัวแปรยูเนี่ยนหรืออาร์เรย์เช่นเดียวกับตัวแปรที่ไม่ได้กำหนดค่าเริ่มต้นหรือปิดบัง
โดยรวม จะไม่เกิดขึ้นกับตัวแปรหรือองค์ประกอบที่ประกาศว่า "ระเหย" เพราะ
คำเตือนเหล่านี้ขึ้นอยู่กับการปรับให้เหมาะสม ตัวแปรหรือองค์ประกอบที่แน่นอน
เป็นคำเตือนขึ้นอยู่กับตัวเลือกการเพิ่มประสิทธิภาพที่แม่นยำและเวอร์ชันของ GCC ที่ใช้
โปรดทราบว่าอาจไม่มีคำเตือนเกี่ยวกับตัวแปรที่ใช้คำนวณ a . เท่านั้น
ค่าที่ตัวเองไม่เคยใช้เพราะการคำนวณดังกล่าวอาจถูกลบโดยการไหลของข้อมูล
วิเคราะห์ก่อนพิมพ์คำเตือน
-Wmaybe-ไม่ได้กำหนดค่าเริ่มต้น
สำหรับตัวแปรอัตโนมัติ หากมีเส้นทางจากรายการฟังก์ชันไปยังการใช้
ตัวแปรที่เริ่มต้น แต่มีเส้นทางอื่นที่
ตัวแปรไม่ได้เริ่มต้น คอมไพเลอร์ส่งคำเตือนหากไม่สามารถพิสูจน์
เส้นทางที่ไม่ได้กำหนดค่าเริ่มต้นจะไม่ถูกดำเนินการในขณะใช้งาน คำเตือนเหล่านี้เป็นทางเลือก
เพราะ GCC ไม่ฉลาดพอที่จะเห็นเหตุผลทั้งหมดว่าทำไมโค้ดถึงอาจจะถูกต้อง
ทั้งๆ ที่ดูเหมือนจะมีข้อผิดพลาด นี่คือตัวอย่างหนึ่งของสิ่งที่เกิดขึ้น:
{
intx;
สวิตช์ (y)
{
กรณีที่ 1: x = 1;
break;
กรณีที่ 2: x = 4;
break;
กรณีที่ 3: x = 5;
}
ฟู (x);
}
หากค่าของ "y" เป็น 1, 2 หรือ 3 เสมอ ดังนั้น "x" จะถูกเริ่มต้นเสมอ แต่ GCC
ไม่รู้เรื่องนี้ หากต้องการระงับคำเตือน คุณต้องระบุกรณีเริ่มต้นด้วย
ยืนยัน(0) หรือรหัสที่คล้ายกัน
ตัวเลือกนี้ยังเตือนเมื่อตัวแปรอัตโนมัติแบบไม่ลบเลือนอาจถูกเปลี่ยนโดยa
โทรไปที่ "longjmp" คำเตือนเหล่านี้สามารถทำได้ในการเพิ่มประสิทธิภาพเท่านั้น
การรวบรวม.
คอมไพเลอร์เห็นเฉพาะการเรียกไปยัง "setjmp" มันไม่รู้ว่า "longjmp" จะอยู่ตรงไหน
เรียกว่า; อันที่จริง ตัวจัดการสัญญาณสามารถเรียกมันเมื่อใดก็ได้ในโค้ด ในฐานะที่เป็น
ผลคุณอาจได้รับคำเตือนแม้ว่าจะไม่มีปัญหาเพราะ "longjmp"
แท้จริงแล้วไม่สามารถเรียกในสถานที่ที่จะก่อให้เกิดปัญหาได้
คุณสามารถหลีกเลี่ยงคำเตือนปลอมบางอย่างได้หากคุณประกาศฟังก์ชันทั้งหมดที่คุณใช้นั้น
ไม่กลับมาเป็น "นเรศวร"
คำเตือนนี้เปิดใช้งานโดย -ผนัง or -เว็กซ์ตร้า.
-Wunknown-pragmas
เตือนเมื่อพบคำสั่ง "#pragma" ที่ GCC ไม่เข้าใจ ถ้านี้
ใช้ตัวเลือกบรรทัดคำสั่ง คำเตือนจะออกสำหรับ Pragmas ที่ไม่รู้จักในระบบ
ไฟล์ส่วนหัว กรณีนี้จะไม่เป็นเช่นนั้นหากคำเตือนเปิดใช้งานโดย .เท่านั้น -ผนัง
ตัวเลือกบรรทัดคำสั่ง
-Wno-ปรากมาส
อย่าเตือนเกี่ยวกับการใช้ Pragmas ในทางที่ผิด เช่น พารามิเตอร์ที่ไม่ถูกต้อง ไวยากรณ์ที่ไม่ถูกต้อง หรือ
ความขัดแย้งระหว่าง Pragmas ดูสิ่งนี้ด้วย -Wunknown-pragmas.
-Wstrict-นามแฝง
ตัวเลือกนี้ใช้งานได้เฉพาะเมื่อ -fstrict-นามแฝง มีการใช้งาน มันเตือนเกี่ยวกับรหัสที่
อาจทำลายกฎนามแฝงที่เข้มงวดที่คอมไพเลอร์ใช้เพื่อการปรับให้เหมาะสม
คำเตือนไม่จับทุกกรณี แต่พยายามจับกรณีทั่วไปมากขึ้น
หลุมพราง รวมอยู่ใน -ผนัง. เทียบเท่ากับ -Wstrict-นามแฝง=3
-Wstrict-นามแฝง=n
ตัวเลือกนี้ใช้งานได้เฉพาะเมื่อ -fstrict-นามแฝง มีการใช้งาน มันเตือนเกี่ยวกับรหัสที่
อาจทำลายกฎนามแฝงที่เข้มงวดที่คอมไพเลอร์ใช้เพื่อการปรับให้เหมาะสม
ระดับที่สูงขึ้นสอดคล้องกับความแม่นยำที่สูงขึ้น (ผลบวกลวงน้อยลง) ระดับที่สูงขึ้น
ยังสอดคล้องกับความพยายามมากขึ้นคล้ายกับวิธี -O โรงงาน -Wstrict-นามแฝง is
เทียบเท่ากับ -Wstrict-นามแฝง=3.
ระดับ 1: ก้าวร้าวที่สุด รวดเร็ว แม่นยำน้อยที่สุด อาจมีประโยชน์เมื่อระดับที่สูงขึ้น
ไม่เตือนแต่ -fstrict-นามแฝง ยังคงทำลายรหัสเนื่องจากมีเท็จน้อยมาก
เชิงลบ อย่างไรก็ตาม มันมีผลบวกลวงมากมาย เตือนสำหรับการแปลงตัวชี้ทั้งหมด
ระหว่างประเภทที่เข้ากันไม่ได้แม้ว่าจะไม่เคยถูกละเลยก็ตาม วิ่งไปข้างหน้า
สิ้นสุดเท่านั้น
ระดับ 2: ก้าวร้าว รวดเร็ว ไม่แม่นยำเกินไป อาจยังมีผลบวกลวงมากมาย (ไม่ใช่
มากถึงระดับ 1 แม้ว่า) และเชิงลบที่ผิดพลาดเล็กน้อย (แต่อาจมากกว่าระดับ 1)
ต่างจากระดับ 1 โดยจะเตือนเฉพาะเมื่อมีการใช้ที่อยู่เท่านั้น เตือนเกี่ยวกับประเภทที่ไม่สมบูรณ์
วิ่งเฉพาะส่วนหน้าเท่านั้น
ระดับ 3 (ค่าเริ่มต้นสำหรับ -Wstrict-นามแฝง): ควรมีผลบวกลวงน้อยมากและน้อย
เชิงลบที่เป็นเท็จ ช้ากว่าระดับ 1 หรือ 2 เล็กน้อยเมื่อเปิดใช้งานการปรับให้เหมาะสม
ดูแลรูปแบบ pun+dereference ทั่วไปในส่วนหน้า:
"*(int*)&some_float". หากเปิดใช้งานการปรับให้เหมาะสม มันจะทำงานในแบ็กเอนด์ด้วย โดยที่
มันเกี่ยวข้องกับกรณีคำสั่งหลายกรณีโดยใช้ข้อมูลจุดต่อการไหลของข้อมูล
เตือนเฉพาะเมื่อตัวชี้ที่แปลงแล้วถูกยกเลิกการอ้างอิง ไม่เตือนเกี่ยวกับความไม่สมบูรณ์
ประเภท
-Wstrict-ล้น
-Wstrict-ล้น=n
ตัวเลือกนี้ใช้งานได้เฉพาะเมื่อ -fstrict-ล้น มีการใช้งาน มันเตือนเกี่ยวกับกรณี
โดยที่คอมไพเลอร์ปรับให้เหมาะสมตามสมมติฐานที่ว่าโอเวอร์โฟลว์ที่ลงนามไม่ได้
เกิดขึ้น. โปรดทราบว่าจะไม่เตือนในทุกกรณีที่โค้ดอาจล้น: it
เตือนเฉพาะกรณีที่คอมไพเลอร์ใช้การปรับให้เหมาะสม ดังนั้นสิ่งนี้
คำเตือนขึ้นอยู่กับระดับการเพิ่มประสิทธิภาพ
การปรับให้เหมาะสมที่ถือว่าการล้นที่ลงนามไม่เกิดขึ้นนั้นปลอดภัยอย่างสมบูรณ์ถ้า
ค่าของตัวแปรที่เกี่ยวข้องนั้นเป็นแบบที่ล้นไม่เคยทำ อันที่จริง
เกิดขึ้น. ดังนั้นคำเตือนนี้สามารถให้ผลบวกที่ผิดพลาดได้อย่างง่ายดาย: คำเตือนเกี่ยวกับรหัส
นั่นไม่ใช่ปัญหาจริงๆ เพื่อช่วยเน้นประเด็นสำคัญหลายคำเตือน
มีการกำหนดระดับ ไม่มีคำเตือนสำหรับการใช้โอเวอร์โฟลว์ลงนามที่ไม่ได้กำหนด
เมื่อประเมินจำนวนวนซ้ำที่ต้องการ โดยเฉพาะอย่างยิ่งเมื่อพิจารณา
ไม่ว่าจะวนซ้ำหรือไม่
-Wstrict-ล้น=1
เตือนเกี่ยวกับกรณีที่ทั้งน่าสงสัยและง่ายต่อการหลีกเลี่ยง ตัวอย่างเช่น กับ
-fstrict-ล้นคอมไพเลอร์ลดความซับซ้อน "x + 1 > x" เป็น 1 ระดับของ
-Wstrict-ล้น เปิดใช้งานโดย -ผนัง; ระดับที่สูงกว่าไม่ใช่และจะต้องเป็น
ร้องขออย่างชัดแจ้ง
-Wstrict-ล้น=2
ยังเตือนเกี่ยวกับกรณีอื่นๆ ที่การเปรียบเทียบถูกทำให้ง่ายขึ้นเป็นค่าคงที่ สำหรับ
ตัวอย่าง: "หน้าท้อง (x) >= 0" สิ่งนี้สามารถทำให้ง่ายขึ้นได้ก็ต่อเมื่อ -fstrict-ล้น ที่อยู่ใน
ผลกระทบ เนื่องจาก "abs (INT_MIN)" ล้นไปที่ "INT_MIN" ซึ่งน้อยกว่าศูนย์
-Wstrict-ล้น (ไม่มีระดับ) เท่ากับ -Wstrict-ล้น=2.
-Wstrict-ล้น=3
ยังเตือนเกี่ยวกับกรณีอื่นๆ ที่ทำให้การเปรียบเทียบง่ายขึ้น ตัวอย่างเช่น: "x + 1
> 1" ถูกลดทอนเป็น "x > 0"
-Wstrict-ล้น=4
ยังเตือนเกี่ยวกับความง่ายอื่น ๆ ที่ไม่ครอบคลุมโดยกรณีข้างต้น สำหรับ
ตัวอย่าง: "(x * 10) / 5" ถูกลดรูปเป็น "x * 2"
-Wstrict-ล้น=5
ยังเตือนเกี่ยวกับกรณีที่คอมไพเลอร์ลดขนาดของค่าคงที่
ที่เกี่ยวข้องในการเปรียบเทียบ ตัวอย่างเช่น: "x + 2 > y" ถูกลดทอนเป็น "x + 1 >= y"
มีการรายงานในระดับการเตือนสูงสุดเท่านั้นเนื่องจากการทำให้เข้าใจง่ายนี้
ใช้กับการเปรียบเทียบหลายๆ อย่าง ดังนั้นระดับการเตือนนี้จึงมี . จำนวนมาก
บวกเท็จ
-Wsuggest-แอตทริบิวต์=[บริสุทธิ์|const|นอร์เทิร์น|รูป]
เตือนในกรณีที่การเพิ่มแอตทริบิวต์อาจเป็นประโยชน์ คุณสมบัติในปัจจุบัน
รองรับตามรายการด้านล่าง
-Wsuggest-attribute=บริสุทธิ์
-Wsuggest-attribute=const
-Wsuggest-attribute=noreturn
เตือนเกี่ยวกับฟังก์ชันที่อาจเป็นตัวเลือกสำหรับแอตทริบิวต์ "บริสุทธิ์", "const" หรือ
"นอร์เทิร์น". คอมไพเลอร์เตือนเฉพาะฟังก์ชันที่มองเห็นได้ในคอมไพล์อื่นๆ
หน่วยหรือ (ในกรณีของ "บริสุทธิ์" และ "ค่าคงตัว") หากไม่สามารถพิสูจน์ได้ว่าฟังก์ชัน
กลับเป็นปกติ ฟังก์ชันจะคืนค่าตามปกติหากไม่มี infinite
วนซ้ำหรือกลับอย่างผิดปกติโดยการขว้าง เรียก "abort()" หรือการดักจับ นี้
การวิเคราะห์ต้องใช้ตัวเลือก -fipa-บริสุทธิ์-constซึ่งเปิดใช้งานโดยค่าเริ่มต้นที่ -O และ
สูงขึ้น ระดับการปรับให้เหมาะสมที่สูงขึ้นจะช่วยปรับปรุงความแม่นยำของการวิเคราะห์
-Wsuggest-attribute=รูปแบบ
-Wmissing รูปแบบแอตทริบิวต์
เตือนเกี่ยวกับพอยน์เตอร์ฟังก์ชันที่อาจเป็นตัวเลือกสำหรับแอตทริบิวต์ "รูปแบบ"
โปรดทราบว่าสิ่งเหล่านี้เป็นเพียงผู้สมัครที่เป็นไปได้ ไม่ใช่ผู้สมัครที่สัมบูรณ์ GCC คาดเดาว่า
ตัวชี้ฟังก์ชันพร้อมแอตทริบิวต์ "รูปแบบ" ที่ใช้ในการมอบหมาย
การเริ่มต้น การส่งพารามิเตอร์ หรือคำสั่งส่งคืนควรมีค่าที่สอดคล้องกัน
แอตทริบิวต์ "รูปแบบ" ในประเภทผลลัพธ์ คือด้านซ้ายมือของ
การกำหนดหรือการกำหนดค่าเริ่มต้น ประเภทของตัวแปรพารามิเตอร์ หรือการส่งคืน
ประเภทของฟังก์ชันที่มีตามลำดับควรมีแอตทริบิวต์ "รูปแบบ" ด้วย
เพื่อหลีกเลี่ยงคำเตือน
GCC ยังเตือนเกี่ยวกับคำจำกัดความของฟังก์ชันที่อาจเป็นตัวเลือกสำหรับ "รูปแบบ"
คุณลักษณะ. นี่เป็นเพียงผู้สมัครที่เป็นไปได้เท่านั้น GCC เดาว่า "รูปแบบ"
คุณลักษณะอาจเหมาะสมกับฟังก์ชันใด ๆ ที่เรียกใช้ฟังก์ชันเช่น
"vprintf" หรือ "vscanf" แต่อาจไม่เป็นเช่นนั้นเสมอไป และบางฟังก์ชัน
อาจตรวจไม่พบแอตทริบิวต์ "รูปแบบ" ที่เหมาะสม
-Warray ขอบเขต
ตัวเลือกนี้ใช้งานได้เฉพาะเมื่อ -ftree-vrp เปิดใช้งานอยู่ (ค่าเริ่มต้นสำหรับ -O2 ขึ้นไป) มัน
เตือนเกี่ยวกับตัวห้อยไปยังอาร์เรย์ที่อยู่นอกขอบเขตเสมอ คำเตือนนี้คือ
เปิดใช้งานโดย -ผนัง.
-Wno-div-by-ศูนย์
อย่าเตือนเกี่ยวกับการหารจำนวนเต็มเวลาคอมไพล์ด้วยศูนย์ หารจุดทศนิยมโดย
ศูนย์จะไม่ได้รับการเตือนเนื่องจากอาจเป็นวิธีที่ถูกต้องในการรับอินฟินิตี้และ
น่าน
-Wsystem-ส่วนหัว
พิมพ์ข้อความเตือนสำหรับโครงสร้างที่พบในไฟล์ส่วนหัวของระบบ คำเตือนจาก
ปกติส่วนหัวของระบบจะถูกระงับ โดยสันนิษฐานว่ามักจะไม่
ระบุปัญหาที่แท้จริงและจะทำให้คอมไพเลอร์เอาต์พุตอ่านยากขึ้นเท่านั้น โดยใช้
ตัวเลือกบรรทัดคำสั่งนี้บอกให้ GCC ส่งคำเตือนจากส่วนหัวของระบบราวกับว่าพวกเขา
เกิดขึ้นในรหัสผู้ใช้ อย่างไรก็ตาม โปรดทราบว่าการใช้ -ผนัง ร่วมกับตัวเลือกนี้
ทำ ไม่ เตือนเกี่ยวกับ Pragmas ที่ไม่รู้จักในส่วนหัวของระบบ---เพื่อสิ่งนั้น -Wunknown-pragmas
ต้องใช้ด้วย
-แทรมโพลีน
เตือนเกี่ยวกับแทรมโพลีนที่สร้างขึ้นสำหรับตัวชี้ไปยังฟังก์ชันที่ซ้อนกัน
แทรมโพลีนคือข้อมูลหรือโค้ดชิ้นเล็กๆ ที่สร้างขึ้นขณะวิ่ง
เวลาบนสแต็กเมื่อใช้ที่อยู่ของฟังก์ชันที่ซ้อนกันและ
ใช้เพื่อเรียกใช้ฟังก์ชันที่ซ้อนกันทางอ้อม สำหรับบางเป้าหมายก็
ประกอบขึ้นจากข้อมูลเท่านั้นจึงไม่จำเป็นต้องดูแลเป็นพิเศษ แต่,
สำหรับเป้าหมายส่วนใหญ่ มันประกอบด้วยโค้ด ดังนั้นต้องใช้ stack
เพื่อให้โปรแกรมทำงานได้อย่างถูกต้อง
-Wfloat-เท่ากับ
เตือนหากใช้ค่าทศนิยมในการเปรียบเทียบความเท่าเทียมกัน
แนวคิดเบื้องหลังนี้คือบางครั้งสะดวก (สำหรับโปรแกรมเมอร์) ถึง
พิจารณาค่าทศนิยมเป็นค่าประมาณของจำนวนจริงที่แม่นยำอย่างไม่สิ้นสุด
หากคุณกำลังทำสิ่งนี้ คุณต้องคำนวณ (โดยการวิเคราะห์โค้ดหรือบางส่วน
วิธีอื่น) ข้อผิดพลาดสูงสุดหรือที่เป็นไปได้สูงสุดที่การคำนวณแนะนำและ
อนุญาตเมื่อทำการเปรียบเทียบ (และเมื่อผลิตผลลัพธ์ แต่นั่นคือa
ปัญหาที่แตกต่างกัน) โดยเฉพาะอย่างยิ่ง แทนที่จะทดสอบความเท่าเทียมกัน คุณควรตรวจสอบ
เพื่อดูว่าค่าทั้งสองมีช่วงที่คาบเกี่ยวกันหรือไม่ และสิ่งนี้เสร็จสิ้นด้วย
ตัวดำเนินการเชิงสัมพันธ์ ดังนั้นการเปรียบเทียบความเท่าเทียมกันจึงอาจผิดพลาดได้
-แบบดั้งเดิม (C และ Objective-C เท่านั้น)
เตือนเกี่ยวกับโครงสร้างบางอย่างที่ทำงานแตกต่างกันในแบบดั้งเดิมและ ISO C นอกจากนี้
เตือนเกี่ยวกับโครงสร้าง ISO C ที่ไม่มี C เทียบเท่าแบบเดิมและ/หรือมีปัญหา
โครงสร้างที่ควรหลีกเลี่ยง
· พารามิเตอร์มาโครที่ปรากฏภายในตัวอักษรสตริงในตัวแมโคร ใน
การแทนที่มาโคร C แบบดั้งเดิมเกิดขึ้นภายในตัวอักษรสตริง แต่ใน ISO C
มันไม่ใช่.
· ในภาษา C ดั้งเดิม ไม่มีคำสั่งพรีโปรเซสเซอร์บางตัว แบบดั้งเดิม
ตัวประมวลผลล่วงหน้าถือว่าบรรทัดเป็นคำสั่งเท่านั้นหาก # ปรากฏในคอลัมน์
1 ในบรรทัด ดังนั้น -แบบดั้งเดิม เตือนเกี่ยวกับคำสั่งที่ดั้งเดิมC
เข้าใจแต่ละเลยเพราะว่า # ไม่ปรากฏเป็นอักขระตัวแรกบน
เส้น. นอกจากนี้ยังแนะนำให้คุณซ่อนคำสั่งเช่น #ปรากมา ไม่เข้าใจ
ดั้งเดิม C โดยเยื้องพวกเขา การใช้งานแบบดั้งเดิมบางอย่างไม่
รับรู้ #เอลิฟดังนั้นตัวเลือกนี้จึงแนะนำให้หลีกเลี่ยงโดยสิ้นเชิง
· มาโครเหมือนฟังก์ชันที่ปรากฏขึ้นโดยไม่มีอาร์กิวเมนต์
· ตัวดำเนินการ unary plus
· U คำต่อท้ายค่าคงที่จำนวนเต็มหรือ F or L คำต่อท้ายค่าคงที่ทศนิยม
(ตัว C ดั้งเดิมรองรับ L ต่อท้ายค่าคงที่จำนวนเต็ม) หมายเหตุ these
คำต่อท้ายปรากฏในมาโครที่กำหนดไว้ในส่วนหัวของระบบของระบบที่ทันสมัยที่สุด
เช่น _นาที/_สูงสุด มาโครใน " " การใช้มาโครเหล่านี้ในรหัสผู้ใช้อาจ
ปกติจะนำไปสู่คำเตือนที่หลอกลวง อย่างไรก็ตาม ตัวประมวลผลล่วงหน้าแบบรวมของ GCC มี
บริบทที่เพียงพอเพื่อหลีกเลี่ยงการเตือนในกรณีเหล่านี้
· ฟังก์ชั่นที่ประกาศภายนอกในหนึ่งบล็อกแล้วใช้หลังจากสิ้นสุด
กลุ่ม
· คำสั่ง "switch" มีตัวถูกดำเนินการประเภท "long"
· การประกาศฟังก์ชันที่ไม่ใช่แบบ "คงที่" ตามหลังฟังก์ชัน "คงที่" โครงสร้างนี้ไม่ใช่
ยอมรับโดยคอมไพเลอร์ C ดั้งเดิมบางตัว
· ประเภท ISO ของค่าคงที่จำนวนเต็มมีความกว้างหรือการลงนามที่แตกต่างจาก
ประเภทดั้งเดิม คำเตือนนี้ออกเฉพาะเมื่อฐานของค่าคงที่เป็นสิบ
เช่น ค่าเลขฐานสิบหกหรือฐานแปด ซึ่งโดยทั่วไปจะแทนรูปแบบบิต ไม่ใช่
เตือนเกี่ยวกับ
· ตรวจพบการใช้การต่อสตริง ISO
· การเริ่มต้นของการรวมอัตโนมัติ
· ตัวระบุขัดแย้งกับป้ายกำกับ C ดั้งเดิมไม่มีเนมสเปซแยกต่างหากสำหรับ
ป้ายชื่อ
· การเริ่มต้นของสหภาพแรงงาน ถ้า initializer เป็นศูนย์ คำเตือนจะถูกละเว้น
สิ่งนี้ทำภายใต้สมมติฐานว่าตัวเริ่มต้นศูนย์ในรหัสผู้ใช้ปรากฏขึ้น
ปรับสภาพเช่น "__STDC__" เพื่อหลีกเลี่ยงคำเตือนตัวเริ่มต้นที่ขาดหายไปและต้องอาศัย
การเริ่มต้นเริ่มต้นเป็นศูนย์ในกรณี C ดั้งเดิม
· การแปลงโดยต้นแบบระหว่างค่าคงที่/จุดลอยตัวและในทางกลับกัน NS
ขาดต้นแบบเหล่านี้เมื่อคอมไพล์ด้วย C ดั้งเดิมทำให้เกิดความร้ายแรง
ปัญหา. นี่เป็นส่วนย่อยของคำเตือนการแปลงที่เป็นไปได้ สำหรับทั้งชุด
ใช้ -Wtraditional-การแปลง.
· การใช้คำจำกัดความของฟังก์ชันสไตล์ ISO C คำเตือนนี้จงใจคือ ไม่ ออก
สำหรับการประกาศต้นแบบหรือฟังก์ชันแปรผันเนื่องจากคุณสมบัติ ISO C เหล่านี้
ปรากฏในรหัสของคุณเมื่อใช้มาโครความเข้ากันได้ C ดั้งเดิมของ libiberty
"PARAMS" และ "VPARAMS" คำเตือนนี้จะถูกข้ามไปสำหรับฟังก์ชันที่ซ้อนกัน
เนื่องจากคุณลักษณะนั้นเป็นส่วนขยาย GCC อยู่แล้วจึงไม่เกี่ยวข้องกับ
ความเข้ากันได้ C แบบดั้งเดิม
-Wtraditional-การแปลง (C และ Objective-C เท่านั้น)
เตือนถ้าต้นแบบทำให้เกิดการแปลงประเภทที่แตกต่างจากสิ่งที่จะเกิดขึ้น
ไปเป็นข้อโต้แย้งเดียวกันในกรณีที่ไม่มีต้นแบบ ซึ่งรวมถึงการแปลงของ
คงที่จุดลอยและในทางกลับกันและการแปลงเปลี่ยนความกว้างหรือ
การลงนามของอาร์กิวเมนต์ที่มีจุดคงที่ ยกเว้นเมื่อเหมือนกับการเลื่อนตำแหน่งเริ่มต้น
-Wdeclaration-หลังคำสั่ง (C และ Objective-C เท่านั้น)
เตือนเมื่อพบการประกาศหลังจากคำสั่งในบล็อก โครงสร้างนี้เป็นที่รู้จัก
จาก C ++ ถูกนำมาใช้กับ ISO C99 และได้รับอนุญาตตามค่าเริ่มต้นใน GCC มันไม่ใช่
รองรับโดย ISO C90 และไม่รองรับในเวอร์ชัน GCC ก่อน GCC 3.0
-วันเดฟ
เตือนหากมีการประเมินตัวระบุที่ไม่ได้กำหนดใน an #ถ้า คำสั่ง
-Wno-endif-ป้ายกำกับ
อย่าเตือนเมื่อใดก็ตามที่ an #อื่น หรือ #เอนดิฟ ตามด้วยข้อความ
-เงา
เตือนเมื่อใดก็ตามที่ตัวแปรท้องถิ่นหรือการประกาศประเภทปิดบังตัวแปรอื่น
พารามิเตอร์ ชนิด หรือสมาชิกคลาส (ใน C++) หรือเมื่อใดก็ตามที่ฟังก์ชันในตัวคือ
เงา โปรดทราบว่าใน C ++ คอมไพเลอร์จะเตือนว่าตัวแปรโลคัลมีเงาที่ชัดเจน
typedef แต่ไม่ใช่ถ้ามันเป็นเงา struct/class/enum
- ใหญ่กว่า =len
เตือนเมื่อใดก็ตามที่วัตถุมีขนาดใหญ่กว่า len ไบต์ถูกกำหนด
-Wframe-ขนาดใหญ่กว่า=len
เตือนถ้าขนาดของกรอบฟังก์ชันใหญ่กว่า len ไบต์ คำนวณเสร็จ
เพื่อกำหนดขนาดเฟรมสแต็กเป็นค่าประมาณและไม่อนุรักษ์นิยม ที่เกิดขึ้นจริง
ความต้องการอาจจะมากกว่า .บ้าง len แม้ว่าคุณจะไม่ได้รับการเตือน ใน
นอกจากนี้ พื้นที่ใด ๆ ที่จัดสรรผ่าน "alloca" อาร์เรย์ความยาวผันแปรหรือที่เกี่ยวข้อง
โครงสร้างไม่ได้รวมโดยคอมไพเลอร์เมื่อพิจารณาว่าจะออกa .หรือไม่
การเตือน
-Wno-free-nonheap-วัตถุ
อย่าเตือนเมื่อพยายามเพิ่มวัตถุที่ไม่ได้จัดสรรบนฮีป
-Wstack-การใช้งาน=len
เตือนว่าการใช้สแต็กของฟังก์ชันอาจมากกว่า len ไบต์ การคำนวณ
ทำเพื่อพิจารณาว่าการใช้สแต็กเป็นแบบอนุรักษ์นิยม พื้นที่ใด ๆ ที่จัดสรรผ่าน "alloca"
อาร์เรย์ความยาวผันแปรหรือโครงสร้างที่เกี่ยวข้องรวมอยู่ในคอมไพเลอร์เมื่อ
กำหนดว่าจะออกคำเตือนหรือไม่
ข้อความสอดคล้องกับผลลัพธ์ของ -fstack-การใช้งาน.
· หากการใช้งานสแต็กเป็นแบบสแตติกโดยสมบูรณ์แต่เกินจำนวนที่กำหนด จะมีลักษณะดังนี้:
คำเตือน: การใช้สแต็กคือ 1120 ไบต์
· หากการใช้สแต็ก (บางส่วน) เป็นไดนามิกแต่มีขอบเขต จะเป็น:
คำเตือน: การใช้สแต็กอาจเป็น 1648 ไบต์
· หากการใช้งานสแต็ก (บางส่วน) เป็นไดนามิกและไม่มีขอบเขต แสดงว่า:
คำเตือน: การใช้สแต็กอาจไม่มีขอบเขต
-Wunsafe-loop-การเพิ่มประสิทธิภาพ
เตือนถ้าลูปไม่สามารถปรับให้เหมาะสมได้เพราะคอมไพเลอร์ไม่สามารถคาดเดาอะไรได้
ขอบเขตของดัชนีลูป กับ -funsafe-loop-การเพิ่มประสิทธิภาพ เตือนถ้าคอมไพเลอร์
ทำให้เกิดสมมติฐานดังกล่าว
-Wno-อวดดี-ms-รูปแบบ (เป้าหมาย MinGW เท่านั้น)
เมื่อใช้ร่วมกับ -Wรูปแบบ และ -อวดดี ไม่มีนามสกุล GNU นี่
ตัวเลือกปิดการใช้งานคำเตือนเกี่ยวกับตัวระบุความกว้างรูปแบบ "printf" / "scanf" ที่ไม่ใช่ ISO
"I32", "I64" และ "I" ใช้กับเป้าหมายของ Windows ซึ่งขึ้นอยู่กับรันไทม์ของ MS
-Wpointer-อริธ
เตือนเกี่ยวกับสิ่งที่ขึ้นอยู่กับ "ขนาด" ของประเภทฟังก์ชันหรือ "โมฆะ" GNU C
กำหนดขนาดเหล่านี้เป็น 1 เพื่อความสะดวกในการคำนวณด้วย "เป็นโมฆะ *"
ตัวชี้และตัวชี้ไปยังฟังก์ชัน ใน C ++ ให้เตือนเมื่อดำเนินการเลขคณิตด้วย
เกี่ยวข้องกับ "NULL" คำเตือนนี้ยังเปิดใช้งานโดย -Wpedantic.
-Wtype-จำกัด
เตือนว่าการเปรียบเทียบเป็นจริงเสมอหรือเท็จเสมอเนื่องจากช่วงที่จำกัดของ
ชนิดข้อมูล แต่ไม่เตือนสำหรับนิพจน์คงที่ ตัวอย่างเช่น เตือนถ้า unsigned
ตัวแปรถูกเปรียบเทียบกับศูนย์ด้วย < or >=. คำเตือนนี้ยังเปิดใช้งานโดย
-เว็กซ์ตร้า.
-Wbad-ฟังก์ชั่น-cast (C และ Objective-C เท่านั้น)
เตือนทุกครั้งที่มีการเรียกใช้ฟังก์ชันเป็นประเภทที่ไม่ตรงกัน ตัวอย่างเช่น เตือน if
"int malloc()" ถูกส่งไปยัง "อะไรก็ได้ *"
-Wc++-เข้ากันได้กับ (C และ Objective-C เท่านั้น)
เตือนเกี่ยวกับโครงสร้าง ISO C ที่ไม่ใช่ชุดย่อยทั่วไปของ ISO C และ ISO
C++ เช่น ขอแปลงโดยนัยจาก "เป็นโมฆะ *" เป็นตัวชี้เป็นไม่ใช่ "โมฆะ"
ชนิด
-Wc++11-เข้ากันได้ (C++ และ Objective-C++ เท่านั้น)
เตือนเกี่ยวกับโครงสร้าง C++ ที่ความหมายแตกต่างกันระหว่าง ISO C++ 1998 และ ISO C++ 2011
เช่น ตัวระบุใน ISO C++ 1998 ที่เป็นคีย์เวิร์ดใน ISO C++ 2011 คำเตือนนี้
เปิด -การหดตัว และเปิดใช้งานโดย -ผนัง.
-Wcast-คุณภาพ
เตือนทุกครั้งที่ใช้ตัวชี้เพื่อลบตัวระบุประเภทออกจากประเภทเป้าหมาย
ตัวอย่างเช่น เตือนว่า "const char *" ถูกเปลี่ยนเป็น "char *" ธรรมดาหรือไม่
เตือนเมื่อทำการแคสต์ที่แนะนำตัวระบุประเภทในลักษณะที่ไม่ปลอดภัย สำหรับ
ตัวอย่าง การแคสต์ "char **" เป็น "const char **" นั้นไม่ปลอดภัย ดังในตัวอย่างนี้:
/* p คือค่าถ่าน ** */
const ถ่าน **q = (const ถ่าน **) p;
/* การกำหนดสตริงแบบอ่านอย่างเดียวให้กับ const char * นั้นใช้ได้ */
*q = "สตริง";
/* ตอนนี้ตัวชี้ถ่าน** ชี้ไปที่หน่วยความจำแบบอ่านอย่างเดียว */
**p = 'b';
-Wcast-จัดตำแหน่ง
เตือนทุกครั้งที่มีการร่ายตัวชี้เพื่อให้ตำแหน่งของเป้าหมายเป็น
เพิ่มขึ้น. ตัวอย่างเช่น เตือนว่า "ถ่าน *" ถูกส่งไปยัง "int *" บนเครื่องที่
จำนวนเต็มสามารถเข้าถึงได้ที่ขอบเขตสองหรือสี่ไบต์เท่านั้น
-Wwrite-สตริง
เมื่อรวบรวม C ให้ประเภทค่าคงที่สตริง "const char[ระยะเวลา]" เพื่อให้การคัดลอก
ที่อยู่ของตัวชี้ที่ไม่ใช่ "const" "char *" จะสร้างคำเตือน เหล่านี้
คำเตือนช่วยให้คุณค้นหาโค้ดเวลาคอมไพล์ที่สามารถลองเขียนลงในสตริงได้
คงที่ แต่ถ้าคุณระมัดระวังอย่างมากเกี่ยวกับการใช้ "const" ในการประกาศ
และต้นแบบ มิฉะนั้นมันเป็นเพียงความรำคาญ นี่คือเหตุผลที่เราไม่ได้ทำ -ผนัง
ขอคำเตือนเหล่านี้
เมื่อรวบรวม C ++ ให้เตือนเกี่ยวกับการแปลงที่เลิกใช้จากตัวอักษรสตริงเป็น "char
*" คำเตือนนี้เปิดใช้งานโดยค่าเริ่มต้นสำหรับโปรแกรม C++
- อุดตัน
เตือนตัวแปรที่อาจเปลี่ยนโดย ลองเจเอ็มพี or ส้อม. คำเตือนนี้ก็เช่นกัน
เปิดใช้งานโดย -เว็กซ์ตร้า.
-Wแปลง
เตือนสำหรับการแปลงโดยนัยที่อาจเปลี่ยนแปลงมูลค่า ซึ่งรวมถึง Conversion
ระหว่างจำนวนจริงและจำนวนเต็ม เช่น "abs (x)" เมื่อ "x" เป็น "double"; การแปลงระหว่าง
ลงนามและไม่ได้ลงนาม เช่น "unsigned ui = -1"; และแปลงเป็นประเภทที่เล็กกว่าเช่น
"sqrtf (M_PI)" อย่าเตือนสำหรับการร่ายที่ชัดเจนเช่น "abs ((int) x)" และ "ui =
(unsigned) -1" หรือหากมูลค่าไม่เปลี่ยนแปลงโดยการแปลงเช่นใน "abs (2.0)"
คำเตือนเกี่ยวกับการแปลงระหว่างจำนวนเต็มที่ลงนามและไม่ได้ลงนามสามารถปิดการใช้งานโดย
การใช้ -Wno-เซ็นแปลง.
สำหรับ C ++ ยังเตือนถึงความละเอียดโอเวอร์โหลดที่สับสนสำหรับการแปลงที่ผู้ใช้กำหนด และ
การแปลงที่ไม่เคยใช้ตัวดำเนินการแปลงประเภท: การแปลงเป็น "โมฆะ" เหมือนกัน
ประเภทคลาสพื้นฐานหรือการอ้างอิงถึงพวกเขา คำเตือนเกี่ยวกับการแปลงระหว่างลงนาม
และจำนวนเต็มที่ไม่ได้ลงนามจะถูกปิดใช้งานโดยค่าเริ่มต้นใน C ++ เว้นแต่ -Wsign-แปลง is
เปิดใช้งานอย่างชัดเจน
-Wno-แปลง-null (C++ และ Objective-C++ เท่านั้น)
อย่าเตือนสำหรับการแปลงระหว่าง "NULL" และประเภทที่ไม่ใช่ตัวชี้ -Wconversion-null is
เปิดใช้งานโดยค่าเริ่มต้น
-Wzero-as-null-ตัวชี้-ค่าคงที่ (C++ และ Objective-C++ เท่านั้น)
เตือนเมื่อใช้ '0' ตามตัวอักษรเป็นค่าคงที่ตัวชี้ null สิ่งนี้มีประโยชน์กับ
อำนวยความสะดวกในการแปลงเป็น "nullptr" ใน C ++ 11
-Wuseless-โยน (C++ และ Objective-C++ เท่านั้น)
เตือนเมื่อนิพจน์ถูกแคสต์เป็นประเภทของตัวเอง
-ร่างกายเปียกปอน
เตือนหากมีเนื้อหาว่างเปล่าเกิดขึ้นใน an if, อื่น or do ในขณะที่ คำแถลง. คำเตือนนี้คือ
ยังเปิดใช้งานโดย -เว็กซ์ตร้า.
-Wenum-เปรียบเทียบ
เตือนเกี่ยวกับการเปรียบเทียบระหว่างค่าประเภทต่างๆ ที่แจกแจงไว้ ใน C++ enumeral
ความไม่ตรงกันในนิพจน์เงื่อนไขจะได้รับการวินิจฉัยด้วย และคำเตือนถูกเปิดใช้งานโดย
ค่าเริ่มต้น. ใน C คำเตือนนี้เปิดใช้งานโดย -ผนัง.
-Wjump-คิดถึง-init (C, Objective-C เท่านั้น)
เตือนหากคำสั่ง "goto" หรือคำสั่ง "switch" กระโดดไปข้างหน้าข้าม
การเริ่มต้นของตัวแปร หรือข้ามย้อนกลับไปยังเลเบลหลังจากตัวแปรได้รับ
เริ่มต้น สิ่งนี้เตือนเกี่ยวกับตัวแปรที่เริ่มต้นเมื่อเป็น .เท่านั้น
ประกาศ คำเตือนนี้รองรับเฉพาะ C และ Objective-C ใน C ++ แบบนี้
สาขาเป็นข้อผิดพลาดในทุกกรณี
-Wjump-คิดถึง-init รวมอยู่ใน -Wc++-เข้ากันได้กับ. มันสามารถปิดการใช้งานด้วย
-Wno-กระโดด-พลาด-init ตัวเลือก
-Wsign-เปรียบเทียบ
เตือนเมื่อการเปรียบเทียบระหว่างค่าที่ลงนามและไม่ได้ลงนามอาจทำให้เกิดค่าที่ไม่ถูกต้อง
ผลลัพธ์เมื่อค่าที่ลงนามถูกแปลงเป็นค่าที่ไม่ได้ลงนาม คำเตือนนี้ยังเปิดใช้งานอยู่
by -เว็กซ์ตร้า; เพื่อรับคำเตือนอื่น ๆ ของ -เว็กซ์ตร้า โดยไม่มีคำเตือนนี้ ใช้ -เว็กซ์ตร้า
-Wno-ลงชื่อ-เปรียบเทียบ.
-Wsign-แปลง
เตือนสำหรับการแปลงโดยนัยที่อาจเปลี่ยนเครื่องหมายของค่าจำนวนเต็ม เช่น
การกำหนดนิพจน์จำนวนเต็มที่ลงนามให้กับตัวแปรจำนวนเต็มที่ไม่ได้ลงนาม ชัดเจน
หล่อเงียบคำเตือน ใน C ตัวเลือกนี้เปิดใช้งานด้วย -Wแปลง.
-Wsizeof-ตัวชี้-memaccess
เตือนพารามิเตอร์ความยาวที่น่าสงสัยสำหรับสตริงและฟังก์ชันในตัวของหน่วยความจำบางตัว
ถ้าอาร์กิวเมนต์ใช้ "sizeof" คำเตือนนี้เตือนเช่นเกี่ยวกับ "memset (ptr, 0, sizeof
(ptr));" ถ้า "ptr" ไม่ใช่อาร์เรย์ แต่เป็นตัวชี้ และแนะนำวิธีแก้ไขที่เป็นไปได้ หรือ
เกี่ยวกับ "memcpy (&foo, ptr, sizeof (&foo));" คำเตือนนี้เปิดใช้งานโดย -ผนัง.
-Waddress
เตือนเกี่ยวกับการใช้ที่อยู่หน่วยความจำที่น่าสงสัย ซึ่งรวมถึงการใช้ที่อยู่ของ a
ฟังก์ชันในนิพจน์เงื่อนไข เช่น "void func(void); if (func)" และ
เปรียบเทียบกับที่อยู่หน่วยความจำของตัวอักษรสตริง เช่น "if (x == "abc")"
การใช้งานดังกล่าวมักบ่งบอกถึงข้อผิดพลาดของโปรแกรมเมอร์: ที่อยู่ของฟังก์ชันเสมอ
ประเมินเป็นจริง ดังนั้นการใช้งานในเงื่อนไขมักจะบ่งชี้ว่าโปรแกรมเมอร์
ลืมวงเล็บในการเรียกใช้ฟังก์ชัน และการเปรียบเทียบกับตัวอักษรสตริง
ส่งผลให้เกิดพฤติกรรมที่ไม่ระบุและไม่สามารถเคลื่อนย้ายได้ใน C ดังนั้นจึงมักบ่งชี้ว่า
ที่โปรแกรมเมอร์ตั้งใจจะใช้ "strcmp" คำเตือนนี้เปิดใช้งานโดย -ผนัง.
-Wlogic-สหกรณ์
เตือนเกี่ยวกับการใช้ตัวดำเนินการเชิงตรรกะที่น่าสงสัยในนิพจน์ ซึ่งรวมถึงการใช้
ตัวดำเนินการเชิงตรรกะในบริบทที่คาดว่าจะมีตัวดำเนินการที่ชาญฉลาด
-Waggregate-กลับ
เตือนหากมีการกำหนดหรือเรียกฟังก์ชันใด ๆ ที่ส่งคืนโครงสร้างหรือสหภาพ (ใน
ภาษาที่คุณสามารถส่งคืนอาร์เรย์ได้ สิ่งนี้จะทำให้เกิดคำเตือนด้วย)
-Wno-ก้าวร้าววนรอบเพิ่มประสิทธิภาพ
เตือนหากอยู่ในลูปที่มีจำนวนการวนซ้ำคงที่ คอมไพเลอร์ตรวจพบว่าไม่ได้กำหนด
พฤติกรรมในคำสั่งบางอย่างในระหว่างการทำซ้ำอย่างน้อยหนึ่งครั้ง
-Wno-แอตทริบิวต์
อย่าเตือนหากมีการใช้ "__attribute__" ที่ไม่คาดคิด เช่น คุณลักษณะที่ไม่รู้จัก
คุณลักษณะของฟังก์ชันที่ใช้กับตัวแปร ฯลฯ ซึ่งไม่ได้หยุดข้อผิดพลาดสำหรับ
การใช้แอตทริบิวต์ที่รองรับไม่ถูกต้อง
-Wno-builtin-มาโครกำหนดใหม่
อย่าเตือนหากมีการกำหนดมาโครในตัวบางรายการใหม่ สิ่งนี้ระงับการเตือนสำหรับ
นิยามใหม่ของ "__TIMESTAMP__", "__TIME__", "__DATE__", "__FILE__" และ
"__BASE_FILE__"
-Wstrict-ต้นแบบ (C และ Objective-C เท่านั้น)
เตือนหากมีการประกาศหรือกำหนดฟังก์ชันโดยไม่ระบุประเภทอาร์กิวเมนต์ (หนึ่ง
อนุญาตให้ใช้คำจำกัดความของฟังก์ชันแบบเก่าโดยไม่มีการเตือนหากนำหน้าด้วย a
ประกาศที่ระบุประเภทอาร์กิวเมนต์)
-Wold-style-ประกาศ (C และ Objective-C เท่านั้น)
คำเตือนสำหรับการใช้งานที่ล้าสมัยตามมาตรฐาน C ในการประกาศ สำหรับ
ตัวอย่าง เตือนว่าตัวระบุคลาสการจัดเก็บเช่น "คงที่" ไม่ใช่สิ่งแรกในa
ประกาศ คำเตือนนี้ยังเปิดใช้งานโดย -เว็กซ์ตร้า.
-Wold-สไตล์-นิยาม (C และ Objective-C เท่านั้น)
เตือนหากใช้นิยามฟังก์ชันแบบเก่า จะมีการเตือนแม้ว่าจะมี
ต้นแบบก่อนหน้านี้
-Wmissing-พารามิเตอร์-type (C และ Objective-C เท่านั้น)
พารามิเตอร์ของฟังก์ชันถูกประกาศโดยไม่มีตัวระบุประเภทในฟังก์ชันสไตล์ K&R:
เป็นโมฆะ foo(บาร์) { }
คำเตือนนี้ยังเปิดใช้งานโดย -เว็กซ์ตร้า.
-Wmissing-ต้นแบบ (C และ Objective-C เท่านั้น)
เตือนหากมีการกำหนดฟังก์ชันส่วนกลางโดยไม่มีการประกาศต้นแบบก่อนหน้านี้ นี้
คำเตือนจะออกแม้ว่าคำจำกัดความเองจะให้ต้นแบบ ใช้ตัวเลือกนี้
เพื่อตรวจจับฟังก์ชันส่วนกลางที่ไม่มีการประกาศต้นแบบที่ตรงกันในa
ไฟล์ส่วนหัว ตัวเลือกนี้ใช้ไม่ได้กับ C++ เนื่องจากการประกาศฟังก์ชันทั้งหมด
ให้ต้นแบบและการประกาศที่ไม่ตรงกันจะประกาศโอเวอร์โหลดมากกว่า
ขัดแย้งกับการประกาศก่อนหน้านี้ ใช้ -Wmissing-ประกาศ เพื่อตรวจจับที่หายไป
ประกาศในภาษา C++
-Wmissing-ประกาศ
เตือนหากมีการกำหนดฟังก์ชันส่วนกลางโดยไม่มีการประกาศก่อนหน้านี้ ทำเช่นนั้นแม้ว่า
คำจำกัดความนั้นให้ต้นแบบ ใช้ตัวเลือกนี้เพื่อตรวจหา global
ฟังก์ชันที่ไม่ได้ประกาศไว้ในไฟล์ส่วนหัว ใน C จะไม่มีคำเตือนสำหรับ
ฟังก์ชันที่มีการประกาศที่ไม่ใช่ต้นแบบก่อนหน้านี้ ใช้ -Wmissing-ต้นแบบ ในการตรวจสอบ
ต้นแบบที่ขาดหายไป ใน C ++ จะไม่มีคำเตือนสำหรับเทมเพลตฟังก์ชันหรือสำหรับ
ฟังก์ชันอินไลน์ หรือสำหรับฟังก์ชันในเนมสเปซที่ไม่ระบุชื่อ
-Wmissing ฟิลด์เริ่มต้น
เตือนถ้าตัวเริ่มต้นของโครงสร้างมีบางฟิลด์ที่ขาดหายไป ตัวอย่างเช่นต่อไปนี้
รหัสทำให้เกิดคำเตือนเนื่องจาก "xh" เป็นศูนย์โดยปริยาย:
โครงสร้าง s { int f, g, h; };
โครงสร้าง sx = { 3, 4 };
ตัวเลือกนี้ไม่เตือนเกี่ยวกับ initializers ที่กำหนดไว้ ดังนั้นการปรับเปลี่ยนต่อไปนี้
ไม่ทริกเกอร์คำเตือน:
โครงสร้าง s { int f, g, h; };
struct sx = { .f = 3, .g = 4 };
คำเตือนนี้รวมอยู่ใน -เว็กซ์ตร้า. ที่จะได้รับอื่นๆ -เว็กซ์ตร้า คำเตือนที่ไม่มีสิ่งนี้
ใช้ -เว็กซ์ตร้า -Wno-missing-field-initializers.
-Wno-มัลติชาร์
อย่าเตือนถ้าค่าคงที่หลายอักขระ ('FOOF') ถูกนำมาใช้. มักจะระบุ a
การพิมพ์ผิดในรหัสของผู้ใช้ เนื่องจากมีค่าที่กำหนดไว้ในการนำไปปฏิบัติ และไม่ควรจะเป็น
ใช้ในรหัสพกพา
-Wnormalized=
ใน ISO C และ ISO C++ ตัวระบุสองตัวจะต่างกันหากตัวระบุเป็นลำดับต่างกันของ
ตัวอักษร อย่างไรก็ตาม บางครั้งเมื่ออักขระนอกชุดอักขระ ASCII พื้นฐาน
ใช้ คุณสามารถมีลำดับอักขระที่แตกต่างกันสองลำดับที่มีลักษณะเหมือนกันได้ หลีกเลี่ยง
สับสน มาตรฐาน ISO 10646 กำหนดไว้บ้าง บรรทัดฐาน กฎระเบียบ ซึ่งเมื่อนำไปใช้
ตรวจสอบให้แน่ใจว่าสองซีเควนซ์ที่เหมือนกันถูกเปลี่ยนเป็นลำดับเดียวกัน GCC
สามารถเตือนคุณได้หากคุณใช้ตัวระบุที่ไม่ได้รับการปรับให้เป็นมาตรฐาน ตัวเลือกนี้
ควบคุมคำเตือนนั้น
GCC รองรับการเตือนสี่ระดับ ค่าเริ่มต้นคือ -Wปกติ=nfc,
ซึ่งเตือนเกี่ยวกับตัวระบุใด ๆ ที่ไม่ได้อยู่ในรูปแบบมาตรฐาน ISO 10646 "C"
เอ็นเอฟซี. NFC เป็นรูปแบบที่แนะนำสำหรับการใช้งานส่วนใหญ่
ขออภัย มีอักขระบางตัวที่อนุญาตในตัวระบุโดย ISO C และ ISO C++
ที่เมื่อเปลี่ยนเป็น NFC จะไม่ได้รับอนุญาตในตัวระบุ นั่นคือไม่มีทาง
เพื่อใช้สัญลักษณ์เหล่านี้ใน ISO C หรือ C++ แบบพกพาและมีตัวระบุทั้งหมดของคุณใน NFC
-Wปกติ=รหัส ระงับคำเตือนสำหรับอักขระเหล่านี้ หวังว่าอนาคต
เวอร์ชันของมาตรฐานที่เกี่ยวข้องจะแก้ไขสิ่งนี้ ซึ่งเป็นสาเหตุที่ตัวเลือกนี้ไม่
ค่าเริ่มต้น
คุณสามารถปิดคำเตือนสำหรับอักขระทั้งหมดโดยการเขียน -Wnormalized=ไม่มี. คุณ
ควรทำสิ่งนี้หากคุณใช้โครงร่างการทำให้เป็นมาตรฐานอื่น (เช่น "D")
เพราะไม่เช่นนั้น คุณสามารถสร้างบั๊กที่มองไม่เห็นได้อย่างง่ายดาย
อักขระบางตัวใน ISO 10646 มีความหมายที่แตกต่างกันแต่มีลักษณะเหมือนกันในบางฟอนต์
หรือวิธีการแสดง โดยเฉพาะอย่างยิ่งเมื่อมีการใช้การจัดรูปแบบ ตัวอย่างเช่น
"\u207F", "SUPERSCRIPT LATIN SMALL LETTER N" แสดงเหมือนกับ "n" ปกติที่
ถูกวางไว้ในตัวยก ISO 10646 กำหนด เอ็นเอฟเคซี รูปแบบการทำให้เป็นมาตรฐานถึง
แปลงสิ่งเหล่านี้ให้อยู่ในรูปแบบมาตรฐานเช่นกัน และ GCC จะเตือนหากรหัสของคุณไม่อยู่ใน
NFKC ถ้าคุณใช้ -Wปกติ=nfkc. คำเตือนนี้เปรียบได้กับคำเตือนเกี่ยวกับทุก ๆ
ตัวระบุที่มีตัวอักษร O เพราะอาจสับสนกับตัวเลข 0
และไม่ใช่ค่าเริ่มต้น แต่อาจมีประโยชน์ตามแบบแผนการเข้ารหัสในพื้นที่หาก
สภาพแวดล้อมการเขียนโปรแกรมไม่สามารถแก้ไขได้เพื่อแสดงอักขระเหล่านี้อย่างชัดเจน
-Wno-เลิกใช้
อย่าเตือนเกี่ยวกับการใช้คุณสมบัติที่เลิกใช้แล้ว
-Wno-เลิกใช้-ประกาศ
อย่าเตือนเกี่ยวกับการใช้ฟังก์ชัน ตัวแปร และประเภทที่ทำเครื่องหมายว่าเลิกใช้โดย
โดยใช้แอตทริบิวต์ "เลิกใช้แล้ว"
-Wno-ล้น
อย่าเตือนเกี่ยวกับเวลาคอมไพล์โอเวอร์โฟลว์ในนิพจน์คงที่
-Woverride-เริ่มต้น (C และ Objective-C เท่านั้น)
เตือนถ้าฟิลด์เริ่มต้นโดยไม่มีผลข้างเคียงถูกแทนที่เมื่อใช้กระบุ
ตัวเริ่มต้น
คำเตือนนี้รวมอยู่ใน -เว็กซ์ตร้า. ที่จะได้รับอื่นๆ -เว็กซ์ตร้า คำเตือนที่ไม่มีสิ่งนี้
ใช้ -เว็กซ์ตร้า -Wno-แทนที่-init.
-บรรจุห่อ
เตือนถ้าโครงสร้างได้รับแอตทริบิวต์ที่บรรจุ แต่แอตทริบิวต์ที่บรรจุไม่มี
ผลกระทบต่อเค้าโครงหรือขนาดของโครงสร้าง โครงสร้างดังกล่าวอาจวางไม่ตรงสำหรับ
ประโยชน์น้อย ตัวอย่างเช่น ในโค้ดนี้ ตัวแปร "fx" ใน "struct bar" คือ
ไม่ตรงแนวแม้ว่า "struct bar" จะไม่มีแอตทริบิวต์ที่บรรจุ:
โครงสร้าง foo {
intx;
อักขระ a, b, c, d;
} __attribute __ ((บรรจุ));
แถบโครงสร้าง {
ถ่าน z;
โครงสร้าง foo f;
};
-Wpacked-bitfield-เข้ากันได้
GCC ซีรี่ส์ 4.1, 4.2 และ 4.3 ละเว้นแอตทริบิวต์ "packed" บนบิตฟิลด์ประเภท
"ถ่าน". สิ่งนี้ได้รับการแก้ไขแล้วใน GCC 4.4 แต่การเปลี่ยนแปลงสามารถนำไปสู่ความแตกต่างใน
เค้าโครงโครงสร้าง GCC แจ้งให้คุณทราบเมื่อมีการเปลี่ยนแปลงออฟเซ็ตของฟิลด์ดังกล่าวใน GCC
4.4. ตัวอย่างเช่น ไม่มีช่องว่างภายใน 4 บิตระหว่างฟิลด์ "a" และ "b" อีกต่อไปในสิ่งนี้
โครงสร้าง:
โครงสร้าง foo
{
อักขระ a:4;
ถ่าน b:8;
} __attribute__ ((บรรจุ));
คำเตือนนี้เปิดใช้งานโดยค่าเริ่มต้น ใช้ -Wno-บรรจุบิตฟิลด์เข้ากันได้ เพื่อปิดการใช้งานนี้
การเตือน
- หุ้มเบาะ
เตือนหากมีการเติมช่องว่างภายในโครงสร้างเพื่อจัดแนวองค์ประกอบของ
โครงสร้างหรือเพื่อจัดแนวโครงสร้างทั้งหมด บางครั้งเมื่อสิ่งนี้เกิดขึ้นก็เป็นไปได้
เพื่อจัดเรียงเขตข้อมูลของโครงสร้างใหม่เพื่อลดช่องว่างภายในและทำให้
โครงสร้างเล็กลง
-Wredundant-decl
เตือนหากมีการประกาศสิ่งใดมากกว่าหนึ่งครั้งในขอบเขตเดียวกัน แม้ในกรณีที่
การประกาศหลายรายการถูกต้องและไม่มีอะไรเปลี่ยนแปลง
-Wnested-ภายนอก (C และ Objective-C เท่านั้น)
เตือนหากพบการประกาศ "ภายนอก" ภายในฟังก์ชัน
-Wno-สืบทอด-variadic-ctor
ระงับคำเตือนเกี่ยวกับการใช้ C++11 ที่สืบทอดคอนสตรัคเตอร์เมื่อคลาสฐาน
สืบทอดมาจากมีตัวสร้างตัวแปร C; คำเตือนเปิดอยู่โดยค่าเริ่มต้นเนื่องจาก
จุดไข่ปลาไม่ได้รับการสืบทอด
-วินไลน์
เตือนหากฟังก์ชันที่ประกาศเป็นอินไลน์ไม่สามารถอินไลน์ได้ ด้วยสิ่งนี้
ตัวเลือกคอมไพเลอร์ไม่เตือนเกี่ยวกับความล้มเหลวของฟังก์ชันอินไลน์ที่ประกาศใน
ส่วนหัวของระบบ
คอมไพเลอร์ใช้ฮิวริสติกที่หลากหลายเพื่อกำหนดว่าอินไลน์ a
การทำงาน. ตัวอย่างเช่น คอมไพเลอร์คำนึงถึงขนาดของฟังก์ชันที่เป็น
อินไลน์และจำนวนอินไลน์ที่ทำไปแล้วในฟังก์ชันปัจจุบัน
ดังนั้น การเปลี่ยนแปลงที่ดูเหมือนไม่มีนัยสำคัญในโปรแกรมต้นทางอาจทำให้
คำเตือนที่ผลิตโดย -วินไลน์ ปรากฏขึ้นหรือหายไป
-Wno-ไม่ถูกต้อง offsetof (C++ และ Objective-C++ เท่านั้น)
ระงับคำเตือนจากการใช้ ชดเชย มาโครเป็นประเภทที่ไม่ใช่ POD ตาม
มาตรฐาน ISO C++ ปี 1998 ใช้ ชดเชย ไม่ได้กำหนดประเภทที่ไม่ใช่ POD ใน
การใช้งาน C ++ ที่มีอยู่อย่างไรก็ตาม ชดเชย มักจะให้ผลลัพธ์ที่มีความหมาย
แม้ว่าจะใช้กับประเภทที่ไม่ใช่ POD บางประเภทก็ตาม (เช่น แบบง่าย โครงสร้าง ที่
ไม่สามารถเป็นประเภท POD โดยอาศัยตัวสร้างเท่านั้น) ธงนี้มีไว้สำหรับ
ผู้ใช้ที่ทราบว่ากำลังเขียนโค้ดที่ไม่สามารถพกพาได้และเป็นผู้ที่จงใจ
เลือกที่จะเพิกเฉยต่อคำเตือนเกี่ยวกับเรื่องนี้
ข้อจำกัดของ ชดเชย อาจผ่อนคลายในเวอร์ชันอนาคตของมาตรฐาน C++
-Wno-int-to-pointer-cast
ระงับคำเตือนจากประเภทคาสต์เป็นประเภทตัวชี้ของจำนวนเต็มที่มีขนาดต่างกัน ใน
C++ การแคสต์ไปยังประเภทตัวชี้ที่มีขนาดเล็กกว่าถือเป็นข้อผิดพลาด Wint-to-ตัวชี้-cast is
เปิดใช้งานโดยค่าเริ่มต้น
-Wno-ตัวชี้ไปยัง int-cast (C และ Objective-C เท่านั้น)
ระงับคำเตือนจากการร่ายจากตัวชี้ไปยังประเภทจำนวนเต็มที่มีขนาดต่างกัน
-Winvalid-pc
เตือนหากพบส่วนหัวที่คอมไพล์ล่วงหน้าในเส้นทางการค้นหาแต่ไม่สามารถใช้งานได้
-ยาว-ยาว
เตือนถ้า ยาว ยาว ชนิดที่ใช้ เปิดใช้งานโดยทั้ง -Wpedantic or -แบบดั้งเดิม
ในโหมด ISO C90 และ C++98 ในการยับยั้งข้อความเตือน ให้ใช้ -ไม่ยาว-ยาว.
-Wvariadic-มาโคร
เตือนหากใช้มาโครแบบแปรผันในโหมด ISO C90 อวดรู้ หรือไวยากรณ์ทางเลือกของ GNU
เมื่ออยู่ในโหมด ISO C99 อวดรู้ นี่เป็นค่าเริ่มต้น ในการยับยั้งข้อความเตือน ให้ใช้
-Wno-variadic-มาโคร.
-วอราร์ก
เตือนการใช้งานที่น่าสงสัยของมาโครที่ใช้เพื่อจัดการกับอาร์กิวเมนต์ตัวแปรเช่น
va_start. นี่เป็นค่าเริ่มต้น ในการยับยั้งข้อความเตือน ให้ใช้ -Wno-วาราร์ก.
-Wvector-การทำงาน-ประสิทธิภาพ
เตือนหากการดำเนินการเวกเตอร์ไม่ได้ใช้งานผ่านความสามารถของ SIMD ของสถาปัตยกรรม
มีประโยชน์อย่างมากสำหรับการปรับแต่งประสิทธิภาพ สามารถดำเนินการเวกเตอร์ได้
"ทีละชิ้น" ซึ่งหมายความว่าการดำเนินการสเกลาร์จะดำเนินการกับเวกเตอร์ทุกตัว
ธาตุ; "แบบขนาน" ซึ่งหมายความว่าการดำเนินการเวกเตอร์ถูกใช้งานโดยใช้
สเกลาร์ประเภทกว้างซึ่งปกติจะมีประสิทธิภาพมากกว่า และ "เป็นโสด
สเกลาร์" ซึ่งหมายความว่าเวกเตอร์พอดีกับประเภทสเกลาร์
-Wno-เสมือน-ย้าย-มอบหมาย
ระงับคำเตือนเกี่ยวกับการสืบทอดจากฐานเสมือนด้วยการย้าย C++11 ที่ไม่สำคัญ
ผู้ดำเนินการมอบหมาย สิ่งนี้เป็นอันตรายเพราะหากสามารถเข้าถึงฐานเสมือนได้
มากกว่าหนึ่งเส้นทางจะถูกย้ายหลายครั้งซึ่งอาจหมายถึงวัตถุทั้งสองสิ้นสุด
ขึ้นในสถานะย้ายจาก หากตัวดำเนินการมอบหมายการย้ายถูกเขียนเพื่อหลีกเลี่ยง
การย้ายจากวัตถุที่ย้ายออกจาก คำเตือนนี้สามารถปิดใช้งานได้
-วลา
เตือนหากใช้อาร์เรย์ความยาวผันแปรในโค้ด -Wno-vla ป้องกัน -Wpedantic
คำเตือนของอาร์เรย์ความยาวผันแปร
-Wvolatile-ลงทะเบียน-var
เตือนหากตัวแปรรีจิสเตอร์ถูกประกาศผันผวน ตัวดัดแปลงที่ระเหยไม่ได้
ยับยั้งการปรับให้เหมาะสมทั้งหมดที่อาจกำจัดการอ่านและ/หรือการเขียนเพื่อลงทะเบียน
ตัวแปร คำเตือนนี้เปิดใช้งานโดย -ผนัง.
-Wdisabled-เพิ่มประสิทธิภาพ
เตือนหากบัตรผ่านการปรับให้เหมาะสมที่ร้องขอถูกปิดใช้งาน คำเตือนนี้โดยทั่วไปไม่
ระบุว่ามีสิ่งใดผิดปกติกับรหัสของคุณ เป็นเพียงการบ่งชี้ว่า GCC's
เครื่องมือเพิ่มประสิทธิภาพไม่สามารถจัดการโค้ดได้อย่างมีประสิทธิภาพ บ่อยครั้งที่ปัญหาคือ .ของคุณ
รหัสใหญ่เกินไปหรือซับซ้อนเกินไป GCC ปฏิเสธที่จะเพิ่มประสิทธิภาพโปรแกรมเมื่อปรับให้เหมาะสม
ตัวเองน่าจะใช้เวลามากเกินไป
-Wpointer-สัญญาณ (C และ Objective-C เท่านั้น)
เตือนสำหรับการส่งอาร์กิวเมนต์ตัวชี้หรือการมอบหมายที่มีการเซ็นชื่อต่างกัน นี้
รองรับตัวเลือกสำหรับ C และ Objective-C เท่านั้น มีความหมายโดย -ผนัง และโดย
-Wpedanticซึ่งสามารถปิดการใช้งานด้วย -Wno-ตัวชี้-สัญญาณ.
-Wstack ป้องกัน
ตัวเลือกนี้ใช้งานได้เฉพาะเมื่อ -fstack- ป้องกัน มีการใช้งาน มันเตือนเกี่ยวกับฟังก์ชั่น
ที่ไม่ได้รับการปกป้องจากการทุบสแต็ค
-Wno-แผ่นกันโคลน
ระงับคำเตือนเกี่ยวกับโครงสร้างที่ไม่สามารถใช้เครื่องมือได้ -fmudflap.
-Woverlength-สตริง
เตือนเกี่ยวกับค่าคงที่สตริงที่ยาวกว่า "minimum maximum" length
ระบุไว้ในมาตรฐาน C คอมไพเลอร์สมัยใหม่โดยทั่วไปอนุญาตให้มีค่าคงที่สตริงที่
ยาวเกินขีดจำกัดขั้นต่ำของมาตรฐานมาก แต่โปรแกรมแบบพกพามากควร
หลีกเลี่ยงการใช้สตริงที่ยาวกว่า
มีการใช้ขีดจำกัด หลังจาก การต่อสตริงค่าคงที่และไม่นับการต่อท้าย
น. ใน C90 ขีดจำกัดคือ 509 อักขระ; ใน C99 เพิ่มขึ้นเป็น 4095 C++98 ไม่
ไม่ระบุค่าสูงสุดขั้นต่ำเชิงบรรทัดฐาน ดังนั้นเราจึงไม่วินิจฉัยสตริงที่มีความยาวเกินใน
ค ++
ตัวเลือกนี้มีความหมายโดย -Wpedantic, และสามารถปิดการใช้งานด้วย
-Wno-overlength-สตริง.
-Wunsuffixed-ลอยคงที่ (C และ Objective-C เท่านั้น)
ออกคำเตือนสำหรับค่าคงที่ลอยตัวที่ไม่มีส่วนต่อท้าย เมื่อใช้
พร้อมด้วย -Wsystem-ส่วนหัว มันเตือนเกี่ยวกับค่าคงที่ดังกล่าวในไฟล์ส่วนหัวของระบบ
ซึ่งจะมีประโยชน์เมื่อเตรียมโค้ดเพื่อใช้กับ Pragma "FLOAT_CONST_DECIMAL64"
จากการขยายจุดทศนิยมเป็น C99
Options for การแก้จุดบกพร่อง ของคุณ โครงการ or GCC
GCC มีตัวเลือกพิเศษมากมายที่ใช้สำหรับการดีบักโปรแกรมของคุณหรือ GCC:
-g สร้างข้อมูลการดีบักในรูปแบบดั้งเดิมของระบบปฏิบัติการ (stabs, COFF,
XCOFF หรือ DWARF 2) GDB สามารถทำงานกับข้อมูลการดีบักนี้ได้
ในระบบส่วนใหญ่ที่ใช้รูปแบบการแทง -g เปิดใช้งานการใช้ข้อมูลการดีบักพิเศษ
ที่มีแต่ GDB เท่านั้นที่สามารถใช้ได้ ข้อมูลเพิ่มเติมนี้ทำให้การดีบักทำงานได้ดีขึ้นใน GDB แต่
อาจทำให้โปรแกรมแก้ไขข้อบกพร่องอื่น ๆ ขัดข้องหรือปฏิเสธที่จะอ่านโปรแกรม ถ้าคุณต้องการ
ควบคุมได้อย่างแน่นอนว่าจะสร้างข้อมูลเพิ่มเติมหรือไม่ ใช้ -gstabs+, -gstabs,
-gxcoff+, -gxcoff,หรือ -gvms (ดูด้านล่าง)
GCC ให้คุณใช้ -g กับ -O. ทางลัดที่ใช้โดยโค้ดที่ปรับให้เหมาะสมอาจ
บางครั้งสร้างผลลัพธ์ที่น่าประหลาดใจ: ตัวแปรบางตัวที่คุณประกาศอาจไม่มีอยู่ที่
ทั้งหมด; การไหลของการควบคุมอาจเคลื่อนไปชั่วครู่ในที่ที่คุณไม่คาดคิด บางงบอาจ
ไม่ได้ดำเนินการเพราะคำนวณผลลัพธ์คงที่หรือค่าของพวกเขาอยู่ที่
มือ; คำสั่งบางอย่างอาจดำเนินการในที่ต่างกันเพราะถูกย้ายออกไปแล้ว
ของลูป
อย่างไรก็ตาม มันพิสูจน์ได้ว่าสามารถดีบักเอาต์พุตที่ปรับให้เหมาะสมที่สุดได้ มันสมเหตุสมผล
เพื่อใช้เครื่องมือเพิ่มประสิทธิภาพสำหรับโปรแกรมที่อาจมีข้อบกพร่อง
ตัวเลือกต่อไปนี้มีประโยชน์เมื่อ GCC ถูกสร้างขึ้นพร้อมความสามารถเพิ่มเติม
รูปแบบการดีบักมากกว่าหนึ่งรูปแบบ
-gsplit คนแคระ
แยกข้อมูลการดีบักของคนแคระให้มากที่สุดเท่าที่จะเป็นไปได้ลงในไฟล์เอาต์พุตที่แยกจากกัน
ด้วยนามสกุล .dwo ตัวเลือกนี้ช่วยให้ระบบบิลด์หลีกเลี่ยงการลิงก์ไฟล์
พร้อมข้อมูลการดีบัก เพื่อให้มีประโยชน์ ตัวเลือกนี้ต้องใช้โปรแกรมแก้ไขข้อบกพร่องที่มีความสามารถ
กำลังอ่านไฟล์ .dwo
-ggdb
สร้างข้อมูลการดีบักสำหรับการใช้งานโดย GDB นี้หมายถึงการใช้การแสดงออกมากที่สุด
รูปแบบที่มี (DWARF 2, แทง หรือรูปแบบเนทีฟหากไม่มี
รองรับ) รวมถึงส่วนขยาย GDB หากเป็นไปได้
-ชื่อนามสกุล
สร้างส่วน .debug_pubnames และ .debug_pubtypes ของคนแคระ
-gstabs
สร้างข้อมูลการดีบักในรูปแบบการแทง (หากรองรับ) โดยไม่ต้องใช้ GDB
ส่วนขยาย นี่คือรูปแบบที่ DBX ใช้กับระบบ BSD ส่วนใหญ่ บน MIPS อัลฟ่าและ
ระบบ V รีลีส 4 ระบบ ตัวเลือกนี้สร้างเอาต์พุตการดีบักการแทงที่ไม่ใช่
เข้าใจโดย DBX หรือ SDB ในระบบ System V Release 4 ตัวเลือกนี้ต้องใช้ GNU
ผู้ประกอบ.
-felimate-ไม่ได้ใช้-debug-symbols
สร้างข้อมูลการดีบักในรูปแบบการแทง (หากรองรับ) สำหรับสัญลักษณ์เท่านั้น
ที่ใช้จริง.
-femit-class-debug-เสมอ
แทนที่จะปล่อยข้อมูลการดีบักสำหรับคลาส C++ ในไฟล์อ็อบเจ็กต์เพียงไฟล์เดียว
ปล่อยออกมาในไฟล์อ็อบเจ็กต์ทั้งหมดโดยใช้คลาส ควรใช้ตัวเลือกนี้กับ .เท่านั้น
ดีบักเกอร์ที่ไม่สามารถจัดการกับวิธีที่ GCC ส่งข้อมูลการดีบักตามปกติ
สำหรับคลาสเพราะการใช้ตัวเลือกนี้จะเพิ่มขนาดของข้อมูลการดีบักโดย
มากเท่ากับปัจจัยสอง
-fdebug-ประเภทส่วน
เมื่อใช้ DWARF เวอร์ชัน 4 ขึ้นไป พิมพ์ DIE ได้เอง
ส่วน ".debug_types" แทนที่จะทำให้เป็นส่วนหนึ่งของส่วน ".debug_info" มัน
มีประสิทธิภาพมากกว่าที่จะวางไว้ในส่วน comdat ที่แยกจากกันเนื่องจากตัวเชื่อมโยงสามารถทำได้
ลบรายการที่ซ้ำกัน แต่ยังไม่ใช่ผู้บริโภค DWARF ทั้งหมดที่สนับสนุนส่วน ".debug_types"
และในบางอ็อบเจ็กต์ ".debug_types" จะสร้างขนาดใหญ่ขึ้นแทนการดีบักที่เล็กกว่า
ข้อมูล
-gstabs+
สร้างข้อมูลการดีบักในรูปแบบการแทง (หากได้รับการสนับสนุน) โดยใช้GNU
ส่วนขยายที่เข้าใจโดยดีบักเกอร์ GNU (GDB) เท่านั้น การใช้นามสกุลเหล่านี้คือ
มีแนวโน้มที่จะทำให้โปรแกรมแก้ไขข้อบกพร่องอื่น ๆ ขัดข้องหรือปฏิเสธที่จะอ่านโปรแกรม
-gcoff
สร้างข้อมูลการดีบักในรูปแบบ COFF (หากได้รับการสนับสนุน) นี้เป็น
รูปแบบที่ใช้โดย SDB บนระบบ System V ส่วนใหญ่ก่อน System V Release 4
-gxcoff
สร้างข้อมูลการดีบักในรูปแบบ XCOFF (หากได้รับการสนับสนุน) นี้เป็น
รูปแบบที่ใช้โดยดีบักเกอร์ DBX บนระบบ IBM RS/6000
-gxcoff+
สร้างข้อมูลการดีบักในรูปแบบ XCOFF (หากได้รับการสนับสนุน) โดยใช้ GNU
ส่วนขยายที่เข้าใจโดยดีบักเกอร์ GNU (GDB) เท่านั้น การใช้นามสกุลเหล่านี้คือ
มีแนวโน้มที่จะทำให้โปรแกรมแก้ไขข้อบกพร่องอื่น ๆ ขัดข้องหรือปฏิเสธที่จะอ่านโปรแกรมและอาจทำให้
แอสเซมเบลอร์อื่นที่ไม่ใช่แอสเซมเบลอร์ GNU (GAS) ที่จะล้มเหลวโดยมีข้อผิดพลาด
-คนแคระ-รุ่น
สร้างข้อมูลการดีบักในรูปแบบ DWARF (หากได้รับการสนับสนุน) คุณค่าของ
รุ่น อาจเป็น 2, 3 หรือ 4; เวอร์ชันเริ่มต้นสำหรับเป้าหมายส่วนใหญ่คือ 4
โปรดทราบว่าด้วย DWARF เวอร์ชัน 2 บางพอร์ตต้องใช้และใช้บางพอร์ตที่ไม่ขัดแย้งเสมอ
ส่วนขยาย DWARF 3 ในตารางคลี่คลาย
เวอร์ชัน 4 อาจต้องใช้ GDB 7.0 และ -fvar-การติดตามการมอบหมาย เพื่อประโยชน์สูงสุด
-grecord-gcc-สวิตช์
สวิตช์นี้ทำให้ตัวเลือกบรรทัดคำสั่งที่ใช้เรียกคอมไพเลอร์ที่อาจ
ส่งผลต่อการสร้างโค้ดที่จะผนวกเข้ากับแอตทริบิวต์ DW_AT_producer ใน DWARF
ข้อมูลการดีบัก ตัวเลือกจะถูกต่อด้วยช่องว่างที่แยกจาก
ซึ่งกันและกันและจากเวอร์ชั่นคอมไพเลอร์ ดูสิ่งนี้ด้วย -frecord-gcc-สวิตช์ สำหรับอื่น ๆ
วิธีการจัดเก็บตัวเลือกคอมไพเลอร์ลงในไฟล์อ็อบเจ็กต์ นี่คือค่าเริ่มต้น
-gno-record-gcc-สวิตช์
ไม่อนุญาตการผนวกตัวเลือกบรรทัดคำสั่งต่อท้ายแอตทริบิวต์ DW_AT_producer ใน DWARF
ข้อมูลการดีบัก
-gstrict-คนแคระ
ไม่อนุญาตให้ใช้ส่วนขยายของรุ่นมาตรฐาน DWARF ที่ใหม่กว่าที่เลือกด้วย
-คนแคระ-รุ่น. สำหรับเป้าหมายส่วนใหญ่ที่ใช้ส่วนขยาย DWARF ที่ไม่ขัดแย้งกันในภายหลัง
อนุญาตให้ใช้เวอร์ชันมาตรฐาน
-gno-เข้มงวด-คนแคระ
อนุญาตให้ใช้ส่วนขยายของรุ่นมาตรฐาน DWARF ที่ใหม่กว่าที่เลือกด้วย
-คนแคระ-รุ่น.
-gvms
สร้างข้อมูลการดีบักในรูปแบบการดีบัก Alpha/VMS (หากได้รับการสนับสนุน) นี้
เป็นรูปแบบที่ใช้โดย DEBUG บนระบบ Alpha/VMS
-gระดับ
-ggdbระดับ
-gstabsระดับ
-gcoffระดับ
-gxcoffระดับ
-gvmsระดับ
ขอข้อมูลการดีบักและยังใช้ ระดับ เพื่อระบุจำนวนข้อมูล NS
ระดับเริ่มต้นคือ 2
ระดับ 0 ไม่มีข้อมูลการดีบักเลย ดังนั้น, -g0 ปฏิเสธ -g.
ระดับ 1 สร้างข้อมูลน้อยที่สุดเพียงพอสำหรับการทำ backtraces ในส่วนของ
โปรแกรมที่คุณไม่ได้วางแผนที่จะแก้ไขข้อบกพร่อง ซึ่งรวมถึงคำอธิบายของฟังก์ชันและ
ตัวแปรภายนอก แต่ไม่มีข้อมูลเกี่ยวกับตัวแปรท้องถิ่นและไม่มีหมายเลขบรรทัด
ระดับ 3 มีข้อมูลเพิ่มเติม เช่น คำจำกัดความมาโครทั้งหมดที่มีอยู่ใน
โปรแกรม. ดีบักเกอร์บางตัวรองรับการขยายมาโครเมื่อคุณใช้ -g3.
-gdwarf-2 ไม่ยอมรับระดับการดีบักที่ต่อกัน เนื่องจาก GCC ใช้เพื่อรองรับ an
ตัวเลือก -gdwarf ที่หมายถึงการสร้างข้อมูลการดีบักใน DWARF . เวอร์ชัน 1
รูปแบบ (ซึ่งแตกต่างจากเวอร์ชัน 2) อย่างมาก และมันคงจะสับสนเกินไป
รูปแบบการดีบักนั้นล้าสมัยไปนานแล้ว แต่ตัวเลือกนี้ไม่สามารถเปลี่ยนแปลงได้ในขณะนี้ ใช้แทน
ส่วนเพิ่มเติม -gระดับ ตัวเลือกในการเปลี่ยนระดับการดีบักสำหรับ DWARF
-gtoggle
ปิดการสร้างข้อมูลการดีบัก หากละเว้นตัวเลือกนี้จะเป็นการสร้างหรือเปิดใช้งาน
ที่ระดับ 2 มิฉะนั้น ตำแหน่งของอาร์กิวเมนต์นี้ในบรรทัดคำสั่งไม่ได้
เรื่อง; จะมีผลหลังจากประมวลผลตัวเลือกอื่นๆ ทั้งหมดแล้ว และจะมีผลเท่านั้น
ครั้งเดียวไม่ว่าจะให้กี่ครั้งก็ตาม จุดประสงค์หลักเพื่อใช้กับ
-fcompare-debug.
-fsanitize=ที่อยู่
เปิดใช้งาน AddressSanitizer ซึ่งเป็นตัวตรวจจับข้อผิดพลาดหน่วยความจำอย่างรวดเร็ว คำแนะนำการเข้าถึงหน่วยความจำ
จะได้รับเครื่องมือในการตรวจจับจุดบกพร่องนอกขอบเขตและจุดบกพร่องหลังการใช้งานฟรี ดู
<http://code.google.com/p/address-sanitizer/> สำหรับรายละเอียดเพิ่มเติม
-fsanitize=เธรด
เปิดใช้งาน ThreadSanitizer เครื่องตรวจจับการแข่งขันข้อมูลที่รวดเร็ว คำแนะนำการเข้าถึงหน่วยความจำจะเป็น
เครื่องมือเพื่อตรวจจับข้อบกพร่องของการแข่งขันข้อมูล ดู
<http://code.google.com/p/data-race-test/wiki/ThreadSanitizer> สำหรับรายละเอียดเพิ่มเติม
-fdump ขั้นสุดท้ายอินส์[=ไฟล์]
ดัมพ์การเป็นตัวแทนภายในขั้นสุดท้าย (RTL) ไปยัง ไฟล์. ถ้าอาร์กิวเมนต์ทางเลือกคือ
ละเว้น (หรือ if ไฟล์ คือ ".") ชื่อของไฟล์ดัมพ์ถูกกำหนดโดยการต่อท้าย
".gkd" เป็นชื่อไฟล์เอาต์พุตการคอมไพล์
-fcompare-debug[=ตัวเลือก]
หากไม่มีข้อผิดพลาดเกิดขึ้นระหว่างการคอมไพล์ ให้รันคอมไพเลอร์อีกครั้ง โดยเพิ่ม ตัวเลือก และ
-fcompare-debug-วินาที อาร์กิวเมนต์ที่ส่งผ่านไปยังการรวบรวมครั้งที่สอง ทิ้ง
การแสดงภายในขั้นสุดท้ายในการคอมไพล์ทั้งสอง และพิมพ์ข้อผิดพลาดหากต่างกัน
หากละเว้นเครื่องหมายเท่ากับค่าเริ่มต้น -gtoggle ถูกนำมาใช้.
ตัวแปรสภาพแวดล้อม GCC_COMPARE_DEBUG, หากกำหนดไว้, ไม่ว่างและไม่เป็นศูนย์,
เปิดใช้งานโดยปริยาย -fcompare-debug. ถ้า GCC_COMPARE_DEBUG ถูกกำหนดให้เป็นสตริง
ขึ้นต้นด้วยขีดกลาง แล้วใช้สำหรับ ตัวเลือกมิฉะนั้นค่าเริ่มต้น -gtoggle is
มือสอง
-fcompare-debug=, ที่มีเครื่องหมายเท่ากับ แต่ไม่มี ตัวเลือก, เทียบเท่ากับ
-fno-เปรียบเทียบ-debugซึ่งปิดใช้งานการทุ่มตลาดของการเป็นตัวแทนขั้นสุดท้ายและ
การรวบรวมที่สองป้องกันแม้กระทั่ง GCC_COMPARE_DEBUG จากการมีผลบังคับใช้
เพื่อตรวจสอบความคุ้มครองเต็มรูปแบบระหว่าง -fcompare-debug ทดสอบ set GCC_COMPARE_DEBUG เพื่อพูด
-fcompare-debug-not-overriddenซึ่ง GCC ปฏิเสธว่าเป็นตัวเลือกที่ไม่ถูกต้องในใดๆ จริง
การคอมไพล์ (แทนที่จะเป็นการประมวลผลล่วงหน้า การประกอบ หรือการเชื่อมโยง) เพื่อรับเพียงคำเตือน
การตั้งค่า GCC_COMPARE_DEBUG ไปยัง -w%n-fcompare-debug ไม่ แทนที่ จะทำ.
-fcompare-debug-วินาที
ตัวเลือกนี้จะถูกส่งต่อโดยปริยายไปยังคอมไพเลอร์สำหรับการคอมไพล์ครั้งที่สองที่ร้องขอ
by -fcompare-debugพร้อมกับตัวเลือกในการปิดเสียงคำเตือน และละเว้นตัวเลือกอื่นๆ
ที่จะทำให้เกิดผลลัพธ์ของคอมไพเลอร์ผลข้างเคียงไปยังไฟล์หรือไปยังเอาต์พุตมาตรฐาน
ไฟล์ดัมพ์และไฟล์ชั่วคราวที่เก็บรักษาไว้จะถูกเปลี่ยนชื่อเพื่อให้มี ".gk"
การขยายเพิ่มเติมระหว่างการคอมไพล์ครั้งที่สอง เพื่อหลีกเลี่ยงการเขียนทับสิ่งเหล่านั้น
ที่สร้างขึ้นโดยครั้งแรก
เมื่อตัวเลือกนี้ถูกส่งไปยังไดรเวอร์คอมไพเลอร์ จะทำให้ เป็นครั้งแรก รวบรวมถึง
ถูกข้าม ซึ่งทำให้มีประโยชน์เพียงเล็กน้อยนอกเหนือจากการดีบักคอมไพเลอร์ที่เหมาะสม
-felimate-dwarf2-dups
บีบอัดข้อมูลการดีบัก DWARF 2 โดยกำจัดข้อมูลที่ซ้ำกันเกี่ยวกับ
แต่ละสัญลักษณ์ ตัวเลือกนี้เหมาะสมเมื่อสร้างการดีบัก DWARF 2 เท่านั้น
ข้อมูลกับ -gdwarf-2.
-femit-struct-debug-baseonly
ปล่อยข้อมูลการดีบักสำหรับประเภทโครงสร้างเหมือนเฉพาะเมื่อชื่อฐานของ
ไฟล์ต้นฉบับการคอมไพล์ตรงกับชื่อฐานของไฟล์ที่มีการกำหนดโครงสร้าง
ตัวเลือกนี้ช่วยลดขนาดของข้อมูลการดีบักอย่างมาก แต่ที่
การสูญเสียข้อมูลประเภทที่อาจเกิดขึ้นอย่างมีนัยสำคัญต่อดีบักเกอร์ ดู
-femit-struct-debug-reduced สำหรับตัวเลือกที่ก้าวร้าวน้อยกว่า ดู
-femit-struct-debug-รายละเอียด เพื่อการควบคุมที่ละเอียดยิ่งขึ้น
ตัวเลือกนี้ใช้ได้กับ DWARF 2 เท่านั้น
-femit-struct-debug-reduced
ปล่อยข้อมูลการดีบักสำหรับประเภทโครงสร้างเหมือนเฉพาะเมื่อชื่อฐานของ
ไฟล์ต้นฉบับการคอมไพล์ตรงกับชื่อฐานของไฟล์ที่กำหนดประเภท
เว้นแต่ struct เป็นเทมเพลตหรือกำหนดไว้ในส่วนหัวของระบบ
ตัวเลือกนี้ช่วยลดขนาดของข้อมูลการดีบักได้อย่างมาก ด้วยบางส่วน
การสูญเสียข้อมูลประเภทที่อาจเกิดขึ้นกับดีบักเกอร์ ดู -femit-struct-debug-baseonly
สำหรับตัวเลือกที่ก้าวร้าวมากขึ้น ดู -femit-struct-debug-รายละเอียด สำหรับรายละเอียดเพิ่มเติม
ควบคุม
ตัวเลือกนี้ใช้ได้กับ DWARF 2 เท่านั้น
-femit-struct-debug-รายละเอียด[=รายการข้อมูลจำเพาะ]
ระบุประเภทเหมือนโครงสร้างที่คอมไพเลอร์สร้างข้อมูลการดีบัก NS
เจตนาคือการลดข้อมูลการดีบัก struct ที่ซ้ำกันระหว่างไฟล์อ็อบเจ็กต์ที่แตกต่างกัน
ภายในโปรแกรมเดียวกัน
ตัวเลือกนี้เป็นเวอร์ชันโดยละเอียดของ -femit-struct-debug-reduced และ
-femit-struct-debug-baseonlyซึ่งตอบสนองความต้องการส่วนใหญ่
ข้อกำหนดมีไวยากรณ์[ผบ:|ดัชนี:][ออร์:|แนว:](ใด|SYS|ฐาน|ไม่มี)
คำแรกที่เป็นทางเลือก จำกัดข้อกำหนดเฉพาะโครงสร้างที่ใช้โดยตรง
(ผบ:) หรือใช้ทางอ้อม (ดัชนี:). ประเภทโครงสร้างจะใช้โดยตรงเมื่อเป็นประเภท
ของตัวแปร สมาชิก การใช้ทางอ้อมเกิดขึ้นผ่านตัวชี้ไปยังโครงสร้าง นั่นคือ,
เมื่อใช้โครงสร้างที่ไม่สมบูรณ์นั้นถูกต้อง การใช้งานจะเป็นทางอ้อม ตัวอย่างคือ โครงสร้าง
หนึ่ง โดยตรง; โครงสร้าง สอง * ทางอ้อม;.
คำที่สองที่เป็นทางเลือกจำกัดข้อกำหนดเฉพาะโครงสร้างธรรมดา (ออร์:) หรือ
โครงสร้างทั่วไป (แนว:). โครงสร้างทั่วไปค่อนข้างซับซ้อนในการอธิบาย สำหรับ C++
เหล่านี้เป็นความเชี่ยวชาญเฉพาะทางที่ไม่ชัดแจ้งของคลาสเทมเพลตหรือคลาสที่ไม่ใช่เทมเพลต
ภายในข้างต้น ภาษาโปรแกรมอื่น ๆ มีชื่อสามัญ แต่
-femit-struct-debug-รายละเอียด ยังไม่ได้ดำเนินการ
คำที่สามระบุไฟล์ต้นฉบับสำหรับโครงสร้างที่คอมไพเลอร์
ควรปล่อยข้อมูลการดีบัก ค่า ไม่มี และ ใด มีความหมายปกติ NS
ความคุ้มค่า ฐาน หมายความว่าฐานของชื่อไฟล์ที่ประกาศประเภท
ปรากฏจะต้องตรงกับฐานของชื่อไฟล์รวบรวมหลัก ในทางปฏิบัติ
นี่หมายความว่าเมื่อทำการคอมไพล์ ฟู.ซีข้อมูลการดีบักถูกสร้างขึ้นสำหรับประเภท
ประกาศในไฟล์นั้นและ ฟูแต่ไม่ใช่ไฟล์ส่วนหัวอื่นๆ มูลค่า SYS วิธี
ประเภทเหล่านั้นน่าพอใจ ฐาน หรือประกาศในระบบหรือส่วนหัวของคอมไพเลอร์
คุณอาจต้องทดลองเพื่อกำหนดการตั้งค่าที่ดีที่สุดสำหรับแอปพลิเคชันของคุณ
ค่าเริ่มต้นคือ -femit-struct-debug-detailed=all.
ตัวเลือกนี้ใช้ได้กับ DWARF 2 เท่านั้น
-fno-merge-debug-strings
สั่งให้ตัวเชื่อมโยงไม่รวมสตริงเข้าด้วยกันในข้อมูลการดีบักที่เป็น
เหมือนกันในไฟล์อ็อบเจ็กต์ต่างๆ แอสเซมเบลอร์ทั้งหมดไม่รองรับการรวมหรือ
ลิงเกอร์ การผสานจะลดขนาดของข้อมูลการดีบักในไฟล์เอาต์พุตที่
ค่าใช้จ่ายในการเพิ่มเวลาในการประมวลผลลิงก์ การผสานถูกเปิดใช้งานโดยค่าเริ่มต้น
-fdebug-คำนำหน้าแผนที่=เก่า=ใหม่
เมื่อรวบรวมไฟล์ในไดเร็กทอรี เก่า, บันทึกข้อมูลการดีบักที่อธิบายว่าเป็น
in ใหม่ แทน.
-fno-dwarf2-cfi-asm
ปล่อย DWARF 2 คลายข้อมูลในขณะที่คอมไพเลอร์สร้างส่วน ".eh_frame" แทนที่จะใช้
GAS ".cfi_*" คำสั่ง
-p สร้างโค้ดพิเศษเพื่อเขียนข้อมูลโปรไฟล์ที่เหมาะสมกับโปรแกรมวิเคราะห์
ศ. คุณต้องใช้ตัวเลือกนี้เมื่อรวบรวมไฟล์ต้นฉบับที่คุณต้องการข้อมูลเกี่ยวกับ
และคุณต้องใช้มันเมื่อทำการเชื่อมโยง
หน้า สร้างโค้ดพิเศษเพื่อเขียนข้อมูลโปรไฟล์ที่เหมาะสมกับโปรแกรมวิเคราะห์
จีโปร. คุณต้องใช้ตัวเลือกนี้เมื่อรวบรวมไฟล์ต้นฉบับที่คุณต้องการข้อมูลเกี่ยวกับ
และคุณต้องใช้มันเมื่อทำการเชื่อมโยง
-Q ทำให้คอมไพเลอร์พิมพ์ชื่อฟังก์ชันแต่ละชื่อในขณะที่คอมไพล์แล้วพิมพ์บางส่วน
สถิติการผ่านแต่ละครั้งเมื่อเสร็จสิ้น
-ftime-รายงาน
ทำให้คอมไพเลอร์พิมพ์สถิติบางอย่างเกี่ยวกับเวลาที่ใช้โดยแต่ละรอบเมื่อมัน
เสร็จสิ้น
-fmem-รายงาน
ทำให้คอมไพเลอร์พิมพ์สถิติบางอย่างเกี่ยวกับการจัดสรรหน่วยความจำถาวรเมื่อ
เสร็จสิ้น
-fmem-รายงาน-wpa
ทำให้คอมไพเลอร์พิมพ์สถิติบางอย่างเกี่ยวกับการจัดสรรหน่วยความจำถาวรสำหรับ WPA
เฟสเท่านั้น.
-fpre-ipa-mem-รายงาน
-fpost-ipa-mem-รายงาน
ทำให้คอมไพเลอร์พิมพ์สถิติบางอย่างเกี่ยวกับการจัดสรรหน่วยความจำถาวรก่อนหรือ
หลังจากการเพิ่มประสิทธิภาพระหว่างขั้นตอน
-fprofile-รายงาน
ทำให้คอมไพเลอร์พิมพ์สถิติบางอย่างเกี่ยวกับความสอดคล้องของโปรไฟล์ (โดยประมาณ)
และผลของการจ่ายบอลรายบุคคล
-fstack-การใช้งาน
ทำให้ข้อมูลการใช้งานคอมไพเลอร์เอาท์พุตสแต็คสำหรับโปรแกรม บนฟังก์ชันต่อหนึ่งฟังก์ชัน
พื้นฐาน ชื่อไฟล์สำหรับการถ่ายโอนข้อมูลถูกสร้างขึ้นโดยการต่อท้าย .su ไป โอกซ์เนม. โอกซ์เนม is
สร้างขึ้นจากชื่อของไฟล์เอาต์พุต หากระบุไว้อย่างชัดเจนและไม่ใช่ an
เรียกใช้งานได้ มิฉะนั้น จะเป็นชื่อฐานของไฟล์ต้นทาง รายการประกอบด้วย
สามฟิลด์:
· ชื่อของฟังก์ชัน
· จำนวนไบต์
· ตัวระบุตั้งแต่หนึ่งตัวขึ้นไป: "คงที่", "ไดนามิก", "จำกัดขอบเขต"
ตัวระบุ "คงที่" หมายความว่าฟังก์ชันจัดการสแต็กแบบสแตติก: a
จำนวนไบต์คงที่ถูกจัดสรรสำหรับเฟรมในการป้อนฟังก์ชันและปล่อยเมื่อ
ฟังก์ชั่นออก; ไม่มีการปรับสแต็กเป็นอย่างอื่นในฟังก์ชัน ที่สอง
ฟิลด์คือจำนวนไบต์คงที่นี้
ตัวระบุ "ไดนามิก" หมายความว่าฟังก์ชันจัดการสแต็กแบบไดนามิก: in
นอกเหนือจากการจัดสรรแบบคงที่ที่อธิบายข้างต้นแล้ว การปรับสแต็กจะทำใน
เนื้อหาของฟังก์ชัน เช่น การพุช/ป๊อปอาร์กิวเมนต์รอบการเรียกใช้ฟังก์ชัน ถ้า
ควอลิฟายเออร์ "ถูกจำกัด" ก็มีอยู่เช่นกัน จำนวนของการปรับเหล่านี้มีขอบเขตที่
เวลาคอมไพล์และฟิลด์ที่สองคือขอบเขตบนของจำนวนสแต็กที่ใช้ทั้งหมด
โดยฟังก์ชัน หากไม่มีอยู่ จำนวนเงินของการปรับปรุงเหล่านี้จะไม่ จำกัด
ในเวลารวบรวมและฟิลด์ที่สองแสดงถึงส่วนที่มีขอบเขตเท่านั้น
-fprofile-ส่วนโค้ง
เพิ่มรหัสเพื่อให้โปรแกรมไหล โค้ง เป็นเครื่องมือ ระหว่างดำเนินการโปรแกรม
บันทึกจำนวนครั้งที่แต่ละสาขาและการโทรถูกดำเนินการและจำนวนครั้งที่ดำเนินการ
หรือกลับมา เมื่อออกจากโปรแกรมที่คอมไพล์แล้ว จะบันทึกข้อมูลนี้ลงในไฟล์ชื่อ
auxname.gcda สำหรับแต่ละไฟล์ต้นฉบับ ข้อมูลอาจถูกนำไปใช้เพื่อกำหนดโปรไฟล์
การเพิ่มประสิทธิภาพ (-fbranch-ความน่าจะเป็น) หรือสำหรับการวิเคราะห์ความครอบคลุมการทดสอบ
(-ftest-ครอบคลุม). ไฟล์อ็อบเจ็กต์แต่ละไฟล์ โอกซ์เนม สร้างขึ้นจากชื่อของ
ไฟล์เอาต์พุต หากระบุไว้อย่างชัดเจนและไม่ใช่ไฟล์ปฏิบัติการขั้นสุดท้าย มิฉะนั้นจะเป็น
เป็นชื่อฐานของไฟล์ต้นทาง ในทั้งสองกรณีส่วนต่อท้ายจะถูกลบออก (เช่น
foo.gcda สำหรับไฟล์อินพุต ผู้อำนวยการ/fo.c,หรือ ไดร์/foo.gcda สำหรับไฟล์เอาต์พุตที่ระบุเป็น -o
ผู้อำนวยการ/fo.o).
--ความคุ้มครอง
ตัวเลือกนี้ใช้เพื่อคอมไพล์และเชื่อมโยงโค้ดเครื่องมือสำหรับการวิเคราะห์ความครอบคลุม NS
option เป็นคำพ้องความหมายสำหรับ -fprofile-ส่วนโค้ง -ftest-ครอบคลุม (เมื่อเรียบเรียง) และ -แอลจีคอฟ
(เมื่อทำการเชื่อมโยง) ดูเอกสารประกอบสำหรับตัวเลือกเหล่านั้นสำหรับรายละเอียดเพิ่มเติม
·รวบรวมไฟล์ต้นฉบับด้วย -fprofile-ส่วนโค้ง บวกกับการเพิ่มประสิทธิภาพและการสร้างโค้ด
ตัวเลือก. สำหรับการวิเคราะห์ความครอบคลุมการทดสอบ ใช้เพิ่มเติม -ftest-ครอบคลุม ตัวเลือก
คุณไม่จำเป็นต้องกำหนดโปรไฟล์ทุกไฟล์ต้นฉบับในโปรแกรม
·เชื่อมโยงไฟล์อ็อบเจ็กต์ของคุณกับ -แอลจีคอฟ or -fprofile-ส่วนโค้ง (หลังหมายถึง
อดีต).
· รันโปรแกรมบนเวิร์กโหลดตัวแทนเพื่อสร้างโปรไฟล์ส่วนโค้ง
ข้อมูล. นี้สามารถทำซ้ำได้หลายครั้ง คุณสามารถเรียกใช้พร้อมกันได้
อินสแตนซ์ของโปรแกรมของคุณ และหากระบบไฟล์รองรับการล็อก ไฟล์
ไฟล์ข้อมูลจะได้รับการอัปเดตอย่างถูกต้อง ตรวจพบการเรียก "แยก" และ
จัดการอย่างถูกต้อง (การนับซ้ำจะไม่เกิดขึ้น)
· สำหรับการเพิ่มประสิทธิภาพแบบกำหนดโปรไฟล์ ให้คอมไพล์ไฟล์ต้นฉบับอีกครั้งด้วยไฟล์เดียวกัน
ตัวเลือกการเพิ่มประสิทธิภาพและการสร้างโค้ด plus -fbranch-ความน่าจะเป็น.
· สำหรับการวิเคราะห์ความครอบคลุมการทดสอบ ให้ใช้ จีคอฟ เพื่อสร้างข้อมูลที่มนุษย์อ่านได้จาก
.gcno และ .gcda ไฟล์. อ้างถึง จีคอฟ เอกสารสำหรับเพิ่มเติม
ข้อมูล
ด้วยระบบเส้นทาง -fprofile-ส่วนโค้งสำหรับแต่ละฟังก์ชันของโปรแกรมของคุณ GCC จะสร้างการไหลของโปรแกรม
กราฟ แล้วหาแผนภูมิขยายสำหรับกราฟ เฉพาะส่วนโค้งที่ไม่อยู่บน
spanning tree ต้องมีเครื่องมือ: คอมไพเลอร์เพิ่มโค้ดเพื่อนับจำนวน
ครั้งที่ส่วนโค้งเหล่านี้ถูกดำเนินการ เมื่อส่วนโค้งเป็นทางออกเดียวหรือทางเข้าเท่านั้น
บล็อก สามารถเพิ่มรหัสเครื่องมือในบล็อก มิฉะนั้น พื้นฐานใหม่
ต้องสร้างบล็อกเพื่อเก็บรหัสเครื่องมือวัด
-ftest-ครอบคลุม
สร้างไฟล์บันทึกย่อที่ จีคอฟ ยูทิลิตี้การครอบคลุมรหัสสามารถใช้เพื่อแสดงโปรแกรม
ความคุ้มครอง ไฟล์บันทึกของไฟล์ต้นฉบับแต่ละไฟล์เรียกว่า auxname.gcno. อ้างถึง
-fprofile-ส่วนโค้ง ตัวเลือกด้านบนสำหรับคำอธิบายของ โอกซ์เนม และคำแนะนำวิธีการ
สร้างข้อมูลครอบคลุมการทดสอบ ข้อมูลความครอบคลุมตรงกับไฟล์ต้นฉบับอย่างใกล้ชิดมากขึ้นหาก
คุณไม่ได้เพิ่มประสิทธิภาพ
-fdbg-cnt-รายการ
พิมพ์ชื่อและขอบบนของตัวนับสำหรับตัวนับการดีบักทั้งหมด
-fdbg-cnt=รายการค่าเคาน์เตอร์
ตั้งค่าขอบเขตบนของตัวนับการดีบักภายใน รายการค่าเคาน์เตอร์ เป็นเครื่องหมายจุลภาคคั่น
รายการของ ชื่อ:ความคุ้มค่า คู่ที่ตั้งค่าขอบเขตบนของแต่ละเคาน์เตอร์ดีบัก ชื่อ ไปยัง
ความคุ้มค่า. ตัวนับการดีบักทั้งหมดมีขอบเขตบนเริ่มต้นของ "UNT_MAX"; ดังนั้น
"dbg_cnt()" คืนค่า true เสมอ เว้นแต่ตัวเลือกนี้กำหนดขอบเขตบน สำหรับ
ตัวอย่าง กับ -fdbg-cnt=dce:10,tail_call:0, "dbg_cnt(dce)" คืนค่า true เท่านั้นสำหรับ first
10 อัญเชิญ
-เฟเนเบิล-ชนิด-ส่ง
-ปิดการใช้งานได้-ชนิด-ส่ง=ช่วงรายการ
นี่คือชุดของตัวเลือกที่ใช้เพื่อปิดการใช้งาน/เปิดใช้งานการปรับให้เหมาะสมอย่างชัดแจ้ง
ผ่าน ตัวเลือกเหล่านี้มีไว้สำหรับใช้สำหรับการดีบัก GCC ผู้ใช้คอมไพเลอร์ควร
ใช้ตัวเลือกปกติในการเปิด/ปิดใช้งานบัตรผ่านแทน
-fdisable-ipa-ส่ง
ปิดการใช้งาน IPA pass ส่ง. ส่ง คือชื่อรหัสผ่าน หากบัตรผ่านเดียวกันเป็นแบบคงที่
เรียกใช้ในคอมไพเลอร์หลายครั้ง ชื่อรหัสผ่านควรต่อท้ายด้วย a
ลำดับที่เริ่มจาก 1
-fdisable-rtl-ส่ง
-fdisable-rtl-ส่ง=ช่วงรายการ
ปิดการใช้งาน RTL pass ส่ง. ส่ง คือชื่อรหัสผ่าน หากบัตรผ่านเดียวกันเป็นแบบคงที่
เรียกใช้ในคอมไพเลอร์หลายครั้ง ชื่อรหัสผ่านควรต่อท้ายด้วย a
ลำดับที่เริ่มจาก 1 ช่วงรายการ เป็นรายการที่คั่นด้วยเครื่องหมายจุลภาคของ
ช่วงฟังก์ชันหรือชื่อแอสเซมเบลอร์ แต่ละช่วงเป็นคู่ตัวเลขคั่นด้วย a
ลำไส้ใหญ่ ช่วงนี้จะรวมอยู่ในปลายทั้งสอง หากช่วงนั้นไม่สำคัญ ตัวเลข
คู่สามารถลดความซับซ้อนเป็นตัวเลขเดียว หากโหนดกราฟการเรียกของฟังก์ชัน
UID อยู่ในช่วงที่กำหนด ส่ง ถูกปิดการใช้งานสำหรับสิ่งนั้น
ฟังก์ชัน UID แสดงในส่วนหัวของฟังก์ชันของไฟล์ดัมพ์ และ pass
สามารถทิ้งชื่อได้โดยใช้ตัวเลือก -fdump-ผ่าน.
-fdisable-ต้นไม้-ส่ง
-fdisable-ต้นไม้-ส่ง=ช่วงรายการ
ปิดการใช้งานการผ่านต้นไม้ ส่ง. ดู -fdisable-rtl สำหรับคำอธิบายของ option
ข้อโต้แย้ง
-เฟนาเบิลไอปา-ส่ง
เปิดใช้งาน IPA pass ส่ง. ส่ง คือชื่อรหัสผ่าน หากบัตรผ่านเดียวกันเป็นแบบคงที่
เรียกใช้ในคอมไพเลอร์หลายครั้ง ชื่อรหัสผ่านควรต่อท้ายด้วย a
ลำดับที่เริ่มจาก 1
-fenable-rtl-ส่ง
-fenable-rtl-ส่ง=ช่วงรายการ
เปิดใช้งาน RTL pass ส่ง. ดู -fdisable-rtl สำหรับคำอธิบายตัวเลือกอาร์กิวเมนต์และ
ตัวอย่าง.
--fenable-ต้นไม้-ส่ง
--fenable-ต้นไม้-ส่ง=ช่วงรายการ
เปิดใช้งานการผ่านต้นไม้ ส่ง. ดู -fdisable-rtl สำหรับคำอธิบายของอาร์กิวเมนต์ตัวเลือก
ต่อไปนี้คือตัวอย่างบางส่วนที่แสดงการใช้ตัวเลือกเหล่านี้
# ปิดการใช้งาน ccp1 สำหรับทุกฟังก์ชั่น
-fdisable-tree-ccp1
# ปิดการใช้งาน unroll ทั้งหมดสำหรับฟังก์ชั่นที่มี cgraph node uid คือ1
-fenable-tree-cunroll=1
# ปิดการใช้งาน gcse2 สำหรับฟังก์ชันที่ช่วงต่อไปนี้ [1,1]
# [300,400] และ [400,1000]
# ปิดการใช้งาน gcse2 สำหรับฟังก์ชั่น foo และ foo2
-fdisable-rtl-gcse2=foo,foo2
# ปิดการใช้งาน inlining ในช่วงต้น
-fdisable-ต้นไม้-einline
# ปิดการใช้งาน ipa inlining
-fdisable-ipa-แบบอินไลน์
# เปิดใช้งานการคลี่ต้นไม้เต็ม
-fenable-tree-คลี่
-dตัวอักษร
-fdump-rtl-ส่ง
-fdump-rtl-ส่ง=ชื่อไฟล์
บอกให้ทำการดีบักดัมพ์ในระหว่างการคอมไพล์ตามเวลาที่กำหนดโดย ตัวอักษร. นี้
ใช้สำหรับการดีบักการส่งผ่าน RTL ของคอมไพเลอร์ ชื่อไฟล์สำหรับส่วนใหญ่
ของการถ่ายโอนข้อมูลจะทำโดยการต่อท้ายหมายเลขรหัสผ่านและคำต่อ ชื่อดัมและ
ไฟล์ถูกสร้างขึ้นในไดเร็กทอรีของไฟล์เอาต์พุต ในกรณีที่ =ชื่อไฟล์ ตัวเลือก
ดัมพ์จะถูกส่งออกในไฟล์ที่กำหนด แทนที่จะเป็นไฟล์ดัมพ์ที่มีหมายเลขผ่าน บันทึก
ว่าหมายเลขผ่านจะถูกคำนวณแบบคงที่เมื่อผ่านได้รับการลงทะเบียนเข้าในบัตร
ผู้จัดการ. ดังนั้นการนับไม่เกี่ยวข้องกับลำดับการดำเนินการของ
ผ่าน โดยเฉพาะอย่างยิ่ง รหัสผ่านที่ติดตั้งโดยปลั๊กอินอาจมีตัวเลขมากกว่า 200 เลขคู่
ถ้ามันดำเนินการค่อนข้างเร็ว ชื่อดัม ถูกสร้างขึ้นจากชื่อของไฟล์ที่ส่งออก
หากระบุไว้อย่างชัดเจนและไม่สามารถเรียกใช้งานได้ มิฉะนั้น จะเป็นชื่อฐานของ
ไฟล์ต้นฉบับ สวิตช์เหล่านี้อาจมีเอฟเฟกต์ต่างกันเมื่อ -E ใช้สำหรับ
การประมวลผลล่วงหน้า
ดีบักดัมพ์สามารถเปิดใช้งานได้ด้วย a -fdump-rtl เปลี่ยนหรือบางส่วน -d ตัวเลือก ตัวอักษร. ที่นี่
เป็นตัวอักษรที่เป็นไปได้สำหรับใช้ใน ส่ง และ ตัวอักษรและความหมาย:
-fdump-rtl-การจัดตำแหน่ง
ดัมพ์หลังจากคำนวณการจัดตำแหน่งสาขาแล้ว
-fdump-rtl-asmcons
ดัมพ์หลังจากแก้ไขคำสั่ง rtl ที่มีข้อจำกัดการเข้า/ออกที่ไม่พอใจ
-fdump-rtl-auto_inc_dec
ดัมพ์หลังจากค้นพบ auto-inc-dec บัตรผ่านนี้ใช้เฉพาะบนสถาปัตยกรรมที่
มี auto inc หรือ auto dec คำแนะนำ
-fdump-rtl-อุปสรรค
ทิ้งหลังจากทำความสะอาดคำแนะนำสิ่งกีดขวาง
-fdump-rtl-bbpart
ดัมพ์หลังจากแบ่งบล็อกพื้นฐานแบบร้อนและเย็น
-fdump-rtl-bbro
ดัมพ์หลังจากบล็อกการเรียงลำดับใหม่
-fdump-rtl-btl1
-fdump-rtl-btl2
-fdump-rtl-btl1 และ -fdump-rtl-btl2 เปิดใช้งานการดัมพ์หลังจากเป้าหมายสองสาขา
โหลดการเพิ่มประสิทธิภาพผ่าน
-fdump-rtl-บายพาส
ดัมพ์หลังจากการข้ามข้ามและควบคุมการเพิ่มประสิทธิภาพโฟลว์
-fdump-rtl-รวม
ดัมพ์หลังจากชุดคำสั่ง 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 เปิดใช้งานการทุ่มตลาดหลังจากทั้งสองทั่วไป
ผ่านการกำจัดนิพจน์ย่อย
-fdump-rtl-dce
ดัมพ์หลังจากการกำจัดโค้ดที่ไม่ทำงานแบบสแตนด์อโลนผ่าน
-FDUMP-RTL-DBR
ดัมพ์หลังจากการจัดกำหนดการสาขาล่าช้า
-FDUMP-RTL-DCE1
-FDUMP-RTL-DCE2
-FDUMP-RTL-DCE1 และ -FDUMP-RTL-DCE2 เปิดใช้งานการทุ่มตลาดหลังจากสองร้านตาย
การกำจัดผ่าน
-fdump-rtl-เอ๊ะ
ดัมพ์หลังจากการสรุปรหัสการจัดการ EH
-fdump-rtl-eh_ranges
การถ่ายโอนข้อมูลหลังจากแปลงพื้นที่ช่วงการจัดการ EH
-fdump-rtl-ขยาย
ดัมพ์หลังจากสร้าง RTL
-fdump-rtl-fwprop1
-fdump-rtl-fwprop2
-fdump-rtl-fwprop1 และ -fdump-rtl-fwprop2 เปิดใช้งานการทุ่มตลาดหลังจากทั้งสองไปข้างหน้า
การขยายพันธุ์ผ่านไป
-fdump-rtl-gcse1
-fdump-rtl-gcse2
-fdump-rtl-gcse1 และ -fdump-rtl-gcse2 เปิดใช้งานการทุ่มตลาดหลังจากส่วนกลางทั่วไป
การกำจัดนิพจน์ย่อย
-fdump-rtl-init-regs
ดัมพ์หลังจากการเริ่มต้นของการลงทะเบียน
-fdump-rtl-initvals
ดัมพ์หลังจากการคำนวณชุดค่าเริ่มต้น
-fdump-rtl-into_cfglayout
ดัมพ์หลังจากแปลงเป็นโหมด cfglayout
-fdump-rtl-ira
ดัมพ์หลังจากการจัดสรรรีจิสเตอร์ซ้ำแล้วซ้ำอีก
-fdump-rtl-กระโดด
ดัมพ์หลังจากการเพิ่มประสิทธิภาพการกระโดดครั้งที่สอง
-fdump-rtl-loop2
-fdump-rtl-loop2 เปิดใช้งานการดัมพ์หลังจากการเพิ่มประสิทธิภาพลูป rtl ผ่านไป
-fdump-rtl-จักร
ดัมพ์หลังจากดำเนินการผ่านการจัดโครงสร้างใหม่ขึ้นอยู่กับเครื่อง ถ้าผ่าน
ที่มีอยู่
-fdump-rtl-mode_sw
ดัมพ์หลังจากลบสวิตช์โหมดซ้ำซ้อน
-fdump-rtl-rnreg
ดัมพ์หลังจากลงทะเบียนหมายเลขใหม่
-fdump-rtl-outof_cfglayout
ดัมพ์หลังจากแปลงจากโหมด cfglayout
-fdump-rtl-ช่องมอง2
ทิ้งหลังจากช่องมองผ่าน
-fdump-rtl-postreload
ดัมพ์หลังจากการเพิ่มประสิทธิภาพหลังโหลดซ้ำ
-fdump-rtl-pro_and_epilogue
ถ่ายโอนข้อมูลหลังจากสร้างบทนำและบทส่งท้ายของฟังก์ชัน
-fdump-rtl-regmove
การถ่ายโอนข้อมูลหลังจากการลงทะเบียนย้ายผ่าน
-fdump-rtl-sched1
-fdump-rtl-sched2
-fdump-rtl-sched1 และ -fdump-rtl-sched2 เปิดใช้งานการดัมพ์หลังจากบล็อกพื้นฐาน
กำหนดการผ่าน
-fdump-rtl-ดู
การถ่ายโอนข้อมูลหลังจากการยกเลิกการขยายสัญญาณ
-fdump-rtl-seqabstr
ดัมพ์หลังจากการค้นพบลำดับทั่วไป
-fdump-rtl-ย่อ
ทิ้งหลังจากตัดกิ่งให้สั้นลง
-fdump-rtl-พี่น้อง
ดัมพ์หลังจากการเพิ่มประสิทธิภาพการเรียกพี่น้อง
-fdump-rtl-แยก1
-fdump-rtl-แยก2
-fdump-rtl-แยก3
-fdump-rtl-แยก4
-fdump-rtl-แยก5
-fdump-rtl-แยก1, -fdump-rtl-แยก2, -fdump-rtl-แยก3, -fdump-rtl-แยก4 และ
-fdump-rtl-แยก5 เปิดใช้งานการดัมพ์หลังจากแบ่งคำสั่งห้ารอบ
-fdump-rtl-sms
ดัมพ์หลังจากการตั้งเวลาโมดูโล บัตรผ่านนี้ใช้ได้เฉพาะกับสถาปัตยกรรมบางประเภทเท่านั้น
-fdump-rtl-กอง
ดัมพ์หลังจากแปลงจาก "ไฟล์ลงทะเบียนแบบแบน" ของ GCC ลงทะเบียนเป็น x87's
รีจิสเตอร์เหมือนสแต็ก บัตรผ่านนี้ใช้ได้กับรุ่น x86 เท่านั้น
-fdump-rtl-subreg1
-fdump-rtl-subreg2
-fdump-rtl-subreg1 และ -fdump-rtl-subreg2 เปิดใช้งานการดัมพ์หลังจากสอง subreg
การขยายตัวผ่าน
-fdump-rtl-ยกเลิกการแบ่งปัน
ดัมพ์หลังจากยกเลิกการแชร์ rtl ทั้งหมดแล้ว
-fdump-rtl-vartrack
ดัมพ์หลังจากการติดตามตัวแปร
-fdump-rtl-vregs
ดัมพ์หลังจากแปลงการลงทะเบียนเสมือนเป็นฮาร์ดรีจิสเตอร์
-fdump-rtl-เว็บ
ดัมพ์หลังจากแยกช่วงสด
-fdump-rtl-regclass
-fdump-rtl-subregs_of_mode_init
-fdump-rtl-subregs_of_mode_finish
-fdump-rtl-dfinit
-fdump-rtl-dfinish
ดัมพ์เหล่านี้ถูกกำหนดแต่จะสร้างไฟล์เปล่าเสมอ
-in
-fdump-rtl-ทั้งหมด
สร้างการถ่ายโอนข้อมูลทั้งหมดที่ระบุไว้ข้างต้น
-ดีเอ ใส่คำอธิบายประกอบเอาต์พุตของแอสเซมเบลอร์ด้วยข้อมูลการดีบักเบ็ดเตล็ด
-วว ดัมพ์คำจำกัดความของมาโครทั้งหมด ที่ส่วนท้ายของการประมวลผลล่วงหน้า นอกเหนือจากปกติ
เอาท์พุต
-ดีเอช สร้างคอร์ดัมพ์เมื่อใดก็ตามที่เกิดข้อผิดพลาด
-dp ใส่คำอธิบายประกอบเอาต์พุตของแอสเซมเบลอร์ด้วยความคิดเห็นที่ระบุรูปแบบและ
ใช้ทางเลือกอื่น พิมพ์ความยาวของแต่ละคำสั่งด้วย
-ดีพี ดัมพ์ RTL ในเอาต์พุตแอสเซมเบลอร์เป็นความคิดเห็นก่อนแต่ละคำสั่ง อีกด้วย
เปิด -dp คำอธิบายประกอบ
-dx เพียงสร้าง RTL สำหรับฟังก์ชันแทนการคอมไพล์ มักใช้กับ
-fdump-rtl-ขยาย.
-fdump-noaddr
เมื่อทำการดีบักดัมพ์ ให้ระงับเอาต์พุตที่อยู่ สิ่งนี้ทำให้เป็นไปได้มากขึ้นที่จะ
ใช้ diff ในการดีบักดัมพ์สำหรับการเรียกใช้คอมไพเลอร์ด้วยไบนารีคอมไพเลอร์ที่แตกต่างกัน
และ/หรือตำแหน่งเริ่มต้นข้อความ / bss / data / heap / stack / dso ที่แตกต่างกัน
-fdump-ไม่มีหมายเลข
เมื่อทำการดีบักดัมพ์ ให้ระงับหมายเลขคำสั่งและเอาต์พุตที่อยู่ นี้
ทำให้เป็นไปได้มากขึ้นที่จะใช้ diff ในการดีบักดัมพ์สำหรับการเรียกใช้คอมไพเลอร์ด้วย
ตัวเลือกต่างๆ โดยเฉพาะอย่างยิ่งมีและไม่มี -g.
-fdump-unnumbered-ลิงค์
เมื่อทำการดีบักดัมพ์ (ดู -d ตัวเลือกด้านบน) ระงับหมายเลขคำสั่งสำหรับ
เชื่อมโยงไปยังคำสั่งก่อนหน้าและถัดไปตามลำดับ
-fdump-translation-หน่วย (C++ เท่านั้น)
-fdump-การแปล-หน่วย-ตัวเลือก (C++ เท่านั้น)
ดัมพ์การแสดงโครงสร้างแบบทรีสำหรับหน่วยการแปลทั้งหมดไปยังไฟล์
ชื่อไฟล์ทำโดยการต่อท้าย .tu ไปที่ชื่อไฟล์ต้นทาง และไฟล์ is
สร้างขึ้นในไดเร็กทอรีเดียวกันกับไฟล์เอาต์พุต ถ้า -ตัวเลือก ใช้แบบฟอร์ม,
ตัวเลือก ควบคุมรายละเอียดของดัมพ์ตามที่อธิบายไว้สำหรับ -fdump-ต้นไม้ ตัวเลือก
-fdump-คลาส-ลำดับชั้น (C++ เท่านั้น)
-fdump-คลาส-ลำดับชั้น-ตัวเลือก (C++ เท่านั้น)
ดัมพ์การแสดงลำดับชั้นของแต่ละคลาสและเค้าโครงตารางฟังก์ชันเสมือนไปที่a
ไฟล์. ชื่อไฟล์ทำโดยการต่อท้าย .ระดับ ไปยังชื่อไฟล์ต้นทางและไฟล์
ถูกสร้างขึ้นในไดเร็กทอรีเดียวกันกับไฟล์เอาต์พุต ถ้า -ตัวเลือก ใช้แบบฟอร์ม,
ตัวเลือก ควบคุมรายละเอียดของดัมพ์ตามที่อธิบายไว้สำหรับ -fdump-ต้นไม้ ตัวเลือก
-fdump-ไอปา-สลับ
ควบคุมการทุ่มตลาดในขั้นตอนต่างๆ ของแผนผังภาษาการวิเคราะห์ระหว่างขั้นตอนเป็น
ไฟล์. ชื่อไฟล์ถูกสร้างขึ้นโดยการผนวกส่วนต่อท้ายเฉพาะของสวิตช์ต่อท้ายแหล่งที่มา
ชื่อไฟล์ และไฟล์ถูกสร้างขึ้นในไดเร็กทอรีเดียวกันกับไฟล์เอาต์พุต NS
การถ่ายโอนข้อมูลต่อไปนี้เป็นไปได้:
ทั้งหมด เปิดใช้งานการถ่ายโอนข้อมูลการวิเคราะห์ระหว่างขั้นตอนทั้งหมด
ซีกราฟ
ดัมพ์ข้อมูลเกี่ยวกับการเพิ่มประสิทธิภาพกราฟการเรียก การลบฟังก์ชันที่ไม่ได้ใช้ และ
การตัดสินใจแบบอินไลน์
แบบอินไลน์
ดัมพ์หลังจากฟังก์ชัน inlining
-fdump-ผ่าน
ดัมพ์รายการของการเพิ่มประสิทธิภาพที่เปิดและปิดโดยปัจจุบัน
ตัวเลือกบรรทัดคำสั่ง
-fdump-สถิติ-ตัวเลือก
เปิดใช้งานและควบคุมการถ่ายโอนข้อมูลสถิติการส่งผ่านในไฟล์แยกต่างหาก ชื่อไฟล์คือ
สร้างโดยการต่อท้ายคำต่อท้ายที่ลงท้ายด้วย .สถิติ ไปยังชื่อไฟล์ต้นทางและ
ไฟล์ถูกสร้างขึ้นในไดเร็กทอรีเดียวกันกับไฟล์เอาต์พุต ถ้า -ตัวเลือก แบบฟอร์มคือ
ใช้ -สถิติ ทำให้การนับรวมในหน่วยการคอมไพล์ทั้งหมดในขณะที่
- รายละเอียด ทิ้งทุกเหตุการณ์เมื่อบัตรผ่านสร้างขึ้น ค่าเริ่มต้นที่ไม่มีตัวเลือกคือ
เพื่อรวมตัวนับสำหรับแต่ละฟังก์ชันที่คอมไพล์
-fdump-ต้นไม้-สลับ
-fdump-ต้นไม้-สลับ-ตัวเลือก
-fdump-ต้นไม้-สลับ-ตัวเลือก=ชื่อไฟล์
ควบคุมการดัมพ์ในขั้นตอนต่างๆ ของการประมวลผลแผนผังภาษาระดับกลางถึง
ไฟล์. ชื่อไฟล์ถูกสร้างขึ้นโดยการต่อท้ายส่วนต่อท้ายเฉพาะสวิตช์เข้ากับ
ชื่อไฟล์ต้นทาง และไฟล์ถูกสร้างขึ้นในไดเร็กทอรีเดียวกันกับไฟล์เอาต์พุต ใน
กรณีของ =ชื่อไฟล์ ตัวเลือกการถ่ายโอนข้อมูลจะถูกส่งออกในไฟล์ที่กำหนดแทนที่จะเป็น auto
ชื่อไฟล์ดัมพ์ ถ้า -ตัวเลือก ใช้แบบฟอร์ม, ตัวเลือก เป็นรายการของ - แยกออกจากกัน
ตัวเลือกที่ควบคุมรายละเอียดของการถ่ายโอนข้อมูล ไม่ใช่ทุกตัวเลือกที่ใช้ได้ทั้งหมด
ทิ้ง; สิ่งที่ไม่มีความหมายจะถูกละเลย มีตัวเลือกดังต่อไปนี้
ที่อยู่
พิมพ์ที่อยู่ของแต่ละโหนด มักจะไม่มีความหมายเมื่อมันเปลี่ยนไป
ตามสภาพแวดล้อมและไฟล์ต้นฉบับ ใช้งานหลักสำหรับผูกขึ้น a
ไฟล์ดัมพ์ที่มีสภาพแวดล้อมการดีบัก
ชื่อ
หากตั้งค่า "DECL_ASSEMBLER_NAME" ไว้สำหรับ Decl ที่กำหนด ให้ใช้สิ่งนั้นใน dump
แทนที่จะเป็น "DECL_NAME" การใช้งานหลักคือใช้งานง่ายทำงานย้อนกลับจาก
ชื่อที่สับสนในไฟล์แอสเซมบลี
บาง
เมื่อทิ้งตัวแทนระดับกลางส่วนหน้า ยับยั้งการทุ่มตลาดของสมาชิกของ
ขอบเขตหรือเนื้อหาของฟังก์ชันเพียงเพราะถึงขอบเขตนั้นแล้ว เท่านั้น
ดัมพ์รายการดังกล่าวเมื่อสามารถเข้าถึงได้โดยตรงจากเส้นทางอื่น
เมื่อทิ้งต้นไม้ลายสวย ตัวเลือกนี้จะยับยั้งการทิ้งร่างของ
โครงสร้างการควบคุม
เมื่อทิ้ง RTL ให้พิมพ์ RTL ในรูปแบบบาง (ย่อ) แทนค่าเริ่มต้น
การแสดงเหมือน LISP
ดิบ พิมพ์เป็นตัวแทนดิบของต้นไม้ ตามค่าเริ่มต้น ต้นไม้จะถูกพิมพ์อย่างสวยงามลงใน
การแสดงเหมือน C
รายละเอียด
เปิดใช้งานการถ่ายโอนข้อมูลที่มีรายละเอียดมากขึ้น (ไม่รองรับทุกตัวเลือกการถ่ายโอนข้อมูล) รวมถึง
ข้อมูลจากการเพิ่มประสิทธิภาพผ่าน
สถิติ
เปิดใช้งานการดัมพ์สถิติต่างๆ เกี่ยวกับการส่งผ่าน (ไม่ได้รับการตอบรับจากทุกการถ่ายโอนข้อมูล
ตัวเลือก)
บล็อก
เปิดใช้งานการแสดงขอบเขตบล็อกพื้นฐาน (ปิดใช้งานในการถ่ายโอนข้อมูลดิบ)
กราฟ
สำหรับแต่ละไฟล์ดัมพ์ที่ระบุ (-fdump-rtl-ส่ง) ทิ้ง
การแสดงกราฟควบคุมที่เหมาะสมสำหรับการดูด้วย GraphViz ถึง
ไฟล์.passid.pass.dot. แต่ละฟังก์ชั่นในไฟล์นั้นถูกพิมพ์ออกมาอย่างสวยงามเป็นกราฟย่อย
เพื่อให้ GraphViz สามารถแสดงผลทั้งหมดในพล็อตเดียว
ตัวเลือกนี้ใช้ได้เฉพาะกับการดัมพ์ RTL เท่านั้น และ RTL จะถูกดัมพ์ใน . เสมอ
รูปทรงเพรียวบาง
โว้ป
เปิดใช้งานการแสดงตัวถูกดำเนินการเสมือนสำหรับทุกคำสั่ง
ผ้าลินิน
เปิดใช้งานการแสดงหมายเลขบรรทัดสำหรับใบแจ้งยอด
UID เปิดใช้งานการแสดง ID เฉพาะ ("DECL_UID") สำหรับแต่ละตัวแปร
ละเอียด
เปิดใช้งานการแสดงการถ่ายโอนข้อมูลต้นไม้สำหรับแต่ละคำสั่ง
eh เปิดใช้งานการแสดงหมายเลขภูมิภาค EH ที่ถือแต่ละคำสั่ง
สเซฟ
เปิดใช้งานการแสดงรายละเอียดการวิเคราะห์วิวัฒนาการสเกลาร์
การปรับให้เหมาะสม
เปิดใช้งานการแสดงข้อมูลการเพิ่มประสิทธิภาพ (ใช้ได้เฉพาะในบางรอบ)
พลาด
เปิดใช้งานการแสดงข้อมูลการเพิ่มประสิทธิภาพที่ไม่ได้รับ (มีเฉพาะในบางรอบเท่านั้น)
บันทึก
เปิดใช้งานข้อมูลการเพิ่มประสิทธิภาพโดยละเอียดอื่นๆ (มีเฉพาะในบางรอบเท่านั้น)
=ชื่อไฟล์
แทนที่จะเป็นไฟล์ดัมพ์ชื่ออัตโนมัติ ให้ส่งออกไปยังชื่อไฟล์ที่กำหนด ไฟล์
ชื่อ แย่ และ สตเดอร์ ได้รับการปฏิบัติเป็นพิเศษและถือว่าเปิดแล้ว
สตรีมมาตรฐาน ตัวอย่างเช่น,
gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump
-fdump-tree-pre=stderr file.c
เอาต์พุต vectorizer ถ่ายโอนข้อมูลลงใน ฟู.ดัมพ์ในขณะที่การถ่ายโอนข้อมูล PRE ถูกส่งออกไปยัง สตเดอร์.
หากมีการระบุชื่อไฟล์ดัมพ์ที่ขัดแย้งกันสองชื่อสำหรับรหัสผ่านเดียวกัน ดังนั้นไฟล์หลัง
ตัวเลือกแทนที่ก่อนหน้านี้
ทั้งหมด เปิดตัวเลือกทั้งหมด ยกเว้น ดิบ, บาง, ละเอียด และ ผ้าลินิน.
ออปตอล
เปิดตัวเลือกการเพิ่มประสิทธิภาพทั้งหมด กล่าวคือ การปรับให้เหมาะสม, พลาดและ หมายเหตุ.
การทิ้งต้นไม้ต่อไปนี้เป็นไปได้:
เป็นต้นฉบับ
ดัมพ์ก่อนการเพิ่มประสิทธิภาพตามต้นไม้ใดๆ ถึง ไฟล์.ต้นฉบับ.
การปรับให้เหมาะสม
ทิ้งหลังจากการเพิ่มประสิทธิภาพตามต้นไม้ทั้งหมดไปยัง ไฟล์.เพิ่มประสิทธิภาพ.
กิมเพิล
ดัมพ์แต่ละฟังก์ชันก่อนและหลัง gimplification ส่งผ่านไปยังไฟล์ ไฟล์
ชื่อทำโดยการต่อท้าย .ยิ้ม ไปที่ชื่อไฟล์ต้นทาง
CFG ดัมพ์กราฟโฟลว์การควบคุมของแต่ละฟังก์ชันไปยังไฟล์ ชื่อไฟล์สร้างโดย
ท้าย .cfg ไปที่ชื่อไฟล์ต้นทาง
ch ดัมพ์แต่ละฟังก์ชันหลังจากคัดลอกส่วนหัวของลูป ชื่อไฟล์ทำโดยการต่อท้าย
.ch ไปที่ชื่อไฟล์ต้นทาง
SSA ดัมพ์ข้อมูลที่เกี่ยวข้องกับ SSA ไปยังไฟล์ ชื่อไฟล์ทำโดยการต่อท้าย .ssa
ไปที่ชื่อไฟล์ต้นทาง
นามแฝง
ดัมพ์ข้อมูลนามแฝงสำหรับแต่ละฟังก์ชัน ชื่อไฟล์ทำโดยการต่อท้าย
.นามแฝง ไปที่ชื่อไฟล์ต้นทาง
ซีซีพี ดัมพ์แต่ละฟังก์ชันหลังจาก CCP ชื่อไฟล์ทำโดยการต่อท้าย .ซีซีพี ไป
ชื่อไฟล์ต้นทาง
ร้านค้าccp
ดัมพ์แต่ละฟังก์ชันหลังจาก STORE-CCP ชื่อไฟล์ทำโดยการต่อท้าย .storeccp
ไปที่ชื่อไฟล์ต้นทาง
ก่อน ทิ้งต้นไม้หลังจากกำจัดความซ้ำซ้อนบางส่วน ชื่อไฟล์สร้างโดย
ท้าย .ก่อน ไปที่ชื่อไฟล์ต้นทาง
FRE ทิ้งต้นไม้หลังจากกำจัดความซ้ำซ้อนทั้งหมด ชื่อไฟล์ทำโดยการต่อท้าย
.ฟรี ไปที่ชื่อไฟล์ต้นทาง
คัดลอก
ทิ้งต้นไม้หลังจากการคัดลอกการขยายพันธุ์ ชื่อไฟล์ทำโดยการต่อท้าย .CopyProp
ไปที่ชื่อไฟล์ต้นทาง
store_copyprop
ทิ้งต้นไม้หลังจากเก็บสำเนาขยายพันธุ์ ชื่อไฟล์ทำโดยการต่อท้าย
.store_copyprop ไปที่ชื่อไฟล์ต้นทาง
ดีซี ดัมพ์แต่ละฟังก์ชันหลังจากกำจัดโค้ดที่ไม่ทำงาน ชื่อไฟล์สร้างโดย
ท้าย .dce ไปที่ชื่อไฟล์ต้นทาง
บังโคลน
ดัมพ์แต่ละฟังก์ชันหลังจากเพิ่มเครื่องมือวัดแผ่นบังโคลน ชื่อไฟล์สร้างโดย
ท้าย .โคลน ไปที่ชื่อไฟล์ต้นทาง
นาย / นางสาว ดัมพ์แต่ละฟังก์ชันหลังจากทำการแทนที่มวลรวมด้วยสเกลาร์ ไฟล์
ชื่อทำโดยการต่อท้าย .สรา ไปที่ชื่อไฟล์ต้นทาง
จม
ดัมพ์แต่ละฟังก์ชันหลังจากดำเนินการโค้ดที่จม ชื่อไฟล์สร้างโดย
ท้าย .จม ไปที่ชื่อไฟล์ต้นทาง
ดวงอาทิตย์ ดัมพ์แต่ละฟังก์ชันหลังจากใช้การเพิ่มประสิทธิภาพทรี dominator ชื่อไฟล์คือ
ทำโดยการต่อท้าย .ดอม ไปที่ชื่อไฟล์ต้นทาง
DSE ดัมพ์แต่ละฟังก์ชันหลังจากใช้การกำจัด dead store ชื่อไฟล์ถูกสร้างขึ้น
โดยต่อท้าย .dse ไปที่ชื่อไฟล์ต้นทาง
ฟิออปต์
ดัมพ์แต่ละฟังก์ชันหลังจากเพิ่มประสิทธิภาพโหนด PHI เป็นโค้ดเส้นตรง ไฟล์
ชื่อทำโดยการต่อท้าย .phiopt ไปที่ชื่อไฟล์ต้นทาง
เสาหน้า
ดัมพ์แต่ละฟังก์ชันหลังจากส่งต่อตัวแปรแบบใช้ครั้งเดียว ชื่อไฟล์
ทำโดยการต่อท้าย .forwprop ไปที่ชื่อไฟล์ต้นทาง
สำเนาชื่อ
ดัมพ์แต่ละฟังก์ชันหลังจากใช้การคัดลอกการเพิ่มประสิทธิภาพการเปลี่ยนชื่อ ชื่อไฟล์คือ
ทำโดยการต่อท้าย .copyrename ไปที่ชื่อไฟล์ต้นทาง
หมายเลขทะเบียน ดัมพ์แต่ละฟังก์ชันหลังจากใช้การเพิ่มประสิทธิภาพค่าส่งคืนที่มีชื่อกับ generic
ต้นไม้ ชื่อไฟล์ทำโดยการต่อท้าย .nrv ไปที่ชื่อไฟล์ต้นทาง
เวกเตอร์
ดัมพ์แต่ละฟังก์ชันหลังจากใช้ vectorization ของการวนซ้ำ ชื่อไฟล์ถูกสร้างขึ้น
โดยต่อท้าย .เวกเตอร์ ไปที่ชื่อไฟล์ต้นทาง
ลื่น ดัมพ์แต่ละฟังก์ชันหลังจากใช้ vectorization ของบล็อกพื้นฐาน ชื่อไฟล์คือ
ทำโดยการต่อท้าย .slp ไปที่ชื่อไฟล์ต้นทาง
vp ดัมพ์แต่ละฟังก์ชันหลังจาก Value Range Propagation (VRP) ชื่อไฟล์สร้างโดย
ท้าย .วีอาร์พี ไปที่ชื่อไฟล์ต้นทาง
ทั้งหมด เปิดใช้งานทรีดัมพ์ที่มีอยู่ทั้งหมดด้วยแฟล็กที่ให้มาในตัวเลือกนี้
-fopt-ข้อมูล
-fopt-ข้อมูล-ตัวเลือก
-fopt-ข้อมูล-ตัวเลือก=ชื่อไฟล์
ควบคุมดัมพ์การปรับให้เหมาะสมจากการผ่านการปรับให้เหมาะสมต่างๆ ถ้า -ตัวเลือก แบบฟอร์มคือ
ใช้ ตัวเลือก เป็นรายการของ - แยกตัวเลือกเพื่อเลือกรายละเอียดการถ่ายโอนข้อมูลและ
การเพิ่มประสิทธิภาพ ถ้า ตัวเลือก ไม่ได้ระบุไว้ ค่าเริ่มต้นคือ ทั้งหมด สำหรับรายละเอียดและ ออปตอล
สำหรับกลุ่มการเพิ่มประสิทธิภาพ ถ้า ชื่อไฟล์ ไม่ได้ระบุไว้ ค่าเริ่มต้นคือ สตเดอร์. บันทึก
ว่าผลลัพธ์ ชื่อไฟล์ จะถูกเขียนทับในกรณีที่มีหน่วยการแปลหลายหน่วย ถ้า
ต้องการเอาต์พุตรวมจากหน่วยการแปลหลายหน่วย สตเดอร์ ควรใช้
แทน.
ตัวเลือกสามารถแบ่งออกเป็นสองกลุ่ม 1) ตัวเลือกที่อธิบายการใช้คำฟุ่มเฟือยของ
ดัมพ์ และ 2) ตัวเลือกที่อธิบายว่าควรรวมการเพิ่มประสิทธิภาพใด ตัวเลือก
จากทั้งสองกลุ่มสามารถผสมได้อย่างอิสระเนื่องจากไม่ทับซ้อนกัน อย่างไรก็ตาม ในกรณี
ของข้อขัดแย้งใด ๆ ตัวเลือกหลังจะแทนที่ตัวเลือกก่อนหน้าในบรรทัดคำสั่ง
แม้ว่าจะยอมรับตัวเลือก -fopt-info หลายตัวเลือก แต่ตัวเลือกเดียวเท่านั้นที่สามารถมีได้ =ชื่อไฟล์.
หากมีการระบุชื่อไฟล์อื่น ทั้งหมดยกเว้นชื่อไฟล์แรกจะถูกละเว้น
การใช้คำฟุ่มเฟือยของดัมพ์มีตัวเลือกดังต่อไปนี้
การปรับให้เหมาะสม
พิมพ์ข้อมูลเมื่อมีการใช้การปรับให้เหมาะสมสำเร็จ มันขึ้นอยู่กับผ่าน
เพื่อตัดสินใจว่าข้อมูลใดที่เกี่ยวข้อง ตัวอย่างเช่น vectorizer ส่งผ่านการพิมพ์
ตำแหน่งต้นทางของลูปที่แปลงเป็นเวกเตอร์ได้สำเร็จ
พลาด
พิมพ์ข้อมูลเกี่ยวกับการเพิ่มประสิทธิภาพที่ไม่ได้รับ บุคคลผ่านการควบคุมซึ่ง
ข้อมูลที่จะรวมในการส่งออก ตัวอย่างเช่น,
gcc -O2 -ftree-vectorize -fopt-info-vec-missed
จะพิมพ์ข้อมูลเกี่ยวกับโอกาสในการเพิ่มประสิทธิภาพที่พลาดไปจาก vectorization
ผ่าน stderr
หมายเหตุ
พิมพ์ข้อมูลอย่างละเอียดเกี่ยวกับการเพิ่มประสิทธิภาพ เช่น การแปลง
ข้อความรายละเอียดเพิ่มเติมเกี่ยวกับการตัดสินใจ ฯลฯ
ทั้งหมด พิมพ์ข้อมูลการเพิ่มประสิทธิภาพโดยละเอียด ซึ่งรวมถึง การปรับให้เหมาะสม, พลาดและ
หมายเหตุ.
ตัวเลือกชุดที่สองอธิบายกลุ่มของการเพิ่มประสิทธิภาพและอาจรวมถึงหนึ่งหรือ
เพิ่มเติมดังต่อไปนี้
IPA เปิดใช้งานการถ่ายโอนข้อมูลจากการเพิ่มประสิทธิภาพระหว่างขั้นตอนทั้งหมด
ห่วง
เปิดใช้งานการถ่ายโอนข้อมูลจากการเพิ่มประสิทธิภาพลูปทั้งหมด
แบบอินไลน์
เปิดใช้งานการถ่ายโอนข้อมูลจากการเพิ่มประสิทธิภาพอินไลน์ทั้งหมด
บางสิ่ง เปิดใช้งานการถ่ายโอนข้อมูลจากการเพิ่มประสิทธิภาพเวคเตอร์ทั้งหมด
ตัวอย่างเช่น
gcc -O3 -fopt-info-missed=missed.all
ผลลัพธ์ที่ไม่ได้รับรายงานการเพิ่มประสิทธิภาพจากการส่งผ่านทั้งหมดเข้าสู่ miss.all.
อีกตัวอย่างหนึ่ง
gcc -O3 -fopt-info-inline-optimized-missed=inline.txt
จะแสดงข้อมูลเกี่ยวกับการเพิ่มประสิทธิภาพที่ไม่ได้รับรวมถึงตำแหน่งที่ปรับให้เหมาะสมจาก
อินไลน์ทั้งหมดส่งผ่านเข้าสู่ อินไลน์. txt.
ถ้า ชื่อไฟล์ มีให้ จากนั้นดัมพ์จากการเพิ่มประสิทธิภาพที่เกี่ยวข้องทั้งหมดจะเป็น
รวมเข้ากับ ชื่อไฟล์. มิฉะนั้นการถ่ายโอนข้อมูลจะถูกส่งออกไปยัง สตเดอร์. ถ้า ตัวเลือก
ถูกละไว้ ค่าเริ่มต้นคือ all-optalซึ่งหมายความว่าดัมพ์การปรับให้เหมาะสมที่มีอยู่ทั้งหมด
ข้อมูลจากบัตรผ่านทั้งหมด ในตัวอย่างต่อไปนี้ ข้อมูลการเพิ่มประสิทธิภาพทั้งหมดจะถูกส่งออกบน
ไปยัง สตเดอร์.
gcc -O3 -fopt-ข้อมูล
โปรดทราบว่า -fopt-info-vec-พลาด ประพฤติตัวเหมือนกับ -fopt-ข้อมูลพลาด-vec.
อีกตัวอย่างหนึ่งให้พิจารณา
gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt
ที่นี่ทั้งสองชื่อไฟล์เอาต์พุต vec.พลาด และ ห่วง.opt ขัดแย้งกันเพราะมีเพียงหนึ่งเดียว
อนุญาตให้ใช้ไฟล์เอาต์พุต ในกรณีนี้ เฉพาะตัวเลือกแรกเท่านั้นที่จะมีผลและ
ตัวเลือกที่ตามมาจะถูกละเว้น ดังนั้น . เท่านั้น vec.พลาด ถูกผลิตขึ้นซึ่ง cotains
ทิ้ง vectorizer เกี่ยวกับโอกาสที่พลาดไป
-ftree-vectorizer-verbose=n
ตัวเลือกนี้เลิกใช้แล้วและดำเนินการในแง่ของ -fopt-ข้อมูล. กรุณาใช้
-fopt-ข้อมูล-ชนิด แบบฟอร์มแทนโดยที่ ชนิด เป็นหนึ่งในตัวเลือกข้อมูลการเลือกที่ถูกต้อง มัน
พิมพ์ข้อมูลการเพิ่มประสิทธิภาพเพิ่มเติม สำหรับ n=0 ไม่มีข้อมูลการวินิจฉัยคือ
รายงาน ถ้า n=1 vectorizer รายงานแต่ละลูปที่ได้รับ vectorized และผลรวม
จำนวนลูปที่แปลงเป็นเวกเตอร์ ถ้า n=2 vectorizer รายงานตำแหน่งที่
ไม่สามารถ vectorized และเหตุผลเหล่านั้นได้ สำหรับระดับการใช้คำฟุ่มเฟือยที่สูงขึ้นทั้งหมด
มีการรายงานข้อมูลการวิเคราะห์และการแปลงจากเวกเตอร์
โปรดทราบว่าข้อมูลที่ส่งออกโดย -ftree- vectorizer-รายละเอียด ตัวเลือกถูกส่งไปยัง
สตเดอร์. ถ้ารูปแบบเทียบเท่า -fopt-ข้อมูล-ตัวเลือก=ชื่อไฟล์ ใช้แล้วผลลัพธ์คือ
ส่งเข้ามา ชื่อไฟล์ แทน.
-frandom-seed=เชือก
ตัวเลือกนี้ให้เมล็ดพันธุ์ที่ GCC ใช้แทนตัวเลขสุ่มในการสร้าง
ชื่อสัญลักษณ์บางอย่างที่ต้องแตกต่างกันในทุกไฟล์ที่คอมไพล์ ยังเป็น
ใช้เพื่อวางตราประทับที่ไม่ซ้ำกันในไฟล์ข้อมูลความครอบคลุมและไฟล์อ็อบเจ็กต์ที่สร้าง
พวกเขา. คุณสามารถใช้ -สุ่มเมล็ด ตัวเลือกในการผลิตวัตถุที่ทำซ้ำได้
ไฟล์
โครงการ เชือก ควรแตกต่างกันสำหรับทุกไฟล์ที่คุณคอมไพล์
-fsched-รายละเอียด=n
สำหรับเป้าหมายที่ใช้การจัดตารางเวลาคำสั่ง ตัวเลือกนี้จะควบคุมจำนวน
การดีบักเอาต์พุตตัวกำหนดตารางเวลาจะพิมพ์ ข้อมูลนี้เขียนด้วยข้อผิดพลาดมาตรฐาน
เว้นแต่ -fdump-rtl-sched1 or -fdump-rtl-sched2 ถูกระบุ ซึ่งในกรณีนี้คือ output
ไปยังไฟล์รายการดัมพ์ปกติ .sched1 or .sched2 ตามลำดับ อย่างไรก็ตามสำหรับ n
มากกว่าเก้า ผลลัพธ์จะถูกพิมพ์ไปยังข้อผิดพลาดมาตรฐานเสมอ
สำหรับ n มากกว่าศูนย์, -fsched-รายละเอียด ส่งออกข้อมูลเช่นเดียวกับ
-fdump-rtl-sched1 และ -fdump-rtl-sched2. สำหรับ n มากกว่าหนึ่งก็ยังส่งออกพื้นฐาน
บล็อกความน่าจะเป็น ข้อมูลรายการพร้อมโดยละเอียด และข้อมูลหน่วย/ข้อมูล สำหรับ n
มากกว่าสอง จะรวม RTL ที่จุดยกเลิก ข้อมูลโฟลว์การควบคุม และภูมิภาค และ
for n มากกว่าสี่, -fsched-รายละเอียด รวมถึงข้อมูลการพึ่งพา
-save-อุณหภูมิ
-บันทึกอุณหภูมิ=cwd
เก็บไฟล์กลาง "ชั่วคราว" ตามปกติอย่างถาวร วางไว้ในปัจจุบัน
ไดเร็กทอรีและตั้งชื่อตามไฟล์ต้นฉบับ ดังนั้นการรวบรวม ฟู.ซี กับ -c
-save-อุณหภูมิ สร้างไฟล์ ฟู.ไอ และ ฟู.เอสเช่นเดียวกับ ฟูโอ. สิ่งนี้จะสร้างไฟล์
ประมวลผลล่วงหน้า ฟู.ไอ ไฟล์เอาต์พุตแม้ว่าปกติแล้วคอมไพเลอร์จะใช้ an
ตัวประมวลผลล่วงหน้าแบบบูรณาการ
เมื่อใช้ร่วมกับ -x ตัวเลือกบรรทัดคำสั่ง -save-อุณหภูมิ มีเหตุผล
เพียงพอที่จะหลีกเลี่ยงการเขียนไฟล์แหล่งอินพุตที่มีนามสกุลเดียวกับ an . มากเกินไป
ไฟล์ระดับกลาง ไฟล์ระดับกลางที่เกี่ยวข้องสามารถรับได้โดยการเปลี่ยนชื่อ
ไฟล์ต้นฉบับก่อนใช้ -save-อุณหภูมิ.
หากคุณเรียกใช้ GCC แบบขนาน ให้คอมไพล์ไฟล์ต้นฉบับหลายไฟล์ที่แชร์a
ชื่อฐานทั่วไปในไดเร็กทอรีย่อยที่แตกต่างกันหรือไฟล์ต้นฉบับเดียวกันที่คอมไพล์สำหรับ
ปลายทางเอาต์พุตหลายตัวมีแนวโน้มว่าคอมไพเลอร์แบบขนานที่แตกต่างกันจะ
รบกวนซึ่งกันและกัน และเขียนทับไฟล์ชั่วคราว ตัวอย่างเช่น:
gcc -save-temps -o outdir1/foo.o indir1/foo.c&
gcc -save-temps -o outdir2/foo.o indir2/foo.c&
อาจส่งผลให้ ฟู.ไอ และ ฟูโอ ถูกเขียนพร้อมกันโดยคอมไพเลอร์ทั้งสอง
-บันทึกอุณหภูมิ=obj
จัดเก็บไฟล์ระดับกลาง "ชั่วคราว" ตามปกติอย่างถาวร ถ้า -o ใช้ตัวเลือก,
ไฟล์ชั่วคราวจะขึ้นอยู่กับไฟล์อ็อบเจ็กต์ ถ้า -o ไม่ได้ใช้ตัวเลือก the
-บันทึกอุณหภูมิ=obj สวิตช์มีลักษณะเหมือน -save-อุณหภูมิ.
ตัวอย่างเช่น:
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
สร้าง ฟู.ไอ, ฟู.เอส, dir/xbar.i, dir/xbar.s, dir2/yfoobar.i, dir2/yfoobar.sและ
dir2/yfoobar.o.
-เวลา[=ไฟล์]
รายงานเวลา CPU ที่ใช้โดยแต่ละกระบวนการย่อยในลำดับการคอมไพล์ สำหรับ C
ไฟล์ต้นฉบับ นี่คือคอมไพเลอร์ที่เหมาะสมและแอสเซมเบลอร์ (รวมถึงตัวเชื่อมโยงหากการลิงก์คือ
เสร็จแล้ว).
หากไม่มีข้อกำหนดของไฟล์เอาต์พุต เอาต์พุตจะมีลักษณะดังนี้:
#ซีซี1 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-การติดตามการมอบหมายสลับ
สลับ -fvar-การติดตามการมอบหมายในทำนองเดียวกัน -gtoggle สลับ -g.
-พิมพ์ชื่อไฟล์=ห้องสมุด
พิมพ์ชื่อเต็มของไฟล์ไลบรารี ห้องสมุด ที่จะใช้เมื่อ
เชื่อมโยง---และอย่าทำอย่างอื่น ด้วยตัวเลือกนี้ GCC จะไม่คอมไพล์หรือลิงก์
อะไรก็ตาม; มันแค่พิมพ์ชื่อไฟล์
-print-หลายไดเรกทอรี
พิมพ์ชื่อไดเร็กทอรีที่สอดคล้องกับ multilib ที่เลือกโดยสวิตช์อื่น ๆ
อยู่ในบรรทัดคำสั่ง ไดเรกทอรีนี้ควรจะมีอยู่ใน GCC_EXEC_PREFIX.
-print-multi-lib
พิมพ์การแมปจากชื่อไดเร็กทอรี multilib ไปยังสวิตช์คอมไพเลอร์ที่เปิดใช้งาน
ชื่อไดเร็กทอรีแยกจากสวิตช์โดย ;และสวิตช์แต่ละตัวเริ่มต้นด้วย an
@ แทนการ -โดยไม่มีช่องว่างระหว่างสวิตช์หลายตัว นี้ควรจะ
ง่ายต่อการประมวลผลเปลือก
-print-multi-os-ไดเรกทอรี
พิมพ์พาธไปยังไลบรารี OS สำหรับ multilib ที่เลือก โดยสัมพันธ์กับ some lib
ไดเรกทอรีย่อย หากมีไลบรารี OS อยู่ในไฟล์ lib ไดเรกทอรีย่อยและไม่มี multilibs
ถูกใช้ซึ่งมักจะเป็นเพียง ., หากมีไลบรารี OS อยู่ใน คำต่อท้าย lib พี่น้อง
ไดเร็กทอรีนี้พิมพ์เช่น ../lib64, ../ lib or ../lib32, หรือถ้าไลบรารี่ OS เป็น
นำเสนอใน lib/subdir ไดเรกทอรีย่อยที่พิมพ์เช่น amd64, สปาร์ควี9 or ev6.
-พิมพ์-multiarch
พิมพ์พาธไปยังไลบรารี OS สำหรับ multiarch ที่เลือก โดยสัมพันธ์กับ some lib
ไดเร็กทอรีย่อย
-print-prog-name =โครงการ
Like -พิมพ์ชื่อไฟล์แต่ค้นหาโปรแกรมเช่น ซีพี.
-print-libgcc-ชื่อไฟล์
เหมือนกับ -พิมพ์ชื่อไฟล์=libgcc.a.
สิ่งนี้มีประโยชน์เมื่อคุณใช้ -nostdlib or -nodedefaultlibs แต่คุณต้องการเชื่อมโยงกับ
libgcc.a. คุณทำได้:
gcc -nostdlib ... `gcc -print-libgcc-file-name`
-พิมพ์-ค้นหา-dirs
พิมพ์ชื่อไดเร็กทอรีการติดตั้งที่กำหนดค่าไว้และรายการโปรแกรมและ
ไดเรกทอรีห้องสมุด gcc ค้นหา---และอย่าทำอย่างอื่น
สิ่งนี้มีประโยชน์เมื่อ gcc พิมพ์ข้อความแสดงข้อผิดพลาด การติดตั้ง ปัญหา, ไม่ได้ exec
cpp0: ไม่ อย่างเช่น ไฟล์ or ไดเรกทอรี. ในการแก้ไขปัญหานี้คุณต้องใส่ ซีพีพี0 และ
ส่วนประกอบคอมไพเลอร์อื่น ๆ โดยที่ gcc คาดว่าจะพบพวกเขาหรือคุณสามารถตั้งค่า
ตัวแปรสภาพแวดล้อม GCC_EXEC_PREFIX ไปยังไดเร็กทอรีที่คุณติดตั้งไว้ อย่า
ลืมการต่อท้าย /.
-พิมพ์-sysroot
พิมพ์ไดเร็กทอรี sysroot เป้าหมายที่ใช้ระหว่างการคอมไพล์ นี้เป็น
sysroot เป้าหมายที่ระบุในเวลากำหนดค่าหรือใช้ --sysroot ตัวเลือก
อาจมีส่วนต่อท้ายพิเศษที่ขึ้นอยู่กับตัวเลือกการรวบรวม ถ้าไม่มีเป้าหมาย
sysroot ถูกระบุ ตัวเลือกจะไม่พิมพ์อะไรเลย
พิมพ์ sysroot ส่วนหัวต่อท้าย
พิมพ์ส่วนต่อท้ายที่เพิ่มไปยัง sysroot เป้าหมายเมื่อค้นหาส่วนหัวหรือให้
เกิดข้อผิดพลาดหากคอมไพเลอร์ไม่ได้กำหนดค่าด้วยคำต่อท้ายดังกล่าว---และไม่ต้องดำเนินการใดๆ
อื่น.
-เครื่องทิ้งขยะ
พิมพ์เครื่องเป้าหมายของคอมไพเลอร์ (เช่น i686-pc-ลินุกซ์-gnu)---และอย่าทำ
สิ่งอื่นใด
- การถ่ายโอนข้อมูล
พิมพ์เวอร์ชันคอมไพเลอร์ (เช่น 3.0)---และอย่าทำอย่างอื่น
-dumpspec
พิมพ์ข้อมูลจำเพาะในตัวของคอมไพเลอร์---และไม่ต้องดำเนินการอื่นใด (ใช้เมื่อ
GCC เองกำลังถูกสร้างขึ้น)
-fno-กำจัด-ไม่ได้ใช้-debug-types
โดยปกติเมื่อสร้างเอาต์พุต DWARF 2 GCC จะหลีกเลี่ยงการสร้างเอาต์พุตสัญลักษณ์การดีบักสำหรับ
ชนิดที่ไม่มีที่ไหนเลยที่ใช้ในไฟล์ต้นฉบับที่กำลังคอมไพล์ บางครั้งก็มีประโยชน์
เพื่อให้ GCC ปล่อยข้อมูลการดีบักสำหรับทุกประเภทที่ประกาศในหน่วยการคอมไพล์
ไม่ว่าจะใช้ในหน่วยคอมไพล์นั้นจริงหรือไม่ก็ตาม สำหรับ
ตัวอย่างเช่น ถ้าในดีบักเกอร์ คุณต้องการแปลงค่าเป็นประเภทที่ไม่ใช่จริงๆ
ใช้ในโปรแกรมของคุณ (แต่มีการประกาศ) อย่างไรก็ตาม บ่อยครั้งขึ้น ส่งผลให้ a
พื้นที่สิ้นเปลืองจำนวนมาก
Options ที่ Control การเพิ่มประสิทธิภาพ
ตัวเลือกเหล่านี้ควบคุมการเพิ่มประสิทธิภาพประเภทต่างๆ
หากไม่มีตัวเลือกการเพิ่มประสิทธิภาพ เป้าหมายของคอมไพเลอร์คือการลดต้นทุนการรวบรวม
และเพื่อให้การดีบักสร้างผลลัพธ์ที่คาดหวัง งบเป็นอิสระ: ถ้าคุณ
หยุดโปรแกรมด้วยจุดพักระหว่างคำสั่ง จากนั้นกำหนดค่าใหม่ให้กับ
ตัวแปรใด ๆ หรือเปลี่ยนตัวนับโปรแกรมเป็นคำสั่งอื่นในฟังก์ชันและรับ
ตรงผลลัพธ์ที่คุณคาดหวังจากซอร์สโค้ด
การเปิดแฟล็กการปรับให้เหมาะสมทำให้คอมไพเลอร์พยายามปรับปรุงประสิทธิภาพและ/หรือ
ขนาดโค้ดที่ใช้เวลาในการรวบรวมและอาจเป็นความสามารถในการดีบัก
โครงการ
คอมไพเลอร์ทำการเพิ่มประสิทธิภาพตามความรู้ที่มีของโปรแกรม
การคอมไพล์ไฟล์หลายไฟล์พร้อมกันเป็นโหมดไฟล์เอาต์พุตเดียวช่วยให้คอมไพเลอร์ใช้งานได้
ข้อมูลที่ได้รับจากไฟล์ทั้งหมดเมื่อรวบรวมแต่ละไฟล์
การเพิ่มประสิทธิภาพบางอย่างไม่ได้ถูกควบคุมโดยแฟล็กโดยตรง เฉพาะการเพิ่มประสิทธิภาพที่มี a
แฟล็กแสดงอยู่ในส่วนนี้
การเพิ่มประสิทธิภาพส่วนใหญ่จะเปิดใช้งานก็ต่อเมื่อ an -O ระดับถูกตั้งค่าบนบรรทัดคำสั่ง มิฉะนั้น
ถูกปิดใช้งาน แม้ว่าจะมีการระบุแฟล็กการปรับให้เหมาะสมแต่ละรายการ
ขึ้นอยู่กับเป้าหมายและวิธีการกำหนดค่า GCC ชุดของ .ที่แตกต่างกันเล็กน้อย
อาจเปิดใช้งานการปรับให้เหมาะสมในแต่ละ -O ระดับที่มากกว่าที่ระบุไว้ในที่นี้ คุณสามารถเรียกใช้ GCC
กับ -Q --help = เครื่องมือเพิ่มประสิทธิภาพ เพื่อค้นหาชุดการเพิ่มประสิทธิภาพที่แน่นอนที่เปิดใช้งานที่
แต่ละระดับ
-O
-O1 เพิ่มประสิทธิภาพ การเพิ่มประสิทธิภาพการคอมไพล์จะใช้เวลาค่อนข้างนาน และหน่วยความจำมากขึ้นสำหรับ
ฟังก์ชั่นขนาดใหญ่
ด้วยระบบเส้นทาง -Oคอมไพเลอร์พยายามลดขนาดโค้ดและเวลาดำเนินการโดยไม่ดำเนินการ
การเพิ่มประสิทธิภาพใดๆ ที่ต้องใช้เวลารวบรวมอย่างมาก
-O เปิดแฟล็กการปรับให้เหมาะสมต่อไปนี้:
-fauto-inc-ธ.ค -fcompare-เอลิม -fcprop-ลงทะเบียน -fdce -fdefer-ป๊อป -fdelayed-สาขา
-fdse -fguess-สาขา-ความน่าจะเป็น -fif-การแปลง2 -fif-แปลง -fipa-บริสุทธิ์-const
-fipa-โปรไฟล์ -fipa-อ้างอิง -fmerge-ค่าคงที่ -fsplit-กว้าง-ประเภท -ftree-บิต-ccp
-ftree-builtin-โทร-dce -ftree-ccp -ftree-ช -ftree-copyrename -ftree-dce
-ftree-dominator-opts -ftree-dse -ftree-forwprop -ฟรีฟรี -ftree-piprop -ftree-slsr
-ftree-สระ -ftree-พีทีเอ -ftree-ter -สนุกในแต่ละครั้ง
-O ยังเปิดอยู่ -fomit-frame-ตัวชี้ บนเครื่องที่ไม่รบกวน
ด้วยการดีบัก
-O2 เพิ่มประสิทธิภาพมากยิ่งขึ้น GCC ทำการเพิ่มประสิทธิภาพเกือบทั้งหมดที่รองรับซึ่งไม่รองรับ
เกี่ยวข้องกับการแลกเปลี่ยนความเร็วอวกาศ เมื่อเทียบกับ -O, ตัวเลือกนี้จะเพิ่มทั้ง
เวลาในการรวบรวมและประสิทธิภาพของรหัสที่สร้างขึ้น
-O2 เปิดแฟล็กการปรับให้เหมาะสมทั้งหมดที่ระบุโดย -O. นอกจากนี้ยังเปิดดังต่อไปนี้
แฟล็กการเพิ่มประสิทธิภาพ: -fthread-กระโดด -falign-ฟังก์ชั่น -falign-กระโดด -falign-ลูป
-falign-ฉลาก -fcaller-บันทึก -fcrossjumping -fcse-ติดตามกระโดด -fcse-ข้ามบล็อก
-fdelete-null-pointer-ตรวจสอบ -fdevirtualize -การเพิ่มประสิทธิภาพราคาแพง -fgcse
-fgcse-lm -fhoist-adjacent-โหลด -finline-small-ฟังก์ชั่น -findirect-inlining
-fipa-sra -foptimize-พี่น้อง-โทร -fpartial-inlining -fช่องมอง2 - เฟรกมูฟ
-freeorder-บล็อก -freeorder-ฟังก์ชั่น -frerun-cse-หลังลูป -fsched-อินเตอร์บล็อก
-fsched-ข้อมูลจำเพาะ -fschedule-อินน์ -fschedule-insns2 -fstrict-นามแฝง -fstrict-ล้น
-ftree-สวิตช์แปลง -ftree-tail-ผสาน -ftree-ก่อน -ftree-vrp
โปรดทราบคำเตือนภายใต้ -fgcse เกี่ยวกับการอัญเชิญ -O2 บนโปรแกรมที่ใช้คำนวณ
โกโตส
หมายเหตุ: ใน Ubuntu 8.10 และเวอร์ชันที่ใหม่กว่า -D_FORTIFY_SOURCE=2 ถูกกำหนดโดยค่าเริ่มต้น และ is
เปิดใช้งานเมื่อ -O ถูกตั้งค่าเป็น 2 หรือสูงกว่า ซึ่งจะทำให้เวลาในการคอมไพล์เพิ่มเติมและ
ตรวจสอบรันไทม์สำหรับฟังก์ชัน libc ต่างๆ หากต้องการปิดใช้งาน ให้ระบุ
-U_FORTIFY_SOURCE or -D_FORTIFY_SOURCE=0.
-O3 เพิ่มประสิทธิภาพอีกมาก -O3 เปิดการเพิ่มประสิทธิภาพทั้งหมดที่ระบุโดย -O2 และยังเปิด
-finline-ฟังก์ชั่น, -funswitch-ลูป, -fpredictive-ทั่วไป, -fgcse-หลังรีโหลด,
-ftree- vectorize, -fvect-ต้นทุน-รุ่น, -ftree-บางส่วน-pre และ -fipa-cp-โคลน ตัวเลือก
-O0 ลดเวลาในการคอมไพล์และทำให้การดีบักสร้างผลลัพธ์ที่คาดหวัง นี้เป็น
ค่าเริ่มต้น.
-คุณ ปรับให้เหมาะสมสำหรับขนาด -คุณ เปิดใช้งานทั้งหมด -O2 การเพิ่มประสิทธิภาพที่มักจะไม่เพิ่มขึ้น
ขนาดรหัส นอกจากนี้ยังทำการเพิ่มประสิทธิภาพเพิ่มเติมที่ออกแบบมาเพื่อลดขนาดโค้ด
-คุณ ปิดใช้งานแฟล็กการปรับให้เหมาะสมต่อไปนี้: -falign-ฟังก์ชั่น -falign-กระโดด
-falign-ลูป -falign-ฉลาก -freeorder-บล็อก -freeorder-blocks-and-partition
-fprefetch-ลูปอาร์เรย์
-Ofast
ละเว้นการปฏิบัติตามมาตรฐานที่เข้มงวด -Ofast เปิดใช้งานทั้งหมด -O3 การเพิ่มประสิทธิภาพ นอกจากนี้ยัง
เปิดใช้งานการปรับให้เหมาะสมที่ไม่ถูกต้องสำหรับโปรแกรมที่เป็นไปตามมาตรฐานทั้งหมด มัน
เปิด -ffast-คณิตศาสตร์ และ Fortran เฉพาะ -fno-protect-ผู้ปกครอง และ -fstack-อาร์เรย์.
-อ ปรับประสบการณ์การดีบักให้เหมาะสม -อ เปิดใช้งานการเพิ่มประสิทธิภาพที่ไม่รบกวนกับ
การดีบัก ควรเป็นระดับการเพิ่มประสิทธิภาพทางเลือกสำหรับการแก้ไขมาตรฐาน
วงจรคอมไพล์-ดีบัก เสนอระดับการเพิ่มประสิทธิภาพที่เหมาะสมในขณะที่ยังคงรักษา
การรวบรวมที่รวดเร็วและประสบการณ์การดีบักที่ดี
หากคุณใช้หลายตัว -O ตัวเลือก โดยมีหรือไม่มีหมายเลขระดับ ตัวเลือกสุดท้ายคือ
ที่มีประสิทธิภาพ
ตัวเลือกของแบบฟอร์ม -fธง ระบุแฟล็กที่ไม่ขึ้นกับเครื่อง ธงส่วนใหญ่มีทั้งสองอย่าง
รูปแบบบวกและลบ รูปแบบเชิงลบของ -foo is -fno-ฟู. ในตารางด้านล่าง
มีเพียงแบบฟอร์มเดียวเท่านั้นที่อยู่ในรายการ --- แบบฟอร์มที่คุณใช้โดยทั่วไป คุณสามารถคิดออกอื่น ๆ
โดยการถอด ที่ไม่มี หรือเพิ่ม
ตัวเลือกต่อไปนี้จะควบคุมการเพิ่มประสิทธิภาพเฉพาะ พวกมันถูกเปิดใช้งานโดย -O
ทางเลือกหรือเกี่ยวข้องกับสิ่งที่มีอยู่ คุณสามารถใช้แฟล็กต่อไปนี้ในแรร์
กรณีที่ต้องการ "ปรับละเอียด" ของการเพิ่มประสิทธิภาพที่จะดำเนินการ
-fno-default-อินไลน์
อย่าทำให้สมาชิกทำงานแบบอินไลน์โดยปริยายเพียงเพราะว่าถูกกำหนดไว้ภายใน
ขอบเขตคลาส (C ++ เท่านั้น) มิฉะนั้น เมื่อคุณระบุ -O, ฟังก์ชั่นสมาชิกกำหนด
ภายในขอบเขตของคลาสถูกคอมไพล์แบบอินไลน์โดยค่าเริ่มต้น คือคุณไม่จำเป็นต้องเพิ่ม แบบอินไลน์
หน้าชื่อฟังก์ชันสมาชิก
-fno-defer-ป๊อป
เปิดอาร์กิวเมนต์ทุกครั้งที่เรียกใช้ฟังก์ชันทุกครั้งที่ฟังก์ชันส่งคืน สำหรับ
เครื่องที่ต้องเปิดอาร์กิวเมนต์หลังจากการเรียกใช้ฟังก์ชัน คอมไพเลอร์ปกติจะช่วยให้
อาร์กิวเมนต์สะสมบนสแต็กสำหรับการเรียกใช้ฟังก์ชันหลาย ๆ อันและปรากฏขึ้นทั้งหมดที่
ครั้งหนึ่ง
พิการในระดับ -O, -O2, -O3, -คุณ.
-ส่งต่อ-เผยแพร่
ดำเนินการส่งต่อการแพร่กระจายไปข้างหน้าบน RTL บัตรผ่านพยายามรวมสองคำแนะนำ
และตรวจสอบว่าผลลัพธ์สามารถทำให้ง่ายขึ้นได้หรือไม่ หากการวนซ้ำเปิดอยู่ ให้ผ่านสองครั้ง
จะดำเนินการและกำหนดเวลาที่สองหลังจากคลายลูป
ตัวเลือกนี้เปิดใช้งานโดยค่าเริ่มต้นที่ระดับการปรับให้เหมาะสม -O, -O2, -O3, -คุณ.
-ffp-สัญญา=สไตล์
-ffp-สัญญา = ปิด ปิดใช้งานการย่อนิพจน์ทศนิยม -ffp-สัญญา = รวดเร็ว
เปิดใช้งานการหดตัวของนิพจน์ทศนิยมเช่นการหลอมรวมคูณเพิ่ม
การดำเนินการหากเป้าหมายมีการสนับสนุนดั้งเดิมสำหรับพวกเขา -ffp-contract=เปิด ช่วยให้
การหดตัวของนิพจน์ทศนิยมหากอนุญาตโดยมาตรฐานภาษา นี่คือ
ปัจจุบันไม่ได้ดำเนินการและปฏิบัติเท่ากับ -ffp-สัญญา = ปิด.
ค่าเริ่มต้นคือ -ffp-สัญญา = รวดเร็ว.
-fomit-frame-ตัวชี้
อย่าเก็บตัวชี้เฟรมไว้ในรีจิสเตอร์สำหรับฟังก์ชันที่ไม่ต้องการ นี้
หลีกเลี่ยงคำแนะนำในการบันทึก ตั้งค่า และกู้คืนตัวชี้เฟรม มันยังทำให้
ทะเบียนพิเศษที่มีอยู่ในหลายฟังก์ชั่น It ด้วย ทำให้ การแก้จุดบกพร่อง เป็นไปไม่ได้ on
บาง เครื่อง
สำหรับเครื่องบางเครื่อง เช่น VAX แฟล็กนี้ไม่มีผลเพราะมาตรฐาน
ลำดับการโทรจะจัดการตัวชี้เฟรมโดยอัตโนมัติและไม่มีอะไรถูกบันทึกโดย
แสร้งทำเป็นว่ามันไม่มีอยู่จริง มาโครคำอธิบายเครื่อง "FRAME_POINTER_REQUIRED"
ควบคุมว่าเครื่องเป้าหมายรองรับแฟล็กนี้หรือไม่
เริ่มต้นด้วย GCC เวอร์ชัน 4.6 การตั้งค่าเริ่มต้น (เมื่อไม่ได้ปรับให้เหมาะสมสำหรับขนาด) สำหรับ
เป้าหมาย GNU/Linux x32 แบบ 86 บิตและดาร์วิน x32 รุ่น 86 บิตถูกเปลี่ยนเป็น
-fomit-frame-ตัวชี้. ค่าเริ่มต้นสามารถเปลี่ยนกลับเป็น -fno-ละเว้นเฟรมตัวชี้ by
กำหนดค่า GCC ด้วย --enable-frame-ตัวชี้ กำหนดค่าตัวเลือก
เปิดใช้งานในระดับ -O, -O2, -O3, -คุณ.
-foptimize-พี่น้อง-โทร
ปรับการเรียกซ้ำพี่น้องและส่วนท้ายให้เหมาะสม
เปิดใช้งานในระดับ -O2, -O3, -คุณ.
-fno-อินไลน์
อย่าขยายฟังก์ชันใด ๆ ในบรรทัดนอกเหนือจากที่มีเครื่องหมาย "always_inline"
คุณลักษณะ. นี่เป็นค่าเริ่มต้นเมื่อไม่ได้เพิ่มประสิทธิภาพ
ฟังก์ชันเดี่ยวสามารถยกเว้นจากการอินไลน์ได้โดยทำเครื่องหมายด้วย "noinline"
คุณลักษณะ
-finline-small-ฟังก์ชั่น
รวมฟังก์ชั่นเข้ากับผู้โทรเมื่อร่างกายมีขนาดเล็กกว่าที่คาดไว้
รหัสเรียกฟังก์ชัน (ขนาดโดยรวมของโปรแกรมจะเล็กลง) คอมไพเลอร์
heuristically ตัดสินใจว่าฟังก์ชันใดง่ายพอที่จะรวมเข้าไว้ด้วยกัน
ทางนี้. อินไลน์นี้ใช้กับฟังก์ชันทั้งหมด แม้กระทั่งฟังก์ชันที่ไม่ได้ประกาศแบบอินไลน์
เปิดใช้งานที่ระดับ -O2.
-findirect-inlining
การเรียกแบบอินไลน์และการโทรทางอ้อมที่ค้นพบในเวลาคอมไพล์ด้วย
อินไลน์ก่อนหน้า ตัวเลือกนี้จะมีผลเมื่อเปิดอินไลน์ตัวเองเท่านั้น
โดย -finline-ฟังก์ชั่น or -finline-small-ฟังก์ชั่น ตัวเลือก
เปิดใช้งานที่ระดับ -O2.
-finline-ฟังก์ชั่น
พิจารณาฟังก์ชันทั้งหมดสำหรับการแทรก แม้ว่าจะไม่ได้ประกาศแบบอินไลน์ก็ตาม NS
คอมไพเลอร์ heuristically ตัดสินใจว่าฟังก์ชันใดที่ควรค่าแก่การผสานรวมในลักษณะนี้
หากการเรียกทั้งหมดไปยังฟังก์ชันที่กำหนดถูกรวมเข้าด้วยกัน และฟังก์ชันนั้นได้รับการประกาศ
"คงที่" โดยปกติแล้วฟังก์ชันจะไม่ส่งออกเป็นรหัสแอสเซมเบลอร์ในสิทธิ์ของตนเอง
เปิดใช้งานที่ระดับ -O3.
-finline-ฟังก์ชั่นที่เรียกว่าครั้งเดียว
พิจารณาฟังก์ชัน "คงที่" ทั้งหมดที่ถูกเรียกเพียงครั้งเดียวสำหรับอินไลน์ในผู้โทรแม้ว่า
พวกเขาไม่ได้ทำเครื่องหมาย "ในบรรทัด" หากการเรียกใช้ฟังก์ชันที่กำหนดถูกรวมเข้าด้วยกัน
ฟังก์ชั่นไม่ได้ส่งออกเป็นรหัสแอสเซมเบลอร์ในสิทธิ์ของตนเอง
เปิดใช้งานในระดับ -O1, -O2, -O3 และ -คุณ.
-เกรงใจ-inlining
ฟังก์ชันอินไลน์ที่มีเครื่องหมาย "always_inline" และฟังก์ชันที่ร่างกายดูเล็กกว่า
ฟังก์ชั่นเรียกใช้ค่าใช้จ่ายก่อนทำ -fprofile-สร้าง เครื่องมือวัดและ
ผ่าน inlining จริง การทำเช่นนี้ทำให้การทำโปรไฟล์มีราคาถูกลงอย่างมากและโดยปกติ
inlining เร็วขึ้นในโปรแกรมที่มีฟังก์ชั่น wrapper ที่ซ้อนกันจำนวนมาก
เปิดใช้งานโดยค่าเริ่มต้น
-fipa-sra
ดำเนินการเปลี่ยนสเกลาร์ระหว่างขั้นตอนของมวลรวม ลบพารามิเตอร์ที่ไม่ได้ใช้ออก
และการแทนที่พารามิเตอร์ที่ส่งผ่านโดยการอ้างอิงโดยพารามิเตอร์ที่ส่งผ่านโดยค่า
เปิดใช้งานในระดับ -O2, -O3 และ -คุณ.
-finline-จำกัด=n
โดยค่าเริ่มต้น GCC จะจำกัดขนาดของฟังก์ชันที่สามารถแทรกลงในบรรทัดได้ ธงนี้ช่วยให้
การควบคุมอย่างหยาบของขีด จำกัด นี้ n คือขนาดของฟังก์ชันที่สามารถอินไลน์ได้
จำนวนคำสั่งหลอก
Inlining ถูกควบคุมโดยพารามิเตอร์จำนวนหนึ่งซึ่งอาจระบุได้
เป็นรายบุคคลโดยใช้ --พารามิเตอร์ ชื่อ=ความคุ้มค่า. -finline-จำกัด=n ตัวเลือกชุดของ
พารามิเตอร์เหล่านี้ดังต่อไปนี้:
max-inline-insns-single
ถูกตั้งค่าเป็น n/ 2
max-inline-insns-อัตโนมัติ
ถูกตั้งค่าเป็น n/ 2
ดูเอกสารประกอบของพารามิเตอร์แต่ละตัวที่ควบคุมอินไลน์และ . ด้านล่าง
สำหรับค่าเริ่มต้นของพารามิเตอร์เหล่านี้
หมายเหตุ อาจไม่มีค่า -finline-จำกัด ที่ส่งผลให้เกิดพฤติกรรมเริ่มต้น
หมายเหตุ คำสั่งหลอกหมายถึง ในบริบทเฉพาะนี้ บทคัดย่อ
การวัดขนาดของฟังก์ชัน มิได้หมายความถึงการนับชุมนุมแต่อย่างใด
คำแนะนำและความหมายที่แน่นอนเช่นนั้นอาจเปลี่ยนจากรุ่นหนึ่งเป็น
อื่น
-fno-keep-inline-dllexport
นี่เป็นเวอร์ชั่นที่ละเอียดกว่าของ -fkeep-อินไลน์-ฟังก์ชั่นซึ่งใช้เฉพาะกับ
ฟังก์ชันที่ประกาศโดยใช้แอตทริบิวต์ "dllexport" หรือ declspec
-fkeep-อินไลน์-ฟังก์ชั่น
ใน C ให้ปล่อยฟังก์ชัน "คงที่" ที่ประกาศว่า "อินไลน์" ลงในไฟล์อ็อบเจ็กต์ แม้ว่า
ฟังก์ชันนี้ได้รับการฝังไว้ในผู้โทรทั้งหมดแล้ว สวิตช์นี้ไม่มีผล
ทำงานโดยใช้ส่วนขยาย "extern inline" ใน GNU C90 ใน C ++ ให้ปล่อยใด ๆ และทั้งหมด
ฟังก์ชันแบบอินไลน์ในไฟล์อ็อบเจ็กต์
-fkeep-คงที่-consts
ปล่อยตัวแปรที่ประกาศ "คงที่" เมื่อไม่ได้เปิดใช้งานการปรับให้เหมาะสม แม้ว่า
ตัวแปรไม่ได้ถูกอ้างอิง
GCC เปิดใช้งานตัวเลือกนี้เป็นค่าเริ่มต้น หากคุณต้องการบังคับให้คอมไพเลอร์ตรวจสอบว่า a
มีการอ้างอิงตัวแปรไม่ว่าจะเปิดใช้การปรับให้เหมาะสมหรือไม่ก็ตาม use
-fno-keep-static-consts ตัวเลือก
-fmerge-ค่าคงที่
พยายามรวมค่าคงที่ที่เหมือนกัน (ค่าคงที่สตริงและค่าคงที่ทศนิยม)
ข้ามหน่วยการรวบรวม
ตัวเลือกนี้เป็นค่าดีฟอลต์สำหรับการคอมไพล์ที่ปรับให้เหมาะสมหากแอสเซมเบลอร์และลิงเกอร์
สนับสนุนมัน ใช้ -fno-ผสานค่าคงที่ เพื่อยับยั้งพฤติกรรมนี้
เปิดใช้งานในระดับ -O, -O2, -O3, -คุณ.
-fmerge-all-ค่าคงที่
พยายามรวมค่าคงที่และตัวแปรที่เหมือนกันเข้าด้วยกัน
ตัวเลือกนี้หมายถึง -fmerge-ค่าคงที่. นอกจาก -fmerge-ค่าคงที่ นี้
พิจารณาเช่นอาร์เรย์เริ่มต้นคงที่หรือตัวแปรคงที่เริ่มต้นด้วย
ประเภทอินทิกรัลหรือทศนิยม ภาษาเช่น C หรือ C ++ ต้องการตัวแปรแต่ละตัว
รวมถึงหลายอินสแตนซ์ของตัวแปรเดียวกันในการเรียกซ้ำเพื่อให้มีความชัดเจน
ตำแหน่ง ดังนั้นการใช้ตัวเลือกนี้ส่งผลให้มีพฤติกรรมที่ไม่เป็นไปตามข้อกำหนด
-fmodulo-กำหนดการ
ดำเนินการจัดตารางโมดูโลวงสวิงทันทีก่อนกำหนดการแรกจะผ่าน นี้
pass ดูที่วงในสุดและจัดลำดับคำสั่งใหม่โดยทับค่า different
การทำซ้ำ
-fmodulo-sched-allow-regmoves
ดำเนินการจัดกำหนดการโมดูโลบน SMS ที่เข้มงวดยิ่งขึ้นโดยอนุญาตให้ย้ายการลงทะเบียนได้ โดย
การตั้งค่าแฟล็กนี้ ขอบต่อต้านการพึ่งพาบางส่วนจะถูกลบออก ซึ่งทำให้
การสร้าง reg-moves ตามการวิเคราะห์ช่วงชีวิต ตัวเลือกนี้ใช้ได้ผล
เฉพาะกับ -fmodulo-กำหนดการ เปิดการใช้งาน
-fno-สาขานับ-reg
อย่าใช้คำสั่ง "decrement and branch" ในเครื่องนับจำนวน แต่แทน
สร้างลำดับของคำสั่งที่ลดการลงทะเบียนเปรียบเทียบกับ
ศูนย์แล้วแยกสาขาตามผลลัพธ์ ตัวเลือกนี้มีความหมายเฉพาะกับ
สถาปัตยกรรมที่รองรับคำสั่งดังกล่าว ซึ่งรวมถึง x86, PowerPC, IA-64 และ
เอส/390.
ค่าเริ่มต้นคือ -fbranch-นับ-reg.
-fno-ฟังก์ชัน-cse
อย่าใส่ฟังก์ชันแอดเดรสในรีจิสเตอร์ ทำแต่ละคำสั่งที่เรียก
ฟังก์ชันคงมีที่อยู่ของฟังก์ชันอย่างชัดเจน
ตัวเลือกนี้ส่งผลให้โค้ดมีประสิทธิภาพน้อยลง แต่มีแฮ็กแปลกๆ บางอย่างที่เปลี่ยน
เอาต์พุตแอสเซมเบลอร์อาจสับสนโดยการปรับให้เหมาะสมที่ดำเนินการเมื่อตัวเลือกนี้คือ
ไม่ได้ใช้.
ค่าเริ่มต้นคือ -ffunction-cse
-fno-ศูนย์-เริ่มต้น-in-bss
หากเป้าหมายรองรับส่วน BSS โดยค่าเริ่มต้น GCC จะวางตัวแปรที่เป็น
เริ่มต้นเป็นศูนย์ใน BSS นี้สามารถประหยัดพื้นที่ในโค้ดผลลัพธ์
ตัวเลือกนี้จะปิดการทำงานนี้เนื่องจากบางโปรแกรมพึ่งพาตัวแปรอย่างชัดเจน
ไปที่ส่วนข้อมูล---เช่น เพื่อให้ไฟล์ปฏิบัติการที่เป็นผลลัพธ์สามารถค้นหา
จุดเริ่มต้นของส่วนนั้นและ/หรือตั้งสมมติฐานตามนั้น
ค่าเริ่มต้นคือ -fzero-เริ่มต้นใน bss.
-fmudflap -fmudflapth -fmudflapir
สำหรับฟรอนต์เอนด์ที่รองรับ (C และ C++) เครื่องมือชี้/อาร์เรย์ที่มีความเสี่ยงทั้งหมด
การดำเนินการ dereference, สตริงไลบรารีมาตรฐาน / ฟังก์ชันฮีปบางรายการและอื่น ๆ
โครงสร้างที่เกี่ยวข้องกับการทดสอบช่วง/ความถูกต้อง โมดูลที่ควรจะเป็น
ป้องกันบัฟเฟอร์โอเวอร์โฟลว์ การใช้ฮีปที่ไม่ถูกต้อง และคลาสอื่น ๆ ของ C/C++
ข้อผิดพลาดในการเขียนโปรแกรม เครื่องมือวัดอาศัยไลบรารีรันไทม์แยกต่างหาก
(libmudflap) ซึ่งเชื่อมโยงกับโปรแกรม if -fmudflap จะได้รับในเวลาลิงค์ วิ่ง-
พฤติกรรมเวลาของโปรแกรมเครื่องมือวัดถูกควบคุมโดย MUDFLAP_OPTIONS
ตัวแปรสภาพแวดล้อม ดูตัวเลือก "env MUDFLAP_OPTIONS=-help a.out"
ใช้ -fmudflapth แทน -fmudflap เพื่อรวบรวมและเชื่อมโยงหากโปรแกรมของคุณเป็นแบบหลาย
เกลียว ใช้ -fmudflapirนอกเหนือไปจาก -fmudflap or -fmudflapthถ้า
เครื่องมือวัดควรละเว้นการอ่านตัวชี้ สิ่งนี้ทำให้เครื่องมือวัดน้อยลง (และ
ดังนั้นการดำเนินการที่เร็วขึ้น) และยังคงให้การป้องกันหน่วยความจำทั้งหมด
ทำให้การเขียนเสียหาย แต่อนุญาตให้อ่านข้อมูลผิดพลาดเพื่อเผยแพร่ภายในโปรแกรม
-fthread-กระโดด
ทำการเพิ่มประสิทธิภาพที่ตรวจสอบเพื่อดูว่าสาขากระโดดไปยังตำแหน่งที่อื่นหรือไม่
การเปรียบเทียบย่อยโดยตัวแรกจะพบ ถ้าใช่สาขาแรกจะถูกเปลี่ยนเส้นทางไปที่
ไม่ว่าจะเป็นปลายทางของสาขาที่สองหรือจุดที่ตามมาทันที
ขึ้นอยู่กับว่าเงื่อนไขที่ทราบว่าเป็นจริงหรือเท็จ
เปิดใช้งานในระดับ -O2, -O3, -คุณ.
-fsplit-กว้าง-ประเภท
เมื่อใช้ประเภทที่ใช้รีจิสเตอร์หลายตัว เช่น "long long" บน 32-bit
ระบบ แยกทะเบียนออกจากกันและจัดสรรให้เป็นอิสระ ปกติแบบนี้
สร้างโค้ดที่ดีขึ้นสำหรับประเภทเหล่านั้น แต่อาจทำให้การดีบักทำได้ยากขึ้น
เปิดใช้งานในระดับ -O, -O2, -O3, -คุณ.
-fcse-ติดตามกระโดด
ในการกำจัดนิพจน์ย่อยทั่วไป (CSE) ให้สแกนผ่านคำแนะนำการข้ามเมื่อ
เป้าหมายของการกระโดดไม่สามารถเข้าถึงได้โดยเส้นทางอื่น ตัวอย่างเช่น เมื่อ CSE เผชิญกับ
คำสั่ง "if" ที่มีประโยค "else" CSE ติดตามการกระโดดเมื่อเงื่อนไข
ทดสอบแล้วเป็นเท็จ
เปิดใช้งานในระดับ -O2, -O3, -คุณ.
-fcse-ข้ามบล็อก
มันคล้ายกับ -fcse-ติดตามกระโดดแต่ทำให้ CSE ก้าวกระโดดตามนั้น
ข้ามบล็อกตามเงื่อนไข เมื่อ CSE พบคำสั่ง "if" ง่ายๆ โดยไม่มี
ข้ออื่น -fcse-ข้ามบล็อก ทำให้ CSE ติดตามกระโดดไปรอบ ๆ ร่างกายของ
"ถ้า".
เปิดใช้งานในระดับ -O2, -O3, -คุณ.
-frerun-cse-หลังลูป
เรียกใช้การกำจัดนิพจน์ย่อยทั่วไปอีกครั้งหลังจากดำเนินการปรับลูปให้เหมาะสมที่สุด
เปิดใช้งานในระดับ -O2, -O3, -คุณ.
-fgcse
ดำเนินการผ่านการกำจัดนิพจน์ย่อยทั่วไปทั่วโลก บัตรผ่านนี้ยังดำเนินการ
ค่าคงที่ทั่วโลกและการขยายพันธุ์สำเนา
หมายเหตุ เมื่อรวบรวมโปรแกรมโดยใช้ gotos ที่คำนวณแล้ว ซึ่งเป็นส่วนขยาย GCC คุณอาจได้รับ
ประสิทธิภาพรันไทม์ที่ดีขึ้นหากคุณปิดใช้งานการกำจัดนิพจน์ย่อยทั่วไปทั่วโลก
ผ่านโดยการเพิ่ม -fno-gcse ไปที่บรรทัดคำสั่ง
เปิดใช้งานในระดับ -O2, -O3, -คุณ.
-fgcse-lm
เมื่อ -fgcse-lm เปิดใช้งาน พยายามกำจัดนิพจน์ย่อยทั่วไปส่วนกลางเพื่อย้าย
โหลดที่ฆ่าโดยร้านค้าในตัวเองเท่านั้น อนุญาตให้วนซ้ำที่มี a
ลำดับการโหลด/จัดเก็บที่จะเปลี่ยนเป็นโหลดนอกลูปและคัดลอก/จัดเก็บภายใน
ห่วง
เปิดใช้งานโดยค่าเริ่มต้นเมื่อ -fgcse เปิดใช้งาน.
-fgcse-เอสเอ็ม
เมื่อ -fgcse-เอสเอ็ม เปิดใช้งานแล้ว การเคลื่อนไหวผ่านของร้านค้าจะทำงานหลังจากโกลบอลคอมมอน
การกำจัดนิพจน์ย่อย บัตรผ่านนี้พยายามย้ายร้านค้าออกจากลูป เมื่อใช้
ร่วมกับ -fgcse-lm, ลูปที่มีลำดับการโหลด/การจัดเก็บสามารถเปลี่ยนแปลงได้
เพื่อโหลดก่อนลูปและเก็บหลังลูป
ไม่ได้เปิดใช้งานในระดับการเพิ่มประสิทธิภาพใดๆ
-fgcse-ลาส
เมื่อ -fgcse-ลาส เปิดใช้งานแล้ว ผ่านการกำจัดนิพจน์ย่อยทั่วไปทั่วโลก
กำจัดการโหลดซ้ำซ้อนที่มาหลังจากร้านค้าไปยังตำแหน่งหน่วยความจำเดียวกัน (ทั้ง
ความซ้ำซ้อนบางส่วนและทั้งหมด)
ไม่ได้เปิดใช้งานในระดับการเพิ่มประสิทธิภาพใดๆ
-fgcse-หลังรีโหลด
เมื่อ -fgcse-หลังรีโหลด เปิดใช้งานแล้ว จะดำเนินการผ่านการกำจัดโหลดซ้ำซ้อน
หลังจากโหลดซ้ำ จุดประสงค์ของบัตรนี้คือเพื่อขจัดการรั่วไหลที่ซ้ำซาก
-faggressive-loop-การเพิ่มประสิทธิภาพ
ตัวเลือกนี้บอกให้เครื่องมือเพิ่มประสิทธิภาพการวนซ้ำใช้ข้อจำกัดทางภาษาเพื่อให้ได้มาซึ่งขอบเขตสำหรับ
จำนวนการวนซ้ำของลูป นี่ถือว่ารหัสลูปไม่เรียกใช้
พฤติกรรมที่ไม่ได้กำหนดโดยตัวอย่างเช่นทำให้เกิดการล้นของจำนวนเต็มหรือนอกขอบเขต
การเข้าถึงอาร์เรย์ ขอบเขตของจำนวนการวนซ้ำของลูปถูกใช้เป็นแนวทาง
การคลายเกลียวและการปอกและการทดสอบการออกของลูปให้เหมาะสมที่สุด เปิดใช้งานตัวเลือกนี้แล้ว
โดยค่าเริ่มต้น
-funsafe-loop-การเพิ่มประสิทธิภาพ
ตัวเลือกนี้บอกให้ตัวเพิ่มประสิทธิภาพลูปสมมติว่าดัชนีลูปไม่ล้นและ
ที่วนซ้ำกับเงื่อนไขการออกที่ไม่สำคัญนั้นไม่สิ้นสุด สิ่งนี้ทำให้กว้างขึ้น
ช่วงของการเพิ่มประสิทธิภาพลูปแม้ว่าตัวเพิ่มประสิทธิภาพลูปเองไม่สามารถพิสูจน์ได้ว่าสิ่งเหล่านี้
สมมติฐานถูกต้อง ถ้าคุณใช้ -Wunsafe-loop-การเพิ่มประสิทธิภาพ, คอมไพเลอร์เตือนคุณ
ถ้ามันเจอลูปแบบนี้
-fcrossjumping
ดำเนินการแปลงข้ามกระโดด การแปลงนี้รวมรหัสที่เทียบเท่าและ
บันทึกขนาดรหัส รหัสผลลัพธ์อาจจะหรืออาจไม่ทำงานได้ดีกว่าไม่มีการข้าม
กระโดด
เปิดใช้งานในระดับ -O2, -O3, -คุณ.
-fauto-inc-ธ.ค
รวมการเพิ่มหรือลดที่อยู่ด้วยการเข้าถึงหน่วยความจำ บัตรผ่านนี้คือ
ข้ามสถาปัตยกรรมที่ไม่มีคำแนะนำเพื่อรองรับสิ่งนี้เสมอ
เปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่าในสถาปัตยกรรมที่รองรับสิ่งนี้
-fdce
ดำเนินการกำจัดโค้ดที่ไม่ทำงาน (DCE) บน RTL เปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่า
-fdse
ดำเนินการ dead store elimination (DSE) บน RTL เปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่า
-fif-แปลง
พยายามแปลงการข้ามแบบมีเงื่อนไขให้เทียบเท่าแบบไม่มีสาขา ซึ่งรวมถึง
การใช้การเคลื่อนไหวแบบมีเงื่อนไข ขั้นต่ำ สูงสุด ตั้งค่าสถานะและคำแนะนำ abs และลูกเล่นบางอย่าง
ทำได้โดยเลขคณิตมาตรฐาน การใช้การประมวลผลแบบมีเงื่อนไขกับชิปที่เป็นอยู่
พร้อมใช้งานถูกควบคุมโดย "if-conversion2"
เปิดใช้งานในระดับ -O, -O2, -O3, -คุณ.
-fif-การแปลง2
ใช้การดำเนินการตามเงื่อนไข (ถ้ามี) เพื่อแปลงการข้ามตามเงื่อนไขเป็น
เทียบเท่าน้อยกว่าสาขา
เปิดใช้งานในระดับ -O, -O2, -O3, -คุณ.
-fdelete-null-pointer-ตรวจสอบ
สมมติว่าโปรแกรมไม่สามารถละเลยพอยน์เตอร์ null ได้อย่างปลอดภัย และไม่มีโค้ดหรือข้อมูล
องค์ประกอบอยู่ที่นั่น สิ่งนี้ทำให้สามารถเพิ่มประสิทธิภาพการพับคงที่อย่างง่ายได้เลย
ระดับการเพิ่มประสิทธิภาพ นอกจากนี้ การเพิ่มประสิทธิภาพอื่นๆ ที่ส่งผ่านใน GCC ใช้แฟล็กนี้ไปยัง
ควบคุมการวิเคราะห์กระแสข้อมูลทั่วโลกที่ขจัดการตรวจสอบที่ไร้ประโยชน์สำหรับพอยน์เตอร์ที่เป็นโมฆะ
สิ่งเหล่านี้ถือว่าถ้าพอยน์เตอร์ถูกตรวจสอบหลังจากมันถูกยกเลิกการอ้างอิงแล้ว มัน
ไม่สามารถเป็นโมฆะได้
อย่างไรก็ตาม โปรดทราบว่าในบางสภาพแวดล้อม ข้อสันนิษฐานนี้ไม่เป็นความจริง ใช้
-fno-delete-null-pointer-checks เพื่อปิดใช้งานการเพิ่มประสิทธิภาพนี้สำหรับโปรแกรมที่ขึ้นอยู่กับ
เกี่ยวกับพฤติกรรมนั้น
เป้าหมายบางรายการ โดยเฉพาะเป้าหมายที่ฝังไว้ ปิดใช้งานตัวเลือกนี้ในทุกระดับ มิฉะนั้น
เปิดใช้งานในทุกระดับ: -O0, -O1, -O2, -O3, -คุณ. บัตรผ่านที่ใช้ข้อมูล
เปิดใช้งานอย่างอิสระในระดับการเพิ่มประสิทธิภาพที่แตกต่างกัน
-fdevirtualize
พยายามแปลงการโทรเป็นฟังก์ชันเสมือนเป็นการโทรโดยตรง ทำได้ทั้งสองอย่าง
ภายในขั้นตอนและระหว่างขั้นตอนโดยเป็นส่วนหนึ่งของ inlining ทางอ้อม
("-findirect-inlining") และการแพร่กระจายคงที่ระหว่างขั้นตอน (-FIPA-CP). เปิดใช้งาน
ในระดับ -O2, -O3, -คุณ.
-การเพิ่มประสิทธิภาพราคาแพง
ดำเนินการปรับให้เหมาะสมเล็กน้อยจำนวนหนึ่งซึ่งค่อนข้างแพง
เปิดใช้งานในระดับ -O2, -O3, -คุณ.
-ฟรี
พยายามลบคำแนะนำส่วนขยายที่ซ้ำซ้อน สิ่งนี้มีประโยชน์อย่างยิ่งสำหรับ
สถาปัตยกรรม x86-64 ซึ่งขยายเป็นศูนย์โดยปริยายในการลงทะเบียน 64 บิตหลังจาก
เขียนลงครึ่งล่าง 32 บิต
เปิดใช้งานสำหรับ x86 ที่ระดับ -O2, -O3.
-foptimize-ลงทะเบียนย้าย
- เฟรกมูฟ
พยายามกำหนดหมายเลขทะเบียนใหม่ในคำสั่งย้ายและตามตัวถูกดำเนินการของผู้อื่น
คำแนะนำง่ายๆ เพื่อเพิ่มจำนวนการผูกทะเบียนให้สูงสุด นี่คือ
มีประโยชน์อย่างยิ่งกับเครื่องที่มีคำสั่งตัวดำเนินการสองตัว
หมายเหตุ - เฟรกมูฟ และ -foptimize-ลงทะเบียนย้าย เป็นการเพิ่มประสิทธิภาพเดียวกัน
เปิดใช้งานในระดับ -O2, -O3, -คุณ.
-fira-อัลกอริทึม=ขั้นตอนวิธี
ใช้อัลกอริธึมการระบายสีที่ระบุสำหรับตัวจัดสรรรีจิสเตอร์แบบรวม NS
ขั้นตอนวิธี อาร์กิวเมนต์สามารถ ลำดับความสำคัญซึ่งระบุสีลำดับความสำคัญของ Chow หรือ CB,
ซึ่งระบุสี Chaitin-Briggs ไม่มีการระบายสี Chaitin-Briggs
สำหรับสถาปัตยกรรมทั้งหมด แต่สำหรับเป้าหมายเหล่านั้นที่สนับสนุน มันคือค่าเริ่มต้น
เพราะมันสร้างรหัสที่ดีกว่า
-fira-ภาค=ภูมิภาค
ใช้ภูมิภาคที่ระบุสำหรับตัวจัดสรรการลงทะเบียนแบบรวม NS ภูมิภาค อาร์กิวเมนต์
ควรเป็นอย่างใดอย่างหนึ่งต่อไปนี้:
ทั้งหมด ใช้ลูปทั้งหมดเป็นขอบเขตการจัดสรรรีจิสเตอร์ สิ่งนี้สามารถให้ผลลัพธ์ที่ดีที่สุดสำหรับ
เครื่องที่มีชุดทะเบียนขนาดเล็กและ/หรือผิดปกติ
ผสม
ใช้ลูปทั้งหมดยกเว้นลูปที่มีแรงกดเล็ก ๆ เป็นภูมิภาค นี้
ค่ามักจะให้ผลลัพธ์ที่ดีที่สุดในกรณีส่วนใหญ่และสำหรับสถาปัตยกรรมส่วนใหญ่และ
ถูกเปิดใช้งานโดยค่าเริ่มต้นเมื่อคอมไพล์ด้วยการปรับความเร็วให้เหมาะสม (-O, -O2, ...)
หนึ่ง ใช้ฟังก์ชันทั้งหมดเป็นภูมิภาคเดียว ซึ่งมักจะส่งผลให้โค้ดที่เล็กที่สุด
ขนาดและเปิดใช้งานโดยค่าเริ่มต้นสำหรับ -คุณ or -O0.
-fira-hoist-ความดัน
ใช้ IRA เพื่อประเมินแรงกดของการลงทะเบียนในรหัส hoisting pass สำหรับการตัดสินใจรอก
นิพจน์ ตัวเลือกนี้มักจะส่งผลให้โค้ดมีขนาดเล็กลง แต่อาจทำให้ .ช้าลง
คอมไพเลอร์ลง
ตัวเลือกนี้เปิดใช้งานที่ระดับ -คุณ สำหรับเป้าหมายทั้งหมด
-fira-loop-ความดัน
ใช้ IRA เพื่อประเมินแรงกดดันของรีจิสเตอร์ในลูปสำหรับการตัดสินใจย้ายค่าคงที่ของลูป
ตัวเลือกนี้มักจะส่งผลให้มีการสร้างโค้ดที่เร็วขึ้นและเล็กลงบนเครื่องด้วย
ไฟล์รีจิสเตอร์ขนาดใหญ่ (>= 32 รีจิสเตอร์) แต่อาจทำให้คอมไพเลอร์ทำงานช้าลง
ตัวเลือกนี้เปิดใช้งานที่ระดับ -O3 สำหรับเป้าหมายบางอย่าง
-fno-ira-share-save-สล็อต
ปิดใช้งานการแชร์สแตกสล็อตที่ใช้สำหรับบันทึกการเรียกใช้ฮาร์ดรีจิสเตอร์ผ่าน
โทร. ฮาร์ดรีจิสเตอร์แต่ละตัวจะได้รับสแต็กสล็อตแยกกัน และด้วยเหตุนี้ ฟังก์ชันสแต็ก
เฟรมมีขนาดใหญ่ขึ้น
-fno-ira-share-รั่วไหล-สล็อต
ปิดใช้งานการแชร์สล็อตสแต็คที่จัดสรรสำหรับการลงทะเบียนหลอก แต่ละหลอกลงทะเบียน
ที่ไม่ได้รับฮาร์ดรีจิสเตอร์จะได้รับสแต็กสล็อตแยกต่างหากและด้วยเหตุนี้ฟังก์ชันผลลัพธ์
เฟรมสแต็กมีขนาดใหญ่กว่า
-fira-verbose=n
ควบคุมการใช้คำฟุ่มเฟือยของไฟล์ดัมพ์สำหรับตัวจัดสรรการลงทะเบียนแบบรวม NS
ค่าเริ่มต้นคือ 5. ถ้าค่า n มากกว่าหรือเท่ากับ 10 เอาต์พุตการถ่ายโอนข้อมูลจะถูกส่ง
เพื่อ stderr โดยใช้รูปแบบเดียวกับ n ลบ 10
-fdelayed-สาขา
หากเครื่องเป้าหมายรองรับ ให้ลองจัดลำดับคำสั่งใหม่เพื่อโจมตี
ช่องคำสั่งใช้ได้หลังจากคำสั่งสาขาล่าช้า
เปิดใช้งานในระดับ -O, -O2, -O3, -คุณ.
-fschedule-อินน์
หากเครื่องเป้าหมายรองรับ ให้ลองจัดลำดับคำแนะนำใหม่เพื่อกำจัด
การดำเนินการหยุดชะงักเนื่องจากข้อมูลที่จำเป็นไม่พร้อมใช้งาน ซึ่งช่วยให้เครื่องที่
มีจุดลอยตัวช้าหรือคำแนะนำในการโหลดหน่วยความจำโดยอนุญาตให้คำสั่งอื่น ๆ
ออกจนกว่าจะได้ผลลัพธ์ของการโหลดหรือคำสั่งทศนิยม
เปิดใช้งานในระดับ -O2, -O3.
-fschedule-insns2
คล้ายกับ -fschedule-อินน์แต่ขอผ่านตารางสอนเพิ่มเติม
หลังจากจัดสรรการลงทะเบียนเรียบร้อยแล้ว สิ่งนี้มีประโยชน์อย่างยิ่งกับเครื่องที่มี a
จำนวนรีจิสเตอร์ค่อนข้างน้อยและคำสั่งในการโหลดหน่วยความจำใช้เวลามากกว่า
หนึ่งรอบ
เปิดใช้งานในระดับ -O2, -O3, -คุณ.
-fno-กำหนด-interblock
อย่ากำหนดเวลาคำแนะนำข้ามกลุ่มพื้นฐาน โดยปกติจะเปิดใช้งานโดยค่าเริ่มต้น
เมื่อกำหนดเวลาก่อนจัดสรรจัดสรร เช่น กับ -fschedule-อินน์ หรือที่ -O2 or
สูงกว่า
-fno-กำหนดการ-ข้อมูลจำเพาะ
ไม่อนุญาตให้มีการเคลื่อนไหวแบบเก็งกำไรของคำแนะนำที่ไม่โหลด โดยปกติจะเปิดใช้งานโดย
ค่าเริ่มต้นเมื่อกำหนดเวลาก่อนการจัดสรรการลงทะเบียนเช่นกับ -fschedule-อินน์ หรือที่
-O2 หรือสูงกว่า
-fsched-ความดัน
เปิดใช้งานการตั้งเวลา insn ไวต่อแรงกดก่อนลงทะเบียนการจัดสรร นี้
เหมาะสมเมื่อกำหนดเวลาก่อนเปิดใช้งานการจัดสรรการลงทะเบียน เช่น with
-fschedule-อินน์ หรือที่ -O2 หรือสูงกว่า. การใช้ตัวเลือกนี้สามารถปรับปรุงการสร้าง
รหัสและลดขนาดโดยป้องกันไม่ให้ความดันการลงทะเบียนเพิ่มขึ้นเหนือจำนวน
ของฮาร์ดรีจิสเตอร์ที่มีอยู่และการรั่วไหลที่ตามมาในการจัดสรรรีจิสเตอร์
-fsched-spec-โหลด
อนุญาตการเก็งกำไรของคำแนะนำการโหลดบางส่วน สิ่งนี้จะสมเหตุสมผลเมื่อ
การจัดกำหนดการก่อนการจัดสรรลงทะเบียน เช่น กับ -fschedule-อินน์ หรือที่ -O2 หรือสูงกว่า
-fsched-spec-load-อันตราย
อนุญาตให้มีการเก็งกำไรคำแนะนำการโหลดเพิ่มเติม สิ่งนี้จะสมเหตุสมผลเมื่อ
การจัดกำหนดการก่อนการจัดสรรลงทะเบียน เช่น กับ -fschedule-อินน์ หรือที่ -O2 หรือสูงกว่า
-fsched-stall-inns
-fsched-จนตรอก-insns=n
กำหนดจำนวน insns (ถ้ามี) สามารถย้ายก่อนเวลาอันควรจากคิวของจนตรอก
insns ลงในรายการพร้อมในระหว่างการกำหนดเวลาที่สอง -fno-sched-จนตรอก-insns
หมายความว่าไม่มีการย้าย insns ก่อนเวลาอันควร -fsched-stalled-insns=0 หมายความว่าไม่มี
จำกัดจำนวนการเข้าคิวที่สามารถย้ายก่อนกำหนดได้ -fsched-stall-inns
ไม่มีค่าเท่ากับ -fsched-stalled-insns=1.
-fsched-stall-insns-dep
-fsched-จนตรอก-insns-dep=n
กำหนดจำนวน insn (รอบ) ที่ถูกตรวจสอบสำหรับการพึ่งพา insn . ที่หยุดชะงัก
นั่นคือผู้สมัครเพื่อลบออกจากคิวของ insns ที่จนตรอกก่อนเวลาอันควร นี้มี
มีผลเฉพาะในช่วงเวลาที่สองผ่านกำหนดการและก็ต่อเมื่อ -fsched-stall-inns is
มือสอง -fno-sched-จนตรอก-insns-dep เทียบเท่ากับ -fsched-stalled-insns-dep=0.
-fsched-stall-insns-dep ไม่มีค่าเท่ากับ
-fsched-stalled-insns-dep=1.
-fsched2-ใช้-ซุปเปอร์บล็อก
เมื่อจัดกำหนดการหลังจากการจัดสรรการลงทะเบียน ให้ใช้การตั้งเวลา superblock สิ่งนี้ทำให้
การเคลื่อนไหวข้ามขอบเขตบล็อกพื้นฐาน ส่งผลให้กำหนดการเร็วขึ้น ตัวเลือกนี้คือ
ทดลอง เนื่องจากคำอธิบายเครื่องทั้งหมดไม่ได้ใช้โดย GCC จำลอง CPU ให้ใกล้เคียงพอ
เพื่อหลีกเลี่ยงผลลัพธ์ที่ไม่น่าเชื่อถือจากอัลกอริทึม
สิ่งนี้เหมาะสมเมื่อกำหนดเวลาหลังจากการจัดสรรการลงทะเบียน เช่น with
-fschedule-insns2 หรือที่ -O2 หรือสูงกว่า
-fsched-group-ฮิวริสติก
เปิดใช้งานฮิวริสติกกลุ่มในตัวจัดกำหนดการ ฮิวริสติกนี้สนับสนุนการสอน
ที่อยู่ในกลุ่มกำหนดการ สิ่งนี้ถูกเปิดใช้งานโดยค่าเริ่มต้นเมื่อกำหนดเวลาเป็น
เปิดใช้งาน เช่นกับ -fschedule-อินน์ or -fschedule-insns2 หรือที่ -O2 หรือสูงกว่า
-fsched-สำคัญเส้นทาง-ฮิวริสติก
เปิดใช้งานฮิวริสติกพาธวิกฤตในตัวจัดกำหนดการ ฮิวริสติกนี้โปรดปราน
คำแนะนำบนเส้นทางวิกฤต สิ่งนี้ถูกเปิดใช้งานโดยค่าเริ่มต้นเมื่อกำหนดเวลาเป็น
เปิดใช้งาน เช่นกับ -fschedule-อินน์ or -fschedule-insns2 หรือที่ -O2 หรือสูงกว่า
-fsched-spec-insn-ฮิวริสติก
เปิดใช้งานฮิวริสติกของคำสั่งเก็งกำไรในตัวกำหนดตารางเวลา ฮิวริสติกนี้โปรดปราน
คำแนะนำการเก็งกำไรที่มีจุดอ่อนของการพึ่งพาอาศัยกันมากขึ้น เปิดใช้งานโดยค่าเริ่มต้น
เมื่อเปิดใช้งานการตั้งเวลา เช่น with -fschedule-อินน์ or -fschedule-insns2 หรือที่ -O2
หรือสูงกว่า
-fsched-อันดับฮิวริสติก
เปิดใช้งานอันดับ heuristic ในตัวจัดกำหนดการ ฮิวริสติกนี้สนับสนุนการสอน
เป็นของบล็อกพื้นฐานที่มีขนาดหรือความถี่มากกว่า เปิดใช้งานโดยค่าเริ่มต้น
เมื่อเปิดใช้งานการตั้งเวลา เช่น with -fschedule-อินน์ or -fschedule-insns2 หรือที่ -O2
หรือสูงกว่า
-fsched-last-insn-ฮิวริสติก
เปิดใช้งานฮิวริสติกของคำสั่งสุดท้ายในตัวจัดกำหนดการ ฮิวริสติกนี้สนับสนุน
คำสั่งที่น้อยขึ้นอยู่กับคำสั่งสุดท้ายที่กำหนดไว้ เปิดใช้งานแล้ว
โดยค่าเริ่มต้นเมื่อเปิดใช้งานการตั้งเวลา เช่น กับ -fschedule-อินน์ or -fschedule-insns2
หรือที่ -O2 หรือสูงกว่า
-fsched-dep-count-ฮิวริสติก
เปิดใช้งานฮิวริสติกการนับแบบขึ้นต่อกันในตัวจัดกำหนดการ ฮิวริสติกนี้สนับสนุน
คำแนะนำที่มีคำแนะนำเพิ่มเติมขึ้นอยู่กับมัน เปิดใช้งานโดยค่าเริ่มต้น
เมื่อเปิดใช้งานการตั้งเวลา เช่น with -fschedule-อินน์ or -fschedule-insns2 หรือที่ -O2
หรือสูงกว่า
-freschedule-modulo-scheduled-ลูป
การจัดกำหนดการแบบโมดูโลดำเนินการก่อนการจัดกำหนดการแบบเดิม ถ้าลูปเป็นโมดูโล
กำหนดการ กำหนดการผ่านกำหนดการภายหลังอาจเปลี่ยนกำหนดการได้ ใช้ตัวเลือกนี้เพื่อ
ควบคุมพฤติกรรมนั้น
-fselective-การตั้งเวลา
คำแนะนำกำหนดการโดยใช้อัลกอริธึมการจัดกำหนดการแบบเลือก เรียกใช้การจัดตารางเวลาที่เลือก
แทนที่จะผ่านกำหนดการแรก
-fselective-การตั้งเวลา2
คำแนะนำกำหนดการโดยใช้อัลกอริธึมการจัดกำหนดการแบบเลือก เรียกใช้การจัดตารางเวลาที่เลือก
แทนที่จะผ่านกำหนดการที่สอง
-fsel-sched-pipeling
เปิดใช้งานการวางท่อซอฟต์แวร์ของลูปในสุดระหว่างการตั้งเวลาแบบเลือก นี้
ตัวเลือกไม่มีผลเว้นแต่หนึ่งใน -fselective-การตั้งเวลา or -fselective-การตั้งเวลา2
เปิดอยู่
-fsel-sched-pipelining-outer-loop
เมื่อไพพ์ไลน์วนซ้ำระหว่างการจัดกำหนดการแบบเลือก ไปป์ไลน์ยังวนรอบนอกไปป์ไลน์ด้วย นี้
ตัวเลือกไม่มีผลเว้นแต่ -fsel-sched-pipeling เปิดอยู่
-fshrink-ห่อ
ปล่อยฟังก์ชัน prologues ก่อนส่วนต่างๆ ของฟังก์ชันที่ต้องการเท่านั้น แทนที่จะเป็น at
ด้านบนของฟังก์ชัน แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่า
-fcaller-บันทึก
เปิดใช้งานการจัดสรรค่าให้กับการลงทะเบียนที่ถูกปิดโดยการเรียกใช้ฟังก์ชันโดย
การส่งคำสั่งพิเศษเพื่อบันทึกและกู้คืนรีจิสเตอร์รอบการโทรดังกล่าว เช่น
การจัดสรรจะทำได้ก็ต่อเมื่อดูเหมือนว่าจะส่งผลให้โค้ดดีขึ้นเท่านั้น
ตัวเลือกนี้จะเปิดใช้งานตามค่าเริ่มต้นเสมอในเครื่องบางเครื่อง โดยปกติแล้วเครื่องที่มี
ไม่มีการลงทะเบียนที่สงวนไว้สำหรับการโทรเพื่อใช้แทน
เปิดใช้งานในระดับ -O2, -O3, -คุณ.
-fombine-stack-adjustments
ติดตามการปรับสแต็ค (ดันและป๊อป) และการอ้างอิงหน่วยความจำสแต็กแล้วลอง
เพื่อหาวิธีรวมเข้าด้วยกัน
เปิดใช้งานโดยค่าเริ่มต้นที่ -O1 และสูงกว่า
-fconserve-กอง
พยายามลดการใช้สแต็กให้เหลือน้อยที่สุด คอมไพเลอร์พยายามใช้พื้นที่สแต็กน้อยลง แม้กระทั่ง
ถ้านั่นทำให้โปรแกรมช้าลง ตัวเลือกนี้หมายถึงการตั้งค่า ใหญ่-stack-frame
พารามิเตอร์เป็น 100 และ the ใหญ่-stack-กรอบ-เติบโต พารามิเตอร์เป็น 400
-ftree-reassoc
ทำการ reassociation บนต้นไม้ แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่า
-ftree-ก่อน
ดำเนินการกำจัดความซ้ำซ้อนบางส่วน (PRE) บนต้นไม้ แฟล็กนี้เปิดใช้งานโดย
ค่าเริ่มต้นที่ -O2 และ -O3.
-ftree-บางส่วน-pre
ทำให้การกำจัดความซ้ำซ้อนบางส่วน (PRE) รุนแรงขึ้น แฟล็กนี้เปิดใช้งานโดย
ค่าเริ่มต้นที่ -O3.
-ftree-forwprop
ดำเนินการขยายพันธุ์ไปข้างหน้าบนต้นไม้ แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O และ
สูงกว่า
-ฟรีฟรี
ดำเนินการกำจัดซ้ำซ้อนเต็มรูปแบบ (FRE) บนต้นไม้ ความแตกต่างระหว่าง FRE และ
PRE คือ FRE พิจารณาเฉพาะนิพจน์ที่คำนวณในทุกเส้นทางที่นำไปสู่
การคำนวณซ้ำซ้อน การวิเคราะห์นี้เร็วกว่า PRE แม้ว่าจะเปิดเผยน้อยกว่า
ความซ้ำซ้อน แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่า
-ftree-piprop
ดำเนินการยกของจากตัวชี้แบบมีเงื่อนไขบนต้นไม้ บัตรนี้เปิดใช้งานโดย
ค่าเริ่มต้นที่ -O และสูงกว่า
-fhoist-adjacent-โหลด
รอกยกน้ำหนักจากทั้งสองกิ่งของ if-then-else ถ้าโหลดมาจาก
ตำแหน่งที่อยู่ติดกันในโครงสร้างเดียวกันและสถาปัตยกรรมเป้าหมายมีเงื่อนไข
ย้ายคำสั่ง แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O2 และสูงกว่า
-ftree-คัดลอก-prop
ดำเนินการคัดลอกการขยายพันธุ์บนต้นไม้ บัตรผ่านนี้ช่วยขจัดการดำเนินการคัดลอกที่ไม่จำเป็น
แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่า
-fipa-บริสุทธิ์-const
ค้นพบว่าฟังก์ชันใดบริสุทธิ์หรือคงที่ เปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่า
-fipa-อ้างอิง
ค้นหาว่าตัวแปรสแตติกใดไม่หนีหน่วยการคอมไพล์ เปิดใช้งานโดย
ค่าเริ่มต้นที่ -O และสูงกว่า
-FIPA-PTA
ทำการวิเคราะห์ตัวชี้ระหว่างขั้นตอนและการปรับเปลี่ยนระหว่างขั้นตอนและ
การวิเคราะห์อ้างอิง ตัวเลือกนี้อาจทำให้หน่วยความจำและเวลาคอมไพล์มากเกินไปบน
หน่วยรวบรวมขนาดใหญ่ ไม่ได้เปิดใช้งานตามค่าเริ่มต้นที่ระดับการเพิ่มประสิทธิภาพใดๆ
-fipa-โปรไฟล์
ดำเนินการเผยแพร่โปรไฟล์ระหว่างขั้นตอน เรียกฟังก์ชันจากความเย็นเท่านั้น
ฟังก์ชั่นถูกทำเครื่องหมายว่าเย็น ยังทำงานเพียงครั้งเดียว (เช่น "เย็น"
"noreturn" ตัวสร้างคงที่หรือตัวทำลาย) ถูกระบุ ฟังก์ชั่นเย็นและ
วนรอบการทำงานของฟังก์ชั่นน้อยลงเมื่อถูกปรับให้เหมาะสมสำหรับขนาด เปิดใช้งานโดย
ค่าเริ่มต้นที่ -O และสูงกว่า
-FIPA-CP
ดำเนินการขยายพันธุ์คงที่ระหว่างขั้นตอน การเพิ่มประสิทธิภาพนี้จะวิเคราะห์โปรแกรม
เพื่อกำหนดว่าเมื่อใดที่ค่าที่ส่งผ่านไปยังฟังก์ชันเป็นค่าคงที่แล้วจึงปรับให้เหมาะสม
ตามนั้น การเพิ่มประสิทธิภาพนี้สามารถเพิ่มประสิทธิภาพได้อย่างมากหาก
แอปพลิเคชันมีค่าคงที่ส่งผ่านไปยังฟังก์ชัน แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่
-O2, -คุณ และ -O3.
-fipa-cp-โคลน
ทำการโคลนฟังก์ชันเพื่อทำให้การขยายพันธุ์คงที่ระหว่างขั้นตอนแข็งแกร่งขึ้น เมื่อไหร่
เปิดใช้งานการแพร่กระจายคงที่ระหว่างขั้นตอนดำเนินการโคลนฟังก์ชันเมื่อ
ฟังก์ชันที่มองเห็นได้จากภายนอกสามารถเรียกได้ด้วยอาร์กิวเมนต์คงที่ เพราะสิ่งนี้
การเพิ่มประสิทธิภาพสามารถสร้างสำเนาของฟังก์ชันได้หลายชุด ซึ่งอาจเพิ่มขึ้นอย่างมาก
ขนาดรหัส (ดู --พารามิเตอร์ ipcp-หน่วยเติบโต=ความคุ้มค่า). แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่
-O3.
-ftree-อ่างล้างจาน
ทำการเคลื่อนที่ไปข้างหน้าของร้านค้าบนต้นไม้ แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O และ
สูงกว่า
-ftree-บิต-ccp
ดำเนินการขยายพันธุ์คงที่แบบมีเงื่อนไขบิตแบบเบาบางบนต้นไม้และกระจายตัวชี้
ข้อมูลการจัดตำแหน่ง บัตรผ่านนี้ใช้ได้เฉพาะกับตัวแปรสเกลาร์ท้องถิ่นและ is
เปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่า มันต้อง -ftree-ccp เปิดใช้งาน.
-ftree-ccp
ดำเนินการขยายพันธุ์แบบมีเงื่อนไขแบบเบาบาง (CCP) บนต้นไม้ ผ่านนี้เท่านั้น
ทำงานบนตัวแปรสเกลาร์ท้องถิ่นและเปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่า
-ftree-สวิตช์แปลง
ดำเนินการแปลงการกำหนดค่าเริ่มต้นอย่างง่ายโดยสลับเป็นการกำหนดค่าเริ่มต้นจากa
อาร์เรย์สเกลาร์ แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O2 และสูงกว่า
-ftree-tail-ผสาน
มองหาลำดับรหัสที่เหมือนกัน เมื่อพบแล้ว ให้แทนที่อันหนึ่งด้วยการข้ามไปยังอีกอันหนึ่ง
การเพิ่มประสิทธิภาพนี้เรียกว่าการรวมหางหรือการกระโดดข้าม แฟล็กนี้เปิดใช้งานโดย
ค่าเริ่มต้นที่ -O2 และสูงกว่า เวลารวบรวมในบัตรผ่านนี้สามารถ จำกัด ได้โดยใช้
การเปรียบเทียบหางรวมสูงสุด พารามิเตอร์และ max-tail-merge-วนซ้ำ พารามิเตอร์.
-ftree-dce
ดำเนินการกำจัดรหัสที่ตายแล้ว (DCE) บนต้นไม้ แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O
และสูงกว่า
-ftree-builtin-โทร-dce
ดำเนินการตามเงื่อนไข dead code elimination (DCE) สำหรับการเรียกใช้ฟังก์ชันในตัวที่
อาจตั้งค่า "errno" แต่อย่างอื่นไม่มีผลข้างเคียง แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้น
at -O2 และสูงกว่า if -คุณ ไม่ได้ระบุไว้ด้วย
-ftree-dominator-opts
ดำเนินการล้างสเกลาร์อย่างง่ายที่หลากหลาย (การแพร่กระจายแบบคงที่/การคัดลอก ความซ้ำซ้อน
การกำจัด การขยายพันธุ์ช่วง และการลดความซับซ้อนของนิพจน์) ขึ้นอยู่กับผู้ครอบงำ
การข้ามต้นไม้ นอกจากนี้ยังดำเนินการกระโดดเกลียว (เพื่อลดการข้ามไปยังการกระโดด) นี้
แฟล็กถูกเปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่า
-ftree-dse
ดำเนินการกำจัดซากร้าน (DSE) บนต้นไม้ ร้านค้าที่ตายแล้วคือร้านค้าในความทรงจำ
ตำแหน่งที่ต่อมาถูกเขียนทับโดยร้านค้าอื่นโดยไม่มีการโหลดใด ๆ แทรกแซง ใน
กรณีนี้ร้านค้าก่อนหน้านี้สามารถลบได้ แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O และ
สูงกว่า
-ftree-ช
ทำการคัดลอกส่วนหัวของลูปบนต้นไม้ สิ่งนี้มีประโยชน์เพราะมันเพิ่มขึ้น
ประสิทธิภาพของการเพิ่มประสิทธิภาพการเคลื่อนไหวของโค้ด นอกจากนี้ยังช่วยประหยัดหนึ่งกระโดด ธงนี้คือ
เปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่า ไม่ได้เปิดใช้งานสำหรับ -คุณเพราะมันมักจะ
เพิ่มขนาดรหัส
-ftree-วน-เพิ่มประสิทธิภาพ
ทำการเพิ่มประสิทธิภาพลูปบนต้นไม้ แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O และ
สูงกว่า
-ftree-วน-เชิงเส้น
ดำเนินการแปลงการแลกเปลี่ยนแบบวนซ้ำบนต้นไม้ เหมือนกับ -floop-แลกเปลี่ยน. ใช้
การแปลงรหัสนี้ ต้องกำหนดค่า GCC ด้วย --กับ-ppl และ --กับอุดตัน ไปยัง
เปิดใช้งานโครงสร้างพื้นฐานการแปลงลูปกราไฟท์
-floop-แลกเปลี่ยน
ดำเนินการแปลงการแลกเปลี่ยนแบบวนซ้ำบนลูป สลับสองลูปซ้อนกัน
สลับลูปด้านในและด้านนอก ตัวอย่างเช่นกำหนดลูปเช่น:
DO J = 1, ม
ฉัน = 1, N
A(J,I) = A(J,I) * C
สิ้นสุด
สิ้นสุด
การแลกเปลี่ยนแบบวนซ้ำแปลงลูปราวกับว่ามันถูกเขียน:
ฉัน = 1, N
DO J = 1, ม
A(J,I) = A(J,I) * C
สิ้นสุด
สิ้นสุด
ซึ่งจะเป็นประโยชน์เมื่อ "N" มีขนาดใหญ่กว่าแคช เพราะใน Fortran ตัว
องค์ประกอบของอาร์เรย์จะถูกเก็บไว้ในหน่วยความจำแบบต่อเนื่องกันโดยคอลัมน์และต้นฉบับ
วนซ้ำในแถวซึ่งอาจทำให้แคชพลาดในการเข้าถึงแต่ละครั้ง นี้
การเพิ่มประสิทธิภาพใช้ได้กับทุกภาษาที่รองรับโดย GCC และไม่จำกัดเฉพาะ
ฟอร์ทราน. หากต้องการใช้การแปลงรหัสนี้ ต้องกำหนดค่า GCC ด้วย --กับ-ppl
และ --กับอุดตัน เพื่อเปิดใช้งานโครงสร้างพื้นฐานการแปลงลูปกราไฟท์
-floop-สตริป-เหมือง
ทำการแปลงการทำเหมืองแบบวนซ้ำบนลูป การขุดแบบ Strip แยกลูปเป็น
สองลูปซ้อนกัน วงนอกมีความก้าวหน้าเท่ากับขนาดสตริปและวงใน
วงมีความก้าวหน้าของวงเดิมภายในแถบ สามารถเปลี่ยนความยาวของแถบได้
โดยใช้โปรแกรม ห่วง-บล็อค-ไทล์-ขนาด พารามิเตอร์. ตัวอย่างเช่นกำหนดลูปเช่น:
ฉัน = 1, N
ก(ฉัน) = ก(ฉัน) + ค
สิ้นสุด
การทำเหมืองแบบวงรอบจะแปลงการวนซ้ำราวกับว่ามันถูกเขียนไว้ว่า:
DO II = 1, ยังไม่มีข้อความ, 51
DO I = II, นาที (II + 50, N)
ก(ฉัน) = ก(ฉัน) + ค
สิ้นสุด
สิ้นสุด
การเพิ่มประสิทธิภาพนี้ใช้กับทุกภาษาที่รองรับโดย GCC และไม่จำกัดเฉพาะ
ฟอร์ทราน. หากต้องการใช้การแปลงรหัสนี้ ต้องกำหนดค่า GCC ด้วย --กับ-ppl
และ --กับอุดตัน เพื่อเปิดใช้งานโครงสร้างพื้นฐานการแปลงลูปกราไฟท์
-floop-บล็อก
ดำเนินการแปลงการบล็อกแบบวนซ้ำบนลูป การปิดกั้นแถบทุ่นระเบิดแต่ละวงใน
ลูปรังเพื่อให้หน่วยความจำเข้าถึงลูปองค์ประกอบพอดีภายในแคช NS
ความยาวแถบสามารถเปลี่ยนแปลงได้โดยใช้ปุ่ม ห่วง-บล็อค-ไทล์-ขนาด พารามิเตอร์. ตัวอย่างเช่น,
ให้ลูปเช่น:
ฉัน = 1, N
DO J = 1, ม
A(J,I) = B(I) + C(J)
สิ้นสุด
สิ้นสุด
การบล็อกการวนซ้ำจะเปลี่ยนการวนซ้ำราวกับว่ามันถูกเขียนขึ้น:
DO II = 1, ยังไม่มีข้อความ, 51
DO เจเจ = 1, ม, 51
DO I = II, นาที (II + 50, N)
DO J = JJ, มิน (JJ + 50, M)
A(J,I) = B(I) + C(J)
สิ้นสุด
สิ้นสุด
สิ้นสุด
สิ้นสุด
ซึ่งจะเป็นประโยชน์เมื่อ "M" มีขนาดใหญ่กว่าแคชเพราะวงในสุด
วนซ้ำข้อมูลจำนวนน้อยกว่าซึ่งสามารถเก็บไว้ในแคชได้ นี้
การเพิ่มประสิทธิภาพใช้ได้กับทุกภาษาที่รองรับโดย GCC และไม่จำกัดเฉพาะ
ฟอร์ทราน. หากต้องการใช้การแปลงรหัสนี้ ต้องกำหนดค่า GCC ด้วย --กับ-ppl
และ --กับอุดตัน เพื่อเปิดใช้งานโครงสร้างพื้นฐานการแปลงลูปกราไฟท์
-fgraphite-เอกลักษณ์
เปิดใช้งานการแปลงข้อมูลประจำตัวสำหรับกราไฟท์ สำหรับทุก SCoP เราสร้าง
การแสดง polyhedral และแปลงกลับเป็น gimple โดยใช้ -fgraphite-เอกลักษณ์
เราสามารถตรวจสอบต้นทุนหรือประโยชน์ของการแปลง GIMPLE -> GRAPHITE -> GIMPLE ได้
การเพิ่มประสิทธิภาพขั้นต่ำบางอย่างยังดำเนินการโดยตัวสร้างโค้ด CLooG เช่น index
การแยกและกำจัดรหัสตายในลูป
-floop-nest-ปรับให้เหมาะสม
เปิดใช้งานตัวเพิ่มประสิทธิภาพการซ้อนลูปตาม ISL นี่คือเครื่องมือเพิ่มประสิทธิภาพการรังแบบวนซ้ำทั่วไปตาม
เกี่ยวกับอัลกอริธึมการปรับให้เหมาะสมของดาวพลูโต มันคำนวณโครงสร้างลูปที่ปรับให้เหมาะสมสำหรับ
ข้อมูลท้องถิ่นและความเท่าเทียมกัน ตัวเลือกนี้เป็นแบบทดลอง
-flop-parallelize-ทั้งหมด
ใช้การวิเคราะห์การพึ่งพาข้อมูลกราไฟท์เพื่อระบุลูปที่สามารถขนานกันได้
ขนานลูปทั้งหมดที่สามารถวิเคราะห์ได้เพื่อไม่ให้มีการพึ่งพาแบบวนซ้ำ
โดยไม่ต้องตรวจสอบว่าการขนานลูปนั้นทำกำไรได้
-fcheck-ข้อมูล-deps
เปรียบเทียบผลลัพธ์ของตัววิเคราะห์การพึ่งพาข้อมูลหลายตัว ตัวเลือกนี้ใช้สำหรับ
การดีบักตัววิเคราะห์การพึ่งพาข้อมูล
-ftree-วน-ถ้า-แปลง
พยายามเปลี่ยนเงื่อนไขกระโดดในวงในสุดเป็นสาขาน้อย
เทียบเท่า จุดประสงค์คือการเอาการควบคุมการไหลออกจากวงในสุดตามลำดับ
เพื่อปรับปรุงความสามารถในการส่งเวคเตอร์เพื่อจัดการกับลูปเหล่านี้ นี่คือ
เปิดใช้งานโดยค่าเริ่มต้นหากเปิดใช้งาน vectorization
-ftree-loop-if-convert-stores
พยายามแปลงการข้ามแบบมีเงื่อนไขที่มีการเขียนหน่วยความจำด้วย นี้
การแปลงอาจไม่ปลอดภัยสำหรับโปรแกรมแบบมัลติเธรดเนื่องจากแปลงแบบมีเงื่อนไข
หน่วยความจำเขียนลงในหน่วยความจำที่ไม่มีเงื่อนไขเขียน ตัวอย่างเช่น,
สำหรับ (i = 0; i < N; i++)
ถ้า (เงื่อนไข)
A[i] = ประสบการณ์;
ถูกแปลงเป็น
สำหรับ (i = 0; i < N; i++)
A[i] = เงื่อนไข ? expr : A[i];
อาจทำให้เกิดการแข่งขันข้อมูล
-ftree-วน-กระจาย
ดำเนินการกระจายลูป แฟล็กนี้สามารถปรับปรุงประสิทธิภาพแคชบนเนื้อหาลูปขนาดใหญ่ได้
และอนุญาตให้ใช้การเพิ่มประสิทธิภาพลูปเพิ่มเติม เช่น การทำให้ขนานหรือเวกเตอร์
สถานที่. ตัวอย่างเช่น วง
ฉัน = 1, N
ก(ฉัน) = ข(ฉัน) + ค
D(I) = E(I) * F
สิ้นสุด
ถูกแปลงเป็น
ฉัน = 1, N
ก(ฉัน) = ข(ฉัน) + ค
สิ้นสุด
ฉัน = 1, N
D(I) = E(I) * F
สิ้นสุด
-ftree-loop-กระจายรูปแบบ
ดำเนินการกระจายลูปของรูปแบบที่สามารถสร้างโค้ดด้วยการเรียก a
ห้องสมุด. แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O3.
บัตรผ่านนี้แจกจ่ายลูปการเริ่มต้นและสร้างการเรียกไปที่ memset zero
ตัวอย่างเช่น วง
ฉัน = 1, N
ก(ฉัน) = 0
B(I) = A(I) + ฉัน
สิ้นสุด
ถูกแปลงเป็น
ฉัน = 1, N
ก(ฉัน) = 0
สิ้นสุด
ฉัน = 1, N
B(I) = A(I) + ฉัน
สิ้นสุด
และลูปการเริ่มต้นจะถูกแปลงเป็นการเรียก memset zero
-ftree-วน-im
ทำการเคลื่อนที่แบบวนซ้ำบนต้นไม้ ใบนี้เคลื่อนที่เฉพาะค่าคงที่ที่ยาก
เพื่อจัดการที่ระดับ RTL (การเรียกใช้ฟังก์ชัน การดำเนินการที่ขยายเป็นลำดับที่ไม่ซับซ้อน
ของ insns) กับ -funswitch-ลูป มันยังเคลื่อนตัวถูกดำเนินการของเงื่อนไขที่
ค่าคงที่นอกลูป เพื่อให้เราสามารถใช้การวิเคราะห์ค่าคงที่เล็กน้อยใน
ยกเลิกการสลับลูป บัตรผ่านยังรวมถึงการเคลื่อนไหวของร้านค้า
-ftree-วน-ivcanon
สร้างตัวนับมาตรฐานสำหรับจำนวนการวนซ้ำในลูปที่กำหนด
จำนวนการทำซ้ำต้องใช้การวิเคราะห์ที่ซับซ้อน การเพิ่มประสิทธิภาพในภายหลังอาจ
กำหนดจำนวนได้อย่างง่ายดาย มีประโยชน์อย่างยิ่งในการคลี่คลาย
-fivopts
ทำการเพิ่มประสิทธิภาพตัวแปรการเหนี่ยวนำ (การลดกำลัง, ตัวแปรการเหนี่ยวนำ
การรวมและการกำจัดตัวแปรเหนี่ยวนำ) บนต้นไม้
-ftree-parallelize-ลูป=n
Parallelize loops กล่าวคือ แบ่งพื้นที่การวนซ้ำเพื่อรันใน n เธรด นี่คือ
เป็นไปได้เฉพาะสำหรับลูปที่มีการวนซ้ำอิสระและสามารถกำหนดได้เอง
เรียงลำดับใหม่ การปรับให้เหมาะสมนั้นให้ผลกำไรบนเครื่องมัลติโปรเซสเซอร์เท่านั้น สำหรับลูป
ที่ใช้ CPU มาก แทนที่จะจำกัด เช่น โดยแบนด์วิดท์หน่วยความจำ ตัวเลือกนี้
หมายถึง -pthreadและดังนั้นจึงรองรับเฉพาะเป้าหมายที่รองรับ
-pthread.
-ftree-พีทีเอ
ดำเนินการวิเคราะห์แบบจุดต่อฟังก์ชันในพื้นที่บนต้นไม้ แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้น
at -O และสูงกว่า
-ftree-สระ
ดำเนินการแทนที่สเกลาร์ของมวลรวม บัตรผ่านนี้แทนที่การอ้างอิงโครงสร้าง
ด้วยสเกลาร์เพื่อป้องกันการสร้างโครงสร้างหน่วยความจำเร็วเกินไป ธงนี้คือ
เปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่า
-ftree-copyrename
ทำการคัดลอกการเปลี่ยนชื่อบนต้นไม้ รหัสผ่านนี้พยายามเปลี่ยนชื่อคอมไพเลอร์ชั่วคราวเป็น
ตัวแปรอื่น ๆ ที่ตำแหน่งคัดลอก มักจะทำให้เกิดชื่อตัวแปรซึ่ง more
ใกล้เคียงกับตัวแปรเดิมอย่างใกล้ชิด แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O และ
สูงกว่า
-ftree-coalesce-inlined-vars
บอกสำเนาชื่อผ่าน (ดู -ftree-copyrename) เพื่อพยายามรวมผู้ใช้รายเล็ก-
ตัวแปรที่กำหนดไว้เช่นกัน แต่ถ้าพวกมันถูกฝังอยู่ในฟังก์ชันอื่น มันคือ
รูปแบบที่จำกัดมากขึ้นของ -ftree-coalesce-vars. ซึ่งอาจเป็นอันตรายต่อข้อมูลการดีบักของข้อมูลดังกล่าว
ตัวแปร inline แต่จะเก็บตัวแปรของ inline-into function ไว้ต่างหากจาก
ซึ่งกันและกันเพื่อให้มีค่าที่คาดหวังใน a . มากขึ้น
เซสชันการดีบัก นี่เป็นค่าเริ่มต้นในเวอร์ชัน GCC ที่เก่ากว่า 4.7
-ftree-coalesce-vars
บอกสำเนาชื่อผ่าน (ดู -ftree-copyrename) เพื่อพยายามรวมผู้ใช้รายเล็ก-
กำหนดตัวแปรด้วย แทนที่จะเป็นเพียงคอมไพเลอร์ชั่วคราว สิ่งนี้อาจ จำกัด อย่างรุนแรง
ความสามารถในการดีบักโปรแกรมที่ได้รับการเพิ่มประสิทธิภาพที่คอมไพล์ด้วย -fno-var-ติดตามการกำหนด.
ในรูปแบบไร้ผล แฟล็กนี้ป้องกันการรวม SSA ของตัวแปรผู้ใช้ ซึ่งรวมถึง
แบบอินไลน์ ตัวเลือกนี้เปิดใช้งานโดยค่าเริ่มต้น
-ftree-ter
ดำเนินการเปลี่ยนนิพจน์ชั่วคราวระหว่าง SSA->เฟสปกติ เดี่ยว
use/single def temporaries จะถูกแทนที่ ณ สถานที่ใช้งานด้วยการกำหนด
การแสดงออก. สิ่งนี้ส่งผลให้โค้ดที่ไม่ใช่ GIMPLE แต่ให้ตัวขยายมากขึ้น
ต้นไม้ที่ซับซ้อนในการทำงานส่งผลให้มีการสร้าง RTL ที่ดีขึ้น เปิดใช้งานโดย
ค่าเริ่มต้นที่ -O และสูงกว่า
-ftree-slsr
ดำเนินการลดกำลังเส้นตรงบนต้นไม้ สิ่งนี้รับรู้ที่เกี่ยวข้อง
นิพจน์ที่เกี่ยวข้องกับการคูณและแทนที่ด้วยการคำนวณที่มีราคาไม่แพง
เมื่อเป็นไปได้. สิ่งนี้ถูกเปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่า
-ftree- vectorize
ทำการวนซ้ำเวกเตอร์บนต้นไม้ แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O3.
-ftree-slp- vectorize
ทำการบล็อกเวกเตอร์พื้นฐานบนต้นไม้ แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O3 และ
เมื่อ -ftree- vectorize เปิดใช้งาน.
-fvect-ต้นทุนโมเดล=แบบ
เปลี่ยนโมเดลต้นทุนที่ใช้สำหรับ vectorization NS แบบ อาร์กิวเมนต์ควรเป็นหนึ่งใน
"ไม่จำกัด", "ไดนามิก" หรือ "ถูก" ด้วยโมเดล "ไม่ จำกัด " โค้ดเวกเตอร์ -
พาธจะถือว่าทำกำไรได้ในขณะที่ใช้โมเดล "ไดนามิก" การตรวจสอบรันไทม์จะ
ป้องกันเส้นทางรหัส vectorized เพื่อเปิดใช้งานเฉพาะสำหรับการนับซ้ำที่น่าจะเป็นไปได้
ดำเนินการเร็วกว่าเมื่อดำเนินการวนรอบสเกลาร์เดิม รุ่น "ถูก" จะ
ปิดการใช้งาน vectorization ของลูปซึ่งการทำเช่นนั้นจะมีค่าใช้จ่ายสูงตัวอย่างเช่น
เนื่องจากการตรวจสอบรันไทม์ที่จำเป็นสำหรับการขึ้นต่อกันของข้อมูลหรือการจัดตำแหน่ง แต่อย่างอื่นเท่ากัน
สู่รูปแบบ "ไดนามิก" โมเดลต้นทุนเริ่มต้นขึ้นอยู่กับแฟล็กการปรับให้เหมาะสมอื่นๆ
และเป็น "ไดนามิก" หรือ "ราคาถูก"
-ftree-vrp
ดำเนินการขยายพันธุ์ช่วงค่าบนต้นไม้ ซึ่งคล้ายกับการขยายพันธุ์แบบคงที่
ผ่าน แต่แทนที่จะเป็นค่า ช่วงของค่าจะถูกเผยแพร่ สิ่งนี้ทำให้
เครื่องมือเพิ่มประสิทธิภาพเพื่อลบการตรวจสอบช่วงที่ไม่จำเป็นเช่นการตรวจสอบขอบเขตอาร์เรย์และตัวชี้ค่าว่าง
ตรวจสอบ สิ่งนี้ถูกเปิดใช้งานโดยค่าเริ่มต้นที่ -O2 และสูงกว่า การกำจัดการตรวจสอบตัวชี้ Null
จะทำได้ก็ต่อเมื่อ -fdelete-null-pointer-ตรวจสอบ เปิดใช้งาน.
-รถเทรเซอร์
ทำซ้ำหางเพื่อขยายขนาดซุปเปอร์บล็อก การเปลี่ยนแปลงนี้ทำให้ง่ายขึ้น
โฟลว์การควบคุมของฟังก์ชันช่วยให้การเพิ่มประสิทธิภาพอื่นๆ ทำงานได้ดีขึ้น
-funroll-ลูป
คลายลูปซึ่งสามารถกำหนดจำนวนการวนซ้ำได้ ณ เวลารวบรวมหรือเมื่อ
เข้าสู่วง. -funroll-ลูป หมายถึง -frerun-cse-หลังลูป. ตัวเลือกนี้ทำให้
รหัสใหญ่ขึ้นและอาจหรือไม่ทำให้ทำงานเร็วขึ้น
-funroll-all-ลูป
คลายลูปทั้งหมด แม้ว่าจำนวนการวนซ้ำจะไม่แน่นอนเมื่อลูปเป็น
เข้ามา ซึ่งมักจะทำให้โปรแกรมทำงานช้าลง -funroll-all-ลูป หมายถึง
ตัวเลือกเดียวกับ -funroll-ลูป,
-fsplit-ivs-in-unroller
เปิดใช้งานการแสดงค่าของตัวแปรการเหนี่ยวนำในการทำซ้ำในภายหลังของ
คลี่คลายลูปโดยใช้ค่าในการวนซ้ำครั้งแรก สิ่งนี้ทำลายการพึ่งพาระยะยาว
โซ่ จึงช่วยปรับปรุงประสิทธิภาพของการผ่านกำหนดการ
การรวมกันของ -fweb และ CSE มักจะเพียงพอที่จะได้รับผลเช่นเดียวกัน
อย่างไรก็ตาม นั่นไม่น่าเชื่อถือในกรณีที่ตัวลูปซับซ้อนกว่า a
บล็อกพื้นฐานเดียว นอกจากนี้ยังใช้งานไม่ได้กับสถาปัตยกรรมบางอย่างเนื่องจาก
ข้อจำกัดในการผ่าน CSE
การเพิ่มประสิทธิภาพนี้เปิดใช้งานโดยค่าเริ่มต้น
-fvariable-ขยาย-in-unroller
ด้วยตัวเลือกนี้ คอมไพเลอร์จะสร้างสำเนาของตัวแปรโลคัลหลายชุดเมื่อ
คลายลูปซึ่งอาจส่งผลให้โค้ดที่เหนือกว่า
-fpartial-inlining
ส่วนอินไลน์ของฟังก์ชัน ตัวเลือกนี้มีผลใดๆ ต่อเมื่ออินไลน์ตัวเองคือ
เปิดโดย -finline-ฟังก์ชั่น or -finline-small-ฟังก์ชั่น ตัวเลือก
เปิดใช้งานที่ระดับ -O2.
-fpredictive-ทั่วไป
ดำเนินการปรับให้เหมาะสมเชิงคาดการณ์ล่วงหน้า กล่าวคือ นำการคำนวณกลับมาใช้ใหม่ (โดยเฉพาะ
โหลดและจัดเก็บหน่วยความจำ) ดำเนินการในการวนซ้ำก่อนหน้า
ตัวเลือกนี้เปิดใช้งานที่ระดับ -O3.
-fprefetch-ลูปอาร์เรย์
หากเครื่องเป้าหมายรองรับ ให้สร้างคำแนะนำเพื่อดึงหน่วยความจำล่วงหน้าไปที่
ปรับปรุงประสิทธิภาพของลูปที่เข้าถึงอาร์เรย์ขนาดใหญ่
ตัวเลือกนี้อาจสร้างโค้ดที่ดีขึ้นหรือแย่ลง ผลลัพธ์ขึ้นอยู่กับ
โครงสร้างของลูปภายในซอร์สโค้ด
พิการในระดับ -คุณ.
-fno-ช่องมอง
-fno-ช่องมอง2
ปิดใช้งานการเพิ่มประสิทธิภาพช่องมองเฉพาะเครื่อง ความแตกต่างระหว่าง
-fno-ช่องมอง และ -fno-ช่องมอง2 อยู่ในวิธีการดำเนินการในคอมไพเลอร์ บาง
เป้าหมายใช้อย่างใดอย่างหนึ่ง บางคนใช้อีกอัน บางคนใช้ทั้งสองอย่าง
-ช่องมอง ถูกเปิดใช้งานโดยค่าเริ่มต้น -fช่องมอง2 เปิดใช้งานในระดับ -O2, -O3, -คุณ.
-fno-เดา-สาขา-ความน่าจะเป็น
อย่าเดาความน่าจะเป็นของสาขาโดยใช้การวิเคราะห์พฤติกรรม
GCC ใช้ฮิวริสติกเพื่อเดาความน่าจะเป็นของสาขาหากไม่ได้มาจาก
ข้อเสนอแนะโปรไฟล์ (-fprofile-ส่วนโค้ง). ฮิวริสติกเหล่านี้อิงจากโฟลว์การควบคุม
กราฟ. หากความน่าจะเป็นบางสาขาถูกกำหนดโดย __สร้างขึ้นใน_คาดหวังแล้ว
ฮิวริสติกใช้เพื่อเดาความน่าจะเป็นของสาขาสำหรับส่วนที่เหลือของโฟลว์การควบคุม
กราฟ รับ __สร้างขึ้นใน_คาดหวัง ข้อมูลเข้าบัญชี ปฏิสัมพันธ์ระหว่าง
ฮิวริสติกและ __สร้างขึ้นใน_คาดหวัง อาจซับซ้อน และในบางกรณีอาจเป็นประโยชน์กับ
ปิดการใช้งานฮิวริสติกเพื่อให้ผลกระทบของ __สร้างขึ้นใน_คาดหวัง ง่ายกว่า
เข้าใจ.
ค่าเริ่มต้นคือ -fguess-สาขา-ความน่าจะเป็น ในระดับ -O, -O2, -O3, -คุณ.
-freeorder-บล็อก
จัดลำดับบล็อกพื้นฐานใหม่ในฟังก์ชันที่คอมไพล์เพื่อลดจำนวนที่รับ
สาขาและปรับปรุงรหัสท้องถิ่น
เปิดใช้งานในระดับ -O2, -O3.
-freeorder-blocks-and-partition
นอกเหนือจากการจัดลำดับบล็อกพื้นฐานใหม่ในฟังก์ชันที่คอมไพล์แล้ว เพื่อลด
จำนวนกิ่งที่รับ, แบ่งบล็อกพื้นฐานร้อนและเย็นออกเป็นส่วน ๆ
ของแอสเซมบลีและไฟล์ .o เพื่อปรับปรุงประสิทธิภาพของเพจและแคช
การเพิ่มประสิทธิภาพนี้จะปิดโดยอัตโนมัติเมื่อมีการจัดการข้อยกเว้น
สำหรับส่วน linkonce สำหรับฟังก์ชันที่มีแอตทริบิวต์ส่วนที่กำหนดโดยผู้ใช้และบนทุก
สถาปัตยกรรมที่ไม่สนับสนุนส่วนที่มีชื่อ
-freeorder-ฟังก์ชั่น
จัดลำดับฟังก์ชันใหม่ในไฟล์อ็อบเจ็กต์เพื่อปรับปรุงตำแหน่งโค้ด นี่คือ
ดำเนินการโดยใช้ส่วนย่อยพิเศษ ".text.hot" สำหรับการดำเนินการบ่อยที่สุด
ฟังก์ชันและ ".text.unlikely" สำหรับฟังก์ชันที่ไม่น่าจะดำเนินการ จัดลำดับใหม่โดย
ตัวเชื่อมโยงดังนั้นรูปแบบไฟล์วัตถุต้องรองรับส่วนที่มีชื่อและตัวเชื่อมโยงต้องวาง
ของพวกเขาในทางที่สมเหตุสมผล
ต้องมีความคิดเห็นเกี่ยวกับโปรไฟล์ด้วยเพื่อให้ตัวเลือกนี้มีประสิทธิภาพ ดู
-fprofile-ส่วนโค้ง เพื่อดูรายละเอียด
เปิดใช้งานในระดับ -O2, -O3, -คุณ.
-fstrict-นามแฝง
อนุญาตให้คอมไพเลอร์ใช้กฎนามแฝงที่เข้มงวดที่สุดที่ใช้กับภาษา
กำลังรวบรวม สำหรับ C (และ C++) การดำเนินการนี้จะเปิดใช้งานการปรับให้เหมาะสมตามประเภทของ
นิพจน์ โดยเฉพาะอย่างยิ่ง วัตถุประเภทหนึ่งจะถือว่าไม่อยู่ที่
ที่อยู่เดียวกันกับวัตถุประเภทอื่น เว้นแต่ประเภทจะใกล้เคียงกัน
ตัวอย่างเช่น "unsigned int" สามารถใช้นามแฝง "int" ได้ แต่ไม่ใช่ "void*" หรือ "double" NS
ประเภทอักขระอาจใช้นามแฝงประเภทอื่น ๆ
ให้ความสนใจเป็นพิเศษกับโค้ดดังนี้:
ยูเนี่ยน a_union {
int ฉัน;
ดับเบิล d;
};
intฉ() {
ยูเนี่ยน a_union t;
td = 3.0;
กลับ ti;
}
แนวปฏิบัติในการอ่านจากสมาชิกสหภาพที่แตกต่างจากสมาชิกล่าสุด
เขียนถึง (เรียกว่า "type-punning") เป็นเรื่องปกติ แม้กระทั่งกับ -fstrict-นามแฝง, พิมพ์-
อนุญาตให้ใช้การเล่นกลได้ หากหน่วยความจำสามารถเข้าถึงได้ผ่านประเภทยูเนี่ยน ดังนั้น
รหัสด้านบนใช้งานได้ตามที่คาดไว้ อย่างไรก็ตาม รหัสนี้อาจไม่:
intฉ() {
ยูเนี่ยน a_union t;
int* ไอพี;
td = 3.0;
ip = &t.i;
ส่งคืน *ip;
}
ในทำนองเดียวกัน การเข้าถึงโดยใช้ที่อยู่ การส่งตัวชี้ผลลัพธ์และ
การพิจารณาผลลัพธ์มีพฤติกรรมที่ไม่ได้กำหนด แม้ว่านักแสดงจะใช้ประเภทสหภาพ
เช่น:
intฉ() {
สองเท่า d = 3.0;
ส่งคืน ((union a_union *) &d)->i;
}
โครงการ -fstrict-นามแฝง เปิดใช้งานตัวเลือกที่ระดับ -O2, -O3, -คุณ.
-fstrict-ล้น
อนุญาตให้คอมไพเลอร์ใช้กฎโอเวอร์โฟลว์ที่ลงนามอย่างเข้มงวด ขึ้นอยู่กับภาษา
กำลังรวบรวม สำหรับ C (และ C ++) หมายความว่าล้นเมื่อทำเลขคณิตด้วย
ไม่ได้กำหนดหมายเลขที่ลงนามซึ่งหมายความว่าคอมไพเลอร์อาจถือว่าไม่ได้
เกิดขึ้น. สิ่งนี้อนุญาตการเพิ่มประสิทธิภาพต่างๆ ตัวอย่างเช่น คอมไพเลอร์ถือว่า
นิพจน์เช่น "i + 10 > i" เป็นจริงเสมอสำหรับเครื่องหมาย "i" ข้อสันนิษฐานนี้คือ
ใช้ได้ก็ต่อเมื่อไม่มีการกำหนดโอเวอร์โฟลว์ที่ลงนามแล้ว เนื่องจากนิพจน์จะเป็นเท็จหาก "i + 10"
ล้นเมื่อใช้เลขคณิตเสริม twos เมื่อตัวเลือกนี้มีผลบังคับใช้ใดๆ
พยายามที่จะกำหนดว่าต้องเขียนการดำเนินการกับตัวเลขล้นที่ลงนามหรือไม่
อย่างระมัดระวังเพื่อไม่ให้เกิดการล้น
ตัวเลือกนี้ยังอนุญาตให้คอมไพเลอร์ใช้ความหมายของตัวชี้ที่เข้มงวด: กำหนด a
ตัวชี้ไปยังวัตถุ ถ้าการเพิ่มออฟเซ็ตให้กับตัวชี้นั้นไม่ได้สร้างตัวชี้ขึ้น
สำหรับวัตถุเดียวกัน การเพิ่มเติมไม่ได้กำหนดไว้ นี้อนุญาตให้คอมไพเลอร์เพื่อสรุป
ว่า "p + u > p" เป็นจริงเสมอสำหรับตัวชี้ "p" และจำนวนเต็ม "u" ที่ไม่มีเครื่องหมาย นี้
สมมติฐานใช้ได้เฉพาะเนื่องจากไม่มีการกำหนดพอยน์เตอร์รอบทิศทาง เนื่องจากนิพจน์ is
false ถ้า "p + u" ล้นโดยใช้เลขคณิตเสริมสองส่วน
ดูเพิ่มเติมที่ -fwrapv ตัวเลือก. โดยใช้ -fwrapv หมายความว่าจำนวนเต็มลงนามโอเวอร์โฟลว์ is
กำหนดไว้อย่างสมบูรณ์: มันห่อ เมื่อไหร่ -fwrapv ใช้แล้วไม่มีความแตกต่างระหว่าง
-fstrict-ล้น และ -fno-เข้มงวดล้น สำหรับจำนวนเต็ม กับ -fwrapv บางชนิด
อนุญาตให้ล้น ตัวอย่างเช่น ถ้าคอมไพเลอร์ได้รับโอเวอร์โฟลว์เมื่อทำ
เลขคณิตกับค่าคงที่ ค่าที่ล้นยังคงสามารถใช้ได้กับ -fwrapvแต่ไม่
มิฉะนั้น.
โครงการ -fstrict-ล้น เปิดใช้งานตัวเลือกที่ระดับ -O2, -O3, -คุณ.
-falign-ฟังก์ชั่น
-falign-ฟังก์ชั่น=n
จัดตำแหน่งเริ่มต้นของฟังก์ชันให้ตรงกับกำลังสองถัดไปที่มากกว่า n, ข้ามขึ้นไป n
ไบต์ ตัวอย่างเช่น -falign-ฟังก์ชั่น=32 จัดตำแหน่งฟังก์ชันให้เป็น 32-byte . ถัดไป
ขอบเขต แต่ -falign-ฟังก์ชั่น=24 จัดแนวไปยังขอบเขต 32 ไบต์ถัดไปก็ต่อเมื่อสิ่งนี้
สามารถทำได้โดยข้าม 23 ไบต์หรือน้อยกว่า
-fno-align-ฟังก์ชั่น และ -falign-ฟังก์ชั่น=1 มีค่าเท่ากันและหมายความว่าฟังก์ชัน
ไม่สอดคล้องกัน
แอสเซมเบลอร์บางตัวรองรับแฟล็กนี้เมื่อ n เป็นกำลังสอง ในกรณีนี้ก็คือ
ปัดเศษขึ้น
If n ไม่ได้ระบุหรือเป็นศูนย์ ให้ใช้ค่าเริ่มต้นที่ขึ้นกับเครื่อง
เปิดใช้งานในระดับ -O2, -O3.
-falign-ฉลาก
-falign-labels=n
จัดแนวเป้าหมายสาขาทั้งหมดให้อยู่ในขอบเขตอำนาจของสอง ข้ามขึ้นไป n ไบต์เช่น
-falign-ฟังก์ชั่น. ตัวเลือกนี้ทำให้โค้ดช้าลงได้ง่ายเพราะต้องแทรก
การดำเนินการจำลองเมื่อถึงเป้าหมายของสาขาในโฟลว์ปกติของโค้ด
-fno-จัดตำแหน่งป้าย และ -falign-labels=1 เทียบเท่าและหมายความว่าฉลากไม่
ชิด
If -falign-ลูป or -falign-กระโดด ใช้บังคับและมีค่ามากกว่าค่านี้ แล้ว
ใช้ค่าของพวกเขาแทน
If n ไม่ได้ระบุหรือเป็นศูนย์ ให้ใช้ค่าเริ่มต้นที่ขึ้นกับเครื่องซึ่งเป็นไปได้มาก
ที่จะ 1หมายความว่าไม่มีการจัดตำแหน่ง
เปิดใช้งานในระดับ -O2, -O3.
-falign-ลูป
-falign-ลูป=n
จัดแนวลูปให้อยู่ในขอบยกกำลังสอง ข้ามขึ้นไปที่ n ไบต์เช่น -falign-ฟังก์ชั่น.
หากมีการวนซ้ำหลายครั้ง สิ่งนี้จะชดเชยการดำเนินการของ dummy
การดำเนินงาน
-fno-align-ลูป และ -falign-ลูป=1 มีค่าเท่ากันและหมายความว่าลูปไม่ใช่
ชิด
If n ไม่ได้ระบุหรือเป็นศูนย์ ให้ใช้ค่าเริ่มต้นที่ขึ้นกับเครื่อง
เปิดใช้งานในระดับ -O2, -O3.
-falign-กระโดด
-falign-กระโดด=n
จัดแนวเป้าหมายสาขาให้อยู่ในขอบเขตกำลังสอง สำหรับเป้าหมายสาขาที่เป้าหมาย
สามารถเข้าถึงได้โดยการกระโดดข้ามขึ้นไปที่ n ไบต์เช่น -falign-ฟังก์ชั่น. ใน
ในกรณีนี้ ไม่จำเป็นต้องดำเนินการจำลอง
-fno-จัดตำแหน่งกระโดด และ -falign-กระโดด=1 มีค่าเท่ากันและหมายความว่าลูปไม่ใช่
ชิด
If n ไม่ได้ระบุหรือเป็นศูนย์ ให้ใช้ค่าเริ่มต้นที่ขึ้นกับเครื่อง
เปิดใช้งานในระดับ -O2, -O3.
-สนุกในแต่ละครั้ง
ตัวเลือกนี้เหลือไว้ด้วยเหตุผลด้านความเข้ากันได้ -สนุกในแต่ละครั้ง ไม่มีผลในขณะที่
-fno-หน่วยในเวลา หมายถึง -fno-toplevel-เรียงลำดับใหม่ และ -fno-section-สมอ.
เปิดใช้งานโดยค่าเริ่มต้น
-fno-toplevel-เรียงลำดับใหม่
อย่าจัดลำดับฟังก์ชันระดับบนสุด ตัวแปร และคำสั่ง "asm" ส่งออกใน
ลำดับเดียวกันกับที่ปรากฏในไฟล์อินพุต เมื่อใช้ตัวเลือกนี้
ตัวแปรสแตติกที่ไม่ได้อ้างอิงจะไม่ถูกลบออก ตัวเลือกนี้มีไว้เพื่อรองรับ
รหัสที่มีอยู่ซึ่งขึ้นอยู่กับการสั่งซื้อเฉพาะ สำหรับรหัสใหม่ ควรใช้
แอตทริบิวต์
เปิดใช้งานที่ระดับ -O0. เมื่อปิดการใช้งานอย่างชัดแจ้งก็หมายความว่า -fno-section-สมอ,
ซึ่งเปิดใช้งานอย่างอื่นได้ที่ -O0 ในบางเป้าหมาย
-fweb
สร้างเว็บที่ใช้กันทั่วไปเพื่อวัตถุประสงค์ในการจัดสรรการลงทะเบียนและกำหนดแต่ละเว็บ
การลงทะเบียนหลอกส่วนบุคคล นี้จะช่วยให้การลงทะเบียนผ่านการจัดสรรดำเนินการบน
หลอกโดยตรง แต่ยังเสริมความแข็งแกร่งผ่านการเพิ่มประสิทธิภาพอื่น ๆ อีกหลายรายการเช่น CSE
เครื่องมือเพิ่มประสิทธิภาพลูปและตัวกำจัดโค้ดที่ตายแล้วเล็กน้อย อย่างไรก็ตามมันสามารถทำการดีบัก
เป็นไปไม่ได้ เนื่องจากตัวแปรไม่อยู่ใน "ทะเบียนบ้าน" อีกต่อไป
เปิดใช้งานโดยค่าเริ่มต้นด้วย -funroll-ลูป.
-fwhole-โปรแกรม
สมมติว่าหน่วยการคอมไพล์ปัจจุบันแสดงถึงโปรแกรมทั้งหมดที่กำลังคอมไพล์
ฟังก์ชันและตัวแปรสาธารณะทั้งหมด ยกเว้น "หลัก" และฟังก์ชันที่รวมโดย
แอตทริบิวต์ "externally_visible" กลายเป็นฟังก์ชันคงที่และได้รับการปรับให้เหมาะสม
เชิงรุกมากขึ้นโดยเครื่องมือเพิ่มประสิทธิภาพระหว่างขั้นตอน
ไม่ควรใช้ตัวเลือกนี้ร่วมกับ "-flto" แทนที่จะพึ่งพา
ปลั๊กอิน linker ควรให้ข้อมูลที่ปลอดภัยและแม่นยำยิ่งขึ้น
-flto[=n]
ตัวเลือกนี้เรียกใช้ตัวเพิ่มประสิทธิภาพเวลาลิงก์มาตรฐาน เมื่อเรียกใช้ด้วยซอร์สโค้ด it
สร้าง GIMPLE (หนึ่งในการรับรองภายในของ GCC) และเขียนไปยังELF .พิเศษ
ส่วนต่างๆ ในไฟล์อ็อบเจ็กต์ เมื่อไฟล์อ็อบเจ็กต์ถูกเชื่อมโยงเข้าด้วยกัน . ทั้งหมด
เนื้อหาฟังก์ชันถูกอ่านจากส่วน ELF เหล่านี้และจำลองเสมือนว่าเคยเป็น
ส่วนหนึ่งของหน่วยการแปลเดียวกัน
ในการใช้เครื่องมือเพิ่มประสิทธิภาพเวลาลิงก์ -flto ต้องระบุในเวลารวบรวมและระหว่าง
ลิงค์สุดท้าย ตัวอย่างเช่น:
gcc -c -O2 -flto foo.c
gcc -c -O2 -บาร์ flto.c
gcc -o myprog -flto -o2 foo.o bar.o
การเรียกใช้สองรายการแรกไปยัง GCC จะบันทึกการแทนค่า bytecode ของ GIMPLE เป็นรายการพิเศษ
ส่วนเอลฟ์ภายใน ฟูโอ และ บาร์.โอ. การเรียกครั้งสุดท้ายอ่าน GIMPLE bytecode
เริ่มต้น ฟูโอ และ บาร์.โอ, รวมสองไฟล์เป็นภาพภายในภาพเดียวและคอมไพล์
ผลลัพธ์ตามปกติ เนื่องจากทั้งสอง ฟูโอ และ บาร์.โอ มารวมกันเป็นภาพเดียวนี้
ทำให้การวิเคราะห์ระหว่างขั้นตอนและการปรับให้เหมาะสมใน GCC ทำงานทั่วทั้ง
สองไฟล์ราวกับว่ามันเป็นไฟล์เดียว ซึ่งหมายความว่า ตัวอย่างเช่น ที่อินไลเนอร์คือ
สามารถอินไลน์ฟังก์ชั่นใน บาร์.โอ มาทำหน้าที่ใน ฟูโอ และในทางกลับกัน.
อีกวิธี (ง่ายกว่า) ในการเปิดใช้งานการเพิ่มประสิทธิภาพเวลาลิงก์คือ:
gcc -o myprog -flto -O2 foo.c bar.c
ด้านบนสร้าง bytecode สำหรับ ฟู.ซี และ บาร์ซี, หลอมรวมเป็นหนึ่งเดียว
การแสดง GIMPLE และเพิ่มประสิทธิภาพตามปกติในการผลิต มายโปรก.
สิ่งสำคัญเพียงอย่างเดียวที่ต้องจำไว้คือการเปิดใช้งานการเพิ่มประสิทธิภาพเวลาลิงก์
-flto ต้องส่งแฟล็กไปยังทั้งคำสั่งคอมไพล์และลิงก์
เพื่อให้การเพิ่มประสิทธิภาพโปรแกรมทั้งหมดมีประสิทธิภาพ จำเป็นต้องทำให้ทั้งโปรแกรมสมบูรณ์
สมมติฐานของโปรแกรม คอมไพเลอร์จำเป็นต้องรู้ว่าฟังก์ชันและตัวแปรใดบ้างที่สามารถเป็นได้
เข้าถึงได้โดยไลบรารีและรันไทม์ภายนอกหน่วยที่ปรับเวลาลิงก์ให้เหมาะสม เมื่อไหร่
สนับสนุนโดยตัวเชื่อมโยง, ปลั๊กอินตัวเชื่อมโยง (ดู -ฟิวส์-ลิงเกอร์-ปลั๊กอิน) ผ่าน
ข้อมูลไปยังคอมไพเลอร์เกี่ยวกับสัญลักษณ์ที่ใช้และที่มองเห็นได้จากภายนอก เมื่อ
ไม่มีปลั๊กอินตัวเชื่อมโยง -fwhole-โปรแกรม ควรใช้เพื่อให้คอมไพเลอร์
เพื่อสร้างสมมติฐานเหล่านี้ ซึ่งนำไปสู่การตัดสินใจเพิ่มประสิทธิภาพเชิงรุกมากขึ้น
โปรดทราบว่าเมื่อคอมไพล์ไฟล์ด้วย -flto, ไฟล์อ็อบเจ็กต์ที่สร้างขึ้นมีขนาดใหญ่กว่า
ไฟล์อ็อบเจ็กต์ปกติเนื่องจากมี GIMPLE bytecodes และโค้ดสุดท้ายตามปกติ
ซึ่งหมายความว่าไฟล์อ็อบเจ็กต์ที่มีข้อมูล LTO สามารถเชื่อมโยงเป็นอ็อบเจ็กต์ปกติได้
ไฟล์; ถ้า -flto ไม่ผ่านไปยังตัวเชื่อมโยง ไม่มีการเพิ่มประสิทธิภาพระหว่างขั้นตอน
ประยุกต์
นอกจากนี้ แฟล็กการปรับให้เหมาะสมที่ใช้ในการคอมไพล์แต่ละไฟล์ไม่ใช่
จำเป็นต้องเกี่ยวข้องกับที่ใช้ในเวลาเชื่อมโยง ตัวอย่างเช่น
gcc -c -O0 -flto foo.c
gcc -c -O0 -บาร์ flto.c
gcc -o myprog -flto -o3 foo.o bar.o
สิ่งนี้สร้างไฟล์อ็อบเจ็กต์แต่ละรายการด้วยรหัสแอสเซมเบลอร์ที่ไม่ได้รับการปรับให้เหมาะสม แต่
ผลลัพธ์ไบนารี มายโปรก ได้รับการปรับให้เหมาะสมที่ -O3. ถ้า แทน ไบนารีสุดท้ายคือ
สร้างขึ้นโดยไม่ต้อง -fltoแล้ว มายโปรก ไม่ได้รับการปรับให้เหมาะสม
เมื่อสร้างไบนารีสุดท้ายด้วย -flto, GCC ใช้เฉพาะการเพิ่มประสิทธิภาพเวลาลิงก์เท่านั้น
ไปยังไฟล์เหล่านั้นที่มี bytecode ดังนั้นคุณจึงสามารถผสมและจับคู่ไฟล์อ็อบเจ็กต์ได้
และไลบรารีที่มี GIMPLE bytecodes และโค้ดอ็อบเจ็กต์สุดท้าย GCC จะเลือกโดยอัตโนมัติ
ไฟล์ใดที่จะปรับให้เหมาะสมในโหมด LTO และไฟล์ใดที่จะเชื่อมโยงโดยไม่ต้องเพิ่มเติม
การประมวลผล
มีการตั้งค่าสถานะการสร้างรหัสบางอย่างที่ GCC รักษาไว้เมื่อสร้าง bytecodes เช่น
ต้องใช้ในระหว่างขั้นตอนการเชื่อมโยงขั้นสุดท้าย ปัจจุบันตัวเลือกต่อไปนี้
ถูกบันทึกลงในไฟล์ GIMPLE bytecode: -fPIC, -fcommon และทั้งหมด -m ธงเป้าหมาย
เมื่อถึงเวลาลิงก์ ตัวเลือกเหล่านี้จะถูกอ่านและนำไปใช้ใหม่ โปรดทราบว่าปัจจุบัน
การใช้งานไม่ได้พยายามรับรู้ถึงค่าที่ขัดแย้งกันสำหรับตัวเลือกเหล่านี้ ถ้า
ไฟล์ต่าง ๆ มีค่าตัวเลือกที่ขัดแย้งกัน (เช่น ไฟล์หนึ่งถูกคอมไพล์ด้วย -fPIC
และอีกอย่างไม่ใช่) คอมไพเลอร์ใช้ค่าสุดท้ายที่อ่านจาก bytecode
ไฟล์. ขอแนะนำให้คุณรวบรวมไฟล์ทั้งหมดที่เข้าร่วมใน
ลิงก์เดียวกันกับตัวเลือกเดียวกัน
หาก LTO พบอ็อบเจ็กต์ที่มีการเชื่อมโยง C ที่ประกาศด้วยประเภทที่เข้ากันไม่ได้แยกกัน
หน่วยการแปลที่จะเชื่อมโยงเข้าด้วยกัน (พฤติกรรมที่ไม่ได้กำหนดตาม ISO C99
6.2.7) อาจมีการออกการวินิจฉัยที่ไม่ร้ายแรง พฤติกรรมยังไม่ได้กำหนดที่รัน
เวลา
คุณลักษณะอีกประการของ LTO คือสามารถใช้การเพิ่มประสิทธิภาพระหว่างขั้นตอนได้
ในไฟล์ที่เขียนด้วยภาษาต่างๆ สิ่งนี้ต้องการการสนับสนุนในภาษาด้านหน้า
จบ. ปัจจุบันส่วนหน้า C, C ++ และ Fortran สามารถเปล่ง GIMPLE
bytecodes ดังนั้นสิ่งนี้ควรใช้งานได้:
gcc -c -flto foo.c
g++ -c -flto bar.cc
gfortran -c -flto baz.f90
g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran
สังเกตว่าลิงค์สุดท้ายเสร็จสิ้นด้วย g ++ เพื่อรับไลบรารีรันไทม์ C++ และ
-แอลจีฟอร์ทราน ถูกเพิ่มเพื่อรับไลบรารีรันไทม์ของ Fortran โดยทั่วไปแล้วเมื่อผสม
ภาษาในโหมด LTO คุณควรใช้ตัวเลือกคำสั่งลิงค์เดียวกันกับเมื่อผสม
ภาษาในการคอมไพล์ปกติ (ไม่ใช่ LTO); ทั้งหมดที่คุณต้องเพิ่มคือ -flto เพื่อทั้งหมด
คอมไพล์และลิงก์คำสั่ง
หากไฟล์อ็อบเจ็กต์ที่มี GIMPLE bytecode ถูกจัดเก็บไว้ในไฟล์เก็บถาวรของไลบรารี ให้พูดว่า
libfo.aเป็นไปได้ที่จะแยกและใช้ในลิงก์ LTO หากคุณใช้ a
ตัวเชื่อมโยงพร้อมการสนับสนุนปลั๊กอิน หากต้องการเปิดใช้งานคุณสมบัตินี้ ให้ใช้แฟล็ก -ฟิวส์-ลิงเกอร์-ปลั๊กอิน
ณ เวลาเชื่อมโยง:
gcc -o myprog -O2 -flto -fuse-linker-plugin ao bo -lfoo
เมื่อเปิดใช้งานปลั๊กอินตัวเชื่อมโยง ตัวเชื่อมโยงจะแยกไฟล์ GIMPLE ที่จำเป็นจาก
libfo.a และส่งต่อไปยัง GCC ที่ทำงานอยู่เพื่อให้เป็นส่วนหนึ่งของการรวม
รูปภาพ GIMPLE ที่จะปรับให้เหมาะสม
หากคุณไม่ได้ใช้ตัวเชื่อมโยงที่รองรับปลั๊กอินและ/หรือไม่ได้เปิดใช้งานตัวเชื่อมโยง
ปลั๊กอินแล้ววัตถุภายใน libfo.a ถูกสกัดและเชื่อมโยงตามปกติ แต่พวกมัน
ไม่เข้าร่วมในกระบวนการเพิ่มประสิทธิภาพ LTO
การเพิ่มประสิทธิภาพเวลาลิงก์ไม่จำเป็นต้องมีโปรแกรมทั้งหมดจึงจะใช้งานได้
หากโปรแกรมไม่ต้องการให้ส่งออกสัญลักษณ์ใด ๆ ก็สามารถรวมได้
-flto และ -fwhole-โปรแกรม เพื่อให้เครื่องมือเพิ่มประสิทธิภาพระหว่างขั้นตอนใช้งานได้มากขึ้น
สมมติฐานเชิงรุกซึ่งอาจนำไปสู่โอกาสในการเพิ่มประสิทธิภาพที่ดีขึ้น การใช้
-fwhole-โปรแกรม ไม่จำเป็นเมื่อปลั๊กอินตัวเชื่อมโยงทำงานอยู่ (ดู -ฟิวส์-ลิงเกอร์-ปลั๊กอิน).
การใช้งาน LTO ในปัจจุบันไม่ได้พยายามสร้าง bytecode ที่เป็น
แบบพกพาระหว่างโฮสต์ประเภทต่างๆ ไฟล์ bytecode เป็นเวอร์ชันและที่นั่น
เป็นการตรวจสอบเวอร์ชันที่เข้มงวด ดังนั้นไฟล์ bytecode ที่สร้างใน GCC เวอร์ชันเดียวจะไม่
ทำงานร่วมกับ GCC เวอร์ชันเก่า/ใหม่กว่า
การปรับเวลาลิงก์ให้เหมาะสมทำงานได้ไม่ดีกับการสร้างข้อมูลการดีบัก
รวม -flto กับ -g กำลังทดลองและคาดว่าจะผลิตผิด
ผล.
หากคุณระบุตัวเลือก n, การปรับให้เหมาะสมและการสร้างโค้ดเสร็จสิ้นในเวลาลิงค์
ถูกดำเนินการแบบขนานโดยใช้ n งานคู่ขนานโดยใช้การติดตั้ง ทำ โครงการ
ตัวแปรสภาพแวดล้อม MAKE อาจถูกใช้เพื่อแทนที่โปรแกรมที่ใช้ ค่าเริ่มต้น
คุ้มค่าสำหรับ n คือ 1
คุณยังสามารถระบุ -flto=งานเซิร์ฟเวอร์ เพื่อใช้โหมดเซิร์ฟเวอร์งานของ GNU make เพื่อกำหนด
จำนวนงานคู่ขนาน สิ่งนี้มีประโยชน์เมื่อ Makefile ที่เรียก GCC อยู่แล้ว
ดำเนินการควบคู่กันไป คุณต้องเติม a + ไปที่สูตรคำสั่งในพาเรนต์
Makefile เพื่อให้สิ่งนี้ทำงานได้ ตัวเลือกนี้น่าจะใช้ได้ก็ต่อเมื่อ MAKE เป็นของ GNU
ตัวเลือกนี้ถูกปิดใช้งานโดยค่าเริ่มต้น
-flto-พาร์ทิชัน=ALG
ระบุอัลกอริทึมการแบ่งพาร์ติชันที่ใช้โดยตัวเพิ่มประสิทธิภาพเวลาลิงก์ ค่าคือ
"1to1" เพื่อระบุการแบ่งพาร์ติชันมิเรอร์ไฟล์ต้นฉบับหรือ
"สมดุล" เพื่อระบุการแบ่งพาร์ติชั่นเป็นชิ้นขนาดเท่ากัน (เมื่อทำได้) หรือ
"สูงสุด" เพื่อสร้างพาร์ติชั่นใหม่สำหรับทุกสัญลักษณ์ที่เป็นไปได้ ระบุ "ไม่มี" เป็น
อัลกอริทึมปิดใช้งานการแบ่งพาร์ติชันและการสตรีมอย่างสมบูรณ์ ค่าเริ่มต้นคือ
"สมดุล". ในขณะที่ "1to1" สามารถใช้เป็นวิธีแก้ปัญหาสำหรับการสั่งซื้อรหัสต่างๆ ได้
ปัญหา การแบ่งพาร์ติชัน "สูงสุด" มีไว้สำหรับการทดสอบภายในเท่านั้น
-flto-บีบอัดระดับ=n
ตัวเลือกนี้ระบุระดับการบีบอัดที่ใช้สำหรับภาษากลางที่เขียน
ไปยังไฟล์อ็อบเจ็กต์ LTO และมีความหมายร่วมกับโหมด LTO เท่านั้น (-flto).
ค่าที่ถูกต้องคือ 0 (ไม่มีการบีบอัด) ถึง 9 (การบีบอัดสูงสุด) ค่านอกนี้
ช่วงจะถูกจำกัดไว้ที่ 0 หรือ 9 หากไม่ระบุตัวเลือก ค่าดีฟอลต์ที่สมดุล
ใช้การตั้งค่าการบีบอัด
-flto-รายงาน
พิมพ์รายงานพร้อมรายละเอียดภายในเกี่ยวกับการทำงานของตัวเพิ่มประสิทธิภาพเวลาลิงก์ NS
เนื้อหาของรายงานนี้แตกต่างกันไปในแต่ละเวอร์ชัน มีขึ้นเพื่อเป็นประโยชน์กับ GCC
นักพัฒนาเมื่อประมวลผลไฟล์อ็อบเจ็กต์ในโหมด LTO (ผ่าน -flto).
ปิดใช้งานโดยค่าเริ่มต้น
-ฟิวส์-ลิงเกอร์-ปลั๊กอิน
เปิดใช้งานการใช้ปลั๊กอินตัวเชื่อมโยงระหว่างการเพิ่มประสิทธิภาพเวลาลิงก์ ตัวเลือกนี้อาศัย
เกี่ยวกับการสนับสนุนปลั๊กอินในลิงเกอร์ซึ่งมีอยู่ในทองคำหรือใน GNU ld 2.21 หรือ
ใหม่กว่า
ตัวเลือกนี้เปิดใช้งานการแยกไฟล์อ็อบเจ็กต์ด้วย GIMPLE bytecode จากไลบรารี
เอกสารสำคัญ สิ่งนี้ช่วยปรับปรุงคุณภาพของการเพิ่มประสิทธิภาพโดยการเปิดเผยโค้ดเพิ่มเติมไปยังลิงก์-
เครื่องมือเพิ่มประสิทธิภาพเวลา ข้อมูลนี้ระบุว่าสัญลักษณ์ใดบ้างที่สามารถเข้าถึงได้จากภายนอก
(โดยอ็อบเจ็กต์ที่ไม่ใช่ LTO หรือระหว่างการลิงก์แบบไดนามิก) ผลลัพธ์ของการปรับปรุงคุณภาพโค้ดบน
ไบนารี (และไลบรารีที่ใช้ร่วมกันที่ใช้การมองเห็นที่ซ่อนอยู่) คล้ายกับ
"-fwhole-โปรแกรม". ดู -flto สำหรับคำอธิบายผลกระทบของแฟล็กนี้และวิธีการ
ใช้มัน.
ตัวเลือกนี้เปิดใช้งานโดยค่าเริ่มต้นเมื่อเปิดใช้งานการรองรับ LTO ใน GCC และ GCC เคยเป็น
กำหนดค่าเพื่อใช้กับปลั๊กอินที่รองรับตัวเชื่อมโยง (GNU ld 2.21 หรือใหม่กว่าหรือสีทอง)
-ffat-lto-วัตถุ
ออบเจ็กต์ Fat LTO เป็นไฟล์อ็อบเจ็กต์ที่มีทั้งภาษากลางและ
รหัสวัตถุ ทำให้ใช้งานได้ทั้งการเชื่อมโยง LTO และการเชื่อมโยงแบบปกติ นี้
ตัวเลือกจะมีผลเฉพาะเมื่อคอมไพล์ด้วย -flto และจะถูกละเว้นในเวลาเชื่อมโยง
-fno-fat-lto-วัตถุ ปรับปรุงเวลาในการรวบรวมมากกว่า LTO ธรรมดา แต่ต้องการ
Toolchain ที่สมบูรณ์เพื่อรับทราบ LTO มันต้องมีตัวเชื่อมโยงที่รองรับปลั๊กอินตัวเชื่อมโยง
สำหรับฟังก์ชั่นพื้นฐาน นอกจากนี้ nm, ar และ วิ่ง ต้องสนับสนุนลิงเกอร์
ปลั๊กอินเพื่อให้มีสภาพแวดล้อมการสร้างที่มีคุณสมบัติครบถ้วน (สามารถสร้าง static . ได้
ห้องสมุด ฯลฯ) GCC จัดให้ gcc-ar, gcc-นาโนเมตร, gcc-ranlib ห่อที่จะผ่าน
ตัวเลือกที่เหมาะสมกับเครื่องมือเหล่านี้ ด้วย makefiles LTO ที่ไม่อ้วนจำเป็นต้องแก้ไขเพื่อใช้งาน
พวกเขา
ค่าเริ่มต้นคือ -ffat-lto-วัตถุ แต่ค่าเริ่มต้นนี้มีวัตถุประสงค์เพื่อเปลี่ยนแปลงในอนาคต
เผยแพร่เมื่อสภาพแวดล้อมที่เปิดใช้งานปลั๊กอินลิงเกอร์กลายเป็นเรื่องธรรมดามากขึ้น
-fcompare-เอลิม
หลังจากลงทะเบียนการจัดสรรและการแยกคำสั่งการจัดสรรหลังการลงทะเบียน ให้ระบุ
คำสั่งทางคณิตศาสตร์ที่คำนวณแฟล็กโปรเซสเซอร์คล้ายกับการดำเนินการเปรียบเทียบ
ตามเลขคณิตนั้น ถ้าเป็นไปได้ ให้กำจัดการดำเนินการเปรียบเทียบที่ชัดเจน
บัตรผ่านนี้ใช้ได้เฉพาะกับเป้าหมายบางอย่างที่ไม่สามารถเป็นตัวแทนของ .ได้อย่างชัดเจน
การดำเนินการเปรียบเทียบก่อนการจัดสรรการลงทะเบียนจะเสร็จสมบูรณ์
เปิดใช้งานในระดับ -O, -O2, -O3, -คุณ.
-fuse-ld=bfd
ใช้ BFD ตัวเชื่อมโยงแทนตัวเชื่อมโยงเริ่มต้น
-fuse-ld=ทอง
ใช้ ทอง ตัวเชื่อมโยงแทนตัวเชื่อมโยงเริ่มต้น
-fcprop-ลงทะเบียน
หลังจากลงทะเบียนการจัดสรรและแยกคำสั่งการจัดสรรหลังการลงทะเบียน ให้ดำเนินการ
การส่งผ่านสำเนาเพื่อพยายามลดการพึ่งพาการจัดกำหนดการและในบางครั้ง
กำจัดสำเนา
เปิดใช้งานในระดับ -O, -O2, -O3, -คุณ.
-fprofile-แก้ไข
โปรไฟล์ที่รวบรวมโดยใช้เครื่องมือไบนารีสำหรับโปรแกรมมัลติเธรดอาจเป็น
ไม่สอดคล้องกันเนื่องจากพลาดการอัปเดตตัวนับ เมื่อระบุตัวเลือกนี้ GCC จะใช้
ฮิวริสติกเพื่อแก้ไขหรือขจัดความไม่สอดคล้องกันดังกล่าว โดยค่าเริ่มต้น GCC จะปล่อย an
ข้อความแสดงข้อผิดพลาดเมื่อตรวจพบโปรไฟล์ที่ไม่สอดคล้องกัน
-fprofile-dir=เส้นทาง
ตั้งค่าไดเร็กทอรีเพื่อค้นหาไฟล์ข้อมูลโปรไฟล์ในto เส้นทาง. ตัวเลือกนี้
มีผลกับข้อมูลโปรไฟล์ที่สร้างโดย .เท่านั้น -fprofile-สร้าง, -ftest-ครอบคลุม,
-fprofile-ส่วนโค้ง และใช้โดย -fprofile-ใช้ และ -fbranch-ความน่าจะเป็น และเกี่ยวข้องกัน
ตัวเลือก. สามารถใช้ได้ทั้งเส้นทางแบบสัมบูรณ์และแบบสัมพัทธ์ โดยค่าเริ่มต้น GCC จะใช้
ไดเรกทอรีปัจจุบันเป็น เส้นทางดังนั้นไฟล์ข้อมูลโปรไฟล์จึงปรากฏในไดเร็กทอรีเดียวกันกับ
ไฟล์อ็อบเจ็กต์
-fprofile-สร้าง
-fprofile-สร้าง=เส้นทาง
เปิดใช้งานตัวเลือกที่มักใช้สำหรับเครื่องมือวัดเพื่อสร้างโปรไฟล์ที่มีประโยชน์
สำหรับการคอมไพล์ใหม่ในภายหลังด้วยการเพิ่มประสิทธิภาพตามความคิดเห็นของโปรไฟล์ คุณต้องใช้
-fprofile-สร้าง ทั้งเมื่อคอมไพล์และเมื่อเชื่อมโยงโปรแกรมของคุณ
เปิดใช้งานตัวเลือกต่อไปนี้: "-fprofile-arcs", "-fprofile-values", "-fvpt"
If เส้นทาง ถูกระบุ GCC จะดูที่ เส้นทาง เพื่อค้นหาไฟล์ข้อมูลความคิดเห็นเกี่ยวกับโปรไฟล์
ดู -fprofile-ผบ.
-fprofile-ใช้
-fprofile-use=เส้นทาง
เปิดใช้งานการเพิ่มประสิทธิภาพตามความคิดเห็นของโปรไฟล์และการเพิ่มประสิทธิภาพโดยทั่วไปให้ผลกำไร
เฉพาะกับข้อเสนอแนะโปรไฟล์ที่มีอยู่
เปิดใช้งานตัวเลือกต่อไปนี้: "-fbranch-probabilities", "-fvpt",
"-funroll-loops", "-fpeel-loops", "-ftracer", "-ftree-vectorize",
"ftree-loop-distribute-patterns"
โดยค่าเริ่มต้น GCC จะส่งข้อความแสดงข้อผิดพลาดหากโปรไฟล์คำติชมไม่ตรงกับ
รหัสแหล่งที่มา. ข้อผิดพลาดนี้สามารถเปลี่ยนเป็นคำเตือนได้โดยใช้ -Wcoverage-ไม่ตรงกัน.
โปรดทราบว่าอาจส่งผลให้โค้ดที่ปรับให้เหมาะสมได้ไม่ดี
If เส้นทาง ถูกระบุ GCC จะดูที่ เส้นทาง เพื่อค้นหาไฟล์ข้อมูลความคิดเห็นเกี่ยวกับโปรไฟล์
ดู -fprofile-ผบ.
ตัวเลือกต่อไปนี้ควบคุมพฤติกรรมของคอมไพเลอร์เกี่ยวกับเลขทศนิยม
ตัวเลือกเหล่านี้แลกระหว่างความเร็วและความถูกต้อง ต้องเปิดใช้งานทั้งหมดโดยเฉพาะ
-ลอยเก็บ
อย่าเก็บตัวแปรทศนิยมในรีจิสเตอร์ และยับยั้งตัวเลือกอื่นๆ ที่
อาจเปลี่ยนว่าค่าทศนิยมถูกนำมาจากรีจิสเตอร์หรือหน่วยความจำ
ตัวเลือกนี้ป้องกันความแม่นยำส่วนเกินที่ไม่พึงประสงค์บนเครื่องจักร เช่น 68000 โดยที่
การลงทะเบียนแบบลอยตัว (ของ 68881) มีความแม่นยำมากกว่าที่ควรจะเป็น "สองเท่า"
เพื่อที่จะมี. ในทำนองเดียวกันสำหรับสถาปัตยกรรม x86 สำหรับโปรแกรมส่วนใหญ่ ความแม่นยำส่วนเกิน
ทำได้เพียงแต่ดี แต่มีบางโปรแกรมที่อาศัยคำนิยามที่แม่นยำของ IEEE floating
จุด. ใช้ -ลอยเก็บ สำหรับโปรแกรมดังกล่าวหลังจากปรับเปลี่ยนให้จัดเก็บทั้งหมด
การคำนวณขั้นกลางที่เกี่ยวข้องเป็นตัวแปร
-fexcess-ความแม่นยำ=สไตล์
ตัวเลือกนี้ช่วยให้สามารถควบคุมเพิ่มเติมเกี่ยวกับความแม่นยำส่วนเกินบนเครื่องจักรที่ลอย-
การลงทะเบียนจุดมีความแม่นยำมากกว่าประเภท IEEE "float" และ "double" และ
โปรเซสเซอร์ไม่สนับสนุนการดำเนินการที่ปัดเศษเป็นประเภทเหล่านั้น โดยค่าเริ่มต้น,
-fexcess-แม่นยำ=รวดเร็ว มีผลบังคับใช้ หมายความว่ามีการดำเนินการใน
ความแม่นยำของรีจิสเตอร์และคาดเดาไม่ได้เมื่อปัดเศษเป็นประเภท
ที่ระบุในซอร์สโค้ดจะเกิดขึ้น เมื่อรวบรวม C ถ้า
-fexcess-precision=มาตรฐาน ถูกระบุแล้วความแม่นยำเกินจะเป็นไปตามกฎ
ระบุไว้ใน ISO C99; โดยเฉพาะการหล่อและการมอบหมายงานทำให้ค่าเป็น
ปัดเศษเป็นประเภทความหมาย (ในขณะที่ -ลอยเก็บ มีผลกับงานที่มอบหมายเท่านั้น)
ตัวเลือกนี้ถูกเปิดใช้งานโดยค่าเริ่มต้นสำหรับ C หากตัวเลือกความสอดคล้องที่เข้มงวดเช่น
-std=c99 ถูกนำมาใช้.
-fexcess-precision=มาตรฐาน ไม่ได้นำไปใช้กับภาษาอื่นที่ไม่ใช่ C และไม่มี
ผลถ้า -funsafe-คณิตศาสตร์-optimizations or -ffast-คณิตศาสตร์ ระบุไว้ บน x86 มัน
ก็ไม่มีผลเช่นกันถ้า -mfpmath=sse or -mfpmath=sse+387 ระบุไว้; ในอดีต
กรณี ความหมายของ IEEE ใช้โดยไม่มีความแม่นยำเกิน และในระยะหลัง ปัดเศษคือ
คาดการณ์ไม่ได้.
-ffast-คณิตศาสตร์
ชุดอุปกรณ์ -fno-คณิตศาสตร์เออร์โน, -funsafe-คณิตศาสตร์-optimizations, -ffinite-คณิตศาสตร์เท่านั้น,
-fno-ปัดเศษคณิตศาสตร์, -fno-สัญญาณ-nans และ -fcx-จำกัดช่วง.
ตัวเลือกนี้ทำให้มาโครตัวประมวลผลล่วงหน้า "__FAST_MATH__" ถูกกำหนด
ตัวเลือกนี้ไม่ได้เปิดใช้งานโดย any -O ตัวเลือกนอกจาก -Ofast เพราะมันอาจส่งผลให้
เอาต์พุตที่ไม่ถูกต้องสำหรับโปรแกรมที่ขึ้นอยู่กับการใช้งานจริงของ IEEE หรือ ISO
กฎ/ข้อกำหนดสำหรับฟังก์ชันทางคณิตศาสตร์ อย่างไรก็ตาม มันอาจให้รหัสเร็วขึ้นสำหรับ
โปรแกรมที่ไม่ต้องการการรับประกันตามข้อกำหนดเหล่านี้
-fno-คณิตศาสตร์เออร์โน
อย่าตั้งค่า "errno" หลังจากเรียกใช้ฟังก์ชันคณิตศาสตร์ที่ดำเนินการด้วย single
คำสั่ง เช่น "sqrt" โปรแกรมที่อาศัยข้อยกเว้น IEEE สำหรับข้อผิดพลาดทางคณิตศาสตร์
การจัดการอาจต้องการใช้แฟล็กนี้เพื่อความเร็วในขณะที่รักษา IEEE arithmetic
ความเข้ากันได้
ตัวเลือกนี้ไม่ได้เปิดใช้งานโดย any -O ตัวเลือกเนื่องจากอาจส่งผลให้เอาต์พุตไม่ถูกต้อง
สำหรับโปรแกรมที่ขึ้นอยู่กับการใช้งานจริงของ IEEE หรือ ISO
กฎ/ข้อกำหนดสำหรับฟังก์ชันทางคณิตศาสตร์ อย่างไรก็ตาม มันอาจให้รหัสเร็วขึ้นสำหรับ
โปรแกรมที่ไม่ต้องการการรับประกันตามข้อกำหนดเหล่านี้
ค่าเริ่มต้นคือ -fmath-เออเรโน.
ในระบบดาร์วิน ห้องสมุดคณิตศาสตร์ไม่เคยตั้งค่า "errno" จึงไม่มีเหตุผล
เพื่อให้ผู้เรียบเรียงพิจารณาถึงความเป็นไปได้และ -fno-คณิตศาสตร์เออร์โน คือ
ค่าเริ่มต้น.
-funsafe-คณิตศาสตร์-optimizations
อนุญาตการปรับให้เหมาะสมสำหรับเลขทศนิยมที่ (a) ถือว่าอาร์กิวเมนต์นั้นและ
ผลลัพธ์ถูกต้องและ (b) อาจละเมิดมาตรฐาน IEEE หรือ ANSI เมื่อใช้ในช่วงเวลาเชื่อมโยง
อาจรวมถึงไลบรารีหรือไฟล์เริ่มต้นที่เปลี่ยนคำควบคุม FPU เริ่มต้นหรือ
การเพิ่มประสิทธิภาพอื่นๆ ที่คล้ายคลึงกัน
ตัวเลือกนี้ไม่ได้เปิดใช้งานโดย any -O ตัวเลือกเนื่องจากอาจส่งผลให้เอาต์พุตไม่ถูกต้อง
สำหรับโปรแกรมที่ขึ้นอยู่กับการใช้งานจริงของ IEEE หรือ ISO
กฎ/ข้อกำหนดสำหรับฟังก์ชันทางคณิตศาสตร์ อย่างไรก็ตาม มันอาจให้รหัสเร็วขึ้นสำหรับ
โปรแกรมที่ไม่ต้องการการรับประกันตามข้อกำหนดเหล่านี้ เปิดใช้งาน
-fno-ลงนาม-ศูนย์, -fno-trapping-คณิตศาสตร์, -fassociative-คณิตศาสตร์ และ -freciprocal-คณิตศาสตร์.
ค่าเริ่มต้นคือ -fno-ไม่ปลอดภัย-การเพิ่มประสิทธิภาพทางคณิตศาสตร์.
-fassociative-คณิตศาสตร์
อนุญาตให้มีการเชื่อมโยงใหม่ของตัวถูกดำเนินการในชุดของการดำเนินการจุดลอยตัว นี้
ละเมิดมาตรฐานภาษา ISO C และ C++ โดยอาจเปลี่ยนผลการคำนวณ
หมายเหตุ: การเรียงลำดับใหม่อาจเปลี่ยนเครื่องหมายศูนย์รวมทั้งละเว้น NaNs และยับยั้งหรือ
สร้างอันเดอร์โฟลว์หรือโอเวอร์โฟลว์ (ดังนั้นจึงไม่สามารถใช้กับโค้ดที่ต้องอาศัยการปัดเศษได้)
พฤติกรรมเช่น "(x + 2**52) - 2**52" อาจจัดลำดับการเปรียบเทียบจุดทศนิยมใหม่และ
ดังนั้นจึงไม่สามารถใช้เมื่อต้องการเปรียบเทียบตามลำดับ ตัวเลือกนี้ต้องการสิ่งนั้น
ทั้งสอง -fno-ลงนาม-ศูนย์ และ -fno-trapping-คณิตศาสตร์ มีผลบังคับใช้ แถมยังไม่ทำให้
มีสติสัมปชัญญะมากกับ -Founding-คณิตศาสตร์. สำหรับ Fortran ตัวเลือกจะเปิดใช้งานโดยอัตโนมัติเมื่อ
ทั้งสอง -fno-ลงนาม-ศูนย์ และ -fno-trapping-คณิตศาสตร์ มีผลบังคับใช้
ค่าเริ่มต้นคือ -fno-associative-คณิตศาสตร์.
-freciprocal-คณิตศาสตร์
อนุญาตให้ใช้ส่วนกลับของค่าแทนการหารด้วยค่าถ้าสิ่งนี้
เปิดใช้งานการเพิ่มประสิทธิภาพ ตัวอย่างเช่น "x / y" สามารถแทนที่ด้วย "x * (1/y)" ซึ่งก็คือ
มีประโยชน์หาก "(1/y)" อยู่ภายใต้การกำจัดนิพจน์ย่อยทั่วไป โปรดทราบว่าสิ่งนี้
สูญเสียความแม่นยำและเพิ่มจำนวนความล้มเหลวในการทำงานกับค่า
ค่าเริ่มต้นคือ -fno-reciprocal-คณิตศาสตร์.
-ffinite-คณิตศาสตร์เท่านั้น
อนุญาตการปรับให้เหมาะสมสำหรับเลขทศนิยมที่ถือว่าอาร์กิวเมนต์นั้นและ
ผลลัพธ์ไม่ใช่ NaN หรือ +-Infs
ตัวเลือกนี้ไม่ได้เปิดใช้งานโดย any -O ตัวเลือกเนื่องจากอาจส่งผลให้เอาต์พุตไม่ถูกต้อง
สำหรับโปรแกรมที่ขึ้นอยู่กับการใช้งานจริงของ IEEE หรือ ISO
กฎ/ข้อกำหนดสำหรับฟังก์ชันทางคณิตศาสตร์ อย่างไรก็ตาม มันอาจให้รหัสเร็วขึ้นสำหรับ
โปรแกรมที่ไม่ต้องการการรับประกันตามข้อกำหนดเหล่านี้
ค่าเริ่มต้นคือ -fno-finite-คณิตศาสตร์เท่านั้น.
-fno-ลงนาม-ศูนย์
อนุญาตการปรับให้เหมาะสมสำหรับเลขทศนิยมที่ไม่สนใจค่าศูนย์
เลขคณิต IEEE ระบุพฤติกรรมของค่า +0.0 และ -0.0 ที่แตกต่างกัน ซึ่งจากนั้น
ห้ามลดความซับซ้อนของนิพจน์เช่น x+0.0 หรือ 0.0*x (ถึงกับ
-ffinite-คณิตศาสตร์เท่านั้น). ตัวเลือกนี้บอกเป็นนัยว่าเครื่องหมายของผลลัพธ์ที่เป็นศูนย์ไม่ใช่
สำคัญ.
ค่าเริ่มต้นคือ -fsigned-ศูนย์.
-fno-trapping-คณิตศาสตร์
คอมไพล์โค้ดโดยสมมติว่าการดำเนินการทศนิยมไม่สามารถสร้างให้ผู้ใช้มองเห็นได้
กับดัก กับดักเหล่านี้รวมถึงการหารด้วยศูนย์, ล้น, อันเดอร์โฟลว์, ผลลัพธ์ที่ไม่แน่นอนและ
การดำเนินการที่ไม่ถูกต้อง ตัวเลือกนี้ต้องการสิ่งนั้น -fno-สัญญาณ-nans มีผลบังคับใช้
การตั้งค่าตัวเลือกนี้อาจทำให้โค้ดเร็วขึ้นหากใช้เลขคณิต IEEE "ไม่หยุด"
เช่น
ตัวเลือกนี้ไม่ควรถูกเปิดโดยใดๆ -O ทางเลือก เนื่องจากอาจส่งผลให้
เอาต์พุตที่ไม่ถูกต้องสำหรับโปรแกรมที่ขึ้นอยู่กับการใช้งานจริงของ IEEE หรือ ISO
กฎ/ข้อกำหนดสำหรับฟังก์ชันทางคณิตศาสตร์
ค่าเริ่มต้นคือ -ftrapping-คณิตศาสตร์.
-Founding-คณิตศาสตร์
ปิดใช้งานการแปลงและการปรับให้เหมาะสมที่ถือว่าการปัดเศษทศนิยมเริ่มต้น
พฤติกรรม. นี่คือการปัดเศษเป็นศูนย์สำหรับการแปลงทศนิยมเป็นจำนวนเต็มและ
ปัดเศษให้ใกล้ที่สุดสำหรับการตัดปลายเลขคณิตอื่นๆ ทั้งหมด ตัวเลือกนี้ควรเป็น
ที่กำหนดไว้สำหรับโปรแกรมที่เปลี่ยนโหมดการปัดเศษ FP แบบไดนามิกหรือที่อาจจะ
ดำเนินการด้วยโหมดการปัดเศษที่ไม่ใช่ค่าเริ่มต้น ตัวเลือกนี้ปิดใช้งานการพับอย่างต่อเนื่องของ
นิพจน์ทศนิยม ณ เวลารวบรวม (ซึ่งอาจได้รับผลกระทบจากโหมดการปัดเศษ)
และการแปลงเลขคณิตที่ไม่ปลอดภัยต่อหน้าที่ขึ้นกับเครื่องหมาย
โหมดการปัดเศษ
ค่าเริ่มต้นคือ -fno-ปัดเศษคณิตศาสตร์.
ตัวเลือกนี้เป็นรุ่นทดลองและไม่รับประกันว่าจะปิดใช้งาน GCC . ทั้งหมด
การปรับให้เหมาะสมที่ได้รับผลกระทบจากโหมดการปัดเศษ GCC เวอร์ชันต่อไปอาจมีให้
การควบคุมการตั้งค่านี้ละเอียดยิ่งขึ้นโดยใช้ Pragma "FENV_ACCESS" ของ C99 บรรทัดคำสั่งนี้
จะใช้ตัวเลือกเพื่อระบุสถานะเริ่มต้นสำหรับ "FENV_ACCESS"
-fsignaling-แนนส์
คอมไพล์โค้ดโดยสมมติว่า IEEE ส่งสัญญาณ NaN อาจสร้างกับดักที่ผู้ใช้มองเห็นได้ในระหว่าง
การดำเนินการจุดลอยตัว การตั้งค่าตัวเลือกนี้จะปิดใช้งานการเพิ่มประสิทธิภาพที่อาจเปลี่ยนแปลง
จำนวนข้อยกเว้นที่มองเห็นได้ด้วยสัญญาณ NaN ตัวเลือกนี้หมายถึง
-ftrapping-คณิตศาสตร์.
ตัวเลือกนี้ทำให้มีการกำหนดมาโครตัวประมวลผลล่วงหน้า "__SUPPORT_SNAN__"
ค่าเริ่มต้นคือ -fno-สัญญาณ-nans.
ตัวเลือกนี้เป็นรุ่นทดลองและไม่รับประกันว่าจะปิดใช้งาน GCC . ทั้งหมด
การเพิ่มประสิทธิภาพที่ส่งผลต่อพฤติกรรมการส่งสัญญาณ NaN
-fsingle-precision-คงที่
ถือว่าค่าคงที่จุดลอยตัวเป็นความแม่นยำเดียวแทนที่จะแปลงโดยปริยาย
ให้เป็นค่าคงที่ความแม่นยำสองเท่า
-fcx-จำกัดช่วง
เมื่อเปิดใช้งาน ตัวเลือกนี้จะระบุว่าไม่จำเป็นต้องมีขั้นตอนการลดช่วงเมื่อ
ดำเนินการแบ่งที่ซับซ้อน อีกทั้งไม่มีการตรวจสอบว่าผลลัพธ์ของ a
การคูณหรือหารที่ซับซ้อนคือ "NaN + I*NaN" ด้วยความพยายามที่จะช่วยชีวิต
สถานการณ์ในกรณีนั้น ค่าเริ่มต้นคือ -fno-cx-จำกัดช่วงแต่เปิดใช้งานโดย
-ffast-คณิตศาสตร์.
ตัวเลือกนี้ควบคุมการตั้งค่าเริ่มต้นของ Pragma ISO C99 "CX_LIMITED_RANGE"
อย่างไรก็ตาม ตัวเลือกนี้ใช้ได้กับทุกภาษา
-fcx-fortran-กฎ
การคูณและการหารที่ซับซ้อนเป็นไปตามกฎของ Fortran การลดช่วงทำได้ดังนี้
ส่วนหนึ่งของการหารเชิงซ้อน แต่ไม่มีการตรวจสอบว่าผลลัพธ์ของการหารเชิงซ้อนนั้นหรือไม่
การคูณหรือหารคือ "NaN + I*NaN" ด้วยความพยายามที่จะกอบกู้สถานการณ์
ในกรณีนั้น.
ค่าเริ่มต้นคือ -fno-cx-fortran-กฎ.
ตัวเลือกต่อไปนี้จะควบคุมการเพิ่มประสิทธิภาพที่อาจช่วยปรับปรุงประสิทธิภาพ แต่ไม่ใช่
เปิดใช้งานโดย any -O ตัวเลือก. ส่วนนี้รวมถึงตัวเลือกการทดลองที่อาจก่อให้เกิด
รหัสเสีย
-fbranch-ความน่าจะเป็น
หลังจากรันโปรแกรมที่คอมไพล์ด้วย -fprofile-ส่วนโค้ง, คุณสามารถรวบรวมเป็นครั้งที่สอง
การใช้ -fbranch-ความน่าจะเป็นเพื่อปรับปรุงการเพิ่มประสิทธิภาพตามจำนวนครั้ง
แต่ละสาขาถูกจับ เมื่อโปรแกรมคอมไพล์ด้วย -fprofile-ส่วนโค้ง ออกก็ประหยัด
การดำเนินการส่วนโค้งนับเป็นไฟล์ที่เรียกว่า sourcename.gcda สำหรับแต่ละไฟล์ต้นฉบับ NS
ข้อมูลในไฟล์ข้อมูลนี้ขึ้นอยู่กับโครงสร้างของไฟล์ที่สร้างขึ้นมาก
ดังนั้นคุณต้องใช้ซอร์สโค้ดเดียวกันและตัวเลือกการเพิ่มประสิทธิภาพเดียวกันสำหรับทั้งคู่
การรวบรวม
ด้วยระบบเส้นทาง -fbranch-ความน่าจะเป็น, GCC ทำให้ REG_BR_PROB หมายเหตุในแต่ละ JUMP_INSN และ
CALL_INSN. สามารถใช้เพื่อปรับปรุงการเพิ่มประสิทธิภาพได้ ปัจจุบันใช้เฉพาะ
ในที่เดียว: ใน รีออร์ก.ซีแทนที่จะเดาว่าสาขาใดมีแนวโน้มมากที่สุด
เอา REG_BR_PROB ค่าต่างๆ ใช้เพื่อกำหนดเส้นทางที่จะนำไปใช้มากกว่า
บ่อยครั้ง.
-fprofile-ค่า
ถ้ารวมกับ -fprofile-ส่วนโค้งมันเพิ่มรหัสเพื่อให้ข้อมูลบางอย่างเกี่ยวกับค่าของ
มีการรวบรวมนิพจน์ในโปรแกรม
ด้วยระบบเส้นทาง -fbranch-ความน่าจะเป็น, มันอ่านกลับข้อมูลที่รวบรวมจากค่าโปรไฟล์ของ
นิพจน์สำหรับการใช้งานในการเพิ่มประสิทธิภาพ
เปิดใช้งานด้วย -fprofile-สร้าง และ -fprofile-ใช้.
-fvpt
ถ้ารวมกับ -fprofile-ส่วนโค้ง, ตัวเลือกนี้สั่งให้คอมไพเลอร์เพิ่มโค้ดไปยัง
รวบรวมข้อมูลเกี่ยวกับค่าของนิพจน์
ด้วยระบบเส้นทาง -fbranch-ความน่าจะเป็น, มันอ่านกลับข้อมูลที่รวบรวมและดำเนินการ .จริง
การเพิ่มประสิทธิภาพขึ้นอยู่กับพวกเขา ปัจจุบันการเพิ่มประสิทธิภาพรวมถึงความเชี่ยวชาญของ
การแบ่งงานโดยใช้ความรู้เกี่ยวกับคุณค่าของตัวส่วน
-frename-ลงทะเบียน
พยายามหลีกเลี่ยงการขึ้นต่อกันที่ผิดพลาดในโค้ดที่กำหนดเวลาไว้โดยใช้รีจิสเตอร์ left
หลังจากลงทะเบียนจัดสรรแล้ว การเพิ่มประสิทธิภาพนี้ให้ประโยชน์สูงสุดกับโปรเซสเซอร์ที่มีล็อต
ของการลงทะเบียน ขึ้นอยู่กับรูปแบบข้อมูลการดีบักที่เป้าหมายนำมาใช้
อย่างไรก็ตาม มันทำให้การดีบักเป็นไปไม่ได้ เนื่องจากตัวแปรไม่อยู่ใน "home ." อีกต่อไป
ลงทะเบียน".
เปิดใช้งานโดยค่าเริ่มต้นด้วย -funroll-ลูป และ -fpeel-ลูป.
-รถเทรเซอร์
ทำซ้ำหางเพื่อขยายขนาดซุปเปอร์บล็อก การเปลี่ยนแปลงนี้ทำให้ง่ายขึ้น
โฟลว์การควบคุมของฟังก์ชันช่วยให้การเพิ่มประสิทธิภาพอื่นๆ ทำงานได้ดีขึ้น
เปิดใช้งานด้วย -fprofile-ใช้.
-funroll-ลูป
คลายลูปซึ่งสามารถกำหนดจำนวนการวนซ้ำได้ ณ เวลารวบรวมหรือเมื่อ
เข้าสู่วง. -funroll-ลูป หมายถึง -frerun-cse-หลังลูป, -fweb และ
-frename-ลงทะเบียน. นอกจากนี้ยังเปิดใช้การลอกแบบวนซ้ำทั้งหมด (เช่น การนำ . ออกโดยสมบูรณ์
วนซ้ำด้วยการวนซ้ำจำนวนเล็กน้อยคงที่) ตัวเลือกนี้ทำให้โค้ดมีขนาดใหญ่ขึ้นและ
อาจหรือไม่อาจทำให้ทำงานเร็วขึ้น
เปิดใช้งานด้วย -fprofile-ใช้.
-funroll-all-ลูป
คลายลูปทั้งหมด แม้ว่าจำนวนการวนซ้ำจะไม่แน่นอนเมื่อลูปเป็น
เข้ามา ซึ่งมักจะทำให้โปรแกรมทำงานช้าลง -funroll-all-ลูป หมายถึง
ตัวเลือกเดียวกับ -funroll-ลูป.
-fpeel-ลูป
ปอกลูปที่มีข้อมูลเพียงพอที่จะไม่ม้วนมาก (จาก
ข้อเสนอแนะโปรไฟล์) นอกจากนี้ยังเปิดใช้การลอกแบบวนซ้ำทั้งหมด (เช่น การนำ . ออกโดยสมบูรณ์
วนซ้ำด้วยจำนวนการวนซ้ำคงที่เล็กน้อย)
เปิดใช้งานด้วย -fprofile-ใช้.
-fmove-loop-ค่าคงที่
เปิดใช้งานการเคลื่อนที่ไม่แปรผันของลูปในตัวเพิ่มประสิทธิภาพลูป RTL เปิดใช้งานที่ระดับ
-O1
-funswitch-ลูป
ย้ายกิ่งที่มีเงื่อนไขไม่แปรผันของลูปออกจากลูป โดยซ้ำกับ
วนซ้ำทั้งสองกิ่ง (แก้ไขตามผลลัพธ์ของเงื่อนไข)
-ffunction-ส่วน
-fdata-ส่วน
วางแต่ละฟังก์ชันหรือรายการข้อมูลลงในส่วนของตนเองในไฟล์เอาต์พุตหาก target
รองรับส่วนโดยพลการ ชื่อของฟังก์ชันหรือชื่อของรายการข้อมูล
กำหนดชื่อของส่วนในไฟล์ที่ส่งออก
ใช้ตัวเลือกเหล่านี้กับระบบที่ตัวเชื่อมโยงสามารถดำเนินการเพิ่มประสิทธิภาพเพื่อปรับปรุง
ตำแหน่งอ้างอิงในพื้นที่คำแนะนำ ระบบส่วนใหญ่ที่ใช้วัตถุ ELF
รูปแบบและตัวประมวลผล SPARC ที่รัน Solaris 2 มีตัวเชื่อมโยงที่มีการเพิ่มประสิทธิภาพดังกล่าว
AIX อาจมีการปรับให้เหมาะสมเหล่านี้ในอนาคต
ใช้ตัวเลือกเหล่านี้เฉพาะเมื่อมีประโยชน์ที่สำคัญจากการทำเช่นนั้นเท่านั้น เมื่อคุณ
ระบุตัวเลือกเหล่านี้แอสเซมเบลอร์และลิงเกอร์สร้างวัตถุขนาดใหญ่และปฏิบัติการได้
ไฟล์และยังช้ากว่า คุณไม่สามารถใช้ "gprof" กับทุกระบบได้หากคุณระบุสิ่งนี้
และคุณอาจมีปัญหากับการดีบักหากคุณระบุทั้งตัวเลือกนี้และ
-g.
-fbranch-เป้าหมาย-โหลด-เพิ่มประสิทธิภาพ
ดำเนินการเพิ่มประสิทธิภาพการโหลดรีจิสเตอร์เป้าหมายสาขาก่อนทำเธรดอารัมภบท / บทส่งท้าย
โดยทั่วไปแล้วการใช้รีจิสเตอร์เป้าหมายสามารถเปิดเผยได้เฉพาะในระหว่างการบรรจุใหม่เท่านั้น ดังนั้นการยก
โหลดออกจากลูปและการจัดตารางเวลาระหว่างบล็อกต้องการการเพิ่มประสิทธิภาพแยกต่างหาก
ผ่านไป
-fbranch-เป้าหมาย-โหลด-เพิ่มประสิทธิภาพ2
ดำเนินการเพิ่มประสิทธิภาพการโหลดรีจิสเตอร์เป้าหมายสาขาหลังจากเธรดอารัมภบท / บทส่งท้าย
-fbtr-bb-พิเศษ
เมื่อดำเนินการเพิ่มประสิทธิภาพการโหลดการลงทะเบียนเป้าหมายของสาขา อย่าใช้เป้าหมายของสาขาซ้ำ
ลงทะเบียนภายในบล็อกพื้นฐานใด ๆ
-fstack- ป้องกัน
ปล่อยโค้ดพิเศษเพื่อตรวจสอบบัฟเฟอร์ล้น เช่น การโจมตีแบบ stack smashing นี้
ทำได้โดยการเพิ่มตัวแปรป้องกันในการทำงานกับวัตถุที่มีช่องโหว่ นี้
รวมฟังก์ชันที่เรียกใช้ "alloca" และฟังก์ชันที่มีบัฟเฟอร์ขนาดใหญ่กว่า 8 ไบต์
ยามจะเริ่มต้นเมื่อป้อนฟังก์ชันแล้วตรวจสอบเมื่อ
ออกจากฟังก์ชัน หากการตรวจสอบยามล้มเหลว จะมีการพิมพ์ข้อความแสดงข้อผิดพลาดและโปรแกรม
ทางออก
หมายเหตุ: ใน Ubuntu 6.10 และเวอร์ชันที่ใหม่กว่า ตัวเลือกนี้จะเปิดใช้งานโดยค่าเริ่มต้นสำหรับ C, C++,
ObjC, ObjC++ หากไม่มี -fno-stack-ป้องกัน, -nostdlib, หรือ - อิสระ เป็น
พบว่า
-fstack-protector-ทั้งหมด
Like -fstack- ป้องกัน ยกเว้นว่าฟังก์ชันทั้งหมดได้รับการคุ้มครอง
-fsection-สมอ
พยายามลดจำนวนการคำนวณที่อยู่เชิงสัญลักษณ์โดยใช้ "สมอ" ที่แชร์
สัญลักษณ์ที่อยู่วัตถุใกล้เคียง การเปลี่ยนแปลงนี้สามารถช่วยลดจำนวนได้
ของรายการ GOT และ GOT เข้าถึงบางเป้าหมาย
ตัวอย่างเช่น การใช้งานฟังก์ชัน "foo" ต่อไปนี้:
คงที่ int a, b, c;
int foo (เป็นโมฆะ) { ส่งคืน a + b + c; }
มักจะคำนวณแอดเดรสของตัวแปรทั้งสาม แต่ถ้าคุณคอมไพล์มันด้วย
-fsection-สมอมันเข้าถึงตัวแปรจากจุดยึดทั่วไปแทน NS
ผลคล้ายกับ pseudocode ต่อไปนี้ (ซึ่งไม่ถูกต้อง C):
int foo (เป็นโมฆะ)
{
ลงทะเบียน int *xr = &x;
ส่งคืน xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
}
ไม่ใช่ทุกเป้าหมายที่รองรับตัวเลือกนี้
--พารามิเตอร์ ชื่อ=ความคุ้มค่า
ในบางสถานที่ GCC ใช้ค่าคงที่ต่างๆ เพื่อควบคุมปริมาณของการปรับให้เหมาะสมที่
เสร็จแล้ว ตัวอย่างเช่น GCC ไม่มีฟังก์ชันอินไลน์ที่มีมากกว่าค่าที่แน่นอน
จำนวนคำสั่ง คุณสามารถควบคุมค่าคงที่เหล่านี้ได้ในบรรทัดคำสั่ง
โดยใช้โปรแกรม --พารามิเตอร์ ตัวเลือก
ชื่อของพารามิเตอร์เฉพาะและความหมายของค่าต่างๆ จะเชื่อมโยงกับ
ภายในคอมไพเลอร์และอาจมีการเปลี่ยนแปลงโดยไม่ต้องแจ้งให้ทราบในอนาคต
เผยแพร่
ในแต่ละกรณี ความคุ้มค่า เป็นจำนวนเต็ม ตัวเลือกที่อนุญาตสำหรับ ชื่อ คือ:
ทำนายผลได้
เมื่อคาดการณ์ว่าจะรับสาขาด้วยความน่าจะเป็นต่ำกว่าเกณฑ์นี้
(เป็นเปอร์เซ็นต์) แล้วถือว่าคาดเดาได้ดี ค่าเริ่มต้นคือ 10
max-crossjump-ขอบ
จำนวนขอบขาเข้าสูงสุดที่ต้องพิจารณาสำหรับการกระโดดข้าม อัลกอริทึม
ใช้โดย -fcrossjumping คือ O(N^2) ในจำนวนขอบที่เข้ามาในแต่ละบล็อก
ค่าที่เพิ่มขึ้นหมายถึงการเพิ่มประสิทธิภาพเชิงรุกมากขึ้น ทำให้เวลาในการรวบรวม
เพิ่มขึ้นด้วยการปรับปรุงขนาดที่ปฏิบัติการได้เล็กน้อย
min-crossjump-insns
จำนวนคำสั่งขั้นต่ำที่ต้องจับคู่ที่ส่วนท้ายของสองช่วงตึก
ก่อนที่จะทำการกระโดดข้าม ค่านี้จะถูกละเว้นในกรณี
โดยที่คำสั่งทั้งหมดในบล็อกที่ข้ามไปนั้นตรงกัน NS
ค่าเริ่มต้นคือ 5
max-grow-copy-bb-insns
ปัจจัยการขยายขนาดโค้ดสูงสุดเมื่อคัดลอกบล็อกพื้นฐานแทน
กระโดด การขยายสัมพันธ์กับคำสั่งกระโดด ค่าเริ่มต้นคือ
8.
max-goto-duplication-insns
จำนวนคำสั่งสูงสุดที่จะทำซ้ำกับบล็อกที่ข้ามไปที่
คำนวณแล้ว เพื่อหลีกเลี่ยงพฤติกรรม O(N^2) ในการผ่านหลายครั้ง ปัจจัย GCC
คำนวณ gotos ในช่วงต้นของกระบวนการคอมไพล์ และ unfactors เหล่านั้นอย่างช้าที่สุด
เป็นไปได้. คำนวณเฉพาะการกระโดดที่ส่วนท้ายของบล็อกพื้นฐานที่มีไม่เกิน max-
goto-duplication-insns ไม่มีปัจจัย ค่าเริ่มต้นคือ 8
max-delay-slot-insn-ค้นหา
จำนวนคำสั่งสูงสุดที่ต้องพิจารณาเมื่อค้นหาคำสั่ง
เติมช่องหน่วงเวลา ถ้ามากกว่าจำนวนคำสั่งโดยพลการนี้
ค้นหาประหยัดเวลาจากการเติมช่องล่าช้ามีน้อยจึงหยุด
การค้นหา ค่าที่เพิ่มขึ้นหมายถึงการเพิ่มประสิทธิภาพเชิงรุกมากขึ้น ทำให้
เวลาในการรวบรวมเพิ่มขึ้นโดยอาจมีการปรับปรุงเวลาดำเนินการเล็กน้อย
max-delay-slot-live-search
เมื่อพยายามเติมช่องหน่วงเวลา จำนวนคำสั่งสูงสุดที่ต้องพิจารณา
เมื่อค้นหาบล็อกที่มีข้อมูลการลงทะเบียนสดที่ถูกต้อง เพิ่มขึ้นนี้
ค่าที่เลือกโดยพลการหมายถึงการเพิ่มประสิทธิภาพเชิงรุกมากขึ้น การเพิ่ม
เวลารวบรวม พารามิเตอร์นี้ควรถูกลบเมื่อรหัสสล็อตล่าช้าคือ
เขียนใหม่เพื่อรักษากราฟควบคุมการไหล
max-gcse-หน่วยความจำ
จำนวนหน่วยความจำสูงสุดโดยประมาณที่สามารถจัดสรรเพื่อดำเนินการได้
การเพิ่มประสิทธิภาพการกำจัดนิพจน์ย่อยทั่วไปทั่วโลก ถ้าความจำมากกว่า
จำเป็นต้องระบุ การปรับให้เหมาะสมยังไม่เสร็จสิ้น
max-gcse-insertion-อัตราส่วน
หากอัตราส่วนของการแทรกนิพจน์ต่อการลบมากกว่าค่านี้สำหรับ
นิพจน์ใด ๆ จากนั้น RTL PRE จะแทรกหรือลบนิพจน์และทำให้ออกจาก
การคำนวณซ้ำซ้อนบางส่วนในสตรีมคำสั่ง ค่าเริ่มต้นคือ
20.
ความยาวสูงสุดของรายการที่รอดำเนินการ
จำนวนสูงสุดของการจัดกำหนดการขึ้นต่อกันที่รอดำเนินการอนุญาตก่อนที่จะล้าง
สถานะปัจจุบันและการเริ่มต้นใหม่ ฟังก์ชั่นขนาดใหญ่ที่มีสาขาน้อยหรือโทรได้
สร้างรายการที่มีขนาดใหญ่เกินไปซึ่งใช้หน่วยความจำและทรัพยากรโดยไม่จำเป็น
max-modulo-backtrack-พยายาม
จำนวนครั้งสูงสุดของความพยายามย้อนกลับที่ตัวกำหนดตารางเวลาควรทำเมื่อมอดูโล
กำหนดการวนซ้ำ ค่าที่มากขึ้นสามารถเพิ่มเวลาในการคอมไพล์ได้แบบทวีคูณ
max-inline-insns-single
พารามิเตอร์หลายตัวควบคุมอินไลเนอร์ต้นไม้ที่ใช้ใน GCC ตัวเลขนี้กำหนด
จำนวนคำสั่งสูงสุด (นับในการเป็นตัวแทนภายในของ GCC) ใน a
ฟังก์ชันเดียวที่อินไลเนอร์ของต้นไม้พิจารณาสำหรับการอินไลน์ สิ่งนี้ส่งผลกระทบเท่านั้น
ฟังก์ชันที่ประกาศแบบอินไลน์และเมธอดที่นำมาใช้ในการประกาศคลาส (C++)
ค่าเริ่มต้นคือ 400
max-inline-insns-อัตโนมัติ
เมื่อคุณใช้ -finline-ฟังก์ชั่น (รวมอยู่ใน -O3) ฟังก์ชั่นมากมายที่จะ
มิฉะนั้น คอมไพเลอร์จะไม่ถูกพิจารณาว่าเป็นอินไลน์นิ่งจะถูกตรวจสอบ ถึง
ฟังก์ชันเหล่านั้น ขีดจำกัดที่แตกต่างกัน (จำกัดมากขึ้น) เมื่อเทียบกับฟังก์ชัน
สามารถใช้อินไลน์ที่ประกาศได้ ค่าเริ่มต้นคือ 40
อินไลน์นาทีเร่ง
เมื่อการปรับปรุงประสิทธิภาพโดยประมาณของผู้โทร + รันไทม์ของผู้รับสายเกินนี้
ขีด จำกัด (ในเปอร์เซ็นต์) ฟังก์ชันสามารถอินไลน์โดยไม่คำนึงถึงขีด จำกัด on
--พารามิเตอร์ max-inline-insns-single และ --พารามิเตอร์ max-inline-insns-อัตโนมัติ.
ฟังก์ชันขนาดใหญ่ innss
ขีดจำกัดที่ระบุฟังก์ชันขนาดใหญ่จริงๆ สำหรับฟังก์ชันที่เกินขีดจำกัดนี้
หลังจาก inlining, inlining จะถูก จำกัด โดย --พารามิเตอร์ ฟังก์ชั่นขนาดใหญ่เติบโต. นี้
พารามิเตอร์มีประโยชน์ในเบื้องต้นเพื่อหลีกเลี่ยงเวลาในการรวบรวมที่รุนแรงซึ่งเกิดจากการไม่
อัลกอริธึมเชิงเส้นที่ใช้โดยส่วนหลัง ค่าเริ่มต้นคือ 2700
ฟังก์ชั่นขนาดใหญ่เติบโต
ระบุการเติบโตสูงสุดของฟังก์ชันขนาดใหญ่ที่เกิดจากการอินไลน์เป็นเปอร์เซ็นต์ NS
ค่าเริ่มต้นคือ 100 ซึ่งจำกัดการเติบโตของฟังก์ชันขนาดใหญ่เป็น 2.0 เท่าของต้นฉบับ
ขนาด.
หน่วยใหญ่-insns
ขีดจำกัดที่ระบุหน่วยการแปลขนาดใหญ่ การเจริญเติบโตที่เกิดจาก inlining ของหน่วย
เกินขีดจำกัดนี้จำกัดโดย --พารามิเตอร์ อินไลน์หน่วยเติบโต. สำหรับยูนิตขนาดเล็ก
นี่อาจจะแน่นเกินไป ตัวอย่างเช่น พิจารณาหน่วยที่ประกอบด้วยฟังก์ชัน A
นั่นคืออินไลน์และ B ที่เรียก A สามครั้ง ถ้า B มีขนาดเล็กเมื่อเทียบกับ A
การเติบโตของหน่วยคือ 300\% และการวางแนวดังกล่าวก็สมเหตุสมผลมาก สำหรับขนาดใหญ่มาก
หน่วยที่ประกอบด้วยฟังก์ชัน inlineable ขนาดเล็ก อย่างไรก็ตาม การเติบโตของหน่วยโดยรวม
จำเป็นต้องมีขีดจำกัดเพื่อหลีกเลี่ยงการระเบิดของขนาดโค้ดแบบทวีคูณ ดังนั้นสำหรับขนาดเล็ก
หน่วย เพิ่มขนาดเป็น --พารามิเตอร์ หน่วยใหญ่-insns ก่อนสมัคร --พารามิเตอร์
อินไลน์หน่วยเติบโต. ค่าเริ่มต้นคือ 10000
อินไลน์หน่วยเติบโต
ระบุการเติบโตโดยรวมสูงสุดของหน่วยการคอมไพล์ที่เกิดจากการอินไลน์ NS
ค่าเริ่มต้นคือ 30 ซึ่งจำกัดการเติบโตของหน่วยไว้ที่ 1.3 เท่าของขนาดดั้งเดิม
ipcp-หน่วยเติบโต
ระบุการเติบโตโดยรวมสูงสุดของหน่วยการรวบรวมที่เกิดจากระหว่างขั้นตอน
การขยายพันธุ์อย่างต่อเนื่อง ค่าเริ่มต้นคือ 10 ซึ่งจำกัดการเติบโตของหน่วยเป็น 1.1
เท่าของขนาดเดิม
ใหญ่-stack-frame
ขีดจำกัดที่ระบุเฟรมสแต็กขนาดใหญ่ ในขณะที่อินไลน์อัลกอริทึมกำลังพยายาม
เพื่อไม่ให้เกินขีดจำกัดนี้มากเกินไป ค่าเริ่มต้นคือ 256 ไบต์
ใหญ่-stack-กรอบ-เติบโต
ระบุการเติบโตสูงสุดของสแต็กเฟรมขนาดใหญ่ที่เกิดจากการอินไลน์เป็นเปอร์เซ็นต์
ค่าเริ่มต้นคือ 1000 ซึ่งจำกัดการเติบโตของสแต็กเฟรมขนาดใหญ่ที่ 11 เท่า
ขนาดเดิม
max-inline-insns-แบบเรียกซ้ำ
max-inline-insns-recursive-auto
ระบุจำนวนคำสั่งสูงสุดที่สำเนาไม่อยู่ในบรรทัดของตนเอง
ฟังก์ชันอินไลน์แบบเรียกซ้ำสามารถเติบโตได้โดยการทำอินไลน์แบบเรียกซ้ำ
สำหรับฟังก์ชันที่ประกาศแบบอินไลน์ --พารามิเตอร์ max-inline-insns-แบบเรียกซ้ำ ถูกนำเข้าสู่
บัญชีผู้ใช้. สำหรับฟังก์ชันที่ไม่ได้ประกาศแบบอินไลน์ อินไลน์แบบเรียกซ้ำจะเกิดขึ้นก็ต่อเมื่อ
-finline-ฟังก์ชั่น (รวมอยู่ใน -O3) เปิดใช้งานและ --พารามิเตอร์ max-inline-inns-
เรียกซ้ำอัตโนมัติ ถูกนำมาใช้. ค่าเริ่มต้นคือ 450
max-inline-recursive-ความลึก
max-inline-recursive-deep-auto . สูงสุด
ระบุความลึกของการเรียกซ้ำสูงสุดที่ใช้สำหรับการอินไลน์แบบเรียกซ้ำ
สำหรับฟังก์ชันที่ประกาศแบบอินไลน์ --พารามิเตอร์ max-inline-recursive-ความลึก ถูกนำเข้าสู่
บัญชีผู้ใช้. สำหรับฟังก์ชันที่ไม่ได้ประกาศแบบอินไลน์ อินไลน์แบบเรียกซ้ำจะเกิดขึ้นก็ต่อเมื่อ
-finline-ฟังก์ชั่น (รวมอยู่ใน -O3) เปิดใช้งานและ --พารามิเตอร์ สูงสุดแบบอินไลน์แบบเรียกซ้ำ-
ความลึกอัตโนมัติ ถูกนำมาใช้. ค่าเริ่มต้นคือ 8
ความน่าจะเป็นขั้นต่ำแบบอินไลน์แบบเรียกซ้ำ
inlining แบบเรียกซ้ำนั้นทำกำไรได้เฉพาะสำหรับฟังก์ชันที่มีการเรียกซ้ำแบบลึกใน
เฉลี่ยและสามารถทำร้ายสำหรับฟังก์ชันที่มีความลึกการเรียกซ้ำน้อยโดยการเพิ่ม
ขนาดอารัมภบทหรือความซับซ้อนของตัวฟังก์ชันกับเครื่องมือเพิ่มประสิทธิภาพอื่นๆ
เมื่อมีความคิดเห็นเกี่ยวกับโปรไฟล์ (ดู -fprofile-สร้าง) การเรียกซ้ำที่เกิดขึ้นจริง
ความลึกสามารถเดาได้จากความน่าจะเป็นที่ฟังก์ชันเรียกซ้ำผ่านการเรียกที่กำหนด
การแสดงออก. พารามิเตอร์นี้จำกัดการอินไลน์เฉพาะเพื่อเรียกนิพจน์ซึ่ง
ความน่าจะเป็นเกินเกณฑ์ที่กำหนด (เป็นเปอร์เซ็นต์) ค่าเริ่มต้นคือ 10
หน้าแรก
ระบุการเจริญเติบโตที่อินไลเนอร์ต้นสามารถทำได้ ส่งผลให้ปริมาณเพิ่มขึ้น
ของ inlining สำหรับรหัสที่มีโทษนามธรรมขนาดใหญ่ ค่าเริ่มต้นคือ 10
การวนซ้ำช่วงต้นสูงสุด
การวนซ้ำช่วงต้นสูงสุด
ขีดจำกัดของการวนซ้ำของอินไลเนอร์ช่วงต้น โดยทั่วไปสิ่งนี้จะ จำกัด จำนวน
การเรียกทางอ้อมที่ซ้อนกันซึ่ง inliner แรก ๆ สามารถแก้ไขได้ โซ่ที่ลึกกว่านั้นยังคงอยู่
จัดการโดย inlining ปลาย
comdat-sharing-น่าจะเป็น
comdat-sharing-น่าจะเป็น
ความน่าจะเป็น (เป็นเปอร์เซ็นต์) ที่ฟังก์ชันอินไลน์ C++ พร้อมการมองเห็น comdat เป็น
ใช้ร่วมกันในหน่วยการคอมไพล์หลายหน่วย ค่าเริ่มต้นคือ 20
min-vect-loop-bound
จำนวนการวนซ้ำขั้นต่ำที่ไม่มีการวนซ้ำเมื่อ
-ftree- vectorize ถูกนำมาใช้. จำนวนการวนซ้ำหลังจาก vectorization จำเป็นต้อง
มากกว่าค่าที่ระบุโดยตัวเลือกนี้เพื่ออนุญาตให้ใช้เวกเตอร์ NS
ค่าเริ่มต้นคือ 0
gcse-ต้นทุนระยะทางอัตราส่วน
ตัวคูณมาตราส่วนในการคำนวณระยะทางสูงสุดนิพจน์สามารถย้ายโดย
การเพิ่มประสิทธิภาพ GCSE ปัจจุบันนี้รองรับเฉพาะในรหัส hoisting pass
ยิ่งอัตราส่วนมากเท่าไร การรอกโค้ดก็จะยิ่งซับซ้อนมากขึ้นเท่านั้น
นิพจน์ กล่าวคือ นิพจน์ที่มีราคาน้อยกว่า gcse-ไม่จำกัด-
ราคา. การระบุ 0 ปิดใช้งานการยกนิพจน์ทั่วไป ค่าเริ่มต้นคือ
10.
gcse-ไม่จำกัดค่าใช้จ่าย
ต้นทุน วัดโดยคร่าว ๆ เป็นต้นทุนของคำสั่งเครื่องเดียวทั่วไป ที่
ซึ่งการเพิ่มประสิทธิภาพ GCSE ไม่ได้จำกัดระยะทางที่นิพจน์สามารถเดินทางได้
ปัจจุบันนี้รองรับเฉพาะในรหัส hoisting pass ค่าใช้จ่ายที่น้อยกว่า,
ยิ่งการยกโค้ดที่ก้าวร้าวมากขึ้นเท่าไหร่ การระบุ 0 ช่วยให้นิพจน์ทั้งหมดเป็น
เดินทางได้ไม่จำกัดระยะทาง ค่าเริ่มต้นคือ 3
สูงสุดรอกความลึก
ความลึกของการค้นหาในทรี dominator สำหรับนิพจน์ที่จะยก มันถูกใช้
เพื่อหลีกเลี่ยงพฤติกรรมกำลังสองในอัลกอริทึมการชักรอก ค่า 0 ไม่จำกัด
ในการค้นหา แต่อาจทำให้การรวบรวมฟังก์ชั่นขนาดใหญ่ช้าลง ค่าเริ่มต้น
คือ 30
การเปรียบเทียบหางรวมสูงสุด
จำนวน bb ที่ใกล้เคียงกันสูงสุดเพื่อเปรียบเทียบ bb ด้วย นี้ใช้เพื่อหลีกเลี่ยง
พฤติกรรมกำลังสองในการรวมหางต้นไม้ ค่าเริ่มต้นคือ 10
max-tail-merge-วนซ้ำ
จำนวนครั้งสูงสุดของการส่งผ่านฟังก์ชัน ใช้เพื่อ
จำกัดเวลาการรวบรวมในการรวมหางต้นไม้ ค่าเริ่มต้นคือ 2
max-unrolled-insns
จำนวนคำสั่งสูงสุดที่อาจต้องคลายการวนซ้ำ หากวนซ้ำ
ถูกคลี่ออก พารามิเตอร์นี้ยังกำหนดจำนวนครั้งที่รหัสลูปคือ
คลี่คลาย
ค่าเฉลี่ยสูงสุดที่ไม่ได้ลงทะเบียน
จำนวนคำสั่งสูงสุดที่ลำเอียงโดยความน่าจะเป็นของการดำเนินการนั้น
อาจต้องคลี่คลายห่วง หากมีการวนซ้ำ พารามิเตอร์นี้ยัง
กำหนดจำนวนครั้งที่คลายโค้ดวนซ้ำ
เวลาสูงสุดที่คลายออก
จำนวนสูงสุดของการคลี่คลายลูปเดียว
max-ปอกเปลือก inns
จำนวนคำสั่งสูงสุดที่อาจต้องลอกลูป หากวนซ้ำ
ถูกลอก พารามิเตอร์นี้ยังกำหนดจำนวนครั้งที่ลอกโค้ดลูป
เวลาลอกสูงสุด
จำนวนสูงสุดของการปอกของวงเดียว
max-peel-สาขา
จำนวนกิ่งสูงสุดบนเส้นทางร้อนผ่านลำดับที่ปอกเปลือก
max-สมบูรณ์-ปอกเปลือก inns
จำนวนสูงสุดของ inns ของการปอกอย่างสมบูรณ์
max-completely-peel-times สูงสุด
จำนวนรอบสูงสุดของการวนซ้ำเพื่อให้เหมาะสำหรับการลอกแบบสมบูรณ์
max-completely-peel-loop-nest-ความลึก
ความลึกสูงสุดของรังแบบวนซ้ำเหมาะสำหรับการลอกแบบสมบูรณ์
สูงสุด unswitch-insns
จำนวนครั้งสูงสุดของการวนซ้ำที่ไม่ได้สลับ
max-unswitch-ระดับ
จำนวนสาขาสูงสุดที่ไม่ได้เปลี่ยนในลูปเดียว
ราคาแพง
ต้นทุนขั้นต่ำของนิพจน์ราคาแพงในการเคลื่อนที่แบบวนซ้ำ
iv-พิจารณา-ทั้งหมด-ผู้สมัครที่ถูกผูกไว้
ผูกกับจำนวนผู้สมัครสำหรับตัวแปรเหนี่ยวนำ ด้านล่างซึ่งผู้สมัครทั้งหมด
ได้รับการพิจารณาสำหรับการใช้งานแต่ละครั้งในการเพิ่มประสิทธิภาพตัวแปรเหนี่ยวนำ ถ้ามี
ผู้สมัครมากกว่านี้ พิจารณาเฉพาะผู้ที่เกี่ยวข้องมากที่สุดเท่านั้นที่จะหลีกเลี่ยง
ความซับซ้อนของเวลากำลังสอง
iv-max-พิจารณาใช้
การปรับให้เหมาะสมตัวแปรเหนี่ยวนำให้ขึ้นในลูปที่มีการเหนี่ยวนำมากขึ้น
การใช้ตัวแปร
iv-always-prune-cand-set-bound
หากจำนวนผู้สมัครในชุดน้อยกว่าค่านี้ ให้ลอง .เสมอ
ลบ ivs ที่ไม่จำเป็นออกจากชุดเมื่อเพิ่มใหม่
scev-max-expr-ขนาด
ผูกพันกับขนาดของนิพจน์ที่ใช้ในเครื่องวิเคราะห์วิวัฒนาการสเกลาร์ ใหญ่
นิพจน์ทำให้เครื่องวิเคราะห์ช้าลง
scev-max-expr-ความซับซ้อน
ผูกพันกับความซับซ้อนของนิพจน์ในตัววิเคราะห์สเกลาร์วิวัฒนาการ
นิพจน์ที่ซับซ้อนทำให้ตัววิเคราะห์ช้าลง
โอเมก้า-แม็กซ์-วาร์
จำนวนตัวแปรสูงสุดในระบบข้อจำกัดโอเมก้า ค่าเริ่มต้น
คือ 128
Omega-max-geqs
จำนวนความไม่เท่าเทียมกันสูงสุดในระบบข้อจำกัดโอเมก้า ค่าเริ่มต้น
ค่าคือ 256
Omega-max-eqs
จำนวนสูงสุดของความเท่าเทียมกันในระบบข้อจำกัดโอเมก้า ค่าเริ่มต้น
คือ 128
Omega-max-wild-cards
จำนวนตัวแปรไวด์การ์ดสูงสุดที่โปรแกรมแก้ปัญหา Omega สามารถแทรกได้
ค่าเริ่มต้นคือ 18
Omega-hash-table-size
ขนาดของตารางแฮชในโปรแกรมแก้ปัญหาโอเมก้า ค่าเริ่มต้นคือ 550
โอเมก้า-แม็กซ์-คีย์
จำนวนคีย์สูงสุดที่ใช้โดยโปรแกรมแก้ปัญหา Omega ค่าเริ่มต้นคือ 500
โอเมก้า-กำจัด-ซ้ำซ้อน-ข้อจำกัด
เมื่อตั้งค่าเป็น 1 ให้ใช้วิธีการที่มีราคาแพงเพื่อขจัดข้อจำกัดที่ซ้ำซ้อนทั้งหมด NS
ค่าเริ่มต้นคือ 0
vect-max-version-for-align-checks
จำนวนสูงสุดของการตรวจสอบรันไทม์ที่สามารถทำได้เมื่อทำการวนซ้ำ
การกำหนดเวอร์ชันสำหรับการจัดตำแหน่งใน vectorizer
vect-max-version-for-alias-checks
จำนวนสูงสุดของการตรวจสอบรันไทม์ที่สามารถทำได้เมื่อทำการวนซ้ำ
การกำหนดเวอร์ชันสำหรับนามแฝงใน vectorizer
vect-max-peeling-for-การจัดตำแหน่ง
จำนวนสูงสุดของการลอกลูปเพื่อเพิ่มประสิทธิภาพการจัดตำแหน่งการเข้าถึงสำหรับ vectorizer ค่า
-1 หมายถึง 'ไม่จำกัด'
การวนซ้ำสูงสุดเพื่อติดตาม
จำนวนสูงสุดของการวนซ้ำอัลกอริทึมเดรัจฉานสำหรับการวิเคราะห์
ของจำนวนการวนซ้ำของลูปที่พยายามประเมิน
ร้อน bb-นับ ws-permille
จำนวนโปรไฟล์บล็อกพื้นฐานถือว่าน่าสนใจหากมีส่วนทำให้
permillage (เช่น 0...1000) ของการดำเนินการที่ทำโปรไฟล์ทั้งหมด
ร้อน-bb-ความถี่-เศษส่วน
เลือกเศษของความถี่บล็อกการเข้าของการดำเนินการของบล็อกพื้นฐานใน
ฟังก์ชั่นที่ได้รับจากบล็อกพื้นฐานจะต้องได้รับการพิจารณาว่าร้อน
การทำซ้ำที่คาดการณ์ไว้สูงสุด
จำนวนสูงสุดของการวนซ้ำแบบวนซ้ำที่เราคาดการณ์แบบคงที่ สิ่งนี้มีประโยชน์ใน
กรณีที่ฟังก์ชันมีลูปเดียวที่มีขอบเขตที่รู้จักและลูปอื่น
ด้วยขอบเขตที่ไม่รู้จัก จำนวนการวนซ้ำที่ทราบนั้นคาดการณ์ได้อย่างถูกต้องในขณะที่
ไม่ทราบจำนวนการวนซ้ำเฉลี่ยประมาณ 10 ซึ่งหมายความว่าลูป
ไร้ขอบเขตดูเหมือนเยือกเย็นเมื่อเทียบกับอีกฝ่ายหนึ่ง
จัดแนวเกณฑ์
เลือกเศษส่วนของความถี่สูงสุดของการดำเนินการของบล็อกพื้นฐานใน
ฟังก์ชันเพื่อจัดแนวบล็อกพื้นฐาน
จัดวนวนซ้ำ
การวนซ้ำที่คาดว่าจะวนซ้ำอย่างน้อยตามจำนวนการวนซ้ำที่เลือกจะถูกจัดตำแหน่ง
ติดตามไดนามิกครอบคลุม
ติดตามไดนามิกครอบคลุมข้อเสนอแนะ
ค่านี้ใช้เพื่อจำกัดการสร้าง superblock เมื่อคิดเป็นเปอร์เซ็นต์ของ
คำแนะนำที่ดำเนินการจะครอบคลุม สิ่งนี้จำกัดการขยายขนาดโค้ดที่ไม่จำเป็น
โครงการ ติดตามไดนามิกครอบคลุมข้อเสนอแนะ ใช้เฉพาะเมื่อข้อเสนอแนะโปรไฟล์คือ
มีอยู่. โปรไฟล์จริง (เมื่อเทียบกับการประมาณค่าแบบสถิต) มีมากมาย
สมดุลน้อยลงทำให้เกณฑ์มีค่ามากขึ้น
ติดตามการเจริญเติบโตรหัสสูงสุด
หยุดการทำสำเนาหางเมื่อการเติบโตของโค้ดถึงเปอร์เซ็นต์ที่กำหนด มันคือ
ขีด จำกัด ที่ค่อนข้างประดิษฐ์เนื่องจากสำเนาส่วนใหญ่จะถูกลบออกในภายหลังในกากบาท
กระโดดดังนั้นจึงอาจตั้งค่าให้สูงกว่าการเติบโตของโค้ดที่ต้องการได้มาก
tracer-min-สาขา-อัตราส่วน
หยุดการเติบโตแบบย้อนกลับเมื่อความน่าจะเป็นย้อนกลับของขอบที่ดีที่สุดน้อยกว่านี้
เกณฑ์ (เป็นเปอร์เซ็นต์)
tracer-min-สาขา-อัตราส่วน
ติดตามนาทีสาขาอัตราส่วนข้อเสนอแนะ
หยุดการเติบโตไปข้างหน้าหากขอบที่ดีที่สุดมีความเป็นไปได้ต่ำกว่าเกณฑ์นี้
ในทำนองเดียวกันกับ ติดตามไดนามิกครอบคลุม มีค่าสองค่า ค่าหนึ่งสำหรับการรวบรวม
สำหรับข้อเสนอแนะโปรไฟล์และอีกรายการสำหรับการรวบรวมโดยไม่ต้อง มูลค่าการรวบรวม
กับความคิดเห็นโปรไฟล์จะต้องระมัดระวังมากขึ้น (สูงกว่า) เพื่อให้
ตัวติดตามมีประสิทธิภาพ
max-cse-เส้นทางความยาว
จำนวนบล็อกพื้นฐานสูงสุดบนเส้นทางที่ CSE พิจารณา ค่าเริ่มต้นคือ 10
สูงสุด-cse-insns
จำนวนสูงสุดของคำสั่ง CSE ที่ประมวลผลก่อนการฟลัช ค่าเริ่มต้นคือ
1000.
ggc-min-ขยาย
GCC ใช้ตัวรวบรวมขยะเพื่อจัดการการจัดสรรหน่วยความจำของตัวเอง พารามิเตอร์นี้
ระบุเปอร์เซ็นต์ขั้นต่ำที่ฮีปของตัวรวบรวมขยะควรเป็น
อนุญาตให้ขยายระหว่างคอลเลกชัน การปรับแต่งนี้อาจช่วยเพิ่มความเร็วในการคอมไพล์;
ไม่มีผลกับการสร้างโค้ด
ค่าเริ่มต้นคือ 30% + 70% * (RAM/1GB) โดยมีขอบเขตบนเป็น 100% เมื่อ RAM >= 1GB
หาก "getrlimit" พร้อมใช้งาน แนวคิดของ "RAM" จะเล็กที่สุดของ RAM จริงและ
"RLIMIT_DATA" หรือ "RLIMIT_AS" หาก GCC ไม่สามารถคำนวณ RAM ได้โดยเฉพาะ
แพลตฟอร์ม ใช้ขอบล่าง 30% การตั้งค่าพารามิเตอร์นี้และ ggc-นาที-
ขนาดใหญ่ เป็นศูนย์ทำให้เกิดการรวบรวมเต็มรูปแบบในทุกโอกาส นี่คือ
ช้ามาก แต่อาจมีประโยชน์สำหรับการดีบัก
ggc-min-heapsize
ขนาดขั้นต่ำของกองขยะก่อนที่จะเริ่มรบกวนการรวบรวม
ขยะ. คอลเล็กชันแรกเกิดขึ้นหลังจากฮีปขยายโดย ggc-min-ขยาย%
เกิน ggc-min-heapsize. อีกครั้ง การปรับแต่งนี้อาจช่วยเพิ่มความเร็วในการรวบรวมและ
ไม่มีผลกับการสร้างโค้ด
ค่าดีฟอลต์คือ RAM/8, RLIMIT_RSS ที่เล็กกว่าหรือขีดจำกัดที่พยายามทำให้แน่ใจว่า
ที่ RLIMIT_DATA หรือ RLIMIT_AS ไม่เกิน แต่มีขอบล่างที่4096
(สี่เมกะไบต์) และขอบบนที่ 131072 (128 เมกะไบต์) หาก GCC ไม่สามารถทำได้
ในการคำนวณ RAM บนแพลตฟอร์มใดแพลตฟอร์มหนึ่ง จะใช้ขอบเขตล่าง การตั้งค่านี้
พารามิเตอร์ขนาดใหญ่มากปิดการใช้งานการรวบรวมขยะอย่างมีประสิทธิภาพ การตั้งค่านี้
พารามิเตอร์และ ggc-min-ขยาย เป็นศูนย์ทำให้คอลเลกชันเต็มรูปแบบเกิดขึ้นที่ทุก ๆ
โอกาส
โหลดซ้ำสูงสุดค้นหา innss
จำนวนสูงสุดของคำสั่งที่โหลดซ้ำควรมองย้อนกลับเพื่อเทียบเท่า
ลงทะเบียน. ค่าที่เพิ่มขึ้นหมายถึงการเพิ่มประสิทธิภาพเชิงรุกมากขึ้น ทำให้
เวลาในการรวบรวมเพิ่มขึ้นด้วยประสิทธิภาพที่ดีขึ้นเล็กน้อย ค่าเริ่มต้น
ค่าคือ 100
ตำแหน่งหน่วยความจำสูงสุด cselib
จำนวนสูงสุดของตำแหน่งหน่วยความจำ cselib ควรนำมาพิจารณาด้วย
ค่าที่เพิ่มขึ้นหมายถึงการเพิ่มประสิทธิภาพเชิงรุกมากขึ้น ทำให้เวลาในการรวบรวม
เพิ่มขึ้นด้วยประสิทธิภาพที่ดีขึ้นเล็กน้อย ค่าเริ่มต้นคือ 500
เรียงลำดับใหม่บล็อกซ้ำ
เรียงลำดับใหม่บล็อกซ้ำข้อเสนอแนะ
ใช้โดยลำดับการเรียงลำดับบล็อกพื้นฐานใหม่เพื่อตัดสินใจว่าจะใช้แบบไม่มีเงื่อนไขหรือไม่
สาขาหรือทำซ้ำรหัสในปลายทาง รหัสจะซ้ำกันเมื่อของมัน
ขนาดโดยประมาณมีขนาดเล็กกว่าค่านี้คูณด้วยขนาดโดยประมาณของ
กระโดดอย่างไม่มีเงื่อนไขในฮอตสปอตของโปรแกรม
โครงการ เรียงลำดับใหม่บล็อกซ้ำข้อเสนอแนะ ใช้เฉพาะเมื่อข้อเสนอแนะโปรไฟล์คือ
มีอยู่. อาจถูกตั้งค่าเป็นค่าที่สูงกว่า เรียงลำดับใหม่บล็อกซ้ำ ตั้งแต่
ข้อมูลเกี่ยวกับฮอตสปอตมีความแม่นยำมากขึ้น
max-sched-ready-inns
จำนวนคำสั่งสูงสุดที่พร้อมจะออกให้ ตัวกำหนดตารางเวลาควร
พิจารณาเมื่อใดก็ได้ในช่วงการผ่านกำหนดการครั้งแรก มูลค่าที่เพิ่มขึ้น
หมายถึงการค้นหาที่ละเอียดยิ่งขึ้นทำให้เวลาในการรวบรวมเพิ่มขึ้นด้วยบางที
ประโยชน์น้อย ค่าเริ่มต้นคือ 100
กำหนดภูมิภาคสูงสุดบล็อก
จำนวนบล็อกสูงสุดในภูมิภาคที่จะพิจารณาสำหรับ interblock
การตั้งเวลา ค่าเริ่มต้นคือ 10
max-pipeline-region-blocks
จำนวนบล็อกสูงสุดในภูมิภาคที่จะพิจารณาสำหรับการวางท่อใน
ตัวกำหนดตารางเวลาที่เลือก ค่าเริ่มต้นคือ 15
กำหนดภูมิภาคสูงสุด
จำนวน insns สูงสุดในภูมิภาคที่จะพิจารณาสำหรับ interblock
การตั้งเวลา ค่าเริ่มต้นคือ 100
max-pipeline-region-insns
จำนวน insns สูงสุดในภูมิภาคที่จะพิจารณาสำหรับการวางท่อใน
ตัวกำหนดตารางเวลาที่เลือก ค่าเริ่มต้นคือ 200
min-spec-ปัญหา
ความน่าจะเป็นขั้นต่ำ (เป็นเปอร์เซ็นต์) ในการเข้าถึงบล็อกต้นทางสำหรับ interblock
กำหนดการเก็งกำไร ค่าเริ่มต้นคือ 40
กำหนดการขยายสูงสุด-ภูมิภาค-iters
จำนวนสูงสุดของการทำซ้ำผ่าน CFG เพื่อขยายภูมิภาค ค่า 0 (the
ค่าเริ่มต้น) ปิดใช้งานส่วนขยายภูมิภาค
max-sched-insn-ความขัดแย้ง-ความล่าช้า
ความขัดแย้งสูงสุดล่าช้าสำหรับ insn เพื่อพิจารณาการเคลื่อนไหวเก็งกำไร
ค่าเริ่มต้นคือ 3
กำหนด-spec-prob-cutoff
ความน่าจะเป็นน้อยที่สุดของความสำเร็จในการเก็งกำไร (เป็นเปอร์เซ็นต์) ดังนั้นการเก็งกำไร
มีกำหนดการ insns ค่าเริ่มต้นคือ 40
กำหนด-spec-state-edge-prob-cutoff
ความน่าจะเป็นขั้นต่ำที่ขอบต้องมีสำหรับตัวจัดกำหนดการเพื่อบันทึกสถานะ
ข้ามมัน ค่าเริ่มต้นคือ 10
ตาราง-mem-จริง-dep-ต้นทุน
ระยะห่างน้อยที่สุด (ในรอบ CPU) ระหว่างการจัดเก็บและโหลดเป้าหมายหน่วยความจำเดียวกัน
สถานที่ ค่าเริ่มต้นคือ 1
selsched-max-lookahead
ขนาดสูงสุดของหน้าต่าง lookahead ของการจัดกำหนดการแบบเลือกสรร มันเป็นความลึก
ของการค้นหาคำแนะนำที่มีอยู่ ค่าเริ่มต้นคือ 50
selsched-max-sched-ครั้ง
จำนวนครั้งสูงสุดที่กำหนดคำสั่งระหว่างการเลือก
การตั้งเวลา นี่คือการจำกัดจำนวนการวนซ้ำที่
คำสั่งอาจวางท่อ ค่าเริ่มต้นคือ 2
selsched-max-insns-to-เปลี่ยนชื่อ
จำนวนคำสั่งที่ดีที่สุดสูงสุดในรายการพร้อมที่พิจารณา
การเปลี่ยนชื่อในตัวกำหนดตารางเวลาที่เลือก ค่าเริ่มต้นคือ 2
SMS-นาที-sc
ค่าต่ำสุดของการนับสเตจที่สร้างตัวจัดกำหนดการสวิงโมดูโล NS
ค่าเริ่มต้นคือ 2
ค่าสูงสุดสุดท้าย rtl
ขนาดสูงสุดที่วัดเป็นจำนวน RTL ที่สามารถบันทึกได้ในนิพจน์
ในตัวรวมสำหรับการลงทะเบียนหลอกเป็นค่าที่ทราบล่าสุดของการลงทะเบียนนั้น NS
ค่าเริ่มต้นคือ 10000
จำนวนเต็มแบ่งปันขีดจำกัด
ค่าคงที่จำนวนเต็มขนาดเล็กสามารถใช้โครงสร้างข้อมูลที่ใช้ร่วมกันได้ โดยลดขนาดของคอมไพเลอร์
การใช้หน่วยความจำและเพิ่มความเร็ว สิ่งนี้ตั้งค่าสูงสุดของการแชร์
ค่าคงที่จำนวนเต็ม ค่าเริ่มต้นคือ 256
ssp-บัฟเฟอร์-ขนาด
ขนาดต่ำสุดของบัฟเฟอร์ (เช่น อาร์เรย์) ที่ได้รับการป้องกันการทุบสแต็ก
เมื่อ -fstack-ป้องกัน ถูกนำมาใช้.
ค่าเริ่มต้นนี้ก่อน Ubuntu 10.10 คือ "8" ปัจจุบันเป็น "4" เพื่อเพิ่ม
จำนวนฟังก์ชันที่ป้องกันโดยตัวป้องกันปล่อง
max-jump-thread-duplication-stmts
จำนวนคำสั่งสูงสุดที่อนุญาตในบล็อกที่ต้องทำซ้ำเมื่อ
กระโดดเกลียว
ฟิลด์สูงสุดสำหรับฟิลด์ที่มีความละเอียดอ่อน
จำนวนสูงสุดของฟิลด์ในโครงสร้างที่ปฏิบัติในลักษณะที่ละเอียดอ่อนของฟิลด์ระหว่าง
การวิเคราะห์ตัวชี้ ค่าเริ่มต้นคือศูนย์สำหรับ -O0 และ -O1และ 100 สำหรับ -คุณ, -O2และ
-O3.
การดึงข้อมูลล่วงหน้า-แฝง
ประมาณการจำนวนคำสั่งเฉลี่ยที่ดำเนินการก่อนดึงข้อมูลล่วงหน้า
เสร็จสิ้น ระยะทางล่วงหน้าเป็นสัดส่วนกับค่าคงที่นี้
การเพิ่มจำนวนนี้อาจนำไปสู่การดึงสตรีมล่วงหน้าน้อยลง (ดู
พร้อมกัน-prefetches).
พร้อมกัน-prefetches
จำนวนการดึงข้อมูลล่วงหน้าสูงสุดที่สามารถเรียกใช้ได้พร้อมกัน
l1-cache-line-size
ขนาดของบรรทัดแคชในแคช L1 หน่วยเป็นไบต์
l1-แคชขนาด
ขนาดของแคช L1 ในหน่วยกิโลไบต์
l2-แคชขนาด
ขนาดของแคช L2 ในหน่วยกิโลไบต์
min-insn-to-prefetch-อัตราส่วน
อัตราส่วนขั้นต่ำระหว่างจำนวนคำสั่งและจำนวนการดึงข้อมูลล่วงหน้า
เพื่อเปิดใช้งานการดึงข้อมูลล่วงหน้าในลูป
prefetch-min-insn-to-mem-อัตราส่วน
อัตราส่วนขั้นต่ำระหว่างจำนวนคำสั่งและจำนวนหน่วยความจำ
การอ้างอิงเพื่อเปิดใช้งานการดึงข้อมูลล่วงหน้าในลูป
ใช้ประเภทบัญญัติ
คอมไพเลอร์ควรใช้ระบบประเภท "บัญญัติ" หรือไม่ โดยค่าเริ่มต้น this
ควรเป็น 1 เสมอ ซึ่งใช้กลไกภายในที่มีประสิทธิภาพมากขึ้นในการเปรียบเทียบ
ประเภท C++ และ Objective-C++ อย่างไรก็ตาม หากข้อบกพร่องในระบบประเภทบัญญัติคือ
ทำให้การรวบรวมล้มเหลว ตั้งค่านี้เป็น 0 เพื่อปิดใช้งานประเภทบัญญัติ
เปลี่ยน-แปลง-สูงสุด-สาขา-อัตราส่วน
การแปลงการเริ่มต้นสวิตช์ปฏิเสธที่จะสร้างอาร์เรย์ที่ใหญ่กว่า
เปลี่ยน-แปลง-สูงสุด-สาขา-อัตราส่วน คูณด้วยจำนวนสาขาในสวิตช์
ความยาวสูงสุดบางส่วนต่อต้าน
ความยาวสูงสุดของชุดป้องกันบางส่วนที่คำนวณระหว่างต้นไม้บางส่วน
การเพิ่มประสิทธิภาพการกำจัดความซ้ำซ้อน (-ftree-ก่อน) เมื่อเพิ่มประสิทธิภาพที่ -O3 ขึ้นไป
สำหรับซอร์สโค้ดบางประเภท การกำจัดความซ้ำซ้อนที่ปรับปรุงแล้ว
การปรับให้เหมาะสมอาจหนีไป ใช้หน่วยความจำทั้งหมดที่มีอยู่บนโฮสต์
เครื่องจักร. พารามิเตอร์นี้กำหนดขีดจำกัดความยาวของชุดที่คำนวณ
ซึ่งป้องกันพฤติกรรมหลบหนี การตั้งค่าเป็น 0 สำหรับพารามิเตอร์นี้
อนุญาตให้กำหนดความยาวได้ไม่จำกัด
sccvn-สูงสุด-scc-ขนาด
ขนาดสูงสุดของส่วนประกอบที่เชื่อมต่ออย่างแน่นหนา (SCC) ระหว่างการประมวลผล SCCVN ถ้า
ถึงขีดจำกัดนี้แล้ว การประมวลผล SCCVN สำหรับฟังก์ชันทั้งหมดยังไม่เสร็จสิ้นและ
การเพิ่มประสิทธิภาพขึ้นอยู่กับมันถูกปิดใช้งาน ขนาด SCC สูงสุดเริ่มต้นคือ
10000.
sccvn-max-alias-query-per-access
จำนวนการสืบค้นนามแฝง-oracle สูงสุดที่เราทำเมื่อมองหาความซ้ำซ้อน
สำหรับการบรรทุกและร้านค้า หากถึงขีดจำกัดนี้ การค้นหาจะถูกยกเลิกและโหลดหรือ
ร้านค้าไม่ถือว่าซ้ำซ้อน จำนวนการสืบค้นเป็นอัลกอริทึม
จำกัดจำนวนร้านค้าในทุกเส้นทางตั้งแต่โหลดจนถึงรายการฟังก์ชัน
จำนวนการค้นหาสูงสุดเริ่มต้นคือ 1000
ไอรา-แม็กซ์-ลูป-นัม
IRA ใช้การจัดสรรการลงทะเบียนระดับภูมิภาคโดยค่าเริ่มต้น หากฟังก์ชันมี more
วนซ้ำกว่าจำนวนที่กำหนดโดยพารามิเตอร์นี้ ไม่เกินจำนวนที่กำหนดเท่านั้น
ลูปที่เรียกใช้บ่อยที่สุดจะสร้างภูมิภาคสำหรับการจัดสรรรีจิสเตอร์ระดับภูมิภาค
ค่าเริ่มต้นของพารามิเตอร์คือ 100
ira-max-conflict-table-size.php
แม้ว่า IRA จะใช้อัลกอริธึมที่ซับซ้อนในการบีบอัดตารางข้อขัดแย้ง
ตารางยังคงต้องใช้หน่วยความจำมากเกินไปสำหรับฟังก์ชันขนาดใหญ่ ถ้า
ตารางข้อขัดแย้งสำหรับฟังก์ชันอาจมีมากกว่าขนาดในหน่วย MB ที่กำหนดโดยสิ่งนี้
พารามิเตอร์ register allocator ใช้เร็วกว่า ง่ายกว่า และต่ำกว่า
อัลกอริธึมคุณภาพที่ไม่ต้องสร้างตารางข้อขัดแย้งการลงทะเบียนหลอก
ค่าเริ่มต้นของพารามิเตอร์คือ 2000
ira-loop-reserved-regs
IRA สามารถใช้เพื่อประเมินแรงกดดันการลงทะเบียนที่แม่นยำยิ่งขึ้นในลูปสำหรับการตัดสินใจ
เพื่อย้ายค่าคงที่ของลูป (ดู -O3). จำนวนการลงทะเบียนที่สงวนไว้สำหรับ
วัตถุประสงค์อื่น ๆ ถูกกำหนดโดยพารามิเตอร์นี้ ค่าเริ่มต้นของ
พารามิเตอร์คือ 2 ซึ่งเป็นจำนวนรีจิสเตอร์ขั้นต่ำที่โดยทั่วไปต้องการ
คำแนะนำ. ค่านี้เป็นค่าที่ดีที่สุดจากการทดลองจำนวนมาก
วนซ้ำไม่แปรผันสูงสุด bbs ในวง
การเคลื่อนที่แบบวนซ้ำอาจมีราคาแพงมาก ทั้งในเวลารวบรวมและใน
จำนวนหน่วยความจำเวลาคอมไพล์ที่จำเป็น พร้อมลูปขนาดใหญ่มาก วนซ้ำกับ more
บล็อกพื้นฐานที่มากกว่าพารามิเตอร์นี้จะไม่มีการเพิ่มประสิทธิภาพการเคลื่อนที่แบบวนซ้ำ
ดำเนินการกับพวกเขา ค่าเริ่มต้นของพารามิเตอร์คือ 1000 for -O1 และ 10000
for -O2 ขึ้นไป
วนสูงสุด datarefs สำหรับ datadeps
การสร้าง data dapendencies นั้นมีราคาแพงสำหรับลูปที่มีขนาดใหญ่มาก พารามิเตอร์นี้
จำกัดจำนวนการอ้างอิงข้อมูลในลูปที่พิจารณาสำหรับ data
การวิเคราะห์การพึ่งพาอาศัยกัน ลูปขนาดใหญ่เหล่านี้ไม่ได้รับการจัดการโดยการปรับให้เหมาะสมโดยใช้
การพึ่งพาข้อมูลแบบวนซ้ำ ค่าเริ่มต้นคือ 1000
ขนาดสูงสุด vartrack
ตั้งค่าจำนวนช่องตารางแฮชสูงสุดที่จะใช้ระหว่างกระแสข้อมูลการติดตามตัวแปร
การวิเคราะห์ฟังก์ชันใด ๆ หากเกินขีดจำกัดนี้ด้วยการติดตามตัวแปรที่
เปิดใช้งานการมอบหมาย การวิเคราะห์สำหรับฟังก์ชันนั้นจะถูกลองใหม่โดยไม่มีหลังจาก
ลบ debug insns ทั้งหมดออกจากฟังก์ชัน หากเกินขีดจำกัดแม้ไม่มี
แก้ปัญหา insns การวิเคราะห์การติดตาม var ถูกปิดใช้งานอย่างสมบูรณ์สำหรับฟังก์ชัน
การตั้งค่าพารามิเตอร์เป็นศูนย์ทำให้ไม่จำกัด
max-vartrack-expr-ความลึก
ตั้งค่าจำนวนระดับการเรียกซ้ำสูงสุดเมื่อพยายามจับคู่ชื่อตัวแปรหรือ
ดีบักชั่วคราวในนิพจน์ค่า เวลารวบรวมการค้านี้มากขึ้น
ข้อมูลการดีบักที่สมบูรณ์ หากตั้งค่าไว้ต่ำเกินไป นิพจน์ค่าที่เป็น
พร้อมใช้งานและสามารถแสดงในข้อมูลการดีบักได้อาจไม่ถูกใช้
การตั้งค่าให้สูงขึ้นอาจทำให้คอมไพเลอร์สามารถค้นหาการดีบักที่ซับซ้อนมากขึ้นได้
นิพจน์ แต่เวลารวบรวมและการใช้หน่วยความจำอาจเพิ่มขึ้น ค่าเริ่มต้นคือ 12
min-nondebug-insn-uid.php
ใช้ uid เริ่มต้นที่พารามิเตอร์นี้สำหรับ nondebug insns ช่วงด้านล่าง
พารามิเตอร์ถูกสงวนไว้เฉพาะสำหรับการดีบัก insns ที่สร้างโดย
-fvar-การติดตามการมอบหมายแต่ debug insns อาจได้รับ uid (ไม่ทับซ้อนกัน) ด้านบน
ถ้าช่วงที่จองไว้หมด
ipa-sra-ptr-ปัจจัยการเจริญเติบโต
IPA-SRA แทนที่ตัวชี้เป็นการรวมด้วยพารามิเตอร์ใหม่อย่างน้อยหนึ่งรายการเท่านั้น
เมื่อขนาดสะสมน้อยกว่าหรือเท่ากับ ipa-sra-ptr-ปัจจัยการเจริญเติบโต คูณด้วย
ขนาดของพารามิเตอร์ตัวชี้เดิม
tm-max-รวมขนาด
เมื่อทำสำเนาตัวแปร thread-local ในธุรกรรม พารามิเตอร์นี้
ระบุขนาดเป็นไบต์หลังจากที่ตัวแปรถูกบันทึกด้วยการบันทึก
ทำงานตรงข้ามกับคู่ของลำดับรหัสบันทึก/กู้คืน ตัวเลือกนี้เท่านั้น
ใช้เมื่อใช้ -fgnu-tm.
แกรไฟต์-max-nb-scop-params
เพื่อหลีกเลี่ยงเอฟเฟกต์เลขชี้กำลังในการแปลงลูปกราไฟท์ จำนวน
พารามิเตอร์ในส่วนควบคุมคงที่ (SCoP) ถูกผูกไว้ ค่าเริ่มต้นคือ 10
พารามิเตอร์ ตัวแปรที่ไม่ทราบค่า ณ เวลารวบรวมและกำหนด
นอก SCoP เป็นพารามิเตอร์ของ SCoP
กราไฟท์-max-bbs-per-function
เพื่อหลีกเลี่ยงเอฟเฟกต์เลขชี้กำลังในการตรวจจับ SCoP ขนาดของฟังก์ชัน
วิเคราะห์โดยกราไฟท์มีขอบเขต ค่าเริ่มต้นคือ 100 บล็อกพื้นฐาน
ห่วง-บล็อค-ไทล์-ขนาด
การบล็อกแบบวนซ้ำหรือการแปลงการขุดแบบแถบ เปิดใช้งานด้วย -floop-บล็อก or
-floop-สตริป-เหมือง, ลอกเหมืองแต่ละลูปในรังของลูปตามจำนวนที่กำหนด
การทำซ้ำ สามารถเปลี่ยนความยาวของแถบได้โดยใช้ปุ่ม ห่วง-บล็อค-ไทล์-ขนาด
พารามิเตอร์. ค่าเริ่มต้นคือ 51 การวนซ้ำ
ipa-cp-value-list-size
IPA-CP พยายามติดตามค่าและประเภทที่เป็นไปได้ทั้งหมดที่ส่งผ่านไปยังฟังก์ชันของ
พารามิเตอร์เพื่อเผยแพร่และดำเนินการ devirtualization ipa-cp-ค่า-
รายการขนาด คือจำนวนค่าและประเภทสูงสุดที่จัดเก็บต่อหนึ่งรูปแบบ
พารามิเตอร์ของฟังก์ชัน
lto-พาร์ทิชัน
ระบุจำนวนพาร์ติชันที่ต้องการที่สร้างขึ้นในระหว่างการคอมไพล์ WHOPR NS
จำนวนพาร์ติชันควรเกินจำนวน CPU ที่ใช้ในการคอมไพล์ NS
ค่าเริ่มต้นคือ 32
lto-minpartition
ขนาดของพาร์ติชั่นขั้นต่ำสำหรับ WHOPR (ในคำแนะนำโดยประมาณ) สิ่งนี้จะช่วยป้องกัน
ค่าใช้จ่ายในการแยกโปรแกรมขนาดเล็กมากออกเป็นพาร์ติชั่นมากเกินไป
cxx-max-namespaces-for-diagnostic-help
จำนวนสูงสุดของเนมสเปซเพื่อขอคำแนะนำเมื่อค้นหาชื่อ C++
ล้มเหลวสำหรับตัวระบุ ค่าเริ่มต้นคือ 1000
Sink-ความถี่เกณฑ์
ความถี่การดำเนินการสัมพัทธ์สูงสุด (เป็นเปอร์เซ็นต์) ของบล็อกเป้าหมาย
สัมพันธ์กับบล็อกเดิมของคำสั่งเพื่อให้คำสั่งจมของa
คำแถลง. ตัวเลขที่มากขึ้นส่งผลให้เกิดการจมคำสั่งที่ก้าวร้าวมากขึ้น NS
ค่าเริ่มต้นคือ 75 มีการปรับค่าบวกเล็กน้อยสำหรับคำสั่งที่มี
ตัวถูกดำเนินการหน่วยความจำเนื่องจากสิ่งเหล่านี้ให้ผลกำไรมากขึ้น
max-stores-to-อ่างล้างจาน
จำนวนคู่ร้านค้าแบบมีเงื่อนไขสูงสุดที่สามารถจมได้ ตั้งค่าเป็น 0 ถ้า
vectorization อย่างใดอย่างหนึ่ง (-ftree- vectorize) หรือ if-conversion (-ftree-วน-ถ้า-แปลง)
ถูกปิดใช้งาน. ค่าเริ่มต้นคือ 2
อนุญาตให้โหลดข้อมูลการแข่งขัน
อนุญาตให้ผู้เพิ่มประสิทธิภาพแนะนำการแข่งขันข้อมูลใหม่ในการโหลด ตั้งค่าเป็น 1 เพื่ออนุญาต
มิฉะนั้นจะเป็น 0 ตัวเลือกนี้ถูกเปิดใช้งานโดยค่าเริ่มต้น เว้นแต่จะกำหนดโดยนัยโดย
-fmemory-รุ่น= ตัวเลือก
อนุญาตให้จัดเก็บข้อมูลการแข่งขัน
อนุญาตให้ผู้เพิ่มประสิทธิภาพแนะนำการแข่งขันข้อมูลใหม่ในร้านค้า ตั้งค่าเป็น 1 เพื่ออนุญาต
มิฉะนั้นจะเป็น 0 ตัวเลือกนี้ถูกเปิดใช้งานโดยค่าเริ่มต้น เว้นแต่จะกำหนดโดยนัยโดย
-fmemory-รุ่น= ตัวเลือก
อนุญาตให้บรรจุโหลดข้อมูลการแข่งขัน
อนุญาตให้ผู้เพิ่มประสิทธิภาพแนะนำการแข่งขันข้อมูลใหม่ในการโหลดข้อมูลที่อัดแน่น ตั้งค่าเป็น 1 ถึง
อนุญาต มิฉะนั้นจะเป็น 0 ตัวเลือกนี้จะเปิดใช้งานโดยค่าเริ่มต้น เว้นแต่จะตั้งค่าโดยนัยโดย
-fmemory-รุ่น= ตัวเลือก
อนุญาตให้บรรจุร้านค้าข้อมูลการแข่งขัน
อนุญาตให้ผู้เพิ่มประสิทธิภาพแนะนำการแข่งขันข้อมูลใหม่ในที่จัดเก็บข้อมูลที่อัดแน่น ตั้งค่าเป็น 1 ถึง
อนุญาต มิฉะนั้นจะเป็น 0 ตัวเลือกนี้จะเปิดใช้งานโดยค่าเริ่มต้น เว้นแต่จะตั้งค่าโดยนัยโดย
-fmemory-รุ่น= ตัวเลือก
กรณีค่าเกณฑ์
จำนวนค่าต่างๆ ที่น้อยที่สุดซึ่งควรใช้ jump-table
แทนที่จะเป็นต้นไม้ที่มีกิ่งก้านตามเงื่อนไข หากค่าเป็น 0 ให้ใช้ค่าเริ่มต้นสำหรับ
เครื่องจักร. ค่าเริ่มต้นคือ 0
ต้นไม้-reassoc-ความกว้าง
ตั้งค่าจำนวนคำสั่งสูงสุดที่ดำเนินการแบบคู่ขนานในแผนผังที่เชื่อมโยงใหม่
พารามิเตอร์นี้จะแทนที่ฮิวริสติกที่ขึ้นกับเป้าหมายที่ใช้โดยดีฟอลต์หากมี non
ค่าศูนย์
sched-pressure-อัลกอริทึม
เลือกระหว่างสองการใช้งานที่มีอยู่ของ -fsched-ความดัน. อัลกอริทึม 1
เป็นการดำเนินการดั้งเดิมและมีแนวโน้มที่จะป้องกันคำแนะนำจาก
กำลังจัดลำดับใหม่ อัลกอริธึม 2 ถูกออกแบบให้ประนีประนอมระหว่าง
แนวทางที่ค่อนข้างอนุรักษ์นิยมโดยอัลกอริธึม 1 และค่อนข้างก้าวร้าว
วิธีการที่ใช้โดยตัวกำหนดตารางเวลาเริ่มต้น มันอาศัยการมี
ไฟล์รีจิสเตอร์ปกติและคลาสแรงดันรีจิสเตอร์ที่แม่นยำ ดู ไฮฟา-sched.c
ในแหล่งข้อมูล GCC สำหรับรายละเอียดเพิ่มเติม
ตัวเลือกเริ่มต้นขึ้นอยู่กับเป้าหมาย
max-slsr-แคนด์สแกน
กำหนดจำนวนผู้สมัครสูงสุดที่มีอยู่ซึ่งจะได้รับการพิจารณาเมื่อทำการค้นหา
พื้นฐานสำหรับผู้สมัครลดกำลังเส้นตรงใหม่
Options การควบคุม ตัวประมวลผลล่วงหน้า
ตัวเลือกเหล่านี้ควบคุมตัวประมวลผลล่วงหน้า C ซึ่งทำงานบนไฟล์ต้นฉบับ C แต่ละไฟล์ก่อนไฟล์จริง
การรวบรวม.
ถ้าคุณใช้ -E ตัวเลือก ไม่มีอะไรทำยกเว้นการประมวลผลล่วงหน้า บางส่วนของตัวเลือกเหล่านี้
สมเหตุสมผลเท่านั้นร่วมกับ -E เพราะจะทำให้เอาท์พุตพรีโปรเซสเซอร์เป็น
ไม่เหมาะสำหรับการรวบรวมจริง
-Wp,ตัวเลือก
คุณสามารถใช้ได้ -Wp,ตัวเลือก เพื่อเลี่ยงผ่านไดรเวอร์คอมไพเลอร์และผ่าน ตัวเลือก โดยตรงผ่าน
ไปยังตัวประมวลผลล่วงหน้า ถ้า ตัวเลือก มีเครื่องหมายจุลภาคซึ่งแบ่งออกเป็นหลายตัวเลือกที่
เครื่องหมายจุลภาค อย่างไรก็ตาม ตัวเลือกมากมายถูกแก้ไข แปล หรือตีความโดย
คอมไพเลอร์ไดรเวอร์ก่อนที่จะถูกส่งไปยังพรีโปรเซสเซอร์และ -วพ เลี่ยงผ่าน
เฟสนี้. อินเทอร์เฟซโดยตรงของตัวประมวลผลล่วงหน้าไม่มีเอกสารและอยู่ภายใต้
เปลี่ยน ดังนั้นเมื่อใดก็ตามที่เป็นไปได้คุณควรหลีกเลี่ยงการใช้ -วพ และให้คนขับจัดการ
ตัวเลือกแทน
-Xpreprocessor ตัวเลือก
ส่ง ตัวเลือก เป็นตัวเลือกสำหรับตัวประมวลผลล่วงหน้า คุณสามารถใช้สิ่งนี้เพื่อจัดหาระบบ-
ตัวเลือกตัวประมวลผลล่วงหน้าเฉพาะที่ GCC ไม่รู้จัก
หากคุณต้องการส่งตัวเลือกที่มีการโต้แย้ง คุณต้องใช้ -Xpreprocessor
สองครั้ง หนึ่งครั้งสำหรับตัวเลือก และอีกครั้งสำหรับการโต้แย้ง
-ไม่มีบูรณาการ-cpp
ดำเนินการประมวลผลล่วงหน้าเป็นการส่งผ่านที่แยกต่างหากก่อนการคอมไพล์ โดยค่าเริ่มต้น GCC จะดำเนินการ
การประมวลผลล่วงหน้าเป็นส่วนรวมของการป้อนข้อมูลโทเค็นและการแยกวิเคราะห์ ถ้าตัวเลือกนี้
มีให้ ส่วนหน้าของภาษาที่เหมาะสม (cc1, ซีซี1พลัส,หรือ cc1obj สำหรับ C, C++,
และ Objective-C ตามลำดับ) ถูกเรียกใช้แทนสองครั้ง หนึ่งครั้งสำหรับการประมวลผลล่วงหน้าเท่านั้น
และหนึ่งครั้งสำหรับการรวบรวมอินพุตที่ประมวลผลล่วงหน้าจริง ตัวเลือกนี้อาจมีประโยชน์
ร่วมกับ -B or -เครื่องห่อ ตัวเลือกเพื่อระบุตัวประมวลผลล่วงหน้าสำรองหรือ
ดำเนินการประมวลผลเพิ่มเติมของซอร์สโปรแกรมระหว่างการประมวลผลล่วงหน้าปกติและ
การรวบรวม.
-D ชื่อ
กำหนดล่วงหน้า ชื่อ เป็นมาโครที่มีคำจำกัดความ 1
-D ชื่อ=คำนิยาม
เนื้อหาของ คำนิยาม ถูก tokenized และประมวลผลราวกับว่ามันปรากฏขึ้นระหว่าง
การแปลขั้นตอนที่สามในa #กำหนด คำสั่ง โดยเฉพาะคำนิยามจะเป็น
ตัดทอนด้วยอักขระขึ้นบรรทัดใหม่แบบฝัง
หากคุณกำลังเรียกใช้ตัวประมวลผลล่วงหน้าจากเชลล์หรือโปรแกรมที่คล้ายเชลล์ คุณอาจต้อง
เพื่อใช้ไวยากรณ์การอ้างอิงของเชลล์เพื่อปกป้องอักขระเช่นช่องว่างที่มี
ความหมายในไวยากรณ์ของเชลล์
หากคุณต้องการกำหนดมาโครที่เหมือนฟังก์ชันบนบรรทัดคำสั่ง ให้เขียนอาร์กิวเมนต์ของมัน
รายการที่มีวงเล็บล้อมรอบก่อนเครื่องหมายเท่ากับ (ถ้ามี) วงเล็บคือ
มีความหมายกับเชลล์ส่วนใหญ่ ดังนั้น คุณจะต้องอ้างอิงตัวเลือก กับ sh และ csh,
-NS'ชื่อ(อาร์กิว...)=คำนิยาม' โรงงาน
-D และ -U ตัวเลือกจะได้รับการประมวลผลตามลำดับที่ได้รับบนบรรทัดคำสั่ง ทั้งหมด
-ไอมาครอส ไฟล์ และ - รวม ไฟล์ ตัวเลือกจะถูกประมวลผลหลังจากทั้งหมด -D และ -U ตัวเลือก
-U ชื่อ
ยกเลิกคำจำกัดความก่อนหน้าของ ชื่อสร้างขึ้นในหรือจัดให้มี -D ตัวเลือก
-Undef
อย่ากำหนดมาโครเฉพาะระบบหรือเฉพาะ GCC ไว้ล่วงหน้า มาตรฐานที่กำหนดไว้ล่วงหน้า
มาโครยังคงกำหนดไว้
-I dir
เพิ่มไดเร็กทอรี dir ไปที่รายการไดเร็กทอรีที่จะค้นหาไฟล์ส่วนหัว
ไดเร็กทอรีที่ชื่อ -I จะถูกค้นหาก่อนที่ระบบมาตรฐานจะรวมไดเร็กทอรี
ถ้าไดเร็กทอรี dir เป็นระบบมาตรฐานรวมถึงไดเร็กทอรีตัวเลือกจะถูกละเว้นไปยัง
ตรวจสอบให้แน่ใจว่าลำดับการค้นหาเริ่มต้นสำหรับไดเร็กทอรีระบบและการปฏิบัติพิเศษ
ของส่วนหัวของระบบไม่แพ้ ถ้า dir ขึ้นต้นด้วย "=" จากนั้น "=" จะเป็น
แทนที่ด้วยคำนำหน้า sysroot; ดู --sysroot และ -isysroot.
-o ไฟล์
เขียนเอาต์พุตไปที่ ไฟล์. นี้เหมือนกับการระบุ ไฟล์ เป็นทางเลือกที่สอง
อาร์กิวเมนต์ถึง ซีพี. gcc มีการตีความที่แตกต่างกันของอาร์กิวเมนต์ที่ไม่ใช่ตัวเลือกที่สอง
ดังนั้นคุณต้องใช้ -o เพื่อระบุไฟล์ที่ส่งออก
-ผนัง
เปิดคำเตือนทางเลือกทั้งหมดที่ต้องการสำหรับรหัสปกติ ปัจจุบันนี้
is -ความคิดเห็น, -Wtrigraphs, -Wmulticar และคำเตือนเรื่องการเลื่อนจำนวนเต็มทำให้เกิด a
เปลี่ยนเครื่องหมายในนิพจน์ "#if" โปรดทราบว่าคำเตือนของตัวประมวลผลล่วงหน้าจำนวนมาก
จะเปิดไว้โดยค่าเริ่มต้นและไม่มีตัวเลือกให้ควบคุม
-ความคิดเห็น
-ความคิดเห็น
เตือนเมื่อใดก็ตามที่ความคิดเห็นเริ่มต้นลำดับ /* ปรากฏใน a /* แสดงความคิดเห็นหรือเมื่อใดก็ตามที่
แบ็กสแลช-ขึ้นบรรทัดใหม่ปรากฏใน a // ความคิดเห็น (ทั้งสองรูปแบบมีผลเหมือนกัน)
-Wtrigraphs
ไตรกราฟส่วนใหญ่ในความคิดเห็นไม่สามารถส่งผลต่อความหมายของโปรแกรมได้ อย่างไรก็ตาม a
ไตรกราฟที่จะขึ้นบรรทัดใหม่หนี (- ที่ท้ายบรรทัด) สามารถ, โดย
เปลี่ยนตำแหน่งที่ความคิดเห็นเริ่มต้นหรือสิ้นสุด ดังนั้น เฉพาะตรีโกณมิติที่จะเกิด
การขึ้นบรรทัดใหม่ทำให้เกิดคำเตือนภายในความคิดเห็น
ตัวเลือกนี้มีความหมายโดย -ผนัง. ถ้า -ผนัง ไม่ได้รับ ตัวเลือกนี้ยังคงเปิดใช้งานอยู่
เว้นแต่จะเปิดใช้งาน trigraphs หากต้องการรับการแปลงไตรกราฟโดยไม่มีการเตือน แต่รับ
อื่น ๆ -ผนัง คำเตือน ใช้ -ไตรกราฟ -ผนัง -Wno-ไตรกราฟ.
-แบบดั้งเดิม
เตือนเกี่ยวกับโครงสร้างบางอย่างที่ทำงานแตกต่างกันในแบบดั้งเดิมและ ISO C นอกจากนี้
เตือนเกี่ยวกับโครงสร้าง ISO C ที่ไม่มี C เทียบเท่าแบบดั้งเดิมและมีปัญหา
โครงสร้างที่ควรหลีกเลี่ยง
-วันเดฟ
เตือนเมื่อใดก็ตามที่พบตัวระบุที่ไม่ใช่แมโครในan #ถ้า สั่ง
ด้านนอกของ กำหนด. ตัวระบุดังกล่าวจะถูกแทนที่ด้วยศูนย์
-Wunused-มาโคร
เตือนเกี่ยวกับแมโครที่กำหนดไว้ในไฟล์หลักที่ไม่ได้ใช้ มาโครคือ มือสอง ถ้ามันเป็น
ขยายหรือทดสอบการดำรงอยู่อย่างน้อยหนึ่งครั้ง ตัวประมวลผลล่วงหน้าจะเตือนด้วยถ้า
ไม่ได้ใช้มาโครในขณะที่มีการกำหนดใหม่หรือไม่ได้กำหนดไว้
มาโครในตัว มาโครที่กำหนดไว้ในบรรทัดคำสั่ง และมาโครที่กำหนดไว้ใน include
ไฟล์ไม่ได้รับการเตือนเกี่ยวกับ
หมายเหตุ หากใช้มาโครจริง แต่ใช้ในบล็อกตามเงื่อนไขที่ข้ามเท่านั้น
CPP จะแจ้งว่าไม่ได้ใช้ เพื่อหลีกเลี่ยงคำเตือนในกรณีนี้ คุณอาจปรับปรุง
ขอบเขตของคำจำกัดความของมาโคร ตัวอย่างเช่น ย้ายไปยังส่วนที่ข้ามไปครั้งแรก
บล็อก. อีกทางหนึ่ง คุณสามารถใช้หุ่นจำลองกับสิ่งต่อไปนี้:
#ถ้ากำหนด the_macro_causing_the_warning
#เอนดิฟ
-Wendif-ป้ายกำกับ
เตือนเมื่อใดก็ตามที่ an #อื่น หรือ #เอนดิฟ ตามด้วยข้อความ ซึ่งมักจะเกิดขึ้นใน
รหัสของแบบฟอร์ม
#ถ้า FOO
...
#อื่น FOO
...
#เอนดิฟ FOO
"FOO" ตัวที่สองและสามควรอยู่ในความคิดเห็น แต่มักไม่อยู่ในโปรแกรมรุ่นเก่า
คำเตือนนี้เปิดอยู่โดยค่าเริ่มต้น
- ผิดพลาด
ทำให้คำเตือนทั้งหมดเป็นข้อผิดพลาดยาก ซอร์สโค้ดที่ทริกเกอร์คำเตือนจะเป็น
ปฏิเสธ
-Wsystem-ส่วนหัว
ออกคำเตือนสำหรับรหัสในส่วนหัวของระบบ สิ่งเหล่านี้มักไม่ช่วยในการค้นหา
ข้อบกพร่องในรหัสของคุณจึงถูกระงับ หากคุณเป็นผู้รับผิดชอบระบบ
ห้องสมุดคุณอาจต้องการเห็นพวกเขา
-w ระงับคำเตือนทั้งหมด รวมถึงคำเตือนที่ GNU CPP ออกโดยค่าเริ่มต้น
-อวดดี
ออกการวินิจฉัยบังคับทั้งหมดที่ระบุไว้ในมาตรฐาน C เหลือบ้างแล้ว
ออกโดยค่าเริ่มต้น เนื่องจากมักเรียกใช้โค้ดที่ไม่เป็นอันตราย
-pedantic-ข้อผิดพลาด
ออกการวินิจฉัยที่จำเป็นทั้งหมด และทำให้การวินิจฉัยที่จำเป็นทั้งหมดกลายเป็นข้อผิดพลาด
ซึ่งรวมถึงการวินิจฉัยบังคับที่ GCC ออกโดยไม่มี -อวดดี แต่ถือว่า
คำเตือน
-M แทนที่จะส่งออกผลลัพธ์ของการประมวลผลล่วงหน้า ให้ส่งออกกฎที่เหมาะสมสำหรับ ทำ
อธิบายการขึ้นต่อกันของไฟล์ต้นฉบับหลัก ตัวประมวลผลล่วงหน้าส่งออกหนึ่ง
ทำ กฎที่มีชื่อไฟล์อ็อบเจ็กต์สำหรับไฟล์ต้นทาง ทวิภาค และชื่อ
ของไฟล์ที่รวมไว้ทั้งหมด รวมทั้งไฟล์ที่มาจาก - รวม or -ไอมาครอส คำสั่ง
ตัวเลือกบรรทัด
เว้นแต่ระบุไว้อย่างชัดเจน (ด้วย -มท or -เอ็มคิว) ชื่อไฟล์อ็อบเจ็กต์ประกอบด้วย
ชื่อของไฟล์ต้นฉบับที่มีส่วนต่อท้ายใดๆ แทนที่ด้วยส่วนต่อท้ายของไฟล์อ็อบเจ็กต์และด้วย any
นำส่วนไดเร็กทอรีชั้นนำออก หากมีไฟล์รวมอยู่หลายไฟล์ กฎก็คือ
แบ่งออกเป็นหลายบรรทัดโดยใช้ \-ขึ้นบรรทัดใหม่ กฎไม่มีคำสั่ง
ตัวเลือกนี้จะไม่ระงับเอาต์พุตการดีบักของตัวประมวลผลล่วงหน้า เช่น -ดีเอ็ม. หลีกเลี่ยง
การผสมเอาต์พุตการดีบักดังกล่าวกับกฎการพึ่งพา คุณควรระบุ . อย่างชัดเจน
ไฟล์เอาต์พุตการพึ่งพาด้วย -มฟลหรือใช้ตัวแปรสภาพแวดล้อมเช่น
การพึ่งพาอาศัยกัน_OUTPUT. เอาต์พุตการดีบักจะยังคงถูกส่งไปยังสตรีมเอาต์พุตปกติเป็น
ปกติ
ที่ผ่านไป -M แก่คนขับ หมายความถึง -Eและระงับคำเตือนโดยปริยาย -w.
-มม Like -M แต่อย่าพูดถึงไฟล์ส่วนหัวที่พบในไดเร็กทอรีส่วนหัวของระบบ
หรือไฟล์ส่วนหัวที่รวมโดยตรงหรือโดยอ้อมจากส่วนหัวดังกล่าว
นี่หมายความว่าการเลือกวงเล็บมุมหรือเครื่องหมายคำพูดคู่ใน #include
คำสั่งไม่ได้กำหนดว่าส่วนหัวนั้นจะปรากฏใน -มม
เอาต์พุตการพึ่งพา นี่เป็นการเปลี่ยนแปลงเล็กน้อยในความหมายจาก GCC เวอร์ชัน 3.0 และ
ก่อน
-มฟล ไฟล์
เมื่อใช้กับ -M or -มมระบุไฟล์ที่จะเขียนการพึ่งพา ถ้าไม่ -มฟล
สวิตช์จะได้รับตัวประมวลผลล่วงหน้าส่งกฎไปยังที่เดียวกับที่มันจะส่ง
เอาต์พุตที่ประมวลผลล่วงหน้า
เมื่อใช้ร่วมกับตัวเลือกไดรเวอร์ -นพ or -MMD, -มฟล แทนที่การพึ่งพาเริ่มต้น
ไฟล์ที่ส่งออก
-มก ร่วมกับตัวเลือกเช่น -M ขอสร้างการพึ่งพา -มก ถือว่า
ไฟล์ส่วนหัวที่หายไปจะถูกสร้างไฟล์และเพิ่มลงในรายการการพึ่งพาโดยไม่ต้อง
ทำให้เกิดข้อผิดพลาด ชื่อไฟล์การพึ่งพานั้นนำมาโดยตรงจาก "#include"
คำสั่งโดยไม่ต้องเติมเส้นทางใด ๆ -มก ยังระงับเอาต์พุตที่ประมวลผลล่วงหน้าเป็น a
ไฟล์ส่วนหัวที่ขาดหายไปทำให้สิ่งนี้ไม่มีประโยชน์
คุณลักษณะนี้ใช้ในการอัพเดต makefiles โดยอัตโนมัติ
-ส.ส ตัวเลือกนี้แนะนำให้ CPP เพิ่มเป้าหมายปลอมสำหรับการพึ่งพาแต่ละรายการนอกเหนือจาก
ไฟล์หลักทำให้แต่ละไฟล์ไม่ต้องพึ่งพาอะไร กฎจำลองเหล่านี้หลีกเลี่ยงข้อผิดพลาด
ทำ ให้ถ้าคุณลบไฟล์ส่วนหัวโดยไม่ต้องอัปเดต Makefile เพื่อให้ตรงกับ.
นี่คือผลลัพธ์ทั่วไป:
test.o: test.c ทดสอบ h
ทดสอบ h:
-มท เป้า
เปลี่ยนเป้าหมายของกฎที่ปล่อยออกมาจากการสร้างการพึ่งพา โดยค่าเริ่มต้น CPP จะใช้เวลา
ชื่อของไฟล์อินพุตหลัก ลบส่วนประกอบไดเร็กทอรีและส่วนต่อท้ายไฟล์ใดๆ
เช่น .cและผนวกส่วนต่อท้ายอ็อบเจ็กต์ปกติของแพลตฟอร์ม ผลที่ได้คือเป้าหมาย
An -มท option จะกำหนดเป้าหมายให้เป็นสตริงที่คุณระบุ ถ้าคุณต้องการ
หลายเป้าหมาย คุณสามารถระบุให้เป็นอาร์กิวเมนต์เดียวได้ -มทหรือใช้หลายตัว
-มท ตัวเลือก
ตัวอย่างเช่น -มท '$(objpfx)foo.o' อาจให้
$(objpfx)foo.o: foo.c
-เอ็มคิว เป้า
เหมือนกับ -มทแต่จะอ้างอิงถึงอักขระใดๆ ที่มีลักษณะพิเศษเฉพาะสำหรับ Make
-เอ็มคิว '$(objpfx)foo.o' จะช่วยให้
$$(objpfx)foo.o: foo.c
เป้าหมายเริ่มต้นจะได้รับการเสนอราคาโดยอัตโนมัติ ราวกับว่าได้รับด้วย -เอ็มคิว.
-นพ -นพ เทียบเท่ากับ -M -มฟล ไฟล์ยกเว้นว่า -E ไม่ได้หมายความถึง คนขับ
แน่นอน ไฟล์ ขึ้นอยู่กับว่า an -o มีตัวเลือกให้ หากใช่ ไดรเวอร์จะใช้
อาร์กิวเมนต์ แต่มีคำต่อท้ายของ .dมิฉะนั้นจะใช้ชื่อของไฟล์อินพุต
ลบส่วนประกอบไดเร็กทอรีและคำต่อท้าย และใช้a .d วิภัตติ
If -นพ ใช้ร่วมกับ -Eใด ๆ -o สวิตช์เข้าใจเพื่อระบุ
ไฟล์เอาต์พุตการพึ่งพา แต่ถ้าใช้โดยไม่มี -Eแต่ละคน -o เป็นที่เข้าใจว่าจะระบุ a
ไฟล์วัตถุเป้าหมาย
ตั้งแต่ -E ไม่ได้หมายความถึง -นพ สามารถใช้เพื่อสร้างไฟล์เอาต์พุตการพึ่งพาเป็นa
ผลข้างเคียงของกระบวนการคอมไพล์
-MMD
Like -นพ ยกเว้นเฉพาะไฟล์ส่วนหัวของผู้ใช้เท่านั้น ไม่ใช่ไฟล์ส่วนหัวของระบบ
-fpch-deps
เมื่อใช้ส่วนหัวที่คอมไพล์ล่วงหน้า แฟล็กนี้จะทำให้แฟล็กการพึ่งพา-เอาท์พุตเป็น
ยังแสดงรายการไฟล์จากการขึ้นต่อกันของส่วนหัวที่คอมไพล์แล้ว ถ้าไม่ระบุเท่านั้น
ส่วนหัวที่คอมไพล์แล้วจะอยู่ในรายการและไม่ใช่ไฟล์ที่ใช้สร้าง
เนื่องจากไฟล์เหล่านั้นไม่ได้รับการพิจารณาเมื่อใช้ส่วนหัวที่คอมไพล์แล้ว
-fpch-พรีโพรเซส
ตัวเลือกนี้อนุญาตให้ใช้ส่วนหัวที่คอมไพล์ล่วงหน้าร่วมกับ -E. มันแทรกพิเศษ
"#pragma", "#pragma GCC pc_preprocess"ชื่อไฟล์"" ในผลลัพธ์เพื่อทำเครื่องหมายสถานที่
ที่ซึ่งพบส่วนหัวที่คอมไพล์แล้วและ ชื่อไฟล์. เมื่อ -fประมวลผลล่วงหน้า ที่อยู่ใน
ใช้ GCC รู้จัก "#pragma" และโหลด PCH
ตัวเลือกนี้ถูกปิดโดยค่าเริ่มต้น เนื่องจากผลลัพธ์ที่ประมวลผลล่วงหน้าที่ได้จะเป็นเท่านั้น
เหมาะที่จะเป็นอินพุตของ GCC มันถูกเปิดโดย -save-อุณหภูมิ.
คุณไม่ควรเขียน "#pragma" นี้ในโค้ดของคุณเอง แต่การแก้ไข . นั้นปลอดภัย
ชื่อไฟล์หากไฟล์ PCH อยู่ในตำแหน่งอื่น ชื่อไฟล์อาจเป็น
สัมบูรณ์หรืออาจสัมพันธ์กับไดเรกทอรีปัจจุบันของ GCC
-x c
-x C ++
-x วัตถุประสงค์-c
-x แอสเซมเบลอร์-กับ-cpp
ระบุภาษาต้นทาง: C, C++, Objective-C หรือแอสเซมบลี นี้ไม่มีอะไรจะทำ
ด้วยความสอดคล้องมาตรฐานหรือการขยาย; มันแค่เลือกว่าไวยากรณ์พื้นฐานใดที่จะ
คาดหวัง. หากคุณไม่ได้ให้ตัวเลือกเหล่านี้เลย cpp จะอนุมานภาษาจาก
นามสกุลของไฟล์ต้นฉบับ: .c, ซีซี., .m,หรือ .S. ส่วนขยายทั่วไปอื่นๆ สำหรับ
C ++ และแอสเซมบลีก็รู้จักเช่นกัน ถ้า cpp ไม่รู้จักนามสกุล มัน
จะถือว่าไฟล์เป็น C; นี่เป็นโหมดทั่วไปที่สุด
หมายเหตุ cpp เวอร์ชันก่อนหน้ายอมรับ a -lang ตัวเลือกที่เลือกทั้ง
ภาษาและระดับความสอดคล้องของมาตรฐาน ตัวเลือกนี้ถูกลบเพราะ
มันขัดแย้งกับ -l ตัวเลือก
-std=มาตรฐาน
-แอนซี
ระบุมาตรฐานที่รหัสควรสอดคล้อง ปัจจุบัน CPP รู้เรื่อง C
และมาตรฐาน C++; คนอื่น ๆ อาจถูกเพิ่มในอนาคต
มาตรฐาน อาจเป็นหนึ่งใน:
"ซี90"
"ซี89"
"iso9899:1990"
มาตรฐาน ISO C ตั้งแต่ปี 1990 c90 เป็นชวเลขจารีตประเพณีสำหรับเวอร์ชันนี้ของ
มาตรฐาน.
โครงการ -แอนซี ตัวเลือกเทียบเท่ากับ -std=c90.
"iso9899:199409"
มาตรฐาน 1990 C ซึ่งแก้ไขเพิ่มเติมในปี 1994
"iso9899:1999"
"ซี99"
"iso9899:199x"
"ซี9เอ็กซ์"
มาตรฐาน ISO C ฉบับปรับปรุง เผยแพร่เมื่อเดือนธันวาคม พ.ศ. 1999 ก่อนเผยแพร่นี้
เป็นที่รู้จักในนาม C9X
"iso9899:2011"
"ซี11"
"ซี1เอ็กซ์"
มาตรฐาน ISO C ฉบับปรับปรุง เผยแพร่เมื่อเดือนธันวาคม พ.ศ. 2011 ก่อนเผยแพร่นี้
เป็นที่รู้จักในนาม C1X
"กนู90"
"กนู89"
มาตรฐาน 1990 C บวกกับส่วนขยาย GNU นี่คือค่าเริ่มต้น
"กนู99"
"กนู9x"
มาตรฐาน 1999 C บวกกับส่วนขยาย GNU
"กนู11"
"กนู1x"
มาตรฐาน 2011 C บวกกับส่วนขยาย GNU
"c++98"
มาตรฐาน ISO C++ ปี 1998 พร้อมการแก้ไขเพิ่มเติม
"กนู++98"
เหมือนกับ -std = C ++ 98 บวกกับส่วนขยาย GNU นี่เป็นค่าเริ่มต้นสำหรับโค้ด C++
-ผม- แยกเส้นทางรวม ไดเร็กทอรีใด ๆ ที่ระบุด้วย -I ตัวเลือกมาก่อน -ผม- เป็น
ค้นหาเฉพาะส่วนหัวที่ขอด้วย "#include "ไฟล์""; พวกเขาจะไม่ถูกค้นหา
"#รวมไฟล์>". หากระบุไดเร็กทอรีเพิ่มเติมด้วย -I ตัวเลือกหลัง
-ผม-, ไดเรกทอรีเหล่านั้นจะถูกค้นหาทั้งหมด #include แนวทาง
นอกจากนี้ -ผม- ยับยั้งการใช้ไดเร็กทอรีของไดเร็กทอรีไฟล์ปัจจุบันเป็น
ไดเร็กทอรีการค้นหาแรกสำหรับ "#include "ไฟล์"". ตัวเลือกนี้เลิกใช้แล้ว
-nostdinc
อย่าค้นหาไดเรกทอรีระบบมาตรฐานสำหรับไฟล์ส่วนหัว เฉพาะไดเรกทอรี
คุณได้ระบุด้วย -I ตัวเลือก (และไดเร็กทอรีของไฟล์ปัจจุบัน if
เหมาะสม) ถูกค้น
-nostdinc++
อย่าค้นหาไฟล์ส่วนหัวในไดเร็กทอรีมาตรฐานเฉพาะ C ++ แต่ยังทำอยู่
ค้นหาไดเร็กทอรีมาตรฐานอื่นๆ (ตัวเลือกนี้ใช้ในการสร้าง C++
ห้องสมุด.)
- รวม ไฟล์
กระบวนการ ไฟล์ ราวกับว่า "#include "file" ปรากฏเป็นบรรทัดแรกของแหล่งที่มาหลัก
ไฟล์. อย่างไรก็ตาม ไดเร็กทอรีแรกที่ค้นหา ไฟล์ คือการทำงานของพรีโปรเซสเซอร์
ไดเรกทอรี แทน of ไดเร็กทอรีที่มีไฟล์ต้นฉบับหลัก หากไม่พบ
มีการค้นหาในส่วนที่เหลือของสายการค้นหา "#include "..."" เช่น
ปกติ
ถ้าหลาย - รวม มีตัวเลือกให้ ไฟล์จะรวมอยู่ในลำดับที่พวกเขา
ปรากฏในบรรทัดคำสั่ง
-ไอมาครอส ไฟล์
ชอบๆ - รวมยกเว้นว่าผลลัพธ์ใด ๆ ที่สร้างโดยการสแกน ไฟล์ ถูกโยนทิ้ง
ห่างออกไป. มาโครที่กำหนดยังคงกำหนดไว้ ซึ่งจะทำให้คุณได้รับมาโครทั้งหมด
จากส่วนหัวโดยไม่ประมวลผลการประกาศด้วย
ไฟล์ทั้งหมดที่ระบุโดย -ไอมาครอส จะถูกประมวลผลก่อนไฟล์ทั้งหมดที่ระบุโดย - รวม.
-idirอาฟเตอร์ dir
ค้นหา dir สำหรับไฟล์ส่วนหัว แต่ทำอย่างนั้น หลังจาก ไดเร็กทอรีทั้งหมดที่ระบุด้วย -I และ
ไดเร็กทอรีระบบมาตรฐานหมดแล้ว dir ถือเป็นระบบ ได้แก่
ไดเร็กทอรี ถ้า dir เริ่มต้นด้วย "=" จากนั้น "=" จะถูกแทนที่ด้วย sysroot
คำนำหน้า; ดู --sysroot และ -isysroot.
-iprefix อุปสรรค
ระบุ อุปสรรค เป็นคำนำหน้าต่อไป -iกับคำนำหน้า ตัวเลือก. หากคำนำหน้า
แทนไดเร็กทอรี คุณควรรวมสุดท้าย /.
-iกับคำนำหน้า dir
-iกับคำนำหน้าก่อน dir
ผนวก dir ไปยังคำนำหน้าที่ระบุก่อนหน้านี้ด้วย -iprefixและเพิ่มผลลัพธ์
ไดเรกทอรีไปยังเส้นทางการค้นหารวม -iกับคำนำหน้าก่อน วางไว้ที่เดียวกัน -I
จะ; -iกับคำนำหน้า วางไว้ที่ไหน -idirอาฟเตอร์ หากว่า
-isysroot dir
ตัวเลือกนี้เหมือนกับ --sysroot ตัวเลือก แต่ใช้กับไฟล์ส่วนหัวเท่านั้น (ยกเว้นสำหรับ
เป้าหมายของดาร์วิน ซึ่งใช้กับทั้งไฟล์ส่วนหัวและไลบรารี) ดู
--sysroot ตัวเลือกสำหรับข้อมูลเพิ่มเติม
-imultilib dir
ใช้ dir เป็นไดเร็กทอรีย่อยของไดเร็กทอรีที่มีส่วนหัว C++ เฉพาะเป้าหมาย
-ไอซิสเต็ม dir
ค้นหา dir สำหรับไฟล์ส่วนหัวหลังจากไดเร็กทอรีทั้งหมดที่ระบุโดย -I แต่ก่อนที่
ไดเร็กทอรีระบบมาตรฐาน ทำเครื่องหมายว่าเป็นไดเร็กทอรีระบบ เพื่อให้ไดเร็กทอรีเหมือนกัน
การดูแลเป็นพิเศษตามที่ใช้กับไดเร็กทอรีระบบมาตรฐาน ถ้า dir เริ่มต้น
ด้วย "=" จากนั้น "=" จะถูกแทนที่ด้วยคำนำหน้า sysroot; ดู --sysroot และ
-isysroot.
-iquote dir
ค้นหา dir สำหรับไฟล์ส่วนหัวที่ขอด้วย "#include "ไฟล์""; พวกเขาจะไม่
ค้นหา "#includeไฟล์>"ก่อนไดเร็กทอรีทั้งหมดที่ระบุโดย -I และก่อนที่จะ
ไดเร็กทอรีระบบมาตรฐาน ถ้า dir ขึ้นต้นด้วย "=" จากนั้น "=" จะถูกแทนที่ด้วย
คำนำหน้า sysroot; ดู --sysroot และ -isysroot.
-fdirectives-เท่านั้น
เมื่อประมวลผลล่วงหน้า ให้จัดการคำสั่ง แต่อย่าขยายมาโคร
พฤติกรรมของตัวเลือกขึ้นอยู่กับ -E และ -fประมวลผลล่วงหน้า ตัวเลือก
ด้วยระบบเส้นทาง -Eการประมวลผลล่วงหน้าจำกัดเฉพาะการจัดการคำสั่งเช่น "#define"
"#ifdef" และ "#ข้อผิดพลาด" การทำงานของตัวประมวลผลล่วงหน้าอื่นๆ เช่น การขยายมาโครและ
ไม่ได้ทำการแปลงไตรกราฟ นอกจากนี้ -วว ตัวเลือกโดยปริยาย
เปิดการใช้งาน
ด้วยระบบเส้นทาง -fประมวลผลล่วงหน้า, คำจำกัดความของบรรทัดคำสั่งและมาโครในตัวส่วนใหญ่คือ
พิการ. มาโครเช่น "__LINE__" ซึ่งขึ้นอยู่กับบริบทจะได้รับการจัดการ
โดยทั่วไป. ซึ่งช่วยให้สามารถรวบรวมไฟล์ที่ประมวลผลไว้ล่วงหน้าด้วย "-E
-fdirectives เท่านั้น".
พร้อมทั้ง -E และ -fประมวลผลล่วงหน้ากฎสำหรับ -fประมวลผลล่วงหน้า มีความสำคัญ นี้
เปิดใช้งานการประมวลผลล่วงหน้าของไฟล์ที่ประมวลผลก่อนหน้านี้ด้วย "-E
-fdirectives เท่านั้น".
-fdollars-ในตัวระบุ
ยอมรับ $ ในตัวระบุ
-fexttended-ตัวระบุ
ยอมรับชื่ออักขระสากลในตัวระบุ ตัวเลือกนี้เป็นแบบทดลอง ใน
GCC เวอร์ชันอนาคต จะเปิดใช้งานโดยค่าเริ่มต้นสำหรับ C99 และ C++
-fno-canonical-system-ส่วนหัว
เมื่อประมวลผลล่วงหน้า อย่าย่อพาธส่วนหัวของระบบด้วยการกำหนดรูปแบบบัญญัติ
-fประมวลผลล่วงหน้า
ระบุตัวประมวลผลล่วงหน้าว่าไฟล์อินพุตได้รับการประมวลผลล่วงหน้าแล้ว นี้
ยับยั้งสิ่งต่างๆ เช่น การขยายมาโคร การแปลง Trigraph เลี่ยงการต่อบรรทัดใหม่
และการประมวลผลคำสั่งส่วนใหญ่ ตัวประมวลผลล่วงหน้ายังคงรับรู้และลบออก
ความคิดเห็นเพื่อให้คุณสามารถส่งไฟล์ที่ประมวลผลล่วงหน้าด้วย -C ไปยังคอมไพเลอร์โดยไม่ต้อง
ปัญหา. ในโหมดนี้ ตัวประมวลผลล่วงหน้าที่รวมไว้เป็นมากกว่าตัวสร้างโทเค็น
สำหรับปลายด้านหน้า
-fประมวลผลล่วงหน้า เป็นนัยถ้าไฟล์อินพุตมีนามสกุลใดนามสกุลหนึ่ง .i, .ii or .ไมล์.
นี่คือส่วนขยายที่ GCC ใช้สำหรับไฟล์ที่ประมวลผลล่วงหน้าที่สร้างโดย -save-อุณหภูมิ.
-ftabstop=ความกว้าง
กำหนดระยะห่างระหว่างแถบหยุด ซึ่งช่วยให้ตัวประมวลผลล่วงหน้ารายงานคอลัมน์ที่ถูกต้อง
ตัวเลขในคำเตือนหรือข้อผิดพลาด แม้ว่าแท็บจะปรากฏบนบรรทัด ถ้าค่าน้อยกว่า
มากกว่า 1 หรือมากกว่า 100 ตัวเลือกจะถูกละเว้น ค่าเริ่มต้นคือ 8
-fdebug-cpp
ตัวเลือกนี้มีประโยชน์สำหรับการดีบัก GCC เท่านั้น เมื่อใช้กับ -E, ทิ้งการดีบัก
ข้อมูลเกี่ยวกับแผนที่ที่ตั้ง ทุกโทเค็นในเอาต์พุตนำหน้าด้วยการถ่ายโอนข้อมูลของ
แผนที่ที่ตั้งของมันเป็นของ การถ่ายโอนข้อมูลแผนที่ที่ถือตำแหน่งของโทเค็น
อยากจะเป็น:
{"ป":เฝอ ;"F":ฟ ;"แอล": ;"ค": ;"NS": ;"NS": ;"อี": ,"สถานที่": }
เมื่อใช้โดยไม่ต้อง -E, ตัวเลือกนี้ไม่มีผล
-ftrack-มาโครขยาย[=ระดับ]
ติดตามตำแหน่งของโทเค็นในการขยายมาโคร สิ่งนี้ทำให้คอมไพเลอร์สามารถปล่อย
การวินิจฉัยเกี่ยวกับสแต็คการขยายมาโครปัจจุบันเมื่อเกิดข้อผิดพลาดในการคอมไพล์ใน
การขยายมาโคร การใช้ตัวเลือกนี้ทำให้พรีโปรเซสเซอร์และคอมไพเลอร์ใช้การ
หน่วยความจำมากขึ้น NS ระดับ พารามิเตอร์สามารถใช้เพื่อเลือกระดับความแม่นยำของโทเค็น
การติดตามตำแหน่งจึงช่วยลดการใช้หน่วยความจำหากจำเป็น ค่า 0 of
ระดับ ปิดใช้งานตัวเลือกนี้เหมือนกับว่าไม่ -ftrack-มาโครขยาย อยู่บน
บรรทัดคำสั่ง ค่า 1 ติดตามตำแหน่งโทเค็นในโหมดที่เสื่อมโทรมเพื่อประโยชน์ของ
ค่าใช้จ่ายหน่วยความจำน้อยที่สุด ในโหมดนี้โทเค็นทั้งหมดที่เกิดจากการขยายตัวของ an
อาร์กิวเมนต์ของแมโครที่เหมือนฟังก์ชันมีตำแหน่งเดียวกัน ค่า 2 โทเค็นแทร็ก
สถานที่อย่างสมบูรณ์ ค่านี้เป็นหน่วยความจำที่หิวมากที่สุด เมื่อให้ตัวเลือกนี้
ไม่มีอาร์กิวเมนต์ ค่าพารามิเตอร์เริ่มต้นคือ 2.
โปรดทราบว่า -ftrack-macro-expansion=2 ถูกเปิดใช้งานโดยค่าเริ่มต้น
-fexec-charset=ชุดอักขระ
ตั้งค่าชุดอักขระการดำเนินการ ใช้สำหรับค่าคงที่สตริงและอักขระ ค่าเริ่มต้น
คือ UTF-8 ชุดอักขระ สามารถเป็นการเข้ารหัสใด ๆ ที่สนับสนุนโดยไลบรารี "iconv" ของระบบ
กิจวัตรประจำวัน
-fwide-exec-charset=ชุดอักขระ
ตั้งค่าชุดอักขระการดำเนินการแบบกว้าง ใช้สำหรับค่าคงที่สตริงและอักขระแบบกว้าง
ค่าเริ่มต้นคือ UTF-32 หรือ UTF-16 ขึ้นอยู่กับความกว้างของ "wchar_t" เนื่องจาก
กับ -fexec-ชุดอักขระ, ชุดอักขระ สามารถเข้ารหัสใด ๆ ที่สนับสนุนโดย "iconv" ของระบบ
กิจวัตรประจำวันของห้องสมุด อย่างไรก็ตาม คุณจะมีปัญหากับการเข้ารหัสที่ไม่เหมาะสม
ตรงใน "wchar_t"
-finput-charset=ชุดอักขระ
ตั้งค่าชุดอักขระอินพุต ใช้สำหรับแปลจากชุดอักขระของอินพุต
ไฟล์ไปยังชุดอักขระต้นทางที่ใช้โดย GCC หากสถานที่ไม่ระบุหรือ GCC
ไม่สามารถรับข้อมูลนี้จากโลแคล ค่าเริ่มต้นคือ UTF-8 นี้สามารถ
แทนที่ด้วยโลแคลหรือตัวเลือกบรรทัดคำสั่งนี้ ปัจจุบันคำสั่ง
ตัวเลือกบรรทัดมีความสำคัญกว่าหากมีข้อขัดแย้ง ชุดอักขระ สามารถเข้ารหัสใด ๆ ก็ได้
สนับสนุนโดยรูทีนไลบรารี "iconv" ของระบบ
-fworking-ไดเรกทอรี
เปิดใช้งานการสร้าง linemarkers ในเอาต์พุตตัวประมวลผลล่วงหน้าที่จะให้คอมไพเลอร์
ทราบไดเร็กทอรีการทำงานปัจจุบันในขณะที่ประมวลผลล่วงหน้า เมื่อตัวเลือกนี้คือ
เปิดใช้งาน ตัวประมวลผลล่วงหน้าจะปล่อยตัวทำเครื่องหมายเส้นที่สองหลังจากตัวทำเครื่องหมายเริ่มต้น
ด้วยไดเร็กทอรีการทำงานปัจจุบันตามด้วยสแลชสองตัว GCC จะใช้สิ่งนี้
ไดเร็กทอรีเมื่อมีอยู่ในอินพุตที่ประมวลผลล่วงหน้าเนื่องจากไดเร็กทอรีที่ปล่อยออกมาเป็น
ไดเร็กทอรีการทำงานปัจจุบันในรูปแบบข้อมูลการดีบักบางรูปแบบ ตัวเลือกนี้คือ
เปิดใช้งานโดยปริยายหากเปิดใช้งานข้อมูลการดีบัก แต่สิ่งนี้สามารถยับยั้งได้ด้วย
แบบฟอร์มปฏิเสธ -fno-working-ไดเรกทอรี. หาก -P มีแฟล็กอยู่ในคำสั่ง
บรรทัด ตัวเลือกนี้ไม่มีผล เนื่องจากไม่มีคำสั่ง "#line" ออกมาแต่อย่างใด
-fno-show-คอลัมน์
อย่าพิมพ์หมายเลขคอลัมน์ในการวินิจฉัย นี่อาจมีความจำเป็นหากการวินิจฉัยคือ
ถูกสแกนโดยโปรแกรมที่ไม่เข้าใจหมายเลขคอลัมน์ เช่น
เดแจนู.
-A คำกริยา=คำตอบ
ยืนยันด้วยภาคแสดง คำกริยา และตอบ คำตอบ. แบบฟอร์มนี้คือ
ชอบแบบเก่ามากกว่า -A คำกริยา(คำตอบ)ซึ่งยังคงรองรับอยู่เพราะว่า
ไม่ใช้อักขระพิเศษของเชลล์
-A -คำกริยา=คำตอบ
ยกเลิกการยืนยันด้วยภาคแสดง คำกริยา และตอบ คำตอบ.
-dCHARS
CHAR เป็นลำดับของอักขระต่อไปนี้ตั้งแต่หนึ่งตัวขึ้นไป และต้องไม่เป็น
นำหน้าด้วยช่องว่าง อักขระอื่น ๆ ถูกตีความโดยคอมไพเลอร์ที่เหมาะสมหรือ
สงวนไว้สำหรับ GCC เวอร์ชันต่อๆ ไป และจะถูกละเว้นอย่างเงียบๆ หากคุณระบุ
อักขระที่มีพฤติกรรมขัดแย้งกัน ผลลัพธ์ไม่ได้กำหนดไว้
M แทนที่จะเป็นเอาต์พุตปกติ ให้สร้างรายการของ #กำหนด คำสั่งสำหรับ .ทั้งหมด
มาโครที่กำหนดไว้ระหว่างการดำเนินการของตัวประมวลผลล่วงหน้า รวมถึงที่กำหนดไว้ล่วงหน้า
มาโคร วิธีนี้จะช่วยให้คุณค้นพบว่ามีอะไรที่กำหนดไว้ล่วงหน้าในเวอร์ชันของคุณ
พรีโปรเซสเซอร์ สมมติว่าคุณไม่มีไฟล์ ฟู, คำสั่ง
แตะ foo.h; cpp -dM foo.h
จะแสดงมาโครที่กำหนดไว้ล่วงหน้าทั้งหมด
ถ้าคุณใช้ -ดีเอ็ม ปราศจาก -E ตัวเลือก -ดีเอ็ม ถูกตีความว่าเป็นคำพ้องความหมายสำหรับ
-fdump-rtl-จักร.
D Like M เว้นแต่ในสองประการ: มันไม่ ไม่ รวมมาโครที่กำหนดไว้ล่วงหน้าและมัน
เอาท์พุท ทั้งสอง #กำหนด คำสั่งและผลลัพธ์ของการประมวลผลล่วงหน้า ทั้งสองแบบ
ของเอาต์พุตไปที่ไฟล์เอาต์พุตมาตรฐาน
N Like Dแต่ให้แสดงเฉพาะชื่อมาโคร ไม่ใช่ส่วนขยาย
I เอาท์พุต #include คำสั่งนอกเหนือจากผลลัพธ์ของการประมวลผลล่วงหน้า
U Like D ยกเว้นเฉพาะมาโครที่ขยายหรือทดสอบความชัดเจน
ในคำสั่งของตัวประมวลผลล่วงหน้าเป็นเอาต์พุต เอาต์พุตล่าช้าจนกว่าจะใช้งานหรือ
การทดสอบมาโคร และ #อันเดฟ คำสั่งยังส่งออกสำหรับมาโครที่ทดสอบแล้ว แต่
ไม่ได้กำหนดไว้ในขณะนั้น
-P ยับยั้งการสร้างเส้นในเอาต์พุตจากตัวประมวลผลล่วงหน้า นี่อาจจะเป็น
มีประโยชน์เมื่อรันตัวประมวลผลล่วงหน้าในสิ่งที่ไม่ใช่รหัส C และจะถูกส่ง
ไปยังโปรแกรมที่อาจสับสนโดยตัวทำเครื่องหมายเส้น
-C อย่าทิ้งความคิดเห็น ความคิดเห็นทั้งหมดจะถูกส่งผ่านไปยังไฟล์ที่ส่งออก ยกเว้น
สำหรับความคิดเห็นในคำสั่งที่ประมวลผลแล้ว ซึ่งจะถูกลบไปพร้อมกับคำสั่งนั้น
คุณควรเตรียมพร้อมสำหรับผลข้างเคียงเมื่อใช้ -C; มันทำให้พรีโปรเซสเซอร์ไป
ถือว่าความคิดเห็นเป็นโทเค็นในสิทธิของตนเอง ตัวอย่างเช่น ความคิดเห็นที่ปรากฏที่
จุดเริ่มต้นของสิ่งที่จะเป็น directive line มีผลกับการเปลี่ยนบรรทัดนั้นให้เป็น an
บรรทัดต้นทางธรรมดา เนื่องจากโทเค็นแรกในบรรทัดไม่มี a . อีกต่อไป #.
- ปชช อย่าละทิ้งความคิดเห็น รวมทั้งระหว่างการขยายมาโคร ประมาณนี้ค่ะ -Cยกเว้น
ความคิดเห็นที่อยู่ภายในแมโครนั้นจะถูกส่งผ่านไปยังไฟล์เอาต์พุตด้วยโดยที่
มาโครถูกขยาย
นอกจากผลข้างเคียงของ -C ตัวเลือก, - ปชช ตัวเลือกทำให้เกิดสไตล์ C ++ ทั้งหมด
ความคิดเห็นภายในมาโครที่จะแปลงเป็นความคิดเห็นแบบ C เพื่อป้องกันภายหลัง
การใช้มาโครนั้นจากการแสดงความคิดเห็นส่วนที่เหลือของบรรทัดต้นทางโดยไม่ตั้งใจ
โครงการ - ปชช โดยทั่วไปจะใช้ตัวเลือกเพื่อสนับสนุนความคิดเห็นที่เป็นผ้าสำลี
-แบบดั้งเดิม-cpp
พยายามเลียนแบบพฤติกรรมของตัวประมวลผลล่วงหน้า C ที่ล้าสมัย เมื่อเทียบกับ ISO C
พรีโปรเซสเซอร์
-ไตรกราฟ
ประมวลผลลำดับไตรกราฟ เหล่านี้เป็นลำดับอักขระสามตัว ทั้งหมดเริ่มต้นด้วย
??ที่กำหนดโดย ISO C เพื่อย่อมาจากอักขระตัวเดียว ตัวอย่างเช่น, - ยืน
for \ดังนั้น '??/NS' เป็นค่าคงที่อักขระสำหรับขึ้นบรรทัดใหม่ โดยค่าเริ่มต้น GCC จะละเว้น
trigraphs แต่ในโหมดที่เป็นไปตามมาตรฐาน จะแปลงค่าเหล่านี้ ดู -มาตรฐาน และ -แอนซี
ตัวเลือก
เก้าไตรลักษณ์และการแทนที่คือ
ไตรกราฟ: ??( ??) ??< ??> ??= ??/ ??' ??! ??-
การแทนที่: [ ] { } # \ ^ | ~
-รีแมป
เปิดใช้งานรหัสพิเศษเพื่อแก้ไขระบบไฟล์ที่อนุญาตเฉพาะไฟล์ที่สั้นมากเท่านั้น
ชื่อเช่น MS-DOS
--ช่วยด้วย
--เป้าหมาย-ช่วยเหลือ
พิมพ์ข้อความที่อธิบายตัวเลือกบรรทัดคำสั่งทั้งหมดแทนการประมวลผลล่วงหน้า
-v โหมดละเอียด พิมพ์หมายเลขเวอร์ชันของ GNU CPP ที่จุดเริ่มต้นของการดำเนินการและ
รายงานรูปแบบสุดท้ายของเส้นทางรวม
-H พิมพ์ชื่อของแต่ละไฟล์ส่วนหัวที่ใช้ นอกเหนือจากกิจกรรมปกติอื่นๆ แต่ละ
เยื้องชื่อเพื่อแสดงว่าลึกใน #include กองมันเป็น ส่วนหัวที่คอมไพล์แล้ว
ไฟล์ยังถูกพิมพ์แม้ว่าจะพบว่าไม่ถูกต้อง คอมไพล์ล่วงหน้าที่ไม่ถูกต้อง
ไฟล์ส่วนหัวพิมพ์ด้วย ...NS และถูกต้องด้วย ... ! .
-version
--รุ่น
พิมพ์หมายเลขเวอร์ชันของ GNU CPP ด้วยหนึ่งขีด ให้ดำเนินการประมวลผลล่วงหน้าตามปกติ
ด้วยเส้นประสองเส้น ให้ออกทันที
ที่ผ่านไป Options ไปยัง ผู้ประกอบ
คุณสามารถส่งตัวเลือกไปยังแอสเซมเบลอร์
-วาตัวเลือก
ส่ง ตัวเลือก เป็นตัวเลือกสำหรับแอสเซมเบลอร์ ถ้า ตัวเลือก มีเครื่องหมายจุลภาค มันถูกแบ่ง
ลงในหลายตัวเลือกที่เครื่องหมายจุลภาค
-Xแอสเซมเบลอร์ ตัวเลือก
ส่ง ตัวเลือก เป็นตัวเลือกสำหรับแอสเซมเบลอร์ คุณสามารถใช้สิ่งนี้เพื่อจัดหาระบบเฉพาะ
ตัวเลือกแอสเซมเบลอร์ที่ GCC ไม่รู้จัก
หากคุณต้องการส่งตัวเลือกที่มีการโต้แย้ง คุณต้องใช้ -Xแอสเซมเบลอร์ เป็นครั้งที่สอง
หนึ่งครั้งสำหรับตัวเลือกและอีกครั้งสำหรับการโต้แย้ง
Options for การเชื่อมโยง
ตัวเลือกเหล่านี้จะมีผลเมื่อคอมไพเลอร์เชื่อมโยงไฟล์อ็อบเจ็กต์เข้ากับไฟล์ปฏิบัติการ
ไฟล์ที่ส่งออก สิ่งเหล่านี้ไม่มีความหมายหากคอมไพเลอร์ไม่ได้ทำขั้นตอนลิงก์
วัตถุไฟล์ชื่อ
ชื่อไฟล์ที่ไม่ลงท้ายด้วยส่วนต่อท้ายที่รู้จักพิเศษถือเป็นชื่อ an
ไฟล์วัตถุหรือไลบรารี (ไฟล์อ็อบเจ็กต์แตกต่างจากไลบรารีโดยตัวเชื่อมโยง
ตามเนื้อหาของไฟล์) หากการลิงก์เสร็จสิ้น ไฟล์อ็อบเจ็กต์เหล่านี้จะถูกใช้เป็น
อินพุตไปยังตัวเชื่อมโยง
-c
-S
-E หากใช้ตัวเลือกใดตัวเลือกหนึ่งเหล่านี้ ตัวเชื่อมโยงจะไม่ทำงาน และชื่อไฟล์อ็อบเจ็กต์
ไม่ควรใช้เป็นข้อโต้แย้ง
-lห้องสมุด
-l ห้องสมุด
ค้นหาห้องสมุดชื่อ ห้องสมุด เมื่อเชื่อมโยง (ทางเลือกที่สองกับ
ไลบรารีเป็นอาร์กิวเมนต์แยกต่างหากสำหรับการปฏิบัติตาม POSIX เท่านั้น และไม่แนะนำ)
มันสร้างความแตกต่างในคำสั่งที่คุณเขียนตัวเลือกนี้ ลิงเกอร์ค้นหา
และประมวลผลไลบรารีและไฟล์อ็อบเจ็กต์ตามลำดับที่ระบุไว้ ดังนั้น, ฟูโอ
-ลซ บาร์.โอ ค้นหาห้องสมุด z หลังจากไฟล์ ฟูโอ แต่ก่อน บาร์.โอ. ถ้า บาร์.โอ อ้างถึง
หน้าที่ใน zฟังก์ชันเหล่านั้นอาจไม่สามารถโหลดได้
ตัวเชื่อมโยงค้นหารายการไดเร็กทอรีมาตรฐานสำหรับไลบรารี ซึ่งจริงๆ แล้วคือ
ไฟล์ชื่อ ห้องสมุด.ก. ตัวเชื่อมโยงใช้ไฟล์นี้ราวกับว่ามันถูกระบุไว้
อย่างแม่นยำตามชื่อ
ไดเร็กทอรีที่ค้นหาประกอบด้วยไดเร็กทอรีระบบมาตรฐานหลายไดเร็กทอรีรวมทั้งไดเร็กทอรีที่คุณ
ระบุด้วย -L.
โดยปกติไฟล์ที่พบในลักษณะนี้คือไฟล์ไลบรารี---ไฟล์เก็บถาวรที่มีสมาชิกอยู่
ไฟล์อ็อบเจ็กต์ ตัวเชื่อมโยงจัดการไฟล์เก็บถาวรโดยการสแกนหาสมาชิก
ซึ่งกำหนดสัญลักษณ์ที่มีการอ้างอิงแต่ไม่ได้กำหนดไว้ แต่ถ้า
ไฟล์ที่พบเป็นอ็อบเจ็กต์ไฟล์ธรรมดา มันถูกเชื่อมโยงแบบปกติ NS
ความแตกต่างระหว่างการใช้ an . เท่านั้น -l ตัวเลือกและระบุชื่อไฟล์ว่า -l
ล้อมรอบ ห้องสมุด กับ lib และ .a และค้นหาหลายไดเร็กทอรี
-lobjc
คุณต้องการกรณีพิเศษนี้ของ -l ตัวเลือกเพื่อเชื่อมโยง Objective-C หรือ
โปรแกรม Objective-C++
-NostartFiles
อย่าใช้ไฟล์เริ่มต้นระบบมาตรฐานเมื่อทำการเชื่อมโยง ระบบมาตราฐาน
ห้องสมุดถูกใช้งานตามปกติ เว้นแต่ -nostdlib or -nodedefaultlibs ถูกนำมาใช้.
-nodedefaultlibs
ห้ามใช้ไลบรารีระบบมาตรฐานเมื่อทำการเชื่อมโยง เฉพาะไลบรารีที่คุณระบุ
ถูกส่งไปยังตัวเชื่อมโยง และตัวเลือกที่ระบุการเชื่อมโยงของไลบรารีระบบ เช่น
เป็น "-static-libgcc" หรือ "-shared-libgcc" จะถูกละเว้น ไฟล์เริ่มต้นมาตรฐานคือ
ใช้ตามปกติ เว้นแต่ -NostartFiles ถูกนำมาใช้.
คอมไพเลอร์อาจสร้างการเรียก "memcmp", "memset", "memcpy" และ "memmove" เหล่านี้
รายการมักจะได้รับการแก้ไขโดยรายการใน libc จุดเริ่มต้นเหล่านี้ควรเป็น
จัดหาผ่านกลไกอื่นเมื่อมีการระบุตัวเลือกนี้
-nostdlib
ห้ามใช้ไฟล์หรือไลบรารีเริ่มต้นระบบมาตรฐานเมื่อทำการเชื่อมโยง ไม่มีการเริ่มต้น
ไฟล์และเฉพาะไลบรารีที่คุณระบุเท่านั้นที่จะถูกส่งต่อไปยังตัวเชื่อมโยง และตัวเลือก
การระบุการเชื่อมโยงของไลบรารีระบบ เช่น "-static-libgcc" หรือ
"-shared-libgcc" จะถูกละเว้น
คอมไพเลอร์อาจสร้างการเรียก "memcmp", "memset", "memcpy" และ "memmove" เหล่านี้
รายการมักจะได้รับการแก้ไขโดยรายการใน libc จุดเริ่มต้นเหล่านี้ควรเป็น
จัดหาผ่านกลไกอื่นเมื่อมีการระบุตัวเลือกนี้
หนึ่งในไลบรารีมาตรฐานที่ถูกข้ามโดย -nostdlib และ -nodedefaultlibs is libgcc.aที่
ไลบรารีของรูทีนย่อยภายในที่ GCC ใช้เพื่อเอาชนะข้อบกพร่องเฉพาะ
เครื่องหรือความต้องการพิเศษสำหรับบางภาษา
ในกรณีส่วนใหญ่ คุณต้องการ libgcc.a แม้ว่าคุณต้องการหลีกเลี่ยงไลบรารีมาตรฐานอื่นๆ
กล่าวอีกนัยหนึ่งเมื่อคุณระบุ -nostdlib or -nodedefaultlibs คุณมักจะ
ระบุ -lgcc เช่นกัน. เพื่อให้แน่ใจว่าคุณไม่มีการอ้างอิงถึง .ที่ยังไม่ได้แก้ไข
รูทีนย่อยไลบรารี GCC ภายใน (ตัวอย่างของรูทีนย่อยภายในดังกล่าวคือ
__หลักใช้เพื่อให้แน่ใจว่ามีการเรียกตัวสร้าง C++)
-พาย
สร้างตำแหน่งปฏิบัติการอิสระบนเป้าหมายที่สนับสนุน สำหรับการคาดเดา
ผลลัพธ์ คุณต้องระบุชุดตัวเลือกเดียวกันกับที่ใช้ในการคอมไพล์ (-fpie,
-fPIEหรือตัวเลือกย่อยของโมเดล) เมื่อคุณระบุตัวเลือกตัวเชื่อมโยงนี้
-ไดนามิค
ปักธง -ส่งออกไดนามิก ไปยังตัวเชื่อมโยง ELF บนเป้าหมายที่สนับสนุน นี้
สั่งให้ตัวเชื่อมโยงเพิ่มสัญลักษณ์ทั้งหมด ไม่ใช่แค่สัญลักษณ์ที่ใช้กับสัญลักษณ์ไดนามิก
ตาราง. ตัวเลือกนี้จำเป็นสำหรับการใช้งาน "dlopen" บางอย่างหรือเพื่อให้ได้รับ
ย้อนรอยจากภายในโปรแกรม
-s ลบตารางสัญลักษณ์และข้อมูลการย้ายตำแหน่งทั้งหมดออกจากไฟล์เรียกทำงาน
-คงที่
ในระบบที่รองรับการลิงก์แบบไดนามิก จะป้องกันการลิงก์กับช่องแชร์
ห้องสมุด ในระบบอื่น ตัวเลือกนี้ไม่มีผล
- แบ่งปัน
สร้างวัตถุที่ใช้ร่วมกันซึ่งสามารถเชื่อมโยงกับวัตถุอื่นเพื่อสร้าง an
ปฏิบัติการได้ ไม่ใช่ทุกระบบที่รองรับตัวเลือกนี้ เพื่อผลลัพธ์ที่คาดเดาได้ คุณต้อง
ยังระบุชุดตัวเลือกเดียวกันกับที่ใช้ในการคอมไพล์ด้วย (-fpic, -fPICหรือรุ่น
ตัวเลือกย่อย) เมื่อคุณระบุตัวเลือกตัวเชื่อมโยงนี้[1]
-Shared-Libgcc
-คงที่-libgcc
เกี่ยวกับระบบที่ให้บริการ libgcc เป็นไลบรารีที่ใช้ร่วมกัน ตัวเลือกเหล่านี้บังคับให้ใช้
รุ่นที่ใช้ร่วมกันหรือแบบคงที่ ตามลำดับ หากไม่มีเวอร์ชันที่ใช้ร่วมกันของ libgcc คือ
สร้างขึ้นเมื่อคอมไพเลอร์ได้รับการกำหนดค่า ตัวเลือกเหล่านี้ไม่มีผล
มีหลายสถานการณ์ที่แอปพลิเคชันควรใช้การแชร์ libgcc
แทนที่จะเป็นเวอร์ชันคงที่ สิ่งเหล่านี้ที่พบบ่อยที่สุดคือเมื่อแอปพลิเคชัน
ต้องการโยนและจับข้อยกเว้นในไลบรารีที่ใช้ร่วมกันต่างๆ ในกรณีนั้น,
ไลบรารี่แต่ละแห่งและแอปพลิเคชันเองควรใช้การแชร์ libgcc.
ดังนั้นไดรเวอร์ G++ และ GCJ จะเพิ่ม .โดยอัตโนมัติ -Shared-Libgcc เมื่อใดก็ตามที่คุณสร้าง
ไลบรารีที่ใช้ร่วมกันหรือไฟล์ปฏิบัติการหลัก เนื่องจากโปรแกรม C++ และ Java มักใช้
ข้อยกเว้น ดังนั้นนี่จึงเป็นสิ่งที่ควรทำ
ถ้าคุณใช้ไดรเวอร์ GCC เพื่อสร้างไลบรารีที่ใช้ร่วมกันแทน คุณอาจพบว่า
ไม่ได้เชื่อมโยงกับการแชร์เสมอไป libgcc. หากพบ GCC ที่การกำหนดค่า
เวลาที่คุณมีตัวเชื่อมโยงที่ไม่ใช่ GNU หรือตัวเชื่อมโยง GNU ที่ไม่รองรับตัวเลือก
--เอ๊ะ-กรอบ HDR, มันเชื่อมโยงเวอร์ชันที่ใช้ร่วมกันของ libgcc ลงในห้องสมุดสาธารณะโดย
ค่าเริ่มต้น. มิฉะนั้น จะใช้ประโยชน์จากตัวเชื่อมโยงและปรับการเชื่อมโยงให้เหมาะสมที่สุด
ด้วยเวอร์ชันที่ใช้ร่วมกันของ libgcc, เชื่อมโยงกับเวอร์ชันคงที่ของ libgcc by
ค่าเริ่มต้น. ซึ่งทำให้ข้อยกเว้นสามารถเผยแพร่ผ่านไลบรารีที่แบ่งใช้ดังกล่าว โดยไม่ต้อง
ทำให้เกิดค่าใช้จ่ายในการย้ายที่เวลาโหลดห้องสมุด
อย่างไรก็ตาม หากไลบรารี่หรือไฟล์สั่งการหลักควรจะโยนหรือดักจับข้อยกเว้น คุณ
ต้องเชื่อมโยงโดยใช้ไดรเวอร์ G++ หรือ GCJ ตามความเหมาะสมกับภาษาที่ใช้ใน
โปรแกรมหรือใช้ตัวเลือก -Shared-Libgccเพื่อที่จะเชื่อมโยงกับการแบ่งปัน
libgcc.
-คง-libasan
เมื่อราคาของ -fsanitize=ที่อยู่ ตัวเลือกใช้สำหรับเชื่อมโยงโปรแกรม, ไดรเวอร์ GCC
เชื่อมโยงโดยอัตโนมัติกับ ลิบาซาน. ถ้า ลิบาซาน สามารถใช้ได้เป็นห้องสมุดที่ใช้ร่วมกันและ
-คงที่ ไม่ได้ใช้ตัวเลือก ดังนั้นสิ่งนี้จะลิงก์กับเวอร์ชันที่แชร์ของ ลิบาซาน.
โครงการ -คง-libasan ตัวเลือกนำไดรเวอร์ GCC ไปที่ลิงก์ ลิบาซาน แบบคงที่โดยไม่ต้อง
จำเป็นต้องเชื่อมโยงไลบรารีอื่นแบบคงที่
-คง-libtsan
เมื่อราคาของ -fsanitize=เธรด ตัวเลือกใช้สำหรับเชื่อมโยงโปรแกรม, ไดรเวอร์ GCC
เชื่อมโยงโดยอัตโนมัติกับ ลิบซาน. ถ้า ลิบซาน สามารถใช้ได้เป็นห้องสมุดที่ใช้ร่วมกันและ
-คงที่ ไม่ได้ใช้ตัวเลือก ดังนั้นสิ่งนี้จะลิงก์กับเวอร์ชันที่แชร์ของ ลิบซาน.
โครงการ -คง-libtsan ตัวเลือกนำไดรเวอร์ GCC ไปที่ลิงก์ ลิบซาน แบบคงที่โดยไม่ต้อง
จำเป็นต้องเชื่อมโยงไลบรารีอื่นแบบคงที่
-คงที่-libstdc++
เมื่อราคาของ g ++ โปรแกรมใช้เชื่อมโปรแกรม C++ ปกติจะลิงค์อัตโนมัติ
กับ libstdc ++. ถ้า libstdc ++ สามารถใช้ได้เป็นห้องสมุดที่ใช้ร่วมกันและ -คงที่
ไม่ได้ใช้ตัวเลือก ดังนั้นสิ่งนี้จะลิงก์กับเวอร์ชันที่แชร์ของ libstdc ++. นั่นคือ
ปกติดี อย่างไรก็ตาม บางครั้งการหยุดเวอร์ชันของ . ก็มีประโยชน์ libstdc ++
ใช้โดยโปรแกรมโดยไม่ต้องไปที่ลิงก์แบบสแตติกอย่างสมบูรณ์ NS
-คงที่-libstdc++ ตัวเลือกชี้นำ g ++ ไดรเวอร์ที่จะเชื่อมโยง libstdc ++ แบบคงที่โดยไม่ต้อง
จำเป็นต้องเชื่อมโยงไลบรารีอื่นแบบคงที่
-สัญลักษณ์
เชื่อมโยงการอ้างอิงถึงสัญลักษณ์สากลเมื่อสร้างวัตถุที่ใช้ร่วมกัน เตือนเกี่ยวกับใด ๆ
การอ้างอิงที่ไม่ได้รับการแก้ไข (เว้นแต่จะถูกแทนที่ด้วยตัวเลือกตัวแก้ไขลิงก์ -เอ็กซ์ลิงค์เกอร์ -z
-เอ็กซ์ลิงค์เกอร์ defs). มีเพียงไม่กี่ระบบเท่านั้นที่รองรับตัวเลือกนี้
-T ต้นฉบับ
ใช้ ต้นฉบับ เป็นสคริปต์ตัวเชื่อมโยง ระบบส่วนใหญ่รองรับตัวเลือกนี้โดยใช้ปุ่ม
ตัวเชื่อมโยง GNU ในบางเป้าหมาย เช่น เป้าหมายเปล่าที่ไม่มีระบบปฏิบัติการ
-T อาจจำเป็นต้องใช้ตัวเลือกเมื่อทำการเชื่อมโยงเพื่อหลีกเลี่ยงการอ้างถึงสัญลักษณ์ที่ไม่ได้กำหนดไว้
-เอ็กซ์ลิงค์เกอร์ ตัวเลือก
ส่ง ตัวเลือก เป็นตัวเลือกของลิงเกอร์ คุณสามารถใช้สิ่งนี้เพื่อจัดหาระบบเฉพาะ
ตัวเลือกตัวเชื่อมโยงที่ GCC ไม่รู้จัก
หากคุณต้องการส่งตัวเลือกที่แยกอาร์กิวเมนต์ คุณต้องใช้ -เอ็กซ์ลิงค์เกอร์
สองครั้ง หนึ่งครั้งสำหรับตัวเลือก และอีกครั้งสำหรับการโต้แย้ง เช่น ผ่าน -ยืนยัน
คำจำกัดความคุณต้องเขียน -เอ็กซ์ลิงค์เกอร์ -ยืนยัน -เอ็กซ์ลิงค์เกอร์ คำจำกัดความ. มันไม่ทำงาน
ที่จะเขียน -เอ็กซ์ลิงค์เกอร์ "-ยืนยัน คำจำกัดความ"เพราะนี่ส่งผ่านทั้งสตริงเป็น a
อาร์กิวเมนต์เดียว ซึ่งไม่ใช่สิ่งที่ตัวเชื่อมโยงคาดหวัง
เมื่อใช้ตัวเชื่อมโยง GNU มักจะสะดวกกว่าที่จะส่งผ่านอาร์กิวเมนต์ไปยังตัวเชื่อมโยง
ตัวเลือกโดยใช้ ตัวเลือก=ความคุ้มค่า ไวยากรณ์มากกว่าเป็นอาร์กิวเมนต์แยกต่างหาก ตัวอย่างเช่น คุณ
สามารถระบุได้ -เอ็กซ์ลิงค์เกอร์ -Map=output.map มากกว่า -เอ็กซ์ลิงค์เกอร์ -แผนที่ -เอ็กซ์ลิงค์เกอร์ เอาท์พุท แผนที่.
ตัวเชื่อมโยงอื่นๆ อาจไม่สนับสนุนไวยากรณ์นี้สำหรับตัวเลือกบรรทัดคำสั่ง
-Wlตัวเลือก
ส่ง ตัวเลือก เป็นตัวเลือกของลิงเกอร์ ถ้า ตัวเลือก มีเครื่องหมายจุลภาค แบ่งออกเป็น
หลายตัวเลือกที่เครื่องหมายจุลภาค คุณสามารถใช้ไวยากรณ์นี้เพื่อส่งผ่านอาร์กิวเมนต์ไปยัง
ตัวเลือก. ตัวอย่างเช่น, -Wl,-แผนที่,output.map ผ่าน -แผนที่ เอาท์พุท แผนที่ ไปยังตัวเชื่อมโยง เมื่อไหร่
โดยใช้ตัวเชื่อมโยง GNU คุณสามารถรับผลเช่นเดียวกันกับ -Wl,-Map=output.map.
หมายเหตุ: ใน Ubuntu 8.10 และเวอร์ชันที่ใหม่กว่า สำหรับ LDFLAGS ตัวเลือก -Wl,-z,เรลโร ถูกนำมาใช้.
หากต้องการปิดใช้งาน ให้ใช้ -Wl,-z,โนเรลโร.
-u เครื่องหมาย
แสร้งทำเป็นสัญลักษณ์ เครื่องหมาย ไม่ได้กำหนดไว้ เพื่อบังคับให้เชื่อมโยงโมดูลห้องสมุดเพื่อกำหนด
มัน. คุณสามารถใช้ได้ -u หลายครั้งด้วยสัญลักษณ์ต่างกันเพื่อบังคับให้โหลด
โมดูลห้องสมุดเพิ่มเติม
Options for ค้นหาสถานที่ ค้นหา
ตัวเลือกเหล่านี้ระบุไดเร็กทอรีเพื่อค้นหาไฟล์ส่วนหัว สำหรับไลบรารี และสำหรับชิ้นส่วน
ของคอมไพเลอร์:
-Idir
เพิ่มไดเร็กทอรี dir ไปที่ส่วนหัวของรายการไดเร็กทอรีที่จะค้นหา header
ไฟล์. สามารถใช้เพื่อแทนที่ไฟล์ส่วนหัวของระบบ แทนที่ไฟล์ของคุณเอง
เวอร์ชัน เนื่องจากไดเร็กทอรีเหล่านี้ถูกค้นหาก่อนไฟล์ส่วนหัวของระบบ
ไดเรกทอรี อย่างไรก็ตาม คุณไม่ควรใช้ตัวเลือกนี้เพื่อเพิ่มไดเร็กทอรีที่มี
ไฟล์ส่วนหัวของระบบที่ผู้ขายจัดหา (use -ไอซิสเต็ม สำหรับการที่). หากคุณใช้มากกว่าหนึ่งตัว
-I ตัวเลือก ไดเร็กทอรีจะถูกสแกนในลำดับจากซ้ายไปขวา ระบบมาตราฐาน
ไดเรกทอรีมาหลังจาก
หากระบบมาตรฐานรวมไดเร็กทอรีหรือไดเร็กทอรีที่ระบุด้วย -ไอซิสเต็ม, เป็น
ยังระบุด้วย -Iที่ -I ตัวเลือกจะถูกละเว้น ไดเร็กทอรียังคงค้นหาอยู่แต่
เป็นไดเร็กทอรีระบบที่ตำแหน่งปกติในระบบรวมถึงลูกโซ่ นี่คือเพื่อ
ตรวจสอบให้แน่ใจว่าขั้นตอนของ GCC ในการแก้ไขส่วนหัวของระบบบั๊กกี้และการสั่งซื้อสำหรับ
คำสั่ง "include_next" จะไม่เปลี่ยนแปลงโดยไม่ได้ตั้งใจ ถ้าจำเป็นต้องเปลี่ยนจริงๆ
ลำดับการค้นหาสำหรับไดเร็กทอรีระบบ ใช้ -nostdinc และ / หรือ -ไอซิสเต็ม ตัวเลือก
-iplugindir=dir
ตั้งค่าไดเร็กทอรีเพื่อค้นหาปลั๊กอินที่ส่งผ่าน -fปลั๊กอิน=ชื่อ แทน
-fปลั๊กอิน=เส้นทาง/ชื่อ.ดังนั้น. ตัวเลือกนี้ไม่ได้มีไว้สำหรับผู้ใช้ แต่เท่านั้น
ผ่านคนขับ
-iquotedir
เพิ่มไดเร็กทอรี dir ไปที่ส่วนหัวของรายการไดเร็กทอรีที่จะค้นหา header
ไฟล์เฉพาะกรณีของ #include "ไฟล์"; พวกเขาจะไม่ถูกค้นหา #include <ไฟล์>,
อย่างอื่นก็เหมือน -I.
-Ldir
เพิ่มไดเรกทอรี dir ไปยังรายการไดเร็กทอรีที่จะค้นหา -l.
-Bอุปสรรค
ตัวเลือกนี้ระบุตำแหน่งที่จะค้นหาไฟล์เรียกทำงาน ไลบรารี รวมไฟล์ และ
ไฟล์ข้อมูลของคอมไพเลอร์เอง
โปรแกรมควบคุมคอมไพเลอร์รันโปรแกรมย่อยอย่างน้อยหนึ่งโปรแกรม ซีพี, cc1, as และ ld.
มันพยายาม อุปสรรค เป็นคำนำหน้าสำหรับแต่ละโปรแกรมที่พยายามเรียกใช้ ทั้งที่มีและไม่มี
เครื่อง/รุ่น/.
สำหรับการรันโปรแกรมย่อยแต่ละโปรแกรม ไดรเวอร์คอมไพเลอร์จะพยายาม .ก่อน -B คำนำหน้าถ้ามี
หากไม่พบชื่อนั้นหรือถ้า -B ไม่ได้ระบุ คนขับพยายามสองมาตรฐาน
คำนำหน้า /usr/lib/gcc/ และ /usr/local/lib/gcc/. หากไม่มีผลลัพธ์ในa
ชื่อไฟล์ที่พบ จะค้นหาชื่อโปรแกรมที่ไม่ได้แก้ไขโดยใช้คำสั่ง
ไดเร็กทอรีที่ระบุใน your เส้นทาง ตัวแปรสภาพแวดล้อม
คอมไพเลอร์ตรวจสอบเพื่อดูว่าพาธที่ -B หมายถึงไดเร็กทอรีและ
หากจำเป็น จะเพิ่มอักขระตัวคั่นไดเร็กทอรีที่ส่วนท้ายของพาธ
-B คำนำหน้าที่ระบุชื่อไดเร็กทอรีอย่างมีประสิทธิภาพยังนำไปใช้กับไลบรารีใน
ลิงเกอร์เพราะคอมไพเลอร์แปลตัวเลือกเหล่านี้เป็น -L ตัวเลือกสำหรับตัวเชื่อมโยง
นอกจากนี้ยังใช้เพื่อรวมไฟล์ในตัวประมวลผลล่วงหน้าเพราะคอมไพเลอร์แปล
ตัวเลือกเหล่านี้เป็น -ไอซิสเต็ม ตัวเลือกสำหรับพรีโปรเซสเซอร์ ในกรณีนี้คอมไพเลอร์
ต่อท้าย ประกอบด้วย ไปที่คำนำหน้า
ไฟล์สนับสนุนรันไทม์ libgcc.a นอกจากนี้ยังสามารถค้นหาโดยใช้ -B คำนำหน้า if
จำเป็น หากไม่พบในนั้น ให้ลองใช้คำนำหน้ามาตรฐานทั้งสองข้างต้น และนั่น
คือทั้งหมด. ไฟล์จะถูกปล่อยออกจากลิงค์หากไม่พบโดยวิธีการเหล่านั้น
อีกวิธีในการระบุคำนำหน้าเช่น -B คำนำหน้าคือการใช้สิ่งแวดล้อม
ตัวแปร GCC_EXEC_PREFIX.
เป็นคลาดจ์พิเศษหากเส้นทางที่ .จัดให้ -B is [ผบ./]เวทีN/ที่นี่มี N เป็นตัวเลข
ในช่วง 0 ถึง 9 จากนั้นจะถูกแทนที่ด้วย [dir/]รวม. นี่คือการช่วยในการบูต-
รัดคอมไพเลอร์
-ข้อมูลจำเพาะ=ไฟล์
กระบวนการ ไฟล์ หลังจากที่คอมไพเลอร์อ่านในมาตรฐาน รายละเอียด ไฟล์เพื่อที่จะแทนที่
ค่าเริ่มต้นซึ่ง gcc โปรแกรมควบคุมใช้เมื่อกำหนดสวิตช์ที่จะผ่าน
ไปยัง cc1, ซีซี1พลัส, as, ldฯลฯ มากกว่าหนึ่ง -ข้อมูลจำเพาะ=ไฟล์ สามารถระบุได้ที่
บรรทัดคำสั่ง และประมวลผลตามลำดับจากซ้ายไปขวา
--sysroot=dir
ใช้ dir เป็นไดเร็กทอรี root แบบลอจิคัลสำหรับส่วนหัวและไลบรารี ตัวอย่างเช่น ถ้า
คอมไพเลอร์มักจะค้นหาส่วนหัวใน / usr / รวม และห้องสมุดใน / usr / libมัน
แทนการค้นหา ผู้อำนวยการ/usr/include และ ผู้กำกับ/usr/lib.
หากคุณใช้ทั้งตัวเลือกนี้และ -isysroot ตัวเลือก จากนั้น --sysroot ตัวเลือก
ใช้กับห้องสมุด แต่ -isysroot ตัวเลือกนำไปใช้กับไฟล์ส่วนหัว
ตัวเชื่อมโยง GNU (เริ่มต้นด้วยเวอร์ชัน 2.16) มีการสนับสนุนที่จำเป็นสำหรับสิ่งนี้
ตัวเลือก. หากตัวเชื่อมโยงของคุณไม่รองรับตัวเลือกนี้ ลักษณะของไฟล์ส่วนหัวของ
--sysroot ยังคงใช้งานได้ แต่ด้านห้องสมุดไม่ทำงาน
--no-sysroot-ต่อท้าย
สำหรับเป้าหมายบางรายการ คำต่อท้ายจะถูกเพิ่มไปยังไดเร็กทอรีรากที่ระบุด้วย --sysroot,
ขึ้นอยู่กับตัวเลือกอื่น ๆ ที่ใช้เพื่อให้พบส่วนหัวเช่นใน
dir/คำต่อท้าย/usr/include แทน ผู้อำนวยการ/usr/include. ตัวเลือกนี้ปิดใช้งานการเพิ่มเติม
ของคำต่อท้ายดังกล่าว
-ผม- ตัวเลือกนี้เลิกใช้แล้ว โปรดใช้ -iquote แทนสำหรับ -I ไดเรกทอรีก่อน
-ผม- และลบไฟล์ -ผม-. ไดเร็กทอรีใด ๆ ที่คุณระบุด้วย -I ตัวเลือกก่อน
-ผม- ตัวเลือกจะถูกค้นหาเฉพาะกรณีของ #include "ไฟล์"; พวกเขาจะไม่ถูกค้นหา
for #include <ไฟล์>.
หากระบุไดเร็กทอรีเพิ่มเติมด้วย -I ตัวเลือกหลัง -ผม-เหล่านี้
ค้นหาไดเรกทอรีทั้งหมด #include คำสั่ง (ปกติ ทั้งหมด -I ไดเรกทอรี
ใช้วิธีนี้)
นอกจากนี้ -ผม- ตัวเลือกยับยั้งการใช้ไดเรกทอรีปัจจุบัน (โดยที่
ไฟล์อินพุตปัจจุบันมาจาก) เป็นไดเร็กทอรีการค้นหาแรกสำหรับ #include "ไฟล์".
ไม่มีทางที่จะแทนที่ผลกระทบนี้ของ -ผม-. ด้วย -ผม. คุณสามารถระบุการค้นหา
ไดเร็กทอรีที่เป็นปัจจุบันเมื่อคอมไพเลอร์ถูกเรียกใช้ นั่นไม่ใช่ว่า
เหมือนกับที่ตัวประมวลผลล่วงหน้าทำโดยค่าเริ่มต้น แต่มักจะเป็นที่น่าพอใจ
-ผม- ไม่ขัดขวางการใช้ไดเร็กทอรีระบบมาตรฐานสำหรับไฟล์ส่วนหัว
ดังนั้น -ผม- และ -nostdinc เป็นอิสระ
ระบุ เป้า เครื่อง และ ผู้รวบรวม เวอร์ชั่น
วิธีปกติในการเรียกใช้ GCC คือการเรียกใช้โปรแกรมเรียกทำงานที่ชื่อว่า gcc,หรือ เครื่อง-gcc เมื่อข้าม-
การรวบรวมหรือ เครื่อง-gcc-รุ่น เพื่อเรียกใช้เวอร์ชันอื่นที่ไม่ใช่เวอร์ชันที่ติดตั้งไว้
สุดท้าย.
ฮาร์ดแวร์ Models และ รุ่นเครื่องทดสอบ และรูปแบบการทำงาน
เครื่องเป้าหมายแต่ละประเภทสามารถมีตัวเลือกพิเศษของตัวเองได้ เริ่มด้วย -m, เลือก
ระหว่างรุ่นฮาร์ดแวร์หรือการกำหนดค่าต่างๆ—เช่น 68010 เทียบกับ 68020 แบบลอยตัว
ตัวประมวลผลร่วมหรือไม่มี คอมไพเลอร์เวอร์ชันเดียวที่ติดตั้งสามารถคอมไพล์สำหรับรุ่นใดก็ได้
หรือการกำหนดค่าตามตัวเลือกที่ระบุ
คอนฟิกูเรชันบางตัวของคอมไพเลอร์ยังสนับสนุนตัวเลือกพิเศษเพิ่มเติม โดยปกติสำหรับ
เข้ากันได้กับคอมไพเลอร์อื่น ๆ บนแพลตฟอร์มเดียวกัน
AAArch64 Options
ตัวเลือกเหล่านี้ถูกกำหนดไว้สำหรับการใช้งาน AArch64:
-mbig-endian
สร้างรหัส big-endian นี่เป็นค่าเริ่มต้นเมื่อกำหนดค่า GCC สำหรับ an
aarch64_be-*-* เป้า
-mgeneral-regs-เท่านั้น
สร้างรหัสที่ใช้เฉพาะการลงทะเบียนทั่วไป
-little-endian
สร้างโค้ด little-endian นี่เป็นค่าเริ่มต้นเมื่อกำหนดค่า GCC สำหรับ an
aarch64-*-* แต่ไม่ใช่ aarch64_be-*-* เป้า
-mcmodel=จิ๋ว
สร้างโค้ดสำหรับโมเดลโค้ดขนาดเล็ก โปรแกรมและสัญลักษณ์ที่กำหนดแบบคงที่
ต้องอยู่ภายใน 1GB ของกันและกัน พอยน์เตอร์คือ 64 บิต โปรแกรมสามารถเป็นแบบคงที่
หรือเชื่อมโยงแบบไดนามิก โมเดลนี้ไม่ได้ใช้งานอย่างเต็มที่และส่วนใหญ่ถือว่าเป็น
เล็ก.
-mcmodel=เล็ก
สร้างโค้ดสำหรับโมเดลโค้ดขนาดเล็ก โปรแกรมและการกำหนดแบบคงที่
สัญลักษณ์ต้องไม่เกิน 4GB ของกันและกัน พอยน์เตอร์คือ 64 บิต โปรแกรมสามารถ
เชื่อมโยงแบบคงที่หรือแบบไดนามิก นี่คือรูปแบบรหัสเริ่มต้น
-mcmodel=ขนาดใหญ่
สร้างโค้ดสำหรับโมเดลโค้ดขนาดใหญ่ สิ่งนี้ทำให้ไม่มีข้อสันนิษฐานเกี่ยวกับที่อยู่และ
ขนาดของส่วน พอยน์เตอร์คือ 64 บิต โปรแกรมสามารถเชื่อมโยงแบบคงที่เท่านั้น
-mstrict-จัดตำแหน่ง
อย่าถือว่าระบบจะจัดการการอ้างอิงหน่วยความจำที่ไม่ได้จัดแนว
-momit-leaf-frame-ตัวชี้
-mno-ละเว้น-leaf-frame-pointer
ละเว้นหรือเก็บตัวชี้เฟรมไว้ในฟังก์ชันลีฟ พฤติกรรมเดิมคือ
ค่าเริ่มต้น.
-mtls-dialect=รายละเอียด
ใช้ตัวอธิบาย TLS เป็นกลไกการจัดเก็บเธรดในเครื่องสำหรับการเข้าถึงแบบไดนามิกของ TLS
ตัวแปร นี่คือค่าเริ่มต้น
-mtls-dialect=ดั้งเดิม
ใช้ TLS แบบดั้งเดิมเป็นกลไกการจัดเก็บเธรดในเครื่องสำหรับการเข้าถึง TLS . แบบไดนามิก
ตัวแปร
-mfix-cortex-a53-835769
-mno-แก้ไข-cortex-a53-835769
เปิดใช้งานหรือปิดใช้งานวิธีแก้ปัญหาสำหรับ ARM Cortex-A53 erratum หมายเลข 835769 สิ่งนี้
จะเกี่ยวข้องกับการแทรกคำสั่ง NOP ระหว่างคำสั่งหน่วยความจำและ 64-บิต
คำแนะนำการคูณจำนวนเต็ม
-มีนาคม=ชื่อ
ระบุชื่อของสถาปัตยกรรมเป้าหมาย หรือต่อท้ายด้วยอย่างน้อยหนึ่งรายการ
ตัวปรับเปลี่ยนคุณสมบัติ ตัวเลือกนี้มีรูปแบบ -มีนาคม=โค้ง{+[ไม่]ลักษณะ}*, ที่ไหน
ค่าสำหรับ .เท่านั้น โค้ง is armv8-ก. ค่าที่เป็นไปได้สำหรับ ลักษณะ มีการบันทึกไว้ใน
ส่วนย่อยด้านล่าง
เมื่อมีการระบุตัวดัดแปลงคุณสมบัติที่ขัดแย้งกัน จะใช้คุณสมบัติที่ถูกต้องที่สุด
GCC ใช้ชื่อนี้เพื่อกำหนดประเภทของคำสั่งที่สามารถปล่อยออกมาได้เมื่อสร้าง
รหัสการประกอบ ตัวเลือกนี้สามารถใช้ร่วมกับหรือแทน -mcpu=
ตัวเลือก
-mcpu=ชื่อ
ระบุชื่อโปรเซสเซอร์เป้าหมาย หรือไม่ก็ได้ ต่อท้ายด้วยฟีเจอร์หนึ่งรายการขึ้นไป
ตัวดัดแปลง ตัวเลือกนี้มีรูปแบบ -mcpu=ซีพียู{+[ไม่]ลักษณะ}* ถ้าเป็นไปได้
ค่าสำหรับ ซีพียู เป็น ทั่วไป, ใหญ่. ค่าที่เป็นไปได้สำหรับ ลักษณะ มีการบันทึกไว้ใน
ส่วนย่อยด้านล่าง
เมื่อมีการระบุตัวดัดแปลงคุณสมบัติที่ขัดแย้งกัน จะใช้คุณสมบัติที่ถูกต้องที่สุด
GCC ใช้ชื่อนี้เพื่อกำหนดประเภทของคำสั่งที่สามารถปล่อยออกมาได้เมื่อสร้าง
รหัสการประกอบ
-mtune=ชื่อ
ระบุชื่อโปรเซสเซอร์เพื่อปรับแต่งประสิทธิภาพ รหัสจะถูกปรับ
ราวกับว่าตัวประมวลผลเป้าหมายเป็นประเภทที่ระบุในตัวเลือกนี้ แต่ยังคงใช้
คำสั่งที่เข้ากันได้กับโปรเซสเซอร์เป้าหมายที่ระบุโดยa -mcpu= ตัวเลือก นี้
ตัวเลือกไม่สามารถต่อท้ายด้วยตัวปรับแต่งคุณสมบัติ
-มีนาคม และ -mcpu ตัวปรับเปลี่ยนคุณสมบัติ
ตัวแก้ไขคุณสมบัติที่ใช้กับ -มีนาคม และ -mcpu สามารถเป็นอย่างใดอย่างหนึ่งต่อไปนี้:
ซีอาร์ซี เปิดใช้งานส่วนขยาย CRC
การเข้ารหัสลับ
เปิดใช้งานส่วนขยาย Crypto นี่หมายความว่าเปิดใช้งาน SIMD ขั้นสูงแล้ว
fp เปิดใช้งานคำแนะนำจุดลอยตัว
ซิด
เปิดใช้งานคำแนะนำ SIMD ขั้นสูง นี่หมายถึงคำแนะนำทศนิยมคือ
เปิดใช้งาน นี่เป็นค่าเริ่มต้นสำหรับค่าที่เป็นไปได้ทั้งหมดในปัจจุบันสำหรับตัวเลือก -มีนาคม และ
-mcpu=.
อแดปเทวา ศักดิ์สิทธิ์ Options
ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m ตัวเลือกที่กำหนดไว้สำหรับ Adapteva Epiphany:
-mhalf-reg-ไฟล์
อย่าจัดสรรการลงทะเบียนใด ๆ ในช่วง "r32"..."r63" ที่อนุญาตให้โค้ดทำงานบน
ฮาร์ดแวร์รุ่นต่างๆ ที่ไม่มีรีจิสเตอร์เหล่านี้
-mprefer-สั้น insn-regs
จัดสรรการลงทะเบียนที่อนุญาตการสร้างคำสั่งสั้นเป็นพิเศษ นี้สามารถ
ส่งผลให้จำนวนคำสั่งเพิ่มขึ้น ดังนั้นสิ่งนี้อาจลดหรือเพิ่มโดยรวม
ขนาดรหัส
-mbranch-ต้นทุน=NUM
กำหนดต้นทุนของสาขาไว้ที่ประมาณ NUM คำแนะนำ "ง่าย" ค่าใช้จ่ายนี้เป็นเพียง
heuristic และไม่รับประกันว่าจะให้ผลลัพธ์ที่สอดคล้องกันในรุ่นต่างๆ
-mcmove
เปิดใช้งานการสร้างการเคลื่อนไหวตามเงื่อนไข
-mnops=NUM
ปล่อยออกมา NUM NOPs ก่อนคำสั่งที่สร้างอื่น ๆ
-mno-soft-cmpsf
สำหรับการเปรียบเทียบจุดทศนิยมที่มีความแม่นยำเพียงจุดเดียว ให้ปล่อยคำสั่ง "fsub" และทดสอบ
ธง เร็วกว่าการเปรียบเทียบซอฟต์แวร์ แต่อาจได้ผลลัพธ์ที่ไม่ถูกต้อง
ต่อหน้า NaNs หรือเมื่อเปรียบเทียบตัวเลขเล็ก ๆ สองตัวนั้น
ความแตกต่างของพวกเขาจะถูกคำนวณเป็นศูนย์ ค่าเริ่มต้นคือ -msoft-cmpsfซึ่งการใช้งาน
การเปรียบเทียบซอฟต์แวร์ที่ช้ากว่า แต่เป็นไปตามมาตรฐาน IEEE
-mstack-ชดเชย=NUM
ตั้งค่าออฟเซ็ตระหว่างส่วนบนของสแต็กและตัวชี้สแต็ก เช่น ค่า8
หมายความว่าแปดไบต์ในช่วง "sp+0...sp+7" สามารถใช้โดยฟังก์ชันลีฟ
โดยไม่มีการจัดสรรสแต็ก ค่าอื่นที่ไม่ใช่ 8 or 16 ยังไม่ผ่านการทดสอบและไม่น่าจะ
งาน. โปรดทราบว่าตัวเลือกนี้จะเปลี่ยน ABI การคอมไพล์โปรแกรมด้วย a
สแต็กออฟเซ็ตที่แตกต่างจากไลบรารีที่ได้รับการคอมไพล์โดยทั่วไปไม่ได้
งาน. ตัวเลือกนี้จะมีประโยชน์หากคุณต้องการประเมินว่า stack offset ต่างกันหรือไม่
จะให้รหัสที่ดีกว่าแก่คุณ แต่จริง ๆ แล้วใช้ stack offset อื่นเพื่อสร้าง
โปรแกรมการทำงาน ขอแนะนำให้กำหนดค่า toolchain ด้วยค่าที่เหมาะสม
--with-stack-offset=NUM ตัวเลือก
-mno-round-ใกล้ที่สุด
ทำให้ตัวจัดกำหนดการถือว่าโหมดการปัดเศษถูกตั้งค่าเป็นการตัดทอน NS
ค่าเริ่มต้นคือ -mround-ใกล้ที่สุด.
-mlong-โทร
หากไม่ได้ระบุเป็นอย่างอื่นโดยแอตทริบิวต์ ถือว่าการเรียกทั้งหมดอาจอยู่นอกเหนือ
ช่วงออฟเซ็ตของคำสั่ง "b" / "bl" ดังนั้นจึงโหลดที่อยู่ของฟังก์ชัน
ลงในการลงทะเบียนก่อนทำการโทร (มิฉะนั้นโดยตรง) นี่คือค่าเริ่มต้น
-mshort-โทร
หากไม่ได้ระบุไว้เป็นอย่างอื่นโดยแอตทริบิวต์ ถือว่าการเรียกโดยตรงทั้งหมดอยู่ในช่วง
ของคำสั่ง "b" / "bl" ดังนั้น ให้ใช้คำแนะนำเหล่านี้สำหรับการโทรโดยตรง NS
ค่าเริ่มต้นคือ -mlong-โทร.
-msmall16
สมมติว่าสามารถโหลดที่อยู่เป็นค่า 16 บิตที่ไม่ได้ลงนาม สิ่งนี้ใช้ไม่ได้กับ
ฟังก์ชันที่อยู่ซึ่ง -mlong-โทร ความหมายมีผลใช้บังคับ
-mfp-โหมด=โหมด
ตั้งค่าโหมดปกติของหน่วยทศนิยม นี้กำหนดลอย-
โหมดจุดที่ให้ไว้และคาดว่าจะได้รับเมื่อเรียกใช้ฟังก์ชันและเวลากลับ การทำ
โหมดนี้ตรงกับโหมดที่คุณต้องการอย่างมากเมื่อเริ่มฟังก์ชั่นสามารถทำให้ .ของคุณ
โปรแกรมมีขนาดเล็กลงและเร็วขึ้นโดยหลีกเลี่ยงการสลับโหมดที่ไม่จำเป็น
โหมด สามารถตั้งค่าเป็นค่าใดค่าหนึ่งดังต่อไปนี้:
ผู้โทร
โหมดใดๆ ที่รายการฟังก์ชันนั้นใช้ได้ และจะคงไว้หรือคืนค่าเมื่อฟังก์ชัน
ส่งคืนและเมื่อเรียกใช้ฟังก์ชันอื่นๆ โหมดนี้มีประโยชน์สำหรับการคอมไพล์
ไลบรารีหรือหน่วยการคอมไพล์อื่น ๆ ที่คุณอาจต้องการรวมเข้าใน different
โปรแกรมที่มีโหมด FPU ที่มีอยู่แตกต่างกัน และความสะดวกในการ
ใช้ไฟล์อ็อบเจ็กต์ไฟล์เดียวที่เกินขนาดและความเร็วโอเวอร์เฮดสำหรับโหมดพิเศษใดๆ
สวิตช์ที่อาจจำเป็น เทียบกับสิ่งที่จำเป็นกับ more
ทางเลือกเฉพาะของโหมด FPU ที่มีอยู่
ตัด
นี่คือโหมดที่ใช้สำหรับการคำนวณจุดลอยตัวด้วยการตัดทอน (เช่น รอบ
ไปทางศูนย์) โหมดการปัดเศษ ซึ่งรวมถึงการแปลงจากจุดลอยตัวเป็น
จำนวนเต็ม.
ปัดเศษที่ใกล้ที่สุด
นี่คือโหมดที่ใช้สำหรับการคำนวณจุดลอยตัวด้วยการปัดเศษไปใกล้สุดหรือ-
แม้กระทั่งโหมดการปัดเศษ
int นี่คือโหมดที่ใช้ในการคำนวณจำนวนเต็มใน FPU เช่น integer
คูณหรือจำนวนเต็มคูณและสะสม
ค่าเริ่มต้นคือ -mfp-mode=ผู้โทร
-mnosplit-lohi
-mno-postinc
-mno-หลังการแก้ไข
การปรับแต่งการสร้างโค้ดที่ปิดใช้งานตามลำดับ การแยกการโหลดแบบ 32 บิต
การสร้างที่อยู่หลังการเพิ่มและการสร้างที่อยู่หลังการแก้ไข NS
ค่าเริ่มต้นคือ msplit-lohi, -mpost-อิงค์และ -mpost-แก้ไข.
-mnovect-ดับเบิ้ล
เปลี่ยนโหมด SIMD ที่ต้องการเป็น SImode ค่าเริ่มต้นคือ -mvect-ดับเบิ้ลซึ่งการใช้งาน
DImode เป็นโหมด SIMD ที่ต้องการ
-max-vect-align =NUM
การจัดตำแหน่งสูงสุดสำหรับประเภทโหมดเวกเตอร์ SIMD NUM อาจเป็น 4 หรือ 8 ค่าเริ่มต้นคือ
8. โปรดทราบว่านี่คือการเปลี่ยนแปลง ABI แม้ว่าอินเทอร์เฟซของฟังก์ชันไลบรารีจำนวนมากจะเป็น
ไม่ได้รับผลกระทบหากไม่ได้ใช้โหมดเวกเตอร์ SIMD ในตำแหน่งที่ส่งผลต่อขนาดและ/หรือ
การจัดตำแหน่งประเภทที่เกี่ยวข้อง
-msplit-vecmove-ต้น
แยกเวกเตอร์ย้ายเป็นการย้ายคำเดียวก่อนโหลดซ้ำ ตามทฤษฎีแล้วสิ่งนี้สามารถให้
การจัดสรรการลงทะเบียนที่ดีขึ้น แต่จนถึงขณะนี้ดูเหมือนว่าจะกลับกันโดยทั่วไป
-m1reg-reg
ระบุรีจิสเตอร์เพื่อเก็บค่าคงที่ -1 ซึ่งทำให้โหลดค่าลบเล็กน้อย
ค่าคงที่และบิตมาสก์บางตัวเร็วขึ้น ค่าที่อนุญาตสำหรับ reg เป็น r43 และ r63,
ซึ่งกำหนดให้ใช้ทะเบียนนั้นเป็นทะเบียนประจำ และ ไม่มีซึ่งหมายความว่าไม่
การลงทะเบียนใช้เพื่อจุดประสงค์นี้ ค่าเริ่มต้นคือ -m1reg-ไม่มี.
ARM Options
ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m มีการกำหนดตัวเลือกสำหรับสถาปัตยกรรม RISC Machines (ARM) ขั้นสูง:
-มาบิ=ชื่อ
สร้างรหัสสำหรับ ABI ที่ระบุ ค่าที่อนุญาตคือ: apcs-gnu, ที่ชิ้น, อ้ากก,
aapcs-ลินุกซ์ และ ฉันสบายดี.
-mapcs-เฟรม
สร้างสแต็กเฟรมที่สอดคล้องกับ ARM Procedure Call Standard for all
แม้ว่าจะไม่จำเป็นสำหรับการดำเนินการโค้ดอย่างถูกต้องก็ตาม
ระบุ -fomit-frame-ตัวชี้ ด้วยตัวเลือกนี้ทำให้สแต็กเฟรมไม่เป็น
สร้างขึ้นสำหรับการทำงานของใบ ค่าเริ่มต้นคือ -mno-apcs-เฟรม.
-มาพีซี
นี่คือคำพ้องความหมายสำหรับ -mapcs-เฟรม.
-mthumb-การทำงานร่วมกัน
สร้างรหัสที่รองรับการโทรระหว่างชุดคำสั่ง ARM และ Thumb
หากไม่มีตัวเลือกนี้ บนสถาปัตยกรรม pre-v5 ทั้งสองชุดคำสั่งจะไม่เป็น
ใช้ได้อย่างน่าเชื่อถือภายในโปรแกรมเดียว ค่าเริ่มต้นคือ -mno-thumb-การทำงานร่วมกันตั้งแต่เล็กน้อย
รหัสที่ใหญ่กว่าจะถูกสร้างขึ้นเมื่อ -mthumb-การทำงานร่วมกัน ระบุไว้ ในการกำหนดค่า AAPCS
ตัวเลือกนี้ไม่มีความหมาย
-mno-กำหนดการอารัมภบท
ป้องกันการเรียงลำดับใหม่ของคำสั่งในบทนำของฟังก์ชัน หรือการรวมของ
คำสั่งเหล่านั้นพร้อมคำแนะนำในเนื้อหาของฟังก์ชัน ซึ่งหมายความว่าทั้งหมด
ฟังก์ชั่นเริ่มต้นด้วยชุดคำสั่งที่รู้จัก (หรืออันที่จริงแล้วหนึ่งในตัวเลือก
จากคำนำหน้าฟังก์ชันชุดเล็ก ๆ น้อย ๆ) และข้อมูลนี้สามารถนำมาใช้เพื่อ
ระบุตำแหน่งเริ่มต้นของฟังก์ชันภายในโค้ดที่สั่งการได้ ค่าเริ่มต้นคือ
-msched-อารัมภบท.
-mfloat-abi=ชื่อ
ระบุ ABI ทศนิยมที่จะใช้ ค่าที่อนุญาตคือ: อ่อนนุ่ม, ซอฟท์เอฟพี และ
ยาก.
ระบุ อ่อนนุ่ม ทำให้ GCC สร้างเอาต์พุตที่มีการเรียกไลบรารีสำหรับ float-
การดำเนินงานจุด ซอฟท์เอฟพี อนุญาตให้สร้างรหัสโดยใช้ฮาร์ดแวร์จุดลอยตัว
แต่ยังคงใช้แบบแผนการโทรแบบซอฟต์โฟลต ยาก ช่วยให้
การสร้างคำสั่งแบบทศนิยม และใช้แบบแผนการเรียกเฉพาะ FPU
ค่าเริ่มต้นขึ้นอยู่กับการกำหนดค่าเป้าหมายเฉพาะ โปรดทราบว่าการลอยตัวอย่างหนัก
และ ABI แบบ soft-float ไม่รองรับลิงก์ คุณต้องคอมไพล์โปรแกรมทั้งหมดด้วย
ABI เดียวกัน และลิงก์กับชุดไลบรารีที่เข้ากันได้
-little-endian
สร้างโค้ดสำหรับโปรเซสเซอร์ที่ทำงานในโหมด little-endian นี่คือค่าเริ่มต้นสำหรับ
การกำหนดค่ามาตรฐานทั้งหมด
-mbig-endian
สร้างโค้ดสำหรับโปรเซสเซอร์ที่ทำงานในโหมด big-endian ค่าเริ่มต้นคือการรวบรวม
รหัสสำหรับโปรเซสเซอร์ little-endian
-mwords-ลิตเติ้ลเอนเดียน
ตัวเลือกนี้ใช้ได้เฉพาะเมื่อสร้างโค้ดสำหรับโปรเซสเซอร์ big-endian สร้าง
รหัสสำหรับลำดับคำ endian น้อย แต่ลำดับไบต์ endian ใหญ่ นั่นคือ ไบต์
ลำดับของแบบฟอร์ม 32107654. หมายเหตุ: ควรใช้ตัวเลือกนี้เฉพาะในกรณีที่คุณต้องการ
ความเข้ากันได้กับโค้ดสำหรับโปรเซสเซอร์ ARM ขนาดใหญ่ที่สร้างโดยเวอร์ชันของ
คอมไพเลอร์ก่อน 2.8 ตัวเลือกนี้เลิกใช้แล้ว
-มีนาคม=ชื่อ
ระบุชื่อของสถาปัตยกรรม ARM เป้าหมาย GCC ใช้ชื่อนี้เพื่อ
กำหนดประเภทของคำสั่งที่สามารถปล่อยออกมาได้เมื่อสร้างรหัสแอสเซมบลี นี้
สามารถใช้ตัวเลือกร่วมกับหรือแทนตัว -mcpu= ตัวเลือก. อนุญาตให้ทำได้
ชื่อคือ: อาร์มv2, อาร์มv2a, อาร์มv3, armv3m, อาร์มv4, armv4t, อาร์มv5, armv5t, armv5e,
armv5te, อาร์มv6, armv6j, armv6t2, armv6z, armv6zk, armv6-ม, อาร์มv7, armv7-ก, armv7-ร,
armv7-ม, armv7e-m armv8-ก, ARMV8-A+CRC, ฉันสบายดี, iwmmxt2, ep9312.
-มีนาคม = armv8-a + crc เปิดใช้งานการสร้างโค้ดสำหรับสถาปัตยกรรม ARMv8-A ร่วมกับ
ส่วนขยาย CRC32 ที่เป็นตัวเลือก
-march=เจ้าของภาษา ทำให้คอมไพเลอร์ตรวจหาสถาปัตยกรรมของ build โดยอัตโนมัติ
คอมพิวเตอร์. ในปัจจุบัน ฟีเจอร์นี้รองรับบน GNU/Linux เท่านั้น และไม่ทั้งหมด
สถาปัตยกรรมเป็นที่ยอมรับ หากการตรวจหาอัตโนมัติไม่สำเร็จ ตัวเลือกจะไม่มี
ผล
-mtune=ชื่อ
ตัวเลือกนี้ระบุชื่อของโปรเซสเซอร์ ARM เป้าหมายที่ GCC ควรปรับแต่ง
ประสิทธิภาพของรหัส สำหรับการใช้งาน ARM บางอย่างประสิทธิภาพที่ดีขึ้นสามารถทำได้
ได้โดยใช้ตัวเลือกนี้ ชื่อที่อนุญาตคือ: arm2, arm250, arm3, arm6,
arm60, arm600, arm610, arm620, arm7, แขน7m, แขน7d, แขน7dm, arm7di, แขน7dmi, arm70,
arm700, อาร์ม700i, arm710, แขน710c, arm7100, arm720, arm7500, แขน7500fe, แขน7tdmi,
arm7tdmi-s, แขน710t, แขน720t, แขน740t, แขนที่แข็งแรง, สตรองอาร์ม110, สตรองอาร์ม1100,
สตรองอาร์ม1110, arm8, arm810, arm9, ARM9E, arm920, แขน920t, แขน922t, arm946e-s,
arm966e-s, arm968e-s, arm926ej-s, แขน940t, แขน9tdmi, แขน10tdmi, แขน1020t, arm1026ej-s,
ARM10E, ARM1020E, ARM1022E, arm1136j-s, arm1136jf-s, เอ็มพีคอร์, เอ็มพีคอร์นอฟเอฟพี, แขน1156t2-s,
แขน1156t2f-s, arm1176jz-s, arm1176jzf-s, เยื่อหุ้มสมอง -A5, เยื่อหุ้มสมอง -A7, เยื่อหุ้มสมอง -A8, เยื่อหุ้มสมอง -A9,
เยื่อหุ้มสมอง -A15, เยื่อหุ้มสมอง -A53, คอร์เทกซ์-r4, คอร์เท็กซ์-r4f, คอร์เทกซ์-r5, คอร์เทกซ์-r7, คอร์เทกซ์-m4,
คอร์เทกซ์-m3, คอร์เทกซ์-m1, คอร์เทกซ์-m0, คอร์เทกซ์-m0plus, Marvell-pj4, เอ็กซ์สเกล, ฉันสบายดี, iwmmxt2,
ep9312, fa526, fa626, fa606te, fa626te, fmp626, fa726te.
-mtune=ทั่วไป-โค้ง ระบุว่า GCC ควรปรับแต่งประสิทธิภาพสำหรับการผสมผสานของ
โปรเซสเซอร์ภายในสถาปัตยกรรม โค้ง. จุดมุ่งหมายคือการสร้างโค้ดที่ทำงานได้ดีบน
โปรเซสเซอร์ที่ได้รับความนิยมสูงสุดในปัจจุบัน สมดุลระหว่างการเพิ่มประสิทธิภาพที่เป็นประโยชน์บางอย่าง
ซีพียูในช่วง และหลีกเลี่ยงข้อผิดพลาดด้านประสิทธิภาพของซีพียูอื่นๆ ผลกระทบของ
ตัวเลือกนี้อาจเปลี่ยนแปลงได้ในเวอร์ชัน GCC ในอนาคต เนื่องจากซีพียูรุ่นต่างๆ
-mtune=เจ้าของภาษา ทำให้คอมไพเลอร์ตรวจหา CPU ของคอมพิวเตอร์รุ่นโดยอัตโนมัติ ที่
ปัจจุบัน ฟีเจอร์นี้รองรับเฉพาะ GNU/Linux เท่านั้น และไม่ใช่ทุกสถาปัตยกรรม
ได้รับการยอมรับ หากการตรวจหาอัตโนมัติไม่สำเร็จ ตัวเลือกจะไม่มีผล
-mcpu=ชื่อ
ระบุชื่อของโปรเซสเซอร์ ARM เป้าหมาย GCC ใช้ชื่อนี้เพื่อให้ได้มา
ชื่อของสถาปัตยกรรม ARM เป้าหมาย (ราวกับว่าระบุโดย -มีนาคม) และโปรเซสเซอร์ ARM
ประเภทที่จะปรับแต่งประสิทธิภาพ (ราวกับว่าระบุโดย -mtune). ที่ตัวเลือกนี้
ใช้ร่วมกับ -มีนาคม or -mtune, ตัวเลือกเหล่านั้นมีความสำคัญเหนือ
ส่วนที่เหมาะสมของตัวเลือกนี้
ชื่อที่อนุญาตสำหรับตัวเลือกนี้จะเหมือนกับชื่อสำหรับ -mtune.
-mcpu=ทั่วไป-โค้ง ยังได้รับอนุญาตและเทียบเท่ากับ -มีนาคม=โค้ง
-mtune=ทั่วไป-โค้ง. ดู -mtune สำหรับข้อมูลเพิ่มเติม
-mcpu=เจ้าของภาษา ทำให้คอมไพเลอร์ตรวจหา CPU ของคอมพิวเตอร์รุ่นโดยอัตโนมัติ ที่
ปัจจุบัน ฟีเจอร์นี้รองรับเฉพาะ GNU/Linux เท่านั้น และไม่ใช่ทุกสถาปัตยกรรม
ได้รับการยอมรับ หากการตรวจหาอัตโนมัติไม่สำเร็จ ตัวเลือกจะไม่มีผล
-mfpu=ชื่อ
สิ่งนี้ระบุว่าฮาร์ดแวร์จุดลอยตัวใด (หรือการจำลองฮาร์ดแวร์) ที่พร้อมใช้งานบน
เป้าหมาย. ชื่อที่อนุญาตคือ: วีเอฟพี, VFPV3, vfpv3-fp16, VFPV3-D16, vfpv3-d16-fp16,
vfpv3xd, vfpv3xd-fp16, ธาตุนีอ็อน, นีออน-fp16, VFPV4, VFPV4-D16, fpv4-sp-d16, นีออน-vfpv4,
fp-armv8, นีออน-fp-armv8และ crypto-นีออน-fp-armv8.
If -msoft-ลอย ระบุ เป็นการระบุรูปแบบของค่าทศนิยม
หากฮาร์ดแวร์ทศนิยมที่เลือกมีส่วนขยาย NEON (เช่น -mfpu=ธาตุนีอ็อน),
โปรดทราบว่าการดำเนินการจุดลอยตัวไม่ได้ถูกสร้างขึ้นโดยการส่งผ่านเวกเตอร์อัตโนมัติของ GCC
เว้นแต่ -funsafe-คณิตศาสตร์-optimizations ระบุไว้ด้วย นี่เป็นเพราะฮาร์ดแวร์นีออน
ไม่ได้ใช้มาตรฐาน IEEE 754 อย่างเต็มที่สำหรับเลขทศนิยม (in
ค่าผิดปกติจะถือเป็นศูนย์) ดังนั้นการใช้คำสั่ง NEON อาจ
นำไปสู่การสูญเสียความแม่นยำ
-mfp16-รูปแบบ=ชื่อ
ระบุรูปแบบของประเภททศนิยมครึ่งความแม่นยำ "__fp16" อนุญาตให้ทำได้
ชื่อคือ ไม่มี, อีนี่และ ทางเลือก; ค่าเริ่มต้นคือ ไม่มีซึ่งในกรณีนี้ "__fp16"
ไม่ได้กำหนดประเภท
-mstruction-size-boundary=n
ขนาดของโครงสร้างและสหภาพทั้งหมดจะถูกปัดขึ้นเป็นทวีคูณของจำนวน
บิตที่กำหนดโดยตัวเลือกนี้ ค่าที่อนุญาตคือ 8, 32 และ 64 ค่าเริ่มต้น
แตกต่างกันไปสำหรับ toolchains ที่แตกต่างกัน สำหรับ Toolchain เป้าหมายของ COFF ค่าเริ่มต้นคือ
8. อนุญาตให้ใช้ค่า 64 ได้ก็ต่อเมื่อ ABI พื้นฐานรองรับเท่านั้น
การระบุจำนวนที่มากขึ้นสามารถผลิตโค้ดได้เร็วและมีประสิทธิภาพมากขึ้น แต่ก็สามารถทำได้เช่นกัน
เพิ่มขนาดของโปรแกรม ค่าต่างๆ อาจเข้ากันไม่ได้
โค้ดที่คอมไพล์ด้วยค่าเดียวไม่จำเป็นต้องคาดหวังให้ทำงานกับโค้ดหรือไลบรารี่
รวบรวมด้วยค่าอื่นหากพวกเขาแลกเปลี่ยนข้อมูลโดยใช้โครงสร้างหรือสหภาพแรงงาน
-มาบอร์-ออน-นอร์เทิร์น
สร้างการเรียกใช้ฟังก์ชัน "ยกเลิก" ที่ส่วนท้ายของฟังก์ชัน "noreturn" มันคือ
ดำเนินการหากฟังก์ชันพยายามส่งคืน
-mlong-โทร
-นาทีโทรยาว
บอกให้คอมไพเลอร์ทำการเรียกใช้ฟังก์ชันโดยโหลดที่อยู่ของ .ก่อน
ทำงานในรีจิสเตอร์แล้วทำการเรียกรูทีนย่อยบนรีจิสเตอร์นี้ นี้
จำเป็นต้องใช้สวิตช์หากฟังก์ชันเป้าหมายอยู่นอกการกำหนดแอดเดรส 64 เมกะไบต์
ช่วงของคำสั่งการเรียกรูทีนย่อยเวอร์ชัน offset
แม้ว่าสวิตช์นี้จะเปิดใช้งานอยู่ การเรียกใช้ฟังก์ชันบางรายการจะเปลี่ยนเป็นการเรียกแบบยาวไม่ได้
ฮิวริสติกคือฟังก์ชันสแตติก ฟังก์ชันที่มี โทรสั้น คุณลักษณะ,
ฟังก์ชันที่อยู่ภายในขอบเขตของa #ปรากมา no_long_calls คำสั่งและ
ฟังก์ชันที่มีการรวบรวมคำจำกัดความไว้แล้วในการรวบรวมปัจจุบัน
หน่วยจะไม่เปลี่ยนเป็นสายยาว ข้อยกเว้นของกฎข้อนี้คือข้อที่อ่อนแอ
นิยามฟังก์ชัน ฟังก์ชันกับ โทรยาว คุณลักษณะหรือ ส่วน คุณลักษณะ,
และหน้าที่ที่อยู่ในขอบเขตของa #ปรากมา long_calls คำสั่งอยู่เสมอ
กลายเป็นสายยาว
ฟีเจอร์นี้ไม่ได้เปิดใช้งานโดยค่าเริ่มต้น ระบุ -นาทีโทรยาว คืนค่า
พฤติกรรมเริ่มต้น เช่นเดียวกับการวางการเรียกใช้ฟังก์ชันภายในขอบเขตของa #ปรากมา
long_calls_off คำสั่ง สังเกตว่าสวิตช์เหล่านี้ไม่มีผลต่อการคอมไพเลอร์
สร้างรหัสเพื่อจัดการการเรียกใช้ฟังก์ชันผ่านพอยน์เตอร์ของฟังก์ชัน
-msingle-รูปฐาน
ถือว่าการลงทะเบียนที่ใช้สำหรับการกำหนดที่อยู่ PIC เป็นแบบอ่านอย่างเดียว แทนที่จะโหลดใน
บทนำสำหรับแต่ละหน้าที่ ระบบรันไทม์มีหน้าที่เริ่มต้นสิ่งนี้
ลงทะเบียนด้วยค่าที่เหมาะสมก่อนเริ่มดำเนินการ
-mpic-register=reg
ระบุการลงทะเบียนที่จะใช้สำหรับการกำหนดที่อยู่ PIC สำหรับเคสฐาน PIC มาตรฐาน the
ค่าเริ่มต้นจะเป็นการลงทะเบียนที่เหมาะสมซึ่งกำหนดโดยคอมไพเลอร์ สำหรับฐาน PIC เดียว
กรณีเริ่มต้นคือ R9 หากเป้าหมายเป็นแบบ EABI หรือเปิดใช้งานการตรวจสอบสแต็ก
มิฉะนั้นค่าเริ่มต้นคือ R10.
-mpoke-ฟังก์ชั่นชื่อ
เขียนชื่อของแต่ละฟังก์ชันลงในส่วนข้อความ นำหน้าฟังก์ชัน
อารัมภบท รหัสที่สร้างขึ้นจะคล้ายกับสิ่งนี้:
t0
.ascii "arm_poke_function_name", 0
.จัด
t1
.คำ 0xff000000 + (t1 - t0)
arm_poke_function_name
มูฟ ไอพี, sp
stmfd sp!, {fp, ip, lr, พีซี}
fp ย่อย, ip, #4
เมื่อดำเนินการ stack backtrace โค้ดสามารถตรวจสอบค่าของ "pc" ที่เก็บไว้ที่ "fp +
0" หากฟังก์ชันการติดตามดูที่ตำแหน่ง "pc - 12" และ 8 บิตบนสุดคือ
กำหนดแล้วเรารู้ว่ามีชื่อฟังก์ชั่นฝังอยู่ข้างหน้านี้
ตำแหน่งและมีความยาว "((pc[-3]) & 0xff000000)"
-นิ้วหัวแม่มือ
- มาร์ม
เลือกระหว่างการสร้างโค้ดที่รันในสถานะ ARM และ Thumb ค่าเริ่มต้นสำหรับ
การกำหนดค่าส่วนใหญ่คือการสร้างโค้ดที่รันในสถานะ ARM แต่ค่าดีฟอลต์
สามารถเปลี่ยนได้โดยกำหนดค่า GCC ด้วย --ด้วยโหมด=รัฐ กำหนดค่าตัวเลือก
-mtpcs-เฟรม
สร้างสแต็กเฟรมที่สอดคล้องกับ Thumb Procedure Call Standard for
ฟังก์ชั่นที่ไม่ใช่ใบไม้ทั้งหมด (ฟังก์ชันลีฟคือฟังก์ชันที่ไม่เรียกอย่างอื่น
ฟังก์ชัน.) ค่าเริ่มต้นคือ -mno-tpcs-เฟรม.
-mtpcs-ใบไม้กรอบ
สร้างสแต็กเฟรมที่สอดคล้องกับ Thumb Procedure Call Standard for
ฟังก์ชั่นใบทั้งหมด (ฟังก์ชันลีฟคือฟังก์ชันที่ไม่เรียกใช้ฟังก์ชันอื่น)
ค่าเริ่มต้นคือ -mno-apcs-ใบไม้กรอบ.
-mcallee-super-การทำงานร่วมกัน
ให้ฟังก์ชันที่มองเห็นได้จากภายนอกทั้งหมดในไฟล์ที่คอมไพล์ด้วยคำสั่ง ARM
ตั้งค่าส่วนหัวซึ่งจะเปลี่ยนเป็นโหมด Thumb ก่อนดำเนินการส่วนที่เหลือของฟังก์ชัน
ซึ่งช่วยให้สามารถเรียกฟังก์ชันเหล่านี้จากโค้ดที่ไม่ทำงานร่วมกันได้ ตัวเลือกนี้คือ
ไม่ถูกต้องในการกำหนดค่า AAPCS เนื่องจากเปิดใช้งานการทำงานร่วมกันโดยค่าเริ่มต้น
-mcaller-super-การทำงานร่วมกัน
อนุญาตให้เรียกใช้ผ่านพอยน์เตอร์ของฟังก์ชัน (รวมถึงฟังก์ชันเสมือน) เพื่อดำเนินการอย่างถูกต้อง
ไม่ว่าโค้ดเป้าหมายจะถูกคอมไพล์สำหรับการทำงานร่วมกันหรือไม่ก็ตาม
มีค่าใช้จ่ายเล็กน้อยในการดำเนินการตัวชี้ฟังก์ชันหากตัวเลือกนี้
เปิดใช้งาน. ตัวเลือกนี้ไม่ถูกต้องในการกำหนดค่า AAPCS เนื่องจากการทำงานร่วมกันคือ
เปิดใช้งานโดยค่าเริ่มต้น
-mtp=ชื่อ
ระบุรุ่นการเข้าถึงสำหรับตัวชี้ที่เก็บข้อมูลภายในเธรด รุ่นที่ถูกต้องคือ
อ่อนนุ่มซึ่งสร้างการเรียกไปที่ "__aeabi_read_tp" cp15ซึ่งดึงเธรด
ตัวชี้จาก "cp15" โดยตรง (รองรับในสถาปัตยกรรม arm6k) และ รถยนต์ซึ่ง
ใช้วิธีที่ดีที่สุดสำหรับโปรเซสเซอร์ที่เลือก ค่าเริ่มต้นคือ
รถยนต์.
-mtls ภาษา =ภาษาถิ่น
ระบุภาษาที่จะใช้สำหรับการเข้าถึงที่จัดเก็บในเครื่องของเธรด สอง ภาษาถิ่นเป็น
ได้รับการสนับสนุน---ละมังอาฟริกาหัวคล้ายวัว และ gnu2. ละมังอาฟริกาหัวคล้ายวัว ภาษาเลือกรูปแบบ GNU ดั้งเดิมสำหรับ
รองรับโมเดล TLS แบบไดนามิกทั้งในระดับท้องถิ่นและระดับโลก NS gnu2 ภาษาถิ่นเลือก GNU
แบบแผน descriptor ซึ่งให้ประสิทธิภาพที่ดีขึ้นสำหรับไลบรารีที่แบ่งใช้ GNU
แบบแผนคำอธิบายเข้ากันได้กับแบบแผนเดิมแต่ต้องการใหม่
แอสเซมเบลอร์ ลิงค์เกอร์ และการสนับสนุนไลบรารี โมเดล exec TLS เริ่มต้นและในเครื่องคือ
ไม่ได้รับผลกระทบจากตัวเลือกนี้และใช้รูปแบบเดิมเสมอ
-mword-ย้ายตำแหน่ง
สร้างเฉพาะการย้ายตำแหน่งที่แน่นอนในค่าขนาดคำ (เช่น R_ARM_ABS32) นี่คือ
เปิดใช้งานโดยค่าเริ่มต้นบนเป้าหมาย (uClinux, SymbianOS) ที่ตัวโหลดรันไทม์กำหนด
ข้อจำกัดนี้ และเมื่อ -fpic or -fPIC ระบุไว้
-mfix-cortex-m3-ldrd
คอร์คอร์เทกซ์-M3 บางคอร์อาจทำให้ข้อมูลเสียหายได้เมื่อมีคำสั่ง "ldrd" ด้วย
ใช้ปลายทางที่ทับซ้อนกันและการลงทะเบียนฐาน ตัวเลือกนี้หลีกเลี่ยงการสร้าง
คำแนะนำเหล่านี้ ตัวเลือกนี้จะเปิดใช้งานโดยค่าเริ่มต้นเมื่อ -mcpu=คอร์เทกซ์-m3 is
ระบุไว้
-munaligned-เข้าถึง
-mno-unaligned-เข้าถึง
เปิดใช้งาน (หรือปิดใช้งาน) การอ่านและการเขียนค่า 16 และ 32 บิตจากที่อยู่
ที่ไม่ได้จัดตำแหน่งแบบ 16 หรือ 32 บิต โดยค่าเริ่มต้นการเข้าถึงแบบไม่จัดแนวจะถูกปิดใช้งานสำหรับทุกคน
ก่อน ARMv6 และสถาปัตยกรรม ARMv6-M ทั้งหมด และเปิดใช้งานสำหรับสถาปัตยกรรมอื่นๆ ทั้งหมด ถ้า
ไม่ได้เปิดใช้การเข้าถึงแบบไม่จัดแนว ดังนั้นคำในโครงสร้างข้อมูลที่อัดแน่นจะเข้าถึงได้
ครั้งละหนึ่งไบต์
แอตทริบิวต์ ARM "Tag_CPU_unaligned_access" จะถูกตั้งค่าในไฟล์วัตถุที่สร้างขึ้น
เป็นจริงหรือเท็จ ขึ้นอยู่กับการตั้งค่าของตัวเลือกนี้ ถ้าไม่ตรง
เปิดใช้งานการเข้าถึงแล้ว สัญลักษณ์ตัวประมวลผลล่วงหน้า "__ARM_FEATURE_UNALIGNED" จะเป็น
ที่กำหนดไว้
-mneon-สำหรับ-64bits
เปิดใช้งานการใช้ Neon เพื่อจัดการการดำเนินการสเกลาร์ 64 บิต สิ่งนี้ถูกปิดใช้งานโดยค่าเริ่มต้น
เนื่องจากค่าใช้จ่ายในการย้ายข้อมูลจาก core register ไปยัง Neon นั้นสูง
-mrestrict-มัน
จำกัดการสร้างบล็อกไอทีให้เป็นไปตามกฎของ ARMv8 บล็อกไอทีสามารถ
มีคำสั่ง 16 บิตเพียงชุดเดียวจากชุดคำสั่งที่เลือก นี้
ตัวเลือกเปิดอยู่โดยค่าเริ่มต้นสำหรับโหมดนิ้วหัวแม่มือ ARMv8
AVR Options
ตัวเลือกเหล่านี้ถูกกำหนดไว้สำหรับการใช้งาน AVR:
-mmcu=มจร
ระบุสถาปัตยกรรมชุดคำสั่ง Atmel AVR (ISA) หรือประเภท MCU
ค่าเริ่มต้นสำหรับตัวเลือกนี้คือ@tie{}"avr2"
GCC รองรับอุปกรณ์ AVR และ ISA ต่อไปนี้:
"เอวีอาร์2"
อุปกรณ์ "คลาสสิก" ที่มีหน่วยความจำโปรแกรมสูงสุด 8@tie{}KiB มจร@tie{}= "attiny22",
"attiny26", "at90c8534", "at90s2313", "at90s2323", "at90s2333", "at90s2343",
"at90s4414", "at90s4433", "at90s4434", "at90s8515", "at90s8535".
"เอวีอาร์25"
อุปกรณ์ "คลาสสิก" ที่มีหน่วยความจำโปรแกรมสูงสุด 8@tie{}KiB และมี "MOVW"
คำแนะนำ. มจร@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"
"เอวีอาร์3"
อุปกรณ์ "คลาสสิก" ที่มีหน่วยความจำโปรแกรม 16@tie{}KiB สูงสุด 64@tie{}KiB
มจร@tie{}= "at43usb355", "at76c711"
"เอวีอาร์31"
อุปกรณ์ "คลาสสิก" ที่มีหน่วยความจำโปรแกรม 128@tie{}KiB มจร@tie{}= "atmega103",
"at43usb320"
"เอวีอาร์35"
อุปกรณ์ "คลาสสิก" ที่มี 16@tie{}KiB สูงสุด 64@tie{}KiB ของหน่วยความจำโปรแกรมและ
คำแนะนำ "MOVW" มจร@tie{}= "ata5505", "atmega16u2", "atmega32u2",
"atmega8u2", "attiny1634", "attiny167", "at90usb162", "at90usb82"
"เอวีอาร์4"
อุปกรณ์ "ปรับปรุง" ที่มีหน่วยความจำโปรแกรมสูงสุด 8@tie{}KiB มจร@tie{}= "ata6285",
"ata6286", "atmega48", "atmega48a", "atmega48p", "atmega48pa", "atmega8",
"atmega8a", "atmega8hva", "atmega8515", "atmega8535", "atmega88", "atmega88a",
"atmega88p", "atmega88pa", "at90pwm1", "at90pwm2", "at90pwm2b", "at90pwm3",
"at90pwm3b", "at90pwm81"
"เอวีอาร์5"
อุปกรณ์ "ปรับปรุง" ที่มีหน่วยความจำโปรแกรม 16@tie{}KiB สูงสุด 64@tie{}KiB
มจร@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"
"เอวีอาร์51"
อุปกรณ์ "ปรับปรุง" ที่มีหน่วยความจำโปรแกรม 128@tie{}KiB มจร@tie{}= "atmega128",
"atmega128a", "atmega128rfa1", "atmega1280", "atmega1281", "atmega1284",
"atmega1284p", "at90can128", "at90usb1286", "at90usb1287".
"เอวีอาร์6"
อุปกรณ์ "ปรับปรุง" ด้วยพีซี 3 ไบต์ เช่น มีมากกว่า 128@tie{}KiB ของโปรแกรม
หน่วยความจำ มจร@tie{}= "atmega2560", "atmega2561"
"avrxmega2"
อุปกรณ์ "XMEGA" ที่มีหน่วยความจำโปรแกรมมากกว่า 8@tie{}KiB และสูงสุด 64@tie{}KiB ของหน่วยความจำโปรแกรม
มจร@tie{}= "atmxt112sl", "atmxt224", "atmxt224e", "atmxt336s", "atxmega16a4",
"atxmega16a4u", "atxmega16c4", "atxmega16d4", "atxmega16x1", "atxmega32a4",
"atxmega32a4u", "atxmega32c4", "atxmega32d4", "atxmega32e5", "atxmega32x1".
"avrxmega4"
อุปกรณ์ "XMEGA" ที่มีมากกว่า 64@tie{}KiB และสูงสุด 128@tie{}KiB ของโปรแกรม
หน่วยความจำ มจร@tie{}= "atxmega64a3", "atxmega64a3u", "atxmega64a4u", "atxmega64b1",
"atxmega64b3", "atxmega64c3", "atxmega64d3", "atxmega64d4".
"avrxmega5"
อุปกรณ์ "XMEGA" ที่มีมากกว่า 64@tie{}KiB และสูงสุด 128@tie{}KiB ของโปรแกรม
หน่วยความจำและ RAM มากกว่า 64@tie{}KiB ของ RAM มจร@tie{}= "atxmega64a1",
"atxmega64a1u"
"avrxmega6"
อุปกรณ์ "XMEGA" ที่มีหน่วยความจำโปรแกรมมากกว่า 128@tie{}KiB มจร@ผูก{}=
"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{}KiB ของ RAM มจร@tie{}= "atxmega128a1", "atxmega128a1u", "atxmega128a4u"
"เอวีอาร์1"
ISA นี้ใช้งานโดยแกน AVR ขั้นต่ำและรองรับแอสเซมเบลอร์เท่านั้น
มจร@tie{}= "attiny11", "attiny12", "attiny15", "attiny28", "at90s1200"
-สะสม-args
รวบรวมอาร์กิวเมนต์ของฟังก์ชันขาออกและรับ/ปล่อยพื้นที่สแต็กที่จำเป็นสำหรับ
อาร์กิวเมนต์ของฟังก์ชันขาออกครั้งเดียวในบทนำ/บทส่งท้ายของฟังก์ชัน หากไม่มีตัวเลือกนี้
อาร์กิวเมนต์ขาออกจะถูกผลักก่อนเรียกใช้ฟังก์ชันและเปิดขึ้นในภายหลัง
การเปิดอาร์กิวเมนต์หลังจากการเรียกใช้ฟังก์ชันอาจมีราคาแพงใน AVR ดังนั้น
การสะสมพื้นที่สแต็กอาจนำไปสู่ไฟล์เรียกทำงานที่มีขนาดเล็กลงเพราะจำเป็นต้องมีอาร์กิวเมนต์
จะไม่ถูกลบออกจากสแต็กหลังจากการเรียกใช้ฟังก์ชันดังกล่าว
ตัวเลือกนี้อาจทำให้ขนาดโค้ดลดลงสำหรับฟังก์ชันที่ทำการโทรไปยัง . หลายครั้ง
ฟังก์ชันที่รับอาร์กิวเมนต์บนสแต็กเช่นการเรียกใช้ฟังก์ชันที่เหมือน printf
-mbranch-ต้นทุน=ราคา
กำหนดต้นทุนสาขาสำหรับคำสั่งสาขาแบบมีเงื่อนไขเป็น ราคา. ค่าที่สมเหตุสมผล
for ราคา เป็นจำนวนเต็มขนาดเล็กไม่เป็นลบ ต้นทุนสาขาเริ่มต้นคือ 0
-mcall-อารัมภบท
บทนำของฟังก์ชัน/บทส่งท้ายถูกขยายเป็นการเรียกไปยังรูทีนย่อยที่เหมาะสม รหัส
ขนาดมีขนาดเล็กลง
-มิ้นต์8
สมมติว่า "int" เป็นจำนวนเต็ม 8 บิต สิ่งนี้มีผลกับขนาดของทุกประเภท: "ถ่าน" คือ1
ไบต์ "int" คือ 1 ไบต์ "long" คือ 2 ไบต์และ "long long" คือ 4 ไบต์ โปรด
โปรดทราบว่าตัวเลือกนี้ไม่สอดคล้องกับมาตรฐาน C แต่ส่งผลให้มีขนาดเล็กลง
ขนาดรหัส
-mno-ขัดจังหวะ
รหัสที่สร้างขึ้นเข้ากันไม่ได้กับการขัดจังหวะของฮาร์ดแวร์ ขนาดรหัสมีขนาดเล็กลง
-mrelax
ลองเปลี่ยนการตอบกลับ "CALL" คำสั่ง "JMP" โดยคำสั่ง "RCALL" ที่สั้นกว่า “อาร์เจเอ็มพี”
คำแนะนำถ้ามี การตั้งค่า "-mrelax" เพียงเพิ่มตัวเลือก "--relax" ให้กับ
บรรทัดคำสั่งของตัวเชื่อมโยงเมื่อเรียกตัวเชื่อมโยง
ตัวเชื่อมโยงดำเนินการผ่อนคลายการกระโดดเพราะไม่รู้จักการชดเชยการกระโดดมาก่อน
รหัสตั้งอยู่ ดังนั้นรหัสแอสเซมเบลอร์ที่สร้างโดยคอมไพเลอร์จึงเหมือนกัน
แต่คำแนะนำในไฟล์สั่งการอาจแตกต่างจากคำแนะนำในแอสเซมเบลอร์
รหัส.
ต้องเปิดการผ่อนคลายหากต้องการสตับลิงเกอร์ ดูหัวข้อ "EIND" และ
ต้นขั้วลิงเกอร์ด้านล่าง
-msp8
ปฏิบัติต่อการลงทะเบียนตัวชี้สแต็กเป็นรีจิสเตอร์ 8 บิต กล่าวคือ ถือว่าไบต์สูงของ
ตัวชี้สแต็กเป็นศูนย์ โดยทั่วไป คุณไม่จำเป็นต้องตั้งค่าตัวเลือกนี้ด้วยมือ
ตัวเลือกนี้ใช้ภายในโดยคอมไพเลอร์เพื่อเลือกและสร้าง multilibs for
สถาปัตยกรรม "avr2" และ "avr25" สถาปัตยกรรมเหล่านี้ผสมผสานอุปกรณ์ที่มีและไม่มี
"เอสพีเอช". สำหรับการตั้งค่าอื่นที่ไม่ใช่ "-mmcu=avr2" หรือ "-mmcu=avr25" ไดรเวอร์คอมไพเลอร์
จะเพิ่มหรือลบตัวเลือกนี้ออกจากบรรทัดคำสั่งของคอมไพเลอร์ที่เหมาะสมเพราะ
คอมไพเลอร์จะรู้ว่าอุปกรณ์หรือสถาปัตยกรรมมีตัวชี้สแต็ก 8 บิตหรือไม่
ไม่มีการลงทะเบียน "SPH" หรือไม่
-mstrit-X
ใช้การลงทะเบียนที่อยู่ "X" ในลักษณะที่ฮาร์ดแวร์เสนอ ซึ่งหมายความว่า "X" คือ
ใช้เฉพาะในการกำหนดแอดเดรสทางอ้อม หลังการเพิ่ม หรือก่อนการลด
หากไม่มีตัวเลือกนี้ การลงทะเบียน "X" อาจใช้ในลักษณะเดียวกับ "Y" หรือ "Z" ซึ่ง
จากนั้นจะถูกจำลองโดยคำแนะนำเพิ่มเติม ตัวอย่างเช่น การโหลดค่าด้วย
"X+const" ที่มี "const < 64" ที่ไม่ใช่ค่าลบเล็กน้อยในการลงทะเบียน Rn is
ทำหน้าที่เป็น
adiw r26, const ; X += ค่าคงที่
หืม , NS ; = *X
sbiw r26, const ; X -= คงที่
-mtiny-กอง
เปลี่ยนเฉพาะ 8@tie{}บิตที่ต่ำกว่าของตัวชี้สแต็กเท่านั้น
-Waddr-พื้นที่แปลง
คำเตือนเกี่ยวกับการแปลงระหว่างช่องว่างที่อยู่ในกรณีที่ที่อยู่ผลลัพธ์
ไม่มีพื้นที่ว่างในพื้นที่ที่อยู่ที่เข้ามา
"EIND" และอุปกรณ์ที่มีแฟลชมากกว่า 128 Ki Bytes
พอยน์เตอร์ในการใช้งานมีความกว้าง 16@tie{}บิต ที่อยู่ของฟังก์ชันหรือป้ายกำกับ
ถูกแสดงเป็นที่อยู่ของคำเพื่อให้การข้ามและการเรียกโดยอ้อมสามารถกำหนดเป้าหมายรหัสใด ๆ ได้
ที่อยู่ในช่วง 64@tie{}Ki คำ
เพื่ออำนวยความสะดวกในการข้ามไปยังอุปกรณ์ที่มีมากกว่า 128@tie{}Ki ไบต์ของ
พื้นที่หน่วยความจำของโปรแกรมมีการลงทะเบียนฟังก์ชั่นพิเศษที่เรียกว่า "EIND" ที่ทำหน้าที่เป็น
ส่วนที่สำคัญที่สุดของที่อยู่เป้าหมายเมื่อคำสั่ง "EICALL" หรือ "EIJMP" เป็น
มือสอง
การข้ามและการเรียกทางอ้อมบนอุปกรณ์เหล่านี้ได้รับการจัดการดังนี้โดยคอมไพเลอร์และ are
ภายใต้ข้อจำกัดบางประการ:
· คอมไพเลอร์ไม่เคยตั้งค่า "EIND"
· คอมไพเลอร์ใช้ "EIND" โดยปริยายในคำสั่ง "EICALL"/"EIJMP" หรืออาจอ่านได้
"EIND" โดยตรงเพื่อจำลองการโทร/กระโดดโดยอ้อมโดยใช้ "RET"
คำแนะนำ.
· คอมไพเลอร์ถือว่า "EIND" ไม่เคยเปลี่ยนแปลงระหว่างรหัสเริ่มต้นหรือระหว่าง
แอปพลิเคชัน. โดยเฉพาะอย่างยิ่ง "EIND" จะไม่ถูกบันทึก/กู้คืนในฟังก์ชันหรือขัดจังหวะ
อารัมภบท/บทส่งท้ายบริการตามปกติ
· สำหรับการเรียกใช้ฟังก์ชันทางอ้อมและ goto ที่คำนวณ ตัวเชื่อมโยงจะสร้าง ไม่สมบูรณ์. สตับ
เป็นแผ่นกระโดดที่บางครั้งเรียกว่า แทรมโพลีน. ดังนั้นการโทรทางอ้อม/กระโดดข้ามไปที่
ต้นขั้วดังกล่าว ต้นขั้วมีการข้ามไปยังที่อยู่ที่ต้องการโดยตรง
· ต้องเปิดการคลายตัวของลิงเกอร์เพื่อให้ตัวเชื่อมโยงสร้างส่วนท้าย
ถูกต้องตามสถานการณ์ทั้งหมด ดูตัวเลือกคอมไพเลอร์ "-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" ก่อน เช่น by
หมายถึงรหัสเริ่มต้นที่อยู่ในส่วน ".init3" รหัสดังกล่าวทำงานก่อน
รหัสเริ่มต้นทั่วไปที่เริ่มต้น RAM และเรียกตัวสร้าง แต่หลังจากบิตของ
รหัสเริ่มต้นจาก AVR-LibC ที่ตั้งค่า "EIND" เป็นเซ็กเมนต์ที่ตารางเวกเตอร์คือ
ที่ตั้งอยู่
#รวม
โมฆะคง
__attribute__((section(".init3"),เปล่า,ใช้แล้ว,no_instrument_function))
init3_set_eind (เป็นโมฆะ)
{
__asm ระเหย ("ldi r24,pm_hh8(__trampolines_start)\n\t"
"ออก %i0,r24" :: "n" (&EIND) : "r24","memory");
}
สัญลักษณ์ "__trampolines_start" ถูกกำหนดไว้ในสคริปต์ตัวเชื่อมโยง
· ตัวเชื่อมโยงถูกสร้างขึ้นโดยอัตโนมัติโดยตัวเชื่อมโยงหากสองเงื่อนไขต่อไปนี้คือ
พบกับ:
-
(ย่อจาก สร้าง ไม่สมบูรณ์) เช่นนั้น:
LDI r24, lo8(gs( ))
LDI r25, hi8(gs( ))
-
ด้านนอก ส่วนที่มีต้นขั้วอยู่
· คอมไพเลอร์ปล่อยตัวดัดแปลง "gs" ดังกล่าวสำหรับป้ายกำกับโค้ดในสถานการณ์ต่อไปนี้:
-
-
- -mcall-อารัมภบท>
ตัวเลือกบรรทัดคำสั่ง
-
ตารางที่คุณสามารถระบุ -fno-กระโดดตาราง ตัวเลือกบรรทัดคำสั่ง
-
-
· ข้ามไปยังที่อยู่ที่ไม่ใช่สัญลักษณ์เหมือนเช่น ไม่ สนับสนุน:
int หลัก (เป็นโมฆะ)
{
/* เรียกฟังก์ชันที่คำแอดเดรส 0x2 */
ผลตอบแทน ((int(*)(เป็นโมฆะ)) 0x2)();
}
จะต้องตั้งค่าต้นขั้วแทน กล่าวคือ ฟังก์ชั่นต้องถูกเรียกผ่านสัญลักษณ์
("func_4" ในตัวอย่าง):
int หลัก (เป็นโมฆะ)
{
extern int func_4 (เป็นโมฆะ);
/* เรียกฟังก์ชันตามที่อยู่ไบต์ 0x4 */
กลับ 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" ลงทะเบียนด้วยศูนย์
· ถ้า AVR ที่มีชื่อ ที่ตั้ง ช่องว่างที่ชื่อว่า ที่อยู่ ช่องว่าง นอกเหนือจากทั่วไปหรือ "__flash" is
ใช้แล้ว "RAMPZ" จะถูกตั้งค่าตามต้องการก่อนดำเนินการ
· หากอุปกรณ์รองรับ RAM ที่ใหญ่กว่า 64@tie{KiB} และคอมไพเลอร์จำเป็นต้องเปลี่ยน
"RAMPZ" เพื่อดำเนินการให้สำเร็จ "RAMPZ" จะถูกรีเซ็ตเป็นศูนย์หลังการดำเนินการ
· หากอุปกรณ์มาพร้อมกับการลงทะเบียน "RAMP" เฉพาะ อารัมภบท/บทส่งท้ายของ ISR
บันทึก/กู้คืน SFR นั้นและเริ่มต้นด้วยศูนย์ในกรณีที่รหัส ISR อาจ
(โดยปริยาย) ใช้มัน
· GCC ไม่รองรับ RAM ที่ใหญ่กว่า 64@tie{KiB} สำหรับเป้าหมาย AVR ถ้าคุณใช้
แอสเซมเบลอร์แบบอินไลน์เพื่ออ่านจากตำแหน่งที่อยู่นอกช่วงที่อยู่ 16 บิตและการเปลี่ยนแปลง
หนึ่งในการลงทะเบียน "RAMP" คุณต้องรีเซ็ตเป็นศูนย์หลังจากการเข้าถึง
มาโคร AVR ในตัว
GCC กำหนดมาโครในตัวหลายตัวเพื่อให้รหัสผู้ใช้สามารถทดสอบการมีอยู่หรือ
ไม่มีคุณสมบัติ มาโครในตัวต่อไปนี้เกือบทั้งหมดอนุมานจากอุปกรณ์
ความสามารถและถูกกระตุ้นโดยตัวเลือกบรรทัดคำสั่ง "-mmcu="
สำหรับมาโครในตัวที่เจาะจง AVR มากขึ้น ดูที่ AVR ที่มีชื่อ ที่ตั้ง Spaces และ AVR Built-in
ฟังก์ชั่น.
"__AVR_ARCH__"
มาโครบิวด์อินที่แก้ไขเป็นตัวเลขทศนิยมที่ระบุสถาปัตยกรรมและ
ขึ้นอยู่กับ "-mmcu=เอ็มซียู" ตัวเลือก. ค่าที่เป็นไปได้คือ:
2, 25, 3, 31, 35, 4, 5, 51, 6, 102, 104, 105, 106, 107
for มจร="avr2", "avr25", "avr3", "avr31", "avr35", "avr4", "avr5", "avr51", "avr6",
"avrxmega2", "avrxmega4", "avrxmega5", "avrxmega6", "avrxmega7" ตามลำดับ ถ้า มจร
ระบุอุปกรณ์ มาโครในตัวนี้ถูกตั้งค่าตามนั้น ตัวอย่างเช่น กับ
"-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 Rน,ซี" และ "ELPM Rน,Z+" คำแนะนำ
"__AVR_HAVE_MOVW__"
อุปกรณ์มีคำสั่ง "MOVW" เพื่อดำเนินการย้าย register-register 16 บิต
"__AVR_HAVE_LPMX__"
อุปกรณ์มี "LPM Rน,ซี" และ "LPM Rน,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{}KiB ของหน่วยความจำโปรแกรม
"__AVR_HAVE_8BIT_SP__"
"__AVR_HAVE_16BIT_SP__"
รีจิสเตอร์สแต็กพอยน์เตอร์ (SP) จะถือว่าเป็นรีจิสเตอร์แบบ 8 บิตตามลำดับ 16 บิตโดย
คอมไพเลอร์ คำจำกัดความของมาโครเหล่านี้ได้รับผลกระทบจาก "-mtiny-stack"
"__AVR_HAVE_SPH__"
"__AVR_SP8__"
อุปกรณ์มีการลงทะเบียนฟังก์ชันพิเศษ SPH (ส่วนสูงของตัวชี้สแต็ก) หรือ has
ตัวชี้สแต็ก 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 บิตเนื่องจาก a
ข้อผิดพลาดของฮาร์ดแวร์ คำแนะนำในการข้ามคือ "SBRS", "SBRC", "SBIS", "SBIC" และ "CPSE"
มาโครที่สองถูกกำหนดไว้ก็ต่อเมื่อตั้งค่า "__AVR_HAVE_JMP_CALL__" ด้วย
"__AVR_SFR_OFFSET__=ชดเชย"
คำแนะนำที่สามารถระบุการลงทะเบียนฟังก์ชันพิเศษของ I/O ได้โดยตรงเช่น "IN"
"ออก", "SBI" ฯลฯ อาจใช้ที่อยู่อื่นเสมือนกับคำสั่งที่ส่งถึง
เข้าถึง RAM เช่น "LD" หรือ "STS" ออฟเซ็ตนี้ขึ้นอยู่กับสถาปัตยกรรมของอุปกรณ์และมี
ให้ลบออกจากที่อยู่ RAM เพื่อรับที่อยู่ I/O@tie{} ตามลำดับ
"__WITH_AVRLIBC__"
คอมไพเลอร์ได้รับการกำหนดค่าให้ใช้ร่วมกับ AVR-Libc ดู
"--with-avrlibc" กำหนดค่าตัวเลือก
Blackfin Options
-mcpu=ซีพียู[-การตรวจทาน]
ระบุชื่อของตัวประมวลผล 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.
ตัวเลือก การตรวจทาน ระบุการแก้ไขซิลิกอนของเป้าหมาย Blackfin
โปรเซสเซอร์ มีการเปิดใช้งานวิธีแก้ไขปัญหาชั่วคราวสำหรับการแก้ไขซิลิคอนเป้าหมาย
If การตรวจทาน is ไม่มีไม่มีการเปิดใช้วิธีแก้ปัญหา ถ้า การตรวจทาน is ใดทั้งหมด
เปิดใช้งานวิธีแก้ปัญหาสำหรับโปรเซสเซอร์เป้าหมาย แมโคร "__SILICON_REVISION__"
ถูกกำหนดให้เป็นเลขฐานสิบหกสองหลักแทนตัวเลขหลักและรองใน
การแก้ไขซิลิกอน ถ้า การตรวจทาน is ไม่มีไม่ได้กำหนด "__SILICON_REVISION__"
If การตรวจทาน is ใด, "__SILICON_REVISION__" ถูกกำหนดให้เป็น 0xffff ถ้านี้
ไม่จำเป็น การตรวจทาน ไม่ได้ใช้ GCC จะถือว่าการแก้ไขซิลิกอนล่าสุดที่รู้จักของ
โปรเซสเซอร์ Blackfin เป้าหมาย
GCC กำหนดมาโครตัวประมวลผลล่วงหน้าสำหรับตัวระบุ ซีพียู. สำหรับ bfin-เอลฟ์ ห่วงโซ่เครื่องมือ,
ตัวเลือกนี้ทำให้ฮาร์ดแวร์ BSP ที่จัดเตรียมโดย libgloss เชื่อมโยงใน if -msim is
ไม่ให้.
หากไม่มีตัวเลือกนี้ bf532 ถูกใช้เป็นตัวประมวลผลโดยค่าเริ่มต้น
โปรดทราบว่าการสนับสนุนสำหรับ bf561 ไม่สมบูรณ์ สำหรับ bf561, มาโครตัวประมวลผลล่วงหน้าเท่านั้นคือ
ที่กำหนดไว้
-msim
ระบุว่าโปรแกรมจะทำงานบนเครื่องจำลอง สิ่งนี้ทำให้เกิดเครื่องจำลอง
BSP ที่จัดเตรียมโดย libgloss ที่จะเชื่อมโยงเข้ามา ตัวเลือกนี้มีผลเฉพาะสำหรับ bfin-เอลฟ์
ห่วงโซ่เครื่องมือ ตัวเลือกอื่นๆ เช่น -middle-shared-library และ -mfdpic, หมายถึง
-msim.
-momit-leaf-frame-ตัวชี้
อย่าเก็บตัวชี้เฟรมไว้ในรีจิสเตอร์สำหรับฟังก์ชันลีฟ สิ่งนี้จะหลีกเลี่ยง
คำแนะนำในการบันทึก ตั้งค่า และกู้คืนตัวชี้เฟรม และทำการลงทะเบียนพิเศษ
ที่มีอยู่ในฟังก์ชั่นใบ ทางเลือก -fomit-frame-ตัวชี้ ถอดกรอบออก
ตัวชี้สำหรับฟังก์ชันทั้งหมด ซึ่งอาจทำให้การดีบักยากขึ้น
-mspecld-ความผิดปกติ
เมื่อเปิดใช้งาน คอมไพเลอร์จะทำให้แน่ใจว่าโค้ดที่สร้างขึ้นไม่มี
โหลดเก็งกำไรหลังจากคำแนะนำการกระโดด หากใช้ตัวเลือกนี้
กำหนด "__WORKAROUND_SPECULATIVE_LOADS" แล้ว
-mno-specld-ความผิดปกติ
อย่าสร้างโค้ดพิเศษเพื่อป้องกันไม่ให้เกิดการโหลดแบบคาดเดา
-mcsync-ความผิดปกติ
เมื่อเปิดใช้งาน คอมไพเลอร์จะทำให้แน่ใจว่าโค้ดที่สร้างขึ้นไม่มี CSYNC หรือ
คำแนะนำ SSYNC เร็วเกินไปหลังจากกิ่งแบบมีเงื่อนไข หากใช้ตัวเลือกนี้
กำหนด "__WORKAROUND_SPECULATIVE_SYNCS" แล้ว
-mno-csync-ความผิดปกติ
อย่าสร้างโค้ดพิเศษเพื่อป้องกันไม่ให้คำสั่ง CSYNC หรือ SSYNC เกิดขึ้นด้วย
ไม่นานหลังจากกิ่งแบบมีเงื่อนไข
-mlow-64k
เมื่อเปิดใช้งานคอมไพเลอร์จะมีอิสระที่จะใช้ประโยชน์จากความรู้ที่ว่าทั้งหมด
โปรแกรมพอดีกับหน่วยความจำ 64k ที่ต่ำ
-mno-ต่ำ-64k
สมมติว่าโปรแกรมมีขนาดใหญ่โดยพลการ นี่คือค่าเริ่มต้น
-mstack-ตรวจสอบ-l1
ทำการตรวจสอบสแต็คโดยใช้ข้อมูลที่ใส่ลงในหน่วยความจำ L1 scratchpad โดย uClinux
เมล็ด
-middle-shared-library
สร้างรหัสที่รองรับไลบรารีที่แชร์ผ่านวิธีรหัสไลบรารี สิ่งนี้ทำให้
สำหรับดำเนินการในสถานที่และไลบรารีที่ใช้ร่วมกันในสภาพแวดล้อมที่ไม่มีหน่วยความจำเสมือน
การจัดการ. ตัวเลือกนี้หมายถึง -fPIC. กับ bfin-เอลฟ์ เป้าหมาย ตัวเลือกนี้หมายถึง
-msim.
-mno-id-shared-library
สร้างรหัสที่ไม่ถือว่ามีการใช้ไลบรารีที่ใช้ร่วมกันแบบ ID นี่คือ
ค่าเริ่มต้น
-mleaf-id-shared-library
สร้างรหัสที่รองรับไลบรารีที่แชร์ผ่านวิธีรหัสห้องสมุด แต่ถือว่า
ว่าไลบรารี่หรือไฟล์สั่งการนี้จะไม่เชื่อมโยงกับไลบรารี ID อื่นที่แชร์
ที่ช่วยให้คอมไพเลอร์ใช้โค้ดที่เร็วขึ้นสำหรับการข้ามและการโทร
-mno-leaf-id-shared-library
อย่าคิดเอาเองว่าโค้ดที่คอมไพล์จะไม่เชื่อมโยงกับไลบรารี่ที่ใช้ร่วมกันของ ID
รหัสที่ช้าลงถูกสร้างขึ้นสำหรับการข้ามและการโทร
-msshared-library-id=n
ระบุหมายเลขประจำตัวของไลบรารีที่ใช้ร่วมกันแบบอิง ID ที่กำลังคอมไพล์
การระบุค่า 0 จะสร้างโค้ดที่กะทัดรัดยิ่งขึ้น ระบุค่าอื่น ๆ กองกำลัง
การจัดสรรหมายเลขนั้นให้กับห้องสมุดปัจจุบัน แต่ไม่มีพื้นที่หรือเวลาอีกต่อไป
มีประสิทธิภาพมากกว่าการละเว้นตัวเลือกนี้
-msep-ข้อมูล
สร้างรหัสที่อนุญาตให้ส่วนข้อมูลอยู่ในพื้นที่ต่าง ๆ ของหน่วยความจำ
จากส่วนข้อความ ซึ่งช่วยให้ดำเนินการในสถานที่ในสภาพแวดล้อมโดยไม่ต้อง
การจัดการหน่วยความจำเสมือนโดยกำจัดการโยกย้ายกับส่วนข้อความ
-mno-sep-ข้อมูล
สร้างรหัสที่ถือว่าส่วนข้อมูลตามส่วนข้อความ นี่คือ
ค่าเริ่มต้น
-mlong-โทร
-นาทีโทรยาว
บอกให้คอมไพเลอร์ทำการเรียกใช้ฟังก์ชันโดยโหลดที่อยู่ของ .ก่อน
ทำงานในรีจิสเตอร์แล้วทำการเรียกรูทีนย่อยบนรีจิสเตอร์นี้ นี้
จำเป็นต้องใช้สวิตช์หากฟังก์ชันเป้าหมายอยู่นอกช่วงการกำหนดแอดเดรส 24 บิตของ
คำสั่งเรียกรูทีนย่อยรุ่นออฟเซ็ต
ฟีเจอร์นี้ไม่ได้เปิดใช้งานโดยค่าเริ่มต้น ระบุ -นาทีโทรยาว คืนค่า
พฤติกรรมเริ่มต้น สังเกตว่าสวิตช์เหล่านี้ไม่มีผลกับวิธีสร้างคอมไพเลอร์
รหัสเพื่อจัดการการเรียกใช้ฟังก์ชันผ่านพอยน์เตอร์ของฟังก์ชัน
-mfast-fp
เชื่อมโยงกับไลบรารีจุดลอยตัวที่รวดเร็ว ห้องสมุดนี้ทำให้ IEEE . บางส่วนผ่อนคลาย
กฎมาตรฐานทศนิยมในการตรวจสอบอินพุตกับ Not-a-Number (NAN) ใน
ความสนใจของประสิทธิภาพ
-minline-plt
เปิดใช้งานอินไลน์ของรายการ PLT ในการเรียกใช้ฟังก์ชันไปยังฟังก์ชันที่ไม่รู้จัก
ผูกท้องถิ่น ไม่มีผลอะไรถ้าไม่มี -mfdpic.
-มัลติคอร์
สร้างแอปพลิเคชันแบบสแตนด์อโลนสำหรับโปรเซสเซอร์ Blackfin แบบมัลติคอร์ ตัวเลือกนี้ทำให้เกิด
ไฟล์เริ่มต้นที่เหมาะสมและสคริปต์ลิงก์ที่สนับสนุนมัลติคอร์ที่จะใช้และกำหนด
มาโคร "__BFIN_MULTICORE" ใช้ได้เฉพาะกับ -mcpu=bf561[-การตรวจทาน].
สามารถใช้ตัวเลือกนี้กับ -mcorea or -mcorebซึ่งเลือกหนึ่ง-application-
โมเดลการเขียนโปรแกรมต่อคอร์ ปราศจาก -mcorea or -mcorebที่
ใช้โมเดลการเขียนโปรแกรมแบบแอปพลิเคชันเดียว/ดูอัลคอร์ ในรุ่นนี้หลัก
ฟังก์ชันของ Core B ควรตั้งชื่อเป็น "coreb_main"
หากไม่ได้ใช้ตัวเลือกนี้ ระบบจะใช้โมเดลการเขียนโปรแกรมแอปพลิเคชันแบบแกนเดียว
-mcorea
สร้างแอปพลิเคชันแบบสแตนด์อโลนสำหรับ Core A ของ BF561 เมื่อใช้แอปพลิเคชันเดียวต่อ
โมเดลการเขียนโปรแกรมหลัก ใช้ไฟล์เริ่มต้นและสคริปต์ลิงก์ที่เหมาะสมเพื่อรองรับ Core
A และมาโคร "__BFIN_COREA" ถูกกำหนดไว้แล้ว ตัวเลือกนี้ใช้ได้เฉพาะใน
ร่วมกับ -มัลติคอร์.
-mcoreb
สร้างแอปพลิเคชันแบบสแตนด์อโลนสำหรับ Core B ของ BF561 เมื่อใช้แอปพลิเคชันเดียวต่อ
โมเดลการเขียนโปรแกรมหลัก ใช้ไฟล์เริ่มต้นและสคริปต์ลิงก์ที่เหมาะสมเพื่อรองรับ Core
B และมาโคร "__BFIN_COREB" ถูกกำหนด เมื่อใช้ตัวเลือกนี้ "coreb_main"
ควรใช้แทน "หลัก" ตัวเลือกนี้สามารถใช้ร่วมกับ .เท่านั้น
-มัลติคอร์.
-msdram
สร้างแอปพลิเคชันแบบสแตนด์อโลนสำหรับ SDRAM ใช้ไฟล์เริ่มต้นและสคริปต์ลิงก์ที่เหมาะสม
เพื่อวางแอปพลิเคชันลงใน SDRAM และกำหนดมาโคร "__BFIN_SDRAM" NS
ตัวโหลดควรเริ่มต้น SDRAM ก่อนโหลดแอปพลิเคชัน
-micplb
สมมติว่ามีการเปิดใช้งาน ICPLBs ในขณะใช้งาน สิ่งนี้มีผลกระทบต่อความผิดปกติบางอย่าง
วิธีแก้ปัญหา สำหรับเป้าหมาย Linux ค่าเริ่มต้นคือถือว่าเปิดใช้งาน ICPLBs สำหรับ
แอปพลิเคชันแบบสแตนด์อโลน ค่าเริ่มต้นคือปิด
ซีทูเอ็กซ์ Options
-มีนาคม=ชื่อ
ระบุชื่อของสถาปัตยกรรมเป้าหมาย GCC ใช้ชื่อนี้เพื่อกำหนด
คำสั่งประเภทใดที่สามารถปล่อยออกมาได้เมื่อสร้างรหัสแอสเซมบลี อนุญาตให้ทำได้
ชื่อคือ: ซีทูเอ็กซ์, ซีทูเอ็กซ์, c64x+, ซีทูเอ็กซ์, c67x+, ซีทูเอ็กซ์.
-mbig-endian
สร้างโค้ดสำหรับเป้าหมาย big-endian
-little-endian
สร้างโค้ดสำหรับเป้าหมาย little-endian นี่คือค่าเริ่มต้น
-msim
เลือกไฟล์เริ่มต้นและสคริปต์ตัวเชื่อมโยงที่เหมาะสมกับโปรแกรมจำลอง
-msdata=ค่าเริ่มต้น
ใส่ข้อมูลระดับโลกและแบบคงที่ขนาดเล็กลงใน .neardata ส่วนซึ่งชี้ไปที่
ลงทะเบียน "B14" ใส่ข้อมูลส่วนกลางและสแตติกที่ไม่ได้กำหนดค่าเริ่มต้นขนาดเล็กลงใน .bss มาตรา,
ซึ่งอยู่ติดกับ .neardata ส่วน. ใส่ข้อมูลแบบอ่านอย่างเดียวขนาดเล็กลงใน .โรดาต้า
ส่วน. ส่วนที่เกี่ยวข้องกันที่ใช้สำหรับข้อมูลขนาดใหญ่คือ .ฟาร์ดาต้า, .ไกล
และ .const.
-msdata=ทั้งหมด
ใส่ข้อมูลทั้งหมด ไม่ใช่แค่วัตถุขนาดเล็ก ลงในส่วนที่สงวนไว้สำหรับข้อมูลขนาดเล็ก และ
ใช้ที่อยู่สัมพันธ์กับการลงทะเบียน "B14" เพื่อเข้าถึง
-msdata=ไม่มี
ไม่ใช้ส่วนที่สงวนไว้สำหรับข้อมูลขนาดเล็ก และใช้ที่อยู่ที่แน่นอนเพื่อ
เข้าถึงข้อมูลทั้งหมด ใส่ข้อมูลส่วนกลางและแบบคงที่ที่เริ่มต้นทั้งหมดลงใน .ฟาร์ดาต้า มาตรา,
และข้อมูลที่ไม่ได้กำหนดค่าเริ่มต้นทั้งหมดใน .ไกล ส่วน. ใส่ข้อมูลคงที่ทั้งหมดลงใน .const
มาตรา.
คริส Options
ตัวเลือกเหล่านี้ถูกกำหนดไว้โดยเฉพาะสำหรับพอร์ต 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
เปิดใช้งานข้อมูลที่เกี่ยวข้องกับการดีบัก verbose เฉพาะ CRIS ในรหัสแอสเซมบลี นี้
ตัวเลือกยังมีผลในการปิด #NO_APP ตัวบ่งชี้ที่จัดรูปแบบรหัสเพื่อ
แอสเซมเบลอร์ที่จุดเริ่มต้นของไฟล์แอสเซมบลี
-mcc-เริ่มต้น
อย่าใช้ผลลัพธ์รหัสเงื่อนไขจากคำสั่งก่อนหน้า ปล่อยการเปรียบเทียบเสมอและ
คำแนะนำการทดสอบก่อนใช้รหัสเงื่อนไข
-mno-ผลข้างเคียง
ห้ามส่งคำสั่งที่มีผลข้างเคียงในโหมดการกำหนดที่อยู่นอกเหนือจากหลัง-
เพิ่มขึ้น
-mstack-จัดตำแหน่ง
-mno-stack-จัดตำแหน่ง
-mdata-จัดตำแหน่ง
-mno-ข้อมูลจัด
-mconst-จัดตำแหน่ง
-mno-const-จัดตำแหน่ง
ตัวเลือกเหล่านี้ (ที่ไม่มี ตัวเลือก) จัดเรียง (กำจัดการจัดเตรียม) สำหรับเฟรมสแต็ก
ข้อมูลแต่ละรายการและค่าคงที่ที่จะจัดตำแหน่งสำหรับขนาดการเข้าถึงข้อมูลเดียวสูงสุด
สำหรับซีพียูรุ่นที่เลือก ค่าเริ่มต้นคือการจัดเรียงสำหรับการจัดตำแหน่งแบบ 32 บิต อาบี
รายละเอียดเช่นเค้าโครงโครงสร้างจะไม่ได้รับผลกระทบจากตัวเลือกเหล่านี้
-m32-บิต
-m16-บิต
-m8-บิต
คล้ายกับตัวเลือก stack- data- และ const-align ด้านบน ตัวเลือกเหล่านี้จัดเรียงสำหรับ
สแต็กเฟรม ข้อมูลที่เขียนได้ และค่าคงที่ทั้งหมดเป็นแบบ 32 บิต 16 บิต หรือ 8 บิต
ค่าเริ่มต้นคือการจัดตำแหน่งแบบ 32 บิต
-mno-prologue-บทส่งท้าย
-mprologue-บทส่งท้าย
ด้วยระบบเส้นทาง -mno-prologue-บทส่งท้าย, บทนำของฟังก์ชันปกติและบทส่งท้ายที่ตั้งค่า
เฟรมสแต็กถูกละเว้นและไม่มีคำสั่งส่งคืนหรือลำดับการส่งคืน
สร้างขึ้นในรหัส ใช้ตัวเลือกนี้ร่วมกับการตรวจสอบด้วยสายตาเท่านั้น
รหัสที่คอมไพล์แล้ว: ไม่มีคำเตือนหรือข้อผิดพลาดเกิดขึ้นเมื่อการลงทะเบียนที่บันทึกการโทรต้องเป็น
บันทึกหรือต้องจัดสรรพื้นที่จัดเก็บสำหรับตัวแปรในเครื่อง
-mno-gotplt
-mgotplt
ด้วยระบบเส้นทาง -fpic และ -fPICอย่าสร้าง (สร้าง) ลำดับคำสั่งที่โหลด
ที่อยู่สำหรับฟังก์ชั่นจากส่วน PLT ของ GOT มากกว่า (ดั้งเดิมบน other
สถาปัตยกรรม) เรียกร้องให้ PLT ค่าเริ่มต้นคือ -mgotplt.
-เมลฟ์
ตัวเลือก no-op แบบเดิมที่รู้จักกับ cris-axis-elf และ cris-axis-linux-gnu เท่านั้น
เป้าหมาย
-mlinux
ตัวเลือก no-op แบบเดิมจะรู้จักกับเป้าหมาย cris-axis-linux-gnu เท่านั้น
-ซิม
ตัวเลือกนี้ ซึ่งเป็นที่รู้จักสำหรับเอลฟ์แกนกลาง จัดเรียงเพื่อเชื่อมโยงกับอินพุต-เอาต์พุต
ฟังก์ชันจากไลบรารีจำลอง รหัส ข้อมูลที่เริ่มต้นและข้อมูลเริ่มต้นเป็นศูนย์
จะได้รับการจัดสรรอย่างต่อเนื่อง
-ซิม2
Like -ซิมแต่ส่งตัวเลือกตัวเชื่อมโยงเพื่อค้นหาข้อมูลที่เริ่มต้นที่ 0x40000000 และศูนย์-
ข้อมูลเริ่มต้นที่ 0x80000000
CR16 Options
ตัวเลือกเหล่านี้ถูกกำหนดไว้โดยเฉพาะสำหรับพอร์ต CR16
-เอ็มแมค
เปิดใช้งานการใช้คำสั่งการคูณ ปิดใช้งานโดยค่าเริ่มต้น
-mcr16cplus
-mcr16c
สร้างโค้ดสำหรับสถาปัตยกรรม CR16C หรือ CR16C+ สถาปัตยกรรม CR16C+ เป็นค่าเริ่มต้น
-msim
ลิงก์ไลบรารี libsim.a ซึ่งเข้ากันได้กับโปรแกรมจำลอง ใช้ได้กับเอลฟ์
คอมไพเลอร์เท่านั้น
-มิ้นต์32
เลือกประเภทจำนวนเต็มเป็นแบบกว้าง 32 บิต
-mbit-ops
สร้างคำสั่ง "sbit"/"cbit" สำหรับการปรับแต่งบิต
-mdata-model=แบบ
เลือกแบบจำลองข้อมูล ทางเลือกของ แบบ เป็น ใกล้, ไกล or กลาง. กลาง เป็นค่าเริ่มต้น
อย่างไรก็ตาม ไกล ใช้ไม่ได้กับ -mcr16cเนื่องจากสถาปัตยกรรม CR16C ไม่รองรับ
แบบจำลองข้อมูลระยะไกล
ดาร์วิน Options
ตัวเลือกเหล่านี้กำหนดไว้สำหรับสถาปัตยกรรมทั้งหมดที่ใช้ระบบปฏิบัติการดาร์วิน
FSF GCC บนดาร์วินไม่สร้างไฟล์อ็อบเจ็กต์ "อ้วน" มันสร้างไฟล์วัตถุสำหรับ
สถาปัตยกรรมเดี่ยวที่ GCC สร้างขึ้นเพื่อกำหนดเป้าหมาย GCC ของ Apple ในดาร์วินสร้าง "ไขมัน"
ไฟล์ถ้าหลาย -โค้ง ใช้ตัวเลือก มันทำได้โดยการรันคอมไพเลอร์หรือลิงเกอร์
หลายครั้งและร่วมผลด้วยกันกับ Lipo.
ชนิดย่อยของไฟล์ที่สร้าง (like ppc7400 or ppc970 or i686) ถูกกำหนดโดย
แฟล็กที่ระบุ ISA ที่ GCC กำหนดเป้าหมาย เช่น -mcpu or -มีนาคม.
-force_cpusubtype_ALL สามารถใช้ตัวเลือกเพื่อแทนที่สิ่งนี้ได้
เครื่องมือของดาร์วินมีลักษณะการทำงานแตกต่างกันไปเมื่อนำเสนอด้วย ISA ไม่ตรงกัน NS
ผู้ประกอบ, asอนุญาตให้ใช้เฉพาะคำแนะนำที่ถูกต้องสำหรับประเภทย่อยของ
กำลังสร้างไฟล์ ดังนั้นคุณจึงไม่สามารถใส่คำสั่ง 64 บิตใน a ppc750 ไฟล์อ็อบเจ็กต์ NS
ตัวเชื่อมโยงสำหรับไลบรารีที่ใช้ร่วมกัน /usr/bin/libtool, ล้มเหลวและพิมพ์ข้อผิดพลาดหากถูกถามถึง
สร้างไลบรารีที่ใช้ร่วมกันที่มีประเภทย่อยที่จำกัดน้อยกว่าไฟล์อินพุต (for
เช่น พยายามใส่ ppc970 ไฟล์วัตถุใน a ppc7400 ห้องสมุด). ตัวเชื่อมโยงสำหรับ
ไฟล์ปฏิบัติการ, ld, ให้ประเภทย่อยที่ จำกัด ที่สุดของปฏิบัติการใด ๆ ของมันอย่างเงียบ ๆ
ไฟล์อินพุต
-Fdir
เพิ่มไดเร็กทอรีกรอบงาน dir ไปที่ส่วนหัวของรายการไดเร็กทอรีที่จะค้นหา
สำหรับไฟล์ส่วนหัว ไดเร็กทอรีเหล่านี้สอดแทรกกับไดเร็กทอรีที่ระบุโดย -I
และสแกนตามลำดับจากซ้ายไปขวา
ไดเร็กทอรีเฟรมเวิร์กคือไดเร็กทอรีที่มีเฟรมเวิร์กอยู่ในนั้น กรอบคือ
ไดเร็กทอรีด้วย a ส่วนหัว และ / หรือ หัวหน้าส่วนตัว ไดเร็กทอรีที่มีอยู่โดยตรงในนั้นว่า
สิ้นสุดลงใน .กรอบ. ชื่อของเฟรมเวิร์กคือชื่อของไดเร็กทอรีนี้ ไม่รวม
.กรอบ. ส่วนหัวที่เกี่ยวข้องกับกรอบงานพบได้ในหนึ่งในสองรายการนั้น
ไดเรกทอรีด้วย ส่วนหัว ถูกค้นก่อน กรอบงานย่อยคือกรอบงาน
ไดเรกทอรีที่อยู่ในกรอบของ กรอบ ไดเร็กทอรี รวมถึงกรอบงานย่อย
ส่วนหัวสามารถปรากฏในส่วนหัวของเฟรมเวิร์กที่มีเฟรมเวิร์กย่อยเท่านั้น หรือ
ในส่วนหัวเฟรมเวิร์กย่อยของพี่น้อง สองเฟรมเวิร์กย่อยเป็นพี่น้องกันหากเกิดขึ้นใน
กรอบเดียวกัน. เฟรมเวิร์กย่อยไม่ควรมีชื่อเหมือนกับเฟรมเวิร์ก NS
มีการออกคำเตือนหากมีการละเมิด ปัจจุบันไม่สามารถมีเฟรมเวิร์กย่อยได้
กรอบงานย่อย; ในอนาคตอาจขยายกลไกเพื่อรองรับสิ่งนี้ NS
กรอบมาตรฐานสามารถพบได้ใน / ระบบ / Library / กรอบ และ
/ Library / กรอบ. ตัวอย่างได้แก่ "#include ",
ที่ไหน กรอบ หมายถึงชื่อของกรอบและ ส่วนหัว.h พบได้ในไฟล์
หัวหน้าส่วนตัว or ส่วนหัว ไดเรกทอรี
-iframeworkdir
Like -F ยกเว้นไดเร็กทอรีจะถือว่าเป็นไดเร็กทอรีระบบ ความแตกต่างที่สำคัญ
ระหว่างนี้ -iframework และ -F คือด้วย -iframework คอมไพเลอร์ไม่เตือน
เกี่ยวกับโครงสร้างที่มีอยู่ในไฟล์ส่วนหัวที่พบผ่าน dir. ตัวเลือกนี้ถูกต้อง
สำหรับตระกูลภาษา C เท่านั้น
-guused
เผยแพร่ข้อมูลการดีบักสำหรับสัญลักษณ์ที่ใช้ สำหรับรูปแบบการดีบักการแทง
สิ่งนี้ทำให้ -felimate-ไม่ได้ใช้-debug-symbols. โดยค่าเริ่มต้นคือเปิด
-gfull
ส่งข้อมูลการดีบักสำหรับสัญลักษณ์และประเภททั้งหมด
-mmacosx-เวอร์ชัน-min=รุ่น
MacOS X เวอร์ชันแรกสุดที่โปรแกรมเรียกทำงานนี้จะทำงานบน is รุ่น. ตามแบบฉบับ
ค่าของ รุ่น รวมถึง 10.1, 10.2 และ 10.3.9
หากคอมไพเลอร์ถูกสร้างขึ้นเพื่อใช้ส่วนหัวของระบบโดยค่าเริ่มต้น ค่าดีฟอลต์สำหรับ
ตัวเลือกนี้เป็นเวอร์ชันของระบบที่คอมไพเลอร์กำลังทำงานอยู่ มิฉะนั้น
ค่าเริ่มต้นคือการเลือกที่เข้ากันได้กับระบบและฐานรหัสจำนวนมากเท่า
เป็นไปได้
-เคอร์เนล
เปิดใช้งานโหมดการพัฒนาเคอร์เนล NS -เคอร์เนล ชุดตัวเลือก -คงที่, -fno-ธรรมดา,
-fno-ใช้-cxa-atexit, -fno-ข้อยกเว้น, -fno-ไม่โทร-ข้อยกเว้น, -fapple-kext,
-fno-อ่อนแอ และ -fno-rti ที่ใช้บังคับ. โหมดนี้ยังตั้งค่า -mno-อัลทีฟเทค,
-msoft-ลอย, -fno-ในตัว และ -mlong-สาขา สำหรับเป้าหมายของ PowerPC
-mone ไบต์บูล
แทนที่ค่าเริ่มต้นสำหรับ บูล ดังนั้น ขนาดของ(บูล)==1. โดยค่าเริ่มต้น ขนาด (บูล) is 4
เมื่อทำการคอมไพล์สำหรับ Darwin/PowerPC และ 1 เมื่อทำการคอมไพล์สำหรับ Darwin/x86 ดังนั้นตัวเลือกนี้
ไม่มีผลกับ x86
คำเตือน: โครงการ -mone ไบต์บูล สวิตช์ทำให้ GCC สร้างรหัสที่ไม่ใช่ไบนารี
เข้ากันได้กับรหัสที่สร้างขึ้นโดยไม่มีสวิตช์นั้น การใช้สวิตช์นี้อาจต้องใช้
คอมไพล์โมดูลอื่นๆ ทั้งหมดในโปรแกรม รวมทั้งไลบรารีระบบ ใช้สิ่งนี้
เปลี่ยนไปใช้โมเดลข้อมูลที่ไม่ใช่ค่าเริ่มต้น
-mfix-และดำเนินการต่อ
-ffix-และดำเนินการต่อ
-findirect ข้อมูล
สร้างโค้ดที่เหมาะสมสำหรับการพัฒนาแบบตอบสนองอย่างรวดเร็ว เช่น เพื่อให้ GDB สามารถ
โหลดไฟล์ ".o" แบบไดนามิกลงในโปรแกรมที่รันอยู่แล้ว -findirect ข้อมูล และ
-ffix-และดำเนินการต่อ มีให้สำหรับความเข้ากันได้ย้อนหลัง
-all_load
โหลดสมาชิกทั้งหมดของไลบรารีไฟล์เก็บถาวรแบบคงที่ ดูผู้ชาย ld(1) สำหรับข้อมูลเพิ่มเติม
-arch_errors_fatal
ทำให้เกิดข้อผิดพลาดเกี่ยวกับไฟล์ที่มีสถาปัตยกรรมที่ไม่ถูกต้องถึงขั้นเสียชีวิต
-bind_at_load
ทำให้ไฟล์เอาต์พุตถูกทำเครื่องหมายเพื่อให้ไดนามิกลิงก์เกอร์จะผูกทั้งหมด
การอ้างอิงที่ไม่ได้กำหนดเมื่อโหลดหรือเปิดไฟล์
- มัด
สร้างไฟล์รูปแบบมัด Mach-o ดูผู้ชาย ld(1) สำหรับข้อมูลเพิ่มเติม
-bundle_loader ปฏิบัติการ
ตัวเลือกนี้ระบุ ปฏิบัติการ ที่จะโหลดไฟล์เอาต์พุตบิลด์เป็น
เชื่อมโยง ดูผู้ชาย ld(1) สำหรับข้อมูลเพิ่มเติม
-ไดนามิกlib
เมื่อผ่านตัวเลือกนี้ GCC จะสร้างไลบรารีแบบไดนามิกแทนการเรียกทำงานเมื่อ
เชื่อมโยงโดยใช้ดาร์วิน ลิบทูล คำสั่ง
-force_cpusubtype_ALL
สิ่งนี้ทำให้ไฟล์เอาต์พุตของ GCC มี ทั้งหมด ชนิดย่อย แทนที่จะถูกควบคุมโดย
-mcpu or -มีนาคม ตัวเลือก
-allowable_client ชื่อลูกค้า
-ชื่อลูกค้า
-ความเข้ากันได้_รุ่น
-current_version
-dead_strip
-dependency-ไฟล์
-dylib_file
-dylinker_install_name
- ไดนามิก
-exported_ symbols_list
-รายการไฟล์
-flat_namespace
-force_flat_namespace
-headerpad_max_install_names
-image_base
-ในนั้น
-install_name
-keep_private_externs
-multi_module
-คูณ_กำหนด
-คูณ_กำหนด_ไม่ได้ใช้
-noall_load
-no_dead_strip_inits_and_terms
-nofixprebinding
-nomultidefs
-ไม่พรีบินด์
-noseglinkแก้ไข
-pagezero_size
- ผูกมัด
-prebind_all_twolevel_modules
-private_bundle
-read_only_relocs
-sectalign
-สัญลักษณ์วัตถุ
-ทำไมโหลด
-seg1addr
-seccreate
-สัญลักษณ์วัตถุ
-ภาคส่วน
-segaddr
-segs_read_only_addr
-segs_read_write_addr
-seg_addr_table
-seg_addr_table_filename
-seglinkแก้ไข
-เซปโปร
-segs_read_only_addr
-segs_read_write_addr
-single_module
-คงที่
-sub_library
-sub_umbrella
-twolevel_namespace
-ร่ม
-ไม่ได้กำหนด
-unexported_ symbols_list
-weak_reference_mismatches
-Whatsloaded
ตัวเลือกเหล่านี้จะถูกส่งต่อไปยังตัวเชื่อมโยงดาร์วิน หน้าคู่มือตัวเชื่อมโยงดาร์วินอธิบาย
พวกเขาในรายละเอียด
ธันวาคม แอลฟา Options
ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m มีการกำหนดตัวเลือกสำหรับการใช้งาน DEC Alpha:
-mno-นุ่มลอย
-msoft-ลอย
ใช้ (อย่าใช้) คำแนะนำฮาร์ดแวร์สำหรับจุดลอยตัว
การดำเนินงาน เมื่อไหร่ -msoft-ลอย ถูกระบุ ทำหน้าที่ใน libgcc.a ที่ใช้ในการดำเนินการ
การดำเนินการจุดลอยตัว เว้นแต่จะถูกแทนที่ด้วยกิจวัตรที่เลียนแบบ
การดำเนินการจุดลอยตัวหรือรวบรวมในลักษณะที่เรียกว่าการจำลองดังกล่าว
รูทีน รูทีนเหล่านี้ออกการดำเนินการจุดทศนิยม หากคุณกำลังรวบรวมสำหรับ
อัลฟ่าที่ไม่มีการดำเนินการจุดลอยตัว คุณต้องแน่ใจว่าไลบรารีถูกสร้างขึ้น
เพื่อไม่ให้เรียกพวกเขา
โปรดทราบว่าการนำไปใช้งานอัลฟ่าโดยไม่มีการดำเนินการจุดทศนิยมจำเป็นต้องมี
การลงทะเบียนทศนิยม
-mfp-reg
-mno-fp-regs
สร้างรหัสที่ใช้ (ไม่ใช้) ชุดทะเบียนทศนิยม -mno-fp-regs
หมายถึง -msoft-ลอย. หากไม่ใช้ชุดรีจิสเตอร์ทศนิยม ให้ทศนิยมทศนิยม
ตัวถูกดำเนินการถูกส่งผ่านในการลงทะเบียนจำนวนเต็มราวกับว่าพวกมันเป็นจำนวนเต็มและทศนิยม
ผลลัพธ์จะถูกส่งเป็น $0 แทนที่จะเป็น $f0 นี่เป็นลำดับการโทรที่ไม่ได้มาตรฐาน ดังนั้น
ฟังก์ชั่นใด ๆ ที่มีอาร์กิวเมนต์ทศนิยมหรือค่าส่งคืนที่เรียกโดยโค้ดที่คอมไพล์
กับ -mno-fp-regs จะต้องคอมไพล์ด้วยตัวเลือกนั้นด้วย
การใช้ตัวเลือกนี้โดยทั่วไปคือการสร้างเคอร์เนลที่ไม่ได้ใช้และด้วยเหตุนี้จึงจำเป็น
ไม่บันทึกและกู้คืนการลงทะเบียนทศนิยมใด ๆ
-มี่
สถาปัตยกรรมอัลฟ่าใช้ฮาร์ดแวร์จุดลอยตัวที่ปรับให้เหมาะสมที่สุด
ประสิทธิภาพ. ส่วนใหญ่เป็นไปตามมาตรฐานจุดลอยตัวของ IEEE อย่างไรก็ตาม,
สำหรับการปฏิบัติตามข้อกำหนดอย่างสมบูรณ์ จำเป็นต้องมีความช่วยเหลือด้านซอฟต์แวร์ ตัวเลือกนี้สร้างรหัส
รหัสที่สอดคล้องกับ IEEE อย่างสมบูรณ์ ยกเว้น that the ไม่แน่นอน-flag ไม่ได้รับการบำรุงรักษา (ดูด้านล่าง)
หากเปิดตัวเลือกนี้ มาโครตัวประมวลผลล่วงหน้า "_IEEE_FP" จะถูกกำหนดระหว่าง
การรวบรวม โค้ดที่ได้จะมีประสิทธิภาพน้อยกว่าแต่สามารถรองรับได้ถูกต้อง
ตัวเลขที่ไม่ปกติและค่า IEEE พิเศษ เช่น ไม่ใช่ตัวเลขและบวก/ลบ
อินฟินิตี้ คอมไพเลอร์อัลฟ่าอื่น ๆ เรียกตัวเลือกนี้ -ieee_with_no_inexact.
-mieee-with-ไม่แน่นอน
ประมาณนี้ค่ะ -มี่ ยกเว้นรหัสที่สร้างขึ้นยังรักษา IEEE ไม่แน่นอน-flag.
การเปิดตัวเลือกนี้จะทำให้โค้ดที่สร้างขึ้นใช้ IEEE . ที่เป็นไปตามข้อกำหนดทั้งหมด
คณิตศาสตร์. นอกเหนือจาก "_IEEE_FP" แล้ว "_IEEE_FP_EXACT" ยังถูกกำหนดให้เป็นมาโครตัวประมวลผลล่วงหน้า
ในการใช้งาน Alpha บางตัว โค้ดที่ได้อาจรันช้ากว่า
รหัสที่สร้างขึ้นโดยค่าเริ่มต้น เนื่องจากมีโค้ดน้อยมากที่ขึ้นอยู่กับ
ไม่แน่นอน-flagโดยปกติ คุณไม่ควรระบุตัวเลือกนี้ คอมไพเลอร์อัลฟ่าอื่น ๆ โทร
ตัวเลือกนี้ -IEEE_WITH_INEXACT.
-mfp-กับดัก-โหมด=โหมดกับดัก
ตัวเลือกนี้ควบคุมว่าเปิดใช้งานกับดักที่เกี่ยวข้องกับจุดลอยตัวใดบ้าง อัลฟ่าอื่นๆ
คอมไพเลอร์เรียกตัวเลือกนี้ -fptm โหมดกับดัก. โหมดกับดักสามารถตั้งค่าให้เป็นหนึ่งในสี่
ค่า:
n นี่คือการตั้งค่าเริ่มต้น (ปกติ) กับดักเดียวที่เปิดใช้งานคือ
สิ่งที่ไม่สามารถปิดการใช้งานในซอฟต์แวร์ได้ (เช่น หารด้วยศูนย์กับดัก)
u นอกจากกับดักที่เปิดใช้งานโดย n, กับดักอันเดอร์โฟลว์ก็เปิดใช้งานเช่นกัน
su Like uแต่คำแนะนำถูกทำเครื่องหมายว่าปลอดภัยสำหรับการทำงานของซอฟต์แวร์ (ดู
คู่มือสถาปัตยกรรมอัลฟ่าสำหรับรายละเอียด)
หมี่ Like suแต่กับดักที่ไม่แน่นอนก็เปิดใช้งานเช่นกัน
-mfp-ปัดเศษโหมด=โหมดปัดเศษ
เลือกโหมดการปัดเศษของ IEEE คอมไพเลอร์อัลฟ่าอื่น ๆ เรียกตัวเลือกนี้ -fprm
โหมดปัดเศษ. โหมดปัดเศษ สามารถเป็นหนึ่งใน:
n โหมดการปัดเศษของ IEEE ปกติ ตัวเลขทศนิยมจะถูกปัดเศษเข้าหาค่าที่ใกล้ที่สุด
เลขเครื่องหรือไปทางเลขเครื่องคู่กรณีเสมอกัน
m ปัดเศษไปทางลบอนันต์
c โหมดปัดเศษ ตัวเลขทศนิยมถูกปัดเศษเข้าหาศูนย์
d โหมดการปัดเศษแบบไดนามิก ฟิลด์ในการลงทะเบียนควบคุมจุดลอยตัว (fpcrโปรดดูที่
คู่มืออ้างอิงสถาปัตยกรรมอัลฟ่า) ควบคุมโหมดการปัดเศษที่มีผล เดอะซี
ห้องสมุดเริ่มต้นการลงทะเบียนนี้สำหรับการปัดเศษไปทางบวกอนันต์ ดังนั้น,
เว้นแต่โปรแกรมของคุณจะแก้ไข fpcr, d สอดคล้องกับปัดไปทางบวก
อินฟินิตี้
-mtrap-ความแม่นยำ=กับดักความแม่นยำ
ในสถาปัตยกรรมอัลฟ่า กับดักจุดลอยตัวนั้นไม่ชัดเจน นี่หมายความว่าไม่มี
ความช่วยเหลือด้านซอฟต์แวร์ไม่สามารถกู้คืนจากกับดักและโปรแกรมลอยได้
การดำเนินการตามปกติจะต้องถูกยกเลิก GCC สามารถสร้างรหัสที่สามารถช่วยเหลือได้
ตัวจัดการกับดักของระบบปฏิบัติการในการกำหนดตำแหน่งที่แน่นอนที่ก่อให้เกิด
กับดักจุดลอยตัว ขึ้นอยู่กับข้อกำหนดของการสมัครที่แตกต่างกัน
สามารถเลือกระดับความแม่นยำได้:
p ความแม่นยำของโปรแกรม ตัวเลือกนี้เป็นค่าเริ่มต้นและหมายความว่าตัวจัดการกับดักสามารถทำได้เท่านั้น
ระบุว่าโปรแกรมใดทำให้เกิดข้อยกเว้นจุดทศนิยม
f ความแม่นยำของฟังก์ชัน ตัวจัดการกับดักสามารถกำหนดฟังก์ชันที่ทำให้เกิด a
ข้อยกเว้นทศนิยม
i ความแม่นยำของคำสั่ง ตัวจัดการกับดักสามารถกำหนดคำสั่งที่แน่นอนได้ว่า
ทำให้เกิดข้อยกเว้นทศนิยม
คอมไพเลอร์อัลฟ่าอื่น ๆ ให้ตัวเลือกเทียบเท่าที่เรียกว่า -scope_safe และ
-เริ่มต้นใหม่_ปลอดภัย.
-mieee-สอดคล้อง
ตัวเลือกนี้ทำเครื่องหมายรหัสที่สร้างขึ้นว่าเป็นไปตามมาตรฐาน IEEE คุณต้องไม่ใช้ตัวเลือกนี้
เว้นแต่คุณจะระบุด้วย -mtrap-ความแม่นยำ=ฉัน และอย่างใดอย่างหนึ่ง -mfp-trap-mode=su or
-mfp-trap-mode = sui. ผลเดียวของมันคือการปล่อยสาย .flag 48 ในการทำงาน
อารัมภบทของไฟล์แอสเซมบลีที่สร้างขึ้น
-mbuild-ค่าคงที่
โดยปกติ GCC จะตรวจสอบค่าคงที่จำนวนเต็ม 32 หรือ 64 บิตเพื่อดูว่าสามารถสร้างได้หรือไม่
จากค่าคงที่ที่น้อยกว่าในคำสั่งสองหรือสามคำสั่ง หากไม่สามารถทำได้ก็จะส่งออก
ค่าคงที่ตามตัวอักษรและสร้างโค้ดเพื่อโหลดจากส่วนข้อมูล ณ รันไทม์
ใช้ตัวเลือกนี้เพื่อกำหนดให้ GCC สร้าง ทั้งหมด ค่าคงที่จำนวนเต็มโดยใช้โค้ด แม้ว่า
ต้องใช้คำแนะนำเพิ่มเติม (สูงสุดหก)
โดยทั่วไป คุณจะใช้ตัวเลือกนี้เพื่อสร้างตัวโหลดไดนามิกไลบรารีที่ใช้ร่วมกัน ตัวมันเอง
ไลบรารีที่ใช้ร่วมกันจะต้องย้ายตัวเองในหน่วยความจำก่อนจึงจะสามารถค้นหาตัวแปรและ
ค่าคงที่ในส่วนข้อมูลของตัวเอง
-mbwx
-mno-bwx
-mcix
-mno-cix
-mfix
-mno-แก้ไข
-มม.สูงสุด
-mno-สูงสุด
ระบุว่า GCC ควรสร้างโค้ดเพื่อใช้ตัวเลือก BWX, CIX, FIX และ MAX . หรือไม่
ชุดคำสั่ง ค่าเริ่มต้นคือการใช้ชุดคำสั่งที่รองรับโดยCPU
ประเภทที่ระบุผ่าน -mcpu= ตัวเลือกหรือของ CPU ที่สร้าง GCC หากไม่มี
ระบุไว้
-mfloat-vax
-mfloat-ieee
สร้างโค้ดที่ใช้ (ไม่ใช้) VAX F และ G เลขทศนิยมแทน
ของความแม่นยำเดียวและสองเท่าของ IEEE
-meexplicit-relocs
-mno-ชัดเจน-relocs
แอสเซมเบลอร์อัลฟ่าที่เก่ากว่าไม่มีวิธีสร้างการโยกย้ายสัญลักษณ์ยกเว้นผ่าน
มาโครแอสเซมเบลอร์ การใช้มาโครเหล่านี้ไม่อนุญาตให้จัดตารางเวลาคำสั่งที่เหมาะสมที่สุด
GNU binutils ในเวอร์ชัน 2.12 รองรับไวยากรณ์ใหม่ที่ช่วยให้คอมไพเลอร์สามารถ
ระบุให้ชัดเจนว่าการย้ายถิ่นฐานใดควรใช้กับคำแนะนำใด ตัวเลือกนี้คือ
มีประโยชน์ส่วนใหญ่สำหรับการดีบัก เนื่องจาก GCC ตรวจพบความสามารถของแอสเซมเบลอร์เมื่อ
ถูกสร้างและตั้งค่าเริ่มต้นตามนั้น
-msmall-ข้อมูล
-mlarge-ข้อมูล
เมื่อ -meexplicit-relocs มีผลบังคับใช้ เข้าถึงข้อมูลคงที่ผ่าน gp-ญาติ
การย้ายถิ่นฐาน เมื่อไหร่ -msmall-ข้อมูล ใช้วัตถุขนาด 8 ไบต์หรือเล็กกว่าจะถูกวางไว้ใน
a เล็ก ข้อมูล พื้นที่ (ส่วน ".sdata" และ ".sbss") และเข้าถึงได้ผ่าน 16-bit
ย้ายออกจากการลงทะเบียน $gp ซึ่งจะจำกัดขนาดของพื้นที่ข้อมูลขนาดเล็กไว้ที่
64KB แต่อนุญาตให้เข้าถึงตัวแปรได้โดยตรงผ่านคำสั่งเดียว
ค่าเริ่มต้นคือ -mlarge-ข้อมูล. ด้วยตัวเลือกนี้ พื้นที่ข้อมูลจะถูกจำกัดให้อยู่ด้านล่าง
2GB. โปรแกรมที่ต้องการข้อมูลมากกว่า 2GB ต้องใช้ "malloc" หรือ "mmap" to
จัดสรรข้อมูลในฮีปแทนในส่วนข้อมูลของโปรแกรม
เมื่อสร้างรหัสสำหรับไลบรารีที่ใช้ร่วมกัน -fpic หมายถึง -msmall-ข้อมูล และ -fPIC
หมายถึง -mlarge-ข้อมูล.
-msmall-ข้อความ
-mlarge-ข้อความ
เมื่อ -msmall-ข้อความ ใช้คอมไพเลอร์ถือว่ารหัสของโปรแกรมทั้งหมด
(หรือไลบรารีที่ใช้ร่วมกัน) มีขนาด 4MB และสามารถเข้าถึงได้ด้วยคำสั่งสาขา
เมื่อ -msmall-ข้อมูล ใช้คอมไพเลอร์สามารถสันนิษฐานได้ว่าสัญลักษณ์ท้องถิ่นทั้งหมดใช้
ค่า $gp เท่ากัน และลดจำนวนคำสั่งที่จำเป็นสำหรับฟังก์ชัน
โทรจาก 4 ถึง 1
ค่าเริ่มต้นคือ -mlarge-ข้อความ.
-mcpu=ซีพียู_ประเภท
ตั้งค่าชุดคำสั่งและพารามิเตอร์การจัดตารางเวลาคำสั่งสำหรับประเภทเครื่อง
ซีพียู_ประเภท. คุณสามารถระบุได้ทั้ง EV ชื่อรูปแบบหรือหมายเลขชิปที่เกี่ยวข้อง
GCC รองรับพารามิเตอร์การตั้งเวลาสำหรับโปรเซสเซอร์ตระกูล EV4, EV5 และ EV6 และ
เลือกค่าเริ่มต้นสำหรับชุดคำสั่งจากโปรเซสเซอร์ที่คุณระบุ ถ้า
คุณไม่ได้ระบุประเภทตัวประมวลผล GCC ตั้งค่าเริ่มต้นเป็นโปรเซสเซอร์ที่
คอมไพเลอร์ถูกสร้างขึ้น
ค่าที่รองรับสำหรับ ซีพียู_ประเภท เป็น
ev4
ev45
21064
กำหนดตารางเวลาเป็น EV4 และไม่มีส่วนขยายชุดคำสั่ง
ev5
21164
กำหนดตารางเวลาเป็น EV5 และไม่มีส่วนขยายชุดคำสั่ง
ev56
21164a
กำหนดเวลาเป็น EV5 และรองรับส่วนขยาย BWX
พีซีเอ56
21164pc
21164PC
กำหนดเวลาเป็น EV5 และรองรับส่วนขยาย BWX และ MAX
ev6
21264
กำหนดเวลาเป็น EV6 และรองรับส่วนขยาย BWX, FIX และ MAX
ev67
21264a
กำหนดเวลาเป็น EV6 และรองรับส่วนขยาย BWX, CIX, FIX และ MAX
ชุดเครื่องมือดั้งเดิมยังรองรับค่า พื้นเมืองที่คัดสรรสถาปัตยกรรมที่ดีที่สุด
ตัวเลือกสำหรับโปรเซสเซอร์โฮสต์ -mcpu=เจ้าของภาษา ไม่มีผลหาก GCC ไม่รู้จัก
โปรเซสเซอร์
-mtune=ซีพียู_ประเภท
ตั้งค่าเฉพาะพารามิเตอร์การจัดตารางเวลาคำสั่งสำหรับประเภทเครื่อง ซีพียู_ประเภท.
ชุดคำสั่งไม่เปลี่ยนแปลง
ชุดเครื่องมือดั้งเดิมยังรองรับค่า พื้นเมืองที่คัดสรรสถาปัตยกรรมที่ดีที่สุด
ตัวเลือกสำหรับโปรเซสเซอร์โฮสต์ -mtune=เจ้าของภาษา ไม่มีผลหาก GCC ไม่รู้จัก
โปรเซสเซอร์
-หน่วยความจำแฝง=เวลา
ตั้งค่าเวลาแฝงที่ตัวจัดกำหนดการควรใช้สำหรับการอ้างอิงหน่วยความจำทั่วไปตามที่เห็นโดย
แอปพลิเคชัน ตัวเลขนี้ขึ้นอยู่กับรูปแบบการเข้าถึงหน่วยความจำที่ใช้เป็นอย่างมาก
โดยแอปพลิเคชันและขนาดของแคชภายนอกบนเครื่อง
ตัวเลือกที่ถูกต้องสำหรับ เวลา เป็น
จำนวน
ตัวเลขทศนิยมแทนรอบนาฬิกา
L1
L2
L3
หลัก
คอมไพเลอร์ประกอบด้วยค่าประมาณของจำนวนรอบสัญญาณนาฬิกาสำหรับ EV4 "ทั่วไป" &
ฮาร์ดแวร์ EV5 สำหรับแคชระดับ 1, 2 และ 3 (เรียกอีกอย่างว่า Dcache, Scache และ
Bcache) เช่นเดียวกับหน่วยความจำหลัก โปรดทราบว่า L3 ใช้ได้กับ EV5 เท่านั้น
FR30 Options
ตัวเลือกเหล่านี้ถูกกำหนดไว้โดยเฉพาะสำหรับพอร์ต FR30
-msmall-แบบ
ใช้แบบจำลองพื้นที่ที่อยู่ขนาดเล็ก สิ่งนี้สามารถสร้างโค้ดขนาดเล็กลงได้ แต่ถือว่า
ที่ค่าสัญลักษณ์และที่อยู่ทั้งหมดพอดีกับช่วง 20 บิต
-mno-lsim
สมมติว่ามีการสนับสนุนรันไทม์ไว้แล้ว ดังนั้นจึงไม่จำเป็นต้องรวม
ห้องสมุดจำลอง (libsim.a) บนบรรทัดรับคำสั่งลิงเกอร์
ลิฟ Options
-mgpr-32
ใช้การลงทะเบียนเอนกประสงค์ 32 รายการแรกเท่านั้น
-mgpr-64
ใช้รีจิสเตอร์เอนกประสงค์ทั้งหมด 64 รายการ
-mfpr-32
ใช้การลงทะเบียนทศนิยม 32 จุดแรกเท่านั้น
-mfpr-64
ใช้การลงทะเบียนทศนิยมทั้ง 64 จุด
-mhard-ลอย
ใช้คำแนะนำฮาร์ดแวร์สำหรับการดำเนินการจุดลอยตัว
-msoft-ลอย
ใช้ไลบรารีรูทีนสำหรับการดำเนินการทศนิยม
-malloc-ซีซี
จัดสรรการลงทะเบียนรหัสเงื่อนไขแบบไดนามิก
-mfixed-ซีซี
อย่าพยายามจัดสรรการลงทะเบียนรหัสเงื่อนไขแบบไดนามิก ใช้เฉพาะ "icc0" และ
"fcc0".
-mdword
เปลี่ยน ABI เพื่อใช้คำสองคำ insns
-mno-dword
อย่าใช้คำแนะนำสองคำ
-mdouble
ใช้คำสั่งคู่ทศนิยม
-mno-สองเท่า
อย่าใช้คำแนะนำคู่ทศนิยม
-มีเดีย
ใช้คำแนะนำสื่อ
-mno-สื่อ
อย่าใช้คำแนะนำสื่อ
-mmuladd
ใช้วิธีการคูณและบวก/ลบ
-Mno-Muladd
อย่าใช้คำสั่งการคูณและเพิ่ม/ลบ
-mfdpic
เลือก FDPIC ABI ซึ่งใช้ตัวบอกฟังก์ชันเพื่อแสดงตัวชี้ไปยัง
ฟังก์ชั่น. หากไม่มีตัวเลือกที่เกี่ยวข้องกับ PIC/PIE ก็หมายความว่า -fPIE. ด้วย -fpic or
-fpieโดยถือว่ารายการ GOT และข้อมูลขนาดเล็กอยู่ในช่วง 12 บิตจาก GOT
ที่อยู่ฐาน; กับ -fPIC or -fPIE, ออฟเซ็ต GOT คำนวณด้วย 32 บิต กับ
bfin-เอลฟ์ เป้าหมาย ตัวเลือกนี้หมายถึง -msim.
-minline-plt
เปิดใช้งานอินไลน์ของรายการ PLT ในการเรียกใช้ฟังก์ชันไปยังฟังก์ชันที่ไม่รู้จัก
ผูกท้องถิ่น ไม่มีผลอะไรถ้าไม่มี -mfdpic. มันถูกเปิดใช้งานโดยค่าเริ่มต้น if
การเพิ่มประสิทธิภาพสำหรับความเร็วและการคอมไพล์สำหรับไลบรารีที่ใช้ร่วมกัน (เช่น -fPIC or -fpic), หรือ
เมื่อตัวเลือกการเพิ่มประสิทธิภาพเช่น -O3 หรือสูงกว่ามีอยู่ในบรรทัดคำสั่ง
-mTLS
สมมติว่าเป็นเซ็กเมนต์ TLS ขนาดใหญ่เมื่อสร้างโค้ดของเธรดโลคัล
-mtl
อย่าถือว่ากลุ่ม TLS ขนาดใหญ่เมื่อสร้างรหัสภายในเครื่อง
-mgplel-ro
เปิดใช้งานการใช้การย้ายตำแหน่ง "GPREL" ใน FDPIC ABI สำหรับข้อมูลที่ทราบว่าอยู่ใน
ส่วนแบบอ่านอย่างเดียว มันถูกเปิดใช้งานโดยค่าเริ่มต้น ยกเว้นสำหรับ -fpic or -fpie: แม้ว่า
อาจช่วยทำให้ตารางออฟเซ็ตทั่วโลกมีขนาดเล็กลง โดยจะแลกเปลี่ยน 1 คำสั่งสำหรับ 4 ด้วย
-fPIC or -fPIEมันแลกเปลี่ยน 3 คำแนะนำสำหรับ 4 ซึ่งหนึ่งในนั้นอาจใช้ร่วมกันได้หลายรายการ
สัญลักษณ์และหลีกเลี่ยงความจำเป็นในการป้อน GOT สำหรับสัญลักษณ์อ้างอิง ดังนั้นจึงเป็น
มีแนวโน้มที่จะชนะ ถ้าไม่ใช่ -mno-gpel-ro สามารถใช้เพื่อปิดการใช้งาน
-multilib-library-รูป
ลิงก์กับไลบรารีรูปภาพ (ไลบรารี่ไม่ใช่ FD) มีความหมายโดย -mlibrary-รูปเช่นกัน
โดย -fPIC และ -fpic ไม่มี -mfdpic. คุณไม่ควรใช้มันอย่างชัดเจน
-mlinked-fp
ปฏิบัติตามข้อกำหนดของ EABI ในการสร้างตัวชี้เฟรมเสมอทุกครั้งที่มีสแต็กเฟรม
ได้รับการจัดสรร ตัวเลือกนี้เปิดใช้งานโดยค่าเริ่มต้นและสามารถปิดใช้งานได้ด้วย
-mno-เชื่อมโยง-fp.
-mlong-โทร
ใช้การกำหนดแอดเดรสทางอ้อมเพื่อเรียกใช้ฟังก์ชันภายนอกยูนิตการคอมไพล์ปัจจุบัน นี้
อนุญาตให้วางฟังก์ชันไว้ที่ใดก็ได้ภายในพื้นที่ที่อยู่แบบ 32 บิต
ป้ายชื่อ-malign
พยายามจัดแนวป้ายกำกับให้อยู่ในขอบเขตขนาด 8 ไบต์โดยใส่ NOP ลงในแพ็กเก็ตก่อนหน้า
ตัวเลือกนี้จะมีผลเมื่อเปิดใช้งานการบรรจุ VLIW เท่านั้น ไม่สร้างใหม่
แพ็คเก็ต; มันเพียงเพิ่ม NOP ให้กับที่มีอยู่
-mlibrary-รูป
สร้างรหัส EABI ที่ไม่ขึ้นกับตำแหน่ง
-macc-4
ใช้การลงทะเบียนสื่อสะสมสื่อสี่รายการแรกเท่านั้น
-macc-8
ใช้การลงทะเบียนสื่อสะสมสื่อทั้งหมดแปดรายการ
-เอ็มแพ็ก
คำแนะนำแพ็ค VLIW
-mno-แพ็ค
อย่าแพ็คคำสั่ง VLIW
-mno-flags
อย่าทำเครื่องหมายสวิตช์ ABI ใน e_flags
-mcond-ย้าย
เปิดใช้งานการใช้คำสั่ง Conditional-move (ค่าเริ่มต้น)
สวิตช์นี้ใช้สำหรับการดีบักคอมไพเลอร์เป็นหลัก และมีแนวโน้มว่าจะถูกลบออกในa
รุ่นในอนาคต
-mno-cond-ย้าย
ปิดการใช้งานคำสั่ง Conditional-move
สวิตช์นี้ใช้สำหรับการดีบักคอมไพเลอร์เป็นหลัก และมีแนวโน้มว่าจะถูกลบออกในa
รุ่นในอนาคต
-mscc
เปิดใช้งานการใช้คำสั่งการตั้งค่าแบบมีเงื่อนไข (ค่าเริ่มต้น)
สวิตช์นี้ใช้สำหรับการดีบักคอมไพเลอร์เป็นหลัก และมีแนวโน้มว่าจะถูกลบออกในa
รุ่นในอนาคต
-mno-scc
ปิดใช้งานการใช้คำสั่งการตั้งค่าแบบมีเงื่อนไข
สวิตช์นี้ใช้สำหรับการดีบักคอมไพเลอร์เป็นหลัก และมีแนวโน้มว่าจะถูกลบออกในa
รุ่นในอนาคต
-mcond-ผู้บริหาร
เปิดใช้งานการใช้การดำเนินการตามเงื่อนไข (ค่าเริ่มต้น)
สวิตช์นี้ใช้สำหรับการดีบักคอมไพเลอร์เป็นหลัก และมีแนวโน้มว่าจะถูกลบออกในa
รุ่นในอนาคต
-mno-cond-exec
ปิดการใช้งานการดำเนินการตามเงื่อนไข
สวิตช์นี้ใช้สำหรับการดีบักคอมไพเลอร์เป็นหลัก และมีแนวโน้มว่าจะถูกลบออกในa
รุ่นในอนาคต
-mvliw-สาขา
รัน pass เพื่อแพ็คสาขาลงในคำสั่ง VLIW (ค่าเริ่มต้น)
สวิตช์นี้ใช้สำหรับการดีบักคอมไพเลอร์เป็นหลัก และมีแนวโน้มว่าจะถูกลบออกในa
รุ่นในอนาคต
-mno-vliw-สาขา
อย่าเรียกใช้ pass เพื่อแพ็คสาขาลงในคำสั่ง VLIW
สวิตช์นี้ใช้สำหรับการดีบักคอมไพเลอร์เป็นหลัก และมีแนวโน้มว่าจะถูกลบออกในa
รุ่นในอนาคต
-mmulti-cond-exec
เปิดใช้งานการปรับให้เหมาะสมของ "&&" และ "||" ในการดำเนินการตามเงื่อนไข (ค่าเริ่มต้น)
สวิตช์นี้ใช้สำหรับการดีบักคอมไพเลอร์เป็นหลัก และมีแนวโน้มว่าจะถูกลบออกในa
รุ่นในอนาคต
-mno-multi-cond-exec
ปิดใช้งานการปรับให้เหมาะสมของ "&&" และ "||" ในการดำเนินการตามเงื่อนไข
สวิตช์นี้ใช้สำหรับการดีบักคอมไพเลอร์เป็นหลัก และมีแนวโน้มว่าจะถูกลบออกในa
รุ่นในอนาคต
-mnested-cond-exec
เปิดใช้งานการเพิ่มประสิทธิภาพการดำเนินการตามเงื่อนไขแบบซ้อน (ค่าเริ่มต้น)
สวิตช์นี้ใช้สำหรับการดีบักคอมไพเลอร์เป็นหลัก และมีแนวโน้มว่าจะถูกลบออกในa
รุ่นในอนาคต
-mno-ซ้อน-cond-exec
ปิดใช้งานการเพิ่มประสิทธิภาพการดำเนินการตามเงื่อนไขที่ซ้อนกัน
สวิตช์นี้ใช้สำหรับการดีบักคอมไพเลอร์เป็นหลัก และมีแนวโน้มว่าจะถูกลบออกในa
รุ่นในอนาคต
-moptimize-สมาชิก
สวิตช์นี้จะลบคำสั่ง "membar" ที่ซ้ำซ้อนออกจากโค้ดที่สร้างโดยคอมไพเลอร์
มันถูกเปิดใช้งานโดยค่าเริ่มต้น
-mno-เพิ่มประสิทธิภาพ-สมาชิก
สวิตช์นี้ปิดใช้งานการลบคำแนะนำ "membar" ที่ซ้ำซ้อนออกจาก .โดยอัตโนมัติ
รหัสที่สร้างขึ้น
-mtomcat-สถิติ
ทำให้แก๊สพิมพ์สถิติแมวตัวผู้
-mcpu=ซีพียู
เลือกประเภทโปรเซสเซอร์ที่จะสร้างโค้ด ค่าที่เป็นไปได้คือ frv, fr550,
แมวตัวผู้, fr500, fr450, fr405, fr400, fr300 และ ง่าย.
GNU / Linux Options
ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m มีการกำหนดตัวเลือกสำหรับเป้าหมาย GNU/Linux:
-มกลิบซี
ใช้ไลบรารี GNU C นี่เป็นค่าเริ่มต้นยกเว้น on *-*-ลินุกซ์-*uclibc* และ
*-*-ลินุกซ์-*แอนดรอยด์* เป้าหมาย
-muclibc
ใช้ไลบรารี uClibc C นี่คือค่าเริ่มต้นบน *-*-ลินุกซ์-*uclibc* เป้าหมาย
-mionic
ใช้ไลบรารี Bionic C นี่คือค่าเริ่มต้นบน *-*-ลินุกซ์-*แอนดรอยด์* เป้าหมาย
-แมนดรอยด์
คอมไพล์โค้ดที่เข้ากันได้กับแพลตฟอร์ม Android นี่คือค่าเริ่มต้นบน
*-*-ลินุกซ์-*แอนดรอยด์* เป้าหมาย
เมื่อทำการคอมไพล์ ตัวเลือกนี้จะเปิดใช้งาน -mionic, -fPIC, -fno-ข้อยกเว้น และ -fno-rti by
ค่าเริ่มต้น. เมื่อทำการเชื่อมโยง ตัวเลือกนี้จะทำให้ไดรเวอร์ GCC ส่งผ่านตัวเลือกเฉพาะของ Android
ไปยังตัวเชื่อมโยง สุดท้าย ตัวเลือกนี้ทำให้มาโครตัวประมวลผลล่วงหน้า "__ANDROID__" เป็น
ที่กำหนดไว้
-tno-android-cc
ปิดใช้งานเอฟเฟกต์การรวบรวมของ -แมนดรอยด์, กล่าวคือ, ไม่เปิดใช้งาน -mionic, -fPIC,
-fno-ข้อยกเว้น และ -fno-rti โดยค่าเริ่มต้น
-tno-android-ld
ปิดใช้งานการเชื่อมโยงเอฟเฟกต์ของ -แมนดรอยด์เช่น ส่งผ่านตัวเลือกการลิงก์ลินุกซ์มาตรฐานไปที่
ลิงค์เกอร์.
H8 / 300 Options
ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m มีการกำหนดตัวเลือกสำหรับการใช้งาน H8/300:
-mrelax
ย่อที่อยู่บางส่วนในเวลาลิงค์ ถ้าเป็นไปได้; ใช้ตัวเลือกลิงเกอร์
-ผ่อนคลาย.
-ม สร้างรหัสสำหรับ H8/300H
-นางสาว สร้างรหัสสำหรับ H8S
-ม สร้างรหัสสำหรับ H8S และ H8/300H ในโหมดปกติ ต้องใช้สวิตช์นี้
ด้วย -ม or -นางสาว.
-ms2600
สร้างรหัสสำหรับ H8S/2600 สวิตช์นี้ต้องใช้กับ -นางสาว.
-เม็กซ์
การลงทะเบียนแบบขยายจะถูกเก็บไว้ในสแต็กก่อนเรียกใช้ฟังก์ชันด้วย monitor
คุณลักษณะ. ตัวเลือกเริ่มต้นคือ -เม็กซ์. ตัวเลือกนี้ใช้ได้กับเป้าหมาย H8S เท่านั้น
-mno-exr
การลงทะเบียนแบบขยายจะไม่ถูกเก็บไว้ในสแต็กก่อนดำเนินการฟังก์ชั่นด้วย monitor
คุณลักษณะ. ตัวเลือกเริ่มต้นคือ -mno-exr. ตัวเลือกนี้ใช้ได้กับเป้าหมาย H8S เท่านั้น
-มิ้นต์32
ทำให้ข้อมูล "int" เป็น 32 บิตโดยค่าเริ่มต้น
-malign-300
บน H8/300H และ H8S ให้ใช้กฎการจัดตำแหน่งเดียวกันกับ H8/300 ค่าเริ่มต้น
สำหรับ H8/300H และ H8S คือการจัดแนวยาวและลอยบนขอบเขต 4 ไบต์
-malign-300 ทำให้จัดแนวบนขอบเขต 2 ไบต์ ตัวเลือกนี้ไม่มีผล
บน H8/300
HPPA Options
ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m มีการกำหนดตัวเลือกสำหรับคอมพิวเตอร์ตระกูล HPPA:
-มีนาคม=สถาปัตยกรรมประเภท
สร้างรหัสสำหรับสถาปัตยกรรมที่ระบุ ทางเลือกของ สถาปัตยกรรมประเภท เป็น
1.0 สำหรับ PA 1.0 1.1 สำหรับ PA 1.1 และ 2.0 สำหรับโปรเซสเซอร์ PA 2.0 อ้างถึง
/usr/lib/sched.models บนระบบ HP-UX เพื่อกำหนดตัวเลือกสถาปัตยกรรมที่เหมาะสม
สำหรับเครื่องของคุณ โค้ดที่คอมไพล์สำหรับสถาปัตยกรรมที่มีตัวเลขต่ำกว่าจะทำงานบนที่สูงขึ้น
สถาปัตยกรรมที่มีตัวเลขแต่ไม่ใช่ในทางกลับกัน
-mpa-risc-1-0
-mpa-risc-1-1
-mpa-risc-2-0
คำพ้องความหมายสำหรับ -มีนาคม=1.0, -มีนาคม=1.1และ -มีนาคม=2.0 ตามลำดับ
-mbig-สวิตช์
สร้างรหัสที่เหมาะสมสำหรับตารางสวิตช์ขนาดใหญ่ ใช้ตัวเลือกนี้เฉพาะในกรณีที่
แอสเซมเบลอร์/ลิงเกอร์บ่นเกี่ยวกับสาขาที่อยู่นอกขอบเขตภายในตารางสวิตช์
-mjump-ในความล่าช้า
เติมช่องหน่วงเวลาของการเรียกใช้ฟังก์ชันด้วยคำสั่งการข้ามแบบไม่มีเงื่อนไขโดยการแก้ไข
ตัวชี้กลับสำหรับการเรียกใช้ฟังก์ชันจะเป็นเป้าหมายของการกระโดดแบบมีเงื่อนไข
-mdisable-fpregs
ป้องกันการลงทะเบียนทศนิยมจากการใช้ในลักษณะใด ๆ นี่เป็นสิ่งจำเป็นสำหรับ
การรวบรวมเมล็ดที่ทำการสลับบริบทแบบสันหลังยาวของการลงทะเบียนทศนิยม ถ้า
คุณใช้ตัวเลือกนี้และพยายามดำเนินการทศนิยม คอมไพเลอร์
ยกเลิก
-mdisable-การจัดทำดัชนี
ป้องกันไม่ให้คอมไพเลอร์ใช้โหมดที่อยู่การทำดัชนี สิ่งนี้หลีกเลี่ยงบางอย่างค่อนข้าง
ปิดบังปัญหาเมื่อรวบรวมรหัสที่สร้าง MIG ภายใต้ MACH
-mno-space-regs
สร้างรหัสที่ถือว่าเป้าหมายไม่มีการลงทะเบียนพื้นที่ ซึ่งช่วยให้ GCC ไป
สร้างการโทรทางอ้อมได้เร็วขึ้นและใช้โหมดที่อยู่ดัชนีที่ไม่ได้ปรับขนาด
รหัสดังกล่าวเหมาะสำหรับระบบ PA ระดับ 0 และเมล็ด
-mfast-ทางอ้อมโทร
สร้างรหัสที่ถือว่าการโทรไม่ข้ามขอบเขตของพื้นที่ ซึ่งช่วยให้ GCC ไป
ปล่อยรหัสที่ทำการโทรทางอ้อมได้เร็วขึ้น
ตัวเลือกนี้ใช้ไม่ได้กับไลบรารีที่แบ่งใช้หรือฟังก์ชันที่ซ้อนกัน
-mfixed-ช่วง=ช่วงการลงทะเบียน
สร้างรหัสที่รักษาช่วงการลงทะเบียนที่กำหนดเป็นการลงทะเบียนคงที่ ทะเบียนคงที่
เป็นสิ่งที่ผู้จัดสรรการลงทะเบียนไม่สามารถใช้ได้ สิ่งนี้มีประโยชน์เมื่อรวบรวมเคอร์เนล
รหัส. ช่วงการลงทะเบียนถูกระบุเป็นสองรีจิสเตอร์คั่นด้วยเส้นประ หลายรายการ
สามารถระบุช่วงการลงทะเบียนโดยคั่นด้วยเครื่องหมายจุลภาค
-mlong-โหลดร้านค้า
สร้างลำดับการโหลดและจัดเก็บคำสั่ง 3 คำสั่งตามที่ HP-UX 10 . บางครั้งต้องการ
ลิงเกอร์ ซึ่งเทียบเท่ากับ +k ตัวเลือกสำหรับคอมไพเลอร์ของ HP
-mportable-รันไทม์
ใช้ข้อตกลงการโทรแบบพกพาที่เสนอโดย HP สำหรับระบบ ELF
-แก๊ส
เปิดใช้งานการใช้คำสั่งแอสเซมเบลอร์ GAS เท่านั้นที่เข้าใจ
-mschedule=ประเภทซีพียู
รหัสกำหนดการตามข้อจำกัดสำหรับประเภทเครื่อง ประเภทซีพียู. ทางเลือก
for ประเภทซีพียู เป็น 700 7100, 7100LC, 7200, 7300 และ 8000. เอ่ยถึง
/usr/lib/sched.models บนระบบ HP-UX เพื่อกำหนดตัวเลือกการตั้งเวลาที่เหมาะสมสำหรับ
เครื่องของคุณ การตั้งเวลาเริ่มต้นคือ 8000.
-mlinker-ตัวเลือก
เปิดใช้งานการเพิ่มประสิทธิภาพผ่านใน HP-UX linker สังเกตว่าสิ่งนี้ทำให้เกิดการดีบักเชิงสัญลักษณ์
เป็นไปไม่ได้. นอกจากนี้ยังทำให้เกิดจุดบกพร่องในตัวเชื่อมโยง HP-UX 8 และ HP-UX 9 ที่พวกเขา
ให้ข้อความแสดงข้อผิดพลาดปลอมเมื่อเชื่อมโยงบางโปรแกรม
-msoft-ลอย
สร้างเอาต์พุตที่มีการเรียกไลบรารีสำหรับจุดลอยตัว คำเตือน: ความจำเป็น
ไลบรารีไม่พร้อมใช้งานสำหรับเป้าหมาย HPPA ทั้งหมด โดยปกติสิ่งอำนวยความสะดวกของ
ใช้คอมไพเลอร์ C ปกติของเครื่อง แต่ไม่สามารถทำได้โดยตรงในการข้าม
การรวบรวม คุณต้องจัดเตรียมห้องสมุดที่เหมาะสมด้วยตนเอง
ฟังก์ชันสำหรับการคอมไพล์ข้าม
-msoft-ลอย เปลี่ยนรูปแบบการเรียกในไฟล์เอาต์พุต ดังนั้นจึงเป็นเพียง
มีประโยชน์ถ้าคุณคอมไพล์ ทั้งหมด ของโปรแกรมที่มีตัวเลือกนี้ โดยเฉพาะอย่างยิ่ง คุณต้อง
รวบรวม libgcc.a, ห้องสมุดที่มาพร้อมกับ GCC, กับ -msoft-ลอย เพื่อสิ่งนี้
ในการทำงาน
-msio
สร้างที่กำหนดไว้ล่วงหน้า "_SIO" สำหรับเซิร์ฟเวอร์ IO ค่าเริ่มต้นคือ -mwsio. สิ่งนี้ทำให้เกิด
กำหนดไว้ล่วงหน้า "__hp9000s700", "__hp9000s700__" และ "_WSIO" สำหรับเวิร์กสเตชัน IO
ตัวเลือกเหล่านี้มีอยู่ใน HP-UX และ HI-UX
-mgnu-ld
ใช้ตัวเลือกเฉพาะสำหรับ GNU ld. นี้ผ่านไป - แบ่งปัน ไปยัง ld เมื่อสร้างที่ใช้ร่วมกัน
ห้องสมุด. เป็นค่าเริ่มต้นเมื่อมีการกำหนดค่า GCC อย่างชัดเจนหรือโดยปริยายด้วย
ตัวเชื่อมโยง GNU ตัวเลือกนี้ไม่มีผลกับที่ ld ถูกเรียก; มันเปลี่ยนเฉพาะอะไร
พารามิเตอร์จะถูกส่งต่อไปยังสิ่งนั้น ld. ld ที่เรียกถูกกำหนดโดย
--กับ-ld กำหนดค่าตัวเลือก เส้นทางการค้นหาโปรแกรมของ GCC และสุดท้ายโดยผู้ใช้ เส้นทาง.
ตัวเชื่อมโยงที่ใช้โดย GCC สามารถพิมพ์ได้โดยใช้ ที่ `จีซีซี -print-prog-name=ld`. นี้
ตัวเลือกมีเฉพาะใน HP-UX GCC 64 บิตเท่านั้น เช่น กำหนดค่าด้วย
แรงม้าปา*64*-*-hpux*.
-mhp-ld
ใช้ตัวเลือกเฉพาะสำหรับ HP ld. นี้ผ่านไป -b ไปยัง ld เมื่อสร้างห้องสมุดที่ใช้ร่วมกัน
และผ่านไป +ยอมรับ ประเภทMismatch ไปยัง ld ในลิงค์ทั้งหมด เป็นค่าเริ่มต้นเมื่อ GCC เป็น
กำหนดค่าโดยชัดแจ้งหรือโดยปริยายด้วยตัวเชื่อมโยง HP ตัวเลือกนี้ไม่มีผล
ที่ ld ถูกเรียก; มันเปลี่ยนเฉพาะพารามิเตอร์ที่ส่งผ่านไปยังสิ่งนั้น ld. ld
ที่เรียกถูกกำหนดโดย --กับ-ld กำหนดค่าตัวเลือกการค้นหาโปรแกรมของ GCC
เส้นทางและสุดท้ายโดยผู้ใช้ เส้นทาง. ตัวเชื่อมโยงที่ใช้โดย GCC สามารถพิมพ์ได้โดยใช้
ที่ `จีซีซี -print-prog-name=ld`. ตัวเลือกนี้มีเฉพาะใน HP-UX . 64 บิตเท่านั้น
GCC คือกำหนดค่าด้วย แรงม้าปา*64*-*-hpux*.
-mlong-โทร
สร้างรหัสที่ใช้ลำดับการโทรยาว สิ่งนี้ทำให้มั่นใจได้ว่าการโทรจะทำได้เสมอ
เพื่อเข้าถึงต้นขั้วที่สร้างตัวเชื่อมโยง ค่าเริ่มต้นคือการสร้างสายยาวเฉพาะเมื่อ
ระยะห่างจากไซต์การโทรถึงจุดเริ่มต้นของฟังก์ชันหรือหน่วยการแปลเช่น
กรณีอาจเกินขีดจำกัดที่กำหนดไว้ล่วงหน้าซึ่งกำหนดโดยประเภทสาขาที่ใช้ NS
ขีด จำกัด สำหรับการโทรปกติคือ 7,600,000 และ 240,000 ไบต์ตามลำดับสำหรับ PA 2.0
และสถาปัตยกรรม PA 1.X Sibcalls ถูก จำกัด ไว้ที่ 240,000 ไบต์เสมอ
ระยะทางจะวัดจากจุดเริ่มต้นของฟังก์ชันเมื่อใช้
-ffunction-ส่วน ตัวเลือกหรือเมื่อใช้ -แก๊ส และ -mno-portable-รันไทม์ ตัวเลือก
ร่วมกันภายใต้ HP-UX พร้อมตัวเชื่อมโยง SOM
ปกติไม่พึงปรารถนาที่จะใช้ตัวเลือกนี้เนื่องจากจะทำให้ประสิทธิภาพลดลง อย่างไรก็ตาม,
อาจมีประโยชน์ในแอปพลิเคชันขนาดใหญ่ โดยเฉพาะอย่างยิ่งเมื่อใช้การเชื่อมโยงบางส่วนกับ
สร้างแอปพลิเคชัน
ประเภทของการโทรแบบยาวที่ใช้ขึ้นอยู่กับความสามารถของแอสเซมเบลอร์และลิงเกอร์
และประเภทของรหัสที่กำลังสร้าง ผลกระทบต่อระบบที่รองรับการใช้งานนาน
การโทรแบบสัมบูรณ์และความแตกต่างของสัญลักษณ์รูปยาวหรือการโทรแบบสัมพันธ์กับพีซีควรเป็น
ค่อนข้างเล็ก อย่างไรก็ตาม การโทรทางอ้อมจะใช้กับระบบ ELF แบบ 32 บิตในรหัส pic
และมันก็ค่อนข้างยาว
-มูนิกซ์=ยูนิกซ์-std
สร้างคอมไพเลอร์กำหนดล่วงหน้าและเลือก startfile สำหรับมาตรฐาน 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 และใหม่กว่า
-มูนิกซ์=93 ให้คำจำกัดความล่วงหน้าเหมือนกับ GCC 3.3 และ 3.4 -มูนิกซ์=95 ให้
กำหนดล่วงหน้าเพิ่มเติมสำหรับ "XOPEN_UNIX" และ "_XOPEN_SOURCE_EXTENDED" และ startfile
ยูนิกซ์ 95.o. -มูนิกซ์=98 ให้คำจำกัดความเพิ่มเติมสำหรับ "_XOPEN_UNIX"
"_XOPEN_SOURCE_EXTENDED", "_INCLUDE__STDC_A1_SOURCE" และ "_INCLUDE_XOPEN_SOURCE_500",
และ startfile ยูนิกซ์ 98.o.
มันเป็น สำคัญ โปรดทราบว่าตัวเลือกนี้จะเปลี่ยนอินเทอร์เฟซสำหรับไลบรารีต่างๆ
กิจวัตร นอกจากนี้ยังส่งผลต่อพฤติกรรมการทำงานของไลบรารี C ดังนั้น, สุดโต่ง
ต้องใช้ความระมัดระวังในการใช้ตัวเลือกนี้
รหัสห้องสมุดที่มีวัตถุประสงค์เพื่อใช้งานกับมาตรฐาน UNIX มากกว่าหนึ่งมาตรฐานต้องทดสอบ
ตั้งค่าและกู้คืนตัวแปร __xpg4_extend_mask ตามความเหมาะสม ซอฟต์แวร์ GNU ส่วนใหญ่
ไม่ได้ให้ความสามารถนี้
-nolibdld
ระงับการสร้างตัวเลือกลิงก์เพื่อค้นหา libdld.sl เมื่อ -คงที่ ตัวเลือกที่
ระบุไว้ใน HP-UX 10 และใหม่กว่า
-คงที่
การใช้งาน HP-UX ของ setlocale ใน libc มีการพึ่งพา libdld.sl ที่นั่น
ไม่ใช่เวอร์ชันเก็บถาวรของ libdld.sl ดังนั้น เมื่อ -คงที่ มีการระบุตัวเลือก
จำเป็นต้องใช้ตัวเลือกลิงก์พิเศษเพื่อแก้ไขการขึ้นต่อกันนี้
ใน HP-UX 10 และใหม่กว่า ไดรเวอร์ GCC จะเพิ่มตัวเลือกที่จำเป็นในการลิงก์ด้วย
libdld.sl เมื่อ -คงที่ มีการระบุตัวเลือก สิ่งนี้ทำให้ไบนารีที่ได้to
เป็นแบบไดนามิก บนพอร์ต 64 บิต ตัวเชื่อมโยงจะสร้างไบนารีแบบไดนามิกโดยค่าเริ่มต้นใน
กรณีใดๆ NS -nolibdld สามารถใช้ตัวเลือกเพื่อป้องกันไม่ให้ไดรเวอร์ GCC เพิ่ม
ตัวเลือกลิงก์เหล่านี้
-กระทู้
เพิ่มการรองรับมัลติเธรดด้วยปุ่ม ดีซี ด้าย ไลบรารีภายใต้ HP-UX ตัวเลือกนี้
ตั้งค่าแฟล็กสำหรับทั้งตัวประมวลผลล่วงหน้าและตัวเชื่อมโยง
อินเทล 386 และ เอเอ็มดี x86-64 Options
ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m ตัวเลือกถูกกำหนดไว้สำหรับคอมพิวเตอร์ตระกูล i386 และ x86-64:
-มีนาคม=ประเภทซีพียู
สร้างคำแนะนำสำหรับประเภทเครื่อง ประเภทซีพียู. ตรงกันข้ามกับ -mtune=ประเภทซีพียู,
ซึ่งเพียงปรับแต่งรหัสที่สร้างขึ้นสำหรับที่ระบุ ประเภทซีพียู, -มีนาคม=ประเภทซีพียู
อนุญาตให้ GCC สร้างรหัสที่อาจไม่ทำงานเลยบนโปรเซสเซอร์อื่นนอกเหนือจากตัวเดียว
ระบุไว้ ระบุ -มีนาคม=ประเภทซีพียู หมายถึง -mtune=ประเภทซีพียู.
ทางเลือกของ ประเภทซีพียู คือ:
พื้นเมือง
สิ่งนี้จะเลือก CPU เพื่อสร้างรหัส ณ เวลารวบรวมโดยกำหนด
ประเภทโปรเซสเซอร์ของเครื่องคอมไพล์ โดยใช้ -march=เจ้าของภาษา เปิดใช้งานทั้งหมด
ชุดย่อยของคำสั่งที่รองรับโดยเครื่องโลคัล (ดังนั้น ผลลัพธ์อาจไม่ทำงาน
บนเครื่องต่างๆ) โดยใช้ -mtune=เจ้าของภาษา สร้างรหัสที่ปรับให้เหมาะสมสำหรับท้องถิ่น
เครื่องภายใต้ข้อจำกัดของชุดคำสั่งที่เลือก
i386
ซีพียู Intel i386 ดั้งเดิม
i486
ซีพียูอินเทล i486 (ไม่มีการตั้งเวลาสำหรับชิปนี้)
i586
Pentium
ซีพียู Intel Pentium ที่ไม่รองรับ MMX
เพนเทียม-mmx
Intel Pentium MMX CPU ที่ใช้ Pentium core พร้อมรองรับชุดคำสั่ง MMX
เพนเทียมโปร
ซีพียู Intel Pentium Pro
i686
เมื่อใช้กับ -มีนาคม, ชุดคำสั่ง Pentium Pro ถูกใช้ ดังนั้นโค้ดจึงรัน
ในชิปตระกูล i686 ทั้งหมด เมื่อใช้กับ -mtune, มีความหมายเดียวกับ
ทั่วไป.
เพนเทียม 2
ซีพียู Intel Pentium II ที่ใช้ Pentium Pro core พร้อมรองรับชุดคำสั่ง MMX
เพนเทียม 3
เพนเทียม3ม
ซีพียู Intel Pentium III ที่ใช้ Pentium Pro core พร้อมชุดคำสั่ง MMX และ SSE
สนับสนุน
เพนเทียม-m
อินเทล เพนเทียม เอ็ม; ซีพียู Intel Pentium III รุ่นพลังงานต่ำพร้อม MMX, SSE และ SSE2
การสนับสนุนชุดคำสั่ง ใช้โดยโน้ตบุ๊ก Centrino
เพนเทียม 4
เพนเทียม4ม
รองรับซีพียู Intel Pentium 4 พร้อมชุดคำสั่ง MMX, SSE และ SSE2
เพรสคอตต์
เวอร์ชันปรับปรุงของ Intel Pentium 4 CPU พร้อมคำสั่ง MMX, SSE, SSE2 และ SSE3
ตั้งค่าการสนับสนุน
โนโคนา
เวอร์ชันปรับปรุงของ Intel Pentium 4 CPU พร้อมส่วนขยาย 64 บิต, MMX, SSE, SSE2 และ
รองรับชุดคำสั่ง SSE3
core2
Intel Core 2 CPU พร้อมส่วนขยาย 64 บิต, MMX, SSE, SSE2, SSE3 และ SSSE3
การสนับสนุนชุดคำสั่ง
corei7
Intel Core i7 CPU พร้อมส่วนขยาย 64 บิต, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 และ
รองรับชุดคำสั่ง SSE4.2
corei7-avx
ซีพียู Intel Core i7 พร้อมส่วนขยาย 64 บิต, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
รองรับชุดคำสั่ง SSE4.2, AVX, AES และ PCLMUL
แกน-avx-i
Intel Core CPU พร้อมส่วนขยาย 64 บิต, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
รองรับชุดคำสั่ง SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND และ F16C
แกน-avx2
Intel Core CPU พร้อมส่วนขยาย 64 บิต, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2 และ F16C
การสนับสนุนชุดคำสั่ง
อะตอม
Intel Atom CPU พร้อมส่วนขยาย 64 บิต, MOVBE, MMX, SSE, SSE2, SSE3 และ SSSE3
การสนับสนุนชุดคำสั่ง
k6 AMD K6 CPU พร้อมชุดคำสั่ง MMX
k6-2
k6-3
เวอร์ชันปรับปรุงของ AMD K6 CPU พร้อม MMX และ 3DNow! การสนับสนุนชุดคำสั่ง
Athlon
แอธลอน-tbird
ซีพียู AMD Athlon พร้อม MMX, 3dNOW!, ปรับปรุง 3DNow! และคำแนะนำในการดึงข้อมูลล่วงหน้าของ SSE
สนับสนุน
แอธลอน-4
แอธลอน-xp
แอธลอน-mp
ปรับปรุงซีพียู AMD Athlon ด้วย MMX, 3DNow!, ปรับปรุง 3DNow! และคำแนะนำ SSE ฉบับสมบูรณ์
ตั้งค่าการสนับสนุน
k8
opterone
แอธลอน64
แอธลอน-fx
โปรเซสเซอร์ที่ใช้คอร์ AMD K8 พร้อมรองรับชุดคำสั่ง x86-64 รวมถึง
โปรเซสเซอร์ AMD Opteron, Athlon 64 และ Athlon 64 FX (สิ่งนี้ supersets MMX,
SSE, SSE2, 3DNow!, ปรับปรุง 3DNow! และส่วนขยายชุดคำสั่ง 64 บิต)
k8-sse3
ออพเทอรอน-sse3
แอทลอน64-sse3
คอร์ AMD K8 รุ่นปรับปรุงพร้อมรองรับชุดคำสั่ง SSE3
แอมดแฟม10
บาร์เซโลนา
ซีพียูที่ใช้คอร์ 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
ซีพียู AMD Family 15h core ที่รองรับชุดคำสั่ง x86-64 (นี้
ตั้งค่า BMI, TBM, F16C, FMA, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2,
SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM และส่วนขยายชุดคำสั่ง 64 บิต)
bdver3
ซีพียู AMD Family 15h core ที่รองรับชุดคำสั่ง x86-64 (นี้
ตั้งค่า BMI, TBM, F16C, FMA, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2,
SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM และส่วนขยายชุดคำสั่ง 64 บิต
btver1
ซีพียูที่ใช้คอร์ AMD Family 14h ที่รองรับชุดคำสั่ง x86-64 (นี้
supersets 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 บิต
วินชิป-c6
IDT WinChip C6 CPU จัดการในลักษณะเดียวกับ i486 พร้อมชุดคำสั่ง MMX เพิ่มเติม
สนับสนุน
วินชิป2
IDT WinChip 2 CPU จัดการในลักษณะเดียวกับ i486 พร้อม MMX และ 3DNow เพิ่มเติม!
การสนับสนุนชุดคำสั่ง
c3 ผ่านซีพียู C3 พร้อม MMX และ 3DNow! การสนับสนุนชุดคำสั่ง (ไม่มีกำหนดการคือ
ใช้สำหรับชิปนี้)
c3-2
ซีพียู VIA C3-2 (Nehemiah/C5XL) พร้อมรองรับชุดคำสั่ง MMX และ SSE (เลขที่
มีการใช้การตั้งเวลาสำหรับชิปนี้)
Geode
โปรเซสเซอร์ฝังตัว AMD Geode พร้อม MMX และ 3DNow! การสนับสนุนชุดคำสั่ง
-mtune=ประเภทซีพียู
ปรับไปที่ ประเภทซีพียู ทุกอย่างที่เกี่ยวข้องกับโค้ดที่สร้างขึ้น ยกเว้น ABI
และชุดคำสั่งที่ใช้ได้ ในขณะที่เลือกเฉพาะ ประเภทซีพียู ตารางเวลา
สิ่งที่เหมาะสมสำหรับชิปนั้น ๆ คอมไพเลอร์ไม่ได้สร้างรหัสใด ๆ
ที่ไม่สามารถรันบนประเภทเครื่องเริ่มต้นได้ เว้นแต่คุณจะใช้ a -มีนาคม=ประเภทซีพียู ตัวเลือก
ตัวอย่างเช่น หากกำหนดค่า GCC สำหรับ i686-pc-linux-gnu แล้ว -mtune=เพนเทียม4 สร้าง
โค้ดที่ปรับแต่งสำหรับ Pentium 4 แต่ยังคงทำงานบนเครื่อง i686
ทางเลือกของ ประเภทซีพียู เหมือนกับสำหรับ -มีนาคม. นอกจากนี้, -mtune รองรับและ
ทางเลือกเพิ่มเติมสำหรับ ประเภทซีพียู:
ทั่วไป
สร้างโค้ดที่ปรับให้เหมาะสมสำหรับโปรเซสเซอร์ IA32/AMD64/EM64T ทั่วไป ถ้าคุณ
รู้ CPU ที่รหัสของคุณจะทำงาน จากนั้นคุณควรใช้ที่สอดคล้องกัน
-mtune or -มีนาคม ตัวเลือกแทน -mtune=ทั่วไป. แต่ถ้าไม่รู้
ว่าผู้ใช้ CPU ของแอปพลิเคชันของคุณจะมีเท่าไหร่ คุณควรใช้สิ่งนี้
ตัวเลือก
เมื่อมีการปรับใช้โปรเซสเซอร์ใหม่ในตลาด พฤติกรรมของตัวเลือกนี้
จะเปลี่ยน. ดังนั้น หากคุณอัปเกรดเป็น GCC เวอร์ชันใหม่กว่า การสร้างโค้ด
ควบคุมโดยตัวเลือกนี้จะเปลี่ยนเพื่อสะท้อนถึงโปรเซสเซอร์ที่มากที่สุด
ทั่วไปในขณะที่เผยแพร่ GCC เวอร์ชันดังกล่าว
ไม่มี -มีนาคม=ทั่วไป ตัวเลือกเพราะ -มีนาคม หมายถึงชุดคำสั่ง
คอมไพเลอร์สามารถใช้ได้ และไม่มีชุดคำสั่งทั่วไปที่ใช้ได้กับทุกคน
โปรเซสเซอร์ ในทางตรงกันข้าม, -mtune หมายถึงโปรเซสเซอร์ (หรือในกรณีนี้
คอลเลกชันของโปรเซสเซอร์) ซึ่งโค้ดได้รับการปรับให้เหมาะสม
-mcpu=ประเภทซีพียู
คำพ้องความหมายที่คัดค้านสำหรับ -mtune.
-mfpmath=หน่วย
สร้างเลขทศนิยมสำหรับหน่วยที่เลือก หน่วย. ทางเลือกของ หน่วย คือ:
387 ใช้ตัวประมวลผลร่วมจุดลอยตัวมาตรฐาน 387 ที่มีอยู่ในชิปส่วนใหญ่
และเลียนแบบเป็นอย่างอื่น โค้ดที่คอมไพล์ด้วยตัวเลือกนี้ทำงานเกือบทุกที่
ผลลัพธ์ชั่วคราวคำนวณด้วยความแม่นยำ 80 บิตแทนความแม่นยำ
กำหนดโดยประเภททำให้ได้ผลลัพธ์ที่แตกต่างกันเล็กน้อยเมื่อเทียบกับส่วนใหญ่
ชิปอื่นๆ ดู -ลอยเก็บ สำหรับคำอธิบายโดยละเอียดเพิ่มเติม
นี่คือตัวเลือกเริ่มต้นสำหรับคอมไพเลอร์ i386
SSE ใช้คำสั่งทศนิยมสเกลาร์ที่มีอยู่ในชุดคำสั่ง SSE นี้
ชุดคำสั่งรองรับโดย Pentium III และชิปที่ใหม่กว่า และใน AMD line
โดย Athlon-4, Athlon XP และชิป Athlon MP SSE . เวอร์ชันก่อนหน้า
ชุดคำสั่งรองรับเฉพาะเลขคณิตแบบแม่นยำเดียว ดังนั้น เลขคู่และ
การคำนวณที่มีความแม่นยำแบบขยายยังคงใช้ 387 เวอร์ชันที่ใหม่กว่า ปัจจุบัน
เฉพาะในชิป Pentium 4 และ AMD x86-64 เท่านั้นที่รองรับการคำนวณแบบ double-precision ด้วย
สำหรับคอมไพเลอร์ i386 คุณต้องใช้ -มีนาคม=ประเภทซีพียู, -msse or -mse2 เปลี่ยนเป็น
เปิดใช้งานส่วนขยาย SSE และทำให้ตัวเลือกนี้มีประสิทธิภาพ สำหรับคอมไพเลอร์ x86-64
ส่วนขยายเหล่านี้เปิดใช้งานโดยค่าเริ่มต้น
โค้ดผลลัพธ์ควรจะเร็วกว่ามากในกรณีส่วนใหญ่และ
หลีกเลี่ยงปัญหาความไม่แน่นอนของตัวเลขของรหัส 387 แต่อาจทำลายบางส่วนที่มีอยู่
รหัสที่คาดว่าชั่วคราวจะเป็น 80 บิต
นี่เป็นตัวเลือกเริ่มต้นสำหรับคอมไพเลอร์ x86-64
เอสเอส,387
เอสเอส+387
ทั้งสอง
พยายามใช้ชุดคำสั่งทั้งสองพร้อมกัน สิ่งนี้มีประสิทธิภาพเพิ่มขึ้นเป็นสองเท่า
จำนวนรีจิสเตอร์ที่มีอยู่ และบนชิปที่มีหน่วยดำเนินการแยกต่างหากสำหรับ 387
และ SSE ทรัพยากรการดำเนินการด้วย ใช้ตัวเลือกนี้อย่างระมัดระวัง เพราะมันยังคง
ทดลอง เนื่องจากตัวจัดสรรการลงทะเบียน GCC ไม่ได้แยกแบบจำลอง
หน่วยการทำงานที่ดีส่งผลให้ประสิทธิภาพการทำงานไม่เสถียร
-มาสม์=ภาษาถิ่น
คำแนะนำการประกอบเอาท์พุตโดยใช้ที่เลือกไว้ ภาษาถิ่น. ตัวเลือกที่รองรับคือ Intel or
ไปยัง (ค่าเริ่มต้น). ดาร์วินไม่สนับสนุน Intel.
-mieee-fp
-mno-ieee-fp
ควบคุมว่าคอมไพเลอร์ใช้การเปรียบเทียบจุดทศนิยมของ IEEE หรือไม่ เหล่านี้
จัดการกรณีที่ผลการเปรียบเทียบไม่เรียงลำดับอย่างถูกต้อง
-msoft-ลอย
สร้างเอาต์พุตที่มีการเรียกไลบรารีสำหรับจุดลอยตัว
คำเตือน: ไลบรารีที่จำเป็นไม่ได้เป็นส่วนหนึ่งของ GCC โดยปกติสิ่งอำนวยความสะดวกของ
ใช้คอมไพเลอร์ C ปกติของเครื่อง แต่ไม่สามารถทำได้โดยตรงในการข้าม
การรวบรวม คุณต้องจัดเตรียมห้องสมุดที่เหมาะสมด้วยตนเอง
ฟังก์ชันสำหรับการคอมไพล์ข้าม
บนเครื่องที่ฟังก์ชันส่งคืนผลลัพธ์ทศนิยมในการลงทะเบียน 80387
stack opcodes ทศนิยมบางส่วนอาจถูกปล่อยออกมาแม้ว่า -msoft-ลอย ถูกนำมาใช้.
-mno-fp-ret-in-387
อย่าใช้การลงทะเบียน FPU เพื่อส่งกลับค่าของฟังก์ชัน
แบบแผนการเรียกปกติมีฟังก์ชันส่งคืนค่าประเภท "float" และ "double"
ในการลงทะเบียน FPU แม้ว่าจะไม่มี FPU แนวคิดก็คือระบบปฏิบัติการ
ควรเลียนแบบ FPU
ทางเลือก -mno-fp-ret-in-387 ทำให้ค่าดังกล่าวถูกส่งกลับใน CPU ธรรมดา
ลงทะเบียนแทน
-mno-fancy-คณิต-387
อีมูเลเตอร์ 387 ตัวไม่รองรับคำสั่ง "sin", "cos" และ "sqrt" สำหรับ
387. ระบุตัวเลือกนี้เพื่อหลีกเลี่ยงการสร้างคำแนะนำเหล่านั้น ตัวเลือกนี้คือ
ค่าเริ่มต้นบน FreeBSD, OpenBSD และ NetBSD ตัวเลือกนี้จะถูกแทนที่เมื่อ -มีนาคม
แสดงว่า CPU เป้าหมายมี FPU เสมอ ดังนั้นคำสั่งจึงไม่จำเป็น
การจำลอง คำแนะนำเหล่านี้จะไม่ถูกสร้างขึ้นเว้นแต่คุณจะใช้
-funsafe-คณิตศาสตร์-optimizations สวิตซ์.
-malign-ดับเบิ้ล
-mno-จัด-double
ควบคุมว่า GCC จะจัดเรียงตัวแปร "double", "long double" และ "long long" บน a . หรือไม่
ขอบเขตสองคำหรือขอบเขตหนึ่งคำ การจัดตำแหน่งตัวแปร "คู่" บนคำสองคำ
ขอบเขตสร้างรหัสที่ทำงานเร็วขึ้นบ้างบน Pentium โดยมีค่าใช้จ่ายเพิ่มเติม
หน่วยความจำ
บน x86-64 -malign-ดับเบิ้ล ถูกเปิดใช้งานโดยค่าเริ่มต้น
คำเตือน: หากคุณใช้ไฟล์ -malign-ดับเบิ้ล สวิตช์โครงสร้างที่มีประเภทข้างต้น
มีการจัดตำแหน่งที่แตกต่างจากข้อกำหนดของอินเทอร์เฟซไบนารีของแอปพลิเคชันที่เผยแพร่
สำหรับ 386 และไม่ใช่ไบนารีที่เข้ากันได้กับโครงสร้างในโค้ดที่คอมไพล์โดยไม่มี
สวิตช์นั้น
-m96bit-ยาวสองเท่า
-m128bit-ยาวสองเท่า
สวิตช์เหล่านี้ควบคุมขนาดของประเภท "long double" แอปพลิเคชั่น i386 ไบนารี
อินเทอร์เฟซระบุขนาดเป็น 96 บิต ดังนั้น -m96bit-ยาวสองเท่า เป็นค่าเริ่มต้นใน
โหมด 32 บิต
สถาปัตยกรรมสมัยใหม่ (Pentium และใหม่กว่า) ชอบ "long double" เพื่อให้สอดคล้องกับ 8-
หรือขอบ 16 ไบต์ ในอาร์เรย์หรือโครงสร้างที่สอดคล้องกับ ABI นี่ไม่ใช่
เป็นไปได้. ดังนั้นการระบุ -m128bit-ยาวสองเท่า จัดแนว "long double" เป็น 16-byte
ขอบเขตโดยการเติม "long double" ด้วยศูนย์ 32 บิตเพิ่มเติม
ในคอมไพเลอร์ x86-64 -m128bit-ยาวสองเท่า เป็นตัวเลือกเริ่มต้นเป็นABI
ระบุว่า "long double" ถูกจัดแนวบนขอบเขต 16 ไบต์
โปรดสังเกตว่าไม่มีตัวเลือกใดที่เปิดใช้งานความแม่นยำพิเศษเหนือมาตรฐาน x87
80 บิตสำหรับ "long double"
คำเตือน: หากคุณลบล้างค่าเริ่มต้นสำหรับ ABI เป้าหมาย ค่านี้จะเปลี่ยนแปลงขนาด
ของโครงสร้างและอาร์เรย์ที่มีตัวแปร "long double" เช่นเดียวกับการปรับเปลี่ยน
แบบแผนการเรียกฟังก์ชันสำหรับฟังก์ชันที่ใช้ "long double" ดังนั้นพวกเขาจึงไม่
เข้ากันได้กับไบนารีด้วยโค้ดที่คอมไพล์โดยไม่มีสวิตช์นั้น
-mlong-double-64
-mlong-double-80
สวิตช์เหล่านี้ควบคุมขนาดของประเภท "long double" ขนาด 64 บิตทำให้
ประเภท "long double" เทียบเท่ากับประเภท "double" นี่เป็นค่าเริ่มต้นสำหรับ Bionic C
ห้องสมุด.
คำเตือน: หากคุณลบล้างค่าเริ่มต้นสำหรับ ABI เป้าหมาย ค่านี้จะเปลี่ยนแปลงขนาด
ของโครงสร้างและอาร์เรย์ที่มีตัวแปร "long double" เช่นเดียวกับการปรับเปลี่ยน
แบบแผนการเรียกฟังก์ชันสำหรับฟังก์ชันที่ใช้ "long double" ดังนั้นพวกเขาจึงไม่
เข้ากันได้กับไบนารีด้วยโค้ดที่คอมไพล์โดยไม่มีสวิตช์นั้น
-mlarge-data-threshold=ธรณีประตู
เมื่อ -mcmodel=กลาง ระบุวัตถุข้อมูลที่มีขนาดใหญ่กว่า ธรณีประตู อยู่ใน
ส่วนข้อมูลขนาดใหญ่ ค่านี้ต้องเหมือนกันในทุกอ็อบเจ็กต์ที่เชื่อมโยงเข้า
ไบนารีและค่าเริ่มต้นเป็น 65535
-mrtd
ใช้แบบแผนการเรียกฟังก์ชันที่แตกต่างกัน ซึ่งในฟังก์ชันที่ใช้ค่าคงที่
จำนวนอาร์กิวเมนต์ส่งคืนด้วย "ret นัม" คำสั่งซึ่งแสดงข้อโต้แย้งของพวกเขา
ขณะกลับมา สิ่งนี้จะบันทึกหนึ่งคำสั่งในผู้โทรเนื่องจากไม่จำเป็นต้อง
ป๊อปอาร์กิวเมนต์ที่นั่น
คุณสามารถระบุให้แต่ละฟังก์ชันถูกเรียกด้วยลำดับการเรียกนี้ด้วย
คุณลักษณะของฟังก์ชัน stdcall. คุณยังสามารถแทนที่ -mrtd ตัวเลือกโดยใช้
ลักษณะการทำงาน ซีดี.
คำเตือน: แบบแผนการเรียกนี้เข้ากันไม่ได้กับแบบปกติที่ใช้บน Unix
ดังนั้นคุณจึงไม่สามารถใช้งานได้หากต้องการเรียกใช้ไลบรารีที่คอมไพล์ด้วยคอมไพเลอร์ Unix
นอกจากนี้ คุณต้องจัดเตรียมต้นแบบฟังก์ชันสำหรับฟังก์ชันทั้งหมดที่ใช้ตัวแปร
จำนวนอาร์กิวเมนต์ (รวมถึง "printf"); มิฉะนั้นจะสร้างรหัสที่ไม่ถูกต้องสำหรับ
เรียกใช้ฟังก์ชันเหล่านั้น
นอกจากนี้โค้ดที่ผิดพลาดอย่างร้ายแรงจะส่งผลหากคุณเรียกใช้ฟังก์ชันที่มีจำนวนมากเกินไป
อาร์กิวเมนต์ (โดยปกติ อาร์กิวเมนต์เพิ่มเติมจะถูกละเว้นอย่างไม่เป็นอันตราย)
-MregParm =NUM
ควบคุมจำนวนรีจิสเตอร์ที่ใช้ส่งอาร์กิวเมนต์จำนวนเต็ม โดยค่าเริ่มต้น no
รีจิสเตอร์ใช้สำหรับส่งผ่านอาร์กิวเมนต์ และสามารถใช้รีจิสเตอร์ได้สูงสุด 3 รายการ คุณสามารถ
ควบคุมพฤติกรรมนี้สำหรับฟังก์ชันเฉพาะโดยใช้แอตทริบิวต์ของฟังก์ชัน รีแพร์.
คำเตือน: หากคุณใช้สวิตช์นี้และ NUM ไม่ใช่ศูนย์ ดังนั้นคุณต้องสร้างโมดูลทั้งหมด
ที่มีค่าเท่ากัน รวมถึงห้องสมุดต่างๆ ซึ่งรวมถึงไลบรารีระบบและ
โมดูลเริ่มต้น
-msseregparm
ใช้การลงทะเบียน SSE ผ่านข้อตกลงสำหรับทุ่นและอาร์กิวเมนต์คู่และคืนค่า
คุณสามารถควบคุมลักษณะการทำงานนี้สำหรับฟังก์ชันเฉพาะได้โดยใช้แอตทริบิวต์ของฟังก์ชัน
sseregparm.
คำเตือน: หากคุณใช้สวิตช์นี้ คุณต้องสร้างโมดูลทั้งหมดที่มีค่าเท่ากัน
รวมถึงห้องสมุดใด ๆ ซึ่งรวมถึงไลบรารีระบบและโมดูลการเริ่มต้นระบบ
-mvect8-ret-ในเมม
ส่งคืนเวกเตอร์ 8 ไบต์ในหน่วยความจำแทนการลงทะเบียน MMX นี่คือค่าเริ่มต้นบน
Solaris@tie{}8 และ 9 และ VxWorks เพื่อให้ตรงกับ ABI ของคอมไพเลอร์ Sun Studio จนถึง
เวอร์ชัน 12. คอมไพเลอร์เวอร์ชันที่ใหม่กว่า (เริ่มต้นด้วย Studio 12 Update@tie{}1) follow
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, the -mstackrealign ตัวเลือกสร้าง an
อารัมภบทและบทส่งท้ายทางเลือกที่ปรับรันไทม์สแต็กใหม่ หากจำเป็น นี้
รองรับการผสมรหัสดั้งเดิมที่จัดตำแหน่งสแต็ก 4 ไบต์กับรหัสสมัยใหม่ที่
รักษาการจัดตำแหน่งสแต็ก 16 ไบต์สำหรับความเข้ากันได้ของ SSE ดูเพิ่มเติมที่แอตทริบิวต์
"force_align_arg_pointer" ใช้ได้กับแต่ละฟังก์ชัน
-mpreferred-stack-ขอบเขต=NUM
พยายามจัดขอบเขตสแต็กให้อยู่ในแนวเดียวกับ 2 ที่ยกขึ้นเป็น NUM ขอบเขตไบต์ ถ้า
-mpreferred-stack-ขอบเขต ไม่ได้ระบุ ค่าเริ่มต้นคือ 4 (16 ไบต์หรือ 128 บิต)
คำเตือน: เมื่อสร้างโค้ดสำหรับสถาปัตยกรรม x86-64 ด้วยส่วนขยาย SSE
พิการ, -mpreferred-stack-boundary=3 สามารถใช้เพื่อจัดแนวขอบสแต็กได้
ถึง 8 ไบต์ขอบเขต เนื่องจาก x86-64 ABI ต้องการการจัดตำแหน่งสแต็ก 16 ไบต์ นี่คือ ABI
เข้ากันไม่ได้และตั้งใจที่จะใช้ในสภาพแวดล้อมที่มีการควบคุมซึ่งมีพื้นที่กองซ้อน
ข้อจำกัดที่สำคัญ ตัวเลือกนี้จะนำไปสู่รหัสที่ไม่ถูกต้องเมื่อคอมไพล์ฟังก์ชัน
ด้วยการจัดตำแหน่งสแต็ก 16 ไบต์ (เช่น ฟังก์ชันจากไลบรารีมาตรฐาน) เรียกว่า
ด้วยกองซ้อนที่ไม่ถูกต้อง ในกรณีนี้ คำแนะนำ SSE อาจทำให้หน่วยความจำไม่ตรงตำแหน่ง
กับดักการเข้าถึง นอกจากนี้ อาร์กิวเมนต์ตัวแปรจะได้รับการจัดการอย่างไม่ถูกต้องสำหรับ 16 byte
จัดแนววัตถุ (รวมถึง x87 long double และ __int128) ซึ่งนำไปสู่ผลลัพธ์ที่ไม่ถูกต้อง
คุณต้องสร้างโมดูลทั้งหมดด้วย -mpreferred-stack-boundary=3รวมถึงห้องสมุดต่างๆ
ซึ่งรวมถึงไลบรารีระบบและโมดูลการเริ่มต้นระบบ
-mincoming-stack-boundary=NUM
สมมติว่าสแต็กขาเข้าถูกจัดตำแหน่งให้เป็น 2 ที่ยกขึ้นเป็น NUM ขอบเขตไบต์ ถ้า
-mincoming-stack-ขอบเขต ไม่ได้ระบุ, ที่กำหนดโดย
-mpreferred-stack-ขอบเขต ถูกนำมาใช้.
สำหรับ Pentium และ Pentium Pro ค่า "double" และ "long double" ควรจัดแนวให้ตรงกับ an
ขอบเขต 8 ไบต์ (ดู -malign-ดับเบิ้ล) หรือประสบกับประสิทธิภาพของรันไทม์ที่สำคัญ
บทลงโทษ บน Pentium III ประเภทข้อมูล Streaming SIMD Extension (SSE) "__m128" อาจ
ทำงานไม่ถูกต้องหากไม่ได้จัดตำแหน่งแบบ 16 ไบต์
เพื่อให้แน่ใจว่ามีการจัดตำแหน่งที่ถูกต้องของค่านี้บนสแต็ก ขอบเขตสแต็กจะต้องเป็น
จัดตำแหน่งตามที่กำหนดโดยค่าใดๆ ที่เก็บไว้ในสแต็ก นอกจากนี้ทุกฟังก์ชั่น
ต้องสร้างขึ้นเพื่อให้สแต็กอยู่ในแนวเดียวกัน จึงเรียกฟังก์ชัน
คอมไพล์ด้วยขอบเขตสแต็กที่ต้องการที่สูงกว่าจากฟังก์ชันที่คอมไพล์ด้วยค่าที่ต่ำกว่า
ขอบเขตสแต็กที่ต้องการมักจะไม่จัดแนวสแต็ก ขอแนะนำว่า
ไลบรารีที่ใช้การเรียกกลับจะใช้การตั้งค่าเริ่มต้นเสมอ
การจัดตำแหน่งพิเศษนี้ใช้พื้นที่สแต็กเพิ่มเติม และโดยทั่วไปจะเพิ่มโค้ด
ขนาด. โค้ดที่ไวต่อการใช้พื้นที่สแต็ก เช่น ระบบฝังตัวและ
เคอร์เนลระบบปฏิบัติการอาจต้องการลดการจัดตำแหน่งที่ต้องการเป็น
-mpreferred-stack-boundary=2.
-mmmmx
-mno-mmx
-msse
-mno-sse
-mse2
-mno-sse2
-mse3
-mno-sse3
-mssse3
-mno-ssse3
-mse4.1
-mno-sse4.1
-mse4.2
-mno-sse4.2
-mse4
-mno-sse4
-mavx
-mno-avx
-mavx2
-mno-avx2
-แม่
-mno-แอ
-mclmul
-mno-pcmlul
-mfsgsฐาน
-mno-fsgsbase
-mrdrd
-mno-rdrnd
-mf16c
-mno-f16c
-mfma
-mno-fma
-mse4a
-mno-sse4a
-mfma4
-mno-fma4
-mxop
-mno-xop
-mlwp
-mno-lwp
-m3dnow
-mno-3dnow
-mpopcnt
-mno-popcnt
-แมม
-mno-abm
-mbmi
-mbmi2
-mno-bmi
-mno-bmi2
-mlzcnt
-mno-lzcnt
-mrtm
-เอ็มทีบีเอ็ม
-mno-tbm
สวิตช์เหล่านี้เปิดหรือปิดการใช้คำแนะนำใน MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, F16C, FMA, SSE4A, FMA4, XOP,
LWP, ABM, BMI, BMI2, LZCNT, RTM หรือ 3DNow! ชุดคำสั่งขยาย เหล่านี้
ส่วนขยายยังมีให้บริการเป็นฟังก์ชันในตัว: ดู X86 Built-in ฟังก์ชั่นสำหรับ
รายละเอียดของฟังก์ชันที่เปิดใช้งานและปิดใช้งานโดยสวิตช์เหล่านี้
เพื่อสร้างคำสั่ง SSE/SSE2 โดยอัตโนมัติจากรหัสทศนิยม (ในทางตรงกันข้าม
ถึง 387 คำสั่ง) ดู -mfpmath=sse.
GCC กดคำสั่ง SSEx เมื่อ -mavx ถูกนำมาใช้. แทนที่จะสร้าง AVX . ใหม่
คำแนะนำหรือ AVX เทียบเท่าสำหรับคำสั่ง SSEx ทั้งหมดเมื่อจำเป็น
ตัวเลือกเหล่านี้ทำให้ GCC สามารถใช้คำแนะนำเพิ่มเติมเหล่านี้ในโค้ดที่สร้างขึ้นได้ แม้กระทั่ง
ไม่มี -mfpmath=sse. แอพพลิเคชั่นที่ทำการตรวจจับรันไทม์ซีพียูต้องคอมไพล์
แยกไฟล์สำหรับแต่ละสถาปัตยกรรมที่รองรับ โดยใช้แฟล็กที่เหมาะสม ใน
โดยเฉพาะไฟล์ที่มีรหัสตรวจจับ CPU ควรคอมไพล์โดยไม่ต้อง
ตัวเลือกเหล่านี้
-mcld
ตัวเลือกนี้สั่งให้ GCC ปล่อยคำสั่ง "cld" ในบทนำของฟังก์ชัน
ที่ใช้คำสั่งสตริง คำแนะนำสตริงขึ้นอยู่กับแฟล็ก DF เพื่อเลือก
ระหว่างโหมด autoincrement หรือ autodecrement ในขณะที่ ABI ระบุแฟล็ก DF เป็น
ถูกล้างในการป้อนฟังก์ชัน ระบบปฏิบัติการบางระบบละเมิดข้อกำหนดนี้โดยไม่
การล้างแฟล็ก DF ในโปรแกรมเลือกจ่ายงานข้อยกเว้น ตัวจัดการข้อยกเว้นสามารถเป็น
เรียกใช้ด้วยชุดแฟล็ก DF ซึ่งนำไปสู่โหมดทิศทางที่ไม่ถูกต้องเมื่อสตริง
มีการใช้คำแนะนำ ตัวเลือกนี้สามารถเปิดใช้งานได้ตามค่าเริ่มต้นบนเป้าหมาย x32 แบบ 86 บิตโดย
กำหนดค่า GCC ด้วย -enable-cld กำหนดค่าตัวเลือก รุ่นของ "cld"
คำแนะนำสามารถระงับได้ด้วย -mno-cld ตัวเลือกคอมไพเลอร์ในกรณีนี้
-mvzerouper
ตัวเลือกนี้สั่งให้ GCC เผยแพร่คำสั่ง "vzerouper" ก่อนการโอน
ควบคุมการไหลออกจากฟังก์ชันเพื่อลดโทษการเปลี่ยน AVX เป็น SSE ด้วย
เมื่อลบ "zeroupper" ที่ไม่จำเป็นออกไป
-mprefer-avx128
ตัวเลือกนี้แนะนำให้ GCC ใช้คำสั่ง AVX 128 บิตแทน AVX . 256 บิต
คำแนะนำใน auto-vectorizer
-mcx16
ตัวเลือกนี้ช่วยให้ GCC สร้างคำแนะนำ "CMPXCHG16B" "CMXCHG16B" ช่วยให้
สำหรับการดำเนินการปรมาณูบนชนิดข้อมูล 128 บิต double quadword (หรือ oword) นี่คือ
มีประโยชน์สำหรับตัวนับความละเอียดสูงที่สามารถอัปเดตโดยโปรเซสเซอร์หลายตัว (หรือ
แกน) คำสั่งนี้สร้างขึ้นโดยเป็นส่วนหนึ่งของฟังก์ชันในตัวของอะตอม: see
__ซิงค์ บิลท์อิน or __อะตอม บิลท์อิน เพื่อดูรายละเอียด
-msahf
ตัวเลือกนี้เปิดใช้งานการสร้างคำสั่ง "SAHF" ในโค้ด 64 บิต อินเทลยุคแรก
ซีพียู Pentium 4 ที่รองรับ Intel 64 ก่อนการเปิดตัว Pentium 4 G1 step
ในเดือนธันวาคม พ.ศ. 2005 ขาดคำสั่ง "LAHF" และ "SAHF" ซึ่งได้รับการสนับสนุนจาก
เอเอ็มดี64. นี่เป็นคำแนะนำในการโหลดและจัดเก็บ ตามลำดับ สำหรับแฟล็กสถานะบางอย่าง
ในโหมด 64 บิต คำสั่ง "SAHF" จะใช้เพื่อเพิ่มประสิทธิภาพ "fmod", "drem" และ
ฟังก์ชั่นในตัว "ที่เหลือ"; ดู อื่นๆ บิลท์อิน เพื่อดูรายละเอียด
-mmovbe
ตัวเลือกนี้ทำให้สามารถใช้คำสั่ง "movbe" เพื่อนำ "__builtin_bswap32" ไปใช้
และ "__builtin_bswap64"
-mcrc32
ตัวเลือกนี้เปิดใช้งานฟังก์ชันในตัว "__builtin_ia32_crc32qi"
"__builtin_ia32_crc32hi", "__builtin_ia32_crc32si" และ "__builtin_ia32_crc32di" เป็น
สร้างคำสั่งเครื่อง "crc32"
-mrecip
ตัวเลือกนี้ทำให้สามารถใช้คำสั่ง "RCPSS" และ "RSQRTSS" (และ vectorized ได้)
ตัวแปร "RCPPS" และ "RSQRTPS") พร้อมขั้นตอน Newton-Raphson เพิ่มเติมเพื่อเพิ่ม
ความแม่นยำแทน "DIVSS" และ "SQRTSS" (และตัวแปรแบบเวกเตอร์) สำหรับ single-
อาร์กิวเมนต์ทศนิยมที่มีความแม่นยำ คำแนะนำเหล่านี้ถูกสร้างขึ้นก็ต่อเมื่อ
-funsafe-คณิตศาสตร์-optimizations เปิดใช้งานพร้อมกับ -finite-คณิตศาสตร์เท่านั้น และ
-fno-trapping-คณิตศาสตร์. โปรดทราบว่าในขณะที่ปริมาณงานของลำดับสูงกว่า
ปริมาณงานของคำสั่งที่ไม่ใช่ส่วนกลับ ความแม่นยำของลำดับสามารถเป็น
ลดลงมากถึง 2 ulp (กล่าวคือ ค่าผกผันของ 1.0 เท่ากับ 0.99999994)
โปรดทราบว่า GCC ใช้ "1.0f/sqrtf(NS)" ในแง่ของ "RSQRTSS" (หรือ "RSQRTPS") แล้ว
กับ -ffast-คณิตศาสตร์ (หรือตัวเลือกด้านบนรวมกัน) และไม่จำเป็น -mrecip.
นอกจากนี้ โปรดทราบด้วยว่า GCC ปล่อยลำดับข้างต้นด้วยขั้นตอน Newton-Raphson เพิ่มเติมสำหรับ
vectorized single-float division และ vectorized "sqrtf(NS)" แล้วกับ -ffast-คณิตศาสตร์
(หรือตัวเลือกด้านบนรวมกัน) และไม่จำเป็น -mrecip.
-mrecip=เลือก
ตัวเลือกนี้ควบคุมว่าอาจใช้คำแนะนำในการประมาณการส่วนต่างใด เลือก คือ
รายการตัวเลือกที่คั่นด้วยเครื่องหมายจุลภาค ซึ่งอาจนำหน้าด้วย a ! เพื่อกลับตัวเลือก:
ทั้งหมด เปิดใช้งานคำแนะนำการประมาณการทั้งหมด
ผิดนัด
เปิดใช้งานคำแนะนำเริ่มต้น เทียบเท่ากับ -mrecip.
ไม่มี
ปิดใช้งานคำแนะนำการประมาณการทั้งหมด เทียบเท่ากับ -mno-recip.
div เปิดใช้งานการประมาณสำหรับการหารสเกลาร์
vec-div
เปิดใช้งานการประมาณสำหรับการหารเวกเตอร์
ตร.ว
เปิดใช้งานการประมาณสำหรับสเกลาร์สแควร์รูท
vec-ตาราง
เปิดใช้งานการประมาณสำหรับรากที่สองแบบเวกเตอร์
ตัวอย่างเช่น -mrecip=ทั้งหมด,!sqrt เปิดใช้งานการประมาณส่วนกลับทั้งหมด
ยกเว้นรากที่สอง
-mveclabi=ชนิด
ระบุประเภท ABI ที่จะใช้สำหรับ vectorizing intrinsics โดยใช้ไลบรารีภายนอก
ค่าที่รองรับสำหรับ ชนิด เป็น svml สำหรับไลบรารีคณิตศาสตร์เวกเตอร์สั้นของ Intel และ บัญชี
สำหรับไลบรารีหลักคณิตศาสตร์ของ AMD ในการใช้ตัวเลือกนี้ทั้ง -ftree- vectorize และ
-funsafe-คณิตศาสตร์-optimizations ต้องเปิดใช้งานและเข้ากันได้กับ SVML หรือ ACML ABI
ต้องระบุไลบรารีในเวลาที่เชื่อมโยง
GCC กำลังส่งการเรียกไปที่ "vmldExp2", "vmldLn2", "vmldLog102", "vmldLog102",
"vmldPow2", "vmldTanh2", "vmldTan2", "vmldAtan2", "vmldAtanh2", "vmldCbrt2",
"vmldSinh2", "vmldSin2", "vmldAsinh2", "vmldAsin2", "vmldCosh2", "vmldCos2",
"vmldAcosh2", "vmldAcos2", "vmlsExp4", "vmlsLn4", "vmlsLog104", "vmlsLog104",
"vmlsPow4", "vmlsTanh4", "vmlsTan4", "vmlsAtan4", "vmlsAtanh4", "vmlsCbrt4",
"vmlsSinh4", "vmlsSin4", "vmlsAsinh4", "vmlsAsin4", "vmlsCosh4", "vmlsCos4",
"vmlsAcosh4" และ "vmlsAcos4" สำหรับประเภทฟังก์ชันที่สอดคล้องกันเมื่อ -mveclabibi=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=aml ถูกนำมาใช้.
-มาบิ=ชื่อ
สร้างรหัสสำหรับแบบแผนการเรียกที่ระบุ ค่าที่อนุญาตคือ ระบบซิสวี for
ABI ที่ใช้กับ GNU/Linux และระบบอื่นๆ และ ms สำหรับ Microsoft ABI NS
ค่าเริ่มต้นคือการใช้ Microsoft ABI เมื่อกำหนดเป้าหมาย Microsoft Windows และ SysV ABI
ในระบบอื่นๆ ทั้งหมด คุณสามารถควบคุมลักษณะการทำงานนี้สำหรับฟังก์ชันเฉพาะได้โดยใช้
คุณลักษณะของฟังก์ชัน ms_abi/sysv_abi.
-mtls ภาษา =ชนิด
สร้างรหัสเพื่อเข้าถึงที่จัดเก็บเธรดในเครื่องโดยใช้ ละมังอาฟริกาหัวคล้ายวัว or gnu2 อนุสัญญา. ละมังอาฟริกาหัวคล้ายวัว
เป็นค่าเริ่มต้นแบบอนุรักษ์นิยม gnu2 มีประสิทธิภาพมากกว่า แต่อาจเพิ่มการคอมไพล์และรัน
ข้อกำหนดด้านเวลาที่ไม่สามารถตอบสนองได้กับทุกระบบ
-mpush-หาเรื่อง
-mno-ดัน-args
ใช้การดำเนินการ PUSH เพื่อจัดเก็บพารามิเตอร์ขาออก วิธีนี้สั้นกว่าและมักจะ
เร็วพอๆ กันกับวิธีการที่ใช้การดำเนินการ SUB/MOV และเปิดใช้งานโดยค่าเริ่มต้น ในบางส่วน
กรณีที่ปิดการใช้งานอาจช่วยปรับปรุงประสิทธิภาพเนื่องจากการจัดตารางเวลาที่ดีขึ้นและลดลง
การพึ่งพา
-สะสม-ออก-args
หากเปิดใช้งาน จำนวนพื้นที่สูงสุดที่จำเป็นสำหรับอาร์กิวเมนต์ขาออกจะถูกคำนวณเป็น
บทนำของฟังก์ชัน สิ่งนี้เร็วกว่าในซีพียูรุ่นใหม่ๆ ส่วนใหญ่เนื่องจากการลดลง
การขึ้นต่อกัน การจัดตารางเวลาที่ดีขึ้น และลดการใช้สแตกเมื่อ stack ที่ต้องการ
ขอบเขตไม่เท่ากับ 2 ข้อเสียคือขนาดโค้ดเพิ่มขึ้นอย่างเห็นได้ชัด นี้
สวิตซ์ แปลว่า -mno-ดัน-args.
-mthreads
รองรับการจัดการข้อยกเว้นสำหรับเธรดที่ปลอดภัยบน MinGW โปรแกรมที่พึ่งพา thread-safe
การจัดการข้อยกเว้นต้องรวบรวมและเชื่อมโยงรหัสทั้งหมดกับ -mthreads ตัวเลือก. เมื่อไหร่
รวบรวม -mthreads กำหนด "-D_MT"; เมื่อทำการลิงค์ มันจะลิงค์ในเธรดพิเศษ
ห้องสมุดผู้ช่วย -lmingwthrd ซึ่งล้างข้อมูลการจัดการข้อยกเว้นต่อเธรด
-mno-จัด-stringops
อย่าจัดตำแหน่งปลายทางของการดำเนินการสตริงแบบอินไลน์ สวิตช์นี้ช่วยลดรหัส
ขนาดและปรับปรุงประสิทธิภาพในกรณีที่ปลายทางอยู่ในแนวเดียวกันแล้ว แต่GCC
ไม่รู้เกี่ยวกับมัน
-minline-ทั้งหมด-stringops
โดยค่าเริ่มต้น GCC จะดำเนินการสตริงแบบอินไลน์เฉพาะเมื่อปลายทางเป็นที่รู้จัก
จัดชิดขอบอย่างน้อย 4 ไบต์ ซึ่งช่วยให้อินไลน์มากขึ้นและเพิ่มโค้ด
ขนาด แต่อาจปรับปรุงประสิทธิภาพของโค้ดที่ขึ้นอยู่กับ "memcpy", "strlen" และ . ที่รวดเร็ว
"memset" สำหรับความยาวสั้น
-minline-stringops-ไดนามิก
สำหรับการดำเนินการสตริงที่ไม่ทราบขนาด ให้ใช้การตรวจสอบรันไทม์ด้วยโค้ดอินไลน์สำหรับ small
บล็อกและห้องสมุดเรียกบล็อกขนาดใหญ่
-mstringop-กลยุทธ์=ALG
แทนที่ฮิวริสติกการตัดสินใจภายในสำหรับอัลกอริธึมเฉพาะที่จะใช้สำหรับ
การดำเนินการสตริงแบบอินไลน์ ค่าที่อนุญาตสำหรับ ALG คือ:
ตัวแทน_ไบต์
rep_4 ไบต์
rep_8 ไบต์
ขยายโดยใช้คำนำหน้า "ตัวแทน" ของ i386 ของขนาดที่ระบุ
byte_loop
ห่วง
unrolled_loop
ขยายเป็นวงอินไลน์
libcall
ใช้การโทรของห้องสมุดเสมอ
-momit-leaf-frame-ตัวชี้
อย่าเก็บตัวชี้เฟรมไว้ในรีจิสเตอร์สำหรับฟังก์ชันลีฟ สิ่งนี้จะหลีกเลี่ยง
คำแนะนำในการบันทึก ตั้งค่า และกู้คืนตัวชี้เฟรม และทำการลงทะเบียนพิเศษ
ที่มีอยู่ในฟังก์ชั่นใบ ทางเลือก -fomit-leaf-frame-ตัวชี้ ถอดกรอบออก
ตัวชี้สำหรับฟังก์ชันลีฟ ซึ่งอาจทำให้การดีบักยากขึ้น
-mtls-direct-seg-refs
-mno-tls-direct-seg-refs
ควบคุมว่าจะให้เข้าถึงตัวแปร TLS ด้วยออฟเซ็ตจากเซ็กเมนต์ TLS หรือไม่
รีจิสเตอร์ (%gs สำหรับ 32 บิต, %fs สำหรับ 64 บิต) หรือว่าตัวชี้ฐานเธรดต้องเป็น
เพิ่ม สิ่งนี้ถูกต้องหรือไม่นั้นขึ้นอยู่กับระบบปฏิบัติการและไม่ว่าจะเป็น
แมปกลุ่มเพื่อให้ครอบคลุมพื้นที่ TLS ทั้งหมด
สำหรับระบบที่ใช้ไลบรารี GNU C ค่าดีฟอลต์คือเปิด
-mse2avx
-mno-sse2avx
ระบุว่าแอสเซมเบลอร์ควรเข้ารหัสคำสั่ง SSE ด้วยคำนำหน้า VEX ทางเลือก
-mavx เปิดใช้งานโดยค่าเริ่มต้น
-mfentry
-mno-entry
หากการทำโปรไฟล์ทำงานอยู่ (หน้า) วางการเรียกตัวนับโปรไฟล์ก่อนอารัมภบท
หมายเหตุ: บนสถาปัตยกรรม x86 แอตทริบิวต์ "ms_hook_prologue" ไม่สามารถทำได้ที่
ช่วงเวลาสำหรับ -mfentry และ หน้า.
-m8bit-idiv
-mno-8bit-idiv
สำหรับโปรเซสเซอร์บางตัว เช่น Intel Atom การหารจำนวนเต็ม 8 บิตที่ไม่ได้ลงนามจะเร็วกว่า .มาก
การหารจำนวนเต็ม 32 บิต/64 บิต ตัวเลือกนี้จะสร้างการตรวจสอบรันไทม์ ถ้าทั้งสองอย่าง
เงินปันผลและตัวหารอยู่ในช่วง 0 ถึง 255, หารด้วยจำนวนเต็ม 8 บิตที่ไม่ได้ลงนามคือ
ใช้แทนการหารจำนวนเต็ม 32 บิต/64 บิต
-mavx256-split-unaligned-โหลด
-mavx256-แยก-ไม่จัดแนว-จัดเก็บ
แยกโหลดและจัดเก็บ AVX ที่ไม่ได้จัดแนวขนาด 32 ไบต์
ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m รองรับสวิตช์เพิ่มเติมจากโปรเซสเซอร์ x86-64 ใน 64-bit . ด้านบน
สภาพแวดล้อม
- ลบ.ม
- ลบ.ม
-mx32
สร้างรหัสสำหรับสภาพแวดล้อมแบบ 32 บิตหรือ 64 บิต NS - ลบ.ม ตัวเลือกชุด "int", "ยาว",
และประเภทตัวชี้เป็น 32 บิต และสร้างโค้ดที่ทำงานบนระบบ i386 ใดๆ
โครงการ - ลบ.ม ตัวเลือกตั้งค่า "int" เป็น 32 บิตและ "ยาว" และประเภทตัวชี้เป็น 64 บิตและ
สร้างรหัสสำหรับสถาปัตยกรรม x86-64 สำหรับดาร์วินเท่านั้น - ลบ.ม ตัวเลือกด้วย
ปิด -fno-รูป และ -mdynamic ไม่มีรูป ตัวเลือก
โครงการ -mx32 ตัวเลือกตั้งค่า "int", "long" และประเภทตัวชี้เป็น 32 บิตและสร้างรหัส
สำหรับสถาปัตยกรรม x86-64
-mno-โซนสีแดง
อย่าใช้สิ่งที่เรียกว่า "เขตสีแดง" สำหรับรหัส x86-64 เขตสีแดงได้รับคำสั่งจาก
x86-64 ABI; มันเป็นพื้นที่ 128 ไบต์ที่อยู่นอกเหนือตำแหน่งของตัวชี้สแต็กที่ไม่ใช่
แก้ไขโดยตัวจัดการสัญญาณหรืออินเตอร์รัปต์ดังนั้นจึงสามารถใช้เป็นข้อมูลชั่วคราวได้
โดยไม่ต้องปรับตัวชี้สแต็ก ธง -mno-โซนสีแดง ปิดการใช้งานโซนสีแดงนี้
-mcmodel=เล็ก
สร้างโค้ดสำหรับโมเดลโค้ดขนาดเล็ก: ต้องเชื่อมโยงโปรแกรมและสัญลักษณ์ใน
พื้นที่ที่อยู่ต่ำกว่า 2 GB พอยน์เตอร์คือ 64 บิต โปรแกรมสามารถ
เชื่อมโยงแบบคงที่หรือแบบไดนามิก นี่คือรูปแบบรหัสเริ่มต้น
-mcmodel=เคอร์เนล
สร้างรหัสสำหรับโมเดลรหัสเคอร์เนล เคอร์เนลทำงานในค่าลบ 2 GB ของ
พื้นที่ที่อยู่ โมเดลนี้ต้องใช้กับโค้ดเคอร์เนลของลินุกซ์
-mcmodel=กลาง
สร้างรหัสสำหรับรุ่นขนาดกลาง: โปรแกรมถูกเชื่อมโยงในส่วนล่าง 2 GB ของ
พื้นที่ที่อยู่ สัญลักษณ์ขนาดเล็กก็ถูกวางไว้ที่นั่นเช่นกัน สัญลักษณ์ที่มีขนาดมากกว่า
-mlarge-ข้อมูลเกณฑ์ ถูกใส่ลงในข้อมูลขนาดใหญ่หรือส่วน BSS และสามารถระบุตำแหน่งได้
สูงกว่า 2GB โปรแกรมสามารถเชื่อมโยงแบบสแตติกหรือไดนามิก
-mcmodel=ขนาดใหญ่
สร้างรหัสสำหรับรุ่นใหญ่ โมเดลนี้ไม่ได้ตั้งสมมติฐานเกี่ยวกับที่อยู่
และขนาดของส่วน
-maddress-mode = ยาว
สร้างรหัสสำหรับโหมดที่อยู่แบบยาว รองรับเฉพาะ 64 บิตและ x32
สภาพแวดล้อม เป็นโหมดที่อยู่เริ่มต้นสำหรับสภาพแวดล้อม 64 บิต
-maddress-mode=สั้น
สร้างรหัสสำหรับโหมดที่อยู่แบบสั้น รองรับเฉพาะ 32 บิตและ x32
สภาพแวดล้อม เป็นโหมดที่อยู่เริ่มต้นสำหรับสภาพแวดล้อมแบบ 32 บิตและ x32
i386 และ x86-64 Windows Options
ตัวเลือกเพิ่มเติมเหล่านี้พร้อมใช้งานสำหรับเป้าหมายของ Microsoft Windows:
-mconsole
ตัวเลือกนี้ระบุว่าจะสร้างแอปพลิเคชันคอนโซลโดยคำสั่ง
ตัวเชื่อมโยงเพื่อตั้งค่าประเภทระบบย่อยส่วนหัว PE ที่จำเป็นสำหรับแอปพลิเคชันคอนโซล
ตัวเลือกนี้ใช้ได้กับเป้าหมาย Cygwin และ MinGW และเปิดใช้งานโดยค่าเริ่มต้นใน
เป้าหมายเหล่านั้น
-mdll
ตัวเลือกนี้ใช้ได้กับเป้าหมาย Cygwin และ MinGW มันระบุว่า DLL---a
ไดนามิกลิงค์ไลบรารี่---จะถูกสร้างขึ้น เปิดใช้งานการเลือกของที่จำเป็น
วัตถุเริ่มต้นรันไทม์และจุดเริ่มต้น
-mnop-สนุก-dllimport
ตัวเลือกนี้ใช้ได้กับเป้าหมาย Cygwin และ MinGW ระบุว่า
ควรละเว้นแอตทริบิวต์ "dllimport"
-mthread
ตัวเลือกนี้ใช้ได้กับเป้าหมาย MinGW มันระบุว่าเธรดเฉพาะ MinGW
จะใช้การสนับสนุน
-มิวนิโค้ด
ตัวเลือกนี้ใช้ได้กับเป้าหมาย MinGW-w64 มันทำให้เกิดตัวประมวลผลล่วงหน้า "UNICODE"
มาโครที่กำหนดไว้ล่วงหน้า และเลือกโค้ดเริ่มต้นรันไทม์ที่ใช้ Unicode ได้
-mwin32
ตัวเลือกนี้ใช้ได้กับเป้าหมาย Cygwin และ MinGW ระบุว่าโดยทั่วไป
มาโครที่กำหนดไว้ล่วงหน้าของ Microsoft Windows จะต้องถูกตั้งค่าในตัวประมวลผลล่วงหน้า แต่ไม่
มีอิทธิพลต่อการเลือกรันไทม์ไลบรารี/รหัสเริ่มต้น
-mwindows
ตัวเลือกนี้ใช้ได้กับเป้าหมาย Cygwin และ MinGW ระบุว่า GUI
แอปพลิเคชันจะต้องสร้างขึ้นโดยสั่งให้ตัวเชื่อมโยงตั้งค่าส่วนหัว PE
ประเภทระบบย่อยอย่างเหมาะสม
-fno-set-stack-ปฏิบัติการได้
ตัวเลือกนี้ใช้ได้กับเป้าหมาย MinGW ระบุว่าแฟล็กปฏิบัติการสำหรับ
สแต็กที่ใช้โดยฟังก์ชันที่ซ้อนกันไม่ได้ตั้งค่าไว้ นี่เป็นสิ่งจำเป็นสำหรับการรันไบนารี่
ในโหมดเคอร์เนลของ Microsoft Windows เนื่องจากมี User32 API ซึ่งใช้ในการตั้งค่า
ไม่มีสิทธิ์ปฏิบัติการ
-fwritable-ย้าย-rdata
ตัวเลือกนี้ใช้ได้กับเป้าหมาย MinGW และ Cygwin มันระบุว่าย้าย-
data ในส่วน read-only จะถูกใส่ลงในส่วน .data นี่เป็นสิ่งจำเป็นสำหรับผู้สูงวัย
รันไทม์ไม่รองรับการแก้ไขส่วน .rdata สำหรับการย้ายตำแหน่งหลอก
-mpe-aligned-คอมมอนส์
ตัวเลือกนี้ใช้ได้กับเป้าหมาย Cygwin และ MinGW ระบุว่า GNU
นามสกุลเป็นรูปแบบไฟล์ PE ที่อนุญาตให้มีการจัดตำแหน่งตัวแปร COMMON ที่ถูกต้อง
ควรใช้เมื่อสร้างรหัส เปิดใช้งานโดยค่าเริ่มต้นหาก GCC ตรวจพบว่า
แอสเซมเบลอร์เป้าหมายที่พบในระหว่างการกำหนดค่ารองรับคุณสมบัติ
โปรดดูที่ด้านล่าง i386 และ x86-64 Options สำหรับตัวเลือกมาตรฐาน
IA-64 Options
เหล่านี้เป็น -m ตัวเลือกที่กำหนดไว้สำหรับสถาปัตยกรรม Intel IA-64
-mbig-endian
สร้างโค้ดสำหรับเป้าหมาย big-endian นี่เป็นค่าเริ่มต้นสำหรับ HP-UX
-little-endian
สร้างโค้ดสำหรับเป้าหมาย little-endian นี่เป็นค่าดีฟอลต์สำหรับ AIX5 และ GNU/Linux
-mgnu-เป็น
-mno-gnu-เป็น
สร้าง (หรือไม่) รหัสสำหรับแอสเซมเบลอร์ GNU นี่คือค่าเริ่มต้น
-mgnu-ld
-mno-gnu-ld
สร้าง (หรือไม่) รหัสสำหรับตัวเชื่อมโยง GNU นี่คือค่าเริ่มต้น
-mno-รูป
สร้างรหัสที่ไม่ได้ใช้การลงทะเบียนตัวชี้ส่วนกลาง ผลลัพธ์ไม่ใช่ตำแหน่ง
รหัสอิสระและละเมิด IA-64 ABI
-mvolatile-asm-หยุด
-mno-ระเหย-asm-stop
สร้าง (หรือไม่) บิตหยุดทันทีก่อนและหลังคำสั่ง asm ผันผวน
-mregister-ชื่อ
-mno-ทะเบียน-ชื่อ
สร้าง (หรือไม่) in, locและ ออก ลงทะเบียนชื่อสำหรับการลงทะเบียนแบบซ้อน นี้
อาจทำให้เอาต์พุตแอสเซมเบลอร์อ่านง่ายขึ้น
-mno-sdata
-msdata
ปิดใช้งาน (หรือเปิดใช้งาน) การเพิ่มประสิทธิภาพที่ใช้ส่วนข้อมูลขนาดเล็ก นี้อาจเป็นประโยชน์
สำหรับการแก้ไขข้อผิดพลาดของเครื่องมือเพิ่มประสิทธิภาพ
-mconstan-gp
สร้างโค้ดที่ใช้ค่าตัวชี้ส่วนกลางคงที่ค่าเดียว สิ่งนี้มีประโยชน์เมื่อ
รวบรวมรหัสเคอร์เนล
-mauto-รูป
สร้างรหัสที่สามารถย้ายตัวเองได้ นี่หมายความว่า -mconstan-gp. มีประโยชน์
เมื่อรวบรวมรหัสเฟิร์มแวร์
-minline-float-divide-min-latency
สร้างโค้ดสำหรับการแบ่งอินไลน์ของค่าทศนิยมโดยใช้เวลาแฝงต่ำสุด
ขั้นตอนวิธี
-minline-float-divide-max-throughput
สร้างโค้ดสำหรับการแบ่งอินไลน์ของค่าทศนิยมโดยใช้ปริมาณงานสูงสุด
ขั้นตอนวิธี
-mno-inline-float-หาร
อย่าสร้างโค้ดอินไลน์สำหรับการแบ่งค่าทศนิยม
-minline-int-divide-min-latency
สร้างรหัสสำหรับการหารแบบอินไลน์ของค่าจำนวนเต็มโดยใช้เวลาแฝงขั้นต่ำ
ขั้นตอนวิธี
-minline-int-divide-max-throughput
สร้างรหัสสำหรับการหารอินไลน์ของค่าจำนวนเต็มโดยใช้ปริมาณงานสูงสุด
ขั้นตอนวิธี
-mno-inline-int-หาร
อย่าสร้างโค้ดอินไลน์สำหรับการหารค่าจำนวนเต็ม
-minline-sqrt-นาทีแฝง
สร้างรหัสสำหรับรากที่สองแบบอินไลน์โดยใช้อัลกอริธึมเวลาแฝงขั้นต่ำ
-minline-sqrt-max-ปริมาณงาน
สร้างรหัสสำหรับรากที่สองแบบอินไลน์โดยใช้อัลกอริธึมปริมาณงานสูงสุด
-mno-อินไลน์-sqrt
อย่าสร้างโค้ดอินไลน์สำหรับ "sqrt"
-mfused-mad
-mno-ฟิวส์ madd
ทำ (ไม่) สร้างรหัสที่ใช้การคูณ/เพิ่มหรือคูณ/ลบแบบผสม
คำแนะนำ. ค่าเริ่มต้นคือการใช้คำแนะนำเหล่านี้
-mno-dwarf2-asm
-mdwarf2-asm
อย่า (หรือทำ) สร้างรหัสแอสเซมเบลอร์สำหรับข้อมูลการดีบักหมายเลขบรรทัด DWARF 2
นี้อาจมีประโยชน์เมื่อไม่ได้ใช้แอสเซมเบลอร์ GNU
-Mearly-หยุดบิต
-mno-ต้นหยุดบิต
อนุญาตให้วางบิตหยุดก่อนหน้าทันทีก่อนคำสั่งว่า
ทริกเกอร์บิตหยุด สิ่งนี้สามารถปรับปรุงการจัดตารางการสอนได้ แต่ก็ไม่เสมอไป
ทำเช่นนั้น
-mfixed-ช่วง=ช่วงการลงทะเบียน
สร้างรหัสที่รักษาช่วงการลงทะเบียนที่กำหนดเป็นการลงทะเบียนคงที่ ทะเบียนคงที่
เป็นสิ่งที่ผู้จัดสรรการลงทะเบียนไม่สามารถใช้ได้ สิ่งนี้มีประโยชน์เมื่อรวบรวมเคอร์เนล
รหัส. ช่วงการลงทะเบียนถูกระบุเป็นสองรีจิสเตอร์คั่นด้วยเส้นประ หลายรายการ
สามารถระบุช่วงการลงทะเบียนโดยคั่นด้วยเครื่องหมายจุลภาค
-mtls-ขนาด=tls-ขนาด
ระบุขนาดบิตของการชดเชย TLS ทันที ค่าที่ถูกต้องคือ 14, 22 และ 64
-mtune=ประเภทซีพียู
ปรับการตั้งเวลาคำสั่งสำหรับ CPU โดยเฉพาะ ค่าที่ถูกต้องคือ Itanium,
ไทเทเนียม1, ผสาน, ไทเทเนียม2และ แมคคินลีย์.
-milp32
-mlp64
สร้างรหัสสำหรับสภาพแวดล้อมแบบ 32 บิตหรือ 64 บิต สภาพแวดล้อม 32 บิตตั้งค่า int
ยาวและชี้ไปที่ 32 บิต สภาพแวดล้อม 64 บิตตั้งค่าเป็น 32 บิตและยาวและ
ตัวชี้ไปที่ 64 บิต นี่คือแฟล็กเฉพาะของ HP-UX
-mno-sched-br-ข้อมูลจำเพาะ
-msched-br-ข้อมูลจำเพาะ
(Dis/En) สามารถกำหนดตารางเวลาการเก็งกำไรข้อมูลได้ก่อนที่จะโหลดซ้ำ ส่งผลให้มีการผลิต
คำแนะนำ "ld.a" และคำแนะนำในการตรวจสอบที่เกี่ยวข้อง ("ld.c" / "chk.a") NS
ค่าเริ่มต้นคือ 'ปิดการใช้งาน'
-msched-ar-ข้อมูลจำเพาะ
-mno-sched-ar-ข้อมูลจำเพาะ
(En/Dis) กำหนดตารางเวลาการเก็งกำไรข้อมูลได้หลังจากโหลดซ้ำ ส่งผลให้มีการผลิต
คำแนะนำ "ld.a" และคำแนะนำในการตรวจสอบที่เกี่ยวข้อง ("ld.c" / "chk.a") NS
ค่าเริ่มต้นคือ 'เปิดใช้งาน'
-mno-กำหนดการควบคุมข้อมูลจำเพาะ
-msched-ควบคุมข้อมูลจำเพาะ
(Dis/En) สามารถควบคุมกำหนดการเก็งกำไรได้ คุณลักษณะนี้ใช้ได้เฉพาะในช่วง
การจัดกำหนดการภูมิภาค (เช่น ก่อนโหลดซ้ำ) ส่งผลให้เกิดการสร้าง "ld.s"
คำแนะนำและคำแนะนำในการตรวจสอบที่เกี่ยวข้อง "chk.s" ค่าเริ่มต้นคือ
'ปิดการใช้งาน'
-msched-br-in-ข้อมูลจำเพาะ
-mno-sched-br-in-ข้อมูลจำเพาะ
(En/Dis) กำหนดการเก็งกำไรของคำสั่งที่ขึ้นอยู่กับข้อมูล
โหลดเก็งกำไรก่อนโหลดซ้ำ สิ่งนี้มีผลกับ .เท่านั้น -msched-br-ข้อมูลจำเพาะ
เปิดใช้งาน ค่าเริ่มต้นคือ 'เปิดใช้งาน'
-msched-ar-in-ข้อมูลจำเพาะ
-mno-sched-ar-in-ข้อมูลจำเพาะ
(En/Dis) กำหนดการเก็งกำไรของคำสั่งที่ขึ้นอยู่กับข้อมูล
โหลดเก็งกำไรหลังจากโหลดซ้ำ สิ่งนี้มีผลกับ .เท่านั้น -msched-ar-ข้อมูลจำเพาะ
เปิดใช้งาน ค่าเริ่มต้นคือ 'เปิดใช้งาน'
-msched-in-ควบคุมข้อมูลจำเพาะ
-mno-กำหนดการในการควบคุมข้อมูลจำเพาะ
(En/Dis) กำหนดการเก็งกำไรของคำสั่งที่ขึ้นอยู่กับ
ควบคุมภาระการเก็งกำไร สิ่งนี้มีผลกับ .เท่านั้น -msched-ควบคุมข้อมูลจำเพาะ เปิดการใช้งาน
ค่าเริ่มต้นคือ 'เปิดใช้งาน'
-mno-sched-prefer-non-data-spec-insns
-msched-prefer-non-data-spec-insns
หากเปิดใช้งาน คำแนะนำการเก็งกำไรข้อมูลจะถูกเลือกสำหรับกำหนดการก็ต่อเมื่อไม่มี
ตัวเลือกอื่น ๆ ในขณะนี้ ทำให้มีการใช้ข้อมูลเก็งกำไรมากขึ้น
ซึ่งอนุรักษ์นิยม. ค่าเริ่มต้นคือ 'ปิดการใช้งาน'
-mno-sched-prefer-non-control-spec-insns
-msched-prefer-non-control-spec-insns
หากเปิดใช้งาน คำแนะนำการควบคุม-เก็งกำไรจะถูกเลือกสำหรับกำหนดการก็ต่อเมื่อมี
ไม่มีทางเลือกอื่นในขณะนี้ ทำให้ใช้การควบคุมเก็งกำไรมาก
อนุรักษ์นิยมมากขึ้น ค่าเริ่มต้นคือ 'ปิดการใช้งาน'
-mno-sched-count-spec-in-critical-path
-msched-count-spec-in-critical-path
หากเปิดใช้งาน การพึ่งพาการเก็งกำไรจะถูกพิจารณาระหว่างการคำนวณของ
ลำดับความสำคัญของคำแนะนำ ทำให้การใช้การเก็งกำไรเพิ่มขึ้นอีกเล็กน้อย
ซึ่งอนุรักษ์นิยม. ค่าเริ่มต้นคือ 'ปิดการใช้งาน'
-msched-spec-ldc
ใช้การตรวจสอบการเก็งกำไรข้อมูลอย่างง่าย ตัวเลือกนี้เปิดอยู่โดยค่าเริ่มต้น
-msched-ควบคุมข้อมูลจำเพาะ-ldc
ใช้การตรวจสอบการเก็งกำไรอย่างง่าย ตัวเลือกนี้เปิดอยู่โดยค่าเริ่มต้น
-msched-stop-bits-after-ever-ทุกรอบ
วางบิตหยุดหลังจากทุกรอบเมื่อกำหนดเวลา ตัวเลือกนี้เปิดอยู่โดยค่าเริ่มต้น
-msched-fp-mem-deps-zero-ราคา
สมมติว่าทศนิยมเก็บและโหลดไม่น่าจะทำให้เกิดข้อขัดแย้งเมื่อ
จัดอยู่ในกลุ่มคำสั่งเดียวกัน ตัวเลือกนี้ถูกปิดใช้งานโดยค่าเริ่มต้น
-msel-sched-dont-check-control-spec
สร้างการตรวจสอบการเก็งกำไรการควบคุมในการจัดกำหนดการแบบเลือก ธงนี้คือ
ปิดใช้งานโดยค่าเริ่มต้น
-msched-max-memory-insns=แม็กซ์อินน์
จำกัดจำนวนหน่วยความจำ insns ต่อกลุ่มคำสั่ง โดยให้ความสำคัญกับ
หน่วยความจำที่ตามมาพยายามกำหนดเวลาในกลุ่มคำสั่งเดียวกัน
มีประโยชน์บ่อยครั้งในการป้องกันความขัดแย้งของแคชแบงค์ ค่าเริ่มต้นคือ 1
-msched-max-memory-insns-hard-จำกัด
กำหนดขีดจำกัดโดย msched-max-memory-insns.php ขีด จำกัด ที่ยากไม่อนุญาตเพิ่มเติม
กว่าจำนวนนั้นในกลุ่มคำสั่ง มิฉะนั้นขีด จำกัด คือ "อ่อน" หมายถึง
ว่าควรใช้การทำงานที่ไม่ใช่หน่วยความจำเมื่อถึงขีด จำกัด แต่หน่วยความจำ
การดำเนินการอาจยังคงกำหนดไว้
LM32 Options
ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m ตัวเลือกถูกกำหนดไว้สำหรับสถาปัตยกรรม LatticeMico32:
-mbarrel-shift-เปิดใช้งาน
เปิดใช้งานคำแนะนำในการเปลี่ยนลำกล้อง
-mdivide ที่เปิดใช้งาน
เปิดใช้งานคำสั่งแบ่งและโมดูลัส
-เปิดใช้งานหลายหลาก
เปิดใช้งานคำแนะนำการคูณ
-msign-ขยาย-เปิดใช้งาน
เปิดใช้งานคำแนะนำการขยายสัญญาณ
-เปิดใช้งาน Muser
เปิดใช้งานคำแนะนำที่ผู้ใช้กำหนด
M32C Options
-mcpu=ชื่อ
เลือก CPU ที่จะสร้างรหัส ชื่อ อาจเป็นหนึ่งใน r8c สำหรับ R8C/Tiny
ชุด, ม. 16 ค สำหรับซีรีส์ M16C (สูงสุด /60) ม.32ซม สำหรับ M16C/80 ซีรีส์หรือ ม. 32 ค
สำหรับ M32C/80 ซีรีส์
-msim
ระบุว่าโปรแกรมจะทำงานบนเครื่องจำลอง สิ่งนี้ทำให้เกิดทางเลือก
ไลบรารีรันไทม์ที่จะลิงก์ซึ่งสนับสนุน เช่น ไฟล์ I/O คุณต้องไม่
ใช้ตัวเลือกนี้เมื่อสร้างโปรแกรมที่จะทำงานบนฮาร์ดแวร์จริง คุณต้อง
จัดเตรียมไลบรารีรันไทม์ของคุณเองสำหรับฟังก์ชัน I/O ใดๆ ที่จำเป็น
-memregs=จำนวน
ระบุจำนวนของการลงทะเบียนเทียมแบบอิงหน่วยความจำที่ GCC ใช้ระหว่างการสร้างโค้ด
การลงทะเบียนหลอกเหล่านี้ใช้เหมือนกับการลงทะเบียนจริง ดังนั้นจึงมีข้อแลกเปลี่ยนระหว่าง
ความสามารถของ GCC ในการปรับโค้ดให้เข้ากับรีจิสเตอร์ที่มีอยู่ และการปรับประสิทธิภาพของ
โดยใช้หน่วยความจำแทนการลงทะเบียน โปรดทราบว่าทุกโมดูลในโปรแกรมจะต้องเป็น
คอมไพล์ด้วยค่าเดียวกันสำหรับตัวเลือกนี้ ด้วยเหตุนี้คุณจึงไม่ควรใช้สิ่งนี้
ตัวเลือกที่มีไลบรารีรันไทม์เริ่มต้นของ GCC
M32R/D Options
ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m ตัวเลือกถูกกำหนดไว้สำหรับสถาปัตยกรรม Renesas M32R/D:
-m32r2
สร้างรหัสสำหรับ M32R/2
-m32rx
สร้างรหัสสำหรับ M32R/X
-m32r
สร้างรหัสสำหรับ M32R นี่คือค่าเริ่มต้น
-mmodel=เล็ก
สมมติว่าอ็อบเจ็กต์ทั้งหมดอยู่ในหน่วยความจำ 16MB ที่ต่ำกว่า (เพื่อให้แอดเดรสของพวกมันเป็น
โหลดด้วยคำสั่ง "ld24") และถือว่ารูทีนย่อยทั้งหมดสามารถเข้าถึงได้ด้วย
คำแนะนำ "bl" นี่คือค่าเริ่มต้น
สามารถกำหนด addressability ของวัตถุเฉพาะได้ด้วยแอตทริบิวต์ "model"
-mmodel=กลาง
สมมติว่าวัตถุอาจอยู่ที่ใดก็ได้ในพื้นที่ที่อยู่แบบ 32 บิต (คอมไพเลอร์สร้าง
คำแนะนำ "seth/add3" เพื่อโหลดที่อยู่) และถือว่ารูทีนย่อยทั้งหมดเป็น
สามารถเข้าถึงได้ด้วยคำสั่ง "bl"
-mmodel=ขนาดใหญ่
สมมติว่าวัตถุอาจอยู่ที่ใดก็ได้ในพื้นที่ที่อยู่แบบ 32 บิต (คอมไพเลอร์สร้าง
คำแนะนำ "seth/add3" เพื่อโหลดที่อยู่) และถือว่ารูทีนย่อยอาจไม่เป็น
สามารถเข้าถึงได้ด้วยคำสั่ง "bl" (คอมไพเลอร์สร้างช้ากว่ามาก
ลำดับคำสั่ง "seth/add3/jl")
-msdata=ไม่มี
ปิดการใช้งานพื้นที่ข้อมูลขนาดเล็ก ตัวแปรถูกใส่ไว้ในตัวใดตัวหนึ่ง .ข้อมูล, .bss,หรือ
.โรดาต้า (เว้นแต่จะระบุแอตทริบิวต์ "ส่วน" ไว้) นี่คือค่าเริ่มต้น
พื้นที่ข้อมูลขนาดเล็กประกอบด้วยส่วนต่างๆ .sdata และ .sbs. วัตถุอาจจะชัดเจน
ใส่ในพื้นที่ข้อมูลขนาดเล็กที่มีแอตทริบิวต์ "ส่วน" โดยใช้ส่วนใดส่วนหนึ่งเหล่านี้
-msdata=sdata
ใส่ข้อมูลระดับโลกและแบบคงที่ขนาดเล็กในพื้นที่ข้อมูลขนาดเล็ก แต่อย่าสร้างแบบพิเศษ
รหัสเพื่ออ้างอิงพวกเขา
-msdata=ใช้
ใส่ข้อมูลระดับโลกและแบบคงที่ขนาดเล็กในพื้นที่ข้อมูลขนาดเล็ก และสร้างพิเศษ
คำแนะนำในการอ้างอิง
-G NUM
ใส่วัตถุโกลบอลและสแตติกน้อยกว่าหรือเท่ากับ NUM ไบต์ลงในข้อมูลขนาดเล็กหรือ
ส่วน BSS แทนข้อมูลปกติหรือส่วน BSS ค่าเริ่มต้นของ NUM is
8. -msdata ต้องตั้งค่าตัวเลือกเป็นอย่างใดอย่างหนึ่งของ สดาต้า or ใช้ สำหรับตัวเลือกนี้จะมีใดๆ
ผล
โมดูลทั้งหมดควรคอมไพล์เหมือนกัน -G NUM ค่า. รวบรวมความต่าง
ค่าของ NUM อาจทำงานหรือไม่ก็ได้ หากไม่มีตัวเชื่อมโยงให้ข้อผิดพลาด
ข้อความ---รหัสไม่ถูกต้องจะไม่ถูกสร้างขึ้น
-mdebug
ทำให้รหัสเฉพาะ M32R ในคอมไพเลอร์แสดงสถิติบางอย่างที่อาจช่วยได้
ในการดีบักโปรแกรม
-malign-ลูป
จัดแนวลูปทั้งหมดให้เป็นขอบเขต 32 ไบต์
-mno-align-ลูป
อย่าบังคับใช้การจัดตำแหน่งแบบ 32 ไบต์สำหรับลูป นี่คือค่าเริ่มต้น
-อัตราความผิดพลาด=จำนวน
»ÑËÒ จำนวน คำแนะนำต่อรอบ จำนวน สามารถเป็น 1 หรือ 2 เท่านั้น
-mbranch-ต้นทุน=จำนวน
จำนวน สามารถเป็น 1 หรือ 2 เท่านั้น หากเป็น 1 แสดงว่าต้องการแยกสาขามากกว่าแบบมีเงื่อนไข
รหัสถ้าเป็น 2 จะใช้ตรงกันข้าม
-mflush-กับดัก=จำนวน
ระบุหมายเลขกับดักเพื่อใช้ล้างแคช ค่าเริ่มต้นคือ 12. Valid
ตัวเลขอยู่ระหว่าง 0 ถึง 15 รวม
-mno-flush-กับดัก
ระบุว่าแคชไม่สามารถล้างโดยใช้กับดัก
-mflush-func=ชื่อ
ระบุชื่อของฟังก์ชันระบบปฏิบัติการที่จะเรียกล้างแคช NS
ค่าเริ่มต้นคือ _ล้าง_แคชแต่จะใช้การเรียกฟังก์ชันก็ต่อเมื่อไม่มีกับดัก
-mno-ฟลัช-func
ระบุว่าไม่มีระบบปฏิบัติการสำหรับล้างแคช
M680x0 Options
เหล่านี้เป็น -m ตัวเลือกที่กำหนดไว้สำหรับโปรเซสเซอร์ M680x0 และ ColdFire การตั้งค่าเริ่มต้น
ขึ้นอยู่กับสถาปัตยกรรมที่เลือกเมื่อกำหนดค่าคอมไพเลอร์ ค่าเริ่มต้น
สำหรับตัวเลือกที่พบบ่อยที่สุดได้รับด้านล่าง
-มีนาคม=โค้ง
สร้างโค้ดสำหรับสถาปัตยกรรมชุดคำสั่ง M680x0 หรือ ColdFire ที่เฉพาะเจาะจง
ค่าที่อนุญาตของ โค้ง สำหรับสถาปัตยกรรม M680x0 คือ: 68000, 68010, 68020, 68030,
68040, 68060 และ cpu32. สถาปัตยกรรม ColdFire ได้รับการคัดเลือกตาม Freescale's
การจำแนกประเภท ISA และค่าที่อนุญาตคือ: อิสอา, ไอซ่าพลัส, isab และ iSAC.
GCC กำหนดมาโคร __mcfโค้ง__ เมื่อใดก็ตามที่สร้างรหัสสำหรับเป้าหมาย ColdFire
โครงการ โค้ง ในมาโครนี้เป็นหนึ่งใน -มีนาคม อาร์กิวเมนต์ที่ระบุข้างต้น
เมื่อใช้ร่วมกัน -มีนาคม และ -mtune เลือกรหัสที่ทำงานในตระกูลที่คล้ายกัน
โปรเซสเซอร์ แต่ได้รับการปรับให้เหมาะสมสำหรับสถาปัตยกรรมไมโครโดยเฉพาะ
-mcpu=ซีพียู
สร้างรหัสสำหรับโปรเซสเซอร์ M680x0 หรือ ColdFire เฉพาะ M680x0 ซีพียูคือ:
68000, 68010, 68020, 68030, 68040, 68060, 68302, 68332 และ cpu32. ไฟเย็น ซีพียูs
ได้รับจากตารางด้านล่าง ซึ่งยังจำแนกซีพียูออกเป็นตระกูล:
ครอบครัว: -mcpu ข้อโต้แย้ง
51 : 51 51ac 51ag 51cn 51em 51je 51jf 51jg 51jm 51mm 51คิว 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_ครอบครัว_ครอบครัวโดยที่ค่าของ ครอบครัว ถูกกำหนดโดยตารางด้านบน
-mtune=ปรับแต่ง
ปรับโค้ดสำหรับไมโครสถาปัตยกรรมเฉพาะภายในข้อจำกัดที่กำหนดโดย -มีนาคม
และ -mcpu. สถาปัตยกรรมไมโคร M680x0 คือ: 68000, 68010, 68020, 68030, 68040,
68060 และ cpu32. สถาปัตยกรรมไมโคร ColdFire คือ: cfv1, cfv2, cfv3, cfv4 และ
cfv4e.
คุณยังสามารถใช้ -mtune=68020-40 สำหรับโค้ดที่ต้องรันค่อนข้างดีบน 68020
68030 และ 68040 เป้าหมาย -mtune=68020-60 คล้ายกันแต่รวม 68060 เป้าหมายเป็น
ดี. สองตัวเลือกนี้เลือกการตัดสินใจปรับแต่งเดียวกันกับ -m68020-40 และ -m68020-60
ตามลำดับ
GCC กำหนดมาโคร __mcโค้ง และ __mcโค้ง__ เมื่อปรับแต่งสถาปัตยกรรม 680x0
โค้ง. นอกจากนี้ยังกำหนด mcโค้ง เว้นแต่ -แอนซี หรือไม่ใช่ GNU -มาตรฐาน ใช้ตัวเลือก
หาก GCC กำลังปรับแต่งสถาปัตยกรรมต่างๆ ตามที่เลือกโดย -mtune=68020-40 or
-mtune=68020-60จะกำหนดมาโครสำหรับทุกสถาปัตยกรรมในช่วง
GCC ยังกำหนดมาโคร __NSแต่แรก__ เมื่อทำการจูนสำหรับ ColdFire microarchitecture
แต่แรกที่นี่มี แต่แรก เป็นหนึ่งในอาร์กิวเมนต์ที่ระบุข้างต้น
- ลบ.ม
-mc68000
สร้างเอาต์พุตสำหรับ 68000 นี่เป็นค่าเริ่มต้นเมื่อคอมไพเลอร์ได้รับการกำหนดค่าสำหรับ
ระบบที่ใช้ 68000 เทียบเท่ากับ -มีนาคม=68000.
ใช้ตัวเลือกนี้สำหรับไมโครคอนโทรลเลอร์ที่มีแกน 68000 หรือ EC000 รวมถึง 68008
68302, 68306, 68307, 68322, 68328 และ 68356
- ลบ.ม
สร้างเอาต์พุตสำหรับ 68010 นี่เป็นค่าเริ่มต้นเมื่อคอมไพเลอร์ได้รับการกำหนดค่าสำหรับ
ระบบที่ใช้ 68010 เทียบเท่ากับ -มีนาคม=68010.
- ลบ.ม
-mc68020
สร้างเอาต์พุตสำหรับ 68020 นี่เป็นค่าเริ่มต้นเมื่อคอมไพเลอร์ได้รับการกำหนดค่าสำหรับ
ระบบที่ใช้ 68020 เทียบเท่ากับ -มีนาคม=68020.
- ลบ.ม
สร้างเอาต์พุตสำหรับ 68030 นี่เป็นค่าเริ่มต้นเมื่อคอมไพเลอร์ได้รับการกำหนดค่าสำหรับ
ระบบที่ใช้ 68030 เทียบเท่ากับ -มีนาคม=68030.
- ลบ.ม
สร้างเอาต์พุตสำหรับ 68040 นี่เป็นค่าเริ่มต้นเมื่อคอมไพเลอร์ได้รับการกำหนดค่าสำหรับ
ระบบที่ใช้ 68040 เทียบเท่ากับ -มีนาคม=68040.
ตัวเลือกนี้ยับยั้งการใช้คำสั่ง 68881/68882 ที่ต้องจำลองโดย
ซอฟต์แวร์บน 68040 ใช้ตัวเลือกนี้หาก 68040 ของคุณไม่มีรหัสที่จะจำลอง
คำแนะนำเหล่านั้น
- ลบ.ม
สร้างเอาต์พุตสำหรับ 68060 นี่เป็นค่าเริ่มต้นเมื่อคอมไพเลอร์ได้รับการกำหนดค่าสำหรับ
ระบบที่ใช้ 68060 เทียบเท่ากับ -มีนาคม=68060.
ตัวเลือกนี้ยับยั้งการใช้คำสั่ง 68020 และ 68881/68882 ที่จะต้อง
จำลองโดยซอฟต์แวร์บน 68060 ใช้ตัวเลือกนี้หาก 68060 ของคุณไม่มีรหัส
เพื่อเลียนแบบคำสั่งเหล่านั้น
-mcpu32
สร้างเอาต์พุตสำหรับ CPU32 นี่เป็นค่าเริ่มต้นเมื่อมีการกำหนดค่าคอมไพเลอร์สำหรับ
ระบบที่ใช้ CPU32 เทียบเท่ากับ -มีนาคม = cpu32.
ใช้ตัวเลือกนี้สำหรับไมโครคอนโทรลเลอร์ที่มีแกน CPU32 หรือ CPU32+ รวมถึง 68330
68331, 68332, 68333, 68334, 68336, 68340, 68341, 68349 และ 68360
- ลบ.ม
สร้างเอาต์พุตสำหรับ 520X ColdFire CPU นี่เป็นค่าเริ่มต้นเมื่อคอมไพเลอร์เป็น
กำหนดค่าสำหรับระบบที่ใช้ 520X เทียบเท่ากับ -mcpu=5206และตอนนี้
เลิกใช้ตัวเลือกนั้น
ใช้ตัวเลือกนี้สำหรับไมโครคอนโทรลเลอร์ที่มีแกน 5200 รวมถึง MCF5202, MCF5203
MCF5204 และ MCF5206
-m5206e
สร้างเอาต์พุตสำหรับ CPU ColdFire 5206e ตัวเลือกนี้เลิกใช้แล้วในความโปรดปรานของ
เทียบเท่า -mcpu=5206e.
-m528x
สร้างเอาต์พุตสำหรับสมาชิกของตระกูล ColdFire 528X ตัวเลือกคือตอนนี้
เลิกใช้เพื่อประโยชน์เทียบเท่า -mcpu=528x.
- ลบ.ม
สร้างเอาต์พุตสำหรับ CPU ColdFire 5307 ตัวเลือกนี้เลิกใช้แล้วเพื่อสนับสนุน
เท่ากัน -mcpu=5307.
- ลบ.ม
สร้างเอาต์พุตสำหรับ CPU ColdFire 5407 ตัวเลือกนี้เลิกใช้แล้วเพื่อสนับสนุน
เท่ากัน -mcpu=5407.
-mcfv4e
สร้างเอาต์พุตสำหรับซีพียูตระกูล ColdFire V4e (เช่น 547x/548x) ซึ่งรวมถึงการใช้
คำแนะนำจุดลอยตัวของฮาร์ดแวร์ ตัวเลือกเทียบเท่ากับ -mcpu=547x, และคือ
ตอนนี้เลิกใช้ตัวเลือกนั้นแล้ว
-m68020-40
สร้างเอาต์พุตสำหรับ 68040 โดยไม่ต้องใช้คำแนะนำใหม่ใดๆ ผลลัพธ์นี้
ในโค้ดที่สามารถทำงานได้ค่อนข้างมีประสิทธิภาพบน 68020/68881 หรือ 68030 หรือ a
68040 รหัสที่สร้างขึ้นใช้คำสั่ง 68881 ที่จำลองบน
68040.
ตัวเลือกเทียบเท่ากับ -มีนาคม=68020 -mtune=68020-40.
-m68020-60
สร้างเอาต์พุตสำหรับ 68060 โดยไม่ต้องใช้คำแนะนำใหม่ใดๆ ผลลัพธ์นี้
ในโค้ดที่สามารถทำงานได้ค่อนข้างมีประสิทธิภาพบน 68020/68881 หรือ 68030 หรือ a
68040 รหัสที่สร้างขึ้นใช้คำสั่ง 68881 ที่จำลองบน
68060.
ตัวเลือกเทียบเท่ากับ -มีนาคม=68020 -mtune=68020-60.
-mhard-ลอย
- ลบ.ม
สร้างคำแนะนำจุดลอยตัว นี่คือค่าเริ่มต้นสำหรับ 68020 ขึ้นไป และ
สำหรับอุปกรณ์ ColdFire ที่มี FPU มันกำหนดมาโคร __มี_68881__ บน M680x0
เป้าหมายและ __mcffpu__ บนเป้าหมาย ColdFire
-msoft-ลอย
อย่าสร้างคำสั่งทศนิยม ใช้การเรียกห้องสมุดแทน นี้เป็น
ค่าเริ่มต้นสำหรับ 68000, 68010 และ 68832 เป้าหมาย นอกจากนี้ยังเป็นค่าเริ่มต้นสำหรับ ColdFire
อุปกรณ์ที่ไม่มี FPU
-mdiv
-mno-div
สร้าง (ไม่สร้าง) การแบ่งฮาร์ดแวร์ ColdFire และคำสั่งที่เหลือ ถ้า
-มีนาคม ถูกใช้โดยไม่มี -mcpuค่าเริ่มต้นคือ "เปิด" สำหรับสถาปัตยกรรม ColdFire และ "ปิด"
สำหรับสถาปัตยกรรม M680x0 มิฉะนั้น ค่าเริ่มต้นจะถูกนำมาจาก CPU เป้าหมาย (ทั้ง
CPU เริ่มต้นหรือที่กำหนดโดย -mcpu). ตัวอย่างเช่น ค่าเริ่มต้นคือ "ปิด"
for -mcpu=5206 และ "เปิด" สำหรับ -mcpu=5206e.
GCC กำหนดมาโคร __mcfhwdiv__ เมื่อเปิดใช้งานตัวเลือกนี้
-mshort
ให้พิมพ์ "int" ให้มีความกว้าง 16 บิต เช่น "short int" นอกจากนี้ พารามิเตอร์
ที่ส่งผ่านบนสแต็กยังถูกจัดชิดขอบ 16 บิตแม้ในเป้าหมายที่มีAPI
บังคับให้เลื่อนระดับเป็น 32 บิต
-mno-สั้น
อย่าถือว่าประเภท "int" กว้าง 16 บิต นี่คือค่าเริ่มต้น
-mnobitfield
-mno-บิตฟิลด์
อย่าใช้คำสั่งบิตฟิลด์ NS - ลบ.ม, -mcpu32 และ - ลบ.ม ตัวเลือกหมายถึง
-mnobitfield.
-mbitfield
ใช้คำแนะนำบิตฟิลด์ NS - ลบ.ม ตัวเลือกหมายถึง -mbitfield. นี่คือ
ค่าเริ่มต้นหากคุณใช้การกำหนดค่าที่ออกแบบมาสำหรับ 68020
-mrtd
ใช้แบบแผนการเรียกฟังก์ชันที่แตกต่างกัน ซึ่งในฟังก์ชันที่ใช้ค่าคงที่
จำนวนอาร์กิวเมนต์กลับมาพร้อมกับคำสั่ง "rtd" ซึ่งแสดงอาร์กิวเมนต์ของพวกเขา
ขณะกลับมา สิ่งนี้จะบันทึกหนึ่งคำสั่งในผู้โทรเนื่องจากไม่จำเป็นต้อง
ป๊อปอาร์กิวเมนต์ที่นั่น
แบบแผนการเรียกนี้เข้ากันไม่ได้กับแบบปกติที่ใช้บน Unix ดังนั้นคุณ
ไม่สามารถใช้งานได้หากคุณต้องการเรียกไลบรารี่ที่คอมไพล์ด้วยคอมไพเลอร์ Unix
นอกจากนี้ คุณต้องจัดเตรียมต้นแบบฟังก์ชันสำหรับฟังก์ชันทั้งหมดที่ใช้ตัวแปร
จำนวนอาร์กิวเมนต์ (รวมถึง "printf"); มิฉะนั้นจะสร้างรหัสที่ไม่ถูกต้องสำหรับ
เรียกใช้ฟังก์ชันเหล่านั้น
นอกจากนี้โค้ดที่ผิดพลาดอย่างร้ายแรงจะส่งผลหากคุณเรียกใช้ฟังก์ชันที่มีจำนวนมากเกินไป
อาร์กิวเมนต์ (โดยปกติ อาร์กิวเมนต์เพิ่มเติมจะถูกละเว้นอย่างไม่เป็นอันตราย)
คำสั่ง "rtd" รองรับ 68010, 68020, 68030, 68040, 68060 และ CPU32
โปรเซสเซอร์ แต่ไม่ใช่โดย 68000 หรือ 5200
-mno-rtd
อย่าใช้แบบแผนการโทรที่เลือกโดย -mrtd. นี่คือค่าเริ่มต้น
-malign-int
-mno-จัด-int
ควบคุมว่า GCC จะจัดแนว "int", "long", "long long", "float", "double" และ "long" หรือไม่
ตัวแปร double" บนขอบเขต 32 บิต (-malign-int) หรือขอบเขต 16 บิต
(-mno-จัด-int). การจัดตำแหน่งตัวแปรบนขอบเขต 32 บิตจะสร้างโค้ดที่รัน
เร็วขึ้นบ้างบนโปรเซสเซอร์ที่มีบัส 32 บิตโดยใช้หน่วยความจำมากขึ้น
คำเตือน: หากคุณใช้ไฟล์ -malign-int สวิตช์ GCC จัดตำแหน่งโครงสร้างที่มีด้านบน
ประเภทต่างจากข้อกำหนดของอินเทอร์เฟซไบนารีของแอปพลิเคชันที่เผยแพร่ส่วนใหญ่สำหรับ
เอ็ม68k
-mpcrel
ใช้โหมดการกำหนดแอดเดรสที่สัมพันธ์กับพีซีของ 68000 โดยตรง แทนที่จะใช้ global
ตารางออฟเซ็ต ปัจจุบันตัวเลือกนี้หมายถึง -fpicอนุญาตให้ออฟเซ็ตสูงสุด 16 บิต
สำหรับการแอดเดรสที่สัมพันธ์กับพีซี -fPIC ยังไม่รองรับกับ -mpcrelแม้ว่า
สิ่งนี้สามารถรองรับโปรเซสเซอร์ 68020 และสูงกว่า
-mno-เข้มงวด-จัด
-mstrict-จัดตำแหน่ง
อย่า (ทำ) ถือว่าระบบจัดการการอ้างอิงหน่วยความจำที่ไม่ได้จัดแนว
-msep-ข้อมูล
สร้างรหัสที่อนุญาตให้ส่วนข้อมูลอยู่ในพื้นที่ต่าง ๆ ของหน่วยความจำ
จากส่วนข้อความ ซึ่งช่วยให้ดำเนินการในสถานที่ในสภาพแวดล้อมโดยไม่ต้อง
การจัดการหน่วยความจำเสมือน ตัวเลือกนี้หมายถึง -fPIC.
-mno-sep-ข้อมูล
สร้างรหัสที่ถือว่าส่วนข้อมูลตามส่วนข้อความ นี่คือ
ค่าเริ่มต้น
-middle-shared-library
สร้างรหัสที่รองรับไลบรารีที่แชร์ผ่านวิธีรหัสไลบรารี สิ่งนี้ทำให้
สำหรับไลบรารีที่เรียกใช้งานในสถานที่และแบบแบ่งใช้ในสภาพแวดล้อมที่ไม่มีหน่วยความจำเสมือน
การจัดการ. ตัวเลือกนี้หมายถึง -fPIC.
-mno-id-shared-library
สร้างรหัสที่ไม่ถือว่ามีการใช้ไลบรารีที่ใช้ร่วมกันแบบ ID นี่คือ
ค่าเริ่มต้น
-msshared-library-id=n
ระบุหมายเลขประจำตัวของไลบรารีที่ใช้ร่วมกันแบบอิง ID ที่กำลังคอมไพล์
การระบุค่า 0 จะสร้างโค้ดที่กะทัดรัดยิ่งขึ้น ระบุค่าอื่น ๆ กองกำลัง
การจัดสรรหมายเลขนั้นให้กับห้องสมุดปัจจุบัน แต่ไม่มีพื้นที่หรือเวลาอีกต่อไป
มีประสิทธิภาพมากกว่าการละเว้นตัวเลือกนี้
-mxgot
-mno-xgot
เมื่อสร้างโค้ดที่ไม่ขึ้นกับตำแหน่งสำหรับ ColdFire ให้สร้างโค้ดที่ใช้งานได้ถ้า
GOT มีมากกว่า 8192 รายการ รหัสนี้ใหญ่กว่าและช้ากว่ารหัส
สร้างโดยไม่มีตัวเลือกนี้ สำหรับโปรเซสเซอร์ M680x0 ไม่จำเป็นต้องใช้ตัวเลือกนี้ -fPIC
พอเพียง
โดยปกติ GCC จะใช้คำสั่งเดียวในการโหลดค่าจาก GOT ในขณะที่นี่คือ
ค่อนข้างมีประสิทธิภาพ ใช้งานได้ก็ต่อเมื่อ GOT มีขนาดเล็กกว่า 64k เท่านั้น อะไรก็ตาม
ใหญ่ขึ้นทำให้ตัวเชื่อมโยงรายงานข้อผิดพลาดเช่น:
ย้ายที่ตัดให้พอดี: R_68K_GOT16O foobar
หากเกิดเหตุการณ์นี้ขึ้น คุณควรคอมไพล์โค้ดของคุณใหม่ด้วย -mxgot. มันควรจะทำงานกับ
GOT ที่ใหญ่มาก อย่างไรก็ตาม รหัสที่สร้างด้วย -mxgot มีประสิทธิภาพน้อยกว่า เนื่องจากมัน
ใช้ 4 คำแนะนำในการดึงค่าของสัญลักษณ์สากล
โปรดทราบว่าตัวเชื่อมโยงบางตัว รวมถึงตัวเชื่อมโยง GNU เวอร์ชันใหม่กว่า สามารถสร้าง
GOT หลายรายการและจัดเรียงรายการ GOT หากคุณมีลิงเกอร์ดังกล่าว คุณจำเป็นเท่านั้น
ใช้ -mxgot เมื่อรวบรวมไฟล์อ็อบเจ็กต์เดียวที่เข้าถึงมากกว่า 8192 GOT
รายการ. น้อยคนนักที่จะทำ
ตัวเลือกเหล่านี้จะไม่มีผลใดๆ เว้นแต่ GCC กำลังสร้างโค้ดที่ไม่ขึ้นกับตำแหน่ง
เอ็มคอร์ Options
เหล่านี้เป็น -m ตัวเลือกที่กำหนดไว้สำหรับโปรเซสเซอร์ Motorola M*Core
- ฮาร์ดไลท์
-mno-ฮาร์ดไลท์
ค่าคงที่แบบอินไลน์ในสตรีมโค้ดหากสามารถทำได้ในสองคำสั่งหรือน้อยกว่า
-mdiv
-mno-div
ใช้คำสั่งแบ่ง (เปิดใช้งานโดยค่าเริ่มต้น)
-mrelax-ทันที
-mno-ผ่อนคลายทันที
อนุญาตให้ใช้คำสั่งขนาดใดก็ได้ในการดำเนินการบิต
-mwide-บิตฟิลด์
-mno-กว้าง bitfields
ถือว่าบิตฟิลด์เป็นขนาด "int" เสมอ
-m4byte-ฟังก์ชั่น
-mno-4byte-ฟังก์ชั่น
บังคับให้ฟังก์ชันทั้งหมดจัดชิดขอบ 4 ไบต์
-mcallgraph-ข้อมูล
-mno-callgraph-ข้อมูล
ปล่อยข้อมูล callgraph
-mslow ไบต์
-mno-ช้าไบต์
ต้องการการเข้าถึงคำเมื่ออ่านปริมาณไบต์
-little-endian
-mbig-endian
สร้างโค้ดสำหรับเป้าหมาย little-endian
- ลบ.ม
- ลบ.ม
สร้างรหัสสำหรับโปรเซสเซอร์ 210
-mno-lsim
สมมติว่ามีการรองรับรันไทม์แล้วจึงละเว้นไลบรารีตัวจำลอง
(libsim.ก) จากบรรทัดคำสั่งลิงเกอร์
-mstack-เพิ่มขึ้น=ขนาด
ตั้งค่าจำนวนสูงสุดสำหรับการดำเนินการเพิ่มสแต็คเดียว ค่าขนาดใหญ่สามารถ
เพิ่มความเร็วของโปรแกรมที่มีฟังก์ชั่นที่ต้องการจำนวนมาก
พื้นที่สแต็ก แต่ก็สามารถทำให้เกิดข้อผิดพลาดในการแบ่งส่วนได้หากสแต็กถูกขยาย
มากเกินไป ค่าเริ่มต้นคือ 0x1000
เมพ Options
-แม็บดิฟฟ์
เปิดใช้งานคำสั่ง "abs" ซึ่งเป็นข้อแตกต่างโดยสิ้นเชิงระหว่างสองรีจิสเตอร์
-mall-ตัวเลือก
เปิดใช้งานคำสั่งทางเลือกทั้งหมด---ค่าเฉลี่ย คูณ หาร การดำเนินการบิต
นำศูนย์ ความแตกต่างแน่นอน ต่ำสุด/สูงสุด คลิป และความอิ่มตัว
- เฉลี่ย
เปิดใช้งานคำสั่ง "ave" ซึ่งคำนวณค่าเฉลี่ยของสองรีจิสเตอร์
-mbase=n
ตัวแปรของขนาด n ไบต์หรือเล็กกว่าจะถูกวางไว้ในส่วน ".based" โดยค่าเริ่มต้น
ตัวแปรพื้นฐานใช้ $tp register เป็น base register และมีขีดจำกัด 128 ไบต์
ไปที่ส่วน ".based"
-เอ็มบิท็อป
เปิดใช้งานคำแนะนำการใช้งานบิต---การทดสอบบิต ("btstm"), ตั้งค่า ("bsetm"), clear
("bclrm") กลับด้าน ("bnotm") และทดสอบและตั้งค่า ("tas")
-mc=ชื่อ
เลือกว่าจะใส่ข้อมูลค่าคงที่ส่วนใด ชื่อ อาจเป็น "จิ๋ว" "ใกล้" หรือ
"ไกล".
-mclip
เปิดใช้งานคำแนะนำ "คลิป" โปรดทราบว่า "-mclip" จะไม่มีประโยชน์เว้นแต่คุณจะทำเช่นกัน
ให้ "-mminmax"
-mconfig=ชื่อ
เลือกหนึ่งในการกำหนดค่าหลักในตัว ชิป MeP แต่ละตัวมีอย่างน้อยหนึ่งตัว
โมดูลในนั้น แต่ละโมดูลมี CPU หลักและตัวประมวลผลร่วมที่หลากหลาย เป็นทางเลือก
คำแนะนำและอุปกรณ์ต่อพ่วง เครื่องมือ "MeP-Integrator" ซึ่งไม่ได้เป็นส่วนหนึ่งของ GCC มีให้
การกำหนดค่าเหล่านี้ผ่านตัวเลือกนี้ การใช้ตัวเลือกนี้เหมือนกับการใช้ทั้งหมด
ตัวเลือกบรรทัดคำสั่งที่เกี่ยวข้อง การกำหนดค่าเริ่มต้นคือ "ค่าเริ่มต้น"
-เอ็มคอป
เปิดใช้งานคำสั่งตัวประมวลผลร่วม โดยค่าเริ่มต้น นี่คือตัวประมวลผลร่วม 32 บิต บันทึก
ที่ปกติแล้วตัวประมวลผลร่วมเปิดใช้งานผ่านตัวเลือก "-mconfig="
-mcop32
เปิดใช้งานคำสั่งของตัวประมวลผลร่วม 32 บิต
-mcop64
เปิดใช้งานคำสั่งของตัวประมวลผลร่วม 64 บิต
-mvc2
เปิดใช้งานการตั้งเวลา IVC2 IVC2 เป็นตัวประมวลผลร่วม VLIW 64 บิต
-mdc
ทำให้ตัวแปรคงที่ถูกวางไว้ในส่วน ".near"
-mdiv
เปิดใช้งานคำแนะนำ "div" และ "divu"
-meb
สร้างรหัส big-endian
-เมล
สร้างโค้ด little-endian
-mio-ระเหย
บอกคอมไพเลอร์ว่าตัวแปรใดๆ ที่มีแอตทริบิวต์ "io" จะต้องเป็น
ถือว่าผันผวน
-มล ทำให้ตัวแปรถูกกำหนดให้กับส่วน ".far" โดยค่าเริ่มต้น
-mleadz
เปิดใช้งานคำสั่ง "leadz" (ศูนย์นำหน้า)
มม ทำให้ตัวแปรถูกกำหนดให้กับส่วน ".near" โดยค่าเริ่มต้น
-mminmax
เปิดใช้งานคำแนะนำ "นาที" และ "สูงสุด"
-mmult
เปิดใช้งานคำแนะนำการคูณและการคูณสะสม
-mno-ตัวเลือก
ปิดใช้งานคำแนะนำเสริมทั้งหมดที่เปิดใช้งานโดย "-mall-opts"
-mrepeat
เปิดใช้งานคำแนะนำ "ทำซ้ำ" และ "ทำซ้ำ" ที่ใช้สำหรับการวนซ้ำแบบโอเวอร์เฮดต่ำ
-นางสาว ทำให้ตัวแปรทั้งหมดเป็นค่าเริ่มต้นในส่วน ".tiny" โปรดทราบว่ามี
จำกัด 65536 ไบต์ในส่วนนี้ การเข้าถึงตัวแปรเหล่านี้ใช้ %gp base
ทะเบียน
-มสตูร์
เปิดใช้งานคำแนะนำความอิ่มตัว โปรดทราบว่าคอมไพเลอร์ไม่ได้ในขณะนี้
สร้างสิ่งเหล่านี้เอง แต่ตัวเลือกนี้รวมอยู่ในความเข้ากันได้กับเครื่องมืออื่น ๆ
เช่น "เป็น"
-msdram
เชื่อมโยงรันไทม์ตาม SDRAM แทนรันไทม์ตาม ROM เริ่มต้น
-msim
เชื่อมโยงไลบรารีรันไทม์ของโปรแกรมจำลอง
-msimnovec
เชื่อมโยงไลบรารีรันไทม์ของโปรแกรมจำลอง ยกเว้นการรองรับในตัวสำหรับการรีเซ็ตและ
เวกเตอร์และตารางข้อยกเว้น
-เอ็มทีเอฟ
ทำให้ฟังก์ชันทั้งหมดเป็นค่าเริ่มต้นในส่วน ".far" หากไม่มีตัวเลือกนี้ ฟังก์ชัน
ค่าเริ่มต้นของส่วน ".near"
-mtiny=n
ตัวแปรที่เป็น n ไบต์หรือน้อยกว่าจะถูกจัดสรรให้กับส่วน ".tiny" เหล่านี้
ตัวแปรใช้การลงทะเบียนฐาน $gp ค่าเริ่มต้นสำหรับตัวเลือกนี้คือ 4 แต่โปรดทราบว่า
มีการจำกัดขนาด 65536 ไบต์สำหรับส่วน ".tiny"
ไมโครเบลซ Options
-msoft-ลอย
ใช้การจำลองซอฟต์แวร์สำหรับจุดลอยตัว (ค่าเริ่มต้น)
-mhard-ลอย
ใช้คำแนะนำจุดลอยตัวของฮาร์ดแวร์
-mmmcpy
อย่าปรับการเคลื่อนไหวบล็อกให้เหมาะสม ใช้ "memcpy"
-mno-ชัดเจน
ตัวเลือกนี้เลิกใช้แล้ว ใช้ -fno-ศูนย์-เริ่มต้น-in-bss แทน.
-mcpu=ประเภทซีพียู
ใช้คุณสมบัติและกำหนดเวลารหัสสำหรับ CPU ที่กำหนด ค่าที่รองรับอยู่ใน
รูป vX.YY.Zที่นี่มี X เป็นเวอร์ชันหลัก YY เป็นรุ่นรองและ Z is
รหัสความเข้ากันได้ ค่าตัวอย่างคือ v3.00.ก, v4.00.b, v5.00.ก, v5.00.b, v5.00.b,
v6.00.ก.
-mxl-soft-mul
ใช้ซอฟต์แวร์จำลองการคูณ (ค่าเริ่มต้น)
-mxl-soft-div
ใช้ซอฟต์แวร์จำลองสำหรับการแบ่ง (ค่าเริ่มต้น)
-mxl-บาร์เรลกะ
ใช้ตัวเปลี่ยนบาร์เรลของฮาร์ดแวร์
-mxl-รูปแบบเปรียบเทียบ
ใช้รูปแบบการเปรียบเทียบคำแนะนำ
-msmall-หาร
ใช้การปรับการค้นหาตารางให้เหมาะสมสำหรับการหารจำนวนเต็มที่มีเครื่องหมายขนาดเล็ก
-mxl-stack-ตรวจสอบ
ตัวเลือกนี้เลิกใช้แล้ว ใช้ -fstack-ตรวจสอบ แทน.
-mxl-gp-ตัวเลือก
ใช้ส่วน ".sdata"/".sbss" ที่สัมพันธ์กับ GP
-mxl-คูณสูง
ใช้คำสั่งคูณสูงสำหรับส่วนสูงของการคูณ 32x32
-mxl-float-แปลง
ใช้คำแนะนำการแปลงทศนิยมของฮาร์ดแวร์
-mxl-float-ตร.ม
ใช้คำสั่งรากที่สองของจุดทศนิยมของฮาร์ดแวร์
-mbig-endian
สร้างโค้ดสำหรับเป้าหมาย big-endian
-little-endian
สร้างโค้ดสำหรับเป้าหมาย little-endian
-mxl-เรียงลำดับใหม่
ใช้คำแนะนำในการจัดลำดับใหม่ (สลับและโหลด/จัดเก็บแบบย้อนกลับไบต์)
-mxl-โหมด-แอพรุ่น
เลือกรุ่นสมัคร แอพรุ่น. รุ่นที่ถูกต้องคือ
ปฏิบัติการ
ปฏิบัติการปกติ (ค่าเริ่มต้น) ใช้รหัสเริ่มต้น crt0.o.
xmdstub
สำหรับใช้กับ Xilinx Microprocessor Debugger (XMD) ซอฟต์แวร์ที่ใช้การดีบักแบบล่วงล้ำ
ตัวแทนที่เรียกว่า xmdstub สิ่งนี้ใช้ไฟล์เริ่มต้น crt1.o และกำหนดที่อยู่เริ่มต้นของ
โปรแกรมเป็น 0x800
บูต
สำหรับแอปพลิเคชันที่โหลดโดยใช้ bootloader โมเดลนี้ใช้ไฟล์เริ่มต้น
crt2.o ซึ่งไม่มีตัวจัดการเวกเตอร์รีเซ็ตตัวประมวลผล นี้เหมาะ
สำหรับการถ่ายโอนการควบคุมบนโปรเซสเซอร์รีเซ็ตไปที่ bootloader แทนที่จะเป็น
แอพลิเคชัน
นักเลง
สำหรับการใช้งานที่ไม่ต้องการเวกเตอร์ MicroBlaze ตัวเลือกนี้
อาจมีประโยชน์สำหรับแอปพลิเคชันที่ทำงานภายในแอปพลิเคชันการตรวจสอบ รุ่นนี้
ใช้ crt3.o เป็นไฟล์เริ่มต้น
ตัวเลือกเสริม (Option) -xl-โหมด-แอพรุ่น เป็นนามแฝงที่เลิกใช้แล้วสำหรับ -mxl-โหมด-แอพรุ่น.
MIPS Options
-อี.บี สร้างรหัส big-endian
-THE สร้างโค้ด little-endian นี่คือค่าเริ่มต้นสำหรับ มิ้ปส์*เอล-*-* การกำหนดค่า
-มีนาคม=โค้ง
สร้างรหัสที่ทำงานบน โค้งซึ่งสามารถเป็นชื่อของ MIPS ISA ทั่วไปหรือ
ชื่อของโปรเซสเซอร์เฉพาะ ชื่อ ISA คือ: มิปส์1, มิปส์2, มิปส์3, มิปส์4,
มิปส์32, mips32r2, มิปส์64 และ mips64r2. ชื่อโปรเซสเซอร์คือ: 4kc, 4km, 4kp, 4ksc,
4เคซี, 4 กม, 4เก็บ, 4kd, 5kc, 5kf, 20kc, 24kc, 24kf2_1, 24kf1_1, 24เคซี, 24kef2_1,
24kef1_1, 34kc, 34kf2_1, 34kf1_1, 34กิโลนิวตัน, 74kc, 74kf2_1, 74kf1_1, 74kf3_2, 1004kc,
1004kf2_1, 1004kf1_1, loongson2e, loongson2f, loongson3a, M4K, แปด, ออคทีน+,
ออคตอน2, กลุ่มดาวนายพราน, r2000, r3000, r3900, r4000, r4400, r4600, r4650, r4700, r6000, r8000,
rm7000, rm9000, r10000, r12000, r14000, r16000, sb1, sr71000, vr4100, vr4111, vr4120,
vr4130, vr4300, vr5000, vr5400, vr5500, XLR และ xlp. ความคุ้มค่าพิเศษ จาก-abi
เลือกสถาปัตยกรรมที่เข้ากันได้มากที่สุดสำหรับ ABI ที่เลือก (นั่นคือ มิปส์1 for
ABI แบบ 32 บิตและ มิปส์3 สำหรับ ABI 64 บิต)
ชุดเครื่องมือ Linux/GNU ดั้งเดิมยังรองรับค่า พื้นเมืองที่คัดสรรสิ่งที่ดีที่สุด
ตัวเลือกสถาปัตยกรรมสำหรับโปรเซสเซอร์โฮสต์ -march=เจ้าของภาษา ไม่มีผลถ้า GCC ทำ
ไม่รู้จักโปรเซสเซอร์
ในชื่อโปรเซสเซอร์ ตัวสุดท้าย 000 สามารถย่อเป็น k (ตัวอย่างเช่น, -มีนาคม = r2k).
คำนำหน้าเป็นตัวเลือกและ vr อาจจะเขียน r.
ชื่อของแบบฟอร์ม nฉ2_1 อ้างถึงโปรเซสเซอร์ที่มี FPU โอเวอร์คล็อกที่อัตราครึ่งหนึ่งของ
แกน, ชื่อของแบบฟอร์ม nฉ1_1 อ้างถึงโปรเซสเซอร์ที่มี FPU โอเวอร์คล็อกที่อัตราเดียวกัน
เป็นแกนหลักและชื่อรูป nฉ3_2 อ้างถึงโปรเซสเซอร์ที่มี FPU โอเวอร์คล็อกอัตราส่วน
ของ 3:2 เมื่อเทียบกับแกนกลาง ด้วยเหตุผลด้านความเข้ากันได้ nf ได้รับการยอมรับว่าเป็น
คำพ้องความหมายสำหรับ nฉ2_1 ในขณะที่ nx และ bfx ได้รับการยอมรับเป็นคำพ้องความหมายสำหรับ nฉ1_1.
GCC กำหนดมาโครสองตัวตามค่าของตัวเลือกนี้ อย่างแรกคือ _MIPS_ARCH,
ซึ่งให้ชื่อของสถาปัตยกรรมเป้าหมายเป็นสตริง ที่สองมีรูปแบบ
_MIPS_ARCH_fooที่นี่มี foo เป็นมูลค่าตัวพิมพ์ใหญ่ของ _MIPS_ARCH. ตัวอย่างเช่น
-มีนาคม=r2000 ชุด _MIPS_ARCH ไปยัง "ร2000" และกำหนดมาโคร _MIPS_ARCH_R2000.
โปรดทราบว่า _MIPS_ARCH มาโครใช้ชื่อโปรเซสเซอร์ที่ระบุข้างต้น กล่าวอีกนัยหนึ่ง
มีคำนำหน้าเต็มและไม่มีตัวย่อ 000 as k. ในกรณีของ จาก-abiที่
มาโครตั้งชื่อสถาปัตยกรรมที่ได้รับการแก้ไข ( "มิพส์1" or "มิพส์3"). มันตั้งชื่อ
สถาปัตยกรรมเริ่มต้นเมื่อไม่มี -มีนาคม มีตัวเลือกให้
-mtune=โค้ง
เพิ่มประสิทธิภาพสำหรับ โค้ง. เหนือสิ่งอื่นใด ตัวเลือกนี้จะควบคุมวิธีการต่างๆ ของคำสั่ง
ตามกำหนดเวลาและต้นทุนที่รับรู้ของการดำเนินการทางคณิตศาสตร์ รายการของ โค้ง ค่า
เหมือนกับสำหรับ -มีนาคม.
เมื่อไม่ใช้ตัวเลือกนี้ GCC จะปรับให้เหมาะสมสำหรับโปรเซสเซอร์ที่ระบุโดย -มีนาคม. โดย
การใช้ -มีนาคม และ -mtune ร่วมกันเป็นไปได้ที่จะสร้างโค้ดที่ทำงานบน a
ตระกูลโปรเซสเซอร์ แต่ปรับโค้ดให้เหมาะสมสำหรับสมาชิกคนหนึ่งของตระกูลนั้น
-mtune กำหนดมาโคร _MIPS_TUNE และ _MIPS_TUNE_fooซึ่งทำงานในลักษณะเดียวกับ
-มีนาคม ที่อธิบายไว้ข้างต้น
-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 แบบผสม และไม่ได้มีไว้สำหรับการทดสอบทั่วไป
ใช้ในการคอมไพล์รหัสผู้ใช้
-mininterlink-mips16
-mno-อินเตอร์ลิงค์-mips16
กำหนด (ไม่ต้องการ) ว่ารหัสที่ไม่ใช่ MIPS16 สามารถเชื่อมโยงกับรหัส MIPS16 ได้
ตัวอย่างเช่น รหัสที่ไม่ใช่ MIPS16 ไม่สามารถข้ามไปยังรหัส MIPS16 ได้โดยตรง มันต้องใช้ a
โทรหรือกระโดดทางอ้อม -mininterlink-mips16 ดังนั้นจึงปิดการใช้งานการกระโดดโดยตรงเว้นแต่
GCC รู้ดีว่าเป้าหมายของการกระโดดไม่ใช่ MIPS16
-มาบิ=32
-มาบิ=o64
-มาบิ=n32
-มาบิ=64
-มาบิ=เอบิ
สร้างรหัสสำหรับ ABI ที่กำหนด
โปรดทราบว่า EABI มีตัวแปร 32 บิตและ 64 บิต GCC มักจะสร้าง 64 บิต
รหัสเมื่อคุณเลือกสถาปัตยกรรม 64 บิต แต่คุณสามารถใช้ -mgp32 เพื่อรับรหัส 32 บิต
แทน.
สำหรับข้อมูลเกี่ยวกับ O64 ABI โปรดดูที่http://gcc.gnu.org/projects/mipso64-abi.html>.
GCC รองรับตัวแปร o32 ABI ซึ่งรีจิสเตอร์ทศนิยมเป็น 64 แทน
กว้างกว่า 32 บิต คุณสามารถเลือกชุดค่าผสมนี้ด้วย -มาบิ=32 -mfp64. ABI . นี้
อาศัยคำแนะนำ "mthc1" และ "mfhc1" ดังนั้นจึงรองรับเฉพาะ
โปรเซสเซอร์ MIPS32R2
การกำหนดค่ารีจิสเตอร์สำหรับอาร์กิวเมนต์และค่าที่ส่งคืนยังคงเหมือนเดิม แต่แต่ละค่า
ค่าสเกลาร์ถูกส่งผ่านในรีจิสเตอร์ 64 บิตเดียว แทนที่จะเป็นคู่ 32 บิต
ทะเบียน ตัวอย่างเช่น ค่าจุดลอยตัวของสเกลาร์จะถูกส่งกลับใน $f0 เท่านั้น ไม่ใช่
$f0/$f1 คู่. ชุดของการลงทะเบียนที่บันทึกการโทรยังคงเหมือนเดิม แต่ 64 บิตทั้งหมด
จะถูกบันทึกไว้
-มาบิคอล
-mno-เอบิคอล
สร้าง (ไม่สร้าง) โค้ดที่เหมาะสำหรับอ็อบเจ็กต์ไดนามิกสไตล์ SVR4
-มาบิคอล เป็นค่าเริ่มต้นสำหรับระบบที่ใช้ SVR4
-msshared
-mno- แบ่งปัน
สร้าง (ไม่สร้าง) รหัสที่ไม่ขึ้นกับตำแหน่งอย่างสมบูรณ์ และสามารถ
จึงเชื่อมโยงกับไลบรารีที่ใช้ร่วมกัน ตัวเลือกนี้มีผลเท่านั้น -มาบิคอล.
ทั้งหมด -มาบิคอล ตามธรรมเนียมแล้วโค้ดจะไม่ขึ้นกับตำแหน่งโดยไม่คำนึงถึงตัวเลือก
กดไลก์ -fPIC และ -fpic. อย่างไรก็ตาม ในฐานะที่เป็นส่วนขยาย GNU toolchain อนุญาตให้ปฏิบัติการได้
เพื่อใช้การเข้าถึงแบบสัมบูรณ์สำหรับสัญลักษณ์ที่มีผลผูกพันในเครื่อง นอกจากนี้ยังสามารถใช้ GP . ที่สั้นกว่าได้อีกด้วย
ลำดับการเริ่มต้นและสร้างการเรียกโดยตรงไปยังฟังก์ชันที่กำหนดในเครื่อง นี้
โหมดถูกเลือกโดย -mno- แบ่งปัน.
-mno- แบ่งปัน ขึ้นอยู่กับ binutils 2.16 หรือสูงกว่า และสร้างวัตถุที่สามารถเป็นได้เท่านั้น
เชื่อมโยงโดยตัวเชื่อมโยง GNU อย่างไรก็ตาม ตัวเลือกนี้ไม่มีผลกับ ABI ของรอบชิงชนะเลิศ
ปฏิบัติการได้; มันมีผลกับ ABI ของวัตถุที่ย้ายได้เท่านั้น โดยใช้ -mno- แบ่งปัน
โดยทั่วไปจะทำให้ไฟล์เรียกทำงานมีขนาดเล็กลงและเร็วขึ้น
-msshared เป็นค่าเริ่มต้น
-mplt
-mno-plt
สมมติ (อย่าถือเอา) ว่าตัวเชื่อมโยงแบบสแตติกและไดนามิกรองรับ PLT และสำเนา
การย้ายถิ่นฐาน ตัวเลือกนี้มีผลเท่านั้น -mno- แบ่งปัน -มาบิคอล. สำหรับ n64 ABI นี่
ตัวเลือกไม่มีผลหากไม่มี -msym32.
คุณสามารถทำได้ -mplt ค่าเริ่มต้นโดยกำหนดค่า GCC ด้วย --กับ-mips-plt. ค่าเริ่มต้น
is -mno-plt มิฉะนั้น.
-mxgot
-mno-xgot
ยก (ไม่ยก) ข้อ จำกัด ปกติเกี่ยวกับขนาดของตารางออฟเซ็ตส่วนกลาง
โดยปกติ GCC จะใช้คำสั่งเดียวในการโหลดค่าจาก GOT ในขณะที่นี่คือ
ค่อนข้างมีประสิทธิภาพ ใช้งานได้ก็ต่อเมื่อ GOT มีขนาดเล็กกว่า 64k เท่านั้น อะไรก็ตาม
ใหญ่ขึ้นทำให้ตัวเชื่อมโยงรายงานข้อผิดพลาดเช่น:
การย้ายที่ถูกตัดให้พอดี: R_MIPS_GOT16 foobar
หากเกิดเหตุการณ์นี้ขึ้น คุณควรคอมไพล์โค้ดของคุณใหม่ด้วย -mxgot. ใช้งานได้กับมาก
GOT ขนาดใหญ่ แม้ว่าโค้ดจะมีประสิทธิภาพน้อยกว่าเช่นกัน เนื่องจากใช้เวลาสาม
คำแนะนำในการดึงค่าของสัญลักษณ์สากล
โปรดทราบว่าตัวเชื่อมโยงบางตัวสามารถสร้าง GOT ได้หลายตัว หากคุณมีลิงเกอร์ดังกล่าว คุณ
จำเป็นต้องใช้เท่านั้น -mxgot เมื่อไฟล์อ็อบเจ็กต์เดียวเข้าถึงมากกว่า 64k's
มูลค่ารายการ GOT น้อยคนนักที่จะทำ
ตัวเลือกเหล่านี้จะไม่มีผลใดๆ เว้นแต่ GCC กำลังสร้างโค้ดที่ไม่ขึ้นกับตำแหน่ง
-mgp32
สมมติว่ารีจิสเตอร์เอนกประสงค์กว้าง 32 บิต
-mgp64
สมมติว่ารีจิสเตอร์เอนกประสงค์กว้าง 64 บิต
-mfp32
สมมติว่าการลงทะเบียนทศนิยมมีความกว้าง 32 บิต
-mfp64
สมมติว่าการลงทะเบียนทศนิยมมีความกว้าง 64 บิต
-mhard-ลอย
ใช้คำสั่งตัวประมวลผลร่วมทศนิยม
-msoft-ลอย
ห้ามใช้คำสั่งตัวประมวลผลร่วมแบบทศนิยม ใช้จุดลอยตัว
การคำนวณโดยใช้การเรียกห้องสมุดแทน
-mno-ลอย
เทียบเท่ากับ -msoft-ลอยแต่ยังยืนยันอีกว่าโปรแกรมกำลังคอมไพล์
ไม่ดำเนินการใด ๆ ของทศนิยม ตัวเลือกนี้ได้รับการสนับสนุนในปัจจุบัน
โดยการกำหนดค่า MIPS แบบเปลือยบางตัวเท่านั้น ซึ่งอาจเลือกชุดพิเศษของ
ไลบรารีที่ไม่มีการสนับสนุนจุดลอยตัวทั้งหมด (รวมถึงตัวอย่างเช่น
ชี้รูปแบบ "printf") หากโค้ดที่คอมไพล์ด้วย "-mno-float" บังเอิญมี
การดำเนินการทศนิยม มีแนวโน้มที่จะประสบกับความล้มเหลวของเวลาเชื่อมโยงหรือรันไทม์
-msingle-ลอย
สมมติว่าตัวประมวลผลร่วมทศนิยมสนับสนุนเฉพาะการดำเนินการที่มีความแม่นยำเพียงครั้งเดียว
-mdouble-ลอย
สมมติว่าตัวประมวลผลร่วมทศนิยมสนับสนุนการดำเนินการที่มีความแม่นยำสองเท่า นี้
เป็นค่าเริ่มต้น
-mlsc
-mno-llsc
ใช้ (ไม่ใช้) ll, scและ ซิงค์ คำแนะนำในการใช้หน่วยความจำอะตอมในตัว
ฟังก์ชั่น. เมื่อไม่ได้ระบุตัวเลือกใด GCC จะใช้คำแนะนำหากเป้าหมาย
สถาปัตยกรรมสนับสนุนพวกเขา
-mlsc มีประโยชน์หากสภาพแวดล้อมรันไทม์สามารถเลียนแบบคำสั่งและ -mno-llsc
อาจมีประโยชน์เมื่อรวบรวม ISA ที่ไม่เป็นมาตรฐาน คุณสามารถสร้างตัวเลือกอย่างใดอย่างหนึ่ง
ค่าเริ่มต้นโดยกำหนดค่า GCC ด้วย --กับ-llsc และ --โดยไม่ต้อง-llsc ตามลำดับ
--กับ-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
-mpaired-เดียว
-mno-คู่เดียว
ใช้ (อย่าใช้) คำแนะนำแบบทศนิยมคู่เดียว
ตัวเลือกนี้ต้องมีการเปิดใช้งานการสนับสนุนจุดลอยตัวของฮาร์ดแวร์
-mdmx
-mno-mdmx
คำแนะนำการใช้ (อย่าใช้) MIPS Digital Media Extension ตัวเลือกนี้สามารถเป็นได้เท่านั้น
ใช้เมื่อสร้างรหัส 64 บิตและต้องการการสนับสนุนจุดลอยตัวของฮาร์ดแวร์เป็น
เปิดการใช้งาน
-mips3d
-mno-mips3d
ใช้ (อย่าใช้) MIPS-3D ASE ทางเลือก -mips3d หมายถึง -mpaired-เดียว.
-มม
-mno-ภูเขา
ใช้ (อย่าใช้) MT Multithreading คำแนะนำ
-มม
-mno-mcu
ใช้ (อย่าใช้) คำแนะนำ MIPS MCU ASE
-mlong64
บังคับประเภท "ยาว" ให้มีความกว้าง 64 บิต ดู -mlong32 สำหรับคำอธิบายของค่าเริ่มต้น
และวิธีการกำหนดขนาดของตัวชี้
-mlong32
บังคับประเภท "long", "int" และตัวชี้ให้มีความกว้าง 32 บิต
ขนาดเริ่มต้นของ "int", "long" และตัวชี้ขึ้นอยู่กับ ABI ทั้งหมด
ABI ที่รองรับใช้ "int" แบบ 32 บิต n64 ABI ใช้ "long" แบบ 64 บิต เช่นเดียวกับ 64-bit
อีเอบีไอ; ส่วนอื่นใช้ "long" แบบ 32 บิต พอยน์เตอร์มีขนาดเท่ากับ "ยาว" หรือ
ขนาดเดียวกันกับการลงทะเบียนจำนวนเต็มแล้วแต่จำนวนใดจะน้อยกว่า
-msym32
-mno-sym32
สมมติ (อย่าสมมติ) ว่าสัญลักษณ์ทั้งหมดมีค่า 32 บิต โดยไม่คำนึงถึงตัวเลือกที่เลือก
เอบีไอ. ตัวเลือกนี้มีประโยชน์เมื่อใช้ร่วมกับ -มาบิ=64 และ -mno-เอบิคอล เพราะมัน
อนุญาตให้ GCC สร้างการอ้างอิงที่สั้นและเร็วขึ้นไปยังที่อยู่สัญลักษณ์
-G NUM
ใส่คำจำกัดความของข้อมูลที่มองเห็นได้จากภายนอกในส่วนข้อมูลขนาดเล็กหากข้อมูลนั้นไม่ใช่
มีขนาดใหญ่กว่า NUM ไบต์ GCC สามารถสร้างการเข้าถึงข้อมูลได้อย่างมีประสิทธิภาพมากขึ้น ดู
-mgpopt เพื่อดูรายละเอียด
ค่าดีฟอลต์ -G ตัวเลือกขึ้นอยู่กับการกำหนดค่า
-mlocal-sdata
-mno-local-sdata
ขยาย (ไม่ขยาย) the -G พฤติกรรมต่อข้อมูลในเครื่องด้วย เช่น ตัวแปรคงที่
ใน C. -mlocal-sdata เป็นค่าเริ่มต้นสำหรับการกำหนดค่าทั้งหมด
หากตัวเชื่อมโยงบ่นว่าแอปพลิเคชันใช้ข้อมูลขนาดเล็กเกินไป คุณอาจ
ต้องการลองสร้างชิ้นส่วนที่มีความสำคัญน้อยกว่าด้วย -mno-local-sdata. คุณ
อาจต้องการสร้างไลบรารีขนาดใหญ่ด้วย -mno-local-sdata, เพื่อให้ห้องสมุด
ปล่อยให้มีพื้นที่มากขึ้นสำหรับโปรแกรมหลัก
-mextern-sdata
-mno-ภายนอก-sdata
สมมติ (อย่าสมมติ) ว่าข้อมูลที่กำหนดโดยภายนอกนั้นอยู่ในส่วนข้อมูลขนาดเล็กหาก
ขนาดของข้อมูลนั้นอยู่ภายใน -G ขีด จำกัด -mextern-sdata เป็นค่าเริ่มต้นสำหรับทุกคน
การกำหนดค่า
หากคุณรวบรวมโมดูล วิธี กับ -mextern-sdata -G NUM -mgpoptและ วิธี อ้างอิง
ตัวแปร var ที่ไม่ใหญ่กว่า NUM ไบต์ คุณต้องแน่ใจว่า var ถูกวางไว้
ในส่วนข้อมูลขนาดเล็ก ถ้า var ถูกกำหนดโดยโมดูลอื่น คุณต้องคอมไพล์
โมดูลนั้นสูงพอ -G ตั้งค่าหรือแนบแอตทริบิวต์ "ส่วน" ไปที่ var's
คำนิยาม. ถ้า var เป็นเรื่องปกติคุณต้องเชื่อมโยงแอปพลิเคชันกับ high-enough -G
การตั้งค่า
วิธีที่ง่ายที่สุดในการปฏิบัติตามข้อจำกัดเหล่านี้คือการรวบรวมและเชื่อมโยงทุกโมดูล
แบบเดียวกับ -G ตัวเลือก. อย่างไรก็ตาม คุณอาจต้องการสร้างห้องสมุดที่รองรับ
ขีดจำกัดข้อมูลขนาดเล็กหลายแบบ คุณสามารถทำได้โดยรวบรวมห้องสมุดด้วย
รองรับสูงสุด -G การตั้งค่าและเพิ่มเติมโดยใช้ -mno-ภายนอก-sdata เพื่อหยุด
ห้องสมุดจากการตั้งสมมติฐานเกี่ยวกับข้อมูลที่กำหนดโดยภายนอก
-mgpopt
-mno-gpopt
ใช้ (อย่าใช้) การเข้าถึงแบบสัมพันธ์กับ GP สำหรับสัญลักษณ์ที่ทราบว่าอยู่ในข้อมูลขนาดเล็ก
ส่วน; ดู -G, -mlocal-sdata และ -mextern-sdata. -mgpopt เป็นค่าเริ่มต้นสำหรับทุกคน
การกำหนดค่า
-mno-gpopt มีประโยชน์สำหรับกรณีที่ $gp register อาจไม่มีค่าของ
"_gp". ตัวอย่างเช่น หากโค้ดเป็นส่วนหนึ่งของไลบรารี่ที่อาจใช้ในการบู๊ต
มอนิเตอร์ โปรแกรมที่เรียกใช้รูทีนมอนิเตอร์การบู๊ตส่งค่าที่ไม่รู้จักใน $gp (ใน
สถานการณ์ดังกล่าว มอนิเตอร์บูตเองมักจะถูกคอมไพล์ด้วย -G0.)
-mno-gpopt หมายถึง -mno-local-sdata และ -mno-ภายนอก-sdata.
-membedded-ข้อมูล
-mno-ฝังข้อมูล
จัดสรรตัวแปรให้กับส่วนข้อมูลแบบอ่านอย่างเดียวก่อน ถ้าเป็นไปได้ จากนั้นถัดไปใน
ส่วนข้อมูลขนาดเล็กถ้าเป็นไปได้ มิฉะนั้นในข้อมูล ซึ่งจะทำให้โค้ดช้าลงเล็กน้อย
กว่าค่าเริ่มต้น แต่ลดจำนวน RAM ที่จำเป็นเมื่อดำเนินการ และอาจ
เป็นที่ต้องการสำหรับระบบฝังตัวบางระบบ
-muninit-const-in-rodata
-mno-uninit-const-in-rodata
ใส่ตัวแปร "const" ที่ยังไม่ได้กำหนดค่าไว้ในส่วนข้อมูลแบบอ่านอย่างเดียว ตัวเลือกนี้คือ
มีความหมายร่วมกับ .เท่านั้น -membedded-ข้อมูล.
-mcode-อ่านได้=การตั้งค่า
ระบุว่า GCC อาจสร้างโค้ดที่อ่านจากส่วนปฏิบัติการได้หรือไม่ มี
สามการตั้งค่าที่เป็นไปได้:
-mcode-readable=ใช่
คำแนะนำอาจเข้าถึงส่วนปฏิบัติการได้อย่างอิสระ นี่คือการตั้งค่าเริ่มต้น.
-mcode-readable = pcrel
MIPS16 คำแนะนำในการโหลดที่สัมพันธ์กับพีซีสามารถเข้าถึงส่วนปฏิบัติการได้ แต่อื่นๆ
คำแนะนำจะต้องไม่ทำเช่นนั้น ตัวเลือกนี้มีประโยชน์กับโปรเซสเซอร์ 4KSc และ 4KSd
เมื่อรหัส TLB มีชุดบิตยับยั้งการอ่าน นอกจากนี้ยังเป็นประโยชน์กับโปรเซสเซอร์
ที่สามารถกำหนดค่าให้มีอินเทอร์เฟซ SRAM สองคำสั่ง/ข้อมูล และนั่น
เช่นเดียวกับ M4K จะเปลี่ยนเส้นทางโหลดที่สัมพันธ์กับพีซีไปยัง RAM คำสั่งโดยอัตโนมัติ
-mcode-readable=no
คำแนะนำต้องไม่เข้าถึงส่วนที่ปฏิบัติการได้ ตัวเลือกนี้มีประโยชน์บน
เป้าหมายที่กำหนดค่าให้มีอินเทอร์เฟซ SRAM แบบคู่คำสั่ง/ข้อมูล แต่
ที่ (ต่างจาก M4K) จะไม่เปลี่ยนเส้นทางโหลดที่สัมพันธ์กับพีซีไปยัง
แรมคำสั่ง
-msplit-ที่อยู่
-mno-แยกที่อยู่
เปิดใช้งาน (ปิดใช้งาน) การใช้ตัวดำเนินการย้ายตำแหน่งแอสเซมเบลอร์ "%hi()" และ "%lo()" นี้
ตัวเลือกถูกแทนที่โดย -meexplicit-relocs แต่เก็บไว้ข้างหลัง
ความเข้ากันได้
-meexplicit-relocs
-mno-ชัดเจน-relocs
ใช้ (อย่าใช้) ตัวดำเนินการย้ายตำแหน่งแอสเซมเบลอร์เมื่อจัดการกับที่อยู่ที่เป็นสัญลักษณ์
ทางเลือกที่เลือกโดย -mno-ชัดเจน-relocsคือการใช้แมโครแอสเซมเบลอร์แทน
-meexplicit-relocs เป็นค่าเริ่มต้นหาก GCC ได้รับการกำหนดค่าให้ใช้แอสเซมเบลอร์ที่
รองรับตัวดำเนินการขนย้าย
-mcheck-zero-ดิวิชั่น
-mno-ตรวจสอบศูนย์หาร
กับดัก (อย่าดักจับ) ในการหารจำนวนเต็มด้วยศูนย์
ค่าเริ่มต้นคือ -mcheck-zero-ดิวิชั่น.
-mdivide-กับดัก
-mdivide-ตัวแบ่ง
ระบบ MIPS ตรวจสอบการหารด้วยศูนย์โดยสร้างกับดักแบบมีเงื่อนไขหรือa
ทำลายคำสั่ง การใช้กับดักส่งผลให้โค้ดมีขนาดเล็กลง แต่รองรับเฉพาะ MIPS
II และภายหลัง นอกจากนี้ เคอร์เนล Linux บางเวอร์ชันยังมีจุดบกพร่องที่ป้องกันกับดัก
จากการสร้างสัญญาณที่เหมาะสม ("SIGFPE") ใช้ -mdivide-กับดัก เพื่อให้เงื่อนไข
กับดักสถาปัตยกรรมที่สนับสนุนพวกเขาและ -mdivide-ตัวแบ่ง เพื่อบังคับให้ใช้
หยุดพัก
ค่าเริ่มต้นมักจะ -mdivide-กับดักแต่สามารถแทนที่ได้เมื่อกำหนดค่า time
การใช้ --with-divide=ตัวแบ่ง. การตรวจสอบแบบหารด้วยศูนย์สามารถปิดใช้งานได้อย่างสมบูรณ์โดยใช้
-mno-ตรวจสอบศูนย์หาร.
-mmmcpy
-mno-memcpy
บังคับ (อย่าบังคับ) การใช้ "memcpy()" สำหรับการย้ายบล็อกที่ไม่สำคัญ ค่าเริ่มต้น
is -mno-memcpyซึ่งช่วยให้ GCC สามารถอินไลน์สำเนาขนาดคงที่ส่วนใหญ่ได้
-mlong-โทร
-นาทีโทรยาว
ปิดการใช้งาน (อย่าปิดการใช้งาน) โดยใช้คำสั่ง "jal" ฟังก์ชั่นการโทรโดยใช้ "jal"
มีประสิทธิภาพมากกว่า แต่ต้องการให้ผู้โทรและผู้รับสายมีขนาด 256 เมกะไบต์ . เดียวกัน
ส่วน
ตัวเลือกนี้ไม่มีผลกับโค้ด abicalls ค่าเริ่มต้นคือ -นาทีโทรยาว.
- แมด
-mno-บ้า
เปิดใช้งาน (ปิดใช้งาน) การใช้คำสั่ง "mad", "madu" และ "mul" ตามที่
R4650 ไอเอสเอ
-mfused-mad
-mno-ฟิวส์ madd
เปิดใช้งาน (ปิดใช้งาน) การใช้คำสั่งการคูณจุดทศนิยมเมื่อพวกมัน
สามารถใช้ได้ ค่าเริ่มต้นคือ -mfused-mad.
บนซีพียู R8000 เมื่อใช้คำสั่งการคูณสะสม ตัวกลาง
ผลิตภัณฑ์คำนวณด้วยความแม่นยำที่ไม่มีที่สิ้นสุดและไม่อยู่ภายใต้ FCSR Flush to
ศูนย์บิต สิ่งนี้อาจไม่พึงปรารถนาในบางกรณี บนโปรเซสเซอร์อื่น ๆ
ผลลัพธ์จะเหมือนกับการคำนวณที่เทียบเท่าโดยใช้การคูณแยกกัน
เพิ่ม ลบ และลบล้างคำสั่ง
-nocpp
บอกแอสเซมเบลอร์ MIPS ไม่ให้รันตัวประมวลผลล่วงหน้าเหนือไฟล์แอสเซมเบลอร์ของผู้ใช้ (ด้วย a
.s ต่อท้าย) เมื่อประกอบเข้าด้วยกัน
-mfix-24k
-mno-แก้ไข-24k
แก้ไข 24K E48 (ข้อมูลสูญหายในร้านค้าระหว่างการเติมเงิน) errata วิธีแก้ปัญหา
ถูกนำไปใช้โดยแอสเซมเบลอร์มากกว่าโดย GCC
-mfix-r4000
-mno-แก้ไข-r4000
หลีกเลี่ยงข้อผิดพลาดของ CPU R4000:
- การเปลี่ยนคำสองคำหรือตัวแปรอาจให้ผลลัพธ์ที่ไม่ถูกต้องหากดำเนินการ
ทันทีหลังจากเริ่มการหารจำนวนเต็ม
- การเปลี่ยนคำสองคำหรือตัวแปรอาจให้ผลลัพธ์ที่ไม่ถูกต้องหากดำเนินการในขณะที่
กำลังดำเนินการคูณจำนวนเต็ม
- การหารจำนวนเต็มอาจให้ผลลัพธ์ที่ไม่ถูกต้องหากเริ่มต้นในช่องดีเลย์ของ a
กิ่งไม้หรือกระโดด
-mfix-r4400
-mno-แก้ไข-r4400
หลีกเลี่ยงข้อผิดพลาดของ CPU R4400:
- การเปลี่ยนคำสองคำหรือตัวแปรอาจให้ผลลัพธ์ที่ไม่ถูกต้องหากดำเนินการ
ทันทีหลังจากเริ่มการหารจำนวนเต็ม
-mfix-r10000
-mno-แก้ไข-r10000
แก้ไขข้อผิดพลาด R10000 บางส่วน:
- ลำดับ "ll"/"sc" อาจไม่ทำงานในลักษณะปรมาณูในการแก้ไขก่อนหน้า 3.0 พวกเขาอาจจะ
การหยุดชะงักในการแก้ไข 2.6 และก่อนหน้า
ตัวเลือกนี้สามารถใช้ได้ก็ต่อเมื่อสถาปัตยกรรมเป้าหมายรองรับสาขาที่น่าจะเป็น
คำแนะนำ -mfix-r10000 เป็นค่าเริ่มต้นเมื่อ -มีนาคม=r10000 ถูกนำมาใช้; -mno-แก้ไข-r10000
เป็นค่าเริ่มต้นอย่างอื่น
-mfix-vr4120
-mno-แก้ไข-vr4120
แก้ไขปัญหา VR4120 errata:
- "dmultu" ไม่ได้ให้ผลลัพธ์ที่ถูกต้องเสมอไป
- "div" และ "ddiv" ไม่ได้ให้ผลลัพธ์ที่ถูกต้องเสมอไปหากตัวถูกดำเนินการตัวใดตัวหนึ่ง
เป็นลบ
วิธีแก้ปัญหาสำหรับ errata การแบ่งขึ้นอยู่กับฟังก์ชันพิเศษใน libgcc.a. ที่
ปัจจุบัน ฟังก์ชันเหล่านี้มีให้โดยการกำหนดค่า "mips64vr*-elf" เท่านั้น
VR4120 errata อื่น ๆ จำเป็นต้องมี NOP เพื่อแทรกระหว่างคู่ของ
คำแนะนำ. errata เหล่านี้ได้รับการจัดการโดยแอสเซมเบลอร์ ไม่ใช่โดย GCC เอง
-mfix-vr4130
แก้ไขปัญหา VR4130 "mflo"/"mfhi" errata วิธีแก้ปัญหาจะดำเนินการโดย
แอสเซมเบลอร์มากกว่าโดย GCC แม้ว่า GCC จะหลีกเลี่ยงการใช้ "mflo" และ "mfhi" หาก
คำแนะนำ VR4130 "macc", "macchi", "dmacc" และ "dmacchi" จะใช้แทนได้
-mfix-sb1
-mno-แก้ไข-sb1
แก้ไขปัญหาข้อผิดพลาดของคอร์คอร์ SB-1 CPU บางอย่าง (ปัจจุบันแฟล็กนี้ใช้ได้กับ SB-1
การแก้ไข 2 "F1" และ "F2" ข้อผิดพลาดทศนิยม)
-mr10k-แคชอุปสรรค=การตั้งค่า
ระบุว่า GCC ควรแทรกอุปสรรคแคชเพื่อหลีกเลี่ยงผลข้างเคียงของ
การเก็งกำไรในโปรเซสเซอร์ R10K
เช่นเดียวกับโปรเซสเซอร์หลายตัว R10K พยายามทำนายผลลัพธ์ของเงื่อนไข
สาขาและดำเนินการตามคำสั่งอย่างคาดเดาจากสาขาที่ "รับ" ภายหลัง
ยกเลิกคำแนะนำเหล่านี้หากผลลัพธ์ที่คาดการณ์ไว้ไม่ถูกต้อง อย่างไรก็ตาม ใน R10K
แม้แต่คำแนะนำที่ยกเลิกก็อาจมีผลข้างเคียง
ปัญหานี้มีผลกับร้านค้าเคอร์เนลเท่านั้น และโหลดเคอร์เนลขึ้นอยู่กับระบบ
ตัวอย่างเช่น ร้านค้าที่ดำเนินการเก็งกำไรอาจโหลดหน่วยความจำเป้าหมายลงในแคช
และทำเครื่องหมายบรรทัดแคชว่าสกปรก แม้ว่าตัวร้านจะถูกยกเลิกในภายหลัง หากเป็น DMA
การดำเนินการเขียนไปยังพื้นที่หน่วยความจำเดียวกันก่อนที่บรรทัด "สกปรก" จะถูกล้าง the
ข้อมูลที่แคชจะเขียนทับข้อมูล DMA-ed ดูคู่มือโปรเซสเซอร์ R10K สำหรับฉบับเต็ม
คำอธิบาย รวมถึงปัญหาอื่นๆ ที่อาจเกิดขึ้น
วิธีแก้ปัญหาหนึ่งคือการแทรกคำแนะนำอุปสรรคแคชก่อนเข้าถึงหน่วยความจำทุกครั้ง
อาจถูกประหารชีวิตโดยเก็งกำไรและอาจมีผลข้างเคียงแม้ว่าจะยกเลิกไปแล้วก็ตาม
-mr10k-แคชอุปสรรค=การตั้งค่า ควบคุมการนำวิธีแก้ปัญหานี้ไปใช้ของ GCC มัน
ถือว่ายกเลิกการเข้าถึงไบต์ใด ๆ ในภูมิภาคต่อไปนี้ไม่มีด้าน
ผลกระทบ:
1. หน่วยความจำที่ถูกครอบครองโดยสแต็กเฟรมของฟังก์ชันปัจจุบัน
2. หน่วยความจำที่ถูกครอบครองโดยอาร์กิวเมนต์สแต็กขาเข้า;
3. หน่วยความจำที่ครอบครองโดยอ็อบเจ็กต์ที่มีที่อยู่ลิงก์-เวลา-ค่าคงที่
เป็นความรับผิดชอบของเคอร์เนลเพื่อให้แน่ใจว่าการเก็งกำไรเข้าถึงภูมิภาคเหล่านี้
ปลอดภัยแน่นอน
หากโปรแกรมอินพุตมีการประกาศฟังก์ชันเช่น:
โมฆะ foo (โมฆะ);
ดังนั้นการใช้งาน "foo" จะต้องอนุญาตให้ดำเนินการ "j foo" และ "jal foo"
อย่างเก็งกำไร GCC เคารพข้อจำกัดนี้สำหรับฟังก์ชันที่คอมไพล์เอง มัน
คาดว่าฟังก์ชันที่ไม่ใช่ GCC (เช่น รหัสแอสเซมบลีที่เขียนด้วยลายมือ) จะทำเช่นเดียวกัน
ตัวเลือกมีสามรูปแบบ:
-mr10k-cache-barrier=โหลด-สโตร์
ใส่อุปสรรคแคชก่อนโหลดหรือจัดเก็บที่อาจดำเนินการอย่างคาดเดาได้
และนั่นอาจมีผลข้างเคียงแม้ว่าจะยกเลิกไปแล้วก็ตาม
-mr10k-cache-barrier=ร้านค้า
ใส่อุปสรรคแคชก่อนร้านค้าที่อาจดำเนินการเก็งกำไรและ
ที่อาจมีผลข้างเคียงแม้ว่าจะยกเลิกไปแล้วก็ตาม
-mr10k-cache-barrier=ไม่มี
ปิดใช้งานการแทรกอุปสรรคแคช นี่คือการตั้งค่าเริ่มต้น.
-mflush-func=ฟังก์ชั่น
-mno-ฟลัช-func
ระบุฟังก์ชันที่จะเรียกเพื่อล้างแคช I และ D หรือไม่เรียกเช่นนั้น
การทำงาน. หากถูกเรียก ฟังก์ชันจะต้องรับอาร์กิวเมนต์เหมือนกับฟังก์ชันทั่วไป
"_flush_func()" นั่นคือที่อยู่ของช่วงหน่วยความจำที่แคชกำลังทำงานอยู่
ล้าง ขนาดของช่วงหน่วยความจำ และหมายเลข 3 (เพื่อล้างแคชทั้งสอง) NS
ค่าเริ่มต้นขึ้นอยู่กับ GCC เป้าหมายที่กำหนดค่าไว้ แต่โดยทั่วไปจะเป็นอย่างใดอย่างหนึ่ง
_flush_func or __cpu_flush.
mbranch-ต้นทุน=NUM
กำหนดต้นทุนของสาขาไว้ที่ประมาณ NUM คำแนะนำ "ง่าย" ค่าใช้จ่ายนี้เป็นเพียง
heuristic และไม่รับประกันว่าจะให้ผลลัพธ์ที่สอดคล้องกันในรุ่นต่างๆ ศูนย์
ค่าใช้จ่ายซ้ำซ้อนเลือกค่าเริ่มต้นซึ่งขึ้นอยู่กับ -mtune การตั้งค่า
-mbranch-มีแนวโน้ม
-mno-สาขามีแนวโน้ม
เปิดหรือปิดการใช้คำสั่ง Branch Likely โดยไม่คำนึงถึงค่าเริ่มต้นสำหรับ
สถาปัตยกรรมที่เลือก โดยค่าเริ่มต้น คำสั่ง Branch Likely อาจถูกสร้างขึ้นถ้า
พวกเขาได้รับการสนับสนุนโดยสถาปัตยกรรมที่เลือก มีข้อยกเว้นสำหรับ MIPS32 และ
สถาปัตยกรรมและโปรเซสเซอร์ MIPS64 ที่ใช้สถาปัตยกรรมเหล่านั้น สำหรับผู้
คำสั่ง Branch Likely ไม่ได้ถูกสร้างขึ้นโดยค่าเริ่มต้นเนื่องจาก MIPS32 และ
สถาปัตยกรรม MIPS64 เลิกใช้งานโดยเฉพาะ
-mfp-ข้อยกเว้น
-mno-fp-ข้อยกเว้น
ระบุว่าเปิดใช้งานข้อยกเว้น FP หรือไม่ สิ่งนี้ส่งผลต่อวิธีการของ FP
กำหนดเวลาสำหรับโปรเซสเซอร์บางตัว ค่าเริ่มต้นคือเปิดใช้งานข้อยกเว้น FP
ตัวอย่างเช่น ใน SB-1 หากข้อยกเว้น FP ถูกปิดใช้งาน และเรากำลังปล่อย 64-บิต
เราสามารถใช้ท่อ FP ทั้งสองท่อได้ มิฉะนั้น เราจะใช้ไพพ์ FP ได้เพียงท่อเดียวเท่านั้น
-mvr4130-จัดเรียง
-mno-vr4130-จัดเรียง
ไปป์ไลน์ VR4130 เป็นซุปเปอร์สเกลาร์แบบสองทาง แต่ออกคำสั่งได้เพียงสองคำสั่งเท่านั้น
ร่วมกันหากอันแรกมีการจัดตำแหน่งแบบ 8 ไบต์ เมื่อเปิดใช้งานตัวเลือกนี้ GCC aligns
คำสั่งคู่ที่คิดว่าควรดำเนินการควบคู่กันไป
ตัวเลือกนี้จะมีผลเมื่อปรับให้เหมาะสมสำหรับ VR4130 เท่านั้น ปกติจะทำโค้ด
เร็วขึ้นแต่ต้องแลกมากับการทำให้มันใหญ่ขึ้น มันถูกเปิดใช้งานโดยค่าเริ่มต้นที่
ระดับการเพิ่มประสิทธิภาพ -O3.
-msynci
-mno-ซิงค์
เปิดใช้งาน (ปิดใช้งาน) การสร้างคำสั่ง "ซิงค์" บนสถาปัตยกรรมที่รองรับ
คำแนะนำ "ซิงค์" (หากเปิดใช้งาน) จะถูกสร้างขึ้นเมื่อ "__builtin___clear_cache()"
ถูกรวบรวม
ตัวเลือกนี้มีค่าเริ่มต้นเป็น "-mno-synci" แต่ค่าเริ่มต้นสามารถแทนที่ได้โดยการกำหนดค่า
ด้วย "--พร้อมซิงค์"
เมื่อทำการคอมไพล์โค้ดสำหรับระบบที่มีโปรเซสเซอร์ตัวเดียว โดยทั่วไปแล้วจะปลอดภัยที่จะใช้ "synci"
อย่างไรก็ตาม ในระบบมัลติคอร์ (SMP) หลายๆ ระบบ จะไม่ทำให้คำสั่งเป็นโมฆะ
แคชในคอร์ทั้งหมดและอาจนำไปสู่การทำงานที่ไม่ได้กำหนดไว้
-mrelax-pic-โทร
-mno-ผ่อนคลาย-pic-calls
พยายามเปลี่ยนการโทร PIC ที่ปกติแล้วส่งผ่านการลงทะเบียน $25 เป็นการโทรโดยตรง
สิ่งนี้จะเกิดขึ้นได้ก็ต่อเมื่อตัวเชื่อมโยงสามารถแก้ไขปลายทาง ณ เวลาเชื่อมโยงและ if
ปลายทางอยู่ในขอบเขตสำหรับการโทรโดยตรง
-mrelax-pic-โทร เป็นค่าเริ่มต้นหาก GCC ได้รับการกำหนดค่าให้ใช้แอสเซมเบลอร์และa
ตัวเชื่อมโยงที่สนับสนุนคำสั่งแอสเซมบลี ".reloc" และ "-mexplicit-relocs" อยู่ใน
ผล. ด้วย "-mno-explicit-relocs" การเพิ่มประสิทธิภาพนี้สามารถทำได้โดย
แอสเซมเบลอร์และลิงเกอร์เพียงอย่างเดียวโดยไม่ได้รับความช่วยเหลือจากคอมไพเลอร์
-mmcount-ra-ที่อยู่
-mno-mcount-ra-ที่อยู่
ปล่อย (ไม่ปล่อย) รหัสที่อนุญาตให้ "_mcount" แก้ไขการส่งคืนของฟังก์ชันการเรียก
ที่อยู่. เมื่อเปิดใช้งาน ตัวเลือกนี้จะขยายอินเทอร์เฟซ "_mcount" ตามปกติด้วย new
รา-ที่อยู่ พารามิเตอร์ซึ่งมีประเภท "intptr_t *" และถูกส่งผ่านในการลงทะเบียน $ 12
จากนั้น "_mcount" สามารถแก้ไขที่อยู่ผู้ส่งได้โดยทำทั้งสองอย่างต่อไปนี้:
· ส่งคืนที่อยู่ใหม่ในการลงทะเบียน $31
· การจัดเก็บที่อยู่ใหม่ใน "*ที่อยู่รา"ถ้า รา-ที่อยู่ ไม่เป็นโมฆะ
ค่าเริ่มต้นคือ -mno-mcount-ra-ที่อยู่.
เอ็มมิกซ์ Options
ตัวเลือกเหล่านี้ถูกกำหนดไว้สำหรับ MMIX:
-mlibfuncs
-mno-libfuncs
ระบุว่ากำลังคอมไพล์ฟังก์ชันไลบรารีภายใน โดยส่งผ่านค่าทั้งหมดใน
ลงทะเบียนไม่ว่าขนาด
-เมปซิลอน
-mno-เอปไซลอน
สร้างคำแนะนำการเปรียบเทียบจุดลอยตัวที่เปรียบเทียบกับ "rE"
การลงทะเบียนเอปซิลอน
-mabi = mmixware
-mabi=gnu
สร้างรหัสที่ส่งผ่านพารามิเตอร์ของฟังก์ชันและส่งกลับค่าที่ (ในไฟล์ที่เรียก
ฟังก์ชัน) ถูกมองว่าเป็นการลงทะเบียน $0 ขึ้นไป ซึ่งต่างจาก GNU ABI ซึ่งใช้ global
ลงทะเบียน $231 ขึ้นไป
-mzero-ขยาย
-mno-zero-ขยาย
เมื่ออ่านข้อมูลจากหน่วยความจำในขนาดที่สั้นกว่า 64 บิต ให้ใช้ (อย่าใช้) ศูนย์-
ขยายคำสั่งโหลดตามค่าเริ่มต้น แทนที่จะเซ็นคำสั่งขยาย
-mknuthdiv
-mno-knuthdiv
ให้ผลหารที่ได้เศษที่เหลือมีเครื่องหมายเดียวกับตัวหาร
ด้วยค่าเริ่มต้น -mno-knuthdivเครื่องหมายของส่วนที่เหลืออยู่ตามเครื่องหมายของ
เงินปันผล. ทั้งสองวิธีถูกต้องทางคณิตศาสตร์ วิธีหลังเกือบจะเฉพาะ
มือสอง
-mtoplevel-สัญลักษณ์
-mno-toplevel-สัญลักษณ์
นำหน้า (ไม่เติมหน้า) a : กับสัญลักษณ์สากลทั้งหมดจึงสามารถใช้รหัสประกอบได้
ด้วยคำสั่งแอสเซมบลี "PREFIX"
-เมลฟ์
สร้างไฟล์ปฏิบัติการในรูปแบบ ELF แทนที่จะเป็นค่าดีฟอลต์ MMO รูปแบบที่ใช้โดย
มิกซ์ จำลอง
-mbranch-ทำนาย
-mno-สาขาทำนาย
ใช้ (อย่าใช้) คำแนะนำสาขาที่น่าจะเป็นเมื่อทำนายสาขาคงที่
บ่งชี้สาขาที่น่าจะเป็น
-mbase-ที่อยู่
-mno-ฐานที่อยู่
สร้าง (ไม่สร้าง) รหัสที่ใช้ ฐาน ที่อยู่. การใช้ที่อยู่ฐาน
สร้างคำขอโดยอัตโนมัติ (จัดการโดยแอสเซมเบลอร์และตัวเชื่อมโยง) สำหรับa
คงที่ที่จะตั้งค่าในการลงทะเบียนทั่วโลก การลงทะเบียนใช้สำหรับฐานอย่างน้อยหนึ่งฐาน
ร้องขอที่อยู่ภายในช่วง 0 ถึง 255 จากค่าที่เก็บไว้ในการลงทะเบียน NS
โดยทั่วไปจะนำไปสู่รหัสที่สั้นและรวดเร็ว แต่จำนวนของรายการข้อมูลต่างๆ ที่
สามารถแก้ไขได้อย่างจำกัด ซึ่งหมายความว่าโปรแกรมที่ใช้ข้อมูลคงที่จำนวนมาก
อาจต้องใช้ -mno-ฐานที่อยู่.
-msingle-ทางออก
-mno-ทางออกเดียว
บังคับ (ไม่บังคับ) โค้ดที่สร้างให้มีจุดออกเดียวในแต่ละฟังก์ชัน
MN10300 Options
ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m ตัวเลือกถูกกำหนดไว้สำหรับสถาปัตยกรรม Matsushita MN10300:
-mmult-บั๊ก
สร้างรหัสเพื่อหลีกเลี่ยงข้อบกพร่องในคำแนะนำการคูณสำหรับโปรเซสเซอร์ MN10300
นี่คือค่าเริ่มต้น
-mno-mult-บั๊ก
อย่าสร้างโค้ดเพื่อหลีกเลี่ยงข้อผิดพลาดในคำแนะนำการคูณสำหรับ MN10300
โปรเซสเซอร์
-แม่33
สร้างรหัสโดยใช้คุณสมบัติเฉพาะของโปรเซสเซอร์ AM33
-mno-am33
อย่าสร้างรหัสโดยใช้คุณสมบัติเฉพาะของโปรเซสเซอร์ AM33 นี้เป็น
ค่าเริ่มต้น.
-แมม33-2
สร้างรหัสโดยใช้คุณสมบัติเฉพาะของโปรเซสเซอร์ AM33/2.0
-แม่34
สร้างรหัสโดยใช้คุณสมบัติเฉพาะของโปรเซสเซอร์ AM34
-mtune=ประเภทซีพียู
ใช้ลักษณะการจับเวลาของประเภท CPU ที่ระบุเมื่อกำหนดคำสั่ง
การดำเนินการนี้จะไม่เปลี่ยนประเภทโปรเซสเซอร์ที่เป็นเป้าหมาย ประเภท CPU ต้องเป็นหนึ่งใน
mn10300, am33, 33-2 น or am34.
-mreturn-ตัวชี้บน-d0
เมื่อสร้างฟังก์ชันที่ส่งคืนตัวชี้ ให้ส่งคืนตัวชี้ทั้งใน "a0" และ
"ด0" มิฉะนั้น ตัวชี้จะถูกส่งกลับเฉพาะใน "a0" และพยายามเรียกเช่นนั้น
การทำงานที่ไม่มีต้นแบบทำให้เกิดข้อผิดพลาด โปรดทราบว่าตัวเลือกนี้เปิดอยู่โดย
ค่าเริ่มต้น; ใช้ -mno-return-pointer-on-d0 เพื่อปิดการใช้งาน
-mno-crt0
อย่าลิงก์ในไฟล์อ็อบเจ็กต์การเริ่มต้นรันไทม์ C
-mrelax
ระบุตัวเชื่อมโยงว่าควรทำการเพิ่มประสิทธิภาพการผ่อนคลายส่งผ่านไปยัง
ย่อสาขา การโทร และที่อยู่หน่วยความจำแบบสัมบูรณ์ ตัวเลือกนี้มีผลเท่านั้น
เมื่อใช้กับบรรทัดคำสั่งสำหรับขั้นตอนลิงค์สุดท้าย
ตัวเลือกนี้ทำให้การดีบักเชิงสัญลักษณ์เป็นไปไม่ได้
-มลิว
อนุญาตให้คอมไพเลอร์สร้าง นาน การแนะนำ คำ คำแนะนำถ้าเป้าหมายคือ
AM33 หรือภายหลัง นี่คือค่าเริ่มต้น ตัวเลือกนี้กำหนดมาโครตัวประมวลผลล่วงหน้า
__ลิว__.
-มโนลิว
ไม่อนุญาตให้คอมไพเลอร์สร้าง นาน การแนะนำ คำ คำแนะนำ. ตัวเลือกนี้
กำหนดมาโครพรีโปรเซสเซอร์ __NO_LIW__.
-msetlb
อนุญาตให้คอมไพเลอร์สร้าง SETLB และ Lcc คำแนะนำถ้าเป้าหมายคือ
AM33 หรือภายหลัง นี่คือค่าเริ่มต้น ตัวเลือกนี้กำหนดมาโครตัวประมวลผลล่วงหน้า
__SETLB__.
-mnosetlb
ไม่อนุญาตให้คอมไพเลอร์สร้าง SETLB or Lcc คำแนะนำ. ตัวเลือกนี้กำหนด
มาโครตัวประมวลผลล่วงหน้า __NO_SETLB__.
Moxie Options
-meb
สร้างรหัส big-endian นี่คือค่าเริ่มต้นสำหรับ ม็อกซี่-*-* การกำหนดค่า
-เมล
สร้างโค้ด little-endian
-mno-crt0
อย่าลิงก์ในไฟล์อ็อบเจ็กต์การเริ่มต้นรันไทม์ C
กปปส -11 Options
ตัวเลือกเหล่านี้ถูกกำหนดไว้สำหรับ PDP-11:
-mfpu
ใช้จุดลอยตัวของฮาร์ดแวร์ FPP นี่คือค่าเริ่มต้น (จุดลอยตัว FIS บน
ไม่รองรับ PDP-11/40)
-msoft-ลอย
อย่าใช้จุดลอยตัวของฮาร์ดแวร์
-mac0
ส่งคืนผลลัพธ์ทศนิยมใน ac0 (fr0 ในไวยากรณ์ Unix assembler)
-mno-ac0
ส่งกลับผลลัพธ์ทศนิยมในหน่วยความจำ นี่คือค่าเริ่มต้น
- ลบ.ม
สร้างรหัสสำหรับ PDP-11/40
- ลบ.ม
สร้างรหัสสำหรับ PDP-11/45 นี่คือค่าเริ่มต้น
- ลบ.ม
สร้างรหัสสำหรับ PDP-11/10
-mbcopy-ในตัว
ใช้รูปแบบอินไลน์ "movmemhi" เพื่อคัดลอกหน่วยความจำ นี่คือค่าเริ่มต้น
-mbcopy
อย่าใช้รูปแบบอินไลน์ "movmemhi" เพื่อคัดลอกหน่วยความจำ
-มิ้นต์16
-mno-int32
ใช้ "int" 16 บิต นี่คือค่าเริ่มต้น
-มิ้นต์32
-mno-int16
ใช้ "int" แบบ 32 บิต
-mfloat64
-mno-ลอย32
ใช้ 64 บิต "ลอย" นี่คือค่าเริ่มต้น
-mfloat32
-mno-ลอย64
ใช้ "float" แบบ 32 บิต
-มาบชิ
ใช้รูปแบบ "abshi2" นี่คือค่าเริ่มต้น
-mno-Abshi
อย่าใช้รูปแบบ "abshi2"
-mbranch-แพง
แสร้งทำเป็นว่ากิ่งก้านมีราคาแพง นี่สำหรับการทดลองสร้างโค้ด
เท่านั้น
-mbranch-ราคาถูก
อย่าแสร้งทำเป็นว่ากิ่งก้านมีราคาแพง นี่คือค่าเริ่มต้น
-munix-asm
ใช้ไวยากรณ์แอสเซมเบลอร์ Unix นี่เป็นค่าเริ่มต้นเมื่อกำหนดค่าสำหรับ pdp11-*-bsd.
-mdec-asm
ใช้ไวยากรณ์ของแอสเซมเบลอร์ DEC นี่เป็นค่าเริ่มต้นเมื่อกำหนดค่าสำหรับเป้าหมาย PDP-11 ใด ๆ
นอกเหนือจาก pdp11-*-bsd.
พิโคชิป Options
ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m มีการกำหนดตัวเลือกสำหรับการใช้งาน picoChip:
-แม่=ae_type
ตั้งค่าชุดคำสั่ง ชุดลงทะเบียน และพารามิเตอร์การจัดกำหนดการคำสั่งสำหรับ array
ประเภทองค์ประกอบ ae_type. ค่าที่รองรับสำหรับ ae_type เป็น ใด ๆ, มัลและ MAC.
-mae=อะไรก็ได้ เลือกประเภท AE ทั่วไปโดยสมบูรณ์ รหัสที่สร้างด้วยตัวเลือกนี้จะรัน
กับ AE ประเภทอื่นๆ รหัสไม่ได้มีประสิทธิภาพเท่าที่ควรจะเป็นถ้าคอมไพล์
สำหรับ AE บางประเภท และการดำเนินการบางประเภท (เช่น การคูณ) ไม่ทำงาน
อย่างเหมาะสมกับ AE ทุกประเภท
-แม = MUL เลือกประเภท MUL AE นี่เป็นประเภท AE ที่มีประโยชน์ที่สุดสำหรับโค้ดที่คอมไพล์แล้ว
และเป็นค่าเริ่มต้น
-แม = MAC เลือก MAC AE แบบ DSP รหัสที่คอมไพล์ด้วยตัวเลือกนี้อาจประสบปัญหา
ประสิทธิภาพการจัดการไบต์ (ถ่าน) ต่ำ เนื่องจาก DSP AE ไม่มีให้
การสนับสนุนฮาร์ดแวร์สำหรับการโหลด / จัดเก็บไบต์
-สัญลักษณ์ตามที่อยู่
เปิดใช้งานคอมไพเลอร์เพื่อใช้ชื่อสัญลักษณ์โดยตรงเป็นที่อยู่ใน load/store
โดยไม่ต้องโหลดลงในรีจิสเตอร์ก่อน โดยทั่วไปแล้วการใช้สิ่งนี้
ตัวเลือกจะสร้างโปรแกรมขนาดใหญ่ขึ้น ซึ่งทำงานได้เร็วกว่าเมื่อไม่ได้ใช้งานตัวเลือกนั้น
อย่างไรก็ตาม ผลลัพธ์จะแตกต่างกันไปในแต่ละโปรแกรม ดังนั้นจึงเหลือตัวเลือกสำหรับผู้ใช้
แทนที่จะเปิดใช้งานอย่างถาวร
-mno-ไม่มีประสิทธิภาพ-คำเตือน
ปิดใช้งานคำเตือนเกี่ยวกับการสร้างโค้ดที่ไม่มีประสิทธิภาพ คำเตือนเหล่านี้สามารถ
สร้างขึ้น ตัวอย่างเช่น เมื่อรวบรวมโค้ดที่ดำเนินการหน่วยความจำระดับไบต์
ในประเภท MAC AE MAC AE ไม่มีฮาร์ดแวร์รองรับหน่วยความจำระดับไบต์
การดำเนินการ ดังนั้นการโหลด / ร้านค้าไบต์ทั้งหมดจะต้องสังเคราะห์จาก word load/store
การดำเนินงาน สิ่งนี้ไม่มีประสิทธิภาพและมีการสร้างคำเตือนเพื่อระบุว่าคุณ
ควรเขียนโค้ดใหม่เพื่อหลีกเลี่ยงการทำงานของไบต์หรือเพื่อกำหนดเป้าหมายประเภท AE ที่มี
การสนับสนุนฮาร์ดแวร์ที่จำเป็น ตัวเลือกนี้จะปิดใช้งานคำเตือนเหล่านี้
PowerPC Options
เหล่านี้อยู่ภายใต้
RL78 Options
-msim
ลิงก์ในไลบรารีเป้าหมายเพิ่มเติมเพื่อรองรับการทำงานภายในโปรแกรมจำลอง
-mmul=ไม่มี
-มมมูล=g13
-mmul=rl78
ระบุชนิดของการสนับสนุนการคูณฮาร์ดแวร์ที่จะใช้ ค่าเริ่มต้นคือ
"ไม่มี" ซึ่งใช้ฟังก์ชันการคูณซอฟต์แวร์ ตัวเลือก "g13" มีไว้สำหรับ
ฮาร์ดแวร์คูณ/แบ่งอุปกรณ์ต่อพ่วงบนเป้าหมาย RL78/G13 เท่านั้น ตัวเลือก "rl78"
สำหรับการคูณฮาร์ดแวร์มาตรฐานที่กำหนดไว้ในคู่มือซอฟต์แวร์ RL78
ไอบีเอ็ม RS / 6000 และ PowerPC Options
ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m ตัวเลือกถูกกำหนดไว้สำหรับ IBM RS/6000 และ PowerPC:
-mpowerpc-gpopt
-mno-powerpc-gpopt
-mpowerpc-gfxopt
-mno-powerpc-gfxopt
-mpowerpc64
-mno-powerpc64
-mmcrf
-mno-mfcrf
-mpopcntb
-mno-popcntb
-mpopcntd
-mno-popcntd
-mfprnd
-mno-fprnd
-mcmpb
-mno-cmpb
-mmpgppr
-mno-mfpgpr
-mhard-dfp
-mno-ฮาร์ด-dfp
คุณใช้ตัวเลือกเหล่านี้เพื่อระบุว่าคำสั่งใดที่มีอยู่ในโปรเซสเซอร์ของคุณ
กำลังใช้ ค่าเริ่มต้นของตัวเลือกเหล่านี้จะถูกกำหนดเมื่อกำหนดค่า GCC
การระบุ -mcpu=ซีพียู_ประเภท แทนที่ข้อกำหนดของตัวเลือกเหล่านี้ เรา
แนะนำให้คุณใช้ -mcpu=ซีพียู_ประเภท ตัวเลือกมากกว่าตัวเลือกที่ระบุไว้ข้างต้น
ระบุ -mpowerpc-gpopt อนุญาตให้ GCC ใช้สถาปัตยกรรม PowerPC ที่เป็นตัวเลือกได้
คำแนะนำในกลุ่มวัตถุประสงค์ทั่วไป รวมทั้งรากที่สองจุดทศนิยม
ระบุ -mpowerpc-gfxopt อนุญาตให้ GCC ใช้สถาปัตยกรรม PowerPC ที่เป็นตัวเลือกได้
คำแนะนำในกลุ่มกราฟิก รวมถึงการเลือกจุดลอยตัว
โครงการ -mmcrf ตัวเลือกช่วยให้ GCC สร้างการย้ายจากฟิลด์การลงทะเบียนเงื่อนไข
คำสั่งที่ใช้กับโปรเซสเซอร์ POWER4 และโปรเซสเซอร์อื่นที่สนับสนุน
สถาปัตยกรรม PowerPC V2.01 NS -mpopcntb ตัวเลือกช่วยให้ GCC สร้าง popcount
และคำแนะนำการประมาณการซึ่งกันและกันของ FP แบบ double-precision ที่ใช้งานบน POWER5
โปรเซสเซอร์และโปรเซสเซอร์อื่นๆ ที่สนับสนุนสถาปัตยกรรม PowerPC V2.02 NS
-mpopcntd ตัวเลือกอนุญาตให้ GCC สร้างคำสั่ง popcount ที่ใช้งานบน
ตัวประมวลผล POWER7 และตัวประมวลผลอื่นๆ ที่สนับสนุนสถาปัตยกรรม PowerPC V2.06
โครงการ -mfprnd ตัวเลือกอนุญาตให้ GCC สร้างรอบ FP เป็นคำสั่งจำนวนเต็ม
นำไปใช้กับโปรเซสเซอร์ POWER5+ และโปรเซสเซอร์อื่นๆ ที่รองรับ PowerPC
สถาปัตยกรรม V2.03 NS -mcmpb ตัวเลือกช่วยให้ GCC สร้างการเปรียบเทียบไบต์
คำสั่งที่ใช้กับโปรเซสเซอร์ POWER6 และโปรเซสเซอร์อื่นที่สนับสนุน
สถาปัตยกรรม PowerPC V2.05 NS -mmpgppr ตัวเลือกช่วยให้ GCC สร้างการย้าย FP
ไป/จากคำแนะนำการลงทะเบียนใช้งานทั่วไปที่ใช้กับโปรเซสเซอร์ POWER6X และ
โปรเซสเซอร์อื่นๆ ที่สนับสนุนสถาปัตยกรรม PowerPC V2.05 แบบขยาย NS -mhard-dfp
ตัวเลือกอนุญาตให้ GCC สร้างคำสั่งทศนิยมทศนิยมที่นำมาใช้บน
โปรเซสเซอร์ POWER บางตัว
โครงการ -mpowerpc64 ตัวเลือกอนุญาตให้ GCC สร้างคำสั่ง 64 บิตเพิ่มเติมที่
ถูกพบในสถาปัตยกรรม PowerPC64 แบบเต็มและสำหรับ GPRs แบบ 64 บิต doubleword
ปริมาณ GCC เริ่มต้นเป็น -mno-powerpc64.
-mcpu=ซีพียู_ประเภท
ตั้งค่าประเภทสถาปัตยกรรม การใช้งานรีจิสเตอร์ และพารามิเตอร์การจัดตารางเวลาคำสั่งสำหรับ
ประเภทเครื่อง ซีพียู_ประเภท. ค่าที่รองรับสำหรับ ซีพียู_ประเภท เป็น 401, 403, 405, 405fp, 440,
440fp, 464, 464fp, 476, 476fp, 505, 601, 602, 603, 603e, 604, 604e, 620, 630, 740,
7400, 7450, 750, 801, 821, 823, 860, 970, 8540, a2, e300c2, e300c3, e500mc, e500mc64,
e5500, e6500, ec603e, G3, G4, G5, ยักษ์, power3, power4, power5, พลัง5+, power6,
พลัง6x, power7, power8, พาวเวอร์พีซี, พาวเวอร์พีซี64, พาวเวอร์พีซี64เลและ rs64.
-mcpu=พาวเวอร์พีซี, -mcpu=พาวเวอร์พีซี64และ -mcpu=powerpc64le ระบุ PowerPC . 32 บิตบริสุทธิ์
(ทั้ง endian), 64-bit endian ขนาดใหญ่และ 64-bit endian PowerPC
ประเภทเครื่องสถาปัตยกรรม ที่มีรูปแบบตัวประมวลผลทั่วไปที่เหมาะสม สมมติขึ้นสำหรับ
วัตถุประสงค์ในการจัดตารางเวลา
ตัวเลือกอื่นๆ จะระบุโปรเซสเซอร์เฉพาะ รหัสที่สร้างขึ้นภายใต้ตัวเลือกเหล่านั้น
ทำงานได้ดีที่สุดบนโปรเซสเซอร์นั้น และอาจไม่ทำงานในโปรเซสเซอร์อื่นเลย
โครงการ -mcpu ตัวเลือกเปิดใช้งานหรือปิดใช้งานตัวเลือกต่อไปนี้โดยอัตโนมัติ:
-มัลทีฟ -mfprnd -mhard-ลอย -mmcrf -หลายหลาก -mpopcntb -mpopcntd -mpowerpc64
-mpowerpc-gpopt -mpowerpc-gfxopt -msingle-ลอย -mdouble-ลอย -msimple-fpu -mstring
-มม -mdlmzb -mmpgppr -mvsx -mcrypto -mdirect-ย้าย -mpower8-ฟิวชั่น
-mpower8-เวกเตอร์ -mquad-หน่วยความจำ -mquad-หน่วยความจำอะตอม
ตัวเลือกเฉพาะที่ตั้งค่าไว้สำหรับ CPU ใด ๆ จะแตกต่างกันไปตามเวอร์ชันของคอมไพเลอร์
ขึ้นอยู่กับการตั้งค่าที่ดูเหมือนว่าจะสร้างรหัสที่เหมาะสมที่สุดสำหรับ CPU นั้น มันไม่ได้
จำเป็นต้องสะท้อนถึงความสามารถของฮาร์ดแวร์ที่แท้จริง หากคุณต้องการตั้งค่า an
แต่ละตัวเลือกสำหรับค่าเฉพาะ คุณสามารถระบุได้หลังจาก -mcpu ตัวเลือก
กดไลก์ -mcpu=970 -mno-อัลทีฟเทค.
บน AIX, the -มัลทีฟ และ -mpowerpc64 ตัวเลือกไม่ได้เปิดใช้งานหรือปิดใช้งานโดย -mcpu
ตัวเลือกในปัจจุบันเนื่องจาก AIX ไม่มีการสนับสนุนอย่างเต็มที่สำหรับตัวเลือกเหล่านี้ คุณอาจ
ยังคงเปิดหรือปิดการใช้งานทีละรายการหากคุณแน่ใจว่ามันจะทำงานในของคุณ
สิ่งแวดล้อม
-mtune=ซีพียู_ประเภท
ตั้งค่าพารามิเตอร์การจัดตารางเวลาคำสั่งสำหรับประเภทเครื่อง ซีพียู_ประเภทแต่อย่าตั้งค่า
ประเภทสถาปัตยกรรมหรือการใช้ทะเบียนเช่น -mcpu=ซีพียู_ประเภท ทำ. ค่าเดียวกันสำหรับ
ซีพียู_ประเภท ใช้สำหรับ -mtune ส่วน -mcpu. หากระบุทั้งคู่ รหัสที่สร้าง
ใช้สถาปัตยกรรมและการลงทะเบียนที่กำหนดโดย -mcpuแต่พารามิเตอร์การจัดตารางเวลาที่กำหนดโดย
-mtune.
-mcmodel=เล็ก
สร้างรหัส PowerPC64 สำหรับรุ่นขนาดเล็ก: TOC ถูกจำกัดที่ 64k
-mcmodel=กลาง
สร้างรหัส PowerPC64 สำหรับโมเดลขนาดกลาง: TOC และข้อมูลสแตติกอื่นๆ อาจเพิ่มขึ้น
ถึงขนาด 4G ทั้งหมด
-mcmodel=ขนาดใหญ่
สร้างรหัส PowerPC64 สำหรับรุ่นใหญ่: TOC อาจมีขนาดสูงสุด 4G อื่น
ข้อมูลและรหัสถูกจำกัดโดยพื้นที่ที่อยู่ 64 บิตเท่านั้น
-มัลทีฟ
-mno-อัลทีฟเทค
สร้างรหัสที่ใช้ (ไม่ใช้) คำแนะนำ AltiVec และยังเปิดใช้งานการใช้งาน
ของฟังก์ชันในตัวที่ช่วยให้เข้าถึงชุดคำสั่ง AltiVec ได้โดยตรงมากขึ้น
คุณอาจต้องตั้งค่า -mabi=อัลทีฟ เพื่อปรับ ABI ปัจจุบันด้วย AltiVec ABI
ปรับปรุง
เมื่อ -มัลทีฟ ใช้แทน -maltivec=le or -maltivec=เป็น, ลำดับองค์ประกอบ
สำหรับ Altivec intrinsics เช่น "vec_splat", "vec_extract" และ "vec_insert" จะจับคู่
ลำดับองค์ประกอบอาร์เรย์ที่สอดคล้องกับ endianness ของเป้าหมาย นั่นคือธาตุ
zero ระบุองค์ประกอบด้านซ้ายสุดในการลงทะเบียนเวกเตอร์เมื่อกำหนดเป้าหมายเป็น big-endian
แพลตฟอร์ม และระบุองค์ประกอบขวาสุดในทะเบียนเวกเตอร์เมื่อกำหนดเป้าหมายa
แพลตฟอร์ม little-endian
-maltivec=เป็น
สร้างคำสั่ง Altivec โดยใช้ลำดับองค์ประกอบ big-endian ไม่ว่า
เป้าหมายคือปลายใหญ่หรือปลายเล็ก นี่เป็นค่าเริ่มต้นเมื่อกำหนดเป้าหมายไปยัง big-endian
เวที
ลำดับองค์ประกอบใช้เพื่อตีความหมายเลของค์ประกอบใน Altivec intrinsics เช่น
"vec_splat", "vec_extract" และ "vec_insert" โดยค่าเริ่มต้น สิ่งเหล่านี้จะจับคู่กับ array
ลำดับองค์ประกอบที่สอดคล้องกับ endianness สำหรับเป้าหมาย
-maltivec=le
สร้างคำสั่ง Altivec โดยใช้ลำดับองค์ประกอบ little-endian ไม่ว่า
เป้าหมายคือปลายใหญ่หรือปลายเล็ก นี่เป็นค่าเริ่มต้นเมื่อกำหนดเป้าหมายเล็กน้อย-
แพลตฟอร์ม endian ขณะนี้ตัวเลือกนี้ถูกละเว้นเมื่อกำหนดเป้าหมายไปยัง big-endian
เวที
ลำดับองค์ประกอบใช้เพื่อตีความหมายเลของค์ประกอบใน Altivec intrinsics เช่น
"vec_splat", "vec_extract" และ "vec_insert" โดยค่าเริ่มต้น สิ่งเหล่านี้จะจับคู่กับ array
ลำดับองค์ประกอบที่สอดคล้องกับ endianness สำหรับเป้าหมาย
-mvrบันทึก
-mno-vrsave
สร้างคำแนะนำ VRSAVE เมื่อสร้างโค้ด AltiVec
-mgen-เซลล์-ไมโครโค้ด
สร้างคำสั่งไมโครโค้ดของเซลล์
-mwar-เซลล์-ไมโครโค้ด
เตือนเมื่อมีการส่งคำสั่งไมโครโค้ดของเซลล์ ตัวอย่างของ Cell microcode
คำสั่งคือการเปลี่ยนแปลงตัวแปร
-msecure-plt
สร้างรหัสที่ช่วยให้ ld และ LD.SO เพื่อสร้างไฟล์ปฏิบัติการและไลบรารีที่ใช้ร่วมกันด้วย
ส่วน ".plt" และ ".got" ที่ไม่สามารถเรียกทำงานได้ นี่คือตัวเลือก SYSV ABI ของ PowerPC 32 บิต
-mbss-plt
สร้างรหัสที่ใช้ส่วน BSS ".plt" ที่ LD.SO กรอกและต้องการ ".plt"
และส่วน ".got" ที่เขียนได้และสั่งการได้ นี่คือ PowerPC 32 บิต
ตัวเลือก SYSV ABI
-มิเซล
-mno-isel
สวิตช์นี้เปิดหรือปิดการสร้างคำสั่ง ISEL
-มิเซิล=ใช่ไม่ใช่
สวิตช์นี้เลิกใช้แล้ว ใช้ -มิเซล และ -mno-isel แทน.
-msp
-mno-ความเร็ว
สวิตช์นี้เปิดใช้งานหรือปิดใช้งานการสร้างคำสั่ง SPE simd
- พิการ
-mno-จับคู่
สวิตช์นี้เปิดหรือปิดการสร้างคำสั่ง PIRED simd
-msp=ใช่ไม่ใช่
ตัวเลือกนี้เลิกใช้แล้ว ใช้ -msp และ -mno-ความเร็ว แทน.
-mvsx
-mno-vsx
สร้างโค้ดที่ใช้ (ไม่ใช้) คำแนะนำ vector/scalar (VSX) และ
เปิดใช้งานการใช้ฟังก์ชันในตัวที่ช่วยให้สามารถเข้าถึง VSX . ได้โดยตรงมากขึ้น
ชุดคำสั่ง
-mcrypto
-mno-crypto
เปิดใช้งานการใช้ (ปิดใช้งาน) ของฟังก์ชันในตัวที่อนุญาตให้เข้าถึง .โดยตรง
คำแนะนำการเข้ารหัสที่เพิ่มในเวอร์ชัน 2.07 ของ PowerPC ISA
-mdirect-ย้าย
-mno-ตรงย้าย
สร้างรหัสที่ใช้ (ไม่ใช้) คำแนะนำในการย้ายข้อมูลระหว่าง
รีจิสเตอร์วัตถุประสงค์ทั่วไปและรีจิสเตอร์ vector/scalar (VSX) ที่ถูกเพิ่มใน
เวอร์ชัน 2.07 ของ PowerPC ISA
-mpower8-ฟิวชั่น
-mno-power8-ฟิวชั่น
สร้างรหัสที่เก็บ (ไม่เก็บ) การดำเนินการจำนวนเต็มบางส่วนที่อยู่ติดกันเพื่อให้
คำแนะนำสามารถรวมเข้าด้วยกันบนโปรเซสเซอร์ power8 และรุ่นที่ใหม่กว่า
-mpower8-เวกเตอร์
-mno-power8-เวกเตอร์
สร้างโค้ดที่ใช้ (ไม่ใช้) เวกเตอร์และคำสั่งสเกลาร์ที่เป็น
เพิ่มในเวอร์ชัน 2.07 ของ PowerPC ISA ยังเปิดใช้งานการใช้ฟังก์ชั่นในตัว
ที่ช่วยให้เข้าถึงคำแนะนำเวกเตอร์ได้โดยตรงมากขึ้น
-mquad-หน่วยความจำ
-mno-quad-หน่วยความจำ
สร้างรหัสที่ใช้ (ไม่ใช้) คำสั่งหน่วยความจำสี่คำที่ไม่ใช่อะตอม
โครงการ -mquad-หน่วยความจำ ตัวเลือกต้องใช้โหมด 64 บิต
-mquad-หน่วยความจำอะตอม
-mno-quad-หน่วยความจำอะตอม
สร้างโค้ดที่ใช้ (ไม่ใช้) คำสั่งหน่วยความจำ atomic quad NS
-mquad-หน่วยความจำอะตอม ตัวเลือกต้องใช้โหมด 64 บิต
-mfloat-gprs=ใช่/เดี่ยว/คู่/ไม่
-mfloat-gprs
สวิตช์นี้เปิดหรือปิดใช้งานการสร้างการดำเนินการจุดลอยตัวบน
รีจิสเตอร์เอนกประสงค์สำหรับสถาปัตยกรรมที่รองรับ
อาร์กิวเมนต์ ใช่ or เดียว เปิดใช้งานการใช้จุดลอยตัวที่มีความแม่นยำเดียว
การดำเนินงาน
อาร์กิวเมนต์ สอง ช่วยให้สามารถใช้ทศนิยมแบบ single และ double-precision
การดำเนินงาน
อาร์กิวเมนต์ ไม่ ปิดใช้งานการดำเนินการทศนิยมบนรีจิสเตอร์เอนกประสงค์
ขณะนี้ตัวเลือกนี้มีเฉพาะใน MPC854x เท่านั้น
- ลบ.ม
- ลบ.ม
สร้างรหัสสำหรับสภาพแวดล้อมแบบ 32 บิตหรือ 64 บิตของเป้าหมายดาร์วินและ SVR4 (รวมถึง
GNU/ลินุกซ์). สภาพแวดล้อมแบบ 32 บิตตั้งค่า int, long และ pointer เป็น 32 บิตและ
สร้างรหัสที่ทำงานบนตัวแปร PowerPC ใดๆ สภาพแวดล้อม 64 บิตตั้งค่าเป็น
32 บิตและยาวและชี้ไปที่ 64 บิตและสร้างรหัสสำหรับ PowerPC64 สำหรับ
-mpowerpc64.
-mfull-toc
-mno-fp-ใน-toc
-mno-ผลรวมใน-toc
-mminimal-toc
แก้ไขการสร้าง TOC (สารบัญ) ซึ่งสร้างขึ้นสำหรับทุกๆ
ไฟล์ปฏิบัติการ NS -mfull-toc ตัวเลือกถูกเลือกโดยค่าเริ่มต้น ในกรณีนั้น GCC
จัดสรรรายการ TOC อย่างน้อยหนึ่งรายการสำหรับการอ้างอิงตัวแปรที่ไม่ซ้ำแบบอัตโนมัติแต่ละรายการใน
โปรแกรมของคุณ GCC ยังวางค่าคงที่ทศนิยมใน TOC อย่างไรก็ตาม เท่านั้น
มีรายการ 16,384 รายการใน TOC
หากคุณได้รับข้อความแสดงข้อผิดพลาดของตัวเชื่อมโยงที่แจ้งว่าคุณล้นรายการที่มีอยู่
พื้นที่ TOC คุณสามารถลดจำนวนพื้นที่ TOC ที่ใช้กับ -mno-fp-ใน-toc และ
-mno-ผลรวมใน-toc ตัวเลือก -mno-fp-ใน-toc ป้องกันไม่ให้ GCC วางทศนิยม
ค่าคงที่ใน TOC และ -mno-ผลรวมใน-toc บังคับให้ GCC สร้างรหัสเพื่อคำนวณ
ผลรวมของที่อยู่และค่าคงที่ ณ รันไทม์ แทนที่จะใส่ผลรวมนั้นลงใน TOC
คุณสามารถระบุหนึ่งหรือทั้งสองตัวเลือกเหล่านี้ แต่ละคนทำให้ GCC ผลิตได้มาก
โค้ดที่ช้าและใหญ่ขึ้นเล็กน้อยโดยประหยัดพื้นที่ TOC
หากคุณยังคงไม่มีเนื้อที่ว่างใน TOC แม้ว่าคุณจะระบุตัวเลือกทั้งสองนี้ไว้
ระบุ -mminimal-toc แทนที่. ตัวเลือกนี้ทำให้ GCC สร้างรายการ TOC เพียงรายการเดียวสำหรับ
ทุกไฟล์. เมื่อคุณระบุตัวเลือกนี้ GCC จะสร้างโค้ดที่ช้ากว่าและใหญ่กว่า
แต่ใช้พื้นที่ TOC น้อยมาก คุณอาจต้องการใช้ตัวเลือกนี้เฉพาะใน
ไฟล์ที่มีโค้ดที่เรียกใช้งานน้อยกว่า
-max64
-max32
เปิดใช้งาน AIX ABI 64 บิตและการเรียกแบบแผน: พอยน์เตอร์ 64 บิต ชนิด "ยาว" 64 บิต และ
โครงสร้างพื้นฐานที่จำเป็นในการสนับสนุนพวกเขา ระบุ -max64 หมายถึง -mpowerpc64,
ในขณะที่ -max32 ปิดใช้งาน ABI 64 บิตและมีความหมาย -mno-powerpc64. GCC เริ่มต้นเป็น
-max32.
-mxl-เข้ากันได้
-mno-xl-เข้ากันได้
สร้างโค้ดที่สอดคล้องกับความหมายของคอมไพเลอร์ IBM XL มากขึ้นเมื่อใช้ AIX-
ABI ที่เข้ากันได้ ส่งผ่านอาร์กิวเมนต์ทศนิยมไปยังฟังก์ชันที่สร้างต้นแบบนอกเหนือจาก
ลงทะเบียนบันทึกพื้นที่ (RSA) บนสแต็กนอกเหนือจากอาร์กิวเมนต์ FPR อย่าถือสา
ค่า double ที่สำคัญที่สุดในค่า long double 128 บิตจะถูกปัดเศษอย่างเหมาะสมเมื่อ
เปรียบเทียบค่าและแปลงเป็นสองเท่า ใช้ชื่อสัญลักษณ์ XL สำหรับดับเบิลยาว
สนับสนุนกิจวัตร
แบบแผนการเรียก AIX ได้รับการขยายแต่ไม่ได้จัดทำเป็นเอกสารในขั้นต้นเพื่อจัดการกับ
ปิดบังกรณี K&R C ของการเรียกใช้ฟังก์ชันที่ใช้ที่อยู่ของอาร์กิวเมนต์ด้วย
อาร์กิวเมนต์น้อยกว่าที่ประกาศ คอมไพเลอร์ IBM XL เข้าถึงอาร์กิวเมนต์ทศนิยมที่
ไม่พอดีกับ RSA จากสแต็กเมื่อคอมไพล์รูทีนย่อยโดยไม่มี
การเพิ่มประสิทธิภาพ เพราะเก็บอาร์กิวเมนต์ทศนิยมบนสแต็ก is . เสมอ
ไม่มีประสิทธิภาพและแทบไม่มีความจำเป็น ตัวเลือกนี้ไม่ได้เปิดใช้งานโดยค่าเริ่มต้นและมีเพียง is
จำเป็นเมื่อเรียกรูทีนย่อยที่คอมไพล์โดยคอมไพเลอร์ IBM XL โดยไม่มีการปรับให้เหมาะสม
-mpe
ระบบขอใช้บริการ ไอบีเอ็ม RS / 6000 SP Parallel สิ่งแวดล้อม (วิชาพลศึกษา). ลิงก์แอปพลิเคชันที่เขียนขึ้นเพื่อใช้
ข้อความที่ส่งผ่านด้วยรหัสเริ่มต้นพิเศษเพื่อให้แอปพลิเคชันทำงาน NS
ระบบจะต้องติดตั้ง PE ในตำแหน่งมาตรฐาน (/usr/lpp/ppe.poe/) หรือ
รายละเอียด ไฟล์จะต้องถูกแทนที่ด้วย -ข้อมูลจำเพาะ= ตัวเลือกเพื่อระบุความเหมาะสม
ตำแหน่งไดเร็กทอรี Parallel Environment ไม่รองรับเธรด ดังนั้น -mpe
ตัวเลือกและ -pthread ตัวเลือกไม่เข้ากัน
-malign-ธรรมชาติ
-malign-อำนาจ
บน AIX, ดาร์วิน 32 บิต และ PowerPC GNU/Linux 64 บิต ตัวเลือก -malign-ธรรมชาติ
แทนที่การจัดตำแหน่งที่กำหนดโดย ABI ของประเภทที่ใหญ่กว่า เช่น ทศนิยมสองเท่า
บนขอบเขตตามขนาดตามธรรมชาติ ทางเลือก -malign-อำนาจ สั่งให้ GCC ไปที่
ปฏิบัติตามกฎการจัดตำแหน่งที่กำหนดโดย ABI GCC ตั้งค่าเริ่มต้นเป็นการจัดตำแหน่งมาตรฐาน
กำหนดไว้ใน ABI
ในดาร์วิน 64 บิต การจัดตำแหน่งที่เป็นธรรมชาติเป็นค่าเริ่มต้น และ -malign-อำนาจ ไม่ใช่
ได้รับการสนับสนุน.
-msoft-ลอย
-mhard-ลอย
สร้างรหัสที่ไม่ใช้ (ใช้) ชุดทะเบียนทศนิยม ซอฟต์แวร์
มีการจำลองจุดลอยตัวหากคุณใช้ -msoft-ลอย ตัวเลือกและผ่าน
ตัวเลือก GCC เมื่อเชื่อมโยง
-msingle-ลอย
-mdouble-ลอย
สร้างโค้ดสำหรับการดำเนินการจุดทศนิยมแบบ single- หรือ double-precision
-mdouble-ลอย หมายถึง -msingle-ลอย.
-msimple-fpu
อย่าสร้างคำสั่ง "sqrt" และ "div" สำหรับหน่วยจุดทศนิยมของฮาร์ดแวร์
-mfpu=ชื่อ
ระบุประเภทของหน่วยทศนิยม ค่าที่ถูกต้องสำหรับ ชื่อ เป็น sp_lite (เทียบเท่ากับ
-msingle-ลอย -msimple-fpu), dp_lite (เทียบเท่ากับ -mdouble-ลอย -msimple-fpu),
sp_เต็ม (เทียบเท่ากับ -msingle-ลอย), และ dp_เต็ม (เทียบเท่ากับ -mdouble-ลอย).
-mxilinx-fpu
ดำเนินการปรับให้เหมาะสมสำหรับหน่วยทศนิยมบน Xilinx PPC 405/440
-หลายหลาก
-mno-หลาย
สร้างรหัสที่ใช้ (ไม่ใช้) คำสั่งโหลดหลายคำและ
เก็บคำแนะนำหลายคำ คำแนะนำเหล่านี้สร้างขึ้นโดยค่าเริ่มต้นเมื่อ
ระบบ POWER และไม่ได้สร้างขึ้นบนระบบ PowerPC ไม่ได้ใช้ -หลายหลาก เล็กน้อย-
ระบบ endian PowerPC เนื่องจากคำสั่งเหล่านั้นไม่ทำงานเมื่อโปรเซสเซอร์อยู่ใน
โหมดลิตเติ้ลเอนด์ ข้อยกเว้นคือ PPC740 และ PPC750 ซึ่งอนุญาตสิ่งเหล่านี้
คำแนะนำในโหมด little-endian
-mstring
-mno-สตริง
สร้างโค้ดที่ใช้ (ไม่ใช้) คำสั่งโหลดสตริงและ store
คำแนะนำคำสตริงเพื่อบันทึกการลงทะเบียนหลายรายการและทำการย้ายบล็อกขนาดเล็ก เหล่านี้
คำแนะนำถูกสร้างขึ้นโดยค่าเริ่มต้นบนระบบ POWER และไม่สร้างบน PowerPC
ระบบต่างๆ ไม่ได้ใช้ -mstring บนระบบ PowerPC ของ little-endian ตั้งแต่นั้นมา
คำแนะนำไม่ทำงานเมื่อโปรเซสเซอร์อยู่ในโหมด little-endian ข้อยกเว้น
คือ PPC740 และ PPC750 ซึ่งอนุญาตคำแนะนำเหล่านี้ในโหมด little-endian
- อัพเดท
-mno-อัปเดต
สร้างรหัสที่ใช้ (ไม่ใช้) โหลดหรือจัดเก็บคำแนะนำที่อัปเดต
การลงทะเบียนฐานไปยังที่อยู่ของตำแหน่งหน่วยความจำที่คำนวณได้ คำแนะนำเหล่านี้
ถูกสร้างขึ้นโดยค่าเริ่มต้น ถ้าคุณใช้ -mno-อัปเดต, มีหน้าต่างบานเล็กระหว่าง
เวลาที่ตัวชี้สแต็กได้รับการอัปเดตและที่อยู่ของเฟรมก่อนหน้าคือ
ที่เก็บไว้ซึ่งหมายถึงรหัสที่เดินสแต็กเฟรมข้ามการขัดจังหวะหรือสัญญาณอาจ
ได้รับข้อมูลที่เสียหาย
-mavoid-indexed-ที่อยู่
-mno-หลีกเลี่ยงที่อยู่จัดทำดัชนี
สร้างรหัสที่พยายามหลีกเลี่ยง (ไม่หลีกเลี่ยง) การใช้โหลดหรือการจัดเก็บที่จัดทำดัชนี
คำแนะนำ. คำแนะนำเหล่านี้อาจทำให้ประสิทธิภาพของโปรเซสเซอร์ Power6 ลดลง
ในบางสถานการณ์เช่นเมื่อก้าวผ่านอาร์เรย์ขนาดใหญ่ที่ข้าม 16M
ขอบเขต ตัวเลือกนี้เปิดใช้งานโดยค่าเริ่มต้นเมื่อกำหนดเป้าหมาย Power6 และปิดใช้งาน
มิฉะนั้น.
-mfused-mad
-mno-ฟิวส์ madd
สร้างรหัสที่ใช้ (ไม่ใช้) ทศนิยมคูณและสะสม
คำแนะนำ. คำแนะนำเหล่านี้ถูกสร้างขึ้นโดยค่าเริ่มต้นหากจุดลอยตัวของฮาร์ดแวร์
ถูกนำมาใช้. ขึ้นอยู่กับเครื่อง -mfused-mad ตอนนี้ตัวเลือกถูกแมปกับเครื่องแล้ว-
อิสระ -ffp-สัญญา = รวดเร็ว ตัวเลือกและ -mno-ฟิวส์ madd ถูกแมปไปยัง
-ffp-สัญญา = ปิด.
-มม
-mno-mulhw
สร้างรหัสที่ใช้ (ไม่ใช้) คูณครึ่งคำและคูณสะสม
คำแนะนำเกี่ยวกับโปรเซสเซอร์ IBM 405, 440, 464 และ 476 คำแนะนำเหล่านี้คือ
สร้างขึ้นโดยค่าเริ่มต้นเมื่อกำหนดเป้าหมายโปรเซสเซอร์เหล่านั้น
-mdlmzb
-mno-dlmzb
สร้างรหัสที่ใช้ (ไม่ใช้) string-search dlmzb คำแนะนำเกี่ยวกับ IBM
405, 440, 464 และ 476 โปรเซสเซอร์ คำสั่งนี้สร้างขึ้นโดยค่าเริ่มต้นเมื่อ
กำหนดเป้าหมายโปรเซสเซอร์เหล่านั้น
-mno-บิต-จัด
-mbit-จัดตำแหน่ง
บนระบบ V.4 และระบบ PowerPC แบบฝังไม่ได้ (ทำ) โครงสร้างบังคับและสหภาพแรงงาน
ที่มีบิตฟิลด์ที่จะจัดชิดกับประเภทฐานของบิตฟิลด์
ตัวอย่างเช่น โดยค่าเริ่มต้น โครงสร้างที่ไม่มีอะไรนอกจาก 8 บิตฟิลด์ "ไม่ได้ลงนาม" ของ
ความยาว 1 จัดชิดขอบ 4 ไบต์และมีขนาด 4 ไบต์ โดยใช้
-mno-บิต-จัดโครงสร้างอยู่ในแนวเดียวกับขอบเขต 1 ไบต์และมีขนาด 1 ไบต์
-mno-เข้มงวด-จัด
-mstrict-จัดตำแหน่ง
บนระบบ V.4 และระบบ PowerPC ที่ฝังตัวไม่ (ทำ) ถือว่าหน่วยความจำที่ไม่ได้จัดตำแหน่ง
ระบบจัดการการอ้างอิง
-mrelocated
-mno-ย้ายได้
สร้างรหัสที่อนุญาตให้ (ไม่อนุญาต) ไฟล์เรียกทำงานแบบสแตติกที่จะย้ายไปที่a
ที่อยู่อื่น ณ รันไทม์ ตัวโหลดระบบ PowerPC แบบฝังอย่างง่ายควร
ย้ายเนื้อหาทั้งหมดของตำแหน่ง ".got2" และ 4 ไบต์ที่แสดงอยู่ใน ".fixup"
ส่วนตารางที่อยู่แบบ 32 บิตที่สร้างโดยตัวเลือกนี้ เพื่อให้สิ่งนี้ใช้งานได้ทั้งหมด
วัตถุที่เชื่อมโยงกันจะต้องรวบรวมด้วย -mrelocated or -mrelocatable-lib.
-mrelocated รหัสจัดตำแหน่งสแต็กเป็นขอบเขต 8 ไบต์
-mrelocatable-lib
-mno-relolocable-lib
Like -mrelocated, -mrelocatable-lib สร้างส่วน ".fixup" เพื่ออนุญาต static
ไฟล์ปฏิบัติการที่จะย้ายในเวลาทำงาน แต่ -mrelocatable-lib ไม่ได้ใช้
การจัดตำแหน่งกองซ้อนที่เล็กกว่าของ -mrelocated. วัตถุที่คอมไพล์ด้วย -mrelocatable-lib อาจ
เชื่อมโยงกับอ็อบเจ็กต์ที่คอมไพล์ด้วยการรวมกันของ -mrelocated ตัวเลือก
-mno-toc
-mtoc
บนระบบ V.4 และระบบ PowerPC แบบฝังไม่ (ทำ) ถือว่ารีจิสเตอร์ 2 มี
ตัวชี้ไปยังพื้นที่ส่วนกลางที่ชี้ไปยังที่อยู่ในโปรแกรม
- เล็กน้อย
-little-endian
บนระบบ V.4 และระบบ PowerPC แบบฝังตัวจะคอมไพล์โค้ดสำหรับโปรเซสเซอร์ใน
โหมดเอนเดียน NS -little-endian ตัวเลือกเหมือนกับ - เล็กน้อย.
-mbig
-mbig-endian
บนระบบ V.4 และระบบ PowerPC แบบฝังตัวจะคอมไพล์โค้ดสำหรับโปรเซสเซอร์ในขนาดใหญ่-
โหมดเอนเดียน NS -mbig-endian ตัวเลือกเหมือนกับ -mbig.
-mdynamic ไม่มีรูป
บนระบบดาร์วินและ Mac OS X ให้คอมไพล์โค้ดเพื่อไม่ให้ย้ายตำแหน่งได้ แต่นั่น
ข้อมูลอ้างอิงภายนอกสามารถย้ายได้ รหัสผลลัพธ์เหมาะสำหรับ
แอปพลิเคชัน แต่ไม่ใช่ไลบรารีที่แชร์
-msingle-รูปฐาน
ถือว่าการลงทะเบียนที่ใช้สำหรับการกำหนดที่อยู่ PIC เป็นแบบอ่านอย่างเดียว แทนที่จะโหลดใน
บทนำสำหรับแต่ละหน้าที่ ระบบรันไทม์มีหน้าที่เริ่มต้นสิ่งนี้
ลงทะเบียนด้วยค่าที่เหมาะสมก่อนเริ่มดำเนินการ
-mprioritize-จำกัด-insns=ลำดับความสำคัญ
ตัวเลือกนี้ควบคุมลำดับความสำคัญที่กำหนดให้กับการจำกัดช่องการจัดส่ง
คำแนะนำในระหว่างการกำหนดเวลาที่สอง อาร์กิวเมนต์ ลำดับความสำคัญ รับค่า
0, 1,หรือ 2 เพื่อกำหนดลำดับความสำคัญไม่สูงสุดหรือสูงสุดเป็นอันดับสอง (ตามลำดับ) ให้กับ
คำแนะนำการจำกัดช่องจัดส่ง
-msched-ค่าใช้จ่าย-dep=การพึ่งพาอาศัยกัน_type
ตัวเลือกนี้ควบคุมว่าการพึ่งพาอาศัยใดที่เป้าหมายถือว่ามีค่าใช้จ่ายสูงในช่วง
การจัดตารางเวลาการเรียนการสอน อาร์กิวเมนต์ การพึ่งพาอาศัยกัน_type รับข้อใดข้อหนึ่งต่อไปนี้
ค่า:
ไม่ ไม่มีการพึ่งพาเป็นค่าใช้จ่าย
ทั้งหมด การพึ่งพาอาศัยกันทั้งหมดมีค่าใช้จ่ายสูง
true_store_to_load
การพึ่งพาอาศัยกันอย่างแท้จริงจากร้านค้าสู่การโหลดนั้นมีค่าใช้จ่ายสูง
store_to_load
การพึ่งพาอาศัยกันจากร้านค้าถึงการโหลดนั้นมีค่าใช้จ่ายสูง
จำนวน
การพึ่งพาใด ๆ ที่เวลาแฝงมากกว่าหรือเท่ากับ จำนวน มีราคาแพง
-minsert-sched-nops=โครงการ
ตัวเลือกนี้ควบคุมรูปแบบการแทรก NOP ที่จะใช้ในระหว่างการตั้งเวลาที่สอง
ผ่าน. อาร์กิวเมนต์ โครงการ รับค่าใดค่าหนึ่งต่อไปนี้:
ไม่ อย่าใส่ NOP
เบาะ Pad with NOPs กลุ่มการจัดส่งใด ๆ ที่มีช่องปัญหาว่างตาม
การจัดกลุ่มของตัวจัดกำหนดการ
จัดกลุ่มใหม่_แน่นอน
แทรก NOPs เพื่อบังคับให้ insns ขึ้นกับค่าใช้จ่ายในกลุ่มแยกกัน ใส่พอดี
NOPs จำนวนมากเท่าที่จำเป็นเพื่อบังคับให้กลุ่มใหม่ตามการประมาณการ
การจัดกลุ่มโปรเซสเซอร์
จำนวน
แทรก NOPs เพื่อบังคับให้ insns ขึ้นกับค่าใช้จ่ายในกลุ่มแยกกัน แทรก จำนวน
NOPs เพื่อบังคับ insn ให้กับกลุ่มใหม่
-mcall-sysv
บนระบบ V.4 และระบบ PowerPC แบบฝังตัวจะคอมไพล์โค้ดโดยใช้หลักการเรียกที่
เป็นไปตามร่างเดือนมีนาคม 1995 ของ System V Application Binary Interface, PowerPC
โปรเซสเซอร์เสริม นี่เป็นค่าเริ่มต้นเว้นแต่คุณจะกำหนดค่า GCC โดยใช้
powerpc-*-eabiax.
-mcall-sysv-eabi
-mcall-เอบิ
ระบุทั้งคู่ -mcall-sysv และ -เมบิ ตัวเลือก
-mcall-sysv-noeabi
ระบุทั้งคู่ -mcall-sysv และ -mno-eabi ตัวเลือก
-mcall-aixdesc
บนระบบ V.4 และระบบ PowerPC ที่ฝังไว้ จะคอมไพล์โค้ดสำหรับระบบปฏิบัติการ AIX
-mcall-ลินุกซ์
บนระบบ V.4 และระบบ PowerPC ที่ฝังไว้จะคอมไพล์โค้ดสำหรับ GNU . ที่ใช้ Linux
ระบบ
-mcall-freebsd
บนระบบ V.4 และระบบ PowerPC แบบฝังตัวจะคอมไพล์โค้ดสำหรับปฏิบัติการ FreeBSD
ระบบ
-mcall-netbsd
บนระบบ V.4 และระบบ PowerPC ที่ฝังไว้จะคอมไพล์โค้ดสำหรับปฏิบัติการ NetBSD
ระบบ
-mcall-openbsd
บนระบบ V.4 และระบบ PowerPC ที่ฝังไว้จะคอมไพล์โค้ดสำหรับการทำงาน OpenBSD
ระบบ
-maix-struct-ส่งคืน
ส่งคืนโครงสร้างทั้งหมดในหน่วยความจำ (ตามที่ระบุโดย AIX ABI)
-msvr4-struct-ส่งคืน
ส่งคืนโครงสร้างที่มีขนาดเล็กกว่า 8 ไบต์ในรีจิสเตอร์ (ตามที่ระบุโดย SVR4 ABI)
-มาบิ=ประเภท abi
ขยาย ABI ปัจจุบันด้วยส่วนขยายเฉพาะ หรือลบส่วนขยายดังกล่าว ถูกต้อง
ค่าคือ อัลติเทค, ไม่มี altivec, เอสพีอี, ไม่มีความเร็ว, ibmlongdouble, อีอีลองดับเบิ้ล, เอลฟ์v1,
เอลฟ์v2.
-มาบิ=สเป
ขยาย ABI ปัจจุบันด้วยส่วนขยาย SPE ABI สิ่งนี้ไม่เปลี่ยน ABI เริ่มต้น
แต่จะเพิ่มส่วนขยาย SPE ABI ให้กับ ABI ปัจจุบันแทน
-mabi=ไม่มีความเร็ว
ปิดใช้งานส่วนขยาย Book-E SPE ABI สำหรับ ABI ปัจจุบัน
-mabi=ibmlongdouble
เปลี่ยน ABI ปัจจุบันเพื่อใช้ IBM Extended-precision long double นี่คือ PowerPC
ตัวเลือก SYSV ABI แบบ 32 บิต
-mabi=ieeelongdouble
เปลี่ยน ABI ปัจจุบันเพื่อใช้ IEEE Extended-precision long double นี่คือ PowerPC
ตัวเลือก Linux ABI แบบ 32 บิต
-mabi=เอลฟ์v1
เปลี่ยน ABI ปัจจุบันเพื่อใช้ ELFv1 ABI นี่คือ ABI เริ่มต้นสำหรับ big-endian
ลินุกซ์ PowerPC 64 บิต การแทนที่ ABI เริ่มต้นต้องการการสนับสนุนระบบพิเศษและ
มีแนวโน้มที่จะล้มเหลวในรูปแบบที่งดงาม
-mabi=เอลฟ์v2
เปลี่ยน ABI ปัจจุบันเพื่อใช้ ELFv2 ABI นี่คือ ABI เริ่มต้นสำหรับ little-
endian PowerPC 64 บิต Linux การแทนที่ ABI เริ่มต้นต้องใช้ระบบพิเศษ
สนับสนุนและมีแนวโน้มที่จะล้มเหลวในรูปแบบที่น่าทึ่ง
-ต้นแบบ
-mno-ต้นแบบ
บนระบบ V.4 และระบบ PowerPC แบบฝังจะถือว่าการเรียกทั้งหมดไปยังอาร์กิวเมนต์ตัวแปร
ฟังก์ชั่นได้รับการสร้างต้นแบบอย่างเหมาะสม มิฉะนั้นคอมไพเลอร์จะต้องแทรกคำสั่ง
ก่อนทุกสายที่ไม่ใช่ต้นแบบเพื่อตั้งค่าหรือล้างบิต 6 ของเงื่อนไขรหัส register
(CR) เพื่อระบุว่าค่าทศนิยมถูกส่งผ่านในทศนิยมหรือไม่
รีจิสเตอร์ในกรณีที่ฟังก์ชันรับอาร์กิวเมนต์ตัวแปร กับ -ต้นแบบ, โทรเท่านั้น
ฟังก์ชันอาร์กิวเมนต์ตัวแปรต้นแบบ ตั้งค่าหรือล้างบิต
-msim
บนระบบ PowerPC แบบฝัง สมมติว่าโมดูลเริ่มต้นถูกเรียก ซิม-crt0.o และ
ว่าไลบรารี C มาตรฐานคือ libsim.a และ libc.เอ. นี่คือค่าเริ่มต้นสำหรับ
powerpc-*-eabisim การกำหนดค่า
-mmvme
บนระบบ PowerPC แบบฝัง สมมติว่าโมดูลเริ่มต้นถูกเรียก crt0.o และ
ไลบรารี C มาตรฐานคือ libmvme.a และ libc.เอ.
-บ้า
บนระบบ PowerPC แบบฝัง สมมติว่าโมดูลเริ่มต้นถูกเรียก crt0.o และ
ไลบรารี C มาตรฐานคือ ลิแบดส์.เอ และ libc.เอ.
-มีดพับ
บนระบบ PowerPC แบบฝัง สมมติว่าโมดูลเริ่มต้นถูกเรียก crt0.o และ
ไลบรารี C มาตรฐานคือ ลิบีก.เอ และ libc.เอ.
-mvxworks
บนระบบ V.4 และระบบ PowerPC แบบฝัง ระบุว่าคุณกำลังรวบรวมสำหรับ
ระบบ VxWorks
-สมาชิก
บนระบบ PowerPC แบบฝัง ให้ตั้งค่า PPC_EMB บิตในส่วนหัวของแฟล็ก ELF เพื่อระบุ
ที่ เอบิ ใช้การย้ายถิ่นฐานแบบขยาย
-เมบิ
-mno-eabi
บนระบบ V.4 และระบบ PowerPC แบบฝัง (ไม่) ยึดตาม Embedded
Applications Binary Interface (EABI) ซึ่งเป็นชุดของการปรับเปลี่ยน System
ข้อกำหนด V.4 กำลังเลือก -เมบิ หมายความว่าสแต็กอยู่ในแนวเดียวกับ 8-byte
ขอบเขต ฟังก์ชัน "__eabi" ถูกเรียกจาก "main" เพื่อตั้งค่าสภาพแวดล้อม EABI
และ -msdata ตัวเลือกสามารถใช้ทั้ง "r2" และ "r13" เพื่อชี้ไปที่ข้อมูลขนาดเล็กสองข้อมูลแยกกัน
พื้นที่ กำลังเลือก -mno-eabi หมายความว่าสแต็กถูกจัดแนวให้อยู่ในขอบเขต 16 ไบต์ ไม่ใช่
ฟังก์ชันการเริ่มต้น EABI ถูกเรียกจาก "main" และ -msdata ตัวเลือกใช้เท่านั้น
"r13" เพื่อชี้ไปที่พื้นที่ข้อมูลขนาดเล็กเพียงแห่งเดียว NS -เมบิ ตัวเลือกเปิดอยู่โดยค่าเริ่มต้นหากคุณ
กำหนดค่า GCC โดยใช้หนึ่งใน พาวเวอร์พีซี*-*-eabi* ตัวเลือก
-msdata=eabi
บนระบบ V.4 และระบบ PowerPC แบบฝัง ให้ใส่ "const" ที่เริ่มต้นขนาดเล็กส่วนกลางและ
ข้อมูลคงที่ใน .sdata2 ส่วนซึ่งชี้ไปที่การลงทะเบียน "r2" ใส่เล็ก
เริ่มต้นข้อมูลโกลบอลและสแตติกที่ไม่ใช่ "const" ใน .sdata ส่วนที่แหลม
โดยการลงทะเบียน "r13" ใส่ข้อมูลส่วนกลางและสแตติกที่ไม่ได้กำหนดค่าเริ่มต้นขนาดเล็กลงใน .sbs
ส่วนที่อยู่ติดกับ .sdata ส่วน. NS -msdata=eabi ตัวเลือกที่
เข้ากันไม่ได้กับ -mrelocated ตัวเลือก -msdata=eabi ตัวเลือกยังตั้งค่า
-สมาชิก ตัวเลือก
-msdata = sysv
บนระบบ V.4 และระบบ PowerPC แบบฝัง ให้ใส่ข้อมูลแบบคงที่และระดับโลกขนาดเล็กลงใน
.sdata ส่วนซึ่งชี้ไปที่การลงทะเบียน "r13" ใส่ global ที่ไม่ได้กำหนดค่าเริ่มต้นขนาดเล็ก
และข้อมูลคงที่ใน .sbs ส่วนที่อยู่ติดกับ .sdata ส่วน. NS
-msdata = sysv ตัวเลือกไม่เข้ากันกับ -mrelocated ตัวเลือก
-msdata=ค่าเริ่มต้น
-msdata
บนระบบ V.4 และระบบ PowerPC แบบฝัง ถ้า -เมบิ ใช้คอมไพล์โค้ดเหมือนกัน
as -msdata=eabiมิฉะนั้นคอมไพล์โค้ดเหมือนกับ -msdata = sysv.
-msdata=ข้อมูล
บนระบบ V.4 และระบบ PowerPC แบบฝัง ให้ใส่ข้อมูลส่วนกลางขนาดเล็กใน .sdata
ส่วน. ใส่ข้อมูลส่วนกลางขนาดเล็กที่ไม่ได้กำหนดค่าเริ่มต้นใน .sbs ส่วน. ไม่ได้ใช้
ลงทะเบียน "r13" เพื่อจัดการกับข้อมูลขนาดเล็กอย่างไรก็ตาม นี่เป็นพฤติกรรมเริ่มต้นเว้นแต่
อื่น ๆ -msdata มีการใช้ตัวเลือก
-msdata=ไม่มี
-mno-sdata
บนระบบ PowerPC แบบฝัง ให้ใส่ข้อมูลส่วนกลางและแบบคงที่ที่เริ่มต้นทั้งหมดไว้ใน .ข้อมูล
และข้อมูลที่ไม่ได้กำหนดค่าเริ่มต้นทั้งหมดใน .bss มาตรา.
-mblock-ย้ายอินไลน์จำกัด=NUM
อินไลน์การย้ายบล็อกทั้งหมด (เช่นการเรียก "memcpy" หรือสำเนาโครงสร้าง) น้อยกว่าหรือ
เท่ากับ NUM ไบต์ ค่าต่ำสุดสำหรับ NUM คือ 32 ไบต์บนเป้าหมายแบบ 32 บิตและ 64
ไบต์บนเป้าหมาย 64 บิต ค่าเริ่มต้นคือเป้าหมายเฉพาะ
-G NUM
บนระบบ PowerPC แบบฝัง ให้วางรายการโกลบอลและสแตติกน้อยกว่าหรือเท่ากับ NUM
ไบต์ลงในข้อมูลขนาดเล็กหรือส่วน BSS แทนข้อมูลปกติหรือส่วน BSS
โดยค่าเริ่มต้น NUM คือ 8 -G NUM สวิตช์ยังถูกส่งไปยังตัวเชื่อมโยง โมดูลทั้งหมด
ก็ควรเรียบเรียงเหมือนกัน -G NUM มูลค่า
-mregnames
-mno-regnames
บนระบบ V.4 และระบบ PowerPC แบบฝัง ทำ (ไม่) ปล่อยชื่อรีจิสเตอร์ใน
เอาต์พุตภาษาแอสเซมบลีโดยใช้รูปแบบสัญลักษณ์
-mlongcall
-mno-ลองโทร
โดยค่าเริ่มต้นถือว่าการโทรทั้งหมดอยู่ไกลเพื่อให้ยาวขึ้นและมีราคาแพงกว่า
จำเป็นต้องมีลำดับการโทร สิ่งนี้จำเป็นสำหรับการโทรที่ไกลกว่า 32 เมกะไบต์
(33,554,432 ไบต์) จากตำแหน่งปัจจุบัน การโทรแบบสั้นจะถูกสร้างขึ้นหาก
คอมไพเลอร์รู้ว่าการโทรไม่สามารถอยู่ไกลได้ขนาดนั้น การตั้งค่านี้สามารถแทนที่ได้โดย
แอตทริบิวต์ฟังก์ชัน "shortcall" หรือโดย "#pragma ลองโทร(พ.ศ. 0) ".
ตัวเชื่อมโยงบางตัวสามารถตรวจจับการโทรออกนอกช่วงและสร้างรหัสกาวได้
แมลงวัน ในระบบเหล่านี้ การเรียกยาวไม่จำเป็น และสร้างโค้ดที่ช้ากว่า เนื่องจาก
ของการเขียนนี้ ตัวเชื่อมโยง AIX สามารถทำได้ เช่นเดียวกับตัวเชื่อมโยง GNU สำหรับ PowerPC/64 มัน
มีการวางแผนที่จะเพิ่มคุณลักษณะนี้ให้กับตัวเชื่อมโยง GNU สำหรับระบบ PowerPC แบบ 32 บิตด้วย
บนระบบดาร์วิน/PPC "#pragma longcall" จะสร้าง "jbsr callee, L42" บวกกับ สาขา
เกาะ (รหัสกาว). ที่อยู่เป้าหมายทั้งสองเป็นตัวแทนของผู้รับสายและสาขา
เกาะ. ตัวเชื่อมโยง Darwin/PPC ชอบที่อยู่แรกและสร้าง "bl callee"
ถ้าคำสั่ง PPC "bl" ไปถึงผู้รับสายโดยตรง มิฉะนั้น ตัวเชื่อมโยง
สร้าง "bl L42" เพื่อเรียกเกาะสาขา เกาะสาขาต่อท้าย
เนื้อหาของฟังก์ชันการโทร มันคำนวณที่อยู่แบบเต็ม 32 บิตของผู้รับสายและ
กระโดดไปที่มัน
ในระบบ Mach-O (ดาร์วิน) ตัวเลือกนี้จะสั่งให้คอมไพเลอร์ปล่อยไปยังกาวสำหรับ
ทุกสายตรงและตัวเชื่อมโยงดาร์วินตัดสินใจว่าจะใช้หรือละทิ้ง
ในอนาคต GCC อาจเพิกเฉยต่อข้อกำหนด longcall ทั้งหมดเมื่อตัวเชื่อมโยงเป็นที่รู้จัก
สร้างกาว
-mtls-เครื่องหมาย
-mno-tls-เครื่องหมาย
ทำเครื่องหมาย (ไม่ทำเครื่องหมาย) เรียก "__tls_get_addr" ด้วยการย้ายตำแหน่งที่ระบุฟังก์ชัน
การโต้แย้ง. การย้ายตำแหน่งช่วยให้ลิงเกอร์เชื่อมโยงการเรียกใช้ฟังก์ชันกับ . ได้อย่างน่าเชื่อถือ
คำแนะนำการตั้งค่าอาร์กิวเมนต์สำหรับการเพิ่มประสิทธิภาพ TLS ซึ่งจะช่วยให้ GCC ดีขึ้น
กำหนดเวลาลำดับ
-pthread
เพิ่มการรองรับมัลติเธรดด้วยปุ่ม กระทู้ ห้องสมุด. ตัวเลือกนี้ตั้งค่าสถานะสำหรับ
ทั้งตัวประมวลผลล่วงหน้าและตัวเชื่อมโยง
-mrecip
-mno-recip
ตัวเลือกนี้เปิดใช้งานการประมาณการซึ่งกันและกันและการประมาณการรากที่สองซึ่งกันและกัน
คำแนะนำพร้อมขั้นตอน Newton-Raphson เพิ่มเติมเพื่อเพิ่มความแม่นยำแทน
ทำการหารหรือรากที่สองแล้วหารอาร์กิวเมนต์จุดทศนิยม คุณควรใช้
-ffast-คณิตศาสตร์ ตัวเลือกเมื่อใช้ -mrecip (หรืออย่างน้อย -funsafe-คณิตศาสตร์-optimizations,
-finite-คณิตศาสตร์เท่านั้น, -freciprocal-คณิตศาสตร์ และ -fno-trapping-คณิตศาสตร์). โปรดทราบว่าในขณะที่
ปริมาณงานของลำดับโดยทั่วไปจะสูงกว่าปริมาณงานที่ไม่ใช่
คำสั่งซึ่งกันและกัน ความแม่นยำของลำดับสามารถลดลงได้ถึง 2 ulp
(กล่าวคือ ค่าผกผันของ 1.0 เท่ากับ 0.99999994) สำหรับรากที่สองส่วนกลับ
-mrecip=เลือก
ตัวเลือกนี้ควบคุมว่าอาจใช้คำแนะนำในการประมาณการส่วนต่างใด เลือก คือ
รายการตัวเลือกที่คั่นด้วยเครื่องหมายจุลภาค ซึ่งอาจนำหน้าด้วย "!" เพื่อกลับตัวเลือก:
"ทั้งหมด": เปิดใช้งานคำแนะนำการประมาณค่าทั้งหมด "ค่าเริ่มต้น": เปิดใช้งานคำแนะนำเริ่มต้น
เทียบเท่ากับ -mrecip, "none": ปิดการใช้งานคำสั่งประมาณการทั้งหมด เทียบเท่ากับ
-mno-recip; "div": เปิดใช้งานคำแนะนำการประมาณซึ่งกันและกันสำหรับทั้ง single
และความแม่นยำสองเท่า "divf": เปิดใช้งานการประมาณซึ่งกันและกันแบบแม่นยำเดียว
คำแนะนำ; "divd": เปิดใช้งานการประมาณส่วนกลับที่มีความแม่นยำสองเท่า
คำแนะนำ; "rsqrt": เปิดใช้งานคำแนะนำการประมาณค่ารากที่สองซึ่งกันและกัน
สำหรับความแม่นยำทั้งแบบเดี่ยวและแบบคู่ "rsqrtf": เปิดใช้งานส่วนกลับที่แม่นยำเดียว
คำแนะนำการประมาณรากที่สอง "rsqrtd": เปิดใช้งาน double-precision
คำแนะนำการประมาณค่ารากที่สองซึ่งกันและกัน
ตัวอย่างเช่น -mrecip=ทั้งหมด,!rsqrtd เปิดใช้งานการประมาณการซึ่งกันและกันทั้งหมด
คำแนะนำ ยกเว้นคำแนะนำ "FRSQRTE", "XSRSQRTEDP" และ "XVRSQRTEDP"
ซึ่งจัดการการคำนวณรากที่สองที่มีความแม่นยำสองส่วนซึ่งกันและกัน
-mrecip-ความแม่นยำ
-mno-สูตรความแม่นยำ
สมมติ (อย่าสมมติ) ว่าคำแนะนำการประมาณการซึ่งกันและกันให้สูงกว่า-
ค่าประมาณที่แม่นยำกว่าที่ได้รับคำสั่งจาก PowerPC ABI กำลังเลือก -mcpu=พลังงาน6,
-mcpu=พลังงาน7 or -mcpu=พลังงาน8 เลือกโดยอัตโนมัติ -mrecip-ความแม่นยำ. สองเท่า-
คำแนะนำการประมาณค่ารากที่สองที่แม่นยำไม่ได้สร้างโดยค่าเริ่มต้นที่ระดับต่ำ
เครื่องจักรที่มีความแม่นยำ เนื่องจากไม่ได้ให้ค่าประมาณที่มาบรรจบกันหลังจากสาม
ขั้นตอน
-mveclabi=ชนิด
ระบุประเภท ABI ที่จะใช้สำหรับ vectorizing intrinsics โดยใช้ไลบรารีภายนอก
ปัจจุบันรองรับประเภทเดียวคือ "mass" ซึ่งกำหนดให้ใช้ IBM's
ไลบรารีระบบย่อยการเร่งความเร็วทางคณิตศาสตร์ (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 และ
-funsafe-คณิตศาสตร์-optimizations ต้องเปิดใช้งานด้วย ห้องสมุด MASS ต้องเป็น
ระบุไว้ในเวลาลิงค์
-มฟริซ
-mno-friz
สร้าง (ไม่สร้าง) คำสั่ง " friz" เมื่อ -funsafe-คณิตศาสตร์-optimizations
ตัวเลือกใช้เพื่อเพิ่มประสิทธิภาพการปัดเศษของค่าทศนิยมให้เป็นจำนวนเต็ม 64 บิตและ
กลับสู่จุดลอยตัว คำสั่ง "friz" จะไม่คืนค่าเดิมหาก
จำนวนจุดทศนิยมมากเกินไปที่จะใส่เป็นจำนวนเต็ม
-mpointers-to-ซ้อนฟังก์ชัน
-mno-pointers-to-ซ้อนกัน-ฟังก์ชั่น
สร้าง (ไม่สร้าง) รหัสเพื่อโหลดการลงทะเบียนลูกโซ่แบบคงที่ (r11) เมื่อไหร่
เรียกผ่านพอยน์เตอร์บนระบบ AIX และ 64-บิต Linux โดยที่ฟังก์ชันตัวชี้
ชี้ไปที่ตัวอธิบาย 3 คำที่ให้ที่อยู่ของฟังก์ชัน ค่า TOC ที่จะโหลดใน
ทะเบียน r2และค่าลูกโซ่คงที่ที่จะโหลดใน register r11.
-mpointers-to-ซ้อนฟังก์ชัน เป็นค่าเริ่มต้น คุณไม่สามารถโทรผ่านตัวชี้ไปที่
ฟังก์ชันที่ซ้อนกันหรือตัวชี้ไปยังฟังก์ชันที่คอมไพล์ในภาษาอื่นที่ใช้
ห่วงโซ่คงที่ถ้าคุณใช้ -mno-pointers-to-ซ้อนกัน-ฟังก์ชั่น.
-msave-toc-ทางอ้อม
-mno-save-toc-ทางอ้อม
สร้าง (ไม่สร้าง) รหัสเพื่อบันทึกค่า TOC ในตำแหน่งกองซ้อนที่สงวนไว้
ในบทนำของฟังก์ชัน หากฟังก์ชันเรียกใช้ผ่านตัวชี้บน AIX และ 64-บิต
ระบบลีนุกซ์. หากค่า TOC ไม่ถูกบันทึกไว้ในอารัมภบท ก็จะถูกบันทึกไว้ก่อนหน้านั้น
โทรผ่านพอยน์เตอร์ NS -mno-save-toc-ทางอ้อม ตัวเลือกเป็นค่าเริ่มต้น
-mcompat-align-parm
-mno-compat-align-parm
สร้าง (ไม่สร้าง) รหัสเพื่อส่งผ่านพารามิเตอร์โครงสร้างด้วยการจัดตำแหน่งสูงสุด
64 บิต เพื่อความเข้ากันได้กับ GCC เวอร์ชันเก่า
GCC เวอร์ชันเก่า (ก่อน 4.9.0) ไม่ถูกต้อง ไม่จัดแนวพารามิเตอร์โครงสร้าง
บนขอบเขต 128 บิตเมื่อโครงสร้างนั้นประกอบด้วยสมาชิกที่ต้องการ 128 บิต
การจัดตำแหน่ง สิ่งนี้ได้รับการแก้ไขใน GCC เวอร์ชันล่าสุด สามารถใช้ตัวเลือกนี้ได้
เพื่อสร้างโค้ดที่เข้ากันได้กับฟังก์ชันที่คอมไพล์ด้วย . เวอร์ชันเก่า
จีซีซี.
ในคอมไพเลอร์เวอร์ชันนี้ the -mcompat-align-parm เป็นค่าเริ่มต้น ยกเว้นเมื่อ
โดยใช้ลินุกซ์ ELFv2 ABI
RX Options
ตัวเลือกบรรทัดคำสั่งเหล่านี้ถูกกำหนดไว้สำหรับเป้าหมาย RX:
-m64bit-ดับเบิ้ล
-m32bit-ดับเบิ้ล
ทำให้ประเภทข้อมูล "สองเท่า" เป็น 64 บิต (-m64bit-ดับเบิ้ล) หรือ 32 บิต (-m32bit-ดับเบิ้ล)
ในขนาด. ค่าเริ่มต้นคือ -m32bit-ดับเบิ้ล. หมายเหตุ ฮาร์ดแวร์จุดลอยตัว RX ใช้งานได้เท่านั้น
ในค่า 32 บิต ซึ่งเป็นสาเหตุที่ค่าเริ่มต้นคือ -m32bit-ดับเบิ้ล.
-fpu
-โนฟปุ
เปิดใช้งาน (-fpu) หรือปิดการใช้งาน (-โนฟปุ) การใช้ฮาร์ดแวร์จุดลอยตัว RX NS
ค่าเริ่มต้นถูกเปิดใช้งานสำหรับ RX600 ซีรีส์และปิดการใช้งานสำหรับ RX200 ชุด.
คำสั่งทศนิยมถูกสร้างขึ้นสำหรับค่าทศนิยม 32 บิตเท่านั้น
อย่างไรก็ตาม ดังนั้นฮาร์ดแวร์ FPU จะไม่ถูกใช้เพื่อเพิ่มเป็นสองเท่าหาก -m64bit-ดับเบิ้ล ตัวเลือกที่
มือสอง
หมายเหตุ ถ้า -fpu เปิดใช้งานตัวเลือกแล้ว -funsafe-คณิตศาสตร์-optimizations ยังเปิดใช้งานอยู่
โดยอัตโนมัติ เนื่องจากคำสั่ง RX FPU นั้นไม่ปลอดภัย
-mcpu=ชื่อ
เลือกประเภทของ RX CPU ที่จะกำหนดเป้าหมาย ปัจจุบันรองรับสามประเภท ได้แก่
ทั่วไป RX600 และ RX200 ชุดฮาร์ดแวร์และเฉพาะ RX610 ซีพียู ค่าเริ่มต้นคือ
RX600.
ข้อแตกต่างระหว่าง RX600 และ RX610 คือว่า RX610 ไม่สนับสนุน
คำแนะนำ "MVTIPL"
โครงการ RX200 ซีรีส์ไม่มีหน่วยจุดลอยตัวของฮาร์ดแวร์และดังนั้น -โนฟปุ เปิดใช้งาน
โดยค่าเริ่มต้นเมื่อเลือกประเภทนี้
-mbig-endian-ข้อมูล
-mlittle-endian-ข้อมูล
จัดเก็บข้อมูล (แต่ไม่ใช่โค้ด) ในรูปแบบ big-endian ค่าเริ่มต้นคือ
-mlittle-endian-ข้อมูลคือการเก็บข้อมูลในรูปแบบ little-endian
-msmall-data-จำกัด=N
ระบุขนาดสูงสุดเป็นไบต์ของตัวแปรโกลบอลและสแตติกซึ่งสามารถวางได้
ลงในพื้นที่ข้อมูลขนาดเล็ก การใช้พื้นที่ข้อมูลขนาดเล็กอาจทำให้มีขนาดเล็กลงและเร็วขึ้น
รหัสแต่ขนาดของพื้นที่มีจำกัดและมันขึ้นอยู่กับโปรแกรมเมอร์เพื่อให้แน่ใจว่า
พื้นที่ไม่ล้น นอกจากนี้ เมื่อใช้พื้นที่ข้อมูลขนาดเล็ก RX's
ทะเบียน (โดยปกติคือ "r13") สงวนไว้สำหรับใช้ชี้ไปที่บริเวณนี้ ดังนั้นจึงไม่ใช่
ใช้งานได้นานขึ้นโดยคอมไพเลอร์ ซึ่งอาจส่งผลให้ช้าลงและ/หรือใหญ่ขึ้น
รหัสถ้าตัวแปรถูกผลักไปที่สแต็กแทนที่จะถูกเก็บไว้ในรีจิสเตอร์นี้
หมายเหตุ ตัวแปรทั่วไป (ตัวแปรที่ยังไม่ได้เริ่มต้น) และค่าคงที่คือ
ไม่วางลงในพื้นที่ข้อมูลขนาดเล็กเนื่องจากถูกกำหนดให้กับส่วนอื่น ๆ ใน
เอาต์พุตที่ปฏิบัติการได้
ค่าเริ่มต้นคือศูนย์ ซึ่งปิดใช้งานคุณลักษณะนี้ หมายเหตุ คุณลักษณะนี้ไม่ใช่
เปิดใช้งานโดยค่าเริ่มต้นด้วยระดับการเพิ่มประสิทธิภาพที่สูงขึ้น (-O2 เป็นต้น) เนื่องจาก
ผลกระทบที่อาจเกิดขึ้นจากการจองทะเบียน อยู่ที่โปรแกรมเมอร์
เพื่อทดลองและค้นหาว่าคุณลักษณะนี้มีประโยชน์ต่อโปรแกรมของตนหรือไม่ ดู
คำอธิบายของ -mpid ตัวเลือกสำหรับคำอธิบายวิธีการลงทะเบียนจริงไปยัง
เลือกตัวชี้พื้นที่ข้อมูลขนาดเล็กไว้
-msim
-mno-ซิม
ใช้รันไทม์ของโปรแกรมจำลอง ค่าเริ่มต้นคือการใช้รันไทม์เฉพาะบอร์ด libgloss
-mas100-ไวยากรณ์
-mno-as100-ไวยากรณ์
เมื่อสร้างเอาต์พุตแอสเซมเบลอร์ ให้ใช้ไวยากรณ์ที่เข้ากันได้กับ AS100 . ของ Renesas
ผู้ประกอบ. ไวยากรณ์นี้ยังสามารถจัดการได้โดยแอสเซมเบลอร์ GAS แต่มีบางอย่าง
ข้อจำกัด จึงไม่ถูกสร้างขึ้นโดยค่าเริ่มต้น
-mmmax-ขนาดคงที่=N
ระบุขนาดสูงสุดเป็นไบต์ของค่าคงที่ที่สามารถใช้เป็นตัวถูกดำเนินการใน
คำแนะนำ RX แม้ว่าชุดคำสั่ง RX จะยอมให้ค่าคงที่สูงถึง 4
ไบต์ยาวเพื่อใช้ในคำสั่ง ค่าที่ยาวขึ้นเท่ากับค่าที่ยาวขึ้น
การเรียนการสอน. ดังนั้น ในบางกรณี อาจเป็นประโยชน์ที่จะจำกัดขนาดของ
ค่าคงที่ที่ใช้ในคำสั่ง ค่าคงที่ที่มากเกินไปจะถูกแทน
วางลงในพูลคงที่และอ้างอิงผ่านการลงทะเบียนทางอ้อม
มูลค่า N สามารถอยู่ระหว่าง 0 ถึง 4 ค่า 0 (ค่าเริ่มต้น) หรือ 4 หมายความว่า
อนุญาตให้มีค่าคงที่ทุกขนาด
-mrelax
เปิดใช้งานการผ่อนคลายลิงเกอร์ การคลายตัวเชื่อมโยงเป็นกระบวนการโดยที่ตัวเชื่อมโยงพยายาม
เพื่อลดขนาดของโปรแกรมโดยค้นหาเวอร์ชันที่สั้นกว่าของคำสั่งต่างๆ
ปิดใช้งานโดยค่าเริ่มต้น
-mint-ลงทะเบียน=N
ระบุจำนวนรีจิสเตอร์ที่จะสำรองสำหรับฟังก์ชันตัวจัดการอินเตอร์รัปต์ที่รวดเร็ว NS
ความคุ้มค่า N สามารถอยู่ระหว่าง 0 ถึง 4 ค่า 1 หมายถึงการลงทะเบียน "r13" ถูกสงวนไว้
สำหรับการใช้งานเฉพาะตัวจัดการขัดจังหวะแบบรวดเร็ว มูลค่าสำรอง 2 "r13" และ
"ร12" มูลค่าสำรอง 3 รายการ "r13", "r12" และ "r11" และมูลค่าสำรอง 4 รายการ "r13"
ผ่าน "r10" ค่าเริ่มต้นเป็น 0 ไม่ได้สงวนการลงทะเบียนใดๆ
-msave-acc-in-ขัดจังหวะ
ระบุว่าฟังก์ชันตัวจัดการขัดจังหวะควรรักษาการลงทะเบียนสะสม
สิ่งนี้จำเป็นเฉพาะในกรณีที่รหัสปกติอาจใช้การลงทะเบียนสะสม ตัวอย่างเช่น
เพราะมันทำการคูณแบบ 64 บิต ค่าเริ่มต้นคือละเว้นตัวสะสม
เนื่องจากจะทำให้ตัวจัดการขัดจังหวะเร็วขึ้น
-mpid
-mno-pid
เปิดใช้งานการสร้างข้อมูลที่เป็นอิสระจากตำแหน่ง เมื่อเปิดใช้งานการเข้าถึงใด ๆ
ข้อมูลคงที่จะทำผ่านออฟเซ็ตจากที่อยู่ฐานที่เก็บไว้ในรีจิสเตอร์ นี้
อนุญาตให้ระบุตำแหน่งของข้อมูลคงที่ ณ เวลาทำงานโดยไม่ต้องใช้
ปฏิบัติการที่จะย้ายซึ่งเป็นประโยชน์ต่อการใช้งานแบบฝังตัวที่มีความแน่น
ข้อจำกัดของหน่วยความจำ ข้อมูลที่สามารถแก้ไขได้จะไม่ได้รับผลกระทบจากตัวเลือกนี้
หมายเหตุ การใช้คุณลักษณะนี้จะสงวนการลงทะเบียน ซึ่งมักจะเป็น "r13" สำหรับข้อมูลคงที่
ที่อยู่ฐาน ซึ่งอาจส่งผลให้โค้ดช้าลงและ/หรือใหญ่ขึ้น โดยเฉพาะอย่างยิ่งในความซับซ้อน
ฟังก์ชั่น
การลงทะเบียนจริงที่เลือกให้เก็บที่อยู่ฐานข้อมูลคงที่ขึ้นอยู่กับว่า
-msmall-data-จำกัด และ / หรือ -mint-ลงทะเบียน เปิดใช้งานตัวเลือกบรรทัดคำสั่ง
เริ่มต้นด้วยการลงทะเบียน "r13" และเลื่อนลงมาจะมีการจัดสรรการลงทะเบียนก่อน
เพื่อตอบสนองความต้องการของ -mint-ลงทะเบียนแล้ว -mpid และในที่สุดก็
-msmall-data-จำกัด. ดังนั้นจึงเป็นไปได้ที่การลงทะเบียนพื้นที่ข้อมูลขนาดเล็กจะเป็น "r8"
ถ้าทั้งสองอย่าง -mint-ลงทะเบียน=4 และ -mpid ระบุไว้ในบรรทัดคำสั่ง
โดยค่าเริ่มต้น คุณลักษณะนี้ไม่ได้เปิดใช้งาน ค่าเริ่มต้นสามารถเรียกคืนได้ผ่านทาง -mno-pid
ตัวเลือกบรรทัดคำสั่ง
-mno-เตือนหลายอย่างรวดเร็วขัดจังหวะ
-mwarn-หลาย-fast-interrupts
ป้องกันไม่ให้ GCC ออกข้อความเตือนหากพบการขัดจังหวะที่รวดเร็วมากกว่าหนึ่งรายการ
ตัวจัดการเมื่อรวบรวมไฟล์ ค่าเริ่มต้นคือการออกคำเตือนสำหรับแต่ละส่วนเพิ่มเติม
พบตัวจัดการการขัดจังหวะอย่างรวดเร็วเนื่องจาก RX รองรับเพียงหนึ่งการขัดจังหวะดังกล่าว
หมายเหตุ ตัวเลือกบรรทัดคำสั่ง GCC ทั่วไป -แก้ไขแล้ว-reg มีความสำคัญเป็นพิเศษต่อ RX
พอร์ตเมื่อใช้กับแอตทริบิวต์ฟังก์ชัน "ขัดจังหวะ" คุณลักษณะนี้บ่งชี้ a
ฟังก์ชันที่ตั้งใจจะประมวลผลการขัดจังหวะอย่างรวดเร็ว GCC รับรองว่าจะใช้เฉพาะการลงทะเบียน
"r10", "r11", "r12" และ/หรือ "r13" และเฉพาะว่าการใช้งานปกติของ
การลงทะเบียนที่เกี่ยวข้องถูก จำกัด ผ่านทาง -แก้ไขแล้ว-reg or -mint-ลงทะเบียน
ตัวเลือกบรรทัดคำสั่ง
S / 390 และ zซีรี่ส์ Options
เหล่านี้เป็น -m ตัวเลือกที่กำหนดไว้สำหรับสถาปัตยกรรม S/390 และ zSeries
-mhard-ลอย
-msoft-ลอย
ใช้ (อย่าใช้) คำแนะนำฮาร์ดแวร์จุดลอยตัวและลงทะเบียนสำหรับ float-
การดำเนินงานจุด เมื่อไหร่ -msoft-ลอย ถูกระบุ ทำหน้าที่ใน libgcc.a จะใช้ในการ
ดำเนินการดำเนินการจุดลอยตัว เมื่อไหร่ -mhard-ลอย ระบุคอมไพเลอร์
สร้างคำสั่งทศนิยม IEEE นี่คือค่าเริ่มต้น
-mhard-dfp
-mno-ฮาร์ด-dfp
ใช้ (อย่าใช้) ฮาร์ดแวร์ decimal-floating-point คำแนะนำสำหรับ decimal-
การดำเนินการจุดลอยตัว เมื่อไหร่ -mno-ฮาร์ด-dfp ถูกระบุ ทำหน้าที่ใน libgcc.a เป็น
ใช้ในการดำเนินการจุดทศนิยม-ทศนิยม เมื่อไหร่ -mhard-dfp ระบุไว้
คอมไพเลอร์สร้างคำสั่งฮาร์ดแวร์จุดทศนิยมลอยตัว นี่คือค่าเริ่มต้น
for -มีนาคม = z9-ec หรือสูงกว่า
-mlong-double-64
-mlong-double-128
สวิตช์เหล่านี้ควบคุมขนาดของประเภท "long double" ขนาด 64 บิตทำให้
ประเภท "long double" เทียบเท่ากับประเภท "double" นี่คือค่าเริ่มต้น
-mbackchain
-mno-แบ็คเชน
จัดเก็บ (ไม่จัดเก็บ) ที่อยู่ของเฟรมผู้โทรเป็นตัวชี้แบ็คเชนลงใน
สแต็คเฟรมของ callee อาจจำเป็นต้องใช้ backchain เพื่ออนุญาตการดีบักโดยใช้เครื่องมือที่
ไม่เข้าใจข้อมูลเฟรมการโทรของ DWARF 2 เมื่อไหร่ -mno-บรรจุสแต็ค ที่อยู่ใน
เอฟเฟกต์ ตัวชี้แบ็คเชนจะถูกเก็บไว้ที่ด้านล่างของเฟรมสแต็ก เมื่อไร
-mpacked-กอง มีผลบังคับใช้ backchain อยู่ในคำบนสุดของ
พื้นที่บันทึกการลงทะเบียน 96/160 ไบต์
โดยทั่วไปโค้ดที่คอมไพล์ด้วย -mbackchain สามารถโทรเข้ากันได้กับรหัสที่คอมไพล์ด้วย
-mmo-แบ็คเชน; อย่างไรก็ตาม การใช้ backchain เพื่อจุดประสงค์ในการดีบักมักจะต้องการ
ที่ไบนารีทั้งหมดถูกสร้างขึ้นด้วย -mbackchain. โปรดทราบว่าการรวมกันของ
-mbackchain, -mpacked-กอง และ -mhard-ลอย ไม่รองรับ เพื่อสร้าง
การใช้เคอร์เนลลินุกซ์ -msoft-ลอย.
ค่าเริ่มต้นคือไม่รักษาแบ็คเชน
-mpacked-กอง
-mno-บรรจุสแต็ค
ใช้ (อย่าใช้) เค้าโครงสแต็กที่บรรจุไว้ เมื่อไหร่ -mno-บรรจุสแต็ค ระบุไว้
คอมไพเลอร์ใช้ฟิลด์ทั้งหมดของพื้นที่บันทึกการลงทะเบียน 96/160 ไบต์สำหรับพวกเขาเท่านั้น
วัตถุประสงค์เริ่มต้น; ฟิลด์ที่ไม่ได้ใช้ยังคงใช้พื้นที่สแต็ก เมื่อไหร่ -mpacked-กอง is
ระบุ สล็อตบันทึกรีจิสเตอร์ถูกบรรจุอย่างหนาแน่นที่ด้านบนของรีจิสเตอร์บันทึก
พื้นที่; พื้นที่ที่ไม่ได้ใช้จะถูกนำกลับมาใช้ใหม่เพื่อวัตถุประสงค์อื่น ทำให้การใช้ . มีประสิทธิภาพมากขึ้น
พื้นที่กองที่มีอยู่ อย่างไรก็ตาม เมื่อ -mbackchain ก็ยังมีผลอยู่ด้านบนสุด
คำของพื้นที่บันทึกมักใช้เพื่อจัดเก็บแบ็คเชนและที่อยู่ผู้ส่ง
register จะถูกบันทึกสองคำไว้ใต้ backchain เสมอ
ตราบใดที่ไม่ได้ใช้แบ็คเชนสแต็กเฟรม โค้ดที่สร้างด้วย -mpacked-กอง
สามารถโทรเข้ากันได้กับรหัสที่สร้างด้วย -mno-บรรจุสแต็ค. โปรดทราบว่าบางรายการที่ไม่ใช่FSF
การเผยแพร่ GCC 2.95 สำหรับ S/390 หรือ zSeries สร้างโค้ดที่ใช้สแต็กเฟรม
แบ็คเชน ณ รันไทม์ ไม่ใช่แค่เพื่อการดีบักเท่านั้น รหัสดังกล่าวไม่โทร-
เข้ากันได้กับรหัสที่คอมไพล์ด้วย -mpacked-กอง. นอกจากนี้ โปรดทราบว่าการรวมกันของ
-mbackchain, -mpacked-กอง และ -mhard-ลอย ไม่รองรับ เพื่อสร้าง
การใช้เคอร์เนลลินุกซ์ -msoft-ลอย.
ค่าดีฟอลต์คือไม่ใช้โครงร่างสแต็กที่แพ็ก
-msmall-exec
-mno-small-ผู้บริหาร
สร้าง (หรือไม่สร้าง) รหัสโดยใช้คำสั่ง "ยกทรง" เพื่อทำรูทีนย่อย
โทร. สิ่งนี้ทำงานได้อย่างน่าเชื่อถือก็ต่อเมื่อขนาดที่เรียกใช้งานได้ทั้งหมดไม่เกิน 64k
ค่าเริ่มต้นคือใช้คำสั่ง "basr" แทน ซึ่งไม่มีสิ่งนี้
ข้อ จำกัด
- ลบ.ม
- ลบ.ม
เมื่อ - ลบ.ม ถูกระบุ สร้างโค้ดที่สอดคล้องกับ GNU/Linux สำหรับ S/390 ABI เมื่อไหร่
- ลบ.ม ถูกระบุ สร้างโค้ดที่สอดคล้องกับ GNU/Linux สำหรับ zSeries ABI นี้
อนุญาตให้ GCC สร้างคำสั่ง 64 บิตโดยเฉพาะ สำหรับ s390 เป้าหมาย
ค่าเริ่มต้นคือ - ลบ.มในขณะที่ s390x เป้าหมายเริ่มต้นเป็น - ลบ.ม.
-mzarch
-เมซ่า
เมื่อ -mzarch ถูกระบุให้สร้างรหัสโดยใช้คำแนะนำที่มีอยู่ใน
z/สถาปัตยกรรม. เมื่อไหร่ -เมซ่า ระบุให้สร้างรหัสโดยใช้คำแนะนำ
มีอยู่ใน ESA/390 สังเกตว่า -เมซ่า เป็นไปไม่ได้ด้วย - ลบ.ม. เมื่อสร้าง
รหัสที่สอดคล้องกับ GNU/Linux สำหรับ S/390 ABI ค่าเริ่มต้นคือ -เมซ่า. เมื่อสร้าง
โค้ดที่สอดคล้องกับ GNU/Linux สำหรับ zSeries ABI ค่าเริ่มต้นคือ -mzarch.
-mmvcle
-mno-mvcle
สร้าง (หรือไม่สร้าง) รหัสโดยใช้คำสั่ง "mvcle" เพื่อดำเนินการ block
ย้าย เมื่อไหร่ -mno-mvcle ระบุให้ใช้ลูป "mvc" แทน นี่คือค่าเริ่มต้น
เว้นแต่จะปรับให้เหมาะสมสำหรับขนาด
-mdebug
-mno-debug
พิมพ์ (หรือไม่พิมพ์) ข้อมูลเพิ่มเติมเมื่อทำการคอมไพล์ ค่าเริ่มต้นคือ
เพื่อไม่ให้พิมพ์ข้อมูลการดีบัก
-มีนาคม=ประเภทซีพียู
สร้างรหัสที่ทำงานบน ประเภทซีพียูซึ่งเป็นชื่อของระบบที่เป็นตัวแทนของ a
โปรเซสเซอร์บางประเภท ค่าที่เป็นไปได้สำหรับ ประเภทซีพียู เป็น g5, g6, z900, z990, z9-109,
z9-ec, z10, z196และ zEC12. เมื่อสร้างรหัสโดยใช้คำแนะนำที่มีอยู่ใน
z/Architecture ค่าเริ่มต้นคือ -มีนาคม=z900. มิฉะนั้น ค่าเริ่มต้นคือ -มีนาคม=g5.
-mtune=ประเภทซีพียู
ปรับไปที่ ประเภทซีพียู ทุกอย่างที่เกี่ยวข้องกับโค้ดที่สร้างขึ้น ยกเว้น ABI
และชุดคำสั่งที่ใช้ได้ รายการของ ประเภทซีพียู ค่าจะเหมือนกับfor
-มีนาคม. ค่าเริ่มต้นคือค่าที่ใช้สำหรับ -มีนาคม.
-mtpf-ติดตาม
-mno-tpf-ติดตาม
สร้างรหัสที่เพิ่ม (ไม่เพิ่ม) ในสาขาเฉพาะของ TPF OS เพื่อติดตามงานประจำ
ในระบบปฏิบัติการ ตัวเลือกนี้ถูกปิดโดยค่าเริ่มต้น แม้ว่าจะทำการคอมไพล์สำหรับ
ระบบปฏิบัติการทีพีเอฟ
-mfused-mad
-mno-ฟิวส์ madd
สร้างรหัสที่ใช้ (ไม่ใช้) ทศนิยมคูณและสะสม
คำแนะนำ. คำแนะนำเหล่านี้ถูกสร้างขึ้นโดยค่าเริ่มต้นหากจุดลอยตัวของฮาร์ดแวร์
ถูกนำมาใช้.
-mwar-framesize=ขนาดเฟรม
ส่งคำเตือนหากฟังก์ชันปัจจุบันเกินขนาดเฟรมที่กำหนด เพราะนี่คือ
การตรวจสอบเวลาคอมไพล์ไม่จำเป็นต้องเป็นปัญหาจริงเมื่อโปรแกรมทำงาน มัน
มีวัตถุประสงค์เพื่อระบุฟังก์ชันที่อาจทำให้สแต็กโอเวอร์โฟลว์เป็นส่วนใหญ่ มันคือ
มีประโยชน์ที่จะใช้ในสภาพแวดล้อมที่มีขนาดสแต็กจำกัด เช่น เคอร์เนล linux
-mwarn-ไดนามิกสแต็ค
ส่งคำเตือนหากฟังก์ชันเรียกใช้ "alloca" หรือใช้อาร์เรย์ที่มีขนาดแบบไดนามิก นี้
โดยทั่วไปแล้วจะเป็นความคิดที่ไม่ดีด้วยขนาดสแต็กที่จำกัด
-mstack-ยาม=กองการ์ด
-mstack-ขนาด=ขนาดสแต็ก
หากมีตัวเลือกเหล่านี้ แบ็คเอนด์ S/390 จะส่งคำสั่งเพิ่มเติมใน
บทนำของฟังก์ชันที่ทริกเกอร์กับดักหากขนาดสแต็กเป็น กองการ์ด ไบต์เหนือ
ขนาดสแต็ก (โปรดจำไว้ว่าสแตกบน S/390 ลดลง) ถ้า กองการ์ด
ตัวเลือกถูกละเว้นกำลังที่เล็กที่สุดของ 2 ที่ใหญ่กว่าขนาดเฟรมของคอมไพล์
ฟังก์ชั่นถูกเลือก ตัวเลือกเหล่านี้มีวัตถุประสงค์เพื่อใช้เพื่อช่วยดีบัก stack
ปัญหาล้น รหัสที่ปล่อยออกมาเพิ่มเติมทำให้เกิดค่าใช้จ่ายเพียงเล็กน้อยและ
ดังนั้นจึงสามารถใช้ในระบบที่เหมือนการผลิตโดยไม่มีประสิทธิภาพมากขึ้น
การย่อยสลาย ค่าที่กำหนดต้องเป็นค่ายกกำลัง 2 และ ขนาดสแต็ก จะต้องมี
มากกว่า กองการ์ด ไม่เกิน 64k เพื่อให้เกิดประสิทธิภาพในการเสริม
รหัสทำให้สันนิษฐานว่าสแต็กเริ่มต้นที่อยู่ที่สอดคล้องกับค่า
มอบให้โดย ขนาดสแต็ก. กองการ์ด สามารถใช้ option ร่วมกับ . เท่านั้น
ขนาดสแต็ก.
-mhotpatch=ก่อนครึ่งคำ,โพสต์ครึ่งคำ
หากเปิดใช้งานตัวเลือก hotpatch บทนำของฟังก์ชัน "hot-patching" จะถูกสร้างขึ้นสำหรับ
ฟังก์ชั่นทั้งหมดในหน่วยคอมไพล์ ป้ายกำกับฟังก์ชันถูกเติมด้วย
จำนวนคำสั่ง NOP แบบสองไบต์ (ก่อนครึ่งคำสูงสุด 1000000) หลังจาก
ป้าย 2 * โพสต์ครึ่งคำ ไบต์ถูกต่อท้ายโดยใช้ NOP ที่ใหญ่ที่สุดเช่นคำแนะนำ
สถาปัตยกรรมอนุญาต (สูงสุด 1000000)
หากอาร์กิวเมนต์ทั้งสองมีค่าเป็นศูนย์ แสดงว่า hotpatching ถูกปิดใช้งาน
ตัวเลือกนี้สามารถแทนที่ได้สำหรับแต่ละฟังก์ชันด้วยแอตทริบิวต์ "hotpatch"
คะแนน Options
ตัวเลือกเหล่านี้กำหนดไว้สำหรับการใช้งานคะแนน:
-meb
คอมไพล์โค้ดสำหรับโหมด big-endian นี่คือค่าเริ่มต้น
-เมล
คอมไพล์โค้ดสำหรับโหมด little-endian
-mhwloop
ปิดใช้งานการสร้างคำสั่ง "bcnz"
-muls
เปิดใช้งานการสร้างการโหลดที่ไม่ตรงแนวและคำแนะนำในการจัดเก็บ
-เอ็มแมค
เปิดใช้งานการใช้คำสั่งการคูณ ปิดใช้งานโดยค่าเริ่มต้น
-mscore5
ระบุ SCORE5 เป็นสถาปัตยกรรมเป้าหมาย
-mscore5u
ระบุ SCORE5U ของสถาปัตยกรรมเป้าหมาย
-mscore7
ระบุ SCORE7 เป็นสถาปัตยกรรมเป้าหมาย นี่คือค่าเริ่มต้น
-mscore7d
ระบุ SCORE7D เป็นสถาปัตยกรรมเป้าหมาย
SH Options
ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m มีการกำหนดตัวเลือกสำหรับการใช้งาน SH:
- ลบ.ม สร้างรหัสสำหรับ SH1
- ลบ.ม สร้างรหัสสำหรับ SH2
-m2e
สร้างรหัสสำหรับ SH2e
-m2a-nofpu
สร้างรหัสสำหรับ SH2a โดยไม่มี FPU หรือสำหรับ SH2a-FPU ในลักษณะที่
ไม่ใช้หน่วยทศนิยม
-m2a-เดี่ยวเท่านั้น
สร้างรหัสสำหรับ SH2a-FPU ในลักษณะที่ไม่มีทศนิยมสองความแม่นยำ
ใช้การดำเนินการ
-m2a-ซิงเกิล
สร้างรหัสสำหรับ SH2a-FPU โดยถือว่าหน่วยจุดลอยตัวอยู่ในความแม่นยำเดียว
โหมดโดยค่าเริ่มต้น
-m2a
สร้างโค้ดสำหรับ SH2a-FPU โดยถือว่าหน่วยทศนิยมมีความแม่นยำสองเท่า
โหมดโดยค่าเริ่มต้น
- ลบ.ม สร้างรหัสสำหรับ SH3
-m3e
สร้างรหัสสำหรับ SH3e
-m4-โนฟปุ
สร้างรหัสสำหรับ SH4 โดยไม่มีหน่วยทศนิยม
-m4-เดี่ยวเท่านั้น
สร้างรหัสสำหรับ SH4 ด้วยหน่วยทศนิยมที่รองรับเฉพาะจุดเดียว
เลขคณิตที่แม่นยำ
-m4-เดี่ยว
สร้างรหัสสำหรับ SH4 โดยถือว่าหน่วยทศนิยมอยู่ในโหมดความแม่นยำเดียว
โดยค่าเริ่มต้น
- ลบ.ม สร้างรหัสสำหรับ SH4
-m4-100
สร้างรหัสสำหรับ SH4-100
-m4-100-โนฟปุ
สร้างรหัสสำหรับ SH4-100 ในลักษณะที่ไม่ใช้หน่วยทศนิยม
-m4-100-เดี่ยว
สร้างรหัสสำหรับ SH4-100 โดยถือว่าหน่วยทศนิยมอยู่ในโหมดความแม่นยำเดียว
โดยค่าเริ่มต้น
-m4-100-เดี่ยวเท่านั้น
สร้างรหัสสำหรับ SH4-100 ในลักษณะที่ไม่มีทศนิยมสองความแม่นยำ
ใช้การดำเนินการ
-m4-200
สร้างรหัสสำหรับ SH4-200
-m4-200-โนฟปุ
สร้างรหัสสำหรับ SH4-200 โดยไม่ทำให้หน่วยทศนิยมไม่ใช่
มือสอง
-m4-200-เดี่ยว
สร้างรหัสสำหรับ SH4-200 โดยถือว่าหน่วยทศนิยมอยู่ในโหมดความแม่นยำเดียว
โดยค่าเริ่มต้น
-m4-200-เดี่ยวเท่านั้น
สร้างรหัสสำหรับ SH4-200 ในลักษณะที่ไม่มีทศนิยมสองความแม่นยำ
ใช้การดำเนินการ
-m4-300
สร้างรหัสสำหรับ SH4-300
-m4-300-โนฟปุ
สร้างรหัสสำหรับ 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 ให้กับผู้ประกอบ GCC
ไม่ได้สร้างคำสั่ง DSP ใดๆ ในขณะนี้
-m5-32สื่อ
สร้างรหัส 32 บิตสำหรับ SHmedia
-m5-32media-nofpu
สร้างรหัส 32 บิตสำหรับ SHmedia ในลักษณะที่หน่วยทศนิยมไม่ใช่
มือสอง
-m5-64สื่อ
สร้างรหัส 64 บิตสำหรับ SHmedia
-m5-64media-nofpu
สร้างรหัส 64 บิตสำหรับ SHmedia ในลักษณะที่หน่วยทศนิยมไม่ใช่
มือสอง
-m5-กะทัดรัด
สร้างรหัสสำหรับ SHcompact
-m5-compact-nofpu
สร้างรหัสสำหรับ SHcompact ในลักษณะที่ไม่ใช้หน่วยทศนิยม
-mb คอมไพล์โค้ดสำหรับโปรเซสเซอร์ในโหมด big-endian
-มล คอมไพล์โค้ดสำหรับโปรเซสเซอร์ในโหมด little-endian
-mdalign
จัดแนวสองเท่าที่ขอบเขต 64 บิต โปรดทราบว่าสิ่งนี้จะเปลี่ยนรูปแบบการเรียก
และทำให้ฟังก์ชันบางอย่างจากไลบรารี C มาตรฐานไม่ทำงาน เว้นแต่คุณจะคอมไพล์ใหม่
มันก่อนด้วย -mdalign.
-mrelax
ย่อที่อยู่บางส่วนในเวลาลิงค์ ถ้าเป็นไปได้; ใช้ตัวเลือกลิงเกอร์
-ผ่อนคลาย.
-เคลื่อนย้ายได้
ใช้ออฟเซ็ต 32 บิตในตาราง "สวิตช์" ค่าเริ่มต้นคือการใช้ออฟเซ็ต 16 บิต
-เอ็มบิท็อป
เปิดใช้งานการใช้คำสั่งการจัดการบิตบน SH2A
-mfmovd
เปิดใช้งานการใช้คำสั่ง "fmovd" ตรวจสอบ -mdalign สำหรับข้อจำกัดในการจัดตำแหน่ง
-mrenesas
ปฏิบัติตามอนุสัญญาการเรียกที่กำหนดโดย Renesas
-mno-เรเนซาส
ปฏิบัติตามอนุสัญญาการเรียกที่กำหนดไว้สำหรับ GCC ก่อนอนุสัญญาเรเนซาส
สามารถใช้ได้ ตัวเลือกนี้เป็นค่าเริ่มต้นสำหรับเป้าหมายทั้งหมดของ SH toolchain
-mnomacsave
ทำเครื่องหมายการลงทะเบียน "MAC" ว่าเป็นการโทรปิดแม้ว่า -mrenesas ได้รับ
-มี่
-mno-ieee
ควบคุมการปฏิบัติตามมาตรฐาน IEEE ของการเปรียบเทียบจุดทศนิยม ซึ่งส่งผลต่อการจัดการ
กรณีที่ผลการเปรียบเทียบไม่เรียงลำดับ โดยค่าเริ่มต้น -มี่ is
เปิดใช้งานโดยปริยาย ถ้า -ffinite-คณิตศาสตร์เท่านั้น เปิดใช้งาน -mno-ieee ถูกกำหนดโดยปริยาย
ซึ่งส่งผลให้มีการเปรียบเทียบจุดลอยตัวที่เท่ากันมากกว่าและเท่ากันน้อยกว่า NS
การตั้งค่าโดยนัยสามารถแทนที่ได้โดยการระบุอย่างใดอย่างหนึ่ง -มี่ or -mno-ieee.
-minline-ic_invalidate
รหัสอินไลน์เพื่อทำให้รายการแคชคำสั่งใช้ไม่ได้หลังจากตั้งค่าฟังก์ชันที่ซ้อนกัน
แทรมโพลีน ตัวเลือกนี้ไม่มีผลถ้า -musermode มีผลบังคับและเลือก
ตัวเลือกการสร้างรหัส (เช่น - ลบ.ม) ไม่อนุญาตให้ใช้คำสั่ง "icbi"
หากตัวเลือกการสร้างรหัสที่เลือกไม่อนุญาตให้ใช้ "icbi"
คำสั่งสอนและ -musermode ไม่มีผล โค้ดแบบอินไลน์จะจัดการกับ
อาร์เรย์ที่อยู่แคชคำสั่งโดยตรงกับการเขียนที่เชื่อมโยง นี้ไม่เพียงเท่านั้น
ต้องใช้โหมดที่มีสิทธิพิเศษในขณะใช้งาน แต่ก็ล้มเหลวเช่นกันหากสายแคชเป็น
แมปผ่าน TLB และไม่มีการแมป
-ผิดขนาด
ขนาดและตำแหน่งของคำสั่งดัมพ์ในรหัสแอสเซมบลี
-mpadstruct
ตัวเลือกนี้เลิกใช้แล้ว มันเสริมโครงสร้างให้หลาย 4 ไบต์ซึ่งก็คือ
เข้ากันไม่ได้กับ SH ABI
-แบบจำลองทางคณิตศาสตร์=แบบ
ตั้งค่าแบบจำลองของการดำเนินการของอะตอมและพารามิเตอร์เพิ่มเติมโดยคั่นด้วยเครื่องหมายจุลภาค
รายการ. สำหรับรายละเอียดเกี่ยวกับฟังก์ชันในตัวของอะตอม โปรดดูที่ __อะตอม บิลท์อิน.
รองรับรุ่นและพารามิเตอร์ต่อไปนี้:
ไม่มี
ปิดใช้งานคอมไพเลอร์ที่สร้างลำดับอะตอมและปล่อยการเรียกไลบรารีสำหรับ atomic
การดำเนินงาน นี่เป็นค่าเริ่มต้นหากเป้าหมายไม่ใช่ "sh*-*-linux*"
ซอฟต์-กูซ่า
สร้างลำดับอะตอมของซอฟต์แวร์ gUSA ที่เข้ากันได้กับ GNU/Linux สำหรับอะตอมที่สร้างขึ้น
ในฟังก์ชัน ลำดับอะตอมที่สร้างขึ้นต้องการการสนับสนุนเพิ่มเติมจาก
รหัสการจัดการการขัดจังหวะ/ข้อยกเว้นของระบบ และเหมาะสำหรับ SH3* และ . เท่านั้น
SH4* ระบบแกนเดียว ตัวเลือกนี้เปิดใช้งานโดยค่าเริ่มต้นเมื่อเป้าหมายคือ
"sh*-*-linux*" และ SH3* หรือ SH4* เมื่อเป้าหมายคือ SH4A ตัวเลือกนี้จะเช่นกัน
ใช้คำสั่งอะตอมมิกของฮาร์ดแวร์บางส่วน "movli.l" และ "movco.l" ถึง
สร้างโค้ดที่มีประสิทธิภาพมากขึ้น เว้นแต่ เข้มงวด ระบุไว้
ซอฟท์-TCB
สร้างซอฟต์แวร์ลำดับอะตอมที่ใช้ตัวแปรในการควบคุมเธรด
บล็อก. นี่คือรูปแบบหนึ่งของลำดับ gUSA ซึ่งสามารถใช้ได้กับ SH1*
และเป้าหมาย SH2* ลำดับอะตอมที่สร้างขึ้นต้องการการสนับสนุนเพิ่มเติมจาก
รหัสการจัดการการขัดจังหวะ/ข้อยกเว้นของระบบและเหมาะสำหรับ .เท่านั้น
ระบบแกนเดียว เมื่อใช้โมเดลนี้ gbr-ชดเชย= พารามิเตอร์จะต้องเป็น
ระบุไว้ด้วย
ซอฟท์-imask
สร้างซอฟต์แวร์ลำดับอะตอมที่ปิดใช้งานการขัดจังหวะชั่วคราวโดยการตั้งค่า
"SR.IMASK = 1111" โมเดลนี้ใช้งานได้เฉพาะเมื่อโปรแกรมทำงานในโหมดพิเศษ
และเหมาะสำหรับระบบแกนเดียวเท่านั้น การสนับสนุนเพิ่มเติมจาก
ไม่จำเป็นต้องใช้รหัสจัดการการขัดจังหวะ/ข้อยกเว้นของระบบ รุ่นนี้
เปิดใช้งานโดยค่าเริ่มต้นเมื่อเป้าหมายคือ "sh*-*-linux*" และ SH1* หรือ SH2*
ฮาร์ด llcs
สร้างลำดับอะตอมของฮาร์ดแวร์โดยใช้คำแนะนำ "movli.l" และ "movco.l"
เท่านั้น. มีเฉพาะใน SH4A และเหมาะสำหรับระบบมัลติคอร์
เนื่องจากคำสั่งฮาร์ดแวร์รองรับเฉพาะตัวแปรอะตอมมิก 32 บิตที่เข้าถึง 8
หรือตัวแปร 16 บิตถูกจำลองด้วยการเข้าถึงแบบ 32 บิต โค้ดที่คอมไพล์ด้วยสิ่งนี้
ตัวเลือกจะเข้ากันได้กับซอฟต์แวร์อะตอมมิกรุ่นอื่น ๆ ด้วย
ระบบจัดการการขัดจังหวะ/ข้อยกเว้นหากดำเนินการบนระบบ SH4A เพิ่มเติม
ไม่จำเป็นต้องรองรับโค้ดจัดการอินเตอร์รัปต์/ข้อยกเว้นของระบบ
สำหรับรุ่นนี้
gbr-ชดเชย=
พารามิเตอร์นี้ระบุออฟเซ็ตเป็นไบต์ของตัวแปรในการควบคุมเธรด
โครงสร้างบล็อกที่ควรใช้โดยลำดับอะตอมที่สร้างขึ้นเมื่อ
ซอฟท์-TCB เลือกรุ่นแล้ว สำหรับรุ่นอื่นๆ พารามิเตอร์นี้จะถูกละเว้น
ค่าที่ระบุต้องเป็นจำนวนเต็มคูณของสี่และอยู่ในช่วง 0-1020
เข้มงวด
พารามิเตอร์นี้ป้องกันการใช้แบบจำลองอะตอมหลายตัวแบบผสมกัน แม้ว่าจะ
จะเข้ากันได้และจะทำให้คอมไพเลอร์สร้างลำดับอะตอมของ
เฉพาะรุ่นที่กำหนดเท่านั้น
-mtas
สร้าง opcode "tas.b" สำหรับ "__atomic_test_and_set" สังเกตว่าขึ้นอยู่กับ
การกำหนดค่าฮาร์ดแวร์และซอฟต์แวร์เฉพาะซึ่งอาจทำให้ประสิทธิภาพโดยรวมลดลง
เนื่องจากบรรทัดแคชตัวถูกดำเนินการฟลัชซึ่งบอกเป็นนัยโดยคำสั่ง "tas.b" บน
โปรเซสเซอร์ SH4A แบบมัลติคอร์ต้องใช้คำสั่ง "tas.b" ด้วยความระมัดระวังเนื่องจาก
อาจส่งผลให้ข้อมูลเสียหายสำหรับการกำหนดค่าแคชบางอย่าง
-mprefergot
เมื่อสร้างโค้ดที่ไม่ขึ้นกับตำแหน่ง ให้ปล่อยการเรียกฟังก์ชันโดยใช้ Global Offset
ตารางแทนตารางการเชื่อมโยงขั้นตอน
-musermode
-mno-โหมดผู้ใช้
ไม่อนุญาต (อนุญาต) คอมไพเลอร์สร้างรหัสโหมดพิเศษ ระบุ
-musermode ยังหมายความถึง -mno-อินไลน์-ic_invalidate ถ้าโค้ดอินไลน์ใช้ไม่ได้
ในโหมดผู้ใช้ -musermode เป็นค่าเริ่มต้นเมื่อเป้าหมายคือ "sh*-*-linux*" ถ้า
เป้าหมายคือ SH1* หรือ SH2* -musermode ไม่มีผล เนื่องจากไม่มีโหมดผู้ใช้
-ราคาหลายทุน=จำนวน
กำหนดต้นทุนที่จะสมมติสำหรับการคูณ
-mdiv=กลยุทธ์
กำหนดกลยุทธ์การหารที่จะใช้สำหรับการดำเนินการหารจำนวนเต็ม สำหรับ SHmedia
กลยุทธ์ สามารถเป็นหนึ่งใน:
fp ดำเนินการในจุดลอยตัว สิ่งนี้มีเวลาแฝงที่สูงมาก แต่จำเป็น
เพียงไม่กี่คำแนะนำ ดังนั้นอาจเป็นทางเลือกที่ดีหากโค้ดของคุณมีเพียงพอ
ILP ที่ใช้ประโยชน์ได้ง่ายเพื่อให้คอมไพเลอร์กำหนดเวลาทศนิยม
คำแนะนำพร้อมกับคำแนะนำอื่น ๆ หารด้วยศูนย์ทำให้เกิด a
ข้อยกเว้นทศนิยม
INV ใช้การดำเนินการจำนวนเต็มเพื่อคำนวณค่าผกผันของตัวหาร จากนั้น
คูณเงินปันผลด้วยค่าผกผัน กลยุทธ์นี้ช่วยให้ CSE และรอก
ของการคำนวณผกผัน หารด้วยศูนย์คำนวณผลลัพธ์ที่ไม่ระบุ
แต่ไม่ดัก
inv:มินแลต
ตัวแปรของ INV ที่ไหน หากไม่พบ CSE หรือโอกาสในการชักรอก หรือถ้า
การดำเนินการทั้งหมดถูกยกขึ้นที่เดียวกัน ขั้นตอนสุดท้ายของ
การคำนวณผกผันจะพันกับการคูณสุดท้ายเพื่อลดผลรวม
เวลาในการตอบสนองโดยเสียค่าใช้จ่ายในการใช้คำแนะนำเพิ่มเติมเล็กน้อยและส่งผลให้
การจัดกำหนดการโอกาสด้วยรหัสอื่น
โทรศัพท์
เรียกใช้ฟังก์ชันไลบรารีที่มักจะใช้ inv:มินแลต กลยุทธ์. นี้
ให้ความหนาแน่นของโค้ดสูงสำหรับการคอมไพล์ "m5-*media-nofpu"
call2
ใช้จุดเข้าใช้งานอื่นของฟังก์ชันไลบรารีเดียวกัน โดยจะถือว่า a
ได้ตั้งค่าตัวชี้ไปยังตารางค้นหาแล้ว ซึ่งแสดงการโหลดตัวชี้
สู่ CSE และการเพิ่มประสิทธิภาพการยกโค้ด
inv:โทร
เชิญ:call2
เชิญ:fp
ใช้ INV อัลกอริธึมสำหรับการสร้างโค้ดเริ่มต้น แต่ถ้าโค้ดยังคงอยู่
unoptimized, ย้อนกลับไปยัง โทรศัพท์, call2,หรือ fp กลยุทธ์ ตามลำดับ สังเกตว่า
ผลข้างเคียงที่อาจเกิดขึ้นจากการหารด้วยศูนย์จะดำเนินการโดยแยก
คำสั่งจึงเป็นไปได้ที่คำสั่งจำนวนเต็มทั้งหมดจะถูกยกออกมา
แต่เครื่องหมายสำหรับผลข้างเคียงยังคงอยู่ที่เดิม การรวมตัวกันอีกครั้งเพื่อ
การดำเนินการจุดลอยตัวหรือการโทรไม่สามารถทำได้ในกรณีนั้น
inv20u
inv20l
ตัวแปรของ inv:มินแลต กลยุทธ์. ในกรณีที่การคำนวณผกผันคือ
ไม่แยกจากคูณก็เร่งหารตรงที่เงินปันผลเข้า
เป็น 20 บิต (เครื่องหมายบวกถ้ามี) โดยแทรกการทดสอบเพื่อข้ามจำนวน
การดำเนินการในกรณีนี้ การทดสอบนี้ทำให้การจ่ายเงินปันผลเพิ่มขึ้นช้าลง
inv20u ถือว่ากรณีของเงินปันผลเล็กน้อยดังกล่าวไม่น่าจะเป็นไปได้และ inv20l
ถือว่ามีความเป็นไปได้
สำหรับเป้าหมายอื่นที่ไม่ใช่ SHmedia กลยุทธ์ สามารถเป็นหนึ่งใน:
โทร-div1
เรียกใช้ฟังก์ชันไลบรารีที่ใช้คำสั่งการแบ่งขั้นตอนเดียว "div1" to
ดำเนินการ หารด้วยศูนย์จะคำนวณผลลัพธ์ที่ไม่ระบุและทำ
ไม่ใช่กับดัก นี่เป็นค่าเริ่มต้นยกเว้น SH4, SH2A และ SHcompact
โทร-fp
เรียกฟังก์ชันไลบรารีที่ดำเนินการใน double precision floating
จุด. การหารด้วยศูนย์ทำให้เกิดข้อยกเว้นทศนิยม นี่คือค่าเริ่มต้น
สำหรับ SHcompact พร้อม FPU ระบุสิ่งนี้สำหรับเป้าหมายที่ไม่มีคู่
FPU ที่แม่นยำจะมีค่าเริ่มต้นเป็น "call-div1"
โทรโต๊ะ
เรียกใช้ฟังก์ชันไลบรารีที่ใช้ตารางค้นหาตัวหารขนาดเล็กและ
คำสั่ง "div1" พร้อมตัวพิมพ์เล็กและตัวพิมพ์ใหญ่สำหรับตัวหารที่ใหญ่กว่า การหารด้วยศูนย์
คำนวณผลลัพธ์ที่ไม่ระบุและไม่ดักจับ นี่เป็นค่าเริ่มต้นสำหรับ SH4
การระบุสิ่งนี้สำหรับเป้าหมายที่ไม่มีคำสั่งกะไดนามิกจะ
ค่าเริ่มต้นเป็น "call-div1"
เมื่อไม่ได้ระบุกลยุทธ์การแบ่ง กลยุทธ์เริ่มต้นจะถูกเลือก
ตามเป้าหมายปัจจุบัน สำหรับ SH2A กลยุทธ์เริ่มต้นคือการใช้ "divs" และ
คำแนะนำ "divu" แทนการเรียกใช้ฟังก์ชันไลบรารี
-สะสม-ออก-args
สำรองพื้นที่หนึ่งครั้งสำหรับอาร์กิวเมนต์ขาออกในบทนำของฟังก์ชันมากกว่ารอบ
แต่ละสาย ประโยชน์โดยทั่วไปสำหรับประสิทธิภาพและขนาด ยังจำเป็นสำหรับการคลี่คลาย
เพื่อหลีกเลี่ยงการเปลี่ยนเฟรมสแต็กรอบโค้ดแบบมีเงื่อนไข
-mdivsi3_libfunc=ชื่อ
ตั้งชื่อฟังก์ชันไลบรารีที่ใช้สำหรับการแบ่งแบบ 32 บิตเป็น ชื่อ. นี้
มีผลกับชื่อที่ใช้ใน .เท่านั้น โทรศัพท์ และ inv:โทร กลยุทธ์การแบ่งและ
คอมไพเลอร์ยังคงคาดหวังชุดของการลงทะเบียนอินพุต/เอาต์พุต/ปิดล้อมเหมือนกับสิ่งนี้
ไม่มีตัวเลือก
-mfixed-ช่วง=ช่วงการลงทะเบียน
สร้างรหัสที่รักษาช่วงการลงทะเบียนที่กำหนดเป็นการลงทะเบียนคงที่ ทะเบียนคงที่
เป็นสิ่งที่ผู้จัดสรรการลงทะเบียนไม่สามารถใช้ได้ สิ่งนี้มีประโยชน์เมื่อรวบรวมเคอร์เนล
รหัส. ช่วงการลงทะเบียนถูกระบุเป็นสองรีจิสเตอร์คั่นด้วยเส้นประ หลายรายการ
สามารถระบุช่วงการลงทะเบียนโดยคั่นด้วยเครื่องหมายจุลภาค
-mindexed-ที่อยู่
เปิดใช้งานการใช้โหมดการกำหนดที่อยู่ที่ทำดัชนีสำหรับ SHmedia32/SHcompact นี้เท่านั้น
ปลอดภัยหากฮาร์ดแวร์และ/หรือระบบปฏิบัติการใช้ความหมายแบบวนรอบ 32 บิตสำหรับการจัดทำดัชนี
โหมดที่อยู่ สถาปัตยกรรมอนุญาตให้ใช้โปรเซสเซอร์ที่มี 64 บิต
MMU ซึ่งระบบปฏิบัติการสามารถใช้เพื่อรับที่อยู่แบบ 32 บิต แต่เนื่องจากไม่มีฮาร์ดแวร์ปัจจุบัน
การใช้งานรองรับสิ่งนี้หรือวิธีอื่นใดในการทำให้โหมดการกำหนดที่อยู่ทำดัชนีปลอดภัย
เพื่อใช้ใน ABI แบบ 32 บิต ค่าเริ่มต้นคือ -mno-ดัชนี-ที่อยู่.
-mgetrcost=จำนวน
กำหนดต้นทุนที่ใช้สำหรับคำสั่ง "gettr" เป็น จำนวน. ค่าเริ่มต้นคือ 2 if
-mpt-คงที่ มีผลบังคับใช้ 100 มิฉะนั้น
-mpt-คงที่
สมมติว่าคำสั่ง "pt*" จะไม่ดักฟัง โดยทั่วไปสิ่งนี้จะสร้างรหัสที่มีกำหนดเวลาดีกว่า
แต่ไม่ปลอดภัยกับฮาร์ดแวร์ปัจจุบัน นิยามสถาปัตยกรรมปัจจุบันกล่าวว่า
"ptabs" และ "ptrel" กับดักเมื่อเป้าหมายและ 3 คือ 3 สิ่งนี้มี
ผลที่ไม่ได้ตั้งใจของการทำให้ไม่ปลอดภัยในการกำหนดเวลาคำแนะนำเหล่านี้ก่อนa
สาขาหรือยกออกจากวง ตัวอย่างเช่น "__do_global_ctors" ซึ่งเป็นส่วนหนึ่งของ
libgcc ที่รันคอนสตรัคเตอร์เมื่อเริ่มต้นโปรแกรมเรียกฟังก์ชันในรายการซึ่งก็คือ
คั่นด้วย -1 กับ -mpt-คงที่ ตัวเลือก "ptabs" เสร็จสิ้นก่อนการทดสอบ
ต่อ -1 นั่นหมายความว่า Constructor ทั้งหมดทำงานเร็วขึ้นเล็กน้อย แต่เมื่อ
วนซ้ำมาถึงจุดสิ้นสุดของรายการ โปรแกรมขัดข้องเนื่องจาก "ptabs" โหลด -1 ลงใน a
ลงทะเบียนเป้าหมาย
เนื่องจากตัวเลือกนี้ไม่ปลอดภัยสำหรับฮาร์ดแวร์ใดๆ ที่ใช้สถาปัตยกรรมปัจจุบัน
ข้อกำหนด ค่าเริ่มต้นคือ -mno-pt-คงที่. เว้นแต่ระบุไว้อย่างชัดเจนด้วย
-mgettrค่าใช้จ่าย, -mno-pt-คงที่ ยังหมายความถึง -mggetrราคา=100; สิ่งนี้ขัดขวางการลงทะเบียน
การจัดสรรจากการใช้รีจิสเตอร์เป้าหมายสำหรับการจัดเก็บจำนวนเต็มธรรมดา
-minvalid-สัญลักษณ์
สมมติว่าสัญลักษณ์อาจไม่ถูกต้อง สัญลักษณ์ฟังก์ชันสามัญที่สร้างโดยคอมไพเลอร์
ถูกต้องเสมอที่จะโหลดด้วย "movi"/"shori"/"ptabs" หรือ "movi"/"shori"/"ptrel" แต่
ด้วยลูกเล่นของแอสเซมเบลอร์และ/หรือตัวเชื่อมโยง เป็นไปได้ที่จะสร้างสัญลักษณ์ที่ก่อให้เกิด
"ptabs" หรือ "ptrel" เพื่อดักจับ ตัวเลือกนี้มีความหมายก็ต่อเมื่อ -mno-pt-คงที่ ที่อยู่ใน
ผล. มันป้องกัน cross-basic-block CSE, hoisting และการกำหนดสัญลักษณ์ส่วนใหญ่
โหลด ค่าเริ่มต้นคือ -mno-ไม่ถูกต้อง-สัญลักษณ์.
-mbranch-ต้นทุน=NUM
การสมมติ NUM เพื่อเป็นค่าใช้จ่ายในการสอนสาขา ตัวเลขที่สูงขึ้นทำให้คอมไพเลอร์
พยายามสร้างรหัสที่ไม่มีสาขามากขึ้นถ้าเป็นไปได้ หากไม่ระบุค่า is
เลือกขึ้นอยู่กับประเภทของโปรเซสเซอร์ที่กำลังคอมไพล์
-mzdcสาขา
-mno-zdcbranch
สมมติ (อย่าสมมติ) ว่าคำสั่งสาขาเงื่อนไขการกระจัดเป็นศูนย์ "bt" และ
"bf" นั้นเร็ว ถ้า -mzdcสาขา ถูกระบุคอมไพเลอร์จะพยายามเลือกศูนย์
ลำดับรหัสสาขาการกระจัด สิ่งนี้ถูกเปิดใช้งานโดยค่าเริ่มต้นเมื่อสร้างรหัส
สำหรับ SH4 และ SH4A ปิดการใช้งานอย่างชัดเจนโดยระบุ -mno-zdcbranch.
-mcbranchdi
เปิดใช้งานรูปแบบคำสั่ง "cbranchdi4"
-mcpeqdi
ปล่อยรูปแบบคำสั่ง "cmpeqdi_t" แม้ว่า -mcbranchdi มีผลบังคับใช้
-mfused-mad
-mno-ฟิวส์ madd
สร้างรหัสที่ใช้ (ไม่ใช้) ทศนิยมคูณและสะสม
คำแนะนำ. คำแนะนำเหล่านี้ถูกสร้างขึ้นโดยค่าเริ่มต้นหากจุดลอยตัวของฮาร์ดแวร์
ถูกนำมาใช้. ขึ้นอยู่กับเครื่อง -mfused-mad ตอนนี้ตัวเลือกถูกแมปกับเครื่องแล้ว-
อิสระ -ffp-สัญญา = รวดเร็ว ตัวเลือกและ -mno-ฟิวส์ madd ถูกแมปไปยัง
-ffp-สัญญา = ปิด.
-mfsca
-mno-fsca
อนุญาตหรือไม่อนุญาตให้คอมไพเลอร์ปล่อยคำสั่ง "fsca" สำหรับไซน์และโคไซน์
การประมาณ ต้องใช้ตัวเลือก "-mfsca" ร่วมกับ
"-funsafe-math-optimizations". มันถูกเปิดใช้งานโดยค่าเริ่มต้นเมื่อสร้างรหัสสำหรับ
เอสเอช4เอ การใช้ "-mno-fsca" จะปิดการประมาณไซน์และโคไซน์แม้ว่า
"-funsafe-math-optimizations" มีผลบังคับใช้
-mfsrra
-mno-fsrra
อนุญาตหรือไม่อนุญาตให้คอมไพเลอร์ปล่อยคำสั่ง "fsrra" สำหรับ reciprocal square
การประมาณราก ต้องใช้ตัวเลือก "-mfsrra" ร่วมกับ
"-funsafe-math-optimizations" และ "-ffinite-math-only" มันถูกเปิดใช้งานโดยค่าเริ่มต้นเมื่อ
กำลังสร้างรหัสสำหรับ SH4A การใช้ "-mno-fsrra" จะเป็นการปิดการใช้งานสแควร์รูทซึ่งกันและกัน
การประมาณการแม้ว่าจะอยู่ใน "-funsafe-math-optimizations" และ "-ffinite-math-only"
ผล
-mppretend-cmove
ต้องการกิ่งแบบมีเงื่อนไขแบบ zero-displacement สำหรับคำสั่งการย้ายแบบมีเงื่อนไข
รูปแบบ ซึ่งอาจส่งผลให้โค้ดบนโปรเซสเซอร์ SH4 เร็วขึ้น
Solaris 2 Options
ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m ตัวเลือกได้รับการสนับสนุนใน Solaris 2:
-mimpure-ข้อความ
-mimpure-ข้อความใช้นอกเหนือจาก - แบ่งปัน, บอกคอมไพเลอร์ไม่ให้ผ่าน -z ข้อความ ไปยัง
ตัวเชื่อมโยงเมื่อเชื่อมโยงวัตถุที่ใช้ร่วมกัน โดยใช้ตัวเลือกนี้ คุณสามารถเชื่อมโยงตำแหน่ง-
รหัสขึ้นอยู่กับวัตถุที่ใช้ร่วมกัน
-mimpure-ข้อความ ระงับ "การย้ายถิ่นฐานยังคงต่อต้านการจัดสรร แต่ไม่สามารถเขียนได้
ส่วน" ข้อความแสดงข้อผิดพลาดของตัวเชื่อมโยง อย่างไรก็ตาม การย้ายตำแหน่งที่จำเป็นจะทริกเกอร์การคัดลอกบน
เขียน และอ็อบเจ็กต์ที่ใช้ร่วมกันจะไม่ถูกแชร์ระหว่างกระบวนการจริง ๆ แทน
การใช้ -mimpure-ข้อความคุณควรรวบรวมซอร์สโค้ดทั้งหมดด้วย -fpic or -fPIC.
สวิตช์เหล่านี้ได้รับการสนับสนุนเพิ่มเติมจากด้านบนใน Solaris 2:
-pthreads
เพิ่มการรองรับมัลติเธรดโดยใช้ไลบรารีเธรด POSIX ตัวเลือกนี้ตั้งค่า
แฟล็กสำหรับทั้งตัวประมวลผลล่วงหน้าและตัวเชื่อมโยง ตัวเลือกนี้ไม่มีผลกับเธรด
ความปลอดภัยของรหัสอ็อบเจ็กต์ที่สร้างโดยคอมไพเลอร์หรือของไลบรารีที่มาพร้อมกับมัน
-pthread
นี่คือคำพ้องความหมายสำหรับ -pthreads.
SPARC Options
ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m ตัวเลือกได้รับการสนับสนุนบน SPARC:
-mno-แอป-regs
-mapp-regs
ระบุ -mapp-regs เพื่อสร้างเอาต์พุตโดยใช้การลงทะเบียนทั่วโลก 2 ถึง 4 ซึ่ง
SPARC SVR4 ABI สงวนไว้สำหรับการใช้งาน เช่นเดียวกับ global register 1 แต่ละ global
การลงทะเบียน 2 ถึง 4 จะถือว่าเป็นการลงทะเบียนที่จัดสรรได้ซึ่งถูกปิดล้อมโดย
เรียกใช้ฟังก์ชัน นี่คือค่าเริ่มต้น
เพื่อให้เป็นไปตามข้อกำหนด SVR4 ABI อย่างสมบูรณ์โดยสูญเสียประสิทธิภาพการทำงานบางส่วน ให้ระบุ
-mno-แอป-regs. คุณควรรวบรวมไลบรารีและซอฟต์แวร์ระบบด้วยตัวเลือกนี้
-แฟลต
-mno-แบน
ด้วยระบบเส้นทาง -แฟลต, คอมไพเลอร์ไม่สร้างคำสั่งบันทึก/กู้คืน และใช้ a
"แบน" หรือรุ่นหน้าต่างลงทะเบียนเดียว รุ่นนี้ใส่ได้กับรุ่นธรรมดา
ลงทะเบียนรุ่นหน้าต่าง รีจิสเตอร์ท้องถิ่นและอินพุตรีจิสเตอร์ (0--5) ยังคงอยู่
ถือเป็นการลงทะเบียน "บันทึกการโทร" และบันทึกไว้ในสแต็กตามต้องการ
ด้วยระบบเส้นทาง -mno-แบน (ค่าเริ่มต้น) คอมไพเลอร์จะสร้างคำสั่งบันทึก/กู้คืน (ยกเว้น
สำหรับการทำงานของใบ) นี่เป็นโหมดการทำงานปกติ
-mfpu
-mhard-ลอย
สร้างเอาต์พุตที่มีคำสั่งทศนิยม นี่คือค่าเริ่มต้น
-mno-fpu
-msoft-ลอย
สร้างเอาต์พุตที่มีการเรียกไลบรารีสำหรับจุดลอยตัว คำเตือน: ความจำเป็น
ไลบรารีไม่พร้อมใช้งานสำหรับเป้าหมาย SPARC ทั้งหมด โดยปกติสิ่งอำนวยความสะดวกของ
ใช้คอมไพเลอร์ C ปกติของเครื่อง แต่ไม่สามารถทำได้โดยตรงในการข้าม
การรวบรวม คุณต้องจัดเตรียมห้องสมุดที่เหมาะสมด้วยตนเอง
ฟังก์ชันสำหรับการคอมไพล์ข้าม เป้าหมายที่ฝังตัว sparc-*-ออก และ สปาร์คไลท์-*-*
ให้การสนับสนุนซอฟต์แวร์จุดลอยตัว
-msoft-ลอย เปลี่ยนรูปแบบการเรียกในไฟล์เอาต์พุต ดังนั้นจึงเป็นเพียง
มีประโยชน์ถ้าคุณคอมไพล์ ทั้งหมด ของโปรแกรมที่มีตัวเลือกนี้ โดยเฉพาะอย่างยิ่ง คุณต้อง
รวบรวม libgcc.a, ห้องสมุดที่มาพร้อมกับ GCC, กับ -msoft-ลอย เพื่อสิ่งนี้
ในการทำงาน
-mhard-quad-ลอย
สร้างผลลัพธ์ที่มีคำสั่งทศนิยมแบบ quad-word (ยาวสองเท่า)
-msoft-quad-ลอย
สร้างเอาต์พุตที่มีการเรียกไลบรารี่สำหรับ quad-word (ยาวสองเท่า) ทศนิยม
คำแนะนำ. ฟังก์ชันที่เรียกใช้คือฟังก์ชันที่ระบุใน SPARC ABI นี้เป็น
ค่าเริ่มต้น.
ในขณะที่เขียนนี้ ไม่มีการใช้งาน SPARC ที่รองรับฮาร์ดแวร์สำหรับ
คำสั่งทศนิยมสี่คำ พวกเขาทั้งหมดเรียกตัวจัดการกับดักสำหรับหนึ่งใน
คำแนะนำเหล่านี้ จากนั้นตัวจัดการกับดักจะจำลองผลของคำสั่ง
เนื่องจากค่าโสหุ้ยของตัวจัดการกับดักจึงช้ากว่าการเรียกไลบรารี ABI มาก
กิจวัตร ดังนั้น -msoft-quad-ลอย ตัวเลือกเป็นค่าเริ่มต้น
-mno-unaligned-double
-Munaligned-คู่
สมมติว่า doubles มีการจัดตำแหน่ง 8 ไบต์ นี่คือค่าเริ่มต้น
ด้วยระบบเส้นทาง -Munaligned-คู่, GCC ถือว่า doubles มีการจัดตำแหน่ง 8 ไบต์ก็ต่อเมื่อพวกมัน
อยู่ในประเภทอื่นหรือหากมีที่อยู่ที่แน่นอน มิฉะนั้นมัน
ถือว่ามีการจัดตำแหน่ง 4 ไบต์ การระบุตัวเลือกนี้จะหลีกเลี่ยงบางสิ่งที่หายาก
ปัญหาความเข้ากันได้กับโค้ดที่สร้างโดยคอมไพเลอร์อื่น ไม่ใช่ค่าเริ่มต้น
เพราะมันส่งผลให้ประสิทธิภาพลดลง โดยเฉพาะอย่างยิ่งสำหรับโค้ดจุดลอยตัว
-muser โหมด
-mno-โหมดผู้ใช้
อย่าสร้างรหัสที่สามารถทำงานในโหมดหัวหน้างานเท่านั้น สิ่งนี้เกี่ยวข้องเฉพาะสำหรับ
คำสั่ง "casa" ที่ปล่อยออกมาสำหรับโปรเซสเซอร์ LEON3 ค่าเริ่มต้นคือ
-mno-โหมดผู้ใช้.
-mno-เร็วกว่าโครงสร้าง
-mfaster โครงสร้าง
ด้วยระบบเส้นทาง -mfaster โครงสร้างคอมไพเลอร์ถือว่าโครงสร้างควรมี 8-byte
การจัดตำแหน่ง ซึ่งช่วยให้สามารถใช้คู่คำสั่ง "ldd" และ "std" สำหรับสำเนา
ในการกำหนดโครงสร้าง แทนที่คู่ "ld" และ "st" สองเท่า อย่างไรก็ตาม
การใช้การจัดตำแหน่งที่เปลี่ยนแปลงนี้เป็นการละเมิด SPARC ABI โดยตรง จึงตั้งใจ
สำหรับใช้กับเป้าหมายที่ผู้พัฒนารับทราบว่ารหัสผลลัพธ์ของพวกเขาคือ .เท่านั้น
ไม่เป็นไปตามกฎของ ABI โดยตรง
-mcpu=ซีพียู_ประเภท
ตั้งค่าชุดคำสั่ง ชุดลงทะเบียน และพารามิเตอร์การจัดตารางเวลาคำสั่งสำหรับ
ประเภทเครื่อง ซีพียู_ประเภท. ค่าที่รองรับสำหรับ ซีพียู_ประเภท เป็น v7, ต้นไซเปรซ, v8, ซูเปอร์สปาร์ก,
ไฮเปอร์สปาร์ก, Leon, leon3, ลีออน3v7, สปาร์คไลท์, f930, f934, สปาร์คไลท์86x, sparklet,
tsc701, v9, อัลตร้าสปาร์ก, อัลตราสปาร์ก3, ไนแอการา, ไนแองการ่า2, ไนแองการ่า3 และ ไนแองการ่า4.
Native Solaris และ GNU/Linux toolchains ยังรองรับค่า พื้นเมืองซึ่งเลือก
ตัวเลือกสถาปัตยกรรมที่ดีที่สุดสำหรับโปรเซสเซอร์โฮสต์ -mcpu=เจ้าของภาษา ไม่มีผลถ้า
GCC ไม่รู้จักโปรเซสเซอร์
พารามิเตอร์การจัดตารางเวลาคำสั่งเริ่มต้นใช้สำหรับค่าที่เลือก an
สถาปัตยกรรมและไม่ใช่การนำไปปฏิบัติ เหล่านี้คือ v7, v8, สปาร์คไลท์, sparklet, v9.
นี่คือรายการของสถาปัตยกรรมที่รองรับและการใช้งานที่รองรับ
v7 ไซเปรส leon3v7
v8 ซูเปอร์สปาร์ก ไฮเปอร์สปาร์ก ลีออน ลีออน3
สปาร์คไลท์
f930, f934, สปาร์คไลท์86x
sparklet
tsc701
v9 ultrasparc, ultrasparc3, ไนแองการ่า, ไนแองการ่า2, ไนแองการ่า3, ไนแองการ่า4
โดยค่าเริ่มต้น (เว้นแต่จะมีการกำหนดค่าเป็นอย่างอื่น) GCC จะสร้างรหัสสำหรับตัวแปร V7 ของ
สถาปัตยกรรม SPARC กับ -mcpu=ไซเปรสคอมไพเลอร์ยังเพิ่มประสิทธิภาพสำหรับ
ชิป Cypress CY7C602 ที่ใช้ใน SPARCStation/SPARCServer 3xx series นี่คือ
ยังเหมาะสำหรับ SPARCStation 1, 2, IPX เป็นต้น
ด้วยระบบเส้นทาง -mcpu=v8, GCC สร้างรหัสสำหรับตัวแปร V8 ของสถาปัตยกรรม SPARC NS
ความแตกต่างเพียงอย่างเดียวจากรหัส V7 คือคอมไพเลอร์ปล่อยจำนวนเต็มคูณและ
คำสั่งแบ่งจำนวนเต็มซึ่งมีอยู่ใน SPARC-V8 แต่ไม่มีใน SPARC-V7 กับ
-mcpu=ซุปเปอร์สปาร์กคอมไพเลอร์ยังเพิ่มประสิทธิภาพสำหรับชิป SuperSPARC เช่น
ใช้ใน SPARCStation 10, 1000 และ 2000 ซีรีส์
ด้วยระบบเส้นทาง -mcpu=สปาร์ไคลต์, GCC สร้างรหัสสำหรับตัวแปร SPARClite ของ SPARC
สถาปัตยกรรม. สิ่งนี้จะเพิ่มการคูณจำนวนเต็ม ขั้นตอนการหารจำนวนเต็มและการสแกน ("ffs")
คำแนะนำที่มีอยู่ใน SPARClite แต่ไม่ใช่ใน SPARC-V7 กับ -mcpu=f930ที่
คอมไพเลอร์ยังเพิ่มประสิทธิภาพให้กับชิป Fujitsu MB86930 ซึ่งเป็นของเดิม
SPARClite ที่ไม่มี FPU กับ -mcpu=f934คอมไพเลอร์ยังเพิ่มประสิทธิภาพสำหรับ
ชิป Fujitsu MB86934 ซึ่งเป็น SPARClite ล่าสุดที่มี FPU
ด้วยระบบเส้นทาง -mcpu=ประกายไฟ, GCC สร้างรหัสสำหรับตัวแปร SPARClet ของ SPARC
สถาปัตยกรรม. เป็นการบวกจำนวนเต็ม คูณ/สะสม หารจำนวนเต็ม
คำแนะนำขั้นตอนและการสแกน ("ffs") ซึ่งมีอยู่ใน SPARClet แต่ไม่ใช่ใน SPARC-V7 กับ
-mcpu=tsc701คอมไพเลอร์ยังเพิ่มประสิทธิภาพสำหรับชิป TEMIC SPARClet
ด้วยระบบเส้นทาง -mcpu=v9, GCC สร้างรหัสสำหรับตัวแปร V9 ของสถาปัตยกรรม SPARC นี้
เพิ่มคำสั่งย้ายจำนวนเต็มและเลขทศนิยม 64 บิต, เลขทศนิยมเพิ่มเติม 3 จุด
การลงทะเบียนรหัสเงื่อนไขและคำแนะนำการย้ายตามเงื่อนไข กับ -mcpu=อัลตราสปาร์ก,
คอมไพเลอร์ยังเพิ่มประสิทธิภาพให้กับชิป Sun UltraSPARC I/II/IIIi กับ
-mcpu=อัลตราสปาร์ก3คอมไพเลอร์ยังเพิ่มประสิทธิภาพสำหรับ Sun UltraSPARC
ชิป III/III+/IIIi/IIIi+/IV/IV+ กับ -mcpu=ไนแองการ่า, คอมไพเลอร์นอกจากนี้
ปรับให้เหมาะสมสำหรับชิป Sun UltraSPARC T1 กับ -mcpu=ไนแอการา2, คอมไพเลอร์
เพิ่มประสิทธิภาพสำหรับชิป Sun UltraSPARC T2 กับ -mcpu=ไนแอการา3ที่
คอมไพเลอร์ยังเพิ่มประสิทธิภาพให้กับชิป Sun UltraSPARC T3 กับ -mcpu=ไนแอการา4,
คอมไพเลอร์ยังเพิ่มประสิทธิภาพให้กับชิป Sun UltraSPARC T4
-mtune=ซีพียู_ประเภท
ตั้งค่าพารามิเตอร์การจัดตารางเวลาคำสั่งสำหรับประเภทเครื่อง ซีพียู_ประเภทแต่อย่าตั้งค่า
ชุดคำสั่งหรือชุดลงทะเบียนที่ option -mcpu=ซีพียู_ประเภท ไม่
ค่าเดียวกันสำหรับ -mcpu=ซีพียู_ประเภท สามารถใช้สำหรับการ -mtune=ซีพียู_ประเภทแต่เท่านั้น but
ค่าที่มีประโยชน์คือค่าที่เลือกการใช้งาน CPU โดยเฉพาะ นั่นคือ
ต้นไซเปรซ, ซูเปอร์สปาร์ก, ไฮเปอร์สปาร์ก, Leon, leon3, ลีออน3v7, f930, f934, สปาร์คไลท์86x,
tsc701, อัลตร้าสปาร์ก, อัลตราสปาร์ก3, ไนแอการา, ไนแองการ่า2, ไนแองการ่า3 และ ไนแองการ่า4. ด้วย
ชุดเครื่องมือ Solaris ดั้งเดิมและ GNU/Linux พื้นเมือง ยังสามารถใช้
-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 เมื่อกำหนดเป้าหมายซีพียูที่
รองรับคำสั่งดังกล่าว เช่น UltraSPARC-III และใหม่กว่า การตั้งค่า -mvis2 ด้วย
ชุด -mvis.
-mvis3
-mno-vis3
ด้วยระบบเส้นทาง -mvis3, GCC สร้างโค้ดที่ใช้ประโยชน์จากเวอร์ชัน 3.0 ของ UltraSPARC
ส่วนขยายชุดคำสั่งภาพ ค่าเริ่มต้นคือ -mvis3 เมื่อกำหนดเป้าหมายซีพียูที่
รองรับคำแนะนำดังกล่าว เช่น niagara-3 และใหม่กว่า การตั้งค่า -mvis3 ยังชุด
-mvis2 และ -mvis.
-mcbcond
-mno-cbcond
ด้วยระบบเส้นทาง -mcbcond, GCC สร้างรหัสที่ใช้ประโยชน์จากการเปรียบเทียบและสาขา
ตามที่กำหนดไว้ใน Sparc Architecture 2011 ค่าเริ่มต้นคือ -mcbcond เมื่อ
กำหนดเป้าหมายซีพียูที่สนับสนุนคำแนะนำดังกล่าว เช่น niagara-4 และใหม่กว่า
-mpopc
-mno-popc
ด้วยระบบเส้นทาง -mpopc, GCC สร้างรหัสที่ใช้ประโยชน์จากประชากร UltraSPARC
นับคำแนะนำ ค่าเริ่มต้นคือ -mpopc เมื่อกำหนดเป้าหมายซีพียูที่รองรับเช่น
คำแนะนำเช่น Niagara-2 และใหม่กว่า
-mfmaf
-mno-fmaf
ด้วยระบบเส้นทาง -mfmaf, GCC สร้างรหัสที่ใช้ประโยชน์จาก UltraSPARC Fused Multiply-
เพิ่มส่วนขยายทศนิยม ค่าเริ่มต้นคือ -mfmaf เมื่อกำหนดเป้าหมายซีพียูที่
รองรับคำแนะนำดังกล่าว เช่น Niagara-3 และใหม่กว่า
-mfix-at697f
เปิดใช้งานวิธีแก้ปัญหาที่บันทึกไว้สำหรับ erratum เดียวของโปรเซสเซอร์ Atmel AT697F
(ซึ่งสอดคล้องกับ erratum #13 ของโปรเซสเซอร์ AT697E)
-mfix-ut699
เปิดใช้งานการแก้ปัญหาชั่วคราวที่เป็นเอกสารสำหรับ errata ทศนิยมและแคชข้อมูล
ลบล้างข้อผิดพลาดของโปรเซสเซอร์ UT699
ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m ตัวเลือกได้รับการสนับสนุนเพิ่มเติมจากด้านบนในโปรเซสเซอร์ SPARC-V9 ใน 64-bit
สภาพแวดล้อม:
- ลบ.ม
- ลบ.ม
สร้างรหัสสำหรับสภาพแวดล้อมแบบ 32 บิตหรือ 64 บิต สภาพแวดล้อม 32 บิตตั้งค่า int
ยาวและชี้ไปที่ 32 บิต สภาพแวดล้อม 64 บิตตั้งค่าเป็น 32 บิตและยาวและ
ตัวชี้ไปที่ 64 บิต
-mcmodel=ที่
ตั้งรหัสโมเดลเป็นอย่างใดอย่างหนึ่งของ
เมดโลว์
รุ่นรหัสกลาง/ต่ำ: ที่อยู่ 64 บิต ต้องเชื่อมโยงโปรแกรมในระดับต่ำ 32
บิตของหน่วยความจำ โปรแกรมสามารถเชื่อมโยงแบบสแตติกหรือไดนามิก
เมดมิด
รุ่นรหัสกลาง/รหัสกลาง: ที่อยู่ 64 บิต ต้องเชื่อมโยงโปรแกรมในระดับต่ำ
หน่วยความจำ 44 บิต ส่วนข้อความและข้อมูลต้องมีขนาดน้อยกว่า 2GB และ
ส่วนข้อมูลต้องอยู่ภายใน 2GB ของส่วนข้อความ
เมดานี
รุ่นรหัส Medium/Anywhere: ที่อยู่ 64 บิต อาจเชื่อมโยงโปรแกรมได้ทุกที่
ในหน่วยความจำ ข้อความและข้อมูลต้องมีขนาดน้อยกว่า 2GB และข้อมูล
ส่วนจะต้องอยู่ภายใน 2GB ของส่วนข้อความ
ฝัง
โมเดลโค้ด Medium/Anywhere สำหรับระบบฝังตัว: ที่อยู่ 64 บิต, ข้อความ
และเซ็กเมนต์ข้อมูลต้องมีขนาดน้อยกว่า 2GB ทั้งที่เริ่มต้นที่ใดก็ได้ในหน่วยความจำ
(กำหนด ณ เวลาเชื่อมโยง) การลงทะเบียนทั่วโลก %g4 ชี้ไปที่ฐานของข้อมูล
ส่วน โปรแกรมมีการเชื่อมโยงแบบคงที่และไม่รองรับ PIC
-memory-model=เมม-โมเดล
ตั้งค่าโมเดลหน่วยความจำที่บังคับใช้กับโปรเซสเซอร์เป็นหนึ่งใน
ผิดนัด
รุ่นหน่วยความจำเริ่มต้นสำหรับโปรเซสเซอร์และระบบปฏิบัติการ
โรโม คำสั่งหน่วยความจำที่ผ่อนคลาย
ปล คำสั่งซื้อร้านค้าบางส่วน
ใส่ ยอดสั่งซื้อของร้าน
sc ความสอดคล้องตามลำดับ
โมเดลหน่วยความจำเหล่านี้ถูกกำหนดอย่างเป็นทางการในภาคผนวก D ของสถาปัตยกรรม Sparc V9
คู่มือตามที่กำหนดไว้ในฟิลด์ "PSTATE.MM" ของโปรเซสเซอร์
-mstack-ลำเอียง
-mno-stack-ลำเอียง
ด้วยระบบเส้นทาง -mstack-ลำเอียง, GCC ถือว่าตัวชี้สแต็กและตัวชี้เฟรมถ้ามี
ถูกชดเชยโดย -2047 ซึ่งจะต้องเพิ่มกลับเมื่อทำการอ้างอิงเฟรมสแต็ก นี้
เป็นค่าเริ่มต้นในโหมด 64 บิต มิฉะนั้น จะถือว่าไม่มีการชดเชยดังกล่าว
SPU Options
ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m ตัวเลือกได้รับการสนับสนุนบน SPU:
-mwarn-reloc
-merror-ย้าย
ตัวโหลดสำหรับ SPU ไม่ได้จัดการการย้ายตำแหน่งแบบไดนามิก โดยค่าเริ่มต้น GCC จะให้
เกิดข้อผิดพลาดเมื่อสร้างรหัสที่ต้องมีการย้ายตำแหน่งแบบไดนามิก -mno-ข้อผิดพลาด-reloc
ปิดการใช้งานข้อผิดพลาด -mwarn-reloc สร้างคำเตือนแทน
-msafe-dma
-munsafe-dma
คำสั่งที่เริ่มต้นหรือทดสอบความสมบูรณ์ของ DMA ต้องไม่ถูกจัดลำดับใหม่ด้วย
เกี่ยวกับการโหลดและจัดเก็บหน่วยความจำที่กำลังเข้าถึง กับ -munsafe-dma
คุณต้องใช้คำหลัก "ระเหย" เพื่อป้องกันการเข้าถึงหน่วยความจำ แต่นั่นอาจนำไปสู่
รหัสที่ไม่มีประสิทธิภาพในสถานที่ที่หน่วยความจำไม่เปลี่ยนแปลง แทนที่จะทำเครื่องหมาย
หน่วยความจำระเหยคุณสามารถใช้ -msafe-dma เพื่อบอกให้คอมไพเลอร์ปฏิบัติต่อ DMA
คำแนะนำที่อาจส่งผลต่อหน่วยความจำทั้งหมด
-mbranch-คำใบ้
โดยค่าเริ่มต้น GCC จะสร้างคำสั่งคำใบ้สาขาเพื่อหลีกเลี่ยงการหยุดไปป์ไลน์สำหรับ
สาขาที่รับเสมอหรืออาจใช้ คำใบ้ไม่ได้ถูกสร้างขึ้นใกล้กว่า8
คำแนะนำจากสาขา มีเหตุผลเพียงเล็กน้อยที่จะปิดการใช้งานพวกเขา ยกเว้นสำหรับ
จุดประสงค์ในการดีบัก หรือเพื่อทำให้วัตถุเล็กลงเล็กน้อย
-msmall-mem
-mlarge-เม็ม
โดยค่าเริ่มต้น GCC จะสร้างโค้ดโดยสมมติว่าที่อยู่นั้นไม่เกิน 18 บิต
ด้วยระบบเส้นทาง -mlarge-เม็ม รหัสถูกสร้างขึ้นที่ถือว่าอยู่แบบ 32 บิตแบบเต็ม
-mstdmain
โดยค่าเริ่มต้น GCC จะลิงก์กับโค้ดเริ่มต้นที่ถือว่าฟังก์ชันหลักแบบ SPU
อินเทอร์เฟซ (ซึ่งมีรายการพารามิเตอร์แหกคอก) กับ -mstdmain, ลิงค์ GCC
โปรแกรมของคุณเทียบกับรหัสเริ่มต้นที่ถือว่าอินเทอร์เฟซแบบ C99 เป็น "หลัก"
รวมถึงสำเนาของสตริง "argv" ในเครื่อง
-mfixed-ช่วง=ช่วงการลงทะเบียน
สร้างรหัสที่รักษาช่วงการลงทะเบียนที่กำหนดเป็นการลงทะเบียนคงที่ ทะเบียนคงที่
เป็นสิ่งที่ผู้จัดสรรการลงทะเบียนไม่สามารถใช้ได้ สิ่งนี้มีประโยชน์เมื่อรวบรวมเคอร์เนล
รหัส. ช่วงการลงทะเบียนถูกระบุเป็นสองรีจิสเตอร์คั่นด้วยเส้นประ หลายรายการ
สามารถระบุช่วงการลงทะเบียนโดยคั่นด้วยเครื่องหมายจุลภาค
-mea32
-mea64
คอมไพล์โค้ดโดยสมมติว่าตัวชี้ไปยังพื้นที่ที่อยู่ PPU ที่เข้าถึงผ่าน "__ea"
ตัวระบุพื้นที่แอดเดรสที่มีชื่อมีความกว้าง 32 หรือ 64 บิต ค่าเริ่มต้นคือ 32 บิต
เนื่องจากนี่คือตัวเลือกที่เปลี่ยน ABI โค้ดอ็อบเจ็กต์ทั้งหมดในไฟล์สั่งการจะต้องได้รับการคอมไพล์
ด้วยการตั้งค่าเดียวกัน
-maddress-space-แปลง
-mno-ที่อยู่-พื้นที่-แปลง
อนุญาต/ไม่อนุญาตการปฏิบัติต่อพื้นที่ที่อยู่ "__ea" เป็น superset ของที่อยู่ทั่วไป
ช่องว่าง. สิ่งนี้ทำให้สามารถแสดงประเภทที่ชัดเจนระหว่าง "__ea" และพอยน์เตอร์ทั่วไปได้เช่นเดียวกับ
การแปลงโดยนัยของพอยน์เตอร์ทั่วไปเป็นพอยน์เตอร์ "__ea" ค่าเริ่มต้นคืออนุญาตให้
การแปลงตัวชี้พื้นที่ที่อยู่
-mcache-ขนาด=ขนาดแคช
ตัวเลือกนี้ควบคุมเวอร์ชันของ libgcc ที่คอมไพเลอร์ลิงก์ไปยังไฟล์ปฏิบัติการ
และเลือกแคชที่จัดการด้วยซอฟต์แวร์สำหรับการเข้าถึงตัวแปรในที่อยู่ "__ea"
พื้นที่ที่มีขนาดแคชเฉพาะ ตัวเลือกที่เป็นไปได้สำหรับ ขนาดแคช เป็น 8, 16, 32, 64
และ 128. ขนาดแคชเริ่มต้นคือ 64KB
-matomic-อัพเดท
-mno-atomic-อัพเดท
ตัวเลือกนี้ควบคุมเวอร์ชันของ libgcc ที่คอมไพเลอร์ลิงก์ไปยังไฟล์ปฏิบัติการ
และเลือกว่าจะอัปเดตอะตอมมิกไปยังแคชที่จัดการซอฟต์แวร์ของตัวแปรฝั่ง PPU หรือไม่
ถูกนำมาใช้ หากคุณใช้การอัปเดตแบบอะตอมมิก ให้เปลี่ยนเป็นตัวแปร PPU จากโค้ด SPU โดยใช้
ตัวระบุพื้นที่ที่อยู่ชื่อ "__ea" ไม่รบกวนการเปลี่ยนแปลงของ PPU . อื่น
ตัวแปรที่อยู่ในแคชบรรทัดเดียวกันจากรหัส PPU หากคุณไม่ใช้อะตอมมิก
การปรับปรุง การรบกวนดังกล่าวอาจเกิดขึ้น อย่างไรก็ตามการเขียนบรรทัดแคชนั้นมากกว่า
มีประสิทธิภาพ. ลักษณะการทำงานเริ่มต้นคือการใช้การอัปเดตแบบอะตอมมิก
-mdual-nops
-mdual-nops=n
โดยค่าเริ่มต้น GCC จะแทรก nops เพื่อเพิ่มปัญหาคู่เมื่อคาดว่าจะเพิ่มขึ้น
การปฏิบัติ n สามารถเป็นค่าได้ตั้งแต่ 0 ถึง 10 ค่าที่เล็กกว่า n แทรก nos น้อยลง 10 คือ
ค่าเริ่มต้น 0 เหมือนกับ -mno-dual-nops. พิการด้วย -คุณ.
-mhint-max-nops=n
จำนวน nos สูงสุดที่จะแทรกสำหรับคำใบ้สาขา คำใบ้สาขาต้องมีอย่างน้อย 8
คำแนะนำจากสาขาที่ส่งผลกระทบ GCC แทรกได้ถึง n nos to
บังคับใช้สิ่งนี้ มิฉะนั้นจะไม่สร้างคำใบ้สาขา
-นาที-สูงสุด-ระยะทาง=n
การเข้ารหัสคำสั่งคำใบ้สาขาจำกัดคำใบ้ให้อยู่ภายใน256
คำแนะนำของสาขาที่ได้รับผลกระทบ โดยค่าเริ่มต้น GCC จะทำให้แน่ใจว่าอยู่ภายใน
125.
-msafe-คำใบ้
แก้ไขข้อผิดพลาดของฮาร์ดแวร์ที่ทำให้ SPU หยุดทำงานโดยไม่มีกำหนด โดยค่าเริ่มต้น GCC
แทรกคำสั่ง "hbrp" เพื่อให้แน่ใจว่าแผงนี้จะไม่เกิดขึ้น
Options for System V
ตัวเลือกเพิ่มเติมเหล่านี้มีอยู่ใน System V รีลีส 4 เพื่อความเข้ากันได้กับ other
คอมไพเลอร์บนระบบเหล่านั้น:
-G สร้างวัตถุที่ใช้ร่วมกัน ขอแนะนำว่า -สัญลักษณ์ or - แบ่งปัน มาใช้แทน
-คิว ระบุรุ่นของแต่ละเครื่องมือที่ใช้โดยคอมไพเลอร์ในแอสเซมเบลอร์ ".ident"
คำสั่งในการส่งออก
-Qn ละเว้นจากการเพิ่มคำสั่ง ".ident" ลงในไฟล์เอาต์พุต (นี่เป็นค่าเริ่มต้น)
-วายพีdirs
ค้นหาไดเรกทอรี dirsและไม่มีอื่น ๆ สำหรับห้องสมุดที่ระบุด้วย -l.
-อืมdir
ดูในไดเร็กทอรี dir เพื่อค้นหาตัวประมวลผลล่วงหน้า M4 แอสเซมเบลอร์ใช้สิ่งนี้
ตัวเลือก
กระเบื้อง-Gx Options
ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m ตัวเลือกได้รับการสนับสนุนบน TILE-Gx:
-mcmodel=เล็ก
สร้างรหัสสำหรับโมเดลขนาดเล็ก ระยะทางสำหรับการโทรโดยตรงจำกัดอยู่ที่ 500M
ในทิศทางใด ที่อยู่ที่สัมพันธ์กับพีซีคือ 32 บิต รองรับที่อยู่ที่แน่นอน
ช่วงที่อยู่แบบเต็ม
-mcmodel=ขนาดใหญ่
สร้างรหัสสำหรับรุ่นใหญ่ ไม่จำกัดระยะทางการโทร PC-
ที่อยู่สัมพัทธ์หรือที่อยู่แบบสัมบูรณ์
-mcpu=ชื่อ
เลือกประเภทของ CPU ที่จะกำหนดเป้าหมาย ปัจจุบันรองรับประเภทเดียวคือ ไทล์กx.
- ลบ.ม
- ลบ.ม
สร้างรหัสสำหรับสภาพแวดล้อมแบบ 32 บิตหรือ 64 บิต สภาพแวดล้อม 32 บิตตั้งค่า int
ยาวและชี้ไปที่ 32 บิต สภาพแวดล้อม 64 บิตตั้งค่าเป็น 32 บิตและยาวและ
ตัวชี้ไปที่ 64 บิต
ไทล์โปร Options
ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m ตัวเลือกได้รับการสนับสนุนบน TILEPro:
-mcpu=ชื่อ
เลือกประเภทของ CPU ที่จะกำหนดเป้าหมาย ปัจจุบันรองรับประเภทเดียวคือ ไทล์โปร.
- ลบ.ม
สร้างโค้ดสำหรับสภาพแวดล้อมแบบ 32 บิต ซึ่งตั้งค่า int, long และ pointer เป็น 32 บิต
นี่เป็นพฤติกรรมที่ได้รับการสนับสนุนเท่านั้น ดังนั้นแฟล็กจึงถูกละเว้น
V850 Options
ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m ตัวเลือกที่กำหนดไว้สำหรับการใช้งาน V850:
-mlong-โทร
-นาทีโทรยาว
ปฏิบัติต่อการโทรทั้งหมดเสมือนอยู่ห่างไกล (ใกล้) หากถือว่าการโทรอยู่ไกล
คอมไพเลอร์จะโหลดที่อยู่ของฟังก์ชันลงในรีจิสเตอร์เสมอ และเรียก indirect
ผ่านตัวชี้
-mno-ep
-เมพ
อย่าปรับให้เหมาะสม (ทำการเพิ่มประสิทธิภาพ) บล็อกพื้นฐานที่ใช้ตัวชี้ดัชนีเดียวกัน 4 หรือมากกว่า
ครั้งเพื่อคัดลอกตัวชี้ไปยังการลงทะเบียน "ep" และใช้ "sld" และ "sst" ที่สั้นกว่า
คำแนะนำ. NS -เมพ ตัวเลือกเปิดอยู่โดยค่าเริ่มต้นหากคุณปรับให้เหมาะสม
-mno-prolog-ฟังก์ชัน
-mprolog-ฟังก์ชั่น
อย่าใช้ (ใช้) ฟังก์ชั่นภายนอกเพื่อบันทึกและกู้คืนการลงทะเบียนที่ prologue
และบทส่งท้ายของฟังก์ชัน ฟังก์ชันภายนอกทำงานช้าลง แต่ใช้โค้ดน้อยลง
พื้นที่ถ้ามีมากกว่าหนึ่งฟังก์ชันบันทึกจำนวนการลงทะเบียนเท่ากัน NS
-mprolog-ฟังก์ชั่น ตัวเลือกเปิดอยู่โดยค่าเริ่มต้นหากคุณปรับให้เหมาะสม
-mspace
พยายามทำให้โค้ดมีขนาดเล็กที่สุด ปัจจุบันนี้เพียงแค่เปิด -เมพ
และ -mprolog-ฟังก์ชั่น ตัวเลือก
-mtda=n
ใส่ตัวแปรสแตติกหรือโกลบอลที่มีขนาดเท่ากับ n ไบต์หรือน้อยกว่าลงในพื้นที่ข้อมูลขนาดเล็ก
ที่ลงทะเบียน "ep" ชี้ไปที่ พื้นที่ข้อมูลขนาดเล็กสามารถเก็บได้ทั้งหมด 256 ไบต์
(128 ไบต์สำหรับการอ้างอิงไบต์)
-msda=n
ใส่ตัวแปรสแตติกหรือโกลบอลที่มีขนาดเท่ากับ n ไบต์หรือน้อยกว่าลงในพื้นที่ข้อมูลขนาดเล็ก
ที่ลงทะเบียน "gp" ชี้ไปที่ พื้นที่ข้อมูลขนาดเล็กสามารถจุได้ถึง 64 กิโลไบต์
-mzda=n
ใส่ตัวแปรสแตติกหรือโกลบอลที่มีขนาดเท่ากับ n ไบต์หรือน้อยกว่าใน32 .แรก
กิโลไบต์ของหน่วยความจำ
-mv850
ระบุว่าโปรเซสเซอร์เป้าหมายคือ V850
-MV850E3V5
ระบุว่าโปรเซสเซอร์เป้าหมายคือ V850E3V5 ค่าคงที่ตัวประมวลผลล่วงหน้า
__v850e3v5__ ถูกกำหนดไว้หากใช้ตัวเลือกนี้
-MV850E2V4
ระบุว่าโปรเซสเซอร์เป้าหมายคือ V850E3V5 นี่คือนามแฝงสำหรับ
-MV850E3V5 ตัวเลือก
-MV850E2V3
ระบุว่าโปรเซสเซอร์เป้าหมายคือ V850E2V3 ค่าคงที่ตัวประมวลผลล่วงหน้า
__v850e2v3__ ถูกกำหนดไว้หากใช้ตัวเลือกนี้
-mv850e2
ระบุว่าโปรเซสเซอร์เป้าหมายคือ V850E2 ค่าคงที่ตัวประมวลผลล่วงหน้า __v850e2__
ถูกกำหนดไว้หากใช้ตัวเลือกนี้
-mv850e1
ระบุว่าโปรเซสเซอร์เป้าหมายคือ V850E1 ค่าคงที่ตัวประมวลผลล่วงหน้า
__v850e1__ และ __v850e__ ถูกกำหนดไว้หากใช้ตัวเลือกนี้
-mv850es
ระบุว่าโปรเซสเซอร์เป้าหมายคือ V850ES นี่คือนามแฝงสำหรับ -mv850e1
ตัวเลือก
-mv850e
ระบุว่าโปรเซสเซอร์เป้าหมายคือ V850E ค่าคงที่ตัวประมวลผลล่วงหน้า __v850e__
ถูกกำหนดไว้หากใช้ตัวเลือกนี้
ถ้าไม่ใช่ -mv850 ไม่ -mv850e ไม่ -mv850e1 ไม่ -mv850e2 ไม่ -MV850E2V3 ไม่ -MV850E3V5
ถูกกำหนดแล้ว ตัวประมวลผลเป้าหมายเริ่มต้นจะถูกเลือกและตัวประมวลผลที่เกี่ยวข้อง __v850*__
ค่าคงที่ของตัวประมวลผลล่วงหน้าถูกกำหนดไว้
ค่าคงที่ตัวประมวลผลล่วงหน้า __v850 และ __v851__ ถูกกำหนดไว้เสมอ ไม่ว่า
ตัวแปรโปรเซสเซอร์เป็นเป้าหมาย
-mdisable-callt
-mno-disable-callt
ตัวเลือกนี้ระงับการสร้างคำสั่ง "CALLT" สำหรับ v850e, v850e1,
v850e2, v850e2v3 และ v850e3v5 รสชาติของสถาปัตยกรรม v850
ตัวเลือกนี้เปิดใช้งานโดยค่าเริ่มต้นเมื่อมีการใช้งาน RH850 ABI (ดู -mrh850-อาบี), และ
ปิดใช้งานโดยค่าเริ่มต้นเมื่อมีการใช้งาน GCC ABI หากคำสั่ง "CALLT" กำลังดำเนินการอยู่
สร้างขึ้นจากนั้นจะมีการกำหนดสัญลักษณ์ตัวประมวลผลล่วงหน้า C "__V850_CALLT__"
-mrelax
-mno-ผ่อนคลาย
ส่งต่อ (หรือไม่ส่งต่อ) the -mrelax ตัวเลือกบรรทัดคำสั่งสำหรับแอสเซมเบลอร์
-mlong-กระโดด
-mno-กระโดดไกล
ปิดใช้งาน (หรือเปิดใช้งานอีกครั้ง) การสร้างคำสั่งข้ามที่เกี่ยวข้องกับพีซี
-msoft-ลอย
-mhard-ลอย
ปิดใช้งาน (หรือเปิดใช้งานใหม่) การสร้างคำแนะนำจุดลอยตัวของฮาร์ดแวร์ นี้
ตัวเลือกมีความสำคัญเฉพาะเมื่อสถาปัตยกรรมเป้าหมายคือ V850E2V3 หรือสูงกว่า. ถ้า
กำลังสร้างคำแนะนำจุดลอยตัวของฮาร์ดแวร์ จากนั้นตัวประมวลผลล่วงหน้า C
สัญลักษณ์ "__FPU_OK__" จะถูกกำหนด มิฉะนั้น สัญลักษณ์ "__NO_FPU__" จะเป็น
ที่กำหนดไว้
-มลูป
เปิดใช้งานการใช้คำสั่ง e3v5 LOOP การใช้คำสั่งนี้ไม่ใช่
เปิดใช้งานโดยค่าเริ่มต้นเมื่อเลือกสถาปัตยกรรม e3v5 เนื่องจากยังคงใช้งานอยู่
ทดลอง
-mrh850-อาบี
-มิลลิกรัม
เปิดใช้งานการรองรับ V850 ABI เวอร์ชัน RH850 นี่คือค่าเริ่มต้น กับ
ABI รุ่นนี้ใช้กฎต่อไปนี้:
· โครงสร้างขนาดจำนวนเต็มและยูเนียนถูกส่งกลับผ่านตัวชี้หน่วยความจำแทน
ทะเบียน
· โครงสร้างขนาดใหญ่และสหภาพแรงงาน (ขนาดมากกว่า 8 ไบต์) ถูกส่งผ่านด้วยค่า
· ฟังก์ชันถูกจัดชิดขอบ 16 บิต
· -m8byte-จัดตำแหน่ง รองรับตัวเลือกบรรทัดคำสั่ง
· -mdisable-callt ตัวเลือกบรรทัดคำสั่งถูกเปิดใช้งานโดยค่าเริ่มต้น NS
-mno-disable-callt ไม่รองรับตัวเลือกบรรทัดคำสั่ง
เมื่อเปิดใช้งาน ABI เวอร์ชันนี้ สัญลักษณ์ตัวประมวลผลล่วงหน้า C "__V850_RH850_ABI__"
ถูกกำหนดไว้
-mgcc-เอบี
เปิดใช้งานการสนับสนุนสำหรับ V850 ABI เวอร์ชันเก่าของ GCC ด้วย ABI . เวอร์ชันนี้
ใช้กฎต่อไปนี้:
· โครงสร้างขนาดจำนวนเต็มและสหภาพแรงงานจะถูกส่งคืนในทะเบียน "r10"
· โครงสร้างขนาดใหญ่และสหภาพแรงงาน (ขนาดมากกว่า 8 ไบต์) ถูกส่งผ่านโดยการอ้างอิง
· ฟังก์ชันถูกจัดแนวตามขอบเขต 32 บิต เว้นแต่จะปรับให้เหมาะสมสำหรับขนาด
· -m8byte-จัดตำแหน่ง ไม่รองรับตัวเลือกบรรทัดคำสั่ง
· -mdisable-callt รองรับตัวเลือกบรรทัดคำสั่งแต่ไม่ได้เปิดใช้งานตามค่าเริ่มต้น
เมื่อเปิดใช้งาน ABI เวอร์ชันนี้ สัญลักษณ์ตัวประมวลผลล่วงหน้า C "__V850_GCC_ABI__"
ถูกกำหนดไว้
-m8byte-จัดตำแหน่ง
-mno-8byte-จัดตำแหน่ง
เปิดใช้งานการสนับสนุนสำหรับประเภท "คู่" และ "ยาวยาว" เพื่อจัดตำแหน่งบน 8-byte
ขอบเขต ค่าดีฟอลต์คือการจำกัดการจัดตำแหน่งของออบเจกต์ทั้งหมดไว้ที่มากที่สุด
4 ไบต์ เมื่อไหร่ -m8byte-จัดตำแหน่ง มีผลกับสัญลักษณ์พรีโปรเซสเซอร์ C
"__V850_8BYTE_ALIGN__" จะถูกกำหนด
-mbig-สวิตช์
สร้างรหัสที่เหมาะสมสำหรับตารางสวิตช์ขนาดใหญ่ ใช้ตัวเลือกนี้เฉพาะในกรณีที่
แอสเซมเบลอร์/ลิงเกอร์บ่นเกี่ยวกับสาขาที่อยู่นอกช่วงภายในตารางสวิตช์
-mapp-regs
ตัวเลือกนี้ทำให้ r2 และ r5 ถูกใช้ในโค้ดที่สร้างโดยคอมไพเลอร์ นี้
การตั้งค่าเป็นค่าเริ่มต้น
-mno-แอป-regs
อ็อพชันนี้ทำให้ r2 และ r5 เป็นรีจิสเตอร์คงที่
VAX Options
ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m ตัวเลือกถูกกำหนดไว้สำหรับ VAX:
-มิวนิค
ห้ามแสดงคำสั่งกระโดด ("aobleq" เป็นต้น) ที่ Unix assembler
สำหรับ VAX ไม่สามารถจัดการได้ในระยะยาว
-มก
ทำตามคำแนะนำการข้ามเหล่านั้นโดยสันนิษฐานว่าแอสเซมเบลอร์ GNU กำลัง
มือสอง
- มก โค้ดเอาต์พุตสำหรับตัวเลขทศนิยมรูปแบบ G แทนรูปแบบ D
VMS Options
ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m มีการกำหนดตัวเลือกสำหรับการใช้งาน VMS:
-mvms-ส่งคืนรหัส
ส่งคืนรหัสเงื่อนไข VMS จาก "main" ค่าดีฟอลต์คือการคืนค่าเงื่อนไขสไตล์ POSIX
(เช่นข้อผิดพลาด) รหัส
-mdebug-main=อุปสรรค
ตั้งค่าสถานะรูทีนแรกที่ชื่อขึ้นต้นด้วย อุปสรรค เป็นกิจวัตรหลักสำหรับ
ดีบักเกอร์
-mmalloc64
ค่าเริ่มต้นเป็นรูทีนการจัดสรรหน่วยความจำ 64 บิต
-mpointer-ขนาด=ขนาด
กำหนดขนาดเริ่มต้นของพอยน์เตอร์ ตัวเลือกที่เป็นไปได้สำหรับ ขนาด เป็น 32 or Short สำหรับ 32 บิต
ชี้ 64 or ยาว สำหรับพอยน์เตอร์ 64 บิตและ ไม่ เพื่อรองรับพอยน์เตอร์ 32 บิตเท่านั้น
ตัวเลือกในภายหลังปิดใช้งาน "pragma pointer_size"
วีเอ็กซ์เวิร์คส Options
ตัวเลือกในส่วนนี้กำหนดไว้สำหรับเป้าหมาย VxWorks ทั้งหมด ตัวเลือกเฉพาะสำหรับ
ฮาร์ดแวร์เป้าหมายจะแสดงพร้อมกับตัวเลือกอื่นๆ สำหรับเป้าหมายนั้น
-mrtp
GCC สามารถสร้างโค้ดสำหรับทั้งเคอร์เนล VxWorks และกระบวนการแบบเรียลไทม์ (RTP) นี้
ตัวเลือกเปลี่ยนจากอดีตเป็นหลัง นอกจากนี้ยังกำหนดมาโครตัวประมวลผลล่วงหน้า
"__RTP__"
-ไม่คงที่
ลิงก์ไฟล์เรียกทำงาน RTP กับไลบรารีที่แชร์แทนที่จะเป็นไลบรารีสแตติก NS
ตัวเลือก -คงที่ และ - แบ่งปัน สามารถใช้สำหรับ RTP ได้เช่นกัน -คงที่ เป็นค่าเริ่มต้น
-บีสแตติก
-บีไดนามิค
ตัวเลือกเหล่านี้จะถูกส่งต่อไปยังตัวเชื่อมโยง มีการกำหนดไว้สำหรับความเข้ากันได้กับ
เดียบ
-Xbind-ขี้เกียจ
เปิดใช้งานการโยงแบบสันหลังยาวของการเรียกใช้ฟังก์ชัน ตัวเลือกนี้เทียบเท่ากับ -Wl,-z ตอนนี้ และเป็น
กำหนดไว้เพื่อความเข้ากันได้กับ Diab
-Xbind-ตอนนี้
ปิดใช้งานการโยงแบบสันหลังยาวของการเรียกใช้ฟังก์ชัน ตัวเลือกนี้เป็นค่าเริ่มต้นและถูกกำหนดไว้สำหรับ
เข้ากันได้กับ Diab
x86-64 Options
เหล่านี้อยู่ภายใต้
เอ็กซ์สตอร์มี่16 Options
ตัวเลือกเหล่านี้ถูกกำหนดไว้สำหรับ Xstormy16:
-msim
เลือกไฟล์เริ่มต้นและสคริปต์ตัวเชื่อมโยงที่เหมาะสมกับโปรแกรมจำลอง
เอ็กซ์เทนซ่า Options
ตัวเลือกเหล่านี้ได้รับการสนับสนุนสำหรับเป้าหมาย Xtensa:
-mconst16
-mno-const16
เปิดหรือปิดการใช้คำสั่ง "CONST16" สำหรับการโหลดค่าคงที่ NS
ปัจจุบันคำสั่ง "CONST16" ไม่ใช่ตัวเลือกมาตรฐานจาก Tensilica เมื่อไหร่
เปิดใช้งาน คำแนะนำ "CONST16" จะใช้แทน "L32R" มาตรฐานเสมอ
คำแนะนำ. การใช้ "CONST16" จะเปิดใช้งานโดยค่าเริ่มต้นก็ต่อเมื่อ "L32R"
ไม่มีคำแนะนำ
-mfused-mad
-mno-ฟิวส์ madd
เปิดหรือปิดการใช้คำสั่งผสม คูณ/บวก และ คูณ/ลบ ใน
ตัวเลือกจุดลอยตัว สิ่งนี้จะไม่มีผลหากตัวเลือกจุดลอยตัวไม่ใช่ด้วย
เปิดใช้งาน การปิดใช้งานคำสั่งการคูณ / บวกและการคูณ / การลบที่หลอมรวมจะบังคับให้
คอมไพเลอร์เพื่อใช้คำสั่งแยกสำหรับการดำเนินการคูณและบวก/ลบ
อาจเป็นที่ต้องการในบางกรณีซึ่งผลลัพธ์ที่ได้ตามมาตรฐาน IEEE 754 ที่เข้มงวดคือ
จำเป็น: คำสั่งการบวก/ลบที่หลอมรวมกันไม่ปัดเศษกลาง
ผลลัพธ์จึงให้ผลลัพธ์ด้วย ข้อมูลเพิ่มเติม บิตของความแม่นยำกว่าที่ระบุโดย
มาตรฐาน IEEE การปิดใช้งานคำสั่งบวก/ลบที่หลอมรวมยังช่วยให้มั่นใจได้ว่า
เอาต์พุตของโปรแกรมไม่ไวต่อความสามารถของคอมไพเลอร์ในการรวมการคูณและ
บวก/ลบการดำเนินการ
-mserialize-ระเหย
-mno-serialize-ระเหย
เมื่อเปิดใช้งานตัวเลือกนี้ GCC จะแทรกคำแนะนำ "MEMW" ก่อนหน่วยความจำ "ระเหย"
การอ้างอิงเพื่อรับประกันความสอดคล้องตามลำดับ ค่าเริ่มต้นคือ -mserialize-ระเหย.
ใช้ -mno-serialize-ระเหย เพื่อละเว้นคำแนะนำ "MEMW"
-mforce ไม่มีรูป
สำหรับเป้าหมาย เช่น GNU/Linux โดยที่โค้ด Xtensa ของโหมดผู้ใช้ทั้งหมดต้องอยู่ในตำแหน่ง-
รหัสอิสระ (PIC) ตัวเลือกนี้จะปิดใช้งาน PIC สำหรับการคอมไพล์โค้ดเคอร์เนล
-mtext-section-ตัวอักษร
-mno-text-section-ตัวอักษร
ควบคุมการรักษาสระตามตัวอักษร ค่าเริ่มต้นคือ -mno-text-section-ตัวอักษร,
ซึ่งวางตัวอักษรไว้ในส่วนที่แยกจากกันในไฟล์ที่ส่งออก สิ่งนี้ทำให้
พูลตัวอักษรที่จะวางใน data RAM/ROM และยังช่วยให้ linker สามารถรวม
พูลตัวอักษรจากไฟล์อ็อบเจ็กต์แยกต่างหากเพื่อลบตัวอักษรที่ซ้ำซ้อนและปรับปรุงโค้ด
ขนาด. กับ -mtext-section-ตัวอักษร, ตัวอักษรจะกระจายอยู่ในส่วนข้อความ
เพื่อให้ใกล้เคียงกับการอ้างอิงมากที่สุด นี่อาจจำเป็น
สำหรับไฟล์ประกอบขนาดใหญ่
-mtarget-จัด
-mno-เป้าหมายจัด
เมื่อเปิดใช้งานตัวเลือกนี้ GCC จะสั่งให้แอสเซมเบลอร์จัดตำแหน่งโดยอัตโนมัติ
คำแนะนำในการลดโทษของสาขาโดยลดความหนาแน่นของรหัสบางส่วน NS
แอสเซมเบลอร์พยายามขยายคำสั่งความหนาแน่นเพื่อจัดแนวเป้าหมายสาขาและ
คำแนะนำตามคำแนะนำการโทร ถ้าก่อนเซฟไม่พอ
คำแนะนำความหนาแน่นเพื่อจัดแนวเป้าหมาย ไม่มีการขยับขยาย ค่าเริ่มต้นคือ
-mtarget-จัด. ตัวเลือกเหล่านี้ไม่ส่งผลต่อการรักษาการจัดตำแหน่งอัตโนมัติ
คำแนะนำเช่น "LOOP" ซึ่งแอสเซมเบลอร์จะจัดตำแหน่งเสมอไม่ว่าจะโดยการขยาย
คำแนะนำความหนาแน่นหรือโดยการแทรกคำแนะนำ NOP
-mlongcalls
-mno-ลองโทร
เมื่อเปิดใช้งานตัวเลือกนี้ GCC จะสั่งให้แอสเซมเบลอร์แปลการโทรโดยตรงไปยัง
การโทรทางอ้อม เว้นแต่จะสามารถระบุได้ว่าเป้าหมายของการโทรโดยตรงอยู่ใน
ช่วงที่อนุญาตโดยคำสั่งการโทร การแปลนี้มักเกิดขึ้นสำหรับการเรียกไปยัง
ทำงานในไฟล์ต้นฉบับอื่น ๆ โดยเฉพาะแอสเซมเบลอร์แปลโดยตรง
คำสั่ง "CALL" ลงใน "L32R" ตามด้วยคำสั่ง "CALLX" ค่าเริ่มต้นคือ
-mno-ลองโทร. ควรใช้ตัวเลือกนี้ในโปรแกรมที่เป้าหมายการโทรสามารถ
อาจอยู่นอกช่วง ตัวเลือกนี้มีการใช้งานในแอสเซมเบลอร์ ไม่ใช่
คอมไพเลอร์ ดังนั้นรหัสแอสเซมบลีที่สร้างโดย GCC ยังคงแสดงการโทรโดยตรง
คำแนะนำ---ดูโค้ดอ็อบเจ็กต์ที่ถอดประกอบเพื่อดูคำแนะนำจริง
โปรดทราบว่าแอสเซมเบลอร์ใช้การเรียกทางอ้อมสำหรับการเรียกข้ามไฟล์ทุกครั้ง ไม่ใช่แค่เพียง
ผู้ที่อยู่นอกขอบเขตจริงๆ
zซีรี่ส์ Options
เหล่านี้อยู่ภายใต้
Options for รหัส รุ่น การประชุม
ตัวเลือกที่ไม่ขึ้นกับเครื่องเหล่านี้จะควบคุมระเบียบอินเทอร์เฟซที่ใช้ในโค้ด
รุ่น
ส่วนใหญ่มีทั้งรูปแบบบวกและลบ รูปแบบเชิงลบของ -foo is
-fno-ฟู. ในตารางด้านล่าง มีเพียงหนึ่งแบบฟอร์มที่แสดง---แบบฟอร์มที่ไม่ใช่
ค่าเริ่มต้น. คุณสามารถหาแบบฟอร์มอื่นได้โดยการลบ ที่ไม่มี หรือเพิ่ม
-fbounds-ตรวจสอบ
สำหรับส่วนหน้าที่รองรับ ให้สร้างรหัสเพิ่มเติมเพื่อตรวจสอบว่าดัชนีเคยใช้ไปหรือไม่
อาร์เรย์การเข้าถึงอยู่ในช่วงที่ประกาศไว้ ขณะนี้ได้รับการสนับสนุนโดย .เท่านั้น
ส่วนหน้า Java และ Fortran โดยที่ตัวเลือกนี้มีค่าเริ่มต้นเป็น true และ false
ตามลำดับ
-fstack-นำมาใช้ใหม่=ใช้ซ้ำระดับ
ตัวเลือกนี้ควบคุมการใช้พื้นที่สแต็กซ้ำสำหรับผู้ใช้ที่ประกาศตัวแปรโลคัล/อัตโนมัติและ
คอมไพเลอร์สร้างชั่วคราว ใช้ซ้ำ_ระดับ เป็นไปได้ ทั้งหมด, name_vars,หรือ ไม่มี. ทั้งหมด
เปิดใช้งานสแต็กซ้ำสำหรับตัวแปรโลคัลและชั่วคราวทั้งหมด name_vars เปิดใช้งาน
ใช้ซ้ำเฉพาะสำหรับตัวแปรท้องถิ่นที่กำหนดโดยผู้ใช้ที่มีชื่อและ ไม่มี ปิดการใช้งาน stack reuse
อย่างสมบูรณ์. ค่าเริ่มต้นคือ ทั้งหมด. จำเป็นต้องใช้ตัวเลือกเมื่อโปรแกรมขยาย
อายุการใช้งานของตัวแปรโลคัลที่กำหนดขอบเขตหรือคอมไพเลอร์ที่สร้างขึ้นชั่วคราวนอกเหนือ
จุดสิ้นสุดที่กำหนดโดยภาษา เมื่ออายุของตัวแปรสิ้นสุดลง และถ้า
ตัวแปรอยู่ในหน่วยความจำ คอมไพเลอร์ที่เพิ่มประสิทธิภาพมีอิสระในการใช้ stack . ซ้ำ
ช่องว่างกับตัวแปรท้องถิ่นชั่วคราวหรือขอบเขตอื่น ๆ ที่มีช่วงการใช้งานไม่
ทับซ้อนกับมัน รหัสเดิมที่ขยายอายุการใช้งานในพื้นที่มีแนวโน้มที่จะทำลายด้วย
การเพิ่มประสิทธิภาพการใช้ซ้ำซ้อน
ตัวอย่างเช่น
อินท์ *p;
{
int ท้องถิ่น 1;
p = &local1;
ท้องถิ่น1 = 10;
....
}
{
int ท้องถิ่น 2;
ท้องถิ่น2 = 20;
...
}
if (*p == 10) // อยู่นอกขอบเขตการใช้งาน local1
{
}
อีกตัวอย่างหนึ่ง:
โครงสร้างA
{
A(int k) : ผม(k), j(k) { }
int ฉัน;
int เจ;
};
เป็น *ap;
เป็นโมฆะ foo(const A& ar)
{
แอพ = &ar;
}
แถบโมฆะ ()
{
ฟู(A(10)); // อายุการใช้งานของวัตถุ temp สิ้นสุดลงเมื่อ foo กลับมา
{
A a(20);
....
}
ap->i+= 10; // ap อ้างอิงจากขอบเขตชั่วคราวซึ่งมีช่องว่าง
// นำกลับมาใช้ใหม่ด้วย a. ค่าของ ap->i คืออะไร?
}
อายุการใช้งานของคอมไพเลอร์ที่สร้างขึ้นชั่วคราวนั้นกำหนดไว้อย่างดีโดยมาตรฐาน C++
เมื่ออายุขัยของชั่วคราวสิ้นสุดลง และหากชั่วขณะนั้นดำรงอยู่ในความทรงจำ
การปรับคอมไพเลอร์ให้เหมาะสมมีอิสระที่จะนำพื้นที่สแต็กของมันกลับมาใช้ใหม่กับผู้ชั่วคราวอื่น ๆ หรือ
ตัวแปรโลคัลที่กำหนดขอบเขตซึ่งช่วงใช้งานจริงไม่ทับซ้อนกับมัน อย่างไรก็ตามบางส่วนของ
รหัสดั้งเดิมขึ้นอยู่กับพฤติกรรมของคอมไพเลอร์รุ่นเก่าที่ stack . ชั่วคราว
พื้นที่จะไม่ถูกนำกลับมาใช้ใหม่ การใช้ซ้ำซ้อนเชิงรุกอาจนำไปสู่ข้อผิดพลาดรันไทม์ นี้
ตัวเลือกใช้เพื่อควบคุมการเพิ่มประสิทธิภาพการใช้ซ้ำของสแต็กชั่วคราว
-ftrapv
ตัวเลือกนี้สร้างกับดักสำหรับโอเวอร์โฟลว์ที่ลงชื่อในการบวก การลบ
การดำเนินการคูณ
-fwrapv
ตัวเลือกนี้สั่งให้คอมไพเลอร์สมมติว่าโอเวอร์โฟลว์เลขคณิตที่ลงนามของ
บวก ลบ และคูณหารด้วย twos-complement
การเป็นตัวแทน แฟล็กนี้เปิดใช้งานการเพิ่มประสิทธิภาพบางอย่างและปิดการใช้งานอื่นๆ นี้
ตัวเลือกถูกเปิดใช้งานโดยค่าเริ่มต้นสำหรับส่วนหน้า Java ตามที่ภาษา Java ต้องการ
สเปค
- ข้อยกเว้น
เปิดใช้งานการจัดการข้อยกเว้น สร้างรหัสพิเศษที่จำเป็นในการเผยแพร่ข้อยกเว้น สำหรับ
เป้าหมายบางอย่าง หมายความว่า GCC สร้างข้อมูลการคลายเฟรมสำหรับฟังก์ชันทั้งหมด
ซึ่งสามารถสร้างโอเวอร์เฮดของขนาดข้อมูลได้อย่างมีนัยสำคัญแม้ว่าจะไม่ส่งผลกระทบก็ตาม
การดำเนินการ หากคุณไม่ได้ระบุตัวเลือกนี้ GCC จะเปิดใช้งานโดยค่าเริ่มต้นสำหรับภาษา
เช่น C++ ที่ปกติต้องมีการจัดการข้อยกเว้น และปิดใช้งานสำหรับภาษาเช่น
C ที่ปกติไม่ต้องการมัน อย่างไรก็ตาม คุณอาจต้องเปิดใช้งานตัวเลือกนี้เมื่อ
รวบรวมรหัส C ที่ต้องทำงานร่วมกันอย่างถูกต้องด้วยตัวจัดการข้อยกเว้นที่เขียน
ใน C++ คุณอาจต้องการปิดการใช้งานตัวเลือกนี้หากคุณกำลังรวบรวม C++ . ที่เก่ากว่า
โปรแกรมที่ไม่ใช้การจัดการข้อยกเว้น
-fnon-call-ข้อยกเว้น
สร้างรหัสที่ช่วยให้คำแนะนำในการดักจับข้อยกเว้น โปรดทราบว่าสิ่งนี้
ต้องการการสนับสนุนรันไทม์เฉพาะแพลตฟอร์มที่ไม่มีอยู่ทุกที่ นอกจากนี้,
มันอนุญาตเท่านั้น วางกับดัก คำแนะนำในการส่งข้อยกเว้น เช่น การอ้างอิงหน่วยความจำ หรือ
คำแนะนำจุดลอยตัว ไม่อนุญาตให้มีการโยนข้อยกเว้นโดยพลการ
ตัวจัดการสัญญาณเช่น "SIGALRM"
-fdelete-dead-ข้อยกเว้น
พิจารณาว่าคำแนะนำที่อาจมีข้อยกเว้นแต่ไม่ได้มีส่วนทำให้
สามารถเพิ่มประสิทธิภาพการทำงานของโปรแกรมได้ ตัวเลือกนี้เปิดใช้งานโดยค่าเริ่มต้น
สำหรับส่วนหน้าของ Ada ตามที่อนุญาตโดยข้อกำหนดภาษา Ada การเพิ่มประสิทธิภาพ
ผ่านที่ทำให้ข้อยกเว้นที่ตายแล้วถูกเปิดใช้งานอย่างอิสระที่ต่างกัน
ระดับการเพิ่มประสิทธิภาพ
-funwind-ตาราง
คล้ายกับ - ข้อยกเว้นยกเว้นว่ามันเพิ่งสร้างข้อมูลคงที่ที่จำเป็น แต่
ไม่มีผลกับรหัสที่สร้างขึ้นในลักษณะอื่นใด โดยปกติคุณไม่จำเป็นต้อง
เปิดใช้งานตัวเลือกนี้ แทน ตัวประมวลผลภาษาที่ต้องการการจัดการนี้จะเปิดใช้งาน
ในนามของคุณ.
-fasynchronous-ผ่อนคลายตาราง
สร้างตารางคลี่คลายในรูปแบบ DWARF 2 หากเครื่องเป้าหมายรองรับ ตารางคือ
ตรงที่ขอบเขตคำสั่งแต่ละอัน ดังนั้นจึงสามารถใช้สำหรับการคลายสแต็กจาก
เหตุการณ์แบบอะซิงโครนัส (เช่น ดีบักเกอร์หรือตัวรวบรวมขยะ)
-fno-gnu-ไม่ซ้ำกัน
ในระบบที่มีแอสเซมเบลอร์ GNU และไลบรารี C ล่าสุด คอมไพเลอร์ C++ จะใช้
"STB_GNU_UNIQUE" มีผลผูกพันเพื่อให้แน่ใจว่าคำจำกัดความของแม่แบบข้อมูลคงที่สมาชิก
และตัวแปรโลคัลสแตติกในฟังก์ชันอินไลน์จะไม่ซ้ำกันแม้ในที่ที่มี
"RTLD_LOCAL"; นี้เป็นสิ่งจำเป็นเพื่อหลีกเลี่ยงปัญหากับห้องสมุดที่ใช้โดยสองที่แตกต่างกัน
ปลั๊กอิน "RTLD_LOCAL" ขึ้นอยู่กับคำจำกัดความในหนึ่งในนั้นและด้วยเหตุนี้
ไม่เห็นด้วยกับอีกฝ่ายหนึ่งเกี่ยวกับการผูกสัญลักษณ์ แต่สิ่งนี้ทำให้เกิด
"dlclose" ที่จะถูกละเว้นสำหรับ DSO ที่ได้รับผลกระทบ หากโปรแกรมของคุณอาศัยการเริ่มต้นใหม่
ของ DSO ผ่าน "dlclose" และ "dlopen" คุณสามารถใช้ -fno-gnu-ไม่ซ้ำกัน.
-fpcc-struct-return
ส่งคืนค่า "short" "struct" และ "union" ในหน่วยความจำเหมือนกับค่าที่ยาวกว่า แทนที่จะเป็นใน
ทะเบียน อนุสัญญานี้มีประสิทธิภาพน้อยกว่า แต่มีข้อได้เปรียบในการอนุญาต
ความสามารถในการทำงานร่วมกันระหว่างไฟล์ที่คอมไพล์ GCC และไฟล์ที่คอมไพล์ด้วยคอมไพเลอร์อื่น
โดยเฉพาะ Portable C Compiler (pcc)
แบบแผนที่แม่นยำสำหรับการส่งคืนโครงสร้างในหน่วยความจำขึ้นอยู่กับเป้าหมาย
มาโครการกำหนดค่า
โครงสร้างสั้นและสหภาพแรงงานคือโครงสร้างที่มีขนาดและการจัดตำแหน่งตรงกับบางส่วน
ประเภทจำนวนเต็ม
คำเตือน: รหัสที่คอมไพล์ด้วย -fpcc-struct-return สวิตช์ไม่รองรับไบนารี
ด้วยรหัสที่คอมไพล์ด้วย -freg-struct-กลับ สวิตซ์. ใช้เพื่อให้สอดคล้องกับการไม่
อินเทอร์เฟซไบนารีของแอปพลิเคชันเริ่มต้น
-freg-struct-กลับ
ส่งคืนค่า "struct" และ "union" ในรีจิสเตอร์เมื่อเป็นไปได้ นี้มีประสิทธิภาพมากขึ้น
สำหรับโครงสร้างขนาดเล็กกว่า -fpcc-struct-return.
หากคุณระบุไม่ -fpcc-struct-return ไม่ -freg-struct-กลับ, GCC เริ่มต้นเป็น
แบบแผนใดก็ตามที่เป็นมาตรฐานสำหรับเป้าหมาย หากไม่มีข้อตกลงมาตรฐาน
GCC เริ่มต้นเป็น -fpcc-struct-returnยกเว้นเป้าหมายที่ GCC เป็นหลัก
คอมไพเลอร์ ในกรณีเหล่านี้ เราสามารถเลือกมาตรฐาน และเราเลือกสิ่งที่มีประสิทธิภาพมากกว่า
ลงทะเบียนทางเลือกในการคืนสินค้า
คำเตือน: รหัสที่คอมไพล์ด้วย -freg-struct-กลับ สวิตช์ไม่รองรับไบนารี
ด้วยรหัสที่คอมไพล์ด้วย -fpcc-struct-return สวิตซ์. ใช้เพื่อให้สอดคล้องกับการไม่
อินเทอร์เฟซไบนารีของแอปพลิเคชันเริ่มต้น
-fshort-enums
จัดสรรให้กับประเภท "enum" ได้มากเท่าที่ต้องการสำหรับช่วงที่ประกาศของ
ค่าที่เป็นไปได้ โดยเฉพาะประเภท "enum" นั้นเทียบเท่ากับจำนวนเต็มที่น้อยที่สุด
แบบที่มีพื้นที่เพียงพอ
คำเตือน: -fshort-enums สวิตช์ทำให้ GCC สร้างรหัสที่ไม่ใช่ไบนารี
เข้ากันได้กับรหัสที่สร้างขึ้นโดยไม่มีสวิตช์นั้น ใช้เพื่อให้สอดคล้องกับการไม่
อินเทอร์เฟซไบนารีของแอปพลิเคชันเริ่มต้น
-fshort-ดับเบิ้ล
ใช้ขนาดเดียวกันสำหรับ "สองเท่า" สำหรับ "ลอย"
คำเตือน: -fshort-ดับเบิ้ล สวิตช์ทำให้ GCC สร้างรหัสที่ไม่ใช่ไบนารี
เข้ากันได้กับรหัสที่สร้างขึ้นโดยไม่มีสวิตช์นั้น ใช้เพื่อให้สอดคล้องกับการไม่
อินเทอร์เฟซไบนารีของแอปพลิเคชันเริ่มต้น
-fshort-wchar
แทนที่ประเภทพื้นฐานสำหรับ wchar_t ที่จะ Short ไม่ได้ลงนาม int แทนการ
ค่าเริ่มต้นสำหรับเป้าหมาย ตัวเลือกนี้มีประโยชน์สำหรับการสร้างโปรแกรมให้ทำงานภายใต้
ไวน์.
คำเตือน: -fshort-wchar สวิตช์ทำให้ GCC สร้างรหัสที่ไม่ใช่ไบนารี
เข้ากันได้กับรหัสที่สร้างขึ้นโดยไม่มีสวิตช์นั้น ใช้เพื่อให้สอดคล้องกับการไม่
อินเทอร์เฟซไบนารีของแอปพลิเคชันเริ่มต้น
-fno-ธรรมดา
ในโค้ด C ควบคุมตำแหน่งของตัวแปรส่วนกลางที่ยังไม่ได้กำหนดค่าเริ่มต้น คอมไพเลอร์ Unix C
อนุญาตให้ใช้คำจำกัดความของตัวแปรดังกล่าวได้หลายแบบตามธรรมเนียมที่แตกต่างกัน
หน่วยคอมไพล์โดยการวางตัวแปรในบล็อกทั่วไป นี่คือพฤติกรรม
ระบุโดย -fcommonและเป็นค่าเริ่มต้นสำหรับ GCC สำหรับเป้าหมายส่วนใหญ่ ในทางกลับกัน,
ISO C ไม่ต้องการพฤติกรรมนี้ และในบางเป้าหมายอาจมีความเร็วหรือรหัส
การปรับขนาดของการอ้างอิงตัวแปร NS -fno-ธรรมดา ตัวเลือกระบุว่า
คอมไพเลอร์ควรวางตัวแปรส่วนกลางที่ยังไม่ได้กำหนดค่าไว้ในส่วนข้อมูลของอ็อบเจกต์
file แทนที่จะสร้างเป็นบล็อกทั่วไป นี้มีผลว่าถ้า
มีการประกาศตัวแปรเดียวกัน (โดยไม่มี "extern") ในการคอมไพล์ที่ต่างกันสองแบบ คุณจะได้ a
ข้อผิดพลาดที่มีหลายคำจำกัดความเมื่อคุณเชื่อมโยง ในกรณีนี้ต้องคอมไพล์ด้วย
-fcommon แทนที่. กำลังรวบรวมกับ -fno-ธรรมดา เป็นประโยชน์ต่อเป้าหมายที่มัน
ให้ประสิทธิภาพที่ดีขึ้นหรือหากคุณต้องการตรวจสอบว่าโปรแกรมจะทำงานบน
ระบบอื่นๆ ที่ปฏิบัติต่อการประกาศตัวแปรที่ไม่ได้กำหนดค่าเริ่มต้นด้วยวิธีนี้เสมอ
-fno-ident
ไม่ต้องสนใจ #บัตรประจำตัว คำสั่ง
-finhibit-size-คำสั่ง
อย่าส่งออกคำสั่งแอสเซมเบลอร์ ".size" หรือสิ่งอื่นใดที่อาจก่อให้เกิดปัญหา
ถ้าฟังก์ชันถูกแบ่งตรงกลาง และสองส่วนวางที่ตำแหน่งไกล
แยกจากกันในความทรงจำ ตัวเลือกนี้ใช้เมื่อคอมไพล์ crtstuff.c; คุณไม่จำเป็นต้อง
เพื่อใช้สำหรับสิ่งอื่น
-fverbose-asm
ใส่ข้อมูลคำอธิบายเพิ่มเติมในรหัสแอสเซมบลีที่สร้างขึ้นเพื่อให้มีมากขึ้น
อ่านได้ โดยทั่วไป ตัวเลือกนี้ใช้ได้เฉพาะกับผู้ที่ต้องการอ่าน . เท่านั้น
สร้างรหัสแอสเซมบลี (บางทีในขณะที่ดีบั๊กคอมไพเลอร์เอง)
-fno-รายละเอียด-asmค่าดีฟอลต์ทำให้ข้อมูลพิเศษถูกละเว้นและ is
มีประโยชน์เมื่อเปรียบเทียบไฟล์แอสเซมเบลอร์สองไฟล์
-frecord-gcc-สวิตช์
สวิตช์นี้ทำให้บรรทัดคำสั่งที่ใช้เรียกคอมไพเลอร์ถูกบันทึกลงใน
ไฟล์อ็อบเจ็กต์ที่กำลังสร้าง สวิตช์นี้ใช้ได้เฉพาะในบางส่วนเท่านั้น
เป้าหมายและรูปแบบที่แน่นอนของการบันทึกคือรูปแบบไฟล์เป้าหมายและไบนารี
ขึ้นอยู่กับ แต่มักจะใช้รูปแบบของส่วนที่มีข้อความ ASCII นี้
สวิตช์เกี่ยวข้องกับ -fverbose-asm เปลี่ยน แต่นั่นเปลี่ยนเฉพาะระเบียน
ข้อมูลในไฟล์เอาท์พุตของแอสเซมเบลอร์เป็นความคิดเห็น ดังนั้นจึงไม่ไปถึงอ็อบเจกต์
ไฟล์. ดูสิ่งนี้ด้วย -grecord-gcc-สวิตช์ สำหรับวิธีอื่นในการจัดเก็บตัวเลือกคอมไพเลอร์ลงใน
ไฟล์อ็อบเจ็กต์
-fpic
สร้างรหัสตำแหน่งอิสระ (PIC) ที่เหมาะสำหรับใช้ในไลบรารีที่ใช้ร่วมกัน if
รองรับเครื่องเป้าหมาย รหัสดังกล่าวเข้าถึงที่อยู่คงที่ทั้งหมดผ่าน a
ตารางออฟเซ็ตทั่วโลก (GOT) ตัวโหลดแบบไดนามิกแก้ไขรายการ GOT เมื่อ
โปรแกรมเริ่มทำงาน (ไดนามิกโหลดเดอร์ไม่ได้เป็นส่วนหนึ่งของ GCC มันเป็นส่วนหนึ่งของปฏิบัติการ
ระบบ). หากขนาด GOT สำหรับไฟล์สั่งการที่เชื่อมโยงเกินขนาดสูงสุดเฉพาะเครื่อง
ขนาด คุณได้รับข้อความแสดงข้อผิดพลาดจากตัวเชื่อมโยงที่ระบุว่า -fpic ไม่สำเร็จ; ใน
กรณีนั้นให้คอมไพล์ใหม่ด้วย -fPIC แทนที่. (สูงสุดเหล่านี้คือ 8k ใน SPARC และ 32k
ใน m68k และ RS/6000 386 ไม่มีขีดจำกัดดังกล่าว)
รหัสที่ไม่ขึ้นกับตำแหน่งต้องการการสนับสนุนพิเศษ ดังนั้นจึงใช้ได้เฉพาะกับ
บางเครื่อง สำหรับ 386 GCC รองรับ PIC สำหรับ System V แต่ไม่ใช่สำหรับ Sun
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-กระโดดตาราง
อย่าใช้ตารางข้ามสำหรับคำสั่งสวิตช์ แม้ว่าจะมีประสิทธิภาพมากกว่าก็ตาม
มากกว่ากลยุทธ์การสร้างโค้ดอื่นๆ ตัวเลือกนี้ใช้ร่วมกับ
-fpic or -fPIC สำหรับการสร้างโค้ดที่เป็นส่วนหนึ่งของไดนามิกลิงเกอร์และไม่สามารถ
อ้างอิงที่อยู่ของตารางกระโดด ในบางเป้าหมาย ตารางกระโดดไม่จำเป็นต้องใช้ a
GOT และตัวเลือกนี้ไม่จำเป็น
-แก้ไขแล้ว-reg
รักษาทะเบียนชื่อ reg เป็นทะเบียนถาวร รหัสที่สร้างขึ้นไม่ควรอ้างถึง
มัน (ยกเว้นบางทีอาจเป็นตัวชี้สแต็ก ตัวชี้เฟรม หรือในบทบาทคงที่อื่นๆ)
reg ต้องเป็นชื่อทะเบียน ชื่อการลงทะเบียนที่ยอมรับเป็นเครื่องเฉพาะ
และถูกกำหนดไว้ในมาโคร "REGISTER_NAMES" ในไฟล์มาโครคำอธิบายเครื่อง
แฟล็กนี้ไม่มีรูปแบบเชิงลบ เนื่องจากระบุตัวเลือกสามทาง
-fcall-มือสอง-reg
รักษาทะเบียนชื่อ reg เป็นรีจิสเตอร์ที่จัดสรรได้ซึ่งถูกปิดบังโดยฟังก์ชัน
โทร. อาจมีการจัดสรรชั่วคราวหรือตัวแปรที่ไม่อยู่ใน a
เรียก. ฟังก์ชั่นที่คอมไพล์ด้วยวิธีนี้ไม่บันทึกและกู้คืน register reg.
เป็นข้อผิดพลาดในการใช้แฟล็กนี้กับตัวชี้เฟรมหรือตัวชี้สแต็ก การใช้สิ่งนี้
ตั้งค่าสถานะสำหรับการลงทะเบียนอื่น ๆ ที่มีบทบาทแพร่หลายในการทำงานของเครื่อง
โมเดลสร้างผลลัพธ์ที่เลวร้าย
แฟล็กนี้ไม่มีรูปแบบเชิงลบ เนื่องจากระบุตัวเลือกสามทาง
-fcall-บันทึก-reg
รักษาทะเบียนชื่อ reg เป็นการลงทะเบียนที่จัดสรรได้ซึ่งบันทึกโดยฟังก์ชัน มันอาจจะ
จัดสรรแม้กระทั่งสำหรับชั่วคราวหรือตัวแปรที่อยู่ระหว่างการเรียก ฟังก์ชั่น
รวบรวมด้วยวิธีนี้บันทึกและกู้คืนการลงทะเบียน reg ถ้าพวกเขาใช้มัน
เป็นข้อผิดพลาดในการใช้แฟล็กนี้กับตัวชี้เฟรมหรือตัวชี้สแต็ก การใช้สิ่งนี้
ตั้งค่าสถานะสำหรับการลงทะเบียนอื่น ๆ ที่มีบทบาทแพร่หลายในการทำงานของเครื่อง
โมเดลสร้างผลลัพธ์ที่เลวร้าย
ภัยพิบัติประเภทต่าง ๆ เป็นผลมาจากการใช้แฟล็กนี้สำหรับการลงทะเบียนซึ่ง
ค่าฟังก์ชันอาจถูกส่งคืน
แฟล็กนี้ไม่มีรูปแบบเชิงลบ เนื่องจากระบุตัวเลือกสามทาง
-fpack-struct[= .]n]
หากไม่มีค่าที่ระบุ ให้รวมส่วนประกอบโครงสร้างทั้งหมดเข้าด้วยกันโดยไม่มีรู เมื่อ
มีการระบุค่า (ซึ่งต้องเป็นกำลังสองน้อย) สมาชิกโครงสร้างแพ็ค
ตามค่านี้ แสดงถึงการจัดตำแหน่งสูงสุด (นั่นคือ วัตถุที่มี
ข้อกำหนดการจัดตำแหน่งเริ่มต้นที่ใหญ่กว่านี้อาจเป็นผลลัพธ์ที่ไม่จัดตำแหน่งที่
ตำแหน่งที่เหมาะสมต่อไป
คำเตือน: -fpack-โครงสร้าง สวิตช์ทำให้ GCC สร้างรหัสที่ไม่ใช่ไบนารี
เข้ากันได้กับรหัสที่สร้างขึ้นโดยไม่มีสวิตช์นั้น นอกจากนี้ยังทำให้รหัส
ไม่เหมาะสม ใช้เพื่อให้สอดคล้องกับอินเทอร์เฟซไบนารีของแอปพลิเคชันที่ไม่ใช่ค่าเริ่มต้น
-finstrument-ฟังก์ชั่น
สร้างการเรียกเครื่องมือวัดสำหรับการเข้าและออกจากฟังก์ชัน หลังเลิกงาน
รายการและก่อนออกจากฟังก์ชัน ฟังก์ชันโปรไฟล์ต่อไปนี้จะเรียกว่า with
ที่อยู่ของฟังก์ชันปัจจุบันและไซต์การโทร (ในบางแพลตฟอร์ม
"__builtin_return_address" ไม่ทำงานเกินฟังก์ชันปัจจุบัน ดังนั้น callsite
ข้อมูลอาจไม่สามารถใช้ได้กับฟังก์ชันการทำโปรไฟล์ มิฉะนั้น)
เป็นโมฆะ __cyg_profile_func_enter (เป็นโมฆะ * this_fn,
เป็นโมฆะ *call_site);
เป็นโมฆะ __cyg_profile_func_exit (เป็นโมฆะ * this_fn,
เป็นโมฆะ *call_site);
อาร์กิวเมนต์แรกคือแอดเดรสของจุดเริ่มต้นของฟังก์ชันปัจจุบัน ซึ่งอาจจะเป็น
มองขึ้นไปในตารางสัญลักษณ์
เครื่องมือนี้ยังใช้สำหรับฟังก์ชันที่ขยายแบบอินไลน์ในฟังก์ชันอื่นๆ ด้วย
การเรียกโปรไฟล์ระบุตำแหน่ง แนวความคิด ฟังก์ชันอินไลน์ถูกป้อนและ
ออก ซึ่งหมายความว่าต้องมีเวอร์ชันที่กำหนดแอดเดรสของฟังก์ชันดังกล่าวได้ ถ้า
การใช้ฟังก์ชันทั้งหมดของคุณมีการขยายแบบอินไลน์ ซึ่งอาจหมายถึงการขยายเพิ่มเติม
ของขนาดรหัส ถ้าคุณใช้ extern แบบอินไลน์ ในโค้ด C ของคุณ ซึ่งเป็นเวอร์ชันที่สามารถระบุตำแหน่งได้ของเช่น
จะต้องจัดให้มีฟังก์ชั่น (ปกติก็เป็นอย่างนี้อยู่แล้ว แต่ถ้าโชคดี
และเครื่องมือเพิ่มประสิทธิภาพจะขยายฟังก์ชันแบบอินไลน์อยู่เสมอ คุณอาจหนีไม่พ้น
โดยไม่ต้องให้สำเนาคงที่)
ฟังก์ชั่นอาจได้รับแอตทริบิวต์ "no_instrument_function" ซึ่งในกรณีนี้
เครื่องมือวัดไม่ได้ทำ สามารถใช้ตัวอย่างเช่นสำหรับการทำโปรไฟล์
ฟังก์ชันที่ระบุไว้ข้างต้น รูทีนการขัดจังหวะที่มีลำดับความสำคัญสูง และฟังก์ชันใดๆ ที่
ไม่สามารถเรียกฟังก์ชันการทำโปรไฟล์ได้อย่างปลอดภัย (อาจเป็นตัวจัดการสัญญาณหาก
รูทีนการทำโปรไฟล์จะสร้างเอาต์พุตหรือจัดสรรหน่วยความจำ)
-finstrument-functions-exclude-file-list=ไฟล์,ไฟล์...
ตั้งค่ารายการฟังก์ชันที่ไม่รวมอยู่ในเครื่องมือวัด (ดูคำอธิบาย
ของ "-finstrument-functions") หากไฟล์ที่มีนิยามฟังก์ชันตรงกัน
กับหนึ่งใน ไฟล์ฟังก์ชันนั้นจะไม่ถูกวัด การแข่งขันเสร็จสิ้นเมื่อ
สตริงย่อย: ถ้า ไฟล์ พารามิเตอร์เป็นสตริงย่อยของชื่อไฟล์ซึ่งถือว่าเป็น
เป็นการแข่งขัน
ตัวอย่างเช่น:
-finstrument-functions-exclude-file-list=/bits/stl,include/sys
ไม่รวมฟังก์ชันอินไลน์ที่กำหนดไว้ในไฟล์ที่มีชื่อพาธที่มี "/bits/stl" หรือ
"รวม/sys"
หากคุณต้องการใส่ตัวอักษร ',' ลงในตัวใดตัวหนึ่งด้วยเหตุผลบางอย่าง ซิม, เขียน ','. สำหรับ
ตัวอย่าง "-finstrument-functions-exclude-file-list=',,tmp'" (สังเกตเครื่องหมายคำพูดเดียว
รอบตัวเลือก)
-finstrument-functions-exclude-function-list=ซิม,ซิม...
สิ่งนี้คล้ายกับ "-finstrument-functions-exclude-file-list" แต่ตัวเลือกนี้จะตั้งค่า
รายการชื่อฟังก์ชันที่จะแยกออกจากเครื่องมือวัด ชื่อฟังก์ชันto
bematched คือชื่อที่ผู้ใช้มองเห็นได้ เช่น "vector blah(const vector &)",
ไม่ใช่ชื่อที่สับสนภายใน (เช่น "_Z4blahRSt6vectorIiSaIiEE") การแข่งขันเสร็จสิ้น
ในสตริงย่อย: ถ้า ซิม พารามิเตอร์เป็นสตริงย่อยของชื่อฟังก์ชัน มันคือ
ถือว่าเป็นแมตช์ สำหรับตัวระบุเพิ่มเติม C99 และ C++ ชื่อฟังก์ชัน
ต้องระบุเป็น UTF-8 ไม่ใช้ชื่ออักขระสากล
-fstack-ตรวจสอบ
สร้างรหัสเพื่อตรวจสอบว่าคุณไม่ได้ข้ามขอบเขตของสแต็ก คุณ
ควรระบุแฟล็กนี้หากคุณกำลังทำงานในสภาพแวดล้อมที่มีหลายเธรด
แต่คุณไม่จำเป็นต้องระบุในสภาพแวดล้อมแบบเธรดเดียวตั้งแต่ stack
โอเวอร์โฟลว์จะถูกตรวจพบโดยอัตโนมัติในเกือบทุกระบบหากมีเพียงหนึ่งสแต็ก
โปรดทราบว่าสวิตช์นี้ไม่ได้ทำให้เกิดการตรวจสอบจริง ปฏิบัติการ
ระบบหรือภาษารันไทม์ต้องทำอย่างนั้น สวิตช์ทำให้เกิดการสร้างรหัสเป็น
ตรวจสอบให้แน่ใจว่าพวกเขาเห็นสแตกถูกขยาย
คุณสามารถระบุพารามิเตอร์สตริงเพิ่มเติมได้: "ไม่" หมายถึงไม่มีการตรวจสอบ "ทั่วไป"
หมายถึง บังคับให้ใช้การตรวจสอบแบบเก่า "เฉพาะ" หมายถึง ใช้การตรวจสอบที่ดีที่สุด
วิธีการและเทียบเท่ากับเปล่า -fstack-ตรวจสอบ.
การตรวจสอบแบบเก่าเป็นกลไกทั่วไปที่ไม่ต้องการการสนับสนุนเป้าหมายเฉพาะใน
คอมไพเลอร์ แต่มีข้อเสียดังต่อไปนี้:
1. แก้ไขกลยุทธ์การจัดสรรสำหรับออบเจ็กต์ขนาดใหญ่: จะถูกจัดสรรเสมอ
แบบไดนามิกหากขนาดเกินเกณฑ์ที่กำหนด
2. แก้ไขการจำกัดขนาดของสแตติกเฟรมของฟังก์ชัน: เมื่อเติม a
ฟังก์ชันเฉพาะ การตรวจสอบสแต็กไม่น่าเชื่อถือและมีการออกคำเตือนโดย
คอมไพเลอร์
3. ความไร้ประสิทธิภาพ: เนื่องจากทั้งกลยุทธ์การจัดสรรที่ปรับเปลี่ยนและทั่วไป
การนำไปใช้งาน ประสิทธิภาพของโค้ดถูกขัดขวาง
โปรดทราบว่าการตรวจสอบสแต็กแบบเก่าเป็นวิธีสำรองสำหรับ "เฉพาะ" เช่นกันหากไม่มี
เพิ่มการสนับสนุนเป้าหมายในคอมไพเลอร์แล้ว
-fstack-จำกัด-ลงทะเบียน=reg
-fstack-limit- symbol=ซิม
-fno-stack-จำกัด
สร้างรหัสเพื่อให้แน่ใจว่าสแต็กไม่เติบโตเกินค่าที่กำหนดเช่นกัน
ค่าของการลงทะเบียนหรือที่อยู่ของสัญลักษณ์ หากต้องการสแต็กที่ใหญ่กว่า a
สัญญาณจะเพิ่มขึ้นในเวลาทำงาน สำหรับเป้าหมายส่วนใหญ่ สัญญาณจะถูกยกขึ้นก่อน stack
ล้ำเขตแดนจึงจับสัญญาณได้โดยไม่รับสายพิเศษ
ข้อควรระวัง
ตัวอย่างเช่น ถ้า stack เริ่มต้นที่ Absolute address 0x80000000 และเติบโตต่ำลง
คุณสามารถใช้แฟล็ก -fstack-limit- symbol=__stack_limit และ
-Wl,--defsym,__stack_limit=0x7ffe0000 เพื่อบังคับใช้ขีด จำกัด สแต็ก 128KB สังเกตว่า
สิ่งนี้อาจใช้งานได้กับตัวเชื่อมโยง GNU เท่านั้น
-fsplit-กอง
สร้างโค้ดเพื่อแยกสแต็กโดยอัตโนมัติก่อนที่จะโอเวอร์โฟลว์ ผลลัพท์ที่ได้
โปรแกรมมีสแต็กที่ไม่ต่อเนื่องกันซึ่งสามารถโอเวอร์โฟลว์ได้ก็ต่อเมื่อโปรแกรมไม่สามารถ
จัดสรรหน่วยความจำเพิ่มเติม สิ่งนี้มีประโยชน์มากที่สุดเมื่อรันโปรแกรมเธรด เนื่องจากมัน
ไม่จำเป็นต้องคำนวณขนาดสแต็กที่ดีเพื่อใช้สำหรับแต่ละเธรดอีกต่อไป นี่คือ
ขณะนี้ใช้งานเฉพาะสำหรับ i386 และ x86_64 แบ็กเอนด์ที่รัน GNU/Linux
เมื่อคอมไพล์โค้ดด้วย -fsplit-กอง รหัสการโทรที่คอมไพล์โดยไม่มี -fsplit-กองมี
อาจมีพื้นที่สแต็กไม่มากนักสำหรับโค้ดหลังที่จะรัน หากรวบรวมทั้งหมด
รหัสรวมทั้งรหัสห้องสมุดด้วย -fsplit-กอง ไม่ใช่ตัวเลือก ดังนั้นตัวเชื่อมโยงสามารถ
แก้ไขการโทรเหล่านี้เพื่อให้โค้ดคอมไพล์โดยไม่ต้อง -fsplit-กอง มักจะมีขนาดใหญ่
ซ้อนกัน. รองรับสิ่งนี้ใน gold linker ใน GNU binutils รีลีส
2.21 และใหม่กว่า
-fleading-ขีดเส้นใต้
ตัวเลือกนี้และคู่กัน -fno-ชั้นนำขีดเส้นใต้, บังคับเปลี่ยนวิธี C
สัญลักษณ์แสดงอยู่ในไฟล์อ็อบเจ็กต์ การใช้งานอย่างหนึ่งคือการช่วยเชื่อมโยงกับมรดก
รหัสการประกอบ
คำเตือน: -fleading-ขีดเส้นใต้ สวิตช์ทำให้ GCC สร้างรหัสที่ไม่ใช่
ไบนารีเข้ากันได้กับรหัสที่สร้างขึ้นโดยไม่มีสวิตช์นั้น ใช้เพื่อให้สอดคล้องกับ a
อินเทอร์เฟซไบนารีของแอปพลิเคชันที่ไม่ใช่ค่าเริ่มต้น ไม่ใช่ทุกเป้าหมายที่ให้การสนับสนุนอย่างเต็มที่
สำหรับสวิตช์นี้
-ftls-รุ่น=แบบ
เปลี่ยนโมเดลการจัดเก็บ thread-local ที่จะใช้ NS แบบ อาร์กิวเมนต์ควรเป็นหนึ่งใน
"global-dynamic", "local-dynamic", "initial-exec" หรือ "local-exec"
ค่าเริ่มต้นโดยไม่ต้อง -fpic คือ "initial-exec"; กับ -fpic ค่าเริ่มต้นคือ
"โลกไดนามิก".
-การมองเห็นได้=ค่าเริ่มต้น|ภายใน|ซ่อนอยู่|มีการป้องกัน
ตั้งค่าการมองเห็นสัญลักษณ์ภาพ ELF เริ่มต้นเป็นตัวเลือกที่ระบุ---สัญลักษณ์ทั้งหมดคือ
ทำเครื่องหมายด้วยสิ่งนี้เว้นแต่จะถูกแทนที่ภายในรหัส การใช้คุณสมบัตินี้สามารถมาก
ปรับปรุงการลิงก์และเวลาในการโหลดของไลบรารีอ็อบเจ็กต์ที่ใช้ร่วมกันอย่างมาก ให้ผลมากขึ้น
โค้ดที่ปรับให้เหมาะสม ให้การส่งออก API ที่ใกล้เคียงสมบูรณ์แบบ และป้องกันการชนกันของสัญลักษณ์ มันคือ
เสถียร แนะนำให้คุณใช้สิ่งนี้ในวัตถุที่ใช้ร่วมกันที่คุณแจกจ่าย
แม้จะมีศัพท์เฉพาะ "ค่าเริ่มต้น" หมายถึงสาธารณะเสมอ คือสามารถเชื่อมโยงได้
ต่อต้านจากภายนอกวัตถุที่ใช้ร่วมกัน "ป้องกัน" และ "ภายใน" ค่อนข้างไร้ประโยชน์
ในการใช้งานจริง ดังนั้นตัวเลือกอื่นที่ใช้กันทั่วไปเท่านั้นคือ "ซ่อน" ค่าเริ่มต้น
if -การมองเห็นได้ชัดเจน ไม่ได้ระบุเป็น "ค่าเริ่มต้น" กล่าวคือ ทำให้ทุกสัญลักษณ์เป็นสาธารณะ---นี้
ทำให้เกิดพฤติกรรมเช่นเดียวกับ GCC เวอร์ชันก่อนหน้า
คำอธิบายที่ดีเกี่ยวกับประโยชน์ที่เสนอโดยการทำให้แน่ใจว่าสัญลักษณ์ ELF นั้นถูกต้อง
การมองเห็นได้รับจาก "วิธีการเขียนไลบรารีที่ใช้ร่วมกัน" โดย Ulrich Drepper (ซึ่งสามารถเป็น .ได้
พบได้ที่http://people.redhat.com/~drepper/>)---แต่ก็สร้างโซลูชันที่ยอดเยี่ยมขึ้น
เป็นไปได้โดยตัวเลือกนี้เพื่อทำเครื่องหมายสิ่งที่ซ่อนไว้เมื่อค่าเริ่มต้นเป็นสาธารณะคือการทำ
ค่าเริ่มต้นที่ซ่อนอยู่และทำเครื่องหมายสิ่งที่เป็นสาธารณะ นี่เป็นบรรทัดฐานของ DLL บน Windows และ
กับ -fvisibility=ซ่อนอยู่ และ "__attribute__ ((visibility("default")))" แทน
"__declspec(dllexport)" คุณได้รับความหมายที่เกือบจะเหมือนกันพร้อมไวยากรณ์ที่เหมือนกัน
ซึ่งเป็นประโยชน์อย่างมากสำหรับผู้ที่ทำงานข้ามแพลตฟอร์ม
สำหรับผู้ที่เพิ่มการมองเห็นรองรับรหัสที่มีอยู่ คุณอาจพบ #ปรากมา GCC
ความชัดเจน ของการใช้งาน ใช้งานได้โดยคุณแนบประกาศที่คุณต้องการตั้งค่า
การมองเห็นด้วย (เช่น) #ปรากมา GCC ความชัดเจน ดัน (ซ่อน) และ #ปรากมา GCC
ความชัดเจน ป๊อป. โปรดจำไว้ว่าควรดูสัญลักษณ์การมองเห็น as ส่วนหนึ่ง of
API อินเตอร์เฟซ สัญญา และด้วยเหตุนี้โค้ดใหม่ทั้งหมดจึงควรระบุการเปิดเผยเสมอเมื่อ
ไม่ใช่ค่าเริ่มต้น กล่าวคือ ประกาศเฉพาะสำหรับใช้ภายใน DSO ในพื้นที่ควร เสมอ
ถูกทำเครื่องหมายอย่างชัดเจนว่าถูกซ่อนเพื่อหลีกเลี่ยงค่าใช้จ่ายทางอ้อม PLT --- การทำเช่นนี้
ชัดเจนมากยังช่วยให้อ่านง่ายและจัดทำรหัสด้วยตนเอง สังเกตว่า
เนื่องจากข้อกำหนดข้อกำหนด ISO C++ "ตัวดำเนินการใหม่" และ "ตัวดำเนินการลบ" จะต้อง
เป็นการมองเห็นเริ่มต้นเสมอ
โปรดทราบว่าส่วนหัวจากภายนอกโครงการของคุณ โดยเฉพาะส่วนหัวของระบบและ
ส่วนหัวจากไลบรารีอื่น ๆ ที่คุณใช้ อาจไม่ได้คาดหวังให้คอมไพล์ด้วย
การมองเห็นอื่นที่ไม่ใช่ค่าเริ่มต้น คุณอาจต้องพูดอย่างชัดเจนว่า #ปรากมา GCC
ความชัดเจน กด (ค่าเริ่มต้น) ก่อนที่จะรวมส่วนหัวดังกล่าว
extern การประกาศไม่ได้รับผลกระทบจาก -การมองเห็นได้ชัดเจนดังนั้นรหัสจำนวนมากจึงสามารถ
เรียบเรียงใหม่ด้วย -fvisibility=ซ่อนอยู่ โดยไม่มีการปรับเปลี่ยน อย่างไรก็ตาม นี่หมายความว่า
การเรียกใช้ฟังก์ชัน "ภายนอก" โดยไม่มีการมองเห็นที่ชัดเจนใช้ PLT ดังนั้นจึงเป็นมากกว่า
มีประสิทธิภาพในการใช้ "__attribute ((การมองเห็น))" และ/หรือ "#pragma GCC การมองเห็น" เพื่อบอก
คอมไพเลอร์ซึ่งการประกาศ "ภายนอก" ควรถูกมองว่าถูกซ่อนไว้
โปรดทราบว่า -การมองเห็นได้ชัดเจน มีผลกับเอนทิตีการเชื่อมโยงที่คลุมเครือของ C++ ซึ่งหมายความว่าสำหรับ
ตัวอย่าง คลาสข้อยกเว้นที่ส่งระหว่าง DSO จะต้องทำเครื่องหมายอย่างชัดเจน
ด้วยการมองเห็นเริ่มต้นเพื่อให้ พิมพ์_ข้อมูล โหนดจะรวมกันเป็นหนึ่งเดียวระหว่าง DSO
ภาพรวมเทคนิค ประโยชน์ และวิธีการใช้อยู่ที่
<http://gcc.gnu.org/wiki/Visibility>.
-fstrict ระเหยบิตฟิลด์
ควรใช้ตัวเลือกนี้หากเข้าถึงบิตฟิลด์ที่ระเหยได้ (หรือโครงสร้างอื่นๆ
ฟิลด์แม้ว่าคอมไพเลอร์มักจะให้เกียรติประเภทเหล่านั้นอยู่แล้ว) ควรใช้ single
การเข้าถึงความกว้างของประเภทของฟิลด์ จัดชิดกับการจัดตำแหน่งที่เป็นธรรมชาติถ้าเป็นไปได้
ตัวอย่างเช่น เป้าหมายที่มีการลงทะเบียนอุปกรณ์ต่อพ่วงที่แมปหน่วยความจำอาจต้องการทั้งหมดเช่น
เข้าถึงได้กว้าง 16 บิต; ด้วยแฟล็กนี้ คุณสามารถประกาศบิตฟิลด์รอบข้างทั้งหมด
เป็น "unsigned short" (สมมติว่า short คือ 16 บิตสำหรับเป้าหมายเหล่านี้) เพื่อบังคับให้ GCC ใช้
การเข้าถึงแบบ 16 บิตแทนที่จะเป็นแบบ 32 บิตอาจมีประสิทธิภาพมากกว่า
หากปิดใช้งานตัวเลือกนี้ คอมไพเลอร์จะใช้คำสั่งที่มีประสิทธิภาพสูงสุด ใน
ตัวอย่างก่อนหน้านี้ อาจเป็นคำสั่งการโหลดแบบ 32 บิต แม้ว่าจะเข้าถึงได้ก็ตาม
ไบต์ที่ไม่มีส่วนใด ๆ ของบิตฟิลด์ หรือรีจิสเตอร์ที่แมปหน่วยความจำ
ไม่เกี่ยวข้องกับสิ่งที่กำลังปรับปรุง
หากเป้าหมายต้องการการจัดตำแหน่งที่เข้มงวด และการให้เกียรติประเภทฟิลด์จะต้องใช้
การละเมิดการจัดแนวนี้จะมีการออกคำเตือน หากฟิลด์มีแอตทริบิวต์ "บรรจุ"
การเข้าถึงทำได้โดยไม่ต้องเคารพประเภทฟิลด์ ถ้าสนามไม่มี
แอตทริบิวต์ "packed" การเข้าถึงเสร็จสิ้นตามประเภทฟิลด์ ในทั้งสองกรณี GCC
ถือว่าผู้ใช้รู้บางอย่างเกี่ยวกับฮาร์ดแวร์เป้าหมายที่ไม่ทราบ
ค่าเริ่มต้นของตัวเลือกนี้ถูกกำหนดโดยอินเทอร์เฟซไบนารีของแอปพลิเคชันสำหรับ
โปรเซสเซอร์เป้าหมาย
-fsync-libcalls
ตัวเลือกนี้ควบคุมว่าอินสแตนซ์นอกบรรทัดของตระกูล "__sync" ของ
ฟังก์ชันต่างๆ สามารถใช้เพื่อใช้งานฟังก์ชันตระกูล C++11 "__atomic"
ค่าเริ่มต้นของตัวเลือกนี้ถูกเปิดใช้งาน ดังนั้นจึงเป็นเพียงรูปแบบที่มีประโยชน์ของ option
is -fno-ซิงค์-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
โครงการ LC_CTYPE ตัวแปรสภาพแวดล้อมระบุการจำแนกประเภทอักขระ GCC ใช้มันเพื่อ
กำหนดขอบเขตอักขระในสตริง นี่เป็นสิ่งจำเป็นสำหรับ multibyte
การเข้ารหัสที่มีเครื่องหมายคำพูดและอักขระหลีกที่ตีความว่าเป็น
ปลายสายหรือหลบหนี
โครงการ LC_MESSAGES ตัวแปรสภาพแวดล้อมระบุภาษาที่จะใช้ในการวินิจฉัย
ข้อความ
ถ้า LC_ALL ตัวแปรสภาพแวดล้อมถูกตั้งค่าไว้ จะแทนที่ค่าของ LC_CTYPE และ
LC_MESSAGES; มิฉะนั้น, LC_CTYPE และ LC_MESSAGES ค่าเริ่มต้นเป็นค่าของ ภาษา
ตัวแปรสภาพแวดล้อม หากไม่มีการตั้งค่าตัวแปรเหล่านี้ GCC จะใช้ค่าเริ่มต้นเป็นแบบดั้งเดิม
ค พฤติกรรมภาษาอังกฤษ
ทีเอ็มพีดีอาร์
If ทีเอ็มพีดีอาร์ ถูกตั้งค่า ซึ่งจะระบุไดเร็กทอรีที่จะใช้สำหรับไฟล์ชั่วคราว GCC ใช้
ไฟล์ชั่วคราวเพื่อเก็บเอาท์พุตของการคอมไพล์หนึ่งสเตจซึ่งจะใช้เป็น
อินพุตไปยังสเตจถัดไป: ตัวอย่างเช่น เอาต์พุตของพรีโปรเซสเซอร์ ซึ่งก็คือ
อินพุตไปยังคอมไพเลอร์ที่เหมาะสม
GCC_COMPARE_DEBUG
การตั้งค่า GCC_COMPARE_DEBUG เกือบจะเทียบเท่ากับการผ่าน -fcompare-debug ไป
ไดรเวอร์คอมไพเลอร์ ดูเอกสารประกอบของตัวเลือกนี้สำหรับรายละเอียดเพิ่มเติม
GCC_EXEC_PREFIX
If GCC_EXEC_PREFIX ถูกตั้งค่า โดยระบุคำนำหน้าเพื่อใช้ในชื่อของ
โปรแกรมย่อยที่ดำเนินการโดยคอมไพเลอร์ ไม่มีการเพิ่มเครื่องหมายทับเมื่อคำนำหน้านี้รวมกัน
ด้วยชื่อของโปรแกรมย่อย แต่คุณสามารถระบุคำนำหน้าที่ลงท้ายด้วยเครื่องหมายทับ if
คุณต้องการ
If GCC_EXEC_PREFIX ไม่ได้ตั้งค่า GCC พยายามหาคำนำหน้าที่เหมาะสมที่จะใช้
ตามชื่อพาธที่เรียกใช้
หาก GCC ไม่พบโปรแกรมย่อยโดยใช้คำนำหน้าที่ระบุ GCC จะพยายามค้นหาใน
สถานที่ปกติสำหรับโปรแกรมย่อย
ค่าเริ่มต้นของ GCC_EXEC_PREFIX is คำนำหน้า/lib/gcc/ ที่ไหน อุปสรรค เป็นคำนำหน้าของ
คอมไพเลอร์ที่ติดตั้ง ในหลายกรณี อุปสรรค คือค่าของ "prefix" เมื่อคุณรัน the
กำหนดค่า ต้นฉบับ
คำนำหน้าอื่นๆ ที่ระบุด้วย -B มีความสำคัญเหนือคำนำหน้านี้
คำนำหน้านี้ยังใช้สำหรับการค้นหาไฟล์เช่น crt0.o ที่ใช้ในการเชื่อม
นอกจากนี้ คำนำหน้ายังใช้ในลักษณะที่ผิดปกติในการค้นหาไดเร็กทอรีที่จะค้นหา
สำหรับไฟล์ส่วนหัว สำหรับแต่ละไดเร็กทอรีมาตรฐานที่มีชื่อขึ้นต้นโดยปกติ
กับ /usr/local/lib/gcc (ให้แม่นยำยิ่งขึ้นด้วยค่าของ GCC_INCLUDE_DIR), GCC พยายาม
แทนที่ที่ขึ้นต้นด้วยคำนำหน้าที่ระบุเพื่อสร้างไดเร็กทอรีสำรอง
ชื่อ. ดังนั้นด้วย -บีฟู/, การค้นหา GCC ฟู/บาร์ ก่อนที่มันจะค้นหามาตรฐาน
ไดเรกทอรี /usr/local/lib/bar. หากไดเร็กทอรีมาตรฐานเริ่มต้นด้วย configuration
อุปสรรค แล้วค่าของ อุปสรรค ถูกแทนที่ด้วย GCC_EXEC_PREFIX เมื่อมองหาส่วนหัว
ไฟล์
คอมไพเลอร์_PATH
คุณค่าของ คอมไพเลอร์_PATH เป็นรายการไดเร็กทอรีที่คั่นด้วยโคลอนเหมือน เส้นทาง.
GCC ลองใช้ไดเร็กทอรีที่ระบุเมื่อค้นหาโปรแกรมย่อย หากไม่สามารถ
ค้นหาโปรแกรมย่อยโดยใช้ GCC_EXEC_PREFIX.
Library_Path
คุณค่าของ Library_Path เป็นรายการไดเร็กทอรีที่คั่นด้วยโคลอนเหมือน เส้นทาง.
เมื่อกำหนดค่าเป็นคอมไพเลอร์ดั้งเดิม GCC จะพยายามไดเร็กทอรีที่ระบุเมื่อ
ค้นหาไฟล์ linker พิเศษ ถ้าหาไม่เจอโดยใช้ GCC_EXEC_PREFIX.
การลิงก์โดยใช้ GCC ยังใช้ไดเร็กทอรีเหล่านี้เมื่อค้นหาไลบรารีทั่วไป
สำหรับ -l ตัวเลือก (แต่ไดเร็กทอรีที่ระบุด้วย -L มาก่อน).
ภาษา
ตัวแปรนี้ใช้เพื่อส่งข้อมูลโลแคลไปยังคอมไพเลอร์ วิธีหนึ่งที่
ข้อมูลนี้ใช้เพื่อกำหนดชุดอักขระที่จะใช้เมื่อ character
ลิเทอรัล สตริง และความคิดเห็น แยกวิเคราะห์ในภาษา C และ C++ เมื่อคอมไพเลอร์เป็น
กำหนดค่าให้อนุญาตอักขระหลายไบต์ ค่าต่อไปนี้สำหรับ ภาษา เป็น
ได้รับการยอมรับ:
ซี-จิส
จดจำอักขระ JIS
ซี-เอสจิส
จดจำอักขระ SJIS
C-EUCJP
รู้จักอักขระ EUCJP
If ภาษา ไม่ได้กำหนดไว้หรือหากมีค่าอื่น ๆ คอมไพเลอร์จะใช้ "mblen"
และ "mbtowc" ตามที่กำหนดโดยโลแคลเริ่มต้นเพื่อจดจำและแปล multibyte
อักขระ
ตัวแปรสภาพแวดล้อมเพิ่มเติมบางตัวส่งผลต่อพฤติกรรมของตัวประมวลผลล่วงหน้า
ซีพีเอธ
C_INCLUDE_PATH
CPLUS_INCLUDE_PATH
OBJC_INCLUDE_PATH
ค่าของตัวแปรแต่ละตัวคือรายการของไดเร็กทอรีคั่นด้วยอักขระพิเศษมาก
กดไลก์ เส้นทางเพื่อค้นหาไฟล์ส่วนหัว ตัวละครพิเศษ,
"PATH_SEPARATOR" ขึ้นอยู่กับเป้าหมายและกำหนดที่เวลาบิลด์ GCC สำหรับ Microsoft
เป้าหมายที่ใช้ Windows คือเครื่องหมายอัฒภาค และสำหรับเป้าหมายอื่นๆ เกือบทั้งหมด จะเป็น
ลำไส้ใหญ่.
ซีพีเอธ ระบุรายการของไดเร็กทอรีที่จะค้นหาราวกับว่าระบุด้วย -Iแต่
หลังจากเส้นทางใด ๆ ที่กำหนดด้วย -I ตัวเลือกบนบรรทัดคำสั่ง ตัวแปรสภาพแวดล้อมนี้
ใช้โดยไม่คำนึงว่าภาษาใดจะถูกประมวลผลล่วงหน้า
ตัวแปรสภาพแวดล้อมที่เหลือใช้เฉพาะเมื่อประมวลผลล่วงหน้าโดยเฉพาะ
ภาษาที่ระบุ แต่ละรายการระบุรายการของไดเร็กทอรีที่จะค้นหาราวกับว่า
ระบุด้วย -ไอซิสเต็มแต่หลังจากเส้นทางใด ๆ ที่ให้ไว้กับ -ไอซิสเต็ม ตัวเลือกบน
บรรทัดคำสั่ง.
ในตัวแปรทั้งหมดเหล่านี้ องค์ประกอบว่างจะสั่งให้คอมไพเลอร์ค้นหาปัจจุบัน
ไดเรกทอรีการทำงาน องค์ประกอบว่างสามารถปรากฏที่จุดเริ่มต้นหรือจุดสิ้นสุดของเส้นทาง สำหรับ
เช่น ถ้าค่าของ ซีพีเอธ คือ ":/special/include" ซึ่งมีผลเหมือนกับ
-ผม. -I/พิเศษ/รวม.
การพึ่งพาอาศัยกัน_OUTPUT
หากมีการตั้งค่าตัวแปรนี้ ค่าของตัวแปรนี้จะระบุวิธีการแสดงการพึ่งพาสำหรับ Make based
ในไฟล์ส่วนหัวที่ไม่ใช่ระบบที่ประมวลผลโดยคอมไพเลอร์ ไฟล์ส่วนหัวของระบบคือ
ละเว้นในผลลัพธ์การพึ่งพา
คุณค่าของ การพึ่งพาอาศัยกัน_OUTPUT สามารถเป็นเพียงชื่อไฟล์ได้ ซึ่งในกรณีนี้ Make rule
ถูกเขียนไปยังไฟล์นั้น โดยเดาชื่อเป้าหมายจากชื่อไฟล์ต้นทาง หรือ
ค่าสามารถมีรูปแบบ ไฟล์ เป้าซึ่งในกรณีนี้กฎจะถูกเขียนไปยัง file ไฟล์
การใช้ เป้า เป็นชื่อเป้าหมาย
กล่าวอีกนัยหนึ่งตัวแปรสภาพแวดล้อมนี้เทียบเท่ากับการรวมตัวเลือก -มม
และ -มฟล, พร้อมตัวเลือก -มท สลับกันด้วย
SUNPRO_DEPENDENCIES
ตัวแปรนี้เหมือนกับ การพึ่งพาอาศัยกัน_OUTPUT (ดูด้านบน) ยกเว้นระบบนั้น
ไฟล์ส่วนหัวจะไม่ถูกละเลย ดังนั้นจึงหมายความว่า -M มากกว่า -มม. อย่างไรก็ตาม
ละเว้นการพึ่งพาไฟล์อินพุตหลัก
ใช้ aarch64-linux-gnu-g++-4.8 ออนไลน์โดยใช้บริการ onworks.net