powerpc 您所在的位置:网站首页 fvtable powerpc

powerpc

2023-04-26 12:48| 来源: 网络整理| 查看: 265

PROGRAM:

NAMA gcc - GNU proyek C dan C++ compiler

RINGKASAN gcc [-c|-S|-E] [-std=standar] [-g] [-hal] [-Otingkat] [-Wmemperingatkan...] [-Medantik] [-Idir...] [-Ldir...] [-Dmakro[=defn]...] [-Umakro] [-fOption...] [-mopsi mesin...] [-o file keluar] [@fillet] masuk...

Hanya opsi yang paling berguna yang tercantum di sini; lihat di bawah untuk sisanya. g ++ menerima sebagian besar opsi yang sama dengan gcc.

DESKRIPSI Saat Anda memanggil GCC, biasanya melakukan pra-pemrosesan, kompilasi, perakitan, dan penautan. "Opsi keseluruhan" memungkinkan Anda menghentikan proses ini pada tahap perantara. Untuk contoh, itu -c opsi mengatakan untuk tidak menjalankan tautan. Maka outputnya terdiri dari objek file yang dikeluarkan oleh assembler.

Pilihan lain diteruskan ke satu tahap pemrosesan. Beberapa opsi mengontrol preprocessor dan lain-lain compiler itu sendiri. Namun opsi lain mengontrol assembler dan penghubung; sebagian besar tidak didokumentasikan di sini, karena Anda jarang perlu menggunakannya.

Sebagian besar opsi baris perintah yang dapat Anda gunakan dengan GCC berguna untuk program C; Kapan sebuah opsi hanya berguna dengan bahasa lain (biasanya C++), penjelasannya mengatakan demikian secara eksplisit. Jika deskripsi untuk opsi tertentu tidak menyebutkan sumber bahasa, Anda dapat menggunakan opsi itu dengan semua bahasa yang didukung.

The gcc program menerima opsi dan nama file sebagai operan. Banyak pilihan memiliki multi- nama surat; oleh karena itu beberapa opsi satu huruf mungkin tidak dikelompokkan: -dv sangat berbeda dari -d -v.

Anda dapat mencampur opsi dan argumen lainnya. Untuk sebagian besar, urutan yang Anda gunakan tidak urusan. Urutan menjadi penting ketika Anda menggunakan beberapa opsi dari jenis yang sama; misalnya jika Anda tentukan -L lebih dari sekali, direktori dicari dalam urutan yang ditentukan. Juga, penempatan -l pilihan itu signifikan.

Banyak opsi memiliki nama panjang yang dimulai dengan -f atau dengan -W---Misalnya, -fmove-loop-invarian, -format dan seterusnya. Sebagian besar memiliki positif dan negatif formulir; bentuk negatif dari -ffo is -fno-foo. Manual ini hanya mendokumentasikan salah satunya dua bentuk, mana yang bukan default.

PILIHAN pilihan Kesimpulan Berikut adalah ringkasan dari semua opsi, dikelompokkan berdasarkan jenisnya. Penjelasannya berikut ini bagian.

Secara keseluruhan Opsi -c -S -E -o fillet -tanpa-kanonik-awalan -pipa -pass-exit-codes -x bahasa -v -### --membantu[=kelas[...]] --target-bantuan --Versi: kapan -pembungkus @fillet -fplugin=fillet -fplugin-arg-nama=arg -fdump-ada-spec[-ramping] -fada-spec-parent=satuan -fdump-go-spec=fillet

C Bahasa Opsi -ansi -std=standar -fgnu89-sebaris -aux-info nama file -fungsi-bera-tanpa parameter-variadik -fno-asm -fno-builtin -fno-bawaan-fungsi -dihosting -berdiri bebas -fopenac -fopenmp -fopenmp-simd -fms-ekstensi -fplan9-ekstensi -trigraf -tradisional -tradisional-cpp -bera-presisi-tunggal -fcond-ketidakcocokan -flax-vektor-konversi -fsigned-bitfields -fsigned-char -funsigned-bitfields -funsigned-char

C + + Bahasa Opsi -fabi-versi=n -fno-akses-kontrol -fcheck-baru -fconstexpr-kedalaman=n -teman-injeksi -fno-elide-konstruktor -fno-menegakkan-eh-spesifikasi -untuk-lingkup -fno-untuk-lingkup -fno-gnu-kata kunci -fno-implisit-templat -fno-implisit-inline-template -fno-implement-inlines -fms-ekstensi -fno-nonansi-builtin -fnothrow-opt -fno-operator-nama -fno-opsional-diags -fpermisif -fno-cantik-templat -frepo -fno-rtti -ukuran-dealokasi -fstats -ftemplate-backtrace-limit=n -ftemplate-kedalaman=n -fno-threadsafe-statis -fuse-cxa-atexit -fno-lemah -nostdinc++ -fvisibility-inlines-hidden -fvtable-verifikasi=[std|sebelum|tak satupun] -fvtv-hitungan -fvtv-debug -fvisibility-ms-compat -fext-numerik-literal -Wabi=n -Wabi-tag -Wkonversi-null -Wctor-dtor-privasi -Wdelete-non-virtual-dtor -Sufiks-Wliteral -Menyempit -Wnokecuali -Wnon-virtual-dtor -Penulis Penulisan -Weffc++ -Strict-null-sentinel -Wno-non-template-teman - Pemeran gaya-Wold -Woverloaded-virtual -Wno-pmf-konversi -Wsign-promo

Tujuan-C serta Objective-C++ Bahasa Opsi -fconstant-string-class=nama kelas -fgnu-runtime -fnext-runtime -fno-nil-penerima -fobjc-abi-versi=n -fobjc-panggilan-cxx-cdtors -fobjc-pengiriman langsung -pengecualian-fobjc -fobjc-gc -fobjc-nilcheck -fobjc-std=objc1 -fno-lokal-ivars -fivar-visibilitas=[publik|terlindung|swasta|paket] -freplace-objc-kelas -fzero-link -gen-dekl -Wassign-intercept -Wno-protokol -Pemilih -Pertandingan-pemilih-Wstrict -Wundeclared-selector

Bahasa Independen Opsi -fmessage-panjang =n -fdiagnostics-show-location=[sekali|setiap baris] -fdiagnostik-warna=[mobil|tak pernah|selalu] -fno-diagnostics-show-option -fno-diagnostik-show-caret

peringatan Opsi -fsintaks-saja -fmax-kesalahan=n -Medantik -pedantic-error -w -Wextra -Dinding -Pakaian -Pengembalian-Waggregate -Pengoptimalan loop-Waggressive -Batas perang -Batas perang=n -Wbool-bandingkan -Wno-atribut -Wno-builtin-makro-didefinisikan ulang -Wc90-c99-kompat -Wc99-c11-kompat -Wc++-kompat -Wc++11-kompat -Wc++14-kompat -Wcast-sejajarkan -Wcast-qual -Wchar-langganan -Wclobbed -komentar -Didukung dengan syarat -Wkonversi -Wcoverage-mismatch -Tanggal-waktu -Wdelete-tidak lengkap -Wno-cpp -Tidak digunakan lagi -Wno-deprecated-deklarasi -Wno-ditunjuk-init -Wdisabled-optimasi -Wno-dibuang-kualifikasi -Wno-discarded-array-qualifiers -Wno-div-oleh-nol -Wdouble-promosi -Badan-kosong -Wenum-bandingkan -Wno-endif-label -Kesalahan -Kesalahan=* -Wfatal-kesalahan -Wfloat-sama -format -Format=2 -Wno-format-contains-nul -Wno-format-ekstra-args -Wformat-nonliteral -Wformat-keamanan -Wformat-penandatanganan -Wformat-y2k -Wframe-lebih besar-dari=len -Wno-free-nonheap-objek -Melompat-meleset-init -Kualifikasi Wignored -Tipe-penunjuk-win yang kompatibel -Simplisit -Deklarasi-fungsi-simplisit -Wimplisit-int -Winit-sendiri -winline -Wno-int-konversi -Wno-int-to-pointer-cast -Wno-tidak valid-offsetof -Winvalid-pch -Lebih besar-dari=len -Pengoptimalan loop-Wunsafe -Wlogical-op -Wlogical-bukan-kurung -panjang-panjang -Wmain -Wmungkin-tidak diinisialisasi -Wmemset-dialihkan-args -Wmissing-kawat gigi -Penginisialisasi bidang-Wmissing -Wmissing-include-dirs -Wno-multichar -Wnonnull -Wnormalisasi=[tak satupun|id|NFC|nfkc] -Wodr -Wno-melimpah -Wopenmp-simd -Woverlength-string -Wpacked -Wpacked-bitfield-compat -Dilapisi -Kurung -Wpedantic-ms-format -Wno-pedantic-ms-format -Wpointer-arith -Wno-pointer-to-int-cast -Wredundant-dekl -Wno-return-local-addr -Tipe Wreturn -Titik-urutan -Bayangan -Wno-bayangan-ivar -Wshift-count-negatif -Wshift-count-overflow -Wsign-bandingkan -Wsign-konversi -Konversi Wfloat -Wsizeof-pointer-memaccess -Ukuran-array-argumen -Wstack-pelindung -Penggunaan tumpukan=len -Wstrict-aliasing -aliasing-wstrict=n -Meluap-wstrict -Meluap-kencang=n -Wsuggest-atribut=[murni|const|arah utara|format] -Wsuggest-final-types -Metode-saran-akhir -Suggest-override -Wmissing-format-atribut -Switch -Wswitch-default -Witch-enum -Wswitch-bool -Wsync-nand -Wsystem-header -Wtrampolin -Wtrigraph -Wtype-batas -Wundef -Wuninisialisasi -Pragma tidak diketahui -Wno-pragma -Wunsuffixed-float-constants -Tidak digunakan -Wunused-fungsi -Wunus-label -Wunused-local-typedefs -Wunused-parameter -Tidak-tidak-digunakan-hasil -Wunused-nilai -Wunused-variabel -Wunused-tapi-set-parameter -Wunused-tapi-set-variabel - Pemeran yang tidak berguna -Wvariadic-makro -Vektor-operasi-kinerja -Wvla -Wvolatile-register-var -Tulis-string -Wzero-as-null-pointer-constant

C serta Hanya Objective-C peringatan Opsi -Pemeran-fungsi-buruk -Wmissing-deklarasi -Wmissing-parameter-type -Wmissing-prototipe -Wnested-ekstern -Deklarasi-gaya-Wold -Definisi gaya-wold -Wstrict-prototipe -Tradisional -Konversi-tradisional -Wdeklarasi-setelah-pernyataan -Wpointer-tanda

Debugging Opsi -dhuruf -dumpspec -mesin sampah -dumpversion -fsanitize=gaya -membersihkan-memulihkan -fsanitize-recover=gaya -fasan-bayangan-offset=jumlah -fsanitize-undefined-trap-on-error -fcheck-pointer-bounds -fchkp-check-incomplete-type -fchkp-bidang-pertama-memiliki-batas-sendiri -fchkp-batas-sempit -fchkp-array-sempit-ke-terdalam -fchkp-optimalkan -fchkp-gunakan-fast-string-functions -fchkp-gunakan-nochk-string-fungsi -fchkp-gunakan-batas-statis -fchkp-use-static-const-bounds -fchkp-treat-zero-dynamic-size-as-infinite -fchkp-cek-baca -fchkp-cek-baca -fchkp-cek-tulis -fchkp-toko-batas -fchkp-instrumen-panggilan -fchkp-instrument-ditandai-saja -fchkp-use-wrappers -fdbg-cnt-daftar -fdbg-cnt=kontra-nilai-daftar -fdisable-ipa-pass_name -fdisable-rtl-pass_name -fdisable-rtl-nama sandi=daftar jangkauan -fdisable-pohon-pass_name -fdisable-pohon-nama sandi=daftar jangkauan -fdump-noaddr -fdump-tidak bernomor -fdump-unnumbered-links -fdump-translasi-unit[-n] -fdump-kelas-hierarki[-n] -fdump-ipa-semua -fdump-ipa-cgraph -fdump-ipa-inline -fdump-pass -fdump-statistik -fdump-pohon-semua -fdump-pohon-asli[-n] -fdump-tree-dioptimalkan[-n] -fdump-pohon-cfg -fdump-pohon-alias -fdump-pohon-ch -fdump-pohon-ssa[-n] -fdump-pohon-pra[-n] -fdump-pohon-ccp[-n] -fdump-pohon-dce[-n] -fdump-pohon-gimple[-mentah] -fdump-pohon-dom[-n] -fdump-pohon-dse[-n] -fdump-pohon-phiprop[-n] -fdump-pohon-phiopt[-n] -fdump-pohon-forwprop[-n] -fdump-pohon-copyrename[-n] -fdump-pohon-nrv -fdump-pohon-vektor -fdump-pohon-tenggelam -fdump-pohon-sra[-n] -fdump-pohon-forwprop[-n] -fdump-pohon-bebas[-n] -fdump-tree-vtable-verifikasi -fdump-pohon-vrp[-n] -fdump-tree-storeccp[-n] -fdump-final-insns=fillet -fbandingkan-debug[=opts] -fbandingkan-debug-detik -feliminate-dwarf2-dup -fno-eliminasi-unused-debug-types -feliminate-unused-debug-simbol -femit-class-debug-selalu -bisa-bisa-jenis-lulus -bisa-bisa-jenis-lulus=daftar jangkauan -fdebug-jenis-bagian -fmem-laporan-wpa -fmem-laporan -fpre-ipa-mem-laporan -fpost-ipa-mem-laporan -fprofile-arc -fopt-info -fopt-info-Pilihan[=fillet] -Frandom-seed=jumlah -fsched-verbose=n -fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose -fstack-penggunaan -cakupan-ftest -laporan-waktu -fvar-pelacakan -fvar-pelacakan-tugas -fvar-tracking-assignments-toggle -g -gtingkat -gtoggle -gcoff -gdwarf-versi -ggdb -grecord-gcc-switch -gno-record-gcc-switch -gstab -gstab+ -gstrit-kurcaci -gno-ketat-kerdil -gvms -gxcoff -gxcoff+ -gz[=mengetik] -fno-merge-debug-string -fno-dwarf2-cfi-asm -fdebug-awalan-peta=tua=baru -femit-struct-debug-baseonly -femit-struct-debug-dikurangi -femit-struct-debug-detailed[=daftar spesifikasi] -p -hal -cetak-nama-berkas=perpustakaan -print-libgcc-nama-file -cetak-multi-direktori -cetak-multi-lib -cetak-multi-os-direktori -cetak-nama-prog=program -print-search-dirs -Q -print-sysroot -print-sysroot-header-suffix -hemat-temps -simpan-temps=cwd -save-temps=obj -waktu[=fillet]

Optimasi Opsi -pengoptimalan loop-faggressive -falign-fungsi[=n] -falign-melompat[=n] -falign-label[=n] -falign-loop[=n] -fasosiatif-matematika -faauto-profil -faauto-profil[=path] -fauto-inc-dec -fbranch-probabilitas -fbranch-target-load-optimalkan -fbranch-target-memuat-mengoptimalkan2 -fbtr-bb-eksklusif -fcaller-save -fcheck-data-deps -fcombine-stack-adjustments -fconserve-stack -fbandingkan-elimin -fcprop-register -lompat silang -fcse-ikuti-melompat -fcse-lewati-blok -fcx-fortran-rules -fcx-terbatas-rentang -fdata-bagian -fdce -fdelayed-cabang -fdelete-null-pointer-cek -fdevirtualisasi -fdevirtualisasi-spekulatif -fdevirtualisasi-di-ltrans -fdse -fearly-inlining -fipa-sra -optimasi-mahal -ffat-lto-objek -cepat-matematika -finite-matematika-saja -toko-terapung -fexcess-presisi=gaya -maju-propagasi -ffp-kontrak=gaya -ffungsi-bagian -fgcse -fgcse-setelah-reload -fgcse-las -fgcse-lm -fgrafit-identitas -fgcse-sm -fhoist-berdekatan-beban -fif-konversi -fif-konversi2 -finddirect-inlining -finline-fungsi -finline-fungsi-dipanggil-sekali -batas-akhir=n -finline-kecil-fungsi -fipa-cp -fipa-cp-klon -fipa-cp-alignment -fipa-pta -fipa-profil -fipa-murni-const -fipa-referensi -fipa-icf -fira-algoritma=algoritma -fira-wilayah=wilayah -fira-kerekan-tekanan -fira-loop-tekanan -fno-ira-bagikan-simpan-slot -fno-ira-bagikan-tumpahan-slot -fira-verbose=n -fisolate-salah-jalur-dereferensi -fisolate-salah-jalur-atribut -fivopts -fkeep-inline-fungsi -fkeep-statis-consts -flive-range-penyusutan -floop-blok -floop-pertukaran -floop-strip-tambang -floop-unroll-and-jam -floop-sarang-optimalkan -floop-paralelisasi-semua -flra-remat -flto -flto-kompresi-level -flto-partisi=ganggang -flto-laporan -flto-laporan-wpa -fmerge-semua-konstanta -fmerge-konstanta -fmodulo-sched -fmodulo-sched-allow-regmoves -fmove-loop-invarian -fno-cabang-hitung-reg -fno-defer-pop -fno-fungsi-cse -fno-tebak-cabang-probabilitas -fno-inline -fno-matematika-errno -fno-lubang intip -fno-lubang2 -fno-sched-interblock -fno-sched-spec -fno-ditandatangani-nol -fno-tingkat-atas-reorder -fno-perangkap-matematika -fno-nol-diinisialisasi-dalam-bss -fomit-frame-pointer -foptimize-saudara-panggilan -fpartial-inlining -fpeel-loop -predictive-commoning -fprefetch-loop-array -fprofile-laporan -fprofile-koreksi -fprofile-dir=path -fprofile-hasilkan -fprofile-hasilkan=path -fprofile-penggunaan -fprofile-gunakan=path -fprofile-nilai -fprofile-reorder-fungsi -freciprocal-matematika -bebas -rename-register -freorder-blok -freorder-blok-dan-partisi -freorder-fungsi -frerun-cse-setelah-loop -freschedule-modulo-scheduled-loop -frounding-matematika -fsched2-use-superblok -fsched-tekanan -fsched-spec-load -fsched-spec-load-berbahaya -fsched-stalled-insns-dep[=n] -fsched-stalled-insns[=n] -fsched-grup-heuristik -fsched-kritis-jalur-heuristik -fsched-spec-insn-heuristik -fsched-rank-heuristik -fsched-last-insn-heuristik -fsched-dep-hitung-heuristik -fschedule-fusion -fschedule-insns -fschedule-insns2 -fsection-jangkar -penjadwalan selektif -penjadwalan selektif2 -fsel-sched-pipelining -fsel-sched-pipelining-outer-loop -fsemantik-interposisi -fshrink-wrap -fsignaling-nans -fsingle-presisi-konstan -fsplit-ivs-in-unroller -fsplit-wide-types -fssa-phiopt -fstack-pelindung -fstack-pelindung-semua -fstack-pelindung-kuat -fstack-pelindung-eksplisit -fstdarg-opt -fstrict-aliasing -fstrict-overflow -fthread-melompat -pelacak -free-bit-ccp -ftree-built-in-call-dce -ftree-ccp -ftree-ch -ftree-coalesce-inline-vars -ftree-coalesce-vars -free-copy-prop -ftree-copyrename -ftree-dce -ftree-dominator-memilih -ftree-dse -ftree-forwprop -bebas pohon -ftree-loop-jika-mengkonversi -ftree-loop-jika-konversi-toko -ftree-loop-im -ftree-phiprop -ftree-loop-distribusi -ftree-loop-distribusi-pola -ftree-loop-ivcanon -ftree-loop-linier -ftree-loop-optimasi -ftree-loop-vektorisasi -ftree-parallelize-loop=n -ftree-pra -ftree-partial-pra -ftree-pta -ftree-reassoc -ftree-sink -ftree-slsr -ftree-sra -ftree-switch-konversi -ftree-tail-merge -ftree-ter -ftree-vectorize -ftree-vrp -menyenangkan-pada-waktu -funroll-all-loop -funroll-loop -pengoptimalan loop yang menyenangkan optimasi -funsafe-matematika -funswitch-loop -fipa-ra -fvariable-ekspansi-in-unroller -fvect-biaya-model -fvpt -fweb -seluruh-program -fwpa -fuse-linker-plugin --param nama=nilai -O -O0 -O1 -O2 -O3 -Os -cepat -Og

Preprosesor Opsi -Apertanyaan=menjawab -SEBUAH-pertanyaan[=menjawab] -C -DD -dI -dM -dN -Dmakro[=defn] -E -H -idirafter dir -termasuk fillet -imacros fillet -iprefix fillet -iwithprefix dir -iwithprefixbefore dir -isistem dir -imultilib dir -isysroot dir -M -MM -MF -MG -MP -MQ -MT -nostdinc -P -fdebug-cpp -ftrack-makro-ekspansi -fworking-direktori -remap -trigraf -def -Umakro -Wp,Option -Xpreprosesor Option -tidak-terintegrasi-cpp

Assembler pilihan -Wa,Option -Xassembler Option

Linker Opsi nama-file-objek -sekering-ld=linker -lperpustakaan -nostartfiles -nodefaultlibs -nostdlib -pai -rdinamis -s -statis -statis-libgcc -static-libstdc++ -statis-libasan -statis-libtsan -statis-liblsan -statis-libubsan -static-libmpx -static-libmpxwrappers -bersama -shared-libgcc -simbolis -T naskah -Wl,Option -Xlinker Option -u simbol -z kata kunci

Direktori Opsi -Bawalan -Idir -iplugindir=dir -Saya mengutipdir -Ldir -spesifikasi=fillet -SAYA- --sysroot=dir --no-sysroot-akhiran

Mesin Tergantung Opsi AAArch64 Opsi -mabi=nama -mbig-endian -mlittle-endian -mgeneral-regs-saja -mcmodel=kecil -mcmodel=kecil -mcmodel=besar -mtrict-align -momit-daun-frame-pointer -mno-menghilangkan-leaf-frame-pointer -mtls-dialek=desc -mtls-dialek=tradisional -mfix-korteks-a53-835769 -mno-fix-cortex-a53-835769 -mfix-korteks-a53-843419 -mno-fix-cortex-a53-843419 -maret=nama -mcpu=nama -mtune=nama

Adapteva Epiphany Opsi -mhalf-reg-file -mprefer-pendek-insn-reg -biaya-cabang=num -mcmove -mnops=num -msoft-cmpsf -msplit-lohi -mpost-inc -mpost-modifikasi -mstack-offset=num -mround-terdekat -mlong-panggilan -mshort-panggilan -msmall16 -mfp-mode=mode -mvect-ganda -max-vect-align=num -msplit-vecmove-awal -m1reg-reg

ARC Opsi -barrel-shifter -mcpu=cpu -mA6 -mARC600 -mA7 -mARC700 -mdpfp -mdpfp-kompak -mdpfp-cepat -mno-dpfp-lrsr -mea -mno-mpy -mmul32x16 -mmul64 -mnorm -mspfp -mspfp-kompak -mspfp-cepat -msimd -msoft-float -mswap -mcrc -mdsp-paket -mdvbf -mlock -mmac-d16 -mmac-24 -mrtsc -swap -teleponi -mxy -ukuran -mannotate-align -marclinux -marclinux_prof -mepilog-cfi -mlong-panggilan -panggilan-sedang -msdata -mucb-mcount -mvolatile-cache -memfitnah-panggilan -mauto-modifikasi-reg -mbbit-lubang intip -mno-brcc -mcase-vektor-pcrel -mcompact-casesi -mno-cond-exec -mearly-cbranchsi -mexpand-tambahkan -mindexed-loads -mlra -mlra-prioritas-tidak ada -mlra-prioritas-kompak mlra-prioritas- tidak kompak -mno-milikode -campuran-kode -mq-kelas -mRcq -mRcw -msize-level=tingkat -mtune=cpu -mmultbiaya=num -munalign-prob-threshold=probabilitas

ARM Opsi -mapcs-frame -mno-apcs-frame -mabi=nama -mapcs-stack-check -mno-apcs-stack-check -mapcs-float -Mno-apcs-float -mapcs-reentrant -mno-apcs-reentrant -msched-prolog -mno-sched-prolog -mlittle-endian -mbig-endian -mfloat-abi=nama -mfp16-format=nama -mthumb-interwork -mno-jempol-interwork -mcpu=nama -maret=nama -mfpu=nama -mtune=nama -mprint-tune-info -mstruktur-ukuran-batas=n -mabort-on-noreturn -mlong-panggilan -mno-panggilan panjang -basis-gambar-tunggal -mno-single-pic-base -mpic-register=reg -mnop-fun-dllimport -mpoke-fungsi-nama -jempol -marm -mtpcs-frame -mtpcs-daun-bingkai -mcaller-super-interworking -mcallee-super-interworking -mtp=nama -mtls-dialek=dialek -mword-relokasi -mfix-korteks-m3-ldrd -munaligned-akses -mneon-untuk-64bit -mslow-flash-data -masm-sintaks-bersatu -mrestrict-itu

AVR Opsi -mmcu=mcu -maklumat-args -biaya-cabang=biaya -mcall-prolog -mint8 -mn_flash=ukuran -mno-interupsi -santai -mrmw -mtrict-X -mtiny-tumpukan -nodevicelib -Waddr-ruang-konversi

Sirip hitam Opsi -mcpu=cpu[-visi] -msim -momit-daun-frame-pointer -mno-menghilangkan-leaf-frame-pointer -mspecld-anomali -mno-specld-anomaly -mcsync-anomali -mno-csync-anomali -mlow-64k -mno-rendah64k -mstack-periksa-l1 -perpustakaan bersama-pertengahan -mno-id-shared-library -mshared-library-id=n -mleaf-id-shared-library -mno-leaf-id-shared-library -msep-data -mno-sep-data -mlong-panggilan -mno-panggilan panjang -mfast-fp -minline-plt -mmulticore -mcorea -mcoreb -msdram -micplb

C6X Opsi -mbig-endian -mlittle-endian -maret=cpu -msim -msdata =tipe sdata

CRIS Opsi -mcpu=cpu -maret=cpu -mtune=cpu -mmax-stack-frame=n -melinux-stacksize=n -metrax4 -metrax100 -mpdebug -mcc-init -mno-efek samping -mstack-align -mdata-align -mconst-align -m32-bit -m16-bit -m8-bit -mno-prolog-epilog -mno-gotplt -melf -maout -melinux -mlinux -sim -sim2 -mmul-bug-solusi -mno-mul-bug-solusi

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

darwin Opsi -semua_muat -klien_yang diizinkan -lengkungan -arch_errors_fatal -arch_only -bind_at_load -bundel -bundle_loader -Nama Klien -kompatibilitas_versi -versi sekarang -dead_strip -file-ketergantungan -dylib_file -dylinker_install_name -dinamis -dinamislib -diekspor_simbol_daftar -daftar file -flat_namespace -force_cpusubtype_ALL -force_flat_namespace -headerpad_max_install_names -iframework -gambar_base -init -install_name -keep_private_externs -multi_modul -multiply_defined -multiply_defined_unused -noall_load -no_dead_strip_inits_and_terms -nofixprebinding -nomultidefs -tidak terikat -noseglinkedit -halamanzero_size -prebind -prebind_all_twolevel_modules -private_bundel -read_only_relocs -sectalign -sectobjectsymbols -mengapa -seg1addr -sectcreate -sectobjectsymbols -sektor -segadr -segs_read_only_addr -segs_read_write_addr -seg_addr_table -seg_addr_table_filename -seglinkedit -segprot -segs_read_only_addr -segs_read_write_addr -modul_tunggal -statis -sub_perpustakaan -sub_payung -ruang nama_duatingkat -payung -tidak terdefinisi -daftar_simbol_yang tidak diekspor -ketidakcocokan_referensi_lemah -whatsloaded -F -gused -gfull -mmacosx-versi-min=versi -mkernel -mone-byte-bool

Desember alfa Opsi -mno-fp-reg -msoft-float -miee -mieee-dengan-tidak tepat -miee-konforman -mfp-trap-mode=mode -mfp-pembulatan-mode=mode -mtrap-presisi=mode -membangun-konstanta -mcpu=tipe cpu -mtune=tipe cpu -mbwx -mmax -mfix -mcix -mfloat-vax -mfloat-ieee -meksplisit-relocs -msmall-data -mlarge-data -msmall-teks -mlarge-teks -mmemory-latency=waktu

FR30 Opsi -model kecil -mno-lsim

FRV Opsi -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 -mhard-float -msoft-float -malloc-cc -mfixed-cc -mdword -mno-kata kunci -mganda -mno-ganda -mmedia -mno-media -mmuladd -mno-muladd -mfdpic -minline-plt -mgrel-ro -multilib-library-pic -mlinked-fp -mlong-panggilan -malign-label -milibrary-pic -macc-4 -macc-8 -mpack -mno-paket -mno-bendera -mcond-move -mno-cond-move -moptimalkan-membar -mno-optimalkan-membar -mscc -mno-scc -mcond-exec -mno-cond-exec -mvliw-cabang -mno-vliw-cabang -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec -mno-bersarang-cond-exec -mtomcat-stats -mTLS -mtl -mcpu=cpu

GNU / Linux Opsi -mglibc -muclibc -bionik -mandroid -tno-android-cc -tno-android-ld

H8 / 300 Opsi -santai -mh -MS -M N -mexr -mno-exr -mint32 -memfitnah-300

HPPA Opsi -maret=tipe arsitektur -mdisable-fregs -mdisable-pengindeksan -mfast-panggilan tidak langsung -mgas -mgnu-ld -mhp-ld -mfixed-range=rentang pendaftaran -mjump-in-delay -mlinker-opt -mlong-panggilan -mlong-load-store -mno-nonaktifkan-fpregs -mno-nonaktifkan-pengindeksan -mno-cepat-panggilan tidak langsung -mno-gas -mno-lompat-dalam-tunda -mno-long-load-store -mno-portabel-runtime -mno-soft-float -mno-spasi-regs -msoft-float -mpa-risc-1-0 -mpa-risc-1-1 -mpa-risc-2-0 -portable-runtime -msjadwal=tipe cpu -mspace-reg -msio -mwsio -munix=unix-std -nolibdld -statis -benang

IA-64 Opsi -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic -mvolatile-asm-stop -mregister-nama -msdata -mno-sdata -mconstant-gp -mauto-pic -mfused-madd -minline-float-divide-min-latency -minline-float-divide-max-throughput -mno-inline-float-divide -minline-int-divide-min-latensi -minline-int-divide-max-throughput -mno-inline-int-membagi -minline-sqrt-min-latensi -minline-sqrt-max-throughput -mno-inline-sqrt -mdwarf2-asm -mearly-stop-bit -mfixed-range=rentang pendaftaran -mtls-ukuran=ukuran tls -mtune=tipe cpu -milp32 -mlp64 -msched-br-data-spec -msched-ar-data-spec -msched-control-spec -msched-br-in-data-spec -msched-ar-in-data-spec -msched-in-control-spec -msched-spec-ldc -msched-spec-control-ldc -msched-prefer-non-data-spec-insns -msched-prefer-non-control-spec-insns -msched-stop-bits-setelah-setiap-siklus -msched-count-spec-in-critical-path -msel-sched-dont-check-control-spec -msched-fp-mem-deps-zero-cost -msched-max-memory-insns-hard-limit -msched-max-memory-insns=max-inns

LM32 Opsi -barrel-shift-diaktifkan -mdivide-diaktifkan -mmultiply-diaktifkan -msign-extend-diaktifkan -diaktifkan oleh pengguna

M32R/D Opsi -m32r2 -m32rx -m32r -mdebug -malign-loop -mno-align-loop -tingkat-masalah=jumlah -biaya-cabang=jumlah -mmodel=kode-ukuran-model-tipe -msdata =sdata- mengetik -mno-flush-func -mflush-fungsi=nama -mno-flush-trap -mflush-trap=jumlah -G num

M32C Opsi -mcpu=cpu -msim -memreg=jumlah

M680x0 Opsi -maret=lengkungan -mcpu=cpu -mtune=lagu -m68000 -m68020 -m68020-40 -m68020-60 -m68030 -m68040 -m68060 -mcpu32 -m5200 -m5206e -M528X -m5307 -m5407 -mcfv4e -mbitfield -mno-bitfield -mc68000 -mc68020 -mnobitfield -mrtd -mno-rtd -mdiv -mno-div -short -mno-pendek -mhard-float -m68881 -msoft-float -mpcrel -malign-int -mtrict-align -msep-data -mno-sep-data -mshared-library-id=n -perpustakaan bersama-pertengahan -mno-id-shared-library -mxgot -mno-xgot

MCCore Opsi -mhardlit -mno-hardlit -mdiv -mno-div -mrelax-segera -mno-santai-segera -mwide-bitfields -mno-wide-bitfields -m4byte-fungsi -mno-4byte-fungsi -mcallgraph-data -mno-callgraph-data -mslow-byte -mno-slow-byte -mno-lsim -mlittle-endian -mbig-endian -m210 -m340 -mstack-increment

saya Opsi -mabsdiff -mall-opts -rata-rata -berbasis=n -mbitop -mc=n -mclip -mconfig=nama -mcop -mcop32 -mcop64 -mivc2 -mdc -mdiv -meb -mel -mio-volatil -ml -mleadz -mm -mminmax -banyak -mno-memilih -ulangi -MS -matur -msdram -msim -msimnovec -mtf -mtiny=n

Microblaze Opsi -msoft-float -mhard-float -msmall-membagi -mcpu=cpu -mmemcpy -mxl-soft-mul -mxl-soft-div -mxl-barrel-shift -mxl-pola-bandingkan -mxl-tumpukan-periksa -mxl-gp-opt -mno-clearbss -mxl-kalikan-tinggi -mxl-float-convert -mxl-float-sqrt -mbig-endian -mlittle-endian -mxl-menyusun ulang -mxl-mode-model aplikasi

MIPS Opsi -ITU -EB -maret=lengkungan -mtune=lengkungan -mips1 -mips2 -mips3 -mips4 -mips32 -mips32r2 -mips32r3 -mips32r5 -mips32r6 -mips64 -mips64r2 -mips64r3 -mips64r5 -mips64r6 -mips16 -mno-mips16 -mflip-mips16 -minterlink-dikompresi -mno-interlink-dikompresi -minterlink-mips16 -mno-interlink-mips16 -mabi=abi -mabicall -mno-abicall -mshared -mno-dibagikan -mplt -mno-plt -mxgot -mno-xgot -mgp32 -mgp64 -mfp32 -mfpxx -mfp64 -mhard-float -msoft-float -mno-float -mengambang tunggal -mdouble-float -mod-spreg -mno-ganjil-spreg -mab=mode -mnan=encoding -mdsp -mno-dsp -mdspr2 -mno-dspr2 -mmcu -mmno-mcu -meva -mno-eva -mvirt -mno-virt -mxpa -mno-xpa -mmicromips -mno-micromips -mfpu=tipe fpu -msmartmips -mno-smartmips -pasangan-tunggal -mno-berpasangan-tunggal -mdmx -mno-mdmx -mips3d -mno-mips3d -mmt -mno-mt -mllsc -mno-llsc -mlong64 -mlong32 -msym32 -mno-sym32 -Gnum -mlocal-sdata -mno-local-sdata -mextern-sdata -mno-extern-sdata -mgpopt -mno-gopt -membedded-data -mno-embedded-data -muninit-const-in-rodata -mno-unit-const-in-rodata -mcode-dapat dibaca=pengaturan -msplit-alamat -mno-split-address -meksplisit-relocs -mno-eksplisit-relocs -mcheck-zero-division -mno-cek-nol-divisi -mdivide-trap -mdivide-break -mmemcpy -mno-memcpy -mlong-panggilan -mno-panggilan panjang -mmad -mno-gila -mimadd -mno-imadd -mfused-madd -mno-menyatu-madd -nocpp -mfix-24k -mno-fix-24k -mfix-r4000 -mno-fix-r4000 -mfix-r4400 -mno-fix-r4400 -mfix-r10000 -mno-fix-r10000 -mfix-rm7000 -mno-fix-rm7000 -mfix-vr4120 -mno-fix-vr4120 -mfix-vr4130 -mno-fix-vr4130 -mfix-sb1 -mno-fix-sb1 -mflush-fungsi=fungsi -mno-flush-func -biaya-cabang=num -kemungkinan cabang -mno-cabang-kemungkinan -mfp-pengecualian -mno-fp-pengecualian -mvr4130-sejajarkan -mno-vr4130-sejajarkan -msynci -mno-synci -mrelax-pic-panggilan -mno-santai-pic-panggilan -mmcount-ra-alamat

MMIX Opsi -mlibfuncs -mno-libfuncs -mepsilon -mno-epsilon -mabi=gnu -mabi=mmixware -mzero-memperpanjang -mknuthdiv -mtoplevel-simbol -melf -cabang-prediksi -mno-cabang-prediksi -mbase-alamat -mno-basis-alamat -single-exit -mno-single-exit

MN10300 Opsi -mmult-bug -mno-multi-bug -mno-am33 -mam33 -mam33-2 -mam34 -mtune=cpu- mengetik -mreturn-pointer-on-d0 -mno-crt0 -santai -mliw -msetlb

Keberanian Opsi -meb -mel -mmul.x -mno-crt0

MSP430 Opsi -msim -masm-hex -mmcu= -mcpu= -mbesar -kecil -santai -mhmult= -minrt

NDS32 Opsi -mbig-endian -mlittle-endian -mreduced-reg -mfull-regs -mcmov -mno-cmov -perf-ext -mno-perf-ext -mv3push -mno-v3push -m16bit -mno-16bit -misr-vektor-ukuran=num -mcache-block-size=num -maret=lengkungan -mcmodel=kode-model -mctor-dtor -santai

Nios II Opsi -G num -mgpopt=Option -mgpopt -mno-gpopt -mel -meb -mno-bypass-cache -mbypass-cache -mno-cache-volatile -mcache-volatile -mno-cepat-sw-div -mfast-sw-div -MHW-MUL -mno-hw-mul -MHW-MULX -mno-hw-mulx -mno-hw-div -mhw-div -mcustom-penginapan=N -mno-custom-penginapan -mcustom-fpu-cfg=nama -mhal -msmallc -msys-crt0=nama -msys-lib=nama

Nvidia PTX Opsi -m32 -m64 -mmainkernel

PDP-11 Opsi -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 -mbcopy -mbcopy-builtin -mint32 -mno-int16 -mint16 -mno-int32 -mfloat32 -mno-float64 -mfloat64 -mno-float32 -mabshi -mno-abshi -mahal-cabang -cabang-murah -munix-asm -mdec-asm

picoChip Opsi -mae=ae_type -mvliw-lookahead=N -msymbol-sebagai-alamat -mno-tidak efisien-peringatan

PowerPC Opsi Lihat Opsi RS/6000 dan PowerPC.

RL78 Opsi -msim -mmul=tidak ada -mmul=g13 -mmul=rl78 -m64bit-ganda -m32bit-ganda

RS / 6000 serta PowerPC Opsi -mcpu=tipe cpu -mtune=tipe cpu -mcmodel=kode-model -mpowerpc64 -maltivec -mno-altivec -mpowerpc-gpopt -mno-powerpc-gpopt -mpowerpc-gfxopt -mno-powerpc-gfxopt -mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb -mpopcntd -mno-popcntd -mfprnd -mno-fprnd -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp -mfull-toc -minimal-toc -mno-fp-in-toc -mno-sum-in-toc -m64 -m32 -mxl-kompat -mno-xl-kompat -mpe -kekuatan jahat -memfitnah-alami -msoft-float -mhard-float -banyak -mno-banyak -mengambang tunggal -mdouble-float -simple-fpu -mstring -mno-string -mupdate -mno-update -mavoid-diindeks-alamat -mno-avoid-indexed-address -mfused-madd -mno-menyatu-madd -mbit-sejajarkan -mno-bit-align -mtrict-align -mno-strict-align -mrelokasi -mno-relokasi -mrelocatable-lib -mno-relocatable-lib -mtoc -mno-toc -sedikit -mlittle-endian -mbig -mbig-endian -mdynamic-no-pic -maltivec -mswdiv -basis-gambar-tunggal -prioritas-dibatasi-insns=prioritas -msched-mahal-dep=ketergantungan_tipe -minsert-sched-nops=skema -mcall-sysv -mcall-netbsd -maix-struct-return -msvr4-struct-return -mabi=tipe abi -msecure-plt -mbss-plt -mblock-move-inline-limit=num -misel -mno-isel -misel=ya -misel=tidak -msp -mno-spe -msp=ya -msp=tidak -gangguan -mgen-sel-mikrokode -mwarn-sel-mikrokode -mvrsave -mno-vrsave -mmulhw -mno-mulhw -mdlmzb -mno-dlmzb -mfloat-gprs=ya -mfloat-gprs=tidak -mfloat-gprs=tunggal -mfloat-gprs=ganda -mprototipe -mno-prototipe -msim -mmvme -gila -myellowknife -anggota -msdata -msdata =memilih -mvxworks -G num -utas -mrecip -mrecip=memilih -mno-recip -mrecip-presisi -mno-recip-presisi -mveclibabi=mengetik -mfriz -mno-friz -mpointer-ke-bersarang-fungsi -mno-pointer-to-bersarang-fungsi -msave-toc-tidak langsung -mno-save-toc-tidak langsung -mpower8-fusion -mno-mpower8-fusion -mpower8-vektor -mno-power8-vektor -mcrypto -mno-kripto -mdirect-move -mno-langsung-pindah -mquad-memori -mno-quad-memori -mquad-memori-atom -mno-quad-memori-atom -mcompat-align-parm -mno-compat-align-parm -mupper-regs-df -mno-atas-regs-df -mupper-regs-sf -mno-atas-regs-sf -mupper-reg -mno-atas-regs

RX Opsi -m64bit-ganda -m32bit-ganda -fpu -nofpu -mcpu= -mbig-endian-data -sedikit-endian-data -msmall-data -msim -mno-sim -mas100-sintaks -mno-as100-sintaks -santai -mmax-constant-size= -mint-register= -mpid -mno-peringatkan-beberapa-cepat-interupsi -msave-acc-in-interrupt

S / 390 serta zSeri Opsi -mtune=tipe cpu -maret=tipe cpu -mhard-float -msoft-float -mhard-dfp -mno-hard-dfp -mlong-ganda-64 -mlong-ganda-128 -mbackchain -mno-rantai belakang -mpacked-stack -mno-packed-stack -msmall-exec -mno-kecil-exec -mmvcle -mno-mvcle -m64 -m31 -mdebug -mno-debug -mesa -mzarch -mtpf-trace -mno-tpf-trace -mfused-madd -mno-menyatu-madd -mwarn-framesize -mwarn-dynamicstack -mstack-ukuran -mstack-guard -mhotpatch=setengah kata,setengah kata

Skor Opsi -meb -mel -mnhwloop -muls -mmac -mscore5 -mscore5u -mscore7 -mscore7d

SH Opsi -m1 -m2 -m2e -m2a-nofpu -m2a-tunggal-saja -m2a-tunggal -m2a -m3 -m3e -m4-nofpu -m4-tunggal-saja -m4-tunggal -m4 -m4a-nofpu -m4a-tunggal-saja -m4a-tunggal -m4a -m4al -m5-64media -m5-64media-nofpu -m5-32media -m5-32media-nofpu -m5-kompak -m5-kompak-nofpu -mb -ml -mdalign -santai -bisa ditebak -mfmovd -mhitachi -mrenesas -mno-renesa -mnomacsave -miee -mno-ieee -mbitop -ukuran -minline-ic_invalidate -mpadstruct -mspace -prefergot -musermode -multibiaya=jumlah -mdiv=Trade kelima – $ 33 Trade keenam – $ 78 -mdivsi3_libfunc=nama -mfixed-range=rentang pendaftaran -pengalamatan-mindexed -mgettrbiaya=jumlah -mpt-tetap -maklumat-keluar-args -minvalid-simbol -model-atomik=model atom -biaya-cabang=num -mzdcbranch -mno-zdcbranch -mcbranch-force-delay-slot -mfused-madd -mno-menyatu-madd -mfsca -mno-fsca -mfsrra -mno-fsrra -pura-pura-cmove -mtas

Solaris 2 Opsi -mclear-hwcap -Mno-Clear-hwcap -teks-kotor -mno-tidak murni-teks -pthreads -utas

SPARC Opsi -mcpu=tipe cpu -mtune=tipe cpu -mcmodel=kode-model -mmemory-model=mem- model -m32 -m64 -peta-reg -mno-aplikasi-regs -mfaster-struct -mno-faster-struct -mflat -mno-flat -mfpu -mno-fpu -mhard-float -msoft-float -mhard-quad-float -msoft-quad-float -mstack-bias -mno-stack-bias -munaligned-ganda -mno-unaligned-ganda -mode-pengguna -mno-pengguna-mode -mv8plus -mno-v8plus -mvis -mno-vis -mvis2 -mno-vis2 -mvis3 -mno-vis3 -mcbcond -mno-cbcond -mfmaf -mno-fmaf -mpopc -mno-popc -mfix-at697f -mfix-ut699

SPU Opsi -mwarn-reloc -meror-relokasi -msafe-dma -munsafe-dma -petunjuk-cabang -msmall-mem -mbesar-mem -mstdmain -mfixed-range=rentang pendaftaran -mea32 -mea64 -maddress-ruang-konversi -mno-alamat-ruang-konversi -mcache-ukuran=ukuran cache -matomic-update -mno-atom-update

System V Opsi -Qy -Qn -YP,jalan -Ym,dir

TILE-Gx Opsi -mcpu=CPU -m32 -m64 -mbig-endian -mlittle-endian -mcmodel=kode-model

TILEPro Opsi -mcpu=cpu -m32

V850 Opsi -mlong-panggilan -mno-panggilan panjang -mep -mno-ep -mprolog-fungsi -mno-prolog-fungsi -mspace -mtda=n -msda=n -mzda=n -peta-reg -mno-aplikasi-regs -Mdisable-callt -mno-nonaktifkan-panggilan -mv850e2v3 -mv850e2 -mv850e1 -mv850es -mv850e -mv850 -mv850e3v5 -mloop -santai -mlong-lompat -msoft-float -mhard-float -mgcc-abi -mrh850-abi -big-switch

VAX Opsi -mg -mgnu -munix

Visium Opsi -mdebug -msim -mfpu -mno-fpu -mhard-float -msoft-float -mcpu=tipe cpu -mtune=tipe cpu -msv-mode -mode-pengguna

VMS Opsi -mvms-return-codes -mdebug-main=awalan -mmalloc64 -ukuran penunjuk =ukuran

VxWorks Opsi -mrtp -non-statis -Bstatis -Bdinamis -Xbind-malas -Xbind-sekarang

x86 Opsi -mtune=tipe cpu -maret=tipe cpu -mtune-ctrl=daftar fitur -mdump-tune-fitur -mno-default -mfpmat=satuan -masm=dialek -mno-fancy-matematika-387 -mno-fp-ret-in-387 -msoft-float -mno-lebar-kalikan -mrtd -malign-ganda -mpreferred-stack-boundary=num -mincoming-stack-boundary=num -mcld -mcx16 -msahfi -mmovbe -mcrc32 -mrecip -mrecip=memilih -mvzeroupper -mprefer-avx128 -mmmx -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx -mavx2 -mavx512f -mavx512pf -mavx512er -mavx512cd -msha -maes -mpclmul -mfsgsbase -mrdrnd -mf16c -mfma -mprefetchwt1 -mclflushopt -mxsavec -mxsave -msse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop -mlzcnt -mbmi2 -mfxsr -mxsave -mxsaveopt -mrtm -mlwp -mmpx -mmwaitx -mthreads -mno-align-stringops -minline-semua-stringops -minline-stringops-dinamis -mstringop-strategi=ganggang -mmemcpy-strategi=Trade kelima – $ 33 Trade keenam – $ 78 -mmemset-strategi=Trade kelima – $ 33 Trade keenam – $ 78 -push-args -maklumat-keluar-args -m128bit-panjang-ganda -m96bit-panjang-ganda -mlong-ganda-64 -mlong-ganda-80 -mlong-ganda-128 -mregparm=num -msseregparm -mveclibabi=mengetik -mvect8-ret-in-mem -mpc32 -mpc64 -mpc80 -mstackrealign -momit-daun-frame-pointer -mno-zona merah -mno-tls-direct-seg-refs -mcmodel=kode-model -mabi=nama -maddress-mode=mode -m32 -m64 -mx32 -m16 -mlarge-data-threshold=num -msse2avx -mfentry -mrecord-mcount -mnop-mcount -m8bit-idiv -mavx256-split-unaligned-load -mavx256-split-unaligned-store -malign-data=mengetik -mstack-protector-guard=penjaga

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

Xstormy16 Opsi -msim

Xtensa Opsi -mconst16 -mno-const16 -mfused-madd -mno-menyatu-madd -mforce-no-pic -mserialize-volatile -mno-serialize-volatile -mtext-section-literals -mno-teks-bagian-literal -mtarget-sejajarkan -mno-target-sejajarkan -mlongcalls -mno-panggilan panjang

zSeri Opsi Lihat Opsi S/390 dan zSeries.

Kode Generasi Opsi -fcall-disimpan-reg -fcall-digunakan-reg -tetap-reg -feksepsi -fnon-panggilan-pengecualian -fdelete-mati-pengecualian -funwind-tabel -fasynchronous-unwind-tabel -fno-gnu-unik -arah-ukuran-batas -fungsi-instrumen -instrument-functions-exclude-function-list=sim,sim... -finstrument-functions-exclude-file-list=fillet,fillet... -fno-umum -fno-identitas -fpcc-struct-return -fpic -fPIC -fpie -fPIE -fno-lompat-tabel -record-gcc-switch -freg-struct-return -fshort-enum -short-double -fshort-wchar -fverbose-asm -fpack-struct[=n] -fstack-periksa -fstack-limit-register=reg -fstack-batas-simbol =sim -fno-stack-limit -fsplit-tumpukan -fleading-garis bawah -ftls-model=model -fstack-reuse=tingkat_penggunaan ulang -ftrapv -fwrapv -fbounds-cek -fvisibilitas=[kegagalan|intern|tersembunyi|terlindung] -fstrict-volatile-bitfields -fsync-libcalls

Opsi Mengontrol itu Jenis of Keluaran Kompilasi dapat melibatkan hingga empat tahap: preprocessing, kompilasi yang tepat, perakitan dan menghubungkan, selalu dalam urutan itu. GCC mampu melakukan preprocessing dan kompilasi beberapa file baik ke dalam beberapa file input assembler, atau ke dalam satu file input assembler; kemudian setiap file input assembler menghasilkan file objek, dan penautan menggabungkan semua objek file (yang baru dikompilasi, dan yang ditentukan sebagai input) ke dalam file yang dapat dieksekusi.

Untuk setiap file input yang diberikan, akhiran nama file menentukan jenis kompilasinya selesai:

fillet.c Kode sumber C yang harus diproses sebelumnya.

fillet.i Kode sumber C yang tidak boleh diproses sebelumnya.

fillet.ii Kode sumber C++ yang tidak boleh diproses sebelumnya.

fillet.m Kode sumber Objective-C. Perhatikan bahwa Anda harus menautkan dengan libobjc perpustakaan untuk membuat Program kerja Objective-C.

fillet.mi Kode sumber Objective-C yang tidak boleh diproses sebelumnya.

fillet.mm fillet.M Kode sumber Objective-C++. Perhatikan bahwa Anda harus menautkan dengan libobjc perpustakaan untuk membuat kerja program Objective-C++. Perhatikan bahwa .M mengacu pada huruf kapital M.

fillet.mii Kode sumber Objective-C++ yang tidak boleh diproses sebelumnya.

fillet.h File header C, C++, Objective-C atau Objective-C++ untuk diubah menjadi precompiled header (default), atau file header C, C++ untuk diubah menjadi spesifikasi Ada (melalui -fdump-ada-spec mengalihkan).

filletCc. fillet.cp fillet.cxx fillet.cpp fillet.CPP fillet.c++ fillet.C Kode sumber C++ yang harus diproses sebelumnya. Perhatikan bahwa di .cxx, dua huruf terakhir harus keduanya secara harfiah x. Juga, .C mengacu pada huruf kapital C.

fillet.mm fillet.M Kode sumber Objective-C++ yang harus diproses sebelumnya.

fillet.mii Kode sumber Objective-C++ yang tidak boleh diproses sebelumnya.

fillet.hh fillet.H fillet.hp fillet.hxx fillet.hpp fillet.HPP fillet.h++ fillet.tcc File header C++ untuk diubah menjadi header yang telah dikompilasi atau spesifikasi Ada.

fillet.f fillet.untuk fillet.ftn Memperbaiki kode sumber Fortran yang tidak boleh diproses sebelumnya.

fillet.F fillet.UNTUK fillet.fpp fillet.FPP fillet.FTN Kode sumber Fortran formulir tetap yang harus diproses sebelumnya (dengan tradisional praprosesor).

fillet.f90 fillet.f95 fillet.f03 fillet.f08 Kode sumber Fortran bentuk bebas yang tidak boleh diproses sebelumnya.

fillet.F90 fillet.F95 fillet.F03 fillet.F08 Kode sumber Fortran bentuk bebas yang harus diproses sebelumnya (dengan tradisional praprosesor).

fillet.Pergilah Buka kode sumber.

fillet.iklan Ada file kode sumber yang berisi deklarasi unit perpustakaan (deklarasi a paket, subprogram, atau generik, atau instantiasi generik), atau unit perpustakaan deklarasi penggantian nama (paket, generik, atau deklarasi penggantian nama subprogram). Seperti file juga disebut spesifikasi.

fillet.adb Ada file kode sumber yang berisi badan unit perpustakaan (subprogram atau badan paket). File semacam itu juga disebut tubuh.

fillet.s Kode perakit.

fillet.S fillet.sx Kode assembler yang harus diproses sebelumnya.

lain File objek untuk dimasukkan langsung ke penautan. Nama file apa pun tanpa dikenali akhiran diperlakukan dengan cara ini.

Anda dapat menentukan bahasa input secara eksplisit dengan -x opsi:

-x bahasa Tentukan secara eksplisit bahasa untuk file input berikut (daripada membiarkan compiler memilih default berdasarkan akhiran nama file). Opsi ini berlaku untuk semua berikut file input sampai berikutnya -x pilihan. Nilai yang mungkin untuk bahasa adalah:

c c-header cpp-output c++ c++-header c++-cpp-output tujuan-c tujuan-c-tajuk tujuan-c-cpp-output objektif-c++ objektif-c++-header objektif-c++-cpp-output assembler assembler-dengan-cpp ADA masukan f77 f77-cpp masukan f95 f95-cpp go Jawa

-x tak satupun Matikan spesifikasi bahasa apa pun, sehingga file berikutnya ditangani sesuai dengan akhiran nama file mereka (sebagaimana adanya jika -x belum digunakan sama sekali).

-pass-exit-codes Biasanya itu gcc program keluar dengan kode 1 jika ada fase kompiler yang kembali kode pengembalian yang tidak berhasil. Jika Anda menentukan -pass-exit-codes, yang gcc program sebagai gantinya kembali dengan kesalahan numerik tertinggi yang dihasilkan oleh fase apa pun yang mengembalikan kesalahan indikasi. Ujung depan C, C++, dan Fortran mengembalikan 4 jika kesalahan kompiler internal ditemui.

Jika Anda hanya ingin beberapa tahapan kompilasi, Anda dapat menggunakan -x (atau akhiran nama file) untuk memberi tahu gcc di mana untuk memulai, dan salah satu opsi -c, -S, atau -E untuk mengatakan di mana gcc adalah untuk berhenti. Perhatikan bahwa beberapa kombinasi (misalnya, -x cpp-keluaran -E) menginstruksikan gcc melakukan tidak ada sama sekali.

-c Kompilasi atau rakit file sumber, tetapi jangan tautkan. Tahap menghubungkan sederhana adalah belum selesai. Hasil akhir berupa file objek untuk setiap file sumber.

Secara default, nama file objek untuk file sumber dibuat dengan mengganti akhiran .c, .i, .s, dll., dengan .o.

File input yang tidak dikenal, tidak memerlukan kompilasi atau perakitan, diabaikan.

-S Berhenti setelah tahap kompilasi yang tepat; jangan berkumpul. Outputnya ada di bentuk file kode assembler untuk setiap file input non-assembler yang ditentukan.

Secara default, nama file assembler untuk file sumber dibuat dengan mengganti akhiran .c, .i, dll., dengan .s.

File input yang tidak memerlukan kompilasi diabaikan.

-E Berhenti setelah tahap preprocessing; tidak menjalankan kompiler dengan benar. Keluarannya ada di bentuk kode sumber yang telah diproses sebelumnya, yang dikirim ke output standar.

File input yang tidak memerlukan prapemrosesan diabaikan.

-o fillet Tempatkan output dalam file fillet. Ini berlaku untuk jenis output apa pun yang sedang diproduksi, apakah itu file yang dapat dieksekusi, file objek, file assembler atau C . yang telah diproses sebelumnya kode.

If -o tidak ditentukan, defaultnya adalah memasukkan file yang dapat dieksekusi keluar, objek file untuk sumber. akhiran in sumber.o, file assemblernya ada di sumber.s, yang sudah dikompilasi sebelumnya file header di source.suffix.gch, dan semua sumber C yang telah diproses sebelumnya pada output standar.

-v Cetak (pada keluaran kesalahan standar) perintah yang dijalankan untuk menjalankan tahapan kompilasi. Cetak juga nomor versi program driver kompiler dan dari preprocessor dan compiler yang tepat.

-### Seperti -v kecuali perintah tidak dieksekusi dan argumen dikutip kecuali mereka hanya berisi karakter alfanumerik atau "./-_". Ini berguna untuk skrip shell untuk menangkap baris perintah yang dibuat oleh driver.

-pipa Gunakan pipa daripada file sementara untuk komunikasi antara berbagai tahap kompilasi. Ini gagal bekerja pada beberapa sistem di mana assembler tidak dapat membaca dari pipa; tetapi perakit GNU tidak mengalami kesulitan.

--membantu Cetak (pada output standar) deskripsi opsi baris perintah yang dipahami oleh gcc. Jika -v opsi juga ditentukan kemudian --membantu juga diteruskan ke berbagai proses yang dipanggil oleh gcc, sehingga mereka dapat menampilkan opsi baris perintah mereka menerima. jika -Wextra opsi juga telah ditentukan (sebelum --membantu pilihan), maka opsi baris perintah yang tidak memiliki dokumentasi yang terkait dengannya juga ditampilkan.

--target-bantuan Cetak (pada output standar) deskripsi opsi baris perintah khusus target untuk setiap alat. Untuk beberapa target, informasi spesifik target tambahan mungkin juga dicetak.

--bantuan={kelas|[^]kualifikasi}[...] Cetak (pada output standar) deskripsi opsi baris perintah yang dipahami oleh compiler yang cocok dengan semua kelas dan kualifikasi yang ditentukan. Ini adalah kelas yang didukung:

pengoptimal Tampilkan semua opsi pengoptimalan yang didukung oleh kompiler.

peringatan Tampilkan semua opsi yang mengontrol pesan peringatan yang dihasilkan oleh kompiler.

target Tampilkan opsi khusus target. tidak seperti --target-bantuan pilihan bagaimanapun, target- pilihan khusus dari linker dan assembler tidak ditampilkan. Hal ini karena alat-alat itu saat ini tidak mendukung ekstensi --bantuan= sintaks.

params Tampilkan nilai yang dikenali oleh --param .

bahasa Tampilkan opsi yang didukung untuk bahasa, Di mana bahasa adalah nama salah satu bahasa yang didukung dalam versi GCC ini.

umum Tampilkan opsi yang umum untuk semua bahasa.

Ini adalah kualifikasi yang didukung:

tidak berdokumen Tampilkan hanya opsi yang tidak didokumentasikan.

bergabung Opsi tampilan mengambil argumen yang muncul setelah tanda sama dengan di yang sama potongan teks yang berkelanjutan, seperti: --bantuan=target.

terpisah Opsi tampilan mengambil argumen yang muncul sebagai kata terpisah setelah opsi asli, seperti: -o berkas keluaran.

Jadi misalnya untuk menampilkan semua sakelar spesifik target tidak berdokumen yang didukung oleh kompiler, gunakan:

--help=target, tidak berdokumen

Arti qualifier dapat dibalik dengan mengawalinya dengan ^ karakter, jadi untuk contoh untuk menampilkan semua opsi peringatan biner (yaitu, yang aktif atau tidak aktif dan yang tidak mengambil argumen) yang memiliki deskripsi, gunakan:

--help=peringatan,^bergabung,^tidak terdokumentasi

Argumen untuk --bantuan= tidak boleh hanya terdiri dari kualifikasi terbalik.

Menggabungkan beberapa kelas dimungkinkan, meskipun ini biasanya membatasi output jadi banyak yang tidak ada untuk ditampilkan. Namun, satu kasus di mana itu berhasil adalah ketika salah satu kelasnya adalah target. Misalnya, untuk menampilkan semua target-spesifik opsi pengoptimalan, gunakan:

--help=target,pengoptimal

The --bantuan= pilihan dapat diulang pada baris perintah. Setiap penggunaan berturut-turut ditampilkan kelas opsi yang diminta, melewatkan yang sudah ditampilkan.

Jika -Q opsi muncul di baris perintah sebelum --bantuan= pilihan, maka teks deskriptif ditampilkan oleh --bantuan= diubah. Alih-alih menggambarkan yang ditampilkan opsi, indikasi diberikan apakah opsi diaktifkan, dinonaktifkan, atau disetel ke nilai tertentu (dengan asumsi bahwa kompiler mengetahui ini pada titik di mana --bantuan= opsi yang digunakan).

Berikut adalah contoh terpotong dari port ARM dari gcc:

% gcc -Q -mabi=2 --help=target -c Opsi berikut adalah target spesifik: -mabi = 2 -mabort-on-noreturn [dinonaktifkan] -mapcs [dinonaktifkan]

Outputnya sensitif terhadap efek opsi baris perintah sebelumnya, jadi untuk contoh adalah mungkin untuk mengetahui pengoptimalan mana yang diaktifkan di -O2 dengan menggunakan:

-Q -O2 --help=pengoptimal

Atau Anda dapat menemukan pengoptimalan biner mana yang diaktifkan oleh -O3 dengan menggunakan:

gcc -c -Q -O3 --help=pengoptimal > /tmp/O3-opts gcc -c -Q -O2 --help=pengoptimal > /tmp/O2-opts diff /tmp/O2-opts /tmp/O3-opts | grep diaktifkan

-tanpa-kanonik-awalan Jangan memperluas tautan simbolis apa pun, selesaikan referensi ke /../ or /./, atau buat jalan absolut ketika menghasilkan awalan relatif.

--Versi: kapan Tampilkan nomor versi dan hak cipta dari GCC yang dipanggil.

-pembungkus Panggil semua subperintah di bawah program pembungkus. Nama program pembungkus dan parameternya dilewatkan sebagai daftar yang dipisahkan koma.

gcc -c tc -wrapper gdb,--args

Ini memanggil semua subprogram dari gcc bawah gdb --args, dengan demikian seruan dari Cc1 is gdb --args Cc1 ....

-fplugin=nama.begitu Muat kode plugin dalam file nama.jadi, diasumsikan sebagai objek bersama yang akan dijatuhkan oleh kompiler. Nama dasar dari file objek bersama digunakan untuk mengidentifikasi plugin untuk keperluan penguraian argumen (Lihat -fplugin-arg-nama-kunci=nilai di bawah). Setiap plugin harus mendefinisikan fungsi panggilan balik yang ditentukan dalam API Plugin.

-fplugin-arg-nama-kunci=nilai Tentukan argumen yang disebut kunci dengan nilai nilai untuk plugin yang disebut nama.

-fdump-ada-spec[-ramping] Untuk sumber C dan C++ dan sertakan file, buat spesifikasi Ada yang sesuai.

-fada-spec-parent=satuan Setara dengan -fdump-ada-spec[-ramping] di atas, buat spesifikasi Ada sebagai unit turunan dari induk satuan.

-fdump-go-spec=fillet Untuk file input dalam bahasa apa pun, buat deklarasi Go yang sesuai di fillet. Ini menghasilkan deklarasi Go "const", "type", "var", dan "func" yang mungkin merupakan cara yang berguna untuk mulai menulis antarmuka Go ke kode yang ditulis dalam beberapa bahasa lain.

@fillet Baca opsi baris perintah dari fillet. Opsi yang dibaca disisipkan sebagai pengganti asli @fillet pilihan. Jika fillet tidak ada, atau tidak dapat dibaca, maka opsi akan diperlakukan secara harfiah, dan tidak dihapus.

Opsi dalam fillet dipisahkan oleh spasi. Karakter spasi putih dapat disertakan dalam sebuah opsi dengan mengelilingi seluruh opsi dalam tanda kutip tunggal atau ganda. Setiap karakter (termasuk garis miring terbalik) dapat dimasukkan dengan mengawali karakter menjadi disertakan dengan garis miring terbalik. NS fillet mungkin sendiri mengandung tambahan @fillet pilihan; setiap opsi tersebut akan diproses secara rekursif.

kompilasi C + + program File sumber C++ secara konvensional menggunakan salah satu sufiks .C, Cc., .cpp, .CPP, .c++, .cp, atau .cxx; File header C++ sering digunakan .hh, .hpp, .H, atau (untuk kode template bersama) .tcc; Dan file C++ yang telah diproses sebelumnya menggunakan akhiran .ii. GCC mengenali file dengan nama ini dan mengkompilasinya sebagai program C++ bahkan jika Anda memanggil kompiler dengan cara yang sama seperti untuk mengkompilasi Program C (biasanya dengan nama gcc).

Namun, penggunaan gcc tidak menambahkan pustaka C++. g ++ adalah program yang memanggil GCC dan secara otomatis menentukan penautan terhadap pustaka C++. Ini memperlakukan .c, .h serta .i file sebagai File sumber C++ alih-alih file sumber C kecuali -x digunakan. Program ini juga bermanfaat saat mengkompilasi file header C dengan a .h ekstensi untuk digunakan dalam kompilasi C++. Pada banyak sistem, g ++ juga dipasang dengan nama c ++.

Saat Anda mengompilasi program C++, Anda dapat menentukan banyak opsi baris perintah yang sama yang: Anda gunakan untuk mengkompilasi program dalam bahasa apa pun; atau opsi baris perintah yang berarti untuk C dan bahasa terkait; atau opsi yang hanya berguna untuk program C++.

Opsi Mengontrol C Dialek Opsi berikut mengontrol dialek C (atau bahasa turunan dari C, seperti C++, Objective-C dan Objective-C++) yang diterima oleh kompiler:

-ansi Dalam mode C, ini setara dengan -std=c90. Dalam mode C++, ini setara dengan -std=c++98.

Ini menonaktifkan fitur GCC tertentu yang tidak kompatibel dengan ISO C90 (bila kompilasi kode C), atau C++ standar (saat mengkompilasi kode C++), seperti "asm" dan kata kunci "typeof", dan makro yang telah ditentukan sebelumnya seperti "unix" dan "vax" yang mengidentifikasi jenis sistem yang Anda gunakan. Ini juga memungkinkan ISO yang tidak diinginkan dan jarang digunakan fitur trigraf. Untuk kompiler C, ini menonaktifkan pengenalan gaya C++ // komentar serta kata kunci "inline".

Kata kunci alternatif "__asm__", "__extension__", "__inline__" dan "__typeof__" terus bekerja meskipun -ansi. Anda tidak ingin menggunakannya dalam program ISO C, tentu saja, tetapi berguna untuk meletakkannya di file header yang mungkin disertakan di kompilasi dilakukan dengan -ansi. Makro standar alternatif seperti "__unix__" dan "__vax__" juga tersedia, dengan atau tanpa -ansi.

The -ansi opsi tidak menyebabkan program non-ISO ditolak secara serampangan. Untuk itu, -Medantik diperlukan selain -ansi.

Makro "__STRICT_ANSI__" telah ditentukan sebelumnya ketika -ansi opsi digunakan. Beberapa tajuk file mungkin memperhatikan makro ini dan menahan diri untuk tidak mendeklarasikan fungsi atau definisi tertentu makro tertentu yang tidak diminta oleh standar ISO; ini untuk menghindari campur tangan dengan program apa pun yang mungkin menggunakan nama ini untuk hal lain.

Fungsi yang biasanya ada di dalamnya tetapi tidak memiliki semantik yang ditentukan oleh ISO C (seperti: sebagai "alloca" dan "ffs") bukan fungsi bawaan ketika -ansi digunakan.

-std= Menentukan standar bahasa. Opsi ini saat ini hanya didukung ketika kompilasi C atau C++.

Kompiler dapat menerima beberapa standar dasar, seperti: c90 or c++98, dan dialek GNU standar tersebut, seperti gnu90 or gnu++98. Ketika standar dasar ditentukan, compiler menerima semua program yang mengikuti standar itu ditambah yang menggunakan ekstensi GNU yang tidak bertentangan dengannya. Sebagai contoh, -std=c90 mematikan fitur tertentu dari GCC yang tidak kompatibel dengan ISO C90, seperti kata kunci "asm" dan "typeof", tetapi tidak ekstensi GNU lain yang tidak memiliki arti dalam ISO C90, seperti menghilangkan istilah tengah dari ekspresi "?:". Di sisi lain, ketika dialek GNU standar ditentukan, semua fitur yang didukung oleh kompiler diaktifkan, bahkan ketika fitur tersebut fitur mengubah arti dari standar dasar. Akibatnya, beberapa kepatuhan ketat program dapat ditolak. Standar tertentu digunakan oleh -Medantik untuk mengidentifikasi fitur mana yang merupakan ekstensi GNU dengan versi standar tersebut. Sebagai contoh -std=gnu90 -Medantik memperingatkan tentang gaya C++ // komentar, sambil -std=gnu99 -Medantik tidak.

Nilai untuk opsi ini harus diberikan; nilai yang mungkin adalah

c90 c89 iso9899: 1990 Mendukung semua program ISO C90 (ekstensi GNU tertentu yang bertentangan dengan ISO C90 dinonaktifkan). Sama dengan -ansi untuk kode C.

iso9899: 199409 ISO C90 sebagaimana dimodifikasi dalam amandemen 1.

c99 c9x iso9899: 1999 iso9899:199x ISOC99. Standar ini secara substansial didukung sepenuhnya, bug modulo dan masalah floating-point (terutama tetapi tidak sepenuhnya terkait dengan fitur C99 opsional dari Lampiran F dan G). Lihathttp://gcc.gnu.org/c99status.html> untuk lebih informasi. Nama c9x serta iso9899:199x tidak digunakan lagi.

c11 c1x iso9899: 2011 ISO C11, revisi 2011 dari standar ISO C. Standar ini secara substansial didukung sepenuhnya, bug modulo, masalah floating-point (terutama tetapi tidak sepenuhnya berkaitan dengan fitur C11 opsional dari Lampiran F dan G) dan Lampiran opsional K (Antarmuka pemeriksaan batas) dan L (Analisis). Nama c1x sudah ditinggalkan.

gnu90 gnu89 Dialek GNU dari ISO C90 (termasuk beberapa fitur C99).

gnu99 gnu9x Dialek GNU dari ISO C99. Nama gnu9x sudah ditinggalkan.

gnu11 gnu1x Dialek GNU dari ISO C11. Ini adalah default untuk kode C. Nama gnu1x is usang.

c++98 c++03 Standar ISO C++ 1998 ditambah corrigendum teknis 2003 dan beberapa tambahan laporan cacat. Sama dengan -ansi untuk kode C++.

gnu++98 gnu++03 dialek GNU -std=c++98. Ini adalah default untuk kode C++.

c++11 c++0x Standar ISO C++ 2011 ditambah amandemennya. Nama c++0x sudah ditinggalkan.

gnu++11 gnu++0x dialek GNU -std=c++11. Nama gnu++0x sudah ditinggalkan.

c++14 c++1thn Standar ISO C++ 2014 ditambah amandemennya. Nama c++1thn sudah ditinggalkan.

gnu++14 gnu++1thn dialek GNU -std=c++14. Nama gnu++1thn sudah ditinggalkan.

c++1z Revisi berikutnya dari standar ISO C++, sementara direncanakan untuk 2017. Dukungan sangat eksperimental, dan hampir pasti akan berubah dengan cara yang tidak sesuai rilis mendatang.

gnu++1z dialek GNU -std=c++1z. Dukungan sangat eksperimental, dan akan hampir pasti berubah dengan cara yang tidak kompatibel di rilis mendatang.

-fgnu89-sebaris Pilihan -fgnu89-sebaris memberitahu GCC untuk menggunakan semantik GNU tradisional untuk "inline" berfungsi saat dalam mode C99.

Menggunakan opsi ini kira-kira setara dengan menambahkan atribut fungsi "gnu_inline" ke semua fungsi sebaris.

Pilihan -fno-gnu89-sebaris secara eksplisit memberitahu GCC untuk menggunakan semantik C99 untuk "inline" ketika dalam mode C99 atau gnu99 (yaitu, ini menentukan perilaku default). Ini opsi tidak didukung di -std=c90 or -std=gnu90 mode.

Makro praprosesor "__GNUC_GNU_INLINE__" dan "__GNUC_STDC_INLINE__" dapat digunakan untuk memeriksa semantik mana yang berlaku untuk fungsi "inline".

-aux-info nama file Output ke deklarasi prototipe nama file yang diberikan untuk semua fungsi yang dideklarasikan dan/atau didefinisikan dalam unit terjemahan, termasuk yang ada di file header. Pilihan ini adalah diam-diam diabaikan dalam bahasa apa pun selain C.

Selain deklarasi, file menunjukkan, dalam komentar, asal setiap deklarasi (file sumber dan baris), apakah deklarasi itu implisit, prototipe atau tanpa prototipe (I, N untuk baru atau O untuk lama, masing-masing, dalam karakter pertama setelah nomor baris dan titik dua), dan apakah itu berasal dari deklarasi atau definisi (C or F, masing-masing, dalam karakter berikut). Dalam hal fungsi definisi, daftar argumen gaya K&R diikuti oleh deklarasi mereka juga disediakan, komentar orang dalam, setelah deklarasi.

-fungsi-bera-tanpa parameter-variadik Terima fungsi variadic tanpa parameter bernama.

Meskipun dimungkinkan untuk mendefinisikan fungsi seperti itu, ini tidak terlalu berguna tidak mungkin untuk membaca argumen. Ini hanya didukung untuk C karena konstruksi ini diperbolehkan oleh C++.

-fno-asm Jangan mengenali "asm", "inline" atau "typeof" sebagai kata kunci, sehingga kode dapat menggunakan ini kata-kata sebagai pengenal. Anda dapat menggunakan kata kunci "__asm__", "__inline__" dan "__typeof__" sebagai gantinya. -ansi menyiratkan -fno-asm.

Di C++, sakelar ini hanya memengaruhi kata kunci "typeof", karena "asm" dan "inline" adalah kata kunci standar. Anda mungkin ingin menggunakan -fno-gnu-kata kunci bendera sebagai gantinya, yang memiliki efek yang sama. Dalam mode C99 (-std=c99 or -std=gnu99), sakelar ini hanya memengaruhi Kata kunci "asm" dan "typeof", karena "inline" adalah kata kunci standar dalam ISO C99.

-fno-builtin -fno-bawaan-fungsi Tidak mengenali fungsi bawaan yang tidak dimulai dengan __bawaan_ sebagai awalan.

GCC biasanya menghasilkan kode khusus untuk menangani fungsi bawaan tertentu lebih banyak efisien; misalnya, panggilan ke "alloca" dapat menjadi instruksi tunggal yang sesuaikan tumpukan secara langsung, dan panggilan ke "memcpy" dapat menjadi loop salinan sebaris. NS kode yang dihasilkan seringkali lebih kecil dan lebih cepat, tetapi karena fungsi memanggil no lagi muncul seperti itu, Anda tidak dapat mengatur breakpoint pada panggilan itu, Anda juga tidak dapat mengubah perilaku fungsi dengan menghubungkan dengan perpustakaan yang berbeda. Selain itu, ketika suatu fungsi dikenali sebagai fungsi bawaan, GCC dapat menggunakan informasi tentang itu berfungsi untuk memperingatkan tentang masalah dengan panggilan ke fungsi itu, atau untuk menghasilkan lebih banyak kode yang efisien, bahkan jika kode yang dihasilkan masih berisi panggilan ke fungsi itu. Untuk contoh, peringatan diberikan dengan -format untuk panggilan buruk ke "printf" ketika "printf" adalah built in dan "strlen" diketahui tidak mengubah memori global.

Dengan -fno-bawaan-fungsi opsi hanya fungsi bawaan fungsi dinonaktifkan. fungsi tidak harus dimulai dengan __bawaan_. Jika sebuah fungsi bernama yang tidak built-in dalam versi GCC ini, opsi ini diabaikan. Tidak ada yang sesuai -fbuiltin-fungsi pilihan; jika Anda ingin mengaktifkan fungsi bawaan secara selektif saat menggunakan -fno-builtin or -berdiri bebas, Anda dapat menentukan makro seperti:

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

-dihosting Tegaskan bahwa kompilasi menargetkan lingkungan yang dihosting. Ini menyiratkan -fbuiltin. Sebuah lingkungan yang dihosting adalah lingkungan di mana seluruh perpustakaan standar tersedia, dan di yang "main" memiliki tipe pengembalian "int". Contohnya hampir semuanya kecuali a inti. Ini setara dengan -fno-berdiri bebas.

-berdiri bebas Tegaskan bahwa kompilasi menargetkan lingkungan yang berdiri sendiri. Ini menyiratkan -fno-builtin. Lingkungan yang berdiri sendiri adalah lingkungan di mana perpustakaan standar tidak boleh ada, dan startup program belum tentu berada di "utama". Contoh yang paling jelas adalah kernel OS. Ini setara dengan -fno-host.

-fopenac Aktifkan penanganan arahan OpenACC "#pragma acc" di C/C++ dan "!$acc" di Fortran. Ketika -fopenac ditentukan, kompiler menghasilkan kode yang dipercepat sesuai dengan Antarmuka Pemrograman Aplikasi OpenACC v2.0http://www.openacc.org/>. Pilihan ini menyiratkan -utas, dan dengan demikian hanya didukung pada target yang memiliki dukungan untuk -utas.

Perhatikan bahwa ini adalah fitur eksperimental, tidak lengkap, dan dapat berubah di masa mendatang versi GCC. Lihathttps://gcc.gnu.org/wiki/OpenACC> untuk informasi lebih lanjut.

-fopenmp Aktifkan penanganan arahan OpenMP "#pragma omp" di C/C++ dan "!$omp" di Fortran. Ketika -fopenmp ditentukan, kompiler menghasilkan kode paralel sesuai dengan Antarmuka Program Aplikasi OpenMP v4.0http://www.openmp.org/>. Pilihan ini menyiratkan -utas, dan dengan demikian hanya didukung pada target yang memiliki dukungan untuk -utas. -fopenmp menyiratkan -fopenmp-simd.

-fopenmp-simd Aktifkan penanganan arahan SIMD OpenMP dengan "#pragma omp" di C/C++ dan "!$omp" di Fortran. Arahan OpenMP lainnya diabaikan.

-fcilkplus Aktifkan penggunaan fitur ekstensi bahasa Cilk Plus untuk C/C++. Ketika pilihan -fcilkplus ditentukan, aktifkan penggunaan fitur ekstensi Bahasa Cilk Plus untuk C/C++. Implementasi saat ini mengikuti ABI versi 1.2. Ini adalah sebuah fitur eksperimental yang hanya sebagian selesai, dan yang antarmukanya dapat berubah di versi GCC mendatang seiring dengan perubahan spesifikasi resmi. Saat ini, semua fitur tetapi "_Cilk_for" telah diimplementasikan.

-fgnu-tm Ketika pilihan -fgnu-tm ditentukan, kompiler menghasilkan kode untuk Linux varian dari dokumen spesifikasi ABI Memori Transaksional Intel saat ini (Revisi 1.1, 6 Mei 2009). Ini adalah fitur eksperimental yang antarmukanya dapat berubah dalam versi GCC mendatang, karena spesifikasi resmi berubah. Harap dicatat bahwa tidak semua arsitektur didukung untuk fitur ini.

Untuk informasi lebih lanjut tentang dukungan GCC untuk memori transaksional,

Perhatikan bahwa fitur memori transaksional tidak didukung dengan pengecualian non-panggilan (-fnon-panggilan-pengecualian).

-fms-ekstensi Terima beberapa konstruksi non-standar yang digunakan dalam file header Microsoft.

Dalam kode C++, ini memungkinkan nama anggota dalam struktur serupa dengan tipe sebelumnya deklarasi.

typedef int UOW; struktur ABC { Uow uow; };

Beberapa kasus bidang yang tidak disebutkan namanya dalam struktur dan serikat pekerja hanya diterima dengan ini .

Perhatikan bahwa opsi ini tidak aktif untuk semua target tetapi target x86 menggunakan ms-abi.

-fplan9-ekstensi Terima beberapa konstruksi non-standar yang digunakan dalam kode Paket 9.

Ini memungkinkan -fms-ekstensi, mengizinkan melewatkan pointer ke struktur dengan anonim bidang ke fungsi yang mengharapkan penunjuk ke elemen tipe bidang, dan izin merujuk ke bidang anonim yang dideklarasikan menggunakan typedef. Hanya ini didukung untuk C, bukan C++.

-trigraf Mendukung trigraf ISO C. NS -ansi pilihan (dan -std opsi untuk ISO C strict yang ketat kesesuaian) menyiratkan -trigraf.

-tradisional -tradisional-cpp Sebelumnya, opsi ini menyebabkan GCC mencoba meniru kompiler C pra-standar. Mereka sekarang hanya didukung dengan -E mengalihkan. Preprocessor terus mendukung mode pra-standar. Lihat manual GNU CPP untuk detailnya.

-fcond-ketidakcocokan Izinkan ekspresi bersyarat dengan tipe yang tidak cocok dalam argumen kedua dan ketiga. Nilai ekspresi seperti itu tidak berlaku. Opsi ini tidak didukung untuk C++.

-flax-vektor-konversi Izinkan konversi implisit antara vektor dengan jumlah elemen yang berbeda dan/atau jenis elemen yang tidak kompatibel. Opsi ini tidak boleh digunakan untuk kode baru.

-funsigned-char Biarkan jenis "char" menjadi unsigned, seperti "unsigned char".

Setiap jenis mesin memiliki default untuk "char" yang seharusnya. Entah itu seperti "unsigned char" secara default atau seperti "signed char" secara default.

Idealnya, program portabel harus selalu menggunakan "signed char" atau "unsigned char" ketika itu tergantung pada signness suatu objek. Tetapi banyak program telah ditulis untuk digunakan biasa "char" dan mengharapkannya untuk ditandatangani, atau mengharapkannya untuk tidak ditandatangani, tergantung pada mesin mereka ditulis untuk. Opsi ini, dan kebalikannya, memungkinkan Anda membuat program bekerja dengan default yang berlawanan.

Tipe "char" selalu merupakan tipe yang berbeda dari masing-masing "signed char" atau "unsigned char", meskipun perilakunya selalu seperti salah satu dari keduanya.

-fsigned-char Biarkan jenis "char" ditandatangani, seperti "signed char".

Perhatikan bahwa ini setara dengan -fno-unsigned-char, yang merupakan bentuk negatif dari -funsigned-char. Demikian pula, opsi -fno-signed-char adalah setara dengan -funsigned-char.

-fsigned-bitfields -funsigned-bitfields -fno-signed-bitfields -fno-unsigned-bitfields Opsi ini mengontrol apakah bidang bit ditandatangani atau tidak, saat deklarasi tidak menggunakan "ditandatangani" atau "tidak ditandatangani". Secara default, bidang bit seperti itu ditandatangani, karena ini konsisten: tipe integer dasar seperti "int" adalah tipe yang ditandatangani.

Opsi Mengontrol C + + Dialek Bagian ini menjelaskan opsi baris perintah yang hanya berguna untuk program C++. Anda juga dapat menggunakan sebagian besar opsi kompiler GNU terlepas dari bahasa apa program Anda ada di. Misalnya, Anda mungkin mengkompilasi file FirstClass.C seperti ini:

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

Dalam contoh ini, hanya -frepo adalah opsi yang dimaksudkan hanya untuk program C++; Anda dapat menggunakan opsi lain dengan bahasa apa pun yang didukung oleh GCC.

Berikut adalah daftar opsi yang hanya untuk mengkompilasi program C++:

-fabi-versi=n Gunakan versi n dari C++ ABI. Standarnya adalah versi 0.

Versi 0 mengacu pada versi yang paling sesuai dengan spesifikasi C++ ABI. Oleh karena itu, ABI yang diperoleh menggunakan versi 0 akan berubah di versi G++ yang berbeda karena bug ABI telah diperbaiki.

Versi 1 adalah versi C++ ABI yang pertama kali muncul di G++ 3.2.

Versi 2 adalah versi C++ ABI yang pertama kali muncul di G++ 3.4, dan merupakan default melalui G++ 4.9.

Versi 3 mengoreksi kesalahan dalam mengubah alamat konstan sebagai argumen template.

Versi 4, yang pertama kali muncul di G++ 4.5, mengimplementasikan mangling standar untuk vektor jenis.

Versi 5, yang pertama kali muncul di G++ 4.6, mengoreksi mangling atribut const/volatile pada tipe pointer fungsi, decltype dari decl biasa, dan penggunaan a parameter fungsi dalam deklarasi parameter lain.

Versi 6, yang pertama kali muncul di G++ 4.7, mengoreksi perilaku promosi C++11 enum cakupan dan mangling paket argumen template, const/static_cast, awalan ++ dan --, dan fungsi ruang lingkup kelas yang digunakan sebagai argumen templat.

Versi 7, yang pertama kali muncul di G++ 4.8, yang memperlakukan nullptr_t sebagai tipe bawaan dan mengoreksi mangling lambdas dalam lingkup argumen default.

Versi 8, yang pertama kali muncul di G++ 4.9, mengoreksi perilaku substitusi dari tipe fungsi dengan function-cv-qualifiers.

Lihat juga -Wabi.

-fabi-compat-versi=n Pada target yang mendukung alias kuat, G++ mengatasi perubahan dengan membuat alias dengan nama rusak yang benar saat mendefinisikan simbol dengan salah nama yang hancur. Switch ini menentukan versi ABI mana yang akan digunakan untuk alias.

Dengan -fabi-versi=0 (default), ini default ke 2. Jika versi ABI lain adalah dipilih secara eksplisit, defaultnya adalah 0.

Versi kompatibilitas juga diatur oleh -Wabi=n.

-fno-akses-kontrol Matikan semua pemeriksaan akses. Sakelar ini terutama berguna untuk mengatasi bug di kode kontrol akses.

-fcheck-baru Periksa apakah penunjuk yang dikembalikan oleh "operator baru" bukan nol sebelum mencoba memodifikasi penyimpanan yang dialokasikan. Pemeriksaan ini biasanya tidak diperlukan karena C++ standar menetapkan bahwa "operator baru" hanya mengembalikan 0 jika dinyatakan "lempar ()", di dalam hal ini kompiler selalu memeriksa nilai kembalian bahkan tanpa opsi ini. Di dalam semua kasus lain, ketika "operator baru" memiliki spesifikasi pengecualian yang tidak kosong, memori kelelahan ditandai dengan melempar "std::bad_alloc". Lihat juga baru (tidak membuang).

-fconstexpr-kedalaman=n Setel kedalaman evaluasi bersarang maksimum untuk fungsi constexpr C++11 ke n. Sebuah batas diperlukan untuk mendeteksi rekursi tanpa akhir selama evaluasi ekspresi konstan. NS minimum yang ditentukan oleh standar adalah 512.

-fdeduce-init-list Aktifkan pengurangan parameter jenis template sebagai "std::initializer_list" dari kurung kurawal daftar penginisialisasi terlampir, yaitu

templat maju otomatis(T t) -> decltype (realfn (t)) { mengembalikan realfn (t); }

batal f() { maju({1,2}); // panggilan ke depan > }

Pengurangan ini diimplementasikan sebagai kemungkinan perpanjangan dari yang semula diusulkan semantik untuk standar C++ 11, tetapi bukan bagian dari standar akhir, jadi dinonaktifkan secara default. Opsi ini tidak digunakan lagi, dan mungkin akan dihapus di masa mendatang versi G++.

-teman-injeksi Suntikkan fungsi teman ke dalam namespace terlampir, sehingga terlihat di luar lingkup kelas di mana mereka dideklarasikan. Fungsi teman didokumentasikan untuk bekerja dengan cara ini di Manual Referensi C++ Beranotasi yang lama. Namun, dalam ISO C++ a fungsi teman yang tidak dideklarasikan dalam lingkup terlampir hanya dapat ditemukan menggunakan pencarian yang bergantung pada argumen. GCC default ke perilaku standar.

Opsi ini untuk kompatibilitas, dan dapat dihapus dalam rilis G++ mendatang.

-fno-elide-konstruktor Standar C++ memungkinkan implementasi untuk menghilangkan pembuatan sementara yang hanya digunakan untuk menginisialisasi objek lain dengan tipe yang sama. Menentukan opsi ini menonaktifkan optimasi itu, dan memaksa G++ untuk memanggil copy constructor dalam semua kasus.

-fno-menegakkan-eh-spesifikasi Jangan membuat kode untuk memeriksa pelanggaran spesifikasi pengecualian pada saat dijalankan. Opsi ini melanggar standar C++, tetapi mungkin berguna untuk mengurangi ukuran kode di build produksi, seperti mendefinisikan "NDEBUG". Ini tidak memberikan kode pengguna izin untuk melempar pengecualian yang melanggar spesifikasi pengecualian; NS kompiler masih mengoptimalkan berdasarkan spesifikasi, jadi melempar yang tidak terduga pengecualian menghasilkan perilaku yang tidak terdefinisi pada saat run time.

-fextern-tls-init -fno-ekstern-tls-init Standar C++11 dan OpenMP memungkinkan variabel "thread_local" dan "threadprivate" untuk memiliki inisialisasi dinamis (runtime). Untuk mendukung ini, penggunaan variabel semacam itu melewati fungsi pembungkus yang melakukan inisialisasi yang diperlukan. Ketika penggunaan dan definisi variabel berada dalam unit terjemahan yang sama, overhead ini dapat dioptimalkan, tetapi ketika penggunaannya dalam unit terjemahan yang berbeda ada overhead yang signifikan bahkan jika variabel tidak benar-benar membutuhkan dinamis inisialisasi. Jika programmer dapat yakin bahwa tidak ada penggunaan variabel dalam non- mendefinisikan TU perlu memicu inisialisasi dinamis (baik karena variabelnya adalah diinisialisasi secara statis, atau penggunaan variabel dalam mendefinisikan TU akan dieksekusi sebelum digunakan di TU lain), mereka dapat menghindari overhead ini dengan -fno-ekstern-tls-init .

Pada target yang mendukung alias simbol, defaultnya adalah -fextern-tls-init. Pada target yang tidak mendukung alias simbol, defaultnya adalah -fno-ekstern-tls-init.

-untuk-lingkup -fno-untuk-lingkup If -untuk-lingkup ditentukan, ruang lingkup variabel dideklarasikan dalam a untuk-init-pernyataan terbatas pada loop "untuk" itu sendiri, seperti yang ditentukan oleh standar C++. Jika -fno-untuk-lingkup ditentukan, ruang lingkup variabel dideklarasikan dalam a untuk-init-pernyataan meluas ke akhir cakupan terlampir, seperti yang terjadi pada versi lama G++, dan implementasi C++ (tradisional) lainnya.

Jika tidak ada tanda yang diberikan, standarnya adalah mengikuti standar, tetapi mengizinkan dan memberi peringatan untuk kode gaya lama yang seharusnya tidak valid, atau berbeda tingkah laku.

-fno-gnu-kata kunci Tidak mengenali "typeof" sebagai kata kunci, sehingga kode dapat menggunakan kata ini sebagai pengenal. Anda dapat menggunakan kata kunci "__typeof__" sebagai gantinya. -ansi menyiratkan -fno-gnu-kata kunci.

-fno-implisit-templat Jangan pernah memancarkan kode untuk template non-inline yang dipakai secara implisit (yaitu dengan menggunakan); hanya memancarkan kode untuk instantiasi eksplisit.

-fno-implisit-inline-template Jangan memancarkan kode untuk instantiasi implisit dari template sebaris. Standarnya adalah menangani inline secara berbeda sehingga kompilasi dengan dan tanpa perlu pengoptimalan set yang sama dari instantiasi eksplisit.

-fno-implement-inlines Untuk menghemat ruang, jangan memancarkan salinan keluar dari fungsi sebaris yang dikendalikan oleh "#pragma implementasi". Ini menyebabkan kesalahan tautan jika fungsi-fungsi ini tidak sebaris di mana pun mereka dipanggil.

-fms-ekstensi Nonaktifkan peringatan Wpedantic tentang konstruksi yang digunakan dalam MFC, seperti int implisit dan mendapatkan pointer ke fungsi anggota melalui sintaks non-standar.

-fno-nonansi-builtin Nonaktifkan deklarasi fungsi bawaan yang tidak diamanatkan oleh ANSI/ISO C. Ini termasuk "ffs", "alloca", "_exit", "index", "bzero", "conjf", dan terkait lainnya fungsi.

-fnothrow-opt Perlakukan spesifikasi pengecualian "throw()" seolah-olah itu adalah spesifikasi "noexcept" untuk mengurangi atau menghilangkan overhead ukuran teks relatif terhadap suatu fungsi tanpa pengecualian spesifikasi. Jika fungsi memiliki variabel lokal tipe dengan non-sepele destruktor, spesifikasi pengecualian sebenarnya membuat fungsi lebih kecil karena pembersihan EH untuk variabel-variabel tersebut dapat dioptimalkan. Efek semantiknya adalah bahwa pengecualian dikeluarkan dari fungsi dengan spesifikasi pengecualian seperti itu menghasilkan panggilan untuk "mengakhiri" daripada "tidak terduga".

-fno-operator-nama Jangan perlakukan kata kunci nama operator "dan", "bitand", "bitor", "compl", "not", "atau" dan "xor" sebagai sinonim sebagai kata kunci.

-fno-opsional-diags Nonaktifkan diagnostik yang menurut standar tidak perlu dikeluarkan oleh kompiler. Saat ini, satu-satunya diagnostik yang dikeluarkan oleh G++ adalah diagnostik untuk nama yang memiliki beberapa makna dalam sebuah kelas.

-fpermisif Turunkan beberapa diagnostik tentang kode yang tidak sesuai dari kesalahan menjadi peringatan. Dengan demikian, menggunakan -fpermisif memungkinkan beberapa kode yang tidak sesuai untuk dikompilasi.

-fno-cantik-templat Ketika pesan kesalahan mengacu pada spesialisasi templat fungsi, kompilator biasanya mencetak tanda tangan template diikuti dengan argumen template dan setiap typedefs atau typenames dalam tanda tangan (misalnya "void f(T) [dengan T = int]" bukan dari "void f(int)") sehingga jelas template mana yang terlibat. Ketika kesalahan pesan mengacu pada spesialisasi templat kelas, kompiler menghilangkan apa pun argumen template yang cocok dengan argumen template default untuk template tersebut. Jika salah satu dari perilaku ini membuat lebih sulit untuk memahami pesan kesalahan daripada lebih mudah, Anda dapat menggunakan -fno-cantik-templat untuk menonaktifkan mereka.

-frepo Aktifkan instantiasi template otomatis pada waktu tautan. Opsi ini juga menyiratkan -fno-implisit-templat.

-fno-rtti Nonaktifkan pembuatan informasi tentang setiap kelas dengan fungsi virtual untuk digunakan oleh fitur identifikasi tipe run-time C++ ("dynamic_cast" dan "typeid"). Jika kamu jangan gunakan bagian bahasa itu, Anda dapat menghemat ruang dengan menggunakan tanda ini. Perhatikan bahwa penanganan pengecualian menggunakan informasi yang sama, tetapi G++ menghasilkannya sebagai diperlukan. Operator "dynamic_cast" masih dapat digunakan untuk cast yang tidak memerlukan informasi jenis run-time, yaitu dilemparkan ke "void *" atau ke kelas dasar yang tidak ambigu.

-ukuran-dealokasi Aktifkan deklarasi global bawaan

batalkan operator hapus (batal *, std::size_t) noexcept; batalkan operator hapus[] (batal *, std::size_t) noexcept;

seperti yang diperkenalkan di C++14. Ini berguna untuk dealokasi penggantian yang ditentukan pengguna fungsi yang, misalnya, menggunakan ukuran objek untuk membuat deallocation lebih cepat. Diaktifkan secara default di bawah -std=c++14 dan di atas. Bendera -Wsized-dealokasi memperingatkan tentang tempat-tempat yang mungkin ingin menambahkan definisi.

-fstats Keluarkan statistik tentang pemrosesan front-end di akhir kompilasi. Ini informasi umumnya hanya berguna untuk tim pengembangan G++.

-fstrict-enum Izinkan kompiler untuk mengoptimalkan menggunakan asumsi bahwa nilai tipe yang disebutkan hanya bisa menjadi salah satu nilai enumerasi (sebagaimana didefinisikan dalam standar C++; pada dasarnya, nilai yang dapat direpresentasikan dalam jumlah bit minimum yang diperlukan untuk mewakili semua enumerator). Asumsi ini mungkin tidak valid jika program menggunakan cast untuk mengonversi nilai integer arbitrer ke tipe enumerasi.

-ftemplate-backtrace-limit=n Tetapkan jumlah maksimum catatan instantiasi template untuk satu peringatan atau kesalahan untuk n. Nilai defaultnya adalah 10.

-ftemplate-kedalaman=n Atur kedalaman instantiasi maksimum untuk kelas template ke n. Batasan pada kedalaman instantiasi template diperlukan untuk mendeteksi rekursi tanpa akhir selama template instantiasi kelas. Program yang sesuai dengan ANSI/ISO C++ tidak boleh bergantung pada maksimum kedalaman lebih besar dari 17 (diubah menjadi 1024 di C++ 11). Nilai defaultnya adalah 900, karena compiler dapat kehabisan ruang stack sebelum mencapai 1024 dalam beberapa situasi.

-fno-threadsafe-statis Jangan memancarkan kode tambahan untuk menggunakan rutinitas yang ditentukan dalam C++ ABI untuk thread- inisialisasi statika lokal yang aman. Anda dapat menggunakan opsi ini untuk mengurangi ukuran kode sedikit dalam kode yang tidak perlu thread-safe.

-fuse-cxa-atexit Daftarkan destruktor untuk objek dengan durasi penyimpanan statis dengan "__cxa_atexit" fungsi daripada fungsi "atexit". Opsi ini diperlukan untuk sepenuhnya penanganan destruktor statis yang sesuai standar, tetapi hanya berfungsi jika pustaka C Anda mendukung "__cxa_atexit".

-fno-gunakan-cxa-get-exception-ptr Jangan gunakan rutinitas runtime "__cxa_get_exception_ptr". Ini menyebabkan "std::uncaught_exception" salah, tetapi diperlukan jika runtime rutin tidak tersedia.

-fvisibility-inlines-hidden Switch ini menyatakan bahwa pengguna tidak mencoba untuk membandingkan pointer ke inline fungsi atau metode di mana alamat dari dua fungsi diambil berbeda objek bersama.

Efeknya adalah bahwa GCC dapat, secara efektif, menandai metode sebaris dengan "__attribute__ ((visibility ("hidden")))" sehingga tidak muncul dalam ekspor tabel DSO dan tidak memerlukan tipuan PLT saat digunakan dalam DSO. Mengaktifkan opsi ini dapat memiliki efek dramatis pada waktu muat dan tautan DSO karena secara besar-besaran mengurangi ukuran tabel ekspor dinamis ketika perpustakaan menjadi berat penggunaan template.

Perilaku sakelar ini tidak sama dengan menandai metode sebagai tersembunyi langsung, karena tidak mempengaruhi variabel statis lokal ke fungsi atau penyebab compiler untuk menyimpulkan bahwa fungsi tersebut didefinisikan hanya dalam satu objek bersama.

Anda dapat menandai metode sebagai memiliki visibilitas secara eksplisit untuk meniadakan efek dari beralih untuk metode itu. Misalnya, jika Anda ingin membandingkan pointer dengan a metode inline tertentu, Anda dapat menandainya sebagai memiliki visibilitas default. Menandai melampirkan kelas dengan visibilitas eksplisit tidak berpengaruh.

Metode inline yang dibuat secara eksplisit tidak terpengaruh oleh opsi ini sebagai tautannya sebaliknya mungkin melintasi batas perpustakaan bersama.

-fvisibility-ms-compat Bendera ini mencoba menggunakan pengaturan visibilitas untuk membuat model tautan C++ GCC kompatibel dengan Microsoft Visual Studio.

Bendera membuat perubahan ini pada model tautan GCC:

1. Ini mengatur visibilitas default ke "tersembunyi", seperti -fvisibility=tersembunyi.

2. Jenis, tetapi bukan anggotanya, tidak disembunyikan secara default.

3. Aturan Satu Definisi santai untuk tipe tanpa visibilitas eksplisit spesifikasi yang didefinisikan di lebih dari satu objek bersama: deklarasi tersebut diizinkan jika diizinkan ketika opsi ini tidak digunakan.

Dalam kode baru lebih baik digunakan -fvisibility=tersembunyi dan ekspor kelas-kelas yang dimaksudkan untuk terlihat secara eksternal. Sayangnya kode dapat diandalkan, mungkin secara tidak sengaja, pada perilaku Visual Studio.

Di antara konsekuensi dari perubahan ini adalah bahwa anggota data statis dari tipe yang sama dengan nama yang sama tetapi didefinisikan dalam objek bersama yang berbeda berbeda, jadi berubah yang satu tidak mengubah yang lain; dan pointer itu ke anggota fungsi yang didefinisikan dalam objek bersama yang berbeda mungkin tidak sebanding. Ketika bendera ini diberikan, itu adalah pelanggaran ODR untuk mendefinisikan jenis dengan nama yang sama secara berbeda.

-fvtable-verifikasi=[std|sebelum|tak satupun] Hidupkan (atau matikan, jika menggunakan -fvtable-verifikasi=tidak ada) fitur keamanan yang memverifikasi di run time, untuk setiap panggilan virtual, bahwa penunjuk vtable melalui mana panggilan tersebut dibuat berlaku untuk jenis objek, dan belum rusak atau ditimpa. Jika penunjuk vtable yang tidak valid terdeteksi pada waktu berjalan, kesalahan dilaporkan dan eksekusi program segera dihentikan.

Opsi ini menyebabkan struktur data run-time dibangun pada startup program, yaitu: digunakan untuk memverifikasi pointer vtable. Pilihannya std serta sebelum mengontrol waktu ketika struktur data ini dibangun. Dalam kedua kasus, struktur datanya adalah dibangun sebelum eksekusi mencapai "utama". Menggunakan -fvtable-verifikasi=std menyebabkan data struktur yang akan dibangun setelah perpustakaan bersama telah dimuat dan diinisialisasi. -fvtable-verifikasi=preinit menyebabkan mereka dibangun sebelum perpustakaan bersama telah dimuat dan diinisialisasi.

Jika opsi ini muncul beberapa kali di baris perintah dengan nilai yang berbeda ditentukan, tak satupun mengambil prioritas tertinggi di atas keduanya std serta sebelum; sebelum Dibutuhkan prioritas di atas std.

-fvtv-debug Ketika digunakan bersama dengan -fvtable-verifikasi=std or -fvtable-verifikasi=preinit, penyebab versi debug dari fungsi runtime untuk fitur verifikasi vtable menjadi ditelepon. Bendera ini juga menyebabkan kompiler mencatat informasi tentang vtable mana pointer yang ditemukannya untuk setiap kelas. Informasi ini ditulis ke file bernama vtv_set_ptr_data.log di direktori yang dinamai oleh variabel lingkungan VTV_LOGS_DIR jika itu didefinisikan atau direktori kerja saat ini sebaliknya.

Catatan: Fitur ini menambahkan data ke file log. Jika Anda menginginkan file log baru, jadilah pastikan untuk menghapus yang sudah ada.

-fvtv-hitungan Ini adalah tanda debug. Ketika digunakan bersama dengan -fvtable-verifikasi=std or -fvtable-verifikasi=preinit, ini menyebabkan kompiler melacak jumlah total panggilan virtual yang ditemuinya dan jumlah verifikasi yang dimasukkan. Juga menghitung jumlah panggilan ke fungsi perpustakaan run-time tertentu yang dimasukkan dan mencatat informasi ini untuk setiap unit kompilasi. Kompiler menulis informasi ini ke file bernama vtv_count_data.log di direktori yang dinamai oleh variabel lingkungan VTV_LOGS_DIR jika itu didefinisikan atau direktori kerja saat ini sebaliknya. Juga menghitung ukuran set pointer vtable untuk setiap kelas, dan menulis informasi ini untuk vtv_class_set_sizes.log Di direktori yang sama

Catatan: Fitur ini menambahkan data ke file log. Untuk mendapatkan file log baru, pastikan untuk hapus yang sudah ada.

-fno-lemah Jangan gunakan dukungan simbol yang lemah, meskipun disediakan oleh linker. Secara default, G++ menggunakan simbol yang lemah jika tersedia. Opsi ini hanya ada untuk pengujian, dan tidak boleh digunakan oleh pengguna akhir; itu menghasilkan kode yang lebih rendah dan tidak memiliki manfaat. Opsi ini dapat dihapus dalam rilis G++ di masa mendatang.

-nostdinc++ Jangan mencari file header di direktori standar khusus untuk C++, tetapi lakukan masih mencari direktori standar lainnya. (Opsi ini digunakan saat membangun pustaka C++.)

Selain itu, opsi pengoptimalan, peringatan, dan pembuatan kode ini hanya memiliki arti untuk program C++:

-Wabi (C, Objective-C, C++ dan Objective-C++ saja) Ketika eksplisit -fabi-versi=n opsi digunakan, menyebabkan G++ memperingatkan saat menghasilkan kode yang mungkin tidak kompatibel dengan C++ ABI vendor-netral. Sejak G++ sekarang default ke -fabi-versi=0, -Wabi tidak berpengaruh kecuali versi ABI yang lebih lama adalah dipilih (dengan -fabi-versi=n) atau versi kompatibilitas yang lebih lama dipilih (dengan -Wabi=n or -fabi-compat-versi=n).

Meskipun upaya telah dilakukan untuk memperingatkan tentang semua kasus seperti itu, mungkin ada beberapa kasus yang tidak diperingatkan, meskipun G++ menghasilkan kode yang tidak kompatibel. Mungkin juga ada kasus di mana peringatan dikeluarkan meskipun kodenya dihasilkan kompatibel.

Anda harus menulis ulang kode Anda untuk menghindari peringatan ini jika Anda khawatir tentang fakta bahwa kode yang dihasilkan oleh G++ mungkin tidak kompatibel dengan biner dengan kode yang dihasilkan oleh compiler lainnya.

-Wabi juga dapat digunakan dengan nomor versi eksplisit untuk memperingatkan tentang kompatibilitas dengan tertentu -fabi-versi tingkat, misalnya -Wabi=2 untuk memperingatkan tentang perubahan relatif terhadap -fabi-versi=2. Menentukan nomor versi juga ditetapkan -fabi-compat-versi=n.

Ketidakcocokan yang diketahui dalam -fabi-versi=2 (yang merupakan default dari GCC 3.4 ke 4.9) meliputi:

* Template dengan parameter template non-tipe dari tipe referensi telah rusak salah:

int eksternal N; templat struktur S {}; kosong n (S ) {2}

Ini telah diperbaiki di -fabi-versi=3.

* Jenis vektor SIMD yang dideklarasikan menggunakan "__attribute ((vector_size)))" dirusak dalam cara non-standar yang tidak memungkinkan kelebihan fungsi yang mengambil vektor dari ukuran yang berbeda.

Mangling diubah menjadi -fabi-versi=4.

* "__attribute ((const))" dan "noreturn" dihancurkan sebagai kualifikasi tipe, dan "decltype" dari deklarasi polos dilipat.

Masalah mangling ini telah diperbaiki di -fabi-versi=5.

* Enumerator tercakup yang diteruskan sebagai argumen ke fungsi variadik dipromosikan seperti enumerator yang tidak dicakup, menyebabkan "va_arg" mengeluh. Pada sebagian besar target, ini tidak benar-benar memengaruhi parameter yang melewati ABI, karena tidak ada cara untuk meneruskan argumen lebih kecil dari "int".

Juga, ABI mengubah mangling paket argumen template, "const_cast", "static_cast", penambahan/penurunan awalan, dan fungsi ruang lingkup kelas yang digunakan sebagai argumen templat.

Masalah-masalah ini diperbaiki dalam -fabi-versi=6.

* Lambdas dalam lingkup argumen default tidak benar, dan ABI berubah mangling dari "nullptr_t".

Masalah-masalah ini diperbaiki dalam -fabi-versi=7.

* Saat merusak tipe fungsi dengan kualifikasi fungsi-cv, yang tidak memenuhi syarat jenis fungsi diperlakukan secara tidak benar sebagai kandidat substitusi.

Ini telah diperbaiki di -fabi-versi=8.

Ini juga memperingatkan tentang perubahan terkait psABI. Perubahan psABI yang diketahui pada saat ini meliputi:

* Untuk SysV/x86-64, serikat dengan anggota "ganda panjang" dilewatkan dalam memori sebagai ditentukan dalam psABI. Sebagai contoh:

serikat U { ld ganda panjang; di aku; };

"union U" selalu dilewatkan dalam memori.

-Wabi-tag (C++ dan Objective-C++ saja) Peringatkan saat jenis dengan tag ABI digunakan dalam konteks yang tidak memiliki tag ABI tersebut. Lihat C + + atribut untuk informasi lebih lanjut tentang tag ABI.

-Wctor-dtor-privasi (C++ dan Objective-C++ saja) Peringatkan ketika sebuah kelas tampaknya tidak dapat digunakan karena semua konstruktor atau destruktor di dalamnya kelas bersifat pribadi, dan tidak memiliki teman atau fungsi anggota statis publik. Juga peringatkan jika tidak ada metode non-pribadi, dan setidaknya ada satu anggota pribadi fungsi yang bukan konstruktor atau destruktor.

-Wdelete-non-virtual-dtor (C++ dan Objective-C++ saja) Peringatkan ketika "hapus" digunakan untuk menghancurkan instance kelas yang memiliki virtual fungsi dan destruktor non-virtual. Tidak aman untuk menghapus instance turunan kelas melalui pointer ke kelas dasar jika kelas dasar tidak memiliki virtual perusak. Peringatan ini diaktifkan oleh -Dinding.

-Sufiks-Wliteral (C++ dan Objective-C++ saja) Peringatkan ketika literal string atau karakter diikuti oleh akhiran ud yang tidak dimulai dengan garis bawah. Sebagai ekstensi yang sesuai, GCC memperlakukan sufiks seperti: token pra-pemrosesan terpisah untuk menjaga kompatibilitas mundur dengan kode yang menggunakan makro pemformatan dari " ". Sebagai contoh:

#define __STDC_FORMAT_MACROS #termasuk #termasuk

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

Dalam hal ini, "PRId64" diperlakukan sebagai token prapemrosesan terpisah.

Peringatan ini diaktifkan secara default.

-Menyempit (C++ dan Objective-C++ saja) Peringatkan ketika konversi penyempitan yang dilarang oleh C++ 11 terjadi di dalam { }, misalnya

int saya = { 2.2 }; // error: menyempit dari double ke int

Bendera ini termasuk dalam -Dinding serta -Wc++11-kompat.

Dengan -std=c++11, -Wno-penyempitan menekan diagnostik yang disyaratkan oleh standar. Perhatikan bahwa ini tidak mempengaruhi arti dari kode yang terbentuk dengan baik; mempersempit konversi masih dianggap kurang baik dalam konteks SFINAE.

-Wnokecuali (C++ dan Objective-C++ saja) Peringatkan ketika ekspresi noexcept bernilai false karena panggilan ke suatu fungsi yang tidak memiliki spesifikasi pengecualian non-melempar (yaitu "melempar ()" atau "noexcept") tetapi diketahui oleh kompiler untuk tidak pernah melempar pengecualian.

-Wnon-virtual-dtor (C++ dan Objective-C++ saja) Peringatkan ketika kelas memiliki fungsi virtual dan destruktor non-virtual yang dapat diakses sendiri atau dalam kelas dasar polimorfik yang dapat diakses, dalam hal ini dimungkinkan tetapi tidak aman untuk menghapus turunan dari kelas turunan melalui pointer ke kelas itu sendiri atau kelas dasar. Peringatan ini secara otomatis diaktifkan jika -Weffc++ ditentukan.

-Penulis Penulisan (C++ dan Objective-C++ saja) Peringatkan ketika urutan inisialisasi anggota yang diberikan dalam kode tidak sesuai dengan pesanan di mana mereka harus dieksekusi. Contohnya:

struktur A { di aku; int j; A(): j (0), saya (1) { } };

Kompiler mengatur ulang inisialisasi anggota untuk "i" dan "j" agar sesuai dengan perintah deklarasi anggota, memancarkan peringatan untuk efek itu. Peringatan ini adalah diaktifkan oleh -Dinding.

-fext-numerik-literal (C++ dan Objective-C++ saja) Terima sufiks angka literal imajiner, titik tetap, atau yang ditentukan mesin sebagai GNU ekstensi. Ketika opsi ini dimatikan, sufiks ini diperlakukan sebagai pengguna C++11- akhiran numerik literal yang ditentukan. Ini aktif secara default untuk semua dialek pra-C++11 dan semua dialek GNU: -std=c++98, -std=gnu++98, -std=gnu++11, -std=gnu++14. Ini opsi dimatikan secara default untuk ISO C++ 11 dan seterusnya (-std=c++11, ...).

Berikut ini -A... pilihan tidak terpengaruh oleh -Dinding.

-Weffc++ (C++ dan Objective-C++ saja) Peringatkan tentang pelanggaran pedoman gaya berikut dari Scott Meyers' Efektif C + + seri buku:

* Tentukan konstruktor salinan dan operator penugasan untuk kelas dengan secara dinamis- memori yang dialokasikan.

* Lebih suka inisialisasi daripada penugasan di konstruktor.

* Minta "operator=" mengembalikan referensi ke *this.

* Jangan mencoba mengembalikan referensi saat Anda harus mengembalikan objek.

* Membedakan antara prefiks dan bentuk postfix dari operator increment dan decrement.

* Jangan pernah membebani "&&", "||", atau ",".

Opsi ini juga memungkinkan -Wnon-virtual-dtor, yang juga merupakan salah satu C++ effective yang efektif rekomendasi. Namun, pemeriksaan diperpanjang untuk memperingatkan tentang kurangnya virtual destruktor di kelas basis non-polimorfik yang dapat diakses juga.

Saat memilih opsi ini, ketahuilah bahwa header perpustakaan standar tidak mematuhi semua dari pedoman ini; menggunakan grep -v untuk menyaring peringatan tersebut.

-Strict-null-sentinel (C++ dan Objective-C++ saja) Peringatkan tentang penggunaan "NULL" yang tidak dicor sebagai penjaga. Saat mengkompilasi hanya dengan GCC ini adalah penjaga yang valid, karena "NULL" didefinisikan sebagai "__null". Meskipun itu nol pointer konstan daripada pointer nol, itu dijamin dengan ukuran yang sama sebagai penunjuk. Tetapi penggunaan ini tidak portabel di berbagai kompiler yang berbeda.

-Wno-non-template-teman (C++ dan Objective-C++ saja) Nonaktifkan peringatan ketika fungsi teman non-templat dideklarasikan dalam template. Sejak munculnya dukungan spesifikasi template eksplisit di G++, jika nama teman adalah id yang tidak memenuhi syarat (yaitu, teman foo(int)), spesifikasi bahasa C++ menuntut agar teman mendeklarasikan atau mendefinisikan fungsi nontemplate biasa. (Bagian 14.5.3). Sebelum G++ mengimplementasikan spesifikasi eksplisit, id yang tidak memenuhi syarat dapat menjadi ditafsirkan sebagai spesialisasi tertentu dari fungsi template. Karena ini perilaku yang tidak sesuai bukan lagi perilaku default untuk G++, -Wnon-template-teman memungkinkan kompiler untuk memeriksa kode yang ada untuk potensi masalah spot dan aktif secara default. Perilaku kompiler baru ini dapat dimatikan dengan -Wno-non-template-teman, yang menyimpan kode compiler konforman tetapi menonaktifkan peringatan yang membantu.

- Pemeran gaya-Wold (C++ dan Objective-C++ saja) Peringatkan jika cast gaya lama (C-style) ke tipe non-void digunakan dalam program C++. Pemeran gaya baru ("dynamic_cast", "static_cast", "reinterpret_cast", dan "const_cast") kurang rentan terhadap efek yang tidak diinginkan dan lebih mudah untuk dicari.

-Woverloaded-virtual (C++ dan Objective-C++ saja) Peringatkan ketika deklarasi fungsi menyembunyikan fungsi virtual dari kelas dasar. Untuk contoh, dalam:

struktur A { kekosongan maya f(); };

struct B: publik A { batal f(int); };

versi kelas "A" dari "f" disembunyikan di "B", dan kode seperti:

B*b; b->f();

gagal untuk dikompilasi.

-Wno-pmf-konversi (C++ dan Objective-C++ saja) Nonaktifkan diagnostik untuk mengonversi penunjuk terikat ke fungsi anggota menjadi dataran penunjuk.

-Wsign-promo (C++ dan Objective-C++ saja) Peringatkan ketika resolusi kelebihan memilih promosi dari jenis yang tidak ditandatangani atau disebutkan ke jenis yang ditandatangani, melalui konversi ke jenis yang tidak ditandatangani dengan ukuran yang sama. Sebelumnya versi G++ mencoba mempertahankan unsignedness, tetapi standar mengamanatkan saat ini tingkah laku.

Opsi Mengontrol Tujuan-C serta Objective-C++ Dialek (CATATAN: Manual ini tidak menjelaskan bahasa Objective-C dan Objective-C++ diri.

Bagian ini menjelaskan opsi baris perintah yang hanya bermakna untuk Objective-C dan program Objective-C++. Anda juga dapat menggunakan sebagian besar GNU yang tidak bergantung pada bahasa pilihan kompiler. Misalnya, Anda mungkin mengkompilasi file beberapa_kelas.m seperti ini:

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

Dalam contoh ini, -fgnu-runtime adalah opsi yang dimaksudkan hanya untuk Objective-C dan Objective-C++ program; Anda dapat menggunakan opsi lain dengan bahasa apa pun yang didukung oleh GCC.

Perhatikan bahwa karena Objective-C adalah perpanjangan dari bahasa C, kompilasi Objective-C juga dapat menggunakan opsi khusus untuk front-end C (misalnya, -Tradisional). Demikian pula, Kompilasi Objective-C++ dapat menggunakan opsi khusus C++ (mis. -Wabi).

Berikut adalah daftar opsi yang hanya untuk mengkompilasi Objective-C dan Objective-C++ program:

-fconstant-string-class=nama kelas penggunaan nama kelas sebagai nama kelas yang akan dipakai untuk setiap string literal ditentukan dengan sintaks "@"..."". Nama kelas default adalah "NXConstantString" jika runtime GNU sedang digunakan, dan "NSConstantString" jika runtime NeXT sedang digunakan (lihat di bawah). NS -fconstant-cfstrings opsi, jika juga ada, menimpa -fconstant-string-kelas pengaturan dan menyebabkan literal "@"..."" diletakkan sebagai konstan string CoreFoundation.

-fgnu-runtime Hasilkan kode objek yang kompatibel dengan runtime Objective-C GNU standar. Ini adalah default untuk sebagian besar jenis sistem.

-fnext-runtime Hasilkan output yang kompatibel dengan runtime NeXT. Ini adalah default untuk berbasis NeXT sistem, termasuk Darwin dan Mac OS X. Makro "__NEXT_RUNTIME__" telah ditentukan sebelumnya jika (dan hanya jika) opsi ini digunakan.

-fno-nil-penerima Asumsikan bahwa semua pengiriman pesan Objective-C ("[receiver message:arg]") dalam hal ini unit terjemahan memastikan bahwa penerima tidak "nihil". Ini memungkinkan lebih banyak titik masuk yang efisien dalam runtime yang akan digunakan. Opsi ini hanya tersedia di hubungannya dengan runtime NeXT dan ABI versi 0 atau 1.

-fobjc-abi-versi=n Gunakan versi n dari Objective-C ABI untuk runtime yang dipilih. Pilihan ini adalah saat ini hanya didukung untuk runtime NeXT. Dalam hal ini, Versi 0 adalah ABI tradisional (32-bit) tanpa dukungan untuk properti dan Objective-C 2.0 lainnya tambahan. Versi 1 adalah ABI tradisional (32-bit) dengan dukungan untuk properti dan tambahan Objective-C 2.0 lainnya. Versi 2 adalah ABI modern (64-bit). Jika tidak ada ditentukan, defaultnya adalah Versi 0 pada mesin target 32-bit, dan Versi 2 pada 64-bit mesin sasaran.

-fobjc-panggilan-cxx-cdtors Untuk setiap kelas Objective-C, periksa apakah ada variabel instannya yang merupakan objek C++ dengan konstruktor default non-sepele. Jika demikian, sintesis khusus "- (id) .cxx_construct" metode instance yang menjalankan konstruktor default non-sepele pada semua variabel instan seperti itu, secara berurutan, dan kemudian mengembalikan "diri". Demikian pula, periksa apakah ada variabel instan adalah objek C++ dengan destruktor non-sepele, dan jika demikian, sintesis metode khusus "- (void) .cxx_destruct" yang menjalankan semua destruktor default tersebut, di urutan terbalik.

Metode "- (id) .cxx_construct" dan "- (void) .cxx_destruct" hanya dihasilkan beroperasi pada variabel instan yang dideklarasikan di kelas Objective-C saat ini, dan bukan itu diwarisi dari superclass. Ini adalah tanggung jawab runtime Objective-C untuk memanggil semua metode tersebut dalam hierarki pewarisan objek. Identitas) .cxx_construct" metode dipanggil oleh runtime segera setelah objek baru contoh dialokasikan; metode "- (void) .cxx_destruct" dipanggil segera sebelum runtime membatalkan alokasi instance objek.

Pada tulisan ini, hanya runtime NeXT di Mac OS X 10.4 dan yang lebih baru yang mendukung menjalankan metode "- (id) .cxx_construct" dan "- (void) .cxx_destruct".

-fobjc-pengiriman langsung Izinkan lompatan cepat ke pengirim pesan. Di Darwin ini dicapai melalui halaman komunikasi.

-pengecualian-fobjc Aktifkan dukungan sintaksis untuk penanganan pengecualian terstruktur di Objective-C, mirip dengan apa yang ditawarkan oleh C++ dan Java. Opsi ini diperlukan untuk menggunakan Objective-C kata kunci @try, @throw, @catch, @finally dan @synchronized. Opsi ini tersedia dengan runtime GNU dan runtime NeXT (tetapi tidak tersedia bersama dengan runtime NeXT di Mac OS X 10.2 dan versi sebelumnya).

-fobjc-gc Aktifkan pengumpulan sampah (GC) di program Objective-C dan Objective-C++. Pilihan ini hanya tersedia dengan runtime NeXT; runtime GNU memiliki sampah yang berbeda implementasi koleksi yang tidak memerlukan flag compiler khusus.

-fobjc-nilcheck Untuk runtime NeXT dengan ABI versi 2, periksa metode penerima nil pemanggilan sebelum melakukan pemanggilan metode yang sebenarnya. Ini adalah default dan dapat dinonaktifkan menggunakan -fno-objc-nilcheck. Metode kelas dan panggilan super tidak pernah diperiksa untuk nil dengan cara ini tidak peduli apa flag ini diatur. Saat ini bendera ini tidak tidak ada saat runtime GNU, atau versi ABI runtime NeXT yang lebih lama, digunakan.

-fobjc-std=objc1 Sesuai dengan sintaks bahasa Objective-C 1.0, bahasa yang dikenali oleh GCC 4.0. Ini hanya mempengaruhi penambahan Objective-C ke bahasa C/C++; itu tidak mempengaruhi kesesuaian dengan standar C/C++, yang dikendalikan oleh dialek C/C++ yang terpisah bendera pilihan. Ketika opsi ini digunakan dengan Objective-C atau Objective-C++ compiler, semua sintaks Objective-C yang tidak dikenali oleh GCC 4.0 ditolak. Ini berguna jika Anda perlu memastikan bahwa kode Objective-C Anda dapat dikompilasi dengan versi GCC yang lebih lama.

-freplace-objc-kelas Pancarkan instruksi penanda khusus ld(1) untuk tidak menautkan secara statis di objek yang dihasilkan file, dan izinkan dyld(1) untuk memuatnya pada saat run time sebagai gantinya. Ini digunakan dalam hubungannya dengan mode debugging Fix-and-Continue, di mana file objek di pertanyaan dapat dikompilasi ulang dan dimuat ulang secara dinamis selama program eksekusi, tanpa perlu me-restart program itu sendiri. Saat ini, Perbaiki-dan- Fungsionalitas Lanjutkan hanya tersedia dalam hubungannya dengan runtime NeXT di Mac OS X 10.3 dan yang lebih baru.

-fzero-link Saat mengkompilasi untuk runtime NeXT, kompiler biasanya mengganti panggilan ke "objc_getClass("...")" (ketika nama kelas diketahui pada waktu kompilasi) dengan referensi kelas statis yang diinisialisasi pada waktu buka, yang meningkatkan waktu proses pertunjukan. Menentukan -fzero-link bendera menekan perilaku dan penyebab ini panggilan ke "objc_getClass("...")" untuk dipertahankan. Ini berguna di Zero-Link mode debugging, karena memungkinkan implementasi kelas individu untuk dimodifikasi selama eksekusi program. Runtime GNU saat ini selalu menyimpan panggilan ke "objc_get_class("...")" terlepas dari opsi baris perintah.

-fno-lokal-ivars Secara default, variabel instan di Objective-C dapat diakses seolah-olah mereka adalah lokal variabel dari dalam metode kelas tempat mereka dideklarasikan. Ini dapat menyebabkan membayangi antara variabel instan dan variabel lain yang dideklarasikan secara lokal di dalam metode kelas atau secara global dengan nama yang sama. Menentukan -fno-lokal-ivars flag menonaktifkan perilaku ini sehingga menghindari masalah bayangan variabel.

-fivar-visibilitas=[publik|terlindung|swasta|paket] Atur visibilitas variabel instance default ke opsi yang ditentukan sehingga instance variabel yang dideklarasikan di luar cakupan arahan pengubah akses apa pun default ke visibilitas yang ditentukan.

-gen-dekl Buang deklarasi antarmuka untuk semua kelas yang terlihat di file sumber ke file bernama nama sumber.decl.

-Wassign-intercept (Hanya Objective-C dan Objective-C++) Peringatkan setiap kali tugas Objective-C dicegat oleh pengumpul sampah.

-Wno-protokol (Hanya Objective-C dan Objective-C++) Jika sebuah kelas dideklarasikan untuk mengimplementasikan protokol, peringatan dikeluarkan untuk setiap metode dalam protokol yang tidak diimplementasikan oleh kelas. Perilaku default adalah untuk mengeluarkan peringatan untuk setiap metode yang tidak diimplementasikan secara eksplisit di kelas, bahkan jika a implementasi metode diwarisi dari superclass. Jika Anda menggunakan -Wno-protokol pilihan, maka metode yang diwarisi dari superclass dianggap diimplementasikan, dan tidak ada peringatan yang dikeluarkan untuk mereka.

-Pemilih (Hanya Objective-C dan Objective-C++) Peringatkan jika beberapa metode dari jenis yang berbeda untuk pemilih yang sama ditemukan selama kompilasi. Pemeriksaan dilakukan pada daftar metode pada tahap akhir kompilasi. Selain itu, pemeriksaan dilakukan untuk setiap pemilih yang muncul di a Ekspresi "@selector(...)", dan metode yang sesuai untuk pemilih itu telah ditemukan selama kompilasi. Karena pemeriksaan ini memindai tabel metode hanya di bagian akhir kompilasi, peringatan ini tidak dihasilkan jika tahap akhir kompilasi adalah tidak tercapai, misalnya karena kesalahan ditemukan selama kompilasi, atau karena -fsintaks-saja opsi sedang digunakan.

-Pertandingan-pemilih-Wstrict (Hanya Objective-C dan Objective-C++) Peringatkan jika beberapa metode dengan argumen dan/atau tipe pengembalian yang berbeda ditemukan untuk a pemilih yang diberikan saat mencoba mengirim pesan menggunakan pemilih ini ke penerima ketik "id" atau "Kelas". Saat tanda ini mati (yang merupakan perilaku default), kompiler menghilangkan peringatan tersebut jika ada perbedaan yang ditemukan terbatas pada tipe yang berbagi ukuran dan keselarasan yang sama.

-Wundeclared-selector (Hanya Objective-C dan Objective-C++) Peringatkan jika ditemukan ekspresi "@selector(...)" yang merujuk ke pemilih yang tidak dideklarasikan. A pemilih dianggap tidak dideklarasikan jika tidak ada metode dengan nama itu yang telah dideklarasikan sebelumnya ekspresi "@selector(...)", baik secara eksplisit dalam @interface atau @protocol deklarasi, atau secara implisit di bagian @implementation. Opsi ini selalu berfungsi pemeriksaannya segera setelah ekspresi "@selector(...)" ditemukan, sementara -Pemilih hanya melakukan pemeriksaannya pada tahap akhir kompilasi. Ini juga memberlakukan pengkodean konvensi gaya bahwa metode dan penyeleksi harus dideklarasikan sebelum digunakan.

-print-objc-runtime-info Hasilkan header C yang menjelaskan struktur terbesar yang dilewatkan oleh nilai, jika ada.

Opsi untuk kontrol Diagnostik pesan format Secara tradisional, pesan diagnostik telah diformat terlepas dari perangkat output aspek (misalnya lebarnya, ...). Anda dapat menggunakan opsi yang dijelaskan di bawah ini untuk mengontrol algoritma pemformatan untuk pesan diagnostik, misalnya berapa banyak karakter per baris, seberapa sering informasi lokasi sumber harus dilaporkan. Perhatikan bahwa beberapa ujung depan bahasa mungkin tidak menghormati pilihan ini.

-fmessage-panjang =n Cobalah untuk memformat pesan kesalahan agar sesuai dengan baris about n karakter. Jika n is nol, maka tidak ada pembungkusan garis yang dilakukan; setiap pesan kesalahan muncul pada satu baris. Ini adalah default untuk semua ujung depan.

-fdiagnostics-show-location=sekali Hanya bermakna dalam mode pembungkusan garis. Menginstruksikan reporter pesan diagnostik untuk memancarkan informasi lokasi sumber sekali; yaitu, jika pesannya terlalu panjang untuk muat pada satu jalur fisik dan harus dibungkus, lokasi sumber tidak akan dipancarkan (sebagai awalan) lagi, berulang-ulang, di baris lanjutan berikutnya. Ini adalah perilaku bawaan.

-fdiagnostics-show-location=setiap baris Hanya bermakna dalam mode pembungkusan garis. Menginstruksikan reporter pesan diagnostik untuk memancarkan informasi lokasi sumber yang sama (sebagai awalan) untuk jalur fisik yang dihasilkan dari proses pemecahan pesan yang terlalu panjang untuk muat dalam satu baris.

-fdiagnostik-warna[=KAPAN] -fno-diagnostik-warna Gunakan warna dalam diagnostik. KAPAN is tak pernah, selalu, atau mobil. Defaultnya tergantung pada caranya kompiler telah dikonfigurasi, dapat berupa salah satu dari yang di atas KAPAN pilihan atau juga tak pernah if GCC_COLORS variabel lingkungan tidak ada di lingkungan, dan mobil jika tidak. mobil berarti menggunakan warna hanya ketika kesalahan standar adalah terminal. NS bentuk -fdiagnostik-warna serta -fno-diagnostik-warna adalah alias untuk -fdiagnostics-color=selalu serta -fdiagnostics-color=tidak pernah, Masing-masing.

Warna ditentukan oleh variabel lingkungan GCC_COLORS. Nilainya adalah titik dua- daftar kapabilitas yang terpisah dan substring Select Graphic Rendition (SGR). SGR perintah ditafsirkan oleh terminal atau terminal emulator. (Lihat bagian di dokumentasi terminal teks Anda untuk nilai yang diizinkan dan artinya sebagai atribut karakter.) Nilai substring ini adalah bilangan bulat dalam representasi desimal dan dapat digabungkan dengan titik koma. Nilai umum untuk digabungkan meliputi 1 untuk berani, 4 untuk menggarisbawahi, 5 untuk berkedip, 7 untuk kebalikannya, 39 untuk warna latar depan default, 30 untuk 37 untuk warna latar depan, 90 untuk 97 untuk mode 16-warna warna latar depan, 38; 5; 0 untuk 38; 5; 255 untuk mode 88-warna dan 256-warna warna latar depan, 49 untuk latar belakang default warna, 40 untuk 47 untuk warna latar belakang, 100 untuk 107 untuk warna latar belakang mode 16 warna, serta 48; 5; 0 untuk 48; 5; 255 untuk 88-warna dan 256-warna mode warna latar belakang.

Defaultnya GCC_COLORS is

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

dimana 01; 31 berwarna merah tebal, 01; 35 adalah magenta tebal, 01; 36 adalah cyan tebal, 01; 32 berani hijau dan 01 berani. Pengaturan GCC_COLORS ke string kosong menonaktifkan warna. Kemampuan yang didukung adalah sebagai berikut.

"kesalahan=" Substring SGR untuk kesalahan: penanda.

"peringatan=" Substring SGR untuk peringatan: penanda.

"catatan=" Substring SGR untuk catatan: spidol.

"caret=" Substring SGR untuk garis tanda sisipan.

"lokus=" Substring SGR untuk informasi lokasi, file: baris or file:baris:kolom dan sebagainya

"kutipan=" Substring SGR untuk informasi yang dicetak dalam tanda kutip.

-fno-diagnostics-show-option Secara default, setiap diagnostik yang dipancarkan menyertakan teks yang menunjukkan opsi baris perintah yang secara langsung mengontrol diagnostik (jika opsi seperti itu diketahui oleh diagnostik mesin). Menentukan -fno-diagnostics-show-option bendera menekan itu tingkah laku.

-fno-diagnostik-show-caret Secara default, setiap diagnostik yang dipancarkan menyertakan baris sumber asli dan tanda sisipan '^' menunjukkan kolom. Opsi ini menekan informasi ini. Garis sumber adalah dipotong menjadi n karakter, jika -fmessage-panjang = n pilihan diberikan. Ketika keluaran dilakukan ke terminal, lebarnya terbatas pada lebar yang diberikan oleh KOLOM variabel lingkungan atau, jika tidak disetel, ke lebar terminal.

Opsi untuk Meminta or Menekan Peringatan Peringatan adalah pesan diagnostik yang melaporkan konstruksi yang tidak secara inheren salah tapi itu berisiko atau menyarankan mungkin ada kesalahan.

Opsi bahasa-independen berikut tidak mengaktifkan peringatan khusus tetapi mengontrol jenis diagnostik yang dihasilkan oleh GCC.

-fsintaks-saja Periksa kode untuk kesalahan sintaks, tetapi jangan lakukan apa pun di luar itu.

-fmax-kesalahan=n Membatasi jumlah maksimum pesan kesalahan hingga n, pada saat itu GCC lebih memilih daripada mencoba melanjutkan pemrosesan kode sumber. Jika n adalah 0 (default), tidak ada batasan jumlah pesan kesalahan yang dihasilkan. Jika -Wfatal-kesalahan juga ditentukan, maka -Wfatal-kesalahan diutamakan daripada opsi ini.

-w Menghambat semua pesan peringatan.

-Kesalahan Jadikan semua peringatan menjadi kesalahan.

-Kesalahan= Jadikan peringatan yang ditentukan menjadi kesalahan. Penentu untuk peringatan ditambahkan; misalnya -Kesalahan=beralih ternyata peringatan dikendalikan oleh -Switch ke dalam kesalahan. Saklar ini mengambil bentuk negatif, digunakan untuk meniadakan -Kesalahan untuk peringatan khusus; misalnya -Wno-error=beralih membuat -Switch peringatan bukan kesalahan, bahkan ketika -Kesalahan sedang berlaku.

Pesan peringatan untuk setiap peringatan yang dapat dikontrol mencakup opsi yang mengontrol peringatan. Opsi itu kemudian dapat digunakan dengan -Kesalahan= serta -Wno-error= seperti yang dijelaskan di atas. (Pencetakan opsi dalam pesan peringatan dapat dinonaktifkan menggunakan -fno-diagnostics-show-option bendera.)

Perhatikan bahwa menentukan -Kesalahan=foo secara otomatis menyiratkan -Wfoo. Namun, -Wno-error=foo tidak menyiratkan apa pun.

-Wfatal-kesalahan Opsi ini menyebabkan kompiler membatalkan kompilasi pada kesalahan pertama yang terjadi daripada mencoba untuk terus berjalan dan mencetak pesan kesalahan lebih lanjut.

Anda dapat meminta banyak peringatan khusus dengan opsi yang dimulai dengan -W, sebagai contoh -Simplisit untuk meminta peringatan pada deklarasi implisit. Masing-masing peringatan khusus ini opsi juga memiliki awal bentuk negatif -Tidak- untuk mematikan peringatan; Misalnya, -Wno-implisit. Manual ini hanya mencantumkan satu dari dua formulir, mana saja yang bukan default. Untuk opsi khusus bahasa lebih lanjut, lihat juga C + + Dialek Opsi serta Tujuan-C serta Objective-C++ Dialek Opsi.

Beberapa pilihan, seperti -Dinding serta -Wextra, aktifkan opsi lain, seperti -Tidak digunakan, yang dapat mengaktifkan opsi lebih lanjut, seperti -Wunused-nilai. Efek gabungan dari positif dan bentuk negatif adalah bahwa opsi yang lebih spesifik memiliki prioritas di atas yang kurang spesifik, terlepas dari posisi mereka di baris perintah. Untuk opsi dengan kekhususan yang sama, yang terakhir berlaku. Opsi diaktifkan atau dinonaktifkan melalui pragma berlaku seolah-olah itu muncul di akhir baris perintah.

Ketika opsi peringatan yang tidak dikenal diminta (misalnya, -Peringatan tidak diketahui), GCC memancarkan diagnostik yang menyatakan bahwa opsi tersebut tidak dikenali. Namun, jika -Tidak- bentuk digunakan, perilakunya sedikit berbeda: tidak ada diagnostik yang dibuat untuk -Wno-unknown-peringatan kecuali diagnostik lain sedang dibuat. Hal ini memungkinkan penggunaan new -Tidak- Pilihan dengan kompiler lama, tetapi jika terjadi kesalahan, kompiler memperingatkan bahwa pilihan hadir.

-Medantik -bengah Keluarkan semua peringatan yang diminta oleh ISO C dan ISO C++ yang ketat; tolak semua program yang gunakan ekstensi terlarang, dan beberapa program lain yang tidak mengikuti ISO C dan ISO C++. Untuk ISO C, ikuti versi standar ISO C yang ditentukan oleh: -std opsi yang digunakan.

Program ISO C dan ISO C++ yang valid harus dikompilasi dengan benar dengan atau tanpa opsi ini (meskipun beberapa jarang membutuhkan -ansi atau -std opsi yang menentukan versi yang diperlukan dari ISOC). Namun, tanpa opsi ini, ekstensi GNU tertentu dan C tradisional dan Fitur C++ juga didukung. Dengan opsi ini, mereka ditolak.

-Medantik tidak menyebabkan pesan peringatan untuk penggunaan kata kunci alternatif yang nama dimulai dan diakhiri dengan __. Peringatan bertele-tele juga dinonaktifkan dalam ekspresi yang mengikuti "__ekstensi__". Namun, hanya file header sistem yang boleh menggunakan ini rute melarikan diri; program aplikasi harus menghindarinya.

Beberapa pengguna mencoba menggunakan -Medantik untuk memeriksa program untuk kesesuaian ISO C yang ketat. Mereka segera menemukan bahwa itu tidak melakukan apa yang mereka inginkan: ia menemukan beberapa praktik non-ISO, tapi tidak semua---hanya yang ISO C membutuhkan diagnostik, dan beberapa lainnya untuk diagnostik mana yang telah ditambahkan.

Sebuah fitur untuk melaporkan kegagalan untuk menyesuaikan diri dengan ISO C mungkin berguna dalam beberapa kasus, tetapi akan membutuhkan pekerjaan tambahan yang cukup besar dan akan sangat berbeda dari -Medantik. Kami tidak memiliki rencana untuk mendukung fitur seperti itu dalam waktu dekat.

Dimana standar ditentukan dengan -std mewakili dialek GNU yang diperluas dari C, seperti gnu90 or gnu99, ada yang sesuai mendasarkan standar, versi ISO C di mana dialek GNU yang diperluas didasarkan. Peringatan dari -Medantik diberikan di mana mereka berada dibutuhkan oleh standar dasar. (Tidak masuk akal jika peringatan seperti itu diberikan hanya untuk fitur yang tidak ada dalam dialek GNU C yang ditentukan, karena menurut definisi GNU dialek C mencakup semua fitur yang didukung kompiler dengan opsi yang diberikan, dan tidak akan ada yang perlu diperingatkan.)

-pedantic-error Berikan kesalahan setiap kali mendasarkan standar (Lihat -Medantik) membutuhkan diagnostik, dalam beberapa kasus di mana ada perilaku tidak terdefinisi pada waktu kompilasi dan dalam beberapa kasus lain yang tidak menghalangi kompilasi program yang valid sesuai standar. Ini tidak setara dengan -Kesalahan = bertele-tele, karena ada kesalahan yang diaktifkan oleh ini opsi dan tidak diaktifkan oleh yang terakhir dan sebaliknya.

-Dinding Ini memungkinkan semua peringatan tentang konstruksi yang dipertimbangkan oleh beberapa pengguna dipertanyakan, dan mudah untuk dihindari (atau dimodifikasi untuk mencegah peringatan), bahkan dalam hubungannya dengan makro. Ini juga mengaktifkan beberapa peringatan khusus bahasa yang dijelaskan in C + + Dialek Opsi serta Tujuan-C serta Objective-C++ Dialek Opsi.

-Dinding menyalakan bendera peringatan berikut:

-Pakaian -Batas perang=1 (hanya dengan -O2) -Wc++11-kompat -Wc++14-kompat -Wchar-langganan -Wenum-bandingkan (di C/ObjC; ini aktif secara default di C++) -Wimplisit-int (C dan Objective-C saja) -Deklarasi-fungsi-simplisit (C dan Objective-C saja) -komentar -format -Wmain (hanya untuk C/ObjC dan kecuali -berdiri bebas) -Wmungkin-tidak diinisialisasi -Wmissing-kawat gigi (hanya untuk C/ObjC) -Wnonnull -Wopenmp-simd -Kurung -Wpointer-tanda -Penulis Penulisan -Tipe Wreturn -Titik-urutan -Wsign-bandingkan (hanya di C++) -Wstrict-aliasing -Wstrict-overflow=1 -Switch -Wtrigraph -Wuninisialisasi -Pragma tidak diketahui -Wunused-fungsi -Wunus-label -Wunused-nilai -Wunused-variabel -Wvolatile-register-var

Perhatikan bahwa beberapa tanda peringatan tidak tersirat oleh -Dinding. Beberapa dari mereka memperingatkan tentang konstruksi yang umumnya tidak dianggap dipertanyakan oleh pengguna, tetapi yang kadang-kadang Anda mungkin ingin memeriksa; yang lain memperingatkan tentang konstruksi yang diperlukan atau sulit untuk dihindari dalam beberapa kasus, dan tidak ada cara sederhana untuk memodifikasi kode untuk menekan peringatan. Beberapa di antaranya diaktifkan oleh -Wextra tapi banyak dari mereka harus diaktifkan satu per satu.

-Wextra Ini memungkinkan beberapa tanda peringatan tambahan yang tidak diaktifkan oleh -Dinding. (Opsi ini digunakan disebut -W. Nama yang lebih lama masih didukung, tetapi nama yang lebih baru lebih deskriptif.)

-Wclobbed -Badan-kosong -Kualifikasi Wignored -Penginisialisasi bidang-Wmissing -Wmissing-parameter-type (C saja) -Deklarasi-gaya-Wold (C saja) -Woverride-init -Wsign-bandingkan -Wtype-batas -Wuninisialisasi -Wunused-parameter (hanya dengan -Tidak digunakan or -Dinding) -Wunused-tapi-set-parameter (hanya dengan -Tidak digunakan or -Dinding)

Pilihan -Wextra juga mencetak pesan peringatan untuk kasus berikut:

* Pointer dibandingkan dengan bilangan bulat nol dengan "=".

* (C++ saja) Enumerator dan non-enumerator keduanya muncul dalam kondisi ekspresi.

* (C++ saja) Basis virtual yang ambigu.

* (C++ only) Subscripting array yang telah dideklarasikan "register".

* (C++ only) Mengambil alamat dari variabel yang telah dideklarasikan "register".

* (C++ saja) Kelas dasar tidak diinisialisasi dalam konstruktor salinan kelas turunan.

-Wchar-langganan Peringatkan jika subskrip array memiliki tipe "char". Ini adalah penyebab umum kesalahan, karena programmer sering lupa bahwa jenis ini ditandatangani pada beberapa mesin. Peringatan ini adalah diaktifkan oleh -Dinding.

-komentar Peringatkan setiap kali urutan komentar-mulai /* muncul di /* komentar, atau kapan pun a Backslash-Newline muncul di a // komentar. Peringatan ini diaktifkan oleh -Dinding.

-Wno-cakupan-ketidakcocokan Peringatkan jika profil umpan balik tidak cocok saat menggunakan -fprofile-penggunaan pilihan. Jika sebuah file sumber diubah antara kompilasi dengan -fprofile-gen dan dengan -fprofile-penggunaan, file dengan umpan balik profil dapat gagal untuk mencocokkan file sumber dan GCC tidak bisa menggunakan informasi umpan balik profil. Secara default, peringatan ini diaktifkan dan diperlakukan sebagai kesalahan. -Wno-cakupan-ketidakcocokan dapat digunakan untuk menonaktifkan peringatan atau -Wno-error=cakupan-ketidakcocokan dapat digunakan untuk menonaktifkan kesalahan. Menonaktifkan kesalahan karena peringatan ini dapat menghasilkan kode yang tidak dioptimalkan dengan baik dan hanya berguna dalam kasus perubahan yang sangat kecil seperti perbaikan bug pada basis kode yang ada. Menonaktifkan sepenuhnya peringatan tidak dianjurkan.

-Wno-cpp (C, Objective-C, C++, Objective-C++ dan Fortran saja)

Menekan pesan peringatan yang dipancarkan oleh arahan "#warning".

-Wdouble-promosi (C, C++, Objective-C dan Objective-C++ saja) Berikan peringatan ketika nilai tipe "float" secara implisit dipromosikan menjadi "double". CPU dengan unit floating-point "presisi tunggal" 32-bit yang menerapkan "float" di perangkat keras, tetapi meniru "ganda" dalam perangkat lunak. Pada mesin seperti itu, melakukan perhitungan menggunakan nilai "ganda" jauh lebih mahal karena overhead yang diperlukan untuk perangkat lunak emulasi.

Sangat mudah untuk secara tidak sengaja melakukan perhitungan dengan "ganda" karena floating-point literal secara implisit bertipe "ganda". Misalnya, di:

area pelampung (radius apung) { kembali 3.14159 * radius * radius; }

kompiler melakukan seluruh perhitungan dengan "ganda" karena titik-mengambang literal adalah "ganda".

-format -Format =n Periksa panggilan ke "printf" dan "scanf", dll., untuk memastikan bahwa argumen yang diberikan memiliki tipe yang sesuai dengan format string yang ditentukan, dan bahwa konversi ditentukan dalam format string masuk akal. Ini termasuk fungsi standar, dan lainnya ditentukan oleh atribut format, di "printf", "scanf", "strftime" dan "strfmon" (ekstensi X/Open, bukan dalam standar C) keluarga (atau target- keluarga tertentu). Fungsi mana yang diperiksa tanpa atribut format? ditentukan tergantung pada versi standar yang dipilih, dan pemeriksaan fungsi tersebut tanpa atribut yang ditentukan dinonaktifkan oleh -berdiri bebas or -fno-builtin.

Format diperiksa terhadap fitur format yang didukung oleh GNU libc versi 2.2. Ini mencakup semua fitur ISO C90 dan C99, serta fitur dari Single Unix Spesifikasi dan beberapa ekstensi BSD dan GNU. Implementasi perpustakaan lain mungkin tidak mendukung semua fitur ini; GCC tidak mendukung peringatan tentang fitur yang melampaui keterbatasan perpustakaan tertentu. Namun, jika -Medantik digunakan dengan -format, peringatan diberikan tentang fitur format yang tidak ada dalam versi standar yang dipilih (tetapi tidak untuk format "strfmon", karena tidak ada dalam versi standar C apa pun).

-Format=1 -format pilihan -format adalah setara dengan -Format=1, dan -Wno-format adalah setara dengan -Format=0. Sejak -format juga memeriksa argumen format nol untuk beberapa fungsi, -format juga menyiratkan -Wnonnull. Beberapa aspek dari tingkat format ini pemeriksaan dapat dinonaktifkan dengan opsi: -Wno-format-contains-nul, -Wno-format-ekstra-args, dan -Wno-format-nol-panjang. -format diaktifkan oleh -Dinding.

-Wno-format-contains-nul If -format ditentukan, jangan peringatkan tentang string format yang berisi byte NUL.

-Wno-format-ekstra-args If -format ditentukan, jangan peringatkan tentang argumen berlebih ke "printf" atau fungsi format "scanf". Standar C menetapkan bahwa argumen tersebut adalah diabaikan.

Di mana argumen yang tidak digunakan terletak di antara argumen yang digunakan yang ditentukan dengan $ spesifikasi nomor operan, biasanya peringatan tetap diberikan, karena implementasi tidak dapat mengetahui jenis apa yang harus diteruskan ke "va_arg" untuk melewati yang tidak digunakan argumen. Namun, dalam hal format "scanf", opsi ini menekan peringatan jika argumen yang tidak digunakan semuanya adalah pointer, karena Single Unix Spesifikasi mengatakan bahwa argumen yang tidak digunakan seperti itu diperbolehkan.

-Wno-format-nol-panjang If -format ditentukan, jangan peringatkan tentang format panjang nol. standar C menentukan bahwa format panjang nol diperbolehkan.

-Format=2 Aktifkan -format ditambah pemeriksaan format tambahan. Saat ini setara dengan -format -Wformat-nonliteral -Wformat-keamanan -Wformat-y2k.

-Wformat-nonliteral If -format ditentukan, juga peringatkan jika format string bukan string literal dan karenanya tidak dapat diperiksa, kecuali fungsi format mengambil argumen formatnya sebagai sebuah "va_list".

-Wformat-keamanan If -format ditentukan, juga memperingatkan tentang penggunaan fungsi format yang mewakili kemungkinan masalah keamanan. Saat ini, ini memperingatkan tentang panggilan ke "printf" dan "scanf" berfungsi di mana format string bukan string literal dan tidak ada format argumen, seperti dalam "printf (foo);". Ini mungkin lubang keamanan jika format string berasal dari input yang tidak tepercaya dan berisi %n. (Saat ini adalah bagian dari apa -Wformat-nonliteral memperingatkan tentang, tetapi di masa depan peringatan mungkin ditambahkan ke -Wformat-keamanan yang tidak termasuk dalam -Wformat-nonliteral.)

-Wformat-penandatanganan If -format ditentukan, juga peringatkan jika format string memerlukan unsigned argumen dan argumen ditandatangani dan sebaliknya.

CATATAN: Di Ubuntu 8.10 dan versi yang lebih baru, opsi ini diaktifkan secara default untuk C, C++, ObjC, ObjC++. Untuk menonaktifkan, gunakan -Wno-format-keamanan, atau nonaktifkan semua format peringatan dengan -Format=0. Untuk membuat peringatan keamanan format menjadi fatal, tentukan -Kesalahan=format-keamanan.

-Wformat-y2k If -format ditentukan, juga peringatkan tentang format "strftime" yang mungkin hanya menghasilkan a tahun dua digit.

-Wnonnull Peringatkan tentang melewatkan penunjuk nol untuk argumen yang ditandai sebagai memerlukan nilai bukan nol oleh atribut fungsi "nonnull".

-Wnonnull termasuk dalam -Dinding serta -format. Itu dapat dinonaktifkan dengan -Wno-nonnull .

-Winit-sendiri (C, C++, Objective-C dan Objective-C++ saja) Peringatkan tentang variabel yang tidak diinisialisasi yang diinisialisasi dengan diri mereka sendiri. Perhatikan ini opsi hanya dapat digunakan dengan -Wuninisialisasi .

Misalnya, GCC memperingatkan tentang "i" yang tidak diinisialisasi dalam cuplikan berikut saja ketika -Winit-sendiri telah ditentukan:

int f() { int saya = saya; kembali saya; }

Peringatan ini diaktifkan oleh -Dinding dalam C++.

-Wimplisit-int (C dan Objective-C saja) Peringatkan saat deklarasi tidak menentukan tipe. Peringatan ini diaktifkan oleh -Dinding.

-Deklarasi-fungsi-simplisit (C dan Objective-C saja) Berikan peringatan setiap kali suatu fungsi digunakan sebelum dideklarasikan. Dalam mode C99 (-std=c99 or -std=gnu99), peringatan ini diaktifkan secara default dan dibuat menjadi kesalahan oleh -pedantic-error. Peringatan ini juga diaktifkan oleh -Dinding.

-Simplisit (C dan Objective-C saja) Sama dengan -Wimplisit-int serta -Deklarasi-fungsi-simplisit. Peringatan ini diaktifkan by -Dinding.

-Kualifikasi Wignored (C dan C++ saja) Peringatkan jika tipe kembalian suatu fungsi memiliki kualifikasi tipe seperti "const". Untuk ISO C kualifikasi tipe seperti itu tidak berpengaruh, karena nilai yang dikembalikan oleh suatu fungsi bukan merupakan nilai. Untuk C++, peringatan hanya dikeluarkan untuk tipe skalar atau "void". ISO C melarang tipe pengembalian "void" yang memenuhi syarat pada definisi fungsi, jadi tipe pengembalian seperti itu selalu menerima peringatan bahkan tanpa opsi ini.

Peringatan ini juga diaktifkan oleh -Wextra.

-Wmain Peringatkan jika jenis "utama" mencurigakan. "utama" harus menjadi fungsi dengan eksternal linkage, mengembalikan int, mengambil argumen nol, dua, atau tiga argumen jenis yang sesuai. Peringatan ini diaktifkan secara default di C++ dan diaktifkan oleh: -Dinding or -Medantik.

-Wmissing-kawat gigi Peringatkan jika penginisialisasi agregat atau serikat pekerja tidak sepenuhnya dikurung. Berikut ini contoh, penginisialisasi untuk "a" tidak sepenuhnya dikurung, tetapi untuk "b" sepenuhnya tanda kurung. Peringatan ini diaktifkan oleh -Dinding di C

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

Peringatan ini diaktifkan oleh -Dinding.

-Wmissing-include-dirs (C, C++, Objective-C dan Objective-C++ saja) Peringatkan jika direktori include yang disediakan pengguna tidak ada.

-Kurung Peringatkan jika tanda kurung dihilangkan dalam konteks tertentu, seperti ketika ada penugasan dalam konteks di mana nilai kebenaran diharapkan, atau ketika operator bersarang yang prioritasnya sering membuat orang bingung.

Juga peringatkan jika perbandingan seperti "x x" menjadi 1. Tingkat . ini -Meluap-wstrict diaktifkan oleh -Dinding; tingkat yang lebih tinggi tidak, dan harus diminta secara eksplisit.

-Wstrict-overflow=2 Juga peringatkan tentang kasus lain di mana perbandingan disederhanakan menjadi konstanta. Untuk contoh: "abs (x) >= 0". Ini hanya dapat disederhanakan ketika -fstrict-overflow dalam efek, karena "abs (INT_MIN)" meluap ke "INT_MIN", yang kurang dari nol. -Meluap-wstrict (tanpa level) sama dengan -Wstrict-overflow=2.

-Wstrict-overflow=3 Juga peringatkan tentang kasus lain di mana perbandingan disederhanakan. Misalnya: "x + 1 > 1" disederhanakan menjadi "x > 0".

-Wstrict-overflow=4 Juga peringatkan tentang penyederhanaan lain yang tidak tercakup dalam kasus di atas. Untuk contoh: "(x * 10) / 5" disederhanakan menjadi "x * 2".

-Wstrict-overflow=5 Juga peringatkan tentang kasus di mana kompiler mengurangi besarnya konstanta terlibat dalam perbandingan. Misalnya: "x + 2 > y" disederhanakan menjadi "x + 1 >= y". Ini dilaporkan hanya pada tingkat peringatan tertinggi karena penyederhanaan ini berlaku untuk banyak perbandingan, jadi level peringatan ini memberikan jumlah yang sangat besar positif palsu.

-Wsuggest-atribut=[murni|const|arah utara|format] Peringatkan untuk kasus di mana menambahkan atribut mungkin bermanfaat. Atribut saat ini didukung tercantum di bawah ini.

-Wsuggest-attribute=murni -Wsuggest-attribute=const -Wsuggest-attribute=noreturn Peringatkan tentang fungsi yang mungkin menjadi kandidat untuk atribut "murni", "const" atau "kebalikan". Kompiler hanya memperingatkan untuk fungsi yang terlihat di kompilasi lain unit atau (dalam kasus "murni" dan "konst") jika tidak dapat membuktikan bahwa fungsi kembali normal. Suatu fungsi kembali normal jika tidak mengandung infinit loop atau kembali secara tidak normal dengan melempar, memanggil "abort" atau menjebak. Analisis ini membutuhkan opsi -fipa-murni-const, yang diaktifkan secara default di -O dan lebih tinggi. Tingkat optimasi yang lebih tinggi meningkatkan akurasi analisis.

-Wsuggest-attribute=format -Wmissing-format-atribut Peringatkan tentang penunjuk fungsi yang mungkin menjadi kandidat untuk atribut "format". Perhatikan bahwa ini hanya kandidat yang mungkin, bukan kandidat absolut. GCC menebak itu pointer fungsi dengan atribut "format" yang digunakan dalam penugasan, inisialisasi, parameter passing atau return statement harus memiliki yang sesuai atribut "format" dalam jenis yang dihasilkan. Yaitu sisi kiri dari penugasan atau inisialisasi, jenis variabel parameter, atau pengembalian jenis fungsi yang mengandung masing-masing juga harus memiliki atribut "format" untuk menghindari peringatan.

GCC juga memperingatkan tentang definisi fungsi yang mungkin menjadi kandidat untuk "format" atribut. Sekali lagi, ini hanya kandidat yang mungkin. GCC menebak "format" itu atribut mungkin sesuai untuk fungsi apa pun yang memanggil fungsi seperti "vprintf" atau "vscanf", tetapi ini mungkin tidak selalu terjadi, dan beberapa fungsi yang atribut "format" yang sesuai mungkin tidak terdeteksi.

-Wsuggest-final-types Peringatkan tentang tipe dengan metode virtual di mana kualitas kode akan ditingkatkan jika tipenya dideklarasikan dengan specifier "final" C++11, atau, jika mungkin, dideklarasikan dalam an ruang nama anonim. Ini memungkinkan GCC untuk lebih agresif men-devirtualisasi polimorfik panggilan. Peringatan ini lebih efektif dengan optimasi waktu tautan, di mana informasi tentang grafik hierarki kelas lebih lengkap.

-Metode-saran-akhir Peringatkan tentang metode virtual di mana kualitas kode akan ditingkatkan jika metode tersebut dideklarasikan dengan specifier "final" C++11, atau, jika mungkin, tipenya dideklarasikan dalam namespace anonim atau dengan penentu "final". Peringatan ini lebih efektif dengan optimasi waktu tautan, di mana informasi tentang grafik hierarki kelas adalah lebih lengkap. Disarankan untuk terlebih dahulu mempertimbangkan saran dari -Wsuggest-final-types dan kemudian membangun kembali dengan anotasi baru.

-Suggest-override Peringatkan tentang mengesampingkan fungsi virtual yang tidak ditandai dengan kata kunci override.

-Batas perang -Batas perang=n Opsi ini hanya aktif ketika -ftree-vrp aktif (default untuk -O2 dan di atas). Dia memperingatkan tentang subskrip ke array yang selalu di luar batas. Peringatan ini adalah diaktifkan oleh -Dinding.

-Batas perang=1 Ini adalah tingkat peringatan -Batas perang dan diaktifkan oleh -Dinding; tingkat yang lebih tinggi tidak, dan harus diminta secara eksplisit.

-Batas perang=2 Tingkat peringatan ini juga memperingatkan tentang akses di luar batas untuk array di akhir sebuah struct dan untuk array yang diakses melalui pointer. Tingkat peringatan ini dapat memberikan jumlah positif palsu yang lebih besar dan dinonaktifkan secara default.

-Wbool-bandingkan Peringatkan tentang ekspresi boolean dibandingkan dengan nilai integer yang berbeda dari "benar salah". Misalnya, perbandingan berikut selalu salah:

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

Peringatan ini diaktifkan oleh -Dinding.

-Wno-dibuang-kualifikasi (C dan Objective-C saja) Jangan peringatkan jika tipe qualifier pada pointer sedang dibuang. Biasanya, compiler memperingatkan jika variabel "const char *" diteruskan ke fungsi yang mengambil "char ." *". Parameter ini dapat digunakan untuk menekan peringatan seperti itu.

-Wno-discarded-array-qualifiers (C dan Objective-C saja) Jangan peringatkan jika tipe qualifier pada array yang merupakan target pointer sedang dibuang. Biasanya, kompilator memperingatkan jika variabel "const int (*)[]" diteruskan ke fungsi yang mengambil parameter "int (*)[]". Opsi ini dapat digunakan untuk menekan peringatan seperti itu.

-Wno-inkompatibel-pointer-tipe (C dan Objective-C saja) Jangan peringatkan bila ada konversi antara pointer yang memiliki tipe yang tidak kompatibel. Peringatan ini untuk kasus yang tidak tercakup oleh -Wno-pointer-tanda, yang memperingatkan untuk pointer penyampaian argumen atau penugasan dengan penandatangan yang berbeda.

-Wno-int-konversi (C dan Objective-C saja) Jangan peringatkan tentang konversi integer ke pointer dan pointer ke integer yang tidak kompatibel. Peringatan ini tentang konversi implisit; untuk konversi eksplisit peringatan -Wno-int-to-pointer-cast serta -Wno-pointer-to-int-cast dapat digunakan.

-Wno-div-oleh-nol Jangan peringatkan tentang pembagian bilangan bulat waktu kompilasi dengan nol. Pembagian titik-mengambang dengan nol tidak diperingatkan, karena ini bisa menjadi cara yang sah untuk mendapatkan tak terhingga dan NaN.

-Wsystem-header Cetak pesan peringatan untuk konstruksi yang ditemukan di file header sistem. Peringatan dari header sistem biasanya ditekan, dengan asumsi bahwa mereka biasanya tidak menunjukkan masalah nyata dan hanya akan membuat keluaran kompiler lebih sulit dibaca. Menggunakan opsi baris perintah ini memberi tahu GCC untuk mengeluarkan peringatan dari header sistem seolah-olah mereka terjadi dalam kode pengguna. Namun, perhatikan bahwa menggunakan -Dinding dalam hubungannya dengan opsi ini tidak tidak peringatkan tentang pragma yang tidak diketahui di header sistem --- untuk itu, -Pragma tidak diketahui juga harus digunakan.

-Wtrampolin Peringatkan tentang trampolin yang dihasilkan untuk penunjuk ke fungsi bersarang. Sebuah trampolin adalah sepotong kecil data atau kode yang dibuat saat run time di stack ketika alamatnya dari fungsi bersarang diambil, dan digunakan untuk memanggil fungsi bersarang secara tidak langsung. Untuk beberapa target, ini hanya terdiri dari data dan karenanya tidak memerlukan perlakuan khusus. Tetapi, untuk sebagian besar target, itu terdiri dari kode dan karenanya membutuhkan tumpukan yang harus dibuat dijalankan agar program dapat berjalan dengan baik.

-Wfloat-sama Peringatkan jika nilai floating-point digunakan dalam perbandingan kesetaraan.

Gagasan di balik ini adalah terkadang nyaman (bagi programmer) untuk pertimbangkan nilai titik-mengambang sebagai aproksimasi ke bilangan real presisi tak terhingga. Jika Anda melakukan ini, maka Anda perlu menghitung (dengan menganalisis kode, atau dalam beberapa hal cara lain) kesalahan maksimum atau kemungkinan maksimum yang ditimbulkan oleh perhitungan, dan izinkan saat melakukan perbandingan (dan saat menghasilkan output, tapi itu a masalah yang berbeda). Secara khusus, alih-alih menguji kesetaraan, Anda harus memeriksa untuk melihat apakah kedua nilai memiliki rentang yang tumpang tindih; dan ini dilakukan dengan operator relasional, jadi perbandingan kesetaraan mungkin salah.

-Tradisional (C dan Objective-C saja) Peringatkan tentang konstruksi tertentu yang berperilaku berbeda dalam tradisional dan ISO C. Juga memperingatkan tentang konstruksi ISO C yang tidak memiliki padanan C tradisional, dan/atau bermasalah konstruksi yang harus dihindari.

* Parameter makro yang muncul dalam literal string di badan makro. Di dalam penggantian makro C tradisional terjadi dalam string literal, tetapi dalam ISO C itu tidak.

* Dalam C tradisional, beberapa arahan preprosesor tidak ada. Tradisional praprosesor hanya menganggap garis sebagai arahan jika # muncul di kolom 1 di garis. Karena itu -Tradisional memperingatkan tentang arahan bahwa C . tradisional mengerti tapi mengabaikan karena # tidak muncul sebagai karakter pertama di garis. Itu juga menyarankan Anda menyembunyikan arahan seperti "#pragma" yang tidak dipahami oleh tradisional C dengan membuat indentasi. Beberapa implementasi tradisional tidak mengenali "#elif", jadi opsi ini menyarankan untuk menghindarinya sama sekali.

* Makro seperti fungsi yang muncul tanpa argumen.

* Operator unary plus.

* The U akhiran konstanta bilangan bulat, atau F or L akhiran konstanta floating-point. (C Tradisional memang mendukung L akhiran pada konstanta bilangan bulat.) Catatan, ini sufiks muncul di makro yang ditentukan di header sistem dari sebagian besar sistem modern, misalnya _MIN/_MAX makro di " ". Penggunaan makro ini dalam kode pengguna mungkin biasanya mengarah ke peringatan palsu, namun praprosesor terintegrasi GCC memiliki konteks yang cukup untuk menghindari peringatan dalam kasus ini.

* Fungsi yang dideklarasikan eksternal dalam satu blok dan kemudian digunakan setelah akhir blok.

* Pernyataan "switch" memiliki operan bertipe "long".

* Deklarasi fungsi non-"statis" mengikuti fungsi "statis". Konstruksi ini tidak diterima oleh beberapa kompiler C tradisional.

* Jenis ISO dari konstanta bilangan bulat memiliki lebar atau tanda tangan yang berbeda darinya tipe tradisional. Peringatan ini hanya dikeluarkan jika basis konstanta adalah sepuluh. Yaitu nilai heksadesimal atau oktal, yang biasanya mewakili pola bit, tidak memperingatkan tentang.

* Penggunaan rangkaian string ISO terdeteksi.

* Inisialisasi agregat otomatis.

* Pengidentifikasi bertentangan dengan label. C tradisional tidak memiliki namespace terpisah untuk label.

* Inisialisasi serikat pekerja. Jika penginisialisasi adalah nol, peringatan dihilangkan. Ini dilakukan dengan asumsi bahwa penginisialisasi nol dalam kode pengguna muncul dikondisikan misalnya "__STDC__" untuk menghindari peringatan penginisialisasi yang hilang dan bergantung pada inisialisasi default ke nol dalam kasus C tradisional.

* Konversi dengan prototipe antara nilai titik tetap/mengambang dan sebaliknya. NS tidak adanya prototipe ini saat mengkompilasi dengan C tradisional menyebabkan masalah serius masalah. Ini adalah bagian dari kemungkinan peringatan konversi; untuk set lengkap menggunakan -Konversi-tradisional.

* Penggunaan definisi fungsi gaya ISO C. Peringatan ini sengaja tidak dikeluarkan untuk deklarasi prototipe atau fungsi variadik karena fitur ISO C ini muncul dalam kode Anda saat menggunakan makro kompatibilitas C tradisional libiberty, "PARAMS" dan "VPARAMS". Peringatan ini juga dilewati untuk fungsi bersarang karena fitur itu sudah merupakan ekstensi GCC dan karenanya tidak relevan untuk kompatibilitas C tradisional.

-Konversi-tradisional (C dan Objective-C saja) Peringatkan jika prototipe menyebabkan konversi tipe yang berbeda dari apa yang akan terjadi untuk argumen yang sama tanpa adanya prototipe. Ini termasuk konversi dari titik tetap menjadi mengambang dan sebaliknya, dan konversi mengubah lebar atau penandatanganan argumen titik tetap kecuali jika sama dengan promosi default.

-Wdeklarasi-setelah-pernyataan (C dan Objective-C saja) Peringatkan ketika sebuah deklarasi ditemukan setelah sebuah pernyataan dalam sebuah blok. Konstruksi ini, dikenal dari C++, diperkenalkan dengan ISO C99 dan secara default diizinkan di GCC. Bukan itu didukung oleh ISO C90.

-Wundef Peringatkan jika pengidentifikasi yang tidak ditentukan dievaluasi dalam arahan "#if".

-Wno-endif-label Jangan peringatkan setiap kali "#else" atau "#endif" diikuti oleh teks.

-Bayangan Peringatkan setiap kali variabel lokal atau deklarasi tipe membayangi variabel lain, parameter, tipe, anggota kelas (dalam C++), atau variabel instan (dalam Objective-C) atau setiap kali fungsi bawaan dibayangi. Perhatikan bahwa dalam C++, kompiler memperingatkan jika a variabel lokal membayangi typedef eksplisit, tetapi tidak jika membayangi struct/class/enum.

-Wno-bayangan-ivar (Hanya Objective-C) Jangan peringatkan setiap kali variabel lokal membayangi variabel instan dalam Objective-C Metode.

-Lebih besar-dari=len Peringatkan setiap kali ada objek yang lebih besar dari len byte didefinisikan.

-Wframe-lebih besar-dari=len Peringatkan jika ukuran bingkai fungsi lebih besar dari len byte. Perhitungan dilakukan untuk menentukan ukuran bingkai tumpukan adalah perkiraan dan tidak konservatif. Sebenarnya persyaratan mungkin agak lebih besar dari len bahkan jika Anda tidak mendapatkan peringatan. Di dalam Selain itu, setiap ruang yang dialokasikan melalui "alloca", array panjang variabel, atau terkait konstruksi tidak disertakan oleh kompiler saat menentukan apakah akan mengeluarkan a peringatan.

-Wno-free-nonheap-objek Jangan peringatkan saat mencoba membebaskan objek yang tidak dialokasikan di heap.

-Penggunaan tumpukan=len Peringatkan jika penggunaan tumpukan suatu fungsi mungkin lebih besar dari len byte. Perhitungannya dilakukan untuk menentukan penggunaan stack yang konservatif. Setiap ruang yang dialokasikan melalui "alloca", array panjang variabel, atau konstruksi terkait disertakan oleh kompiler ketika menentukan apakah akan mengeluarkan peringatan atau tidak.

Pesannya sesuai dengan output dari -fstack-penggunaan.

* Jika penggunaan tumpukan sepenuhnya statis tetapi melebihi jumlah yang ditentukan, itu:

peringatan: penggunaan tumpukan adalah 1120 byte

* Jika penggunaan tumpukan (sebagian) dinamis tetapi dibatasi, itu:

peringatan: penggunaan tumpukan mungkin 1648 byte

* Jika penggunaan tumpukan (sebagian) dinamis dan tidak dibatasi, itu:

peringatan: penggunaan tumpukan mungkin tidak terbatas

-Pengoptimalan loop-Wunsafe Peringatkan jika loop tidak dapat dioptimalkan karena kompiler tidak dapat mengasumsikan apa pun pada batas-batas indeks loop. Dengan -pengoptimalan loop yang menyenangkan peringatkan jika kompiler membuat asumsi seperti itu.

-Wno-pedantic-ms-format (Hanya target MinGW) Ketika digunakan dalam kombinasi dengan -format serta -bengah tanpa ekstensi GNU, ini opsi menonaktifkan peringatan tentang penentu lebar format "printf" / "scanf" non-ISO "I32", "I64", dan "I" digunakan pada target Windows, yang bergantung pada runtime MS.

-Wpointer-arith Peringatkan tentang apa pun yang bergantung pada "ukuran" jenis fungsi atau "kekosongan". GNU C menetapkan jenis ini ukuran 1, untuk kenyamanan dalam perhitungan dengan "void *" pointer dan pointer ke fungsi. Di C++, peringatkan juga saat operasi aritmatika melibatkan "NULL". Peringatan ini juga diaktifkan oleh -Medantik.

-Wtype-batas Peringatkan jika perbandingan selalu benar atau selalu salah karena terbatasnya jangkauan tipe data, tetapi jangan peringatkan untuk ekspresi konstan. Misalnya, peringatkan jika unsigned variabel dibandingkan dengan nol dengan "=". Peringatan ini juga diaktifkan oleh -Wextra.

-Pemeran-fungsi-buruk (C dan Objective-C saja) Peringatkan saat panggilan fungsi dilemparkan ke jenis yang tidak cocok. Misalnya, peringatkan jika ada panggilan ke fungsi yang mengembalikan tipe integer dilemparkan ke tipe pointer.

-Wc90-c99-kompat (C dan Objective-C saja) Peringatkan tentang fitur yang tidak ada di ISO C90, tetapi ada di ISO C99. Contohnya, peringatkan tentang penggunaan array panjang variabel, tipe "panjang panjang", tipe "bool", senyawa literal, inisialisasi yang ditunjuk, dan sebagainya. Opsi ini tidak tergantung pada modus standar. Peringatan dinonaktifkan dalam ekspresi yang mengikuti "__extension__".

-Wc99-c11-kompat (C dan Objective-C saja) Peringatkan tentang fitur yang tidak ada di ISO C99, tetapi ada di ISO C11. Contohnya, memperingatkan tentang penggunaan struktur dan serikat anonim, kualifikasi tipe "_Atomic", penentu kelas penyimpanan "_Thread_local", penentu "_Alignas", operator "Alignof", kata kunci "_Generik", dan seterusnya. Opsi ini tidak tergantung pada mode standar. Peringatan dinonaktifkan dalam ekspresi yang mengikuti "__extension__".

-Wc++-kompat (C dan Objective-C saja) Peringatkan tentang konstruksi ISO C yang berada di luar subset umum ISO C dan ISO C++, misalnya permintaan untuk konversi implisit dari "void *" ke pointer ke non-"void" mengetik.

-Wc++11-kompat (C++ dan Objective-C++ saja) Peringatkan tentang konstruksi C++ yang artinya berbeda antara ISO C++ 1998 dan ISO C++ 2011, misalnya, pengidentifikasi dalam ISO C++ 1998 yang merupakan kata kunci dalam ISO C++ 2011. Peringatan ini menyalakan -Menyempit dan diaktifkan oleh -Dinding.

-Wc++14-kompat (C++ dan Objective-C++ saja) Peringatkan tentang konstruksi C++ yang artinya berbeda antara ISO C++ 2011 dan ISO C++ 2014. Peringatan ini diaktifkan oleh -Dinding.

-Wcast-qual Peringatkan setiap kali pointer dilemparkan untuk menghapus kualifikasi tipe dari tipe target. Misalnya, peringatkan jika "const char *" dilemparkan ke "char *" biasa.

Juga peringatkan saat membuat pemeran yang memperkenalkan kualifikasi tipe dengan cara yang tidak aman. Untuk contoh, casting "char **" ke "const char **" tidak aman, seperti dalam contoh ini:

/* p adalah nilai char **. */ const char **q = (const char **) p; /* Penetapan string readonly ke const char * OK. */ *q = "tali"; /* Sekarang pointer char** menunjuk ke memori hanya-baca. */ **p = 'b';

-Wcast-sejajarkan Peringatkan setiap kali pointer dilemparkan sedemikian rupa sehingga keselarasan target yang diperlukan adalah ditingkatkan. Misalnya, peringatkan jika "char *" dilemparkan ke "int *" pada mesin di mana bilangan bulat hanya dapat diakses pada batas dua atau empat byte.

-Tulis-string Saat mengkompilasi C, berikan konstanta string tipe "const char[panjang]" sehingga menyalin alamat satu menjadi penunjuk non-"const" "char *" menghasilkan peringatan. Ini peringatan membantu Anda menemukan kode waktu kompilasi yang dapat mencoba menulis ke dalam string konstan, tetapi hanya jika Anda sangat berhati-hati menggunakan "const" dalam deklarasi dan prototipe. Kalau tidak, itu hanya gangguan. Inilah sebabnya kami tidak membuat -Dinding meminta peringatan ini.

Saat mengkompilasi C++, peringatkan tentang konversi usang dari string literal ke "char *". Peringatan ini diaktifkan secara default untuk program C++.

-Wclobbed Peringatkan variabel yang mungkin diubah oleh "longjmp" atau "vfork". Peringatan ini adalah juga diaktifkan oleh -Wextra.

-Didukung dengan syarat (C++ dan Objective-C++ saja) Peringatkan untuk konstruksi yang didukung kondisional (C++11 [intro.defs]).

-Wkonversi Peringatkan untuk konversi implisit yang dapat mengubah nilai. Ini termasuk konversi antara real dan integer, seperti "abs (x)" ketika "x" adalah "ganda"; konversi antara ditandatangani dan tidak ditandatangani, seperti "ui tidak ditandatangani = -1"; dan konversi ke tipe yang lebih kecil, seperti "sqrtf (M_PI)". Jangan peringatkan untuk pemeran eksplisit seperti "abs ((int) x)" dan "ui = (unsigned) -1", atau jika nilainya tidak diubah oleh konversi seperti pada "abs (2.0)". Peringatan tentang konversi antara bilangan bulat bertanda tangan dan tidak bertanda dapat dinonaktifkan dengan menggunakan -Wno-tanda-konversi.

Untuk C++, peringatkan juga untuk resolusi kelebihan beban yang membingungkan untuk konversi yang ditentukan pengguna; dan konversi yang tidak pernah menggunakan operator konversi jenis: konversi ke "batal", sama jenis, kelas dasar atau referensi untuk mereka. Peringatan tentang konversi antara yang ditandatangani dan bilangan bulat yang tidak ditandatangani dinonaktifkan secara default di C++ kecuali -Wsign-konversi is secara eksplisit diaktifkan.

-Wno-konversi-null (C++ dan Objective-C++ saja) Jangan peringatkan untuk konversi antara jenis "NULL" dan non-pointer. -Wkonversi-null is diaktifkan secara default.

-Wzero-as-null-pointer-constant (C++ dan Objective-C++ saja) Peringatkan ketika literal '0' digunakan sebagai konstanta penunjuk nol. Ini bisa berguna untuk memfasilitasi konversi ke "nullptr" di C++ 11.

-Tanggal-waktu Peringatkan saat makro "__TIME__", "__DATE__" atau "__TIMESTAMP__" ditemui saat mungkin mencegah kompilasi yang dapat direproduksi secara bit-bijaksana-identik.

-Wdelete-tidak lengkap (C++ dan Objective-C++ saja) Peringatkan saat menghapus pointer ke tipe yang tidak lengkap, yang dapat menyebabkan perilaku tidak terdefinisi pada waktu berjalan. Peringatan ini diaktifkan secara default.

- Pemeran yang tidak berguna (C++ dan Objective-C++ saja) Peringatkan saat ekspresi dicor ke tipenya sendiri.

-Badan-kosong Peringatkan jika badan kosong muncul dalam pernyataan "jika", "lain" atau "lakukan sementara". Peringatan ini juga diaktifkan oleh -Wextra.

-Wenum-bandingkan Peringatkan tentang perbandingan antara nilai dari tipe enumerasi yang berbeda. Dalam C++ enumeral ketidakcocokan dalam ekspresi bersyarat juga didiagnosis dan peringatan diaktifkan oleh bawaan. Di C peringatan ini diaktifkan oleh -Dinding.

-Melompat-meleset-init (C, Objective-C saja) Peringatkan jika pernyataan "goto" atau pernyataan "switch" melompat ke depan melintasi inisialisasi variabel, atau melompat mundur ke label setelah variabel telah diinisialisasi. Ini hanya memperingatkan tentang variabel yang diinisialisasi ketika mereka dinyatakan. Peringatan ini hanya didukung untuk C dan Objective-C; di C++ semacam ini cabang adalah kesalahan dalam hal apapun.

-Melompat-meleset-init termasuk dalam -Wc++-kompat. Itu dapat dinonaktifkan dengan -Wno-jump-misses-init .

-Wsign-bandingkan Peringatkan ketika perbandingan antara nilai yang ditandatangani dan tidak ditandatangani dapat menghasilkan kesalahan hasil ketika nilai yang ditandatangani diubah menjadi tidak ditandatangani. Peringatan ini juga diaktifkan by -Wextra; untuk mendapatkan peringatan lainnya dari -Wextra tanpa peringatan ini, gunakan -Wextra -Wno-tanda-bandingkan.

-Wsign-konversi Peringatkan untuk konversi implisit yang dapat mengubah tanda nilai bilangan bulat, seperti menugaskan ekspresi integer bertanda ke variabel integer tak bertanda. eksplisit cast membungkam peringatan. Di C, opsi ini juga diaktifkan oleh -Wkonversi.

-Konversi Wfloat Peringatkan untuk konversi implisit yang mengurangi ketepatan nilai nyata. Ini termasuk konversi dari nyata ke bilangan bulat, dan dari presisi tinggi nyata ke lebih rendah nilai nyata presisi. Opsi ini juga diaktifkan oleh -Wkonversi.

-Wsized-dealokasi (C++ dan Objective-C++ saja) Peringatkan tentang definisi fungsi deallokasi yang tidak berukuran

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

tanpa definisi fungsi deallokasi berukuran yang sesuai

batalkan operator hapus (batal *, std::size_t) noexcept; batalkan operator hapus[] (batal *, std::size_t) noexcept;

atau sebaliknya. Diaktifkan oleh -Wextra bersama dengan -ukuran-dealokasi.

-Wsizeof-pointer-memaccess Peringatkan parameter panjang yang mencurigakan untuk string tertentu dan fungsi bawaan memori jika argumen menggunakan "sizeof". Peringatan ini memperingatkan misalnya tentang "memset (ptr, 0, sizeof .) (ptr));" jika "ptr" bukan array, tetapi pointer, dan menyarankan kemungkinan perbaikan, atau tentang "memcpy (&foo, ptr, sizeof (&foo));". Peringatan ini diaktifkan oleh -Dinding.

-Ukuran-array-argumen Peringatkan ketika operator "sizeof" diterapkan ke parameter yang dideklarasikan sebagai array dalam definisi fungsi. Peringatan ini diaktifkan secara default untuk program C dan C++.

-Wmemset-dialihkan-args Peringatkan panggilan mencurigakan ke fungsi bawaan "memset", jika argumen kedua adalah tidak nol dan argumen ketiga adalah nol. Ini memperingatkan misalnya @ tentang "memset (buf, sizeof buf, 0)" di mana kemungkinan besar "memset (buf, 0, sizeof buf)" dimaksudkan sebagai gantinya. diagnostik hanya dipancarkan jika argumen ketiga adalah nol literal. Jika itu beberapa ekspresi yang dilipat menjadi nol, pemeran nol ke beberapa jenis, dll., Itu jauh lebih sedikit kemungkinan bahwa pengguna telah keliru bertukar argumen dan tidak ada peringatan yang dikeluarkan. Peringatan ini diaktifkan oleh -Dinding.

-Pakaian Peringatkan tentang penggunaan alamat memori yang mencurigakan. Ini termasuk menggunakan alamat a fungsi dalam ekspresi bersyarat, seperti "void func(void); if (func)", dan perbandingan terhadap alamat memori dari string literal, seperti "if (x == "abc")". Penggunaan seperti itu biasanya menunjukkan kesalahan pemrogram: alamat suatu fungsi selalu bernilai benar, sehingga penggunaannya dalam kondisi biasanya menunjukkan bahwa programmer lupa tanda kurung dalam panggilan fungsi; dan perbandingan terhadap string literal menghasilkan perilaku yang tidak ditentukan dan tidak portabel di C, jadi mereka biasanya menunjukkan bahwa programmer bermaksud menggunakan "strcmp". Peringatan ini diaktifkan oleh -Dinding.

-Wlogical-op Peringatkan tentang penggunaan operator logika yang mencurigakan dalam ekspresi. Ini termasuk menggunakan operator logis dalam konteks di mana operator bit-bijaksana mungkin diharapkan.

-Wlogical-bukan-kurung Peringatkan tentang logika yang tidak digunakan pada operan sisi kiri perbandingan. Ini opsi tidak memperingatkan jika operan RHS bertipe boolean. Tujuannya adalah untuk mendeteksi kode yang mencurigakan seperti berikut:

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

Dimungkinkan untuk menekan peringatan dengan membungkus LHS ke dalam tanda kurung:

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

Peringatan ini diaktifkan oleh -Dinding.

-Pengembalian-Waggregate Peringatkan jika ada fungsi yang mengembalikan struktur atau serikat pekerja yang didefinisikan atau dipanggil. (Di dalam bahasa di mana Anda dapat mengembalikan array, ini juga menimbulkan peringatan.)

-Wno-agresif-loop-optimasi Peringatkan jika dalam satu lingkaran dengan jumlah iterasi yang konstan, kompiler mendeteksi tidak terdefinisi perilaku dalam beberapa pernyataan selama satu atau lebih iterasi.

-Wno-atribut Jangan peringatkan jika "__attribute__" yang tidak terduga digunakan, seperti atribut yang tidak dikenal, atribut fungsi yang diterapkan ke variabel, dll. Ini tidak menghentikan kesalahan untuk penggunaan yang salah dari atribut yang didukung.

-Wno-builtin-makro-didefinisikan ulang Jangan peringatkan jika makro bawaan tertentu didefinisikan ulang. Ini menekan peringatan untuk redefinisi "__TIMESTAMP__", "__TIME__", "__DATE__", "__FILE__", dan "__BASE_FILE__".

-Wstrict-prototipe (C dan Objective-C saja) Peringatkan jika suatu fungsi dideklarasikan atau didefinisikan tanpa menentukan tipe argumen. (NS definisi fungsi gaya lama diizinkan tanpa peringatan jika didahului oleh a deklarasi yang menentukan tipe argumen.)

-Deklarasi-gaya-Wold (C dan Objective-C saja) Peringatkan penggunaan usang, menurut Standar C, dalam sebuah deklarasi. Untuk contoh, peringatkan jika penentu kelas penyimpanan seperti "statis" bukan hal pertama dalam a pernyataan. Peringatan ini juga diaktifkan oleh -Wextra.

-Definisi gaya-wold (C dan Objective-C saja) Peringatkan jika definisi fungsi gaya lama digunakan. Peringatan diberikan bahkan jika ada prototipe sebelumnya.

-Wmissing-parameter-type (C dan Objective-C saja) Parameter fungsi dideklarasikan tanpa penentu tipe dalam fungsi gaya K&R:

batal foo(bar) {}

Peringatan ini juga diaktifkan oleh -Wextra.

-Wmissing-prototipe (C dan Objective-C saja) Peringatkan jika fungsi global didefinisikan tanpa deklarasi prototipe sebelumnya. Ini peringatan dikeluarkan bahkan jika definisi itu sendiri menyediakan prototipe. Gunakan opsi ini untuk mendeteksi fungsi global yang tidak memiliki deklarasi prototipe yang cocok di a berkas kepala. Opsi ini tidak valid untuk C++ karena semua deklarasi fungsi memberikan prototipe dan deklarasi yang tidak cocok menyatakan kelebihan daripada bertentangan dengan pernyataan sebelumnya. Menggunakan -Wmissing-deklarasi untuk mendeteksi hilang deklarasi dalam C++.

-Wmissing-deklarasi Peringatkan jika fungsi global didefinisikan tanpa deklarasi sebelumnya. Lakukan bahkan jika definisi itu sendiri menyediakan prototipe. Gunakan opsi ini untuk mendeteksi global fungsi yang tidak dideklarasikan dalam file header. Di C, tidak ada peringatan yang dikeluarkan untuk fungsi dengan deklarasi non-prototipe sebelumnya; menggunakan -Wmissing-prototipe untuk mendeteksi prototipe yang hilang. Di C++, tidak ada peringatan yang dikeluarkan untuk templat fungsi, atau untuk fungsi sebaris, atau untuk fungsi di ruang nama anonim.

-Penginisialisasi bidang-Wmissing Peringatkan jika penginisialisasi struktur memiliki beberapa bidang yang hilang. Sebagai contoh, berikut ini kode menyebabkan peringatan seperti itu, karena "xh" secara implisit nol:

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

Opsi ini tidak memperingatkan tentang inisialisasi yang ditunjuk, jadi modifikasi berikut: tidak memicu peringatan:

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

Di C++ opsi ini tidak memperingatkan tentang penginisialisasi {} yang kosong, misalnya:

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

Peringatan ini termasuk dalam -Wextra. Untuk mendapatkan yang lain -Wextra peringatan tanpa yang ini, menggunakan -Wextra -Wno-missing-field-initializers.

-Wno-multichar Jangan peringatkan jika konstanta multikarakter ('FOOF') digunakan. Biasanya mereka menunjukkan salah ketik dalam kode pengguna, karena mereka memiliki nilai yang ditentukan implementasi, dan tidak boleh digunakan dalam kode portabel.

-Wnormalisasi[=] Dalam ISO C dan ISO C++, dua pengidentifikasi berbeda jika urutannya berbeda karakter. Namun, terkadang ketika karakter di luar rangkaian karakter ASCII dasar digunakan, Anda dapat memiliki dua urutan karakter berbeda yang terlihat sama. Menghindari kebingungan, standar ISO 10646 menetapkan beberapa normalisasi aturan yang bila diterapkan memastikan bahwa dua urutan yang terlihat sama diubah menjadi urutan yang sama. GCC dapat memperingatkan Anda jika Anda menggunakan pengenal yang belum dinormalisasi; pilihan ini mengontrol peringatan itu.

Ada empat level peringatan yang didukung oleh GCC. Standarnya adalah -Wnormalisasi=nfc, yang memperingatkan tentang pengenal apa pun yang tidak dalam bentuk normalisasi ISO 10646 "C", NFC. NFC adalah bentuk yang direkomendasikan untuk sebagian besar penggunaan. Ini setara dengan -Wnormalisasi.

Sayangnya, ada beberapa karakter yang diizinkan dalam pengidentifikasi oleh ISO C dan ISO C++ bahwa, ketika diubah menjadi NFC, tidak diperbolehkan dalam pengidentifikasi. Artinya, tidak mungkin untuk menggunakan simbol-simbol ini dalam ISO C atau C++ portabel dan memiliki semua pengenal Anda di NFC. -Wnormalisasi=id menekan peringatan untuk karakter ini. Diharapkan kedepannya versi standar yang terlibat akan memperbaiki ini, itulah sebabnya opsi ini tidak default.

Anda dapat menonaktifkan peringatan untuk semua karakter dengan menulis -Wnormalisasi=tidak ada or -Wno-dinormalisasi. Anda hanya boleh melakukan ini jika Anda menggunakan beberapa normalisasi lainnya skema (seperti "D"), karena jika tidak, Anda dapat dengan mudah membuat bug yang secara harfiah mustahil untuk dilihat.

Beberapa karakter dalam ISO 10646 memiliki arti yang berbeda tetapi terlihat identik dalam beberapa font atau metodologi tampilan, terutama setelah pemformatan diterapkan. Contohnya "\u207F", "SUPERSCRIPT LATIN SMALL LETTER N", ditampilkan seperti "n" biasa yang telah ditempatkan dalam superskrip. ISO 10646 mendefinisikan: NFKC skema normalisasi ke ubah semua ini menjadi bentuk standar juga, dan GCC memperingatkan jika kode Anda tidak ada NFKC jika Anda menggunakan -Wnormalisasi=nfkc. Peringatan ini sebanding dengan peringatan tentang setiap pengenal yang berisi huruf O karena mungkin bingung dengan angka 0, dan bukan default, tetapi mungkin berguna sebagai konvensi pengkodean lokal jika lingkungan pemrograman tidak dapat diperbaiki untuk menampilkan karakter ini dengan jelas.

-Tidak digunakan lagi Jangan memperingatkan tentang penggunaan fitur usang.

-Wno-deprecated-deklarasi Jangan peringatkan tentang penggunaan fungsi, variabel, dan tipe yang ditandai sebagai tidak digunakan lagi oleh menggunakan atribut "usang".

-Wno-melimpah Jangan peringatkan tentang waktu kompilasi yang meluap dalam ekspresi konstan.

-Wno-odr Peringatkan tentang pelanggaran Aturan Satu Definisi selama pengoptimalan waktu tautan. Memerlukan -flto-odr-type-penggabungan untuk diaktifkan. Diaktifkan secara default.

-Wopenmp-simd Peringatkan jika model biaya vectorizer mengesampingkan OpenMP atau direktif simd Cilk Plus ditetapkan oleh pengguna. NS -fsimd-cost-model=tidak terbatas opsi dapat digunakan untuk mengendurkan biaya Model.

-Woverride-init (C dan Objective-C saja) Peringatkan jika bidang yang diinisialisasi tanpa efek samping diganti saat menggunakan yang ditunjuk inisialisasi.

Peringatan ini termasuk dalam -Wextra. Untuk mendapatkan yang lain -Wextra peringatan tanpa yang ini, menggunakan -Wextra -Wno-override-init.

-Wpacked Peringatkan jika suatu struktur diberi atribut yang dikemas, tetapi atribut yang dikemas tidak memiliki mempengaruhi tata letak atau ukuran struktur. Struktur seperti itu mungkin tidak selaras untuk sedikit manfaat. Misalnya, dalam kode ini, variabel "fx" di "struct bar" adalah tidak selaras meskipun "struct bar" itu sendiri tidak memiliki atribut yang dikemas:

struktur foo { intx; karakter a, b, c, d; } __attribute __ ((dikemas)); batang struktur { karakter z; struktur foo f; };

-Wpacked-bitfield-compat Seri 4.1, 4.2 dan 4.3 dari GCC mengabaikan atribut "packed" pada bit-field tipe "arang". Ini telah diperbaiki di GCC 4.4 tetapi perubahan tersebut dapat menyebabkan perbedaan dalam tata letak struktur. GCC memberi tahu Anda ketika offset bidang tersebut telah berubah di GCC 4.4. Misalnya tidak ada lagi padding 4-bit antara bidang "a" dan "b" dalam hal ini struktur:

struktur foo { karakter:4; karakter b:8; } __attribute__ ((dikemas));

Peringatan ini diaktifkan secara default. Menggunakan -Wno-packed-bitfield-compat untuk menonaktifkan ini peringatan.

-Dilapisi Peringatkan jika bantalan disertakan dalam struktur, baik untuk menyelaraskan elemen dari struktur atau untuk menyelaraskan seluruh struktur. Terkadang ketika ini terjadi, itu mungkin untuk mengatur ulang bidang struktur untuk mengurangi bantalan dan membuat struktur lebih kecil.

-Wredundant-dekl Peringatkan jika ada yang dideklarasikan lebih dari satu kali dalam lingkup yang sama, bahkan dalam kasus di mana beberapa deklarasi valid dan tidak mengubah apa pun.

-Wnested-ekstern (C dan Objective-C saja) Peringatkan jika deklarasi "eksternal" ditemukan dalam suatu fungsi.

-Wno-mewarisi-variadik-ctor Menekan peringatan tentang penggunaan C++11 mewarisi konstruktor ketika kelas dasar diwarisi dari memiliki konstruktor variadic C; peringatan aktif secara default karena elipsis tidak diwariskan.

-winline Peringatkan jika fungsi yang dideklarasikan sebagai inline tidak dapat di-inline. Bahkan dengan ini opsi, kompiler tidak memperingatkan tentang kegagalan fungsi sebaris yang dideklarasikan dalam header sistem.

Kompiler menggunakan berbagai heuristik untuk menentukan apakah akan inline a . atau tidak fungsi. Misalnya, kompiler memperhitungkan ukuran fungsi yang inline dan jumlah inlining yang telah dilakukan dalam fungsi saat ini. Oleh karena itu, perubahan yang tampaknya tidak signifikan dalam program sumber dapat menyebabkan peringatan yang dihasilkan oleh -winline untuk muncul atau menghilang.

-Wno-tidak valid-offsetof (C++ dan Objective-C++ saja) Menekan peringatan dari menerapkan makro "offsetof" ke tipe non-POD. Berdasarkan standar ISO C++ 2014, menerapkan "offsetof" ke tipe tata letak non-standar adalah tidak terdefinisi. Namun, dalam implementasi C++ yang ada, "offsetof" biasanya memberikan hasil yang berarti. Bendera ini untuk pengguna yang sadar bahwa mereka sedang menulis kode nonportable dan yang sengaja memilih untuk mengabaikan peringatan tentang hal itu.

Pembatasan "offsetof" dapat dilonggarkan di versi standar C++ yang akan datang.

-Wno-int-to-pointer-cast Menekan peringatan dari gips ke tipe penunjuk bilangan bulat dengan ukuran berbeda. Di dalam C++, casting ke tipe pointer dengan ukuran lebih kecil adalah kesalahan. Wint-to-pointer-cast is diaktifkan secara default.

-Wno-pointer-to-int-cast (C dan Objective-C saja) Menekan peringatan dari gips dari pointer ke tipe integer dengan ukuran berbeda.

-Winvalid-pch Peringatkan jika header yang telah dikompilasi ditemukan di jalur pencarian tetapi tidak dapat digunakan.

-panjang-panjang Peringatkan jika tipe "panjang panjang" digunakan. Ini diaktifkan oleh salah satu dari -Medantik or -Tradisional dalam mode ISO C90 dan C++98. Untuk menghambat pesan peringatan, gunakan -Wno-panjang-panjang.

-Wvariadic-makro Peringatkan jika makro variadik digunakan dalam mode ISO C90, atau jika sintaks alternatif GNU adalah digunakan dalam mode ISO C99. Ini diaktifkan oleh salah satu dari -Medantik or -Tradisional. Untuk menghambat pesan peringatan, gunakan -Wno-variadic-makro.

-Wvarargs Peringatkan penggunaan makro yang dipertanyakan yang digunakan untuk menangani argumen variabel seperti "va_start". Ini adalah default. Untuk menghambat pesan peringatan, gunakan -Wno-varargs.

-Vektor-operasi-kinerja Peringatkan jika operasi vektor tidak diimplementasikan melalui kemampuan arsitektur SIMD. Terutama berguna untuk penyetelan kinerja. Operasi vektor dapat diimplementasikan "sepotong", yang berarti bahwa operasi skalar dilakukan pada setiap vektor elemen; "secara paralel", yang berarti bahwa operasi vektor diimplementasikan menggunakan skalar jenis yang lebih luas, yang biasanya lebih efisien kinerja; dan "sebagai lajang skalar", yang berarti bahwa vektor cocok dengan jenis skalar.

-Wno-virtual-move-assign Menekan peringatan tentang mewarisi dari basis virtual dengan gerakan C++ 11 non-sepele operator penugasan. Ini berbahaya karena jika basis virtual dapat dijangkau lebih dari satu jalur, itu dipindahkan beberapa kali, yang dapat berarti kedua objek berakhir di keadaan pindah-dari. Jika operator penugasan pemindahan ditulis untuk menghindari perpindahan dari objek yang dipindahkan-dari, peringatan ini dapat dinonaktifkan.

-Wvla Peringatkan jika array panjang variabel digunakan dalam kode. -Wno-vla mencegah -Medantik peringatan dari array panjang variabel.

-Wvolatile-register-var Peringatkan jika variabel register dinyatakan volatile. Pengubah volatil tidak menghambat semua pengoptimalan yang dapat menghilangkan pembacaan dan/atau penulisan ke register variabel. Peringatan ini diaktifkan oleh -Dinding.

-Wdisabled-optimasi Peringatkan jika pass pengoptimalan yang diminta dinonaktifkan. Peringatan ini biasanya tidak menunjukkan bahwa ada yang salah dengan kode Anda; itu hanya menunjukkan bahwa GCC's pengoptimal tidak dapat menangani kode secara efektif. Seringkali, masalahnya adalah bahwa Anda kode terlalu besar atau terlalu rumit; GCC menolak untuk mengoptimalkan program saat pengoptimalan itu sendiri kemungkinan akan memakan banyak waktu.

-Wpointer-tanda (C dan Objective-C saja) Peringatkan untuk argumen penunjuk yang lewat atau penugasan dengan penandatanganan yang berbeda. Ini opsi hanya didukung untuk C dan Objective-C. Hal ini tersirat oleh -Dinding dan oleh -Medantik, yang dapat dinonaktifkan dengan -Wno-pointer-tanda.

-Wstack-pelindung Opsi ini hanya aktif ketika -fstack-pelindung aktif. Ini memperingatkan tentang fungsi yang tidak terlindung dari stack smashing.

-Woverlength-string Peringatkan tentang konstanta string yang lebih panjang dari panjang "maksimum minimum" ditentukan dalam standar C. Kompiler modern umumnya mengizinkan konstanta string yang jauh lebih lama dari batas minimum standar, tetapi program yang sangat portabel seharusnya hindari menggunakan string yang lebih panjang.

Batas berlaku setelah rangkaian string konstan, dan tidak menghitung trailing NUL. Di C90, batasnya adalah 509 karakter; di C99, dinaikkan menjadi 4095. C++98 tidak tidak menentukan maksimum minimum normatif, jadi kami tidak mendiagnosis string yang terlalu panjang dalam C ++.

Pilihan ini tersirat oleh -Medantik, dan dapat dinonaktifkan dengan -Wno-overlength-string.

-Wunsuffixed-float-constants (C dan Objective-C saja) Mengeluarkan peringatan untuk setiap konstanta mengambang yang tidak memiliki akhiran. Saat digunakan Bersama -Wsystem-header itu memperingatkan tentang konstanta seperti itu dalam file header sistem. Ini dapat berguna saat menyiapkan kode untuk digunakan dengan pragma "FLOAT_CONST_DECIMAL64" dari ekstensi titik-mengambang desimal ke C99.

-Wno-ditunjuk-init (C dan Objective-C saja) Menekan peringatan ketika penginisialisasi posisi digunakan untuk menginisialisasi struktur yang telah ditandai dengan atribut "designated_init".

Opsi untuk Debugging Anda program or GCC GCC memiliki berbagai opsi khusus yang digunakan untuk men-debug program Anda atau GCC:

-g Menghasilkan informasi debugging dalam format asli sistem operasi (stabs, COFF, XCOFF, atau DWARF 2). GDB dapat bekerja dengan informasi debug ini.

Pada sebagian besar sistem yang menggunakan format tusukan, -g memungkinkan penggunaan informasi debug tambahan yang hanya dapat digunakan GDB; informasi tambahan ini membuat debugging bekerja lebih baik di GDB tetapi mungkin membuat debugger lain crash atau menolak untuk membaca program. Jika Anda menghendaki kontrol untuk memastikan apakah akan menghasilkan informasi tambahan, gunakan -gstab+, -gstab, -gxcoff+, -gxcoff, atau -gvms (Lihat di bawah).

GCC memungkinkan Anda untuk menggunakan -g dengan -O. Pintasan yang diambil oleh kode yang dioptimalkan mungkin terkadang menghasilkan hasil yang mengejutkan: beberapa variabel yang Anda nyatakan mungkin tidak ada di semua; aliran kontrol mungkin bergerak sebentar di tempat yang tidak Anda duga; beberapa pernyataan mungkin tidak dieksekusi karena mereka menghitung hasil konstan atau nilainya sudah di tangan; beberapa pernyataan dapat dieksekusi di tempat yang berbeda karena telah dipindahkan dari loop.

Namun demikian terbukti mungkin untuk men-debug output yang dioptimalkan. Ini membuatnya masuk akal untuk menggunakan pengoptimal untuk program yang mungkin memiliki bug.

Opsi berikut berguna ketika GCC dihasilkan dengan kemampuan untuk lebih banyak lagi dari satu format debug.

-gsplit-kerdil Pisahkan sebanyak mungkin informasi debug kerdil ke dalam file keluaran terpisah dengan ekstensi .dwo. Opsi ini memungkinkan sistem build untuk menghindari penautan file dengan informasi debug. Agar berguna, opsi ini membutuhkan debugger yang mampu membaca file .dwo.

-ggdb Menghasilkan informasi debug untuk digunakan oleh GDB. Ini berarti menggunakan yang paling ekspresif format yang tersedia (DWARF 2, stabs, atau format asli jika keduanya tidak ada) didukung), termasuk ekstensi GDB jika memungkinkan.

-gpubnames Buat bagian .debug_pubnames dan .debug_pubtypes kerdil.

-ggnu-pubnames Buat bagian .debug_pubnames dan .debug_pubtypes dalam format yang sesuai untuk konversi menjadi indeks GDB. Opsi ini hanya berguna dengan tautan yang dapat menghasilkan indeks GDB versi 7.

-gstab Menghasilkan informasi debug dalam format tusukan (jika didukung), tanpa GDB ekstensi. Ini adalah format yang digunakan oleh DBX pada kebanyakan sistem BSD. Di MIPS, Alpha dan Sistem V Rilis 4 sistem opsi ini menghasilkan output debug tusukan yang tidak dipahami oleh DBX atau SDB. Pada sistem System V Release 4, opsi ini memerlukan GNU perakit.

-feliminate-unused-debug-simbol Menghasilkan informasi debug dalam format tusukan (jika didukung), hanya untuk simbol yang sebenarnya digunakan.

-femit-class-debug-selalu Alih-alih memancarkan informasi debug untuk kelas C++ hanya dalam satu file objek, memancarkannya di semua file objek menggunakan kelas. Opsi ini harus digunakan hanya dengan debugger yang tidak dapat menangani cara GCC biasanya memancarkan informasi debug untuk kelas karena menggunakan opsi ini meningkatkan ukuran informasi debug dengan sebanyak faktor dua.

-fdebug-jenis-bagian Saat menggunakan DWARF Versi 4 atau lebih tinggi, tipe DIE dapat dimasukkan ke dalam sendiri bagian ".debug_types" alih-alih menjadikannya bagian dari bagian ".debug_info". Dia lebih efisien untuk menempatkannya di bagian comdat terpisah karena tautan kemudian dapat menghapus duplikat. Tetapi tidak semua konsumen DWARF mendukung bagian ".debug_types" dan pada beberapa objek ".debug_types" menghasilkan debug yang lebih besar daripada yang lebih kecil informasi.

-gstab+ Menghasilkan informasi debug dalam format tusukan (jika didukung), menggunakan GNU ekstensi yang hanya dipahami oleh debugger GNU (GDB). Penggunaan ekstensi ini adalah cenderung membuat debugger lain mogok atau menolak membaca program.

-gcoff Menghasilkan informasi debug dalam format COFF (jika didukung). Ini adalah format yang digunakan oleh SDB pada sebagian besar sistem Sistem V sebelum Sistem V Rilis 4.

-gxcoff Menghasilkan informasi debug dalam format XCOFF (jika didukung). Ini adalah format yang digunakan oleh debugger DBX pada sistem IBM RS/6000.

-gxcoff+ Menghasilkan informasi debug dalam format XCOFF (jika didukung), menggunakan GNU ekstensi yang hanya dipahami oleh debugger GNU (GDB). Penggunaan ekstensi ini adalah cenderung membuat debugger lain mogok atau menolak untuk membaca program, dan dapat menyebabkan assembler selain assembler GNU (GAS) gagal dengan kesalahan.

-gdwarf-versi Menghasilkan informasi debug dalam format DWARF (jika didukung). Nilai dari versi dapat berupa 2, 3, 4 atau 5; versi default untuk sebagian besar target adalah 4. DWARF Versi 5 hanya eksperimental.

Perhatikan bahwa dengan DWARF Versi 2, beberapa port memerlukan dan selalu menggunakan beberapa port yang tidak bertentangan Ekstensi DWARF 3 di tabel bersantai.

Versi 4 mungkin memerlukan GDB 7.0 dan -fvar-pelacakan-tugas untuk keuntungan maksimal.

-grecord-gcc-switch Switch ini menyebabkan opsi baris perintah yang digunakan untuk memanggil kompiler yang mungkin: mempengaruhi pembuatan kode untuk ditambahkan ke atribut DW_AT_producer di DWARF informasi debug. Opsi digabungkan dengan spasi yang memisahkannya dari satu sama lain dan dari versi compiler. Lihat juga -record-gcc-switch untuk yang lain cara menyimpan opsi kompiler ke dalam file objek. Ini adalah default.

-gno-record-gcc-switch Larang penambahan opsi baris perintah ke atribut DW_AT_producer di DWARF informasi debug.

-gstrit-kurcaci Larang menggunakan ekstensi versi standar DWARF yang lebih baru daripada yang dipilih dengan -gdwarf-versi. Pada sebagian besar target yang menggunakan ekstensi DWARF yang tidak bertentangan dari nanti versi standar diperbolehkan.

-gno-ketat-kerdil Izinkan menggunakan ekstensi versi standar DWARF yang lebih baru daripada yang dipilih dengan -gdwarf-versi.

-gz[=mengetik] Hasilkan bagian debug terkompresi dalam format DWARF, jika itu didukung. Jika mengetik is tidak diberikan, tipe default tergantung pada kemampuan assembler dan linker bekas. mengetik mungkin salah satunya tak satupun (jangan kompres bagian debug), zlib (gunakan zlib kompresi dalam format ELF gABI), atau zlib-gnu (gunakan kompresi zlib di GNU tradisional format). Jika tautan tidak mendukung penulisan bagian debug terkompresi, opsinya ditolak. Jika tidak, jika assembler tidak mendukungnya, -gz diam-diam diabaikan saat memproduksi file objek.

-gvms Menghasilkan informasi debug dalam format debug Alpha/VMS (jika didukung). Ini adalah format yang digunakan oleh DEBUG pada sistem Alpha/VMS.

-gtingkat -ggdbtingkat -gstabtingkat -gcofftingkat -gxcofftingkat -gvmstingkat Minta informasi debug dan juga gunakan tingkat untuk menentukan berapa banyak informasi. NS tingkat standarnya adalah 2.

Level 0 tidak menghasilkan informasi debug sama sekali. Dengan demikian, -g0 meniadakan -g.

Level 1 menghasilkan informasi minimal, cukup untuk membuat backtrace di bagian program yang tidak Anda rencanakan untuk di-debug. Ini termasuk deskripsi fungsi dan variabel eksternal, dan tabel nomor baris, tetapi tidak ada informasi tentang variabel lokal.

Level 3 mencakup informasi tambahan, seperti semua definisi makro yang ada di program. Beberapa debugger mendukung ekspansi makro saat Anda menggunakan -g3.

-gdwarf-2 tidak menerima tingkat debug gabungan, karena GCC digunakan untuk mendukung Option -gdwarf yang dimaksudkan untuk menghasilkan informasi debug di versi 1 DWARF format (yang sangat berbeda dari versi 2), dan itu akan terlalu membingungkan. Format debug itu sudah lama usang, tetapi opsinya tidak dapat diubah sekarang. Sebagai gantinya gunakan tambahan -gtingkat opsi untuk mengubah tingkat debug untuk DWARF.

-gtoggle Matikan pembuatan info debug, jika tidak mengaktifkan opsi ini, atau aktifkan di level 2 sebaliknya. Posisi argumen ini di baris perintah tidak urusan; itu berlaku setelah semua opsi lain diproses, dan itu hanya berlaku sekali, tidak peduli berapa kali itu diberikan. Ini terutama dimaksudkan untuk digunakan dengan -fbandingkan-debug.

-fsanitize=alamat Aktifkan AddressSanitizer, pendeteksi kesalahan memori yang cepat. Instruksi akses memori adalah diinstrumentasi untuk mendeteksi bug di luar batas dan penggunaan setelah bebas. Lihat untuk lebih jelasnya. NS perilaku run-time dapat dipengaruhi menggunakan ASAN_OPTIONS variabel lingkungan. Kapan atur ke "help=1", opsi yang tersedia ditampilkan saat memulai instrumen program. Lihat untuk daftar opsi yang didukung.

-fsanitize=alamat kernel Aktifkan AddressSanitizer untuk kernel Linux. Lihathttps://github.com/google/kasan/wiki> lebih lanjut.

-fsanitize=utas Aktifkan ThreadSanitizer, pendeteksi balapan data yang cepat. Instruksi akses memori adalah diinstrumentasi untuk mendeteksi bug ras data. Lihat untuk lebih jelasnya. Lari- perilaku waktu dapat dipengaruhi menggunakan TSAN_OPTIONS variabel lingkungan; Lihat untuk daftar pilihan yang didukung.

-fsanitize=kebocoran Aktifkan LeakSanitizer, pendeteksi kebocoran memori. Opsi ini hanya penting untuk menautkan executable dan jika tidak ada -fsanitize=alamat maupun -fsanitize=utas digunakan. Karena kasus executable ditautkan ke perpustakaan yang menimpa "malloc" dan lainnya fungsi pengalokasi. Lihat untuk lebih rincian. Perilaku run-time dapat dipengaruhi menggunakan LSAN_OPTIONS lingkungan Hidup variabel.

-fsanitize=tidak terdefinisi Aktifkan UndefinedBehaviorSanitizer, pendeteksi perilaku cepat yang tidak ditentukan. Bermacam-macam komputasi diinstrumentasikan untuk mendeteksi perilaku tidak terdefinisi pada saat runtime. Saat ini subopsi adalah:

-fsanitize=pergeseran Opsi ini memungkinkan pemeriksaan bahwa hasil dari operasi shift tidak tidak terdefinisi. Perhatikan bahwa apa yang sebenarnya dianggap tidak terdefinisi sedikit berbeda antara C dan C++, serta antara ISO C90 dan C99, dll.

-fsanitize=bilangan bulat-bagi-dengan-nol Deteksi pembagian bilangan bulat dengan nol serta pembagian "INT_MIN / -1".

-fsanitize=tidak dapat dijangkau Dengan opsi ini, kompilator mengubah panggilan "__builtin_unreachable" menjadi a panggilan pesan diagnostik sebagai gantinya. Saat mencapai panggilan "__builtin_unreachable", perilaku tidak terdefinisi.

-fsanitize=vla-terikat Opsi ini menginstruksikan kompiler untuk memeriksa bahwa ukuran panjang variabel array adalah positif.

-fsanitize=null Opsi ini memungkinkan pemeriksaan penunjuk. Khususnya, aplikasi yang dibangun dengan opsi ini diaktifkan akan mengeluarkan pesan kesalahan saat mencoba melakukan dereferensi a Pointer NULL, atau jika referensi (mungkin referensi nilai) terikat ke NULL pointer, atau jika suatu metode dipanggil pada objek yang ditunjuk oleh pointer NULL.

-fsanitize=kembalikan Opsi ini memungkinkan pemeriksaan pernyataan pengembalian. Program yang dibuat dengan opsi ini dihidupkan akan mengeluarkan pesan kesalahan ketika akhir dari fungsi yang tidak batal adalah dicapai tanpa benar-benar mengembalikan nilai. Opsi ini hanya berfungsi di C++.

-fsanitize=signed-integer-overflow Opsi ini mengaktifkan pemeriksaan luapan bilangan bulat yang ditandatangani. Kami memeriksa bahwa hasil dari "+", "*", dan baik unary maupun biner "-" tidak meluap di yang ditandatangani aritmatika. Catatan, aturan promosi bilangan bulat harus diperhitungkan. Itu adalah, berikut ini bukan overflow:

bertanda char a = SCHAR_MAX; sebuah++;

-fsanitize=batas Opsi ini mengaktifkan instrumentasi batas array. Berbagai di luar batas akses terdeteksi. Anggota array fleksibel, array seperti anggota array fleksibel, dan inisialisasi variabel dengan penyimpanan statis tidak diinstrumentasi.

-fsanitize=penyelarasan Opsi ini memungkinkan pemeriksaan keselarasan pointer ketika mereka direferensikan, atau ketika referensi terikat pada target yang tidak sesuai, atau ketika metode atau konstruktor dipanggil pada objek yang tidak cukup selaras.

-fsanitize=ukuran objek Opsi ini mengaktifkan instrumentasi referensi memori menggunakan fungsi "__builtin_object_size". Berbagai akses pointer di luar batas adalah terdeteksi.

-fsanitize=float-bagi-dengan-nol Deteksi pembagian floating-point dengan nol. Tidak seperti opsi serupa lainnya, -fsanitize=float-bagi-dengan-nol tidak diaktifkan oleh -fsanitize=tidak terdefinisi, sejak pembagian floating-point dengan nol bisa menjadi cara yang sah untuk mendapatkan tak terhingga dan NaN.

-fsanitize=float-cast-overflow Opsi ini memungkinkan pemeriksaan konversi tipe floating-point ke integer. Kami memeriksa agar hasil konversi tidak meluap. Tidak seperti lainnya yang serupa Pilihan -fsanitize=float-cast-overflow tidak diaktifkan oleh -fsanitize=tidak terdefinisi. Opsi ini tidak berfungsi dengan baik dengan pengecualian "FE_INVALID" diaktifkan.

-fsanitize=nonnull-atribut Opsi ini mengaktifkan instrumentasi panggilan, memeriksa apakah nilai nol tidak diteruskan ke argumen yang ditandai sebagai membutuhkan nilai non-null oleh fungsi "nonnull" atribut.

-fsanitize=pengembalian-nonnull-atribut Opsi ini memungkinkan instrumentasi pernyataan pengembalian dalam fungsi yang ditandai dengan Atribut fungsi "returns_nonnull", untuk mendeteksi pengembalian nilai nol dari fungsi.

-fsanitize=bool Opsi ini memungkinkan instrumentasi beban dari bool. Jika nilai selain 0/1 dimuat, kesalahan run-time dikeluarkan.

-fsanitize=enum Opsi ini memungkinkan instrumentasi beban dari tipe enum. Jika suatu nilai di luar rentang nilai untuk tipe enum dimuat, kesalahan run-time adalah dikabarkan.

-fsanitize=vptr Opsi ini mengaktifkan instrumentasi panggilan fungsi anggota C++, akses anggota dan beberapa konversi antara pointer ke kelas dasar dan turunan, untuk memverifikasi objek yang direferensikan memiliki tipe dinamis yang benar.

Sementara -ftrapv menyebabkan jebakan untuk luapan yang ditandatangani, -fsanitize=tidak terdefinisi memberikan pesan diagnostik. Ini saat ini hanya berfungsi untuk keluarga bahasa C.

-fno-sanitize=semua Opsi ini menonaktifkan semua pembersih yang diaktifkan sebelumnya. -fsanitize=semua tidak diperbolehkan, karena beberapa pembersih tidak dapat digunakan bersama-sama.

-fasan-bayangan-offset=jumlah Opsi ini memaksa GCC untuk menggunakan offset bayangan khusus dalam pemeriksaan AddressSanitizer. Dia berguna untuk bereksperimen dengan tata letak memori bayangan yang berbeda di Kernel Pembersih Alamat.

-membersihkan-memulihkan[=opts] -fsanitize-recover= mengontrol mode pemulihan kesalahan untuk pembersih yang disebutkan dalam koma daftar terpisah opts. Mengaktifkan opsi ini untuk komponen pembersih akan menyebabkannya mencoba untuk terus menjalankan program seolah-olah tidak ada kesalahan yang terjadi. Ini berarti banyak kesalahan runtime dapat dilaporkan dalam menjalankan program tunggal, dan kode keluar dari program dapat menunjukkan keberhasilan bahkan ketika kesalahan telah dilaporkan. NS -fno-sanitasi-pulihkan= opsi dapat digunakan untuk mengubah perilaku ini: hanya yang pertama kesalahan yang terdeteksi dilaporkan dan program kemudian keluar dengan kode keluar bukan nol.

Saat ini fitur ini hanya berfungsi untuk -fsanitize=tidak terdefinisi (dan subopsinya kecuali untuk -fsanitize=tidak dapat dijangkau serta -fsanitize=kembalikan), -fsanitize=float-cast-overflow, -fsanitize=float-bagi-dengan-nol serta -fsanitize=alamat kernel. Untuk pembersih ini pemulihan kesalahan diaktifkan secara default. -fsanitize-recover=semua serta -fno-sanitize-recover=semua juga diterima, yang pertama memungkinkan pemulihan untuk semua pembersih yang mendukungnya, yang terakhir menonaktifkan pemulihan untuk semua pembersih yang dukung itu.

Sintaks tanpa eksplisit opts parameter tidak digunakan lagi. Ini setara dengan

-fsanitize-recover=tidak terdefinisi,float-cast-overflow,float-divide-by-zero

Demikian pula -fno-sanitasi-pulihkan adalah setara dengan

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

-fsanitize-undefined-trap-on-error The -fsanitize-undefined-trap-on-error opsi menginstruksikan kompiler untuk melaporkan perilaku tidak terdefinisi menggunakan "__builtin_trap" daripada rutinitas perpustakaan "libubsan". Keuntungan dari ini adalah bahwa perpustakaan "libubsan" tidak diperlukan dan tidak ditautkan di, jadi ini dapat digunakan bahkan di lingkungan yang berdiri sendiri.

-fcheck-pointer-bounds Aktifkan instrumentasi Pointer Bounds Checker. Setiap referensi memori diinstrumentasikan dengan pemeriksaan pointer yang digunakan untuk akses memori terhadap batas yang terkait dengan itu penunjuk.

Saat ini hanya ada implementasi untuk Intel MPX yang tersedia, sehingga target x86 dan -mmpx diperlukan untuk mengaktifkan fitur ini. Instrumentasi berbasis MPX membutuhkan: perpustakaan runtime untuk mengaktifkan MPX di perangkat keras dan menangani sinyal pelanggaran batas. Oleh default kapan -fcheck-pointer-bounds serta -mmpx pilihan yang digunakan untuk menghubungkan program, Tautan driver GCC terhadap libmpx perpustakaan runtime dan libmpxwrappers Perpustakaan. Dia juga meneruskan '-z bndplt' ke tautan jika itu mendukung opsi ini (yang dicentang pada konfigurasi libmpx). Perhatikan bahwa penaut versi lama mungkin mengabaikan opsi. Emas linker tidak mendukung opsi '-z bndplt'. Tanpa dukungan '-z bndplt' di semua linker panggilan ke perpustakaan dinamis kehilangan batas yang dilewati sehingga mengurangi tingkat perlindungan secara keseluruhan. Dia sangat disarankan untuk menggunakan tautan dengan dukungan '-z bndplt'. Jika penaut seperti itu tidak tersedia disarankan untuk selalu menggunakan -static-libmpxwrappers untuk perlindungan yang lebih baik tingkat atau gunakan -statis untuk sepenuhnya menghindari panggilan eksternal ke perpustakaan dinamis. MPX- instrumentasi berbasis dapat digunakan untuk debugging dan juga dapat dimasukkan dalam produksi kode untuk meningkatkan keamanan program. Tergantung pada penggunaan, Anda mungkin memiliki perbedaan persyaratan untuk perpustakaan runtime. Versi perpustakaan runtime MPX saat ini lebih berorientasi untuk digunakan sebagai alat debugging. Penggunaan perpustakaan runtime MPX menyiratkan -lpthread. Lihat juga -static-libmpx. Perilaku perpustakaan runtime dapat dipengaruhi menggunakan berbagai CHKP_RT_* variabel lingkungan. Lihat untuk lebih rincian.

Instrumentasi yang dihasilkan dapat dikendalikan oleh berbagai -fchkp-* pilihan dan oleh Atribut bidang struktur "bnd_variable_size" dan "bnd_legacy", dan "bnd_instrument" atribut fungsi. GCC juga menyediakan sejumlah fungsi bawaan untuk mengontrol Pemeriksa Batas Pointer.

-fchkp-check-incomplete-type Hasilkan pemeriksaan batas penunjuk untuk variabel dengan tipe yang tidak lengkap. Diaktifkan oleh standar.

-fchkp-batas-sempit Mengontrol batas yang digunakan oleh Pointer Bounds Checker untuk penunjuk ke bidang objek. Jika penyempitan diaktifkan maka batas bidang digunakan. Jika tidak, batas objek digunakan. Lihat juga -fchkp-array-sempit-ke-terdalam serta -fchkp-bidang-pertama-memiliki-batas-sendiri. Diaktifkan secara default.

-fchkp-bidang-pertama-memiliki-batas-sendiri Memaksa Pemeriksa Batas Pointer untuk menggunakan batas yang dipersempit untuk alamat yang pertama lapangan dalam struktur. Secara default, penunjuk ke bidang pertama memiliki batas yang sama sebagai penunjuk ke seluruh struktur.

-fchkp-array-sempit-ke-terdalam Memaksa Pointer Bounds Checker untuk menggunakan batas array terdalam jika terjadi nested akses array statis. Secara default opsi ini dinonaktifkan dan batas terluar array digunakan.

-fchkp-optimalkan Mengaktifkan optimasi Pointer Bounds Checker. Diaktifkan secara default saat pengoptimalan adalah ide yang bagus -O, -O2, -O3.

-fchkp-gunakan-fast-string-functions Mengaktifkan penggunaan *_nobnd versi fungsi string (bukan menyalin batas) oleh Pointer Pemeriksa Batas. Dinonaktifkan secara default.

-fchkp-gunakan-nochk-string-fungsi Mengaktifkan penggunaan *_nochk versi fungsi string (tidak memeriksa batas) oleh Pointer Pemeriksa Batas. Dinonaktifkan secara default.

-fchkp-gunakan-batas-statis Izinkan Pointer Bounds Checker untuk menghasilkan batas statis yang menahan batas statis variabel. Diaktifkan secara default.

-fchkp-use-static-const-bounds Gunakan batas yang diinisialisasi secara statis untuk batas konstan alih-alih menghasilkannya masing-masing waktu mereka diperlukan. Secara default diaktifkan ketika -fchkp-gunakan-batas-statis diaktifkan.

-fchkp-treat-zero-dynamic-size-as-infinite Dengan opsi ini, objek dengan tipe tidak lengkap yang ukurannya diperoleh secara dinamis adalah nol diperlakukan sebagai memiliki ukuran tak terbatas sebagai gantinya oleh Pointer Bounds Checker. Pilihan ini mungkin membantu jika sebuah program ditautkan dengan perpustakaan yang kehilangan informasi ukuran untuk beberapa orang simbol. Dinonaktifkan secara default.

-fchkp-cek-baca Menginstruksikan Pointer Bounds Checker untuk menghasilkan pemeriksaan untuk semua akses baca ke memori. Diaktifkan secara default.

-fchkp-cek-tulis Menginstruksikan Pointer Bounds Checker untuk menghasilkan pemeriksaan untuk semua akses tulis ke memori. Diaktifkan secara default.

-fchkp-toko-batas Menginstruksikan Pointer Bounds Checker untuk menghasilkan penyimpanan batas untuk penulisan pointer. Diaktifkan secara default.

-fchkp-instrumen-panggilan Menginstruksikan Pointer Bounds Checker untuk meneruskan batas pointer ke panggilan. Diaktifkan secara default.

-fchkp-instrument-ditandai-saja Menginstruksikan Pointer Bounds Checker ke fungsi instrumen saja yang ditandai dengan atribut "bnd_instrument". Dinonaktifkan secara default.

-fchkp-use-wrappers Memungkinkan Pemeriksa Batas Penunjuk untuk mengganti panggilan ke fungsi bawaan dengan panggilan ke fungsi pembungkus. Kapan -fchkp-use-wrappers digunakan untuk menghubungkan program, driver GCC secara otomatis menautkan ke libmpxwrappers. Lihat juga -static-libmpxwrappers. Diaktifkan secara default

-fdump-final-insns[=fillet] Buang representasi internal akhir (RTL) ke fillet. Jika argumen opsionalnya adalah dihilangkan (atau jika fillet adalah "."), nama file dump ditentukan dengan menambahkan ".gkd" ke nama file keluaran kompilasi.

-fbandingkan-debug[=opts] Jika tidak ada kesalahan yang terjadi selama kompilasi, jalankan kompiler untuk kedua kalinya, tambahkan opts serta -fbandingkan-debug-detik ke argumen yang diteruskan ke kompilasi kedua. Buang representasi internal akhir di kedua kompilasi, dan cetak kesalahan jika berbeda.

Jika tanda sama dengan dihilangkan, default -gtoggle digunakan.

Variabel lingkungan GCC_COMPARE_DEBUG, jika didefinisikan, tidak kosong dan bukan nol, secara implisit memungkinkan -fbandingkan-debug. Jika GCC_COMPARE_DEBUG didefinisikan ke string dimulai dengan tanda hubung, kemudian digunakan untuk opts, jika tidak default -gtoggle is bekas.

-fbandingkan-debug=, dengan tanda sama dengan tetapi tanpa opts, setara dengan -fno-bandingkan-debug, yang menonaktifkan pembuangan representasi akhir dan kompilasi kedua, mencegah genap GCC_COMPARE_DEBUG mulai berlaku.

Untuk memverifikasi cakupan penuh selama -fbandingkan-debug pengujian, atur GCC_COMPARE_DEBUG Untuk mengatakan -fbandingkan-debug-tidak-ditimpa, yang ditolak GCC sebagai opsi yang tidak valid dalam kenyataan apa pun kompilasi (bukan pra-pemrosesan, perakitan, atau penautan). Untuk mendapatkan peringatan saja, pengaturan GCC_COMPARE_DEBUG untuk -w%n-fbandingkan-debug tidak ditimpa akan melakukan.

-fbandingkan-debug-detik Opsi ini secara implisit diteruskan ke kompiler untuk kompilasi kedua yang diminta by -fbandingkan-debug, bersama dengan opsi untuk membungkam peringatan, dan menghilangkan opsi lainnya yang akan menyebabkan output kompiler efek samping ke file atau ke output standar. File dump dan file sementara yang diawetkan diganti namanya sehingga mengandung ".gk" ekstensi tambahan selama kompilasi kedua, untuk menghindari menimpanya dihasilkan oleh yang pertama.

Ketika opsi ini diteruskan ke pengandar kompilator, itu menyebabkan: pertama kompilasi untuk dilewati, yang membuatnya berguna untuk sedikit selain men-debug kompiler yang tepat.

-feliminate-dwarf2-dup Kompres informasi debug DWARF 2 dengan menghilangkan informasi duplikat tentang setiap simbol. Opsi ini hanya masuk akal saat membuat debugging DWARF 2 informasi dengan -gdwarf-2.

-femit-struct-debug-baseonly Pancarkan informasi debug untuk tipe seperti struct hanya jika nama dasar dari file sumber kompilasi cocok dengan nama dasar file di mana struct didefinisikan.

Opsi ini secara substansial mengurangi ukuran informasi debug, tetapi pada potensi kerugian yang signifikan dalam jenis informasi ke debugger. Lihat -femit-struct-debug-dikurangi untuk opsi yang kurang agresif. Lihat -femit-struct-debug-detailed untuk kontrol yang lebih detail.

Opsi ini hanya berfungsi dengan DWARF 2.

-femit-struct-debug-dikurangi Pancarkan informasi debug untuk tipe seperti struct hanya jika nama dasar dari file sumber kompilasi cocok dengan nama dasar file di mana jenisnya ditentukan, kecuali struct adalah template atau didefinisikan dalam header sistem.

Opsi ini secara signifikan mengurangi ukuran informasi debug, dengan beberapa potensi kerugian dalam jenis informasi ke debugger. Lihat -femit-struct-debug-baseonly untuk opsi yang lebih agresif. Lihat -femit-struct-debug-detailed untuk lebih jelasnya kontrol.

Opsi ini hanya berfungsi dengan DWARF 2.

-femit-struct-debug-detailed[=daftar spesifikasi] Tentukan tipe seperti struct yang digunakan oleh kompiler untuk menghasilkan informasi debug. NS maksudnya adalah untuk mengurangi informasi debug struct duplikat antara file objek yang berbeda dalam program yang sama.

Opsi ini adalah versi terperinci dari -femit-struct-debug-dikurangi serta -femit-struct-debug-baseonly, yang melayani sebagian besar kebutuhan.

Sebuah spesifikasi memiliki sintaks[dir:|ind:][pesanan:|Genre:](Apa pun|sys|mendasarkan|tak satupun)

Kata pertama opsional membatasi spesifikasi untuk struct yang digunakan secara langsung (dir:) atau digunakan secara tidak langsung (ind:). Tipe struct digunakan secara langsung ketika itu adalah tipe variabel, anggota. Penggunaan tidak langsung muncul melalui pointer ke struct. Itu adalah, ketika penggunaan struct yang tidak lengkap valid, penggunaannya tidak langsung. Contohnya adalah struktur satu langsung; struktur dua * tidak langsung;.

Kata kedua opsional membatasi spesifikasi untuk struct biasa (pesanan:) atau struktur generik (Genre:). Struk generik agak rumit untuk dijelaskan. Untuk C++, ini adalah spesialisasi non-eksplisit dari kelas template, atau kelas non-templat dalam di atas. Bahasa pemrograman lain memiliki generik, tetapi -femit-struct-debug-detailed belum mengimplementasikannya.

Kata ketiga menentukan file sumber untuk struct yang kompilernya harus memancarkan informasi debug. Nilai tak satupun serta Apa pun memiliki arti biasa. NS nilai mendasarkan berarti bahwa dasar nama file di mana deklarasi tipe muncul harus sesuai dengan dasar nama file kompilasi utama. Dalam praktek, ini berarti bahwa saat kompilasi foo.c, informasi debug dihasilkan untuk tipe dideklarasikan dalam file itu dan foo.h, tetapi bukan file header lainnya. Nilai sys cara tipe-tipe itu memuaskan mendasarkan atau dideklarasikan dalam header sistem atau compiler.

Anda mungkin perlu bereksperimen untuk menentukan setelan terbaik untuk aplikasi Anda.

Standarnya adalah -femit-struct-debug-detailed=semua.

Opsi ini hanya berfungsi dengan DWARF 2.

-fno-merge-debug-string Arahkan tautan untuk tidak menggabungkan string dalam informasi debug yang identik dalam file objek yang berbeda. Penggabungan tidak didukung oleh semua assembler atau penghubung. Penggabungan mengurangi ukuran informasi debug dalam file output pada biaya peningkatan waktu pemrosesan tautan. Penggabungan diaktifkan secara default.

-fdebug-awalan-peta=tua=baru Saat mengkompilasi file dalam direktori tua, catat informasi debug yang menggambarkannya sebagai in baru sebagai gantinya.

-fno-dwarf2-cfi-asm Keluarkan info pelepasan DWARF 2 sebagai bagian ".eh_frame" yang dihasilkan oleh kompiler alih-alih menggunakan Arahan ".cfi_*" GAS.

-p Hasilkan kode tambahan untuk menulis informasi profil yang cocok untuk program analisis prof. Anda harus menggunakan opsi ini saat mengkompilasi file sumber yang Anda inginkan datanya, dan Anda juga harus menggunakannya saat menautkan.

-hal Hasilkan kode tambahan untuk menulis informasi profil yang cocok untuk program analisis gprof. Anda harus menggunakan opsi ini saat mengkompilasi file sumber yang Anda inginkan datanya, dan Anda juga harus menggunakannya saat menautkan.

-Q Membuat kompiler mencetak setiap nama fungsi saat dikompilasi, dan mencetak beberapa statistik tentang setiap lulus ketika selesai.

-laporan-waktu Membuat kompiler mencetak beberapa statistik tentang waktu yang digunakan oleh setiap lintasan saat itu selesai.

-fmem-laporan Membuat kompiler mencetak beberapa statistik tentang alokasi memori permanen ketika itu selesai.

-fmem-laporan-wpa Membuat kompiler mencetak beberapa statistik tentang alokasi memori permanen untuk WPA fase saja.

-fpre-ipa-mem-laporan -fpost-ipa-mem-laporan Membuat kompiler mencetak beberapa statistik tentang alokasi memori permanen sebelum atau setelah optimasi antar prosedur.

-fprofile-laporan Membuat kompiler mencetak beberapa statistik tentang konsistensi profil (perkiraan) dan efek umpan individu.

-fstack-penggunaan Membuat informasi penggunaan tumpukan keluaran kompiler untuk program, pada per-fungsi dasar. Nama file untuk dump dibuat dengan menambahkan .su ke auxname. auxname is dihasilkan dari nama file output, jika ditentukan secara eksplisit dan bukan merupakan dieksekusi, jika tidak, itu adalah nama dasar dari file sumber. Sebuah entri terdiri dari tiga bidang:

* Nama fungsi.

* Sejumlah byte.

* Satu atau lebih kualifikasi: "statis", "dinamis", "terbatas".

Kualifikasi "statis" berarti bahwa fungsi memanipulasi tumpukan secara statis: a jumlah byte tetap dialokasikan untuk frame pada entri fungsi dan dirilis pada fungsi keluar; tidak ada penyesuaian tumpukan yang dibuat dalam fungsi. Kedua bidang adalah jumlah byte yang tetap ini.

Kualifikasi "dinamis" berarti bahwa fungsi memanipulasi tumpukan secara dinamis: in Selain alokasi statis yang dijelaskan di atas, penyesuaian tumpukan dibuat di badan fungsi, misalnya untuk mendorong/memunculkan argumen di sekitar panggilan fungsi. jika kualifikasi "terbatas" juga ada, jumlah penyesuaian ini dibatasi pada waktu kompilasi dan bidang kedua adalah batas atas dari jumlah total tumpukan yang digunakan oleh fungsi. Jika tidak ada, jumlah penyesuaian ini tidak dibatasi pada waktu kompilasi dan bidang kedua hanya mewakili bagian yang dibatasi.

-fprofile-arc Tambahkan kode agar program mengalir busur diinstrumentasi. Selama eksekusi program mencatat berapa kali setiap cabang dan panggilan dieksekusi dan berapa kali diambil atau pengembalian. Ketika program yang dikompilasi keluar, ia menyimpan data ini ke file bernama auxname.gcda untuk setiap file sumber. Data dapat digunakan untuk profil-diarahkan pengoptimalan (-fbranch-probabilitas), atau untuk analisis cakupan pengujian (-cakupan-ftest). Setiap file objek auxname dihasilkan dari nama file output, jika ditentukan secara eksplisit dan itu bukan final yang dapat dieksekusi, jika tidak, itu adalah nama dasar dari file sumber. Dalam kedua kasus, sufiks apa pun dihilangkan (mis foo.gcda untuk file masukan dir/foo.c, atau dir/foo.gcda untuk file output yang ditentukan sebagai -o dir/foo.o).

--cakupan Opsi ini digunakan untuk mengkompilasi dan menautkan kode yang diinstrumentasikan untuk analisis cakupan. NS pilihan adalah sinonim untuk -fprofile-arc -cakupan-ftest (saat kompilasi) dan -lgcov (saat menghubungkan). Lihat dokumentasi untuk opsi tersebut untuk detail selengkapnya.

* Kompilasi file sumber dengan -fprofile-arc ditambah pengoptimalan dan pembuatan kode pilihan. Untuk analisis cakupan pengujian, gunakan tambahan -cakupan-ftest . Anda tidak perlu membuat profil setiap file sumber dalam suatu program.

* Tautkan file objek Anda dengan -lgcov or -fprofile-arc (yang terakhir menyiratkan mantan).

* Jalankan program pada beban kerja yang representatif untuk menghasilkan profil busur informasi. Ini dapat diulang beberapa kali. Anda dapat menjalankan secara bersamaan contoh program Anda, dan asalkan sistem file mendukung penguncian, file data akan diperbarui dengan benar. Juga panggilan "garpu" terdeteksi dan ditangani dengan benar (penghitungan ganda tidak akan terjadi).

* Untuk pengoptimalan yang diarahkan ke profil, kompilasi kembali file sumber dengan yang sama opsi pengoptimalan dan pembuatan kode plus -fbranch-probabilitas.

* Untuk analisis cakupan tes, gunakan gcov untuk menghasilkan informasi yang dapat dibaca manusia dari itu .gcno serta .gcda file. Mengacu kepada gcov dokumentasi untuk selanjutnya informasi.

Dengan -fprofile-arc, untuk setiap fungsi program Anda, GCC membuat alur program grafik, kemudian menemukan pohon merentang untuk grafik. Hanya busur yang tidak ada di pohon rentang harus diinstrumentasi: kompiler menambahkan kode untuk menghitung jumlah kali busur ini dieksekusi. Ketika busur adalah satu-satunya jalan keluar atau satu-satunya pintu masuk ke blok, kode instrumentasi dapat ditambahkan ke blok; jika tidak, dasar baru blok harus dibuat untuk menampung kode instrumentasi.

-cakupan-ftest Menghasilkan file catatan yang gcov utilitas cakupan kode dapat digunakan untuk menampilkan program cakupan. Setiap file catatan file sumber disebut auxname.gcno. Mengacu kepada -fprofile-arc opsi di atas untuk deskripsi auxname dan petunjuk tentang cara menghasilkan data cakupan pengujian. Data cakupan lebih cocok dengan file sumber jika Anda tidak mengoptimalkan.

-fdbg-cnt-daftar Cetak nama dan batas atas penghitung untuk semua penghitung debug.

-fdbg-cnt=kontra-nilai-daftar Atur batas atas penghitung debug internal. kontra-nilai-daftar dipisahkan dengan koma daftar nama:nilai pasangan yang menetapkan batas atas setiap penghitung debug nama untuk nilai. Semua penghitung debug memiliki batas atas awal "UINT_MAX"; jadi "dbg_cnt" mengembalikan true selalu kecuali batas atas diatur oleh opsi ini. Misalnya dengan -fdbg-cnt=dce:10,tail_call:0, "dbg_cnt(dce)" mengembalikan nilai true hanya untuk 10 pertama doa.

-bisa-bisa-jenis-lulus -fdisable-jenis-lulus=daftar jangkauan Ini adalah serangkaian opsi yang digunakan untuk menonaktifkan/mengaktifkan pengoptimalan secara eksplisit melewati. Opsi ini dimaksudkan untuk digunakan untuk men-debug GCC. Pengguna kompiler harus gunakan opsi reguler untuk mengaktifkan/menonaktifkan pass sebagai gantinya.

-fdisable-ipa-lulus Nonaktifkan kartu IPA lulus. lulus adalah nama pas. Jika lintasan yang sama adalah statis dipanggil dalam kompiler beberapa kali, nama pass harus ditambahkan dengan a nomor urut mulai dari 1.

-fdisable-rtl-lulus -fdisable-rtl-lulus=daftar jangkauan Nonaktifkan kartu RTL lulus. lulus adalah nama pas. Jika lintasan yang sama adalah statis dipanggil dalam kompiler beberapa kali, nama pass harus ditambahkan dengan a nomor urut mulai dari 1. daftar jangkauan adalah daftar yang dipisahkan koma dari rentang fungsi atau nama assembler. Setiap rentang adalah pasangan angka yang dipisahkan oleh usus besar. Rentang ini inklusif di kedua ujungnya. Jika rentangnya sepele, jumlahnya pasangan dapat disederhanakan sebagai nomor tunggal. Jika fungsi memanggil simpul grafik uid berada dalam salah satu rentang yang ditentukan, lulus dinonaktifkan untuk itu fungsi. Itu uid ditampilkan di header fungsi file dump, dan pass nama dapat dibuang dengan menggunakan opsi -fdump-pass.

-fdisable-pohon-lulus -fdisable-pohon-lulus=daftar jangkauan Nonaktifkan pass pohon lulus. Lihat -fdisable-rtl untuk deskripsi opsi argumen.

-bisa-ipa-lulus Aktifkan pass IPA lulus. lulus adalah nama pas. Jika lintasan yang sama adalah statis dipanggil dalam kompiler beberapa kali, nama pass harus ditambahkan dengan a nomor urut mulai dari 1.

-bisa-rtl-lulus -bisa-rtl-lulus=daftar jangkauan Aktifkan pass RTL lulus. Lihat -fdisable-rtl untuk deskripsi argumen opsi dan contoh.

-pohon-pohon-lulus -pohon-pohon-lulus=daftar jangkauan Aktifkan pass pohon lulus. Lihat -fdisable-rtl untuk deskripsi argumen opsi.

Berikut adalah beberapa contoh yang menunjukkan penggunaan opsi ini.

# nonaktifkan ccp1 untuk semua fungsi -fdisable-pohon-ccp1 # nonaktifkan buka gulungan lengkap untuk fungsi yang cgraph node uidnya 1 -fenable-pohon-cunroll=1 # nonaktifkan gcse2 untuk fungsi pada rentang berikut [1,1], # [300,400], dan [400,1000] # nonaktifkan gcse2 untuk fungsi foo dan foo2 -fdisable-rtl-gcse2=foo,foo2 # nonaktifkan inlining awal -fdisable-tree-einline # nonaktifkan inlining ipa -fdisable-ipa-inline # aktifkan pembukaan penuh pohon -fenable-pohon-membuka gulungan

-dhuruf -fdump-rtl-lulus -fdump-rtl-lulus=nama file Mengatakan untuk membuat dump debug selama kompilasi pada waktu yang ditentukan oleh huruf. Ini digunakan untuk men-debug pass kompiler berbasis RTL. Nama file untuk sebagian besar dump dibuat dengan menambahkan nomor pass dan kata ke nama sampah, Dan file dibuat di direktori file output. dalam kasus =nama file pilihan, dump adalah output pada file yang diberikan alih-alih file dump bernomor pass. Catatan bahwa nomor pass dihitung secara statis saat pass didaftarkan ke pass Pengelola. Dengan demikian penomoran tidak terkait dengan urutan dinamis pelaksanaan melewati. Secara khusus, pass yang dipasang oleh plugin dapat memiliki angka lebih dari 200 genap jika dieksekusi cukup awal. nama sampah dihasilkan dari nama file output, jika ditentukan secara eksplisit dan itu bukan yang dapat dieksekusi, jika tidak, itu adalah nama dasar dari file sumber. Sakelar ini mungkin memiliki efek yang berbeda ketika -E digunakan untuk pra-pemrosesan.

Debug dump dapat diaktifkan dengan a -fdump-rtl beralih atau lainnya -d Option huruf. di sini adalah huruf yang mungkin untuk digunakan dalam lulus serta huruf, dan artinya:

-fdump-rtl-alignment Buang setelah penjajaran cabang telah dihitung.

-fdump-rtl-asmcons Buang setelah memperbaiki pernyataan rtl yang memiliki batasan masuk/keluar yang tidak memuaskan.

-fdump-rtl-auto_inc_dec Buang setelah penemuan auto-inc-dec. Pass ini hanya dijalankan pada arsitektur yang memiliki instruksi auto inc atau auto dec.

-fdump-rtl-penghalang Buang setelah membersihkan instruksi penghalang.

-fdump-rtl-bbpart Buang setelah mempartisi blok dasar panas dan dingin.

-fdump-rtl-bbro Buang setelah penataan ulang blok.

-fdump-rtl-btl1 -fdump-rtl-btl2 -fdump-rtl-btl1 serta -fdump-rtl-btl2 aktifkan dumping setelah dua target cabang beban optimasi berlalu.

-fdump-rtl-bypass Buang setelah melompat melewati dan optimasi aliran kontrol.

-fdump-rtl-gabungkan Buang setelah kombinasi instruksi RTL lulus.

-fdump-rtl-compgotos Buang setelah menduplikasi gotos yang dihitung.

-fdump-rtl-ce1 -fdump-rtl-ce2 -fdump-rtl-ce3 -fdump-rtl-ce1, -fdump-rtl-ce2, dan -fdump-rtl-ce3 aktifkan dumping setelah tiga jika konversi lolos.

-fdump-rtl-cprop_hardreg Buang setelah propagasi salinan hard register.

-fdump-rtl-csa Buang setelah menggabungkan penyesuaian tumpukan.

-fdump-rtl-cse1 -fdump-rtl-cse2 -fdump-rtl-cse1 serta -fdump-rtl-cse2 aktifkan dumping setelah dua yang umum eliminasi subekspresi berlalu.

-fdump-rtl-dce Buang setelah penghapusan kode mati mandiri berlalu.

-fdump-rtl-dbr Buang setelah penjadwalan cabang tertunda.

-fdump-rtl-dce1 -fdump-rtl-dce2 -fdump-rtl-dce1 serta -fdump-rtl-dce2 aktifkan dumping setelah dua toko mati lolos eliminasi.

-fdump-rtl-eh Buang setelah finalisasi kode penanganan EH.

-fdump-rtl-eh_ranges Buang setelah konversi wilayah jangkauan penanganan EH.

-fdump-rtl-perluas Buang setelah generasi RTL.

-fdump-rtl-fwprop1 -fdump-rtl-fwprop2 -fdump-rtl-fwprop1 serta -fdump-rtl-fwprop2 aktifkan dumping setelah keduanya maju propagasi berlalu.

-fdump-rtl-gcse1 -fdump-rtl-gcse2 -fdump-rtl-gcse1 serta -fdump-rtl-gcse2 aktifkan dumping setelah kesamaan global eliminasi subekspresi.

-fdump-rtl-init-regs Dump setelah inisialisasi register.

-fdump-rtl-initval Buang setelah perhitungan set nilai awal.

-fdump-rtl-into_cfglayout Buang setelah mengonversi ke mode cfglayout.

-fdump-rtl-ira Buang setelah alokasi register berulang.

-fdump-rtl-lompat Buang setelah optimasi lompatan kedua.

-fdump-rtl-loop2 -fdump-rtl-loop2 memungkinkan dumping setelah optimasi loop rtl berlalu.

-fdump-rtl-mach Buang setelah melakukan pass reorganisasi yang bergantung pada mesin, jika itu berhasil ada

-fdump-rtl-mode_sw Buang setelah melepas sakelar mode redundan.

-fdump-rtl-rnreg Buang setelah mendaftar ulang penomoran.

-fdump-rtl-outof_cfglayout Buang setelah mengonversi dari mode cfglayout.

-fdump-rtl-lubang intip2 Buang setelah lubang intip lewat.

-fdump-rtl-postreload Buang setelah optimasi pasca-muat ulang.

-fdump-rtl-pro_and_epilog Buang setelah menghasilkan fungsi prolog dan epilog.

-fdump-rtl-sched1 -fdump-rtl-sched2 -fdump-rtl-sched1 serta -fdump-rtl-sched2 aktifkan dumping setelah blok dasar penjadwalan berlalu.

-fdump-rtl-ree Buang setelah eliminasi ekstensi tanda/nol.

-fdump-rtl-seqabstr Buang setelah penemuan urutan umum.

-fdump-rtl-singkat Buang setelah memperpendek cabang.

-fdump-rtl-saudara Buang setelah optimasi panggilan saudara.

-fdump-rtl-split1 -fdump-rtl-split2 -fdump-rtl-split3 -fdump-rtl-split4 -fdump-rtl-split5 Opsi ini memungkinkan dumping setelah lima putaran pemisahan instruksi.

-fdump-rtl-sms Buang setelah penjadwalan modulo. Pass ini hanya berjalan pada beberapa arsitektur.

-fdump-rtl-tumpukan Buang setelah konversi dari register "flat register file" GCC ke x87 register seperti tumpukan. Pass ini hanya berjalan pada varian x86.

-fdump-rtl-subreg1 -fdump-rtl-subreg2 -fdump-rtl-subreg1 serta -fdump-rtl-subreg2 aktifkan dumping setelah dua subreg ekspansi lewat.

-fdump-rtl-unshare Buang setelah semua rtl tidak dibagikan.

-fdump-rtl-vartrack Buang setelah pelacakan variabel.

-fdump-rtl-vregs Buang setelah mengonversi register virtual ke register keras.

-fdump-rtl-web Buang setelah pemisahan rentang hidup.

-fdump-rtl-regclass -fdump-rtl-subregs_of_mode_init -fdump-rtl-subregs_of_mode_finish -fdump-rtl-dfinit -fdump-rtl-dfinish Dump ini ditentukan tetapi selalu menghasilkan file kosong.

-in -fdump-rtl-semua Menghasilkan semua dump yang tercantum di atas.

-dA Anotasi keluaran assembler dengan informasi debug lain-lain.

-DD Buang semua definisi makro, di akhir prapemrosesan, selain normal output.

-dH Menghasilkan dump inti setiap kali terjadi kesalahan.

-dp Beri anotasi pada keluaran assembler dengan komentar yang menunjukkan pola dan alternatif digunakan. Panjang setiap instruksi juga dicetak.

-dP Buang RTL di keluaran assembler sebagai komentar sebelum setiap instruksi. Juga menyalakan -dp anotasi.

-dx Buat saja RTL untuk suatu fungsi alih-alih mengompilasinya. Biasanya digunakan dengan -fdump-rtl-perluas.

-fdump-noaddr Saat melakukan dump debug, tekan keluaran alamat. Ini membuatnya lebih layak untuk gunakan diff pada dump debug untuk permintaan kompiler dengan binari kompiler yang berbeda dan/atau lokasi awal teks / bss / data / heap / stack / dso yang berbeda.

-report-bug Kumpulkan dan buang informasi debug ke file sementara jika ICE dalam kompiler C/C++ terjadi.

-fdump-tidak bernomor Saat melakukan debugging dump, tekan nomor instruksi dan keluaran alamat. Ini membuatnya lebih layak untuk menggunakan diff pada dump debug untuk pemanggilan kompiler dengan pilihan yang berbeda, khususnya dengan dan tanpa -g.

-fdump-unnumbered-links Saat melakukan debugging dump (lihat -d opsi di atas), tekan nomor instruksi untuk link ke instruksi sebelumnya dan berikutnya secara berurutan.

-fdump-translasi-unit (C++ saja) -fdump-translasi-unit-Pilihan (C++ saja) Buang representasi struktur pohon untuk seluruh unit terjemahan ke file. Nama file dibuat dengan menambahkan .tu ke nama file sumber, dan file tersebut adalah dibuat di direktori yang sama dengan file output. jika -Pilihan bentuk digunakan, Pilihan mengontrol detail dump seperti yang dijelaskan untuk -fdump-pohon Pilihan.

-fdump-kelas-hierarki (C++ saja) -fdump-kelas-hierarki-Pilihan (C++ saja) Buang representasi hierarki setiap kelas dan tata letak tabel fungsi virtual ke a mengajukan. Nama file dibuat dengan menambahkan .kelas ke nama file sumber, dan file dibuat di direktori yang sama dengan file output. jika -Pilihan bentuk digunakan, Pilihan mengontrol detail dump seperti yang dijelaskan untuk -fdump-pohon Pilihan.

-fdump-ipa-saklar Kontrol dumping pada berbagai tahap pohon bahasa analisis antar-prosedural untuk a mengajukan. Nama file dihasilkan dengan menambahkan sufiks khusus sakelar ke sumbernya nama file, dan file tersebut dibuat di direktori yang sama dengan file output. NS pembuangan berikut dimungkinkan:

semua Mengaktifkan semua dump analisis antar-prosedural.

cgrafik Membuang informasi tentang pengoptimalan grafik panggilan, penghapusan fungsi yang tidak digunakan, dan keputusan inlining.

inline Buang setelah fungsi inlining.

-fdump-pass Buang daftar pass pengoptimalan yang dihidupkan dan dimatikan oleh arus opsi baris perintah.

-fdump-statistik-Option Mengaktifkan dan mengontrol dumping statistik pass dalam file terpisah. Nama filenya adalah dihasilkan dengan menambahkan akhiran akhiran .statistik ke nama file sumber, dan file dibuat di direktori yang sama dengan file output. jika -Option bentuk adalah bekas, -stat menyebabkan penghitung dijumlahkan ke seluruh unit kompilasi sementara -detail membuang setiap peristiwa saat lintasan menghasilkannya. Default tanpa opsi adalah untuk menjumlahkan penghitung untuk setiap fungsi yang dikompilasi.

-fdump-pohon-saklar -fdump-pohon-saklar-Pilihan -fdump-pohon-saklar-Pilihan=nama file Kontrol dumping pada berbagai tahap pemrosesan pohon bahasa perantara untuk file. Nama file dihasilkan dengan menambahkan sufiks khusus sakelar ke nama file sumber, dan file tersebut dibuat di direktori yang sama dengan file output. Di dalam kasus =nama file opsi, dump adalah output pada file yang diberikan alih-alih otomatis bernama file dump. jika -Pilihan bentuk digunakan, Pilihan adalah daftar dari - dipisahkan opsi yang mengontrol detail dump. Tidak semua opsi berlaku untuk semua kesedihan; yang tidak berarti diabaikan. Opsi berikut tersedia:

alamat Cetak alamat setiap node. Biasanya ini tidak berarti karena berubah sesuai dengan lingkungan dan file sumber. Penggunaan utamanya adalah untuk mengikat dump file dengan lingkungan debug.

nama panggilan Jika "DECL_ASSEMBLER_NAME" telah disetel untuk decl tertentu, gunakan itu di dump bukannya "DECL_NAME". Penggunaan utamanya adalah kemudahan penggunaan bekerja mundur dari nama yang hancur dalam file Majelis.

ramping Saat membuang representasi perantara front-end, hambat pembuangan anggota ruang lingkup atau badan fungsi hanya karena ruang lingkup itu telah tercapai. Hanya membuang barang-barang tersebut ketika mereka dapat dijangkau secara langsung oleh beberapa jalur lain.

Saat membuang pohon yang dicetak cantik, opsi ini mencegah pembuangan mayat struktur kontrol.

Saat membuang RTL, cetak RTL dalam bentuk ramping (padat) alih-alih default Representasi seperti LISP.

mentah Cetak representasi mentah dari pohon. Secara default, pohon cukup dicetak menjadi representasi seperti C.

rincian Aktifkan dump yang lebih mendetail (tidak dihormati oleh setiap opsi dump). Juga termasuk informasi dari optimasi lolos.

statistik Aktifkan dumping berbagai statistik tentang pass (tidak dihormati oleh setiap dump pilihan).

blok Aktifkan menampilkan batas blok dasar (dinonaktifkan di dump mentah).

grafik Untuk masing-masing file dump lain yang ditunjukkan (-fdump-rtl-lulus), buang a representasi grafik aliran kontrol yang cocok untuk dilihat dengan GraphViz untuk file.passid.pass.dot. Setiap fungsi dalam file dicetak cantik sebagai subgraf, sehingga GraphViz dapat merender semuanya dalam satu plot.

Opsi ini saat ini hanya berfungsi untuk dump RTL, dan RTL selalu dibuang di bentuk ramping.

suara Aktifkan menampilkan operan virtual untuk setiap pernyataan.

lineno Aktifkan menampilkan nomor baris untuk pernyataan.

uid Aktifkan menampilkan ID unik ("DECL_UID") untuk setiap variabel.

bertele-tele Aktifkan menampilkan dump pohon untuk setiap pernyataan.

eh Aktifkan menampilkan nomor wilayah EH yang menyimpan setiap pernyataan.

scv Aktifkan menampilkan detail analisis evolusi skalar.

dioptimalkan Aktifkan menampilkan informasi pengoptimalan (hanya tersedia di lintasan tertentu).

terjawab Aktifkan menampilkan informasi pengoptimalan yang terlewat (hanya tersedia pada lintasan tertentu).

mencatat Aktifkan informasi pengoptimalan terperinci lainnya (hanya tersedia di lintasan tertentu).

=nama file Alih-alih file dump bernama otomatis, output ke nama file yang diberikan. Berkas nama stdout serta stderr diperlakukan secara khusus dan dianggap sudah terbuka aliran standar. Sebagai contoh,

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

keluaran vectorizer dump ke foo.dump, sedangkan dump PRE di-output ke stderr. Jika dua nama file dump yang bertentangan diberikan untuk pass yang sama, maka yang terakhir opsi menimpa yang sebelumnya.

semua Aktifkan semua opsi, kecuali mentah, ramping, bertele-tele serta lineno.

optall Aktifkan semua opsi pengoptimalan, yaitu, dioptimalkan, terjawab, dan mencatat.

Pembuangan pohon berikut dimungkinkan:

asli Buang sebelum pengoptimalan berbasis pohon apa pun, untuk file.asli.

dioptimalkan Buang setelah semua optimasi berbasis pohon, untuk file.dioptimalkan.

gimbal Buang setiap fungsi sebelum dan sesudah gimplifikasi diteruskan ke file. Berkas nama dibuat dengan menambahkan .gimple ke nama file sumber.

cfg Buang grafik aliran kontrol dari setiap fungsi ke file. Nama file dibuat oleh menambahkan .cfg ke nama file sumber.

ch Buang setiap fungsi setelah menyalin header loop. Nama file dibuat dengan menambahkan ch ke nama file sumber.

ssa Buang informasi terkait SSA ke file. Nama file dibuat dengan menambahkan .ssa ke nama file sumber.

alias Buang informasi aliasing untuk setiap fungsi. Nama file dibuat dengan menambahkan .alias ke nama file sumber.

ccp Buang setiap fungsi setelah CCP. Nama file dibuat dengan menambahkan .ccp ke nama file sumber.

tokoccp Buang setiap fungsi setelah STORE-CCP. Nama file dibuat dengan menambahkan .storeccp ke nama file sumber.

pra Buang pohon setelah penghapusan redundansi parsial. Nama file dibuat oleh menambahkan .pra ke nama file sumber.

fre Buang pohon setelah penghapusan redundansi penuh. Nama file dibuat dengan menambahkan .free ke nama file sumber.

salinan Buang pohon setelah perbanyakan salinan. Nama file dibuat dengan menambahkan .copyprop ke nama file sumber.

toko_copyprop Buang pohon setelah perbanyakan salinan toko. Nama file dibuat dengan menambahkan .store_copyprop ke nama file sumber.

dadu Buang setiap fungsi setelah penghapusan kode mati. Nama file dibuat oleh menambahkan .dce ke nama file sumber.

MS Buang setiap fungsi setelah melakukan penggantian skalar agregat. Berkas nama dibuat dengan menambahkan .sra ke nama file sumber.

wastafel Buang setiap fungsi setelah melakukan penenggelaman kode. Nama file dibuat oleh menambahkan .tenggelam ke nama file sumber.

hadiah Buang setiap fungsi setelah menerapkan optimasi pohon dominator. Nama filenya adalah dibuat dengan menambahkan .dom ke nama file sumber.

dse Buang setiap fungsi setelah menerapkan penghapusan toko mati. Nama file dibuat dengan menambahkan .dse ke nama file sumber.

phiopt Buang setiap fungsi setelah mengoptimalkan node PHI menjadi kode garis lurus. Berkas nama dibuat dengan menambahkan .phiopt ke nama file sumber.

forwprop Buang setiap fungsi setelah meneruskan variabel sekali pakai. Nama file dibuat dengan menambahkan .forwprop ke nama file sumber.

namakopi Buang setiap fungsi setelah menerapkan pengoptimalan penggantian nama salinan. Nama filenya adalah dibuat dengan menambahkan .copyrename ke nama file sumber.

nrv Buang setiap fungsi setelah menerapkan optimasi nilai pengembalian bernama pada generik pohon. Nama file dibuat dengan menambahkan .nrv ke nama file sumber.

vektor Buang setiap fungsi setelah menerapkan vektorisasi loop. Nama file dibuat dengan menambahkan .vet ke nama file sumber.

GFA Buang setiap fungsi setelah menerapkan vektorisasi blok dasar. Nama filenya adalah dibuat dengan menambahkan .slp ke nama file sumber.

VRP Buang setiap fungsi setelah Value Range Propagation (VRP). Nama file dibuat oleh menambahkan .vrp ke nama file sumber.

semua Aktifkan semua dump pohon yang tersedia dengan tanda yang disediakan dalam opsi ini.

-fopt-info -fopt-info-Pilihan -fopt-info-Pilihan=nama file Mengontrol dump pengoptimalan dari berbagai lintasan pengoptimalan. jika -Pilihan bentuk adalah bekas, Pilihan adalah daftar dari - kata kunci opsi terpisah untuk memilih detail dump dan optimasi.

The Pilihan dapat dibagi menjadi dua kelompok: opsi yang menggambarkan verbositas dari dump, dan opsi yang menjelaskan pengoptimalan mana yang harus disertakan. Pilihan dari kedua kelompok dapat dicampur secara bebas karena tidak tumpang tindih. Namun, dalam kasus konflik apa pun, opsi selanjutnya menimpa opsi sebelumnya pada baris perintah.

Opsi berikut mengontrol verbositas dump:

dioptimalkan Cetak informasi saat pengoptimalan berhasil diterapkan. Terserah lulus untuk memutuskan informasi mana yang relevan. Misalnya, vectorizer melewati print lokasi sumber loop yang berhasil di-vektorkan.

terjawab Cetak informasi tentang pengoptimalan yang terlewat. Kontrol operan individu yang informasi untuk dimasukkan ke dalam output.

mencatat Mencetak informasi verbose tentang pengoptimalan, seperti transformasi tertentu, pesan yang lebih rinci tentang keputusan, dll.

semua Cetak informasi pengoptimalan terperinci. Ini termasuk dioptimalkan, terjawab, dan mencatat.

Satu atau lebih dari kata kunci pilihan berikut dapat digunakan untuk menggambarkan sekelompok: pengoptimalan:

ipa Aktifkan dump dari semua optimasi antarprosedural.

lingkaran Aktifkan dump dari semua optimasi loop.

inline Aktifkan dump dari semua pengoptimalan inlining.

ay Aktifkan dump dari semua pengoptimalan vektorisasi.

optall Aktifkan dump dari semua pengoptimalan. Ini adalah superset dari grup pengoptimalan tercantum di atas.

If Pilihan dihilangkan, defaultnya adalah dioptimalkan-optall, yang berarti membuang semua info tentang pengoptimalan yang berhasil dari semua lintasan.

Jika nama file disediakan, maka dump dari semua optimasi yang berlaku adalah digabungkan menjadi nama file. Kalau tidak, dump adalah output ke stderr. Meskipun beberapa -fopt-info opsi diterima, hanya satu dari mereka yang dapat menyertakan a nama file. Jika nama file lain disediakan maka semua kecuali opsi pertama diabaikan.

Perhatikan bahwa keluaran nama file ditimpa dalam kasus beberapa unit terjemahan. Jika output gabungan dari beberapa unit terjemahan diinginkan, stderr seharusnya digunakan sebagai gantinya.

Dalam contoh berikut, info pengoptimalan ditampilkan ke stderr:

gcc -O3 -fopt-info

Contoh ini:

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

mengeluarkan laporan pengoptimalan yang tidak terjawab dari semua lintasan ke miss.all, dan yang satu ini:

gcc -O2 -ftree-vectorize -fopt-info-vec-missed

mencetak informasi tentang peluang pengoptimalan yang terlewat dari kartu vektorisasi on stderr. Catat itu -fopt-info-vec-kehilangan adalah setara dengan -fopt-info-miss-vec.

Sebagai contoh lain,

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

mengeluarkan informasi tentang pengoptimalan yang terlewat serta lokasi yang dioptimalkan dari semua inlining masuk ke inline.txt.

Akhirnya, pertimbangkan:

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

Di sini dua nama file keluaran vec.miss serta loop.opt berada dalam konflik karena hanya satu file keluaran diperbolehkan. Dalam hal ini, hanya opsi pertama yang berlaku dan pilihan selanjutnya diabaikan. Jadi hanya vec.miss diproduksi yang mengandung dumps dari vectorizer tentang peluang yang terlewatkan.

-Frandom-seed=jumlah Opsi ini menyediakan benih yang digunakan GCC sebagai pengganti angka acak dalam menghasilkan nama simbol tertentu yang harus berbeda di setiap file yang dikompilasi. Itu juga digunakan untuk menempatkan perangko unik dalam file data cakupan dan file objek yang menghasilkan mereka. Anda dapat menggunakan -Frandom-biji pilihan untuk menghasilkan objek identik yang dapat direproduksi file.

The jumlah harus berbeda untuk setiap file yang Anda kompilasi.

-fsched-verbose=n Pada target yang menggunakan penjadwalan instruksi, opsi ini mengontrol jumlah men-debug output yang dicetak oleh penjadwal. Informasi ini ditulis dengan kesalahan standar, kecuali kalau -fdump-rtl-sched1 or -fdump-rtl-sched2 ditentukan, dalam hal ini adalah output ke file daftar dump biasa, .sched1 or .sched2 masing-masing. Namun untuk n lebih besar dari sembilan, output selalu dicetak ke kesalahan standar.

Untuk n lebih besar dari nol, -fsched-verbose menghasilkan informasi yang sama dengan -fdump-rtl-sched1 serta -fdump-rtl-sched2. Forum n lebih besar dari satu, itu juga menghasilkan dasar blokir probabilitas, informasi daftar siap terperinci dan info unit/insn. Untuk n lebih besar dari dua, itu termasuk RTL pada titik batal, aliran kontrol dan info wilayah. Dan untuk n lebih dari empat, -fsched-verbose juga termasuk info ketergantungan.

-hemat-temps -simpan-temps=cwd Simpan file perantara "sementara" yang biasa secara permanen; tempatkan mereka di arus direktori dan beri nama berdasarkan file sumber. Jadi, kompilasi foo.c dengan -c -hemat-temps menghasilkan file foo.i serta foo.s, sebaik foo.o. Ini menciptakan a diproses sebelumnya foo.i file output meskipun kompiler sekarang biasanya menggunakan praprosesor terintegrasi.

Ketika digunakan dalam kombinasi dengan -x opsi baris perintah, -hemat-temps masuk akal cukup untuk menghindari penulisan file sumber input dengan ekstensi yang sama seperti berkas perantara. File perantara yang sesuai dapat diperoleh dengan mengganti nama file sumber sebelum menggunakan -hemat-temps.

Jika Anda memanggil GCC secara paralel, kompilasi beberapa file sumber berbeda yang berbagi nama dasar umum di subdirektori yang berbeda atau file sumber yang sama dikompilasi untuk beberapa tujuan keluaran, kemungkinan kompiler paralel yang berbeda akan mengganggu satu sama lain, dan menimpa file-file sementara. Contohnya:

gcc -save-temps -o outdir1/foo.o indir1/foo.c& gcc -save-temps -o outdir2/foo.o indir2/foo.c&

dapat menghasilkan foo.i serta foo.o sedang ditulis secara bersamaan oleh kedua kompiler.

-save-temps=obj Simpan file perantara "sementara" yang biasa secara permanen. jika -o pilihan yang digunakan, file-file sementara didasarkan pada file objek. jika -o opsi tidak digunakan, -save-temps=obj saklar berperilaku seperti -hemat-temps.

Sebagai contoh:

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

menciptakan foo.i, foo.s, dir/xbar.i, dir/xbar.s, dir2/yfoobar.i, dir2/yfoobar.s, dan dir2/yfoobar.o.

-waktu[=fillet] Laporkan waktu CPU yang diambil oleh setiap subproses dalam urutan kompilasi. Untuk C file sumber, ini adalah kompiler dan assembler yang tepat (ditambah tautan jika penautan adalah selesai).

Tanpa spesifikasi file output, outputnya akan terlihat seperti ini:

#cc1 0.12 0.01 # sebagai 0.00 0.01

Angka pertama pada setiap baris adalah "waktu pengguna", yaitu waktu yang dihabiskan untuk mengeksekusi program itu sendiri. Angka kedua adalah "waktu sistem", waktu yang dihabiskan untuk menjalankan operasi rutinitas sistem atas nama program. Kedua angka dalam hitungan detik.

Dengan spesifikasi file output, output ditambahkan ke file bernama, dan terlihat seperti ini:

0.12 0.01 cc1 0.00 0.01 sebagai

"Waktu pengguna" dan "waktu sistem" dipindahkan sebelum nama program, dan opsi yang diteruskan ke program akan ditampilkan, sehingga nanti seseorang dapat mengetahui file apa itu sedang dikompilasi, dan dengan opsi mana.

-fvar-pelacakan Jalankan pass pelacakan variabel. Ini menghitung di mana variabel disimpan di setiap posisi dalam kode. Informasi debugging yang lebih baik kemudian dihasilkan (jika informasi debugging format mendukung informasi ini).

Ini diaktifkan secara default saat kompilasi dengan pengoptimalan (-Os, -O, -O2, ...), informasi debug (-g) dan format info debug mendukungnya.

-fvar-pelacakan-tugas Beri anotasi penugasan ke variabel pengguna di awal kompilasi dan coba bawa anotasi di seluruh kompilasi sampai akhir, dalam upaya untuk meningkatkan informasi debug sambil mengoptimalkan. Penggunaan -gdwarf-4 direkomendasikan bersama dengan itu.

Ini dapat diaktifkan bahkan jika pelacakan var dinonaktifkan, dalam hal ini anotasi adalah dibuat dan dipelihara, tetapi dibuang pada akhirnya. Secara default, bendera ini diaktifkan Bersama -fvar-pelacakan, kecuali jika penjadwalan selektif diaktifkan.

-fvar-tracking-assignments-toggle Beralih -fvar-pelacakan-tugas, dengan cara yang sama itu -gtoggle toggles -g.

-cetak-nama-berkas=perpustakaan Cetak nama absolut lengkap dari file perpustakaan perpustakaan yang akan digunakan ketika menghubungkan --- dan tidak melakukan hal lain. Dengan opsi ini, GCC tidak mengkompilasi atau menautkan apa pun; itu hanya mencetak nama file.

-cetak-multi-direktori Cetak nama direktori yang sesuai dengan multilib yang dipilih oleh sakelar lain hadir di baris perintah. Direktori ini seharusnya ada di GCC_EXEC_PREFIX.

-cetak-multi-lib Cetak pemetaan dari nama direktori multilib ke sakelar kompiler yang mengaktifkannya. Nama direktori dipisahkan dari switch oleh ;, dan setiap sakelar dimulai dengan @ bukannya -, tanpa spasi di antara beberapa sakelar. Ini seharusnya memudahkan pemrosesan cangkang.

-cetak-multi-os-direktori Cetak jalur ke perpustakaan OS untuk multilib yang dipilih, relatif terhadap beberapa lib subdirektori. Jika pustaka OS ada di lib subdirektori dan tidak ada multilib digunakan, ini biasanya hanya ., jika pustaka OS ada di libsuffix saudara kandung direktori yang dicetak ini misalnya ../lib64, ../ lib or ../lib32, atau jika perpustakaan OS adalah hadir dalam lib/subdir subdirektori yang dicetaknya misalnya amd64, sparcv9 or ev6.

-cetak-multiarch Cetak jalur ke perpustakaan OS untuk multiarch yang dipilih, relatif terhadap beberapa lib subdirektori.

-cetak-nama-prog=program Seperti -cetak-nama-file, tetapi mencari program seperti cpp.

-print-libgcc-nama-file Sama dengan -print-file-name=libgcc.a.

Ini berguna saat Anda menggunakan -nostdlib or -nodefaultlibs tetapi Anda ingin terhubung dengan libgcc.a. Anda dapat melakukan:

gcc -nostdlib ... `gcc -print-libgcc-file-name`

-print-search-dirs Cetak nama direktori instalasi yang dikonfigurasi dan daftar program dan direktori perpustakaan gcc pencarian --- dan tidak melakukan apa-apa lagi.

Ini berguna ketika gcc mencetak pesan kesalahan instalasi masalah, tidak bisa eksekutif cpp0: Tidak seperti itu fillet or direktori. Untuk mengatasi ini, Anda juga perlu meletakkan cpp0 dan komponen kompiler lain di mana gcc berharap untuk menemukannya, atau Anda dapat mengatur variabel lingkungan GCC_EXEC_PREFIX ke direktori tempat Anda menginstalnya. jangan lupakan jejaknya /.

-print-sysroot Cetak direktori sysroot target yang digunakan selama kompilasi. Ini adalah sysroot target yang ditentukan baik pada waktu konfigurasi atau menggunakan --sysroot pilihan, mungkin dengan sufiks tambahan yang bergantung pada opsi kompilasi. Jika tidak ada sasaran sysroot ditentukan, opsi tidak mencetak apa pun.

-print-sysroot-header-suffix Cetak akhiran yang ditambahkan ke sysroot target saat mencari header, atau berikan kesalahan jika kompiler tidak dikonfigurasi dengan akhiran seperti itu --- dan tidak melakukan apa-apa lain.

-mesin sampah Cetak mesin target kompiler (misalnya, i686-pc-linux-gnu) --- dan jangan lakukan ada yang lain.

-dumpversion Cetak versi kompiler (misalnya, 3.0) --- dan jangan lakukan hal lain.

-dumpspec Cetak spesifikasi bawaan kompiler --- dan jangan lakukan hal lain. (Ini digunakan ketika GCC sendiri sedang dibangun.)

-fno-eliminasi-unused-debug-types Biasanya, saat menghasilkan output DWARF 2, GCC menghindari menghasilkan output simbol debug untuk jenis yang tidak digunakan di mana pun dalam file sumber yang sedang dikompilasi. Kadang berguna agar GCC memancarkan informasi debug untuk semua jenis yang dideklarasikan dalam unit kompilasi, terlepas dari apakah mereka benar-benar digunakan dalam unit kompilasi itu, untuk contoh jika, di debugger, Anda ingin memberikan nilai ke tipe yang sebenarnya bukan digunakan dalam program Anda (tetapi dideklarasikan). Lebih sering, bagaimanapun, ini menghasilkan sejumlah besar ruang yang terbuang.

Opsi Bahwa kontrol Optimasi Opsi ini mengontrol berbagai jenis pengoptimalan.

Tanpa opsi pengoptimalan apa pun, tujuan kompiler adalah mengurangi biaya kompilasi dan untuk membuat debugging menghasilkan hasil yang diharapkan. Pernyataan independen: jika Anda hentikan program dengan breakpoint di antara pernyataan, Anda kemudian dapat menetapkan nilai baru ke variabel apa pun atau ubah penghitung program ke pernyataan lain dalam fungsi dan dapatkan persis hasil yang Anda harapkan dari kode sumber.

Mengaktifkan tanda pengoptimalan membuat kompiler berupaya meningkatkan kinerja dan/atau ukuran kode dengan mengorbankan waktu kompilasi dan mungkin kemampuan untuk men-debug kode program.

Kompiler melakukan optimasi berdasarkan pengetahuan yang dimilikinya tentang program. Mengkompilasi banyak file sekaligus ke mode file output tunggal memungkinkan kompiler untuk menggunakan informasi yang diperoleh dari semua file saat kompilasi masing-masing.

Tidak semua pengoptimalan dikontrol langsung oleh flag. Hanya pengoptimalan yang memiliki bendera tercantum di bagian ini.

Sebagian besar pengoptimalan hanya diaktifkan jika ada -O level diatur pada baris perintah. Sebaliknya mereka dinonaktifkan, bahkan jika tanda pengoptimalan individual ditentukan.

Bergantung pada target dan bagaimana GCC dikonfigurasi, serangkaian pengoptimalan dapat diaktifkan di setiap -O tingkat dari yang tercantum di sini. Anda dapat memanggil GCC dengan -Q --help=pengoptimal untuk mengetahui rangkaian pengoptimalan yang tepat yang diaktifkan di setiap tingkat.

-O -O1 Optimalkan. Mengoptimalkan kompilasi membutuhkan lebih banyak waktu, dan lebih banyak memori untuk fungsi yang besar.

Dengan -O, kompiler mencoba mengurangi ukuran kode dan waktu eksekusi, tanpa melakukan pengoptimalan apa pun yang membutuhkan banyak waktu kompilasi.

-O menyalakan tanda pengoptimalan berikut:

-fauto-inc-dec -fbranch-count-reg -fcombine-stack-adjustments -fbandingkan-elimin -fcprop-register -fdce -fdefer-pop -fdelayed-cabang -fdse -maju-propagasi -fguess-cabang-probabilitas -fif-konversi2 -fif-konversi -finline-fungsi-dipanggil-sekali -fipa-murni-const -fipa-profil -fipa-referensi -fmerge-konstanta -fmove-loop-invarian -fshrink-wrap -fsplit-wide-types -free-bit-ccp -ftree-ccp -fssa-phiopt -ftree-ch -free-copy-prop -ftree-copyrename -ftree-dce -ftree-dominator-memilih -ftree-dse -ftree-forwprop -bebas pohon -ftree-phiprop -ftree-sink -ftree-slsr -ftree-sra -ftree-pta -ftree-ter -menyenangkan-pada-waktu

-O juga menyala -fomit-frame-pointer pada mesin di mana hal itu tidak mengganggu dengan debugging.

-O2 Optimalkan lebih banyak lagi. GCC melakukan hampir semua pengoptimalan yang didukung yang tidak melibatkan pertukaran kecepatan ruang. Jika dibandingkan dengan -O, opsi ini meningkatkan keduanya waktu kompilasi dan kinerja kode yang dihasilkan.

-O2 menyalakan semua tanda pengoptimalan yang ditentukan oleh -O. Ini juga menyalakan yang berikut: tanda pengoptimalan: -fthread-melompat -falign-fungsi -falign-melompat -falign-loop -falign-label -fcaller-save -lompat silang -fcse-ikuti-melompat -fcse-lewati-blok -fdelete-null-pointer-cek -fdevirtualisasi -fdevirtualisasi-spekulatif -optimasi-mahal -fgcse -fgcse-lm -fhoist-berdekatan-beban -finline-kecil-fungsi -finddirect-inlining -fipa-cp -fipa-cp-alignment -fipa-sra -fipa-icf -fisolate-salah-jalur-dereferensi -flra-remat -foptimize-saudara-panggilan -foptimalkan-strlen -fpartial-inlining -fpeehole2 -freorder-blok -freorder-blok-dan-partisi -freorder-fungsi -frerun-cse-setelah-loop -fsched-interblock -fsched-spec -fschedule-insns -fschedule-insns2 -fstrict-aliasing -fstrict-overflow -ftree-built-in-call-dce -ftree-switch-konversi -ftree-tail-merge -ftree-pra -ftree-vrp -fipa-ra

Harap perhatikan peringatan di bawah -fgcse tentang memohon -O2 pada program yang menggunakan komputasi goto.

CATATAN: Di Ubuntu 8.10 dan versi yang lebih baru, -D_FORTIFY_SUMBER=2 diatur secara default, dan adalah diaktifkan ketika -O diatur ke 2 atau lebih tinggi. Ini memungkinkan waktu kompilasi tambahan dan pemeriksaan run-time untuk beberapa fungsi libc. Untuk menonaktifkan, tentukan salah satu dari -U_FORTIFY_SOURCE or -D_FORTIFY_SUMBER=0.

-O3 Optimalkan lagi. -O3 mengaktifkan semua pengoptimalan yang ditentukan oleh -O2 dan juga menyala itu -finline-fungsi, -funswitch-loop, -predictive-commoning, -fgcse-setelah-reload, -ftree-loop-vektorisasi, -ftree-loop-distribusi-pola, -ftree-slp-vectorize, -fvect-biaya-model, -ftree-partial-pra serta -fipa-cp-klon Pilihan.

-O0 Kurangi waktu kompilasi dan buat debugging menghasilkan hasil yang diharapkan. Ini adalah standar.

-Os Optimalkan untuk ukuran. -Os memungkinkan semua -O2 pengoptimalan yang biasanya tidak meningkat ukuran kode. Itu juga melakukan optimasi lebih lanjut yang dirancang untuk mengurangi ukuran kode.

-Os menonaktifkan tanda pengoptimalan berikut: -falign-fungsi -falign-melompat -falign-loop -falign-label -freorder-blok -freorder-blok-dan-partisi -fprefetch-loop-array

-cepat Abaikan kepatuhan standar yang ketat. -cepat memungkinkan semua -O3 optimasi. Juga memungkinkan pengoptimalan yang tidak valid untuk semua program yang sesuai standar. Dia menyalakan -cepat-matematika dan khusus Fortran -fno-protect-parens serta -fstack-array.

-Og Optimalkan pengalaman debug. -Og memungkinkan pengoptimalan yang tidak mengganggu debug. Ini harus menjadi tingkat optimasi pilihan untuk standar edit- siklus kompilasi-debug, menawarkan tingkat pengoptimalan yang wajar sambil mempertahankan kompilasi cepat dan pengalaman debugging yang baik.

Jika Anda menggunakan beberapa -O opsi, dengan atau tanpa nomor level, opsi terakhir adalah yang efektif.

Pilihan formulir -fbendera tentukan flag yang tidak bergantung pada mesin. Sebagian besar bendera memiliki keduanya bentuk positif dan negatif; bentuk negatif dari -ffo is -fno-foo. Pada tabel di bawah ini, hanya satu formulir yang terdaftar --- yang biasanya Anda gunakan. Anda bisa mencari tahu yang lain bentuk dengan menghapus tidak- atau menambahkannya.

Opsi berikut mengontrol pengoptimalan tertentu. Mereka diaktifkan oleh -O pilihan atau terkait dengan yang ada. Anda dapat menggunakan bendera berikut di langka kasus ketika "penyetelan halus" pengoptimalan yang akan dilakukan diinginkan.

-fno-defer-pop Selalu masukkan argumen ke setiap panggilan fungsi segera setelah fungsi itu kembali. Untuk mesin yang harus memunculkan argumen setelah pemanggilan fungsi, kompiler biasanya mengizinkan argumen terakumulasi di tumpukan untuk beberapa panggilan fungsi dan memunculkan semuanya di sekali.

Dinonaktifkan pada level -O, -O2, -O3, -Os.

-maju-propagasi Lakukan forward propagation pass pada RTL. Pass mencoba menggabungkan dua instruksi dan memeriksa apakah hasilnya dapat disederhanakan. Jika loop unrolling aktif, dua pass dilakukan dan yang kedua dijadwalkan setelah loop dibuka.

Opsi ini diaktifkan secara default pada tingkat pengoptimalan -O, -O2, -O3, -Os.

-ffp-kontrak=gaya -ffp-kontrak=mati menonaktifkan kontraksi ekspresi floating-point. -ffp-kontrak=cepat memungkinkan kontraksi ekspresi floating-point seperti pembentukan fused multiply-add operasi jika target memiliki dukungan asli untuk mereka. -ffp-kontrak=on memungkinkan kontraksi ekspresi floating-point jika diizinkan oleh standar bahasa. Ini adalah saat ini tidak dilaksanakan dan diperlakukan sama dengan -ffp-kontrak=mati.

Standarnya adalah -ffp-kontrak=cepat.

-fomit-frame-pointer Jangan simpan penunjuk bingkai dalam register untuk fungsi yang tidak memerlukannya. Ini menghindari instruksi untuk menyimpan, mengatur, dan memulihkan pointer bingkai; itu juga membuat register tambahan tersedia dalam banyak fungsi. It juga membuat debugging mustahil on beberapa mesin.

Pada beberapa mesin, seperti VAX, bendera ini tidak berpengaruh, karena standar urutan panggilan secara otomatis menangani penunjuk bingkai dan tidak ada yang disimpan oleh berpura-pura itu tidak ada. Makro deskripsi mesin "FRAME_POINTER_REQUIRED" mengontrol apakah mesin target mendukung flag ini.

Pengaturan default (bila tidak mengoptimalkan ukuran) untuk 32-bit GNU/Linux x86 dan 32-bit Target Darwin x86 adalah -fomit-frame-pointer. Anda dapat mengonfigurasi GCC dengan --enable-frame-pointer konfigurasikan opsi untuk mengubah default.

Diaktifkan di level -O, -O2, -O3, -Os.

-foptimize-saudara-panggilan Optimalkan panggilan rekursif saudara dan ekor.

Diaktifkan di level -O2, -O3, -Os.

-foptimalkan-strlen Optimalkan berbagai fungsi string C standar (misalnya "strlen", "strchr" atau "strcpy") dan rekan "_FORTIFY_SOURCE" mereka menjadi alternatif yang lebih cepat.

Diaktifkan di level -O2, -O3.

-fno-inline Jangan memperluas fungsi apa pun sebaris selain dari yang ditandai dengan "always_inline" atribut. Ini adalah default ketika tidak mengoptimalkan.

Fungsi tunggal dapat dikecualikan dari inlining dengan menandainya dengan "noinline" atribut.

-finline-kecil-fungsi Integrasikan fungsi ke dalam pemanggilnya saat tubuhnya lebih kecil dari yang diharapkan kode panggilan fungsi (jadi ukuran keseluruhan program menjadi lebih kecil). Kompilator heuristik memutuskan fungsi mana yang cukup sederhana untuk diintegrasikan ke dalam cara ini. Inlining ini berlaku untuk semua fungsi, bahkan yang tidak dideklarasikan sebaris.

Diaktifkan di level -O2.

-finddirect-inlining Inline juga panggilan tidak langsung yang diketahui diketahui pada waktu kompilasi berkat inline sebelumnya. Opsi ini memiliki efek apa pun hanya ketika inlining itu sendiri diaktifkan oleh -finline-fungsi or -finline-kecil-fungsi Pilihan.

Diaktifkan di level -O2.

-finline-fungsi Pertimbangkan semua fungsi untuk inlining, bahkan jika mereka tidak dideklarasikan sebaris. NS compiler secara heuristik memutuskan fungsi mana yang layak untuk diintegrasikan dengan cara ini.

Jika semua panggilan ke fungsi yang diberikan terintegrasi, dan fungsi tersebut dideklarasikan "statis", maka fungsi tersebut biasanya tidak ditampilkan sebagai kode assembler dengan sendirinya.

Diaktifkan di level -O3.

-finline-fungsi-dipanggil-sekali Pertimbangkan semua fungsi "statis" yang dipanggil sekali untuk dimasukkan ke dalam pemanggilnya meskipun mereka tidak ditandai "sebaris". Jika panggilan ke fungsi yang diberikan terintegrasi, maka fungsi tidak ditampilkan sebagai kode assembler dengan sendirinya.

Diaktifkan di level -O1, -O2, -O3 serta -Os.

-fearly-inlining Fungsi sebaris ditandai dengan "always_inline" dan fungsi yang tubuhnya tampak lebih kecil dari fungsi memanggil overhead lebih awal sebelum melakukan -fprofile-hasilkan instrumentasi dan lulus inlining nyata. Melakukannya membuat pembuatan profil jauh lebih murah dan biasanya inlining lebih cepat pada program yang memiliki rantai besar fungsi pembungkus bersarang.

Diaktifkan secara default.

-fipa-sra Lakukan penggantian skalar antar-prosedural agregat, penghapusan parameter yang tidak digunakan dan penggantian parameter yang dilewatkan oleh referensi dengan parameter yang diteruskan oleh nilai.

Diaktifkan di level -O2, -O3 serta -Os.

-batas-akhir=n Secara default, GCC membatasi ukuran fungsi yang dapat disejajarkan. Bendera ini memungkinkan kontrol kasar dari batas ini. n adalah ukuran fungsi yang dapat digarisbawahi jumlah instruksi semu.

Inlining sebenarnya dikendalikan oleh sejumlah parameter, yang dapat ditentukan secara individu dengan menggunakan --param nama=nilai. itu -batas-akhir=n pilihan mengatur beberapa dari parameter tersebut sebagai berikut:

max-inline-insns-tunggal diatur ke n/ 2.

max-inline-insns-auto diatur ke n/ 2.

Lihat di bawah untuk dokumentasi parameter individual yang mengontrol inlining dan untuk default parameter ini.

Catatan: mungkin tidak ada nilai untuk -batas akhir yang menghasilkan perilaku default.

Catatan: instruksi semu mewakili, dalam konteks khusus ini, sebuah abstrak pengukuran ukuran fungsi. Sama sekali tidak mewakili hitungan perakitan instruksi dan dengan demikian arti tepatnya mungkin berubah dari satu rilis ke rilis lainnya lain.

-fno-keep-inline-dllexport Ini adalah versi yang lebih halus dari -fkeep-inline-fungsi, yang hanya berlaku untuk fungsi yang dideklarasikan menggunakan atribut "dllexport" atau declspec

-fkeep-inline-fungsi Di C, pancarkan fungsi "statis" yang dideklarasikan "sebaris" ke dalam file objek, meskipun fungsi telah dimasukkan ke dalam semua pemanggilnya. Saklar ini tidak mempengaruhi fungsi menggunakan ekstensi "extern inline" di GNU C90. Di C++, pancarkan semua dan semua fungsi inline ke dalam file objek.

-fkeep-statis-consts Keluarkan variabel yang dideklarasikan "statis const" saat pengoptimalan tidak diaktifkan, meskipun variabel tidak direferensikan.

GCC mengaktifkan opsi ini secara default. Jika Anda ingin memaksa kompiler untuk memeriksa apakah a variabel direferensikan, terlepas dari apakah pengoptimalan diaktifkan atau tidak, gunakan itu -fno-keep-static-consts .

-fmerge-konstanta Mencoba menggabungkan konstanta identik (konstanta string dan konstanta floating-point) di seluruh unit kompilasi.

Opsi ini adalah default untuk kompilasi yang dioptimalkan jika assembler dan linker mendukungnya. Menggunakan -fno-gabung-konstanta untuk menghambat perilaku ini.

Diaktifkan di level -O, -O2, -O3, -Os.

-fmerge-semua-konstanta Mencoba untuk menggabungkan konstanta identik dan variabel identik.

Opsi ini menyiratkan -fmerge-konstanta. Sebagai tambahannya -fmerge-konstanta ini mempertimbangkan misalnya bahkan array yang diinisialisasi konstan atau variabel konstan yang diinisialisasi dengan tipe integral atau floating-point. Bahasa seperti C atau C++ membutuhkan setiap variabel, termasuk beberapa instance dari variabel yang sama dalam panggilan rekursif, untuk memiliki perbedaan lokasi, jadi menggunakan opsi ini menghasilkan perilaku yang tidak sesuai.

-fmodulo-sched Lakukan penjadwalan swing modulo segera sebelum penjadwalan pertama berlalu. Ini pass melihat loop terdalam dan menyusun ulang instruksi mereka dengan tumpang tindih yang berbeda iterasi.

-fmodulo-sched-allow-regmoves Lakukan penjadwalan modulo berbasis SMS yang lebih agresif dengan pemindahan register yang diizinkan. Oleh menyetel flag ini, tepi anti-ketergantungan tertentu dihapus, yang memicu generasi reg-bergerak berdasarkan analisis rentang hidup. Opsi ini efektif hanya dengan -fmodulo-sched diaktifkan.

-fno-cabang-hitung-reg Jangan gunakan instruksi "pengurangan dan cabang" pada register hitungan, tetapi sebagai gantinya menghasilkan urutan instruksi yang mengurangi register, membandingkannya dengan nol, lalu bercabang berdasarkan hasilnya. Opsi ini hanya berarti pada arsitektur yang mendukung instruksi tersebut, yang meliputi x86, PowerPC, IA-64 dan S/390.

Diaktifkan secara default di -O1 dan lebih tinggi.

Standarnya adalah -fbranch-count-reg.

-fno-fungsi-cse Jangan memasukkan alamat fungsi dalam register; buat setiap instruksi yang memanggil a fungsi konstan berisi alamat fungsi secara eksplisit.

Opsi ini menghasilkan kode yang kurang efisien, tetapi beberapa peretasan aneh yang mengubah keluaran assembler mungkin bingung dengan optimasi yang dilakukan ketika opsi ini tidak digunakan.

Standarnya adalah -ffungsi-cse

-fno-nol-diinisialisasi-dalam-bss Jika target mendukung bagian BSS, GCC secara default menempatkan variabel yang diinisialisasi ke nol ke dalam BSS. Ini dapat menghemat ruang dalam kode yang dihasilkan.

Opsi ini mematikan perilaku ini karena beberapa program secara eksplisit bergantung pada variabel pergi ke bagian data --- misalnya, sehingga executable yang dihasilkan dapat menemukan awal bagian itu dan/atau membuat asumsi berdasarkan itu.

Standarnya adalah -fzero-inisialisasi-dalam-bss.

-fthread-melompat Lakukan optimasi yang memeriksa untuk melihat apakah lompatan bercabang ke lokasi di mana yang lain perbandingan yang dimasukkan oleh yang pertama ditemukan. Jika demikian, cabang pertama diarahkan ke baik tujuan cabang kedua atau titik yang segera mengikutinya, tergantung pada apakah kondisi diketahui benar atau salah.

Diaktifkan di level -O2, -O3, -Os.

-fsplit-wide-types Saat menggunakan tipe yang menempati banyak register, seperti "long long" pada 32-bit sistem, pisahkan register dan alokasikan secara independen. Ini biasanya menghasilkan kode yang lebih baik untuk jenis tersebut, tetapi dapat membuat debugging lebih sulit.

Diaktifkan di level -O, -O2, -O3, -Os.

-fcse-ikuti-melompat Dalam eliminasi subekspresi umum (CSE), pindai melalui instruksi lompat ketika target lompatan tidak tercapai oleh jalur lain. Misalnya, ketika CSE bertemu pernyataan "jika" dengan klausa "lain", CSE mengikuti lompatan ketika kondisinya diuji adalah palsu.

Diaktifkan di level -O2, -O3, -Os.

-fcse-lewati-blok Ini mirip dengan -fcse-ikuti-melompat, tetapi menyebabkan CSE mengikuti lompatan itu melewati blok secara kondisional. Ketika CSE menemukan pernyataan "jika" sederhana dengan no klausa lain, -fcse-lewati-blok menyebabkan CSE mengikuti lompatan di sekitar tubuh "jika".

Diaktifkan di level -O2, -O3, -Os.

-frerun-cse-setelah-loop Jalankan kembali eliminasi subekspresi umum setelah optimasi loop dilakukan.

Diaktifkan di level -O2, -O3, -Os.

-fgcse Lakukan pass eliminasi subekspresi umum global. Pass ini juga berfungsi konstanta global dan propagasi salinan.

Catatan: Saat mengkompilasi program menggunakan gotos yang dihitung, ekstensi GCC, Anda mungkin mendapatkan kinerja run-time yang lebih baik jika Anda menonaktifkan penghapusan subekspresi umum global lewati dengan menambahkan -fno-gcse ke baris perintah.

Diaktifkan di level -O2, -O3, -Os.

-fgcse-lm Ketika -fgcse-lm diaktifkan, penghapusan subekspresi umum global mencoba untuk bergerak beban yang hanya dibunuh oleh toko ke dalam diri mereka sendiri. Hal ini memungkinkan loop yang mengandung memuat/menyimpan urutan untuk diubah menjadi memuat di luar loop, dan menyalin/menyimpan di dalam putaran.

Diaktifkan secara default ketika -fgcse diaktifkan.

-fgcse-sm Ketika -fgcse-sm diaktifkan, pass gerak toko dijalankan setelah kesamaan global eliminasi subekspresi. Pass ini mencoba untuk memindahkan toko dari loop. Saat digunakan setara dengan -fgcse-lm, loop yang berisi urutan pemuatan/penyimpanan dapat diubah ke beban sebelum loop dan toko setelah loop.

Tidak diaktifkan pada tingkat pengoptimalan mana pun.

-fgcse-las Ketika -fgcse-las diaktifkan, eliminasi subekspresi umum global lulus menghilangkan beban berlebihan yang datang setelah penyimpanan ke lokasi memori yang sama (keduanya redundansi sebagian dan penuh).

Tidak diaktifkan pada tingkat pengoptimalan mana pun.

-fgcse-setelah-reload Ketika -fgcse-setelah-reload diaktifkan, pass eliminasi beban redundan dilakukan setelah memuat ulang. Tujuan dari pass ini adalah untuk membersihkan tumpahan yang berlebihan.

-pengoptimalan loop-faggressive Opsi ini memberi tahu pengoptimal loop untuk menggunakan batasan bahasa untuk mendapatkan batasan untuk jumlah iterasi dari loop. Ini mengasumsikan bahwa kode loop tidak dipanggil perilaku tidak terdefinisi dengan misalnya menyebabkan luapan bilangan bulat yang ditandatangani atau di luar batas akses array. Batas untuk jumlah iterasi dari loop digunakan untuk memandu loop unrolling dan peeling dan loop optimasi tes keluar. Opsi ini diaktifkan secara default

-pengoptimalan loop yang menyenangkan Opsi ini memberi tahu pengoptimal loop untuk mengasumsikan bahwa indeks loop tidak meluap, dan bahwa loop dengan kondisi keluar nontrivial tidak terbatas. Hal ini memungkinkan lebih luas berbagai optimasi loop bahkan jika pengoptimal loop itu sendiri tidak dapat membuktikan bahwa ini asumsi itu valid. Jika Anda menggunakan -Pengoptimalan loop-Wunsafe, kompiler memperingatkan Anda jika menemukan loop semacam ini.

-lompat silang Lakukan transformasi lompat silang. Transformasi ini menyatukan kode yang setara dan menghemat ukuran kode. Kode yang dihasilkan mungkin atau mungkin tidak berkinerja lebih baik daripada tanpa cross- melompat.

Diaktifkan di level -O2, -O3, -Os.

-fauto-inc-dec Gabungkan penambahan atau pengurangan alamat dengan akses memori. Pass ini adalah selalu melewatkan arsitektur yang tidak memiliki instruksi untuk mendukung ini. Diaktifkan secara default di -O dan lebih tinggi pada arsitektur yang mendukung ini.

-fdce Lakukan penghapusan kode mati (DCE) pada RTL. Diaktifkan secara default di -O dan lebih tinggi.

-fdse Lakukan penghapusan toko mati (DSE) pada RTL. Diaktifkan secara default di -O dan lebih tinggi.

-fif-konversi Cobalah untuk mengubah lompatan bersyarat menjadi setara tanpa cabang. Ini termasuk penggunaan gerakan bersyarat, min, max, set flag dan instruksi abs, dan beberapa trik dapat dilakukan dengan aritmatika standar. Penggunaan eksekusi bersyarat pada chip di mana ia berada tersedia dikendalikan oleh -fif-konversi2.

Diaktifkan di level -O, -O2, -O3, -Os.

-fif-konversi2 Gunakan eksekusi bersyarat (jika tersedia) untuk mengubah lompatan bersyarat menjadi setara tanpa cabang.

Diaktifkan di level -O, -O2, -O3, -Os.

-fdeclone-ctor-dtor C++ ABI memerlukan beberapa titik masuk untuk konstruktor dan destruktor: satu untuk a subobjek dasar, satu untuk objek lengkap, dan satu untuk destruktor virtual yang memanggil operator hapus setelahnya. Untuk hierarki dengan basis virtual, basis dan lengkap varian adalah klon, yang berarti dua salinan fungsi. Dengan opsi ini, varian dasar dan lengkap diubah menjadi thunks yang memanggil implementasi umum.

Diaktifkan oleh -Os.

-fdelete-null-pointer-cek Asumsikan bahwa program tidak dapat dengan aman melakukan dereference null pointer, dan tidak ada kode atau data elemen tinggal di sana. Ini memungkinkan pengoptimalan pelipatan konstan sederhana sama sekali tingkat optimasi. Selain itu, pass pengoptimalan lainnya di GCC menggunakan tanda ini untuk mengontrol analisis aliran data global yang menghilangkan pemeriksaan yang tidak berguna untuk pointer nol; ini mengasumsikan bahwa jika pointer diperiksa setelah telah direferensikan, itu tidak boleh nol.

Namun perhatikan bahwa di beberapa lingkungan asumsi ini tidak benar. Menggunakan -fno-delete-null-pointer-cek untuk menonaktifkan pengoptimalan ini untuk program yang bergantung pada perilaku itu.

Beberapa target, terutama yang disematkan, menonaktifkan opsi ini di semua level. Sebaliknya itu diaktifkan di semua tingkatan: -O0, -O1, -O2, -O3, -Os. Pass yang menggunakan informasi diaktifkan secara independen pada tingkat pengoptimalan yang berbeda.

-fdevirtualisasi Mencoba mengonversi panggilan ke fungsi virtual ke panggilan langsung. Ini dilakukan berdua dalam prosedur dan antarprosedur sebagai bagian dari inlining tidak langsung (-finddirect-inlining) dan propagasi konstan antarprosedural (-fipa-cp). Diaktifkan pada adalah ide yang bagus -O2, -O3, -Os.

-fdevirtualisasi-spekulatif Mencoba mengonversi panggilan ke fungsi virtual menjadi panggilan langsung spekulatif. Berdasarkan analisis grafik pewarisan tipe, tentukan untuk panggilan yang diberikan himpunan kemungkinan target. Jika set kecil, sebaiknya ukuran 1, ubah panggilan menjadi a keputusan bersyarat antara panggilan langsung dan tidak langsung. Panggilan spekulatif memungkinkan lebih banyak pengoptimalan, seperti inlining. Ketika mereka tampak tidak berguna setelah lebih jauh optimasi, mereka diubah kembali ke bentuk aslinya.

-fdevirtualisasi-di-ltrans Streaming informasi tambahan yang diperlukan untuk devirtualisasi agresif saat menjalankan tautan- pengoptimal waktu dalam mode transformasi lokal. Opsi ini memungkinkan lebih banyak devirtualisasi tetapi secara signifikan meningkatkan ukuran data yang dialirkan. Untuk ini alasan itu dinonaktifkan secara default.

-optimasi-mahal Lakukan sejumlah optimasi kecil yang relatif mahal.

Diaktifkan di level -O2, -O3, -Os.

-bebas Mencoba untuk menghapus instruksi ekstensi yang berlebihan. Ini sangat membantu untuk arsitektur x86-64, yang secara implisit tidak diperpanjang dalam register 64-bit setelahnya menulis ke setengah 32-bit yang lebih rendah.

Diaktifkan untuk Alpha, AArch64 dan x86 di level -O2, -O3, -Os.

-fno-seumur hidup-dse Dalam C++ nilai suatu objek hanya dipengaruhi oleh perubahan dalam masa pakainya: ketika konstruktor dimulai, objek memiliki nilai tak tentu, dan setiap perubahan selama masa hidup benda tersebut mati ketika benda tersebut dihancurkan. Biasanya toko mati penghapusan akan mengambil keuntungan dari ini; jika kode Anda bergantung pada nilai penyimpanan objek bertahan di luar masa pakai objek, Anda dapat menggunakan tanda ini untuk nonaktifkan pengoptimalan ini.

-flive-range-penyusutan Mencoba untuk mengurangi tekanan register melalui penyusutan rentang hidup register. Ini adalah berguna untuk prosesor cepat dengan set register ukuran kecil atau sedang.

-fira-algoritma=algoritma Gunakan algoritma pewarnaan yang ditentukan untuk pengalokasi register terintegrasi. NS algoritma argumen bisa prioritas, yang menentukan pewarnaan prioritas Chow, atau CB, yang menentukan pewarnaan Chaitin-Briggs. Pewarnaan Chaitin-Briggs tidak diterapkan untuk semua arsitektur, tetapi untuk target yang mendukungnya, itu adalah default karena menghasilkan kode yang lebih baik.

-fira-wilayah=wilayah Gunakan wilayah tertentu untuk pengalokasi register terintegrasi. NS wilayah argumen harus salah satu dari berikut ini:

semua Gunakan semua loop sebagai wilayah alokasi register. Ini dapat memberikan hasil terbaik untuk mesin dengan register set kecil dan/atau tidak beraturan.

campur aduk Gunakan semua loop kecuali loop dengan tekanan register kecil sebagai daerah. Ini nilai biasanya memberikan hasil terbaik dalam banyak kasus dan untuk sebagian besar arsitektur, dan diaktifkan secara default saat kompilasi dengan pengoptimalan untuk kecepatan (-O, -O2, ...).

satu Gunakan semua fungsi sebagai satu wilayah. Ini biasanya menghasilkan kode terkecil ukuran, dan diaktifkan secara default untuk -Os or -O0.

-fira-kerekan-tekanan Gunakan IRA untuk mengevaluasi tekanan register dalam kode pengangkat untuk keputusan pengangkatan ekspresi. Opsi ini biasanya menghasilkan kode yang lebih kecil, tetapi dapat memperlambat kompiler turun.

Opsi ini diaktifkan di level -Os untuk semua target.

-fira-loop-tekanan Gunakan IRA untuk mengevaluasi tekanan register dalam loop untuk keputusan untuk memindahkan invarian loop. Opsi ini biasanya menghasilkan pembuatan kode yang lebih cepat dan lebih kecil pada mesin dengan file register besar (>= 32 register), tetapi dapat memperlambat kompiler.

Opsi ini diaktifkan di level -O3 untuk beberapa target.

-fno-ira-bagikan-simpan-slot Nonaktifkan berbagi slot tumpukan yang digunakan untuk menyimpan register keras yang digunakan panggilan hidup melalui sebuah panggilan. Setiap hard register mendapat slot tumpukan terpisah, dan sebagai hasilnya, tumpukan fungsi frame lebih besar.

-fno-ira-bagikan-tumpahan-slot Nonaktifkan berbagi slot tumpukan yang dialokasikan untuk pseudo-register. Setiap pseudo-register yang tidak mendapatkan hard register mendapat slot tumpukan terpisah, dan sebagai hasilnya berfungsi bingkai tumpukan lebih besar.

-fira-verbose=n Kontrol verbositas file dump untuk pengalokasi register terintegrasi. NS nilai default adalah 5. Jika nilai n lebih besar atau sama dengan 10, output dump dikirim ke stderr menggunakan format yang sama dengan n dikurangi 10.

-flra-remat Aktifkan rematerialisasi sensitif-CFG di LRA. Alih-alih memuat nilai tumpah pseudos, LRA mencoba untuk rematerialize (menghitung ulang) nilai jika menguntungkan.

Diaktifkan di level -O2, -O3, -Os.

-fdelayed-cabang Jika didukung untuk mesin target, coba susun ulang instruksi untuk dieksploitasi slot instruksi tersedia setelah instruksi cabang tertunda.

Diaktifkan di level -O, -O2, -O3, -Os.

-fschedule-insns Jika didukung untuk mesin target, coba susun ulang instruksi untuk menghilangkan eksekusi terhenti karena data yang diperlukan tidak tersedia. Ini membantu mesin yang memiliki titik mengambang lambat atau instruksi pemuatan memori dengan mengizinkan instruksi lain untuk dikeluarkan sampai hasil dari beban atau instruksi floating-point diperlukan.

Diaktifkan di level -O2, -O3.

-fschedule-insns2 Mirip dengan -fschedule-insns, tetapi meminta tambahan penjadwalan instruksi setelah alokasi register dilakukan. Ini sangat berguna pada mesin dengan jumlah register yang relatif kecil dan instruksi pemuatan memori membutuhkan lebih dari satu siklus.

Diaktifkan di level -O2, -O3, -Os.

-fno-sched-interblock Jangan menjadwalkan instruksi di seluruh blok dasar. Ini biasanya diaktifkan secara default saat menjadwalkan sebelum alokasi register, yaitu dengan -fschedule-insns atau -O2 or tinggi.

-fno-sched-spec Jangan izinkan gerakan spekulatif dari instruksi tanpa beban. Ini biasanya diaktifkan oleh default saat menjadwalkan sebelum alokasi register, yaitu dengan -fschedule-insns atau -O2 atau lebih tinggi.

-fsched-tekanan Aktifkan penjadwalan insn sensitif tekanan register sebelum alokasi register. Ini hanya masuk akal ketika penjadwalan sebelum alokasi register diaktifkan, yaitu dengan -fschedule-insns atau -O2 atau lebih tinggi. Penggunaan opsi ini dapat meningkatkan hasil yang dihasilkan kode dan kurangi ukurannya dengan mencegah peningkatan tekanan register di atas angka hard register yang tersedia dan tumpahan berikutnya dalam alokasi register.

-fsched-spec-load Izinkan gerakan spekulatif dari beberapa instruksi beban. Ini hanya masuk akal ketika penjadwalan sebelum alokasi register, yaitu dengan -fschedule-insns atau -O2 atau lebih tinggi.

-fsched-spec-load-berbahaya Izinkan gerakan spekulatif dari lebih banyak instruksi beban. Ini hanya masuk akal ketika penjadwalan sebelum alokasi register, yaitu dengan -fschedule-insns atau -O2 atau lebih tinggi.

-fsched-stall-insns -fsched-stalled-insns=n Tentukan berapa banyak penginapan (jika ada) yang dapat dipindahkan sebelum waktunya dari antrian macet insns ke dalam daftar siap selama lulus penjadwalan kedua. -fno-sched-stapped-insns berarti tidak ada penginapan yang dipindahkan sebelum waktunya, -fsched-stalled-insns=0 berarti tidak ada batas berapa banyak penginapan yang antri dapat dipindahkan sebelum waktunya. -fsched-stall-insns tanpa nilai sama dengan -fsched-stalled-insns=1.

-fsched-stalled-insns-dep -fsched-stalled-insns-dep=n Tentukan berapa banyak grup (siklus) insn yang diperiksa untuk ketergantungan pada insn yang terhenti yang merupakan kandidat untuk penghapusan prematur dari antrian penginapan macet. Ini mempunyai efek hanya selama lulus penjadwalan kedua, dan hanya jika -fsched-stall-insns is bekas. -fno-sched-stalled-insns-dep adalah setara dengan -fsched-stalled-insns-dep=0. -fsched-stalled-insns-dep tanpa nilai sama dengan -fsched-stalled-insns-dep=1.

-fsched2-use-superblok Saat menjadwalkan setelah alokasi register, gunakan penjadwalan superblok. Ini memungkinkan gerakan melintasi batas blok dasar, menghasilkan jadwal yang lebih cepat. Pilihan ini adalah eksperimental, karena tidak semua deskripsi mesin yang digunakan oleh GCC memodelkan CPU cukup dekat untuk menghindari hasil yang tidak dapat diandalkan dari algoritma.

Ini hanya masuk akal ketika menjadwalkan setelah alokasi register, yaitu dengan -fschedule-insns2 atau -O2 atau lebih tinggi.

-fsched-grup-heuristik Aktifkan heuristik grup di penjadwal. Heuristik ini mendukung instruksi yang termasuk dalam kelompok jadwal. Ini diaktifkan secara default saat penjadwalan adalah diaktifkan, yaitu dengan -fschedule-insns or -fschedule-insns2 atau -O2 atau lebih tinggi.

-fsched-kritis-jalur-heuristik Aktifkan heuristik jalur kritis di penjadwal. Heuristik ini mendukung instruksi pada jalur kritis. Ini diaktifkan secara default saat penjadwalan adalah diaktifkan, yaitu dengan -fschedule-insns or -fschedule-insns2 atau -O2 atau lebih tinggi.

-fsched-spec-insn-heuristik Aktifkan heuristik instruksi spekulatif di penjadwal. Heuristik ini mendukung instruksi spekulatif dengan kelemahan ketergantungan yang lebih besar. Ini diaktifkan secara default saat penjadwalan diaktifkan, yaitu dengan -fschedule-insns or -fschedule-insns2 atau -O2 atau lebih tinggi.

-fsched-rank-heuristik Aktifkan heuristik peringkat di penjadwal. Heuristik ini mendukung instruksi milik blok dasar dengan ukuran atau frekuensi yang lebih besar. Ini diaktifkan secara default saat penjadwalan diaktifkan, yaitu dengan -fschedule-insns or -fschedule-insns2 atau -O2 atau lebih tinggi.

-fsched-last-insn-heuristik Aktifkan heuristik instruksi terakhir di penjadwal. Heuristik ini mendukung instruksi yang kurang tergantung pada instruksi terakhir yang dijadwalkan. Ini diaktifkan secara default saat penjadwalan diaktifkan, yaitu dengan -fschedule-insns or -fschedule-insns2 atau -O2 atau lebih tinggi.

-fsched-dep-hitung-heuristik Aktifkan heuristik jumlah dependen di penjadwal. Heuristik ini mendukung instruksi yang memiliki lebih banyak instruksi tergantung padanya. Ini diaktifkan secara default saat penjadwalan diaktifkan, yaitu dengan -fschedule-insns or -fschedule-insns2 atau -O2 atau lebih tinggi.

-freschedule-modulo-scheduled-loop Penjadwalan modulo dilakukan sebelum penjadwalan tradisional. Jika sebuah loop adalah modulo terjadwal, tiket penjadwalan selanjutnya dapat mengubah jadwalnya. Gunakan opsi ini untuk mengontrol perilaku itu.

-penjadwalan selektif Jadwal instruksi menggunakan algoritma penjadwalan selektif. Penjadwalan selektif berjalan alih-alih pass penjadwal pertama.

-penjadwalan selektif2 Jadwal instruksi menggunakan algoritma penjadwalan selektif. Penjadwalan selektif berjalan bukannya pass penjadwal kedua.

-fsel-sched-pipelining Aktifkan perpipaan perangkat lunak dari loop terdalam selama penjadwalan selektif. Ini pilihan tidak berpengaruh kecuali salah satu dari -penjadwalan selektif or -penjadwalan selektif2 dihidupkan.

-fsel-sched-pipelining-outer-loop Saat pipelining loop selama penjadwalan selektif, juga loop luar pipa. Ini pilihan tidak berpengaruh kecuali -fsel-sched-pipelining dihidupkan.

-fsemantik-interposisi Beberapa format objek, seperti ELF, memungkinkan penyisipan simbol oleh tautan dinamis. Ini berarti bahwa untuk simbol yang diekspor dari DSO, kompiler tidak dapat melakukan propagasi antarprosedural, inlining dan optimasi lainnya untuk mengantisipasi bahwa fungsi atau variabel yang bersangkutan dapat berubah. Meskipun fitur ini berguna, untuk contoh, untuk menulis ulang fungsi alokasi memori dengan implementasi debugging, itu adalah mahal dalam hal kualitas kode. Dengan -fno-semantik-interposisi kompiler mengasumsikan bahwa jika interposisi terjadi untuk fungsi, fungsi penimpaan akan memiliki persis semantik yang sama (dan efek samping). Demikian pula jika interposisi terjadi untuk variabel, konstruktor variabel akan sama. Bendera tidak memiliki efek untuk fungsi yang dideklarasikan secara eksplisit sebaris (di mana tidak pernah diizinkan untuk interposisi untuk mengubah semantik) dan untuk simbol secara eksplisit dinyatakan lemah.

-fshrink-wrap Keluarkan prolog fungsi hanya sebelum bagian fungsi yang membutuhkannya, bukan di bagian atas fungsi. Bendera ini diaktifkan secara default di -O dan lebih tinggi.

-fcaller-save Aktifkan alokasi nilai ke register yang dihancurkan oleh panggilan fungsi, dengan memancarkan instruksi tambahan untuk menyimpan dan memulihkan register di sekitar panggilan tersebut. Seperti alokasi dilakukan hanya ketika tampaknya menghasilkan kode yang lebih baik.

Opsi ini selalu diaktifkan secara default pada mesin tertentu, biasanya yang memiliki tidak ada register yang diawetkan panggilan untuk digunakan sebagai gantinya.

Diaktifkan di level -O2, -O3, -Os.

-fcombine-stack-adjustments Melacak penyesuaian tumpukan (push dan pop) dan referensi memori tumpukan dan kemudian mencoba untuk menemukan cara untuk menggabungkannya.

Diaktifkan secara default di -O1 dan lebih tinggi.

-fipa-ra Gunakan register simpanan pemanggil untuk alokasi jika register tersebut tidak digunakan oleh yang dipanggil fungsi. Dalam hal ini, tidak perlu menyimpan dan memulihkannya di sekitar panggilan. Ini hanya mungkin jika fungsi yang dipanggil adalah bagian dari unit kompilasi yang sama dengan saat ini fungsi dan mereka dikompilasi sebelum itu.

Diaktifkan di level -O2, -O3, -Os.

-fconserve-stack Cobalah untuk meminimalkan penggunaan tumpukan. Kompiler mencoba menggunakan lebih sedikit ruang tumpukan, bahkan jika itu membuat program lebih lambat. Opsi ini menyiratkan pengaturan bingkai-tumpukan besar parameter ke 100 dan pertumbuhan-bingkai-tumpukan besar parameter menjadi 400.

-ftree-reassoc Lakukan reassociation pada pohon. Bendera ini diaktifkan secara default di -O dan lebih tinggi.

-ftree-pra Lakukan eliminasi redundansi parsial (PRE) pada pohon. Bendera ini diaktifkan oleh default di -O2 serta -O3.

-ftree-partial-pra Jadikan eliminasi redundansi parsial (PRE) lebih agresif. Bendera ini diaktifkan oleh default di -O3.

-ftree-forwprop Lakukan perbanyakan maju pada pohon. Bendera ini diaktifkan secara default di -O serta tinggi.

-bebas pohon Lakukan penghapusan redundansi penuh (FRE) pada pohon. Perbedaan antara FRE dan PRE adalah bahwa FRE hanya mempertimbangkan ekspresi yang dihitung pada semua jalur yang mengarah ke perhitungan yang berlebihan. Analisis ini lebih cepat dari PRE, meskipun mengekspos lebih sedikit redundansi. Bendera ini diaktifkan secara default di -O dan lebih tinggi.

-ftree-phiprop Lakukan pengangkatan beban dari penunjuk kondisional pada pohon. Pass ini diaktifkan oleh default di -O dan lebih tinggi.

-fhoist-berdekatan-beban Kerek beban secara spekulatif dari kedua cabang if-then-else jika beban berasal dari lokasi yang berdekatan dalam struktur yang sama dan arsitektur target memiliki kondisi memindahkan instruksi. Bendera ini diaktifkan secara default di -O2 dan lebih tinggi.

-free-copy-prop Lakukan perbanyakan salinan pada pohon. Pass ini menghilangkan operasi penyalinan yang tidak perlu. Bendera ini diaktifkan secara default di -O dan lebih tinggi.

-fipa-murni-const Temukan fungsi mana yang murni atau konstan. Diaktifkan secara default di -O dan lebih tinggi.

-fipa-referensi Temukan variabel statis mana yang tidak lolos dari unit kompilasi. Diaktifkan oleh default di -O dan lebih tinggi.

-fipa-pta Lakukan analisis pointer antarprosedural dan modifikasi antarprosedural dan analisis referensi. Opsi ini dapat menyebabkan penggunaan memori dan waktu kompilasi yang berlebihan pada unit kompilasi besar. Ini tidak diaktifkan secara default di tingkat pengoptimalan apa pun.

-fipa-profil Lakukan propagasi profil antarprosedural. Fungsi dipanggil hanya dari dingin fungsi ditandai sebagai dingin. Juga fungsi dieksekusi sekali (seperti "dingin", "noreturn", konstruktor atau destruktor statis) diidentifikasi. Fungsi dingin dan loop lebih sedikit bagian dari fungsi yang dieksekusi sekali kemudian dioptimalkan untuk ukuran. Diaktifkan oleh default di -O dan lebih tinggi.

-fipa-cp Lakukan propagasi konstan antarprosedural. Pengoptimalan ini menganalisis program untuk menentukan kapan nilai yang diteruskan ke fungsi adalah konstanta dan kemudian dioptimalkan demikian. Pengoptimalan ini secara substansial dapat meningkatkan kinerja jika: aplikasi memiliki konstanta yang diteruskan ke fungsi. Bendera ini diaktifkan secara default di -O2, -Os serta -O3.

-fipa-cp-klon Lakukan kloning fungsi untuk membuat propagasi konstanta antarprosedural lebih kuat. Kapan diaktifkan, propagasi konstan antarprosedural melakukan fungsi kloning ketika fungsi yang terlihat secara eksternal dapat dipanggil dengan argumen konstan. Karena ini pengoptimalan dapat membuat banyak salinan fungsi, itu dapat meningkat secara signifikan ukuran kode (lihat --param ipc-unit-pertumbuhan=nilai). Bendera ini diaktifkan secara default di -O3.

-fipa-cp-alignment Saat diaktifkan, pengoptimalan ini menyebarkan penyelarasan parameter fungsi untuk mendukung operasi vektorisasi dan string yang lebih baik.

Bendera ini diaktifkan secara default di -O2 serta -Os. Ini membutuhkan itu -fipa-cp diaktifkan.

-fipa-icf Lakukan Pelipatan Kode Identik untuk fungsi dan variabel read-only. NS pengoptimalan mengurangi ukuran kode dan dapat mengganggu tumpukan yang terlepas dengan mengganti fungsi dengan yang setara dengan nama yang berbeda. Pengoptimalan bekerja lebih efektif dengan optimasi waktu tautan diaktifkan.

Namun demikian, perilakunya mirip dengan pengoptimalan ICF Gold Linker, GCC ICF berfungsi tingkat yang berbeda dan dengan demikian optimasinya tidak sama - ada kesetaraan yang hanya ditemukan oleh GCC dan kesetaraan hanya ditemukan oleh Emas.

Bendera ini diaktifkan secara default di -O2 serta -Os.

-fisolate-salah-jalur-dereferensi Mendeteksi jalur yang memicu perilaku yang salah atau tidak terdefinisi karena dereferensi null penunjuk. Pisahkan jalur tersebut dari aliran kontrol utama dan putar pernyataan dengan perilaku yang salah atau tidak terdefinisi ke dalam jebakan. Bendera ini diaktifkan secara default di -O2 dan lebih tinggi.

-fisolate-salah-jalur-atribut Deteksi jalur yang memicu perilaku yang salah atau tidak terdefinisi karena nilai nol yang digunakan dengan cara yang dilarang oleh atribut "returns_nonnull" atau "nonnull". Pisahkan jalur itu dari aliran kontrol utama dan mengubah pernyataan dengan perilaku yang salah atau tidak terdefinisi ke dalam perangkap. Ini saat ini tidak diaktifkan, tetapi dapat diaktifkan oleh -O2 di masa depan.

-ftree-sink Lakukan gerakan simpan ke depan pada pohon. Bendera ini diaktifkan secara default di -O serta tinggi.

-free-bit-ccp Lakukan propagasi konstan bit bersyarat jarang pada pohon dan propagasi pointer informasi keselarasan. Pass ini hanya beroperasi pada variabel skalar lokal dan adalah diaktifkan secara default di -O dan lebih tinggi. Ini membutuhkan itu -ftree-ccp diaktifkan.

-ftree-ccp Lakukan propagasi konstan bersyarat jarang (CCP) pada pohon. Pass ini saja beroperasi pada variabel skalar lokal dan diaktifkan secara default di -O dan lebih tinggi.

-fssa-phiopt Lakukan pencocokan pola pada node SSA PHI untuk mengoptimalkan kode bersyarat. Pass ini adalah diaktifkan secara default di -O dan lebih tinggi.

-ftree-switch-konversi Lakukan konversi inisialisasi sederhana dalam sakelar ke inisialisasi dari a susunan skalar. Bendera ini diaktifkan secara default di -O2 dan lebih tinggi.

-ftree-tail-merge Cari urutan kode yang identik. Saat ditemukan, ganti satu dengan lompatan ke yang lain. Optimalisasi ini dikenal sebagai tail merging atau cross jumping. Bendera ini diaktifkan oleh default di -O2 dan lebih tinggi. Waktu kompilasi dalam pass ini dapat dibatasi menggunakan perbandingan-penggabungan-ekor-maks parameter dan max-tail-merge-iterasi parameter.

-ftree-dce Lakukan penghapusan kode mati (DCE) pada pohon. Bendera ini diaktifkan secara default di -O dan lebih tinggi.

-ftree-built-in-call-dce Lakukan penghapusan kode mati bersyarat (DCE) untuk panggilan ke fungsi bawaan yang dapat mengatur "errno" tetapi sebaliknya bebas efek samping. Bendera ini diaktifkan secara default at -O2 dan lebih tinggi jika -Os juga tidak ditentukan.

-ftree-dominator-memilih Lakukan berbagai pembersihan skalar sederhana (propagasi konstan/salin, redundansi eliminasi, propagasi jangkauan, dan penyederhanaan ekspresi) berdasarkan dominator lintas pohon. Ini juga melakukan jump threading (untuk mengurangi lompatan menjadi lompatan). Ini bendera diaktifkan secara default di -O dan lebih tinggi.

-ftree-dse Lakukan penghapusan toko mati (DSE) pada pohon. Sebuah toko mati adalah sebuah toko menjadi sebuah memori lokasi yang kemudian ditimpa oleh toko lain tanpa beban intervensi. Di dalam hal ini toko sebelumnya dapat dihapus. Bendera ini diaktifkan secara default di -O serta tinggi.

-ftree-ch Lakukan penyalinan header loop pada pohon. Ini bermanfaat karena meningkat efektivitas optimasi gerakan kode. Ini juga menghemat satu lompatan. Bendera ini adalah diaktifkan secara default di -O dan lebih tinggi. Ini tidak diaktifkan untuk -Os, karena biasanya meningkatkan ukuran kode.

-ftree-loop-optimasi Lakukan optimasi loop pada pohon. Bendera ini diaktifkan secara default di -O serta tinggi.

-ftree-loop-linier Lakukan transformasi pertukaran loop pada pohon. Sama dengan -floop-pertukaran. Menggunakan transformasi kode ini, GCC harus dikonfigurasi dengan --dengan-isl untuk mengaktifkan Infrastruktur transformasi loop grafit.

-floop-pertukaran Lakukan transformasi pertukaran loop pada loop. Pertukaran dua loop bersarang mengganti loop dalam dan luar. Misalnya, diberikan loop seperti:

DO J = 1, M DO I = 1, N A(J, I) = A(J, I) * C SELESAI SELESAI

pertukaran loop mengubah loop seolah-olah ditulis:

DO I = 1, N DO J = 1, M A(J, I) = A(J, I) * C SELESAI SELESAI

yang dapat bermanfaat ketika "N" lebih besar dari cache, karena di Fortran, elemen array disimpan dalam memori secara berurutan menurut kolom, dan yang asli loop berulang di atas baris, berpotensi membuat pada setiap akses cache miss. Ini pengoptimalan berlaku untuk semua bahasa yang didukung oleh GCC dan tidak terbatas pada Fortran. Untuk menggunakan transformasi kode ini, GCC harus dikonfigurasi dengan --dengan-isl untuk mengaktifkan infrastruktur transformasi loop Graphite.

-floop-strip-tambang Lakukan transformasi penambangan loop strip pada loop. Penambangan strip membagi satu lingkaran menjadi dua loop bersarang. Lingkaran luar memiliki langkah yang sama dengan ukuran strip dan bagian dalam loop memiliki langkah dari loop asli dalam sebuah strip. Panjang strip dapat diubah menggunakan ukuran lingkaran-blok-ubin parameter. Misalnya, diberikan loop seperti:

DO I = 1, N A(I) = A(I) + C SELESAI

loop strip mining mengubah loop seolah-olah ditulis:

DO II = 1, N, 51 DO I = II, min (II + 50, N) A(I) = A(I) + C SELESAI SELESAI

Pengoptimalan ini berlaku untuk semua bahasa yang didukung oleh GCC dan tidak terbatas pada Fortran. Untuk menggunakan transformasi kode ini, GCC harus dikonfigurasi dengan --dengan-isl untuk mengaktifkan infrastruktur transformasi loop Graphite.

-floop-blok Lakukan transformasi pemblokiran loop pada loop. Memblokir tambang strip setiap loop di loop nest sedemikian rupa sehingga akses memori dari loop elemen pas di dalam cache. NS panjang strip dapat diubah menggunakan ukuran lingkaran-blok-ubin parameter. Sebagai contoh, diberikan loop seperti:

DO I = 1, N DO J = 1, M A(J, I) = B(I) + C(J) SELESAI SELESAI

pemblokiran loop mengubah loop seolah-olah ditulis:

DO II = 1, N, 51 LAKUKAN JJ = 1, M, 51 DO I = II, min (II + 50, N) DO J = JJ, min (JJ + 50, M) A(J, I) = B(I) + C(J) SELESAI SELESAI SELESAI SELESAI

yang dapat bermanfaat ketika "M" lebih besar dari cache, karena loop terdalam mengulangi sejumlah kecil data yang dapat disimpan dalam cache. Ini pengoptimalan berlaku untuk semua bahasa yang didukung oleh GCC dan tidak terbatas pada Fortran. Untuk menggunakan transformasi kode ini, GCC harus dikonfigurasi dengan --dengan-isl untuk mengaktifkan infrastruktur transformasi loop Graphite.

-fgrafit-identitas Aktifkan transformasi identitas untuk grafit. Untuk setiap SCoP kami menghasilkan representasi polihedral dan mengubahnya kembali menjadi gimle. Menggunakan -fgrafit-identitas kita dapat memeriksa biaya atau manfaat dari transformasi GIMPLE -> GRAPHITE -> GIMPLE. Beberapa pengoptimalan minimal juga dilakukan oleh pembuat kode ISL, seperti indeks pemisahan dan penghapusan kode mati dalam loop.

-floop-sarang-optimalkan Aktifkan pengoptimal sarang loop berbasis ISL. Ini adalah pengoptimal sarang loop generik berbasis pada algoritma optimasi Pluto. Ini menghitung struktur loop yang dioptimalkan untuk lokalitas data dan paralelisme. Opsi ini bersifat eksperimental.

-floop-unroll-and-jam Aktifkan buka gulungan dan macet untuk pengoptimal sarang loop berbasis ISL. Faktor buka gulungan bisa menjadi diubah menggunakan loop-unroll-jam-size parameter. Dimensi yang tidak digulung (menghitung dari yang paling dalam) dapat diubah menggunakan loop-unroll-jam-kedalaman parameter. .

-floop-paralelisasi-semua Gunakan analisis ketergantungan data Grafit untuk mengidentifikasi loop yang dapat diparalelkan. Paralelkan semua loop yang dapat dianalisis untuk tidak mengandung ketergantungan yang dibawa loop tanpa memeriksa apakah menguntungkan untuk memparalelkan loop.

-fcheck-data-deps Bandingkan hasil beberapa penganalisis ketergantungan data. Opsi ini digunakan untuk men-debug penganalisis ketergantungan data.

-ftree-loop-jika-mengkonversi Cobalah untuk mengubah lompatan bersyarat di loop terdalam menjadi tanpa cabang setara. Tujuannya adalah untuk menghapus aliran kontrol dari loop terdalam secara berurutan untuk meningkatkan kemampuan vektorisasi lulus untuk menangani loop ini. Ini adalah diaktifkan secara default jika vektorisasi diaktifkan.

-ftree-loop-jika-konversi-toko Coba juga if-convert lompatan kondisional yang berisi penulisan memori. Ini transformasi dapat menjadi tidak aman untuk program multi-utas karena transformasi kondisional memori menulis ke dalam memori tanpa syarat menulis. Sebagai contoh,

untuk (i = 0; i < N; i++) jika (kond) A[i] = ekspr;

diubah menjadi

untuk (i = 0; i < N; i++) A[i] = kondisi ? expr : A[i];

berpotensi menghasilkan data race.

-ftree-loop-distribusi Lakukan distribusi loop. Bendera ini dapat meningkatkan kinerja cache pada badan loop besar dan memungkinkan pengoptimalan loop lebih lanjut, seperti paralelisasi atau vektorisasi, untuk dilakukan tempat. Misalnya, lingkaran

DO I = 1, N A(I) = B(I) + C D(I) = E(I) * F SELESAI

diubah menjadi

DO I = 1, N A(I) = B(I) + C SELESAI DO I = 1, N D(I) = E(I) * F SELESAI

-ftree-loop-distribusi-pola Lakukan distribusi loop pola yang dapat dibuat kode dengan panggilan ke a Perpustakaan. Bendera ini diaktifkan secara default di -O3.

Pass ini mendistribusikan loop inisialisasi dan menghasilkan panggilan ke memset nol. Misalnya, lingkaran

DO I = 1, N A(I) = 0 B(I) = A(I) + I SELESAI

diubah menjadi

DO I = 1, N A(I) = 0 SELESAI DO I = 1, N B(I) = A(I) + I SELESAI

dan loop inisialisasi diubah menjadi panggilan ke memset nol.

-ftree-loop-im Lakukan gerakan invarian loop pada pohon. Pass ini hanya menggerakkan invarian yang sulit untuk menangani di tingkat RTL (panggilan fungsi, operasi yang diperluas ke urutan nontrivial dari losmen). Dengan -funswitch-loop itu juga memindahkan operan dari kondisi yang invarian keluar dari loop, sehingga kita dapat menggunakan hanya analisis invarian sepele di pemutusan loop. Pass ini juga termasuk store motion.

-ftree-loop-ivcanon Buat penghitung kanonik untuk jumlah iterasi dalam loop yang menentukan jumlah iterasi membutuhkan analisis yang rumit. Optimasi kemudian mungkin menentukan nomor dengan mudah. Berguna terutama sehubungan dengan membuka gulungan.

-fivopts Lakukan optimasi variabel induksi (pengurangan kekuatan, variabel induksi penggabungan dan eliminasi variabel induksi) pada pohon.

-ftree-parallelize-loop=n Parallelize loop, yaitu, membagi ruang iterasinya untuk dijalankan dalam n thread. Ini adalah hanya mungkin untuk loop yang iterasinya independen dan dapat berubah-ubah dipesan ulang. Optimalisasi hanya menguntungkan pada mesin multiprosesor, untuk loop yang CPU-intensif, bukan dibatasi misalnya oleh bandwidth memori. Pilihan ini menyiratkan -utas, dan dengan demikian hanya didukung pada target yang memiliki dukungan untuk -utas.

-ftree-pta Lakukan analisis fungsi-lokal poin-untuk pada pohon. Bendera ini diaktifkan secara default at -O dan lebih tinggi.

-ftree-sra Melakukan penggantian skalar agregat. Pass ini menggantikan referensi struktur dengan skalar untuk mencegah melakukan struktur ke memori terlalu dini. Bendera ini adalah diaktifkan secara default di -O dan lebih tinggi.

-ftree-copyrename Lakukan penggantian nama salinan pada pohon. Pass ini mencoba untuk mengganti nama sementara compiler menjadi variabel lain di lokasi penyalinan, biasanya menghasilkan nama variabel yang lebih sangat mirip dengan variabel aslinya. Bendera ini diaktifkan secara default di -O serta tinggi.

-ftree-coalesce-inlined-vars Beri tahu pass copyrename (lihat -ftree-copyrename) untuk mencoba menggabungkan pengguna kecil- variabel yang ditentukan juga, tetapi hanya jika mereka digariskan dari fungsi lain. Ini adalah sebuah bentuk yang lebih terbatas -ftree-coalesce-vars. Ini dapat membahayakan informasi debug seperti variabel sebaris, tetapi itu membuat variabel dari fungsi sebaris terpisah dari masing-masing lainnya, sehingga mereka lebih cenderung berisi nilai yang diharapkan dalam debugging sidang.

-ftree-coalesce-vars Beri tahu pass copyrename (lihat -ftree-copyrename) untuk mencoba menggabungkan pengguna kecil- variabel yang ditentukan juga, bukan hanya kompiler sementara. Ini mungkin sangat membatasi kemampuan untuk men-debug program yang dioptimalkan yang dikompilasi dengan -fno-var-pelacakan-tugas. Dalam bentuk yang dinegasikan, tanda ini mencegah penggabungan SSA dari variabel pengguna, termasuk yang sebaris. Opsi ini diaktifkan secara default.

-ftree-ter Lakukan penggantian ekspresi sementara selama SSA->fase normal. Lajang gunakan/sementara def tunggal diganti di lokasi penggunaannya dengan definisinya ekspresi. Ini menghasilkan kode non-GIMPLE, tetapi memberi lebih banyak ekspander pohon kompleks untuk dikerjakan sehingga menghasilkan generasi RTL yang lebih baik. Ini diaktifkan oleh default di -O dan lebih tinggi.

-ftree-slsr Lakukan pengurangan kekuatan garis lurus pada pohon. Ini mengakui terkait ekspresi yang melibatkan perkalian dan menggantinya dengan perhitungan yang lebih murah bila memungkinkan. Ini diaktifkan secara default di -O dan lebih tinggi.

-ftree-vectorize Melakukan vektorisasi pada pohon. Bendera ini memungkinkan -ftree-loop-vektorisasi serta -ftree-slp-vectorize jika tidak secara eksplisit ditentukan.

-ftree-loop-vektorisasi Lakukan vektorisasi loop pada pohon. Bendera ini diaktifkan secara default di -O3 dan kapan -ftree-vectorize diaktifkan.

-ftree-slp-vectorize Lakukan vektorisasi blok dasar pada pohon. Bendera ini diaktifkan secara default di -O3 serta ketika -ftree-vectorize diaktifkan.

-fvect-biaya-model=model Ubah model biaya yang digunakan untuk vektorisasi. NS model argumen harus menjadi salah satu dari tak terbatas, dinamis or murah. Dengan tak terbatas memodelkan jalur kode yang divektorkan adalah diasumsikan menguntungkan sementara dengan dinamis memodelkan penjaga cek runtime jalur kode vektor untuk mengaktifkannya hanya untuk jumlah iterasi yang kemungkinan akan dieksekusi lebih cepat daripada saat menjalankan loop skalar asli. NS murah model dinonaktifkan vektorisasi loop di mana melakukan hal itu akan menjadi penghalang biaya misalnya karena pemeriksaan runtime yang diperlukan untuk ketergantungan atau penyelarasan data tetapi sebaliknya sama dengan dinamis model. Model biaya default bergantung pada tanda pengoptimalan lainnya dan adalah antara dinamis or murah.

-fsimd-biaya-model=model Ubah model biaya yang digunakan untuk vektorisasi loop yang ditandai dengan OpenMP atau Cilk Ditambah arahan simd. NS model argumen harus menjadi salah satu dari tak terbatas, dinamis, murah. Semua nilai dari model memiliki arti yang sama seperti yang dijelaskan dalam -fvect-biaya-model dan oleh default model biaya yang didefinisikan dengan -fvect-biaya-model digunakan.

-ftree-vrp Lakukan Perbanyakan Rentang Nilai pada pohon. Ini mirip dengan propagasi konstan lulus, tetapi alih-alih nilai, rentang nilai disebarkan. Hal ini memungkinkan pengoptimal untuk menghapus pemeriksaan rentang yang tidak perlu seperti pemeriksaan terikat array dan penunjuk nol cek. Ini diaktifkan secara default di -O2 dan lebih tinggi. Penghapusan pemeriksaan penunjuk nol hanya dilakukan jika -fdelete-null-pointer-cek diaktifkan.

-fsplit-ivs-in-unroller Memungkinkan ekspresi nilai variabel induksi dalam iterasi selanjutnya dari unrolled loop menggunakan nilai pada iterasi pertama. Ini mematahkan ketergantungan yang lama rantai, sehingga meningkatkan efisiensi lewat penjadwalan.

Kombinasi dari -fweb dan CSE seringkali cukup untuk mendapatkan efek yang sama. Namun, itu tidak dapat diandalkan dalam kasus di mana tubuh loop lebih rumit daripada a blok dasar tunggal. Ini juga tidak berfungsi sama sekali pada beberapa arsitektur karena pembatasan dalam pass CSE.

Pengoptimalan ini diaktifkan secara default.

-fvariable-ekspansi-in-unroller Dengan opsi ini, kompiler membuat banyak salinan dari beberapa variabel lokal ketika: membuka gulungan, yang dapat menghasilkan kode superior.

-fpartial-inlining Bagian inline dari fungsi. Opsi ini memiliki efek apa pun hanya ketika inlining itu sendiri adalah dihidupkan oleh -finline-fungsi or -finline-kecil-fungsi Pilihan.

Diaktifkan di level -O2.

-predictive-commoning Lakukan optimasi kesamaan prediktif, yaitu menggunakan kembali perhitungan (terutama beban dan penyimpanan memori) yang dilakukan pada perulangan loop sebelumnya.

Opsi ini diaktifkan di level -O3.

-fprefetch-loop-array Jika didukung oleh mesin target, buat instruksi untuk mengambil memori terlebih dahulu ke meningkatkan kinerja loop yang mengakses array besar.

Opsi ini dapat menghasilkan kode yang lebih baik atau lebih buruk; hasilnya sangat tergantung pada struktur loop dalam kode sumber.

Dinonaktifkan pada level -Os.

-fno-lubang intip -fno-lubang2 Nonaktifkan pengoptimalan lubang intip khusus mesin apa pun. Perbedaan antara -fno-lubang intip serta -fno-lubang2 adalah bagaimana mereka diimplementasikan dalam kompiler; beberapa target menggunakan satu, beberapa menggunakan yang lain, beberapa menggunakan keduanya.

-fpeehole diaktifkan secara default. -fpeehole2 diaktifkan di level -O2, -O3, -Os.

-fno-tebak-cabang-probabilitas Jangan menebak probabilitas cabang menggunakan heuristik.

GCC menggunakan heuristik untuk menebak probabilitas cabang jika tidak disediakan oleh umpan balik profil (-fprofile-arc). Heuristik ini didasarkan pada aliran kontrol grafik. Jika beberapa probabilitas cabang ditentukan oleh "__builtin_expect", maka heuristik digunakan untuk menebak probabilitas cabang untuk sisa aliran kontrol grafik, dengan mempertimbangkan info "__builtin_expect". Interaksi antara heuristik dan "__builtin_expect" bisa rumit, dan dalam beberapa kasus, mungkin berguna untuk menonaktifkan heuristik sehingga efek "__builtin_expect" lebih mudah memahami.

Standarnya adalah -fguess-cabang-probabilitas di tingkat -O, -O2, -O3, -Os.

-freorder-blok Susun ulang blok dasar dalam fungsi yang dikompilasi untuk mengurangi jumlah yang diambil cabang dan meningkatkan lokalitas kode.

Diaktifkan di level -O2, -O3.

-freorder-blok-dan-partisi Selain menyusun ulang blok dasar dalam fungsi yang dikompilasi, untuk mengurangi jumlah cabang yang diambil, partisi blok dasar panas dan dingin menjadi bagian terpisah perakitan dan file .o, untuk meningkatkan kinerja lokalitas paging dan cache.

Pengoptimalan ini secara otomatis dimatikan dengan adanya penanganan pengecualian, untuk bagian linkonce, untuk fungsi dengan atribut bagian yang ditentukan pengguna dan pada sembarang arsitektur yang tidak mendukung bagian bernama.

Diaktifkan untuk x86 di level -O2, -O3.

-freorder-fungsi Susun ulang fungsi dalam file objek untuk meningkatkan lokalitas kode. Ini adalah diimplementasikan dengan menggunakan subbagian khusus ".text.hot" untuk yang paling sering dieksekusi fungsi dan ".text.unlikely" untuk fungsi yang tidak mungkin dieksekusi. Pengurutan ulang dilakukan dengan tautan sehingga format file objek harus mendukung bagian bernama dan tautan harus ditempatkan mereka dengan cara yang wajar.

Umpan balik profil juga harus tersedia untuk membuat opsi ini efektif. Lihat -fprofile-arc untuk rincian.

Diaktifkan di level -O2, -O3, -Os.

-fstrict-aliasing Izinkan kompiler untuk mengasumsikan aturan aliasing paling ketat yang berlaku untuk bahasa sedang dikompilasi. Untuk C (dan C++), ini mengaktifkan pengoptimalan berdasarkan jenis ekspresi. Secara khusus, objek dari satu jenis diasumsikan tidak pernah berada di alamat yang sama sebagai objek dari jenis yang berbeda, kecuali jenis yang hampir sama. Misalnya, "int unsigned" bisa alias "int", tapi bukan "void*" atau "double". A tipe karakter dapat alias tipe lainnya.

Berikan perhatian khusus pada kode seperti ini:

serikat a_union { di aku; ganda d; };

int f() { serikat a_union t; td = 3.0; kembali ti; }

Praktek membaca dari anggota serikat yang berbeda dari yang baru-baru ini ditulis ke (disebut "jenis-punning") adalah umum. Bahkan dengan -fstrict-aliasing, Tipe- punning diperbolehkan, asalkan memori diakses melalui tipe union. Sehingga kode di atas berfungsi seperti yang diharapkan. Namun, kode ini mungkin tidak:

int f() { serikat a_union t; int* ip; td = 3.0; ip = &t.i; kembali *ip; }

Demikian pula, akses dengan mengambil alamat, casting pointer yang dihasilkan dan dereferencing hasilnya memiliki perilaku yang tidak terdefinisi, bahkan jika pemeran menggunakan tipe gabungan, misalnya:

int f() { ganda d = 3.0; return ((union a_union *) &d)->i; }

The -fstrict-aliasing opsi diaktifkan di level -O2, -O3, -Os.

-fstrict-overflow Izinkan kompiler untuk mengasumsikan aturan overflow yang ditandatangani secara ketat, tergantung pada bahasanya sedang dikompilasi. Untuk C (dan C++) ini berarti meluap saat melakukan aritmatika dengan nomor yang ditandatangani tidak ditentukan, yang berarti bahwa kompiler dapat berasumsi bahwa itu tidak terjadi. Ini memungkinkan berbagai pengoptimalan. Misalnya, kompiler mengasumsikan bahwa ekspresi seperti "i + 10 > i" selalu benar untuk tanda "i". Asumsi ini adalah hanya valid jika overflow yang ditandatangani tidak ditentukan, karena ekspresinya salah jika "i + 10" meluap saat menggunakan aritmatika komplemen dua. Saat opsi ini berlaku, apa pun mencoba untuk menentukan apakah operasi pada bilangan yang ditandatangani harus ditulis hati-hati untuk tidak benar-benar melibatkan overflow.

Opsi ini juga memungkinkan kompiler untuk mengasumsikan semantik pointer yang ketat: diberikan a pointer ke objek, jika menambahkan offset ke pointer itu tidak menghasilkan pointer ke objek yang sama, penambahan tidak terdefinisi. Ini memungkinkan kompiler untuk menyimpulkan bahwa "p + u > p" selalu benar untuk pointer "p" dan unsigned integer "u". Ini asumsi hanya valid karena sampul pointer tidak terdefinisi, karena ekspresinya adalah false jika "p + u" meluap menggunakan aritmatika komplemen dua.

Lihat juga -fwrapv pilihan. Menggunakan -fwrapv berarti overflow bertanda integer adalah didefinisikan sepenuhnya: itu membungkus. Kapan -fwrapv digunakan, tidak ada perbedaan antara -fstrict-overflow serta -fno-ketat-meluap untuk bilangan bulat. Dengan -fwrapv jenis tertentu overflow diperbolehkan. Misalnya, jika kompiler mendapat overflow saat melakukan aritmatika pada konstanta, nilai yang meluap masih dapat digunakan dengan -fwrapv, tapi tidak jika tidak.

The -fstrict-overflow opsi diaktifkan di level -O2, -O3, -Os.

-falign-fungsi -falign-fungsi=n Sejajarkan awal fungsi dengan pangkat dua berikutnya yang lebih besar dari n, melompat ke n byte. Contohnya, -falign-fungsi=32 menyelaraskan fungsi ke 32-byte berikutnya batas, tapi -falign-fungsi=24 sejajar dengan batas 32-byte berikutnya hanya jika ini dapat dilakukan dengan melewatkan 23 byte atau kurang.

-fno-align-fungsi serta -falign-fungsi=1 adalah setara dan berarti bahwa fungsi tidak selaras.

Beberapa assembler hanya mendukung flag ini ketika n adalah kekuatan dua; dalam hal ini, itu adalah tercakup.

If n tidak ditentukan atau nol, gunakan default yang bergantung pada mesin.

Diaktifkan di level -O2, -O3.

-falign-label -falign-label=n Sejajarkan semua target cabang ke batas kekuatan dua, lewati hingga n byte suka -falign-fungsi. Opsi ini dapat dengan mudah membuat kode lebih lambat, karena harus disisipkan operasi dummy ketika target cabang tercapai dalam aliran kode yang biasa.

-fno-align-label serta -falign-labels=1 setara dan berarti label tidak selaras.

If -falign-loop or -falign-melompat berlaku dan lebih besar dari nilai ini, maka nilai-nilai mereka digunakan sebagai gantinya.

If n tidak ditentukan atau nol, gunakan default yang bergantung pada mesin yang sangat mungkin menjadi 1, artinya tidak ada keselarasan.

Diaktifkan di level -O2, -O3.

-falign-loop -falign-loop=n Sejajarkan loop ke batas kekuatan dua, lewati hingga n byte suka -falign-fungsi. Jika loop dieksekusi berkali-kali, ini menggantikan eksekusi dummy operasi.

-fno-align-loop serta -falign-loop=1 ekuivalen dan berarti perulangan tidak selaras.

If n tidak ditentukan atau nol, gunakan default yang bergantung pada mesin.

Diaktifkan di level -O2, -O3.

-falign-melompat -falign-melompat=n Sejajarkan target cabang ke batas kekuatan dua, untuk target cabang di mana target hanya bisa dicapai dengan melompat, melompat ke n byte suka -falign-fungsi. di kasus ini, tidak ada operasi dummy yang perlu dijalankan.

-fno-align-melompat serta -falign-melompat=1 ekuivalen dan berarti perulangan tidak selaras.

If n tidak ditentukan atau nol, gunakan default yang bergantung pada mesin.

Diaktifkan di level -O2, -O3.

-menyenangkan-pada-waktu Opsi ini dibiarkan karena alasan kompatibilitas. -menyenangkan-pada-waktu tidak berpengaruh, sedangkan -fno-unit-pada-waktu menyiratkan -fno-tingkat-atas-reorder serta -fno-bagian-jangkar.

Diaktifkan secara default.

-fno-tingkat-atas-reorder Jangan menyusun ulang fungsi tingkat atas, variabel, dan pernyataan "asm". Keluarkan mereka di urutan yang sama dengan yang muncul di file input. Ketika opsi ini digunakan, variabel statis yang tidak direferensikan tidak dihapus. Opsi ini dimaksudkan untuk mendukung kode yang ada yang bergantung pada pemesanan tertentu. Untuk kode baru, lebih baik menggunakan atribut bila memungkinkan.

Diaktifkan di level -O0. Ketika dinonaktifkan secara eksplisit, itu juga menyiratkan -fno-bagian-jangkar, yang jika tidak diaktifkan di -O0 pada beberapa target.

-fweb Membangun web seperti yang biasa digunakan untuk tujuan alokasi register dan menetapkan setiap web register semu individu. Ini memungkinkan izin alokasi register untuk beroperasi pseudos secara langsung, tetapi juga memperkuat beberapa lintasan pengoptimalan lainnya, seperti CSE, pengoptimal loop dan penghapus kode mati sepele. Itu bisa, bagaimanapun, membuat debugging tidak mungkin, karena variabel tidak lagi tinggal di "daftar rumah".

Diaktifkan secara default dengan -funroll-loop.

-seluruh-program Asumsikan bahwa unit kompilasi saat ini mewakili seluruh program yang sedang dikompilasi. Semua fungsi dan variabel publik dengan pengecualian "utama" dan yang digabungkan oleh atribut "externally_visible" menjadi fungsi statis dan pada dasarnya dioptimalkan lebih agresif oleh pengoptimal antarprosedural.

Opsi ini tidak boleh digunakan dalam kombinasi dengan -flto. Alih-alih mengandalkan tautan plugin harus memberikan informasi yang lebih aman dan tepat.

-flto[=n] Opsi ini menjalankan pengoptimal waktu tautan standar. Saat dipanggil dengan kode sumber, itu menghasilkan GIMPLE (salah satu representasi internal GCC) dan menulisnya ke ELF khusus bagian dalam file objek. Ketika file objek ditautkan bersama, semua badan fungsi dibaca dari bagian ELF ini dan dipakai seolah-olah telah bagian dari unit terjemahan yang sama.

Untuk menggunakan pengoptimal waktu tautan, -flto dan opsi pengoptimalan harus ditentukan di waktu kompilasi dan selama tautan terakhir. Sebagai contoh:

gcc -c -O2 -flto foo.c gcc -c -o2 -flto bar.c gcc -o myprog -flto -O2 foo.o bar.o

Dua pemanggilan pertama ke GCC menyimpan representasi bytecode dari GIMPLE menjadi spesial Bagian ELF di dalam foo.o serta bar.o. Doa terakhir membaca bytecode GIMPLE dari foo.o serta bar.o, menggabungkan dua file menjadi satu gambar internal, dan mengkompilasi hasilnya seperti biasa. Sejak keduanya foo.o serta bar.o digabung menjadi satu gambar, ini menyebabkan semua analisis dan pengoptimalan antarprosedural di GCC bekerja di seluruh dua file seolah-olah mereka adalah satu. Ini berarti, misalnya, inlinernya adalah mampu inline fungsi di bar.o menjadi fungsi dalam foo.o dan sebaliknya.

Cara lain (lebih sederhana) untuk mengaktifkan pengoptimalan waktu tautan adalah:

gcc -o myprog -flto -O2 foo.c bar.c

Di atas menghasilkan bytecode untuk foo.c serta bar.c, menggabungkannya menjadi satu Representasi GIMPLE dan optimalkan seperti biasa untuk menghasilkan prog saya.

Satu-satunya hal penting yang perlu diingat adalah untuk mengaktifkan pengoptimalan waktu tautan, Anda perlu menggunakan driver GCC untuk melakukan langkah-tautan. GCC kemudian secara otomatis melakukan optimasi link-time jika salah satu objek yang terlibat dikompilasi dengan -flto opsi baris perintah. Anda biasanya harus menentukan opsi pengoptimalan yang akan digunakan untuk optimasi link-time meskipun GCC mencoba untuk menjadi pintar menebak optimasi level untuk digunakan dari opsi yang digunakan pada waktu kompilasi jika Anda gagal menentukannya di tautan- waktu. Anda selalu dapat mengesampingkan keputusan otomatis untuk melakukan pengoptimalan waktu tautan di tautan-waktu dengan melewati -fno-lto ke perintah tautan.

Untuk mengefektifkan optimasi keseluruhan program, perlu untuk membuat keseluruhan tertentu asumsi program. Kompiler perlu mengetahui fungsi dan variabel apa saja yang dapat digunakan diakses oleh perpustakaan dan waktu proses di luar unit yang dioptimalkan waktu tautan. Kapan didukung oleh linker, plugin linker (lihat -fuse-linker-plugin) lulus informasi kepada kompiler tentang simbol yang digunakan dan terlihat secara eksternal. Ketika plugin tautan tidak tersedia, -seluruh-program harus digunakan untuk mengizinkan kompiler untuk membuat asumsi ini, yang mengarah pada keputusan pengoptimalan yang lebih agresif.

Ketika -fuse-linker-plugin tidak diaktifkan saat itu, ketika file dikompilasi dengan -flto, yang file objek yang dihasilkan lebih besar dari file objek biasa karena berisi GIMPLE bytecode dan kode akhir yang biasa (lihat -ffat-lto-objek. Ini berarti objek itu file dengan informasi KPP dapat ditautkan sebagai file objek biasa; jika -fno-lto telah berlalu ke linker, tidak ada optimasi antarprosedural yang diterapkan. Perhatikan bahwa ketika -fno-lemak-lto-objek diaktifkan, tahap kompilasi lebih cepat tetapi Anda tidak dapat melakukan a reguler, tautan non-LTO pada mereka.

Selain itu, flag optimasi yang digunakan untuk mengkompilasi file individual tidak tentu terkait dengan yang digunakan pada waktu tautan. Contohnya,

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

Ini menghasilkan file objek individual dengan kode assembler yang tidak dioptimalkan, tetapi biner yang dihasilkan prog saya dioptimalkan pada -O3. Jika, sebaliknya, biner terakhir adalah dihasilkan dengan -fno-lto, kemudian prog saya tidak dioptimalkan.

Saat memproduksi biner akhir, GCC hanya menerapkan optimasi waktu tautan untuk itu file yang mengandung bytecode. Oleh karena itu, Anda dapat mencampur dan mencocokkan file objek dan perpustakaan dengan bytecode GIMPLE dan kode objek akhir. GCC secara otomatis memilih file mana yang akan dioptimalkan dalam mode LTO dan file mana yang akan ditautkan tanpa lebih lanjut pengolahan.

Ada beberapa flag pembuatan kode yang diawetkan oleh GCC saat membuat bytecode, seperti: mereka perlu digunakan selama tahap tautan akhir. Umumnya opsi ditentukan di link-time menimpa yang ditentukan pada waktu kompilasi.

Jika Anda tidak menentukan opsi tingkat pengoptimalan -O pada waktu tautan lalu GCC menghitung satu berdasarkan tingkat optimasi yang digunakan saat mengkompilasi file objek. NS tingkat optimasi tertinggi menang di sini.

Saat ini, opsi berikut dan pengaturannya diambil dari file objek pertama yang secara eksplisit menentukannya: -fPIC, -fpic, -fpie, -fcommon, -feksepsi, -fnon-panggilan-pengecualian, -fgnu-tm dan semua -m bendera sasaran.

Bendera perubahan ABI tertentu diperlukan untuk mencocokkan di semua unit kompilasi dan mencoba untuk menimpa ini pada waktu tautan dengan nilai yang bertentangan diabaikan. Ini termasuk opsi seperti -freg-struct-return serta -fpcc-struct-return.

Pilihan lain seperti -ffp-kontrak, -fno-ketat-meluap, -fwrapv, -fno-trapv or -fno-strict-aliasing dilewatkan ke tahap tautan dan digabungkan secara konservatif untuk unit terjemahan yang bertentangan. Secara khusus -fno-ketat-meluap, -fwrapv serta -fno-trapv diutamakan dan misalnya -ffp-kontrak=mati diutamakan -ffp-kontrak=cepat. Anda dapat menimpanya pada waktu tautan.

Disarankan agar Anda mengkompilasi semua file yang berpartisipasi dalam tautan yang sama dengan opsi yang sama dan juga tentukan opsi tersebut pada waktu tautan.

Jika LTO menemukan objek dengan tautan C yang dideklarasikan dengan tipe yang tidak kompatibel secara terpisah unit terjemahan untuk dihubungkan bersama (perilaku tidak terdefinisi menurut ISO C99 6.2.7), diagnostik non-fatal dapat dikeluarkan. Perilaku masih belum ditentukan saat dijalankan waktu. Diagnostik serupa dapat diajukan untuk bahasa lain.

Fitur lain dari LTO adalah dimungkinkan untuk menerapkan optimasi antarprosedural pada file yang ditulis dalam berbagai bahasa:

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

Perhatikan bahwa tautan terakhir selesai dengan g ++ untuk mendapatkan pustaka runtime C++ dan -lgfortran ditambahkan untuk mendapatkan perpustakaan runtime Fortran. Secara umum, saat mencampur bahasa dalam mode LTO, Anda harus menggunakan opsi perintah tautan yang sama seperti saat mencampur bahasa dalam kompilasi reguler (non-LTO).

Jika file objek yang berisi bytecode GIMPLE disimpan dalam arsip perpustakaan, katakan libfoo.a, dimungkinkan untuk mengekstrak dan menggunakannya di tautan LTO jika Anda menggunakan penghubung dengan dukungan plugin. Untuk membuat perpustakaan statis yang cocok untuk LTO, gunakan gcc-ar serta gcc-ranlib alih-alih ar serta ranlib; untuk menampilkan simbol file objek dengan GIMPLE bytecode, gunakan gcc-nm. Perintah-perintah itu mengharuskan ar, ranlib serta nm telah dikompilasi dengan dukungan plugin. Pada waktu tautan, gunakan bendera -fuse-linker-plugin untuk memastikan bahwa perpustakaan berpartisipasi dalam proses optimasi LTO:

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

Dengan plugin linker diaktifkan, linker mengekstrak file GIMPLE yang dibutuhkan dari libfoo.a dan meneruskannya ke GCC yang sedang berjalan untuk menjadikannya bagian dari agregat Gambar GIMPLE untuk dioptimalkan.

Jika Anda tidak menggunakan tautan dengan dukungan plugin dan/atau tidak mengaktifkan tautan plugin, lalu objek di dalamnya libfoo.a diekstraksi dan ditautkan seperti biasa, tetapi mereka tidak berpartisipasi dalam proses optimasi KPP. Untuk membuat perpustakaan statis cocok untuk pengoptimalan LTO dan tautan biasa, kompilasi file objeknya dengan -flto -ffat-lto-objek.

Pengoptimalan waktu tautan tidak memerlukan kehadiran seluruh program untuk beroperasi. Jika program tidak memerlukan simbol apa pun untuk diekspor, dimungkinkan untuk menggabungkan -flto serta -seluruh-program untuk memungkinkan pengoptimal antarprosedural untuk menggunakan lebih banyak asumsi agresif yang dapat mengarah pada peningkatan peluang pengoptimalan. Penggunaan -seluruh-program tidak diperlukan saat plugin linker aktif (lihat -fuse-linker-plugin).

Implementasi LTO saat ini tidak berusaha untuk menghasilkan bytecode yang portabel antara berbagai jenis host. File bytecode diversi dan di sana adalah pemeriksaan versi yang ketat, jadi file bytecode yang dihasilkan dalam satu versi GCC tidak bekerja dengan versi GCC yang lebih lama atau lebih baru.

Pengoptimalan waktu tautan tidak berfungsi dengan baik dengan pembuatan informasi debug. Menggabungkan -flto dengan -g saat ini eksperimental dan diharapkan menghasilkan yang tidak terduga hasil.

Jika Anda menentukan opsional n, pengoptimalan dan pembuatan kode dilakukan pada waktu tautan dieksekusi secara paralel menggunakan n pekerjaan paralel dengan memanfaatkan terpasang membuat program. Variabel lingkungan MEMBUAT dapat digunakan untuk mengganti program yang digunakan. Standarnya nilai untuk n adalah 1.

Anda juga bisa menentukan -flto=server pekerjaan untuk menggunakan mode server pekerjaan GNU make untuk menentukan jumlah pekerjaan paralel. Ini berguna ketika Makefile memanggil GCC sudah mengeksekusi secara paralel. Anda harus menambahkan a + ke resep perintah di induk Makefile agar ini berfungsi. Opsi ini kemungkinan hanya berfungsi jika MEMBUAT adalah GNU membuat.

-flto-partisi=ganggang Tentukan algoritma partisi yang digunakan oleh pengoptimal waktu tautan. Nilainya adalah antara 1 ke1 untuk menentukan partisi yang mencerminkan file sumber asli atau seimbang untuk menentukan partisi menjadi potongan berukuran sama (bila memungkinkan) atau max untuk membuat partisi baru untuk setiap simbol jika memungkinkan. Menentukan tak satupun sebagai algoritma menonaktifkan partisi dan streaming sepenuhnya. Nilai defaultnya adalah seimbang. Sementara 1 ke1 dapat digunakan sebagai solusi untuk berbagai masalah pemesanan kode, max partisi dimaksudkan untuk pengujian internal saja. Nilai satu menentukan itu tepat satu partisi harus digunakan sementara nilainya tak satupun melewati partisi dan mengeksekusi langkah optimasi link-time langsung dari fase WPA.

-flto-odr-type-penggabungan Aktifkan streaming jenis yang rusak, nama jenis C++ dan penyatuannya di waktu hubungan. Ini meningkatkan ukuran file objek LTO, tetapi mengaktifkan diagnostik tentang One Definisi Pelanggaran aturan.

-flto-tingkat-kompresi=n Opsi ini menentukan tingkat kompresi yang digunakan untuk bahasa perantara yang ditulis ke file objek LTO, dan hanya bermakna dalam hubungannya dengan mode LTO (-flto). Nilai yang valid adalah 0 (tanpa kompresi) hingga 9 (kompresi maksimum). Nilai di luar ini rentang dijepit ke 0 atau 9. Jika opsi tidak diberikan, default seimbang pengaturan kompresi digunakan.

-flto-laporan Mencetak laporan dengan detail internal tentang cara kerja pengoptimal waktu tautan. NS isi laporan ini bervariasi dari versi ke versi. Ini dimaksudkan untuk berguna bagi GCC pengembang saat memproses file objek dalam mode LTO (melalui -flto).

Dinonaktifkan secara default.

-flto-laporan-wpa Seperti -flto-laporan, tetapi hanya mencetak untuk fase WPA dari Pengoptimalan Waktu Tautan.

-fuse-linker-plugin Mengaktifkan penggunaan plugin linker selama optimasi link-time. Opsi ini bergantung pada dukungan plugin di tautan, yang tersedia dalam emas atau di GNU ld 2.21 atau lebih baru.

Opsi ini memungkinkan ekstraksi file objek dengan bytecode GIMPLE dari perpustakaan arsip. Ini meningkatkan kualitas pengoptimalan dengan memaparkan lebih banyak kode ke tautan- pengoptimal waktu. Informasi ini menentukan simbol apa yang dapat diakses secara eksternal (oleh objek non-LTO atau selama penautan dinamis). Peningkatan kualitas kode yang dihasilkan pada binari (dan perpustakaan bersama yang menggunakan visibilitas tersembunyi) mirip dengan -seluruh-program. Lihat -flto untuk penjelasan tentang efek bendera ini dan bagaimana caranya Gunakan.

Opsi ini diaktifkan secara default ketika dukungan LTO di GCC diaktifkan dan GCC telah dikonfigurasi untuk digunakan dengan plugin pendukung tautan (GNU ld 2.21 atau lebih baru atau emas).

-ffat-lto-objek Objek LTO gemuk adalah file objek yang berisi bahasa perantara dan kode objek. Ini membuatnya dapat digunakan untuk penautan LTO dan penautan normal. Ini opsi ini hanya efektif jika dikompilasi dengan -flto dan diabaikan pada waktu tautan.

-fno-lemak-lto-objek meningkatkan waktu kompilasi melalui LTO biasa, tetapi membutuhkan rantai alat lengkap untuk mengetahui LTO. Itu membutuhkan tautan dengan dukungan plugin tautan untuk fungsionalitas dasar. Selain itu, nm, ar serta ranlib perlu mendukung tautan plugin untuk memungkinkan lingkungan build berfitur lengkap (mampu membangun statis perpustakaan dll). GCC menyediakan gcc-ar, gcc-nm, gcc-ranlib pembungkus untuk melewati pilihan yang tepat untuk alat ini. Dengan makefile LTO tanpa lemak perlu dimodifikasi untuk digunakan Mereka.

Standarnya adalah -fno-lemak-lto-objek pada target dengan dukungan plugin linker.

-fbandingkan-elimin Setelah alokasi register dan pemisahan instruksi alokasi pasca-register, identifikasi instruksi aritmatika yang menghitung flag prosesor yang mirip dengan operasi perbandingan berdasarkan aritmatika tersebut. Jika memungkinkan, hilangkan operasi perbandingan eksplisit.

Pass ini hanya berlaku untuk target tertentu yang tidak dapat secara eksplisit mewakili operasi perbandingan sebelum alokasi register selesai.

Diaktifkan di level -O, -O2, -O3, -Os.

-fcprop-register Setelah alokasi register dan pemisahan instruksi alokasi pasca-register, lakukan pass propagasi salinan untuk mencoba mengurangi ketergantungan penjadwalan dan kadang-kadang menghilangkan salinan.

Diaktifkan di level -O, -O2, -O3, -Os.

-fprofile-koreksi Profil yang dikumpulkan menggunakan biner terinstrumentasi untuk program multi-utas mungkin: tidak konsisten karena ketinggalan pembaruan penghitung. Ketika opsi ini ditentukan, GCC menggunakan heuristik untuk memperbaiki atau memuluskan ketidakkonsistenan tersebut. Secara default, GCC memancarkan pesan kesalahan ketika profil yang tidak konsisten terdeteksi.

-fprofile-dir=path Atur direktori untuk mencari file data profil ke path. Pilihan ini hanya memengaruhi data profil yang dihasilkan oleh -fprofile-hasilkan, -cakupan-ftest, -fprofile-arc dan digunakan oleh -fprofile-penggunaan serta -fbranch-probabilitas dan terkait pilihan. Jalur absolut dan relatif dapat digunakan. Secara default, GCC menggunakan direktori saat ini sebagai path, sehingga file data profil muncul di direktori yang sama dengan berkas objek.

-fprofile-hasilkan -fprofile-hasilkan=path Aktifkan opsi yang biasanya digunakan untuk aplikasi instrumentasi untuk menghasilkan profil yang berguna untuk kompilasi ulang nanti dengan optimasi berbasis umpan balik profil. Anda harus menggunakan -fprofile-hasilkan baik saat kompilasi maupun saat menautkan program Anda.

Opsi berikut diaktifkan: -fprofile-arc, -fprofile-nilai, -fvpt.

If path ditentukan, GCC melihat path untuk menemukan file data umpan balik profil. Lihat -fprofile-dir.

-fprofile-penggunaan -fprofile-gunakan=path Aktifkan pengoptimalan yang diarahkan pada umpan balik profil, dan pengoptimalan berikut yang umumnya menguntungkan hanya dengan umpan balik profil yang tersedia: -fbranch-probabilitas, -fvpt, -funroll-loop, -fpeel-loop, -pelacak, -ftree-vectorize, dan loop-bebas- mendistribusikan-pola.

Secara default, GCC mengeluarkan pesan kesalahan jika profil umpan balik tidak cocok dengan Kode sumber. Kesalahan ini dapat diubah menjadi peringatan dengan menggunakan -Wcoverage-mismatch. Perhatikan ini dapat menghasilkan kode yang dioptimalkan dengan buruk.

If path ditentukan, GCC melihat path untuk menemukan file data umpan balik profil. Lihat -fprofile-dir.

-faauto-profil -faauto-profil=path Aktifkan pengoptimalan berbasis umpan balik berbasis pengambilan sampel, dan pengoptimalan berikut yang umumnya hanya menguntungkan dengan umpan balik profil yang tersedia: -fbranch-probabilitas, -fvpt, -funroll-loop, -fpeel-loop, -pelacak, -ftree-vectorize, -finline-fungsi, -fipa-cp, -fipa-cp-klon, -predictive-commoning, -funswitch-loop, -fgcse-setelah-reload, dan -ftree-loop-distribusi-pola.

path adalah nama file yang berisi informasi profil AutoFDO. Jika dihilangkan, itu default ke fbdata.afdo di direktori saat ini.

Memproduksi file data profil AutoFDO memerlukan menjalankan program Anda dengan Perf utilitas pada sistem target GNU/Linux yang didukung. Untuk informasi lebih lanjut, lihat .

Misalnya

catatan perf -e br_inst_retired:near_taken -b -o perf.data \ -- program_anda

Kemudian gunakan create_gcov alat untuk mengonversi data profil mentah ke format yang dapat digunakan oleh GCC. Anda juga harus menyediakan biner yang tidak dilucuti untuk program Anda ke ini alat. Lihathttps://github.com/google/autofdo>.

Misalnya

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

Opsi berikut mengontrol perilaku kompiler terkait aritmatika titik-mengambang. Opsi ini menukar antara kecepatan dan ketepatan. Semua harus diaktifkan secara khusus.

-toko-terapung Jangan simpan variabel floating-point dalam register, dan hambat opsi lain yang mungkin mengubah apakah nilai floating-point diambil dari register atau memori.

Opsi ini mencegah presisi berlebih yang tidak diinginkan pada mesin seperti 68000 di mana register mengambang (dari 68881) menjaga presisi lebih dari yang seharusnya "ganda" memiliki. Demikian pula untuk arsitektur x86. Untuk sebagian besar program, presisi berlebih tidak hanya baik, tetapi beberapa program bergantung pada definisi yang tepat dari IEEE floating titik. Menggunakan -toko-terapung untuk program semacam itu, setelah memodifikasinya untuk menyimpan semua komputasi menengah yang bersangkutan ke dalam variabel.

-fexcess-presisi=gaya Opsi ini memungkinkan kontrol lebih lanjut atas presisi berlebih pada mesin di mana floating- register titik memiliki lebih presisi daripada tipe "float" dan "double" IEEE dan prosesor tidak mendukung operasi pembulatan ke jenis tersebut. Secara default, -fexcess-presisi = cepat berlaku; ini berarti bahwa operasi dilakukan di ketepatan register dan tidak dapat diprediksi saat membulatkan ke tipe ditentukan dalam kode sumber berlangsung. Saat mengkompilasi C, jika -fexcess-presisi = standar ditentukan maka presisi berlebih mengikuti aturan ditentukan dalam ISO C99; khususnya, baik pemeran dan penugasan menyebabkan nilai menjadi dibulatkan ke tipe semantiknya (sedangkan -toko-terapung hanya mempengaruhi tugas). Opsi ini diaktifkan secara default untuk C jika opsi kesesuaian yang ketat seperti: -std=c99 digunakan.

-fexcess-presisi = standar tidak diimplementasikan untuk bahasa selain C, dan tidak memiliki efek jika optimasi -funsafe-matematika or -cepat-matematika ditentukan. Di x86, itu juga tidak berpengaruh jika -mfpmat=sse or -mfpmat=sse+387 ditentukan; di mantan kasus, semantik IEEE berlaku tanpa presisi berlebih, dan yang terakhir, pembulatan adalah tak terduga.

-cepat-matematika Tetapkan opsi -fno-matematika-errno, optimasi -funsafe-matematika, -finite-matematika-saja, -fno-pembulatan-matematika, -fno-signaling-nans serta -fcx-terbatas-rentang.

Opsi ini menyebabkan makro praprosesor "__FAST_MATH__" ditentukan.

Opsi ini tidak diaktifkan oleh siapa pun -O pilihan selain -cepat karena dapat mengakibatkan keluaran yang salah untuk program yang bergantung pada implementasi IEEE atau ISO yang tepat aturan/spesifikasi untuk fungsi matematika. Namun, itu mungkin menghasilkan kode yang lebih cepat untuk program yang tidak memerlukan jaminan spesifikasi ini.

-fno-matematika-errno Jangan menyetel "errno" setelah memanggil fungsi matematika yang dijalankan dengan satu instruksi, misalnya, "sqrt". Sebuah program yang bergantung pada pengecualian IEEE untuk kesalahan matematika penanganan mungkin ingin menggunakan bendera ini untuk kecepatan sambil mempertahankan aritmatika IEEE kompatibilitas.

Opsi ini tidak diaktifkan oleh siapa pun -O opsi karena dapat menghasilkan output yang salah untuk program yang bergantung pada implementasi IEEE atau ISO yang tepat aturan/spesifikasi untuk fungsi matematika. Namun, itu mungkin menghasilkan kode yang lebih cepat untuk program yang tidak memerlukan jaminan spesifikasi ini.

Standarnya adalah -fmath-errno.

Pada sistem Darwin, perpustakaan matematika tidak pernah menetapkan "errno". Oleh karena itu tidak ada alasan bagi kompiler untuk mempertimbangkan kemungkinan itu, dan -fno-matematika-errno adalah standar.

optimasi -funsafe-matematika Izinkan pengoptimalan untuk aritmatika titik-mengambang yang (a) mengasumsikan bahwa argumen dan hasilnya valid dan (b) mungkin melanggar standar IEEE atau ANSI. Ketika digunakan pada waktu tautan, itu mungkin termasuk perpustakaan atau file startup yang mengubah kata kontrol FPU default atau optimasi serupa lainnya.

Opsi ini tidak diaktifkan oleh siapa pun -O opsi karena dapat menghasilkan output yang salah untuk program yang bergantung pada implementasi IEEE atau ISO yang tepat aturan/spesifikasi untuk fungsi matematika. Namun, itu mungkin menghasilkan kode yang lebih cepat untuk program yang tidak memerlukan jaminan spesifikasi ini. Mengaktifkan -fno-ditandatangani-nol, -fno-perangkap-matematika, -fasosiatif-matematika serta -freciprocal-matematika.

Standarnya adalah -fno-tidak aman-matematika-optimasi.

-fasosiatif-matematika Izinkan re-asosiasi operand dalam rangkaian operasi floating-point. Ini melanggar standar bahasa ISO C dan C++ dengan kemungkinan mengubah hasil komputasi. CATATAN: pemesanan ulang dapat mengubah tanda nol serta mengabaikan NaN dan menghambat or buat underflow atau overflow (dan karenanya tidak dapat digunakan pada kode yang bergantung pada pembulatan perilaku seperti "(x + 2**52) - 2**52". Mungkin juga menyusun ulang perbandingan titik-mengambang dan dengan demikian tidak dapat digunakan ketika perbandingan berurutan diperlukan. Opsi ini mengharuskan kedua -fno-ditandatangani-nol serta -fno-perangkap-matematika mulai berlaku. Apalagi itu tidak membuat banyak akal dengan -frounding-matematika. Untuk Fortran opsi diaktifkan secara otomatis ketika kedua -fno-ditandatangani-nol serta -fno-perangkap-matematika sedang berlaku.

Standarnya adalah -fno-asosiatif-matematika.

-freciprocal-matematika Izinkan kebalikan dari nilai yang akan digunakan alih-alih membagi dengan nilai jika ini memungkinkan pengoptimalan. Misalnya "x / y" dapat diganti dengan "x * (1/y)", yaitu berguna jika "(1/y)" tunduk pada eliminasi subekspresi umum. Perhatikan bahwa ini kehilangan presisi dan meningkatkan jumlah flop yang beroperasi pada nilai.

Standarnya adalah -fno-timbal balik-matematika.

-finite-matematika-saja Izinkan pengoptimalan untuk aritmatika titik-mengambang yang mengasumsikan bahwa argumen dan hasilnya bukan NaN atau +-Infs.

Opsi ini tidak diaktifkan oleh siapa pun -O opsi karena dapat menghasilkan output yang salah untuk program yang bergantung pada implementasi IEEE atau ISO yang tepat aturan/spesifikasi untuk fungsi matematika. Namun, itu mungkin menghasilkan kode yang lebih cepat untuk program yang tidak memerlukan jaminan spesifikasi ini.

Standarnya adalah -fno-terbatas-matematika-saja.

-fno-ditandatangani-nol Izinkan pengoptimalan untuk aritmatika titik-mengambang yang mengabaikan penandaan nol. Aritmatika IEEE menentukan perilaku nilai +0.0 dan -0.0 yang berbeda, yang kemudian: melarang penyederhanaan ekspresi seperti x+0.0 atau 0.0*x (bahkan dengan -finite-matematika-saja). Opsi ini menyiratkan bahwa tanda hasil nol bukanlah penting.

Standarnya adalah -fsigned-nol.

-fno-perangkap-matematika Kompilasi kode dengan asumsi bahwa operasi floating-point tidak dapat menghasilkan yang terlihat oleh pengguna perangkap. Perangkap ini termasuk pembagian dengan nol, overflow, underflow, hasil yang tidak tepat dan operasi yang tidak valid. Opsi ini mengharuskan -fno-signaling-nans mulai berlaku. Menyetel opsi ini memungkinkan kode lebih cepat jika seseorang mengandalkan aritmatika IEEE "non-stop", misalnya.

Opsi ini tidak boleh diaktifkan oleh siapa pun -O pilihan karena dapat mengakibatkan keluaran yang salah untuk program yang bergantung pada implementasi IEEE atau ISO yang tepat aturan/spesifikasi untuk fungsi matematika.

Standarnya adalah -frapping-matematika.

-frounding-matematika Nonaktifkan transformasi dan pengoptimalan yang mengasumsikan pembulatan titik-mengambang default perilaku. Ini adalah pembulatan ke nol untuk semua konversi floating point ke integer, dan bulat-ke-terdekat untuk semua pemotongan aritmatika lainnya. Opsi ini seharusnya ditentukan untuk program yang mengubah mode pembulatan FP secara dinamis, atau mungkin dieksekusi dengan mode pembulatan non-default. Opsi ini menonaktifkan pelipatan konstan ekspresi floating-point pada waktu kompilasi (yang mungkin dipengaruhi oleh mode pembulatan) dan transformasi aritmatika yang tidak aman dengan adanya sign-dependent mode pembulatan.

Standarnya adalah -fno-pembulatan-matematika.

Opsi ini bersifat eksperimental dan saat ini tidak menjamin untuk menonaktifkan semua GCC optimasi yang dipengaruhi oleh mode pembulatan. Versi GCC yang akan datang mungkin menyediakan kontrol yang lebih baik dari pengaturan ini menggunakan pragma "FENV_ACCESS" C99. Baris perintah ini opsi akan digunakan untuk menentukan status default untuk "FENV_ACCESS".

-fsignaling-nans Kompilasi kode dengan asumsi bahwa NaN pensinyalan IEEE dapat menghasilkan jebakan yang terlihat oleh pengguna selama operasi floating-point. Menyetel opsi ini menonaktifkan pengoptimalan yang mungkin berubah jumlah pengecualian yang terlihat dengan NaN pensinyalan. Opsi ini menyiratkan -frapping-matematika.

Opsi ini menyebabkan makro praprosesor "__SUPPORT_SNAN__" ditetapkan.

Standarnya adalah -fno-signaling-nans.

Opsi ini bersifat eksperimental dan saat ini tidak menjamin untuk menonaktifkan semua GCC optimasi yang mempengaruhi perilaku NaN pensinyalan.

-fsingle-presisi-konstan Perlakukan konstanta floating-point sebagai presisi tunggal alih-alih mengonversi secara implisit mereka ke konstanta presisi ganda.

-fcx-terbatas-rentang Saat diaktifkan, opsi ini menyatakan bahwa langkah pengurangan jangkauan tidak diperlukan saat melakukan pembagian yang kompleks. Juga, tidak ada pemeriksaan apakah hasil a perkalian atau pembagian kompleks adalah "NaN + I*NaN", dengan upaya untuk menyelamatkan situasi dalam kasus itu. Standarnya adalah -fno-cx-terbatas-rentang, tetapi diaktifkan oleh -cepat-matematika.

Opsi ini mengontrol pengaturan default pragma "CX_LIMITED_RANGE" ISO C99. Namun demikian, opsi ini berlaku untuk semua bahasa.

-fcx-fortran-rules Perkalian dan pembagian kompleks mengikuti aturan Fortran. Pengurangan jangkauan dilakukan sebagai bagian dari pembagian kompleks, tetapi tidak ada pemeriksaan apakah hasil dari kompleks perkalian atau pembagian adalah "NaN + I*NaN", dengan upaya untuk menyelamatkan situasi dalam hal itu.

Standarnya adalah -fno-cx-fortran-rules.

Opsi berikut mengontrol pengoptimalan yang dapat meningkatkan kinerja, tetapi tidak: diaktifkan oleh apa saja -O pilihan. Bagian ini mencakup opsi eksperimental yang mungkin menghasilkan kode rusak.

-fbranch-probabilitas Setelah menjalankan program yang dikompilasi dengan -fprofile-arc, Anda dapat mengkompilasinya untuk kedua kalinya menggunakan -fbranch-probabilitas, untuk meningkatkan pengoptimalan berdasarkan berapa kali diambil masing-masing cabang. Ketika sebuah program dikompilasi dengan -fprofile-arc keluar, itu menghemat eksekusi busur dihitung ke file bernama nama sumber.gcda untuk setiap file sumber. NS informasi dalam file data ini sangat tergantung pada struktur yang dihasilkan kode, jadi Anda harus menggunakan kode sumber yang sama dan opsi pengoptimalan yang sama untuk keduanya kompilasi.

Dengan -fbranch-probabilitas, GCC menempatkan REG_BR_PROB catatan pada masing-masing JUMP_INSN serta CALL_INSN. Ini dapat digunakan untuk meningkatkan optimasi. Saat ini, mereka hanya digunakan di satu tempat: di reorg.c, alih-alih menebak jalur mana yang paling mungkin dilalui cabang ambil, itu REG_BR_PROB nilai digunakan untuk menentukan dengan tepat jalur mana yang diambil lebih banyak sering.

-fprofile-nilai Jika digabungkan dengan -fprofile-arc, itu menambahkan kode sehingga beberapa data tentang nilai ekspresi dalam program dikumpulkan.

Dengan -fbranch-probabilitas, ia membaca kembali data yang dikumpulkan dari profil nilai ekspresi untuk penggunaan dalam optimasi.

Diaktifkan dengan -fprofile-hasilkan serta -fprofile-penggunaan.

-fprofile-reorder-fungsi Pengurutan ulang fungsi berdasarkan instrumentasi profil mengumpulkan waktu eksekusi pertama dari suatu fungsi dan mengurutkan fungsi-fungsi ini dalam urutan menaik.

Diaktifkan dengan -fprofile-penggunaan.

-fvpt Jika digabungkan dengan -fprofile-arc, opsi ini menginstruksikan kompiler untuk menambahkan kode ke mengumpulkan informasi tentang nilai-nilai ekspresi.

Dengan -fbranch-probabilitas, ia membaca kembali data yang dikumpulkan dan benar-benar melakukan optimasi berdasarkan mereka. Saat ini pengoptimalan mencakup spesialisasi operasi pembagian menggunakan pengetahuan tentang nilai penyebut.

-rename-register Cobalah untuk menghindari ketergantungan palsu dalam kode terjadwal dengan memanfaatkan register yang tersisa berakhir setelah alokasi register. Pengoptimalan ini paling menguntungkan prosesor dengan banyak dari register. Bergantung pada format informasi debug yang diadopsi oleh target, namun, itu dapat membuat debugging menjadi tidak mungkin, karena variabel tidak lagi tinggal di "rumah daftar".

Diaktifkan secara default dengan -funroll-loop serta -fpeel-loop.

-fschedule-fusion Melakukan passing dependen target melalui aliran instruksi untuk menjadwalkan instruksi dari jenis yang sama bersama-sama karena mesin target dapat mengeksekusinya lebih efisien jika mereka berdekatan satu sama lain dalam aliran instruksi.

Diaktifkan di level -O2, -O3, -Os.

-pelacak Lakukan duplikasi ekor untuk memperbesar ukuran superblok. Transformasi ini menyederhanakan aliran kontrol fungsi yang memungkinkan pengoptimalan lain untuk melakukan pekerjaan yang lebih baik.

Diaktifkan dengan -fprofile-penggunaan.

-funroll-loop Buka gulungan loop yang jumlah iterasinya dapat ditentukan pada waktu kompilasi atau setelahnya masuk ke loop. -funroll-loop menyiratkan -frerun-cse-setelah-loop, -fweb serta -rename-register. Ini juga mengaktifkan pengelupasan loop lengkap (yaitu penghapusan lengkap dari loop dengan sejumlah kecil iterasi yang konstan). Opsi ini membuat kode lebih besar, dan mungkin atau mungkin tidak membuatnya berjalan lebih cepat.

Diaktifkan dengan -fprofile-penggunaan.

-funroll-all-loop Buka gulungan semua loop, bahkan jika jumlah iterasinya tidak pasti saat loopnya masuk. Ini biasanya membuat program berjalan lebih lambat. -funroll-all-loop menyiratkan pilihan yang sama dengan -funroll-loop.

-fpeel-loop Mengupas loop yang informasinya cukup sehingga tidak banyak bergulir (dari umpan balik profil). Ini juga mengaktifkan pengelupasan loop lengkap (yaitu penghapusan lengkap dari loop dengan jumlah iterasi kecil yang konstan).

Diaktifkan dengan -fprofile-penggunaan.

-fmove-loop-invarian Mengaktifkan gerakan invarian loop di pengoptimal loop RTL. Diaktifkan di level -O1

-funswitch-loop Pindahkan cabang dengan kondisi invarian loop keluar dari loop, dengan duplikat dari loop pada kedua cabang (dimodifikasi sesuai dengan hasil kondisi).

-ffungsi-bagian -fdata-bagian Tempatkan setiap fungsi atau item data ke dalam bagiannya sendiri di file output jika targetnya mendukung bagian yang sewenang-wenang. Nama fungsi atau nama item data menentukan nama bagian dalam file output.

Gunakan opsi ini pada sistem di mana penaut dapat melakukan pengoptimalan untuk ditingkatkan lokalitas referensi dalam ruang instruksi. Sebagian besar sistem menggunakan objek ELF format dan prosesor SPARC yang menjalankan Solaris 2 memiliki penghubung dengan pengoptimalan seperti itu. AIX mungkin memiliki pengoptimalan ini di masa mendatang.

Hanya gunakan opsi ini jika ada manfaat signifikan dari melakukannya. Ketika kamu tentukan opsi ini, assembler dan linker membuat objek yang lebih besar dan dapat dieksekusi file dan juga lebih lambat. Anda tidak dapat menggunakan gprof pada semua sistem jika Anda menentukan ini opsi, dan Anda mungkin mengalami masalah dengan debugging jika Anda menentukan opsi ini dan -g.

-fbranch-target-load-optimalkan Lakukan optimasi beban register target cabang sebelum threading prolog / epilog. Penggunaan register target biasanya hanya dapat diekspos selama memuat ulang, sehingga mengangkat beban keluar dari loop dan melakukan penjadwalan antar-blok membutuhkan optimasi terpisah lulus.

-fbranch-target-memuat-mengoptimalkan2 Lakukan optimasi beban register target cabang setelah threading prolog / epilog.

-fbtr-bb-eksklusif Saat melakukan optimasi beban register target cabang, jangan gunakan kembali target cabang register dalam setiap blok dasar.

-fstack-pelindung Keluarkan kode tambahan untuk memeriksa buffer overflows, seperti serangan stack smashing. Ini dilakukan dengan menambahkan variabel penjaga ke fungsi dengan objek yang rentan. Ini termasuk fungsi yang memanggil "alloca", dan fungsi dengan buffer lebih besar dari 8 byte. Penjaga diinisialisasi ketika suatu fungsi dimasukkan dan kemudian diperiksa ketika fungsi keluar. Jika pemeriksaan penjaga gagal, pesan kesalahan dicetak dan program keluar.

-fstack-pelindung-semua Seperti -fstack-pelindung kecuali bahwa semua fungsi dilindungi.

-fstack-pelindung-kuat Seperti -fstack-pelindung tetapi mencakup fungsi tambahan yang harus dilindungi --- itu yang memiliki definisi array lokal, atau memiliki referensi ke alamat bingkai lokal.

-fstack-pelindung-eksplisit Seperti -fstack-pelindung tetapi hanya melindungi fungsi-fungsi yang memiliki atribut "stack_protect"

-fstdarg-opt Optimalkan prolog fungsi argumen variadik sehubungan dengan penggunaan itu argumen.

CATATAN: Di Ubuntu 14.10 dan versi yang lebih baru, -fstack-pelindung-kuat diaktifkan oleh default untuk C, C++, ObjC, ObjC++, jika tidak ada -fno-stack-protector, -nostdlib, juga -berdiri bebas Ditemukan.

-fsection-jangkar Cobalah untuk mengurangi jumlah perhitungan alamat simbolik dengan menggunakan "jangkar" bersama simbol untuk mengatasi objek terdekat. Transformasi ini dapat membantu mengurangi jumlahnya entri GOT dan akses GOT pada beberapa target.

Misalnya, implementasi fungsi "foo" berikut:

statis int a, b, c; int foo (void) { kembali a + b + c; }

biasanya menghitung alamat ketiga variabel, tetapi jika Anda mengompilasinya dengan -fsection-jangkar, itu mengakses variabel dari titik jangkar umum sebagai gantinya. NS efeknya mirip dengan pseudocode berikut (yang tidak valid C):

int foo (kosong) { daftar int *xr = &x; kembali xr[&a - &x] + xr[&b - &x] + xr[&c - &x]; }

Tidak semua target mendukung opsi ini.

--param nama=nilai Di beberapa tempat, GCC menggunakan berbagai konstanta untuk mengontrol jumlah optimasi yang dilakukan. Misalnya, GCC tidak inline fungsi yang berisi lebih dari tertentu sejumlah instruksi. Anda dapat mengontrol beberapa konstanta ini di baris perintah menggunakan --param .

Nama-nama parameter tertentu, dan arti nilainya, terkait dengan internal kompiler, dan dapat berubah tanpa pemberitahuan di masa mendatang rilis.

Dalam setiap kasus, nilai adalah bilangan bulat. Pilihan yang diperbolehkan untuk nama adalah:

dapat diprediksi-cabang-hasil Ketika cabang diprediksi akan diambil dengan probabilitas lebih rendah dari ambang batas ini (dalam persen), maka dianggap dapat diprediksi dengan baik. Standarnya adalah 10.

max-crossjump-tepi Jumlah maksimum tepi masuk yang perlu dipertimbangkan untuk lompat silang. Algoritme digunakan oleh -lompat silang adalah O(N^2) dalam jumlah sisi yang masuk ke setiap blok. Meningkatkan nilai berarti pengoptimalan yang lebih agresif, membuat waktu kompilasi meningkat dengan peningkatan yang mungkin kecil dalam ukuran yang dapat dieksekusi.

min-crossjump-insns Jumlah minimum instruksi yang harus dicocokkan pada akhir dua blok sebelum lompat silang dilakukan pada mereka. Nilai ini diabaikan dalam kasus ini di mana semua instruksi di blok yang dilompati silang dicocokkan. NS nilai default adalah 5.

max-grow-copy-bb-insns Faktor ekspansi ukuran kode maksimum saat menyalin blok dasar alih-alih melompat. Ekspansi ini relatif terhadap instruksi lompat. Nilai defaultnya adalah 8.

max-goto-duplication-insns Jumlah maksimum instruksi untuk diduplikasi ke blok yang melompat ke a dihitung goto. Untuk menghindari perilaku O(N^2) dalam sejumlah lintasan, faktor GCC menghitung gotos di awal proses kompilasi, dan tidak memfaktorkannya selambat-lambatnya mungkin. Hanya lompatan yang dihitung pada akhir blok dasar dengan tidak lebih dari goto-duplication-insns tidak difaktorkan. Nilai defaultnya adalah 8.

max-delay-slot-insn-search Jumlah maksimum instruksi yang perlu dipertimbangkan ketika mencari instruksi untuk mengisi slot penundaan. Jika lebih dari jumlah instruksi yang berubah-ubah ini adalah dicari, penghematan waktu dari mengisi slot penundaan minimal, jadi hentikan mencari. Meningkatkan nilai berarti pengoptimalan yang lebih agresif, membuat waktu kompilasi meningkat dengan peningkatan yang mungkin kecil dalam waktu eksekusi.

max-delay-slot-live-search Saat mencoba mengisi slot penundaan, jumlah instruksi maksimum yang perlu dipertimbangkan saat mencari blok dengan informasi pendaftaran langsung yang valid. Meningkatkan ini nilai yang dipilih secara sewenang-wenang berarti pengoptimalan yang lebih agresif, meningkatkan waktu kompilasi. Parameter ini harus dihapus ketika kode slot penundaan adalah ditulis ulang untuk mempertahankan grafik aliran kontrol.

max-gcse-memori Perkiraan jumlah maksimum memori yang dapat dialokasikan untuk melakukan optimasi eliminasi subekspresi umum global. Jika lebih banyak memori dari ditentukan diperlukan, optimasi tidak dilakukan.

rasio penyisipan maks-gcse Jika rasio penyisipan ekspresi terhadap penghapusan lebih besar dari nilai ini untuk ekspresi apa pun, lalu RTL PRE menyisipkan atau menghapus ekspresi dan dengan demikian pergi sebagian perhitungan redundan dalam aliran instruksi. Nilai defaultnya adalah 20.

max-pending-list-length Jumlah maksimum penjadwalan dependensi yang tertunda memungkinkan sebelum membilas keadaan saat ini dan memulai dari awal. Fungsi besar dengan beberapa cabang atau panggilan dapat membuat daftar yang terlalu besar yang menghabiskan memori dan sumber daya secara tidak perlu.

max-modulo-mundur-upaya Jumlah maksimum upaya mundur yang harus dilakukan penjadwal saat modulo penjadwalan loop. Nilai yang lebih besar dapat secara eksponensial meningkatkan waktu kompilasi.

max-inline-insns-tunggal Beberapa parameter mengontrol tree inliner yang digunakan di GCC. Angka ini menetapkan jumlah maksimum instruksi (dihitung dalam representasi internal GCC) dalam a fungsi tunggal yang dipertimbangkan oleh inliner pohon untuk inlining. Ini hanya mempengaruhi fungsi dideklarasikan sebaris dan metode diimplementasikan dalam deklarasi kelas (C++). Nilai defaultnya adalah 400.

max-inline-insns-auto Bila Anda menggunakan -finline-fungsi (termasuk dalam -O3), banyak fungsi yang akan jika tidak, tidak dipertimbangkan untuk inlining oleh kompiler diselidiki. Ke fungsi-fungsi itu, batas yang berbeda (lebih ketat) dibandingkan dengan fungsi dinyatakan sebaris dapat diterapkan. Nilai defaultnya adalah 40.

inline-min-percepatan Ketika perkiraan peningkatan kinerja penelepon + runtime callee melebihi ini ambang batas (dalam persen), fungsi dapat digarisbawahi terlepas dari batas --param max-inline-insns-tunggal serta --param max-inline-insns-auto.

besar-fungsi-insns Batas yang menentukan fungsi yang sangat besar. Untuk fungsi yang lebih besar dari batas ini setelah inlining, inlining dibatasi oleh --param pertumbuhan-fungsi-besar. Ini parameter berguna terutama untuk menghindari waktu kompilasi yang ekstrim yang disebabkan oleh non- algoritma linier yang digunakan oleh back end. Nilai defaultnya adalah 2700.

pertumbuhan-fungsi-besar Menentukan pertumbuhan maksimal fungsi besar yang disebabkan oleh inlining dalam persen. NS nilai default adalah 100 yang membatasi pertumbuhan fungsi besar hingga 2.0 kali lipat aslinya ukuran.

besar-unit-insns Batas yang menentukan satuan terjemahan besar. Pertumbuhan yang disebabkan oleh inlining unit lebih besar dari batas ini dibatasi oleh --param inline-unit-pertumbuhan. Untuk unit kecil ini mungkin terlalu ketat. Misalnya, pertimbangkan unit yang terdiri dari fungsi A yaitu inline dan B yang hanya memanggil A tiga kali. Jika B relatif kecil terhadap A, pertumbuhan unit adalah 300\% namun inlining seperti itu sangat masuk akal. Untuk sangat besar unit yang terdiri dari fungsi inlineable kecil, namun, pertumbuhan unit secara keseluruhan batas diperlukan untuk menghindari ledakan eksponensial ukuran kode. Jadi untuk yang lebih kecil unit, ukurannya ditingkatkan menjadi --param besar-unit-insns sebelum mendaftar --param inline-unit-pertumbuhan. Standarnya adalah 10000.

inline-unit-pertumbuhan Menentukan pertumbuhan keseluruhan maksimal dari unit kompilasi yang disebabkan oleh inlining. NS nilai default adalah 20 yang membatasi pertumbuhan unit hingga 1.2 kali ukuran aslinya. Dingin fungsi (baik ditandai dingin melalui atribut atau dengan umpan balik profil) tidak diperhitungkan dalam satuan ukuran.

ipcp-unit-pertumbuhan Menentukan pertumbuhan keseluruhan maksimal dari unit kompilasi yang disebabkan oleh interprocedural propagasi konstan. Nilai default adalah 10 yang membatasi pertumbuhan unit hingga 1.1 kali ukuran aslinya.

bingkai-tumpukan besar Batas yang menentukan bingkai tumpukan besar. Saat inlining algoritma sedang mencoba untuk tidak tumbuh melewati batas ini terlalu banyak. Nilai default adalah 256 byte.

pertumbuhan-bingkai-tumpukan besar Menentukan pertumbuhan maksimal bingkai tumpukan besar yang disebabkan oleh inlining dalam persen. Nilai defaultnya adalah 1000 yang membatasi pertumbuhan bingkai tumpukan besar hingga 11 kali lipat ukuran asli.

max-inline-insns-rekursif max-inline-insns-rekursif-otomatis Menentukan jumlah maksimum instruksi salinan out-of-line dari self- Fungsi inline rekursif dapat berkembang menjadi dengan melakukan inlining rekursif.

--param max-inline-insns-rekursif berlaku untuk fungsi yang dideklarasikan sebaris. Untuk fungsi tidak dideklarasikan inline, inlining rekursif hanya terjadi ketika -finline-fungsi (termasuk dalam -O3) diaktifkan; --param max-inline-insns- rekursif-otomatis berlaku sebagai gantinya. Nilai defaultnya adalah 450.

max-inline-rekursif-kedalaman max-inline-rekursif-kedalaman-otomatis Menentukan kedalaman rekursi maksimum yang digunakan untuk inlining rekursif.

--param max-inline-rekursif-kedalaman berlaku untuk fungsi yang dideklarasikan sebaris. Untuk fungsi tidak dideklarasikan inline, inlining rekursif hanya terjadi ketika -finline-fungsi (termasuk dalam -O3) diaktifkan; --param max-inline-rekursif- kedalaman-otomatis berlaku sebagai gantinya. Nilai defaultnya adalah 8.

min-inline-rekursif-probabilitas Inlining rekursif hanya menguntungkan untuk fungsi yang memiliki rekursi dalam rata-rata dan dapat merugikan untuk fungsi yang memiliki kedalaman rekursi kecil dengan meningkatkan ukuran prolog atau kompleksitas badan fungsi ke pengoptimal lainnya.

Ketika umpan balik profil tersedia (lihat -fprofile-hasilkan) rekursi sebenarnya kedalaman dapat ditebak dari probabilitas bahwa fungsi berulang melalui panggilan yang diberikan ekspresi. Parameter ini membatasi inlining hanya untuk memanggil ekspresi yang probabilitas melebihi ambang batas yang diberikan (dalam persen). Nilai defaultnya adalah 10.

awal-inlining-insns Tentukan pertumbuhan yang dapat dibuat oleh inliner awal. Efeknya meningkatkan jumlah inlining untuk kode yang memiliki penalti abstraksi yang besar. Nilai defaultnya adalah 14.

max-awal-inliner-iterasi Batas iterasi awal inliner. Ini pada dasarnya membatasi jumlah panggilan tidak langsung bersarang yang dapat diselesaikan oleh inliner awal. Rantai yang lebih dalam masih ada ditangani oleh late inlining.

comdat-sharing-probabilitas Probabilitas (dalam persen) bahwa fungsi inline C++ dengan visibilitas comdat adalah dibagikan di beberapa unit kompilasi. Nilai defaultnya adalah 20.

profil-fungsi-internal-id Parameter untuk mengontrol apakah akan menggunakan fungsi id internal di database profil menengadah. Jika nilainya 0, kompiler menggunakan id yang didasarkan pada fungsi nama assembler dan nama file, yang membuat data profil lama lebih toleran terhadap sumber perubahan seperti penataan ulang fungsi dll. Nilai defaultnya adalah 0.

min-vektor-loop-terikat Jumlah minimum iterasi di mana loop tidak divektorkan ketika -ftree-vectorize digunakan. Jumlah iterasi setelah vektorisasi perlu lebih besar dari nilai yang ditentukan oleh opsi ini untuk memungkinkan vektorisasi. NS nilai default adalah 0.

gcse-biaya-jarak-rasio Faktor penskalaan dalam perhitungan jarak maksimum suatu ekspresi dapat dipindahkan oleh optimasi GCSE. Ini saat ini hanya didukung di pass pengangkat kode. Semakin besar rasionya, semakin agresif pengangkatan kode dengan sederhana ekspresi, yaitu ekspresi yang memiliki biaya kurang dari gcse-tidak dibatasi- biaya. Menentukan 0 menonaktifkan pengangkatan ekspresi sederhana. Nilai defaultnya adalah 10.

gcse-biaya tidak terbatas Biaya, secara kasar diukur sebagai biaya instruksi mesin tunggal yang khas, pada pengoptimalan GCSE mana yang tidak membatasi jarak yang dapat ditempuh ekspresi. Ini saat ini hanya didukung di pass pengangkat kode. Semakin kecil biayanya, pengangkat kode yang lebih agresif. Menentukan 0 memungkinkan semua ekspresi untuk menempuh jarak yang tidak terbatas. Nilai defaultnya adalah 3.

max-hoist-kedalaman Kedalaman pencarian di pohon dominator untuk ekspresi yang akan diangkat. Ini digunakan untuk menghindari perilaku kuadrat dalam algoritma pengangkatan. Nilai 0 tidak membatasi pada pencarian, tetapi dapat memperlambat kompilasi fungsi besar. Nilai default adalah 30.

perbandingan-penggabungan-ekor-maks Jumlah maksimum bb serupa untuk dibandingkan dengan bb. Ini digunakan untuk menghindari perilaku kuadrat dalam penggabungan ekor pohon. Nilai defaultnya adalah 10.

max-tail-merge-iterasi Jumlah maksimum iterasi melewati fungsi. Ini digunakan untuk batasi waktu kompilasi dalam penggabungan ekor pohon. Nilai defaultnya adalah 2.

max-unrolled-insns Jumlah maksimum instruksi yang mungkin harus dibuka oleh loop. Jika lingkaran dibuka, parameter ini juga menentukan berapa kali kode loop itu dibuka.

maks-rata-rata-unrolled-insns Jumlah maksimum instruksi yang bias oleh probabilitas eksekusi mereka yang loop mungkin harus dibuka. Jika loop dibuka, parameter ini juga menentukan berapa kali kode loop dibuka.

max-unroll-kali Jumlah maksimum unrolling dari satu loop.

max-peeled-insns Jumlah maksimum instruksi yang mungkin harus dikupas oleh sebuah loop. Jika lingkaran dikupas, parameter ini juga menentukan berapa kali kode loop dikupas.

max-kupas-kali Jumlah maksimum pengelupasan satu loop.

max-kupas-cabang Jumlah maksimum cabang di jalur panas melalui urutan yang dikupas.

max-completely-peeled-insns Jumlah maksimum ins dari loop yang benar-benar terkelupas.

max-sepenuhnya-kupas-kali Jumlah maksimum iterasi dari loop yang sesuai untuk peeling lengkap.

max-completely-peel-loop-nest depth Kedalaman maksimum sarang lingkaran cocok untuk mengupas lengkap.

max-unswitch-insns Jumlah maksimum ins dari loop yang tidak dialihkan.

tingkat pemutusan maksimum Jumlah maksimum cabang yang tidak dialihkan dalam satu loop.

lim-mahal Biaya minimum ekspresi mahal dalam gerakan invarian loop.

iv-pertimbangkan-semua-kandidat-terikat Terikat pada jumlah kandidat untuk variabel induksi, di bawahnya semua kandidat dipertimbangkan untuk setiap penggunaan dalam optimasi variabel induksi. Jika ada lebih banyak kandidat dari ini, hanya yang paling relevan yang dianggap dihindari kompleksitas waktu kuadrat.

iv-max-dianggap-penggunaan Optimalisasi variabel induksi menyerah pada loop yang berisi lebih banyak induksi kegunaan variabel.

iv-selalu-pangkas-cand-set-terikat Jika jumlah kandidat dalam himpunan lebih kecil dari nilai ini, selalu coba untuk hapus ivs yang tidak perlu dari set saat menambahkan yang baru.

scev-max-expr-size Terikat pada ukuran ekspresi yang digunakan dalam penganalisis evolusi skalar. Besar ekspresi memperlambat penganalisis.

scev-max-expr-kompleksitas Terikat pada kompleksitas ekspresi dalam penganalisis evolusi skalar. Ekspresi kompleks memperlambat penganalisis.

omega-max-vars Jumlah maksimum variabel dalam sistem kendala Omega. Nilai default adalah 128.

omega-max-geqs Jumlah maksimum ketidaksetaraan dalam sistem kendala Omega. Standarnya nilainya 256.

omega-max-persamaan Jumlah maksimum persamaan dalam sistem batasan Omega. Nilai default adalah 128.

omega-max-wild-card Jumlah maksimum variabel wildcard yang dapat dimasukkan pemecah Omega. Nilai defaultnya adalah 18.

ukuran tabel omega-hash Ukuran tabel hash di pemecah Omega. Nilai defaultnya adalah 550.

kunci omega-max Jumlah maksimal kunci yang digunakan oleh pemecah Omega. Nilai defaultnya adalah 500.

omega-eliminasi-redundant-constraint Jika disetel ke 1, gunakan metode yang mahal untuk menghilangkan semua kendala yang berlebihan. NS nilai default adalah 0.

vect-max-version-for-alignment-checks Jumlah maksimum pemeriksaan run-time yang dapat dilakukan saat melakukan loop versi untuk penyelarasan di vectorizer.

vect-max-version-untuk-alias-cek Jumlah maksimum pemeriksaan run-time yang dapat dilakukan saat melakukan loop pembuatan versi untuk alias di vectorizer.

vect-max-peeling-untuk-penyelarasan Jumlah maksimum loop peel untuk meningkatkan penyelarasan akses untuk vectorizer. Nilai -1 berarti 'tanpa batas'.

max-iterasi-ke-track Jumlah maksimum iterasi loop algoritma brute-force untuk analisis dari jumlah iterasi dari loop mencoba untuk mengevaluasi.

hot-bb-count-ws-permille Hitungan profil blok dasar dianggap panas jika berkontribusi pada yang diberikan permillage (yaitu 0...1000) dari seluruh eksekusi yang diprofilkan.

panas-bb-frekuensi-fraksi Pilih fraksi frekuensi blok entri dari eksekusi blok dasar di fungsi yang diberikan blok dasar perlu harus dianggap panas.

iterasi-prediksi-maks Jumlah maksimum pengulangan loop yang kami prediksi secara statis. Ini berguna dalam kasus di mana suatu fungsi berisi satu loop dengan ikatan yang diketahui dan loop lainnya dengan ikatan yang tidak diketahui. Jumlah iterasi yang diketahui diprediksi dengan benar, sedangkan jumlah iterasi yang tidak diketahui rata-rata menjadi kira-kira 10. Ini berarti bahwa loop tanpa batas muncul secara artifisial dingin relatif terhadap yang lain.

built-in-mengharapkan-probabilitas Kontrol probabilitas ekspresi yang memiliki nilai yang ditentukan. Ini parameter mengambil persentase (yaitu 0 ... 100) sebagai input. Probabilitas default dari 90 diperoleh secara empiris.

sejajar-ambang batas Pilih fraksi dari frekuensi maksimal eksekusi blok dasar di a berfungsi untuk menyelaraskan blok dasar.

align-loop-iterasi Loop yang diharapkan untuk mengulangi setidaknya jumlah iterasi yang dipilih disejajarkan.

pelacak-dinamis-cakupan umpan balik-pelacak-dinamis-cakupan Nilai ini digunakan untuk membatasi pembentukan superblok setelah persentase tertentu dari instruksi yang dieksekusi tercakup. Ini membatasi perluasan ukuran kode yang tidak perlu.

The umpan balik-pelacak-dinamis-cakupan parameter hanya digunakan ketika umpan balik profil tersedia. Profil sebenarnya (sebagai lawan dari perkiraan statis) adalah apalagi seimbang memungkinkan ambang batas menjadi nilai yang lebih besar.

tracer-max-code-growth Hentikan duplikasi ekor setelah pertumbuhan kode mencapai persentase tertentu. Ini adalah sebuah batas yang agak artifisial, karena sebagian besar duplikat dihilangkan kemudian di silang melompat, sehingga dapat diatur ke nilai yang jauh lebih tinggi daripada pertumbuhan kode yang diinginkan.

rasio pelacak-min-cabang Hentikan pertumbuhan terbalik ketika probabilitas kebalikan dari tepi terbaik kurang dari ini ambang batas (dalam persen).

rasio pelacak-min-cabang pelacak-min-cabang-rasio-umpan balik Hentikan pertumbuhan ke depan jika tepi terbaik memiliki probabilitas lebih rendah dari ambang batas ini.

Demikian pula untuk pelacak-dinamis-cakupan dua nilai hadir, satu untuk kompilasi untuk umpan balik profil dan satu untuk kompilasi tanpa. Nilai untuk kompilasi dengan umpan balik profil perlu lebih konservatif (lebih tinggi) untuk membuat pelacak efektif.

max-cse-jalur-panjang Jumlah maksimum blok dasar pada jalur yang dipertimbangkan CSE. Standarnya adalah 10.

max-cse-insns Jumlah maksimum instruksi yang diproses CSE sebelum pembilasan. Standarnya adalah 1000.

ggc-min-perluas GCC menggunakan pengumpul sampah untuk mengelola alokasi memorinya sendiri. Parameter ini menentukan persentase minimum di mana tumpukan pengumpul sampah seharusnya diperbolehkan untuk memperluas antar koleksi. Menyetel ini dapat meningkatkan kecepatan kompilasi; itu tidak berpengaruh pada pembuatan kode.

Standarnya adalah 30% + 70% * (RAM/1GB) dengan batas atas 100% saat RAM >= 1GB. Jika "getrlimit" tersedia, pengertian "RAM" adalah yang terkecil dari RAM sebenarnya dan "RLIMIT_DATA" atau "RLIMIT_AS". Jika GCC tidak dapat menghitung RAM pada tertentu platform, batas bawah 30% digunakan. Mengatur parameter ini dan GGC-Min- ukuran tumpukan ke nol menyebabkan pengumpulan penuh terjadi pada setiap kesempatan. Ini adalah sangat lambat, tetapi dapat berguna untuk debugging.

ggc-min-heapsize Ukuran minimum tumpukan pengumpul sampah sebelum mulai repot mengumpulkan sampah. Koleksi pertama terjadi setelah heap mengembang sebesar ggc-min-perluas% Luar ggc-min-heapsize. Sekali lagi, menyetel ini dapat meningkatkan kecepatan kompilasi, dan tidak berpengaruh pada pembuatan kode.

Defaultnya lebih kecil dari RAM/8, RLIMIT_RSS, atau batas yang mencoba memastikan bahwa RLIMIT_DATA atau RLIMIT_AS tidak terlampaui, tetapi dengan batas bawah 4096 (empat megabita) dan batas atas 131072 (128 megabita). Jika GCC tidak mampu untuk menghitung RAM pada platform tertentu, batas bawah digunakan. Mengatur ini parameter sangat besar secara efektif menonaktifkan pengumpulan sampah. Mengatur ini parameter dan ggc-min-perluas ke nol menyebabkan koleksi penuh terjadi di setiap peluang.

max-reload-search-insns Jumlah maksimum reload instruksi harus melihat ke belakang untuk setara daftar. Meningkatkan nilai berarti pengoptimalan yang lebih agresif, membuat waktu kompilasi meningkat dengan kinerja yang mungkin sedikit lebih baik. Standarnya nilainya 100.

max-cselib-memori-lokasi Jumlah maksimum lokasi memori cselib harus diperhitungkan. Meningkatkan nilai berarti pengoptimalan yang lebih agresif, membuat waktu kompilasi meningkat dengan kinerja yang mungkin sedikit lebih baik. Nilai defaultnya adalah 500.

susun ulang-blok-duplikat susun ulang-blok-duplikat-umpan balik Digunakan oleh pass penataan ulang blok dasar untuk memutuskan apakah akan menggunakan tanpa syarat cabang atau duplikat kode pada tujuannya. Kode digandakan ketika ukuran perkiraan lebih kecil dari nilai ini dikalikan dengan ukuran perkiraan lompatan tanpa syarat di hot spot program.

The susun ulang-blok-duplikat-umpan balik parameter hanya digunakan ketika umpan balik profil tersedia. Ini mungkin diatur ke nilai yang lebih tinggi daripada susun ulang-blok-duplikat sejak informasi tentang hot spot lebih akurat.

jadwal-maks-siap-inns Jumlah maksimum instruksi yang siap dikeluarkan penjadwal harus pertimbangkan pada waktu tertentu selama lulus penjadwalan pertama. Meningkatkan nilai berarti pencarian yang lebih menyeluruh, membuat waktu kompilasi meningkat dengan mungkin sedikit manfaat. Nilai defaultnya adalah 100.

blok-wilayah-jadwal-maks Jumlah maksimum blok di suatu wilayah yang akan dipertimbangkan untuk interblok penjadwalan. Nilai defaultnya adalah 10.

blok-wilayah-pipa-maks Jumlah maksimum blok di suatu wilayah yang harus dipertimbangkan untuk pemasangan pipa di penjadwal selektif. Nilai defaultnya adalah 15.

max-sched-region-insns Jumlah maksimum losmen di suatu wilayah yang akan dipertimbangkan untuk interblock penjadwalan. Nilai defaultnya adalah 100.

max-pipeline-region-insns Jumlah maksimum losmen di suatu wilayah yang harus dipertimbangkan untuk pipelining di penjadwal selektif. Nilai defaultnya adalah 200.

min-spec-prob Probabilitas minimum (dalam persen) untuk mencapai blok sumber untuk interblok penjadwalan spekulatif. Nilai defaultnya adalah 40.

max-sched-extend-regions-iters Jumlah maksimum iterasi melalui CFG untuk memperluas wilayah. Nilai 0 ( default) menonaktifkan ekstensi wilayah.

jadwal-maks-insn-konflik-tunda Penundaan konflik maksimum untuk sebuah penginapan yang dipertimbangkan untuk gerakan spekulatif. Nilai defaultnya adalah 3.

Sched-spec-prob-cutoff Probabilitas minimal keberhasilan spekulasi (dalam persen), sehingga spekulatif penginapan dijadwalkan. Nilai defaultnya adalah 40.

sched-spec-state-edge-prob-cutoff Probabilitas minimum yang harus dimiliki edge agar penjadwal dapat menyimpan statusnya di seberangnya. Nilai defaultnya adalah 10.

sched-mem-true-dep-biaya Jarak minimal (dalam siklus CPU) antara penyimpanan dan pemuatan yang menargetkan memori yang sama lokasi. Nilai defaultnya adalah 1.

selsched-max-lookahead Ukuran maksimum jendela lookahead dari penjadwalan selektif. Ini adalah kedalaman pencarian instruksi yang tersedia. Nilai defaultnya adalah 50.

selsched-max-sched-time Jumlah maksimum waktu instruksi dijadwalkan selama selektif penjadwalan. Ini adalah batas jumlah iterasi yang dilalui oleh instruksi dapat disalurkan. Nilai defaultnya adalah 2.

selsched-max-insns-untuk-mengganti nama Jumlah maksimum instruksi terbaik dalam daftar siap yang dipertimbangkan untuk mengganti nama di penjadwal selektif. Nilai defaultnya adalah 2.

sms-min-sc Nilai minimum jumlah tahapan yang dihasilkan oleh penjadwal modulo ayunan. NS nilai default adalah 2.

max-nilai-terakhir-rtl Ukuran maksimum diukur sebagai jumlah RTL yang dapat direkam dalam ekspresi di combiner untuk register semu sebagai nilai terakhir yang diketahui dari register itu. NS defaultnya adalah 10000.

max-combine-insns Jumlah maksimum instruksi yang coba digabungkan oleh penggabung RTL. Standarnya nilainya 2 at -Og dan 4 sebaliknya.

bilangan bulat-berbagi-batas Konstanta integer kecil dapat menggunakan struktur data bersama, mengurangi kompiler penggunaan memori dan meningkatkan kecepatannya. Ini menetapkan nilai maksimum dari yang dibagikan konstanta bilangan bulat. Nilai defaultnya adalah 256.

ssp-buffer-size Ukuran minimum buffer (yaitu array) yang menerima perlindungan stack smashing ketika -perlindungan fstack digunakan.

Default ini sebelum Ubuntu 10.10 adalah "8". Saat ini adalah "4", untuk meningkatkan sejumlah fungsi yang dilindungi oleh pelindung tumpukan.

ukuran-min-untuk-tumpukan-berbagi Ukuran minimum variabel yang mengambil bagian dalam berbagi slot tumpukan saat tidak mengoptimalkan. Nilai defaultnya adalah 32.

max-jump-utas-duplikasi-stmts Jumlah maksimum pernyataan yang diperbolehkan dalam satu blok yang perlu diduplikasi ketika threading melompat.

bidang-maks-untuk-bidang-sensitif Jumlah maksimum bidang dalam struktur yang diperlakukan dengan cara yang peka terhadap bidang selama analisis penunjuk. Standarnya adalah nol untuk -O0 serta -O1, dan 100 untuk -Os, -O2, dan -O3.

prefetch-latency Perkirakan jumlah rata-rata instruksi yang dieksekusi sebelum prefetch selesai. Jarak yang diambil sebelumnya sebanding dengan konstanta ini. Meningkatkan jumlah ini juga dapat menyebabkan lebih sedikit aliran yang diambil sebelumnya (lihat simultan-prefetch).

simultan-prefetch Jumlah maksimum prefetches yang dapat dijalankan pada waktu yang sama.

l1-cache-line-size Ukuran baris cache dalam cache L1, dalam byte.

l1-cache-ukuran Ukuran cache L1, dalam kilobyte.

l2-cache-ukuran Ukuran cache L2, dalam kilobyte.

rasio min-insn-untuk-prefetch Rasio minimum antara jumlah instruksi dan jumlah prefetches untuk mengaktifkan prefetching dalam satu lingkaran.

prefetch-min-insn-to-mem-rasio Rasio minimum antara jumlah instruksi dan jumlah memori referensi untuk mengaktifkan prefetching dalam satu lingkaran.

gunakan-jenis-kanonik Apakah kompiler harus menggunakan sistem tipe "kanonik". Secara default, ini harus selalu 1, yang menggunakan mekanisme internal yang lebih efisien untuk membandingkan ketik C++ dan Objective-C++. Namun, jika bug dalam sistem tipe kanonik adalah menyebabkan kegagalan kompilasi, setel nilai ini ke 0 untuk menonaktifkan tipe kanonik.

beralih-konversi-maks-cabang-rasio Konversi inisialisasi sakelar menolak untuk membuat larik yang lebih besar dari beralih-konversi-maks-cabang-rasio kali jumlah cabang di switch.

max-partial-anti-panjang Panjang maksimum set antik parsial yang dihitung selama parsial pohon optimasi eliminasi redundansi (-ftree-pra) saat mengoptimalkan di -O3 dan di atas. Untuk beberapa jenis kode sumber, penghapusan redundansi parsial yang ditingkatkan pengoptimalan dapat berjalan, menghabiskan semua memori yang tersedia di host mesin. Parameter ini menetapkan batas pada panjang set yang dihitung, yang mencegah perilaku melarikan diri. Menetapkan nilai 0 untuk parameter ini memungkinkan panjang set yang tidak terbatas.

sccvn-max-scc-ukuran Ukuran maksimum komponen yang terhubung kuat (SCC) selama pemrosesan SCCVN. Jika batas ini tercapai, pemrosesan SCCVN untuk seluruh fungsi tidak dilakukan dan optimasi tergantung padanya dinonaktifkan. Ukuran SCC maksimum default adalah 10000.

sccvn-max-alias-queries-per-akses Jumlah maksimum kueri alias-oracle yang kami lakukan saat mencari redundansi untuk beban dan toko. Jika batas ini tercapai, pencarian dibatalkan dan pemuatan atau toko tidak dianggap berlebihan. Jumlah kueri secara algoritme terbatas pada jumlah toko di semua jalur dari beban ke entri fungsi. Jumlah kueri maksimum default adalah 1000.

ira-max-loop-num IRA menggunakan alokasi register regional secara default. Jika suatu fungsi mengandung lebih banyak loop dari jumlah yang diberikan oleh parameter ini, hanya paling banyak jumlah yang diberikan loop yang paling sering dieksekusi membentuk region untuk alokasi register regional. Nilai default parameter adalah 100.

ira-max-conflict-table-size Meskipun IRA menggunakan algoritma canggih untuk mengompresi tabel konflik, tabel masih dapat memerlukan jumlah memori yang berlebihan untuk fungsi yang sangat besar. jika tabel konflik untuk suatu fungsi bisa lebih dari ukuran dalam MB yang diberikan oleh ini parameter, pengalokasi register malah menggunakan yang lebih cepat, lebih sederhana, dan lebih rendah algoritma kualitas yang tidak memerlukan pembuatan tabel konflik pseudo-register. Nilai default parameter adalah 2000.

ira-loop-reserved-regs IRA dapat digunakan untuk mengevaluasi tekanan register yang lebih akurat dalam loop untuk keputusan untuk memindahkan invarian loop (lihat -O3). Jumlah register yang tersedia dicadangkan untuk beberapa tujuan lain diberikan oleh parameter ini. Nilai default dari parameternya adalah 2, yang merupakan jumlah minimal register yang dibutuhkan oleh tipikal instruksi. Nilai ini adalah yang terbaik yang ditemukan dari berbagai percobaan.

lra-warisan-surut-probabilitas-cutoff LRA mencoba menggunakan kembali nilai yang dimuat ulang di register di INS berikutnya. Ini optimasi disebut pewarisan. EBB digunakan sebagai wilayah untuk melakukan ini optimasi. Parameter mendefinisikan probabilitas tepi jatuh-melalui minimal di persentase yang digunakan untuk menambahkan BB ke warisan EBB di LRA. Nilai default dari parameternya adalah 40. Nilai tersebut dipilih dari berbagai proses SPEC2000 pada x86-64.

loop-invarian-max-bbs-in-loop Gerakan invarian loop bisa sangat mahal, baik dalam waktu kompilasi maupun dalam jumlah memori waktu kompilasi yang dibutuhkan, dengan loop yang sangat besar. Loop dengan lebih banyak blok dasar dari parameter ini tidak akan memiliki optimasi gerakan invarian loop dilakukan pada mereka. Nilai default parameter adalah 1000 untuk -O1 dan 10000 untuk -O2 dan di atas.

loop-max-datarefs-untuk-datadeps Membangun ketergantungan data mahal untuk loop yang sangat besar. Parameter ini membatasi jumlah referensi data dalam loop yang dipertimbangkan untuk data analisis ketergantungan. Loop besar ini tidak ditangani oleh optimasi menggunakan loop ketergantungan data. Nilai defaultnya adalah 1000.

max-vartrack-size Menetapkan jumlah maksimum slot tabel hash untuk digunakan selama aliran data pelacakan variabel analisis fungsi apa pun. Jika batas ini terlampaui dengan pelacakan variabel di tugas diaktifkan, analisis untuk fungsi itu dicoba lagi tanpa itu, setelah menghapus semua debug insns dari fungsi. Jika batas terlampaui bahkan tanpa debug insns, analisis pelacakan var sepenuhnya dinonaktifkan untuk fungsi tersebut. Mengatur parameter ke nol membuatnya tidak terbatas.

max-vartrack-expr-kedalaman Menetapkan jumlah maksimum level rekursi saat mencoba memetakan nama variabel atau debug temporer untuk menilai ekspresi. Waktu kompilasi perdagangan ini untuk lebih banyak informasi debug lengkap. Jika ini diatur terlalu rendah, nilai ekspresi yang tersedia dan dapat direpresentasikan dalam informasi debug mungkin akhirnya tidak digunakan; pengaturan ini lebih tinggi dapat memungkinkan kompiler untuk menemukan debug yang lebih kompleks ekspresi, tetapi waktu kompilasi dan penggunaan memori dapat bertambah. Standarnya adalah 12.

min-nondebug-insn-uid Gunakan uid mulai dari parameter ini untuk nondebug insns. Kisaran di bawah parameter dicadangkan secara eksklusif untuk debug insns yang dibuat oleh -fvar-pelacakan-tugas, tetapi debug insns mungkin mendapatkan (tidak tumpang tindih) uid di atas itu jika rentang yang dicadangkan habis.

faktor pertumbuhan ipa-sra-ptr IPA-SRA menggantikan pointer ke agregat dengan satu atau lebih parameter baru saja ketika ukuran kumulatif mereka kurang atau sama dengan faktor pertumbuhan ipa-sra-ptr kali ukuran parameter pointer asli.

sra-max-scalarization-size-Ospeed sra-max-scalarization-size-Osize Dua pass Pengurangan Skalar Agregat (SRA dan IPA-SRA) bertujuan untuk menggantikan bagian skalar agregat dengan menggunakan variabel skalar independen. Ini parameter mengontrol ukuran maksimum, dalam unit penyimpanan, agregat yang dipertimbangkan untuk penggantian saat mengkompilasi kecepatan (sra-max-scalarization-size- kecepatan) atau ukuran (sra-max-scalarization-size-Osize) masing-masing.

tm-max-agregat-ukuran Saat membuat salinan variabel utas-lokal dalam suatu transaksi, parameter ini menentukan ukuran dalam byte setelah variabel disimpan dengan logging berfungsi sebagai lawan untuk menyimpan/mengembalikan pasangan urutan kode. Opsi ini saja berlaku saat menggunakan -fgnu-tm.

graphite-max-nb-scop-params Untuk menghindari efek eksponensial dalam transformasi loop Graphite, jumlah parameter dalam Bagian Kontrol Statis (SCoP) dibatasi. Nilai defaultnya adalah 10 parameter. Variabel yang nilainya tidak diketahui pada waktu kompilasi dan didefinisikan di luar SCoP adalah parameter dari SCoP.

grafit-maks-bbs-per-fungsi Untuk menghindari efek eksponensial dalam pendeteksian SCoP, ukuran fungsi dianalisis oleh Grafit dibatasi. Nilai default adalah 100 blok dasar.

ukuran lingkaran-blok-ubin Pemblokiran loop atau transformasi penambangan strip, diaktifkan dengan -floop-blok or -floop-strip-tambang, lepaskan tambang setiap loop di sarang loop dengan sejumlah iterasi. Panjang strip dapat diubah menggunakan ukuran lingkaran-blok-ubin parameter. Nilai default adalah 51 iterasi.

loop-unroll-jam-size Tentukan faktor buka gulungan untuk -floop-unroll-and-jam pilihan. Nilai default adalah 4.

loop-unroll-jam-kedalaman Tentukan dimensi yang akan dibuka gulungannya (dihitung dari loop paling dalam) untuk -floop-unroll-and-jam. Nilai defaultnya adalah 2.

ipa-cp-nilai-daftar-ukuran IPA-CP mencoba melacak semua kemungkinan nilai dan tipe yang diteruskan ke fungsi parameter untuk menyebarkannya dan melakukan devirtualisasi. ipa-cp-nilai- ukuran daftar adalah jumlah maksimum nilai dan tipe yang disimpannya per satu formal parameter suatu fungsi.

ipa-cp-eval-ambang batas IPA-CP menghitung skor heuristik profitabilitas kloningnya sendiri dan melakukan peluang kloning dengan skor yang melebihi ipa-cp-eval-ambang batas.

ipa-cp-rekursi-penalti Persentase penalti yang akan diterima fungsi rekursif saat dievaluasi untuk kloning.

ipa-cp-panggilan-tunggal-hukuman Fungsi penalti persentase berisi satu panggilan ke fungsi lain akan terima ketika mereka dievaluasi untuk kloning.

ipa-max-agg-item IPA-CP juga mampu menyebarkan sejumlah nilai skalar yang dilewatkan dalam agregat. ipa-max-agg-item mengontrol jumlah maksimum nilai tersebut per satu parameter.

ipa-cp-loop-petunjuk-bonus Ketika IPA-CP menentukan bahwa kandidat kloning akan membuat jumlah iterasi dari loop yang diketahui, itu menambahkan bonus ipa-cp-loop-petunjuk-bonus ke skor profitabilitas kandidat.

ipa-cp-array-index-hint-bonus Ketika IPA-CP menentukan bahwa kandidat kloning akan membuat indeks array akses diketahui, itu menambahkan bonus ipa-cp-array-index-hint-bonus ke skor profitabilitas kandidat.

ipa-max-aa-langkah Selama analisis badan fungsi, IPA-CP menggunakan analisis alias untuk melacak nilai yang ditunjukkan oleh parameter fungsi. Agar tidak menghabiskan terlalu banyak waktu menganalisis fungsi-fungsi besar, ia menyerah dan menganggap semua memori hancur setelahnya memeriksa ipa-max-aa-langkah pernyataan memodifikasi memori.

lto-partisi Tentukan jumlah partisi yang diinginkan yang dihasilkan selama kompilasi WHOPR. NS jumlah partisi harus melebihi jumlah CPU yang digunakan untuk kompilasi. NS nilai default adalah 32.

lto-minpartisi Ukuran partisi minimal untuk WHOPR (dalam petunjuk perkiraan). Ini mencegah biaya pemisahan program yang sangat kecil menjadi terlalu banyak partisi.

cxx-max-namespaces-untuk-diagnostik-bantuan Jumlah maksimum ruang nama untuk berkonsultasi untuk saran saat pencarian nama C++ gagal untuk pengidentifikasi. Standarnya adalah 1000.

wastafel-frekuensi-ambang Frekuensi eksekusi relatif maksimum (dalam persen) dari blok target relatif terhadap blok asli pernyataan untuk memungkinkan pernyataan tenggelam dari a penyataan. Angka yang lebih besar menghasilkan pernyataan yang lebih agresif. NS nilai default adalah 75. Penyesuaian positif kecil diterapkan untuk pernyataan dengan operan memori karena itu bahkan lebih menguntungkan jadi tenggelam.

max-store-to-sink Jumlah maksimum pasangan toko bersyarat yang dapat ditenggelamkan. Setel ke 0 jika baik vektorisasi (-ftree-vectorize) atau jika-konversi (-ftree-loop-jika-mengkonversi) dinonaktifkan. Standarnya adalah 2.

izinkan-simpan-data-ras Izinkan pengoptimal untuk memperkenalkan balapan data baru di toko. Setel ke 1 untuk mengizinkan, jika tidak ke 0. Opsi ini diaktifkan secara default pada tingkat pengoptimalan -cepat.

ambang-nilai-kasus Jumlah terkecil dari nilai yang berbeda yang terbaik untuk menggunakan tabel-lompat bukannya pohon cabang bersyarat. Jika nilainya 0, gunakan default untuk mesin. Standarnya adalah 0.

tree-reassoc-width Tetapkan jumlah maksimum instruksi yang dieksekusi secara paralel di pohon yang diasosiasikan kembali. Parameter ini menggantikan heuristik tergantung target yang digunakan secara default jika tidak memiliki nilai nol.

sched-tekanan-algoritma Pilih di antara dua implementasi yang tersedia dari -fsched-tekanan. Algoritma 1 adalah implementasi asli dan lebih mungkin untuk mencegah instruksi dari sedang dipesan ulang. Algoritma 2 dirancang untuk menjadi kompromi antara pendekatan yang relatif konservatif diambil oleh algoritma 1 dan yang agak agresif pendekatan yang diambil oleh penjadwal default. Itu lebih bergantung pada memiliki file register reguler dan kelas tekanan register yang akurat. Lihat haifa-sched.c di sumber GCC untuk lebih jelasnya.

Pilihan default tergantung pada target.

max-slsr-cand-scan Tetapkan jumlah maksimum kandidat yang ada yang dipertimbangkan saat mencari dasar untuk kandidat pengurangan kekuatan garis lurus baru.

asan-global Aktifkan deteksi luapan buffer untuk objek global. Perlindungan semacam ini adalah diaktifkan secara default jika Anda menggunakan -fsanitize=alamat pilihan. Untuk menonaktifkan global penggunaan perlindungan benda --param asan-global=0.

tumpukan asan Aktifkan deteksi luapan buffer untuk objek tumpukan. Perlindungan semacam ini adalah diaktifkan secara default saat menggunakan-fsanitize=alamat. Untuk menonaktifkan perlindungan tumpukan gunakan --param tumpukan asan = 0 .

asan-instrumen-membaca Aktifkan deteksi buffer overflow untuk pembacaan memori. Perlindungan semacam ini adalah diaktifkan secara default saat menggunakan -fsanitize=alamat. Untuk menonaktifkan pembacaan memori penggunaan perlindungan --param asan-instrumen-baca=0.

asan-instrumen-menulis Aktifkan deteksi buffer overflow untuk penulisan memori. Perlindungan semacam ini adalah diaktifkan secara default saat menggunakan -fsanitize=alamat. Untuk menonaktifkan penulisan memori penggunaan perlindungan --param asan-instrumen-menulis=0 .

asan-memintrin Aktifkan deteksi untuk fungsi bawaan. Perlindungan semacam ini diaktifkan oleh default saat menggunakan -fsanitize=alamat. Untuk menonaktifkan perlindungan fungsi bawaan menggunakan --param asan-memintrin=0.

asan-penggunaan-setelah-kembali Aktifkan deteksi penggunaan setelah pengembalian. Perlindungan semacam ini diaktifkan oleh default saat menggunakan -fsanitize=alamat pilihan. Untuk menonaktifkan penggunaan-setelah-kembali penggunaan deteksi --param asan-penggunaan-setelah-kembali = 0.

asan-instrumentasi-dengan-panggilan-ambang Jika jumlah akses memori dalam fungsi yang diinstrumentasi lebih besar atau sama dengan nomor ini, gunakan panggilan balik alih-alih pemeriksaan sebaris. Misalnya untuk menonaktifkan kode sebaris menggunakan --param asan-instrumentasi-dengan-panggilan-ambang=0.

chkp-max-ctor-size Konstruktor statis yang dihasilkan oleh Pointer Bounds Checker dapat menjadi sangat besar dan secara signifikan meningkatkan waktu kompilasi pada tingkat pengoptimalan -O1 dan lebih tinggi. Ini parameter adalah jumlah maksimum pernyataan dalam satu konstruktor yang dihasilkan. Nilai defaultnya adalah 5000.

max-fsm-thread-path-insns Jumlah maksimum instruksi untuk disalin saat menduplikasi blok pada keadaan terbatas jalur utas lompat otomatis. Standarnya adalah 100.

max-fsm-panjang-utas Jumlah maksimum blok dasar pada jalur utas lompat otomat keadaan terbatas. NS defaultnya adalah 10.

max-fsm-thread-paths Jumlah maksimum jalur utas lompat baru untuk dibuat untuk otomat keadaan terbatas. Standarnya adalah 50.

Opsi Mengontrol itu Preprosesor Opsi ini mengontrol praprosesor C, yang dijalankan pada setiap file sumber C sebelum aktual kompilasi.

Jika Anda menggunakan -E pilihan, tidak ada yang dilakukan kecuali preprocessing. Beberapa opsi ini masuk akal hanya bersama-sama dengan -E karena mereka menyebabkan output praprosesor menjadi tidak cocok untuk kompilasi yang sebenarnya.

-Wp,Option Anda dapat menggunakan -Wp,Option untuk melewati driver kompiler dan melewati Option langsung melalui ke praprosesor. Jika Option berisi koma, itu dibagi menjadi beberapa opsi di koma. Namun, banyak opsi yang dimodifikasi, diterjemahkan, atau diinterpretasikan oleh driver compiler sebelum diteruskan ke preprocessor, dan -Wp secara paksa melewati fase ini. Antarmuka langsung praprosesor tidak didokumentasikan dan tunduk pada berubah, jadi bila memungkinkan Anda harus menghindari penggunaan -Wp dan biarkan pengemudi menangani opsi sebagai gantinya.

-Xpreprosesor Option Lulus Option sebagai pilihan untuk preprocessor. Anda dapat menggunakan ini untuk memasok sistem- opsi praprosesor tertentu yang tidak dikenali GCC.

Jika Anda ingin melewati opsi yang membutuhkan argumen, Anda harus menggunakan -Xpreprosesor dua kali, sekali untuk opsi dan sekali untuk argumen.

-tidak-terintegrasi-cpp Lakukan preprocessing sebagai pass terpisah sebelum kompilasi. Secara default, GCC melakukan preprocessing sebagai bagian terintegrasi dari input tokenization dan parsing. Jika opsi ini disediakan, front end bahasa yang sesuai (Cc1, cc1plus, atau cc1obj untuk C, C++, dan Objective-C, masing-masing) malah dipanggil dua kali, sekali untuk pra-pemrosesan saja dan sekali untuk kompilasi aktual dari input yang telah diproses sebelumnya. Opsi ini mungkin berguna dalam hubungannya dengan -B or -pembungkus opsi untuk menentukan praprosesor alternatif atau melakukan pemrosesan tambahan dari sumber program antara preprocessing normal dan kompilasi.

-D nama Tetapkan nama sebagai makro, dengan definisi 1.

-D nama=definisi Isi dari definisi tokenized dan diproses seolah-olah mereka muncul selama fase terjemahan tiga dalam a #menetapkan pengarahan. Secara khusus, definisinya adalah dipotong oleh karakter baris baru yang disematkan.

Jika Anda menggunakan praprosesor dari shell atau program seperti shell, Anda mungkin perlu untuk menggunakan sintaks kutipan shell untuk melindungi karakter seperti spasi yang memiliki makna dalam sintaks shell.

Jika Anda ingin mendefinisikan makro seperti fungsi pada baris perintah, tulis argumennya list dengan tanda kurung di sekelilingnya sebelum tanda sama dengan (jika ada). Tanda kurung adalah berarti bagi sebagian besar shell, jadi Anda perlu mengutip opsi. Dengan sh serta csh, -D'nama(argumen...)=definisi' bekerja.

-D serta -U opsi diproses dalam urutan yang diberikan pada baris perintah. Semua -imacros fillet serta -termasuk fillet opsi diproses setelah semua -D serta -U Pilihan.

-U nama Batalkan definisi sebelumnya dari nama, baik bawaan atau dilengkapi dengan -D .

-def Jangan menentukan makro khusus sistem atau makro khusus GCC. Standar yang telah ditentukan makro tetap ditentukan.

-I dir Tambahkan direktori dir ke daftar direktori yang akan dicari file headernya. Direktori bernama oleh -I dicari sebelum sistem standar menyertakan direktori. Jika direktori dir adalah sistem standar termasuk direktori, opsi ini diabaikan untuk memastikan bahwa urutan pencarian default untuk direktori sistem dan perlakuan khusus header sistem tidak dikalahkan. Jika dir dimulai dengan "=", maka "=" akan menjadi diganti dengan awalan sysroot; Lihat --sysroot serta -isysroot.

-o fillet Tulis keluaran ke fillet. Ini sama dengan menentukan fillet sebagai non-opsi kedua argumen untuk cpp. gcc memiliki interpretasi yang berbeda dari argumen non-opsi kedua, jadi kamu harus menggunakan -o untuk menentukan file keluaran.

-Dinding Mengaktifkan semua peringatan opsional yang diinginkan untuk kode normal. Saat ini is -komentar, -Wtrigraph, -Wmultichar dan peringatan tentang promosi bilangan bulat yang menyebabkan a perubahan tanda masuk ekspresi "#if". Perhatikan bahwa banyak peringatan praprosesor aktif secara default dan tidak memiliki opsi untuk mengontrolnya.

-komentar -komentar Peringatkan setiap kali urutan komentar-mulai /* muncul di /* komentar, atau kapan pun a garis miring terbalik-baris baru muncul di a // komentar. (Kedua bentuk memiliki efek yang sama.)

-Wtrigraph Sebagian besar trigraf dalam komentar tidak dapat memengaruhi makna program. Namun, trigraph yang akan membentuk baris baru yang lolos (??/ di akhir baris) bisa, dengan mengubah tempat komentar dimulai atau diakhiri. Oleh karena itu, hanya trigraf yang akan terbentuk baris baru yang lolos menghasilkan peringatan di dalam komentar.

Pilihan ini tersirat oleh -Dinding. Jika -Dinding tidak diberikan, opsi ini masih diaktifkan kecuali trigraph diaktifkan. Untuk mendapatkan konversi trigraf tanpa peringatan, tetapi dapatkan yang lain -Dinding peringatan, gunakan -trigraf -Dinding -Wno-trigraf.

-Tradisional Peringatkan tentang konstruksi tertentu yang berperilaku berbeda dalam tradisional dan ISO C. Juga memperingatkan tentang konstruksi ISO C yang tidak memiliki padanan C tradisional, dan bermasalah konstruksi yang harus dihindari.

-Wundef Peringatkan setiap kali pengidentifikasi yang bukan makro ditemukan di #jika direktif, di luar didefinisikan. Pengidentifikasi tersebut diganti dengan nol.

-Wunused-makro Peringatkan tentang makro yang ditentukan dalam file utama yang tidak digunakan. Sebuah makro adalah bekas jika memang diperluas atau diuji keberadaannya setidaknya sekali. Praprosesor juga akan memperingatkan jika makro belum digunakan pada saat didefinisikan ulang atau tidak ditentukan.

Makro bawaan, makro yang ditentukan pada baris perintah, dan makro yang ditentukan dalam include file tidak diperingatkan.

Catatan: Jika makro benar-benar digunakan, tetapi hanya digunakan dalam blok kondisional yang dilewati, maka CPP akan melaporkannya sebagai tidak digunakan. Untuk menghindari peringatan dalam kasus seperti itu, Anda mungkin meningkatkan cakupan definisi makro dengan, misalnya, memindahkannya ke yang pertama dilewati memblokir. Atau, Anda dapat memberikan penggunaan dummy dengan sesuatu seperti:

#jika didefinisikan the_macro_causing_the_warning #berakhir jika

-Wendif-label Peringatkan setiap kali #lain atau #berakhir jika diikuti oleh teks. Ini biasanya terjadi di kode formulir

#jika FOO ... #lain FOO ... #endif FOO

"FOO" kedua dan ketiga harus ada di komentar, tetapi sering kali tidak ada di program lama. Peringatan ini aktif secara default.

-Kesalahan Jadikan semua peringatan menjadi kesalahan yang sulit. Kode sumber yang memicu peringatan adalah ditolak.

-Wsystem-header Mengeluarkan peringatan untuk kode di header sistem. Ini biasanya tidak membantu dalam menemukan bug dalam kode Anda sendiri, oleh karena itu ditekan. Jika Anda bertanggung jawab atas sistem perpustakaan, Anda mungkin ingin melihatnya.

-w Menekan semua peringatan, termasuk yang dikeluarkan oleh GNU CPP secara default.

-bengah Keluarkan semua diagnostik wajib yang tercantum dalam standar C. Beberapa dari mereka yang tersisa keluar secara default, karena mereka sering memicu pada kode yang tidak berbahaya.

-pedantic-error Keluarkan semua diagnostik wajib, dan buat semua diagnostik wajib menjadi kesalahan. Ini termasuk diagnostik wajib yang dikeluarkan GCC tanpa -bengah tapi memperlakukan sebagai peringatan.

-M Alih-alih mengeluarkan hasil prapemrosesan, keluarkan aturan yang cocok untuk membuat menggambarkan dependensi dari file sumber utama. Praprosesor mengeluarkan satu membuat aturan yang berisi nama file objek untuk file sumber itu, titik dua, dan nama dari semua file yang disertakan, termasuk yang berasal dari -termasuk or -imacros perintah- pilihan baris.

Kecuali ditentukan secara eksplisit (dengan -MT or -MQ), nama file objek terdiri dari nama file sumber dengan akhiran apa pun diganti dengan akhiran file objek dan dengan bagian direktori terkemuka dihapus. Jika ada banyak file yang disertakan maka aturannya adalah dibagi menjadi beberapa baris menggunakan \-garis baru. Aturan tidak memiliki perintah.

Opsi ini tidak menekan output debug praprosesor, seperti -dM. Menghindari mencampur keluaran debug tersebut dengan aturan ketergantungan Anda harus secara eksplisit menentukan file keluaran ketergantungan dengan -MF, atau gunakan variabel lingkungan seperti DEPENDENCIES_OUTPUT. Output debug masih akan dikirim ke aliran output reguler sebagai Normal.

Lewat -M kepada pengemudi menyiratkan -E, dan menekan peringatan dengan implisit -w.

-MM Seperti -M tetapi jangan menyebutkan file header yang ditemukan di direktori header sistem, maupun file header yang disertakan, secara langsung atau tidak langsung, dari header tersebut.

Ini menyiratkan bahwa pilihan kurung sudut atau tanda kutip ganda dalam sebuah #include direktif tidak dengan sendirinya menentukan apakah tajuk itu akan muncul di -MM keluaran ketergantungan. Ini adalah sedikit perubahan dalam semantik dari GCC versi 3.0 dan sebelumnya.

-MF fillet Saat digunakan dengan -M or -MM, menentukan file untuk menulis dependensi. Jika tidak -MF switch diberikan preprocessor mengirimkan aturan ke tempat yang sama yang akan dikirim keluaran yang telah diproses sebelumnya.

Saat digunakan dengan opsi driver -MD or -MMD, -MF menimpa ketergantungan default berkas keluaran.

-MG Dalam hubungannya dengan opsi seperti -M meminta pembuatan ketergantungan, -MG mengasumsikan file header yang hilang adalah file yang dihasilkan dan menambahkannya ke daftar ketergantungan tanpa meningkatkan kesalahan. Nama file dependensi diambil langsung dari "#include" direktif tanpa mengawali jalur apa pun. -MG juga menekan output yang telah diproses sebelumnya, sebagai file header yang hilang membuat ini tidak berguna.

Fitur ini digunakan dalam pembaruan otomatis makefile.

-MP Opsi ini menginstruksikan CPP untuk menambahkan target palsu untuk setiap ketergantungan selain dari file utama, menyebabkan masing-masing tidak bergantung pada apa pun. Aturan dummy ini mengatasi kesalahan membuat memberi jika Anda menghapus file header tanpa memperbarui Makefile untuk mencocokkan.

Ini adalah keluaran khas:

uji.o: uji.c uji.h

tes.h:

-MT target Ubah target aturan yang dikeluarkan oleh pembuatan ketergantungan. Secara default, CPP membutuhkan nama file input utama, menghapus semua komponen direktori dan akhiran file apa pun seperti .c, dan menambahkan akhiran objek platform yang biasa. Hasilnya adalah sasaran.

An -MT option akan menetapkan target menjadi persis seperti string yang Anda tentukan. jika kamu mau beberapa target, Anda dapat menentukannya sebagai argumen tunggal untuk -MT, atau gunakan beberapa -MT Pilihan.

Sebagai contoh, -MT '$(objpfx)foo.o' mungkin memberi

$(objpfx)foo.o: foo.c

-MQ target Sama dengan -MT, tetapi mengutip karakter apa pun yang khusus dibuat. -MQ '$(objpfx)foo.o' memberikan

$$(objpfx)foo.o: foo.c

Target default secara otomatis dikutip, seolah-olah diberikan dengan -MQ.

-MD -MD adalah setara dengan -M -MF fillet, kecuali itu -E tidak tersirat. Supir ditentukan fillet berdasarkan apakah -o opsi diberikan. Jika ya, pengemudi menggunakannya argumen tetapi dengan akhiran .d, jika tidak, dibutuhkan nama file input, menghapus semua komponen direktori dan sufiks, dan menerapkan a .d akhiran.

If -MD digunakan bersama dengan -E, apa saja -o sakelar dipahami untuk menentukan file keluaran ketergantungan, tetapi jika digunakan tanpa -Emasing-masing -o dipahami untuk menentukan berkas objek sasaran.

Sejak -E tidak tersirat, -MD dapat digunakan untuk menghasilkan file keluaran ketergantungan sebagai efek samping dari proses kompilasi.

-MMD Seperti -MD kecuali hanya menyebutkan file header pengguna, bukan file header sistem.

-fpch-deps Saat menggunakan header yang telah dikompilasi, flag ini akan menyebabkan flag output-dependensi menjadi juga daftar file dari dependensi header yang telah dikompilasi. Jika tidak ditentukan saja header yang telah dikompilasi akan dicantumkan dan bukan file yang digunakan untuk membuatnya karena file-file tersebut tidak dikonsultasikan ketika header yang telah dikompilasi digunakan.

-fpch-praproses Opsi ini memungkinkan penggunaan header yang telah dikompilasi bersama dengan -E. Ini menyisipkan spesial "#pragma", "#pragma GCC pch_preprocess "nama file"" di output untuk menandai tempat di mana tajuk yang telah dikompilasi ditemukan, dan nama file. Ketika -fpreprocessed dalam gunakan, GCC mengenali "#pragma" ini dan memuat PCH.

Opsi ini tidak aktif secara default, karena output praproses yang dihasilkan hanya sangat cocok sebagai input ke GCC. Ini diaktifkan oleh -hemat-temps.

Anda tidak boleh menulis "#pragma" ini dalam kode Anda sendiri, tetapi aman untuk mengeditnya nama file jika file PCH tersedia di lokasi yang berbeda. Nama filenya mungkin absolut atau mungkin relatif terhadap direktori GCC saat ini.

-x c -x c ++ -x objektif-c -x assembler-dengan-cpp Tentukan bahasa sumber: C, C++, Objective-C, atau assembly. Ini tidak ada hubungannya dengan kesesuaian standar atau ekstensi; itu hanya memilih sintaks dasar mana yang akan mengharapkan. Jika Anda tidak memberikan salah satu dari opsi ini, cpp akan menyimpulkan bahasa dari ekstensi file sumber: .c, Cc., .m, atau .S. Beberapa ekstensi umum lainnya untuk C++ dan perakitan juga dikenali. Jika cpp tidak mengenali ekstensi, itu akan memperlakukan file sebagai C; ini adalah mode yang paling umum.

Catatan: Versi cpp sebelumnya diterima -lang opsi yang memilih keduanya bahasa dan tingkat kesesuaian standar. Opsi ini telah dihapus, karena itu bertentangan dengan -l .

-std=standar -ansi Tentukan standar yang harus dipatuhi oleh kode. Saat ini CPP mengetahui tentang C dan standar C++; lain dapat ditambahkan di masa depan.

standar mungkin salah satu dari:

"c90" "c89" "iso9899: 1990" Standar ISO C dari tahun 1990. c90 adalah singkatan biasa untuk versi ini standar.

The -ansi pilihan setara dengan -std=c90.

"iso9899: 199409" Standar 1990 C, sebagaimana diubah pada tahun 1994.

"iso9899: 1999" "c99" "iso9899:199x" "c9x" Standar ISO C yang direvisi, diterbitkan pada Desember 1999. Sebelum dipublikasikan, ini dikenal sebagai C9X.

"iso9899: 2011" "c11" "c1x" Standar ISO C yang direvisi, diterbitkan pada Desember 2011. Sebelum dipublikasikan, ini dikenal sebagai C1X.

"gnu90" "gnu89" Standar 1990 C ditambah ekstensi GNU. Ini adalah default.

"gnu99" "gnu9x" Standar C 1999 plus ekstensi GNU.

"gnu11" "gnu1x" Standar C 2011 plus ekstensi GNU.

"c++98" Standar ISO C++ 1998 plus amandemen.

"gnu++98" Sama seperti -std=c++98 ditambah ekstensi GNU. Ini adalah default untuk kode C++.

-SAYA- Pisahkan jalur sertakan. Direktori apa pun yang ditentukan dengan -I pilihan sebelumnya -SAYA- adalah hanya mencari header yang diminta dengan "#include "mengajukan""; mereka tidak dicari "#termasukberkas>". Jika direktori tambahan ditentukan dengan -I pilihan setelah -SAYA-, direktori-direktori itu dicari semua #include arahan.

Selain itu, -SAYA- menghambat penggunaan direktori direktori file saat ini sebagai direktori pencarian pertama untuk "#include"mengajukan"". Opsi ini tidak digunakan lagi.

-nostdinc Jangan mencari direktori sistem standar untuk file header. Hanya direktori Anda telah menentukan dengan -I opsi (dan direktori file saat ini, jika sesuai) dicari.

-nostdinc++ Jangan mencari file header di direktori standar khusus C++, tetapi tetap lakukan cari direktori standar lainnya. (Opsi ini digunakan saat membangun C++ Perpustakaan.)

-termasuk fillet Proses fillet seolah-olah "#include"file"" muncul sebagai baris pertama dari sumber utama mengajukan. Namun, direktori pertama mencari fillet apakah preprosesor berfungsi? direktori sebagai gantinya of direktori yang berisi file sumber utama. Jika tidak ditemukan di sana, itu dicari di sisa rantai pencarian "#include "..."" sebagai Normal.

Jika banyak -termasuk opsi diberikan, file disertakan dalam urutannya muncul di baris perintah.

-imacros fillet Tepat seperti -termasuk, kecuali bahwa setiap output yang dihasilkan oleh pemindaian fillet dilempar jauh. Makro yang didefinisikannya tetap ditentukan. Ini memungkinkan Anda untuk memperoleh semua makro dari header tanpa juga memproses deklarasinya.

Semua file ditentukan oleh -imacros diproses sebelum semua file ditentukan oleh -termasuk.

-idirafter dir Pencarian dir untuk file header, tetapi lakukanlah setelah semua direktori yang ditentukan dengan -I dan direktori sistem standar telah habis. dir diperlakukan sebagai suatu sistem termasuk direktori. Jika dir dimulai dengan "=", maka "=" akan diganti dengan sysroot awalan; Lihat --sysroot serta -isysroot.

-iprefix awalan Menentukan awalan sebagai awalan untuk selanjutnya -iwithprefix pilihan. Jika awalan mewakili direktori, Anda harus menyertakan final /.

-iwithprefix dir -iwithprefixbefore dir Menambahkan dir ke awalan yang ditentukan sebelumnya dengan -iprefix, dan tambahkan hasilnya direktori ke jalur pencarian sertakan. -iwithprefixbefore meletakkannya di tempat yang sama -I akan; -iwithprefix taruh di mana -idirafter akan.

-isysroot dir Opsi ini seperti --sysroot opsi, tetapi hanya berlaku untuk file header (kecuali untuk Target Darwin, yang berlaku untuk file header dan pustaka). Lihat --sysroot pilihan untuk informasi lebih lanjut.

-imultilib dir penggunaan dir sebagai subdirektori dari direktori yang berisi header C++ target-spesifik.

-isistem dir Pencarian dir untuk file header, setelah semua direktori ditentukan oleh -I tapi sebelum direktori sistem standar. Tandai sebagai direktori sistem, sehingga mendapatkan yang sama perlakuan khusus seperti yang diterapkan pada direktori sistem standar. Jika dir dimulai dengan "=", maka "=" akan diganti dengan awalan sysroot; Lihat --sysroot serta -isysroot.

-Saya mengutip dir Pencarian dir hanya untuk file header yang diminta dengan "#include"mengajukan""; mereka tidak mencari "#includeberkas>", sebelum semua direktori ditentukan oleh -I dan sebelum direktori sistem standar. Jika dir dimulai dengan "=", maka "=" akan diganti dengan awalan sysroot; Lihat --sysroot serta -isysroot.

-fdirectives-saja Saat melakukan prapemrosesan, tangani arahan, tetapi jangan perluas makro.

Perilaku opsi tergantung pada -E serta -fpreprocessed Pilihan.

Dengan -E, preprocessing terbatas pada penanganan arahan seperti "#define", "#ifdef", dan "#error". Operasi praprosesor lainnya, seperti ekspansi makro dan konversi trigraf tidak dilakukan. Selain itu, -DD pilihan secara implisit diaktifkan.

Dengan -fpreprocessed, definisi baris perintah dan sebagian besar makro bawaan adalah dengan disabilitas. Makro seperti "__LINE__", yang bergantung secara kontekstual, ditangani biasanya. Ini memungkinkan kompilasi file yang sebelumnya diproses dengan "-E -fdirectives-only".

Dengan keduanya -E serta -fpreprocessed, aturan untuk -fpreprocessed diutamakan. Ini memungkinkan pra-pemrosesan penuh file yang sebelumnya diproses sebelumnya dengan "-E -fdirectives-only".

-fdollar-in-identifier Setuju $ dalam pengidentifikasi.

-pengidentifikasi yang diperluas Terima nama karakter universal dalam pengidentifikasi. Opsi ini diaktifkan secara default untuk C99 (dan versi standar C yang lebih baru) dan C++.

-fno-kanonik-sistem-header Saat melakukan prapemrosesan, jangan mempersingkat jalur header sistem dengan kanonikalisasi.

-fpreprocessed Tunjukkan kepada praprosesor bahwa file input telah diproses sebelumnya. Ini menekan hal-hal seperti ekspansi makro, konversi trigraf, lolos penyambungan baris baru, dan pemrosesan sebagian besar arahan. Praprosesor masih mengenali dan menghapus komentar, sehingga Anda dapat mengirimkan file yang telah diproses sebelumnya dengan -C ke kompiler tanpa masalah. Dalam mode ini, praprosesor terintegrasi tidak lebih dari sekadar tokenizer untuk ujung depan.

-fpreprocessed implisit jika file input memiliki salah satu ekstensi .i, .ii or .mi. Ini adalah ekstensi yang digunakan GCC untuk file yang telah diproses sebelumnya yang dibuat oleh -hemat-temps.

-ftabstop=lebar Atur jarak antara perhentian tab. Ini membantu praprosesor melaporkan kolom yang benar nomor dalam peringatan atau kesalahan, bahkan jika tab muncul di telepon. Jika nilainya kurang dari 1 atau lebih besar dari 100, opsi diabaikan. Standarnya adalah 8.

-fdebug-cpp Opsi ini hanya berguna untuk men-debug GCC. Saat digunakan dengan -E, membuang debug informasi tentang peta lokasi. Setiap token dalam output didahului oleh dump of peta lokasi miliknya. Tempat pembuangan peta yang menyimpan lokasi token akan menjadi:

{"P":F ;"F":F ;"L": ;"C": ;"S": ;"M": ;"E": ,"lokasi": }

Saat digunakan tanpa -E, opsi ini tidak berpengaruh.

-ftrack-makro-ekspansi[=tingkat] Lacak lokasi token di seluruh ekspansi makro. Ini memungkinkan kompiler untuk memancarkan diagnostik tentang tumpukan ekspansi makro saat ini ketika terjadi kesalahan kompilasi di ekspansi makro. Menggunakan opsi ini membuat praprosesor dan kompiler mengkonsumsi lebih banyak memori. NS tingkat parameter dapat digunakan untuk memilih tingkat presisi token pelacakan lokasi sehingga mengurangi konsumsi memori jika perlu. Nilai 0 of tingkat menonaktifkan opsi ini seolah-olah tidak -ftrack-makro-ekspansi hadir pada baris perintah. Nilai 1 melacak lokasi token dalam mode terdegradasi demi overhead memori minimal. Dalam mode ini semua token yang dihasilkan dari perluasan argumen makro seperti fungsi memiliki lokasi yang sama. Nilai 2 melacak token lokasi sepenuhnya. Nilai ini adalah yang paling haus memori. Ketika opsi ini diberikan tidak ada argumen, nilai parameter default adalah 2.

Perhatikan bahwa "-ftrack-macro-expansion=2" diaktifkan secara default.

-fexec-charset=rangkaian karakter Mengatur set karakter eksekusi, digunakan untuk string dan konstanta karakter. Standarnya adalah UTF-8. rangkaian karakter dapat berupa penyandian apa pun yang didukung oleh perpustakaan "iconv" sistem rutin.

-fwide-exec-charset=rangkaian karakter Atur rangkaian karakter eksekusi lebar, digunakan untuk string lebar dan konstanta karakter. Standarnya adalah UTF-32 atau UTF-16, mana saja yang sesuai dengan lebar "wchar_t". Sebagai dengan -fexec-charset, rangkaian karakter dapat berupa penyandian apa pun yang didukung oleh "iconv" sistem rutinitas perpustakaan; namun, Anda akan mengalami masalah dengan penyandian yang tidak sesuai tepatnya di "wchar_t".

-finput-charset=rangkaian karakter Atur set karakter input, digunakan untuk terjemahan dari set karakter input file ke set karakter sumber yang digunakan oleh GCC. Jika lokal tidak menentukan, atau GCC tidak bisa mendapatkan informasi ini dari lokal, defaultnya adalah UTF-8. Ini bisa jadi ditimpa oleh lokal atau opsi baris perintah ini. Saat ini perintah- opsi baris diutamakan jika ada konflik. rangkaian karakter dapat berupa penyandian apa pun didukung oleh rutin perpustakaan "iconv" sistem.

-fworking-direktori Aktifkan pembuatan penanda garis di output praprosesor yang memungkinkan kompiler mengetahui direktori kerja saat ini pada saat preprocessing. Ketika opsi ini adalah diaktifkan, praprosesor akan memancarkan, setelah penanda garis awal, penanda garis kedua dengan direktori kerja saat ini diikuti oleh dua garis miring. GCC akan menggunakan ini direktori, ketika ada di input yang diproses sebelumnya, sebagai direktori yang dipancarkan sebagai direktori kerja saat ini dalam beberapa format informasi debug. Pilihan ini adalah secara implisit diaktifkan jika informasi debug diaktifkan, tetapi ini dapat dihambat dengan bentuk yang dinegasikan -fno-working-direktori. Jika -P bendera hadir dalam perintah baris, opsi ini tidak berpengaruh, karena tidak ada arahan "#line" yang dikeluarkan sama sekali.

-fno-show-kolom Jangan mencetak nomor kolom dalam diagnostik. Ini mungkin diperlukan jika diagnostik dipindai oleh program yang tidak memahami nomor kolom, seperti dejagnu.

-A predikat=menjawab Buatlah pernyataan dengan predikat predikat dan jawab menjawab. Bentuk ini adalah lebih disukai daripada bentuk yang lebih tua -A predikat(menjawab), yang masih didukung, karena tidak menggunakan karakter khusus shell.

-A -predikat=menjawab Batalkan pernyataan dengan predikat predikat dan jawab menjawab.

-dCHARS BIAYA adalah urutan dari satu atau lebih karakter berikut, dan tidak boleh didahului dengan spasi. Karakter lain ditafsirkan oleh kompiler yang tepat, atau dicadangkan untuk versi GCC mendatang, sehingga diabaikan secara diam-diam. Jika Anda menentukan karakter yang perilakunya bertentangan, hasilnya tidak terdefinisi.

M Alih-alih output normal, buat daftar #menetapkan arahan untuk semua makro yang ditentukan selama eksekusi praprosesor, termasuk yang telah ditentukan sebelumnya makro. Ini memberi Anda cara untuk mengetahui apa yang telah ditentukan sebelumnya dalam versi praprosesor. Dengan asumsi Anda tidak memiliki file foo.h, perintah

sentuh foo.h; cpp -dM foo.h

akan menampilkan semua makro yang telah ditentukan sebelumnya.

Jika Anda menggunakan -dM tanpa -E pilihan, -dM diartikan sebagai sinonim untuk -fdump-rtl-mach.

D Seperti M kecuali dalam dua hal: itu benar tidak termasuk makro yang telah ditentukan, dan itu output kedua itu #menetapkan arahan dan hasil dari preprocessing. Kedua jenis output pergi ke file output standar.

N Seperti D, tetapi hanya memancarkan nama makro, bukan perluasannya.

I Keluaran #include arahan selain hasil preprocessing.

U Seperti D kecuali hanya makro yang diperluas, atau yang ketegasannya diuji dalam arahan preprocessor, adalah output; output ditunda hingga penggunaan atau uji makro; dan #undef arahan juga merupakan output untuk makro yang diuji tetapi tidak terdefinisi pada saat itu.

-P Menghambat pembuatan linemarker dalam output dari praprosesor. Ini mungkin berguna saat menjalankan preprocessor pada sesuatu yang bukan kode C, dan akan dikirim ke program yang mungkin dikacaukan oleh penanda garis.

-C Jangan buang komentar. Semua komentar diteruskan ke file output, kecuali untuk komentar dalam arahan yang diproses, yang dihapus bersama dengan arahan.

Anda harus siap untuk efek samping saat menggunakan -C; itu menyebabkan praprosesor untuk memperlakukan komentar sebagai token dalam hak mereka sendiri. Misalnya, komentar yang muncul di awal dari apa yang akan menjadi garis direktif memiliki efek mengubah garis itu menjadi sebuah saluran sumber biasa, karena token pertama pada saluran tidak lagi #.

-CC Jangan membuang komentar, termasuk selama ekspansi makro. Ini seperti -C, kecuali bahwa komentar yang terkandung dalam makro juga diteruskan ke file output di mana makro diperluas.

Selain efek samping dari -C opsi, opsi -CC opsi menyebabkan semua gaya C++ komentar di dalam makro untuk dikonversi ke komentar gaya-C. Ini untuk mencegah nanti penggunaan makro itu dari secara tidak sengaja mengomentari sisa baris sumber.

The -CC option umumnya digunakan untuk mendukung komentar lint.

-tradisional-cpp Cobalah untuk meniru perilaku praprosesor C kuno, sebagai lawan dari ISO C praprosesor.

-trigraf Urutan trigraf proses. Ini adalah urutan tiga karakter, semuanya dimulai dengan ??, yang didefinisikan oleh ISO C untuk mewakili karakter tunggal. Sebagai contoh, ??/ berdiri untuk \, sehingga '??/n' adalah konstanta karakter untuk baris baru. Secara default, GCC mengabaikan trigraf, tetapi dalam mode yang sesuai standar, ia mengubahnya. Lihat -std serta -ansi Pilihan.

Sembilan trigraf dan penggantinya adalah

Trigraf: ??( ??) ??< ??> ??= ??/ ??' ??! ??- Pengganti: [ ] {} # \ ^ | ~

-remap Aktifkan kode khusus untuk mengatasi sistem file yang hanya mengizinkan file yang sangat pendek nama, seperti MS-DOS.

--membantu --target-bantuan Cetak teks yang menjelaskan semua opsi baris perintah alih-alih memproses apa pun sebelumnya.

-v Modus verbose. Cetak nomor versi GNU CPP di awal eksekusi, dan laporkan bentuk akhir dari jalur penyertaan.

-H Cetak nama setiap file header yang digunakan, selain aktivitas normal lainnya. Setiap nama menjorok untuk menunjukkan seberapa dalam #include tumpukan itu. Header yang telah dikompilasi sebelumnya file juga dicetak, meskipun ternyata tidak valid; prakompilasi yang tidak valid file header dicetak dengan ...X dan yang valid dengan ...! .

-versi --Versi: kapan Cetak nomor versi GNU CPP. Dengan satu tanda hubung, lanjutkan ke praproses seperti biasa. Dengan dua tanda hubung, segera keluar.

Lewat Opsi untuk itu Assembler Anda dapat meneruskan opsi ke assembler.

-Wa,Option Lulus Option sebagai pilihan untuk assembler. Jika Option mengandung koma, itu dibagi menjadi beberapa opsi di koma.

-Xassembler Option Lulus Option sebagai pilihan untuk assembler. Anda dapat menggunakan ini untuk memasok sistem khusus opsi assembler yang tidak dikenali GCC.

Jika Anda ingin melewati opsi yang membutuhkan argumen, Anda harus menggunakan -Xassembler dua kali, sekali untuk opsi dan sekali untuk argumen.

Opsi untuk Menghubungkan Opsi-opsi ini ikut bermain ketika kompiler menautkan file objek ke dalam file yang dapat dieksekusi berkas keluaran. Mereka tidak ada artinya jika kompiler tidak melakukan langkah tautan.

nama-file-objek Nama file yang tidak diakhiri dengan akhiran khusus yang dikenali dianggap sebagai nama dan file objek atau perpustakaan. (File objek dibedakan dari perpustakaan oleh tautan sesuai dengan isi file.) Jika penautan dilakukan, file objek ini digunakan sebagai masukan ke penghubung.

-c -S -E Jika salah satu dari opsi ini digunakan, maka tautan tidak dijalankan, dan nama file objek tidak boleh digunakan sebagai argumen.

-sekering-ld=bfd Gunakan bfd linker bukan linker default.

-fuse-ld=emas Gunakan emas linker bukan linker default.

-lperpustakaan -l perpustakaan Cari perpustakaan bernama perpustakaan saat menghubungkan. (Alternatif kedua dengan perpustakaan sebagai argumen terpisah hanya untuk kepatuhan POSIX dan tidak disarankan.)

Itu membuat perbedaan di mana dalam perintah Anda menulis opsi ini; pencarian tautan dan memproses perpustakaan dan file objek dalam urutan yang ditentukan. Dengan demikian, foo.o -lz bar.o pencarian perpustakaan z setelah file foo.o tapi sebelum bar.o. Jika bar.o mengacu pada fungsi dalam z, fungsi tersebut mungkin tidak dimuat.

Linker mencari daftar direktori standar untuk perpustakaan, yang sebenarnya sebuah file bernama perpustakaan.a. Linker kemudian menggunakan file ini seolah-olah telah ditentukan tepatnya dengan nama.

Direktori yang dicari mencakup beberapa direktori sistem standar ditambah yang Anda tentukan dengan -L.

Biasanya file yang ditemukan dengan cara ini adalah file perpustakaan --- file arsip yang anggotanya file objek. Penaut menangani file arsip dengan memindainya untuk anggota yang mendefinisikan simbol yang sejauh ini telah direferensikan tetapi tidak didefinisikan. Tapi jika file yang ditemukan adalah file objek biasa, itu ditautkan dengan cara biasa. NS hanya perbedaan antara menggunakan -l opsi dan menentukan nama file adalah -l mengelilingi perpustakaan dengan lib serta .a dan mencari beberapa direktori.

-lobjc Anda membutuhkan kasing khusus ini -l opsi untuk menautkan Objective-C atau Program Objective-C++.

-nostartfiles Jangan gunakan file startup sistem standar saat menautkan. Sistem standar perpustakaan digunakan secara normal, kecuali -nostdlib or -nodefaultlibs digunakan.

-nodefaultlibs Jangan gunakan pustaka sistem standar saat menautkan. Hanya perpustakaan yang Anda tentukan diteruskan ke tautan, dan opsi yang menentukan tautan pustaka sistem, seperti as -statis-libgcc or -shared-libgcc, diabaikan. File startup standar digunakan biasanya, kecuali -nostartfiles digunakan.

Kompiler dapat menghasilkan panggilan ke "memcmp", "memset", "memcpy" dan "memmove". Ini entri biasanya diselesaikan dengan entri di libc. Titik masuk ini harus disediakan melalui beberapa mekanisme lain ketika opsi ini ditentukan.

-nostdlib Jangan gunakan file atau pustaka startup sistem standar saat menautkan. Tidak ada startup file dan hanya perpustakaan yang Anda tentukan yang diteruskan ke tautan, dan opsi menentukan tautan pustaka sistem, seperti: -statis-libgcc or -shared-libgcc, diabaikan.

Kompiler dapat menghasilkan panggilan ke "memcmp", "memset", "memcpy" dan "memmove". Ini entri biasanya diselesaikan dengan entri di libc. Titik masuk ini harus disediakan melalui beberapa mekanisme lain ketika opsi ini ditentukan.

Salah satu perpustakaan standar dilewati -nostdlib serta -nodefaultlibs is libgcc.a, Sebuah perpustakaan subrutin internal yang digunakan GCC untuk mengatasi kekurangan tertentu mesin, atau kebutuhan khusus untuk beberapa bahasa.

Dalam kebanyakan kasus, Anda perlu libgcc.a bahkan ketika Anda ingin menghindari pustaka standar lainnya. Dengan kata lain, ketika Anda menentukan -nostdlib or -nodefaultlibs kamu harus biasanya menentukan -lgcc demikian juga. Ini memastikan bahwa Anda tidak memiliki referensi yang belum terselesaikan untuk subrutin perpustakaan GCC internal. (Contoh dari subrutin internal seperti itu adalah "__main", digunakan untuk memastikan konstruktor C++ dipanggil.)

-pai Menghasilkan posisi independen yang dapat dieksekusi pada target yang mendukungnya. Untuk diprediksi hasil, Anda juga harus menentukan set opsi yang sama yang digunakan untuk kompilasi (-fpie, -fPIE, atau subopsi model) saat Anda menentukan opsi penaut ini.

-tidak-pai Jangan menghasilkan posisi yang dapat dieksekusi secara independen.

-rdinamis Lewati bendera -ekspor-dinamis ke linker ELF, pada target yang mendukungnya. Ini menginstruksikan linker untuk menambahkan semua simbol, tidak hanya simbol yang digunakan, ke simbol dinamis meja. Opsi ini diperlukan untuk beberapa penggunaan "dlopen" atau untuk memungkinkan memperoleh backtrace dari dalam sebuah program.

-s Hapus semua tabel simbol dan informasi relokasi dari executable.

-statis Pada sistem yang mendukung penautan dinamis, ini mencegah penautan dengan yang dibagikan perpustakaan. Pada sistem lain, opsi ini tidak berpengaruh.

-bersama Menghasilkan objek bersama yang kemudian dapat dihubungkan dengan objek lain untuk membentuk sebuah dapat dieksekusi. Tidak semua sistem mendukung opsi ini. Untuk hasil yang dapat diprediksi, Anda harus juga tentukan set opsi yang sama yang digunakan untuk kompilasi (-fpic, -fPIC, atau model subopsi) saat Anda menentukan opsi penaut ini.[1]

-shared-libgcc -statis-libgcc Pada sistem yang menyediakan libgcc sebagai perpustakaan bersama, opsi ini memaksa penggunaan baik versi bersama atau statis, masing-masing. Jika tidak ada versi yang dibagikan libgcc adalah dibangun ketika kompiler dikonfigurasi, opsi ini tidak berpengaruh.

Ada beberapa situasi di mana aplikasi harus menggunakan shared libgcc alih-alih versi statis. Yang paling umum adalah ketika aplikasi ingin melempar dan menangkap pengecualian di berbagai perpustakaan bersama. Dalam hal itu, masing-masing perpustakaan serta aplikasi itu sendiri harus menggunakan shared libgcc.

Oleh karena itu, driver G++ dan GCJ secara otomatis menambahkan -shared-libgcc kapan pun Anda membangun perpustakaan bersama atau executable utama, karena program C++ dan Java biasanya menggunakan pengecualian, jadi ini adalah hal yang benar untuk dilakukan.

Sebaliknya, jika Anda menggunakan driver GCC untuk membuat pustaka bersama, Anda mungkin menemukan bahwa mereka tidak selalu terkait dengan yang dibagikan libgcc. Jika GCC menemukan, pada konfigurasinya waktu, Anda memiliki tautan non-GNU atau tautan GNU yang tidak mendukung opsi --eh-bingkai-hdr, ini menautkan versi bersama dari libgcc ke perpustakaan bersama oleh bawaan. Jika tidak, ia memanfaatkan tautan dan mengoptimalkan tautan dengan versi bersama dari libgcc, menautkan dengan versi statis libgcc oleh bawaan. Hal ini memungkinkan pengecualian untuk menyebar melalui perpustakaan bersama tersebut, tanpa menimbulkan biaya relokasi pada waktu buka perpustakaan.

Namun, jika perpustakaan atau executable utama seharusnya melempar atau menangkap pengecualian, Anda harus menautkannya menggunakan driver G++ atau GCJ, yang sesuai untuk bahasa yang digunakan di program, atau menggunakan opsi -shared-libgcc, sehingga ditautkan dengan yang dibagikan libgcc.

-statis-libasan Ketika -fsanitize=alamat opsi digunakan untuk menautkan program, driver GCC secara otomatis menautkan ke libasan. Jika libasan tersedia sebagai perpustakaan bersama, dan itu -statis opsi tidak digunakan, maka tautan ini terhadap versi bersama dari libasan. The -statis-libasan opsi mengarahkan driver GCC untuk menautkan libasan statis, tanpa tentu menghubungkan perpustakaan lain secara statis.

-statis-libtsan Ketika -fsanitize=utas opsi digunakan untuk menautkan program, driver GCC secara otomatis menautkan ke libtsan. Jika libtsan tersedia sebagai perpustakaan bersama, dan itu -statis opsi tidak digunakan, maka tautan ini terhadap versi bersama dari libtsan. The -statis-libtsan opsi mengarahkan driver GCC untuk menautkan libtsan statis, tanpa tentu menghubungkan perpustakaan lain secara statis.

-statis-liblsan Ketika -fsanitize=kebocoran opsi digunakan untuk menautkan program, driver GCC secara otomatis menautkan ke liblsan. Jika liblsan tersedia sebagai perpustakaan bersama, dan itu -statis opsi tidak digunakan, maka tautan ini terhadap versi bersama dari liblsan. The -statis-liblsan opsi mengarahkan driver GCC untuk menautkan liblsan statis, tanpa tentu menghubungkan perpustakaan lain secara statis.

-statis-libubsan Ketika -fsanitize=tidak terdefinisi opsi digunakan untuk menautkan program, driver GCC secara otomatis menautkan ke libubsan. Jika libubsan tersedia sebagai perpustakaan bersama, dan -statis opsi tidak digunakan, maka tautan ini terhadap versi bersama dari libubsan. itu -statis-libubsan opsi mengarahkan driver GCC untuk menautkan libubsan statis, tanpa harus menghubungkan perpustakaan lain secara statis.

-static-libmpx Ketika -fcheck-pointer batas serta -mmpx opsi digunakan untuk menautkan program, GCC driver secara otomatis menautkan ke libmpx. Jika libmpx tersedia untuk dibagikan perpustakaan, dan -statis opsi tidak digunakan, maka tautan ini melawan yang dibagikan versi libmpx. itu -static-libmpx opsi mengarahkan driver GCC untuk menautkan libmpx statis, tanpa harus menghubungkan perpustakaan lain secara statis.

-static-libmpxwrappers Ketika -fcheck-pointer batas serta -mmpx opsi digunakan untuk menautkan program tanpa juga menggunakan -fno-chkp-use-wrappers, driver GCC secara otomatis menautkan ke libmpxwrappers. Jika libmpxwrappers tersedia sebagai perpustakaan bersama, dan -statis opsi tidak digunakan, maka tautan ini terhadap versi bersama dari libmpxwrappers. itu -static-libmpxwrappers opsi mengarahkan driver GCC untuk menautkan libmpxwrappers statis, tanpa harus menghubungkan perpustakaan lain secara statis.

-static-libstdc++ Ketika g ++ program digunakan untuk menautkan program C++, biasanya secara otomatis menautkan terhadap libstdc++. Jika libstdc++ tersedia sebagai perpustakaan bersama, dan -statis opsi tidak digunakan, maka tautan ini terhadap versi bersama dari libstdc++. Itu adalah biasanya baik-baik saja. Namun, terkadang berguna untuk membekukan versi libstdc++ digunakan oleh program tanpa melalui tautan yang sepenuhnya statis. NS -static-libstdc++ pilihan mengarahkan g ++ driver untuk menghubungkan libstdc++ statis, tanpa tentu menghubungkan perpustakaan lain secara statis.

-simbolis Ikat referensi ke simbol global saat membuat objek bersama. Peringatkan tentang apapun referensi yang belum terselesaikan (kecuali diganti oleh opsi editor tautan -Xlinker -z -Xlinker def). Hanya beberapa sistem yang mendukung opsi ini.

-T naskah penggunaan naskah sebagai skrip tautan. Opsi ini didukung oleh sebagian besar sistem yang menggunakan penghubung GNU. Pada beberapa target, seperti target bare-board tanpa sistem operasi, itu -T opsi mungkin diperlukan saat menautkan untuk menghindari referensi ke simbol yang tidak ditentukan.

-Xlinker Option Lulus Option sebagai pilihan untuk linker. Anda dapat menggunakan ini untuk memasok sistem khusus opsi penaut yang tidak dikenali GCC.

Jika Anda ingin melewati opsi yang mengambil argumen terpisah, Anda harus menggunakan -Xlinker dua kali, sekali untuk opsi dan sekali untuk argumen. Misalnya, untuk lulus -menegaskan definisi, kamu harus menulis -Xlinker -menegaskan -Xlinker definisi. Tidak bekerja untuk menulis -Xlinker "-menegaskan definisi", karena ini melewatkan seluruh string sebagai a argumen tunggal, yang tidak diharapkan oleh linker.

Saat menggunakan tautan GNU, biasanya lebih mudah untuk meneruskan argumen ke tautan pilihan menggunakan Option=nilai sintaks daripada sebagai argumen terpisah. Misalnya, Anda dapat menentukan -Xlinker -Peta=output.map daripada -Xlinker -Peta -Xlinker keluaran.peta. Linker lain mungkin tidak mendukung sintaks ini untuk opsi baris perintah.

-Wl,Option Lulus Option sebagai pilihan untuk linker. Jika Option mengandung koma, itu dibagi menjadi beberapa opsi di koma. Anda dapat menggunakan sintaks ini untuk meneruskan argumen ke pilihan. Sebagai contoh, -Wl,-Peta,output.map melewati -Peta keluaran.peta ke penghubung. Kapan menggunakan tautan GNU, Anda juga bisa mendapatkan efek yang sama dengan -Wl,-Peta=output.map.

CATATAN: Di Ubuntu 8.10 dan versi yang lebih baru, untuk LDFLAGS, opsinya -Wl,-z,relro digunakan. Untuk menonaktifkan, gunakan -Wl,-z,norelro.

-u simbol Berpura-pura simbol simbol tidak terdefinisi, untuk memaksa penautan modul perpustakaan untuk mendefinisikan dia. Anda dapat gunakan -u beberapa kali dengan simbol yang berbeda untuk memaksa memuat modul perpustakaan tambahan.

-z kata kunci -z diteruskan langsung ke tautan bersama dengan kata kunci kata kunci. Lihat bagian dalam dokumentasi penaut Anda untuk nilai yang diizinkan dan artinya.

Opsi untuk Direktori Pencarian Opsi ini menentukan direktori untuk mencari file header, untuk perpustakaan dan untuk bagian dari kompiler:

-Idir Tambahkan direktori dir ke kepala daftar direktori yang akan dicari header file. Ini dapat digunakan untuk mengganti file header sistem, menggantikan milik Anda versi, karena direktori ini dicari sebelum file header sistem direktori. Namun, Anda tidak boleh menggunakan opsi ini untuk menambahkan direktori yang berisi file header sistem yang disediakan vendor (gunakan -isistem untuk itu). Jika Anda menggunakan lebih dari satu -I pilihan, direktori dipindai dalam urutan kiri-ke-kanan; sistem standar direktori datang setelah.

Jika sistem standar menyertakan direktori, atau direktori yang ditentukan dengan -isistem, Apakah juga ditentukan dengan -I, yang -I pilihan diabaikan. Direktori masih dicari tapi sebagai direktori sistem pada posisi normalnya dalam sistem termasuk rantai. Ini untuk memastikan bahwa prosedur GCC untuk memperbaiki header sistem buggy dan pemesanan untuk Direktif "include_next" tidak diubah secara tidak sengaja. Jika Anda benar-benar perlu berubah urutan pencarian untuk direktori sistem, gunakan -nostdinc dan / atau -isistem Pilihan.

-iplugindir=dir Atur direktori untuk mencari plugin yang dilewati -fplugin=nama alih-alih -fplugin=path/nama.begitu. Opsi ini tidak dimaksudkan untuk digunakan oleh pengguna, tetapi hanya dilewati oleh pengemudi.

-Saya mengutipdir Tambahkan direktori dir ke kepala daftar direktori yang akan dicari header file hanya untuk kasus "#include"mengajukan""; mereka tidak mencari "#include ", jika tidak seperti -I.

-Ldir Tambahkan direktori dir ke daftar direktori yang akan dicari -l.

-Bawalan Opsi ini menentukan di mana menemukan executable, library, include files, dan file data dari kompiler itu sendiri.

Program driver compiler menjalankan satu atau lebih subprogram cpp, Cc1, as serta ld. Ini mencoba awalan sebagai awalan untuk setiap program yang dicoba dijalankan, baik dengan maupun tanpa mesin/versi/.

Untuk setiap subprogram yang akan dijalankan, driver compiler terlebih dahulu mencoba: -B awalan, jika ada. Jika nama itu tidak ditemukan, atau jika -B tidak ditentukan, pengemudi mencoba dua standar awalan, /usr/lib/gcc/ serta /usr/local/lib/gcc/. Jika keduanya tidak menghasilkan nama file yang ditemukan, nama program yang tidak dimodifikasi dicari menggunakan direktori yang ditentukan dalam Anda PATH variabel lingkungan.

Kompiler memeriksa untuk melihat apakah jalur yang disediakan oleh -B merujuk ke direktori, dan jika diperlukan itu menambahkan karakter pemisah direktori di akhir jalur.

-B awalan yang secara efektif menentukan nama direktori juga berlaku untuk perpustakaan di linker, karena kompiler menerjemahkan opsi ini menjadi -L pilihan untuk linker. Mereka juga berlaku untuk menyertakan file dalam praprosesor, karena kompilator menerjemahkan pilihan ini menjadi -isistem pilihan untuk praprosesor. Dalam hal ini, kompiler menambahkan memasukkan ke awalan.

File dukungan waktu proses libgcc.a juga dapat dicari menggunakan -B awalan, jika diperlukan. Jika tidak ditemukan di sana, dua awalan standar di atas dicoba, dan itu semua. File ditinggalkan dari tautan jika tidak ditemukan dengan cara itu.

Cara lain untuk menentukan awalan seperti -B awalannya adalah menggunakan lingkungan variabel GCC_EXEC_PREFIX.

Sebagai kludge khusus, jika jalur yang disediakan oleh -B is [dir/]tahapN/, Di mana N adalah angka dalam rentang 0 hingga 9, maka diganti dengan [dir/]termasuk. Ini untuk membantu boot- mengikat compiler.

-spesifikasi=fillet Proses fillet setelah kompiler membaca dalam standar spesifikasi file, untuk menimpa default yang gcc program driver yang digunakan saat menentukan sakelar apa yang harus dilewati untuk Cc1, cc1plus, as, ld, dll. Lebih dari satu -spesifikasi=fillet dapat ditentukan pada baris perintah, dan mereka diproses secara berurutan, dari kiri ke kanan.

--sysroot=dir penggunaan dir sebagai direktori root logis untuk header dan perpustakaan. Misalnya, jika compiler biasanya mencari header di / usr / include dan perpustakaan di / Usr / lib, Itu sebagai gantinya mencari dir/usr/termasuk serta dir/usr/lib.

Jika Anda menggunakan opsi ini dan -isysroot pilihan, maka --sysroot Option berlaku untuk perpustakaan, tetapi -isysroot opsi berlaku untuk file header.

Penghubung GNU (dimulai dengan versi 2.16) memiliki dukungan yang diperlukan untuk ini pilihan. Jika penaut Anda tidak mendukung opsi ini, aspek file header dari --sysroot masih berfungsi, tetapi aspek perpustakaan tidak.

--no-sysroot-akhiran Untuk beberapa target, sufiks ditambahkan ke direktori root yang ditentukan dengan --sysroot, tergantung pada opsi lain yang digunakan, sehingga tajuk misalnya dapat ditemukan di dir/suffix/usr/include alih-alih dir/usr/termasuk. Opsi ini menonaktifkan tambahan dari sufiks seperti itu.

-SAYA- Opsi ini tidak digunakan lagi. Mohon gunakan -Saya mengutip bukan untuk -I direktori sebelumnya itu -SAYA- dan hapus -SAYA- pilihan. Direktori apa pun yang Anda tentukan dengan -I pilihan sebelumnya itu -SAYA- opsi yang dicari hanya untuk kasus "#include"mengajukan""; mereka tidak mencari "#includeberkas>".

Jika direktori tambahan ditentukan dengan -I pilihan setelah -SAYA- pilihan, ini direktori dicari untuk semua arahan "#include". (Biasanya semua -I direktori digunakan dengan cara ini.)

Selain itu, -SAYA- opsi menghambat penggunaan direktori saat ini (di mana file input saat ini berasal) sebagai direktori pencarian pertama untuk "#include "mengajukan"". Tidak ada cara untuk mengesampingkan efek ini dari -SAYA-. Dengan -SAYA. Anda dapat menentukan pencarian direktori yang aktif saat kompiler dipanggil. Itu tidak persis sama seperti yang dilakukan oleh praprosesor secara default, tetapi seringkali memuaskan.

-SAYA- tidak menghambat penggunaan direktori sistem standar untuk file header. Demikian, -SAYA- serta -nostdinc independen.

Menentukan target Mesin serta Penyusun Versi Cara biasa untuk menjalankan GCC adalah dengan menjalankan executable yang disebut gcc, atau mesin-gcc ketika menyeberang- kompilasi, atau mesin-gcc-versi untuk menjalankan versi selain yang telah diinstal terakhir.

Perangkat keras Model serta Konfigurasi Setiap jenis mesin target dapat memiliki opsi khusus sendiri, dimulai dengan -m, untuk memilih di antara berbagai model atau konfigurasi perangkat keras---misalnya, 68010 vs 68020, mengambang koprosesor atau tidak sama sekali. Satu versi kompiler yang diinstal dapat dikompilasi untuk model apa pun atau konfigurasi, sesuai dengan opsi yang ditentukan.

Beberapa konfigurasi kompiler juga mendukung opsi khusus tambahan, biasanya untuk kompatibilitas dengan kompiler lain pada platform yang sama.

AAArch64 Opsi

Opsi ini ditentukan untuk implementasi AArch64:

-mabi=nama Menghasilkan kode untuk model data yang ditentukan. Nilai yang diperbolehkan adalah ilp32 untuk SysV- seperti model data di mana int, int panjang dan pointer adalah 32-bit, dan lp64 untuk SysV-like model data di mana int adalah 32-bit, tetapi int dan pointer panjang adalah 64-bit.

Defaultnya tergantung pada konfigurasi target tertentu. Perhatikan bahwa LP64 dan ABI ILP32 tidak kompatibel dengan tautan; Anda harus mengkompilasi seluruh program Anda dengan yang sama ABI, dan tautkan dengan kumpulan pustaka yang kompatibel.

-mbig-endian Hasilkan kode big-endian. Ini adalah default ketika GCC dikonfigurasi untuk aarch64_be-*-* target.

-mgeneral-regs-saja Hasilkan kode yang hanya menggunakan register umum.

-mlittle-endian Hasilkan kode little-endian. Ini adalah default ketika GCC dikonfigurasi untuk aarch64-*-* tapi bukan aarch64_be-*-* target.

-mcmodel=kecil Hasilkan kode untuk model kode kecil. Program dan simbol yang didefinisikan secara statis harus berada dalam jarak 1GB satu sama lain. Pointer adalah 64 bit. Program bisa statis atau terhubung secara dinamis. Model ini tidak sepenuhnya diterapkan dan sebagian besar diperlakukan sebagai kecil.

-mcmodel=kecil Hasilkan kode untuk model kode kecil. Program dan yang didefinisikan secara statis simbol harus berada dalam jarak 4GB satu sama lain. Pointer adalah 64 bit. Program dapat dihubungkan secara statis atau dinamis. Ini adalah model kode default.

-mcmodel=besar Hasilkan kode untuk model kode besar. Ini tidak membuat asumsi tentang alamat dan ukuran bagian. Pointer adalah 64 bit. Program hanya dapat dihubungkan secara statis.

-mtrict-align Jangan berasumsi bahwa referensi memori yang tidak selaras ditangani oleh sistem.

-momit-daun-frame-pointer -mno-menghilangkan-leaf-frame-pointer Abaikan atau pertahankan penunjuk bingkai dalam fungsi daun. Perilaku sebelumnya adalah standar.

-mtls-dialek=desc Gunakan deskriptor TLS sebagai mekanisme penyimpanan thread-lokal untuk akses dinamis TLS variabel. Ini adalah default.

-mtls-dialek=tradisional Gunakan TLS tradisional sebagai mekanisme penyimpanan thread-lokal untuk akses dinamis TLS variabel.

-mfix-korteks-a53-835769 -mno-fix-cortex-a53-835769 Aktifkan atau nonaktifkan solusi untuk nomor erratum ARM Cortex-A53 835769. Ini melibatkan penyisipan instruksi NOP antara instruksi memori dan integer 64-bit menggandakan-mengumpulkan instruksi.

-mfix-korteks-a53-843419 -mno-fix-cortex-a53-843419 Aktifkan atau nonaktifkan solusi untuk nomor erratum ARM Cortex-A53 843419. Ini solusi erratum dibuat pada waktu tautan dan ini hanya akan melewati tanda yang sesuai ke penghubung.

-maret=nama Tentukan nama arsitektur target, secara opsional diberi akhiran oleh satu atau lebih pengubah fitur. Opsi ini memiliki bentuk -maret=lengkungan{+[tidak]ciri}*, Dimana hanya nilai yang diizinkan untuk lengkungan is armv8-a. Nilai yang diizinkan untuk ciri adalah didokumentasikan dalam sub-bagian di bawah ini.

Di mana pengubah fitur yang bertentangan ditentukan, fitur paling kanan digunakan.

GCC menggunakan nama ini untuk menentukan jenis instruksi apa yang dapat dipancarkannya saat menghasilkan kode perakitan.

Dimana -berbaris ditentukan tanpa salah satu dari -mtune or -mcpu juga ditentukan, kode disetel untuk berkinerja baik di berbagai prosesor target yang mengimplementasikan arsitektur sasaran.

-mtune=nama Tentukan nama prosesor target yang GCC harus sesuaikan kinerjanya Kode. Nilai yang diizinkan untuk opsi ini adalah: umum, korteks-a53, korteks-a57, korteks-a72, exynos-m1, gunturx, xgen1.

Selain itu, opsi ini dapat menentukan bahwa GCC harus menyesuaikan kinerja kode untuk sistem besar. KECIL. Nilai yang diizinkan untuk opsi ini adalah: korteks-a57.korteks-a53, korteks-a72.korteks-a53.

Dimana tidak ada -mtune=, -mcpu= or -maret= ditentukan, kode disetel untuk tampil baik di berbagai prosesor target.

Opsi ini tidak dapat diberi akhiran oleh pengubah fitur.

-mcpu=nama Tentukan nama prosesor target, secara opsional diberi akhiran oleh satu atau lebih fitur pengubah. Opsi ini memiliki bentuk -mcpu=cpu{+[tidak]ciri}*, di mana diperbolehkan nilai untuk cpu sama dengan yang tersedia untuk -mtune.

Nilai yang diizinkan untuk ciri didokumentasikan dalam sub-bagian di bawah ini.

Di mana pengubah fitur yang bertentangan ditentukan, fitur paling kanan digunakan.

GCC menggunakan nama ini untuk menentukan jenis instruksi apa yang dapat dipancarkannya saat menghasilkan kode perakitan (seolah-olah oleh -berbaris) dan untuk menentukan prosesor target yang akan selaras untuk kinerja (seolah-olah oleh -mtune). Di mana opsi ini digunakan bersama dengan -berbaris or -mtune, opsi tersebut lebih diutamakan daripada bagian yang sesuai dari ini .

-berbaris serta -mcpu Pengubah Fitur

Pengubah fitur yang digunakan dengan -berbaris serta -mcpu dapat menjadi salah satu berikut:

CRC Aktifkan ekstensi CRC.

kripto Aktifkan ekstensi Crypto. Ini berarti SIMD Lanjutan diaktifkan.

fp Aktifkan instruksi floating-point.

simd Aktifkan petunjuk SIMD Lanjutan. Ini menyiratkan instruksi floating-point adalah diaktifkan. Ini adalah default untuk semua kemungkinan nilai saat ini untuk opsi -berbaris serta -mcpu=.

Adapteva Epiphany Opsi

Ini -m opsi ditentukan untuk Adapteva Epiphany:

-mhalf-reg-file Jangan alokasikan register apa pun dalam rentang "r32"..."r63". Itu memungkinkan kode untuk berjalan pada varian perangkat keras yang tidak memiliki register ini.

-mprefer-pendek-insn-reg Secara khusus mengalokasikan register yang memungkinkan pembuatan instruksi singkat. Ini bisa menghasilkan peningkatan jumlah instruksi, jadi ini dapat mengurangi atau meningkatkan secara keseluruhan ukuran kode.

-biaya-cabang=num Tetapkan biaya cabang menjadi kira-kira num instruksi "sederhana". Biaya ini hanya heuristik dan tidak dijamin menghasilkan hasil yang konsisten di seluruh rilis.

-mcmove Aktifkan generasi gerakan bersyarat.

-mnops=num Memancarkan num NOP sebelum setiap instruksi yang dihasilkan lainnya.

-mno-soft-cmpsf Untuk perbandingan titik-mengambang presisi tunggal, pancarkan instruksi dan uji "fsub" bendera. Ini lebih cepat daripada perbandingan perangkat lunak, tetapi bisa mendapatkan hasil yang salah dengan adanya NaN, atau ketika dua bilangan kecil yang berbeda dibandingkan sedemikian rupa sehingga perbedaan mereka dihitung sebagai nol. Standarnya adalah -msoft-cmpsf, Yang menggunakan perbandingan perangkat lunak yang lebih lambat, tetapi sesuai dengan IEEE.

-mstack-offset=num Atur offset antara bagian atas tumpukan dan penunjuk tumpukan. Misalnya, nilai 8 berarti delapan byte dalam rentang "sp+0...sp+7" dapat digunakan oleh fungsi daun tanpa alokasi tumpukan. Nilai selain 8 or 16 belum teruji dan tidak mungkin kerja. Perhatikan juga bahwa opsi ini mengubah ABI; mengkompilasi program dengan offset tumpukan berbeda dari perpustakaan yang telah dikompilasi dengan umumnya tidak kerja. Opsi ini dapat berguna jika Anda ingin mengevaluasi apakah offset tumpukan berbeda akan memberi Anda kode yang lebih baik, tetapi untuk benar-benar menggunakan offset tumpukan yang berbeda untuk membangun program kerja, disarankan untuk mengonfigurasi rantai alat dengan yang sesuai --dengan-stack-offset=num .

-mno-bulat-terdekat Buat penjadwal berasumsi bahwa mode pembulatan telah diatur ke pemotongan. NS defaultnya adalah -mround-terdekat.

-mlong-panggilan Jika tidak ditentukan oleh atribut, anggap semua panggilan mungkin berada di luar kisaran offset instruksi "b" / "bl", dan karenanya memuat alamat fungsi ke dalam register sebelum melakukan panggilan (jika tidak langsung). Ini adalah default.

-mshort-panggilan Jika tidak ditentukan lain oleh atribut, anggap semua panggilan langsung berada dalam jangkauan dari instruksi "b" / "bl", jadi gunakan instruksi ini untuk panggilan langsung. NS defaultnya adalah -mlong-panggilan.

-msmall16 Asumsikan alamat dapat dimuat sebagai nilai unsigned 16-bit. Ini tidak berlaku untuk alamat fungsi yang -mlong-panggilan semantik berlaku.

-mfp-mode=mode Atur mode yang berlaku dari unit floating-point. Ini menentukan mengambang- mode titik yang disediakan dan diharapkan pada panggilan fungsi dan waktu kembali. Membuat mode ini cocok dengan mode yang paling Anda butuhkan di awal fungsi dapat membuat Anda program yang lebih kecil dan lebih cepat dengan menghindari sakelar mode yang tidak perlu.

mode dapat diatur ke salah satu nilai berikut:

penelepon Mode apa pun pada entri fungsi adalah valid, dan dipertahankan atau dipulihkan saat fungsi kembali, dan ketika memanggil fungsi lain. Mode ini berguna untuk kompilasi perpustakaan atau unit kompilasi lain yang mungkin ingin Anda masukkan ke dalam yang berbeda program dengan mode FPU berbeda yang berlaku, dan kenyamanan untuk dapat gunakan file objek tunggal melebihi ukuran dan kecepatan overhead untuk mode tambahan apa pun switching yang mungkin diperlukan, dibandingkan dengan apa yang dibutuhkan dengan lebih banyak pilihan spesifik dari mode FPU yang berlaku.

memotong Ini adalah mode yang digunakan untuk perhitungan titik-mengambang dengan pemotongan (yaitu putaran menuju nol) mode pembulatan. Itu termasuk konversi dari floating point ke bilangan bulat.

bulat-terdekat Ini adalah mode yang digunakan untuk perhitungan titik-mengambang dengan pembulatan-ke-terdekat-atau- mode pembulatan genap.

int Ini adalah mode yang digunakan untuk melakukan perhitungan bilangan bulat di FPU, misalnya bilangan bulat mengalikan, atau bilangan bulat mengalikan dan mengumpulkan.

Standarnya adalah -mfp-mode=penelepon

-mnosplit-lohi -mno-postinc -mno-postmodifikasi Tweak pembuatan kode yang menonaktifkan, masing-masing, pemisahan beban 32-bit, generasi alamat pasca-kenaikan, dan generasi alamat pasca-modifikasi. NS defaultnya adalah msplit-lohi, -mpost-inc, dan -mpost-modifikasi.

-mnovect-ganda Ubah mode SIMD yang disukai ke mode SIM. Standarnya adalah -mvect-ganda, Yang menggunakan DImode sebagai mode SIMD pilihan.

-max-vect-align=num Penjajaran maksimum untuk jenis mode vektor SIMD. num mungkin 4 atau 8. Standarnya adalah 8. Perhatikan bahwa ini adalah perubahan ABI, meskipun banyak antarmuka fungsi perpustakaan yang tidak terpengaruh jika mereka tidak menggunakan mode vektor SIMD di tempat yang memengaruhi ukuran dan/atau penyelarasan jenis yang relevan.

-msplit-vecmove-awal Membagi vektor bergerak menjadi satu kata bergerak sebelum memuat ulang. Secara teori ini bisa memberi alokasi register yang lebih baik, tetapi sejauh ini kebalikannya tampaknya umumnya terjadi.

-m1reg-reg Tentukan register untuk menahan konstanta -1, yang membuat pemuatan menjadi negatif kecil konstanta dan bitmask tertentu lebih cepat. Nilai yang diizinkan untuk reg adalah r43 serta r63, yang menentukan penggunaan register itu sebagai register tetap, dan tak satupun, yang berarti tidak register digunakan untuk tujuan ini. Standarnya adalah -m1reg-tidak ada.

ARC Opsi

Opsi berikut mengontrol varian arsitektur yang kodenya sedang dikompilasi:

-barrel-shifter Menghasilkan instruksi yang didukung oleh shifter barel. Ini adalah default kecuali -mcpu=ARC601 sedang berlaku.

-mcpu=cpu Atur tipe arsitektur, penggunaan register, dan parameter penjadwalan instruksi untuk cpu. Ada juga opsi alias pintasan yang tersedia untuk kompatibilitas mundur dan kenyamanan. Nilai yang didukung untuk cpu adalah

ARC600 Kompilasi untuk ARC600. Alias: -mA6, -mARC600.

ARC601 Kompilasi untuk ARC601. Alias: -mARC601.

ARC700 Kompilasi untuk ARC700. Alias: -mA7, -mARC700. Ini adalah default saat dikonfigurasi dengan --dengan-cpu=arc700.

-mdpfp -mdpfp-kompak FPX: Menghasilkan instruksi FPX Presisi Ganda, disetel untuk implementasi yang ringkas.

-mdpfp-cepat FPX: Menghasilkan instruksi FPX Presisi Ganda, disetel untuk implementasi cepat.

-mno-dpfp-lrsr Nonaktifkan instruksi LR dan SR dari menggunakan register aux ekstensi FPX.

-mea Hasilkan instruksi aritmatika yang diperluas. Saat ini hanya "divaw", "tambah", "subs", dan "sat16" didukung. Ini selalu diaktifkan untuk -mcpu=ARC700.

-mno-mpy Jangan buat instruksi mpy untuk ARC700.

-mmul32x16 Hasilkan 32x16 bit perkalian dan instruksi mac.

-mmul64 Hasilkan instruksi mul64 dan mulu64. Hanya berlaku untuk -mcpu=ARC600.

-mnorm Menghasilkan instruksi norma. Ini adalah default jika -mcpu=ARC700 sedang berlaku.

-mspfp -mspfp-kompak FPX: Menghasilkan instruksi FPX Presisi Tunggal, disetel untuk implementasi yang ringkas.

-mspfp-cepat FPX: Menghasilkan instruksi FPX Presisi Tunggal, disetel untuk implementasi cepat.

-msimd Aktifkan pembuatan instruksi SIMD ARC melalui bawaan khusus target. Hanya sah untuk -mcpu=ARC700.

-msoft-float Opsi ini diabaikan; itu disediakan untuk tujuan kompatibilitas saja. Perangkat lunak kode floating point dipancarkan secara default, dan default ini dapat ditimpa oleh FPX pilihan; mspfp, mspfp-kompak, atau mspfp-cepat untuk presisi tunggal, dan mdpfp, mdpfp- padat, atau mdpfp-cepat untuk presisi ganda.

-mswap Buat instruksi pertukaran.

Opsi berikut diteruskan ke assembler, dan juga menentukan preprocessor simbol makro.

-mdsp-paket Diwariskan ke assembler untuk mengaktifkan ekstensi DSP Pack A. Juga mengatur simbol praprosesor "__Xdsp_packa".

-mdvbf Diwariskan ke assembler untuk mengaktifkan ekstensi kupu-kupu viterbi ganda. Juga menyetel simbol praprosesor "__Xdvbf".

-mlock Diwariskan ke assembler untuk mengaktifkan ekstensi Locked Load/Store Conditional. Juga mengatur simbol praprosesor "__Xlock".

-mmac-d16 Diturunkan ke assembler. Juga menetapkan simbol praprosesor "__Xxmac_d16".

-mmac-24 Diturunkan ke assembler. Juga menyetel simbol praprosesor "__Xxmac_24".

-mrtsc Diwariskan ke assembler untuk mengaktifkan ekstensi Penghitung Cap Waktu 64-bit petunjuk. Juga menetapkan simbol praprosesor "__Xrtsc".

-swap Diturunkan ke assembler untuk mengaktifkan instruksi ekstensi pemesanan byte swap. Juga menetapkan simbol praprosesor "__Xswape".

-teleponi Diwariskan ke assembler untuk mengaktifkan instruksi operan ganda dan tunggal untuk telepon. Juga menetapkan simbol praprosesor "__Xtelephony".

-mxy Diwariskan ke assembler untuk mengaktifkan ekstensi Memori XY. Juga mengatur simbol praprosesor "__Xxy".

Opsi berikut mengontrol bagaimana kode rakitan dianotasi:

-ukuran Anotasi instruksi assembler dengan perkiraan alamat.

-mannotate-align Jelaskan pertimbangan keselarasan apa yang menyebabkan keputusan untuk membuat instruksi? pendek atau panjang.

Opsi berikut diteruskan ke penaut:

-marclinux Diteruskan ke linker, untuk menentukan penggunaan emulasi "arclinux". Pilihan ini diaktifkan secara default di rantai alat yang dibuat untuk "arc-linux-uclibc" dan Target "arceb-linux-uclibc" saat pembuatan profil tidak diminta.

-marclinux_prof Diteruskan ke linker, untuk menentukan penggunaan emulasi "arclinux_prof". Ini opsi diaktifkan secara default di rantai alat yang dibuat untuk "arc-linux-uclibc" dan Target "arceb-linux-uclibc" saat pembuatan profil diminta.

Opsi berikut mengontrol semantik kode yang dihasilkan:

-mepilog-cfi Aktifkan pembuatan informasi bingkai panggilan untuk epilog.

-mno-epilog-cfi Nonaktifkan pembuatan informasi bingkai panggilan untuk epilog.

-mlong-panggilan Hasilkan panggilan masuk sebagai daftar panggilan tidak langsung, sehingga memberikan akses penuh Rentang alamat 32-bit.

-panggilan-sedang Jangan gunakan rentang pengalamatan kurang dari 25 bit untuk panggilan, yang merupakan offset yang tersedia untuk instruksi branch-and-link tanpa syarat. Eksekusi bersyarat dari fungsi panggilan ditekan, untuk memungkinkan penggunaan rentang 25-bit, bukan rentang 21-bit dengan cabang-dan-tautan bersyarat. Ini adalah default untuk rantai alat yang dibuat untuk target "arc-linux-uclibc" dan "arceb-linux-uclibc".

-mno-sdata Jangan buat referensi sdata. Ini adalah default untuk rantai alat yang dibuat untuk target "arc-linux-uclibc" dan "arceb-linux-uclibc".

-mucb-mcount Instrumen dengan panggilan mcount seperti yang digunakan dalam kode UCB. Yaitu melakukan penghitungan di callee, bukan penelepon. Secara default, instrumentasi ARC dihitung dalam pemanggil.

-mvolatile-cache Gunakan akses memori yang biasanya di-cache untuk referensi yang mudah menguap. Ini adalah default.

-mno-volatile-cache Aktifkan bypass cache untuk referensi yang mudah menguap.

Opsi pembuatan kode fine tune berikut:

-memfitnah-panggilan Lakukan optimasi penyelarasan untuk instruksi panggilan.

-mauto-modifikasi-reg Aktifkan penggunaan pra/pasca modifikasi dengan perpindahan register.

-mbbit-lubang intip Aktifkan lubang intip bbit2.

-mno-brcc Opsi ini menonaktifkan pass spesifik target arc_reorg untuk menghasilkan "BRcc" instruksi. Ini tidak berpengaruh pada generasi "BRcc" yang digerakkan oleh combiner pass.

-mcase-vektor-pcrel Gunakan tabel kasus saklar relatif pc - ini memungkinkan pemendekan tabel kasus. Ini adalah default untuk -Os.

-mcompact-casesi Aktifkan pola casei kompak. Ini adalah default untuk -Os.

-mno-cond-exec Nonaktifkan pass khusus ARCompact untuk menghasilkan instruksi eksekusi bersyarat. Jatuh tempo untuk menunda penjadwalan slot dan interaksi antara nomor operan, ukuran literal, panjang instruksi, dan dukungan untuk eksekusi bersyarat, target-independen lulus untuk menghasilkan eksekusi bersyarat sering kurang, sehingga port ARC tetap a umpan khusus yang mencoba menemukan lebih banyak pembangkitan eksekusi bersyarat peluang setelah alokasi register, pemendekan cabang, dan penjadwalan slot tunda telah dilakukan. Pass ini secara umum, tetapi tidak selalu, meningkatkan kinerja dan kode ukuran, dengan biaya waktu kompilasi tambahan, itulah sebabnya ada opsi untuk beralih itu mati. Jika Anda memiliki masalah dengan instruksi panggilan yang melebihi offset yang diizinkan rentang karena dikondisikan, Anda harus mempertimbangkan untuk menggunakan -panggilan-sedang sebagai gantinya.

-mearly-cbranchsi Aktifkan penggunaan pra-muat ulang dari pola cbranchsi.

-mexpand-tambahkan Perluas "adddi3" dan "subdi3" pada waktu pembuatan rtl menjadi "add.f", "adc", dll.

-mindexed-loads Aktifkan penggunaan beban yang diindeks. Ini bisa menjadi masalah karena beberapa pengoptimal kemudian berasumsi bahwa toko yang diindeks ada, padahal tidak demikian.

-mlra Aktifkan Alokasi Pendaftaran Lokal. Ini masih eksperimental untuk ARC, jadi secara default kompiler menggunakan reload standar (mis -mno-lra).

-mlra-prioritas-tidak ada Jangan tunjukkan prioritas apa pun untuk register target.

-mlra-prioritas-kompak Tunjukkan prioritas register target untuk r0..r3 / r12..r15.

-mlra-prioritas-nonkompak Kurangi prioritas regsiter target untuk r0..r3 / r12..r15.

-mno-milikode Saat mengoptimalkan ukuran (menggunakan -Os), prolog dan epilog yang harus disimpan atau mengembalikan sejumlah besar register sering dipersingkat dengan menggunakan panggilan ke khusus fungsi di libgcc; ini disebut sebagai milikode panggilan. Karena panggilan ini dapat berpose masalah kinerja, dan/atau menyebabkan masalah penautan saat menautkan dengan cara yang tidak standar, opsi ini disediakan untuk mematikan pembuatan panggilan milikode.

-campuran-kode Tweak alokasi register untuk membantu pembuatan instruksi 16-bit. Ini umumnya memiliki efek pengurangan ukuran instruksi rata-rata sambil meningkatkan instruksi menghitung.

-mq-kelas Aktifkan alternatif instruksi 'q'. Ini adalah default untuk -Os.

-mRcq Aktifkan penanganan kendala Rcq - sebagian besar pembuatan kode pendek bergantung pada ini. Ini adalah default.

-mRcw Aktifkan penanganan kendala Rcw - condexec ccfsm sebagian besar bergantung pada ini. Ini adalah standar.

-msize-level=tingkat Optimalisasi ukuran fine-tune berkaitan dengan panjang instruksi dan keselarasan. NS nilai yang diakui untuk tingkat adalah:

0 Tidak ada optimasi ukuran. Level ini tidak digunakan lagi dan diperlakukan seperti 1.

1 Instruksi singkat digunakan secara oportunistik.

2 Selain itu, penyelarasan loop dan kode setelah penghalang dijatuhkan.

3 Selain itu, penyelarasan data opsional dijatuhkan, dan opsi Os diaktifkan.

Ini default ke 3 ketika -Os sedang berlaku. Kalau tidak, perilaku saat ini bukan set setara dengan level 1.

-mtune=cpu Atur parameter penjadwalan instruksi untuk cpu, mengesampingkan semua yang tersirat oleh -mcpu=.

Nilai yang didukung untuk cpu adalah

ARC600 Tune untuk cpu ARC600.

ARC601 Tune untuk cpu ARC601.

ARC700 Tune untuk cpu ARC700 dengan blok pengali standar.

ARC700-xmac Tune untuk cpu ARC700 dengan blok XMAC.

ARC725D Tune untuk cpu ARC725D.

ARC750D Tune untuk cpu ARC750D.

-mmultbiaya=num Biaya yang harus ditanggung untuk instruksi perkalian, dengan 4 menjadi sama dengan instruksi normal.

-munalign-prob-threshold=probabilitas Tetapkan ambang probabilitas untuk tidak menyelaraskan cabang. Saat menyetel untuk ARC700 serta mengoptimalkan kecepatan, cabang tanpa slot penundaan yang terisi lebih disukai dipancarkan unaligned dan panjang, kecuali profil menunjukkan bahwa kemungkinan cabang untuk diambil di bawah ini probabilitas. Standarnya adalah (REG_BR_PROB_BASE/2), yaitu 5000.

Opsi berikut dipertahankan untuk kompatibilitas mundur, tetapi sekarang tidak digunakan lagi dan akan dihapus dalam rilis mendatang:

-margonaut FPX usang.

-mbig-endian -EB Kompilasi kode untuk target big endian. Penggunaan opsi ini sekarang tidak digunakan lagi. Pengguna menginginkan kode big-endian, harus menggunakan target "arceb-elf32" dan "arceb-linux-uclibc" saat membangun rantai alat, yang defaultnya adalah big-endian.

-mlittle-endian -ITU Kompilasi kode untuk target little endian. Penggunaan opsi ini sekarang tidak digunakan lagi. Pengguna yang menginginkan kode little-endian harus menggunakan "arc-elf32" dan "arc-linux-uclibc" target saat membangun rantai alat, yang defaultnya adalah little-endian.

-barrel_shifter Digantikan oleh -barrel-shifter.

-mdpfp_compact Digantikan oleh -mdpfp-kompak.

-mdpfp_fast Digantikan oleh -mdpfp-cepat.

-mdsp_packa Digantikan oleh -mdsp-paket.

-meA Digantikan oleh -mea.

-mmac_24 Digantikan oleh -mmac-24.

-mmac_d16 Digantikan oleh -mmac-d16.

-mspfp_compact Digantikan oleh -mspfp-kompak.

-mspfp_fast Digantikan oleh -mspfp-cepat.

-mtune=cpu Nilai - Nilai busur600, busur601, busur700 serta arc700-xmac untuk cpu diganti oleh ARC600, ARC601, ARC700 serta ARC700-xmac masing-masing

-multibiaya=num Digantikan oleh -multcost.

ARM Opsi

Ini -m opsi ditentukan untuk port ARM:

-mabi=nama Buat kode untuk ABI yang ditentukan. Nilai yang diizinkan adalah: apcs-gnu, atpcs, aapcs, aapcs-linux serta iwmmxt.

-mapcs-frame Hasilkan bingkai tumpukan yang sesuai dengan Standar Panggilan Prosedur ARM untuk semua fungsi, bahkan jika ini tidak sepenuhnya diperlukan untuk eksekusi kode yang benar. Menentukan -fomit-frame-pointer dengan opsi ini menyebabkan bingkai tumpukan tidak menjadi dihasilkan untuk fungsi daun. Standarnya adalah -mno-apcs-frame. Pilihan ini adalah usang.

-mapcs Ini adalah sinonim untuk -mapcs-frame dan tidak digunakan lagi.

-mthumb-interwork Hasilkan kode yang mendukung panggilan antara set instruksi ARM dan Thumb. Tanpa opsi ini, pada arsitektur pra-v5, dua set instruksi tidak dapat andal digunakan dalam satu program. Standarnya adalah -mno-jempol-interwork, karena sedikit kode yang lebih besar dihasilkan ketika -mthumb-interwork ditentukan. Dalam konfigurasi AAPCS pilihan ini tidak ada artinya.

-mno-sched-prolog Mencegah penyusunan ulang instruksi dalam prolog fungsi, atau penggabungan dari instruksi tersebut dengan instruksi di badan fungsi. Ini berarti bahwa semua fungsi dimulai dengan serangkaian instruksi yang dapat dikenali (atau sebenarnya salah satu pilihan dari satu set kecil prolog fungsi yang berbeda), dan informasi ini dapat digunakan untuk temukan awal fungsi di dalam potongan kode yang dapat dieksekusi. Standarnya adalah -msched-prolog.

-mfloat-abi=nama Menentukan ABI floating-point mana yang akan digunakan. Nilai yang diizinkan adalah: lembut, softfp serta keras.

Menentukan lembut menyebabkan GCC menghasilkan output yang berisi panggilan perpustakaan untuk floating- operasi titik. softfp memungkinkan pembuatan kode menggunakan perangkat keras floating-point instruksi, tetapi masih menggunakan konvensi pemanggilan soft-float. keras memungkinkan generasi instruksi floating-point dan menggunakan konvensi panggilan khusus FPU.

Defaultnya tergantung pada konfigurasi target tertentu. Perhatikan bahwa hard-float dan ABI soft-float tidak kompatibel dengan tautan; Anda harus mengkompilasi seluruh program Anda dengan ABI yang sama, dan menautkan dengan kumpulan pustaka yang kompatibel.

-mlittle-endian Hasilkan kode untuk prosesor yang berjalan dalam mode little-endian. Ini adalah default untuk semua konfigurasi standar.

-mbig-endian Hasilkan kode untuk prosesor yang berjalan dalam mode big-endian; defaultnya adalah untuk mengkompilasi kode untuk prosesor little-endian.

-maret=nama Ini menentukan nama arsitektur ARM target. GCC menggunakan nama ini untuk tentukan jenis instruksi apa yang dapat dipancarkannya saat membuat kode rakitan. Ini opsi dapat digunakan bersama dengan atau sebagai ganti dari -mcpu= pilihan. Diizinkan nama-nama adalah: lenganv2, armv2a, lenganv3, armv3m, lenganv4, armv4t, lenganv5, armv5t, armv5e, armv5te, lenganv6, armv6j, armv6t2, armv6z, armv6zk, armv6-m, lenganv7, armv7-a, armv7-r, armv7-m, armv7e-m, armv7ve, armv8-a, armv8-a+crc, iwmmxt, iwmmxt2, ep9312.

-march=armv7ve adalah arsitektur armv7-a dengan ekstensi virtualisasi.

-march=armv8-a+crc memungkinkan pembuatan kode untuk arsitektur ARMv8-A bersama dengan ekstensi CRC32 opsional.

-maret=asli menyebabkan kompiler mendeteksi arsitektur bangunan secara otomatis komputer. Saat ini, fitur ini hanya didukung di GNU/Linux, dan tidak semua arsitektur diakui. Jika deteksi otomatis tidak berhasil, opsi tidak memiliki efek.

-mtune=nama Opsi ini menentukan nama prosesor ARM target yang harus disetel oleh GCC kinerja kode. Untuk beberapa implementasi ARM, kinerja yang lebih baik dapat diperoleh dengan menggunakan opsi ini. Nama yang diperbolehkan adalah: arm2, arm250, arm3, arm6, arm60, arm600, arm610, arm620, arm7, lengan7m, lengan7d, lengan7dm, arm7di, arm7dmi, arm70, arm700, lengan700i, arm710, lengan710c, arm7100, arm720, arm7500, lengan7500fe, arm7tdmi, arm7tdmi-s, lengan710t, lengan720t, lengan740t, lengan kuat, lengan kuat110, lengan kuat1100, lengan kuat1110, arm8, arm810, arm9, lengan9e, arm920, lengan920t, lengan922t, lengan946e-s, lengan966e-s, lengan968e-s, arm926ej-s, lengan940t, arm9tdmi, arm10tdmi, lengan1020t, arm1026ej-s, lengan10e, lengan1020e, lengan1022e, lengan1136j-s, lengan1136jf-s, mpcore, mpcorenovfp, lengan1156t2-s, lengan1156t2f-s, lengan1176jz-s, lengan1176jzf-s, korteks-a5, korteks-a7, korteks-a8, korteks-a9, korteks-a12, korteks-a15, korteks-a53, korteks-a57, korteks-a72, korteks-r4, korteks-r4f, korteks-r5, korteks-r7, korteks-m7, korteks-m4, korteks-m3, korteks-m1, korteks-m0, korteks-m0plus, korteks-m1.small-multiply, korteks-m0.small-multiply, cortex-m0plus.small-multiply, exynos-m1, keajaiban-pj4, skala x, iwmmxt, iwmmxt2, ep9312, fa526, fa626, fa606te, fa626te, fmp626, fa726te, xgen1.

Selain itu, opsi ini dapat menentukan bahwa GCC harus menyesuaikan kinerja kode untuk sistem besar. KECIL. Nama yang diperbolehkan adalah: korteks-a15.korteks-a7, korteks-a57.korteks-a53, korteks-a72.korteks-a53.

-mtune=umum-lengkungan menentukan bahwa GCC harus menyesuaikan kinerja untuk campuran prosesor dalam arsitektur lengkungan. Tujuannya adalah untuk menghasilkan kode yang berjalan dengan baik di prosesor paling populer saat ini, menyeimbangkan antara pengoptimalan yang menguntungkan beberapa orang CPU dalam jangkauan, dan menghindari jebakan kinerja CPU lain. Efek dari opsi ini dapat berubah di versi GCC mendatang karena model CPU datang dan pergi.

-mtune=asli menyebabkan kompiler secara otomatis mendeteksi CPU dari komputer build. Pada sekarang, fitur ini hanya didukung di GNU/Linux, dan tidak semua arsitektur dikenali. Jika deteksi otomatis tidak berhasil, opsi tidak berpengaruh.

-mcpu=nama Ini menentukan nama prosesor ARM target. GCC menggunakan nama ini untuk menurunkan nama arsitektur ARM target (seolah-olah ditentukan oleh -berbaris) dan prosesor ARM jenis yang akan disetel untuk kinerja (seolah-olah ditentukan oleh -mtune). Di mana opsi ini? digunakan bersama dengan -berbaris or -mtune, opsi tersebut lebih diutamakan daripada bagian yang sesuai dari opsi ini.

Nama yang diizinkan untuk opsi ini sama dengan nama untuk -mtune.

-mcpu=umum-lengkungan juga diperbolehkan, dan setara dengan -maret=lengkungan -mtune=umum-lengkungan. Lihat -mtune for more information.

-mcpu=asli menyebabkan kompiler secara otomatis mendeteksi CPU dari komputer build. Pada sekarang, fitur ini hanya didukung di GNU/Linux, dan tidak semua arsitektur dikenali. Jika deteksi otomatis tidak berhasil, opsi tidak berpengaruh.

-mfpu=nama Ini menentukan perangkat keras titik-mengambang (atau emulasi perangkat keras) yang tersedia di target. Nama yang diperbolehkan adalah: vfp, vfpv3, vfpv3-fp16, vfpv3-d16, vfpv3-d16-fp16, vfpv3xd, vfpv3xd-fp16, neon, neon-fp16, vfpv4, vfpv4-d16, fpv4-sp-d16, neon-vfpv4, fpv5-d16, fpv5-sp-d16, fp-armv8, neon-fp-armv8, dan crypto-neon-fp-armv8.

If -msoft-float ditentukan ini menentukan format nilai floating-point.

Jika perangkat keras titik-mengambang yang dipilih menyertakan ekstensi NEON (mis -mfpu=neon), perhatikan bahwa operasi floating-point tidak dihasilkan oleh pass vektorisasi otomatis GCC kecuali kalau optimasi -funsafe-matematika juga ditentukan. Ini karena perangkat keras NEON tidak sepenuhnya menerapkan standar IEEE 754 untuk aritmatika titik-mengambang (dalam nilai denormal tertentu diperlakukan sebagai nol), sehingga penggunaan instruksi NEON dapat menyebabkan hilangnya presisi.

-mfp16-format=nama Tentukan format tipe titik-mengambang setengah presisi "__fp16". Diizinkan nama adalah tak satupun, ieee, dan alternatif; defaultnya adalah tak satupun, dalam hal ini "__fp16" jenis tidak ditentukan.

-mstruktur-ukuran-batas=n Ukuran semua struktur dan serikat dibulatkan menjadi kelipatan dari jumlah bit yang diatur oleh opsi ini. Nilai yang diizinkan adalah 8, 32 dan 64. Nilai default bervariasi untuk toolchain yang berbeda. Untuk rantai alat yang ditargetkan COFF, nilai defaultnya adalah 8. Nilai 64 hanya diperbolehkan jika ABI yang mendasarinya mendukungnya.

Menentukan angka yang lebih besar dapat menghasilkan kode yang lebih cepat dan lebih efisien, tetapi juga dapat memperbesar ukuran program. Nilai yang berbeda berpotensi tidak kompatibel. Kode yang dikompilasi dengan satu nilai tidak dapat diharapkan untuk bekerja dengan kode atau pustaka dikompilasi dengan nilai lain, jika mereka bertukar informasi menggunakan struktur atau serikat pekerja.

-mabort-on-noreturn Buat panggilan ke fungsi "abort" di akhir fungsi "noreturn". Dia dieksekusi jika fungsi mencoba untuk kembali.

-mlong-panggilan -mno-panggilan panjang Memberitahu kompiler untuk melakukan panggilan fungsi dengan terlebih dahulu memuat alamat dari fungsi ke dalam register dan kemudian melakukan panggilan subrutin pada register ini. Ini switch diperlukan jika fungsi target berada di luar pengalamatan 64-megabyte jangkauan versi instruksi panggilan subrutin berbasis offset.

Bahkan jika sakelar ini diaktifkan, tidak semua panggilan fungsi diubah menjadi panggilan panjang. Heuristiknya adalah fungsi statis, fungsi yang memiliki "short_call" atribut, fungsi yang berada di dalam lingkup direktif "#pragma no_long_calls", dan fungsi yang definisinya telah dikompilasi dalam arus unit kompilasi tidak berubah menjadi panggilan panjang. Pengecualian untuk aturan ini adalah bahwa definisi fungsi lemah, fungsi dengan atribut "long_call" atau "bagian" atribut, dan fungsi yang berada dalam lingkup direktif "#pragma long_calls" selalu berubah menjadi panggilan panjang.

Fitur ini tidak diaktifkan secara default. Menentukan -mno-panggilan panjang mengembalikan perilaku default, seperti halnya menempatkan panggilan fungsi dalam lingkup "#pragma long_calls_off". Perhatikan bahwa sakelar ini tidak berpengaruh pada cara kompiler menghasilkan kode untuk menangani panggilan fungsi melalui pointer fungsi.

-basis-gambar-tunggal Perlakukan register yang digunakan untuk pengalamatan PIC sebagai read-only, daripada memuatnya di prolog untuk setiap fungsi. Sistem runtime bertanggung jawab untuk menginisialisasi ini mendaftar dengan nilai yang sesuai sebelum eksekusi dimulai.

-mpic-register=reg Tentukan register yang akan digunakan untuk pengalamatan PIC. Untuk kasus dasar PIC standar, default adalah register yang sesuai yang ditentukan oleh kompiler. Untuk kasus dasar PIC tunggal, defaultnya adalah R9 jika target berbasis EABI atau pemeriksaan tumpukan diaktifkan, jika tidak, defaultnya adalah R10.

-mpic-data-adalah-teks-relatif Asumsikan bahwa setiap segmen data relatif terhadap segmen teks pada waktu buka. Karena itu, itu memungkinkan pengalamatan data menggunakan operasi relatif PC. Opsi ini aktif secara default untuk target selain VxWorks RTP.

-mpoke-fungsi-nama Tulis nama masing-masing fungsi ke dalam bagian teks, tepat sebelum fungsi prolog. Kode yang dihasilkan mirip dengan ini:

t0 .ascii "arm_poke_function_name", 0 .meluruskan t1 .kata 0xff000000 + (t1 - t0) arm_poke_function_name mov ip, sp stmfd sp!, {fp, ip, lr, pc} subfp, ip, #4

Saat melakukan pelacakan balik tumpukan, kode dapat memeriksa nilai "pc" yang disimpan di "fp + 0". Jika fungsi trace maka lihat lokasi "pc - 12" dan 8 bit teratas adalah set, maka kita tahu bahwa ada nama fungsi yang disematkan tepat sebelum ini lokasi dan memiliki panjang "((pc[-3]) & 0xff000000)".

-jempol -marm Pilih antara menghasilkan kode yang dijalankan dalam status ARM dan Thumb. Default untuk kebanyakan konfigurasi adalah untuk menghasilkan kode yang dijalankan dalam status ARM, tetapi default dapat diubah dengan mengkonfigurasi GCC dengan --dengan-mode=negara opsi konfigurasi.

-mtpcs-frame Hasilkan bingkai tumpukan yang sesuai dengan Standar Panggilan Prosedur Jempol untuk semua fungsi non-daun. (Fungsi daun adalah fungsi yang tidak memanggil yang lain fungsi.) Standarnya adalah -mno-tpcs-frame.

-mtpcs-daun-bingkai Hasilkan bingkai tumpukan yang sesuai dengan Standar Panggilan Prosedur Jempol untuk semua fungsi daun. (Fungsi daun adalah fungsi yang tidak memanggil fungsi lainnya.) Standarnya adalah -mno-apcs-daun-bingkai.

-mcallee-super-interworking Memberikan semua fungsi yang terlihat secara eksternal dalam file yang sedang dikompilasi instruksi ARM atur tajuk yang beralih ke mode Jempol sebelum menjalankan fungsi lainnya. Ini memungkinkan fungsi-fungsi ini dipanggil dari kode non-interworking. Pilihan ini adalah tidak valid dalam konfigurasi AAPCS karena interworking diaktifkan secara default.

-mcaller-super-interworking Memungkinkan panggilan melalui penunjuk fungsi (termasuk fungsi virtual) untuk dijalankan dengan benar terlepas dari apakah kode target telah dikompilasi untuk interworking atau tidak. Ada overhead kecil dalam biaya menjalankan penunjuk fungsi jika opsi ini diaktifkan. Opsi ini tidak valid dalam konfigurasi AAPCS karena interworking adalah diaktifkan secara default.

-mtp=nama Tentukan model akses untuk penunjuk penyimpanan lokal thread. Model yang valid adalah lembut, yang menghasilkan panggilan ke "__aeabi_read_tp", cp15, yang mengambil utasnya pointer dari "cp15" secara langsung (didukung dalam arsitektur arm6k), dan mobil, yang menggunakan metode terbaik yang tersedia untuk prosesor yang dipilih. Pengaturan default adalah mobil.

-mtls-dialek=dialek Tentukan dialek yang akan digunakan untuk mengakses penyimpanan lokal thread. Dua dialekadalah didukung---gnu serta gnu2. itu gnu dialek memilih skema GNU asli untuk mendukung model TLS dinamis lokal dan global. NS gnu2 dialek memilih GNU skema deskriptor, yang memberikan kinerja yang lebih baik untuk pustaka bersama. GNU skema deskriptor kompatibel dengan skema asli, tetapi membutuhkan yang baru assembler, linker dan dukungan perpustakaan. Model TLS eksekutif awal dan lokal adalah tidak terpengaruh oleh opsi ini dan selalu gunakan skema asli.

-mword-relokasi Hanya menghasilkan relokasi absolut pada nilai berukuran kata (yaitu R_ARM_ABS32). Ini adalah diaktifkan secara default pada target (uClinux, SymbianOS) di mana loader runtime memaksakan pembatasan ini, dan kapan -fpic or -fPIC ditentukan.

-mfix-korteks-m3-ldrd Beberapa inti Cortex-M3 dapat menyebabkan kerusakan data saat instruksi "ldrd" dengan tujuan yang tumpang tindih dan register dasar digunakan. Opsi ini menghindari menghasilkan petunjuk ini. Opsi ini diaktifkan secara default ketika -mcpu=korteks-m3 is ditentukan.

-munaligned-akses -mno-unaligned-akses Mengaktifkan (atau menonaktifkan) membaca dan menulis nilai 16 dan 32 bit dari alamat yang tidak selaras 16 atau 32 bit. Secara default, akses tidak selaras dinonaktifkan untuk semua pra-ARMv6 dan semua arsitektur ARMv6-M, dan diaktifkan untuk semua arsitektur lainnya. Jika akses tidak selaras tidak diaktifkan maka kata-kata dalam struktur data yang dikemas diakses sebagai byte pada suatu waktu.

Atribut ARM "Tag_CPU_unaligned_access" diatur dalam file objek yang dihasilkan ke benar atau salah, tergantung pada pengaturan opsi ini. Jika akses tidak selaras diaktifkan maka simbol praprosesor "__ARM_FEATURE_UNALIGNED" juga ditentukan.

-mneon-untuk-64bit Memungkinkan penggunaan Neon untuk menangani operasi skalar 64-bit. Ini dinonaktifkan secara default karena biaya pemindahan data dari register inti ke Neon tinggi.

-mslow-flash-data Asumsikan memuat data dari flash lebih lambat daripada mengambil instruksi. Oleh karena itu literal beban diminimalkan untuk kinerja yang lebih baik. Opsi ini hanya didukung ketika kompilasi untuk profil-M ARMv7 dan mati secara default.

-masm-sintaks-bersatu Asumsikan assembler sebaris menggunakan sintaks asm terpadu. Default saat ini tidak aktif yang menyiratkan sintaksis terbagi. Saat ini opsi ini hanya tersedia untuk Thumb1 dan tidak berpengaruh pada status ARM dan Thumb2. Namun, ini dapat berubah di rilis mendatang dari GCC. Sintaks yang terbagi harus dianggap usang.

-mrestrict-itu Membatasi pembuatan blok TI agar sesuai dengan aturan ARMv8. Blok IT bisa hanya berisi satu instruksi 16-bit dari satu set instruksi tertentu. Ini opsi aktif secara default untuk mode ARMv8 Thumb.

-mprint-tune-info Cetak informasi penyetelan CPU sebagai komentar dalam file assembler. Ini adalah opsi yang digunakan hanya untuk pengujian regresi kompiler dan tidak dimaksudkan untuk penggunaan biasa di mengkompilasi kode. Opsi ini dinonaktifkan secara default.

AVR Opsi

Opsi ini ditentukan untuk implementasi AVR:

-mmcu=mcu Tentukan arsitektur set instruksi Atmel AVR (ISA) atau tipe MCU.

Default untuk opsi ini adalah@tie{}avr2.

GCC mendukung perangkat AVR dan ISA berikut:

"avr2" Perangkat "Klasik" dengan memori program hingga 8@tie{}KiB. mcu@tie{}= "attiny22", "attiny26", "at90c8534", "at90s2313", "at90s2323", "at90s2333", "at90s2343", "at90s4414", "at90s4433", "at90s4434", "at90s8515", "at90s8535".

"avr25" Perangkat "Klasik" dengan memori program hingga 8@tie{}KiB dan dengan "MOVW" petunjuk. mcu@tie{}= "ata5272", "ata6616c", "attiny13", "attiny13a", "attiny2313", "attiny2313a", "attiny24", "attiny24a", "attiny25", "attiny261", "attiny261a", "attiny43u", "attiny4313", "attiny44", "attiny44a", "attiny441", "attiny45", "attiny461", "attiny461a", "attiny48", "attiny828", "attiny84", "attiny84a", "attiny841", "attiny85", "attiny861", "attiny861a", "attiny87", "attiny88", "at86rf401".

"avr3" Perangkat "Klasik" dengan 16@tie{}KiB hingga 64@tie{}KiB memori program. mcu@tie{}= "at43usb355", "at76c711".

"avr31" Perangkat "Klasik" dengan memori program 128@tie{}KiB. mcu@tie{}= "atmega103", "at43usb320".

"avr35" Perangkat "Klasik" dengan 16@tie{}KiB hingga 64@tie{}KiB memori program dan dengan instruksi "MOVW". mcu@tie{}= "ata5505", "ata6617c", "ata664251", "atmega16u2", "atmega32u2", "atmega8u2", "attiny1634", "attiny167", "at90usb162", "at90usb82".

"avr4" Perangkat "disempurnakan" dengan memori program hingga 8@tie{}KiB. mcu@tie{}= "ata6285", "ata6286", "ata6289", "ata6612c", "atmega48", "atmega48a", "atmega48p", "atmega48pa", "atmega8", "atmega8a", "atmega8hva", "atmega8515", "atmega8535", "atmega88", "atmega88a", "atmega88p", "atmega88pa", "at90pwm1", "at90pwm2", "at90pwm2b", "at90pwm3", "at90pwm3b", "at90pwm81".

"avr5" Perangkat "disempurnakan" dengan 16@tie{}KiB hingga 64@tie{}KiB memori program. mcu@tie{}= "ata5702m322", "ata5782", "ata5790", "ata5790n", "ata5795", "ata5831", "ata6613c", "ata6614q", "atmega16", "atmega16a", "atmega16hva", "atmega16hva2", "atmega16hvb", "atmega16hvbrevb", "atmega16m1", "atmega16u4", "atmega161", "atmega162", "atmega163", "atmega164a", "atmega164p", "atmega164pa", "atmega165", "atmega165a", "atmega165p", "atmega165pa", "atmega168", "atmega168a", "atmega168p", "atmega168pa", "atmega169", "atmega169a", "atmega169p", "atmega169pa", "atmega32", "atmega32a", "atmega32c1", "atmega32hvb", "atmega32hvbrevb", "atmega32m1", "atmega32u4", "atmega32u6", "atmega323", "atmega324a", "atmega324p", "atmega324pa", "atmega325", "atmega325a", "atmega325p", "atmega325pa", "atmega3250", "atmega3250a", "atmega3250p", "atmega3250pa", "atmega328", "atmega328p", "atmega329", "atmega329a", "atmega329p", "atmega329pa", "atmega3290", "atmega3290a", "atmega3290p", "atmega3290pa", "atmega406", "atmega64", "atmega64a", "atmega64c1", "atmega64hve", "atmega64hve2", "atmega64m1", "atmega64rfr2", "atmega640", "atmega644", "atmega644a", "atmega644p", "atmega644pa", "atmega644rfr2", "atmega645", "atmega645a", "atmega645p", "atmega6450", "atmega6450a", "atmega6450p", "atmega649", "atmega649a", "atmega649p", "atmega6490", "atmega6490a", "atmega6490p", "at90can32", "at90can64", "at90pwm161", "at90pwm216", "at90pwm316", "at90scr100", "at90usb646", "at90usb647", "at94k", "m3000".

"avr51" Perangkat "disempurnakan" dengan 128@tie{}KiB memori program. mcu@tie{}= "atmega128", "atmega128a", "atmega128rfa1", "atmega128rfr2", "atmega1280", "atmega1281", "atmega1284", "atmega1284p", "atmega1284rfr2", "at90can128", "at90usb1286", "at90usb1287".

"avr6" Perangkat "disempurnakan" dengan PC 3-byte, yaitu dengan lebih dari 128@tie{}KiB program ingatan. mcu@tie{}= "atmega256rfr2", "atmega2560", "atmega2561", "atmega2564rfr2".

"avrxmega2" Perangkat "XMEGA" dengan lebih dari 8@tie{}KiB dan memori program hingga 64@tie{}KiB. mcu@tie{}= "atxmega16a4", "atxmega16a4u", "atxmega16c4", "atxmega16d4", "atxmega16e5", "atxmega32a4", "atxmega32a4u", "atxmega32c3", "atxmega32c4", "atxmega32d3", "atxmega32d4", "atxmega32e5", "atxmega8e5".

"avrxmega4" Perangkat "XMEGA" dengan lebih dari 64@tie{}KiB dan hingga 128@tie{}KiB program ingatan. mcu@tie{}= "atxmega64a3", "atxmega64a3u", "atxmega64a4u", "atxmega64b1", "atxmega64b3", "atxmega64c3", "atxmega64d3", "atxmega64d4".

"avrxmega5" Perangkat "XMEGA" dengan lebih dari 64@tie{}KiB dan hingga 128@tie{}KiB program memori dan lebih dari 64@tie{}KiB RAM. mcu@tie{}= "atxmega64a1", "atxmega64a1u".

"avrxmega6" Perangkat "XMEGA" dengan memori program lebih dari 128@tie{}KiB. mcu@dasi{}= "atxmega128a3", "atxmega128a3u", "atxmega128b1", "atxmega128b3", "atxmega128c3", "atxmega128d3", "atxmega128d4", "atxmega192a3", "atxmega192a3u", "atxmega192c3", "atxmega192d3", "atxmega256a3", "atxmega256a3b", "atxmega256a3bu", "atxmega256a3u", "atxmega256c3", "atxmega256d3", "atxmega384c3", "atxmega384d3".

"avrxmega7" Perangkat "XMEGA" dengan memori program lebih dari 128@tie{}KiB dan lebih dari 64@tie{}KiB RAM. mcu@tie{}= "atxmega128a1", "atxmega128a1u", "atxmega128a4u".

"keberatan" Perangkat inti kecil "TINY" dengan 512@tie{}B hingga 4@tie{}KiB memori program. mcu@tie{}= "attiny10", "attiny20", "attiny4", "attiny40", "attiny5", "attiny9".

"avr1" ISA ini diimplementasikan oleh inti AVR minimal dan hanya didukung untuk assembler. mcu@tie{}= "attiny11", "attiny12", "attiny15", "attiny28", "at90s1200".

-maklumat-args Akumulasi argumen fungsi keluar dan dapatkan/lepaskan ruang tumpukan yang dibutuhkan untuk argumen fungsi keluar sekali dalam prolog/epilog fungsi. Tanpa opsi ini, argumen keluar didorong sebelum memanggil fungsi dan muncul setelahnya.

Memunculkan argumen setelah pemanggilan fungsi bisa mahal di AVR sehingga mengumpulkan ruang tumpukan dapat menyebabkan executable yang lebih kecil karena argumen perlu tidak akan dihapus dari tumpukan setelah pemanggilan fungsi tersebut.

Opsi ini dapat menyebabkan pengurangan ukuran kode untuk fungsi yang melakukan beberapa panggilan ke fungsi yang mendapatkan argumennya di tumpukan seperti panggilan ke fungsi seperti printf.

-biaya-cabang=biaya Tetapkan biaya cabang untuk instruksi cabang bersyarat ke biaya. Nilai yang masuk akal untuk biaya kecil, bilangan bulat non-negatif. Biaya cabang default adalah 0.

-mcall-prolog Fungsi prolog/epilog diperluas sebagai panggilan ke subrutin yang sesuai. Kode ukurannya lebih kecil.

-mint8 Asumsikan "int" sebagai bilangan bulat 8-bit. Ini mempengaruhi ukuran semua jenis: "char" adalah 1 byte, "int" adalah 1 byte, "panjang" adalah 2 byte, dan "panjang panjang" adalah 4 byte. Tolong perhatikan bahwa opsi ini tidak sesuai dengan standar C, tetapi hasilnya lebih kecil ukuran kode.

-mn-flash=num Asumsikan bahwa memori flash memiliki ukuran num kali 64@tie{}KiB.

-mno-interupsi Kode yang dihasilkan tidak kompatibel dengan interupsi perangkat keras. Ukuran kode lebih kecil.

-santai Coba ganti "CALL" resp. Instruksi "JMP" oleh resp "RCALL" yang lebih pendek. "RJMP" instruksi jika berlaku. Pengaturan -santai hanya menambahkan --mlink-santai opsi ke baris perintah assembler dan --santai opsi ke baris perintah tautan.

Lompat santai dilakukan oleh linker karena offset lompat tidak diketahui sebelumnya kode berada. Oleh karena itu, kode assembler yang dihasilkan oleh compiler adalah sama, tetapi instruksi dalam executable mungkin berbeda dari instruksi di assembler kode.

Relaksasi harus diaktifkan jika stub linker diperlukan, lihat bagian "EIND" dan linker bertopik di bawah ini.

-mrmw Asumsikan bahwa perangkat mendukung instruksi Baca-Ubah-Tulis "XCH", "LAC", "LAS" dan "LAT".

-msp8 Perlakukan register penunjuk tumpukan sebagai register 8-bit, yaitu menganggap byte tinggi dari penunjuk tumpukan adalah nol. Secara umum, Anda tidak perlu mengatur opsi ini secara manual.

Opsi ini digunakan secara internal oleh kompiler untuk memilih dan membangun multilib untuk arsitektur "avr2" dan "avr25". Arsitektur ini menggabungkan perangkat dengan dan tanpa "SPH". Untuk pengaturan apa pun selain -mmcu=avr2 or -mmcu=avr25 driver kompiler menambahkan atau menghapus opsi ini dari baris perintah compiler yang tepat, karena compiler kemudian tahu apakah perangkat atau arsitektur memiliki penunjuk tumpukan 8-bit dan karenanya tidak ada "SPH" mendaftar atau tidak.

-mtrict-X Gunakan register alamat "X" dengan cara yang diusulkan oleh perangkat keras. Ini berarti bahwa "X" adalah hanya digunakan dalam pengalamatan tidak langsung, pasca-kenaikan atau pra-penurunan.

Tanpa opsi ini, register "X" dapat digunakan dengan cara yang sama seperti "Y" atau "Z" yang kemudian ditiru oleh instruksi tambahan. Misalnya, memuat nilai dengan Pengalamatan "X+const" dengan "const < 64" non-negatif kecil ke register Rn is dilakukan sebagai

adiw r26, konstanta ; X += konstanta ld , X ; = *X sbiw r26, konstanta ; X -= konstanta

-mtiny-tumpukan Hanya ubah 8@tie{}bit yang lebih rendah dari penunjuk tumpukan.

-nodevicelib Jangan menautkan ke perpustakaan khusus perangkat AVR-LibC "libdev.a".

-Waddr-ruang-konversi Peringatkan tentang konversi antara ruang alamat dalam kasus di mana alamat yang dihasilkan ruang tidak terkandung dalam ruang alamat masuk.

"EIND" dan Perangkat dengan Flash Lebih Dari 128 Ki Bytes

Pointer dalam implementasi memiliki lebar 16@tie{}bit. Alamat suatu fungsi atau label direpresentasikan sebagai alamat kata sehingga lompatan dan panggilan tidak langsung dapat menargetkan kode apa pun alamat dalam kisaran 64@tie{}kata Ki.

Untuk memfasilitasi lompatan tidak langsung pada perangkat dengan lebih dari 128@tie{}Ki byte ruang memori program, ada register fungsi khusus yang disebut "EIND" yang berfungsi sebagai bagian paling penting dari alamat target ketika instruksi "EICALL" atau "EIJMP" adalah bekas.

Lompatan dan panggilan tidak langsung pada perangkat ini ditangani sebagai berikut oleh kompiler dan: tunduk pada beberapa batasan:

* Kompilator tidak pernah menyetel "EIND".

* Kompilator menggunakan "EIND" secara implisit dalam instruksi "EICALL"/"EIJMP" atau mungkin membaca "EIND" secara langsung untuk meniru panggilan/lompatan tidak langsung melalui "RET" petunjuk.

* Kompilator mengasumsikan bahwa "EIND" tidak pernah berubah selama kode startup atau selama aplikasi. Secara khusus, "EIND" tidak disimpan/dipulihkan dalam fungsi atau interupsi prolog/epilog rutin layanan.

* Untuk panggilan tidak langsung ke fungsi dan goto yang dihitung, tautan menghasilkan Rintisan bertopik. Rintisan adalah bantalan lompat kadang-kadang juga disebut trampolin. Dengan demikian, panggilan/lompatan tidak langsung melompat ke rintisan seperti itu. Rintisan berisi lompatan langsung ke alamat yang diinginkan.

* Relaksasi linker harus diaktifkan agar linker menghasilkan stub dengan benar dalam semua situasi. Lihat opsi kompiler -santai dan opsi tautan --santai. Ada kasus sudut di mana tautan seharusnya menghasilkan rintisan tetapi dibatalkan tanpa relaksasi dan tanpa pesan kesalahan yang membantu.

* Script linker default diatur untuk kode dengan "EIND = 0". Jika kode seharusnya untuk bekerja untuk pengaturan dengan "EIND != 0", skrip tautan khusus harus digunakan agar untuk menempatkan bagian yang namanya dimulai dengan ".trampolin" ke dalam segmen di mana "EIND" menunjuk ke.

* Kode startup dari libgcc tidak pernah menyetel "EIND". Perhatikan bahwa kode startup adalah campuran kode dari libgcc dan AVR-LibC. Untuk dampak AVR-LibC pada "EIND", lihat AVR- Panduan pengguna LibC ("http://nongnu.org/avr-libc/user-manual/").

* Adalah sah untuk kode startup khusus pengguna untuk mengatur "EIND" lebih awal, misalnya dengan sarana kode inisialisasi terletak di bagian ".init3". Kode tersebut berjalan sebelum kode startup umum yang menginisialisasi RAM dan memanggil konstruktor, tetapi setelah sedikit kode startup dari AVR-LibC yang menetapkan "EIND" ke segmen tempat tabel vektor berada berada.

#termasuk

kekosongan statis __attribute__((section(".init3"),telanjang,bekas,no_instrument_function)) init3_set_eind (batal) { __asm ​​volatile ("ldi r24,pm_hh8(__trampolines_start)\n\t" "keluar %i0,r24" :: "n" (&EIND) : "r24","memori"); }

Simbol "__trampolines_start" didefinisikan dalam skrip tautan.

* Rintisan dihasilkan secara otomatis oleh tautan jika dua kondisi berikut adalah: bertemu:

- (kependekan dari menghasilkan Rintisan bertopik) seperti:

LDI r24, lo8(gs( )) LDI r25, hi8(gs( ))

- di luar segmen di mana stub berada.

* Kompilator mengeluarkan pengubah "gs" untuk label kode dalam situasi berikut:

- - - -mcall-prolog> opsi baris perintah.

- tabel Anda dapat menentukan -fno-lompat-tabel opsi baris perintah.

- - * Melompat ke alamat non-simbolis seperti itu tidak didukung:

int utama (kosong) { /* Fungsi panggilan pada alamat kata 0x2 */ kembali ((int(*)(void)) 0x2)(); }

Sebagai gantinya, sebuah rintisan harus disiapkan, yaitu fungsi harus dipanggil melalui simbol ("func_4" dalam contoh):

int utama (kosong) { extern int func_4 (kosong);

/* Memanggil fungsi pada alamat byte 0x4 */ kembalikan func_4(); }

dan aplikasi ditautkan dengan -Wl,--defsym,func_4=0x4. Atau, "func_4" dapat didefinisikan dalam skrip tautan.

Penanganan Register Fungsi Khusus "RAMPD", "RAMPX", "RAMPY" dan "RAMPZ"

Beberapa perangkat AVR mendukung memori yang lebih besar dari rentang 64@tie{}KiB yang bisa diakses dengan pointer 16-bit. Untuk mengakses lokasi memori di luar kisaran 64@tie{}KiB ini, isi dari register "RAMP" digunakan sebagai bagian tinggi dari alamat: The "X", "Y", "Z" register alamat digabungkan dengan fungsi khusus "RAMPX", "RAMPY", "RAMPZ" mendaftar, masing-masing, untuk mendapatkan alamat yang luas. Demikian pula, "RAMPD" digunakan bersama dengan pengalamatan langsung.

* Kode startup menginisialisasi register fungsi khusus "RAMP" dengan nol.

* Jika sebuah AVR Bernama Alamat Spasi, bernama alamat ruang selain generik atau "__flash" adalah digunakan, maka "RAMPZ" diatur sesuai kebutuhan sebelum operasi.

* Jika perangkat mendukung RAM lebih besar dari 64@tie{}KiB dan compiler perlu mengubah "RAMPZ" untuk menyelesaikan operasi, "RAMPZ" diatur ulang ke nol setelah operasi.

* Jika perangkat dilengkapi dengan register "RAMP" tertentu, prolog/epilog ISR menyimpan/mengembalikan SFR itu dan menginisialisasinya dengan nol jika kode ISR mungkin (secara implisit) menggunakannya.

* RAM lebih besar dari 64@tie{}KiB tidak didukung oleh GCC untuk target AVR. Jika Anda menggunakan assembler sebaris untuk membaca dari lokasi di luar rentang alamat 16-bit dan mengubahnya salah satu register "RAMP", Anda harus meresetnya ke nol setelah akses.

Makro Bawaan AVR

GCC mendefinisikan beberapa makro bawaan sehingga kode pengguna dapat menguji keberadaan atau tidak adanya fitur. Hampir semua makro bawaan berikut diambil dari perangkat kemampuan dan dengan demikian dipicu oleh -mmcu= opsi baris perintah.

Untuk makro bawaan khusus AVR yang lebih banyak lagi, lihat AVR Bernama Alamat Spasi serta AVR Built-in Fungsi.

"__AVR_ARCH__" Makro bawaan yang menghasilkan angka desimal yang mengidentifikasi arsitektur dan tergantung pada -mmcu=mcu pilihan. Nilai yang mungkin adalah:

2, 25, 3, 31, 35, 4, 5, 51, 6

untuk mcu="avr2", "avr25", "avr3", "avr31", "avr35", "avr4", "avr5", "avr51", "avr6",

masing-masing dan

100, 102, 104, 105, 106, 107

untuk mcu="avrxmega2", "avrxmega4", "avrxmega5", "avrxmega6", "avrxmega7", "avrxmegaXNUMX", masing-masing. Jika mcu menentukan perangkat, makro bawaan ini disetel sesuai dengan itu. Untuk contoh, dengan -mmcu=atmega8 makro didefinisikan ke 4.

"__AVR_alat__" Pengaturan -mmcu=alat mendefinisikan makro bawaan ini yang mencerminkan nama perangkat. Untuk contoh, -mmcu=atmega8 mendefinisikan makro bawaan "__AVR_ATmega8__", -mmcu=attiny261a mendefinisikan "__AVR_ATtiny261A__", dll.

Nama makro bawaan mengikuti skema "__AVR_alat__" dimana alat adalah nama perangkat seperti dari manual pengguna AVR. Perbedaan antara alat di dalam makro dan alat in -mmcu=alat adalah bahwa yang terakhir selalu huruf kecil.

If alat bukan perangkat tetapi hanya arsitektur inti seperti avr51, makro ini bukan didefinisikan.

"__AVR_DEVICE_NAME__" Pengaturan -mmcu=alat mendefinisikan makro bawaan ini ke nama perangkat. Sebagai contoh, dengan -mmcu=atmega8 makro didefinisikan sebagai "atmega8".

If alat bukan perangkat tetapi hanya arsitektur inti seperti avr51, makro ini bukan didefinisikan.

"__AVR_XMEGA__" Perangkat / arsitektur milik keluarga perangkat XMEGA.

"__AVR_HAVE_ELPM__" Perangkat memiliki instruksi "ELPM".

"__AVR_HAVE_ELPMX__" Perangkat memiliki "ELPM Rn,Z" dan "ELPM Rn,Z+" petunjuk.

"__AVR_HAVE_MOVW__" Perangkat memiliki instruksi "MOVW" untuk melakukan gerakan register-register 16-bit.

"__AVR_HAVE_LPMX__" Perangkat memiliki "LPM Rn,Z" dan "LPM Rn,Z+" petunjuk.

"__AVR_HAVE_MUL__" Perangkat ini memiliki pengganda perangkat keras.

"__AVR_HAVE_JMP_CALL__" Perangkat memiliki instruksi "JMP" dan "CALL". Ini adalah kasus untuk perangkat dengan setidaknya 16@tie{}KiB memori program.

"__AVR_HAVE_EIJMP_EICALL__" "__AVR_3_BYTE_PC__" Perangkat memiliki instruksi "EIJMP" dan "EICALL". Ini adalah kasus untuk perangkat dengan memori program lebih dari 128@tie{}KiB. Ini juga berarti bahwa program counter (PC) lebarnya 3@tie{}byte.

"__AVR_2_BYTE_PC__" Penghitung program (PC) memiliki lebar 2@tie{}byte. Ini adalah kasus untuk perangkat dengan hingga 128@tie{}KiB memori program.

"__AVR_HAVE_8BIT_SP__" "__AVR_HAVE_16BIT_SP__" Register stack pointer (SP) diperlakukan sebagai register 8-bit masing-masing 16-bit oleh: kompiler. Definisi makro ini dipengaruhi oleh -mtiny-tumpukan.

"__AVR_HAVE_SPH__" "__AVR_SP8__" Perangkat memiliki register fungsi khusus SPH (bagian tinggi dari penunjuk tumpukan) atau memiliki penunjuk tumpukan 8-bit, masing-masing. Definisi makro ini dipengaruhi oleh -mmcu= dan dalam kasus -mmcu=avr2 serta -mmcu=avr25 juga oleh -msp8.

"__AVR_HAVE_RAMPD__" "__AVR_HAVE_RAMPX__" "__AVR_HAVE_RAMPY__" "__AVR_HAVE_RAMPZ__" Perangkat memiliki register fungsi khusus "RAMPD", "RAMPX", "RAMPY", "RAMPZ", masing.

"__NO_INTERRUPTS__" Makro ini mencerminkan -mno-interupsi opsi baris perintah.

"__AVR_ERRATA_SKIP__" "__AVR_ERRATA_SKIP_JMP_CALL__" Beberapa perangkat AVR (AT90S8515, ATmega103) tidak boleh melewatkan instruksi 32-bit karena a kesalahan perangkat keras. Instruksi lewati adalah "SBRS", "SBRC", "SBIS", "SBIC" dan "CPSE". Makro kedua hanya ditentukan jika "__AVR_HAVE_JMP_CALL__" juga disetel.

"__AVR_ISA_RMW__" Perangkat memiliki instruksi Baca-Ubah-Tulis (XCH, LAC, LAS dan LAT).

"__AVR_SFR_OFFSET__=mengimbangi" Instruksi yang dapat menangani register fungsi khusus I/O secara langsung seperti "IN", "OUT", "SBI", dll. dapat menggunakan alamat yang berbeda seolah-olah dialamatkan oleh instruksi ke akses RAM seperti "LD" atau "STS". Offset ini tergantung pada arsitektur perangkat dan memiliki untuk dikurangkan dari alamat RAM untuk mendapatkan masing-masing alamat I/O@tie{}.

"__WITH_AVRLIBC__" Kompiler dikonfigurasi untuk digunakan bersama dengan AVR-Libc. Lihat --dengan-avrlibc opsi konfigurasi.

Sirip hitam Opsi

-mcpu=cpu[-visi] Menentukan nama prosesor Blackfin target. Saat ini, cpu bisa menjadi salah satu 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.

Opsional visi menentukan revisi silikon dari target Blackfin prosesor. Solusi apa pun yang tersedia untuk revisi silikon yang ditargetkan diaktifkan. If visi is tak satupun, tidak ada solusi yang diaktifkan. Jika visi is Apa pun, semua solusi untuk prosesor yang ditargetkan diaktifkan. Makro "__SILICON_REVISION__" didefinisikan menjadi dua digit heksadesimal yang mewakili bilangan mayor dan minor dalam revisi silikon. Jika visi is tak satupun, "__SILICON_REVISION__" tidak ditentukan. If visi is Apa pun, "__SILICON_REVISION__" didefinisikan sebagai 0xffff. Jika ini opsional visi tidak digunakan, GCC mengasumsikan revisi silikon terbaru yang diketahui dari prosesor Blackfin yang ditargetkan.

GCC mendefinisikan makro praprosesor untuk yang ditentukan cpu. Untuk bfin-elf rantai alat, opsi ini menyebabkan BSP perangkat keras yang disediakan oleh libgloss ditautkan di if -msim is tidak diberikan.

Tanpa opsi ini, bf532 digunakan sebagai prosesor secara default.

Perhatikan bahwa dukungan untuk bf561 tidak lengkap. Untuk bf561, hanya makro praprosesor yang didefinisikan.

-msim Menentukan bahwa program akan dijalankan pada simulator. Ini menyebabkan simulator BSP disediakan oleh libgloss untuk ditautkan. Opsi ini hanya berlaku untuk bfin-elf rantai alat. Pilihan tertentu lainnya, seperti -perpustakaan bersama-pertengahan serta -mfdpic, menyiratkan -msim.

-momit-daun-frame-pointer Jangan simpan penunjuk bingkai dalam register untuk fungsi daun. Ini menghindari instruksi untuk menyimpan, mengatur dan mengembalikan pointer bingkai dan membuat register tambahan tersedia dalam fungsi daun. Pilihan -fomit-frame-pointer menghapus bingkai pointer untuk semua fungsi, yang mungkin membuat debugging lebih sulit.

-mspecld-anomali Saat diaktifkan, kompiler memastikan bahwa kode yang dihasilkan tidak mengandung beban spekulatif setelah instruksi lompat. Jika opsi ini digunakan, "__WORKAROUND_SPECULATIVE_LOADS" didefinisikan.

-mno-specld-anomaly Jangan membuat kode tambahan untuk mencegah terjadinya beban spekulatif.

-mcsync-anomali Saat diaktifkan, kompilator memastikan bahwa kode yang dihasilkan tidak mengandung CSYNC atau Instruksi SSYNC terlalu cepat setelah cabang bersyarat. Jika opsi ini digunakan, "__WORKAROUND_SPECULATIVE_SYNCS" didefinisikan.

-mno-csync-anomali Jangan membuat kode tambahan untuk mencegah instruksi CSYNC atau SSYNC terjadi juga segera setelah cabang bersyarat.

-mlow-64k Saat diaktifkan, kompiler bebas untuk memanfaatkan pengetahuan bahwa seluruh program cocok dengan memori 64k yang rendah.

-mno-rendah-64k Asumsikan bahwa program ini sewenang-wenang besar. Ini adalah default.

-mstack-periksa-l1 Lakukan pemeriksaan tumpukan menggunakan informasi yang ditempatkan ke memori scratchpad L1 oleh uClinux inti.

-perpustakaan bersama-pertengahan Buat kode yang mendukung pustaka bersama melalui metode ID pustaka. Ini memungkinkan untuk dijalankan di tempat dan perpustakaan bersama di lingkungan tanpa memori virtual pengelolaan. Opsi ini menyiratkan -fPIC. Dengan bfin-elf target, opsi ini menyiratkan -msim.

-mno-id-shared-library Buat kode yang tidak menganggap pustaka bersama berbasis ID sedang digunakan. Ini adalah default.

-mleaf-id-shared-library Hasilkan kode yang mendukung perpustakaan bersama melalui metode ID perpustakaan, tetapi mengasumsikan bahwa perpustakaan ini atau yang dapat dieksekusi tidak akan ditautkan ke perpustakaan bersama ID lainnya. Itu memungkinkan kompiler untuk menggunakan kode yang lebih cepat untuk lompatan dan panggilan.

-mno-leaf-id-shared-library Jangan berasumsi bahwa kode yang sedang dikompilasi tidak akan tertaut dengan pustaka bersama ID apa pun. Kode yang lebih lambat dihasilkan untuk loncatan dan panggilan insns.

-mshared-library-id=n Menentukan nomor identifikasi perpustakaan bersama berbasis ID yang sedang dikompilasi. Menentukan nilai 0 menghasilkan kode yang lebih ringkas; menentukan kekuatan nilai lain alokasi nomor itu ke perpustakaan saat ini tetapi tidak ada lagi ruang atau waktu efisien daripada menghilangkan opsi ini.

-msep-data Hasilkan kode yang memungkinkan segmen data ditempatkan di area memori yang berbeda dari segmen teks. Ini memungkinkan untuk dieksekusi di tempat di lingkungan tanpa manajemen memori virtual dengan menghilangkan relokasi terhadap bagian teks.

-mno-sep-data Buat kode yang mengasumsikan bahwa segmen data mengikuti segmen teks. Ini adalah default.

-mlong-panggilan -mno-panggilan panjang Memberitahu kompiler untuk melakukan panggilan fungsi dengan terlebih dahulu memuat alamat dari fungsi ke dalam register dan kemudian melakukan panggilan subrutin pada register ini. Ini switch diperlukan jika fungsi target berada di luar jangkauan pengalamatan 24-bit versi instruksi panggilan subrutin berbasis offset.

Fitur ini tidak diaktifkan secara default. Menentukan -mno-panggilan panjang mengembalikan perilaku bawaan. Perhatikan bahwa sakelar ini tidak berpengaruh pada bagaimana kompiler menghasilkan kode untuk menangani panggilan fungsi melalui pointer fungsi.

-mfast-fp Tautkan dengan perpustakaan floating-point cepat. Perpustakaan ini melemaskan beberapa IEEE aturan standar floating-point untuk memeriksa input terhadap Not-a-Number (NAN), di kepentingan kinerja.

-minline-plt Aktifkan inlining entri PLT dalam panggilan fungsi ke fungsi yang tidak diketahui mengikat secara lokal. Itu tidak berpengaruh tanpa -mfdpic.

-mmulticore Membangun aplikasi mandiri untuk prosesor Blackfin multicore. Pilihan ini menyebabkan file awal yang tepat dan skrip tautan yang mendukung multicore untuk digunakan, dan mendefinisikan makro "__BFIN_MULTICORE". Itu hanya dapat digunakan dengan -mcpu=bf561[-visi].

Opsi ini dapat digunakan dengan -mcorea or -mcoreb, yang memilih satu-aplikasi- model pemrograman per-inti. Tanpa -mcorea or -mcoreb, yang digunakan model pemrograman single-application/dual-core. Dalam model ini, yang utama fungsi Core B harus dinamai sebagai "coreb_main".

Jika opsi ini tidak digunakan, model pemrograman aplikasi inti tunggal digunakan.

-mcorea Membangun aplikasi mandiri untuk Core A dari BF561 saat menggunakan satu-aplikasi-per- model pemrograman inti. File awal yang tepat dan skrip tautan digunakan untuk mendukung Core A, dan makro "__BFIN_COREA" didefinisikan. Opsi ini hanya dapat digunakan di berhubungan dengan -mmulticore.

-mcoreb Membangun aplikasi mandiri untuk Core B dari BF561 saat menggunakan satu-aplikasi-per- model pemrograman inti. File awal yang tepat dan skrip tautan digunakan untuk mendukung Core B, dan makro "__BFIN_COREB" didefinisikan. Saat opsi ini digunakan, "coreb_main" harus digunakan sebagai ganti "utama". Opsi ini hanya dapat digunakan bersama dengan -mmulticore.

-msdram Membangun aplikasi mandiri untuk SDRAM. File awal yang tepat dan skrip tautan digunakan untuk memasukkan aplikasi ke SDRAM, dan makro "__BFIN_SDRAM" didefinisikan. NS loader harus menginisialisasi SDRAM sebelum memuat aplikasi.

-micplb Asumsikan bahwa ICPLB diaktifkan pada waktu berjalan. Ini berpengaruh pada anomali tertentu solusi. Untuk target Linux, defaultnya adalah menganggap ICPLB diaktifkan; untuk aplikasi mandiri defaultnya mati.

C6X Opsi

-maret=nama Ini menentukan nama arsitektur target. GCC menggunakan nama ini untuk menentukan jenis instruksi apa yang dapat dipancarkannya saat membuat kode perakitan. Diizinkan nama-nama adalah: c62x, c64x, c64x+, c67x, c67x+, c674x.

-mbig-endian Hasilkan kode untuk target big-endian.

-mlittle-endian Hasilkan kode untuk target little-endian. Ini adalah default.

-msim Pilih file startup dan skrip tautan yang cocok untuk simulator.

-msdata=default Letakkan data global dan statis kecil di bagian ".neardata", yang ditunjukkan oleh daftar "B14". Letakkan data global dan statis kecil yang tidak diinisialisasi di bagian ".bss", yang bersebelahan dengan bagian ".neardata". Masukkan data kecil hanya-baca ke dalam bagian ".rodata". Bagian terkait yang digunakan untuk potongan data yang besar adalah: ".fardata", ".far" dan ".const".

-msdata=semua Masukkan semua data, bukan hanya objek kecil, ke dalam bagian yang disediakan untuk data kecil, dan gunakan pengalamatan relatif terhadap register "B14" untuk mengaksesnya.

-msdata=tidak ada Jangan gunakan bagian yang disediakan untuk data kecil, dan gunakan alamat absolut untuk mengakses semua data. Masukkan semua data global dan statis yang diinisialisasi di ".fardata" bagian, dan semua data yang tidak diinisialisasi di bagian ".far". Masukkan semua data konstan ke dalam bagian ".const".

CRIS Opsi

Opsi ini ditentukan secara khusus untuk port CRIS.

-maret=tipe arsitektur -mcpu=tipe arsitektur Menghasilkan kode untuk arsitektur tertentu. Pilihan untuk tipe arsitektur adalah v3, v8 serta v10 untuk masing-masing ETRAX 4, ETRAX 100, dan ETRAX 100 LX. Standarnya adalah v0 kecuali untuk cris-axis-linux-gnu, di mana defaultnya adalah v10.

-mtune=tipe arsitektur Dengarkan tipe arsitektur semua yang berlaku tentang kode yang dihasilkan, kecuali untuk ABI dan set instruksi yang tersedia. Pilihan untuk tipe arsitektur adalah sama untuk -maret=tipe arsitektur.

-mmax-stack-frame=n Peringatkan ketika bingkai tumpukan suatu fungsi melebihi n byte.

-metrax4 -metrax100 Opsi -metrax4 serta -metrax100 adalah sinonim untuk -maret=v3 serta -maret=v8 masing.

-mmul-bug-solusi -mno-mul-bug-solusi Mengatasi bug dalam instruksi "muls" dan "mulu" untuk model CPU di mana itu berlaku. Opsi ini aktif secara default.

-mpdebug Aktifkan informasi terkait debug verbose spesifik CRIS dalam kode perakitan. Ini opsi juga memiliki efek mematikan #NO_APP indikator kode terformat ke assembler di awal file assembly.

-mcc-init Jangan gunakan hasil kode kondisi dari instruksi sebelumnya; selalu memancarkan membandingkan dan instruksi pengujian sebelum menggunakan kode kondisi.

-mno-efek samping Jangan memancarkan instruksi dengan efek samping dalam mode pengalamatan selain pasca- kenaikan.

-mstack-align -mno-stack-align -mdata-align -mno-data-menyelaraskan -mconst-align -mno-const-align Pilihan ini (tidak- opsi) mengatur (menghilangkan pengaturan) untuk bingkai tumpukan, data individu dan konstanta untuk diselaraskan untuk ukuran akses data tunggal maksimum untuk model CPU yang dipilih. Standarnya adalah mengatur perataan 32-bit. ABI detail seperti tata letak struktur tidak terpengaruh oleh opsi ini.

-m32-bit -m16-bit -m8-bit Mirip dengan opsi stack-data- dan const-align di atas, opsi ini mengatur untuk bingkai tumpukan, data yang dapat ditulis, dan konstanta untuk semua menjadi 32-bit, 16-bit atau 8-bit selaras. Standarnya adalah perataan 32-bit.

-mno-prolog-epilog -mprolog-epilog Dengan -mno-prolog-epilog, prolog dan epilog fungsi normal yang diatur bingkai tumpukan dihilangkan dan tidak ada instruksi pengembalian atau urutan pengembalian dihasilkan dalam kode. Gunakan opsi ini hanya bersama dengan inspeksi visual dari kode yang dikompilasi: tidak ada peringatan atau kesalahan yang dihasilkan ketika register yang disimpan panggilan harus disimpan, atau penyimpanan untuk variabel lokal perlu dialokasikan.

-mno-gotplt -mgotplt Dengan -fpic serta -fPIC, jangan buat (buat) urutan instruksi yang memuat alamat untuk fungsi dari bagian PLT dari GOT daripada (tradisional pada lainnya arsitektur) panggilan ke PLT. Standarnya adalah -mgotplt.

-melf Opsi no-op lama hanya dikenali dengan cris-axis-elf dan cris-axis-linux-gnu target.

-mlinux Opsi no-op lama hanya dikenali dengan target cris-axis-linux-gnu.

-sim Opsi ini, dikenali untuk cris-axis-elf, mengatur untuk menghubungkan dengan input-output fungsi dari perpustakaan simulator. Kode, data yang diinisialisasi, dan data yang diinisialisasi nol dialokasikan secara berurutan.

-sim2 Seperti -sim, tetapi berikan opsi tautan untuk menemukan data yang diinisialisasi pada 0x40000000 dan nol- data diinisialisasi pada 0x80000000.

CR16 Opsi

Opsi ini ditentukan secara khusus untuk port CR16.

-mmac Aktifkan penggunaan instruksi multi-akumulasi. Dinonaktifkan secara default.

-mcr16cplus -mcr16c Buat kode untuk arsitektur CR16C atau CR16C+. Arsitektur CR16C+ adalah default.

-msim Menautkan perpustakaan libsim.a yang kompatibel dengan simulator. Berlaku untuk ELF penyusun saja.

-mint32 Pilih tipe integer sebagai lebar 32-bit.

-mbit-ops Menghasilkan instruksi "sbit"/"cbit" untuk manipulasi bit.

-mdata-model=model Pilih model data. Pilihan untuk model adalah dekat, jauh or medium. medium adalah default. Namun, jauh tidak berlaku dengan -mcr16c, karena arsitektur CR16C tidak mendukung model data jauh.

darwin Opsi

Opsi ini ditentukan untuk semua arsitektur yang menjalankan sistem operasi Darwin.

FSF GCC di Darwin tidak membuat file objek "gemuk"; itu membuat file objek untuk arsitektur tunggal yang dibangun GCC untuk ditargetkan. GCC Apple di Darwin memang membuat "gemuk" file jika banyak -lengkungan opsi yang digunakan; ia melakukannya dengan menjalankan compiler atau linker beberapa kali dan menggabungkan hasilnya dengan lipo.

Subtipe file yang dibuat (seperti ppc7400 or ppc970 or i686) ditentukan oleh flag yang menentukan ISA yang ditargetkan GCC, seperti -mcpu or -berbaris. itu -force_cpusubtype_ALL opsi dapat digunakan untuk menimpa ini.

Alat Darwin bervariasi dalam perilakunya ketika disajikan dengan ketidakcocokan ISA. NS perakit, as, hanya mengizinkan instruksi untuk digunakan yang valid untuk subtipe dari file yang dihasilkannya, jadi Anda tidak dapat memasukkan instruksi 64-bit ke dalam a ppc750 berkas objek. NS tautan untuk perpustakaan bersama, /usr/bin/libtool, gagal dan mencetak kesalahan jika diminta buat perpustakaan bersama dengan subtipe yang tidak terlalu membatasi daripada file inputnya (untuk misalnya, mencoba untuk menempatkan a ppc970 file objek dalam a ppc7400 Perpustakaan). Penghubung untuk yang dapat dieksekusi, ld, diam-diam memberikan executable subtipe yang paling ketat dari semua nya file masukan.

-Fdir Tambahkan direktori kerangka kerja dir ke kepala daftar direktori yang akan dicari untuk file header. Direktori ini disisipkan dengan yang ditentukan oleh -I pilihan dan dipindai dalam urutan kiri-ke-kanan.

Direktori kerangka kerja adalah direktori dengan kerangka kerja di dalamnya. Sebuah kerangka kerja adalah direktori dengan Header dan / atau PrivateHeader direktori yang terkandung langsung di dalamnya itu berakhir di .kerangka. Nama kerangka kerja adalah nama direktori ini tidak termasuk itu .kerangka. Tajuk yang terkait dengan kerangka kerja ditemukan di salah satu dari keduanya direktori, dengan Header di cari dulu. Sebuah subframework adalah sebuah framework direktori yang ada dalam kerangka Kerangka direktori. Termasuk subframework header hanya dapat muncul di header framework yang berisi subframework, atau di header subframework saudara. Dua subframework adalah saudara kandung jika mereka terjadi di kerangka yang sama. Subframework tidak boleh memiliki nama yang sama dengan framework; A peringatan dikeluarkan jika ini dilanggar. Saat ini subframework tidak dapat memiliki subframework; di masa depan, mekanisme dapat diperpanjang untuk mendukung ini. NS kerangka kerja standar dapat ditemukan di / System / Library / Frameworks serta / Library / Frameworks. Contoh include terlihat seperti "#include ", dimana Kerangka menunjukkan nama kerangka kerja dan tajuk.h ditemukan di PrivateHeader or Header direktori.

-iframeworkdir Seperti -F kecuali direktori diperlakukan sebagai direktori sistem. Perbedaan utama antara ini -iframework serta -F apakah itu dengan -iframework kompiler tidak memperingatkan tentang konstruksi yang terkandung dalam file header yang ditemukan melalui dir. Opsi ini valid hanya untuk keluarga bahasa C.

-gused Memancarkan informasi debug untuk simbol yang digunakan. Untuk format debug tusukan, ini memungkinkan -feliminate-unused-debug-simbol. Ini secara default AKTIF.

-gfull Memancarkan informasi debug untuk semua simbol dan tipe.

-mmacosx-versi-min=versi Versi paling awal dari MacOS X yang akan dijalankan oleh executable ini adalah versi. Khas nilai dari versi termasuk 10.1, 10.2, dan 10.3.9.

Jika kompiler dibangun untuk menggunakan header sistem secara default, maka default untuk opsi ini adalah versi sistem tempat kompiler berjalan, jika tidak, defaultnya adalah membuat pilihan yang kompatibel dengan sebanyak mungkin sistem dan basis kode mungkin.

-mkernel Aktifkan mode pengembangan kernel. NS -mkernel set pilihan -statis, -fno-umum, -fno-gunakan-cxa-atexit, -fno-pengecualian, -fno-non-panggilan-pengecualian, -fapple-kext, -fno-lemah serta -fno-rtti mana yang berlaku. Mode ini juga mengatur -mno-altivec, -msoft-float, -fno-builtin serta -mlong-cabang untuk target PowerPC.

-mone-byte-bool Ganti default untuk "bool" sehingga "sizeof(bool)==1". Secara default "sizeof(bool)" adalah 4 saat kompilasi untuk Darwin/PowerPC dan 1 saat kompilasi untuk Darwin/x86, jadi ini opsi tidak berpengaruh pada x86.

Peringatan: The -mone-byte-bool switch menyebabkan GCC menghasilkan kode yang bukan biner kompatibel dengan kode yang dihasilkan tanpa sakelar itu. Menggunakan sakelar ini mungkin memerlukan: mengkompilasi ulang semua modul lain dalam suatu program, termasuk pustaka sistem. Gunakan ini beralih agar sesuai dengan model data non-default.

-mfix-dan-lanjutkan -perbaiki-dan-lanjutkan -finddirect-data Hasilkan kode yang cocok untuk pengembangan turnaround yang cepat, seperti mengizinkan GDB untuk memuat secara dinamis .o file ke dalam program yang sudah berjalan. -finddirect-data serta -perbaiki-dan-lanjutkan disediakan untuk kompatibilitas mundur.

-semua_muat Memuat semua anggota perpustakaan arsip statis. Lihat pria ld(1) untuk informasi lebih lanjut.

-arch_errors_fatal Menyebabkan kesalahan yang berkaitan dengan file yang memiliki arsitektur yang salah menjadi fatal.

-bind_at_load Menyebabkan file keluaran ditandai sedemikian rupa sehingga tautan dinamis akan mengikat semua referensi yang tidak ditentukan saat file dimuat atau diluncurkan.

-bundel Menghasilkan file format bundel Mach-o. Lihat pria ld(1) untuk informasi lebih lanjut.

-bundle_loader executable Opsi ini menentukan executable yang akan memuat file output build menjadi terkait. Lihat pria ld(1) untuk informasi lebih lanjut.

-dinamislib Saat melewati opsi ini, GCC menghasilkan pustaka dinamis alih-alih dapat dieksekusi ketika menghubungkan, menggunakan Darwin alat lib perintah.

-force_cpusubtype_ALL Ini menyebabkan file keluaran GCC memiliki SEMUA subtipe, bukan yang dikendalikan oleh itu -mcpu or -berbaris .

-klien_yang diizinkan Nama Klien -Nama Klien -kompatibilitas_versi -versi sekarang -dead_strip -file-ketergantungan -dylib_file -dylinker_install_name -dinamis -diekspor_simbol_daftar -daftar file -flat_namespace -force_flat_namespace -headerpad_max_install_names -gambar_base -init -install_name -keep_private_externs -multi_modul -multiply_defined -multiply_defined_unused -noall_load -no_dead_strip_inits_and_terms -nofixprebinding -nomultidefs -tidak terikat -noseglinkedit -halamanzero_size -prebind -prebind_all_twolevel_modules -private_bundel -read_only_relocs -sectalign -sectobjectsymbols -mengapa -seg1addr -sectcreate -sectobjectsymbols -sektor -segadr -segs_read_only_addr -segs_read_write_addr -seg_addr_table -seg_addr_table_filename -seglinkedit -segprot -segs_read_only_addr -segs_read_write_addr -modul_tunggal -statis -sub_perpustakaan -sub_payung -ruang nama_duatingkat -payung -tidak terdefinisi -daftar_simbol_yang tidak diekspor -ketidakcocokan_referensi_lemah -whatsloaded Pilihan ini diteruskan ke linker Darwin. Halaman manual tautan Darwin menjelaskan mereka secara rinci.

Desember alfa Opsi

Ini -m opsi ditentukan untuk implementasi DEC Alpha:

-mno-soft-float -msoft-float Gunakan (jangan gunakan) instruksi titik-mengambang perangkat keras untuk titik-mengambang operasi. Kapan -msoft-float ditentukan, berfungsi dalam libgcc.a digunakan untuk melakukan operasi floating-point. Kecuali mereka digantikan oleh rutinitas yang meniru operasi floating-point, atau dikompilasi sedemikian rupa untuk memanggil emulasi tersebut rutinitas, rutinitas ini mengeluarkan operasi floating-point. Jika Anda mengkompilasi untuk Alpha tanpa operasi floating-point, Anda harus memastikan bahwa perpustakaan dibangun agar tidak memanggil mereka.

Perhatikan bahwa implementasi Alpha tanpa operasi floating-point diharuskan memiliki register titik-mengambang.

-mfp-reg -mno-fp-reg Hasilkan kode yang menggunakan (tidak menggunakan) set register titik-mengambang. -mno-fp-reg menyiratkan -msoft-float. Jika set register titik-mengambang tidak digunakan, titik-mengambang operan dilewatkan dalam register bilangan bulat seolah-olah mereka bilangan bulat dan titik-mengambang hasil dilewatkan dalam $0 alih-alih $f0. Ini adalah urutan panggilan non-standar, jadi fungsi apa pun dengan argumen floating-point atau nilai kembalian yang dipanggil oleh kode yang dikompilasi dengan -mno-fp-reg juga harus dikompilasi dengan opsi itu.

Penggunaan khas dari opsi ini adalah membangun kernel yang tidak digunakan, dan karenanya membutuhkan tidak menyimpan dan memulihkan, register floating-point apa pun.

-miee Arsitektur Alpha mengimplementasikan perangkat keras floating-point yang dioptimalkan secara maksimal pertunjukan. Ini sebagian besar sesuai dengan standar floating-point IEEE. Namun, untuk kepatuhan penuh, bantuan perangkat lunak diperlukan. Opsi ini menghasilkan kode kode yang sepenuhnya sesuai dengan IEEE kecuali bahwa bendera yang tidak tepat tidak dipertahankan (lihat di bawah). Jika opsi ini diaktifkan, makro praprosesor "_IEEE_FP" ditentukan selama kompilasi. Kode yang dihasilkan kurang efisien tetapi mampu mendukung dengan benar angka yang didenormalisasi dan nilai IEEE yang luar biasa seperti bukan angka dan plus/minus ketakterbatasan. Kompiler Alpha lainnya memanggil opsi ini -ieee_with_no_inexact.

-mieee-dengan-tidak tepat Ini seperti -miee kecuali kode yang dihasilkan juga mempertahankan IEEE bendera yang tidak tepat. Mengaktifkan opsi ini menyebabkan kode yang dihasilkan menerapkan IEEE yang sepenuhnya sesuai matematika. Selain "_IEEE_FP", "_IEEE_FP_EXACT" didefinisikan sebagai makro praprosesor. Pada beberapa implementasi Alpha, kode yang dihasilkan dapat dieksekusi secara signifikan lebih lambat daripada kode yang dihasilkan secara default. Karena hanya ada sedikit kode yang bergantung pada bendera yang tidak tepat, Anda biasanya tidak boleh menentukan opsi ini. Kompiler Alpha lainnya memanggil pilihan ini -ieee_with_inexact.

-mfp-trap-mode=mode perangkap Opsi ini mengontrol jebakan terkait floating-point yang diaktifkan. Alfa lainnya kompiler memanggil opsi ini -fptm mode perangkap. Mode jebakan dapat diatur ke salah satu dari empat nilai:

n Ini adalah pengaturan default (normal). Satu-satunya jebakan yang diaktifkan adalah yang tidak dapat dinonaktifkan dalam perangkat lunak (misalnya, pembagian dengan perangkap nol).

u Selain jebakan yang diaktifkan oleh n, perangkap aliran bawah juga diaktifkan.

su Seperti u, tetapi petunjuknya ditandai sebagai aman untuk penyelesaian perangkat lunak (lihat Manual arsitektur alfa untuk detailnya).

di Seperti su, tetapi jebakan yang tidak tepat juga diaktifkan.

-mfp-pembulatan-mode=mode pembulatan Memilih mode pembulatan IEEE. Kompiler Alpha lainnya memanggil opsi ini -frm mode pembulatan. itu mode pembulatan dapat menjadi salah satu dari:

n Mode pembulatan IEEE normal. Angka floating-point dibulatkan ke arah terdekat nomor mesin atau ke arah nomor mesin genap jika seri.

m Putaran menuju minus tak terhingga.

c Mode pembulatan cincang. Angka floating-point dibulatkan ke arah nol.

d Mode pembulatan dinamis. Sebuah field dalam register kontrol floating-point (fpcr, Lihat Manual referensi arsitektur alfa) mengontrol mode pembulatan yang berlaku. C library menginisialisasi register ini untuk pembulatan menuju plus tak terhingga. Dengan demikian, kecuali program Anda memodifikasi fpcr, d sesuai dengan putaran menuju plus tak terbatas.

-mtrap-presisi=presisi jebakan Dalam arsitektur Alpha, perangkap floating-point tidak tepat. Ini berarti tanpa bantuan perangkat lunak tidak mungkin untuk pulih dari perangkap dan program mengambang eksekusi biasanya perlu dihentikan. GCC dapat menghasilkan kode yang dapat membantu penangan perangkap sistem operasi dalam menentukan lokasi yang tepat yang menyebabkan a perangkap floating-point. Tergantung pada persyaratan aplikasi, berbeda tingkat presisi dapat dipilih:

p Ketepatan program. Opsi ini adalah default dan berarti penangan perangkap hanya bisa mengidentifikasi program mana yang menyebabkan pengecualian floating-point.

f Ketepatan fungsi. Penangan perangkap dapat menentukan fungsi yang menyebabkan a pengecualian floating-point.

i Ketepatan instruksi. Penangan perangkap dapat menentukan instruksi yang tepat bahwa menyebabkan pengecualian floating-point.

Kompiler Alpha lainnya menyediakan opsi yang setara yang disebut -lingkup_aman serta -melanjutkan_aman.

-miee-konforman Opsi ini menandai kode yang dihasilkan sebagai konforman IEEE. Anda tidak boleh menggunakan opsi ini kecuali jika Anda juga menentukan -mtrap-presisi=i dan lainnya -mfp-trap-mode=su or -mfp-trap-mode=sui. Satu-satunya efeknya adalah memancarkan garis .flag 48 dalam fungsi prolog dari file perakitan yang dihasilkan.

-membangun-konstanta Biasanya GCC memeriksa konstanta integer 32- atau 64-bit untuk melihat apakah ia dapat membangunnya dari konstanta yang lebih kecil dalam dua atau tiga instruksi. Jika tidak bisa, itu mengeluarkan konstan sebagai literal dan menghasilkan kode untuk memuatnya dari segmen data pada saat run time.

Gunakan opsi ini untuk meminta GCC membangun semua konstanta integer menggunakan kode, bahkan jika dibutuhkan lebih banyak instruksi (maksimal enam).

Anda biasanya menggunakan opsi ini untuk membuat pemuat dinamis pustaka bersama. itu sendiri perpustakaan bersama, ia harus merelokasi dirinya di memori sebelum dapat menemukan variabel dan konstanta dalam segmen datanya sendiri.

-mbwx -mno-bwx -mcix -mno-cix -mfix -mno-fix -mmax -mno-maks Tunjukkan apakah GCC harus menghasilkan kode untuk menggunakan BWX, CIX, FIX, dan MAX opsional set instruksi. Standarnya adalah menggunakan set instruksi yang didukung oleh CPU jenis yang ditentukan melalui -mcpu= opsi atau CPU tempat GCC dibangun jika tidak ada ditentukan.

-mfloat-vax -mfloat-ieee Hasilkan kode yang menggunakan (tidak menggunakan) aritmatika floating-point VAX F dan G presisi tunggal dan ganda IEEE.

-meksplisit-relocs -mno-eksplisit-relocs Perakit Alpha yang lebih lama tidak menyediakan cara untuk menghasilkan relokasi simbol kecuali melalui makro perakit. Penggunaan makro ini tidak memungkinkan penjadwalan instruksi yang optimal. GNU binutils pada versi 2.12 mendukung sintaks baru yang memungkinkan kompiler untuk secara eksplisit menandai relokasi mana yang harus diterapkan pada instruksi mana. Pilihan ini adalah sebagian besar berguna untuk debugging, karena GCC mendeteksi kemampuan assembler ketika itu dibangun dan menetapkan default yang sesuai.

-msmall-data -mlarge-data Ketika -meksplisit-relocs berlaku, data statis diakses melalui gp-relatif relokasi. Kapan -msmall-data digunakan, objek dengan panjang 8 byte atau lebih kecil ditempatkan di a kecil data daerah (bagian ".sdata" dan ".sbss") dan diakses melalui 16-bit relokasi dari register $gp. Ini membatasi ukuran area data kecil untuk 64KB, tetapi memungkinkan variabel untuk langsung diakses melalui satu instruksi.

Standarnya adalah -mlarge-data. Dengan opsi ini, area data dibatasi hanya di bawah 2GB. Program yang membutuhkan lebih dari 2 GB data harus menggunakan "malloc" atau "mmap" untuk mengalokasikan data di heap alih-alih di segmen data program.

Saat membuat kode untuk pustaka bersama, -fpic menyiratkan -msmall-data serta -fPIC menyiratkan -mlarge-data.

-msmall-teks -mlarge-teks Ketika -msmall-teks digunakan, kompiler mengasumsikan bahwa kode dari seluruh program (atau perpustakaan bersama) muat dalam 4MB, dan dengan demikian dapat dijangkau dengan instruksi cabang. Ketika -msmall-data digunakan, kompiler dapat mengasumsikan bahwa semua simbol lokal berbagi nilai $gp yang sama, dan dengan demikian mengurangi jumlah instruksi yang diperlukan untuk suatu fungsi panggilan dari 4 ke 1.

Standarnya adalah -mlarge-teks.

-mcpu=cpu_type Atur set instruksi dan parameter penjadwalan instruksi untuk jenis mesin cpu_type. Anda dapat menentukan baik EV nama gaya atau nomor chip yang sesuai. GCC mendukung parameter penjadwalan untuk rangkaian prosesor EV4, EV5 dan EV6 dan memilih nilai default untuk set instruksi dari prosesor yang Anda tentukan. Jika Anda tidak menentukan jenis prosesor, default GCC ke prosesor yang kompiler dibangun.

Nilai yang didukung untuk cpu_type adalah

ev4 ev45 21064 Jadwal sebagai EV4 dan tidak memiliki ekstensi set instruksi.

ev5 21164 Jadwal sebagai EV5 dan tidak memiliki ekstensi set instruksi.

ev56 21164a Jadwal sebagai EV5 dan mendukung ekstensi BWX.

pca56 21164pc 21164PC Jadwal sebagai EV5 dan mendukung ekstensi BWX dan MAX.

ev6 21264 Jadwal sebagai EV6 dan mendukung ekstensi BWX, FIX, dan MAX.

ev67 21264a Jadwal sebagai EV6 dan mendukung ekstensi BWX, CIX, FIX, dan MAX.

Rantai alat asli juga mendukung nilai asli, yang memilih arsitektur terbaik pilihan untuk prosesor host. -mcpu=asli tidak berpengaruh jika GCC tidak mengenali prosesor.

-mtune=cpu_type Tetapkan hanya parameter penjadwalan instruksi untuk jenis mesin cpu_type. itu set instruksi tidak berubah.

Rantai alat asli juga mendukung nilai asli, yang memilih arsitektur terbaik pilihan untuk prosesor host. -mtune=asli tidak berpengaruh jika GCC tidak mengenali prosesor.

-mmemory-latency=waktu Menyetel latensi yang harus diasumsikan oleh penjadwal untuk referensi memori tipikal seperti yang terlihat oleh aplikasi. Jumlah ini sangat tergantung pada pola akses memori yang digunakan oleh aplikasi dan ukuran cache eksternal pada mesin.

Opsi yang valid untuk waktu adalah

jumlah Angka desimal yang mewakili siklus jam.

L1 L2 L3 utama Kompiler berisi perkiraan jumlah siklus clock untuk EV4 & Perangkat keras EV5 untuk cache Level 1, 2 & 3 (juga disebut Dcache, Scache, dan Bcache), serta ke memori utama. Perhatikan bahwa L3 hanya berlaku untuk EV5.

FR30 Opsi

Opsi ini ditentukan secara khusus untuk port FR30.

-model kecil Gunakan model ruang alamat kecil. Ini dapat menghasilkan kode yang lebih kecil, tetapi mengasumsikan bahwa semua nilai dan alamat simbolis masuk ke dalam rentang 20-bit.

-mno-lsim Asumsikan bahwa dukungan runtime telah disediakan sehingga tidak perlu menyertakan: perpustakaan simulator (libsim.a) pada baris perintah tautan.

FRV Opsi

-mgpr-32 Hanya gunakan 32 register tujuan umum pertama.

-mgpr-64 Gunakan semua 64 register tujuan umum.

-mfpr-32 Gunakan hanya 32 register floating-point pertama.

-mfpr-64 Gunakan semua 64 register floating-point.

-mhard-float Gunakan instruksi perangkat keras untuk operasi floating-point.

-msoft-float Gunakan rutinitas perpustakaan untuk operasi floating-point.

-malloc-cc Secara dinamis mengalokasikan register kode kondisi.

-mfixed-cc Jangan mencoba mengalokasikan register kode kondisi secara dinamis, hanya gunakan "icc0" dan "fcc0".

-mdword Ubah ABI untuk menggunakan kata ganda insns.

-mno-kata kunci Jangan gunakan instruksi kata ganda.

-mganda Gunakan instruksi ganda floating-point.

-mno-ganda Jangan gunakan instruksi ganda floating-point.

-mmedia Gunakan instruksi media.

-mno-media Jangan gunakan instruksi media.

-mmuladd Gunakan instruksi perkalian dan penambahan/pengurangan.

-mno-muladd Jangan gunakan instruksi perkalian dan penambahan/pengurangan.

-mfdpic Pilih FDPIC ABI, yang menggunakan deskriptor fungsi untuk mewakili pointer ke fungsi. Tanpa opsi terkait PIC/PIE, ini menyiratkan -fPIE. Dengan -fpic or -fpie, ini mengasumsikan entri GOT dan data kecil berada dalam kisaran 12-bit dari GOT alamat dasar; dengan -fPIC or -fPIE, offset GOT dihitung dengan 32 bit. Dengan bfin-elf target, opsi ini menyiratkan -msim.

-minline-plt Aktifkan inlining entri PLT dalam panggilan fungsi ke fungsi yang tidak diketahui mengikat secara lokal. Itu tidak berpengaruh tanpa -mfdpic. Ini diaktifkan secara default jika mengoptimalkan kecepatan dan kompilasi untuk perpustakaan bersama (yaitu, -fPIC or -fpic), atau ketika opsi pengoptimalan seperti -O3 atau di atasnya ada di baris perintah.

-mTLS Asumsikan segmen TLS besar saat membuat kode lokal-utas.

-mtl Jangan menganggap segmen TLS besar saat membuat kode lokal-utas.

-mgrel-ro Aktifkan penggunaan relokasi "GPREL" di FDPIC ABI untuk data yang diketahui berada di bagian hanya-baca. Ini diaktifkan secara default, kecuali untuk -fpic or -fpie: meskipun itu dapat membantu membuat tabel offset global lebih kecil, itu menukar 1 instruksi untuk 4. Dengan -fPIC or -fPIE, itu menukar 3 instruksi untuk 4, salah satunya dapat dibagikan oleh banyak orang simbol, dan itu menghindari perlunya entri GOT untuk simbol yang direferensikan, jadi itu lebih mungkin untuk menjadi pemenang. Jika tidak, -mno-gprel-ro dapat digunakan untuk menonaktifkannya.

-multilib-library-pic Tautkan dengan perpustakaan gambar (perpustakaan, bukan FD). Ini tersirat oleh -milibrary-pic, demikian juga seperti oleh -fPIC serta -fpic tanpa -mfdpic. Anda seharusnya tidak pernah menggunakannya secara eksplisit.

-mlinked-fp Ikuti persyaratan EABI untuk selalu membuat penunjuk bingkai setiap kali bingkai tumpukan dialokasikan. Opsi ini diaktifkan secara default dan dapat dinonaktifkan dengan -mno-linked-fp.

-mlong-panggilan Gunakan pengalamatan tidak langsung untuk memanggil fungsi di luar unit kompilasi saat ini. Ini memungkinkan fungsi untuk ditempatkan di mana saja dalam ruang alamat 32-bit.

-malign-label Cobalah untuk menyelaraskan label ke batas 8-byte dengan memasukkan NOP ke dalam paket sebelumnya. Opsi ini hanya berpengaruh ketika pengepakan VLIW diaktifkan. Itu tidak membuat yang baru paket; itu hanya menambahkan NOP ke yang sudah ada.

-milibrary-pic Menghasilkan kode EABI posisi-independen.

-macc-4 Gunakan hanya empat register akumulator media pertama.

-macc-8 Gunakan semua delapan register akumulator media.

-mpack Kemas instruksi VLIW.

-mno-paket Jangan mengemas instruksi VLIW.

-mno-bendera Jangan tandai sakelar ABI di e_flags.

-mcond-move Aktifkan penggunaan instruksi pemindahan bersyarat (default).

Sakelar ini terutama untuk men-debug kompiler dan kemungkinan akan dihapus dalam a versi masa depan.

-mno-cond-move Nonaktifkan penggunaan instruksi pemindahan bersyarat.

Sakelar ini terutama untuk men-debug kompiler dan kemungkinan akan dihapus dalam a versi masa depan.

-mscc Aktifkan penggunaan instruksi set bersyarat (default).

Sakelar ini terutama untuk men-debug kompiler dan kemungkinan akan dihapus dalam a versi masa depan.

-mno-scc Nonaktifkan penggunaan instruksi set bersyarat.

Sakelar ini terutama untuk men-debug kompiler dan kemungkinan akan dihapus dalam a versi masa depan.

-mcond-exec Aktifkan penggunaan eksekusi bersyarat (default).

Sakelar ini terutama untuk men-debug kompiler dan kemungkinan akan dihapus dalam a versi masa depan.

-mno-cond-exec Nonaktifkan penggunaan eksekusi bersyarat.

Sakelar ini terutama untuk men-debug kompiler dan kemungkinan akan dihapus dalam a versi masa depan.

-mvliw-cabang Jalankan pass untuk mengemas cabang ke dalam instruksi VLIW (default).

Sakelar ini terutama untuk men-debug kompiler dan kemungkinan akan dihapus dalam a versi masa depan.

-mno-vliw-cabang Jangan menjalankan pass untuk mengemas cabang ke dalam instruksi VLIW.

Sakelar ini terutama untuk men-debug kompiler dan kemungkinan akan dihapus dalam a versi masa depan.

-mmulti-cond-exec Aktifkan pengoptimalan "&&" dan "||" dalam eksekusi bersyarat (default).

Sakelar ini terutama untuk men-debug kompiler dan kemungkinan akan dihapus dalam a versi masa depan.

-mno-multi-cond-exec Nonaktifkan pengoptimalan "&&" dan "||" dalam eksekusi bersyarat.

Sakelar ini terutama untuk men-debug kompiler dan kemungkinan akan dihapus dalam a versi masa depan.

-mnested-cond-exec Aktifkan pengoptimalan eksekusi bersyarat bersarang (default).

Sakelar ini terutama untuk men-debug kompiler dan kemungkinan akan dihapus dalam a versi masa depan.

-mno-bersarang-cond-exec Nonaktifkan pengoptimalan eksekusi bersyarat bersarang.

Sakelar ini terutama untuk men-debug kompiler dan kemungkinan akan dihapus dalam a versi masa depan.

-moptimalkan-membar Switch ini menghapus instruksi "membar" yang berlebihan dari kode yang dihasilkan oleh kompiler. Ini diaktifkan secara default.

-mno-optimalkan-membar Sakelar ini menonaktifkan penghapusan otomatis instruksi "membar" yang berlebihan dari kode yang dihasilkan.

-mtomcat-stats Penyebab gas untuk mencetak statistik kucing jantan.

-mcpu=cpu Pilih jenis prosesor yang akan menghasilkan kode. Nilai yang mungkin adalah frv, fr550, kucing jantan, fr500, fr450, fr405, fr400, fr300 serta sederhana.

GNU / Linux Opsi

Ini -m opsi ditentukan untuk target GNU/Linux:

-mglibc Gunakan pustaka GNU C. Ini adalah default kecuali pada *-*-linux-*uclibc* serta *-*-linux-*android* target.

-muclibc Gunakan perpustakaan uClibc C. Ini adalah default pada *-*-linux-*uclibc* target.

-bionik Gunakan perpustakaan Bionic C. Ini adalah default pada *-*-linux-*android* target.

-mandroid Kompilasi kode yang kompatibel dengan platform Android. Ini adalah default pada *-*-linux-*android* target.

Saat mengkompilasi, opsi ini memungkinkan -bionik, -fPIC, -fno-pengecualian serta -fno-rtti by bawaan. Saat menautkan, opsi ini membuat driver GCC melewati opsi khusus Android ke penghubung. Terakhir, opsi ini menyebabkan makro praprosesor "__ANDROID__" menjadi didefinisikan.

-tno-android-cc Nonaktifkan efek kompilasi dari -mandroid, yaitu, jangan aktifkan -bionik, -fPIC, -fno-pengecualian serta -fno-rtti secara default

-tno-android-ld Nonaktifkan efek penautan dari -mandroid, yaitu, meneruskan opsi penautan Linux standar ke penghubung.

H8 / 300 Opsi

Ini -m opsi ditentukan untuk implementasi H8/300:

-santai Persingkat beberapa referensi alamat pada waktu tautan, jika memungkinkan; menggunakan opsi tautan -bersantai.

-mh Buat kode untuk H8/300H.

-MS Hasilkan kode untuk H8S.

-M N Hasilkan kode untuk H8S dan H8/300H dalam mode normal. Sakelar ini harus digunakan baik dengan -mh or -MS.

-ms2600 Buat kode untuk H8S/2600. Sakelar ini harus digunakan dengan -MS.

-mexr Register yang diperluas disimpan di tumpukan sebelum eksekusi fungsi dengan monitor atribut. Opsi default adalah -mexr. Opsi ini hanya berlaku untuk target H8S.

-mno-exr Register yang diperluas tidak disimpan di tumpukan sebelum eksekusi fungsi dengan monitor atribut. Opsi default adalah -mno-exr. Opsi ini hanya berlaku untuk target H8S.

-mint32 Buat data "int" 32 bit secara default.

-memfitnah-300 Pada H8/300H dan H8S, gunakan aturan pelurusan yang sama seperti pada H8/300. Standarnya untuk H8/300H dan H8S adalah untuk menyelaraskan long dan float pada batas 4-byte. -memfitnah-300 menyebabkan mereka disejajarkan pada batas 2-byte. Opsi ini tidak berpengaruh di H8/300.

HPPA Opsi

Ini -m opsi ditentukan untuk keluarga komputer HPPA:

-maret=tipe arsitektur Menghasilkan kode untuk arsitektur tertentu. Pilihan untuk tipe arsitektur adalah 1.0 untuk PA 1.0, 1.1 untuk PA 1.1, dan 2.0 untuk prosesor PA 2.0. Mengacu pada /usr/lib/sched.models pada sistem HP-UX untuk menentukan opsi arsitektur yang tepat untuk mesin Anda. Kode yang dikompilasi untuk arsitektur bernomor lebih rendah berjalan pada yang lebih tinggi arsitektur bernomor, tetapi tidak sebaliknya.

-mpa-risc-1-0 -mpa-risc-1-1 -mpa-risc-2-0 Sinonim untuk -maret=1.0, -maret=1.1, dan -maret=2.0 masing.

-mjump-in-delay Opsi ini diabaikan dan disediakan hanya untuk tujuan kompatibilitas.

-mdisable-fregs Cegah register floating-point digunakan dengan cara apa pun. Ini diperlukan untuk mengkompilasi kernel yang melakukan pengalihan konteks malas dari register titik-mengambang. Jika Anda menggunakan opsi ini dan mencoba melakukan operasi titik-mengambang, kompiler membatalkan.

-mdisable-pengindeksan Cegah kompiler menggunakan mode alamat pengindeksan. Ini menghindari beberapa masalah yang tidak jelas saat mengkompilasi kode yang dihasilkan MIG di bawah MACH.

-mno-spasi-regs Hasilkan kode yang mengasumsikan target tidak memiliki register spasi. Hal ini memungkinkan GCC untuk menghasilkan panggilan tidak langsung yang lebih cepat dan menggunakan mode alamat indeks tanpa skala.

Kode tersebut cocok untuk sistem dan kernel PA level 0.

-mfast-panggilan tidak langsung Hasilkan kode yang menganggap panggilan tidak pernah melewati batas ruang. Hal ini memungkinkan GCC untuk memancarkan kode yang melakukan panggilan tidak langsung lebih cepat.

Opsi ini tidak berfungsi dengan adanya pustaka bersama atau fungsi bersarang.

-mfixed-range=rentang pendaftaran Hasilkan kode yang memperlakukan rentang register yang diberikan sebagai register tetap. Register tetap adalah salah satu yang tidak dapat digunakan oleh pengalokasi register. Ini berguna saat mengkompilasi kernel kode. Rentang register ditentukan sebagai dua register yang dipisahkan oleh tanda hubung. Beberapa rentang register dapat ditentukan dipisahkan dengan koma.

-mlong-load-store Hasilkan urutan pemuatan dan penyimpanan 3-instruksi seperti yang terkadang diperlukan oleh HP-UX 10 penghubung. Ini setara dengan +k pilihan untuk kompiler HP.

-portable-runtime Gunakan konvensi panggilan portabel yang diusulkan oleh HP untuk sistem ELF.

-mgas Aktifkan penggunaan arahan assembler yang hanya dipahami oleh GAS.

-msjadwal=tipe cpu Jadwalkan kode sesuai dengan batasan untuk jenis mesin tipe cpu. Pilihannya untuk tipe cpu adalah 700 7100, 7100LC, 7200, 7300 serta 8000. Mengacu pada /usr/lib/sched.models pada sistem HP-UX untuk menentukan opsi penjadwalan yang tepat untuk mesin Anda. Penjadwalan default adalah 8000.

-mlinker-opt Aktifkan pass pengoptimalan di tautan HP-UX. Perhatikan ini membuat debugging simbolis mustahil. Ini juga memicu bug di tautan HP-UX 8 dan HP-UX 9 di mana mereka memberikan pesan kesalahan palsu saat menautkan beberapa program.

-msoft-float Hasilkan output yang berisi panggilan perpustakaan untuk floating point. Peringatan: yang diperlukan perpustakaan tidak tersedia untuk semua target HPPA. Biasanya fasilitas kompiler C yang biasa digunakan mesin, tetapi ini tidak dapat dilakukan secara langsung di lintas kompilasi. Anda harus membuat pengaturan sendiri untuk menyediakan perpustakaan yang sesuai fungsi untuk kompilasi silang.

-msoft-float mengubah konvensi pemanggilan dalam file output; oleh karena itu, hanya berguna jika Anda mengkompilasi semua program dengan opsi ini. Secara khusus, Anda perlu menyusun libgcc.a, perpustakaan yang disertakan dengan GCC, dengan -msoft-float untuk ini untuk bekerja.

-msio Hasilkan predefine, "_SIO", untuk server IO. Standarnya adalah -mwsio. Ini menghasilkan yang telah ditentukan sebelumnya, "__hp9000s700", "__hp9000s700__" dan "_WSIO", untuk workstation IO. Opsi ini tersedia di bawah HP-UX dan HI-UX.

-mgnu-ld Gunakan opsi khusus untuk GNU ld. Ini berlalu -bersama untuk ld saat membangun bersama Perpustakaan. Ini adalah default ketika GCC dikonfigurasi, secara eksplisit atau implisit, dengan penghubung GNU. Opsi ini tidak memengaruhi yang mana ld disebut; itu hanya mengubah apa parameter diteruskan ke itu ld. itu ld yang disebut ditentukan oleh --dengan-ld konfigurasikan opsi, jalur pencarian program GCC, dan terakhir oleh pengguna PATH. Linker yang digunakan oleh GCC dapat dicetak menggunakan yang `gcc -print-prog-name=ld`. Ini opsi ini hanya tersedia pada 64-bit HP-UX GCC, yaitu dikonfigurasi dengan hppa*64*-*-hpux*.

-mhp-ld Gunakan opsi khusus untuk HP ld. Ini berlalu -b untuk ld saat membangun perpustakaan bersama dan lulus +Terima JenisKetidakcocokan untuk ld pada semua tautan. Ini adalah default ketika GCC adalah dikonfigurasi, secara eksplisit atau implisit, dengan HP linker. Opsi ini tidak memengaruhi yang ld disebut; itu hanya mengubah parameter apa yang diteruskan ke itu ld. itu ld yang disebut ditentukan oleh --dengan-ld opsi konfigurasi, pencarian program GCC jalur, dan akhirnya oleh pengguna PATH. Linker yang digunakan oleh GCC dapat dicetak menggunakan yang `gcc -print-prog-name=ld`. Opsi ini hanya tersedia di HP-UX 64-bit GCC, yaitu dikonfigurasi dengan hppa*64*-*-hpux*.

-mlong-panggilan Hasilkan kode yang menggunakan urutan panggilan yang panjang. Ini memastikan bahwa panggilan selalu dapat untuk mencapai stub yang dihasilkan oleh linker. Standarnya adalah menghasilkan panggilan panjang hanya ketika jarak dari situs panggilan ke awal fungsi atau unit terjemahan, sebagai kasusnya mungkin, melebihi batas yang telah ditentukan yang ditetapkan oleh jenis cabang yang digunakan. NS batas untuk panggilan normal adalah 7,600,000 dan 240,000 byte, masing-masing untuk PA 2.0 dan arsitektur PA 1.X. Sibcalls selalu dibatasi pada 240,000 byte.

Jarak diukur dari awal fungsi saat menggunakan -ffungsi-bagian pilihan, atau saat menggunakan -mgas serta -mno-portabel-runtime Pilihan bersama-sama di bawah HP-UX dengan SOM linker.

Biasanya tidak diinginkan untuk menggunakan opsi ini karena menurunkan kinerja. Namun, itu mungkin berguna dalam aplikasi besar, terutama ketika tautan parsial digunakan untuk membangun aplikasi.

Jenis panggilan panjang yang digunakan tergantung pada kemampuan assembler dan linker, dan jenis kode yang dihasilkan. Dampak pada sistem yang mendukung lama panggilan absolut, dan perbedaan simbol gambar panjang atau panggilan relatif pc harus relatif kecil. Namun, panggilan tidak langsung digunakan pada sistem ELF 32-bit dalam kode gambar dan itu cukup panjang.

-munix=unix-std Buat predefines compiler dan pilih startfile untuk standar UNIX yang ditentukan. Pilihan untuk unix-std adalah 93, 95 serta 98. 93 didukung pada semua versi HP-UX. 95 tersedia di HP-UX 10.10 dan yang lebih baru. 98 tersedia di HP-UX 11.11 dan yang lebih baru. Nilai defaultnya adalah 93 untuk HP-UX 10.00, 95 untuk HP-UX 10.10 hingga 11.00, dan 98 untuk HP-UX 11.11 dan yang lebih baru.

-munix=93 memberikan predefine yang sama seperti GCC 3.3 dan 3.4. -munix=95 menyediakan predefine tambahan untuk "XOPEN_UNIX" dan "_XOPEN_SOURCE_EXTENDED", dan startfile unix95.o. -munix=98 memberikan predefine tambahan untuk "_XOPEN_UNIX", "_XOPEN_SOURCE_EXTENDED", "_INCLUDE__STDC_A1_SOURCE" dan "_INCLUDE_XOPEN_SOURCE_500", dan file awal unix98.o.

Hal ini penting untuk dicatat bahwa opsi ini mengubah antarmuka untuk berbagai perpustakaan rutinitas. Ini juga mempengaruhi perilaku operasional perpustakaan C. Dengan demikian, ekstrim diperlukan kehati-hatian dalam menggunakan opsi ini.

Kode perpustakaan yang dimaksudkan untuk beroperasi dengan lebih dari satu standar UNIX harus diuji, atur dan pulihkan variabel "__xpg4_extended_mask" sebagaimana mestinya. Sebagian besar perangkat lunak GNU tidak memberikan kemampuan ini.

-nolibdld Menekan pembuatan opsi tautan untuk mencari libdld.sl ketika -statis pilihannya adalah ditentukan pada HP-UX 10 dan yang lebih baru.

-statis Implementasi HP-UX dari setlocale di libc memiliki ketergantungan pada libdld.sl. Di sana bukan versi arsip libdld.sl. Dengan demikian, ketika -statis pilihan ditentukan, opsi tautan khusus diperlukan untuk menyelesaikan ketergantungan ini.

Pada HP-UX 10 dan yang lebih baru, driver GCC menambahkan opsi yang diperlukan untuk ditautkan libdld.sl ketika -statis opsi ditentukan. Hal ini menyebabkan biner yang dihasilkan menjadi menjadi dinamis. Pada port 64-bit, linker menghasilkan binari dinamis secara default di kasus apapun. NS -nolibdld opsi dapat digunakan untuk mencegah driver GCC menambahkan opsi tautan ini.

-benang Tambahkan dukungan untuk multithreading dengan dadu benang perpustakaan di bawah HP-UX. Pilihan ini menetapkan flag untuk preprocessor dan linker.

IA-64 Opsi

Ini adalah -m opsi yang ditentukan untuk arsitektur Intel IA-64.

-mbig-endian Hasilkan kode untuk target big-endian. Ini adalah default untuk HP-UX.

-mlittle-endian Hasilkan kode untuk target little-endian. Ini adalah default untuk AIX5 dan GNU/Linux.

-mgnu-as -mno-gnu-as Hasilkan (atau tidak) kode untuk assembler GNU. Ini adalah default.

-mgnu-ld -mno-gnu-ld Hasilkan (atau tidak) kode untuk tautan GNU. Ini adalah default.

-mno-pic Hasilkan kode yang tidak menggunakan register penunjuk global. Hasilnya bukan posisi kode independen, dan melanggar IA-64 ABI.

-mvolatile-asm-stop -mno-volatil-asm-stop Hasilkan (atau tidak) stop bit segera sebelum dan sesudah pernyataan asm volatil.

-mregister-nama -mno-daftar-nama Hasilkan (atau tidak) in, loc, dan di luar nama register untuk register yang ditumpuk. Ini dapat membuat keluaran assembler lebih mudah dibaca.

-mno-sdata -msdata Nonaktifkan (atau aktifkan) pengoptimalan yang menggunakan bagian data kecil. Ini mungkin berguna untuk mengatasi bug pengoptimal.

-mconstant-gp Hasilkan kode yang menggunakan nilai penunjuk global konstan tunggal. Ini berguna ketika mengkompilasi kode kernel.

-mauto-pic Hasilkan kode yang dapat dipindahkan sendiri. Ini menyiratkan -mconstant-gp. Ini berguna saat mengkompilasi kode firmware.

-minline-float-divide-min-latency Hasilkan kode untuk pembagian sebaris nilai floating-point menggunakan latensi minimum algoritma.

-minline-float-divide-max-throughput Hasilkan kode untuk pembagian sebaris nilai floating-point menggunakan throughput maksimum algoritma.

-mno-inline-float-divide Jangan buat kode sebaris untuk pembagian nilai titik-mengambang.

-minline-int-divide-min-latensi Hasilkan kode untuk pembagian sebaris nilai integer menggunakan latensi minimum algoritma.

-minline-int-divide-max-throughput Hasilkan kode untuk pembagian sebaris nilai integer menggunakan throughput maksimum algoritma.

-mno-inline-int-membagi Jangan buat kode sebaris untuk pembagian nilai integer.

-minline-sqrt-min-latensi Buat kode untuk akar kuadrat sebaris menggunakan algoritme latensi minimum.

-minline-sqrt-max-throughput Hasilkan kode untuk akar kuadrat sebaris menggunakan algoritma throughput maksimum.

-mno-inline-sqrt Jangan buat kode sebaris untuk "sqrt".

-mfused-madd -mno-menyatu-madd Lakukan (jangan) buat kode yang menggunakan perkalian/penambahan yang digabungkan atau perkalian/pengurangan instruksi. Standarnya adalah menggunakan instruksi ini.

-mno-kerdil2-asm -mdwarf2-asm Jangan (atau lakukan) buat kode assembler untuk info debug nomor baris DWARF 2. Ini mungkin berguna jika tidak menggunakan assembler GNU.

-mearly-stop-bit -mno-awal-berhenti-bit Izinkan bit stop ditempatkan lebih awal dari yang mendahului instruksi yang memicu stop bit. Ini dapat meningkatkan penjadwalan instruksi, tetapi tidak selalu lakukan itu.

-mfixed-range=rentang pendaftaran Hasilkan kode yang memperlakukan rentang register yang diberikan sebagai register tetap. Register tetap adalah salah satu yang tidak dapat digunakan oleh pengalokasi register. Ini berguna saat mengkompilasi kernel kode. Rentang register ditentukan sebagai dua register yang dipisahkan oleh tanda hubung. Beberapa rentang register dapat ditentukan dipisahkan dengan koma.

-mtls-ukuran=ukuran tls Tentukan ukuran bit offset TLS langsung. Nilai yang valid adalah 14, 22, dan 64.

-mtune=tipe cpu Tune penjadwalan instruksi untuk CPU tertentu, Nilai yang valid adalah itanium, itanium1, belas kasihan, itanium2, dan McKinley.

-milp32 -mlp64 Buat kode untuk lingkungan 32-bit atau 64-bit. Lingkungan 32-bit mengatur int, panjang dan penunjuk ke 32 bit. Lingkungan 64-bit diatur menjadi 32 bit dan panjang dan penunjuk ke 64 bit. Ini adalah flag khusus HP-UX.

-mno-sched-br-data-spec -msched-br-data-spec (Dis/En)memungkinkan penjadwalan spekulatif data sebelum memuat ulang. Ini menghasilkan generasi instruksi "ld.a" dan instruksi pemeriksaan yang sesuai ("ld.c" / "chk.a"). NS defaultnya adalah 'nonaktifkan'.

-msched-ar-data-spec -mno-sched-ar-data-spec (En/Dis)memungkinkan penjadwalan spekulatif data setelah reload. Ini menghasilkan generasi instruksi "ld.a" dan instruksi pemeriksaan yang sesuai ("ld.c" / "chk.a"). NS defaultnya adalah 'aktifkan'.

-mno-sched-control-spec -msched-control-spec (Dis/En) dapat mengontrol penjadwalan spekulatif. Fitur ini hanya tersedia selama penjadwalan wilayah (yaitu sebelum reload). Ini menghasilkan generasi "ld.s" instruksi dan instruksi cek yang sesuai "chk.s". Standarnya adalah 'cacat'.

-msched-br-in-data-spec -mno-sched-br-in-data-spec (En/Dis) dapat menjadwalkan spekulatif instruksi yang bergantung pada data beban spekulatif sebelum memuat ulang. Ini hanya efektif dengan -msched-br-data-spec diaktifkan. Standarnya adalah 'aktifkan'.

-msched-ar-in-data-spec -mno-sched-ar-in-data-spec (En/Dis) dapat menjadwalkan spekulatif instruksi yang bergantung pada data beban spekulatif setelah reload. Ini hanya efektif dengan -msched-ar-data-spec diaktifkan. Standarnya adalah 'aktifkan'.

-msched-in-control-spec -mno-sched-in-control-spec (En/Dis) dapat menjadwalkan spekulatif instruksi yang bergantung pada mengendalikan beban spekulatif. Ini hanya efektif dengan -msched-control-spec diaktifkan. Standarnya adalah 'aktifkan'.

-mno-sched-prefer-non-data-spec-insns -msched-prefer-non-data-spec-insns Jika diaktifkan, instruksi spekulatif data dipilih untuk jadwal hanya jika tidak ada pilihan lain saat ini. Ini membuat penggunaan spekulasi data menjadi lebih banyak konservatif. Standarnya adalah 'nonaktifkan'.

-mno-sched-prefer-non-control-spec-insns -msched-prefer-non-control-spec-insns Jika diaktifkan, instruksi spekulatif kontrol dipilih untuk jadwal hanya jika ada: tidak ada pilihan lain saat ini. Ini membuat penggunaan spekulasi kontrol banyak lebih konservatif. Standarnya adalah 'nonaktifkan'.

-mno-sched-count-spec-in-critical-path -msched-count-spec-in-critical-path Jika diaktifkan, dependensi spekulatif dipertimbangkan selama perhitungan prioritas instruksi. Ini membuat penggunaan spekulasi sedikit lebih banyak konservatif. Standarnya adalah 'nonaktifkan'.

-msched-spec-ldc Gunakan pemeriksaan spekulasi data sederhana. Opsi ini aktif secara default.

-msched-control-spec-ldc Gunakan pemeriksaan sederhana untuk spekulasi kontrol. Opsi ini aktif secara default.

-msched-stop-bits-setelah-setiap-siklus Tempatkan sedikit stop setelah setiap siklus saat menjadwalkan. Opsi ini aktif secara default.

-msched-fp-mem-deps-zero-cost Asumsikan bahwa penyimpanan dan muatan titik-mengambang tidak mungkin menyebabkan konflik ketika ditempatkan ke dalam kelompok instruksi yang sama. Opsi ini dinonaktifkan secara default.

-msel-sched-dont-check-control-spec Hasilkan pemeriksaan untuk spekulasi kontrol dalam penjadwalan selektif. Bendera ini adalah dinonaktifkan secara default.

-msched-max-memory-insns=max-inns Batasi jumlah insn memori per grup instruksi, memberikan prioritas lebih rendah untuk Inns memori berikutnya mencoba untuk menjadwalkan dalam kelompok instruksi yang sama. Sering berguna untuk mencegah konflik bank cache. Nilai defaultnya adalah 1.

-msched-max-memory-insns-hard-limit Membuat batas yang ditentukan oleh msched-max-memory-insns batas yang keras, melarang lebih banyak dari jumlah itu dalam kelompok instruksi. Jika tidak, batasnya adalah "lunak", artinya bahwa operasi non-memori lebih disukai ketika batas tercapai, tetapi memori operasi mungkin masih dijadwalkan.

LM32 Opsi

Ini -m opsi ditentukan untuk arsitektur LatticeMico32:

-barrel-shift-diaktifkan Aktifkan instruksi perpindahan barel.

-mdivide-diaktifkan Aktifkan instruksi pembagian dan modulus.

-mmultiply-diaktifkan Aktifkan instruksi perkalian.

-msign-extend-diaktifkan Aktifkan petunjuk perpanjangan tanda.

-diaktifkan oleh pengguna Aktifkan instruksi yang ditentukan pengguna.

M32C Opsi

-mcpu=nama Pilih CPU yang kodenya dibuat. nama mungkin salah satunya r8c untuk R8C/Tiny seri, m16c untuk seri M16C (hingga /60), m32cm untuk seri M16C/80, atau m32c untuk seri M32C/80.

-msim Menentukan bahwa program akan dijalankan pada simulator. Hal ini menyebabkan alternatif perpustakaan runtime untuk ditautkan di mana mendukung, misalnya, file I/O. Anda tidak harus gunakan opsi ini saat membuat program yang akan berjalan di perangkat keras nyata; kamu harus menyediakan perpustakaan runtime Anda sendiri untuk fungsi I/O apa pun yang diperlukan.

-memreg=jumlah Menentukan jumlah pseudo-register berbasis memori yang digunakan GCC selama pembuatan kode. Pseudo-register ini digunakan seperti register asli, jadi ada tradeoff antara Kemampuan GCC untuk memasukkan kode ke dalam register yang tersedia, dan penalti kinerja dari menggunakan memori bukan register. Perhatikan bahwa semua modul dalam suatu program harus dikompilasi dengan nilai yang sama untuk opsi ini. Karena itu, kamu tidak boleh menggunakan ini opsi dengan pustaka runtime default GCC.

M32R/D Opsi

Ini -m opsi ditentukan untuk arsitektur Renesas M32R/D:

-m32r2 Buat kode untuk M32R/2.

-m32rx Buat kode untuk M32R/X.

-m32r Buat kode untuk M32R. Ini adalah default.

-mmodel=kecil Asumsikan semua objek tinggal di memori 16MB yang lebih rendah (sehingga alamatnya dapat: dimuat dengan instruksi "ld24"), dan menganggap semua subrutin dapat dijangkau dengan instruksi "bl". Ini adalah default.

Addressability dari objek tertentu dapat diatur dengan atribut "model".

-mmodel=sedang Asumsikan objek mungkin berada di mana saja di ruang alamat 32-bit (kompiler menghasilkan instruksi "seth/add3" untuk memuat alamat mereka), dan menganggap semua subrutin adalah dapat dicapai dengan instruksi "bl".

-mmodel=besar Asumsikan objek mungkin berada di mana saja di ruang alamat 32-bit (kompiler menghasilkan instruksi "seth/add3" untuk memuat alamat mereka), dan menganggap subrutin mungkin tidak dapat dijangkau dengan instruksi "bl" (kompiler menghasilkan yang jauh lebih lambat urutan instruksi "seth/add3/jl").

-msdata=tidak ada Nonaktifkan penggunaan area data kecil. Variabel dimasukkan ke dalam salah satu ".data", ".bss", atau ".rodata" (kecuali atribut "bagian" telah ditentukan). Ini adalah default.

Area data kecil terdiri dari bagian ".sdata" dan ".sbss". Objek mungkin secara eksplisit dimasukkan ke dalam area data kecil dengan atribut "bagian" menggunakan salah satu dari ini bagian.

-msdata=sdata Letakkan data global dan statis kecil di area data kecil, tetapi jangan menghasilkan khusus kode untuk referensi mereka.

-msdata=gunakan Letakkan data global dan statis kecil di area data kecil, dan hasilkan khusus petunjuk untuk merujuknya.

-G num Letakkan objek global dan statis kurang dari atau sama dengan num byte ke dalam data kecil atau Bagian BSS bukan data normal atau bagian BSS. Nilai default dari num is 8. Itu -msdata opsi harus disetel ke salah satu dari sdata or menggunakan agar opsi ini memiliki efek.

Semua modul harus dikompilasi dengan yang sama -G num nilai. Kompilasi dengan yang berbeda nilai dari num mungkin atau mungkin tidak bekerja; jika tidak linker memberikan kesalahan pesan --- kode yang salah tidak dihasilkan.

-mdebug Membuat kode khusus M32R di kompiler menampilkan beberapa statistik yang mungkin membantu dalam program debug.

-malign-loop Sejajarkan semua loop ke batas 32-byte.

-mno-align-loop Jangan memaksakan penyelarasan 32-byte untuk loop. Ini adalah default.

-tingkat-masalah=jumlah Isu jumlah instruksi per siklus. jumlah hanya bisa 1 atau 2.

-biaya-cabang=jumlah jumlah hanya bisa 1 atau 2. Jika 1 maka cabang lebih disukai daripada kondisional kode, jika 2, maka berlaku sebaliknya.

-mflush-trap=jumlah Menentukan nomor perangkap yang akan digunakan untuk membersihkan cache. Standarnya adalah 12. Valid angka antara 0 dan 15 inklusif.

-mno-flush-trap Menentukan bahwa cache tidak dapat dihapus dengan menggunakan jebakan.

-mflush-fungsi=nama Menentukan nama fungsi sistem operasi yang akan dipanggil untuk membersihkan cache. NS defaultnya adalah _flush_cache, tetapi panggilan fungsi hanya digunakan jika jebakan tidak tersedia.

-mno-flush-func Menunjukkan bahwa tidak ada fungsi OS untuk membersihkan cache.

M680x0 Opsi

Ini adalah -m opsi yang ditentukan untuk prosesor M680x0 dan ColdFire. Pengaturan default bergantung pada arsitektur mana yang dipilih saat kompiler dikonfigurasi; defaultnya untuk pilihan yang paling umum diberikan di bawah ini.

-maret=lengkungan Menghasilkan kode untuk arsitektur set instruksi M680x0 atau ColdFire tertentu. Nilai yang diizinkan dari lengkungan untuk arsitektur M680x0 adalah: 68000, 68010, 68020, 68030, 68040, 68060 serta cpu32. Arsitektur ColdFire dipilih sesuai dengan Freescale's Klasifikasi ISA dan nilai yang diizinkan adalah: isaah, isaaplus, isab serta ISAC.

GCC mendefinisikan makro "__mcflengkungan__" kapan pun itu menghasilkan kode untuk ColdFire target. NS lengkungan dalam makro ini adalah salah satu -berbaris argumen yang diberikan di atas.

Ketika digunakan bersama-sama, -berbaris serta -mtune pilih kode yang berjalan pada keluarga yang serupa prosesor tetapi itu dioptimalkan untuk mikroarsitektur tertentu.

-mcpu=cpu Hasilkan kode untuk prosesor M680x0 atau ColdFire tertentu. M680x0 cpuadalah: 68000, 68010, 68020, 68030, 68040, 68060, 68302, 68332 serta cpu32. Api Dingin cpus diberikan oleh tabel di bawah ini, yang juga mengklasifikasikan CPU ke dalam keluarga:

Keluarga: -mcpu argumen 51 : 51 51ac 51ag 51cn 51em 51je 51jf 51jg 51jm 51mm 51qe 51 meter persegi 5206 : 5202 5204 5206 5206e : 5206e 5208 : 5207 5208 5211a : 5210a 5211a 5213 : 5211 5212 5213 5216 : 5214 5216 52235 : 52230 52231 52232 52233 52234 52235 5225 : 5224 5225 52259 : 52252 52254 52255 52256 52258 52259 5235 : 5232 5233 5234 5235 523x 5249 : 5249 5250 : 5250 5271 : 5270 5271 5272 : 5272 5275 : 5274 5275 5282 : 5280 5281 5282 528x 53017 : 53011 53012 53013 53014 53015 53016 53017 5307 : 5307 5329 : 5327 5328 5329 532x 5373 : 5372 5373 537x 5407 : 5407 5475 : 5470 5471 5472 5473 5474 5475 547x 5480 5481 5482 5483 5484 5485

-mcpu=cpu menimpa -maret=lengkungan if lengkungan kompatibel dengan cpu. Kombinasi lain dari -mcpu serta -berbaris ditolak.

GCC mendefinisikan makro "__mcf_cpu_cpu" saat ColdFire menargetkan cpu dipilih. Juga mendefinisikan "__mcf_family_keluarga", dimana nilai keluarga diberikan oleh tabel di atas.

-mtune=lagu Tune kode untuk mikroarsitektur tertentu dalam batasan yang ditetapkan oleh -berbaris serta -mcpu. Mikroarsitektur M680x0 adalah: 68000, 68010, 68020, 68030, 68040, 68060 serta cpu32. Mikroarsitektur ColdFire adalah: cfv1, cfv2, cfv3, cfv4 serta cfv4e.

Anda juga dapat menggunakan -mtune=68020-40 untuk kode yang perlu dijalankan dengan relatif baik pada 68020, 68030 dan 68040 target. -mtune=68020-60 serupa tetapi mencakup 68060 target sebagai dengan baik. Kedua opsi ini memilih keputusan penyetelan yang sama seperti -m68020-40 serta -m68020-60 masing.

GCC mendefinisikan makro "__mclengkungan" dan "__mclengkungan__" saat menyetel arsitektur 680x0 lengkungan. Ini juga mendefinisikan "mclengkungan" kecuali jika -ansi atau non-GNU -std opsi digunakan. Jika GCC disetel untuk berbagai arsitektur, seperti yang dipilih oleh -mtune=68020-40 or -mtune=68020-60, ini mendefinisikan makro untuk setiap arsitektur dalam jangkauan.

GCC juga mendefinisikan makro "__mlebih awal__" saat menyetel mikroarsitektur ColdFire lebih awal, Di mana lebih awal adalah salah satu argumen yang diberikan di atas.

-m68000 -mc68000 Hasilkan output untuk 68000. Ini adalah default ketika kompiler dikonfigurasi untuk 68000 berbasis sistem. Ini setara dengan -maret=68000.

Gunakan opsi ini untuk mikrokontroler dengan inti 68000 atau EC000, termasuk 68008, 68302, 68306, 68307, 68322, 68328 dan 68356.

-m68010 Hasilkan output untuk 68010. Ini adalah default ketika kompiler dikonfigurasi untuk 68010 berbasis sistem. Ini setara dengan -maret=68010.

-m68020 -mc68020 Hasilkan output untuk 68020. Ini adalah default ketika kompiler dikonfigurasi untuk 68020 berbasis sistem. Ini setara dengan -maret=68020.

-m68030 Hasilkan output untuk 68030. Ini adalah default ketika kompiler dikonfigurasi untuk 68030 berbasis sistem. Ini setara dengan -maret=68030.

-m68040 Hasilkan output untuk 68040. Ini adalah default ketika kompiler dikonfigurasi untuk 68040 berbasis sistem. Ini setara dengan -maret=68040.

Opsi ini menghambat penggunaan instruksi 68881/68882 yang harus ditiru oleh perangkat lunak pada 68040. Gunakan opsi ini jika 68040 Anda tidak memiliki kode untuk ditiru instruksi tersebut.

-m68060 Hasilkan output untuk 68060. Ini adalah default ketika kompiler dikonfigurasi untuk 68060 berbasis sistem. Ini setara dengan -maret=68060.

Opsi ini menghambat penggunaan instruksi 68020 dan 68881/68882 yang harus ditiru oleh perangkat lunak pada 68060. Gunakan opsi ini jika 68060 Anda tidak memiliki kode untuk meniru instruksi tersebut.

-mcpu32 Menghasilkan output untuk CPU32. Ini adalah default ketika kompiler dikonfigurasi untuk sistem berbasis CPU32. Ini setara dengan -march=cpu32.

Gunakan opsi ini untuk mikrokontroler dengan inti CPU32 atau CPU32+, termasuk 68330, 68331, 68332, 68333, 68334, 68336, 68340, 68341, 68349 dan 68360.

-m5200 Hasilkan output untuk CPU ColdFire 520X. Ini adalah default ketika kompilernya dikonfigurasi untuk sistem berbasis 520X. Ini setara dengan -mcpu=5206, dan sekarang tidak digunakan lagi untuk opsi itu.

Gunakan opsi ini untuk mikrokontroler dengan inti 5200, termasuk MCF5202, MCF5203, MCF5204 dan MCF5206.

-m5206e Hasilkan output untuk CPU ColdFire 5206e. Opsi ini sekarang tidak digunakan lagi karena setara -mcpu=5206e.

-M528X Hasilkan output untuk anggota keluarga ColdFire 528X. Pilihannya sekarang ditinggalkan demi yang setara -mcpu=528x.

-m5307 Hasilkan output untuk CPU ColdFire 5307. Opsi ini sekarang tidak digunakan lagi karena setara -mcpu=5307.

-m5407 Hasilkan output untuk CPU ColdFire 5407. Opsi ini sekarang tidak digunakan lagi karena setara -mcpu=5407.

-mcfv4e Menghasilkan output untuk keluarga CPU ColdFire V4e (misalnya 547x/548x). Ini termasuk penggunaan instruksi floating-point perangkat keras. Pilihannya setara dengan -mcpu=547x, dan sekarang ditinggalkan demi opsi itu.

-m68020-40 Hasilkan output untuk 68040, tanpa menggunakan instruksi baru apa pun. Hasil ini dalam kode yang dapat berjalan relatif efisien baik pada 68020/68881 atau 68030 atau a 68040. Kode yang dihasilkan memang menggunakan instruksi 68881 yang diemulasi pada 68040.

Pilihannya setara dengan -maret=68020 -mtune=68020-40.

-m68020-60 Hasilkan output untuk 68060, tanpa menggunakan instruksi baru apa pun. Hasil ini dalam kode yang dapat berjalan relatif efisien baik pada 68020/68881 atau 68030 atau a 68040. Kode yang dihasilkan memang menggunakan instruksi 68881 yang diemulasi pada 68060.

Pilihannya setara dengan -maret=68020 -mtune=68020-60.

-mhard-float -m68881 Menghasilkan instruksi floating-point. Ini adalah default untuk 68020 ke atas, dan untuk perangkat ColdFire yang memiliki FPU. Ini mendefinisikan makro "__HAVE_68881__" di Target M680x0 dan "__mcffpu__" pada target ColdFire.

-msoft-float Jangan membuat instruksi floating-point; gunakan panggilan perpustakaan sebagai gantinya. Ini adalah default untuk 68000, 68010, dan 68832 target. Ini juga merupakan default untuk ColdFire perangkat yang tidak memiliki FPU.

-mdiv -mno-div Hasilkan (jangan buat) instruksi pembagian dan sisa perangkat keras ColdFire. Jika -berbaris digunakan tanpa -mcpu, defaultnya adalah "on" untuk arsitektur ColdFire dan "off" untuk arsitektur M680x0. Jika tidak, default diambil dari CPU target (baik CPU default, atau yang ditentukan oleh -mcpu). Misalnya, defaultnya adalah "mati" untuk -mcpu=5206 dan "aktif" untuk -mcpu=5206e.

GCC mendefinisikan makro "__mcfhwdiv__" ketika opsi ini diaktifkan.

-short Pertimbangkan jenis "int" menjadi lebar 16 bit, seperti "short int". Selain itu, parameter diteruskan pada tumpukan juga disejajarkan dengan batas 16-bit bahkan pada target yang API-nya mengamanatkan promosi ke 32-bit.

-mno-pendek Jangan anggap tipe "int" lebarnya 16 bit. Ini adalah default.

-mnobitfield -mno-bitfield Jangan gunakan instruksi bit-field. NS -m68000, -mcpu32 serta -m5200 opsi menyiratkan -mnobitfield.

-mbitfield Gunakan instruksi bit-field. NS -m68020 pilihan menyiratkan -mbitfield. Ini default jika Anda menggunakan konfigurasi yang dirancang untuk 68020.

-mrtd Gunakan konvensi pemanggilan fungsi yang berbeda, di mana fungsi yang mengambil tetap jumlah argumen kembali dengan instruksi "rtd", yang memunculkan argumen mereka saat kembali. Ini menghemat satu instruksi di pemanggil karena tidak perlu memunculkan argumen di sana.

Konvensi pemanggilan ini tidak kompatibel dengan yang biasa digunakan di Unix, jadi Anda tidak dapat menggunakannya jika Anda perlu memanggil pustaka yang dikompilasi dengan kompiler Unix.

Juga, Anda harus menyediakan prototipe fungsi untuk semua fungsi yang mengambil variabel jumlah argumen (termasuk "printf"); jika tidak, kode yang salah dihasilkan untuk panggilan ke fungsi-fungsi tersebut.

Selain itu, hasil kode yang sangat salah jika Anda memanggil fungsi dengan terlalu banyak argumen. (Biasanya, argumen tambahan diabaikan tanpa bahaya.)

Instruksi "rtd" didukung oleh 68010, 68020, 68030, 68040, 68060 dan CPU32 prosesor, tetapi tidak dengan 68000 atau 5200.

-mno-rtd Jangan gunakan konvensi panggilan yang dipilih oleh -mrtd. Ini adalah default.

-malign-int -mno-align-int Kontrol apakah GCC menyelaraskan "int", "long", "long long", "float", "double", dan "long ganda" variabel pada batas 32-bit (-malign-int) atau batas 16-bit (-mno-align-int). Menyelaraskan variabel pada batas 32-bit menghasilkan kode yang berjalan agak lebih cepat pada prosesor dengan bus 32-bit dengan mengorbankan lebih banyak memori.

Peringatan: jika Anda menggunakan -malign-int switch, GCC menyelaraskan struktur yang berisi di atas jenis yang berbeda dari spesifikasi antarmuka biner aplikasi yang paling dipublikasikan untuk m68k.

-mpcrel Gunakan mode pengalamatan relatif pc dari 68000 secara langsung, daripada menggunakan global meja offset. Saat ini, opsi ini menyiratkan -fpic, memungkinkan paling banyak offset 16-bit untuk pengalamatan relatif pc. -fPIC saat ini tidak didukung dengan -mpcrel, Meskipun ini dapat didukung untuk 68020 dan prosesor yang lebih tinggi.

-mno-strict-align -mtrict-align Jangan (jangan) berasumsi bahwa referensi memori yang tidak selaras ditangani oleh sistem.

-msep-data Hasilkan kode yang memungkinkan segmen data ditempatkan di area memori yang berbeda dari segmen teks. Ini memungkinkan untuk dieksekusi di tempat di lingkungan tanpa manajemen memori virtual. Opsi ini menyiratkan -fPIC.

-mno-sep-data Buat kode yang mengasumsikan bahwa segmen data mengikuti segmen teks. Ini adalah default.

-perpustakaan bersama-pertengahan Buat kode yang mendukung pustaka bersama melalui metode ID pustaka. Ini memungkinkan untuk mengeksekusi-in-place dan shared library di lingkungan tanpa memori virtual pengelolaan. Opsi ini menyiratkan -fPIC.

-mno-id-shared-library Buat kode yang tidak menganggap pustaka bersama berbasis ID sedang digunakan. Ini adalah default.

-mshared-library-id=n Menentukan nomor identifikasi perpustakaan bersama berbasis ID yang sedang dikompilasi. Menentukan nilai 0 menghasilkan kode yang lebih ringkas; menentukan kekuatan nilai lain alokasi nomor itu ke perpustakaan saat ini, tetapi tidak ada lagi ruang atau waktu efisien daripada menghilangkan opsi ini.

-mxgot -mno-xgot Saat membuat kode posisi-independen untuk ColdFire, buat kode yang berfungsi jika GOT memiliki lebih dari 8192 entri. Kode ini lebih besar dan lebih lambat dari kode dihasilkan tanpa opsi ini. Pada prosesor M680x0, opsi ini tidak diperlukan; -fPIC cukup.

GCC biasanya menggunakan satu instruksi untuk memuat nilai dari GOT. Sementara ini relatif efisien, hanya berfungsi jika GOT lebih kecil dari sekitar 64k. Apa pun lebih besar menyebabkan penaut melaporkan kesalahan seperti:

relokasi dipotong agar sesuai: R_68K_GOT16O foobar

Jika ini terjadi, Anda harus mengkompilasi ulang kode Anda dengan -mxgot. Itu kemudian harus bekerja dengan GOT yang sangat besar. Namun, kode yang dihasilkan dengan -mxgot kurang efisien, karena mengambil 4 instruksi untuk mengambil nilai simbol global.

Perhatikan bahwa beberapa penaut, termasuk penaut GNU versi terbaru, dapat membuat beberapa GOT dan urutkan entri GOT. Jika Anda memiliki tautan seperti itu, Anda hanya perlu untuk menggunakan -mxgot saat mengkompilasi file objek tunggal yang mengakses lebih dari 8192 GOT entri. Sangat sedikit yang melakukannya.

Opsi ini tidak berpengaruh kecuali GCC menghasilkan kode posisi-independen.

MCCore Opsi

Ini adalah -m opsi yang ditentukan untuk prosesor Motorola M*Core.

-mhardlit -mno-hardlit Konstanta sebaris ke dalam aliran kode jika dapat dilakukan dalam dua instruksi atau kurang.

-mdiv -mno-div Gunakan instruksi pembagian. (Diaktifkan secara default).

-mrelax-segera -mno-santai-segera Izinkan segera berukuran sewenang-wenang dalam operasi bit.

-mwide-bitfields -mno-wide-bitfields Selalu perlakukan bidang bit sebagai ukuran "int".

-m4byte-fungsi -mno-4byte-fungsi Paksa semua fungsi untuk disejajarkan dengan batas 4-byte.

-mcallgraph-data -mno-callgraph-data Memancarkan informasi callgraph.

-mslow-byte -mno-slow-byte Lebih suka akses kata saat membaca jumlah byte.

-mlittle-endian -mbig-endian Hasilkan kode untuk target little-endian.

-m210 -m340 Hasilkan kode untuk prosesor 210.

-mno-lsim Asumsikan bahwa dukungan runtime telah disediakan dan hilangkan perpustakaan simulator (libsim.a) dari baris perintah tautan.

-mstack-increment=ukuran Tetapkan jumlah maksimum untuk operasi kenaikan tumpukan tunggal. Nilai besar bisa meningkatkan kecepatan program yang berisi fungsi yang membutuhkan sejumlah besar ruang tumpukan, tetapi mereka juga dapat memicu kesalahan segmentasi jika tumpukan diperpanjang terlalu banyak. Nilai defaultnya adalah 0x1000.

saya Opsi

-mabsdiff Mengaktifkan instruksi "abs", yang merupakan perbedaan mutlak antara dua register.

-mall-opts Mengaktifkan semua instruksi opsional --- operasi rata-rata, perkalian, pembagian, bit, nol di depan, selisih mutlak, min/maks, klip, dan saturasi.

-rata-rata Mengaktifkan instruksi "ave", yang menghitung rata-rata dua register.

-berbasis=n Variabel ukuran n byte atau lebih kecil ditempatkan di bagian ".based" secara default. Variabel berbasis menggunakan register $tp sebagai register dasar, dan ada batas 128-byte ke bagian ".based".

-mbitop Mengaktifkan instruksi operasi bit---tes bit ("btstm"), set ("bsetm"), hapus ("bclrm"), invert ("bnotm"), dan test-and-set ("tas").

-mc=nama Memilih bagian mana data konstan ditempatkan. nama mungkin mungil, dekat, atau jauh.

-mclip Mengaktifkan instruksi "klip". Perhatikan bahwa -mclip tidak berguna kecuali Anda juga memberikan -mminmax.

-mconfig=nama Memilih salah satu konfigurasi inti bawaan. Setiap chip MeP memiliki satu atau lebih modul di dalamnya; setiap modul memiliki CPU inti dan berbagai koprosesor, opsional instruksi, dan periferal. Alat "MeP-Integrator", bukan bagian dari GCC, menyediakan konfigurasi ini melalui opsi ini; menggunakan opsi ini sama dengan menggunakan semua opsi baris perintah yang sesuai. Konfigurasi defaultnya adalah kegagalan.

-mcop Mengaktifkan instruksi koprosesor. Secara default, ini adalah koprosesor 32-bit. Catatan bahwa koprosesor biasanya diaktifkan melalui -mconfig= .

-mcop32 Mengaktifkan instruksi koprosesor 32-bit.

-mcop64 Mengaktifkan instruksi koprosesor 64-bit.

-mivc2 Mengaktifkan penjadwalan IVC2. IVC2 adalah koprosesor VLIW 64-bit.

-mdc Menyebabkan variabel konstan ditempatkan di bagian ".near".

-mdiv Mengaktifkan instruksi "div" dan "divu".

-meb Hasilkan kode big-endian.

-mel Hasilkan kode little-endian.

-mio-volatil Memberi tahu kompiler bahwa variabel apa pun yang ditandai dengan atribut "io" harus menjadi dianggap fluktuatif.

-ml Menyebabkan variabel ditetapkan ke bagian ".far" secara default.

-mleadz Mengaktifkan instruksi "leadz" (nol awal).

-mm Menyebabkan variabel ditetapkan ke bagian ".near" secara default.

-mminmax Mengaktifkan instruksi "min" dan "maks".

-banyak Mengaktifkan instruksi perkalian dan akumulasi-akumulasi.

-mno-memilih Menonaktifkan semua instruksi opsional yang diaktifkan oleh -mall-opts.

-ulangi Mengaktifkan instruksi "repeat" dan "erepeat", yang digunakan untuk perulangan low-overhead.

-MS Menyebabkan semua variabel menjadi default ke bagian ".tiny". Perhatikan bahwa ada Batas 65536-byte untuk bagian ini. Akses ke variabel ini menggunakan basis %gp mendaftar.

-matur Mengaktifkan instruksi saturasi. Perhatikan bahwa kompiler saat ini tidak menghasilkan ini sendiri, tetapi opsi ini disertakan untuk kompatibilitas dengan alat lain, seperti".

-msdram Tautkan runtime berbasis SDRAM alih-alih runtime berbasis ROM default.

-msim Tautkan perpustakaan run-time simulator.

-msimnovec Tautkan perpustakaan runtime simulator, tidak termasuk dukungan bawaan untuk reset dan pengecualian vektor dan tabel.

-mtf Menyebabkan semua fungsi default ke bagian ".far". Tanpa opsi ini, fungsi default ke bagian ".near".

-mtiny=n Variabel yang n byte atau lebih kecil dialokasikan ke bagian ".tiny". Ini variabel menggunakan register dasar $gp. Default untuk opsi ini adalah 4, tetapi perhatikan bahwa ada batas 65536-byte untuk bagian ".tiny".

Microblaze Opsi

-msoft-float Gunakan emulasi perangkat lunak untuk floating point (default).

-mhard-float Gunakan instruksi floating-point perangkat keras.

-mmemcpy Jangan optimalkan gerakan blok, gunakan "memcpy".

-mno-clearbss Opsi ini tidak digunakan lagi. Menggunakan -fno-nol-diinisialisasi-dalam-bss sebagai gantinya.

-mcpu=tipe cpu Gunakan fitur dan kode jadwal untuk CPU yang diberikan. Nilai yang didukung ada di format vX.YY.Z, Di mana X adalah versi utama, YY adalah versi minor, dan Z is kode kompatibilitas. Contoh nilai adalah v3.00.a, v4.00.b, v5.00.a, v5.00.b, v5.00.b, v6.00.a.

-mxl-soft-mul Gunakan software multiplikasi emulasi (default).

-mxl-soft-div Gunakan emulasi perangkat lunak untuk pembagian (default).

-mxl-barrel-shift Gunakan shifter barel perangkat keras.

-mxl-pola-bandingkan Gunakan instruksi perbandingan pola.

-msmall-membagi Gunakan pengoptimalan pencarian tabel untuk pembagian bilangan bulat bertanda tangan kecil.

-mxl-tumpukan-periksa Opsi ini tidak digunakan lagi. Menggunakan -fstack-periksa sebagai gantinya.

-mxl-gp-opt Gunakan bagian ".sdata"/".sbss" relatif GP.

-mxl-kalikan-tinggi Gunakan instruksi perkalian tinggi untuk bagian tinggi perkalian 32x32.

-mxl-float-convert Gunakan instruksi konversi floating-point perangkat keras.

-mxl-float-sqrt Gunakan instruksi akar kuadrat floating-point perangkat keras.

-mbig-endian Hasilkan kode untuk target big-endian.

-mlittle-endian Hasilkan kode untuk target little-endian.

-mxl-menyusun ulang Gunakan instruksi pemesanan ulang (swap dan byte terbalik memuat/menyimpan).

-mxl-mode-model aplikasi Pilih model aplikasi model aplikasi. Model yang valid adalah

executable executable normal (default), menggunakan kode startup crt0.o.

xmdstub untuk digunakan dengan debug intrusi perangkat lunak berbasis Xilinx Microprocessor Debugger (XMD) agen yang disebut xmdstub. Ini menggunakan file startup crt1.o dan menetapkan alamat awal dari program ke 0x800.

bootstrap untuk aplikasi yang dimuat menggunakan bootloader. Model ini menggunakan file startup crt2.o yang tidak mengandung pengendali vektor reset prosesor. Ini cocok untuk mentransfer kontrol pada reset prosesor ke bootloader daripada aplikasi.

pemula untuk aplikasi yang tidak memerlukan salah satu vektor MicroBlaze. Pilihan ini mungkin berguna untuk aplikasi yang berjalan dalam aplikasi pemantauan. Model ini kegunaan crt3.o sebagai file pembuka.

pilihan -xl-mode-model aplikasi adalah alias yang tidak digunakan lagi untuk -mxl-mode-model aplikasi.

MIPS Opsi

-EB Hasilkan kode big-endian.

-ITU Hasilkan kode little-endian. Ini adalah default untuk mips*el-*-* Konfigurasi.

-maret=lengkungan Hasilkan kode yang berjalan pada lengkungan, yang dapat berupa nama ISA MIPS generik, atau nama prosesor tertentu. Nama-nama ISA adalah: mips1, mips2, mips3, mips4, mips32, mips32r2, mips32r3, mips32r5, mips32r6, mips64, mips64r2, mips64r3, mips64r5 serta mips64r6. Nama-nama prosesor adalah: 4kc, 4km, 4kp, 4ksc, 4kec, 4kem, 4kep, 4ksd, 5kc, 5kf, 20kc, 24kc, 24kf2_1, 24kf1_1, 24kec, 24kef2_1, 24kef1_1, 34kc, 34kf2_1, 34kf1_1, 34kn, 74kc, 74kf2_1, 74kf1_1, 74kf3_2, 1004kc, 1004kf2_1, 1004kf1_1, loongson2e, loongson2f, loongson3a, M4K, M14K, m14kc, m14ke, m14kec, okteon, okteon+, okteon2, okteon3, orion, p5600, r2000, r3000, r3900, r4000, r4400, r4600, r4650, r4700, r6000, r8000, rm7000, rm9000, r10000, r12000, r14000, r16000, sb1, sr71000, vr4100, vr4111, vr4120, vr4130, vr4300, vr5000, vr5400, vr5500, xlr serta xlp. itu nilai khusus dari-abi memilih arsitektur yang paling kompatibel untuk ABI yang dipilih (itu adalah, mips1 untuk ABI 32-bit dan mips3 untuk ABI 64-bit).

Rantai alat Linux/GNU asli juga mendukung nilai asli, yang memilih yang terbaik pilihan arsitektur untuk prosesor host. -maret=asli tidak berpengaruh jika GCC tidak tidak mengenali prosesor.

Dalam nama prosesor, final 000 dapat disingkat k (sebagai contoh, -maret=r2k). Awalan bersifat opsional, dan vr dapat ditulis r.

Nama-nama formulir nf2_1 merujuk ke prosesor dengan FPU yang memiliki kecepatan setengah dari inti, nama formulir nf1_1 merujuk ke prosesor dengan FPU yang di-clock pada kecepatan yang sama sebagai inti, dan nama bentuk nf3_2 lihat prosesor dengan rasio clock FPU dari 3:2 sehubungan dengan inti. Untuk alasan kompatibilitas, nf diterima sebagai sinonim untuk nf2_1 sementara nx serta bfx diterima sebagai sinonim untuk nf1_1.

GCC mendefinisikan dua makro berdasarkan nilai opsi ini. Yang pertama adalah "_MIPS_ARCH", yang memberi nama arsitektur target, sebagai string. Yang kedua memiliki bentuk "_MIPS_ARCH_foo", Di mana foo adalah nilai kapital dari "_MIPS_ARCH". Sebagai contoh, -maret=r2000 set "_MIPS_ARCH" ke "r2000" dan mendefinisikan makro "_MIPS_ARCH_R2000".

Perhatikan bahwa makro "_MIPS_ARCH" menggunakan nama prosesor yang diberikan di atas. Di lain kata, ia memiliki awalan penuh dan tidak menyingkat 000 as k. Dalam kasus dari- abi, makro menamai arsitektur yang diselesaikan (baik "mips1" atau "mips3"). Itu namanya arsitektur default ketika tidak ada -berbaris pilihan diberikan.

-mtune=lengkungan Optimalkan untuk lengkungan. Antara lain, opsi ini mengontrol cara instruksi dijadwalkan, dan biaya yang dirasakan dari operasi aritmatika. Daftar dari lengkungan nilai-nilai sama seperti untuk -berbaris.

Jika opsi ini tidak digunakan, GCC akan mengoptimalkan prosesor yang ditentukan oleh -berbaris. Oleh menggunakan -berbaris serta -mtune bersama-sama, dimungkinkan untuk menghasilkan kode yang berjalan pada a keluarga prosesor, tetapi mengoptimalkan kode untuk satu anggota keluarga tertentu.

-mtune mendefinisikan makro "_MIPS_TUNE" dan "_MIPS_TUNE_foo", yang bekerja sama cara sebagai -berbaris yang dijelaskan di atas.

-mips1 Setara dengan -maret=mips1.

-mips2 Setara dengan -maret=mips2.

-mips3 Setara dengan -maret=mips3.

-mips4 Setara dengan -maret=mips4.

-mips32 Setara dengan -maret=mips32.

-mips32r3 Setara dengan -march=mips32r3.

-mips32r5 Setara dengan -march=mips32r5.

-mips32r6 Setara dengan -march=mips32r6.

-mips64 Setara dengan -maret=mips64.

-mips64r2 Setara dengan -march=mips64r2.

-mips64r3 Setara dengan -march=mips64r3.

-mips64r5 Setara dengan -march=mips64r5.

-mips64r6 Setara dengan -march=mips64r6.

-mips16 -mno-mips16 Hasilkan (jangan buat) kode MIPS16. Jika GCC menargetkan MIPS32 atau MIPS64 arsitektur, itu memanfaatkan ASE MIPS16e.

Pembuatan kode MIPS16 juga dapat dikontrol per fungsi dengan cara: atribut "mips16" dan "nomips16".

-mflip-mips16 Hasilkan kode MIPS16 pada fungsi bergantian. Opsi ini disediakan untuk regresi pengujian pembuatan kode campuran MIPS16/non-MIPS16, dan tidak dimaksudkan untuk biasa digunakan dalam mengkompilasi kode pengguna.

-minterlink-dikompresi -mno-interlink-dikompresi Mengharuskan (tidak memerlukan) kode yang menggunakan standar (tidak terkompresi) MIPS ISA menjadi tautan- kompatibel dengan kode MIPS16 dan microMIPS, dan sebaliknya.

Misalnya, kode yang menggunakan penyandian ISA standar tidak dapat langsung melompat ke MIPS16 atau kode mikroMIPS; itu harus menggunakan panggilan atau lompatan tidak langsung. -minterlink-dikompresi oleh karena itu menonaktifkan lompatan langsung kecuali GCC mengetahui bahwa target lompatan tidak dikompresi.

-minterlink-mips16 -mno-interlink-mips16 Alias ​​​​dari -minterlink-dikompresi serta -mno-interlink-dikompresi. Pilihan ini mendahului ASE microMIPS dan dipertahankan untuk kompatibilitas mundur.

-mabi=32 -mabi=o64 -mabi=n32 -mabi=64 -mabi=eabi Buat kode untuk ABI yang diberikan.

Perhatikan bahwa EABI memiliki varian 32-bit dan 64-bit. GCC biasanya menghasilkan 64-bit kode ketika Anda memilih arsitektur 64-bit, tetapi Anda dapat menggunakan -mgp32 untuk mendapatkan kode 32-bit sebagai gantinya.

Untuk informasi tentang O64 ABI, lihathttp://gcc.gnu.org/projects/mipso64-abi.html>.

GCC mendukung varian dari o32 ABI di mana register floating-point 64 lebih dari 32 bit lebar. Anda dapat memilih kombinasi ini dengan -mabi=32 -mfp64. ABI ini bergantung pada instruksi "mthc1" dan "mfhc1" dan karena itu hanya didukung untuk Prosesor MIPS32R2, MIPS32R3 dan MIPS32R5.

Penugasan register untuk argumen dan nilai kembalian tetap sama, tetapi masing-masing nilai skalar dilewatkan dalam register 64-bit tunggal daripada sepasang 32-bit mendaftar. Misalnya, nilai titik-mengambang skalar dikembalikan dalam $f0 hanya, bukan $f0/$f1 pasangan. Himpunan register yang disimpan panggilan juga tetap sama dalam hal register presisi ganda bernomor disimpan.

Dua varian tambahan dari o32 ABI didukung untuk memungkinkan transisi dari register 32-bit hingga 64-bit. Ini adalah FPXX (-mfpxx) dan FP64A (-mfp64 -mno-ganjil-spreg). Ekstensi FPXX mengamanatkan bahwa semua kode harus dijalankan dengan benar saat dijalankan menggunakan register 32-bit atau 64-bit. Kode dapat dihubungkan dengan keduanya FP32 atau FP64, tetapi tidak keduanya. Ekstensi FP64A mirip dengan ekstensi FP64 tetapi melarang penggunaan register presisi tunggal bernomor ganjil. Ini dapat digunakan dalam hubungannya dengan mode "FRE" FPU di prosesor MIPS32R5 dan memungkinkan kedua FP32 dan kode FP64A untuk saling terhubung dan berjalan dalam proses yang sama tanpa mengubah mode FPU.

-mabicall -mno-abicall Hasilkan (jangan buat) kode yang cocok untuk objek dinamis bergaya SVR4. -mabicall adalah default untuk sistem berbasis SVR4.

-mshared -mno-dibagikan Hasilkan (jangan buat) kode yang sepenuhnya independen terhadap posisi, dan yang dapat oleh karena itu ditautkan ke perpustakaan bersama. Opsi ini hanya memengaruhi -mabicall.

Semua -mabicall kode secara tradisional independen posisi, terlepas dari opsi seperti -fPIC serta -fpic. Namun, sebagai ekstensi, toolchain GNU memungkinkan executable untuk menggunakan akses absolut untuk simbol yang mengikat secara lokal. Itu juga dapat menggunakan GP yang lebih pendek urutan inisialisasi dan menghasilkan panggilan langsung ke fungsi yang ditentukan secara lokal. Ini mode dipilih oleh -mno-dibagikan.

-mno-dibagikan tergantung pada binutils 2.16 atau lebih tinggi dan menghasilkan objek yang hanya dapat ditautkan oleh tautan GNU. Namun, opsi tersebut tidak memengaruhi ABI final dapat dieksekusi; itu hanya memengaruhi ABI objek yang dapat dipindahkan. Menggunakan -mno-dibagikan umumnya membuat executable lebih kecil dan lebih cepat.

-mshared adalah defaultnya.

-mplt -mno-plt Asumsikan (jangan berasumsi) bahwa penghubung statis dan dinamis mendukung PLTs dan menyalin relokasi. Opsi ini hanya memengaruhi -mno-dibagikan -mabicall. Untuk n64 ABI, ini pilihan tidak berpengaruh tanpa -msym32.

Anda Dapat Membuat -mplt default dengan mengonfigurasi GCC dengan --with-mips-plt. Default is -mno-plt jika tidak.

-mxgot -mno-xgot Angkat (jangan angkat) batasan biasa pada ukuran tabel offset global.

GCC biasanya menggunakan satu instruksi untuk memuat nilai dari GOT. Sementara ini relatif efisien, hanya berfungsi jika GOT lebih kecil dari sekitar 64k. Apa pun lebih besar menyebabkan penaut melaporkan kesalahan seperti:

relokasi dipotong agar sesuai: R_MIPS_GOT16 foobar

Jika ini terjadi, Anda harus mengkompilasi ulang kode Anda dengan -mxgot. Ini bekerja dengan sangat GOT besar, meskipun kodenya juga kurang efisien, karena membutuhkan tiga instruksi untuk mengambil nilai simbol global.

Perhatikan bahwa beberapa penaut dapat membuat beberapa GOT. Jika Anda memiliki tautan seperti itu, Anda hanya perlu menggunakan -mxgot ketika satu file objek mengakses lebih dari 64k senilai entri GOT. Sangat sedikit yang melakukannya.

Opsi ini tidak berpengaruh kecuali GCC menghasilkan kode independen posisi.

-mgp32 Asumsikan bahwa register tujuan umum lebarnya 32 bit.

-mgp64 Asumsikan bahwa register tujuan umum lebarnya 64 bit.

-mfp32 Asumsikan bahwa register floating-point lebarnya 32 bit.

-mfp64 Asumsikan bahwa register floating-point lebarnya 64 bit.

-mfpxx Jangan menganggap lebar register floating-point.

-mhard-float Gunakan instruksi koprosesor floating-point.

-msoft-float Jangan gunakan instruksi koprosesor floating-point. Menerapkan floating-point perhitungan menggunakan panggilan perpustakaan sebagai gantinya.

-mno-float Setara dengan -msoft-float, tetapi juga menegaskan bahwa program sedang dikompilasi tidak melakukan operasi floating-point. Opsi ini saat ini didukung hanya dengan beberapa konfigurasi MIPS bare-metal, di mana ia dapat memilih satu set khusus perpustakaan yang tidak memiliki semua dukungan floating-point (termasuk, misalnya, floating- titik format "printf"). Jika kode dikompilasi dengan -mno-float secara tidak sengaja mengandung operasi floating-point, kemungkinan akan mengalami kegagalan link-time atau run-time.

-mengambang tunggal Asumsikan bahwa koprosesor titik-mengambang hanya mendukung operasi presisi tunggal.

-mdouble-float Asumsikan bahwa koprosesor titik-mengambang mendukung operasi presisi ganda. Ini adalah defaultnya.

-mod-spreg -mno-ganjil-spreg Aktifkan penggunaan register titik-mengambang presisi tunggal bernomor ganjil untuk o32 ABI. Ini adalah default untuk prosesor yang diketahui mendukung register ini. Saat menggunakan o32 FPXX ABI, -mno-ganjil-spreg diatur secara default.

-mab=2008 -mabs=warisan Opsi ini mengontrol perlakuan khusus not-a-number (NaN) IEEE 754 data floating-point dengan "abs.fmt" dan "neg.fmt" instruksi mesin.

Secara default atau kapan -mabs=warisan digunakan pengobatan warisan dipilih. Di dalam kasus instruksi ini dianggap aritmatika dan dihindari di mana operasi yang benar diperlukan dan operan input mungkin berupa NaN. Urutan instruksi yang lebih panjang yang memanipulasi bit tanda datum floating-point secara manual digunakan sebagai gantinya kecuali itu -finite-matematika-saja pilihan juga telah ditentukan.

The -mab=2008 opsi memilih perawatan IEEE 754-2008. Dalam hal ini instruksi dianggap non-aritmatika dan karena itu beroperasi dengan benar di semua kasus, termasuk khususnya di mana operan input adalah NaN. Instruksi ini karena itu selalu digunakan untuk masing-masing operasi.

-mnan=2008 -mnan=warisan Opsi ini mengontrol pengkodean khusus not-a-number (NaN) IEEE 754 data titik-mengambang.

The -mnan=warisan opsi memilih pengkodean lama. Dalam hal ini silent NaNs (qNaNs) dilambangkan dengan bit pertama dari trailing significand fieldnya adalah 0, sedangkan pensinyalan NaNs (sNaNs) dilambangkan dengan bit pertama dari signifikansi belakangnya bidang menjadi 1.

The -mnan=2008 opsi memilih pengkodean IEEE 754-2008. Dalam hal ini qNaN adalah dilambangkan dengan bit pertama dari trailing significand fieldnya adalah 1, sedangkan sNaNs dilambangkan dengan bit pertama dari trailing significand fieldnya menjadi 0.

Standarnya adalah -mnan=warisan kecuali GCC telah dikonfigurasi dengan --dengan-nan=2008.

-mllsc -mno-llsc Gunakan (jangan gunakan) ll, sc, dan sinkronisasi instruksi untuk mengimplementasikan memori atom built-in fungsi. Ketika tidak ada opsi yang ditentukan, GCC menggunakan instruksi jika target arsitektur mendukung mereka.

-mllsc berguna jika lingkungan runtime dapat meniru instruksi dan -mno-llsc dapat berguna saat kompilasi untuk ISA tidak standar. Anda dapat membuat salah satu opsi default dengan mengonfigurasi GCC dengan --with-llsc serta --tanpa-llsc masing. --with-llsc adalah default untuk beberapa konfigurasi; lihat dokumentasi instalasi untuk rincian.

-mdsp -mno-dsp Gunakan (jangan gunakan) revisi 1 dari MIPS DSP ASE. Opsi ini mendefinisikan makro praprosesor "__mips_dsp". Ini juga mendefinisikan "__mips_dsp_rev" ke 1.

-mdspr2 -mno-dspr2 Gunakan (jangan gunakan) revisi 2 dari MIPS DSP ASE. Opsi ini mendefinisikan makro praprosesor "__mips_dsp" dan "__mips_dspr2". Dia juga mendefinisikan "__mips_dsp_rev" menjadi 2.

-msmartmips -mno-smartmips Gunakan (jangan gunakan) MIPS SmartMIPS ASE.

-pasangan-tunggal -mno-berpasangan-tunggal Gunakan (jangan gunakan) instruksi floating-point berpasangan-tunggal. Opsi ini memerlukan dukungan titik-mengambang perangkat keras untuk diaktifkan.

-mdmx -mno-mdmx Gunakan (jangan gunakan) instruksi MIPS Digital Media Extension. Opsi ini hanya dapat digunakan saat membuat kode 64-bit dan memerlukan dukungan titik-mengambang perangkat keras agar diaktifkan.

-mips3d -mno-mips3d Gunakan (jangan gunakan) ASE MIPS-3D. Pilihan -mips3d menyiratkan -pasangan-tunggal.

-mmicromips -mno-micromips Hasilkan (jangan buat) kode microMIPS.

Pembuatan kode MicroMIPS juga dapat dikontrol berdasarkan fungsi per fungsi dengan cara: atribut "micromips" dan "nomicromips".

-mmt -mno-mt Gunakan (jangan gunakan) instruksi MT Multithreading.

-mmcu -mno-mcu Gunakan (jangan gunakan) instruksi MIPS MCU ASE.

-meva -mno-eva Gunakan (jangan gunakan) instruksi MIPS Enhanced Virtual Addressing.

-mvirt -mno-virt Gunakan (jangan gunakan) instruksi Khusus Aplikasi Virtualisasi MIPS.

-mxpa -mno-xpa Gunakan (jangan gunakan) instruksi MIPS eXtended Physical Address (XPA).

-mlong64 Paksa tipe "panjang" menjadi lebar 64 bit. Lihat -mlong32 untuk penjelasan tentang default dan cara ukuran pointer ditentukan.

-mlong32 Paksa "panjang", "int", dan jenis pointer menjadi lebar 32 bit.

Ukuran default "int", "long" dan pointer tergantung pada ABI. Semua ABI yang didukung menggunakan "int" 32-bit. n64 ABI menggunakan 64-bit "panjang", seperti halnya 64-bit EABI; yang lain menggunakan "panjang" 32-bit. Pointer berukuran sama dengan "panjang", atau ukuran yang sama dengan register integer, mana yang lebih kecil.

-msym32 -mno-sym32 Asumsikan (jangan berasumsi) bahwa semua simbol memiliki nilai 32-bit, terlepas dari yang dipilih ABI. Opsi ini berguna dalam kombinasi dengan -mabi=64 serta -mno-abicall karena memungkinkan GCC untuk menghasilkan referensi yang lebih pendek dan lebih cepat ke alamat simbolik.

-G num Letakkan definisi data yang terlihat secara eksternal di bagian data kecil jika data itu tidak ada lebih besar dari num byte. GCC kemudian dapat menghasilkan akses yang lebih efisien ke data; Lihat -mgpopt untuk rincian.

Defaultnya -G pilihan tergantung pada konfigurasi.

-mlocal-sdata -mno-local-sdata Perpanjang (jangan perpanjang) -G perilaku ke data lokal juga, seperti variabel statis di C -mlocal-sdata adalah default untuk semua konfigurasi.

Jika penaut mengeluh bahwa aplikasi menggunakan terlalu banyak data kecil, Anda mungkin ingin mencoba membangun kembali bagian yang kurang kritis kinerjanya dengan -mno-local-sdata. Anda mungkin juga ingin membangun perpustakaan besar dengan -mno-local-sdata, sehingga perpustakaan meninggalkan lebih banyak ruang untuk program utama.

-mextern-sdata -mno-extern-sdata Asumsikan (jangan berasumsi) bahwa data yang ditentukan secara eksternal berada di bagian data kecil jika: ukuran data itu berada dalam -G membatasi. -mextern-sdata adalah default untuk semua Konfigurasi.

Jika Anda mengkompilasi modul Cara dengan -mextern-sdata -G num -mgpopt, dan Cara referensi dan variabel adalah itu tidak lebih besar dari num byte, Anda harus memastikan bahwa adalah ditempatkan di bagian data kecil. Jika adalah didefinisikan oleh modul lain, Anda harus mengkompilasi modul itu dengan cukup tinggi -G menyetel atau melampirkan atribut "bagian" ke adalah's definisi. Jika adalah itu biasa, Anda harus menautkan aplikasi dengan yang cukup tinggi -G pengaturan.

Cara termudah untuk memenuhi batasan ini adalah dengan mengkompilasi dan menautkan setiap modul dengan sama -G pilihan. Namun, Anda mungkin ingin membangun perpustakaan yang mendukung beberapa batasan data kecil yang berbeda. Anda dapat melakukan ini dengan mengkompilasi perpustakaan dengan dukungan tertinggi -G pengaturan dan tambahan menggunakan -mno-extern-sdata untuk menghentikan perpustakaan dari membuat asumsi tentang data yang ditentukan secara eksternal.

-mgpopt -mno-gpopt Gunakan (jangan gunakan) akses relatif GP untuk simbol yang diketahui berada dalam data kecil bagian; Lihat -G, -mlocal-sdata serta -mextern-sdata. -mgpopt adalah default untuk semua Konfigurasi.

-mno-gpopt berguna untuk kasus di mana register $gp mungkin tidak memiliki nilai "_gp". Misalnya, jika kode tersebut adalah bagian dari perpustakaan yang mungkin digunakan dalam boot monitor, program yang memanggil rutinitas monitor boot memberikan nilai yang tidak diketahui dalam $gp. (Di dalam situasi seperti itu, monitor boot itu sendiri biasanya dikompilasi dengan -G0.)

-mno-gpopt menyiratkan -mno-local-sdata serta -mno-extern-sdata.

-membedded-data -mno-embedded-data Alokasikan variabel ke bagian data read-only terlebih dahulu jika memungkinkan, lalu selanjutnya di bagian data kecil jika memungkinkan, sebaliknya dalam data. Ini memberikan kode yang sedikit lebih lambat dari default, tetapi mengurangi jumlah RAM yang dibutuhkan saat mengeksekusi, dan dengan demikian mungkin lebih disukai untuk beberapa sistem tertanam.

-muninit-const-in-rodata -mno-unit-const-in-rodata Letakkan variabel "const" yang tidak diinisialisasi di bagian data hanya-baca. Pilihan ini adalah hanya bermakna dalam hubungannya dengan -membedded-data.

-mcode-dapat dibaca=pengaturan Tentukan apakah GCC dapat menghasilkan kode yang dibaca dari bagian yang dapat dieksekusi. Ada tiga kemungkinan pengaturan:

-mcode-readable=ya Instruksi dapat dengan bebas mengakses bagian yang dapat dieksekusi. Ini adalah pengaturan default.

-mcode-readable=pcrel Instruksi beban relatif PC MIPS16 dapat mengakses bagian yang dapat dieksekusi, tetapi lainnya instruksi tidak harus melakukannya. Opsi ini berguna pada prosesor 4KSc dan 4KSd ketika kode TLB memiliki bit Read Inhibit yang disetel. Ini juga berguna pada prosesor yang dapat dikonfigurasi untuk memiliki antarmuka SRAM instruksi/data ganda dan itu, seperti M4K, secara otomatis mengalihkan beban relatif PC ke RAM instruksi.

-mcode-readable=tidak Instruksi tidak boleh mengakses bagian yang dapat dieksekusi. Opsi ini dapat berguna pada target yang dikonfigurasi untuk memiliki antarmuka SRAM instruksi/data ganda tetapi bahwa (tidak seperti M4K) tidak secara otomatis mengalihkan beban relatif PC ke RAM instruksi.

-msplit-alamat -mno-split-address Aktifkan (nonaktifkan) penggunaan operator relokasi assembler "%hi()" dan "%lo()". Ini opsi telah digantikan oleh -meksplisit-relocs tetapi dipertahankan untuk mundur kompatibilitas.

-meksplisit-relocs -mno-eksplisit-relocs Gunakan (jangan gunakan) operator relokasi assembler ketika berhadapan dengan alamat simbolik. Alternatif, dipilih oleh -mno-eksplisit-relocs, adalah menggunakan makro assembler sebagai gantinya.

-meksplisit-relocs adalah default jika GCC dikonfigurasi untuk menggunakan assembler yang mendukung operator relokasi.

-mcheck-zero-division -mno-cek-nol-divisi Perangkap (jangan jebakan) pada pembagian bilangan bulat dengan nol.

Standarnya adalah -mcheck-zero-division.

-mdivide-trap -mdivide-break Sistem MIPS memeriksa pembagian dengan nol dengan menghasilkan jebakan bersyarat atau a istirahat instruksi. Menggunakan jebakan menghasilkan kode yang lebih kecil, tetapi hanya didukung di MIPS II dan selanjutnya. Juga, beberapa versi kernel Linux memiliki bug yang mencegah jebakan dari menghasilkan sinyal yang tepat ("SIGFPE"). Menggunakan -mdivide-trap untuk memungkinkan bersyarat perangkap pada arsitektur yang mendukungnya dan -mdivide-break untuk memaksa penggunaan istirahat.

Defaultnya biasanya -mdivide-trap, tetapi ini dapat diganti pada waktu konfigurasi menggunakan --with-divide=istirahat. Pemeriksaan bagi-oleh-nol dapat sepenuhnya dinonaktifkan menggunakan -mno-cek-nol-divisi.

-mmemcpy -mno-memcpy Paksa (jangan paksa) penggunaan "memcpy" untuk gerakan blok non-sepele. Standarnya adalah -mno-memcpy, yang memungkinkan GCC menyejajarkan sebagian besar salinan berukuran konstan.

-mlong-panggilan -mno-panggilan panjang Nonaktifkan (jangan nonaktifkan) penggunaan instruksi "jal". Memanggil fungsi menggunakan "jal" lebih efisien tetapi mengharuskan penelepon dan penerima berada dalam 256 megabyte yang sama segmen.

Opsi ini tidak berpengaruh pada kode abicalls. Standarnya adalah -mno-panggilan panjang.

-mmad -mno-gila Aktifkan (nonaktifkan) penggunaan instruksi "gila", "madu" dan "mul", seperti yang disediakan oleh R4650 ISA.

-mimadd -mno-imadd Aktifkan (nonaktifkan) penggunaan instruksi bilangan bulat "madd" dan "msub". Standarnya adalah -mimadd pada arsitektur yang mendukung "madd" dan "msub" kecuali untuk 74k arsitektur di mana ditemukan untuk menghasilkan kode lebih lambat.

-mfused-madd -mno-menyatu-madd Aktifkan (nonaktifkan) penggunaan instruksi penggandaan-akumulasi titik-mengambang, ketika mereka tersedia. Standarnya adalah -mfused-madd.

Pada CPU R8000 ketika instruksi multi-akumulasi digunakan, perantara produk dihitung dengan presisi tak terbatas dan tidak tunduk pada Flush FCSR ke Nol sedikit. Ini mungkin tidak diinginkan dalam beberapa keadaan. Pada prosesor lain: hasilnya identik secara numerik dengan perhitungan yang setara menggunakan perkalian terpisah, menambah, mengurangi, dan meniadakan instruksi.

-nocpp Beri tahu assembler MIPS untuk tidak menjalankan praprosesornya di atas file assembler pengguna (dengan a .s akhiran) saat merakitnya.

-mfix-24k -mno-fix-24k Mengatasi errata 24K E48 (kehilangan data di toko saat isi ulang). Solusinya diimplementasikan oleh assembler bukan oleh GCC.

-mfix-r4000 -mno-fix-r4000 Mengatasi errata CPU R4000 tertentu:

- Sebuah kata ganda atau pergeseran variabel dapat memberikan hasil yang salah jika dieksekusi segera setelah memulai pembagian bilangan bulat.

- Sebuah kata ganda atau pergeseran variabel dapat memberikan hasil yang salah jika dieksekusi saat perkalian bilangan bulat sedang berlangsung.

- Pembagian bilangan bulat dapat memberikan hasil yang salah jika dimulai pada slot penundaan a mengambil cabang atau melompat.

-mfix-r4400 -mno-fix-r4400 Mengatasi errata CPU R4400 tertentu:

- Sebuah kata ganda atau pergeseran variabel dapat memberikan hasil yang salah jika dieksekusi segera setelah memulai pembagian bilangan bulat.

-mfix-r10000 -mno-fix-r10000 Mengatasi kesalahan R10000 tertentu:

- Urutan "ll"/"sc" mungkin tidak berperilaku atomik pada revisi sebelum 3.0. Mereka mungkin kebuntuan pada revisi 2.6 dan sebelumnya.

Opsi ini hanya dapat digunakan jika arsitektur target mendukung kemungkinan cabang petunjuk. -mfix-r10000 adalah default ketika -maret=r10000 digunakan; -mno-fix-r10000 adalah default sebaliknya.

-mfix-rm7000 -mno-fix-rm7000 Mengatasi kesalahan "dmult"/"dmultu" RM7000. Solusinya diimplementasikan oleh assembler bukan oleh GCC.

-mfix-vr4120 -mno-fix-vr4120 Mengatasi kesalahan VR4120 tertentu:

- "dmultu" tidak selalu memberikan hasil yang benar.

- "div" dan "ddiv" tidak selalu menghasilkan hasil yang benar jika salah satu operan negatif.

Solusi untuk ralat divisi bergantung pada fungsi khusus di libgcc.a. Di saat ini, fungsi-fungsi ini hanya disediakan oleh konfigurasi "mips64vr*-elf".

Kesalahan VR4120 lainnya memerlukan NOP untuk dimasukkan di antara pasangan tertentu instruksi. Kesalahan ini ditangani oleh assembler, bukan oleh GCC itu sendiri.

-mfix-vr4130 Mengatasi kesalahan VR4130 "mflo"/"mfhi". Solusinya diimplementasikan oleh assembler daripada oleh GCC, meskipun GCC menghindari penggunaan "mflo" dan "mfhi" jika VR4130 "macc", "macchi", "dmacc" dan "dmacchi" instruksi yang tersedia sebagai gantinya.

-mfix-sb1 -mno-fix-sb1 Mengatasi errata inti CPU SB-1 tertentu. (Bendera ini saat ini bekerja di sekitar SB-1 revisi 2 "F1" dan "F2" floating-point errata.)

-mr10k-cache-barrier=pengaturan Tentukan apakah GCC harus memasukkan penghalang cache untuk menghindari efek samping dari spekulasi pada prosesor R10K.

Secara umum dengan banyak prosesor, R10K mencoba memprediksi hasil dari kondisional cabang dan secara spekulatif mengeksekusi instruksi dari cabang "diambil". Nanti membatalkan instruksi ini jika hasil yang diprediksi salah. Namun, pada R10K, bahkan instruksi yang dibatalkan dapat memiliki efek samping.

Masalah ini hanya mempengaruhi penyimpanan kernel dan, tergantung pada sistem, kernel dimuat. Sebagai contoh, toko yang dieksekusi secara spekulatif dapat memuat memori target ke dalam cache dan tandai baris cache sebagai kotor, bahkan jika penyimpanan itu sendiri kemudian dibatalkan. Jika DMA operasi menulis ke area memori yang sama sebelum baris "kotor" dihapus, data cache menimpa data DMA-ed. Lihat manual prosesor R10K untuk selengkapnya deskripsi, termasuk masalah potensial lainnya.

Salah satu solusinya adalah memasukkan instruksi penghalang cache sebelum setiap akses memori yang mungkin dieksekusi secara spekulatif dan itu mungkin memiliki efek samping bahkan jika dibatalkan. -mr10k-cache-barrier=pengaturan mengontrol implementasi GCC dari solusi ini. Dia mengasumsikan bahwa akses yang dibatalkan ke byte mana pun di wilayah berikut tidak memiliki sisi efek:

1. memori yang ditempati oleh bingkai tumpukan fungsi saat ini;

2. memori yang ditempati oleh argumen tumpukan yang masuk;

3. memori yang ditempati oleh sebuah objek dengan alamat link-time-constant.

Merupakan tanggung jawab kernel untuk memastikan bahwa akses spekulatif ke wilayah ini memang aman.

Jika program input berisi deklarasi fungsi seperti:

batal foo (batal);

maka implementasi "foo" harus memungkinkan "j foo" dan "jal foo" untuk dieksekusi secara spekulatif. GCC menghormati pembatasan ini untuk fungsi yang dikompilasinya sendiri. Dia mengharapkan fungsi non-GCC (seperti kode perakitan yang ditulis tangan) untuk melakukan hal yang sama.

Opsi memiliki tiga bentuk:

-mr10k-cache-barrier=beban-penyimpanan Masukkan penghalang cache sebelum memuat atau menyimpan yang mungkin dieksekusi secara spekulatif dan itu mungkin memiliki efek samping bahkan jika dibatalkan.

-mr10k-cache-barrier=toko Masukkan penghalang cache sebelum toko yang mungkin dieksekusi secara spekulatif dan yang mungkin memiliki efek samping bahkan jika dibatalkan.

-mr10k-cache-barrier=tidak ada Nonaktifkan penyisipan penghalang cache. Ini adalah pengaturan default.

-mflush-fungsi=fungsi -mno-flush-func Menentukan fungsi yang akan dipanggil untuk membersihkan cache I dan D, atau untuk tidak memanggilnya fungsi. Jika dipanggil, fungsi harus mengambil argumen yang sama dengan yang umum "_flush_func", yaitu, alamat rentang memori tempat cache berada memerah, ukuran rentang memori, dan nomor 3 (untuk menyiram kedua cache). NS default tergantung pada target GCC yang dikonfigurasi, tetapi umumnya adalah baik "_flush_func" atau "__cpu_flush".

mbranch-biaya =num Tetapkan biaya cabang menjadi kira-kira num instruksi "sederhana". Biaya ini hanya heuristik dan tidak dijamin menghasilkan hasil yang konsisten di seluruh rilis. Sebuah nol biaya secara berlebihan memilih default, yang didasarkan pada -mtune pengaturan.

-kemungkinan cabang -mno-cabang-kemungkinan Mengaktifkan atau menonaktifkan penggunaan instruksi Kemungkinan Cabang, terlepas dari default untuk arsitektur yang dipilih. Secara default, instruksi Kemungkinan Cabang dapat dibuat jika mereka didukung oleh arsitektur yang dipilih. Pengecualian adalah untuk MIPS32 dan arsitektur dan prosesor MIPS64 yang mengimplementasikan arsitektur tersebut; untuk itu, Instruksi Cabang Kemungkinan tidak dihasilkan secara default karena MIPS32 dan Arsitektur MIPS64 secara khusus tidak lagi menggunakannya.

-mfp-pengecualian -mno-fp-pengecualian Menentukan apakah pengecualian FP diaktifkan. Ini mempengaruhi bagaimana instruksi FP dijadwalkan untuk beberapa prosesor. Standarnya adalah pengecualian FP diaktifkan.

Misalnya, pada SB-1, jika pengecualian FP dinonaktifkan, dan kami memancarkan 64-bit kode, maka kita dapat menggunakan kedua pipa FP. Jika tidak, kami hanya dapat menggunakan satu pipa FP.

-mvr4130-sejajarkan -mno-vr4130-sejajarkan Pipa VR4130 adalah superscalar dua arah, tetapi hanya dapat mengeluarkan dua instruksi bersama-sama jika yang pertama sejajar 8-byte. Saat opsi ini diaktifkan, GCC akan menyelaraskan pasang instruksi yang menurutnya harus dieksekusi secara paralel.

Opsi ini hanya berpengaruh saat mengoptimalkan VR4130. Itu biasanya membuat kode lebih cepat, tetapi dengan mengorbankan membuatnya lebih besar. Ini diaktifkan secara default di tingkat pengoptimalan -O3.

-msynci -mno-synci Aktifkan (nonaktifkan) pembuatan instruksi "synci" pada arsitektur yang mendukungnya. Instruksi "synci" (jika diaktifkan) dibuat saat "__builtin___clear_cache" adalah disusun.

Opsi ini default ke -mno-synci, tetapi default dapat diganti dengan mengonfigurasi GCC dengan --dengan-sinkronisasi.

Saat mengkompilasi kode untuk sistem prosesor tunggal, biasanya aman untuk menggunakan "synci". Namun, pada banyak sistem multi-core (SMP), itu tidak membatalkan instruksi cache pada semua inti dan dapat menyebabkan perilaku tidak terdefinisi.

-mrelax-pic-panggilan -mno-santai-pic-panggilan Cobalah untuk mengubah panggilan PIC yang biasanya dikirim melalui register $25 menjadi panggilan langsung. Ini hanya mungkin jika penaut dapat menyelesaikan tujuan pada waktu tautan dan jika tujuan berada dalam jangkauan untuk panggilan langsung.

-mrelax-pic-panggilan adalah default jika GCC dikonfigurasi untuk menggunakan assembler dan a linker yang mendukung arahan perakitan ".reloc" dan -meksplisit-relocs dalam memengaruhi. Dengan -mno-eksplisit-relocs, optimasi ini dapat dilakukan dengan assembler dan linker sendiri tanpa bantuan dari compiler.

-mmcount-ra-alamat -mno-mcount-ra-address Keluarkan (jangan pancarkan) kode yang memungkinkan "_mcount" untuk mengubah pengembalian fungsi panggilan alamat. Saat diaktifkan, opsi ini memperluas antarmuka "_mcount" biasa dengan yang baru ra-alamat parameter, yang memiliki tipe "intptr_t *" dan diteruskan ke register $12. "_mcount" kemudian dapat mengubah alamat pengirim dengan melakukan kedua hal berikut:

* Mengembalikan alamat baru di register $31.

* Menyimpan alamat baru di "*ra-alamat", Jika ra-alamat adalah nonnull.

Standarnya adalah -mno-mcount-ra-address.

MMIX Opsi

Opsi ini ditentukan untuk MMIX:

-mlibfuncs -mno-libfuncs Tentukan bahwa fungsi perpustakaan intrinsik sedang dikompilasi, meneruskan semua nilai di register, tidak peduli ukurannya.

-mepsilon -mno-epsilon Menghasilkan instruksi perbandingan floating-point yang membandingkan sehubungan dengan "rE" daftar epsilon.

-mabi=mmixware -mabi=gnu Menghasilkan kode yang melewati parameter fungsi dan mengembalikan nilai-nilai itu (dalam yang disebut function) dilihat sebagai register $0 dan lebih tinggi, berbeda dengan GNU ABI yang menggunakan global mendaftar $231 dan lebih tinggi.

-mzero-memperpanjang -mno-zero-extend Saat membaca data dari memori dalam ukuran lebih pendek dari 64 bit, gunakan (jangan gunakan) nol- memperpanjang instruksi beban secara default, daripada yang memperpanjang tanda.

-mknuthdiv -mno-knuthdiv Buatlah hasil pembagian yang menghasilkan sisa bertanda sama dengan pembaginya. Dengan defaultnya, -mno-knuthdiv, tanda sisa mengikuti tanda dividen. Kedua metode tersebut valid secara aritmatika, yang terakhir hampir secara eksklusif bekas.

-mtoplevel-simbol -mno-tingkat-atas-simbol Prepend (jangan didahului) a : ke semua simbol global, sehingga kode perakitan dapat digunakan dengan arahan perakitan "PREFIX".

-melf Hasilkan executable dalam format ELF, bukan default mmo format yang digunakan oleh itu campur aduk simulator.

-cabang-prediksi -mno-cabang-prediksi Gunakan (jangan gunakan) instruksi cabang yang mungkin, saat prediksi cabang statis menunjukkan kemungkinan cabang.

-mbase-alamat -mno-basis-alamat Hasilkan (jangan buat) kode yang menggunakan mendasarkan alamat. Menggunakan alamat dasar secara otomatis menghasilkan permintaan (ditangani oleh assembler dan linker) untuk a konstan untuk diatur dalam register global. Register digunakan untuk satu atau lebih basis permintaan alamat dalam rentang 0 hingga 255 dari nilai yang disimpan dalam register. NS umumnya mengarah ke kode pendek dan cepat, tetapi jumlah item data yang berbeda itu dapat diatasi terbatas. Ini berarti bahwa program yang menggunakan banyak data statis mungkin membutuhkan -mno-basis-alamat.

-single-exit -mno-single-exit Paksa (jangan paksa) kode yang dihasilkan untuk memiliki satu titik keluar di setiap fungsi.

MN10300 Opsi

Ini -m opsi ditentukan untuk arsitektur Matsushita MN10300:

-mmult-bug Buat kode untuk menghindari bug dalam instruksi perkalian untuk prosesor MN10300. Ini adalah default.

-mno-multi-bug Jangan membuat kode untuk menghindari bug dalam instruksi perkalian untuk MN10300 prosesor.

-mam33 Hasilkan kode menggunakan fitur khusus untuk prosesor AM33.

-mno-am33 Jangan membuat kode menggunakan fitur khusus untuk prosesor AM33. Ini adalah standar.

-mam33-2 Hasilkan kode menggunakan fitur khusus untuk prosesor AM33/2.0.

-mam34 Hasilkan kode menggunakan fitur khusus untuk prosesor AM34.

-mtune=tipe cpu Gunakan karakteristik waktu dari jenis CPU yang ditunjukkan saat menjadwalkan instruksi. Ini tidak mengubah jenis prosesor yang ditargetkan. Jenis CPU harus salah satu dari mn10300, am33, jam 33-2 malam or am34.

-mreturn-pointer-on-d0 Saat membuat fungsi yang mengembalikan pointer, kembalikan pointer di "a0" dan "d0". Jika tidak, pointer dikembalikan hanya di "a0", dan mencoba memanggil seperti itu fungsi tanpa hasil prototipe dalam kesalahan. Perhatikan bahwa opsi ini diaktifkan oleh bawaan; menggunakan -mno-return-pointer-on-d0 untuk menonaktifkannya.

-mno-crt0 Jangan tautkan di file objek inisialisasi run-time C.

-santai Tunjukkan kepada penaut bahwa ia harus melakukan umpan pengoptimalan relaksasi ke mempersingkat cabang, panggilan, dan alamat memori absolut. Opsi ini hanya memiliki efek ketika digunakan pada baris perintah untuk langkah tautan terakhir.

Opsi ini membuat debugging simbolis menjadi tidak mungkin.

-mliw Izinkan kompiler untuk menghasilkan Panjang Pengajaran Word instruksi jika targetnya adalah AM33 atau nanti. Ini adalah default. Opsi ini mendefinisikan makro praprosesor "__LIW__".

-mnoliw Jangan izinkan kompiler untuk menghasilkan Panjang Pengajaran Word instruksi. Pilihan ini mendefinisikan makro praprosesor "__NO_LIW__".

-msetlb Izinkan kompiler untuk menghasilkan SETLB serta Lcc instruksi jika targetnya adalah AM33 atau nanti. Ini adalah default. Opsi ini mendefinisikan makro praprosesor "__SETLB__".

-mnosetlb Jangan izinkan kompiler untuk menghasilkan SETLB or Lcc instruksi. Opsi ini mendefinisikan makro praprosesor "__NO_SETLB__".

Keberanian Opsi

-meb Hasilkan kode big-endian. Ini adalah default untuk keberanian-*-* Konfigurasi.

-mel Hasilkan kode little-endian.

-mmul.x Buat instruksi mul.x dan umul.x. Ini adalah default untuk moxiebox-*-* Konfigurasi.

-mno-crt0 Jangan tautkan di file objek inisialisasi run-time C.

MSP430 Opsi

Opsi ini ditentukan untuk MSP430:

-masm-hex Paksa output perakitan untuk selalu menggunakan konstanta hex. Biasanya konstanta seperti itu ditandatangani desimal, tetapi opsi ini tersedia untuk testsuite dan/atau tujuan estetika.

-mmcu= Pilih MCU yang akan ditargetkan. Ini digunakan untuk membuat simbol preprosesor C berdasarkan: nama MCU, diubah menjadi huruf besar dan pra-dan pasca-perbaikan dengan __. Ini pada gilirannya digunakan oleh msp430.h file header untuk memilih header tambahan khusus MCU file.

Opsi ini juga mengatur ISA untuk digunakan. Jika nama MCU adalah nama yang hanya diketahui mendukung 430 ISA yang dipilih, jika tidak, ISA 430X yang dipilih. A nama MCU generik dari msp430 juga dapat digunakan untuk memilih 430 ISA. Demikian pula umum msp430x Nama MCU memilih ISA 430X.

Selain itu, skrip tautan khusus MCU ditambahkan ke baris perintah tautan. NS nama skrip adalah nama MCU dengan .ld ditambahkan. Dengan demikian menentukan -mmcu=xxx on itu gcc baris perintah mendefinisikan simbol praprosesor C "__XXX__" dan menyebabkan tautan untuk mencari skrip yang disebut xxx.ld.

Opsi ini juga diteruskan ke assembler.

-mcpu= Menentukan ISA yang akan digunakan. Nilai yang diterima adalah msp430, msp430x serta msp430xv2. Ini opsi tidak digunakan lagi. NS -mmcu= pilihan harus digunakan untuk memilih ISA.

-msim Tautkan ke perpustakaan runtime simulator dan skrip tautan. Mengganti skrip apa pun yang akan dipilih oleh -mmcu= .

-mbesar Gunakan pengalamatan model besar (pointer 20-bit, "size_t" 32-bit).

-kecil Gunakan pengalamatan model kecil (pointer 16-bit, "size_t" 16-bit).

-santai Opsi ini diteruskan ke assembler dan linker, dan memungkinkan linker untuk bekerja optimasi tertentu yang tidak dapat dilakukan sampai link terakhir.

mhmult= Menjelaskan jenis perbanyakan perangkat keras yang didukung oleh target. Nilai yang diterima adalah tak satupun tanpa perbanyakan perangkat keras, 16bit untuk pengali asli 16-bit-saja yang didukung oleh MCU awal. 32bit untuk perkalian 16/32-bit yang didukung oleh MCU selanjutnya dan seri f5 untuk perkalian 16/32-bit yang didukung oleh MCU seri F5. Sebuah nilai dari mobil juga bisa diberikan. Ini memberitahu GCC untuk menyimpulkan dukungan penggandaan perangkat keras berdasarkan nama MCU disediakan oleh -mmcu pilihan. Jika tidak -mmcu opsi ditentukan kemudian 32bit perangkat keras multipel dukungan diasumsikan. mobil adalah pengaturan default.

Penggandaan perangkat keras biasanya dilakukan dengan memanggil rutin perpustakaan. Ini menghemat ruang dalam kode yang dihasilkan. Saat mengkompilasi di -O3 atau lebih tinggi namun perangkat kerasnya pengganda dipanggil sebaris. Ini menghasilkan kode yang lebih besar, tetapi lebih cepat.

Rutinitas perbanyakan perangkat keras menonaktifkan interupsi saat menjalankan dan memulihkan keadaan interupsi sebelumnya ketika mereka selesai. Ini membuatnya aman untuk digunakan di dalam penangan interupsi serta dalam kode normal.

-minrt Aktifkan penggunaan lingkungan runtime minimum - tanpa inisialisasi statis atau konstruktor. Ini ditujukan untuk perangkat dengan memori terbatas. Kompilator termasuk simbol khusus di beberapa objek yang memberi tahu linker dan runtime kode mana yang terfragmentasi diperlukan.

NDS32 Opsi

Opsi ini ditentukan untuk implementasi NDS32:

-mbig-endian Hasilkan kode dalam mode big-endian.

-mlittle-endian Hasilkan kode dalam mode little-endian.

-mreduced-reg Gunakan register set yang dikurangi untuk alokasi register.

-mfull-regs Gunakan register set lengkap untuk alokasi register.

-mcmov Menghasilkan instruksi gerakan bersyarat.

-mno-cmov Jangan membuat instruksi pemindahan bersyarat.

-perf-ext Buat instruksi ekstensi kinerja.

-mno-perf-ext Jangan buat petunjuk ekstensi kinerja.

-mv3push Buat instruksi push3/pop25 v25.

-mno-v3push Jangan membuat instruksi v3 push25/pop25.

-m16-bit Menghasilkan instruksi 16-bit.

-mno-16-bit Jangan membuat instruksi 16-bit.

-misr-vektor-ukuran=num Tentukan ukuran setiap vektor interupsi, yang harus 4 atau 16.

-mcache-block-size=num Tentukan ukuran setiap blok cache, yang harus pangkat 2 antara 4 dan 512.

-maret=lengkungan Tentukan nama arsitektur target.

-mcmodel=kode-model Atur model kode ke salah satu dari

kecil Semua segmen data dan data read-only harus berada dalam ruang pengalamatan 512KB. Segmen teks harus berada dalam ruang pengalamatan 16 MB.

medium Segmen data harus berada dalam 512KB sedangkan segmen data read-only dapat dalam ruang pengalamatan 4GB. Segmen teks harus masih dalam 16MB ruang pengalamatan.

besar Semua segmen teks dan data dapat berada dalam ruang pengalamatan 4GB.

-mctor-dtor Aktifkan fitur konstruktor/destructor.

-santai Panduan linker untuk bersantai instruksi.

Nios II Opsi

Ini adalah opsi yang ditentukan untuk prosesor Altera Nios II.

-G num Letakkan objek global dan statis kurang dari atau sama dengan num byte ke dalam data kecil atau Bagian BSS bukan data normal atau bagian BSS. Nilai default dari num is 8.

-mgpopt=Option -mgpopt -mno-gpopt Hasilkan (jangan hasilkan) akses relatif GP. Pengikut Option nama adalah dikenali:

tak satupun Jangan membuat akses relatif GP.

lokal Hasilkan akses relatif GP untuk objek data kecil yang bukan eksternal atau lemah. Juga gunakan pengalamatan GP-relatif untuk objek yang telah secara eksplisit ditempatkan di bagian data kecil melalui atribut "bagian".

global Untuk lokal, tetapi juga menghasilkan akses relatif GP untuk objek data kecil yang eksternal atau lemah. Jika Anda menggunakan opsi ini, Anda harus memastikan bahwa semua bagian dari program Anda (termasuk perpustakaan) dikompilasi dengan yang sama -G pengaturan.

data Hasilkan akses relatif GP untuk semua objek data dalam program. Jika Anda menggunakan opsi ini, seluruh data dan segmen BSS dari program Anda harus sesuai dengan 64K memori dan Anda harus menggunakan skrip tautan yang sesuai untuk mengalokasikannya di dalam rentang yang dapat dialamatkan dari penunjuk global.

semua Menghasilkan alamat GP-relatif untuk pointer fungsi serta pointer data. Jika Anda menggunakan opsi ini, seluruh teks, data, dan segmen BSS dari program Anda harus muat di 64K memori dan Anda harus menggunakan skrip tautan yang sesuai untuk mengalokasikan mereka dalam kisaran yang dapat dialamatkan dari penunjuk global.

-mgpopt adalah setara dengan -mgpopt=lokal, dan -mno-gpopt adalah setara dengan -mgpopt=tidak ada.

Standarnya adalah -mgpopt kecuali kapan -fpic or -fPIC ditentukan untuk menghasilkan posisi- kode independen. Perhatikan bahwa ABI Nios II tidak mengizinkan akses relatif GP dari perpustakaan bersama.

Anda mungkin perlu menentukan -mno-gpopt secara eksplisit ketika membangun program yang mencakup sejumlah besar data kecil, termasuk bagian data GOT yang besar. Dalam hal ini, Offset 16-bit untuk pengalamatan relatif GP mungkin tidak cukup besar untuk memungkinkan akses ke seluruh bagian data kecil.

-mel -meb Hasilkan kode little-endian (default) atau big-endian (eksperimental).

-mbypass-cache -mno-bypass-cache Paksa semua instruksi pemuatan dan penyimpanan untuk selalu melewati cache dengan menggunakan varian I/O dari instruksi. Standarnya adalah tidak mem-bypass cache.

-mno-cache-volatile -mcache-volatile Akses memori volatil melewati cache menggunakan varian I/O untuk memuat dan menyimpan instruksi. Standarnya adalah tidak mem-bypass cache.

-mno-cepat-sw-div -mfast-sw-div Jangan gunakan pembagian cepat berbasis tabel untuk bilangan kecil. Standarnya adalah menggunakan puasa membagi pada -O3 dan di atas.

-mno-hw-mul -MHW-MUL -mno-hw-mulx -MHW-MULX -mno-hw-div -mhw-div Mengaktifkan atau menonaktifkan keluarga instruksi "mul", "mulx" dan "div" yang dipancarkan oleh penyusun. Standarnya adalah memancarkan "mul" dan tidak memancarkan "div" dan "mulx".

-mcustom-penginapan=N -mno-custom-penginapan Masing-masing -mcustom-penginapan=N opsi memungkinkan penggunaan instruksi khusus dengan penyandian N ketika menghasilkan kode yang menggunakan penginapan. Sebagai contoh, -mcustom-fadds=253 menghasilkan kustom instruksi 253 untuk operasi penambahan floating-point presisi tunggal alih-alih perilaku default menggunakan panggilan perpustakaan.

Nilai berikut dari penginapan didukung. Kecuali dinyatakan lain, floating-point operasi diharapkan diimplementasikan dengan semantik IEEE 754 normal dan berhubungan langsung dengan operator C atau fungsi bawaan GCC yang setara.

Titik mengambang presisi tunggal:

mode, fsubs, fdivs, fmuls Operasi aritmatika biner.

fneg Negasi unary.

hebat Nilai mutlak unary.

fcmpeqs, fcmpges, fcmpgts, fcmles, fcmlts, fcmpnes Operasi perbandingan.

fmins, fmaxs Floating-point minimum dan maksimum. Instruksi ini hanya dihasilkan jika -finite-matematika-saja ditentukan.

sqrts Operasi akar kuadrat unary.

fcoss, fsin, ftan, orang gemuk, Fexps, cambuk Fungsi trigonometri dan eksponensial titik-mengambang. Instruksi ini adalah hanya dihasilkan jika optimasi -funsafe-matematika juga ditentukan.

Titik mengambang presisi ganda:

fadd, fsubd, fdivd, tahu Operasi aritmatika biner.

fnegd Negasi unary.

luar biasa Nilai mutlak unary.

fcmpeqd, fcmpged, fcmpgtd, fcmled, fcmpltd, fcmpned Operasi perbandingan.

menemukan, fmaxd Minimum dan maksimum presisi ganda. Instruksi ini hanya dihasilkan jika -finite-matematika-saja ditentukan.

fsqrtd Operasi akar kuadrat unary.

fcosd, mencari, kaki, gemuk, fexpd, cambuk Fungsi trigonometri dan eksponensial presisi ganda. Instruksi ini adalah hanya dihasilkan jika optimasi -funsafe-matematika juga ditentukan.

Konversi:

fextsd Konversi dari presisi tunggal ke presisi ganda.

fruncds Konversi dari presisi ganda ke presisi tunggal.

perbaikan, fixsu, memperbaiki, memperbaiki Konversi dari floating point ke tipe integer yang ditandatangani atau tidak, dengan pemotongan menuju nol.

bulat Konversi dari titik mengambang presisi tunggal ke bilangan bulat bertanda, pembulatan ke bilangan bulat terdekat dan terikat jauh dari nol. Ini sesuai dengan "__builtin_lroundf" berfungsi ketika -fno-matematika-errno digunakan.

mengapung, mengapung, mengambang, mengambang Konversi dari tipe integer yang ditandatangani atau tidak ditandatangani ke tipe floating-point.

Selain itu, semua instruksi transfer berikut untuk register internal X dan Y harus disediakan untuk menggunakan salah satu instruksi titik-mengambang presisi ganda. Instruksi khusus yang mengambil dua operan sumber presisi ganda mengharapkan yang pertama operan dalam register 64-bit X. Operan lainnya (atau hanya operan unary operasi) diberikan ke instruksi aritmatika kustom dengan yang paling tidak signifikan setengah dalam register sumber src1 dan setengah yang paling signifikan dalam src2. Sebuah kebiasaan instruksi yang mengembalikan hasil presisi ganda mengembalikan 32 . yang paling signifikan bit di register tujuan dan setengah lainnya di register 32-bit Y. GCC secara otomatis menghasilkan urutan kode yang diperlukan untuk menulis register X dan/atau membaca register Y ketika instruksi floating-point presisi ganda digunakan.

fwrx Menulis src1 menjadi setengah signifikan terkecil dari X dan src2 menjadi yang paling signifikan setengah dari X

lucu Menulis src1 ke dalam Y

frdxhi, frdxlo Baca sebagian besar atau paling sedikit (masing-masing) bagian signifikan dari X dan simpan di dest.

frdy Baca nilai Y dan simpan ke dalam dest.

Perhatikan bahwa Anda dapat memperoleh lebih banyak kontrol lokal atas pembuatan kebiasaan Nios II instruksi dengan menggunakan "target("custom-insn=N")" dan "target("tidak ada-kustom-penginapan")" atribut fungsi atau pragma.

-mcustom-fpu-cfg=nama Opsi ini memungkinkan satu set pengkodean instruksi kustom yang telah ditentukan sebelumnya (lihat -mcustom-penginapan di atas). Saat ini, set berikut didefinisikan:

-mcustom-fpu-cfg=60-1 setara dengan: -mcustom-fmuls=252 -mcustom-fadds=253 -mcustom-fsubs=254 -fsingle-presisi-konstan

-mcustom-fpu-cfg=60-2 setara dengan: -mcustom-fmuls=252 -mcustom-fadds=253 -mcustom-fsubs=254 -mcustom-fdivs=255 -fsingle-presisi-konstan

-mcustom-fpu-cfg=72-3 setara dengan: -mcustom-floatus=243 -mcustom-fixsi=244 -mcustom-floatis=245 -mcustom-fcmpgts=246 -mcustom-fcmles=249 -mcustom-fcmpeqs=250 -mcustom-fcmpnes=251 -mcustom-fmuls=252 -mcustom-fadds=253 -mcustom-fsubs=254 -mcustom-fdivs=255 -fsingle-presisi-konstan

Tugas instruksi khusus yang diberikan oleh individu -mcustom-penginapan= penggantian opsi yang diberikan oleh -mcustom-fpu-cfg=, terlepas dari urutan opsi pada garis komando.

Perhatikan bahwa Anda dapat memperoleh lebih banyak kontrol lokal atas pemilihan konfigurasi FPU dengan menggunakan "target("custom-fpu-cfg=nama")" atribut fungsi atau pragma.

Tambahan ini -m pilihan yang tersedia untuk target Altera Nios II ELF (bare-metal):

-mhal Tautan dengan HAL BSP. Ini menekan penautan dengan startup runtime C yang disediakan GCC dan kode terminasi, dan biasanya digunakan bersama dengan -msys-crt0= untuk menentukan lokasi kode startup alternatif yang disediakan oleh HAL BSP.

-msmallc Tautan dengan pustaka C versi terbatas, -lsmallc, daripada Newlib.

-msys-crt0=file awal file awal adalah nama file dari startfile (crt0) yang akan digunakan saat menautkan. Pilihan ini hanya berguna dalam hubungannya dengan -mhal.

-msys-lib=systemlib systemlib adalah nama perpustakaan perpustakaan yang menyediakan panggilan sistem tingkat rendah diperlukan oleh pustaka C, misalnya "baca" dan "tulis". Opsi ini biasanya digunakan untuk link dengan perpustakaan yang disediakan oleh HAL BSP.

Nvidia PTX Opsi

Opsi ini ditentukan untuk Nvidia PTX:

-m32 -m64 Buat kode untuk ABI 32-bit atau 64-bit.

-mmainkernel Tautan dalam kode untuk kernel __main. Ini untuk stand-alone bukan offloading eksekusi.

PDP-11 Opsi

Opsi ini ditentukan untuk PDP-11:

-mfpu Gunakan floating point FPP perangkat keras. Ini adalah default. (Titik apung FIS pada PDP-11/40 tidak didukung.)

-msoft-float Jangan gunakan floating point perangkat keras.

-mac0 Mengembalikan hasil floating-point di ac0 (fr0 dalam sintaks assembler Unix).

-mno-ac0 Mengembalikan hasil floating-point dalam memori. Ini adalah default.

-m40 Hasilkan kode untuk PDP-11/40.

-m45 Hasilkan kode untuk PDP-11/45. Ini adalah default.

-m10 Hasilkan kode untuk PDP-11/10.

-mbcopy-builtin Gunakan pola "movmemhi" sebaris untuk menyalin memori. Ini adalah default.

-mbcopy Jangan gunakan pola "movmemhi" sebaris untuk menyalin memori.

-mint16 -mno-int32 Gunakan "int" 16-bit. Ini adalah default.

-mint32 -mno-int16 Gunakan "int" 32-bit.

-mfloat64 -mno-float32 Gunakan "float" 64-bit. Ini adalah default.

-mfloat32 -mno-float64 Gunakan "float" 32-bit.

-mabshi Gunakan pola "abshi2". Ini adalah default.

-mno-abshi Jangan gunakan pola "abshi2".

-mahal-cabang Berpura-pura bahwa cabang itu mahal. Ini untuk bereksperimen dengan pembuatan kode saja.

-cabang-murah Jangan berpura-pura bahwa cabang itu mahal. Ini adalah default.

-munix-asm Gunakan sintaks assembler Unix. Ini adalah default ketika dikonfigurasi untuk pdp11-*-bsd.

-mdec-asm Gunakan sintaks assembler DEC. Ini adalah default saat dikonfigurasi untuk target PDP-11 apa pun selain pdp11-*-bsd.

picoChip Opsi

Ini -m opsi didefinisikan untuk implementasi picoChip:

-mae=ae_type Atur set instruksi, set register, dan parameter penjadwalan instruksi untuk array jenis elemen ae_type. Nilai yang didukung untuk ae_type adalah APAPUN, MUL, dan MAC.

-mae=APA SAJA memilih tipe AE yang sepenuhnya generik. Kode yang dihasilkan dengan opsi ini berjalan pada salah satu jenis AE lainnya. Kode tidak seefisien jika dikompilasi untuk jenis AE tertentu, dan beberapa jenis operasi (misalnya, perkalian) tidak berfungsi dengan benar pada semua jenis AE.

-mae=MUL memilih jenis MUL AE. Ini adalah tipe AE yang paling berguna untuk kode yang dikompilasi, dan merupakan default.

-mae=MAC memilih MAC AE gaya DSP. Kode yang dikompilasi dengan opsi ini mungkin mengalami kinerja manipulasi byte (char) yang buruk, karena DSP AE tidak menyediakan dukungan perangkat keras untuk beban/penyimpanan byte.

-msymbol-sebagai-alamat Aktifkan kompiler untuk langsung menggunakan nama simbol sebagai alamat di load/store instruksi, tanpa terlebih dahulu memuatnya ke dalam register. Biasanya, penggunaan ini opsi menghasilkan program yang lebih besar, yang berjalan lebih cepat daripada saat opsi tidak digunakan. Namun, hasilnya bervariasi dari program ke program, sehingga dibiarkan sebagai opsi pengguna, daripada diaktifkan secara permanen.

-mno-tidak efisien-peringatan Menonaktifkan peringatan tentang pembuatan kode yang tidak efisien. Peringatan ini dapat berupa dihasilkan, misalnya, saat mengkompilasi kode yang melakukan operasi memori tingkat byte pada tipe MAC AE. MAC AE tidak memiliki dukungan perangkat keras untuk memori tingkat byte operasi, jadi semua beban/penyimpanan byte harus disintesis dari pemuatan/penyimpanan kata operasi. Ini tidak efisien dan peringatan dibuat untuk menunjukkan bahwa Anda harus menulis ulang kode untuk menghindari operasi byte, atau untuk menargetkan tipe AE yang memiliki dukungan perangkat keras yang diperlukan. Opsi ini menonaktifkan peringatan ini.

PowerPC Opsi

Ini terdaftar di bawah

RL78 Opsi

-msim Tautan di pustaka target tambahan untuk mendukung operasi dalam simulator.

-mmul=tidak ada -mmul=g13 -mmul=rl78 Menentukan jenis dukungan multiplikasi perangkat keras yang akan digunakan. Standarnya adalah tak satupun, yang menggunakan fungsi perkalian perangkat lunak. NS g13 pilihan adalah untuk perangkat keras mengalikan/membagi periferal hanya pada target RL78/G13. NS rl78 pilihannya adalah untuk perkalian perangkat keras standar yang ditentukan dalam manual perangkat lunak RL78.

-m64bit-ganda -m32bit-ganda Jadikan tipe data "ganda" menjadi 64 bit (-m64bit-ganda) atau 32 bit (-m32bit-ganda) dalam ukuran. Standarnya adalah -m32bit-ganda.

IBM RS / 6000 serta PowerPC Opsi

Ini -m opsi ditentukan untuk IBM RS/6000 dan PowerPC:

-mpowerpc-gpopt -mno-powerpc-gpopt -mpowerpc-gfxopt -mno-powerpc-gfxopt -mpowerpc64 -mno-powerpc64 -mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb -mpopcntd -mno-popcntd -mfprnd -mno-fprnd -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp Anda menggunakan opsi ini untuk menentukan instruksi mana yang tersedia pada prosesor Anda sedang menggunakan. Nilai default opsi ini ditentukan saat mengonfigurasi GCC. Menentukan -mcpu=cpu_type mengesampingkan spesifikasi opsi ini. Kita merekomendasikan Anda menggunakan -mcpu=cpu_type opsi daripada opsi yang tercantum di atas.

Menentukan -mpowerpc-gpopt memungkinkan GCC untuk menggunakan arsitektur PowerPC opsional instruksi dalam grup Tujuan Umum, termasuk akar kuadrat titik-mengambang. Menentukan -mpowerpc-gfxopt memungkinkan GCC untuk menggunakan arsitektur PowerPC opsional instruksi dalam grup Grafik, termasuk pemilihan titik-mengambang.

The -mmfcrf opsi memungkinkan GCC untuk menghasilkan perpindahan dari bidang register kondisi instruksi yang diimplementasikan pada prosesor POWER4 dan prosesor lain yang mendukung arsitektur PowerPC V2.01. NS -mpopcntb opsi memungkinkan GCC untuk menghasilkan popcount dan instruksi estimasi timbal balik FP presisi ganda yang diterapkan pada POWER5 prosesor dan prosesor lain yang mendukung arsitektur PowerPC V2.02. NS -mpopcntd opsi memungkinkan GCC untuk menghasilkan instruksi popcount yang diimplementasikan pada Prosesor POWER7 dan prosesor lain yang mendukung arsitektur PowerPC V2.06. The -mfprnd opsi memungkinkan GCC untuk menghasilkan putaran FP ke instruksi integer diimplementasikan pada prosesor POWER5+ dan prosesor lain yang mendukung PowerPC arsitektur V2.03. NS -mcmpb opsi memungkinkan GCC untuk menghasilkan byte perbandingan instruksi yang diimplementasikan pada prosesor POWER6 dan prosesor lain yang mendukung arsitektur PowerPC V2.05. NS -mmfpgpr opsi memungkinkan GCC untuk menghasilkan gerakan FP ke/dari instruksi register tujuan umum yang diimplementasikan pada prosesor POWER6X dan prosesor lain yang mendukung arsitektur PowerPC V2.05 yang diperluas. NS -mhard-dfp opsi memungkinkan GCC untuk menghasilkan instruksi titik-mengambang desimal yang diimplementasikan pada beberapa prosesor POWER.

The -mpowerpc64 opsi memungkinkan GCC untuk menghasilkan instruksi 64-bit tambahan yang ditemukan dalam arsitektur PowerPC64 lengkap dan untuk memperlakukan GPR sebagai 64-bit, doubleword kuantitas. GCC default ke -mno-powerpc64.

-mcpu=cpu_type Atur tipe arsitektur, penggunaan register, dan parameter penjadwalan instruksi untuk jenis mesin cpu_type. Nilai yang didukung untuk cpu_type adalah 401, 403, 405, 405 fps, 440, 440 fps, 464, 464 fps, 476, 476 fps, 505, 601, 602, 603, 603e, 604, 604e, 620, 630, 740, 7400, 7450, 750, 801, 821, 823, 860, 970, 8540, a2, e300c2, e300c3, E500MC, e500mc64, e5500, e6500, ec603e, G3, G4, G5, titan, power3, power4, power5, kekuatan5+, power6, kekuatan6x, power7, power8, komputer listrik, powerpc64, powerpc64le, dan rs64.

-mcpu=powerpc, -mcpu=powerpc64, dan -mcpu=powerpc64le tentukan PowerPC 32-bit murni (baik endian), PowerPC big endian 64-bit, dan PowerPC little endian 64-bit jenis mesin arsitektur, dengan model prosesor generik yang sesuai diasumsikan untuk tujuan penjadwalan.

Opsi lain menentukan prosesor tertentu. Kode yang dihasilkan di bawah opsi tersebut berjalan paling baik pada prosesor itu, dan mungkin tidak berjalan sama sekali pada prosesor lain.

The -mcpu opsi secara otomatis mengaktifkan atau menonaktifkan opsi berikut:

-maltivec -mfprnd -mhard-float -mmfcrf -banyak -mpopcntb -mpopcntd -mpowerpc64 -mpowerpc-gpopt -mpowerpc-gfxopt -mengambang tunggal -mdouble-float -simple-fpu -mstring -mmulhw -mdlmzb -mmfpgpr -mvsx -mcrypto -mdirect-move -mpower8-fusion -mpower8-vektor -mquad-memori -mquad-memori-atom

Opsi tertentu yang ditetapkan untuk CPU tertentu bervariasi antara versi kompiler, tergantung pada pengaturan apa yang tampaknya menghasilkan kode optimal untuk CPU itu; tidak mencerminkan kemampuan perangkat keras yang sebenarnya. Jika Anda ingin mengatur opsi individual ke nilai tertentu, Anda dapat menentukannya setelah -mcpu pilihan, seperti -mcpu=970 -mno-altivec.

Pada AIX, -maltivec serta -mpowerpc64 opsi tidak diaktifkan atau dinonaktifkan oleh -mcpu opsi saat ini karena AIX tidak memiliki dukungan penuh untuk opsi ini. Kamu boleh masih mengaktifkan atau menonaktifkannya satu per satu jika Anda yakin itu akan berfungsi di lingkungan.

-mtune=cpu_type Atur parameter penjadwalan instruksi untuk jenis mesin cpu_type, tapi jangan disetel jenis arsitektur atau penggunaan register, sebagai -mcpu=cpu_type melakukan. Nilai yang sama untuk cpu_type digunakan untuk -mtune seperti untuk -mcpu. Jika keduanya ditentukan, kode yang dihasilkan menggunakan arsitektur dan register yang ditetapkan oleh -mcpu, tetapi parameter penjadwalan ditetapkan oleh -mtune.

-mcmodel=kecil Hasilkan kode PowerPC64 untuk model kecil: TOC dibatasi hingga 64k.

-mcmodel=sedang Hasilkan kode PowerPC64 untuk model menengah: TOC dan data statis lainnya mungkin naik menjadi total 4G dalam ukuran.

-mcmodel=besar Hasilkan kode PowerPC64 untuk model besar: TOC mungkin berukuran hingga 4G. Lainnya data dan kode hanya dibatasi oleh ruang alamat 64-bit.

-maltivec -mno-altivec Hasilkan kode yang menggunakan (tidak menggunakan) instruksi AltiVec, dan juga mengaktifkan penggunaan fungsi built-in yang memungkinkan akses lebih langsung ke set instruksi AltiVec. Anda mungkin juga perlu mengatur -mabi=altivec untuk menyesuaikan ABI saat ini dengan AltiVec ABI perangkat tambahan.

Ketika -maltivec digunakan, bukan -maltivec=le or -maltivec=menjadi, urutan elemen untuk intrinsik Altivec seperti "vec_splat", "vec_extract", dan "vec_insert" cocok urutan elemen array yang sesuai dengan endianness target. Yaitu, elemen zero mengidentifikasi elemen paling kiri dalam register vektor saat menargetkan big-endian platform, dan mengidentifikasi elemen paling kanan dalam register vektor saat menargetkan a platform little-endian.

-maltivec=menjadi Hasilkan instruksi Altivec menggunakan urutan elemen big-endian, terlepas dari apakah targetnya adalah big- atau little-endian. Ini adalah default saat menargetkan big-endian platform.

Urutan elemen digunakan untuk menafsirkan nomor elemen dalam intrinsik Altivec seperti "vec_splat", "vec_extract", dan "vec_insert". Secara default, elemen larik ini cocok agar sesuai dengan endianness untuk target.

-maltivec=le Hasilkan instruksi Altivec menggunakan urutan elemen little-endian, terlepas dari apakah targetnya adalah big- atau little-endian. Ini adalah default ketika menargetkan sedikit- platform endian. Opsi ini saat ini diabaikan saat menargetkan big-endian platform.

Urutan elemen digunakan untuk menafsirkan nomor elemen dalam intrinsik Altivec seperti "vec_splat", "vec_extract", dan "vec_insert". Secara default, elemen larik ini cocok agar sesuai dengan endianness untuk target.

-mvrsave -mno-vrsave Hasilkan instruksi VRSAVE saat membuat kode AltiVec.

-mgen-sel-mikrokode Hasilkan instruksi mikrokode Sel.

-mwarn-sel-mikrokode Peringatkan ketika instruksi mikrokode Sel dipancarkan. Contoh mikrokode Sel instruksi adalah pergeseran variabel.

-msecure-plt Hasilkan kode yang memungkinkan ld serta ld.so untuk membangun executable dan shared library dengan bagian ".plt" dan ".got" yang tidak dapat dieksekusi. Ini adalah opsi PowerPC 32-bit SYSV ABI.

-mbss-plt Hasilkan kode yang menggunakan bagian ".plt" BSS yang ld.so mengisi, dan membutuhkan ".plt" dan bagian ".got" yang dapat ditulis dan dieksekusi. Ini adalah PowerPC 32-bit Opsi SYSV ABI.

-misel -mno-isel Sakelar ini mengaktifkan atau menonaktifkan pembuatan instruksi ISEL.

-misel=ya Tidak Sakelar ini tidak digunakan lagi. Menggunakan -misel serta -mno-isel sebagai gantinya.

-msp -mno-spe Sakelar ini mengaktifkan atau menonaktifkan pembuatan instruksi simd SPE.

-gangguan -mno-berpasangan Sakelar ini mengaktifkan atau menonaktifkan pembuatan instruksi simd PAIRED.

-msp=ya Tidak Opsi ini tidak digunakan lagi. Menggunakan -msp serta -mno-spe sebagai gantinya.

-mvsx -mno-vsx Buat kode yang menggunakan (tidak menggunakan) instruksi vektor/skalar (VSX), dan juga aktifkan penggunaan fungsi bawaan yang memungkinkan lebih banyak akses langsung ke VSX set instruksi.

-mcrypto -mno-kripto Aktifkan penggunaan (nonaktifkan) fungsi bawaan yang memungkinkan akses langsung ke instruksi kriptografi yang ditambahkan dalam versi 2.07 dari PowerPC ISA.

-mdirect-move -mno-langsung-pindah Menghasilkan kode yang menggunakan (tidak menggunakan) instruksi untuk memindahkan data antara register tujuan umum dan register vektor/skalar (VSX) yang ditambahkan dalam versi 2.07 dari PowerPC ISA.

-mpower8-fusion -mno-power8-fusion Hasilkan kode yang menyimpan (tidak menyimpan) beberapa operasi bilangan bulat yang berdekatan sehingga instruksi dapat digabungkan bersama pada prosesor power8 dan yang lebih baru.

-mpower8-vektor -mno-power8-vektor Hasilkan kode yang menggunakan (tidak menggunakan) instruksi vektor dan skalar yang ditambahkan dalam versi 2.07 dari PowerPC ISA. Juga aktifkan penggunaan fungsi bawaan yang memungkinkan lebih banyak akses langsung ke instruksi vektor.

-mquad-memori -mno-quad-memori Hasilkan kode yang menggunakan (tidak menggunakan) instruksi memori kata quad non-atomik. The -mquad-memori opsi membutuhkan penggunaan mode 64-bit.

-mquad-memori-atom -mno-quad-memori-atom Menghasilkan kode yang menggunakan (tidak menggunakan) instruksi memori kata quad atom. NS -mquad-memori-atom opsi membutuhkan penggunaan mode 64-bit.

-mupper-regs-df -mno-atas-regs-df Hasilkan kode yang menggunakan (tidak menggunakan) instruksi presisi ganda skalar yang menargetkan semua 64 register dalam set register titik mengambang vektor/skalar yang ditambahkan dalam versi 2.06 dari PowerPC ISA. -mupper-regs-df diaktifkan secara default jika Anda menggunakan salah satu dari -mcpu = daya7, -mcpu = daya8, atau -mvsx Pilihan.

-mupper-regs-sf -mno-atas-regs-sf Hasilkan kode yang menggunakan (tidak menggunakan) instruksi presisi skalar tunggal yang menargetkan semua 64 register dalam set register titik mengambang vektor/skalar yang ditambahkan dalam versi 2.07 dari PowerPC ISA. -mupper-regs-sf diaktifkan secara default jika Anda menggunakan salah satu dari -mcpu = daya8 or -mpower8-vektor Pilihan.

-mupper-reg -mno-atas-regs Hasilkan kode yang menggunakan (tidak menggunakan) instruksi skalar yang menargetkan semua 64 register dalam set register titik mengambang vektor/skalar, tergantung pada model mesin.

Jika -mno-atas-regs opsi digunakan, itu mematikan keduanya -mupper-regs-sf serta -mupper-regs-df Pilihan.

-mfloat-gprs=ya/tunggal/ganda/tidak -mfloat-gprs Sakelar ini mengaktifkan atau menonaktifkan pembuatan operasi titik-mengambang pada register tujuan umum untuk arsitektur yang mendukungnya.

Argumen iya nih or tunggal memungkinkan penggunaan floating-point presisi tunggal operasi.

Argumen dua kali lipat memungkinkan penggunaan floating-point presisi tunggal dan ganda operasi.

Argumen tidak menonaktifkan operasi floating-point pada register tujuan umum.

Opsi ini saat ini hanya tersedia di MPC854x.

-m32 -m64 Hasilkan kode untuk lingkungan 32-bit atau 64-bit target Darwin dan SVR4 (termasuk GNU/Linux). Lingkungan 32-bit menetapkan int, panjang, dan penunjuk ke 32 bit dan menghasilkan kode yang berjalan pada varian PowerPC apa pun. Lingkungan 64-bit diatur ke 32 bit dan panjang dan penunjuk ke 64 bit, dan menghasilkan kode untuk PowerPC64, seperti untuk -mpowerpc64.

-mfull-toc -mno-fp-in-toc -mno-sum-in-toc -minimal-toc Ubah generasi TOC (Daftar Isi), yang dibuat untuk setiap file yang dapat dieksekusi. NS -mfull-toc opsi dipilih secara default. Dalam hal ini, GCC mengalokasikan setidaknya satu entri TOC untuk setiap referensi variabel non-otomatis unik di program Anda. GCC juga menempatkan konstanta floating-point di TOC. Namun, hanya 16,384 entri tersedia di TOC.

Jika Anda menerima pesan kesalahan tautan yang mengatakan bahwa Anda telah memenuhi yang tersedia Ruang TOC, Anda dapat mengurangi jumlah ruang TOC yang digunakan dengan -mno-fp-in-toc serta -mno-sum-in-toc Pilihan. -mno-fp-in-toc mencegah GCC menempatkan floating-point konstanta di TOC dan -mno-sum-in-toc memaksa GCC untuk menghasilkan kode untuk menghitung jumlah alamat dan konstanta pada saat run time alih-alih memasukkan jumlah itu ke TOC. Anda dapat menentukan salah satu atau kedua opsi ini. Masing-masing menyebabkan GCC menghasilkan sangat kode yang sedikit lebih lambat dan lebih besar dengan mengorbankan ruang TOC.

Jika Anda masih kehabisan ruang di TOC bahkan saat Anda menentukan kedua opsi ini, menentukan -minimal-toc sebagai gantinya. Opsi ini menyebabkan GCC hanya membuat satu entri TOC untuk setiap file. Saat Anda menentukan opsi ini, GCC menghasilkan kode yang lebih lambat dan lebih besar tetapi yang menggunakan ruang TOC sangat sedikit. Anda mungkin ingin menggunakan opsi ini hanya di file yang berisi kode yang lebih jarang dieksekusi.

-maix64 -maix32 Aktifkan 64-bit AIX ABI dan konvensi panggilan: pointer 64-bit, tipe "panjang" 64-bit, dan infrastruktur yang dibutuhkan untuk mendukungnya. Menentukan -maix64 menyiratkan -mpowerpc64, sementara -maix32 menonaktifkan ABI 64-bit dan menyiratkan -mno-powerpc64. GCC default ke -maix32.

-mxl-kompat -mno-xl-kompat Menghasilkan kode yang lebih sesuai dengan semantik kompiler IBM XL saat menggunakan AIX- ABI yang kompatibel. Lewati argumen floating-point ke fungsi prototipe di luar register save area (RSA) pada stack selain argumen FPR. Jangan berasumsi bahwa ganda paling signifikan dalam nilai ganda panjang 128-bit dibulatkan dengan benar ketika membandingkan nilai dan mengkonversi ke ganda. Gunakan nama simbol XL untuk double panjang mendukung rutinitas.

Konvensi pemanggilan AIX diperpanjang tetapi awalnya tidak didokumentasikan untuk menangani mengaburkan kasus K&R C memanggil fungsi yang mengambil alamat argumennya dengan argumen lebih sedikit daripada yang dideklarasikan. Kompiler IBM XL mengakses argumen titik-mengambang yang tidak muat di RSA dari tumpukan saat subrutin dikompilasi tanpa optimasi. Karena selalu menyimpan argumen floating-point di stack adalah tidak efisien dan jarang dibutuhkan, opsi ini tidak diaktifkan secara default dan hanya diperlukan saat memanggil subrutin yang dikompilasi oleh kompiler IBM XL tanpa optimasi.

-mpe Bantuan IBM RS / 6000 SP Paralel Lingkungan Hidup (PE). Tautkan aplikasi yang ditulis untuk digunakan pesan lewat dengan kode startup khusus untuk mengaktifkan aplikasi untuk berjalan. NS sistem harus memasang PE di lokasi standar (/usr/lpp/ppe.poe/), atau spesifikasi file harus ditimpa dengan -spesifikasi= pilihan untuk menentukan yang sesuai lokasi direktori. Lingkungan Paralel tidak mendukung utas, jadi -mpe opsi dan -utas pilihan tidak kompatibel.

-memfitnah-alami -kekuatan jahat Pada AIX, Darwin 32-bit, dan PowerPC GNU/Linux 64-bit, opsinya -memfitnah-alami mengesampingkan penyelarasan yang ditentukan ABI dari tipe yang lebih besar, seperti ganda titik-mengambang, pada batas berbasis ukuran alami mereka. Pilihan -kekuatan jahat menginstruksikan GCC untuk ikuti aturan penyelarasan yang ditentukan ABI. GCC default ke perataan standar ditentukan dalam ABI.

Pada Darwin 64-bit, penyelarasan alami adalah default, dan -kekuatan jahat tidak didukung.

-msoft-float -mhard-float Menghasilkan kode yang tidak menggunakan (menggunakan) set register floating-point. Perangkat lunak emulasi floating-point disediakan jika Anda menggunakan -msoft-float pilihan, dan lulus opsi ke GCC saat menautkan.

-mengambang tunggal -mdouble-float Menghasilkan kode untuk operasi floating-point presisi tunggal atau ganda. -mdouble-float menyiratkan -mengambang tunggal.

-simple-fpu Jangan membuat instruksi "sqrt" dan "div" untuk unit titik-mengambang perangkat keras.

-mfpu=nama Tentukan jenis unit floating-point. Nilai yang valid untuk nama adalah sp_lite (setara dengan -mengambang tunggal -simple-fpu), dp_lite (setara dengan -mdouble-float -simple-fpu), sp_penuh (setara dengan -mengambang tunggal), Dan dp_penuh (setara dengan -mdouble-float).

-mxilinx-fpu Lakukan optimasi untuk unit floating-point pada Xilinx PPC 405/440.

-banyak -mno-banyak Hasilkan kode yang menggunakan (tidak menggunakan) memuat banyak instruksi kata dan menyimpan beberapa instruksi kata. Instruksi ini dibuat secara default pada sistem POWER, dan tidak dihasilkan pada sistem PowerPC. Jangan gunakan -banyak sedikit- sistem PowerPC endian, karena instruksi tersebut tidak berfungsi saat prosesor dalam modus little-endian. Pengecualiannya adalah PPC740 dan PPC750 yang mengizinkan ini instruksi dalam mode little-endian.

-mstring -mno-string Hasilkan kode yang menggunakan (tidak menggunakan) instruksi string beban dan penyimpanan instruksi kata string untuk menyimpan beberapa register dan melakukan gerakan blok kecil. Ini instruksi dihasilkan secara default pada sistem POWER, dan tidak dibuat pada PowerPC sistem. Jangan gunakan -mstring pada sistem PowerPC little-endian, karena itu instruksi tidak bekerja saat prosesor dalam mode little-endian. Pengecualian adalah PPC740 dan PPC750 yang mengizinkan instruksi ini dalam mode little-endian.

-mupdate -mno-update Hasilkan kode yang menggunakan (tidak menggunakan) instruksi memuat atau menyimpan yang memperbarui register dasar ke alamat lokasi memori yang dihitung. Instruksi ini dihasilkan secara default. Jika Anda menggunakan -mno-update, ada jendela kecil di antara waktu penunjuk tumpukan diperbarui dan alamat bingkai sebelumnya adalah disimpan, yang berarti kode yang menjalankan bingkai tumpukan melintasi interupsi atau sinyal dapat mendapatkan data yang rusak.

-mavoid-diindeks-alamat -mno-avoid-indexed-address Hasilkan kode yang mencoba untuk menghindari (tidak menghindari) penggunaan beban atau penyimpanan yang diindeks instruksi. Instruksi ini dapat dikenakan penalti kinerja pada prosesor Power6 dalam situasi tertentu, seperti saat melangkah melalui array besar yang melintasi 16M batas. Opsi ini diaktifkan secara default saat menargetkan Power6 dan dinonaktifkan jika tidak.

-mfused-madd -mno-menyatu-madd Hasilkan kode yang menggunakan (tidak menggunakan) perkalian dan akumulasi floating-point instruksi. Instruksi ini dihasilkan secara default jika perangkat keras floating point digunakan. Bergantung pada mesin -mfused-madd opsi sekarang dipetakan ke mesin- independen -ffp-kontrak=cepat opsi, dan -mno-menyatu-madd dipetakan ke -ffp-kontrak=mati.

-mmulhw -mno-mulhw Hasilkan kode yang menggunakan (tidak menggunakan) setengah kata, gandakan dan gandakan-akumulasi instruksi pada prosesor IBM 405, 440, 464 dan 476. Instruksi ini adalah dihasilkan secara default saat menargetkan prosesor tersebut.

-mdlmzb -mno-dlmzb Hasilkan kode yang menggunakan (tidak menggunakan) pencarian string dlmzb instruksi pada IBM 405, 440, 464 dan 476 prosesor. Instruksi ini dihasilkan secara default ketika menargetkan prosesor tersebut.

-mno-bit-align -mbit-sejajarkan Pada Sistem V.4 dan sistem PowerPC tertanam tidak (melakukan) memaksa struktur dan serikat pekerja yang berisi bidang bit untuk disejajarkan dengan tipe dasar bidang bit.

Misalnya, secara default sebuah struktur tidak berisi apa-apa selain 8 bidang bit "tidak ditandatangani" dari panjang 1 disejajarkan dengan batas 4-byte dan memiliki ukuran 4 byte. Dengan menggunakan -mno-bit-align, struktur disejajarkan dengan batas 1 byte dan berukuran 1 byte.

-mno-strict-align -mtrict-align Pada Sistem V.4 dan sistem PowerPC tertanam tidak (melakukan) asumsi bahwa memori tidak selaras referensi ditangani oleh sistem.

-mrelokasi -mno-relokasi Hasilkan kode yang memungkinkan (tidak mengizinkan) executable statis untuk dipindahkan ke a alamat yang berbeda pada saat dijalankan. Pemuat sistem PowerPC tertanam sederhana harus pindahkan seluruh isi ".got2" dan lokasi 4-byte yang terdaftar di ".fixup" bagian, tabel alamat 32-bit yang dihasilkan oleh opsi ini. Agar ini berhasil, semuanya objek yang ditautkan bersama harus dikompilasi dengan -mrelokasi or -mrelocatable-lib. -mrelokasi kode menyelaraskan tumpukan ke batas 8-byte.

-mrelocatable-lib -mno-relocatable-lib Seperti -mrelokasi, -mrelocatable-lib menghasilkan bagian ".fixup" untuk memungkinkan statis executable untuk dipindahkan pada saat run time, tapi -mrelocatable-lib tidak menggunakan perataan tumpukan yang lebih kecil dari -mrelokasi. Objek dikompilasi dengan -mrelocatable-lib mungkin dihubungkan dengan objek yang dikompilasi dengan kombinasi apa pun dari -mrelokasi Pilihan.

-mno-toc -mtoc Pada Sistem V.4 dan sistem PowerPC tertanam tidak (melakukan) menganggap bahwa register 2 berisi: pointer ke area global yang menunjuk ke alamat yang digunakan dalam program.

-sedikit -mlittle-endian Pada Sistem V.4 dan sistem PowerPC tertanam, kompilasi kode untuk prosesor dalam waktu singkat. modus endian. NS -mlittle-endian pilihannya sama dengan -sedikit.

-mbig -mbig-endian Pada Sistem V.4 dan sistem PowerPC tertanam, kompilasi kode untuk prosesor secara besar- modus endian. NS -mbig-endian pilihannya sama dengan -mbig.

-mdynamic-no-pic Pada sistem Darwin dan Mac OS X, kompilasi kode sehingga tidak dapat dipindahkan, tetapi itu referensi eksternalnya dapat dipindahkan. Kode yang dihasilkan cocok untuk aplikasi, tetapi bukan perpustakaan bersama.

-basis-gambar-tunggal Perlakukan register yang digunakan untuk pengalamatan PIC sebagai read-only, daripada memuatnya di prolog untuk setiap fungsi. Sistem runtime bertanggung jawab untuk menginisialisasi ini mendaftar dengan nilai yang sesuai sebelum eksekusi dimulai.

-prioritas-dibatasi-insns=prioritas Opsi ini mengontrol prioritas yang ditetapkan ke slot pengiriman yang dibatasi instruksi selama lulus penjadwalan kedua. Argumen prioritas mengambil nilai 0, 1, atau 2 untuk menetapkan prioritas tidak, tertinggi, atau tertinggi kedua (masing-masing) untuk instruksi terbatas slot pengiriman.

-msched-mahal-dep=ketergantungan_tipe Opsi ini mengontrol ketergantungan mana yang dianggap mahal oleh target selama penjadwalan instruksi. Argumen ketergantungan_tipe mengambil salah satu dari berikut: nilai:

tidak Tidak ada ketergantungan yang mahal.

semua Semua ketergantungan itu mahal.

true_store_to_load Ketergantungan sejati dari toko ke pemuatan mahal.

store_to_load Ketergantungan apa pun dari toko ke pemuatan mahal.

jumlah Ketergantungan apa pun yang latensinya lebih besar dari atau sama dengan jumlah mahal.

-minsert-sched-nops=skema Opsi ini mengontrol skema penyisipan NOP mana yang digunakan selama penjadwalan kedua lulus. Argumen skema mengambil salah satu dari nilai berikut:

tidak Jangan masukkan NOP.

bantalan Pad dengan NOP setiap grup pengiriman yang memiliki slot masalah kosong, menurut pengelompokan penjadwal.

regroup_exact Masukkan NOPs untuk memaksa losmen tergantung mahal ke dalam kelompok terpisah. Sisipkan dengan tepat sebanyak NOP yang diperlukan untuk memaksa sebuah penginapan ke grup baru, menurut perkiraan pengelompokan prosesor.

jumlah Masukkan NOPs untuk memaksa losmen tergantung mahal ke dalam kelompok terpisah. Memasukkan jumlah NOP untuk memaksa losmen ke grup baru.

-mcall-sysv Pada Sistem V.4 dan sistem PowerPC tertanam, kompilasi kode menggunakan konvensi pemanggilan yang mematuhi draf Antarmuka Biner Aplikasi Sistem V pada bulan Maret 1995, PowerPC suplemen prosesor. Ini adalah default kecuali Anda mengonfigurasi GCC menggunakan powerpc-*-eabiaix.

-mcall-sysv-eabi -mcall-eabi Tentukan keduanya -mcall-sysv serta -meabi Pilihan.

-mcall-sysv-noeabi Tentukan keduanya -mcall-sysv serta -mno-eabi Pilihan.

-mcall-aixdesc Pada Sistem V.4 dan sistem PowerPC tertanam, kompilasi kode untuk sistem operasi AIX.

-mcall-linux Pada Sistem V.4 dan sistem PowerPC tertanam, kompilasi kode untuk GNU berbasis Linux sistem.

-mcall-freebsd Pada Sistem V.4 dan sistem PowerPC tertanam, kompilasi kode untuk pengoperasian FreeBSD sistem.

-mcall-netbsd Pada Sistem V.4 dan sistem PowerPC tertanam, kompilasi kode untuk operasi NetBSD sistem.

-mcall-openbsd Pada Sistem V.4 dan sistem PowerPC tertanam, kompilasi kode untuk operasi OpenBSD sistem.

-maix-struct-return Kembalikan semua struktur dalam memori (seperti yang ditentukan oleh AIX ABI).

-msvr4-struct-return Kembalikan struktur yang lebih kecil dari 8 byte dalam register (seperti yang ditentukan oleh SVR4 ABI).

-mabi=tipe abi Perluas ABI saat ini dengan ekstensi tertentu, atau hapus ekstensi tersebut. Sah nilai adalah altivec, no-altivec, spe, tanpa spesifikasi, ibmlongdouble, ieelongdouble, elfv1, elfv2.

-mabi=spesi Perluas ABI saat ini dengan ekstensi SPE ABI. Ini tidak mengubah ABI default, melainkan menambahkan ekstensi SPE ABI ke ABI saat ini.

-mabi=tidak ada spesifikasi Nonaktifkan ekstensi Book-E SPE ABI untuk ABI saat ini.

-mabi=ibmlongdouble Ubah ABI saat ini untuk menggunakan double-panjang presisi panjang IBM. Ini adalah PowerPC Opsi ABI SYSV 32-bit.

-mabi=ieeelongdouble Ubah ABI saat ini untuk menggunakan IEEE extended-precision long double. Ini adalah PowerPC Opsi ABI Linux 32-bit.

-mabi=elfv1 Ubah ABI saat ini untuk menggunakan ELFv1 ABI. Ini adalah ABI default untuk big-endian PowerPC 64-bit Linux. Mengganti ABI default memerlukan dukungan sistem khusus dan kemungkinan akan gagal dengan cara yang spektakuler.

-mabi=elfv2 Ubah ABI saat ini untuk menggunakan ELFv2 ABI. Ini adalah ABI default untuk sedikit- endian PowerPC 64-bit Linux. Mengganti ABI default memerlukan sistem khusus dukungan dan kemungkinan akan gagal dengan cara yang spektakuler.

-mprototipe -mno-prototipe Pada Sistem V.4 dan sistem PowerPC tertanam mengasumsikan bahwa semua panggilan ke argumen variabel fungsi diprototipe dengan benar. Jika tidak, kompiler harus memasukkan instruksi sebelum setiap panggilan non-prototipe untuk mengatur atau menghapus bit 6 dari register kode kondisi ("CR") untuk menunjukkan apakah nilai floating-point dilewatkan di floating-point register jika fungsi mengambil argumen variabel. Dengan -mprototipe, hanya panggilan untuk fungsi argumen variabel prototipe mengatur atau menghapus bit.

-msim Pada sistem PowerPC tertanam, asumsikan bahwa modul startup disebut sim-crt0.o serta bahwa perpustakaan C standar adalah libsim.a serta libc.a. Ini adalah default untuk powerpc-*-eabisim Konfigurasi.

-mmvme Pada sistem PowerPC tertanam, asumsikan bahwa modul startup disebut crt0.o dan perpustakaan C standar adalah libmvme.a serta libc.a.

-gila Pada sistem PowerPC tertanam, asumsikan bahwa modul startup disebut crt0.o dan perpustakaan C standar adalah libads.a serta libc.a.

-myellowknife Pada sistem PowerPC tertanam, asumsikan bahwa modul startup disebut crt0.o dan perpustakaan C standar adalah libyk.a serta libc.a.

-mvxworks Pada Sistem V.4 dan sistem PowerPC tertanam, tentukan bahwa Anda sedang mengkompilasi untuk a sistem VxWorks.

-anggota Pada sistem PowerPC tertanam, atur bit "PPC_EMB" di header flag ELF untuk menunjukkan bahwa eabi relokasi diperpanjang digunakan.

-meabi -mno-eabi Pada Sistem V.4 dan sistem PowerPC tertanam tidak (tidak) mematuhi Embedded Applications Binary Interface (EABI), yang merupakan kumpulan modifikasi pada Sistem Spesifikasi V.4. Memilih -meabi berarti bahwa tumpukan disejajarkan dengan 8-byte batas, fungsi "__eabi" dipanggil dari "utama" untuk mengatur lingkungan EABI, dan -msdata opsi dapat menggunakan "r2" dan "r13" untuk menunjuk ke dua data kecil yang terpisah daerah. Memilih -mno-eabi berarti bahwa tumpukan disejajarkan dengan batas 16-byte, tidak Fungsi inisialisasi EABI dipanggil dari "main", dan -msdata pilihan hanya menggunakan "r13" untuk menunjuk ke satu area data kecil. NS -meabi opsi aktif secara default jika Anda mengkonfigurasi GCC menggunakan salah satu dari powerpc*-*-eabi* Pilihan.

-msdata=eabi Pada Sistem V.4 dan sistem PowerPC tertanam, letakkan "const" global kecil yang diinisialisasi dan data statis di bagian ".sdata2", yang ditunjuk oleh register "r2". Taruh kecil menginisialisasi data global dan statis non-"const" di bagian ".sdata", yaitu ditunjuk oleh register "r13". Masukkan data global dan statis kecil yang tidak diinisialisasi ke dalam Bagian ".sbss", yang bersebelahan dengan bagian ".sdata". NS -msdata=eabi Option tidak sesuai dengan -mrelokasi pilihan. Itu -msdata=eabi opsi juga mengatur -anggota .

-msdata=sysv Pada Sistem V.4 dan sistem PowerPC tertanam, masukkan data global dan statis kecil ke dalam Bagian ".sdata", yang ditunjuk oleh register "r13". Masukan kecil yang tidak diinisialisasi data global dan statis di bagian ".sbss", yang bersebelahan dengan ".sdata" bagian. NS -msdata=sysv opsi tidak sesuai dengan -mrelokasi .

-msdata=default -msdata Pada Sistem V.4 dan sistem PowerPC tertanam, jika -meabi digunakan, kompilasi kode yang sama as -msdata=eabi, jika tidak, kompilasi kode yang sama dengan -msdata=sysv.

-msdata=data Pada Sistem V.4 dan sistem PowerPC tertanam, masukkan data global kecil di ".sdata" bagian. Letakkan data global kecil yang tidak diinisialisasi di bagian ".sbss". Jangan gunakan daftarkan "r13" untuk menangani data kecil. Ini adalah perilaku default kecuali lain -msdata opsi digunakan.

-msdata=tidak ada -mno-sdata Pada sistem PowerPC tertanam, letakkan semua data global dan statis yang diinisialisasi di ".data" bagian, dan semua data yang tidak diinisialisasi di bagian ".bss".

-mblock-move-inline-limit=num Sebaris semua gerakan blok (seperti panggilan ke "memcpy" atau salinan struktur) kurang dari atau sama dengan num byte. Nilai minimum untuk num adalah 32 byte pada target 32-bit dan 64 byte pada target 64-bit. Nilai default adalah target-spesifik.

-G num Pada sistem PowerPC tertanam, letakkan item global dan statis kurang dari atau sama dengan num byte ke dalam data kecil atau bagian BSS alih-alih data normal atau bagian BSS. Secara default, num adalah 8. The -G num switch juga diteruskan ke linker. Semua modul harus dikompilasi dengan yang sama -G num nilai.

-nama-nama -mno-regnames Pada Sistem V.4 dan sistem PowerPC tertanam melakukan (tidak) memancarkan nama register di keluaran bahasa rakitan menggunakan bentuk simbolik.

-mlongcall -mno-panggilan panjang Secara default asumsikan bahwa semua panggilan jauh sehingga lebih lama dan lebih mahal urutan panggilan diperlukan. Ini diperlukan untuk panggilan lebih jauh dari 32 megabita (33,554,432 byte) dari lokasi saat ini. Panggilan singkat dibuat jika compiler tahu panggilan tidak bisa sejauh itu. Pengaturan ini dapat ditimpa oleh atribut fungsi "panggilan singkat", atau dengan "#pragma panggilan panjang(0) ".

Beberapa tautan mampu mendeteksi panggilan di luar jangkauan dan menghasilkan kode lem pada lalat. Pada sistem ini, panggilan panjang tidak diperlukan dan menghasilkan kode yang lebih lambat. Sebagai dari tulisan ini, tautan AIX dapat melakukan ini, seperti halnya tautan GNU untuk PowerPC/64. Dia direncanakan untuk menambahkan fitur ini ke linker GNU untuk sistem PowerPC 32-bit juga.

Pada sistem Darwin/PPC, "#pragma longcall" menghasilkan "jbsr callee, L42", ditambah cabang pulau (kode lem). Dua alamat target mewakili callee dan cabang Pulau. Linker Darwin/PPC lebih memilih alamat pertama dan menghasilkan "bl callee" jika instruksi "bl" PPC mencapai callee secara langsung; jika tidak, linker menghasilkan "bl L42" untuk memanggil pulau cabang. Pulau cabang ditambahkan ke tubuh fungsi panggilan; itu menghitung alamat 32-bit penuh dari callee dan melompat ke sana.

Pada sistem Mach-O (Darwin), opsi ini mengarahkan emisi kompilator ke lem untuk setiap panggilan langsung, dan linker Darwin memutuskan apakah akan menggunakan atau membuangnya.

Di masa mendatang, GCC mungkin mengabaikan semua spesifikasi panggilan panjang saat tautan diketahui menghasilkan lem.

-mtls-spidol -mno-tls-spidol Tandai (jangan tandai) panggilan ke "__tls_get_addr" dengan relokasi yang menentukan fungsi argumen. Relokasi memungkinkan penaut untuk secara andal mengaitkan panggilan fungsi dengan instruksi penyiapan argumen untuk pengoptimalan TLS, yang pada gilirannya memungkinkan GCC menjadi lebih baik jadwalkan urutannya.

-utas Menambahkan dukungan untuk multithreading dengan utas Perpustakaan. Opsi ini menetapkan tanda untuk baik preprocessor maupun linker.

-mrecip -mno-recip Opsi ini memungkinkan penggunaan estimasi timbal balik dan estimasi akar kuadrat timbal balik instruksi dengan langkah-langkah Newton-Raphson tambahan untuk meningkatkan presisi alih-alih melakukan membagi atau akar kuadrat dan membagi untuk argumen floating-point. Kamu harus menggunakan itu -cepat-matematika pilihan saat menggunakan -mrecip (atau setidaknya optimasi -funsafe-matematika, -terbatas-matematika-saja, -freciprocal-matematika serta -fno-perangkap-matematika). Perhatikan bahwa sementara throughput urutan umumnya lebih tinggi daripada throughput non- instruksi timbal balik, ketepatan urutan dapat dikurangi hingga 2 ulp (yaitu kebalikan dari 1.0 sama dengan 0.99999994) untuk akar kuadrat timbal balik.

-mrecip=memilih Opsi ini mengontrol instruksi perkiraan timbal balik mana yang dapat digunakan. memilih adalah daftar opsi yang dipisahkan koma, yang dapat didahului dengan tanda "!" untuk membalikkan opsi:

semua Aktifkan semua petunjuk perkiraan.

kegagalan Aktifkan instruksi default, setara dengan -mrecip.

tak satupun Nonaktifkan semua instruksi perkiraan, setara dengan -mno-recip.

div Aktifkan instruksi perkiraan timbal balik untuk tunggal dan ganda presisi.

divf Aktifkan instruksi perkiraan timbal balik presisi tunggal.

divd Aktifkan instruksi perkiraan timbal balik presisi ganda.

rsqrt Aktifkan instruksi aproksimasi akar kuadrat timbal balik untuk tunggal dan presisi ganda.

rsqrtf Aktifkan instruksi aproksimasi akar kuadrat timbal balik presisi tunggal.

rsqrtd Aktifkan instruksi aproksimasi akar kuadrat timbal balik presisi ganda.

Jadi, misalnya, -mrecip=semua,!rsqrtd memungkinkan semua perkiraan timbal balik instruksi, kecuali untuk instruksi "FRSQRTE", "XSRSQRTEDP", dan "XVRSQRTEDP" yang menangani perhitungan akar kuadrat timbal balik presisi ganda.

-mrecip-presisi -mno-recip-presisi Asumsikan (jangan berasumsi) bahwa instruksi perkiraan timbal balik memberikan perkiraan presisi daripada yang diamanatkan oleh PowerPC ABI. Memilih -mcpu = daya6, -mcpu = daya7 or -mcpu = daya8 otomatis memilih -mrecip-presisi. ganda- instruksi estimasi akar kuadrat presisi tidak dihasilkan secara default pada mesin presisi, karena mereka tidak memberikan perkiraan yang konvergen setelah tiga tangga.

-mveclibabi=mengetik Menentukan jenis ABI yang akan digunakan untuk membuat vektor intrinsik menggunakan perpustakaan eksternal. Satu-satunya jenis yang didukung saat ini adalah massa, yang menetapkan untuk menggunakan IBM's Mathematical Pustaka Subsistem Akselerasi (MASS) untuk membuat vektor intrinsik menggunakan eksternal perpustakaan. GCC saat ini memancarkan panggilan ke "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", dan "tanhf4" saat membuat kode untuk power7. Keduanya -ftree-vectorize serta optimasi -funsafe-matematika juga harus diaktifkan. Perpustakaan MASS harus ditentukan pada waktu tautan.

-mfriz -mno-friz Hasilkan (jangan buat) instruksi "friz" saat optimasi -funsafe-matematika opsi digunakan untuk mengoptimalkan pembulatan nilai titik-mengambang ke bilangan bulat 64-bit dan kembali ke titik mengambang. Instruksi "friz" tidak mengembalikan nilai yang sama jika bilangan floating-point terlalu besar untuk dimasukkan ke dalam bilangan bulat.

-mpointer-ke-bersarang-fungsi -mno-pointer-to-bersarang-fungsi Hasilkan (jangan buat) kode untuk memuat register rantai statis ("r11") ketika memanggil melalui pointer pada sistem AIX dan Linux 64-bit di mana pointer fungsi menunjuk ke deskriptor 3 kata yang memberikan alamat fungsi, nilai TOC yang akan dimuat register "r2", dan nilai rantai statis untuk dimuat di register "r11". NS -mpointer-ke-bersarang-fungsi aktif secara default. Anda tidak dapat menelepon melalui petunjuk ke fungsi bersarang atau pointer ke fungsi yang dikompilasi dalam bahasa lain yang menggunakan rantai statis jika Anda menggunakan -mno-pointer-to-bersarang-fungsi.

-msave-toc-tidak langsung -mno-save-toc-tidak langsung Hasilkan (jangan buat) kode untuk menyimpan nilai TOC di lokasi tumpukan yang dipesan dalam prolog fungsi jika fungsi memanggil melalui pointer pada AIX dan 64-bit sistem Linux. Jika nilai TOC tidak disimpan di prolog, itu disimpan sebelum panggilan melalui pointer. NS -mno-save-toc-tidak langsung pilihan adalah default.

-mcompat-align-parm -mno-compat-align-parm Hasilkan (jangan buat) kode untuk melewati parameter struktur dengan keselarasan maksimum 64 bit, untuk kompatibilitas dengan versi GCC yang lebih lama.

Versi GCC yang lebih lama (sebelum 4.9.0) salah tidak menyelaraskan parameter struktur pada batas 128-bit ketika struktur itu berisi anggota yang membutuhkan 128-bit penyelarasan. Ini diperbaiki di versi GCC yang lebih baru. Opsi ini dapat digunakan untuk menghasilkan kode yang kompatibel dengan fungsi yang dikompilasi dengan versi yang lebih lama dari GCC.

The -mno-compat-align-parm pilihan adalah default.

RX Opsi

Opsi baris perintah ini ditentukan untuk target RX:

-m64bit-ganda -m32bit-ganda Jadikan tipe data "ganda" menjadi 64 bit (-m64bit-ganda) atau 32 bit (-m32bit-ganda) dalam ukuran. Standarnya adalah -m32bit-ganda. Note Perangkat keras floating-point RX hanya berfungsi pada nilai 32-bit, itulah sebabnya defaultnya adalah -m32bit-ganda.

-fpu -nofpu Mengaktifkan (-fpu) atau menonaktifkan (-nofpu) penggunaan perangkat keras titik-mengambang RX. NS default diaktifkan untuk seri RX600 dan dinonaktifkan untuk seri RX200.

Instruksi floating-point hanya dihasilkan untuk nilai floating-point 32-bit, namun, jadi perangkat keras FPU tidak digunakan untuk dobel jika -m64bit-ganda pilihannya adalah bekas.

Note Jika -fpu opsi diaktifkan kemudian optimasi -funsafe-matematika juga diaktifkan secara otomatis. Ini karena instruksi RX FPU sendiri tidak aman.

-mcpu=nama Memilih jenis CPU RX yang akan ditargetkan. Saat ini tiga jenis didukung, yaitu umum RX600 serta RX200 perangkat keras seri dan spesifik RX610 CPU. Standarnya adalah RX600.

Satu-satunya perbedaan antara RX600 serta RX610 adalah bahwa RX610 tidak mendukung instruksi "MVTIPL".

The RX200 seri tidak memiliki unit titik-mengambang perangkat keras dan sebagainya -nofpu diaktifkan secara default ketika jenis ini dipilih.

-mbig-endian-data -sedikit-endian-data Simpan data (tetapi bukan kode) dalam format big-endian. Standarnya adalah -sedikit-endian-data, yaitu untuk menyimpan data dalam format little-endian.

-msmall-data-limit=N Menentukan ukuran maksimum dalam byte variabel global dan statis yang dapat ditempatkan ke dalam area data kecil. Menggunakan area data kecil dapat menyebabkan lebih kecil dan lebih cepat kode, tetapi ukuran area terbatas dan terserah programmer untuk memastikan bahwa daerah tidak meluap. Juga ketika area data kecil digunakan salah satu dari RX register (biasanya "r13") dicadangkan untuk digunakan menunjuk ke area ini, jadi tidak lagi tersedia untuk digunakan oleh kompiler. Hal ini dapat mengakibatkan lebih lambat dan/atau lebih besar kode jika variabel didorong ke tumpukan alih-alih ditahan di register ini.

Catatan, variabel umum (variabel yang belum diinisialisasi) dan konstanta adalah tidak ditempatkan ke dalam area data kecil karena ditugaskan ke bagian lain di keluaran dapat dieksekusi.

Nilai default adalah nol, yang menonaktifkan fitur ini. Catatan, fitur ini tidak diaktifkan secara default dengan tingkat pengoptimalan yang lebih tinggi (-O2 dll) karena efek yang berpotensi merugikan dari pemesanan register. Terserah programmernya untuk bereksperimen dan menemukan apakah fitur ini bermanfaat bagi program mereka. Lihat deskripsi dari -mpid opsi untuk deskripsi tentang cara mendaftar yang sebenarnya tahan pointer area data kecil dipilih.

-msim -mno-sim Gunakan waktu proses simulator. Standarnya adalah menggunakan runtime khusus papan libgloss.

-mas100-sintaks -mno-as100-sintaks Saat menghasilkan keluaran assembler, gunakan sintaks yang kompatibel dengan AS100 . Renesas perakit. Sintaks ini juga dapat ditangani oleh assembler GAS, tetapi memiliki beberapa: pembatasan sehingga tidak dihasilkan secara default.

-mmax-constant-size=N Menentukan ukuran maksimum, dalam byte, dari konstanta yang dapat digunakan sebagai operan dalam instruksi RX. Meskipun set instruksi RX memungkinkan konstanta hingga 4 byte panjangnya untuk digunakan dalam instruksi, nilai yang lebih panjang sama dengan yang lebih panjang petunjuk. Jadi, dalam beberapa keadaan, akan bermanfaat untuk membatasi ukuran konstanta yang digunakan dalam instruksi. Konstanta yang terlalu besar adalah sebagai gantinya ditempatkan ke dalam kumpulan konstan dan direferensikan melalui tipuan register.

Nilai N bisa antara 0 dan 4. Nilai 0 (default) atau 4 berarti konstanta dengan ukuran berapa pun diperbolehkan.

-santai Aktifkan relaksasi linker. Relaksasi linker adalah proses dimana linker mencoba untuk mengurangi ukuran program dengan menemukan versi yang lebih pendek dari berbagai instruksi. Dinonaktifkan secara default.

-mint-register=N Tentukan jumlah register yang akan dicadangkan untuk fungsi penanganan interupsi cepat. NS nilai N bisa antara 0 dan 4. Nilai 1 berarti register "r13" dicadangkan untuk penggunaan eksklusif penangan interupsi cepat. Nilai 2 cadangan "r13" dan "r12". Nilai 3 cadangan "r13", "r12" dan "r11", dan nilai 4 cadangan "r13" melalui "r10". Nilai 0, default, tidak mencadangkan register apa pun.

-msave-acc-in-interrupt Menentukan bahwa fungsi pengendali interupsi harus mempertahankan register akumulator. Ini hanya diperlukan jika kode normal mungkin menggunakan register akumulator, misalnya karena melakukan perkalian 64-bit. Standarnya adalah mengabaikan akumulator karena ini membuat penangan interupsi lebih cepat.

-mpid -mno-pid Memungkinkan pembuatan data independen posisi. Saat mengaktifkan akses apa pun ke data konstan dilakukan melalui offset dari alamat dasar yang disimpan dalam register. Ini memungkinkan lokasi data konstan ditentukan pada waktu berjalan tanpa memerlukan yang dapat dieksekusi untuk dipindahkan, yang merupakan manfaat untuk aplikasi yang disematkan dengan ketat kendala memori. Data yang dapat dimodifikasi tidak terpengaruh oleh opsi ini.

Catatan, menggunakan fitur ini mencadangkan register, biasanya "r13", untuk data konstan alamat dasar. Ini dapat menghasilkan kode yang lebih lambat dan/atau lebih besar, terutama dalam kode yang rumit fungsi.

Register aktual yang dipilih untuk menyimpan alamat basis data konstan tergantung pada apakah itu -msmall-data-batas dan / atau -mint-daftar opsi baris perintah diaktifkan. Dimulai dengan register "r13" dan melanjutkan ke bawah, register dialokasikan terlebih dahulu untuk memenuhi persyaratan -mint-daftar, kemudian -mpid dan akhirnya -msmall-data-batas. Jadi dimungkinkan untuk register area data kecil menjadi "r8" jika keduanya -mint-register=4 serta -mpid ditentukan pada baris perintah.

Secara default fitur ini tidak diaktifkan. Default dapat dipulihkan melalui -mno-pid opsi baris perintah.

-mno-peringatkan-beberapa-cepat-interupsi -mwarn-multiple-fast-interrupt Mencegah GCC mengeluarkan pesan peringatan jika menemukan lebih dari satu interupsi cepat handler ketika sedang mengkompilasi file. Standarnya adalah mengeluarkan peringatan untuk setiap ekstra penangan interupsi cepat ditemukan, karena RX hanya mendukung satu interupsi tersebut.

Catatan: Opsi baris perintah GCC generik -tetap-reg memiliki arti khusus untuk RX port ketika digunakan dengan atribut fungsi "interrupt". Atribut ini menunjukkan fungsi yang dimaksudkan untuk memproses interupsi cepat. GCC memastikan bahwa itu hanya menggunakan register "r10", "r11", "r12" dan/atau "r13" dan hanya dengan ketentuan bahwa penggunaan normal register yang sesuai telah dibatasi melalui -tetap-reg or -mint-daftar opsi baris perintah.

S / 390 serta zSeri Opsi

Ini adalah -m opsi yang ditentukan untuk arsitektur S/390 dan zSeries.

-mhard-float -msoft-float Gunakan (jangan gunakan) instruksi floating-point perangkat keras dan register untuk floating- operasi titik. Kapan -msoft-float ditentukan, berfungsi dalam libgcc.a digunakan untuk melakukan operasi floating-point. Kapan -mhard-float ditentukan, kompiler menghasilkan instruksi floating-point IEEE. Ini adalah default.

-mhard-dfp -mno-hard-dfp Gunakan (jangan gunakan) instruksi titik-mengambang desimal perangkat keras untuk operasi floating-point. Kapan -mno-hard-dfp ditentukan, berfungsi dalam libgcc.a adalah digunakan untuk melakukan operasi titik-mengambang desimal. Kapan -mhard-dfp ditentukan, compiler menghasilkan instruksi perangkat keras titik-mengambang desimal. Ini defaultnya untuk -maret=z9-ec atau lebih tinggi.

-mlong-ganda-64 -mlong-ganda-128 Sakelar ini mengontrol ukuran tipe "ganda panjang". Ukuran 64 bit membuat jenis "ganda panjang" setara dengan jenis "ganda". Ini adalah default.

-mbackchain -mno-rantai belakang Simpan (jangan simpan) alamat frame pemanggil sebagai penunjuk backchain ke dalam bingkai tumpukan callee. Sebuah backchain mungkin diperlukan untuk memungkinkan debugging menggunakan alat yang tidak mengerti informasi bingkai panggilan DWARF 2. Kapan -mno-packed-stack dalam efeknya, penunjuk rantai belakang disimpan di bagian bawah bingkai tumpukan; Kapan -mpacked-stack berlaku, backchain ditempatkan ke kata paling atas dari 96/160 byte register simpan area.

Secara umum, kode dikompilasi dengan -mbackchain kompatibel dengan panggilan dengan kode yang dikompilasi dengan -mmo-rantai belakang; namun, penggunaan backchain untuk keperluan debugging biasanya membutuhkan bahwa seluruh biner dibangun dengan -mbackchain. Perhatikan bahwa kombinasi dari -mbackchain, -mpacked-stack serta -mhard-float tidak didukung. Untuk membangun penggunaan kernel linux -msoft-float.

Standarnya adalah tidak mempertahankan backchain.

-mpacked-stack -mno-packed-stack Gunakan (jangan gunakan) tata letak tumpukan yang dikemas. Kapan -mno-packed-stack ditentukan, kompiler menggunakan semua bidang area penyimpanan register 96/160 byte hanya untuk tujuan default; bidang yang tidak digunakan masih menggunakan ruang tumpukan. Kapan -mpacked-stack is ditentukan, slot register save dikemas dengan padat di bagian atas register save daerah; ruang yang tidak terpakai digunakan kembali untuk tujuan lain, memungkinkan penggunaan yang lebih efisien ruang tumpukan yang tersedia. Namun, ketika -mbackchain juga berlaku, paling atas kata area penyimpanan selalu digunakan untuk menyimpan rantai belakang, dan alamat pengirim register selalu disimpan dua kata di bawah backchain.

Selama backchain bingkai tumpukan tidak digunakan, kode dibuat dengan -mpacked-stack kompatibel dengan panggilan dengan kode yang dihasilkan dengan -mno-packed-stack. Perhatikan bahwa beberapa non-FSF rilis GCC 2.95 untuk kode yang dihasilkan S/390 atau zSeries yang menggunakan bingkai tumpukan backchain saat run time, bukan hanya untuk keperluan debugging. Kode seperti itu bukan panggilan- kompatibel dengan kode yang dikompilasi dengan -mpacked-stack. Juga, perhatikan bahwa kombinasi dari -mbackchain, -mpacked-stack serta -mhard-float tidak didukung. Untuk membangun penggunaan kernel linux -msoft-float.

Standarnya adalah tidak menggunakan tata letak tumpukan yang dikemas.

-msmall-exec -mno-kecil-exec Hasilkan (atau jangan buat) kode menggunakan instruksi "bras" untuk melakukan subrutin panggilan. Ini hanya berfungsi dengan andal jika total ukuran yang dapat dieksekusi tidak melebihi 64k. Standarnya adalah menggunakan instruksi "basr", yang tidak memiliki ini keterbatasan.

-m64 -m31 Ketika -m31 ditentukan, buat kode yang sesuai dengan GNU/Linux untuk S/390 ABI. Kapan -m64 ditentukan, buat kode yang sesuai dengan GNU/Linux untuk zSeries ABI. Ini memungkinkan GCC khususnya untuk menghasilkan instruksi 64-bit. Untuk s390 target, itu defaultnya adalah -m31, Sedangkan s390x target default ke -m64.

-mzarch -mesa Ketika -mzarch ditentukan, buat kode menggunakan instruksi yang tersedia di z/Arsitektur. Kapan -mesa ditentukan, buat kode menggunakan instruksi tersedia di ESA/390. Perhatikan bahwa -mesa tidak mungkin dengan -m64. Saat menghasilkan kode sesuai dengan GNU/Linux untuk S/390 ABI, standarnya adalah -mesa. Saat menghasilkan kode yang sesuai dengan GNU/Linux untuk zSeries ABI, standarnya adalah -mzarch.

-mmvcle -mno-mvcle Hasilkan (atau jangan buat) kode menggunakan instruksi "mvcle" untuk melakukan blok bergerak. Kapan -mno-mvcle ditentukan, gunakan loop "mvc" sebagai gantinya. Ini defaultnya kecuali mengoptimalkan ukuran.

-mdebug -mno-debug Cetak (atau jangan cetak) informasi debug tambahan saat kompilasi. Standarnya adalah untuk tidak mencetak informasi debug.

-maret=tipe cpu Hasilkan kode yang berjalan pada tipe cpu, yang merupakan nama sistem yang mewakili a jenis prosesor tertentu. Nilai yang mungkin untuk tipe cpu adalah g5, g6, z900, z990, z9-109, z9-ec, z10, z196, zEC12, dan z13. Saat membuat kode menggunakan instruksi tersedia di z/Arsitektur, defaultnya adalah -maret=z900. Jika tidak, defaultnya adalah -maret=g5.

-mtune=tipe cpu Dengarkan tipe cpu semua yang berlaku tentang kode yang dihasilkan, kecuali untuk ABI dan set instruksi yang tersedia. Daftar dari tipe cpu nilainya sama dengan -berbaris. Defaultnya adalah nilai yang digunakan untuk -berbaris.

-mtpf-trace -mno-tpf-trace Hasilkan kode yang menambahkan (tidak menambahkan) di cabang khusus OS TPF untuk melacak rutinitas dalam sistem operasi. Opsi ini tidak aktif secara default, bahkan saat kompilasi untuk TPF OS.

-mfused-madd -mno-menyatu-madd Hasilkan kode yang menggunakan (tidak menggunakan) perkalian dan akumulasi floating-point instruksi. Instruksi ini dihasilkan secara default jika perangkat keras floating point digunakan.

-mwarn-framesize=ukuran bingkai Keluarkan peringatan jika fungsi saat ini melebihi ukuran bingkai yang diberikan. Karena ini adalah pemeriksaan waktu kompilasi tidak perlu menjadi masalah nyata saat program berjalan. Dia dimaksudkan untuk mengidentifikasi fungsi yang paling mungkin menyebabkan stack overflow. Dia berguna untuk digunakan di lingkungan dengan ukuran tumpukan terbatas misalnya kernel linux.

-mwarn-dynamicstack Keluarkan peringatan jika fungsi memanggil "alloca" atau menggunakan array berukuran dinamis. Ini umumnya merupakan ide yang buruk dengan ukuran tumpukan terbatas.

-mstack-guard=penjaga tumpukan -ukuran-mstack=ukuran tumpukan Jika opsi ini disediakan, bagian belakang S/390 mengeluarkan instruksi tambahan di fungsi prolog yang memicu jebakan jika ukuran tumpukan adalah penjaga tumpukan byte di atas ukuran tumpukan (ingat bahwa tumpukan pada S/390 tumbuh ke bawah). jika penjaga tumpukan opsi dihilangkan kekuatan terkecil 2 lebih besar dari ukuran bingkai yang dikompilasi fungsi dipilih. Opsi ini dimaksudkan untuk digunakan untuk membantu men-debug tumpukan masalah meluap. Kode tambahan yang dipancarkan hanya menyebabkan sedikit overhead dan karenanya juga dapat digunakan dalam sistem seperti produksi tanpa kinerja yang lebih besar degradasi. Nilai yang diberikan harus merupakan pangkat eksak dari 2 dan ukuran tumpukan harus lebih besar dari penjaga tumpukan tanpa melebihi 64k. Agar efisien ekstra kode membuat asumsi bahwa tumpukan dimulai pada alamat yang selaras dengan nilainya diberikan oleh ukuran tumpukan. itu penjaga tumpukan opsi hanya dapat digunakan bersama dengan ukuran tumpukan.

-mhotpatch=pra-kata setengah,post-halfwords Jika opsi hotpatch diaktifkan, prolog fungsi "hot-patching" dibuat untuk semua fungsi dalam unit kompilasi. Label fungsi diawali dengan yang diberikan jumlah instruksi NOP dua byte (pra-kata setengah, maksimum 1000000). Setelah label, 2 * post-halfwords byte ditambahkan, menggunakan instruksi seperti NOP terbesar arsitektur memungkinkan (maksimum 1000000).

Jika kedua argumen adalah nol, hotpatching dinonaktifkan.

Opsi ini dapat diganti untuk fungsi individual dengan atribut "hotpatch".

Skor Opsi

Opsi ini ditentukan untuk implementasi Skor:

-meb Kompilasi kode untuk mode big-endian. Ini adalah default.

-mel Kompilasi kode untuk mode little-endian.

-mnhwloop Nonaktifkan pembuatan instruksi "bcnz".

-muls Aktifkan pembuatan instruksi pemuatan dan penyimpanan yang tidak selaras.

-mmac Aktifkan penggunaan instruksi multi-akumulasi. Dinonaktifkan secara default.

-mscore5 Tentukan SCORE5 sebagai arsitektur target.

-mscore5u Tentukan SCORE5U dari arsitektur target.

-mscore7 Tentukan SCORE7 sebagai arsitektur target. Ini adalah default.

-mscore7d Tentukan SCORE7D sebagai arsitektur target.

SH Opsi

Ini -m opsi ditentukan untuk implementasi SH:

-m1 Buat kode untuk SH1.

-m2 Buat kode untuk SH2.

-m2e Buat kode untuk SH2e.

-m2a-nofpu Hasilkan kode untuk SH2a tanpa FPU, atau untuk SH2a-FPU sedemikian rupa sehingga unit floating-point tidak digunakan.

-m2a-tunggal-saja Hasilkan kode untuk SH2a-FPU, sedemikian rupa sehingga tidak ada floating-point presisi ganda operasi digunakan.

-m2a-tunggal Hasilkan kode untuk SH2a-FPU dengan asumsi unit titik-mengambang dalam presisi tunggal modus secara default.

-m2a Hasilkan kode untuk SH2a-FPU dengan asumsi unit titik-mengambang dalam presisi ganda modus secara default.

-m3 Buat kode untuk SH3.

-m3e Buat kode untuk SH3e.

-m4-nofpu Hasilkan kode untuk SH4 tanpa unit titik-mengambang.

-m4-tunggal-saja Hasilkan kode untuk SH4 dengan unit floating-point yang hanya mendukung single- aritmatika presisi.

-m4-tunggal Hasilkan kode untuk SH4 dengan asumsi unit titik-mengambang dalam mode presisi tunggal secara default

-m4 Buat kode untuk SH4.

-m4-100 Buat kode untuk SH4-100.

-m4-100-nofpu Hasilkan kode untuk SH4-100 sedemikian rupa sehingga unit titik-mengambang tidak digunakan.

-m4-100-tunggal Hasilkan kode untuk SH4-100 dengan asumsi unit titik-mengambang dalam mode presisi tunggal secara default

-m4-100-tunggal-saja Hasilkan kode untuk SH4-100 sedemikian rupa sehingga tidak ada floating-point presisi ganda operasi digunakan.

-m4-200 Buat kode untuk SH4-200.

-m4-200-nofpu Hasilkan kode untuk SH4-200 tanpa sedemikian rupa sehingga unit titik-mengambang tidak bekas.

-m4-200-tunggal Hasilkan kode untuk SH4-200 dengan asumsi unit titik-mengambang dalam mode presisi tunggal secara default

-m4-200-tunggal-saja Hasilkan kode untuk SH4-200 sedemikian rupa sehingga tidak ada floating-point presisi ganda operasi digunakan.

-m4-300 Buat kode untuk SH4-300.

-m4-300-nofpu Hasilkan kode untuk SH4-300 tanpa sedemikian rupa sehingga unit titik-mengambang tidak bekas.

-m4-300-tunggal Hasilkan kode untuk SH4-300 sedemikian rupa sehingga tidak ada floating-point presisi ganda operasi digunakan.

-m4-300-tunggal-saja Hasilkan kode untuk SH4-300 sedemikian rupa sehingga tidak ada floating-point presisi ganda operasi digunakan.

-m4-340 Hasilkan kode untuk SH4-340 (tanpa MMU, tanpa FPU).

-m4-500 Hasilkan kode untuk SH4-500 (tanpa FPU). Pass -isa=sh4-nofpu ke perakit.

-m4a-nofpu Hasilkan kode untuk SH4al-dsp, atau untuk SH4a sedemikian rupa sehingga floating-point satuan tidak digunakan.

-m4a-tunggal-saja Hasilkan kode untuk SH4a, sedemikian rupa sehingga tidak ada floating-point presisi ganda operasi digunakan.

-m4a-tunggal Hasilkan kode untuk SH4a dengan asumsi unit titik-mengambang dalam presisi tunggal modus secara default.

-m4a Hasilkan kode untuk SH4a.

-m4al Sama dengan -m4a-nofpu, kecuali bahwa itu secara implisit lulus -dsp ke perakit. GCC tidak menghasilkan instruksi DSP saat ini.

-m5-32media Hasilkan kode 32-bit untuk SHmedia.

-m5-32media-nofpu Hasilkan kode 32-bit untuk SHmedia sedemikian rupa sehingga unit titik-mengambang tidak bekas.

-m5-64media Hasilkan kode 64-bit untuk SHmedia.

-m5-64media-nofpu Hasilkan kode 64-bit untuk SHmedia sedemikian rupa sehingga unit titik-mengambang tidak bekas.

-m5-kompak Buat kode untuk SHcompact.

-m5-kompak-nofpu Hasilkan kode untuk SHcompact sedemikian rupa sehingga unit titik-mengambang tidak digunakan.

-mb Kompilasi kode untuk prosesor dalam mode big-endian.

-ml Kompilasi kode untuk prosesor dalam mode little-endian.

-mdalign Sejajarkan ganda pada batas 64-bit. Perhatikan bahwa ini mengubah konvensi pemanggilan, dan dengan demikian beberapa fungsi dari pustaka C standar tidak berfungsi kecuali Anda mengkompilasi ulang itu pertama dengan -mdalign.

-santai Persingkat beberapa referensi alamat pada waktu tautan, jika memungkinkan; menggunakan opsi tautan -bersantai.

-bisa ditebak Gunakan offset 32-bit dalam tabel "switch". Standarnya adalah menggunakan offset 16-bit.

-mbitop Aktifkan penggunaan instruksi manipulasi bit pada SH2A.

-mfmovd Aktifkan penggunaan instruksi "fmovd". Memeriksa -mdalign untuk kendala keselarasan.

-mrenesas Patuhi konvensi panggilan yang ditentukan oleh Renesas.

-mno-renesa Mematuhi konvensi panggilan yang ditentukan untuk GCC sebelum konvensi Renesas tersedia. Opsi ini adalah default untuk semua target rantai alat SH.

-mnomacsave Tandai register "MAC" sebagai call-clobbered, meskipun -mrenesas diberikan.

-miee -mno-ieee Kontrol kepatuhan IEEE dari perbandingan floating-point, yang memengaruhi penanganan kasus di mana hasil perbandingan tidak berurutan. Secara default -miee is secara implisit diaktifkan. Jika -finite-matematika-saja diaktifkan -mno-ieee ditetapkan secara implisit, yang menghasilkan lebih cepat floating-point lebih besar-sama dan perbandingan kurang-sama. NS pengaturan implisit dapat diganti dengan menentukan baik -miee or -mno-ieee.

-minline-ic_invalidate Kode sebaris untuk membatalkan entri cache instruksi setelah mengatur fungsi bersarang trampolin. Opsi ini tidak berpengaruh jika -musermode sedang berlaku dan dipilih opsi pembuatan kode (mis -m4) tidak mengizinkan penggunaan instruksi "icbi". Jika opsi pembuatan kode yang dipilih tidak mengizinkan penggunaan "icbi" instruksi, dan -musermode tidak berlaku, kode sebaris memanipulasi instruksi array alamat cache secara langsung dengan penulisan asosiatif. Ini tidak hanya membutuhkan mode istimewa pada saat dijalankan, tetapi juga gagal jika saluran cache telah dipetakan melalui TLB dan telah menjadi tidak dipetakan.

-ukuran Buang ukuran dan lokasi instruksi dalam kode perakitan.

-mpadstruct Opsi ini tidak digunakan lagi. Ini melapisi struktur ke kelipatan 4 byte, yaitu tidak sesuai dengan SH ABI.

-model-atomik=model Menetapkan model operasi atom dan parameter tambahan sebagai dipisahkan koma Daftar. Untuk detail tentang fungsi bawaan atom, lihat __atomik bawaan. itu model dan parameter berikut didukung:

tak satupun Nonaktifkan kompiler yang menghasilkan urutan atom dan pancarkan panggilan perpustakaan untuk atom operasi. Ini adalah default jika targetnya bukan "sh*-*-linux*".

soft-gusa Hasilkan urutan atom perangkat lunak gUSA yang kompatibel dengan GNU/Linux untuk dalam fungsi. Urutan atom yang dihasilkan memerlukan dukungan tambahan dari kode penanganan interupsi/pengecualian dari sistem dan hanya cocok untuk SH3* dan SH4* sistem inti tunggal. Opsi ini diaktifkan secara default ketika targetnya adalah "sh*-*-linux*" dan SH3* atau SH4*. Ketika targetnya adalah SH4A, opsi ini juga sebagian menggunakan instruksi atom perangkat keras "movli.l" dan "movco.l" untuk buat kode yang lebih efisien, kecuali ketat ditentukan.

soft-tcb Hasilkan urutan atom perangkat lunak yang menggunakan variabel dalam kontrol utas memblokir. Ini adalah variasi dari urutan gUSA yang juga dapat digunakan pada SH1* dan target SH2*. Urutan atom yang dihasilkan memerlukan dukungan tambahan dari kode penanganan interupsi/pengecualian dari sistem dan hanya cocok untuk sistem inti tunggal. Saat menggunakan model ini, gbr-offset= parameternya harus ditentukan juga.

topeng lembut Hasilkan urutan atom perangkat lunak yang menonaktifkan interupsi untuk sementara dengan menyetel "SR.IMASK = 1111". Model ini hanya berfungsi ketika program berjalan dalam mode istimewa dan hanya cocok untuk sistem inti tunggal. Dukungan tambahan dari kode penanganan interupsi/pengecualian dari sistem tidak diperlukan. Model ini adalah diaktifkan secara default ketika targetnya adalah "sh*-*-linux*" dan SH1* atau SH2*.

hard-llcs Hasilkan urutan atom perangkat keras menggunakan instruksi "movli.l" dan "movco.l" hanya. Ini hanya tersedia di SH4A dan cocok untuk sistem multi-inti. Karena instruksi perangkat keras hanya mendukung akses variabel atom 32 bit ke 8 atau variabel 16 bit ditiru dengan akses 32 bit. Kode dikompilasi dengan ini opsi ini juga kompatibel dengan interupsi/pengecualian model atom perangkat lunak lainnya menangani sistem jika dijalankan pada sistem SH4A. Dukungan tambahan dari kode penanganan interupsi/pengecualian sistem tidak diperlukan untuk model ini.

gbr-offset= Parameter ini menentukan offset dalam byte variabel dalam kontrol utas struktur blok yang harus digunakan oleh urutan atom yang dihasilkan ketika soft-tcb model telah dipilih. Untuk model lain, parameter ini diabaikan. Nilai yang ditentukan harus berupa bilangan bulat kelipatan empat dan dalam kisaran 0-1020.

ketat Parameter ini mencegah penggunaan campuran beberapa model atom, bahkan jika itu adalah kompatibel, dan membuat kompiler menghasilkan urutan atom yang ditentukan model saja.

-mtas Hasilkan opcode "tas.b" untuk "__atomic_test_and_set". Perhatikan bahwa tergantung pada konfigurasi perangkat keras dan perangkat lunak tertentu ini dapat menurunkan kinerja secara keseluruhan karena baris cache operan memerah yang tersirat oleh instruksi "tas.b". Pada prosesor SH4A multi-core, instruksi "tas.b" harus digunakan dengan hati-hati karena dapat mengakibatkan kerusakan data untuk konfigurasi cache tertentu.

-prefergot Saat membuat kode posisi-independen, pancarkan panggilan fungsi menggunakan Global Offset Tabel bukan Tabel Linkage Prosedur.

-musermode -mno-usermode Jangan izinkan (izinkan) kompiler menghasilkan kode mode istimewa. Menentukan -musermode juga menyiratkan -mno-inline-ic_invalidate jika kode sebaris tidak akan berfungsi dalam mode pengguna. -musermode adalah default ketika targetnya adalah "sh*-*-linux*". jika targetnya adalah SH1* atau SH2* -musermode tidak berpengaruh, karena tidak ada mode pengguna.

-multibiaya=jumlah Tetapkan biaya untuk mengasumsikan untuk penginapan berlipat ganda.

-mdiv=Trade kelima – $ 33 Trade keenam – $ 78 Tetapkan strategi pembagian yang akan digunakan untuk operasi pembagian bilangan bulat. Untuk SHmedia Trade kelima – $ 33 Trade keenam – $ 78 dapat menjadi salah satu dari:

fp Melakukan operasi dalam floating point. Ini memiliki latensi yang sangat tinggi, tetapi perlu hanya beberapa instruksi, jadi ini mungkin pilihan yang baik jika kode Anda sudah cukup ILP yang mudah dieksploitasi untuk memungkinkan kompiler menjadwalkan floating-point instruksi bersama dengan instruksi lainnya. Pembagian dengan nol menyebabkan a pengecualian floating-point.

inv Menggunakan operasi bilangan bulat untuk menghitung kebalikan dari pembagi, dan kemudian mengalikan dividen dengan kebalikannya. Strategi ini memungkinkan CSE dan mengangkat dari perhitungan terbalik. Pembagian dengan nol menghitung hasil yang tidak ditentukan, tapi tidak menjebak.

inv: minlat Varian dari inv di mana, jika tidak ada peluang CSE atau pengangkatan yang ditemukan, atau jika seluruh operasi telah diangkat ke tempat yang sama, tahap terakhir dari perhitungan terbalik terkait dengan perkalian akhir untuk mengurangi keseluruhan latensi, dengan mengorbankan penggunaan beberapa instruksi lagi, dan dengan demikian menawarkan lebih sedikit penjadwalan peluang dengan kode lain.

panggilan Memanggil fungsi perpustakaan yang biasanya mengimplementasikan inv: minlat strategi. Ini memberikan kepadatan kode yang tinggi untuk kompilasi "m5-*media-nofpu".

panggil2 Menggunakan titik masuk yang berbeda dari fungsi perpustakaan yang sama, di mana ia mengasumsikan bahwa a penunjuk ke tabel pencarian telah disiapkan, yang memperlihatkan beban penunjuk ke CSE dan pengoptimalan pengangkatan kode.

inv:panggilan inv:panggilan2 inv:fp Gunakan inv algoritma untuk pembuatan kode awal, tetapi jika kode tetap tidak dioptimalkan, kembali ke panggilan, panggil2, atau fp strategi, masing-masing. Perhatikan bahwa efek samping yang berpotensi menjebak dari pembagian dengan nol dilakukan oleh yang terpisah instruksi, jadi mungkin saja semua instruksi integer diangkat, tetapi penanda untuk efek samping tetap di tempatnya. Sebuah rekombinasi untuk operasi floating-point atau panggilan tidak mungkin dalam kasus itu.

inv20u inv20l Varian dari inv: minlat strategi. Jika perhitungan kebalikannya adalah tidak lepas dari perkalian, mereka mempercepat pembagian dimana dividennya pas menjadi 20 bit (tanda plus jika berlaku) dengan memasukkan tes untuk melewati sejumlah operasi dalam hal ini; tes ini memperlambat kasus dividen yang lebih besar. inv20u mengasumsikan kasus dividen kecil seperti itu tidak mungkin, dan inv20l menganggapnya mungkin.

Untuk target selain SHmedia Trade kelima – $ 33 Trade keenam – $ 78 dapat menjadi salah satu dari:

panggilan-div1 Memanggil fungsi perpustakaan yang menggunakan instruksi pembagian satu langkah "div1" untuk melakukan operasi. Pembagian dengan nol menghitung hasil yang tidak ditentukan dan melakukan tidak menjebak. Ini adalah default kecuali untuk SH4, SH2A dan SHcompact.

panggilan-fp Memanggil fungsi perpustakaan yang melakukan operasi dalam presisi ganda mengambang titik. Pembagian dengan nol menyebabkan pengecualian floating-point. Ini defaultnya untuk SHcompact dengan FPU. Menentukan ini untuk target yang tidak memiliki dobel presisi FPU default ke "call-div1".

meja-panggilan Memanggil fungsi perpustakaan yang menggunakan tabel pencarian untuk pembagi kecil dan instruksi "div1" dengan perbedaan huruf besar/kecil untuk pembagi yang lebih besar. Pembagian dengan nol menghitung hasil yang tidak ditentukan dan tidak menjebak. Ini adalah default untuk SH4. Menentukan ini untuk target yang tidak memiliki default instruksi shift dinamis untuk "panggil-div1".

Ketika strategi divisi belum ditentukan, strategi default dipilih berdasarkan pada target saat ini. Untuk SH2A strategi default adalah menggunakan "divs" dan "divu" instruksi alih-alih panggilan fungsi perpustakaan.

-maklumat-keluar-args Cadangan ruang sekali untuk argumen keluar di prolog fungsi daripada di sekitar setiap panggilan. Umumnya bermanfaat untuk kinerja dan ukuran. Juga dibutuhkan untuk melepas lelah untuk menghindari mengubah bingkai tumpukan di sekitar kode bersyarat.

-mdivsi3_libfunc=nama Setel nama fungsi perpustakaan yang digunakan untuk pembagian bertanda tangan 32-bit ke nama. Ini hanya mempengaruhi nama yang digunakan dalam panggilan serta inv:panggilan strategi pembagian, dan kompiler masih mengharapkan set register input/output/clobbered yang sama seperti ini pilihan tidak hadir.

-mfixed-range=rentang pendaftaran Hasilkan kode yang memperlakukan rentang register yang diberikan sebagai register tetap. Register tetap adalah salah satu yang tidak dapat digunakan oleh pengalokasi register. Ini berguna saat mengkompilasi kernel kode. Rentang register ditentukan sebagai dua register yang dipisahkan oleh tanda hubung. Beberapa rentang register dapat ditentukan dipisahkan dengan koma.

-pengalamatan-mindexed Aktifkan penggunaan mode pengalamatan terindeks untuk SHmedia32/SHcompact. Hanya ini aman jika perangkat keras dan/atau OS menerapkan semantik pembungkus 32-bit untuk yang diindeks modus pengalamatan. Arsitektur memungkinkan implementasi prosesor dengan 64-bit MMU, yang dapat digunakan OS untuk mendapatkan pengalamatan 32-bit, tetapi karena tidak ada perangkat keras saat ini implementasi mendukung ini atau cara lain untuk membuat mode pengalamatan yang diindeks aman untuk digunakan dalam ABI 32-bit, standarnya adalah -mno-diindeks-addressing.

-mgettrbiaya=jumlah Atur biaya yang diasumsikan untuk instruksi "gettr" ke jumlah. Standarnya adalah 2 jika -mpt-tetap berlaku, 100 sebaliknya.

-mpt-tetap Asumsikan instruksi "pt*" tidak akan menjebak. Ini umumnya menghasilkan kode terjadwal yang lebih baik, tetapi tidak aman pada perangkat keras saat ini. Definisi arsitektur saat ini mengatakan bahwa jebakan "ptabs" dan "ptrel" ketika target dengan 3 adalah 3. Ini memiliki efek yang tidak disengaja sehingga tidak aman untuk menjadwalkan instruksi ini sebelum a cabang, atau angkat mereka keluar dari lingkaran. Misalnya, "__do_global_ctors", bagian dari libgcc yang menjalankan konstruktor saat startup program, memanggil fungsi dalam daftar yang dibatasi oleh -1. Dengan -mpt-tetap opsi, "ptabs" dilakukan sebelum pengujian melawan -1. Itu berarti bahwa semua konstruktor berjalan sedikit lebih cepat, tetapi ketika loop datang ke akhir daftar, program macet karena "ptabs" memuat -1 ke a daftar sasaran.

Karena opsi ini tidak aman untuk perangkat keras apa pun yang mengimplementasikan arsitektur saat ini spesifikasi, defaultnya adalah -mno-pt-diperbaiki. Kecuali ditentukan secara eksplisit dengan -mgettrcost, -mno-pt-diperbaiki juga menyiratkan -mgettrbiaya=100; ini menghalangi mendaftar alokasi dari menggunakan register target untuk menyimpan bilangan bulat biasa.

-minvalid-simbol Asumsikan simbol mungkin tidak valid. Simbol fungsi biasa yang dihasilkan oleh kompiler selalu valid untuk memuat dengan "movi"/"shori"/"ptabs" atau "movi"/"shori"/"ptrel", tetapi dengan trik assembler dan/atau linker dimungkinkan untuk menghasilkan simbol yang menyebabkan "ptabs" atau "ptrel" untuk menjebak. Pilihan ini hanya berarti ketika -mno-pt-diperbaiki dalam memengaruhi. Ini mencegah CSE lintas-dasar-blok, mengangkat dan sebagian besar penjadwalan simbol beban. Standarnya adalah -mno-tidak valid-simbol.

-biaya-cabang=num Menganggap num menjadi biaya untuk instruksi cabang. Angka yang lebih tinggi membuat kompiler coba buat lebih banyak kode bebas cabang jika memungkinkan. Jika tidak ditentukan nilainya adalah dipilih tergantung pada jenis prosesor yang sedang dikompilasi.

-mzdcbranch -mno-zdcbranch Asumsikan (jangan asumsikan) bahwa instruksi cabang bersyarat perpindahan nol "bt" dan "bf" cepat. Jika -mzdcbranch ditentukan, kompiler lebih memilih perpindahan nol urutan kode cabang. Ini diaktifkan secara default saat membuat kode untuk SH4 dan SH4A. Itu dapat dinonaktifkan secara eksplisit dengan menentukan -mno-zdcbranch.

-mcbranch-force-delay-slot Paksa penggunaan slot tunda untuk cabang bersyarat, yang mengisi slot tunda dengan "tidak" jika instruksi yang sesuai tidak dapat ditemukan. Secara default opsi ini adalah dengan disabilitas. Ini dapat diaktifkan untuk mengatasi bug perangkat keras seperti yang ditemukan di aslinya SH7055.

-mfused-madd -mno-menyatu-madd Hasilkan kode yang menggunakan (tidak menggunakan) perkalian dan akumulasi floating-point instruksi. Instruksi ini dihasilkan secara default jika perangkat keras floating point digunakan. Bergantung pada mesin -mfused-madd opsi sekarang dipetakan ke mesin- independen -ffp-kontrak=cepat opsi, dan -mno-menyatu-madd dipetakan ke -ffp-kontrak=mati.

-mfsca -mno-fsca Izinkan atau larang kompiler untuk memancarkan instruksi "fsca" untuk sinus dan kosinus perkiraan. Pilihan -mfsca harus digunakan dalam kombinasi dengan optimasi -funsafe-matematika. Ini diaktifkan secara default saat membuat kode untuk SH4A. Menggunakan -mno-fsca menonaktifkan aproksimasi sinus dan kosinus bahkan jika optimasi -funsafe-matematika sedang berlaku.

-mfsrra -mno-fsrra Izinkan atau larang kompiler untuk memancarkan instruksi "fsrra" untuk persegi timbal balik pendekatan akar. Pilihan -mfsrra harus digunakan dalam kombinasi dengan optimasi -funsafe-matematika serta -finite-matematika-saja. Ini diaktifkan secara default ketika menghasilkan kode untuk SH4A. Menggunakan -mno-fsrra menonaktifkan akar kuadrat timbal balik perkiraan bahkan jika optimasi -funsafe-matematika serta -finite-matematika-saja berada di efek.

-pura-pura-cmove Lebih suka cabang bersyarat nol-perpindahan untuk instruksi gerakan bersyarat pola. Ini dapat menghasilkan kode yang lebih cepat pada prosesor SH4.

Solaris 2 Opsi

Ini -m opsi didukung di Solaris 2:

-mclear-hwcap -mclear-hwcap memberitahu kompiler untuk menghapus kemampuan perangkat keras yang dihasilkan oleh Perakitan Solaris. Ini hanya diperlukan jika file objek tidak menggunakan ekstensi ISA didukung oleh mesin saat ini, tetapi periksa saat runtime apakah akan menggunakannya atau tidak.

-teks-kotor -teks-kotor, digunakan selain -bersama, memberitahu kompiler untuk tidak lulus -z teks untuk linker saat menautkan objek bersama. Dengan menggunakan opsi ini, Anda dapat menautkan posisi- kode dependen menjadi objek bersama.

-teks-kotor menekan "relokasi tetap terhadap alokasi tetapi tidak dapat ditulis bagian" pesan kesalahan tautan. Namun, relokasi yang diperlukan memicu penyalinan menulis, dan objek bersama tidak benar-benar dibagikan di seluruh proses. Dari pada menggunakan -teks-kotor, Anda harus mengkompilasi semua kode sumber dengan -fpic or -fPIC.

Sakelar ini didukung selain yang di atas pada Solaris 2:

-pthreads Tambahkan dukungan untuk multithreading menggunakan pustaka utas POSIX. Opsi ini menetapkan flag untuk preprocessor dan linker. Opsi ini tidak memengaruhi utas keamanan kode objek yang dihasilkan oleh kompiler atau perpustakaan yang disertakan dengannya.

-utas Ini adalah sinonim untuk -pthreads.

SPARC Opsi

Ini -m opsi didukung di SPARC:

-mno-aplikasi-regs -peta-reg Menentukan -peta-reg untuk menghasilkan output menggunakan register global 2 hingga 4, yang cadangan SPARC SVR4 ABI untuk aplikasi. Seperti register global 1, masing-masing global register 2 hingga 4 kemudian diperlakukan sebagai register yang dapat dialokasikan yang dihancurkan oleh panggilan fungsi. Ini adalah default.

Agar sepenuhnya sesuai dengan SVR4 ABI dengan beberapa kerugian kinerja, tentukan -mno-aplikasi-regs. Anda harus mengkompilasi perpustakaan dan perangkat lunak sistem dengan opsi ini.

-mflat -mno-flat Dengan -mflat, kompiler tidak menghasilkan instruksi simpan/pulihkan dan menggunakan a model jendela "datar" atau register tunggal. Model ini kompatibel dengan reguler mendaftar model jendela. Register lokal dan register input (0--5) masih diperlakukan sebagai register "panggilan disimpan" dan disimpan di tumpukan sesuai kebutuhan.

Dengan -mno-flat (default), kompiler menghasilkan instruksi simpan/pulihkan (kecuali untuk fungsi daun). Ini adalah mode operasi normal.

-mfpu -mhard-float Menghasilkan output yang berisi instruksi floating-point. Ini adalah default.

-mno-fpu -msoft-float Hasilkan output yang berisi panggilan perpustakaan untuk floating point. Peringatan: yang diperlukan perpustakaan tidak tersedia untuk semua target SPARC. Biasanya fasilitas kompiler C yang biasa digunakan mesin, tetapi ini tidak dapat dilakukan secara langsung di lintas kompilasi. Anda harus membuat pengaturan sendiri untuk menyediakan perpustakaan yang sesuai fungsi untuk kompilasi silang. Target yang disematkan sparc-*-aout serta sparclite-*-* memang menyediakan perangkat lunak dukungan floating-point.

-msoft-float mengubah konvensi pemanggilan dalam file output; oleh karena itu, hanya berguna jika Anda mengkompilasi semua program dengan opsi ini. Secara khusus, Anda perlu menyusun libgcc.a, perpustakaan yang disertakan dengan GCC, dengan -msoft-float untuk ini untuk bekerja.

-mhard-quad-float Menghasilkan output yang berisi instruksi floating-point quad-word (panjang ganda).

-msoft-quad-float Hasilkan output yang berisi panggilan perpustakaan untuk floating-point quad-word (panjang ganda) instruksi. Fungsi yang dipanggil adalah yang ditentukan dalam SPARC ABI. Ini adalah standar.

Pada tulisan ini, tidak ada implementasi SPARC yang memiliki dukungan perangkat keras untuk instruksi floating-point quad-word. Mereka semua memanggil penangan perangkap untuk salah satu dari instruksi ini, dan kemudian penangan perangkap mengemulasi efek dari instruksi tersebut. Karena overhead handler trap, ini jauh lebih lambat daripada memanggil perpustakaan ABI rutinitas. Jadi -msoft-quad-float pilihan adalah default.

-mno-unaligned-ganda -munaligned-ganda Asumsikan bahwa ganda memiliki keselarasan 8-byte. Ini adalah default.

Dengan -munaligned-ganda, GCC mengasumsikan bahwa ganda memiliki perataan 8-byte hanya jika mereka terkandung dalam jenis lain, atau jika mereka memiliki alamat absolut. Jika tidak, itu mengasumsikan mereka memiliki penyelarasan 4-byte. Menentukan opsi ini menghindari beberapa yang langka masalah kompatibilitas dengan kode yang dihasilkan oleh kompiler lain. Ini bukan defaultnya karena mengakibatkan penurunan performa, terutama untuk kode floating-point.

-mode-pengguna -mno-pengguna-mode Jangan membuat kode yang hanya dapat dijalankan dalam mode supervisor. Ini hanya relevan untuk instruksi "casa" yang dipancarkan untuk prosesor LEON3. Ini adalah default.

-mno-faster-struct -mfaster-struct Dengan -mfaster-struct, kompiler mengasumsikan bahwa struktur harus memiliki 8-byte penyelarasan. Ini memungkinkan penggunaan pasangan instruksi "ldd" dan "std" untuk salinan dalam penugasan struktur, menggantikan pasangan "ld" dan "st" dua kali lebih banyak. Namun, penggunaan penyelarasan yang diubah ini secara langsung melanggar SPARC ABI. Jadi, itu dimaksudkan hanya untuk digunakan pada target di mana pengembang mengakui bahwa kode yang dihasilkan adalah tidak langsung sejalan dengan aturan ABI.

-mcpu=cpu_type Atur set instruksi, set register, dan parameter penjadwalan instruksi untuk jenis mesin cpu_type. Nilai yang didukung untuk cpu_type adalah v7, cypress, v8, superparc, hypersparc, leon, leon3, leon3v7, sparclite, f930, f934, sparclite86x, butiran kecil, tsc701, v9, ultrasparc, ultrasparc3, Niagara, niagara2, niagara3 serta niagara4.

Rantai alat Solaris dan GNU/Linux asli juga mendukung nilai asli, yang memilih pilihan arsitektur terbaik untuk prosesor host. -mcpu=asli tidak berpengaruh jika GCC tidak mengenali prosesor.

Parameter penjadwalan instruksi default digunakan untuk nilai yang memilih arsitektur dan bukan implementasi. Ini adalah v7, v8, sparclite, butiran kecil, v9.

Berikut adalah daftar setiap arsitektur yang didukung dan implementasi yang didukungnya.

v7 cemara, leon3v7

v8 supersparc, hypersparc, leon, leon3

sparclite f930, f934, sparclite86x

butiran kecil tsc701

v9 ultrasparc, ultrasparc3, ​​niagara, niagara2, niagara3, niagara4

Secara default (kecuali jika dikonfigurasi lain), GCC menghasilkan kode untuk varian V7 dari arsitektur SPARC. Dengan -mcpu = cemara, kompiler juga mengoptimalkannya untuk chip Cypress CY7C602, seperti yang digunakan dalam seri SPARCStation/SPARCServer 3xx. Ini adalah juga sesuai untuk SPARCStation 1, 2, IPX yang lebih lama, dll.

Dengan -mcpu=v8, GCC menghasilkan kode untuk varian V8 dari arsitektur SPARC. NS satu-satunya perbedaan dari kode V7 adalah bahwa kompiler memancarkan bilangan bulat, kalikan dan instruksi pembagian bilangan bulat yang ada di SPARC-V8 tetapi tidak ada di SPARC-V7. Dengan -mcpu=supersparc, kompiler juga mengoptimalkannya untuk chip SuperSPARC, sebagai digunakan dalam SPARCSstation 10, 1000 dan 2000 seri.

Dengan -mcpu=sparclite, GCC menghasilkan kode untuk varian SPARClite dari SPARC Arsitektur. Ini menambahkan perkalian bilangan bulat, langkah pembagian bilangan bulat dan pemindaian ("ffs") instruksi yang ada di SPARClite tetapi tidak di SPARC-V7. Dengan -mcpu=f930, yang compiler tambahan mengoptimalkannya untuk chip Fujitsu MB86930, yang merupakan yang asli SPARClite, tanpa FPU. Dengan -mcpu=f934, kompiler juga mengoptimalkannya untuk chip Fujitsu MB86934, yang merupakan SPARClite terbaru dengan FPU.

Dengan -mcpu=sparklet, GCC menghasilkan kode untuk varian SPARClet dari SPARC Arsitektur. Ini menambahkan perkalian bilangan bulat, perkalian/akumulasi, pembagian bilangan bulat instruksi langkah dan pindai ("ffs") yang ada di SPARClet tetapi tidak ada di SPARC-V7. Dengan -mcpu=tsc701, kompiler juga mengoptimalkannya untuk chip TEMIC SPARClet.

Dengan -mcpu=v9, GCC menghasilkan kode untuk varian V9 dari arsitektur SPARC. Ini menambahkan instruksi pemindahan integer 64-bit dan floating-point, 3 tambahan floating-point register kode kondisi dan instruksi pemindahan bersyarat. Dengan -mcpu=ultraparc, kompiler juga mengoptimalkannya untuk chip Sun UltraSPARC I/II/III. Dengan -mcpu=ultraparc3, kompiler juga mengoptimalkannya untuk Sun UltraSPARC Chip III/III+/IIIi/IIIi+/IV/IV+. Dengan -mcpu=niagara, kompiler tambahan mengoptimalkannya untuk chip Sun UltraSPARC T1. Dengan -mcpu=niagara2, penyusun juga mengoptimalkannya untuk chip Sun UltraSPARC T2. Dengan -mcpu=niagara3, yang compiler juga mengoptimalkannya untuk chip Sun UltraSPARC T3. Dengan -mcpu=niagara4, compiler juga mengoptimalkannya untuk chip Sun UltraSPARC T4.

-mtune=cpu_type Atur parameter penjadwalan instruksi untuk jenis mesin cpu_type, tapi jangan disetel set instruksi atau set register yang menjadi opsi -mcpu=cpu_type tidak.

Nilai yang sama untuk -mcpu=cpu_type dapat digunakan untuk -mtune=cpu_type, tapi satu-satunya nilai yang berguna adalah nilai yang memilih implementasi CPU tertentu. Yaitu cypress, superparc, hypersparc, leon, leon3, leon3v7, f930, f934, sparclite86x, tsc701, ultrasparc, ultrasparc3, Niagara, niagara2, niagara3 serta niagara4. Dengan rantai alat Solaris dan GNU/Linux asli, asli bisa juga digunakan.

-mv8plus -mno-v8plus Dengan -mv8plus, GCC menghasilkan kode untuk SPARC-V8+ ABI. Perbedaan dari V8 ABI adalah bahwa register global dan register keluar dianggap lebar 64 bit. Ini diaktifkan secara default pada Solaris dalam mode 32-bit untuk semua prosesor SPARC-V9.

-mvis -mno-vis Dengan -mvis, GCC menghasilkan kode yang memanfaatkan UltraSPARC Visual Ekstensi Instruksi Set. Standarnya adalah -mno-vis.

-mvis2 -mno-vis2 Dengan -mvis2, GCC menghasilkan kode yang memanfaatkan versi 2.0 dari UltraSPARC Ekstensi Set Instruksi Visual. Standarnya adalah -mvis2 saat menargetkan cpu yang mendukung instruksi tersebut, seperti UltraSPARC-III dan yang lebih baru. Pengaturan -mvis2 juga set -mvis.

-mvis3 -mno-vis3 Dengan -mvis3, GCC menghasilkan kode yang memanfaatkan versi 3.0 dari UltraSPARC Ekstensi Set Instruksi Visual. Standarnya adalah -mvis3 saat menargetkan cpu yang mendukung instruksi tersebut, seperti niagara-3 dan yang lebih baru. Pengaturan -mvis3 juga mengatur -mvis2 serta -mvis.

-mcbcond -mno-cbcond Dengan -mcbcond, GCC menghasilkan kode yang memanfaatkan perbandingan-dan-cabang instruksi, seperti yang didefinisikan dalam Arsitektur Sparc 2011. Standarnya adalah -mcbcond ketika menargetkan cpu yang mendukung instruksi tersebut, seperti niagara-4 dan yang lebih baru.

-mpopc -mno-popc Dengan -mpopc, GCC menghasilkan kode yang memanfaatkan populasi UltraSPARC menghitung instruksi. Standarnya adalah -mpopc saat menargetkan cpu yang mendukung seperti itu instruksi, seperti Niagara-2 dan yang lebih baru.

-mfmaf -mno-fmaf Dengan -mfmaf, GCC menghasilkan kode yang memanfaatkan UltraSPARC Fused Multiply- Tambahkan ekstensi floating-point. Standarnya adalah -mfmaf saat menargetkan cpu yang mendukung instruksi tersebut, seperti Niagara-3 dan yang lebih baru.

-mfix-at697f Aktifkan solusi yang didokumentasikan untuk erratum tunggal prosesor Atmel AT697F (yang sesuai dengan erratum #13 dari prosesor AT697E).

-mfix-ut699 Aktifkan solusi yang didokumentasikan untuk kesalahan floating-point dan cache data membatalkan kesalahan prosesor UT699.

Ini -m opsi yang didukung selain di atas pada prosesor SPARC-V9 dalam 64-bit lingkungan:

-m32 -m64 Buat kode untuk lingkungan 32-bit atau 64-bit. Lingkungan 32-bit mengatur int, panjang dan penunjuk ke 32 bit. Lingkungan 64-bit diatur menjadi 32 bit dan panjang dan penunjuk ke 64 bit.

-mcmodel=yang Atur model kode ke salah satu dari

tenang Model kode Medium/Rendah: alamat 64-bit, program harus ditautkan di 32 . rendah sedikit memori. Program dapat dihubungkan secara statis atau dinamis.

pertengahan Model kode Medium/Middle: alamat 64-bit, program harus ditautkan di low Memori 44 bit, segmen teks dan data harus berukuran kurang dari 2 GB dan segmen data harus berada dalam 2 GB dari segmen teks.

Medany Model kode Medium/Anywhere: alamat 64-bit, program dapat ditautkan di mana saja dalam memori, segmen teks dan data harus berukuran kurang dari 2 GB dan data segmen harus berada dalam 2GB dari segmen teks.

emmedany Model kode Medium/Anywhere untuk sistem tertanam: alamat 64-bit, teks dan segmen data harus berukuran kurang dari 2 GB, keduanya dimulai dari mana saja di memori (ditentukan pada waktu tautan). Register global %g4 menunjuk ke dasar data segmen. Program terhubung secara statis dan PIC tidak didukung.

-mmemory-model=mem-model Atur model memori yang berlaku pada prosesor ke salah satu dari

kegagalan Model memori default untuk prosesor dan sistem operasi.

rmo Urutan Memori Santai

pso Pesanan Toko Sebagian

TSOs Jumlah Pesanan Toko

sc Konsistensi Berurutan

Model memori ini secara formal didefinisikan dalam Lampiran D arsitektur Sparc V9 manual, seperti yang diatur dalam bidang "PSTATE.MM" prosesor.

-mstack-bias -mno-stack-bias Dengan -mstack-bias, GCC mengasumsikan bahwa penunjuk tumpukan, dan penunjuk bingkai jika ada, diimbangi dengan -2047 yang harus ditambahkan kembali saat membuat referensi bingkai tumpukan. Ini adalah default dalam mode 64-bit. Jika tidak, anggap tidak ada offset seperti itu.

SPU Opsi

Ini -m opsi yang didukung pada SPU:

-mwarn-reloc -meror-relokasi Loader untuk SPU tidak menangani relokasi dinamis. Secara default, GCC memberikan kesalahan ketika menghasilkan kode yang membutuhkan relokasi dinamis. -mno-error-reloc menonaktifkan kesalahan, -mwarn-reloc menghasilkan peringatan sebagai gantinya.

-msafe-dma -munsafe-dma Instruksi yang memulai atau menguji penyelesaian DMA tidak boleh disusun ulang dengan sehubungan dengan beban dan penyimpanan memori yang sedang diakses. Dengan -munsafe-dma Anda harus menggunakan kata kunci "volatile" untuk melindungi akses memori, tetapi itu dapat menyebabkan kode tidak efisien di tempat-tempat di mana memori diketahui tidak berubah. Daripada menandai memori sebagai volatile, Anda dapat menggunakan -msafe-dma untuk memberi tahu kompiler untuk memperlakukan DMA instruksi sebagai berpotensi mempengaruhi semua memori.

-petunjuk-cabang Secara default, GCC menghasilkan instruksi petunjuk cabang untuk menghindari kemacetan pipa untuk cabang yang selalu diambil atau mungkin diambil. Petunjuk tidak dihasilkan lebih dekat dari 8 instruksi dari cabangnya. Ada sedikit alasan untuk menonaktifkannya, kecuali untuk tujuan debugging, atau untuk membuat objek sedikit lebih kecil.

-msmall-mem -mbesar-mem Secara default, GCC menghasilkan kode dengan asumsi bahwa alamat tidak pernah lebih besar dari 18 bit. Dengan -mbesar-mem kode dihasilkan yang mengasumsikan alamat 32-bit penuh.

-mstdmain Secara default, GCC menautkan ke kode startup yang mengasumsikan fungsi utama gaya SPU interface (yang memiliki daftar parameter yang tidak konvensional). Dengan -mstdmain, tautan GCC program Anda terhadap kode startup yang mengasumsikan antarmuka gaya C99 ke "utama", termasuk salinan lokal string "argv".

-mfixed-range=rentang pendaftaran Hasilkan kode yang memperlakukan rentang register yang diberikan sebagai register tetap. Register tetap adalah salah satu yang tidak dapat digunakan oleh pengalokasi register. Ini berguna saat mengkompilasi kernel kode. Rentang register ditentukan sebagai dua register yang dipisahkan oleh tanda hubung. Beberapa rentang register dapat ditentukan dipisahkan dengan koma.

-mea32 -mea64 Kompilasi kode dengan asumsi bahwa pointer ke ruang alamat PPU diakses melalui "__ea" bernama address space qualifier memiliki lebar 32 atau 64 bit. Standarnya adalah 32 bit. Karena ini adalah opsi yang mengubah ABI, semua kode objek dalam executable harus dikompilasi dengan pengaturan yang sama.

-maddress-ruang-konversi -mno-alamat-ruang-konversi Izinkan/larang memperlakukan ruang alamat "__ea" sebagai superset dari alamat generik ruang angkasa. Ini memungkinkan gips tipe eksplisit antara "__ea" dan pointer generik serta konversi implisit dari pointer generik ke pointer "__ea". Standarnya adalah mengizinkan konversi penunjuk ruang alamat.

-mcache-ukuran=ukuran cache Opsi ini mengontrol versi libgcc yang ditautkan oleh kompiler ke file yang dapat dieksekusi dan memilih cache yang dikelola perangkat lunak untuk mengakses variabel di alamat "__ea" ruang dengan ukuran cache tertentu. Opsi yang memungkinkan untuk ukuran cache adalah 8, 16, 32, 64 serta 128. Ukuran cache default adalah 64KB.

-matomic-update -mno-atom-update Opsi ini mengontrol versi libgcc yang ditautkan oleh kompiler ke file yang dapat dieksekusi dan memilih apakah pembaruan atomik ke cache variabel sisi PPU yang dikelola perangkat lunak digunakan. Jika Anda menggunakan pembaruan atom, perubahan ke variabel PPU dari kode SPU menggunakan kualifikasi ruang alamat bernama "__ea" tidak mengganggu perubahan pada PPU lain variabel yang berada di baris cache yang sama dari kode PPU. Jika Anda tidak menggunakan atom pembaruan, gangguan tersebut dapat terjadi; namun, menulis kembali baris cache lebih efisien. Perilaku default adalah menggunakan pembaruan atom.

-mdual-nops -mdual-nops=n Secara default, GCC menyisipkan nops untuk meningkatkan masalah ganda ketika mengharapkannya meningkat kinerja. n dapat berupa nilai dari 0 hingga 10. Lebih kecil n memasukkan lebih sedikit nops. 10 adalah defaultnya, 0 sama dengan -mno-dual-nops. Dinonaktifkan dengan -Os.

-mhint-max-nops=n Jumlah maksimum nops untuk disisipkan untuk petunjuk cabang. Petunjuk cabang harus minimal 8 instruksi jauh dari cabang itu mempengaruhi. GCC menyisipkan hingga n tidak untuk menegakkan ini, jika tidak maka tidak akan menghasilkan petunjuk cabang.

-mhint-max-jarak=n Pengkodean instruksi petunjuk cabang membatasi petunjuk berada dalam 256 instruksi dari cabang yang dipengaruhinya. Secara default, GCC memastikannya ada di dalam 125.

-msafe-petunjuk Mengatasi bug perangkat keras yang menyebabkan SPU terhenti tanpa batas. Secara default, GCC menyisipkan instruksi "hbrp" untuk memastikan kios ini tidak akan terjadi.

Opsi untuk System V

Opsi tambahan ini tersedia di System V Release 4 untuk kompatibilitas dengan lainnya compiler pada sistem tersebut:

-G Buat objek bersama. Disarankan bahwa -simbolis or -bersama digunakan sebagai gantinya.

-Qy Identifikasi versi setiap alat yang digunakan oleh kompilator, dalam assembler ".ident" arahan dalam output.

-Qn Jangan menambahkan arahan ".ident" ke file output (ini adalah default).

-YP,dirs Cari direktori dirs, dan tidak ada yang lain, untuk perpustakaan yang ditentukan dengan -l.

-Ym,dir Lihat di direktori dir untuk menemukan praprosesor M4. Assembler menggunakan ini .

TILE-Gx Opsi

Ini -m opsi yang didukung pada TILE-Gx:

-mcmodel=kecil Buat kode untuk model kecil. Jarak untuk panggilan langsung dibatasi hingga 500M di kedua arah. Alamat relatif PC adalah 32 bit. Dukungan alamat absolut rentang alamat lengkap.

-mcmodel=besar Buat kode untuk model besar. Tidak ada batasan pada jarak panggilan, pc- alamat relatif, atau alamat absolut.

-mcpu=nama Memilih jenis CPU yang akan ditargetkan. Saat ini satu-satunya jenis yang didukung adalah tilegx.

-m32 -m64 Buat kode untuk lingkungan 32-bit atau 64-bit. Lingkungan 32-bit mengatur int, panjang, dan penunjuk ke 32 bit. Lingkungan 64-bit diatur menjadi 32 bit dan panjang dan penunjuk ke 64 bit.

-mbig-endian -mlittle-endian Hasilkan kode dalam mode big/little endian, masing-masing.

TILEPro Opsi

Ini -m opsi didukung di TILEPro:

-mcpu=nama Memilih jenis CPU yang akan ditargetkan. Saat ini satu-satunya jenis yang didukung adalah tilepro.

-m32 Hasilkan kode untuk lingkungan 32-bit, yang menetapkan int, long, dan pointer ke 32 bit. Ini adalah satu-satunya perilaku yang didukung sehingga flag pada dasarnya diabaikan.

V850 Opsi

Ini -m opsi ditentukan untuk implementasi V850:

-mlong-panggilan -mno-panggilan panjang Perlakukan semua panggilan sebagai jauh (dekat). Jika panggilan diasumsikan jauh, compiler selalu memuat alamat fungsi ke dalam register, dan memanggil secara tidak langsung melalui penunjuk.

-mno-ep -mep Jangan optimalkan (lakukan optimalkan) blok dasar yang menggunakan penunjuk indeks yang sama 4 atau lebih kali untuk menyalin pointer ke register "ep", dan gunakan "sld" dan "sst" yang lebih pendek instruksi. NS -mep opsi aktif secara default jika Anda mengoptimalkan.

-mno-prolog-fungsi -mprolog-fungsi Jangan gunakan (gunakan) fungsi eksternal untuk menyimpan dan memulihkan register di prolog dan epilog suatu fungsi. Fungsi eksternal lebih lambat, tetapi gunakan lebih sedikit kode ruang jika lebih dari satu fungsi menyimpan jumlah register yang sama. NS -mprolog-fungsi opsi aktif secara default jika Anda mengoptimalkan.

-mspace Cobalah untuk membuat kode sekecil mungkin. Saat ini, ini hanya menyalakan -mep serta -mprolog-fungsi Pilihan.

-mtda=n Masukkan variabel statis atau global yang ukurannya n byte atau kurang ke dalam area data kecil yang mendaftar "ep" menunjuk ke. Area data kecil dapat menampung hingga 256 byte secara total (128 byte untuk referensi byte).

-msda=n Masukkan variabel statis atau global yang ukurannya n byte atau kurang ke dalam area data kecil yang mendaftar "gp" menunjuk ke. Area data kecil dapat menampung hingga 64 kilobyte.

-mzda=n Masukkan variabel statis atau global yang ukurannya n byte atau kurang ke dalam 32 . pertama kilobyte memori.

-mv850 Tentukan bahwa prosesor target adalah V850.

-mv850e3v5 Tentukan bahwa prosesor target adalah V850E3V5. Konstanta praprosesor "__v850e3v5__" didefinisikan jika opsi ini digunakan.

-mv850e2v4 Tentukan bahwa prosesor target adalah V850E3V5. Ini adalah alias untuk -mv850e3v5 .

-mv850e2v3 Tentukan bahwa prosesor target adalah V850E2V3. Konstanta praprosesor "__v850e2v3__" didefinisikan jika opsi ini digunakan.

-mv850e2 Tentukan bahwa prosesor target adalah V850E2. Konstanta praprosesor "__v850e2__" didefinisikan jika opsi ini digunakan.

-mv850e1 Tentukan bahwa prosesor target adalah V850E1. Konstanta praprosesor "__v850e1__" dan "__v850e__" ditentukan jika opsi ini digunakan.

-mv850es Tentukan bahwa prosesor target adalah V850ES. Ini adalah alias untuk -mv850e1 .

-mv850e Tentukan bahwa prosesor target adalah V850E. Konstanta praprosesor "__v850e__" didefinisikan jika opsi ini digunakan.

Jika tidak -mv850 maupun -mv850e maupun -mv850e1 maupun -mv850e2 maupun -mv850e2v3 maupun -mv850e3v5 didefinisikan maka prosesor target default dipilih dan yang relevan __v850*__ konstanta praprosesor didefinisikan.

Konstanta praprosesor "__v850" dan "__v851__" selalu ditentukan, terlepas dari varian prosesor mana yang menjadi target.

-Mdisable-callt -mno-nonaktifkan-panggilan Opsi ini menekan pembuatan instruksi "CALLT" untuk v850e, v850e1, v850e2, v850e2v3 dan v850e3v5 rasa arsitektur v850.

Opsi ini diaktifkan secara default saat ABI RH850 sedang digunakan (lihat -mrh850-abi), Dan dinonaktifkan secara default saat ABI GCC sedang digunakan. Jika instruksi "CALLT" sedang dihasilkan maka simbol preprosesor C "__V850_CALLT__" didefinisikan.

-santai -mno-santai Meneruskan (atau tidak meneruskan) -santai opsi baris perintah ke assembler.

-mlong-lompat -mno-lompat jauh Nonaktifkan (atau aktifkan kembali) pembuatan instruksi lompatan relatif PC.

-msoft-float -mhard-float Nonaktifkan (atau aktifkan kembali) pembuatan instruksi titik mengambang perangkat keras. Ini opsi hanya signifikan ketika arsitektur target adalah V850E2V3 atau lebih tinggi. Jika instruksi floating point perangkat keras sedang dihasilkan kemudian preprocessor C simbol "__FPU_OK__" didefinisikan, jika tidak, simbol "__NO_FPU__" didefinisikan.

-mloop Memungkinkan penggunaan instruksi LOOP e3v5. Penggunaan instruksi ini tidak diaktifkan secara default ketika arsitektur e3v5 dipilih karena penggunaannya masih eksperimental.

-mrh850-abi -mghs Mengaktifkan dukungan untuk versi RH850 dari V850 ABI. Ini adalah default. Dengan versi ABI ini, aturan berikut berlaku:

* Struktur dan serikat berukuran integer dikembalikan melalui penunjuk memori daripada sebuah daftar.

* Struktur dan serikat besar (berukuran lebih dari 8 byte) dilewatkan berdasarkan nilai.

* Fungsi disejajarkan dengan batas 16-bit.

* The -m8byte-sejajarkan opsi baris perintah didukung.

* The -Mdisable-callt opsi baris perintah diaktifkan secara default. NS -mno-nonaktifkan-panggilan opsi baris perintah tidak didukung.

Saat versi ABI ini diaktifkan, simbol praprosesor C "__V850_RH850_ABI__" didefinisikan.

-mgcc-abi Mengaktifkan dukungan untuk versi GCC lama dari V850 ABI. Dengan versi ABI ini aturan berikut berlaku:

* Struktur dan serikat berukuran integer dikembalikan dalam register "r10".

* Struktur dan serikat besar (berukuran lebih dari 8 byte) dilewatkan dengan referensi.

* Fungsi disejajarkan dengan batas 32-bit, kecuali mengoptimalkan ukuran.

* The -m8byte-sejajarkan opsi baris perintah tidak didukung.

* The -Mdisable-callt opsi baris perintah didukung tetapi tidak diaktifkan secara default.

Saat versi ABI ini diaktifkan, simbol praprosesor C "__V850_GCC_ABI__" didefinisikan.

-m8byte-sejajarkan -mno-8byte-sejajarkan Memungkinkan dukungan untuk tipe "ganda" dan "panjang panjang" untuk disejajarkan pada batas 8-byte. Standarnya adalah membatasi perataan semua objek hingga paling banyak 4-byte. Kapan -m8byte-sejajarkan berlaku simbol praprosesor C "__V850_8BYTE_ALIGN__" adalah didefinisikan.

-big-switch Hasilkan kode yang cocok untuk tabel sakelar besar. Gunakan opsi ini hanya jika assembler/linker mengeluh tentang cabang di luar jangkauan dalam tabel switch.

-peta-reg Opsi ini menyebabkan r2 dan r5 digunakan dalam kode yang dihasilkan oleh kompiler. Ini pengaturan adalah default.

-mno-aplikasi-regs Opsi ini menyebabkan r2 dan r5 diperlakukan sebagai register tetap.

VAX Opsi

Ini -m opsi ditentukan untuk VAX:

-munix Jangan mengeluarkan instruksi lompat tertentu ("aobleq" dan seterusnya) yang dibuat oleh assembler Unix untuk VAX tidak dapat menangani jarak jauh.

-mgnu Keluarkan instruksi lompat tersebut, dengan asumsi bahwa assembler GNU sedang bekas.

-mg Kode keluaran untuk angka titik-mengambang format-G alih-alih format-D.

Visium Opsi

-mdebug Program yang menjalankan file I/O dan ditujukan untuk dijalankan pada target MCM harus terkait dengan opsi ini. Ini menyebabkan perpustakaan libc.a dan libdebug.a ditautkan. Program harus dijalankan pada target di bawah kendali debugging jarak jauh GDB rintisan

-msim Sebuah program yang melakukan file I/O dan ditakdirkan untuk dijalankan pada simulator harus dihubungkan dengan opsi. Ini menyebabkan perpustakaan libc.a dan libsim.a ditautkan.

-mfpu -mhard-float Menghasilkan kode yang berisi instruksi floating-point. Ini adalah default.

-mno-fpu -msoft-float Hasilkan kode yang berisi panggilan perpustakaan untuk floating-point.

-msoft-float mengubah konvensi pemanggilan dalam file output; oleh karena itu, hanya berguna jika Anda mengkompilasi semua program dengan opsi ini. Secara khusus, Anda perlu menyusun libgcc.a, perpustakaan yang disertakan dengan GCC, dengan -msoft-float untuk ini untuk bekerja.

-mcpu=cpu_type Atur set instruksi, set register, dan parameter penjadwalan instruksi untuk jenis mesin cpu_type. Nilai yang didukung untuk cpu_type adalah mcm, gr5 serta gr6.

mcm adalah sinonim dari gr5 hadir untuk kompatibilitas mundur.

Secara default (kecuali dikonfigurasi sebaliknya), GCC menghasilkan kode untuk varian GR5 dari arsitektur Visium.

Dengan -mcpu=gr6, GCC menghasilkan kode untuk varian GR6 dari arsitektur Visium. Satu-satunya perbedaan dari kode GR5 adalah bahwa kompiler akan menghasilkan pemindahan blok petunjuk.

-mtune=cpu_type Atur parameter penjadwalan instruksi untuk jenis mesin cpu_type, tapi jangan disetel set instruksi atau set register yang menjadi opsi -mcpu=cpu_type akan.

-msv-mode Hasilkan kode untuk mode supervisor, di mana tidak ada batasan akses ke register umum. Ini adalah default.

-mode-pengguna Hasilkan kode untuk mode pengguna, di mana akses ke beberapa register umum adalah dilarang: pada GR5, register r24 hingga r31 tidak dapat diakses dalam mode ini; di GR6, hanya register r29 hingga r31 yang terpengaruh.

VMS Opsi

Ini -m opsi ditentukan untuk implementasi VMS:

-mvms-return-codes Kembalikan kode kondisi VMS dari "utama". Defaultnya adalah mengembalikan kondisi gaya POSIX (misalnya kesalahan) kode.

-mdebug-main=awalan Tandai rutinitas pertama yang namanya dimulai dengan awalan sebagai rutinitas utama untuk debugger

-mmalloc64 Default untuk rutinitas alokasi memori 64-bit.

-ukuran penunjuk =ukuran Atur ukuran default pointer. Opsi yang memungkinkan untuk ukuran adalah 32 or pendek untuk 32 bit petunjuk, 64 or panjang untuk pointer 64 bit, dan tidak untuk mendukung hanya pointer 32 bit. Opsi selanjutnya menonaktifkan "pragma pointer_size".

VxWorks Opsi

Opsi di bagian ini ditentukan untuk semua target VxWorks. Opsi khusus untuk perangkat keras target terdaftar dengan opsi lain untuk target itu.

-mrtp GCC dapat menghasilkan kode untuk kernel VxWorks dan proses waktu nyata (RTP). Ini opsi beralih dari yang pertama ke yang terakhir. Ini juga mendefinisikan makro praprosesor "__RTP__".

-non-statis Tautkan RTP yang dapat dieksekusi ke pustaka bersama, bukan pustaka statis. NS Pilihan -statis serta -bersama juga dapat digunakan untuk RTP; -statis adalah defaultnya.

-Bstatis -Bdinamis Opsi ini diteruskan ke linker. Mereka didefinisikan untuk kompatibilitas dengan Diab.

-Xbind-malas Aktifkan pengikatan malas panggilan fungsi. Opsi ini setara dengan -Wl,-z,sekarang dan didefinisikan untuk kompatibilitas dengan Diab.

-Xbind-sekarang Nonaktifkan ikatan malas dari panggilan fungsi. Opsi ini adalah default dan ditentukan untuk kompatibilitas dengan Diab.

x86 Opsi

Ini -m opsi ditentukan untuk keluarga komputer x86.

-maret=tipe cpu Hasilkan instruksi untuk jenis mesin tipe cpu. Berlawanan dengan -mtune=tipe cpu, yang hanya menyetel kode yang dihasilkan untuk yang ditentukan tipe cpu, -maret=tipe cpu memungkinkan GCC untuk menghasilkan kode yang mungkin tidak berjalan sama sekali pada prosesor selain yang satu ditunjukkan. Menentukan -maret=tipe cpu menyiratkan -mtune=tipe cpu.

Pilihan untuk tipe cpu adalah:

asli Ini memilih CPU untuk menghasilkan kode pada waktu kompilasi dengan menentukan jenis prosesor dari mesin kompilasi. Menggunakan -maret=asli memungkinkan semua subset instruksi yang didukung oleh mesin lokal (karenanya hasilnya mungkin tidak berjalan pada mesin yang berbeda). Menggunakan -mtune=asli menghasilkan kode yang dioptimalkan untuk lokal mesin di bawah batasan set instruksi yang dipilih.

i386 CPU Intel i386 asli.

i486 CPU Intel i486. (Tidak ada penjadwalan yang diterapkan untuk chip ini.)

i586 pentium CPU Intel Pentium tanpa dukungan MMX.

pentium-mmx Intel Pentium MMX CPU, berdasarkan inti Pentium dengan dukungan set instruksi MMX.

pentiumpro CPU Intel Pentium Pro.

i686 Saat digunakan dengan -berbaris, set instruksi Pentium Pro digunakan, jadi kodenya berjalan pada semua chip keluarga i686. Saat digunakan dengan -mtune, itu memiliki arti yang sama dengan umum.

pentium2 CPU Intel Pentium II, berdasarkan inti Pentium Pro dengan dukungan set instruksi MMX.

pentium3 pentium3m CPU Intel Pentium III, berdasarkan inti Pentium Pro dengan set instruksi MMX dan SSE Dukungan.

pentium-m Intel Pentium M; versi daya rendah dari Intel Pentium III CPU dengan MMX, SSE dan SSE2 dukungan set instruksi. Digunakan oleh notebook Centrino.

pentium4 pentium4m Intel Pentium 4 CPU dengan dukungan set instruksi MMX, SSE dan SSE2.

Prescott Versi yang ditingkatkan dari Intel Pentium 4 CPU dengan instruksi MMX, SSE, SSE2 dan SSE3 mengatur dukungan.

nocona Versi yang ditingkatkan dari Intel Pentium 4 CPU dengan ekstensi 64-bit, MMX, SSE, SSE2 dan Dukungan set instruksi SSE3.

core2 Intel Core 2 CPU dengan ekstensi 64-bit, MMX, SSE, SSE2, SSE3 dan SSSE3 dukungan set instruksi.

nehalem Intel Nehalem CPU dengan ekstensi 64-bit, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, Dukungan set instruksi SSE4.2 dan POPCNT.

barat CPU Intel Westmere dengan ekstensi 64-bit, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, Dukungan set instruksi SSE4.2, POPCNT, AES dan PCLMUL.

jembatan pasir CPU Intel Sandy Bridge dengan ekstensi 64-bit, MMX, SSE, SSE2, SSE3, SSSE3, Dukungan set instruksi SSE4.1, SSE4.2, POPCNT, AVX, AES dan PCLMUL.

jembatan ivy CPU Intel Ivy Bridge dengan ekstensi 64-bit, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, Set instruksi SSE4.2, POPCNT, AVX, AES, PCLMUL, FSGSBASE, RDRND dan F16C Dukungan.

Haswell Intel Haswell CPU dengan ekstensi 64-bit, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2 dan dukungan set instruksi F16C.

broadwell Intel Broadwell CPU dengan ekstensi 64-bit, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, Dukungan set instruksi F16C, RDSEED, ADCX dan PREFETCHW.

topi Intel Bonnell CPU dengan ekstensi 64-bit, MOVBE, MMX, SSE, SSE2, SSE3 dan SSSE3 dukungan set instruksi.

silvermont Intel Silvermont CPU dengan ekstensi 64-bit, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, Dukungan set instruksi SSE4.1, SSE4.2, POPCNT, AES, PCLMUL dan RDRND.

knl CPU Pendaratan Intel Knight dengan ekstensi 64-bit, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, AVX512F, AVX512PF, AVX512ER dan AVX512CD dukungan set instruksi.

k6 CPU AMD K6 dengan dukungan set instruksi MMX.

k6-2 k6-3 Versi peningkatan CPU AMD K6 dengan MMX dan 3DNow! dukungan set instruksi.

athlon atlon-tbird CPU AMD Athlon dengan MMX, 3dNOW!, 3DNow yang ditingkatkan! dan instruksi prefetch SSE Dukungan.

atlon-4 atlon-xp atlon-mp Peningkatan AMD Athlon CPU dengan MMX, 3DNow!, 3DNow yang ditingkatkan! dan instruksi SSE lengkap mengatur dukungan.

k8 opton atlon64 atlon-fx Prosesor berdasarkan inti AMD K8 dengan dukungan set instruksi x86-64, termasuk prosesor AMD Opteron, Athlon 64, dan Athlon 64 FX. (Ini superset MMX, SSE, SSE2, 3DNow!, 3DNow ditingkatkan! dan ekstensi set instruksi 64-bit.)

k8-sse3 opton-sse3 athlon64-sse3 Versi core AMD K8 yang ditingkatkan dengan dukungan set instruksi SSE3.

amdfam10 barcelona CPU berdasarkan core AMD Family 10h dengan dukungan set instruksi x86-64. (Ini superset MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, 3DNow yang ditingkatkan!, ABM dan 64-bit ekstensi set instruksi.)

bdver1 CPU berdasarkan core AMD Family 15h dengan dukungan set instruksi x86-64. (Ini superset FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM dan ekstensi set instruksi 64-bit.)

bdver2 CPU berbasis inti Keluarga AMD 15h dengan dukungan set instruksi x86-64. (Ini superset BMI, TBM, F16C, FMA, FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, Set instruksi SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM dan 64-bit ekstensi.)

bdver3 CPU berbasis inti Keluarga AMD 15h dengan dukungan set instruksi x86-64. (Ini superset BMI, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, XOP, LWP, AES, PCL_MUL, CX16, Set instruksi MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM dan 64-bit ekstensi.

bdver4 CPU berbasis inti Keluarga AMD 15h dengan dukungan set instruksi x86-64. (Ini superset BMI, BMI2, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, AVX2, XOP, LWP, AES, PCL_MUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM dan Ekstensi set instruksi 64-bit.

btver1 CPU berdasarkan core AMD Family 14h dengan dukungan set instruksi x86-64. (Ini superset set instruksi MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM dan 64-bit ekstensi.)

btver2 CPU berdasarkan core AMD Family 16h dengan dukungan set instruksi x86-64. Ini termasuk MOVBE, F16C, BMI, AVX, PCL_MUL, AES, SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3, SSE2, SSE, MMX dan ekstensi set instruksi 64-bit.

winchip-c6 IDT WinChip C6 CPU, ditangani dengan cara yang sama seperti i486 dengan set instruksi MMX tambahan Dukungan.

winchip2 IDT WinChip 2 CPU, ditangani dengan cara yang sama seperti i486 dengan tambahan MMX dan 3DNow! dukungan set instruksi.

c3 VIA C3 CPU dengan MMX dan 3DNow! dukungan set instruksi. (Tidak ada penjadwalan adalah diimplementasikan untuk chip ini.)

c3-2 VIA C3-2 (Nehemia/C5XL) CPU dengan dukungan set instruksi MMX dan SSE. (Tidak penjadwalan diimplementasikan untuk chip ini.)

geode Prosesor tertanam AMD Geode dengan MMX dan 3DNow! dukungan set instruksi.

-mtune=tipe cpu Dengarkan tipe cpu semua yang berlaku tentang kode yang dihasilkan, kecuali untuk ABI dan set instruksi yang tersedia. Saat memilih tertentu tipe cpu jadwal hal-hal yang tepat untuk chip tertentu, kompiler tidak menghasilkan kode apa pun yang tidak dapat berjalan pada jenis mesin default kecuali Anda menggunakan a -maret=tipe cpu . Misalnya, jika GCC dikonfigurasi untuk i686-pc-linux-gnu maka -mtune=pentium4 menghasilkan kode yang disetel untuk Pentium 4 tetapi masih berjalan pada mesin i686.

Pilihan untuk tipe cpu sama seperti untuk -berbaris. Tambahan lagi, -mtune mendukung 2 pilihan tambahan untuk tipe cpu:

umum Menghasilkan kode yang dioptimalkan untuk prosesor IA32/AMD64/EM64T yang paling umum. Jika kamu ketahui CPU tempat kode Anda akan dijalankan, maka Anda harus menggunakan yang sesuai -mtune or -berbaris pilihan alih-alih -mtune=generik. Tapi, jika Anda tidak tahu persis apa yang akan dimiliki pengguna CPU aplikasi Anda, maka Anda harus menggunakan ini .

Saat prosesor baru dikerahkan di pasar, perilaku opsi ini akan berubah. Oleh karena itu, jika Anda meningkatkan ke versi GCC yang lebih baru, pembuatan kode dikendalikan oleh opsi ini akan berubah untuk mencerminkan prosesor yang paling umum pada saat versi GCC dirilis.

Tidak ada -maret=generik pilihan karena -berbaris menunjukkan set instruksi compiler dapat menggunakan, dan tidak ada set instruksi umum yang berlaku untuk semua prosesor. Sebaliknya, -mtune menunjukkan prosesor (atau, dalam hal ini, kumpulan prosesor) yang kodenya dioptimalkan.

intel Menghasilkan kode yang dioptimalkan untuk prosesor Intel terbaru, yaitu Haswell dan Silvermont untuk versi GCC ini. Jika Anda tahu CPU tempat kode Anda akan berjalan, maka Anda harus menggunakan yang sesuai -mtune or -berbaris pilihan alih-alih -mtune=intel. Tetapi, jika Anda ingin aplikasi Anda berkinerja lebih baik di kedua Haswell dan Silvermont, maka Anda harus menggunakan opsi ini.

Saat prosesor Intel baru dikerahkan di pasar, perilaku ini pilihan akan berubah. Oleh karena itu, jika Anda meningkatkan ke versi GCC yang lebih baru, kode generasi yang dikendalikan oleh opsi ini akan berubah untuk mencerminkan Intel terbaru prosesor pada saat versi GCC dirilis.

Tidak ada -maret=intel pilihan karena -berbaris menunjukkan set instruksi compiler dapat menggunakan, dan tidak ada set instruksi umum yang berlaku untuk semua prosesor. Sebaliknya, -mtune menunjukkan prosesor (atau, dalam hal ini, kumpulan prosesor) yang kodenya dioptimalkan.

-mcpu=tipe cpu Sinonim yang tidak digunakan lagi untuk -mtune.

-mfpmat=satuan Hasilkan aritmatika titik-mengambang untuk unit yang dipilih satuan. Pilihan untuk satuan adalah:

387 Gunakan koprosesor floating-point 387 standar yang ada di sebagian besar chip dan ditiru sebaliknya. Kode yang dikompilasi dengan opsi ini berjalan hampir di mana-mana. Hasil sementara dihitung dalam presisi 80-bit, bukan presisi ditentukan oleh jenisnya, menghasilkan hasil yang sedikit berbeda dibandingkan dengan sebagian besar chip lainnya. Lihat -toko-terapung untuk deskripsi lebih detail.

Ini adalah pilihan default untuk target x86-32.

sse Gunakan instruksi floating-point skalar yang ada di set instruksi SSE. Ini set instruksi didukung oleh Pentium III dan chip yang lebih baru, dan di garis AMD oleh chip Athlon-4, Athlon XP dan Athlon MP. Versi sebelumnya dari SSE set instruksi hanya mendukung aritmatika presisi tunggal, sehingga ganda dan aritmatika presisi diperpanjang masih dilakukan menggunakan 387. Versi yang lebih baru, hadir hanya di Pentium 4 dan chip AMD x86-64, mendukung aritmatika presisi ganda juga.

Untuk kompiler x86-32, Anda harus menggunakan -maret=tipe cpu, -msse or -msse2 beralih ke aktifkan ekstensi SSE dan buat opsi ini efektif. Untuk kompiler x86-64, ekstensi ini diaktifkan secara default.

Kode yang dihasilkan harus jauh lebih cepat di sebagian besar kasus dan menghindari masalah ketidakstabilan numerik dari kode 387, tetapi dapat merusak beberapa yang ada kode yang mengharapkan temporer menjadi 80 bit.

Ini adalah pilihan default untuk kompiler x86-64.

hal,387 sse+387 kedua Cobalah untuk menggunakan kedua set instruksi sekaligus. Ini secara efektif menggandakan jumlah register yang tersedia, dan pada chip dengan unit eksekusi terpisah untuk 387 dan SSE sumber daya eksekusi juga. Gunakan opsi ini dengan hati-hati, karena masih eksperimental, karena pengalokasi register GCC tidak memodelkan terpisah unit fungsional dengan baik, sehingga menghasilkan kinerja yang tidak stabil.

-masm=dialek Instruksi perakitan keluaran menggunakan yang dipilih dialek. Juga mempengaruhi dialek mana digunakan untuk "asm" dasar dan "asm" yang diperluas. Pilihan yang didukung (dalam urutan dialek) adalah untuk or intel. Standarnya adalah untuk. Darwin tidak mendukung intel.

-miee-fp -mno-ieee-fp Kontrol apakah kompiler menggunakan perbandingan floating-point IEEE atau tidak. Ini menangani kasus di mana hasil perbandingan tidak berurutan dengan benar.

-msoft-float Hasilkan output yang berisi panggilan perpustakaan untuk floating point.

Peringatan: perpustakaan yang diperlukan bukan bagian dari GCC. Biasanya fasilitas kompiler C biasa mesin digunakan, tetapi ini tidak dapat dilakukan secara langsung di lintas- kompilasi. Anda harus membuat pengaturan sendiri untuk menyediakan perpustakaan yang sesuai fungsi untuk kompilasi silang.

Pada mesin di mana suatu fungsi mengembalikan hasil titik-mengambang di register 80387 stack, beberapa opcode floating-point dapat dipancarkan bahkan jika -msoft-float digunakan.

-mno-fp-ret-in-387 Jangan gunakan register FPU untuk mengembalikan nilai fungsi.

Konvensi pemanggilan biasa memiliki fungsi mengembalikan nilai tipe "float" dan "double" dalam register FPU, meskipun tidak ada FPU. Idenya adalah bahwa sistem operasi harus meniru FPU.

Pilihan -mno-fp-ret-in-387 menyebabkan nilai-nilai tersebut dikembalikan dalam CPU biasa mendaftar sebagai gantinya.

-mno-fancy-matematika-387 Beberapa 387 emulator tidak mendukung instruksi "sin", "cos" dan "sqrt" untuk 387. Tentukan opsi ini untuk menghindari pembuatan instruksi tersebut. Opsi ini adalah default pada OpenBSD dan NetBSD. Opsi ini diganti ketika -berbaris mengindikasikan bahwa CPU target selalu memiliki FPU sehingga instruksi tidak memerlukan emulasi. Instruksi ini tidak dibuat kecuali Anda juga menggunakan optimasi -funsafe-matematika saklar.

-malign-ganda -mno-align-double Kontrol apakah GCC menyelaraskan variabel "ganda", "ganda panjang", dan "panjang panjang" pada a batas dua kata atau batas satu kata. Menyejajarkan variabel "ganda" pada dua kata batas menghasilkan kode yang berjalan agak lebih cepat pada Pentium dengan mengorbankan lebih banyak ingatan.

Pada x86-64, -malign-ganda diaktifkan secara default.

Peringatan: jika Anda menggunakan -malign-ganda sakelar, struktur yang mengandung tipe di atas disejajarkan secara berbeda dari spesifikasi antarmuka biner aplikasi yang diterbitkan untuk x86-32 dan tidak kompatibel dengan biner dengan struktur dalam kode yang dikompilasi tanpa saklar itu.

-m96bit-panjang-ganda -m128bit-panjang-ganda Sakelar ini mengontrol ukuran tipe "ganda panjang". Biner aplikasi x86-32 antarmuka menentukan ukurannya menjadi 96 bit, jadi -m96bit-panjang-ganda adalah default di modus 32-bit.

Arsitektur modern (Pentium dan yang lebih baru) lebih memilih "ganda panjang" untuk disejajarkan dengan 8- atau batas 16-byte. Dalam array atau struktur yang sesuai dengan ABI, ini bukan mungkin. Jadi menentukan -m128bit-panjang-ganda menyelaraskan "ganda panjang" ke 16-byte batas dengan mengisi "ganda panjang" dengan nol 32-bit tambahan.

Dalam kompiler x86-64, -m128bit-panjang-ganda adalah pilihan default sebagai ABI-nya menentukan bahwa "ganda panjang" disejajarkan pada batas 16-byte.

Perhatikan bahwa tidak satu pun dari opsi ini yang memungkinkan presisi ekstra di atas standar x87 dari 80 bit untuk "ganda panjang".

Peringatan: jika Anda mengganti nilai default untuk ABI target Anda, ini akan mengubah ukurannya struktur dan array yang berisi variabel "ganda panjang", serta memodifikasi konvensi pemanggilan fungsi untuk fungsi yang mengambil "ganda panjang". Oleh karena itu mereka tidak kompatibel dengan biner dengan kode yang dikompilasi tanpa sakelar itu.

-mlong-ganda-64 -mlong-ganda-80 -mlong-ganda-128 Sakelar ini mengontrol ukuran tipe "ganda panjang". Ukuran 64 bit membuat jenis "ganda panjang" setara dengan jenis "ganda". Ini adalah default untuk 32-bit Perpustakaan Bionic C. Ukuran 128 bit membuat tipe "panjang ganda" setara dengan Jenis "__float128". Ini adalah default untuk perpustakaan Bionic C 64-bit.

Peringatan: jika Anda mengganti nilai default untuk ABI target Anda, ini akan mengubah ukurannya struktur dan array yang berisi variabel "ganda panjang", serta memodifikasi konvensi pemanggilan fungsi untuk fungsi yang mengambil "ganda panjang". Oleh karena itu mereka tidak kompatibel dengan biner dengan kode yang dikompilasi tanpa sakelar itu.

-malign-data=mengetik Kontrol bagaimana GCC menyelaraskan variabel. Nilai yang didukung untuk mengetik adalah compat penggunaan meningkat nilai keselarasan yang kompatibel menggunakan GCC 4.8 dan sebelumnya, abi menggunakan nilai keselarasan sebagai ditentukan oleh psABI, dan cacheline menggunakan peningkatan nilai keselarasan untuk mencocokkan ukuran baris cache. compat adalah defaultnya.

-mlarge-data-threshold=ambang Ketika -mcmodel=sedang ditentukan, objek data lebih besar dari ambang ditempatkan di bagian data besar. Nilai ini harus sama di semua objek yang terhubung ke biner, dan default ke 65535.

-mrtd Gunakan konvensi pemanggilan fungsi yang berbeda, di mana fungsi yang mengambil tetap jumlah argumen kembali dengan "ret nomor" instruksi, yang memunculkan argumen mereka saat kembali. Ini menghemat satu instruksi di pemanggil karena tidak perlu memunculkan argumen di sana.

Anda dapat menentukan bahwa fungsi individual dipanggil dengan urutan pemanggilan ini dengan atribut fungsi "stdcall". Anda juga dapat menimpa -mrtd pilihan dengan menggunakan atribut fungsi "cdecl".

Peringatan: konvensi pemanggilan ini tidak sesuai dengan yang biasanya digunakan di Unix, jadi Anda tidak dapat menggunakannya jika Anda perlu memanggil pustaka yang dikompilasi dengan kompiler Unix.

Juga, Anda harus menyediakan prototipe fungsi untuk semua fungsi yang mengambil variabel jumlah argumen (termasuk "printf"); jika tidak, kode yang salah dihasilkan untuk panggilan ke fungsi-fungsi tersebut.

Selain itu, hasil kode yang sangat salah jika Anda memanggil fungsi dengan terlalu banyak argumen. (Biasanya, argumen tambahan diabaikan tanpa bahaya.)

-mregparm=num Kontrol berapa banyak register yang digunakan untuk melewatkan argumen integer. Secara default, tidak register digunakan untuk melewatkan argumen, dan paling banyak 3 register dapat digunakan. Kamu bisa mengontrol perilaku ini untuk fungsi tertentu dengan menggunakan atribut fungsi "regparm".

Peringatan: jika Anda menggunakan sakelar ini, dan num bukan nol, maka Anda harus membangun semua modul dengan nilai yang sama, termasuk semua perpustakaan. Ini termasuk perpustakaan sistem dan modul startup.

-msseregparm Gunakan konvensi kelulusan register SSE untuk argumen float dan double serta nilai kembalian. Anda dapat mengontrol perilaku ini untuk fungsi tertentu dengan menggunakan atribut fungsi "seregparm".

Peringatan: jika Anda menggunakan sakelar ini maka Anda harus membangun semua modul dengan nilai yang sama, termasuk perpustakaan apapun. Ini termasuk perpustakaan sistem dan modul startup.

-mvect8-ret-in-mem Kembalikan vektor 8-byte dalam memori alih-alih register MMX. Ini adalah default pada Solaris@tie{}8 dan 9 dan VxWorks untuk mencocokkan ABI compiler Sun Studio hingga versi 12. Versi compiler yang lebih baru (dimulai dengan Studio 12 Update@tie{}1) menyusul ABI yang digunakan oleh target x86 lainnya, yang merupakan default pada Solaris@tie{}10 ​​dan yang lebih baru. Hanya gunakan opsi ini jika Anda perlu tetap kompatibel dengan kode yang ada yang diproduksi oleh versi kompiler sebelumnya atau versi GCC yang lebih lama.

-mpc32 -mpc64 -mpc80 Atur presisi floating-point 80387 ke 32, 64 atau 80 bit. Kapan -mpc32 ditentukan, signifikansi hasil operasi floating-point dibulatkan menjadi 24 bit (presisi tunggal); -mpc64 membulatkan signifikansi hasil floating-point operasi hingga 53 bit (presisi ganda) dan -mpc80 membulatkan signifikansi hasil operasi floating-point menjadi 64 bit (perpanjangan presisi ganda), yang merupakan bawaan. Ketika opsi ini digunakan, operasi floating-point dalam presisi yang lebih tinggi adalah tidak tersedia untuk programmer tanpa mengatur kata kontrol FPU secara eksplisit.

Menyetel pembulatan operasi titik-mengambang ke kurang dari 80 bit default dapat mempercepat beberapa program sebesar 2% atau lebih. Perhatikan bahwa beberapa perpustakaan matematika berasumsi bahwa operasi floating-point presisi diperpanjang (80-bit) diaktifkan secara default; rutinitas di perpustakaan semacam itu bisa mengalami kehilangan akurasi yang signifikan, biasanya melalui disebut "pembatalan bencana", ketika opsi ini digunakan untuk mengatur presisi ke kurang dari presisi diperpanjang.

-mstackrealign Sejajarkan kembali tumpukan saat masuk. Pada x86, -mstackrealign opsi menghasilkan prolog dan epilog alternatif yang menyelaraskan run-time stack jika perlu. Ini mendukung pencampuran kode lama yang menjaga keselarasan tumpukan 4-byte dengan kode modern yang pertahankan perataan tumpukan 16-byte untuk kompatibilitas SSE. Lihat juga atributnya "force_align_arg_pointer", berlaku untuk fungsi individu.

-mpreferred-stack-boundary=num Cobalah untuk menjaga batas tumpukan sejajar dengan 2 yang dinaikkan ke num batas byte. Jika -batas-tumpukan pilihan tidak ditentukan, standarnya adalah 4 (16 byte atau 128 bit).

Peringatan: Saat membuat kode untuk arsitektur x86-64 dengan ekstensi SSE cacat, -mpreferred-stack-boundary=3 dapat digunakan untuk menjaga agar batas tumpukan tetap selaras sampai batas 8 byte. Karena x86-64 ABI memerlukan perataan tumpukan 16 byte, ini adalah ABI tidak kompatibel dan dimaksudkan untuk digunakan dalam lingkungan terkendali di mana ruang tumpukan berada batasan penting. Opsi ini mengarah ke kode yang salah ketika fungsi dikompilasi dengan 16 penyelarasan tumpukan byte (seperti fungsi dari perpustakaan standar) disebut dengan tumpukan yang tidak selaras. Dalam hal ini, instruksi SSE dapat menyebabkan akses memori yang tidak selaras perangkap. Selain itu, argumen variabel ditangani secara tidak benar untuk 16 byte yang disejajarkan objek (termasuk x87 panjang ganda dan __int128), yang mengarah ke hasil yang salah. Kamu harus buat semua modul dengan -mpreferred-stack-boundary=3, termasuk perpustakaan apa pun. Ini termasuk perpustakaan sistem dan modul startup.

-mincoming-stack-boundary=num Asumsikan tumpukan yang masuk sejajar dengan 2 yang dinaikkan ke num batas byte. Jika -mincoming-stack-boundary tidak ditentukan, yang ditentukan oleh -batas-tumpukan pilihan digunakan.

Pada Pentium dan Pentium Pro, nilai "ganda" dan "ganda panjang" harus disejajarkan dengan Batas 8-byte (lihat -malign-ganda) atau mengalami performa run time yang signifikan hukuman. Pada Pentium III, tipe data Streaming SIMD Extension (SSE) "__m128" mungkin tidak berfungsi dengan baik jika tidak selaras 16-byte.

Untuk memastikan keselarasan yang tepat dari nilai-nilai ini pada tumpukan, batas tumpukan harus sebagai disejajarkan seperti yang diperlukan oleh nilai apa pun yang disimpan di tumpukan. Selanjutnya, setiap fungsi harus dihasilkan sedemikian rupa sehingga menjaga tumpukan tetap selaras. Jadi memanggil fungsi dikompilasi dengan batas tumpukan pilihan yang lebih tinggi dari fungsi yang dikompilasi dengan yang lebih rendah batas tumpukan yang disukai kemungkinan besar tidak menyelaraskan tumpukan. Disarankan bahwa library yang menggunakan callback selalu menggunakan pengaturan default.

Penyelarasan ekstra ini memang menghabiskan ruang tumpukan ekstra, dan umumnya meningkatkan kode ukuran. Kode yang sensitif terhadap penggunaan ruang tumpukan, seperti sistem tertanam dan kernel sistem operasi, mungkin ingin mengurangi penyelarasan yang disukai ke -mpreferred-stack-boundary=2.

-mmmx -msse -msse2 -msse3 -mssse3 -msse4 -msse4a -msse4.1 -msse4.2 -mavx -mavx2 -mavx512f -mavx512pf -mavx512er -mavx512cd -msha -maes -mpclmul -mclfushopt -mfsgsbase -mrdrnd -mf16c -mfma -mfma4 -mno-fma4 -mprefetchwt1 -mxop -mlwp -m3dnow -mpopcnt -mabm -mbmi -mbmi2 -mlzcnt -mfxsr -mxsave -mxsaveopt -mxsavec -mxsave -mrtm -mtbm -mmpx -mmwaitx Sakelar ini memungkinkan penggunaan instruksi di MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, AVX, AVX2, AVX512F, AVX512PF, AVX512ER, AVX512CD, SHA, AES, PCLMUL, FSGSBASE, RDRND, F16C, FMA, SSE4A, FMA4, XOP, LWP, ABM, BMI, BMI2, FXSR, XSAVE, XSAVEOPT, LZCNT, RTM, MPX, MWAITX atau 3DNow! set instruksi diperpanjang. Masing-masing memiliki yang sesuai -mno- pilihan untuk menonaktifkan penggunaan petunjuk ini.

Ekstensi ini juga tersedia sebagai fungsi bawaan: lihat x86 Built-in Fungsi, untuk rincian fungsi yang diaktifkan dan dinonaktifkan oleh sakelar ini.

Untuk menghasilkan instruksi SSE/SSE2 secara otomatis dari kode floating-point (sebagai lawan sampai 387 instruksi), lihat -mfpmat=sse.

GCC menekan instruksi SSEx ketika -mavx digunakan. Sebaliknya, itu menghasilkan AVX baru instruksi atau kesetaraan AVX untuk semua instruksi SSEx bila diperlukan.

Opsi ini memungkinkan GCC untuk menggunakan instruksi yang diperluas ini dalam kode yang dihasilkan, bahkan tanpa -mfpmat=sse. Aplikasi yang melakukan deteksi CPU run-time harus dikompilasi file terpisah untuk setiap arsitektur yang didukung, menggunakan flag yang sesuai. Di dalam khususnya, file yang berisi kode deteksi CPU harus dikompilasi tanpa opsi ini.

-mdump-tune-fitur Opsi ini menginstruksikan GCC untuk membuang nama fitur penyetelan kinerja x86 dan pengaturan default. Nama-nama tersebut dapat digunakan dalam -mtune-ctrl=daftar fitur.

-mtune-ctrl=daftar fitur Opsi ini digunakan untuk melakukan kontrol butir halus fitur pembuatan kode x86. daftar fitur adalah daftar yang dipisahkan koma dari ciri nama. Lihat juga -mdump-tune-fitur. Ketika ditentukan, ciri dihidupkan jika tidak didahului dengan ^, jika tidak, dimatikan. -mtune-ctrl=daftar fitur dimaksudkan untuk digunakan oleh pengembang GCC. Menggunakannya dapat menyebabkan jalur kode yang tidak tercakup oleh pengujian dan dapat berpotensi menghasilkan ICE kompiler atau kesalahan runtime.

-mno-default Opsi ini menginstruksikan GCC untuk menonaktifkan semua fitur yang dapat disetel. Lihat juga -mtune-ctrl=daftar fitur serta -mdump-tune-fitur.

-mcld Opsi ini menginstruksikan GCC untuk mengeluarkan instruksi "cld" di prolog fungsi yang menggunakan instruksi string. Instruksi string tergantung pada bendera DF untuk dipilih antara mode autoincrement atau autodecrement. Sementara ABI menentukan bendera DF untuk dibersihkan pada entri fungsi, beberapa sistem operasi melanggar spesifikasi ini dengan tidak membersihkan bendera DF di operator pengecualian mereka. Penangan pengecualian dapat berupa dipanggil dengan set bendera DF, yang mengarah ke mode arah yang salah saat string instruksi digunakan. Opsi ini dapat diaktifkan secara default pada target x32 86-bit dengan: mengkonfigurasi GCC dengan --aktifkan-cld opsi konfigurasi. Generasi "cl" instruksi dapat ditekan dengan -mno-cld opsi kompiler dalam kasus ini.

-mvzeroupper Opsi ini menginstruksikan GCC untuk mengeluarkan instruksi "vzeroupper" sebelum transfer mengontrol aliran keluar dari fungsi untuk meminimalkan penalti transisi AVX ke SSE juga sebagai menghapus intrinsik "zeroupper" yang tidak perlu.

-mprefer-avx128 Opsi ini menginstruksikan GCC untuk menggunakan instruksi AVX 128-bit alih-alih AVX 256-bit instruksi dalam vektor otomatis.

-mcx16 Opsi ini memungkinkan GCC untuk menghasilkan instruksi "CMPXCHG16B". "CMPXCHG16B" memungkinkan untuk operasi atom pada tipe data 128-bit double quadword (atau oword). Ini adalah berguna untuk penghitung resolusi tinggi yang dapat diperbarui oleh banyak prosesor (atau inti). Instruksi ini dihasilkan sebagai bagian dari fungsi bawaan atom: lihat __sinkronisasi bawaan or __atomik bawaan untuk rincian.

-msahfi Opsi ini memungkinkan pembuatan instruksi "SAHF" dalam kode 64-bit. Intel awal CPU Pentium 4 dengan dukungan Intel 64, sebelum pengenalan langkah Pentium 4 G1 pada bulan Desember 2005, tidak memiliki instruksi "LAHF" dan "SAHF" yang didukung oleh AMD64. Ini adalah instruksi memuat dan menyimpan, masing-masing, untuk flag status tertentu. Dalam mode 64-bit, instruksi "SAHF" digunakan untuk mengoptimalkan "fmod", "drem", dan fungsi bawaan "sisa"; Lihat Lain bawaan untuk rincian.

-mmovbe Opsi ini memungkinkan penggunaan instruksi "movbe" untuk mengimplementasikan "__builtin_bswap32" dan "__builtin_bswap64".

-mcrc32 Opsi ini mengaktifkan fungsi bawaan "__builtin_ia32_crc32qi", "__builtin_ia32_crc32hi", "__builtin_ia32_crc32si" dan "__builtin_ia32_crc32di" ke menghasilkan instruksi mesin "crc32".

-mrecip Opsi ini memungkinkan penggunaan instruksi "RCPSS" dan "RSQRTSS" (dan vektornya varian "RCPPS" dan "RSQRTPS") dengan tambahan langkah Newton-Raphson untuk meningkatkan presisi alih-alih "DIVSS" dan "SQRTSS" (dan varian vektornya) untuk single- argumen floating-point presisi. Instruksi ini dihasilkan hanya ketika optimasi -funsafe-matematika diaktifkan bersama dengan -terbatas-matematika-saja serta -fno-perangkap-matematika. Perhatikan bahwa sementara throughput urutan lebih tinggi dari throughput dari instruksi non-timbal balik, ketepatan urutan dapat: menurun hingga 2 ulp (yaitu kebalikan dari 1.0 sama dengan 0.99999994).

Perhatikan bahwa GCC mengimplementasikan "1.0f/sqrtf(x)" dalam hal "RSQRTSS" (atau "RSQRTPS") sudah dengan -cepat-matematika (atau kombinasi opsi di atas), dan tidak perlu -mrecip.

Perhatikan juga bahwa GCC memancarkan urutan di atas dengan langkah Newton-Raphson tambahan untuk pembagian float tunggal yang divektorkan dan "sqrtf(x)" sudah dengan -cepat-matematika (atau kombinasi opsi di atas), dan tidak perlu -mrecip.

-mrecip=memilih Opsi ini mengontrol instruksi perkiraan timbal balik mana yang dapat digunakan. memilih adalah daftar opsi yang dipisahkan koma, yang dapat didahului oleh a ! untuk membalikkan opsi:

semua Aktifkan semua petunjuk perkiraan.

kegagalan Aktifkan instruksi default, setara dengan -mrecip.

tak satupun Nonaktifkan semua instruksi perkiraan, setara dengan -mno-recip.

div Aktifkan pendekatan untuk pembagian skalar.

vec-div Aktifkan aproksimasi untuk pembagian vektor.

persegi Aktifkan aproksimasi untuk akar kuadrat skalar.

vec-sqrt Aktifkan aproksimasi untuk akar kuadrat bervektor.

Jadi, misalnya, -mrecip=semua,!sqrt memungkinkan semua perkiraan timbal balik, kecuali akar kuadrat.

-mveclibabi=mengetik Menentukan jenis ABI yang akan digunakan untuk membuat vektor intrinsik menggunakan perpustakaan eksternal. Nilai yang didukung untuk mengetik adalah svml untuk perpustakaan matematika vektor pendek Intel dan acml untuk perpustakaan inti matematika AMD. Untuk menggunakan opsi ini, keduanya -ftree-vectorize serta optimasi -funsafe-matematika harus diaktifkan, dan kompatibel dengan SVML atau ACML ABI perpustakaan harus ditentukan pada waktu tautan.

GCC saat ini memancarkan panggilan ke "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" dan "vmlsAcos4" untuk jenis fungsi yang sesuai ketika -mveclibabi=svml is digunakan, dan "__vrd2_sin", "__vrd2_cos", "__vrd2_exp", "__vrd2_log", "__vrd2_log2", "__vrd2_log10", "__vrs4_sinf", "__vrs4_cosf", "__vrs4_expf", "__vrs4_logf", "__vrs4_log2f", "__vrs4_log10f" dan "__vrs4_powf" untuk jenis fungsi yang sesuai ketika -mveclibabi=acml digunakan.

-mabi=nama Hasilkan kode untuk konvensi panggilan yang ditentukan. Nilai yang diperbolehkan adalah sysv untuk ABI yang digunakan pada GNU/Linux dan sistem lainnya, dan ms untuk Microsoft ABI. NS defaultnya adalah menggunakan Microsoft ABI saat menargetkan Microsoft Windows dan SysV ABI pada semua sistem lainnya. Anda dapat mengontrol perilaku ini untuk fungsi tertentu dengan menggunakan atribut fungsi "ms_abi" dan "sysv_abi".

-mtls-dialek=mengetik Hasilkan kode untuk mengakses penyimpanan lokal-utas menggunakan gnu or gnu2 konvensi. gnu adalah default konservatif; gnu2 lebih efisien, tetapi mungkin menambahkan kompilasi dan run- persyaratan waktu yang tidak dapat dipenuhi pada semua sistem.

-push-args -mno-push-args Gunakan operasi PUSH untuk menyimpan parameter keluar. Metode ini lebih pendek dan biasanya sama cepatnya dengan metode yang menggunakan operasi SUB/MOV dan diaktifkan secara default. Dalam beberapa kasus menonaktifkannya dapat meningkatkan kinerja karena penjadwalan yang lebih baik dan pengurangan ketergantungan.

-maklumat-keluar-args Jika diaktifkan, jumlah ruang maksimum yang diperlukan untuk argumen keluar dihitung dalam prolog fungsi. Ini lebih cepat pada kebanyakan CPU modern karena pengurangan dependensi, penjadwalan yang lebih baik, dan pengurangan penggunaan tumpukan saat tumpukan yang diinginkan batas tidak sama dengan 2. Kekurangannya adalah peningkatan ukuran kode yang mencolok. Ini beralih menyiratkan -mno-push-args.

-mthreads Mendukung penanganan pengecualian thread-safe di MinGW. Program yang mengandalkan thread-safe penanganan pengecualian harus mengkompilasi dan menautkan semua kode dengan -mthreads pilihan. Kapan kompilasi, -mthreads mendefinisikan -D_MT; saat menautkan, itu tertaut di pembantu utas khusus perpustakaan -lmingwthrd yang membersihkan data penanganan pengecualian per-utas.

-mno-align-stringops Jangan sejajarkan tujuan operasi string sebaris. Sakelar ini mengurangi kode ukuran dan meningkatkan kinerja jika tujuan sudah selaras, tetapi GCC tidak tahu tentang itu.

-minline-semua-stringops Secara default, operasi string sebaris GCC hanya ketika tujuannya diketahui disejajarkan dengan setidaknya batas 4-byte. Ini memungkinkan lebih banyak inlining dan meningkatkan kode ukuran, tetapi dapat meningkatkan kinerja kode yang bergantung pada "memcpy", "strlen", dan . yang cepat "memset" untuk jangka pendek.

-minline-stringops-dinamis Untuk operasi string dengan ukuran yang tidak diketahui, gunakan pemeriksaan run-time dengan kode inline untuk small blok dan panggilan perpustakaan untuk blok besar.

-mstringop-strategi=ganggang Ganti heuristik keputusan internal untuk algoritma tertentu yang akan digunakan untuk operasi string inlining. Nilai yang diizinkan untuk ganggang adalah:

rep_byte rep_4byte rep_8byte Perluas menggunakan awalan "rep" i386 dengan ukuran yang ditentukan.

byte_loop lingkaran unrolled_loop Perluas menjadi loop sebaris.

panggilan lib Selalu gunakan panggilan perpustakaan.

-mmemcpy-strategi=Trade kelima – $ 33 Trade keenam – $ 78 Ganti heuristik keputusan internal untuk memutuskan apakah "__builtin_memcpy" seharusnya sebaris dan algoritma sebaris apa yang digunakan ketika ukuran yang diharapkan dari operasi penyalinan dikenal. Trade kelima – $ 33 Trade keenam – $ 78 adalah daftar yang dipisahkan koma dari ganggang:ukuran_maks:tujuan_align kembar tiga. ganggang ditentukan dalam -mstringop-strategi, ukuran_maks menentukan ukuran byte maks dengan yang algoritma sebaris ganggang Diperbolehkan. Untuk triplet terakhir, ukuran_maks harus "-1". NS ukuran_maks kembar tiga dalam daftar harus ditentukan dalam urutan yang meningkat. NS ukuran byte minimal untuk ganggang adalah 0 untuk triplet pertama dan "ukuran_maks + 1" dari rentang sebelumnya.

-mmemset-strategi=Trade kelima – $ 33 Trade keenam – $ 78 Pilihannya mirip dengan -mmemcpy-strategi= kecuali itu untuk mengontrol Ekspansi "__builtin_memset".

-momit-daun-frame-pointer Jangan simpan penunjuk bingkai dalam register untuk fungsi daun. Ini menghindari instruksi untuk menyimpan, mengatur, dan memulihkan pointer bingkai dan membuat register tambahan tersedia dalam fungsi daun. Pilihan -fomit-daun-frame-pointer menghapus bingkai pointer untuk fungsi daun, yang mungkin membuat debugging lebih sulit.

-mtls-direct-seg-refs -mno-tls-direct-seg-refs Mengontrol apakah variabel TLS dapat diakses dengan offset dari segmen TLS register (%gs untuk 32-bit, %fs untuk 64-bit), atau apakah penunjuk basis utas harus ditambahkan. Apakah ini valid atau tidak tergantung pada sistem operasi, dan apakah itu memetakan segmen untuk mencakup seluruh area TLS.

Untuk sistem yang menggunakan GNU C Library, defaultnya adalah aktif.

-msse2avx -mno-sse2avx Tentukan bahwa assembler harus mengkodekan instruksi SSE dengan awalan VEX. Pilihan -mavx mengaktifkan ini secara default.

-mfentry -mno-fentry Jika pembuatan profil aktif (-hal), letakkan panggilan penghitung pembuatan profil sebelum prolog. Catatan: Pada arsitektur x86, atribut "ms_hook_prologue" tidak dimungkinkan di saat untuk -mfentry serta -hal.

-mrecord-mcount -mno-rekam-mcount Jika pembuatan profil aktif (-hal), menghasilkan bagian __mcount_loc yang berisi pointer untuk setiap panggilan profil. Ini berguna untuk menambal dan menutup panggilan secara otomatis.

-mnop-mcount -mno-nop-mcount Jika pembuatan profil aktif (-hal), menghasilkan panggilan ke fungsi profil sebagai nops. Ini berguna ketika mereka harus ditambal nanti secara dinamis. Ini kemungkinan hanya bermanfaat bersama -mrecord-mcount.

-mskip-rax-setup -mno-skip-rax-setup Saat membuat kode untuk arsitektur x86-64 dengan ekstensi SSE dinonaktifkan, -lewati-rax-setup dapat digunakan untuk melewati pengaturan register RAX ketika tidak ada variabel argumen dilewatkan dalam register vektor.

Peringatan: Karena register RAX digunakan untuk menghindari penyimpanan register vektor yang tidak perlu pada tumpukan ketika melewati argumen variabel, dampak dari opsi ini adalah orang yang dipanggil mungkin buang beberapa ruang tumpukan, berperilaku buruk, atau lompat ke lokasi acak. GCC 4.4 atau lebih baru tidak memiliki masalah tersebut, terlepas dari nilai register RAX.

-m8bit-idiv -mno-8bit-idiv Pada beberapa prosesor, seperti Intel Atom, pembagian bilangan bulat tak bertanda 8-bit jauh lebih cepat daripada Pembagian bilangan bulat 32-bit/64-bit. Opsi ini menghasilkan pemeriksaan run-time. Jika keduanya dividen dan pembagi berada dalam kisaran 0 hingga 255, pembagian bilangan bulat unsigned 8-bit adalah digunakan sebagai pengganti pembagian integer 32-bit/64-bit.

-mavx256-split-unaligned-load -mavx256-split-unaligned-store Membagi beban dan penyimpanan tidak selaras AVX 32-byte.

-mstack-protector-guard=penjaga Hasilkan kode perlindungan tumpukan menggunakan canary di penjaga. Lokasi yang didukung adalah global untuk kenari global atau tls untuk per-thread canary di blok TLS (default). Ini opsi hanya berlaku jika -fstack-pelindung or -fstack-pelindung-semua ditentukan.

Ini -m sakelar didukung selain yang di atas pada prosesor x86-64 dalam 64-bit lingkungan.

-m32 -m64 -mx32 -m16 Hasilkan kode untuk lingkungan 16-bit, 32-bit, atau 64-bit. NS -m32 set opsi "int", "panjang", dan jenis pointer ke 32 bit, dan menghasilkan kode yang berjalan pada sistem i386 apa pun.

The -m64 opsi menyetel "int" ke 32 bit dan "panjang" dan tipe pointer ke 64 bit, dan menghasilkan kode untuk arsitektur x86-64. Untuk Darwin hanya -m64 pilihan juga mematikan -fno-pic serta -mdynamic-no-pic Pilihan.

The -mx32 opsi set "int", "panjang", dan tipe pointer ke 32 bit, dan menghasilkan kode untuk arsitektur x86-64.

The -m16 pilihannya sama dengan -m32, kecuali itu menampilkan ".code16gcc" arahan perakitan di awal output perakitan sehingga biner dapat berjalan dalam mode 16-bit.

-mno-zona merah Jangan gunakan apa yang disebut "zona merah" untuk kode x86-64. Zona merah diamanatkan oleh x86-64 ABI; itu adalah area 128-byte di luar lokasi penunjuk tumpukan yang tidak dimodifikasi oleh penangan sinyal atau interupsi dan oleh karena itu dapat digunakan untuk data sementara tanpa menyesuaikan penunjuk tumpukan. Bendera -mno-zona merah menonaktifkan zona merah ini.

-mcmodel=kecil Buat kode untuk model kode kecil: program dan simbolnya harus ditautkan dalam 2 GB ruang alamat yang lebih rendah. Pointer adalah 64 bit. Program dapat dihubungkan secara statis atau dinamis. Ini adalah model kode default.

-mcmodel=kernel Buat kode untuk model kode kernel. Kernel berjalan di negatif 2 GB ruang alamat. Model ini harus digunakan untuk kode kernel Linux.

-mcmodel=sedang Hasilkan kode untuk model sedang: program ditautkan di 2 GB bagian bawah ruang alamat. Simbol kecil juga ditempatkan di sana. Simbol dengan ukuran lebih besar dari -mlarge-data-ambang batas dimasukkan ke dalam data besar atau bagian BSS dan dapat ditemukan diatas 2GB. Program dapat dihubungkan secara statis atau dinamis.

-mcmodel=besar Buat kode untuk model besar. Model ini tidak membuat asumsi tentang alamat dan ukuran bagian.

-maddress-mode=panjang Hasilkan kode untuk mode alamat panjang. Ini hanya didukung untuk 64-bit dan x32 lingkungan. Ini adalah mode alamat default untuk lingkungan 64-bit.

-maddress-mode=pendek Hasilkan kode untuk mode alamat pendek. Ini hanya didukung untuk 32-bit dan x32 lingkungan. Ini adalah mode alamat default untuk lingkungan 32-bit dan x32.

x86 Windows Opsi

Opsi tambahan ini tersedia untuk target Microsoft Windows:

-mconsole Opsi ini menetapkan bahwa aplikasi konsol akan dibuat, dengan menginstruksikan linker untuk menyetel jenis subsistem header PE yang diperlukan untuk aplikasi konsol. Opsi ini tersedia untuk target Cygwin dan MinGW dan diaktifkan secara default di target tersebut.

-mdll Opsi ini tersedia untuk target Cygwin dan MinGW. Ini menentukan bahwa DLL---a perpustakaan tautan dinamis --- akan dihasilkan, memungkinkan pemilihan yang diperlukan objek startup runtime dan titik masuk.

-mnop-fun-dllimport Opsi ini tersedia untuk target Cygwin dan MinGW. Ini menentukan bahwa Atribut "dllimport" harus diabaikan.

-mthread Opsi ini tersedia untuk target MinGW. Ini menentukan utas khusus MinGW dukungan yang akan digunakan.

-municode Opsi ini tersedia untuk target MinGW-w64. Ini menyebabkan praprosesor "UNICODE" makro yang akan ditentukan sebelumnya, dan memilih kode startup runtime berkemampuan Unicode.

-mwin32 Opsi ini tersedia untuk target Cygwin dan MinGW. Ini menentukan bahwa tipikal Makro standar Microsoft Windows harus diatur di pra-prosesor, tetapi tidak mempengaruhi pilihan perpustakaan runtime/kode startup.

-mwindows Opsi ini tersedia untuk target Cygwin dan MinGW. Ini menentukan bahwa GUI aplikasi akan dihasilkan dengan menginstruksikan linker untuk mengatur header PE jenis subsistem dengan tepat.

-fno-set-stack-executable Opsi ini tersedia untuk target MinGW. Ini menentukan bahwa flag yang dapat dieksekusi untuk tumpukan yang digunakan oleh fungsi bersarang tidak disetel. Ini diperlukan untuk menjalankan binari dalam mode kernel Microsoft Windows, karena ada User32 API, yang digunakan untuk mengatur hak istimewa yang dapat dieksekusi, tidak tersedia.

-fwritable-relokasi-rdata Opsi ini tersedia untuk target MinGW dan Cygwin. Ini menentukan bahwa relokasi- data di bagian read-only dimasukkan ke bagian .data. Ini adalah kebutuhan untuk yang lebih tua runtime tidak mendukung modifikasi bagian .rdata untuk pseudo-relokasi.

-mpe-aligned-commons Opsi ini tersedia untuk target Cygwin dan MinGW. Ini menentukan bahwa GNU ekstensi ke format file PE yang memungkinkan penyelarasan yang benar dari variabel UMUM harus digunakan saat membuat kode. Ini diaktifkan secara default jika GCC mendeteksi bahwa assembler target yang ditemukan selama konfigurasi mendukung fitur tersebut.

Lihat juga di bawah x86 Opsi untuk opsi standar.

Xstormy16 Opsi

Opsi ini ditentukan untuk Xstormy16:

-msim Pilih file startup dan skrip tautan yang cocok untuk simulator.

Xtensa Opsi

Opsi ini didukung untuk target Xtensa:

-mconst16 -mno-const16 Mengaktifkan atau menonaktifkan penggunaan instruksi "CONST16" untuk memuat nilai konstan. NS Instruksi "CONST16" saat ini bukan merupakan opsi standar dari Tensilica. Kapan diaktifkan, instruksi "CONST16" selalu digunakan sebagai pengganti standar "L32R" instruksi. Penggunaan "CONST16" diaktifkan secara default hanya jika "L32R" instruksi tidak tersedia.

-mfused-madd -mno-menyatu-madd Mengaktifkan atau menonaktifkan penggunaan instruksi perkalian/penambahan dan perkalian/pengurangan yang menyatu di opsi floating-point. Ini tidak berpengaruh jika opsi floating-point tidak juga diaktifkan. Menonaktifkan instruksi perkalian/penambahan dan perkalian/pengurangan yang menyatu memaksa compiler untuk menggunakan instruksi terpisah untuk operasi perkalian dan penambahan/pengurangan. Ini mungkin diinginkan dalam beberapa kasus di mana hasil yang sesuai dengan IEEE 754 adalah diperlukan: instruksi penjumlahan/pengurangan perkalian yang menyatu tidak membulatkan perantara hasil, sehingga menghasilkan hasil dengan lebih bit presisi dari yang ditentukan oleh standar IEEE. Menonaktifkan instruksi penjumlahan/pengurangan gandakan yang menyatu juga memastikan bahwa keluaran program tidak peka terhadap kemampuan kompiler untuk menggabungkan perkalian dan operasi penambahan/pengurangan.

-mserialize-volatile -mno-serialize-volatile Saat opsi ini diaktifkan, GCC menyisipkan instruksi "MEMW" sebelum memori "volatile" referensi untuk menjamin konsistensi berurutan. Standarnya adalah -mserialize-volatile. penggunaan -mno-serialize-volatile untuk menghilangkan instruksi "MEMW".

-mforce-no-pic Untuk target, seperti GNU/Linux, di mana semua kode Xtensa mode pengguna harus berada di posisi- kode independen (PIC), opsi ini menonaktifkan PIC untuk mengkompilasi kode kernel.

-mtext-section-literals -mno-teks-bagian-literal Opsi ini mengontrol perawatan kumpulan literal. Standarnya adalah -mno-teks-bagian-literal, yang menempatkan literal di bagian terpisah di output mengajukan. Hal ini memungkinkan kumpulan literal untuk ditempatkan dalam data RAM/ROM, dan juga memungkinkan tautan untuk menggabungkan kumpulan literal dari file objek terpisah untuk menghapus yang berlebihan literal dan meningkatkan ukuran kode. Dengan -mtext-section-literals, literalnya adalah diselingi di bagian teks untuk menjaga mereka sedekat mungkin dengan mereka referensi. Ini mungkin diperlukan untuk file perakitan besar.

-mtarget-sejajarkan -mno-target-sejajarkan Saat opsi ini diaktifkan, GCC menginstruksikan assembler untuk menyelaraskan secara otomatis instruksi untuk mengurangi hukuman cabang dengan mengorbankan beberapa kepadatan kode. NS assembler mencoba untuk memperluas instruksi kepadatan untuk menyelaraskan target cabang dan instruksi mengikuti instruksi panggilan. Jika tidak ada cukup brankas sebelumnya instruksi kepadatan untuk menyelaraskan target, tidak ada pelebaran yang dilakukan. Standarnya adalah -mtarget-sejajarkan. Opsi ini tidak memengaruhi perawatan penyelarasan otomatis instruksi seperti "LOOP", yang selalu disejajarkan oleh assembler, baik dengan melebarkan instruksi kepadatan atau dengan memasukkan instruksi NOP.

-mlongcalls -mno-panggilan panjang Saat opsi ini diaktifkan, GCC menginstruksikan assembler untuk menerjemahkan panggilan langsung ke panggilan tidak langsung kecuali dapat menentukan bahwa target panggilan langsung ada di rentang yang diizinkan oleh instruksi panggilan. Terjemahan ini biasanya terjadi untuk panggilan ke fungsi dalam file sumber lain. Secara khusus, assembler menerjemahkan direct instruksi "CALL" menjadi "L32R" diikuti dengan instruksi "CALLX". Standarnya adalah -mno-panggilan panjang. Opsi ini harus digunakan dalam program di mana target panggilan dapat berpotensi berada di luar jangkauan. Opsi ini diimplementasikan di assembler, bukan di compiler, sehingga kode perakitan yang dihasilkan oleh GCC masih menunjukkan panggilan langsung instruksi --- lihat kode objek yang dibongkar untuk melihat instruksi yang sebenarnya. Perhatikan bahwa assembler menggunakan panggilan tidak langsung untuk setiap panggilan lintas file, bukan hanya mereka yang benar-benar di luar jangkauan.

zSeri Opsi

Ini terdaftar di bawah

Opsi untuk Kode Generasi Konvensi Opsi mesin-independen ini mengontrol konvensi antarmuka yang digunakan dalam kode generasi.

Kebanyakan dari mereka memiliki bentuk positif dan negatif; bentuk negatif dari -ffo is -fno-foo. Pada tabel di bawah ini, hanya satu dari formulir yang terdaftar --- yang bukan bawaan. Anda dapat mengetahui bentuk lain dengan menghapus tidak- atau menambahkannya.

-fbounds-cek Untuk ujung depan yang mendukungnya, buat kode tambahan untuk memeriksa indeks yang digunakan untuk array akses berada dalam rentang yang dideklarasikan. Ini saat ini hanya didukung oleh Ujung depan Java dan Fortran, di mana opsi ini default ke true dan false masing.

-fstack-reuse=tingkat penggunaan kembali Opsi ini mengontrol penggunaan kembali ruang tumpukan untuk variabel lokal/otomatis yang dideklarasikan pengguna dan compiler yang dihasilkan sementara. tingkat_penggunaan ulang dapat semua, bernama_vars, atau tak satupun. semua memungkinkan penggunaan kembali tumpukan untuk semua variabel lokal dan sementara, bernama_vars memungkinkan gunakan kembali hanya untuk variabel lokal yang ditentukan pengguna dengan nama, dan tak satupun menonaktifkan penggunaan kembali tumpukan sama sekali. Nilai defaultnya adalah semua. Opsi ini diperlukan saat program diperpanjang masa pakai variabel lokal tercakup atau kompiler yang dihasilkan sementara di luar titik akhir yang ditentukan oleh bahasa. Ketika umur variabel berakhir, dan jika variabel tinggal di memori, kompiler pengoptimal memiliki kebebasan untuk menggunakan kembali tumpukannya ruang dengan variabel lokal sementara atau cakupan lainnya yang jangkauan langsungnya tidak tumpang tindih dengannya. Kode lama yang memperpanjang masa pakai lokal kemungkinan besar akan putus dengan optimasi penggunaan kembali tumpukan.

Sebagai contoh,

int *p; { int lokal1;

p = &lokal1; lokal1 = 10; .... } { int lokal2; lokal2 = 20; ... }

if (*p == 10) // di luar cakupan penggunaan local1 {

}

Contoh lain:

struktur A { A(int k) : i(k), j(k) {} di aku; int j; };

Sebuah *ap;

void foo(const A& ar) { ap = &ar; }

bilah kosong() { foo(A(10)); // masa pakai objek temp berakhir saat foo kembali

{ A a(20); .... } ap->i+= 10; // ap referensi di luar ruang lingkup temp yang ruangnya // digunakan kembali dengan a. Berapakah nilai ap->i? }

Masa pakai kompiler yang dihasilkan sementara ditentukan dengan baik oleh standar C++. Ketika seumur hidup dari yang sementara berakhir, dan jika yang sementara tinggal dalam ingatan, kompiler pengoptimal memiliki kebebasan untuk menggunakan kembali ruang tumpukannya dengan temporer lain atau lingkup variabel lokal yang rentang hidup tidak tumpang tindih dengan itu. Namun beberapa dari kode warisan bergantung pada perilaku kompiler lama di mana tumpukan sementara ruang tidak digunakan kembali, penggunaan kembali tumpukan yang agresif dapat menyebabkan kesalahan runtime. Ini opsi digunakan untuk mengontrol optimasi penggunaan kembali tumpukan sementara.

-ftrapv Opsi ini menghasilkan jebakan untuk overflow yang ditandatangani pada penambahan, pengurangan, operasi perkalian.

-fwrapv Opsi ini menginstruksikan kompiler untuk mengasumsikan bahwa aritmatika yang ditandatangani meluap dari penjumlahan, pengurangan, dan perkalian menggunakan dua-pelengkap perwakilan. Bendera ini mengaktifkan beberapa pengoptimalan dan menonaktifkan yang lain. Ini opsi diaktifkan secara default untuk ujung depan Java, seperti yang dipersyaratkan oleh bahasa Java spesifikasi.

-feksepsi Aktifkan penanganan pengecualian. Menghasilkan kode tambahan yang diperlukan untuk menyebarkan pengecualian. Untuk beberapa target, ini berarti GCC menghasilkan informasi pelepasan bingkai untuk semua fungsi, yang dapat menghasilkan overhead ukuran data yang signifikan, meskipun tidak mempengaruhi eksekusi. Jika Anda tidak menentukan opsi ini, GCC mengaktifkannya secara default untuk bahasa seperti C++ yang biasanya memerlukan penanganan pengecualian, dan menonaktifkannya untuk bahasa seperti C yang biasanya tidak memerlukannya. Namun, Anda mungkin perlu mengaktifkan opsi ini saat kompilasi kode C yang perlu beroperasi dengan benar dengan penangan pengecualian tertulis dalam C++. Anda mungkin juga ingin menonaktifkan opsi ini jika Anda mengkompilasi C++ yang lebih lama program yang tidak menggunakan penanganan pengecualian.

-fnon-panggilan-pengecualian Hasilkan kode yang memungkinkan instruksi trapping untuk melempar pengecualian. Perhatikan bahwa ini membutuhkan dukungan runtime khusus platform yang tidak ada di mana-mana. Lebih-lebih lagi, itu hanya memungkinkan penangkapan instruksi untuk membuang pengecualian, yaitu referensi memori atau instruksi floating-point. Itu tidak memungkinkan pengecualian dilemparkan dari sewenang-wenang penangan sinyal seperti "SIGALRM".

-fdelete-mati-pengecualian Pertimbangkan instruksi yang mungkin menimbulkan pengecualian tetapi tidak berkontribusi pada eksekusi program dapat dioptimalkan. Opsi ini diaktifkan secara default untuk ujung depan Ada, sebagaimana diizinkan oleh spesifikasi bahasa Ada. Optimasi melewati yang menyebabkan pengecualian mati untuk dihapus diaktifkan secara independen di berbeda tingkat optimasi.

-funwind-tabel Mirip dengan -feksepsi, kecuali bahwa itu hanya menghasilkan data statis yang diperlukan, tapi tidak mempengaruhi kode yang dihasilkan dengan cara lain. Anda biasanya tidak perlu aktifkan opsi ini; sebagai gantinya, prosesor bahasa yang membutuhkan penanganan ini memungkinkannya atas nama Anda.

-fasynchronous-unwind-tabel Buat tabel bersantai dalam format DWARF 2, jika didukung oleh mesin target. Meja adalah tepat pada setiap batas instruksi, sehingga dapat digunakan untuk melepas tumpukan dari peristiwa asinkron (seperti debugger atau pengumpul sampah).

-fno-gnu-unik Pada sistem dengan assembler GNU dan pustaka C terbaru, kompiler C++ menggunakan: "STB_GNU_UNIQUE" mengikat untuk memastikan bahwa definisi anggota data statis template dan variabel lokal statis dalam fungsi sebaris adalah unik bahkan dengan adanya "RTLD_LOCAL"; ini diperlukan untuk menghindari masalah dengan perpustakaan yang digunakan oleh dua yang berbeda Plugin "RTLD_LOCAL" tergantung pada definisi di salah satunya dan karenanya tidak setuju dengan yang lain tentang pengikatan simbol. Tapi ini menyebabkan "dlclose" untuk diabaikan untuk DSO yang terpengaruh; jika program Anda bergantung pada inisialisasi ulang dari DSO melalui "dlclose" dan "dlopen", Anda dapat menggunakan -fno-gnu-unik.

-fpcc-struct-return Kembalikan nilai "short" "struct" dan "union" dalam memori seperti yang lebih panjang, bukan di mendaftar. Konvensi ini kurang efisien, tetapi memiliki keuntungan memungkinkan intercallability antara file yang dikompilasi GCC dan file yang dikompilasi dengan kompiler lain, khususnya Portable C Compiler (pcc).

Konvensi yang tepat untuk mengembalikan struktur dalam memori tergantung pada target makro konfigurasi.

Struktur pendek dan serikat pekerja adalah mereka yang ukuran dan keselarasannya cocok dengan beberapa tipe bilangan bulat.

Peringatan: kode dikompilasi dengan -fpcc-struct-return sakelar tidak kompatibel dengan biner dengan kode yang dikompilasi dengan -freg-struct-return mengalihkan. Gunakan untuk menyesuaikan diri dengan non- antarmuka biner aplikasi default.

-freg-struct-return Kembalikan nilai "struct" dan "union" dalam register jika memungkinkan. Ini lebih efisien untuk struktur kecil dari -fpcc-struct-return.

Jika Anda tidak menentukan keduanya -fpcc-struct-return maupun -freg-struct-return, GCC default ke konvensi mana pun yang standar untuk target. Jika tidak ada konvensi standar, GCC default ke -fpcc-struct-return, kecuali pada target di mana GCC adalah prinsipal penyusun. Dalam kasus itu, kami dapat memilih standar, dan kami memilih yang lebih efisien daftar kembali alternatif.

Peringatan: kode dikompilasi dengan -freg-struct-return sakelar tidak kompatibel dengan biner dengan kode yang dikompilasi dengan -fpcc-struct-return mengalihkan. Gunakan untuk menyesuaikan diri dengan non- antarmuka biner aplikasi default.

-fshort-enum Alokasikan ke tipe "enum" hanya sebanyak byte yang dibutuhkan untuk rentang yang dideklarasikan nilai-nilai yang mungkin. Secara khusus, tipe "enum" setara dengan bilangan bulat terkecil tipe yang memiliki ruang yang cukup.

Peringatan: itu -fshort-enum switch menyebabkan GCC menghasilkan kode yang bukan biner kompatibel dengan kode yang dihasilkan tanpa sakelar itu. Gunakan untuk menyesuaikan dengan non- antarmuka biner aplikasi default.

-short-double Gunakan ukuran yang sama untuk "ganda" seperti untuk "mengambang".

Peringatan: itu -short-double switch menyebabkan GCC menghasilkan kode yang bukan biner kompatibel dengan kode yang dihasilkan tanpa sakelar itu. Gunakan untuk menyesuaikan dengan non- antarmuka biner aplikasi default.

-fshort-wchar Ganti jenis yang mendasari untuk "wchar_t" menjadi "short unsigned int" alih-alih default untuk target. Opsi ini berguna untuk membangun program agar berjalan di bawah ANGGUR.

Peringatan: itu -fshort-wchar switch menyebabkan GCC menghasilkan kode yang bukan biner kompatibel dengan kode yang dihasilkan tanpa sakelar itu. Gunakan untuk menyesuaikan dengan non- antarmuka biner aplikasi default.

-fno-umum Dalam kode C, mengontrol penempatan variabel global yang tidak diinisialisasi. Kompiler Unix C secara tradisional mengizinkan beberapa definisi variabel semacam itu dalam berbagai unit kompilasi dengan menempatkan variabel dalam blok umum. Ini adalah perilakunya ditentukan oleh -fcommon, dan merupakan default untuk GCC di sebagian besar target. Di samping itu, perilaku ini tidak diperlukan oleh ISO C, dan pada beberapa target mungkin membawa kecepatan atau kode penalti ukuran pada referensi variabel. NS -fno-umum opsi menentukan bahwa kompiler harus menempatkan variabel global yang tidak diinisialisasi di bagian data objek file, daripada membuatnya sebagai blok umum. Hal ini berdampak jika variabel yang sama dideklarasikan (tanpa "ekstern") dalam dua kompilasi berbeda, Anda mendapatkan a kesalahan definisi ganda saat Anda menautkannya. Dalam hal ini, Anda harus mengkompilasi dengan -fcommon sebagai gantinya. kompilasi dengan -fno-umum berguna pada target yang memberikan kinerja yang lebih baik, atau jika Anda ingin memverifikasi bahwa program akan bekerja sistem lain yang selalu memperlakukan deklarasi variabel yang tidak diinisialisasi dengan cara ini.

-fno-identitas Abaikan arahan "#ident".

-arah-ukuran-batas Jangan menampilkan direktif assembler ".size", atau apa pun yang akan menyebabkan masalah jika fungsinya dibagi di tengah, dan kedua bagian ditempatkan di lokasi yang jauh terpisah dalam ingatan. Opsi ini digunakan saat kompilasi crtstuff.c; Anda tidak perlu menggunakannya untuk hal lain.

-fverbose-asm Masukkan informasi komentar tambahan dalam kode perakitan yang dihasilkan untuk membuatnya lebih banyak dapat dibaca. Opsi ini umumnya hanya berguna bagi mereka yang benar-benar perlu membaca kode perakitan yang dihasilkan (mungkin saat men-debug kompiler itu sendiri).

-fno-verbose-asm, defaultnya, menyebabkan informasi tambahan dihilangkan dan adalah berguna ketika membandingkan dua file assembler.

-record-gcc-switch Sakelar ini menyebabkan baris perintah yang digunakan untuk memanggil kompiler direkam ke dalam file objek yang sedang dibuat. Switch ini hanya diimplementasikan pada beberapa target dan format yang tepat dari rekaman adalah target dan format file biner dependen, tetapi biasanya berbentuk bagian yang berisi teks ASCII. Ini saklar terkait dengan -fverbose-asm sakelar, tetapi sakelar itu hanya merekam informasi dalam file keluaran assembler sebagai komentar, sehingga tidak pernah mencapai objek mengajukan. Lihat juga -grecord-gcc-switch untuk cara lain menyimpan opsi kompiler ke dalam berkas objek.

-fpic Buat kode posisi-independen (PIC) yang cocok untuk digunakan di perpustakaan bersama, jika didukung untuk mesin target. Kode tersebut mengakses semua alamat konstan melalui a tabel offset global (GOT). Pemuat dinamis menyelesaikan entri GOT ketika program dimulai (pemuat dinamis bukan bagian dari GCC; itu adalah bagian dari operasi sistem). Jika ukuran GOT untuk executable yang ditautkan melebihi maksimum khusus mesin size, Anda mendapatkan pesan kesalahan dari tautan yang menunjukkan bahwa -fpic tidak bekerja; di dalam kasus itu, kompilasi ulang dengan -fPIC sebagai gantinya. (Maksimum ini adalah 8k di SPARC dan 32k pada m68k dan RS/6000. x86 tidak memiliki batas seperti itu.)

Kode posisi-independen memerlukan dukungan khusus, dan karena itu hanya bekerja pada mesin tertentu. Untuk x86, GCC mendukung PIC untuk Sistem V tetapi tidak untuk Matahari 386i. Kode yang dihasilkan untuk IBM RS/6000 selalu tidak bergantung pada posisi.

Ketika bendera ini disetel, makro "__pic__" dan "__PIC__" didefinisikan menjadi 1.

-fPIC Jika didukung untuk mesin target, pancarkan kode posisi-independen, cocok untuk penautan dinamis dan menghindari batasan ukuran tabel offset global. Ini pilihan membuat perbedaan pada m68k, PowerPC dan SPARC.

Kode posisi-independen memerlukan dukungan khusus, dan karena itu hanya bekerja pada mesin tertentu.

Ketika bendera ini disetel, makro "__pic__" dan "__PIC__" didefinisikan menjadi 2.

-fpie -fPIE Opsi ini mirip dengan -fpic serta -fPIC, tetapi menghasilkan kode independen posisi hanya dapat ditautkan ke dalam executable. Biasanya opsi ini digunakan ketika -pai GCC pilihan digunakan selama menghubungkan.

-fpie serta -fPIE keduanya mendefinisikan makro "__pie__" dan "__PIE__". Macro memiliki nilai 1 untuk -fpie dan 2 untuk -fPIE.

-fno-lompat-tabel Jangan gunakan tabel lompat untuk pernyataan sakelar meskipun itu akan lebih efisien daripada strategi pembuatan kode lainnya. Opsi ini digunakan bersama dengan -fpic or -fPIC untuk membangun kode yang merupakan bagian dari penghubung dinamis dan tidak dapat referensi alamat tabel melompat. Pada beberapa target, tabel lompat tidak memerlukan GOT dan opsi ini tidak diperlukan.

-tetap-reg Perlakukan register bernama reg sebagai daftar tetap; kode yang dihasilkan tidak boleh merujuk ke itu (kecuali mungkin sebagai penunjuk tumpukan, penunjuk bingkai atau dalam beberapa peran tetap lainnya).

reg harus nama register. Nama register yang diterima adalah khusus mesin dan didefinisikan dalam makro "REGISTER_NAMES" di file makro deskripsi mesin.

Bendera ini tidak memiliki bentuk negatif, karena menentukan pilihan tiga arah.

-fcall-digunakan-reg Perlakukan register bernama reg sebagai register yang dapat dialokasikan yang dihancurkan oleh fungsi panggilan. Ini dapat dialokasikan untuk sementara atau variabel yang tidak hidup di seluruh a panggilan. Fungsi yang dikompilasi dengan cara ini tidak menyimpan dan memulihkan register reg.

Ini adalah kesalahan untuk menggunakan bendera ini dengan penunjuk bingkai atau penunjuk tumpukan. Penggunaan ini flag untuk register lain yang memiliki peran pervasif tetap dalam eksekusi mesin model menghasilkan hasil bencana.

Bendera ini tidak memiliki bentuk negatif, karena menentukan pilihan tiga arah.

-fcall-disimpan-reg Perlakukan register bernama reg sebagai register yang dapat dialokasikan yang disimpan oleh fungsi. Itu mungkin dialokasikan bahkan untuk sementara atau variabel yang hidup di panggilan. Fungsi dikompilasi dengan cara ini simpan dan pulihkan register reg jika mereka menggunakannya.

Ini adalah kesalahan untuk menggunakan bendera ini dengan penunjuk bingkai atau penunjuk tumpukan. Penggunaan ini flag untuk register lain yang memiliki peran pervasif tetap dalam eksekusi mesin model menghasilkan hasil bencana.

Jenis bencana yang berbeda dihasilkan dari penggunaan flag ini untuk register di mana nilai fungsi dapat dikembalikan.

Bendera ini tidak memiliki bentuk negatif, karena menentukan pilihan tiga arah.

-fpack-struct[=n] Tanpa nilai yang ditentukan, kemas semua anggota struktur bersama-sama tanpa lubang. Ketika sebuah nilai ditentukan (yang harus menjadi kekuatan kecil dari dua), anggota struktur paket menurut nilai ini, mewakili keselarasan maksimum (yaitu, objek dengan persyaratan penyelarasan default yang lebih besar dari ini adalah keluaran yang berpotensi tidak selaras di lokasi pemasangan berikutnya.

Peringatan: itu -fpack-struktur switch menyebabkan GCC menghasilkan kode yang bukan biner kompatibel dengan kode yang dihasilkan tanpa sakelar itu. Selain itu, itu membuat kode kurang optimal. Gunakan untuk menyesuaikan dengan antarmuka biner aplikasi non-default.

-fungsi-instrumen Menghasilkan panggilan instrumentasi untuk masuk dan keluar ke fungsi. Tepat setelah fungsi masuk dan tepat sebelum fungsi keluar, fungsi profil berikut dipanggil dengan alamat fungsi saat ini dan situs panggilannya. (Pada beberapa platform, "__builtin_return_address" tidak berfungsi di luar fungsi saat ini, jadi situs panggilan informasi mungkin tidak tersedia untuk fungsi profil sebaliknya.)

batalkan __cyg_profile_func_enter (batalkan *this_fn, batal *panggilan_situs); batalkan __cyg_profile_func_exit (batalkan *this_fn, batal *panggilan_situs);

Argumen pertama adalah alamat awal dari fungsi saat ini, yang mungkin: melihat persis di tabel simbol.

Instrumentasi ini juga dilakukan untuk fungsi-fungsi yang diperluas sebaris di fungsi-fungsi lain. Panggilan pembuatan profil menunjukkan di mana, secara konseptual, fungsi inline dimasukkan dan keluar. Ini berarti bahwa versi yang dapat dialamatkan dari fungsi tersebut harus tersedia. Jika semua penggunaan fungsi Anda diperluas sebaris, ini mungkin berarti perluasan tambahan dari ukuran kode. Jika Anda menggunakan "extern inline" dalam kode C Anda, versi yang dapat dialamatkan dari fungsi tersebut harus disediakan. (Lagi pula ini biasanya terjadi, tetapi jika Anda mengerti beruntung dan pengoptimal selalu memperluas fungsi sebaris, Anda mungkin mendapatkan pergi tanpa memberikan salinan statis.)

Suatu fungsi dapat diberikan atribut "no_instrument_function", dalam hal ini instrumentasi tidak dilakukan. Ini dapat digunakan, misalnya, untuk pembuatan profil fungsi yang tercantum di atas, rutinitas interupsi prioritas tinggi, dan fungsi apa pun dari mana fungsi pembuatan profil tidak dapat dipanggil dengan aman (mungkin penangan sinyal, jika rutinitas profiling menghasilkan output atau mengalokasikan memori).

-finstrument-functions-exclude-file-list=fillet,fillet... Tetapkan daftar fungsi yang dikecualikan dari instrumentasi (lihat deskripsi of -fungsi-instrumen). Jika file yang berisi definisi fungsi cocok dengan salah satu dari fillet, maka fungsi tersebut tidak diinstrumentasikan. Pertandingan selesai pada substring: jika fillet parameter adalah substring dari nama file, itu dianggap menjadi pertandingan.

Sebagai contoh:

-finstrument-functions-exclude-file-list=/bits/stl,include/sys

mengecualikan fungsi sebaris apa pun yang ditentukan dalam file yang nama jalurnya mengandung /bit/stl or termasuk/sys.

Jika, karena alasan tertentu, Anda ingin menyertakan surat , di salah satu sim, menulis ,. Sebagai contoh, -finstrument-functions-exclude-file-list=',,tmp' (perhatikan kutipan tunggal di sekitarnya pilihan).

-instrument-functions-exclude-function-list=sim,sim... Ini mirip dengan -finstrument-functions-exclude-file-list, tetapi opsi ini menetapkan daftar nama fungsi yang akan dikecualikan dari instrumentasi. Nama fungsi menjadi cocok adalah nama yang terlihat oleh pengguna, seperti "vektor bla (vektor konstanta &)", bukan nama rusak internal (misalnya, "_Z4blahRSt6vectorIiSaIiEE"). Pertandingan selesai pada substring: jika sim parameter adalah substring dari nama fungsi, itu dianggap menjadi pertandingan. Untuk pengidentifikasi tambahan C99 dan C++, nama fungsi harus diberikan di UTF-8, tidak menggunakan nama karakter universal.

-fstack-periksa Hasilkan kode untuk memverifikasi bahwa Anda tidak melampaui batas tumpukan. Anda harus menentukan tanda ini jika Anda menjalankan di lingkungan dengan banyak utas, tetapi Anda jarang perlu menentukannya dalam lingkungan utas tunggal sejak tumpukan overflow terdeteksi secara otomatis di hampir semua sistem jika hanya ada satu tumpukan.

Perhatikan bahwa sakelar ini sebenarnya tidak menyebabkan pemeriksaan dilakukan; operasi sistem atau runtime bahasa harus melakukan itu. Sakelar menyebabkan pembuatan kode menjadi memastikan bahwa mereka melihat tumpukan sedang diperpanjang.

Anda juga dapat menentukan parameter string: tidak berarti tidak ada pemeriksaan, umum cara memaksa penggunaan pemeriksaan gaya lama, tertentu berarti menggunakan metode pemeriksaan terbaik dan setara dengan telanjang -fstack-periksa.

Pemeriksaan gaya lama adalah mekanisme umum yang tidak memerlukan dukungan target khusus dalam kompiler tetapi dilengkapi dengan kelemahan berikut:

1. Strategi alokasi yang dimodifikasi untuk objek besar: mereka selalu dialokasikan dinamis jika ukurannya melebihi ambang batas tetap.

2. Batas tetap pada ukuran kerangka fungsi statis: ketika di atasnya a fungsi tertentu, pemeriksaan tumpukan tidak dapat diandalkan dan peringatan dikeluarkan oleh penyusun.

3. Inefisiensi: karena strategi alokasi yang dimodifikasi dan generik implementasi, kinerja kode terhambat.

Perhatikan bahwa pemeriksaan tumpukan gaya lama juga merupakan metode mundur untuk tertentu jika tidak dukungan target telah ditambahkan di kompiler.

-fstack-limit-register=reg -fstack-batas-simbol =sim -fno-stack-limit Hasilkan kode untuk memastikan bahwa tumpukan juga tidak tumbuh melampaui nilai tertentu nilai register atau alamat simbol. Jika diperlukan tumpukan yang lebih besar, a sinyal dinaikkan pada waktu berjalan. Untuk sebagian besar target, sinyal dinaikkan sebelum tumpukan melampaui batas, sehingga dimungkinkan untuk menangkap sinyal tanpa mengambil khusus tindakan pencegahan.

Misalnya, jika tumpukan dimulai pada alamat absolut 0x80000000 dan tumbuh ke bawah, Anda dapat menggunakan bendera -fstack-limit-symbol=__stack_limit serta -Wl,--defsym,__stack_limit=0x7ffe0000 untuk menegakkan batas tumpukan 128KB. Perhatikan bahwa ini hanya dapat bekerja dengan tautan GNU.

-fsplit-tumpukan Hasilkan kode untuk secara otomatis membagi tumpukan sebelum meluap. yang dihasilkan program memiliki tumpukan terpisah yang hanya dapat meluap jika program tidak dapat mengalokasikan memori lagi. Ini paling berguna saat menjalankan program berulir, karena tidak lagi diperlukan untuk menghitung ukuran tumpukan yang baik untuk digunakan untuk setiap utas. Ini adalah saat ini hanya diimplementasikan untuk target x86 yang menjalankan GNU/Linux.

Ketika kode dikompilasi dengan -fsplit-tumpukan kode panggilan dikompilasi tanpa -fsplit-tumpukan, ada mungkin tidak banyak ruang tumpukan yang tersedia untuk menjalankan kode terakhir. Jika mengkompilasi semua kode, termasuk kode perpustakaan, dengan -fsplit-tumpukan bukan pilihan, maka tautannya bisa perbaiki panggilan ini sehingga kode dikompilasi tanpa -fsplit-tumpukan selalu memiliki besar tumpukan. Dukungan untuk ini diimplementasikan dalam tautan emas dalam rilis binutils GNU 2.21 dan setelahnya.

-fleading-garis bawah Opsi ini dan mitranya, -fno-leading-garis bawah, paksa mengubah cara C simbol direpresentasikan dalam file objek. Salah satu kegunaannya adalah untuk membantu menautkan dengan warisan kode perakitan.

Peringatan: itu -fleading-garis bawah switch menyebabkan GCC menghasilkan kode yang tidak biner yang kompatibel dengan kode yang dihasilkan tanpa sakelar itu. Gunakan untuk menyesuaikan dengan antarmuka biner aplikasi non-default. Tidak semua target memberikan dukungan penuh untuk sakelar ini.

-ftls-model=model Ubah model penyimpanan thread-lokal yang akan digunakan. NS model argumen harus menjadi salah satu dari global-dinamis, lokal-dinamis, inisial-exec or lokal-exec. Perhatikan bahwa pilihannya adalah tunduk pada optimasi: kompiler dapat menggunakan model yang lebih efisien untuk simbol tidak terlihat di luar unit terjemahan, atau jika -fpic tidak diberikan pada baris perintah.

Default tanpa -fpic is inisial-exec; dengan -fpic defaultnya adalah global-dinamis.

-fvisibilitas=[kegagalan|intern|tersembunyi|terlindung] Atur visibilitas simbol gambar ELF default ke opsi yang ditentukan --- semua simbol adalah ditandai dengan ini kecuali diganti dalam kode. Menggunakan fitur ini bisa sangat secara substansial meningkatkan penautan dan waktu muat perpustakaan objek bersama, menghasilkan lebih banyak kode yang dioptimalkan, menyediakan ekspor API yang hampir sempurna dan mencegah bentrokan simbol. Dia sangat merekomendasikan agar Anda menggunakan ini di objek bersama apa pun yang Anda distribusikan.

Meskipun nomenklatur, kegagalan selalu berarti publik; yaitu, tersedia untuk ditautkan melawan dari luar objek bersama. terlindung serta intern sangat tidak berguna dalam penggunaan dunia nyata sehingga satu-satunya pilihan lain yang umum digunakan adalah tersembunyi. default jika -fvisibilitas tidak ditentukan adalah kegagalan, yaitu, membuat setiap simbol publik.

Penjelasan yang baik tentang manfaat yang ditawarkan dengan memastikan simbol ELF benar visibilitas diberikan oleh "Cara Menulis Pustaka Bersama" oleh Ulrich Drepper (yang dapat berupa ditemukan dihttp://www.akkadia.org/drepper/>)---namun solusi superior dibuat dimungkinkan dengan opsi ini untuk menandai hal-hal yang disembunyikan ketika defaultnya adalah publik adalah membuat default disembunyikan dan tandai hal-hal publik. Ini adalah norma dengan DLL di Windows dan dengan -fvisibility=tersembunyi dan "__attribute__ ((visibility("default")))" sebagai ganti "__declspec(dllexport)" Anda mendapatkan semantik yang hampir identik dengan sintaks yang identik. Ini adalah keuntungan besar bagi mereka yang bekerja dengan proyek lintas platform.

Bagi mereka yang menambahkan dukungan visibilitas ke kode yang ada, Anda dapat menemukan "#pragma GCC visibilitas" penggunaan. Ini berfungsi dengan Anda melampirkan deklarasi yang ingin Anda atur visibilitas untuk dengan (misalnya) "#pragma GCC visibilitas Push(hidden)" dan "#pragma Visibilitas GCC muncul". Ingatlah bahwa visibilitas simbol harus dilihat as bagian of itu API antarmuka kontrak dan dengan demikian semua kode baru harus selalu menentukan visibilitas ketika itu bukan default; yaitu, deklarasi hanya untuk digunakan dalam DSO lokal harus selalu ditandai secara eksplisit sebagai tersembunyi untuk menghindari tipuan PLT overhead --- membuat ini sangat jelas juga membantu keterbacaan dan dokumentasi sendiri dari kode. Perhatikan bahwa karena persyaratan spesifikasi ISO C++, "operator baru" dan "penghapusan operator" harus selalu dalam visibilitas default.

Ketahuilah bahwa tajuk dari luar proyek Anda, khususnya tajuk sistem dan header dari perpustakaan lain yang Anda gunakan, mungkin tidak diharapkan untuk dikompilasi dengan visibilitas selain default. Anda mungkin perlu secara eksplisit mengatakan "#pragma GCC visibilitas Push(default)" sebelum memasukkan header tersebut.

deklarasi "eksternal" tidak terpengaruh oleh -fvisibilitas, jadi banyak kode bisa dikompilasi ulang dengan -fvisibility=tersembunyi tanpa modifikasi. Namun, ini berarti bahwa panggilan ke fungsi "eksternal" tanpa visibilitas eksplisit menggunakan PLT, jadi lebih efektif untuk menggunakan "__attribute ((visibility))" dan/atau "#pragma GCC visibility" untuk memberitahu kompiler yang deklarasi "eksternal" harus diperlakukan sebagai tersembunyi.

Perhatikan bahwa -fvisibilitas mempengaruhi entitas tautan C++ yang tidak jelas. Artinya, untuk misalnya, kelas pengecualian yang dilemparkan di antara DSO harus ditandai secara eksplisit dengan visibilitas default sehingga type_info node disatukan antara DSO.

Gambaran umum tentang teknik-teknik ini, manfaatnya dan cara menggunakannya ada di .

-fstrict-volatile-bitfields Opsi ini harus digunakan jika mengakses bidang bit yang mudah menguap (atau struktur lainnya) bidang, meskipun kompiler biasanya menghormati jenis itu) harus menggunakan satu akses lebar jenis bidang, disejajarkan dengan perataan alami jika memungkinkan. Misalnya, target dengan register periferal yang dipetakan memori mungkin memerlukan semua akses menjadi 16 bit lebar; dengan flag ini Anda dapat mendeklarasikan semua bidang bit periferal sebagai "unsigned short" (dengan asumsi short adalah 16 bit pada target ini) untuk memaksa GCC menggunakan Akses 16-bit alih-alih, mungkin, akses 32-bit yang lebih efisien.

Jika opsi ini dinonaktifkan, kompiler menggunakan instruksi yang paling efisien. Dalam contoh sebelumnya, itu mungkin instruksi beban 32-bit, meskipun itu mengakses byte yang tidak mengandung bagian bit-field, atau register yang dipetakan memori tidak terkait dengan yang sedang diperbarui.

Dalam beberapa kasus, seperti ketika atribut "dikemas" diterapkan ke bidang struktur, itu mungkin tidak dapat mengakses bidang dengan sekali baca atau tulis yang benar diselaraskan untuk mesin target. Dalam hal ini GCC jatuh kembali untuk menghasilkan banyak mengakses daripada kode yang akan kesalahan atau memotong hasil pada saat run time.

Catatan: Karena batasan model memori C/C++11, akses tulis tidak diperbolehkan untuk menyentuh anggota non bit-field. Oleh karena itu disarankan untuk mendefinisikan semua bit dari jenis bidang sebagai anggota bidang bit.

Nilai default opsi ini ditentukan oleh antarmuka biner aplikasi untuk prosesor sasaran.

-fsync-libcalls Opsi ini mengontrol apakah ada instance out-of-line dari keluarga "__sync" dari fungsi dapat digunakan untuk mengimplementasikan keluarga fungsi "__atomic" C++11.

Nilai default opsi ini diaktifkan, sehingga satu-satunya bentuk opsi yang berguna is -fno-sync-libcalls. Opsi ini digunakan dalam implementasi libatomik waktu buka perpustakaan.

LINGKUNGAN Bagian ini menjelaskan beberapa variabel lingkungan yang memengaruhi cara GCC beroperasi. Beberapa dari mereka bekerja dengan menentukan direktori atau awalan untuk digunakan saat mencari berbagai jenis dari file. Beberapa digunakan untuk menentukan aspek lain dari lingkungan kompilasi.

Perhatikan bahwa Anda juga dapat menentukan tempat untuk mencari menggunakan opsi seperti -B, -I serta -L. Ini lebih diutamakan daripada tempat yang ditentukan menggunakan variabel lingkungan, yang pada gilirannya diutamakan daripada yang ditentukan oleh konfigurasi GCC.

BAHASA LC_CTYPE LC_MESSAGES LC_ALL Variabel lingkungan ini mengontrol cara GCC menggunakan informasi pelokalan yang memungkinkan GCC untuk bekerja dengan konvensi nasional yang berbeda. GCC memeriksa lokal kategori LC_CTYPE serta LC_MESSAGES jika telah dikonfigurasi untuk melakukannya. Lokal ini kategori dapat diatur ke nilai apa pun yang didukung oleh instalasi Anda. Nilai tipikal adalah en_GB.UTF-8 untuk bahasa Inggris di Inggris yang dikodekan dalam UTF-8.

The LC_CTYPE variabel lingkungan menentukan klasifikasi karakter. GCC menggunakannya untuk menentukan batas karakter dalam string; ini diperlukan untuk beberapa multibyte pengkodean yang berisi kutipan dan karakter pelarian yang ditafsirkan sebagai string berakhir atau melarikan diri.

The LC_MESSAGES variabel lingkungan menentukan bahasa yang akan digunakan dalam diagnostik pesan.

Jika LC_ALL variabel lingkungan diatur, itu menimpa nilai LC_CTYPE serta LC_MESSAGES; jika tidak, LC_CTYPE serta LC_MESSAGES default ke nilai BAHASA variabel lingkungan. Jika tidak ada variabel ini yang disetel, default GCC ke tradisional C. perilaku bahasa Inggris.

TMPDIR If TMPDIR diatur, itu menentukan direktori yang akan digunakan untuk file-file sementara. GCC menggunakan file sementara untuk menampung output dari satu tahap kompilasi yang akan digunakan sebagai input ke tahap berikutnya: misalnya, output dari preprocessor, yang merupakan masukan ke compiler yang tepat.

GCC_COMPARE_DEBUG Pengaturan GCC_COMPARE_DEBUG hampir setara dengan passing -fbandingkan-debug ke driver kompiler. Lihat dokumentasi opsi ini untuk lebih jelasnya.

GCC_EXEC_PREFIX If GCC_EXEC_PREFIX diatur, ini menentukan awalan untuk digunakan dalam nama subprogram yang dieksekusi oleh compiler. Tidak ada garis miring yang ditambahkan saat awalan ini digabungkan dengan nama subprogram, tetapi Anda dapat menentukan awalan yang diakhiri dengan garis miring jika Anda inginkan.

If GCC_EXEC_PREFIX tidak disetel, GCC mencoba mencari awalan yang sesuai untuk digunakan berdasarkan nama path yang dipanggil.

Jika GCC tidak dapat menemukan subprogram menggunakan awalan yang ditentukan, ia mencoba mencari di tempat biasa untuk subprogram.

Nilai default dari GCC_EXEC_PREFIX is awalan/lib/gcc/ dimana awalan adalah awalan untuk kompiler yang diinstal. Dalam banyak kasus awalan adalah nilai "awalan" ketika Anda menjalankan mengkonfigurasi Script.

Awalan lain yang ditentukan dengan -B diutamakan dari awalan ini.

Awalan ini juga digunakan untuk menemukan file seperti crt0.o yang digunakan untuk menghubungkan.

Selain itu, awalan digunakan dengan cara yang tidak biasa dalam menemukan direktori yang akan dicari untuk file header. Untuk setiap direktori standar yang namanya biasanya dimulai dengan /usr/local/lib/gcc (lebih tepatnya, dengan nilai GCC_INCLUDE_DIR), GCC mencoba mengganti awal itu dengan awalan yang ditentukan untuk menghasilkan direktori alternatif nama. Jadi, dengan -Bfoo/, penelusuran GCC foo/bar tepat sebelum mencari standar direktori /usr/local/lib/bar. Jika direktori standar dimulai dengan konfigurasi awalan maka nilai awalan diganti oleh GCC_EXEC_PREFIX saat mencari header file.

COMPILER_PATH Nilai dari COMPILER_PATH adalah daftar direktori yang dipisahkan titik dua, seperti PATH. GCC mencoba direktori yang ditentukan saat mencari subprogram, jika tidak bisa temukan subprogram menggunakan GCC_EXEC_PREFIX.

PERPUSTAKAAN_PATH Nilai dari PERPUSTAKAAN_PATH adalah daftar direktori yang dipisahkan titik dua, seperti PATH. Saat dikonfigurasi sebagai kompiler asli, GCC mencoba direktori yang ditentukan ketika mencari file tautan khusus, jika tidak dapat menemukannya gunakan GCC_EXEC_PREFIX. Menautkan menggunakan GCC juga menggunakan direktori ini saat mencari perpustakaan biasa untuk -l opsi (tetapi direktori ditentukan dengan -L datang pertama).

BAHASA Variabel ini digunakan untuk meneruskan informasi lokal ke compiler. Salah satu cara di mana informasi ini digunakan untuk menentukan set karakter yang akan digunakan saat karakter literal, literal string, dan komentar diurai dalam C dan C++. Ketika kompilernya adalah dikonfigurasi untuk memungkinkan karakter multibyte, nilai berikut untuk: BAHASA adalah dikenali:

C-JIS Mengenali karakter JIS.

C-SJIS Mengenali karakter SJIS.

C-EUCJP Mengenali karakter EUCJP.

If BAHASA tidak didefinisikan, atau jika memiliki nilai lain, maka kompiler menggunakan "mblen" dan "mbtowc" seperti yang didefinisikan oleh lokal default untuk mengenali dan menerjemahkan multibyte karakter.

Beberapa variabel lingkungan tambahan mempengaruhi perilaku preprocessor.

CPATH C_INCLUDE_PATH CPLUS_INCLUDE_PATH OBJC_INCLUDE_PATH Nilai setiap variabel adalah daftar direktori yang dipisahkan oleh karakter khusus, banyak seperti PATH, untuk mencari file header. Karakter khusus, "PATH_SEPARATOR", bergantung pada target dan ditentukan pada waktu pembuatan GCC. Untuk Microsoft Target berbasis Windows adalah titik koma, dan untuk hampir semua target lainnya adalah a usus besar.

CPATH menentukan daftar direktori yang akan dicari seolah-olah ditentukan dengan -I, tapi setelah jalur apa pun yang diberikan dengan -I pilihan pada baris perintah. Variabel lingkungan ini digunakan terlepas dari bahasa mana yang sedang diproses sebelumnya.

Variabel lingkungan yang tersisa hanya berlaku saat pra-pemrosesan tertentu bahasa yang ditunjukkan. Masing-masing menentukan daftar direktori yang akan dicari seolah-olah ditentukan dengan -isistem, tetapi setelah jalur apa pun yang diberikan dengan -isistem pilihan pada garis komando.

Dalam semua variabel ini, elemen kosong menginstruksikan kompiler untuk mencari arusnya direktori kerja. Elemen kosong dapat muncul di awal atau akhir jalur. Untuk Misalnya, jika nilai CPATH adalah ":/special/include", yang memiliki efek yang sama dengan -SAYA. -Saya/khusus/termasuk.

DEPENDENCIES_OUTPUT Jika variabel ini disetel, nilainya menentukan bagaimana menghasilkan dependensi untuk berbasis Make pada file header non-sistem yang diproses oleh kompiler. File header sistem adalah diabaikan dalam output ketergantungan.

Nilai dari DEPENDENCIES_OUTPUT bisa hanya nama file, dalam hal ini aturan Make ditulis ke file itu, menebak nama target dari nama file sumber. Atau nilai dapat berbentuk fillet target, dalam hal ini aturan ditulis ke file fillet menggunakan target sebagai nama sasaran.

Dengan kata lain, variabel lingkungan ini setara dengan menggabungkan opsi -MM serta -MF, dengan opsional -MT beralih juga.

SUNPRO_DEPENDENCIES Variabel ini sama dengan DEPENDENCIES_OUTPUT (lihat di atas), kecuali sistem itu file header tidak diabaikan, jadi ini menyiratkan -M daripada -MM. Namun, ketergantungan pada file input utama dihilangkan.

Gunakan powerpc-linux-gnuspe-g++-5 online menggunakan layanan onworks.net



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有