InggrisPerancisSpanyol

Ad


favorit OnWorks

g++-4.7 - Online di Cloud

Jalankan g++-4.7 di penyedia hosting gratis OnWorks melalui Ubuntu Online, Fedora Online, emulator online Windows, atau emulator online MAC OS

Ini adalah perintah g++-4.7 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=standar]
[-g] [-hal] [-Otingkat]
[-Wmemperingatkan...] [-bengah]
[-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.

Grafik 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 akan -fno-foo. Manual ini hanya mendokumentasikan satu dari
dua bentuk ini, 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] -fdump-go-spec=fillet

C Bahasa Opsi
-ansi -std=standar -fgnu89-sebaris -aux-info nama file
-fungsi-bera-tanpa parameter-variadik -fno-asm -fno-bawaan -fno-bawaan-fungsi
-dihosting -berdiri bebas -fopenmp -fms-ekstensi -fplan9-ekstensi -trigraf
-tidak-terintegrasi-cpp -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 -fkonservasi-ruang
-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 -fstats -ftemplate-kedalaman=n
-fno-threadsafe-statis -sekering-cxa-atexit -fno-lemah -nostdinc++ -fno-default-sebaris
-fvisibilitas-sebaris-tersembunyi -fvisibilitas-ms-compat -Wabi -Wkonversi-null
-Wctor-dtor-privasi -Wdelete-non-virtual-dtor -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 -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]
-fno-diagnostik-tampilkan-opsi

peringatan Opsi
-fsintaks-saja -fmax-kesalahan=n -bengah -pedantic-error -w -Wextra -Dinding
-Pakaian -Pengembalian-Waggregate -Batas perang -Wno-atribut
-Wno-builtin-makro-didefinisikan ulang -Wc++-kompat -Wc++11-kompat -Wcast-sejajarkan -Kualifikasi Wcast
-Wchar-langganan -Wclobbed -komentar -Wkonversi -Wcoverage-ketidakcocokan -Wno-cpp
-Tidak digunakan lagi -Wno-deprecated-deklarasi -Wdisabled-optimasi -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-y2k
-Wframe-lebih besar-dari=len -Wno-free-nonheap-objek -Melompat-meleset-init
-Kualifikasi Wignored -Simplisit -Deklarasi-fungsi-simplisit -Wimplisit-int
-Winit-sendiri -winline -Wmungkin-tidak diinisialisasi -Tidak ada pemain-ke-penunjuk
-Wno-tidak valid-offsetof -Winvalid-pch -Lebih besar-dari=len -Pengoptimalan loop-Wunsafe
-Wlogis-op -panjang-panjang - Utama -Wmungkin-tidak diinisialisasi -Wmissing-kawat gigi
-Penginisialisasi bidang-Wmissing -Wmissing-format-atribut -Tidak ada-termasuk-dir
-Wno-mudflap -Wno-multichar -Tidak apa-apa -Wno-melimpah -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
-Tipe Wreturn -Titik-urutan -Bayangan -Wsign-bandingkan -Wsign-konversi
-Wstack-pelindung -Penggunaan tumpukan=len -Alias ​​ketat -aliasing-wstrict=n
-Meluap-wstrict -Meluap-kencang=n -Wsuggest-atribut=[murni|const|arah utara]
-Switch -Wswitch-default -Witch-enum -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
-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 -fdbg-cnt-daftar -fdbg-cnt=melawan-
daftar nilai -fdisable-ipa-nama_pass -fdisable-rtl-nama_pass -fdisable-rtl-lulus-
nama=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-vcg -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-mudflap[-n]
-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-pohon-vrp[-n] -ftree-vektorizer-verbose=n -fdump-tree-storeccp[-n]
-fdump-final-insns=fillet -fbandingkan-debug[=opts] -fbandingkan-debug-detik
-feliminate-dwarf2-dup -femininate-tipe-debug-yang tidak digunakan
-feliminate-unused-debug-simbol -femit-class-debug-selalu -bisa-bisa-jenis-lulus
-bisa-bisa-jenis-lulus=daftar jangkauan -fdebug-jenis-bagian -fmem-laporan -fpre-ipa-mem-laporan
-fpost-ipa-mem-laporan -fprofile-arc -Frandom-seed=tali -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+ -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
-falign-fungsi[=n] -falign-melompat[=n] -falign-label[=n] -falign-loop[=n]
-fasosiatif-matematika -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 -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
-fif-konversi -fif-konversi2 -finddirect-inlining -finline-fungsi
-finline-fungsi-dipanggil-sekali -batas-akhir=n -finline-kecil-fungsi -fipa-cp
-fipa-cp-klon -fipa-matrix-reorg -fipa-pta -fipa-profil -fipa-murni-const
-fipa-referensi -fira-algoritma=algoritma -fira-wilayah=wilayah -fira-loop-tekanan
-fno-ira-bagikan-simpan-slot -fno-ira-bagikan-tumpahan-slot -fira-verbose=n -fivopts
-fkeep-inline-fungsi -fkeep-statis-consts -floop-blok -floop-ratakan
-floop-pertukaran -floop-strip-tambang -floop-paralelisasi-semua -flto
-flto-kompresi-level -flto-partisi=ganggang -flto-laporan -fmerge-semua-konstanta
-fmerge-konstanta -fmodulo-jadwal -fmodulo-sched-allow-regmoves -fmove-loop-invarian
fmudflap -fmudflapir -fmudflapth -fno-cabang-hitung-reg -fno-default-sebaris
-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-daftar-pindah
-foptimize-saudara-panggilan -fpartial-sebaris -fpeel-loop -predictive-commoning
-fprefetch-loop-array -fprofile-koreksi -fprofil-dir=path -fprofile-hasilkan
-fprofile-hasilkan=path -fprofile-penggunaan -fprofile-gunakan=path -fprofile-nilai
-freciprocal-matematika -bebas -fregmove -rename-register -freorder-blok
-freorder-blok-dan-partisi -freorder-fungsi -frerun-cse-setelah-loop
-freschedule-modulo-scheduled-loop -frounding-matematika -fsched2-use-superblok
-fsched-tekanan -fsched-spec-load -fsched-spec-load-berbahaya
-fsched-stalled-insns-dep[=n] -fsched-stalled-insns[=n] -fsched-grup-heuristik
-fsched-kritis-jalur-heuristik -fsched-spec-insn-heuristik -fsched-rank-heuristik
-fsched-last-insn-heuristik -fsched-dep-hitung-heuristik -fschedule-insns
-fschedule-insns2 -fsection-jangkar -penjadwalan selektif -penjadwalan selektif2
-fsel-sched-pipelining -fsel-sched-pipelining-outer-loop -fshrink-bungkus
-fsignaling-nans -fsingle-presisi-konstan -fsplit-ivs-in-unroller
-fsplit-tipe lebar -fstack-pelindung -fstack-pelindung-semua -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-parallelize-loop=n
-ftree-pra -ftree-partial-pra -ftree-pta -ftree-reassoc -ftree-tenggelam -ftree-sra
-ftree-switch-konversi -ftree-tail-merge -ftree-ter -ftree-vect-loop-versi
-ftree-vektorisasi -ftree-vrp -menyenangkan-pada-waktu -funroll-all-loop -funroll-loop
-pengoptimalan loop yang menyenangkan optimasi -funsafe-matematika -funswitch-loop
-fvariable-ekspansi-in-unroller -fvect-biaya-model -fvpt -fweb -seluruh-program -fwpa
-sekering-ld=linker -sekering-linker-plugin --param nama=nilai -O -O0 -O1 -O2 -O3 -Os
-cepat

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

Assembler pilihan
-Wa,Option -Xassembler Option

Linker Opsi
nama-file-objek -lperpustakaan -nostartfiles -nodefaultlibs -nostdlib -pai -rdinamis -s
-statis -statis-libgcc -statis-libstdc++ -bersama -bersama-libgcc -simbolis -T naskah
-Wl,Option -Xlinker Option -u simbol

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

Mesin Tergantung Opsi
AAArch64 Opsi -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 -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

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
-kata-kata-little-endian -mfloat-abi=nama -mfpe -mfp16-format=nama -ibu jari-interwork
-mno-jempol-interwork -mcpu=nama -maret=nama -mfpu=nama -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 -mcirrus-fix-invalid-insns
-mno-cirrus-fix-invalid-insns -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

AVR Opsi -mmcu=mcu -maklumat-args -biaya-cabang=biaya -mcall-prolog -mint8
-mno-interupsi -santai -mshort-panggilan -mtrict-X -mtiny-tumpukan

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 -malpha-sebagai -mgas -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

Desember Alfa/VMS Opsi -mvms-kembali-kode -mdebug-utama=awalan -mmalloc64

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 -bionik -mandroid -tno-android-cc -tno-android-ld

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

HPPA Opsi -maret=tipe arsitektur -big-switch -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-besar-sakelar -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

i386 dan x86-64 Opsi -mtune=tipe cpu -maret=tipe cpu -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 -maes -mpclmul
-mfsgsbase -mrdnd -mf16c -mfma -msse4a -m3d sekarang -mpopcnt -mabm -mbmi -mtbm -mfma4
-mxop -mlzcnt -mbmi2 -mlwp -mthread -mno-sejajarkan-stringop -minline-semua-stringops
-minline-stringops-dinamis -mstringop-strategi=ganggang -push-args
-maklumat-keluar-args -m128bit-panjang-ganda -m96bit-panjang-ganda -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 -ambang-data-besar=num -msse2avx
-mfentry -m8bit-idiv -mavx256-split-unaligned-load -mavx256-split-tidak selaras-toko

i386 dan x86-64 Windows Opsi -konsol -mcygwin -mno-cygwin -mdll
-mnop-menyenangkan-dllimport -mthread -municode -mwin32 -mwindows -fno-set-stack-dapat dieksekusi

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

IA-64/VMS Opsi -mvms-kembali-kode -mdebug-utama=awalan -mmalloc64

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
-mxl-mode-model aplikasi

MIPS Opsi -ITU -EB -maret=lengkungan -mtune=lengkungan -mips1 -mips2 -mips3 -mips4
-mips32 -mips32r2 -mips64 -mips64r2 -mips16 -mno-mips16 -mflip-mips16
-minterlink-mips16 -mno-interlink-mips16 -mabi=abi -mabicall -mno-abicall
-mshared -mno-dibagikan -mplt -mno-plt -mxgot -mno-xgot -mgp32 -mgp64 -mfp32
-mfp64 -mhard-mengambang -msoft-mengapung -mengambang tunggal -mmengambang ganda -mdsp -Mno-dsp
-mdspr2 -mno-dspr2 -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
-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-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

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

RS / 6000 dan PowerPC Opsi -mcpu=tipe cpu -mtune=tipe cpu -mcmodel=kode-model -kekuatan
-mno-kekuatan -kekuatan2 -mno-kekuatan2 -mpowerpc -mpowerpc64 -mno-powerpc -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
-mnew-mnemonik -mnemonik-cetakan -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

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

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 -menyesuaikan-membuka gulungan
-pengalamatan-mindexed -mgettrbiaya=jumlah -mpt-tetap -maklumat-keluar-args
-minvalid-simbol -msoft-atom -biaya-cabang=num -mcbranchdi -mcmpeqdi -bingung-gila
-pura-pura-cmove

Solaris 2 Opsi -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 -mv8plus -mno-v8plus -mvis -mno-vis -mvis2 -mno-vis2
-mvis3 -mno-vis3 -mfmaf -mno-fmaf -mpopc -mno-popc -mfix-at697f

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

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 -big-switch

VAX Opsi -mg -mgnu -munix

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

x86-64 Opsi Lihat Opsi i386 dan x86-64.

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
-funwind-tabel -fasynchronous-unwind-tabel -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-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 -ftrapv
-fwrapv -fbounds-cek -fvisibilitas -fstrict-volatile-bitfields

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 akan keluar dengan kode 1 jika ada fase kompiler
mengembalikan kode pengembalian yang tidak berhasil. Jika Anda menentukan -pass-kode keluar, yang gcc program
sebaliknya akan kembali dengan kesalahan numerik tertinggi yang dihasilkan oleh fase apa pun yang kembali
indikasi kesalahan. Frontend C, C++, dan Fortran mengembalikan 4, jika internal
kesalahan kompiler 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 terlepas dari jenis output apa pun
sedang diproduksi, apakah itu file yang dapat dieksekusi, file objek, file assembler atau
kode C yang telah diproses sebelumnya.

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 akan 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
option), lalu opsi baris perintah yang tidak memiliki dokumentasi yang terkait dengannya
juga akan 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
Ini akan menampilkan semua opsi pengoptimalan yang didukung oleh kompiler.

peringatan
Ini akan menampilkan semua opsi yang mengontrol pesan peringatan yang dihasilkan oleh
penyusun.

target
Ini akan menampilkan opsi spesifik target. tidak seperti --target-bantuan Option
namun, opsi target spesifik dari linker dan assembler tidak akan
ditampilkan. Ini karena alat tersebut saat ini tidak mendukung ekstensi
--bantuan= sintaks.

params
Ini akan menampilkan nilai yang dikenali oleh --param .

bahasa
Ini akan menampilkan opsi yang didukung untuk bahasa, Di mana bahasa adalah namanya
salah satu bahasa yang didukung dalam versi GCC ini.

umum
Ini akan menampilkan 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
compiler berikut ini dapat digunakan:

--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 dengan
begitu banyak sehingga tidak ada yang bisa ditampilkan. Namun satu kasus di mana itu berhasil adalah ketika
salah satu kelasnya adalah target. Jadi misalnya untuk menampilkan semua target-spesifik
opsi optimasi berikut ini dapat digunakan:

--help=target,pengoptimal

Grafik --bantuan= pilihan dapat diulang pada baris perintah. Setiap penggunaan berturut-turut akan
tampilkan kelas opsi yang diminta, lewati yang sudah ada
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 akan memanggil semua subprogram dari gcc bawah gdb --argumen, dengan demikian seruan dari Cc1
akan 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.

-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
memperlakukan .c, .h dan .i file sebagai file sumber C++ alih-alih file sumber C kecuali -x is
digunakan, dan secara otomatis menentukan tautan ke pustaka C++. Program ini juga
berguna 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.

Grafik -ansi opsi tidak menyebabkan program non-ISO ditolak secara serampangan. Untuk
itu, -bengah 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 "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. Dengan menentukan standar dasar,
compiler akan menerima semua program yang mengikuti standar tersebut dan yang menggunakan GNU
ekstensi yang tidak bertentangan dengannya. Sebagai contoh, -std=c90 mematikan tertentu
fitur GCC yang tidak kompatibel dengan ISO C90, seperti "asm" dan "typeof"
kata kunci, tetapi bukan ekstensi GNU lain yang tidak memiliki arti dalam ISO C90, seperti
menghilangkan istilah tengah dari ekspresi "?:". Di sisi lain, dengan menentukan GNU
dialek standar, semua fitur yang didukung kompiler diaktifkan, bahkan ketika itu
fitur mengubah arti dari standar dasar dan beberapa program yang sangat ketat
mungkin ditolak. Standar tertentu digunakan oleh -bengah untuk mengidentifikasi yang
fitur adalah ekstensi GNU yang diberikan versi standar itu. Sebagai contoh -std=gnu90
-bengah akan memperingatkan tentang gaya C++ // komentar, sambil -std=gnu99 -bengah akan
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. Perhatikan bahwa standar ini belum sepenuhnya didukung; Lihat
<http://gcc.gnu.org/gcc-4.7/c99status.html> untuk informasi lebih lanjut. Nama c9x
dan iso9899:199x tidak digunakan lagi.

c11
c1x
iso9899: 2011
ISO C11, revisi 2011 dari standar ISO C. Dukungan tidak lengkap dan
eksperimental. Nama c1x sudah ditinggalkan.

gnu90
gnu89
Dialek GNU dari ISO C90 (termasuk beberapa fitur C99). Ini adalah default untuk C
kode.

gnu99
gnu9x
Dialek GNU dari ISO C99. Ketika ISO C99 sepenuhnya diimplementasikan di GCC, ini akan
menjadi default. Nama gnu9x sudah ditinggalkan.

gnu11
gnu1x
Dialek GNU dari ISO C11. Dukungan tidak lengkap dan eksperimental. Nama gnu1x
sudah ditinggalkan.

c++98
Standar ISO C++ 1998 plus amandemen. Sama dengan -ansi untuk kode C++.

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

c++11
Standar ISO C++ 2011 ditambah amandemen. Dukungan untuk C++ 11 masih
eksperimental, dan dapat berubah dengan cara yang tidak kompatibel di rilis mendatang.

gnu++11
dialek GNU -std=c++11. Dukungan untuk C++11 masih eksperimental, dan dapat 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.
Opsi ini diterima dan diabaikan oleh GCC versi 4.1.3 hingga tetapi tidak termasuk
4.3. Di GCC versi 4.3 dan yang lebih baru, ini mengubah perilaku GCC 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 pertama kali didukung di GCC 4.3. Opsi ini 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 berlangsung di lingkungan yang dihosting. Ini menyiratkan -fbuiltin.
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 berlangsung di 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.

-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 v3.0http://www.openmp.org/>. Pilihan ini
menyiratkan -utas, dan dengan demikian hanya didukung pada target yang memiliki dukungan untuk
-utas.

-fgnu-tm
Ketika pilihan -fgnu-tm ditentukan, kompiler akan 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
.

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

-tidak-terintegrasi-cpp
Melakukan kompilasi dalam dua lintasan: preprocessing dan kompilasi. Opsi ini memungkinkan
pengguna memberikan "cc1", "cc1plus", atau "cc1obj" melalui -B pilihan. Pengguna menyediakan
langkah kompilasi kemudian dapat menambahkan langkah preprocessing tambahan setelah normal
preprocessing tetapi sebelum kompilasi. Standarnya adalah menggunakan cpp integrated terintegrasi
(cpp internal)

Semantik opsi ini akan berubah jika "cc1", "cc1plus", dan "cc1obj" digabungkan.

-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++;
tetapi Anda juga dapat menggunakan sebagian besar opsi kompiler GNU terlepas dari bahasa apa Anda
program masuk. Misalnya, Anda dapat 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. Versi 2 adalah versi C++ ABI yang pertama
muncul di G++ 3.4. Versi 1 adalah versi C++ ABI yang pertama kali muncul di
G++ 3.2. Versi 0 akan selalu menjadi versi yang paling sesuai dengan C++
spesifikasi ABI. Oleh karena itu, ABI yang diperoleh menggunakan versi 0 akan berubah sebagai ABI
bug diperbaiki.

Standarnya adalah versi 2.

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.

Lihat juga -Wabi.

-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 menentukan bahwa "operator baru" hanya akan mengembalikan 0 jika dideklarasikan melemparkan(),
dalam hal ini kompiler akan selalu memeriksa nilai kembalian bahkan tanpa ini
pilihan. Dalam semua kasus lain, ketika "operator baru" memiliki pengecualian yang tidak kosong
spesifikasi, kehabisan memori ditandai dengan melempar "std::bad_alloc". Lihat juga
yang baru (tidak membuang).

-fkonservasi-ruang
Masukkan variabel global yang tidak diinisialisasi atau diinisialisasi run-time ke dalam segmen umum, sebagai
C tidak. Ini menghemat ruang dalam executable dengan biaya tidak mendiagnosis duplikat
definisi. Jika Anda mengkompilasi dengan flag ini dan program Anda secara misterius crash
setelah "main()" selesai, Anda mungkin memiliki objek yang dihancurkan dua kali
karena dua definisi digabungkan.

Opsi ini tidak lagi berguna pada sebagian besar target, sekarang dukungan telah ditambahkan untuk
memasukkan variabel ke dalam BSS tanpa membuatnya menjadi umum.

-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, dan versi G++ sebelumnya
4.1 selalu bekerja seperti itu. Namun, dalam ISO C++ fungsi teman yang tidak
dideklarasikan dalam lingkup terlampir hanya dapat ditemukan menggunakan pencarian yang bergantung pada argumen.
Opsi ini menyebabkan teman disuntikkan seperti pada rilis sebelumnya.

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
pembuatan produksi, seperti mendefinisikan NDEBUG. Ini tidak memberikan izin kode pengguna
untuk membuang pengecualian yang melanggar spesifikasi pengecualian; kompiler akan
masih mengoptimalkan berdasarkan spesifikasi, jadi melempar pengecualian yang tidak terduga akan
menghasilkan perilaku yang tidak terdefinisi.

-untuk-lingkup
-fno-untuk-lingkup
If -untuk-lingkup ditentukan, ruang lingkup variabel dideklarasikan dalam a untuk-init-pernyataan
terbatas pada untuk loop 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.

Default jika tidak ada flag yang diberikan untuk mengikuti standar, tetapi untuk mengizinkan dan memberikan a
peringatan untuk kode gaya lama yang seharusnya tidak valid, atau memiliki perbedaan
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 optimasi akan
membutuhkan set instantiasi eksplisit yang sama.

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

-fms-ekstensi
Nonaktifkan peringatan bertele-tele 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 akan membuat fungsi lebih kecil
karena pembersihan EH untuk variabel tersebut dapat dioptimalkan. semantik
efeknya adalah pengecualian yang dikeluarkan dari fungsi dengan pengecualian seperti itu
spesifikasi akan 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 akan memungkinkan beberapa kode yang tidak sesuai untuk dikompilasi.

-fno-cantik-templat
Ketika pesan kesalahan mengacu pada spesialisasi templat fungsi, kompilator
biasanya akan 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 akan 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, menggunakan -fno-cantik-templat akan 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++ (dinamis_cast dan Ketik). Jika tidak
gunakan bagian-bagian bahasa itu, Anda dapat menghemat ruang dengan menggunakan bendera ini. Catatan
bahwa penanganan pengecualian menggunakan informasi yang sama, tetapi akan menghasilkannya sesuai kebutuhan.
Grafik dinamis_cast operator masih dapat digunakan untuk gips yang tidak memerlukan run-time
ketik informasi, yaitu melemparkan ke "void *" atau ke kelas dasar yang tidak ambigu.

-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-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 akan berfungsi jika C . Anda
perpustakaan mendukung "__cxa_atexit".

-fno-gunakan-cxa-get-exception-ptr
Jangan gunakan rutinitas runtime "__cxa_get_exception_ptr". Ini akan 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 di 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 akan 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 yang berbeda: itu
deklarasi 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 akan berbeda, jadi
mengubah satu tidak akan mengubah yang lain; dan pointer itu ke anggota fungsi yang ditentukan
di objek bersama yang berbeda mungkin tidak membandingkan sama. Ketika bendera ini diberikan, itu adalah
pelanggaran ODR untuk mendefinisikan jenis dengan nama yang sama secara berbeda.

-fno-lemah
Jangan gunakan dukungan simbol yang lemah, meskipun disediakan oleh linker. Secara default, G++
akan menggunakan simbol yang lemah jika tersedia. Opsi ini hanya ada untuk pengujian, dan
tidak boleh digunakan oleh pengguna akhir; itu akan 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++:

-fno-default-sebaris
Jangan berasumsi inline untuk fungsi yang didefinisikan di dalam ruang lingkup kelas.
Perhatikan bahwa fungsi-fungsi ini akan memiliki hubungan seperti fungsi sebaris; mereka tidak akan melakukannya
menjadi inline secara default.

-Wabi (C, Objective-C, C++ dan Objective-C++ saja)
Peringatkan ketika G++ menghasilkan kode yang mungkin tidak kompatibel dengan vendor-netral
C++ ABI. Meskipun upaya telah dilakukan untuk memperingatkan tentang semua kasus seperti itu, ada
mungkin beberapa kasus yang tidak diperingatkan, meskipun G++ sedang menghasilkan
kode yang tidak kompatibel. Mungkin juga ada kasus di mana peringatan dikeluarkan meskipun
kode yang dihasilkan akan 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.

Ketidakcocokan yang diketahui dalam -fabi-versi=2 (default) meliputi:

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

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

Ini diperbaiki di -fabi-versi=3.

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

Mangling berubah menjadi -fabi-versi=4.

Ketidakcocokan yang diketahui dalam -fabi-versi=1 meliputi:

· Penanganan tail-padding yang salah untuk bidang bit. G++ mungkin mencoba mengemas data
ke dalam byte yang sama sebagai kelas dasar. Sebagai contoh:

struct A { kekosongan virtual f(); int f1 : 1; };
struct B : publik A { int f2 : 1; };

Dalam hal ini, G++ akan menempatkan "B::f2" ke dalam byte yang sama dengan "A::f1"; kompiler lainnya
tidak akan. Anda dapat menghindari masalah ini dengan secara eksplisit mengisi "A" sehingga ukurannya
adalah kelipatan dari ukuran byte pada platform Anda; yang akan menyebabkan G++ dan lainnya
compiler untuk tata letak "B" identik.

· Penanganan tail-padding yang salah untuk basis virtual. G++ tidak menggunakan ekor
padding saat meletakkan basis virtual. Sebagai contoh:

struct A { virtual void f(); karakter c1; };
struct B { B(); karakter c2; };
struct C : publik A, virtual publik B {};

Dalam hal ini, G++ tidak akan menempatkan "B" ke dalam tail-padding untuk "A"; lainnya
kompiler akan. Anda dapat menghindari masalah ini dengan menambahkan "A" secara eksplisit sehingga
size adalah kelipatan dari keselarasannya (mengabaikan kelas dasar virtual); itu akan
menyebabkan G++ dan kompiler lain menata letak "C" secara identik.

· Penanganan bidang bit yang salah dengan lebar yang dinyatakan lebih besar dari lebarnya
jenis yang mendasarinya, ketika bidang bit muncul dalam gabungan. Sebagai contoh:

serikat U { int i : 4096; };

Dengan asumsi bahwa "int" tidak memiliki 4096 bit, G++ akan membuat gabungan terlalu kecil
dengan jumlah bit dalam "int".

· Kelas kosong dapat ditempatkan pada offset yang salah. Sebagai contoh:

struktur A {};

struktur B {
A A;
kekosongan maya f();
};

struct C : publik B, publik A {};

G++ akan menempatkan kelas dasar "A" dari "C" pada offset bukan nol; itu harus ditempatkan
pada offset nol. G++ secara keliru percaya bahwa anggota data "A" dari "B" adalah
sudah di offset nol.

· Nama fungsi template yang tipenya melibatkan "typename" atau template template
parameter dapat rusak secara tidak benar.

templat
batal f(nama tipe Q::X) {}

templat kelas Q>
batal f(nama ketik Q ::X) {}

Instansiasi template ini mungkin salah.

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

· Untuk SYSV/x86-64, saat melewati union dengan long double, diubah menjadi pass in
memori seperti yang ditentukan dalam psABI. Sebagai contoh:

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

"Union U" akan selalu diingat.

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

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

-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 melemparkan() or tidakkecuali)
tetapi diketahui oleh kompiler untuk tidak pernah melempar pengecualian.

-Wnon-virtual-dtor (C++ dan Objective-C++ saja)
Peringatkan ketika sebuah kelas memiliki fungsi virtual dan destruktor non-virtual yang dapat diakses, di
kasus mana yang mungkin tetapi tidak aman untuk menghapus turunan dari kelas turunan
melalui pointer ke kelas dasar. Peringatan ini juga diaktifkan jika -Weffc++ is
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 akan mengatur ulang inisialisasi anggota untuk i dan j untuk mencocokkan
perintah deklarasi anggota, memancarkan peringatan untuk efek itu. Peringatan ini adalah
diaktifkan oleh -Dinding.

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++, Kedua Edisi buku:

· Butir 11: Tentukan konstruktor salinan dan operator penugasan untuk kelas dengan
memori yang dialokasikan secara dinamis.

· Butir 12: Lebih suka inisialisasi daripada penugasan di konstruktor.

· Butir 14: Jadikan destruktor virtual di kelas dasar.

· Butir 15: Minta "operator=" mengembalikan referensi ke *this.

· Butir 23: Jangan mencoba mengembalikan referensi ketika Anda harus mengembalikan objek.

Juga peringatkan tentang pelanggaran pedoman gaya berikut dari Scott Meyers' More
Efektif C + + buku:

· Butir 6: Bedakan antara bentuk penambahan dan pengurangan awalan dan akhiran
operator.

· Butir 7: Jangan pernah membebani "&&", "||", atau ",".

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 juga 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
konstanta pointer bukan pointer nol, dijamin ukurannya sama dengan a
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 (dinamis_cast, static_cast, reinterpretasi_cast, dan const_cast) adalah
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();

akan 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++ akan mencoba untuk mempertahankan unsignedness, tetapi standar mengamanatkan
perilaku saat ini.

struktur A {
operator int();
A& operator = (int);
};

utama ()
{
a, b;
a = b;
}

Dalam contoh ini, G++ akan mensintesis default A& operator = (konst A&);, sedangkan di depan
akan menggunakan yang ditentukan pengguna operator =.

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++, tetapi Anda juga dapat menggunakan sebagian besar GNU yang tidak bergantung pada bahasa
pilihan kompiler. Misalnya, Anda dapat mengkompilasi file "some_class.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, akan 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 akan 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 "- (void) .cxx_destruct" khusus yang akan menjalankan semua destruktor default tersebut,
dalam urutan terbalik.

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

-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),
compiler akan 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, ...). Opsi yang dijelaskan di bawah ini dapat digunakan untuk mengontrol
algoritma pemformatan pesan diagnostik, misalnya berapa banyak karakter per baris, seberapa sering
informasi lokasi sumber harus dilaporkan. Saat ini, hanya front end C++ yang bisa
menghormati pilihan ini. Namun diharapkan, dalam waktu dekat, bahwa bagian depan yang tersisa
ujungnya akan dapat mencernanya dengan benar.

-fmessage-panjang =n
Cobalah untuk memformat pesan kesalahan agar sesuai dengan baris about n karakter. Itu
default adalah 72 karakter untuk g ++ dan 0 untuk sisa ujung depan yang didukung oleh
GCC. Jika n adalah nol, maka tidak ada pembungkusan garis yang akan dilakukan; setiap pesan kesalahan akan muncul
pada satu baris.

-fdiagnostics-show-location=sekali
Hanya bermakna dalam mode pembungkusan garis. Menginstruksikan reporter pesan diagnostik untuk
memancarkan sekali informasi lokasi sumber; 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.

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

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 dimulai -W, sebagai contoh -Simplisit
untuk meminta peringatan pada deklarasi implisit. Masing-masing opsi peringatan khusus ini juga
memiliki awalan bentuk negatif -Tidak- untuk mematikan peringatan; Misalnya, -Wno-implisit.
Manual ini hanya mencantumkan satu dari dua formulir, mana saja yang bukan default. Untuk selanjutnya,
opsi khusus bahasa juga merujuk ke C + + Dialek Opsi dan Tujuan-C dan
Objektif-C++ Dialek Opsi.

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

-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 yang jarang akan membutuhkan -ansi atau -std opsi yang menentukan versi yang diperlukan
dari ISO C). Namun, tanpa opsi ini, ekstensi GNU tertentu dan C tradisional dan
Fitur C++ juga didukung. Dengan opsi ini, mereka ditolak.

-bengah 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 -bengah 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
-bengah. Kami tidak memiliki rencana untuk mendukung fitur seperti itu dalam waktu dekat.

Dimana standar ditentukan dengan -std mewakili dialek GNU yang diperluas dari C, seperti
gnu90 or gnu99, ada yang sesuai mendasarkan standar, versi ISO C di mana
dialek GNU yang diperluas didasarkan. Peringatan dari -bengah 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
Seperti -bengah, kecuali bahwa kesalahan dihasilkan daripada peringatan.

-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 (hanya dengan -O2) -Wc++11-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 -Tidak apa-apa -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:

· Sebuah 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++ saja) Subscripting array yang telah dideklarasikan daftar.

· (C++ only) Mengambil alamat dari variabel yang telah dideklarasikan daftar.

· (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 -fprofile-gen dan -fprofile-penggunaan, file dengan
umpan balik profil dapat gagal untuk mencocokkan file sumber dan GCC tidak dapat menggunakan profil
informasi umpan balik. 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;
}

compiler akan melakukan seluruh perhitungan dengan "ganda" karena floating-
titik literal adalah "ganda".

-format
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 -bengah digunakan dengan -format,
peringatan akan diberikan tentang fitur format yang tidak ada dalam versi standar yang dipilih (tetapi
bukan untuk format "strfmon", karena tidak ada dalam versi standar C apa pun).

Sejak -format juga memeriksa argumen format nol untuk beberapa fungsi, -format
juga menyiratkan -Tidak apa-apa.

-format termasuk dalam -Dinding. Untuk kontrol lebih lanjut atas beberapa aspek pemeriksaan format,
opsi -Wformat-y2k, -Wno-format-ekstra-args, -Wno-format-nol-panjang,
-Wformat-nonliteral, -Wformat-keamanan, dan -Format=2 tersedia, tetapi tidak
termasuk dalam -Dinding.

CATATAN: Di Ubuntu 8.10 dan versi yang lebih baru, opsi ini diaktifkan secara default untuk C, C++,
ObjC, ObjC++. Untuk menonaktifkan, gunakan -Format=0.

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

-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 "scanf"
fungsi format. Standar C menetapkan bahwa argumen tersebut 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 akan menekan
peringatan jika argumen yang tidak digunakan semuanya adalah pointer, karena Spesifikasi Unix Tunggal
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.

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

-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 formatnya
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 dapat ditambahkan ke
-Wformat-keamanan yang tidak termasuk dalam -Wformat-nonliteral.)

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 peringatan format
dengan -Format=0. Untuk membuat peringatan keamanan format menjadi fatal, tentukan
-Kesalahan=format-keamanan.

-Format=2
Aktifkan -format plus pemeriksaan format tidak termasuk dalam -format. Saat ini setara dengan
-format -Wformat-nonliteral -Wformat-keamanan -Wformat-y2k.

-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 akan memperingatkan tentang "i" yang tidak diinisialisasi hanya dalam cuplikan berikut
ketika -Winit-sendiri telah ditentukan:

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

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

-Wmissing-kawat gigi
Peringatkan jika penginisialisasi agregat atau serikat pekerja tidak sepenuhnya dikurung. Berikut ini
contoh, inisialisasi untuk a tidak sepenuhnya dikurung, tapi itu untuk b sepenuhnya
tanda kurung.

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 memperingatkan jika perbandingan seperti x<=y<=z muncul; ini setara dengan (x<=y ? 1 : 0)
<= z, yang merupakan interpretasi yang berbeda dari notasi matematika biasa.

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 akan mengeluarkan peringatan ketika bendera ini
ditentukan. Untuk menghilangkan peringatan, tambahkan kurung kurawal eksplisit di sekitar "jika" terdalam
pernyataan sehingga tidak mungkin "lain" bisa menjadi milik "jika" terlampir. NS
kode yang dihasilkan akan terlihat seperti ini:

{
jika sebuah)
{
jika (b)
fo ();
lain
batang ();
}
}

Juga peringatkan untuk penggunaan berbahaya dari ?: dengan menghilangkan ekstensi GNU operan tengah. Kapan
kondisi di ?: operator adalah ekspresi boolean, nilai yang dihilangkan adalah
selalu 1. Seringkali pengguna mengharapkannya menjadi nilai yang dihitung di dalam kondisi
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++ mendefinisikan 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++.

-Tipe Wreturn
Peringatkan setiap kali suatu fungsi didefinisikan dengan tipe pengembalian yang defaultnya adalah "int". Juga
peringatkan tentang pernyataan "pengembalian" apa pun tanpa nilai kembali 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 "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.

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

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

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

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

-Wunused-local-typedefs (C, Objective-C, C++ dan Objective-C++ saja)
Peringatkan ketika typedef yang didefinisikan secara lokal dalam suatu fungsi tidak digunakan.

-Parameter yang tidak digunakan
Peringatkan setiap kali parameter fungsi tidak digunakan selain dari deklarasinya.

Untuk menekan peringatan ini gunakan terpakai atribut.

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

-Wunused-nilai
Peringatkan setiap kali pernyataan menghitung hasil yang secara eksplisit tidak digunakan. Menekan
peringatan ini memberikan ekspresi yang tidak digunakan untuk membatalkan. Ini termasuk pernyataan-ekspresi
atau sisi kiri dari ekspresi koma yang tidak mengandung efek samping. Untuk
contoh, ekspresi seperti x[i, j] akan menyebabkan peringatan, sementara x[(kosong)i,j] akan
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-
statis const anggota 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
peringatan akan 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 bukan variabel
diinisialisasi, kompiler akan mengeluarkan peringatan jika tidak dapat membuktikan yang tidak diinisialisasi
jalur tidak terjadi pada waktu berjalan. Peringatan ini dibuat opsional karena GCC tidak
cukup pintar untuk melihat semua alasan mengapa kode itu 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, pengguna 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 akan dikeluarkan untuk pragma yang tidak diketahui di
file header sistem. 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 -aliasing-wstrict=n, dengan n=3.

Level 1: Paling agresif, cepat, paling tidak akurat. Mungkin berguna saat level lebih tinggi
jangan peringatkan tetapi -fstrict-aliasing masih merusak kode, karena 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
ketika memperkirakan berapa banyak iterasi yang akan dibutuhkan sebuah loop, khususnya ketika
menentukan apakah loop akan dieksekusi sama sekali.

-Wstrict-overflow=1
Peringatkan tentang kasus-kasus yang meragukan dan mudah dihindari. Misalnya: "x +
1 > x"; dengan -fstrict-overflow, kompiler akan menyederhanakan ini menjadi 1. Level ini
of -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" akan disederhanakan menjadi "x > 0".

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

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

-Wsuggest-atribut=[murni|const|arah utara]
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. Ini
analisis membutuhkan opsi -fipa-murni-const, yang diaktifkan secara default di -O dan
lebih tinggi. Tingkat optimasi yang lebih tinggi meningkatkan akurasi analisis.

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

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

Trampolin adalah bagian kecil dari data atau kode yang dibuat saat dijalankan
waktu di tumpukan ketika alamat fungsi bersarang diambil, dan
digunakan untuk memanggil fungsi bersarang secara tidak langsung. Untuk beberapa target, itu
hanya terdiri dari data dan karenanya tidak memerlukan perlakuan khusus. Tetapi,
untuk sebagian besar target, itu terdiri dari kode dan karenanya membutuhkan tumpukan
dapat dieksekusi 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 akan 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 tidak
dalam ISO C.

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

· Makro seperti fungsi yang muncul tanpa argumen.

· Operator unary plus.

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

· Sebuah fungsi yang dideklarasikan eksternal dalam satu blok dan kemudian digunakan setelah akhir dari
blok.

· Pernyataan "saklar" memiliki operan bertipe "panjang".

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

· Tipe ISO dari konstanta bilangan bulat memiliki lebar atau tanda tangan yang berbeda dari
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 konflik 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 fixed/floating-point dan sebaliknya. NS
tidak adanya prototipe ini saat mengkompilasi dengan C tradisional akan menyebabkan masalah serius
masalah. Ini adalah bagian dari peringatan konversi yang mungkin, 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 akan
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 dan tidak didukung oleh versi GCC sebelum GCC 3.0.

-Wundef
Peringatkan jika pengidentifikasi yang tidak ditentukan dievaluasi dalam #jika Directive.

-Wno-endif-label
Jangan peringatkan setiap kali #lain atau #berakhir jika diikuti oleh teks.

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

-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 stack 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)
Menonaktifkan peringatan tentang penentu lebar format "printf" / "scanf" non-ISO "I32",
"I64", dan "I" digunakan pada target Windows tergantung pada runtime MS, saat Anda menggunakan
opsi -format dan -bengah tanpa ekstensi gnu.

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

-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 < or >=. Peringatan ini juga diaktifkan oleh
-Wextra.

-Pemeran-fungsi-buruk (C dan Objective-C saja)
Peringatkan setiap kali panggilan fungsi dilemparkan ke jenis yang tidak cocok. Misalnya, peringatkan jika
"int malloc()" dilemparkan ke "apa saja *".

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

-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 *" akan mendapat peringatan. Ini
peringatan akan 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. Jika tidak, itu hanya akan menjadi 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 untuk variabel yang mungkin diubah oleh longjmp or garpu. Peringatan ini juga
diaktifkan oleh -Wextra.

-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 akan pernah menggunakan operator konversi tipe: konversi ke "batal", the
jenis yang sama, kelas dasar atau referensi untuk mereka. Peringatan tentang konversi antara
bilangan bulat yang ditandatangani dan tidak ditandatangani dinonaktifkan secara default di C++ kecuali -Wsign-konversi
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.

-Badan-kosong
Peringatkan jika ada benda kosong di dalam if, lain or do sementara penyataan. Peringatan ini adalah
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.

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

-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-atribut
Jangan peringatkan jika "__attribute__" yang tidak terduga digunakan, seperti atribut yang tidak dikenal,
atribut fungsi yang diterapkan ke variabel, dll. Ini tidak akan 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. Tujuannya adalah untuk
mendeteksi fungsi global yang tidak dideklarasikan dalam file header.

-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
template 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 akan 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 akan memicu peringatan:

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

Peringatan ini termasuk dalam -Wextra. Untuk mendapatkan yang lain -Wextra peringatan tanpa yang ini,
menggunakan -Wextra -Tidak ada inisialisasi bidang yang hilang.

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

GCC juga akan memperingatkan tentang definisi fungsi yang mungkin menjadi kandidat untuk "format"
atribut. Sekali lagi, ini hanya kandidat yang mungkin. GCC akan 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.

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

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

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

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. Anda
hanya ingin melakukan ini jika Anda menggunakan skema normalisasi lainnya (seperti
"D"), karena jika tidak, Anda dapat dengan mudah membuat bug yang secara harfiah tidak mungkin
lihat.

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", akan ditampilkan seperti "n" biasa
yang telah ditempatkan dalam superscript. ISO 10646 mendefinisikan: NFKC normalisasi
skema untuk mengubah semua ini menjadi bentuk standar juga, dan GCC akan memperingatkan jika Anda
kode tidak dalam NFKC jika Anda menggunakan -Wnormalisasi=nfkc. Peringatan ini sebanding dengan
peringatan tentang setiap pengenal yang mengandung huruf O karena mungkin bingung
dengan angka 0, dan bukan default, tetapi mungkin berguna sebagai pengkodean lokal
konvensi jika lingkungan pemrograman tidak dapat diperbaiki untuk menampilkan ini
karakter 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.

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

-winline
Peringatkan jika suatu fungsi tidak dapat disejajarkan dan dinyatakan sebagai sebaris. Bahkan dengan ini
opsi, kompiler tidak akan 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 offsetof makro ke tipe non-POD. Berdasarkan
standar ISO C++ 1998, menerapkan offsetof ke tipe non-POD tidak ditentukan. Di dalam
implementasi C++ yang ada, namun, offsetof biasanya memberikan hasil yang berarti
bahkan ketika diterapkan pada jenis jenis non-POD tertentu. (Seperti sederhana struktur bahwa
gagal menjadi tipe POD hanya karena memiliki konstruktor.) Bendera ini untuk
pengguna yang sadar bahwa mereka sedang menulis kode non-portabel dan yang dengan sengaja
memilih untuk mengabaikan peringatan tentang hal itu.

Pembatasan pada offsetof dapat dilonggarkan dalam 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 panjang panjang jenis digunakan. Ini diaktifkan oleh salah satu dari -bengah 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 bertele-tele, atau sintaks alternatif GNU
ketika dalam mode ISO C99 bertele-tele. Ini adalah default. Untuk menghambat pesan peringatan, gunakan
-Wno-variadic-makro.

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

-Wvla
Peringatkan jika array panjang variabel digunakan dalam kode. -Wno-vla akan mencegah
-bengah 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
kode Anda terlalu besar atau terlalu rumit; GCC akan menolak untuk mengoptimalkan program ketika
optimasi 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
-bengah, yang dapat dinonaktifkan dengan -Wno-pointer-tanda.

-Wstack-pelindung
Opsi ini hanya aktif ketika -fstack-pelindung aktif. Ini memperingatkan tentang fungsi
yang tidak akan terlindung dari penghancuran tumpukan.

-Wno-mudflap
Menekan peringatan tentang konstruksi yang tidak dapat diinstrumentasi oleh -fmudflap.

-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 -bengah, dan dapat dinonaktifkan dengan -Wno-overlength-string.

-Konstanta-float-Wunsuffixed (C dan Objective-C saja)
GCC akan mengeluarkan peringatan untuk setiap konstanta mengambang yang tidak memiliki akhiran. Kapan
digunakan bersama dengan -Wsystem-header itu akan memperingatkan tentang konstanta seperti itu di header sistem
file. Ini dapat berguna saat menyiapkan kode untuk digunakan dengan "FLOAT_CONST_DECIMAL64"
pragma dari ekstensi titik-mengambang desimal ke C99.

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 akan membuat debugger lain mogok atau menolak untuk membaca program. jika kamu mau
untuk mengontrol dengan pasti 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 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.

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

-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 akan meningkatkan ukuran informasi debug
sebanyak faktor dua.

-fno-debug-jenis-bagian
Secara default saat menggunakan DWARF v4 atau DIE tipe yang lebih tinggi akan dimasukkan ke dalamnya sendiri
bagian .debug_types alih-alih menjadikannya bagian dari bagian .debug_info. Dia
lebih efisien untuk menempatkannya di bagian comdat terpisah karena tautannya akan menjadi
mampu menghapus duplikat. Tetapi tidak semua konsumen DWARF mendukung bagian .debug_types
belum.

-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). Ini adalah
format yang digunakan oleh DBX pada IRIX 6. Nilai versi dapat berupa 2, 3 atau 4; NS
versi default adalah 2.

Perhatikan bahwa dengan DWARF versi 2 beberapa port memerlukan, dan akan selalu menggunakan, beberapa port non-
konflik DWARF 3 ekstensi 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.

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

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

-gvms
Menghasilkan informasi debug dalam format debug VMS (jika didukung). Ini adalah
format yang digunakan oleh DEBUG pada sistem 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, tetapi tidak ada informasi tentang variabel lokal dan tidak ada nomor baris.

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 mengabaikan opsi ini akan menghasilkannya,
atau nyalakan di level 2 sebaliknya. Posisi argumen ini di baris perintah
tidak masalah, itu berlaku setelah semua opsi lain diproses, dan itu terjadi
hanya sekali, tidak peduli berapa kali diberikan. Ini terutama dimaksudkan untuk digunakan
dengan -fbandingkan-debug.

-fdump-final-insns[=fillet]
Buang representasi internal akhir (RTL) ke fillet. Jika argumen opsionalnya adalah
dihilangkan (atau jika fillet adalah "."), nama file dump akan 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 akan ditolak GCC sebagai opsi yang tidak valid dalam
kompilasi aktual (bukan pra-pemrosesan, perakitan, atau penautan). Untuk mendapatkan hanya
peringatan, 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 DWARF2 dengan menghilangkan informasi duplikat tentang masing-masing
simbol. Opsi ini hanya masuk akal saat membuat informasi debug DWARF2
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 akan dihasilkan oleh kompiler informasi debug.
Tujuannya adalah untuk mengurangi duplikat informasi debug struct antara objek yang berbeda
file dalam program yang sama.

Opsi ini adalah versi terperinci dari -femit-struct-debug-dikurangi dan
-femit-struct-debug-base saja, yang akan 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 akan legal, 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
akan 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 tipe yang dideklarasikan dalam foo.c dan foo.h akan memiliki informasi debug, tapi
jenis yang dideklarasikan di header lain tidak akan. Nilai sys berarti 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.

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

-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", "berbatas".

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 akan 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_MAXdengan demikian dbg_cnt()
mengembalikan true selalu kecuali batas atas diatur oleh opsi ini. misalnya Dengan
-fdbg-cnt=dce:10,tail_call:0 dbg_cnt(dce) akan mengembalikan true hanya untuk 10 pertama
doa

-bisa-bisa-jenis-lulus
-fdisable-jenis-lulus=daftar jangkauan
Ini adalah serangkaian opsi debug yang digunakan untuk menonaktifkan/mengaktifkan secara eksplisit
lolos optimasi. Untuk pengguna kompiler, opsi reguler untuk mengaktifkan/menonaktifkan pass
harus digunakan sebagai gantinya.

*<-fdisable-ipa-lulus>
Nonaktifkan ipa pass 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 rtl pass 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 a
usus besar. Rentang ini inklusif di kedua ujungnya. Jika rentangnya sepele, jumlahnya
pasangan dapat disederhanakan sebagai nomor tunggal. Jika simpul cgraph fungsi itu uid is
jatuh 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-tree-lulus>
*<-fdisable-tree-lulus=daftar jangkauan>
Nonaktifkan pass pohon lulus. Lihat -fdisable-rtl untuk deskripsi opsi
argumen.

*<-bisa-ipa-lulus>
Aktifkan ipa pass 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.

*<-dapat-rtl-lulus>
*<-dapat-rtl-lulus=daftar jangkauan>
Aktifkan rtl pass lulus. Lihat -fdisable-rtl untuk deskripsi argumen opsi dan
contoh.

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

# 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
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. Perhatikan bahwa nomor pass adalah
dihitung secara statis saat pass didaftarkan ke manajer pass. Jadi
penomoran tidak terkait dengan urutan dinamis eksekusi operan. Secara khusus,
pass yang dipasang oleh plugin dapat memiliki angka lebih dari 200 meskipun dieksekusi dengan cukup
awal. nama sampah dihasilkan dari nama file output, jika secara eksplisit
ditentukan dan itu bukan yang dapat dieksekusi, jika tidak, itu adalah nama dasar dari sumbernya
mengajukan. Sakelar ini mungkin memiliki efek yang berbeda ketika -E digunakan untuk preprocessing.

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 sub-
eliminasi ekspresi lolos.

-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-remove
Buang setelah register move pass.

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

-fdump-rtl-lihat
Buang setelah penghapusan ekstensi tanda.

-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
-fdump-rtl-split1, -fdump-rtl-split2, -fdump-rtl-split3, -fdump-rtl-split4 dan
-fdump-rtl-split5 mengaktifkan 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 yang digunakan. Panjang setiap instruksi juga dicetak.

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

-dv Untuk masing-masing file dump lain yang ditunjukkan (-fdump-rtl-lulus), buang a
representasi grafik aliran kontrol yang sesuai untuk dilihat dengan VCG untuk
file.pass.vcg.

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

-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 akan menyebabkan penghitung dijumlahkan ke seluruh unit kompilasi sementara
-detail akan membuang setiap acara saat pass menghasilkannya. Default dengan no
pilihannya adalah menjumlahkan penghitung untuk setiap fungsi yang dikompilasi.

-fdump-pohon-saklar
-fdump-pohon-saklar-Pilihan
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.
Jika -Pilihan bentuk digunakan, Pilihan adalah daftar dari - opsi terpisah yang mengontrol
rincian tempat pembuangan. Tidak semua opsi berlaku untuk semua dump; mereka itu
tidak berarti akan 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
Menghambat pembuangan anggota lingkup atau badan fungsi hanya karena itu
ruang lingkup telah tercapai. Hanya buang barang-barang tersebut ketika mereka dapat dijangkau secara langsung oleh
beberapa jalan lain. Saat membuang pohon yang dicetak cantik, opsi ini menghambat pembuangan
tubuh struktur kontrol.

mentah Cetak representasi mentah dari pohon. Secara default, pohon cukup dicetak menjadi
representasi seperti C.

rincian
Aktifkan dump yang lebih mendetail (tidak dihormati oleh setiap opsi dump).

statistik
Aktifkan dumping berbagai statistik tentang pass (tidak dihormati oleh setiap dump
pilihan).

blok
Aktifkan menampilkan batas blok dasar (dinonaktifkan di dump mentah).

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.

semua Aktifkan semua opsi, kecuali mentah, ramping, bertele-tele dan lineno.

Pembuangan pohon berikut dimungkinkan:

asli
Buang sebelum pengoptimalan berbasis pohon apa pun, untuk file.asli.

dioptimalkan
Buang setelah semua optimasi berbasis pohon, untuk file.dioptimalkan.

gimbal
Buang setiap fungsi sebelum dan sesudah gimplifikasi diteruskan ke file. Berkas
nama dibuat dengan menambahkan .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.

vcg Buang grafik aliran kontrol dari setiap fungsi ke file dalam format VCG. Berkas
nama dibuat dengan menambahkan .vcg ke nama file sumber. Perhatikan bahwa jika file
berisi lebih dari satu fungsi, file yang dihasilkan tidak dapat digunakan secara langsung oleh
VCG. Anda harus memotong dan menempelkan grafik setiap fungsi ke dalam grafiknya sendiri yang terpisah
berkas dulu.

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.

lumpur
Buang setiap fungsi setelah menambahkan instrumentasi mudflap. Nama file dibuat oleh
menambahkan .mudflap 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.

-ftree-vektorizer-verbose=n
Opsi ini mengontrol jumlah output debug yang dicetak oleh vectorizer. Ini
informasi ditulis ke kesalahan standar, kecuali -fdump-pohon-semua or -fdump-pohon-vektor
ditentukan, dalam hal ini output ke file daftar dump biasa, .vet. Forum
n=0 tidak ada informasi diagnostik yang dilaporkan. Jika n=1 vectorizer melaporkan setiap loop
yang divektorkan, dan jumlah total loop yang divektorkan. Jika n= 2
vectorizer juga melaporkan loop non-vektorisasi yang melewati fase analisis pertama
(vect_analyze_loop_form) - yaitu dapat dihitung, paling dalam, bb tunggal, masuk/keluar tunggal
loop. Ini adalah tingkat verbositas yang sama yang -fdump-pohon-vektor-statistik menggunakan. Lebih tinggi
tingkat verbositas berarti lebih banyak informasi yang dibuang untuk setiap loop yang dilaporkan, atau sama
jumlah informasi yang dilaporkan untuk lebih banyak loop: jika n=3, model biaya vectorizer
informasi dilaporkan. Jika n=4, informasi terkait penyelarasan ditambahkan ke
laporan. Jika n=5, informasi terkait referensi data (misalnya ketergantungan memori, memori
access-patterns) ditambahkan ke laporan. Jika n=6, vectorizer melaporkan juga non-
loop terdalam vektor yang tidak lulus fase analisis pertama (yaitu, mungkin tidak)
dapat dihitung, atau mungkin memiliki aliran kontrol yang rumit). Jika n=7, vectorizer melaporkan
juga loop bersarang non-vektorisasi. Jika n=8, informasi terkait SLP ditambahkan ke
laporan. Untuk n=9, semua informasi yang dihasilkan oleh vectorizer selama analisisnya
dan transformasi dilaporkan. Ini adalah tingkat verbositas yang sama yang
-fdump-pohon-vektor-detail menggunakan.

-Frandom-seed=tali
Opsi ini menyediakan seed yang digunakan GCC saat menggunakan nomor acak.
Ini digunakan untuk menghasilkan nama simbol tertentu yang harus berbeda di setiap
file yang dikompilasi. Ini juga digunakan untuk menempatkan prangko unik dalam file data cakupan dan
file objek yang menghasilkannya. Anda dapat menggunakan -Frandom-biji pilihan untuk menghasilkan
file objek identik yang dapat direproduksi.

Grafik tali 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 akan 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

akan membuat 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 akan
dibuat dan dipelihara, tetapi dibuang pada akhirnya.

-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 akan mencari --- dan tidak melakukan hal lain.

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 akan 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 melakukan hal lain.

-dumpspec
Cetak spesifikasi bawaan kompiler --- dan jangan lakukan hal lain. (Ini digunakan ketika
GCC sendiri sedang dibangun.)

-femininate-tipe-debug-yang tidak digunakan
Biasanya, saat menghasilkan output DWARF2, GCC akan memancarkan informasi debug untuk semua
jenis yang dideklarasikan dalam unit kompilasi, terlepas dari apakah itu benar-benar atau tidak
digunakan dalam unit kompilasi itu. Terkadang ini berguna, seperti jika, di debugger,
Anda ingin memberikan nilai ke tipe yang sebenarnya tidak digunakan dalam program Anda (tetapi adalah
dideklarasikan). Lebih sering, bagaimanapun, ini menghasilkan sejumlah besar ruang yang terbuang.
Dengan opsi ini, GCC akan menghindari menghasilkan output simbol debug untuk tipe yang
tidak digunakan dalam file sumber yang sedang dikompilasi.

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 -fbandingkan-elimin -fcprop-register -fdce -fdefer-pop -fdelayed-cabang
-fdse -fguess-cabang-probabilitas -fif-konversi2 -fif-konversi -fipa-murni-const
-fipa-profil -fipa-referensi -fmerge-konstanta -fsplit-tipe lebar -free-bit-ccp
-ftree-built-in-call-dce -ftree-ccp -ftree-ch -ftree-copyrename -ftree-dce
-ftree-dominator-memilih -ftree-dse -ftree-forwprop -bebas pohon -ftree-phiprop -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 -optimasi-mahal -fgcse
-fgcse-lm -finline-kecil-fungsi -finddirect-inlining -fipa-sra
-foptimize-saudara-panggilan -fpartial-sebaris -fpeehole2 -fregmove -freorder-blok
-freorder-fungsi -frerun-cse-setelah-loop -fsched-interblock -fsched-spesifikasi
-fschedule-insns -fschedule-insns2 -aliasing ketat -fstrict-overflow
-ftree-switch-konversi -ftree-tail-merge -ftree-pra -ftree-vrp

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-vektorisasi, -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 -ftree-vect-loop-versi

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

Jika Anda menggunakan beberapa -O opsi, dengan atau tanpa nomor level, opsi terakhir adalah
yang efektif.

Pilihan formulir -fbendera tentukan flag yang tidak bergantung pada mesin. Sebagian besar bendera memiliki keduanya
bentuk positif dan negatif; bentuk negatif dari -ffo akan -fno-foo. Di meja
di bawah ini, hanya satu formulir yang terdaftar --- yang biasanya Anda gunakan. Anda bisa mencari
keluar dari bentuk lain 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-default-sebaris
Jangan membuat fungsi anggota sebaris secara default hanya karena mereka didefinisikan di dalam
ruang lingkup kelas (hanya C++). Jika tidak, saat Anda menentukan -O, fungsi anggota didefinisikan
di dalam ruang lingkup kelas dikompilasi sebaris secara default; yaitu, Anda tidak perlu menambahkan inline
di depan nama fungsi anggota.

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

Dimulai dengan GCC versi 4.6, pengaturan default (bila tidak mengoptimalkan ukuran) untuk
Target Linux x32 86-bit dan Darwin x32 86-bit telah diubah menjadi
-fomit-frame-pointer. Default dapat dikembalikan ke -fno-menghilangkan-frame-pointer by
mengkonfigurasi GCC dengan --aktifkan-bingkai-penunjuk opsi konfigurasi.

Diaktifkan di level -O, -O2, -O3, -Os.

-foptimize-saudara-panggilan
Optimalkan panggilan rekursif saudara dan ekor.

Diaktifkan di level -O2, -O3, -Os.

-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
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 akan 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
mengatur bendera ini, tepi anti-ketergantungan tertentu akan dihapus yang akan memicu
generasi reg-bergerak berdasarkan analisis rentang hidup. Pilihan ini adalah
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.

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
masuk ke bagian data. Misalnya, agar executable yang dihasilkan dapat menemukan
awal bagian itu dan/atau membuat asumsi berdasarkan itu.

Standarnya adalah -fzero-inisialisasi-dalam-bss.

-fmudflap -fmudflapth -fmudflapir
Untuk front-end yang mendukungnya (C dan C++), instrumen semua pointer/array berisiko
operasi dereferensi, beberapa fungsi string/heap perpustakaan standar, dan beberapa lainnya
konstruksi terkait dengan uji jangkauan/validitas. Modul yang diinstrumentasi harus
kebal terhadap buffer overflows, penggunaan heap yang tidak valid, dan beberapa kelas C/C++ lainnya
kesalahan pemrograman. Instrumentasi bergantung pada perpustakaan runtime yang terpisah
(libmudflap), yang akan ditautkan ke dalam program jika -fmudflap diberikan pada waktu tautan.
Perilaku run-time dari program yang diinstrumentasi dikendalikan oleh MUDFLAP_OPTIONS
variabel lingkungan. Lihat "env MUDFLAP_OPTIONS=-help a.out" untuk opsinya.

penggunaan -fmudflapth alih-alih -fmudflap untuk mengkompilasi dan menautkan jika program Anda multi-
berulir. Menggunakan -fmudflapir, Selain -fmudflap or -fmudflapth, Jika
instrumentasi harus mengabaikan pembacaan pointer. Ini menghasilkan lebih sedikit instrumentasi (dan
karena itu eksekusi lebih cepat) dan masih memberikan perlindungan terhadap memori langsung
penulisan yang rusak, tetapi memungkinkan pembacaan data yang salah untuk disebarkan dalam suatu program.

-fthread-melompat
Lakukan optimasi di mana kami memeriksa untuk melihat apakah lompatan bercabang ke lokasi di mana
perbandingan lain yang dimasukkan oleh yang pertama ditemukan. Jika demikian, cabang pertama adalah
diarahkan ke tujuan cabang kedua atau titik segera
mengikutinya, tergantung pada apakah kondisinya 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 akan 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 akan mencoba untuk
memindahkan beban yang hanya dimatikan oleh toko ke dalam diri mereka sendiri. Ini memungkinkan loop
berisi urutan beban/penyimpanan untuk diubah menjadi beban di luar loop, dan a
salin/simpan di dalam loop.

Diaktifkan secara default saat gcse diaktifkan.

-fgcse-sm
Ketika -fgcse-sm diaktifkan, pass gerak toko dijalankan setelah kesamaan global
eliminasi subekspresi. Pass ini akan mencoba memindahkan toko dari loop. Kapan
digunakan bersama dengan -fgcse-lm, loop yang berisi urutan pemuatan/penyimpanan dapat berupa
diubah menjadi 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 yang menyenangkan
Jika diberikan, pengoptimal loop akan menganggap bahwa indeks loop tidak meluap, dan bahwa
loop dengan kondisi keluar nontrivial tidak terbatas. Ini memungkinkan jangkauan yang lebih luas
optimasi loop bahkan jika pengoptimal loop itu sendiri tidak dapat membuktikan bahwa ini
asumsi itu valid. Menggunakan -Pengoptimalan loop-Wunsafe, kompiler akan memperingatkan Anda
jika menemukan loop semacam ini.

-lompat silang
Lakukan transformasi lompat silang. Transformasi ini menyatukan kode yang setara dan
simpan 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, maks, atur bendera dan instruksi abs, dan beberapa trik bisa dilakukan
dengan aritmatika standar. Penggunaan eksekusi bersyarat pada chip di mana ia berada
tersedia dikendalikan oleh "if-conversion2".

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.

-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
("-findirect-inlining") dan perambatan konstan antarprosedural (-fipa-cp). Diaktifkan
di tingkat -O2, -O3, -Os.

-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 x86 di level -O2, -O3.

-foptimize-daftar-pindah
-fregmove
Mencoba untuk menetapkan kembali nomor register dalam instruksi pemindahan dan sebagai operan lainnya
instruksi sederhana untuk memaksimalkan jumlah pengikatan register. Ini adalah
sangat membantu pada mesin dengan instruksi dua operan.

Note -fregmove dan -foptimize-daftar-pindah adalah optimasi yang sama.

Diaktifkan di level -O2, -O3, -Os.

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

-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
dari hard register yang tersedia dan sebagai akibatnya register tumpah di register
alokasi.

-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 penjadwalan kedua berlalu.
-fno-sched-stapped-insns berarti tidak ada penginapan yang akan dipindahkan sebelum waktunya,
-fsched-stalled-insns=0 berarti tidak ada batasan 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 akan diperiksa untuk ketergantungan pada yang terhenti
insn yang merupakan kandidat untuk penghapusan prematur dari antrian losmen macet. Ini
memiliki efek hanya selama lulus penjadwalan kedua, dan hanya jika
-fsched-stall-insns digunakan. -fno-jadwal-terhenti-insns-dep adalah setara dengan
-fsched-stalled-insns-dep=0. -fsched-terhenti-insns-dep tanpa nilai adalah setara
untuk -fsched-stalled-insns-dep=1.

-fsched2-use-superblok
Saat menjadwalkan setelah alokasi register, gunakan algoritma penjadwalan superblok.
Penjadwalan superblok memungkinkan pergerakan melintasi batas blok dasar yang menghasilkan lebih cepat
jadwal. Opsi ini bersifat eksperimental, karena tidak semua deskripsi mesin digunakan oleh GCC
model 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 datang sebelum penjadwalan tradisional, jika loop adalah modulo
terjadwal, kami mungkin ingin mencegah agar tiket penjadwalan berikutnya tidak berubah
jadwal, kami menggunakan opsi ini untuk mengontrol 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 sampai salah satu dari -penjadwalan selektif or -penjadwalan selektif2 is
dihidupkan.

-fsel-sched-pipelining-outer-loop
Saat pipelining loop selama penjadwalan selektif, juga loop luar pipa. Ini
opsi tidak berpengaruh sampai -fsel-sched-pipelining dihidupkan.

-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 nilai untuk dialokasikan dalam register yang akan dihancurkan oleh panggilan fungsi,
dengan memancarkan instruksi tambahan untuk menyimpan dan memulihkan register di sekitar panggilan tersebut.
Alokasi seperti itu dilakukan hanya ketika tampaknya menghasilkan kode yang lebih baik daripada yang seharusnya
jika tidak akan diproduksi.

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.

-fconserve-stack
Cobalah untuk meminimalkan penggunaan tumpukan. Kompiler akan mencoba menggunakan lebih sedikit ruang tumpukan,
bahkan jika itu membuat program lebih lambat. Opsi ini menyiratkan pengaturan tumpukan besar-
bingkai 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.

-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 dapat lolos dari unit kompilasi.
Diaktifkan secara 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 akan 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-matrix-reorg
Lakukan perataan dan transpos matriks. Perataan matriks mencoba menggantikan
matriks m-dimensi dengan matriks n-dimensi yang setara, di mana n < m. Ini
mengurangi tingkat tipuan yang diperlukan untuk mengakses elemen matriks. NS
optimasi kedua adalah transposing matriks, yang mencoba mengubah urutan
dimensi matriks untuk meningkatkan lokalitas cache. Kedua pengoptimalan membutuhkan
-seluruh-program bendera. Transpos diaktifkan hanya jika informasi pembuatan profil adalah
tersedia.

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

-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-ppl dan --dengan-cloog untuk
mengaktifkan infrastruktur transformasi loop Graphite.

-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 akan mengubah loop seolah-olah pengguna telah menulis:

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-ppl
dan --dengan-cloog 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

penambangan loop strip akan mengubah loop seolah-olah pengguna telah menulis:

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-ppl
dan --dengan-cloog 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 akan mengubah loop seolah-olah pengguna telah menulis:

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
akan 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-ppl
dan --dengan-cloog 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 CLooG, seperti indeks
pemisahan dan penghapusan kode mati dalam loop.

-floop-ratakan
Menghapus struktur sarang loop: mengubah sarang loop menjadi satu loop. Ini
transformasi dapat berguna sebagai transformasi pemberdayaan untuk vektorisasi dan
paralelisasi. Fitur ini bersifat eksperimental. Untuk menggunakan transformasi kode ini, GCC
harus dikonfigurasi dengan --dengan-ppl dan --dengan-cloog untuk mengaktifkan loop Grafit
infrastruktur transformasi.

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

akan 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 memindahkan invarian yang akan menjadi
sulit ditangani di tingkat RTL (panggilan fungsi, operasi yang diperluas ke nontrivial
urutan insns). Dengan -funswitch-loop itu juga memindahkan operan dari kondisi yang
invarian di luar loop, sehingga kita dapat menggunakan analisis invarian sepele saja
dalam 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 akan membuat variabel dari fungsi sebaris terpisah dari
satu sama lain, sehingga mereka lebih cenderung mengandung nilai-nilai yang diharapkan dalam a
sesi debug. Ini adalah default di versi GCC yang lebih lama dari 4.7.

-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-vektorisasi
Lakukan vektorisasi loop pada pohon. Bendera ini diaktifkan secara default di -O3.

-ftree-slp-vektorisasi
Lakukan vektorisasi blok dasar pada pohon. Bendera ini diaktifkan secara default di -O3 dan
ketika -ftree-vektorisasi diaktifkan.

-ftree-vect-loop-versi
Lakukan pembuatan versi loop saat melakukan vektorisasi loop pada pohon. Ketika sebuah lingkaran muncul
menjadi vectorizable kecuali bahwa penyelarasan data atau ketergantungan data tidak dapat ditentukan
pada waktu kompilasi, kemudian versi loop yang di-vektor dan tidak di-vektorisasi dihasilkan
bersama dengan pemeriksaan run-time untuk penyelarasan atau ketergantungan untuk mengontrol versi mana yang
dieksekusi. Opsi ini diaktifkan secara default kecuali pada level -Os di mana dinonaktifkan.

-fvect-biaya-model
Aktifkan model biaya untuk vektorisasi.

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

-pelacak
Lakukan duplikasi ekor untuk memperbesar ukuran superblok. Transformasi ini menyederhanakan
aliran kontrol fungsi yang memungkinkan pengoptimalan lain untuk melakukan pekerjaan yang lebih baik.

-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. Pilihan ini membuat
kode lebih besar, dan mungkin atau mungkin tidak membuatnya berjalan lebih cepat.

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

-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
dalam kasus badan loop lebih rumit daripada satu blok dasar, ini bukan
dapat diandalkan. 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 akan membuat banyak salinan dari beberapa variabel lokal
saat 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 akan 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 __dibangun_mengharapkan, lalu
heuristik akan digunakan untuk menebak probabilitas cabang untuk sisa aliran kontrol
grafik, mengambil __dibangun_mengharapkan info ke rekening. Interaksi antara
heuristik dan __dibangun_mengharapkan bisa rumit, dan dalam beberapa kasus, mungkin berguna untuk
nonaktifkan heuristik sehingga efek dari __dibangun_mengharapkan 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.

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

Grafik -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 akan
terjadi. Ini memungkinkan berbagai pengoptimalan. Misalnya, kompiler akan mengasumsikan
bahwa ekspresi seperti "i + 10 > i" akan selalu benar untuk tanda "i". Ini
asumsi hanya valid jika overflow yang ditandatangani tidak ditentukan, karena ekspresinya salah
jika "i + 10" meluap saat menggunakan aritmatika komplemen dua. Saat opsi ini masuk
mempengaruhi setiap upaya untuk menentukan apakah operasi pada nomor yang ditandatangani akan meluap
harus ditulis dengan hati-hati agar 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.

Grafik -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 akan 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 akan sejajar.

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 akan
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.
Harapannya adalah bahwa loop akan dieksekusi berkali-kali, yang akan menggantikan apapun
pelaksanaan operasi dummy.

-fno-align-loop dan -falign-loop=1 adalah setara dan berarti bahwa loop tidak akan menjadi
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 adalah setara dan berarti bahwa loop tidak akan menjadi
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 akan dihapus. Opsi ini dimaksudkan untuk mendukung
kode yang ada yang bergantung pada pemesanan tertentu. Untuk kode baru, lebih baik menggunakan
atribut.

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 akan 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. Jika emas digunakan sebagai plugin penghubung,
Atribut "eksternal_terlihat" secara otomatis ditambahkan ke fungsi (belum variabel
karena arus emas masalah) yang diakses di luar objek LTO sesuai dengan
file resolusi yang dihasilkan oleh emas. Untuk tautan lain yang tidak dapat menghasilkan resolusi
file, atribut eksplisit "externally_visible" masih diperlukan. Sementara opsi ini
setara dengan penggunaan yang tepat dari kata kunci "statis" untuk program yang terdiri dari a
file tunggal, dalam kombinasi dengan opsi -flto bendera ini dapat digunakan untuk mengkompilasi banyak
program skala yang lebih kecil karena fungsi dan variabel menjadi lokal untuk keseluruhan
unit kompilasi gabungan, bukan untuk file sumber tunggal itu sendiri.

Opsi ini menyiratkan -fseluruh file untuk program Fortran.

-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 perlu ditentukan pada 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 bahwa untuk mengaktifkan pengoptimalan waktu tautan
-flto flag harus diteruskan ke perintah kompilasi dan 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.

Perhatikan bahwa ketika file dikompilasi dengan -flto, file objek yang dihasilkan lebih besar dari
file objek biasa karena berisi bytecode GIMPLE dan kode akhir yang biasa.
Ini berarti bahwa file objek dengan informasi LTO dapat ditautkan sebagai objek normal
file; jika -flto tidak diteruskan ke linker, tidak ada optimasi antarprosedural
terapan.

Selain itu, flag optimasi yang digunakan untuk mengkompilasi file individual tidak
tentu terkait dengan yang digunakan pada waktu tautan. Contohnya,

gcc -c -O0 -flto foo.c
gcc -c -o0 -flto bar.c
gcc -o myprog -flto -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 tanpa -flto, kemudian prog saya tidak dioptimalkan.

Saat menghasilkan biner akhir dengan -flto, GCC hanya menerapkan pengoptimalan waktu tautan
ke file-file yang berisi 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. Saat ini, opsi berikut:
disimpan ke dalam file bytecode GIMPLE: -fPIC, -umum dan semua -m bendera sasaran.

Pada waktu tautan, opsi ini dibaca dan diterapkan kembali. Perhatikan bahwa arus
implementasi tidak berusaha untuk mengenali nilai-nilai yang bertentangan untuk opsi-opsi ini. Jika
file yang berbeda memiliki nilai opsi yang bertentangan (misalnya, satu file dikompilasi dengan -fPIC
dan yang lainnya tidak), kompiler hanya menggunakan nilai terakhir yang dibaca dari bytecode
file. Oleh karena itu, Anda disarankan untuk mengompilasi semua file yang berpartisipasi dalam
tautan yang sama dengan opsi yang sama.

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.

Fitur lain dari LTO adalah dimungkinkan untuk menerapkan optimasi antarprosedural
pada file yang ditulis dalam bahasa yang berbeda. Ini membutuhkan dukungan di bidang bahasa
akhir. Saat ini, ujung depan C, C++ dan Fortran mampu memancarkan GIMPLE
bytecode, jadi sesuatu seperti ini seharusnya berfungsi:

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); yang perlu Anda tambahkan adalah -flto untuk semua
mengkompilasi dan menghubungkan perintah.

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 mengaktifkan fitur ini, gunakan tanda -sekering-linker-plugin
pada waktu tautan:

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.

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 akan
bekerja dengan versi GCC yang lebih lama/lebih baru.

Pengoptimalan waktu tautan tidak berfungsi dengan baik dengan pembuatan informasi debug.
Menggabungkan -flto dengan -g saat ini eksperimental dan diharapkan menghasilkan yang salah
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.

Opsi ini dinonaktifkan secara default

-flto-partisi=ganggang
Tentukan algoritma partisi yang digunakan oleh pengoptimal waktu tautan. Nilainya adalah
baik "1to1" untuk menentukan partisi yang mencerminkan file sumber asli atau
"seimbang" untuk menentukan partisi menjadi potongan berukuran sama (bila memungkinkan).
Menentukan "tidak ada" sebagai algoritme menonaktifkan partisi dan streaming sepenuhnya. NS
nilai default adalah "seimbang".

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

-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
"-fseluruh-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 linker
plugin untuk memungkinkan lingkungan build berfitur lengkap (mampu membangun statis
perpustakaan dll).

Standarnya adalah -ffat-lto-objek tetapi default ini dimaksudkan untuk berubah di masa mendatang
rilis ketika lingkungan yang mengaktifkan plugin linker menjadi lebih umum.

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

-fuse-ld=emas
Gunakan emas linker bukan linker default.

-sekering-ld=bfd
Gunakan ld.bfd linker bukan linker default.

-fcprop-register
Setelah alokasi register dan pemisahan instruksi alokasi pasca-register, kami
lakukan pass propagasi salinan untuk mencoba mengurangi ketergantungan penjadwalan dan
sesekali hilangkan salinannya.

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 akan
menggunakan heuristik untuk memperbaiki atau memuluskan ketidakkonsistenan tersebut. Secara default, GCC akan
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 akan menggunakan
direktori saat ini sebagai path, dengan demikian file data profil akan muncul di tempat yang sama
direktori sebagai file 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-arcs", "-fprofile-values", "-fvpt".

If path ditentukan, GCC akan melihat path untuk menemukan data umpan balik profil
file. Lihat -fprofile-dir.

-fprofile-penggunaan
-fprofile-gunakan=path
Aktifkan pengoptimalan terarah umpan balik profil, dan pengoptimalan umumnya menguntungkan
hanya dengan umpan balik profil yang tersedia.

Opsi berikut diaktifkan: "-fbranch-probabilities", "-fvpt",
"-funroll-loop", "-fpeel-loop", "-ftracer"

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 akan melihat path untuk menemukan data umpan balik profil
file. Lihat -fprofile-dir.

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 akan 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
set -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 atur ERRNO setelah memanggil fungsi matematika yang dieksekusi 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 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.

-fvpt
Jika digabungkan dengan -fprofile-arc, itu menginstruksikan kompiler untuk menambahkan kode untuk dikumpulkan
informasi tentang 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 akan paling menguntungkan prosesor dengan
banyak register. Bergantung pada format informasi debug yang diadopsi oleh target,
namun, itu dapat membuat debugging menjadi tidak mungkin, karena variabel tidak akan lagi berada di a
"daftar rumah".

Diaktifkan secara default dengan -funroll-loop dan -fpeel-loop.

-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 jumlah iterasi kecil 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 akan membuat objek yang lebih besar dan
file yang dapat dieksekusi dan juga akan lebih lambat. Anda tidak akan dapat menggunakan "gprof" di semua
sistem jika Anda menentukan opsi ini dan Anda mungkin memiliki masalah dengan debugging jika Anda
tentukan kedua 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 di dalam blok dasar apa pun.

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

CATATAN: Di Ubuntu 6.10 dan versi yang lebih baru, opsi ini diaktifkan secara default untuk C, C++,
ObjC, ObjC++, jika tidak ada -fno-pelindung tumpukan, -nostdlib, juga -berdiri bebas adalah
ditemukan.

-fstack-pelindung-semua
Seperti -fstack-pelindung kecuali bahwa semua fungsi dilindungi.

-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 akan menghitung alamat ketiga variabel, tetapi jika Anda mengkompilasinya
dengan -fsection-jangkar, itu akan mengakses variabel dari titik jangkar yang sama
sebagai gantinya. 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 akan 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 diberikan
tabel berikut:

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 edge yang masuk untuk dipertimbangkan untuk crossjumping. 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 crossjumping akan dilakukan pada mereka. Nilai ini diabaikan dalam kasus ini
di mana semua instruksi di blok yang dilintasi 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 tunda akan minimal jadi berhenti
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 akan dialokasikan untuk
melakukan optimasi eliminasi subekspresi umum global. Jika lebih banyak memori
dari yang ditentukan diperlukan, optimasi tidak akan dilakukan.

rasio penyisipan maks-gcse
Jika rasio penyisipan ekspresi terhadap penghapusan lebih besar dari nilai ini untuk
ekspresi apa pun, maka RTL PRE akan 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 akan memungkinkan sebelum pembilasan
keadaan saat ini dan memulai kembali. 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 inliner pohon yang digunakan di gcc. Angka ini menetapkan
jumlah maksimum instruksi (dihitung dalam representasi internal GCC) dalam a
fungsi tunggal yang akan dipertimbangkan oleh inliner pohon untuk inlining. Ini hanya
mempengaruhi fungsi yang dideklarasikan sebaris dan metode yang 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 akan diselidiki. Ke
fungsi-fungsi itu, batas yang berbeda (lebih ketat) dibandingkan dengan fungsi
dinyatakan sebaris dapat diterapkan. Nilai defaultnya adalah 40.

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 (pertimbangkan unit yang terdiri dari fungsi A yang inline dan
B yang hanya memanggil A tiga kali. Jika B relatif kecil terhadap A, pertumbuhan unit
adalah 300\% namun inlining seperti itu sangat waras. Untuk unit yang sangat besar yang terdiri dari
fungsi inlineable kecil namun batas pertumbuhan unit keseluruhan diperlukan untuk
menghindari ledakan eksponensial ukuran kode. Jadi untuk satuan yang lebih kecil, ukurannya adalah
meningkat 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 30 yang membatasi pertumbuhan unit hingga 1.3 kali ukuran aslinya.

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 out-of-line salinan inline rekursif diri
fungsi dapat berkembang menjadi dengan melakukan inlining rekursif.

Untuk fungsi yang dideklarasikan sebaris --param max-inline-insns-rekursif diambil ke dalam
Akun. Untuk fungsi yang tidak dideklarasikan inline, inlining rekursif hanya terjadi ketika
-finline-fungsi (termasuk dalam -O3) diaktifkan dan --param max-inline-insns-
rekursif-otomatis digunakan. Nilai defaultnya adalah 450.

max-inline-rekursif-kedalaman
max-inline-rekursif-kedalaman-otomatis
Menentukan kedalaman rekursi maksimum yang digunakan oleh inlining rekursif.

Untuk fungsi yang dideklarasikan sebaris --param max-inline-rekursif-kedalaman diambil ke dalam
Akun. Untuk fungsi yang tidak dideklarasikan inline, inlining rekursif hanya terjadi ketika
-finline-fungsi (termasuk dalam -O3) diaktifkan dan --param max-inline-rekursif-
kedalaman-otomatis digunakan. 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 akan 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. Akibatnya meningkatkan jumlah
inlining untuk kode yang memiliki penalti abstraksi besar. Nilai defaultnya adalah 10.

max-awal-inliner-iterasi
max-awal-inliner-iterasi
Batas iterasi awal inliner. Ini pada dasarnya membatasi jumlah bersarang
panggilan tidak langsung yang dapat diselesaikan oleh inliner awal. Rantai yang lebih dalam masih ditangani terlambat
sebaris.

comdat-sharing-probabilitas
comdat-sharing-probabilitas
Probabilitas (dalam persen) bahwa fungsi inline C++ dengan visibilitas comdat adalah
dibagikan di beberapa unit kompilasi. Nilai defaultnya adalah 20.

min-vektor-loop-terikat
Jumlah minimum iterasi di mana loop tidak akan 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 akan menonaktifkan pengangkatan ekspresi sederhana. Standarnya
nilainya 10.

gcse-biaya tidak terbatas
Biaya, secara kasar diukur sebagai biaya instruksi mesin tunggal yang khas, pada
pengoptimalan GCSE mana yang tidak akan membatasi jarak yang dapat ditempuh ekspresi.
Ini saat ini hanya didukung di pass pengangkat kode. Semakin kecil biayanya,
pengangkatan kode yang lebih agresif akan terjadi. Menentukan 0 akan memungkinkan semua
ekspresi untuk melakukan perjalanan jarak tak 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 mengangkat. Nilai 0 akan menghindari
membatasi pencarian, tetapi dapat memperlambat kompilasi fungsi-fungsi besar. Standarnya
nilainya 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 harus dimiliki sebuah loop jika loop tersebut adalah
dibuka, dan jika loop dibuka, itu menentukan berapa kali kode loop
dibuka gulungannya.

maks-rata-rata-unrolled-insns
Jumlah maksimum instruksi yang bias oleh probabilitas eksekusi mereka yang
sebuah loop harus dimiliki jika loop itu dibuka, dan jika loop dibuka, itu
menentukan berapa kali kode loop dibuka.

max-unroll-kali
Jumlah maksimum unrolling dari satu loop.

max-kupas-insns
Jumlah maksimum instruksi yang harus dimiliki sebuah loop jika loop tersebut dikupas,
dan jika loop dikupas, itu menentukan berapa kali kode loop dikupas.

max-kupas-kali
Jumlah maksimum pengelupasan satu loop.

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 bawah semua kandidat
dipertimbangkan untuk setiap penggunaan dalam optimasi variabel induksi. Hanya yang paling
kandidat yang relevan dipertimbangkan jika ada lebih banyak kandidat, untuk menghindari
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, kami selalu mencoba untuk
hapus iv yang tidak perlu dari set selama pengoptimalannya saat iv baru ditambahkan
ke set.

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 dilakukan oleh pemecah Omega
memasukkan. 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. Lihat opsi ftree-vect-loop-version
for more information.

vect-max-version-untuk-alias-cek
Jumlah maksimum pemeriksaan run-time yang dapat dilakukan saat melakukan loop
pembuatan versi untuk alias di vectorizer. Lihat opsi ftree-vect-loop-version untuk
Informasi lebih lanjut

max-iterasi-ke-track
Jumlah maksimum iterasi dari loop algoritma brute force untuk analisis
dari # iterasi dari loop mencoba untuk mengevaluasi.

hot-bb-count-fraksi
Pilih fraksi dari hitungan maksimal pengulangan blok dasar dalam program
blok dasar yang diberikan harus dianggap panas.

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 fungsi berisi loop tunggal dengan ikatan yang diketahui dan loop lainnya dengan
tidak dikenal. Kami memprediksi jumlah iterasi yang diketahui dengan benar, sedangkan yang tidak diketahui
jumlah iterasi rata-rata menjadi sekitar 10. Ini berarti bahwa loop tanpa
batas akan tampak relatif dingin secara artifisial terhadap yang lain.

sejajar-ambang batas
Pilih fraksi dari frekuensi maksimal eksekusi blok dasar dalam fungsi
blok dasar yang diberikan akan disejajarkan.

align-loop-iterasi
Sebuah loop diharapkan untuk mengulangi setidaknya jumlah iterasi yang dipilih akan mendapatkan
selaras.

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.

Grafik umpan balik-pelacak-dinamis-cakupan hanya digunakan ketika umpan balik profil adalah
tersedia. Profil sebenarnya (berlawanan dengan yang diperkirakan secara statis) jauh lebih banyak
kurang seimbang memungkinkan ambang menjadi nilai yang lebih besar.

tracer-max-kode-pertumbuhan
Hentikan duplikasi ekor setelah pertumbuhan kode mencapai persentase tertentu. Ini adalah
argumen yang agak tipu, karena sebagian besar duplikat akan dihilangkan nanti 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 ini
ambang.

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
Instruksi maksimal proses 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 pemesanan ulang blok dasar untuk memutuskan apakah akan menggunakan cabang tanpa syarat
atau duplikat kode di tujuannya. Kode digandakan saat diperkirakan
ukuran lebih kecil dari nilai ini dikalikan dengan perkiraan ukuran tanpa syarat
melompat di hot spot program.

Grafik susun ulang-blok-duplikat-umpan balik hanya digunakan ketika umpan balik profil adalah
tersedia dan dapat 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. 0 - nonaktifkan
ekstensi wilayah, N - lakukan paling banyak N iterasi. Nilai defaultnya adalah 0.

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 akan dijadwalkan. Nilai defaultnya adalah 40.

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 akan 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 stage yang akan dihasilkan oleh swing modulo scheduler. 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.

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.

min-virtual-pemetaan
Menentukan jumlah minimum pemetaan virtual dalam pembaruan SSA inkremental
yang harus didaftarkan untuk memicu heuristik pemetaan virtual yang ditentukan oleh
rasio-pemetaan virtual. Nilai defaultnya adalah 100.

rasio-pemetaan virtual
Jika jumlah pemetaan virtual adalah rasio pemetaan virtual lebih besar dari angka
simbol virtual yang akan diperbarui, maka pembaru SSA tambahan beralih ke a
pembaruan penuh untuk simbol-simbol itu. Rasio defaultnya adalah 3.

ssp-buffer-size
Ukuran minimum buffer (yaitu array) yang akan menerima stack smashing
perlindungan 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.

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 akan kami perlakukan 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 kita ambil ke depan 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 akan 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 akan
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 akan dilakukan dan
optimasi tergantung padanya akan dinonaktifkan. Ukuran SCC maksimum default adalah
10000.

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.

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 ke 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 akan ditangani oleh
optimasi menggunakan dependensi data loop. 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 akan menggantikan pointer ke agregat dengan satu atau lebih parameter baru
hanya jika ukuran kumulatifnya kurang atau sama dengan faktor pertumbuhan ipa-sra-ptr
kali ukuran parameter pointer asli.

tm-max-agregat-ukuran
Saat membuat salinan variabel utas-lokal dalam suatu transaksi, parameter ini
menentukan ukuran dalam byte setelah itu variabel akan 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.

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.

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-muat-data-ras
Izinkan pengoptimal untuk memperkenalkan data race baru pada beban. Setel ke 1 untuk mengizinkan,
sebaliknya ke 0. Opsi ini diaktifkan secara default kecuali ditetapkan secara implisit oleh
-fmemory-model= .

izinkan-simpan-data-ras
Izinkan pengoptimal untuk memperkenalkan balapan data baru di toko. Setel ke 1 untuk mengizinkan,
sebaliknya ke 0. Opsi ini diaktifkan secara default kecuali ditetapkan secara implisit oleh
-fmemory-model= .

memungkinkan-dikemas-memuat-data-ras
Izinkan pengoptimal untuk memperkenalkan data race baru pada pemuatan data yang dikemas. Setel ke 1 ke
izinkan, jika tidak ke 0. Opsi ini diaktifkan secara default kecuali secara implisit disetel oleh
itu -fmemory-model= .

memungkinkan-dikemas-toko-data-ras
Izinkan pengoptimal untuk memperkenalkan data race baru di penyimpanan data yang dikemas. Setel ke 1 ke
izinkan, jika tidak ke 0. Opsi ini diaktifkan secara default kecuali secara implisit disetel oleh
itu -fmemory-model= .

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.

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 diketahui GCC bagaimana mengenalinya.

Jika Anda ingin melewati opsi yang membutuhkan argumen, Anda harus menggunakan -Xpreprosesor
dua kali, sekali untuk opsi dan sekali untuk argumen.

-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 Command
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=standar
-ansi
Tentukan standar yang harus dipatuhi oleh kode. Saat ini CPP mengetahui tentang C
dan standar C++; lain dapat ditambahkan di masa depan.

standar mungkin salah satu dari:

"c90"
"c89"
"iso9899: 1990"
Standar ISO C dari tahun 1990. c90 adalah singkatan biasa untuk versi ini
standar.

Grafik -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 bersifat eksperimental; di sebuah
versi GCC yang akan datang, ini akan diaktifkan secara default untuk C99 dan C++.

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

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

Grafik -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 GCC tidak tahu cara mengenalinya.

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.

-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
akan diteruskan ke tautan, opsi yang menentukan tautan pustaka sistem, seperti
sebagai "-static-libgcc" atau "-shared-libgcc", akan diabaikan. File startup standar
digunakan secara normal, kecuali -nostartfiles digunakan. Kompiler dapat menghasilkan panggilan ke
"memcmp", "memset", "memcpy" dan "memmove". Entri ini biasanya diselesaikan dengan
entri di libc. Titik masuk ini harus dipasok 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 akan diteruskan ke tautan, opsi
menentukan tautan pustaka sistem, seperti "-static-libgcc" atau
"-shared-libgcc", akan diabaikan. Kompiler dapat menghasilkan panggilan ke "memcmp",
"memset", "memcpy" dan "memmove". Entri ini biasanya diselesaikan dengan entri di
libc. Titik masuk ini harus dipasok melalui beberapa mekanisme lain saat ini
opsi 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. (Sebagai contoh, __utama, digunakan untuk memastikan C++
konstruktor akan 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 menghasilkan kode
(-fpie, -fPIE, atau subopsi model) saat Anda menentukan opsi ini.

-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 menghasilkan kode (-fpik, -fPIC, atau
subopsi model) saat Anda menentukan opsi 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 akan selalu ditautkan 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, itu akan menautkan versi bersama dari libgcc ke perpustakaan bersama oleh
bawaan. Jika tidak, itu akan memanfaatkan tautan dan mengoptimalkan
menghubungkan dengan versi bersama dari libgcc, menautkan dengan versi statis libgcc
secara default. 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-libstdc++
Ketika g ++ program digunakan untuk menghubungkan program C++, biasanya akan secara otomatis
link melawan libstdc++. Jika libstdc++ tersedia sebagai perpustakaan bersama, dan
-statis opsi tidak digunakan, maka ini akan ditautkan ke versi yang dibagikan
libstdc++. Itu biasanya baik-baik saja. Namun, terkadang berguna untuk membekukan
versi libstdc++ digunakan oleh program tanpa sepenuhnya statis
tautan. NS -statis-libstdc++ pilihan mengarahkan g ++ driver untuk menghubungkan libstdc++
statis, tanpa harus 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.

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 akan diabaikan. Direktori akan tetap
dicari tetapi 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
ubah 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 "fillet"; mereka tidak dicari #include <fillet>,
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 akan memeriksa untuk melihat apakah jalur yang disediakan oleh -B mengacu pada direktori,
dan jika perlu akan 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
di kisaran 0 hingga 9, maka akan digantikan oleh [dir/]termasuk. Ini untuk membantu
boot-strapping 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 akan mencari header di / usr / include dan perpustakaan di / Usr / lib,
itu malah akan mencari dir/usr/termasuk dan dir/usr/lib.

Jika Anda menggunakan opsi ini dan -isysroot pilihan, maka --sysroot pilihan akan
berlaku untuk perpustakaan, tetapi -isysroot opsi akan 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 akan tetap berfungsi, tetapi aspek perpustakaan tidak akan berfungsi.

-SAYA- Opsi ini tidak digunakan lagi. Mohon gunakan -Saya mengutip bukan untuk -I direktori sebelumnya
itu -SAYA- dan hapus -SAYA-. Direktori apa pun yang Anda tentukan dengan -I pilihan sebelum
-SAYA- pilihan yang dicari hanya untuk kasus #include "fillet"; mereka tidak dicari
untuk #include <fillet>.

Jika direktori tambahan ditentukan dengan -I pilihan setelah -SAYA-, Ini
direktori dicari semua #include arahan. (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 "fillet".
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.

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 jika ini mengurangi atau menambah ukuran kode
mungkin berbeda dari kasus ke kasus.

-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 nops sebelum setiap instruksi yang dihasilkan lainnya.

-Mno-soft-cmpsf
Untuk perbandingan floating-point presisi tunggal, pancarkan instruksi fsub dan uji
bendera. Ini lebih cepat daripada perbandingan perangkat lunak, tetapi bisa mendapatkan hasil yang salah dalam
keberadaan NaN, atau ketika dua bilangan kecil yang berbeda dibandingkan sedemikian rupa sehingga
perbedaan dihitung sebagai nol. Standarnya adalah -msoft-cmpsf, yang menggunakan lebih lambat, tapi
IEEE-compliant, perbandingan perangkat lunak.

-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 yang berbeda dari perpustakaan yang telah dikompilasi pada umumnya tidak akan
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 karena itu 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
instruksi b / bl, jadi gunakan instruksi ini untuk panggilan langsung. Standarnya
is -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 akan
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 untuk menggunakan register itu sebagai register tetap, dan tidak ada, yang berarti tidak ada
register digunakan untuk tujuan ini. Standarnya adalah -m1reg-tidak ada.

AAArch64 Opsi

Opsi ini ditentukan untuk implementasi AArch64:

-mbig-endian
Hasilkan kode big-endian. Ini adalah default ketika GCC dikonfigurasi untuk
aarch64_be-*-* target.

-mgeneral-regs-saja
Hasilkan kode yang hanya menggunakan register umum.

-mlittle-endian
Hasilkan kode little-endian. Ini adalah default ketika GCC dikonfigurasi untuk
aarch64-*-* tapi bukan aarch64_be-*-* target.

-mcmodel=kecil
Hasilkan kode untuk model kode kecil. Program dan simbol yang didefinisikan secara statis
harus berada dalam jarak 1GB satu sama lain. Pointer adalah 64 bit. Program bisa statis
atau terhubung secara dinamis. Model ini tidak sepenuhnya diterapkan dan sebagian besar diperlakukan sebagai
"kecil".

-mcmodel=kecil
Hasilkan kode untuk model kode kecil. Program dan yang didefinisikan secara statis
simbol harus berada dalam jarak 4GB satu sama lain. Pointer adalah 64 bit. Program dapat
dihubungkan secara statis atau dinamis. Ini adalah model kode default.

-mcmodel=besar
Hasilkan kode untuk model kode besar. Ini tidak membuat asumsi tentang alamat dan
ukuran bagian. Pointer adalah 64 bit. Program hanya dapat dihubungkan secara statis.

-mtrict-align
Jangan berasumsi bahwa referensi memori yang tidak selaras akan 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.

-maret=nama
Tentukan nama arsitektur target, secara opsional diberi akhiran oleh satu atau lebih
pengubah fitur. Opsi ini memiliki bentuk -maret=lengkungan{+[tidak]ciri}*, Dimana
hanya nilai untuk lengkungan is lenganv8-a. Nilai yang mungkin untuk ciri didokumentasikan dalam
sub bagian di bawah ini.

Di mana pengubah fitur yang bertentangan ditentukan, fitur paling kanan digunakan.

GCC menggunakan nama ini untuk menentukan jenis instruksi apa yang dapat dipancarkannya saat menghasilkan
kode perakitan. Opsi ini dapat digunakan bersama dengan atau sebagai pengganti -mcpu=
.

-mcpu=nama
Tentukan nama prosesor target, secara opsional diberi akhiran oleh satu atau lebih fitur
pengubah. Opsi ini memiliki bentuk -mcpu=cpu{+[tidak]ciri}*, jika memungkinkan
nilai untuk cpu adalah umum, besar. Nilai yang mungkin untuk ciri didokumentasikan dalam
sub bagian di bawah ini.

Di mana pengubah fitur yang bertentangan ditentukan, fitur paling kanan digunakan.

GCC menggunakan nama ini untuk menentukan jenis instruksi apa yang dapat dipancarkannya saat menghasilkan
kode perakitan.

-mtune=nama
Tentukan nama prosesor untuk menyetel kinerjanya. Kode akan disetel
seolah-olah prosesor target adalah tipe yang ditentukan dalam opsi ini, tetapi masih menggunakan
instruksi yang kompatibel dengan prosesor target yang ditentukan oleh a -mcpu= pilihan. Ini
opsi tidak dapat diakhiri oleh pengubah fitur.

-berbaris dan -mcpu pengubah fitur

Pengubah fitur yang digunakan dengan -berbaris dan -mcpu dapat menjadi salah satu berikut:

kripto
Aktifkan ekstensi Crypto. Ini berarti SIMD Lanjutan diaktifkan.

fp Aktifkan instruksi floating-point.

simd
Aktifkan petunjuk SIMD Lanjutan. Ini menyiratkan instruksi floating-point adalah
diaktifkan. Ini adalah default untuk semua kemungkinan nilai saat ini untuk opsi -berbaris dan
-mcpu=.

ARM Opsi

Ini -m opsi ditentukan untuk arsitektur Advanced RISC Machines (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 akan menyebabkan bingkai tumpukan tidak menjadi
dihasilkan untuk fungsi daun. Standarnya adalah -mno-apcs-bingkai.

-mapcs
Ini adalah sinonim untuk -mapcs-bingkai.

-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 akan dimulai dengan serangkaian instruksi yang dapat dikenali (atau sebenarnya salah satu dari a
pilihan dari satu set kecil prolog fungsi yang berbeda), dan informasi ini dapat
digunakan untuk menemukan awal jika fungsi di dalam potongan kode yang dapat dieksekusi. Standarnya
is -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.

-kata-kata-little-endian
Opsi ini hanya berlaku saat membuat kode untuk prosesor big-endian. Menghasilkan
kode untuk urutan kata little-endian tetapi urutan byte big-endian. Artinya, satu byte
urutan formulir 32107654. Catatan: opsi ini hanya boleh digunakan jika Anda memerlukan
kompatibilitas dengan kode untuk prosesor ARM big-endian yang dihasilkan oleh versi
kompiler sebelum 2.8. Opsi ini sekarang tidak digunakan lagi.

-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, armv6zk, lenganv6-m, lenganv7, lenganv7-a, lenganv7-r,
lenganv7-m, lenganv7e-m, akumxt, iwmmxt2, ep9312.

-maret=asli menyebabkan kompiler mendeteksi arsitektur bangunan secara otomatis
komputer. Saat ini, fitur ini hanya didukung di 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, korteks-a5, korteks-a7, korteks-a8, korteks-a9,
korteks-a15, korteks-r4, korteks-r4f, korteks-r5, korteks-m4, korteks-m3, korteks-m1,
korteks-m0, skala x, akumxt, iwmmxt2, ep9312, fa526, fa626, fa606te, fa626te, fmp626,
fa726te.

-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 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 Linux, dan tidak semua arsitektur
dikenali. Jika deteksi otomatis tidak berhasil, opsi tidak berpengaruh.

-mfpu=nama
-mfpe=jumlah
-mfp=jumlah
Ini menentukan perangkat keras titik-mengambang (atau emulasi perangkat keras) yang tersedia di
target. Nama yang diperbolehkan adalah: fpa, fpe2, fpe3, orang yg tdk konvensionil, vfp, vfpv3, vfpv3-fp16,
vfpv3-d16, vfpv3-d16-fp16, vfpv3xd, vfpv3xd-fp16, neon, neon-fp16, vfpv4, vfpv4-d16,
fpv4-sp-d16 dan neon-vfpv4. -mfp dan -mfpe adalah sinonim untuk -mfpu=fpejumlah, Untuk
kompatibilitas dengan versi GCC yang lebih lama.

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 akan digunakan 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 pekerja akan dibulatkan menjadi kelipatan angka
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". Itu akan
dijalankan 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 akan berada di luar pengalamatan 64 megabyte
rentang versi instruksi panggilan subrutin berbasis offset.

Bahkan jika sakelar ini diaktifkan, tidak semua panggilan fungsi akan diubah menjadi panggilan panjang.
Heuristik adalah bahwa fungsi statis, fungsi yang memiliki panggilan singkat atribut,
fungsi yang berada di dalam ruang lingkup a #pragma no_long_panggilan direktif dan fungsi
yang definisinya telah dikompilasi dalam unit kompilasi saat ini, akan
tidak berubah menjadi panggilan panjang. Pengecualian untuk aturan ini adalah fungsi yang lemah itu
definisi, fungsi dengan panggilan panjang atribut atau bagian atribut, dan
fungsi yang berada dalam ruang lingkup a #pragma panggilan_panjang direktif, akan selalu
berubah menjadi panggilan panjang.

Fitur ini tidak diaktifkan secara default. Menentukan -mno-panggilan panjang akan mengembalikan
perilaku default, seperti yang akan menempatkan panggilan fungsi dalam lingkup a #pragma
panggilan_panjang_mati pengarahan. Perhatikan bahwa sakelar ini tidak berpengaruh pada bagaimana 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. Standarnya adalah R10 kecuali stack-
pemeriksaan diaktifkan, saat R9 digunakan.

-mcirrus-fix-invalid-insns
Masukkan NOP ke dalam aliran instruksi untuk mengatasi masalah dengan
kombinasi instruksi Maverick tidak valid. Opsi ini hanya berlaku jika
-mcpu=ep9312 opsi telah digunakan untuk mengaktifkan pembuatan instruksi untuk Cirrus
Co-prosesor floating-point Maverick. Opsi ini tidak diaktifkan secara default, karena
masalahnya hanya ada di implementasi Maverick yang lebih lama. Defaultnya bisa di-
diaktifkan dengan menggunakan -mno-cirrus-fix-invalid-insns saklar.

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

-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 dialek adalah
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 akan diakses
satu byte pada suatu waktu.

Atribut ARM "Tag_CPU_unaligned_access" akan disetel dalam file objek yang dihasilkan
menjadi benar atau salah, tergantung pada pengaturan opsi ini. Jika tidak selaras
akses diaktifkan maka simbol praprosesor "__ARM_FEATURE_UNALIGNED" juga akan
didefinisikan.

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

AVR Opsi

-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{}= "ata6289", "attiny13", "attiny13a", "attiny2313",
"attiny2313a", "attiny24", "attiny24a", "attiny25", "attiny261", "attiny261a",
"attiny43u", "attiny4313", "attiny44", "attiny44a", "attiny45", "attiny461",
"attiny461a", "attiny48", "attiny84", "attiny84a", "attiny85", "attiny861",
"attiny861a", "attiny87", "attiny88", "at86rf401".

"avr3"
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{}= "atmega16u2", "atmega32u2", "atmega8u2",
"attiny167", "at90usb162", "at90usb82".

"avr4"
Perangkat "disempurnakan" dengan memori program hingga 8@tie{}KiB. mcu@dasi{}=
"atmega48", "atmega48a", "atmega48p", "atmega8", "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{}= "atmega16", "atmega16a", "atmega16hva", "atmega16hva2", "atmega16hvb",
"atmega16m1", "atmega16u4", "atmega161", "atmega162", "atmega163", "atmega164a",
"atmega164p", "atmega165", "atmega165a", "atmega165p", "atmega168", "atmega168a",
"atmega168p", "atmega169", "atmega169a", "atmega169p", "atmega169pa", "atmega32",
"atmega32c1", "atmega32hvb", "atmega32m1", "atmega32u4", "atmega32u6",
"atmega323", "atmega324a", "atmega324p", "atmega324pa", "atmega325", "atmega325a",
"atmega325p", "atmega3250", "atmega3250a", "atmega3250p", "atmega328",
"atmega328p", "atmega329", "atmega329a", "atmega329p", "atmega329pa",
"atmega3290", "atmega3290a", "atmega3290p", "atmega406", "atmega64", "atmega64c1",
"atmega64hve", "atmega64m1", "atmega640", "atmega644", "atmega644a", "atmega644p",
"atmega644pa", "atmega645", "atmega645a", "atmega645p", "atmega6450",
"atmega6450a", "atmega6450p", "atmega649", "atmega649a", "atmega649p",
"atmega6490", "at90can32", "at90can64", "at90pwm216", "at90pwm316", "at90scr100",
"at90usb646", "at90usb647", "at94k", "m3000".

"avr51"
Perangkat "disempurnakan" dengan 128@tie{}KiB memori program. mcu@tie{}= "atmega128",
"atmega128rfa1", "atmega1280", "atmega1281", "atmega1284p", "at90can128",
"at90usb1286", "at90usb1287".

"avr6"
Perangkat "disempurnakan" dengan PC 3-byte, yaitu dengan lebih dari 128@tie{}KiB program
ingatan. mcu@tie{}= "atmega2560", "atmega2561".

"avrxmega2"
Perangkat "XMEGA" dengan lebih dari 8@tie{}KiB dan memori program hingga 64@tie{}KiB.
mcu@tie{}= "atxmega16a4", "atxmega16d4", "atxmega16x1", "atxmega32a4",
"atxmega32d4", "atxmega32x1".

"avrxmega4"
Perangkat "XMEGA" dengan lebih dari 64@tie{}KiB dan hingga 128@tie{}KiB program
ingatan. mcu@tie{}= "atxmega64a3", "atxmega64d3".

"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", "atxmega128d3", "atxmega192a3", "atxmega192d3", "atxmega256a3",
"atxmega256a3b", "atxmega256a3bu", "atxmega256d3".

"avrxmega7"
Perangkat "XMEGA" dengan memori program lebih dari 128@tie{}KiB dan lebih dari
64@tie{}KiB RAM. mcu@tie{}= "atxmega128a1", "atxmega128a1u".

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

-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. Menyetel "-mrelax" hanya menambahkan opsi "--relax" ke
baris perintah linker saat linker dipanggil.

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.

-mshort-panggilan
Opsi ini tidak digunakan lagi dan akan dihapus di GCC 4.8. Lihat "-mrelax" untuk
penggantian.

Gunakan petunjuk "RCALL"/"RJMP" bahkan pada perangkat dengan 16@tie{}KiB atau lebih program
memori, yaitu pada perangkat yang memiliki instruksi "CALL" dan "JMP".

-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" atau "-mmcu=avr25" driver kompilator
akan menambah atau menghapus opsi ini dari baris perintah kompiler yang tepat, karena
compiler kemudian tahu apakah perangkat atau arsitektur memiliki stack pointer 8-bit dan dengan demikian
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.

"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, linker 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 sehingga linker akan menghasilkan stub
benar semua situasi. Lihat opsi kompiler "-mrelax" dan opsi linler
"--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 penghubung 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" seperti itu 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 kompiler perlu diubah
"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 opsi baris perintah "-mmcu=".

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, 102, 104, 105, 106, 107

untuk mcu="avr2", "avr25", "avr3", "avr31", "avr35", "avr4", "avr5", "avr51", "avr6",
"avrxmega2", "avrxmega4", "avrxmega5", "avrxmega6", "avrxmega7", masing-masing. Jika mcu
menentukan perangkat, makro bawaan ini disetel sesuai dengan itu. Misalnya dengan
"-mmcu=atmega8" makro akan ditetapkan ke 4.

"__AVR_alat__"
Pengaturan "-mmcu=perangkat" mendefinisikan makro bawaan ini yang mencerminkan nama perangkat.
Misalnya, "-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 dalam "-mmcu=perangkat" adalah bahwa yang terakhir selalu huruf kecil.

If alat bukan perangkat tetapi hanya arsitektur inti seperti "avr51", makro ini akan
tidak 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 dari memori program dan jika "-mshort-calls" tidak disetel.

"__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-stack".

"__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 dengan "-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 opsi baris perintah "-mno-interrupts".

"__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_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
Opsi konfigurasi "--with-avrlibc".

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 prosesor Blackfin. Solusi apa pun yang tersedia untuk
revisi silikon yang ditargetkan akan diaktifkan. Jika visi is tak satupun, tidak ada solusi yang
diaktifkan. Jika visi is Apa pun, semua solusi untuk prosesor yang ditargetkan adalah
diaktifkan. Makro "__SILICON_REVISION__" didefinisikan menjadi dua digit heksadesimal
mewakili angka mayor dan minor dalam revisi silikon. Jika visi is
tak satupun, "__SILICON_REVISION__" tidak ditentukan. Jika visi is Apa pun, yang
"__SILICON_REVISION__" didefinisikan sebagai 0xffff. Jika ini opsional visi tidak
digunakan, GCC mengasumsikan revisi silikon terbaru yang diketahui dari Blackfin yang ditargetkan
prosesor.

Dukungan untuk bf561 tidak lengkap. Untuk bf561, Hanya makro prosesor yang ditentukan.
Tanpa opsi ini, bf532 digunakan sebagai prosesor secara default. yang sesuai
makro prosesor yang telah ditentukan sebelumnya untuk cpu harus didefinisikan. Dan untuk bfin-elf rantai alat,
ini menyebabkan BSP perangkat keras yang disediakan oleh libgloss ditautkan di if -msim tidak
diberikan.

-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 akan 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, kompiler akan 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
Hasilkan 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 akan dibuat untuk melompat dan memanggil insns.

-mshared-library-id=n
Menentukan nomor identifikasi perpustakaan bersama berbasis ID yang sedang dikompilasi.
Menentukan nilai 0 akan menghasilkan kode yang lebih ringkas, menentukan nilai lain akan
paksa alokasi nomor itu ke perpustakaan saat ini tetapi tidak ada lagi ruang atau
efisien waktu 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 akan 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. File awal yang tepat dan
skrip tautan akan digunakan untuk mendukung multicore. Opsi ini mendefinisikan
"__BFIN_MULTICORE". Itu hanya dapat digunakan dengan -mcpu=bf561[-visi]. Itu bisa digunakan
dengan -mcorea or -mcoreb. Jika digunakan tanpa -mcorea or -mcoreb, Single
aplikasi / model pemrograman inti ganda digunakan. Dalam model ini, fungsi utama dari
Core B harus dinamai sebagai coreb_main. Jika digunakan dengan -mcorea or -mcoreb, satu
aplikasi per model pemrograman inti digunakan. Jika opsi ini tidak digunakan, tunggal
model pemrograman aplikasi inti digunakan.

-mcorea
Bangun aplikasi mandiri untuk Core A dari BF561 saat menggunakan satu aplikasi per core
model pemrograman. File awal dan skrip tautan yang tepat akan digunakan untuk mendukung Core A.
Opsi ini mendefinisikan "__BFIN_COREA". Itu harus digunakan dengan -mmulticore.

-mcoreb
Bangun aplikasi mandiri untuk Core B dari BF561 saat menggunakan satu aplikasi per core
model pemrograman. File awal dan skrip tautan yang tepat akan digunakan untuk mendukung Core B.
Opsi ini mendefinisikan "__BFIN_COREB". Ketika opsi ini digunakan, coreb_main seharusnya
digunakan sebagai pengganti utama. Itu harus digunakan dengan -mmulticore.

-msdram
Membangun aplikasi mandiri untuk SDRAM. File awal yang tepat dan skrip tautan akan menjadi
digunakan untuk memasukkan aplikasi ke dalam SDRAM. Loader harus menginisialisasi SDRAM sebelum memuat
aplikasi ke SDRAM. Opsi ini mendefinisikan "__BFIN_SDRAM".

-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
Masukkan data global dan statis kecil ke dalam .neardata bagian, yang ditunjukkan oleh
daftar "B14". Masukkan data global dan statis kecil yang tidak diinisialisasi ke dalam .bss bagian,
yang bersebelahan dengan .neardata bagian. Masukkan data kecil hanya-baca ke dalam .rodata
bagian. Bagian terkait yang digunakan untuk potongan data yang besar adalah: .fardata, .jauh
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 ke dalam .fardata bagian,
dan semua data yang tidak diinisialisasi dalam .jauh bagian. Masukkan semua data konstan ke dalam .const
bagian.

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 untuk 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
Opsi-opsi ini (tanpa opsi) mengatur (menghilangkan pengaturan) untuk stack-frame,
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
stack-frame, data yang dapat ditulis dan konstanta semuanya 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, dikenal untuk pengaturan cris-axis-elf untuk terhubung 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 valid ketika opsi -mcr16c dipilih 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 akan membuat file objek untuk
arsitektur tunggal yang dibangun untuk ditargetkan. GCC Apple di Darwin memang menciptakan
file "gemuk" jika banyak -lengkungan opsi yang digunakan; ia melakukannya dengan menjalankan kompiler atau
linker beberapa kali dan menggabungkan hasil bersama-sama 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 akan mengizinkan instruksi untuk digunakan yang valid untuk subtipe
file yang dihasilkannya, jadi Anda tidak dapat memasukkan instruksi 64-bit ke dalam a ppc750 file objek.
Linker untuk perpustakaan bersama, /usr/bin/libtool, akan gagal dan mencetak kesalahan jika diminta
untuk membuat 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 akan memberikan executable subtipe yang paling ketat dari semua
file masukannya.

-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
yang berakhir di ".kerangka". Nama kerangka kerja adalah nama direktori ini
tidak termasuk ".kerangka". Header yang terkait dengan framework ditemukan di salah satu dari
dua direktori itu, dengan "Header" di cari dulu. Sebuah subframework adalah
direktori kerangka kerja yang ada di kerangka kerja "Kerangka" direktori. Termasuk dari
header subframework hanya dapat muncul di header framework yang berisi
subframework, atau di header subframework saudara. Dua subframework adalah saudara jika
mereka terjadi dalam kerangka yang sama. Subframework tidak boleh memiliki nama yang sama dengan a
kerangka kerja, peringatan akan dikeluarkan jika ini dilanggar. Saat ini subframework
tidak dapat memiliki subframework, di masa depan, mekanisme dapat diperluas untuk mendukung
ini. Kerangka kerja standar dapat ditemukan di "/Sistem/Perpustakaan/Kerangka" dan
"/Perpustakaan/Kerangka". Contoh include terlihat seperti "#include ",
dimana Kerangka menunjukkan nama kerangka kerja dan header.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 STABS,
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-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 ukuran(bool)==1. Secara default ukuran(bool) is 4
saat mengkompilasi untuk Darwin/PowerPC dan 1 saat kompilasi untuk Darwin/x86, jadi opsi ini
tidak berpengaruh pada x86.

Peringatan: Grafik -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 perputaran cepat. Diperlukan untuk mengaktifkan gdb untuk
memuat file ".o" secara dinamis 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 akan menghasilkan pustaka dinamis alih-alih yang dapat dieksekusi
saat menautkan, 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 akan terbiasa
melakukan operasi floating-point. Kecuali mereka digantikan oleh rutinitas yang meniru
operasi floating-point, atau dikompilasi sedemikian rupa untuk memanggil emulasi tersebut
rutin, rutinitas ini akan mengeluarkan operasi floating-point. Jika Anda sedang mengkompilasi
untuk Alpha tanpa operasi floating-point, Anda harus memastikan bahwa perpustakaannya
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. Di bawah DEC Unix, ini memiliki efek bahwa
Rutinitas perpustakaan matematika yang sesuai dengan IEEE akan ditautkan.

-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 akan menampilkan
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 akan menggunakan opsi ini untuk membuat pemuat dinamis pustaka bersama. Diri
perpustakaan bersama, itu harus memindahkan dirinya sendiri dalam memori sebelum dapat menemukan variabel
dan konstanta dalam segmen datanya sendiri.

-malpha-sebagai
-mgas
Pilih apakah akan menghasilkan kode untuk dirakit oleh assembler yang disediakan vendor
(-malpha-sebagai) atau oleh perakit GNU -mgas.

-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
akan memilih nilai default untuk set instruksi dari prosesor yang Anda tentukan.
Jika Anda tidak menentukan jenis prosesor, GCC akan default ke prosesor tempat
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.

Desember Alfa/VMS Opsi

Ini -m opsi ditentukan untuk implementasi DEC Alpha/VMS:

-mvms-kembali-kode
Kembalikan kode kondisi VMS dari main. 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.

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 akan 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 nops ke dalam paket sebelumnya.
Opsi ini hanya berpengaruh ketika pengepakan VLIW diaktifkan. Itu tidak membuat yang baru
paket; itu hanya menambahkan nops 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 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* dan
*-*-linux-*android* target.

-muclibc
Gunakan perpustakaan uClibc C. Ini adalah default pada *-*-linux-*uclibc* target.

-bionik
Gunakan perpustakaan Bionic C. Ini adalah default pada *-*-linux-*android* target.

-mandroid
Kompilasi kode yang kompatibel dengan platform Android. Ini adalah default pada
*-*-linux-*android* target.

Saat mengkompilasi, opsi ini memungkinkan -bionik, -fPIC, -fno-pengecualian 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.

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

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

-mlompat-dalam-penundaan
Isi slot penundaan panggilan fungsi dengan instruksi lompatan tanpa syarat dengan memodifikasi
pointer kembali untuk pemanggilan fungsi menjadi target lompatan bersyarat.

-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 akan 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 GNU ld. Ini berlalu -bersama ke ld saat membangun shared
Perpustakaan. Ini adalah default ketika GCC dikonfigurasi, secara eksplisit atau implisit, dengan
penghubung GNU. Opsi ini tidak memiliki pengaruh apa pun yang disebut ld, itu hanya
mengubah parameter apa yang diteruskan ke ld itu. ld yang disebut ditentukan oleh
itu --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`.
Opsi ini hanya tersedia pada 64-bit HP-UX GCC, yaitu dikonfigurasi dengan
hppa*64*-*-hpux*.

-mhp-ld
Gunakan opsi khusus HP ld. Ini berlalu -b ke ld saat membangun perpustakaan bersama dan
melewati +Terima JenisKetidakcocokan ke ld di semua tautan. Ini adalah default ketika GCC adalah
dikonfigurasi, secara eksplisit atau implisit, dengan HP linker. Opsi ini tidak memiliki
pengaruh apa pun yang disebut ld, itu hanya mengubah parameter apa yang diteruskan ke itu
ld. ld yang dipanggil ditentukan oleh --dengan-ld opsi konfigurasi, GCC
jalur pencarian program, dan akhirnya oleh pengguna PATH. Linker yang digunakan oleh GCC dapat berupa
dicetak menggunakan yang `gcc -cetak-nama-prog=ld`. Opsi ini hanya tersedia di
64-bit HP-UX 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 akan menurunkan kinerja.
Namun, ini mungkin berguna dalam aplikasi besar, terutama ketika tautan parsial adalah
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_extend_mask sewajarnya. 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.

Intel 386 dan AMD x86-64 Opsi

Ini -m opsi ditentukan untuk keluarga komputer i386 dan x86-64:

-mtune=tipe cpu
Dengarkan tipe cpu semua yang berlaku tentang kode yang dihasilkan, kecuali untuk ABI
dan set instruksi yang tersedia. Pilihan untuk tipe cpu adalah:

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 pilihan alih-alih -mtune=generik. Tapi, jika Anda tidak tahu persis apa CPU
pengguna aplikasi Anda akan memiliki, maka Anda harus menggunakan opsi ini.

Saat prosesor baru dikerahkan di pasar, perilaku opsi ini
akan berubah. Oleh karena itu, jika Anda meningkatkan ke versi GCC yang lebih baru, kodenya
opsi yang dihasilkan akan berubah untuk mencerminkan prosesor yang paling umum ketika
versi GCC itu 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.

asli
Ini memilih CPU untuk disetel pada waktu kompilasi dengan menentukan prosesor
jenis mesin kompilasi. Menggunakan -mtune=asli akan menghasilkan kode yang dioptimalkan
untuk mesin lokal di bawah batasan set instruksi yang dipilih.
Menggunakan -maret=asli akan mengaktifkan semua subset instruksi yang didukung oleh local
mesin (karenanya hasilnya mungkin tidak berjalan pada mesin yang berbeda).

i386
CPU i386 asli Intel.

i486
CPU i486 Intel. (Tidak ada penjadwalan yang diterapkan untuk chip ini.)

saya586, pentium
CPU Intel Pentium tanpa dukungan MMX.

pentium-mmx
Intel PentiumMMX CPU berdasarkan inti Pentium dengan dukungan set instruksi MMX.

pentiumpro
CPU Intel Pentium Pro.

i686
Sama seperti "generik", tetapi ketika digunakan sebagai opsi "march", set instruksi PentiumPro
akan digunakan, sehingga kode akan berjalan di semua chip keluarga i686.

pentium2
CPU Intel Pentium2 berdasarkan inti PentiumPro dengan dukungan set instruksi MMX.

pentium3, pentium3m
CPU Intel Pentium3 berdasarkan inti PentiumPro dengan set instruksi MMX dan SSE
Dukungan.

pentium-m
Versi daya rendah dari Intel Pentium3 CPU dengan set instruksi MMX, SSE dan SSE2
mendukung. Digunakan oleh notebook Centrino.

pentium4, pentium4m
CPU Intel Pentium4 dengan dukungan set instruksi MMX, SSE dan SSE2.

Prescott
Versi yang ditingkatkan dari Intel Pentium4 CPU dengan instruksi MMX, SSE, SSE2 dan SSE3
mengatur dukungan.

nocona
Versi yang ditingkatkan dari Intel Pentium4 CPU dengan ekstensi 64-bit, MMX, SSE, SSE2 dan
Dukungan set instruksi SSE3.

core2
CPU Intel Core2 dengan ekstensi 64-bit, instruksi MMX, SSE, SSE2, SSE3 dan SSSE3
mengatur dukungan.

inti7
CPU Intel Core i7 dengan ekstensi 64-bit, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 dan
Dukungan set instruksi SSE4.2.

corei7-avx
CPU Intel Core i7 dengan ekstensi 64-bit, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Dukungan set instruksi SSE4.2, AVX, AES dan PCLMUL.

inti-avx-i
Intel Core CPU dengan ekstensi 64-bit, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
Dukungan set instruksi SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND dan F16C.

atom
Intel Atom CPU dengan ekstensi 64-bit, instruksi MMX, SSE, SSE2, SSE3 dan SSSE3
mengatur dukungan.

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.

atlon, atlon-tbird
CPU AMD Athlon dengan MMX, 3dNOW!, 3DNow yang ditingkatkan! dan instruksi prefetch SSE
Dukungan.

atlon-4, athlon-xp, atlon-mp
Peningkatan AMD Athlon CPU dengan MMX, 3DNow!, 3DNow yang ditingkatkan! dan instruksi SSE lengkap
mengatur dukungan.

k8, pilihan, athlon64, atlon-fx
CPU berbasis inti AMD K8 dengan dukungan set instruksi x86-64. (Ini superset MMX,
SSE, SSE2, 3DNow!, 3DNow ditingkatkan! dan ekstensi set instruksi 64-bit.)

k8-sse3, opton-sse3, athlon64-sse3
Versi k8, opteron, dan athlon64 yang ditingkatkan dengan dukungan set instruksi SSE3.

amdfam10, barcelona
CPU berbasis inti Keluarga AMD 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 berbasis inti Keluarga AMD 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, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2,
SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM dan ekstensi set instruksi 64-bit.)

btver1
CPU berbasis inti Keluarga AMD 14h dengan dukungan set instruksi x86-64. (Ini
superset set instruksi MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM dan 64-bit
ekstensi.)

winchip-c6
IDT Winchip C6 CPU, ditangani dengan cara yang sama seperti i486 dengan set instruksi MMX tambahan
Dukungan.

winchip2
IDT Winchip2 CPU, ditangani dengan cara yang sama seperti i486 dengan tambahan MMX dan 3DNow!
dukungan set instruksi.

c3 Melalui CPU C3 dengan MMX dan 3DNow! dukungan set instruksi. (Tidak ada penjadwalan adalah
diimplementasikan untuk chip ini.)

c3-2
Melalui CPU C3-2 dengan dukungan set instruksi MMX dan SSE. (Tidak ada penjadwalan adalah
diimplementasikan untuk chip ini.)

geode
Embedded AMD CPU dengan MMX dan 3DNow! dukungan set instruksi.

Saat memilih tertentu tipe cpu akan menjadwalkan hal-hal dengan tepat untuk itu
chip tertentu, kompiler tidak akan menghasilkan kode apa pun yang tidak berjalan di
jenis mesin default tanpa -maret=tipe cpu opsi yang digunakan. Misalnya, jika
GCC dikonfigurasi untuk i686-pc-linux-gnu lalu -mtune=pentium4 akan menghasilkan kode yang
disetel untuk Pentium4 tetapi akan tetap berjalan pada mesin i686.

-maret=tipe cpu
Hasilkan instruksi untuk jenis mesin tipe cpu. Pilihan untuk tipe cpu adalah
sama seperti untuk -mtune. Selain itu, menentukan -maret=tipe cpu menyiratkan -mtune=tipe cpu.

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

sse Gunakan instruksi floating-point skalar yang ada di set instruksi SSE. Ini
set instruksi didukung oleh Pentium3 dan chip yang lebih baru, di baris AMD oleh
Chip Athlon-4, Athlon-xp dan Athlon-mp. Versi instruksi SSE sebelumnya
set hanya mendukung aritmatika presisi tunggal, sehingga ganda dan diperpanjang-
aritmatika presisi masih dilakukan menggunakan 387. Versi yang lebih baru, hanya ada di
Pentium4 dan chip AMD x86-64 masa depan, mendukung aritmatika presisi ganda
juga.

Untuk kompiler i386, Anda perlu menggunakan -maret=tipe cpu, -pesan or -msse2 switch
untuk mengaktifkan ekstensi SSE dan membuat 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
Keluarkan instruksi asm menggunakan yang dipilih dialek. Pilihan yang didukung adalah intel or untuk
(yang default). Darwin tidak mendukung intel.

-miee-fp
-mno-ieee-fp
Kontrol apakah kompiler menggunakan perbandingan floating-point IEEE atau tidak. Ini
menangani dengan benar kasus di mana hasil perbandingan tidak berurutan.

-msoft-mengapung
Hasilkan output yang berisi panggilan perpustakaan untuk floating point. Peringatan: yang diperlukan
perpustakaan bukan bagian dari GCC. Biasanya fasilitas mesin C . biasa
kompiler digunakan, tetapi ini tidak dapat dilakukan secara langsung dalam kompilasi silang. Kamu harus
membuat pengaturan Anda sendiri untuk menyediakan fungsi perpustakaan yang sesuai untuk lintas
kompilasi.

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 FreeBSD, OpenBSD dan NetBSD. Opsi ini ditimpa ketika -berbaris
menunjukkan bahwa CPU target akan selalu memiliki FPU dan instruksi tidak akan
butuh emulasi. Pada revisi 2.6.1, instruksi ini tidak dibuat kecuali Anda
juga gunakan 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 a 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
akan disejajarkan secara berbeda dari antarmuka biner aplikasi yang diterbitkan
spesifikasi untuk 386 dan tidak akan kompatibel dengan biner dengan struktur dalam kode
dikompilasi tanpa sakelar itu.

-m96bit-panjang-ganda
-m128bit-panjang-ganda
Sakelar ini mengontrol ukuran tipe "ganda panjang". Biner aplikasi i386
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" harus 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, struktur dan
array yang berisi variabel "ganda panjang" akan mengubah ukuran dan fungsinya
konvensi pemanggilan untuk pengambilan fungsi "long double" akan dimodifikasi. Oleh karena itu mereka
tidak akan kompatibel biner dengan array atau struktur dalam kode yang dikompilasi tanpa itu
saklar.

-ambang-data-besar=jumlah
Ketika -mcmodel=sedang ditentukan, data lebih besar dari ambang ditempatkan dalam jumlah besar
bagian data. Nilai ini harus sama di semua objek yang ditautkan ke biner
dan default ke 65535.

-mrtd
Gunakan konvensi pemanggilan fungsi yang berbeda, di mana fungsi yang mengambil tetap
jumlah argumen kembali dengan "ret" num 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 panggilan pertama. 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 akan dihasilkan
untuk panggilan ke fungsi tersebut.

Selain itu, kode yang benar-benar salah akan terjadi 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 Intel x86, -mstackpenyelarasan ulang pilihan akan menghasilkan
prolog dan epilog alternatif yang menyelaraskan run-time stack jika perlu.
Ini mendukung pencampuran kode lama yang menjaga tumpukan selaras 4-byte dengan kode modern
yang menyimpan 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. Anda harus membangun semua modul dengan -batas-tumpukan-mpreferred=3,
termasuk perpustakaan apapun. 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 akan digunakan.

Pada Pentium dan PentiumPro, 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 akan membuat tumpukan tidak sejajar. 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
-mno-mmx
-pesan
-mno-sse
-msse2
-mno-sse2
-msse3
-mno-sse3
-mssse3
-mno-ssse3
-msse4.1
-mno-sse4.1
-msse4.2
-mno-sse4.2
-msse4
-mno-sse4
-mavx
-mno-avx
-mavx2
-mno-avx2
-maes
-mno-aes
-mpclmul
-mno-pclmul
-mfsgsbase
-mno-fsgsbase
-mrdnd
-mno-rdnd
-mf16c
-mno-f16c
-mfma
-mno-fma
-msse4a
-mno-sse4a
-mfma4
-mno-fma4
-mxop
-mno-xop
-mlwp
-mno-lwp
-m3d sekarang
-mno-3dnow
-mpopcnt
-mno-muncul
-mabm
-mno-abm
-mbmi
-mbmi2
-mno-bmi
-mno-bmi2
-mlzcnt
-mno-lzcnt
-mtbm
-mno-tbm
Sakelar ini mengaktifkan atau menonaktifkan penggunaan instruksi di MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, F16C, FMA, SSE4A, FMA4, XOP,
LWP, ABM, BMI, BMI2, LZCNT atau 3DSekarang!
set instruksi diperpanjang. Ekstensi ini juga tersedia sebagai built-in
fungsi: lihat X86 Built-in Fungsi, untuk detail fungsi yang diaktifkan dan
dinonaktifkan oleh sakelar ini.

Agar instruksi SSE/SSE2 dihasilkan secara otomatis dari kode floating-point (sebagai
bertentangan dengan 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 akan memungkinkan GCC untuk menggunakan instruksi yang diperluas ini dalam kode yang dihasilkan,
bahkan tanpa -mfpmat=sse. Aplikasi yang melakukan deteksi CPU run-time harus
kompilasi file terpisah untuk setiap arsitektur yang didukung, menggunakan flag yang sesuai.
Secara khusus, file yang berisi kode deteksi CPU harus dikompilasi tanpa
opsi ini.

-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 serta
hapus 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 akan memungkinkan GCC untuk menggunakan instruksi CMPXCHG16B dalam kode yang dihasilkan.
CMPXCHG16B memungkinkan operasi atom pada data 128-bit double quadword (atau oword)
jenis. Ini berguna untuk penghitung resolusi tinggi yang dapat diperbarui oleh banyak
prosesor (atau inti). Instruksi ini dihasilkan sebagai bagian dari atom built-in
fungsi: lihat __sinkronisasi bawaan or __atomik bawaan untuk rincian.

-msahfi
Opsi ini akan memungkinkan GCC untuk menggunakan instruksi SAHF dalam kode 64-bit yang dihasilkan. Dini
CPU Intel dengan Intel 64 tidak memiliki instruksi LAHF dan SAHF yang didukung oleh AMD64 hingga
pengenalan langkah Pentium 4 G1 pada bulan Desember 2005. LAHF dan SAHF adalah memuat dan menyimpan
instruksi, masing-masing, untuk bendera status tertentu. Dalam mode 64-bit, SAHF
instruksi digunakan untuk mengoptimalkan fungsi bawaan "fmod", "drem" atau "sisa": lihat
Lainnya bawaan untuk rincian.

-mm bergerak
Opsi ini akan memungkinkan GCC menggunakan instruksi movbe untuk mengimplementasikan "__builtin_bswap32"
dan "__builtin_bswap64".

-mcrc32
Opsi ini akan mengaktifkan fungsi bawaan, "__builtin_ia32_crc32qi",
"__builtin_ia32_crc32hi". "__builtin_ia32_crc32si" dan "__builtin_ia32_crc32di" ke
menghasilkan instruksi mesin crc32.

-mrecip
Opsi ini akan memungkinkan GCC untuk menggunakan instruksi RCPSS dan RSQRTSS (dan instruksinya)
varian vektor RCPPS dan RSQRTPS) dengan langkah Newton-Raphson tambahan untuk
tingkatkan presisi alih-alih DIVSS dan SQRTSS (dan varian vektornya) untuk
argumen floating-point presisi tunggal. 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 memungkinkan untuk mengontrol instruksi perkiraan timbal balik mana yang dapat digunakan. memilih
adalah daftar opsi yang dipisahkan koma, yang dapat didahului dengan tanda "!" untuk membalikkan
option: "all": aktifkan semua petunjuk perkiraan, "default": aktifkan default
instruksi, setara dengan -mrecip, "none": nonaktifkan semua petunjuk perkiraan,
setara dengan -mno-resep, "div": mengaktifkan perkiraan untuk pembagian skalar,
"vec-div": aktifkan aproksimasi untuk pembagian vektor, "sqrt": aktifkan
aproksimasi untuk akar kuadrat skalar, "vec-sqrt": aktifkan aproksimasi untuk
akar kuadrat yang divektorkan.

Jadi misalnya, -mrecip=semua,!sqrt akan memungkinkan semua perkiraan timbal balik,
kecuali akar kuadrat.

-mveclibabi=mengetik
Menentukan jenis ABI yang akan digunakan untuk membuat vektor intrinsik menggunakan perpustakaan eksternal.
Jenis yang didukung adalah "svml" untuk perpustakaan matematika vektor pendek Intel dan "acml" untuk
Gaya antarmuka perpustakaan inti matematika AMD. GCC saat ini akan 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 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 saat
-mveclibabi=acml digunakan. Keduanya -ftree-vektorisasi dan optimasi -funsafe-matematika memiliki
untuk diaktifkan. Pustaka yang kompatibel dengan SVML atau ACML ABI harus ditentukan di tautan
waktu.

-mabi=nama
Hasilkan kode untuk konvensi panggilan yang ditentukan. Nilai yang diizinkan adalah: sysv untuk
ABI yang digunakan pada GNU/Linux dan sistem lainnya dan ms untuk Microsoft ABI. Standarnya
adalah menggunakan Microsoft ABI saat menargetkan Windows. Pada semua sistem lain, default
adalah SYSV ABI. Anda dapat mengontrol perilaku ini untuk fungsi tertentu dengan menggunakan
atribut fungsi ms_abi/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 adalah
dihitung dalam prolog fungsi. Ini lebih cepat pada kebanyakan CPU modern karena
mengurangi ketergantungan, meningkatkan penjadwalan, dan mengurangi 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 aktif Mingw32. Kode yang bergantung pada 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 ukuran kode
dan meningkatkan kinerja jika tujuan sudah diselaraskan, 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, menambah ukuran kode,
tetapi dapat meningkatkan kinerja kode yang bergantung pada memcpy cepat, strlen dan memset untuk
panjang 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
Timpa heuristik keputusan internal tentang algoritma tertentu ke string sebaris
operasi dengan. Nilai yang diizinkan adalah "rep_byte", "rep_4byte", "rep_8byte" untuk
memperluas menggunakan awalan "rep" i386 dengan ukuran yang ditentukan, "byte_loop", "loop",
"unrolled_loop" untuk memperluas inline loop, "libcall" untuk selalu memperluas perpustakaan
panggilan.

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

-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 legal atau tidak tergantung pada sistem operasinya, dan apakah itu
memetakan segmen untuk mencakup seluruh area TLS.

Untuk sistem yang menggunakan GNU libc, 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 menempatkan panggilan counter profiling sebelum prolog. Catatan: Aktif
arsitektur x86 atribut "ms_hook_prologue" tidak mungkin saat ini untuk
-mfentry dan -hal.

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

Ini -m switch didukung selain di atas pada prosesor AMD x86-64 di
lingkungan 64-bit.

-m32
-m64
-mx32
Buat kode untuk lingkungan 32-bit atau 64-bit. NS -m32 pilihan set int, panjang dan
pointer ke 32 bit dan menghasilkan kode yang berjalan pada sistem i386 apa pun. NS -m64 Option
set ke 32 bit dan panjang dan pointer ke 64 bit dan menghasilkan kode untuk AMD
arsitektur x86-64. NS -mx32 pilihan set int, panjang dan pointer ke 32 bit dan
menghasilkan kode untuk arsitektur x86-64 AMD. Untuk darwin hanya -m64 pilihan berubah
dari -fno-gambar dan -mdynamic-no-pic Pilihan.

-mno-zona merah
Jangan gunakan apa yang disebut zona merah untuk kode x86-64. Zona merah diamanatkan oleh
x86-64 ABI, ini adalah area 128-byte di luar lokasi penunjuk tumpukan yang akan
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 ini ditautkan di 2 GB yang lebih rendah dari
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
Hasilkan 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.

i386 dan x86-64 Windows Opsi

Opsi tambahan ini tersedia untuk target Windows:

-konsol
Opsi ini tersedia untuk target Cygwin dan MinGW. Ini menentukan bahwa konsol
aplikasi yang akan dihasilkan, dengan menginstruksikan linker untuk mengatur header PE
jenis subsistem yang diperlukan untuk aplikasi konsol. Ini adalah perilaku default untuk
Target Cygwin dan MinGW.

-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 menentukan bahwa makro UNICODE
semakin ditentukan sebelumnya dan bahwa kode startup runtime yang mampu unicode dipilih.

-mwin32
Opsi ini tersedia untuk target Cygwin dan MinGW. Ini menentukan bahwa tipikal
Makro yang ditentukan sebelumnya 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 binari yang berjalan di
mode kernel Windows, karena ada API user32, yang digunakan untuk mengatur executable
hak istimewa, tidak tersedia.

-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 akan diaktifkan secara default jika GCC mendeteksi
bahwa assembler target yang ditemukan selama konfigurasi mendukung fitur tersebut.

Lihat juga di bawah i386 dan x86-64 Opsi untuk opsi standar.

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 DWARF2. 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, merced, 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 akan mengakibatkan
pembuatan instruksi ld.a dan instruksi pemeriksaan yang sesuai (ld.c /
chk.a). Standarnya adalah 'nonaktifkan'.

-msched-ar-data-spesifikasi
-mno-sched-ar-data-spec
(En/Dis)memungkinkan penjadwalan spekulatif data setelah reload. Ini akan menghasilkan generasi
dari 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 akan 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 akan dipilih untuk jadwal hanya jika ada
tidak ada pilihan lain saat ini. Ini akan memanfaatkan spekulasi data
jauh lebih konservatif. Standarnya adalah 'nonaktifkan'.

-mno-sched-prefer-non-control-spec-insns
-msched-prefer-non-control-spec-insns
Jika diaktifkan, instruksi spekulatif kontrol akan dipilih untuk jadwal hanya jika ada
tidak ada pilihan lain saat ini. Ini akan membuat penggunaan spekulasi kontrol
jauh lebih konservatif. Standarnya adalah 'nonaktifkan'.

-mno-sched-count-count-spec-in-critical-path
-msched-count-spec-in-critical-path
Jika diaktifkan, dependensi spekulatif akan dipertimbangkan selama perhitungan
prioritas instruksi. Ini akan 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
Larang lebih dari `msched-max-memory-insns' dalam grup instruksi. Jika tidak, batasi
adalah `lunak' yang berarti bahwa kami lebih memilih operasi non-memori ketika batas tercapai tetapi
mungkin masih menjadwalkan operasi memori.

IA-64/VMS Opsi

Ini -m opsi ditentukan untuk implementasi IA-64/VMS:

-mvms-kembali-kode
Kembalikan kode kondisi VMS dari main. 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.

LM32 Opsi

Ini -m opsi ditentukan untuk arsitektur Lattice Mico32:

-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 register semu berbasis memori yang akan digunakan GCC selama kode
generasi. Pseudo-register ini akan digunakan seperti register asli, jadi ada
tradeoff antara kemampuan GCC untuk memasukkan kode ke dalam register yang tersedia, dan
penalti kinerja menggunakan memori alih-alih register. Perhatikan bahwa semua modul dalam a
program harus dikompilasi dengan nilai yang sama untuk opsi ini. Karena itu, kamu
tidak boleh menggunakan opsi ini dengan pustaka waktu proses default yang dibuat oleh 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 akan 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 akan menghasilkan
instruksi "seth/add3" untuk memuat alamat mereka), dan menganggap subrutin mungkin tidak
dapat dijangkau dengan instruksi "bl" (kompiler akan menghasilkan yang jauh lebih lambat
urutan instruksi "seth/add3/jl").

-msdata=tidak ada
Nonaktifkan penggunaan area data kecil. Variabel akan 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
letakkan di area data kecil dengan atribut "bagian" menggunakan salah satu bagian ini.

-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 alih-alih 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 akan memberikan kesalahan
pesan --- kode yang salah tidak akan 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 akan lebih disukai
kode bersyarat, jika 2, maka yang 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 akan 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__ setiap kali menghasilkan kode untuk target ColdFire.
Grafik 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 51cn 51em 51qe
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_keluarga_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 menyetel 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 __MEMILIKI_68881__ pada M680x0
target 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__ saat 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 akan dihasilkan
untuk panggilan ke fungsi tersebut.

Selain itu, kode yang benar-benar salah akan terjadi 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 akan menyelaraskan struktur yang mengandung
jenis di atas berbeda dari antarmuka biner aplikasi yang paling diterbitkan
spesifikasi 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 akan 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 dijalankan di tempat dan perpustakaan bersama di lingkungan tanpa memori virtual
pengelolaan. Opsi ini menyiratkan -fPIC.

-mno-id-perpustakaan bersama
Hasilkan 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 akan menghasilkan kode yang lebih ringkas, menentukan nilai lain akan
paksa alokasi nomor itu ke perpustakaan saat ini tetapi tidak ada lagi ruang atau
efisien waktu 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 bit-field sebagai int-sized.

-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 - rata-rata, perkalian, pembagian, operasi 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 akan ditempatkan di bagian ".based" oleh
bawaan. Variabel berbasis menggunakan register $tp sebagai register dasar, dan ada
Batas 128-byte ke bagian ".based".

-mbitop
Mengaktifkan instruksi operasi bit - uji bit ("btstm"), set ("bsetm"), hapus
("bclrm"), invert ("bnotm"), dan test-and-set ("tas").

-mc=nama
Memilih bagian mana data konstan akan ditempatkan. nama mungkin "kecil", "dekat", atau
"jauh".

-mklip
Mengaktifkan instruksi "klip". Perhatikan bahwa "-mclip" tidak berguna kecuali Anda juga
berikan "-mminmax".

-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 default adalah "default".

-mcop
Mengaktifkan instruksi koprosesor. Secara default, ini adalah koprosesor 32-bit. Catatan
bahwa koprosesor biasanya diaktifkan melalui opsi "-mconfig=".

-mcop32
Mengaktifkan instruksi koprosesor 32-bit.

-mcop64
Mengaktifkan instruksi koprosesor 64-bit.

-mivc2
Mengaktifkan penjadwalan IVC2. IVC2 adalah koprosesor VLIW 64-bit.

-mdc
Menyebabkan variabel konstan ditempatkan di bagian ".near".

-mdiv
Mengaktifkan instruksi "div" dan "divu".

-meb
Hasilkan kode big-endian.

-mel
Hasilkan kode little-endian.

-mio-volatil
Memberi tahu kompiler bahwa variabel apa pun yang ditandai dengan atribut "io" harus menjadi
dianggap fluktuatif.

-ml Menyebabkan variabel ditetapkan ke bagian ".far" secara default.

-mleadz
Mengaktifkan instruksi "leadz" (nol awal).

-mm Menyebabkan variabel ditetapkan ke bagian ".near" secara default.

-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 pustaka waktu proses 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 akan 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 jadwalkan kode untuk CPU yang diberikan. Nilai yang didukung ada dalam format
vX.YY.Z, Di mana X adalah versi utama, YY adalah versi minor, dan Z adalah kompatibilitas
kode. 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. Gunakan -fstack-check 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.

-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 menjadi 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 akan berjalan pada lengkungan, yang bisa menjadi nama ISA MIPS generik, atau
nama prosesor tertentu. Nama-nama ISA adalah: mips1, mips2, mips3, mips4,
mips32, mips32r2, mips64 dan mips64r2. 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, 74kc, 74kf2_1, 74kf1_1, 74kf3_2, 1004kc, 1004kf2_1,
1004kf1_1, loongson2e, loongson2f, loongson3a, M4K, okteon, okteon+, okteon2, orion,
r2000, r3000, r3900, r4000, r4400, r4600, r4650, r6000, r8000, rm7000, rm9000, r10000,
r12000, r14000, r16000, sb1, sr71000, vr4100, vr4111, vr4120, vr4130, vr4300, vr5000,
vr5400, vr5500 dan xlr. Nilai khusus dari-abi memilih yang paling kompatibel
arsitektur untuk ABI yang dipilih (yaitu, mips1 untuk ABI 32-bit dan mips3 untuk 64-bit
ABI).

Rantai alat Linux/GNU dan IRIX asli juga mendukung nilai asli, yang memilih
pilihan arsitektur terbaik untuk prosesor host. -maret=asli tidak berpengaruh jika GCC
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 akan diatur _MIPS_ARCH untuk "r2000" dan tentukan makro _MIPS_ARCH_R2000.

Perhatikan bahwa _MIPS_ARCH makro menggunakan nama prosesor yang diberikan di atas. Dengan kata lain,
itu akan memiliki awalan penuh dan tidak akan menyingkat 000 as k. Dalam kasus dari-
abi, makro menamai arsitektur yang diselesaikan (baik "mips1" or "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 untuk prosesor yang ditentukan oleh -berbaris.
Dengan menggunakan -berbaris dan -mtune bersama-sama, dimungkinkan untuk menghasilkan kode yang akan berjalan pada
keluarga prosesor, tetapi optimalkan kode untuk satu anggota tertentu itu
keluarga.

-mtune mendefinisikan makro _MIPS_TUNE dan _MIPS_TUNE_foo, yang bekerja dengan cara yang sama seperti
itu -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.

-mips32r2
Setara dengan -maret=mips32r2.

-mips64
Setara dengan -maret=mips64.

-mips64r2
Setara dengan -maret=mips64r2.

-mips16
-mno-mips16
Hasilkan (jangan buat) kode MIPS16. Jika GCC menargetkan MIPS32 atau MIPS64
arsitektur, itu akan menggunakan 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-mips16
-mno-interlink-mips16
Mengharuskan (tidak memerlukan) kode non-MIPS16 agar kompatibel dengan tautan dengan kode MIPS16.

Misalnya, kode non-MIPS16 tidak dapat langsung melompat ke kode MIPS16; itu harus menggunakan a
panggilan atau lompatan tidak langsung. -minterlink-mips16 oleh karena itu menonaktifkan lompatan langsung kecuali
GCC tahu bahwa target lompatan bukanlah MIPS16.

-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 mthc1 dan mfhc1 instruksi dan karena itu hanya didukung untuk
Prosesor MIPS32R2.

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, tetapi semua 64 bit
disimpan.

-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 akan
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 akan bekerja jika GOT lebih kecil dari sekitar 64k.
Apa pun yang lebih besar akan menyebabkan penaut melaporkan kesalahan seperti:

relokasi dipotong agar sesuai: R_MIPS_GOT16 foobar

Jika ini terjadi, Anda harus mengkompilasi ulang kode Anda dengan -mxgot. Itu kemudian harus bekerja dengan
GOT yang sangat besar, meskipun juga akan kurang efisien, karena akan memakan waktu 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.

-mhard-mengambang
Gunakan instruksi koprosesor floating-point.

-msoft-mengapung
Jangan gunakan instruksi koprosesor floating-point. Menerapkan floating-point
perhitungan menggunakan panggilan perpustakaan sebagai gantinya.

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

-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 akan menggunakan instruksi jika:
arsitektur target 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. Hal ini juga
mendefinisikan __mips_dsp_rev ke 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.

-mmt
-mno-mt
Gunakan (jangan gunakan) instruksi MT Multithreading.

-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 mengakses data dengan lebih efisien; 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 akan berada di bagian data kecil jika
data tersebut berada di 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 akan melewatkan nilai yang tidak diketahui dalam $gp.
(Dalam situasi seperti itu, monitor boot itu sendiri biasanya akan 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
is -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.

-bingung-gila
-mno-menyatu-madd
Aktifkan (nonaktifkan) penggunaan instruksi penggandaan-akumulasi titik-mengambang, ketika mereka
tersedia. Standarnya adalah -bingung-gila.

Ketika instruksi multi-akumulasi digunakan, produk antara dihitung
presisi tak terbatas dan tidak tunduk pada bit FCSR Flush to Zero. Ini mungkin
tidak diinginkan dalam beberapa keadaan.

-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-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 disisipkan di antara pasangan-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 akan 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 akan 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 akan 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_fungsi or __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 akan dihasilkan secara default karena MIPS32 dan
Arsitektur MIPS64 secara khusus tidak lagi menggunakannya.

-mfp-pengecualian
-mno-fp-pengecualian
Menentukan apakah pengecualian FP diaktifkan. Ini memengaruhi cara kami menjadwalkan FP
instruksi 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 pasangan instruksi yang menurutnya harus dijalankan 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) akan dibuat ketika
"__builtin___clear_cache()" dikompilasi.

Opsi ini default ke "-mno-synci", tetapi default dapat diganti dengan mengkonfigurasi
dengan "--dengan-synci".

Saat mengkompilasi kode untuk sistem prosesor tunggal, biasanya aman untuk menggunakan "synci".
Namun, pada banyak sistem multi-core (SMP), itu tidak akan 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 direktif perakitan ".reloc" dan "-meplicit-relocs" ada di
memengaruhi. Dengan "-mno-explicit-relocs", optimasi ini dapat dilakukan oleh
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 prototipe akan menghasilkan 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 __TIDAK_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 __TIDAK_SETLB__.

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 akan
berjalan di salah satu jenis AE lainnya. Kode tidak akan seefisien jika
dikompilasi untuk jenis AE tertentu, dan beberapa jenis operasi (misalnya, perkalian)
tidak akan bekerja dengan baik 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 akan menghasilkan program yang lebih besar, yang berjalan lebih cepat daripada saat opsi tidak
digunakan. Namun, hasilnya bervariasi dari satu program ke program lainnya, sehingga dibiarkan sebagai pengguna
pilihan, 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 akan dibuat yang menunjukkan ke
programmer bahwa mereka harus menulis ulang kode untuk menghindari operasi byte, atau untuk menargetkan
Jenis AE yang memiliki dukungan perangkat keras yang diperlukan. Opsi ini memungkinkan peringatan untuk
dimatikan.

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
"none", yang menggunakan fungsi perkalian perangkat lunak. Opsi "g13" adalah untuk
perangkat keras kalikan/bagi periferal hanya pada target RL78/G13. Opsi "rl78"
adalah untuk perkalian perangkat keras standar yang ditentukan dalam manual perangkat lunak RL78.

IBM RS / 6000 dan PowerPC Opsi

Ini -m opsi ditentukan untuk IBM RS/6000 dan PowerPC:

-kekuatan
-mno-kekuatan
-kekuatan2
-mno-kekuatan2
-mpowerpc
-mno-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
GCC mendukung dua arsitektur set instruksi terkait untuk RS/6000 dan PowerPC.
Grafik DAYA set instruksi adalah instruksi yang didukung oleh sungai set chip yang digunakan
dalam sistem RS/6000 asli dan PowerPC set instruksi adalah arsitektur dari
mikroprosesor Freescale MPC5xx, MPC6xx, MPC8xx, dan IBM 4xx, 6xx, dan
mikroprosesor selanjutnya.

Tidak ada arsitektur yang merupakan bagian dari yang lain. Namun ada subset umum yang besar
instruksi yang didukung oleh keduanya. Register MQ termasuk dalam prosesor
mendukung arsitektur POWER.

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.

Grafik -kekuatan opsi memungkinkan GCC untuk menghasilkan instruksi yang hanya ditemukan di
arsitektur POWER dan menggunakan register MQ. Menentukan -kekuatan2 menyiratkan -Listrik dan
juga memungkinkan GCC untuk menghasilkan instruksi yang ada dalam arsitektur POWER2
tetapi bukan arsitektur POWER yang asli.

Grafik -mpowerpc opsi memungkinkan GCC untuk menghasilkan instruksi yang hanya ditemukan di
Subset 32-bit dari arsitektur PowerPC. Menentukan -mpowerpc-gpopt menyiratkan
-mpowerpc dan juga memungkinkan GCC untuk menggunakan instruksi arsitektur PowerPC opsional di
grup Tujuan Umum, termasuk akar kuadrat titik-mengambang. Menentukan
-mpowerpc-gfxopt menyiratkan -mpowerpc dan juga memungkinkan GCC untuk menggunakan PowerPC opsional
instruksi arsitektur dalam grup Grafik, termasuk pemilihan titik-mengambang.

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

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

Jika Anda menentukan keduanya -mno-kekuatan dan -mno-powerpc, GCC hanya akan menggunakan instruksi di
subset umum dari kedua arsitektur ditambah beberapa panggilan mode umum AIX khusus, dan
tidak akan menggunakan register MQ. Menentukan keduanya -kekuatan dan -mpowerpc mengizinkan GCC untuk
menggunakan instruksi apa pun dari arsitektur mana pun dan mengizinkan penggunaan register MQ;
tentukan ini untuk Motorola MPC601.

-mnew-mnemonik
-mnemonik-cetakan
Pilih mnemonik mana yang akan digunakan dalam kode assembler yang dihasilkan. Dengan -mnew-mnemonik,
GCC menggunakan mnemonik assembler yang ditentukan untuk arsitektur PowerPC. Dengan
-mnemonik-cetakan ia menggunakan mnemonik assembler yang ditentukan untuk arsitektur POWER.
Instruksi yang didefinisikan hanya dalam satu arsitektur hanya memiliki satu mnemonic; GCC menggunakan itu
mnemonic terlepas dari opsi mana yang ditentukan.

GCC default ke mnemonik yang sesuai untuk arsitektur yang digunakan. Menentukan
-mcpu=tipe_cpu terkadang menimpa nilai opsi ini. Kecuali Anda sedang membangun
kompiler silang, Anda biasanya juga tidak boleh menentukan -mnew-mnemonik or
-mnemonik-cetakan, tetapi sebaliknya harus menerima default.

-mcpu=tipe_cpu
Tetapkan tipe arsitektur, penggunaan register, pilihan mnemonik, dan penjadwalan instruksi
parameter 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, ec603e, G3, G4, G5, titan, kekuasaan, power2, power3, power4, power5,
kekuatan5+, power6, kekuatan6x, power7, umum, komputer listrik, powerpc64, sungai, sungai1, sungai2, RSC,
dan rs64.

-mcpu=umum memilih prosesor yang sepenuhnya generik. Kode yang dihasilkan di bawah opsi ini
akan berjalan pada prosesor POWER atau PowerPC apa pun. GCC hanya akan menggunakan instruksi di
subset umum dari kedua arsitektur, dan tidak akan menggunakan register MQ. GCC mengasumsikan
model prosesor generik untuk tujuan penjadwalan.

-mcpu=kekuatan, -mcpu = daya2, -mcpu=powerpc, dan -mcpu=powerpc64 tentukan POWER generik,
POWER2, ​​PowerPC 32-bit murni (yaitu, bukan MPC601), dan arsitektur PowerPC 64-bit
jenis mesin, dengan model prosesor generik yang sesuai yang diasumsikan untuk penjadwalan
tujuan.

Opsi lain menentukan prosesor tertentu. Kode yang dihasilkan di bawah opsi tersebut
akan berjalan paling baik pada prosesor itu, dan mungkin tidak berjalan sama sekali pada prosesor lainnya.

Grafik -mcpu opsi secara otomatis mengaktifkan atau menonaktifkan opsi berikut:

-maltivec -mfprnd -mhard-mengambang -mmfcrf -banyak -mnew-mnemonik -mpopcntb
-mpopcntd -kekuatan -kekuatan2 -mpowerpc64 -mpowerpc-gpopt -mpowerpc-gfxopt
-mengambang tunggal -mmengambang ganda -simple-fpu -mstring -mmulhw -mdlmzb -mmfpgpr -mvsx

Opsi tertentu yang ditetapkan untuk CPU tertentu akan 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, penggunaan register, atau pilihan mnemonik, seperti -mcpu=tipe_cpu
akan. Nilai yang sama untuk tipe_cpu digunakan untuk -mtune seperti untuk -mcpu. Jika keduanya
ditentukan, kode yang dihasilkan akan menggunakan arsitektur, register, dan set mnemonik
by -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.

-MVRSave
-mno-vrsave
Hasilkan instruksi VRSAVE saat membuat kode AltiVec.

-mgen-sel-mikrokode
Hasilkan instruksi mikrokode Sel

-mwarn-sel-mikrokode
Peringatan ketika instruksi mikrokode Sel akan dipancarkan. Contoh Sel
instruksi mikrokode adalah pergeseran variabel.

-msecure-plt
Hasilkan kode yang memungkinkan ld dan ld.so untuk membangun file yang dapat dieksekusi dan perpustakaan bersama dengan
non-exec .plt dan .got bagian. Ini adalah opsi PowerPC 32-bit SYSV ABI.

-mbss-plt
Buat kode yang menggunakan bagian .plt BSS yang diisi ld.so, dan memerlukan .plt dan
.got bagian yang dapat ditulis dan dieksekusi. Ini adalah SYSV PowerPC 32-bit
opsi 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.

-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
akan mengalokasikan setidaknya satu entri TOC untuk setiap referensi variabel non-otomatis yang unik
dalam program Anda. GCC juga akan menempatkan konstanta floating-point di TOC. Namun,
hanya 16,384 entri yang 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 akan menghasilkan kode yang lebih lambat dan
lebih besar tetapi yang menggunakan ruang TOC sangat sedikit. Anda mungkin ingin menggunakan opsi ini
hanya pada 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 dan
-mpowerpc, 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
Tentukan jenis unit floating-point. Nilai yang valid adalah sp_lite (setara dengan
-mssingle-float -msimple-fpu), dp_lite (setara dengan -mdouble-float -msimple-fpu),
sp_penuh (setara dengan -mssingle-float), dan dp_penuh (setara dengan -mdouble-float).

-mxilinx-fpu
Lakukan optimasi untuk unit floating-point pada Xilinx PPC 405/440.

-banyak
-mno-banyak
Hasilkan kode yang menggunakan (tidak menggunakan) memuat banyak instruksi kata dan
menyimpan beberapa instruksi kata. Instruksi ini dibuat secara default pada
sistem POWER, dan tidak dihasilkan pada sistem PowerPC. Jangan gunakan -banyak sedikit-
sistem PowerPC endian, karena instruksi tersebut tidak berfungsi saat prosesor dalam
modus little-endian. Pengecualiannya adalah PPC740 dan PPC750 yang mengizinkan ini
instruksi dalam mode little-endian.

-mstring
-mno-string
Hasilkan kode yang menggunakan (tidak menggunakan) instruksi string beban dan penyimpanan
instruksi kata string untuk menyimpan beberapa register dan melakukan gerakan blok kecil. Ini
instruksi dihasilkan secara default pada sistem POWER, dan tidak dibuat pada PowerPC
sistem. Jangan gunakan -mstring pada sistem PowerPC little-endian, karena itu
instruksi tidak bekerja saat prosesor dalam mode little-endian. Pengecualian
adalah PPC740 dan PPC750 yang mengizinkan instruksi ini dalam mode little-endian.

-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 akan 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/2 untuk menetapkan tidak/tertinggi/tertinggi kedua prioritas untuk mengirim slot dibatasi
petunjuk.

-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 beban mahal, simpan_ke_muat: ada
ketergantungan dari toko ke beban mahal, jumlah: ketergantungan apa pun yang latensinya >=
jumlah mahal.

-minsert-sched-nops=skema
Opsi ini mengontrol skema penyisipan nop mana yang akan digunakan selama detik
penjadwalan lulus. Argumen skema mengambil salah satu dari nilai berikut: tidak: Jangan
masukkan nops. bantalan: Pad dengan nops grup pengiriman apa pun yang memiliki slot masalah kosong,
sesuai dengan pengelompokan scheduler. mengelompokkan kembali_tepat: Masukkan nops untuk memaksa mahal
losmen tergantung ke dalam kelompok yang terpisah. Masukkan persis sebanyak mungkin nops yang diperlukan untuk memaksa
sebuah penginapan ke grup baru, menurut perkiraan pengelompokan prosesor. jumlah: Memasukkan
tidak untuk memaksa losmen bergantung yang mahal ke dalam kelompok terpisah. Memasukkan jumlah tidak untuk
memaksa penginapan 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.

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

-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 diteruskan di floating-point
register jika fungsi mengambil argumen variabel. Dengan -mprototipe, hanya panggilan
untuk fungsi argumen variabel prototipe akan 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 PPC_EMB bit di header bendera 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 dari Sistem V.4
spesifikasi. 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, lakukan
tidak memanggil fungsi inisialisasi dari "main", dan -msdata pilihan hanya akan 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 .sdata2 bagian, yang ditunjuk oleh register "r2". Letakkan kecil
menginisialisasi data global dan statis non-"const" di .sdata bagian, yang menunjuk
untuk dengan mendaftar "r13". Masukkan data global dan statis kecil yang tidak diinisialisasi ke dalam .sbss
bagian yang berbatasan dengan .sdata bagian. NS -msdata=eabi pilihannya adalah
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
.sdata bagian, yang ditunjuk oleh register "r13". Letakkan global kecil yang tidak diinisialisasi
dan data statis dalam .sbss bagian yang berbatasan 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 ke dalam .sdata
bagian. Masukkan data global kecil yang tidak diinisialisasi di .sbss bagian. 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, masukkan semua data global dan statis yang diinisialisasi ke dalam .data
bagian, dan semua data yang tidak diinisialisasi di .bss bagian.

-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 bagian data atau bss normal.
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 menganggap bahwa semua panggilan jauh sehingga panggilan lebih lama lebih mahal
urutan diperlukan. Ini diperlukan untuk panggilan lebih dari 32 megabita
(33,554,432 byte) dari lokasi saat ini. Panggilan singkat akan 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" akan menghasilkan "jbsr callee, L42", plus a
"pulau cabang" (kode lem). Dua alamat target mewakili callee dan
"pulau cabang". Penaut Darwin/PPC akan memilih alamat pertama dan menghasilkan a
"bl callee" jika instruksi "bl" PPC akan mencapai callee secara langsung; jika tidak,
linker akan menghasilkan "bl L42" untuk memanggil "pulau cabang". "Pulau cabang" adalah
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, kami dapat menyebabkan GCC mengabaikan semua spesifikasi panggilan panjang saat penaut
diketahui menghasilkan lem.

-mtls-spidol
-mno-tls-spidol
Tandai (jangan tandai) panggilan ke "__tls_get_addr" dengan relokasi yang menentukan fungsi
argumen. Relokasi memungkinkan ld untuk secara andal mengaitkan panggilan fungsi dengan argumen
petunjuk penyiapan untuk pengoptimalan TLS, yang pada gilirannya memungkinkan gcc untuk menjadwalkan dengan lebih baik
urutannya.

-utas
Menambahkan dukungan untuk multithreading dengan utas Perpustakaan. Opsi ini menetapkan tanda untuk
baik preprocessor maupun linker.

-mrecip
-mno-resep
Opsi ini akan memungkinkan GCC untuk menggunakan estimasi timbal balik dan akar kuadrat timbal balik
memperkirakan instruksi dengan langkah-langkah Newton-Raphson tambahan untuk meningkatkan presisi
alih-alih melakukan pembagian atau akar kuadrat dan pembagian untuk argumen titik-mengambang. Anda
harus menggunakan -cepat-matematika pilihan saat menggunakan -mrecip (atau setidaknya
optimasi -funsafe-matematika, -terbatas-matematika-saja, -freciprocal-matematika dan
-fno-perangkap-matematika). Perhatikan bahwa sementara throughput dari urutan umumnya
lebih tinggi dari throughput instruksi non-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 memungkinkan untuk mengontrol instruksi perkiraan timbal balik mana yang dapat digunakan. memilih
adalah daftar opsi yang dipisahkan koma, yang dapat didahului dengan tanda "!" untuk membalikkan
option: "all": aktifkan semua petunjuk perkiraan, "default": aktifkan default
instruksi, setara dengan -mrecip, "none": nonaktifkan semua petunjuk perkiraan,
setara dengan -mno-resep; "div": aktifkan instruksi perkiraan timbal balik untuk
presisi tunggal dan ganda; "divf": mengaktifkan resiprokal presisi tunggal
instruksi perkiraan; "divd": aktifkan resiprokal presisi ganda
instruksi perkiraan; "rsqrt": aktifkan pendekatan akar kuadrat timbal balik
instruksi untuk presisi tunggal dan ganda; "rsqrtf": aktifkan single-
instruksi aproksimasi akar kuadrat timbal balik presisi; "rsqrtd": aktifkan
instruksi aproksimasi akar kuadrat timbal balik presisi ganda;

Jadi misalnya, -mrecip=semua,!rsqrtd akan 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 or
-mcpu = daya7 otomatis memilih -mrecip-presisi. Kotak presisi ganda
instruksi perkiraan root tidak dihasilkan secara default pada mesin presisi rendah,
karena mereka tidak memberikan perkiraan yang konvergen setelah tiga langkah.

-mveclibabi=mengetik
Menentukan jenis ABI yang akan digunakan untuk membuat vektor intrinsik menggunakan perpustakaan eksternal.
Satu-satunya jenis yang didukung saat ini adalah "mass", yang menetapkan untuk menggunakan IBM
Pustaka Subsistem Akselerasi Matematika (MASS) untuk membuat vektor intrinsik menggunakan
perpustakaan eksternal. GCC saat ini akan 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 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) kapan
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
daftar r2, dan nilai rantai statis untuk dimuat dalam register r11. itu
-mpointer-ke-bersarang-fungsi aktif secara default. Anda tidak akan dapat menelepon melalui
pointer ke fungsi bersarang atau pointer ke fungsi yang dikompilasi dalam bahasa lain yang
gunakan 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.

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 RX600 seri dan dinonaktifkan untuk RX200 series.

Instruksi floating-point hanya akan dihasilkan untuk nilai floating-point 32-bit
Namun, jadi jika -m64bit-ganda opsi sedang digunakan maka perangkat keras FPU tidak akan
digunakan untuk ganda.

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

Grafik 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 yang dulu bisa disimpan di register yang dipesan sekarang
didorong ke tumpukan.

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 menghasilkan itu bukan opsi 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 akan
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" akan menjadi
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 apa pun
mendaftar.

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

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 akan memastikan bahwa itu hanya menggunakan
mendaftarkan "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 akan 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
akan digunakan untuk melakukan operasi titik-mengambang desimal. Kapan -mhard-dfp is
ditentukan, kompiler menghasilkan instruksi perangkat keras titik-mengambang desimal. Ini
adalah default 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 akan 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 dan z10. Saat membuat kode menggunakan instruksi yang 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 adalah
umumnya ide yang buruk dengan ukuran tumpukan terbatas.

-mstack-penjaga=penjaga tumpukan
-ukuran-mstack=ukuran tumpukan
Jika opsi ini disediakan, bagian belakang s390 mengeluarkan instruksi tambahan di
fungsi prolog yang memicu jebakan jika ukuran tumpukan adalah penjaga tumpukan byte di atas
itu ukuran tumpukan (ingat bahwa tumpukan pada s390 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 produksi seperti sistem 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.

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 menghasilkan instruksi bcnz.

-muls
Aktifkan menghasilkan 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.

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

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

-mhitachi
Patuhi konvensi panggilan yang ditentukan oleh Renesas.

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

-miee
-mno-ieee
Kontrol kepatuhan IEEE dari perbandingan floating-point, yang memengaruhi penanganan
kasus di mana hasil perbandingan tidak berurutan. Secara default -miee is
secara implisit diaktifkan. Jika -finite-matematika-saja diaktifkan -mno-ieee ditetapkan secara implisit,
yang menghasilkan lebih cepat floating-point lebih besar-sama dan perbandingan kurang-sama. NS
pengaturan implisit dapat diganti dengan menentukan baik -miee or -mno-ieee.

-minline-ic_invalidate
Kode sebaris untuk membatalkan entri cache instruksi setelah mengatur fungsi bersarang
trampolin. Opsi ini tidak berpengaruh jika -musermode sedang berlaku dan dipilih
opsi pembuatan kode (misalnya -m4) tidak mengizinkan penggunaan instruksi icbi. Jika
opsi pembuatan kode yang dipilih tidak memungkinkan penggunaan instruksi icbi,
dan -musermode tidak berlaku, kode inline akan memanipulasi instruksi
array alamat cache secara langsung dengan penulisan asosiatif. Ini tidak hanya membutuhkan
mode istimewa, tetapi juga akan gagal jika garis cache telah dipetakan melalui TLB
dan menjadi tidak terpetakan.

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

-msoft-atom
Hasilkan urutan atom perangkat lunak gUSA yang kompatibel dengan GNU/Linux untuk atom bawaan
fungsi. Urutan atom yang dihasilkan memerlukan dukungan dari interupsi /
kode penanganan pengecualian sistem dan hanya cocok untuk sistem inti tunggal.
Mereka tidak akan bekerja dengan benar pada sistem multi-core. Opsi ini diaktifkan oleh
default ketika targetnya adalah "sh-*-linux*". Untuk detail tentang atom bawaan
fungsi lihat __atomik bawaan.

-mspace
Optimalkan ruang alih-alih kecepatan. Disiratkan oleh -Os.

-prefergot
Saat membuat kode posisi-independen, pancarkan panggilan fungsi menggunakan Global Offset
Tabel bukan Tabel Linkage Prosedur.

-mode pengguna
Jangan buat kode khusus mode saja; menyiratkan -mno-inline-ic_invalidate jika
kode sebaris tidak akan berfungsi dalam mode pengguna. Ini adalah default ketika targetnya adalah
"sh-*-linux*".

-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 akan 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 instruksi pergeseran dinamis akan
default ke "panggilan-div1".

Ketika strategi divisi belum ditentukan, strategi default akan dipilih
berdasarkan target saat ini. Untuk SH2A, strategi default adalah menggunakan "divs" dan
instruksi "divu" 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 memengaruhi nama yang digunakan dalam strategi pembagian panggilan dan inv:panggilan, dan
kompiler masih akan mengharapkan set register input/output/clobbered yang sama seolah-olah
opsi ini tidak ada.

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

-menyesuaikan-membuka gulungan
Pembukaan throttle untuk menghindari meronta-ronta register target. Opsi ini hanya memiliki
efek jika basis kode gcc mendukung kait target TARGET_ADJUST_UNROLL_MAX.

-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
Tetapkan 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 akan menghasilkan jadwal yang lebih baik
kode, tetapi tidak aman pada perangkat keras saat ini. Definisi arsitektur saat ini mengatakan
bahwa ptabs dan ptrel jebakan ketika target dan dengan 3 adalah 3. Ini memiliki
efek yang tidak disengaja sehingga tidak aman untuk menjadwalkan ptabs / ptrel sebelum cabang, atau
mengangkatnya keluar dari lingkaran. Misalnya, __do_global_ctors, bagian dari libgcc yang berjalan
konstruktor pada startup program, memanggil fungsi dalam daftar yang dibatasi oleh -1.
Dengan opsi -mpt-fixed, ptab akan dilakukan sebelum pengujian terhadap -1. Itu
berarti bahwa semua konstruktor akan dijalankan sedikit lebih cepat, tetapi ketika loop datang ke
akhir daftar, program macet karena ptabs memuat -1 ke target
daftar. Karena opsi ini tidak aman untuk perangkat keras apa pun yang mengimplementasikan arus
spesifikasi arsitektur, defaultnya adalah -mno-pt-fixed. Kecuali jika pengguna menentukan
biaya tertentu dengan -mgettrcost, -mno-pt-fixed juga menyiratkan -mgettrbiaya=100; ini
menghalangi alokasi register menggunakan register target untuk menyimpan bilangan bulat biasa.

-minvalid-simbol
Asumsikan simbol mungkin tidak valid. Simbol fungsi biasa yang dihasilkan oleh kompiler
akan selalu valid untuk dimuat dengan movi/shori/ptabs atau movi/shori/ptrel, tetapi dengan
trik assembler dan/atau linker dimungkinkan untuk menghasilkan simbol yang akan menyebabkan
ptabs / ptrel untuk menjebak. Pilihan ini hanya berarti ketika -mno-pt-diperbaiki dalam
memengaruhi. Ini kemudian akan mencegah cross-basic-block cse, hoisting dan sebagian besar penjadwalan
beban simbol. Standarnya adalah -mno-tidak valid-simbol.

-biaya-cabang=num
Asumsikan num menjadi biaya untuk instruksi cabang. Angka yang lebih tinggi akan membuat
kompiler mencoba menghasilkan lebih banyak kode bebas cabang jika memungkinkan. Jika tidak ditentukan
nilai dipilih tergantung pada jenis prosesor yang sedang dikompilasi.

-mcbranchdi
Aktifkan pola instruksi "cbranchdi4".

-mcmpeqdi
Pancarkan pola instruksi "cmpeqdi_t" bahkan ketika -mcbranchdi sedang berlaku.

-bingung-gila
Izinkan penggunaan instruksi "fmac" (floating-point multiply-accumulate) jika:
jenis prosesor mendukungnya. Mengaktifkan opsi ini dapat menghasilkan kode yang menghasilkan
hasil floating-point numerik yang berbeda dibandingkan dengan aritmatika IEEE 754 yang ketat.

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

-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 akan memicu penyalinan
on-write, dan objek yang dibagikan sebenarnya tidak 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 akan 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.

-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
tidak akan 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, 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

v8 supersparc, hipersparc, leon

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

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, f930, f934, sparclite86x, tsc701, ultrasparc,
ultrasparc3, Niagara, niagara2, niagara3 dan niagara4. Dengan Solaris asli dan
rantai alat GNU/Linux, 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 itu
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 itu
mendukung instruksi tersebut, seperti niagara-3 dan yang lebih baru. Pengaturan -mvis3 juga mengatur
-mvis2 dan -mvis.

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

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 akan memberikan
kesalahan ketika menghasilkan kode yang membutuhkan relokasi dinamis. -mno-kesalahan-relokasi
menonaktifkan kesalahan, -mwarn-relokasi akan 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. Pengguna biasanya
atasi masalah ini menggunakan kata kunci yang mudah menguap, tetapi itu dapat menyebabkan kode yang tidak efisien
di tempat-tempat di mana memori diketahui tidak berubah. Daripada menandai memori sebagai
volatile kami memperlakukan instruksi DMA sebagai berpotensi mempengaruhi semua memori. Dengan
-Munsafe-DMA pengguna harus menggunakan kata kunci yang mudah menguap untuk melindungi akses memori.

-petunjuk-cabang
Secara default, GCC akan menghasilkan instruksi petunjuk cabang untuk menghindari kemacetan pipa untuk
selalu diambil atau mungkin diambil cabang. Petunjuk tidak akan 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, GCC akan menautkan
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 perubahan 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 akan 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 akan lebih banyak
efisien. Perilaku default adalah menggunakan pembaruan atom.

-mdual-tidak
-mdual-nops=n
Secara default, GCC akan memasukkan nops untuk meningkatkan masalah ganda ketika mengharapkannya meningkat
kinerja. n dapat berupa nilai dari 0 hingga 10. Lebih kecil n akan memasukkan lebih sedikit nops. 10
adalah default, 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 akan memasukkan 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 itu berlaku. Secara default, GCC memastikannya ada di dalam
125.

-msafe-petunjuk
Mengatasi bug perangkat keras yang menyebabkan SPU terhenti tanpa batas. Secara default, GCC
akan memasukkan instruksi "hbrp" untuk memastikan hal ini tidak 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:

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

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,
kompiler akan selalu memuat alamat fungsi ke dalam register, dan memanggil 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.

-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 akan menyebabkan r2 dan r5 digunakan dalam kode yang dihasilkan oleh kompiler.
Pengaturan ini adalah default.

-mno-aplikasi-regs
Opsi ini akan menyebabkan r2 dan r5 diperlakukan sebagai register tetap.

-mv850e2v3
Tentukan bahwa prosesor target adalah V850E2V3. Konstanta praprosesor
__v850e2v3__ akan ditentukan jika opsi ini digunakan.

-mv850e2
Tentukan bahwa prosesor target adalah V850E2. Konstanta praprosesor
__v850e2__ akan ditentukan jika opsi ini digunakan.

-mv850e1
Tentukan bahwa prosesor target adalah V850E1. Konstanta praprosesor
__v850e1__ dan __v850e__ akan 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__
akan ditentukan jika opsi ini digunakan.

Jika tidak -mv850 maupun -mv850e maupun -mv850e1 maupun -mv850e2 maupun -mv850e2v3 didefinisikan
maka prosesor target default akan dipilih dan yang relevan __v850*__ preprosesor
konstan akan ditentukan.

Konstanta praprosesor __v850 dan __v851__ selalu didefinisikan, terlepas dari yang mana
varian prosesor adalah targetnya.

-Mdisable-callt
Opsi ini akan menekan pembuatan instruksi CALLT untuk v850e, v850e1,
v850e2 dan v850e2v3 rasa arsitektur v850. Standarnya adalah
-mno-nonaktifkan-panggilan yang memungkinkan instruksi CALLT digunakan.

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 itu, dengan asumsi Anda akan merakit dengan
perakit GNU.

-mg Kode keluaran untuk angka titik-mengambang format-G alih-alih format-D.

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-64 Opsi

Ini terdaftar di bawah

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
Kontrol perawatan kolam literal. Standarnya adalah -mno-teks-bagian-literal,
yang menempatkan literal di bagian terpisah dalam file output. Hal ini memungkinkan
kumpulan literal untuk ditempatkan dalam RAM/ROM data, dan juga memungkinkan penghubung untuk digabungkan
kumpulan literal dari file objek terpisah untuk menghapus literal yang berlebihan dan meningkatkan kode
ukuran. Dengan -mteks-bagian-literal, literal diselingi di bagian teks
untuk menjaga mereka sedekat mungkin dengan referensi mereka. Ini mungkin perlu
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 akan dilakukan. Standarnya adalah
-mtarget-sejajarkan. Opsi ini tidak memengaruhi perawatan penyelarasan otomatis
instruksi seperti "LOOP", yang akan selalu disejajarkan oleh assembler, baik dengan melebarkan
instruksi kepadatan atau dengan memasukkan instruksi larangan operasi.

-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 akan tetap menampilkan panggilan langsung
instruksi --- lihat kode objek yang dibongkar untuk melihat instruksi yang sebenarnya.
Perhatikan bahwa assembler akan menggunakan panggilan tidak langsung untuk setiap panggilan lintas file, bukan hanya
mereka yang benar-benar akan berada 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 akan
-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.

-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 akan menghasilkan informasi pelonggaran bingkai untuk semua
fungsi, yang dapat menghasilkan overhead ukuran data yang signifikan, meskipun tidak
mempengaruhi eksekusi. Jika Anda tidak menentukan opsi ini, GCC akan mengaktifkannya secara default
untuk bahasa seperti C++ yang biasanya memerlukan penanganan pengecualian, dan nonaktifkan untuk
bahasa seperti C yang biasanya tidak memerlukannya. Namun, Anda mungkin perlu mengaktifkan
opsi ini saat mengkompilasi kode C yang perlu beroperasi dengan benar dengan pengecualian
penangan yang ditulis dalam C++. Anda mungkin juga ingin menonaktifkan opsi ini jika Anda
mengkompilasi program C++ lama 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".

-funwind-tabel
Mirip dengan -feksepsi, kecuali bahwa itu hanya akan menghasilkan data statis yang diperlukan, tapi
tidak akan mempengaruhi kode yang dihasilkan dengan cara lain. Anda biasanya tidak akan mengaktifkan
pilihan ini; sebagai gantinya, prosesor bahasa yang membutuhkan penanganan ini akan mengaktifkannya
nama Anda.

-fasynchronous-unwind-tabel
Hasilkan tabel bersantai dalam format dwarf2, 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).

-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" akan setara dengan yang terkecil
tipe integer 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 pendek unsigned int bukannya
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 "extern") dalam dua kompilasi berbeda, Anda akan
mendapatkan 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 #ident Directive.

-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
Switch ini menyebabkan baris perintah yang digunakan untuk memanggil compiler menjadi
direkam ke dalam file objek yang sedang dibuat. Sakelar 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 dan 32k
pada m68k dan RS/6000. 386 tidak memiliki batas seperti itu.)

Kode posisi-independen memerlukan dukungan khusus, dan karena itu hanya bekerja pada
mesin tertentu. Untuk 386, GCC mendukung PIC untuk Sistem V tetapi tidak untuk Matahari
386i. Kode yang dihasilkan untuk IBM RS/6000 selalu tidak bergantung pada posisi.

Ketika bendera ini disetel, makro "__pic__" dan "__PIC__" didefinisikan menjadi 1.

-fPIC
Jika didukung untuk mesin target, pancarkan kode posisi-independen, cocok untuk
penautan dinamis dan menghindari batasan ukuran tabel offset global. Ini
pilihan membuat perbedaan pada m68k, PowerPC dan SPARC.

Kode posisi-independen memerlukan dukungan khusus, dan karena itu hanya bekerja pada
mesin tertentu.

Ketika bendera ini disetel, makro "__pic__" dan "__PIC__" didefinisikan menjadi 2.

-fpie
-fPIE
Opsi ini mirip dengan -fpik dan -fPIC, tetapi menghasilkan kode independen posisi
hanya dapat ditautkan ke dalam executable. Biasanya opsi ini digunakan ketika -pai GCC
opsi akan digunakan selama penautan.

-fpie dan -fPIE keduanya mendefinisikan makro "__pie__" dan "__PIE__". Macro memiliki
nilai 1 untuk -fpie dan 2 untuk -fPIE.

-fno-lompat-tabel
Jangan gunakan tabel lompat untuk pernyataan sakelar meskipun itu akan lebih efisien
daripada strategi pembuatan kode lainnya. Opsi ini digunakan bersama dengan
-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 akan 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 akan 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 akan menyimpan dan memulihkan 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 akan menghasilkan hasil bencana.

Jenis bencana yang berbeda akan dihasilkan dari penggunaan flag ini untuk register di
nilai fungsi mana yang 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 akan menghasilkan 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 akan 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 profil akan 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 tambahan
perluasan ukuran kode. Jika Anda menggunakan luar inline dalam kode C Anda, sebuah addressable
versi fungsi tersebut harus disediakan. (Lagian ini biasanya terjadi, tapi
jika Anda beruntung dan pengoptimal selalu memperluas fungsi sebaris, Anda mungkin memiliki
lolos tanpa memberikan salinan statis.)

Suatu fungsi dapat diberikan atribut "no_instrument_function", dalam hal ini
instrumentasi tidak akan 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
dari "-finstrument-functions"). 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

akan mengecualikan fungsi sebaris apa pun yang ditentukan dalam file yang nama pathnya mengandung "/ bits/stl"
atau "sertakan/sistem".

Jika, karena alasan tertentu, Anda ingin memasukkan huruf ',' di salah satu sim, menulis ','. Untuk
contoh, "-finstrument-functions-exclude-file-list=',,tmp'" (perhatikan kutipan tunggal
mengelilingi opsi).

-instrument-functions-exclude-function-list=sim,sim...
Ini mirip dengan "-finstrument-functions-exclude-file-list", tetapi opsi ini ditetapkan
daftar nama fungsi yang akan dikecualikan dari instrumentasi. Nama fungsi untuk
dicocokkan 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 adalah
dianggap sebagai pertandingan. Untuk pengidentifikasi tambahan C99 dan C++, nama fungsi
harus diberikan dalam 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 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, "generik"
berarti memaksa penggunaan pemeriksaan gaya lama, "spesifik" berarti menggunakan pemeriksaan terbaik
metode 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 akan 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 "spesifik" 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 tumpukan akan tumbuh melampaui
nilai, sinyal dinaikkan. Untuk sebagian besar target, sinyal dinaikkan sebelum
tumpukan melampaui batas, sehingga dimungkinkan untuk menangkap sinyal tanpa mengambil
tindakan pencegahan khusus.

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 backend i386 dan x86_64 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-dynamic", "local-dynamic", "initial-exec" atau "local-exec".

Default tanpa -fpik adalah "initial-exec"; dengan -fpik defaultnya adalah
"global-dinamis".

-fvisibilitas=default|internal|tersembunyi|dilindungi
Atur visibilitas simbol gambar ELF default ke opsi yang ditentukan --- semua simbol akan
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.

Terlepas dari nomenklaturnya, "default" selalu berarti publik; yaitu, tersedia untuk ditautkan
melawan dari luar objek bersama. "dilindungi" dan "internal" sangat tidak berguna
dalam penggunaan dunia nyata sehingga satu-satunya opsi lain yang umum digunakan adalah "tersembunyi". NS
default jika -fvisibilitas tidak ditentukan adalah "default", yaitu, buat setiap simbol
publik---ini menyebabkan perilaku yang sama seperti versi GCC sebelumnya.

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://people.redhat.com/~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 mungkin menemukan #pragma GCC
jarak penglihatan penggunaan. Ini berfungsi dengan Anda melampirkan deklarasi yang ingin Anda atur
visibilitas untuk dengan (misalnya) #pragma GCC jarak penglihatan dorong (tersembunyi) dan #pragma GCC
jarak penglihatan pop. Ingatlah bahwa visibilitas simbol harus dilihat as bagian of itu
API antarmuka kontrak dan dengan demikian semua kode baru harus selalu menentukan visibilitas saat itu
bukan default; yaitu, deklarasi hanya untuk digunakan dalam DSO lokal harus selalu
ditandai secara eksplisit sebagai tersembunyi untuk menghindari biaya tidak langsung PLT --- membuat ini
sangat jelas juga membantu keterbacaan dan dokumentasi kode sendiri. Perhatikan bahwa
karena persyaratan spesifikasi ISO C++, operator baru dan operator harus menghapus
selalu menjadi 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
jarak penglihatan tekan (default) sebelum menyertakan tajuk semacam itu.

luar deklarasi tidak terpengaruh oleh -fvisibilitas, jadi banyak kode bisa
dikompilasi ulang dengan -fvisibility=tersembunyi tanpa modifikasi. Namun, ini berarti bahwa
panggilan ke luar fungsi tanpa visibilitas eksplisit akan menggunakan PLT, jadi lebih
efektif untuk digunakan __atribut ((visibilitas)) dan / atau #pragma GCC jarak penglihatan untuk memberitahu
kompiler yang luar deklarasi harus diperlakukan sebagai tersembunyi.

Perhatikan bahwa -fvisibilitas mempengaruhi entitas tautan C++ yang tidak jelas. Artinya, untuk
misalnya, kelas pengecualian yang akan dilemparkan di antara DSO harus secara eksplisit
ditandai dengan visibilitas default sehingga ketik_info node akan 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 pengguna dapat mendeklarasikan semua bit periferal
bidang sebagai "unsigned short" (dengan asumsi short adalah 16 bit pada target ini) untuk memaksa GCC
untuk menggunakan akses 16-bit alih-alih, mungkin, akses 32-bit yang lebih efisien.

Jika opsi ini dinonaktifkan, kompilator akan menggunakan instruksi yang paling efisien. Di dalam
contoh sebelumnya, itu mungkin instruksi beban 32-bit, meskipun itu akan
mengakses byte yang tidak mengandung bagian bit-field, atau memori yang dipetakan
register yang tidak terkait dengan yang sedang diperbarui.

Jika target membutuhkan penyelarasan yang ketat, dan menghormati jenis bidang akan membutuhkan
melanggar keselarasan ini, peringatan dikeluarkan. Jika bidang memiliki atribut "dikemas",
akses dilakukan tanpa menghormati jenis bidang. Jika lapangan tidak memiliki
atribut "packed", akses dilakukan dengan menghormati jenis bidang. Dalam kedua kasus, GCC
mengasumsikan bahwa pengguna mengetahui sesuatu tentang perangkat keras target yang tidak disadarinya.

Nilai default opsi ini ditentukan oleh antarmuka biner aplikasi untuk
prosesor sasaran.

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.

Grafik 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 escape yang sebaliknya akan ditafsirkan
sebagai akhir string atau melarikan diri.

Grafik 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 akan mencoba mencari awalan yang sesuai untuk
gunakan 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/, GCC akan mencari foo/bar di mana biasanya akan mencari
/usr/local/lib/bar. Direktori alternatif ini dicari terlebih dahulu; standar
direktori datang berikutnya. Jika direktori standar dimulai dengan konfigurasi awalan kemudian
nilai awalan diganti oleh GCC_EXEC_PREFIX saat mencari file header.

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 akan menggunakan
mblen dan mbtowc seperti yang didefinisikan oleh lokal default untuk mengenali dan menerjemahkan multibyte
karakter.

Beberapa variabel lingkungan tambahan mempengaruhi perilaku preprosesor.

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 g++-4.7 online menggunakan layanan onworks.net


Server & Workstation Gratis

Unduh aplikasi Windows & Linux

  • 1
    turkdevops
    turkdevops
    TurkDevOps a ?k kaynak yaz?l?m
    geli?tirici topluluklar? DevTurks-Tim
    Taraf?ndan desteklenmektedir..
    Fitur: https://github.com/turkdevops https://turkdevops.g...
    Unduh turkdevops.dll
  • 2
    asammdf
    asammdf
    *asammdf* adalah pengurai Python yang cepat dan
    editor untuk ASAM (Asosiasi untuk
    Standarisasi Otomasi dan
    Sistem Pengukuran) MDF / MF4
    (Format Data Pengukuran...
    Unduh asammdf.dll
  • 3
    LAME (Lame Bukan Encoder MP3)
    LAME (Lame Bukan Encoder MP3)
    LAME adalah alat pendidikan yang akan digunakan
    untuk belajar tentang pengkodean MP3. Itu
    tujuan dari proyek LAME adalah untuk meningkatkan
    akustik psiko, kualitas dan kecepatan
    dari MP...
    Unduh LAME (Lame Aint an MP3 Encoder)
  • 4
    wxPython
    wxPython
    Satu set modul ekstensi Python yang
    bungkus kelas GUI lintas platform dari
    wxWidgets.. Pemirsa: Pengembang. Pengguna
    antarmuka: Sistem X Window (X11), Win32 ...
    Unduh wxPython.dll
  • 5
    manajer file paket
    manajer file paket
    Ini adalah pengelola file paket Total War
    proyek, mulai dari versi 1.7. SEBUAH
    pengenalan singkat ke Warscape
    modifikasi: ...
    Unduh packfilemanager.dll
  • 6
    IPerf2
    IPerf2
    Alat lalu lintas jaringan untuk mengukur
    Kinerja TCP dan UDP dengan metrik
    sekitar throughput dan latency. NS
    tujuan termasuk mempertahankan aktif
    kod iperf...
    Unduh IPerf2.dll
  • Lebih banyak lagi »

Perintah Linux

Ad