Ini adalah perintah aarch64-linux-gnu-gcc yang dapat dijalankan di penyedia hosting gratis OnWorks menggunakan salah satu dari beberapa workstation online gratis kami seperti Ubuntu Online, Fedora Online, emulator online Windows atau emulator online MAC OS
PROGRAM:
NAMA
gcc - GNU proyek C dan C++ compiler
RINGKASAN
gcc [-c|-S|-E] [-std=standard]
[-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.
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-kode keluar -x bahasa -v
-### --membantu[=kelas[...]] --target-bantuan --Versi: kapan -pembungkus @fillet -fplugin=fillet
-fplugin-arg-nama=arg -fdump-ada-spesifikasi[-ramping] -fada-spec-parent=satuan
-fdump-go-spec=fillet
C Bahasa Opsi
-ansi -std=standard -fgnu89-sebaris -aux-info nama file
-fungsi-bera-tanpa parameter-variadik -fno-asm -fno-bawaan -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-bitfield -fsigned-char
-funsigned-bitfield -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
-sekering-cxa-atexit -fno-lemah -nostdinc++ -fvisibilitas-sebaris-tersembunyi
-fvtable-verifikasi=[std|sebelum|tak satupun] -fvtv-hitungan -fvtv-debug -fvisibilitas-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
-Kelebihan beban-virtual -Wno-pmf-konversi -Wsign-promo
Tujuan-C dan Objektif-C++ Bahasa Opsi
-fkelas-string-konstan=nama kelas -fgnu-waktu proses -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-pencegatan -Wno-protokol -Pemilih
-Pertandingan-pemilih-Wstrict -Pemilih yang tidak dideklarasikan
Bahasa Independen Opsi
-fmessage-panjang =n -fdiagnostics-show-location=[sekali|setiap baris]
-fdiagnostik-warna=[mobil|tak pernah|selalu] -fno-diagnostik-tampilkan-opsi
-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 -Kualifikasi Wcast -Wchar-langganan -Wclobbed -komentar
-Didukung dengan syarat -Wkonversi -Wcoverage-ketidakcocokan -Tanggal-waktu
-Wdelete-tidak lengkap -Wno-cpp -Tidak digunakan lagi -Wno-deprecated-deklarasi
-Wno-ditunjuk-init -Wdisabled-optimasi -Wno-dibuang-kualifikasi
-Tidak ada kualifikasi array yang dibuang -Wno-div-oleh-nol -Wdouble-promosi -Badan-kosong
-Wenum-bandingkan -Wno-endif-label -Kesalahan -Kesalahan=* -Wfatal-kesalahan -Wfloat-sama
-format -Format=2 -Wno-format-berisi-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 -Tidak ada pemain-ke-penunjuk -Wno-tidak valid-offsetof -Winvalid-pch
-Lebih besar-dari=len -Pengoptimalan loop-Wunsafe -Wlogis-op -Wlogical-bukan-kurung
-panjang-panjang - Utama -Wmungkin-tidak diinisialisasi -Wmemset-dialihkan-args -Wmissing-kawat gigi
-Penginisialisasi bidang-Wmissing -Tidak ada-termasuk-dir -Wno-multichar -Tidak apa-apa
-Wnormalisasi=[tak satupun|id|NFC|nfkc]
-Wodr -Wno-melimpah -Wopenmp-simd -Woverlength-string -Dikemas
-Wpacked-bitfield-compat -Dilapisi -Kurung -Wpedantic-ms-format
-Wno-pedantic-ms-format -Wpointer-arith -Tidak ada penunjuk-ke-int-cast -Wredundant-dekl
-Tidak-kembali-alamat-lokal -Tipe Wreturn -Titik-urutan -Bayangan -Wno-bayangan-ivar
-Wshift-count-negatif -Wshift-hitungan-luapan -Wsign-bandingkan -Wsign-konversi
-Konversi Wfloat -Wsizeof-pointer-memaccess -Ukuran-array-argumen
-Wstack-pelindung -Penggunaan tumpukan=len -Alias ketat -aliasing-wstrict=n
-Meluap-wstrict -Meluap-kencang=n -Wsuggest-atribut=[murni|const|arah utara|format]
-Sarankan-tipe akhir -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 -Konstanta-float-Wunsuffixed
-Tidak digunakan -Wunused-fungsi -Wunus-label -Wunused-local-typedefs -Parameter yang tidak digunakan
-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 dan Hanya Objective-C peringatan Opsi
-Pemeran-fungsi-buruk -Wmissing-deklarasi -Tipe parameter yang hilang
-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 -versi dump -fsanitasi=gaya -membersihkan-memulihkan
-fsanitize-recover=gaya -fasan-bayangan-offset=jumlah
-fsanitize-tidak terdefinisi-perangkap-pada-kesalahan -fcheck-pointer-batas -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-gunakan-statis-const-batas -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-wrapper
-fdbg-cnt-daftar -fdbg-cnt=kontra-nilai-daftar -fdisable-ipa-nama_pass
-fdisable-rtl-nama_pass -fdisable-rtl-nama sandi=daftar jangkauan -fdisable-pohon-nama_pass
-fdisable-pohon-nama sandi=daftar jangkauan -fdump-noaddr -fdump-tidak bernomor
-fdump-tautan-tidak bernomor -fdump-translasi-unit[-n] -fdump-kelas-hierarki[-n]
-fdump-ipa-semua -fdump-ipa-cgraph -fdump-ipa-sebaris -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-jadwal-verbose
-fsel-jadwal-dump-cfg -fsel-sched-pipelining-verbose -fstack-penggunaan -cakupan-ftest
-laporan-waktu -fvar-pelacakan -fvar-pelacakan-tugas
-fvar-pelacakan-tugas-toggle -g -gtingkat -gtoggle -gcoff -kurcaci-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=yang baru -femit-struct-debug-base saja
-femit-struct-debug-dikurangi -femit-struct-debug-detail[=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
-cetak-pencarian-dir -Q -cetak-sysroot -print-sysroot-header-suffix -hemat-temps
-simpan-temps=cwd -simpan-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-des -fbranch-probabilitas
-fbranch-target-load-optimalkan -fbranch-target-memuat-mengoptimalkan2 -fbtr-bb-eksklusif
-fcaller-save -fcheck-data-deps -fcombine-stack-penyesuaian -fconserve-stack
-fbandingkan-elimin -fcprop-register -lompat silang -fcse-ikuti-melompat -fcse-lewati-blok
-fcx-fortran-aturan -fcx-terbatas-rentang -fdata-bagian -fdce -fdelayed-cabang
-fdelete-null-pointer-cek -fdevirtualisasi -fdevirtualisasi-spekulatif
-fdevirtualisasi-di-ltrans -fdse -sejajar dengan rasa takut -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-penyelarasan -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-buka gulungan-dan-macet -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-jadwal
-fmodulo-sched-allow-regmoves -fmove-loop-invarian -fno-cabang-hitung-reg
-fno-tunda-pop -fno-fungsi-cse -fno-tebak-cabang-probabilitas -fno-sebaris
-fno-matematika-errno -fno-lubang intip -fno-lubang2 -fno-scheded-interblock -fno-jadwal-spesifikasi
-fno-ditandatangani-nol -fno-tingkat-atas-reorder -fno-perangkap-matematika
-fno-nol-diinisialisasi-dalam-bss -fomit-frame-pointer -foptimize-saudara-panggilan
-fpartial-sebaris -fpeel-loop -predictive-commoning -fprefetch-loop-array
-fprofile-laporan -fprofile-koreksi -fprofil-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
-fjadwal-fusi -fschedule-insns -fschedule-insns2 -fsection-jangkar
-penjadwalan selektif -penjadwalan selektif2 -fsel-sched-pipelining
-fsel-sched-pipelining-outer-loop -fsemantik-interposisi -fshrink-bungkus
-fsignaling-nans -fsingle-presisi-konstan -fsplit-ivs-in-unroller
-fsplit-tipe lebar -fssa-phiopt -fstack-pelindung -fstack-pelindung-semua
-fstack-pelindung-kuat -fstack-pelindung-eksplisit -fstdarg-opt -aliasing ketat
-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-tenggelam -ftree-slsr -ftree-sra -ftree-switch-konversi -ftree-tail-merge
-ftree-ter -ftree-vektorisasi -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 -sekering-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 -iprefiks fillet -idengan awalan dir
-idengan awalansebelum dir -isistem dir -imultilib dir -isysroot dir -M -MM -MF -MG
-MP -MQ -MT -nostdinc -P -fdebug-cpp -ftrack-makro-ekspansi -fworking-direktori
-peta ulang -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 -statis-libstdc++ -statis-libasan
-statis-libtsan -statis-liblsan -statis-libubsan -statis-libmpx -statis-libmpxwrappers
-bersama -bersama-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
-mtls-ukuran=ukuran -mfix-korteks-a53-835769 -mno-memperbaiki-korteks-a53-835769
-mfix-korteks-a53-843419 -mno-memperbaiki-korteks-a53-843419 -maret=nama -mcpu=nama
-mtune=nama
Adapteva Epiphany Opsi -mhalf-reg-file -mprefer-pendek-insn-reg -biaya-cabang=num
-mcm bergerak -mnop=num -msoft-cmpsf -msplit-lohi -mpost-inc -mpost-modifikasi
-mstack-offset =num -mround-terdekat -mlong-panggilan -mshort-panggilan -mkecil16 -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 -saya -mno-mpy -mmul32x16 -mmul64 -tidak normal
-mspfp -mspfp-kompak -mspfp-cepat -msimd -msoft-mengapung -mswap -mcrc -mdsp-paket -mdvbf
-Mlock -mmac-d16 -mmac-24 -mrtsc -swap -teleponi -mxy -ukuran -mannotate-align
-marclinux.dll -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 -sedikit-cbranchsi -mexpand-tambahkan
-mindexed-beban -mlra -mlra-prioritas-tidak ada -mlra-prioritas-kompak mlra-prioritas-
tidak kompak -mno-milikode -campuran-kode -mq-kelas -mRcq -mRcw -tingkat ukuran=tingkat
-mtune=cpu -mmultbiaya=num -munalign-prob-ambang batas=probabilitas
ARM Opsi -mapcs-bingkai -mno-apcs-bingkai -mabi=nama -mapcs-stack-check
-mno-apcs-stack-check -mapcs-mengapung -Mno-apcs-float -mapcs-masuk kembali
-mno-apcs-masuk kembali -msched-prolog -mno-jadwal-prolog -mlittle-endian -mbig-endian
-mfloat-abi=nama -mfp16-format=nama -ibu jari-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-basis-gambar-tunggal -mpic-daftar=reg -mnop-menyenangkan-dllimport -mpoke-fungsi-nama
-jempol -marm -mtpcs-bingkai -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-spesifikasi-anomali -mcsync-anomali
-mno-csync-anomali -mlow-64k -mno-rendah64k -mstack-periksa-l1 -perpustakaan bersama-pertengahan
-mno-id-perpustakaan bersama -mshared-library-id=n -mleaf-id-perpustakaan bersama
-mno-leaf-id-perpustakaan bersama -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-tumpukan-bingkai=n
-melinux-ukuran tumpukan=n -metrax4 -metrax100 -mpdebug -mcc-init -mno-efek samping
-mstack-selaras -mdata-selaras -mconst-selaras -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 -mmak -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 -instal_nama -keep_private_externs -multi_modul
-multiply_definisi -multiply_definisi_tidak digunakan -noall_load
-no_dead_strip_inits_and_terms -tidak ada pengikatan awal -nomultidef -tidak terikat
-hidunglinkedit -halamanzero_size -mengikat sebelumnya -prebind_all_twolevel_modules -private_bundel
-read_only_relocs -sejajarkan -simbol objek sektor -mengapa -seg1addr -sektebuat
-simbol objek sektor -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 -apa yang dimuat -F -gused -gpenuh -mmacosx-versi-min=versi
-kernel -uang-byte-bool
Desember alfa Opsi -mno-fp-reg -msoft-mengapung -miee -mieee-dengan-tidak tepat
-miee-konforman -mfp-mode-perangkap=mode -mfp-pembulatan-mode=mode -mtrap-presisi=mode
-membangun-konstanta -mcpu=tipe cpu -mtune=tipe cpu -mbwx -mmaks -perbaikan -mcix
-mfloat-vax -mfloat-ieee -meksplisit-relocs -msmall-data -data besar -msmall-teks
-mlarge-teks -latensi-memori=waktu
FR30 Opsi -model kecil -mno-lsim
FRV Opsi -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 -mhard-mengambang -msoft-mengapung
-malloc-cc -mfixed-cc -kata md -mno-kata kunci -mganda -mno-ganda -media -mno-media
-mmuladd -mno-muladd -mfdpik -minline-plt -mgrel-ro -multilib-perpustakaan-gambar
-mlinked-fp -mlong-panggilan -malign-label -milibrary-pic -macc-4 -macc-8 -mpack
-mno-paket -mno-bendera -mcond-pindah -mno-cond-pindah -moptimalkan-membar
-mno-optimalkan-membar -mscc -mno-scc -mcond-exec -mno-cond-exec -mvliw-cabang
-mno-vliw-cabang -mmulti-kond-exec -mno-multi-kond-exec -mnested-cond-exec
-mno-bersarang-cond-exec -mtomcat-statistik -mTLS -mtl -mcpu=cpu
GNU / Linux Opsi -mglibc -muclibc -musl -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 -rentang tetap=rentang pendaftaran
-mlompat-dalam-penundaan -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-penyimpanan-panjang-muat -mno-portabel-runtime -mno-soft-float -mno-spasi-regs
-msoft-mengapung -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-gambar
-mvolatile-asm-berhenti -mregister-nama -msdata -mno-sdata -mkonstan-gp -mauto-gambar
-bingung-gila -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
-rentang tetap=rentang pendaftaran -mtls-ukuran=ukuran tls -mtune=tipe cpu -milp32 -mlp64
-msched-br-data-spec -msched-ar-data-spesifikasi -spesifikasi-kontrol-msched -msched-br-in-data-spec
-msched-ar-in-data-spec -msched-in-control-spesifikasi -msched-spec-ldc
-msched-spec-kontrol-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-jadwal-jangan-periksa-kontrol-spesifikasi
-msched-fp-mem-deps-zero-cost -msched-max-memory-insns-hard-limit
-msched-max-memori-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 =data-
mengetik -mno-flush-fungsi -mflush-fungsi=nama -mno-perangkap siram -mflush-perangkap=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-mengambang -m68881 -msoft-mengapung -mpcrel
-malign-int -mtrict-align -msep-data -mno-sep-data -mshared-library-id=n
-perpustakaan bersama-pertengahan -mno-id-perpustakaan bersama -mxgot -mno-xgot
MCCore Opsi -mhardlit -mno-lampu terang -mdiv -mno-div -mrelax-segera
-mno-santai-segera -mwide-bitfield -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
-peningkatan mstack
saya Opsi -mabsdiff -mall-opts -rata-rata -berbasis=n -mbitop -mc=n -mklip
-mkonfigurasi=nama -mcop -mcop32 -mcop64 -mivc2 -mdc -mdiv -meb -mel -mio-volatil -ml
-mleadz -mm -mminmaks -banyak -mno-memilih -ulangi -MS -matur -msdram -msim -msimnovec
-mtf -mtiny=n
Microblaze Opsi -msoft-mengapung -mhard-mengambang -msmall-membagi -mcpu=cpu -mmemcpy
-mxl-lembut-mul -mxl-soft-div -mxl-barel-shift -mxl-pola-bandingkan -mxl-tumpukan-periksa
-mxl-gp-opt -mno-clearbss -mxl-kalikan-tinggi -mxl-float-konversi -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-mengambang -msoft-mengapung -mno-mengambang
-mengambang tunggal -mmengambang ganda -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-mikromips -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-sim32 -Gnum
-mlokal-sdata -mno-lokal-sdata -mextern-sdata -mno-ekstern-sdata -mgpopt -mno-gopt
-data tertanam -mno-data tertanam -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-imad -bingung-gila
-mno-menyatu-madd -nocpp -mfix-24k -mno-perbaiki-24k -mfix-r4000 -mno-perbaiki-r4000
-mfix-r4400 -mno-perbaiki-r4400 -mfix-r10000 -mno-perbaiki-r10000 -mfix-rm7000 -mno-perbaiki-rm7000
-mfix-vr4120 -mno-perbaiki-vr4120 -mfix-vr4130 -mno-perbaiki-vr4130 -mfix-sb1 -mno-perbaiki-sb1
-mflush-fungsi=fungsi -mno-flush-fungsi -biaya-cabang=num -kemungkinan cabang
-mno-cabang-kemungkinan -mfp-pengecualian -mno-fp-pengecualian -mvr4130-sejajarkan -mno-vr4130-sejajarkan
-msynci -mno-sinkronisasi -mrelax-pic-panggilan -mno-santai-pic-panggilan -mmcount-ra-alamat
MMIX Opsi -mlibfungsi -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-keluar-tunggal
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-reg -mcmov -mno-cmov
-perf-ext -mno-perf-ext -mv3push -mno-v3push -m16bit -mno-16bit -misr-vektor-ukuran=num
-mcache-ukuran blok=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-volatil -mcache-volatil -mno-cepat-sw-div -mfast-sw-div
-MHW-MUL -mno-hw-mul -MHW-MULX -mno-hw-mulx -mno-hw-div -mhw-div -kustom-penginapan=N
-mno-kustom-penginapan -mcustom-fpu-cfg=nama -mhal -msmallc -msys-crt0=nama -msys-lib=nama
Nvidia PTX Opsi -m32 -m64 -mmainkernel
PDP-11 Opsi -mfpu -msoft-mengapung -mac0 -mno-ac0 -m40 -m45 -m10 -mbsalinan
-mbcopy-bawaan -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-melihat ke depan=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 dan 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-keras-dfp -mfull-toc -minimal-toc -mno-fp-in-toc -mno-jumlah-dalam-toc
-m64 -m32 -mxl-kompat -mno-xl-kompat -mpe -kekuatan jahat -memfitnah-alami
-msoft-mengapung -mhard-mengambang -banyak -mno-banyak -mengambang tunggal -mmengambang ganda
-simple-fpu -mstring -mno-string -mperbarui -mno-perbarui -mavoid-diindeks-alamat
-mno-avoid-indexed-address -bingung-gila -mno-menyatu-madd -mbit-sejajarkan
-mno-bit-selaras -mtrict-align -mno-ketat-selaras -mrelokasi -mno-relokasi
-mrelokasi-lib -mno-relokasi-lib -mtoc -mno-toc -sedikit -mlittle-endian
-besar -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-kembali
-msvr4-struct-kembali -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 -pisau kuning -anggota -msdata -msdata =memilih -mvxworks -G num -utas -mrecip
-mrecip=memilih -mno-resep -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-fusi -mno-mpower8-fusi
-mpower8-vektor -mno-power8-vektor -mkripto -mno-kripto -mdirect-pindah -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-reg-sf -mno-atas-regs-sf -mupper-reg -mno-atas-regs
RX Opsi -m64bit-ganda -m32bit-ganda -fpu -tidak tahu -mcpu= -mbig-endian-data
-sedikit-endian-data -msmall-data -msim -mno-sim -mas100-sintaks -mno-as100-sintaks
-santai -mmax-ukuran konstan= -mint-daftar= -mpid -mno-peringatkan-beberapa-cepat-interupsi
-msave-acc-in-interrupt
S / 390 dan zSeri Opsi -mtune=tipe cpu -maret=tipe cpu -mhard-mengambang -msoft-mengapung
-mhard-dfp -mno-keras-dfp -mlong-ganda-64 -mlong-ganda-128 -mbackchain
-mno-rantai belakang -mpacked-stack -mno-packed-stack -msmall-eksekutif -mno-kecil-exec
-mmvcle -mno-mvcle -m64 -m31 -mdebug -mno-debug -mesa -mzarch -mtpf-jejak
-mno-tpf-jejak -bingung-gila -mno-menyatu-madd -mwarn-ukuran bingkai -mwarn-dynamicstack
-mstack-ukuran -mstack-penjaga -mhotpatch=setengah kata,setengah kata
Skor Opsi -meb -mel -mnhwloop -muls -mmak -skor5 -skor5u -skor7 -skor7d
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 -mrenesa
-mno-renesa -mnomacsave -miee -mno-ieee -mbitop -ukuran -minline-ic_invalidate
-mpadstruct -mspace -prefergot -mode pengguna -multibiaya=jumlah -mdiv=strategi
-mdivsi3_libfunc=nama -rentang tetap=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 -bingung-gila -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
-pthread -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
-mdatar -mno-datar -mfpu -mno-fpu -mhard-mengambang -msoft-mengapung -mhard-quad-float
-msoft-quad-float -mstack-bias -mno-tumpukan-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-relokasi -meror-relokasi -msafe-dma -Munsafe-DMA -petunjuk-cabang
-mkecil-mem -mbesar-mem -mstdmain -rentang tetap=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-mengapung -mhard-mengambang -mgcc-abi
-mrh850-abi -big-switch
VAX Opsi -mg -mgnu -munix
Visium Opsi -mdebug -msim -mfpu -mno-fpu -mhard-mengambang -msoft-mengapung -mcpu=tipe cpu
-mtune=tipe cpu -mode-msv -mode-pengguna
VMS Opsi -mvms-kembali-kode -mdebug-utama=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-mengapung -mno-lebar-kalikan -mrtd -malign-ganda
-mpreferred-stack-boundary=num -mincoming-stack-boundary=num -mcld -mcx16 -msahfi
-mm bergerak -mcrc32 -mrecip -mrecip=memilih -mvzeroupper -mprefer-avx128 -mmmx -pesan -msse2
-msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx -mavx2 -mavx512f -mavx512pf -mavx512er
-mavx512cd -msha -maes -mpclmul -mfsgsbase -mrdnd -mf16c -mfma -mprefetchwt1
-mclflushopt -mxsavec -mxsave -msse4a -m3d sekarang -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop
-mlzcnt -mbmi2 -mfxsr -mxsimpan -mxsaveopt -mrtm -mlwp -mmpx -mmtunggux -mthread
-mno-sejajarkan-stringop -minline-semua-stringops -minline-stringops-dinamis
-mstringop-strategi=ganggang -mmemcpy-strategi=strategi -mmemset-strategi=strategi
-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 -mstackpenyelarasan ulang
-momit-daun-frame-pointer -mno-zona merah -mno-tls-direct-seg-refs -mcmodel=kode-model
-mabi=nama -mode-maddress=mode -m32 -m64 -mx32 -m16 -ambang-data-besar=num
-msse2avx -mfentry -mrecord-mcount -mnop-mcount -m8bit-idiv
-mavx256-split-unaligned-load -mavx256-split-tidak selaras-toko -malign-data=mengetik
-mstack-pelindung-penjaga=penjaga
x86 Windows Opsi -konsol -mcygwin -mno-cygwin -mdll -mnop-menyenangkan-dllimport -mthread
-municode -mwin32 -mwindows -fno-set-stack-dapat dieksekusi
Xstormy16 Opsi -msim
Xtensa Opsi -mconst16 -mno-const16 -bingung-gila -mno-menyatu-madd -mforce-no-foto
-mserialisasi-volatil -mno-serialisasi-volatil -mteks-bagian-literal
-mno-teks-bagian-literal -mtarget-sejajarkan -mno-target-sejajarkan -mlongcall
-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-kembali -fpik -fPIC -fpie -fPIE -fno-plt -fno-lompat-tabel
-record-gcc-switch -freg-struct-kembali -fshort-enum -short-double -fshort-wchar
-fverbose-asm -fpack-struct[=n] -fstack-periksa -fstack-batas-daftar=reg
-fstack-batas-simbol =sim -fno-batas tumpukan -fsplit-tumpukan -fleading-garis bawah
-ftls-model=model -fstack-penggunaan kembali=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 liobjc 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 liobjc 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-spesifikasi 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-keluaran
c++ c++-tajuk c++-cpp-keluaran
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-kode keluar
Biasanya itu gcc program keluar dengan kode 1 jika ada fase kompiler yang kembali
kode pengembalian yang tidak berhasil. Jika Anda menentukan -pass-kode keluar, 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 sumber.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
--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 --bantuan=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 --argumen, dengan demikian seruan dari Cc1 is
gdb --argumen 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-spesifikasi[-ramping]
Untuk sumber C dan C++ dan sertakan file, buat spesifikasi Ada yang sesuai.
-fada-spec-parent=satuan
Setara dengan -fdump-ada-spesifikasi[-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 dan .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.
-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 dan 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-bawaan
-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-bawaan or -berdiri bebas, Anda dapat menentukan makro seperti:
#definisikan abs(n) __builtin_abs ((n))
#definisikan 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-bawaan. 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-ditandatangani-char adalah setara dengan
-funsigned-char.
-fsigned-bitfield
-funsigned-bitfield
-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 Kelas satu.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 yang 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.
-sekering-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.
-fvisibilitas-sebaris-tersembunyi
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.
-fvisibilitas-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 dan 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 dan 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:
#tentukan __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 dan -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;
ke dalam 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.
-Kelebihan beban-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 dan Objektif-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-waktu proses 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:
-fkelas-string-konstan=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-waktu proses
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 bodoh(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-pencegatan (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.
-Pemilih yang tidak dideklarasikan (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 dan -fno-diagnostik-warna adalah alias untuk
-fdiagnostics-color=selalu dan -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,
dan 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-diagnostik-tampilkan-opsi
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-diagnostik-tampilkan-opsi 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= dan -Tidak ada kesalahan= seperti yang dijelaskan
di atas. (Pencetakan opsi dalam pesan peringatan dapat dinonaktifkan menggunakan
-fno-diagnostik-tampilkan-opsi bendera.)
Perhatikan bahwa menentukan -Kesalahan=foo secara otomatis menyiratkan -Wfoo. Namun, -Tidak ada kesalahan=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 dan Tujuan-C
dan Objektif-C++ Dialek Opsi.
Beberapa pilihan, seperti -Dinding dan -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 standard, 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 standard (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 dan Tujuan-C dan Objektif-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 - Utama (hanya untuk C/ObjC dan kecuali
-berdiri bebas) -Wmungkin-tidak diinisialisasi -Wmissing-kawat gigi (hanya untuk C/ObjC) -Tidak apa-apa
-Wopenmp-simd -Kurung -Wpointer-tanda -Penulis Penulisan -Tipe Wreturn -Titik-urutan
-Wsign-bandingkan (hanya di C++) -Alias ketat -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
-Tipe parameter yang hilang (C saja) -Deklarasi-gaya-Wold (C saja) -Woverride-init
-Wsign-bandingkan -Wtype-batas -Wuninisialisasi -Parameter yang tidak digunakan (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 "<", "<=", ">", atau ">=".
* (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-bawaan.
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 -Format apa pun adalah setara dengan
-Format=0. Sejak -format juga memeriksa argumen format nol untuk beberapa
fungsi, -format juga menyiratkan -Tidak apa-apa. Beberapa aspek dari tingkat format ini
pemeriksaan dapat dinonaktifkan dengan opsi: -Wno-format-berisi-nul,
-Wno-format-ekstra-args, dan -Wno-format-nol-panjang. -format diaktifkan oleh
-Dinding.
-Wno-format-berisi-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.
-Tidak apa-apa
Peringatkan tentang melewatkan penunjuk nol untuk argumen yang ditandai sebagai memerlukan nilai bukan nol
oleh atribut fungsi "nonnull".
-Tidak apa-apa termasuk dalam -Dinding dan -format. Itu dapat dinonaktifkan dengan -Tidak-tidak batal
.
-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:
ke dalam 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 dan -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.
- Utama
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.
-Tidak ada-termasuk-dir (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<=y<=z" muncul; ini setara dengan "(x<=y ? 1 :
0) <= z", yang merupakan interpretasi yang berbeda dari matematika biasa
notasi.
Juga peringatkan tentang konstruksi di mana mungkin ada kebingungan dengan pernyataan "jika" yang mana dan
cabang "lain" milik. Berikut adalah contoh kasus seperti itu:
{
jika sebuah)
jika (b)
fo ();
lain
batang ();
}
Dalam C/C++, setiap cabang "lain" milik pernyataan "jika" yang paling mungkin, yang
dalam contoh ini adalah "jika (b)". Ini sering kali tidak seperti yang diharapkan oleh programmer, karena
diilustrasikan dalam contoh di atas dengan lekukan yang dipilih programmer. Ketika ada
potensi kebingungan ini, GCC mengeluarkan peringatan ketika bendera ini ditentukan.
Untuk menghilangkan peringatan, tambahkan kurung kurawal eksplisit di sekitar pernyataan "jika" terdalam jadi
tidak mungkin "else" bisa menjadi bagian dari "if" terlampir. Kode yang dihasilkan terlihat
seperti ini:
{
jika sebuah)
{
jika (b)
fo ();
lain
batang ();
}
}
Juga peringatkan untuk penggunaan berbahaya dari ekstensi GNU ke "?:" dengan menghilangkan operan tengah.
Ketika kondisi di operator "?": adalah ekspresi boolean, nilai yang dihilangkan adalah
selalu 1. Seringkali programmer mengharapkannya menjadi nilai yang dihitung di dalam kondisional
ekspresi sebagai gantinya.
Peringatan ini diaktifkan oleh -Dinding.
-Titik-urutan
Peringatkan tentang kode yang mungkin memiliki semantik tidak terdefinisi karena pelanggaran urutan
aturan poin dalam standar C dan C++.
Standar C dan C++ menentukan urutan ekspresi dalam program C/C++:
dinilai dari urutan poin, yang mewakili pemesanan parsial antara
eksekusi bagian-bagian program: yang dieksekusi sebelum titik urutan, dan yang
dieksekusi setelahnya. Ini terjadi setelah evaluasi ekspresi penuh (yang
bukan bagian dari ekspresi yang lebih besar), setelah evaluasi operan pertama a
Operator "&&", "||", "? :" atau "," (koma), sebelum suatu fungsi dipanggil (tetapi setelah
evaluasi argumennya dan ekspresi yang menunjukkan fungsi yang dipanggil), dan di
tempat tertentu lainnya. Selain seperti yang diungkapkan oleh aturan titik urutan, urutan
evaluasi subekspresi ekspresi tidak ditentukan. Semua aturan ini
hanya menggambarkan urutan parsial daripada urutan total, karena, misalnya, jika dua
fungsi dipanggil dalam satu ekspresi tanpa titik urutan di antara mereka, the
urutan di mana fungsi dipanggil tidak ditentukan. Namun, standar
komite telah memutuskan bahwa panggilan fungsi tidak tumpang tindih.
Tidak ditentukan kapan modifikasi antara titik urutan ke nilai
objek mulai berlaku. Program yang perilakunya bergantung pada ini memiliki perilaku yang tidak terdefinisi;
standar C dan C++ menetapkan bahwa "Antara titik urutan sebelumnya dan berikutnya
objek harus memiliki nilai tersimpannya dimodifikasi paling banyak satu kali dengan evaluasi
ekspresi. Selanjutnya, nilai sebelumnya harus dibaca hanya untuk menentukan nilai
disimpan.". Jika suatu program melanggar aturan ini, hasilnya pada
implementasinya sama sekali tidak dapat diprediksi.
Contoh kode dengan perilaku tidak terdefinisi adalah "a = a++;", "a[n] = b[n++]" dan "a[i++] =
i;". Beberapa kasus yang lebih rumit tidak didiagnosis dengan opsi ini, dan mungkin memberikan
hasil positif palsu sesekali, tetapi secara umum telah ditemukan cukup efektif pada
mendeteksi masalah semacam ini dalam program.
Kata-kata standarnya membingungkan, oleh karena itu ada beberapa perdebatan tentang ketepatannya
arti dari aturan titik urutan dalam kasus-kasus halus. Tautan ke diskusi tentang
masalah, termasuk definisi formal yang diusulkan, dapat ditemukan di halaman bacaan GCC,
padahttp://gcc.gnu.org/readings.html>.
Peringatan ini diaktifkan oleh -Dinding untuk C dan C++.
-Tidak-kembali-alamat-lokal
Jangan peringatkan tentang mengembalikan pointer (atau dalam C++, referensi) ke variabel yang digunakan
keluar dari ruang lingkup setelah fungsi kembali.
-Tipe Wreturn
Peringatkan setiap kali suatu fungsi didefinisikan dengan tipe pengembalian yang default ke "int". Juga
peringatkan tentang pernyataan "pengembalian" apa pun tanpa nilai pengembalian dalam fungsi yang tipe pengembaliannya
tidak "batal" (jatuh dari ujung badan fungsi dianggap kembali
tanpa nilai), dan tentang pernyataan "kembali" dengan ekspresi dalam suatu fungsi
yang tipe pengembaliannya adalah "void".
Untuk C++, fungsi tanpa tipe pengembalian selalu menghasilkan pesan diagnostik, bahkan
ketika -Tipe-Wno-kembali ditentukan. Satu-satunya pengecualian adalah "utama" dan fungsi
didefinisikan dalam header sistem.
Peringatan ini diaktifkan oleh -Dinding.
-Wshift-count-negatif
Peringatkan jika jumlah shift negatif. Peringatan ini diaktifkan secara default.
-Wshift-hitungan-luapan
Peringatkan jika jumlah shift >= lebar tipe. Peringatan ini diaktifkan secara default.
-Switch
Peringatkan setiap kali pernyataan "switch" memiliki indeks tipe enumerated dan tidak memiliki "case"
untuk satu atau lebih kode yang disebutkan dari pencacahan itu. (Kehadiran "default"
label mencegah peringatan ini.) label "kasus" di luar rentang pencacahan juga
memprovokasi peringatan ketika opsi ini digunakan (bahkan jika ada label "default"). Ini
peringatan diaktifkan oleh -Dinding.
-Wswitch-default
Peringatkan setiap kali pernyataan "switch" tidak memiliki case "default".
-Witch-enum
Peringatkan setiap kali pernyataan "switch" memiliki indeks tipe enumerated dan tidak memiliki "case"
untuk satu atau lebih kode yang disebutkan dari pencacahan itu. label "kasus" di luar
rentang pencacahan juga memicu peringatan ketika opsi ini digunakan. Satu-satunya perbedaan
antara -Switch dan opsi ini adalah opsi ini memberikan peringatan tentang yang dihilangkan
kode enumerasi bahkan jika ada label "default".
-Wswitch-bool
Peringatkan setiap kali pernyataan "switch" memiliki indeks tipe boolean. Apakah mungkin untuk
tekan peringatan ini dengan melemparkan ekspresi pengontrol ke tipe selain
"bolong". Sebagai contoh:
beralih ((int) (a == 4))
{
...
}
Peringatan ini diaktifkan secara default untuk program C dan C++.
-Wsync-nand (C dan C++ saja)
Peringatkan ketika fungsi bawaan "__sync_fetch_and_nand" dan "__sync_nand_and_fetch" adalah
digunakan. Fungsi-fungsi ini mengubah semantik di GCC 4.4.
-Wtrigraph
Peringatkan jika ada trigraf yang ditemukan yang dapat mengubah arti program
(trigraf dalam komentar tidak diperingatkan). Peringatan ini diaktifkan oleh -Dinding.
-Wunused-tapi-set-parameter
Peringatkan setiap kali parameter fungsi ditetapkan, tetapi sebaliknya tidak digunakan (selain dari
deklarasinya).
Untuk menekan peringatan ini gunakan atribut "unused".
Peringatan ini juga diaktifkan oleh -Tidak digunakan Bersama -Wextra.
-Wunused-tapi-set-variabel
Peringatkan setiap kali variabel lokal ditetapkan, tetapi sebaliknya tidak digunakan (selain dari
pernyataan). Peringatan ini diaktifkan oleh -Dinding.
Untuk menekan peringatan ini gunakan atribut "unused".
Peringatan ini juga diaktifkan oleh -Tidak digunakan, yang diaktifkan oleh -Dinding.
-Wunused-fungsi
Peringatkan setiap kali fungsi statis dideklarasikan tetapi tidak didefinisikan atau statis non-inline
fungsi tidak terpakai. Peringatan ini diaktifkan oleh -Dinding.
-Wunus-label
Peringatkan setiap kali label dideklarasikan tetapi tidak digunakan. Peringatan ini diaktifkan oleh -Dinding.
Untuk menekan peringatan ini gunakan atribut "unused".
-Wunused-local-typedefs (C, Objective-C, C++ dan Objective-C++ saja)
Peringatkan ketika typedef yang didefinisikan secara lokal dalam suatu fungsi tidak digunakan. Peringatan ini adalah
diaktifkan oleh -Dinding.
-Parameter yang tidak digunakan
Peringatkan setiap kali parameter fungsi tidak digunakan selain dari deklarasinya.
Untuk menekan peringatan ini gunakan atribut "unused".
-Tidak-tidak-digunakan-hasil
Jangan peringatkan jika pemanggil fungsi yang ditandai dengan atribut "warn_unused_result" melakukannya
tidak menggunakan nilai kembaliannya. Standarnya adalah -Wunused-hasil.
-Wunused-variabel
Peringatkan setiap kali variabel lokal atau variabel statis non-konstan tidak digunakan selain dari
deklarasinya. Peringatan ini diaktifkan oleh -Dinding.
Untuk menekan peringatan ini gunakan atribut "unused".
-Wunused-nilai
Peringatkan setiap kali pernyataan menghitung hasil yang secara eksplisit tidak digunakan. Menekan
peringatan ini membuat ekspresi yang tidak digunakan menjadi "void". Ini termasuk ekspresi-
pernyataan atau sisi kiri ekspresi koma yang tidak mengandung efek samping.
Misalnya, ekspresi seperti "x[i,j]" menyebabkan peringatan, sedangkan "x[(void)i,j]"
tidak.
Peringatan ini diaktifkan oleh -Dinding.
-Tidak digunakan
Semua yang di atas -Tidak digunakan pilihan digabungkan.
Untuk mendapatkan peringatan tentang parameter fungsi yang tidak digunakan, Anda harus menentukan
-Wextra -Tidak digunakan (perhatikan itu -Dinding menyiratkan -Tidak digunakan), atau tentukan secara terpisah
-Parameter yang tidak digunakan.
-Wuninisialisasi
Peringatkan jika variabel otomatis digunakan tanpa diinisialisasi terlebih dahulu atau jika variabel
mungkin diblokir oleh panggilan "setjmp". Di C++, peringatkan jika referensi non-statis atau non-
anggota "const" statis muncul di kelas tanpa konstruktor.
Jika Anda ingin memperingatkan tentang kode yang menggunakan nilai variabel yang tidak diinisialisasi di
penginisialisasinya sendiri, gunakan -Winit-sendiri .
Peringatan ini terjadi untuk elemen struktur yang tidak diinisialisasi atau rusak,
variabel gabungan atau array serta untuk variabel yang tidak diinisialisasi atau dihancurkan
secara keseluruhan. Mereka tidak muncul untuk variabel atau elemen yang dideklarasikan "volatile". Karena
peringatan ini bergantung pada pengoptimalan, variabel atau elemen yang tepat untuknya
adalah peringatan tergantung pada opsi pengoptimalan yang tepat dan versi GCC yang digunakan.
Perhatikan bahwa mungkin tidak ada peringatan tentang variabel yang hanya digunakan untuk menghitung a
nilai itu sendiri tidak pernah digunakan, karena perhitungan tersebut dapat dihapus oleh aliran data
analisis sebelum peringatan dicetak.
-Wmungkin-tidak diinisialisasi
Untuk variabel otomatis, jika ada jalur dari entri fungsi ke penggunaan
variabel yang diinisialisasi, tetapi ada beberapa jalur lain yang
variabel tidak diinisialisasi, kompiler mengeluarkan peringatan jika tidak dapat membuktikan
jalur yang tidak diinisialisasi tidak dieksekusi pada saat run time. Peringatan ini dibuat opsional
karena GCC tidak cukup pintar untuk melihat semua alasan mengapa kode tersebut mungkin benar
meskipun tampaknya memiliki kesalahan. Berikut adalah salah satu contoh bagaimana ini bisa terjadi:
{
intx;
beralih (y)
{
kasus 1: x = 1;
break;
kasus 2: x = 4;
break;
kasus 3: x = 5;
}
foo (x);
}
Jika nilai "y" selalu 1, 2 atau 3, maka "x" selalu diinisialisasi, tetapi GCC
tidak tahu ini. Untuk menekan peringatan, Anda perlu menyediakan case default dengan
menegaskan(0) atau kode serupa.
Opsi ini juga memperingatkan ketika variabel otomatis non-volatil mungkin diubah oleh a
panggil ke "longjmp". Peringatan ini juga hanya mungkin dalam pengoptimalan
kompilasi.
Kompiler hanya melihat panggilan ke "setjmp". Itu tidak bisa tahu di mana "longjmp" akan berada
ditelepon; sebenarnya, penangan sinyal dapat memanggilnya kapan saja dalam kode. Sebagai
hasilnya, Anda mungkin mendapatkan peringatan meskipun sebenarnya tidak ada masalah karena "longjmp"
sebenarnya tidak bisa dipanggil di tempat yang akan menimbulkan masalah.
Beberapa peringatan palsu dapat dihindari jika Anda menyatakan semua fungsi yang Anda gunakan itu
tidak pernah kembali sebagai "noreturn".
Peringatan ini diaktifkan oleh -Dinding or -Wextra.
-Pragma tidak diketahui
Peringatkan saat ditemukan arahan "#pragma" yang tidak dipahami oleh GCC. Jika ini
opsi baris perintah digunakan, peringatan bahkan dikeluarkan untuk pragma yang tidak diketahui dalam sistem
file header. Ini tidak terjadi jika peringatan hanya diaktifkan oleh -Dinding
opsi baris perintah.
-Wno-pragma
Jangan memperingatkan tentang penyalahgunaan pragma, seperti parameter yang salah, sintaks yang tidak valid, atau
konflik antar pragma. Lihat juga -Pragma tidak diketahui.
-Alias ketat
Opsi ini hanya aktif ketika -aliasing ketat aktif. Ini memperingatkan tentang kode itu
mungkin melanggar aturan aliasing ketat yang digunakan kompiler untuk pengoptimalan.
Peringatan tidak menangkap semua kasus, tetapi mencoba menangkap yang lebih umum
perangkap. Ini termasuk dalam -Dinding. Itu setara dengan -Alias ketat=3
-aliasing-wstrict=n
Opsi ini hanya aktif ketika -aliasing ketat aktif. Ini memperingatkan tentang kode itu
mungkin melanggar aturan aliasing ketat yang digunakan kompiler untuk pengoptimalan.
Tingkat yang lebih tinggi sesuai dengan akurasi yang lebih tinggi (lebih sedikit positif palsu). Level yang lebih tinggi
juga sesuai dengan lebih banyak usaha, mirip dengan cara -O bekerja. -Alias ketat is
setara dengan -Alias ketat=3.
Level 1: Paling agresif, cepat, paling tidak akurat. Mungkin berguna saat level lebih tinggi
jangan peringatkan tapi -aliasing ketat masih melanggar kode, karena memiliki sangat sedikit false
negatif. Namun, ia memiliki banyak positif palsu. Memperingatkan untuk semua konversi pointer
antara tipe yang mungkin tidak kompatibel, bahkan jika tidak pernah direferensikan. Berlari di depan
akhir saja.
Level 2: Agresif, cepat, tidak terlalu presisi. Mungkin masih memiliki banyak hasil positif palsu (bukan
sebanyak level 1, dan beberapa negatif palsu (tetapi mungkin lebih dari level 1).
Tidak seperti level 1, itu hanya memperingatkan ketika alamat diambil. Memperingatkan tentang jenis yang tidak lengkap.
Berjalan di ujung depan saja.
Tingkat 3 (default untuk -Alias ketat): Seharusnya memiliki sangat sedikit positif palsu dan sedikit
negatif palsu. Sedikit lebih lambat dari level 1 atau 2 saat pengoptimalan diaktifkan.
Menangani pola permainan kata + dereferensi umum di ujung depan:
"*(int*)&some_float". Jika pengoptimalan diaktifkan, itu juga berjalan di bagian belakang, di mana
itu berurusan dengan beberapa kasus pernyataan menggunakan informasi poin sensitif aliran.
Hanya memperingatkan ketika pointer yang dikonversi di-dereferensi. Tidak memperingatkan tentang tidak lengkap
jenis.
-Meluap-wstrict
-Meluap-kencang=n
Opsi ini hanya aktif ketika -fstrict-overflow aktif. Ini memperingatkan tentang kasus
di mana kompiler mengoptimalkan berdasarkan asumsi bahwa overflow yang ditandatangani tidak
terjadi. Perhatikan bahwa itu tidak memperingatkan tentang semua kasus di mana kode mungkin meluap: it
hanya memperingatkan tentang kasus di mana kompiler mengimplementasikan beberapa optimasi. Jadi ini
peringatan tergantung pada tingkat pengoptimalan.
Pengoptimalan yang mengasumsikan bahwa overflow yang ditandatangani tidak terjadi benar-benar aman jika
nilai-nilai variabel yang terlibat sedemikian rupa sehingga overflow tidak pernah terjadi, pada kenyataannya,
terjadi. Oleh karena itu peringatan ini dapat dengan mudah memberikan false positive: peringatan tentang kode
itu sebenarnya bukan masalah. Untuk membantu fokus pada isu-isu penting, beberapa peringatan
tingkat didefinisikan. Tidak ada peringatan yang dikeluarkan untuk penggunaan overflow bertanda tangan yang tidak ditentukan
saat memperkirakan berapa banyak iterasi yang dibutuhkan sebuah loop, khususnya saat menentukan
apakah loop akan dieksekusi sama sekali.
-Wstrict-overflow=1
Peringatkan tentang kasus-kasus yang meragukan dan mudah dihindari. Misalnya dengan
-fstrict-overflow, kompilator menyederhanakan "x + 1 > 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
-Atribut saran=konstan
-Atribut saran=tidak kembali
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.
-Sarankan-tipe akhir
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
-Sarankan-tipe akhir 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:
ke dalam 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.
-Tidak ada kualifikasi array yang dibuang (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
-Tidak ada pemain-ke-penunjuk dan -Tidak ada penunjuk-ke-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 dan -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 "<" atau ">=". 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.
-Kualifikasi Wcast
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-lompat-leset-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.
-Wlogis-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.
-Tipe parameter yang hilang (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 { ke dalam f, g, h; };
struct sx = { 3, 4 };
Opsi ini tidak memperingatkan tentang inisialisasi yang ditunjuk, jadi modifikasi berikut:
tidak memicu peringatan:
struct s { ke dalam f, g, h; };
struct sx = { .f = 3, .g = 4 };
Di C++ opsi ini tidak memperingatkan tentang penginisialisasi {} yang kosong, misalnya:
struct s { ke dalam f, g, h; };
sx = {};
Peringatan ini termasuk dalam -Wextra. Untuk mendapatkan yang lain -Wextra peringatan tanpa yang ini,
menggunakan -Wextra -Tidak ada inisialisasi bidang yang hilang.
-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[=<tak satupun|id|NFC|nfkc>]
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.
-Tidak-aneh
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 -Tidak-timpa-init.
-Dikemas
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 -Tidak ada-dikemas-bitfield-kompatibel 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.
-Tidak ada pemain-ke-penunjuk
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. Pemeran musim dingin ke penunjuk is
diaktifkan secara default.
-Tidak ada penunjuk-ke-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.
-Wvararg
Peringatkan penggunaan makro yang dipertanyakan yang digunakan untuk menangani argumen variabel seperti
"va_start". Ini adalah default. Untuk menghambat pesan peringatan, gunakan -Wno-vararg.
-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.
-Tak ada-penetapan-pemindahan-virtual
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.
-Konstanta-float-Wunsuffixed (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.
-nama gpub
Buat bagian .debug_pubnames dan .debug_pubtypes kerdil.
-ggnu-nama pub
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.
-kurcaci-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
-kurcaci-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
-kurcaci-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.
-kurcaci-2 tidak menerima tingkat debug gabungan, karena GCC digunakan untuk mendukung
Option -kurcaci 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
<https://github.com/google/sanitizers/wiki/AddressSanitizer> 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
<https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags> 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
<https://github.com/google/sanitizers/wiki#threadsanitizer> untuk lebih jelasnya. Lari-
perilaku waktu dapat dipengaruhi menggunakan TSAN_OPTIONS variabel lingkungan; Lihat
<https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags> 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
<https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer> 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.
-fsanitasi=batal
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=tanda-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-meluap
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-meluap 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=bodoh
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.
-fsanitasi=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 dan -fsanitize=kembalikan), -fsanitize=float-cast-meluap,
-fsanitize=float-bagi-dengan-nol dan -fsanitize=alamat kernel. Untuk pembersih ini
pemulihan kesalahan diaktifkan secara default. -fsanitize-recover=semua dan
-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-tidak terdefinisi-perangkap-pada-kesalahan
-fsanitize-tidak terdefinisi-perangkap-pada-kesalahan 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-batas
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-batas dan -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 -statis-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
-benang lp. Lihat juga -statis-libmpx. Perilaku perpustakaan runtime dapat dipengaruhi
menggunakan berbagai CHKP_RT_* variabel lingkungan. Lihat
<https://gcc.gnu.org/wiki/Intel%20MPX%20support%20in%20the%20GCC%20compiler> 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 dan -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-gunakan-statis-const-batas
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-wrapper
Memungkinkan Pemeriksa Batas Penunjuk untuk mengganti panggilan ke fungsi bawaan dengan panggilan ke
fungsi pembungkus. Kapan -fchkp-use-wrapper digunakan untuk menghubungkan program, driver GCC
secara otomatis menautkan ke libmpxwrappers. Lihat juga -statis-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 dan
-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 -kurcaci-2.
-femit-struct-debug-base saja
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-detail 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-base saja
untuk opsi yang lebih agresif. Lihat -femit-struct-debug-detail untuk lebih jelasnya
kontrol.
Opsi ini hanya berfungsi dengan DWARF 2.
-femit-struct-debug-detail[=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 dan
-femit-struct-debug-base saja, 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-detail belum mengimplementasikannya.
Kata ketiga menentukan file sumber untuk struct yang kompilernya
harus memancarkan informasi debug. Nilai tak satupun dan 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=yang baru
Saat mengkompilasi file dalam direktori tua, catat informasi debug yang menggambarkannya sebagai
in yang 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 nama tambahan. nama tambahan 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 nama tambahan 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 dan .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 nama tambahan 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-pohon-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 dan 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 dan -fdump-rtl-btl2 aktifkan dumping setelah dua target cabang
beban optimasi berlalu.
-fdump-rtl-memotong
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 dan -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 dan -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 dan -fdump-rtl-fwprop2 aktifkan dumping setelah keduanya maju
propagasi berlalu.
-fdump-rtl-gcse1
-fdump-rtl-gcse2
-fdump-rtl-gcse1 dan -fdump-rtl-gcse2 aktifkan dumping setelah kesamaan global
eliminasi subekspresi.
-fdump-rtl-init-reg
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 dan -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 dan -fdump-rtl-subreg2 aktifkan dumping setelah dua subreg
ekspansi lewat.
-fdump-rtl-batalkan pembagian
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-tautan-tidak bernomor
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.
details
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 dan 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=file stderr.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 dan lineno.
memilih
Aktifkan semua opsi pengoptimalan, yaitu, dioptimalkan, terjawab, dan mencatat.
Pembuangan pohon berikut dimungkinkan:
Garis Keturunan 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 .imple 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.
fiopt
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.
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.
memilih
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.semua
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 dan 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.
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, .jadwal1 or .jadwal2 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 dan -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 dan 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 dan foo.o sedang ditulis secara bersamaan oleh kedua kompiler.
-simpan-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,
-simpan-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 -kurcaci-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-pelacakan-tugas-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 -cetak-nama-file=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`
-cetak-pencarian-dir
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 /.
-cetak-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.
-versi dump
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-des -fbranch-count-reg -fcombine-stack-penyesuaian -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-bungkus -fsplit-tipe lebar
-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-tenggelam -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-penyelarasan -fipa-sra
-fipa-icf -fisolate-salah-jalur-dereferensi -flra-remat -foptimize-saudara-panggilan
-foptimalkan-strlen -fpartial-sebaris -fpeehole2 -freorder-blok
-freorder-blok-dan-partisi -freorder-fungsi -frerun-cse-setelah-loop
-fsched-interblock -fsched-spesifikasi -fschedule-insns -fschedule-insns2 -aliasing ketat
-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-vektorisasi,
-fvect-biaya-model, -ftree-partial-pra dan -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-melindungi-orang tua dan -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
salah satu 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-tunda-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
--aktifkan-bingkai-penunjuk 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-sebaris
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 dan -Os.
-sejajar dengan rasa takut
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 dan -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-simpan-statis-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-jadwal
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-jadwal 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-tipe lebar
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-des
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-scheded-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-jadwal-spesifikasi
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-terhenti-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-jadwal-terhenti-insns-dep adalah setara dengan -fsched-stalled-insns-dep=0.
-fsched-terhenti-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-bungkus
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-penyesuaian
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 dan -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 dan
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 dan -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-penyelarasan
Saat diaktifkan, pengoptimalan ini menyebarkan penyelarasan parameter fungsi untuk mendukung
operasi vektorisasi dan string yang lebih baik.
Bendera ini diaktifkan secara default di -O2 dan -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 dan -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-tenggelam
Lakukan gerakan simpan ke depan pada pohon. Bendera ini diaktifkan secara default di -O dan
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 dan
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 dan
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:
LAKUKAN J = 1, M
LAKUKAN saya = 1, N
A(J, Saya) = A(J, Saya) * C
SELESAI
SELESAI
pertukaran loop mengubah loop seolah-olah ditulis:
LAKUKAN saya = 1, N
LAKUKAN J = 1, M
A(J, Saya) = A(J, Saya) * 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:
LAKUKAN saya = 1, N
SEBUAH(Saya) = SEBUAH(Saya) + C
SELESAI
loop strip mining mengubah loop seolah-olah ditulis:
LAKUKAN II = 1, N, 51
LAKUKAN saya = II, menit (II + 50, N)
SEBUAH(Saya) = SEBUAH(Saya) + 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:
LAKUKAN saya = 1, N
LAKUKAN J = 1, M
A(J, Saya) = B(Saya) + C(J)
SELESAI
SELESAI
pemblokiran loop mengubah loop seolah-olah ditulis:
LAKUKAN II = 1, N, 51
LAKUKAN JJ = 1, M, 51
LAKUKAN saya = II, menit (II + 50, N)
DO J = JJ, menit (JJ + 50, M)
A(J, Saya) = B(Saya) + 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-buka gulungan-dan-macet
Aktifkan buka gulungan dan macet untuk pengoptimal sarang loop berbasis ISL. Faktor buka gulungan bisa menjadi
diubah menggunakan loop-buka-gulungan-ukuran selai 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
LAKUKAN saya = 1, N
SEBUAH(Saya) = B(Saya) + C
D(Saya) = E(Saya) * F
SELESAI
diubah menjadi
LAKUKAN saya = 1, N
SEBUAH(Saya) = B(Saya) + C
SELESAI
LAKUKAN saya = 1, N
D(Saya) = E(Saya) * 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
LAKUKAN saya = 1, N
SEBUAH(Saya) = 0
B(Saya) = SEBUAH(Saya) + Saya
SELESAI
diubah menjadi
LAKUKAN saya = 1, N
SEBUAH(Saya) = 0
SELESAI
LAKUKAN saya = 1, N
B(Saya) = SEBUAH(Saya) + Saya
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 dan
tinggi.
-ftree-coalesce-inline-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-vektorisasi
Melakukan vektorisasi pada pohon. Bendera ini memungkinkan -ftree-loop-vektorisasi dan
-ftree-slp-vektorisasi jika tidak secara eksplisit ditentukan.
-ftree-loop-vektorisasi
Lakukan vektorisasi loop pada pohon. Bendera ini diaktifkan secara default di -O3 dan kapan
-ftree-vektorisasi diaktifkan.
-ftree-slp-vektorisasi
Lakukan vektorisasi blok dasar pada pohon. Bendera ini diaktifkan secara default di -O3 dan
ketika -ftree-vektorisasi 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-sebaris
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 dan -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.
-aliasing ketat
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;
};
ke dalam 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 -aliasing ketat, Tipe-
punning diperbolehkan, asalkan memori diakses melalui tipe union. Sehingga
kode di atas berfungsi seperti yang diharapkan. Namun, kode ini mungkin tidak:
ke dalam 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:
ke dalam f() {
ganda d = 3.0;
return ((union a_union *) &d)->i;
}
-aliasing ketat 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 dan -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.
-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 dan -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 dan -falign-label=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 dan -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 dan -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 dan -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 dan bar.o. Doa terakhir membaca bytecode GIMPLE
dari foo.o dan bar.o, menggabungkan dua file menjadi satu gambar internal, dan mengkompilasi
hasilnya seperti biasa. Sejak keduanya foo.o dan 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 dan 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 -sekering-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 -sekering-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, -fpik, -fpie, -umum, -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-kembali dan -fpcc-struct-kembali.
Pilihan lain seperti -ffp-kontrak, -fno-ketat-meluap, -fwrapv, -fno-perangkapv or
-fno-ketat-aliasing dilewatkan ke tahap tautan dan digabungkan secara konservatif
untuk unit terjemahan yang bertentangan. Secara khusus -fno-ketat-meluap, -fwrapv dan
-fno-perangkapv 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
dan gcc-ranlib alih-alih ar dan ranlib; untuk menampilkan simbol file objek dengan
GIMPLE bytecode, gunakan gcc-nm. Perintah-perintah itu mengharuskan ar, ranlib dan nm telah
dikompilasi dengan dukungan plugin. Pada waktu tautan, gunakan bendera -sekering-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 dan -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 -sekering-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.
-sekering-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 dan 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.
-fprofil-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 dan -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-vektorisasi, 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-ketidakcocokan.
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-vektorisasi, -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
<https://perf.wiki.kernel.org/>.
Misalnya
catatan perf -e br_inst_retired:near_taken -b -o perf.data \
-- program_anda
Kemudian gunakan buat_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=profil.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-sinyal-nans dan -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 dan -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 dan -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 dan -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-sinyal-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-sinyal-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-aturan
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-aturan.
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 LOMPAT_INSN dan
PANGGILAN_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 dan -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 dan -fpeel-loop.
-fjadwal-fusi
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 dan
-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-pelindung tumpukan, -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-duplikasi-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-pencarian
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-pencarian langsung
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.
panjang daftar maksimal yang tertunda
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 dan --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-vektorisasi 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-kupas-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-sepenuhnya-kupas-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-ukuran
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.
pemeriksaan vect-max-version-for-alignment
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.
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-kode-pertumbuhan
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-pencarian-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.
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.
spesifikasi-min masalah
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-gabungkan-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 dan -O1, dan 100 untuk -Os, -O2, dan
-O3.
latensi prefetch
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-ukuran-cache-line
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-ukuran tabel konflik
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-reg
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.
ukuran-vartrack-maks
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-skalarisasi-ukuran-Ospeed
sra-max-skalarisasi-ukuran-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-skalarisasi-ukuran-
kecepatan) atau ukuran (sra-max-skalarisasi-ukuran-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.
grafit-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-buka-gulungan-ukuran selai
Tentukan faktor buka gulungan untuk -floop-buka gulungan-dan-macet pilihan. Nilai default
adalah 4.
loop-unroll-jam-kedalaman
Tentukan dimensi yang akan dibuka gulungannya (dihitung dari loop paling dalam) untuk
-floop-buka gulungan-dan-macet. 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-petunjuk-bonus
Ketika IPA-CP menentukan bahwa kandidat kloning akan membuat indeks array
akses diketahui, itu menambahkan bonus ipa-cp-array-index-petunjuk-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-vektorisasi) 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.
lebar pohon-reassoc
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-Inns
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.
jalur-utas-max-fsm
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 dan csh,
-D'nama(argumen...)=definisi' bekerja.
-D dan -U opsi diproses dalam urutan yang diberikan pada baris perintah. Semua
-imacros fillet dan -termasuk fillet opsi diproses setelah semua -D dan -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 dan -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 -fpraproses 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=standard
-ansi
Tentukan standar yang harus dipatuhi oleh kode. Saat ini CPP mengetahui tentang C
dan standar C++; lain dapat ditambahkan di masa depan.
standard mungkin salah satu dari:
"c90"
"c89"
"iso9899: 1990"
Standar ISO C dari tahun 1990. c90 adalah singkatan biasa untuk versi ini
standar.
-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 dan -isysroot.
-iprefiks awalan
Menentukan awalan sebagai awalan untuk selanjutnya -idengan awalan pilihan. Jika awalan
mewakili direktori, Anda harus menyertakan final /.
-idengan awalan dir
-idengan awalansebelum dir
Menambahkan dir ke awalan yang ditentukan sebelumnya dengan -iprefiks, dan tambahkan hasilnya
direktori ke jalur pencarian sertakan. -idengan awalansebelum meletakkannya di tempat yang sama -I
akan; -idengan awalan 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 dan
-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 dan -isysroot.
-fdirectives-saja
Saat melakukan prapemrosesan, tangani arahan, tetapi jangan perluas makro.
Perilaku opsi tergantung pada -E dan -fpraproses 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 -fpraproses, 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 dan -fpraproses, aturan untuk -fpraproses 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.
-fpraproses
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.
-fpraproses 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-rangkaian karakter=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-rangkaian karakter, 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-rangkaian karakter=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.
-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 dan -ansi
Pilihan.
Sembilan trigraf dan penggantinya adalah
Trigraf: ??( ??) ??< ??> ??= ??/ ??' ??! ??-
Pengganti: [ ] {} # \ ^ | ~
-peta ulang
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 dan .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 -bersama-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 -bersama-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 dan -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 (-fpik, -fPIC, atau model
subopsi) saat Anda menentukan opsi penaut ini.[1]
-bersama-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 -bersama-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 -bersama-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.
-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.
-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 perpustakaan. Jika perpustakaan tersedia sebagai perpustakaan bersama, dan
itu -statis opsi tidak digunakan, maka tautan ini terhadap versi bersama dari perpustakaan.
-statis-liblsan opsi mengarahkan driver GCC untuk menautkan perpustakaan 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 libabsan. Jika libabsan tersedia sebagai perpustakaan bersama,
dan -statis opsi tidak digunakan, maka tautan ini terhadap versi bersama dari
libabsan. itu -statis-libubsan opsi mengarahkan driver GCC untuk menautkan libabsan
statis, tanpa harus menghubungkan perpustakaan lain secara statis.
-statis-libmpx
Ketika -fcheck-penunjuk batas dan -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 -statis-libmpx opsi mengarahkan driver GCC untuk menautkan libmpx
statis, tanpa harus menghubungkan perpustakaan lain secara statis.
-statis-libmpxwrappers
Ketika -fcheck-penunjuk batas dan -mmpx opsi digunakan untuk menautkan program tanpa
juga menggunakan -fno-chkp-use-wrapper, 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
-statis-libmpxwrappers opsi mengarahkan driver GCC untuk menautkan libmpxwrappers
statis, tanpa harus menghubungkan perpustakaan lain secara statis.
-statis-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
-statis-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
<berkas>", 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 dan 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/ dan /usr/lokal/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 dan 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- dan -nostdinc independen.
Menentukan target Mesin dan 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 dan 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 tujuan umum. Ini akan mencegah
compiler dari menggunakan floating-point dan register SIMD Lanjutan tetapi tidak akan memaksakan apapun
pembatasan pada assembler.
-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.
-mtls-ukuran=ukuran
Tentukan ukuran bit offset TLS langsung. Nilai yang valid adalah 12, 24, 32, 48. Ini
pilihan tergantung pada binutils lebih tinggi dari 2.25.
-mfix-korteks-a53-835769
-mno-memperbaiki-korteks-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-memperbaiki-korteks-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 dan, opsional, satu atau lebih fitur
pengubah. Opsi ini memiliki bentuk -maret=lengkungan{+[tidak]ciri}*.
Nilai yang diizinkan untuk lengkungan adalah lenganv8-a, lenganv8.1-a or asli.
Nilai lenganv8.1-a menyiratkan lenganv8-a dan mengaktifkan dukungan kompiler untuk ARMv8.1
ekstensi arsitektur. Secara khusus, ini memungkinkan +krc dan +lainnya fitur.
Nilai asli tersedia di AArch64 GNU/Linux asli dan menyebabkan kompiler untuk
memilih arsitektur sistem host. Opsi ini tidak berpengaruh jika compiler
tidak dapat mengenali arsitektur sistem host,
Nilai yang diizinkan untuk ciri tercantum dalam sub-bagian pada
aarch64-pengubah fitur,,-maret dan -mcpu Fitur Pengubah. Dimana bertentangan
pengubah fitur ditentukan, fitur paling kanan digunakan.
GCC menggunakan nama untuk menentukan jenis instruksi apa yang dapat dipancarkannya saat menghasilkan
kode perakitan. Jika -berbaris ditentukan tanpa salah satu dari -mtune or -mcpu juga menjadi
ditentukan, kode disetel untuk berkinerja baik di berbagai prosesor target
mengimplementasikan arsitektur target.
-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, qdf24xx, 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.
Selain itu pada sistem AArch64 GNU/Linux asli, nilainya asli tersedia. Ini
opsi menyebabkan kompiler untuk memilih arsitektur dan menyetel kinerja
kode untuk prosesor sistem host. Opsi ini tidak berpengaruh jika compiler
tidak dapat mengenali arsitektur sistem host.
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 tentang aarch64-pengubah fitur,,-maret dan
-mcpu Fitur Pengubah. Di mana pengubah fitur yang bertentangan ditentukan,
fitur paling kanan digunakan.
Selain itu pada sistem AArch64 GNU/Linux asli, nilainya asli tersedia. Ini
opsi menyebabkan kompiler menyetel kinerja kode untuk prosesor
sistem tuan rumah. Opsi ini tidak berpengaruh jika kompiler tidak dapat mengenali
arsitektur sistem host.
GCC menggunakan nama 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
.
-penggerak=string
Mengesampingkan keputusan penyetelan yang dibuat oleh back-end sebagai respons terhadap a -mtune= beralih. Itu
sintaks, semantik, dan nilai yang diterima untuk string dalam opsi ini tidak dijamin untuk
konsisten di seluruh rilis.
Opsi ini hanya dimaksudkan untuk berguna saat mengembangkan GCC.
-mpc-relative-literal-loads
Aktifkan beban literal relatif PC. Jika opsi ini digunakan, kumpulan literal diasumsikan
memiliki jangkauan hingga 1MiB dan urutan instruksi yang sesuai digunakan. Ini
opsi tidak berdampak saat digunakan dengan -mcmodel=kecil.
-berbaris dan -mcpu Pengubah Fitur
Pengubah fitur yang digunakan dengan -berbaris dan -mcpu dapat berupa salah satu dari berikut ini dan mereka
invers tidakciri:
CRC Aktifkan ekstensi CRC. Ini aktif secara default untuk -maret=lenganv8.1-a.
kripto
Aktifkan ekstensi Crypto. Ini juga mengaktifkan SIMD Lanjutan dan floating-point
petunjuk.
fp Aktifkan instruksi floating-point. Ini aktif secara default untuk semua nilai yang mungkin untuk
Pilihan -berbaris dan -mcpu.
simd
Aktifkan petunjuk SIMD Lanjutan. Ini juga memungkinkan instruksi floating-point.
Ini aktif secara default untuk semua kemungkinan nilai untuk opsi -berbaris dan -mcpu.
lse Aktifkan instruksi Ekstensi Sistem Besar. Ini aktif secara default untuk
-maret=lenganv8.1-a.
Artinya, kripto menyiratkan simd menyiratkan fp. Sebaliknya, nofp (atau setara,
-mgeneral-regs-saja) menyiratkan nosimd menyiratkan nocrypto.
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.
-mcm bergerak
Aktifkan generasi gerakan bersyarat.
-mnop=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.
-mkecil16
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 dan 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.
-saya
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.
-tidak normal
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-mengapung
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.dll
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-volatil-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.
-sedikit-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-beban
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.
-tingkat ukuran=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-ambang batas=probabilitas
Tetapkan ambang probabilitas untuk tidak menyelaraskan cabang. Saat menyetel untuk ARC700 dan
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_kompak
Digantikan oleh -mdpfp-kompak.
-mdpfp_cepat
Digantikan oleh -mdpfp-cepat.
-mdsp_packa
Digantikan oleh -mdsp-paket.
-meA
Digantikan oleh -saya.
-mmac_24
Digantikan oleh -mmac-24.
-mmac_d16
Digantikan oleh -mmac-d16.
-mspfp_kompak
Digantikan oleh -mspfp-kompak.
-mspfp_cepat
Digantikan oleh -mspfp-cepat.
-mtune=cpu
Nilai - Nilai busur600, busur601, busur700 dan arc700-xmac untuk cpu diganti oleh ARC600, ARC601,
ARC700 dan 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, dipcs, aapcs,
aapcs-linux dan akumxt.
-mapcs-bingkai
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-bingkai. Pilihan ini adalah
usang.
-mapcs
Ini adalah sinonim untuk -mapcs-bingkai dan tidak digunakan lagi.
-ibu jari-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 -ibu jari-interwork ditentukan. Dalam konfigurasi AAPCS
pilihan ini tidak ada artinya.
-mno-jadwal-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 dan
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, lenganv2a, lenganv3, lenganv3m, lenganv4, lenganv4t, lenganv5, lenganv5t, armv5e,
armv5te, lenganv6, lenganv6j, lenganv6t2, armv6z, armv6kz, lenganv6-m, lenganv7, lenganv7-a, lenganv7-r,
lenganv7-m, lenganv7e-m, armv7ve, lenganv8-a, armv8-a+crc, lenganv8.1-a, armv8.1-a+crc, akumxt,
iwmmxt2, ep9312.
-maret=lenganv7ve 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, lengan926ej-s, lengan940t, arm9tdmi, arm10tdmi, lengan1020t, lengan1026ej-s,
lengan10e, lengan1020e, lengan1022e, lengan1136j-s, lengan1136jf-s, mpcore, mpcorenovfp, lengan1156t2-s,
lengan1156t2f-s, lengan1176jz-s, lengan1176jzf-s, generik-armv7-a, korteks-a5, korteks-a7,
korteks-a8, korteks-a9, korteks-a12, korteks-a15, korteks-a17, 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.kecil-kalikan, exynos-m1, qdf24xx,
keajaiban-pj4, skala x, akumxt, 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-a17.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-mengapung 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-daftar=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
pindah 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.
Anda juga dapat mengganti mode ARM dan Thumb untuk setiap fungsi dengan menggunakan
"target("jempol")" dan "target("lengan")" atribut fungsi atau pragma.
-mtpcs-bingkai
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-bingkai.
-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 dan 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 -fpik 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. Opsi ini tidak berdampak pada Thumb2. Namun, ini mungkin
perubahan dalam rilis GCC di masa mendatang. 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 Spaces dan 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 dan -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 dan -mfdpik, 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-spesifikasi-anomali
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-perpustakaan bersama
Buat kode yang tidak menganggap pustaka bersama berbasis ID sedang digunakan. Ini adalah
default.
-mleaf-id-perpustakaan bersama
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-perpustakaan bersama
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 -mfdpik.
-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=standar
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 dan 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-tumpukan-bingkai=n
Peringatkan ketika bingkai tumpukan suatu fungsi melebihi n byte.
-metrax4
-metrax100
Opsi -metrax4 dan -metrax100 adalah sinonim untuk -maret=v3 dan -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 #TIDAK_APLIKASI 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-selaras
-mno-penyelarasan tumpukan
-mdata-selaras
-mno-data-menyelaraskan
-mconst-selaras
-mno-const-selaras
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 -fpik dan -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.
-mmak
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 dan
/ 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 dan -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.
-gpenuh
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.
-kernel
Aktifkan mode pengembangan kernel. NS -kernel set pilihan -statis, -fno-umum,
-fno-gunakan-cxa-atexit, -fno-pengecualian, -fno-non-panggilan-pengecualian, -fapple-kext,
-fno-lemah dan -fno-rtti mana yang berlaku. Mode ini juga mengatur -mno-altivec,
-msoft-mengapung, -fno-bawaan dan -mlong-cabang untuk target PowerPC.
-uang-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: -uang-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 dan
-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
-instal_nama
-keep_private_externs
-multi_modul
-multiply_definisi
-multiply_definisi_tidak digunakan
-noall_load
-no_dead_strip_inits_and_terms
-tidak ada pengikatan awal
-nomultidef
-tidak terikat
-hidunglinkedit
-halamanzero_size
-mengikat sebelumnya
-prebind_all_twolevel_modules
-private_bundel
-read_only_relocs
-sejajarkan
-simbol objek sektor
-mengapa
-seg1addr
-sektebuat
-simbol objek sektor
-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
-apa yang dimuat
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-mengapung
Gunakan (jangan gunakan) instruksi titik-mengambang perangkat keras untuk titik-mengambang
operasi. Kapan -msoft-mengapung 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-mengapung. 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-mode-perangkap=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 dan
-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-mode-perangkap=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
-perbaikan
-mno-perbaiki
-mmaks
-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
-data besar
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 -data besar. 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, -fpik menyiratkan -msmall-data dan -fPIC
menyiratkan -data besar.
-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=tipe_cpu
Atur set instruksi dan parameter penjadwalan instruksi untuk jenis mesin
tipe_cpu. 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 tipe_cpu 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=tipe_cpu
Tetapkan hanya parameter penjadwalan instruksi untuk jenis mesin tipe_cpu. 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.
-latensi-memori=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-mengambang
Gunakan instruksi perangkat keras untuk operasi floating-point.
-msoft-mengapung
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".
-kata md
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.
-media
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.
-mfdpik
Pilih FDPIC ABI, yang menggunakan deskriptor fungsi untuk mewakili pointer ke
fungsi. Tanpa opsi terkait PIC/PIE, ini menyiratkan -fPIE. Dengan -fpik 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 -mfdpik. Ini diaktifkan secara default jika
mengoptimalkan kecepatan dan kompilasi untuk perpustakaan bersama (yaitu, -fPIC or -fpik), 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 -fpik 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-perpustakaan-gambar
Tautkan dengan perpustakaan gambar (perpustakaan, bukan FD). Ini tersirat oleh -milibrary-pic, demikian juga
seperti oleh -fPIC dan -fpik tanpa -mfdpik. 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-pindah
Aktifkan penggunaan instruksi pemindahan bersyarat (default).
Sakelar ini terutama untuk men-debug kompiler dan kemungkinan akan dihapus dalam a
versi masa depan.
-mno-cond-pindah
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-kond-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-kond-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-statistik
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 dan sederhana.
GNU / Linux Opsi
Ini -m opsi ditentukan untuk target GNU/Linux:
-mglibc
Gunakan pustaka GNU C. Ini adalah default kecuali pada *-*-linux-*uclibc*,
*-*-linux-*musl* dan *-*-linux-*android* target.
-muclibc
Gunakan perpustakaan uClibc C. Ini adalah default pada *-*-linux-*uclibc* target.
-musl
Gunakan perpustakaan musl C. Ini adalah default pada *-*-linux-*musl* 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 dan -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 dan -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.
-mlompat-dalam-penundaan
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.
-rentang tetap=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 dan 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-mengapung
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-mengapung 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-mengapung 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 -cetak-nama-prog=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 -cetak-nama-prog=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 dan -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 dan 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-gambar
Hasilkan kode yang tidak menggunakan register penunjuk global. Hasilnya bukan posisi
kode independen, dan melanggar IA-64 ABI.
-mvolatile-asm-berhenti
-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.
-mkonstan-gp
Hasilkan kode yang menggunakan nilai penunjuk global konstan tunggal. Ini berguna ketika
mengkompilasi kode kernel.
-mauto-gambar
Hasilkan kode yang dapat dipindahkan sendiri. Ini menyiratkan -mkonstan-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".
-bingung-gila
-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.
-rentang tetap=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-jadwal-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-spesifikasi
-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-schedule-control-spec
-spesifikasi-kontrol-msched
(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-spesifikasi
diaktifkan. Standarnya adalah 'aktifkan'.
-msched-in-control-spesifikasi
-mno-jadwal-dalam-kontrol-spesifikasi
(En/Dis) dapat menjadwalkan spekulatif instruksi yang bergantung pada
mengendalikan beban spekulatif. Ini hanya efektif dengan -spesifikasi-kontrol-msched 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-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-jadwal-jangan-periksa-kontrol-spesifikasi
Hasilkan pemeriksaan untuk spekulasi kontrol dalam penjadwalan selektif. Bendera ini adalah
dinonaktifkan secara default.
-msched-max-memori-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 data 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-perangkap=jumlah
Menentukan nomor perangkap yang akan digunakan untuk membersihkan cache. Standarnya adalah 12. Valid
angka antara 0 dan 15 inklusif.
-mno-perangkap siram
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-fungsi
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 dan CPU32. Arsitektur ColdFire dipilih sesuai dengan Freescale's
Klasifikasi ISA dan nilai yang diizinkan adalah: isaah, isaaplus, isab dan 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 dan -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 dan 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 51 ya 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 dan -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
dan -mcpu. Mikroarsitektur M680x0 adalah: 68000, 68010, 68020, 68030, 68040,
68060 dan CPU32. Mikroarsitektur ColdFire adalah: cfv1, cfv2, cfv3, cfv4 dan
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 dan -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 -maret=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-mengambang
-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-mengapung
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 dan -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-selaras-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-selaras-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 -fpik, 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-ketat-selaras
-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-perpustakaan bersama
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-lampu terang
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-bitfield
-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-peningkatan=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.
-mklip
Mengaktifkan instruksi "klip". Perhatikan bahwa -mklip tidak berguna kecuali Anda juga
memberikan -mminmaks.
-mkonfigurasi=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 -mkonfigurasi= .
-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.
-mminmaks
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-mengapung
Gunakan emulasi perangkat lunak untuk floating point (default).
-mhard-mengambang
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-lembut-mul
Gunakan software multiplikasi emulasi (default).
-mxl-soft-div
Gunakan emulasi perangkat lunak untuk pembagian (default).
-mxl-barel-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-konversi
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
dan 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 dan 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 dan 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 dan -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 -maret=mips32r3.
-mips32r5
Setara dengan -maret=mips32r5.
-mips32r6
Setara dengan -maret=mips32r6.
-mips64
Setara dengan -maret=mips64.
-mips64r2
Setara dengan -maret=mips64r2.
-mips64r3
Setara dengan -maret=mips64r3.
-mips64r5
Setara dengan -maret=mips64r5.
-mips64r6
Setara dengan -maret=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 dan -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
'like' -fPIC dan -fpik. 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 --dengan-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-mengambang
Gunakan instruksi koprosesor floating-point.
-msoft-mengapung
Jangan gunakan instruksi koprosesor floating-point. Menerapkan floating-point
perhitungan menggunakan panggilan perpustakaan sebagai gantinya.
-mno-mengambang
Setara dengan -msoft-mengapung, 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-mengambang 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.
-mmengambang ganda
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.
-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.
-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.
-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 --dengan-llsc dan --tanpa-llsc masing.
--dengan-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-mikromips
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-sim32
Asumsikan (jangan berasumsi) bahwa semua simbol memiliki nilai 32-bit, terlepas dari yang dipilih
ABI. Opsi ini berguna dalam kombinasi dengan -mabi=64 dan -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.
-mlokal-sdata
-mno-lokal-sdata
Perpanjang (jangan perpanjang) -G perilaku ke data lokal juga, seperti variabel statis
di C -mlokal-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-lokal-sdata. Anda
mungkin juga ingin membangun perpustakaan besar dengan -mno-lokal-sdata, sehingga perpustakaan
meninggalkan lebih banyak ruang untuk program utama.
-mextern-sdata
-mno-ekstern-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-ekstern-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, -mlokal-sdata dan -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-lokal-sdata dan -mno-ekstern-sdata.
-data tertanam
-mno-data tertanam
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 -data tertanam.
-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-dapat dibaca=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
R4650ISA.
-mimadd
-mno-imad
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.
-bingung-gila
-mno-menyatu-madd
Aktifkan (nonaktifkan) penggunaan instruksi penggandaan-akumulasi titik-mengambang, ketika mereka
tersedia. Standarnya adalah -bingung-gila.
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-perbaiki-24k
Mengatasi errata 24K E48 (kehilangan data di toko saat isi ulang). Solusinya
diimplementasikan oleh assembler bukan oleh GCC.
-mfix-r4000
-mno-perbaiki-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-perbaiki-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-perbaiki-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-perbaiki-r10000
adalah default sebaliknya.
-mfix-rm7000
-mno-perbaiki-rm7000
Mengatasi kesalahan "dmult"/"dmultu" RM7000. Solusinya diimplementasikan oleh
assembler bukan oleh GCC.
-mfix-vr4120
-mno-perbaiki-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-perbaiki-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-fungsi
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-sinkronisasi
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-sinkronisasi, 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-alamat
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-alamat.
MMIX Opsi
Opsi ini ditentukan untuk MMIX:
-mlibfungsi
-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-keluar-tunggal
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 SETLLB dan Lcc instruksi jika targetnya adalah
AM33 atau nanti. Ini adalah default. Opsi ini mendefinisikan makro praprosesor
"__SETLB__".
-mnosetlb
Jangan izinkan kompiler untuk menghasilkan SETLLB 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 kotak moxie-*-*
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 dan 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-reg
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-ukuran blok=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 -fpik 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-volatil
-mcache-volatil
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".
-kustom-penginapan=N
-mno-kustom-penginapan
Masing-masing -kustom-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, fmax
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
com.frdxhi, com.frdxlo
Baca sebagian besar atau paling sedikit (masing-masing) bagian signifikan dari X dan simpan di dest.
teman
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
-kustom-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 -kustom-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, -lkecilc, 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-mengapung
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-bawaan
Gunakan pola "movmemhi" sebaris untuk menyalin memori. Ini adalah default.
-mbsalinan
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=MU 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 dan 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-keras-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=tipe_cpu mengesampingkan spesifikasi opsi ini. Kita
merekomendasikan Anda menggunakan -mcpu=tipe_cpu 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.
-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.
-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.
-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=tipe_cpu
Atur tipe arsitektur, penggunaan register, dan parameter penjadwalan instruksi untuk
jenis mesin tipe_cpu. Nilai yang didukung untuk tipe_cpu 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.
-mcpu opsi secara otomatis mengaktifkan atau menonaktifkan opsi berikut:
-maltivec -mfprnd -mhard-mengambang -mmfcrf -banyak -mpopcntb -mpopcntd -mpowerpc64
-mpowerpc-gpopt -mpowerpc-gfxopt -mengambang tunggal -mmengambang ganda -simple-fpu -mstring
-mmulhw -mdlmzb -mmfpgpr -mvsx -mkripto -mdirect-pindah -mpower8-fusi
-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,
'like' -mcpu=970 -mno-altivec.
Pada AIX, -maltivec dan -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=tipe_cpu
Atur parameter penjadwalan instruksi untuk jenis mesin tipe_cpu, tapi jangan disetel
jenis arsitektur atau penggunaan register, sebagai -mcpu=tipe_cpu melakukan. Nilai yang sama untuk
tipe_cpu 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 dan ld.jadi 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.jadi 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 dan -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 dan -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.
-mkripto
-mno-kripto
Aktifkan penggunaan (nonaktifkan) fungsi bawaan yang memungkinkan akses langsung ke
instruksi kriptografi yang ditambahkan dalam versi 2.07 dari PowerPC ISA.
-mdirect-pindah
-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-fusi
-mno-power8-fusi
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.
-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-reg-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-reg-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-reg-sf dan
-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-jumlah-dalam-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 dan
-mno-jumlah-dalam-toc Pilihan. -mno-fp-in-toc mencegah GCC menempatkan floating-point
konstanta di TOC dan -mno-jumlah-dalam-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-mengapung
-mhard-mengambang
Menghasilkan kode yang tidak menggunakan (menggunakan) set register floating-point. Perangkat lunak
emulasi floating-point disediakan jika Anda menggunakan -msoft-mengapung pilihan, dan lulus
opsi ke GCC saat menautkan.
-mengambang tunggal
-mmengambang ganda
Menghasilkan kode untuk operasi floating-point presisi tunggal atau ganda.
-mmengambang ganda 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 -mmengambang ganda -simple-fpu),
sp_penuh (setara dengan -mengambang tunggal), Dan dp_penuh (setara dengan -mmengambang ganda).
-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.
-mperbarui
-mno-perbarui
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-perbarui, 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.
-bingung-gila
-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 -bingung-gila 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-selaras
-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-selaras, struktur disejajarkan dengan batas 1 byte dan berukuran 1 byte.
-mno-ketat-selaras
-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 -mrelokasi-lib.
-mrelokasi kode menyelaraskan tumpukan ke batas 8-byte.
-mrelokasi-lib
-mno-relokasi-lib
Seperti -mrelokasi, -mrelokasi-lib menghasilkan bagian ".fixup" untuk memungkinkan statis
executable untuk dipindahkan pada saat run time, tapi -mrelokasi-lib tidak menggunakan
perataan tumpukan yang lebih kecil dari -mrelokasi. Objek dikompilasi dengan -mrelokasi-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.
-besar
-mbig-endian
Pada Sistem V.4 dan sistem PowerPC tertanam, kompilasi kode untuk prosesor secara besar-
modus endian. NS -mbig-endian pilihannya sama dengan -besar.
-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.
simpan_ke_muat
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.
mengelompokkan kembali_tepat
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 dan -meabi Pilihan.
-mcall-sysv-noeabi
Tentukan keduanya -mcall-sysv dan -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-gratisbsd
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-kembali
Kembalikan semua struktur dalam memori (seperti yang ditentukan oleh AIX ABI).
-msvr4-struct-kembali
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, tidak ada-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=ibmlongganda
Ubah ABI saat ini untuk menggunakan double-panjang presisi panjang IBM. Ini adalah PowerPC
Opsi ABI SYSV 32-bit.
-mabi=ieeelongganda
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 dan
bahwa perpustakaan C standar adalah libsim.a dan 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 dan libc.a.
-gila
Pada sistem PowerPC tertanam, asumsikan bahwa modul startup disebut crt0.o dan
perpustakaan C standar adalah libads.a dan libc.a.
-pisau kuning
Pada sistem PowerPC tertanam, asumsikan bahwa modul startup disebut crt0.o dan
perpustakaan C standar adalah libyka.a dan 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=sistemv
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=sistemv opsi tidak sesuai dengan -mrelokasi .
-msdata=standar
-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=sistemv.
-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-ganti nama
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-resep
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 dan -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-resep.
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-vektorisasi dan
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.
-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
-tidak tahu
Mengaktifkan (-fpu) atau menonaktifkan (-tidak tahu) 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 dan RX200 perangkat keras seri dan spesifik RX610 CPU. Standarnya adalah
RX600.
Satu-satunya perbedaan antara RX600 dan RX610 adalah bahwa RX610 tidak mendukung
instruksi "MVTIPL".
RX200 seri tidak memiliki unit titik-mengambang perangkat keras dan sebagainya -tidak tahu 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-ukuran konstan=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-daftar=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-daftar=4 dan -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 dan zSeri Opsi
Ini adalah -m opsi yang ditentukan untuk arsitektur S/390 dan zSeries.
-mhard-mengambang
-msoft-mengapung
Gunakan (jangan gunakan) instruksi floating-point perangkat keras dan register untuk floating-
operasi titik. Kapan -msoft-mengapung ditentukan, berfungsi dalam libgcc.a digunakan untuk
melakukan operasi floating-point. Kapan -mhard-mengambang ditentukan, kompiler
menghasilkan instruksi floating-point IEEE. Ini adalah default.
-mhard-dfp
-mno-keras-dfp
Gunakan (jangan gunakan) instruksi titik-mengambang desimal perangkat keras untuk
operasi floating-point. Kapan -mno-keras-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 dan -mhard-mengambang tidak didukung. Untuk membangun
penggunaan kernel linux -msoft-mengapung.
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 dan -mhard-mengambang tidak didukung. Untuk membangun
penggunaan kernel linux -msoft-mengapung.
Standarnya adalah tidak menggunakan tata letak tumpukan yang dikemas.
-msmall-eksekutif
-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-jejak
-mno-tpf-jejak
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
OS TPF.
-bingung-gila
-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-ukuran bingkai=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-penjaga=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,pasca-setengah kata
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 * pasca-setengah kata 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.
-mmak
Aktifkan penggunaan instruksi multi-akumulasi. Dinonaktifkan secara default.
-skor5
Tentukan SCORE5 sebagai arsitektur target.
-skor5u
Tentukan SCORE5U dari arsitektur target.
-skor7
Tentukan SCORE7 sebagai arsitektur target. Ini adalah default.
-skor7d
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.
-mrenesa
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 -mrenesa 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 -mode pengguna 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 -mode pengguna 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*".
lembut-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.
lembut-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*.
keras-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
lembut-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.
-mode pengguna
-mno-mode pengguna
Jangan izinkan (izinkan) kompiler menghasilkan kode mode istimewa. Menentukan
-mode pengguna juga menyiratkan -mno-inline-ic_invalidate jika kode sebaris tidak akan berfungsi
dalam mode pengguna. -mode pengguna adalah default ketika targetnya adalah "sh*-*-linux*". jika
targetnya adalah SH1* atau SH2* -mode pengguna tidak berpengaruh, karena tidak ada mode pengguna.
-multibiaya=jumlah
Tetapkan biaya untuk mengasumsikan untuk penginapan berlipat ganda.
-mdiv=strategi
Tetapkan strategi pembagian yang akan digunakan untuk operasi pembagian bilangan bulat. Untuk SHmedia
strategi 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 strategi 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 dan inv:panggilan strategi pembagian, dan
kompiler masih mengharapkan set register input/output/clobbered yang sama seperti ini
pilihan tidak hadir.
-rentang tetap=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
Asumsikan 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.
-bingung-gila
-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 -bingung-gila 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 dan -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 dan -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 -fpik or -fPIC.
Sakelar ini didukung selain yang di atas pada Solaris 2:
-pthread
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 -pthread.
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.
-mdatar
-mno-datar
Dengan -mdatar, 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-datar (default), kompiler menghasilkan instruksi simpan/pulihkan (kecuali
untuk fungsi daun). Ini adalah mode operasi normal.
-mfpu
-mhard-mengambang
Menghasilkan output yang berisi instruksi floating-point. Ini adalah default.
-mno-fpu
-msoft-mengapung
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 dan sparclite-*-*
memang menyediakan perangkat lunak dukungan floating-point.
-msoft-mengapung 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-mengapung 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=tipe_cpu
Atur set instruksi, set register, dan parameter penjadwalan instruksi untuk
jenis mesin tipe_cpu. Nilai yang didukung untuk tipe_cpu adalah v7, cypress, v8, superparc,
hipersparc, leon, leon3, leon3v7, sparclite, f930, f934, sparclite86x, butiran kecil,
tsc701, v9, ultrasparc, ultrasparc3, Niagara, niagara2, niagara3 dan 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=sparclit, 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=tipe_cpu
Atur parameter penjadwalan instruksi untuk jenis mesin tipe_cpu, tapi jangan disetel
set instruksi atau set register yang menjadi opsi -mcpu=tipe_cpu tidak.
Nilai yang sama untuk -mcpu=tipe_cpu dapat digunakan untuk -mtune=tipe_cpu, tapi satu-satunya
nilai yang berguna adalah nilai yang memilih implementasi CPU tertentu. Yaitu
cypress, superparc, hipersparc, leon, leon3, leon3v7, f930, f934, sparclite86x,
tsc701, ultrasparc, ultrasparc3, Niagara, niagara2, niagara3 dan 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 dan -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-tumpukan-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-relokasi
-meror-relokasi
Loader untuk SPU tidak menangani relokasi dinamis. Secara default, GCC memberikan
kesalahan ketika menghasilkan kode yang membutuhkan relokasi dinamis. -mno-kesalahan-relokasi
menonaktifkan kesalahan, -mwarn-relokasi 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.
-mkecil-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".
-rentang tetap=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
dan 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-tidak
-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-nop. 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 ubinx.
-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 ubinpro.
-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
dan -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-mengapung
-mhard-mengambang
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-mengambang
Menghasilkan kode yang berisi instruksi floating-point. Ini adalah default.
-mno-fpu
-msoft-mengapung
Hasilkan kode yang berisi panggilan perpustakaan untuk floating-point.
-msoft-mengapung 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-mengapung untuk ini
untuk bekerja.
-mcpu=tipe_cpu
Atur set instruksi, set register, dan parameter penjadwalan instruksi untuk
jenis mesin tipe_cpu. Nilai yang didukung untuk tipe_cpu adalah mcm, gr5 dan 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=tipe_cpu
Atur parameter penjadwalan instruksi untuk jenis mesin tipe_cpu, tapi jangan disetel
set instruksi atau set register yang menjadi opsi -mcpu=tipe_cpu akan.
-mode-msv
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-kembali-kode
Kembalikan kode kondisi VMS dari "utama". Defaultnya adalah mengembalikan kondisi gaya POSIX
(misalnya kesalahan) kode.
-mdebug-utama=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 dan -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.
aku bernafas
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, -pesan 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-mengapung
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-mengapung 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-sejajarkan-ganda
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.
-ambang-data-besar=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.
-mstackpenyelarasan ulang
Sejajarkan kembali tumpukan saat masuk. Pada x86, -mstackpenyelarasan ulang 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, -batas-tumpukan-mpreferred=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 -batas-tumpukan-mpreferred=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
-batas-tumpukan-mincoming 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
-batas-tumpukan-mpreferred=2.
-mmmx
-pesan
-msse2
-msse3
-mssse3
-msse4
-msse4a
-msse4.1
-msse4.2
-mavx
-mavx2
-mavx512f
-mavx512pf
-mavx512er
-mavx512cd
-msha
-maes
-mpclmul
-mclfushopt
-mfsgsbase
-mrdnd
-mf16c
-mfma
-mfma4
-mno-fma4
-mprefetchwt1
-mxop
-mlwp
-m3d sekarang
-mpopcnt
-mabm
-mbmi
-mbmi2
-mlzcnt
-mfxsr
-mxsimpan
-mxsaveopt
-mxsavec
-mxsave
-mrtm
-mtbm
-mmpx
-mmtunggux
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 -tahu-
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 dan -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 Lainnya bawaan untuk rincian.
-mm bergerak
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 dan
-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-resep.
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-vektorisasi dan
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.
-mthread
Mendukung penanganan pengecualian thread-safe di MinGW. Program yang mengandalkan thread-safe
penanganan pengecualian harus mengkompilasi dan menautkan semua kode dengan -mthread pilihan. Kapan
kompilasi, -mthread mendefinisikan -D_MT; saat menautkan, itu tertaut di pembantu utas khusus
perpustakaan -lmingwthrd yang membersihkan data penanganan pengecualian per-utas.
-mno-sejajarkan-stringop
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
membuka gulungan_loop
Perluas menjadi loop sebaris.
panggilan lib
Selalu gunakan panggilan perpustakaan.
-mmemcpy-strategi=strategi
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. strategi 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=strategi
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 dan -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-lewati-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-tidak selaras-toko
Membagi beban dan penyimpanan tidak selaras AVX 32-byte.
-mstack-pelindung-penjaga=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.
-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-gambar dan -mdynamic-no-pic Pilihan.
-mx32 opsi set "int", "panjang", dan tipe pointer ke 32 bit, dan menghasilkan kode
untuk arsitektur x86-64.
-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:
-konsol
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-menyenangkan-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-dapat dieksekusi
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-selaras-umum
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.
-bingung-gila
-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.
-mserialisasi-volatil
-mno-serialisasi-volatil
Saat opsi ini diaktifkan, GCC menyisipkan instruksi "MEMW" sebelum memori "volatile"
referensi untuk menjamin konsistensi berurutan. Standarnya adalah -mserialisasi-volatil.
penggunaan -mno-serialisasi-volatil untuk menghilangkan instruksi "MEMW".
-mforce-no-foto
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.
-mteks-bagian-literal
-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 -mteks-bagian-literal, 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.
-mlongcall
-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-penggunaan kembali=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;
ke dalam 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-kembali
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-kembali sakelar tidak kompatibel dengan biner
dengan kode yang dikompilasi dengan -freg-struct-kembali mengalihkan. Gunakan untuk menyesuaikan diri dengan non-
antarmuka biner aplikasi default.
-freg-struct-kembali
Kembalikan nilai "struct" dan "union" dalam register jika memungkinkan. Ini lebih efisien
untuk struktur kecil dari -fpcc-struct-kembali.
Jika Anda tidak menentukan keduanya -fpcc-struct-kembali maupun -freg-struct-kembali, GCC default ke
konvensi mana pun yang standar untuk target. Jika tidak ada konvensi standar,
GCC default ke -fpcc-struct-kembali, 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-kembali sakelar tidak kompatibel dengan biner
dengan kode yang dikompilasi dengan -fpcc-struct-kembali 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 -umum, 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
-umum 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.
-fpik
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 -fpik tidak bekerja; di dalam
kasus itu, kompilasi ulang dengan -fPIC sebagai gantinya. (Maksimum ini adalah 8k di SPARC, 28k di
AArch64 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 AArch64, 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 -fpik dan -fPIC, tetapi menghasilkan kode independen posisi
hanya dapat ditautkan ke dalam executable. Biasanya opsi ini digunakan ketika -pai GCC
pilihan digunakan selama menghubungkan.
-fpie dan -fPIE keduanya mendefinisikan makro "__pie__" dan "__PIE__". Macro memiliki
nilai 1 untuk -fpie dan 2 untuk -fPIE.
-fno-plt
Jangan gunakan PLT untuk panggilan fungsi eksternal dalam kode posisi-independen. Sebagai gantinya,
memuat alamat panggilan di situs panggilan dari GOT dan bercabang ke sana. Ini mengarah ke lebih banyak
kode efisien dengan menghilangkan stub PLT dan mengekspos beban GOT ke pengoptimalan. Pada
arsitektur seperti 32-bit x86 di mana stub PLT mengharapkan penunjuk GOT secara spesifik
register, ini memberikan lebih banyak kebebasan alokasi register ke compiler. Pengikatan malas
membutuhkan PLT: dengan -fno-plt semua simbol eksternal diselesaikan pada waktu buka.
Atau, atribut fungsi "noplt" dapat digunakan untuk menghindari PLT untuk panggilan ke
fungsi eksternal tertentu dengan menandai fungsi tersebut dengan atribut ini.
Selain itu, beberapa target juga mengonversi panggilan ke fungsi yang ditandai ke
tidak menggunakan PLT untuk menggunakan GOT sebagai gantinya untuk kode independen non-posisi.
-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
-fpik 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-batas-daftar=reg
-fstack-batas-simbol =sim
-fno-batas tumpukan
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 dan
-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 -fpik tidak diberikan pada baris perintah.
Default tanpa -fpik is inisial-exec; dengan -fpik 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 dan 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 ketik_info node disatukan antara DSO.
Gambaran umum tentang teknik-teknik ini, manfaatnya dan cara menggunakannya ada di
<http://gcc.gnu.org/wiki/Visibility>.
-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 dan -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_SEMUA
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 dan 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.
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.
LC_MESSAGES variabel lingkungan menentukan bahasa yang akan digunakan dalam diagnostik
pesan.
Jika LC_SEMUA variabel lingkungan diatur, itu menimpa nilai LC_CTYPE dan
LC_MESSAGES; jika tidak, LC_CTYPE dan 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.
KOMPILER_PATH
Nilai dari KOMPILER_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.
CPAT
C_INCLUDE_PATH
CPLUS_INCLUDE_PATH
OBJC_INCLUDE_PATH
Nilai setiap variabel adalah daftar direktori yang dipisahkan oleh karakter khusus, banyak
'like' 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.
CPAT 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 CPAT 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
dan -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 aarch64-linux-gnu-gcc online menggunakan layanan onworks.net