英語フランス語スペイン語

Ad


OnWorksファビコン

g++-4.7-クラウドでのオンライン

Ubuntu Online、Fedora Online、Windowsオンラインエミュレーター、またはMACOSオンラインエミュレーターを介してOnWorks無料ホスティングプロバイダーでg++-4.7を実行します

これは、Ubuntu Online、Fedora Online、Windowsオンラインエミュレーター、MACOSオンラインエミュレーターなどの複数の無料オンラインワークステーションの4.7つを使用してOnWorks無料ホスティングプロバイダーで実行できるコマンドg++-XNUMXです。

プログラム:

NAME


gcc-GNUプロジェクトCおよびC ++コンパイラ

SYNOPSIS


gcc [-c|-S|-E] [-std =標準]
[-g] [-pg] [-Oレベル]
[-W警告する...] [-衒学者]
[-IDIR...] [-LDIR...]
[-Dマクロ[=定義] ...] [-Uマクロ]
[-fオプション...] [-mマシンオプション...]
[-o アウトファイル][@file] ファイル内...

最も便利なオプションのみがここにリストされています。 残りについては、以下を参照してください。 g ++ 受け入れる
ほとんど同じオプション gccの.

DESCRIPTION


GCCを呼び出すと、通常、前処理、コンパイル、アセンブリ、およびリンクが実行されます。
「全体的なオプション」を使用すると、このプロセスを中間段階で停止できます。 にとって
例、 -c オプションは、リンカーを実行しないように指示します。 次に、出力はオブジェクトで構成されます
アセンブラによって出力されたファイル。

他のオプションは、処理のXNUMXつのステージに渡されます。 一部のオプションは、
プリプロセッサなど、コンパイラ自体。 さらに他のオプションは、アセンブラと
リンカ; これらのいずれかを使用する必要はめったにないため、これらのほとんどはここでは文書化されていません。

GCCで使用できるコマンドラインオプションのほとんどは、Cプログラムに役立ちます。 いつ
オプションは別の言語(通常はC ++)でのみ役立ちます、説明はそう言っています
明示的に。 特定のオプションの説明にソースが記載されていない場合
言語の場合、サポートされているすべての言語でそのオプションを使用できます。

  gccの プログラムは、オプションとファイル名をオペランドとして受け入れます。 多くのオプションには複数のオプションがあります
文字名; したがって、複数のXNUMX文字のオプションが グループ化する: -dv 非常にある
とは異なる -d -v.

オプションと他の引数を混在させることができます。 ほとんどの場合、使用する順序はそうではありません
案件。 同じ種類の複数のオプションを使用する場合、順序は重要です。 たとえば、
指定します -L ディレクトリは、指定された順序で複数回検索されます。 また、
の配置 -l オプションは重要です。

多くのオプションには、で始まる長い名前が付いています -f または -W- -例えば、
-fmove-ループ不変, -Wフォーマット 等々。 これらのほとんどは正と負の両方を持っています
フォーム; の負の形式 -ふふー になる -fno-foo。 このマニュアルでは、次の XNUMX つだけを説明します。
これらのXNUMXつの形式、どちらかがデフォルトではありません。

OPTIONS


オプション まとめ
これは、タイプ別にグループ化されたすべてのオプションの要約です。 説明は以下の通りです
セクション。

全体 オプション
-c -S -E -o file -no-canonical-prefixes -パイプ -パス終了コード -x 言語 -v
-### - 助けて[=class[、...]] --ターゲットヘルプ - バージョン -ラッパー @file -fplugin =file
-fplugin-arg-=argは -fdump-ada-spec[-スリム] -fdump-go-spec =file

C 言語設定 オプション
-アンシ -std =標準 -fgnu89-インライン -補助情報 ファイル名
-休耕-パラメータなし-可変個引数関数 -fno-asm -fno-builtin -fno-builtin-function
-おびえた -自立 -fopenmp -fms-拡張機能 -fplan9-拡張機能 -三重音字
-統合されていない-cpp -伝統的な -従来の-cpp -休耕-単精度
-fcond-不一致 -亜麻-ベクトル-変換 -fsigned-ビットフィールド -fsigned-char
-funsigned-ビットフィールド -funsigned-char

C + + 言語設定 オプション
-fabi-version =n -fno-アクセス制御 -fcheck-新しい -fconserve-スペース
-fconstexpr-depth =n -ffriend-注入 -fno-elide-コンストラクター -fno-enforce-eh-specs
-範囲外 -fno-for-scope -fno-gnu-キーワード -fno-implicit-templates
-fno-implicit-inline-templates -fno-implement-inlines -fms-拡張機能
-fno-nonansi-builtins -fnothrow-opt -fno 演算子名 -fno-オプション-diags
-寛容 -fno-pretty-templates -フレポ -fno-rtti -fstats -ftemplate-depth =n
-fno-threadsafe-statics -fuse-cxa-atexit -fno-弱い -nostdinc ++ -fno-デフォルト-インライン
-fvisibility-inlines-hidden -fvisibility-ms-compat -わび -Wconversion-null
-Wctor-dtor-プライバシー -Wdelete-非仮想-dtor -狭める -Wno以外
-Wnon-virtual-dtor -リオーダー -Weffc ++ -Wstrict-null-センチネル
-Wno-非テンプレートフレンド -ウォルドスタイルキャスト -オーバーロード-仮想 -Wno-pmf-コンバージョン
-Wsign-プロモーション

オブジェクティブC & Objective-C ++ 言語設定 オプション
-fconstant-string-class =クラス名 -fgnu-ランタイム -fnext-ランタイム -fno-nil-レシーバー
-fobjc-abi-version =n -fobjc-call-cxx-cdtors -fobjc-直接発送 -fobjc-例外
-fobjc-gc -fobjc-nilcheck -fobjc-std = objc1 -freplace-objc-classes -fzero-リンク
-gen-decls -Wassign-インターセプト -プロトコルなし -Wセレクター -Wstrict-selector-match
-Wundeclared-セレクター

言語設定 独立した オプション
-fmessage-length =n -fdiagnostics-show-location =[かつて|すべての行]
-fno-diagnostics-show-option

警告 オプション
-fsyntaxのみ -fmax-errors =n -衒学者 -衒学的エラー -w -ウェクストラ -壁
-住所 -Waggregate-return -Warray 境界 -Wno-属性
-Wno-builtin-macro-再定義 -Wc ++-互換性 -Wc ++ 11-互換性 -Wcast-align -Wcast-qual
-Wchar-添え字 -破壊された -コメント -Wコンバージョン -Wcoverage-不一致 -Wno-cpp
-Wno-非推奨 -Wno-非推奨-宣言 -Wdisabled-最適化 -Wno-div-by-zero
-Wdouble-プロモーション -空っぽの体 -ウェヌム-比較 -Wno-endif-labels -エラー -エラー= *
-Wfatal-エラー -Wfloat-等しい -Wフォーマット -Wformat = 2 -Wno-format-contains-null
-Wno-format-extra-args -Wformat-非文字 -Wformat-セキュリティ -Wformat-y2k
-Wframe-larger-than =LEN -Wno-free-非ヒープオブジェクト -Wjump-miss-init
-無視-修飾子 -暗黙の了解 -Wimplicit 関数宣言 -Wimplicit-int
-Winit-self -ウィンライン -おそらく-初期化されていません -Wno-int-to-pointer-cast
-Wno-無効なオフセット -Winvalid-pch -Wlarger-than =LEN -Wunsafe ループの最適化
-Wlogical-op -ウーロン茶 -Wメイン -おそらく-初期化されていません -中括弧がありません
-不足フィールド初期化子 -不足している形式属性 -行方不明のインクルードディレクトリ
-マッドフラップなし -Wno-multichar -非ヌル -オーバーフローなし -Woverlength-文字列 -Wパック
-Wpacked-bitfield-compat -パッド入り -かっこ -Wpedantic-ms-format
-Wno-pedantic-ms-format -Wpointer-算術 -Wno-pointer-to-int-cast -冗長-decls
-Wreturnタイプ -Wシーケンスポイント -影 -Wsign-比較 -Wsign-変換
-Wstack-プロテクター -Wstack-usage =LEN -Wstrict-エイリアシング -Wstrict-aliasing = n
-Wstrict-オーバーフロー -Wstrict-overflow =n -Wsuggest-attribute =[純粋な|定数|返品不可]
-Wスイッチ -Wswitch-デフォルト -Wswitch-enum -Wsync-nand -Wsystem-ヘッダー -トランポリン
-筆文字 -Wtype-limits - ウンデフ -初期化されていません -不明-プラグマ -Wno-プラグマ
-Wunsuffixed-float-定数 -未使用 -未使用機能 -Wunused-レーベル
-Wunused-local-typedefs -Wunused-パラメータ -Wno-未使用-結果 -未使用値
-Wunused-変数 -使用されていないがパラメータを設定 -使用されていないが変数を設定
-Wvariadic-マクロ -Wvector-操作-パフォーマンス -Wvla -Wvolatile レジスタ変数
-書き込み文字列 -Wzero-as-null-ポインター定数

C & Objective-Cのみ 警告 オプション
-Wbad-function-cast -欠落-宣言 -欠落パラメータの種類
-欠落-プロトタイプ -Wnested-externs -Wold スタイル宣言 -Wold スタイルの定義
-Wstrict-プロトタイプ -伝統的な -従来の変換
-W宣言後のステートメント -Wpointer サイン

デバッギング オプション
-d手紙 -ダンプスペック -ダンプマシン -ダンプバージョン -fdbg-cnt-リスト -fdbg-cnt =カウンター-
値リスト -fdisable-ipa-パス名 -fdisable-rtl-パス名 -fdisable-rtl-合格-
=範囲リスト -fdisable-tree-パス名 -fdisable-tree-パス名=範囲リスト
-fdump-noaddr -fdump-番号なし -fdump-unnumbered-links -fdump-翻訳単位[-n]
-fdump クラス階層[-n] -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-インライン
-fdump-パス -fdump-統計 -fdump-tree-all -fdump-tree-オリジナル[-n]
-fdump-tree-最適化[-n] -fdump-tree-cfg -fdump-tree-vcg -fdump-tree-alias
-fdump-ツリー-ch -fdump-tree-ssa[-n] -fdump-tree-pre[-n] -fdump-tree-ccp[-n]
-fdump-tree-dce[-n] -fdump-tree-giple[-生] -fdump-tree-マッドフラップ[-n]
-fdump-ツリー-dom[-n] -fdump-tree-dse[-n] -fdump-tree-phiprop[-n] -fdump-tree-phiopt[-n]
-fdump-tree-forwprop[-n] -fdump-tree-copyrename[-n] -fdump-tree-nrv -fdump-tree-vect
-fdump-ツリーシンク -fdump-ツリー-sra[-n] -fdump-tree-forwprop[-n] -fdump-tree-fre[-n]
-fdump-tree-vrp[-n] -ftree-vectorizer-verbose =n -fdump-tree-storeccp[-n]
-fdump-final-insns =file -f比較デバッグ[=optsの] -f比較デバッグ秒
-feliminate-dwarf2-dups -felimate-unused-debug-types
-feliminate-未使用のデバッグシンボル -femit-class-debug-always -フェンブル-種類-パス
-フェンブル-種類-パス=範囲リスト -fdebug-types-セクション -fmem-レポート -fpre-ipa-mem-report
-fpost-ipa-mem-report -fprofile-arcs -frandom-seed =文字列 -fsched-verbose =n
-fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-パイプライン-冗長 -fstack-使用法
-ftest-カバレッジ -ftime-レポート -fvar-追跡 -fvar-追跡-割り当て
-fvar-tracking-assignments-toggle -g -gレベル -グトグル -gcoff -グドワーフ-バージョン -ggdb
-grecord-gcc-スイッチ -gno-record-gcc-switches -gstabs -gstabs + -gstrict-ドワーフ
-gno-strict-ドワーフ -gvms -gxcoff -gxcoff + -fno-マージデバッグ文字列
-fno-dwarf2-cfi-asm -fdebug-prefix-map =古い=新製品 -femit-struct-debug-baseonly
-femit-struct-debug-reduced -femit-struct-debug-detailed[=スペックリスト] -p -pg
-print-file-name =ライブラリ -print-libgcc-ファイル名 -print-マルチディレクトリ
-print-multi-lib -print-multi-os-directory -print-prog-name =プログラム
-印刷検索ディレクトリ -Q -印刷-sysroot -print-sysroot-headers-suffix -一時保存
-save-temps = cwd -save-temps = obj -時間[=file]

最適化 オプション
-falign-functions [=n] -falign-jumps [=n] -falign-labels [=n] -falign-loops [=n]
-連想数学 -fauto-inc-dec -fbranch-確率 -fbranch-ターゲット-ロード-最適化
-fbranch-ターゲット-ロード-最適化2 -fbtr-bb-排他的 -fcaller-saves -fcheck-データ-deps
-fcombine-stack-adjustments -fconserve-スタック -f比較-elim -fcprop-レジスタ
-クロスジャンピング -fcse-フォロージャンプ -fcse-スキップ-ブロック -fcx-fortran-rules
-fcx限定範囲 -fdata-セクション -fdce -fdelayed-ブランチ -fdelete-null-pointer-checks
-fdevirtualize -fdse -恐ろしくインライン化 -フィパスラ -高価な最適化
-ffat-lto-objects -ffast-数学 -有限数学のみ -フロートストア
-fexcess-precision = -前方伝播 -ffp-contract = -機能-セクション
-fgcse -fgcse-アフターリロード -fgcse-ラス -fgcse-lm -fgraphite-アイデンティティ -fgcse-sm
-fif-変換 -fif-変換2 -findirect-インライン化 -finline-関数
-finline-functions-call-once -finline-limit =n -finline-small-functions -fipa-cp
-fipa-cp-クローン -fipa-マトリックス-reorg -fipa-pta -fipa-プロファイル -fipa-pure-const
-fipa-リファレンス -fira-algorithm =アルゴリズム -fira-region =地域 -フィラループ圧力
-fno-ira-share-save-slots -fno-ira-share-spill-slots -fira-verbose =n -fivopts
-fkeep-インライン関数 -fkeep-static-consts -floop-ブロック -フループを平らにする
-floop-交換 -floop-strip-mine -floop-Parallelize-all -flto
-flto-圧縮レベル -flto-partition =ALG -flto-レポート -fmerge-all-constants
-fmerge-定数 -fmodulo-sched -fmodulo-sched-allow-regmoves -fmove-ループ不変
フマッドフラップ -fmudflapir -fマッドフラップス -fno-分岐数-reg -fno-デフォルト-インライン
-fno-defer-pop -fno-function-cse -fno-guess-branch-probability -fno-インライン
-fno-math-errno -fno-のぞき穴 -fno-のぞき穴2 -fno-sched-interblock -fno-sched-spec
-fno-signed-zeros -fno-toplevel-reorder -fno-トラップ-数学
-fno-zero-in-bss で初期化 -fomit-フレームポインター -foptimize-登録-移動
-foptimize-兄弟呼び出し -部分的なインライン化 -fpeel-ループ -fpredictive-commoning
-fprefetch-ループ配列 -fprofile-修正 -fprofile-dir =path -fprofile-generate
-fprofile-generate =path -fprofile-使用 -fprofile-use =path -fprofile-values
-freciprocal-数学 フリー -fregmove -frename-registers -フリーオーダーブロック
-freeorder-blocks-and-partition -freorder-関数 -frerun-cse-ループ後
-freschedule-modulo-scheduled-loops -フラウンディング-数学 -fsched2-use-スーパーブロック
-fsched-圧力 -fsched-spec-load -fsched-spec-load-dangerous
-fsched-stalled-insns-dep [=n] -fsched-stalled-insns [=n] -fsched-group-ヒューリスティック
-fsched-クリティカルパス-ヒューリスティック -fsched-spec-insn-ヒューリスティック -fsched-rank-ヒューリスティック
-fsched-last-insn-ヒューリスティック -fsched-dep-count-ヒューリスティック -fschedule-insn
-fschedule-insns2 -fsection-アンカー -選択的スケジューリング -f選択的スケジューリング2
-fsel-sched-パイプライン -fsel-sched-pipelining-outer-loops -fshrink-wrap
-fsignaling-nans -fs単精度定数 -fsplit-ivs-in-unroller
-fsplit-wide-types -fstack-プロテクター -fstack-protector-all -fstrict-エイリアシング
-fstrict-オーバーフロー -fthread-ジャンプ -フトレーサー -ftree-ビット-ccp -ftree-builtin-call-dce
-ftree-ccp -ftree-ch -ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree-コピー-プロップ
-ftree-copyrename -ftree-dce -ftree-ドミネーター-opts -ftree-dse -ftree-forwprop
-ftree-fre -ftree-ループ-if-convert -ftree-loop-if-convert-stores -ftree-loop-im
-ftree-phiprop -ftree ループ配布 -ftree-loop-distribute-patterns
-ftree-loop-ivcanon -ftree-ループ-リニア -ftree-ループ最適化 -ftree-parallelize-loops =n
-ftree-pre -ftree-部分-pre -ftree-pta -ftree-reassoc -ftree-シンク -ftree-sra
-ftree-スイッチ変換 -ftree-tail-merge -ftree-ter -ftree-vect-loop-version
-ftree-ベクトル化 -ftree-vrp -一度に一台 -funroll-all-loops -funroll-ループ
-funsafe ループの最適化 -funsafe-数学の最適化 -funswitch-ループ
アンローラー内の -f 変数展開 -fvect-cost-モデル -fvpt -fweb -fwhole-プログラム -fwpa
-fuse-ld =リンクス -ヒューズ-リンカー-プラグイン --パラメータ = -O -O0 -O1 -O2 -O3 -オス
-オーファスト

プリプロセッサ オプション
-A質問=回答 -A-質問[=回答] -C -dD -dI -dM -dN -Dマクロ[=定義] -E -H
-idirafter DIR -含める file -イマクロス file -iprefix file -iwithprefix DIR
-iwithprefixbefore DIR -isystem DIR -imultilib DIR -isysroot DIR -M -んん -MF -MG
-MP -MQ -MT -ノストディンク -P -fdebug-cpp -ftrack-マクロ展開 -fworkingディレクトリ
-リマップ -三重音字 -未定義 -Uマクロ -Wp、オプション -Xプリプロセッサ オプション

アセンブラ オプション
-わ、オプション -Xアセンブラー オプション

リンクス オプション
オブジェクトファイル名 -lライブラリ -nostartfiles -nodefaultlibs -nostdlib -パイ -rdynamic -s
-静的 -静的-libgcc -static-libstdc ++ -共有 -共有-libgcc -シンボリック -T スクリプト
-Wl、オプション -Xリンカー オプション -u シンボル

ディレクトリ オプション
-B接頭辞 -IDIR -iplugindir =DIR -iquoteDIR -LDIR -specs =file -I- --sysroot =DIR

エスプレッソマシン 依存 オプション
AAArch64 オプション -mbig-エンディアン -mlittle-エンディアン -mgeneral-regs-のみ -mcmodel = tiny
-mcmodel = small -mcmodel = large -mstrict-align -momit-リーフフレームポインター
-mno-省略リーフフレームポインター -mtls-dialect = desc -mtls-dialect = Traditional -XNUMX月=
-mcpu = -mtune =

アダプテバ エピファニー オプション -mhalf-reg ファイル -mprefer-short-insn-regs -mbranch-cost =NUM
-mcmove -mnops =NUM -msoft-cmpsf -msplit-lohi 株式会社エムポスト -mpost-変更
-mstack-offset =NUM -mround-最も近い -mlong-calls -mshort-呼び出し -msmall16 -mfp-mode =モード
-mvect-ダブル -max-vect-align =NUM -msplit-vecmove-初期 -m1reg-REG

ARM オプション -mapcs フレーム -mno-apcs-frame -mabi = -mapcs-スタックチェック
-mno-apcs-stack-check -mapcs-フロート -mno-apcs-float -mapcs-リエントラント
-mno-apcs-リエントラント -msched-プロローグ -mno-sched-プロローグ -mlittle-エンディアン -mbig-エンディアン
-mwords-リトルエンディアン -mfloat-abi = -mfpe -mfp16-format = -mthumb-インターワーク
-mno-thumb-interwork -mcpu = -XNUMX月= -mfpu = -mstructure-size-boundary =n
-mabort-on-noreturn -mlong-calls -mno-long-calls -msingle-pic-base
-mno-single-pic-base -mpic-register =REG -mnop-fun-dllimport -mcirrus-修正-無効な-insns
-mno-cirrus-fix-invalid-insn -mpoke-関数名 -mthumb -マーム -mtpcs-フレーム
-mtpcs-リーフ-フレーム -mcaller-スーパーインターワーキング -mcallee-スーパーインターワーキング -mtp =
-mtls-dialect =方言 -mword-再配置 -mfix-cortex-m3-ldrd -不整列アクセス
-mneon-for-64ビット

AVR オプション -mmcu =MCU -maccumulate-args -mbranch-cost =コスト -mcall-プロローグ -ミント8
-mno-割り込み -mリラックス -mshort-呼び出し -mstrict-X -mtiny-スタック

ブラックフィン オプション -mcpu =CPU[-シレビジョン] -msim -momit-リーフフレームポインター
-mno-省略リーフフレームポインター -mspecld-異常 -mno-specld-異常 -mcsync-異常
-mno-csync-異常 -mlow-64k -mno-low64k -mstack-check-l1 -mid-共有ライブラリ
-mno-id-共有ライブラリ -mshared-library-id =n -mleaf-id-共有ライブラリ
-mno-leaf-id-共有ライブラリ -msep-データ -mno-sep-データ -mlong-calls -mno-long-calls
-mfast-fp -minline-plt -マルチコア -mcorea -マコレブ -msdram -micplb

C6X オプション -mbig-エンディアン -mlittle-エンディアン -XNUMX月=CPU -msim -msdata =sdata タイプ

CRIS オプション -mcpu =CPU -XNUMX月=CPU -mtune =CPU -mmax-stack-frame =n
-melinux-stacksize =n -metrax4 -metrax100 -mpdebug -mcc-init -mno-副作用
-mstack-align -mdata-align -mconst-align -m32ビット -m16ビット -m8ビット
-mno-プロローグ-エピローグ -mno-gotplt -メルフ -マウト -メリナックス -mlinux -シム -sim2
-mmul-バグ-回避策 -mno-mul-bug-回避策

CR16 オプション -mmac -mcr16cplus -mcr16c -msim -ミント32 -mbit-ops -mdata-model =

ダーウィン オプション -all_load -allowable_client -アーチ -arch_errors_fatal -arch_only
-bind_at_load -バンドル -バンドル_ローダー -クライアント名 -compatibility_version
-現行版 -デッド_ストリップ -依存関係ファイル -dylib_file -dylinker_install_name
-動的 -ダイナミックリブ -exported_symbols_list -ファイルリスト - flat_namespace
-force_cpusubtype_ALL -force_ flat_namespace -headerpad_max_install_names -iframework
-image_base -初期化 -インストール名 -keep_private_externs -multi_module
-multiply_define -multiply_define_unused -noall_load
-no_dead_strip_inits_and_terms -nofixprebinding -nomultidefs -noprebind
-nosegリンク編集 -pagezero_size -事前バインド -prebind_all_twolevel_modules -private_bundle
-read_only_relocs -sectalign -sectobjectsymbols -なぜロード -seg1addr -sectcreate
-sectobjectsymbols -セクターダー -segaddr -segs_read_only_addr -segs_read_write_addr
-seg_addr_table -seg_addr_table_filename -seglinkedit -segprot -segs_read_only_addr
-segs_read_write_addr -single_module -静的 -サブライブラリ -サブ傘
-twolevel_namespace -傘 -未定義 -unexported_symbols_list
-weak_reference_mismatches -Whatsloaded -F -突っ込んだ -gfull -mmacosx-version-min =バージョン
-mkernel -mone-byte-bool

12月 アルファ オプション -mno-fp-regs -msoft-float -マルファ-アス -メガガス -ミィー
-mieee-with-不正確 -mieee-準拠 -mfp-trap-mode =モード -mfp-rounding-mode =モード
-mtrap-precision =モード -mbuild-定数 -mcpu =CPUタイプ -mtune =CPUタイプ -mbwx -mmax
-mfix -mcix -mfloat-vax -mfloat-ieee -mexplicit-relocs -msmall-データ -mlarge-データ
-msmall-text -拡大テキスト -mmemory-latency =時間

12月 アルファ/VMS オプション -mvms-リターンコード -mdebug-main =接頭辞 -mmalloc64

FR30 オプション -msmall-モデル -mno-lsim

FRV オプション -mgpr-32 -mgpr-64 -MFPR-32 -MFPR-64 -mhard-float -msoft-float
-malloc-cc -mfixed-cc -mdword -mno-dword -mdouble -mno-double -メディア -mno-メディア
-ムムラッド -mno-ムラッド -mfdpic -minline-plt -mgprel-ro -multilib-ライブラリ-pic
-mlinked-fp -mlong-calls -悪性ラベル -mlibrary-pic -mac-4 -mac-8 -mpack
-mno-pack -mno-eflags -mcond-移動 -mno-cond-move -moptimize-メンバーバー
-mno-optimize-memberbar -mscc -mno-scc -mcond-exec -mno-cond-exec -mvliw-ブランチ
-mno-vliw-ブランチ -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec
-mno-nested-cond-exec -mtomcat-統計 -mTLS -mtls -mcpu =CPU

GNU / Linuxの オプション -mglibc -ムクリブ -バイオニック -マンアンドロイド -tno-android-cc -tno-android-ld

H8 / 300 オプション -mリラックス -mh -MS -分 -ミント32 -悪性-300

HPPA オプション -XNUMX月=アーキテクチャタイプ -mbig スイッチ -mdisable-fpregs
-mdisable-インデックス作成 -mfast-間接呼び出し -メガガス -mgnu-ld -mhp-ld
-mfixed-range =レジスタ範囲 -mジャンプインディレイ -mlinker-opt -mlong-calls
-mlong-ロードストア -mno-ビッグスイッチ -mno-disable-fpregs -mno-disable-indexing
-mno-fast-indirect-calls -mno-ガス -mno-ジャンプインディレイ -mno-long-load-store
-mno-ポータブル-ランタイム -mno-ソフトフロート -mno-space-regs -msoft-float -mpa-risc-1-0
-mpa-risc-1-1 -mpa-risc-2-0 -ポータブルランタイム -mschedule =CPUタイプ -mspace-regs
-msio -mwsio -munix =unix-std -nolibdld -静的 -スレッド

i386 & x86-64 オプション -mtune =CPUタイプ -XNUMX月=CPUタイプ -mfpmath =単位 -masm =方言
-mno-ファンシー-数学-387 -mno-fp-ret-in-387 -msoft-float -mno-wide-乗算 -mrtd
-悪性-ダブル -mpreferred-stack-boundary =NUM -mincoming-stack-boundary =NUM -mcld
-mcx16 -msahf -mmovbe -mcrc32 -mレシピ -mrecip =オプト -mvzeroupper -mprefer-avx128 -うーん
-mse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx -mavx2 -メイズ -mpclmul
-mfsgsbase -mrdrnd -mf16c -MFMA -msse4a -m3dnow -mpopcnt -マブム -mbmi -MTBM -mfma4
-mxop -mlzcnt -mbmi2 -mlwp -ミリスレッド -mno-align-stringops -minline-all-stringops
-minline-stringops-動的に -mstringop-strategy =ALG -mpush-args
-maccumulate-発信引数 -m128bit-long-double -m96bit-long-double -mregparm =NUM
-msseregparm -mveclibabi =type -mvect8-ret-in-mem -mpc32 -mpc64 -mpc80 -mstackrealign
-momit-リーフフレームポインター -mno-レッドゾーン -mno-tls-direct-seg-refs -mcmodel =コードモデル
-mabi = -maddress-mode =モード -m32 -m64 -mx32 -mlarge-data-threshold =NUM -msse2avx
- ミッフィー -m8bit-idiv -mavx256-split-unaligned-load -mavx256-split-unaligned-store

i386 & x86-64 Windows オプション -mconsole -マシグウィン -mno-cygwin -mdll
-mnop-fun-dllimport -mスレッド -ミュニコード -mwin32 -mwindows -fno-set-stack-executable

IA-64 オプション -mbig-エンディアン -mlittle-エンディアン -mgnu-as -mgnu-ld -mno-pic
-mvolatile-asm-停止 -mレジスタ名 -msdata -mno-sdata -m定数-gp -mauto-pic
-混乱-狂った -minline-float-divide-min-latency -minline-float-divide-max-スループット
-mno-inline-float-divide -minline-int-divide-min-latency
-minline-int-divide-max-スループット -mno-inline-int-divide -minline-sqrt-min-latency
-minline-sqrt-max-スループット -mno-インライン-sqrt -mdwarf2-asm -ほぼ停止ビット
-mfixed-range =レジスタ範囲 -mtls-size =TLS サイズ -mtune =CPUタイプ -ミルプ32 -mlp64
-msched-br-データ仕様 -msched-ar-data-spec -msched-control-spec -msched-br-in-data-spec
-msched-ar-in-data-spec -msched-in-control-spec -msched-spec-ldc
-msched-spec-control-ldc -msched-prefer-non-data-spec-insns
-msched-prefer-non-control-spec-insn -msched-stop-bits-after-ever-cycle
クリティカルパスの-msched-count-spec-in-critical-path -msel-sched-dont-check-control-spec
-msched-fp-mem-deps-zero-cost -msched-max-memory-insn-ハードリミット
-msched-max-memory-insns =マックスインSNS

IA-64/VMS オプション -mvms-リターンコード -mdebug-main =接頭辞 -mmalloc64

LM32 オプション -mbarrel-shift-対応 -mdivide対応 -mmultiply-対応
-msign-extend-enabled -ミューザー対応

M32R / D オプション -m32r2 -m32rx -m32r -mdebug -悪性ループ -mno-align-loops
-missue-rate = -mbranch-cost = -mmodel =コードサイズモデルタイプ -msdata =sdata-
type -mno-flush-func -mflush-func = -mno-flush-trap -mflush-trap = -G NUM

M32C オプション -mcpu =CPU -msim -memregs =

M680x0 オプション -XNUMX月=アーチ -mcpu =CPU -mtune = -m68000 -m68020 -m68020-40
-m68020-60 -m68030 -m68040 -m68060 -mcpu32 -m5200 -m5206e -m528x -m5307 -m5407
-mcfv4e -mbitfield -mno-ビットフィールド -mc68000 -mc68020 -mnobitfield -mrtd -mno-rtd
-mdiv -mno-div -mshort -mno-short -mhard-float -m68881 -msoft-float -mpcrel
-悪性-int -mstrict-align -msep-データ -mno-sep-データ -mshared-library-id = n
-mid-共有ライブラリ -mno-id-共有ライブラリ -mxgot -mno-xgot

Mコア オプション -マルドリット -mno-ハードライト -mdiv -mno-div -mrelax-即時
-mno-relax-immediates -mwide-ビットフィールド -mno-wide-ビットフィールド -m4byte-関数
-mno-4byte-関数 -mcallgraph-データ -mno-callgraph-data -mslow-bytes
-mno-slow-bytes -mno-lsim -mlittle-エンディアン -mbig-エンディアン -m210 -m340
-mstack-増分

メップ オプション -mabsdiff -モール-opts -平均 -mbased =n -mbitops -mc =n -mclip
-mconfig = -mcop -mcop32 -mcop64 -mivc2 -mdc -mdiv -meb -メル -mio-揮発性 -ml
-mleadz -んん -mminmax -mmult -mno-opts -mrepeat -MS -msatur -msdram -msim -msimnovec
-mtf -mtiny =n

マイクロブレイズ オプション -msoft-float -mhard-float -msmall-分割 -mcpu =CPU -mmemcpy
-mxl-ソフトマル -mxl-ソフト-div -mxl-バレルシフタ -mxl-パターン-比較 -mxl-スタックチェック
-mxl-gp-opt -mno-clearbss -mxl-乗算-高 -mxl-float-convert -mxl-float-sqrt
-mxlモード-アプリモデル

MIPS オプション -THE -EB -XNUMX月=アーチ -mtune =アーチ -ミップス1 -ミップス2 -ミップス3 -ミップス4
-ミップス32 -mips32r2 -ミップス64 -mips64r2 -ミップス16 -mno-mips16 -mflip-mips16
-minterlink-mips16 -mno-インターリンク-mips16 -mabi =ABI -マビコール -mno-abicalls
-mshared -mno-共有 -mplt -mno-plt -mxgot -mno-xgot -mgp32 -mgp64 -MFP32
-MFP64 -mhard-float -msoft-float -msingle-float -mdouble-float -mdsp -mno-dsp
-mdspr2 -mno-dspr2 -mfpu =fpuタイプ -msmartmips -mno-スマートミップス -障害のあるシングル
-mno-ペアリング-シングル -mdmx -mno-mdmx -mips3d -mno-mips3d -mmt -mno-mt -mllsc
-mno-llsc -mlong64 -mlong32 -msym32 -mno-sym32 -GNUM -mlocal-sdata
-mno-local-sdata -mextern-sdata -mno-extern-sdata -mgpopt -mno-gopt -埋め込みデータ
-mno-embedded-data -muninit-const-in-rodata -mno-uninit-const-in-rodata
-mcode-読み取り可能=設定 -msplit-アドレス -mno-分割アドレス -mexplicit-relocs
-mno-explicit-relocs -mcheck-ゼロ除算 -mno-check-zero-division -mdivide-トラップ
-mdivide-breaks -mmemcpy -mno-memcpy -mlong-calls -mno-long-calls -マッド -mno-mad
-混乱-狂った -mno-fusion-madd -nocpp -mfix-24k -mno-fix-24k -mfix-r4000
-mno-fix-r4000 -mfix-r4400 -mno-fix-r4400 -mfix-r10000 -mno-fix-r10000 -mfix-vr4120
-mno-fix-vr4120 -mfix-vr4130 -mno-fix-vr4130 -mfix-sb1 -mno-fix-sb1
-mflush-func =ファンク -mno-flush-func -mbranch-cost =NUM -mbranch-可能性が高い
-mno-ブランチの可能性が高い -mfp-例外 -mno-fp-例外 -mvr4130-整列 -mno-vr4130-align
-msynci -mno-synci -mrelax-pic-calls -mno-relax-pic-calls -mmcount-ra-アドレス

ミミックス オプション -mlibfuncs -mno-libfuncs -メプシロン -mno-イプシロン -mabi = gnu
-mabi = mmixware -mzero-拡張 -mknutthiv -mtoplevel-シンボル -メルフ -mbranch-予測
-mno-ブランチ予測 -mbase-アドレス -mno-ベースアドレス -msingle-終了
-mno-単一出口

MN10300 オプション -mmult-バグ -mno-mult-bug -mno-am33 -ママ33 -mam33-2 -ママ34 -mtune =CPU-
type -mreturn-pointer-on-d0 -mno-crt0 -mリラックス -mliw -msetlb

PDP-11 オプション -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 -mbcopy
-mbcopy-ビルトイン -ミント32 -mno-int16 -ミント16 -mno-int32 -mfloat32 -mno-float64
-mfloat64 -mno-float32 -マブシ -mno-アブシ -mbranch-高価 -mbranch-安い
-munix-asm -mdec-asm

ピコチップ オプション -前=ae_type -mvliw-lookahead =N -msymbol-as-アドレス
-mno-非効率的-警告

PowerPC オプション RS / 6000およびPowerPCオプションを参照してください。

RL78 オプション -msim -mmul = none -mmul = g13 -mmul = rl78

RS / 6000 & PowerPC オプション -mcpu =CPUタイプ -mtune =CPUタイプ -mcmodel =コードモデル -mpower
-無能 -mpower2 -mno-power2 -mpowerpc -mpowerpc64 -mno-powerpc -マルティベック
-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-ハード-dfp
-mnew-ニーモニック -モールドニーモニック -mfull-toc -最小-toc -mno-fp-in-toc
-mno-sum-in-toc -m64 -m32 -mxl-compat -mno-xl-compat -mpe -悪性パワー
-悪性-自然 -msoft-float -mhard-float -複数 -mno-複数 -msingle-float
-mdouble-float -msimple-fpu -mstring -mno-string -mupdate -mno-アップデート
-mavoid-indexed-addresses -mno-avoid-indexed-addresses -混乱-狂った -mno-fusion-madd
-mbit-align -mno-bit-align -mstrict-align -mno-strict-align -m再配置可能
-mno-再配置可能 -mrelocatable-lib -mno-再配置可能ライブラリ -mtoc -mno-toc -少し
-mlittle-エンディアン -mbig -mbig-エンディアン -mdynamic-no-pic -マルティベック -mswdiv
-msingle-pic-base -mprioritize-restricted-insns =優先順位
-msched-costly-dep =依存関係タイプ -minsert-sched-nops =スキーム -mcall-sysv
-mcall-netbsd -maix-struct-return -msvr4-struct-return -mabi =アビタイプ -msecure-plt
-mbss-plt -mblock-move-inline-limit =NUM -ミセル -mno-isel -misel = yes -misel = no -mspe
-mno-spe -mspe = yes -mspe = no -障害者 -mgen-cell-マイクロコード -mwarn-cell-マイクロコード
-mvrsave -mno-vrsave -mmulhw -mno-mulhw -mdlmzb -mno-dlmzb -mfloat-gprs = yes
-mfloat-gprs = no -mfloat-gprs = single -mfloat-gprs = double -mプロトタイプ -mno-プロトタイプ
-msim -mmvme -マッド -ミイエローナイフ -メンブ -msdata -msdata =オプト -mvxworks -G NUM
-pthread -mレシピ -mrecip =オプト -mno-レシピ -mrecip-精度 -mno-recipe-precision
-mveclibabi =type -mfriz -mno-フリズ -mpointers-to-nested-functions
-mno-ネストされた関数へのポインタ -msave-toc-間接 -mno-save-toc-indirect

RX オプション -m64ビットダブル -m32ビットダブル -fpu -ノフプ -mcpu = -mbig-エンディアン-データ
-mlittle-エンディアン-データ -msmall-データ -msim -mno-sim -mas100-構文 -mno-as100-構文
-mリラックス -mmax-constant-size = -mint-register = -mpid -msave-acc-in-interrupts

S / 390 & zシリーズ オプション -mtune =CPUタイプ -XNUMX月=CPUタイプ -mhard-float -msoft-float
-mhard-dfp -mno-ハード-dfp -mlong-double-64 -mlong-double-128 -mbackchain
-mno-バックチェーン -mpacked-スタック -mno-packed-stack -msmall-exec -mno-small-exec
-mmvcle -mno-mvcle -m64 -m31 -mdebug -mno-デバッグ -メサ -mzach -mtpf-トレース
-mno-tpf-トレース -混乱-狂った -mno-fusion-madd -mwarn-フレームサイズ -mwarn-dynamicstack
-mstack-size -mstack-guard

スコア オプション -meb -メル -mnhwloop -マルス -mmac -mscore5 -mscore5u -mscore7 -mscore7d

SH オプション -m1 -m2 -m2e -m2a-nofpu -m2a-シングルのみ -m2a-シングル -m2a -m3 -m3e
-m4-nofpu -m4-シングルのみ -m4-シングル -m4 -m4a-nofpu -m4a-シングルのみ -m4a-シングル
-m4a -m4al -m5-64メディア -m5-64メディア-nofpu -m5-32メディア -m5-32メディア-nofpu -m5-コンパクト
-m5-コンパクト-nofpu -mb -ml -mdalign -mリラックス -mbigtable -mfmovd -ミタチ -ムレネサス
-mno-ルネサス -mnomacsave -ミィー -mno-ieee -mbitops -ミスサイズ -minline-ic_invalidate
-mpadstruct -mspace -mprefergot -musermode -マルチコスト= -mdiv =戦略
-mdivsi3_libfunc = -mfixed-range =レジスタ範囲 -madjust-unroll
-mindexed-addressing -mgettrcost = -mpt-修正済み -maccumulate-発信引数
-minvalid-シンボル -msoft-アトミック -mbranch-cost =NUM -マクブランチディ -mcmpeqdi -混乱-狂った
-mpreend-cmove

ソラリス 2 オプション -mimpure-テキスト -mno-不純なテキスト -pスレッド -pthread

SPARC オプション -mcpu =CPUタイプ -mtune =CPUタイプ -mcmodel =コードモデル -mmemory-model =メモリ-
-m32 -m64 -map-regs -mno-app-regs -mfaster-構造体 -mno-faster-structs
-mフラット -mno-フラット -mfpu -mno-fpu -mhard-float -msoft-float -mhard-quad-float
-msoft-quad-float -mstack-バイアス -mno-スタックバイアス -不整列ダブルス
-mno-unaligned-doubles -mv8plus -mno-v8plus -mvis -mno-vis -mvis2 -mno-vis2
-mvis3 -mno-vis3 -mfmaf -mno-fmaf -mpopc -mno-popc -mfix-at697f

SPU オプション -mwarn-再配置 -merror-reloc -msafe-dma -ムンセーフ-dma -mbranch-ヒント
-msmall-mem -mlarge-mem -mstdmain -mfixed-range =レジスタ範囲 -mea32 -mea64
-maddress-space-conversion -mno-アドレス空間変換 -mcache-size =キャッシュサイズ
-matomic-アップデート -mno-atomic-updates

エントルピー V オプション -Qy -Qn -YP、パス -うーん、DIR

タイルGx オプション -mcpu =CPU -m32 -m64

タイルプロ オプション -mcpu =CPU -m32

V60 オプション -mlong-calls -mno-long-calls -メップ -mno-ep -mprolog-関数
-mno-プロローグ関数 -mspace -mtda =n -msda =n -mzda =n -map-regs -mno-app-regs
-mdisable-callt -mno-disable-callt -mv850e2v3 -mv850e2 -mv850e1 -mv850es -mv850e
-mv850 -mbig スイッチ

VAX オプション -mg -mgnu -munix

VxWorks オプション -mrtp -非静的 -Bスタティック -バダイナミック -Xbind-lazy -Xbind-今

x86-64 オプション i386およびx86-64オプションを参照してください。

エクスストーミー16 オプション -msim

エクステンサ オプション -mconst16 -mno-const16 -混乱-狂った -mno-fusion-madd -mforce-no-pic
-mserialize-volatile -mno-serialize-volatile -mtext-セクションリテラル
-mno-text-section-literals -mtarget-align -mno-ターゲット-アライン -mlongcalls
-mno-longcalls

zシリーズ オプション S / 390およびzSeriesオプションを参照してください。

Code 世代 オプション
-fcall-保存済み-REG -fcall-used-REG -修正済み-REG -例外 -fnon-call-例外
-funwind-テーブル -fasynchronous-unwind-tables -finhibit サイズ ディレクティブ
-finstrument-関数 -finstrument-functions-exclude-function-list =sym,sym、...
-finstrument-functions-exclude-file-list =file,file、... -fno-common -fno-ident
-fpcc-構造体-リターン -fpic -fPIC -fpie -fPIE -fno-ジャンプテーブル -frecord-gcc-スイッチ
-freg-構造体-リターン -fshort-列挙型 -fshort-double -fshort-wchar -fverbose-asm
-fpack-struct [=n] -fstack-チェック -fstack-limit-register =REG -fstack-limit-symbol =sym
-fno-スタック制限 -fsplit-スタック -fleading-アンダースコア -ftls-model = -ftrapv
-fwrapv -fbounds-チェック -視認性 -fstrict-volatile-ビットフィールド

オプション 制御   種類 of 出力
コンパイルには、前処理、適切なコンパイル、アセンブリ、および最大XNUMXつの段階が含まれます。
リンク、常にその順序で。 GCCは、いくつかの前処理とコンパイルが可能です。
複数のアセンブラー入力ファイル、またはXNUMXつのアセンブラー入力ファイルのいずれかにファイルします。 それから
各アセンブラ入力ファイルはオブジェクトファイルを生成し、リンクはすべてのオブジェクトを結合します
ファイル(新しくコンパイルされたもの、および入力として指定されたもの)を実行可能ファイルに入れます。

特定の入力ファイルについて、ファイル名のサフィックスによってコンパイルの種類が決まります。
終わり:

file.c
前処理が必要なCソースコード。

file.i
前処理してはならないCソースコード。

file.ii
前処理してはならないC ++ソースコード。

file.m
Objective-Cのソースコード。 とリンクする必要があることに注意してください libobjc 作成するライブラリ
Objective-Cプログラムの作業。

file.mi
前処理してはならないObjective-Cソースコード。

file.mm
file.M
目的-C ++ソースコード。 とリンクする必要があることに注意してください libobjc 作成するライブラリ
Objective-C ++プログラムの動作。 ご了承ください .M 文字通りの大文字Mを指します。

file.mii
目的-前処理してはならないC ++ソースコード。

file.h
プリコンパイル済みに変換されるC、C ++、Objective-C、またはObjective-C ++ヘッダーファイル
ヘッダー(デフォルト)、またはC、C ++ヘッダーファイルをAda仕様に変換します(
-fdump-ada-spec スイッチ)。

file.ccに
file.cp
file.cxx
file.cpp
file.CPP
file.c ++
file.C
前処理が必要なC ++ソースコード。 で注意してください .cxx、最後のXNUMX文字
両方とも文字通りでなければなりません x。 同様に、 .C 文字通りの大文字Cを指します。

file.mm
file.M
目的-前処理が必要なC ++ソースコード。

file.mii
目的-前処理してはならないC ++ソースコード。

file.H H
file.H
file.hp
file.hxx
file.hpp
file.HPP
file.h ++
file.tcc
プリコンパイル済みヘッダーまたはAda仕様に変換されるC ++ヘッダーファイル。

file.f
file。にとって
file.ftn
前処理してはならないFortranソースコードの形式を修正しました。

file.F
file。にとって
file.fpp
file.FPP
file.FTN
前処理が必要な固定形式のFortranソースコード(従来の
プリプロセッサ)。

file.f90
file.f95
file.f03
file.f08
前処理してはならない自由形式のFortranソースコード。

file.F90
file.F95
file.F03
file.F08
前処理が必要な自由形式のFortranソースコード(従来の
プリプロセッサ)。

file。行く
ソースコードに移動します。

file.ads
ライブラリユニット宣言(の宣言)を含むAdaソースコードファイル
パッケージ、サブプログラム、ジェネリック、またはジェネリックインスタンス化)、またはライブラリユニット
名前変更宣言(パッケージ、ジェネリック、またはサブプログラムの名前変更宣言)。 そのような
ファイルはまた呼ばれます スペック.

file.adb
ライブラリユニット本体(サブプログラムまたはパッケージ本体)を含むAdaソースコードファイル。
このようなファイルは、 ボディ.

file.s
アセンブラコード。

file.S
file.sx
前処理が必要なアセンブラコード。

他の
リンクに直接フィードされるオブジェクトファイル。 認識されていないファイル名
接尾辞はこのように扱われます。

入力言語は、 -x オプション:

-x 言語
明示的に指定する 言語 次の入力ファイルの場合(
コンパイラは、ファイル名のサフィックスに基づいてデフォルトを選択します)。 このオプションはすべてに適用されます
次の入力ファイルまで -x オプション。 の可能な値 言語 には次の値があります:

cc-ヘッダーcpp-出力
c ++ c ++-ヘッダーc ++-cpp-出力
Objective-C Objective-C-HeaderObjective-C-CPP-出力
目的-c ++目的-c ++-ヘッダー目的-c ++-cpp-出力
アセンブラアセンブラ-with-cpp
エイダ
f77f77-cpp-入力f95f95-cpp-入力
go
ジャワ

-x なし
言語の指定をオフにして、後続のファイルが処理されるようにします
ファイル名のサフィックスに応じて( -x まったく使用されていません)。

-パス終了コード
通常 gccの コンパイラのいずれかのフェーズが実行された場合、プログラムはコード 1 で終了します。
不成功の戻りコードを返します。 指定すれば -パス終了コード gccの プログラム
代わりに、返されたフェーズによって生成された数値的に最大のエラーで返されます
エラー表示。 C、C++、および Fortran のフロントエンドは、内部の場合は 4 を返します。
コンパイラ エラーが発生します。

コンパイルの一部の段階のみが必要な場合は、次を使用できます。 -x (またはファイル名のサフィックス)
伝える gccの どこから始めればよいか、そしてオプションのXNUMXつ -c, -Sまたは -E どこに言うか gccの にある
止まる。 いくつかの組み合わせに注意してください(たとえば、 -x cpp-出力 -E)指示する gccの 実行します
何もありません。

-c ソースファイルをコンパイルまたはアセンブルしますが、リンクしないでください。 リンク段階は単純です
まだ完成してない。 最終的な出力は、各ソースファイルのオブジェクトファイルの形式になります。

デフォルトでは、ソースファイルのオブジェクトファイル名は、接尾辞を置き換えることによって作成されます .c,
.i, .s、など、 .o.

コンパイルやアセンブリを必要としない、認識されない入力ファイルは無視されます。

-S 適切なコンパイルの段階の後で停止します。 組み立てないでください。 出力はにあります
指定された非アセンブラ入力ファイルごとのアセンブラコードファイルの形式。

デフォルトでは、ソースファイルのアセンブラファイル名は、接尾辞を置き換えることによって作成されます
.c, .i、など、 .s.

コンパイルを必要としない入力ファイルは無視されます。

-E 前処理段階の後で停止します。 コンパイラを適切に実行しないでください。 出力はにあります
標準出力に送信される前処理されたソースコードの形式。

前処理を必要としない入力ファイルは無視されます。

-o file
出力をファイルに配置 file. これは、出力の種類に関係なく適用されます
実行可能ファイル、オブジェクト ファイル、アセンブラ ファイル、または
前処理された C コード。

If -o が指定されていない場合、デフォルトでは実行可能ファイルが アウト、 オブジェクト
ファイル ソース.サフィックス in ソース.o、そのアセンブラファイル ソース、プリコンパイル済み
のヘッダーファイル ソース.サフィックス.gch、および標準出力のすべての前処理されたCソース。

-v のステージを実行するために実行されたコマンドを(標準エラー出力に)出力します。
コンパイル。 また、コンパイラドライバプログラムとのバージョン番号を出力します。
プリプロセッサと適切なコンパイラ。

-###
いいね -v ただし、コマンドは実行されず、引数は引用符で囲まれます。
英数字または「./-_」のみを含みます。 これは、シェルスクリプトが
ドライバーが生成したコマンドラインをキャプチャします。

-パイプ
のさまざまな段階間の通信には、一時ファイルではなくパイプを使用します
コンパイル。 これは、アセンブラが読み取ることができない一部のシステムでは機能しません。
パイプから; しかし、GNUアセンブラには問題はありません。

- 助けて
によって理解されるコマンドラインオプションの説明を(標準出力に)印刷します。
gccの。 もし -v オプションも指定されます - 助けて にも引き継がれます
によって呼び出されるさまざまなプロセス gccの、コマンドライン オプションを表示できるようにする
彼らは受け入れます。 もし -ウェクストラ オプションも指定されています( - 助けて
オプション)、次にドキュメントが関連付けられていないコマンドライン オプション
も表示されます。

--ターゲットヘルプ
ターゲット固有のコマンドラインオプションの説明を(標準出力に)印刷します
ツールごとに。 一部のターゲットの場合、追加のターゲット固有の情報も
印刷されます。

--help = {class|[^]資格}[、...]
によって理解されるコマンドラインオプションの説明を(標準出力に)印刷します。
指定されたすべてのクラスと修飾子に適合するコンパイラー。 これらは
サポートされているクラス:

オプティマイザ
これにより、コンパイラがサポートするすべての最適化オプションが表示されます。

警告
これにより、によって生成される警告メッセージを制御するすべてのオプションが表示されます。
コンパイラ。

ターゲット
これにより、ターゲット固有のオプションが表示されます。 とは異なり --ターゲットヘルプ オプション
ただし、リンカーとアセンブラーのターゲット固有のオプションは使用できません。
表示されます。 これは、これらのツールが現在拡張機能をサポートしていないためです。
--help = 構文。

paramsは
これにより、認識された値が表示されます。 --パラメータ オプションを選択します。

言語
これにより、サポートされているオプションが表示されます 言語ここで、 言語 名前です
このバージョンの GCC でサポートされている言語の XNUMX つです。

一般的な
これにより、すべての言語に共通のオプションが表示されます。

サポートされている修飾子は次のとおりです。

文書化されていない
文書化されていないオプションのみを表示します。

参加した
同じで等号の後に表示される引数を取る表示オプション
次のような連続したテキスト: --help = target.


次の単語の後に別の単語として表示される引数を取るオプションを表示します
次のような元のオプション: -o 出力ファイル.

したがって、たとえば、によってサポートされているすべての文書化されていないターゲット固有のスイッチを表示するには
コンパイラでは、次のものが使用できます。

--help = target、undocumented

修飾子の意味は、接頭辞として ^ キャラクターなので
すべてのバイナリ警告オプション(つまり、オンまたはオフのいずれかであるもの)を表示する例
引数を取らない)説明がある場合は、次を使用します。

--help = warnings、^ joined、^ undocumented

への議論 --help = 逆修飾子のみで構成されるべきではありません。

複数のクラスを組み合わせることは可能ですが、これは通常、出力を次のように制限します。
何も表示されないほどです。 ただし、それが機能するXNUMXつのケースは次の場合です
クラスのXNUMXつは ターゲット. たとえば、すべてのターゲット固有の
以下の最適化オプションを使用できます。

--help = target、optimizers

  --help = オプションは、コマンド ラインで繰り返すことができます。 連続して使用するたびに、
要求されたオプションのクラスを表示し、すでに表示されているものをスキップします
表示されます。

Status -Q オプションは、コマンドラインの前に表示されます --help = オプション、次に
によって表示される説明テキスト --help = 変更されます。 表示されたものを説明する代わりに
オプションの場合、オプションが有効、無効、または設定されているかどうかが示されます
特定の値に(コンパイラがこれを知っていると仮定して、
--help = オプションが使用されます)。

これは、のARMポートからの切り捨てられた例です。 gccの:

%gcc -Q -mabi = 2 --help = target -c
次のオプションはターゲット固有です。
-mabi = 2
-mabort-on-noreturn [無効]
-mapcs [無効]

出力は、以前のコマンドラインオプションの影響に敏感であるため、
例では、どの最適化が有効になっているかを確認できます。 -O2 を使用して:

-Q -O2 --help = optimizers

または、次の方法で有効になっているバイナリ最適化を見つけることができます。 -O3 を使用して:

gcc -c -Q -O3 --help = optimizers> / tmp / O3-opts
gcc -c -Q -O2 --help = optimizers> / tmp / O2-opts
diff / tmp / O2-opts / tmp / O3-opts | grepが有効

-no-canonical-prefixes
シンボリックリンクを展開せず、への参照を解決します /../ or /./、またはパスを作成します
相対プレフィックスを生成する場合は絶対。

- バージョン
呼び出されたGCCのバージョン番号と著作権を表示します。

-ラッパー
ラッパープログラムの下ですべてのサブコマンドを呼び出します。 ラッパープログラムの名前と
そのパラメーターは、コンマ区切りのリストとして渡されます。

gcc -c tc -wrapper gdb、-args

これにより、のすべてのサブプログラムが呼び出されます gccのGDB --args、したがって、の呼び出し cc1
なります GDB --args cc1 ....

-fplugin =。そう
プラグインコードをファイルにロードします .so、によってdlopenされる共有オブジェクトであると想定されます
コンパイラ。 共有オブジェクトファイルのベース名は、プラグインを識別するために使用されます
引数の構文解析の目的で(参照 -fplugin-arg--キー= 下)。 各
プラグインは、プラグインAPIで指定されたコールバック関数を定義する必要があります。

-fplugin-arg--キー=
と呼ばれる引数を定義します キー 値は と呼ばれるプラグインの場合 .

-fdump-ada-spec[-スリム]
CおよびC ++ソースおよびインクルードファイルの場合、対応するAda仕様を生成します。

-fdump-go-spec =file
任意の言語の入力ファイルの場合、対応するGo宣言をで生成します file。 この
Goの「const」、「type」、「var」、および「func」宣言を生成します。これは便利な方法です。
他の言語で書かれたコードへのGoインターフェースの作成を開始します。

@file
からコマンドラインオプションを読み取る file。 読み取られたオプションは、の代わりに挿入されます
オリジナル @file オプション。 場合 file 存在しないか、読み取ることができない場合、オプション
文字通りに扱われ、削除されません。

オプションで file 空白で区切られます。 空白文字が含まれる場合があります
オプション全体を一重引用符または二重引用符で囲むことにより、オプション内で。 どれでも
文字(バックスラッシュを含む)は、文字の前に付けることで含めることができます
バックスラッシュが含まれています。 NS file それ自体に追加の@が含まれる場合がありますfile オプション; どれか
このようなオプションは再帰的に処理されます。

コンパイル C + + プログラム
C ++ソースファイルは通常、サフィックスのXNUMXつを使用します .C, .ccに, .cpp, .CPP, .c ++, .cpまたは
.cxx; C ++ヘッダーファイルはよく使用します .H H, .hpp, .H、または(共有テンプレートコードの場合) .tcc、および
前処理されたC ++ファイルはサフィックスを使用します .ii。 GCCは、これらの名前のファイルを認識し、
コンパイルと同じ方法でコンパイラを呼び出しても、C ++プログラムとしてコンパイルします。
Cプログラム(通常は名前付き) gccの).

ただし、 gccの C ++ライブラリを追加しません。 g ++ GCCを呼び出すプログラムであり、
扱い .c, .h & .i ファイルを C ソース ファイルではなく C++ ソース ファイルとして -x is
使用され、C++ ライブラリに対するリンクを自動的に指定します。 この番組も
を使用して C ヘッダー ファイルをプリコンパイルする場合に便利です。 .h C++ コンパイルで使用するための拡張子。
多くのシステムでは、 g ++ 名前もインストールされています C ++.

C ++プログラムをコンパイルするときは、同じコマンドラインオプションの多くを指定できます。
任意の言語でプログラムをコンパイルするために使用します。 またはCにとって意味のあるコマンドラインオプション
および関連する言語。 または、C ++プログラムでのみ意味のあるオプション。

オプション 制御 C 方言
次のオプションは、Cの方言(またはC ++などのCから派生した言語)を制御します。
コンパイラが受け入れるObjective-CおよびObjective-C ++):

-アンシ
Cモードでは、これは同等です -std = c90。 C ++モードでは、
-std = c ++ 98.

これにより、ISO C90と互換性のないGCCの特定の機能がオフになります(
Cコードのコンパイル)、または「asm」や「asm」などの標準C ++(C ++コードのコンパイル時)
「typeof」キーワード、および「unix」や「vax」などの事前定義されたマクロは、
使用しているシステムのタイプ。 また、望ましくなく、めったに使用されないISOを有効にします
トリグラフ機能。 Cコンパイラの場合、C ++スタイルの認識を無効にします //
コメントと「インライン」キーワード。

代替キーワード「__asm __」、「__ extension __」、「__ inline __」、「__ typeof__」
にもかかわらず働き続ける -アンシ。 ISOCプログラムでそれらを使用したくないでしょう。
もちろんですが、に含まれている可能性のあるヘッダーファイルにそれらを入れると便利です
で行われたコンパイル -アンシ。 「__unix__」や
「__vax__」も利用可能で、有無にかかわらず利用できます -アンシ.

  -アンシ オプションを指定しても、ISO以外のプログラムが不当に拒否されることはありません。 にとって
その、 -衒学者 に加えて必要です -アンシ.

マクロ「__STRICT_ANSI__」は、 -アンシ オプションが使用されます。 いくつかのヘッダー
ファイルはこのマクロに気づき、特定の関数の宣言や定義を控えることがあります
ISO規格で要求されていない特定のマクロ。 これは干渉を避けるためです
これらの名前を他の目的で使用する可能性のあるプログラムで。

通常は組み込まれているが、ISO C で定義されたセマンティクスを持たない関数
(「alloca」や「ffs」など) は組み込み関数ではありません。 -アンシ 使用されている。

-std =
言語標準を決定します。 このオプションは現在、次の場合にのみサポートされます
CまたはC ++のコンパイル。

コンパイラは、次のようないくつかの基本標準を受け入れることができます。 c90 or c ++ 98、およびGNU方言
それらの標準の ヌー90 or gnu ++ 98. 基本規格を指定することにより、
コンパイラは、その標準に従うすべてのプログラムと GNU を使用するプログラムを受け入れます。
矛盾しない拡張機能。 例えば、 -std = c90 特定の電源をオフにします
「asm」や「typeof」など、ISO C90 と互換性のない GCC の機能
ただし、ISO C90 で意味を持たないその他の GNU 拡張 (次のようなもの) は含まれません。
「?:」式の中間項を省略します。 一方、GNUを指定することにより、
標準の方言、コンパイラがサポートするすべての機能が有効になっています。
機能は、基本標準と一部の厳密に準拠したプログラムの意味を変更します
拒否される場合があります。 特定の標準はによって使用されます -衒学者 どれを識別するために
features は、標準のそのバージョンの GNU 拡張機能です。 例えば -std = gnu90
-衒学者 C++ スタイルについて警告します // コメント、 -std = gnu99 -衒学者 でしょう
ではありません。

このオプションの値を指定する必要があります。 可能な値は

c90
c89
iso9899:1990
すべてのISOC90プログラムをサポートします(ISO C90と競合する特定のGNU拡張機能)
無効になっています)。 と同じ -アンシ Cコード用。

iso9899:199409
修正90で修正されたISOC1。

c99
c9x
iso9899:1999
iso9899:199x
ISO C99。 この標準はまだ完全にはサポートされていないことに注意してください。 見る
<http://gcc.gnu.org/gcc-4.7/c99status.html>詳細については。 名 c9x
& iso9899:199x 非推奨です。

c11
c1x
iso9899:2011
ISO C11、ISO C 標準の 2011 年版。 サポートが不完全で、
実験的。 名前 c1x は非推奨です。

ヌー90
ヌー89
ISO C90のGNU方言(一部のC99機能を含む)。 これはCのデフォルトです
コー​​ド。

ヌー99
gnu9x
ISO C99 の GNU 方言。 ISO C99 が GCC に完全に実装されると、これは
デフォルトになります。 名前 gnu9x は非推奨です。

ヌー11
gnu1x
ISO C11 の GNU 方言。 サポートは不完全で実験的なものです。 名前 gnu1x
は非推奨です。

c ++ 98
1998 年の ISO C++ 標準と修正版。 と同じ -アンシ C ++コードの場合。

gnu ++ 98
GNU方言 -std = c ++ 98。 これはC ++コードのデフォルトです。

c ++ 11
2011 ISO C++ 標準と修正版。 C++11 のサポートは引き続き
実験的であり、将来のリリースでは互換性のない方法で変更される可能性があります。

gnu ++ 11
GNU方言 -std = c ++ 11. C++11 のサポートはまだ実験段階であり、変更される可能性があります
将来のリリースでは互換性のない方法で。

-fgnu89-インライン
オプション -fgnu89-インライン 「インライン」に従来のGNUセマンティクスを使用するようにGCCに指示します
C99モードで機能します。
このオプションは、GCCバージョン4.1.3までで受け入れられ、無視されます。
4.3。 GCCバージョン4.3以降では、C99モードでのGCCの動作が変更されます。 使用する
このオプションは、「gnu_inline」関数属性をすべてに追加することとほぼ同じです。
インライン関数。

オプション -fno-gnu89-インライン GCCにC99セマンティクスを使用するように明示的に指示します
C99またはgnu99モードの場合は「インライン」(つまり、デフォルトの動作を指定します)。 この
オプションはGCC4.3で最初にサポートされました。 このオプションはでサポートされていません -std = c90 or
-std = gnu90 モード。

プリプロセッサマクロ「__GNUC_GNU_INLINE__」および「__GNUC_STDC_INLINE__」を使用できます
「インライン」関数に対してどのセマンティクスが有効であるかを確認します。

-補助情報 ファイル名
宣言された、および/または宣言されたすべての関数のプロトタイプ宣言を指定されたファイル名に出力します
ヘッダーファイルを含む、翻訳単位で定義されます。 このオプションは
C以外の言語では黙って無視されます。

宣言に加えて、ファイルはコメントで、各宣言の起源を示します
(ソースファイルと行)、宣言が暗黙的、プロトタイプ、または
プロトタイプなし(I, N 新規または O それぞれ、後の最初の文字の古い
行番号とコロン)、およびそれが宣言からのものか定義からのものか
(C or F、それぞれ、次の文字で)。 機能の場合
定義、K&Rスタイルの引数のリストとそれに続く宣言も
コメント内で、宣言後に提供されます。

-休耕-パラメータなし-可変個引数関数
名前付きパラメーターなしで可変個引数関数を受け入れます。

このような関数を定義することは可能ですが、これはそのままではあまり役に立ちません。
引数を読み取ることはできません。 この構成はCでのみサポートされているため、これはCでのみサポートされます。
C ++で許可されています。

-fno-asm
「asm」、「inline」、または「typeof」をキーワードとして認識しないでください。コードでこれらを使用できるようになります。
識別子としての単語。 キーワード「__asm __」、「__ inline__」、および
代わりに「__typeof__」。 -アンシ 含意する -fno-asm.

C ++では、「asm」と「inline」は「typeof」キーワードにのみ影響するため、このスイッチは「typeof」キーワードにのみ影響します。
標準キーワード。 あなたは使用したいかもしれません -fno-gnu-キーワード 代わりにフラグがあります
同じ効果。 C99モードの場合(-std = c99 or -std = gnu99)、このスイッチはにのみ影響します
「inline」はISOC99の標準キーワードであるため、「asm」および「typeof」キーワード。

-fno-builtin
-fno-builtin-function
で始まらない組み込み関数を認識しない __ビルトイン_ プレフィックスとして。

GCCは通常、特定の組み込み関数をさらに処理するための特別なコードを生成します
効率的; たとえば、「alloca」への呼び出しは、単一の命令になる場合があります。
スタックを直接調整すると、「memcpy」の呼び出しがインラインコピーループになる可能性があります。 The
結果として得られるコードは、多くの場合、小さくて高速ですが、関数が
そのように表示されなくなると、これらの呼び出しにブレークポイントを設定したり、変更したりすることはできません。
別のライブラリとリンクすることによる関数の動作。 また、
関数は組み込み関数として認識され、GCCはそれに関する情報を使用する場合があります
その関数の呼び出しに関する問題について警告する、またはより多くを生成する関数
結果のコードにその関数への呼び出しが含まれている場合でも、効率的なコード。 にとって
たとえば、警告は次のように与えられます -Wフォーマット 「printf」が無効な場合、「printf」への不適切な呼び出し
組み込まれており、"strlen" はグローバル メモリを変更しないことが知られています。

-fno-builtin-function 組み込み関数のみのオプション function 無効になっています。
function で始めてはいけません __ビルトイン_。 組み込みではない関数に名前が付けられている場合
このバージョンのGCCでは、このオプションは無視されます。 対応するものはありません
-fbuiltin-function オプション; 組み込み機能を選択的に有効にしたい場合
-fno-builtin or -自立、次のようなマクロを定義できます。

#define abs(n)__ builtin_abs((n))
#define strcpy(d、s)__ builtin_strcpy((d)、(s))

-おびえた
コンパイルがホスト環境で行われることをアサートします。 これは -fbuiltin.
ホスト環境とは、標準ライブラリ全体が利用できる環境です。
どの「main」の戻りタイプは「int」です。 例は、
カーネル。 これは同等です -fno-自立型.

-自立
コンパイルが独立した環境で行われることを主張します。 これは
-fno-builtin。 自立型環境とは、標準ライブラリでは不可能な環境です。
存在し、プログラムの起動は必ずしも「メイン」であるとは限りません。 最も明白な例
OSカーネルです。 これは同等です -fno-hosted.

-fopenmp
C / C ++ではOpenMPディレクティブ "#pragma omp"、Fortranでは "!$ omp"の処理を有効にします。
日時 -fopenmp が指定されている場合、コンパイラは次のように並列コードを生成します。
OpenMPアプリケーションプログラムインターフェイスv3.0http://www.openmp.org/>。 このオプション
含意する -pthread、したがって、をサポートしているターゲットでのみサポートされます
-pthread.

-fgnu-tm
オプションの場合 -fgnu-tm が指定されている場合、コンパイラは Linux 用のコードを生成します。
インテルの現在のトランザクションメモリABI仕様書の変種(改訂
1.1、6年2009月XNUMX日)。 これは実験的な機能であり、そのインターフェイスは次のように変更される可能性があります
公式仕様の変更に伴うGCCの将来のバージョン。 注意してください
この機能では、すべてのアーキテクチャがサポートされています。

トランザクションメモリに対するGCCのサポートの詳細については、

トランザクションメモリ機能は、呼び出し以外の例外ではサポートされていないことに注意してください
(-fnon-call-例外).

-fms-拡張機能
Microsoftヘッダーファイルで使用されるいくつかの非標準構造を受け入れます。

C ++コードでは、これにより、構造体のメンバー名を以前のタイプと同様にすることができます
宣言。

typedef int UOW;
構造体ABC {
うわー、うわー。
};

構造体と共用体の名前のないフィールドの一部のケースは、これでのみ受け入れられます
オプションを選択します。

-fplan9-拡張機能
Plan9コードで使用されているいくつかの非標準構造を受け入れます。

これにより、 -fms-拡張機能、匿名の構造体へのポインタの受け渡しを許可します
フィールドのタイプの要素へのポインタを期待する関数へのフィールド、および
typedefを使用して宣言された匿名フィールドの参照を許可します。 これだけです
C ++ではなく、Cでサポートされています。

-三重音字
ISOCトライグラフをサポートします。 The -アンシ オプション(および -標準 厳密なISOCのオプション
適合性)は意味します -三重音字.

-統合されていない-cpp
前処理とコンパイルの XNUMX つのパスでコンパイルを実行します。 このオプションにより、
ユーザーが「cc1」、「cc1plus」、または「cc1obj」を -B オプション。 ユーザーが提供した
コンパイルステップは、通常の後に追加の前処理ステップを追加できます
前処理ですが、コンパイルする前です。 デフォルトでは、統合された cpp を使用します
(内部 cpp)

このオプションのセマンティクスは、「cc1」、「cc1plus」、および「cc1obj」がマージされた場合に変更されます。

-伝統的な
-従来の-cpp
以前は、これらのオプションにより、GCCは先行標準のCコンパイラをエミュレートしようとしました。
それらは現在、 -E スイッチ。 プリプロセッサは引き続きサポートします
プレスタンダードモード。 詳細については、GNUCPPのマニュアルを参照してください。

-fcond-不一致
XNUMX番目とXNUMX番目の引数で型が一致しない条件式を許可します。
そのような式の値は無効です。 このオプションはC ++ではサポートされていません。

-亜麻-ベクトル-変換
要素数が異なるベクトル間での暗黙的な変換を許可する、および/または
互換性のない要素タイプ。 このオプションは、新しいコードには使用しないでください。

-funsigned-char
「unsignedchar」のように、タイプ「char」をunsignedとします。

マシンの種類ごとに、「char」のデフォルトがあります。 どちらか
デフォルトでは「unsignedchar」、デフォルトでは「signedchar」のようになります。

理想的には、ポータブルプログラムでは、常に「signedchar」または「unsignedchar」を使用する必要があります。
オブジェクトの符号に依存します。 しかし、多くのプログラムが使用するように書かれています
プレーンな「char」であり、署名されているか、署名されていないかによって、
彼らが書かれたマシン。 このオプションとその逆は、そのようなものを作ることができます
プログラムは反対のデフォルトで動作します。

タイプ「char」は、常に「signedchar」または「unsigned」のそれぞれとは異なるタイプです。
char」、その動作は常にこれらXNUMXつのうちのXNUMXつと同じですが。

-fsigned-char
「signedchar」のように、タイプ「char」に署名します。

これはと同等であることに注意してください -fno-unsigned-char、の負の形式です
-funsigned-char。 同様に、オプション -fno-signed-char に相当します
-funsigned-char.

-fsigned-ビットフィールド
-funsigned-ビットフィールド
-fno-signed-ビットフィールド
-fno-unsigned-ビットフィールド
これらのオプションは、宣言時にビットフィールドが符号付きか符号なしかを制御します
「signed」または「unsigned」のいずれも使用しません。 デフォルトでは、このようなビットフィールドは署名されています。
これは一貫しているためです。「int」などの基本的な整数型は符号付き型です。

オプション 制御 C + + 方言
このセクションでは、C++ プログラムでのみ意味を持つコマンド ライン オプションについて説明します。
ただし、使用する言語に関係なく、GNU コンパイラ オプションのほとんどを使用することもできます。
たとえば、ファイル「firstClass.C」を次のようにコンパイルできます。

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

この例では、 -フレポ C ++プログラム専用のオプションです。 あなたは使用することができます
GCCでサポートされている任意の言語のその他のオプション。

これがオプションのリストです C ++プログラムをコンパイルする場合:

-fabi-version =n
バージョンを使用 n C++ ABI の。 バージョン 2 は、C++ ABI の最初のバージョンです。
G++ 3.4 で登場。 バージョン 1 は、最初に登場した C++ ABI のバージョンです。
G++ 3.2。 バージョン 0 は、常に C++ に最も厳密に準拠するバージョンです。
ABI 仕様。 したがって、バージョン 0 を使用して取得した ABI は ABI として変更されます。
バグが修正されました。

デフォルトはバージョン 2 です。

バージョン3は、テンプレート引数として定数アドレスを操作する際のエラーを修正します。

G ++ 4で最初に登場したバージョン4.5は、ベクターの標準的なマングリングを実装しています。
タイプ。

G ++ 5で最初に登場したバージョン4.6は、属性のマングリングを修正します
関数ポインタ型のconst / volatile、プレーンdeclのdecltype、および
別のパラメーターの宣言における関数パラメーター。

G ++ 6で最初に登場したバージョン4.7は、C ++ 11のプロモーション動作を修正します。
スコープ付き列挙型とテンプレート引数パックのマングリング、const / static_cast、プレフィックス++
および-、およびテンプレート引数として使用されるクラススコープ関数。

参照 -わび.

-fno-アクセス制御
すべてのアクセスチェックをオフにします。 このスイッチは、主に次のバグを回避するのに役立ちます。
アクセス制御コード。

-fcheck-新しい
「operatornew」によって返されるポインタがnullでないことを確認してから、
割り当てられたストレージを変更します。 C ++であるため、このチェックは通常不要です。
standard は、「operator new」が宣言されている場合にのみ 0 を返すことを指定します 投げる(),
その場合、これがなくてもコンパイラは常に戻り値をチェックします
オプション。 他のすべての場合、「operator new」に空でない例外がある場合
仕様では、メモリの枯渇は「std::bad_alloc」をスローすることで通知されます。 こちらもご覧ください
新製品 (投げない).

-fconserve-スペース
次のように、初期化されていない、または実行時に初期化されたグローバル変数を共通セグメントに入れます。
Cはそうします。 これにより、重複を診断しないという犠牲を払って、実行可能ファイルのスペースが節約されます
定義。 このフラグを指定してコンパイルすると、プログラムが不可解にクラッシュする場合
「main()」が完了した後、オブジェクトが XNUMX 回破棄されている可能性があります
XNUMX つの定義がマージされたためです。

このオプションは、サポートが追加されたため、ほとんどのターゲットでは役に立ちません。
変数を共通にせずにBSSに入れます。

-fconstexpr-depth =n
C ++ 11constexpr関数のネストされた評価の最大深度をに設定します n。 限界
定数式の評価中に無限の再帰を検出するために必要です。 The
標準で指定されている最小値は512です。

-fdeduce-init-list
ブレースからの std::initializer_list としてのテンプレート型パラメーターの推定を有効にします。
同封の初期化子リスト、すなわち

レンプレート自動転送(T t)-> decltype(realfn(t))
{
realfn(t);を返します。
}

void f()
{
forward({1,2}); //転送電話 >>
}

この控除は、当初提案されたものの可能な拡張として実装されました
C ++ 11標準のセマンティクスですが、最終的な標準の一部ではなかったため、
デフォルトでは無効になっています。 このオプションは廃止され、将来削除される可能性があります
G ++のバージョン。

-ffriend-注入
フレンド関数を囲んでいる名前空間に挿入して、外部から見えるようにします
それらが宣言されているクラスのスコープ。 フレンド機能が文書化されました
古い注釈付きC++リファレンスマニュアル、および以前のバージョンのG++でこのように機能する
4.1は常にそのように機能しました。 ただし、ISO C ++では、そうではないフレンド関数
囲んでいるスコープで宣言されているものは、引数に依存するルックアップを使用してのみ見つけることができます。
このオプションを使用すると、以前のリリースと同じように友達が注入されます。

このオプションは互換性のためのものであり、G ++の将来のリリースで削除される可能性があります。

-fno-elide-コンストラクター
C ++標準では、実装で一時的なものの作成を省略できます。
同じタイプの別のオブジェクトを初期化するために使用されます。 このオプションを指定すると、無効になります
その最適化により、G ++はすべての場合にコピーコンストラクターを呼び出すように強制されます。

-fno-enforce-eh-specs
実行時に例外仕様の違反をチェックするコードを生成しないでください。
このオプションはC ++標準に違反していますが、コードサイズを減らすのに役立つ場合があります
定義するのとよく似たプロダクションビルド NDEBUG。 これはユーザーコードの許可を与えません
例外仕様に違反して例外をスローする。 コンパイラは
仕様に基づいて最適化するため、予期しない例外をスローすると、
未定義の動作が発生します。

-範囲外
-fno-for-scope
If -範囲外 が指定されている場合、で宣言されている変数のスコープ for-init ステートメント
に限定されています for C ++標準で指定されているように、ループ自体。 もしも
-fno-for-scope が指定されている場合、で宣言されている変数のスコープ for-init ステートメント
古いバージョンのG ++の場合のように、囲んでいるスコープの最後まで拡張し、
C ++の他の(従来の)実装。

標準に従うためにどちらのフラグも指定されていない場合のデフォルトですが、
そうでなければ無効になるか、異なるコードを持つ古いスタイルのコードに対する警告
行動。

-fno-gnu-キーワード
「typeof」をキーワードとして認識しないでください。コードでこの単語を使用できるようになります。
識別子。 代わりに、キーワード「__typeof__」を使用できます。 -アンシ 含意する
-fno-gnu-キーワード.

-fno-implicit-templates
暗黙的に(つまり、によってインスタンス化される)非インラインテンプレートのコードを発行しないでください
使用する); 明示的なインスタンス化のコードのみを発行します。

-fno-implicit-inline-templates
インラインテンプレートの暗黙的なインスタンス化のコードも発行しないでください。 デフォルト
インラインを異なる方法で処理して、最適化ありとなしでコンパイルすることです。
明示的なインスタンス化の同じセットが必要です。

-fno-implement-inlines
スペースを節約するために、によって制御されるインライン関数のオフラインコピーを発行しないでください。
#プラグマ 実装. これらの関数が正しくない場合、リンカー エラーが発生します。
それらが呼び出されるすべての場所にインライン化されます。

-fms-拡張機能
暗黙的な int や暗黙の int など、MFC で使用される構成に関するペダンティックな警告を無効にします。
非標準の構文を介してメンバー関数へのポインターを取得します。

-fno-nonansi-builtins
ANSI / ISOCで義務付けられていない関数の組み込み宣言を無効にします。これら
「ffs」、「alloca」、「_ exit」、「index」、「bzero」、「conjf」、およびその他の関連するものを含める
機能します。

-fnothrow-opt
「throw()」例外仕様を「noexcept」仕様であるかのように扱う
関数に関連するテキストサイズのオーバーヘッドを例外なく削減または排除する
仕様。 関数に自明でないタイプのローカル変数がある場合
デストラクタ、例外仕様は実際に関数を小さくします
これらの変数の EH クリーンアップを最適化して取り除くことができるためです。 セマンティック
効果は、そのような例外を持つ関数から例外がスローされることです
指定すると、「予期しない」ではなく「終了」が呼び出されます。

-fno 演算子名
演算子名のキーワード「and」、「bitand」、「bitor」、「compl」、「not」、「or」は扱わないでください。
キーワードとしての同義語としての「xor」。

-fno-オプション-diags
コンパイラが発行する必要がないと標準が言っている診断を無効にします。
現在、G ++によって発行されるそのような診断は、
クラス内の複数の意味。

-寛容
不適合コードに関するいくつかの診断をエラーから警告にダウングレードします。 したがって、
-寛容 一部の不適合コードのコンパイルが可能になります。

-fno-pretty-templates
エラーメッセージが関数テンプレートの特殊化を参照している場合、コンパイラは
通常、テンプレートの署名に続いてテンプレート引数を出力します
およびシグネチャ内のすべての型定義または型名 (たとえば、"void f(T) [with T = int]" ではなく)
"void f(int)")よりも、どのテンプレートが関係しているかが明確になります。 エラーが発生した場合
メッセージがクラス テンプレートの特殊化を参照している場合、コンパイラはそれを省略します。
そのテンプレートのデフォルトのテンプレート引数と一致するテンプレート引数。 もしも
これらの動作のいずれかにより、エラーメッセージを理解するのが難しくなります。
より簡単に、使用して -fno-pretty-templates それらを無効にします。

-フレポ
リンク時にテンプレートの自動インスタンス化を有効にします。 このオプションは、
-fno-implicit-templates.

-fno-rtti
で使用する仮想関数を使用して、すべてのクラスに関する情報の生成を無効にします。
C ++実行時型識別機能(ダイナミックキャスト & タイプID)。 そうしない場合
言語のこれらの部分を使用すると、このフラグを使用してスペースを節約できます。 ノート
その例外処理は同じ情報を使用しますが、必要に応じて生成します。
  ダイナミックキャスト 演算子は、ランタイムを必要としないキャストに引き続き使用できます
型情報、つまり「void *」または明確な基本クラスにキャストします。

-fstats
コンパイルの最後にフロントエンド処理に関する統計を発行します。 この
情報は通常、G ++開発チームにのみ役立ちます。

-fstrict-列挙型
列挙型の値が
(C ++標準で定義されているように)列挙の値のXNUMXつのみにすることができます。
基本的に、必要な最小ビット数で表すことができる値
すべての列挙子を表します)。 プログラムが使用する場合、この仮定は有効でない可能性があります
任意の整数値を列挙型に変換するためのキャスト。

-ftemplate-depth =n
テンプレートクラスの最大インスタンス化深度をに設定します n。 の制限
テンプレートのインスタンス化の深さは、テンプレート中に無限の再帰を検出するために必要です
クラスのインスタンス化。 ANSI / ISO C ++準拠プログラムは、最大値に依存してはなりません
17より大きい深さ(C ++ 1024では11に変更)。 デフォルト値は900です。
コンパイラーは、状況によっては1024に達する前にスタックスペースを使い果たす可能性があります。

-fno-threadsafe-statics
スレッド用にC ++ ABIで指定されたルーチンを使用するために余分なコードを出力しないでください-
ローカル統計の安全な初期化。 このオプションを使用して、コードサイズを減らすことができます
スレッドセーフである必要のないコードでわずかに。

-fuse-cxa-atexit
「__cxa_atexit」を使用して、静的ストレージ期間を持つオブジェクトのデストラクタを登録します
「atexit」関数ではなく関数。 このオプションは完全に必要です
標準に準拠した静的デストラクタの処理ですが、C の場合にのみ機能します
ライブラリは「__cxa_atexit」をサポートしています。

-fno-use-cxa-get-例外-ptr
「__cxa_get_exception_ptr」ランタイム ルーチンを使用しないでください。 これにより、
「std :: uncaught_exception」は正しくありませんが、ランタイムルーチンが
利用できません。

-fvisibility-inlines-hidden
このスイッチは、ユーザーがポインターをインラインと比較しようとしないことを宣言します
XNUMX つの関数のアドレスが異なる方法で取得された関数またはメソッド
共有オブジェクト。

これの効果は、GCCがインラインメソッドを効果的にマークできることです。
"__attribute __((visibility(" hidden ")))"で、エクスポートに表示されないようにします
DSOのテーブルであり、DSO内で使用する場合はPLT間接参照を必要としません。
このオプションを有効にすると、DSOのロード時間とリンク時間に劇的な影響を与える可能性があります。
ライブラリが重くなると、動的エクスポートテーブルのサイズが大幅に削減されます
テンプレートの使用。

このスイッチの動作は、メソッドを非表示としてマークすることとはまったく同じではありません。
関数にローカルな静的変数や原因に影響を与えないため、直接
関数がXNUMXつの共有オブジェクトでのみ定義されていると推測するコンパイラー。

メソッドを明示的に可視性を持つものとしてマークして、の影響を無効にすることができます。
そのメソッドに切り替えます。 たとえば、ポインタを
特定のインラインメソッドでは、デフォルトの可視性を持つものとしてマークすることができます。 マーキング
明示的な可視性を持つクラスを囲んでも効果はありません。

明示的にインスタンス化されたインラインメソッドは、リンケージとしてこのオプションの影響を受けません
そうしないと、共有ライブラリの境界を越える可能性があります。

-fvisibility-ms-compat
このフラグは、可視性設定を使用してGCCのC ++リンケージモデルを作成しようとします
Microsoft VisualStudioと互換性があります。

フラグは、GCCのリンケージモデルに次の変更を加えます。

1.デフォルトの可視性を「非表示」に設定します。 -fvisibility = hidden.

2.タイプは、デフォルトでは非表示になりませんが、メンバーは非表示になりません。

3.明示的な可視性のないタイプについては、単一定義規則が緩和されます
複数の異なる共有オブジェクトで定義されている仕様: それら
このオプションが指定されたときに宣言が許可されていた場合、宣言は許可されます。
使用されていない。

新しいコードでは、を使用することをお勧めします -fvisibility = hidden そして、それらのクラスをエクスポートします
外部から見えるようにすることを目的としています。 残念ながら、コードが依存する可能性がありますが、
おそらく偶然に、VisualStudioの動作について。

これらの変更の結果の中には、同じタイプの静的データメンバーがあります
同じ名前で異なる共有オブジェクトで定義されているものは異なるため、
一方を変更しても他方は変更されません。 定義された関数メンバーへのポインター
異なる共有オブジェクトで比較すると、等しくない場合があります。 このフラグが指定されると、
同じ名前のタイプを異なる方法で定義するためのODRの違反。

-fno-弱い
リンカによって提供されている場合でも、弱い記号のサポートは使用しないでください。 デフォルトでは、G ++
利用可能な場合、弱いシンボルを使用します。 このオプションはテスト用にのみ存在し、
エンドユーザーは使用しないでください。 劣ったコードになり、何のメリットもありません。
このオプションは、G ++の将来のリリースで削除される可能性があります。

-nostdinc ++
C ++に固有の標準ディレクトリでヘッダーファイルを検索しないでください。ただし、検索してください。
それでも他の標準ディレクトリを検索します。 (このオプションは、ビルド時に使用されます
C ++ライブラリ。)

さらに、これらの最適化、警告、およびコード生成オプションには、意味があるだけです。
C ++プログラムの場合:

-fno-デフォルト-インライン
想定しない インライン クラス スコープ内で定義された関数の場合。
これらの関数には、インライン関数のようなリンケージがあることに注意してください。 彼らはそうしません
デフォルトでインライン化されます。

-わび (C、Objective-C、C ++およびObjective-C ++のみ)
G++がベンダー中立と互換性がない可能性のあるコードを生成したときに警告する
C++ABI。 そのようなすべてのケースについて警告するための努力がなされてきましたが、
G ++が生成しているにもかかわらず、おそらく警告されないいくつかのケース
互換性のないコード。 また、警告が発せられる場合もあります。
生成されるコードは互換性があります。

懸念がある場合は、これらの警告を回避するためにコードを書き直す必要があります。
G ++によって生成されたコードはによって生成されたコードとバイナリ互換ではない可能性があるという事実
他のコンパイラ。

の既知の非互換性 -fabi-version = 2 (デフォルト)インクルード:

・参照型の非型テンプレートパラメータを持つテンプレートがマングルされます
間違って:

extern int N;
レンプレート構造体S {};
ボイドn(S ){2}

これはで修正されています -fabi-version = 3.

・「__ attribute((vector_size))」を使用して宣言されたSIMDベクトルタイプは、
ベクトルを取る関数のオーバーロードを許可しない非標準的な方法
さまざまなサイズの。

マングリングはで変更されます -fabi-version = 4.

の既知の非互換性 -fabi-version = 1 次のとおりです。

・ビットフィールドのテールパディングの不適切な処理。 G++はデータのパックを試みる可能性があります
基本クラスと同じバイトに。 例えば:

struct A {virtual void f(); int f1:1; };
struct B:public A {int f2:1; };

この場合、G++ は "B::f2" を "A::f1" と同じバイトに配置します。 その他のコンパイラ
しない。 この問題を回避するには、「A」を明示的にパディングしてサイズを大きくします。
プラットフォームのバイト サイズの倍数です。 それはG ++およびその他を引き起こします
コンパイラは「B」を同じようにレイアウトします。

・仮想ベースのテールパディングの不適切な処理。 G++はテールを使用しません
仮想ベースをレイアウトするときのパディング。 例えば:

struct A {virtual void f(); char c1; };
構造体B{B(); シャールc2; };
構造体C:パブリックA、パブリック仮想B {};

この場合、G++ は "A" の末尾パディングに "B" を配置しません。 他の
コンパイラはそうします。 「A」を明示的にパディングすることで、この問題を回避できます。
size はその配置の倍数です (仮想基本クラスは無視されます)。 それは
G++ やその他のコンパイラが "C" を同じようにレイアウトします。

・宣言された幅がそれらの幅よりも大きいビットフィールドの誤った処理
ビットフィールドがユニオンに表示される場合の基になるタイプ。 例えば:

ユニオンU{inti:4096; };

「int」が 4096 ビットを持たないと仮定すると、G++ は共用体を小さくしすぎます。
「int」のビット数によって。

・空のクラスは、誤ったオフセットに配置される可能性があります。 例えば:

構造体A{};

構造体B{
ああ;
仮想ボイドf();
};

構造体C:パブリックB、パブリックA {};

G++ は、「C」の「A」基本クラスをゼロ以外のオフセットに配置します。 配置する必要があります
オフセット ゼロ。 G++ は、「B」の「A」データ メンバーが
既にオフセット ゼロにあります。

・タイプに「typename」またはテンプレートテンプレートが含まれるテンプレート関数の名前
パラメータが誤ってマングルされる可能性があります。

テンプレート
void f(typename Q :: X){}

テンプレートクラスQ>
void f(typename Q ::バツ) {}

これらのテンプレートのインスタンス化は、誤ってマングルされる可能性があります。

また、psABI 関連の変更についても警告します。 この時点で既知の psABI の変更は次のとおりです。

・SYSV/x86-64の場合、long doubleでunionを渡す場合、inで渡すように変更
psABI で指定されたメモリ。 例えば:

ユニオンU {
ロングダブルld;
int i;
};

「union U」は常にメモリに渡されます。

-Wctor-dtor-プライバシー (C ++およびObjective-C ++のみ)
その中のすべてのコンストラクタまたはデストラクタが原因でクラスが使用できないように見える場合に警告します
クラスはプライベートであり、フレンドもパブリック静的メンバー関数もありません。

-Wdelete-非仮想-dtor (C ++およびObjective-C ++のみ)
いつ警告する 削除 仮想関数を持つクラスのインスタンスを破棄するために使用されます
および非仮想デストラクタ。 派生クラスのインスタンスを削除することは安全ではありません
基本クラスに仮想がない場合は、基本クラスへのポインタを介して
デストラクタ。 この警告はによって有効になります -壁.

-狭める (C ++およびObjective-C ++のみ)
C ++ 11で禁止されているナローイング変換が発生した場合に警告します { }、例えば

int i = {2.2}; //エラー:doubleからintにナローイング

このフラグはに含まれています -壁 & -Wc ++ 11-互換性.

-std=c++11 で、 -ナローイングなし 標準で必要な診断を抑制します。
これは整形式コードの意味に影響を与えないことに注意してください。 コンバージョンを絞り込む
SFINAEのコンテキストでは、依然として不正な形式と見なされます。

-Wno以外 (C ++およびObjective-C ++のみ)
関数の呼び出しのためにnoexcept-expressionがfalseと評価されたときに警告します
スローしない例外仕様がない(つまり、 投げる() or 例外なし)
しかし、コンパイラーは例外をスローしないことを知っています。

-Wnon-virtual-dtor (C ++およびObjective-C ++のみ)
クラスに仮想関数とアクセス可能な非仮想デストラクタがある場合に警告します。
この場合、派生クラスのインスタンスを削除することは可能ですが安全ではありません
基本クラスへのポインターを介して。 この警告は、次の場合にも有効になります。 -Weffc ++ is
指定。

-リオーダー (C ++およびObjective-C ++のみ)
コードで指定されたメンバー初期化子の順序が順序と一致しない場合に警告します
それらが実行されなければならない。例えば:

構造体A {
int i;
int j;
A():j(0)、i(1){}
};

コンパイラは、メンバー初期化子を再配置します i & j 一致する
メンバーの宣言順序。その旨の警告を発します。 この警告は
有効にする -壁.

以下 -W..。 オプションは影響を受けません -壁.

-Weffc ++ (C ++およびObjective-C ++のみ)
スコットマイヤーズからの次のスタイルガイドラインの違反について警告する 効果的な
C ++、 二番 エディション 本:

· 項目 11: クラスのコピー コンストラクターと代入演算子を定義する
動的に割り当てられたメモリ。

· 項目 12: コンストラクターでの代入よりも初期化を優先します。

· 項目 14: 基本クラスでデストラクタを仮想化する。

· 項目 15: "operator=" に *this への参照を返させます。

· 項目 23: オブジェクトを返さなければならないときに参照を返そうとしないでください。

Scott Meyers の次のスタイル ガイドラインの違反についても警告します。 その他
効果的な C + + 本:

· 項目 6: 増分と減分の前置形と後置形を区別する
演算子。

· 項目 7: "&&"、"||"、または "," をオーバーロードしないでください。

このオプションを選択するときは、標準ライブラリヘッダーがすべてに準拠しているわけではないことに注意してください
これらのガイドラインの; 使用する grep -v それらの警告を除外します。

-Wstrict-null-センチネル (C ++およびObjective-C ++のみ)
キャストされていない "NULL" をセンチネルとして使用することについても警告します。 のみでコンパイルする場合
"NULL" は "__null" に定義されているため、GCC は有効なセンチネルです。 ヌルなのに
NULL ポインターではないポインター定数の場合、同じサイズであることが保証されます
ポインター。 ただし、この使用法は、異なるコンパイラ間で移植できません。

-Wno-非テンプレートフレンド (C ++およびObjective-C ++のみ)
テンプレート化されていないフレンド関数がテンプレート内で宣言されている場合の警告を無効にします。
G ++での明示的なテンプレート仕様のサポートの出現以来、
友人は修飾されていないIDです(つまり、 友人 foo(int))、C ++言語仕様
友人が通常の非テンプレート関数を宣言または定義することを要求します。 (セクション
14.5.3)。 G ++が明示的な仕様を実装する前は、unqualified-idsは
テンプレート化された関数の特定の特殊化として解釈されます。 これは
不適合な動作は、G ++のデフォルトの動作ではなくなりました。
-非テンプレートフレンド コンパイラが潜在的な問題について既存のコードをチェックできるようにします
スポットし、デフォルトでオンになっています。 この新しいコンパイラの動作は、次のコマンドでオフにできます。
-Wno-非テンプレートフレンド、準拠したコンパイラコードを保持しますが、
役立つ警告。

-ウォルドスタイルキャスト (C ++およびObjective-C ++のみ)
非void型にキャストされた古いスタイル(Cスタイル)がC ++プログラム内で使用されている場合に警告します。
新しいスタイルのキャスト(ダイナミックキャスト, static_cast, reinterpret_cast, const_cast)は
意図しない影響に対する脆弱性が低く、検索がはるかに簡単です。

-オーバーロード-仮想 (C ++およびObjective-C ++のみ)
関数宣言が仮想関数を基本クラスから非表示にしたときに警告します。 にとって
例:

構造体A {
仮想ボイドf();
};

構造体B:public A {
void f(int);
};

「f」の「A」クラスバージョンは「B」に隠されており、次のようなコードがあります。

B * b;
b-> f();

コンパイルに失敗します。

-Wno-pmf-コンバージョン (C ++およびObjective-C ++のみ)
メンバー関数へのバインドされたポインターをプレーンに変換するための診断を無効にします
ポインター。

-Wsign-プロモーション (C ++およびObjective-C ++のみ)
過負荷解決が署名されていないタイプまたは列挙型からのプロモーションを選択したときに警告します
同じサイズの符号なし型への変換を介した符号付き型。 前
G++ のバージョンは無署名を維持しようとしますが、標準では
現在の動作。

構造体A {
演算子 int ();
A& 演算子 = (int);
};

メイン()
{
a、b;
a = b;
}

この例では、G++ はデフォルトを合成します。 A& オペレータ = (定数 A&);、一方、cfront
ユーザー定義の オペレータ =.

オプション 制御 オブジェクティブC & Objective-C ++ 方言
(注:このマニュアルでは、Objective-CおよびObjective-C ++言語については説明していません。
自分自身。

このセクションでは、Objective-Cでのみ意味のあるコマンドラインオプションについて説明します。
および Objective-C++ プログラムを使用できますが、言語に依存しない GNU のほとんどを使用することもできます。
コンパイラオプション。 たとえば、次のようにファイル「some_class.m」をコンパイルできます。

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

この例では、 -fgnu-ランタイム Objective-CおよびObjective-C ++専用のオプションです
プログラム; 他のオプションは、GCCでサポートされている任意の言語で使用できます。

Objective-CはC言語の拡張であるため、Objective-Cのコンパイルは
Cフロントエンドに固有のオプションを使用することもできます(例: -伝統的な)。 同様に、
目的-C ++コンパイルでは、C ++固有のオプションを使用できます(例: -わび).

これがオプションのリストです Objective-CおよびObjective-C ++をコンパイルするため
プログラム:

-fconstant-string-class =クラス名
  クラス名 各リテラル文字列に対してインスタンス化するクラスの名前として
構文 "@" ... ""で指定されます。 デフォルトのクラス名は「NXConstantString」です。
GNUランタイムが使用されており、NeXTランタイムが使用されている場合は「NSConstantString」
使用済み(以下を参照)。 The -fconstant-cfstrings オプションも存在する場合は、
-f定数文字列クラス 「@ "..."」リテラルを設定して定数として配置する
CoreFoundation文字列。

-fgnu-ランタイム
標準のGNUObjective-Cランタイムと互換性のあるオブジェクトコードを生成します。 これは
ほとんどのタイプのシステムのデフォルト。

-fnext-ランタイム
NeXTランタイムと互換性のある出力を生成します。 これはNeXTベースのデフォルトです
ダーウィンやMacOSXなどのシステム。マクロ「__NEXT_RUNTIME__」は次の場合に事前定義されています。
(そしてその場合のみ)このオプションが使用されます。

-fno-nil-レシーバー
この中ですべてのObjective-Cメッセージがディスパッチ( "[receiver message:arg]")すると仮定します
翻訳ユニットは、受信機が「ゼロ」でないことを確認します。 これにより、より多くのことが可能になります
使用するランタイムの効率的なエントリポイント。 このオプションは、
NeXTランタイムおよびABIバージョン0または1と組み合わせて使用​​します。

-fobjc-abi-version =n
バージョンを使用 n 選択したランタイムのObjective-CABIのこのオプションは
現在、NeXTランタイムでのみサポートされています。 その場合、バージョン0は
プロパティやその他のObjective-C32をサポートしない従来の(2.0ビット)ABI
追加。 バージョン1は、プロパティとをサポートする従来の(32ビット)ABIです。
その他のObjective-C2.0の追加。 バージョン2は、最新の(64ビット)ABIです。 何もない場合
指定すると、デフォルトは0ビットターゲットマシンではバージョン32、2ビットではバージョン64です。
ターゲットマシン。

-fobjc-call-cxx-cdtors
Objective-Cクラスごとに、そのインスタンス変数のいずれかがC ++オブジェクトであるかどうかを確認します
自明ではないデフォルトのコンストラクターを使用します。 もしそうなら、特別な "-(id)を合成します
.cxx_construct" インスタンス メソッドは、重要なデフォルト コンストラクタを実行します。
そのようなインスタンス変数を順番に、そして「self」を返します。 同様に、もしあればチェックしてください
インスタンス変数は、自明ではないデストラクタを持つC ++オブジェクトであり、そうである場合は、合成します。
そのようなデフォルトのデストラクタをすべて実行する特別な "- (void) .cxx_destruct" メソッド、
逆の順序で。

このようにして生成された「- (id) .cxx_construct」および「- (void) .cxx_destruct」メソッドは、
現在の Objective-C クラスで宣言されたインスタンス変数のみを操作し、
スーパークラスから継承されたもの。 それはObjective-Cの責任です
オブジェクトの継承階層でそのようなすべてのメソッドを呼び出すランタイム。 "- (id)
.cxx_construct" メソッドは、新しいオブジェクトの直後にランタイムによって呼び出されます
インスタンスが割り当てられます。 「- (void) .cxx_destruct」メソッドが呼び出されます
ランタイムがオブジェクト インスタンスの割り当てを解除する直前。

この記事の執筆時点では、Mac OS X10.4以降のNeXTランタイムのみがサポートされています。
「-(id).cxx_construct」および「-(void).cxx_destruct」メソッドを呼び出します。

-fobjc-直接発送
メッセージディスパッチャへの高速ジャンプを許可します。 ダーウィンでは、これは
通信ページ。

-fobjc-例外
Objective-Cで構造化例外処理の構文サポートを有効にします。
C ++とJavaによって提供されるもの。 このオプションは、Objective-Cを使用するために必要です
キーワード@ try、@ throw、@ catch、@ finally、@ synchronized。 このオプションが利用可能です
GNUランタイムとNeXTランタイムの両方で(ただし、
Mac OS X 10.2以前のNeXTランタイム)。

-fobjc-gc
Objective-CおよびObjective-C ++プログラムでガベージコレクション(GC)を有効にします。 このオプション
NeXTランタイムでのみ使用できます。 GNUランタイムには別のガベージがあります
特別なコンパイラフラグを必要としないコレクションの実装。

-fobjc-nilcheck
ABIのバージョン2を使用するNeXTランタイムの場合、メソッドでnilレシーバーを確認します
実際のメソッド呼び出しを行う前の呼び出し。 これはデフォルトであり、
を使用して無効にする -fno-objc-nilcheck。 クラスメソッドとスーパーコールはチェックされません
このフラグが何に設定されていても、このようにnilの場合。 現在、このフラグは
GNUランタイム、または古いバージョンのNeXTランタイムABIが使用されている場合は何もありません。

-fobjc-std = objc1
GCC1.0で認識される言語であるObjective-C4.0の言語構文に準拠します。
これは、C / C ++言語へのObjective-Cの追加にのみ影響します。 影響はありません
個別のC / C ++方言によって制御されるC / C ++標準への準拠
オプションフラグ。 このオプションをObjective-CまたはObjective-C ++で使用する場合
コンパイラー、GCC4.0で認識されないObjective-C構文は拒否されます。 この
Objective-Cコードをでコンパイルできることを確認する必要がある場合に便利です
GCCの古いバージョン。

-freplace-objc-classes
指示する特別なマーカーを発する ld(1) 結果のオブジェクトを静的にリンクしない
ファイル、および許可 ダイルド(1) 代わりに実行時にロードします。 これはで使用されます
Fix-and-Continueデバッグモードと組み合わせて、オブジェクトファイルが
質問は、プログラムの過程で再コンパイルおよび動的に再ロードされる場合があります
プログラム自体を再起動する必要なしに実行。 現在、Fix-and-
続行機能は、MacのNeXTランタイムと組み合わせた場合にのみ使用できます
OS X10.3以降。

-fzero-リンク
NeXTランタイム用にコンパイルする場合、コンパイラーは通常、
"objc_getClass(" ... ")"(コンパイル時にクラスの名前がわかっている場合)
ロード時に初期化される静的クラス参照。これにより、実行時が改善されます。
パフォーマンス。 の指定 -fzero-リンク フラグはこの動作を抑制し、原因となります
「objc_getClass( "...")」への呼び出しは保持されます。 これはゼロリンクで役立ちます
個々のクラスの実装を変更できるため、デバッグモード
プログラム実行中。 GNUランタイムは現在、常にへの呼び出しを保持します
コマンドラインオプションに関係なく、 "objc_get_class(" ... ")"。

-gen-decls
ソースファイルにあるすべてのクラスのインターフェイス宣言を、という名前のファイルにダンプします
ソース名.decl.

-Wassign-インターセプト (Objective-CおよびObjective-C ++のみ)
Objective-Cの割り当てがガベージコレクターによってインターセプトされるたびに警告します。

-プロトコルなし (Objective-CおよびObjective-C ++のみ)
クラスがプロトコルを実装するように宣言されている場合、すべてのメソッドに対して警告が発行されます
クラスによって実装されていないプロトコルで。 デフォルトの動作は
クラスに明示的に実装されていないすべてのメソッドに対して警告を発行します。
メソッドの実装はスーパークラスから継承されます。 を使用する場合 -プロトコルなし
オプションの場合、スーパークラスから継承されたメソッドは実装されていると見なされます。
警告は出されません。

-Wセレクター (Objective-CおよびObjective-C ++のみ)
同じセレクターに対して異なるタイプの複数のメソッドが中に見つかった場合に警告します
コンパイル。 チェックは、の最終段階でメソッドのリストに対して実行されます。
コンパイル。 さらに、に表示されるセレクターごとにチェックが実行されます。
「@selector(...)」式、およびそのセレクターに対応するメソッドは
コンパイル中に見つかりました。 これらのチェックは最後にのみメソッドテーブルをスキャンするため
コンパイルの最終段階が次の場合、これらの警告は生成されません。
コンパイル中にエラーが見つかったため、または
-fsyntaxのみ オプションが使用されています。

-Wstrict-selector-match (Objective-CおよびObjective-C ++のみ)
引数や戻り値のタイプが異なる複数のメソッドが見つかった場合に警告します。
このセレクターを使用してメッセージを送信しようとしたときに指定されたセレクター
「id」または「Class」と入力します。 このフラグがオフの場合(これはデフォルトの動作です)、
見つかった違いが次の型に限定されている場合、コンパイラはそのような警告を省略します。
同じサイズと配置を共有します。

-Wundeclared-セレクター (Objective-CおよびObjective-C ++のみ)
宣言されていないセレクターを参照する「@selector(...)」式が見つかった場合に警告します。 A
その名前のメソッドが以前に宣言されていない場合、セレクターは宣言されていないと見なされます
「@selector(...)」式、@ interfaceまたは@protocolで明示的に
宣言、または暗黙的に@implementationセクションで。 このオプションは常に実行します
「@selector(...)」式が見つかるとすぐにチェックします。 -Wセレクター
コンパイルの最終段階でチェックを実行します。 これにより、コーディングも強制されます
メソッドとセレクターを使用する前に宣言する必要があるというスタイル規則。

-print-objc-ランタイム情報
値によって渡される最大の構造を記述するCヘッダーがあれば、それを生成します。

オプション 〜へ 管理 診断的 メッセージ 書式設定
従来、診断メッセージは出力デバイスに関係なくフォーマットされていました
アスペクト (例: 幅など)。 以下に説明するオプションを使用して、
診断メッセージのフォーマット アルゴリズム (例: XNUMX 行あたりの文字数、頻度)
ソースの位置情報を報告する必要があります。 現在、C++ フロントエンドのみが可能です。
これらのオプションを尊重します。 しかし、近い将来、残りの前線が
エンドはそれらを正しく消化することができます。

-fmessage-length =n
エラーメッセージを約XNUMX行に収まるようにフォーマットしてみてください n 文字。 ザ・
デフォルトは72文字です g ++ によってサポートされる残りのフロントエンドの場合は0
GCC。 もしも n XNUMX の場合、行の折り返しは行われません。 各エラーメッセージが表示されます
単一行で。

-fdiagnostics-show-location = once
行折り返しモードでのみ意味があります。 診断メッセージレポーターに次のように指示します
放出する かつて ソース位置情報; つまり、メッセージが長すぎて収まらない場合
単一の物理ライン上でラップする必要がある場合、ソースの場所は出力されません
(接頭辞として)後続の継続行で何度も何度も繰り返します。 これは
デフォルトの動作。

-fdiagnostics-show-location = every-line
行折り返しモードでのみ意味があります。 診断メッセージレポーターに次のように指示します
結果として生じる物理回線に対して(プレフィックスとして)同じソースロケーション情報を送信します
長すぎてXNUMX行に収まらないメッセージを壊すプロセスから。

-fno-diagnostics-show-option
デフォルトでは、発行される各診断には、コマンドラインオプションを示すテキストが含まれています
診断を直接制御します(そのようなオプションが診断に知られている場合
機械)。 の指定 -fno-diagnostics-show-option フラグはそれを抑制します
行動。

オプション 〜へ リクエスト or 抑制する 警告
警告は、本質的にではない構造を報告する診断メッセージです。
エラーがありますが、それは危険であるか、エラーがあった可能性があることを示唆しています。

次の言語に依存しないオプションは、特定の警告を有効にしませんが、
GCCによって生成される診断の種類。

-fsyntaxのみ
コードに構文エラーがないか確認しますが、それ以上のことはしないでください。

-fmax-errors =n
エラーメッセージの最大数をに制限します n、その時点でGCCはむしろベイルアウトします
ソースコードの処理を続行しようとするよりも。 もしも n 0(デフォルト)、
生成されるエラーメッセージの数に制限はありません。 もしも -Wfatal-エラー
指定してから -Wfatal-エラー このオプションよりも優先されます。

-w すべての警告メッセージを禁止します。

-エラー
すべての警告をエラーにします。

-エラー=
指定された警告をエラーにします。 警告の指定子が追加され、
例えば -Werror = switch によって制御される警告をオンにします -Wスイッチ エラーに。
このスイッチは否定的な形式を取り、否定するために使用されます -エラー 特定の警告については、
例えば -Wno-error = switch MAKES -Wスイッチ 警告はエラーではありません -エラー
有効です。

制御可能な各警告の警告メッセージには、制御するオプションが含まれています
警告。 そのオプションは、 -エラー= & -Wno-error = 説明したように
その上。 (警告メッセージのオプションの印刷は、
-fno-diagnostics-show-option 国旗。)

指定することに注意してください -エラー=foo 自動的に意味します -Wfoo。 しかし、 -Wno-error =foo
何も意味しません。

-Wfatal-エラー
このオプションにより、コンパイラは最初のエラーが発生したときにコンパイルを中止します
続行してさらにエラーメッセージを出力しようとするのではなく。

オプションで始まる多くの特定の警告をリクエストできます -W例えば、 -暗黙の了解
暗黙の宣言に関する警告を要求します。 これらの特定の警告オプションのそれぞれも
否定的な形で始まります -いいえ- 警告をオフにします。 例えば、 -暗黙的.
このマニュアルでは、XNUMX つの形式のうち、デフォルトでない方の XNUMX つだけをリストしています。 さらなる、
言語固有のオプションも参照 C + + 方言 オプション & オブジェクティブC &
Objective-C ++ 方言 オプション.

認識されない警告オプションが要求された場合(例: -不明-警告)、GCCが発行します
オプションが認識されないことを示す診断。 ただし、 -いいえ- 形は
を使用すると、動作が若干異なります。
-わからない-警告 他の診断が生成されていない限り。 これにより、
新製品 -いいえ- 古いコンパイラのオプションですが、何か問題が発生した場合、コンパイラは警告します
認識されていないオプションが使用されました。

-衒学者
厳密なISOCおよびISOC ++で要求されるすべての警告を発行します。 次のようなすべてのプログラムを拒否する
禁止されている拡張機能、およびISOCおよびISOに準拠していないその他のプログラムを使用する
C ++。 ISO Cの場合、任意ので指定されたISOC標準のバージョンに従います。 -標準
使用されるオプション。

有効なISOCおよびISOC ++プログラムは、このオプションの有無にかかわらず正しくコンパイルする必要があります
(ただし、まれに必要になる場合があります -アンシ または -標準 必要なバージョンを指定するオプション
ISO Cの)。 ただし、このオプションがないと、特定の GNU 拡張機能と従来の C および
C ++機能もサポートされています。 このオプションを使用すると、拒否されます。

-衒学者 代替キーワードの使用に関する警告メッセージは表示されません。
名前の始まりと終わり __。 衒学的警告も式で無効になっています
「__extension__」に続く。 ただし、これらを使用する必要があるのはシステムヘッダーファイルのみです
脱出ルート; アプリケーションプログラムはそれらを避けるべきです。

一部のユーザーは使用しようとします -衒学者 プログラムがISOCに厳密に準拠しているかどうかを確認します。 彼ら
すぐに、それが彼らが望んでいることを完全に実行していないことに気付きます。それは、いくつかの非ISO慣行を見つけます。
すべてではありません--- ISOCの対象となるもののみ 必要 診断、および他のいくつかの
どの診断が追加されましたか。

ISO Cに準拠していないことを報告する機能は、場合によっては役立つ場合があります。
しかし、かなりの追加作業が必要になり、
-衒学者。 近い将来、このような機能をサポートする予定はありません。

で指定された規格 -標準 CのGNU拡張方言を表します。
ヌー90 or ヌー99、対応するものがあります ベース 標準、ISOCのバージョン
GNU拡張方言が基づいています。 からの警告 -衒学者 彼らがいるところに与えられます
基本規格によって要求されます。 (そのような警告が与えられても意味がありません
定義上GNUであるため、指定されたGNUC方言にない機能の場合のみ
Cの方言には、コンパイラが指定されたオプションでサポートするすべての機能が含まれています。
警告するものは何もありません。)

-衒学的エラー
いいね -衒学者ただし、警告ではなくエラーが生成されます。

-壁
これにより、一部のユーザーが検討する構造に関するすべての警告が有効になります
疑わしい、そしてそれは避けやすい(または警告を防ぐために修正する)
マクロと組み合わせて。 これにより、説明されている言語固有の警告も有効になります
in C + + 方言 オプション & オブジェクティブC & Objective-C ++ 方言 オプション.

-壁 次の警告フラグをオンにします。

-住所 -Warray 境界 (のみ -O2) -Wc ++ 11-互換性 -Wchar-添え字
-ウェヌム-比較 (C/Objc の場合。C++ ではデフォルトでオンになっています) -Wimplicit-int (Cおよび
Objective-Cのみ) -Wimplicit 関数宣言 (CおよびObjective-Cのみ) -コメント
-Wフォーマット -Wメイン (C / ObjCの場合のみ、 -自立) -おそらく-初期化されていません
-中括弧がありません -非ヌル -かっこ -Wpointer サイン -リオーダー -Wreturnタイプ
-Wシーケンスポイント -Wsign-比較 (C ++のみ) -Wstrict-エイリアシング -Wstrict-overflow = 1
-Wスイッチ -筆文字 -初期化されていません -不明-プラグマ -未使用機能
-Wunused-レーベル -未使用値 -Wunused-変数 -Wvolatile レジスタ変数

一部の警告フラグは、によって暗示されていないことに注意してください -壁。 それらのいくつかは警告します
ユーザーが一般的に疑わしいとは思わないが、
時々あなたはチェックしたいかもしれません。 他の人は、
場合によっては回避する必要があるか困難であり、変更する簡単な方法はありません
警告を抑制するコード。 それらのいくつかはによって有効になります -ウェクストラ しかしそれらの多くは
個別に有効にする必要があります。

-ウェクストラ
これにより、によって有効にされないいくつかの追加の警告フラグが有効になります -壁。 (このオプションは使用されます
呼ばれる -W。 古い名前は引き続きサポートされますが、新しい名前の方が多くなります
説明的です。)

-破壊された -空っぽの体 -無視-修飾子 -不足フィールド初期化子
-欠落パラメータの種類 (Cのみ) -Wold スタイル宣言 (Cのみ) -Woverride-init
-Wsign-比較 -Wtype-limits -初期化されていません -Wunused-パラメータ (のみ -未使用 or
-壁) -使用されていないがパラメータを設定 (のみ -未使用 or -壁)

オプション -ウェクストラ また、次の場合の警告メッセージを出力します。

・ポインタは整数ゼロと比較されます。 <, <=, >または >=.

・(C ++のみ)列挙子と非列挙子の両方が条件付きで表示されます
式です。

・(C ++のみ)あいまいな仮想ベース。

・(C ++のみ)宣言された配列の添え字 登録.

・(C ++のみ)宣言された変数のアドレスを取得する 登録.

· (C++ のみ) 基底クラスは、派生クラスのコピー コンストラクターで初期化されません。

-Wchar-添え字
配列の添え字のタイプが「char」の場合に警告します。 これはエラーの一般的な原因です。
プログラマーは、このタイプが一部のマシンで署名されていることを忘れがちです。 この警告は
有効にする -壁.

-コメント
コメント開始シーケンスが発生するたびに警告する /* に表示されます /* コメント、またはいつでも
バックスラッシュ-改行は // コメント。 この警告はによって有効になります -壁.

-Wno-coverage-mismatch
を使用するときにフィードバックプロファイルが一致しない場合に警告する -fprofile-使用 オプション。 もし
ソースファイルが変更されました -fprofile-gen & -fprofile-使用、ファイル
プロファイル フィードバックがソース ファイルと一致せず、GCC がプロファイルを使用できない
フィードバック情報。 デフォルトでは、この警告は有効になっており、エラーとして扱われます。
-Wno-coverage-mismatch 警告を無効にするために使用できますまたは
-Wno-error = coverage-mismatch エラーを無効にするために使用できます。 エラーを無効にする
この警告は、コードの最適化が不十分になる可能性があり、次の場合にのみ役立ちます。
既存のコードベースのバグ修正など、ごくわずかな変更。 完全に無効にする
警告はお勧めしません。

-Wno-cpp
(C、Objective-C、C ++、Objective-C ++およびFortranのみ)

「#warning」ディレクティブによって発行される警告メッセージを抑制します。

-Wdouble-プロモーション (C、C ++、Objective-CおよびObjective-C ++のみ)
タイプ「float」の値が暗黙的に「double」にプロモートされたときに警告を出します。 CPU
32ビットの「単精度」浮動小数点ユニットを使用すると、ハードウェアに「浮動小数点」が実装されます。
しかし、ソフトウェアで「double」をエミュレートします。 そのようなマシンで、を使用して計算を行う
「double」値は、ソフトウェアに必要なオーバーヘッドのため、はるかに高価です
エミュレーション。

浮動小数点のため、誤って「double」を使用して計算を行うのは簡単です。
リテラルは暗黙的に「double」型です。 たとえば、次のようになります。

フロート面積(フロート半径)
{
3.14159 *半径*半径を返します。
}

コンパイラは "double" を使用して計算全体を実行します。
ポイントリテラルは「double」です。

-Wフォーマット
「printf」や「scanf」などの呼び出しをチェックして、引数が指定されていることを確認します
指定されたフォーマット文字列に適したタイプを持ち、変換が
フォーマット文字列で指定するのは理にかなっています。 これには標準機能が含まれ、
「printf」、「scanf」、「strftime」、および
「strfmon」(C標準ではないX / Open拡張)ファミリ(または他のターゲット-
特定の家族)。 フォーマット属性が設定されていない状態でチェックされる関数
指定されるのは、選択された標準バージョン、およびそのような機能のチェックによって異なります
属性が指定されていない場合、 -自立 or -fno-builtin.

フォーマットは、GNUlibcバージョン2.2でサポートされているフォーマット機能と照合されます。
これらには、すべてのISO C90およびC99機能、およびSingleUnixの機能が含まれます。
仕様といくつかのBSDおよびGNU拡張。 他のライブラリの実装はそうではないかもしれません
これらすべての機能をサポートします。 GCCは、それを超える機能に関する警告をサポートしていません
特定のライブラリの制限。 ただし、 -衒学者 と一緒に使用されます -Wフォーマット,
選択した標準バージョンにない形式の機能については警告が表示されます (ただし、
"strfmon" 形式は、C 標準のどのバージョンにも含まれていないため、使用できません)。

Since -Wフォーマット また、いくつかの関数の null 形式の引数をチェックします。 -Wフォーマット
また意味します -非ヌル.

-Wフォーマット に含まれています -壁. フォーマットチェックのいくつかの側面をより詳細に制御するには、
オプション -Wformat-y2k, -Wno-format-extra-args, -Wno-format-zero-length,
-Wformat-非文字, -Wformat-セキュリティ, -Wformat = 2 利用可能ですが、利用できません
に含まれます -壁.

注: Ubuntu 8.10 以降のバージョンでは、このオプションはデフォルトで C、C++、
ObjC、ObjC++。 無効にするには、使用します -Wformat = 0.

-Wformat-y2k
If -Wフォーマット が指定されている場合は、「strftime」形式についても警告します。
XNUMX桁の年。

-Wno-format-contains-null
If -Wフォーマット が指定されている場合、NULバイトを含むフォーマット文字列について警告しないでください。

-Wno-format-extra-args
If -Wフォーマット が指定されている場合、「printf」または「scanf」への過剰な引数について警告しません。
フォーマット機能。 C 標準では、そのような引数は無視されると規定されています。

未使用の引数が、で指定された使用済みの引数の間にある場合 $
オペランド番号の指定では、通常は警告が表示されます。
実装は、未使用をスキップするために「va_arg」に渡すタイプを知ることができませんでした
引数。 ただし、「scanf」形式の場合、このオプションは
未使用の引数がすべてポインターである場合は警告します。
そのような未使用の引数が許可されていると言います。

-Wno-format-zero-length
If -Wフォーマット が指定されている場合、長さがゼロのフォーマットについて警告しないでください。 C標準
長さゼロのフォーマットが許可されることを指定します。

-Wformat-非文字
If -Wフォーマット が指定されている場合、書式文字列が文字列リテラルでない場合にも警告し、
フォーマット関数がそのフォーマット引数を
「va_list」。

-Wformat-セキュリティ
If -Wフォーマット が指定され、を表すフォーマット関数の使用についても警告します
考えられるセキュリティの問題。 現在、これは「printf」と
フォーマット文字列が文字列リテラルではなく、文字列がない場合の「scanf」関数
"printf (foo);" のようなフォーマット引数。 これはセキュリティ ホールになる可能性があります。
文字列は信頼されていない入力から来ており、含まれています %n. (これは現在、
-Wformat-非文字 について警告しますが、将来的に警告が追加される可能性があります
-Wformat-セキュリティ に含まれていないもの -Wformat-非文字.)

注: Ubuntu 8.10 以降のバージョンでは、このオプションはデフォルトで C、C++、
ObjC、ObjC++。 無効にするには、使用します -Wno-フォーマットセキュリティ、またはすべての形式の警告を無効にします
  -Wformat = 0。 フォーマットのセキュリティ警告を致命的にするには、次のように指定します
-Werror = format-security.

-Wformat = 2
有効にします -Wフォーマット プラスフォーマットチェックは含まれていません -Wフォーマット. 現在は同等
-Wフォーマット -Wformat-非文字 -Wformat-セキュリティ -Wformat-y2k.

-非ヌル
null以外の値が必要であるとマークされた引数にnullポインタを渡すことについて警告する
「非ヌル」関数属性による。

-非ヌル に含まれています -壁 & -Wフォーマット。 で無効にすることができます -Wno-非null
オプションを選択します。

-Winit-self (C、C ++、Objective-CおよびObjective-C ++のみ)
自分自身で初期化される初期化されていない変数について警告します。 これに注意してください
オプションは、 -初期化されていません オプションを選択します。

たとえば、GCC は、次のスニペットでのみ「i」が初期化されていないことについて警告します。
いつ -Winit-self 指定されています:

int f()
{
int i = i;
return i;
}

-Wimplicit-int (CおよびObjective-Cのみ)
宣言でタイプが指定されていない場合に警告します。 この警告はによって有効になります -壁.

-Wimplicit 関数宣言 (CおよびObjective-Cのみ)
関数が宣言される前に使用されるときはいつでも警告を出します。 C99モードの場合
(-std = c99 or -std = gnu99)、この警告はデフォルトで有効になっており、
によるエラー -衒学的エラー。 この警告は、によっても有効になります -壁.

-暗黙の了解 (CおよびObjective-Cのみ)
と同じ -Wimplicit-int & -Wimplicit 関数宣言。 この警告は有効になっています
by -壁.

-無視-修飾子 (CおよびC ++のみ)
関数の戻り型に「const」などの型修飾子がある場合に警告します。 ISOCの場合
関数によって返される値は
左辺値。 C ++の場合、警告はスカラー型または「void」に対してのみ発行されます。 ISO C
関数定義で修飾された「void」戻り型を禁止しているため、そのような戻り型は
このオプションがなくても、常に警告を受け取ります。

この警告は、によっても有効になります -ウェクストラ.

-Wメイン
次のタイプの場合に警告します メイン 疑わしいです。 メイン 外部の関数である必要があります
リンケージ、intを返す、ゼロ引数、XNUMXつ、またはXNUMXつの引数を取る
適切なタイプ。 この警告は、C ++ではデフォルトで有効になっており、次のいずれかによって有効になります。
-壁 or -衒学者.

-中括弧がありません
アグリゲートまたはユニオン初期化子が完全に括弧で囲まれていない場合に警告します。 以下では
たとえば、のイニシャライザ a 完全に括弧で囲まれていませんが、 b 完全です
括弧付き。

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

この警告はによって有効になります -壁.

-行方不明のインクルードディレクトリ (C、C ++、Objective-CおよびObjective-C ++のみ)
ユーザー指定のインクルードディレクトリが存在しない場合に警告します。

-かっこ
括弧がある場合など、特定のコンテキストで括弧が省略されている場合に警告します。
真理値が期待されるコンテキストでの割り当て、または演算子がネストされている場合
その優先順位の人々はしばしば混乱します。

また、次のような比較の場合は警告します x <= y <= z 表示されます。 これはと同等です (x <= y ? 1 : 0)
<= z、これは通常の数学表記とは異なる解釈です。

また、「if」ステートメントが混乱する可能性のある構造についても警告します。
「else」ブランチが属します。 このような場合の例を次に示します。

{
もし)
(b)の場合
foo();
ほかに
バー ();
}

C / C ++では、すべての「else」ブランチは、可能な限り最も内側の「if」ステートメントに属します。
この例では「if(b)」です。 多くの場合、これはプログラマーが期待したものではありません。
上記の例では、プログラマーが選択したインデントによって示されています。 あるとき
この混乱の可能性を考慮して、GCC はこのフラグが有効な場合に警告を発行します。
指定。 警告をなくすには、最も内側の「if」を明示的に中括弧で囲みます。
そのため、"else" がそれを囲む "if" に属することはありません。 の
結果のコードは次のようになります。

{
もし)
{
(b)の場合
foo();
ほかに
バー ();
}
}

また、途中のオペランド GNU 拡張を省略した ?: の危険な使用についても警告します。 いつ
?: 演算子の条件はブール式です。省略された値は
常に 1。多くの場合、ユーザーはそれが条件内で計算された値であることを期待します。
代わりに式。

この警告はによって有効になります -壁.

-Wシーケンスポイント
シーケンス違反のためにセマンティクスが定義されていない可能性のあるコードについて警告する
CおよびC++標準のポイントルール。

C および C++ 標準では、C/C++ プログラム内の式の順序が定義されています。
の観点から評価 シーケンス ポイント
プログラムの一部の実行:シーケンスポイントの前に実行された部分と、
その後実行されます。 これらは、完全な式(
の最初のオペランドの評価後、より大きな式の一部ではありません)
"&&"、 "||"、 "?:"または "、"(コンマ)演算子、関数が呼び出される前(ただし、
その引数と呼び出された関数を示す式の評価)、および
他の特定の場所。 シーケンスポイントルールで表現されている以外の順序
式の部分式の評価の割合は指定されていません。 これらすべてのルール
たとえば、XNUMXつの場合、全体の順序ではなく、部分的な順序のみを記述します。
関数はXNUMXつの式内で呼び出され、間にシーケンスポイントはありません。
関数が呼び出される順序は指定されていません。 ただし、標準
委員会は、関数呼び出しが重複しないことを決定しました。

シーケンスポイント間での値の変更時に指定されません
オブジェクトが有効になります。 動作がこれに依存するプログラムには、未定義の動作があります。
CおよびC++標準では、「前のシーケンスポイントと次のシーケンスポイントの間で
オブジェクトは、その保存された値を、評価によって最大XNUMX回変更する必要があります。
表現。 さらに、前の値は、値を決定するためにのみ読み取られるものとします。
プログラムがこれらのルールに違反した場合、特定の結果
実装は完全に予測不可能です。

未定義動作のコードの例は、「a = a ++;」、「a [n] = b [n ++]」、「a [i++]=」です。
i; "。いくつかのより複雑なケースはこのオプションでは診断されず、
時折の誤検知の結果ですが、一般的には、
プログラムでこの種の問題を検出します。

規格は紛らわしい言い回しであるため、正確なものについてはいくつかの議論があります
微妙な場合のシーケンスポイントルールの意味。 の議論へのリンク
提案された正式な定義を含む問題は、GCCの読みのページで見つけることができます。
http://gcc.gnu.org/readings.html>.

この警告はによって有効になります -壁 CおよびC ++の場合。

-Wreturnタイプ
デフォルトの「int」の戻り値の型で関数が定義されている場合は常に警告します。 また
戻り型を持つ関数で戻り値を持たない「return」ステートメントについて警告する
「void」ではありません(関数本体の端から落ちると、戻ると見なされます
値なし)、および関数内の式を含む「return」ステートメントについて
戻り値の型が「void」です。

C ++の場合、戻り値のない関数は常に診断メッセージを生成します。
いつ -Wノーリターン型 が指定されています。 唯一の例外は メイン と機能
システムヘッダーで定義されます。

この警告はによって有効になります -壁.

-Wスイッチ
「switch」ステートメントに列挙型のインデックスがあり、「case」がない場合は常に警告します
その列挙のXNUMXつ以上の名前付きコード。 (「デフォルト」の存在
labelは、この警告を防ぎます。)列挙範囲外の「case」ラベルも
このオプションを使用すると、警告が表示されます(「デフォルト」のラベルがある場合でも)。 これ
警告はによって有効になります -壁.

-Wswitch-デフォルト
「switch」ステートメントに「default」ケースがない場合は常に警告します。

-Wswitch-enum
「switch」ステートメントに列挙型のインデックスがあり、「case」がない場合は常に警告します
その列挙のXNUMXつ以上の名前付きコード。 の外側の「ケース」ラベル
このオプションを使用すると、列挙範囲も警告を発します。 唯一の違い
の間に -Wスイッチ このオプションは、このオプションが省略について警告を出すことです
「デフォルト」のラベルがある場合でも、列挙コード。

-Wsync-nand (CおよびC ++のみ)
「__sync_fetch_and_nand」および「__sync_nand_and_fetch」組み込み関数が
中古。 これらの関数は、GCC4.4でセマンティクスを変更しました。

-筆文字
プログラムの意味を変える可能性のある三重音字に遭遇した場合に警告する
(コメント内の三重音字については警告されません)。 この警告はによって有効になります -壁.

-使用されていないがパラメータを設定
関数パラメータが割り当てられているが、それ以外は使用されていない場合は常に警告します(
その宣言)。

この警告を抑制するには、 未使用 属性。

この警告は、によっても有効になります -未使用 ととも​​に -ウェクストラ.

-使用されていないが変数を設定
ローカル変数が割り当てられているが、それ以外は使用されていない場合は常に警告します(
宣言)。 この警告はによって有効になります -壁.

この警告を抑制するには、 未使用 属性。

この警告は、によっても有効になります -未使用、によって有効になります -壁.

-未使用機能
静的関数が宣言されているが定義されていないか、非インライン静的関数である場合は常に警告します
機能は未使用です。 この警告はによって有効になります -壁.

-Wunused-レーベル
ラベルが宣言されているが使用されていない場合は常に警告します。 この警告はによって有効になります -壁.

この警告を抑制するには、 未使用 属性。

-Wunused-local-typedefs (C、Objective-C、C ++およびObjective-C ++のみ)
関数でローカルに定義された typedef が使用されていない場合に警告します。

-Wunused-パラメータ
関数パラメーターが宣言以外に使用されていない場合は常に警告します。

この警告を抑制するには、 未使用 属性。

-Wno-未使用-結果
属性「warn_unused_result」でマークされた関数の呼び出し元が警告を発した場合でも警告しない
戻り値は使用しないでください。 デフォルトは -Wunused-結果.

-Wunused-変数
ローカル変数または非定数静的変数が使用されていない場合は常に警告します。
その宣言。 この警告はによって有効になります -壁.

この警告を抑制するには、 未使用 属性。

-未使用値
ステートメントが明示的に使用されていない結果を計算するたびに警告します。 抑制するには
この警告は、未使用の式をにキャストします ボイド。 これには式ステートメントが含まれます
または、副作用を含まないコンマ式の左側。 為に
たとえば、次のような式 x [i、j] 警告が表示されますが、 x [(void)i、j] 意志
ではありません。

この警告はによって有効になります -壁.

-未使用
上記のすべて -未使用 オプションの組み合わせ。

未使用の関数パラメーターに関する警告を受け取るには、次のいずれかを指定する必要があります。
-ウェクストラ -未使用 (ご了承ください -壁 含意する -未使用)、または個別に指定
-Wunused-パラメータ.

-初期化されていません
自動変数が最初に初期化されずに使用された場合、または変数が使用された場合に警告します
「setjmp」呼び出しによって破壊される可能性があります。 C ++では、非静的参照または非静的参照の場合に警告します
静的な 定数 メンバーは、コンストラクターのないクラスに表示されます。

変数の初期化されていない値を使用するコードについて警告したい場合
独自のイニシャライザ、を使用 -Winit-self オプションを選択します。

これらの警告は、構造の初期化されていない、または破壊された個々の要素に対して発生します。
ユニオン変数または配列変数、および初期化されていない変数またはクローバーされた変数
全体として。 「揮発性」と宣言された変数または要素では発生しません。 なぜなら
これらの警告は、最適化、正確な変数または要素によって異なります。
警告は、正確な最適化オプションと使用されている GCC のバージョンによって異なります。

計算にのみ使用される変数についての警告がない場合があることに注意してください。
このような計算はデータフローによって削除される可能性があるため、それ自体が使用されることのない値
警告が出力される前の分析。

-おそらく-初期化されていません
自動変数の場合、関数エントリからの使用へのパスが存在する場合
初期化された変数ですが、変数が存在しない他のパスがいくつか存在します
初期化されていないことを証明できない場合、コンパイラは警告を発します。
パスは実行時に発生しません。 GCCはそうではないため、これらの警告はオプションになっています
コードが正しいように見えても、そのコードが正しい可能性があるすべての理由を理解できるほど賢い
エラーがあります。 これがどのように発生するかの一例を次に示します。

{
int x;
スイッチ(y)
{
ケース1:x = 1;
破る;
ケース2:x = 4;
破る;
ケース3:x = 5;
}
foo(x);
}

「y」の値が常に1、2、または3の場合、「x」は常に初期化されますが、GCC
これは知りません。 警告を抑制するには、ユーザーはデフォルトのケースを提供する必要があります
  アサート(0)または同様のコード。

このオプションは、不揮発性自動変数が次のように変更される可能性がある場合にも警告します。
「longjmp」を呼び出します。 これらの警告も、最適化の場合にのみ可能です。
コンパイル。

コンパイラは「setjmp」の呼び出しのみを認識します。 「longjmp」がどこにあるかわかりません
と呼ばれる; 実際、シグナルハンドラーは、コード内の任意の時点でそれを呼び出すことができます。 として
その結果、「longjmp」のため、実際には問題がない場合でも警告が表示される場合があります。
実際、問題を引き起こす場所に電話をかけることはできません。

使用するすべての関数を宣言すれば、いくつかの誤った警告を回避できます。
「noreturn」として戻ることはありません。

この警告はによって有効になります -壁 or -ウェクストラ.

-不明-プラグマ
GCCが理解できない「#pragma」ディレクティブが検出された場合に警告します。 これなら
コマンドライン オプションを使用すると、不明なプラグマに対して警告が発行されます。
システム ヘッダー ファイル。 これは、警告が
-壁 コマンドラインオプション。

-Wno-プラグマ
誤ったパラメータ、無効な構文、または
プラグマ間の競合。 も参照してください -不明-プラグマ.

-Wstrict-エイリアシング
このオプションは、次の場合にのみアクティブになります -fstrict-エイリアシング アクティブです。 それはコードについて警告します
コンパイラが最適化に使用している厳密なエイリアシングルールに違反する可能性があります。
警告はすべてのケースをキャッチするわけではありませんが、より一般的なケースをキャッチしようとします
落とし穴。 に含まれています -壁。 に相当 -Wstrict-aliasing = 3

-Wstrict-aliasing = n
このオプションは、次の場合にのみアクティブになります -fstrict-エイリアシング アクティブです。 それはコードについて警告します
コンパイラが最適化に使用している厳密なエイリアシングルールに違反する可能性があります。
レベルが高いほど、精度が高くなります(誤検知が少なくなります)。 より高いレベル
-O の動作と同様に、より多くの労力にも対応します。 -Wstrict-エイリアシング is
に相当 -Wstrict-aliasing = n、n=3の場合。

レベル1:最も攻撃的で、迅速で、精度が最も低い。 より高いレベルのときにおそらく役立つ
警告しませんが、 -fstrict-aliasing は false がほとんどないため、コードを壊します
ネガ。 ただし、多くの誤検知があります。 すべてのポインタ変換について警告します
逆参照されない場合でも、互換性のない可能性のあるタイプ間。 正面を走る
終了のみ。

レベル2:積極的、迅速、あまり正確ではない。 まだ多くの誤検知がある可能性があります(
ただし、レベル1と同じ数)、フォールスネガティブはほとんどありません(ただし、レベル1より多い可能性があります)。
レベル1とは異なり、アドレスが取得されたときにのみ警告します。 不完全なタイプについて警告します。
フロントエンドでのみ実行されます。

レベル3(デフォルトは -Wstrict-エイリアシング):誤検知が非常に少なく、少数である必要があります
偽陰性。 最適化が有効になっている場合、レベル1または2よりも少し遅くなります。
フロントエンドの一般的なしゃれ+間接参照パターンを処理します。
「*(int *)&some_float」。 最適化が有効になっている場合は、バックエンドでも実行されます。
フローセンシティブなポイントツー情報を使用して、複数のステートメントのケースを処理します。
変換されたポインタが逆参照された場合にのみ警告します。 不完全について警告しません
タイプ。

-Wstrict-オーバーフロー
-Wstrict-overflow =n
このオプションは、次の場合にのみアクティブになります -fstrict-オーバーフロー アクティブです。 ケースについて警告します
ここで、コンパイラは、署名されたオーバーフローが発生しないという仮定に基づいて最適化します。
発生する。 コードがオーバーフローする可能性のあるすべてのケースについて警告するわけではないことに注意してください。
コンパイラが何らかの最適化を実装する場合にのみ警告します。 したがって、これは
警告は最適化レベルによって異なります。

符号付きオーバーフローが発生しないことを前提とした最適化は、次の場合に完全に安全です。
関連する変数の値は、オーバーフローが実際には決して発生しないようなものです。
発生する。 したがって、この警告は簡単に誤検知を引き起こす可能性があります:コードに関する警告
それは実際には問題ではありません。 重要な問題に集中するために、いくつかの警告
レベルが定義されています。 未定義の符号付きオーバーフローの使用については警告は発行されません
ループに必要な反復回数を見積もる場合、特に次の場合
ループを実行するかどうかを決定します。

-Wstrict-overflow = 1
疑わしく、回避しやすいケースについて警告します。 例: "x +
1 > x"; と -fstrict-オーバーフロー、コンパイラはこれを 1 に単純化します。このレベル
of -Wstrict-オーバーフロー によって有効になります -壁; より高いレベルはそうではなく、
明示的に要求されました。

-Wstrict-overflow = 2
また、比較が定数に簡略化されている他の場合についても警告します。 ために
例: "abs(x)>=0。 これは、次の場合にのみ簡略化できます -fstrict-オーバーフロー である
「abs(INT_MIN)」がゼロ未満の「INT_MIN」にオーバーフローするためです。
-Wstrict-オーバーフロー (レベルなし)はと同じです -Wstrict-overflow = 2.

-Wstrict-overflow = 3
また、比較が簡略化されている他の場合についても警告します。 例: "x + 1
> 1" は "x > 0" に簡略化されます。

-Wstrict-overflow = 4
また、上記のケースでカバーされていない他の簡略化についても警告します。 ために
例: "(x * 10) / 5" は "x * 2" に簡略化されます。

-Wstrict-overflow = 5
また、コンパイラが定数の大きさを減らす場合についても警告します
比較に参加しています。 例: 「x + 2 > y」は「x + 1」に簡略化されます。
>= y". これは最高の警告レベルでのみ報告されます。
単純化は多くの比較に適用されるため、この警告レベルは非常に
多数の偽陽性。

-Wsuggest-attribute =[純粋な|定数|返品不可]
属性を追加することが有益な場合に警告します。 現在の属性
サポートされているのは以下のとおりです。

-Wsuggest-attribute = pure
-Wsuggest-attribute = const
-Wsuggest-attribute = noreturn
属性「pure」、「const」、またはの候補となる可能性のある関数について警告する
"返品不可"。 コンパイラは、他のコンパイルで表示される関数についてのみ警告します
単位または(「純粋」および「定数」の場合)その機能を証明できない場合
正常に戻ります。 関数に無限が含まれていない場合、関数は正常に戻ります
ループや、スロー、abort() の呼び出し、またはトラップによって異常終了することはありません。 これ
分析にはオプションが必要です -fipa-pure-const、これはデフォルトで有効になっています -O &
より高い。 最適化レベルを高くすると、分析の精度が向上します。

-Warray 境界
このオプションは、次の場合にのみアクティブになります -ftree-vrp アクティブです(デフォルトは -O2 以上)。 これ
常に範囲外の配列への添え字について警告します。 この警告は
有効にする -壁.

-Wno-div-by-zero
コンパイル時の整数除算について警告しないでください。 による浮動小数点除算
ゼロは、無限大を取得するための合法的な方法である可能性があるため、警告されません。
NaN。

-Wsystem-ヘッダー
システムヘッダーファイルで見つかった構成の警告メッセージを出力します。 からの警告
システムヘッダーは通常抑制されますが、通常は抑制されないことを前提としています。
実際の問題を示し、コンパイラの出力を読みにくくするだけです。 使用する
このコマンドラインオプションは、GCCにシステムヘッダーから警告を発するように指示します。
ユーザーコードで発生しました。 ただし、 -壁 このオプションと組み合わせて
意志 システムヘッダーの不明なプラグマについて警告する---そのために、 -不明-プラグマ
また、使用する必要があります。

-トランポリン
入れ子関数へのポインターに対して生成されたトランポリンについて警告します。

トランポリンは、実行時に作成される小さなデータまたはコードです。
ネストされた関数のアドレスが取得されたときのスタック上の時間、および
ネストされた関数を間接的に呼び出すために使用されます。 一部のターゲットでは、
データのみで構成されているため、特別な処理は必要ありません。 しかし、
ほとんどのターゲットでは、コードで構成されているため、スタックが必要です
プログラムが正しく動作するために実行可能にする必要があります。

-Wfloat-等しい
等式比較で浮動小数点値が使用されている場合は警告します。

この背後にある考え方は、(プログラマーにとって)便利な場合があるということです。
浮動小数点値は、無限に正確な実数の近似値と見なしてください。
あなたがこれをしているなら、あなたは計算する必要があります(コードを分析することによって、またはいくつかの
他の方法)計算によって導入される最大または可能性のある最大エラー、および
比較を実行するとき(および出力を生成するとき)にそれを考慮に入れますが、それは
別の問題)。 特に、等しいかどうかをテストする代わりに、チェックします
XNUMXつの値の範囲が重複しているかどうかを確認します。 そしてこれは
関係演算子なので、等式の比較はおそらく間違っています。

-伝統的な (CおよびObjective-Cのみ)
従来のCとISOCでは動作が異なる特定の構造について警告します。
従来のCに相当するものがない、および/または問題のあるISOC構造について警告する
避けるべき構造。

・マクロ本体の文字列リテラル内に表示されるマクロパラメータ。 の
従来の C マクロ置換は文字列リテラル内で行われますが、そうではありません
ISO Cで。

・従来のCでは、一部のプリプロセッサディレクティブは存在しませんでした。 伝統的
プリプロセッサは、次の場合にのみ行をディレクティブと見なします。 # で登場
行の列 1。 したがって -伝統的な ディレクティブについて警告します
従来の C は理解しますが無視します。 # として表示されません
行の最初の文字。 また、次のようなディレクティブを非表示にすることも提案しています #プラグマ
それらをインデントすることにより、従来のCでは理解されません。 いくつかの伝統的な
実装は認識しません #エリフ、したがって、それを完全に避けることを示唆しています。

・引数なしで表示される関数のようなマクロ。

・単項プラス演算子。

U 整数の定数接尾辞、または F or L 浮動小数点定数の接尾辞。
(従来のCは L 整数定数の接尾辞。)これらに注意してください
接尾辞は、最新のシステムのシステムヘッダーで定義されているマクロに表示されます。
例: _MIN/_MAX "のマクロ"。ユーザーコードでこれらのマクロを使用すると、
通常、誤った警告が発生しますが、GCCの統合プリプロセッサには
これらの場合に警告を回避するのに十分なコンテキスト。

・XNUMXつのブロックで外部として宣言され、終了後に使用される関数
ブロック。

・「switch」ステートメントには、「long」タイプのオペランドがあります。

・非「静的」関数宣言は「静的」宣言の後に続きます。 この構成は
一部の従来のCコンパイラで受け入れられています。

・整数定数のISOタイプは、その幅または符号とは異なります。
伝統的なタイプ。 この警告は、定数の底がXNUMXの場合にのみ発行されます。
つまり、通常ビットパターンを表すXNUMX進数またはXNUMX進数の値は、
について警告した。

・ISO文字列連結の使用が検出されます。

・自動集計の初期化。

・識別子がラベルと競合しています。 従来のCには、
ラベル

・組合の初期化。 初期化子がゼロの場合、警告は省略されます。
これは、ユーザーコードのゼロ初期化子が表示されることを前提として行われます。
初期化子の警告の欠落を回避するために、たとえば「__STDC__」を条件とし、
従来のCの場合、デフォルトの初期化はゼロです。

・固定小数点値と浮動小数点値の間のプロトタイプによる変換、およびその逆。 The
従来の C でコンパイルするときにこれらのプロトタイプがないと、重大な問題が発生します。
問題。 これは、フル セットの変換警告のサブセットです。
つかいます -従来の変換.

・ISOCスタイルの関数定義の使用。 この警告は意図的に 発行
これらの ISO C 機能は
libibertyの従来のC互換性マクロを使用すると、コードに表示されます。
「PARAMS」と「VPARAMS」。 この警告は、ネストされた関数でもバイパスされます
その機能はすでにGCC拡張であり、したがって
従来のC互換性。

-従来の変換 (CおよびObjective-Cのみ)
プロトタイプによって、発生するものとは異なる型変換が発生した場合に警告します
プロトタイプがない場合の同じ議論に。 これには、
固定小数点から浮動小数点へ、またはその逆、および変換によって幅または
デフォルトのプロモーションと同じ場合を除いて、固定小数点引数の符号。

-W宣言後のステートメント (CおよびObjective-Cのみ)
ブロック内のステートメントの後に宣言が見つかった場合に警告します。 この構成は、既知です
C ++から、ISO C99で導入され、GCCでデフォルトで許可されています。 そうではない
ISO C90でサポートされており、GCC3.0より前のバージョンのGCCではサポートされていませんでした。

- ウンデフ
未定義の識別子がで評価された場合に警告します #もし 指令。

-Wno-endif-labels
いつでも警告しないでください #その他 または #endif その後にテキストが続きます。

-影
ローカル変数または型宣言が別の変数をシャドウするたびに警告します。
パラメータ、タイプ、またはクラスメンバー(C ++の場合)、または組み込み関数が
影。 C++ では、ローカル変数が変数をシャドウしてもコンパイラは警告しないことに注意してください。
struct/class/enum ですが、明示的な typedef をシャドウする場合は警告します。

-Wlarger-than =LEN
より大きいオブジェクトがあればいつでも警告します LEN バイトが定義されています。

-Wframe-larger-than =LEN
関数フレームのサイズがより大きい場合に警告します LEN バイト。 行われた計算
スタックフレームサイズを決定することは概算であり、保守的ではありません。 実際の
要件はよりいくらか大きいかもしれません LEN 警告が表示されなくても。 の
さらに、「alloca」、可変長配列、または関連するものを介して割り当てられたスペース
コンストラクトは、発行するかどうかを決定するときにコンパイラーに含まれません。
警告。

-Wno-free-非ヒープオブジェクト
ヒープに割り当てられていないオブジェクトを解放しようとしても警告しないでください。

-Wstack-usage =LEN
関数のスタック使用量がより大きくなる可能性がある場合に警告します LEN バイト。 計算
スタックの使用量を決定するために行われるのは控えめです。 「alloca」を介して割り当てられたスペース、
可変長配列または関連する構造は、コンパイラによって次の場合に含まれます。
警告を発行するかどうかを決定します。

メッセージはの出力と一致しています -fstack-使用法.

・スタックの使用量が完全に静的であるが、指定された量を超える場合は、次のようになります。

警告:スタック使用量は1120バイトです

・スタックの使用が(部分的に)動的であるが制限されている場合、次のようになります。

警告:スタック使用量は1648バイトである可能性があります

・スタックの使用が(部分的に)動的であり、制限されていない場合は、次のようになります。

警告:スタックの使用には制限がない可能性があります

-Wunsafe ループの最適化
コンパイラが何も想定できなかったためにループを最適化できない場合に警告します。
ループインデックスの境界。 と -funsafe ループの最適化 コンパイラが警告する
このような仮定を立てました。

-Wno-pedantic-ms-format (MinGWターゲットのみ)
ISO 以外の "printf" / "scanf" 形式の幅指定子 "I32" に関する警告を無効にします。
「I64」、および「I」は、MS ランタイムに応じて Windows ターゲットで使用されます。
オプション -Wフォーマット & -衒学者 gnu 拡張なし。

-Wpointer-算術
関数型または「void」の「サイズ」に依存するものについて警告します。 GNU C
「void*」を使用した計算で便利なように、これらのタイプにサイズ1を割り当てます。
関数へのポインタとポインタ。 C ++では、算術演算の場合にも警告します
「NULL」を含みます。 この警告は、によっても有効になります -衒学者.

-Wtype-limits
範囲が限られているため、比較が常にtrueまたは常にfalseの場合に警告します。
データ型ですが、定数式については警告しません。 たとえば、署名されていない場合は警告します
変数はゼロと比較されます < or >=。 この警告は、によっても有効になります
-ウェクストラ.

-Wbad-function-cast (CおよびObjective-Cのみ)
関数呼び出しが一致しない型にキャストされるたびに警告します。 たとえば、次の場合に警告します
「intmalloc()」は「anything*」にキャストされます。

-Wc ++-互換性 (CおよびObjective-Cのみ)
ISOCおよびISOの一般的なサブセットの外部にあるISOC構造について警告する
C ++、たとえば「void*」から非「void」へのポインタへの暗黙の変換の要求
タイプ。

-Wc ++ 11-互換性 (C ++およびObjective-C ++のみ)
ISO C++1998とISOC++2011で意味が異なるC++構造について警告します。
たとえば、ISO C++1998のキーワードであるISOC++2011の識別子。この警告
オンになります -狭める によって有効になります -壁.

-Wcast-qual
ターゲット型から型修飾子を削除するためにポインターがキャストされるたびに警告します。
たとえば、「constchar*」が通常の「char*」にキャストされた場合に警告します。

また、安全でない方法で型修飾子を導入するキャストを作成する場合にも警告します。 ために
たとえば、次の例のように、「char**」を「constchar**」にキャストすることは安全ではありません。

/*pはchar**値です。 * /
const char ** q =(const char **)p;
/ *constcharへの読み取り専用文字列の割り当て*はOKです。 * /
* q="文字列";
/ *char**ポインタが読み取り専用メモリを指すようになりました。 * /
** p ='b';

-Wcast-align
ターゲットの必要な配置が次のようになるようにポインタがキャストされるたびに警告します
増加しました。 たとえば、次のマシンで「char*」が「int*」にキャストされた場合に警告します。
整数には、XNUMXバイトまたはXNUMXバイトの境界でのみアクセスできます。

-書き込み文字列
Cをコンパイルするときは、文字列定数に「const char[長さ]" コピーするように
「const」以外の「char *」ポインターへのアドレスは警告を受け取ります。 これらは
警告は、コンパイル時に文字列に書き込もうとする可能性のあるコードを見つけるのに役立ちます
定数ですが、宣言で「const」を使用することに非常に注意している場合に限ります
そしてプロトタイプ。 そうでなければ、ただの迷惑になります。 これが私たちが作らなかった理由です
-壁 これらの警告を要求します。

C ++をコンパイルするときは、文字列リテラルから「char」への非推奨の変換について警告してください。
* "。この警告は、C++プログラムではデフォルトで有効になっています。

-破壊された
によって変更される可能性のある変数について警告する ロングジャンプ or vフォーク。 この警告も
有効にする -ウェクストラ.

-Wコンバージョン
値を変更する可能性のある暗黙の変換について警告します。 これにはコンバージョンが含まれます
「x」が「double」の場合の「abs(x)」のように、実数と整数の間。 間の変換
「unsignedui=-1」のように、signedとunsigned。 のような小さなタイプへの変換
「sqrtf(M_PI)」。 「abs((int)x)」や「ui =
(符号なし)-1、または「abs(2.0)」のように変換によって値が変更されない場合。
符号付き整数と符号なし整数の間の変換に関する警告は、次の方法で無効にできます。
-符号なし変換.

C ++の場合、ユーザー定義の変換の過負荷解決を混乱させることについても警告します。 と
型変換演算子を使用しない変換: 「void」への変換、
同じ型、基本クラス、またはそれらへの参照。 間の変換に関する警告
符号付きおよび符号なし整数は、C++ ではデフォルトで無効になっています。 -Wsign-変換
明示的に有効になっています。

-Wno-conversion-null (C ++およびObjective-C ++のみ)
「NULL」タイプと非ポインタータイプの間の変換について警告しないでください。 -Wconversion-null is
デフォルトで有効になっています。

-Wzero-as-null-ポインター定数 (C ++およびObjective-C ++のみ)
リテラル「0」がnullポインタ定数として使用されている場合に警告します。 これは次の場合に役立ちます
C++11での「nullptr」への変換を容易にします。

-空っぽの体
空のボディが発生した場合に警告します if, ほかに or do while 声明。 この警告は
によっても有効になります -ウェクストラ.

-ウェヌム-比較
異なる列挙型の値の比較について警告します。 C++列挙で
条件式の不一致も診断され、警告は次のように有効になります。
ディフォルト。 Cでは、この警告はによって有効になります -壁.

-Wjump-miss-init (C、Objective-Cのみ)
「goto」ステートメントまたは「switch」ステートメントが前方にジャンプした場合に警告します。
変数の初期化、または変数が実行された後にラベルに逆方向にジャンプします
初期化されました。 これは、初期化されたときに初期化される変数についてのみ警告します
宣言した。 この警告は、CおよびObjective-Cでのみサポートされています。 C++ではこの種の
いずれの場合も、ブランチはエラーです。

-Wjump-miss-init に含まれています -Wc ++-互換性。 で無効にすることができます
-Wno-jump-missis-init オプションを選択します。

-Wsign-比較
符号付きの値と符号なしの値を比較すると、正しくない値が生成される可能性がある場合に警告します
符号付きの値が符号なしに変換されたときの結果。 この警告も有効になっています
by -ウェクストラ; 他の警告を取得するには -ウェクストラ この警告なしで、 -ウェクストラ
-Wno-符号比較.

-Wsign-変換
整数値の符号を変更する可能性のある暗黙の変換について警告します。
符号付き整数式を符号なし整数変数に割り当てます。 明示的な
キャストは警告を沈黙させます。 Cでは、このオプションは次の方法でも有効になります -Wコンバージョン.

-住所
メモリアドレスの疑わしい使用について警告します。 これらには、
「voidfunc(void); if(func)」などの条件式の関数、および
「if(x == "abc")」などの文字列リテラルのメモリアドレスとの比較。
このような使用法は通常、プログラマーエラーを示します。関数のアドレスは常に
trueと評価されるため、条件付きでの使用は通常、プログラマーが
関数呼び出しで括弧を忘れました。 および文字列リテラルとの比較
結果として不特定の動作が発生し、Cで移植できないため、通常は
プログラマーが「strcmp」を使用することを意図していたこと。 この警告はによって有効になります -壁.

-Wlogical-op
式での論理演算子の疑わしい使用について警告します。 これには使用が含まれます
ビット単位の演算子が期待される可能性が高いコンテキストでの論理演算子。

-Waggregate-return
構造体または共用体を返す関数が定義または呼び出された場合に警告します。 (の
配列を返すことができる言語では、これも警告を引き起こします。)

-Wno-属性
認識されない属性など、予期しない「__attribute__」が使用されても警告しないでください。
変数などに適用される関数属性。これはエラーを停止しません
サポートされている属性の誤った使用。

-Wno-builtin-macro-再定義
特定の組み込みマクロが再定義されても警告しないでください。 これにより、
「__TIMESTAMP__」、「__ TIME __」、「__ DATE __」、「__ FILE __」、および
「__BASE_FILE__」。

-Wstrict-プロトタイプ (CおよびObjective-Cのみ)
引数の型を指定せずに関数が宣言または定義された場合に警告します。 (
古いスタイルの関数定義は、前に
引数の型を指定する宣言。)

-Wold スタイル宣言 (CおよびObjective-Cのみ)
宣言の中で、C標準に従って廃止された使用法について警告します。 ために
たとえば、「静的」などのストレージクラス指定子が最初のものではない場合は警告します。
宣言。 この警告は、によっても有効になります -ウェクストラ.

-Wold スタイルの定義 (CおよびObjective-Cのみ)
古いスタイルの関数定義が使用されている場合は警告します。 ある場合でも警告が出されます
以前のプロトタイプ。

-欠落パラメータの種類 (CおよびObjective-Cのみ)
関数パラメーターは、K&Rスタイルの関数で型指定子なしで宣言されます。

void foo(bar){}

この警告は、によっても有効になります -ウェクストラ.

-欠落-プロトタイプ (CおよびObjective-Cのみ)
以前のプロトタイプ宣言なしでグローバル関数が定義されている場合に警告します。 これ
定義自体がプロトタイプを提供している場合でも、警告が発行されます。 目的は
ヘッダー ファイルで宣言されていないグローバル関数を検出します。

-欠落-宣言
グローバル関数が事前の宣言なしで定義されている場合に警告します。 たとえそうしても
定義自体がプロトタイプを提供します。 このオプションを使用して、グローバルを検出します
ヘッダー ファイルで宣言されていない関数。 C++ では、警告は発行されません。
関数テンプレート、またはインライン関数、または匿名名前空間の関数。

-不足フィールド初期化子
構造体の初期化子にいくつかのフィールドが欠落している場合に警告します。 たとえば、次の
「xh」は暗黙的にゼロであるため、コードはこのような警告を引き起こします。

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

このオプションは指定された初期化子について警告しないため、次の変更が行われます
警告をトリガーしません:

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

この警告はに含まれています -ウェクストラ。 他を取得するには -ウェクストラ これなしの警告、
つかいます -ウェクストラ -Wno-missing-field-initializers.

-不足している形式属性
「フォーマット」属性の候補となる可能性のある関数ポインターについて警告します。 ノート
これらは可能性のある候補にすぎず、絶対的な候補ではありません。 GCCはその関数を推測します
代入、初期化、
パラメーターの受け渡しまたは戻りステートメントには、対応する「フォーマット」属性が必要です
結果の型で。 つまり、代入または初期化の左側、
パラメータ変数の型、またはそれを含む関数の戻り値の型
警告を回避するには、それぞれ「format」属性も必要です。

GCC は、「フォーマット」の候補となる可能性のある関数定義についても警告します。
属性。 繰り返しますが、これらは可能な候補にすぎません。 GCCはその「フォーマット」を推測します
属性は、「vprintf」などの関数を呼び出す関数に適している場合があります
または「vscanf」ですが、これは常に当てはまるとは限りません。
「format」属性が適切であると検出されない場合があります。

-Wno-multichar
複数文字の定数(「FOOF」) 使用されている。 通常、それらは
ユーザーのコードのタイプミス。実装で定義された値があり、
ポータブルコードで使用されます。

-Wnormalized =
ISOCとISOC++では、XNUMXつの識別子が異なるシーケンスである場合、それらは異なります。
文字。 ただし、基本的なASCII文字セット以外の文字の場合
を使用すると、同じように見えるXNUMXつの異なる文字シーケンスを持つことができます。 避けるために
混乱して、ISO10646標準はいくつかを設定します 正規化 ルール 適用すると
同じように見えるXNUMXつのシーケンスが同じシーケンスに変換されることを確認してください。 GCC
正規化されていない識別子を使用している場合は警告できます。 このオプション
その警告を制御します。

GCCでサポートされている警告にはXNUMXつのレベルがあります。 デフォルトは -Wnormalized = nfc,
これは、ISO10646"C"正規化形式ではない識別子について警告します。
NFC。 NFCは、ほとんどの用途に推奨される形式です。

残念ながら、ISOCおよびISOC++で識別子に許可されている文字がいくつかあります。
これは、NFCに変換されると、識別子では許可されません。 つまり、方法はありません
これらのシンボルをポータブルISOCまたはC++で使用し、すべての識別子をNFCに含めるには。
-Wnormalized = id これらの文字の警告を抑制します。 将来が期待されます
関連する規格のバージョンはこれを修正します。そのため、このオプションは修正されません。
デフォルト。

次のように書くことで、すべての文字の警告をオフに切り替えることができます -Wnormalized = none。 あなた
他の正規化スキームを使用している場合にのみ、これを実行する必要があります (
"D")、そうしないと、文字通り不可能なバグを簡単に作成できるからです。
参照してください。

ISO 10646の一部の文字には明確な意味がありますが、一部のフォントでは同じように見えます
または、特にフォーマットが適用された後の表示方法。 例えば
"\u207F"、"SUPERSCRIPT LATIN SMALL LETTER N" は、通常の "n" と同じように表示されます。
それは上付き文字に配置されています。 ISO 10646 は、 NFKC 正規化
これらすべてを標準形式に変換するスキームもあり、GCC は次の場合に警告します
使用する場合、コードはNFKCにありません -Wnormalized = nfkc. この警告は、
混乱する可能性があるため、文字 O を含むすべての識別子について警告します
デフォルトではありませんが、ローカルコーディングとして役立つ場合があります
これらを表示するようにプログラミング環境を修正できない場合の規則
文字がはっきり。

-Wno-非推奨
非推奨の機能の使用について警告しないでください。

-Wno-非推奨-宣言
非推奨としてマークされた関数、変数、および型の使用について警告しないでください。
「非推奨」属性を使用します。

-オーバーフローなし
定数式でのコンパイル時のオーバーフローについて警告しないでください。

-Woverride-init (CおよびObjective-Cのみ)
指定を使用するときに、副作用のない初期化されたフィールドがオーバーライドされた場合に警告します
初期化子。

この警告はに含まれています -ウェクストラ。 他を取得するには -ウェクストラ これなしの警告、
つかいます -ウェクストラ -Wno-override-init.

-Wパック
構造体にpacked属性が与えられているが、packed属性には
構造のレイアウトまたはサイズへの影響。 このような構造は、
利益が少ない。 たとえば、このコードでは、「struct bar」の変数「fx」は
「struct bar」自体がpacked属性を持っていなくても、位置がずれることがあります。

構造体 foo {
int x;
char a、b、c、d;
} __attribute __((packed));
構造体バー{
文字z;
構造体 foo f;
};

-Wpacked-bitfield-compat
GCCの4.1、4.2、および4.3シリーズは、タイプのビットフィールドの「packed」属性を無視します。
「char」。 これはGCC4.4で修正されていますが、この変更により、
構造レイアウト。 GCCは、そのようなフィールドのオフセットがGCCで変更されたときに通知します
4.4。 たとえば、このフィールド「a」と「b」の間に4ビットのパディングはありません。
構造:

構造体 foo
{
char a:4;
char b:8;
} __attribute__((packed));

この警告はデフォルトで有効になっています。 使用する -Wno-packed-bitfield-compat これを無効にするには
警告。

-パッド入り
構造にパディングが含まれている場合は、要素を整列させるために警告します。
構造または構造全体を整列させます。 時々これが起こるときそれは可能です
構造のフィールドを再配置してパディングを減らし、
構造が小さい。

-冗長-decls
同じスコープ内で何かが複数回宣言されている場合は、次の場合でも警告します。
複数の宣言は有効であり、何も変更しません。

-Wnested-externs (CおよびObjective-Cのみ)
関数内で「extern」宣言が検出された場合に警告します。

-ウィンライン
関数をインライン化できず、インラインとして宣言されている場合に警告します。 これでも
オプションを使用すると、コンパイラは、で宣言された関数のインライン化の失敗について警告しません。
システムヘッダー。

コンパイラーは、さまざまなヒューリスティックを使用して、インライン化するかどうかを決定します。
関数。 たとえば、コンパイラは関数のサイズを考慮に入れます
インライン化され、現在の関数ですでに実行されているインライン化の量。
したがって、ソースプログラムの重要でないように見える変更により、
によって生成された警告 -ウィンライン 表示または非表示にします。

-Wno-無効なオフセット (C ++およびObjective-C ++のみ)
適用からの警告を抑制します オフセット 非PODタイプへのマクロ。 によると
1998年のISOC++標準、適用 オフセット 非PODタイプへの変換は未定義です。 の
ただし、既存のC++実装 オフセット 通常、意味のある結果が得られます
特定の種類の非 POD タイプに適用された場合でも。 (単純なものなど 構造 それ
コンストラクターを持つという理由だけで、POD 型になることはできません。) このフラグは
移植性のないコードを書いていることを認識していて、故意に
それについての警告を無視することを選択しました。

の制限 オフセット C++標準の将来のバージョンで緩和される可能性があります。

-Wno-int-to-pointer-cast
異なるサイズの整数のポインタ型へのキャストからの警告を抑制します。 の
C ++、小さいサイズのポインタ型へのキャストはエラーです。 Wint からポインターへのキャスト is
デフォルトで有効になっています。

-Wno-pointer-to-int-cast (CおよびObjective-Cのみ)
ポインタから異なるサイズの整数型へのキャストからの警告を抑制します。

-Winvalid-pch
プリコンパイル済みヘッダーが検索パスに見つかったが、使用できない場合に警告します。

-ウーロン茶
警告する場合 長い 長い タイプが使用されます。 これは、次のいずれかによって有効になります -衒学者 or -伝統的な
ISOC90およびC++98モードで。 警告メッセージを禁止するには、 -Wno-long-long.

-Wvariadic-マクロ
可変個引数マクロがペダンティックISOC90モード、またはGNU代替構文で使用されている場合に警告する
ペダンティックISOC99モードの場合。 これはデフォルトです。 警告メッセージを禁止するには、
-可変個引数マクロなし.

-Wvector-操作-パフォーマンス
ベクトル演算がアーキテクチャのSIMD機能を介して実装されていない場合に警告します。
主にパフォーマンスチューニングに役立ちます。 ベクトル演算を実装できます
「区分的」、つまりスカラー演算がすべてのベクトルで実行されることを意味します
エレメント; 「並列」とは、ベクトル演算が以下を使用して実装されることを意味します。
幅の広いタイプのスカラー。通常、パフォーマンス効率が高くなります。 と「シングルとして
スカラー」は、ベクトルがスカラー型に適合することを意味します。

-Wvla
コードで可変長配列が使用されている場合は警告します。 -Wno-vla を防ぎます
-衒学者 可変長配列の警告。

-Wvolatile レジスタ変数
レジスタ変数が揮発性であると宣言された場合に警告します。 揮発性モディファイアはしません
登録するための読み取りおよび/または書き込みを排除する可能性のあるすべての最適化を禁止する
変数。 この警告はによって有効になります -壁.

-Wdisabled-最適化
要求された最適化パスが無効になっている場合に警告します。 この警告は一般的には発生しません
コードに問題があることを示します。 それは単にGCCの
オプティマイザはコードを効果的に処理できませんでした。 多くの場合、問題は
コードが大きすぎる、または複雑すぎる。 GCC は、次の場合にプログラムの最適化を拒否します。
最適化自体には、途方もない時間がかかる可能性があります。

-Wpointer サイン (CおよびObjective-Cのみ)
ポインタ引数の受け渡しまたは異なる符号付きの割り当てについて警告します。 これ
このオプションは、CおよびObjective-Cでのみサポートされています。 それはによって暗示されます -壁 とにより、
-衒学者、で無効にすることができます -Wno-ポインター記号.

-Wstack-プロテクター
このオプションは、次の場合にのみアクティブになります -fstack-プロテクター アクティブです。 機能について警告します
スタック破壊から保護されません。

-マッドフラップなし
インスツルメントできない構造に関する警告を抑制します -fマッドフラップ.

-Woverlength-文字列
「最小最大」長より長い文字列定数について警告する
C規格で指定されています。 最近のコンパイラでは、通常、次のような文字列定数を使用できます。
標準の最小制限よりもはるかに長いですが、非常にポータブルなプログラムは
長い文字列の使用は避けてください。

制限が適用されます After 文字列定数の連結であり、末尾をカウントしません
NUL。 C90では、制限は509文字でした。 C99では、4095に引き上げられました。C++98は
規範的な最小最大値を指定しないため、で長すぎる文字列を診断しません
C ++。

このオプションは、 -衒学者、およびで無効にすることができます -Wno-overlength-strings.

-Wunsuffixed-float-定数 (CおよびObjective-Cのみ)
GCC は、サフィックスのない浮動定数に対して警告を発行します。 いつ
と一緒に使用 -Wsystem-ヘッダー システムヘッダーのそのような定数について警告します
ファイル。 これは、「FLOAT_CONST_DECIMAL64」で使用するコードを準備するときに役立ちます。
99 進浮動小数点拡張から CXNUMX へのプラグマ。

オプション for デバッギング あなたの 演奏曲目 or GCC
GCCには、プログラムまたはGCCのデバッグに使用されるさまざまな特別なオプションがあります。

-g オペレーティングシステムのネイティブ形式(スタブ、COFF、
XCOFF、またはDWARF 2)。 GDBはこのデバッグ情報を処理できます。

スタブ形式を使用するほとんどのシステムでは、 -g 追加のデバッグ情報の使用を可能にします
GDBだけが使用できること。 この追加情報により、GDBでのデバッグ作業が改善されますが
おそらく、他のデバッガーがクラッシュするか、プログラムの読み取りを拒否します。 お望みならば
追加情報を生成するかどうかを確実に制御するには、次を使用します -gstabs +,
-gstabs, -gxcoff +, -gxcoffまたは -gvms (下記参照)。

GCCを使用すると、 -g   -O。 最適化されたコードによって取られるショートカットは
ときどき驚くべき結果が得られます:あなたが宣言したいくつかの変数はに存在しないかもしれません
すべて; 制御の流れは、予期していなかった場所に一時的に移動する可能性があります。 一部のステートメントは
一定の結果を計算するか、それらの値がすでに
手; 一部のステートメントは別の場所で実行される可能性があります。
ループ。

それでも、最適化された出力をデバッグすることは可能です。 これはそれを合理的にします
バグがある可能性のあるプログラムにオプティマイザを使用する。

次のオプションは、GCCがより多くの機能を備えて生成される場合に役立ちます
複数のデバッグ形式。

-ggdb
GDBで使用するためのデバッグ情報を生成します。 これは、最も表現力豊かなものを使用することを意味します
使用可能な形式(DWARF 2、スタブ、またはどちらも使用できない場合はネイティブ形式)
サポートされています)、可能な場合はGDB拡張機能を含みます。

-gstabs
GDBを使用せずに、デバッグ情報をstabs形式で生成します(サポートされている場合)。
拡張機能。 これは、ほとんどのBSDシステムでDBXによって使用される形式です。 MIPS、Alpha、
System Vリリース4システムこのオプションは、スタブデバッグ出力を生成しますが、
DBXまたはSDBによって理解されます。 System Vリリース4システムでは、このオプションにはGNUが必要です。
アセンブラ。

-feliminate-未使用のデバッグシンボル
シンボルのみについて、デバッグ情報をスタブ形式で生成します(サポートされている場合)。
実際に使用されます。

-femit-class-debug-always
XNUMXつのオブジェクトファイルでC++クラスのデバッグ情報を出力する代わりに、
クラスを使用してすべてのオブジェクトファイルに出力します。 このオプションは、
GCCが通常デバッグ情報を出力する方法を処理できないデバッガー
このオプションを使用すると、デバッグ情報のサイズが大きくなるため、クラスの場合
XNUMX 倍にもなります。

-fno-debug-types-セクション
デフォルトでは、DWARF v4 以降のタイプの DIE を使用する場合、独自の DIE が配置されます
.debug_info セクションの一部にする代わりに、.debug_types セクションを削除します。 それは
リンカが
重複を削除できます。 ただし、すべての DWARF コンシューマが .debug_types セクションをサポートしているわけではありません
はまだありません。

-gstabs +
GNUを使用して、デバッグ情報をstabs形式で生成します(サポートされている場合)。
GNUデバッガー(GDB)によってのみ理解される拡張機能。 これらの拡張機能の使用は
他のデバッガーをクラッシュさせたり、プログラムの読み取りを拒否したりする可能性があります。

-gcoff
COFF形式でデバッグ情報を生成します(サポートされている場合)。 これは
SystemVリリース4より前のほとんどのSystemVシステムでSDBによって使用されていた形式。

-gxcoff
XCOFF形式でデバッグ情報を生成します(サポートされている場合)。 これは
IBM RS/6000システム上のDBXデバッガーで使用される形式。

-gxcoff +
GNUを使用して、XCOFF形式(サポートされている場合)でデバッグ情報を生成します
GNUデバッガー(GDB)によってのみ理解される拡張機能。 これらの拡張機能の使用は
他のデバッガーがクラッシュしたり、プログラムの読み取りを拒否したりする可能性があり、原因となる可能性があります
GNUアセンブラ(GAS)以外のアセンブラがエラーで失敗する。

-グドワーフ-バージョン
DWARF 形式でデバッグ情報を生成します (サポートされている場合)。 これは
IRIX 6 の DBX で使用される形式。 バージョン 2、3、または 4 のいずれかです。 の
デフォルトのバージョンは 2 です。

DWARF バージョン 2 では、一部のポートでは、一部の非
アンワインド テーブルで競合する DWARF 3 拡張機能。

バージョン4ではGDB7.0と -fvar-追跡-割り当て 最大の利益のために。

-grecord-gcc-スイッチ
このスイッチにより、コンパイラを呼び出すために使用されるコマンドラインオプションが発生します。
DWARFのDW_AT_producer属性に追加されるコード生成に影響を与える
デバッグ情報。 オプションは、それらを分離するスペースと連結されます。
お互いに、そしてコンパイラバージョンから。 も参照してください -frecord-gcc-スイッチ 他の人のために
コンパイラ オプションをオブジェクト ファイルに格納する方法。

-gno-record-gcc-switches
DWARFのDW_AT_producer属性にコマンドラインオプションを追加することを禁止します
デバッグ情報。 これがデフォルトです。

-gstrict-ドワーフ
で選択されたものよりも新しいDWARF標準バージョンの拡張機能の使用を禁止する
-グドワーフ-バージョン。 後で競合しないDWARF拡張機能を使用するほとんどのターゲット
標準バージョンが許可されます。

-gno-strict-ドワーフ
で選択されたものよりも新しいDWARF標準バージョンの拡張機能の使用を許可する
-グドワーフ-バージョン.

-gvms
VMS デバッグ形式でデバッグ情報を生成します (サポートされている場合)。 これは
VMS システムの DEBUG で使用される形式。

-gレベル
-ggdbレベル
-gstabsレベル
-gcoffレベル
-gxcoffレベル
-gvmsレベル
デバッグ情報を要求し、また使用する レベル 情報量を指定します。 The
デフォルトレベルは2です。

レベル0は、デバッグ情報をまったく生成しません。 したがって、 -g0 否定する -g.

レベル1は、一部のバックトレースを作成するのに十分な最小限の情報を生成します。
デバッグする予定のないプログラム。 これには、機能の説明と
外部変数はありますが、ローカル変数に関する情報や行番号はありません。

レベル3には、に存在するすべてのマクロ定義などの追加情報が含まれています。
プログラム。 一部のデバッガーは、使用時にマクロ展開をサポートします -g3.

-gdwarf-2 GCCは以前はサポートしていたため、連結されたデバッグレベルを受け入れません。
オプション -グドワーフ これは、DWARFのバージョン1でデバッグ情報を生成することを意味します
フォーマット(バージョン2とは大きく異なります)であり、混乱しすぎていたでしょう。
そのデバッグ形式は長い間廃止されていますが、オプションは現在変更できません。 代わりに使用する
追加の -gレベル DWARFのデバッグレベルを変更するオプション。

-グトグル
このオプションを省略するとデバッグ情報が生成される場合は、デバッグ情報の生成をオフにします。
それ以外の場合は、レベル 2 でオンにします。 コマンドラインでのこの引数の位置
他のすべてのオプションが処理された後に有効になります。
何度与えても一度だけ。 これは主に使用することを目的としています
  -f比較デバッグ.

-fdump-final-insn[=file]
最終的な内部表現(RTL)をにダンプします file。 オプションの引数が
省略(または file は ".")、ダンプ ファイルの名前は追加によって決定されます。
コンパイル出力ファイル名に「.gkd」を追加します。

-f比較デバッグ[=optsの]
コンパイル中にエラーが発生しなかった場合は、コンパイラをもう一度実行して、次のように追加します。 optsの &
-f比較デバッグ秒 XNUMX番目のコンパイルに渡される引数に。 ダンプ
両方のコンパイルの最終的な内部表現であり、異なる場合はエラーを出力します。

等号を省略した場合、デフォルト -グトグル 使用されている。

環境変数 GCC_COMPARE_DEBUG、定義されている場合、空でもゼロでもない、
暗黙的に有効にします -f比較デバッグ。 場合 GCC_COMPARE_DEBUG 文字列に定義されます
ダッシュで始まり、それからそれはのために使用されます optsの、それ以外の場合はデフォルト -グトグル is
中古。

-fcompare-debug =、等号あり、なし optsの、と同等です
-fno-比較-デバッグ、これは最終表現のダンプを無効にし、
XNUMX回目のコンパイル、 GCC_COMPARE_DEBUG 発効から。

中に完全なカバレッジを確認するには -f比較デバッグ テスト、設定 GCC_COMPARE_DEBUG 言う
-fcompare-debug-not-overridden、GCCは無効なオプションとして拒否します
実際のコンパイル (前処理、アセンブリ、またはリンクではなく)。 ただ取得するには
警告、設定 GCC_COMPARE_DEBUG 〜へ -w%n-fcompare-debug 上書きされた しましょう。

-f比較デバッグ秒
このオプションは、要求されたXNUMX番目のコンパイルのためにコンパイラーに暗黙的に渡されます
by -f比較デバッグ、警告を消音するオプション、および他のオプションを省略する
これにより、副作用のコンパイラ出力がファイルまたは標準出力になります。
ダンプファイルと保存された一時ファイルは、「。gk」を含むように名前が変更されます
それらを上書きしないようにするための、XNUMX回目のコンパイル中の追加の拡張
最初によって生成されます。

このオプションがコンパイラドライバに渡されると、 最初の にコンパイル
スキップすることで、コンパイラを適切にデバッグする以外の目的には役立ちません。

-feliminate-dwarf2-dups
それぞれについて重複した情報を排除することにより、DWARF2 デバッグ情報を圧縮します。
シンボル。 このオプションは、DWARF2 デバッグ情報を生成する場合にのみ意味があります
  -gdwarf-2.

-femit-struct-debug-baseonly
構造体のようなタイプのデバッグ情報を出力するのは、
コンパイル ソース ファイルは、構造体が定義されたファイルのベース名と一致します。

このオプションは、デバッグ情報のサイズを大幅に削減しますが、
デバッガーへのタイプ情報の重大な潜在的損失。 見る
-femit-struct-debug-reduced 攻撃性の低いオプションの場合。 見る
-femit-struct-debug-detailed より詳細な制御については。

このオプションは、DWARF2でのみ機能します。

-femit-struct-debug-reduced
構造体のようなタイプのデバッグ情報を出力するのは、
コンパイル ソース ファイルは、型が定義されたファイルのベース名と一致します。
構造体がテンプレートであるか、システムヘッダーで定義されている場合を除きます。

このオプションは、デバッグ情報のサイズを大幅に削減します。
デバッガーへのタイプ情報の潜在的な損失。 見る -femit-struct-debug-baseonly
より積極的なオプションについては。 見る -femit-struct-debug-detailed 詳細については
コントロール。

このオプションは、DWARF2でのみ機能します。

-femit-struct-debug-detailed[=スペックリスト]
コンパイラがデバッグ情報を生成する構造体のような型を指定します。
目的は、異なるオブジェクト間で重複する構造体のデバッグ情報を減らすことです
同じプログラム内のファイル。

このオプションは、の詳細バージョンです。 -femit-struct-debug-reduced &
-femit-struct-debug-baseonly、ほとんどのニーズに対応します。

仕様には構文があります[dir:|ind:][ord:|ジャンル:](どれか|SYS|ベース|なし)

オプションの最初の単語は、仕様を直接使用される構造体に制限します
(dir:)または間接的に使用(ind:)。 構造体タイプは、タイプである場合に直接使用されます
変数のメンバー。 間接的な使用は、構造体へのポインターを介して発生します。 あれは、
不完全な構造体の使用が正当な場合、その使用は間接的です。 例は
構造 XNUMXつ 直接; 構造 2 * 間接的;.

オプションのXNUMX番目の単語は、仕様を通常の構造体に制限します(ord:)または
一般的な構造体(ジャンル:)。 一般的な構造体の説明は少し複雑です。 C ++の場合、
これらは、テンプレートクラス、または非テンプレートクラスの非明示的な特殊化です。
上記の範囲内。 他のプログラミング言語にはジェネリックがありますが、
-femit-struct-debug-detailed まだそれらを実装していません。

XNUMX番目の単語は、コンパイラが対象とする構造体のソースファイルを指定します
デバッグ情報を発行します。 その価値 なし & どれか 通常の意味を持っています。 The
ベース 型宣言が含まれるファイルの名前のベースを意味します
表示されるのは、メインのコンパイルファイルの名前のベースと一致する必要があります。 実際には、
これは、で宣言された型を意味します foo.c & ふー。 デバッグ情報がありますが、
他のヘッダーで宣言された型はそうではありません。 値 SYS 満足するタイプを意味します
ベース または、システムまたはコンパイラのヘッダーで宣言されます。

アプリケーションに最適な設定を決定するために、実験が必要になる場合があります。

デフォルトは -femit-struct-debug-detailed = all.

このオプションは、DWARF2でのみ機能します。

-fno-マージデバッグ文字列
リンカに、デバッグ情報内の文字列をマージしないように指示します。
異なるオブジェクトファイルで同一です。 マージは、すべてのアセンブラまたは
リンカー。 マージすると、出力ファイルのデバッグ情報のサイズが減少します。
リンク処理時間を増やすコスト。 マージはデフォルトで有効になっています。

-fdebug-prefix-map =古い=新製品
ディレクトリ内のファイルをコンパイルする場合 古い、それらを次のように説明するデバッグ情報を記録します
in 新製品 を代わりにお使いください。

-fno-dwarf2-cfi-asm
コンパイラが使用する代わりに「.eh_frame」セクションを生成したときに、DWARF2アンワインド情報を発行します
GAS".cfi_*"ディレクティブ。

-p 分析プログラムに適したプロファイル情報を書き込むための追加のコードを生成します
教授。 データが必要なソースファイルをコンパイルするときに、このオプションを使用する必要があります。
また、リンクするときにも使用する必要があります。

-pg 分析プログラムに適したプロファイル情報を書き込むための追加のコードを生成します
gprof。 データが必要なソースファイルをコンパイルするときに、このオプションを使用する必要があります。
また、リンクするときにも使用する必要があります。

-Q コンパイラーに、コンパイル時に各関数名を出力させ、いくつかを出力させます
終了時の各パスに関する統計。

-ftime-レポート
コンパイラーに、各パスで消費された時間に関する統計を出力させます。
終わります。

-fmem-レポート
コンパイラが永続的なメモリ割り当てに関する統計を出力するようにします
終わります。

-fpre-ipa-mem-report
-fpost-ipa-mem-report
またはの前に、コンパイラに永続的なメモリ割り当てに関する統計を出力させます。
手続き間最適化の後。

-fstack-使用法
関数ごとに、プログラムのスタック使用情報をコンパイラーに出力させます
基本。 ダンプのファイル名は、追加することによって作成されます 補助名. 補助名 is
明示的に指定されていない場合は、出力ファイルの名前から生成されます。
実行可能ファイル。それ以外の場合は、ソースファイルのベース名です。 エントリはで構成されています
XNUMXつのフィールド:

・関数の名前。

・バイト数。

・XNUMXつ以上の修飾子: "static"、 "dynamic"、"bounded"。

修飾子「static」は、関数がスタックを静的に操作することを意味します。
固定バイト数が関数エントリでフレームに割り当てられ、で解放されます
関数exit; それ以外の場合、関数でスタック調整は行われません。 二番目
フィールドはこの固定バイト数です。

修飾子「動的」は、関数がスタックを動的に操作することを意味します。
上記の静的割り当てに加えて、スタック調整は
関数の本体。たとえば、関数呼び出しの周りに引数をプッシュ/ポップします。 の場合
修飾子「有界」も存在し、これらの調整の量は次のように制限されます。
コンパイル時とXNUMX番目のフィールドは、使用されるスタックの合計量の上限です。
関数によって。 存在しない場合、これらの調整の量は制限されません
コンパイル時、XNUMX番目のフィールドは境界部分のみを表します。

-fprofile-arcs
プログラムが流れるようにコードを追加する アーク 計装されています。 プログラムの実行中
各ブランチと呼び出しが実行された回数と実行された回数を記録します
または戻ります。 コンパイルされたプログラムが終了すると、このデータは次のファイルに保存されます。
auxname.gcda ソースファイルごとに。 データはプロファイル指向に使用できます
最適化(-fbranch-確率)、またはテストカバレッジ分析用
(-ftest-カバレッジ)。 各オブジェクトファイルの 補助名 の名前から生成されます
明示的に指定され、最終的な実行可能ファイルではない場合は出力ファイル、それ以外の場合は出力ファイル
ソースファイルのベース名です。 どちらの場合も、接尾辞は削除されます(例:
foo.gcda 入力ファイル用 dir / foo.cまたは dir / foo.gcda として指定された出力ファイルの場合 -o
dir / foo.o).

- カバレッジ
このオプションは、カバレッジ分析用にインストルメント化されたコードをコンパイルおよびリンクするために使用されます。 The
オプションはの同義語です -fprofile-arcs -ftest-カバレッジ (コンパイル時)および -lgcov
(リンク時)。 詳細については、これらのオプションのドキュメントを参照してください。

・ソースファイルを次のコマンドでコンパイルします -fprofile-arcs プラス最適化とコード生成
オプション。 テストカバレッジ分析には、追加の -ftest-カバレッジ オプションを選択します。
プログラム内のすべてのソースファイルをプロファイリングする必要はありません。

・オブジェクトファイルを -lgcov or -fprofile-arcs (後者は、
前の)。

・代表的なワークロードでプログラムを実行して、アークプロファイルを生成します
情報。 これは何度でも繰り返すことができます。 同時に実行できます
プログラムのインスタンスであり、ファイルシステムがロックをサポートしている場合、
データファイルは正しく更新されます。 また、「フォーク」コールが検出され、
正しく処理されます(二重カウントは発生しません)。

・プロファイル指向の最適化の場合、同じものを使用してソースファイルを再度コンパイルします
最適化とコード生成オプションに加えて -fbranch-確率.

・テストカバレッジ分析には、 gcov から人間が読める情報を生成する
  .gcno & .gcda ファイル。 を参照してください gcov 詳細についてはドキュメント
情報を表示します。

-fprofile-arcs、プログラムの機能ごとに、GCCはプログラムフローを作成します
グラフは、グラフのスパニングツリーを見つけます。 にないアークのみ
スパニングツリーをインストルメント化する必要があります。コンパイラは、次の数をカウントするコードを追加します。
これらのアークが実行される回数。 アークが唯一の出口または唯一の入口である場合
ブロックの場合、インストルメンテーションコードをブロックに追加できます。 そうでなければ、新しい基本
インストルメンテーションコードを保持するためにブロックを作成する必要があります。

-ftest-カバレッジ
メモファイルを作成します。 gcov コードカバレッジユーティリティを使用してプログラムを表示できます
カバレッジ。 各ソースファイルのノートファイルは呼び出されます auxname.gcno。 を参照してください
-fprofile-arcs 上記のオプションの説明 補助名 と方法の説明
テスト カバレッジ データを生成します。 カバレッジ データはソース ファイルとより厳密に一致します。
最適化しないと。

-fdbg-cnt-リスト
すべてのデバッグカウンターの名前とカウンターの上限を出力します。

-fdbg-cnt =カウンターバリューリスト
内部デバッグカウンタの上限を設定します。 カウンターバリューリスト カンマ区切りです
の一覧 : 各デバッグカウンターの上限を設定するペア 〜へ
. すべてのデバッグ カウンターの初期上限は UINT_MAX、したがって dbg_cnt()
このオプションで上限が設定されていない限り、常に true を返します。 例えば
-fdbg-cnt=dce:10,tail_call:0 dbg_cnt(dce) は最初の 10 に対してのみ true を返します
呼び出し

-フェンブル-種類-パス
-f無効化-種類-パス=範囲リスト
これは、明示的に無効化/有効化するために使用されるデバッグ オプションのセットです。
最適化パス。 コンパイラ ユーザーの場合、パスを有効/無効にするための通常のオプション
代わりに使用する必要があります。

*<-fdisable-ipa-パス>
ipa パスを無効にする パス. パス パス名です。 同じパスが静的である場合
コンパイラで複数回呼び出される場合は、パス名に
1から始まる連番。

*<-fdisable-rtl-パス>
*<-fdisable-rtl-パス=範囲リスト>
RTL パスを無効にする パス. パス パス名です。 同じパスが静的である場合
コンパイラで複数回呼び出される場合は、パス名に
1から始まる連番。 範囲リスト のコンマ区切りリストです。
関数範囲またはアセンブラ名。 各範囲は、
結腸。 範囲は両端を含みます。 範囲が些細な場合、数値
ペアは単一の数として簡略化できます。 関数の cgraph ノードの UID is
指定された範囲の XNUMX つに収まる、 パス そのために無効になっています
関数。 ザ UID ダンプファイルの関数ヘッダーに表示され、パス
オプションを使用して名前をダンプできます -fdump-パス.

*<-fdisable-tree-パス>
*<-fdisable-tree-パス=範囲リスト>
ツリーパスを無効にする パス。 見る -fdisable-rtl オプションの説明について
引数

*<-fenable-ipa-パス>
ipa パスを有効にする パス. パス パス名です。 同じパスが静的である場合
コンパイラで複数回呼び出される場合は、パス名に
1から始まる連番。

*<-fenable-rtl-パス>
*<-fenable-rtl-パス=範囲リスト>
RTL パスを有効にする パス。 見る -fdisable-rtl オプション引数の説明と
例。

*<-fenable-tree-パス>
*<-fenable-tree-パス=範囲リスト>
ツリーパスを有効にする パス。 見る -fdisable-rtl オプション引数の説明について。

#すべての機能でccp1を無効にする
-fdisable-tree-ccp1
#cgraphノードuidが1である関数の完全な展開を無効にする
-fenable-tree-cunroll = 1
#次の範囲の関数のgcse2を無効にします[1,1]、
#[300,400]、および[400,1000]
#関数fooおよびfoo2のgcse2を無効にします
-fdisable-rtl-gcse2 = foo、foo2
#早期インライン化を無効にする
-fdisable-tree-einline
#ipaインライン化を無効にする
-fdisable-ipa-インライン
#ツリーの完全な展開を有効にする
-fenable-tree-unroll

-d手紙
-fdump-rtl-パス
によって指定された時間にコンパイル中にデバッグダンプを作成すると言います 手紙。 この
コンパイラのRTLベースのパスをデバッグするために使用されます。 ほとんどのファイル名
ダンプの数は、パス番号と単語を追加することによって作成されます ダンプ名、 そしてその
ファイルは、出力ファイルのディレクトリに作成されます。 パス番号は
パスがパス マネージャーに登録されると、静的に計算されます。 したがって、
番号付けは、パスの動的な実行順序とは関係ありません。 特に、
プラグインによってインストールされたパスは、かなり実行されたとしても 200 を超える数になる可能性があります。
早いです。 ダンプ名 明示的に出力ファイルの名前から生成されます
指定されていて実行可能ファイルではない場合、それ以外の場合はソースのベース名です
ファイル。 これらのスイッチは、次の場合に異なる効果を持つ場合があります。 -E 前処理に使用されます。

デバッグダンプは、 -fdump-rtl スイッチまたはいくつか -d オプション 手紙。 ここに
で使用できる文字は パス & 手紙、およびそれらの意味:

-fdump-rtl-alignments
分岐の配置が計算された後にダンプします。

-fdump-rtl-asmcons
in/out制約が満たされていないrtlステートメントを修正した後にダンプします。

-fdump-rtl-auto_inc_dec
auto-inc-dec検出後にダンプします。 このパスは、次のアーキテクチャでのみ実行されます。
autoincまたはautodec命令があります。

-fdump-rtl-バリア
バリアの指示をクリーンアップした後にダンプします。

-fdump-rtl-bbpart
ホットとコールドの基本ブロックを分割した後にダンプします。

-fdump-rtl-bbro
ブロックの並べ替え後にダンプします。

-fdump-rtl-btl1
-fdump-rtl-btl2
-fdump-rtl-btl1 & -fdump-rtl-btl2 XNUMXつの分岐ターゲットの後にダンプを有効にする
負荷最適化は合格です。

-fdump-rtl-バイパス
ジャンプバイパスおよび制御フローの最適化後にダンプします。

-fdump-rtl-結合
RTL命令の組み合わせパスの後にダンプします。

-fdump-rtl-compgotos
計算されたgotoを複製した後にダンプします。

-fdump-rtl-ce1
-fdump-rtl-ce2
-fdump-rtl-ce3
-fdump-rtl-ce1, -fdump-rtl-ce2, -fdump-rtl-ce3 XNUMXつの後にダンプを有効にする
変換に合格した場合。

-fdump-rtl-cprop_hardreg
ハードレジスタコピーの伝播後にダンプします。

-fdump-rtl-csa
スタック調整を組み合わせた後にダンプします。

-fdump-rtl-cse1
-fdump-rtl-cse2
-fdump-rtl-cse1 & -fdump-rtl-cse2 XNUMX つの共通サブの後にダンプを有効にします。
式除去パス。

-fdump-rtl-dce
スタンドアロンのデッドコード除去が通過した後にダンプします。

-fdump-rtl-dbr
遅延分岐スケジューリング後にダンプします。

-fdump-rtl-dce1
-fdump-rtl-dce2
-fdump-rtl-dce1 & -fdump-rtl-dce2 XNUMXつのデッドストアの後にダンプを有効にする
除去パス。

-fdump-rtl-ええ
EH処理コードのファイナライズ後にダンプします。

-fdump-rtl-eh_ranges
EH処理範囲領域の変換後にダンプします。

-fdump-rtl-expand
RTL生成後にダンプします。

-fdump-rtl-fwprop1
-fdump-rtl-fwprop2
-fdump-rtl-fwprop1 & -fdump-rtl-fwprop2 XNUMXつのフォワードの後に​​ダンプを有効にする
伝播は通過します。

-fdump-rtl-gcse1
-fdump-rtl-gcse2
-fdump-rtl-gcse1 & -fdump-rtl-gcse2 グローバルコモン後のダンプを有効にする
部分式除去。

-fdump-rtl-init-regs
レジスタの初期化後にダンプします。

-fdump-rtl-initvals
初期値セットの計算後にダンプします。

-fdump-rtl-into_cfglayout
cfglayoutモードに変換した後にダンプします。

-fdump-rtl-ira
レジスタ割り当てを繰り返した後にダンプします。

-fdump-rtl-ジャンプ
XNUMX回目のジャンプ最適化後にダンプします。

-fdump-rtl-loop2
-fdump-rtl-loop2 rtlループ最適化が通過した後にダンプを有効にします。

-fdump-rtl-mach
マシン依存の再編成パスを実行した後、そのパスの場合はダンプします
存在しています。

-fdump-rtl-mode_sw
冗長モードスイッチを取り外した後にダンプします。

-fdump-rtl-rnreg
レジスタの番号を付け直した後にダンプします。

-fdump-rtl-outof_cfglayout
cfglayoutモードから変換した後にダンプします。

-fdump-rtl-のぞき穴2
のぞき穴を通過した後にダンプします。

-fdump-rtl-postreload
リロード後の最適化後にダンプします。

-fdump-rtl-pro_and_epilogue
関数のプロローグとエピローグを生成した後にダンプします。

-fdump-rtl-regmove
レジスタ移動パスの後にダンプします。

-fdump-rtl-sched1
-fdump-rtl-sched2
-fdump-rtl-sched1 & -fdump-rtl-sched2 基本ブロックの後にダンプを有効にする
スケジューリングパス。

-fdump-rtl-参照
符号拡張除去後にダンプします。

-fdump-rtl-seqabstr
一般的なシーケンス検出後にダンプします。

-fdump-rtl-shorten
枝を短くした後にダンプします。

-fdump-rtl-兄弟
兄弟呼び出しの最適化後にダンプします。

-fdump-rtl-split1
-fdump-rtl-split2
-fdump-rtl-split3
-fdump-rtl-split4
-fdump-rtl-split5
-fdump-rtl-split1, -fdump-rtl-split2, -fdump-rtl-split3, -fdump-rtl-split4 &
-fdump-rtl-split5 XNUMXラウンドの命令分割後にダンプを有効にします。

-fdump-rtl-sms
モジュロスケジューリング後にダンプします。 このパスは、一部のアーキテクチャでのみ実行されます。

-fdump-rtl-スタック
GCCの「フラットレジスタファイル」レジスタからx87レジスタへの変換後にダンプする
スタックのようなレジスタ。 このパスは、x86バリアントでのみ実行されます。

-fdump-rtl-subreg1
-fdump-rtl-subreg2
-fdump-rtl-subreg1 & -fdump-rtl-subreg2 XNUMXつのサブレジスタの後にダンプを有効にする
拡張パス。

-fdump-rtl-unshare
すべてのrtlが共有解除された後にダンプします。

-fdump-rtl-vartrack
変数追跡後にダンプします。

-fdump-rtl-vregs
仮想レジスタをハードレジスタに変換した後にダンプします。

-fdump-rtl-web
ライブレンジ分割後にダンプします。

-fdump-rtl-regclass
-fdump-rtl-subregs_of_mode_init
-fdump-rtl-subregs_of_mode_finish
-fdump-rtl-dfinit
-fdump-rtl-dfinish
これらのダンプは定義されていますが、常に空のファイルを生成します。

-in
-fdump-rtl-all
上記のすべてのダンプを生成します。

-dA アセンブラ出力にその他のデバッグ情報で注釈を付けます。

-dD 通常に加えて、前処理の最後にすべてのマクロ定義をダンプします
出力。

-dH エラーが発生するたびにコアダンプを生成します。

-dp アセンブラの出力に、どのパターンと
代替品が使用されました。 各命令の長さも出力されます。

-dP 各命令の前に、コメントとしてアセンブラ出力にRTLをダンプします。 また
オンになります -dp 注釈。

-dv 他の示されたダンプファイルのそれぞれについて(-fdump-rtl-パス)、ダンプ
VCG で表示するのに適した制御フロー グラフの表現
ファイル.パス.vcg.

-dx 関数をコンパイルする代わりに、関数のRTLを生成するだけです。 通常、
-fdump-rtl-expand.

-fdump-noaddr
デバッグダンプを行うときは、アドレス出力を抑制してください。 これにより、
異なるコンパイラバイナリを使用したコンパイラ呼び出しのダンプのデバッグにdiffを使用する
および/または異なるテキスト/bss/データ/ヒープ/スタック/dsoの開始位置。

-fdump-番号なし
デバッグダンプを行うときは、命令番号とアドレス出力を抑制してください。 これ
でコンパイラ呼び出しのダンプをデバッグする際にdiffを使用することがより実現可能になります
さまざまなオプション、特にありとなし -g.

-fdump-unnumbered-links
デバッグダンプを実行する場合(を参照) -d 上記のオプション)、の命令番号を抑制します
シーケンス内の前の命令と次の命令へのリンク。

-fdump-翻訳単位 (C ++のみ)
-fdump-翻訳ユニット-オプション (C ++のみ)
翻訳ユニット全体のツリー構造の表現をファイルにダンプします。
ファイル名は追加して作成します .tu ソースファイル名に、ファイルは
出力ファイルと同じディレクトリに作成されます。 の場合 -オプション フォームが使用され、
オプション で説明されているように、ダンプの詳細を制御します -fdump ツリー オプション。

-fdump クラス階層 (C ++のみ)
-fdump-クラス階層-オプション (C ++のみ)
各クラスの階層と仮想関数テーブルのレイアウトの表現をにダンプします
ファイル。 ファイル名は追加して作成します 。クラス ソースファイル名、およびファイルに
出力ファイルと同じディレクトリに作成されます。 の場合 -オプション フォームが使用され、
オプション で説明されているように、ダンプの詳細を制御します -fdump ツリー オプション。

-fdump-ipa-スイッチ
プロシージャ間分析言語ツリーのさまざまな段階でのダンプを制御します。
ファイル。 ファイル名は、スイッチ固有のサフィックスをソースに追加することによって生成されます
ファイル名。ファイルは出力ファイルと同じディレクトリに作成されます。 ザ
次のダンプが可能です。

すべてのプロシージャ間分析ダンプを有効にします。

グラフ
コールグラフの最適化、未使用の関数の削除、および
インライン化の決定。

インライン
関数のインライン化後にダンプします。

-fdump-パス
現在のによってオンとオフにされる最適化パスのリストをダンプします
コマンドラインオプション。

-fdump-統計-オプション
別のファイルでのパス統計のダンプを有効にして制御します。 ファイル名は
で終わる接尾辞を追加することによって生成されます 。統計学 ソースファイル名に、そして
ファイルは、出力ファイルと同じディレクトリに作成されます。 の場合 -オプション 形は
中古、 -統計 コンパイル単位全体でカウンターが合計されますが、
-詳細 パスがイベントを生成すると、すべてのイベントがダンプされます。 なしのデフォルト
オプションは、コンパイルされた各関数のカウンターを合計することです。

-fdump-tree-スイッチ
-fdump-tree-スイッチ-オプション
中間言語ツリーの処理のさまざまな段階でダンプを制御して、
ファイル。 ファイル名は、スイッチ固有のサフィックスを
ソースファイル名、ファイルは出力ファイルと同じディレクトリに作成されます。
Status -オプション フォームが使用され、 オプション のリストです - 制御する分離されたオプション
ダンプの詳細。 すべてのオプションがすべてのダンプに適用できるわけではありません。 あるもの
意味がないものは無視されます。 以下のオプションが利用可能です

住所
各ノードのアドレスを出力します。 通常、これは変更されるため意味がありません
環境とソースファイルに応じて。 その主な用途は、
デバッグ環境でファイルをダンプします。

asmname
特定のdeclに「DECL_ASSEMBLER_NAME」が設定されている場合は、それをダンプで使用します
「DECL_NAME」の代わりに。 その主な用途は、
アセンブリファイル内のマングルされた名前。

スリム
スコープのメンバーまたは関数の本体のダンプを単に禁止する
範囲に達しました。 直接到達可能な場合にのみ、そのようなアイテムをダンプします
他のパス。 きれいに印刷されたツリーをダンプする場合、このオプションはダンプを禁止します
制御構造の本体。

ツリーの生の表現を印刷します。 デフォルトでは、木はきれいに印刷されます
Cのような表現。

細部
より詳細なダンプを有効にします (すべてのダンプ オプションで受け入れられるわけではありません)。

統計情報
パスに関するさまざまな統計のダンプを有効にします(すべてのダンプで尊重されるわけではありません)
オプション)。

ブロック
基本ブロック境界の表示を有効にします(rawダンプでは無効)。

VOP
すべてのステートメントの仮想オペランドの表示を有効にします。

リネノ
ステートメントの行番号の表示を有効にします。

UID 各変数の一意のID( "DECL_UID")の表示を有効にします。

詳細
各ステートメントのツリーダンプの表示を有効にします。

eh 各ステートメントを保持しているEHリージョン番号の表示を有効にします。

scev
スカラー進化分析の詳細の表示を有効にします。

を除くすべてのオプションをオンにします , スリム, 詳細 & リネノ.

次のツリーダンプが可能です。

オリジナル
ツリーベースの最適化の前にダンプして、 ファイル.オリジナル.

最適化
すべてのツリーベースの最適化後にダンプし、 ファイル.最適化済み.

ギンプル
gimplificationパスの前後に各関数をファイルにダンプします。 ファイル
名前は追加して作成されます .ギンプル ソースファイル名に。

cfg 各関数の制御フローグラフをファイルにダンプします。 ファイル名はによって作られています
追記 .cfgの ソースファイル名に。

VCG 各関数の制御フロー グラフを VCG 形式のファイルにダンプします。 ファイル
名前は追加して作成されます .vcg ソースファイル名に。 ファイルが
複数の関数が含まれている場合、生成されたファイルを直接使用することはできません
VCG。 各関数のグラフを個別のグラフにカット アンド ペーストする必要があります。
最初にファイルします。

ch ループヘッダーをコピーした後、各関数をダンプします。 ファイル名は追加して作成します
.ch ソースファイル名に。

SSA SSA関連の情報をファイルにダンプします。 ファイル名は追加して作成します .ssa
ソースファイル名に。

alias
各関数のエイリアシング情報をダンプします。 ファイル名は追加して作成します
。エイリアス ソースファイル名に。

CCP CCPの後に各関数をダンプします。 ファイル名は追加して作成します .ccp
ソースファイル名。

ストアCCP
STORE-CCPの後に各関数をダンプします。 ファイル名は追加して作成します .storeccp
ソースファイル名に。

プレ 部分冗長性除去後にツリーをダンプします。 ファイル名はによって作られています
追記 .pre ソースファイル名に。

周波数 完全冗長性除去後にツリーをダンプします。 ファイル名は追加して作成します
.fre ソースファイル名に。

コピープロップ
コピー伝播後にツリーをダンプします。 ファイル名は追加して作成します .copyprop
ソースファイル名に。

ストア_コピープロップ
ストアのコピー伝播後にツリーをダンプします。 ファイル名は追加して作成します
.store_copyprop ソースファイル名に。

DCE デッドコード除去後に各関数をダンプします。 ファイル名はによって作られています
追記 .dce ソースファイル名に。

マッドフラップ
マッドフラップ計測器を追加した後、各関数をダンプします。 ファイル名は
追記 .マッドフラップ ソースファイル名に。

SRA 集計のスカラー置換を実行した後、各関数をダンプします。 ファイル
名前は追加して作成されます .sra ソースファイル名に。

シンク
コードシンクを実行した後、各関数をダンプします。 ファイル名はによって作られています
追記 。シンク ソースファイル名に。

太陽 ドミネーターツリーの最適化を適用した後、各関数をダンプします。 ファイル名は
を追加して作成 .dom ソースファイル名に。

いう デッドストア除去を適用した後、各関数をダンプします。 ファイル名が作成されます
追加することにより .dse ソースファイル名に。

ファイオプト
PHIノードを直線コードに最適化した後、各関数をダンプします。 ファイル
名前は追加して作成されます .phiopt ソースファイル名に。

フォアプロップ
使い捨て変数を順方向に伝播した後、各関数をダンプします。 ファイル名
追加することによって作られています .forwprop ソースファイル名に。

名前のコピー
コピー名前変更の最適化を適用した後、各関数をダンプします。 ファイル名は
を追加して作成 .copyrename ソースファイル名に。

nrv ジェネリックに名前付き戻り値の最適化を適用した後、各関数をダンプします
木。 ファイル名は追加して作成します .nrv ソースファイル名に。

ベクター
ループのベクトル化を適用した後、各関数をダンプします。 ファイル名が作成されます
追加することにより .vect ソースファイル名に。

slp 基本ブロックのベクトル化を適用した後、各関数をダンプします。 ファイル名は
を追加して作成 .slp ソースファイル名に。

VRP 値の範囲の伝播(VRP)の後に各関数をダンプします。 ファイル名はによって作られています
追記 .vrp ソースファイル名に。

このオプションで提供されるフラグを使用して、使用可能なすべてのツリーダンプを有効にします。

-ftree-vectorizer-verbose =n
このオプションは、ベクトライザーが出力するデバッグ出力の量を制御します。 この
情報は標準エラーに書き込まれます。 -fdump-tree-all or -fdump-tree-vect
が指定されている場合、通常のダンプ一覧ファイルに出力されますが、 .vect。 のために
n=0 診断情報は報告されません。 もしも n=1 ベクトライザーは各ループを報告します
ベクトル化されたループの総数と、ベクトル化されたループの総数。 もしも n=2
vectorizer は、最初の解析フェーズを通過したベクトル化されていないループもレポートします
(vect_analyze_loop_form) - つまり、数えられる、最も内側、単一の bb、単一のエントリ/出口
ループします。 これは、 -fdump-tree-vect-stats 使用します。 より高い
詳細レベルは、報告された各ループについてより多くの情報がダンプされるか、または同じであることを意味します。
より多くのループについて報告される情報量: if n=3、ベクトライザー コスト モデル
情報が報告されています。 もしも n=4、アライメント関連の情報が
報告します。 もしも n=5、データ参照関連情報 (例: メモリ依存、メモリ
access-patterns) がレポートに追加されます。 もしも n=6 の場合、ベクトライザーは非
最初の解析フェーズを通過しなかったベクトル化された最も内側のループ (つまり、通過しない可能性がある)
カウント可能であるか、複雑な制御フローを持っている可能性があります)。 もしも n=7、ベクトライザーがレポートします
ベクトル化されていないネストされたループも含まれます。 もしも n=8、SLP 関連の情報が
報告します。 為に n=9、分析中にベクトライザーが生成するすべての情報
と変化が報告されています。 これは、
-fdump-tree-vect-details 使用します。

-frandom-seed =文字列
このオプションは、そうでなければ乱数を使用する場合に GCC が使用するシードを提供します。
毎回異なる必要がある特定のシンボル名を生成するために使用されます
コンパイルされたファイル。 また、カバレッジ データ ファイルに一意のスタンプを配置するためにも使用されます。
それらを生成するオブジェクトファイル。 を使用できます。 -frandom-シード 生成するオプション
再現可能な同一のオブジェクト ファイル。

  文字列 コンパイルするファイルごとに異なる必要があります。

-fsched-verbose =n
命令スケジューリングを使用するターゲットでは、このオプションは
スケジューラーが出力するデバッグ出力。 この情報は標準エラーに書き込まれますが、
ない限り、 -fdump-rtl-sched1 or -fdump-rtl-sched2 が指定されている場合、出力されます
通常のダンプリストファイルに、 .sched1 or .sched2 それぞれ。 ただし、 n
XNUMXより大きい場合、出力は常に標準エラーで出力されます。

n ゼロより大きい、 -fsched-verbose と同じ情報を出力します
-fdump-rtl-sched1 & -fdump-rtl-sched2。 のために n XNUMXより大きい場合は、基本的な出力も行います
ブロック確率、詳細な準備リスト情報、およびユニット/insn情報。 ために n
XNUMXより大きい場合、アボートポイントでのRTL、制御フロー、およびリージョン情報が含まれます。 と
for n XNUMXつ以上、 -fsched-verbose 依存関係情報も含まれます。

-一時保存
-save-temps = cwd
通常の「一時的な」中間ファイルを永続的に保存します。 それらを現在に配置します
ディレクトリを作成し、ソースファイルに基づいて名前を付けます。 したがって、コンパイル foo.c   -c
-一時保存 ファイルを生成します フー・アイ & foo.s、 と同様 ふー。。 これにより、
前処理 フー・アイ コンパイラが通常使用しているにもかかわらず、出力ファイル
統合プリプロセッサ。

と組み合わせて使用​​する場合 -x コマンドラインオプション、 -一時保存 賢明です
と同じ拡張子を持つ入力ソースファイルの上書きを回避するのに十分
中間ファイル。 対応する中間ファイルは、名前を変更することで取得できます
使用する前のソースファイル -一時保存.

GCCを並行して呼び出す場合は、共有するいくつかの異なるソースファイルをコンパイルします。
異なるサブディレクトリの共通ベース名またはコンパイルされた同じソースファイル
複数の出力先の場合、異なる並列コンパイラーは
互いに干渉し、一時ファイルを上書きします。 例えば:

gcc -save-temps -o outdir1 / foo.o indir1 / foo.c&
gcc -save-temps -o outdir2 / foo.o indir2 / foo.c&

結果として フー・アイ & ふー。 両方のコンパイラによって同時に書き込まれます。

-save-temps = obj
通常の「一時的な」中間ファイルを永続的に保存します。 の場合 -o オプションが使用されます、
一時ファイルはオブジェクトファイルに基づいています。 の場合 -o オプションは使用されません、
-save-temps = obj スイッチは次のように動作します -一時保存.

例:

gcc -save-temps = obj -c foo.c
gcc -save-temps = obj -c bar.c -o dir / xbar.o
gcc -save-temps = obj foobar.c -o dir2 / yfoobar

作成します フー・アイ, foo.s, dir / xbar.i, dir / xbar.s, dir2 / yfoobar.i, dir2 / yfoobar.s,
dir2 / yfoobar.o.

-時間[=file]
コンパイルシーケンスの各サブプロセスにかかったCPU時間を報告します。 Cの場合
ソースファイル、これは適切なコンパイラとアセンブラです(さらに、リンクが
終わり)。

出力ファイルを指定しない場合、出力は次のようになります。

#cc1 0.12 0.01
#0.00として

各行の最初の数字は「ユーザー時間」、つまり実行に費やされた時間です。
プログラム自体。 XNUMX番目の数値は「システム時間」であり、操作の実行に費やされた時間です。
プログラムに代わってシステムルーチン。 両方の数値は秒単位です。

出力ファイルの指定により、出力は指定されたファイルに追加されます。
そしてそれはこのように見えます:

0.12 0.01 cc1
0.00 0.01 as

「ユーザー時間」と「システム時間」はプログラム名の前に移動され、
プログラムに渡されたオプションが表示されるので、後でどのファイルがあったかを知ることができます
コンパイルされ、どのオプションで。

-fvar-追跡
変数トラッキングパスを実行します。 変数が各位置に格納されている場所を計算します
コードで。 次に、より適切なデバッグ情報が生成されます(デバッグ情報が
フォーマットはこの情報をサポートします)。

最適化を使用してコンパイルすると、デフォルトで有効になります(-オス, -O, -O2、...)、
デバッグ情報(-g)およびデバッグ情報形式はそれをサポートします。

-fvar-追跡-割り当て
コンパイルの早い段階でユーザー変数への割り当てに注釈を付け、実行を試みます
注釈は、コンパイルの最後まで、試行されます
最適化しながらデバッグ情報を改善します。 の使用 -gdwarf-4 に沿って推奨されます
それと。

var-tracking が無効になっている場合でも有効にすることができます。その場合、注釈は
作成および保守されましたが、最後に破棄されました。

-fvar-tracking-assignments-toggle
トグル -fvar-追跡-割り当て、同じ方法で -グトグル トグル -g.

-print-file-name =ライブラリ
ライブラリファイルの完全な絶対名を出力します ライブラリ それは次の場合に使用されます
リンク---そして他に何もしません。 このオプションを使用すると、GCCはコンパイルまたはリンクしません
なんでも; ファイル名を出力するだけです。

-print-マルチディレクトリ
他のスイッチで選択されたmultilibに対応するディレクトリ名を出力します
コマンドラインに存在します。 このディレクトリはに存在することになっています GCC_EXEC_PREFIX.

-print-multi-lib
multilibディレクトリ名からそれらを有効にするコンパイラスイッチへのマッピングを出力します。
ディレクトリ名は、スイッチから次のように区切られています。 ;、および各スイッチはで始まります
@ その代わりに -、複数のスイッチの間にスペースを入れないでください。 これは
シェル加工を容易にします。

-print-multi-os-directory
選択したmultilibのOSライブラリへのパスをいくつかの相対的なものとして出力します リブ
サブディレクトリ。 OSライブラリがに存在する場合 リブ サブディレクトリがあり、multilibはありません
使用されます、これは通常ちょうどです .、OSライブラリがに存在する場合 ライブラリサフィックス 兄弟
これが印刷するディレクトリ例 ../ lib64, ../ lib or ../ lib32、またはOSライブラリが
に存在する lib / subdir 印刷するサブディレクトリ例: amd64, spacv9 or ev6.

-print-multiarch
選択したマルチアーチのOSライブラリへのパスをいくつかの相対的なものとして出力します リブ
サブディレクトリ。

-print-prog-name =プログラム
いいね -印刷ファイル名、ただし、などのプログラムを検索します cpp.

-print-libgcc-ファイル名
と同じ -print-file-name = libgcc.a.

これは、使用するときに便利です -nostdlib or -nodefaultlibs しかし、あなたはとリンクしたいです
libgcc.a。 できるよ

gcc -nostdlib ... `gcc -print-libgcc-file-name`

-印刷検索ディレクトリ
構成されたインストールディレクトリの名前とプログラムのリストを印刷し、
ライブラリディレクトリ gccの 検索します---そして他には何もしません。

これは次の場合に便利です gccの エラーメッセージを出力します インストール 問題、 exec
cpp0: いいえ そのような file or ディレクトリにジョブを開始します。。 これを解決するには、どちらかを置く必要があります cpp0
他のコンパイラコンポーネント gccの それらを見つけることを期待します、またはあなたは設定することができます
環境変数 GCC_EXEC_PREFIX それらをインストールしたディレクトリに移動します。 しないでください
末尾を忘れる /.

-印刷-sysroot
コンパイル中に使用されるターゲット sysroot ディレクトリを出力します。 これは
構成時に、またはを使用して指定されたターゲットsysroot --sysroot オプション、
コンパイルオプションに依存する追加のサフィックスが付いている可能性があります。 ターゲットがない場合
sysrootが指定されている場合、オプションは何も出力しません。

-print-sysroot-headers-suffix
ヘッダーを検索するときにターゲットsysrootに追加されたサフィックスを出力するか、
コンパイラがそのようなサフィックスで構成されていない場合はエラー---そして何もしません
else。

-ダンプマシン
コンパイラのターゲットマシンを印刷します(たとえば、 i686-pc-linux-gnu)---そしてしないでください
他に何か。

-ダンプバージョン
コンパイラのバージョンを出力します(たとえば、 3.0)---そして他に何もしないでください。

-ダンプスペック
コンパイラの組み込み仕様を印刷します---そして他には何もしません。 (これは次の場合に使用されます
GCC自体が構築されています。)

-felimate-unused-debug-types
通常、DWARF2 出力を生成するとき、GCC はすべてのデバッグ情報を出力します。
コンパイル単位で宣言された型 (実際に宣言されているかどうかに関係なく)
そのコンパイル単位で使用されます。 デバッガーで、
プログラムで実際には使用されていない型に値をキャストしたい (ただし、
宣言されています)。 ただし、多くの場合、これによりかなりの量のスペースが無駄になります。
このオプションを使用すると、GCC は次のタイプのデバッグ シンボル出力を生成することを回避します。
コンパイル中のソースファイルではどこにも使用されていません。

オプション それ 管理 最適化
これらのオプションは、さまざまな種類の最適化を制御します。

最適化オプションがない場合、コンパイラの目標はコンパイルのコストを削減することです
デバッグで期待どおりの結果が得られるようにします。 ステートメントは独立しています:あなたが
ステートメント間のブレークポイントでプログラムを停止すると、新しい値をに割り当てることができます
変数を指定するか、プログラムカウンターを関数内の他のステートメントに変更して、
ソースコードから期待される結果とまったく同じです。

最適化フラグをオンにすると、コンパイラはパフォーマンスの向上やパフォーマンスの向上を試みます。
コンパイル時間と、場合によってはデバッグ機能を犠牲にしてコードサイズ
プログラム。

コンパイラーは、プログラムに関する知識に基づいて最適化を実行します。
複数のファイルを一度に単一の出力ファイルモードにコンパイルすると、コンパイラは次のように使用できます。
各ファイルをコンパイルするときにすべてのファイルから取得した情報。

すべての最適化がフラグによって直接制御されるわけではありません。 を持っている最適化のみ
フラグはこのセクションにリストされています。

ほとんどの最適化は、次の場合にのみ有効になります。 -O レベルはコマンドラインで設定されます。 さもないと
個々の最適化フラグが指定されている場合でも、これらは無効になります。

ターゲットとGCCの構成方法に応じて、わずかに異なるセット
最適化はそれぞれで有効にすることができます -O ここにリストされているものよりもレベル。 GCCを呼び出すことができます
  -Q --help =optimizers で有効になっている最適化の正確なセットを見つけるには
各レベル。

-O
-O1 最適化。 コンパイルの最適化には多少時間がかかり、
大きな関数。

-O、コンパイラは、実行せずにコードサイズと実行時間を削減しようとします
コンパイルに多大な時間を要する最適化。

-O 次の最適化フラグをオンにします。

-fauto-inc-dec -f比較-elim -fcprop-レジスタ -fdce -fdefer-pop -fdelayed-ブランチ
-fdse -fguess-分岐確率 -fif-変換2 -fif-変換 -fipa-pure-const
-fipa-プロファイル -fipa-リファレンス -fmerge-定数 -fsplit-wide-types -ftree-ビット-ccp
-ftree-builtin-call-dce -ftree-ccp -ftree-ch -ftree-copyrename -ftree-dce
-ftree-ドミネーター-opts -ftree-dse -ftree-forwprop -ftree-fre -ftree-phiprop -ftree-sra
-ftree-pta -ftree-ter -一度に一台

-O またオンになります -fomit-フレームポインター そうすることが干渉しないマシンで
デバッグあり。

-O2 さらに最適化します。 GCCは、サポートされているほぼすべての最適化を実行しますが、実行しません
宇宙と速度のトレードオフが伴います。 と比較して -O、このオプションは両方を増やします
コンパイル時間と生成されたコードのパフォーマンス。

-O2 で指定されたすべての最適化フラグをオンにします -O。 また、次をオンにします
最適化フラグ: -fthread-ジャンプ -falign-関数 -falign-ジャンプ -falign-ループ
-falign-ラベル -fcaller-saves -クロスジャンピング -fcse-フォロージャンプ -fcse-スキップ-ブロック
-fdelete-null-pointer-checks -fdevirtualize -高価な最適化 -fgcse
-fgcse-lm -finline-small-functions -findirect-インライン化 -フィパスラ
-foptimize-兄弟呼び出し -部分的なインライン化 -fのぞき穴2 -fregmove -フリーオーダーブロック
-freorder-関数 -frerun-cse-ループ後 -fsched-インターブロック -fsched-spec
-fschedule-insn -fschedule-insns2 -fstrict-エイリアシング -fstrict-オーバーフロー
-ftree-スイッチ変換 -ftree-tail-merge -ftree-pre -ftree-vrp

下の警告に注意してください -fgcse 呼び出しについて -O2 計算を使用するプログラム
ゴトス。

注:Ubuntu 8.10以降のバージョンでは、 -D_FORTIFY_SOURCE = 2 デフォルトで設定されており、
起動すると -O 2以上に設定されています。 これにより、追加のコンパイル時と
いくつかのlibc関数の実行時チェック。 無効にするには、次のいずれかを指定します
-U_FORTIFY_SOURCE or -D_FORTIFY_SOURCE = 0.

-O3 さらに最適化します。 -O3 で指定されたすべての最適化をオンにします -O2 また、オンになります
  -finline-関数, -funswitch-ループ, -fpredictive-commoning, -fgcse-アフターリロード,
-ftree-ベクトル化, -ftree-部分-pre & -fipa-cp-クローン オプション。

-O0 コンパイル時間を短縮し、デバッグで期待どおりの結果が得られるようにします。 これは
デフォルト。

-オス サイズを最適化します。 -オス すべてを有効にします -O2 通常は増加しない最適化
コードサイズ。 また、コードサイズを削減するように設計されたさらなる最適化も実行します。

-オス 次の最適化フラグを無効にします。 -falign-関数 -falign-ジャンプ
-falign-ループ -falign-ラベル -フリーオーダーブロック -freeorder-blocks-and-partition
-fprefetch-ループ配列 -ftree-vect-loop-version

-オーファスト
厳格な規格への準拠は無視してください。 -オーファスト すべてを有効にします -O3 最適化。 また
すべての標準準拠プログラムに有効ではない最適化を有効にします。 それ
オンになります -ffast-数学 およびFortran固有 -fno-protect-parens & -fstack-配列.

複数使用する場合 -O オプション、レベル番号の有無にかかわらず、最後のそのようなオプションは
効果的なもの。

フォームのオプション -fフラグ マシンに依存しないフラグを指定します。 ほとんどのフラグには両方があります
ポジティブフォームとネガティブフォーム。 の負の形式 -ふふー になる -fno-foo。 表の中で
以下では、通常使用するフォームの XNUMX つだけをリストします。 あなたは理解することができます
削除することにより、他のフォームから NO- またはそれを追加します。

次のオプションは、特定の最適化を制御します。 それらはどちらかによってアクティブ化されます -O
オプションまたはあるものに関連しています。 まれに次のフラグを使用できます
実行する最適化の「微調整」が必要な場合。

-fno-デフォルト-インライン
内部で定義されているという理由だけで、メンバー関数をデフォルトでインライン化しないでください
クラス スコープ (C++ のみ)。 それ以外の場合は、指定するときに -O、メンバー関数の定義
クラススコープ内では、デフォルトでインラインでコンパイルされます。 つまり、追加する必要はありません インライン
メンバー関数名の前に。

-fno-defer-pop
その関数が戻るとすぐに、常に各関数呼び出しの引数をポップします。 にとって
関数呼び出しの後に引数をポップする必要があるマシンでは、コンパイラは通常、
引数は、いくつかの関数呼び出しのためにスタックに蓄積され、それらすべてを次の場所にポップします。
一度。

レベルで無効 -O, -O2, -O3, -オス.

-前方伝播
RTLで順方向伝搬パスを実行します。 パスはXNUMXつの命令を組み合わせようとします
結果を簡略化できるかどうかを確認します。 ループ展開がアクティブな場合、XNUMXつのパス
が実行され、XNUMX番目はループ展開後にスケジュールされます。

このオプションは、最適化レベルでデフォルトで有効になっています -O, -O2, -O3, -オス.

-ffp-contract =
-ffp-contract = off 浮動小数点式の縮小を無効にします。 -ffp-contract = fast
融合乗算加算の形成などの浮動小数点式の縮小を可能にします
ターゲットがネイティブサポートを持っている場合の操作。 -ffp-contract = on 可能
言語標準で許可されている場合は、浮動小数点式の縮小。 これは
現在実装されておらず、同等に扱われています -ffp-contract = off.

デフォルトは -ffp-contract = fast.

-fomit-フレームポインター
フレームポインタを必要としない関数のレジスタにフレームポインタを保持しないでください。 これ
フレームポインタを保存、設定、復元する手順を回避します。 それはまた
多くの機能で利用可能な追加のレジスタ。 It また MAKES デバッギング 不可能 on
一部 マシン。

VAXなどの一部のマシンでは、標準であるため、このフラグは効果がありません。
呼び出しシーケンスは自動的にフレームポインタを処理し、何も保存されません
存在しないふりをします。 マシン記述マクロ「FRAME_POINTER_REQUIRED」
ターゲットマシンがこのフラグをサポートするかどうかを制御します。

GCCバージョン4.6以降、デフォルト設定(サイズを最適化していない場合)
32 ビット Linux x86 および 32 ビット Darwin x86 ターゲットは、
-fomit-フレームポインター。 デフォルトに戻すことができます -fno-省略フレームポインタ by
でGCCを構成する --有効フレームポインタ オプションを構成します。

レベルで有効 -O, -O2, -O3, -オス.

-foptimize-兄弟呼び出し
兄弟呼び出しと末尾再帰呼び出しを最適化します。

レベルで有効 -O2, -O3, -オス.

-fno-インライン
「always_inline」でマークされた関数以外の関数をインライン展開しないでください
属性。 これは、最適化しない場合のデフォルトです。

単一の関数を「noinline」でマークすることにより、インライン化を免除できます。
属性。

-finline-small-functions
体が予想よりも小さい場合は、呼び出し元に関数を統合します
関数呼び出しコード(したがって、プログラムの全体的なサイズは小さくなります)。 コンパイラ
統合する価値があるほど単純な関数をヒューリスティックに決定します
こちらです。 このインライン化は、インラインで宣言されていない関数も含め、すべての関数に適用されます。

レベルで有効 -O2.

-findirect-インライン化
インラインも、コンパイル時に既知であることが判明した間接呼び出しのおかげで
前のインライン化。 このオプションは、インライン化自体がオンになっている場合にのみ効果があります
を通じて、タンピングされたコーヒーベッドの上から均一にフィルターバスケットの内の粉に浸透していきます。 -finline-関数 or -finline-small-functions オプション。

レベルで有効 -O2.

-finline-関数
インラインとして宣言されていない場合でも、インライン化するためのすべての関数を検討してください。 The
コンパイラーは、この方法で統合する価値のある関数をヒューリスティックに決定します。

特定の関数へのすべての呼び出しが統合され、関数が宣言されている場合
「静的」の場合、関数は通常、それ自体でアセンブラコードとして出力されません。

レベルで有効 -O3.

-finline-functions-call-once
呼び出し元にインライン化するために一度呼び出されるすべての「静的」関数を考慮してください。
それらは「インライン」とマークされていません。 特定の関数の呼び出しが統合されている場合、
関数は、それ自体ではアセンブラコードとして出力されません。

レベルで有効 -O1, -O2, -O3 & -オス.

-恐ろしくインライン化
「always_inline」でマークされたインライン関数と、本体が
実行する前の早い段階で関数呼び出しのオーバーヘッド -fprofile-generate 計装と
実際のインラインパス。 そうすることで、プロファイリングが大幅に安くなり、通常は
ネストされたラッパー関数の大きなチェーンを持つプログラムでは、より高速にインライン化できます。

デフォルトで有効になっています。

-フィパスラ
集計の手続き間スカラー置換、未使用のパラメーターの削除を実行します
参照によって渡されたパラメーターを値によって渡されたパラメーターに置き換える。

レベルで有効 -O2, -O3 & -オス.

-finline-limit =n
デフォルトでは、GCCはインライン化できる関数のサイズを制限します。 このフラグにより​​、
この制限の大まかな制御。 n インライン化できる関数のサイズです
疑似命令の数。

インライン化は、実際には、指定できるいくつかのパラメーターによって制御されます。
を使用して個別に --パラメータ =を選択します。 -finline-limit =n オプションはいくつかを設定します
これらのパラメータは次のとおりです。

max-inline-insn-single
に設定されています n/ 2。

max-inline-insns-auto
に設定されています n/ 2。

インライン化とインライン化を制御する個々のパラメーターのドキュメントについては、以下を参照してください。
これらのパラメータのデフォルトについて。

注: 価値がないかもしれません -finline 制限 その結果、デフォルトの動作になります。

注: 疑似命令は、この特定のコンテキストでは、抽象を表します
関数のサイズの測定。 決してアセンブリの数を表すものではありません
指示など、その正確な意味はXNUMXつのリリースから
別。

-fno-keep-inline-dllexport
これは、よりきめ細かいバージョンです。 -fkeep-インライン関数、これはにのみ適用されます
「dllexport」属性またはdeclspecを使用して宣言された関数

-fkeep-インライン関数
Cでは、「インライン」と宣言された「静的」関数をオブジェクトファイルに出力します。
関数はすべての呼び出し元にインライン化されています。 このスイッチは影響しません
GNUC90の「externinline」拡張を使用する関数。 C ++では、すべてを放出します
オブジェクトファイルへのインライン関数。

-fkeep-static-consts
最適化がオンになっていない場合でも、「staticconst」と宣言された変数を出力します。
変数は参照されません。

GCC はデフォルトでこのオプションを有効にします。 コンパイラに強制的にチェックさせたい場合は、
変数が参照された場合、最適化がオンになっているかどうかに関係なく、
  -fno-keep-static-consts オプションを選択します。

-fmerge-定数
同一の定数(文字列定数と浮動小数点定数)のマージを試みます
コンパイルユニット間。

このオプションは、アセンブラーとリンカーが最適化されたコンパイルのデフォルトです。
それをサポートします。 使用する -fno-merge-定数 この動作を禁止します。

レベルで有効 -O, -O2, -O3, -オス.

-fmerge-all-constants
同一の定数と同一の変数をマージしてみてください。

このオプションは、 -fmerge-定数。 に加えて -fmerge-定数 この
たとえば、定数で初期化された配列または初期化された定数変数でさえ考慮します
整数型または浮動小数点型。 CやC++のような言語には、各変数が必要です。
再帰呼び出しに同じ変数の複数のインスタンスを含めて、区別する
そのため、このオプションを使用すると、非準拠の動作が発生します。

-fmodulo-sched
最初のスケジューリングパスの直前にスイングモジュロスケジューリングを実行します。 これ
passは最も内側のループを調べ、異なるものをオーバーラップさせることによってそれらの命令を並べ替えます
反復。

-fmodulo-sched-allow-regmoves
レジスタの移動を許可して、より積極的な SMS ベースのモジュロ スケジューリングを実行します。 沿って
このフラグを設定すると、特定の反依存エッジが削除され、トリガーされます
寿命範囲分析に基づくreg-movesの生成。 このオプションは
のみ有効 -fmodulo-sched 有効になりました。

-fno-分岐数-reg
カウントレジスタで「デクリメントと分岐」命令を使用せず、代わりに
レジスタをデクリメントする一連の命令を生成し、それと比較します
ゼロの場合、結果に基づいて分岐します。 このオプションは、
x86、PowerPC、IA-64、および
S / 390。

デフォルトは -fbranch-count-reg.

-fno-function-cse
関数アドレスをレジスタに入れないでください。 を呼び出す各命令を作成します
定数関数には、関数のアドレスが明示的に含まれています。

このオプションを使用すると、コードの効率が低下しますが、
アセンブラの出力は、このオプションが次の場合に実行される最適化によって混乱する可能性があります。
使用されていない。

デフォルトは -ffunction-cse

-fno-zero-in-bss で初期化
ターゲットがBSSセクションをサポートしている場合、GCCはデフォルトで次の変数を配置します。
BSSにゼロに初期化されます。 これにより、結果のコードのスペースを節約できます。

一部のプログラムは変数に明示的に依存しているため、このオプションはこの動作をオフにします
データセクションに移動します。 たとえば、結果の実行可能ファイルが
そのセクションの始まりおよび/またはそれに基づいて仮定を立てます。

デフォルトは -fzero-bss で初期化.

-fマッドフラップ -fマッドフラップス -fmudflapir
それをサポートするフロントエンド (C および C++) の場合、すべての危険なポインター/配列をインストルメント化します。
逆参照操作、一部の標準ライブラリ文字列/ヒープ関数、およびその他の一部
範囲/有効性テストに関連する構造。 そのようにインストルメント化されたモジュールは、
バッファ オーバーフロー、無効なヒープの使用、その他の C/C++ クラスの影響を受けない
プログラミング エラー。 インストルメンテーションは別のランタイム ライブラリに依存しています
(リブマッドフラップ)、場合にプログラムにリンクされます -fマッドフラップ リンク時に提供されます。
インストルメント化されたプログラムの実行時の動作は、 マッドフラップ_オプション
環境変数。 オプションについては、「env MUDFLAP_OPTIONS=-help a.out」を参照してください。

  -fマッドフラップス -fマッドフラップ プログラムが複数の場合にコンパイルおよびリンクする
ねじ込みます。 使用する -fmudflapir、 に加えて -fマッドフラップ or -fマッドフラップス、もし
インストルメンテーションはポインター読み取りを無視する必要があります。 これにより、インストルメンテーションが少なくなります (そして
したがって、実行が高速になります)、完全なメモリに対する保護を提供します
書き込みを破損しますが、誤って読み取られたデータがプログラム内で伝播することを許可します。

-fthread-ジャンプ
ジャンプが次の場所に分岐するかどうかを確認する最適化を実行します。
最初の比較に含まれる別の比較が見つかります。 その場合、最初のブランチは
XNUMX 番目のブランチの宛先またはポイントのいずれかにすぐにリダイレクトされます
条件が真であるか偽であるかに応じて、それに従います。

レベルで有効 -O2, -O3, -オス.

-fsplit-wide-types
32ビットの「longlong」など、複数のレジスタを占有するタイプを使用する場合
システムでは、レジスタを分割して個別に割り当てます。 これは通常
これらのタイプに対してより適切なコードを生成しますが、デバッグがより困難になる可能性があります。

レベルで有効 -O, -O2, -O3, -オス.

-fcse-フォロージャンプ
共通部分式除去(CSE)では、次の場合にジャンプ命令をスキャンします。
ジャンプのターゲットは、他のパスでは到達しません。 たとえば、CSEが遭遇したとき
"else" 句を含む "if" ステートメントの場合、CSE は条件が満たされたときにジャンプします。
テスト済みはfalseです。

レベルで有効 -O2, -O3, -オス.

-fcse-スキップ-ブロック
これは -fcse-フォロージャンプ、ただし、CSEはジャンプを追跡します。
条件付きでブロックをスキップします。 CSEが単純な「if」ステートメントに遭遇したとき
else節、 -fcse-スキップ-ブロック CSEが本体の周りのジャンプを追跡するようにします
"もしも"。

レベルで有効 -O2, -O3, -オス.

-frerun-cse-ループ後
ループの最適化が実行された後、共通部分式の削除を再実行します。

レベルで有効 -O2, -O3, -オス.

-fgcse
グローバル共通部分式除去パスを実行します。 このパスも実行します
グローバル定数とコピー伝播。

注: GCC拡張機能である計算されたgotoを使用してプログラムをコンパイルすると、次のようになります。
グローバル共通部分式除去を無効にすると、実行時のパフォーマンスが向上します
追加して渡す -fno-gcse コマンドラインに。

レベルで有効 -O2, -O3, -オス.

-fgcse-lm
日時 -fgcse-lm が有効になっている場合、グローバルな共通部分式の削除が試みられます。
ストアによってのみ殺されるロードをそれ自体に移動します。 これにより、ループが可能になります
ループ外のロードに変更されるロード/ストア シーケンスを含み、
ループ内でコピー/保存します。

gcse が有効な場合、デフォルトで有効になります。

-fgcse-sm
日時 -fgcse-sm が有効になっている場合、ストアモーションパスはグローバルコモンの後に実行されます
部分式の削除。 このパスは、ストアをループの外に移動しようとします。 いつ
と組み合わせて使用 -fgcse-lm、ロード/ストア シーケンスを含むループは、
ループ前にロード、ループ後にストアに変更。

どの最適化レベルでも有効になっていません。

-fgcse-ラス
日時 -fgcse-ラス が有効になっている場合、グローバル共通部分式除去パス
同じメモリ位置(両方)に格納された後に発生する冗長な負荷を排除します
部分的および完全な冗長性)。

どの最適化レベルでも有効になっていません。

-fgcse-アフターリロード
日時 -fgcse-アフターリロード が有効になっている場合、冗長負荷除去パスが実行されます
リロード後。 このパスの目的は、冗長なこぼれをクリーンアップすることです。

-funsafe ループの最適化
指定された場合、ループ オプティマイザはループ インデックスがオーバーフローしないと想定し、
自明でない終了条件を持つループは無限ではありません。 これにより、より広い範囲が可能になります
ループ オプティマイザー自体がこれらを証明できない場合でも、ループ最適化の
仮定は有効です。 使用する -Wunsafe ループの最適化、コンパイラは警告します
この種のループが見つかった場合。

-クロスジャンピング
クロスジャンプ変換を実行します。 この変換により、同等のコードと
コードサイズを節約します。 結果として得られるコードは、クロスを使用しない場合よりもパフォーマンスが向上する場合もあれば、そうでない場合もあります。
ジャンピング。

レベルで有効 -O2, -O3, -オス.

-fauto-inc-dec
アドレスの増分または減分をメモリアクセスと組み合わせます。 このパスは
これをサポートするための指示がないアーキテクチャでは常にスキップされます。
デフォルトで有効になっています -O これをサポートするアーキテクチャではそれ以上です。

-fdce
RTLでデッドコード除去(DCE)を実行します。 デフォルトで有効になっています -O そしてより高い。

-fdse
RTLでデッドストア除去(DSE)を実行します。 デフォルトで有効になっています -O そしてより高い。

-fif-変換
条件付きジャンプを分岐のない同等のものに変換しようとします。 これには使用が含まれます
条件付き移動、最小、最大、フラグと abs の設定命令、および実行可能ないくつかのトリックの
標準的な算術によって。 チップ上での条件付き実行の使用
利用可能は「if-conversion2」によって制御されます。

レベルで有効 -O, -O2, -O3, -オス.

-fif-変換2
条件付き実行(利用可能な場合)を使用して、条件付きジャンプをに変換します
ブランチレスの同等物。

レベルで有効 -O, -O2, -O3, -オス.

-fdelete-null-pointer-checks
プログラムがnullポインターを安全に逆参照できず、コードやデータがないと仮定します。
要素はそこにあります。 これにより、単純な定数畳み込みの最適化が可能になります。
最適化レベル。 さらに、GCCの他の最適化パスは、このフラグを使用して
nullポインタの無駄なチェックを排除するグローバルデータフロー分析を制御します。
これらは、ポインタがすでに逆参照された後にチェックされた場合、
nullにすることはできません。

ただし、一部の環境では、この仮定は正しくないことに注意してください。 使用する
-fno-delete-null-pointer-checks 依存するプログラムに対してこの最適化を無効にする
その振る舞いについて。

一部のターゲット、特に埋め込みターゲットでは、すべてのレベルでこのオプションが無効になっています。 さもないと
すべてのレベルで有効になっています。 -O0, -O1, -O2, -O3, -オス。 情報を使用するパス
さまざまな最適化レベルで個別に有効になります。

-fdevirtualize
呼び出しを仮想関数から直接呼び出しに変換してみてください。 これは両方で行われます
プロシージャ内および間接インライン化の一部としてのプロシージャ間
("-findirect-inlining")および手続き間定数伝播(-fipa-cp)。 有効
レベルで -O2, -O3, -オス.

-高価な最適化
比較的費用のかかるいくつかのマイナーな最適化を実行します。

レベルで有効 -O2, -O3, -オス.

フリー
冗長な拡張命令を削除してみてください。 これは特に役立ちます
後に 86 ビット レジスタで暗黙的にゼロ拡張する x64-64 アーキテクチャ
下半分の32ビットに書き込みます。

レベルでx86に対して有効 -O2, -O3.

-foptimize-登録-移動
-fregmove
移動命令で、および他の命令のオペランドとして、レジスタ番号を再割り当てしようとしています。
レジスタ結合の量を最大化するための簡単な命令。 これは
XNUMX オペランド命令のマシンで特に役立ちます。

Note -fregmove & -foptimize-登録-移動 同じ最適化です。

レベルで有効 -O2, -O3, -オス.

-fira-algorithm =アルゴリズム
統合レジスタアロケータに指定されたカラーリングアルゴリズムを使用します。 The
アルゴリズム 引数は 優先順位、Chowの優先色付けを指定する、または CB,
Chaitin-Briggsのカラーリングを指定します。 Chaitin-Briggsのカラーリングは実装されていません
すべてのアーキテクチャで、ただしそれをサポートするターゲットでは、これがデフォルトです
より良いコードを生成するからです。

-fira-region =地域
統合レジスタアロケータに指定された領域を使用します。 The 地域 引数
次のいずれかになります。

すべてのループをレジスタ割り当て領域として使用します。 これにより、次の場合に最良の結果が得られます。
小さなおよび/または不規則なレジスタセットを備えたマシン。

混合
領域としてレジスタ圧力が小さいループを除くすべてのループを使用します。 これ
値は通常、ほとんどの場合、ほとんどのアーキテクチャで最良の結果をもたらします。
速度の最適化を使用してコンパイルする場合、デフォルトで有効になっています(-O, -O2、...)。

XNUMXつ すべての機能を単一の領域として使用します。 これにより、通常、コードが最小になります
サイズであり、デフォルトで有効になっています -オス or -O0.

-フィラループ圧力
IRAを使用して、ループ不変条件を移動する決定のためにループ内のレジスタ圧力を評価します。
このオプションを使用すると、通常、次のマシンでより高速で小さなコードが生成されます。
大きなレジスタファイル(> = 32レジスタ)ですが、コンパイラの速度が低下する可能性があります。

このオプションはレベルで有効になっています -O3 一部のターゲットの場合。

-fno-ira-share-save-slots
通話で使用されるハードレジスタを保存するために使用されるスタックスロットの共有を無効にします。
呼び出し。 各ハードレジスタは個別のスタックスロットを取得し、その結果、関数スタックを取得します
フレームが大きくなります。

-fno-ira-share-spill-slots
疑似レジスタに割り当てられたスタックスロットの共有を無効にします。 各疑似レジスタ
ハードレジスタを取得しない場合は、別のスタックスロットを取得し、その結果、関数
スタックフレームが大きくなります。

-fira-verbose =n
統合レジスタアロケータのダンプファイルの詳細度を制御します。 ザ
デフォルト値は5です。値が n 10以上の場合、ダンプ出力が送信されます
と同じ形式を使用してstderrに n マイナス10。

-fdelayed-ブランチ
ターゲットマシンでサポートされている場合は、悪用する命令を並べ替えてみてください
遅延分岐命令の後に使用可能な命令スロット。

レベルで有効 -O, -O2, -O3, -オス.

-fschedule-insn
ターゲットマシンでサポートされている場合は、命令を並べ替えて削除してみてください
必要なデータが利用できないため、実行が停止します。 これは、
他の命令に次のことを許可することにより、浮動小数点またはメモリロード命令が遅くなります
ロードまたは浮動小数点命令の結果が必要になるまで発行されます。

レベルで有効 -O2, -O3.

-fschedule-insns2
そして -fschedule-insn、ただし、命令スケジューリングの追加パスを要求します
レジスタ割り当てが行われた後。 これは、
レジスタの数が比較的少なく、メモリロード命令が
XNUMXサイクル。

レベルで有効 -O2, -O3, -オス.

-fno-sched-interblock
基本ブロック全体で命令をスケジュールしないでください。 これは通常、デフォルトで有効になっています
レジスタ割り当ての前にスケジューリングする場合、つまり -fschedule-insn またはで -O2 or
高いです。

-fno-sched-spec
非ロード命令の投機的な動きを許可しないでください。 これは通常、によって有効になります
レジスタ割り当ての前にスケジューリングするときのデフォルト、つまり -fschedule-insn またはで
-O2 以上です。

-fsched-圧力
レジスター割り当ての前に、レジスター圧力に敏感な insn スケジューリングを有効にします。
これは、レジスタ割り当てが有効になる前にスケジューリングする場合にのみ意味があります。
-fschedule-insn またはで -O2 以上。 このオプションを使用すると、生成されたものを改善できます
レジスタ圧力が数値を超えて増加するのを防ぐことにより、コードを作成してサイズを小さくします
利用可能なハードレジスタの数と、結果としてレジスタがレジスタにスピルする
割り当て。

-fsched-spec-load
一部のロード命令の投機的な動きを許可します。 これは、次の場合にのみ意味があります
レジスタ割り当て前のスケジューリング、つまり -fschedule-insn またはで -O2 以上です。

-fsched-spec-load-dangerous
より多くのロード命令の投機的な動きを許可します。 これは、次の場合にのみ意味があります
レジスタ割り当て前のスケジューリング、つまり -fschedule-insn またはで -O2 以上です。

-fsched-stalled-insn
-fsched-stalled-insns =n
停止したキューから時期尚早に移動できるinsn(存在する場合)の数を定義します
XNUMX 番目のスケジューリング パス中に、insns を準備完了リストに追加します。
-fno-sched-stalled-insn 時期尚早に移動するインはありません。
-fsched-stalled-insns = 0 キューに入れられた insn を移動できる数に制限がないことを意味します
時期尚早です。 -fsched-stalled-insn 値なしはと同等です
-fsched-stalled-insns = 1.

-fsched-stalled-insns-dep
-fsched-stalled-insns-dep =n
ストールされたサーバーへの依存関係について調べる insn グループ (サイクル) の数を定義します。
停止した insn のキューから時期尚早に削除される候補である insn。 この
XNUMX 番目のスケジューリング パス中にのみ効果があります。
-fsched-stalled-insn 使用されている。 -fno-sched-stalled-insns-dep に相当します
-fsched-stalled-insns-dep = 0. -fsched-stalled-insns-dep 値なしは同等です
〜へ -fsched-stalled-insns-dep = 1.

-fsched2-use-スーパーブロック
レジスタ割り当て後にスケジューリングする場合は、スーパーブロック スケジューリング アルゴリズムを使用してください。
スーパーブロックのスケジューリングにより、基本ブロックの境界を越えたモーションが可能になり、結果としてより高速になります
スケジュール。 このオプションは実験的なものであり、GCC で使用されるすべてのマシンの説明ではありません。
アルゴリズムからの信頼できない結果を回避するために、CPU を十分に綿密にモデル化します。

これは、レジスタ割り当て後にスケジューリングする場合にのみ意味があります。
-fschedule-insns2 またはで -O2 以上です。

-fsched-group-ヒューリスティック
スケジューラでグループヒューリスティックを有効にします。 このヒューリスティックは命令を支持します
スケジュールグループに属します。 スケジューリングが次の場合、これはデフォルトで有効になっています
有効、つまり -fschedule-insn or -fschedule-insns2 またはで -O2 以上です。

-fsched-クリティカルパス-ヒューリスティック
スケジューラでクリティカルパスヒューリスティックを有効にします。 このヒューリスティックな好意
クリティカルパスに関する指示。 スケジューリングが次の場合、これはデフォルトで有効になっています
有効、つまり -fschedule-insn or -fschedule-insns2 またはで -O2 以上です。

-fsched-spec-insn-ヒューリスティック
スケジューラで投機的命令ヒューリスティックを有効にします。 このヒューリスティックな好意
依存関係の弱点が大きい投機的命令。 これはデフォルトで有効になっています
スケジューリングが有効になっている場合、つまり -fschedule-insn or -fschedule-insns2 またはで -O2
以上です。

-fsched-rank-ヒューリスティック
スケジューラでランクヒューリスティックを有効にします。 このヒューリスティックは命令を支持します
より大きなサイズまたは頻度の基本ブロックに属します。 これはデフォルトで有効になっています
スケジューリングが有効になっている場合、つまり -fschedule-insn or -fschedule-insns2 またはで -O2
以上です。

-fsched-last-insn-ヒューリスティック
スケジューラーで最後の命令のヒューリスティックを有効にします。 このヒューリスティックは
スケジュールされた最後の命令にあまり依存しない命令。 これは有効です
デフォルトでは、スケジューリングが有効になっている場合、つまり -fschedule-insn or -fschedule-insns2
またはで -O2 以上です。

-fsched-dep-count-ヒューリスティック
スケジューラーで従属カウントヒューリスティックを有効にします。 このヒューリスティックは
それに応じてより多くの命令がある命令。 これはデフォルトで有効になっています
スケジューリングが有効になっている場合、つまり -fschedule-insn or -fschedule-insns2 またはで -O2
以上です。

-freschedule-modulo-scheduled-loops
モジュロ スケジューリングは、ループがモジュロの場合、従来のスケジューリングの前に行われます。
後でスケジュール パスが変更されるのを防ぎたい場合があります。
このオプションを使用してそれを制御します。

-選択的スケジューリング
選択的スケジューリングアルゴリズムを使用して命令をスケジュールします。 選択的スケジューリングの実行
最初のスケジューラパスの代わりに。

-f選択的スケジューリング2
選択的スケジューリングアルゴリズムを使用して命令をスケジュールします。 選択的スケジューリングの実行
XNUMX番目のスケジューラパスの代わりに。

-fsel-sched-パイプライン
選択的スケジューリング中に最も内側のループのソフトウェアパイプラインを有効にします。 これ
オプションは、次のいずれかになるまで効果がありません -選択的スケジューリング or -f選択的スケジューリング2 is
オン。

-fsel-sched-pipelining-outer-loops
選択的スケジューリング中にループをパイプライン化する場合は、外部ループもパイプライン化します。 これ
オプションは、 -fsel-sched-パイプライン オンになっています。

-fshrink-wrap
関数プロローグを必要とする関数の部分の前でのみ、関数プロローグを発行します。
関数の上部。 このフラグは、デフォルトで有効になっています。 -O そしてより高い。

-fcaller-saves
関数呼び出しによって上書きされるレジスタに値を割り当てることができるようにします。
そのような呼び出しの周りのレジスタを保存および復元するための追加の命令を発行することによって。
このような割り当ては、より良いコードになると思われる場合にのみ行われます。
それ以外の場合は生産されます。

このオプションは、特定のマシン、通常は
代わりに使用する呼び出し保存レジスタはありません。

レベルで有効 -O2, -O3, -オス.

-fcombine-stack-adjustments
スタック調整(プッシュとポップ)を追跡し、メモリ参照をスタックしてから試行します
それらを組み合わせる方法を見つけるために。

デフォルトで有効になっています -O1 そしてより高い。

-fconserve-スタック
スタックの使用を最小限に抑えます。 コンパイラは使用するスタック スペースを少なくしようとします。
それがプログラムを遅くしたとしても。 このオプションは、 ラージスタック
フレーム パラメータを100に設定し、 ラージスタックフレームの成長 パラメータを400に設定します。

-ftree-reassoc
木の再関連付けを実行します。 このフラグは、デフォルトで有効になっています。 -O そしてより高い。

-ftree-pre
ツリーで部分冗長性除去(PRE)を実行します。 このフラグはによって有効になります
デフォルトで -O2 & -O3.

-ftree-部分-pre
部分冗長性除去(PRE)をより積極的にします。 このフラグはによって有効になります
デフォルトで -O3.

-ftree-forwprop
木の順方向伝播を実行します。 このフラグは、デフォルトで有効になっています。 -O &
高いです。

-ftree-fre
ツリーで完全冗長性除去(FRE)を実行します。 FREとの違い
PREは、FREは、につながるすべてのパスで計算された式のみを考慮するということです。
冗長な計算。 この分析はPREよりも高速ですが、公開されるのは少なくなります
冗長性。 このフラグは、デフォルトで有効になっています。 -O そしてより高い。

-ftree-phiprop
ツリーの条件付きポインタから負荷の巻き上げを実行します。 このパスはによって有効になります
デフォルトで -O そしてより高い。

-ftree-コピー-プロップ
ツリーでコピー伝播を実行します。 このパスにより、不要なコピー操作が排除されます。
このフラグは、デフォルトで有効になっています。 -O そしてより高い。

-fipa-pure-const
どの関数が純粋であるか定数であるかを発見します。 デフォルトで有効になっています -O そしてより高い。

-fipa-リファレンス
エスケープしない静的変数のうち、コンパイル単位をエスケープできないものを見つけます。
デフォルトで有効になっています -O そしてより高い。

-fipa-pta
手続き間ポインタ分析と手続き間修正を実行し、
参照分析。 このオプションを使用すると、メモリとコンパイル時の使用量が過剰になる可能性があります。
大きなコンパイルユニット。 どの最適化レベルでも、デフォルトでは有効になっていません。

-fipa-プロファイル
手続き間プロファイルの伝播を実行します。 寒さからのみ呼び出される関数
関数はコールドとしてマークされます。 また、XNUMX回実行される関数(「コールド」など)
「noreturn」、静的コンストラクタまたはデストラクタ)が識別されます。 コールド機能と
一度実行された関数のループの少ない部分は、サイズが最適化されます。 によって可能になります
デフォルトで -O そしてより高い。

-fipa-cp
手続き間定数伝播を実行します。 この最適化はプログラムを分析します
関数に渡される値が定数であるかどうかを判断し、最適化する
によると。 この最適化により、パフォーマンスが大幅に向上する可能性があります。
アプリケーションには、関数に渡される定数があります。 このフラグは、デフォルトで有効になっています。
-O2, -オス & -O3.

-fipa-cp-クローン
関数の複製を実行して、手続き間の定数の伝播を強化します。 いつ
有効にすると、手続き間の定数の伝播は、次の場合に関数のクローン作成を実行します
外部から見える関数は、定数引数を使用して呼び出すことができます。 これは
最適化により、関数の複数のコピーが作成される可能性があり、大幅に増加する可能性があります
コードサイズ(を参照) --パラメータ ipcp-unit-growth =)。 このフラグは、デフォルトで有効になっています。
-O3.

-fipa-マトリックス-reorg
行列の平坦化と転置を実行します。 行列の平坦化は、
m 次元の行列と、それに相当する n 次元の行列 (n < m)。 この
行列の要素にアクセスするために必要な間接的なレベルを減らします。 の
XNUMX 番目の最適化は、行列の転置です。
キャッシュの局所性を改善するためのマトリックスの次元。 どちらの最適化にも
-fwhole-プログラム 国旗。 プロファイリング情報が
にアクセスできるようにしています。

-ftree-シンク
木の前方ストアモーションを実行します。 このフラグは、デフォルトで有効になっています。 -O &
高いです。

-ftree-ビット-ccp
ツリーでスパース条件付きビット定数の伝播を実行し、ポインターを伝播します
アラインメント情報。 このパスはローカルスカラー変数でのみ機能し、
デフォルトで有効になっています -O 以上。 それはそれを必要とします -ftree-ccp 有効になっています。

-ftree-ccp
ツリーに対してスパース条件分岐伝播(CCP)を実行します。 このパスのみ
ローカルスカラー変数で動作し、デフォルトで有効になっています。 -O そしてより高い。

-ftree-スイッチ変換
スイッチの単純な初期化から初期化への変換を実行します
スカラー配列。 このフラグは、デフォルトで有効になっています。 -O2 そしてより高い。

-ftree-tail-merge
同一のコードシーケンスを探します。 見つかったら、一方をもう一方へのジャンプに置き換えます。
この最適化は、テールマージまたはクロスジャンプとして知られています。 このフラグはによって有効になります
デフォルトで -O2 以上。 このパスのコンパイル時間は、次を使用して制限できます。
最大末尾マージ比較 パラメータと 最大末尾マージ反復数 パラメータに一致する最初のデバイスのリモートコントロール URL を返します。

-ftree-dce
ツリーでデッドコード除去(DCE)を実行します。 このフラグは、デフォルトで有効になっています。 -O
そしてより高い。

-ftree-builtin-call-dce
組み込み関数の呼び出しに対して、条件付きデッド コード除去 (DCE) を実行します。
「errno」を設定できますが、それ以外の場合は副作用はありません。 このフラグはデフォルトで有効になっています
at -O2 以上の場合 -オス も指定されていません。

-ftree-ドミネーター-opts
さまざまな単純なスカラークリーンアップ(定数/コピーの伝播、冗長性)を実行します
ドミネーターに基づく除去、範囲伝播、および式の簡略化)
ツリートラバーサル。 これは、ジャンプスレッドも実行します(ジャンプをジャンプに減らすため)。 これ
フラグはデフォルトで有効になっています -O そしてより高い。

-ftree-dse
樹木にデッドストア除去(DSE)を実行します。 デッドストアはメモリへのストアです
後で負荷をかけずに別のストアによって上書きされる場所。 の
この場合、以前のストアを削除できます。 このフラグは、デフォルトで有効になっています。 -O &
高いです。

-ftree-ch
ツリーでループヘッダーのコピーを実行します。 これは増加するので有益です
コードモーション最適化の有効性。 また、XNUMX回のジャンプを節約できます。 このフラグは
デフォルトで有効になっています -O 以上。 有効になっていない -オス、通常なので
コードサイズが大きくなります。

-ftree-ループ最適化
ツリーでループ最適化を実行します。 このフラグは、デフォルトで有効になっています。 -O &
高いです。

-ftree-ループ-リニア
ツリーでループ交換変換を実行します。 と同じ -floop-交換。 使用する
このコード変換では、GCCを次のように構成する必要があります --with-ppl & --詰まりあり 〜へ
Graphiteループ変換インフラストラクチャを有効にします。

-floop-交換
ループでループ交換変換を実行します。 XNUMXつのネストされたループの交換
内側と外側のループを切り替えます。 たとえば、次のようなループがあるとします。

DO J = 1、M
DO I = 1、N
A(J、I)= A(J、I)* C
遠藤
遠藤

ループ交換は、ユーザーが書いたかのようにループを変換します。

DO I = 1、N
DO J = 1、M
A(J、I)= A(J、I)* C
遠藤
遠藤

これは、「N」がキャッシュよりも大きい場合に役立ちます。これは、Fortranでは
配列の要素は、列ごとに連続してメモリに格納され、元の要素は
ループは行を反復処理し、アクセスごとにキャッシュミスを引き起こす可能性があります。 これ
最適化は、GCCでサポートされているすべての言語に適用され、以下に限定されません。
Fortran。 このコード変換を使用するには、GCCを次のように構成する必要があります。 --with-ppl
& --詰まりあり グラファイトループ変換インフラストラクチャを有効にします。

-floop-strip-mine
ループでループストリップマイニング変換を実行します。 ストリップマイニングはループをに分割します
XNUMXつのネストされたループ。 外側のループは、ストリップサイズと内側のループに等しいストライドを持っています
ループには、ストリップ内の元のループのストライドがあります。 ストリップの長さは変更できます
ループ ブロック タイル サイズ パラメータ。 たとえば、次のようなループがあるとします。

DO I = 1、N
A(I)= A(I)+ C
遠藤

ループ ストリップ マイニングは、ユーザーが次のように書いたかのようにループを変換します。

DO II = 1、N、51
DO I = II、最小(II + 50、N)
A(I)= A(I)+ C
遠藤
遠藤

この最適化は、GCCでサポートされているすべての言語に適用され、以下に限定されません。
Fortran。 このコード変換を使用するには、GCCを次のように構成する必要があります。 --with-ppl
& --詰まりあり グラファイトループ変換インフラストラクチャを有効にします。

-floop-ブロック
ループでループブロッキング変換を実行します。 露天掘りの露天掘りは、
要素ループのメモリアクセスがキャッシュ内に収まるようにループネストします。 The
ストリップの長さは、 ループ ブロック タイル サイズ パラメータ。 例えば、
次のようなループが与えられます:

DO I = 1、N
DO J = 1、M
A(J、I)= B(I)+ C(J)
遠藤
遠藤

ループ ブロッキングは、ユーザーが書いたかのようにループを変換します。

DO II = 1、N、51
DO JJ = 1、M、51
DO I = II、最小(II + 50、N)
DO J = JJ、最小(JJ + 50、M)
A(J、I)= B(I)+ C(J)
遠藤
遠藤
遠藤
遠藤

これは、「M」がキャッシュよりも大きい場合に役立ちます。これは、最も内側のループがあるためです。
キャッシュに保持できる少量のデータを反復処理します。 この
最適化は、GCCでサポートされているすべての言語に適用され、以下に限定されません。
Fortran。 このコード変換を使用するには、GCCを次のように構成する必要があります。 --with-ppl
& --詰まりあり グラファイトループ変換インフラストラクチャを有効にします。

-fgraphite-アイデンティティ
グラファイトの恒等変換を有効にします。 すべてのSCoPに対して、
多面体表現とそれをgimpleに変換し直します。 使用する -fgraphite-アイデンティティ
GIMPLE->GRAPHITE->GIMPLE変換のコストまたはメリットを確認できます。
インデックスのように、いくつかの最小限の最適化もコードジェネレーターCLooGによって実行されます
ループでの分割とデッドコードの除去。

-フループを平らにする
ループの入れ子構造を削除します。ループの入れ子を単一のループに変換します。 この
変換は、ベクトル化の有効化変換として役立ちます。
並列化。 この機能は実験的なものです。 このコード変換を使用するには、GCC
で構成する必要があります --with-ppl & --詰まりあり グラファイト ループを有効にするには
変換インフラストラクチャ。

-floop-Parallelize-all
グラファイトのデータ依存性分析を使用して、並列化できるループを特定します。
分析可能なすべてのループを並列化して、ループに含まれる依存関係を含まないようにします
ループを並列化することが有益であることを確認せずに。

-fcheck-データ-deps
いくつかのデータ依存性アナライザーの結果を比較します。 このオプションは、
データ依存アナライザーのデバッグ。

-ftree-ループ-if-convert
最も内側のループの条件付きジャンプをブランチレスに変換しようとします
同等のもの。 目的は、最も内側のループから制御フローを順番に削除することです。
これらのループを処理するベクトル化パスの機能を向上させるため。 これは
ベクトル化が有効になっている場合、デフォルトで有効になります。

-ftree-loop-if-convert-stores
また、メモリ書き込みを含む条件付きジャンプをif-convertしてみてください。 これ
変換は条件付きで変換されるため、マルチスレッドプログラムにとって安全ではない可能性があります
メモリは無条件のメモリ書き込みに書き込みます。 例えば、

for(i = 0; i <N; i ++)
if(cond)
A [i] = expr;

に変換されます

for(i = 0; i <N; i ++)
A [i] = cond? expr:A [i];

データ競合を引き起こす可能性があります。

-ftree ループ配布
ループ分散を実行します。 このフラグは、大きなループ本体のキャッシュパフォーマンスを向上させることができます
並列化やベクトル化などのループ最適化をさらに行うことができます
場所。 たとえば、ループ

DO I = 1、N
A(I)= B(I)+ C
D(I)= E(I)* F
遠藤

に変換されます

DO I = 1、N
A(I)= B(I)+ C
遠藤
DO I = 1、N
D(I)= E(I)* F
遠藤

-ftree-loop-distribute-patterns
の呼び出しでコード生成できるパターンのループ分散を実行します
図書館。 このフラグは、デフォルトで有効になっています。 -O3.

このパスは初期化ループを分散し、memsetzeroへの呼び出しを生成します。
たとえば、ループ

DO I = 1、N
A(I)= 0
B(I)= A(I)+ I
遠藤

に変換されます

DO I = 1、N
A(I)= 0
遠藤
DO I = 1、N
B(I)= A(I)+ I
遠藤

そして、初期化ループはmemsetzeroへの呼び出しに変換されます。

-ftree-loop-im
木に対してループ不変運動を実行します。 このパスは、次の不変条件のみを移動します。
RTL レベルでの処理が困難 (関数呼び出し、非自明に展開する操作)
insn のシーケンス)。 と -funswitch-ループ また、条件のオペランドも移動します。
ループの外では不変なので、自明な不変性分析だけを使用できます
ループ切替え中。 パスにはストア モーションも含まれます。

-ftree-loop-ivcanon
ループ内の反復回数の正規カウンターを作成します。
反復回数には複雑な分析が必要です。 その後の最適化は
簡単に数を決定します。 特に展開に関連して便利です。

-fivopts
帰納変数の最適化を実行します(強度低減、帰納変数
木のマージと誘導変数の除去)。

-ftree-parallelize-loops = n
ループを並列化します。つまり、反復空間を分割してn個のスレッドで実行します。 これは
反復が独立していて任意にできるループでのみ可能
再注文しました。 最適化は、マルチプロセッサマシン、forループでのみ有益です
これは、メモリ帯域幅などの制約を受けるのではなく、CPUを集中的に使用します。 このオプション
含意する -pthread、したがって、をサポートしているターゲットでのみサポートされます
-pthread.

-ftree-pta
関数-ローカルポイント-を実行して、ツリーの分析を行います。 このフラグはデフォルトで有効になっています
at -O そしてより高い。

-ftree-sra
集計のスカラー置換を実行します。 このパスは構造体参照を置き換えます
構造をメモリに早くコミットするのを防ぐためにスカラーを使用します。 このフラグは
デフォルトで有効になっています -O そしてより高い。

-ftree-copyrename
ツリーでコピーの名前変更を実行します。 このパスは、コンパイラの一時的な名前を次のように変更しようとします
コピー場所にある他の変数。通常、変数名はさらに多くなります。
元の変数によく似ています。 このフラグは、デフォルトで有効になっています。 -O &
高いです。

-ftree-coalesce-inlined-vars
copyrenameパスを伝えます(を参照) -ftree-copyrename)小さなユーザーを組み合わせようとする-
変数も定義しましたが、他の関数からインライン化された場合に限ります。 それは
より限定された形式の -ftree-coalesce-vars。 これは、そのようなデバッグ情報に害を及ぼす可能性があります
インライン化された変数。ただし、インライン化された関数の変数は別の場所に保持されます。
お互いに、期待値を含む可能性が高くなるように
デバッグセッション。 これは、4.7より前のGCCバージョンのデフォルトでした。

-ftree-coalesce-vars
copyrenameパスを伝えます(を参照) -ftree-copyrename)小さなユーザーを組み合わせようとする-
コンパイラの一時的なものだけでなく、定義された変数も。 これは厳しく制限するかもしれません
でコンパイルされた最適化されたプログラムをデバッグする機能 -fno-var-tracking-assignments.
否定された形式では、このフラグは、次のようなユーザー変数のSSA合体を防ぎます。
インラインのもの。 このオプションはデフォルトで有効になっています。

-ftree-ter
SSA->通常フェーズ中に一時的な式の置換を実行します。 独身
use / single def temporariesは、使用場所で定義されたものに置き換えられます
表現。 これにより、非GIMPLEコードが生成されますが、エクスパンダーにさらに多くの機能が提供されます
作業する複雑なツリーにより、RTLの生成が向上します。 これはによって可能になります
デフォルトで -O そしてより高い。

-ftree-ベクトル化
ツリーでループベクトル化を実行します。 このフラグは、デフォルトで有効になっています。 -O3.

-ftree-slp-ベクトル化
ツリーで基本ブロックのベクトル化を実行します。 このフラグは、デフォルトで有効になっています。 -O3 &
いつ -ftree-ベクトル化 有効になっています。

-ftree-vect-loop-version
ツリーでループのベクトル化を行う場合は、ループのバージョン管理を実行します。 ループが現れたとき
データのアライメントまたはデータの依存性を判断できないことを除いて、ベクトル化可能
コンパイル時に、ループのベクトル化されたバージョンとベクトル化されていないバージョンが生成されます。
どのバージョンを使用するかを制御するためのアライメントまたは依存関係の実行時チェックとともに
実行されました。 このオプションは、レベルを除いてデフォルトで有効になっています -オス 無効になっている場所。

-fvect-cost-モデル
ベクトル化のコスト モデルを有効にします。

-ftree-vrp
ツリーで値の範囲の伝播を実行します。 これは定数伝播に似ています
パスしますが、値の代わりに、値の範囲が伝播されます。 これにより、
配列境界チェックやnullポインタなどの不要な範囲チェックを削除するオプティマイザ
チェックします。 これはデフォルトで有効になっています -O2 以上。 ヌルポインターチェックの除去
次の場合にのみ実行されます -fdelete-null-pointer-checks 有効になっています。

-フトレーサー
スーパーブロックのサイズを拡大するには、テール複製を実行します。 この変換により、
他の最適化がより良い仕事をすることを可能にする関数の制御フロー。

-funroll-ループ
コンパイル時またはコンパイル時に反復回数を決定できるループを展開します
ループへのエントリ。 -funroll-ループ 含意する -frerun-cse-ループ後. このオプションにより、
コードを大きくし、実行速度を上げる場合と行わない場合があります。

-funroll-all-loops
ループが次の場合に反復回数が不確かな場合でも、すべてのループを展開します
入った。 これにより、通常、プログラムの実行が遅くなります。 -funroll-all-loops を意味します
と同じオプション -funroll-ループ,

-fsplit-ivs-in-unroller
の後の反復で帰納変数の値を表現できるようにします
最初の反復の値を使用して展開されたループ。 これは長い依存関係を壊します
チェーン、したがってスケジューリングパスの効率を向上させます。

組み合わせ -fweb CSE は、多くの場合、同じ効果を得るのに十分です。 でも
ループ本体が単一の基本ブロックよりも複雑な場合、これはそうではありません。
信頼性のある。 また、一部のアーキテクチャではまったく機能しません。
CSEパスの制限。

この最適化はデフォルトで有効になっています。

アンローラー内の -f 変数展開
このオプションを使用すると、コンパイラはいくつかのローカル変数の複数のコピーを作成します
優れたコードを生成できるループを展開するとき。

-部分的なインライン化
関数のインライン部分。 このオプションは、それ自体をインライン化する場合にのみ効果があります。
によってオンになります -finline-関数 or -finline-small-functions オプション。

レベルで有効 -O2.

-fpredictive-commoning
予測的共通化最適化を実行します。つまり、計算を再利用します(特に
ループの前の反復で実行されたメモリのロードとストア)。

このオプションはレベルで有効になっています -O3.

-fprefetch-ループ配列
ターゲットマシンでサポートされている場合は、メモリをプリフェッチする命令を生成します。
大規模なアレイにアクセスするループのパフォーマンスを向上させます。

このオプションは、より良いまたはより悪いコードを生成する可能性があります。 結果はに大きく依存します
ソースコード内のループの構造。

レベルで無効 -オス.

-fno-のぞき穴
-fno-のぞき穴2
マシン固有ののぞき穴の最適化を無効にします。 の違い
-fno-のぞき穴 & -fno-のぞき穴2 コンパイラでの実装方法にあります。 いくつかの
ターゲットは一方を使用し、一部は他方を使用し、いくつかは両方を使用します。

-fのぞき穴 デフォルトで有効になっています。 -fのぞき穴2 レベルで有効 -O2, -O3, -オス.

-fno-guess-branch-probability
ヒューリスティックを使用して分岐確率を推測しないでください。

によって提供されない場合、GCC はヒューリスティックを使用して分岐確率を推測します。
プロファイリングフィードバック(-fprofile-arcs)。 これらのヒューリスティックは、制御フローに基づいています
グラフ。 一部の分岐確率がによって指定されている場合 __builtin_expect、 そうして
ヒューリスティックを使用して、残りの制御フローの分岐確率を推測します。
グラフ、 __builtin_expect 情報を考慮に入れます。 間の相互作用
ヒューリスティックと __builtin_expect 複雑になる可能性があり、場合によっては、
ヒューリスティックを無効にして、 __builtin_expect 簡単です
わかる。

デフォルトは -fguess-分岐確率 レベルで -O, -O2, -O3, -オス.

-フリーオーダーブロック
取得数を減らすために、コンパイルされた関数の基本ブロックを並べ替えます
分岐し、コードの局所性を向上させます。

レベルで有効 -O2, -O3.

-freeorder-blocks-and-partition
コンパイルされた関数の基本ブロックを並べ替えるだけでなく、
取得したブランチの数、ホットとコールドの基本ブロックを別々のセクションに分割
アセンブリと.oファイルのページングとキャッシュの局所性のパフォーマンスを向上させます。

この最適化は、例外処理が存在する場合に自動的にオフになります。
linkonceセクションの場合、ユーザー定義のセクション属性を持つ関数の場合、および
名前付きセクションをサポートしないアーキテクチャ。

-freorder-関数
コードの局所性を向上させるために、オブジェクトファイル内の関数を並べ替えます。 これは
最も頻繁に実行される特別なサブセクション「.text.hot」を使用して実装されます
関数と、実行される可能性が低い関数の場合は「.text.unlikely」。 再注文はによって行われます
リンカなので、オブジェクトファイル形式は名前付きセクションをサポートする必要があり、リンカは配置する必要があります
合理的な方法でそれら。

また、このオプションを有効にするには、プロファイル フィードバックが利用可能である必要があります。 見る
-fprofile-arcs 詳細については。

レベルで有効 -O2, -O3, -オス.

-fstrict-エイリアシング
コンパイラがその言語に適用できる最も厳しいエイリアシングルールを想定できるようにする
コンパイルされています。 C(およびC ++)の場合、これにより、次のタイプに基づいて最適化がアクティブ化されます。
式。 特に、あるタイプのオブジェクトは、
タイプがほとんど同じでない限り、異なるタイプのオブジェクトと同じアドレス。
たとえば、「unsignedint」は「int」のエイリアスを作成できますが、「void*」や「double」をエイリアスすることはできません。 A
文字タイプは、他のタイプのエイリアスにすることができます。

次のようなコードに特に注意してください。

ユニオンa_union{
int i;
ダブルd;
};

int f(){
ユニオン a_union t;
td = 3.0;
tiを返します。
}

最近のものとは異なる組合員から読む習慣
に書かれる(「型のパンニング」と呼ばれる)のが一般的です。 でもで -fstrict-エイリアシング、 タイプ-
共用体タイプを介してメモリにアクセスする場合は、しゃれが許可されます。 だから、
上記のコードは期待どおりに動作します。 ただし、このコードでは次のことができない場合があります。

int f(){
ユニオン a_union t;
int * ip;
td = 3.0;
ip =&t.i;
*ipを返します。
}

同様に、アドレスを取得し、結果のポインタをキャストしてアクセスし、
キャストが共用体型を使用している場合でも、結果の間接参照の動作は未定義です。
例えば:

int f(){
ダブルd = 3.0;
return((union a_union *)&d)-> i;
}

  -fstrict-エイリアシング オプションはレベルで有効になっています -O2, -O3, -オス.

-fstrict-オーバーフロー
言語に応じて、コンパイラが厳密な署名付きオーバーフロールールを想定できるようにします
コンパイルされています。 C(およびC ++)の場合、これは、で算術演算を行うときにオーバーフローすることを意味します
符号付き数値は未定義です。つまり、コンパイラは、
起こる。 これにより、さまざまな最適化が可能になります。 たとえば、コンパイラは次のように仮定します。
「i + 10 > i」のような式は、符号付きの「i」に対して常に真になります。 この
式が偽であるため、符号付きオーバーフローが定義されていない場合にのみ、仮定が有効です。
10 の補数演算の使用時に "i + XNUMX" がオーバーフローする場合。 このオプションが入っているとき
符号付き数値の演算がオーバーフローするかどうかを判断しようとする試みに影響を与える
実際にオーバーフローが発生しないように注意して記述する必要があります。

このオプションを使用すると、コンパイラーは厳密なポインターセマンティクスを想定することもできます。
オブジェクトへのポインタ。そのポインタにオフセットを追加してもポインタが生成されない場合
同じオブジェクトへの追加は未定義です。 これにより、コンパイラは結論を出すことができます
その「p+u> p」は、ポインタ「p」と符号なし整数「u」に対して常に真です。 これ
式が次のように、ポインタのラップアラウンドが定義されていないため、仮定は有効です。
XNUMXの補数演算を使用して「p+u」がオーバーフローした場合はfalse。

参照してください -fwrapv オプション。 使用する -fwrapv 整数符号付きオーバーフローは
完全に定義されています:ラップします。 いつ -fwrapv 使用されている場合、違いはありません
-fstrict-オーバーフロー & -fno-strict-オーバーフロー 整数の場合。 と -fwrapv 特定のタイプ
オーバーフローは許可されます。 たとえば、コンパイラが実行中にオーバーフローを取得した場合
定数の算術演算では、オーバーフローした値を引き続き使用できます -fwrapvではない
さもないと。

  -fstrict-オーバーフロー オプションはレベルで有効になっています -O2, -O3, -オス.

-falign-関数
-falign-functions =n
関数の開始を次のXNUMX乗に合わせます。 n、までスキップ n
バイト。 例えば、 -falign-functions = 32 関数を次の32バイトに揃えます
境界、しかし -falign-functions = 24 次の場合にのみ、次の 32 バイト境界に整列します。
これは、23 バイト以下をスキップすることで実行できます。

-fno-align-functions & -falign-functions = 1 同等であり、その機能を意味します
整列されません。

一部のアセンブラは、このフラグをサポートするのは次の場合のみです。 n XNUMXの累乗です。 その場合は
切り上げ。

If n が指定されていないかゼロの場合は、マシンに依存するデフォルトを使用してください。

レベルで有効 -O2, -O3.

-falign-ラベル
-falign-labels =n
すべてのブランチターゲットをXNUMXの累乗の境界に揃え、最大でスキップします n のようなバイト
-falign-関数。 このオプションは、挿入する必要があるため、コードを簡単に遅くする可能性があります
コードの通常のフローで分岐ターゲットに到達したときのダミー操作。

-fno-align-labels & -falign-labels = 1 は同等であり、ラベルが使用されないことを意味します
整列。

If -falign-ループ or -falign-ジャンプ 適用可能であり、この値より大きい場合、
代わりにそれらの値が使用されます。

If n 指定されていないかゼロの場合は、マシンに依存するデフォルトを使用してください。
ようにするには 1、アライメントがないことを意味します。

レベルで有効 -O2, -O3.

-falign-ループ
-falign-loops =n
ループをXNUMXの累乗の境界に揃え、最大でスキップします n のようなバイト -falign-関数.
希望は、ループが何度も実行されることです。
ダミー操作の実行。

-fno-align-loops & -falign-loops = 1 は同等であり、ループが発生しないことを意味します
整列。

If n が指定されていないかゼロの場合は、マシンに依存するデフォルトを使用してください。

レベルで有効 -O2, -O3.

-falign-ジャンプ
-falign-jumps =n
ターゲットが存在するブランチターゲットの場合、ブランチターゲットをXNUMXの累乗の境界に揃えます
ジャンプして、上にスキップすることによってのみ到達できます n のようなバイト -falign-関数。 に
この場合、ダミー操作を実行する必要はありません。

-fno-align-ジャンプ & -falign-jumps = 1 は同等であり、ループが発生しないことを意味します
整列。

If n が指定されていないかゼロの場合は、マシンに依存するデフォルトを使用してください。

レベルで有効 -O2, -O3.

-一度に一台
このオプションは、互換性の理由から残されています。 -一度に一台 効果はありませんが
-f一度に単位なし 含意する -fno-toplevel-reorder & -fno-セクションアンカー.

デフォルトで有効になっています。

-fno-toplevel-reorder
トップレベルの関数、変数、および「asm」ステートメントを並べ替えないでください。 それらを出力します
入力ファイルに表示されるのと同じ順序。 このオプションを使用すると、
参照されていない静的変数は削除されません。 このオプションは、
特定の順序に依存する既存のコード。 新しいコードの場合は、を使用することをお勧めします
属性を指定します。

レベルで有効 -O0。 明示的に無効にすると、それはまた意味します -fno-セクションアンカー,
それ以外の場合はで有効になります -O0 一部のターゲットで。

-fweb
レジスタ割り当ての目的で一般的に使用されるWebを構築し、各Webを割り当てます
個々の疑似レジスタ。 これにより、レジスタ割り当てパスを操作できます
直接疑似しますが、CSEなどの他のいくつかの最適化パスも強化します。
ループオプティマイザーと些細なデッドコードリムーバー。 ただし、デバッグは可能です
変数は「ホームレジスタ」にとどまらないため、不可能です。

デフォルトで有効になります -funroll-ループ.

-fwhole-プログラム
現在のコンパイル単位が、コンパイルされるプログラム全体を表していると想定します。
「main」とによってマージされたものを除くすべてのパブリック関数と変数
属性「externally_visible」は静的関数になり、事実上最適化されます
手続き間のオプティマイザーによってより積極的に。 もしも ゴールド リンカープラグインとして使用され、
「externally_visible」属性が関数に自動的に追加されます (まだ変数ではありません)
電流による ゴールド 問題) に従って LTO オブジェクトの外部にアクセスされる
によって生成された解像度ファイル ゴールド. 解像度を生成できないその他のリンカーの場合
ファイルでは、明示的な「externally_visible」属性が引き続き必要です。 このオプション
で構成されるプログラムに対して「static」キーワードを適切に使用することと同等です。
単一ファイル、オプションと組み合わせて -flto このフラグは、多くのコンパイルに使用できます
関数と変数が全体に対してローカルになるため、小規模なプログラム
単一のソースファイル自体ではなく、結合されたコンパイル単位。

このオプションは、 -f全体-ファイル Fortran プログラム用。

-flto [=n]
このオプションは、標準のリンクタイムオプティマイザを実行します。 ソースコードで呼び出すと、
GIMPLE(GCCの内部表現のXNUMXつ)を生成し、それを特別なELFに書き込みます
オブジェクトファイルのセクション。 オブジェクトファイルがリンクされると、すべての
関数本体はこれらのELFセクションから読み取られ、あたかもそれらがそうであったかのようにインスタンス化されます
同じ翻訳単位の一部。

リンクタイムオプティマイザを使用するには、 -flto コンパイル時およびコンパイル時に指定する必要があります
最後のリンク。 例えば:

gcc -c -O2 -flto foo.c
gcc -c -O2 -flto bar.c
gcc -o myprog -flto -O2 foo.o bar.o

GCCへの最初のXNUMX回の呼び出しは、GIMPLEのバイトコード表現を特別なものに保存します
内部のELFセクション ふー。 & バーオー。 最後の呼び出しは、GIMPLEバイトコードを読み取ります
から ふー。 & バーオー、XNUMXつのファイルをXNUMXつの内部イメージにマージし、コンパイルします
いつものように結果。 両方から ふー。 & バーオー 単一の画像にマージされます、これ
GCCのすべての手続き間分析と最適化が
XNUMXつのファイルをXNUMXつであるかのように。 これは、たとえば、インライナーが
で関数をインライン化できます バーオー の関数に ふー。 およびその逆。

リンク時の最適化を有効にする別の(より簡単な)方法は次のとおりです。

gcc -o myprog -flto -O2 foo.c bar.c

上記はのバイトコードを生成します foo.c & bar.c、それらをXNUMXつにマージします
GIMPLE表現を作成し、通常どおりに最適化して生成します マイプログ.

覚えておくべき唯一の重要なことは、リンク時の最適化を有効にするには、
-flto flag は、コンパイル コマンドとリンク コマンドの両方に渡す必要があります。

プログラム全体の最適化を効果的にするには、特定の全体を作成する必要があります
プログラムの仮定。 コンパイラは、関数と変数が何であるかを知る必要があります
リンク時間最適化ユニットの外部のライブラリおよびランタイムによってアクセスされます。 いつ
リンカー、リンカープラグインでサポートされています(を参照) -ヒューズ-リンカー-プラグイン)パス
使用済みおよび外部から見えるシンボルに関するコンパイラへの情報。 いつ
リンカープラグインは利用できません、 -fwhole-プログラム コンパイラを許可するために使用する必要があります
これらの仮定を行うことで、より積極的な最適化の決定につながります。

ファイルがでコンパイルされたときに注意してください -flto、生成されたオブジェクト ファイルが
GIMPLE バイトコードと通常の最終コードが含まれているため、通常のオブジェクト ファイルです。
これは、LTO 情報を含むオブジェクト ファイルを通常のオブジェクトとしてリンクできることを意味します。
ファイル; もしも -flto リンカーに渡されないため、手続き間の最適化は行われません。
適用される。

さらに、個々のファイルのコンパイルに使用される最適化フラグは
必然的にリンク時に使用されるものに関連しています。 例えば、

gcc -c -O0 -flto foo.c
gcc -c -O0 -flto bar.c
gcc -o myprog -flto -O3 foo.o bar.o

これにより、最適化されていないアセンブラコードを含む個々のオブジェクトファイルが生成されますが、
結果のバイナリ マイプログ で最適化されています -O3。 代わりに、最終的なバイナリが
なしで生成された -fltoをタップし、その後、 マイプログ 最適化されていません。

で最終的なバイナリを生成するとき -flto、GCC はリンク時の最適化のみを適用します
バイトコードを含むファイルに。 したがって、オブジェクト ファイルを混在させることができます。
GIMPLE バイトコードと最終的なオブジェクト コードを含むライブラリ。 GCC が自動的に選択
LTOモードで最適化するファイルと、それ以上リンクしないファイル
処理。

バイトコードを生成するときにGCCによって保持されるコード生成フラグがいくつかあります。
最終的なリンク段階で使用する必要があります。 現在、以下のオプション
GIMPLE バイトコード ファイルに保存されます。 -fPIC, -fcommon そしてすべて -m ターゲットフラグ。

リンク時に、これらのオプションが読み込まれ、再適用されます。 現在の
実装は、これらのオプションの競合する値を認識しようとはしません。 もしも
異なるファイルで競合するオプション値があります (たとえば、XNUMX つのファイルが次のようにコンパイルされます)。 -fPIC
別のものはそうではありません)、コンパイラはバイトコードから読み取った最後の値を使用するだけです
ファイル。 そのため、ファイルに含まれるすべてのファイルをコンパイルすることをお勧めします。
同じオプションの同じリンク。

LTOが、互換性のないタイプで宣言されたCリンケージを持つオブジェクトを個別に検出した場合
一緒にリンクされる翻訳単位(ISOC99による未定義の動作
6.2.7)、致命的ではない診断が発行される場合があります。 実行時の動作はまだ定義されていません
時間。

LTOのもうXNUMXつの機能は、手続き間最適化を適用できることです。
異なる言語で書かれたファイル。 これには、言語面でのサポートが必要です
終わり。 現在、C、C++、および Fortran のフロント エンドは GIMPLE を発行できます。
バイトコードなので、次のようなものが機能するはずです:

gcc -c -flto foo.c
g ++ -c -flto bar.cc
gfortran -c -flto baz.f90
g ++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran

最終的なリンクは次のように行われることに注意してください g ++ C++ランタイムライブラリを取得し、
-lgfortran Fortranランタイムライブラリを取得するために追加されました。 一般的に、混合するとき
LTOモードの言語では、ミキシング時と同じリンクコマンドオプションを使用する必要があります
通常の (非 LTO) コンパイルの言語。 追加する必要があるのは -flto すべてを
コマンドをコンパイルおよびリンクします。

GIMPLEバイトコードを含むオブジェクトファイルがライブラリアーカイブに保存されている場合、
libfoo.a、を使用している場合は、LTOリンクでそれらを抽出して使用することができます
プラグインをサポートするリンカー。 この機能を有効にするには、フラグを使用します -ヒューズ-リンカー-プラグイン
リンク時:

gcc -o myprog -O2 -flto -fuse-linker-plugin ao bo -lfoo

リンカプラグインを有効にすると、リンカは必要なGIMPLEファイルを
libfoo.a それらを実行中のGCCに渡して、集約されたものの一部にします
最適化するGIMPLE画像。

プラグインをサポートするリンカーを使用していない場合、および/またはリンカーを有効にしない場合
プラグイン、次に内部のオブジェクト libfoo.a いつものように抽出されてリンクされますが、
LTO 最適化プロセスに参加しないでください。

リンク時の最適化は、動作するためにプログラム全体の存在を必要としません。
プログラムでシンボルをエクスポートする必要がない場合は、組み合わせることができます
-flto & -fwhole-プログラム 手続き間オプティマイザーがより多くを使用できるようにする
最適化の機会の改善につながる可能性のある積極的な仮定。 の使用
-fwhole-プログラム リンカープラグインがアクティブな場合は必要ありません(を参照) -ヒューズ-リンカー-プラグイン).

LTOの現在の実装では、次のようなバイトコードを生成しようとはしていません。
異なるタイプのホスト間で移植可能。 バイトコードファイルはバージョン管理されており、
は厳密なバージョンチェックであるため、GCCのXNUMXつのバージョンで生成されたバイトコードファイルは
古い/新しいバージョンの GCC で動作します。

リンク時の最適化は、デバッグ情報の生成ではうまく機能しません。
結合 -flto   -g 現在実験的であり、間違った結果を生成することが予想されます
結果。

オプションを指定した場合 n、リンク時に行われる最適化とコード生成
を使用して並行して実行されます n インストールされたを利用することによる並列ジョブ make プログラム。
環境変数 MAKE 使用するプログラムを上書きするために使用できます。 デフォルト
の値 n 1です。

指定することもできます -flto = jobserver GNUmakeのジョブサーバーモードを使用して決定する
並列ジョブの数。 これは、GCCを呼び出すMakefileがすでに存在する場合に役立ちます
並行して実行します。 あなたは前に追加する必要があります + 親のコマンドレシピに
これが機能するためのMakefile。 このオプションは、次の場合にのみ機能する可能性があります MAKE GNUmakeです。

このオプションはデフォルトで無効になっています

-flto-partition =ALG
リンク時オプティマイザが使用するパーティショニングアルゴリズムを指定します。 値は
「1to1」で元のソースファイルをミラーリングするパーティションを指定するか、
"balanced" は、同じサイズのチャンクへの分割を指定します (可能な場合)。
アルゴリズムとして「none」を指定すると、パーティショニングとストリーミングが完全に無効になります。 の
デフォルト値は「バランス」です。

-flto-compression-level =n
このオプションは、記述された中間言語に使用される圧縮のレベルを指定します
LTOオブジェクトファイルに変換され、LTOモードと組み合わせた場合にのみ意味があります(-flto).
有効な値は、0(圧縮なし)から9(最大圧縮)です。 これ以外の値
範囲は0または9のいずれかにクランプされます。オプションが指定されていない場合、デフォルトのバランスが取れています
圧縮設定が使用されます。

-flto-レポート
リンクタイムオプティマイザの動作に関する内部詳細を含むレポートを印刷します。 The
このレポートの内容はバージョンごとに異なります。 GCCに役立つことを目的としています
LTOモードでオブジェクトファイルを処理する場合の開発者(経由 -flto).

デフォルトでは無効です。

-ヒューズ-リンカー-プラグイン
リンク時の最適化中にリンカープラグインを使用できるようにします。 このオプションは依存しています
リンカーでのプラグインサポートについて。ゴールドまたはGNUld2.21または
新しい。

このオプションを使用すると、ライブラリからGIMPLEバイトコードを含むオブジェクトファイルを抽出できます。
アーカイブ。 これにより、より多くのコードがリンクに公開されるため、最適化の品質が向上します-
時間オプティマイザー。 この情報は、外部からアクセスできるシンボルを指定します
(非LTOオブジェクトまたはダイナミックリンク中)。 結果として得られるコード品質の向上
バイナリ(および非表示の可視性を使用する共有ライブラリ)は、
「-fwhole-program」。 見る -flto このフラグの効果と方法の説明については
それを使用しています。

このオプションは、GCCでのLTOサポートが有効で、GCCが有効になっている場合にデフォルトで有効になります。
プラグイン(GNU ld 2.21以降またはゴールド)をサポートするリンカーで使用するように構成されています。

-ffat-lto-objects
Fat LTOオブジェクトは、中間言語と
オブジェクトコード。 これにより、LTOリンクと通常のリンクの両方で使用できるようになります。 これ
オプションは、次のコマンドでコンパイルする場合にのみ有効です。 -flto リンク時に無視されます。

-fno-fat-lto-objects プレーンLTOよりもコンパイル時間を改善しますが、
LTOを認識するための完全なツールチェーン。 リンカープラグインをサポートするリンカーが必要です
基本機能用。 さらに、nm、ar、および ranlib はリンカーをサポートする必要があります。
フル機能のビルド環境を可能にするプラグイン(静的なビルドが可能)
ライブラリなど)。

デフォルトは -ffat-lto-objects ただし、このデフォルトは将来変更される予定です
リンカー プラグインが有効な環境がより一般的になったときにリリースされます。

-f比較-elim
レジスタ割り当てとレジスタ後割り当て命令の分割後、次のように識別します。
比較演算と同様にプロセッサフ​​ラグを計算する算術命令
その算術に基づいています。 可能であれば、明示的な比較操作を削除してください。

このパスは、明示的に表すことができない特定のターゲットにのみ適用されます
レジスタ割り当てが完了する前の比較操作。

レベルで有効 -O, -O2, -O3, -オス.

-fuse-ld = gold
ゴールド デフォルトのリンカーの代わりにリンカー。

-fuse-ld = bfd
ld.bfd デフォルトのリンカーの代わりにリンカー。

-fcprop-レジスタ
レジスタ割り当てとレジスタ割り当て後の命令分割の後、
copy-propagation パスを実行して、スケジューリングの依存関係を減らし、
ときどきコピーを削除します。

レベルで有効 -O, -O2, -O3, -オス.

-fprofile-修正
マルチスレッドプログラム用にインストルメント化されたバイナリを使用して収集されたプロファイルは、
カウンターの更新に失敗したため、一貫性がありません。 このオプションを指定すると、GCC は
ヒューリスティックを使用して、このような不一致を修正または平滑化します。 デフォルトでは、GCC は
一貫性のないプロファイルが検出されたときにエラー メッセージを出力します。

-fprofile-dir =path
プロファイルデータファイルを検索するディレクトリを設定します path。 このオプション
によって生成されたプロファイルデータにのみ影響します -fprofile-generate, -ftest-カバレッジ,
-fprofile-arcs と使用 -fprofile-使用 & -fbranch-確率 およびそれに関連する
オプション。 絶対パスと相対パスの両方を使用できます。 デフォルトでは、GCC は
現在のディレクトリとして path、したがって、プロファイルデータファイルは同じに表示されます
ディレクトリをオブジェクト ファイルとして指定します。

-fprofile-generate
-fprofile-generate =path
インストルメンテーションアプリケーションに通常使用されるオプションを有効にして、有用なプロファイルを作成します
プロファイルフィードバックベースの最適化を使用して後で再コンパイルするため。 使用する必要があります
-fprofile-generate コンパイル時とプログラムのリンク時の両方。

次のオプションが有効になっています: "-fprofile-arcs"、 "-fprofile-values"、"-fvpt"。

If path が指定されている場合、GCC は path プロファイル フィードバック データを見つける
ファイル。 見る -fprofile-dir.

-fprofile-使用
-fprofile-use =path
プロファイルフィードバックに向けられた最適化を有効にし、最適化は一般的に有益です
プロファイルフィードバックのみが利用可能です。

次のオプションが有効になっています: "-fbranch-probabilities"、 "-fvpt"、
「-funroll-loops」、「-fpeel-loops」、「-ftracer」

デフォルトでは、フィードバックプロファイルが
ソースコード。 このエラーは、を使用して警告に変えることができます -Wcoverage-不一致.
これにより、コードの最適化が不十分になる可能性があることに注意してください。

If path が指定されている場合、GCC は path プロファイル フィードバック データを見つける
ファイル。 見る -fprofile-dir.

次のオプションは、浮動小数点演算に関するコンパイラの動作を制御します。
これらのオプションは、速度と正確さの間でトレードオフになります。 すべてを明確に有効にする必要があります。

-フロートストア
浮動小数点変数をレジスタに格納したり、他のオプションを禁止したりしないでください。
浮動小数点値がレジスタまたはメモリのどちらから取得されるかが変わる可能性があります。

このオプションは、68000などのマシンで望ましくない過剰な精度を防ぎます。
(68881の)フローティングレジスタは、「double」が想定されているよりも高い精度を維持します
持つため。 x86アーキテクチャについても同様です。 ほとんどのプログラムでは、過剰な精度
良いだけですが、いくつかのプログラムはIEEEフローティングの正確な定義に依存しています
点。 使用する -フロートストア そのようなプログラムの場合、すべてを保存するように変更した後
変数への適切な中間計算。

-fexcess-precision =
このオプションを使用すると、フローティングマシンの過剰な精度をさらに制御できます。
ポイントレジスタは、IEEEの「float」および「double」タイプよりも精度が高く、
プロセッサは、これらのタイプへの丸め操作をサポートしていません。 デフォルトでは、
-fexcess-precision = fast 有効です。 これは、操作がで実行されることを意味します
レジスタの精度と、型に丸めるときに予測できないこと
ソースコードで指定されたものが実行されます。 Cをコンパイルするとき、
-fexcess-precision = standard が指定されている場合、超過精度はルールに従います
ISOC99で指定されています。 特に、キャストと割り当ての両方により、値は次のようになります。
セマンティックタイプに丸められます( -フロートストア 割り当てにのみ影響します)。
このオプションは、Cのような厳密な適合オプションの場合、デフォルトで有効になっています。
-std = c99 使用されている。

-fexcess-precision = standard C以外の言語には実装されておらず、
効果がある場合 -funsafe-数学の最適化 or -ffast-数学 が指定されています。 x86では、
次の場合も効果がありません -mfpmath = sse or -mfpmath = sse + 387 指定されています。 前者で
場合、IEEEセマンティクスは過度の精度なしで適用され、後者の場合、丸めは
予測不可能な。

-ffast-数学
セット -fno-math-errno, -funsafe-数学の最適化, -有限数学のみ,
-fno-丸め-数学, -fno-シグナリング-nans & -fcx限定範囲.

このオプションにより、プリプロセッサマクロ「__FAST_MATH__」が定義されます。

このオプションは誰によってもオンにされていません -O 以外のオプション -オーファスト 結果として生じる可能性があるため
IEEEまたはISOの正確な実装に依存するプログラムの誤った出力
数学関数のルール/仕様。 ただし、
これらの仕様の保証を必要としないプログラム。

-fno-math-errno
単一の関数で実行される数学関数を呼び出した後は、ERRNO を設定しないでください。
sqrt などの命令。 数学エラーの IEEE 例外に依存するプログラム
処理では、IEEE演算を維持しながら、このフラグを使用して速度を上げることができます。
互換性。

このオプションは誰によってもオンにされていません -O 誤った出力になる可能性があるため、オプション
IEEEまたはISOの正確な実装に依存するプログラムの場合
数学関数のルール/仕様。 ただし、
これらの仕様の保証を必要としないプログラム。

デフォルトは -fmath-errno.

ダーウィンシステムでは、数学ライブラリが「errno」を設定することはありません。 したがって、理由はありません
コンパイラがその可能性を検討するために、そして -fno-math-errno
デフォルト。

-funsafe-数学の最適化
(a)引数と
結果は有効であり、(b)IEEEまたはANSI規格に違反している可能性があります。 リンク時に使用する場合、
デフォルトのFPU制御ワードを変更するライブラリまたはスタートアップファイルが含まれる場合があります。
他の同様の最適化。

このオプションは誰によってもオンにされていません -O 誤った出力になる可能性があるため、オプション
IEEEまたはISOの正確な実装に依存するプログラムの場合
数学関数のルール/仕様。 ただし、
これらの仕様の保証を必要としないプログラム。 有効にする
-fno-signed-zeros, -fno-トラップ-数学, -連想数学 & -freciprocal-数学.

デフォルトは -fno-unsafe-math-optimizations.

-連想数学
一連の浮動小数点演算でオペランドの再関連付けを許可します。 これ
計算結果を変更する可能性があるため、ISOCおよびC++言語標準に違反しています。
注:並べ替えると、ゼロの符号が変わるだけでなく、NaNが無視され、または
アンダーフローまたはオーバーフローを作成します(したがって、丸めに依存するコードでは使用できません
「(x + 2 ** 52)-2**52」のような動作。 浮動小数点比較を並べ替えることもできます
したがって、順序付けられた比較が必要な場合は使用できません。 このオプションでは、
両言語で -fno-signed-zeros & -fno-トラップ-数学 有効になります。 また、それはしません
と多くの意味 -フラウンディング-数学。 Fortranの場合、このオプションは次の場合に自動的に有効になります。
両言語で -fno-signed-zeros & -fno-トラップ-数学 有効です。

デフォルトは -fno-連想数学.

-freciprocal-数学
この場合、値で除算する代わりに、値の逆数を使用できるようにします
最適化を有効にします。 たとえば、「x / y」は、「x *(1 / y)」に置き換えることができます。
「(1 / y)」が共通部分式除去の対象となる場合に役立ちます。 これに注意してください
精度が低下し、値で動作するフロップの数が増加します。

デフォルトは -fno-逆数-数学.

-有限数学のみ
引数と
結果はNaNまたは+-Infsではありません。

このオプションは誰によってもオンにされていません -O 誤った出力になる可能性があるため、オプション
IEEEまたはISOの正確な実装に依存するプログラムの場合
数学関数のルール/仕様。 ただし、
これらの仕様の保証を必要としないプログラム。

デフォルトは -fno-有限数学のみ.

-fno-signed-zeros
ゼロの符号を無視する浮動小数点演算の最適化を許可します。
IEEE算術は、異なる+0.0値と-0.0値の動作を指定します。
x+0.0や0.0*xなどの式の簡略化を禁止します(
-有限数学のみ)。 このオプションは、結果がゼロの符号がそうではないことを意味します
重要です。

デフォルトは -fsigned-zeros.

-fno-トラップ-数学
浮動小数点演算ではユーザーに表示されないものを生成できないと想定してコードをコンパイルします
トラップ。 これらのトラップには、ゼロ除算、オーバーフロー、アンダーフロー、不正確な結果、および
無効な操作。 このオプションでは、 -fno-シグナリング-nans 有効になります。
このオプションを設定すると、「ノンストップ」IEEE演算に依存している場合、より高速なコードが可能になる可能性があります。
例えば。

このオプションは、誰もオンにしないでください -O 結果として生じる可能性があるため、オプション
IEEEまたはISOの正確な実装に依存するプログラムの誤った出力
数学関数のルール/仕様。

デフォルトは -フトラッピング-数学.

-フラウンディング-数学
デフォルトの浮動小数点丸めを想定した変換と最適化を無効にします
行動。 これは、すべての浮動小数点から整数への変換でゼロに丸められ、
他のすべての算術切り捨ての場合は、最も近い値に丸めます。 このオプションは
FP丸めモードを動的に変更するプログラム、または
デフォルト以外の丸めモードで実行されます。 このオプションは、定数畳み込みを無効にします
コンパイル時の浮動小数点式(丸めモードの影響を受ける可能性があります)
符号に依存する存在下では安全ではない算術変換
丸めモード。

デフォルトは -fno-丸め-数学.

このオプションは実験的なものであり、現在、すべてのGCCを無効にすることを保証するものではありません。
丸めモードの影響を受ける最適化。 GCCの将来のバージョンは提供する可能性があります
C99の「FENV_ACCESS」プラグマを使用して、この設定をより細かく制御します。 このコマンドライン
オプションは、「FENV_ACCESS」のデフォルト状態を指定するために使用されます。

-fsignaling-nans
IEEEシグナリングNaNがユーザーに表示されるトラップを生成する可能性があると想定してコードをコンパイルします
浮動小数点演算。 このオプションを設定すると、変更される可能性のある最適化が無効になります
シグナリングNaNで表示される例外の数。 このオプションは、
-フトラッピング-数学.

このオプションにより、プリプロセッサマクロ「__SUPPORT_SNAN__」が定義されます。

デフォルトは -fno-シグナリング-nans.

このオプションは実験的なものであり、現在、すべてのGCCを無効にすることを保証するものではありません。
NaNの動作のシグナリングに影響を与える最適化。

-fs単精度定数
浮動小数点定数を暗黙的に変換するのではなく、単精度として扱います
それらを倍精度定数に変換します。

-fcx限定範囲
有効にすると、このオプションは、次の場合に範囲縮小手順が不要であることを示します。
複雑な除算を実行します。 また、結果が
虚数乗または除算は「NaN+I * NaN」であり、
その場合の状況。 デフォルトは -fno-cx-限られた範囲、ただし、によって有効になります
-ffast-数学.

このオプションは、ISOC99"CX_LIMITED_RANGE"プラグマのデフォルト設定を制御します。
それでも、このオプションはすべての言語に適用されます。

-fcx-fortran-rules
複雑な乗算と除算はFortranの規則に従います。 範囲の縮小は次のように行われます
複雑な除算の一部ですが、複雑な結果かどうかのチェックはありません
掛け算や割り算は「NaN+I * NaN」で、状況を救おうとします
その場合は。

デフォルトは -fno-cx-fortran-rules.

次のオプションは、パフォーマンスを向上させる可能性があるが、そうではない最適化を制御します
任意のによって有効になります -O オプション。 このセクションには、生成される可能性のある実験オプションが含まれています
壊れたコード。

-fbranch-確率
でコンパイルされたプログラムを実行した後 -fprofile-arcs、もう一度コンパイルできます
-fbranch-確率、回数に基づいて最適化を改善する
各ブランチが取られました。 プログラムがコンパイルされたとき -fprofile-arcs 保存します
アーク実行は、というファイルにカウントされます ソース名.gcda ソースファイルごとに。 The
このデータファイルの情報は、生成された構造に大きく依存します
コードなので、両方に同じソースコードと同じ最適化オプションを使用する必要があります
コンパイル。

-fbranch-確率、GCCは REG_BR_PROB それぞれに注意してください JUMP_INSN &
CALL_INSN。 これらは、最適化を改善するために使用できます。 現在、それらは使用されているだけです
一箇所で:で reorg.c、ブランチがどのパスを実行する可能性が最も高いかを推測する代わりに
取る、 REG_BR_PROB 値は、どのパスがより多く取られるかを正確に決定するために使用されます
しばしば。

-fprofile-values
と組み合わせる場合 -fprofile-arcs、コードを追加して、
プログラム内の表現が集められます。

-fbranch-確率、プロファイリング値から収集されたデータを読み戻します
最適化で使用するための式。

有効化 -fprofile-generate & -fprofile-使用.

-fvpt
と組み合わせる場合 -fprofile-arcs、収集するコードを追加するようコンパイラに指示します
式の値に関する情報。

-fbranch-確率、収集されたデータを読み戻し、実際に実行します
それらに基づく最適化。 現在、最適化には
分母の値に関する知識を使用した除算演算。

-frename-registers
残っているレジスタを利用して、スケジュールされたコードの誤った依存関係を回避しようとします
レジスタ割り当て後オーバー。 この最適化は、プロセッサーに最もメリットがあります。
たくさんのレジスター。 ターゲットが採用しているデバッグ情報のフォーマットに応じて、
ただし、変数はもはや
「ホームレジスター」。

デフォルトで有効になります -funroll-ループ & -fpeel-ループ.

-フトレーサー
スーパーブロックのサイズを拡大するには、テール複製を実行します。 この変換により、
他の最適化がより良い仕事をすることを可能にする関数の制御フロー。

有効化 -fprofile-使用.

-funroll-ループ
コンパイル時またはコンパイル時に反復回数を決定できるループを展開します
ループへのエントリ。 -funroll-ループ 含意する -frerun-cse-ループ後, -fweb &
-frename-registers。 また、完全なループピーリング(つまり、完全な除去
反復回数が少ないループ)。 このオプションはコードを大きくします。
実行速度が上がる場合とできない場合があります。

有効化 -fprofile-使用.

-funroll-all-loops
ループが次の場合に反復回数が不確かな場合でも、すべてのループを展開します
入った。 これにより、通常、プログラムの実行が遅くなります。 -funroll-all-loops を意味します
と同じオプション -funroll-ループ.

-fpeel-ループ
あまりロールしないほど十分な情報があるピールループ(から
プロファイルフィードバック)。 また、完全なループピーリング(つまり、完全な除去
反復回数が少ないループ)。

有効化 -fprofile-使用.

-fmove-ループ不変
RTLループオプティマイザでループ不変モーションパスを有効にします。 レベルで有効
-O1

-funswitch-ループ
ループ不変条件のブランチをループの外に移動し、
両方のブランチでループします(条件の結果に応じて変更されます)。

-機能-セクション
-fdata-セクション
ターゲットの場合は、各関数またはデータ項目を出力ファイルの独自のセクションに配置します
任意のセクションをサポートします。 関数の名前またはデータ項目の名前
出力ファイル内のセクションの名前を決定します。

リンカが最適化を実行して改善できるシステムでこれらのオプションを使用します
命令スペースでの参照の局所性。 ELFオブジェクトを使用するほとんどのシステム
Solaris 2を実行しているフォーマットおよびSPARCプロセッサには、このような最適化を備えたリンカーがあります。
AIXは、将来これらの最適化を行う可能性があります。

これらのオプションは、そうすることで大きなメリットがある場合にのみ使用してください。 あなたが
これらのオプションを指定すると、アセンブラとリンカはより大きなオブジェクトを作成し、
実行可能ファイルと同様に遅くなります。 すべてで「gprof」を使用することはできません
このオプションを指定すると、デバッグで問題が発生する可能性があります。
このオプションと -g.

-fbranch-ターゲット-ロード-最適化
プロローグ/エピローグスレッドの前に分岐ターゲットレジスタの負荷最適化を実行します。
ターゲットレジスタの使用は、通常、リロード中にのみ公開されるため、巻き上げが行われます。
ループからロードし、ブロック間スケジューリングを行うには、個別の最適化が必要です
パス。

-fbranch-ターゲット-ロード-最適化2
プロローグ/エピローグスレッドの後に分岐ターゲットレジスタの負荷最適化を実行します。

-fbtr-bb-排他的
分岐ターゲットレジスタの負荷最適化を実行するときは、分岐ターゲットを再利用しないでください
基本ブロック内に登録します。

-fstack-プロテクター
スタックスマッシング攻撃などのバッファオーバーフローをチェックするために、追加のコードを発行します。 これ
脆弱なオブジェクトを持つ関数にガード変数を追加することによって行われます。 これ
alloca を呼び出す関数と、8 バイトを超えるバッファを持つ関数が含まれます。
ガードは、関数が入力されたときに初期化され、関数が入力されたときにチェックされます。
関数が終了します。 ガードチェックが失敗した場合、エラーメッセージが出力され、プログラムが出力されます
終了します。

注: Ubuntu 6.10 以降のバージョンでは、このオプションはデフォルトで C、C++、
ObjC、ObjC++、いずれでもない場合 -fno-スタックプロテクター, -nostdlib、または -自立  
発見した。

-fstack-protector-all
いいね -fstack-プロテクター すべての機能が保護されていることを除いて。

-fsection-アンカー
共有「アンカー」を使用して、シンボリックアドレス計算の数を減らしてみてください
近くのオブジェクトをアドレス指定するための記号。 この変換は、数を減らすのに役立ちます
いくつかのターゲットでのGOTエントリとGOTアクセスの数。

たとえば、次の関数「foo」の実装:

static int a、b、c;
int foo(void){return a + b + c; }

通常、XNUMX つの変数すべてのアドレスを計算しますが、コンパイルすると
  -fsection-アンカー、共通のアンカーポイントから変数にアクセスします
代わりは。 効果は次の疑似コードに似ています (これは有効な C ではありません)。

int foo(void)
{
レジスタint*xr =&x;
xr [&a-&x] + xr [&b-&x] + xr [&c-&x];を返します。
}

すべてのターゲットがこのオプションをサポートしているわけではありません。

--パラメータ =
一部の場所では、GCCはさまざまな定数を使用して、最適化の量を制御します。
終わらせる。 たとえば、GCC は特定の数を超える関数をインライン化しません。
命令の数。 これらの定数の一部は、コマンドラインで制御できます
--パラメータ オプションを選択します。

特定のパラメーターの名前、および値の意味は、
コンパイラの内部であり、将来予告なしに変更される可能性があります
リリース。

いずれの場合も、 は整数です。 の許容される選択肢 で与えられます
次の表:

予測可能なブランチの結果
このしきい値よりも低い確率で分岐が行われると予測される場合
(パーセント)の場合、それは十分に予測可能であると見なされます。 デフォルトは10です。

最大クロスジャンプエッジ
クロスジャンプで考慮される着信エッジの最大数。 アルゴリズム
によって使用される -クロスジャンピング 各ブロックに入るエッジの数のO(N ^ 2)です。
値を大きくすると、より積極的な最適化が行われ、コンパイル時間が長くなります。
実行可能ファイルのサイズがわずかに改善されると、増加します。

min-crossjump-insn
XNUMXつのブロックの終わりで一致しなければならない命令の最小数
それらに対してクロスジャンプが実行される前に。 次の場合、この値は無視されます。
クロスジャンプ元のブロック内のすべての命令が一致します。 の
デフォルト値は5です。

max-grow-copy-bb-insn
代わりに基本ブロックをコピーする場合の最大コードサイズ拡張係数
ジャンピング。 展開はジャンプ命令に関連しています。 デフォルト値は
8.

max-goto-duplication-insn
にジャンプするブロックに複製する命令の最大数
計算されたgoto。 多数のパスでO(N ^ 2)の動作を回避するために、GCCは
コンパイルプロセスの早い段階でgotosを計算し、遅くともそれらをアンファクタリングします
可能。 最大以下の基本ブロックの終わりで計算されたジャンプのみ-
goto-duplication-insnsはファクタリングされていません。 デフォルト値は8です。

最大遅延スロット insn 検索
命令を探すときに考慮すべき命令の最大数
遅延スロットを埋めます。 この任意の数以上の命令が
検索された場合、遅延スロットを埋めることによる時間の節約は最小限になるため、停止します
検索。 値を大きくすると、より積極的な最適化が行われ、
コンパイル時間は増加しますが、実行時間はおそらくわずかに改善されます。

最大遅延スロット ライブ検索
遅延スロットを埋めようとするとき、考慮すべき命令の最大数
有効なライブレジスタ情報を持つブロックを検索する場合。 これを増やす
任意に選択された値は、より積極的な最適化を意味し、
コンパイル時間。 遅延スロットコードが次の場合、このパラメータを削除する必要があります
制御フローグラフを維持するために書き直されました。

最大gcseメモリ
次の目的で割り当てられるメモリの最大量の概算。
グローバル共通部分式除去最適化を実行します。 メモリが多ければ
指定以上の値が必要な場合、最適化は行われません。

max-gcse-挿入-比率
式の挿入と削除の比率がこの値よりも大きい場合
任意の式の場合、RTL PRE はその式を挿入または削除してそのままにします
命令ストリーム内の部分的に冗長な計算。 デフォルト値は
20.

最大保留リスト長
フラッシュする前にスケジュールが許可する保留中の依存関係の最大数
現在の状態と最初からやり直す。 分岐や呼び出しがほとんどない大規模な関数
不必要にメモリとリソースを消費する非常に大きなリストを作成する可能性があります。

最大モジュロバックトラック試行回数
モジュロの場合にスケジューラが実行する必要があるバックトラック試行の最大数
ループのスケジューリング。 値を大きくすると、コンパイル時間が指数関数的に増加する可能性があります。

max-inline-insn-single
いくつかのパラメーターは、gcc で使用されるツリー インライナーを制御します。 この数は、
内の命令の最大数(GCCの内部表現でカウント)
ツリー インライナーがインライン化を検討する単一の関数。 これだけ
インラインで宣言された関数とクラス宣言で実装されたメソッドに影響します
(C++)。 デフォルト値は 400 です。

max-inline-insns-auto
この方法でエスプレッソの抽出を計量する場合、エスプレッソがスパウトから落ちるタイミングとスケールが反応するタイミングに時間差が生じます。エスプレッソがスパウトからエスプレッソカップに落ち、スケールが計量するまで若干の時間差が生じるため、抽出ボタンを止めた後、液量が約2~4g増加することを念頭に置いて抽出を止めてください。 -finline-関数 (に含まれる -O3)、多くの関数
それ以外の場合は、コンパイラによるインライン展開と見なされないことが調査されます。 に
それらの関数、関数と比較して異なる(より制限的な)制限
宣言されたインラインを適用できます。 デフォルト値は40です。

大機能-insns
非常に大きな関数を指定する制限。 この制限より大きい関数の場合
インライン化後、インライン化はによって制約されます --パラメータ 大機能の成長。 この
パラメータは、主に非
バックエンドで使用される線形アルゴリズム。 デフォルト値は2700です。

大機能の成長
インライン化によって引き起こされる大きな関数の最大成長をパーセントで指定します。 The
デフォルト値は100で、大規模な関数の拡張を元の2.0倍に制限します
サイズ。

ラージユニットイン
大きな変換単位を指定する制限。 ユニットのインライン化によって引き起こされる成長
この制限よりも大きい場合は、 --パラメータ インラインユニット成長。 小さなユニットの場合
これはきつすぎるかもしれません (インラインであり、関数 A で構成されるユニットを考えてください。
A を XNUMX 回呼び出すだけの B。 B が A に比べて小さい場合、ユニットの成長
は 300\% ですが、そのようなインライン化は非常に正気です。 で構成される非常に大きなユニットの場合
小さなインライン化可能な関数ですが、全体的なユニットの成長制限が必要です
コードサイズの指数関数的な爆発を回避します。 したがって、より小さい単位の場合、サイズは
に増加した --パラメータ ラージユニットイン 申し込む前に --パラメータ インラインユニット成長.
デフォルトは10000です

インラインユニット成長
インライン化によって引き起こされるコンパイル単位の最大の全体的な成長を指定します。 The
デフォルト値は30で、ユニットの成長を元のサイズの1.3倍に制限します。

ipcp ユニットの成長
手続き間によって引き起こされるコンパイル単位の最大の全体的な成長を指定します
一定の伝播。 デフォルト値は10で、ユニットの増加を1.1に制限します。
元のサイズの倍。

ラージスタックフレーム
大きなスタックフレームを指定する制限。 アルゴリズムのインライン化が試行されている間
この制限を超えて成長しすぎないようにします。 デフォルト値は 256 バイトです。

ラージスタックフレームの成長
インライン化によって引き起こされる大きなスタックフレームの最大成長をパーセントで指定します。
デフォルト値は1000で、大きなスタックフレームの増加を11倍に制限します。
オリジナルサイズ。

max-inline-insns-recursive
max-inline-insns-recursive-auto
自己再帰インラインのアウトオブライン コピーの命令の最大数を指定します
関数は、再帰的なインライン化を実行することで拡張できます。

インラインで宣言された関数の場合 --パラメータ max-inline-insns-recursive に取り込まれます
アカウント。 インラインで宣言されていない関数の場合、再帰的なインライン化は次の場合にのみ発生します。
-finline-関数 (に含まれる -O3)が有効になっていて --パラメータ max-inline-insn-
再帰自動 使用されている。 デフォルト値は450です。

最大インライン再帰深度
最大インライン再帰深さ自動
再帰的インライン化で使用される最大再帰深度を指定します。

インラインで宣言された関数の場合 --パラメータ 最大インライン再帰深度 に取り込まれます
アカウント。 インラインで宣言されていない関数の場合、再帰的なインライン化は次の場合にのみ発生します。
-finline-関数 (に含まれる -O3)が有効になっていて --パラメータ max-inline-recursive-
デプスオート 使用されている。 デフォルト値は8です。

最小インライン再帰確率
再帰的なインライン化は、再帰が深い関数に対してのみ有益です。
平均的であり、再帰の深さがほとんどない関数を増やすことで、機能を損なう可能性があります。
他のオプティマイザに対する関数本体のプロローグサイズまたは複雑さ。

プロファイルフィードバックが利用可能な場合(を参照) -fprofile-generate)実際の再帰
深さは、関数が特定の呼び出しを介して再帰する確率から推測できます
表現。 このパラメーターは、インライン展開を call 式のみに制限します。
確率が指定されたしきい値を超えています (パーセント)。 デフォルト値は 10 です。

早期インライン化-insns
初期のインライナーが行うことができる成長を指定します。 実際には、それはの量を増やします
抽象化のペナルティが大きいコードのインライン化。 デフォルト値は 10 です。

max-early-inliner-イテレーション
max-early-inliner-イテレーション
初期のインライナーの反復の制限。 これは基本的にネストされた数を制限します
間接呼び出しは早期のインライナーで解決できます。 より深いチェーンはまだ後半に処理されます
インライン化。

comdat 共有確率
comdat 共有確率
Comdat 可視性を持つ C++ インライン関数が
複数のコンパイルユニット間で共有されます。 デフォルト値は20です。

min-vect-loop-bound
次の場合にループがベクトル化されない反復の最小数。
-ftree-ベクトル化 使用されている。 ベクトル化後の反復回数は、
ベクトル化を可能にするには、このオプションで指定された値よりも大きくします。 The
デフォルト値は0です。

gcse コスト距離比
式を移動できる最大距離の計算におけるスケーリング係数
GCSEの最適化。 これは現在、コード巻き上げパスでのみサポートされています。
比率が大きいほど、単純なコード巻き上げがより積極的になります。
式、つまり、コストが gcse-無制限-
コスト. 0 を指定すると、単純式の巻き上げが無効になります。 デフォルト
値は10です。

gcse-無制限のコスト
コストは、XNUMXつの典型的な機械命令のコストとして大まかに測定されます。
どのGCSE最適化が式が移動できる距離を制限しないか.
これは現在、コード巻き上げパスでのみサポートされています。 コストが低いほど、
コード巻き上げがより積極的になります。 0 を指定すると、すべて許可されます。
無制限の距離を移動する表現。 デフォルト値は 3 です。

最大ホイスト深度
ドミネーターツリーでの表現の検索の深さ。 これが使用されます
巻き上げアルゴリズムで二次的な動作を避けるため。 0 の値は回避します
検索を制限しますが、巨大な関数のコンパイルが遅くなる可能性があります。 デフォルト
値は30です。

最大末尾マージ比較
bbを比較する類似のbbの最大量。 これは回避するために使用されます
ツリーテールのマージにおける10次動作。 デフォルト値はXNUMXです。

最大末尾マージ反復数
関数のパスの最大反復回数。 これは
ツリーテールのマージでコンパイル時間を制限します。 デフォルト値は2です。

max-unrolled-insn
ループが次の場合にループが持つべき命令の最大数。
展開され、ループが展開されている場合は、ループ コードが何回実行されるかを決定します。
展開されます。

最大平均アンロールドインSNS
実行の確率によってバイアスされる命令の最大数
ループがアンロールされている場合、ループは持つ必要があり、ループがアンロールされている場合は、
ループコードが展開される回数を決定します。

最大アンロール回数
単一ループの展開の最大数。

最大皮をむいたinsns
ループがピールされた場合にループが持つべき命令の最大数。
ループがピールされた場合は、ループ コードがピールされる回数を決定します。

最大剥離時間
単一ループの剥離の最大数。

最大完全に皮をむいたinsns
完全に剥がされたループの最大数。

最大完全に剥がす回数
完全な剥離に適したループの最大反復回数。

最大完全ピールループネスト深さ
完全な剥離に適したループネストの最大深さ。

max-unswitch-insn
切り替えられていないループのinsnsの最大数。

最大切り替えレベル
XNUMXつのループで切り替えられないブランチの最大数。

リム高価
ループ不変条件での高価な式の最小コスト。

iv-考慮-すべての候補者-バインド
帰納変数の候補数の上限が全候補以下
誘導変数の最適化で使用するたびに考慮されます。 一番だけ
回避するために、より多くの候補がある場合は、関連する候補が考慮されます
二次時間計算量。

iv-max-検討された用途
誘導変数の最適化は、より多くの誘導を含むループをあきらめます
変数の使用。

iv-always-prune-cand-set-bound
セット内の候補の数がこの値よりも小さい場合、常に
新しいivが追加されたときの最適化中にセットから不要なivを削除します
セットに。

scev-max-expr-size
スカラー進化アナライザーで使用される式のサイズに制限されます。 大きい
式はアナライザーを遅くします。

scev-max-expr-複雑さ
スカラー進化アナライザーの式の複雑さに縛られます。
複雑な式はアナライザーを遅くします。

オメガ-最大-変数
オメガ制約システムの変数の最大数。 デフォルト値
128です。

オメガ-max-geqs
オメガ制約システムにおける不等式の最大数。 デフォルト
値は256です。

オメガ-max-eqs
オメガ制約システムにおける等式の最大数。 デフォルト値
128です。

オメガマックスワイルドカード
Omega ソルバーが使用できるワイルドカード変数の最大数
入れる。 デフォルト値は 18 です。

オメガハッシュテーブルサイズ
オメガソルバーのハッシュテーブルのサイズ。 デフォルト値は550です。

オメガマックスキー
オメガソルバーが使用するキーの最大数。 デフォルト値は500です。

オメガ排除冗長制約
1に設定する場合は、高価な方法を使用して、冗長な制約をすべて排除します。 The
デフォルト値は0です。

vect-max-version-for-alignment-checks
ループを実行するときに実行できる実行時チェックの最大数
ベクトライザーでの整列のためのバージョン管理。 オプション ftree-vect-loop-version を参照


vect-max-version-for-alias-checks
ループを実行するときに実行できる実行時チェックの最大数
ベクトライザーでのエイリアスのバージョン管理。 オプション ftree-vect-loop-version を参照してください
詳しくは。

追跡する最大反復回数
ループの反復の最大数 分析のためのブルート フォース アルゴリズム
ループの反復回数のうち、評価を試みる回数。

ホット bb カウント フラクション
プログラム内の基本ブロックの最大繰り返し回数の一部を選択
特定の基本ブロックは、ホットと見なされる必要があります。

ホット bb 頻度分数
基本ブロックの実行のエントリブロック頻度の一部を選択します
基本ブロックが与えられた場合の機能は、ホットと見なす必要があります。

最大予測反復回数
静的に予測するループ反復の最大数。 これはで便利です
関数が既知の境界を持つ単一のループと他のループを含む場合
わからない。 既知の反復回数は正しく予測しますが、未知の反復回数は
反復回数の平均はおよそ 10 回です。
境界は、他の境界に比べて人為的に冷たく表示されます。

調整しきい値
関数内の基本ブロックの最大実行頻度の割合を選択します
指定された基本ブロックが整列されます。

整列ループ反復
選択された回数の反復が繰り返されないように反復することが期待されるループ
整列。

トレーサー-動的カバレッジ
トレーサー-動的カバレッジフィードバック
この値は、指定されたパーセンテージのスーパーブロックの形成を制限するために使用されます。
実行された命令がカバーされます。 これにより、不要なコードサイズの拡張が制限されます。

  トレーサー-動的カバレッジフィードバック プロフィールのフィードバックが
利用可能。 実際のプロファイル (静的に推定されたプロファイルとは対照的に) は、
バランスが悪く、しきい値をより大きな値にすることができます。

トレーサー-最大-コード-成長
コードの成長が指定されたパーセンテージに達したら、末尾の重複を停止します。 これは
ほとんどの重複は後でクロスで削除されるため、かなりばかげた議論
ジャンプするため、必要なコードの増加よりもはるかに高い値に設定される場合があります。

トレーサー-最小-分岐比
ベストエッジの逆確率がこれよりも小さい場合は、逆成長を停止します
しきい値(パーセント)。

トレーサー-最小-分岐比
tracer-min-branch-ratio-フィードバック
最良のエッジの確率がこれより低い場合は、前方への成長を停止します
閾値。

同様に トレーサー-動的カバレッジ XNUMXつの値が存在します。XNUMXつはコンパイル用です。
プロファイルフィードバック用となしのコンパイル用。 コンパイルの値
プロファイルのフィードバックを作成するには、より保守的(より高い)にする必要があります
トレーサーが効果的。

最大 CSE パス長
cse が考慮するパス上の基本ブロックの最大数。 デフォルトは 10 です。

max-cse-insn
フラッシュする前に CSE が処理する最大命令数。 デフォルトは 1000 です。

ggc-min-expand
GCCは、ガベージコレクタを使用して独自のメモリ割り当てを管理します。 このパラメータ
ガベージコレクターのヒープの最小パーセンテージを指定します
コレクション間で拡張できます。 これを調整すると、コンパイル速度が向上する可能性があります。
コード生成には影響しません。

デフォルトは30%+ 70%*(RAM / 1GB)で、RAM> = 100GBの場合の上限は1%です。
「getrlimit」が使用可能な場合、「RAM」の概念は実際のRAMの最小値であり、
「RLIMIT_DATA」または「RLIMIT_AS」。 GCCが特定のRAMを計算できない場合
プラットフォームでは、30%の下限が使用されます。 このパラメータの設定と ggc-min-
ヒープサイズ ゼロにすると、あらゆる機会に完全なコレクションが発生します。 これは
非常に遅いですが、デバッグに役立つ場合があります。

ggc-最小ヒープサイズ
ガベージコレクターが収集を開始する前のヒープの最小サイズ
ごみ。 最初のコレクションは、ヒープが次のように拡張された後に発生します ggc-min-expand%
越えて ggc-最小ヒープサイズ。 繰り返しますが、これを調整すると、コンパイル速度が向上する可能性があります。
コード生成には影響しません。

デフォルトは、RAM / 8、RLIMIT_RSS、または確実にしようとする制限の小さい方です。
RLIMIT_DATAまたはRLIMIT_ASを超えることはありませんが、下限は4096です。
(131072メガバイト)および128(XNUMXメガバイト)の上限。 GCCができない場合
特定のプラットフォームでRAMを計算するには、下限が使用されます。 これを設定する
パラメータが非常に大きいと、ガベージコレクションが効果的に無効になります。 これを設定する
パラメータと ggc-min-expand ゼロにすると、すべてのコレクションが発生します
機会。

マックスリロード検索インSNS
命令のリロードの最大数は、同等のものを後方に振り返る必要があります
登録。 値を大きくすると、より積極的な最適化が行われ、
コンパイル時間が長くなり、パフォーマンスがわずかに向上します。 デフォルト
値は100です。

max-cselib-memory-locations
cselibが考慮すべきメモリ位置の最大数。
値を大きくすると、より積極的な最適化が行われ、コンパイル時間が長くなります。
おそらくわずかにパフォーマンスが向上します。 デフォルト値は500です。

並べ替えブロック複製
並べ替えブロック重複フィードバック
無条件分岐を使用するかどうかを決定するために、基本ブロックの並べ替えパスによって使用されます
またはその宛先でコードを複製します。 見積もり時にコードが複製される
サイズは、この値に無条件の推定サイズを掛けた値より小さい
プログラムのホット スポットにジャンプします。

  並べ替えブロック重複フィードバック プロフィールのフィードバックが
よりも高い値に設定できます。 並べ替えブロック複製 から
ホットスポットに関する情報はより正確です。

max-sched-ready-insn
スケジューラーが発行する準備ができている命令の最大数は
最初のスケジューリングパス中の任意の時点で検討してください。 値を増やす
より徹底的な検索を意味し、おそらくコンパイル時間が長くなります
メリットはほとんどありません。 デフォルト値は100です。

最大スケジュール領域ブロック数
ブロック間で考慮される領域内のブロックの最大数
スケジューリング。 デフォルト値は10です。

最大パイプライン領域ブロック数
でパイプライン化を検討する領域内のブロックの最大数
選択的スケジューラ。 デフォルト値は15です。

最大スケジュール領域-insn
ブロック間で考慮される領域内のinsnの最大数
スケジューリング。 デフォルト値は100です。

最大パイプライン領域-insn
パイプラインの対象となる地域のinsnの最大数
選択的スケジューラ。 デフォルト値は200です。

最小スペック確率
ブロック間でソースブロックに到達する最小確率(パーセント)
投機的スケジューリング。 デフォルト値は40です。

max-sched-extend-regions-iters
領域を拡張するための CFG による反復の最大数。 0 - 無効にする
領域拡張、N - 最大 N 回の反復を行います。 デフォルト値は 0 です。

最大スケジュール-INSN-競合遅延
投機的な動きの対象となるinsnの最大競合遅延。
デフォルト値は3です。

スケジュールスペックプロブカットオフ
投機的成功の最小確率(パーセント)、したがって投機的
インを予定しています。 デフォルト値は 40 です。

sched-mem-true-dep-cost
同じメモリを対象とするストアとロード間の最小距離(CPUサイクル単位)
場所。 デフォルト値は1です。

selsched-max-先読み
選択的スケジューリングの先読みウィンドウの最大サイズ。 深みです
利用可能な指示の検索の。 デフォルト値は50です。

selsched-max-sched-times
選択中に命令がスケジュールされる最大回数
スケジューリング。 これは、反復回数の制限です。
命令はパイプライン化される場合があります。 デフォルト値は2です。

selsched-max-insns-to-rename
準備リストで考慮される最良の命令の最大数
選択スケジューラで名前を変更します。 デフォルト値は2です。

sms-分-sc
スイング モジュロ スケジューラが生成するステージ数の最小値。 の
デフォルト値は2です。

最大最後の値-rtl
式に記録できるRTLの数として測定される最大サイズ
そのレジスタの最後の既知の値としての疑似レジスタのコンバイナで。 The
デフォルトは10000です。

整数共有制限
小さな整数定数は共有データ構造を使用できるため、コンパイラの
メモリ使用量とその速度の向上。 これにより、共有の最大値が設定されます
整数定数。 デフォルト値は256です。

最小仮想マッピング
増分 SSA アップデーターでの仮想マッピングの最小数を指定します
によって定義された仮想マッピング ヒューリスティックをトリガーするために登録する必要があります。
仮想マッピング比率。 デフォルト値は 100 です。

仮想マッピング比率
仮想マッピングの数がその数より大きい virtual-mappings-ratio の場合
更新する仮想シンボルの数を超えると、インクリメンタル SSA アップデーターは
これらのシンボルの完全な更新。 デフォルトの比率は 3 です。

ssp-バッファサイズ
スタック破壊を受け取るバッファ (すなわち配列) の最小サイズ
時の保護 -fstack-保護 使用されている。

Ubuntu10.10以前のこのデフォルトは「8」でした。 現在は「4」です。
スタックプロテクターによって保護されている関数の数。

最大ジャンプスレッド重複-stmts
ブロックで許可されるステートメントの最大数。
スレッドジャンプ。

フィールド依存の最大フィールド数
フィールドに依存する方法で処理する構造内のフィールドの最大数
ポインター分析中。 -O0 のデフォルトはゼロ、-O1 と -Os のデフォルトは 100 です。
-O2、および -O3。

プリフェッチレイテンシ
プリフェッチ前に実行される命令の平均数を見積もる
終わります。 プリフェッチする距離は、この定数に比例します。
この数を増やすと、プリフェッチされるストリームが少なくなる可能性もあります(を参照)。
同時プリフェッチ).

同時プリフェッチ
同時に実行できるプリフェッチの最大数。

l1-キャッシュラインサイズ
L1キャッシュのキャッシュラインのサイズ(バイト単位)。

l1-キャッシュサイズ
L1キャッシュのサイズ(キロバイト単位)。

l2-キャッシュサイズ
L2キャッシュのサイズ(キロバイト単位)。

最小インス対プリフェッチ比
命令数とプリフェッチ数の最小比率
ループでのプリフェッチを有効にします。

プリフェッチ最小 insn 対 mem 比
命令数とメモリ数の最小比率
ループでのプリフェッチを有効にするための参照。

使用正規型
コンパイラが「正規」型システムを使用する必要があるかどうか。 デフォルトでは、これ
常に1である必要があります。これは、比較のためにより効率的な内部メカニズムを使用します。
C++およびObjective-C++のタイプ。 ただし、正規型システムのバグが
コンパイルが失敗する場合は、この値を0に設定して、正規型を無効にします。

スイッチ変換最大分岐比
スイッチの初期化変換は、より大きな配列の作成を拒否します
スイッチ変換最大分岐比 スイッチのブランチ数の倍。

最大部分アンティック長
ツリーパーシャル中に計算されたパーシャルアンティックセットの最大長
冗長性除去の最適化(-ftree-pre)で最適化する場合 -O3 以上。
ある種のソースコードでは、部分冗長性の排除が強化されています
最適化が実行され、ホストで使用可能なすべてのメモリが消費される可能性があります
機械。 このパラメーターは、計算されるセットの長さに制限を設定します。
暴走を防ぎます。 このパラメータに値 0 を設定すると、
無制限の設定長を許可します。

sccvn-最大-scc-サイズ
SCCVN処理中の強連結成分(SCC)の最大サイズ。 もしも
この制限に達すると、関数全体の SCCVN 処理は行われず、
それに依存する最適化は無効になります。 デフォルトの最大 SCC サイズは
10000.

ira 最大ループ数
IRAは、デフォルトで地域レジスタ割り当てを使用します。 関数にさらに含まれている場合
このパラメータで指定された数よりも多くの場合、指定された数のループのみ
最も頻繁に実行されるループは、地域レジスタ割り当て用の領域を形成します。
パラメータのデフォルト値は100です。

ira-max-競合テーブルサイズ
IRAは高度なアルゴリズムを使用して競合テーブルを圧縮しますが、
テーブルは、巨大な機能のために依然として過剰な量のメモリを必要とする可能性があります。 の場合
関数の競合テーブルは、これによって指定されたMB単位のサイズを超える可能性があります
パラメータの場合、レジスタアロケータは代わりに、より速く、より単純で、より低いものを使用します-
疑似レジスタ競合テーブルを作成する必要のない高品質のアルゴリズム。
パラメータのデフォルト値は2000です。

ira-loop-reserved-regs
IRAを使用して、決定のためのループ内のより正確なレジスター圧力を評価できます。
ループ不変条件を移動するには(を参照) -O3)。 予約されている使用可能なレジスタの数
他のいくつかの目的は、このパラメーターによって与えられます。 のデフォルト値
パラメータは2です。これは、通常必要なレジスタの最小数です。
指示。 この値は、多くの実験から最もよくわかります。

ループ不変の最大BBSインループ
ループ不変モーションは、コンパイル時間とコンパイル時間の両方で非常にコストがかかる可能性があります
非常に大きなループを伴う、必要なコンパイル時メモリの量。 より多くのループ
このパラメータよりも基本的なブロックには、ループ不変のモーション最適化はありません
それらで実行されました。 パラメータのデフォルト値は、-O1000 および 1 の場合は 10000 です。
-O2 以上の場合。

datadeps のループ最大データ参照
非常に大きなループの場合、データの依存関係を構築するにはコストがかかります。 このパラメータ
データと見なされるループ内のデータ参照の数を制限します
依存分析。 これらの大きなループは、
ループ データの依存関係を使用した最適化。 デフォルト値は 1000 です。

最大vartrackサイズ
可変トラッキングデータフロー中に使用するハッシュテーブルスロットの最大数を設定します
任意の機能の分析。 での可変トラッキングでこの制限を超えた場合
割り当てが有効になっている場合、その関数の分析は、割り当てなしで再試行されます。
関数からすべてのデバッグインを削除します。 なくても制限を超えた場合
デバッグinsns、変数追跡分析は関数に対して完全に無効になっています。
パラメータをゼロに設定すると、無制限になります。

max-vartrack-expr- Depth
変数名をマップしようとしたときの再帰レベルの最大数を設定します。
式を評価するために一時をデバッグします。 これにより、コンパイル時間がさらに短縮されます
完全なデバッグ情報。 これを低く設定しすぎると、次のような値の式になります。
利用可能であり、デバッグ情報で表すことができ、使用されなくなる可能性があります。
これを高く設定すると、コンパイラがより複雑なデバッグを見つけることができる場合があります
式ですが、コンパイル時間とメモリ使用量が増える可能性があります。 デフォルトは12です。

min-nondebug-insn-uid
非デバッグinsnsには、このパラメーターで始まるuidを使用します。 以下の範囲
パラメータは、によって作成されたデバッグinsns専用に予約されています
-fvar-追跡-割り当て、ただし、debug insnsは上記の(重複しない)uidを取得する場合があります
予約範囲を使い果たした場合。

ipa-sra-ptr-成長因子
IPA-SRA は、集約へのポインターを XNUMX つ以上の新しいパラメーターに置き換えます
累積サイズが以下の場合のみ ipa-sra-ptr-成長因子
元のポインターパラメーターのサイズの倍。

tm-max-集計サイズ
トランザクションでスレッドローカル変数のコピーを作成する場合、このパラメーター
変数がログに保存されるまでのサイズをバイト単位で指定します
コードシーケンスペアの保存/復元とは対照的に機能します。 このオプションのみ
使用時に適用されます -fgnu-tm.

グラファイト-max-nb-scop-params
グラファイトループ変換での指数効果を回避するために、
静的制御パーツ(SCoP)のパラメーターには制限があります。 デフォルト値は10です
パラメーター。 コンパイル時に値が不明で定義されている変数
SCoPの外側は、SCoPのパラメーターです。

関数ごとのgraphite-max-bbs
SCoPの検出における指数関数的な影響を回避するために、関数のサイズ
グラファイトによって分析されたものには限界があります。 デフォルト値は100基本ブロックです。

ループ ブロック タイル サイズ
ループブロッキングまたはストリップマイニング変換。 -floop-ブロック or
-floop-strip-mine、ループネスト内の各ループを指定された数だけストリップマイニングします
反復。 ストリップの長さは、 ループ ブロック タイル サイズ
パラメータ。 デフォルト値は51回の反復です。

ipa-cp-値リストのサイズ
IPA-CPは、関数に渡されるすべての可能な値とタイプを追跡しようとします
それらを伝播し、仮想化解除を実行するためのパラメータ。 ipa-cp-値-
リストサイズ XNUMXつのフォーマルごとに格納する値とタイプの最大数です
関数のパラメータ。

lto パーティション
WHOPRのコンパイル中に生成されるパーティションの必要な数を指定します。 The
パーティションの数は、コンパイルに使用されるCPUの数を超える必要があります。 The
デフォルト値は32です。

lto-minパーティション
WHOPRの最小パーティションのサイズ(推定命令)。 これは防止します
非常に小さなプログラムをあまりにも多くのパーティションに分割する費用。

cxx-max-namespaces-for-diagnostic-help
C++の名前検索時に提案を参照するための名前空間の最大数
識別子に失敗します。 デフォルトは1000です。

シンク-周波数-しきい値
ターゲットブロックの最大相対実行頻度(パーセント)
ステートメントの元のブロックと比較して、ステートメントのシンクを可能にします
声明。 数値が大きいほど、ステートメントの沈下がより積極的になります。 The
デフォルト値は75です。小さな正の調整が次のステートメントに適用されます。
メモリオペランドはさらに収益性が高いため、シンクします。

シンクまでの最大ストア数
沈めることができる条件付きストアのペアの最大数。 次の場合は0に設定します
いずれかのベクトル化(-ftree-ベクトル化)またはif-conversion(-ftree-ループ-if-convert)
無効になっています。 デフォルトは2です。

許可ロードデータレース
オプティマイザーがロード時に新しいデータ競合を導入できるようにします。 許可するには 1 に設定します。
それ以外の場合は 0 です。
-fmemory-モデル= オプションを選択します。

ストア データ レースを許可します。
オプティマイザがストアに新しいデータ競合を導入できるようにします。 許可するには1に設定します。
それ以外の場合は 0 です。
-fmemory-モデル= オプションを選択します。

パックロードデータレースを許可する
オプティマイザーがパックされたデータのロードで新しいデータ競合を導入できるようにします。 1 ~ に設定
allow、それ以外の場合は 0。
  -fmemory-モデル= オプションを選択します。

パックストアデータレースの許可
オプティマイザーがパックされたデータ ストアに新しいデータ競合を導入できるようにします。 1 ~ に設定
allow、それ以外の場合は 0。
  -fmemory-モデル= オプションを選択します。

ケース値-しきい値
ジャンプテーブルを使用するのに最適な異なる値の最小数
条件付きブランチのツリーの代わりに。 値が0の場合、デフォルトを使用します
この機械。 デフォルトは0です。

ツリー再結合幅
再関連付けされたツリーで並行して実行される命令の最大数を設定します。
このパラメータは、デフォルトで使用されるターゲット依存のヒューリスティックをオーバーライドします。
ゼロ値。

オプション 制御   プリプロセッサ
これらのオプションは、実際の前に各Cソースファイルで実行されるCプリプロセッサを制御します
コンパイル。

あなたが使用している場合 -E オプションの場合、前処理以外は何も行われません。 これらのオプションのいくつか
と一緒にのみ意味をなす -E プリプロセッサの出力が
実際のコンパイルには適していません。

-Wp、オプション
あなたが使用することができます -Wp、オプション コンパイラドライバをバイパスして渡す オプション 直接スルー
プリプロセッサに。 もしも オプション カンマが含まれ、で複数のオプションに分割されます
カンマ。 ただし、多くのオプションは、によって変更、翻訳、または解釈されます。
プリプロセッサに渡される前のコンパイラドライバ、および -Wp 強制的にバイパスする
このフェーズ。 プリプロセッサの直接インターフェイスは文書化されておらず、
変更するので、可能な限り使用を避ける必要があります -Wp ドライバーに処理させます
代わりにオプション。

-Xプリプロセッサ オプション
合格 オプション プリプロセッサのオプションとして。 これを使用してシステムを供給することができます-
GCC が認識できない特定のプリプロセッサ オプション。

引数を取るオプションを渡したい場合は、次を使用する必要があります -Xプリプロセッサ
XNUMX回、オプション用にXNUMX回、引数用にXNUMX回。

-D
事前定義 定義1のマクロとして。

-D =定義
の内容 定義 トークン化され、
翻訳フェーズXNUMX #定義する 指令。 特に、定義は次のようになります
埋め込まれた改行文字によって切り捨てられます。

シェルまたはシェルのようなプログラムからプリプロセッサを呼び出す場合は、必要になることがあります
シェルの引用構文を使用して、スペースなどの文字を保護します。
シェル構文での意味。

コマンドラインで関数のようなマクロを定義する場合は、その引数を記述します
等号(存在する場合)の前に括弧を付けてリストします。 括弧は
ほとんどのシェルにとって意味があるので、オプションを引用する必要があります。 と sh & CSH,
-NS'(引数..。)=定義' 作品。

-D & -U オプションは、コマンドラインで指定された順序で処理されます。 全て
-イマクロス file & -含める file オプションは結局処理されます -D & -U オプション。

-U
以前の定義をキャンセルします 、組み込みまたは付属のいずれか -D オプションを選択します。

-未定義
システム固有またはGCC固有のマクロを事前定義しないでください。 事前定義された標準
マクロは定義されたままです。

-I DIR
ディレクトリを追加します DIR ヘッダーファイルを検索するディレクトリのリストに移動します。
によって名付けられたディレクトリ -I 標準システムにディレクトリが含まれる前に検索されます。
ディレクトリの場合 DIR 標準のシステムインクルードディレクトリである場合、このオプションは無視されます。
システムディレクトリのデフォルトの検索順序と特別な処理を確認してください
システムヘッダーの数は無効になりません。 もしも DIR 「=」で始まり、「=」は
sysrootプレフィックスに置き換えられました。 見る --sysroot & -isysroot.

-o file
出力をに書き込む file。 これは指定するのと同じです file XNUMX番目の非オプションとして
への議論 cpp. gccの XNUMX番目の非オプション引数の解釈が異なります。
だからあなたは使用する必要があります -o 出力ファイルを指定します。

-壁
通常のコードに必要なすべてのオプションの警告をオンにします。 現在これ
is -コメント, -筆文字, -Wmultichar 整数の昇格に関する警告が原因で
「#if」式の符号の変更。 プリプロセッサの警告の多くに注意してください
デフォルトでオンになっており、それらを制御するオプションはありません。

-コメント
-コメント
コメント開始シーケンスが発生するたびに警告する /* に表示されます /* コメント、またはいつでも
バックスラッシュ-改行はに表示されます // コメント。 (どちらの形式も同じ効果があります。)

-筆文字
コメント内のほとんどのトリグラフは、プログラムの意味に影響を与えることはできません。 ただし、
エスケープされた改行を形成するトリグラフ(?? / 行の終わりに)できます、によって
コメントの開始位置または終了位置を変更します。 したがって、形成される三重音字のみ
エスケープされた改行は、コメント内に警告を生成します。

このオプションは、 -壁。 場合 -壁 が指定されていない場合、このオプションは引き続き有効です
トリーグラフが有効になっていない限り。 警告なしでトリグラフ変換を取得するには、
他の -壁 警告、使用 -三重音字 -壁 -Wno-トライグラフ.

-伝統的な
従来のCとISOCでは動作が異なる特定の構造について警告します。
従来のCに相当するものがなく、問題のあるISOC構造について警告する
避けるべき構成。

- ウンデフ
マクロではない識別子が #もし ディレクティブは、
の外 定義済みの。 このような識別子はゼロに置き換えられます。

-Wunused-マクロ
メインファイルで定義されている未使用のマクロについて警告します。 マクロは 中古 もしそれが
少なくともXNUMX回は拡張または存在のテストを行いました。 プリプロセッサは、次の場合にも警告します。
マクロは、再定義または未定義の時点では使用されていません。

組み込みマクロ、コマンドラインで定義されたマクロ、およびincludeで定義されたマクロ
ファイルについては警告されません。

注: マクロが実際に使用されているが、スキップされた条件ブロックでのみ使用されている場合、
CPPはそれを未使用として報告します。 このような場合の警告を回避するには、改善する可能性があります
たとえば、最初にスキップされたマクロに移動することによる、マクロの定義の範囲
ブロック。 または、次のようなダミーの使用法を提供することもできます。

#if定義されたthe_macro_causing_the_warning
#endif

-ウェンディフ-ラベル
いつでも警告する #その他 または #endif テキストが続きます。 これは通常、
フォームのコード

#if FOO
...
#else FOO
...
#endif FOO

XNUMX番目とXNUMX番目の「FOO」はコメントに含める必要がありますが、多くの場合、古いプログラムには含まれていません。
この警告はデフォルトでオンになっています。

-エラー
すべての警告をハードエラーにします。 警告をトリガーするソースコードは次のようになります
拒否されました。

-Wsystem-ヘッダー
システムヘッダーのコードに対して警告を発行します。 これらは通常、見つけるのに役立ちません
したがって、独自のコードのバグは抑制されます。 あなたがシステムに責任がある場合
ライブラリ、あなたはそれらを見たいかもしれません。

-w GNU CPPがデフォルトで発行する警告を含め、すべての警告を抑制します。

-衒学者
C標準にリストされているすべての必須診断を発行します。 それらのいくつかは残っています
無害なコードで頻繁にトリガーされるため、デフォルトでアウトになります。

-衒学的エラー
すべての必須診断を発行し、すべての必須診断をエラーにします。
これには、GCCが発行せずに発行する必須の診断が含まれます -衒学者 しかし、として扱います
警告。

-M 前処理の結果を出力する代わりに、次のようなルールを出力します。 make
メインソースファイルの依存関係を説明します。 プリプロセッサはXNUMXつを出力します
make そのソースファイルのオブジェクトファイル名、コロン、および名前を含むルール
からのものを含む、含まれているすべてのファイルの -含める or -イマクロス command
ラインオプション。

明示的に指定されていない限り( -MT or -MQ)、オブジェクトファイル名はで構成されます
接尾辞がオブジェクトファイルの接尾辞および任意の接尾辞に置き換えられたソースファイルの名前
主要なディレクトリ部分が削除されました。 含まれているファイルが多い場合、ルールは次のとおりです。
を使用していくつかの行に分割 \-改行。 ルールにはコマンドがありません。

このオプションは、次のようなプリプロセッサのデバッグ出力を抑制しません。 -dM。 避けるために
このようなデバッグ出力を依存関係ルールと混合するには、明示的に指定する必要があります
依存関係の出力ファイル -MF、または次のような環境変数を使用します
DEPENDENCIES_OUTPUT。 デバッグ出力は、引き続き通常の出力ストリームに送信されます。
ノーマル。

通過 -M ドライバーに暗示する -E、および暗黙的な警告を抑制します -w.

-んん いいね -M ただし、システムヘッダーディレクトリにあるヘッダーファイルについては言及しないでください。
また、そのようなヘッダーから直接的または間接的にインクルードされるヘッダーファイルもありません。

これは、山括弧または二重引用符の選択が #include
ディレクティブ自体は、そのヘッダーがに表示されるかどうかを決定しません -んん
依存関係の出力。 これは、GCCバージョン3.0および
早く

-MF file
と一緒に使用する場合 -M or -んん、依存関係を書き込むファイルを指定します。 いいえの場合 -MF
スイッチには、プリプロセッサが送信したのと同じ場所にルールを送信するように指定されています
前処理された出力。

ドライバーオプションと併用した場合 -MD or -MMD, -MF デフォルトの依存関係を上書きします
出力ファイル。

-MG 次のようなオプションと組み合わせて -M 依存関係の生成を要求し、 -MG と仮定する
欠落しているヘッダーファイルは生成されたファイルであり、それらを依存関係リストに追加します。
エラーが発生します。 依存関係のファイル名は「#include」から直接取得されます
パスを付加せずにディレクティブ。 -MG また、前処理された出力を抑制します。
ヘッダーファイルがないと、これは役に立たなくなります。

この機能は、makefileの自動更新で使用されます。

-MP このオプションは、CPPに、依存関係以外の依存関係ごとに偽のターゲットを追加するように指示します。
メインファイル。それぞれが何にも依存しないようにします。 これらのダミールールはエラーを回避します
make を更新せずにヘッダーファイルを削除すると、 メークファイル 合わせる。

これは典型的な出力です:

test.o:test.c test.h

test.h:

-MT ターゲット
依存関係の生成によって発行されるルールのターゲットを変更します。 デフォルトでは、CPPは
メイン入力ファイルの名前、ディレクトリコンポーネントとファイルサフィックスを削除します
など .c、およびプラットフォームの通常のオブジェクトサフィックスを追加します。 結果が目標です。

An -MT オプションは、ターゲットを指定した文字列とまったく同じになるように設定します。 お望みならば
複数のターゲットの場合、それらを単一の引数として指定できます。 -MT、または複数を使用する
-MT オプション。

たとえば、 -MT '$(objpfx)foo.o' 与えるかもしれない

$(objpfx)foo.o:foo.c

-MQ ターゲット
と同じ -MT、ただし、Makeに特別な文字を引用します。
-MQ '$(objpfx)foo.o' 与える

$$(objpfx)foo.o:foo.c

デフォルトのターゲットは、で与えられたかのように自動的に引用されます -MQ.

-MD -MD に相当します -M -MF file、 それ以外で -E 暗示されていません。 ドライバ
決定する file かどうかに基づいて -o オプションが与えられます。 そうである場合、ドライバーは
引数ですが、接尾辞は .d、それ以外の場合は、入力ファイルの名前を取ります。
ディレクトリコンポーネントとサフィックスを削除し、 .d サフィックス。

If -MD とともに使用されます -E、 どれか -o スイッチは、
依存関係の出力ファイルですが、使用しない場合 -E、それぞれ -o 指定することは理解されます
ターゲットオブジェクトファイル。

Since -E 暗示されていません、 -MD 依存関係出力ファイルを次のように生成するために使用できます
コンパイルプロセスの副作用。

-MMD
いいね -MD ただし、システムヘッダーファイルではなく、ユーザーヘッダーファイルのみに言及します。

-fpch-deps
プリコンパイル済みヘッダーを使用する場合、このフラグにより​​、依存関係出力フラグが次のようになります。
また、プリコンパイル済みヘッダーの依存関係からファイルを一覧表示します。 指定されていない場合のみ
プリコンパイル済みヘッダーが一覧表示され、作成に使用されたファイルは一覧表示されません。
プリコンパイル済みヘッダーを使用する場合、これらのファイルは参照されないためです。

-fpch-前処理
このオプションを使用すると、プリコンパイル済みヘッダーを一緒に使用できます -E。 スペシャルを挿入します
"#pragma"、 "#pragma GCC pch_preprocess"ファイル名"" 場所をマークするために出力で
プリコンパイル済みヘッダーが見つかった場所とその ファイル名。 時 -f前処理済み である
使用すると、GCCはこの「#pragma」を認識してPCHをロードします。

結果の前処理された出力はのみであるため、このオプションはデフォルトでオフになっています
GCCへの入力として非常に適しています。 によってオンになります -一時保存.

この「#pragma」を独自のコードで記述しないでください。ただし、
PCHファイルが別の場所にある場合はファイル名。 ファイル名は次のようになります
絶対またはGCCの現在のディレクトリに相対的である可能性があります。

-x c
-x C ++
-x Objective-c
-x アセンブラ-with-cpp
ソース言語(C、C ++、Objective-C、またはアセンブリ)を指定します。 これは何の関係もありません
標準への適合または拡張。 それは単にどの基本構文を選択するかを選択するだけです
予想。 これらのオプションのいずれも指定しない場合、cppはから言語を推測します
ソースファイルの拡張子: .c, .ccに, .mまたは .S。 のその他の一般的な拡張機能
C ++とアセンブリも認識されます。 cppが拡張子を認識しない場合は、
ファイルをCとして扱います。 これは最も一般的なモードです。

注: 以前のバージョンのcppは -言語 両方を選択したオプション
言語と規格の適合レベル。 このオプションは削除されました。
それはと競合します -l オプションを選択します。

-std =標準
-アンシ
コードが準拠する標準を指定します。 現在、CPPはCについて知っています
およびC ++標準。 その他は将来追加される可能性があります。

標準 次のいずれかである可能性があります。

「c90」
「c89」
「iso9899:1990」
1990年からのISOC標準。 c90 このバージョンの通常の省略形です
標準。

  -アンシ オプションはと同等です -std = c90.

「iso9899:199409」
1990年に修正された1994C規格。

「iso9899:1999」
「c99」
「iso9899:199x」
「c9x」
1999年XNUMX月に公開された改訂ISOC標準。公開前は、
C9Xとして知られていました。

「iso9899:2011」
「c11」
「c1x」
2011年XNUMX月に公開された改訂ISOC標準。公開前は、
C1Xとして知られていました。

「gnu90」
「gnu89」
1990C標準とGNU拡張。 これがデフォルトです。

「gnu99」
「gnu9x」
1999C標準とGNU拡張。

「gnu11」
「gnu1x」
2011C標準とGNU拡張。

「c ++ 98」
1998年のISOC ++標準と修正。

「gnu ++ 98」
と同じ -std = c ++ 98 プラスGNU拡張。 これはC ++コードのデフォルトです。

-I- インクルードパスを分割します。 で指定されたディレクトリ -I 前のオプション -I-  
「#include」でリクエストされたヘッダーのみを検索ファイル""; それらは検索されません
"#含むファイル> "。 追加のディレクトリがで指定されている場合 -I 後のオプション
-I-、それらのディレクトリはすべて検索されます #include ディレクティブ

加えて、 -I- 現在のファイルディレクトリのディレクトリの使用を禁止します。
「#include」の最初の検索ディレクトリファイル""。 このオプションは非推奨になりました。

-ノストディンク
標準のシステムディレクトリでヘッダーファイルを検索しないでください。 ディレクトリのみ
あなたが指定した -I オプション(および現在のファイルのディレクトリ(場合は)
適切な)が検索されます。

-nostdinc ++
C ++固有の標準ディレクトリでヘッダーファイルを検索しないでください。ただし、それでも検索してください。
他の標準ディレクトリを検索します。 (このオプションは、C ++をビルドするときに使用されます
図書館。)

-含める file
プロセス file 「#include "file"」が一次資料の最初の行として表示されたかのように
ファイル。 ただし、最初に検索されたディレクトリ file プリプロセッサの動作です
ディレクトリにジョブを開始します。 を取得する必要がある者 of メインソースファイルを含むディレクトリ。 見つからない場合
そこでは、「#include "..."」検索チェーンの残りの部分で次のように検索されます。
ノーマル。

複数の場合 -含める オプションが与えられ、ファイルはそれらの順序で含まれます
コマンドラインに表示されます。

-イマクロス file
まさにそのように -含める、スキャンによって生成された出力を除く file スローされます
あちらへ。 それが定義するマクロは定義されたままです。 これにより、すべてのマクロを取得できます
宣言も処理せずにヘッダーから。

によって指定されたすべてのファイル -イマクロス によって指定されたすべてのファイルの前に処理されます -含める.

-idirafter DIR
を検索 DIR ヘッダーファイルの場合ですが、実行してください After で指定されたすべてのディレクトリ -I
標準のシステムディレクトリが使い果たされました。 DIR システムインクルードとして扱われます
ディレクトリ。 もしも DIR 「=」で始まり、「=」はsysrootに置き換えられます
プレフィックス; 見る --sysroot & -isysroot.

-iprefix 接頭辞
指定 接頭辞 後続のプレフィックスとして -iwithprefix オプション。 プレフィックスの場合
ディレクトリを表します。最後のファイルを含める必要があります /.

-iwithprefix DIR
-iwithprefixbefore DIR
追加 DIR 以前に指定されたプレフィックスに -iprefix、結果を追加します
インクルード検索パスへのディレクトリ。 -iwithprefixbefore 同じ場所に置きます -I
NS; -iwithprefix どこに置くか -idirafter

-isysroot DIR
このオプションは、 --sysroot オプションですが、ヘッダーファイルにのみ適用されます(ただし
ダーウィンターゲット。ヘッダーファイルとライブラリの両方に適用されます)。 を参照してください
--sysroot 詳細については、オプションを参照してください。

-imultilib DIR
  DIR ターゲット固有のC ++ヘッダーを含むディレクトリのサブディレクトリとして。

-isystem DIR
を検索 DIR ヘッダーファイルの場合、によって指定されたすべてのディレクトリの後 -I しかし、前に
標準のシステムディレクトリ。 同じになるように、システムディレクトリとしてマークします
標準のシステムディレクトリに適用される特別な処理。 もしも DIR 始まります
「=」を使用すると、「=」はsysrootプレフィックスに置き換えられます。 見る --sysroot &
-isysroot.

-iquote DIR
を検索 DIR 「#include」でリクエストされたヘッダーファイルのみファイル""; ではない
「#include」を検索ファイル> "、によって指定されたすべてのディレクトリの前 -I と前に
標準のシステムディレクトリ。 もしも DIR 「=」で始まり、「=」はに置き換えられます
sysrootプレフィックス。 見る --sysroot & -isysroot.

-fdirectives-のみ
前処理するときは、ディレクティブを処理しますが、マクロは展開しません。

オプションの動作は、 -E & -f前処理済み オプション。

-E、前処理は「#define」などのディレクティブの処理に制限されています。
「#ifdef」、「#error」。 マクロ展開や
トリグラフ変換は実行されません。 加えて -dD オプションは暗黙的に
有効になりました。

-f前処理済み、コマンドラインとほとんどの組み込みマクロの事前定義は
無効。 コンテキストに依存する「__LINE__」などのマクロが処理されます
通常は。 これにより、以前に「-E」で前処理されたファイルのコンパイルが可能になります。
-fdirectives-only」。

両方と -E & -f前処理済み、のルール -f前処理済み 優先します。 この
以前に「-E」で前処理されたファイルの完全な前処理を有効にします
-fdirectives-only」。

-fdollars-in-identifiers
同意 $ 識別子で。

-拡張識別子
識別子にユニバーサル文字名を受け入れます。 このオプションは実験的なものです。 で
GCCの将来のバージョンでは、C99およびC ++でデフォルトで有効になります。

-f前処理済み
入力ファイルがすでに前処理されていることをプリプロセッサーに示します。 この
マクロ展開、トリグラフ変換、エスケープされた改行スプライシングなどを抑制します。
ほとんどのディレクティブの処理。 プリプロセッサは引き続き認識して削除します
コメント、前処理されたファイルを渡すことができるように -C なしでコンパイラに
問題。 このモードでは、統合されたプリプロセッサはトークナイザーにすぎません。
フロントエンド用。

-f前処理済み 入力ファイルに拡張子のXNUMXつがある場合、暗黙的です .i, .ii or .mi.
これらは、GCCがによって作成された前処理済みファイルに使用する拡張機能です。 -一時保存.

-ftabstop =
タブストップ間の距離を設定します。 これは、プリプロセッサが正しい列を報告するのに役立ちます
タブが行に表示されている場合でも、警告またはエラーの番号。 値が小さい場合
1より大きいか100より大きい場合、このオプションは無視されます。 デフォルトは8です。

-fdebug-cpp
このオプションは、GCCのデバッグにのみ役立ちます。 と一緒に使用する場合 -E、デバッグをダンプします
ロケーションマップに関する情報。 出力内のすべてのトークンの前に、
その場所が属するマップ。 トークンの場所を保持しているマップのダンプ
だろう:

{"P":F ; "F":F ; "L": ;"NS": ;"NS": ;"NS": ; "E": 、 "loc": }

なしで使用した場合 -E、このオプションは効果がありません。

-ftrack-マクロ展開[=レベル]
マクロ展開全体でトークンの場所を追跡します。 これにより、コンパイラは
でコンパイルエラーが発生したときの現在のマクロ拡張スタックに関する診断
マクロ展開。 このオプションを使用すると、プリプロセッサとコンパイラが消費します
より多くのメモリ。 NS レベル パラメータを使用して、トークンの精度のレベルを選択できます
したがって、位置追跡により、必要に応じてメモリ消費量が削減されます。 価値 0 of
レベル いいえのようにこのオプションを無効にします -ftrack-マクロ展開 に存在していた
コマンドライン。 価値 1 のために劣化モードでトークンの場所を追跡します
最小限のメモリオーバーヘッド。 このモードでは、拡張の結果として生じるすべてのトークン
関数のようなマクロの引数は同じ場所にあります。 価値 2 トークンを追跡する
完全に場所。 この値は、最もメモリを消費します。 このオプションが与えられたとき
引数なし、デフォルトのパラメータ値は 2.

-fexec-charset =文字セット
文字列および文字定数に使用される実行文字セットを設定します。 デフォルト
UTF-8です。 文字セット システムの「iconv」ライブラリでサポートされている任意のエンコーディングにすることができます
ルーチン。

-fwide-exec-charset =文字セット
ワイド文字列および文字定数に使用されるワイド実行文字セットを設定します。
デフォルトは、「wchar_t」の幅に対応するUTF-32またはUTF-16です。 NS
  -fexec-文字セット, 文字セット システムの「iconv」でサポートされている任意のエンコーディングにすることができます
ライブラリルーチン; ただし、適合しないエンコーディングでは問題が発生します
正確には「wchar_t」にあります。

-finput-charset =文字セット
入力の文字セットからの変換に使用される入力文字セットを設定します
GCCで使用されるソース文字セットへのファイル。 ロケールで指定されていない場合、またはGCC
ロケールからこの情報を取得することはできません。デフォルトはUTF-8です。 これは可能性があります
ロケールまたはこのコマンドラインオプションのいずれかによって上書きされます。 現在、コマンド
競合がある場合は、lineオプションが優先されます。 文字セット 任意のエンコーディングにすることができます
システムの「iconv」ライブラリルーチンでサポートされています。

-fworkingディレクトリ
プリプロセッサ出力でラインマーカーの生成を有効にして、コンパイラを許可します
前処理時に現在の作業ディレクトリを知っている。 このオプションが
有効にすると、プリプロセッサは最初のラインマーカーの後にXNUMX番目のラインマーカーを出力します
現在の作業ディレクトリの後にXNUMXつのスラッシュが続きます。 GCCはこれを使用します
前処理された入力に存在する場合、ディレクトリは次のように発行されます。
一部のデバッグ情報形式の現在の作業ディレクトリ。 このオプションは
デバッグ情報が有効になっている場合は暗黙的に有効になりますが、これは次の方法で禁止できます。
否定された形式 -fno-作業ディレクトリ。 もし -P コマンドにフラグがあります
lineの場合、「#line」ディレクティブはまったく発行されないため、このオプションは効果がありません。

-fno-show-column
診断で列番号を印刷しないでください。 これは、診断が
次のような列番号を理解しないプログラムによってスキャンされている
デジャグヌ.

-A 述語=回答
述語でアサーションを作成します 述語 そして答える 回答。 このフォームは
古い形式よりも優先 -A 述語(回答)、それはまだサポートされているので、
シェルの特殊文字は使用しません。

-A -述語=回答
述部を使用してアサーションをキャンセルします 述語 そして答える 回答.

-dCHARS
文字 次のXNUMXつ以上の文字のシーケンスであり、次の文字であってはなりません。
スペースが前に付きます。 他の文字は、コンパイラーによって適切に解釈されます。
GCCの将来のバージョン用に予約されているため、黙って無視されます。 指定した場合
動作が競合する文字の場合、結果は未定義です。

M 通常の出力の代わりに、次のリストを生成します #定義する すべてのディレクティブ
プリプロセッサの実行中に定義されたマクロ(事前定義されたものを含む)
マクロ。 これにより、のバージョンで事前定義されているものを見つける方法が得られます。
プリプロセッサ。 ファイルがないと仮定します ふー。、 コマンド

foo.hに触れます。 cpp -dM foo.h

事前定義されたすべてのマクロが表示されます。

あなたが使用している場合 -dM なしで -E オプション、 -dM の同義語として解釈されます
-fdump-rtl-mach.

D いいね M XNUMXつの点を除いて:それはします 事前定義されたマクロを含め、
outputs 両言語で   #定義する ディレクティブと前処理の結果。 両方の種類
出力のは標準出力ファイルに送られます。

N いいね D、ただし、マクロ名のみを出力し、展開は出力しません。

I 出力 #include 前処理の結果に加えてディレクティブ。

U いいね D ただし、展開されたマクロ、または定義がテストされたマクロのみ
プリプロセッサディレクティブでは、出力されます。 出力は使用するまで遅延しますまたは
マクロのテスト; と #undef テストされたマクロのディレクティブも出力されますが
当時は未定義。

-P プリプロセッサからの出力でのラインマーカーの生成を禁止します。 これは
Cコードではないものでプリプロセッサを実行するときに役立ち、送信されます
ラインマーカーによって混乱する可能性のあるプログラムに。

-C コメントを破棄しないでください。 すべてのコメントは、出力ファイルに渡されます。
ディレクティブとともに削除される、処理されたディレクティブ内のコメントの場合。

使用するときは副作用に備える必要があります -C; それはプリプロセッサに
コメントはそれ自体がトークンとして扱います。 たとえば、に表示されるコメント
ディレクティブラインとなるものの開始は、そのラインをに変える効果があります
通常のソース行。行の最初のトークンはもはや #.

-CC マクロ展開中も含め、コメントを破棄しないでください。 これは -C除きます
マクロに含まれるコメントは、出力ファイルにも渡されます。
マクロが展開されます。

の副作用に加えて -C オプション、 -CC オプションはすべてのC ++スタイルを引き起こします
Cスタイルのコメントに変換されるマクロ内のコメント。 これは後で防ぐためです
ソース行の残りの部分を誤ってコメントアウトすることによるそのマクロの使用。

  -CC オプションは通常、lintコメントをサポートするために使用されます。

-従来の-cpp
ISO Cではなく、昔ながらのCプリプロセッサの動作を模倣してみてください
プリプロセッサ。

-三重音字
トリーグラフシーケンスを処理します。 これらはXNUMX文字のシーケンスであり、すべて
??、単一文字を表すためにISOCによって定義されています。 例えば、 ?? / スタンド
for \ので、 '?? / n' 改行の文字定数です。 デフォルトでは、GCCは無視します
トリーグラフですが、標準準拠モードでは変換されます。 を参照してください -標準 & -アンシ
オプション。

XNUMXつの三重音字とその代替は

三重音字:??(??)?? <??> ?? = ?? / ?? ' ??! ??-
置換:[] {}#\ ^ | 〜

-リマップ
非常に短いファイルのみを許可するファイルシステムを回避するための特別なコードを有効にする
MS-DOSなどの名前。

- 助けて
--ターゲットヘルプ
何も前処理する代わりに、すべてのコマンドラインオプションを説明するテキストを印刷します。

-v 冗長モード。 実行開始時にGNUCPPのバージョン番号を出力し、
インクルードパスの最終形式を報告します。

-H 他の通常のアクティビティに加えて、使用される各ヘッダーファイルの名前を出力します。 各
名前はインデントされて、 #include スタックです。 プリコンパイル済みヘッダー
無効であることが判明した場合でも、ファイルも印刷されます。 無効なプリコンパイル済み
ヘッダーファイルは ...NS と有効なもの !... .

-バージョン
- バージョン
GNUCPPのバージョン番号を印刷します。 ダッシュXNUMXつで、通常どおり前処理に進みます。
XNUMXつのダッシュで、すぐに終了します。

通過 オプション 〜へ   アセンブラ
オプションをアセンブラに渡すことができます。

-わ、オプション
合格 オプション アセンブラのオプションとして。 もしも オプション カンマが含まれ、分割されます
カンマで複数のオプションに。

-Xアセンブラー オプション
合格 オプション アセンブラのオプションとして。 これを使用して、システム固有の供給を行うことができます
GCC が認識する方法がわからないアセンブラー オプション。

引数を取るオプションを渡したい場合は、次を使用する必要があります -Xアセンブラー 二度
オプション用にXNUMX回、引数用にXNUMX回。

オプション for 連結
これらのオプションは、コンパイラがオブジェクトファイルを実行可能ファイルにリンクするときに機能します
出力ファイル。 コンパイラがリンクステップを実行していない場合、これらは無意味です。

オブジェクトファイル名
特別に認識されたサフィックスで終わらないファイル名は、
オブジェクトファイルまたはライブラリ。 (オブジェクトファイルは、リンカーによってライブラリと区別されます
ファイルの内容に応じて。)リンクが行われる場合、これらのオブジェクトファイルは次のように使用されます。
リンカへの入力。

-c
-S
-E これらのオプションのいずれかが使用されている場合、リンカーは実行されず、オブジェクトファイル名
引数として使用しないでください。

-lライブラリ
-l ライブラリ
という名前のライブラリを検索します ライブラリ リンクするとき。 (XNUMX番目の選択肢
個別の引数としてのライブラリは、POSIX準拠のみを目的としており、お勧めしません。)

コマンドのどこにこのオプションを書くかによって違いが生じます。 リンカー検索
ライブラリとオブジェクトファイルを指定された順序で処理します。 したがって、 ふー。
-lz バーオー ライブラリを検索 z ファイル後 ふー。 しかし、前に バーオー。 場合 バーオー を指します
の機能 z、これらの関数はロードされない場合があります。

リンカは、ディレクトリの標準リストでライブラリを検索します。これは実際には
名前の付いたファイル ライブラリ.a。 リンカは、このファイルを指定されているかのように使用します
正確には名前で。

検索されるディレクトリには、いくつかの標準システムディレクトリに加えて、
で指定する -L.

通常、この方法で見つかったファイルはライブラリファイルです---メンバーが
オブジェクトファイル。 リンカは、アーカイブファイルをスキャンしてメンバーを探すことにより、アーカイブファイルを処理します
これまでに参照されているが定義されていないシンボルを定義します。 しかし、
見つかったファイルは通常のオブジェクトファイルであり、通常の方法でリンクされています。 The
使用の違いのみ -l オプションとファイル名の指定はそれです -l
サラウンド ライブラリ   リブ & .a いくつかのディレクトリを検索します。

-lobjc
あなたはこの特別な場合が必要です -l Objective-Cまたはをリンクするためのオプション
目的-C++プログラム。

-nostartfiles
リンクするときは、標準のシステムスタートアップファイルを使用しないでください。 標準システム
ライブラリは通常使用されますが、 -nostdlib or -nodefaultlibs 使用されている。

-nodefaultlibs
リンクするときは、標準のシステムライブラリを使用しないでください。 指定したライブラリのみ
システム ライブラリのリンケージを指定するオプションなど、リンカに渡されます。
「-static-libgcc」または「-shared-libgcc」として、無視されます。 標準の起動ファイル
場合を除き、通常どおり使用されます。 -nostartfiles 使用されている。 コンパイラは、への呼び出しを生成する場合があります。
「memcmp」、「memset」、「memcpy」、「memmove」。 これらのエントリは通常、
libc のエントリ。 これらのエントリ ポイントは、他のメカニズムを通じて提供する必要があります。
このオプションが指定されている場合。

-nostdlib
リンクするときは、標準のシステムスタートアップファイルまたはライブラリを使用しないでください。 スタートアップなし
ファイルと指定したライブラリのみがリンカー、オプションに渡されます
「-static-libgcc」などのシステム ライブラリのリンケージを指定するか、
「-shared-libgcc」は無視されます。 コンパイラは「memcmp」への呼び出しを生成する場合があります。
「memset」、「memcpy」、「memmove」。 これらのエントリは通常、
libc。 これらのエントリ ポイントは、この場合、他のメカニズムを介して提供する必要があります。
オプションが指定されています。

によってバイパスされた標準ライブラリのXNUMXつ -nostdlib & -nodefaultlibs is libgcc.a
特定の欠点を克服するためにGCCが使用する内部サブルーチンのライブラリ
マシン、またはいくつかの言語の特別なニーズ。

ほとんどの場合、 libgcc.a 他の標準ライブラリを避けたい場合でも。
言い換えれば、あなたが指定するとき -nostdlib or -nodefaultlibs あなたは通常すべきです
指定する -lgcc 同じように。 これにより、への未解決の参照がないことが保証されます
内部 GCC ライブラリ サブルーチン。 (例えば、 __主要、C++ を保証するために使用されます
コンストラクターが呼び出されます。)

-パイ
それをサポートするターゲット上で位置に依存しない実行可能ファイルを生成します。 予測可能
コードの生成に使用されたものと同じオプション セットも指定する必要があります。
(-fpie, -fPIE、またはモデル サブオプション) を指定すると、このオプションが指定されます。

-rdynamic
旗を渡す -エクスポート-動的 ELFリンカーに、それをサポートするターゲット上で。 これ
使用済みのシンボルだけでなく、すべてのシンボルを動的シンボルに追加するようにリンカに指示します
テーブル。 このオプションは、「dlopen」の一部の使用または取得を可能にするために必要です。
プログラム内からのバックトレース。

-s 実行可能ファイルからすべてのシンボルテーブルと再配置情報を削除します。

-静的
ダイナミックリンクをサポートするシステムでは、これにより共有リンクとのリンクが妨げられます
ライブラリ。 他のシステムでは、このオプションは効果がありません。

-共有
共有オブジェクトを作成します。このオブジェクトを他のオブジェクトとリンクして、
実行可能。 すべてのシステムがこのオプションをサポートしているわけではありません。 予測可能な結果を​​得るには、
また、コードの生成に使用されたのと同じ一連のオプションを指定します (-fpic, -fPICまたは
このオプションを指定する場合) [1]

-共有-libgcc
-静的-libgcc
を提供するシステム上 libgcc 共有ライブラリとして、これらのオプションは
それぞれ共有バージョンまたは静的バージョンのいずれかです。 の共有バージョンがない場合 libgcc ました
コンパイラーの構成時にビルドされた場合、これらのオプションは効果がありません。

アプリケーションが共有を使用する必要があるいくつかの状況があります libgcc
静的バージョンの代わりに。 これらの中で最も一般的なのは、アプリケーションが
異なる共有ライブラリ間で例外をスローしてキャッチしたいと考えています。 その場合、
各ライブラリとアプリケーション自体は、共有を使用する必要があります libgcc.

したがって、G++およびGCJドライバーは自動的に追加します -共有-libgcc あなたが構築するときはいつでも
C ++およびJavaプログラムは通常、共有ライブラリまたはメインの実行可能ファイルを使用するため、
例外なので、これは正しいことです。

代わりに、GCCドライバーを使用して共有ライブラリーを作成すると、それらが共有ライブラリーであることがわかります。
常に共有にリンクされるとは限りません libgcc。 GCCが検出した場合、その構成で
時間、オプションをサポートしていない非GNUリンカーまたはGNUリンカーがあること
--ええ-フレーム-hdr、それはの共有バージョンをリンクします libgcc 共有ライブラリに
デフォルト。 それ以外の場合は、リンカーを利用して最適化し、
の共有バージョンとのリンク libgcc、静的バージョンの libgcc とのリンク
デフォルトで。 これにより、そのような共有ライブラリを介して例外が伝播されます。
ライブラリの読み込み時に再配置コストが発生することはありません。

ただし、ライブラリまたはメインの実行可能ファイルが例外をスローまたはキャッチすることになっている場合は、
で使用される言語に応じて、G++またはGCJドライバーを使用してリンクする必要があります
プログラム、またはオプションを使用して -共有-libgcc、共有とリンクされるように
libgcc.

-static-libstdc ++
g ++ program を使用して C++ プログラムをリンクすると、通常は自動的に
に対するリンク libstdc ++。 場合 libstdc ++ 共有ライブラリとして利用可能であり、
-静的 オプションが使用されていない場合、これは共有バージョンの
libstdc ++. それは通常問題ありません。 ただし、凍結すると便利な場合があります。
のバージョン libstdc ++ 完全に静的になることなくプログラムによって使用される
リンク。 NS -static-libstdc ++ オプションは g ++ リンクするドライバー libstdc ++
静的に、必ずしも他のライブラリを静的にリンクする必要はありません。

-シンボリック
共有オブジェクトを構築するときに、参照をグローバルシンボルにバインドします。 何かについて警告する
未解決の参照(リンクエディタオプションで上書きされない限り) -Xリンカー -z
-Xリンカー 定義)。 このオプションをサポートしているシステムはごくわずかです。

-T スクリプト
  スクリプト リンカースクリプトとして。 このオプションは、を使用するほとんどのシステムでサポートされています
GNUリンカー。 オペレーティングシステムのないベアボードターゲットなど、一部のターゲットでは、
  -T 未定義のシンボルへの参照を回避するために、リンク時にオプションが必要になる場合があります。

-Xリンカー オプション
合格 オプション リンカのオプションとして。 これを使用して、システム固有の供給を行うことができます
GCCが認識しないリンカーオプション。

別の引数を取るオプションを渡したい場合は、次を使用する必要があります -Xリンカー
XNUMX回、オプション用にXNUMX回、引数用にXNUMX回。 たとえば、合格するには -主張する
定義、あなたは書く必要があります -Xリンカー -主張する -Xリンカー 定義。 それは動作しません
書き込む -Xリンカー "-主張する 定義」、これは文字列全体を
単一の引数。これは、リンカーが期待するものではありません。

GNUリンカを使用する場合、通常、リンカに引数を渡す方が便利です。
を使用したオプション オプション= 個別の引数としてよりも構文。 たとえば、あなたは
指定できます -Xリンカー -Map = output.map ではなく -Xリンカー -地図 -Xリンカー 出力.マップ.
他のリンカは、コマンドラインオプションでこの構文をサポートしていない場合があります。

-Wl、オプション
合格 オプション リンカのオプションとして。 もしも オプション カンマが含まれ、に分割されます
カンマでの複数のオプション。 この構文を使用して、引数をに渡すことができます
オプション。 例えば、 -Wl、-Map、output.map パス -地図 出力.マップ リンカーに。 いつ
GNUリンカーを使用すると、同じ効果を得ることができます -Wl、-Map = output.map.

注:Ubuntu 8.10以降のバージョンでは、LDFLAGSのオプション -Wl、-z、relro 使用されている。
無効にするには、 -Wl、-z、norelro.

-u シンボル
シンボルのふりをする シンボル は未定義であり、ライブラリモジュールのリンクを強制的に定義します
それ。 使用できます -u の読み込みを強制するために異なるシンボルで複数回
追加のライブラリモジュール。

オプション for ディレクトリ を検索
これらのオプションは、ヘッダーファイル、ライブラリ、およびパーツを検索するためのディレクトリを指定します
コンパイラの:

-IDIR
ディレクトリを追加します DIR ヘッダーを検索するディレクトリのリストの先頭に
ファイル。 これを使用して、システムヘッダーファイルを上書きし、独自のファイルに置き換えることができます
これらのディレクトリはシステムヘッダーファイルの前に検索されるため、バージョン
ディレクトリ。 ただし、このオプションを使用して、次を含むディレクトリを追加しないでください。
ベンダー提供のシステムヘッダーファイル(使用 -isystem そのために)。 複数使用する場合
-I オプションの場合、ディレクトリは左から右の順序でスキャンされます。 標準システム
ディレクトリは後に続きます。

標準システムにディレクトリが含まれている場合、またはで指定されたディレクトリ -isystemであり、
で指定されます -I -I オプションは無視されます。 ディレクトリはそのまま
検索されますが、システム内の通常の位置にあるシステムディレクトリとして、チェーンが含まれます。
これは、バグのあるシステム ヘッダーと順序付けを修正するための GCC の手順を確実にするためです。
include_next ディレクティブが誤って変更されることはありません。 本当に必要なら
システム ディレクトリの検索順序を変更するには、 -ノストディンク および -isystem
オプション。

-iplugindir =DIR
渡されるプラグインを検索するディレクトリを設定します -fplugin =
-fplugin =path/。そう。 このオプションは、ユーザーが使用するためのものではなく、
ドライバーによって渡されます。

-iquoteDIR
ディレクトリを追加します DIR ヘッダーを検索するディレクトリのリストの先頭に
の場合のみのファイル #include "file"; それらは検索されません #include <file>,
そうでなければちょうど -I.

-LDIR
ディレクトリを追加 DIR 検索するディレクトリのリストへ -l.

-B接頭辞
このオプションは、実行可能ファイル、ライブラリ、インクルードファイル、および
コンパイラ自体のデータファイル。

コンパイラドライバプログラムは、XNUMXつ以上のサブプログラムを実行します cpp, cc1, as & ld.
やってみます 接頭辞 実行しようとする各プログラムのプレフィックスとして、ありとなしの両方で
機械/バージョン/.

実行するサブプログラムごとに、コンパイラドライバは最初に -B プレフィックス(ある場合)。
その名前が見つからない場合、または -B が指定されていない場合、ドライバーは XNUMX つの標準を試行します
プレフィックス、 / usr / lib / gcc / & / usr / local / lib / gcc /。 これらのどちらも結果が得られない場合
見つかったファイル名、変更されていないプログラム名は、を使用して検索されます
で指定されたディレクトリ パス 環境変数。

コンパイラは、 -B ディレクトリを参照し、
必要に応じて、パスの末尾にディレクトリ区切り文字を追加します。

-B ディレクトリ名を効果的に指定するプレフィックスは、
リンカーは、コンパイラーがこれらのオプションを次のように変換するためです。 -L リンカのオプション。
コンパイラが変換するため、プリプロセッサのインクルード ファイルにも適用されます。
これらのオプションを -isystem プリプロセッサのオプション。 この場合、コンパイラは
追加します include プレフィックスに。

ランタイムサポートファイル libgcc.a を使用して検索することもできます -B プレフィックス、
必要です。 そこに見つからない場合は、上記のXNUMXつの標準プレフィックスが試され、
すべてであります。 これらの方法でファイルが見つからない場合、ファイルはリンクから除外されます。

のようなプレフィックスを指定する別の方法 -B プレフィックスは環境を使用することです
変数 GCC_EXEC_PREFIX.

特別な恨みとして、 -B is [dir /] stageN /ここで、 N は数字です
0 から 9 の範囲の場合、次のように置き換えられます。 [dir /] include. これは
コンパイラのブートストラップ。

-specs =file
プロセス file コンパイラが標準を読み込んだ後 スペック ファイル、オーバーライドするため
デフォルトは gccの ドライバープログラムは、渡すスイッチを決定するときに使用します
〜へ cc1, cc1プラス, as, ld、など。複数 -specs =file で指定できます
コマンドラインで、左から右に順番に処理されます。

--sysroot =DIR
  DIR ヘッダーとライブラリの論理ルートディレクトリとして。 たとえば、
コンパイラは通常、ヘッダーを検索します / usr / include およびのライブラリ / usr / lib,
代わりに検索します dir / usr / include & dir / usr / lib.

このオプションと -isysroot オプション、次に --sysroot オプションは
ライブラリに適用されますが、 -isysroot オプションは、ヘッダー ファイルに適用されます。

GNUリンカ(バージョン2.16以降)はこれに必要なサポートを持っています
オプション。 リンカがこのオプションをサポートしていない場合、のヘッダーファイルの側面
--sysroot それでも機能しますが、ライブラリの側面は機能しません。

-I- このオプションは非推奨になりました。 使ってください -iquote 代わりに -I 以前のディレクトリ
  -I- を削除します -I-. 指定したディレクトリ -I 前のオプション
-I- オプションは次の場合のみ検索されます #include "file"; それらは検索されません
for #include <file>.

追加のディレクトリがで指定されている場合 -I 後のオプション -I-、これらの
ディレクトリはすべて検索されます #include ディレクティブ。 (通常は -I ディレクトリ
このように使われます。)

加えて、 -I- オプションは、現在のディレクトリの使用を禁止します(
現在の入力ファイルのソース) を最初の検索ディレクトリとして #include "file".
この効果を無効にする方法はありません -I- -私。 検索を指定できます
コンパイラが呼び出されたときに現在のディレクトリ。 それは正確にはそうではありません
プリプロセッサがデフォルトで行うことと同じですが、多くの場合、十分です。

-I- ヘッダーファイルの標準システムディレクトリの使用を禁止しません。
このように、 -I- & -ノストディンク 独立しています。

指定 ターゲット エスプレッソマシン & コンパイラ
GCCを実行する通常の方法は、と呼ばれる実行可能ファイルを実行することです。 gccのまたは 機械-gcc クロスするとき
コンパイル、または 機械-gcc-バージョン インストールされたバージョン以外のバージョンを実行するには
最終。

Hardware Models & 構成
各ターゲットマシンタイプには、以下から始まる独自の特別なオプションを設定できます。 -m、選択する
さまざまなハードウェアモデルまたは構成間---たとえば、68010と68020、フローティング
コプロセッサーまたはなし。 インストールされた単一バージョンのコンパイラーは、任意のモデル用にコンパイルできます
または構成、指定されたオプションに応じて。

コンパイラの一部の構成は、通常は次のような追加の特別なオプションもサポートします。
同じプラットフォーム上の他のコンパイラとの互換性。

アダプテバ エピファニー オプション

ボーマン -m オプションはAdaptevaEpiphany用に定義されています:

-mhalf-reg ファイル
「r32」...「r63」の範囲のレジスタは割り当てないでください。 これにより、コードを実行できます
これらのレジスタがないハードウェアバリアント。

-mprefer-short-insn-regs
短い命令の生成を可能にするレジスタを優先的に割り当てます。 これはできます
命令数が増加するため、これによりコードサイズが減少または増加する場合
ケースバイケースで異なる場合があります。

-mbranch-cost =NUM
ブランチのコストをおおよそに設定します NUM 「簡単な」指示。 この費用は
ヒューリスティックであり、リリース間で一貫した結果が得られるとは限りません。

-mcmove
条件付き移動の生成を有効にします。

-mnops =NUM
発します NUM 他のすべての生成された命令の前に nops を実行します。

-mno-ソフト-cmpsf
単精度浮動小数点比較の場合、fsub 命令を発行し、
フラグ。 これはソフトウェア比較よりも高速ですが、誤った結果が得られる可能性があります。
NaN の存在、または XNUMX つの異なる小さな数が比較されて、
差はゼロとして計算されます。 デフォルトは -msoft-cmpsf、使用速度は遅くなりますが、
IEEE 準拠のソフトウェア比較。

-mstack-offset =NUM
スタックの最上位とスタックポインタの間のオフセットを設定します。 例:値8
sp+0...sp+7 の範囲の XNUMX バイトをリーフ関数で使用できることを意味します。
スタック割り当てなし。 以外の値 8 or 16 テストされておらず、
仕事。 また、このオプションは ABI を変更することにも注意してください。
ライブラリがコンパイルされたものとは異なるスタック オフセットは、通常、そうではありません。
仕事。 このオプションは、別のスタックオフセットかどうかを評価する場合に役立ちます。
より良いコードが得られますが、実際には別のスタックオフセットを使用してビルドします
動作中のプログラムでは、適切なツールチェーンを構成することをお勧めします
--with-stack-offset =NUM オプションを選択します。

-mno-round-最も近い
丸めモードが切り捨てに設定されているとスケジューラーに想定させます。 The
デフォルトは -mround-最も近い.

-mlong-calls
属性で特に指定されていない場合は、すべての呼び出しが
b / bl 命令のオフセット範囲、したがって関数アドレスを
(それ以外の場合は直接) 呼び出しを実行する前に登録します。 これがデフォルトです。

-mshort-呼び出し
属性で特に指定されていない場合は、すべての直接呼び出しが範囲内にあると想定します
b / bl 命令のデフォルト
is -mlong-calls.

-msmall16
アドレスは16ビットの符号なし値としてロードできると仮定します。 これは適用されません
対象となる機能アドレス -mlong-calls セマンティクスは有効です。

-mfp-mode =モード
浮動小数点ユニットの一般的なモードを設定します。 これはフローティングを決定します-
関数呼び出しおよび戻り時に提供および期待されるポイントモード。 作る
このモードは、関数の開始時に主に必要なモードと一致します。
不要なモード切り替えを回避することにより、プログラムをより小さく、より速くします。

モード 次のいずれかの値に設定できます。

発信者
関数エントリのモードはすべて有効であり、関数が機能するときに保持または復元されます
を返し、他の関数を呼び出すとき。 このモードはコンパイルに便利です
ライブラリまたは他のコンパイルユニットに組み込みたい場合があります
さまざまな一般的なFPUモードを備えたプログラム、および
単一のオブジェクトファイルを使用することは、追加のモードのサイズと速度のオーバーヘッドを上回ります
より多くの場合に必要となるものと比較して、必要となる可能性のある切り替え
一般的なFPUモードの特定の選択。

切り詰める
これは、切り捨て(つまりラウンド)を伴う浮動小数点計算に使用されるモードです。
ゼロに向かって)丸めモード。 これには、浮動小数点からへの変換が含まれます
整数。

ラウンドニアレスト
これは、最も近い値に丸める浮動小数点計算に使用されるモードです。
丸めモードですら。

int型 これは、FPUで整数計算を実行するために使用されるモードです(整数など)。
乗算、または整数の積和演算。

デフォルトは -mfp-mode = caller

-mnosplit-lohi
-mno-postinc
-mno-postmodify
32ビットロードの分割をそれぞれ無効にするコード生成の調整、
ポストインクリメントアドレスの生成、およびポストモディファイアドレスの生成。 The
デフォルトは msplit-lohi, 株式会社エムポスト, -mpost-変更.

-mnovect-double
優先SIMDモードをSImodeに変更します。 デフォルトは -mvect-ダブル、その用途
優先SIMDモードとしてのDImode。

-max-vect-align =NUM
SIMDベクトルモードタイプの最大配置。 NUM 4または8の場合があります。デフォルトは
8. これは ABI の変更であることに注意してください。
サイズに影響する場所で SIMD ベクトル モードを使用しない場合、影響を受けません。
および/または関連するタイプの配置。

-msplit-vecmove-初期
分割ベクトルは、リロード前に XNUMX つの単語の移動に移動します。 理論的には、これは
より良いレジスタ割り当てですが、これまでのところ、逆のことが一般的に当てはまるようです。

-m1reg-REG
定数-1を保持するレジスタを指定します。これにより、ロードが小さな負になります。
定数と特定のビットマスクを高速化します。 reg の許容値は r43 と r63 です。
そのレジスターを固定レジスターとして使用することを指定し、none はそのレジスターを使用しないことを意味します。
レジスターはこの目的で使用されます。 デフォルトは -m1reg-なし.

AAArch64 オプション

これらのオプションは、AArch64実装用に定義されています。

-mbig-エンディアン
ビッグエンディアンコードを生成します。 これは、GCCが
aarch64_be-*-* ターゲット。

-mgeneral-regs-のみ
汎用レジスタのみを使用するコードを生成します。

-mlittle-エンディアン
リトルエンディアンコードを生成します。 これは、GCCが
aarch64-*-* しかし、 aarch64_be-*-* ターゲット。

-mcmodel = tiny
小さなコードモデルのコードを生成します。 プログラムとその静的に定義されたシンボル
互いに1GB以内である必要があります。 ポインタは64ビットです。 プログラムは静的にすることができます
または動的にリンクされています。 このモデルは完全には実装されておらず、ほとんどが次のように扱われます
"小さな"。

-mcmodel = small
スモールコードモデルのコードを生成します。 プログラムとその静的に定義された
シンボルは互いに4GB以内にある必要があります。 ポインタは64ビットです。 プログラムはすることができます
静的または動的にリンクされています。 これはデフォルトのコードモデルです。

-mcmodel = large
ラージコードモデルのコードを生成します。 これは、住所と
セクションのサイズ。 ポインタは64ビットです。 プログラムは静的にのみリンクできます。

-mstrict-align
アラインされていないメモリ参照がシステムによって処理されると想定しないでください。

-momit-リーフフレームポインター
-mno-省略リーフフレームポインター
リーフ関数でフレームポインタを省略または保持します。 前者の動作は
デフォルト。

-mtls-dialect = desc
TLSの動的アクセスのためのスレッドローカルストレージメカニズムとしてTLS記述子を使用する
変数。 これがデフォルトです。

-mtls-dialect = Traditional
TLSの動的アクセスのためのスレッドローカルストレージメカニズムとして従来のTLSを使用する
変数。

-XNUMX月=
ターゲットアーキテクチャの名前を指定します。オプションで、XNUMXつ以上の接尾辞を付けます。
機能修飾子。 このオプションの形式は -XNUMX月=アーチ{+[いいえ]簡潔な}*、 どこ
唯一の価値 アーチ is armv8-a。 の可能な値 簡潔な に文書化されています
以下のサブセクション。

競合する機能修飾子が指定されている場合は、右端の機能が使用されます。

GCCはこの名前を使用して、生成時に発行できる命令の種類を決定します
アセンブリ コード。 このオプションは、 -mcpu =
オプションを選択します。

-mcpu =
ターゲットプロセッサの名前を指定します。オプションで、XNUMXつ以上の機能の接尾辞を付けます。
修飾子。 このオプションの形式は -mcpu =CPU{+[いいえ]簡潔な}*、可能な場合
の値 CPU   ジェネリック, 。 の可能な値 簡潔な に文書化されています
以下のサブセクション。

競合する機能修飾子が指定されている場合は、右端の機能が使用されます。

GCCはこの名前を使用して、生成時に発行できる命令の種類を決定します
アセンブリコード。

-mtune =
パフォーマンスを調整するプロセッサの名前を指定します。 コードが調整されます
あたかもターゲット プロセッサがこのオプションで指定されたタイプであるかのように、まだ使用している
によって指定されたターゲット プロセッサと互換性のある命令 -mcpu = オプション。 この
オプションは、機能修飾子によってサフィックスすることはできません。

-行進 & -mcpu 機能修飾子

で使用される機能修飾子 -行進 & -mcpu 次のいずれかになります。

クリプト
Crypto拡張機能を有効にします。 これは、高度なSIMDが有効になっていることを意味します。

fp 浮動小数点命令を有効にします。

シムド
高度なSIMD命令を有効にします。 これは、浮動小数点命令が
有効。 これは、オプションの現在可能なすべての値のデフォルトです -行進 &
-mcpu =.

ARM オプション

ボーマン -m オプションは、Advanced RISC Machines (ARM) アーキテクチャ用に定義されています。

-mabi =
指定されたABIのコードを生成します。 許容値は次のとおりです。 apcs-gnu, atpc, aapcs,
aapcs-linux & 私は.

-mapcs フレーム
すべてのARMプロシージャコール標準に準拠したスタックフレームを生成します
コードを正しく実行するためにこれが厳密に必要でない場合でも、関数。
指定 -fomit-フレームポインター このオプションを使用すると、スタック フレームが表示されなくなります。
リーフ関数用に生成されます。 デフォルトは -mno-apcs-frame.

-mapcs
これはの同義語です -mapcs フレーム.

-mthumb-インターワーク
ARM命令セットとThumb命令セット間の呼び出しをサポートするコードを生成します。
このオプションがないと、v5より前のアーキテクチャでは、XNUMXつの命令セットを
XNUMXつのプログラム内で確実に使用されます。 デフォルトは -mno-thumb-interwork、少しから
より大きなコードは次の場合に生成されます -mthumb-インターワーク が指定されています。 AAPCS構成の場合
このオプションは無意味です。

-mno-sched-プロローグ
関数プロローグ内の命令の並べ替え、またはのマージを防止します
関数の本体にある命令を含むそれらの命令。 これは、すべてが
関数は、認識可能な一連の命令 (または実際には、
さまざまな機能プロローグの小さなセットからの選択)、およびこの情報は
実行可能なコード内の if 関数の開始位置を特定するために使用されます。 デフォルト
is -msched-プロローグ.

-mfloat-abi =
使用する浮動小数点ABIを指定します。 許容値は次のとおりです。 ソフト, ソフトFP &
ハード.

指定 ソフト GCCにフローティングのライブラリ呼び出しを含む出力を生成させます-
ポイント操作。 ソフトFP ハードウェア浮動小数点を使用してコードを生成できます
ただし、ソフトフロートの呼び出し規約を使用します。 ハード ことができます
浮動小数点命令を生成し、FPU固有の呼び出し規約を使用します。

デフォルトは、特定のターゲット構成によって異なります。 ハードフロートに注意してください
ソフトフロートABIはリンク互換ではありません。 プログラム全体をでコンパイルする必要があります
同じABIであり、互換性のあるライブラリのセットとリンクします。

-mlittle-エンディアン
リトルエンディアンモードで実行されているプロセッサのコードを生成します。 これはのデフォルトです
すべての標準構成。

-mbig-エンディアン
ビッグエンディアンモードで実行されているプロセッサのコードを生成します。 デフォルトはコンパイルです
リトルエンディアンプロセッサのコード。

-mwords-リトルエンディアン
このオプションは、ビッグ エンディアン プロセッサ用のコードを生成する場合にのみ適用されます。 生成
リトルエンディアンの語順のコードですが、ビッグエンディアンのバイト順です。 つまり、バイト
フォームの順序 32107654. 注: このオプションは、必要な場合にのみ使用してください。
のバージョンによって生成されたビッグエンディアン ARM プロセッサ用のコードとの互換性
2.8 より前のコンパイラ。 このオプションは非推奨になりました。

-XNUMX月=
これは、ターゲットARMアーキテクチャの名前を指定します。 GCCはこの名前を使用して
アセンブリコードを生成するときに発行できる命令の種類を決定します。 これ
オプションは、と組み合わせて、またはその代わりに使用できます。 -mcpu = オプション。 許容される
名前は次のとおりです。 armv2, armv2a, armv3, armv3m, armv4, armv4t, armv5, armv5t, armv5e,
アームv5te, armv6, armv6j, armv6t2, armv6z, armv6zk, armv6-m, armv7, armv7-a, armv7-r,
armv7-m, armv7e-m, 私は, iwmmxt2, ep9312.

-march=ネイティブ コンパイラにビルドのアーキテクチャを自動検出させます
コンピューター。 現在、この機能は Linux でのみサポートされており、すべてではありません。
アーキテクチャが認識されます。 自動検出が失敗した場合、オプションには何もありません
効果。

-mtune =
このオプションは、GCCが調整する必要のあるターゲットARMプロセッサの名前を指定します
コードのパフォーマンス。 一部のARM実装では、パフォーマンスが向上する可能性があります
このオプションを使用して取得します。 許可される名前は次のとおりです。 arm2, arm250, arm3, arm6,
arm60, arm600, arm610, arm620, arm7, アーム7m, アーム7d, 腕7dm, アーム7ディ, アーム7dmi, arm70,
arm700, アーム700i, arm710, アーム710c, arm7100, arm720, arm7500, アーム7500fe, アーム7tdmi,
arm7tdmi-s, アーム710t, アーム720t, アーム740t, 強い腕, ストロングアーム110, ストロングアーム1100,
ストロングアーム1110, arm8, arm810, arm9, アーム9e, arm920, アーム920t, アーム922t, アーム946e-s,
アーム966e-s, アーム968e-s, arm926ej-s, アーム940t, アーム9tdmi, アーム10tdmi, アーム1020t, arm1026ej-s,
アーム10e, アーム1020e, アーム1022e, アーム1136j-s, アーム1136jf-s, mpコア, mpcorenovfp, アーム1156t2-s,
アーム1156t2f-s, アーム1176JZ-S, arm1176jzf-s, 皮質-a5, 皮質-a7, 皮質-a8, 皮質-a9,
皮質-a15, 皮質-r4, 皮質-r4f, 皮質-r5, 皮質-m4, 皮質-m3, 皮質-m1,
皮質-m0, スケール, 私は, iwmmxt2, ep9312, fa526, fa626, fa606te, fa626te, fmp626,
fa726te.

-mtune = generic-アーチ GCCが次のブレンドのパフォーマンスを調整する必要があることを指定します
アーキテクチャ内のプロセッサ アーチ。 目的は、上でうまく実行されるコードを生成することです
現在最も人気のあるプロセッサ、いくつかの利益をもたらす最適化間のバランス
範囲内のCPU、および他のCPUのパフォーマンスの落とし穴を回避します。 の効果
このオプションは、CPUモデルが出入りするにつれて、将来のGCCバージョンで変更される可能性があります。

-mtune = native コンパイラーにビルドコンピューターのCPUを自動検出させます。 で
現在、この機能は Linux でのみサポートされており、すべてのアーキテクチャがサポートされているわけではありません。
認識された。 自動検出が失敗した場合、このオプションは効果がありません。

-mcpu =
これは、ターゲットARMプロセッサの名前を指定します。 GCCはこの名前を使用して、
ターゲットARMアーキテクチャの名前(によって指定されているかのように) -行進)およびARMプロセッサ
パフォーマンスを調整するタイプ( -ムチューン)。 このオプションの場所
とともに使用されます -行進 or -ムチューン、これらのオプションは
このオプションの適切な部分。

このオプションの許容名は、 -ムチューン.

-mcpu = generic-アーチ も許容され、と同等です -XNUMX月=アーチ
-mtune = generic-アーチ。 見る -ムチューン

-mcpu = native コンパイラーにビルドコンピューターのCPUを自動検出させます。 で
現在、この機能は Linux でのみサポートされており、すべてのアーキテクチャがサポートされているわけではありません。
認識された。 自動検出が失敗した場合、このオプションは効果がありません。

-mfpu =
-mfpe=
-MFP=
これは、どの浮動小数点ハードウェア(またはハードウェアエミュレーション)がで利用可能かを指定します
ターゲット。 許可される名前は次のとおりです。 fpa, fpe2, fpe3, マーヴェリック, vfp, vfpv3, vfpv3-fp16,
vfpv3-d16, vfpv3-d16-fp16, vfpv3xd, vfpv3xd-fp16, ネオン, ネオン-fp16, vfpv4, vfpv4-d16,
fpv4-sp-d16 & ネオン-vfpv4. -MFP & -mfpe の同義語です -mfpu=fpe、用
古いバージョンの GCC との互換性。

If -msoft-float これは浮動小数点値の形式を指定します。

選択した浮動小数点ハードウェアにNEON拡張機能が含まれている場合(例: -mfpu=ネオン),
浮動小数点演算は GCC の自動ベクトル化パスでは使用されないことに注意してください。
ない限り、 -funsafe-数学の最適化 も指定されています。 これはNEONハードウェアが
浮動小数点演算のIEEE754標準を完全には実装していません(
特定の非正規化数はゼロとして扱われるため、NEON命令を使用すると
精度の低下につながります。

-mfp16-format =
「__fp16」半精度浮動小数点型の形式を指定します。 許容される
名前は なし, IEEE, 代替案; デフォルトは なし、この場合、「__fp16」
タイプは定義されていません。

-mstructure-size-boundary =n
すべての構造体と共用体のサイズは、数値の倍数に切り上げられます
このオプションで設定されたビット数。 許容値は 8、32、および 64 です。デフォルト値は
ツールチェーンによって異なります。 COFFを対象としたツールチェーンの場合、デフォルト値は
8. 64の値は、基礎となるABIがそれをサポートしている場合にのみ許可されます。

より大きな数値を指定すると、より高速で効率的なコードを生成できますが、
プログラムのサイズを大きくします。 異なる値は潜在的に互換性がありません。
XNUMXつの値でコンパイルされたコードは、必ずしもコードまたはライブラリで機能することを期待できるとは限りません。
構造体または共用体を使用して情報を交換する場合は、別の値でコンパイルされます。

-mabort-on-noreturn
「noreturn」関数の最後に関数「abort」の呼び出しを生成します。 そうなる
関数が戻ろうとすると実行されます。

-mlong-calls
-mno-long-calls
最初にのアドレスをロードすることにより、関数呼び出しを実行するようにコンパイラーに指示します。
関数をレジスタに入れてから、このレジスタでサブルーチン呼び出しを実行します。 これ
ターゲット関数が 64 メガバイトのアドレス指定の外にある場合は、スイッチが必要です。
サブルーチン呼び出し命令のオフセット ベース バージョンの範囲。

このスイッチが有効になっていても、すべての関数呼び出しが長い呼び出しになるわけではありません。
ヒューリスティックは、静的関数、関数を持つ関数です。 ショートコール 属性、
のスコープ内にある関数 #プラグマ 長電話禁止 ディレクティブと関数
その定義が現在のコンパイル単位内で既にコンパイルされている場合、
長電話にはなりません。 この規則の例外は、弱い関数です。
定義、関数 長電話 属性または 属性、および
の範囲内にある関数 #プラグマ ロングコール ディレクティブ、常に
長電話に変わりました。

この機能はデフォルトでは有効になっていません。 指定する -mno-long-calls を復元します
関数呼び出しを #プラグマ
ロングコールオフ 指令。 これらのスイッチは、コンパイラがどのように動作するかには影響しないことに注意してください。
関数ポインタを介して関数呼び出しを処理するコードを生成します。

-msingle-pic-base
PICアドレス指定に使用されるレジスタを、ロードするのではなく、読み取り専用として扱います。
各関数のプロローグ。 ランタイムシステムはこれを初期化する責任があります
実行を開始する前に、適切な値で登録してください。

-mpic-register =REG
PIC アドレッシングに使用するレジスタを指定します。 デフォルトは R10 です。
R9使用時はチェック可能です。

-mcirrus-修正-無効な-insns
問題を回避するために、命令ストリームに NOP を挿入します。
Maverick 命令の組み合わせが無効です。 このオプションは、
-mcpu=ep9312 オプションは、Cirrus の命令の生成を有効にするために使用されています。
Maverick 浮動小数点コプロセッサ。 このオプションはデフォルトでは有効になっていません。
この問題は、古い Maverick 実装にのみ存在します。 デフォルトは再
を使用して有効化 -mno-cirrus-fix-invalid-insn スイッチ。

-mpoke-関数名
各関数の名前を、関数の直前のテキストセクションに書き込みます
プロローグ。 生成されるコードは次のようになります。

t0
.ascii "arm_poke_function_name"、0
.align
t1
.word 0xff000000 +(t1-t0)
arm_poke_function_name
mov ip、sp
stmfd sp!、{fp、ip、lr、pc}
サブfp、ip、#4

スタックバックトレースを実行する場合、コードは「fp+」に格納されている「pc」の値を検査できます。
0"。トレース関数が位置"pc-12"を調べ、上位8ビットが
セットすると、この直前に関数名が埋め込まれていることがわかります
場所で、長さは「((pc [-3])&0xff000000)」です。

-mthumb
-マーム
ARM状態とThumb状態で実行するコードを生成するかどうかを選択します。 のデフォルト
ほとんどの構成は、ARM状態で実行されるコードを生成することですが、デフォルトは
でGCCを構成することで変更できます --with-mode =状態 オプションを構成します。

-mtpcs-フレーム
のThumbProcedureCallStandardに準拠するスタックフレームを生成します。
すべての非リーフ関数。 (リーフ関数は、他の関数を呼び出さない関数です
関数。)デフォルトは -mno-tpcs-フレーム.

-mtpcs-リーフ-フレーム
のThumbProcedureCallStandardに準拠するスタックフレームを生成します。
すべての葉の機能。 (リーフ関数は、他の関数を呼び出さない関数です。)
デフォルトは -mno-apcs-リーフフレーム.

-mcallee-スーパーインターワーキング
コンパイルされるファイル内のすべての外部から見える関数にARM命令を与えます
関数の残りの部分を実行する前にThumbモードに切り替わるヘッダーを設定します。
これにより、これらの関数を相互作用しないコードから呼び出すことができます。 このオプションは
インターワーキングはデフォルトで有効になっているため、AAPCS構成では無効です。

-mcaller-スーパーインターワーキング
関数ポインタ(仮想関数を含む)を介した呼び出しを正しく実行できるようにします
ターゲットコードがインターワーキング用にコンパイルされているかどうかに関係なく。
このオプションの場合、関数ポインタの実行コストにわずかなオーバーヘッドがあります
有効になっています。 インターワーキングは次のようになっているため、このオプションはAAPCS構成では無効です。
デフォルトで有効になっています。

-mtp =
スレッドローカルストレージポインタのアクセスモデルを指定します。 有効なモデルは
ソフト、「__aeabi_read_tp」への呼び出しを生成します。 cp15、スレッドをフェッチします
「cp15」からの直接ポインタ(arm6kアーキテクチャでサポート)、および オート、その
選択したプロセッサに利用可能な最良の方法を使用します。 デフォルト設定は
オート.

-mtls-dialect =方言
スレッド ローカル ストレージへのアクセスに使用する方言を指定します。 二つの方言は
サポート --- ヌー & ヌー2を選択します。 ヌー 方言は元のGNUスキームを選択します
ローカルおよびグローバルの動的TLSモデルをサポートします。 The ヌー2 方言はGNUを選択します
記述子スキーム。共有ライブラリのパフォーマンスが向上します。 GNU
記述子スキームは元のスキームと互換性がありますが、新しいスキームが必要です
アセンブラ、リンカ、ライブラリのサポート。 初期およびローカルのexecTLSモデルは
このオプションの影響を受けず、常に元のスキームを使用します。

-mword-再配置
ワードサイズの値(つまり、R_ARM_ABS32)でのみ絶対再配置を生成します。 これは
ランタイムローダーが課すターゲット(uClinux、SymbianOS)ではデフォルトで有効になっています
この制限、および -fpic or -fPIC 指定されています。

-mfix-cortex-m3-ldrd
一部のCortex-M3コアは、「ldrd」命令が
オーバーラップするデスティネーションレジスタとベースレジスタが使用されます。 このオプションは生成を回避します
これらの指示。 このオプションは、次の場合にデフォルトで有効になります。 -mcpu = cortex-m3 is
指定。

-不整列アクセス
-mno-unaligned-access
アドレスからの16ビット値と32ビット値の読み取りと書き込みを有効(または無効)にします
16ビットまたは32ビットで整列されていません。 デフォルトでは、アライメントされていないアクセスはすべて無効になっています
ARMv6より前およびすべてのARMv6-Mアーキテクチャ、および他のすべてのアーキテクチャで有効になっています。 もしも
非境界整列アクセスが有効になっていない場合、パックされたデータ構造内のワードがアクセスされます
一度にXNUMXバイト。

ARM 属性「Tag_CPU_unaligned_access」は、生成されたオブジェクト ファイルに設定されます。
このオプションの設定に応じて、true または false になります。 整列していない場合
アクセスが有効になっている場合、プリプロセッサ シンボル「__ARM_FEATURE_UNALIGNED」も
定義された。

-mneon-for-64ビット
Neonを使用してスカラー64ビット操作を処理できるようにします。 これはデフォルトで無効になっています
コアレジスタからネオンにデータを移動するコストが高いためです。

AVR オプション

-mmcu =MCU
Atmel AVR命令セットアーキテクチャ(ISA)またはMCUタイプを指定します。

このオプションのデフォルトは @tie{}"avr2" です。

GCCは、次のAVRデバイスとISAをサポートしています。

「avr2」
最大8@tie{}KiBのプログラムメモリを備えた「クラシック」デバイス。 MCU@tie {} = "attiny22"、
"attiny26", "at90c8534", "at90s2313", "at90s2323", "at90s2333", "at90s2343",
"at90s4414", "at90s4433", "at90s4434", "at90s8515", "at90s8535".

「avr25」
最大8@tie{}KiBのプログラムメモリと「MOVW」を備えた「クラシック」デバイス
命令。 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」
16 @ tie{}KiBから64@tie{}KiBまでのプログラムメモリを備えた「クラシック」デバイス。
MCU@tie {} = "at43usb355"、"at76c711"。

「avr31」
128 @ tie{}KiBのプログラムメモリを備えた「クラシック」デバイス。 MCU@tie {} = "atmega103"、
「at43usb320」。

「avr35」
16 @ tie{}KiBから64@tie{}KiBまでのプログラムメモリを備えた「クラシック」デバイス
「MOVW」命令。 MCU@tie{}= "atmega16u2", "atmega32u2", "atmega8u2",
"attiny167", "at90usb162", "at90usb82".

「avr4」
最大8@tie{}KiBのプログラムメモリを備えた「拡張」デバイス。 MCU@tie {} =
「atmega48」、「atmega48a」、「atmega48p」、「atmega8」、「atmega8hva」、「atmega8515」、
「atmega8535」、「atmega88」、「atmega88a」、「atmega88p」、「atmega88pa」、「at90pwm1」、
"at90pwm2", "at90pwm2b", "at90pwm3", "at90pwm3b", "at90pwm81".

「avr5」
16 @ tie{}KiBから64@tie{}KiBまでのプログラムメモリを備えた「拡張」デバイス。
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」
128 @ tie{}KiBのプログラムメモリを備えた「拡張」デバイス。 MCU@tie {} = "atmega128"、
「atmega128rfa1」、「atmega1280」、「atmega1281」、「atmega1284p」、「at90can128」、
「at90usb1286」、「at90usb1287」。

「avr6」
3バイトのPC、つまり128 @ tie{}KiBを超えるプログラムを備えた「拡張」デバイス
メモリ。 MCU@tie{} = "atmega2560", "atmega2561".

「avrxmega2」
8 @ tie{}KiB以上および最大64@tie{}KiBのプログラムメモリを備えた「XMEGA」デバイス。
MCU@tie{}= "atxmega16a4", "atxmega16d4", "atxmega16x1", "atxmega32a4",
「atxmega32d4」、「atxmega32x1」。

「avrxmega4」
64 @ tie{}KiB以上および最大128@tie{}KiBのプログラムを備えた「XMEGA」デバイス
メモリ。 MCU@tie{}= "atxmega64a3", "atxmega64d3".

「avrxmega5」
64 @ tie{}KiB以上および最大128@tie{}KiBのプログラムを備えた「XMEGA」デバイス
メモリと64@tie{}KiB以上のRAM。 MCU@tie {} = "atxmega64a1"、
「atxmega64a1u」。

「avrxmega6」
128 @ tie{}KiBを超えるプログラムメモリを備えた「XMEGA」デバイス。 MCU@tie {} =
"atxmega128a3", "atxmega128d3", "atxmega192a3", "atxmega192d3", "atxmega256a3",
"atxmega256a3b", "atxmega256a3bu", "atxmega256d3".

「avrxmega7」
128 @ tie{}KiB以上のプログラムメモリと以上の「XMEGA」デバイス
64 @ tie{}KiBのRAM。 MCU@tie{}= "atxmega128a1", "atxmega128a1u".

「avr1」
このISAは、最小限のAVRコアによって実装され、アセンブラーでのみサポートされます。
MCU@tie {} = "attiny11"、 "attiny12"、 "attiny15"、 "attiny28"、"at90s1200"。

-maccumulate-args
発信関数の引数を累積し、必要なスタックスペースを取得/解放します
関数プロローグ/エピローグで関数引数をXNUMX回送信します。 このオプションがないと、
発信引数は、関数を呼び出す前にプッシュされ、後でポップされます。

関数呼び出しの後に引数をポップすることは、AVRでコストがかかる可能性があるため、
スタックスペースを蓄積すると、引数が必要になるため、実行可能ファイルが小さくなる可能性があります
このような関数呼び出しの後でスタックから削除されないようにします。

このオプションは、への複数の呼び出しを実行する関数のコードサイズを縮小する可能性があります
printfのような関数の呼び出しのように、スタック上で引数を取得する関数。

-mbranch-cost =コスト
条件付き分岐命令の分岐コストを次のように設定します コスト。 合理的な値
for コスト 小さい、非負の整数です。 デフォルトのブランチコストは0です。

-mcall-プロローグ
関数のプロローグ/エピローグは、適切なサブルーチンへの呼び出しとして拡張されます。 コード
サイズが小さいです。

-ミント8
「int」を8ビット整数と仮定します。 これはすべてのタイプのサイズに影響します。「char」は1です。
バイト、「int」は1バイト、「long」は2バイト、「longlong」は4バイトです。 お願いします
このオプションはC標準に準拠していませんが、結果として小さくなることに注意してください
コードサイズ。

-mno-割り込み
生成されたコードは、ハードウェア割り込みと互換性がありません。 コードサイズが小さいです。

-mリラックス
「CALL」または「CALL」を置き換えてみてください。 短い「RCALL」応答による「JMP」命令。 「RJMP」
該当する場合の指示。 「-mrelax」を設定すると、「--relax」オプションが
リンカーが呼び出されたときのリンカー コマンド ライン。

ジャンプオフセットは以前は不明であったため、ジャンプ緩和はリンカーによって実行されます
コードがあります。 したがって、コンパイラによって生成されるアセンブラコードは同じです。
ただし、実行可能ファイルの命令は、アセンブラの命令とは異なる場合があります
コー​​ド。

リンカースタブが必要な場合は、リラクシングをオンにする必要があります。「EIND」のセクションを参照してください。
以下のリンカースタブ。

-mshort-呼び出し
このオプションは推奨されておらず、GCC 4.8 で削除されます。 については、「-mrelax」を参照してください。
交換。

16@tie{}KiB 以上のプログラムを搭載した端末でも「RCALL」/「RJMP」命令を使用する
メモリ、つまり「CALL」および「JMP」命令を持つデバイス上。

-msp8
スタックポインタレジスタを8ビットレジスタとして扱います。つまり、
スタックポインタはゼロです。 通常、このオプションを手動で設定する必要はありません。

このオプションは、コンパイラが次のマルチライブラリを選択してビルドするために内部的に使用されます。
アーキテクチャ「avr2」および「avr25」。 これらのアーキテクチャは、デバイスの有無にかかわらずデバイスを混合します
「SPH」。 「-mmcu=avr2」または「-mmcu=avr25」以外の設定の場合、コンパイラ ドライバは
コンパイラ本体のコマンド ラインからこのオプションを追加または削除します。
コンパイラは、デバイスまたはアーキテクチャに 8 ビットのスタック ポインタがあるかどうかを認識し、したがって
「SPH」レジスタがないかどうか。

-mstrict-X
ハードウェアが提案する方法でアドレスレジスタ「X」を使用します。 これは、「X」が
間接、ポストインクリメント、またはプレデクリメントのアドレス指定でのみ使用されます。

このオプションがない場合、「X」レジスタは「Y」または「Z」と同じように使用できます。
次に、追加の命令によってエミュレートされます。 たとえば、次の値をロードします
レジスタへの小さな非負の「const<64」による「X+const」アドレス指定 Rn is
として実行

adiw r26、const; X + = const
ld 、 バツ ; = * X
sbiw r26、const; X-= const

-mtiny-スタック
スタックポインタの下位8@tie{}ビットのみを変更します。

「EIND」および 128 Ki バイトを超えるフラッシュを搭載したデバイス

実装のポインタは16@tie{}ビット幅です。 関数またはラベルのアドレス
間接ジャンプや呼び出しが任意のコードをターゲットにできるように、ワードアドレスとして表されます
64 @ tie{}Kiワードの範囲のアドレス。

128 @ tie{}Kiバイトを超えるデバイスでの間接ジャンプを容易にするため
プログラムメモリ空間には、「EIND」と呼ばれる特殊機能レジスタがあります。
「EICALL」または「EIJMP」命令が次の場合のターゲットアドレスの最も重要な部分
中古。

これらのデバイスでの間接ジャンプおよび呼び出しは、コンパイラによって次のように処理され、
いくつかの制限があります:

· コンパイラは "EIND" を設定しません。

· コンパイラは、"EICALL"/"EIJMP" 命令で暗黙的に "EIND" を使用するか、読み取る場合があります。
「RET」を使用して間接呼び出し/ジャンプをエミュレートするために直接「EIND」
命令。

· コンパイラは、「EIND」がスタートアップ コードまたは
応用。 特に、「EIND」は関数または割り込みで保存/復元されません
サービスルーチンのプロローグ/エピローグ。

· 関数への間接呼び出しと計算された goto の場合、リンカは スタブ。 スタブ
ジャンプパッドと呼ばれることもあります トランポリン。 したがって、間接呼び出し/ジャンプはにジャンプします
そのようなスタブ。 スタブには、目的のアドレスへの直接ジャンプが含まれています。

· リンカーがスタブを生成するように、リンカー緩和を有効にする必要があります。
正しくすべての状況。 コンパイラ オプション "-mrelax" と linler オプションを参照してください。
" - リラックス"。 リンカーがスタブを生成することになっているまれなケースがありますが、
緩和せず、役立つエラー メッセージも表示せずに中止します。

・「EIND=0」のコードは、デフォルトのリンカスクリプトが配置されています。 コードが想定される場合
「EIND!= 0」のセットアップで機能するには、カスタムリンカースクリプトを順番に使用する必要があります
名前が「.trampolines」で始まるセクションを次のセグメントに配置します。
「EIND」はを指します。

· libgcc からの起動コードは "EIND" を設定しません。 スタートアップ コードがブレンドであることに注意してください
libgccおよびAVR-LibCからのコードの。 「EIND」に対するAVR-LibCの影響については、AVR-を参照してください。
LibCユーザーマニュアル( "http://nongnu.org/avr-libc/user-manual/")。

· ユーザー固有の起動コードが「EIND」を早期に設定することは正当です。たとえば、
セクション「.init3」にある初期化コードの手段。 そのようなコードは前に実行されます
RAMを初期化し、コンストラクターを呼び出す一般的なスタートアップコードですが、
ベクトルテーブルがあるセグメントに「EIND」を設定するAVR-LibCからの起動コード
位置しています。

#含む

静的ボイド
__attribute __((section( "。init3")、naked、used、no_instrument_function))
init3_set_eind(void)
{
__asm volatile( "ldi r24、pm_hh8(__ trampolines_start)\ n \ t"
"out%i0、r24" :: "n"(&EIND): "r24"、 "memory");
}

「__trampolines_start」シンボルは、リンカースクリプトで定義されています。

· 以下の XNUMX つの条件が満たされている場合、リンカによってスタブが自動的に生成されます。
会った:

-
(の略 生成する スタブ) そのようです:

LDI r24、lo8(gs( ))
LDI r25、hi8(gs( ))

-
外側 スタブが配置されているセグメント。

· コンパイラは、次の状況でコード ラベルに対してこのような "gs" 修飾子を発行します。

-
-
- -mcall-プロローグ>
コマンドラインオプション。

-
指定できるテーブル -fno-ジャンプテーブル コマンドラインオプション。

-
-
· そのような非シンボリック アドレスへのジャンプは サポート:

int main(void)
{
/*ワードアドレス0x2で関数を呼び出す*/
return((int(*)(void))0x2)();
}

代わりに、スタブを設定する必要があります。つまり、関数はシンボルを介して呼び出す必要があります
(例では「func_4」):

int main(void)
{
extern int func_4(void);

/*バイトアドレス0x4で関数を呼び出す*/
func_4();を返します。
}

アプリケーションは「-Wl,--defsym,func_4=0x4」でリンクされます。 または、「func_4」
リンカスクリプトで定義できます。

「RAMPD」、「RAMPX」、「RAMPY」、および「RAMPZ」特殊機能レジスタの処理

一部のAVRデバイスは、アクセス可能な64 @ tie{}KiB範囲よりも大きいメモリをサポートします
16ビットポインタ付き。 この64@tie {} KiBの範囲外のメモリ位置にアクセスするには、
「RAMP」レジスタの内容は、アドレスの上位部分として使用されます:「X」、「Y」、「Z」
アドレスレジスタは、「RAMPX」、「RAMPY」、「RAMPZ」特殊機能と連結されています。
ワイドアドレスを取得するには、それぞれ登録します。 同様に、「RAMPD」は
直接アドレス指定。

· スタートアップ コードは、「RAMP」特殊機能レジスタをゼロで初期化します。

・ もし AVR 名前付き 住所 スペース、名前付き 住所 スペース ジェネリックまたは「__flash」以外は
使用すると、操作前に必要に応じて「RAMPZ」が設定されます。

· デバイスが 64@tie{KiB} より大きい RAM をサポートし、コンパイラを変更する必要がある場合
「RAMPZ」は操作を実行し、「RAMPZ」は操作後にゼロにリセットされます。

· デバイスに特定の「RAMP」レジスタが付属している場合、ISR プロローグ/エピローグ
そのSFRを保存/復元し、ISRコードが発生する可能性がある場合に備えてゼロで初期化します。
(暗黙的に)それを使用します。

· 64@tie{KiB} より大きい RAM は、AVR ターゲットの GCC ではサポートされていません。 使用する場合
16ビットアドレス範囲外の場所から読み取り、変更するインラインアセンブラ
「RAMP」レジスタのXNUMXつであるため、アクセス後にゼロにリセットする必要があります。

AVRビルトインマクロ

GCCは、ユーザーコードが存在をテストできるように、いくつかの組み込みマクロを定義します。
機能の欠如。 次の組み込みマクロのほとんどすべてがデバイスから推定されます
したがって、「-mmcu=」コマンドライン オプションによってトリガーされます。

さらに多くのAVR固有の組み込みマクロについては、を参照してください。 AVR 名前付き 住所 スペース & AVR 内蔵
機能.

「__AVR_ARCH__」
アーキテクチャを識別するXNUMX進数に解決される組み込みマクロと
"-mmcu=mcu」 オプション。 可能な値は次のとおりです。

2、25、3、31、35、4、5、51、6、102、104、105、106、107

for MCU= "avr2"、 "avr25"、 "avr3"、 "avr31"、 "avr35"、 "avr4"、 "avr5"、 "avr51"、 "avr6"、
それぞれ「avrxmega2」、「avrxmega4」、「avrxmega5」、「avrxmega6」、「avrxmega7」。 もしも MCU
デバイスを指定すると、この組み込みマクロがそれに応じて設定されます。 たとえば、
"-mmcu=atmega8" マクロは 4 に定義されます。

"__AVR_デバイス__"
「-mmcu=」の設定デバイス" デバイスの名前を反映するこの組み込みマクロを定義します。
たとえば、"-mmcu=atmega8" は組み込みマクロ "__AVR_ATmega8__" を定義します。
「-mmcu=attiny261a」は「__AVR_ATtiny261A__」などを定義します。

組み込みマクロの名前は、スキーム「__AVR_」に従います。デバイス__" コラボレー デバイス
AVRユーザーマニュアルからのデバイス名。 の違い デバイス ビルトインで
マクロと デバイス 「-mmcu=」でデバイス" 後者は常に小文字であるということです。

If デバイス デバイスではなく、「avr51」のようなコア アーキテクチャにすぎない場合、このマクロは
定義されません。

「__AVR_XMEGA__」
デバイス/アーキテクチャは、デバイスの XMEGA ファミリに属します。

「__AVR_HAVE_ELPM__」
デバイスには「ELPM」命令があります。

"__AVR_HAVE_ELPMX__"
デバイスには「ELPMRn、Z」 および「ELPMRn、Z + " 指示に従ってください。

「__AVR_HAVE_MOVW__」
デバイスには、16ビットのレジスタ-レジスタ移動を実行するための「MOVW」命令があります。

「__AVR_HAVE_LPMX__」
デバイスには「LPMRn、Z」 および「LPMRn、Z + " 指示に従ってください。

「__AVR_HAVE_MUL__」
デバイスにはハードウェア乗算器があります。

"__AVR_HAVE_JMP_CALL__"
デバイスには「JMP」および「CALL」命令があります。 これは、
少なくとも 16@tie{}KiB のプログラム メモリ、および「-mshort-calls」が設定されていない場合。

"__AVR_HAVE_EIJMP_EICALL__"
「__AVR_3_BYTE_PC__」
デバイスには「EIJMP」および「EICALL」命令があります。 これはデバイスの場合です
128 @ tie{}KiBを超えるプログラムメモリを備えています。 これはまた、プログラムが
カウンター(PC)の幅は3 @tie{}バイトです。

「__AVR_2_BYTE_PC__」
プログラムカウンター(PC)の幅は2 @tie{}バイトです。 これは、最大で
プログラムメモリの128@tie{}KiB。

"__AVR_HAVE_8BIT_SP__"
"__AVR_HAVE_16BIT_SP__"
スタックポインタ(SP)レジスタは、によって8ビットまたは16ビットレジスタとして扱われます。
コンパイラ。 これらのマクロの定義は、「-mtiny-stack」の影響を受けます。

「__AVR_HAVE_SPH__」
「__AVR_SP8__」
デバイスにSPH(スタックポインタの上位部分)特殊機能レジスタがあるか、
それぞれ8ビットのスタックポインタ。 これらのマクロの定義は、
"-mmcu=" と "-mmcu=avr2" および "-mmcu=avr25" の場合は "-msp8" によっても。

「__AVR_HAVE_RAMPD__」
「__AVR_HAVE_RAMPX__」
「__AVR_HAVE_RAMPY__」
"__AVR_HAVE_RAMPZ__"
デバイスには、「RAMPD」、「RAMPX」、「RAMPY」、「RAMPZ」特殊機能レジスタがあり、


"__NO_INTERRUPTS__"
このマクロは、「-mno-interrupts」コマンド ライン オプションを反映しています。

「__AVR_ERRATA_SKIP__」
"__AVR_ERRATA_SKIP_JMP_CALL__"
一部のAVRデバイス(AT90S8515、ATmega103)は、次の理由で32ビット命令をスキップしてはなりません。
ハードウェアの正誤表。 スキップ手順は、「SBRS」、「SBRC」、「SBIS」、「SBIC」、「CPSE」です。
XNUMX番目のマクロは、「__AVR_HAVE_JMP_CALL__」も設定されている場合にのみ定義されます。

"__AVR_SFR_OFFSET __ =オフセット"
「IN」のようにI/O特殊機能レジスタを直接アドレス指定できる命令。
「OUT」、「SBI」などは、次の命令でアドレス指定されているかのように、異なるアドレスを使用する場合があります。
「LD」や「STS」などのRAMにアクセスします。 このオフセットはデバイスアーキテクチャに依存し、
それぞれのI/O @ tie {}アドレスを取得するために、RAMアドレスから減算されます。

"__WITH_AVRLIBC__"
コンパイラは、AVR-Libcと一緒に使用するように構成されています。 を参照してください
「--with-avrlibc」構成オプション。

ブラックフィン オプション

-mcpu =CPU[-シレビジョン]
ターゲットBlackfinプロセッサの名前を指定します。 現在、 CPU のXNUMXつになることができます
bf512, bf514, bf516, bf518, bf522, bf523, bf524, bf525, bf526, bf527, bf531, bf532,
bf533, bf534, bf536, bf537, bf538, bf539, bf542, bf544, bf547, bf548, bf549, BF542M,
BF544M, BF547M, BF548M, BF549M, bf561, bf592。 オプションの シレビジョン を指定します
ターゲット Blackfin プロセッサのシリコン リビジョン。 で利用可能な回避策
対象のシリコン リビジョンが有効になります。 もしも シレビジョン is なし、回避策はありません
有効にします。 もしも シレビジョン is どれか、ターゲット プロセッサのすべての回避策は、
有効にします。 「__SILICON_REVISION__」マクロは XNUMX 桁の XNUMX 進数に定義されています
シリコン リビジョンのメジャー番号とマイナー番号を表します。 もしも シレビジョン is
なし、「__SILICON_REVISION__」は定義されていません。 もしも シレビジョン is どれか
「__SILICON_REVISION__」は 0xffff と定義されています。 これがオプションの場合 シレビジョン ではありません
使用されている場合、GCC は対象の Blackfin の最新の既知のシリコン リビジョンを想定しています。
プロセッサ。

へのサポート bf561 不完全です。 為に bf561, プロセッサ マクロのみが定義されています。
このオプションがない場合、 bf532 がデフォルトでプロセッサとして使用されます。 対応します
定義済みプロセッサ マクロ CPU を定義する必要があります。 そして、 bfinエルフ ツールチェーン、
これにより、libgloss によって提供されるハードウェア BSP がリンクされます。 -msim ではありません
与えられた。

-msim
プログラムがシミュレーターで実行されることを指定します。 これにより、シミュレータが発生します
リンクするlibglossによって提供されるBSP。このオプションは、次の場合にのみ有効です。 bfinエルフ
ツールチェーン。 のような特定の他のオプション -mid-共有ライブラリ & -mfdpic、 意味する
-msim.

-momit-リーフフレームポインター
リーフ関数のレジスタにフレームポインタを保持しないでください。 これにより、
フレームポインタを保存、設定、復元し、追加のレジスタを作成する手順
リーフ機能で利用できます。 オプション -fomit-フレームポインター フレームを削除します
すべての関数へのポインタ。デバッグが難しくなる可能性があります。

-mspecld-異常
有効にすると、コンパイラは、生成されたコードに含まれていないことを確認します。
ジャンプ命令後の投機的ロード。 このオプションを使用する場合、
「__WORKAROUND_SPECULATIVE_LOADS」が定義されています。

-mno-specld-異常
投機的な負荷の発生を防ぐために余分なコードを生成しないでください。

-mcsync-異常
有効にすると、コンパイラは、生成されたコードに CSYNC が含まれていないことを確認します。
または、条件分岐の直後に SSYNC 命令を実行します。 このオプションを使用すると、
「__WORKAROUND_SPECULATIVE_SYNCS」が定義されています。

-mno-csync-異常
CSYNCまたはSSYNC命令の発生を防ぐために余分なコードを生成しないでください
条件分岐の直後。

-mlow-64k
有効にすると、コンパイラは、全体が
プログラムはメモリの低い64kに収まります。

-mno-low-64k
プログラムが任意に大きいと仮定します。 これがデフォルトです。

-mstack-check-l1
uClinuxによってL1スクラッチパッドメモリに配置された情報を使用してスタックチェックを実行します
カーネル。

-mid-共有ライブラリ
ライブラリIDメソッドを介して共有ライブラリをサポートするコードを生成します。 これにより、
仮想メモリのない環境でインプレースおよび共有ライブラリを実行する場合
管理。 このオプションは、 -fPIC。 とともに bfinエルフ ターゲット、このオプションは
-msim.

-mno-id-共有ライブラリ
ID ベースの共有ライブラリが使用されていることを前提としないコードを生成します。 これは
デフォルト。

-mleaf-id-共有ライブラリ
ライブラリIDメソッドを介して共有ライブラリをサポートするコードを生成しますが、
このライブラリまたは実行可能ファイルは、他のID共有ライブラリに対してリンクしません。
これにより、コンパイラーはジャンプと呼び出しに高速なコードを使用できます。

-mno-leaf-id-共有ライブラリ
コンパイル中のコードがID共有ライブラリにリンクしないと想定しないでください。
jump および call insn では、より遅いコードが生成されます。

-mshared-library-id = n
コンパイルされる ID ベースの共有ライブラリの識別番号を指定します。
値 0 を指定すると、よりコンパクトなコードが生成されます。他の値を指定すると、よりコンパクトなコードが生成されます。
その番号を現在のライブラリに強制的に割り当てるが、スペースがないか、
このオプションを省略するよりも効率的です。

-msep-データ
データセグメントをメモリの別の領域に配置できるようにするコードを生成する
テキストセグメントから。 これにより、次のような環境での実行が可能になります。
テキストセクションに対する再配置を排除することによる仮想メモリ管理。

-mno-sep-データ
データセグメントがテキストセグメントの後に続くと想定するコードを生成します。 これは
デフォルト。

-mlong-calls
-mno-long-calls
最初にのアドレスをロードすることにより、関数呼び出しを実行するようにコンパイラーに指示します。
関数をレジスタに入れてから、このレジスタでサブルーチン呼び出しを実行します。 これ
ターゲット機能がの24ビットアドレス指定範囲外にある場合は、スイッチが必要です。
サブルーチン呼び出し命令のオフセットベースのバージョン。

この機能はデフォルトでは有効になっていません。 指定する -mno-long-calls を復元します
デフォルトの動作。 これらのスイッチは、コンパイラが生成する方法に影響を与えないことに注意してください
関数ポインタを介して関数呼び出しを処理するコード。

-mfast-fp
高速浮動小数点ライブラリとリンクします。 このライブラリは、IEEEの一部を緩和します
Not-a-Number(NAN)に対して入力をチェックするための浮動小数点標準のルール
パフォーマンスへの関心。

-minline-plt
知られていない関数への関数呼び出しでPLTエントリのインライン化を有効にする
ローカルにバインドします。 なしでは効果がありません -mfdpic.

-マルチコア
マルチコア Blackfin プロセッサ用のスタンドアロン アプリケーションを構築します。 適切な起動ファイルと
リンク スクリプトは、マルチコアをサポートするために使用されます。 このオプションは定義します
"__BFIN_MULTICORE". でのみ使用できます -mcpu = bf561[-シレビジョン]。 使用できます
  -mcorea or -マコレブ. 使わずに使う場合 -mcorea or -マコレブ、 シングル
アプリケーション/デュアル コア プログラミング モデルが使用されます。 このモデルでは、主な機能は
コア B は、coreb_main という名前にする必要があります。 と一緒に使う場合 -mcorea or -マコレブ、 1
コア プログラミング モデルごとのアプリケーションが使用されます。 このオプションを使用しない場合、シングル
コア アプリケーション プログラミング モデルが使用されます。

-mcorea
コアごとに 561 つのアプリケーションを使用する場合、BFXNUMX のコア A のスタンドアロン アプリケーションをビルドします。
プログラミングモデル。 コア A をサポートするために、適切な開始ファイルとリンク スクリプトが使用されます。
このオプションは「__BFIN_COREA」を定義します。 とともに使用する必要があります -マルチコア.

-マコレブ
コアごとに 561 つのアプリケーションを使用する場合、BFXNUMX のコア B のスタンドアロン アプリケーションをビルドします。
プログラミングモデル。 コア B をサポートするために、適切な開始ファイルとリンク スクリプトが使用されます。
このオプションは「__BFIN_COREB」を定義します。 このオプションを使用する場合、coreb_main は
メインの代わりに使用されます。 とともに使用する必要があります -マルチコア.

-msdram
SDRAM 用のスタンドアロン アプリケーションをビルドします。 適切な開始ファイルとリンク スクリプトは、
アプリケーションをSDRAMに配置するために使用されます。 ローダはロード前に SDRAM を初期化する必要があります
アプリケーションを SDRAM に書き込みます。 このオプションは「__BFIN_SDRAM」を定義します。

-micplb
ICPLBが実行時に有効になっていると想定します。 これは特定の異常に影響を及ぼします
回避策。 Linuxターゲットの場合、デフォルトではICPLBが有効になっていると想定しています。 為に
スタンドアロンアプリケーションのデフォルトはオフです。

C6X オプション

-XNUMX月=
これは、ターゲットアーキテクチャの名前を指定します。 GCCはこの名前を使用して決定します
アセンブリコードを生成するときに発行できる命令の種類。 許容される
名前は次のとおりです。 c62x, c64x, c64x +, c67x, c67x +, c674x.

-mbig-エンディアン
ビッグエンディアンターゲットのコードを生成します。

-mlittle-エンディアン
リトルエンディアンターゲットのコードを生成します。 これがデフォルトです。

-msim
シミュレータに適したスタートアップファイルとリンカスクリプトを選択します。

-msdata = default
小さなグローバル データと静的データを .neardata が指すセクション
「B14」を登録します。 初期化されていない小さなグローバルおよび静的データを .bss セクション、
に隣接している .neardata セクション。 小さな読み取り専用データを .rodata
セクション。 大きなデータに使用される対応するセクションは次のとおりです。 .fardata, 。遠い
& .const.

-msdata = all
小さなオブジェクトだけでなく、すべてのデータを小さなデータ用に予約されたセクションに入れます。
それらにアクセスするには、「B14」レジスタに関連するアドレス指定を使用します。

-msdata = none
小さなデータ用に予約されているセクションを使用せず、絶対アドレスを使用して
すべてのデータにアクセスします。 初期化されたすべてのグローバルおよび静的データを .fardata セクション、
およびすべての初期化されていないデータ 。遠い セクション。 すべての定数データを .const
のセクションから無料でダウンロードできます。

CRIS オプション

これらのオプションは、CRISポート用に特別に定義されています。

-XNUMX月=アーキテクチャタイプ
-mcpu =アーキテクチャタイプ
指定されたアーキテクチャのコードを生成します。 の選択肢 アーキテクチャタイプ  
v3, v8 & v10 それぞれETRAX4、ETRAX 100、およびETRAX100LX用。 デフォルトは v0
cris-axis-linux-gnuを除いて、デフォルトは v10.

-mtune =アーキテクチャタイプ
に調整する アーキテクチャタイプ 生成されたコードに該当するすべてのもの(ただし、
ABIと利用可能な一連の指示。 の選択肢 アーキテクチャタイプ  
と同じ -XNUMX月=アーキテクチャタイプ.

-mmax-stack-frame =n
関数のスタックフレームが超過したときに警告します n バイト

-metrax4
-metrax100
オプション -metrax4 & -metrax100 の同義語です -march = v3 & -march = v8


-mmul-バグ-回避策
-mno-mul-bug-回避策
CPUモデルの「muls」および「mulu」命令のバグを回避します。
適用されます。 このオプションはデフォルトでアクティブになっています。

-mpdebug
アセンブリコードでCRIS固有の詳細なデバッグ関連情報を有効にします。 これ
オプションには、 #NO_APP フォーマットされたコードインジケーター
アセンブリファイルの先頭にあるアセンブラ。

-mcc-init
前の命令からの条件コードの結果を使用しないでください。 常に比較を発行し、
条件コードを使用する前に、指示をテストしてください。

-mno-副作用
ポスト モード以外のアドレッシング モードで、副作用のある命令を発行しないでください。
インクリメント。

-mstack-align
-mno-stack-align
-mdata-align
-mno-data-align
-mconst-align
-mno-const-align
これらのオプション (オプションなし) は、スタック フレームの配置 (配置の削除) を行います。
単一データアクセスの最大サイズに合わせて調整される個々のデータと定数
選択したCPUモデル用。 デフォルトでは、32ビットアライメントを調整します。 ABI
構造レイアウトなどの詳細は、これらのオプションの影響を受けません。

-m32ビット
-m16ビット
-m8ビット
上記のstack-data-およびconst-alignオプションと同様に、これらのオプションは
スタック フレーム、書き込み可能なデータ、および定数をすべて 32 ビット、16 ビット、または 8 ビットに揃えます。
デフォルトは32ビットアライメントです。

-mno-プロローグ-エピローグ
-mprologue-エピローグ
-mno-プロローグ-エピローグ、設定した通常の関数プロローグとエピローグ
スタックフレームは省略され、リターン命令またはリターンシーケンスは省略されます。
コードで生成されます。 このオプションは、目視検査と一緒にのみ使用してください。
コンパイルされたコード:呼び出し保存されたレジスターが必要な場合、警告やエラーは生成されません
または、ローカル変数用のストレージを割り当てる必要があります。

-mno-gotplt
-mgotplt
-fpic & -fPIC、ロードする命令シーケンスを生成しない(生成しない)
(他の従来の)ではなく、GOTのPLT部分からの関数のアドレス
アーキテクチャ)PLTへの呼び出し。 デフォルトは -mgotplt.

-メルフ
cris-axis-elfおよびcris-axis-linux-gnuでのみ認識されるレガシーno-opオプション
ターゲット。

-mlinux
従来のno-opオプションは、cris-axis-linux-gnuターゲットでのみ認識されます。

-シム
cris-axis-elf で認識されるこのオプションは、入出力とリンクするように手配します
シミュレータライブラリの関数。 コード、初期化されたデータ、およびゼロで初期化されたデータ
連続して割り当てられます。

-sim2
いいね -シム、ただし、リンカーオプションを渡して、初期化されたデータを0x40000000およびゼロに配置します-
0x80000000でデータを初期化しました。

CR16 オプション

これらのオプションは、CR16ポート用に特別に定義されています。

-mmac
積和命令の使用を有効にします。 デフォルトでは無効になっています。

-mcr16cplus
-mcr16c
CR16CまたはCR16C+アーキテクチャのコードを生成します。 CR16C+アーキテクチャがデフォルトです。

-msim
シミュレータと互換性のあるライブラリ libsim.a をリンクします。 エルフに適用
コンパイラのみ。

-ミント32
整数型を32ビット幅として選択します。

-mbit-ops
ビット操作用の sbit/cbit 命令を生成します。

-mdata-model =
データモデルを選択します。 の選択肢   近く, 遠く or ミディアム. ミディアム デフォルトです。
しかしながら、 遠く -mcr16c オプションが選択されている場合は無効です。CR16C アーキテクチャは無効です。
far データ モデルをサポートします。

ダーウィン オプション

これらのオプションは、Darwinオペレーティングシステムを実行しているすべてのアーキテクチャに対して定義されています。

Darwin 上の FSF GCC は「太い」オブジェクト ファイルを作成しません。 オブジェクトファイルを作成します
ターゲットとして構築された単一のアーキテクチャ。 Darwin上のAppleのGCCは作成します
複数の場合は「太い」ファイル -アーチ オプションが使用されます。 コンパイラを実行するか、
リンカーを複数回実行し、結果を一緒に結合します リポ.

作成されたファイルのサブタイプ( ppc7400 or ppc970 or i686)によって決定されます
GCC が対象としている ISA を指定するフラグ -mcpu or -行進を選択します。
-force_cpusubtype_ALL オプションを使用してこれをオーバーライドできます。

ダーウィンツールは、ISAの不一致が提示された場合の動作が異なります。 The
アセンブラ、 as、のサブタイプに有効な命令の使用のみを許可します
そのため、64 ビット命令を ppc750 オブジェクトファイル。
共有ライブラリのリンカー、 / usr / bin / libtool、要求された場合は失敗し、エラーを出力します
入力ファイルよりも制限の少ないサブタイプを持つ共有ライブラリを作成します (
インスタンス、入れようとしています ppc970 のオブジェクトファイル ppc7400 図書館)。 のリンカー
実行可能ファイル、 ld、実行可能ファイルに最も制限的なサブタイプを静かに与えます
その入力ファイル。

-FDIR
フレームワークディレクトリを追加します DIR 検索するディレクトリのリストの先頭に
ヘッダーファイル用。 これらのディレクトリは、によって指定されたディレクトリとインターリーブされます -I
オプションで、左から右の順序でスキャンされます。

フレームワークディレクトリは、フレームワークを含むディレクトリです。 フレームワークは
のあるディレクトリ 「ヘッダー」 および 「プライベートヘッダー」 その中に直接含まれるディレクトリ
それはで終わります "。フレームワーク". フレームワークの名前は、このディレクトリの名前です
を除く "。フレームワーク". フレームワークに関連付けられたヘッダーは、次のいずれかにあります。
これらの XNUMX つのディレクトリで、 「ヘッダー」 最初に検索されます。 サブフレームワークは
フレームワークのディレクトリにあるフレームワーク ディレクトリ 「フレームワーク」 ディレクトリ。 含まれるもの
サブフレームワーク ヘッダーは、フレームワークのヘッダーにのみ表示できます。
サブフレームワーク、または兄弟サブフレームワーク ヘッダー内。 次の場合、XNUMX つのサブフレームワークは兄弟です。
それらは同じフレームワークで発生します。 サブフレームワークは、サブフレームワークと同じ名前であってはなりません
これに違反すると、警告が発行されます。 現在サブフレームワーク
サブフレームワークを持つことはできません。将来的には、サポートするようにメカニズムが拡張される可能性があります
これ。 標準フレームワークは次の場所にあります。 「/システム/ライブラリ/フレームワーク」 &
「/ライブラリ/フレームワーク」。 インクルードの例は「#include "、
コラボレー フレームワーク はフレームワークの名前を示し、header.h は
「プライベートヘッダー」 or 「ヘッダー」 ディレクトリにあります。

-iframeworkDIR
いいね -F ただし、ディレクトリはシステムディレクトリとして扱われます。 主な違い
この間 -iframework & -F それは -iframework コンパイラは警告しません
経由で見つかったヘッダーファイルに含まれる構成について DIR。 このオプションは有効です
Cファミリーの言語のみ。

-突っ込んだ
使用されているシンボルのデバッグ情報を出力します。 STABS デバッグ形式の場合、
これにより、 -feliminate-未使用のデバッグシンボル。 これはデフォルトでオンになっています。

-gfull
すべてのシンボルとタイプのデバッグ情報を出力します。

-mmacosx-version-min =バージョン
この実行可能ファイルが実行されるMacOSXの最も古いバージョンは バージョン。 典型的な
の値 バージョン 10.1、10.2、および10.3.9を含みます。

コンパイラがデフォルトでシステムのヘッダーを使用するように構築されている場合、デフォルトでは
このオプションは、コンパイラが実行されているシステムバージョンです。それ以外の場合は、
デフォルトでは、同じ数のシステムおよびコードベースと互換性のある選択を行います
可能。

-mkernel
カーネル開発モードを有効にします。 The -mkernel オプションセット -静的, -fno-common,
-fno-cxa-atexit, -fno-例外, -fno-非呼び出し例外, -fapple-kext, -fno-弱い
& -fno-rtti 該当する場合。 このモードも設定します -mno-altivec, -msoft-float,
-fno-builtin & -mlong-枝 PowerPCターゲットの場合。

-mone-byte-bool
のデフォルトを上書きします ブール そのため、 sizeof(ブール値)==1。 デフォルトでは sizeof(ブール値) is 4
Darwin/PowerPC 用にコンパイルする場合と 1 Darwin/x86 用にコンパイルする場合、このオプション
x86 には影響しません。

警告:   -mone-byte-bool スイッチを使用すると、GCCはバイナリではないコードを生成します
そのスイッチなしで生成されたコードと互換性があります。 このスイッチを使用するには、
システムライブラリを含む、プログラム内の他のすべてのモジュールを再コンパイルします。 これを使って
デフォルト以外のデータモデルに準拠するように切り替えます。

-mfix と継続
-修正して続行
-findirect-データ
迅速なターンアラウンド開発に適したコードを生成します。 gdb を有効にするために必要
".o" ファイルを実行中のプログラムに動的にロードします。 -findirect-データ &
-修正して続行 下位互換性のために提供されています。

-all_load
静的アーカイブライブラリのすべてのメンバーをロードします。 男を参照してください ld(1)詳細については。

-arch_errors_fatal
間違ったアーキテクチャを持つファイルに関係するエラーを致命的にします。

-bind_at_load
ダイナミックリンカがすべてをバインドするように出力ファイルにマークを付けます
ファイルがロードまたは起動されたときの未定義の参照。

-バンドル
Mach-oバンドル形式のファイルを作成します。 男を参照してください ld(1)詳細については。

-バンドル_ローダー 実行ファイル
このオプションは、 実行ファイル ビルド出力ファイルをロードします
リンクされています。 男を参照してください ld(1)詳細については。

-ダイナミックリブ
このオプションを渡すと、GCC は実行可能ファイルの代わりに動的ライブラリを生成します
リンクするときは、Darwin を使用します リブツール

-force_cpusubtype_ALL
これにより、GCCの出力ファイルに 全て サブタイプ、によって制御されるものの代わりに
  -mcpu or -行進 オプションを選択します。

-allowable_client クライアント名
-クライアント名
-compatibility_version
-現行版
-デッド_ストリップ
-依存関係ファイル
-dylib_file
-dylinker_install_name
-動的
-exported_symbols_list
-ファイルリスト
- flat_namespace
-force_ flat_namespace
-headerpad_max_install_names
-image_base
-初期化
-インストール名
-keep_private_externs
-multi_module
-multiply_define
-multiply_define_unused
-noall_load
-no_dead_strip_inits_and_terms
-nofixprebinding
-nomultidefs
-noprebind
-nosegリンク編集
-pagezero_size
-事前バインド
-prebind_all_twolevel_modules
-private_bundle
-read_only_relocs
-sectalign
-sectobjectsymbols
-なぜロード
-seg1addr
-sectcreate
-sectobjectsymbols
-セクターダー
-segaddr
-segs_read_only_addr
-segs_read_write_addr
-seg_addr_table
-seg_addr_table_filename
-seglinkedit
-segprot
-segs_read_only_addr
-segs_read_write_addr
-single_module
-静的
-サブライブラリ
-サブ傘
-twolevel_namespace
-傘
-未定義
-unexported_symbols_list
-weak_reference_mismatches
-Whatsloaded
これらのオプションはDarwinリンカーに渡されます。 ダーウィンリンカーのマニュアルページでは、
それらを詳細に示します。

12月 アルファ オプション

ボーマン -m オプションは、DECAlpha実装用に定義されています。

-mno-ソフトフロート
-msoft-float
浮動小数点のハードウェア浮動小数点命令を使用する(使用しない)
オペレーション。 いつ -msoft-float が指定されている場合、 libgcc.a に使用されます
浮動小数点演算を実行します。 エミュレートするルーチンに置き換えられない限り
浮動小数点演算、またはそのようなエミュレーションを呼び出すような方法でコンパイルされた
これらのルーチンは浮動小数点演算を発行します。 コンパイルしている場合
浮動小数点演算のない Alpha の場合、ライブラリが次のようになっていることを確認する必要があります。
それらを呼び出さないように構築されています。

浮動小数点演算を使用しないAlpha実装には、次のものが必要であることに注意してください。
浮動小数点レジスタ。

-MFP-REG
-mno-fp-regs
浮動小数点レジスタセットを使用する(使用しない)コードを生成します。 -mno-fp-regs
含意する -msoft-float。 浮動小数点レジスタセットを使用しない場合は、浮動小数点
オペランドは、整数および浮動小数点であるかのように整数レジスタに渡されます
結果は$f0ではなく$0で渡されます。 これは非標準の呼び出しシーケンスであるため、
コンパイルされたコードによって呼び出される浮動小数点引数または戻り値を持つ関数
  -mno-fp-regs また、そのオプションを使用してコンパイルする必要があります。

このオプションの一般的な使用法は、使用しないカーネルを構築することです。
保存および復元ではなく、浮動小数点レジスター。

-ミィー
Alphaアーキテクチャは、最大に最適化された浮動小数点ハードウェアを実装します
パフォーマンス。 これは、IEEE浮動小数点標準にほぼ準拠しています。 でも、
完全に準拠するには、ソフトウェアによる支援が必要です。 このオプションはコードを生成します
完全にIEEE準拠のコード 以下は除く その 不正確なフラグ 維持されません(以下を参照)。
このオプションをオンにすると、プリプロセッサマクロ「_IEEE_FP」が
コンパイル。 結果のコードは効率が悪くなりますが、正しくサポートできます
非正規化数と、非正規化数やプラス/マイナスなどの例外的なIEEE値
無限大。 他のAlphaコンパイラはこのオプションを呼び出します -ieee_with_no_inexact.

-mieee-with-不正確
これは -ミィー 生成されたコードもIEEEを維持することを除いて 不正確なフラグ.
このオプションをオンにすると、生成されたコードは完全に準拠したIEEEを実装します。
算数。 「_IEEE_FP」に加えて、「_IEEE_FP_EXACT」はプリプロセッサマクロとして定義されています。
一部のAlpha実装では、結果のコードの実行速度が大幅に低下する場合があります。
デフォルトで生成されるコード。 に依存するコードはほとんどないので
不正確なフラグ、通常はこのオプションを指定しないでください。 他のAlphaコンパイラは
このオプション -ieee_with_inexact.

-mfp-trap-mode =トラップモード
このオプションは、有効にする浮動小数点関連のトラップを制御します。 その他のアルファ
コンパイラはこのオプションを呼び出します -fptm トラップモード。 トラップモードはXNUMXつのうちのXNUMXつに設定できます
値:

n これはデフォルトの(通常の)設定です。 有効になっているトラップは
ソフトウェアで無効にできないもの(ゼロ除算トラップなど)。

u によって有効にされたトラップに加えて n、アンダーフロートラップも有効になります。

su いいね u、ただし、命令はソフトウェアの完了に対して安全であるとマークされています(を参照)
詳細については、Alphaアーキテクチャのマニュアルを参照してください)。

オン いいね su、ただし、不正確なトラップも有効になっています。

-mfp-rounding-mode =丸めモード
IEEE丸めモードを選択します。 他のAlphaコンパイラはこのオプションを呼び出します -fprm
丸めモードを選択します。 丸めモード 次のいずれかになります。

n 通常のIEEE丸めモード。 浮動小数点数は、最も近い数値に丸められます
同点の場合は、マシン番号または偶数マシン番号に向かって。

m マイナス無限大に向かって丸めます。

c 切り刻まれた丸めモード。 浮動小数点数はゼロに向かって丸められます。

d 動的丸めモード。 浮動小数点制御レジスタのフィールド(FPCRを参照してください
Alphaアーキテクチャリファレンスマニュアル)は、有効な丸めモードを制御します。 C
ライブラリは、プラス無限大に丸めるためにこのレジスタを初期化します。 したがって、
プログラムが変更しない限り FPCR, d プラス方向のラウンドに対応
無限。

-mtrap-precision =トラップ精度
Alphaアーキテクチャでは、浮動小数点トラップは不正確です。 これは、
ソフトウェア支援フローティングトラップとプログラムから回復することは不可能です
通常、実行を終了する必要があります。 GCCは、支援できるコードを生成できます
オペレーティングシステムのトラップハンドラーは、原因となった正確な場所を特定します。
浮動小数点トラップ。 アプリケーションの要件に応じて、異なる
精度のレベルを選択できます。

p プログラムの精度。 このオプションはデフォルトであり、トラップハンドラーのみが実行できることを意味します
浮動小数点例外の原因となったプログラムを特定します。

f 関数の精度。 トラップハンドラーは、原因となった関数を特定できます。
浮動小数点例外。

i 命令精度。 トラップハンドラーは、次のような正確な命令を判別できます。
浮動小数点例外が発生しました。

他のAlphaコンパイラは、と呼ばれる同等のオプションを提供します -scope_safe &
-再開_安全.

-mieee-準拠
このオプションは、生成されたコードをIEEE準拠としてマークします。 このオプションは使用しないでください
指定しない限り -mtrap-precision = i そしてどちらか -mfp-trap-mode = su or
-mfp-trap-mode = sui。 その唯一の効果は、ラインを放出することです .eflag 48 関数内
生成されたアセンブリ ファイルのプロローグ。 DEC Unix では、これには次のような効果があります。
IEEE 準拠の数学ライブラリ ルーチンがリンクされます。

-mbuild-定数
通常、GCCは32ビットまたは64ビットの整数定数を調べて、それを構築できるかどうかを確認します
XNUMX つまたは XNUMX つの命令で小さな定数から。 できない場合は、
定数をリテラルとして定義し、実行時にデータ セグメントからロードするコードを生成します。

このオプションを使用して、GCCに構築を要求します たとえコードを使用する整数定数
より多くの命令が必要です(最大はXNUMXつです)。

通常、このオプションを使用して、共有ライブラリの動的ローダーを構築します。 自体
共有ライブラリの場合、変数を見つける前にメモリ内で再配置する必要があります
および独自のデータ セグメント内の定数。

-マルファ-アス
-メガガス
ベンダー提供のアセンブラでアセンブルするコードを生成するかどうかを選択します
(-マルファ-アス) または GNU アセンブラによる -メガガス.

-mbwx
-mno-bwx
-mcix
-mno-cix
-mfix
-mno-修正
-mmax
-mno-max
オプションのBWX、CIX、FIX、およびMAXを使用するためにGCCがコードを生成する必要があるかどうかを示します
命令セット。 デフォルトでは、CPUでサポートされている命令セットを使用します
経由で指定されたタイプ -mcpu = オプションがない場合は GCC が構築された CPU のオプション。
指定。

-mfloat-vax
-mfloat-ieee
代わりにVAXFおよびG浮動小数点演算を使用する(使用しない)コードを生成します
IEEEの単精度および倍精度。

-mexplicit-relocs
-mno-explicit-relocs
古いAlphaアセンブラは、経由する以外にシンボルの再配置を生成する方法を提供していませんでした
アセンブラマクロ。 これらのマクロを使用すると、最適な命令スケジューリングができなくなります。
バージョン2.12以降のGNUbinutilsは、コンパイラが次のことを実行できるようにする新しい構文をサポートしています。
どの再配置をどの命令に適用するかを明示的にマークします。 このオプションは
GCCはアセンブラの機能を検出するため、デバッグに最も役立ちます。
が構築され、それに応じてデフォルトが設定されます。

-msmall-データ
-mlarge-データ
日時 -mexplicit-relocs が有効である場合、静的データには次の方法でアクセスします gp相対
移転。 いつ -msmall-データ が使用される場合、8バイト以下のオブジェクトが配置されます
a 小さい データ エリア (「.sdata」および「.sbss」セクション)および16ビットを介してアクセスされます
$gpレジスタからの再配置。 これにより、小さなデータ領域のサイズが次のように制限されます。
64KBですが、単一の命令を介して変数に直接アクセスできます。

デフォルトは -mlarge-データ。 このオプションを使用すると、データ領域はすぐ下に制限されます
2GB。 2GBを超えるデータを必要とするプログラムは、「malloc」または「mmap」を使用して
プログラムのデータセグメントではなく、ヒープにデータを割り当てます。

共有ライブラリのコードを生成する場合、 -fpic 含意する -msmall-データ & -fPIC
含意する -mlarge-データ.

-msmall-text
-拡大テキスト
日時 -msmall-text が使用される場合、コンパイラはプログラム全体のコードを想定します
(または共有ライブラリ)は4MBに収まるため、分岐命令で到達可能です。
日時 -msmall-データ が使用される場合、コンパイラはすべてのローカルシンボルが
同じ$gp値であるため、関数に必要な命令の数を減らすことができます
4から1に呼び出します。

デフォルトは -拡大テキスト.

-mcpu =cpu_type
マシンタイプの命令セットと命令スケジューリングパラメータを設定します
cpu_type。 次のいずれかを指定できます EV スタイル名または対応するチップ番号。
GCCは、EV4、EV5、およびEV6ファミリのプロセッサと
指定したプロセッサから命令セットのデフォルト値を選択します。
プロセッサ タイプを指定しない場合、GCC はデフォルトで、
コンパイラが構築されました。

サポートされている値 cpu_type  

ev4
ev45
21064
EV4としてスケジュールされ、命令セット拡張はありません。

ev5
21164
EV5としてスケジュールされ、命令セット拡張はありません。

ev56
21164a
EV5としてスケジュールし、BWX拡張をサポートします。

PCA56
21164pc
21164PC
EV5としてスケジュールし、BWXおよびMAX拡張機能をサポートします。

ev6
21264
EV6としてスケジュールし、BWX、FIX、およびMAX拡張機能をサポートします。

ev67
21264a
EV6としてスケジュールし、BWX、CIX、FIX、およびMAX拡張機能をサポートします。

ネイティブツールチェーンも価値をサポートします ネイティブ、最適なアーキテクチャを選択します
ホストプロセッサのオプション。 -mcpu = native GCCが認識しない場合は効果がありません
プロセッサ。

-mtune =cpu_type
マシンタイプの命令スケジューリングパラメータのみを設定します cpu_typeを選択します。
命令セットは変更されません。

ネイティブツールチェーンも価値をサポートします ネイティブ、最適なアーキテクチャを選択します
ホストプロセッサのオプション。 -mtune = native GCCが認識しない場合は効果がありません
プロセッサ。

-mmemory-latency =時間
次のように、スケジューラが一般的なメモリ参照に対して想定するレイテンシを設定します。
アプリケーション。 この数は、使用されるメモリアクセスパターンに大きく依存します
アプリケーションとマシンの外部キャッシュのサイズによって異なります。

の有効なオプション 時間  


クロックサイクルを表すXNUMX進数。

L1
L2
L3
メイン
コンパイラには、「一般的な」EV4およびのクロックサイクル数の見積もりが含まれています。
レベル5、1、および2キャッシュ用のEV3ハードウェア(Dcache、Scache、および
Bcache)、およびメインメモリへ。 L3はEV5でのみ有効であることに注意してください。

12月 アルファ/VMS オプション

ボーマン -m オプションは、DEC Alpha/VMS 実装用に定義されています。

-mvms-リターンコード
メインから VMS 条件コードを返します。 デフォルトでは、POSIX スタイルの条件を返します
(例:エラー)コード。

-mdebug-main =接頭辞
名前がで始まる最初のルーチンにフラグを立てます 接頭辞 のメインルーチンとして
デバッガ。

-mmalloc64
デフォルトは64ビットのメモリ割り当てルーチンです。

FR30 オプション

これらのオプションは、FR30ポート用に特別に定義されています。

-msmall-モデル
小さなアドレス空間モデルを使用します。 これにより、より小さなコードが生成される可能性がありますが、
すべての記号値とアドレスが 20 ビットの範囲に収まるようにします。

-mno-lsim
ランタイムサポートが提供されているため、を含める必要はないと想定します。
シミュレータライブラリ(libsim.a)リンカーコマンドライン。

FRV オプション

-mgpr-32
最初の32個の汎用レジスタのみを使用してください。

-mgpr-64
64個すべての汎用レジスタを使用します。

-MFPR-32
最初の32個の浮動小数点レジスタのみを使用してください。

-MFPR-64
64個の浮動小数点レジスタすべてを使用します。

-mhard-float
浮動小数点演算にはハードウェア命令を使用してください。

-msoft-float
浮動小数点演算にはライブラリルーチンを使用します。

-malloc-cc
条件コードレジスタを動的に割り当てます。

-mfixed-cc
条件コードレジスタを動的に割り当てようとせず、「icc0」と
「fcc0」。

-mdword
ダブルワードinsnsを使用するようにABIを変更します。

-mno-dword
ダブルワード命令は使用しないでください。

-mdouble
浮動小数点のdouble命令を使用します。

-mno-double
浮動小数点のdouble命令は使用しないでください。

-メディア
メディアの指示を使用してください。

-mno-メディア
メディアの指示を使用しないでください。

-ムムラッド
乗算および加算/減算の命令を使用します。

-mno-ムラッド
乗算および加算/減算の命令は使用しないでください。

-mfdpic
FDPIC ABIを選択します。これは、関数記述子を使用してへのポインターを表します。
機能。 PIC / PIE関連のオプションがない場合は、 -fPIE -fpic or
-fpie、GOTエントリと小さなデータがGOTから12ビットの範囲内にあることを前提としています
ベースアドレス; と -fPIC or -fPIE、GOTオフセットは32ビットで計算されます。 とともに
bfinエルフ ターゲット、このオプションは -msim.

-minline-plt
知られていない関数への関数呼び出しでPLTエントリのインライン化を有効にする
ローカルにバインドします。 なしでは効果がありません -mfdpic。 次の場合、デフォルトで有効になっています
速度の最適化と共有ライブラリのコンパイル(つまり、 -fPIC or -fpic)、または
次のような最適化オプションの場合 -O3 以上がコマンドラインに存在します。

-mTLS
スレッドローカルコードを生成するときは、大きなTLSセグメントを想定します。

-mtls
スレッドローカルコードを生成するときは、大きなTLSセグメントを想定しないでください。

-mgprel-ro
であることがわかっているデータに対して、FDPICABIで「GPREL」再配置の使用を有効にします。
読み取り専用セクション。 を除いて、デフォルトで有効になっています -fpic or -fpie: それでも
グローバルオフセットテーブルを小さくするのに役立つ場合があり、1つの命令を4つと交換します。
-fPIC or -fPIE、3つの命令を4つと交換し、そのうちのXNUMXつは複数の命令で共有される場合があります
シンボルであり、参照されるシンボルのGOTエントリの必要性を回避するため、
勝利する可能性が高くなります。 そうでない場合は、 -mno-gprel-ro 無効にするために使用できます。

-multilib-ライブラリ-pic
(FDではなくライブラリ)picライブラリとリンクします。 それはによって暗示されています -mlibrary-pic、 同じように
のように -fPIC & -fpic 無し -mfdpic。 明示的に使用する必要はありません。

-mlinked-fp
スタックフレームの場合は常にフレームポインタを作成するというEABIの要件に従ってください
割り当てられます。 このオプションはデフォルトで有効になっており、次の方法で無効にできます。
-mno-linked-fp.

-mlong-calls
間接アドレス指定を使用して、現在のコンパイル単位の外部で関数を呼び出します。 これ
関数を32ビットアドレス空間内のどこにでも配置できるようにします。

-悪性ラベル
前のパケットに nop を挿入して、ラベルを 8 バイト境界に揃えるようにしてください。
このオプションは、VLIWパッキングが有効になっている場合にのみ効果があります。 新しいものは作成しません
パケット; 既存のものにnopを追加するだけです。

-mlibrary-pic
位置に依存しないEABIコードを生成します。

-mac-4
最初のXNUMXつのメディアアキュムレータレジスタのみを使用してください。

-mac-8
XNUMXつのメディアアキュムレータレジスタすべてを使用します。

-mpack
VLIW命令をパックします。

-mno-pack
VLIW命令をパックしないでください。

-mno-eflags
e_flagsでABIスイッチをマークしないでください。

-mcond-移動
条件付き移動命令の使用を有効にします(デフォルト)。

このスイッチは主にコンパイラのデバッグ用であり、
将来のバージョン。

-mno-cond-move
条件付き移動命令の使用を無効にします。

このスイッチは主にコンパイラのデバッグ用であり、
将来のバージョン。

-mscc
条件付きセット命令の使用を有効にします(デフォルト)。

このスイッチは主にコンパイラのデバッグ用であり、
将来のバージョン。

-mno-scc
条件付きセット命令の使用を無効にします。

このスイッチは主にコンパイラのデバッグ用であり、
将来のバージョン。

-mcond-exec
条件付き実行の使用を有効にします(デフォルト)。

このスイッチは主にコンパイラのデバッグ用であり、
将来のバージョン。

-mno-cond-exec
条件付き実行の使用を無効にします。

このスイッチは主にコンパイラのデバッグ用であり、
将来のバージョン。

-mvliw-ブランチ
パスを実行して、ブランチをVLIW命令にパックします(デフォルト)。

このスイッチは主にコンパイラのデバッグ用であり、
将来のバージョン。

-mno-vliw-ブランチ
パスを実行してブランチをVLIW命令にパックしないでください。

このスイッチは主にコンパイラのデバッグ用であり、
将来のバージョン。

-mmulti-cond-exec
「&&」と「||」の最適化を有効にします条件付き実行(デフォルト)。

このスイッチは主にコンパイラのデバッグ用であり、
将来のバージョン。

-mno-multi-cond-exec
「&&」と「||」の最適化を無効にします条件付き実行で。

このスイッチは主にコンパイラのデバッグ用であり、
将来のバージョン。

-mnested-cond-exec
ネストされた条件付き実行の最適化を有効にします(デフォルト)。

このスイッチは主にコンパイラのデバッグ用であり、
将来のバージョン。

-mno-nested-cond-exec
ネストされた条件付き実行の最適化を無効にします。

このスイッチは主にコンパイラのデバッグ用であり、
将来のバージョン。

-moptimize-メンバーバー
このスイッチは、コンパイラによって生成されたコードから冗長な "メンバー" 命令を削除します。
デフォルトでは有効になっています。

-mno-optimize-memberbar
このスイッチは、冗長な「メンバー」命令の自動削除を無効にします。
生成されたコード。

-mtomcat-統計
ガスにTomcat統計を出力させます。

-mcpu =CPU
コードを生成するプロセッサタイプを選択します。 可能な値は次のとおりです frv, fr550,
雄猫, fr500, fr450, fr405, fr400, fr300 & シンプルな.

GNU / Linuxの オプション

ボーマン -m オプションはGNU/Linuxターゲット用に定義されています。

-mglibc
GNUCライブラリを使用します。 これは、を除くデフォルトです。 *-*-linux- * uclibc * &
*-*-linux- * android * ターゲット。

-ムクリブ
uClibcCライブラリを使用します。 これがデフォルトです *-*-linux- * uclibc * ターゲット。

-バイオニック
BionicCライブラリを使用します。 これがデフォルトです *-*-linux- * android * ターゲット。

-マンアンドロイド
Androidプラットフォームと互換性のあるコードをコンパイルします。 これがデフォルトです
*-*-linux- * android * ターゲット。

コンパイル時に、このオプションは有効になります -バイオニック, -fPIC, -fno-例外 & -fno-rtti by
デフォルト。 リンクするとき、このオプションはGCCドライバーにAndroid固有のオプションを渡します
リンカーに。 最後に、このオプションにより、プリプロセッサマクロ「__ANDROID__」は次のようになります。
定義された。

-tno-android-cc
のコンパイル効果を無効にする -マンアンドロイド、つまり、有効にしないでください -バイオニック, -fPIC,
-fno-例外 & -fno-rtti デフォルトでは

-tno-android-ld
のリンク効果を無効にする -マンアンドロイドつまり、標準のLinuxリンクオプションを
リンカ。

H8 / 300 オプション

ボーマン -m オプションは、H8/300実装用に定義されています。

-mリラックス
可能であれば、リンク時に一部のアドレス参照を短くします。 リンカーオプションを使用します
-リラックス.

-mh H8/300Hのコードを生成します。

-MS H8Sのコードを生成します。

-分 通常モードでH8SおよびH8/300Hのコードを生成します。 このスイッチを使用する必要があります
どちらかと -mh or -MS.

-ms2600
H8S/2600のコードを生成します。 このスイッチは、 -MS.

-ミント32
デフォルトで「int」データを32ビットにします。

-悪性-300
H8 / 300HおよびH8Sでは、H8/300と同じ位置合わせ規則を使用します。 デフォルト
H8 / 300HおよびH8Sの場合、ロングとフロートを4バイト境界に揃えます。
-悪性-300 それらを2バイト境界に揃えます。 このオプションは効果がありません
H8/300で。

HPPA オプション

ボーマン -m HPPAファミリーのコンピューターには、次のオプションが定義されています。

-XNUMX月=アーキテクチャタイプ
指定されたアーキテクチャのコードを生成します。 の選択肢 アーキテクチャタイプ  
1.0 PA 1.0の場合、 1.1 PA 1.1の場合、および 2.0 PA2.0プロセッサ用。 参照する
/usr/lib/sched.models HP-UXシステムで適切なアーキテクチャオプションを決定する
あなたのマシンのために。 番号の小さいアーキテクチャ用にコンパイルされたコードは、番号の高いアーキテクチャで実行されます
番号付きのアーキテクチャですが、その逆ではありません。

-mpa-risc-1-0
-mpa-risc-1-1
-mpa-risc-2-0
の同義語 -1.0月=XNUMX, -1.1月=XNUMX, -2.0月=XNUMX

-mbig スイッチ
大きなスイッチテーブルに適したコードを生成します。 このオプションは、
アセンブラ/リンカは、スイッチテーブル内の範囲外の分岐について文句を言います。

-mジャンプインディレイ
変更することにより、関数呼び出しの遅延スロットを無条件ジャンプ命令で埋めます
条件付きジャンプのターゲットとなる関数呼び出しの戻りポインター。

-mdisable-fpregs
浮動小数点レジスタがいかなる方法でも使用されないようにします。 これは
浮動小数点レジスタの遅延コンテキストスイッチングを実行するカーネルのコンパイル。 もしも
このオプションを使用して、コンパイラである浮動小数点演算を実行しようとします。
中止します。

-mdisable-インデックス作成
コンパイラがインデックスアドレスモードを使用しないようにします。 これはかなり回避します
MACHでMIGで生成されたコードをコンパイルするときのあいまいな問題。

-mno-space-regs
ターゲットにスペースレジスタがないと想定するコードを生成します。 これにより、GCCは
より高速な間接呼び出しを生成し、スケーリングされていないインデックスアドレスモードを使用します。

このようなコードは、レベル0のPAシステムおよびカーネルに適しています。

-mfast-間接呼び出し
呼び出しがスペースの境界を越えないことを前提とするコードを生成します。 これにより、GCCは
より高速な間接呼び出しを実行するコードを発行します。

このオプションは、共有ライブラリまたはネストされた関数が存在する場合には機能しません。

-mfixed-range =レジスタ範囲
指定されたレジスタ範囲を固定レジスタとして扱うコードを生成します。 固定レジスタ
レジスタアロケータが使用できないものです。 これは、カーネルをコンパイルするときに役立ちます
コード。 レジスタ範囲は、ダッシュで区切られたXNUMXつのレジスタとして指定されます。 多数
レジスタ範囲は、コンマで区切って指定できます。

-mlong-ロードストア
HP-UX 3で必要になる場合があるように、10命令のロードおよびストアシーケンスを生成します
リンカ。 これは、 +k HPコンパイラのオプション。

-ポータブルランタイム
ELFシステム用にHPが提案したポータブル呼び出し規約を使用してください。

-メガガス
GASのみが理解するアセンブラディレクティブの使用を有効にします。

-mschedule =CPUタイプ
マシンタイプの制約に従ってコードをスケジュールします CPUタイプ。 選択肢
for CPUタイプ   700 7100, 7100LC, 7200, 7300 & 8000。 参照する
/usr/lib/sched.models HP-UXシステムで、適切なスケジューリングオプションを決定する
あなたのマシン。 デフォルトのスケジュールは 8000.

-mlinker-opt
HP-UXリンカーで最適化パスを有効にします。 これによりシンボリックデバッグが行われることに注意してください
無理だよ。 また、HP-UX8およびHP-UX9リンカーでバグが発生します。
一部のプログラムをリンクすると、偽のエラーメッセージが表示されます。

-msoft-float
浮動小数点のライブラリ呼び出しを含む出力を生成します。 警告: 必要条件
ライブラリは、すべてのHPPAターゲットで使用できるわけではありません。 通常、
マシンの通常のCコンパイラが使用されますが、これをクロスで直接実行することはできません。
コンパイル。 適切なライブラリを提供するには、独自の手配を行う必要があります
クロスコンパイルのための関数。

-msoft-float 出力ファイルの呼び出し規約を変更します。 したがって、それは
コンパイルする場合に便利です このオプションを使用したプログラムの特に、あなたはする必要があります
コンパイル libgcc.a、GCCに付属するライブラリ -msoft-float このために
動作するように。

-msio
サーバーIOの事前定義「_SIO」を生成します。 デフォルトは -mwsio。 これにより、
ワークステーションIOの事前定義、「__ hp9000s700」、「__ hp9000s700__」、および「_WSIO」。
これらのオプションは、HP-UXおよびHI-UXで使用できます。

-mgnu-ld
GNU ld 固有のオプションを使用します。 これで合格 -共有 共有を構築するときに ld に
図書館。 これは、GCCが明示的または暗黙的に構成されている場合のデフォルトです。
GNU リンカ。 このオプションは、どの ld が呼び出されるかには影響しません。
そのldに渡されるパラメータを変更します。 呼び出される ld は、
  --with-ld 構成オプション、GCCのプログラム検索パス、そして最後にユーザーの
パス。 GCCで使用されるリンカーは、 which `gcc -print-prog-name = ld`.
このオプションは、64 ビット HP-UX GCC でのみ使用できます。
hppa * 64 *-*-hpux *.

-mhp-ld
HP ld 固有のオプションを使用します。 これで合格 -b 共有ライブラリを構築するときの ld へ
パス +受け入れる 型の不一致 すべてのリンクで ld に。 GCC の場合のデフォルトです。
HP リンカーを使用して、明示的または暗黙的に構成されます。 このオプションにはありません
どの ld が呼び出されるかに影響します。どのパラメータがそれに渡されるかを変更するだけです。
ld。 呼び出される ld は、 --with-ld configure オプション、GCC の
プログラムの検索パス、そして最後にユーザーの パス. GCC が使用するリンカーは、
を使用して印刷されました which `gcc -print-prog-name = ld`. このオプションは、
64 ビット HP-UX GCC、つまり hppa * 64 *-*-hpux *.

-mlong-calls
長い呼び出しシーケンスを使用するコードを生成します。 これにより、通話が常に可能になります
リンカーで生成されたスタブに到達します。 デフォルトでは、次の場合にのみ長い呼び出しが生成されます。
呼び出しサイトから関数または変換ユニットの先頭までの距離。
場合によっては、使用されているブランチタイプによって設定された事前定義された制限を超えています。 The
通常の通話の制限は、PA7,600,000でそれぞれ240,000バイトと2.0バイトです。
およびPA1.Xアーキテクチャ。 Sibcallは常に240,000バイトに制限されています。

距離は、関数の最初から測定されます。
-機能-セクション オプション、または使用する場合 -メガガス & -mno-ポータブル-ランタイム オプション
HP-UXでSOMリンカーを使用して一緒に。

パフォーマンスが低下するため、通常、このオプションを使用することは望ましくありません。
ただし、大規模なアプリケーション、特に部分的なリンクが必要な場合に役立つ場合があります。
アプリケーションのビルドに使用されます。

使用される長い呼び出しのタイプは、アセンブラーとリンカーの機能によって異なります。
生成されるコードのタイプ。 長くサポートするシステムへの影響
絶対呼び出し、および長いpicシンボル差分またはpc相対呼び出しは
比較的小さい。 ただし、間接呼び出しは、PICコードの32ビットELFシステムで使用されます
そしてそれはかなり長いです。

-munix =unix-std
コンパイラの事前定義を生成し、指定されたUNIX標準の開始ファイルを選択します。
の選択肢 unix-std   93, 95 & 98. 93 すべてのHP-UXバージョンでサポートされています。
95 HP-UX10.10以降で使用できます。 98 HP-UX11.11以降で使用できます。
デフォルト値は 93 HP-UX 10.00の場合、 95 HP-UX 10.10から11.00まで、および 98
HP-UX11.11以降の場合。

-munix = 93 GCC3.3および3.4​​と同じ事前定義を提供します。 -munix = 95 は、大阪で
「XOPEN_UNIX」と「_XOPEN_SOURCE_EXTENDED」の追加の事前定義、およびスタートファイル
unix95.o. -munix = 98 「_XOPEN_UNIX」の追加の事前定義を提供します。
"_XOPEN_SOURCE_EXTENDED"、 "_ INCLUDE__STDC_A1_SOURCE"および"_INCLUDE_XOPEN_SOURCE_500"、
およびstartfile unix98.o.

これは、 重要 このオプションは、さまざまなライブラリのインターフェイスを変更することに注意してください
ルーチン。 また、Cライブラリの動作にも影響します。 したがって、 極端な
このオプションの使用には注意が必要です。

複数のUNIX標準で動作することを目的としたライブラリコードは、テストする必要があります。
変数の設定と復元 __xpg4_extended_mask 適切に。 ほとんどの GNU ソフトウェア
この機能は提供していません。

-nolibdld
次の場合にlibdld.slを検索するためのリンクオプションの生成を抑制します。 -静的 オプションがある
HP-UX10以降で指定されています。

-静的
libcでのsetlocaleのHP-UX実装は、libdld.slに依存しています。 そこには
libdld.slのアーカイブバージョンではありません。 したがって、 -静的 オプションが指定されている、
この依存関係を解決するには、特別なリンクオプションが必要です。

HP-UX 10以降では、GCCドライバーはリンクに必要なオプションを追加します
libdld.slの場合 -静的 オプションが指定されています。 これにより、結果のバイナリは次のようになります。
ダイナミックであること。 64ビットポートでは、リンカはデフォルトで動的バイナリを生成します。
とにかく。 The -nolibdld オプションを使用して、GCCドライバーが追加されないようにすることができます
これらのリンクオプション。

-スレッド
マルチスレッドのサポートを追加します DCE HP-UXのライブラリ。 このオプション
プリプロセッサとリンカの両方にフラグを設定します。

インテル 386 & AMD x86-64 オプション

ボーマン -m オプションは、i386 および x86-64 ファミリーのコンピューター用に定義されています。

-mtune =CPUタイプ
に調整する CPUタイプ ABIを除き、生成されたコードに該当するすべてのもの
および利用可能な命令のセット。 の選択肢 CPUタイプ には次の値があります:

ジェネリック
最も一般的なIA32/AMD64/EM64Tプロセッサ用に最適化されたコードを生成します。 もし、あんたが
コードが実行されるCPUを知っている場合は、対応するCPUを使用する必要があります
-ムチューン オプションの代わりに -mtune = generic. ただし、正確にどの CPU かがわからない場合は、
アプリケーションのユーザーが持っている場合は、このオプションを使用する必要があります。

新しいプロセッサが市場に導入されると、このオプションの動作
変更されます。 したがって、GCC の新しいバージョンにアップグレードすると、コードは
生成されたオプションは、最も一般的なプロセッサを反映するように変更されます。
そのバージョンの GCC がリリースされました。

ない -march = generic オプションのため -行進 命令セットを示します
コンパイラは使用でき、すべてに適用できる汎用命令セットはありません
プロセッサ。 対照的に、 -ムチューン プロセッサを示します(または、この場合は、
コードが最適化されているプロセッサのコレクション)。

ネイティブ
これにより、プロセッサを決定することにより、コンパイル時に調整する CPU が選択されます。
コンパイル マシンの種類。 使用する -mtune = native 最適化されたコードを生成します
選択した命令セットの制約下でのローカル マシンの場合。
使い方 -march=ネイティブ ローカルでサポートされているすべての命令サブセットを有効にします
マシン (したがって、結果は別のマシンでは実行されない場合があります)。

i386
オリジナルの Intel の i386 CPU。

i486
Intelのi486 CPU。 (このチップにはスケジューリングは実装されていません。)

i586、 ペンティアム
MMXをサポートしていないIntelPentiumCPU。

ペンティアム-mmx
MMX 命令セットをサポートする Pentium コアに基づく Intel PentiumMMX CPU。

ペンティアムプロ
インテル PentiumPro CPU。

i686
「generic」と同じですが、「march」オプションとして使用すると、PentiumPro 命令セット
が使用されるため、コードはすべての i686 ファミリ チップで実行されます。

ペンティアム2
MMX 命令セットをサポートする PentiumPro コアに基づく Intel Pentium2 CPU。

ペンティアム3、 ペンティアム3m
MMX および SSE 命令セットを備えた PentiumPro コアに基づく Intel Pentium3 CPU
サポート。

ペンティアム-m
MMX、SSE、および SSE3 命令セットを備えた Intel Pentium2 CPU の低電力バージョン
サポート。 Centrino ノートブックで使用されます。

ペンティアム4、 ペンティアム4m
MMX、SSE、および SSE4 命令セットをサポートする Intel Pentium2 CPU。

プレスコット
MMX、SSE、SSE4、SSE2 命令を搭載した Intel Pentium3 CPU の改良版
サポートを設定します。

ノコナ
4 ビット拡張、MMX、SSE、SSE64 を備えた Intel Pentium2 CPU の改良版
SSE3命令セットのサポート。

core2
2 ビット拡張、MMX、SSE、SSE64、SSE2、および SSSE3 命令を備えた Intel Core3 CPU
サポートを設定します。

corei7
Intel Core i7 CPU、64 ビット拡張、MMX、SSE、SSE2、SSE3、SSSE3、SSE4.1 および
SSE4.2命令セットのサポート。

corei7-avx
Intel Core i7 CPU、64 ビット拡張、MMX、SSE、SSE2、SSE3、SSSE3、SSE4.1、
SSE4.2、AVX、AES、および PCLMUL 命令セットのサポート。

コア avx-i
64 ビット拡張機能を備えた Intel Core CPU、MMX、SSE、SSE2、SSE3、SSSE3、SSE4.1、
SSE4.2、AVX、AES、PCLMUL、FSGSBASE、RDRND、および F16C 命令セットのサポート。

原子
64 ビット拡張、MMX、SSE、SSE2、SSE3、および SSSE3 命令を備えた Intel Atom CPU
サポートを設定します。

k6 MMX命令セットをサポートするAMDK6CPU。

k6-2、 k6-3
MMXおよび6DNowを搭載したAMDK3CPUの改良版! 命令セットのサポート。

アスロン、 アスロン・トバード
AMD Athlon CPU、MMX、3dNOW!、拡張3DNow! およびSSEプリフェッチ命令
サポート。

アスロン-4、 アスロンXP、 アスロンMP
MMX、3DNow!、拡張3DNow!を備えた改良されたAMD Athlon CPU および完全なSSE命令
サポートを設定します。

k8、 オプテロン、 アスロン64、 アスロンFX
x8-86 命令セットをサポートする AMD K64 コア ベースの CPU。 (これは MMX をスーパーセットします。
SSE、SSE2、3DNow!、拡張3DNow! および64ビット命令セット拡張。)

k8-sse3、 opteron-sse3、 athlon64-sse3
SSE8 命令セットをサポートする k64、opteron、および athlon3 の改良版。

amdfam10、 バルセロナ
x10-86命令セットをサポートするAMDファミリー64hコアベースのCPU。 (これ
スーパーセットMMX、SSE、SSE2、SSE3、SSE4A、3DNow!、拡張3DNow!、ABM、64ビット
命令セット拡張。)

BDver1
x15-86命令セットをサポートするAMDファミリー64hコアベースのCPU。 (これ
スーパーセットFMA4、AVX、XOP、LWP、AES、PCL_MUL、CX16、MMX、SSE、SSE2、SSE3、SSE4A、
SSSE3、SSE4.1、SSE4.2、ABM、および64ビット命令セット拡張。)

BDver2
x15-86命令セットをサポートするAMDファミリー64hコアベースのCPU。 (これ
スーパーセット BMI、TBM、F16C、FMA、AVX、XOP、LWP、AES、PCL_MUL、CX16、MMX、SSE、SSE2、
SSE3、SSE4A、SSSE3、SSE4.1、SSE4.2、ABM、および 64 ビットの命令セット拡張。)

btver1
x14-86命令セットをサポートするAMDファミリー64hコアベースのCPU。 (これ
スーパーセットMMX、SSE、SSE2、SSE3、SSSE3、SSE4A、CX16、ABMおよび64ビット命令セット
拡張機能。)

ウィンチップ-C6
IDT Winchip C6 CPU、追加の MMX 命令セットを使用して i486 と同じ方法で処理
サポート。

ウィンチップ2
IDT Winchip2 CPU、追加の MMX と 486DNow で i3 と同じ方法で処理されます!
命令セットのサポート。

c3 C3 CPU 経由で MMX と 3DNow! 命令セットのサポート。 (スケジューリングはありません。
このチップに実装されています。)

c3-2
MMX および SSE 命令セットをサポートする C3-2 CPU 経由。 (スケジューリングはありません。
このチップに実装されています。)

ジオード
MMX と 3DNow を搭載した組み込み AMD CPU! 命令セットのサポート。

特定のものを選びながら CPUタイプ そのために適切に物事をスケジュールします
特定のチップでは、コンパイラはそのチップ上で実行されないコードを生成しません。
なしのデフォルトのマシンタイプ -XNUMX月=CPUタイプ 使用中のオプション。 たとえば、
GCC が i686-pc-linux-gnu 用に設定されている場合 -mtune = pentium4 というコードを生成します
Pentium4 用に調整されていますが、i686 マシンでも動作します。

-XNUMX月=CPUタイプ
マシンタイプの命令を生成する CPUタイプ。 の選択肢 CPUタイプ です。
と同じ -ムチューン. さらに、 -XNUMX月=CPUタイプ 含意する -mtune =CPUタイプ.

-mcpu =CPUタイプ
非推奨の同義語 -ムチューン.

-mfpmath =単位
選択したユニットの浮動小数点演算を生成します 単位。 の選択肢 単位 には次の値があります:

387 大部分のチップに存在する標準の387浮動小数点コプロセッサを使用します
それ以外の場合はエミュレートします。 このオプションでコンパイルされたコードは、ほとんどすべての場所で実行されます。
一時的な結果は、精度ではなく80ビットの精度で計算されます
タイプによって指定され、ほとんどの場合と比較してわずかに異なる結果になります
他のチップ。 見る -フロートストア 詳細については。

これは、i386 コンパイラのデフォルトの選択です。

SSE SSE命令セットに存在するスカラー浮動小数点命令を使用します。 これ
命令セットは Pentium3 以降のチップでサポートされており、AMD ラインでは
Athlon-4、Athlon-xp、Athlon-mp チップ。 以前のバージョンの SSE 命令
set は単精度演算のみをサポートするため、double および extended-
精度演算は引き続き 387 を使用して行われます。
Pentium4 および将来の AMD x86-64 チップ、倍精度演算をサポート
のためにペンを持つ時間も見つけています。

i386 コンパイラの場合、使用する必要があります -XNUMX月=CPUタイプ, -mse or -msse2 スイッチ
SSE 拡張機能を有効にして、このオプションを有効にします。 x86-64 コンパイラの場合、
これらの拡張機能はデフォルトで有効になっています。

結果のコードは、ほとんどの場合、かなり高速になるはずです。
387コードの数値的不安定性の問題を回避しますが、既存のコードを壊す可能性があります
一時的なものが80ビットであることを期待するコード。

これは、x86-64コンパイラのデフォルトの選択です。

sse、387
sse + 387
両言語で
両方の命令セットを同時に使用してみてください。 これにより、
利用可能なレジスタの量と、387 の個別の実行ユニットを備えたチップ
実行リソースもSSEします。 このオプションはまだ使用されているため、注意して使用してください
GCCレジスタアロケータは個別にモデル化されないため、実験的
機能ユニットが不安定になり、パフォーマンスが不安定になります。

-masm =方言
選択したものを使用して asm 命令を出力する 方言. サポートされている選択肢は インテル or
(デフォルトのもの)。 ダーウィンは支持しない インテル.

-mieee-fp
-mno-ieee-fp
コンパイラがIEEE浮動小数点比較を使用するかどうかを制御します。 これらは
比較の結果が順序付けされていない場合を正しく処理します。

-msoft-float
浮動小数点のライブラリ呼び出しを含む出力を生成します。 警告: 必要条件
ライブラリは GCC の一部ではありません。 通常はマシンの通常の C の機能
コンパイラが使用されますが、これはクロスコンパイルで直接行うことはできません。 絶対です
クロスプラットフォームに適したライブラリ関数を提供するために、独自の手配を行ってください。
コンパイル。

関数が浮動小数点を返すマシンでは、80387レジスタになります
スタック、一部の浮動小数点オペコードは、 -msoft-float 使用されている。

-mno-fp-ret-in-387
関数の戻り値にFPUレジスタを使用しないでください。

通常の呼び出し規約には、「float」型と「double」型の関数の戻り値があります。
FPUがない場合でも、FPUレジスタにあります。 アイデアは、オペレーティングシステムが
FPUをエミュレートする必要があります。

オプション -mno-fp-ret-in-387 このような値は通常のCPUで返されます
代わりに登録します。

-mno-ファンシー-数学-387
一部の387エミュレータは、「sin」、「cos」、および「sqrt」命令をサポートしていません。
387.これらの命令が生成されないようにするには、このオプションを指定します。 このオプションは
FreeBSD、OpenBSD、および NetBSD のデフォルト。 このオプションは、次の場合にオーバーライドされます。 -行進
ターゲット CPU には常に FPU があるため、命令は FPU を持たないことを示します。
エミュレーションが必要です。 リビジョン 2.6.1 の時点では、これらの命令は生成されません。
また、 -funsafe-数学の最適化 スイッチ。

-悪性-ダブル
-mno-align-double
GCCが「double」、「long double」、および「longlong」変数を整列するかどうかを制御します。
XNUMXワードの境界またはXNUMXワードの境界。 「double」変数をXNUMXワードに揃える
境界は、 ペンティアム より多くを犠牲にして
メモリ。

x86-64では、 -悪性-ダブル デフォルトで有効になっています。

警告: あなたが使用する場合 -悪性-ダブル スイッチ、上記のタイプを含む構造
公開アプリケーションのバイナリ インターフェイスとは異なる方法で配置されます
386 の仕様であり、コード内の構造体とのバイナリ互換性はありません。
そのスイッチなしでコンパイルされました。

-m96bit-long-double
-m128bit-long-double
これらのスイッチは、「long double」タイプのサイズを制御します。 i386 アプリケーション バイナリ
インターフェイスはサイズを96ビットに指定しているため、 -m96bit-long-double のデフォルトです
32ビットモード。

現代のアーキテクチャ(Pentium以降)は、「ロングダブル」を8に揃えることを好みます。
または16バイト境界。 ABIに準拠するアレイまたは構造では、これはそうではありません
可能。 したがって、指定する -m128bit-long-double 「longdouble」を16バイトに揃えます
「longdouble」に追加の32ビットゼロをパディングすることによる境界。

x86-64コンパイラでは、 -m128bit-long-double ABIとしてのデフォルトの選択です
"long double" を 16 バイト境界でアラインすることを指定します。

これらのオプションはどちらも、x87標準を超える精度を実現していないことに注意してください。
「ロングダブル」の場合は80ビット。

警告: ターゲット ABI のデフォルト値をオーバーライドすると、構造と
「long double」変数を含む配列は、関数だけでなくサイズも変更されます
"long double" を取る関数の呼び出し規約が変更されます。 したがって、彼らは
それなしでコンパイルされたコードの配列または構造体とのバイナリ互換性はありません
スイッチ。

-mlarge-data-threshold =
日時 -mcmodel = medium より大きいデータ しきい値 大きく配置されています
データセクション。 この値は、バイナリにリンクされたすべてのオブジェクトで同じでなければなりません
デフォルトは 65535 です。

-mrtd
別の関数呼び出し規約を使用します。この規則では、固定の関数を使用します
「ret」で返される引数の数 NUM 引数をポップする命令
帰りながら。 これにより、呼び出し元にXNUMXつの命令を保存する必要がないため、
そこに引数をポップします。

この呼び出しシーケンスで個々の関数が呼び出されるように指定できます。
関数属性 標準コール. オーバーライドすることもできます -mrtd オプションを使用して
関数属性 cdecl.

警告: この呼び出し規約は、Unixで通常使用される規約と互換性がありません。
したがって、Unixコンパイラでコンパイルされたライブラリを呼び出す必要がある場合は使用できません。

また、変数を取るすべての関数の関数プロトタイプを提供する必要があります
引数の数 (「printf」を含む); そうしないと、不正なコードが生成されます
これらの関数の呼び出し用。

さらに、あまりにも多くの関数を呼び出すと、重大な不正コードが生成されます。
引数。 (通常、余分な引数は無害に無視されます。)

-mregparm =NUM
整数引数を渡すために使用されるレジスタの数を制御します。 デフォルトでは、
レジスタは引数を渡すために使用され、最大3つのレジスタを使用できます。 あなたはできる
関数属性を使用して、特定の関数のこの動作を制御します regparm.

警告: このスイッチを使用する場合、および NUM がゼロ以外の場合、すべてのモジュールをビルドする必要があります
ライブラリを含め、同じ値で。 これには、システムライブラリと
スタートアップモジュール。

-msseregparm
float引数とdouble引数、および戻り値には、SSEレジスタの受け渡し規則を使用してください。
関数属性を使用して、特定の関数のこの動作を制御できます
セレグパルム.

警告: このスイッチを使用する場合は、同じ値ですべてのモジュールをビルドする必要があります。
ライブラリを含みます。 これには、システムライブラリとスタートアップモジュールが含まれます。

-mvect8-ret-in-mem
MMXレジスタの代わりにメモリ内の8バイトのベクトルを返します。 これがデフォルトです
Solaris @ tie {} 8および9とVxWorksは、SunStudioコンパイラのABIと一致します。
バージョン12。それ以降のコンパイラバージョン(Studio 12 Update @ tie {} 1以降)は次のとおりです。
他のx86ターゲットで使用されるABI。これはSolaris@tie{}10以降のデフォルトです。
のみ によって生成された既存のコードとの互換性を維持する必要がある場合は、このオプションを使用してください
それらの以前のコンパイラバージョンまたは古いバージョンのGCC。

-mpc32
-mpc64
-mpc80
80387浮動小数点精度を32、64、または80ビットに設定します。 いつ -mpc32 指定されている、
浮動小数点演算の結果の仮数は24ビットに丸められます
(単精度); -mpc64 浮動小数点の結果の仮数を丸めます
53ビット(倍精度)への演算と -mpc80 結果の仮数を丸めます
浮動小数点演算の64ビット(拡張倍精度)への変換。
デフォルト。 このオプションを使用すると、より高精度の浮動小数点演算が可能になります。
FPU制御ワードを明示的に設定しないと、プログラマーは使用できません。

浮動小数点演算の丸めをデフォルトの80ビット未満に設定すると、
一部のプログラムを2%以上高速化します。 一部の数学ライブラリは、
拡張精度(80ビット)浮動小数点演算はデフォルトで有効になっています。 ルーチン
このようなライブラリでは、通常、精度が大幅に低下する可能性があります。
このオプションを使用して精度をに設定する場合、「壊滅的なキャンセル」と呼ばれます
拡張精度未満。

-mstackrealign
入口でスタックを再調整します。 Intel x86 では、 -mstackrealign オプションが生成します
必要に応じてランタイム スタックを再調整する代替のプロローグとエピローグ。
これにより、4 バイト アライン スタックを保持するレガシー コードと最新のコードの混合がサポートされます。
SSE 互換性のために 16 バイトのスタックを保持します。 属性も参照
「force_align_arg_pointer」、個々の関数に適用できます。

-mpreferred-stack-boundary =NUM
スタック境界を2に揃えて維持しようとします。 NUM バイト境界。 もしも
-mpreferred-スタック境界 が指定されていない場合、デフォルトは4(16バイトまたは128ビット)です。

警告: SSE拡張機能を備えたx86-64アーキテクチャのコードを生成する場合
無効、 -mpreferred-stack-boundary = 3 スタック境界の整列を維持するために使用できます
8 バイト境界まで。 すべてのモジュールをビルドする必要があります -mpreferred-stack-boundary = 3,
ライブラリを含みます。 これには、システムライブラリとスタートアップモジュールが含まれます。

-mincoming-stack-boundary =NUM
入ってくるスタックが2に揃えられていると仮定します NUM バイト境界。 もしも
-mincoming-スタック境界 指定されていない、によって指定されたもの
-mpreferred-スタック境界 使用されます。

Pentium および PentiumPro では、"double" および "long double" の値は、
8バイト境界(を参照) -悪性-ダブル)または実行時のパフォーマンスが大幅に低下する
ペナルティ。 Pentium IIIでは、ストリーミングSIMD拡張命令(SSE)データ型「__m128」が
16バイトにアラインされていない場合は正しく機能しません。

スタック上でこの値を適切に配置するには、スタックの境界を次のようにする必要があります。
スタックに格納されている値に必要な位置に配置されます。 さらに、すべての機能
スタックの整列を維持するように生成する必要があります。 したがって、関数を呼び出す
低い方でコンパイルされた関数から、より高い優先スタック境界でコンパイルされた
優先スタック境界は、ほとんどの場合、スタックの位置合わせがずれます。 することをお勧めします
コールバックを使用するライブラリは、常にデフォルト設定を使用します。

この余分な配置は余分なスタックスペースを消費し、一般的にコードを増やします
サイズ。 組み込みシステムや
オペレーティングシステムカーネルは、優先アライメントをに減らしたい場合があります
-mpreferred-stack-boundary = 2.

-うーん
-mno-mmx
-mse
-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
-メイズ
-mno-aes
-mpclmul
-mno-pclmul
-mfsgsbase
-mno-fsgsbase
-mrdrnd
-mno-rdrdnd
-mf16c
-mno-f16c
-MFMA
-mno-fma
-msse4a
-mno-sse4a
-mfma4
-mno-fma4
-mxop
-mno-xop
-mlwp
-mno-lwp
-m3dnow
-mno-3dnow
-mpopcnt
-mno-popcnt
-マブム
-mno-abm
-mbmi
-mbmi2
-mno-bmi
-mno-bmi2
-mlzcnt
-mno-lzcnt
-MTBM
-mno-tbm
これらのスイッチは、MMX、SSE、SSE2、SSE3、
SSSE3、SSE4.1、AVX、AVX2、AES、PCLMUL、FSGSBASE、RDRND、F16C、FMA、SSE4A、FMA4、XOP、
LWP、ABM、BMI、BMI2、LZCNT または 3DNow!
拡張命令セット。 これらの拡張機能は、組み込みとしても利用できます
関数: 参照 X86 内蔵 機能、有効になっている機能の詳細については、
これらのスイッチによって無効にされます。

浮動小数点コードから SSE/SSE2 命令を自動的に生成するには (
387 命令とは対照的)、参照 -mfpmath = sse.

GCCは、次の場合にSSEx命令を抑制します -mavx 使用されている。 代わりに、新しいAVXを生成します
必要に応じて、すべてのSSEx命令に対する命令またはAVXの同等性。

これらのオプションにより、GCC は生成されたコードでこれらの拡張命令を使用できるようになります。
なくても -mfpmath = sse. ランタイム CPU 検出を実行するアプリケーションは、
適切なフラグを使用して、サポートされているアーキテクチャごとに個別のファイルをコンパイルします。
特に、CPU 検出コードを含むファイルは、コンパイルせずにコンパイルする必要があります。
これらのオプション。

-mcld
このオプションは、関数のプロローグで「cld」命令を発行するようにGCCに指示します
文字列命令を使用します。 文字列命令は、選択するDFフラグに依存します
自動インクリメントモードまたは自動デクリメントモードの間。 ABIがDFフラグを指定している間
機能入力時にクリアされ、一部のオペレーティングシステムはこの仕様に違反しません
例外ディスパッチャのDFフラグをクリアします。 例外ハンドラは次のようになります
DFフラグが設定された状態で呼び出され、文字列の場合に誤った方向モードになります
指示が使用されます。 このオプションは、32ビットx86ターゲットでデフォルトで有効にできます。
でGCCを構成する --enable-cld オプションを構成します。 「cld」の生成
命令はで抑制することができます -mno-cld この場合のコンパイラオプション。

-mvzeroupper
このオプションは、GCCに転送前に「vzeroupper」命令を発行するように指示します。
AVX から SSE への遷移ペナルティを最小限に抑えるための関数からの制御フロー
不要な zeroupper 組み込み関数を削除します。

-mprefer-avx128
このオプションは、128ビットAVXの代わりに256ビットAVX命令を使用するようにGCCに指示します
自動ベクトル化の指示。

-mcx16
このオプションは、GCC が生成されたコードで CMPXCHG16B 命令を使用できるようにします。
CMPXCHG16B は、128 ビットのダブル クワッドワード (またはオーワード) データに対するアトミック操作を可能にします。
タイプ。 これは、複数回更新できる高解像度のカウンターに役立ちます。
プロセッサー (またはコア)。 この命令は、atomic 組み込みの一部として生成されます。
関数: 参照 __同期 ビルトイン or __アトミック ビルトイン 詳細については。

-msahf
このオプションは、GCC が生成された 64 ビット コードで SAHF 命令を使用できるようにします。 早い
Intel 64 を搭載した Intel CPU には、それまで AMD64 でサポートされていた LAHF および SAHF 命令がありませんでした。
4 年 1 月の Pentium 2005 GXNUMX ステップの導入。LAHF と SAHF はロードとストアです。
それぞれ、特定のステータス フラグの命令。 64 ビット モードでは、SAHF
命令は、「fmod」、「drem」、または「remainder」組み込み関数を最適化するために使用されます: を参照してください。
その他 ビルトイン 詳細については。

-mmovbe
このオプションは、GCC が movbe 命令を使用して「__builtin_bswap32」を実装できるようにします。
および「__builtin_bswap64」。

-mcrc32
このオプションは、組み込み関数「__builtin_ia32_crc32qi」を有効にします。
"__builtin_ia32_crc32hi". 「__builtin_ia32_crc32si」および「__builtin_ia32_crc32di」
crc32 マシン命令を生成します。

-mレシピ
このオプションは、GCC が RCPSS および RSQRTSS 命令 (およびそれらの命令) を使用できるようにします。
ベクトル化されたバリアント RCPPS および RSQRTPS) を追加の Newton-Raphson ステップで
DIVSS と SQRTSS (およびそれらのベクトル化されたバリアント) の代わりに精度を上げる
単精度浮動小数点引数。 これらの命令は、次の場合にのみ生成されます。
-funsafe-数学の最適化 と一緒に有効になります -有限数学のみ &
-fno-トラップ-数学。 シーケンスのスループットは
非相互命令のスループット、シーケンスの精度は次のようになります。
最大2ulp減少します(つまり、1.0の逆数は0.99999994に等しくなります)。

GCCは「1.0f/sqrtf(バツ)" RSQRTSS (または RSQRTPS) に関しては、既に
-ffast-数学 (または上記のオプションの組み合わせ)、および必要ありません -mレシピ.

また、GCCは、追加のニュートン-ラフソンステップを使用して上記のシーケンスを出力することに注意してください。
ベクトル化された単精度除算とベクトル化された"sqrtf(バツ)" すでに -ffast-数学
(または上記のオプションの組み合わせ)、および必要ありません -mレシピ.

-mrecip =オプト
このオプションを使用すると、どの逆数推定命令を使用できるかを制御できます。 オプト
オプションのカンマ区切りのリストで、先頭に「!」を付けることができます。 を反転します
オプション: "all": すべての見積もり指示を有効にする、"default": デフォルトを有効にする
指示、同等 -mレシピ、「なし」: すべての見積もり指示を無効にします。
に相当 -mno-レシピ、「div」: スカラー除算の近似を有効にします。
"vec-div": ベクトル化された除算の近似を有効にします。 "sqrt": 有効にします。
スカラー平方根の近似、「vec-sqrt」: の近似を有効にします
ベクトル化された平方根。

たとえば、 -mrecip = all、!sqrt 逆数近似のすべてを有効にします。
平方根を除いて。

-mveclibabi =type
外部ライブラリを使用して組み込み関数をベクトル化するために使用するABIタイプを指定します。
サポートされているタイプは、Intel ショート ベクトル数学ライブラリの「svml」と、
AMD 数学コア ライブラリ スタイルのインターフェイス。 GCCは現在、呼び出しを発行します
"vmldExp2"、"vmldLn2"、"vmldLog102"、"vmldLog102"、"vmldPow2"、"vmldTanh2"、
"vmldTan2"、"vmldAtan2"、"vmldAtanh2"、"vmldCbrt2"、"vmldSinh2"、"vmldSin2"、
"vmldAsinh2"、"vmldAsin2"、"vmldCosh2"、"vmldCos2"、"vmldAcosh2"、"vmldAcos2"、
"vmlsExp4"、"vmlsLn4"、"vmlsLog104"、"vmlsLog104"、"vmlsPow4"、"vmlsTanh4"、
"vmlsTan4"、"vmlsAtan4"、"vmlsAtanh4"、"vmlsCbrt4"、"vmlsSinh4"、"vmlsSin4"、
「vmlsAsinh4」、「vmlsAsin4」、「vmlsCosh4」、「vmlsCos4」、「vmlsAcosh4」、および「vmlsAcos4」
対応する関数型の場合 -mveclibabi = svml が使用され、「__vrd2_sin」、
"__vrd2_cos"、"__vrd2_exp"、"__vrd2_log"、"__vrd2_log2"、"__vrd2_log10"、
"__vrs4_sinf"、"__vrs4_cosf"、"__vrs4_expf"、"__vrs4_logf"、"__vrs4_log2f"、
対応する関数タイプの「__vrs4_log10f」および「__vrs4_powf」
-mveclibabi = acml 使用されている。 両方 -ftree-ベクトル化 & -funsafe-数学の最適化 持ってる
有効にします。 SVML または ACML ABI 互換ライブラリをリンクで指定する必要があります
時間。

-mabi =
指定された呼び出し規約のコードを生成します。 許容値は次のとおりです。 システム for
GNU/Linux およびその他のシステムで使用される ABI ms Microsoft ABI の場合。 デフォルト
Windows を対象とする場合、Microsoft ABI を使用することです。 他のすべてのシステムでは、デフォルト
SYSV ABI です。 を使用して、特定の関数のこの動作を制御できます。
関数属性 ms_abi/sysv_abi.

-mtls-dialect =type
を使用してスレッドローカルストレージにアクセスするためのコードを生成します ヌー or ヌー2 コンベンション。 ヌー
控えめなデフォルトです。 ヌー2 より効率的ですが、コンパイルと実行が追加される可能性があります
すべてのシステムで満たすことができない時間要件。

-mpush-args
-mno-push-args
PUSH操作を使用して、送信パラメーターを保管します。 この方法は短く、通常は
SUB / MOV操作を使用する方法と同じくらい高速で、デフォルトで有効になっています。 いくつかの
無効にすると、スケジューリングが改善され、パフォーマンスが低下する可能性があります。
依存関係。

-maccumulate-発信引数
有効にすると、発信引数に必要なスペースの最大量は
関数プロローグで計算されます。 これは、最新のほとんどの CPU で高速です。
依存関係の削減、スケジューリングの改善、優先スタック時のスタック使用量の削減
境界は2に等しくありません。欠点は、コードサイズが著しく大きくなることです。 これ
スイッチは意味します -mno-push-args.

-ミリスレッド
でスレッドセーフな例外処理をサポート ミング32. スレッドセーフに依存するコード
例外処理では、すべてのコードをコンパイルしてリンクする必要があります -ミリスレッド オプション。 いつ
コンパイル、 -ミリスレッド 定義 -D_MT; リンクするときは、特別なスレッドヘルパーでリンクします
ライブラリ -lmingwthrd これにより、スレッドごとの例外処理データがクリーンアップされます。

-mno-align-stringops
インライン化された文字列操作の宛先を整列しません。 このスイッチはコードサイズを削減します
宛先がすでに調整されている場合のパフォーマンスが向上しますが、GCC はそうではありません
それについて知っています。

-minline-all-stringops
デフォルトでは、GCCは、宛先がであることがわかっている場合にのみ文字列操作をインライン化します。
少なくとも 4 バイト境界に位置合わせされます。 これにより、より多くのインライン展開が可能になり、コード サイズが増加し、
ただし、高速な memcpy、strlen、および memset に依存するコードのパフォーマンスは向上する可能性があります。
短い長さ。

-minline-stringops-動的に
サイズが不明な文字列操作の場合は、小さい場合はインラインコードで実行時チェックを使用します
ブロックとライブラリは大きなブロックを必要とします。

-mstringop-strategy =ALG
特定のアルゴリズムに関する内部決定ヒューリスティックをインライン文字列に上書きする
での操作。 許可される値は、「rep_byte」、「rep_4byte」、「rep_8byte」です。
指定されたサイズの i386 "rep" プレフィックスを使用して展開, "byte_loop", "loop",
インラインループを展開する「unrolled_loop」、ライブラリを常時展開する「libcall」
コール。

-momit-リーフフレームポインター
リーフ関数のレジスタにフレームポインタを保持しないでください。 これにより、
フレームポインタを保存、設定、復元し、追加のレジスタを作成する手順
リーフ機能で利用できます。 オプション -fomit-フレームポインター フレームを削除します
すべての関数へのポインタ。デバッグが難しくなる可能性があります。

-mtls-direct-seg-refs
-mno-tls-direct-seg-refs
TLSセグメントからのオフセットを使用してTLS変数にアクセスできるかどうかを制御します
レジスタ(32ビットの場合は%gs、64ビットの場合は%fs)、またはスレッドベースポインタが
追加した。 これが合法かどうかは、オペレーティング システムによって異なります。
TLS領域全体をカバーするようにセグメントをマップします。

GNU libc を使用するシステムの場合、デフォルトは on です。

-msse2avx
-mno-sse2avx
アセンブラがVEXプレフィックスを使用してSSE命令をエンコードする必要があることを指定します。 オプション
-mavx これはデフォルトでオンになっています。

- ミッフィー
-mno-フェントリ
プロファイリングがアクティブな場合 -pg プロローグの前にプロファイリング カウンター呼び出しを配置し​​ます。 注: オン
x86 アーキテクチャでは、属性 "ms_hook_prologue" は現時点では使用できません
- ミッフィー & -pg.

-m8bit-idiv
-mno-8bit-idiv
Intel Atomなどの一部のプロセッサでは、8ビットの符号なし整数除算はよりもはるかに高速です。
32ビット/64ビット整数除算。 このオプションは、実行時チェックを生成します。 両方の場合
被除数と除数は0から255の範囲内で、8ビットの符号なし整数除算は
32ビット/64ビット整数除算の代わりに使用されます。

-mavx256-split-unaligned-load
-mavx256-split-unaligned-store
32バイトのAVXアラインされていないロードとストアを分割します。

ボーマン -m の AMD x86-64 プロセッサでは、上記に加えてスイッチがサポートされています。
64 ビット環境。

-m32
-m64
-mx32
32 ビットまたは 64 ビット環境用のコードを生成します。 の -m32 オプション セット int、long、および
32 ビットへのポインターであり、任意の i386 システムで実行されるコードを生成します。 の -m64 オプション
int を 32 ビット、long およびポインタを 64 ビットに設定し、AMD 用のコードを生成します。
x86-64 アーキテクチャ。 の -mx32 オプションは、int、long、およびポインターを 32 ビットに設定し、
AMD の x86-64 アーキテクチャ用のコードを生成します。 ダーウィンだけに -m64 オプションが変わります
オフ -fno-pic & -mdynamic-no-pic オプション。

-mno-レッドゾーン
x86-64 コードには、いわゆるレッド ゾーンを使用しないでください。 レッドゾーンは、
x86-64 ABI では、スタック ポインターの位置を超える 128 バイトの領域です。
シグナルまたは割り込みハンドラによって変更されないため、次の用途に使用できます。
スタックポインタを調整せずに一時データを削除します。 旗 -mno-レッドゾーン 無効になります
このレッドゾーン。

-mcmodel = small
スモールコードモデルのコードを生成する:プログラムとそのシンボルはでリンクされている必要があります
アドレス空間の下位2GB。 ポインタは64ビットです。 プログラムはすることができます
静的または動的にリンクされています。 これはデフォルトのコードモデルです。

-mcmodel = kernel
カーネルコードモデルのコードを生成します。 カーネルは、マイナス2GBで実行されます。
アドレス空間。 このモデルは、Linuxカーネルコードに使用する必要があります。

-mcmodel = medium
中型モデルのコードを生成: プログラムは、下位 2 GB にリンクされています。
アドレス空間。 小さな記号もそこに配置されます。 サイズが大きいシンボル
-mlarge-data-threshold ラージ データまたは bss セクションに配置され、位置を特定できます
2GB以上。 プログラムは静的または動的にリンクできます。

-mcmodel = large
大規模モデルのコードを生成する: このモデルでは、住所と
セクションのサイズ。

-maddress-mode = long
ロングアドレスモードのコードを生成します。 これは64ビットおよびx32でのみサポートされます
環境。 これは、64ビット環境のデフォルトのアドレスモードです。

-maddress-mode = short
ショートアドレスモードのコードを生成します。 これは、32ビットおよびx32でのみサポートされます
環境。 これは、32ビットおよびx32環境のデフォルトのアドレスモードです。

i386 & x86-64 Windows オプション

Windows ターゲットでは、次の追加オプションを使用できます。

-mconsole
このオプションは、Cygwin および MinGW ターゲットで使用できます。 コンソール
リンカーに PE ヘッダーを設定するように指示することにより、アプリケーションが生成されます。
コンソール アプリケーションに必要なサブシステム タイプ。 これは、
Cygwin および MinGW ターゲット。

-mdll
このオプションは、Cygwin および MinGW ターゲットで使用できます。 DLL - a
ダイナミック リンク ライブラリ - 生成され、必要なものを選択できるようになります
ランタイムスタートアップオブジェクトとエントリポイント。

-mnop-fun-dllimport
このオプションは、CygwinおよびMinGWターゲットで使用できます。 それは、
dllimport 属性は無視する必要があります。

-mスレッド
このオプションは、MinGWターゲットで使用できます。 MinGW固有のスレッドを指定します
サポートが使用されます。

-ミュニコード
このオプションは、mingw-w64 ターゲットで使用できます。 UNICODE マクロが
が事前定義されており、Unicode 対応のランタイム スタートアップ コードが選択されていることを確認します。

-mwin32
このオプションは、CygwinおよびMinGWターゲットで使用できます。 それは典型的なことを指定します
Windows の定義済みマクロはプリプロセッサに設定されますが、影響はありません
ランタイム ライブラリ/スタートアップ コードの選択。

-mwindows
このオプションは、CygwinおよびMinGWターゲットで使用できます。 GUIを指定します
アプリケーションは、リンカにPEヘッダーを設定するように指示することによって生成されます
サブシステムタイプを適切に。

-fno-set-stack-executable
このオプションは、MinGWターゲットで使用できます。 の実行可能フラグを指定します
ネストされた関数で使用されるスタックが設定されていません。 これは、実行中のバイナリに必要です
Windows のカーネル モード、実行可能ファイルの設定に使用される user32 API など
権限、利用できません。

-mpe-aligned-commons
このオプションは、CygwinおよびMinGWターゲットで使用できます。 それはGNUが
COMMON変数の正しい配置を可能にするPEファイル形式の拡張
コードを生成するときに使用する必要があります。 GCCが検出した場合、デフォルトで有効になります
構成中に見つかったターゲット アセンブラがその機能をサポートしていること。

以下も参照してください i386 & x86-64 オプション 標準オプションの場合。

IA-64 オプション

これらは、 -m IntelIA-64アーキテクチャ用に定義されたオプション。

-mbig-エンディアン
ビッグエンディアンターゲットのコードを生成します。 これはHP-UXのデフォルトです。

-mlittle-エンディアン
リトルエンディアンターゲットのコードを生成します。 これは、AIX5およびGNU/Linuxのデフォルトです。

-mgnu-as
-mno-gnu-as
GNUアセンブラのコードを生成する(または生成しない)。 これがデフォルトです。

-mgnu-ld
-mno-gnu-ld
GNUリンカのコードを生成する(または生成しない)。 これがデフォルトです。

-mno-pic
グローバルポインタレジスタを使用しないコードを生成します。 結果は位置ではありません
独立したコードであり、IA-64ABIに違反しています。

-mvolatile-asm-停止
-mno-volatile-asm-stop
揮発性asmステートメントの直前と直後にストップビットを生成します(または生成しません)。

-mレジスタ名
-mno レジスタ名
生成する(または生成しない) in, LOC, でる スタックレジスタのレジスタ名。 これ
アセンブラの出力が読みやすくなる場合があります。

-mno-sdata
-msdata
スモールデータセクションを使用する最適化を無効(または有効)にします。 これは役に立つかもしれません
オプティマイザーのバグを回避するため。

-m定数-gp
単一の定数グローバルポインタ値を使用するコードを生成します。 これは次の場合に便利です
カーネルコードのコンパイル。

-mauto-pic
自己再配置可能なコードを生成します。 これは、 -m定数-gp。 これは便利です
ファームウェアコードをコンパイルするとき。

-minline-float-divide-min-latency
最小レイテンシーを使用して浮動小数点値のインライン除算のコードを生成する
アルゴリズム。

-minline-float-divide-max-スループット
最大スループットを使用して、浮動小数点値のインライン除算用のコードを生成します
アルゴリズム。

-mno-inline-float-divide
浮動小数点値の除算用のインラインコードを生成しないでください。

-minline-int-divide-min-latency
最小レイテンシーを使用して整数値のインライン除算のコードを生成する
アルゴリズム。

-minline-int-divide-max-スループット
最大スループットを使用して整数値のインライン除算用のコードを生成する
アルゴリズム。

-mno-inline-int-divide
整数値の除算用のインラインコードを生成しないでください。

-minline-sqrt-min-latency
最小遅延アルゴリズムを使用して、インライン平方根のコードを生成します。

-minline-sqrt-max-スループット
最大スループットアルゴリズムを使用して、インライン平方根のコードを生成します。

-mno-インライン-sqrt
sqrt のインライン コードを生成しないでください。

-混乱-狂った
-mno-fusion-madd
融合された乗算/加算または乗算/減算を使用するコードを生成する(生成しない)
指示。 デフォルトでは、これらの命令を使用します。

-mno-dwarf2-asm
-mdwarf2-asm
DWARF2 行番号デバッグ情報のアセンブラ コードを生成しない (または生成する)。 この
GNU アセンブラを使用しない場合に便利です。

-ほぼ停止ビット
-mno-early-stop-bits
ストップビットを、次の命令の直前よりも前に配置できるようにします。
ストップビットをトリガーしました。 これにより、命令スケジューリングを改善できますが、必ずしもそうとは限りません。
そうする。

-mfixed-range =レジスタ範囲
指定されたレジスタ範囲を固定レジスタとして扱うコードを生成します。 固定レジスタ
レジスタアロケータが使用できないものです。 これは、カーネルをコンパイルするときに役立ちます
コード。 レジスタ範囲は、ダッシュで区切られたXNUMXつのレジスタとして指定されます。 多数
レジスタ範囲は、コンマで区切って指定できます。

-mtls-size =TLS サイズ
即時TLSオフセットのビットサイズを指定します。 有効な値は14、22、および64です。

-mtune =CPUタイプ
特定の CPU の命令スケジューリングを調整します。有効な値は itanium です。
itanium1、merced、itanium2、および mckinley。

-ミルプ32
-mlp64
32ビットまたは64ビット環境用のコードを生成します。 32ビット環境はintを設定します。
longおよび32ビットへのポインタ。 64ビット環境では、intが32ビットおよびlongに設定されます。
64ビットへのポインタ。 これらはHP-UX固有のフラグです。

-mno-sched-br-data-spec
-msched-br-データ仕様
リロード前のデータ投機スケジューリングを (無効/有効) にします。 これにより、
ld.a 命令と対応するチェック命令の生成 (ld.c /
chk.a)。 デフォルトは「無効」です。

-msched-ar-data-spec
-mno-sched-ar-data-spec
リロード後のデータ投機的スケジューリングを有効 (有効/無効) にします。 これにより、生成が発生します。
ld.a命令と対応するチェック命令(ld.c / chk.a)の。 の
デフォルトは「有効」です。

-mno-sched-control-spec
-msched-control-spec
(Dis / En)可能な制御投機的スケジューリング。 この機能は、
領域のスケジューリング (つまり、リロード前)。 これにより、ld.s が生成されます。
命令および対応するチェック命令 chk.s 。 デフォルトは
「無効にする」。

-msched-br-in-data-spec
-mno-sched-br-in-data-spec
データに依存する命令の(En / Dis)可能な投機的スケジューリング
リロード前の投機的ロード。 これはでのみ有効です -msched-br-データ仕様
有効。 デフォルトは「enable」です。

-msched-ar-in-data-spec
-mno-sched-ar-in-data-spec
データに依存する命令の(En / Dis)可能な投機的スケジューリング
リロード後の投機的ロード。 これはでのみ有効です -msched-ar-data-spec
有効。 デフォルトは「enable」です。

-msched-in-control-spec
-mno-sched-in-control-spec
に依存する命令の(En / Dis)可能な投機的スケジューリング
投機的負荷を制御します。 これはでのみ有効です -msched-control-spec 有効になりました。
デフォルトは「enable」です。

-mno-sched-prefer-non-data-spec-insns
-msched-prefer-non-data-spec-insns
有効にすると、データ投機的命令がスケジュールに選択されるのは、
現時点では他に選択肢はありません。 これにより、データ推測が使用されます
はるかに保守的です。 デフォルトは「無効」です。

-mno-sched-prefer-non-control-spec-insn
-msched-prefer-non-control-spec-insn
有効にすると、投機的命令の制御がスケジュールに選択されるのは、
現時点では他に選択肢はありません。 これにより、制御投機が利用されます
はるかに保守的です。 デフォルトは「無効」です。

クリティカルパスの-mno-sched-count-spec-in-critical-path
クリティカルパスの-msched-count-spec-in-critical-path
有効にすると、投機的な依存関係が計算中に考慮されます
命令の優先順位。 これにより、投機がもう少し活用されます。
保守的。 デフォルトは「無効」です。

-msched-spec-ldc
単純なデータ推測チェックを使用します。 このオプションはデフォルトでオンになっています。

-msched-control-spec-ldc
コントロールの推測には簡単なチェックを使用します。 このオプションはデフォルトでオンになっています。

-msched-stop-bits-after-ever-cycle
スケジューリング時に、すべてのサイクルの後にストップビットを配置します。 このオプションはデフォルトでオンになっています。

-msched-fp-mem-deps-zero-cost
浮動小数点ストアとロードが次の場合に競合を引き起こす可能性は低いと想定します。
同じ命令グループに配置されます。 このオプションはデフォルトで無効になっています。

-msel-sched-dont-check-control-spec
選択的スケジューリングで制御投機のチェックを生成します。 このフラグは
デフォルトでは無効になっています。

-msched-max-memory-insns =マックスインSNS
命令グループごとのメモリinsnの数を制限し、優先度を低くします
同じ命令グループでスケジュールしようとしている後続のメモリinsn。
キャッシュバンクの競合を防ぐために頻繁に役立ちます。 デフォルト値は1です。

-msched-max-memory-insn-ハードリミット
命令グループで「msched-max-memory-insns」を超えることを禁止します。 そうでなければ制限する
「ソフト」は、制限に達したときに非メモリ操作を優先することを意味しますが、
メモリ操作をスケジュールする場合があります。

IA-64/VMS オプション

ボーマン -m オプションは、IA-64/VMS 実装用に定義されています。

-mvms-リターンコード
メインから VMS 条件コードを返します。 デフォルトでは、POSIX スタイルの条件を返します
(例:エラー)コード。

-mdebug-main =接頭辞
名前がで始まる最初のルーチンにフラグを立てます 接頭辞 のメインルーチンとして
デバッガ。

-mmalloc64
デフォルトは64ビットのメモリ割り当てルーチンです。

LM32 オプション

ボーマン -m オプションは、Lattice Mico32 アーキテクチャ用に定義されています。

-mbarrel-shift-対応
バレルシフタ命令を有効にします。

-mdivide対応
除算とモジュラスの命令を有効にします。

-mmultiply-対応
乗算命令を有効にします。

-msign-extend-enabled
符号拡張命令を有効にします。

-ミューザー対応
ユーザー定義の命令を有効にします。

M32C オプション

-mcpu =
コードを生成するCPUを選択します。 のいずれかである可能性があります r8c R8C/Tiny用
シリーズ、 m16c M16C(最大/ 60)シリーズの場合、 m32cm M16C / 80シリーズの場合、または m32c
M32C/80シリーズ用。

-msim
プログラムがシミュレーターで実行されることを指定します。 これにより、代替が発生します
たとえば、ファイルI/Oをサポートするリンク先のランタイムライブラリ。 あなたはいけません
実際のハードウェアで実行されるプログラムを生成する場合は、このオプションを使用してください。 絶対です
必要なI/O関数用に独自のランタイムライブラリを提供します。

-memregs =
コード中に GCC が使用するメモリベースの疑似レジスタの数を指定します。
世代。 これらの疑似レジスタは実際のレジスタのように使用されるため、
コードを利用可能なレジスタに適合させる GCC の能力と、
レジスタの代わりにメモリを使用すると、パフォーマンスが低下します。 内のすべてのモジュールに注意してください。
プログラムは、このオプションと同じ値でコンパイルする必要があります。 そのせいであなたは
デフォルトのランタイム ライブラリ gcc ビルドでこのオプションを使用しないでください。

M32R / D オプション

ボーマン -m オプションは、ルネサスM32R/Dアーキテクチャ用に定義されています。

-m32r2
M32R/2のコードを生成します。

-m32rx
M32R/Xのコードを生成します。

-m32r
M32Rのコードを生成します。 これがデフォルトです。

-mmodel = small
すべてのオブジェクトがメモリの下位16MBにあると想定します(そのため、それらのアドレスは
「ld24」命令でロードされます)、すべてのサブルーチンが
「bl」命令。 これがデフォルトです。

特定のオブジェクトのアドレス指定可能性は、「model」属性を使用して設定できます。

-mmodel =medium
オブジェクトが 32 ビット アドレス空間のどこにでもあると仮定します (コンパイラは
アドレスをロードするための「seth/add3」命令)、およびすべてのサブルーチンが
「bl」命令で到達可能。

-mmodel = large
オブジェクトが 32 ビット アドレス空間のどこにでもあると仮定します (コンパイラは
アドレスをロードするための「seth/add3」命令)、およびサブルーチンがそうではない可能性があると想定
「bl」命令で到達可能(コンパイラははるかに遅い
「seth/add3 / jl」命令シーケンス)。

-msdata = none
小さなデータ領域の使用を無効にします。 変数は次のいずれかに入れられます .data, BSSまたは
.rodata ("section" 属性が指定されていない場合)。 これがデフォルトです。

小さなデータ領域はセクションで構成されています .sdata & .sbss. オブジェクトは明示的に
これらのセクションのいずれかを使用して、「セクション」属性で小さなデータ領域に配置します。

-msdata = sdata
小さなグローバルデータと静的データを小さなデータ領域に配置しますが、特別なデータは生成しないでください
それらを参照するコード。

-msdata = use
小さなグローバルデータと静的データを小さなデータ領域に配置し、特別なデータを生成します
それらを参照するための指示。

-G NUM
グローバルオブジェクトと静的オブジェクトを以下に配置します NUM 小さなデータへのバイトまたは
通常のデータまたは bss セクションの代わりに bss セクション。 のデフォルト値 NUM is
8。 ザ -msdata オプションは次のいずれかに設定する必要があります データ or つかいます このオプションには
効果。

すべてのモジュールは同じものでコンパイルする必要があります -G NUM 価値。 別のコンパイル
の値 NUM 機能する場合と機能しない場合があります。 そうでない場合、リンカーはエラーを出します
メッセージ --- 不正なコードは生成されません。

-mdebug
コンパイラの M32R 固有のコードに役立つ統計を表示します。
プログラムのデバッグで。

-悪性ループ
すべてのループを32バイト境界に揃えます。

-mno-align-loops
ループに対して32バイトのアラインメントを強制しないでください。 これがデフォルトです。

-missue-rate =
問題 サイクルごとの命令。 1または2のみにすることができます。

-mbranch-cost =
1 または 2 のみ指定できます。1 の場合、ブランチが優先されます
条件付きコードで、2 の場合はその逆が適用されます。

-mflush-trap =
キャッシュのフラッシュに使用するトラップ番号を指定します。 デフォルトは12です。有効
数字は0から15までです。

-mno-flush-trap
トラップを使用してキャッシュをフラッシュできないことを指定します。

-mflush-func =
キャッシュをフラッシュするために呼び出すオペレーティングシステム関数の名前を指定します。 The
デフォルトは _フラッシュ_キャッシュ、ただし、関数呼び出しは、トラップがない場合にのみ使用されます
にアクセスできるようにしています。

-mno-flush-func
キャッシュをフラッシュするためのOS機能がないことを示します。

M680x0 オプション

これらは、 -m M680x0およびColdFireプロセッサ用に定義されたオプション。 デフォルト設定
コンパイラーの構成時に選択されたアーキテクチャーによって異なります。 デフォルト
最も一般的な選択肢を以下に示します。

-XNUMX月=アーチ
特定のM680x0またはColdFire命令セットアーキテクチャのコードを生成します。
の許容値 アーチ M680x0アーキテクチャの場合は次のとおりです。 68000, 68010, 68020, 68030,
68040, 68060 & cpu32。 ColdFireアーキテクチャは、Freescaleの
ISAの分類と許容値は次のとおりです。 イサア, イサプラス, イザブ & アイザック.

gcc はマクロを定義します __mcfアーチ__ ColdFire ターゲットのコードを生成しているときはいつでも。
  アーチ このマクロでは、 -行進 上記の引数。

一緒に使用すると、 -行進 & -ムチューン 類似のファミリで実行されるコードを選択します
プロセッサですが、特定のマイクロアーキテクチャ用に最適化されています。

-mcpu =CPU
特定のM680x0またはColdFireプロセッサのコードを生成します。 M680x0 CPUsは:
68000, 68010, 68020, 68030, 68040, 68060, 68302, 68332 & cpu32。 ColdFire CPUs
以下の表に、CPUをファミリに分類したものを示します。

家族 : -mcpu 引数
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 オーバーライド -XNUMX月=アーチ if アーチ と互換性があります CPU。 他の組み合わせ
-mcpu & -行進 拒否されます。

gcc はマクロを定義します __mcf_cpu_CPU ColdFireターゲットの場合 CPU が選択されています。 また
定義 __mcf_family_家族、ここでの値 家族 上記の表で与えられます。

-mtune =
によって設定された制約内で、特定のマイクロアーキテクチャのコードを調整します。 -行進
& -mcpu。 M680x0マイクロアーキテクチャは次のとおりです。 68000, 68010, 68020, 68030, 68040,
68060 & cpu32。 ColdFireマイクロアーキテクチャは次のとおりです。 cfv1, cfv2, cfv3, cfv4 &
cfv4e.

使用することもできます -mtune = 68020-40 68020で比較的適切に実行する必要があるコードの場合、
68030および68040ターゲット。 -mtune = 68020-60 同様ですが、68060のターゲットが含まれています
良い。 これらのXNUMXつのオプションは、と同じチューニング決定を選択します -m68020-40 & -m68020-60


gcc はマクロを定義します __mcアーチ & __mcアーチ__ 680x0アーキテクチャにチューニングする場合
アーチ. また、 mcアーチ どちらかでない限り -アンシ または非GNU -標準 オプションが使用されます。
によって選択されたように、gcc がさまざまなアーキテクチャに合わせてチューニングされている場合 -mtune = 68020-40 or
-mtune = 68020-60、範囲内のすべてのアーキテクチャのマクロを定義します。

gcc はマクロも定義します _分早い__ ColdFireマイクロアーキテクチャにチューニングする場合
早いここで、 早い 上記の引数のXNUMXつです。

-m68000
-mc68000
68000の出力を生成します。これは、コンパイラが次のように構成されている場合のデフォルトです。
68000ベースのシステム。 と同等です -68000月=XNUMX.

このオプションは、68000を含む000またはEC68008コアのマイクロコントローラーに使用します。
68302、68306、68307、68322、68328、および68356。

-m68010
68010の出力を生成します。これは、コンパイラが次のように構成されている場合のデフォルトです。
68010ベースのシステム。 と同等です -68010月=XNUMX.

-m68020
-mc68020
68020の出力を生成します。これは、コンパイラが次のように構成されている場合のデフォルトです。
68020ベースのシステム。 と同等です -68020月=XNUMX.

-m68030
68030の出力を生成します。これは、コンパイラが次のように構成されている場合のデフォルトです。
68030ベースのシステム。 と同等です -68030月=XNUMX.

-m68040
68040の出力を生成します。これは、コンパイラが次のように構成されている場合のデフォルトです。
68040ベースのシステム。 と同等です -68040月=XNUMX.

このオプションは、によってエミュレートする必要がある68881/68882命令の使用を禁止します。
68040のソフトウェア。68040にエミュレートするコードがない場合は、このオプションを使用してください
それらの指示。

-m68060
68060の出力を生成します。これは、コンパイラが次のように構成されている場合のデフォルトです。
68060ベースのシステム。 と同等です -68060月=XNUMX.

このオプションは、68020および68881/68882命令の使用を禁止します。
68060のソフトウェアによってエミュレートされます。68060にコードがない場合は、このオプションを使用してください
それらの命令をエミュレートします。

-mcpu32
CPU32の出力を生成します。 これは、コンパイラが次のように構成されている場合のデフォルトです。
CPU32ベースのシステム。 と同等です -march = cpu32.

このオプションは、32を含むCPU32またはCPU68330+コアを搭載したマイクロコントローラーに使用します。
68331、68332、68333、68334、68336、68340、68341、68349、68360。

-m5200
520XColdFireCPUの出力を生成します。 これは、コンパイラが
520Xベースのシステム用に構成されています。 と同等です -mcpu = 5206、そして今
そのオプションを支持して非推奨になりました。

このオプションは、MCF5200、MCF5202、
MCF5204およびMCF5206。

-m5206e
5206eColdFireCPUの出力を生成します。 このオプションは廃止され、
同等のもの -mcpu = 5206e.

-m528x
ColdFire528Xファミリのメンバーの出力を生成します。 オプションは現在
同等のものを支持して非推奨 -mcpu = 528x.

-m5307
ColdFire5307CPUの出力を生成します。 このオプションは廃止され、
同等の -mcpu = 5307.

-m5407
ColdFire5407CPUの出力を生成します。 このオプションは廃止され、
同等の -mcpu = 5407.

-mcfv4e
ColdFire V4eファミリCPUの出力を生成します(例:547x / 548x)。 これには、
ハードウェア浮動小数点命令。 オプションはと同等です -mcpu = 547x
現在、そのオプションを優先して非推奨になっています。

-m68020-40
新しい命令を使用せずに、68040の出力を生成します。 この結果
68020/68881または68030のいずれかで比較的効率的に実行できるコード内
68040.生成されたコードは、でエミュレートされた68881命令を使用します
68040.

オプションはと同等です -68020月=XNUMX -mtune = 68020-40.

-m68020-60
新しい命令を使用せずに、68060の出力を生成します。 この結果
68020/68881または68030のいずれかで比較的効率的に実行できるコード内
68040.生成されたコードは、でエミュレートされた68881命令を使用します
68060.

オプションはと同等です -68020月=XNUMX -mtune = 68020-60.

-mhard-float
-m68881
浮動小数点命令を生成します。 これは68020以降のデフォルトであり、
FPU を搭載した ColdFire デバイス用。 マクロを定義します __HAVE_68881__ M680x0 で
ターゲットと __mcffpu__ ColdFire ターゲットで。

-msoft-float
浮動小数点命令を生成しないでください。 代わりにライブラリ呼び出しを使用してください。 これは
68000、68010、および68832ターゲットのデフォルト。 これはColdFireのデフォルトでもあります
FPUを持たないデバイス。

-mdiv
-mno-div
ColdFireハードウェアの除算と剰余の命令を生成します(生成しません)。 もしも
-行進 なしで使用されます -mcpu、デフォルトは、ColdFireアーキテクチャの場合は「オン」、「オフ」です。
M680x0アーキテクチャの場合。 それ以外の場合、デフォルトはターゲットCPUから取得されます(いずれか
デフォルトのCPU、またはによって指定されたCPU -mcpu)。 たとえば、デフォルトは「オフ」です
for -mcpu = 5206 および「オン」 -mcpu = 5206e.

gcc はマクロを定義します __mcfhwdiv__ このオプションが有効になっている場合。

-mshort
タイプ「int」は「shortint」のように16ビット幅であると考えてください。 さらに、パラメータ
スタックに渡されたものは、APIがそのAPIを使用しているターゲットでも、16ビット境界に揃えられます。
32ビットへの昇格を義務付けています。

-mno-short
タイプ「int」を16ビット幅と見なさないでください。 これがデフォルトです。

-mnobitfield
-mno-ビットフィールド
ビットフィールド命令は使用しないでください。 The -m68000, -mcpu32 & -m5200 オプションは意味します
-mnobitfield.

-mbitfield
ビットフィールド命令を使用してください。 The -m68020 オプションは意味します -mbitfield。 これは
68020用に設計された構成を使用する場合のデフォルト。

-mrtd
別の関数呼び出し規約を使用します。この規則では、固定の関数を使用します
引数の数は、引数をポップする「rtd」命令で返されます
帰りながら。 これにより、呼び出し元にXNUMXつの命令を保存する必要がないため、
そこに引数をポップします。

この呼び出し規約は、Unixで通常使用される規約と互換性がないため、
Unixコンパイラでコンパイルされたライブラリを呼び出す必要がある場合は使用できません。

また、変数を取るすべての関数の関数プロトタイプを提供する必要があります
引数の数 (「printf」を含む); そうしないと、不正なコードが生成されます
これらの関数の呼び出し用。

さらに、あまりにも多くの関数を呼び出すと、重大な不正コードが生成されます。
引数。 (通常、余分な引数は無害に無視されます。)

「rtd」命令は、68010、68020、68030、68040、68060、およびCPU32でサポートされています。
プロセッサですが、68000または5200ではありません。

-mno-rtd
によって選択された呼び出し規約を使用しないでください -mrtd。 これがデフォルトです。

-悪性-int
-mno-align-int
GCCが「int」、「long」、「long long」、「float」、「double」、および「long」を整列させるかどうかを制御します
32ビット境界のdouble"変数(-悪性-int)または16ビット境界
(-mno-align-int)。 変数を32ビット境界に揃えると、実行されるコードが生成されます
より多くのメモリを犠牲にして、32ビットバスを備えたプロセッサではやや高速です。

警告: あなたが使用する場合 -悪性-int スイッチ、GCC は、を含む構造を整列させます。
上記の型は、ほとんどの公開アプリケーション バイナリ インターフェイスとは異なります
m68k の仕様。

-mpcrel
グローバルを使用する代わりに、68000のPC相対アドレッシングモードを直接使用します
オフセットテーブル。 現在、このオプションは -fpic、最大16ビットのオフセットを許可
PC相対アドレス指定用。 -fPIC 現在、でサポートされていません -mpcrelしかし
これは68020以降のプロセッサでサポートされる可能性があります。

-mno-strict-align
-mstrict-align
アライメントされていないメモリ参照がシステムによって処理されると想定しないでください。

-msep-データ
データセグメントをメモリの別の領域に配置できるようにするコードを生成する
テキストセグメントから。 これにより、次のような環境での実行が可能になります。
仮想メモリ管理。 このオプションは、 -fPIC.

-mno-sep-データ
データセグメントがテキストセグメントの後に続くと想定するコードを生成します。 これは
デフォルト。

-mid-共有ライブラリ
ライブラリIDメソッドを介して共有ライブラリをサポートするコードを生成します。 これにより、
仮想メモリのない環境でインプレースおよび共有ライブラリを実行する場合
管理。 このオプションは、 -fPIC.

-mno-id-共有ライブラリ
ID ベースの共有ライブラリが使用されていることを前提としないコードを生成します。 これは
デフォルト。

-mshared-library-id = n
コンパイルされる ID ベースの共有ライブラリの識別番号を指定します。
値 0 を指定すると、よりコンパクトなコードが生成されます。他の値を指定すると、よりコンパクトなコードが生成されます。
その番号を現在のライブラリに強制的に割り当てるが、スペースがないか、
このオプションを省略するよりも効率的です。

-mxgot
-mno-xgot
ColdFireの位置に依存しないコードを生成する場合は、次の場合に機能するコードを生成します。
GOTには8192を超えるエントリがあります。 このコードはコードよりも大きくて遅い
このオプションなしで生成されます。 M680x0プロセッサでは、このオプションは必要ありません。 -fPIC
十分です。

GCCは通常、単一の命令を使用してGOTから値をロードします。 これは
比較的効率的で、GOTが約64kよりも小さい場合にのみ機能します。 なんでも
大きいと、リンカは次のようなエラーを報告します。

再配置が収まるように切り捨てられました:R_68K_GOT16O f​​oobar

これが発生した場合は、コードを再コンパイルする必要があります -mxgot。 その後、
非常に大きなGOT。 ただし、で生成されたコード -mxgot 効率が悪いので
グローバルシンボルの値をフェッチするために4つの命令を取ります。

GNUリンカーの新しいバージョンを含む一部のリンカーは、作成できることに注意してください。
複数のGOTとソートGOTエントリ。 あなたがそのようなリンカーを持っているなら、あなたはただ必要なはずです
使用する -mxgot 8192を超えるGOTにアクセスする単一のオブジェクトファイルをコンパイルする場合
エントリ。 非常に少数です。

GCCが位置に依存しないコードを生成しない限り、これらのオプションは効果がありません。

Mコア オプション

これらは、 -m Motorola M*Coreプロセッサ用に定義されたオプション。

-マルドリット
-mno-ハードライト
XNUMX命令以下で実行できる場合は、定数をコードストリームにインライン化します。

-mdiv
-mno-div
除算命令を使用します。 (デフォルトで有効)。

-mrelax-即時
-mno-relax-immediate
ビット操作で任意のサイズの即値を許可します。

-mwide-ビットフィールド
-mno-wide-ビットフィールド
ビットフィールドは常に int サイズとして扱います。

-m4byte-関数
-mno-4byte-関数
すべての関数を4バイト境界に揃えるように強制します。

-mcallgraph-データ
-mno-callgraph-data
コールグラフ情報を発行します。

-mslow-bytes
-mno-slow-bytes
バイト量を読み取るときは、ワードアクセスを優先します。

-mlittle-エンディアン
-mbig-エンディアン
リトルエンディアンターゲットのコードを生成します。

-m210
-m340
210プロセッサのコードを生成します。

-mno-lsim
ランタイムサポートが提供されていると想定し、シミュレータライブラリを省略します
(libsim.a) リンカのコマンドラインから。

-mstack-increment =サイズ
シングルスタックインクリメント操作の最大量を設定します。 大きな値は
大量の関数を必要とする機能を含むプログラムの速度を上げる
スタックスペースですが、スタックが拡張された場合、セグメンテーション違反を引き起こす可能性もあります
過度に。 デフォルト値は0x1000です。

メップ オプション

-mabsdiff
XNUMXつのレジスタ間の絶対差である「abs」命令を有効にします。

-モール-opts
すべてのオプション命令を有効にします - 平均、乗算、除算、ビット操作、
先行ゼロ、絶対差、最小/最大、クリップ、および彩度。

-平均
XNUMXつのレジスタの平均を計算する「ave」命令を有効にします。

-mbased =n
サイズの変数 n バイト以下は、「.based」セクションに配置されます。
デフォルト。 ベース変数は $tp レジスタをベース レジスタとして使用します。
「.based」セクションの 128 バイト制限。

-mbitops
ビット操作命令を有効にします - ビットテスト ("btstm")、セット ("bsetm")、クリア
("bclrm")、invert( "bnotm")、およびtest-and-set( "tas")。

-mc =
定数データを配置するセクションを選択します。 「小さい」、「近い」、または
"遠い"。

-mclip
「クリップ」命令を有効にします。 「-mclip」は、次のことも行わない限り役に立たないことに注意してください。
「-mminmax」を提供します。

-mconfig =
組み込みコア構成の XNUMX つを選択します。 各 MeP チップには XNUMX つ以上の
その中のモジュール; 各モジュールには、コアCPUとさまざまなコプロセッサー(オプション)があります
指示、および周辺機器。 GCCの一部ではない「MeP-Integrator」ツールは、
このオプションによるこれらの構成。 このオプションを使用することは、すべてを使用することと同じです
対応するコマンドライン オプション。 デフォルト設定は「デフォルト」です。

-mcop
コプロセッサー命令を有効にします。 デフォルトでは、これは32ビットコプロセッサーです。 ノート
通常、コプロセッサーは「-mconfig=」オプションを介して有効にされます。

-mcop32
32ビットコプロセッサの命令を有効にします。

-mcop64
64ビットコプロセッサの命令を有効にします。

-mivc2
IVC2スケジューリングを有効にします。 IVC2は64ビットVLIWコプロセッサーです。

-mdc
定数変数を「.near」セクションに配置します。

-mdiv
「div」および「divu」命令を有効にします。

-meb
ビッグエンディアンコードを生成します。

-メル
リトルエンディアンコードを生成します。

-mio-揮発性
「io」属性でマークされた変数はすべて、
揮発性と見なされます。

-ml デフォルトで変数が「.far」セクションに割り当てられるようにします。

-mleadz
「leadz」(先行ゼロ)命令を有効にします。

-んん デフォルトでは、変数が「.near」セクションに割り当てられます。

-mminmax
「最小」および「最大」命令を有効にします。

-mmult
乗算および積和命令を有効にします。

-mno-opts
「-mall-opts」で有効化されたすべてのオプション命令を無効化します。

-mrepeat
低オーバーヘッドのループに使用される「repeat」および「erepeat」命令を有効にします。

-MS すべての変数をデフォルトで「.tiny」セクションにします。 あることに注意してください
このセクションの65536バイトの制限。 これらの変数へのアクセスは%gpベースを使用します
登録してください。

-msatur
飽和命令を有効にします。 コンパイラは現在、
これら自体を生成しますが、このオプションは他のツールとの互換性のために含まれています。
「として」のように。

-msdram
デフォルトのROMベースのランタイムではなく、SDRAMベースのランタイムをリンクします。

-msim
シミュレーターのランタイム ライブラリをリンクします。

-msimnovec
シミュレータランタイムライブラリをリンクします。ただし、リセットとの組み込みサポートは除きます。
例外ベクトルとテーブル。

-mtf
すべての関数をデフォルトで「.far」セクションにします。 このオプションがないと、機能します
デフォルトは「.near」セクションです。

-mtiny =n
である変数 n バイト以下が「.tiny」セクションに割り当てられます。 これらは
変数は$gpベースレジスタを使用します。 このオプションのデフォルトは4ですが、注意してください
「.tiny」セクションには65536バイトの制限があります。

マイクロブレイズ オプション

-msoft-float
浮動小数点にはソフトウェアエミュレーションを使用します(デフォルト)。

-mhard-float
ハードウェア浮動小数点命令を使用します。

-mmemcpy
ブロック移動を最適化せず、「memcpy」を使用してください。

-mno-clearbss
このオプションは非推奨です。 使用する -fno-zero-in-bss で初期化 を代わりにお使いください。

-mcpu =CPUタイプ
特定の CPU の機能とスケジュール コードを使用します。 サポートされている値は次の形式です
vX.YY.Zここで、 X メジャーバージョンです、 YY はマイナーバージョンであり、 Z 互換性があります
コード。 例の値は v3.00.a, v4.00.b, v5.00.a, v5.00.b, v5.00.b, v6.00.a.

-mxl-ソフトマル
ソフトウェア乗算エミュレーションを使用します(デフォルト)。

-mxl-ソフト-div
除算にはソフトウェアエミュレーションを使用します(デフォルト)。

-mxl-バレルシフタ
ハードウェアバレルシフタを使用してください。

-mxl-パターン-比較
パターン比較命令を使用します。

-msmall-分割
小さな符号付き整数除算にはテーブルルックアップ最適化を使用します。

-mxl-スタックチェック
このオプションは非推奨です。 代わりに -fstack-check を使用してください。

-mxl-gp-opt
GP 相対 sdata/sbss セクションを使用します。

-mxl-乗算-高
32x32乗算の上位部分には、乗算上位命令を使用します。

-mxl-float-convert
ハードウェア浮動小数点変換命令を使用します。

-mxl-float-sqrt
ハードウェア浮動小数点平方根命令を使用します。

-mxlモード-アプリモデル
アプリケーションモデルを選択 アプリモデル。 有効なモデルは

実行ファイル
通常の実行可能ファイル(デフォルト)、スタートアップコードを使用 crt0.o.

xmdstub
ザイリンクスマイクロプロセッサデバッガ(XMD)ベースのソフトウェア侵入型デバッグで使用するため
xmdstubと呼ばれるエージェント。 これはスタートアップファイルを使用します crt1.o の開始アドレスを設定します
プログラムは 0x800 になります。

ブートストラップ
ブートローダーを使用してロードされるアプリケーションの場合。 このモデルはスタートアップファイルを使用します
crt2.o これには、プロセッサリセットベクトルハンドラが含まれていません。 これは適切です
プロセッサリセットの制御をブートローダーではなくブートローダーに転送するため
アプリケーション。

ベクトルなし
MicroBlazeベクターを必要としないアプリケーション向け。 このオプション
監視アプリケーション内で実行されているアプリケーションに役立つ場合があります。 このモデル
使用されます crt3.o スタートアップファイルとして。

オプション -xl-モード-アプリモデル の非推奨のエイリアスです -mxlモード-アプリモデル.

MIPS オプション

-EB ビッグエンディアンコードを生成します。

-THE リトルエンディアンコードを生成します。 これはのデフォルトです mips * el-*-* 構成。

-XNUMX月=アーチ
で実行されるコードを生成する アーチ、一般的な MIPS ISA の名前、または
特定のプロセッサの名前。 ISA 名は次のとおりです。 ミップス1, ミップス2, ミップス3, ミップス4,
ミップス32, mips32r2, ミップス64 & mips64r2。 プロセッサ名は次のとおりです。 4kc, 4km, 4kp, 4ksc,
4kec, 4ケム, 4キープ, 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, ロンソン2e, ロンソン2f, ロンソン3a, m4k, オクテオン, オクテオン+, オクテオン2, オリオン,
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 & xlr. 特別な価値 アビから 最も互換性のあるものを選択します
選択した ABI のアーキテクチャ (つまり、 ミップス1 32ビットABIおよび ミップス3 64ビット用
ABI)。

ネイティブ Linux/GNU および IRIX ツールチェーンも値をサポートします ネイティブを選択します。
ホスト プロセッサに最適なアーキテクチャ オプション。 -march=ネイティブ GCC の場合は効果がない
プロセッサを認識しません。

プロセッサ名では、ファイナル 000 次のように省略できます k (例えば、 -march = r2k).
プレフィックスはオプションであり、 vr 書かれるかもしれません r.

フォームの名前 nf2_1 FPUが半分のレートでクロックされるプロセッサを参照してください。
コア、フォームの名前 nf1_1 同じレートでクロックされるFPUを備えたプロセッサを参照してください
コアとして、そしてフォームの名前 nf3_2 比率でクロックされるFPUを備えたプロセッサを参照してください
コアに関して3:2の。 互換性の理由から、 nf として受け入れられます
の同義語 nf2_1 while nx & bfx の同義語として受け入れられます nf1_1.

GCC は、このオプションの値に基づいて XNUMX つのマクロを定義します。 最初は _MIPS_ARCH,
これは、ターゲットアーキテクチャの名前を文字列として示します。 XNUMX番目の形式は
_MIPS_ARCH_fooここで、 foo の大文字化された値です _MIPS_ARCH。 例えば、
-march = r2000 設定します _MIPS_ARCH 〜へ 「r2000」 マクロを定義します _MIPS_ARCH_R2000.

なお、 _MIPS_ARCH マクロは、上記のプロセッサ名を使用します。 言い換えると、
完全なプレフィックスがあり、省略されません 000 as k。 の場合 から-
ABI、マクロは解決されたアーキテクチャに名前を付けます (または 「ミップス1」 or 「ミップス3」)。 それは名前を付けます
いいえの場合のデフォルトアーキテクチャ -行進 オプションが与えられます。

-mtune =アーチ
最適化 アーチ。 特に、このオプションは命令の方法を制御します
スケジュールされた、および算術演算の認識されたコスト。 のリスト アーチ
と同じです -行進.

このオプションを使用しない場合、GCC は、指定されたプロセッサ用に最適化します。 -行進.
使用することにより、 -行進 & -ムチューン 一緒に、で実行されるコードを生成することが可能です
プロセッサのファミリーですが、その特定のメンバーのコードを最適化します
家族。

-ムチューン マクロを定義します _MIPS_TUNE & _MIPS_TUNE_fooと同じように機能します。
  -行進 上記のもの。

-ミップス1
に相当 -march = mips1.

-ミップス2
に相当 -march = mips2.

-ミップス3
に相当 -march = mips3.

-ミップス4
に相当 -march = mips4.

-ミップス32
に相当 -march = mips32.

-mips32r2
に相当 -march = mips32r2.

-ミップス64
に相当 -march = mips64.

-mips64r2
に相当 -march = mips64r2.

-ミップス16
-mno-mips16
MIPS16 コードを生成します (生成しません)。 GCC が MIPS32 または MIPS64 をターゲットにしている場合
アーキテクチャでは、MIPS16e ASE を利用します。

MIPS16コード生成は、機能ごとに制御することもできます。
「mips16」および「nomips16」属性。

-mflip-mips16
交互の機能でMIPS16コードを生成します。 このオプションは回帰用に提供されています
MIPS16と非MIPS16の混合コード生成のテストであり、通常のコード生成を目的としたものではありません。
ユーザーコードのコンパイルに使用します。

-minterlink-mips16
-mno-インターリンク-mips16
非 MIPS16 コードが MIPS16 コードとリンク互換であることを要求します (要求しません)。

たとえば、非 MIPS16 コードは MIPS16 コードに直接ジャンプできません。 を使用する必要があります。
コールまたは間接ジャンプ。 -minterlink-mips16 したがって、次の場合を除き、直接ジャンプを無効にします
GCC は、ジャンプのターゲットが MIPS16 ではないことを認識しています。

-mabi = 32
-mabi = o64
-mabi = n32
-mabi = 64
-mabi = eabi
指定されたABIのコードを生成します。

EABIには32ビットと64ビットのバリアントがあることに注意してください。 GCCは通常64ビットを生成します
64ビットアーキテクチャを選択した場合のコードですが、 -mgp32 32ビットコードを取得するには
を代わりにお使いください。

O64 ABIについては、を参照してください。http://gcc.gnu.org/projects/mipso64-abi.html>.

GCCは、浮動小数点レジスタが32であるo64ABIのバリアントをサポートします。
32ビット幅より。 この組み合わせは、 -mabi = 32 -MFP64。 このABI
に依存しています mthc1 & mfhc1 したがって、サポートされているのは
MIPS32R2 プロセッサ。

引数と戻り値のレジスタ割り当ては同じままですが、それぞれ
スカラー値は、64ビットのペアではなく単一の32ビットレジスタで渡されます
レジスタ。 たとえば、スカラー浮動小数点値はで返されます $ f0 のみ、
$ f0/$ f1 ペア。 呼び出し保存レジスタのセットも同じままですが、すべて 64 ビット
保存されます。

-マビコール
-mno-abicalls
SVR4スタイルの動的オブジェクトに適したコードを生成します(生成しません)。
-マビコール SVR4ベースのシステムのデフォルトです。

-mshared
-mno-共有
完全に位置に依存せず、次のことができるコードを生成する(生成しない)
したがって、共有ライブラリにリンクされます。 このオプションは影響するだけです -マビコール.

すべて -マビコール コードは、オプションに関係なく、従来は位置に依存していませんでした
ような -fPIC & -fpic。 ただし、拡張機能として、GNUツールチェーンは実行可能ファイルを許可します
ローカルにバインドするシンボルに絶対アクセスを使用します。 より短いGPを使用することもできます
初期化シーケンスを実行し、ローカルで定義された関数への直接呼び出しを生成します。 これ
モードはによって選択されます -mno-共有.

-mno-共有 binutils 2.16以降に依存し、
GNUリンカによってリンクされています。 ただし、このオプションはファイナルのABIには影響しません。
実行可能; 再配置可能オブジェクトのABIにのみ影響します。 使用する -mno-共有 意志
一般に、実行可能ファイルを小さくかつ高速にします。

-mshared デフォルトです。

-mplt
-mno-plt
静的リンカーと動的リンカーがPLTをサポートし、コピーすることを想定します(想定しないでください)。
移転。 このオプションは影響するだけです -mno-共有 -マビコール。 n64 ABIの場合、これは
オプションがないと効果はありません -msym32.

あなたは作ることができます -mplt GCCを設定することによるデフォルト --with-mips-plt。 デフォルト
is -mno-plt さもないと。

-mxgot
-mno-xgot
グローバルオフセットテーブルのサイズに関する通常の制限を解除します(解除しないでください)。

GCCは通常、単一の命令を使用してGOTから値をロードします。 これは
比較的効率的で、GOT が約 64k より小さい場合にのみ機能します。
それより大きいと、リンカーは次のようなエラーを報告します。

再配置が収まるように切り捨てられました:R_MIPS_GOT16 foobar

これが発生した場合は、コードを再コンパイルする必要があります -mxgot。 その後、
非常に大きなGOT。ただし、XNUMXつかかるため、効率も低下します。
グローバルシンボルの値をフェッチするための命令。

一部のリンカーは複数のGOTを作成できることに注意してください。 あなたがそのようなリンカーを持っているなら、あなたは
使用する必要があるのは -mxgot 64つのオブジェクトファイルがXNUMXkを超えるファイルにアクセスする場合
GOTエントリの価値。 非常に少数です。

GCCが位置に依存しないコードを生成しない限り、これらのオプションは効果がありません。

-mgp32
汎用レジスタは32ビット幅であると想定します。

-mgp64
汎用レジスタは64ビット幅であると想定します。

-MFP32
浮動小数点レジスタが32ビット幅であると想定します。

-MFP64
浮動小数点レジスタが64ビット幅であると想定します。

-mhard-float
浮動小数点コプロセッサ命令を使用します。

-msoft-float
浮動小数点コプロセッサ命令は使用しないでください。 浮動小数点を実装する
代わりにライブラリ呼び出しを使用した計算。

-msingle-float
浮動小数点コプロセッサーは単精度演算のみをサポートするとします。

-mdouble-float
浮動小数点コプロセッサーが倍精度演算をサポートしていると仮定します。 これ
デフォルトです。

-mllsc
-mno-llsc
使用する(使用しない) ll, sc, sync 組み込みのアトミックメモリを実装するための命令
機能。 どちらのオプションも指定されていない場合、GCC は次の場合に命令を使用します。
ターゲット アーキテクチャはそれらをサポートします。

-mllsc ランタイム環境が命令をエミュレートでき、 -mno-llsc
非標準のISA用にコンパイルする場合に役立ちます。 どちらのオプションも
GCCを設定することによるデフォルト --with-llsc & --なし-llsc
--with-llsc 一部の構成のデフォルトです。 インストールドキュメントを参照してください
詳細については。

-mdsp
-mno-dsp
MIPS DSP ASEのリビジョン1を使用します(使用しないでください)。
このオプションは、プリプロセッサ マクロを定義します。 __mips_dsp. また、
__mips_dsp_rev 1へ。

-mdspr2
-mno-dspr2
MIPS DSP ASEのリビジョン2を使用します(使用しないでください)。
このオプションは、プリプロセッサ マクロを定義します。 __mips_dsp & __mips_dspr2。 また、
定義 __mips_dsp_rev 2へ。

-msmartmips
-mno-スマートミップス
MIPS SmartMIPS ASEを使用します(使用しないでください)。

-障害のあるシングル
-mno-ペアリング-シングル
ペアの単精度浮動小数点命令を使用します(使用しないでください)。
このオプションでは、ハードウェア浮動小数点サポートを有効にする必要があります。

-mdmx
-mno-mdmx
MIPS Digital Media Extensionの説明を使用します(使用しないでください)。 このオプションは
64ビットコードを生成するときに使用され、ハードウェア浮動小数点サポートが必要です。
有効になりました。

-mips3d
-mno-mips3d
MIPS-3D ASEを使用します(使用しないでください)。 オプション -mips3d 含意する -障害のあるシングル.

-mmt
-mno-mt
MTマルチスレッド命令を使用する(使用しない)。

-mlong64
「長い」タイプを64ビット幅に強制します。 見る -mlong32 デフォルトの説明については
ポインタサイズの決定方法。

-mlong32
「long」、「int」、およびポインター型を32ビット幅に強制します。

「int」、「long」、およびポインタのデフォルトのサイズは、ABIによって異なります。 全ての
サポートされているABIは32ビットの「int」を使用します。 n64 ABIは、64ビットの「ロング」を使用します。64ビットの場合も同様です。
EABI; その他は32ビットの「長い」を使用します。 ポインタは「長い」と同じサイズ、または
整数レジスタと同じサイズのいずれか小さい方。

-msym32
-mno-sym32
選択したものに関係なく、すべてのシンボルが32ビット値であると想定します(想定しないでください)。
ABI。 このオプションは、 -mabi = 64 & -mno-abicalls なぜなら、
GCCがシンボリックアドレスへのより短くより速い参照を生成できるようにします。

-G NUM
そのデータがない場合は、外部から見えるデータの定義を小さなデータセクションに入れます
より大きい NUM バイト。 これにより、GCC はより効率的にデータにアクセスできます。 見る -mgpopt for
詳細。

デフォルト -G オプションは構成によって異なります。

-mlocal-sdata
-mno-local-sdata
延長する(延長しない) -G 静的変数などのローカルデータに対する動作も
Cで。 -mlocal-sdata すべての構成のデフォルトです。

アプリケーションが使用している小さなデータが多すぎるとリンカが文句を言う場合は、
パフォーマンスがそれほど重要ではないパーツをで再構築してみてください -mno-local-sdata。 あなた
で大規模なライブラリを構築することもできます -mno-local-sdata、ライブラリが
メインプログラムのためにより多くの余地を残してください。

-mextern-sdata
-mno-extern-sdata
次の場合、外部定義データは小さなデータ セクションにあると想定します (想定しないでください)。
そのデータは -G 限定。 -mextern-sdata すべてのデフォルトです
構成。

モジュールをコンパイルする場合 ウェイ   -mextern-sdata -G NUM -mgpopt, ウェイ 参照
変数 それは大きくない NUM バイト、あなたはそれを確認する必要があります 置かれている
小さなデータセクションで。 もしも 別のモジュールによって定義されている場合は、コンパイルする必要があります
十分な高さのそのモジュール -G 「セクション」属性を設定または添付する 's
意味。 もしも 一般的ですが、アプリケーションを十分な高さでリンクする必要があります -G
設定。

これらの制限を満たす最も簡単な方法は、すべてのモジュールをコンパイルしてリンクすることです。
同じで -G オプション。 ただし、をサポートするライブラリを構築することをお勧めします
いくつかの異なる小さなデータ制限。 これを行うには、ライブラリを次のようにコンパイルします。
サポートされている最高 -G 設定と追加使用 -mno-extern-sdata 停止する
ライブラリは、外部で定義されたデータについての仮定を立てることから。

-mgpopt
-mno-gpopt
小さなデータにあることがわかっているシンボルにGP相対アクセスを使用する(使用しない)
セクション; 見る -G, -mlocal-sdata & -mextern-sdata. -mgpopt すべてのデフォルトです
構成。

-mno-gpopt $gpレジスタがの値を保持しない可能性がある場合に役立ちます
「_gp」。 たとえば、コードがブートで使用される可能性のあるライブラリの一部である場合
ブート モニタ ルーチンを呼び出すプログラムは、$gp に未知の値を渡します。
(このような状況では、ブート モニター自体は通常、次のようにコンパイルされます。 -G0.)

-mno-gpopt 含意する -mno-local-sdata & -mno-extern-sdata.

-埋め込みデータ
-mno-embedded-data
可能であれば、最初に読み取り専用データセクションに変数を割り当て、次に
可能であれば小さなデータセクション、そうでない場合はデータ。 これにより、コードが少し遅くなります
デフォルトよりも多くなりますが、実行時に必要なRAMの量が減るため、
一部の組み込みシステムに適しています。

-muninit-const-in-rodata
-mno-uninit-const-in-rodata
初期化されていない「const」変数を読み取り専用データセクションに配置します。 このオプションは
と組み合わせてのみ意味がある -埋め込みデータ.

-mcode-読み取り可能=設定
GCCが実行可能セクションから読み取るコードを生成できるかどうかを指定します。 がある
XNUMXつの可能な設定:

-mcode-読み取り可能=はい
命令は実行可能セクションに自由にアクセスできます。 これがデフォルト設定です。

-mcode-読み取り可能=pcrel
MIPS16 PC相対ロード命令は実行可能セクションにアクセスできますが、その他
指示はそうしてはいけません。 このオプションは、4KScおよび4KSdプロセッサで役立ちます
コードTLBに読み取り禁止ビットが設定されている場合。 プロセッサでも役立ちます
デュアルインストラクション/データSRAMインターフェイスを持つように構成でき、
M4Kと同様に、PC相対負荷を命令RAMに自動的にリダイレクトします。

-mcode-読み取り可能=いいえ
命令は実行可能セクションにアクセスしてはなりません。 このオプションは、
デュアルインストラクション/データSRAMインターフェイスを持つように構成されているターゲット
(M4Kとは異なり)PC相対負荷を自動的にリダイレクトしません
命令RAM。

-msplit-アドレス
-mno-分割アドレス
「%hi()」および「%lo()」アセンブラ再配置演算子の使用を有効(無効)にします。 これ
オプションはに取って代わられました -mexplicit-relocs ただし、後方に保持されます
互換性。

-mexplicit-relocs
-mno-explicit-relocs
シンボリックアドレスを処理するときは、アセンブラ再配置演算子を使用します(使用しないでください)。
によって選択された代替 -mno-explicit-relocs、代わりにアセンブラマクロを使用します。

-mexplicit-relocs GCCが次のようなアセンブラを使用するように設定されている場合のデフォルトです。
再配置演算子をサポートします。

-mcheck-ゼロ除算
-mno-check-zero-division
ゼロによる整数除算でトラップします(トラップしません)。

デフォルトは -mcheck-ゼロ除算.

-mdivide-トラップ
-mdivide-breaks
MIPSシステムは、条件付きトラップまたは
ブレーク命令。 トラップを使用するとコードが小さくなりますが、MIPSでのみサポートされます
II以降。 また、Linuxカーネルの一部のバージョンには、トラップを防ぐバグがあります
適切な信号(「SIGFPE」)の生成から。 使用する -mdivide-トラップ 条件付きで許可する
それらをサポートするアーキテクチャのトラップと -mdivide-breaks の使用を強制する
休憩。

デフォルトは通常です -mdivide-トラップ、ただし、これは構成時にオーバーライドできます
--with-divide = breaks。 ゼロ除算チェックは、を使用して完全に無効にすることができます
-mno-check-zero-division.

-mmemcpy
-mno-memcpy
重要なブロックの移動に「memcpy()」の使用を強制します (強制しません)。 デフォルト
is -mno-memcpy、これにより、GCCはほとんどの一定サイズのコピーをインライン化できます。

-mlong-calls
-mno-long-calls
「jal」命令の使用を無効にします(無効にしないでください)。 「jal」を使用した関数の呼び出し
より効率的ですが、発信者と着信者が同じ256メガバイトである必要があります
セグメント。

このオプションは、abicallsコードには影響しません。 デフォルトは -mno-long-calls.

-マッド
-mno-mad
「mad」、「madu」、および「mul」命令の使用を有効(無効)にします。
R4650ISA。

-混乱-狂った
-mno-fusion-madd
浮動小数点積和命令の使用を有効(無効)にします。
利用可能です。 デフォルトは -混乱-狂った.

積和命令を使用すると、中間積が計算されます。
FCSR Flush to Zero ビットの影響を受けません。 これは
状況によっては望ましくない。

-nocpp
MIPSアセンブラに、プリプロセッサをユーザーアセンブラファイルに対して実行しないように指示します(
.s 接尾辞)それらを組み立てるとき。

-mfix-24k
-mno-fix-24k
24K E48(補充中に店舗のデータが失われた)の正誤表を回避します。 回避策
GCCではなくアセンブラによって実装されます。

-mfix-r4000
-mno-fix-r4000
特定のR4000CPUエラッタを回避します。

-ダブルワードまたは可変シフトを実行すると、誤った結果が生じる可能性があります
整数除算を開始した直後。

-ダブルワードまたは可変シフトは、実行中に誤った結果をもたらす可能性があります
整数乗算が進行中です。

-整数除算は、の遅延スロットで開始された場合、誤った結果をもたらす可能性があります
ブランチまたはジャンプを取りました。

-mfix-r4400
-mno-fix-r4400
特定のR4400CPUエラッタを回避します。

-ダブルワードまたは可変シフトを実行すると、誤った結果が生じる可能性があります
整数除算を開始した直後。

-mfix-r10000
-mno-fix-r10000
特定のR10000エラッタを回避します。

-"ll" / "sc"シーケンスは、3.0より前のリビジョンではアトミックに動作しない場合があります。 彼らはかもしれません
リビジョン2.6以前でのデッドロック。

このオプションは、ターゲットアーキテクチャがブランチの可能性をサポートしている場合にのみ使用できます
指示に従ってください。 -mfix-r10000 がデフォルトの場合 -march = r10000 使用されている; -mno-fix-r10000
それ以外の場合はデフォルトです。

-mfix-vr4120
-mno-fix-vr4120
特定のVR4120エラッタを回避します。

-「dmultu」は常に正しい結果を生成するとは限りません。

-「div」と「ddiv」は、オペランドのXNUMXつが正しい結果を生成するとは限りません。
負です。

除算エラッタの回避策は、次の特殊機能に依存しています。 libgcc.a。 に
現在、これらの機能は「mips64vr*-elf」構成によってのみ提供されます。

他の VR4120 エラッタでは、特定のペアの間に nop を挿入する必要があります。
指示。 これらのエラッタは、GCC自体ではなく、アセンブラによって処理されます。

-mfix-vr4130
VR4130「mflo」/「mfhi」エラッタを回避します。 回避策は、によって実装されます
ただし、GCC は「mflo」と「mfhi」の使用を避けますが、
代わりに、VR4130の「macc」、「macchi」、「dmacc」、および「dmacchi」の命令を使用できます。

-mfix-sb1
-mno-fix-sb1
特定のSB-1CPUコアの正誤表を回避します。 (このフラグは現在SB-1で機能します
リビジョン2「F1」および「F2」浮動小数点エラッタ。)

-mr10k-cache-barrier =設定
の副作用を回避するためにGCCがキャッシュバリアを挿入する必要があるかどうかを指定します
R10Kプロセッサに関する憶測。

多くのプロセッサと共通して、R10Kは条件付きの結果を予測しようとします
分岐し、「取得した」分岐からの命令を投機的に実行します。 後で
予測された結果が間違っていた場合、これらの命令を中止します。 ただし、R10K では、
中止された命令でさえ、副作用を引き起こす可能性があります。

この問題はカーネルストアにのみ影響し、システムによってはカーネルの負荷にのみ影響します。
例として、投機的に実行されたストアは、ターゲットメモリをキャッシュにロードする場合があります
ストア自体が後で中止された場合でも、キャッシュラインをダーティとしてマークします。 DMAの場合
「ダーティ」ラインがフラッシュされる前に、操作はメモリの同じ領域に書き込みます。
キャッシュされたデータは、DMA 処理されたデータを上書きします。 詳細については、R10K プロセッサのマニュアルを参照してください。
他の潜在的な問題を含む説明。

回避策のXNUMXつは、すべてのメモリアクセスの前にキャッシュバリア命令を挿入することです。
投機的に実行される可能性があり、中止された場合でも副作用が発生する可能性があります。
-mr10k-cache-barrier =設定 この回避策のGCCの実装を制御します。 これ
次の領域内の任意のバイトへの中止されたアクセスにはサイドがないことを前提としています
効果:

1.現在の関数のスタックフレームが占めるメモリ。

2.着信スタック引数が占めるメモリ。

3.リンク時定数アドレスを持つオブジェクトが占有するメモリ。

これらのリージョンへの投機的アクセスを保証するのはカーネルの責任です
確かに安全です。

入力プログラムに次のような関数宣言が含まれている場合:

void foo(void);

次に、「foo」の実装により、「jfoo」と「jalfoo」を実行できるようにする必要があります
投機的に。 GCCは、それ自体がコンパイルする関数に対するこの制限を尊重します。 これ
非GCC関数(手書きのアセンブリコードなど)でも同じことを行う必要があります。

オプションにはXNUMXつの形式があります。

-mr10k-cache-barrier = load-store
投機的に実行される可能性のあるロードまたはストアの前にキャッシュバリアを挿入します
中絶したとしても副作用があるかもしれません。

-mr10k-cache-barrier = store
投機的に実行される可能性のあるストアの前にキャッシュバリアを挿入し、
中止しても副作用があるかもしれません。

-mr10k-cache-barrier = none
キャッシュバリアの挿入を無効にします。 これがデフォルト設定です。

-mflush-func =ファンク
-mno-flush-func
IキャッシュとDキャッシュをフラッシュするために呼び出す関数、またはそのようなキャッシュを呼び出さないようにする関数を指定します
関数。 呼び出された場合、関数は共通の引数と同じ引数を取る必要があります
「_flush_func()」、つまり、キャッシュが実行されるメモリ範囲のアドレス
フラッシュ、メモリ範囲のサイズ、および数値3(両方のキャッシュをフラッシュするため)。 The
デフォルトは、GCCが構成されたターゲットによって異なりますが、通常は次のいずれかです。
_flush_func or __cpu_flush.

mbranch-cost =NUM
ブランチのコストをおおよそに設定します NUM 「簡単な」指示。 この費用は
ヒューリスティックであり、リリース間で一貫した結果が得られるとは限りません。 ゼロ
コストは、デフォルトを冗長に選択します。これは、 -ムチューン 設定。

-mbranch-可能性が高い
-mno-ブランチの可能性が高い
のデフォルトに関係なく、BranchLikely命令の使用を有効または無効にします。
選択したアーキテクチャ。 デフォルトでは、Branch Likely命令は、次の場合に生成される可能性があります。
それらは、選択したアーキテクチャによってサポートされています。 例外はMIPS32と
MIPS64アーキテクチャおよびそれらのアーキテクチャを実装するプロセッサ。 それらのための、
MIPS32 および
MIPS64アーキテクチャは、特にその使用を非推奨にします。

-mfp-例外
-mno-fp-例外
FP 例外を有効にするかどうかを指定します。 これは、FP のスケジュール方法に影響します
一部のプロセッサの手順。 デフォルトでは、FP 例外が有効になっています。

たとえば、SB-1では、FP例外が無効になっていて、64ビットを出力している場合
コードを作成すると、両方のFPパイプを使用できます。 それ以外の場合、使用できるFPパイプはXNUMXつだけです。

-mvr4130-整列
-mno-vr4130-align
VR4130パイプラインは双方向スーパースカラーですが、発行できる命令はXNUMXつだけです。
最初のものが 8 バイトでアラインされている場合は一緒に。 このオプションを有効にすると、GCC は
並行して実行する必要があると思われる命令のペアを整列させます。

このオプションは、VR4130用に最適化する場合にのみ効果があります。 通常はコードを作成します
より速くなりますが、大きくすることを犠牲にして。 デフォルトで有効になっています
最適化レベル -O3.

-msynci
-mno-synci
それをサポートするアーキテクチャでの「同期」命令の生成を有効(無効)にします。
「synci」命令 (有効な場合) は、次の場合に生成されます。
「__builtin___clear_cache()」がコンパイルされます。

このオプションのデフォルトは「-mno-synci」ですが、設定によってデフォルトを上書きできます
「--with-synci」で。

シングルプロセッサシステム用のコードをコンパイルする場合、通常は「synci」を使用しても安全です。
ただし、多くのマルチコア (SMP) システムでは、命令が無効になりません。
すべてのコアにキャッシュされ、未定義の動作につながる可能性があります。

-mrelax-pic-calls
-mno-relax-pic-calls
通常はレジスター$25を介してディスパッチされるPICコールを直接コールに変換してみてください。
これは、リンカがリンク時に宛先を解決できる場合にのみ可能であり、
宛先は直通電話の範囲内です。

-mrelax-pic-calls GCCがアセンブラとを使用するように設定されている場合のデフォルトです
「.reloc」アセンブリ ディレクティブと「-mexplicit-relocs」をサポートするリンカが含まれています
効果。 「-mno-explicit-relocs」を使用すると、この最適化は
コンパイラの助けを借りずにアセンブラとリンカだけ。

-mmcount-ra-アドレス
-mno-mcount-ra-アドレス
「_mcount」が呼び出し元の関数の戻り値を変更できるようにするコードを発行(発行しない)
住所。 有効にすると、このオプションは通常の「_mcount」インターフェースを新しいもので拡張します
raアドレス タイプが「intptr_t*」で、レジスター$12に渡されるパラメーター。
「_mcount」は、次の両方を実行して差出人住所を変更できます。

· レジスタ $31 の新しいアドレスを返します。

・新住所を「*」に格納ra-address」、もし raアドレス nullではありません。

デフォルトは -mno-mcount-ra-アドレス.

ミミックス オプション

これらのオプションはMMIX用に定義されています。

-mlibfuncs
-mno-libfuncs
組み込みライブラリ関数がコンパイルされていることを指定し、すべての値を
サイズに関係なく、レジスター。

-メプシロン
-mno-イプシロン
「rE」に関して比較する浮動小数点比較命令を生成します
イプシロンレジスタ。

-mabi = mmixware
-mabi = gnu
関数パラメーターを渡すコードを生成し、(呼び出された
関数)は、グローバルを使用するGNU ABIとは対照的に、レジスタ$0以上と見なされます。
231ドル以上を登録します。

-mzero-拡張
-mno-zero-extend
64ビットより短いサイズのメモリからデータを読み取る場合は、ゼロを使用します(使用しないでください)。
符号拡張命令ではなく、デフォルトでロード命令を拡張します。

-mknutthiv
-mno-knuthdiv
剰余を生成する除算の結果が除数と同じ符号を持つようにします。
デフォルトでは、 -mno-knuthdiv、剰余の符号は、の符号の後に続きます
配当。 どちらの方法も算術的に有効であり、後者はほぼ排他的です
中古。

-mtoplevel-シンボル
-mno-トップレベル-シンボル
付加する(付加しない) : すべてのグローバルシンボルに適用されるため、アセンブリコードを使用できます
「PREFIX」アセンブリディレクティブを使用します。

-メルフ
デフォルトではなく、ELF形式で実行可能ファイルを生成します MMO によって使用される形式
  ミミックス シミュレータ

-mbranch-予測
-mno-ブランチ予測
静的分岐予測の場合は、probable-branch命令を使用します(使用しないでください)。
可能性のあるブランチを示します。

-mbase-アドレス
-mno-ベースアドレス
を使用するコードを生成する(生成しない) ベース アドレス。 ベースアドレスを使用する
(アセンブラとリンカによって処理される)要求を自動的に生成します。
グローバルレジスタに設定される定数。 レジスターはXNUMXつ以上のベースに使用されます
レジスタに保持されている値から0から255の範囲内の要求に対処します。 The
通常、コードは短く高速になりますが、さまざまなデータ項目の数は
対処できるのは限られています。 これは、大量の静的データを使用するプログラムを意味します
必要かもしれません -mno-ベースアドレス.

-msingle-終了
-mno-単一出口
生成されたコードに各関数に単一の出口点を持たせるように強制します(強制しないでください)。

MN10300 オプション

ボーマン -m オプションは、MatsushitaMN10300アーキテクチャ用に定義されています。

-mmult-バグ
MN10300プロセッサの乗算命令のバグを回避するためのコードを生成します。
これがデフォルトです。

-mno-mult-bug
MN10300の乗算命令のバグを回避するためにコードを生成しないでください
プロセッサ。

-ママ33
AM33プロセッサに固有の機能を使用してコードを生成します。

-mno-am33
AM33プロセッサに固有の機能を使用してコードを生成しないでください。 これは
デフォルト。

-mam33-2
AM33/2.0プロセッサに固有の機能を使用してコードを生成します。

-ママ34
AM34プロセッサに固有の機能を使用してコードを生成します。

-mtune =CPUタイプ
命令をスケジューリングするときは、示されたCPUタイプのタイミング特性を使用してください。
これにより、対象のプロセッサタイプは変更されません。 CPUタイプは次のいずれかである必要があります
mn10300, am33, am33-2 or am34.

-mreturn-pointer-on-d0
ポインタを返す関数を生成するときは、「a0」と「aXNUMX」の両方でポインタを返します。
"d0"。 それ以外の場合、ポインターは a0 でのみ返され、そのような呼び出しを試みます。
プロトタイプのない関数はエラーになります。 このオプションがオンになっていることに注意してください
ディフォルト; 使用する -mno-return-pointer-on-d0 無効にします。

-mno-crt0
Cランタイム初期化オブジェクトファイルにリンクしないでください。

-mリラックス
リラクゼーション最適化パスを実行する必要があることをリンカーに示します。
ブランチ、呼び出し、および絶対メモリアドレスを短縮します。 このオプションは効果があるだけです
最後のリンクステップのコマンドラインで使用する場合。

このオプションを使用すると、シンボリックデバッグが不可能になります。

-mliw
コンパイラに生成を許可する 長い 命令 Word ターゲットが
AM33 またはそれ以降。 これがデフォルトです。 このオプションは、プリプロセッサマクロを定義します
__LIW__.

-mnoliw
コンパイラに生成を許可しない 長い 命令 Word 指示。 このオプション
プリプロセッサ マクロを定義します __いいえ_LIW__.

-msetlb
コンパイラが生成できるようにします SETLB & LCC ターゲットが
AM33 またはそれ以降。 これがデフォルトです。 このオプションは、プリプロセッサマクロを定義します
__SETLB__.

-mnosetlb
コンパイラに生成を許可しない SETLB or LCC 指示。 このオプションは次のように定義します
プリプロセッサマクロ __NO_SETLB__.

PDP-11 オプション

これらのオプションは、PDP-11用に定義されています。

-mfpu
ハードウェアFPP浮動小数点を使用します。 これがデフォルトです。 (FIS浮動小数点
PDP-11 / 40はサポートされていません。)

-msoft-float
ハードウェア浮動小数点は使用しないでください。

-mac0
浮動小数点の結果をac0(Unixアセンブラー構文ではfr0)に返します。

-mno-ac0
浮動小数点の結果をメモリに返します。 これがデフォルトです。

-m40
PDP-11/40のコードを生成します。

-m45
PDP-11/45のコードを生成します。 これがデフォルトです。

-m10
PDP-11/10のコードを生成します。

-mbcopy-ビルトイン
メモリのコピーには、インラインの「movmemhi」パターンを使用します。 これがデフォルトです。

-mbcopy
メモリのコピーにインラインの「movmemhi」パターンを使用しないでください。

-ミント16
-mno-int32
16ビットの「int」を使用します。 これがデフォルトです。

-ミント32
-mno-int16
32ビットの「int」を使用します。

-mfloat64
-mno-float32
64ビットの「float」を使用します。 これがデフォルトです。

-mfloat32
-mno-float64
32ビットの「float」を使用します。

-マブシ
「abshi2」パターンを使用します。 これがデフォルトです。

-mno-アブシ
「abshi2」パターンは使用しないでください。

-mbranch-高価
ブランチが高価なふりをします。 これは、コード生成を実験するためのものです
のみ。

-mbranch-安い
ブランチが高価であると偽ってはいけません。 これがデフォルトです。

-munix-asm
Unixアセンブラ構文を使用します。 これは、次のように構成された場合のデフォルトです。 pdp11-*-bsd.

-mdec-asm
DECアセンブラ構文を使用します。 これは、PDP-11ターゲット用に構成された場合のデフォルトです。
以外の pdp11-*-bsd.

ピコチップ オプション

ボーマン -m オプションはpicoChip実装用に定義されています:

-前=ae_type
配列の命令セット、レジスタセット、および命令スケジューリングパラメータを設定します
要素タイプ ae_type。 サポートされている値 ae_type   ANY, マル, マック.

-mae = ANY 完全に一般的な AE タイプを選択します。 このオプションで生成されたコードは、
他の AE タイプのいずれかで実行されます。 コードは、次の場合ほど効率的ではありません。
特定の AE タイプ、およびいくつかのタイプの演算 (乗算など) 用にコンパイルされた
すべてのタイプの AE で適切に機能するとは限りません。

-mae = MUL MULAEタイプを選択します。 これは、コンパイルされたコードに最も役立つAEタイプです。
とがデフォルトです。

-mae = MAC DSPスタイルのMACAEを選択します。 このオプションでコンパイルされたコードは、
DSP AEが提供しないため、バイト(char)操作のパフォーマンスが低下します
バイトロード/ストアのハードウェアサポート。

-msymbol-as-アドレス
コンパイラがロード/ストアのアドレスとしてシンボル名を直接使用できるようにします
最初にレジスタにロードせずに、命令。 通常、これの使用
オプションを指定すると、オプションを指定しない場合よりも高速に実行される、より大きなプログラムが生成されます。
中古。 ただし、結果はプログラムごとに異なるため、ユーザーに任せます
永続的に有効にするのではなく、オプション。

-mno-非効率的-警告
非効率的なコードの生成に関する警告を無効にします。 これらの警告は
たとえば、バイトレベルのメモリ操作を実行するコードをコンパイルするときに生成されます
MACAEタイプ。 MAC AEは、バイトレベルのメモリをハードウェアでサポートしていません
したがって、すべてのバイトロード/ストアはワードロード/ストアから合成する必要があります
オペレーション。 これは非効率的であり、警告が生成され、
プログラマは、バイト操作を避けるためにコードを書き直す必要があります。
必要なハードウェア サポートを備えた AE タイプ。 このオプションは、警告を有効にします
オフになります。

PowerPC オプション

これらは以下にリストされています

RL78 オプション

-msim
シミュレーター内の操作をサポートするための追加のターゲットライブラリ内のリンク。

-mmul = none
-mmul = g13
-mmul = rl78
使用するハードウェア乗算サポートのタイプを指定します。 デフォルトは
ソフトウェア乗算関数を使用する「なし」。 「g13」オプションは、
RL78/G13 ターゲットのみのハードウェア乗算/除算ペリフェラル。 「rl78」オプション
RL78 ソフトウェア マニュアルで定義されている標準のハードウェア乗算用です。

IBM RS / 6000 & PowerPC オプション

ボーマン -m オプションは、IBM RS/6000およびPowerPC用に定義されています。

-mpower
-無能
-mpower2
-mno-power2
-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-ハード-dfp
GCC は、RS/6000 および PowerPC 用の XNUMX つの関連する命令セット アーキテクチャをサポートしています。
  電源 命令セットは、によってサポートされている命令です。 リオス 使用チップセット
オリジナルの RS/6000 システムと PowerPC 命令セットはのアーキテクチャです
Freescale MPC5xx、MPC6xx、MPC8xx マイクロプロセッサ、および IBM 4xx、6xx、および
後続のマイクロプロセッサ。

どちらのアーキテクチャも他方のサブセットではありません。 ただし、大きな共通サブセットがあります
両方でサポートされている命令の。 プロセッサーに MQ レジスターが含まれています。
POWER アーキテクチャをサポートします。

これらのオプションを使用して、プロセッサで使用可能な命令を指定します。
使用しています。 これらのオプションのデフォルト値は、GCCの構成時に決定されます。
の指定 -mcpu =cpu_type これらのオプションの指定を上書きします。 私達
を使用することをお勧めします -mcpu =cpu_type 上記のオプションではなく、オプション。

  -mpower オプションにより、GCC は、
POWER アーキテクチャーと MQ レジスターを使用します。 指定する -mpower2 含意する パワー &
また、GCC が POWER2 アーキテクチャーに存在する命令を生成できるようにします。
しかし、元の POWER アーキテクチャーではありません。

  -mpowerpc オプションにより、GCC は、
PowerPC アーキテクチャの 32 ビット サブセット。 指定する -mpowerpc-gpopt 含意する
-mpowerpc また、GCC がオプションの PowerPC アーキテクチャ命令を使用できるようにします。
浮動小数点平方根を含む汎用グループ。 指定する
-mpowerpc-gfxopt 含意する -mpowerpc また、GCC がオプションの PowerPC を使用できるようにします
浮動小数点選択を含む、グラフィックス グループのアーキテクチャ命令。

  -mmfcrf オプションを使用すると、GCCは条件レジスタフィールドからの移動を生成できます
POWER4プロセッサーおよびそれをサポートする他のプロセッサーに実装された命令
PowerPCV2.01アーキテクチャ。 The -mpopcntb オプションを使用すると、GCCでポップカウントを生成できます
POWER5に実装された倍精度FP相互推定命令
PowerPCV2.02アーキテクチャをサポートするプロセッサおよびその他のプロセッサ。 The
-mpopcntd オプションを使用すると、GCCはに実装されたpopcount命令を生成できます。
POWER7プロセッサーおよびPowerPCV2.06アーキテクチャーをサポートするその他のプロセッサー。
  -mfprnd オプションを使用すると、GCCはFPを整数に丸める命令を生成できます
POWER5+プロセッサおよびPowerPCをサポートするその他のプロセッサに実装されています
V2.03アーキテクチャ。 The -mcmpb オプションを使用すると、GCCで比較バイトを生成できます
POWER6プロセッサーおよびそれをサポートする他のプロセッサーに実装された命令
PowerPCV2.05アーキテクチャ。 The -mmfpgpr オプションにより、GCCはFP移動を生成できます
POWER6Xプロセッサに実装された汎用レジスタ命令との間
拡張PowerPCV2.05アーキテクチャをサポートする他のプロセッサ。 The -mhard-dfp
オプションを使用すると、GCCはに実装されているXNUMX進浮動小数点命令を生成できます。
一部のPOWERプロセッサ。

  -mpowerpc64 オプションを使用すると、GCCは追加の64ビット命令を生成できます。
完全なPowerPC64アーキテクチャにあり、GPRを64ビットのダブルワードとして扱います。
量。 GCCのデフォルトは -mno-powerpc64.

両方指定した場合 -無能 & -mno-powerpc、GCCはの命令のみを使用します
両方のアーキテクチャーの共通サブセットといくつかの特別な AIX 共通モード呼び出し、および
MQ レジスタを使用しません。 両方指定 -mpower & -mpowerpc GCC に許可する
いずれかのアーキテクチャの任意の命令を使用し、MQ レジスタを使用できるようにする。
Motorola MPC601 の場合はこれを指定します。

-mnew-ニーモニック
-モールドニーモニック
生成されたアセンブラー コードで使用するニーモニックを選択します。 と -mnew-ニーモニック,
GCC は、PowerPC アーキテクチャ用に定義されたアセンブラ ニーモニックを使用します。 と
-モールドニーモニック POWER アーキテクチャー用に定義されたアセンブラー・ニーモニックを使用します。
XNUMX つのアーキテクチャのみで定義された命令には、XNUMX つのニーモニックしかありません。 GCCはそれを使用します
これらのオプションのどれが指定されているかに関係なく、ニーモニックです。

GCC は、使用中のアーキテクチャに適したニーモニックをデフォルトに設定します。 指定する
-mcpu =cpu_type これらのオプションの値をオーバーライドすることがあります。 あなたが構築していない限り
クロスコンパイラ、通常はどちらも指定しないでください -mnew-ニーモニック or
-モールドニーモニック、代わりにデフォルトを受け入れる必要があります。

-mcpu =cpu_type
アーキテクチャ タイプ、レジスタの使用法、ニーモニックの選択、および命令のスケジューリングを設定する
マシンタイプのパラメータ cpu_type。 サポートされている値 cpu_type   401, 403,
405, 405fp, 440, 440fp, 464, 464fp, 476, 476fp, 505, 601, 602, 603, 603e, 604, 604e,
620, 630, 740, 7400, 7450, 750, 801, 821, 823, 860, 970, 8540, a2, e300c2, e300c3,
e500mc, e500mc64, ec603e, G3, G4, G5, タイタン, 電力, power2, power3, power4, power5,
power5 +, power6, パワー6x, power7, 一般的な, powerpc, パワーPC64, リオス, rivers1, rivers2, RSC,
& rs64.

-mcpu=共通 完全に一般的なプロセッサを選択します。 このオプションで生成されたコード
POWER または PowerPC プロセッサーで動作します。 GCC は、
両方のアーキテクチャの共通サブセットであり、MQ レジスタは使用しません。 GCC は
スケジューリング目的の汎用プロセッサ モデル。

-mcpu=パワー, -mcpu = power2, -mcpu = powerpc, -mcpu = powerpc64 一般的な POWER を指定し、
POWER2、純粋な 32 ビット PowerPC (つまり、MPC601 ではない)、および 64 ビット PowerPC アーキテクチャー
スケジューリング用に想定される適切な汎用プロセッサ モデルを使用したマシン タイプ
目的。

他のオプションは、特定のプロセッサを指定します。 それらのオプションの下で生成されたコード
そのプロセッサで最適に動作し、他のプロセッサではまったく動作しない可能性があります。

  -mcpu オプションは、次のオプションを自動的に有効または無効にします。

-マルティベック -mfprnd -mhard-float -mmfcrf -複数 -mnew-ニーモニック -mpopcntb
-mpopcntd -mpower -mpower2 -mpowerpc64 -mpowerpc-gpopt -mpowerpc-gfxopt
-msingle-float -mdouble-float -msimple-fpu -mstring -mmulhw -mdlmzb -mmfpgpr -mvsx

特定の CPU に設定される特定のオプションは、コンパイラのバージョンによって異なります。
どの設定がそのCPUに最適なコードを生成すると思われるかに応じて。 それはしません
必然的に実際のハードウェアの機能を反映します。 設定したい場合
特定の値に対する個別のオプション。 -mcpu オプション、
ような -mcpu = 970 -mno-altivec.

AIXでは、 -マルティベック & -mpowerpc64 オプションは、によって有効化または無効化されません -mcpu
AIXはこれらのオプションを完全にはサポートしていないため、現在のところオプションです。 してもいいです
それがあなたのでうまくいくと確信しているなら、それでもそれらを個別に有効または無効にします
環境。

-mtune =cpu_type
マシンタイプの命令スケジューリングパラメータを設定します cpu_type、ただし設定しない
アーキテクチャ タイプ、レジスタの使用法、またはニーモニックの選択など。 -mcpu =cpu_type
でしょう。 の同じ値 cpu_type に使用されます -ムチューン はどうかと言うと -mcpu。 両方ある場合
指定すると、生成されるコードはアーキテクチャ、レジスタ、およびニーモニック セットを使用します。
by -mcpu、ただし、によって設定されたスケジューリングパラメータ -ムチューン.

-mcmodel = small
小型モデル用のPowerPC64コードを生成します。目次は64kに制限されています。

-mcmodel = medium
中規模モデルのPowerPC64コードを生成します。目次およびその他の静的データがアップしている可能性があります
サイズは合計4Gになります。

-mcmodel = large
大型モデル用のPowerPC64コードを生成します。TOCのサイズは最大4Gです。 他の
データとコードは、64ビットのアドレス空間によってのみ制限されます。

-マルティベック
-mno-altivec
AltiVec命令を使用する(使用しない)コードを生成し、使用を有効にします
AltiVec命令セットへのより直接的なアクセスを可能にする組み込み関数の。
設定する必要がある場合もあります -mabi = altivec AltiVecABIで現在のABIを調整する
機能強化。

-mvrsave
-mno-vrsave
AltiVecコードを生成するときにVRSAVE命令を生成します。

-mgen-cell-マイクロコード
Cell マイクロコード命令の生成

-mwarn-cell-マイクロコード
Cell マイクロコード命令が発行されようとしているときに警告します。 セルの例
マイクロコード命令は可変シフトです。

-msecure-plt
ld と ld.so が実行可能ファイルと共有ライブラリをビルドできるようにするコードを生成します。
非 exec .plt および .got セクション。 これは PowerPC 32 ビット SYSV ABI オプションです。

-mbss-plt
ld.so が埋める BSS .plt セクションを使用するコードを生成し、.plt と
書き込みと実行の両方が可能な .got セクション。 これは PowerPC 32 ビット SYSV です。
ABI オプション。

-ミセル
-mno-isel
このスイッチは、ISEL命令の生成を有効または無効にします。

-ミセル=はい・いいえ
このスイッチは非推奨になりました。 使用する -ミセル & -mno-isel を代わりにお使いください。

-mspe
-mno-spe
このスイッチは、SPEsimd命令の生成を有効または無効にします。

-障害者
-mno-ペアリング
このスイッチは、PAIREDsimd命令の生成を有効または無効にします。

-mspe =はい・いいえ
このオプションは非推奨になりました。 使用する -mspe & -mno-spe を代わりにお使いください。

-mvsx
-mno-vsx
ベクトル/スカラー(VSX)命令を使用する(使用しない)コードを生成し、さらに
VSXへのより直接的なアクセスを可能にする組み込み関数の使用を有効にする
指図書。

-mfloat-gprs =はい/シングル/ダブル/いいえ
-mfloat-gprs
このスイッチは、での浮動小数点演算の生成を有効または無効にします。
それをサポートするアーキテクチャ用の汎用レジスタ。

議論 はい or 単精度浮動小数点の使用を可能にします
操作。

議論 単精度および倍精度浮動小数点の使用を可能にします
操作。

議論 いいえ 汎用レジスタの浮動小数点演算を無効にします。

このオプションは現在、MPC854xでのみ使用できます。

-m32
-m64
DarwinおよびSVR32ターゲットの64ビットまたは4ビット環境用のコードを生成します(
GNU / Linux)。 32ビット環境では、int、long、およびポインタが32ビットに設定されます。
PowerPCバリアントで実行されるコードを生成します。 64ビット環境はintをに設定します
32ビットおよびlongと64ビットへのポインタ、およびPowerPC64のコードを生成します。
-mpowerpc64.

-mfull-toc
-mno-fp-in-toc
-mno-sum-in-toc
-最小-toc
ごとに作成される目次(目次)の生成を変更します
実行可能ファイル。 The -mfull-toc オプションはデフォルトで選択されています。 その場合、GCC
一意の非自動変数参照ごとに少なくとも XNUMX つの TOC エントリを割り当てます
あなたのプログラムで。 GCC は、浮動小数点定数も TOC に配置します。 でも、
TOC で使用できるエントリは 16,384 のみです。

利用可能なものがオーバーフローしたことを示すリンカーエラーメッセージを受け取った場合
TOCスペース、で使用されるTOCスペースの量を減らすことができます -mno-fp-in-toc &
-mno-sum-in-toc オプション。 -mno-fp-in-toc GCCが浮動小数点を置くのを防ぎます
TOCおよび -mno-sum-in-toc GCCにコードを生成させて計算します
TOCに合計を入れる代わりに、実行時にアドレスと定数の合計。
これらのオプションの一方または両方を指定できます。 それぞれがGCCに非常に
TOCスペースを節約することを犠牲にして、少し遅くて大きなコード。

これらのオプションの両方を指定しても、目次のスペースが不足している場合は、
指定する -最小-toc 代わりは。 このオプションにより、GCCは次のTOCエントリをXNUMXつだけ作成します。
すべてのファイル。 このオプションを指定すると、GCC はより遅く、より遅いコードを生成します。
より大きくなりますが、TOC スペースをほとんど使用しません。 このオプションを使用することをお勧めします
実行頻度の低いコードを含むファイルのみ。

-maix64
-maix32
64ビットAIXABIと呼び出し規約を有効にします:64ビットポインター、64ビット「ロング」タイプ、および
それらをサポートするために必要なインフラストラクチャ。 指定する -maix64 含意する -mpowerpc64 &
-mpowerpc一方、 -maix32 64ビットABIを無効にし、 -mno-powerpc64。 GCC
デフォルトは -maix32.

-mxl-compat
-mno-xl-compat
AIXを使用する場合、IBMXLコンパイラーのセマンティクスにより厳密に準拠するコードを生成します-
互換性のあるABI。 浮動小数点引数をプロトタイプ化された関数に渡します。
引数FPRに加えて、スタックに保存領域(RSA)を登録します。 想定しないでください
128ビット長のdouble値の中で最も重要なdoubleは、次の場合に適切に丸められます。
値を比較し、doubleに変換します。 ロングダブルにはXLシンボル名を使用
サポートルーチン。

AIXの呼び出し規約は拡張されましたが、最初は文書化されていませんでした。
引数のアドレスをとる関数を呼び出すK&RCのあいまいなケース
宣言されたよりも少ない引数。 IBM XLコンパイラーは、浮動小数点引数にアクセスします。
サブルーチンがなしでコンパイルされる場合、スタックからRSAに適合しません
最適化。 常に浮動小数点引数をスタックに格納するのは
非効率的でほとんど必要ないため、このオプションはデフォルトでは有効になっておらず、
最適化せずにIBMXLコンパイラーによってコンパイルされたサブルーチンを呼び出すときに必要です。

-mpe
サポート IBM RS / 6000 SP 並列シミュレーションの設定 環境 (PE)。 使用するように作成されたアプリケーションをリンクする
アプリケーションを実行できるようにするための特別なスタートアップコードを伴うメッセージパッシング。 The
システムの標準的な場所にPEがインストールされている必要があります(/usr/lpp/ppe.poe/)、 または
スペック ファイルはでオーバーライドする必要があります -specs = 適切なを指定するオプション
ディレクトリの場所。 並列環境はスレッドをサポートしていないため、 -mpe
オプションと -pthread オプションに互換性がありません。

-悪性-自然
-悪性パワー
AIX、32ビットDarwin、および64ビットPowerPC GNU / Linuxでは、オプション -悪性-自然
浮動小数点doubleなどのより大きな型のABI定義の配置をオーバーライドします。
それらの自然なサイズベースの境界上。 オプション -悪性パワー GCCに次のように指示します
ABI指定のアライメントルールに従います。 GCCのデフォルトは標準の配置です
ABIで定義されています。

64ビットダーウィンでは、自然な配置がデフォルトであり、 -悪性パワー ではありません


-msoft-float
-mhard-float
浮動小数点レジスタセットを使用しない(使用する)コードを生成します。 ソフトウェア
浮動小数点エミュレーションを使用すると、 -msoft-float オプション、およびを渡す
リンク時のGCCへのオプション。

-msingle-float
-mdouble-float
単精度または倍精度浮動小数点演算のコードを生成します。
-mdouble-float 含意する -msingle-float.

-msimple-fpu
ハードウェア浮動小数点ユニットの sqrt および div 命令を生成しません。

-mfpu
浮動小数点ユニットのタイプを指定します。 有効な値は次のとおりです。 sp_lite (に相当します
-msingle-float -msimple-fpu)、 dp_lite (-mdouble-float -msimple-fpu と同等)、
sp_full (-msingle-float と同等)、および dp_full (-mdouble-float と同等)。

-mxilinx-fpu
ザイリンクスPPC405/440で浮動小数点ユニットの最適化を実行します。

-複数
-mno-複数
複数ワードのロード命令を使用する(使用しない)コードを生成し、
複数の単語の指示を保存します。 これらの命令はデフォルトで生成されます
POWERシステムであり、PowerPCシステムでは生成されません。 使用禁止 -複数 少し-
エンディアンPowerPCシステム、これらの命令はプロセッサが入っているときは機能しないため
リトルエンディアンモード。 例外は、これらを許可するPPC740とPPC750です。
リトルエンディアンモードの命令。

-mstring
-mno-string
文字列のロード命令とストアを使用する(使用しない)コードを生成します
複数のレジスタを保存し、小さなブロック移動を行うための文字列ワード命令。 これらは
命令はデフォルトでPOWERシステムで生成され、PowerPCでは生成されません
システム。 使用禁止 -mstring リトルエンディアンのPowerPCシステムでは、
プロセッサがリトルエンディアンモードの場合、命令は機能しません。 例外
リトルエンディアンモードでこれらの命令を許可するPPC740およびPPC750です。

-mupdate
-mno-アップデート
を更新するロードまたはストア命令を使用する(使用しない)コードを生成します
計算されたメモリ位置のアドレスへのベースレジスタ。 これらの指示
デフォルトで生成されます。 使用する場合 -mno-アップデート、間に小さなウィンドウがあります
スタックポインタが更新され、前のフレームのアドレスが
保存されます。これは、割り込みまたはシグナル間でスタックフレームをウォークするコードが
破損したデータを取得します。

-mavoid-indexed-addresses
-mno-avoid-indexed-addresses
インデックス付きのロードまたはストアの使用を回避しようとする(回避しない)コードを生成する
指示。 これらの命令は、Power6プロセッサーでパフォーマンスの低下を招く可能性があります
16Mを超える大きなアレイをステップスルーする場合など、特定の状況で
境界。 このオプションは、Power6 を対象とする場合はデフォルトで有効になり、無効になります
さもないと。

-混乱-狂った
-mno-fusion-madd
浮動小数点の積和を使用する(使用しない)コードを生成する
指示。 これらの命令は、ハードウェア浮動小数点の場合、デフォルトで生成されます
使用されている。 マシンに依存 -混乱-狂った オプションがマシンにマップされるようになりました-
独立しました -ffp-contract = fast オプション、および -mno-fusion-madd にマッピングされています
-ffp-contract = off.

-mmulhw
-mno-mulhw
ハーフワードmultiplyおよびmultiply-accumulateを使用する(使用しない)コードを生成します
IBM 405、440、464、および476プロセッサーに関する指示。 これらの指示は
これらのプロセッサを対象とする場合、デフォルトで生成されます。

-mdlmzb
-mno-dlmzb
文字列検索を使用する(使用しない)コードを生成する dlmzb IBMに関する指示
405、440、464、および476プロセッサ。 この命令は、デフォルトで次の場合に生成されます。
それらのプロセッサを対象としています。

-mno-bit-align
-mbit-align
System V.4および組み込みPowerPCシステムでは、構造体と結合を強制しません(しません)
ビットフィールドの基本タイプにアラインされるビットフィールドが含まれています。

たとえば、デフォルトでは、8つの「符号なし」ビットフィールドのみを含む構造体です。
長さ1は4バイトの境界に揃えられ、サイズは4バイトです。 を使用して
-mno-bit-align、構造体は1バイトの境界に揃えられ、サイズは1バイトです。

-mno-strict-align
-mstrict-align
System V.4および組み込みPowerPCシステムでは、アライメントされていないメモリを想定していません(しません)
参照はシステムによって処理されます。

-m再配置可能
-mno-再配置可能
静的実行可能ファイルをに再配置できるようにする(許可しない)コードを生成します
実行時に異なるアドレス。 シンプルな組み込みPowerPCシステムローダーは
「.got2」の内容全体と「.fixup」にリストされている4バイトの場所を再配置します
セクション、このオプションによって生成された32ビットアドレスのテーブル。 これが機能するためには、すべて
一緒にリンクされたオブジェクトは、でコンパイルする必要があります -m再配置可能 or -mrelocatable-lib.
-m再配置可能 コードはスタックを8バイト境界に揃えます。

-mrelocatable-lib
-mno-再配置可能ライブラリ
いいね -m再配置可能, -mrelocatable-lib 静的を許可するために「.fixup」セクションを生成します
実行可能ファイルは実行時に再配置されますが、 -mrelocatable-lib は使用しません
の小さいスタックアライメント -m再配置可能。 でコンパイルされたオブジェクト -mrelocatable-lib かもしれません
との任意の組み合わせでコンパイルされたオブジェクトとリンクする -m再配置可能 オプション。

-mno-toc
-mtoc
System V.4および組み込みPowerPCシステムでは、レジスタ2に次のものが含まれているとは想定していません(しません)。
プログラムで使用されるアドレスを指すグローバル領域へのポインタ。

-少し
-mlittle-エンディアン
System V.4および組み込みPowerPCシステムでは、プロセッサのコードをほとんどコンパイルしません。
エンディアンモード。 The -mlittle-エンディアン オプションはと同じです -少し.

-mbig
-mbig-エンディアン
System V.4および組み込みPowerPCシステムでは、プロセッサのコードを大規模にコンパイルします。
エンディアンモード。 The -mbig-エンディアン オプションはと同じです -mbig.

-mdynamic-no-pic
DarwinおよびMacOSXシステムでは、再配置できないようにコードをコンパイルしますが、
その外部参照は再配置可能です。 結果のコードは
アプリケーションですが、共有ライブラリではありません。

-msingle-pic-base
PICアドレス指定に使用されるレジスタを、ロードするのではなく、読み取り専用として扱います。
各関数のプロローグ。 ランタイムシステムはこれを初期化する責任があります
実行を開始する前に、適切な値で登録してください。

-mprioritize-restricted-insns =優先順位
このオプションは、ディスパッチスロット制限に割り当てられる優先度を制御します
XNUMX番目のスケジューリングパス中の命令。 議論 優先順位 値を取る
0/1/2 割り当てる いいえ/最高/XNUMX番目に高い ディスパッチスロット制限の優先度
指示に従ってください。

-msched-costly-dep =依存関係タイプ
このオプションは、ターゲットがどの依存関係にコストがかかると見なすかを制御します。
命令スケジューリング。 議論 依存関係タイプ 次のいずれかを取ります
値: いいえ: 依存関係がないことはコストがかかります。 : すべての依存関係にはコストがかかります。
true_store_to_load: ストアからロードへの真の依存はコストがかかります。 ロードするストア: どれか
ストアからロードへの依存はコストがかかります。 : レイテンシ >= の依存関係
費用がかかります。

-minsert-sched-nops =スキーム
このオプションは、XNUMX 番目に使用される nop 挿入スキームを制御します。
スケジュール パス。 引数 スキーム 次のいずれかの値を取ります。 いいえ:しない
ノップを挿入します。 パッド: 空きの問題スロットがあるディスパッチ グループを nop で埋めます。
スケジューラのグループ化に従って。 再グループ化_exact: nops を挿入してコストのかかる強制を行います
従属インを別のグループに分けます。 強制するために必要な数の nops を正確に挿入します
推定されたプロセッサのグループ化に従って、新しいグループへの insn。 :挿入
nops は、費用のかかる依存する ins を別のグループに強制します。 入れる にノープ
インを新しいグループに強制します。

-mcall-sysv
System V.4および組み込みPowerPCシステムでは、呼び出し規約を使用してコードをコンパイルします。
System V Application Binary Interface、PowerPC の 1995 年 XNUMX 月のドラフトに準拠
プロセッササプリメント。 を使用してGCCを構成しない限り、これがデフォルトです。
powerpc-*-eabiaix.

-mcall-sysv-eabi
-mcall-eabi
両方を指定してください -mcall-sysv & -めあび オプション。

-mcall-sysv-noeabi
両方を指定してください -mcall-sysv & -mno-eabi オプション。

-mcall-aixdesc
System V.4および組み込みPowerPCシステムでは、AIXオペレーティングシステムのコードをコンパイルします。

-mcall-linux
System V.4および組み込みPowerPCシステムでは、LinuxベースのGNU用のコードをコンパイルします
システム。

-mcall-freebsd
System V.4および組み込みPowerPCシステムでは、FreeBSDオペレーティング用のコードをコンパイルします
システム。

-mcall-netbsd
System V.4および組み込みPowerPCシステムでは、NetBSDオペレーティング用のコードをコンパイルします
システム。

-mcall-openbsd
System V.4および組み込みPowerPCシステムでは、OpenBSDオペレーティング用のコードをコンパイルします
システム。

-maix-struct-return
メモリ内のすべての構造体を返します(AIX ABIで指定されているとおり)。

-msvr4-struct-return
レジスターで8バイト未満の構造体を返します(SVR4 ABIで指定)。

-mabi =アビタイプ
現在のABIを特定の拡張機能で拡張するか、そのような拡張機能を削除します。 有効
値は アルティベック, ノーアルティベック, SPE, ノースピード, ibmロングダブル, ieeeロングダブル.

-mabi = spe
SPEABI拡張機能を使用して現在のABIを拡張します。 これはデフォルトのABIを変更しません。
代わりに、SPEABI拡張機能を現在のABIに追加します。

-mabi = no-spe
現在の ABI の Booke SPE ABI 拡張機能を無効にします。

-mabi = ibmlongdouble
現在のABIを変更して、IBM拡張精度longdoubleを使用します。 これはPowerPCです
32ビットSYSVABIオプション。

-mabi = ieeelongdouble
現在のABIを変更して、IEEE拡張精度longdoubleを使用します。 これはPowerPCです
32ビットLinuxABIオプション。

-mプロトタイプ
-mno-プロトタイプ
System V.4および組み込みPowerPCシステムでは、可変引数へのすべての呼び出しが想定されています
関数は適切にプロトタイプ化されています。 それ以外の場合、コンパイラは命令を挿入する必要があります
条件コード レジスタのビット 6 を設定またはクリアするためのすべての非プロトタイプ呼び出しの前
(CR) 浮動小数点値が浮動小数点で渡されたかどうかを示す
関数が可変引数を取る場合に備えて登録します。 と -mプロトタイプ、呼び出しのみ
プロトタイプ化された変数引数関数は、ビットを設定またはクリアします。

-msim
組み込みPowerPCシステムでは、起動モジュールが呼び出されると想定します sim-crt0.o &
標準Cライブラリは libsim.a & libc.a。 これはのデフォルトです
powerpc-*-eabisim 構成。

-mmvme
組み込みPowerPCシステムでは、起動モジュールが呼び出されると想定します crt0.o
標準Cライブラリは libmvme.a & libc.a.

-マッド
組み込みPowerPCシステムでは、起動モジュールが呼び出されると想定します crt0.o
標準Cライブラリは libads.a & libc.a.

-ミイエローナイフ
組み込みPowerPCシステムでは、起動モジュールが呼び出されると想定します crt0.o
標準Cライブラリは libyk.a & libc.a.

-mvxworks
System V.4および組み込みPowerPCシステムでは、コンパイルすることを指定します。
VxWorksシステム。

-メンブ
組み込み PowerPC システムでは、 PPC_EMB を示す ELF フラグ ヘッダーのビット
それ イービ 拡張再配置が使用されます。

-めあび
-mno-eabi
System V.4および組み込みPowerPCシステムでは、組み込みに準拠していません(準拠していません)。
System V.4 への一連の変更である Applications Binary Interface (eabi)
仕様。 選択中 -めあび スタックが8バイトに整列されていることを意味します
境界では、「main」から関数「__eabi」を呼び出してeabi環境を設定し、
-msdata オプションは、「r2」と「r13」の両方を使用して、XNUMXつの別々の小さなデータを指すことができます
エリア。 選択 -mno-eabi スタックが 16 バイト境界にアラインされていることを意味します。
「main」から初期化関数を呼び出さず、 -msdata オプションはのみ使用します
「r13」は、単一の小さなデータ領域を指します。 The -めあび 次の場合、オプションはデフォルトでオンになっています
のいずれかを使用して構成されたGCC powerpc *-*-eabi * オプション。

-msdata = eabi
System V.4および組み込みPowerPCシステムでは、初期化された小さな「const」をグローバルに配置し、
の静的データ .sdata2 レジスタ「r2」が指すセクション。 小さく入れる
初期化された非「const」グローバルおよび静的データ .sdata とがった部分
レジスタ「r13」で初期化されていない小さなグローバルおよび静的データを .sbss
に隣接するセクション .sdata セクション。 NS -msdata = eabi オプションがある
と互換性がありません -m再配置可能 オプション。 ザ· -msdata = eabi オプションはまた設定します
-メンブ オプションを選択します。

-msdata = sysv
System V.4および組み込みPowerPCシステムでは、小さなグローバルデータと静的データを
.sdata レジスタ「r13」が指すセクション。 初期化されていない小さなグローバルを配置
および静的データ .sbss に隣接するセクション .sdata セクション。 NS
-msdata = sysv オプションはと互換性がありません -m再配置可能 オプションを選択します。

-msdata = default
-msdata
System V.4および組み込みPowerPCシステムの場合、 -めあび 使用されている場合は、同じコードをコンパイルします
as -msdata = eabi、それ以外の場合は、と同じコードをコンパイルします -msdata = sysv.

-msdata = data
System V.4 および組み込み PowerPC システムでは、小さなグローバル データを .sdata
セクション。 小さな初期化されていないグローバル データを .sbss セクション。 使用禁止
ただし、小さなデータをアドレス指定するには「r13」を登録します。 これは、デフォルトの動作です。
他の -msdata オプションが使用されます。

-msdata = none
-mno-sdata
組み込み PowerPC システムでは、初期化されたすべてのグローバル データと静的データを .data
セクション内のすべての初期化されていないデータ .bss のセクションから無料でダウンロードできます。

-mblock-move-inline-limit =NUM
または以下のすべてのブロック移動(「memcpy」の呼び出しや構造体のコピーなど)をインライン化する
に等しい NUM バイト。 の最小値 NUM 32ビットターゲットでは32バイト、64
64ビットターゲットのバイト。 デフォルト値はターゲット固有です。

-G NUM
組み込みPowerPCシステムでは、グローバルおよび静的アイテムを以下に配置します NUM
通常のデータまたは bss セクションではなく、スモール データまたは bss セクションにバイトを挿入します。
デフォルトでは、 NUM は8です。 -G NUM スイッチもリンカに渡されます。 すべてのモジュール
同じでコンパイルする必要があります -G NUM の値です。

-mregnames
-mno-regnames
System V.4および組み込みPowerPCシステムでは、レジスタ名を発行します(発行しません)。
シンボリック形式を使用したアセンブリ言語出力。

-mlongcall
-mno-ロングコール
デフォルトでは、すべての通話が遠く離れていると想定されているため、通話が長くなると費用が高くなります。
シーケンスが必要です。 これは、32 メガバイトを超える通話に必要です。
(33,554,432 バイト) 現在の場所から。 次の場合、ショート コールが生成されます。
コンパイラーは、呼び出しがそれほど遠くないことを知っています。 この設定は次のように上書きできます
「shortcall」関数属性、または「#pragma ロングコール(0)」

一部のリンカーは、範囲外の呼び出しを検出し、グルーコードを生成することができます
はえ。 これらのシステムでは、長い呼び出しは不要であり、より遅いコードを生成します。 として
この記事の執筆時点では、PowerPC / 64用のGNUリンカーと同様に、AIXリンカーがこれを実行できます。 これ
この機能を32ビットPowerPCシステムのGNUリンカーにも追加する予定です。

Darwin/PPC システムでは、"#pragma longcall" は "jbsr callee, L42" を生成します。
「枝島」(グルーコード)。 XNUMX つのターゲット アドレスは、呼び出し先と
「枝島」。 Darwin/PPC リンカは最初のアドレスを優先し、
PPC の "bl" 命令が呼び出し先に直接到達する場合は "bl callee"。 そうでなければ、
リンカーは、「ブランチ アイランド」を呼び出すために「bl L42」を生成します。 「枝島」は
呼び出し関数の本体に追加されます。 の完全な 32 ビット アドレスを計算します。
呼び出し先にジャンプします。

Mach-O(Darwin)システムでは、このオプションはコンパイラーが
すべての直接呼び出し、およびダーウィンリンカーはそれを使用するか破棄するかを決定します。

将来的には、リンカが
接着剤を生成することが知られています。

-mtls-マーカー
-mno-tls-マーカー
関数を指定する再配置で「__tls_get_addr」への呼び出しをマーク(マークしない)
口論。 再配置により、ld は関数呼び出しを引数に確実に関連付けることができます
TLS 最適化のセットアップ手順。これにより、gcc がより適切にスケジュールできるようになります。
シーケンス。

-pthread
マルチスレッドのサポートを追加します pthread 図書館。 このオプションは、フラグを設定します
プリプロセッサとリンカの両方。

-mレシピ
-mno-レシピ
このオプションは、GCC が逆数推定値と逆数平方根を使用できるようにします。
追加のニュートン ラフソン ステップを使用して命令を推定し、精度を高めます
浮動小数点引数に対して除算または平方根と除算を行う代わりに。 君は
を使用する必要があります -ffast-数学 使用時のオプション -mレシピ (または少なくとも
-funsafe-数学の最適化, -有限数学のみ, -freciprocal-数学 &
-fno-トラップ-数学)。 シーケンスのスループットは一般的に
非可逆命令のスループットよりも高い精度、
シーケンスは、最大 2 ulp 減らすことができます (つまり、1.0 の逆数は 0.99999994 に等しい)。
逆平方根の場合。

-mrecip =オプト
このオプションを使用すると、どの逆数推定命令を使用できるかを制御できます。 オプト
オプションのカンマ区切りのリストで、先頭に「!」を付けることができます。 を反転します
オプション: "all": すべての見積もり指示を有効にする、"default": デフォルトを有効にする
指示、同等 -mレシピ、「なし」: すべての見積もり指示を無効にします。
に相当 -mno-レシピ; "div": 逆近似命令を有効にします
単精度と倍精度の両方。 "divf": 単精度逆数を有効にします
近似指示; "divd": 倍精度の逆数を有効にします
近似指示; "rsqrt": 逆数平方根近似を有効にします
単精度と倍精度の両方の命令。 "rsqrtf": シングルを有効にします
精度逆数平方根近似命令; "rsqrtd": を有効にします
倍精度の逆平方根近似命令。

たとえば、 -mrecip = all、!rsqrtd 相互推定のすべてを有効にします
「FRSQRTE」、「XSRSQRTEDP」、および「XVRSQRTEDP」命令を除く命令
倍精度の逆数平方根計算を処理します。

-mrecip-精度
-mno-recipe-precision
相互推定命令がより高いものを提供すると仮定します(仮定しないでください)-
PowerPCABIで義務付けられているよりも正確な見積もり。 選択 -mcpu = power6 or
-mcpu = power7 自動的に選択 -mrecip-精度. 倍精度平方
ルート推定命令は、低精度マシンではデフォルトで生成されません。
XNUMX つのステップの後に収束する推定値を提供しないためです。

-mveclibabi =type
外部ライブラリを使用して組み込み関数をベクトル化するために使用するABIタイプを指定します。
現在サポートされている唯一のタイプは「mass」です。これは、IBM の
を使用して組み込み関数をベクトル化するための数学加速サブシステム (MASS) ライブラリ
外部ライブラリ。 GCC は現在、「acosd2」、「acosf4」、「acoshd2」、
「acoshf4」、「asind2」、「asinf4」、「asinhd2」、「asinhf4」、「atan2d2」、「atan2f4」、「atand2」、
「atanf4」、「atanhd2」、「atanhf4」、「cbrtd2」、「cbrtf4」、「cosd2」、「cosf4」、「coshd2」、
「coshf4」、「erfcd2」、「erfcf4」、「erfd2」、「erff4」、「exp2d2」、「exp2f4」、「expd2」、「expf4」、
"expm1d2"、"expm1f4"、"hypotd2"、"hypotf4"、"lgammad2"、"lgammaf4"、"log10d2"、
"log10f4"、"log1pd2"、"log1pf4"、"log2d2"、"log2f4"、"logd2"、"logf4"、"powd2"、
「powf4」、「sind2」、「sinf4」、「sinhd2」、「sinhf4」、「sqrtd2」、「sqrtf4」、「tand2」、「tanf4」、
power2 のコードを生成する場合は、「tanhd4」および「tanhf7」。 両方 -ftree-ベクトル化 &
-funsafe-数学の最適化 有効にする必要があります。 MASS ライブラリは、
リンク時に指定されます。

-mfriz
-mno-フリズ
「friz」命令を生成する(生成しない)場合 -funsafe-数学の最適化
オプションは、浮動小数点値の64ビット整数への丸めを最適化するために使用されます。
浮動小数点に戻ります。 「friz」命令は、次の場合に同じ値を返しません。
浮動小数点数が大きすぎて整数に収まりません。

-mpointers-to-nested-functions
-mno-ネストされた関数へのポインタ
スタティック チェーン レジスタをロードするコードを生成します (生成しません) (r11) いつ
関数ポインターが存在するAIXおよび64ビットLinuxシステム上のポインターを介した呼び出し
関数アドレス、ロードされるTOC値を与える3ワード記述子を指します
登録 r2、およびレジスタにロードされる静的チェーン値 r11を選択します。
-mpointers-to-nested-functions はデフォルトでオンになっています。 通話できなくなります
ネストされた関数へのポインター、または他の言語でコンパイルされた関数へのポインター
を使用する場合は、スタティック チェーンを使用します。 -mno-ネストされた関数へのポインタ.

-msave-toc-間接
-mno-save-toc-indirect
TOC値を予約済みスタックの場所に保存するコードを生成(生成しない)
関数がAIXおよび64ビット上のポインターを介して呼び出す場合は、関数プロローグで
Linuxシステム。 TOC値がプロローグに保存されていない場合は、直前に保存されます
ポインタを介した呼び出し。 The -mno-save-toc-indirect オプションがデフォルトです。

RX オプション

これらのコマンドラインオプションは、RXターゲットに対して定義されています。

-m64ビットダブル
-m32ビットダブル
「double」データ型を64ビット(-m64ビットダブル)または32ビット(-m32ビットダブル)
サイズで。 デフォルトは -m32ビットダブル. Note RX浮動小数点ハードウェアのみが機能します
32ビット値の場合、これがデフォルトが -m32ビットダブル.

-fpu
-ノフプ
有効にする(-fpu)または無効にします(-ノフプ)RX浮動小数点ハードウェアの使用。 The
デフォルトでは、 RX600 シリーズおよび無効化 RX200 シリーズ。

浮動小数点命令は、32 ビット浮動小数点値に対してのみ生成されます。
ただし、 -m64ビットダブル オプションが使用されている場合、FPU ハードウェアは使用できません。
ダブルスで使用。

Note Status -fpu オプションが有効になり、 -funsafe-数学の最適化 も有効になっています
自動的。 これは、RXFPU命令自体が安全ではないためです。

-mcpu =
ターゲットとするRXCPUのタイプを選択します。 現在、XNUMXつのタイプがサポートされています。
ジェネリック RX600 & RX200 シリーズハードウェアと特定の RX610 CPU。 デフォルトは
RX600.

唯一の違いは RX600 & RX610 つまり RX610 をサポートしていません
「MVTIPL」命令。

  RX200 シリーズにはハードウェア浮動小数点ユニットなどがありません -ノフプ 有効になっています
このタイプが選択されている場合、デフォルトで。

-mbig-エンディアン-データ
-mlittle-エンディアン-データ
データ(コードではない)をビッグエンディアン形式で保存します。 デフォルトは
-mlittle-エンディアン-データ、つまり、リトルエンディアン形式でデータを保存します。

-msmall-data-limit =N
配置できるグローバル変数と静的変数の最大サイズをバイト単位で指定します
小さなデータ領域に。 小さなデータ領域を使用すると、より小さく、より速くなる可能性があります
コードですが、領域のサイズは制限されており、それを確認するのはプログラマー次第です。
エリアはオーバーフローしません。 また、小さなデータ領域が使用される場合、RXのXNUMXつ
レジスタ(通常は「r13」)は、この領域を指すために予約されているため、
コンパイラで使用できるようになりました。 これにより、速度が低下したり、大きくなったりする可能性があります
以前は予約済みレジスタに保持されていた可能性のある変数が現在は
スタックにプッシュされます。

一般的な変数(初期化されていない変数)と定数は
のその他のセクションに割り当てられているため、小さなデータ領域には配置されません。
出力実行可能ファイル。

デフォルト値はゼロで、この機能は無効になっています。 この機能はそうではないことに注意してください
より高い最適化レベルでデフォルトで有効になっています(-O2 など)のために
レジスターを予約することによる潜在的に有害な影響。 それはプログラマー次第です
この機能が彼らのプログラムに有益であるかどうかを実験して発見すること。 見る
の説明 -mpid 実際のレジスタがどのように
小さなデータ領域のポインタを押したままにします。

-msim
-mno-sim
シミュレーター ランタイムを使用します。 デフォルトでは、libgloss ボード固有のランタイムが使用されます。

-mas100-構文
-mno-as100-構文
アセンブラ出力を生成するときは、ルネサスのAS100と互換性のある構文を使用してください
アセンブラ。 この構文は GAS アセンブラでも処理できますが、
そのため、生成はデフォルトのオプションではありません。

-mmax-constant-size =N
でオペランドとして使用できる定数の最大サイズをバイト単位で指定します
RX命令。 RX命令セットでは、最大4の定数を使用できますが
命令で使用される長さがバイトの場合、値が長いほど長いことになります
命令。 したがって、状況によっては、サイズを制限することが有益な場合があります。
命令で使用される定数。 大きすぎる定数は代わりに
定数プールに配置され、レジスタの間接参照を介して参照されます。

N 0から4の間で指定できます。0(デフォルト)または4の値は、次のことを意味します。
任意のサイズの定数を使用できます。

-mリラックス
リンカー緩和を有効にします。 リンカー緩和は、リンカーが
さまざまなプログラムの短いバージョンを見つけて、プログラムのサイズを縮小しようとする
指示。 デフォルトでは無効です。

-mint-register =N
高速割り込みハンドラ関数用に予約するレジスタの数を指定します。 The
N 0 ~ 4 の値を指定できます。値 1 は、レジスタ "r13" が
高速割り込みハンドラ専用に予約されています。 2リザーブの値
「r13」と「r12」。 値 3 は「r13」、「r12」、および「r11」を予約し、値 4 は予約します。
「r13」から「r10」までを予約します。 デフォルトの値 0 では、予約はありません。
レジスター。

-msave-acc-in-interrupts
割り込みハンドラ関数がアキュムレータレジスタを保持する必要があることを指定します。
これは、通常のコードがアキュムレータレジスタを使用する場合にのみ必要です。
64ビットの乗算を実行するためです。 デフォルトでは、アキュムレータは無視されます
これにより、割り込みハンドラが高速になります。

-mpid
-mno-pid
位置に依存しないデータの生成を有効にします。 有効にすると、
定数データは、レジスタに保持されているベースアドレスからのオフセットを介して行われます。 この
実行時に定数データの場所を特定する必要がなく、
再配置される実行可能ファイル。これは、タイトな組み込みアプリケーションにとっての利点です。
メモリの制約。 変更可能なデータは、このオプションの影響を受けません。

この機能を使用すると、定数データ用にレジスタ(通常は「r13」)が予約されることに注意してください。
ベースアドレス。 これにより、特に複雑な場合に、コードが遅くなったり大きくなったりする可能性があります
機能します。

一定のデータベースアドレスを保持するために選択される実際のレジスタは、
  -msmall-データ制限 および/または -ミント登録 コマンドラインオプションが有効になります。
レジスタ「r13」から始まり、下に向かって、レジスタが最初に割り当てられます。
の要件を満たすために -ミント登録をタップし、その後、 -mpid そして最後に
-msmall-データ制限。 したがって、スモールデータエリアレジスタが「r8」である可能性があります。
両方の場合 -mint-register = 4 & -mpid コマンドラインで指定します。

デフォルトでは、この機能は有効になっていません。 デフォルトは、 -mno-pid
コマンドラインオプション。

注: 一般的なGCCコマンドラインオプション -修正済み-REG RXにとって特別な意味があります
「割り込み」関数属性とともに使用する場合のポート。 この属性は、
高速割り込みを処理するための関数。 GCC は、
「r10」、「r11」、「r12」および/または「r13」を登録し、
対応するレジスタは、 -修正済み-REG or -ミント登録
コマンドラインオプション。

S / 390 & zシリーズ オプション

これらは、 -m S/390およびzSeriesアーキテクチャー用に定義されたオプション。

-mhard-float
-msoft-float
浮動小数点命令と浮動小数点レジスタを使用する(使用しない)-
ポイント操作。 いつ -msoft-float が指定されている場合、 libgcc.a 使用されます
浮動小数点演算を実行します。 いつ -mhard-float 指定されている場合、コンパイラ
IEEE浮動小数点命令を生成します。 これがデフォルトです。

-mhard-dfp
-mno-ハード-dfp
XNUMX進数用のハードウェアXNUMX進数浮動小数点命令を使用する(使用しない)-
浮動小数点演算。 いつ -mno-ハード-dfp が指定されている場合、 libgcc.a
XNUMX 進浮動小数点演算を実行するために使用されます。 いつ -mhard-dfp is
指定すると、コンパイラは XNUMX 進浮動小数点ハードウェア命令を生成します。 この
のデフォルトです -march = z9-ec 以上です。

-mlong-double-64
-mlong-double-128
これらのスイッチは、「ロングダブル」タイプのサイズを制御します。 64ビットのサイズは
「double」タイプと同等の「longdouble」タイプ。 これがデフォルトです。

-mbackchain
-mno-バックチェーン
呼び出し元のフレームのアドレスをバックチェーンポインタとしてに保存します(保存しません)。
呼び出し先のスタックフレーム。 次のようなツールを使用してデバッグできるようにするには、バックチェーンが必要になる場合があります。
DWARF-2 コール フレーム情報がわかりません。 いつ -mno-packed-stack である
つまり、バックチェーンポインタはスタックフレームの一番下に格納されます。 いつ
-mpacked-スタック が有効である場合、バックチェーンはの最上位の単語に配置されます
96/160バイトのレジスタ保存領域。

一般的に、 -mbackchain でコンパイルされたコードとの呼び出し互換性があります
-MMOバックチェーン; ただし、デバッグ目的でバックチェーンを使用するには、通常、
バイナリ全体がで構築されていること -mbackchain。 の組み合わせに注意してください
-mbackchain, -mpacked-スタック & -mhard-float サポートされていません。 を構築するために
Linuxカーネルの使用 -msoft-float.

デフォルトでは、バックチェーンを維持しません。

-mpacked-スタック
-mno-packed-stack
パックスタックレイアウトを使用します(使用しないでください)。 いつ -mno-packed-stack 指定されている場合、
コンパイラーは、96/160バイトのレジスター保管域のすべてのフィールドをそれらの
デフォルトの目的; 未使用のフィールドはまだスタックスペースを占有します。 いつ -mpacked-スタック is
指定された場合、レジスタ保存スロットはレジスタ保存の上部に密集しています。
範囲; 未使用スペースは他の目的に再利用されるため、より効率的に使用できます。
使用可能なスタックスペース。 ただし、 -mbackchain 最上位も有効です
保存領域のワードは、バックチェーンと差出人住所を格納するために常に使用されます
レジスタは常にバックチェーンのXNUMXワード下に保存されます。

スタックフレームバックチェーンが使用されていない限り、 -mpacked-スタック
で生成されたコードとの呼び出し互換性があります -mno-packed-stack。 一部の非FSFに注意してください
スタックフレームを使用するS/2.95またはzSeriesで生成されたコード用のGCC390のリリース
デバッグ目的だけでなく、実行時のバックチェーン。 そのようなコードは呼び出しではありません-
でコンパイルされたコードと互換性があります -mpacked-スタック。 また、の組み合わせに注意してください
-mbackchain, -mpacked-スタック & -mhard-float サポートされていません。 を構築するために
Linuxカーネルの使用 -msoft-float.

デフォルトでは、パックスタックレイアウトは使用されません。

-msmall-exec
-mno-small-exec
サブルーチンを実行するための「bras」命令を使用してコードを生成する(または生成しない)
呼び出します。 これは、実行可能ファイルの合計サイズが64kを超えない場合にのみ確実に機能します。
デフォルトでは、代わりに「basr」命令を使用しますが、これはありません
制限。

-m64
-m31
日時 -m31 が指定されている場合は、GNU / Linux for S /390ABIに準拠したコードを生成します。 いつ
-m64 が指定されている場合は、GNU / Linux forzSeriesABIに準拠したコードを生成します。 これ
特にGCCが64ビット命令を生成できるようにします。 のために s390 ターゲット、
デフォルトは -m31、一方、 s390x ターゲットのデフォルトは -m64.

-mzach
-メサ
日時 -mzach が指定されている場合は、で利用可能な手順を使用してコードを生成します
z/Architecture。 いつ -メサ が指定されている場合は、命令を使用してコードを生成します
ESA/390で利用できます。 ご了承ください -メサ では不可能です -m64。 生成するとき
GNU / Linux for S / 390 ABIに準拠したコード、デフォルトは -メサ。 生成するとき
GNU / Linux for zSeries ABIに準拠したコード、デフォルトは -mzach.

-mmvcle
-mno-mvcle
「mvcle」命令を使用してブロックを実行するコードを生成する(または生成しない)
移動します。 いつ -mno-mvcle が指定されている場合は、代わりに「mvc」ループを使用してください。 これがデフォルトです
サイズを最適化しない限り。

-mdebug
-mno-デバッグ
コンパイル時に追加のデバッグ情報を印刷します(または印刷しません)。 デフォルトは
デバッグ情報を出力しません。

-XNUMX月=CPUタイプ
で実行されるコードを生成する CPUタイプ、これは、
特定のプロセッサタイプ。 の可能な値 CPUタイプ   g5, g6, z900, z990, z9-109,
z9-ec & z10. で利用可能な手順を使用してコードを生成する場合
z/アーキテクチャ、デフォルトは -march = z900。 それ以外の場合、デフォルトは -march = g5.

-mtune =CPUタイプ
に調整する CPUタイプ ABIを除き、生成されたコードに該当するすべてのもの
および利用可能な命令のセット。 のリスト CPUタイプ 値はと同じです
-行進。 デフォルトはに使用される値です -行進.

-mtpf-トレース
-mno-tpf-トレース
トレースルーチンにTPFOS固有のブランチを追加する(追加しない)コードを生成する
オペレーティングシステムで。 このオプションは、コンパイルする場合でも、デフォルトでオフになっています。
TPFOS。

-混乱-狂った
-mno-fusion-madd
浮動小数点の積和を使用する(使用しない)コードを生成する
指示。 これらの命令は、ハードウェア浮動小数点の場合、デフォルトで生成されます
使用されている。

-mwarn-framesize =フレームサイズ
現在の関数が指定されたフレームサイズを超えた場合に警告を発します。 これは
コンパイル時のチェックは、プログラムの実行時に実際の問題である必要はありません。 これ
スタックオーバーフローを引き起こす可能性が最も高い関数を特定することを目的としています。 です
Linuxカーネルなど、スタックサイズが制限されている環境で使用すると便利です。

-mwarn-dynamicstack
関数が alloca を呼び出したり、動的にサイズ変更された配列を使用したりすると、警告が発生します。 これは
一般に、スタックサイズが限られている場合は悪い考えです。

-mstack-guard =スタックガード
-mstack-size =スタックサイズ
これらのオプションが指定されている場合、s390 バックエンドは追加の命令を
スタックサイズが スタックガード 上のバイト
  スタックサイズ (s390 のスタックは下向きに成長することに注意してください)。 もし スタックガード
オプションは省略されますコンパイルされたフレームサイズより2大きい最小の累乗
関数が選択されています。 これらのオプションは、スタックのデバッグを支援するために使用することを目的としています
オーバーフローの問題。 追加で発行されたコードは、わずかなオーバーヘッドと
したがって、パフォーマンスを向上させることなく、システムのような本番環境で使用することもできます
劣化。 与えられた値は2の正確な累乗でなければなりません スタックサイズ である必要があります
越える スタックガード 64kを超えずに。 効率的にするために余分な
コードは、スタックが値に揃えられたアドレスから始まると想定します
によって与えられた スタックサイズを選択します。 スタックガード オプションは、と組み合わせてのみ使用できます
スタックサイズ.

スコア オプション

これらのオプションは、スコアの実装に対して定義されています。

-meb
ビッグエンディアンモードのコードをコンパイルします。 これがデフォルトです。

-メル
リトルエンディアンモードのコードをコンパイルします。

-mnhwloop
bcnz 命令の生成を無効にします。

-マルス
アライメントされていないロードおよびストア命令の生成を有効にします。

-mmac
積和命令の使用を有効にします。 デフォルトでは無効になっています。

-mscore5
ターゲットアーキテクチャとしてSCORE5を指定します。

-mscore5u
ターゲットアーキテクチャのSCORE5Uを指定します。

-mscore7
ターゲットアーキテクチャとしてSCORE7を指定します。 これがデフォルトです。

-mscore7d
ターゲットアーキテクチャとしてSCORE7Dを指定します。

SH オプション

ボーマン -m SH実装のオプションが定義されています。

-m1 SH1のコードを生成します。

-m2 SH2のコードを生成します。

-m2e
SH2eのコードを生成します。

-m2a-nofpu
FPUなしのSH2a、またはSH2a-FPUのコードを次のように生成します。
浮動小数点ユニットは使用されません。

-m2a-シングルのみ
倍精度浮動小数点がないように、SH2a-FPUのコードを生成します
操作が使用されます。

-m2a-シングル
浮動小数点ユニットが単精度であると仮定して、SH2a-FPUのコードを生成します
デフォルトではモード。

-m2a
浮動小数点ユニットが倍精度であると仮定して、SH2a-FPUのコードを生成します
デフォルトではモード。

-m3 SH3のコードを生成します。

-m3e
SH3eのコードを生成します。

-m4-nofpu
浮動小数点ユニットなしでSH4のコードを生成します。

-m4-シングルのみ
シングルのみをサポートする浮動小数点ユニットを使用してSH4のコードを生成します-
精度の高い演算。

-m4-シングル
浮動小数点ユニットが単精度モードであると仮定して、SH4のコードを生成します
デフォルトでは

-m4 SH4のコードを生成します。

-m4a-nofpu
SH4al-dspまたはSH4aのコードを、浮動小数点が次のように生成します。
単位は使用しません。

-m4a-シングルのみ
倍精度浮動小数点がないように、SH4aのコードを生成します
操作が使用されます。

-m4a-シングル
浮動小数点ユニットが単精度であると仮定して、SH4aのコードを生成します
デフォルトではモード。

-m4a
SH4aのコードを生成します。

-m4al
と同じ -m4a-nofpu、暗黙的に通過することを除いて -dsp アセンブラに。 GCC
現在、DSP命令は生成されません。

-mb ビッグエンディアンモードでプロセッサのコードをコンパイルします。

-ml リトルエンディアンモードでプロセッサのコードをコンパイルします。

-mdalign
ダブルスを64ビット境界に揃えます。 これにより、呼び出し規約が変更されることに注意してください。
したがって、標準 C ライブラリの一部の関数は、再コンパイルしないと機能しません。
それは最初に -mdalign.

-mリラックス
可能であれば、リンク時に一部のアドレス参照を短くします。 リンカーオプションを使用します
-リラックス.

-mbigtable
「スイッチ」テーブルでは32ビットオフセットを使用します。 デフォルトでは、16ビットオフセットを使用します。

-mbitops
SH2Aでビット操作命令の使用を有効にします。

-mfmovd
命令「fmovd」の使用を有効にします。 小切手 -mdalign アラインメント制約用。

-ミタチ
Renesasによって定義された呼び出し規約に準拠します。

-ムレネサス
Renesasによって定義された呼び出し規約に準拠します。

-mno-ルネサス
ルネサスの規約の前にGCC用に定義された規約に準拠する
利用可能でした。 このオプションは、SHツールチェーンのすべてのターゲットのデフォルトです。

-mnomacsave
「MAC」レジスタをコールクロバーとしてマークします。 -ミタチ 与えられます。

-ミィー
-mno-ieee
処理に影響を与える浮動小数点比較のIEEEコンプライアンスを制御します
比較の結果が順序付けられていない場合の例。 デフォルトでは -ミィー is
暗黙的に有効になります。 もしも -有限数学のみ 有効になっています -mno-ieee 暗黙的に設定され、
これにより、浮動小数点の大等値と非等値の比較が高速化されます。 The
暗黙の設定は、次のいずれかを指定することでオーバーライドできます -ミィー or -mno-ieee.

-minline-ic_invalidate
ネストされた関数を設定した後に命令キャッシュエントリを無効にするインラインコード
トランポリン。 -musermode が有効で、選択された
コード生成オプション (例: -m4) では、icbi 命令を使用できません。 もしも
選択したコード生成オプションでは、icbi 命令を使用できません。
-musermode が有効でない場合、インライン化されたコードが命令を操作します。
連想書き込みでアドレス配列を直接キャッシュします。 これは、
特権モードですが、キャッシュ ラインが TLB 経由でマップされている場合も失敗します。
マップされていません。

-ミスサイズ
命令のサイズと場所をアセンブリコードにダンプします。

-mpadstruct
このオプションは非推奨です。 構造体を4バイトの倍数にパディングします。
SHABIと互換性がありません。

-msoft-アトミック
アトミック組み込み用の GNU/Linux 互換の gUSA ソフトウェア アトミック シーケンスを生成します。
機能。 生成されたアトミック シーケンスには、割り込みからのサポートが必要です /
システムの例外処理コードであり、シングルコア システムにのみ適しています。
マルチコア システムでは正しく動作しません。 このオプションは
ターゲットが「sh-*-linux*」の場合のデフォルト。 アトミックビルトインの詳細について
関数 参照 __アトミック ビルトイン.

-mspace
速度ではなくスペースを最適化します。 によって暗示される -オス.

-mprefergot
位置に依存しないコードを生成する場合は、グローバルオフセットを使用して関数呼び出しを発行します
プロシージャリンケージテーブルの代わりにテーブル。

-musermode
特権モードのみのコードを生成しないでください。 の場合、-mno-inline-ic_invalidate を意味します。
インライン コードは、ユーザー モードでは機能しません。 これは、ターゲットが
「sh-*-linux*」。

-マルチコスト=
乗算insnで想定するコストを設定します。

-mdiv =戦略
整数除算演算に使用する除算戦略を設定します。 SHmediaの場合
戦略 次のいずれかになります。

fp 浮動小数点で操作を実行します。 これには非常に高いレイテンシがありますが、
いくつかの命令しかないので、コードに十分な数がある場合は良い選択かもしれません
コンパイラが浮動小数点をスケジュールできるようにする、簡単に利用できるILP
他の指示と一緒に指示。 ゼロ除算により、
浮動小数点例外。

INV 整数演算を使用して除数の逆数を計算し、次に
被除数に逆数を掛けます。 この戦略により、CSEと巻き上げが可能になります
逆計算の。 ゼロ除算は、不特定の結果を計算します。
しかし、トラップしません。

inv:minlat
の変種 INV ここで、CSEまたは巻き上げの機会が見つからなかった場合、または
操作全体が同じ場所に引き上げられました。
逆数計算は、全体を減らすために最終的な乗算と絡み合っています
レイテンシー、いくつかのより多くの命令を使用することを犠牲にして、したがってより少ないものを提供する
他のコードで機会をスケジュールします。

コール
通常はを実装するライブラリ関数を呼び出します inv:minlat ストラテジー。 これ
「m5-*media-nofpu」コンパイルに高いコード密度を提供します。

call2
同じライブラリ関数の別のエントリポイントを使用します。
ルックアップテーブルへのポインタはすでに設定されており、ポインタの負荷が明らかになります
CSEおよびコードホイストの最適化。

inv:call
inv:call2
inv:fp
INV 初期コード生成のアルゴリズムですが、コードが残っている場合
最適化されていない場合は、 コール, call2または fp それぞれ戦略。 ご了承ください
ゼロ除算の潜在的にトラップされる副作用は、別の
命令なので、すべての整数命令が引き上げられる可能性があります。
しかし、副作用のマーカーはそのままです。 への組換え
その場合、浮動小数点演算や呼び出しはできません。

inv20u
inv20l
の変種 inv:minlat ストラテジー。 逆計算の場合
乗算から分離されていないため、配当が適合する分割が高速化されます
テストを挿入して20ビット(該当する場合はプラス記号)に変換し、
この場合の操作。 このテストは、配当が大きい場合の速度を低下させます。
inv20u そのような少額の配当の場合はありそうもないと仮定し、 inv20l
可能性が高いと想定しています。

SHmedia以外のターゲットの場合 戦略 次のいずれかになります。

呼び出し-div1
シングルステップ除算命令「div1」を使用するライブラリ関数を呼び出して、
操作を実行します。 ゼロ除算は不特定の結果を計算し、
トラップしないでください。 これは、SH4、SH2A、およびSHcompactを除くデフォルトです。

コールFP
倍精度浮動小数点で演算を実行するライブラリ関数を呼び出します
点。 ゼロによる除算は、浮動小数点例外を引き起こします。 これがデフォルトです
FPUを使用したSHcompactの場合。 ダブルを持たないターゲットにこれを指定する
精度 FPU はデフォルトで「call-div1」になります。

コールテーブル
小さな除数のルックアップテーブルを使用するライブラリ関数を呼び出します。
大きな除数の場合は大文字と小文字を区別する「div1」命令。 ゼロ除算
不特定の結果を計算し、トラップしません。 これはSH4のデフォルトです。
動的シフト命令を持たないターゲットに対してこれを指定すると、
デフォルトは「call-div1」です。

分割戦略が指定されていない場合、デフォルトの戦略が選択されます
現在のターゲットに基づいています。 SH2A の場合、デフォルトの戦略は「div」を使用することです。
ライブラリ関数呼び出しの代わりに「divu」命令。

-maccumulate-発信引数
関数プロローグの周りではなく、発信引数用にXNUMX回スペースを予約します
各呼び出し。 一般的に、パフォーマンスとサイズにメリットがあります。 巻き戻しにも必要
条件付きコードの周りのスタックフレームを変更しないようにするため。

-mdivsi3_libfunc =
32ビット符号付き除算に使用されるライブラリ関数の名前をに設定します 。 この
call および inv:call 分割戦略で使用される名前にのみ影響し、
コンパイラは、入力/出力/破壊されたレジスタの同じセットを期待します。
このオプションはありませんでした。

-mfixed-range =レジスタ範囲
指定されたレジスタ範囲を固定レジスタとして扱うコードを生成します。 固定レジスタ
レジスタアロケータが使用できないものです。 これは、カーネルをコンパイルするときに役立ちます
コード。 レジスタ範囲は、ダッシュで区切られたXNUMXつのレジスタとして指定されます。 多数
レジスタ範囲は、コンマで区切って指定できます。

-madjust-unroll
アンローリングを抑制して、ターゲット レジスタのスラッシングを回避します。 このオプションには、
gcc コード ベースが TARGET_ADJUST_UNROLL_MAX ターゲット フックをサポートしている場合に有効です。

-mindexed-addressing
SHmedia32/SHcompactのインデックス付きアドレッシングモードの使用を有効にします。 これだけです
ハードウェアやOSがインデックス付きの32ビットラップアラウンドセマンティクスを実装している場合は安全です
アドレッシングモード。 このアーキテクチャにより、64ビットのプロセッサを実装できます
MMU。OSが32ビットアドレス指定を取得するために使用できますが、現在のハードウェアがないため
実装は、インデックス付きアドレッシングモードを安全にするためのこの方法またはその他の方法をサポートします
32ビットABIで使用する場合、デフォルトは -mno-indexed-addressing.

-mgettrcost =
gettr 命令の想定コストを 。 デフォルトは2です。
-mpt-修正済み 有効です。それ以外の場合は100です。

-mpt-修正済み
pt* 命令がトラップしないと仮定します。 これにより、通常、より適切なスケジュールが生成されます
コードですが、現在のハードウェアでは安全ではありません。 現在のアーキテクチャの定義によると
3 で anded されたターゲットが 3 の場合、その ptabs と ptrel トラップ。
ブランチの前に ptab / ptrel をスケジュールすることが安全でなくなるという意図しない影響、または
ループから持ち上げます。 たとえば、実行する libgcc の一部である __do_global_ctors
プログラム起動時のコンストラクターは、-1 で区切られたリスト内の関数を呼び出します。
-mpt-fixed オプションを使用すると、-1 に対するテストの前に ptab が実行されます。 それか
つまり、すべてのコンストラクターが少し速く実行されますが、ループが発生すると
リストの最後にある場合、ptabs がターゲットに -1 をロードするため、プログラムがクラッシュします。
登録。 このオプションは、現在の
アーキテクチャ仕様、デフォルトは -mno-pt-fixed です。 ユーザーが指定しない限り
との特定のコスト -mgettrcost、 -mno-pt-fixed も意味します -mgettrcost = 100; この
通常の整数を格納するためのターゲット レジスタを使用して、レジスタの割り当てを抑止します。

-minvalid-シンボル
シンボルが無効である可能性があると想定します。 コンパイラによって生成される通常の関数シンボル
movi/shori/ptabs または movi/shori/ptrel でのロードは常に有効ですが、
アセンブラおよび/またはリンカのトリックにより、シンボルを生成することが可能です。
トラップする ptabs / ptrel。 このオプションは、次の場合にのみ意味があります。 -mno-pt-修正済み である
効果。 次に、クロス基本ブロックの cse、巻き上げ、およびほとんどのスケジューリングを防止します。
シンボルロード。 デフォルトは -mno-無効なシンボル.

-mbranch-cost =NUM
想定する NUM 分岐命令のコストになります。 数字が大きいほど
コンパイラは、可能であれば分岐のないコードをさらに生成しようとします。 指定されていない場合は、
値は、コンパイル対象のプロセッサ タイプに応じて選択されます。

-マクブランチディ
「cbranchdi4」命令パターンを有効にします。

-mcmpeqdi
の場合でも「cmpeqdi_t」命令パターンを発行します。 -マクブランチディ 有効です。

-混乱-狂った
次の場合、「fmac」命令 (浮動小数点積和) の使用を許可します。
プロセッサの種類によってサポートされます。 このオプションを有効にすると、以下を生成するコードが生成される場合があります。
厳密な IEEE 754 演算と比較して、数値浮動小数点の結果が異なります。

-mpreend-cmove
条件付き移動命令には、ゼロ変位条件付き分岐を優先します
パターン。 これにより、SH4プロセッサのコードが高速になる可能性があります。

ソラリス 2 オプション

ボーマン -m オプションはSolaris2でサポートされています:

-mimpure-テキスト
-mimpure-テキスト、に加えて使用 -共有、コンパイラに渡さないように指示します -z 클라우드 기반 AI/ML및 고성능 컴퓨팅을 통한 디지털 트윈의 기초 – Edward Hsu, Rescale CPO 많은 엔지니어링 중심 기업에게 클라우드는 R&D디지털 전환의 첫 단계일 뿐입니다. 클라우드 자원을 활용해 엔지니어링 팀의 제약을 해결하는 단계를 넘어, 시뮬레이션 운영을 통합하고 최적화하며, 궁극적으로는 모델 기반의 협업과 의사 결정을 지원하여 신제품을 결정할 때 데이터 기반 엔지니어링을 적용하고자 합니다. Rescale은 이러한 혁신을 돕기 위해 컴퓨팅 추천 엔진, 통합 데이터 패브릭, 메타데이터 관리 등을 개발하고 있습니다. 이번 자리를 빌려 비즈니스 경쟁력 제고를 위한 디지털 트윈 및 디지털 스레드 전략 개발 방법에 대한 인사이트를 나누고자 합니다. 〜へ
共有オブジェクトをリンクするときのリンカ。 このオプションを使用すると、位置をリンクできます-
共有オブジェクトへの依存コード。

-mimpure-テキスト 「再配置は割り当て可能であるが書き込み可能ではないままである」を抑制します
セクション」リンカー エラー メッセージ。ただし、必要な再配置はコピーをトリガーします。
on-write であり、共有オブジェクトは実際にはプロセス間で共有されません。 それ以外の
-mimpure-テキスト、すべてのソースコードを次のようにコンパイルする必要があります -fpic or -fPIC.

これらのスイッチは、Solaris2で上記に加えてサポートされています。

-pスレッド
POSIXスレッドライブラリを使用したマルチスレッドのサポートを追加します。 このオプションセット
プリプロセッサとリンカの両方のフラグ。 このオプションはスレッドには影響しません
コンパイラによって生成されたオブジェクトコードまたはコンパイラに付属のライブラリの安全性。

-pthread
これはの同義語です -pスレッド.

SPARC オプション

ボーマン -m オプションはSPARCでサポートされています。

-mno-app-regs
-map-regs
指定 -map-regs グローバルレジスタ2から4を使用して出力を生成します。
SPARCSVR4ABIはアプリケーション用に予約されています。 グローバルレジスタ1と同様に、各グローバル
レジスター2から4は、割り当て可能なレジスターとして扱われます。
関数呼び出し。 これがデフォルトです。

SVR4 ABI に完全に準拠するには、パフォーマンスがいくらか低下しますが、次のように指定します。
-mno-app-regs。 このオプションを使用して、ライブラリとシステムソフトウェアをコンパイルする必要があります。

-mフラット
-mno-フラット
-mフラット、コンパイラは保存/復元命令を生成せず、
「フラット」またはシングルレジスタウィンドウモデル。 このモデルは通常のモデルと互換性があります
レジスタウィンドウモデル。 ローカルレジスタと入力レジスタ(0〜5)はまだ残っています
「call-saved」レジスタとして扱われ、必要に応じてスタックに保存されます。

-mno-フラット (デフォルト)、コンパイラーは保存/復元命令を生成します(ただし
リーフ機能用)。 これは通常の動作モードです。

-mfpu
-mhard-float
浮動小数点命令を含む出力を生成します。 これがデフォルトです。

-mno-fpu
-msoft-float
浮動小数点のライブラリ呼び出しを含む出力を生成します。 警告: 必要条件
ライブラリは、すべてのSPARCターゲットで使用できるわけではありません。 通常、
マシンの通常のCコンパイラが使用されますが、これをクロスで直接実行することはできません。
コンパイル。 適切なライブラリを提供するには、独自の手配を行う必要があります
クロスコンパイルのための関数。 埋め込まれたターゲット sparc-*-aout & スパクライト-*-*
ソフトウェア浮動小数点サポートを提供します。

-msoft-float 出力ファイルの呼び出し規約を変更します。 したがって、それは
コンパイルする場合に便利です このオプションを使用したプログラムの特に、あなたはする必要があります
コンパイル libgcc.a、GCCに付属するライブラリ -msoft-float このために
動作するように。

-mhard-quad-float
クアッドワード(long double)浮動小数点命令を含む出力を生成します。

-msoft-quad-float
クアッドワード(long double)浮動小数点のライブラリ呼び出しを含む出力を生成します
指示。 呼び出される関数は、SPARCABIで指定されている関数です。 これは
デフォルト。

この記事の執筆時点では、ハードウェアをサポートするSPARC実装はありません。
クワッドワード浮動小数点命令。 それらはすべて、次のいずれかのトラップハンドラーを呼び出します。
これらの命令、そしてトラップハンドラーは命令の効果をエミュレートします。
トラップハンドラのオーバーヘッドのため、これはABIライブラリを呼び出すよりもはるかに低速です。
ルーチン。 したがって、 -msoft-quad-float オプションがデフォルトです。

-mno-unaligned-doubles
-不整列ダブルス
doubleには8バイトのアラインメントがあると想定します。 これがデフォルトです。

-不整列ダブルス、GCCは、doubleが8バイトのアラインメントを持っていると想定するのは、
別のタイプに含まれている場合、または絶対アドレスがある場合。 そうでなければ、それ
それらが4バイトのアラインメントを持っていると仮定します。 このオプションを指定すると、まれな問題を回避できます
他のコンパイラによって生成されたコードとの互換性の問題。 デフォルトではありません
特に浮動小数点コードの場合、パフォーマンスが低下するためです。

-mno-faster-structs
-mfaster-構造体
-mfaster-構造体、コンパイラは、構造体が8バイトであると想定します
アラインメント。 これにより、コピーに「ldd」と「std」の命令のペアを使用できるようになります
構造体の割り当てでは、「ld」と「st」のペアのXNUMX倍の代わりに。 しかし
この変更された配置を使用すると、SPARCABIに直接違反します。 したがって、それは意図されています
開発者が結果のコードを認めているターゲットでのみ使用するため
ABI の規則に直接準拠することはありません。

-mcpu =cpu_type
の命令セット、レジスタセット、および命令スケジューリングパラメータを設定します
マシンタイプ cpu_type。 サポートされている値 cpu_type   v7, サイプレス, v8, スーパースパーク,
ハイパースパーク, レオン, スパクライト, f930, f934, スパクライト86x, スパクレット, tsc701, v9,
ウルトラスパーク, ウルトラスパーク3, ナイアガラ, ナイアガラ2, ナイアガラ3, ナイアガラ4.

ネイティブSolarisおよびGNU/Linuxツールチェーンも値をサポートします ネイティブ、を選択します
ホストプロセッサに最適なアーキテクチャオプション。 -mcpu = native 次の場合は効果がありません
GCCはプロセッサを認識しません。

デフォルトの命令スケジューリングパラメータは、
アーキテクチャであり、実装ではありません。 これらは v7, v8, スパクライト, スパクレット, v9.

サポートされている各アーキテクチャとサポートされている実装のリストを次に示します。

v7 ヒノキ

v8 スーパースパーク、ハイパースパーク、レオン

スパクライト
f930、f934、sparclite86x

スパクレット
tsc701

v9 ultrasparc、ultrasparc3、niagara、niagara2、niagara3、niagara4

デフォルトでは(特に設定されていない限り)、GCCはV7バリアントのコードを生成します
SPARCアーキテクチャ。 と -mcpu = cypress、コンパイラはさらにそれを最適化します
SPARCStation /SPARCServer7xxシリーズで使用されているCypressCY602C3チップ。 これは
古いSPARCStation1、2、IPXなどにも適しています。

-mcpu = v8、GCCは、SPARCアーキテクチャのV8バリアントのコードを生成します。 The
V7コードとの唯一の違いは、コンパイラが整数の乗算と
SPARC-V8には存在するが、SPARC-V7には存在しない整数除算命令。 と
-mcpu = supersparc、コンパイラはさらに、SuperSPARCチップ用に最適化します。
SPARCStation 10、1000、および2000シリーズで使用されます。

-mcpu = sparclite、GCCは、SPARCのSPARCliteバリアントのコードを生成します
建築。 これにより、整数の乗算、整数の除算のステップとスキャン( "ffs")が追加されます。
SPARCliteには存在するが、SPARC-V7には存在しない命令。 と -mcpu = f930
コンパイラはさらに、元の富士通MB86930チップ用に最適化します
SPARClite、FPUなし。 と -mcpu = f934、コンパイラはさらにそれを最適化します
FPUを搭載した最新のSPARCliteであるFujitsuMB86934チップ。

-mcpu = sparclet、GCCは、SPARCのSPARCletバリアントのコードを生成します
建築。 これにより、整数の乗算、乗算/累積、整数の除算が追加されます
SPARCletには存在するが、SPARC-V7には存在しないステップアンドスキャン( "ffs")命令。 と
-mcpu = tsc701、コンパイラはさらにTEMICSPARCletチップ用に最適化します。

-mcpu = v9、GCCは、SPARCアーキテクチャのV9バリアントのコードを生成します。 これ
64ビット整数および浮動小数点移動命令を追加し、さらに3つの浮動小数点を追加します
条件コードレジスタと条件付き移動命令。 と -mcpu = ultrasparc,
コンパイラはさらに、Sun UltraSPARC I / II/IIiチップ用に最適化します。 と
-mcpu = ultrasparc3、コンパイラはさらにSunUltraSPARC用に最適化します
III / III + / IIIi / IIIi + / IV /IV+チップ。 と -mcpu = niagara、コンパイラはさらに
SunUltraSPARCT1チップ用に最適化します。 と -mcpu = niagara2、コンパイラ
さらに、SunUltraSPARCT2チップ用に最適化します。 と -mcpu = niagara3
コンパイラはさらに、SunUltraSPARCT3チップ用に最適化します。 と -mcpu = niagara4,
コンパイラはさらに、SunUltraSPARCT4チップ用に最適化します。

-mtune =cpu_type
マシンタイプの命令スケジューリングパラメータを設定します cpu_type、ただし設定しない
オプションの命令セットまたはレジスタセット -mcpu =cpu_type

の同じ値 -mcpu =cpu_type 以下のために使用することができます -mtune =cpu_type、しかし唯一
有用な値は、特定のCPU実装を選択する値です。 それらは
サイプレス, スーパースパーク, ハイパースパーク, レオン, f930, f934, スパクライト86x, tsc701, ウルトラスパーク,
ウルトラスパーク3, ナイアガラ, ナイアガラ2, ナイアガラ3 & ナイアガラ4. ネイティブの Solaris と
GNU/Linux ツールチェーン、 ネイティブ も使用することができる。

-mv8plus
-mno-v8plus
-mv8plus、GCCはSPARC-V8+ABIのコードを生成します。 V8との違い
ABIは、グローバルレジスタと出力レジスタが64ビット幅と見なされることです。 これは有効です
デフォルトでは、すべてのSPARC-V32プロセッサの9ビットモードのSolaris。

-mvis
-mno-vis
-mvis、GCCは、UltraSPARCVisualを利用するコードを生成します
命令セット拡張。 デフォルトは -mno-vis.

-mvis2
-mno-vis2
-mvis2、GCCは、UltraSPARCのバージョン2.0を利用するコードを生成します
ビジュアルインストラクションセットの拡張機能。 デフォルトは -mvis2 そのCPUをターゲットにするとき
UltraSPARC-III以降などのこのような命令をサポートします。 設定 -mvis2 また
セット -mvis.

-mvis3
-mno-vis3
-mvis3、GCCは、UltraSPARCのバージョン3.0を利用するコードを生成します
ビジュアルインストラクションセットの拡張機能。 デフォルトは -mvis3 そのCPUをターゲットにするとき
niagara-3以降などのそのような命令をサポートします。 設定 -mvis3 セットも
-mvis2 & -mvis.

-mpopc
-mno-popc
-mpopc、GCCは、UltraSPARCポピュレーションを利用するコードを生成します
カウント命令。 デフォルトは -mpopc そのようなものをサポートするCPUをターゲットにするとき
Niagara-2以降などの指示。

-mfmaf
-mno-fmaf
-mfmaf、GCCは、UltraSPARCFusedMultiplyを利用するコードを生成します-
浮動小数点拡張を追加します。 デフォルトは -mfmaf そのCPUをターゲットにするとき
Niagara-3以降などのそのような命令をサポートします。

-mfix-at697f
AtmelAT697Fプロセッサの単一の正誤表について文書化された回避策を有効にします
(AT13Eプロセッサのエラッタ#697に対応します)。

ボーマン -m 9ビットのSPARC-V64プロセッサでは、上記に加えてオプションがサポートされています
環境:

-m32
-m64
32ビットまたは64ビット環境用のコードを生成します。 32ビット環境はintを設定します。
longおよび32ビットへのポインタ。 64ビット環境では、intが32ビットおよびlongに設定されます。
64ビットへのポインタ。

-mcmodel =which
コードモデルを次のいずれかに設定します

メドロウ
ミディアム/ローコードモデル:64ビットアドレス、プログラムはロー32でリンクする必要があります
メモリのビット。 プログラムは静的または動的にリンクできます。

ミッドミッド
ミディアム/ミドルコードモデル:64ビットアドレス、プログラムはローでリンクする必要があります
44ビットのメモリ、テキストおよびデータセグメントのサイズは2GB未満である必要があります。
データセグメントは、テキストセグメントから2GB以内に配置する必要があります。

メダン
中/どこでもコードモデル:64ビットアドレス、プログラムはどこにでもリンクできます
メモリ内では、テキストセグメントとデータセグメントのサイズとデータのサイズは2GB未満である必要があります
セグメントは、テキストセグメントから2GB以内に配置する必要があります。

埋め込み
組み込みシステムのMedium/Anywhereコードモデル:64ビットアドレス、テキスト
データセグメントのサイズは2GB未満である必要があり、どちらもメモリ内のどこからでも開始できます
(リンク時に決定されます)。 グローバルレジスタ%g4はデータのベースを指します
セグメント。 プログラムは静的にリンクされており、PICはサポートされていません。

-mmemory-model =メモリモデル
プロセッサで有効なメモリモデルを次のいずれかに設定します。

デフォルト
プロセッサとオペレーティングシステムのデフォルトのメモリモデル。

RMO リラックスしたメモリ順序

pso 部分的なストア注文

tso 総店舗注文

sc 逐次一貫性

これらのメモリモデルは、SparcV9アーキテクチャの付録Dで正式に定義されています。
プロセッサの「PSTATE.MM」フィールドに設定されている手動。

-mstack-バイアス
-mno-スタックバイアス
-mstack-バイアス、GCCは、スタックポインタ、および存在する場合はフレームポインタを想定します。
スタックフレーム参照を作成するときに追加し直す必要がある-2047によってオフセットされます。 これ
64ビットモードのデフォルトです。 それ以外の場合は、そのようなオフセットが存在しないと想定します。

SPU オプション

ボーマン -m オプションはSPUでサポートされています。

-mwarn-再配置
-merror-reloc
SPU のローダーは、動的再配置を処理しません。 デフォルトでは、GCC は
動的な再配置を必要とするコードを生成するときにエラーが発生します。 -mno-error-reloc
エラーを無効にし、 -mwarn-再配置 代わりに警告を生成します。

-msafe-dma
-ムンセーフ-dma
DMAの完了を開始またはテストする命令は、次のコマンドで並べ替えることはできません。
アクセスされているメモリのロードとストアに関して。 ユーザーは通常
volatile キーワードを使用してこの問題に対処しますが、非効率的なコードになる可能性があります
記憶が変わらないことが知られている場所。 メモリを次のようにマークするのではなく、
volatile では、DMA 命令がすべてのメモリに影響を与える可能性があるものとして扱います。 と
-ムンセーフ-dma ユーザーは、メモリ アクセスを保護するために volatile キーワードを使用する必要があります。

-mbranch-ヒント
デフォルトでは、GCC は分岐ヒント命令を生成して、パイプラインのストールを回避します。
常に取られた、またはおそらく取られた枝。 ヒントは 8 より近く生成されません
そのブランチから離れた指示。 それらを無効にする理由はほとんどありません。
デバッグ目的、またはオブジェクトを少し小さくするため。

-msmall-mem
-mlarge-mem
デフォルトでは、GCCはアドレスが18ビットを超えないことを前提としてコードを生成します。
-mlarge-mem 完全な32ビットアドレスを想定したコードが生成されます。

-mstdmain
デフォルトでは、GCCはSPUスタイルのメイン機能を想定したスタートアップコードに対してリンクします
インターフェイス(型にはまらないパラメータリストがあります)。 と -mstdmain、GCCがリンクします
「メイン」へのC99スタイルのインターフェースを想定したスタートアップコードに対するプログラム、
「argv」文字列のローカルコピーを含みます。

-mfixed-range =レジスタ範囲
指定されたレジスタ範囲を固定レジスタとして扱うコードを生成します。 固定レジスタ
レジスタアロケータが使用できないものです。 これは、カーネルをコンパイルするときに役立ちます
コード。 レジスタ範囲は、ダッシュで区切られたXNUMXつのレジスタとして指定されます。 多数
レジスタ範囲は、コンマで区切って指定できます。

-mea32
-mea64
「__ea」を介してアクセスされるPPUアドレス空間へのポインタを想定してコードをコンパイルします
名前付きアドレス空間修飾子は、32ビット幅または64ビット幅のいずれかです。 デフォルトは32ビットです。
これは ABI 変更オプションであるため、実行可能ファイル内のすべてのオブジェクト コードをコンパイルする必要があります。
同じ設定で。

-maddress-space-conversion
-mno-アドレス空間変換
「__ea」アドレス空間を総称アドレスのスーパーセットとして扱うことを許可/禁止
スペース。 これにより、「__ ea」とジェネリックポインタの間の明示的な型キャスト、および
ジェネリックポインタから「__ea」ポインタへの暗黙の変換。 デフォルトでは、
アドレス空間ポインタの変換。

-mcache-size =キャッシュサイズ
このオプションは、コンパイラが実行可能ファイルにリンクするlibgccのバージョンを制御します
「__ea」アドレスの変数にアクセスするためのソフトウェア管理キャッシュを選択します
特定のキャッシュサイズのスペース。 可能なオプション キャッシュサイズ   8, 16, 32, 64
& 128。 デフォルトのキャッシュサイズは64KBです。

-matomic-アップデート
-mno-atomic-updates
このオプションは、コンパイラが実行可能ファイルにリンクするlibgccのバージョンを制御します
PPU側の変数のソフトウェア管理キャッシュをアトミックに更新するかどうかを選択します
使用されています。 アトミック更新を使用する場合は、を使用してSPUコードからPPU変数に変更します。
「__ea」という名前のアドレス空間修飾子は、他の PPU への変更を妨げません。
PPUコードから同じキャッシュラインにある変数。 アトミックを使用しない場合
更新すると、そのような干渉が発生する可能性があります。 ただし、キャッシュラインの書き戻しはより多くなります
効率的。 デフォルトの動作では、アトミック更新を使用します。

-mdual-nops
-mdual-nops =n
デフォルトでは、GCC は nops を挿入して、二重の問題が増加すると予想される場合に増加させます。
パフォーマンス。 n 0から10までの値にすることができます。 n より少ない nop を挿入します。 10
がデフォルトで、0 は -mno-dual-nops。 で無効に -オス.

-mhint-max-nops =n
ブランチヒントに挿入するnopの最大数。 ブランチヒントは少なくとも8でなければなりません
影響している分岐から離れた命令。 GCC は最大で挿入します n にノープ
そうしないと、分岐ヒントが生成されません。

-mhint-max-distance =n
分岐ヒント命令のエンコードにより、ヒントは256以内に制限されます
影響しているブランチの命令。 デフォルトでは、GCC はそれが範囲内にあることを確認します
125.

-msafe-ヒント
SPUが無期限にストールする原因となるハードウェアバグを回避します。 デフォルトでは、GCC
「hbrp」命令を挿入して、このストールが発生しないようにします。

オプション for エントルピー V

これらの追加オプションは、他のオプションとの互換性のためにSystemVリリース4で使用できます。
それらのシステム上のコンパイラ:

-G 共有オブジェクトを作成します。 をお勧めします -シンボリック or -共有 代わりに使用してください。

-Qy 「.ident」アセンブラで、コンパイラが使用する各ツールのバージョンを識別します
出力のディレクティブ。

-Qn 「.ident」ディレクティブを出力ファイルに追加しないでください(これがデフォルトです)。

-YP、Dirs
ディレクトリを検索する Dirs、で指定されたライブラリの場合は他にありません -l.

-うーん、DIR
ディレクトリを見てください DIR M4プリプロセッサを検索します。 アセンブラはこれを使用します
オプションを選択します。

タイルGx オプション

ボーマン -m オプションはTILE-Gxでサポートされています。

-mcpu =
対象となるCPUの種類を選択します。 現在サポートされているタイプは タイルグックス.

-m32
-m64
32ビットまたは64ビット環境用のコードを生成します。 32ビット環境はintを設定します。
long、および32ビットへのポインタ。 64ビット環境では、intが32ビットおよびlongに設定されます。
64ビットへのポインタ。

タイルプロ オプション

ボーマン -m オプションはTILEProでサポートされています:

-mcpu =
対象となるCPUの種類を選択します。 現在サポートされているタイプは タイルプロ.

-m32
int、long、およびポインターを32ビットに設定する32ビット環境用のコードを生成します。
これがサポートされている唯一の動作であるため、フラグは基本的に無視されます。

V60 オプション

ボーマン -m オプションは、V850実装用に定義されています。

-mlong-calls
-mno-long-calls
すべての通話を遠く(近く)として扱います。 通話が遠くにあると想定される場合、
コンパイラは常に関数アドレスをレジスタにロードし、間接的に呼び出します
ポインタを介して。

-mno-ep
-メップ
同じインデックスポインタ4以上を使用する基本ブロックを最適化(最適化)しないでください
ポインタを「ep」レジスタにコピーし、短い「sld」と「sst」を使用する回数
指示。 The -メップ 最適化すると、オプションはデフォルトでオンになります。

-mno-プロローグ関数
-mprolog-関数
プロローグでレジスタを保存および復元するために外部関数を使用しない(使用しない)
関数のエピローグ。 外部関数は遅くなりますが、使用するコードは少なくなります
複数の関数が同じ数のレジスタを保存する場合はスペース。 The
-mprolog-関数 最適化すると、オプションはデフォルトでオンになります。

-mspace
コードをできるだけ小さくするようにしてください。 現在、これはただオンになります -メップ
& -mprolog-関数 オプション。

-mtda =n
サイズがである静的変数またはグローバル変数を配置します n 小さなデータ領域にバイト以下
そのレジスタ「ep」はを指します。 小さなデータ領域は、合計で最大256バイトを保持できます
(バイト参照の場合は128バイト)。

-msda =n
サイズがである静的変数またはグローバル変数を配置します n 小さなデータ領域にバイト以下
そのレジスタ「gp」が指す。 小さなデータ領域は最大64キロバイトを保持できます。

-mzda =n
サイズがである静的変数またはグローバル変数を配置します n 最初の32バイト以下
キロバイトのメモリ。

-mv850
ターゲットプロセッサがV850であることを指定します。

-mbig スイッチ
大きなスイッチテーブルに適したコードを生成します。 このオプションは、
アセンブラ/リンカは、スイッチテーブル内の範囲外の分岐について文句を言います。

-map-regs
このオプションにより、コンパイラによって生成されたコードで r2 と r5 が使用されます。
この設定がデフォルトです。

-mno-app-regs
このオプションにより、r2 と r5 が固定レジスタとして扱われます。

-mv850e2v3
ターゲット プロセッサが V850E2V3 であることを指定します。 プリプロセッサ定数
__v850e2v3__ このオプションを使用すると定義されます。

-mv850e2
ターゲット・プロセッサーがV850E2であることを指定します。 プリプロセッサ定数
__v850e2__ このオプションを使用すると定義されます。

-mv850e1
ターゲット・プロセッサーがV850E1であることを指定します。 プリプロセッサ定数
__v850e1__ & __v850e__ このオプションを使用すると定義されます。

-mv850es
ターゲット・プロセッサーがV850ESであることを指定します。 これはのエイリアスです -mv850e1
オプションを選択します。

-mv850e
ターゲット プロセッサが V850E であることを指定します。 プリプロセッサ定数 __v850e__
このオプションを使用すると定義されます。

どちらでもない場合 -mv850 また -mv850e また -mv850e1 また -mv850e2 また -mv850e2v3 定義されています
次に、デフォルトのターゲット プロセッサが選択され、関連する __v850 * __ プリプロセッサ
定数が定義されます。

プリプロセッサ定数 __v850 & __v851__ どちらに関係なく、常に定義されます
プロセッサバリアントがターゲットです。

-mdisable-callt
このオプションは、v850e、v850e1、vXNUMXe の CALLT 命令の生成を抑制します。
v850 アーキテクチャの v2e850 および v2e3v850 フレーバー。 デフォルトは
-mno-disable-callt これにより、CALLT 命令を使用できるようになります。

VAX オプション

ボーマン -m オプションはVAXに対して定義されています。

-munix
Unixアセンブラが実行する特定のジャンプ命令(「aobleq」など)を出力しないでください
VAXは長距離を処理できません。

-mgnu
でアセンブルすることを前提として、それらのジャンプ命令を出力してください。
GNU アセンブラ。

-mg D形式ではなくG形式の浮動小数点数の出力コード。

VxWorks オプション

このセクションのオプションは、すべてのVxWorksターゲットに対して定義されています。 に固有のオプション
ターゲットハードウェアは、そのターゲットの他のオプションとともに一覧表示されます。

-mrtp
GCCは、VxWorksカーネルとリアルタイムプロセス(RTP)の両方のコードを生成できます。 これ
オプションは前者から後者に切り替わります。 また、プリプロセッサマクロも定義します
「__RTP__」。

-非静的
静的ライブラリではなく共有ライブラリに対してRTP実行可能ファイルをリンクします。 The
オプション -静的 & -共有 RTPにも使用できます。 -静的 デフォルトです。

-Bスタティック
-バダイナミック
これらのオプションはリンカーに渡されます。 それらはとの互換性のために定義されています
ディアブ。

-Xbind-lazy
関数呼び出しの遅延バインディングを有効にします。 このオプションは、 -Wl、-z、now とです。
Diabとの互換性のために定義されています。

-Xbind-今
関数呼び出しの遅延バインディングを無効にします。 このオプションはデフォルトであり、
Diabとの互換性。

x86-64 オプション

これらは以下にリストされています

エクスストーミー16 オプション

これらのオプションは、Xstormy16に対して定義されています。

-msim
シミュレータに適したスタートアップファイルとリンカスクリプトを選択します。

エクステンサ オプション

これらのオプションは、Xtensaターゲットでサポートされています。

-mconst16
-mno-const16
定数値をロードするための「CONST16」命令の使用を有効または無効にします。 The
「CONST16」命令は現在、テンシリカの標準オプションではありません。 いつ
有効にすると、標準の「L16R」の代わりに「CONST32」命令が常に使用されます
指示。 「CONST16」の使用は、「L32R」の場合にのみデフォルトで有効になります
命令は利用できません。

-混乱-狂った
-mno-fusion-madd
での融合された乗算/加算および乗算/減算命令の使用を有効または無効にします
浮動小数点オプション。 浮動小数点オプションもそうでない場合、これは効果がありません
有効。 融合された乗算/加算および乗算/減算命令を無効にすると、強制的に
コンパイラは、乗算および加算/減算操作に別々の命令を使用します。
これは、IEEE754に準拠した厳密な結果が得られる場合に望ましい場合があります。
必須:融合された乗算の加算/減算命令は中間を丸めません
結果、それによって結果を生成します 他には? によって指定されたよりも精度のビット
IEEE標準。 融合された乗算の加算/減算命令を無効にすると、次のことが保証されます。
プログラム出力は、乗算と乗算を組み合わせるコンパイラの機能に影響されません。
加算/減算操作。

-mserialize-volatile
-mno-serialize-volatile
このオプションを有効にすると、GCCは「揮発性」メモリの前に「MEMW」命令を挿入します
逐次一貫性を保証するための参照。 デフォルトは -mserialize-volatile.
  -mno-serialize-volatile 「MEMW」命令を省略します。

-mforce-no-pic
GNU / Linuxのように、すべてのユーザーモードのXtensaコードが位置にある必要があるターゲットの場合-
独立コード(PIC)。このオプションは、カーネルコードをコンパイルするためのPICを無効にします。

-mtext-セクションリテラル
-mno-text-section-literals
リテラルプールの処理を制御します。 デフォルトは -mno-text-section-literals,
出力ファイルの別のセクションにリテラルを配置します。 これにより、
リテラル プールをデータ RAM/ROM に配置し、リンカが結合することもできます。
冗長なリテラルを削除してコードを改善するための個別のオブジェクト ファイルからのリテラル プール
サイズ。 と -mtext-セクションリテラル、リテラルはテキストセクションに散在しています
それらを参照にできるだけ近づけるために。 これは必要かもしれません
大きなアセンブリ ファイルの場合。

-mtarget-align
-mno-ターゲット-アライン
このオプションを有効にすると、GCCはアセンブラに自動的に整列するように指示します
コード密度をいくらか犠牲にしてブランチペナルティを減らすための指示。 The
アセンブラは、密度命令を広げてブランチターゲットと
呼び出し指示に続く指示。 先行する金庫が十分にない場合
ターゲットを整列するための密度命令では、拡張は実行されません。 デフォルトは
-mtarget-align。 これらのオプションは、自動調整の処理には影響しません。
アセンブラが常に整列する「LOOP」などの命令
密度命令を挿入するか、ノーオペレーション命令を挿入します。

-mlongcalls
-mno-longcalls
このオプションを有効にすると、GCCはアセンブラに直接呼び出しを次のように変換するように指示します。
直接通話のターゲットが
呼び出し命令で許可される範囲。 この変換は通常、
他のソースファイルの関数。 具体的には、アセンブラは直接変換します
「CALL」命令を「L32R」に変換し、続いて「CALLX」命令を実行します。 デフォルトは
-mno-longcalls。 このオプションは、コールターゲットができるプログラムで使用する必要があります
範囲外の可能性があります。 このオプションは、アセンブラではなく、アセンブラに実装されています。
コンパイラであるため、GCC によって生成されたアセンブリ コードは引き続き直接呼び出しを示します。
命令---実際の命令を確認するには、分解されたオブジェクトコードを確認してください。
アセンブラは、クロスファイル呼び出しだけでなく、すべてのクロスファイル呼び出しに対して間接呼び出しを使用することに注意してください。
本当に範囲外になるもの。

zシリーズ オプション

これらは以下にリストされています

オプション for Code 世代 表記
これらのマシンに依存しないオプションは、コードで使用されるインターフェイス規則を制御します
世代。

それらのほとんどには、正と負の両方の形式があります。 の負の形式 -ふふー になる
-fno-foo。 以下の表には、フォームのXNUMXつだけがリストされています---フォームではないもの
ディフォルト。 あなたはどちらかを削除することによって他のフォームを理解することができます NO- またはそれを追加します。

-fbounds-チェック
それをサポートするフロントエンドの場合、追加のコードを生成して、インデックスが以前に使用されたことを確認します
アクセスアレイは宣言された範囲内にあります。 これは現在、
JavaおよびFortranフロントエンド。このオプションのデフォルトはtrueおよびfalseです。


-ftrapv
このオプションは、加算、減算、
乗算演算。

-fwrapv
このオプションは、コンパイラに、の符号付き算術オーバーフローを想定するように指示します。
加算、減算、乗算はXNUMXの補数を使用してラップアラウンドします
表現。 このフラグは、一部の最適化を有効にし、他の最適化を無効にします。 これ
Java言語で要求されるように、オプションはJavaフロントエンドでデフォルトで有効になっています
仕様。

-例外
例外処理を有効にします。 例外を伝播するために必要な追加のコードを生成します。 為に
これは、GCC がすべてのフレームの巻き戻し情報を生成することを意味します。
これにより、データ サイズのオーバーヘッドが大きくなる可能性があります。
実行に影響します。 このオプションを指定しない場合、GCC はデフォルトで有効にします
通常は例外処理が必要な C++ などの言語の場合は、例外処理を無効にします。
通常それを必要としない C のような言語。 ただし、有効にする必要がある場合があります
例外を除いて適切に相互運用する必要がある C コードをコンパイルするときのこのオプション
C++ で書かれたハンドラ。 次の場合は、このオプションを無効にすることもできます。
例外処理を使用しない古い C++ プログラムのコンパイル。

-fnon-call-例外
トラップ命令が例外をスローできるようにするコードを生成します。 これに注意してください
どこにも存在しないプラットフォーム固有のランタイムサポートが必要です。 さらに、
それは許可するだけです トラッピング 例外をスローするための命令、つまりメモリ参照または
浮動小数点命令。 任意のから例外をスローすることはできません
「SIGALRM」などのシグナルハンドラー。

-funwind-テーブル
そして -例外ただし、必要な静的データを生成するだけですが、
生成されたコードに他の方法で影響を与えることはありません。 通常は有効にしない
このオプション; 代わりに、この処理を必要とする言語プロセッサはそれを有効にします
あなたに代わって。

-fasynchronous-unwind-tables
ターゲット マシンでサポートされている場合、dwarf2 形式でアンワインド テーブルを生成します。 テーブルは
各命令境界で正確であるため、スタックの巻き戻しに使用できます。
非同期イベント(デバッガーやガベージコレクターなど)。

-fpcc-構造体-リターン
「短い」「構造体」と「共用体」の値を、長い値ではなく、長い値のようにメモリに返します。
レジスタ。 この規則は効率が低くなりますが、次のことができるという利点があります。
GCCでコンパイルされたファイルと他のコンパイラでコンパイルされたファイル間の相互呼び出し可能性
特にポータブルCコンパイラ(pcc)。

メモリ内の構造を返すための正確な規則は、ターゲットによって異なります
構成マクロ。

短い構造とユニオンは、サイズと配置が一部のものと一致するものです。
整数型。

警告: でコンパイルされたコード -fpcc-構造体-リターン スイッチはバイナリ互換ではありません
でコンパイルされたコードで -freg-構造体-リターン スイッチ。 非に準拠するためにそれを使用してください
デフォルトのアプリケーションバイナリインターフェイス。

-freg-構造体-リターン
可能な場合は、レジスタの「struct」値と「union」値を返します。 これはより効率的です
小さな構造物の場合 -fpcc-構造体-リターン.

どちらも指定しない場合 -fpcc-構造体-リターン また -freg-構造体-リターン、GCCのデフォルトは
ターゲットの標準の規則。 標準的な規則がない場合は、
GCCのデフォルトは -fpcc-構造体-リターン、GCCがプリンシパルであるターゲットを除く
コンパイラ。 そのような場合は、標準を選択でき、より効率的なものを選択しました
代替を登録します。

警告: でコンパイルされたコード -freg-構造体-リターン スイッチはバイナリ互換ではありません
でコンパイルされたコードで -fpcc-構造体-リターン スイッチ。 非に準拠するためにそれを使用してください
デフォルトのアプリケーションバイナリインターフェイス。

-fshort-列挙型
宣言された範囲に必要なバイト数だけを「列挙型」タイプに割り当てます。
可能な値。 具体的には、「enum」タイプは最小のものと同等になります
余裕のある整数型。

警告:   -fshort-列挙型 スイッチを使用すると、GCCはバイナリではないコードを生成します
そのスイッチなしで生成されたコードと互換性があります。 非に準拠するためにそれを使用してください
デフォルトのアプリケーションバイナリインターフェイス。

-fshort-double
「ダブル」は「フロート」と同じサイズを使用してください。

警告:   -fshort-double スイッチを使用すると、GCCはバイナリではないコードを生成します
そのスイッチなしで生成されたコードと互換性があります。 非に準拠するためにそれを使用してください
デフォルトのアプリケーションバイナリインターフェイス。

-fshort-wchar
の基になる型をオーバーライドします wchar_t ようにするには 短い 署名されていない int型 その代わりに
ターゲットのデフォルト。 このオプションは、実行するプログラムを作成する場合に便利です。
ワイン。

警告:   -fshort-wchar スイッチを使用すると、GCCはバイナリではないコードを生成します
そのスイッチなしで生成されたコードと互換性があります。 非に準拠するためにそれを使用してください
デフォルトのアプリケーションバイナリインターフェイス。

-fno-common
Cコードでは、初期化されていないグローバル変数の配置を制御します。 UnixCコンパイラ
従来、このような変数の複数の定義を異なるもので許可してきました
変数を共通のブロックに配置することによるコンパイル単位。 これが動作です
によって指定された -fcommon、およびほとんどのターゲットでのGCCのデフォルトです。 一方で、
この動作はISOCでは必要ありません。一部のターゲットでは、速度またはコードが含まれる場合があります。
変数参照のサイズペナルティ。 The -fno-common オプションは、
コンパイラは、初期化されていないグローバル変数をオブジェクトのデータセクションに配置する必要があります
それらを共通のブロックとして生成するのではなく、ファイル。 これには、
XNUMX つの異なるコンパイルで同じ変数が (「extern」なしで) 宣言されている場合、
それらをリンクすると、複数定義エラーが発生します。 この場合、コンパイルする必要があります
  -fcommon 代わりは。 でコンパイル -fno-common それが対象となるターゲットに役立ちます
より良いパフォーマンスを提供します、またはプログラムが動作することを確認したい場合
初期化されていない変数宣言を常にこのように扱う他のシステム。

-fno-ident
無視する #identity 指令。

-finhibit サイズ ディレクティブ
「.size」アセンブラディレクティブなど、問題を引き起こすようなものは出力しないでください。
関数が中央で分割され、XNUMXつの半分が遠くの場所に配置されている場合
メモリ内で離れて。 このオプションは、コンパイル時に使用されます crtstuff.c; あなたは必要ないはずです
他の用途に使用します。

-fverbose-asm
生成されたアセンブリコードに追加の解説情報を追加して、より多くの情報を作成します
読み取り可能。 このオプションは通常、実際に読む必要がある人にのみ使用されます。
生成されたアセンブリコード(おそらくコンパイラ自体のデバッグ中)。

-fno-verbose-asm、デフォルトでは、追加情報が省略され、
XNUMXつのアセンブラファイルを比較するときに便利です。

-frecord-gcc-スイッチ
このスイッチにより、コンパイラを呼び出すために使用されたコマンド ラインが
作成中のオブジェクトファイルに記録されます。 このスイッチは実装のみです
一部のターゲットでは、記録の正確な形式はターゲットおよびバイナリ ファイル形式です。
依存しますが、通常はASCIIテキストを含むセクションの形式を取ります。 これ
スイッチはに関連しています -fverbose-asm スイッチ、しかしそのスイッチは記録するだけです
アセンブラ出力ファイル内の情報はコメントとして表示されるため、オブジェクトに到達することはありません
ファイル。 も参照してください -grecord-gcc-スイッチ コンパイラオプションをに格納する別の方法
オブジェクトファイル。

-fpic
共有ライブラリでの使用に適した位置独立コード(PIC)を生成する場合
ターゲットマシンでサポートされています。 このようなコードは、
グローバルオフセットテーブル(GOT)。 ダイナミックローダーは、次の場合にGOTエントリを解決します。
プログラムが起動します(ダイナミックローダーはGCCの一部ではなく、オペレーティングの一部です。
システム)。 リンクされた実行可能ファイルのGOTサイズがマシン固有の最大値を超えた場合
サイズの場合、リンカーから次のようなエラーメッセージが表示されます。 -fpic 動作しません; の
その場合は、で再コンパイルします -fPIC 代わりは。 (これらの最大値は、SPARCでは8k、32kです。
m68k と RS/6000 で。 386 にはそのような制限はありません。)

位置に依存しないコードには特別なサポートが必要であるため、
特定のマシン。 386 の場合、GCC は System V の PIC をサポートしますが、Sun の PIC はサポートしません
386i。 IBM RS / 6000用に生成されたコードは、常に位置に依存しません。

このフラグが設定されている場合、マクロ「__pic__」および「__PIC__」は1に定義されます。

-fPIC
ターゲットマシンでサポートされている場合は、位置に依存しないコードを発行します。
動的リンクとグローバルオフセットテーブルのサイズの制限の回避。 これ
オプションは、m68k、PowerPC、およびSPARCで違いを生みます。

位置に依存しないコードには特別なサポートが必要であるため、
特定のマシン。

このフラグが設定されている場合、マクロ「__pic__」および「__PIC__」は2に定義されます。

-fpie
-fPIE
これらのオプションは次のようになります -fpic & -fPIC、ただし、位置に依存しないコードを生成
実行可能ファイルにのみリンクできます。 通常、これらのオプションは次の場合に使用されます -パイ GCC
オプションは、リンク中に使用されます。

-fpie & -fPIE どちらもマクロ「__pie__」と「__PIE__」を定義します。 マクロには
の値1 -fpie と2用 -fPIE.

-fno-ジャンプテーブル
より効率的な場合でも、switchステートメントにジャンプテーブルを使用しないでください
他のコード生成戦略よりも。 このオプションは、
-fpic or -fPIC ダイナミックリンカの一部を形成し、できないコードを構築するため
ジャンプテーブルのアドレスを参照します。 一部のターゲットでは、ジャンプテーブルは必要ありません
GOTとこのオプションは必要ありません。

-修正済み-REG
名前の付いたレジスタを扱います REG 固定レジスタとして; 生成されたコードは決して参照してはなりません
それ(おそらくスタックポインタ、フレームポインタ、またはその他の固定された役割を除く)。

REG レジスタの名前である必要があります。 受け入れられるレジスタ名はマシン固有です
およびは、マシン記述マクロファイルの「REGISTER_NAMES」マクロで定義されています。

このフラグは、XNUMX方向の選択を指定するため、負の形式にはなりません。

-fcall-used-REG
名前の付いたレジスタを扱います REG 関数によって破壊される割り当て可能なレジスタとして
呼び出します。 これは、一時的または変数に割り当てられる可能性があります。
電話。 この方法でコンパイルされた関数は、レジスタを保存および復元しません。 REG.

このフラグをフレーム ポインタまたはスタック ポインタで使用するとエラーになります。 これの使用
マシンの実行で広範な役割が固定されている他のレジスタのフラグ
モデルは悲惨な結果をもたらします。

このフラグは、XNUMX方向の選択を指定するため、負の形式にはなりません。

-fcall-保存済み-REG
名前の付いたレジスタを扱います REG 関数によって保存された割り当て可能なレジスタとして。 そうかも知れない
コール全体に存在する一時的または変数にも割り当てられます。 機能
この方法でコンパイルすると、レジスタが保存および復元されます REG 彼らがそれを使用する場合。

このフラグをフレーム ポインタまたはスタック ポインタで使用するとエラーになります。 これの使用
マシンの実行で広範な役割が固定されている他のレジスタのフラグ
モデルは悲惨な結果をもたらします。

このフラグをレジスタに使用すると、別の種類の災害が発生します。
どの関数値が返されるか。

このフラグは、XNUMX方向の選択を指定するため、負の形式にはなりません。

-fpack-struct [=n]
値を指定せずに、すべての構造体部材を穴なしで一緒に梱包します。 いつ
値が指定されている(XNUMXの小さな累乗である必要があります)、構造体メンバーをパックします
この値に従って、最大の配置を表します(つまり、
これよりも大きいデフォルトのアラインメント要件は、アラインされていない可能性がある出力になります
次の取り付け場所で。

警告:   -fpack-構造体 スイッチを使用すると、GCCはバイナリではないコードを生成します
そのスイッチなしで生成されたコードと互換性があります。 さらに、それはコードを作ります
最適ではありません。 これを使用して、デフォルト以外のアプリケーションバイナリインターフェイスに準拠します。

-finstrument-関数
関数への入り口と出口のインストルメンテーション呼び出しを生成します。 機能直後
入口と関数出口の直前に、次のプロファイリング関数が呼び出されます
現在の関数のアドレスとその呼び出しサイト。 (一部のプラットフォームでは、
「__builtin_return_address」は現在の機能を超えて機能しないため、呼び出しサイト
そうしないと、プロファイリング機能で情報を利用できない場合があります。)

void __cyg_profile_func_enter(void * this_fn、
void * call_site);
void __cyg_profile_func_exit(void * this_fn、
void * call_site);

最初の引数は、現在の関数の開始アドレスです。
シンボルテーブルで正確に調べました。

このインストルメンテーションは、他の関数でインラインに拡張された関数に対しても実行されます。
プロファイリング呼び出しは、概念的にインライン関数が入力される場所を示します。
そして終了しました。 これは、そのような関数のアドレス可能なバージョンが利用可能でなければならないことを意味します。
関数のすべての使用がインラインで展開されている場合、これは追加の
コードサイズの拡大。 使用する場合 外部 インライン あなたのCコードでは、アドレス可能な
そのような関数のバージョンを提供する必要があります。 (普段はそうなんですが、
運が良ければ、オプティマイザーが常に関数をインラインで展開する場合、
静的コピーを提供せずに逃げました。)

関数に属性「no_instrument_function」を指定できます。この場合、これは
計装は行われません。 これは、たとえばプロファイリングに使用できます。
上記の関数、優先度の高い割り込みルーチン、およびその元となる関数
プロファイリング関数を安全に呼び出すことはできません(おそらく、シグナルハンドラーの場合
プロファイリングルーチンは、出力を生成するか、メモリを割り当てます)。

-finstrument-functions-exclude-file-list =file,file、...
インストルメンテーションから除外される機能のリストを設定します(説明を参照してください)
「-finstrument-functions」の)。 関数定義を含むファイルが一致する場合
のいずれかと file、その場合、その関数はインストルメントされません。 試合は上で行われます
サブストリング: file パラメータはファイル名のサブストリングであり、次のように見なされます。
一致する。

例:

-finstrument-functions-exclude-file-list = / bits / stl、include / sys

パス名に「/bits/stl」が含まれるファイルで定義されたインライン関数を除外します
または「include/sys」。

何らかの理由で、文字「,」を sym、 書きます '、'。 為に
例: "-finstrument-functions-exclude-file-list=',,tmp'" (一重引用符に注意してください)
オプションを囲む)。

-finstrument-functions-exclude-function-list =sym,sym、...
これは「-finstrument-functions-exclude-file-list」に似ていますが、このオプションは
インストルメンテーションから除外される関数名のリスト。 への関数名
一致するのは、「ベクター」などのユーザーに表示される名前です。 何とか(定数ベクトル&)",
内部マングル名 (例: "_Z4blahRSt6vectorIiSaiEE") ではありません。 試合は終了
部分文字列について: sym パラメータは関数名の部分文字列です。
一致すると見なされます。 C99 および C++ 拡張識別子の場合、関数名
ユニバーサル文字名を使用せずに、UTF-8 で指定する必要があります。

-fstack-チェック
スタックの境界を超えないことを確認するコードを生成します。 君は
複数のスレッドがある環境で実行している場合は、このフラグを指定する必要があります。
ただし、スタック以降、シングルスレッド環境で指定する必要があることはめったにありません
スタックがXNUMXつしかない場合、オーバーフローはほぼすべてのシステムで自動的に検出されます。

この切り替えによって実際にチェックが行われるわけではないことに注意してください。 運営
システムまたは言語ランタイムがそれを行う必要があります。 スイッチにより、コードが生成されます。
スタックが拡張されていることを確認してください。

さらに文字列パラメーターを指定できます。「no」はチェックなし、「generic」は「generic」を意味します。
古いスタイルのチェックの使用を強制することを意味し、「特定」は最良のチェックを使用することを意味します
メソッドで、bare と同等です -fstack-チェック.

古いスタイルのチェックは、特定のターゲットサポートを必要としない一般的なメカニズムです。
コンパイラですが、次の欠点があります。

1. ラージ オブジェクトの割り当て戦略の変更: それらは常に割り当てられます。
サイズが固定しきい値を超えた場合は動的に。

2.関数の静的フレームのサイズの制限を修正しました。
特定の機能、スタックチェックは信頼できず、警告が発行されます
コンパイラ。

3.非効率性:変更された割り当て戦略と一般的な
実装すると、コードのパフォーマンスが妨げられます。

古いスタイルのスタック チェックは、「特定」のフォールバック メソッドでもあることに注意してください。
ターゲットのサポートがコンパイラに追加されました。

-fstack-limit-register =REG
-fstack-limit-symbol =sym
-fno-スタック制限
スタックが特定の値を超えないようにするためのコードも生成します
レジスタの値またはシンボルのアドレス。 スタックがそれを超えて成長する場合
値、シグナルが発生します。 ほとんどのターゲットでは、シグナルはターゲットの前に発生します。
スタックは境界をオーバーランするため、シグナルを取得せずにキャッチすることが可能です。
特別な注意事項。

たとえば、スタックが絶対アドレスで始まる場合 0x80000000 下向きに成長し、
あなたは旗を使うことができます -fstack-limit-symbol = __ stack_limit &
-Wl、--defsym、__ stack_limit = 0x7ffe0000 128KBのスタック制限を適用します。 ご了承ください
これはGNUリンカーでのみ機能する可能性があります。

-fsplit-スタック
スタックがオーバーフローする前にスタックを自動的に分割するコードを生成します。 結果として
プログラムには不連続なスタックがあり、プログラムがオーバーフローできない場合にのみオーバーフローする可能性があります
それ以上のメモリを割り当てます。 これは、スレッド化されたプログラムを実行するときに最も役立ちます。
各スレッドに使用する適切なスタックサイズを計算する必要がなくなりました。 これは
現在、GNU/Linux を実行している i386 および x86_64 バックエンドに対してのみ実装されています。

コードをコンパイルした場合 -fsplit-スタック なしでコンパイルされたコードを呼び出す -fsplit-スタック、 そこ
後者のコードを実行するために利用できるスタックスペースがあまりない場合があります。 すべてをコンパイルする場合
ライブラリコードを含むコード -fsplit-スタック オプションではない場合、リンカーは次のことができます
これらの呼び出しを修正して、コードをコンパイルせずにコンパイルするようにします -fsplit-スタック 常に大きい
スタック。 これのサポートは、GNUbinutilsリリースのゴールドリンカーに実装されています
2.21以降。

-fleading-アンダースコア
このオプションとそれに対応するもの、 -fno-先頭のアンダースコア、強制的に方法を変更するC
シンボルはオブジェクトファイルで表されます。 XNUMXつの用途は、レガシーとのリンクを支援することです
アセンブリコード。

警告:   -fleading-アンダースコア スイッチを使用すると、GCCはそうでないコードを生成します
そのスイッチなしで生成されたコードと互換性のあるバイナリ。 に準拠するために使用します
デフォルト以外のアプリケーションバイナリインターフェイス。 すべてのターゲットが完全なサポートを提供するわけではありません
このスイッチ用。

-ftls-model =
使用するスレッドローカルストレージモデルを変更します。 The 引数は次のいずれかである必要があります
「global-dynamic」、「local-dynamic」、「initial-exec」、または「local-exec」。

デフォルトなし -fpic 「初期実行」です。 と -fpic デフォルトは
「グローバルダイナミック」。

-fvisibility =デフォルト|内部|非表示|保護
デフォルトの ELF イメージ シンボルの可視性を指定されたオプションに設定します。 --- すべてのシンボルが
コード内でオーバーライドされない限り、これでマークされます。 この機能を使用すると、
共有オブジェクトライブラリのリンクとロード時間を大幅に改善し、より多くを生成します
最適化されたコード、ほぼ完全なAPIエクスポートを提供し、シンボルの衝突を防ぎます。 です
強く 配布する共有オブジェクトでこれを使用することをお勧めします。

命名法にもかかわらず、「デフォルト」は常にパブリックを意味します。 つまり、リンク可能
共有オブジェクトの外部から。 「保護」と「内部」はかなり役に立たない
実際の使用では、他の一般的に使用されるオプションは「非表示」のみです。 の
デフォルトの場合 -視認性 指定されていない場合は「デフォルト」です。つまり、すべてのシンボルを作成します
public---これにより、以前のバージョンの GCC と同じ動作が発生します。

ELFシンボルが正しいことを確認することによって提供される利点の適切な説明
可視性は、UlrichDrepperによる「共有ライブラリの書き方」によって与えられます(
で見つかりましたhttp://people.redhat.com/~drepper/>)---しかし、優れたソリューションが作られました
デフォルトがパブリックであるときに非表示のものをマークするこのオプションによって可能になるのは、
デフォルトの非表示とマークのものを公開します。 これは Windows 上の DLL の標準であり、
  -fvisibility = hidden および「__attribute__((visibility( "default")))」の代わりに
"__declspec(dllexport)"は、同じ構文でほぼ同じセマンティクスを取得します。
これは、クロスプラットフォームプロジェクトで作業する人にとって大きな恩恵です。

既存のコードに可視性のサポートを追加する場合は、 #プラグマ GCC
視認性 使用の。 これは、設定したい宣言を囲むことで機能します
with の可視性 (例) #プラグマ GCC 視認性 プッシュ (非表示) & #プラグマ GCC
視認性 ポップ. シンボルの可視性を表示する必要があることに注意してください as of  
API インタフェース 縮小することはできません。 したがって、すべての新しいコードは、常に可視性を指定する必要があります。
デフォルトではありません。 つまり、ローカル DSO 内でのみ使用する宣言は、 常に
PLT の間接的なオーバーヘッドを回避するために、明示的に非表示としてマークする --- これを行う
十分に明確であることは、コードの可読性と自己文書化にも役立ちます。 ご了承ください
ISO C++ 仕様の要件により、演算子 new と演算子 delete は必須です。
常にデフォルトの可視性になります。

プロジェクト外部からのヘッダー、特にシステムヘッダーと
使用している他のライブラリのヘッダーは、でコンパイルされることを期待していない可能性があります
デフォルト以外の可視性。 はっきり言う必要があるかもしれません #プラグマ GCC
視認性 プッシュ(デフォルト) そのようなヘッダーを含める前に。

外部 宣言は影響を受けません -視認性、したがって、多くのコードが
で再コンパイル -fvisibility = hidden 変更なし。 ただし、これは
への呼び出し 外部 明示的な可視性のない関数は PLT を使用するため、より多くの
使用すると効果的 __属性 ((可視性)) および #プラグマ GCC 視認性 伝えるために
コンパイラ 外部 宣言は非表示として扱う必要があります。

注意してください -視認性 C++のあいまいなリンケージエンティティに影響します。 これは、
インスタンス、DSO 間でスローされる例外クラスは明示的に指定する必要があります。
デフォルトの可視性でマークされているため、 タイプ情報 ノード間で統合されます
DSO。

これらのテクニックの概要、それらの利点、およびそれらの使用方法は次のとおりです。
<http://gcc.gnu.org/wiki/Visibility>.

-fstrict-volatile-ビットフィールド
このオプションは、揮発性ビットフィールド(または他の構造)にアクセスする場合に使用する必要があります
フィールド、ただしコンパイラは通常これらのタイプを尊重します)単一を使用する必要があります
フィールドのタイプの幅へのアクセス。可能であれば自然な配置に合わせます。
たとえば、メモリマップドペリフェラルレジスタを備えたターゲットは、そのようなすべてを必要とする場合があります
アクセスは 16 ビット幅です。 このフラグを使用すると、ユーザーはすべてのペリフェラル ビットを宣言できます。
フィールドを「unsigned short」として (これらのターゲットでは short が 16 ビットであると仮定して) GCC を強制します。
おそらく、より効率的な 16 ビット アクセスの代わりに 32 ビット アクセスを使用します。

このオプションを無効にすると、コンパイラは最も効率的な命令を使用します。 の
前の例では、32 ビットのロード命令である可能性があります。
ビットフィールドの一部を含まない、またはメモリマップされたバイトにアクセスする
更新されているものとは無関係のレジスタ。

ターゲットが厳密なアライメントを必要とし、フィールド タイプを尊重する必要がある場合
このアライメントに違反すると、警告が発行されます。 フィールドに「packed」属性がある場合、
アクセスは、フィールド タイプを尊重せずに行われます。 フィールドにない場合
"packed" 属性の場合、アクセスはフィールド タイプを尊重して行われます。 どちらの場合も、GCC
は、ユーザーが認識していないターゲット ハードウェアについて何かを知っていることを前提としています。

このオプションのデフォルト値は、アプリケーションのバイナリインターフェイスによって決定されます。
ターゲットプロセッサ。

ENVIRONMENT


このセクションでは、GCCの動作に影響を与えるいくつかの環境変数について説明します。 いくつか
それらのいくつかは、さまざまな種類を検索するときに使用するディレクトリまたはプレフィックスを指定することによって機能します
ファイルの。 一部は、コンパイル環境の他の側面を指定するために使用されます。

次のようなオプションを使用して、検索する場所を指定することもできます。 -B, -I & -L.
これらは、環境変数を使用して指定された場所よりも優先されます。
GCCの構成で指定されたものよりも優先されます。

言語
LC_CTYPE
LC_MESSAGES
LC_ALL
これらの環境変数は、GCCがローカリゼーション情報を使用する方法を制御します
これにより、GCCはさまざまな全国大会と連携することができます。 GCCはロケールを検査します
カテゴリ LC_CTYPE & LC_MESSAGES そうするように構成されている場合。 これらのロケール
カテゴリは、インストールでサポートされている任意の値に設定できます。 典型的な値は
en_GB.UTF-8 UTF-8でエンコードされた英国の英語の場合。

  LC_CTYPE 環境変数は文字分類を指定します。 GCCはそれを使用して
文字列の文字境界を決定します。 これはいくつかのマルチバイトに必要です
他の方法では解釈される引用符とエスケープ文字を含むエンコーディング
文字列の終わりまたはエスケープとして。

  LC_MESSAGES 環境変数は、診断で使用する言語を指定します
メッセージ。

Status LC_ALL 環境変数が設定されている場合、の値をオーバーライドします LC_CTYPE &
LC_MESSAGES; さもないと、 LC_CTYPE & LC_MESSAGES デフォルトの値は 言語
環境変数。 これらの変数のいずれも設定されていない場合、GCCはデフォルトで従来型になります
C英語の振る舞い。

TMPDIR
If TMPDIR が設定されている場合、一時ファイルに使用するディレクトリを指定します。 GCCは
として使用されるコンパイルのXNUMXつのステージの出力を保持する一時ファイル
次のステージへの入力:たとえば、プリプロセッサの出力。
適切なコンパイラへの入力。

GCC_COMPARE_DEBUG
設定 GCC_COMPARE_DEBUG 合格とほぼ同等です -f比較デバッグ
コンパイラドライバ。 詳細については、このオプションのドキュメントを参照してください。

GCC_EXEC_PREFIX
If GCC_EXEC_PREFIX が設定されている場合、の名前で使用するプレフィックスを指定します
コンパイラによって実行されるサブプログラム。 このプレフィックスを組み合わせると、スラッシュは追加されません
サブプログラムの名前を使用しますが、スラッシュで終わるプレフィックスを指定できます。
あなたが望む。

If GCC_EXEC_PREFIX が設定されていない場合、GCC は適切なプレフィックスを見つけようとします。
呼び出されたパス名に基づいて使用します。

GCCが指定されたプレフィックスを使用してサブプログラムを見つけることができない場合、GCCは
サブプログラムの通常の場所。

のデフォルト値 GCC_EXEC_PREFIX is プレフィックス/lib/ gcc / コラボレー 接頭辞 のプレフィックスです
インストールされたコンパイラ。 多くの場合 接頭辞 を実行したときの「プレフィックス」の値です
configure スクリプト。

で指定された他のプレフィックス -B このプレフィックスよりも優先されます。

このプレフィックスは、次のようなファイルの検索にも使用されます。 crt0.o リンクに使用されます。

さらに、プレフィックスは、検索するディレクトリを見つける際に通常とは異なる方法で使用されます
ヘッダーファイル用。 名前が通常始まる標準ディレクトリごとに
  / usr / local / lib / gcc (より正確には、 GCC_INCLUDE_DIR)、GCCは試行します
指定されたプレフィックスで始まるものを置き換えて、代替ディレクトリを作成します
名前。 したがって、 -Bfoo /、GCCが検索します foo / bar 通常検索する場所
/ usr / local / lib / bar. これらの代替ディレクトリが最初に検索されます。 標準
ディレクトリが次に来ます。 標準ディレクトリが設定された 接頭辞 その後
の値 接頭辞 の代わりに GCC_EXEC_PREFIX ヘッダーファイルを探すとき。

コンパイラ_パス
の値 コンパイラ_パス コロンで区切られたディレクトリのリストです。 パス.
GCCは、サブプログラムを検索するときに、このように指定されたディレクトリを試行します。
を使用してサブプログラムを検索する GCC_EXEC_PREFIX.

ライブラリパス
の値 ライブラリパス コロンで区切られたディレクトリのリストです。 パス.
ネイティブコンパイラとして設定されている場合、GCCはこのように指定されたディレクトリを次の場合に試行します。
特別なリンカーファイルを検索します。 GCC_EXEC_PREFIX.
GCCを使用したリンクでは、通常のライブラリを検索するときにこれらのディレクトリも使用されます
-l オプション(ただし、で指定されたディレクトリ -L 最初に来ます)。

言語
この変数は、ロケール情報をコンパイラーに渡すために使用されます。 XNUMXつの方法
この情報は、文字のときに使用される文字セットを決定するために使用されます
リテラル、文字列リテラル、およびコメントは、CおよびC++で解析されます。 コンパイラが
マルチバイト文字を許可するように構成されている場合、次の値は 言語  
認識された:

C-JIS
JIS文字を認識します。

C-SJIS
SJIS文字を認識します。

C-EUCJP
EUCJP文字を認識します。

If 言語 定義されていないか、他の値がある場合、コンパイラは使用します
マルチバイトを認識して変換するための、デフォルトのロケールで定義されている mblen および mbtowc
文字。

いくつかの追加の環境変数は、プリプロセッサの動作に影響を与えます。

CPATH
C_INCLUDE_PATH
CPLUS_INCLUDE_PATH
OBJC_INCLUDE_PATH
各変数の値は、特殊文字で区切られたディレクトリのリストです。
ような パス、ヘッダーファイルを検索します。 特殊文字、
「PATH_SEPARATOR」はターゲットに依存し、GCCビルド時に決定されます。 Microsoftの場合
Windowsベースのターゲットはセミコロンであり、他のほとんどすべてのターゲットではセミコロンです。
結腸。

CPATH で指定されているかのように検索するディレクトリのリストを指定します -I、 だけど
で与えられたパスの後 -I コマンドラインのオプション。 この環境変数
前処理されている言語に関係なく使用されます。

残りの環境変数は、特定の前処理時にのみ適用されます
示された言語。 それぞれが、検索するディレクトリのリストをあたかも指定します。
で指定 -isystem、ただし、で指定されたパスの後 -isystem のオプション
コマンドライン。

これらすべての変数で、空の要素がコンパイラに現在の要素を検索するように指示します
作業ディレクトリ。 空の要素は、パスの最初または最後に表示できます。 にとって
インスタンス、の値が CPATH は「:/ special / include」で、これはと同じ効果があります
-私。 -I / special / include.

DEPENDENCIES_OUTPUT
この変数が設定されている場合、その値は、Makebasedの依存関係を出力する方法を指定します
コンパイラによって処理される非システムヘッダーファイル。 システムヘッダーファイルは
依存関係の出力では無視されます。

の値 DEPENDENCIES_OUTPUT 単なるファイル名にすることができます。その場合、Makeルール
ソースファイル名からターゲット名を推測して、そのファイルに書き込まれます。 または
値は次の形式にすることができます file ターゲット、この場合、ルールはファイルに書き込まれます file
ターゲット ターゲット名として。

つまり、この環境変数はオプションを組み合わせるのと同じです -んん
& -MF、オプション付き -MT スイッチも。

SUNPRO_DEPENDENCIES
この変数はと同じです DEPENDENCIES_OUTPUT (上記を参照)、そのシステムを除く
ヘッダーファイルは無視されないので、 -M ではなく -んん。 しかし、
メイン入力ファイルへの依存は省略されます。

onworks.net サービスを使用してオンラインで g++-4.7 を使用する


無料のサーバーとワークステーション

Windows と Linux のアプリをダウンロード

Linuxコマンド

Ad