これはコマンドaarch64-linux-gnu-gccであり、Ubuntu Online、Fedora Online、Windowsオンラインエミュレーター、MACOSオンラインエミュレーターなどの複数の無料オンラインワークステーションのXNUMXつを使用してOnWorks無料ホスティングプロバイダーで実行できます。
プログラム:
NAME
gcc-GNUプロジェクトCおよびC ++コンパイラ
SYNOPSIS
gcc [-c|-S|-E] [-std =標準]
[-g] [-pg] [-Oレベル]
[-W警告する...] [-Wpedantic]
[-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フォーマット 等々。 これらのほとんどは正と負の両方を持っています
フォーム; の負の形式 -ふふー is -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[-スリム] -fada-spec-parent =単位
-fdump-go-spec =file
C 言語 オプション
-アンシ -std =標準 -fgnu89-インライン -補助情報 ファイル名
-休耕-パラメータなし-可変個引数関数 -fno-asm -fno-builtin -fno-builtin-function
-おびえた -自立 -fopenacc -fopenmp -fopenmp-simd -fms-拡張機能
-fplan9-拡張機能 -三重音字 -伝統的な -従来の-cpp -休耕-単精度
-fcond-不一致 -亜麻-ベクトル-変換 -fsigned-ビットフィールド -fsigned-char
-funsigned-ビットフィールド -funsigned-char
C + + 言語 オプション
-fabi-version =n -fno-アクセス制御 -fcheck-新しい -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 -fsized-割り当て解除 -fstats
-ftemplate-backtrace-limit =n -ftemplate-depth =n -fno-threadsafe-statics
-fuse-cxa-atexit -fno-弱い -nostdinc ++ -fvisibility-inlines-hidden
-fvtable-verify =[STD|事前初期化|なし] -fvtv-カウント -fvtv-デバッグ -fvisibility-ms-compat
-fext-数値リテラル -わび=n -ワビタグ -Wconversion-null -Wctor-dtor-プライバシー
-Wdelete-非仮想-dtor -Wliteral-サフィックス -狭める -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 -fno-local-ivars
-fivar-visibility =[公共|保護された|プライベート|パッケージ] -freplace-objc-classes
-fzero-リンク -gen-decls -Wassign-インターセプト -プロトコルなし -Wセレクター
-Wstrict-selector-match -Wundeclared-セレクター
言語 独立した オプション
-fmessage-length =n -fdiagnostics-show-location =[かつて|すべての行]
-fdiagnostics-color =[オート|決して|常に] -fno-diagnostics-show-option
-fno-diagnostics-show-caret
警告 オプション
-fsyntaxのみ -fmax-errors =n -Wpedantic -衒学的エラー -w -ウェクストラ -壁
-住所 -Waggregate-return -Waggressive ループの最適化 -Warray 境界
-Warray-bounds =n -Wbool-比較 -Wno-属性 -Wno-builtin-macro-再定義
-Wc90-c99-互換 -Wc99-c11-互換 -Wc ++-互換性 -Wc ++ 11-互換性 -Wc ++ 14-互換性
-Wcast-align -Wcast-qual -Wchar-添え字 -破壊された -コメント
-条件付きでサポート -Wコンバージョン -Wcoverage-不一致 -日付-時刻
-Wdelete-不完全 -Wno-cpp -Wno-非推奨 -Wno-非推奨-宣言
-Wno-designated-init -Wdisabled-最適化 -Wno-discarded-qualifiers
-Wno-discarded-array-qualifiers -Wno-div-by-zero -Wdouble-プロモーション -空っぽの体
-ウェヌム-比較 -Wno-endif-labels -エラー -エラー= * -Wfatal-エラー -Wfloat-等しい
-Wフォーマット -Wformat = 2 -Wno-format-contains-null -Wno-format-extra-args
-Wformat-非文字 -Wformat-セキュリティ -Wformat 署名 -Wformat-y2k
-Wframe-larger-than =LEN -Wno-free-非ヒープオブジェクト -Wjump-miss-init
-無視-修飾子 -Wincompatibility-pointer-types -暗黙の了解
-Wimplicit 関数宣言 -Wimplicit-int -Winit-self -ウィンライン
-Wno-int-変換 -Wno-int-to-pointer-cast -Wno-無効なオフセット -Winvalid-pch
-Wlarger-than =LEN -Wunsafe ループの最適化 -Wlogical-op -Wlogical-not-かっこ
-ウーロン茶 -Wメイン -おそらく-初期化されていません -Wmemset-転置された引数 -中括弧がありません
-不足フィールド初期化子 -行方不明のインクルードディレクトリ -Wno-multichar -非ヌル
-Wnormalized =[なし|id|NFC|NFKC]
- ワード -オーバーフローなし -Wopenmp-simd -Woverlength-文字列 -Wパック
-Wpacked-bitfield-compat -パッド入り -かっこ -Wpedantic-ms-format
-Wno-pedantic-ms-format -Wpointer-算術 -Wno-pointer-to-int-cast -冗長-decls
-Wno-return-local-addr -Wreturnタイプ -Wシーケンスポイント -影 -Wno-shadow-ivar
-Wshift-count-negative -Wshift-count-overflow -Wsign-比較 -Wsign-変換
-Wfloat-変換 -Wsizeof-pointer-memaccess -配列引数のWsize
-Wstack-プロテクター -Wstack-usage =LEN -Wstrict-エイリアシング -Wstrict-aliasing = n
-Wstrict-オーバーフロー -Wstrict-overflow =n -Wsuggest-attribute =[純粋な|定数|返品不可|形式でアーカイブしたプロジェクトを保存します.]
-Wsuggest-final-types -Wsuggest-final-methods -提案-オーバーライド
-不足している形式属性 -Wスイッチ -Wswitch-デフォルト -Wswitch-enum -Wswitch-bool
-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手紙 -ダンプスペック -ダンプマシン -ダンプバージョン -fsanitize = -fsanitize-recover
-fsanitize-recover = -fasan-shadow-offset =数
-fsanitize-未定義-エラー時のトラップ -fcheck-ポインター境界 -fchkp-チェック不完全タイプ
-fchkp-first-field-has-own-bounds -fchkp-ナローバウンド
-fchkp-narrow-to-innermost-array -fchkp-最適化 -fchkp-use-fast-string-functions
-fchkp-use-nochk-string-functions -fchkp-use-static-bounds
-fchkp-use-static-const-bounds -fchkp-ゼロ動的サイズを無限として扱う
-fchkp-チェック-読み取り -fchkp-チェック-読み取り -fchkp-チェック-書き込み -fchkp-ストア境界
-fchkp-instrument-calls -fchkp-instrument-marked-only -fchkp-use-wrappers
-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-alias -fdump-ツリー-ch -fdump-tree-ssa[-n] -fdump-tree-pre[-n]
-fdump-tree-ccp[-n] -fdump-tree-dce[-n] -fdump-tree-giple[-生] -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-vtable-verify -fdump-tree-vrp[-n] -fdump-tree-storeccp[-n]
-fdump-final-insns =file -f比較デバッグ[=optsの] -f比較デバッグ秒
-feliminate-dwarf2-dups -fno-eliminate-unused-debug-types
-feliminate-未使用のデバッグシンボル -femit-class-debug-always -フェンブル-種類-パス
-フェンブル-種類-パス=範囲リスト -fdebug-types-セクション -fmem-レポート-wpa -fmem-レポート
-fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs -fopt-情報
-fopt-情報-オプション[=file] -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 + -gz[=type] -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]
最適化 オプション
-faggressive-loop-optimizations -falign-functions [=n] -falign-jumps [=n]
-falign-labels [=n] -falign-loops [=n] -連想数学 -fauto-プロファイル
-fauto-profile [=path] -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 -fdevirtualize-投機的に
-fdevvirtualize-at-ltrans -fdse -恐ろしくインライン化 -フィパスラ -高価な最適化
-ffat-lto-objects -ffast-数学 -有限数学のみ -フロートストア
-fexcess-precision = -前方伝播 -ffp-contract = -機能-セクション
-fgcse -fgcse-アフターリロード -fgcse-ラス -fgcse-lm -fgraphite-アイデンティティ -fgcse-sm
-fhoist-隣接ロード -fif-変換 -fif-変換2 -findirect-インライン化
-finline-関数 -finline-functions-call-once -finline-limit =n
-finline-small-functions -fipa-cp -fipa-cp-クローン -fipa-cp-アライメント -fipa-pta
-fipa-プロファイル -fipa-pure-const -fipa-リファレンス -fipa-icf -fira-algorithm =アルゴリズム
-fira-region =地域 -フィラホイスト圧力 -フィラループ圧力 -fno-ira-share-save-slots
-fno-ira-share-spill-slots -fira-verbose =n -fisolate-erroneous-paths-間接参照
-fisolate-erroneous-paths-属性 -fivopts -fkeep-インライン関数
-fkeep-static-consts -生存範囲の縮小 -floop-ブロック -floop-交換
-floop-strip-mine -floop-unroll-and-jam -floop-nest-最適化 -floop-Parallelize-all
-flra-remat -flto -flto-圧縮レベル -flto-partition =ALG -flto-レポート
-flto-レポート-wpa -fmerge-all-constants -fmerge-定数 -fmodulo-sched
-fmodulo-sched-allow-regmoves -fmove-ループ不変 -fno-分岐数-reg
-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-兄弟呼び出し
-部分的なインライン化 -fpeel-ループ -fpredictive-commoning -fprefetch-ループ配列
-fprofile-レポート -fprofile-修正 -fprofile-dir =path -fprofile-generate
-fprofile-generate =path -fprofile-使用 -fprofile-use =path -fprofile-values
-fprofile-reorder-functions -freciprocal-数学 フリー -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-フュージョン -fschedule-insn -fschedule-insns2 -fsection-アンカー
-選択的スケジューリング -f選択的スケジューリング2 -fsel-sched-パイプライン
-fsel-sched-pipelining-outer-loops -fsemantic-介入 -fshrink-wrap
-fsignaling-nans -fs単精度定数 -fsplit-ivs-in-unroller
-fsplit-wide-types -fssa-phiopt -fstack-プロテクター -fstack-protector-all
-fstack-protector-strong -fstack-protector-明示的 -fstdarg-opt -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-loop-vectorize
-ftree-parallelize-loops =n -ftree-pre -ftree-部分-pre -ftree-pta -ftree-reassoc
-ftree-シンク -ftree-slsr -ftree-sra -ftree-スイッチ変換 -ftree-tail-merge
-ftree-ter -ftree-ベクトル化 -ftree-vrp -一度に一台 -funroll-all-loops
-funroll-ループ -funsafe ループの最適化 -funsafe-数学の最適化
-funswitch-ループ -フィパラ アンローラー内の -f 変数展開 -fvect-cost-モデル -fvpt
-fweb -fwhole-プログラム -fwpa -ヒューズ-リンカー-プラグイン --パラメータ 名=値 -O -O0 -O1 -O2
-O3 -オス -オーファスト -オグ
プリプロセッサ オプション
-Aquestion=回答 -A-question[=回答] -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プリプロセッサ オプション -統合されていない-cpp
アセンブラ オプション
-わ、オプション -Xアセンブラー オプション
リンクス オプション
オブジェクトファイル名 -fuse-ld =リンクス -lライブラリ -nostartfiles -nodefaultlibs -nostdlib
-パイ -rdynamic -s -静的 -静的-libgcc -static-libstdc ++ -静的-libasan
-static-libtsan -静的-liblsan -静的-libubsan -静的-libmpx -static-libmpxwrappers
-共有 -共有-libgcc -シンボリック -T スクリプト -Wl、オプション -Xリンカー オプション -u シンボル -z
キーワード
ディレクトリ オプション
-B接頭辞 -IDIR -iplugindir =DIR -iquoteDIR -LDIR -specs =file -I- --sysroot =DIR
--no-sysroot-サフィックス
エスプレッソマシン 依存 オプション
AAArch64 オプション -mabi =名 -mbig-エンディアン -mlittle-エンディアン -mgeneral-regs-のみ
-mcmodel = tiny -mcmodel = small -mcmodel = large -mstrict-align -momit-リーフフレームポインター
-mno-省略リーフフレームポインター -mtls-dialect = desc -mtls-dialect = Traditional
-mtls-size =サイズ -mfix-cortex-a53-835769 -mno-fix-cortex-a53-835769
-mfix-cortex-a53-843419 -mno-fix-cortex-a53-843419 -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
ARC オプション -バレルシフター -mcpu =CPU -mA6 -mARC600 -mA7 -mARC700 -mdpfp
-mdpfp-コンパクト -mdpfp-高速 -mno-dpfp-lrsr -メア -mno-mpy -mmul32x16 -mmul64 -mnorm
-mspfp -mspfp-コンパクト -mspfp-高速 -msimd -msoft-float -mswap -mcrc -mdsp-packa -mdvbf
-ムロック -mmac-d16 -mmac-24 -mrtsc -mswape -mテレフォニー -mxy -ミスサイズ -mannotate-align
-マルクリナックス -marclinux_prof -メピローグ-cfi -mlong-calls -ミディアムコール -msdata
-mucb-mcount -mvolatile-キャッシュ -悪性コール -mauto-変更-reg -mbbit-のぞき穴 -mno-brcc
-mcase-vector-pcrel -mcompact-casesi -mno-cond-exec -ほぼ-cbranchsi -mexpand-adddi
-mindexed-loads -mlra -mlra-優先度-なし -mlra-priority-コンパクト mlra-優先度-
非コンパクト -mno-ミリコード -混合コード -mq-クラス -mRcq -mRcw -msize-level =レベル
-mtune =CPU -mmultcost =NUM -munalign-prob-threshold =確率
ARM オプション -mapcs フレーム -mno-apcs-frame -mabi =名 -mapcs-スタックチェック
-mno-apcs-stack-check -mapcs-フロート -mno-apcs-float -mapcs-リエントラント
-mno-apcs-リエントラント -msched-プロローグ -mno-sched-プロローグ -mlittle-エンディアン -mbig-エンディアン
-mfloat-abi =名 -mfp16-format =名 -mthumb-インターワーク -mno-thumb-interwork -mcpu =名
-XNUMX月=名 -mfpu =名 -mtune =名 -mprint-tune-info -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 -mpoke-関数名
-mthumb -マーム -mtpcs-フレーム -mtpcs-リーフ-フレーム -mcaller-スーパーインターワーキング
-mcallee-スーパーインターワーキング -mtp =名 -mtls-dialect =方言 -mword-再配置
-mfix-cortex-m3-ldrd -不整列アクセス -mneon-for-64ビット -mslow-フラッシュ データ
-masm-syntax-unified -mrestrict-それ
AVR オプション -mmcu =MCU -maccumulate-args -mbranch-cost =コスト -mcall-プロローグ -ミント8
-mn_flash =サイズ -mno-割り込み -mリラックス -mrmw -mstrict-X -mtiny-スタック -nodevicelib
-Waddr-space-convert
ブラックフィン オプション -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 =時間
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 -ムクリブ -mmusl -バイオニック -マンアンドロイド -tno-android-cc
-tno-android-ld
H8 / 300 オプション -mリラックス -mh -MS -分 -メクスル -mno-exr -ミント32 -悪性-300
HPPA オプション -XNUMX月=アーキテクチャタイプ -mdisable-fpregs -mdisable-インデックス作成
-mfast-間接呼び出し -メガガス -mgnu-ld -mhp-ld -mfixed-range =レジスタ範囲
-mジャンプインディレイ -mlinker-opt -mlong-calls -mlong-ロードストア -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 -静的
-スレッド
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
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
-mbig-エンディアン -mlittle-エンディアン -mxl-並べ替え -mxlモード-アプリモデル
MIPS オプション -THE -EB -XNUMX月=アーチ -mtune =アーチ -ミップス1 -ミップス2 -ミップス3 -ミップス4
-ミップス32 -mips32r2 -mips32r3 -mips32r5 -mips32r6 -ミップス64 -mips64r2 -mips64r3
-mips64r5 -mips64r6 -ミップス16 -mno-mips16 -mflip-mips16 -minterlink-圧縮
-mno-interlink-compressed -minterlink-mips16 -mno-インターリンク-mips16 -mabi =ABI
-マビコール -mno-abicalls -mshared -mno-共有 -mplt -mno-plt -mxgot -mno-xgot
-mgp32 -mgp64 -MFP32 -mfpxx -MFP64 -mhard-float -msoft-float -mno-float
-msingle-float -mdouble-float -modd-spreg -mno-奇数-spreg -mabs =モード -mnan =エンコーディング
-mdsp -mno-dsp -mdspr2 -mno-dspr2 -mmcu -mmno-mcu -メバ -mno-eva -mvirt -mno-virt
-mxpa -mno-xpa -マイクロミップス -mno-micromips -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-imadd -混乱-狂った
-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-rm7000 -mno-fix-rm7000
-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
勇気 オプション -meb -メル -mmul.x -mno-crt0
MSP430 オプション -msim -masm-hex -mmcu = -mcpu = -拡大 -小さい -mリラックス -mhwmult = -minrt
NDS32 オプション -mbig-エンディアン -mlittle-エンディアン -mreduced-regs -mfull-regs -mcmov -mno-cmov
-mperf-ext -mno-perf-ext -mv3push -mno-v3push -m16ビット -mno-16ビット -misr-vector-size =NUM
-mcache-block-size =NUM -XNUMX月=アーチ -mcmodel =コードモデル -mctor-dtor -mリラックス
ニオス II オプション -G NUM -mgpopt =オプション -mgpopt -mno-gpopt -メル -meb -mno-バイパス-キャッシュ
-mbypass-キャッシュ -mno-キャッシュ-揮発性 -mcache-揮発性 -mno-fast-sw-div -mfast-sw-div
-mhw-mul -mno-hw-mul -mhw-マルクス -mno-hw-mulx -mno-hw-div -mhw-div -mcustom-旅館=N
-mno-カスタム-旅館 -mcustom-fpu-cfg =名 -マル -msmallc -msys-crt0 =名 -msys-lib =名
Nvidia PTX オプション -m32 -m64 -mmainkernel
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 -m64ビットダブル -m32ビットダブル
RS / 6000 と PowerPC オプション -mcpu =CPUタイプ -mtune =CPUタイプ -mcmodel =コードモデル
-mpowerpc64 -マルティベック -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 -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 -mpower8-フュージョン -mno-mpower8-fusion
-mpower8-ベクトル -mno-power8-vector -mcrypto -mno-crypto -mdirect-移動 -mno-direct-move
-mquad-メモリ -mno-クアッドメモリ -mquad-メモリ-アトミック -mno-quad-memory-atomic
-mcompat-align-parm -mno-compat-align-parm -mupper-regs-df -mno-upper-regs-df
-マッパー-regs-sf -mno-upper-regs-sf -mupper-regs -mno-upper-regs
RX オプション -m64ビットダブル -m32ビットダブル -fpu -ノフプ -mcpu = -mbig-エンディアン-データ
-mlittle-エンディアン-データ -msmall-データ -msim -mno-sim -mas100-構文 -mno-as100-構文
-mリラックス -mmax-constant-size = -mint-register = -mpid -mno-warn-複数の高速割り込み
-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 -mhotpatch =ハーフワード,ハーフワード
スコア オプション -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 =レジスタ範囲 -mindexed-addressing
-mgettrcost =数 -mpt-修正済み -maccumulate-発信引数 -minvalid-シンボル
-matomic-model =原子モデル -mbranch-cost =NUM -mzdcbranch -mno-zdcbranch
-mcbranch-強制遅延-スロット -混乱-狂った -mno-fusion-madd -mfsca -mno-fsca -mfsrra
-mno-fsrra -mpreend-cmove -mtas
ソラリス 2 オプション -mclear-hwcap -mno-clear-hwcap -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 -ミューザーモード -mno-ユーザーモード -mv8plus -mno-v8plus -mvis
-mno-vis -mvis2 -mno-vis2 -mvis3 -mno-vis3 -mcbcond -mno-cbcond -mfmaf -mno-fmaf
-mpopc -mno-popc -mfix-at697f -mfix-ut699
SPU オプション -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 -mbig-エンディアン -mlittle-エンディアン -mcmodel =コードモデル
タイルプロ オプション -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 -mv850e3v5 -ムループ -mリラックス -mlong-ジャンプ -msoft-float -mhard-float -mgcc-アビ
-mrh850-abi -mbig スイッチ
VAX オプション -mg -mgnu -munix
ビジウム オプション -mdebug -msim -mfpu -mno-fpu -mhard-float -msoft-float -mcpu =CPUタイプ
-mtune =CPUタイプ -msv モード -ミューザーモード
VMS オプション -mvms-リターンコード -mdebug-main =接頭辞 -mmalloc64 -mpointer-size =サイズ
VxWorks オプション -mrtp -非静的 -Bスタティック -バダイナミック -Xbind-lazy -Xbind-今
x86 オプション -mtune =CPUタイプ -XNUMX月=CPUタイプ -mtune-ctrl =機能リスト
-mdump-tune-features -mno-デフォルト -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 -mavx512f -mavx512pf -mavx512er
-mavx512cd -ムシャ -メイズ -mpclmul -mfsgsbase -mrdrnd -mf16c -MFMA -mprefetchwt1
-mclflushopt -mxsavec -mxsaves -msse4a -m3dnow -mpopcnt -マブム -mbmi -MTBM -mfma4 -mxop
-mlzcnt -mbmi2 -mfxsr -mxsave -mxsaveopt -mrtm -mlwp -mmpx -mmwaitx -ミリスレッド
-mno-align-stringops -minline-all-stringops -minline-stringops-動的に
-mstringop-strategy =ALG -mmemcpy-strategy =戦略 -mmemset-strategy =戦略
-mpush-args -maccumulate-発信引数 -m128bit-long-double -m96bit-long-double
-mlong-double-64 -mlong-double-80 -mlong-double-128 -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 -m16 -mlarge-data-threshold =NUM
-msse2avx - ミッフィー -mレコード-mcount -mnop-mcount -m8bit-idiv
-mavx256-split-unaligned-load -mavx256-split-unaligned-store -malign-data =type
-mstack-protector-guard =ガード
x86 Windows オプション -mconsole -マシグウィン -mno-cygwin -mdll -mnop-fun-dllimport -mスレッド
-ミュニコード -mwin32 -mwindows -fno-set-stack-executable
エクスストーミー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-例外
-fdelete-dead-例外 -funwind-テーブル -fasynchronous-unwind-tables -fno-gnu-ユニーク
-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-plt -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 = -fstack-reuse =再利用レベル -ftrapv -fwrapv -fbounds-チェック
-fvisibility =[デフォルト|内部|隠されました|保護された] -fstrict-volatile-ビットフィールド
-fsync-libcalls
オプション 制御 種類 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は
によって認識された値を表示します --パラメータ オプションを選択します。
言語
サポートされているオプションを表示する 言語ここで、 言語 のXNUMXつの名前です
このバージョンのGCCでサポートされている言語。
一般的な
すべての言語に共通のオプションを表示します。
サポートされている修飾子は次のとおりです。
文書化されていない
文書化されていないオプションのみを表示します。
参加した
同じで等号の後に表示される引数を取る表示オプション
次のような連続したテキスト: --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 is
GDB --args cc1 ....
-fplugin =名。そう
プラグインコードをファイルにロードします 名.so、によってdlopenされる共有オブジェクトであると想定されます
コンパイラ。 共有オブジェクトファイルのベース名は、プラグインを識別するために使用されます
引数の構文解析の目的で(参照 -fplugin-arg-名-キー=値 下)。 各
プラグインは、プラグインAPIで指定されたコールバック関数を定義する必要があります。
-fplugin-arg-名-キー=値
と呼ばれる引数を定義します キー 値は 値 と呼ばれるプラグインの場合 名.
-fdump-ada-spec[-スリム]
CおよびC ++ソースおよびインクルードファイルの場合、対応するAda仕様を生成します。
-fada-spec-parent =単位
と一緒に -fdump-ada-spec[-スリム]上記で、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 ++ライブラリに対するリンクを自動的に指定します。 それは扱います .c, .h と .i ファイルとして
Cソースファイルの代わりにC ++ソースファイル -x 使用されている。 このプログラムも便利です
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以外のプログラムが不当に拒否されることはありません。 にとって
その、 -Wpedantic に加えて必要です -アンシ.
マクロ「__STRICT_ANSI__」は、 -アンシ オプションが使用されます。 いくつかのヘッダー
ファイルはこのマクロに気づき、特定の関数の宣言や定義を控えることがあります
ISO規格で要求されていない特定のマクロ。 これは干渉を避けるためです
これらの名前を他の目的で使用する可能性のあるプログラムで。
通常は組み込まれているが、ISOCで定義されたセマンティクスを持たない関数(
「alloca」と「ffs」)は、次の場合に組み込み関数ではありません。 -アンシ 使用されている。
-std =
言語標準を決定します。 このオプションは現在、次の場合にのみサポートされます
CまたはC ++のコンパイル。
コンパイラは、次のようないくつかの基本標準を受け入れることができます。 c90 or c ++ 98、およびGNU方言
それらの標準の ヌー90 or gnu ++ 98。 基本規格を指定すると、
コンパイラは、その標準に従うすべてのプログラムに加えて、GNU拡張機能を使用するプログラムを受け入れます
それはそれと矛盾しません。 例えば、 -std = c90 GCCの特定の機能をオフにします
「asm」や「typeof」キーワードなど、ISO C90と互換性がないが、
ISO C90で意味を持たない他のGNU拡張機能(省略など)
「?:」式の中項。 一方、標準のGNU方言の場合
が指定されている場合、コンパイラでサポートされているすべての機能が有効になっています。
機能は、基本標準の意味を変更します。 その結果、いくつかの厳格な準拠
プログラムは拒否される場合があります。 特定の規格はによって使用されます -Wpedantic 特定する
そのバージョンの標準を指定すると、どの機能がGNU拡張機能になりますか。 例えば
-std = gnu90 -Wpedantic C ++スタイルについて警告します // コメント、 -std = gnu99 -Wpedantic
ではない。
このオプションの値を指定する必要があります。 可能な値は
c90
c89
iso9899:1990
すべてのISOC90プログラムをサポートします(ISO C90と競合する特定のGNU拡張機能)
無効になっています)。 と同じ -アンシ Cコード用。
iso9899:199409
修正90で修正されたISOC1。
c99
c9x
iso9899:1999
iso9899:199x
ISOC99。 この標準は実質的に完全にサポートされており、モジュロバグと
浮動小数点の問題(主に、ただし完全にオプションのC99機能に関連しているわけではありません)
付録FおよびGから)。見るhttp://gcc.gnu.org/c99status.html>詳細
情報。 名 c9x と iso9899:199x 非推奨です。
c11
c1x
iso9899:2011
ISO C11、ISOC規格の2011年改訂。 この基準は実質的に
完全にサポートされている、モジュロバグ、浮動小数点の問題(主に、ただし完全ではありません)
付録FおよびGのオプションのC11機能およびオプションの付録Kに関連する
(境界チェックインターフェイス)およびL(分析可能性)。 名前 c1x は非推奨です。
ヌー90
ヌー89
ISO C90のGNU方言(一部のC99機能を含む)。
ヌー99
gnu9x
ISOC99のGNU方言。 名前 gnu9x は非推奨です。
ヌー11
gnu1x
ISOC11のGNU方言。 これはCコードのデフォルトです。 名前 gnu1x is
非推奨。
c ++ 98
c ++ 03
1998年のISOC ++標準に加えて、2003年の技術正誤表といくつかの追加
欠陥レポート。 と同じ -アンシ C ++コードの場合。
gnu ++ 98
gnu ++ 03
GNU方言 -std = c ++ 98。 これはC ++コードのデフォルトです。
c ++ 11
c ++ 0x
2011 ISO C ++標準と修正。 名前 c ++ 0x は非推奨です。
gnu ++ 11
gnu ++ 0x
GNU方言 -std = c ++ 11。 名前 gnu ++ 0x は非推奨です。
c ++ 14
c ++ 1y
2014 ISO C ++標準と修正。 名前 c ++ 1y は非推奨です。
gnu ++ 14
gnu ++ 1y
GNU方言 -std = c ++ 14。 名前 gnu ++ 1y は非推奨です。
c ++ 1z
2017年に暫定的に計画されているISOC ++標準の次のリビジョン。サポート
非常に実験的であり、ほぼ確実に互換性のない方法で変更されます
将来のリリース。
gnu ++ 1z
GNU方言 -std = c ++ 1z。 サポートは非常に実験的であり、ほとんど
確かに、将来のリリースでは互換性のない方法で変更されます。
-fgnu89-インライン
オプション -fgnu89-インライン 「インライン」に従来のGNUセマンティクスを使用するようにGCCに指示します
C99モードで機能します。
このオプションを使用することは、「gnu_inline」関数属性を追加することとほぼ同じです。
すべてのインライン関数に。
オプション -fno-gnu89-インライン GCCにC99セマンティクスを使用するように明示的に指示します
C99またはgnu99モードの場合は「インライン」(つまり、デフォルトの動作を指定します)。 この
オプションはでサポートされていません -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」が
組み込みで「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。 A
ホストされた環境は、標準ライブラリ全体が利用可能な環境です。
どの「main」の戻りタイプは「int」です。 例は、
カーネル。 これは同等です -fno-自立型.
-自立
コンパイルが自立型環境を対象としていることを表明します。これは、
-fno-builtin。 自立型環境とは、標準ライブラリでは不可能な環境です。
存在し、プログラムの起動は必ずしも「メイン」であるとは限りません。 最も明白な例
OSカーネルです。 これは同等です -fno-hosted.
-fopenacc
C / C ++ではOpenACCディレクティブ「#pragmaacc」、Fortranでは「!$ acc」の処理を有効にします。
日時 -fopenacc が指定されている場合、コンパイラは次のように高速化されたコードを生成します。
OpenACCアプリケーションプログラミングインターフェイスv2.0http://www.openacc.org/>。 このオプション
含意する -pthread、したがって、をサポートしているターゲットでのみサポートされます
-pthread.
これは実験的な機能であり、不完全であり、将来変更される可能性があることに注意してください
GCCのバージョン。 見るhttps://gcc.gnu.org/wiki/OpenACC>詳細については。
-fopenmp
C / C ++ではOpenMPディレクティブ "#pragma omp"、Fortranでは "!$ omp"の処理を有効にします。
日時 -fopenmp が指定されている場合、コンパイラは次のように並列コードを生成します。
OpenMPアプリケーションプログラムインターフェイスv4.0http://www.openmp.org/>。 このオプション
含意する -pthread、したがって、をサポートしているターゲットでのみサポートされます
-pthread. -fopenmp 含意する -fopenmp-simd.
-fopenmp-simd
C / C ++では「#pragmaomp」、C / C ++では「!$ omp」を使用して、OpenMPのSIMDディレクティブの処理を有効にします。
Fortran。 他のOpenMPディレクティブは無視されます。
-fcilkplus
C / C ++用のCilkPlus言語拡張機能の使用を有効にします。 オプションの場合
-fcilkplus が指定されている場合、CilkPlus言語拡張機能の使用を有効にします
C / C ++の場合。 現在の実装は、ABIバージョン1.2に準拠しています。 これは
部分的にしか完成しておらず、インターフェースが変更される可能性のある実験的な機能
公式仕様の変更に伴い、GCCの将来のバージョンで。 現在、すべて
機能が実装されていますが、「_ Cilk_for」が実装されています。
-fgnu-tm
オプションの場合 -fgnu-tm が指定されている場合、コンパイラはLinux用のコードを生成します
インテルの現在のトランザクションメモリABI仕様書の変種(改訂
1.1、6年2009月XNUMX日)。 これは実験的な機能であり、そのインターフェイスは次のように変更される可能性があります
公式仕様の変更に伴うGCCの将来のバージョン。 注意してください
この機能では、すべてのアーキテクチャがサポートされています。
トランザクションメモリに対するGCCのサポートの詳細については、
トランザクションメモリ機能は、呼び出し以外の例外ではサポートされていないことに注意してください
(-fnon-call-例外).
-fms-拡張機能
Microsoftヘッダーファイルで使用されるいくつかの非標準構造を受け入れます。
C ++コードでは、これにより、構造体のメンバー名を以前のタイプと同様にすることができます
宣言。
typedef int UOW;
構造体ABC {
うわー、うわー。
};
構造体と共用体の名前のないフィールドの一部のケースは、これでのみ受け入れられます
オプションを選択します。
このオプションは、ms-abiを使用するx86ターゲットを除くすべてのターゲットでオフになっていることに注意してください。
-fplan9-拡張機能
Plan9コードで使用されているいくつかの非標準構造を受け入れます。
これにより、 -fms-拡張機能、匿名の構造体へのポインタの受け渡しを許可します
フィールドのタイプの要素へのポインタを期待する関数へのフィールド、および
typedefを使用して宣言された匿名フィールドの参照を許可します。 これだけです
C ++ではなく、Cでサポートされています。
-三重音字
ISOCトライグラフをサポートします。 The -アンシ オプション(および -標準 厳密なISOCのオプション
適合性)は意味します -三重音字.
-伝統的な
-従来の-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の。 デフォルトはバージョン0です。
バージョン0は、C ++ ABI仕様に最も厳密に準拠しているバージョンを指します。
したがって、バージョン0を使用して取得したABIは、G ++のバージョンによって異なります。
ABIのバグが修正されたため。
バージョン1は、G ++ 3.2で最初に登場したC ++ ABIのバージョンです。
バージョン2は、G ++ 3.4で最初に登場したC ++ ABIのバージョンであり、
デフォルトからG ++ 4.9まで。
バージョン3は、テンプレート引数として定数アドレスを操作する際のエラーを修正します。
G ++ 4で最初に登場したバージョン4.5は、ベクターの標準的なマングリングを実装しています。
タイプ。
G ++ 5で最初に登場したバージョン4.6は、属性のマングリングを修正します
関数ポインタ型のconst / volatile、プレーンdeclのdecltype、および
別のパラメーターの宣言における関数パラメーター。
G ++ 6で最初に登場したバージョン4.7は、C ++ 11のプロモーション動作を修正します。
スコープ付き列挙型とテンプレート引数パックのマングリング、const / static_cast、プレフィックス++
および-、およびテンプレート引数として使用されるクラススコープ関数。
nullptr_tを組み込み型として扱うG ++ 7で最初に登場したバージョン4.8
デフォルトの引数スコープでのラムダのマングリングを修正します。
G ++ 8で最初に登場したバージョン4.9は、
function-cv-qualifiersを持つ関数型。
参照 -わび.
-fabi-compat-version =n
強力なエイリアスをサポートするターゲットでは、G ++は作成することで変更をマングリングすることを回避します
誤ったシンボルを定義するときに、正しいマングル名を持つエイリアス
壊れた名前。 このスイッチは、エイリアスに使用するABIバージョンを指定します。
連絡先 -fabi-version = 0 (デフォルト)、これはデフォルトで2になります。別のABIバージョンが
明示的に選択すると、デフォルトで0になります。
互換性バージョンもによって設定されます -わび=n.
-fno-アクセス制御
すべてのアクセスチェックをオフにします。 このスイッチは、主に次のバグを回避するのに役立ちます。
アクセス制御コード。
-fcheck-新しい
「operatornew」によって返されるポインタがnullでないことを確認してから、
割り当てられたストレージを変更します。 C ++であるため、このチェックは通常不要です。
標準では、「operator new」は、「throw()」と宣言されている場合にのみ0を返すように指定されています。
この場合、コンパイラはこのオプションがなくても常に戻り値をチェックします。 の
他のすべての場合、「operator new」に空でない例外仕様がある場合、メモリ
枯渇は、「std :: bad_alloc」をスローすることによって通知されます。 も参照してください 新製品 (投げない).
-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 ++リファレンスマニュアルでこのように機能します。 ただし、ISO C ++では
囲んでいるスコープで宣言されていないフレンド関数は、
引数に依存するルックアップ。 GCCのデフォルトは標準の動作です。
このオプションは互換性のためのものであり、G ++の将来のリリースで削除される可能性があります。
-fno-elide-コンストラクター
C ++標準では、実装で一時的なものの作成を省略できます。
同じタイプの別のオブジェクトを初期化するために使用されます。 このオプションを指定すると、無効になります
その最適化により、G ++はすべての場合にコピーコンストラクターを呼び出すように強制されます。
-fno-enforce-eh-specs
実行時に例外仕様の違反をチェックするコードを生成しないでください。
このオプションはC ++標準に違反していますが、コードサイズを減らすのに役立つ場合があります
「NDEBUG」を定義するのとよく似たプロダクションビルド。 これはユーザーコードを与えません
例外仕様に違反して例外をスローする許可。 the
コンパイラはまだ仕様に基づいて最適化するため、予期しないスローが発生します
例外により、実行時に未定義の動作が発生します。
-fextern-tls-init
-fno-extern-tls-init
C ++ 11およびOpenMP標準では、「thread_local」および「threadprivate」変数で次のことが可能です。
動的(実行時)初期化があります。 これをサポートするために、そのような変数の使用
必要な初期化を実行するラッパー関数を通過します。 いつ
変数の使用と定義は同じ変換単位にあり、このオーバーヘッドは
離れて最適化されますが、使用が別の翻訳単位である場合は
変数が実際に動的である必要がない場合でも、かなりのオーバーヘッド
初期化。 プログラマーが、変数を使用しないことを確認できる場合
TUを定義すると、動的初期化をトリガーする必要があります(変数が
静的に初期化されるか、定義するTUの変数の使用が実行されます
別のTUで使用する前に)、このオーバーヘッドを回避できます。
-fno-extern-tls-init オプションを選択します。
シンボルエイリアスをサポートするターゲットでは、デフォルトは -fextern-tls-init。 ターゲット上
シンボルエイリアスをサポートしない場合、デフォルトは -fno-extern-tls-init.
-範囲外
-fno-for-scope
If -範囲外 が指定されている場合、で宣言されている変数のスコープ for-init ステートメント
C ++標準で指定されているように、「for」ループ自体に制限されます。 もしも
-fno-for-scope が指定されている場合、で宣言されている変数のスコープ for-init ステートメント
古いバージョンのG ++の場合のように、囲んでいるスコープの最後まで拡張し、
C ++の他の(従来の)実装。
どちらのフラグも指定されていない場合、デフォルトは標準に従いますが、許可して指定します
そうでなければ無効になる、または異なる古いスタイルのコードに対する警告
行動。
-fno-gnu-キーワード
「typeof」をキーワードとして認識しないでください。コードでこの単語を使用できるようになります。
識別子。 代わりに、キーワード「__typeof__」を使用できます。 -アンシ 含意する
-fno-gnu-キーワード.
-fno-implicit-templates
暗黙的に(つまり、によってインスタンス化される)非インラインテンプレートのコードを発行しないでください
使用する); 明示的なインスタンス化のコードのみを発行します。
-fno-implicit-inline-templates
インラインテンプレートの暗黙的なインスタンス化のコードも発行しないでください。 デフォルト
最適化の必要がある場合とない場合でコンパイルできるように、インラインを異なる方法で処理することです
明示的なインスタンス化の同じセット。
-fno-implement-inlines
スペースを節約するために、によって制御されるインライン関数のオフラインコピーを発行しないでください。
「#pragmaの実装」。 これらの関数がそうでない場合、これによりリンカーエラーが発生します
それらが呼び出されるすべての場所にインライン化されます。
-fms-拡張機能
暗黙のintや暗黙のintなど、MFCで使用される構造に関するWpedantic警告を無効にします
非標準の構文を介してメンバー関数へのポインターを取得します。
-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
エラーメッセージが関数テンプレートの特殊化を参照している場合、コンパイラは
通常、テンプレートの署名に続いてテンプレート引数を出力し、
シグニチャ内のtypedefまたはtypenames(例:「voidf(T)[with T = int]」
"void f(int)")よりも、どのテンプレートが関係しているかが明確になります。 エラーが発生した場合
メッセージはクラステンプレートの特殊化を参照し、コンパイラは
そのテンプレートのデフォルトのテンプレート引数と一致するテンプレート引数。 もしも
これらの動作のいずれかにより、エラーメッセージを理解するのが難しくなります。
より簡単に、あなたは使うことができます -fno-pretty-templates それらを無効にします。
-フレポ
リンク時にテンプレートの自動インスタンス化を有効にします。 このオプションは、
-fno-implicit-templates.
-fno-rtti
で使用する仮想関数を使用して、すべてのクラスに関する情報の生成を無効にします。
C ++実行時型識別機能(「dynamic_cast」および「typeid」)。 もし、あんたが
言語のこれらの部分は使用しないでください。このフラグを使用すると、スペースを節約できます。
例外処理は同じ情報を使用しますが、G ++はそれを次のように生成することに注意してください
必要です。 「dynamic_cast」演算子は、必要のないキャストにも引き続き使用できます。
実行時型情報。つまり、「void *」または明確な基本クラスにキャストします。
-fsized-割り当て解除
組み込みのグローバル宣言を有効にする
void演算子delete(void *、std :: size_t)noexcept;
void演算子delete [](void *、std :: size_t)noexcept;
C ++ 14で導入されたとおり。 これは、ユーザー定義の置換の割り当て解除に役立ちます
たとえば、オブジェクトのサイズを使用して割り当て解除を高速化する関数。
デフォルトで有効になっています -std = c ++ 14 以上。 旗 -Wサイズ-割り当て解除 警告する
定義を追加したい場所について。
-fstats
コンパイルの最後にフロントエンド処理に関する統計を発行します。 この
情報は通常、G ++開発チームにのみ役立ちます。
-fstrict-列挙型
列挙型の値が
(C ++標準で定義されているように)列挙の値のXNUMXつのみにすることができます。
基本的に、必要な最小ビット数で表すことができる値
すべての列挙子を表します)。 プログラムが使用する場合、この仮定は有効でない可能性があります
任意の整数値を列挙型に変換するためのキャスト。
-ftemplate-backtrace-limit =n
XNUMXつの警告またはエラーに対するテンプレートインスタンス化ノートの最大数を設定します
〜へ n。 デフォルト値は10です。
-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の違反。
-fvtable-verify =[STD|事前初期化|なし]
オン(または使用している場合はオフ) -fvtable-verify = none)で検証するセキュリティ機能
実行時、すべての仮想呼び出しについて、呼び出しが通過するvtableポインター
madeはオブジェクトのタイプに対して有効であり、破損または上書きされていません。
実行時に無効なvtableポインターが検出された場合、エラーが報告され、
プログラムの実行は直ちに停止されます。
このオプションを使用すると、プログラムの起動時に実行時のデータ構造が構築されます。
vtableポインターの検証に使用されます。 オプション STD と 事前初期化 制御する
これらのデータ構造が構築されるタイミング。 どちらの場合も、データ構造は次のとおりです。
実行が「メイン」に達する前に構築されます。 使用する -fvtable-verify = std データを引き起こします
共有ライブラリがロードおよび初期化された後に構築される構造。
-fvtable-verify = preinit 共有ライブラリが作成される前にビルドされます
ロードされ、初期化されました。
このオプションがコマンドラインに異なる値で複数回表示される場合
指定、 なし 両方よりも優先されます STD と 事前初期化; 事前初期化 取り
優先 STD.
-fvtv-デバッグ
と組み合わせて使用する場合 -fvtable-verify = std or -fvtable-verify = preinit、原因
vtable検証機能のランタイム関数のデバッグバージョン
と呼ばれる。 このフラグにより、コンパイラはどのvtableに関する情報もログに記録します。
クラスごとに検出されたポインタ。 この情報は、という名前のファイルに書き込まれます
vtv_set_ptr_data.log 環境変数によって指定されたディレクトリ内 VTV_LOGS_DIR
それが定義されている場合、または現在の作業ディレクトリが定義されている場合。
注:この機能 追加します ログファイルへのデータ。 新しいログファイルが必要な場合は、
必ず既存のものを削除してください。
-fvtv-カウント
これはデバッグフラグです。 と組み合わせて使用する場合 -fvtable-verify = std or
-fvtable-verify = preinit、これにより、コンパイラは
遭遇する仮想呼び出しと挿入する検証の数。 また
挿入する特定のランタイムライブラリ関数への呼び出しの数をカウントし、
コンパイル単位ごとにこの情報をログに記録します。 コンパイラはこの情報を書き込みます
名前の付いたファイルに vtv_count_data.log 環境変数によって指定されたディレクトリ内
VTV_LOGS_DIR それが定義されている場合、または現在の作業ディレクトリが定義されている場合。 また
各クラスのvtableポインターセットのサイズをカウントし、この情報を書き込みます
〜へ vtv_class_set_sizes.log 同じディレクトリにあります。
注:この機能 追加します ログファイルへのデータ。 新しいログファイルを取得するには、必ず次のことを行ってください。
既存のものを削除します。
-fno-弱い
リンカによって提供されている場合でも、弱い記号のサポートは使用しないでください。 デフォルトでは、G ++
利用可能な場合は弱い記号を使用します。 このオプションはテスト用にのみ存在し、
エンドユーザーは使用しないでください。 その結果、コードが劣り、メリットはありません。
このオプションは、G ++の将来のリリースで削除される可能性があります。
-nostdinc ++
C ++に固有の標準ディレクトリでヘッダーファイルを検索しないでください。ただし、検索してください。
それでも他の標準ディレクトリを検索します。 (このオプションは、ビルド時に使用されます
C ++ライブラリ。)
さらに、これらの最適化、警告、およびコード生成オプションには、意味があるだけです。
C ++プログラムの場合:
-わび (C、Objective-C、C ++およびObjective-C ++のみ)
明示的な場合 -fabi-version =n オプションを使用すると、G ++が生成時に警告を発します
ベンダーに依存しないC ++ ABIと互換性がない可能性のあるコード。 G ++以降
デフォルトは -fabi-version = 0, -わび 古いABIバージョンのいずれかがない限り効果はありません
選択済み( -fabi-version =n)または古い互換性バージョンが選択されている(
-わび=n or -fabi-compat-version =n).
そのようなすべてのケースについて警告するための努力がなされてきましたが、おそらくいくつかあります
G ++が互換性のないコードを生成している場合でも、警告されないケース。
また、コードが
生成された互換性があります。
懸念がある場合は、これらの警告を回避するためにコードを書き直す必要があります。
G ++によって生成されたコードはによって生成されたコードとバイナリ互換ではない可能性があるという事実
他のコンパイラ。
-わび 互換性について警告するために明示的なバージョン番号とともに使用することもできます
特定の -fabiバージョン レベル、例えば -わび= 2 に関連する変更について警告する
-fabi-version = 2。 バージョン番号を指定すると、 -fabi-compat-version =n.
の既知の非互換性 -fabi-version = 2 (これはGCC3.4から
4.9)含める:
*参照型の非型テンプレートパラメータを持つテンプレートがマングルされました
間違って:
extern int N;
レンプレート構造体S {};
ボイドn(S ){2}
これはで修正されました -fabi-version = 3.
*「__ attribute((vector_size))」を使用して宣言されたSIMDベクトルタイプは、
ベクトルを取る関数のオーバーロードを許可しない非標準的な方法
さまざまなサイズの。
マングリングはで変更されました -fabi-version = 4.
*「__ attribute((const))」と「noreturn」は型修飾子としてマングルされ、
プレーン宣言の「decltype」は折りたたまれました。
これらのマングリングの問題はで修正されました -fabi-version = 5.
*可変個引数関数への引数として渡されるスコープ付き列挙子は次のようにプロモートされます
スコープ外の列挙子。「va_arg」が文句を言います。 ほとんどのターゲットでは、これはしません
引数を渡す方法がないため、実際にはABIを渡すパラメータに影響します
「int」よりも小さい。
また、ABIは、テンプレート引数パック「const_cast」のマングリングを変更しました。
「static_cast」、プレフィックスのインクリメント/デクリメント、およびクラススコープ関数として使用される
テンプレート引数。
これらの問題はで修正されました -fabi-version = 6.
*デフォルトの引数スコープのラムダが誤ってマングルされ、ABIが変更されました
「nullptr_t」のマングリング。
これらの問題はで修正されました -fabi-version = 7.
*関数型をfunction-cv-qualifiersでマングリングする場合、修飾されていない
関数型が置換候補として誤って扱われていました。
これはで修正されました -fabi-version = 8.
また、psABI関連の変更についても警告します。 既知のpsABIはこの時点で変更されます
次のとおりです。
* SysV / x86-64の場合、「longdouble」メンバーを持つユニオンは次のようにメモリに渡されます。
psABIで指定されています。 例えば:
ユニオンU {
ロングダブルld;
int i;
};
「ユニオンU」は常にメモリに渡されます。
-ワビタグ (C ++およびObjective-C ++のみ)
ABIタグのあるタイプが、そのABIタグのないコンテキストで使用された場合に警告します。
見る C + + Attributes ABIタグの詳細については。
-Wctor-dtor-プライバシー (C ++およびObjective-C ++のみ)
その中のすべてのコンストラクタまたはデストラクタが原因でクラスが使用できないように見える場合に警告します
クラスはプライベートであり、フレンドもパブリック静的メンバー関数もありません。
非プライベートメソッドがなく、少なくともXNUMXつのプライベートメンバーがいる場合にも警告します
コンストラクタまたはデストラクタではない関数。
-Wdelete-非仮想-dtor (C ++およびObjective-C ++のみ)
「delete」を使用して仮想を持つクラスのインスタンスを破棄すると警告する
関数と非仮想デストラクタ。 派生したインスタンスを削除することは安全ではありません
基本クラスに仮想がない場合は、基本クラスへのポインタを介したクラス
デストラクタ。 この警告はによって有効になります -壁.
-Wliteral-サフィックス (C ++およびObjective-C ++のみ)
文字列または文字リテラルの後に、そうでないudサフィックスが続く場合に警告します
アンダースコアで始めます。 準拠する拡張機能として、GCCはそのような接尾辞を次のように扱います
コードとの下位互換性を維持するために、前処理トークンを分離します
"からのフォーマットマクロを使用します"。 例えば:
#定義__STDC_FORMAT_MACROS
#含む
#include
int main(){
int64_t i64 = 123;
printf( "My int64:%" PRId64 "\ n"、i64);
}
この場合、「PRId64」は個別の前処理トークンとして扱われます。
この警告はデフォルトで有効になっています。
-狭める (C ++およびObjective-C ++のみ)
C ++ 11で禁止されているナローイング変換が発生した場合に警告します { }、例えば
int i = {2.2}; //エラー:doubleからintにナローイング
このフラグはに含まれています -壁 と -Wc ++ 11-互換性.
連絡先 -std = c ++ 11, -ナローイングなし 標準で必要な診断を抑制します。
これは整形式コードの意味に影響を与えないことに注意してください。 コンバージョンを絞り込む
SFINAEのコンテキストでは、依然として不正な形式と見なされます。
-Wno以外 (C ++およびObjective-C ++のみ)
関数の呼び出しのためにnoexcept-expressionがfalseと評価されたときに警告します
非スロー例外仕様(つまり、「throw()」または
「noexcept」)が、例外をスローしないことがコンパイラによって認識されています。
-Wnon-virtual-dtor (C ++およびObjective-C ++のみ)
クラスに仮想関数とアクセス可能な非仮想デストラクタがある場合に警告する
それ自体またはアクセス可能な多形基本クラスで、その場合は可能ですが
クラス自体へのポインタを介して派生クラスのインスタンスを削除するのは安全ではありません
または基本クラス。 この警告は、次の場合に自動的に有効になります -Weffc ++ 指定されています。
-リオーダー (C ++およびObjective-C ++のみ)
コードで指定されたメンバー初期化子の順序が順序と一致しない場合に警告します
それらが実行されなければならない。例えば:
構造体A {
int i;
int j;
A():j(0)、i(1){}
};
コンパイラは、「i」と「j」のメンバー初期化子を再配置して、
メンバーの宣言順序。その旨の警告を発します。 この警告は
有効にする -壁.
-fext-数値リテラル (C ++およびObjective-C ++のみ)
虚数、固定小数点、またはマシン定義のリテラル番号の接尾辞をGNUとして受け入れる
拡張機能。 このオプションをオフにすると、これらのサフィックスはC ++ 11ユーザーとして扱われます-
リテラルの数値サフィックスを定義しました。 これは、C ++ 11より前のすべての方言でデフォルトでオンになっています
およびすべてのGNU方言: -std = c ++ 98, -std = gnu ++ 98, -std = gnu ++ 11, -std = gnu ++ 14。 この
ISO C ++ 11以降では、オプションはデフォルトでオフになっています(-std = c ++ 11、...)。
以下 -W..。 オプションは影響を受けません -壁.
-Weffc ++ (C ++およびObjective-C ++のみ)
スコットマイヤーズからの次のスタイルガイドラインの違反について警告する 効果的な
C + + 一連の本:
*動的にクラスのコピーコンストラクタと代入演算子を定義します-
割り当てられたメモリ。
*コンストラクターでの割り当てよりも初期化を優先します。
* "operator ="に* thisへの参照を返してもらいます。
*オブジェクトを返す必要がある場合は、参照を返さないでください。
*インクリメント演算子とデクリメント演算子のプレフィックス形式とポストフィックス形式を区別します。
*「&&」、「||」、または「、」をオーバーロードしないでください。
このオプションはまた有効にします -Wnon-virtual-dtor、これも効果的なC ++のXNUMXつです
推奨事項。 ただし、チェックは仮想の欠如について警告するために拡張されています
アクセス可能な非多型ベースクラスのデストラクタも。
このオプションを選択するときは、標準ライブラリヘッダーがすべてに準拠しているわけではないことに注意してください
これらのガイドラインの; 使用する grep -v それらの警告を除外します。
-Wstrict-null-センチネル (C ++およびObjective-C ++のみ)
番兵としてキャストされていない「NULL」を使用することについて警告します。 GCCのみでコンパイルする場合
「NULL」は「__null」に定義されているため、これは有効な番兵です。 ヌルですが
ヌルポインタではなくポインタ定数、同じサイズであることが保証されています
ポインタとして。 ただし、この使用法は、異なるコンパイラー間で移植可能ではありません。
-Wno-非テンプレートフレンド (C ++およびObjective-C ++のみ)
テンプレート化されていないフレンド関数がテンプレート内で宣言されている場合の警告を無効にします。
G ++での明示的なテンプレート仕様のサポートの出現以来、
友人は修飾されていないIDです(つまり、 友人 foo(int))、C ++言語仕様
友人が通常の非テンプレート関数を宣言または定義することを要求します。 (セクション
14.5.3)。 G ++が明示的な仕様を実装する前は、unqualified-idsは
テンプレート化された関数の特定の特殊化として解釈されます。 これは
不適合な動作は、G ++のデフォルトの動作ではなくなりました。
-非テンプレートフレンド コンパイラが潜在的な問題について既存のコードをチェックできるようにします
スポットし、デフォルトでオンになっています。 この新しいコンパイラの動作は、次のコマンドでオフにできます。
-Wno-非テンプレートフレンド、準拠したコンパイラコードを保持しますが、
役立つ警告。
-ウォルドスタイルキャスト (C ++およびObjective-C ++のみ)
非void型にキャストされた古いスタイル(Cスタイル)がC ++プログラム内で使用されている場合に警告します。
新しいスタイルのキャスト( "dynamic_cast"、 "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 ++のバージョンは署名されていない状態を維持しようとしましたが、標準では現在の
行動。
オプション 制御 オブジェクティブ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(" ... ")"。
-fno-local-ivars
デフォルトでは、Objective-Cのインスタンス変数はローカルであるかのようにアクセスできます
宣言されているクラスのメソッド内の変数。これにより、
インスタンス変数とローカルで宣言された他の変数の間のシャドウイング
クラスメソッド内または同じ名前でグローバルに。 の指定 -fno-local-ivars
フラグはこの動作を無効にするため、変数のシャドウイングの問題を回避します。
-fivar-visibility =[公共|保護された|プライベート|パッケージ]
デフォルトのインスタンス変数の可視性を指定されたオプションに設定して、インスタンスが
アクセス修飾子ディレクティブのスコープ外で宣言された変数は、デフォルトで
指定された可視性。
-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行あたりの文字数、頻度
ソースの場所情報を報告する必要があります。 一部の言語のフロントエンドは
これらのオプションを尊重しないでください。
-fmessage-length =n
エラーメッセージを約XNUMX行に収まるようにフォーマットしてみてください n 文字。 もしも n is
ゼロの場合、行の折り返しは行われません。 各エラーメッセージはXNUMX行に表示されます。
これは、すべてのフロントエンドのデフォルトです。
-fdiagnostics-show-location = once
行折り返しモードでのみ意味があります。 診断メッセージレポーターに次のように指示します
ソースの位置情報を出力する かつて; つまり、メッセージが長すぎて収まらない場合
単一の物理ライン上でラップする必要がある場合、ソースの場所は出力されません
(接頭辞として)後続の継続行で何度も何度も繰り返します。 これは
デフォルトの動作。
-fdiagnostics-show-location = every-line
行折り返しモードでのみ意味があります。 診断メッセージレポーターに次のように指示します
結果として生じる物理回線に対して(プレフィックスとして)同じソースロケーション情報を送信します
長すぎてXNUMX行に収まらないメッセージを壊すプロセスから。
-fdiagnostics-color [=WHEN]
-fno-診断色
診断には色を使用します。 WHEN is 決して, 常にまたは オート。 デフォルトは方法によって異なります
コンパイラーが構成されている場合は、上記のいずれかになります。 WHEN オプションまたはまた
決して if GCC_COLORS 環境変数が環境に存在せず、 オート
さもないと。 オート 標準エラーが端末である場合にのみ色を使用することを意味します。 The
フォーム -fdiagnostics-color と -fno-診断色 のエイリアスです
-fdiagnostics-color =常に と -fdiagnostics-color = neverそれぞれ。
色は環境変数によって定義されます GCC_COLORS。 その値はコロンです-
機能の個別のリストとグラフィックレンディション(SGR)サブストリングの選択。 SGR
コマンドは、ターミナルまたはターミナルエミュレータによって解釈されます。 (のセクションを参照してください
許可された値とその意味についてのテキスト端末のドキュメント
文字属性。)これらのサブストリング値は、XNUMX進表現の整数です。
セミコロンと連結できます。 連結する一般的な値は次のとおりです。 1 for
大胆な、 4 下線については、 5 まばたきのために、 7 逆の場合、 39 デフォルトの前景色の場合、 30
〜へ 37 前景色の場合、 90 〜へ 97 16色モードの前景色の場合、 38; 5; 0 〜へ
38; 5; 255 88色および256色モードの前景色の場合、 49 デフォルトの背景
色、 40 〜へ 47 背景色については、 100 〜へ 107 16色モードの背景色の場合、
と 48; 5; 0 〜へ 48; 5; 255 88色および256色モードの背景色用。
デフォルト GCC_COLORS is
error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01
コラボレー 01。31 太字の赤です、 01。35 大胆なマゼンタ、 01。36 大胆なシアンです、 01。32 太字です
緑と 01 太字です。 設定 GCC_COLORS 空の文字列に変更すると、色が無効になります。
サポートされている機能は次のとおりです。
"エラー="
エラーのSGRサブストリング:マーカー。
"警告="
警告のSGRサブストリング:マーカー。
"note ="
注のSGRサブストリング:マーカー。
"キャレット="
カレットラインのSGRサブストリング。
"locus ="
位置情報のSGRサブストリング、 file:line or file:line:column 等々
"quote ="
引用符で囲まれた情報のSGRサブストリング。
-fno-diagnostics-show-option
デフォルトでは、発行される各診断には、コマンドラインオプションを示すテキストが含まれています
診断を直接制御します(そのようなオプションが診断に知られている場合
機械)。 の指定 -fno-diagnostics-show-option フラグはそれを抑制します
行動。
-fno-diagnostics-show-caret
デフォルトでは、発行される各診断には、元のソース行とキャレット '^'が含まれます
列を示します。 このオプションは、この情報を抑制します。 ソース行は
に切り捨てられます n 文字の場合、 -fmessage-length = n オプションが与えられます。 出力時
ターミナルに行われる場合、幅はによって指定された幅に制限されます COLUMNS
環境変数、または設定されていない場合は端末の幅。
オプション 〜へ リクエスト 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つの形式のうち、デフォルトではない方のみが記載されています。
言語固有のオプションの詳細については、以下も参照してください。 C + + 方言 オプション と オブジェクティブC
と Objective-C ++ 方言 オプション.
のようないくつかのオプション -壁 と -ウェクストラ、などの他のオプションをオンにします -未使用、その
次のような追加のオプションをオンにする場合があります -未使用値。 ポジティブとの複合効果
否定的な形式は、より具体的なオプションがより具体的でないオプションよりも優先されるということです。
コマンドラインでの位置に関係なく。 同じ特異性のオプションについては、
最後のものが有効になります。 プラグマを介して有効または無効にしたオプションは、あたかもそれらが有効であるかのように有効になります
コマンドラインの最後に表示されます。
認識されない警告オプションが要求された場合(例: -不明-警告)、GCCは
オプションが認識されないことを示す診断。 ただし、 -いいえ- フォームが使用され、
動作はわずかに異なります。診断は生成されません -わからない-警告
他の診断が作成されていない限り。 これにより、新しいものを使用できます -いいえ- オプション
古いコンパイラを使用しますが、問題が発生した場合、コンパイラは認識されないことを警告します
オプションがあります。
-Wpedantic
-衒学者
厳密なISOCおよびISOC ++で要求されるすべての警告を発行します。 次のようなすべてのプログラムを拒否する
禁止されている拡張機能、およびISOCおよびISOに準拠していないその他のプログラムを使用する
C ++。 ISO Cの場合、任意ので指定されたISOC標準のバージョンに従います。 -標準
使用されるオプション。
有効なISOCおよびISOC ++プログラムは、このオプションの有無にかかわらず正しくコンパイルする必要があります
(まれな少数が必要ですが -アンシ または -標準 の必要なバージョンを指定するオプション
ISO C)。 ただし、このオプションがないと、特定のGNU拡張機能と従来のCおよび
C ++機能もサポートされています。 このオプションを使用すると、拒否されます。
-Wpedantic 代替キーワードの使用に関する警告メッセージは表示されません。
名前の始まりと終わり __。 衒学的警告も式で無効になっています
「__extension__」に続く。 ただし、これらを使用する必要があるのはシステムヘッダーファイルのみです
脱出ルート; アプリケーションプログラムはそれらを避けるべきです。
一部のユーザーは使用しようとします -Wpedantic プログラムがISOCに厳密に準拠しているかどうかを確認します。 彼ら
すぐに、それが彼らが望んでいることを完全に実行していないことに気付きます。それは、いくつかの非ISO慣行を見つけます。
すべてではありません--- ISOCの対象となるもののみ 必要 診断、および他のいくつかの
どの診断が追加されましたか。
ISO Cに準拠していないことを報告する機能は、場合によっては役立つ場合があります。
しかし、かなりの追加作業が必要になり、
-Wpedantic。 近い将来、このような機能をサポートする予定はありません。
で指定された規格 -標準 CのGNU拡張方言を表します。
ヌー90 or ヌー99、対応するものがあります ベース 標準、ISOCのバージョン
GNU拡張方言が基づいています。 からの警告 -Wpedantic 彼らがいるところに与えられます
基本規格で要求されます。 (そのような警告が出されるのは意味がありません
定義上GNUであるため、指定されたGNUC方言にない機能の場合のみ
Cの方言には、コンパイラが指定されたオプションでサポートするすべての機能が含まれています。
警告するものは何もありません。)
-衒学的エラー
常にエラーを出します ベース 標準 (参照してください -Wpedantic)診断が必要です
コンパイル時に未定義の動作が発生する場合と、その他の場合
標準に従って有効なプログラムのコンパイルを妨げません。
これは同等ではありません -Werror = pedantic、これによって有効になるエラーがあるため
オプションであり、後者では有効にされません。その逆も同様です。
-壁
これにより、一部のユーザーが検討する構造に関するすべての警告が有効になります
疑わしい、そしてそれは避けやすい(または警告を防ぐために修正する)
マクロと組み合わせて。 これにより、説明されている言語固有の警告も有効になります
in C + + 方言 オプション と オブジェクティブC と Objective-C ++ 方言 オプション.
-壁 次の警告フラグをオンにします。
-住所 -Warray-bounds = 1 (のみ -O2) -Wc ++ 11-互換性 -Wc ++ 14-互換性
-Wchar-添え字 -ウェヌム-比較 (C / ObjCの場合、これはC ++ではデフォルトでオンになっています)
-Wimplicit-int (CおよびObjective-Cのみ) -Wimplicit 関数宣言 (Cおよび
Objective-Cのみ) -コメント -Wフォーマット -Wメイン (C / ObjCの場合のみ、
-自立) -おそらく-初期化されていません -中括弧がありません (C / ObjCのみ) -非ヌル
-Wopenmp-simd -かっこ -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」を使用して計算全体を実行します。
リテラルは「ダブル」です。
-Wフォーマット
-Wformat =n
「printf」や「scanf」などの呼び出しをチェックして、引数が指定されていることを確認します
指定されたフォーマット文字列に適したタイプを持ち、変換が
フォーマット文字列で指定するのは理にかなっています。 これには標準機能が含まれ、
「printf」、「scanf」、「strftime」、および
「strfmon」(C標準ではないX / Open拡張)ファミリ(または他のターゲット-
特定の家族)。 フォーマット属性が設定されていない状態でチェックされる関数
指定されるのは、選択された標準バージョン、およびそのような機能のチェックによって異なります
属性が指定されていない場合、 -自立 or -fno-builtin.
フォーマットは、GNUlibcバージョン2.2でサポートされているフォーマット機能と照合されます。
これらには、すべてのISO C90およびC99機能、およびSingleUnixの機能が含まれます。
仕様といくつかのBSDおよびGNU拡張。 他のライブラリの実装はそうではないかもしれません
これらすべての機能をサポートします。 GCCは、それを超える機能に関する警告をサポートしていません
特定のライブラリの制限。 ただし、 -Wpedantic と一緒に使用されます -Wフォーマット,
選択した標準バージョンにないフォーマット機能について警告が表示されます(ただし、
「strfmon」形式の場合、これらはC標準のどのバージョンにも含まれていないため)。
-Wformat = 1
-Wフォーマット
オプション -Wフォーマット に相当します -Wformat = 1, -Wno形式 に相当します
-Wformat = 0。 から -Wフォーマット また、いくつかのnull形式の引数をチェックします
機能、 -Wフォーマット また意味します -非ヌル。 このレベルのフォーマットのいくつかの側面
チェックはオプションで無効にできます: -Wno-format-contains-null,
-Wno-format-extra-args, -Wno-format-zero-length. -Wフォーマット によって有効になります
-壁.
-Wno-format-contains-null
If -Wフォーマット が指定されている場合、NULバイトを含むフォーマット文字列について警告しないでください。
-Wno-format-extra-args
If -Wフォーマット が指定されている場合、「printf」または「printf」への過剰な引数について警告しないでください。
「scanf」フォーマット関数。 C標準では、そのような引数は次のように指定されています。
無視されます。
未使用の引数が、で指定された使用済みの引数の間にある場合 $
オペランド番号の指定では、通常は警告が表示されます。
実装は、未使用をスキップするために「va_arg」に渡すタイプを知ることができませんでした
引数。 ただし、「scanf」形式の場合、このオプションは
シングルUnix以降、未使用の引数がすべてポインタである場合の警告
仕様によると、そのような未使用の引数は許可されています。
-Wno-format-zero-length
If -Wフォーマット が指定されている場合、長さがゼロのフォーマットについて警告しないでください。 C標準
長さゼロのフォーマットが許可されることを指定します。
-Wformat = 2
有効にする -Wフォーマット さらに、追加のフォーマットチェック。 現在と同等 -Wフォーマット
-Wformat-非文字 -Wformat-セキュリティ -Wformat-y2k.
-Wformat-非文字
If -Wフォーマット が指定されています。フォーマット文字列が文字列リテラルでない場合にも警告します
したがって、format関数がそのフォーマット引数を次のように受け取らない限り、チェックすることはできません。
「va_list」。
-Wformat-セキュリティ
If -Wフォーマット が指定され、を表すフォーマット関数の使用についても警告します
考えられるセキュリティの問題。 現在、これは「printf」と
フォーマット文字列が文字列リテラルではなく、文字列がない場合の「scanf」関数
「printf(foo);」のように引数をフォーマットします。 これは、次の場合にセキュリティホールになる可能性があります
フォーマット文字列は信頼できない入力から来ており、 %n。 (これは現在、
何のサブセット -Wformat-非文字 警告しますが、将来の警告は
に追加 -Wformat-セキュリティ に含まれていないもの -Wformat-非文字.)
-Wformat 署名
If -Wフォーマット が指定されており、フォーマット文字列に符号なしが必要な場合にも警告します
引数と引数は署名されており、その逆も同様です。
注:Ubuntu 8.10以降のバージョンでは、このオプションはCでデフォルトで有効になっています。
C ++、ObjC、ObjC++。 無効にするには、 -Wno-フォーマットセキュリティ、またはすべての形式を無効にする
との警告 -Wformat = 0。 フォーマットのセキュリティ警告を致命的にするには、次のように指定します
-Werror = format-security.
-Wformat-y2k
If -Wフォーマット が指定されている場合は、「strftime」形式についても警告します。
XNUMX桁の年。
-非ヌル
null以外の値が必要であるとマークされた引数にnullポインタを渡すことについて警告する
「非ヌル」関数属性による。
-非ヌル に含まれています -壁 と -Wフォーマット。 で無効にすることができます -Wno-非null
オプションを選択します。
-Winit-self (C、C ++、Objective-CおよびObjective-C ++のみ)
自分自身で初期化される初期化されていない変数について警告します。 これに注意してください
オプションは、 -初期化されていません オプションを選択します。
たとえば、GCCは、次のスニペットでのみ「i」が初期化されていないことを警告します
いつ -Winit-self 指定されています:
int f()
{
int i = i;
return i;
}
この警告はによって有効になります -壁 C++ で。
-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 -Wpedantic.
-中括弧がありません
アグリゲートまたはユニオン初期化子が完全に括弧で囲まれていない場合に警告します。 以下では
たとえば、「a」の初期化子は完全に括弧で囲まれていませんが、「b」の初期化子は完全に括弧で囲まれています
括弧で囲まれています。 この警告はによって有効になります -壁 Cで。
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 ++の場合。
-Wno-return-local-addr
次の変数へのポインタ(またはC ++では参照)を返すことについて警告しないでください。
関数が戻った後、スコープ外になります。
-Wreturnタイプ
関数がデフォルトで「int」に設定された戻り型で定義されている場合は常に警告します。 また
戻り型が関数の戻り値のない「return」ステートメントについて警告する
「void」ではありません(関数本体の端から落ちると、戻ると見なされます
値なし)、および関数内の式を含む「return」ステートメントについて
その戻りタイプは「void」です。
C ++の場合、戻り値のない関数は常に診断メッセージを生成します。
いつ -Wノーリターン型 が指定されています。 唯一の例外は「メイン」と関数です
システムヘッダーで定義されます。
この警告はによって有効になります -壁.
-Wshift-count-negative
シフトカウントが負の場合に警告します。 この警告はデフォルトで有効になっています。
-Wshift-count-overflow
シフトカウント>=タイプの幅の場合に警告します。 この警告はデフォルトで有効になっています。
-Wスイッチ
「switch」ステートメントに列挙型のインデックスがあり、「case」がない場合は常に警告します
その列挙のXNUMXつ以上の名前付きコード。 (「デフォルト」の存在
labelは、この警告を防ぎます。)列挙範囲外の「case」ラベルも
このオプションを使用すると、警告が表示されます(「デフォルト」のラベルがある場合でも)。 これ
警告はによって有効になります -壁.
-Wswitch-デフォルト
「switch」ステートメントに「default」ケースがない場合は常に警告します。
-Wswitch-enum
「switch」ステートメントに列挙型のインデックスがあり、「case」がない場合は常に警告します
その列挙のXNUMXつ以上の名前付きコード。 の外側の「ケース」ラベル
このオプションを使用すると、列挙範囲も警告を発します。 唯一の違い
の間に -Wスイッチ このオプションは、このオプションが省略について警告を出すことです
「デフォルト」のラベルがある場合でも、列挙コード。
-Wswitch-bool
「switch」ステートメントにブール型のインデックスがある場合は常に警告します。 可能です
制御式を以外のタイプにキャストすることにより、この警告を抑制します
「ブール」。 例えば:
スイッチ((int)(a == 4))
{
...
}
この警告は、CおよびC++プログラムではデフォルトで有効になっています。
-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-変数
ローカル変数または非定数静的変数が使用されていない場合は常に警告します。
その宣言。 この警告はによって有効になります -壁.
この警告を抑制するには、「未使用」属性を使用します。
-未使用値
ステートメントが明示的に使用されていない結果を計算するたびに警告します。 抑制するには
この警告は、未使用の式を「void」にキャストします。 これには式が含まれます-
ステートメントまたは副作用を含まないコンマ式の左側。
たとえば、「x [i、j]」などの式は警告を発生させますが、「x [(void)i、j]」は警告を発します。
ではない。
この警告はによって有効になります -壁.
-未使用
上記のすべて -未使用 オプションの組み合わせ。
未使用の関数パラメーターに関する警告を受け取るには、次のいずれかを指定する必要があります。
-ウェクストラ -未使用 (ご了承ください -壁 含意する -未使用)、または個別に指定
-Wunused-パラメータ.
-初期化されていません
自動変数が最初に初期化されずに使用された場合、または変数が使用された場合に警告します
「setjmp」呼び出しによって破壊される可能性があります。 C ++では、非静的参照または非静的参照の場合に警告します
静的な「const」メンバーは、コンストラクターのないクラスに表示されます。
変数の初期化されていない値を使用するコードについて警告したい場合
独自のイニシャライザ、を使用 -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 = 3.
レベル1:最も攻撃的で、迅速で、精度が最も低い。 より高いレベルのときにおそらく役立つ
警告しないでください -fstrict-エイリアシング falseがほとんどないため、コードが壊れます
ネガ。 ただし、多くの誤検知があります。 すべてのポインタ変換について警告します
逆参照されない場合でも、互換性のない可能性のあるタイプ間。 正面を走る
終了のみ。
レベル2:積極的、迅速、あまり正確ではない。 まだ多くの誤検知がある可能性があります(
ただし、レベル1と同じ数)、フォールスネガティブはほとんどありません(ただし、レベル1より多い可能性があります)。
レベル1とは異なり、アドレスが取得されたときにのみ警告します。 不完全なタイプについて警告します。
フロントエンドでのみ実行されます。
レベル3(デフォルトは -Wstrict-エイリアシング):誤検知が非常に少なく、少数である必要があります
偽陰性。 最適化が有効になっている場合、レベル1または2よりも少し遅くなります。
フロントエンドの一般的なしゃれ+間接参照パターンを処理します。
「*(int *)&some_float」。 最適化が有効になっている場合は、バックエンドでも実行されます。
フローセンシティブなポイントツー情報を使用して、複数のステートメントのケースを処理します。
変換されたポインタが逆参照された場合にのみ警告します。 不完全について警告しません
タイプ。
-Wstrict-オーバーフロー
-Wstrict-overflow =n
このオプションは、次の場合にのみアクティブになります -fstrict-オーバーフロー アクティブです。 ケースについて警告します
ここで、コンパイラは、署名されたオーバーフローが発生しないという仮定に基づいて最適化します。
発生する。 コードがオーバーフローする可能性のあるすべてのケースについて警告するわけではないことに注意してください。
コンパイラが何らかの最適化を実装する場合にのみ警告します。 したがって、これは
警告は最適化レベルによって異なります。
符号付きオーバーフローが発生しないことを前提とした最適化は、次の場合に完全に安全です。
関連する変数の値は、オーバーフローが実際には決して発生しないようなものです。
発生する。 したがって、この警告は簡単に誤検知を引き起こす可能性があります:コードに関する警告
それは実際には問題ではありません。 重要な問題に集中するために、いくつかの警告
レベルが定義されています。 未定義の符号付きオーバーフローの使用については警告は発行されません
ループに必要な反復回数を見積もるとき、特に決定するとき
ループが実行されるかどうか。
-Wstrict-overflow = 1
疑わしく、回避しやすいケースについて警告します。 たとえば、
-fstrict-オーバーフロー、コンパイラは「x +1>x」を1に簡略化します。このレベルの
-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 そしてより高い。
最適化レベルを高くすると、分析の精度が向上します。
-Wsuggest-attribute = format
-不足している形式属性
「フォーマット」属性の候補となる可能性のある関数ポインタについて警告します。
これらは可能な候補であり、絶対的な候補ではないことに注意してください。 GCCはそれを推測します
代入で使用される「フォーマット」属性を持つ関数ポインタ、
初期化、パラメーターの受け渡し、またはreturnステートメントには、対応するステートメントが必要です。
結果のタイプの「format」属性。 つまり、の左側
代入または初期化、パラメーター変数のタイプ、または戻り値
含まれている関数のタイプには、それぞれ「format」属性も必要です。
警告を避けるため。
GCCは、「フォーマット」の候補となる可能性のある関数定義についても警告します。
属性。 繰り返しますが、これらは可能な候補にすぎません。 GCCはその「フォーマット」を推測します
属性は、次のような関数を呼び出す関数に適している可能性があります
「vprintf」または「vscanf」ですが、これが常に当てはまるとは限らず、一部の関数は
「フォーマット」属性が適切なものは検出されない場合があります。
-Wsuggest-final-types
タイプがあればコード品質が向上する仮想メソッドを持つタイプについて警告する
C ++ 11の「最終」指定子で宣言されたか、可能であれば、
匿名の名前空間。 これにより、GCCは多型をより積極的に非仮想化できます
呼び出します。 この警告は、リンク時間の最適化でより効果的です。
クラス階層グラフに関する情報はより完全です。
-Wsuggest-final-methods
メソッドが
C ++ 11の「最終」指定子で宣言されているか、可能であれば、そのタイプはで宣言されています。
匿名の名前空間または「final」指定子。 この警告はより効果的です
リンク時間の最適化を使用します。クラス階層グラフに関する情報は次のとおりです。
より完全。 最初にの提案を検討することをお勧めします
-Wsuggest-final-types 次に、新しい注釈を使用して再構築します。
-提案-オーバーライド
overrideキーワードでマークされていない仮想関数をオーバーライドすることについて警告します。
-Warray 境界
-Warray-bounds =n
このオプションは、次の場合にのみアクティブになります -ftree-vrp アクティブです(デフォルトは -O2 以上)。 これ
常に範囲外の配列への添え字について警告します。 この警告は
有効にする -壁.
-Warray-bounds = 1
これはの警告レベルです -Warray 境界 によって有効になります -壁; より高いレベル
ではなく、明示的に要求する必要があります。
-Warray-bounds = 2
この警告レベルは、最後にアレイの範囲外アクセスについても警告します。
構造体およびポインタを介してアクセスされる配列用。 この警告レベルは、
誤検知の数が多く、デフォルトで非アクティブ化されています。
-Wbool-比較
とは異なる整数値と比較したブール式について警告する
"真/偽"。 たとえば、次の比較は常に誤りです。
int n = 5;
...
if((n> 1)== 2){...}
この警告はによって有効になります -壁.
-Wno-discarded-qualifiers (CおよびObjective-Cのみ)
ポインターの型修飾子が破棄されても警告しないでください。 通常、
コンパイラは、「const char *」変数が、「char」を受け取る関数に渡された場合に警告します。
* "パラメータ。このオプションは、このような警告を抑制するために使用できます。
-Wno-discarded-array-qualifiers (CおよびObjective-Cのみ)
ポインタターゲットである配列の型修飾子が
廃棄されました。 通常、コンパイラは「const int(*)[]」変数がに渡された場合に警告します
「int(*)[]」パラメーターを受け取る関数。 このオプションは抑制に使用できます
そのような警告。
-Wno-incompatibility-pointer-types (CおよびObjective-Cのみ)
互換性のない型を持つポインタ間で変換が行われた場合でも警告しないでください。
この警告は、 -Wno-ポインター記号、ポインタを警告します
異なる符号付きの引数の受け渡しまたは割り当て。
-Wno-int-変換 (CおよびObjective-Cのみ)
互換性のない整数からポインタおよびポインタから整数への変換について警告しないでください。
この警告は暗黙の変換に関するものです。 明示的な変換の場合、警告
-Wno-int-to-pointer-cast と -Wno-pointer-to-int-cast 使用できます。
-Wno-div-by-zero
コンパイル時の整数除算について警告しないでください。 による浮動小数点除算
ゼロは、無限大を取得するための合法的な方法である可能性があるため、警告されません。
NaN。
-Wsystem-ヘッダー
システムヘッダーファイルで見つかった構成の警告メッセージを出力します。 からの警告
システムヘッダーは通常抑制されますが、通常は抑制されないことを前提としています。
実際の問題を示し、コンパイラの出力を読みにくくするだけです。 使用する
このコマンドラインオプションは、GCCにシステムヘッダーから警告を発するように指示します。
ユーザーコードで発生しました。 ただし、 -壁 このオプションと組み合わせて
ありません システムヘッダーの不明なプラグマについて警告する---そのために、 -不明-プラグマ
また、使用する必要があります。
-トランポリン
入れ子関数へのポインターに対して生成されたトランポリンについて警告します。 トランポリンは
アドレスがスタック上で実行時に作成される小さなデータまたはコード
入れ子関数のが取得され、入れ子関数を間接的に呼び出すために使用されます。
一部のターゲットでは、データのみで構成されているため、特別な処理は必要ありません。
ただし、ほとんどのターゲットでは、コードで構成されているため、スタックを作成する必要があります
プログラムが正しく動作するために実行可能。
-Wfloat-等しい
等式比較で浮動小数点値が使用されている場合は警告します。
この背後にある考え方は、(プログラマーにとって)便利な場合があるということです。
浮動小数点値は、無限に正確な実数の近似値と見なしてください。
あなたがこれをしているなら、あなたは計算する必要があります(コードを分析することによって、またはいくつかの
他の方法)計算によって導入される最大または可能性のある最大エラー、および
比較を実行するとき(および出力を生成するとき)にそれを考慮に入れますが、それは
別の問題)。 特に、平等をテストする代わりに、チェックする必要があります
XNUMXつの値の範囲が重複しているかどうかを確認します。 そしてこれは
関係演算子なので、等式の比較はおそらく間違っています。
-伝統的な (CおよびObjective-Cのみ)
従来のCとISOCでは動作が異なる特定の構造について警告します。
従来のCに相当するものがない、および/または問題のあるISOC構造について警告する
避けるべき構造。
*マクロ本体の文字列リテラル内に表示されるマクロパラメータ。 の
従来のCマクロ置換は文字列リテラル内で行われますが、ISOCでは
そうではありません。
*従来のCでは、一部のプリプロセッサディレクティブは存在しませんでした。 伝統的
プリプロセッサは、次の場合にのみ行をディレクティブと見なしました。 # コラムに登場
1行目。 したがって -伝統的な 従来のCのディレクティブについて警告します
理解しますが無視します # の最初の文字として表示されません
この線。 また、「#pragma」のようなディレクティブを非表示にすることをお勧めします。
それらをインデントすることによって従来のC。 一部の従来の実装では、
「#elif」を認識するので、このオプションはそれを完全に回避することを提案します。
*引数なしで表示される関数のようなマクロ。
*単項プラス演算子。
* U 整数の定数接尾辞、または F or L 浮動小数点定数の接尾辞。
(従来のCは L 整数定数の接尾辞。)これらに注意してください
接尾辞は、最新のシステムのシステムヘッダーで定義されているマクロに表示されます。
例: _MIN/_MAX "のマクロ"。ユーザーコードでこれらのマクロを使用すると、
通常、誤った警告が発生しますが、GCCの統合プリプロセッサには
これらの場合に警告を回避するのに十分なコンテキスト。
* XNUMXつのブロックで外部として宣言され、終了後に使用される関数
ブロック。
*「switch」ステートメントのオペランドは「long」型です。
*非「静的」関数宣言は「静的」宣言の後に続きます。 この構成は
一部の従来のCコンパイラで受け入れられています。
*整数定数のISOタイプは、その幅または符号とは異なります。
伝統的なタイプ。 この警告は、定数の底がXNUMXの場合にのみ発行されます。
つまり、通常ビットパターンを表すXNUMX進数またはXNUMX進数の値は、
について警告した。
*ISO文字列連結の使用が検出されます。
*自動集計の初期化。
*識別子がラベルと競合しています。 従来のCには、
ラベル
*ユニオンの初期化。 初期化子がゼロの場合、警告は省略されます。
これは、ユーザーコードのゼロ初期化子が表示されることを前提として行われます。
初期化子の警告の欠落を回避するために、たとえば「__STDC__」を条件とし、
従来のCの場合、デフォルトの初期化はゼロです。
*プロトタイプによる固定/浮動小数点値間の変換、およびその逆。 The
従来のCでコンパイルするときにこれらのプロトタイプがないと、深刻な原因になります
問題。 これは、考えられる変換警告のサブセットです。 フルセット用
つかいます -従来の変換.
*ISOCスタイルの関数定義の使用。 この警告は意図的に 発行
これらのISOC機能のため、プロトタイプ宣言または可変個引数関数用
libibertyの従来のC互換性マクロを使用すると、コードに表示されます。
「PARAMS」と「VPARAMS」。 この警告は、ネストされた関数でもバイパスされます
その機能はすでにGCC拡張であり、したがって
従来のC互換性。
-従来の変換 (CおよびObjective-Cのみ)
プロトタイプによって、発生するものとは異なる型変換が発生した場合に警告します
プロトタイプがない場合の同じ議論に。 これには、
固定小数点から浮動小数点へ、またはその逆、および変換によって幅または
デフォルトのプロモーションと同じ場合を除いて、固定小数点引数の符号。
-W宣言後のステートメント (CおよびObjective-Cのみ)
ブロック内のステートメントの後に宣言が見つかった場合に警告します。 この構成は、既知です
C ++から、ISO C99で導入され、GCCでデフォルトで許可されています。 そうではない
ISOC90でサポートされています。
- ウンデフ
未定義の識別子が「#if」ディレクティブで評価された場合に警告します。
-Wno-endif-labels
「#else」または「#endif」の後にテキストが続く場合は常に警告しないでください。
-影
ローカル変数または型宣言が別の変数をシャドウするたびに警告します。
パラメータ、タイプ、クラスメンバー(C ++の場合)、またはインスタンス変数(Objective-Cの場合)または
組み込み関数がシャドウされるときはいつでも。 C ++では、コンパイラは次の場合に警告することに注意してください。
ローカル変数は明示的なtypedefをシャドウしますが、struct / class/enumをシャドウする場合はシャドウしません。
-Wno-shadow-ivar (Objective-Cのみ)
ローカル変数がObjective-Cのインスタンス変数をシャドウするたびに警告しないでください
方法。
-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ターゲットのみ)
と組み合わせて使用する場合 -Wフォーマット と -衒学者 GNU拡張機能なしで、これ
オプションは、非ISO「printf」/「scanf」フォーマット幅指定子に関する警告を無効にします
「I32」、「I64」、および「I」は、MSランタイムに依存するWindowsターゲットで使用されます。
-Wpointer-算術
関数型または「void」の「サイズ」に依存するものについて警告します。 GNU C
「void*」を使用した計算で便利なように、これらのタイプにサイズ1を割り当てます。
関数へのポインタとポインタ。 C ++では、算術演算の場合にも警告します
「NULL」を含みます。 この警告は、によっても有効になります -Wpedantic.
-Wtype-limits
範囲が限られているため、比較が常にtrueまたは常にfalseの場合に警告します。
データ型ですが、定数式については警告しません。 たとえば、署名されていない場合は警告します
変数は「<」または「>="」でゼロと比較されます。 この警告は、によっても有効になります
-ウェクストラ.
-Wbad-function-cast (CおよびObjective-Cのみ)
関数呼び出しが一致しない型にキャストされたときに警告します。 たとえば、電話がかかってきたら警告する
整数型を返す関数に、ポインタ型にキャストされます。
-Wc90-c99-互換 (CおよびObjective-Cのみ)
ISO C90には存在しないが、ISOC99には存在する機能について警告します。 例えば、
可変長配列、「long long」タイプ、「bool」タイプ、複合語の使用について警告する
リテラル、指定された初期化子など。 このオプションは、
標準モード。 「__extension__」に続く式では、警告が無効になっています。
-Wc99-c11-互換 (CおよびObjective-Cのみ)
ISO C99には存在しないが、ISOC11には存在する機能について警告します。 例えば、
匿名の構造体と共用体、「_Atomic」型修飾子の使用について警告します。
「_Thread_local」ストレージクラス指定子、「_ Alignas」指定子、「Alignof」演算子、
「_Generic」キーワードなど。 このオプションは、標準モードとは無関係です。
「__extension__」に続く式では、警告が無効になっています。
-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の識別子。この警告
オンになります -狭める によって有効になります -壁.
-Wc ++ 14-互換性 (C ++およびObjective-C ++のみ)
ISO C++2011とISOC++2014で意味が異なるC++構造について警告します。
この警告はによって有効になります -壁.
-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*」ポインタへのXNUMXのアドレスは、警告を生成します。 これらは
警告は、コンパイル時に文字列に書き込もうとする可能性のあるコードを見つけるのに役立ちます
定数ですが、宣言で「const」を使用することに非常に注意している場合に限ります
とプロトタイプ。 そうでなければ、それはただの迷惑です。 これが私たちが作らなかった理由です -壁
これらの警告を要求します。
C ++をコンパイルするときは、文字列リテラルから「char」への非推奨の変換について警告してください。
* "。この警告は、C++プログラムではデフォルトで有効になっています。
-破壊された
「longjmp」または「vfork」によって変更される可能性のある変数について警告します。 この警告は
によっても有効になります -ウェクストラ.
-条件付きでサポート (C ++およびObjective-C ++のみ)
条件付きでサポートされている(C ++ 11 [intro.defs])構造について警告します。
-Wコンバージョン
値を変更する可能性のある暗黙の変換について警告します。 これにはコンバージョンが含まれます
「x」が「double」の場合の「abs(x)」のように、実数と整数の間。 間の変換
「unsignedui=-1」のように、signedとunsigned。 のような小さなタイプへの変換
「sqrtf(M_PI)」。 「abs((int)x)」や「ui =
(符号なし)-1、または「abs(2.0)」のように変換によって値が変更されない場合。
符号付き整数と符号なし整数の間の変換に関する警告は、次の方法で無効にできます。
-符号なし変換.
C ++の場合、ユーザー定義の変換の過負荷解決を混乱させることについても警告します。 と
型変換演算子を使用しない変換:「void」への変換、同じ
タイプ、基本クラス、またはそれらへの参照。 署名された間の変換に関する警告
符号なし整数は、C++ではデフォルトで無効になっています。 -Wsign-変換 is
明示的に有効化。
-Wno-conversion-null (C ++およびObjective-C ++のみ)
「NULL」タイプと非ポインタータイプの間の変換について警告しないでください。 -Wconversion-null is
デフォルトで有効になっています。
-Wzero-as-null-ポインター定数 (C ++およびObjective-C ++のみ)
リテラル「0」がnullポインタ定数として使用されている場合に警告します。 これは次の場合に役立ちます
C++11での「nullptr」への変換を容易にします。
-日付-時刻
マクロ「__TIME__」、「__ DATE __」、または「__TIMESTAMP__」が検出されたときに警告します
ビット単位で同一の再現可能なコンパイルを妨げる可能性があります。
-Wdelete-不完全 (C ++およびObjective-C ++のみ)
不完全な型へのポインタを削除するときに警告します。これにより、で未定義の動作が発生する可能性があります。
ランタイム。 この警告はデフォルトで有効になっています。
-無駄なキャスト (C ++およびObjective-C ++のみ)
式が独自の型にキャストされたときに警告します。
-空っぽの体
「if」、「else」、または「dowhile」ステートメントで空の本文が発生した場合に警告します。 この警告
によっても有効になります -ウェクストラ.
-ウェヌム-比較
異なる列挙型の値の比較について警告します。 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コンバージョン.
-Wfloat-変換
実際の値の精度を低下させる暗黙の変換について警告します。 これ
実数から整数への変換、および高精度の実数から低精度への変換が含まれます
精度の実数値。 このオプションは、によっても有効になります -Wコンバージョン.
-Wサイズ-割り当て解除 (C ++およびObjective-C ++のみ)
サイズ変更されていない割り当て解除関数の定義について警告する
void演算子delete(void *)noexcept;
void演算子delete[](void *)noexcept;
対応するサイズの割り当て解除関数の定義なし
void演算子delete(void *、std :: size_t)noexcept;
void演算子delete [](void *、std :: size_t)noexcept;
またはその逆。 によって可能になります -ウェクストラ と一緒に -fsized-割り当て解除.
-Wsizeof-pointer-memaccess
特定の文字列およびメモリの組み込み関数に対する疑わしい長さパラメータについて警告します
引数が「sizeof」を使用する場合。 この警告は、たとえば「memset(ptr、0、sizeof
(ptr)); "" ptr "が配列ではなくポインタであり、可能な修正を提案する場合、または
「memcpy(&foo、ptr、sizeof(&foo));」について。 この警告はによって有効になります -壁.
-配列引数のWsize
配列として宣言されているパラメーターに「sizeof」演算子が適用されたときに警告します
関数定義で。 この警告は、CおよびC++プログラムではデフォルトで有効になっています。
-Wmemset-転置された引数
XNUMX番目の引数が次の場合、「memset」組み込み関数への疑わしい呼び出しについて警告します。
ゼロではなく、XNUMX番目の引数はゼロです。 これはeg@に"memset(buf、sizeof
代わりに、おそらく「memset(buf、0、sizeof buf)」が意味されていました。
診断は、XNUMX番目の引数がリテラルゼロの場合にのみ発行されます。 ある場合
ゼロに折りたたまれた式、あるタイプへのゼロのキャストなど、はるかに少ない
ユーザーが誤って引数を交換し、警告が出されていない可能性があります。
この警告はによって有効になります -壁.
-住所
メモリアドレスの疑わしい使用について警告します。 これらには、
「voidfunc(void); if(func)」などの条件式の関数、および
「if(x == "abc")」などの文字列リテラルのメモリアドレスとの比較。
このような使用法は通常、プログラマーエラーを示します。関数のアドレスは常に
trueと評価されるため、条件付きでの使用は通常、プログラマーが
関数呼び出しで括弧を忘れました。 および文字列リテラルとの比較
結果として不特定の動作が発生し、Cで移植できないため、通常は
プログラマーが「strcmp」を使用することを意図していたこと。 この警告はによって有効になります -壁.
-Wlogical-op
式での論理演算子の疑わしい使用について警告します。 これには使用が含まれます
ビット単位の演算子が期待される可能性が高いコンテキストでの論理演算子。
-Wlogical-not-かっこ
比較の左側のオペランドで使用されていない論理について警告します。 これ
オプションは、RHSオペランドがブール型の場合は警告しません。 その目的は
次のような疑わしいコードを検出します。
int a;
...
if(!a> 1){...}
LHSを括弧で囲むことにより、警告を抑制することができます。
if((!a)> 1){...}
この警告はによって有効になります -壁.
-Waggregate-return
構造体または共用体を返す関数が定義または呼び出された場合に警告します。 (の
配列を返すことができる言語では、これも警告を引き起こします。)
-Wno-aggressive-loop-optimizations
反復回数が一定のループ内で、コンパイラが未定義を検出した場合に警告します
XNUMXつ以上の反復中のステートメントの動作。
-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++では無効です。
プロトタイプを提供し、一致しない宣言はではなく過負荷を宣言します
以前の宣言と競合します。 使用する -欠落-宣言 行方不明を検出する
C++での宣言。
-欠落-宣言
グローバル関数が事前の宣言なしで定義されている場合に警告します。 たとえそうしても
定義自体がプロトタイプを提供します。 このオプションを使用して、グローバルを検出します
ヘッダーファイルで宣言されていない関数。 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};
C ++では、このオプションは空の{}初期化子についても警告しません。次に例を示します。
struct s {int f、g、h; };
sx = {};
この警告はに含まれています -ウェクストラ。 他を取得するには -ウェクストラ これなしの警告、
つかいます -ウェクストラ -Wno-missing-field-initializers.
-Wno-multichar
複数文字の定数(「FOOF」) 使用されている。 通常、それらは
ユーザーのコードのタイプミス。実装で定義された値があり、
ポータブルコードで使用されます。
-正規化[=<なし|id|NFC|NFKC>]
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 or
-正規化されていません。 これは、他の正規化を使用している場合にのみ行う必要があります
スキーム(「D」など)。そうしないと、文字通りのバグを簡単に作成できるためです。
見ることは不可能です。
ISO 10646の一部の文字には明確な意味がありますが、一部のフォントでは同じように見えます
または、特にフォーマットが適用された後の表示方法。 例えば
「\u207F」、「SUPERSCRIPT LATIN SMALL LETTER N」は、通常の「n」と同じように表示されます。
上付き文字に配置されています。 ISO 10646は、 NFKC 正規化スキーム
これらすべてを標準形式に変換すると、GCCはコードが含まれていない場合に警告します
使用する場合はNFKC -Wnormalized = nfkc。 この警告は、すべての警告に相当します
数字0と混同される可能性があるため、文字Oを含む識別子。
したがって、これはデフォルトではありませんが、ローカルコーディング規約として役立つ場合があります。
これらの文字を明確に表示するようにプログラミング環境を修正することはできません。
-Wno-非推奨
非推奨の機能の使用について警告しないでください。
-Wno-非推奨-宣言
非推奨としてマークされた関数、変数、および型の使用について警告しないでください。
「非推奨」属性を使用します。
-オーバーフローなし
定数式でのコンパイル時のオーバーフローについて警告しないでください。
-無臭
リンク時の最適化中に単一定義規則違反について警告します。 必要
-flto-odr-type-merge 有効にします。 デフォルトで有効になっています。
-Wopenmp-simd
ベクター化コストモデルがOpenMPまたはCilkPlussimdディレクティブをオーバーライドする場合に警告します
ユーザーが設定します。 The -fsimd-cost-model = unlimited オプションを使用してコストを緩和できます
モデル。
-Woverride-init (CおよびObjective-Cのみ)
指定を使用するときに、副作用のない初期化されたフィールドがオーバーライドされた場合に警告します
初期化子。
この警告はに含まれています -ウェクストラ。 他を取得するには -ウェクストラ これなしの警告、
つかいます -ウェクストラ -Wno-override-init.
-Wパック
構造体にpacked属性が与えられているが、packed属性には
構造のレイアウトまたはサイズへの影響。 このような構造は、
メリットはほとんどありません。 たとえば、このコードでは、「structbar」の変数「fx」は次のようになります。
「構造体バー」自体に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-inherited-variadic-ctor
基本クラスの場合、C++11継承コンストラクターの使用に関する警告を抑制します
継承元にはC個個引数コンストラクターがあります。 警告はデフォルトでオンになっています。
省略記号は継承されません。
-ウィンライン
インラインとして宣言されている関数をインライン化できない場合に警告します。 これでも
オプションの場合、コンパイラはで宣言されたインライン関数の失敗について警告しません
システムヘッダー。
コンパイラーは、さまざまなヒューリスティックを使用して、インライン化するかどうかを決定します。
関数。 たとえば、コンパイラは関数のサイズを考慮に入れます
インライン化され、現在の関数ですでに実行されているインライン化の量。
したがって、ソースプログラムの重要でないように見える変更により、
によって生成された警告 -ウィンライン 表示または非表示にします。
-Wno-無効なオフセット (C ++およびObjective-C ++のみ)
「offsetof」マクロを非PODタイプに適用することによる警告を抑制します。 によると
2014 ISO C ++標準では、「offsetof」を非標準レイアウトタイプに適用します。
未定義。 ただし、既存のC ++実装では、「offsetof」は通常、
意味のある結果。 このフラグは、自分が書いていることを知っているユーザー向けです
移植性のないコードであり、それに関する警告を意図的に無視することを選択した人。
「offsetof」の制限は、C++標準の将来のバージョンで緩和される可能性があります。
-Wno-int-to-pointer-cast
異なるサイズの整数のポインタ型へのキャストからの警告を抑制します。 の
C ++、小さいサイズのポインタ型へのキャストはエラーです。 Wint からポインターへのキャスト is
デフォルトで有効になっています。
-Wno-pointer-to-int-cast (CおよびObjective-Cのみ)
ポインタから異なるサイズの整数型へのキャストからの警告を抑制します。
-Winvalid-pch
プリコンパイル済みヘッダーが検索パスに見つかったが、使用できない場合に警告します。
-ウーロン茶
「ロングロング」タイプを使用した場合に警告します。 これは、次のいずれかによって有効になります -Wpedantic or
-伝統的な ISOC90およびC++98モードで。 警告メッセージを禁止するには、
-Wno-long-long.
-Wvariadic-マクロ
可変個引数マクロがISOC90モードで使用されている場合、またはGNU代替構文が
ISOC99モードで使用されます。 これは、次のいずれかによって有効になります -Wpedantic or -伝統的な。 へ
警告メッセージを禁止し、使用する -可変個引数マクロなし.
-Wvarargs
次のような可変引数を処理するために使用されるマクロの疑わしい使用法について警告します。
「va_start」。 これはデフォルトです。 警告メッセージを禁止するには、 -Wno-varargs.
-Wvector-操作-パフォーマンス
ベクトル演算がアーキテクチャのSIMD機能を介して実装されていない場合に警告します。
主にパフォーマンスチューニングに役立ちます。 ベクトル演算を実装できます
「区分的」、つまりスカラー演算がすべてのベクトルで実行されることを意味します
エレメント; 「並列」とは、ベクトル演算が以下を使用して実装されることを意味します。
幅の広いタイプのスカラー。通常、パフォーマンス効率が高くなります。 と「シングルとして
スカラー」は、ベクトルがスカラー型に適合することを意味します。
-Wno-virtual-move-assign
重要なC++11の移動で仮想ベースから継承することに関する警告を抑制します
代入演算子。 仮想ベースに沿って到達可能である場合、これは危険です
複数のパスの場合、複数回移動されます。これは、両方のオブジェクトが最終的に
移動元の状態。 ムーブ代入演算子がからの移動を回避するように記述されている場合
移動元オブジェクトの場合、この警告を無効にすることができます。
-Wvla
コードで可変長配列が使用されている場合は警告します。 -Wno-vla 防ぐ -Wpedantic
可変長配列の警告。
-Wvolatile レジスタ変数
レジスタ変数が揮発性であると宣言された場合に警告します。 揮発性モディファイアはしません
登録するための読み取りおよび/または書き込みを排除する可能性のあるすべての最適化を禁止する
変数。 この警告はによって有効になります -壁.
-Wdisabled-最適化
要求された最適化パスが無効になっている場合に警告します。 この警告は一般的には発生しません
コードに問題があることを示します。 それは単にGCCの
オプティマイザーはコードを効果的に処理できません。 多くの場合、問題はあなたの
コードが大きすぎるか複雑すぎます。 GCCは、最適化時にプログラムの最適化を拒否します
それ自体は、途方もない時間がかかる可能性があります。
-Wpointer サイン (CおよびObjective-Cのみ)
ポインタ引数の受け渡しまたは異なる符号付きの割り当てについて警告します。 これ
このオプションは、CおよびObjective-Cでのみサポートされています。 それはによって暗示されます -壁 とにより、
-Wpedantic、で無効にすることができます -Wno-ポインター記号.
-Wstack-プロテクター
このオプションは、次の場合にのみアクティブになります -fstack-プロテクター アクティブです。 機能について警告します
スタックスマッシングから保護されていません。
-Woverlength-文字列
「最小最大」長より長い文字列定数について警告する
C規格で指定されています。 最近のコンパイラでは、通常、次のような文字列定数を使用できます。
標準の最小制限よりもはるかに長いですが、非常にポータブルなプログラムは
長い文字列の使用は避けてください。
制限が適用されます After 文字列定数の連結であり、末尾をカウントしません
NUL。 C90では、制限は509文字でした。 C99では、4095に引き上げられました。C++98は
規範的な最小最大値を指定しないため、で長すぎる文字列を診断しません
C ++。
このオプションは、 -Wpedantic、およびで無効にすることができます
-Wno-overlength-strings.
-Wunsuffixed-float-定数 (CおよびObjective-Cのみ)
接尾辞のない浮動定数に対して警告を発行します。 使用時
とともに -Wsystem-ヘッダー システムヘッダーファイル内のそのような定数について警告します。
これは、「FLOAT_CONST_DECIMAL64」プラグマで使用するコードを準備するときに役立ちます。
99進浮動小数点拡張からCXNUMXへ。
-Wno-designated-init (CおよびObjective-Cのみ)
位置初期化子を使用して構造を初期化する場合の警告を抑制します。
「designated_init」属性でマークされています。
オプション for デバッギング あなたの 演奏曲目 or GCC
GCCには、プログラムまたはGCCのデバッグに使用されるさまざまな特別なオプションがあります。
-g オペレーティングシステムのネイティブ形式(スタブ、COFF、
XCOFF、またはDWARF 2)。 GDBはこのデバッグ情報を処理できます。
スタブ形式を使用するほとんどのシステムでは、 -g 追加のデバッグ情報の使用を可能にします
GDBだけが使用できること。 この追加情報により、GDBでのデバッグ作業が改善されますが
おそらく、他のデバッガーがクラッシュしたり、プログラムの読み取りを拒否したりします。 あなたがしたい場合は
追加情報を生成するかどうかを確実に制御するには、 -gstabs +, -gstabs,
-gxcoff +, -gxcoffまたは -gvms (下記参照)。
GCCを使用すると、 -g -O。 最適化されたコードによって取られるショートカットは
ときどき驚くべき結果が得られます:あなたが宣言したいくつかの変数はに存在しないかもしれません
すべて; 制御の流れは、予期していなかった場所に一時的に移動する可能性があります。 一部のステートメントは
一定の結果を計算するか、値がすでにになっているため、実行されません
手; 一部のステートメントは、移動されたため、別の場所で実行される場合があります
ループの。
それでも、最適化された出力をデバッグすることは可能です。 これはそれを合理的にします
バグがある可能性のあるプログラムにオプティマイザを使用する。
次のオプションは、GCCがより多くの機能を備えて生成される場合に役立ちます
複数のデバッグ形式。
-gsplit-ドワーフ
できるだけ多くのドワーフデバッグ情報を別の出力ファイルに分割します
拡張子は.dwoです。 このオプションにより、ビルドシステムはファイルのリンクを回避できます
デバッグ情報付き。 このオプションを使用するには、次の機能を備えたデバッガーが必要です。
.dwoファイルの読み取り。
-ggdb
GDBで使用するためのデバッグ情報を生成します。 これは、最も表現力豊かなものを使用することを意味します
使用可能な形式(DWARF 2、スタブ、またはどちらも使用できない場合はネイティブ形式)
サポートされています)、可能な場合はGDB拡張機能を含みます。
-gpubnames
dwarf.debug_pubnamesセクションと.debug_pubtypesセクションを生成します。
-ggnu-pubnames
.debug_pubnamesセクションと.debug_pubtypesセクションを適切な形式で生成します
GDBインデックスへの変換。 このオプションは、次のことができるリンカーでのみ役立ちます。
GDBインデックスバージョン7を生成します。
-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倍にもなります。
-fdebug-types-セクション
DWARFバージョン4以降を使用する場合、タイプDIEを独自のものに入れることができます
「.debug_info」セクションの一部にする代わりに、「。debug_types」セクション。 これ
リンカができるので、それらを別々のcomdatセクションに配置する方が効率的です。
重複を削除します。 ただし、すべてのDWARFコンシューマーが「.debug_types」セクションをまだサポートしているわけではありません
一部のオブジェクトでは、「。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形式でデバッグ情報を生成します(サポートされている場合)。 の値
バージョン 2、3、4、または5のいずれかです。 ほとんどのターゲットのデフォルトバージョンは4です。DWARF
バージョン5は実験的なものです。
DWARFバージョン2では、一部のポートは競合しないものを必要とし、常に使用することに注意してください
アンワインドテーブルのDWARF3拡張機能。
バージョン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標準バージョンの拡張機能の使用を許可する
-グドワーフ-バージョン.
-gz[=type]
サポートされている場合は、圧縮されたデバッグセクションをDWARF形式で作成します。 もしも type is
指定しない場合、デフォルトのタイプはアセンブラーとリンカーの機能によって異なります
中古。 type のいずれかである可能性があります なし (デバッグセクションを圧縮しないでください)、 ZLIB (zlibを使用
ELF gABI形式での圧縮)、または zlib-gnu (従来のGNUではzlib圧縮を使用します
フォーマット)。 リンカが圧縮デバッグセクションの書き込みをサポートしていない場合、オプション
拒否されます。 それ以外の場合、アセンブラがそれらをサポートしていない場合は、 -gz 静かに
オブジェクトファイルを作成するときは無視されます。
-gvms
Alpha / VMSデバッグ形式でデバッグ情報を生成します(サポートされている場合)。 これ
Alpha/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比較デバッグ.
-fsanitize = address
高速メモリエラー検出器であるAddressSanitizerを有効にします。 メモリアクセス命令は
範囲外および解放後使用のバグを検出するために装備されています。 見る
<https://github.com/google/sanitizers/wiki/AddressSanitizer>詳細については。 ザ
実行時の動作は、 ASAN_OPTIONS 環境変数。 いつ
「help=1」に設定すると、使用可能なオプションがインストルメントの起動時に表示されます
プログラム。 見る
<https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags>の場合
サポートされているオプションのリスト。
-fsanitize = kernel-address
LinuxカーネルのAddressSanitizerを有効にします。 見るhttps://github.com/google/kasan/wiki>
のガイドをご参照ください。
-fsanitize = thread
高速データ競合検出器であるThreadSanitizerを有効にします。 メモリアクセス命令は
データレースのバグを検出するために装備されています。 見る
<https://github.com/google/sanitizers/wiki#threadsanitizer>詳細については。 実行-
時間の振る舞いは、 TSAN_OPTIONS 環境変数; 見る
<https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags>のリストについては
サポートされているオプション。
-fsanitize = Leak
メモリリーク検出器であるLeakSanitizerを有効にします。 このオプションは、
実行可能ファイルとどちらでもない場合 -fsanitize = address また -fsanitize = thread 使用されている。 その中で
実行可能ファイルが「malloc」などをオーバーライドするライブラリに対してリンクされている場合
アロケータ機能。 見る
<https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer>詳細
詳細。 実行時の動作は、 LSAN_オプション 環境
変数に保存します.
-fsanitize = undefined
高速な未定義動作検出器であるUndefinedBehaviorSanitizerを有効にします。 様々
計算は、実行時に未定義の動作を検出するように調整されています。 電流
サブオプションは次のとおりです。
-fsanitize = shift
このオプションを使用すると、シフト操作の結果がそうではないことを確認できます。
未定義。 正確に未定義と見なされるものはわずかに異なることに注意してください
CとC++の間、およびISOC90とC99の間など。
-fsanitize = integer-divide-by-zero
ゼロによる整数除算と「INT_MIN/-1」除算を検出します。
-fsanitize = unreachable
このオプションを使用すると、コンパイラは「__builtin_unreachable」呼び出しを
代わりに診断メッセージを呼び出します。 「__builtin_unreachable」呼び出しに到達すると、
動作は未定義です。
-fsanitize=vla-バウンド
このオプションは、可変長のサイズをチェックするようにコンパイラーに指示します
配列は正です。
-fsanitize = null
このオプションは、ポインタチェックを有効にします。 特に、で構築されたアプリケーション
このオプションをオンにすると、参照を解除しようとするとエラーメッセージが表示されます。
NULLポインター、または参照(おそらく右辺値参照)がNULLにバインドされている場合
ポインター、またはNULLポインターが指すオブジェクトでメソッドが呼び出された場合。
-fsanitize = return
このオプションは、returnステートメントのチェックを有効にします。 このオプションで構築されたプログラム
オンにすると、非void関数の終わりが
実際に値を返さずに到達しました。 このオプションはC++でのみ機能します。
-fsanitize=signed-integer-オーバーフロー
このオプションは、符号付き整数オーバーフローチェックを有効にします。 の結果を確認します
「+」、「*」、および単項とバイナリの両方の「-」は、符号付きでオーバーフローしません
算術。 整数拡張ルールを考慮に入れる必要があることに注意してください。 あれは、
以下はオーバーフローではありません。
符号付き文字a=SCHAR_MAX;
a ++;
-fsanitize = bounds
このオプションは、配列境界のインストルメンテーションを有効にします。 さまざまな範囲外
アクセスが検出されます。 柔軟な配列メンバー、柔軟な配列メンバーのような配列、
静的ストレージを使用する変数の初期化子はインストルメントされません。
-fsanitize = alignment
このオプションを使用すると、ポインターが逆参照されたときにポインターの配置をチェックできます。
または、参照が不十分に整列されたターゲットにバインドされている場合、またはメソッドまたは
コンストラクターは、整列が不十分なオブジェクトで呼び出されます。
-fsanitize = object-size
このオプションは、を使用してメモリ参照のインストルメンテーションを有効にします
「__builtin_object_size」関数。 さまざまな範囲外のポインタアクセスは
検出された。
-fsanitize=float-ゼロ除算
浮動小数点のゼロ除算を検出します。 他の同様のオプションとは異なり、
-fsanitize=float-ゼロ除算 によって有効にされていない -fsanitize = undefined、以来、
浮動小数点のゼロ除算は、無限大を取得するための正当な方法です。
およびNaN。
-fsanitize =float-cast-overflow
このオプションは、浮動小数点型から整数への変換チェックを有効にします。 チェックします
変換の結果がオーバーフローしないこと。 他の同様のものとは異なり
オプションは、 -fsanitize =float-cast-overflow によって有効にされていない -fsanitize = undefined.
このオプションは、「FE_INVALID」例外が有効になっている場合はうまく機能しません。
-fsanitize=nonnull-属性
このオプションは、呼び出しのインストルメンテーションを有効にし、null値がそうでないかどうかをチェックします
「nonnull」関数によって非null値が必要であるとマークされた引数に渡されます
属性。
-fsanitize=returns-nonnull-属性
このオプションを使用すると、でマークされた関数でreturnステートメントをインストルメント化できます。
「returns_nonnull」関数属性、そのようなものからのnull値の戻りを検出します
機能します。
-fsanitize = bool
このオプションにより、boolからの負荷の計測が可能になります。 0/1以外の値の場合
がロードされると、実行時エラーが発行されます。
-fsanitize = enum
このオプションは、列挙型からの負荷のインストルメンテーションを有効にします。 値の場合
列挙型の値の範囲外がロードされると、実行時エラーは次のようになります。
発行済み。
-fsanitize = vptr
このオプションは、C ++メンバー関数呼び出し、メンバーアクセスのインストルメンテーションを有効にします
そして、基本クラスと派生クラスへのポインタ間のいくつかの変換は、
参照されるオブジェクトの動的タイプは正しいです。
一方、 -ftrapv 署名されたオーバーフローのトラップが発行されます。 -fsanitize = undefined
診断メッセージを表示します。 これは現在、Cファミリーの言語でのみ機能します。
-fno-sanitize = all
このオプションは、以前に有効にされたすべての消毒剤を無効にします。 -fsanitize = all ではありません
一部の消毒剤は併用できないため、許可されています。
-fasan-shadow-offset =数
このオプションは、GCCがAddressSanitizerチェックでカスタムシャドウオフセットを使用するように強制します。 です
カーネルでさまざまなシャドウメモリレイアウトを試すのに便利です
AddressSanitizer。
-fsanitize-recover[=optsの]
-fsanitize-recover = コンマで示された消毒剤のエラー回復モードを制御します-
の分離リスト optsの。 消毒剤コンポーネントに対してこのオプションを有効にすると、
エラーが発生しなかったかのように、プログラムの実行を続行してみてください。 これは複数を意味します
ランタイムエラーは、XNUMX回のプログラム実行で報告でき、の終了コードは
エラーが報告された場合でも、プログラムは成功を示す場合があります。 ザ
-fno-sanitize-recover = オプションを使用して、この動作を変更できます。最初の動作のみ
検出されたエラーが報告され、プログラムはゼロ以外の終了コードで終了します。
現在、この機能は次の場合にのみ機能します -fsanitize = undefined (およびそのサブオプションを除く
for -fsanitize = unreachable と -fsanitize = return), -fsanitize =float-cast-overflow,
-fsanitize=float-ゼロ除算 と -fsanitize = kernel-address。 これらの消毒剤のために
エラー回復はデフォルトでオンになっています。 -fsanitize-recover = all と
-fno-sanitize-recover = all 前者も受け入れられ、前者はすべての人の回復を可能にします
それをサポートする消毒剤、後者はすべての消毒剤の回復を無効にします
それをサポートします。
明示的な構文なし optsの パラメータは非推奨です。 と同等です
-fsanitize-recover = undefined、float-cast-overflow、float-divide-by-zero
同様に -fno-sanitize-recover に相当します
-fno-sanitize-recover = undefined、float-cast-overflow、float-divide-by-zero
-fsanitize-未定義-エラー時のトラップ
この -fsanitize-未定義-エラー時のトラップ オプションは、コンパイラにレポートするように指示します
「libubsan」ライブラリルーチンではなく「__builtin_trap」を使用した未定義の動作。
これの利点は、「libubsan」ライブラリが不要であり、リンクされていないことです。
であるため、これは自立型環境でも使用できます。
-fcheck-ポインター境界
PointerBoundsCheckerインストルメンテーションを有効にします。 各メモリリファレンスはインストルメント化されています
それに関連付けられた境界に対するメモリアクセスに使用されるポインタのチェック
ポインター。
現在、利用可能なIntel MPXの実装のみが存在するため、x86ターゲットと
-mmpx この機能を有効にするには、が必要です。 MPXベースのインストルメンテーションには
ハードウェアでMPXを有効にし、境界違反信号を処理するランタイムライブラリ。 に
デフォルトの場合 -fcheck-ポインター境界 と -mmpx オプションは、プログラムをリンクするために使用されます。
GCCドライバーは libmpx ランタイムライブラリと libmpxwrappers 図書館。 これ
また、このオプションをサポートしている場合は、「-zbndplt」をリンカーに渡します(これはチェックされています)。
libmpx構成で)。 古いバージョンのリンカはオプションを無視する場合があることに注意してください。 ゴールド
リンカは「-zbndplt」オプションをサポートしていません。 リンカすべてに「-zbndplt」サポートがない場合
ダイナミックライブラリへの呼び出しは、通過した境界を失い、全体的な保護レベルを低下させます。 これは
'-zbndplt'をサポートするリンカーを使用することを強くお勧めします。 そのようなリンカーがない場合
利用可能であるため、常に使用することをお勧めします -static-libmpxwrappers より良い保護のために
レベルまたは使用 -静的 ダイナミックライブラリへの外部呼び出しを完全に回避します。 MPX-
ベースのインストルメンテーションはデバッグに使用でき、本番環境に含めることもできます
プログラムのセキュリティを強化するコード。 使用法に応じて、異なる場合があります
ランタイムライブラリの要件。 MPXランタイムライブラリの現在のバージョン
デバッグツールとして使用することを目的としています。 MPXランタイムライブラリの使用は
-lpスレッド。 参照 -静的-libmpx。 ランタイムライブラリの動作に影響を与える可能性があります
さまざまな CHKP_RT_ * 環境変数。 見る
<https://gcc.gnu.org/wiki/Intel%20MPX%20support%20in%20the%20GCC%20compiler>詳細
詳細。
生成された計装は、さまざまな方法で制御できます -fchkp- * オプションとによって
「bnd_variable_size」構造フィールド属性と「bnd_legacy」、および「bnd_instrument」
関数属性。 GCCは、制御するための多数の組み込み関数も提供します
ポインタ境界チェッカー。
-fchkp-チェック不完全タイプ
不完全な型の変数のポインター境界チェックを生成します。 によって可能になります
デフォルト。
-fchkp-ナローバウンド
オブジェクトフィールドへのポインタのためにポインタ境界チェッカーによって使用される境界を制御します。 もしも
ナローイングが有効になり、フィールド境界が使用されます。 それ以外の場合は、オブジェクト境界が使用されます。
参照 -fchkp-narrow-to-innermost-array と -fchkp-first-field-has-own-bounds.
デフォルトで有効になっています。
-fchkp-first-field-has-own-bounds
ポインタ境界チェッカーに、最初のアドレスに狭い境界を使用するように強制します
構造内のフィールド。 デフォルトでは、最初のフィールドへのポインタは同じ境界を持っています
構造全体へのポインタとして。
-fchkp-narrow-to-innermost-array
ネストされている場合、ポインタ境界チェッカーに最も内側の配列の境界を使用するように強制します
静的アレイアクセス。 デフォルトでは、このオプションは無効になっており、最も外側の境界があります
配列が使用されます。
-fchkp-最適化
ポインタ境界チェッカーの最適化を有効にします。 最適化時にデフォルトで有効
レベル -O, -O2, -O3.
-fchkp-use-fast-string-functions
ポインタによる文字列関数の*_nobndバージョン(境界のコピーではない)の使用を有効にします
境界チェッカー。 デフォルトでは無効になっています。
-fchkp-use-nochk-string-functions
ポインタによる文字列関数の*_nochkバージョン(境界のチェックなし)の使用を有効にします
境界チェッカー。 デフォルトでは無効になっています。
-fchkp-use-static-bounds
ポインタ境界チェッカーが静的境界を保持する静的境界を生成できるようにする
変数。 デフォルトで有効になっています。
-fchkp-use-static-const-bounds
それぞれを生成するのではなく、静的に初期化された境界を定数境界に使用します
それらが必要とされる時間。 デフォルトで有効になっている場合 -fchkp-use-static-bounds 有効になっています。
-fchkp-ゼロ動的サイズを無限として扱う
このオプションを使用すると、動的に取得されるサイズがゼロである不完全なタイプのオブジェクト
代わりに、ポインタ境界チェッカーによって無限のサイズを持つものとして扱われます。 このオプション
プログラムが一部のサイズ情報が欠落しているライブラリにリンクされている場合に役立つことがあります
シンボル。 デフォルトでは無効になっています。
-fchkp-チェック-読み取り
ポインタ境界チェッカーに、メモリへのすべての読み取りアクセスのチェックを生成するように指示します。
デフォルトで有効になっています。
-fchkp-チェック-書き込み
ポインタ境界チェッカーに、メモリへのすべての書き込みアクセスのチェックを生成するように指示します。
デフォルトで有効になっています。
-fchkp-ストア境界
ポインター境界チェッカーに、ポインター書き込み用の境界ストアを生成するように指示します。
デフォルトで有効になっています。
-fchkp-instrument-calls
ポインター境界チェッカーにポインター境界を呼び出しに渡すように指示します。 デフォルトで有効になっています。
-fchkp-instrument-marked-only
ポインタ境界チェッカーに、でマークされた関数のみを計測するように指示します
「bnd_instrument」属性。 デフォルトでは無効になっています。
-fchkp-use-wrappers
Pointer Bounds Checkerを使用して、組み込み関数の呼び出しを次の呼び出しに置き換えることができます。
ラッパー関数。 いつ -fchkp-use-wrappers プログラム、GCCドライバーをリンクするために使用されます
自動的にリンクします libmpxwrappers。 参照 -static-libmpxwrappers。 有効
デフォルトでは
-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-レポート
コンパイラが永続的なメモリ割り当てに関する統計を出力するようにします
終わります。
-fmem-レポート-wpa
WPAの永続的なメモリ割り当てに関する統計をコンパイラに出力させます
フェーズのみ。
-fpre-ipa-mem-report
-fpost-ipa-mem-report
またはの前に、コンパイラに永続的なメモリ割り当てに関する統計を出力させます。
手続き間最適化の後。
-fprofile-レポート
(推定)プロファイルの整合性に関する統計をコンパイラーに出力させます
個々のパスの効果。
-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無効化-種類-パス=範囲リスト
これは、最適化を明示的に無効/有効にするために使用されるオプションのセットです。
パスします。 これらのオプションは、GCCのデバッグに使用することを目的としています。 コンパイラユーザーは
代わりに、パスを有効/無効にするための通常のオプションを使用してください。
-fdisable-ipa-パス
IPAパスを無効にする パス. パス パス名です。 同じパスが静的である場合
コンパイラで複数回呼び出される場合は、パス名に
1から始まる連番。
-fdisable-rtl-パス
-fdisable-rtl-パス=範囲リスト
RTLパスを無効にする パス. パス パス名です。 同じパスが静的である場合
コンパイラで複数回呼び出される場合は、パス名に
1から始まる連番。 範囲リスト のコンマ区切りのリストです
関数範囲またはアセンブラー名。 各範囲は、
結腸。 範囲は両端を含みます。 範囲が些細な場合、数値
ペアは単一の数値として簡略化できます。 関数のコールグラフノードの場合
UID 指定された範囲のXNUMXつ、 パス そのために無効になっています
関数。 ザ UID ダンプファイルの関数ヘッダーに表示され、パス
オプションを使用して名前をダンプできます -fdump-パス.
-fdisable-tree-パス
-fdisable-tree-パス=範囲リスト
ツリーパスを無効にする パス。 見る -fdisable-rtl オプションの説明について
引数
-フェナブル-ipa-パス
IPAパスを有効にする パス. パス パス名です。 同じパスが静的である場合
コンパイラで複数回呼び出される場合は、パス名に
1から始まる連番。
-フェナブル-rtl-パス
-フェナブル-rtl-パス=範囲リスト
RTLパスを有効にする パス。 見る -fdisable-rtl オプション引数の説明と
例。
-フェナブルツリー-パス
-フェナブルツリー-パス=範囲リスト
ツリーパスを有効にする パス。 見る -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-パス
-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-sched1
-fdump-rtl-sched2
-fdump-rtl-sched1 と -fdump-rtl-sched2 基本ブロックの後にダンプを有効にする
スケジューリングパス。
-fdump-rtl-ree
サイン/ゼロ拡張除去後にダンプします。
-fdump-rtl-seqabstr
一般的なシーケンス検出後にダンプします。
-fdump-rtl-shorten
枝を短くした後にダンプします。
-fdump-rtl-兄弟
兄弟呼び出しの最適化後にダンプします。
-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 注釈。
-dx 関数をコンパイルする代わりに、関数のRTLを生成するだけです。 通常、
-fdump-rtl-expand.
-fdump-noaddr
デバッグダンプを行うときは、アドレス出力を抑制してください。 これにより、
異なるコンパイラバイナリを使用したコンパイラ呼び出しのダンプのデバッグにdiffを使用する
および/または異なるテキスト/bss/データ/ヒープ/スタック/dsoの開始位置。
-freport-バグ
C / C ++コンパイラのICEの場合、デバッグ情報を収集して一時ファイルにダンプします
発生しました。
-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-スイッチ-オプション
-fdump-tree-スイッチ-オプション=ファイル名
中間言語ツリーの処理のさまざまな段階でダンプを制御して、
ファイル。 ファイル名は、スイッチ固有のサフィックスをに追加することによって生成されます。
ソースファイル名。ファイルは出力ファイルと同じディレクトリに作成されます。 の
の場合 =ファイル名 オプションの場合、ダンプは自動ではなく指定されたファイルに出力されます
名前付きダンプファイル。 の場合 -オプション フォームが使用され、 オプション のリストです - 分離しました
ダンプの詳細を制御するオプション。 すべてのオプションがすべてに適用できるわけではありません
ダンプ; 意味のないものは無視されます。 次のオプションを使用できます
住所
各ノードのアドレスを出力します。 通常、これは変更されるため意味がありません
環境とソースファイルに応じて。 その主な用途は、
デバッグ環境でファイルをダンプします。
asmname
特定のdeclに「DECL_ASSEMBLER_NAME」が設定されている場合は、それをダンプで使用します
「DECL_NAME」の代わりに。 その主な用途は、
アセンブリファイル内のマングルされた名前。
スリム
フロントエンド中間表現をダンプするときは、のメンバーのダンプを禁止します
単にそのスコープに到達したという理由だけで、関数のスコープまたは本体。 それだけ
他のパスから直接到達できる場合は、そのようなアイテムをダンプします。
きれいに印刷された木をダンプするとき、このオプションはの本体のダンプを禁止します
制御構造。
RTLをダンプするときは、デフォルトではなくスリム(圧縮)形式でRTLを印刷します
LISPのような表現。
生 ツリーの生の表現を印刷します。 デフォルトでは、木はきれいに印刷されます
Cのような表現。
details
より詳細なダンプを有効にします(すべてのダンプオプションで受け入れられるわけではありません)。 含める
最適化パスからの情報。
統計情報
パスに関するさまざまな統計のダンプを有効にします(すべてのダンプで尊重されるわけではありません)
オプション)。
ブロック
基本ブロック境界の表示を有効にします(rawダンプでは無効)。
グラフ
他の示されたダンプファイルのそれぞれについて(-fdump-rtl-パス)、ダンプ
GraphVizでの表示に適した制御フローグラフの表現
ファイル.パスID.パス.ドット。 ファイル内の各関数は、サブグラフとしてきれいに印刷されます。
GraphVizがそれらすべてを単一のプロットでレンダリングできるようにします。
このオプションは現在、RTLダンプに対してのみ機能し、RTLは常に次の場所にダンプされます。
スリムなフォルム。
VOP
すべてのステートメントの仮想オペランドの表示を有効にします。
リネノ
ステートメントの行番号の表示を有効にします。
UID 各変数の一意のID( "DECL_UID")の表示を有効にします。
詳細
各ステートメントのツリーダンプの表示を有効にします。
eh 各ステートメントを保持しているEHリージョン番号の表示を有効にします。
scev
スカラー進化分析の詳細の表示を有効にします。
最適化
最適化情報の表示を有効にします(特定のパスでのみ使用可能)。
逃した
見逃した最適化情報の表示を有効にします(特定のパスでのみ使用可能)。
注意
その他の詳細な最適化情報を有効にします(特定のパスでのみ使用可能)。
=ファイル名
自動名前付きダンプファイルの代わりに、指定されたファイル名に出力します。 ファイル
名 (Linuxで言うところのstdout) と stderr 特別に扱われ、すでに開いていると見なされます
標準ストリーム。 例えば、
gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks = foo.dump
-fdump-tree-pre = stderr file.c
ベクター化されたダンプを出力します foo.ダンプ、PREダンプが出力されている間 stderr.
同じパスにXNUMXつの競合するダンプファイル名が指定されている場合、後者は
オプションは以前のものを上書きします。
を を除くすべてのオプションをオンにします 生, スリム, 詳細 と リネノ.
オプトオール
すべての最適化オプションをオンにします。 最適化, 逃した, 注意.
次のツリーダンプが可能です。
オリジナル
ツリーベースの最適化の前にダンプして、 ファイル.オリジナル.
最適化
すべてのツリーベースの最適化後にダンプし、 ファイル.最適化済み.
ギンプル
gimplificationパスの前後に各関数をファイルにダンプします。 ファイル
名前は追加して作成されます .ギンプル ソースファイル名に。
cfg 各関数の制御フローグラフをファイルにダンプします。 ファイル名はによって作られています
追記 .cfgの ソースファイル名に。
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 ソースファイル名に。
を このオプションで提供されるフラグを使用して、使用可能なすべてのツリーダンプを有効にします。
-fopt-情報
-fopt-情報-オプション
-fopt-情報-オプション=ファイル名
さまざまな最適化パスからの最適化ダンプを制御します。 の場合 -オプション 形は
中古、 オプション のリストです - ダンプの詳細を選択するための個別のオプションキーワードと
最適化。
この オプション XNUMXつのグループに分けることができます:の冗長性を説明するオプション
ダンプ、およびどの最適化を含める必要があるかを説明するオプション。 からのオプション
重複しないため、両方のグループを自由に混在させることができます。 ただし、
競合がある場合は、後のオプションがコマンドラインの前のオプションを上書きします。
次のオプションは、ダンプの詳細度を制御します。
最適化
最適化が正常に適用されたときに情報を出力します。 パスまでです
関連する情報を決定します。 たとえば、ベクトライザーは印刷を渡します
正常にベクトル化されたループのソース位置。
逃した
失敗した最適化に関する情報を出力します。 個々のパスの制御
出力に含める情報。
注意
特定の変換など、最適化に関する詳細情報を出力します。
決定などに関するより詳細なメッセージ。
を 詳細な最適化情報を印刷します。 これも 最適化, 逃した,
注意.
次のオプションキーワードのXNUMXつ以上を使用して、
最適化:
IPA すべての手続き間最適化からのダンプを有効にします。
ループ
すべてのループ最適化からのダンプを有効にします。
インライン
すべてのインライン最適化からのダンプを有効にします。
VEC すべてのベクトル化最適化からのダンプを有効にします。
オプトオール
すべての最適化からのダンプを有効にします。 これは最適化グループのスーパーセットです
上記にリストされています。
If オプション 省略され、デフォルトで 最適化-optall、これはすべての情報をダンプすることを意味します
すべてのパスからの成功した最適化について。
Status ファイル名 が提供されると、適用可能なすべての最適化からのダンプは次のようになります。
に連結されます ファイル名。 それ以外の場合、ダンプはに出力されます stderr。 しかし
の試合に -fopt-情報 オプションが受け入れられ、そのうちのXNUMXつだけに含めることができます ファイル名。 場合
他のファイル名が提供されると、最初のそのようなオプションを除くすべてが無視されます。
出力に注意してください ファイル名 複数の翻訳単位の場合は上書きされます。 もしも
複数の翻訳ユニットからの結合された出力が望まれます、 stderr 使用すべきです
を代わりにお使いください。
次の例では、最適化情報は次のように出力されます。 stderr:
gcc -O3 -fopt-info
この例:
gcc -O3 -fopt-info-missed = missed.all
にすべてのパスから逃した最適化レポートを出力します 見逃した。、およびこれ:
gcc -O2 -ftree-vectorize -fopt-info-vec-missed
ベクトル化パスから逃した最適化の機会に関する情報を出力します
on stderr。 ご了承ください -fopt-info-vec-missed に相当します -fopt-info-missed-vec.
別の例として、
gcc -O3 -fopt-info-inline-optimized-missed = inline.txt
失敗した最適化に関する情報と、すべての最適化された場所を出力します
インライン化はに渡されます インライン.txt.
最後に、次のことを考慮してください。
gcc -fopt-info-vec-missed = vec.miss -fopt-info-loop-optimized = loop.opt
ここにXNUMXつの出力ファイル名があります vec.miss と ループ.オプト XNUMXつだけなので競合しています
出力ファイルが許可されます。 この場合、最初のオプションのみが有効になり、
以降のオプションは無視されます。 したがって、 vec.miss ダンプを含むが生成されます
逃した機会についてのvectorizerから。
-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-追跡、選択的スケジューリングが有効になっている場合を除きます。
-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自体が構築されています。)
-fno-eliminate-unused-debug-types
通常、DWARF 2出力を生成する場合、GCCは次のデバッグシンボル出力の生成を回避します。
コンパイル中のソースファイルで使用されていないタイプ。 時々それは役に立ちます
コンパイルユニットで宣言されたすべてのタイプのデバッグ情報をGCCに出力させるには、
それらがそのコンパイルユニットで実際に使用されているかどうかに関係なく、
たとえば、デバッガーで、実際にはないタイプに値をキャストする場合
プログラムで使用されます(ただし、宣言されています)。 ただし、多くの場合、これにより
かなりの量の無駄なスペース。
オプション それ 管理 最適化
これらのオプションは、さまざまな種類の最適化を制御します。
最適化オプションがない場合、コンパイラの目標はコンパイルのコストを削減することです
デバッグで期待どおりの結果が得られるようにします。 ステートメントは独立しています:あなたが
ステートメント間のブレークポイントでプログラムを停止すると、新しい値をに割り当てることができます
変数を指定するか、プログラムカウンターを関数内の他のステートメントに変更して、
まさにあなたがソースコードから期待する結果。
最適化フラグをオンにすると、コンパイラはパフォーマンスの向上やパフォーマンスの向上を試みます。
コンパイル時間と、場合によってはデバッグ機能を犠牲にしてコードサイズ
プログラム。
コンパイラーは、プログラムに関する知識に基づいて最適化を実行します。
複数のファイルを一度に単一の出力ファイルモードにコンパイルすると、コンパイラは次のように使用できます。
各ファイルをコンパイルするときにすべてのファイルから取得した情報。
すべての最適化がフラグによって直接制御されるわけではありません。 を持っている最適化のみ
フラグはこのセクションにリストされています。
ほとんどの最適化は、次の場合にのみ有効になります。 -O レベルはコマンドラインで設定されます。 さもないと
個々の最適化フラグが指定されている場合でも、これらは無効になります。
ターゲットとGCCの構成方法に応じて、わずかに異なるセット
最適化はそれぞれで有効にすることができます -O ここにリストされているものよりもレベル。 GCCを呼び出すことができます
-Q --help =optimizers で有効になっている最適化の正確なセットを見つけるには
各レベル。
-O
-O1 最適化。 コンパイルの最適化には多少時間がかかり、
大きな関数。
連絡先 -O、コンパイラは、実行せずにコードサイズと実行時間を削減しようとします
コンパイルに多大な時間を要する最適化。
-O 次の最適化フラグをオンにします。
-fauto-inc-dec -fbranch-count-reg -fcombine-stack-adjustments -f比較-elim
-fcprop-レジスタ -fdce -fdefer-pop -fdelayed-ブランチ -fdse -前方伝播
-fguess-分岐確率 -fif-変換2 -fif-変換
-finline-functions-call-once -fipa-pure-const -fipa-プロファイル -fipa-リファレンス
-fmerge-定数 -fmove-ループ不変 -fshrink-wrap -fsplit-wide-types
-ftree-ビット-ccp -ftree-ccp -fssa-phiopt -ftree-ch -ftree-コピー-プロップ -ftree-copyrename
-ftree-dce -ftree-ドミネーター-opts -ftree-dse -ftree-forwprop -ftree-fre -ftree-phiprop
-ftree-シンク -ftree-slsr -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 -fdevirtualize-投機的に
-高価な最適化 -fgcse -fgcse-lm -fhoist-隣接ロード
-finline-small-functions -findirect-インライン化 -fipa-cp -fipa-cp-アライメント -フィパスラ
-fipa-icf -fisolate-erroneous-paths-間接参照 -flra-remat -foptimize-兄弟呼び出し
-foptimize-strlen -部分的なインライン化 -fのぞき穴2 -フリーオーダーブロック
-freeorder-blocks-and-partition -freorder-関数 -frerun-cse-ループ後
-fsched-インターブロック -fsched-spec -fschedule-insn -fschedule-insns2 -fstrict-エイリアシング
-fstrict-オーバーフロー -ftree-builtin-call-dce -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-loop-vectorize, -ftree-loop-distribute-patterns, -ftree-slp-ベクトル化,
-fvect-cost-モデル, -ftree-部分-pre と -fipa-cp-クローン オプション。
-O0 コンパイル時間を短縮し、デバッグで期待どおりの結果が得られるようにします。 これは
デフォルト。
-オス サイズを最適化します。 -オス すべてを有効にします -O2 通常は増加しない最適化
コードサイズ。 また、コードサイズを削減するように設計されたさらなる最適化も実行します。
-オス 次の最適化フラグを無効にします。 -falign-関数 -falign-ジャンプ
-falign-ループ -falign-ラベル -フリーオーダーブロック -freeorder-blocks-and-partition
-fprefetch-ループ配列
-オーファスト
厳格な規格への準拠は無視してください。 -オーファスト すべてを有効にします -O3 最適化。 また
すべての標準準拠プログラムに有効ではない最適化を有効にします。 それ
オンになります -ffast-数学 およびFortran固有 -fno-protect-parens と -fstack-配列.
-オグ デバッグエクスペリエンスを最適化します。 -オグ 干渉しない最適化を可能にします
デバッグ。 これは、標準編集で選択する最適化レベルである必要があります-
コンパイル-デバッグサイクル、維持しながら妥当なレベルの最適化を提供
高速コンパイルと優れたデバッグエクスペリエンス。
複数使用する場合 -O オプション、レベル番号の有無にかかわらず、最後のそのようなオプションは
効果的なもの。
フォームのオプション -fフラグ マシンに依存しないフラグを指定します。 ほとんどのフラグには両方があります
ポジティブフォームとネガティブフォーム。 の負の形式 -ふふー is -fno-foo。 下の表では、
フォームのXNUMXつだけがリストされています---あなたが通常使用するもの。 あなたは他を理解することができます
削除することによって形成する NO- またはそれを追加します。
次のオプションは、特定の最適化を制御します。 それらはどちらかによってアクティブ化されます -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」
ターゲットマシンがこのフラグをサポートするかどうかを制御します。
32ビットGNU/Linux x86および32ビットのデフォルト設定(サイズを最適化していない場合)
ダーウィンx86ターゲットは -fomit-フレームポインター。 GCCは、
--有効フレームポインタ デフォルトを変更するオプションを構成します。
レベルで有効 -O, -O2, -O3, -オス.
-foptimize-兄弟呼び出し
兄弟呼び出しと末尾再帰呼び出しを最適化します。
レベルで有効 -O2, -O3, -オス.
-foptimize-strlen
さまざまな標準C文字列関数(「strlen」、「strchr」、「strcpy」など)を最適化し、
それらの「_FORTIFY_SOURCE」の対応物をより高速な代替手段に変換します。
レベルで有効 -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。
デフォルトで有効になっています -O1 そしてより高い。
デフォルトは -fbranch-count-reg.
-fno-function-cse
関数アドレスをレジスタに入れないでください。 を呼び出す各命令を作成します
定数関数には、関数のアドレスが明示的に含まれています。
このオプションを使用すると、コードの効率が低下しますが、
アセンブラの出力は、このオプションが次の場合に実行される最適化によって混乱する可能性があります。
使用されていない。
デフォルトは -ffunction-cse
-fno-zero-in-bss で初期化
ターゲットがBSSセクションをサポートしている場合、GCCはデフォルトで次の変数を配置します。
BSSにゼロに初期化されます。 これにより、結果のコードのスペースを節約できます。
一部のプログラムは変数に明示的に依存しているため、このオプションはこの動作をオフにします
データセクションに移動---たとえば、結果の実行可能ファイルが
そのセクションの始まりおよび/またはそれに基づいて仮定を立てます。
デフォルトは -fzero-bss で初期化.
-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 が有効になっている場合、グローバル共通部分式除去は移動を試みます
店舗によってのみ殺される負荷。 これにより、
ループ外のロードに変更されるロード/ストアシーケンス、およびループ内のコピー/ストア
ループ
デフォルトで有効になっている場合 -fgcse 有効になっています。
-fgcse-sm
日時 -fgcse-sm が有効になっている場合、ストアモーションパスはグローバルコモンの後に実行されます
部分式除去。 このパスは、ストアをループの外に移動しようとします。 使用時
と一緒に -fgcse-lm、ロード/ストアシーケンスを含むループを変更できます
ループの前にロードし、ループの後にストアします。
どの最適化レベルでも有効になっていません。
-fgcse-ラス
日時 -fgcse-ラス が有効になっている場合、グローバル共通部分式除去パス
同じメモリ位置(両方)に格納された後に発生する冗長な負荷を排除します
部分的および完全な冗長性)。
どの最適化レベルでも有効になっていません。
-fgcse-アフターリロード
日時 -fgcse-アフターリロード が有効になっている場合、冗長負荷除去パスが実行されます
リロード後。 このパスの目的は、冗長な流出をクリーンアップすることです。
-faggressive-loop-optimizations
このオプションは、言語制約を使用して次の境界を導出するようにループオプティマイザに指示します。
ループの反復回数。 これは、ループコードが呼び出さないことを前提としています
たとえば、符号付き整数のオーバーフローまたは範囲外を引き起こすことによる未定義の動作
配列アクセス。 ループの反復回数の範囲は、ガイドに使用されます
ループの展開とピーリング、およびループ終了テストの最適化。 このオプションは有効です
デフォルトでは
-funsafe ループの最適化
このオプションは、ループオプティマイザに、ループインデックスがオーバーフローしないと想定するように指示します。
重要な終了条件を持つループは無限ではありません。 これにより、より広い
ループオプティマイザ自体がこれらを証明できない場合でも、ループ最適化の範囲
仮定は有効です。 使用する場合 -Wunsafe ループの最適化、コンパイラは警告します
この種のループが見つかった場合。
-クロスジャンピング
クロスジャンプ変換を実行します。 この変換により、同等のコードと
コードサイズを節約します。 結果のコードは、クロスなしの場合よりもパフォーマンスが向上する場合とそうでない場合があります。
ジャンピング。
レベルで有効 -O2, -O3, -オス.
-fauto-inc-dec
アドレスの増分または減分をメモリアクセスと組み合わせます。 このパスは
これをサポートするための指示がないアーキテクチャでは常にスキップされます。
デフォルトで有効になっています -O これをサポートするアーキテクチャではそれ以上です。
-fdce
RTLでデッドコード除去(DCE)を実行します。 デフォルトで有効になっています -O そしてより高い。
-fdse
RTLでデッドストア除去(DSE)を実行します。 デフォルトで有効になっています -O そしてより高い。
-fif-変換
条件付きジャンプをブランチのない同等のものに変換しようとします。 これも
条件付き移動、最小、最大、フラグとabs命令の設定、およびいくつかのトリックの使用
標準の算術演算で実行できます。 チップ上での条件付き実行の使用
利用可能はによって制御されます -fif-変換2.
レベルで有効 -O, -O2, -O3, -オス.
-fif-変換2
条件付き実行(利用可能な場合)を使用して、条件付きジャンプをに変換します
ブランチレスの同等物。
レベルで有効 -O, -O2, -O3, -オス.
-fdeclone-ctor-dtor
C ++ ABIには、コンストラクタとデストラクタ用に複数のエントリポイントが必要です。
基本サブオブジェクト、XNUMXつは完全なオブジェクト用、もうXNUMXつは呼び出しを行う仮想デストラクタ用です。
演算子は後で削除します。 仮想ベースを持つ階層の場合、ベースと完全
バリアントはクローンです。これは、関数のXNUMXつのコピーを意味します。 このオプションを使用すると、
基本および完全なバリアントは、共通の実装を呼び出すサンクに変更されます。
によって可能になります -オス.
-fdelete-null-pointer-checks
プログラムがnullポインターを安全に逆参照できず、コードやデータがないと仮定します。
要素はそこにあります。 これにより、単純な定数畳み込みの最適化が可能になります。
最適化レベル。 さらに、GCCの他の最適化パスは、このフラグを使用して
nullポインタの無駄なチェックを排除するグローバルデータフロー分析を制御します。
これらは、ポインタがすでに逆参照された後にチェックされた場合、
nullにすることはできません。
ただし、一部の環境では、この仮定は正しくないことに注意してください。 使用する
-fno-delete-null-pointer-checks 依存するプログラムに対してこの最適化を無効にする
その振る舞いについて。
一部のターゲット、特に埋め込みターゲットでは、すべてのレベルでこのオプションが無効になっています。 さもないと
すべてのレベルで有効になっています。 -O0, -O1, -O2, -O3, -オス。 情報を使用するパス
さまざまな最適化レベルで個別に有効になります。
-fdevirtualize
呼び出しを仮想関数から直接呼び出しに変換してみてください。 これは両方で行われます
プロシージャ内および間接インライン化の一部としてのプロシージャ間
(-findirect-インライン化)および手続き間定数伝播(-fipa-cp)。 で有効
レベル -O2, -O3, -オス.
-fdevirtualize-投機的に
仮想関数への呼び出しを投機的な直接呼び出しに変換してみてください。 に基づく
タイプ継承グラフの分析、特定の呼び出しについてのセットを決定します
可能性の高いターゲット。 セットが小さい場合、できればサイズ1の場合は、呼び出しを次のように変更します。
直接呼び出しと間接呼び出しの条件付き決定。 投機的な呼び出しが可能になります
インライン化など、より多くの最適化。 さらに後で役に立たないと思われるとき
最適化すると、元の形式に変換されます。
-fdevvirtualize-at-ltrans
リンクを実行するときに積極的な仮想化解除に必要な追加情報をストリーミングします-
ローカル変換モードの時間オプティマイザ。 このオプションにより、さらに多くのことが可能になります
非仮想化されますが、ストリーミングデータのサイズが大幅に増加します。 このため
デフォルトで無効になっている理由。
-高価な最適化
比較的費用のかかるいくつかのマイナーな最適化を実行します。
レベルで有効 -O2, -O3, -オス.
フリー
冗長な拡張命令を削除してみてください。 これは特に役立ちます
x86-64アーキテクチャは、64ビットレジスタで暗黙的にゼロ拡張します。
下半分の32ビットに書き込みます。
Alpha、AArch64、x86のレベルで有効 -O2, -O3, -オス.
-fno-ライフタイム-dse
C ++では、オブジェクトの値は、その存続期間内の変更によってのみ影響を受けます。
コンストラクターが開始され、オブジェクトの値が不確定になり、
オブジェクトが破壊されると、オブジェクトの存続期間は無効になります。 通常は死んだ店
除去はこれを利用します。 コードがの値に依存している場合
オブジェクトの存続期間を超えて存続するオブジェクトストレージの場合、このフラグを使用して次のことができます。
この最適化を無効にします。
-生存範囲の縮小
レジスタのライブ範囲を縮小して、レジスタの圧力を下げてみてください。 これは
小さいまたは中程度のサイズのレジスタセットを持つ高速プロセッサに役立ちます。
-fira-algorithm =アルゴリズム
統合レジスタアロケータに指定されたカラーリングアルゴリズムを使用します。 The
アルゴリズム 引数は 優先順位、Chowの優先色付けを指定する、または CB,
Chaitin-Briggsのカラーリングを指定します。 Chaitin-Briggsのカラーリングは実装されていません
すべてのアーキテクチャで、ただしそれをサポートするターゲットでは、これがデフォルトです
より良いコードを生成するからです。
-fira-region =地域
統合レジスタアロケータに指定された領域を使用します。 The 地域 引数
次のいずれかになります。
を すべてのループをレジスタ割り当て領域として使用します。 これにより、次の場合に最良の結果が得られます。
小さなおよび/または不規則なレジスタセットを備えたマシン。
混合
領域としてレジスタ圧力が小さいループを除くすべてのループを使用します。 これ
値は通常、ほとんどの場合、ほとんどのアーキテクチャで最良の結果をもたらします。
速度の最適化を使用してコンパイルする場合、デフォルトで有効になっています(-O, -O2、...)。
XNUMXつ すべての機能を単一の領域として使用します。 これにより、通常、コードが最小になります
サイズであり、デフォルトで有効になっています -オス or -O0.
-フィラホイスト圧力
IRAを使用して、巻き上げを決定するためのコード巻き上げパスのレジスタ圧力を評価します
式。 このオプションを使用すると、通常、コードが小さくなりますが、速度が低下する可能性があります。
コンパイラがダウンしています。
このオプションはレベルで有効になっています -オス すべてのターゲットに対して。
-フィラループ圧力
IRAを使用して、ループ不変条件を移動する決定のためにループ内のレジスタ圧力を評価します。
このオプションを使用すると、通常、次のマシンでより高速で小さなコードが生成されます。
大きなレジスタファイル(> = 32レジスタ)ですが、コンパイラの速度が低下する可能性があります。
このオプションはレベルで有効になっています -O3 一部のターゲットの場合。
-fno-ira-share-save-slots
通話で使用されるハードレジスタを保存するために使用されるスタックスロットの共有を無効にします。
呼び出し。 各ハードレジスタは個別のスタックスロットを取得し、その結果、関数スタックを取得します
フレームが大きくなります。
-fno-ira-share-spill-slots
疑似レジスタに割り当てられたスタックスロットの共有を無効にします。 各疑似レジスタ
ハードレジスタを取得しない場合は、別のスタックスロットを取得し、その結果、関数
スタックフレームが大きくなります。
-fira-verbose =n
統合レジスタアロケータのダンプファイルの詳細度を制御します。 ザ
デフォルト値は5です。値が n 10以上の場合、ダンプ出力が送信されます
と同じ形式を使用してstderrに n マイナス10。
-flra-remat
LRAでCFGに敏感な再実体化を有効にします。 こぼれた値をロードする代わりに
疑似、LRAは、収益性がある場合、値を再実体化(再計算)しようとします。
レベルで有効 -O2, -O3, -オス.
-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番目のスケジューリングパス中に準備完了リストに挿入します。 -fno-sched-stalled-insn
時期尚早に移動される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 is
中古。 -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
オンになっています。
-fsel-sched-pipelining-outer-loops
選択的スケジューリング中にループをパイプライン化する場合は、外部ループもパイプライン化します。 これ
オプションは、 -fsel-sched-パイプライン オンになっています。
-fsemantic-介入
ELFなどの一部のオブジェクト形式では、ダイナミックリンカーによるシンボルの挿入が可能です。
これは、DSOからエクスポートされたシンボルの場合、コンパイラーが実行できないことを意味します
手続き間の伝播、インライン化、およびその他の最適化
問題の関数または変数は変更される可能性があります。 この機能は便利ですが、
たとえば、デバッグ実装によってメモリ割り当て関数を書き換えるには、次のようになります。
コード品質の点で高価です。 と -fno-semantic-interposition コンパイラ
関数に介入が発生した場合、上書き関数は次のようになると想定しています。
まったく同じセマンティクス(および副作用)。 同様に、介入が発生した場合
変数の場合、変数のコンストラクターは同じになります。 旗にはありません
インラインで明示的に宣言された関数の効果(許可されない場合)
セマンティクスを変更するための介入)および明示的に弱いと宣言されたシンボルの場合。
-fshrink-wrap
関数プロローグを必要とする関数の部分の前でのみ、関数プロローグを発行します。
関数の上部。 このフラグは、デフォルトで有効になっています。 -O そしてより高い。
-fcaller-saves
関数呼び出しによって破壊されたレジスタへの値の割り当てを有効にします。
そのような呼び出しの周りのレジスタを保存および復元するための追加の命令を発行します。 そのような
割り当ては、より良いコードが得られると思われる場合にのみ行われます。
このオプションは、特定のマシン、通常は
代わりに使用する呼び出し保存レジスタはありません。
レベルで有効 -O2, -O3, -オス.
-fcombine-stack-adjustments
スタック調整(プッシュとポップ)を追跡し、メモリ参照をスタックしてから試行します
それらを組み合わせる方法を見つけるために。
デフォルトで有効になっています -O1 そしてより高い。
-フィパラ
これらのレジスタが呼び出された人によって使用されていない場合は、呼び出し元の保存レジスタを割り当てに使用します
働き。 その場合、呼び出しの前後でそれらを保存および復元する必要はありません。
これは、呼び出された関数が現在の関数と同じコンパイル単位の一部である場合にのみ可能です。
関数とそれらはその前にコンパイルされます。
レベルで有効 -O2, -O3, -オス.
-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 そしてより高い。
-fhoist-隣接ロード
負荷がからのものである場合、if-then-elseの両方のブランチから投機的に負荷を持ち上げます
同じ構造内の隣接する場所とターゲットアーキテクチャに条件付き
移動命令。 このフラグは、デフォルトで有効になっています。 -O2 そしてより高い。
-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-cp-アライメント
有効にすると、この最適化は関数パラメーターの配置を伝播してサポートします
より良いベクトル化と文字列操作。
このフラグは、デフォルトで有効になっています。 -O2 と -オス。 それはそれを必要とします -fipa-cp 有効になっています。
-fipa-icf
関数と読み取り専用変数に対して同一のコード折り畳みを実行します。 ザ
最適化によりコードサイズが削減され、関数を置き換えることでスタックの巻き戻しが妨げられる可能性があります
別の名前の同等のものによって。 最適化はより効果的に機能します
リンク時間の最適化が有効になっています。
それにもかかわらず、動作はゴールドリンカーICF最適化に似ていますが、GCCICFは
異なるレベル、したがって最適化は同じではありません-同等性があります
GCCによってのみ検出され、同等のものはGoldによってのみ検出されます。
このフラグは、デフォルトで有効になっています。 -O2 と -オス.
-fisolate-erroneous-paths-間接参照
nullの逆参照が原因で、誤った動作または未定義の動作をトリガーするパスを検出します
ポインタ。 これらのパスをメインの制御フローから分離し、ステートメントを次のように変換します。
トラップへの誤ったまたは未定義の動作。 このフラグは、デフォルトで有効になっています。 -O2
そしてより高い。
-fisolate-erroneous-paths-属性
null値が使用されているために、誤った動作または未定義の動作をトリガーするパスを検出します
「returns_nonnull」または「nonnull」属性によって禁止されている方法で。 それらのパスを分離します
メインの制御フローから、誤った動作または未定義の動作でステートメントを変更します
罠に。 これは現在有効になっていませんが、によって有効になる可能性があります -O2 将来インチ
-ftree-シンク
木の前方ストアモーションを実行します。 このフラグは、デフォルトで有効になっています。 -O と
高いです。
-ftree-ビット-ccp
ツリーでスパース条件付きビット定数の伝播を実行し、ポインターを伝播します
アラインメント情報。 このパスはローカルスカラー変数でのみ機能し、
デフォルトで有効になっています -O 以上。 それはそれを必要とします -ftree-ccp 有効になっています。
-ftree-ccp
ツリーに対してスパース条件分岐伝播(CCP)を実行します。 このパスのみ
ローカルスカラー変数で動作し、デフォルトで有効になっています。 -O そしてより高い。
-fssa-phiopt
SSA PHIノードでパターンマッチングを実行して、条件付きコードを最適化します。 このパスは
デフォルトで有効になっています -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-isl を有効にする
グラファイトループ変換インフラストラクチャ。
-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-isl 〜へ
Graphiteループ変換インフラストラクチャを有効にします。
-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-isl 〜へ
Graphiteループ変換インフラストラクチャを有効にします。
-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-isl 〜へ
Graphiteループ変換インフラストラクチャを有効にします。
-fgraphite-アイデンティティ
グラファイトの恒等変換を有効にします。 すべてのSCoPに対して、
多面体表現とそれをgimpleに変換し直します。 使用する -fgraphite-アイデンティティ
GIMPLE->GRAPHITE->GIMPLE変換のコストまたはメリットを確認できます。
インデックスのように、いくつかの最小限の最適化もコードジェネレータISLによって実行されます
ループでの分割とデッドコードの除去。
-floop-nest-最適化
ISLベースのループネストオプティマイザを有効にします。 これは一般的なループネストオプティマイザベースです
冥王星最適化アルゴリズムについて。 最適化されたループ構造を計算します
データの局所性と並列性。 このオプションは実験的なものです。
-floop-unroll-and-jam
ISLベースのループネストオプティマイザの展開とジャムを有効にします。 展開係数は次のようになります
を使用して変更 ループアンロールジャムサイズ パラメータ。 展開されたディメンション(カウント
最も内側のものから)を使用して変更できます ループアンロールジャムの深さ パラメータに一致する最初のデバイスのリモートコントロール URL を返します。
.
-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レベルで処理する(関数呼び出し、重要なシーケンスに拡張される操作
insnsの)。 と -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。 これは、そのようなデバッグ情報に害を及ぼす可能性があります
インライン化された変数ですが、インライン化された関数の変数をそれぞれから離して保持します
その他、デバッグで期待値が含まれる可能性が高くなります
セッション。
-ftree-coalesce-vars
copyrenameパスを伝えます(を参照) -ftree-copyrename)小さなユーザーを組み合わせようとする-
コンパイラの一時的なものだけでなく、定義された変数も。 これは厳しく制限するかもしれません
でコンパイルされた最適化されたプログラムをデバッグする機能 -fno-var-tracking-assignments.
否定された形式では、このフラグは、次のようなユーザー変数のSSA合体を防ぎます。
インラインのもの。 このオプションはデフォルトで有効になっています。
-ftree-ter
SSA->通常フェーズ中に一時的な式の置換を実行します。 独身
use / single def temporariesは、使用場所で定義されたものに置き換えられます
表現。 これにより、非GIMPLEコードが生成されますが、エクスパンダーにさらに多くの機能が提供されます
作業する複雑なツリーにより、RTLの生成が向上します。 これはによって可能になります
デフォルトで -O そしてより高い。
-ftree-slsr
樹木に対して直線的な強度低減を実行します。 これは関連するものを認識します
乗算を含む式で、より安価な計算に置き換えます
可能であれば。 これはデフォルトで有効になっています -O そしてより高い。
-ftree-ベクトル化
木のベクトル化を実行します。 このフラグは有効にします -ftree-loop-vectorize と
-ftree-slp-ベクトル化 明示的に指定されていない場合。
-ftree-loop-vectorize
ツリーでループベクトル化を実行します。 このフラグは、デフォルトで有効になっています。 -O3 いつ
-ftree-ベクトル化 有効になっています。
-ftree-slp-ベクトル化
ツリーで基本ブロックのベクトル化を実行します。 このフラグは、デフォルトで有効になっています。 -O3 と
いつ -ftree-ベクトル化 有効になっています。
-fvect-cost-model =
ベクトル化に使用されるコストモデルを変更します。 The 引数は次のいずれかである必要があります
無限の, ダイナミック or 安い。 とともに 無限の ベクトル化されたコードパスをモデル化する
と一緒にいる間、有益であると想定 ダイナミック ランタイムチェックをモデル化して
実行される可能性が高い反復カウントに対してのみ有効にするベクトル化されたコードパス
元のスカラーループを実行する場合よりも高速です。 The 安い モデルが無効になります
ループのベクトル化は、たとえば次の理由により、法外なコストがかかる場合があります。
データの依存関係またはアライメントについてランタイムチェックが必要ですが、それ以外の場合は
ダイナミック モデル。 デフォルトのコストモデルは他の最適化フラグに依存し、
どちら ダイナミック or 安い.
-fsimd-cost-model =
OpenMPまたはCilkでマークされたループのベクトル化に使用されるコストモデルを変更します
プラスsimdディレクティブ。 The 引数は次のいずれかである必要があります 無限の, ダイナミック, 安い.
のすべての値 で説明されているのと同じ意味を持っています -fvect-cost-モデル とにより、
デフォルトでは、で定義されたコストモデル -fvect-cost-モデル 使用されている。
-ftree-vrp
ツリーで値の範囲の伝播を実行します。 これは定数伝播に似ています
パスしますが、値の代わりに、値の範囲が伝播されます。 これにより、
配列境界チェックやnullポインタなどの不要な範囲チェックを削除するオプティマイザ
チェックします。 これはデフォルトで有効になっています -O2 以上。 ヌルポインターチェックの除去
次の場合にのみ実行されます -fdelete-null-pointer-checks 有効になっています。
-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セクションの場合、ユーザー定義のセクション属性を持つ関数の場合、および
名前付きセクションをサポートしないアーキテクチャ。
レベルでx86に対して有効 -O2, -O3.
-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」に対して常に当てはまります。 この仮定は
「i+10」の場合、式はfalseであるため、符号付きオーバーフローが未定義の場合にのみ有効です。
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」は静的関数になり、事実上最適化されます
手続き間オプティマイザーによってより積極的に。
このオプションは、と組み合わせて使用しないでください -flto。 代わりにリンカーに依存する
プラグインは、より安全で正確な情報を提供する必要があります。
-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バイトコードを読み取ります
from ふー。 と バーオー、XNUMXつのファイルをXNUMXつの内部イメージにマージし、コンパイルします
いつものように結果。 両方から ふー。 と バーオー 単一の画像にマージされます、これ
GCCのすべての手続き間分析と最適化が
XNUMXつのファイルをXNUMXつであるかのように。 これは、たとえば、インライナーが
で関数をインライン化できます バーオー の関数に ふー。 およびその逆。
リンク時の最適化を有効にする別の(より簡単な)方法は次のとおりです。
gcc -o myprog -flto -O2 foo.c bar.c
上記はのバイトコードを生成します foo.c と bar.c、それらをXNUMXつにマージします
GIMPLE表現を作成し、通常どおりに最適化して生成します マイプログ.
覚えておくべき唯一の重要なことは、リンク時の最適化を有効にすることです。
リンクステップを実行するには、GCCドライバーを使用する必要があります。 その後、GCCは自動的に実行します
関連するオブジェクトのいずれかがでコンパイルされた場合のリンク時間の最適化 -flto
コマンドラインオプション。 通常、使用する最適化オプションを指定する必要があります
リンク時の最適化については、GCCは最適化を巧妙に推測しようとしますが
リンクで指定しなかった場合にコンパイル時に使用されるオプションから使用するレベル-
時間。 リンク時の最適化を行うための自動決定は、いつでもオーバーライドできます。
通過によるリンク時間 -fno-lto linkコマンドに。
プログラム全体の最適化を効果的にするには、特定の全体を作成する必要があります
プログラムの仮定。 コンパイラは、関数と変数が何であるかを知る必要があります
リンク時間最適化ユニットの外部のライブラリおよびランタイムによってアクセスされます。 いつ
リンカー、リンカープラグインでサポートされています(を参照) -ヒューズ-リンカー-プラグイン)パス
使用済みおよび外部から見えるシンボルに関するコンパイラへの情報。 いつ
リンカープラグインは利用できません、 -fwhole-プログラム コンパイラを許可するために使用する必要があります
これらの仮定を行うことで、より積極的な最適化の決定につながります。
日時 -ヒューズ-リンカー-プラグイン ファイルがでコンパイルされたときに有効にされていない -flto
生成されたオブジェクトファイルは、GIMPLEが含まれているため、通常のオブジェクトファイルよりも大きくなります。
バイトコードと通常の最終コード(を参照) -ffat-lto-objects。 これは、そのオブジェクトを意味します
LTO情報を含むファイルは、通常のオブジェクトファイルとしてリンクできます。 もしも -fno-lto 合格
リンカーには、手続き間最適化は適用されません。 いつ
-fno-fat-lto-objects 有効にすると、コンパイル段階は高速になりますが、実行できません
それらの通常の非LTOリンク。
さらに、個々のファイルのコンパイルに使用される最適化フラグは
必然的にリンク時に使用されるものに関連しています。 例えば、
gcc -c -O0 -ffat-lto-objects -flto foo.c
gcc -c -O0 -ffat-lto-objects -flto bar.c
gcc -o myprog -O3 foo.o bar.o
これにより、最適化されていないアセンブラコードを含む個々のオブジェクトファイルが生成されますが、
結果のバイナリ マイプログ で最適化されています -O3。 代わりに、最終的なバイナリが
で生成 -fno-ltoをタップし、その後、 マイプログ 最適化されていません。
最終的なバイナリを生成するとき、GCCはリンク時間の最適化のみをそれらに適用します
バイトコードを含むファイル。 したがって、オブジェクトファイルと
GIMPLEバイトコードと最終オブジェクトコードを含むライブラリ。 GCCは自動的に選択します
LTOモードで最適化するファイルと、それ以上リンクしないファイル
処理。
バイトコードを生成するときにGCCによって保持されるコード生成フラグがいくつかあります。
これらは、リンクの最終段階で使用する必要があります。 一般的にで指定されたオプション
リンク時は、コンパイル時に指定されたものをオーバーライドします。
最適化レベルオプションを指定しない場合 -O リンク時にGCCは計算します
XNUMXつは、オブジェクトファイルのコンパイル時に使用される最適化レベルに基づいています。 The
ここで最高の最適化レベルが勝ちます。
現在、次のオプションとその設定は最初のオブジェクトファイルから取得されます
明示的に指定したもの: -fPIC, -fpic, -fpie, -fcommon, -例外,
-fnon-call-例外, -fgnu-tm そしてすべて -m ターゲットフラグ。
特定のABI変更フラグは、すべてのコンパイル単位で一致し、試行する必要があります
リンク時に競合する値でこれをオーバーライドすることは無視されます。 これも
などのオプション -freg-構造体-リターン と -fpcc-構造体-リターン.
などの他のオプション -ffp-契約, -fno-strict-オーバーフロー, -fwrapv, -fno-trapv or
-fno-strict-エイリアシング リンクステージに渡され、保守的にマージされます
競合する翻訳単位の場合。 具体的には -fno-strict-オーバーフロー, -fwrapv と
-fno-trapv 優先し、例えば -ffp-contract = off よりも優先されます
-ffp-contract = fast。 linke-timeでそれらをオーバーライドできます。
同じリンクに参加しているすべてのファイルをコンパイルすることをお勧めします
同じオプションを使用し、リンク時にそれらのオプションも指定します。
LTOが、互換性のないタイプで宣言されたCリンケージを持つオブジェクトを個別に検出した場合
一緒にリンクされる翻訳単位(ISOC99による未定義の動作
6.2.7)、致命的ではない診断が発行される場合があります。 実行時の動作はまだ定義されていません
時間。 他の言語でも同様の診断が行われる場合があります。
LTOのもうXNUMXつの機能は、手続き間最適化を適用できることです。
異なる言語で書かれたファイルの場合:
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)コンパイルの言語。
GIMPLEバイトコードを含むオブジェクトファイルがライブラリアーカイブに保存されている場合、
libfoo.a、を使用している場合は、LTOリンクでそれらを抽出して使用することができます
プラグインをサポートするリンカー。 LTOに適した静的ライブラリを作成するには、 gcc-ar
と gcc-ranlib ar と ランリブ; オブジェクトファイルのシンボルを表示するには
GIMPLEバイトコード、使用 gcc-nm。 それらのコマンドはそれを必要とします ar, ランリブ と nm されている
プラグインサポート付きでコンパイル。 リンク時にフラグを使用します -ヒューズ-リンカー-プラグイン 〜へ
ライブラリがLTO最適化プロセスに参加していることを確認します。
gcc -o myprog -O2 -flto -fuse-linker-plugin ao bo -lfoo
リンカプラグインを有効にすると、リンカは必要なGIMPLEファイルを
libfoo.a それらを実行中のGCCに渡して、集約されたものの一部にします
最適化するGIMPLE画像。
プラグインをサポートするリンカーを使用していない場合、および/またはリンカーを有効にしない場合
プラグイン、次に内部のオブジェクト libfoo.a いつものように抽出されてリンクされますが、
LTO最適化プロセスに参加しないでください。 静的ライブラリを作成するには
LTO最適化と通常のリンケージの両方に適しており、オブジェクトファイルを次のようにコンパイルします。
-flto -ffat-lto-objects.
リンク時の最適化は、動作するためにプログラム全体の存在を必要としません。
プログラムでシンボルをエクスポートする必要がない場合は、組み合わせることができます
-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 元のソースファイルをミラーリングするパーティションを指定する、または
同じサイズのチャンクへのパーティション分割を指定する(可能な場合はいつでも)または マックス 作成する
可能な場合は、すべてのシンボルの新しいパーティション。 指定する なし アルゴリズムとして
パーティショニングとストリーミングを完全に無効にします。 デフォルト値は 。 同時に
1to1 さまざまなコード順序の問題の回避策として使用できます。 マックス
パーティショニングは、内部テストのみを目的としています。 値 XNUMXつ を指定します
値が なし パーティショニングをバイパスし、
リンク時間最適化ステップをWPAフェーズから直接実行します。
-flto-odr-type-merge
C++タイプのマングルタイプ名のストリーミングとそれらの統合を有効にする
リンクタイム。 これにより、LTOオブジェクトファイルのサイズが大きくなりますが、Oneに関する診断が可能になります
定義ルール違反。
-flto-compression-level =n
このオプションは、記述された中間言語に使用される圧縮のレベルを指定します
LTOオブジェクトファイルに変換され、LTOモードと組み合わせた場合にのみ意味があります(-flto).
有効な値は、0(圧縮なし)から9(最大圧縮)です。 これ以外の値
範囲は0または9のいずれかにクランプされます。オプションが指定されていない場合、デフォルトのバランスが取れています
圧縮設定が使用されます。
-flto-レポート
リンクタイムオプティマイザの動作に関する内部詳細を含むレポートを印刷します。 The
このレポートの内容はバージョンごとに異なります。 GCCに役立つことを目的としています
LTOモードでオブジェクトファイルを処理する場合の開発者(経由 -flto).
デフォルトでは無効です。
-flto-レポート-wpa
いいね -flto-レポート、ただし、リンク時間最適化のWPAフェーズでのみ印刷します。
-ヒューズ-リンカー-プラグイン
リンク時の最適化中にリンカープラグインを使用できるようにします。 このオプションは依存しています
リンカーでのプラグインサポートについて。ゴールドまたはGNUld2.21または
新しい。
このオプションを使用すると、ライブラリからGIMPLEバイトコードを含むオブジェクトファイルを抽出できます。
アーカイブ。 これにより、より多くのコードがリンクに公開されるため、最適化の品質が向上します-
時間オプティマイザー。 この情報は、外部からアクセスできるシンボルを指定します
(非LTOオブジェクトまたはダイナミックリンク中)。 結果として得られるコード品質の向上
バイナリ(および非表示の可視性を使用する共有ライブラリ)は、
-fwhole-プログラム。 見る -flto このフラグの効果と方法の説明については
それを使用しています。
このオプションは、GCCでのLTOサポートが有効で、GCCが有効になっている場合にデフォルトで有効になります。
プラグイン(GNU ld 2.21以降またはゴールド)をサポートするリンカーで使用するように構成されています。
-ffat-lto-objects
Fat LTOオブジェクトは、中間言語と
オブジェクトコード。 これにより、LTOリンクと通常のリンクの両方で使用できるようになります。 これ
オプションは、次のコマンドでコンパイルする場合にのみ有効です。 -flto リンク時に無視されます。
-fno-fat-lto-objects プレーンLTOよりもコンパイル時間を改善しますが、
LTOを認識するための完全なツールチェーン。 リンカープラグインをサポートするリンカーが必要です
基本的な機能のため。 さらに、 nm, ar と ランリブ リンカーをサポートする必要があります
フル機能のビルド環境を可能にするプラグイン(静的なビルドが可能)
ライブラリなど)。 GCCは gcc-ar, gcc-nm, gcc-ranlib 渡すラッパー
これらのツールへの正しいオプション。 非ファットLTOの場合、makefileを使用するには変更する必要があります
それら。
デフォルトは -fno-fat-lto-objects リンカープラグインをサポートするターゲット。
-f比較-elim
レジスタ割り当てとレジスタ後割り当て命令の分割後、次のように識別します。
比較演算と同様にプロセッサフラグを計算する算術命令
その算術に基づいています。 可能であれば、明示的な比較操作を削除してください。
このパスは、明示的に表すことができない特定のターゲットにのみ適用されます
レジスタ割り当てが完了する前の比較操作。
レベルで有効 -O, -O2, -O3, -オス.
-fcprop-レジスタ
レジスタ割り当てとレジスタ後割り当て命令の分割後、次のように実行します。
スケジュールの依存関係を減らし、場合によってはコピー伝播パスを使用して
コピーを削除します。
レベルで有効 -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-確率,
-fvpt, -funroll-ループ, -fpeel-ループ, -フトレーサー, -ftree-ベクトル化, ftree-ループ-
配布パターン.
デフォルトでは、フィードバックプロファイルが
ソースコード。 このエラーは、を使用して警告に変えることができます -Wcoverage-不一致.
これにより、コードの最適化が不十分になる可能性があることに注意してください。
If path が指定されている場合、GCCは path プロファイルフィードバックデータファイルを検索します。
見る -fprofile-dir.
-fauto-プロファイル
-fauto-profile =path
サンプリングベースのフィードバック指向の最適化、および次の最適化を有効にします
これは一般的に、プロファイルフィードバックが利用可能な場合にのみ有益です。
-fbranch-確率, -fvpt, -funroll-ループ, -fpeel-ループ, -フトレーサー,
-ftree-ベクトル化, -finline-関数, -fipa-cp, -fipa-cp-クローン,
-fpredictive-commoning, -funswitch-ループ, -fgcse-アフターリロード,
-ftree-loop-distribute-patterns.
path AutoFDOプロファイル情報を含むファイルの名前です。 省略した場合、
デフォルトは fbdata.afdo 現在のディレクトリにあります。
AutoFDOプロファイルデータファイルを作成するには、 perf
サポートされているGNU/Linuxターゲットシステム上のユーティリティ。 詳細については、を参照してください。
<https://perf.wiki.kernel.org/>.
例えば
perfレコード-ebr_inst_retired:near_taken -b -o perf.data \
--your_program
次に、 作成_gcov 生のプロファイルデータを次のような形式に変換するツール
GCCによって使用されます。 また、これにプログラムのストリップされていないバイナリを提供する必要があります
道具。 見るhttps://github.com/google/autofdo>.
例えば
create_gcov --binary = your_program.unstripped --profile = perf.data \
--gcov = profile.afdo
次のオプションは、浮動小数点演算に関するコンパイラの動作を制御します。
これらのオプションは、速度と正確さの間でトレードオフになります。 すべてを明確に有効にする必要があります。
-フロートストア
浮動小数点変数をレジスタに格納したり、他のオプションを禁止したりしないでください。
浮動小数点値がレジスタまたはメモリのどちらから取得されるかが変わる可能性があります。
このオプションは、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-使用.
-fprofile-reorder-functions
プロファイルインストルメンテーションに基づく関数の並べ替えは、最初の実行を収集します
関数の昇順でこれらの関数を並べ替えます。
有効化 -fprofile-使用.
-fvpt
と組み合わせる場合 -fprofile-arcs、このオプションは、コンパイラにコードを追加するように指示します
式の値に関する情報を収集します。
連絡先 -fbranch-確率、収集されたデータを読み戻し、実際に実行します
それらに基づく最適化。 現在、最適化には
分母の値に関する知識を使用した除算演算。
-frename-registers
残っているレジスタを利用して、スケジュールされたコードの誤った依存関係を回避しようとします
レジスタ割り当て後に終了します。 この最適化は、多くのプロセッサに最もメリットがあります
レジスタの。 ターゲットが採用しているデバッグ情報の形式に応じて、
ただし、変数が「ホーム」にとどまらないため、デバッグが不可能になる可能性があります。
登録"。
デフォルトで有効になります -funroll-ループ と -fpeel-ループ.
-fschedule-フュージョン
命令ストリームに対してターゲット依存パスを実行して、命令をスケジュールします
同じタイプのものを一緒に使用するのは、ターゲットマシンがそれらをより効率的に実行できるためです。
命令フローでは互いに隣接しています。
レベルで有効 -O2, -O3, -オス.
-フトレーサー
スーパーブロックのサイズを拡大するには、テール複製を実行します。 この変換により、
関数の制御フローにより、他の最適化がより良い仕事をすることができます。
有効化 -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バイトを超えるバッファーを持つ関数が含まれます。
ガードは、関数が入力されたときに初期化され、関数が入力されたときにチェックされます。
関数が終了します。 ガードチェックが失敗した場合、エラーメッセージが出力され、プログラムが出力されます
終了します。
-fstack-protector-all
いいね -fstack-プロテクター すべての機能が保護されていることを除いて。
-fstack-protector-strong
いいね -fstack-プロテクター ただし、保護する追加機能が含まれています---それら
ローカル配列定義があるか、ローカルフレームアドレスへの参照があります。
-fstack-protector-明示的
いいね -fstack-プロテクター ただし、
「stack_protect」属性
-fstdarg-opt
それらの使用法に関して可変個引数関数のプロローグを最適化する
引数
注:Ubuntu 14.10以降のバージョンでは、 -fstack-protector-strong によって有効になります
C、C ++、ObjC、ObjC ++のデフォルト(いずれもなしの場合) -fno-スタックプロテクター, -nostdlib、または
-自立 が見つかりました。
-fsection-アンカー
共有「アンカー」を使用して、シンボリックアドレス計算の数を減らしてみてください
近くのオブジェクトをアドレス指定するための記号。 この変換は、数を減らすのに役立ちます
いくつかのターゲットでのGOTエントリとGOTアクセスの数。
たとえば、次の関数「foo」の実装:
static int a、b、c;
int foo(void){return a + b + c; }
通常、XNUMXつの変数すべてのアドレスを計算しますが、
-fsection-アンカー、代わりに、共通のアンカーポイントから変数にアクセスします。 The
効果は次の擬似コードに似ています(これは有効な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つのブロックの終わりで一致しなければならない命令の最小数
それらにクロスジャンプが実行される前に。 この場合、この値は無視されます
クロスジャンプ元のブロック内のすべての命令が一致します。 The
デフォルト値は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です。
インライン-最小-スピードアップ
発信者+着信者の実行時間の推定パフォーマンス改善がこれを超える場合
しきい値(パーセント)、関数はの制限に関係なくインライン化できます
--パラメータ max-inline-insn-single と --パラメータ max-inline-insns-auto.
大機能-insns
非常に大きな関数を指定する制限。 この制限より大きい関数の場合
インライン化後、インライン化はによって制約されます --パラメータ 大機能の成長。 この
パラメータは、主に非
バックエンドで使用される線形アルゴリズム。 デフォルト値は2700です。
大機能の成長
インライン化によって引き起こされる大きな関数の最大成長をパーセントで指定します。 The
デフォルト値は100で、大規模な関数の拡張を元の2.0倍に制限します
サイズ。
ラージユニットイン
大きな変換単位を指定する制限。 ユニットのインライン化によって引き起こされる成長
この制限よりも大きい場合は、 --パラメータ インラインユニット成長。 小さなユニットの場合
これはきつすぎるかもしれません。 たとえば、関数Aで構成されるユニットについて考えてみます。
これはインラインで、BはAをXNUMX回呼び出すだけです。 BがAに比べて小さい場合、
ユニットの成長は300\%ですが、そのようなインライン化は非常に正常です。 非常に大きい場合
小さなインライン機能で構成されるユニット、ただし、全体的なユニットの成長
コードサイズの急激な増加を避けるために制限が必要です。 したがって、小さい場合
単位、サイズはに増加します --パラメータ ラージユニットイン 申し込む前に --パラメータ
インラインユニット成長。 デフォルトは10000です。
インラインユニット成長
インライン化によって引き起こされるコンパイル単位の最大の全体的な成長を指定します。 The
デフォルト値は20で、ユニットの成長を元のサイズの1.2倍に制限します。 寒い
関数(属性またはプロファイルフィードバックによってコールドとマークされている)は
ユニットサイズに含まれます。
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)実際の再帰
深さは、関数が特定の呼び出しを介して繰り返される確率から推測できます
表現。 このパラメーターは、インライン化を呼び出し式のみに制限します。
確率が指定されたしきい値(パーセント)を超えています。 デフォルト値は10です。
早期インライン化-insns
初期のインライナーが作成できる成長を指定します。 事実上、それは量を増やします
抽象化のペナルティが大きいコードのインライン化。 デフォルト値は14です。
max-early-inliner-イテレーション
初期のインライナーの反復の制限。 これは基本的に
初期のインライナーが解決できるネストされた間接呼び出し。 より深いチェーンはまだです
遅いインライン化によって処理されます。
comdat 共有確率
comdatの可視性を備えたC++インライン関数の確率(パーセント)
複数のコンパイルユニット間で共有されます。 デフォルト値は20です。
プロファイル機能内部 ID
プロファイルデータベースで関数の内部IDを使用するかどうかを制御するパラメーター
見上げる。 値が0の場合、コンパイラーは関数に基づくIDを使用します
アセンブラの名前とファイル名。これにより、古いプロファイルデータのソースに対する耐性が高まります。
関数の並べ替えなどの変更。デフォルト値は0です。
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
ループをピーリングする必要がある可能性のある命令の最大数。 ループの場合
がピーリングされる場合、このパラメーターはループコードがピーリングされる回数も決定します。
最大剥離時間
単一ループの剥離の最大数。
max-peel-branchs
ピーリングされたシーケンスを通るホットパス上のブランチの最大数。
最大完全に皮をむいた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
ループを実行するときに実行できる実行時チェックの最大数
ベクター化ツールでのアライメントのバージョン管理。
vect-max-version-for-alias-checks
ループを実行するときに実行できる実行時チェックの最大数
ベクター化ツールでのエイリアスのバージョン管理。
vect-max-pealing-for-alignment
ベクター化機能のアクセス調整を強化するためのループピールの最大数。 価値
-1は「制限なし」を意味します。
追跡する最大反復回数
分析のためのブルートフォースアルゴリズムのループの最大反復回数
ループの反復回数の評価を試みます。
ホット bb カウント ws パーミル
基本ブロックプロファイルカウントは、それが与えられたものに寄与する場合、ホットであると見なされます
プロファイルされた実行全体のpermillage(つまり0 ... 1000)。
ホット bb 頻度分数
基本ブロックの実行のエントリブロック頻度の一部を選択します
基本ブロックが与えられた場合の機能は、ホットと見なす必要があります。
最大予測反復回数
静的に予測するループ反復の最大数。 これはで便利です
関数に既知の境界を持つ単一のループと別のループが含まれている場合
未知の限界を持つ。 既知の反復回数は正しく予測されますが、
未知の反復回数は平均して約10回です。これはループが
境界のないものは、他のものに比べて人為的に冷たく見えます。
組み込み-期待-確率
式が指定された値を持つ確率を制御します。 これ
パラメータは、入力としてパーセンテージ(つまり、0 ... 100)を取ります。 デフォルトの確率
90のは経験的に得られます。
調整しきい値
の基本ブロックの実行の最大頻度の一部を選択します
基本ブロックを整列させる機能。
整列ループ反復
少なくとも選択された反復回数を繰り返すことが期待されるループが整列されます。
トレーサー-動的カバレッジ
トレーサー-動的カバレッジフィードバック
この値は、指定されたパーセンテージのスーパーブロックの形成を制限するために使用されます。
実行された命令がカバーされます。 これにより、不要なコードサイズの拡張が制限されます。
この トレーサー-動的カバレッジフィードバック パラメータは、プロファイルフィードバックの場合にのみ使用されます
利用可能です。 (静的に推定されたものとは対照的に)実際のプロファイルは
バランスがはるかに悪く、しきい値を大きくすることができます。
トレーサー-最大-コード-成長
コードの増加が所定の割合に達したら、テールの重複を停止します。 これは
重複のほとんどは後でクロスで排除されるため、かなり人工的な制限
ジャンプするため、必要なコードの増加よりもはるかに高い値に設定される場合があります。
トレーサー-最小-分岐比
ベストエッジの逆確率がこれよりも小さい場合は、逆成長を停止します
しきい値(パーセント)。
トレーサー-最小-分岐比
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(
デフォルト)リージョン拡張を無効にします。
最大スケジュール-INSN-競合遅延
投機的な動きの対象となるinsnの最大競合遅延。
デフォルト値は3です。
スケジュールスペックプロブカットオフ
投機的成功の最小確率(パーセント)、したがって投機的
insnsが予定されています。 デフォルト値は40です。
sched-spec-state-edge-prob-cutoff
スケジューラが状態を保存するためにエッジが持つ必要のある最小確率
それを横切って。 デフォルト値は10です。
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です。
最大結合インSNS
RTLコンバイナが結合しようとする命令の最大数。 デフォルト
値は2です -オグ それ以外の場合は4。
整数共有制限
小さな整数定数は共有データ構造を使用できるため、コンパイラの
メモリ使用量とその速度の向上。 これにより、共有の最大値が設定されます
整数定数。 デフォルト値は256です。
ssp-バッファサイズ
スタックスマッシング保護を受けるバッファ(つまりアレイ)の最小サイズ
いつ -fstack-保護 使用されている。
Ubuntu10.10以前のこのデフォルトは「8」でした。 現在は「4」です。
スタックプロテクターによって保護されている関数の数。
スタック共有の最小サイズ
スタックスロット共有に参加していない場合の変数の最小サイズ
最適化。 デフォルト値は32です。
最大ジャンプスレッド重複-stmts
ブロックで許可されるステートメントの最大数。
スレッドジャンプ。
フィールド依存の最大フィールド数
中にフィールドセンシティブな方法で処理される構造内のフィールドの最大数
ポインタ分析。 デフォルトはゼロです -O0 と -O1、および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.
sccvn-max-alias-queries-per-access
冗長性を探すときに実行するalias-oracleクエリの最大数
ロードとストア用。 この制限に達した場合、検索は中止され、ロードまたは
ストアは冗長とは見なされません。 クエリの数はアルゴリズムによるものです
ロードから関数エントリまでのすべてのパスのストアの数に制限されます。
クエリのデフォルトの最大数は1000です。
ira 最大ループ数
IRAは、デフォルトで地域レジスタ割り当てを使用します。 関数にさらに含まれている場合
このパラメータで指定された数よりも多くの場合、指定された数のループのみ
最も頻繁に実行されるループは、地域レジスタ割り当て用の領域を形成します。
パラメータのデフォルト値は100です。
ira-max-競合テーブルサイズ
IRAは高度なアルゴリズムを使用して競合テーブルを圧縮しますが、
テーブルは、巨大な機能のために依然として過剰な量のメモリを必要とする可能性があります。 の場合
関数の競合テーブルは、これによって指定されたMB単位のサイズを超える可能性があります
パラメータの場合、レジスタアロケータは代わりに、より速く、より単純で、より低いものを使用します-
疑似レジスタ競合テーブルを作成する必要のない高品質のアルゴリズム。
パラメータのデフォルト値は2000です。
ira-loop-reserved-regs
IRAを使用して、決定のためのループ内のより正確なレジスター圧力を評価できます。
ループ不変条件を移動するには(を参照) -O3)。 予約されている使用可能なレジスタの数
他のいくつかの目的は、このパラメーターによって与えられます。 のデフォルト値
パラメータは2です。これは、通常必要なレジスタの最小数です。
指示。 この値は、多くの実験から最もよくわかります。
lra-継承-ebb-probability-cutoff
LRAは、後続のinsnのレジスタにリロードされた値を再利用しようとします。 これ
最適化は継承と呼ばれます。 EBBはこれを行うための領域として使用されます
最適化。 このパラメータは、で最小のフォールスルーエッジ確率を定義します。
LRAの継承EBBにBBを追加するために使用されるパーセンテージ。 のデフォルト値
パラメータは40です。値はx2000-86でのSPEC64の多数の実行から選択されました。
ループ不変の最大BBSインループ
ループ不変モーションは、コンパイル時間とコンパイル時間の両方で非常にコストがかかる可能性があります
非常に大きなループを伴う、必要なコンパイル時メモリの量。 より多くのループ
このパラメータよりも基本的なブロックには、ループ不変のモーション最適化はありません
それらに実行されます。 パラメータのデフォルト値は1000です。 -O1 そして、10000
for -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-成長因子 回
元のポインタパラメータのサイズ。
sra-max-scalarization-size-Ospeed
sra-max-scalarization-size-Osize
骨材のXNUMXつのスカラー削減パス(SRAおよびIPA-SRA)は、
独立したスカラー変数を使用する骨材のスカラー部分。 これらは
パラメータは、ストレージユニットでの集約の最大サイズを制御します。
速度のためにコンパイルするときに交換を検討しました(sra-max-scalarization-size-
オスピード)またはサイズ(sra-max-scalarization-size-Osize)それぞれ。
tm-max-集計サイズ
トランザクションでスレッドローカル変数のコピーを作成する場合、このパラメーター
変数がロギングとともに保存されるまでのサイズをバイト単位で指定します
コードシーケンスペアの保存/復元とは対照的に機能します。 このオプションのみ
使用時に適用されます -fgnu-tm.
グラファイト-max-nb-scop-params
グラファイトループ変換での指数効果を回避するために、
静的制御パーツ(SCoP)のパラメーターには制限があります。 デフォルト値は10です
パラメーター。 コンパイル時に値が不明で定義されている変数
SCoPの外側は、SCoPのパラメーターです。
関数ごとのgraphite-max-bbs
SCoPの検出における指数関数的な影響を回避するために、関数のサイズ
グラファイトによって分析されたものには限界があります。 デフォルト値は100基本ブロックです。
ループ ブロック タイル サイズ
ループブロッキングまたはストリップマイニング変換。 -floop-ブロック or
-floop-strip-mine、ループネスト内の各ループを指定された数だけストリップマイニングします
反復。 ストリップの長さは、 ループ ブロック タイル サイズ
パラメータ。 デフォルト値は51回の反復です。
ループアンロールジャムサイズ
の展開係数を指定します -floop-unroll-and-jam オプション。 デフォルト値
4です。
ループアンロールジャムの深さ
(最も内側のループから数えて)展開するディメンションを指定します。
-floop-unroll-and-jam。 デフォルト値は2です。
ipa-cp-値リストのサイズ
IPA-CPは、関数に渡されるすべての可能な値とタイプを追跡しようとします
それらを伝播し、仮想化解除を実行するためのパラメータ。 ipa-cp-値-
リストサイズ XNUMXつのフォーマルごとに格納する値とタイプの最大数です
関数のパラメータ。
ipa-cp-eval-しきい値
IPA-CPは、クローン作成の収益性ヒューリスティックの独自のスコアを計算し、実行します
スコアがを超えるクローン作成の機会 ipa-cp-eval-しきい値.
ipa-cp-再帰-ペナルティ
再帰関数が評価されたときに受けるペナルティの割合
クローン作成用。
ipa-cp-シングルコールペナルティ
別の関数への単一の呼び出しを含むパーセンテージペナルティ関数は
それらがクローン作成のために評価されるときに受け取ります。
ipa-max-agg-items
IPA-CPは、渡された多数のスカラー値を伝播することもできます。
集計。 ipa-max-agg-items XNUMXつあたりのそのような値の最大数を制御します
パラメータに一致する最初のデバイスのリモートコントロール URL を返します。
ipa-cp-ループヒント-ボーナス
IPA-CPが、クローン候補が
既知のループの反復、それはボーナスを追加します ipa-cp-ループヒント-ボーナス から
候補者の収益性スコア。
ipa-cp-array-index-hint-bonus
IPA-CPが、クローン候補がアレイのインデックスを作成すると判断した場合
既知のアクセス、それはのボーナスを追加します ipa-cp-array-index-hint-bonus から
候補者の収益性スコア。
ipa-max-aa-steps
機能本体の分析中に、IPA-CPはエイリアス分析を使用して
関数パラメーターが指す値を追跡します。 あまり時間をかけないために
巨大な関数を分析すると、それはあきらめて、後に破壊されたすべてのメモリを考慮します
調べる ipa-max-aa-steps メモリを変更するステートメント。
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になります。このオプションは、最適化レベルでデフォルトで有効になっています -オーファスト.
ケース値-しきい値
ジャンプテーブルを使用するのに最適な異なる値の最小数
条件付きブランチのツリーの代わりに。 値が0の場合、デフォルトを使用します
この機械。 デフォルトは0です。
ツリー再結合幅
再関連付けされたツリーで並行して実行される命令の最大数を設定します。
このパラメータは、デフォルトで使用されるターゲット依存のヒューリスティックをオーバーライドします。
ゼロ値。
スケジュール圧力アルゴリズム
のXNUMXつの利用可能な実装から選択します -fsched-圧力。 アルゴリズム1
は元の実装であり、
再注文されています。 アルゴリズム2は、
アルゴリズム1によって採用された比較的保守的なアプローチと、かなり積極的なアプローチ
デフォルトのスケジューラーが採用するアプローチ。 それはより大きく依存しています
通常のレジスタファイルと正確なレジスタ圧力クラス。 見る ハイファ-sched.c
詳細については、GCCソースを参照してください。
デフォルトの選択はターゲットによって異なります。
max-slsr-cand-scan
を求めるときに考慮される既存の候補者の最大数を設定します
新しい直線強度低減候補の基礎。
asanグローバル
グローバルオブジェクトのバッファオーバーフロー検出を有効にします。 この種の保護は
使用している場合はデフォルトで有効になっています -fsanitize = address オプション。 グローバルを無効にするには
オブジェクト保護の使用 --パラメータ asan-globals = 0.
asan-スタック
スタックオブジェクトのバッファオーバーフロー検出を有効にします。 この種の保護は
使用時にデフォルトで有効-fsanitize = address。 スタック保護の使用を無効にするには
--パラメータ asan-stack = 0 オプションを選択します。
asan-instrument-reads
メモリ読み取りのバッファオーバーフロー検出を有効にします。 この種の保護は
使用時にデフォルトで有効 -fsanitize = address。 メモリ読み取りを無効にするには
保護の使用 --パラメータ asan-instrument-reads = 0.
asan-楽器-書き込み
メモリ書き込みのバッファオーバーフロー検出を有効にします。 この種の保護は
使用時にデフォルトで有効 -fsanitize = address。 メモリ書き込みを無効にするには
保護の使用 --パラメータ asan-instrument-writes = 0 オプションを選択します。
アサンメミントリン
組み込み関数の検出を有効にします。 この種の保護はによって可能になります
使用時のデフォルト -fsanitize = address。 組み込み関数の保護を無効にするには
つかいます --パラメータ asan-memintrin = 0.
返品後の使用
返品後使用の検出を有効にします。 この種の保護はによって可能になります
使用時のデフォルト -fsanitize = address オプション。 返品後の使用を無効にするには
検出用途 --パラメータ asan-use-after-return = 0.
asan-instrumentation-with-call-threshold
インスツルメントされている関数のメモリアクセス数が以上の場合
この数は、インラインチェックの代わりにコールバックを使用します。 インラインコードを無効にする例
つかいます --パラメータ asan-instrumentation-with-call-threshold = 0.
chkp-max-ctor-size
Pointer Bounds Checkerによって生成された静的コンストラクターは、非常に大きくなり、
最適化レベルでコンパイル時間を大幅に増加 -O1 以上。 これ
パラメーターは、生成された単一のコンストラクター内のステートメントの最大数です。
デフォルト値は5000です。
max-fsm-thread-path-insns
有限状態でブロックを複製するときにコピーする命令の最大数
オートマトンジャンプスレッドパス。 デフォルトは100です。
最大 fsm スレッド長
有限状態オートマトンジャンプスレッドパス上の基本ブロックの最大数。 The
デフォルトは10です。
最大fsmスレッドパス
有限状態オートマトン用に作成する新しいジャンプスレッドパスの最大数。
デフォルトは50です。
オプション 制御 プリプロセッサ
これらのオプションは、実際の前に各Cソースファイルで実行されるCプリプロセッサを制御します
コンパイル。
あなたが使用している場合 -E オプションの場合、前処理以外は何も行われません。 これらのオプションのいくつか
と一緒にのみ意味をなす -E プリプロセッサの出力が
実際のコンパイルには適していません。
-Wp、オプション
あなたが使用することができます -Wp、オプション コンパイラドライバをバイパスして渡す オプション 直接スルー
プリプロセッサに。 もしも オプション カンマが含まれ、で複数のオプションに分割されます
カンマ。 ただし、多くのオプションは、によって変更、翻訳、または解釈されます。
プリプロセッサに渡される前のコンパイラドライバ、および -Wp 強制的にバイパスする
このフェーズ。 プリプロセッサの直接インターフェイスは文書化されておらず、
変更するので、可能な限り使用を避ける必要があります -Wp ドライバーに処理させます
代わりにオプション。
-Xプリプロセッサ オプション
合格 オプション プリプロセッサのオプションとして。 これを使用してシステムを供給することができます-
GCCが認識しない特定のプリプロセッサオプション。
引数を取るオプションを渡したい場合は、次を使用する必要があります -Xプリプロセッサ
XNUMX回、オプション用にXNUMX回、引数用にXNUMX回。
-統合されていない-cpp
コンパイル前に、別のパスとして前処理を実行します。 デフォルトでは、GCCは
入力トークン化と解析の統合された部分としての前処理。 このオプションの場合
提供されている場合、適切な言語のフロントエンド(cc1, cc1プラスまたは cc1obj C、C ++の場合、
およびObjective-C)は、代わりにXNUMX回呼び出されます。XNUMX回は前処理のみです。
前処理された入力の実際のコンパイル用にXNUMX回。 このオプションは便利かもしれません
と一緒に -B or -ラッパー 代替プリプロセッサを指定するオプションまたは
通常の前処理との間にプログラムソースの追加処理を実行します
コンパイル。
-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 -イマクロス コマンド-
ラインオプション。
明示的に指定されていない限り( -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
同意 $ 識別子で。
-拡張識別子
識別子にユニバーサル文字名を受け入れます。 このオプションはデフォルトで有効になっています
C99(およびそれ以降のC標準バージョン)およびC ++の場合。
-fno-canonical-system-headers
前処理するときは、正規化してシステムヘッダーパスを短くしないでください。
-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.
「-ftrack-macro-expansion = 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 これらのオプションのいずれかが使用されている場合、リンカーは実行されず、オブジェクトファイル名
引数として使用しないでください。
-fuse-ld = bfd
BFD デフォルトのリンカーの代わりにリンカー。
-fuse-ld = gold
ゴールド デフォルトのリンカーの代わりにリンカー。
-lライブラリ
-l ライブラリ
という名前のライブラリを検索します ライブラリ リンクするとき。 (XNUMX番目の選択肢
個別の引数としてのライブラリは、POSIX準拠のみを目的としており、お勧めしません。)
コマンドのどこにこのオプションを書くかによって違いが生じます。 リンカー検索
ライブラリとオブジェクトファイルを指定された順序で処理します。 したがって、 ふー。
-lz バーオー ライブラリを検索 z ファイル後 ふー。 しかし、前に バーオー。 場合 バーオー を指します
の機能 z、これらの関数はロードされない場合があります。
リンカは、ディレクトリの標準リストでライブラリを検索します。これは実際には
名前の付いたファイル ライブラリ.a。 リンカは、このファイルを指定されているかのように使用します
正確には名前で。
検索されるディレクトリには、いくつかの標準システムディレクトリに加えて、
で指定する -L.
通常、この方法で見つかったファイルはライブラリファイルです---メンバーが
オブジェクトファイル。 リンカは、アーカイブファイルをスキャンしてメンバーを探すことにより、アーカイブファイルを処理します
これまでに参照されているが定義されていないシンボルを定義します。 しかし、
見つかったファイルは通常のオブジェクトファイルであり、通常の方法でリンクされています。 The
使用の違いのみ -l オプションとファイル名の指定はそれです -l
サラウンド ライブラリ リブ と .a いくつかのディレクトリを検索します。
-lobjc
あなたはこの特別な場合が必要です -l Objective-Cまたはをリンクするためのオプション
目的-C++プログラム。
-nostartfiles
リンクするときは、標準のシステムスタートアップファイルを使用しないでください。 標準システム
ライブラリは通常使用されますが、 -nostdlib or -nodefaultlibs 使用されている。
-nodefaultlibs
リンクするときは、標準のシステムライブラリを使用しないでください。 指定したライブラリのみ
リンカに渡され、システムライブラリのリンクを指定するオプションなど
as -静的-libgcc or -共有-libgcc、は無視されます。 標準のスタートアップファイルが使用されます
通常、 -nostartfiles 使用されている。
コンパイラは、「memcmp」、「memset」、「memcpy」、および「memmove」への呼び出しを生成する場合があります。 これらは
エントリは通常、libcのエントリによって解決されます。 これらのエントリポイントは
このオプションが指定されている場合、他のメカニズムを介して提供されます。
-nostdlib
リンクするときは、標準のシステムスタートアップファイルまたはライブラリを使用しないでください。 スタートアップなし
ファイルと指定したライブラリのみがリンカとオプションに渡されます
などのシステムライブラリのリンクを指定する -静的-libgcc or -共有-libgcc,
無視されます。
コンパイラは、「memcmp」、「memset」、「memcpy」、および「memmove」への呼び出しを生成する場合があります。 これらは
エントリは通常、libcのエントリによって解決されます。 これらのエントリポイントは
このオプションが指定されている場合、他のメカニズムを介して提供されます。
によってバイパスされた標準ライブラリのXNUMXつ -nostdlib と -nodefaultlibs is libgcc.a
特定の欠点を克服するためにGCCが使用する内部サブルーチンのライブラリ
マシン、またはいくつかの言語の特別なニーズ。
ほとんどの場合、 libgcc.a 他の標準ライブラリを避けたい場合でも。
言い換えれば、あなたが指定するとき -nostdlib or -nodefaultlibs あなたは通常すべきです
指定する -lgcc 同じように。 これにより、への未解決の参照がないことが保証されます
内部GCCライブラリサブルーチン。 (このような内部サブルーチンの例は次のとおりです。
「__main」、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.
-静的-libasan
時 -fsanitize = address オプションは、プログラム、GCCドライバーをリンクするために使用されます
自動的にリンクします リバサン。 場合 リバサン 共有ライブラリとして利用可能であり、
-静的 オプションが使用されていない場合、これは共有バージョンに対してリンクします リバサン.
この -静的-libasan オプションは、GCCドライバーにリンクを指示します リバサン 静的に、なし
必然的に他のライブラリを静的にリンクします。
-static-libtsan
時 -fsanitize = thread オプションは、プログラム、GCCドライバーをリンクするために使用されます
自動的にリンクします リブツァン。 場合 リブツァン 共有ライブラリとして利用可能であり、
-静的 オプションが使用されていない場合、これは共有バージョンに対してリンクします リブツァン.
この -static-libtsan オプションは、GCCドライバーにリンクを指示します リブツァン 静的に、なし
必然的に他のライブラリを静的にリンクします。
-静的-liblsan
時 -fsanitize = Leak オプションは、プログラム、GCCドライバーをリンクするために使用されます
自動的にリンクします リブサン。 場合 リブサン 共有ライブラリとして利用可能であり、
-静的 オプションが使用されていない場合、これは共有バージョンに対してリンクします リブサン.
この -静的-liblsan オプションは、GCCドライバーにリンクを指示します リブサン 静的に、なし
必然的に他のライブラリを静的にリンクします。
-静的-libubsan
時 -fsanitize = undefined オプションは、プログラム、GCCドライバーをリンクするために使用されます
自動的にリンクします リブサン。 場合 リブサン 共有ライブラリとして利用可能です、
と -静的 オプションが使用されていない場合、これは共有バージョンに対してリンクします
リブサンを選択します。 -静的-libubsan オプションは、GCCドライバーにリンクを指示します リブサン
静的に、必ずしも他のライブラリを静的にリンクする必要はありません。
-静的-libmpx
時 -fチェックポインター 境界 と -mmpx オプションは、プログラム、GCCをリンクするために使用されます
ドライバーは自動的にリンクします libmpx。 場合 libmpx 共有として利用可能です
ライブラリ、および -静的 オプションが使用されていない場合、このリンクは共有に対してリンクされます
のバージョン libmpxを選択します。 -静的-libmpx オプションは、GCCドライバーにリンクを指示します libmpx
静的に、必ずしも他のライブラリを静的にリンクする必要はありません。
-static-libmpxwrappers
時 -fチェックポインター 境界 と -mmpx オプションは、なしでプログラムをリンクするために使用されます
また使用 -fno-chkp-use-wrappers、GCCドライバーは自動的にリンクします
libmpxwrappers。 場合 libmpxwrappers 共有ライブラリとして利用可能であり、 -静的
オプションが使用されていない場合、これは共有バージョンに対してリンクします libmpxwrappersを選択します。
-static-libmpxwrappers オプションは、GCCドライバーにリンクを指示します libmpxwrappers
静的に、必ずしも他のライブラリを静的にリンクする必要はありません。
-static-libstdc ++
時 g ++ プログラムはC++プログラムをリンクするために使用され、通常は自動的にリンクします
に対して libstdc ++。 場合 libstdc ++ 共有ライブラリとして利用可能であり、 -静的
オプションが使用されていない場合、これは共有バージョンに対してリンクします libstdc ++。 あれは
通常は問題ありません。 ただし、のバージョンをフリーズすると便利な場合があります libstdc ++
完全に静的なリンクに到達することなく、プログラムによって使用されます。 The
-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 の読み込みを強制するために異なるシンボルで複数回
追加のライブラリモジュール。
-z キーワード
-z キーワードとともにリンカーに直接渡されます キーワード。 セクションを参照してください
許可された値とその意味については、リンカのドキュメントを参照してください。
オプション for ディレクトリ 検索
これらのオプションは、ヘッダーファイル、ライブラリ、およびパーツを検索するためのディレクトリを指定します
コンパイラの:
-IDIR
ディレクトリを追加します DIR ヘッダーを検索するディレクトリのリストの先頭に
ファイル。 これを使用して、システムヘッダーファイルを上書きし、独自のファイルに置き換えることができます
これらのディレクトリはシステムヘッダーファイルの前に検索されるため、バージョン
ディレクトリ。 ただし、このオプションを使用して、次を含むディレクトリを追加しないでください。
ベンダー提供のシステムヘッダーファイル(使用 -isystem そのために)。 複数使用する場合
-I オプションの場合、ディレクトリは左から右の順序でスキャンされます。 標準システム
ディレクトリは後に続きます。
標準システムにディレクトリが含まれている場合、またはで指定されたディレクトリ -isystemであり、
で指定されます -I -I オプションは無視されます。 ディレクトリは引き続き検索されますが
システムインクルードチェーンの通常の位置にあるシステムディレクトリとして。 これは
バグのあるシステムヘッダーを修正するためのGCCの手順と
「include_next」ディレクティブが誤って変更されることはありません。 本当に変更する必要がある場合
システムディレクトリの検索順序は、 -ノストディンク および -isystem オプション。
-iplugindir =DIR
渡されるプラグインを検索するディレクトリを設定します -fplugin =名
-fplugin =path/名。そう。 このオプションは、ユーザーが使用するためのものではなく、
ドライバーによって渡されます。
-iquoteDIR
ディレクトリを追加します DIR ヘッダーを検索するディレクトリのリストの先頭に
「#include」の場合のみのファイルファイル""; 「#include」は検索されません
<ファイル> "、それ以外は -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 まだ機能しますが、ライブラリの側面は機能しません。
--no-sysroot-サフィックス
一部のターゲットでは、で指定されたルートディレクトリにサフィックスが追加されます --sysroot,
使用される他のオプションに応じて、たとえばヘッダーが
dir /サフィックス/usr/ include dir / usr / include。 このオプションは追加を無効にします
そのような接尾辞の。
-I- このオプションは非推奨になりました。 使ってください -iquote 代わりに -I 以前のディレクトリ
-I- を削除します -I- オプション。 指定するディレクトリ -I 前のオプション
-I- オプションは「#include」の場合のみ検索されますファイル""; ではない
「#include」を検索ファイル> ".
追加のディレクトリがで指定されている場合 -I 後のオプション -I- オプション、これら
ディレクトリですべての「#include」ディレクティブが検索されます。 (通常 を -I
ディレクトリはこのように使用されます。)
加えて、 -I- オプションは、現在のディレクトリの使用を禁止します(
現在の入力ファイルは、「#include」の最初の検索ディレクトリとして)から取得されましたファイル"".
この効果を無効にする方法はありません -I- -私。 検索を指定できます
コンパイラーが呼び出されたときに現在のディレクトリー。 それは正確には
プリプロセッサがデフォルトで行うことと同じですが、多くの場合、十分です。
-I- ヘッダーファイルの標準システムディレクトリの使用を禁止しません。
このように、 -I- と -ノストディンク 独立しています。
指定 ターゲット エスプレッソマシン と コンパイラ
GCCを実行する通常の方法は、と呼ばれる実行可能ファイルを実行することです。 gccのまたは 機械-gcc クロスするとき
コンパイル、または 機械-gcc-バージョン インストールされたバージョン以外のバージョンを実行するには
最終。
Hardware Models と 構成
各ターゲットマシンタイプには、以下から始まる独自の特別なオプションを設定できます。 -m、選択する
さまざまなハードウェアモデルまたは構成間---たとえば、68010と68020、フローティング
コプロセッサーまたはなし。 インストールされた単一バージョンのコンパイラーは、任意のモデル用にコンパイルできます
または構成、指定されたオプションに応じて。
コンパイラの一部の構成は、通常は次のような追加の特別なオプションもサポートします。
同じプラットフォーム上の他のコンパイラとの互換性。
AAArch64 オプション
これらのオプションは、AArch64実装用に定義されています。
-mabi =名
指定されたデータモデルのコードを生成します。 許容値は イルプ32 SysVの場合-
int、long int、pointerが32ビットであるデータモデルのように、 lp64 SysVのような
intが32ビットであるが、longintとpointerが64ビットであるデータモデル。
デフォルトは、特定のターゲット構成によって異なります。 LP64と
ILP32ABIはリンク互換ではありません。 プログラム全体を同じものでコンパイルする必要があります
ABI、および互換性のあるライブラリのセットとリンクします。
-mbig-エンディアン
ビッグエンディアンコードを生成します。 これは、GCCが
aarch64_be-*-* ターゲット。
-mgeneral-regs-のみ
汎用レジスタのみを使用するコードを生成します。 これにより、
コンパイラーは浮動小数点および高度なSIMDレジスターを使用しませんが、
アセンブラの制限。
-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を使用する
変数。
-mtls-size =サイズ
即時TLSオフセットのビットサイズを指定します。 有効な値は12、24、32、48です。これは
オプションは2.25より高いbinutilsに依存します。
-mfix-cortex-a53-835769
-mno-fix-cortex-a53-835769
ARMCortex-A53エラッタ番号835769の回避策を有効または無効にします。これは
メモリ命令と64ビット整数の間にNOP命令を挿入する必要があります
積和命令。
-mfix-cortex-a53-843419
-mno-fix-cortex-a53-843419
ARMCortex-A53エラッタ番号843419の回避策を有効または無効にします。これは
エラッタの回避策はリンク時に行われ、これは対応するフラグのみを渡します
リンカーに。
-XNUMX月=名
ターゲットアーキテクチャの名前と、オプションでXNUMXつ以上の機能を指定します
修飾子。 このオプションの形式は -XNUMX月=アーチ{+[いいえ]簡潔な}*。
の許容値 アーチ armv8-a, armv8.1-a or ネイティブ.
値 armv8.1-a 含意する armv8-a ARMv8.1のコンパイラサポートを有効にします
アーキテクチャ拡張。 特に、それはを可能にします + crc と + lse 機能。
値 ネイティブ ネイティブAArch64GNU/ Linuxで利用可能であり、コンパイラーに
ホストシステムのアーキテクチャを選択します。 コンパイラがこのオプションを使用しても効果はありません
ホストシステムのアーキテクチャを認識できません。
の許容値 簡潔な のサブセクションにリストされています
aarch64-機能修飾子、、-XNUMX月 と -mcpu 機能 修飾子。 矛盾する場所
機能修飾子が指定され、右端の機能が使用されます。
GCCは 名 生成時に発行できる命令の種類を決定する
アセンブリコード。 もしも -行進 どちらも指定せずに指定されている -ムチューン or -mcpu また
指定されたコードは、ターゲットプロセッサの範囲全体で適切に実行されるように調整されています
ターゲットアーキテクチャの実装。
-mtune =名
GCCがパフォーマンスを調整するターゲットプロセッサの名前を指定します
コード。 このオプションの許容値は次のとおりです。 ジェネリック, 皮質-a53, 皮質-a57,
皮質-a72, exynos-m1, qdf24xx, サンダークス, xgene1.
さらに、このオプションは、GCCがコードのパフォーマンスを調整する必要があることを指定できます
big.LITTLEシステムの場合。 このオプションの許容値は次のとおりです。
皮質-a57.皮質-a53, 皮質-a72.皮質-a53.
さらに、ネイティブAArch64 GNU/Linuxシステムでは値 ネイティブ 利用可能です。 これ
オプションを指定すると、コンパイラはのアーキテクチャを選択し、パフォーマンスを調整します。
ホストシステムのプロセッサのコード。 コンパイラがこのオプションを使用しても効果はありません
ホストシステムのアーキテクチャを認識できません。
どこにも -mtune =, -mcpu = or -XNUMX月= が指定されている場合、コードは実行するように調整されます
ターゲットプロセッサの範囲全体で十分です。
このオプションの末尾に機能修飾子を付けることはできません。
-mcpu =名
ターゲットプロセッサの名前を指定します。オプションで、XNUMXつ以上の機能の接尾辞を付けます。
修飾子。 このオプションの形式は -mcpu =CPU{+[いいえ]簡潔な} *、許容される場合
の値 CPU 利用可能なものと同じです -ムチューン。 の許容値
簡潔な のサブセクションに記載されています aarch64-機能修飾子、、-XNUMX月 と
-mcpu 機能 修飾子。 競合する機能修飾子が指定されている場合、
右端の機能が使用されます。
さらに、ネイティブAArch64 GNU/Linuxシステムでは値 ネイティブ 利用可能です。 これ
オプションを指定すると、コンパイラは次のプロセッサのコードのパフォーマンスを調整します。
ホストシステム。 コンパイラが認識できない場合、このオプションは効果がありません。
ホストシステムのアーキテクチャ。
GCCは 名 生成時に発行できる命令の種類を決定する
アセンブリコード( -行進)および対象となるターゲットプロセッサを決定する
パフォーマンスを調整する( -ムチューン)。 このオプションを併用する場合
-行進 or -ムチューン、これらのオプションは、この適切な部分よりも優先されます
オプションを選択します。
-moverride =string
に応じてバックエンドによって行われたチューニング決定をオーバーライドします -mtune = スイッチ。 ザ・
の構文、セマンティクス、および受け入れられる値 string このオプションでは、
リリース間で一貫している。
このオプションは、GCCを開発するときにのみ役立つことを目的としています。
-mpc-relative-literal-loads
PCの相対的なリテラルロードを有効にします。 このオプションを使用する場合、リテラルプールは次のように想定されます。
最大1MiBの範囲を持ち、適切な命令シーケンスが使用されます。 これ
オプションを使用しても影響はありません -mcmodel = tiny.
-行進 と -mcpu 機能修飾子
で使用される機能修飾子 -行進 と -mcpu 次のいずれかであり、
逆 いいえ簡潔な:
CRM CRC拡張を有効にします。 これはデフォルトでオンになっています -march = armv8.1-a.
クリプト
Crypto拡張機能を有効にします。 これにより、高度なSIMDと浮動小数点も有効になります
指示に従ってください。
fp 浮動小数点命令を有効にします。 これは、のすべての可能な値に対してデフォルトでオンになっています
オプション -行進 と -mcpu.
シムド
高度なSIMD命令を有効にします。 これにより、浮動小数点命令も有効になります。
これは、オプションのすべての可能な値に対してデフォルトでオンになっています -行進 と -mcpu.
lse 大規模システム拡張命令を有効にします。 これはデフォルトでオンになっています
-march = armv8.1-a.
すなわち、 クリプト 含意する シムド 含意する fp。 逆に、 ノフプ (または同等に、
-mgeneral-regs-のみ) 示す ノシムド 含意する 暗号なし.
アダプテバ エピファニー オプション
ボーマン -m オプションはAdaptevaEpiphany用に定義されています:
-mhalf-reg ファイル
「r32」...「r63」の範囲のレジスタは割り当てないでください。 これにより、コードを実行できます
これらのレジスタがないハードウェアバリアント。
-mprefer-short-insn-regs
短い命令の生成を可能にするレジスタを優先的に割り当てます。 これはできます
命令数が増えるため、全体的に減少または増加する可能性があります
コードサイズ。
-mbranch-cost =NUM
ブランチのコストをおおよそに設定します NUM 「簡単な」指示。 この費用は
ヒューリスティックであり、リリース間で一貫した結果が得られるとは限りません。
-mcmove
条件付き移動の生成を有効にします。
-mnops =NUM
発します NUM 他のすべての生成された命令の前にNOP。
-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」命令の場合は、これらの命令を直接呼び出しに使用します。 The
デフォルトは -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,
そのレジスタを固定レジスタとして使用することを指定し、 なし、つまり
レジスターはこの目的で使用されます。 デフォルトは -m1reg-なし.
ARC オプション
次のオプションは、コードがコンパイルされるアーキテクチャバリアントを制御します。
-バレルシフター
バレルシフタでサポートされている命令を生成します。 これがデフォルトです。
-mcpu = ARC601 有効です。
-mcpu =CPU
アーキテクチャタイプ、レジスタの使用法、および命令スケジューリングパラメータを設定します。 CPU.
下位互換性のために利用可能なショートカットエイリアスオプションもあります
快適。 サポートされている値 CPU
ARC600
ARC600用にコンパイルします。 エイリアス: -mA6, -mARC600.
ARC601
ARC601用にコンパイルします。 エイリアス: -mARC601.
ARC700
ARC700用にコンパイルします。 エイリアス: -mA7, -mARC700。 これは、構成時のデフォルトです
--with-cpu = arc700.
-mdpfp
-mdpfp-コンパクト
FPX:コンパクトな実装に合わせて調整された倍精度FPX命令を生成します。
-mdpfp-高速
FPX:高速実装用に調整された倍精度FPX命令を生成します。
-mno-dpfp-lrsr
LRおよびSR命令がFPX拡張補助レジスタを使用しないようにします。
-メア
拡張算術命令を生成します。 現在、「divaw」、「adds」、「subs」、
および「sat16」がサポートされています。 これは常に有効になっています -mcpu = ARC700.
-mno-mpy
ARC700のmpy命令を生成しないでください。
-mmul32x16
32x16ビットの乗算およびMAC命令を生成します。
-mmul64
mul64およびmulu64命令を生成します。 のみ有効 -mcpu = ARC600.
-mnorm
ノルム命令を生成します。 これがデフォルトです -mcpu = ARC700 有効です。
-mspfp
-mspfp-コンパクト
FPX:コンパクトな実装に合わせて調整された単精度FPX命令を生成します。
-mspfp-高速
FPX:高速実装用に調整された単精度FPX命令を生成します。
-msimd
ターゲット固有のビルトインを介してARCSIMD命令の生成を有効にします。 のみ有効
for -mcpu = ARC700.
-msoft-float
このオプションは無視されます。 互換性の目的でのみ提供されています。 ソフトウェア
浮動小数点コードはデフォルトで発行され、このデフォルトはFPXによってオーバーライドできます
オプション; mspfp, mspfp-コンパクトまたは mspfp-高速 単精度の場合、および MDPFP, MDPFP-
コンパクトまたは mdpfp-高速 倍精度の場合。
-mswap
スワップ命令を生成します。
次のオプションはアセンブラに渡され、プリプロセッサも定義します
マクロシンボル。
-mdsp-packa
DSPPackA拡張機能を有効にするためにアセンブラに渡されます。 また、
プリプロセッサシンボル「__Xdsp_packa」。
-mdvbf
デュアルビテルビバタフライ拡張を有効にするためにアセンブラに渡されます。 また
プリプロセッサシンボル「__Xdvbf」を設定します。
-ムロック
Locked Load /StoreConditional拡張機能を有効にするためにアセンブラに渡されます。
プリプロセッサシンボル「__Xlock」も設定します。
-mmac-d16
アセンブラに受け継がれています。 また、プリプロセッサシンボル「__Xxmac_d16」を設定します。
-mmac-24
アセンブラに受け継がれています。 また、プリプロセッサシンボル「__Xxmac_24」を設定します。
-mrtsc
64ビットのタイムスタンプカウンタ拡張を有効にするためにアセンブラに渡されます
命令。 プリプロセッサシンボル「__Xrtsc」も設定します。
-mswape
スワップバイト順序拡張命令を有効にするためにアセンブラに渡されます。
プリプロセッサシンボル「__Xswape」も設定します。
-mテレフォニー
アセンブラに渡されて、次のXNUMXつのオペランドとXNUMXつのオペランドの命令を有効にします。
テレフォニー。 また、プリプロセッサシンボル「__Xtelephony」を設定します。
-mxy
XYメモリ拡張を有効にするためにアセンブラに渡されます。 また、
プリプロセッサシンボル「__Xxy」。
次のオプションは、アセンブリコードに注釈を付ける方法を制御します。
-ミスサイズ
アセンブラ命令に推定アドレスで注釈を付けます。
-mannotate-align
アラインメントの考慮事項が指示を行う決定につながることを説明する
短いまたは長い。
次のオプションがリンカーに渡されます。
-マルクリナックス
「arclinux」エミュレーションの使用を指定するために、リンカに渡されます。 このオプション
「arc-linux-uclibc」用に構築されたツールチェーンではデフォルトで有効になっています。
「arceb-linux-uclibc」は、プロファイリングが要求されていない場合にターゲットになります。
-marclinux_prof
「arclinux_prof」エミュレーションの使用を指定するために、リンカに渡されます。 これ
「arc-linux-uclibc」用に構築されたツールチェーンでは、オプションがデフォルトで有効になっています。
「arceb-linux-uclibc」は、プロファイリングが要求されたときにターゲットになります。
次のオプションは、生成されたコードのセマンティクスを制御します。
-メピローグ-cfi
エピローグのコールフレーム情報の生成を有効にします。
-mno-エピローグ-cfi
エピローグのコールフレーム情報の生成を無効にします。
-mlong-calls
間接呼び出しの登録として呼び出しinsnsを生成し、完全なアクセスを提供します
32ビットのアドレス範囲。
-ミディアムコール
使用可能なオフセットである25ビット未満のアドレス指定範囲を呼び出しに使用しないでください
無条件の分岐およびリンク命令の場合。 関数の条件付き実行
25ビット範囲ではなく、21ビット範囲を使用できるようにするために、呼び出しは抑制されます。
条件付きの分岐とリンクを使用します。 これは、のために構築されたツールチェーンのデフォルトです
「arc-linux-uclibc」および「arceb-linux-uclibc」ターゲット。
-mno-sdata
sdata参照を生成しないでください。 これは、のために構築されたツールチェーンのデフォルトです
「arc-linux-uclibc」および「arceb-linux-uclibc」ターゲット。
-mucb-mcount
UCBコードで使用されるmcount呼び出しを備えたインストルメント。 つまり、呼び出し先でカウントを行います。
発信者ではありません。 デフォルトでは、ARCインストルメンテーションは呼び出し元でカウントされます。
-mvolatile-キャッシュ
揮発性の参照には、通常はキャッシュされたメモリアクセスを使用します。 これがデフォルトです。
-mno-volatile-キャッシュ
揮発性参照のキャッシュバイパスを有効にします。
次のオプションは、コード生成を微調整します。
-悪性コール
呼び出し命令の配置を最適化します。
-mauto-変更-reg
レジスタ変位を伴う事前/事後変更の使用を有効にします。
-mbbit-のぞき穴
bbitpeephole2を有効にします。
-mno-brcc
このオプションは、ターゲット固有のパスインを無効にします アークリオルグ 「BRcc」を生成する
指示。 コンバイナパスによって駆動される「BRcc」生成には影響しません。
-mcase-vector-pcrel
PC相対スイッチケーステーブルを使用します-これにより、ケーステーブルを短縮できます。 これは
デフォルトの -オス.
-mcompact-casesi
コンパクトなcasesiパターンを有効にします。 これはのデフォルトです -オス.
-mno-cond-exec
ARCompact固有のパスを無効にして、条件付き実行命令を生成します。 期限
スロットのスケジューリングとオペランド番号、リテラルサイズ間の相互作用を遅らせるため、
命令の長さ、および条件付き実行のサポート、ターゲットに依存しない
条件付き実行を生成するためのパスが不足していることが多いため、ARCポートは
より多くの条件付き実行を生成しようとする特別なパス
レジスタ割り当て、ブランチ短縮、および遅延スロットスケジューリング後の機会
行われてきました。 このパスは、常にではありませんが、一般的にパフォーマンスとコードを改善します
サイズ、余分なコンパイル時間が犠牲になります。これが、切り替えるオプションがある理由です。
それをオフにします。 許容オフセットを超える呼び出し命令に問題がある場合
範囲は条件付きであるため、使用を検討する必要があります -ミディアムコール
を代わりにお使いください。
-ほぼ-cbranchsi
cbranchsiパターンのリロード前の使用を有効にします。
-mexpand-adddi
rtl生成時に「adddi3」と「subdi3」を「add.f」、「adc」などに展開します。
-mindexed-loads
インデックス付きロードの使用を有効にします。 一部のオプティマイザはその後問題になる可能性があります
インデックス付きストアが存在すると仮定しますが、そうではありません。
-mlra
ローカルレジスタ割り当てを有効にします。 これはまだARCで実験的であるため、デフォルトでは
コンパイラは標準のリロードを使用します(つまり -mno-lra).
-mlra-優先度-なし
ターゲットレジスタの優先順位を示さないでください。
-mlra-priority-コンパクト
r0..r3/r12..r15のターゲットレジスタの優先度を示します。
-mlra-優先順位-非コンパクト
r0..r3/r12..r15のターゲット登録者の優先度を下げます。
-mno-ミリコード
サイズを最適化する場合( -オス)、保存する必要があるプロローグとエピローグまたは
多数のレジスタの復元は、多くの場合、特別な呼び出しを使用することによって短縮されます
libgccの関数; これは、 ミリコード 電話。 これらの呼び出しはポーズをとることができるので
パフォーマンスの問題、および/または非標準的な方法でリンクするときにリンクの問題を引き起こす、
このオプションは、ミリコード呼び出しの生成をオフにするために提供されています。
-混合コード
レジスタ割り当てを微調整して、16ビット命令の生成を支援します。 これは一般的に持っています
命令を増やしながら平均命令サイズを減らす効果
カウント。
-mq-クラス
'q'命令の選択肢を有効にします。 これはのデフォルトです -オス.
-mRcq
Rcq制約処理を有効にします-ほとんどの短いコード生成はこれに依存します。 これは
デフォルト。
-mRcw
Rcw制約処理を有効にします-ccfsmcondexecは主にこれに依存します。 これは
デフォルト。
-msize-level =レベル
命令の長さと位置合わせに関してサイズの最適化を微調整します。 The
の認識値 レベル には次の値があります:
0 サイズの最適化はありません。 このレベルは廃止され、次のように扱われます 1.
1 短い指示は日和見的に使用されます。
2 さらに、バリアが削除された後のループとコードの配置。
3 さらに、オプションのデータアライメントが削除され、オプション Os 有効になっています。
これはデフォルトで 3 いつ -オス 有効です。 それ以外の場合、これがない場合の動作
セットはレベルに相当します 1.
-mtune =CPU
の命令スケジューリングパラメータを設定します CPU、によって暗示されるものをオーバーライドする -mcpu =.
サポートされている値 CPU
ARC600
ARC600CPUに合わせて調整します。
ARC601
ARC601CPUに合わせて調整します。
ARC700
標準の乗算器ブロックを使用してARC700CPUに合わせて調整します。
ARC700-xmac
XMACブロックを使用してARC700CPUを調整します。
ARC725D
ARC725DCPUに合わせて調整します。
ARC750D
ARC750DCPUに合わせて調整します。
-mmultcost =NUM
乗算命令で想定するコスト、 4 通常の命令と同じです。
-munalign-prob-threshold =確率
ブランチの位置合わせを解除するための確率しきい値を設定します。 チューニングするとき ARC700 と
速度を最適化すると、遅延スロットが埋められていない分岐が放出されることが好ましい
プロファイリングで分岐の確率が
取られるは以下です 確率。 デフォルトは(REG_BR_PROB_BASE / 2)、つまり5000です。
次のオプションは下位互換性のために維持されていますが、現在は非推奨です
将来のリリースで削除される予定です。
-マーゴノート
廃止されたFPX。
-mbig-エンディアン
-EB ビッグエンディアンターゲットのコードをコンパイルします。 これらのオプションの使用は現在非推奨です。 ユーザー
ビッグエンディアンコードが必要な場合は、「arceb-elf32」および「arceb-linux-uclibc」ターゲットを使用する必要があります
ビッグエンディアンがデフォルトであるツールチェーンを構築するとき。
-mlittle-エンディアン
-THE リトルエンディアンターゲットのコードをコンパイルします。 これらのオプションの使用は現在非推奨です。
リトルエンディアンのコードが必要なユーザーは、「arc-elf32」と「arc-linux-uclibc」を使用する必要があります
ツールチェーンを構築するときのターゲット。リトルエンディアンがデフォルトです。
-mbarrel_shifter
と取り換える -バレルシフター.
-mdpfp_compact
と取り換える -mdpfp-コンパクト.
-mdpfp_fast
と取り換える -mdpfp-高速.
-mdsp_packa
と取り換える -mdsp-packa.
-mEA
と取り換える -メア.
-mmac_24
と取り換える -mmac-24.
-mmac_d16
と取り換える -mmac-d16.
-mspfp_compact
と取り換える -mspfp-コンパクト.
-mspfp_fast
と取り換える -mspfp-高速.
-mtune =CPU
価値観 arc600, arc601, arc700 と アーク700-xmac for CPU に置き換えられます ARC600, ARC601,
ARC700 と ARC700-xmac それぞれ
-マルチコスト=NUM
と取り換える -mmultcost.
ARM オプション
ボーマン -m 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-プロローグ
関数プロローグ内の命令の並べ替え、またはのマージを防止します
関数の本体にある命令を含むそれらの命令。 これは、すべてが
関数は、認識可能な一連の命令(または実際には選択肢のXNUMXつ)から始まります
さまざまな関数プロローグの小さなセットから)、この情報を使用して
実行可能なコード内で関数の開始を見つけます。 デフォルトは
-msched-プロローグ.
-mfloat-abi =名
使用する浮動小数点ABIを指定します。 許容値は次のとおりです。 ソフト, ソフトFP と
ハード.
指定 ソフト GCCにフローティングのライブラリ呼び出しを含む出力を生成させます-
ポイント操作。 ソフトFP ハードウェア浮動小数点を使用してコードを生成できます
ただし、ソフトフロートの呼び出し規約を使用します。 ハード ことができます
浮動小数点命令を生成し、FPU固有の呼び出し規約を使用します。
デフォルトは、特定のターゲット構成によって異なります。 ハードフロートに注意してください
ソフトフロートABIはリンク互換ではありません。 プログラム全体をでコンパイルする必要があります
同じABIであり、互換性のあるライブラリのセットとリンクします。
-mlittle-エンディアン
リトルエンディアンモードで実行されているプロセッサのコードを生成します。 これはのデフォルトです
すべての標準構成。
-mbig-エンディアン
ビッグエンディアンモードで実行されているプロセッサのコードを生成します。 デフォルトはコンパイルです
リトルエンディアンプロセッサのコード。
-XNUMX月=名
これは、ターゲットARMアーキテクチャの名前を指定します。 GCCはこの名前を使用して
アセンブリコードを生成するときに発行できる命令の種類を決定します。 これ
オプションは、と組み合わせて、またはその代わりに使用できます。 -mcpu = オプション。 許容される
名前は次のとおりです。 armv2, armv2a, armv3, armv3m, armv4, armv4t, armv5, armv5t, armv5e,
アームv5te, armv6, armv6j, armv6t2, armv6z, armv6kz, armv6-m, armv7, armv7-a, armv7-r,
armv7-m, armv7e-m, armv7ve, armv8-a, armv8-a + crc, armv8.1-a, armv8.1-a + crc, 私は,
iwmmxt2, ep9312.
-march = armv7ve armv7-仮想化拡張機能を備えたアーキテクチャです。
-march = armv8-a + crc ARMv8-Aアーキテクチャのコード生成を
オプションのCRC32拡張。
-march=ネイティブ コンパイラにビルドのアーキテクチャを自動検出させます
コンピューター。 現在、この機能はGNU / 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, ジェネリック-armv7-a, 皮質-a5, 皮質-a7,
皮質-a8, 皮質-a9, 皮質-a12, 皮質-a15, 皮質-a17, 皮質-a53, 皮質-a57,
皮質-a72, 皮質-r4, 皮質-r4f, 皮質-r5, 皮質-r7, 皮質-m7, 皮質-m4,
皮質-m3, 皮質-m1, 皮質-m0, 皮質-m0plus, 皮質-m1.small-multiply,
皮質-m0.small-multiply, Cortex-m0plus.small-multiply, exynos-m1, qdf24xx,
驚異-pj4, スケール, 私は, iwmmxt2, ep9312, fa526, fa626, fa606te, fa626te, fmp626,
fa726te, xgene1.
さらに、このオプションは、GCCがコードのパフォーマンスを調整する必要があることを指定できます
big.LITTLEシステムの場合。 許可される名前は次のとおりです。 皮質-a15.皮質-a7,
皮質-a17.皮質-a7, 皮質-a57.皮質-a53, 皮質-a72.皮質-a53.
-mtune = generic-アーチ GCCが次のブレンドのパフォーマンスを調整する必要があることを指定します
アーキテクチャ内のプロセッサ アーチ。 目的は、上でうまく実行されるコードを生成することです
現在最も人気のあるプロセッサ、いくつかの利益をもたらす最適化間のバランス
範囲内のCPU、および他のCPUのパフォーマンスの落とし穴を回避します。 の効果
このオプションは、CPUモデルが出入りするにつれて、将来のGCCバージョンで変更される可能性があります。
-mtune = native コンパイラーにビルドコンピューターのCPUを自動検出させます。 で
現在、この機能はGNU / Linuxでのみサポートされており、すべてのアーキテクチャがサポートされているわけではありません。
認識された。 自動検出が失敗した場合、このオプションは効果がありません。
-mcpu =名
これは、ターゲットARMプロセッサの名前を指定します。 GCCはこの名前を使用して、
ターゲットARMアーキテクチャの名前(によって指定されているかのように) -行進)およびARMプロセッサ
パフォーマンスを調整するタイプ( -ムチューン)。 このオプションの場所
とともに使用されます -行進 or -ムチューン、これらのオプションは
このオプションの適切な部分。
このオプションの許容名は、 -ムチューン.
-mcpu = generic-アーチ も許容され、と同等です -XNUMX月=アーチ
-mtune = generic-アーチ。 見る -ムチューン をご覧ください。
-mcpu = native コンパイラーにビルドコンピューターのCPUを自動検出させます。 で
現在、この機能はGNU / Linuxでのみサポートされており、すべてのアーキテクチャがサポートされているわけではありません。
認識された。 自動検出が失敗した場合、このオプションは効果がありません。
-mfpu =名
これは、どの浮動小数点ハードウェア(またはハードウェアエミュレーション)がで利用可能かを指定します
ターゲット。 許可される名前は次のとおりです。 vfp, vfpv3, vfpv3-fp16, vfpv3-d16, vfpv3-d16-fp16,
vfpv3xd, vfpv3xd-fp16, ネオン, ネオン-fp16, vfpv4, vfpv4-d16, fpv4-sp-d16, ネオン-vfpv4,
fpv5-d16, fpv5-sp-d16, FP-ARMV8, ネオン-fp-armv8 と クリプト-ネオン-fp-armv8.
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メガバイトのアドレス指定の範囲外にある場合は、スイッチが必要です
サブルーチン呼び出し命令のオフセットベースバージョンの範囲。
このスイッチを有効にしても、すべての関数呼び出しが長い呼び出しに変わるわけではありません。
ヒューリスティックは、静的関数、「short_call」を持つ関数です。
属性、「#pragmano_long_calls」ディレクティブのスコープ内にある関数、
および定義が現在の範囲内ですでにコンパイルされている関数
コンパイルユニットは長い呼び出しにはなりません。 この規則の例外は
弱い関数定義、「long_call」属性または「section」を持つ関数
属性、および「#pragmalong_calls」ディレクティブのスコープ内にある関数
常に長い呼び出しに変わります。
この機能はデフォルトでは有効になっていません。 指定する -mno-long-calls それらを復元する
「#pragma」のスコープ内に関数呼び出しを配置する場合と同様に、デフォルトの動作
long_calls_off "ディレクティブ。これらのスイッチは、コンパイラの方法に影響を与えないことに注意してください。
関数ポインタを介して関数呼び出しを処理するコードを生成します。
-msingle-pic-base
PICアドレス指定に使用されるレジスタを、ロードするのではなく、読み取り専用として扱います。
各関数のプロローグ。 ランタイムシステムはこれを初期化する責任があります
実行を開始する前に、適切な値で登録してください。
-mpic-register =REG
PICアドレス指定に使用するレジスタを指定します。 標準のPICベースケースの場合、
デフォルトは、コンパイラによって決定された適切なレジスタです。 シングルPICベースケースの場合、
デフォルトは R9 ターゲットがEABIベースであるか、スタックチェックが有効になっている場合、それ以外の場合、
デフォルトは R10.
-mpic-data-is-text-relative
各データセグメントは、ロード時にテキストセグメントに関連していると想定します。 したがって、
PC相対操作を使用してデータをアドレス指定できます。 このオプションはデフォルトでオンになっています
VxWorksRTP以外のターゲットの場合。
-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 =状態 オプションを構成します。
また、を使用して、各機能のARMモードとThumbモードをオーバーライドすることもできます。
「target( "thumb")」および「target( "arm")」関数の属性またはプラグマ。
-mtpcs-フレーム
のThumbProcedureCallStandardに準拠するスタックフレームを生成します。
すべての非リーフ関数。 (リーフ関数は、他の関数を呼び出さない関数です
関数。)デフォルトは -mno-tpcs-フレーム.
-mtpcs-リーフ-フレーム
のThumbProcedureCallStandardに準拠するスタックフレームを生成します。
すべての葉の機能。 (リーフ関数は、他の関数を呼び出さない関数です。)
デフォルトは -mno-apcs-リーフフレーム.
-mcallee-スーパーインターワーキング
コンパイルされるファイル内のすべての外部から見える関数にARM命令を与えます
関数の残りの部分を実行する前にThumbモードに切り替わるヘッダーを設定します。
これにより、これらの関数を相互作用しないコードから呼び出すことができます。 このオプションは
インターワーキングはデフォルトで有効になっているため、AAPCS構成では無効です。
-mcaller-スーパーインターワーキング
関数ポインタ(仮想関数を含む)を介した呼び出しを正しく実行できるようにします
ターゲットコードがインターワーキング用にコンパイルされているかどうかに関係なく。
このオプションの場合、関数ポインタの実行コストにわずかなオーバーヘッドがあります
有効になっています。 インターワーキングは次のようになっているため、このオプションはAAPCS構成では無効です。
デフォルトで有効になっています。
-mtp =名
スレッドローカルストレージポインタのアクセスモデルを指定します。 有効なモデルは
ソフト、「__aeabi_read_tp」への呼び出しを生成します。 cp15、スレッドをフェッチします
「cp15」からの直接ポインタ(arm6kアーキテクチャでサポート)、および オート、その
選択したプロセッサに利用可能な最良の方法を使用します。 デフォルト設定は
オート.
-mtls-dialect =方言
スレッドローカルストレージへのアクセスに使用する方言を指定します。 二 方言sです
サポート---ヌー と ヌー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アーキテクチャ、および他のすべてのアーキテクチャで有効になっています。 もしも
アラインされていないアクセスが有効になっていない場合、パックされたデータ構造内の単語にアクセスします。
一度にバイト。
ARM属性「Tag_CPU_unaligned_access」は、生成されたオブジェクトファイルで次のように設定されます。
このオプションの設定に応じて、trueまたはfalseのいずれか。 アラインされていないアクセスの場合
が有効になると、プリプロセッサシンボル「__ARM_FEATURE_UNALIGNED」も定義されます。
-mneon-for-64ビット
Neonを使用してスカラー64ビット操作を処理できるようにします。 これはデフォルトで無効になっています
コアレジスタからネオンにデータを移動するコストが高いためです。
-mslow-フラッシュ データ
フラッシュからのデータのロードは、命令のフェッチよりも遅いと想定します。 したがって、文字通り
パフォーマンスを向上させるために、負荷を最小限に抑えます。 このオプションは、次の場合にのみサポートされます
ARMv7 Mプロファイル用にコンパイルし、デフォルトでオフにします。
-masm-syntax-unified
インラインアセンブラが統一されたasm構文を使用していると仮定します。 デフォルトは現在オフです
これは、分割された構文を意味します。 このオプションはThumb2には影響しません。 ただし、これは
GCCの将来のリリースでの変更。 分割された構文は非推奨と見なす必要があります。
-mrestrict-それ
ARMv8のルールに準拠するようにITブロックの生成を制限します。 ITブロックは
選択した一連の命令からの単一の16ビット命令のみが含まれます。 これ
ARMv8サムモードのオプションはデフォルトでオンになっています。
-mprint-tune-info
CPUチューニング情報をコメントとしてアセンブラファイルに出力します。 これは使用されるオプションです
コンパイラの回帰テストのみを目的としており、通常の使用を目的としたものではありません。
コードをコンパイルします。 このオプションはデフォルトで無効になっています。
AVR オプション
これらのオプションは、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 {} = "ata5272"、 "ata6616c"、 "attiny13"、 "attiny13a"、
「attiny2313」、「attiny2313a」、「attiny24」、「attiny24a」、「attiny25」、「attiny261」、
「attiny261a」、「attiny43u」、「attiny4313」、「attiny44」、「attiny44a」、「attiny441」、
「attiny45」、「attiny461」、「attiny461a」、「attiny48」、「attiny828」、「attiny84」、
「attiny84a」、「attiny841」、「attiny85」、「attiny861」、「attiny861a」、「attiny87」、
「attiny88」、「at86rf401」。
「avr3」
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 {} = "ata5505"、 "ata6617c"、 "ata664251"、
"atmega16u2"、 "atmega32u2"、 "atmega8u2"、 "attiny1634"、 "attiny167"、 "at90usb162"、
「at90usb82」。
「avr4」
最大8@tie{}KiBのプログラムメモリを備えた「拡張」デバイス。 MCU@tie {} = "ata6285"、
「ata6286」、「ata6289」、「ata6612c」、「atmega48」、「atmega48a」、「atmega48p」、
「atmega48pa」、「atmega8」、「atmega8a」、「atmega8hva」、「atmega8515」、「atmega8535」、
「atmega88」、「atmega88a」、「atmega88p」、「atmega88pa」、「at90pwm1」、「at90pwm2」、
"at90pwm2b", "at90pwm3", "at90pwm3b", "at90pwm81".
「avr5」
16 @ tie{}KiBから64@tie{}KiBまでのプログラムメモリを備えた「拡張」デバイス。
MCU@tie {} = "ata5702m322"、 "ata5782"、 "ata5790"、 "ata5790n"、 "ata5795"、 "ata5831"、
「ata6613c」、「ata6614q」、「atmega16」、「atmega16a」、「atmega16hva」、「atmega16hva2」、
「atmega16hvb」、「atmega16hvbrevb」、「atmega16m1」、「atmega16u4」、「atmega161」、
「atmega162」、「atmega163」、「atmega164a」、「atmega164p」、「atmega164pa」、「atmega165」、
「atmega165a」、「atmega165p」、「atmega165pa」、「atmega168」、「atmega168a」、
「atmega168p」、「atmega168pa」、「atmega169」、「atmega169a」、「atmega169p」、
「atmega169pa」、「atmega32」、「atmega32a」、「atmega32c1」、「atmega32hvb」、
"atmega32hvbrevb"、 "atmega32m1"、 "atmega32u4"、 "atmega32u6"、 "atmega323"、
「atmega324a」、「atmega324p」、「atmega324pa」、「atmega325」、「atmega325a」、
「atmega325p」、「atmega325pa」、「atmega3250」、「atmega3250a」、「atmega3250p」、
「atmega3250pa」、「atmega328」、「atmega328p」、「atmega329」、「atmega329a」、
「atmega329p」、「atmega329pa」、「atmega3290」、「atmega3290a」、「atmega3290p」、
「atmega3290pa」、「atmega406」、「atmega64」、「atmega64a」、「atmega64c1」、「atmega64hve」、
「atmega64hve2」、「atmega64m1」、「atmega64rfr2」、「atmega640」、「atmega644」、
「atmega644a」、「atmega644p」、「atmega644pa」、「atmega644rfr2」、「atmega645」、
「atmega645a」、「atmega645p」、「atmega6450」、「atmega6450a」、「atmega6450p」、
「atmega649」、「atmega649a」、「atmega649p」、「atmega6490」、「atmega6490a」、
"atmega6490p", "at90can32", "at90can64", "at90pwm161", "at90pwm216", "at90pwm316",
「at90scr100」、「at90usb646」、「at90usb647」、「at94k」、「m3000」。
「avr51」
128 @ tie{}KiBのプログラムメモリを備えた「拡張」デバイス。 MCU@tie {} = "atmega128"、
「atmega128a」、「atmega128rfa1」、「atmega128rfr2」、「atmega1280」、「atmega1281」、
「atmega1284」、「atmega1284p」、「atmega1284rfr2」、「at90can128」、「at90usb1286」、
「at90usb1287」。
「avr6」
3バイトのPC、つまり128 @ tie{}KiBを超えるプログラムを備えた「拡張」デバイス
メモリ。 MCU@tie {} = "atmega256rfr2"、 "atmega2560"、 "atmega2561"、"atmega2564rfr2"。
「avrxmega2」
8 @ tie{}KiB以上および最大64@tie{}KiBのプログラムメモリを備えた「XMEGA」デバイス。
MCU@tie {} = "atxmega16a4"、 "atxmega16a4u"、 "atxmega16c4"、 "atxmega16d4"、
"atxmega16e5", "atxmega32a4", "atxmega32a4u", "atxmega32c3", "atxmega32c4",
"atxmega32d3", "atxmega32d4", "atxmega32e5", "atxmega8e5".
「avrxmega4」
64 @ tie{}KiB以上および最大128@tie{}KiBのプログラムを備えた「XMEGA」デバイス
メモリ。 MCU@tie {} = "atxmega64a3"、 "atxmega64a3u"、 "atxmega64a4u"、 "atxmega64b1"、
"atxmega64b3", "atxmega64c3", "atxmega64d3", "atxmega64d4".
「avrxmega5」
64 @ tie{}KiB以上および最大128@tie{}KiBのプログラムを備えた「XMEGA」デバイス
メモリと64@tie{}KiB以上のRAM。 MCU@tie {} = "atxmega64a1"、
「atxmega64a1u」。
「avrxmega6」
128 @ tie{}KiBを超えるプログラムメモリを備えた「XMEGA」デバイス。 MCU@tie {} =
"atxmega128a3", "atxmega128a3u", "atxmega128b1", "atxmega128b3", "atxmega128c3",
"atxmega128d3", "atxmega128d4", "atxmega192a3", "atxmega192a3u", "atxmega192c3",
"atxmega192d3", "atxmega256a3", "atxmega256a3b", "atxmega256a3bu",
"atxmega256a3u", "atxmega256c3", "atxmega256d3", "atxmega384c3", "atxmega384d3".
「avrxmega7」
128 @ tie{}KiB以上のプログラムメモリと以上の「XMEGA」デバイス
64 @ tie{}KiBのRAM。 MCU@tie {} = "atxmega128a1"、 "atxmega128a1u"、"atxmega128a4u"。
「avrtiny」
「TINY」512@tie{}Bから4@tie{}KiBまでのプログラムメモリを備えたTinyCoreデバイス。
MCU@tie {} = "attiny10"、 "attiny20"、 "attiny4"、 "attiny40"、 "attiny5"、"attiny9"。
「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標準に準拠していませんが、結果として小さくなることに注意してください
コードサイズ。
-mn-flash =NUM
フラッシュメモリのサイズが NUM 64 @ tie{}KiB倍。
-mno-割り込み
生成されたコードは、ハードウェア割り込みと互換性がありません。 コードサイズが小さいです。
-mリラックス
「CALL」または「CALL」を置き換えてみてください。 短い「RCALL」応答による「JMP」命令。 「RJMP」
該当する場合は指示。 設定 -mリラックス 追加するだけです --mlink-リラックス オプションを
アセンブラのコマンドラインと - リラックス リンカのコマンドラインへのオプション。
ジャンプオフセットは以前は不明であったため、ジャンプ緩和はリンカーによって実行されます
コードがあります。 したがって、コンパイラによって生成されるアセンブラコードは同じです。
ただし、実行可能ファイルの命令は、アセンブラの命令とは異なる場合があります
コード。
リンカースタブが必要な場合は、リラクシングをオンにする必要があります。「EIND」のセクションを参照してください。
以下のリンカースタブ。
-mrmw
デバイスがリードモディファイライト命令「XCH」、「LAC」、「LAS」をサポートしていると仮定します
と「LAT」。
-msp8
スタックポインタレジスタを8ビットレジスタとして扱います。つまり、
スタックポインタはゼロです。 通常、このオプションを手動で設定する必要はありません。
このオプションは、コンパイラが次のマルチライブラリを選択してビルドするために内部的に使用されます。
アーキテクチャ「avr2」および「avr25」。 これらのアーキテクチャは、デバイスの有無にかかわらずデバイスを混合します
「SPH」。 以外の設定の場合 -mmcu = avr2 or -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{}ビットのみを変更します。
-nodevicelib
AVR-LibCのデバイス固有のライブラリ「libdev.a」に対してリンクしないでください。
-Waddr-space-convert
結果のアドレスが
着信アドレス空間にスペースが含まれていません。
「EIND」および128Kiバイトを超えるフラッシュを備えたデバイス
実装のポインタは16@tie{}ビット幅です。 関数またはラベルのアドレス
間接ジャンプや呼び出しが任意のコードをターゲットにできるように、ワードアドレスとして表されます
64 @ tie{}Kiワードの範囲のアドレス。
128 @ tie{}Kiバイトを超えるデバイスでの間接ジャンプを容易にするため
プログラムメモリ空間には、「EIND」と呼ばれる特殊機能レジスタがあります。
「EICALL」または「EIJMP」命令が次の場合のターゲットアドレスの最も重要な部分
中古。
これらのデバイスでの間接ジャンプおよび呼び出しは、コンパイラによって次のように処理され、
いくつかの制限があります:
*コンパイラが「EIND」を設定することはありません。
*コンパイラは、「EICALL」/「EIJMP」命令で暗黙的に「EIND」を使用するか、次のように読み取る可能性があります。
「RET」を使用して間接呼び出し/ジャンプをエミュレートするために直接「EIND」
命令。
*コンパイラは、「EIND」が起動コード中または起動コード中に変更されないことを前提としています。
応用。 特に、「EIND」は関数または割り込みで保存/復元されません
サービスルーチンのプロローグ/エピローグ。
*関数および計算されたgotoへの間接呼び出しの場合、リンカは次のように生成します。 スタブ。 スタブ
ジャンプパッドと呼ばれることもあります トランポリン。 したがって、間接呼び出し/ジャンプはにジャンプします
そのようなスタブ。 スタブには、目的のアドレスへの直接ジャンプが含まれています。
*リンカーがスタブを正しく生成するには、リンカー緩和をオンにする必要があります
すべての状況で。 コンパイラオプションを参照してください -mリラックス およびリンカーオプション - リラックス.
リンカがスタブを生成することになっているが、中止するコーナーケースがあります
リラクゼーションなしで、役立つエラーメッセージなしで。
*デフォルトのリンカースクリプトは、「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
for MCU= "avr2"、 "avr25"、 "avr3"、 "avr31"、 "avr35"、 "avr4"、 "avr5"、 "avr51"、 "avr6"、
それぞれと
100、102、104、105、106、107
for MCU= "avrtiny"、 "avrxmega2"、 "avrxmega4"、 "avrxmega5"、 "avrxmega6"、 "avrxmega7"、
それぞれ。 もしも MCU デバイスを指定すると、それに応じてこの組み込みマクロが設定されます。 為に
例、 -mmcu = atmega8 マクロは4に定義されています。
"__AVR_デバイス__"
設定 -mmcu =デバイス デバイスの名前を反映するこの組み込みマクロを定義します。 為に
例、 -mmcu = atmega8 組み込みマクロ「__AVR_ATmega8__」を定義し、 -mmcu = attiny261a
「__AVR_ATtiny261A__」などを定義します。
組み込みマクロの名前は、スキーム「__AVR_」に従います。デバイス__" コラボレー デバイス は
AVRユーザーマニュアルからのデバイス名。 の違い デバイス ビルトインで
マクロと デバイス in -mmcu =デバイス 後者は常に小文字であるということです。
If デバイス デバイスではなく、次のようなコアアーキテクチャのみです avr51、このマクロはそうではありません
定義された。
「__AVR_DEVICE_NAME__」
設定 -mmcu =デバイス この組み込みマクロをデバイスの名前に定義します。 例えば、
-mmcu = atmega8 マクロは「atmega8」に定義されています。
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。
"__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-スタック.
「__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-割り込み コマンドラインオプション。
「__AVR_ERRATA_SKIP__」
"__AVR_ERRATA_SKIP_JMP_CALL__"
一部のAVRデバイス(AT90S8515、ATmega103)は、次の理由で32ビット命令をスキップしてはなりません。
ハードウェアの正誤表。 スキップ手順は、「SBRS」、「SBRC」、「SBIS」、「SBIC」、「CPSE」です。
XNUMX番目のマクロは、「__AVR_HAVE_JMP_CALL__」も設定されている場合にのみ定義されます。
「__AVR_ISA_RMW__」
デバイスには、リードモディファイライト命令(XCH、LAC、LAS、およびLAT)があります。
"__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のシリコンリビジョンを指定します
プロセッサ。 対象となるシリコンリビジョンで利用可能な回避策はすべて有効になっています。
If シレビジョン is なし、回避策は有効になっていません。 もしも シレビジョン is どれか、すべての
ターゲットプロセッサの回避策が有効になっています。 「__SILICON_REVISION__」マクロ
は、のメジャー番号とマイナー番号を表すXNUMXつのXNUMX進数に定義されます。
シリコンリビジョン。 もしも シレビジョン is なし、「__SILICON_REVISION__」が定義されていません。
If シレビジョン is どれか、「__SILICON_REVISION__」は0xffffとして定義されています。 これなら
任意 シレビジョン が使用されていない場合、GCCは最新の既知のシリコンリビジョンを想定しています。
ターゲットを絞ったBlackfinプロセッサ。
GCCは、指定されたプリプロセッサマクロを定義します CPU。 のために bfinエルフ ツールチェーン、
このオプションにより、libglossによって提供されるハードウェアBSPがリンクされます。 -msim is
与えられていません。
このオプションがない場合、 bf532 デフォルトではプロセッサとして使用されます。
のサポートに注意してください bf561 不完全です。 為に bf561、プリプロセッサマクロのみが
定義された。
-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共有ライブラリにリンクしないと想定しないでください。
ジャンプおよび呼び出しinsns用に低速のコードが生成されます。
-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 -マコレブ、XNUMXつのアプリケーションを選択します-
コアごとのプログラミングモデル。 それなし -mcorea or -マコレブ
シングルアプリケーション/デュアルコアプログラミングモデルが使用されます。 このモデルでは、メイン
コアBの関数は「coreb_main」という名前にする必要があります。
このオプションを使用しない場合は、シングルコアアプリケーションプログラミングモデルが使用されます。
-mcorea
561つのアプリケーションごとにXNUMXつのアプリケーションを使用する場合は、BFXNUMXのコアA用のスタンドアロンアプリケーションを構築します。
コアプログラミングモデル。 Coreをサポートするために、適切な開始ファイルとリンクスクリプトが使用されます
A、マクロ「__BFIN_COREA」が定義されています。 このオプションはでのみ使用できます
と組み合わせて -マルチコア.
-マコレブ
561つのアプリケーションごとにXNUMXつのアプリケーションを使用する場合は、BFXNUMXのコアB用のスタンドアロンアプリケーションを構築します。
コアプログラミングモデル。 Coreをサポートするために、適切な開始ファイルとリンクスクリプトが使用されます
B、およびマクロ「__BFIN_COREB」が定義されています。 このオプションを使用する場合、「coreb_main」
「メイン」の代わりに使用する必要があります。 このオプションは、と組み合わせてのみ使用できます
-マルチコア.
-msdram
SDRAM用のスタンドアロンアプリケーションを構築します。 適切な開始ファイルとリンクスクリプトが使用されます
アプリケーションをSDRAMに配置し、マクロ「__BFIN_SDRAM」を定義します。 The
ローダーは、アプリケーションをロードする前に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」、「。far」、「。const」。
-msdata = all
小さなオブジェクトだけでなく、すべてのデータを小さなデータ用に予約されたセクションに配置し、
それらにアクセスするには、「B14」レジスタに関連するアドレス指定を使用します。
-msdata = none
小さなデータ用に予約されているセクションを使用せず、絶対アドレスを使用して
すべてのデータにアクセスします。 初期化されたすべてのグローバルデータと静的データを「.fardata」に入れます
セクション、および「.far」セクションのすべての初期化されていないデータ。 すべての定数データを
「.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
これらのオプション(NO- オプション)スタックフレームの配置(配置の削除)、
単一データアクセスの最大サイズに合わせて調整される個々のデータと定数
選択した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をリンクします。 ELFに適用可能
コンパイラのみ。
-ミント32
整数型を32ビット幅として選択します。
-mbit-ops
ビット操作用の「sbit」/「cbit」命令を生成します。
-mdata-model =
データモデルを選択します。 の選択肢 近く, 遠く or ミディアム. ミディアム デフォルトです。
しかしながら、 遠く で無効です -mcr16c、CR16Cアーキテクチャは、
遠いデータモデル。
ダーウィン オプション
これらのオプションは、Darwinオペレーティングシステムを実行しているすべてのアーキテクチャに対して定義されています。
DarwinのFSFGCCは、「ファット」オブジェクトファイルを作成しません。 のオブジェクトファイルを作成します
GCCがターゲットとして構築された単一のアーキテクチャ。 ダーウィンのAppleのGCCは「太った」ものを作成します
複数の場合はファイル -アーチ オプションが使用されます。 これは、コンパイラまたはリンカを実行することによって行われます。
複数回、結果を一緒に結合します リポ.
作成されたファイルのサブタイプ( ppc7400 or ppc970 or i686)によって決定されます
GCCがターゲットにしているISAを指定するフラグ。 -mcpu or -行進を選択します。
-force_cpusubtype_ALL オプションを使用してこれをオーバーライドできます。
ダーウィンツールは、ISAの不一致が提示された場合の動作が異なります。 The
アセンブラ、 as、のサブタイプに有効な命令の使用のみを許可します
生成しているファイルであるため、64ビット命令を ppc750 オブジェクトファイル。 The
共有ライブラリのリンカー、 / usr / bin / libtool、失敗し、要求された場合はエラーを出力します
入力ファイルよりも制限の少ないサブタイプで共有ライブラリを作成します(
インスタンス、入れようとしています ppc970 のオブジェクトファイル ppc7400 図書館)。 のリンカー
実行可能ファイル、 ld、実行可能ファイルにそのいずれかの最も制限的なサブタイプを静かに与えます
入力ファイル。
-FDIR
フレームワークディレクトリを追加します DIR 検索するディレクトリのリストの先頭に
ヘッダーファイル用。 これらのディレクトリは、によって指定されたディレクトリとインターリーブされます -I
オプションで、左から右の順序でスキャンされます。
フレームワークディレクトリは、フレームワークを含むディレクトリです。 フレームワークは
のあるディレクトリ ヘッダ および プライベートヘッダー その中に直接含まれているディレクトリ
で終わる 。フレームワーク。 フレームワークの名前は、このディレクトリの名前です。
。フレームワーク。 フレームワークに関連付けられているヘッダーは、これらXNUMXつのうちのXNUMXつにあります。
ディレクトリ、 ヘッダ 最初に検索されます。 サブフレームワークはフレームワークです
フレームワーク内にあるディレクトリ フレームワーク ディレクトリ。 サブフレームワークを含む
ヘッダーは、サブフレームワークを含むフレームワークのヘッダーにのみ表示できます。
兄弟サブフレームワークヘッダー内。 XNUMXつのサブフレームワークは、
同じフレームワーク。 サブフレームワークは、フレームワークと同じ名前であってはなりません。 a
これに違反した場合、警告が発行されます。 現在、サブフレームワークは持つことができません
サブフレームワーク; 将来的には、これをサポートするためにメカニズムが拡張される可能性があります。 The
標準フレームワークはで見つけることができます /システム/ライブラリ/フレームワーク と
/ライブラリ/フレームワーク。 インクルードの例は「#include "、
コラボレー フレームワーク フレームワークの名前を示し、 header.h にあります
プライベートヘッダー or ヘッダ ディレクトリにあります。
-iframeworkDIR
いいね -F ただし、ディレクトリはシステムディレクトリとして扱われます。 主な違い
この間 -iframework と -F それは -iframework コンパイラは警告しません
経由で見つかったヘッダーファイルに含まれる構成について DIR。 このオプションは有効です
Cファミリーの言語のみ。
-突っ込んだ
使用されているシンボルのデバッグ情報を出力します。 スタブデバッグ形式の場合、
これにより、 -feliminate-未使用のデバッグシンボル。 これはデフォルトでオンになっています。
-gfull
すべてのシンボルとタイプのデバッグ情報を出力します。
-mmacosx-version-min =バージョン
この実行可能ファイルが実行されるMacOSXの最も古いバージョンは バージョン。 典型的な
の値 バージョン 10.1、10.2、および10.3.9を含みます。
コンパイラがデフォルトでシステムのヘッダーを使用するように構築されている場合、デフォルトでは
このオプションは、コンパイラが実行されているシステムバージョンです。それ以外の場合は、
デフォルトでは、同じ数のシステムおよびコードベースと互換性のある選択を行います
可能。
-mkernel
カーネル開発モードを有効にします。 The -mkernel オプションセット -静的, -fno-common,
-fno-use-cxa-atexit, -fno-例外, -fno-非呼び出し例外, -fapple-kext,
-fno-弱い と -fno-rtti 該当する場合。 このモードも設定します -mno-altivec,
-msoft-float, -fno-builtin と -mlong-枝 PowerPCターゲットの場合。
-mone-byte-bool
「sizeof(bool)== 1」になるように、「bool」のデフォルトをオーバーライドします。 デフォルトでは「sizeof(bool)」
Darwin / PowerPC用にコンパイルする場合は4、Darwin / x1用にコンパイルする場合は86なので、これは
オプションは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は実行可能ファイルではなくダイナミックライブラリを生成します。
ダーウィンを使用したリンク リブツール
-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 関数内
生成されたアセンブリファイルのプロローグ。
-mbuild-定数
通常、GCCは32ビットまたは64ビットの整数定数を調べて、それを構築できるかどうかを確認します
XNUMXつまたはXNUMXつの命令の小さな定数から。 できない場合は、
リテラルとして定数であり、実行時にデータセグメントからロードするコードを生成します。
このオプションを使用して、GCCに構築を要求します を たとえコードを使用する整数定数
より多くの命令が必要です(最大はXNUMXつです)。
通常、このオプションを使用して、共有ライブラリの動的ローダーを構築します。 それ自体
共有ライブラリの場合、変数を見つける前にメモリ内に再配置する必要があります。
独自のデータセグメントの定数。
-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でのみ有効であることに注意してください。
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に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- * musl * と *-*-linux- * android * ターゲット。
-ムクリブ
uClibcCライブラリを使用します。 これがデフォルトです *-*-linux- * uclibc * ターゲット。
-mmusl
muslCライブラリを使用します。 これがデフォルトです *-*-linux- * musl * ターゲット。
-バイオニック
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.
-メクスル
拡張レジスタは、モニタで関数を実行する前にスタックに格納されます
属性。 デフォルトのオプションは -メクスル。 このオプションは、H8Sターゲットにのみ有効です。
-mno-exr
拡張レジスタは、モニタで関数を実行する前にスタックに格納されません。
属性。 デフォルトのオプションは -mno-exr。 このオプションは、H8Sターゲットにのみ有効です。
-ミント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 。
-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リンカーを使用して、明示的または暗黙的に構成されます。 このオプションは影響しません
which ld と呼ばれます。 渡されるパラメータを変更するだけです ldを選択します。 ld
と呼ばれることはによって決定されます --with-ld 構成オプション、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のライブラリ。 このオプション
プリプロセッサとリンカの両方にフラグを設定します。
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
DWARF 2の行番号のデバッグ情報用のアセンブラコードを生成しない(または生成しない)。
これは、GNUアセンブラを使用しない場合に役立つことがあります。
-ほぼ停止ビット
-mno-early-stop-bits
ストップビットを、次の命令の直前よりも前に配置できるようにします。
ストップビットをトリガーしました。 これにより、命令スケジューリングを改善できますが、必ずしもそうとは限りません。
そうする。
-mfixed-range =レジスタ範囲
指定されたレジスタ範囲を固定レジスタとして扱うコードを生成します。 固定レジスタ
レジスタアロケータが使用できないものです。 これは、カーネルをコンパイルするときに役立ちます
コード。 レジスタ範囲は、ダッシュで区切られたXNUMXつのレジスタとして指定されます。 多数
レジスタ範囲は、コンマで区切って指定できます。
-mtls-size =TLS サイズ
即時TLSオフセットのビットサイズを指定します。 有効な値は14、22、および64です。
-mtune =CPUタイプ
特定のCPUの命令スケジューリングを調整します。有効な値は次のとおりです。 イタニウム,
イタニウム1, 傷ついた, イタニウム2, マッキンリー.
-ミルプ32
-mlp64
32ビットまたは64ビット環境用のコードを生成します。 32ビット環境はintを設定します。
longおよび32ビットへのポインタ。 64ビット環境では、intが32ビットおよびlongに設定されます。
64ビットへのポインタ。 これらはHP-UX固有のフラグです。
-mno-sched-br-data-spec
-msched-br-データ仕様
リロード前の(Dis / En)可能なデータ投機的スケジューリング。 これにより、
「ld.a」命令および対応するチェック命令(「ld.c」/「chk.a」)。 The
デフォルトは「無効」です。
-msched-ar-data-spec
-mno-sched-ar-data-spec
リロード後の(En / Dis)可能なデータ投機的スケジューリング。 これにより、
「ld.a」命令および対応するチェック命令(「ld.c」/「chk.a」)。 The
デフォルトは「有効」です。
-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-insn 厳しい制限、それ以上の禁止
命令グループのその数より。 それ以外の場合、制限は「ソフト」、つまり
制限に達した場合は非メモリ操作が優先されますが、メモリ
操作はまだスケジュールされている可能性があります。
LM32 オプション
ボーマン -m LatticeMico32アーキテクチャのオプションは次のように定義されています。
-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」、または「.bss」のいずれかに配置されます。
「.rodata」(「section」属性が指定されていない場合)。 これがデフォルトです。
小さなデータ領域は、セクション「.sdata」と「.sbss」で構成されています。 オブジェクトは
これらのいずれかを使用して、「section」属性を使用して小さなデータ領域に明示的に配置します
セクション。
-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 51ag 51cn 51em 51je 51jf 51jg 51jm 51 mm 51qe 51qm
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はマクロ「__m」も定義します早い__" 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ターゲットとColdFireターゲットの「__mcffpu__」。
-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 foobar
これが発生した場合は、コードを再コンパイルする必要があります -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レジスタをベースレジスタとして使用し、128バイトの制限があります
「.based」セクションに移動します。
-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
によって有効化されたすべてのオプションの命令を無効にします -モール-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 is
互換性コード。 値の例は次のとおりです 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-チェック を代わりにお使いください。
-mxl-gp-opt
GP相対の「.sdata」/「。sbss」セクションを使用します。
-mxl-乗算-高
32x32乗算の上位部分には、乗算上位命令を使用します。
-mxl-float-convert
ハードウェア浮動小数点変換命令を使用します。
-mxl-float-sqrt
ハードウェア浮動小数点平方根命令を使用します。
-mbig-エンディアン
ビッグエンディアンターゲットのコードを生成します。
-mlittle-エンディアン
リトルエンディアンターゲットのコードを生成します。
-mxl-並べ替え
再順序付け命令を使用します(スワップおよびバイト反転ロード/ストア)。
-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, mips32r3, mips32r5, mips32r6, ミップス64, mips64r2, mips64r3, mips64r5
と mips64r6。 プロセッサ名は次のとおりです。 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, 34kn, 74kc, 74kf2_1, 74kf1_1, 74kf3_2, 1004kc, 1004kf2_1, 1004kf1_1,
ロンソン2e, ロンソン2f, ロンソン3a, m4k, m14k, m14kc, m14ke, m14kec, オクテオン, オクテオン+,
オクテオン2, オクテオン3, オリオン, p5600, r2000, r3000, r3900, r4000, r4400, r4600, r4650,
r4700, r6000, r8000, rm7000, rm9000, r10000, r12000, r14000, r16000, sb1, sr71000,
vr4100, vr4111, vr4120, vr4130, vr4300, vr5000, vr5400, vr5500, xlr と xlpを選択します。
特別な価値 アビから 選択したABIに最も互換性のあるアーキテクチャを選択します
(あれは、 ミップス1 32ビットABIおよび ミップス3 64ビットABIの場合)。
ネイティブのLinux/GNUツールチェーンも価値をサポートします ネイティブ、最適なものを選択します
ホストプロセッサのアーキテクチャオプション。 -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つのマクロを定義します。 XNUMXつ目は「_MIPS_ARCH」です。
これは、ターゲットアーキテクチャの名前を文字列として示します。 XNUMX番目の形式は
"_MIPS_ARCH_foo」ここで、 foo 「_MIPS_ARCH」の大文字の値です。 例えば、
-march = r2000 「_MIPS_ARCH」を「r2000」に設定し、マクロ「_MIPS_ARCH_R2000」を定義します。
「_MIPS_ARCH」マクロは上記のプロセッサ名を使用することに注意してください。 その他
つまり、完全な接頭辞があり、省略形ではありません 000 as k。 の場合 から-
ABI、マクロは解決されたアーキテクチャに名前を付けます(「mips1」または「mips3」のいずれか)。 名前を付ける
いいえの場合のデフォルトアーキテクチャ -行進 オプションが与えられます。
-mtune =アーチ
最適化 アーチ。 特に、このオプションは命令の方法を制御します
スケジュールされた、および算術演算の認識されたコスト。 のリスト アーチ 値
と同じです -行進.
このオプションを使用しない場合、GCCはによって指定されたプロセッサ用に最適化します。 -行進。 によって
-行進 と -ムチューン 一緒に、で実行されるコードを生成することが可能です
プロセッサのファミリですが、そのファミリの特定のメンバーのコードを最適化します。
-ムチューン マクロ「_MIPS_TUNE」および「_MIPS_TUNE_」を定義しますfoo」、同じように動作します
としての方法 -行進 上記のもの。
-ミップス1
に相当 -march = mips1.
-ミップス2
に相当 -march = mips2.
-ミップス3
に相当 -march = mips3.
-ミップス4
に相当 -march = mips4.
-ミップス32
に相当 -march = mips32.
-mips32r3
に相当 -march = mips32r3.
-mips32r5
に相当 -march = mips32r5.
-mips32r6
に相当 -march = mips32r6.
-ミップス64
に相当 -march = mips64.
-mips64r2
に相当 -march = mips64r2.
-mips64r3
に相当 -march = mips64r3.
-mips64r5
に相当 -march = mips64r5.
-mips64r6
に相当 -march = mips64r6.
-ミップス16
-mno-mips16
MIPS16コードを生成します(生成しません)。 GCCがMIPS32またはMIPS64をターゲットにしている場合
アーキテクチャでは、MIPS16eASEを利用します。
MIPS16コード生成は、機能ごとに制御することもできます。
「mips16」および「nomips16」属性。
-mflip-mips16
交互の機能でMIPS16コードを生成します。 このオプションは回帰用に提供されています
MIPS16と非MIPS16の混合コード生成のテストであり、通常のコード生成を目的としたものではありません。
ユーザーコードのコンパイルに使用します。
-minterlink-圧縮
-mno-interlink-compressed
標準の(非圧縮の)MIPS ISAを使用するコードがリンクされていることを要求します(要求しません)-
MIPS16およびmicroMIPSコードと互換性があり、その逆も同様です。
たとえば、標準のISAエンコーディングを使用するコードは、MIPS16または
microMIPSコード; 呼び出しまたは間接ジャンプのいずれかを使用する必要があります。 -minterlink-圧縮
したがって、ジャンプのターゲットがそうではないことをGCCが認識しない限り、直接ジャンプを無効にします
圧縮されています。
-minterlink-mips16
-mno-インターリンク-mips16
のエイリアス -minterlink-圧縮 と -mno-interlink-compressed。 これらのオプション
microMIPS ASEよりも前のものであり、下位互換性のために保持されています。
-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、MIPS32R3、およびMIPS32R5プロセッサー。
引数と戻り値のレジスタ割り当ては同じままですが、それぞれ
スカラー値は、64ビットのペアではなく単一の32ビットレジスタで渡されます
レジスタ。 たとえば、スカラー浮動小数点値はで返されます $ f0 のみ、
$ f0/$ f1 ペア。 呼び出し保存されたレジスタのセットも、偶数-
番号付きの倍精度レジスタが保存されます。
からの移行を可能にするために、o32ABIのXNUMXつの追加バリアントがサポートされています
32ビットから64ビットのレジスタ。 これらはFPXX(-mfpxx)およびFP64A(-MFP64
-mno-奇数-spreg)。 FPXX拡張機能は、すべてのコードを正しく実行する必要があることを義務付けています
32ビットまたは64ビットレジスタを使用して実行する場合。 コードはいずれかと相互リンクできます
FP32またはFP64。ただし、両方ではありません。 FP64A拡張機能はFP64拡張機能に似ていますが、
奇数の単精度レジスタの使用を禁止します。 これはで使用することができます
MIPS32R5プロセッサのFPUの「FRE」モードと組み合わせて、両方のFP32を許可します
およびFP64Aコードは、FPUモードを変更せずに、同じプロセスで相互リンクして実行します。
-マビコール
-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ビット幅であると想定します。
-mfpxx
浮動小数点レジスタの幅を想定しないでください。
-mhard-float
浮動小数点コプロセッサ命令を使用します。
-msoft-float
浮動小数点コプロセッサ命令は使用しないでください。 浮動小数点を実装する
代わりにライブラリ呼び出しを使用した計算。
-mno-float
に相当 -msoft-float、しかしさらに、コンパイルされているプログラムが
浮動小数点演算は実行しません。 このオプションは現在サポートされています
一部のベアメタルMIPS構成によってのみ、特別なセットを選択する場合があります
すべての浮動小数点サポートを欠いているライブラリ(たとえば、floating-
ポイント「printf」フォーマット)。 コードをコンパイルした場合 -mno-float 誤って含まれています
浮動小数点演算では、リンク時または実行時の障害が発生する可能性があります。
-msingle-float
浮動小数点コプロセッサーは単精度演算のみをサポートするとします。
-mdouble-float
浮動小数点コプロセッサーが倍精度演算をサポートしていると仮定します。 これ
デフォルトです。
-modd-spreg
-mno-奇数-spreg
o32の奇数の単精度浮動小数点レジスタの使用を有効にします
ABI。 これは、これらのレジスタをサポートすることがわかっているプロセッサのデフォルトです。
o32 FPXX ABIを使用する場合、 -mno-奇数-spreg デフォルトで設定されています。
-mabs = 2008
-mabs=レガシー
これらのオプションは、特別な非数(NaN)IEEE754の処理を制御します
「abs」を含む浮動小数点データ。fmt」 と「ネガ。fmt」 機械の指示。
デフォルトまたはいつ -mabs=レガシー 使用されるレガシー処理が選択されます。 これで
これらの命令が算術演算と見なされ、正しい演算が行われる場合は回避されます
が必要であり、入力オペランドはNaNである可能性があります。 命令のより長いシーケンス
代わりに、浮動小数点データの符号ビットを手動で操作するものが使用されます。
-有限数学のみ オプションも指定されています。
この -mabs = 2008 オプションは、IEEE754-2008処理を選択します。 この場合、これらは
命令は非算術と見なされるため、すべてで正しく動作します
特に入力オペランドがNaNである場合を含みます。 これらの指示
したがって、常にそれぞれの操作に使用されます。
-mnan = 2008
-mnan=レガシー
これらのオプションは、特別な非数(NaN)IEEE754のエンコーディングを制御します
浮動小数点データ。
この -mnan=レガシー オプションはレガシーエンコーディングを選択します。 この場合、静かなNaN(qNaN)
末尾の仮数フィールドの最初のビットが0であるのに対し、
シグナリングNaN(sNaN)は、末尾の仮数の最初のビットで示されます。
フィールドは1です。
この -mnan = 2008 オプションは、IEEE754-2008エンコーディングを選択します。 この場合、qNaNは
末尾の仮数フィールドの最初のビットが1であるのに対し、sNaNはXNUMXで示されます。
末尾の仮数フィールドの最初のビットが0であることで示されます。
デフォルトは -mnan=レガシー GCCがで構成されていない限り --with-nan = 2008.
-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 含意する -障害のあるシングル.
-マイクロミップス
-mno-micromips
microMIPSコードを生成します(生成しません)。
MicroMIPSコード生成は、機能ごとに制御することもできます。
「micromips」および「nomicromips」属性。
-mmt
-mno-mt
MTマルチスレッド命令を使用する(使用しない)。
-mmcu
-mno-mcu
MIPS MCU ASE命令を使用します(使用しないでください)。
-メバ
-mno-eva
MIPS拡張仮想アドレス指定命令を使用します(使用しないでください)。
-mvirt
-mno-virt
MIPS仮想化アプリケーション固有の手順を使用します(使用しないでください)。
-mxpa
-mno-xpa
MIPS拡張物理アドレス(XPA)命令を使用します(使用しないでください)。
-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 詳細については。
デフォルト -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」の使用を強制します(強制しないでください)。 デフォルトは
-mno-memcpy、これにより、GCCはほとんどの一定サイズのコピーをインライン化できます。
-mlong-calls
-mno-long-calls
「jal」命令の使用を無効にします(無効にしないでください)。 「jal」を使用した関数の呼び出し
より効率的ですが、発信者と着信者が同じ256メガバイトである必要があります
セグメント。
このオプションは、abicallsコードには影響しません。 デフォルトは -mno-long-calls.
-マッド
-mno-mad
「mad」、「madu」、および「mul」命令の使用を有効(無効)にします。
R4650ISA。
-ミマッド
-mno-imadd
「madd」および「msub」整数命令の使用を有効(無効)にします。 デフォルトは
-ミマッド 74kを除く「madd」と「msub」をサポートするアーキテクチャ
遅いコードを生成することがわかったアーキテクチャ。
-混乱-狂った
-mno-fusion-madd
浮動小数点積和命令の使用を有効(無効)にします。
利用可能です。 デフォルトは -混乱-狂った.
R8000 CPUで、積和命令が使用される場合、中間
製品は無限の精度で計算され、FCSRフラッシュの対象ではありません。
ゼロビット。 これは、状況によっては望ましくない場合があります。 他のプロセッサでは、
結果は、個別の乗算を使用した同等の計算と数値的に同じです。
命令を加算、減算、および無効にします。
-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-rm7000
-mno-fix-rm7000
RM7000の「dmult」/「dmultu」エラッタを回避します。 回避策はによって実装されます
GCCではなくアセンブラ。
-mfix-vr4120
-mno-fix-vr4120
特定のVR4120エラッタを回避します。
-「dmultu」は常に正しい結果を生成するとは限りません。
-「div」と「ddiv」は、オペランドのXNUMXつが正しい結果を生成するとは限りません。
負です。
除算エラッタの回避策は、次の特殊機能に依存しています。 libgcc.a。 に
現在、これらの機能は「mips64vr*-elf」構成によってのみ提供されます。
他のVR4120エラッタでは、特定のペアの間にNOPを挿入する必要があります。
指示。 これらのエラッタは、GCC自体ではなく、アセンブラによって処理されます。
-mfix-vr4130
VR4130「mflo」/「mfhi」エラッタを回避します。 回避策は、によって実装されます
GCCではなくアセンブラですが、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」または「__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、ただし、デフォルトは設定することで上書きできます
GCCと --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 指示。 このオプション
プリプロセッサマクロ「__NO_LIW__」を定義します。
-msetlb
コンパイラが生成できるようにします SETLB と LCC ターゲットが
AM33 またはそれ以降。 これがデフォルトです。 このオプションは、プリプロセッサマクロを定義します
「__SETLB__」。
-mnosetlb
コンパイラに生成を許可しない SETLB or LCC 指示。 このオプションは次のように定義します
プリプロセッサマクロ「__NO_SETLB__」。
勇気 オプション
-meb
ビッグエンディアンコードを生成します。 これはのデフォルトです モクシー-*-* 構成。
-メル
リトルエンディアンコードを生成します。
-mmul.x
mul.xおよびumul.x命令を生成します。 これはのデフォルトです モクシーボックス-*-*
構成。
-mno-crt0
Cランタイム初期化オブジェクトファイルにリンクしないでください。
MSP430 オプション
これらのオプションは、MSP430に対して定義されています。
-masm-hex
アセンブリ出力で常にXNUMX進定数を使用するように強制します。 通常、そのような定数は署名されています
小数ですが、このオプションはテストスイートおよび/または美的目的で使用できます。
-mmcu =
ターゲットとするMCUを選択します。 これは、に基づいてCプリプロセッサシンボルを作成するために使用されます
大文字に変換され、前後に固定されたMCU名 __。 これは順番に
によって使用されます msp430.h MCU固有の補足ヘッダーを選択するためのヘッダーファイル
ファイルにソフトウェアを指定する必要があります。
このオプションは、使用するISAも設定します。 MCU名が唯一の人に知られているものである場合
430 ISAをサポートし、それが選択されます。それ以外の場合は、430XISAが選択されます。 A
の一般的なMCU名 msp430 430ISAの選択にも使用できます。 同様に
ジェネリック msp430x MCU名は430XISAを選択します。
さらに、MCU固有のリンカースクリプトがリンカーコマンドラインに追加されます。 The
スクリプトの名前は、MCUの名前です。 .ld 添付。 したがって、 -mmcu = xxx on
gccの コマンドラインはCプリプロセッサシンボル「__XXX__」を定義し、リンカを発生させます
と呼ばれるスクリプトを検索するには xxx.ld.
このオプションは、アセンブラーにも渡されます。
-mcpu =
使用するISAを指定します。 受け入れられる値は msp430, msp430x と msp430xv2。 この
オプションは非推奨です。 The -mmcu = オプションを使用してISAを選択する必要があります。
-msim
シミュレータランタイムライブラリとリンカースクリプトにリンクします。 次のようなスクリプトを上書きします
によって選択されます -mmcu = オプションを選択します。
-拡大
ラージモデルのアドレス指定(20ビットポインタ、32ビット "size_t")を使用します。
-小さい
スモールモデルアドレス指定(16ビットポインタ、16ビット "size_t")を使用します。
-mリラックス
このオプションはアセンブラーとリンカーに渡され、リンカーが実行できるようにします
最終リンクまで実行できない特定の最適化。
mhwmult =
ターゲットによって複数サポートされるハードウェアのタイプについて説明します。 受け入れられる値は
なし ハードウェアの乗算がない場合、 16bit 元の16ビットのみの乗算がサポートされています
初期のMCUによる。 32bit 後のMCUでサポートされる16/32ビット乗算および f5シリーズ
F16シリーズMCUでサポートされる32/5ビット乗算用。 の値 オート また、することができます
与えられた。 これは、MCU名に基づいてハードウェア乗算サポートを推測するようにGCCに指示します
提供者 -mmcu オプション。 いいえの場合 -mmcu オプションが指定された場合 32bit ハードウェア
乗算サポートが想定されています。 オート デフォルト設定です。
ハードウェアの乗算は通常、ライブラリルーチンを呼び出すことによって実行されます。 これは節約します
生成されたコードのスペース。 でコンパイルするとき -O3 以上、ただしハードウェア
乗数はインラインで呼び出されます。 これにより、コードは大きくなりますが、高速になります。
ハードウェア乗算ルーチンは、実行中の割り込みを無効にして、
終了時の以前の割り込み状態。 これにより、内部で安全に使用できます
割り込みハンドラと通常のコード。
-minrt
最小限のランタイム環境の使用を有効にします-静的初期化子なしまたは
コンストラクター。 これは、メモリに制約のあるデバイスを対象としています。 コンパイラには次のものが含まれます
リンカとランタイムにどのコードフラグメントを通知するかを示す一部のオブジェクトの特殊記号
必要とされます。
NDS32 オプション
これらのオプションは、NDS32実装用に定義されています。
-mbig-エンディアン
ビッグエンディアンモードでコードを生成します。
-mlittle-エンディアン
リトルエンディアンモードでコードを生成します。
-mreduced-regs
レジスタ割り当てには、縮小セットレジスタを使用します。
-mfull-regs
レジスタ割り当てにはフルセットレジスタを使用してください。
-mcmov
条件付き移動命令を生成します。
-mno-cmov
条件付き移動命令を生成しないでください。
-mperf-ext
パフォーマンス拡張命令を生成します。
-mno-perf-ext
パフォーマンス拡張命令を生成しないでください。
-mv3push
v3 push25/pop25命令を生成します。
-mno-v3push
v3 push25/pop25命令を生成しないでください。
-m16ビット
16ビット命令を生成します。
-mno-16ビット
16ビット命令を生成しないでください。
-misr-vector-size =NUM
各割り込みベクトルのサイズを指定します。サイズは4または16でなければなりません。
-mcache-block-size =NUM
各キャッシュブロックのサイズを指定します。これは、2〜4の512の累乗である必要があります。
-XNUMX月=アーチ
ターゲットアーキテクチャの名前を指定します。
-mcmodel =コードモデル
コードモデルを次のいずれかに設定します
小さい
すべてのデータおよび読み取り専用データセグメントは、512KBのアドレス空間内にある必要があります。
テキストセグメントは、16MBのアドレス空間内にある必要があります。
ミディアム
データセグメントは512KB以内である必要がありますが、読み取り専用データセグメントは
4GBのアドレス空間内。 テキストセグメントはまだ16MB以内である必要があります
アドレス空間。
大
すべてのテキストおよびデータセグメントは、4GBのアドレス空間内に含めることができます。
-mctor-dtor
コンストラクタ/デストラクタ機能を有効にします。
-mリラックス
リンカをガイドして命令を緩和します。
ニオス II オプション
これらは、アルテラNiosIIプロセッサ用に定義されたオプションです。
-G NUM
グローバルオブジェクトと静的オブジェクトを以下に配置します NUM 小さなデータへのバイトまたは
通常のデータまたはBSSセクションの代わりにBSSセクション。 のデフォルト値 NUM is
8.
-mgpopt =オプション
-mgpopt
-mno-gpopt
GP相対アクセスを生成します(生成しません)。 以下 オプション 名前は
認識された:
なし
GP相対アクセスを生成しないでください。
ローカル
外部または外部ではない小さなデータオブジェクトのGP相対アクセスを生成する
弱い。 また、明示的にされたオブジェクトにはGP相対アドレス指定を使用します
「section」属性を介して小さなデータセクションに配置されます。
全体的な
はどうかと言うと ローカル、だけでなく、小さなデータオブジェクトのGP相対アクセスを生成します。
外部または弱いです。 このオプションを使用する場合は、のすべての部分を確認する必要があります
あなたのプログラム(ライブラリを含む)は同じものでコンパイルされています -G 設定。
データ
プログラム内のすべてのデータオブジェクトに対してGP相対アクセスを生成します。 使用する場合
このオプションでは、プログラムのデータ全体とBSSセグメントが64Kに収まる必要があります。
メモリを使用し、適切なリンカスクリプトを使用してそれらを
グローバルポインタのアドレス可能な範囲。
を 関数ポインタとデータポインタのGP相対アドレスを生成します。 もしも
このオプションを使用する場合、プログラムのテキスト全体、データ、およびBSSセグメントは
64Kのメモリに収まり、適切なリンカースクリプトを使用して割り当てる必要があります
それらはグローバルポインタのアドレス可能な範囲内にあります。
-mgpopt に相当します -mgpopt = local, -mno-gpopt に相当します -mgpopt = none.
デフォルトは -mgpopt 時を除いて -fpic or -fPIC 位置を生成するように指定されています-
独立したコード。 Nios II ABIは、からのGP相対アクセスを許可しないことに注意してください。
共有ライブラリ。
指定する必要があるかもしれません -mno-gpopt を含むプログラムを構築するときに明示的に
大きなGOTデータセクションを含む、大量の小さなデータ。 この場合、
GP相対アドレス指定の16ビットオフセットは、アクセスを許可するのに十分な大きさではない可能性があります
小さなデータセクション全体。
-メル
-meb
リトルエンディアン(デフォルト)またはビッグエンディアン(実験的)コードをそれぞれ生成します。
-mbypass-キャッシュ
-mno-バイパス-キャッシュ
のI/Oバリアントを使用して、すべてのロードおよびストア命令が常にキャッシュをバイパスするように強制します。
説明書。 デフォルトでは、キャッシュをバイパスしません。
-mno-キャッシュ-揮発性
-mcache-揮発性
揮発性メモリアクセスは、ロードおよびストアのI/Oバリアントを使用してキャッシュをバイパスします
指示。 デフォルトでは、キャッシュをバイパスしません。
-mno-fast-sw-div
-mfast-sw-div
少数の場合は、テーブルベースの高速除算を使用しないでください。 デフォルトでは、高速を使用します
で分割 -O3 以上。
-mno-hw-mul
-mhw-mul
-mno-hw-mulx
-mhw-マルクス
-mno-hw-div
-mhw-div
「mul」、「mulx」、および「div」ファミリの命令の発行を有効または無効にします。
コンパイラ。 デフォルトでは、「mul」を発行し、「div」と「mulx」は発行しません。
-mcustom-旅館=N
-mno-カスタム-旅館
各 -mcustom-旅館=N オプションを使用すると、エンコーディングでカスタム命令を使用できます N いつ
を使用するコードの生成 旅館。 例えば、 -mcustom-fadds = 253 カスタムを生成します
の代わりに単精度浮動小数点加算演算の命令253
ライブラリ呼び出しを使用するデフォルトの動作。
次の値 旅館 サポートされています。 特に明記されていない限り、浮動小数点
操作は、通常のIEEE754セマンティクスで実装されることが期待されています。
C演算子または同等のGCC組み込み関数に直接対応します。
単精度浮動小数点:
ファッド, fsub, fdiv, フムルス
バイナリ算術演算。
fnegs
単項否定。
素晴らしい
単項絶対値。
fcmpeqs, fcmpges, fcmpgts, fcmples, fcplts, fcmpnes
比較演算。
ふみん, fmax
浮動小数点の最小値と最大値。 これらの命令は、次の場合にのみ生成されます
-有限数学のみ 指定されています。
fsqrts
単項平方根演算。
フコス, fsins, フタン, ファタン, fexp, フロッグ
浮動小数点の三角関数と指数関数。 これらの指示は
次の場合にのみ生成されます -funsafe-数学の最適化 も指定されています。
倍精度浮動小数点:
ファッド, fsubd, fdivd, 失敗
バイナリ算術演算。
ネグド
単項否定。
ファブズド
単項絶対値。
fcmpeqd, fcmpged, fcmpgtd, 実装された, fcmpltd, fcmpned
比較演算。
見つける, fmaxd
倍精度の最小値と最大値。 これらの命令は、次の場合にのみ生成されます
-有限数学のみ 指定されています。
fsqrtd
単項平方根演算。
fcosd, フシンド, フタンド, ファタンド, fexpd, フロッグド
倍精度の三角関数と指数関数。 これらの指示は
次の場合にのみ生成されます -funsafe-数学の最適化 も指定されています。
変換:
fextsd
単精度から倍精度への変換。
ftruncds
倍精度から単精度への変換。
フィックス, フィックス, 修正, 固定
浮動小数点から符号付きまたは符号なし整数型への変換。
ゼロへの切り捨て。
円形
単精度浮動小数点から符号付き整数への変換、四捨五入
最も近い整数であり、ゼロから離れています。 これはに対応します
「__builtin_lroundf」関数の場合 -fno-math-errno 使用されている。
浮き輪, フロータス, 浮動小数点数, 浮き輪
符号付きまたは符号なし整数型から浮動小数点型への変換。
さらに、内部レジスタXおよびYの以下のすべての転送命令
倍精度浮動小数点命令のいずれかを使用するには、提供する必要があります。
XNUMXつの倍精度ソースオペランドを使用するカスタム命令は、最初のオペランドを期待します
64ビットレジスタXのオペランド。もう一方のオペランド(または単項のオペランドのみ)
操作)は、最下位のカスタム算術命令に与えられます
ソースレジスタの半分 src1 そして最も重要な半分は src2。 カスタム
倍精度の結果を返す命令は、最上位の32を返します。
デスティネーションレジスタのビットと32ビットレジスタYの残りの半分。GCC
レジスタXの書き込みおよび/または読み取りに必要なコードシーケンスを自動的に生成します
倍精度浮動小数点命令を使用する場合はレジスタY。
fwrx
書きます src1 Xの最下位半分に src2 最も重要なものに
Xの半分。
ぐるぐる
書きます src1 Yに。
フレキシ, フロドクスロ
Xの最も重要な半分または最も重要でない半分を読み取り、 dest.
フレディ
Yの値を読み取り、に格納します dest.
NiosIIカスタムの生成をよりローカルに制御できることに注意してください
「target(」custom-を使用した命令insn = N ")" および"target(" no-custom-insn ")"
関数属性またはプラグマ。
-mcustom-fpu-cfg =名
このオプションは、事前定義された名前付きのカスタム命令エンコーディングのセットを有効にします(を参照)。
-mcustom-旅館 その上)。 現在、次のセットが定義されています。
-mcustom-fpu-cfg = 60-1 以下と同等です。 -mcustom-fmuls = 252 -mcustom-fadds = 253
-mcustom-fsubs = 254 -fs単精度定数
-mcustom-fpu-cfg = 60-2 以下と同等です。 -mcustom-fmuls = 252 -mcustom-fadds = 253
-mcustom-fsubs = 254 -mcustom-fdivs = 255 -fs単精度定数
-mcustom-fpu-cfg = 72-3 以下と同等です。 -mcustom-floatus = 243 -mcustom-fixsi = 244
-mcustom-floatis = 245 -mcustom-fcmpgts = 246 -mcustom-fcmples = 249 -mcustom-fcmpeqs = 250
-mcustom-fcmpnes = 251 -mcustom-fmuls = 252 -mcustom-fadds = 253 -mcustom-fsubs = 254
-mcustom-fdivs = 255 -fs単精度定数
個人によるカスタム命令の割り当て -mcustom-旅館= オプションのオーバーライド
によって与えられたもの -mcustom-fpu-cfg =、上のオプションの順序に関係なく
コマンドライン。
次の方法で、FPU構成の選択をよりローカルに制御できることに注意してください。
"target("custom-fpu-cfg=を使用する名前")" 関数属性またはプラグマ。
これらの追加 -m アルテラNiosIIELF(ベアメタル)ターゲットでは、次のオプションを使用できます。
-マル
HALBSPとリンクします。 これにより、GCCが提供するCランタイムスタートアップとのリンクが抑制されます
および終了コードであり、通常は -msys-crt0 = 指定します
HALBSPによって提供される代替スタートアップコードの場所。
-msmallc
Cライブラリの限定バージョンとリンクします。 -lsmallc、Newlibではなく。
-msys-crt0 =開始ファイル
開始ファイル リンク時に使用するstartfile(crt0)のファイル名です。 このオプション
と組み合わせた場合にのみ役立ちます -マル.
-msys-lib =システムライブラリ
システムライブラリ 低レベルのシステムコールを提供するライブラリのライブラリ名です
Cライブラリで必要です。たとえば、「読み取り」や「書き込み」などです。 このオプションは通常、
HALBSPが提供するライブラリとのリンク。
Nvidia PTX オプション
これらのオプションは、NvidiaPTX用に定義されています。
-m32
-m64
32ビットまたは64ビットABIのコードを生成します。
-mmainkernel
__mainカーネルのコードをリンクします。 これは、オフロードではなくスタンドアロン用です
実行。
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
使用するハードウェア乗算サポートのタイプを指定します。 デフォルトは
なし、ソフトウェア乗算関数を使用します。 The g13 オプションは
ハードウェアは、RL78/G13ターゲットでのみペリフェラルを乗算/除算します。 The rl78 オプションがある
RL78ソフトウェアマニュアルで定義されている標準のハードウェア乗算用。
-m64ビットダブル
-m32ビットダブル
「double」データ型を64ビット(-m64ビットダブル)または32ビット(-m32ビットダブル)
サイズで。 デフォルトは -m32ビットダブル.
IBM RS / 6000 と PowerPC オプション
ボーマン -m オプションは、IBM RS/6000および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の構成時に決定されます。
の指定 -mcpu =cpu_type これらのオプションの指定を上書きします。 私達
を使用することをお勧めします -mcpu =cpu_type 上記のオプションではなく、オプション。
指定 -mpowerpc-gpopt GCCがオプションのPowerPCアーキテクチャを使用できるようにします
浮動小数点平方根を含む、汎用グループの命令。
指定 -mpowerpc-gfxopt 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.
-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,
e5500, e6500, ec603e, G3, G4, G5, タイタン, power3, power4, power5, power5 +, power6,
パワー6x, power7, power8, powerpc, パワーPC64, powerpc64le, rs64.
-mcpu = powerpc, -mcpu = powerpc64, -mcpu = powerpc64le 純粋な32ビットPowerPCを指定する
(いずれかのエンディアン)、64ビットのビッグエンディアンPowerPCおよび64ビットのリトルエンディアンPowerPC
適切な汎用プロセッサモデルを想定したアーキテクチャマシンタイプ
スケジューリングの目的。
他のオプションは、特定のプロセッサを指定します。 それらのオプションの下で生成されたコード
そのプロセッサで最適に動作し、他のプロセッサではまったく動作しない場合があります。
この -mcpu オプションは、次のオプションを自動的に有効または無効にします。
-マルティベック -mfprnd -mhard-float -mmfcrf -複数 -mpopcntb -mpopcntd -mpowerpc64
-mpowerpc-gpopt -mpowerpc-gfxopt -msingle-float -mdouble-float -msimple-fpu -mstring
-mmulhw -mdlmzb -mmfpgpr -mvsx -mcrypto -mdirect-移動 -mpower8-フュージョン
-mpower8-ベクトル -mquad-メモリ -mquad-メモリ-アトミック
特定のCPUに設定される特定のオプションは、コンパイラのバージョンによって異なります。
どの設定がそのCPUに最適なコードを生成すると思われるかに応じて。 それはしません
必然的に実際のハードウェアの機能を反映します。 設定したい場合
特定の値に対する個別のオプション。 -mcpu オプション、
ような -mcpu = 970 -mno-altivec.
AIXでは、 -マルティベック と -mpowerpc64 オプションは、によって有効化または無効化されません -mcpu
AIXはこれらのオプションを完全にはサポートしていないため、現在のところオプションです。 してもいいです
それがあなたのでうまくいくと確信しているなら、それでもそれらを個別に有効または無効にします
環境。
-mtune =cpu_type
マシンタイプの命令スケジューリングパラメータを設定します cpu_type、ただし設定しない
アーキテクチャタイプまたはレジスタの使用法、 -mcpu =cpu_type します。 の同じ値
cpu_type に使用されます -ムチューン はどうかと言うと -mcpu。 両方が指定されている場合、生成されたコード
によって設定されたアーキテクチャとレジスタを使用します -mcpu、ただし、によって設定されたスケジューリングパラメータ
-ムチューン.
-mcmodel = small
小型モデル用のPowerPC64コードを生成します。目次は64kに制限されています。
-mcmodel = medium
中規模モデルのPowerPC64コードを生成します。目次およびその他の静的データがアップしている可能性があります
サイズは合計4Gになります。
-mcmodel = large
大型モデル用のPowerPC64コードを生成します。TOCのサイズは最大4Gです。 他の
データとコードは、64ビットのアドレス空間によってのみ制限されます。
-マルティベック
-mno-altivec
AltiVec命令を使用する(使用しない)コードを生成し、使用を有効にします
AltiVec命令セットへのより直接的なアクセスを可能にする組み込み関数の。
設定する必要がある場合もあります -mabi = altivec AltiVecABIで現在のABIを調整する
機能強化。
日時 -マルティベック ではなく、が使用されます -maltivec = le or -maltivec = be、要素の順序
「vec_splat」、「vec_extract」、「vec_insert」などのAltivec組み込み関数の一致
ターゲットのエンディアンに対応する配列要素の順序。 つまり、要素
ゼロは、ビッグエンディアンをターゲットにするときにベクトルレジスタの左端の要素を識別します
プラットフォーム、およびターゲットを設定するときにベクトルレジスタの右端の要素を識別します
リトルエンディアンプラットフォーム。
-maltivec = be
かどうかに関係なく、ビッグエンディアン要素の順序を使用してAltivec命令を生成します
ターゲットはビッグエンディアンまたはリトルエンディアンです。 これは、ビッグエンディアンをターゲットにする場合のデフォルトです
プラットフォームを提供します。
要素の順序は、次のようなAltivec組み込み関数の要素番号を解釈するために使用されます。
「vec_splat」、「vec_extract」、および「vec_insert」。 デフォルトでは、これらは配列要素に一致します
ターゲットのエンディアンに対応する順序。
-maltivec = le
かどうかに関係なく、リトルエンディアン要素の順序を使用してAltivec命令を生成します
ターゲットはビッグエンディアンまたはリトルエンディアンです。 これは、少しターゲットを設定する場合のデフォルトです-
エンディアンプラットフォーム。 ビッグエンディアンをターゲットにする場合、このオプションは現在無視されます
プラットフォームを提供します。
要素の順序は、次のようなAltivec組み込み関数の要素番号を解釈するために使用されます。
「vec_splat」、「vec_extract」、および「vec_insert」。 デフォルトでは、これらは配列要素に一致します
ターゲットのエンディアンに対応する順序。
-mvrsave
-mno-vrsave
AltiVecコードを生成するときにVRSAVE命令を生成します。
-mgen-cell-マイクロコード
セルマイクロコード命令を生成します。
-mwarn-cell-マイクロコード
Cellマイクロコード命令が発行されたときに警告します。 Cellマイクロコードの例
命令は可変シフトです。
-msecure-plt
を可能にするコードを生成する ld と ld.so 実行可能ファイルと共有ライブラリを構築するには
実行不可能な「.plt」セクションと「.got」セクション。 これは、PowerPC32ビットSYSVABIオプションです。
-mbss-plt
BSS「.plt」セクションを使用するコードを生成します。 ld.so 記入し、「。plt」が必要です
書き込み可能で実行可能な「.got」セクション。 これはPowerPC32ビットです
SYSVABIオプション。
-ミセル
-mno-isel
このスイッチは、ISEL命令の生成を有効または無効にします。
-ミセル=はい・いいえ
このスイッチは非推奨になりました。 使用する -ミセル と -mno-isel を代わりにお使いください。
-mspe
-mno-spe
このスイッチは、SPEsimd命令の生成を有効または無効にします。
-障害者
-mno-ペアリング
このスイッチは、PAIREDsimd命令の生成を有効または無効にします。
-mspe =はい・いいえ
このオプションは非推奨になりました。 使用する -mspe と -mno-spe を代わりにお使いください。
-mvsx
-mno-vsx
ベクトル/スカラー(VSX)命令を使用する(使用しない)コードを生成し、さらに
VSXへのより直接的なアクセスを可能にする組み込み関数の使用を有効にする
指図書。
-mcrypto
-mno-crypto
に直接アクセスできる組み込み関数の使用を有効(無効)にします。
PowerPCISAのバージョン2.07で追加された暗号化命令。
-mdirect-移動
-mno-direct-move
命令を使用する(使用しない)コードを生成して、
に追加された汎用レジスタとベクトル/スカラー(VSX)レジスタ
PowerPCISAのバージョン2.07。
-mpower8-フュージョン
-mno-power8-fusion
いくつかの整数演算を隣接させておく(保持しない)コードを生成して、
命令は、power8以降のプロセッサーで融合できます。
-mpower8-ベクトル
-mno-power8-vector
以前のベクトルおよびスカラー命令を使用する(使用しない)コードを生成します
PowerPCISAのバージョン2.07で追加されました。 組み込み関数の使用も有効にします
ベクトル命令へのより直接的なアクセスを可能にします。
-mquad-メモリ
-mno-クアッドメモリ
非アトミッククワッドワードメモリ命令を使用する(使用しない)コードを生成します。
この -mquad-メモリ オプションでは、64ビットモードを使用する必要があります。
-mquad-メモリ-アトミック
-mno-quad-memory-atomic
アトミッククワッドワードメモリ命令を使用する(使用しない)コードを生成します。 The
-mquad-メモリ-アトミック オプションでは、64ビットモードを使用する必要があります。
-mupper-regs-df
-mno-upper-regs-df
スカラー倍精度命令を使用する(使用しない)コードを生成します。
ベクトル/スカラー浮動小数点レジスタセット内の64個のレジスタすべてをターゲットにします。
PowerPCISAのバージョン2.06で追加されました。 -mupper-regs-df 次の場合、デフォルトでオンになります
のいずれかを使用します -mcpu = power7, -mcpu = power8または -mvsx オプション。
-マッパー-regs-sf
-mno-upper-regs-sf
スカラー単精度命令を使用する(使用しない)コードを生成します。
ベクトル/スカラー浮動小数点レジスタセット内の64個のレジスタすべてをターゲットにします。
PowerPCISAのバージョン2.07で追加されました。 -マッパー-regs-sf 次の場合、デフォルトでオンになります
いずれかを使用します -mcpu = power8 or -mpower8-ベクトル オプション。
-mupper-regs
-mno-upper-regs
64個すべてを対象とするスカラー命令を使用する(使用しない)コードを生成する
のモデルに応じて、ベクトル/スカラー浮動小数点レジスタセットのレジスタ
この機械。
Status -mno-upper-regs オプションを使用すると、両方がオフになります -マッパー-regs-sf と
-mupper-regs-df オプション。
-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はより遅くてより大きなコードを生成します
しかし、これは非常に少ない目次スペースを使用します。 このオプションは、
実行頻度の低いコードを含むファイル。
-maix64
-maix32
64ビットAIXABIと呼び出し規約を有効にします:64ビットポインター、64ビット「ロング」タイプ、および
それらをサポートするために必要なインフラストラクチャ。 指定する -maix64 含意する -mpowerpc64,
while -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を挿入しないでください。
パッド によると、空の発行スロットがあるディスパッチグループをNOPで埋めます。
スケジューラーのグループ化。
再グループ化_exact
NOPを挿入して、コストのかかる依存型insnを個別のグループに強制します。 正確に挿入
推定によると、新しいグループにinsnを強制するために必要な数のNOP
プロセッサのグループ化。
数
NOPを挿入して、コストのかかる依存型insnを個別のグループに強制します。 入れる 数
新しいグループにinsnを強制するNOP。
-mcall-sysv
System V.4および組み込みPowerPCシステムでは、呼び出し規約を使用してコードをコンパイルします。
System Vアプリケーションバイナリインターフェイス、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ロングダブル, エルフv1,
エルフv2.
-mabi = spe
SPEABI拡張機能を使用して現在のABIを拡張します。 これはデフォルトのABIを変更しません。
代わりに、SPEABI拡張機能を現在のABIに追加します。
-mabi = no-spe
現在のABIのBook-ESPEABI拡張機能を無効にします。
-mabi = ibmlongdouble
現在のABIを変更して、IBM拡張精度longdoubleを使用します。 これはPowerPCです
32ビットSYSVABIオプション。
-mabi = ieeelongdouble
現在のABIを変更して、IEEE拡張精度longdoubleを使用します。 これはPowerPCです
32ビットLinuxABIオプション。
-mabi = elfv1
ELFv1ABIを使用するように現在のABIを変更します。 これはビッグエンディアンのデフォルトのABIです
PowerPC64ビットLinux。 デフォルトのABIを上書きするには、特別なシステムサポートと
見事な方法で失敗する可能性があります。
-mabi = elfv2
ELFv2ABIを使用するように現在のABIを変更します。 これはほとんどのデフォルトのABIです-
エンディアンPowerPC64ビットLinux。 デフォルトのABIを上書きするには、特別なシステムが必要です
サポートし、見事な方法で失敗する可能性があります。
-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システムでは、ELFフラグヘッダーの「PPC_EMB」ビットを設定して、
それ イービ 拡張再配置が使用されます。
-めあび
-mno-eabi
System V.4および組み込みPowerPCシステムでは、組み込みに準拠していません(準拠していません)。
システムへの一連の変更であるアプリケーションバイナリインターフェイス(EABI)
V.4仕様。 選択 -めあび スタックが8バイトに整列されていることを意味します
境界では、関数「__eabi」が「main」から呼び出され、EABI環境をセットアップします。
と -msdata オプションは、「r2」と「r13」の両方を使用して、XNUMXつの別々の小さなデータを指すことができます
エリア。 選択 -mno-eabi スタックが16バイト境界に整列されていることを意味します。
EABI初期化関数は「メイン」から呼び出され、 -msdata オプションはのみを使用します
「r13」は、単一の小さなデータ領域を指します。 The -めあび 次の場合、オプションはデフォルトでオンになっています
のいずれかを使用して構成されたGCC powerpc *-*-eabi * オプション。
-msdata = eabi
System V.4および組み込みPowerPCシステムでは、初期化された小さな「const」をグローバルに配置し、
レジスタ「r2」が指す「.sdata2」セクションの静的データ。 小さく置く
「.sdata」セクションの初期化された非「const」グローバルおよび静的データ。
レジスタ「r13」が指す。 初期化されていない小さなグローバルデータと静的データを
「.sdata」セクションに隣接する「.sbss」セクション。 The -msdata = eabi オプション
と互換性がありません -m再配置可能 オプション。 ザ· -msdata = eabi オプションはまた設定します
-メンブ オプションを選択します。
-msdata = sysv
System V.4および組み込みPowerPCシステムでは、小さなグローバルデータと静的データを
レジスタ「r13」が指す「.sdata」セクション。 初期化されていない小さなものを置く
「.sdata」に隣接する「.sbss」セクションのグローバルデータと静的データ
セクション。 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つのターゲットアドレスは、呼び出し先とブランチを表します
小島。 ダーウィン/PPCリンカーは最初のアドレスを優先し、「blcallee」を生成します
PPCの「bl」命令が呼び出し先に直接到達した場合。 それ以外の場合、リンカー
ブランチアイランドを呼び出すために「blL42」を生成します。 ブランチアイランドはに追加されます
呼び出し元の関数の本体。 呼び出し先の完全な32ビットアドレスを計算し、
それにジャンプします。
Mach-O(Darwin)システムでは、このオプションはコンパイラーが
すべての直接呼び出し、およびダーウィンリンカーはそれを使用するか破棄するかを決定します。
将来、リンカーが次のように認識されている場合、GCCはすべてのlongcall仕様を無視する可能性があります
接着剤を生成します。
-mtls-マーカー
-mno-tls-マーカー
関数を指定する再配置で「__tls_get_addr」への呼び出しをマーク(マークしない)
口論。 再配置により、リンカは関数呼び出しを確実に関連付けることができます
TLS最適化のための引数設定手順。これにより、GCCの改善が可能になります。
シーケンスをスケジュールします。
-pthread
マルチスレッドのサポートを追加します pthread 図書館。 このオプションは、フラグを設定します
プリプロセッサとリンカの両方。
-mレシピ
-mno-レシピ
このオプションを使用すると、逆数推定と逆数平方根推定を使用できます。
代わりに精度を上げるための追加のニュートンラプソンステップを伴う命令
除算または平方根を実行し、浮動小数点引数に対して除算します。 あなたは使用する必要があります
-ffast-数学 使用時のオプション -mレシピ (または少なくとも -funsafe-数学の最適化,
-有限数学のみ, -freciprocal-数学 と -fno-トラップ-数学)。 に注意してください
シーケンスのスループットは、通常、非シーケンスのスループットよりも高くなります。
相互命令の場合、シーケンスの精度は最大2ulp低下する可能性があります
(つまり、1.0の逆数は0.99999994に等しい)逆数平方根の場合。
-mrecip =オプト
このオプションは、使用できる相互推定命令を制御します。 オプト
オプションのコンマ区切りリスト。前に「!」を付けることができます。 オプションを反転するには:
を すべての見積もり手順を有効にします。
デフォルト
と同等のデフォルトの命令を有効にします -mレシピ.
なし
と同等のすべての見積もり手順を無効にします -mno-レシピ.
div要素 シングルとダブルの両方で逆近似命令を有効にします
精度。
ディフ
単精度逆数近似命令を有効にします。
分割
倍精度逆数近似命令を有効にします。
rsqrt
単一および両方の逆数平方根近似命令を有効にします
倍精度。
rqrtf
単精度逆数平方根近似命令を有効にします。
rqrtd
倍精度逆数平方根近似命令を有効にします。
たとえば、 -mrecip = all、!rsqrtd すべての相互推定を有効にします
「FRSQRTE」、「XSRSQRTEDP」、および「XVRSQRTEDP」命令を除く命令
倍精度の逆数平方根計算を処理します。
-mrecip-精度
-mno-recipe-precision
相互推定命令がより高いものを提供すると仮定します(仮定しないでください)-
PowerPCABIで義務付けられているよりも正確な見積もり。 選択 -mcpu = power6,
-mcpu = power7 or -mcpu = power8 自動的に選択 -mrecip-精度。 ダブル-
低精度の平方根推定命令は、デフォルトでは生成されません。
精密機械、XNUMX回後に収束する推定値を提供しないため
手順。
-mveclibabi =type
外部ライブラリを使用して組み込み関数をベクトル化するために使用するABIタイプを指定します。
現在サポートされているタイプは 質量、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」、「tanhd2」、および
power4のコードを生成するときの「tanhf7」。 両方 -ftree-ベクトル化 と
-funsafe-数学の最適化 また、有効にする必要があります。 MASSライブラリは
リンク時に指定されます。
-mfriz
-mno-フリズ
「friz」命令を生成する(生成しない)場合 -funsafe-数学の最適化
オプションは、浮動小数点値の64ビット整数への丸めを最適化するために使用されます。
浮動小数点に戻ります。 「friz」命令は、次の場合に同じ値を返しません。
浮動小数点数が大きすぎて整数に収まりません。
-mpointers-to-nested-functions
-mno-ネストされた関数へのポインタ
静的チェーンレジスタ( "r11")をロードするコードを生成する(生成しない)場合
関数ポインターが存在するAIXおよび64ビットLinuxシステム上のポインターを介した呼び出し
関数アドレス、ロードされるTOC値を与える3ワード記述子を指します
レジスタ「r2」、およびレジスタ「r11」にロードされる静的チェーン値。 The
-mpointers-to-nested-functions デフォルトでオンになっています。 ポインタを介して呼び出すことはできません
ネストされた関数またはを使用する他の言語でコンパイルされた関数へのポインタ
使用する場合は静的チェーン -mno-ネストされた関数へのポインタ.
-msave-toc-間接
-mno-save-toc-indirect
TOC値を予約済みスタックの場所に保存するコードを生成(生成しない)
関数がAIXおよび64ビット上のポインターを介して呼び出す場合は、関数プロローグで
Linuxシステム。 TOC値がプロローグに保存されていない場合は、直前に保存されます
ポインタを介した呼び出し。 The -mno-save-toc-indirect オプションがデフォルトです。
-mcompat-align-parm
-mno-compat-align-parm
最大の配置で構造パラメーターを渡すためのコードを生成する(生成しない)
古いバージョンのGCCとの互換性のために64ビット。
古いバージョンのGCC(4.9.0より前)は、構造パラメーターを誤って整列しませんでした
その構造に128ビットを必要とするメンバーが含まれている場合の128ビット境界
アラインメント。 これは、GCCの最新バージョンで修正されています。 このオプションを使用できます
古いバージョンのでコンパイルされた関数と互換性のあるコードを生成する
GCC。
この -mno-compat-align-parm オプションがデフォルトです。
RX オプション
これらのコマンドラインオプションは、RXターゲットに対して定義されています。
-m64ビットダブル
-m32ビットダブル
「double」データ型を64ビット(-m64ビットダブル)または32ビット(-m32ビットダブル)
サイズで。 デフォルトは -m32ビットダブル. 注意 RX浮動小数点ハードウェアのみが機能します
32ビット値の場合、これがデフォルトが -m32ビットダブル.
-fpu
-ノフプ
有効にする(-fpu)または無効にします(-ノフプ)RX浮動小数点ハードウェアの使用。 The
デフォルトでは、RX600シリーズでは有効になっており、RX200シリーズでは無効になっています。
浮動小数点命令は、32ビット浮動小数点値に対してのみ生成されます。
ただし、FPUハードウェアは、 -m64ビットダブル オプションがある
中古。
注意 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
コマンドラインオプション。
-mno-warn-複数の高速割り込み
-mwarn-複数の高速割り込み
GCCが複数の高速割り込みを検出した場合に警告メッセージを発行しないようにします
ファイルをコンパイルするときのハンドラー。 デフォルトでは、余分なものごとに警告を発行します
RXはそのような割り込みをXNUMXつしかサポートしていないため、高速割り込みハンドラが見つかりました。
ご注意: 一般的な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 指定されている場合、
コンパイラは、XNUMX進浮動小数点ハードウェア命令を生成します。 これがデフォルトです
for -march = z9-ec 以上です。
-mlong-double-64
-mlong-double-128
これらのスイッチは、「ロングダブル」タイプのサイズを制御します。 64ビットのサイズは
「double」タイプと同等の「longdouble」タイプ。 これがデフォルトです。
-mbackchain
-mno-バックチェーン
呼び出し元のフレームのアドレスをバックチェーンポインタとしてに保存します(保存しません)。
呼び出し先のスタックフレーム。 次のようなツールを使用してデバッグできるようにするには、バックチェーンが必要になる場合があります。
DWARF2のコールフレーム情報を理解していません。 いつ -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, z196, zEC12, z13。 命令を使用してコードを生成する場合
z / Architectureで使用可能で、デフォルトは -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 =スタックサイズ
これらのオプションが提供されている場合、S/390バックエンドは
スタックサイズが次の場合にトラップをトリガーする関数プロローグ スタックガード 上記のバイト
スタックサイズ (S / 390のスタックは下向きになることに注意してください)。 の場合 スタックガード
オプションは省略されますコンパイルされたフレームサイズより2大きい最小の累乗
関数が選択されています。 これらのオプションは、スタックのデバッグを支援するために使用することを目的としています
オーバーフローの問題。 追加で発行されたコードは、わずかなオーバーヘッドと
したがって、パフォーマンスを向上させることなく、本番環境のようなシステムでも使用できます。
劣化。 与えられた値は2の正確な累乗でなければなりません スタックサイズ である必要があります
越える スタックガード 64kを超えずに。 効率的にするために余分な
コードは、スタックが値に揃えられたアドレスから始まると想定します
によって与えられた スタックサイズを選択します。 スタックガード オプションは、と組み合わせてのみ使用できます
スタックサイズ.
-mhotpatch =プレハーフワード,ポストハーフワード
ホットパッチオプションが有効になっている場合、「ホットパッチ」関数プロローグが生成されます。
コンパイル単位のすべての関数。 機能ラベルには、指定されたものが付加されます
XNUMXバイトのNOP命令の数(プレハーフワード、最大1000000)。 後に
ラベル、2 * ポストハーフワード 命令のような最大のNOPを使用して、バイトが追加されます
アーキテクチャで許可されています(最大1000000)。
両方の引数がゼロの場合、ホットパッチは無効になります。
このオプションは、「hotpatch」属性を持つ個々の関数に対してオーバーライドできます。
スコア オプション
これらのオプションは、スコアの実装に対して定義されています。
-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のコードを生成します。
-m4-100
SH4-100のコードを生成します。
-m4-100-nofpu
浮動小数点ユニットを使用しないようにSH4-100のコードを生成してください。
-m4-100-シングル
浮動小数点ユニットが単精度モードであると仮定して、SH4-100のコードを生成します
デフォルトでは
-m4-100-シングルのみ
倍精度浮動小数点がないようにSH4-100のコードを生成します
操作が使用されます。
-m4-200
SH4-200のコードを生成します。
-m4-200-nofpu
浮動小数点ユニットがないような方法でSH4-200のコードを生成する
中古。
-m4-200-シングル
浮動小数点ユニットが単精度モードであると仮定して、SH4-200のコードを生成します
デフォルトでは
-m4-200-シングルのみ
倍精度浮動小数点がないようにSH4-200のコードを生成します
操作が使用されます。
-m4-300
SH4-300のコードを生成します。
-m4-300-nofpu
浮動小数点ユニットがないような方法でSH4-300のコードを生成する
中古。
-m4-300-シングル
倍精度浮動小数点がないようにSH4-300のコードを生成します
操作が使用されます。
-m4-300-シングルのみ
倍精度浮動小数点がないようにSH4-300のコードを生成します
操作が使用されます。
-m4-340
SH4-340のコードを生成します(MMUなし、FPUなし)。
-m4-500
SH4-500(FPUなし)のコードを生成します。 パス -isa = sh4-nofpu アセンブラに。
-m4a-nofpu
SH4al-dspまたはSH4aのコードを、浮動小数点が次のように生成します。
単位は使用しません。
-m4a-シングルのみ
倍精度浮動小数点がないように、SH4aのコードを生成します
操作が使用されます。
-m4a-シングル
浮動小数点ユニットが単精度であると仮定して、SH4aのコードを生成します
デフォルトではモード。
-m4a
SH4aのコードを生成します。
-m4al
と同じ -m4a-nofpu、暗黙的に通過することを除いて -dsp アセンブラに。 GCC
現在、DSP命令は生成されません。
-m5-32メディア
SHmedia用の32ビットコードを生成します。
-m5-32メディア-nofpu
浮動小数点ユニットがないように、SHmediaの32ビットコードを生成します
中古。
-m5-64メディア
SHmedia用の64ビットコードを生成します。
-m5-64メディア-nofpu
浮動小数点ユニットがないように、SHmediaの64ビットコードを生成します
中古。
-m5-コンパクト
SHcompactのコードを生成します。
-m5-コンパクト-nofpu
浮動小数点ユニットが使用されないように、SHcompactのコードを生成します。
-mb ビッグエンディアンモードでプロセッサのコードをコンパイルします。
-ml リトルエンディアンモードでプロセッサのコードをコンパイルします。
-mdalign
ダブルスを64ビット境界に揃えます。 これにより、呼び出し規約が変更されることに注意してください。
したがって、標準Cライブラリの一部の関数は、再コンパイルしない限り機能しません。
それは最初に -mdalign.
-mリラックス
可能であれば、リンク時に一部のアドレス参照を短くします。 リンカーオプションを使用します
-リラックス.
-mbigtable
「スイッチ」テーブルでは32ビットオフセットを使用します。 デフォルトでは、16ビットオフセットを使用します。
-mbitops
SH2Aでビット操作命令の使用を有効にします。
-mfmovd
命令「fmovd」の使用を有効にします。 小切手 -mdalign アラインメント制約用。
-ムレネサス
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と互換性がありません。
-matomic-model =
アトミック操作のモデルと追加のパラメーターをコンマ区切りで設定します
リスト。 アトミック組み込み関数の詳細については、を参照してください。 __アトミック ビルトインを選択します。
次のモデルとパラメータがサポートされています。
なし
コンパイラが生成したアトミックシーケンスを無効にし、アトミックのライブラリ呼び出しを発行します
オペレーション。 ターゲットが「sh*-*-linux*」でない場合、これがデフォルトです。
ソフトグサ
アトミックビルド用のGNU/Linux互換gUSAソフトウェアアトミックシーケンスを生成します-
関数で。 生成されたアトミックシーケンスには、
システムの割り込み/例外処理コードであり、SH3*および
SH4*シングルコアシステム。 このオプションは、ターゲットが
「sh*-*-linux*」およびSH3*またはSH4*。 ターゲットがSH4Aの場合、このオプションも
ハードウェアアトミック命令「movli.l」および「movco.l」を部分的に利用して
ない限り、より効率的なコードを作成する 厳格な 指定されています。
ソフトtcb
スレッドコントロールで変数を使用するソフトウェアアトミックシーケンスを生成します
ブロック。 これは、SH1*でも使用できるgUSAシーケンスのバリエーションです。
およびSH2*ターゲット。 生成されたアトミックシーケンスには、
システムの割り込み/例外処理コードであり、
シングルコアシステム。 このモデルを使用する場合、 gbr-offset = パラメータはである必要があります
同様に指定されます。
ソフトimask
設定することにより、割り込みを一時的に無効にするソフトウェアアトミックシーケンスを生成します
「SR.IMASK=1111」。 このモデルは、プログラムが特権モードで実行されている場合にのみ機能します
シングルコアシステムにのみ適しています。 からの追加サポート
システムの割り込み/例外処理コードは必要ありません。 このモデルは
ターゲットが「sh*-*-linux*」およびSH1*またはSH2*の場合、デフォルトで有効になります。
ハードLLC
「movli.l」および「movco.l」命令を使用してハードウェアアトミックシーケンスを生成します
それだけ。 これはSH4Aでのみ使用可能であり、マルチコアシステムに適しています。
ハードウェア命令は32ビットのアトミック変数のみをサポートしているため、8へのアクセス
または、16ビット変数は32ビットアクセスでエミュレートされます。 これでコンパイルされたコード
オプションは、他のソフトウェアアトミックモデルの割り込み/例外とも互換性があります
SH4Aシステムで実行された場合のシステムの処理。 からの追加サポート
このモデルでは、システムの割り込み/例外処理コードは必要ありません。
gbr-offset =
このパラメーターは、スレッド制御の変数のオフセットをバイト単位で指定します
生成されたアトミックシーケンスで使用されるブロック構造
ソフトtcb モデルが選択されました。 他のモデルの場合、このパラメーターは無視されます。
指定する値は、0の整数倍で、1020〜XNUMXの範囲である必要があります。
厳格な
このパラメーターは、複数の原子モデルが混在している場合でも、それらが混在することを防ぎます。
互換性があり、コンパイラに指定されたアトミックシーケンスを生成させます
モデルのみ。
-mtas
「__atomic_test_and_set」の「tas.b」オペコードを生成します。 に応じて注意してください
特定のハードウェアおよびソフトウェア構成これにより、全体的なパフォーマンスが低下する可能性があります
「tas.b」命令によって暗示されるオペランドキャッシュラインフラッシュが原因です。 の上
マルチコアSH4Aプロセッサの「tas.b」命令は注意して使用する必要があります。
特定のキャッシュ構成でデータが破損する可能性があります。
-mprefergot
位置に依存しないコードを生成する場合は、グローバルオフセットを使用して関数呼び出しを発行します
プロシージャリンケージテーブルの代わりにテーブル。
-musermode
-mno-ユーザーモード
コンパイラが特権モードコードを生成することを許可(許可)しないでください。 指定する
-musermode また意味します -mno-inline-ic_invalidate インライン化されたコードが機能しない場合
ユーザーモードで。 -musermode ターゲットが「sh*-*-linux*」の場合のデフォルトです。 の場合
ターゲットはSH1*またはSH2*です -musermode ユーザーモードがないため、効果はありません。
-マルチコスト=数
乗算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の場合、デフォルトの戦略は「divs」と「divu」を使用することです。
ライブラリ関数呼び出しの代わりに命令。
-maccumulate-発信引数
関数プロローグの周りではなく、発信引数用にXNUMX回スペースを予約します
各呼び出し。 一般的に、パフォーマンスとサイズにメリットがあります。 巻き戻しにも必要
条件付きコードの周りのスタックフレームを変更しないようにするため。
-mdivsi3_libfunc =名
32ビット符号付き除算に使用されるライブラリ関数の名前をに設定します 名。 この
で使用される名前にのみ影響します コール と inv:call 除算戦略、および
コンパイラーは、これと同じ入力/出力/クローバーされたレジスターのセットを引き続き期待します。
オプションがありませんでした。
-mfixed-range =レジスタ範囲
指定されたレジスタ範囲を固定レジスタとして扱うコードを生成します。 固定レジスタ
レジスタアロケータが使用できないものです。 これは、カーネルをコンパイルするときに役立ちます
コード。 レジスタ範囲は、ダッシュで区切られたXNUMXつのレジスタとして指定されます。 多数
レジスタ範囲は、コンマで区切って指定できます。
-mindexed-addressing
SHmedia32/SHcompactのインデックス付きアドレッシングモードの使用を有効にします。 これだけです
ハードウェアやOSがインデックス付きの32ビットラップアラウンドセマンティクスを実装している場合は安全です
アドレッシングモード。 このアーキテクチャにより、64ビットのプロセッサを実装できます
MMU。OSが32ビットアドレス指定を取得するために使用できますが、現在のハードウェアがないため
実装は、インデックス付きアドレッシングモードを安全にするためのこの方法またはその他の方法をサポートします
32ビットABIで使用する場合、デフォルトは -mno-indexed-addressing.
-mgettrcost =数
「gettr」命令に想定されるコストを次のように設定します 数。 デフォルトは2です。
-mpt-修正済み 有効です。それ以外の場合は100です。
-mpt-修正済み
「pt*」命令はトラップされないと想定します。 これにより、通常、より適切にスケジュールされたコードが生成されます。
ただし、現在のハードウェアでは安全ではありません。 現在のアーキテクチャ定義では、
「ptabs」と「ptrel」は、ターゲットが3である場合にトラップします。これには、
これらの指示を前にスケジュールすることを危険にさらすことの意図しない影響
分岐するか、ループからそれらを持ち上げます。 たとえば、「__ do_global_ctors」、の一部
libgcc プログラムの起動時にコンストラクターを実行し、リスト内の関数を呼び出します。
-1で区切られます。 とともに -mpt-修正済み オプションの場合、「ptabs」はテスト前に実行されます
-1に対して。 つまり、すべてのコンストラクターが少し速く実行されますが、
ループがリストの最後に来ると、「ptabs」が-1をロードするため、プログラムがクラッシュします。
ターゲットレジスタ。
このオプションは、現在のアーキテクチャを実装しているハードウェアにとって安全ではないため
仕様、デフォルトは -mno-pt-修正済み。 明示的に指定されていない限り
-mgettrcost, -mno-pt-修正済み また意味します -mgettrcost = 100; これは登録を阻止します
通常の整数を格納するためのターゲットレジスタの使用による割り当て。
-minvalid-シンボル
シンボルが無効である可能性があると想定します。 コンパイラによって生成される通常の関数シンボル
「movi」/「shori」/「ptabs」または「movi」/「shori」/「ptrel」でロードするのは常に有効ですが、
アセンブラやリンカのトリックを使用すると、原因となるシンボルを生成することができます
トラップする「ptabs」または「ptrel」。 このオプションは、次の場合にのみ意味があります -mno-pt-修正済み である
効果。 クロスベーシックブロックCSE、巻き上げ、およびシンボルのほとんどのスケジューリングを防止します
負荷。 デフォルトは -mno-無効なシンボル.
-mbranch-cost =NUM
想定する NUM 分岐命令のコストになります。 数値が大きいほどコンパイラは作成されます
可能であれば、より多くのブランチフリーコードを生成してみてください。 指定されていない場合、値は
コンパイル対象のプロセッサタイプに応じて選択されます。
-mzdcbranch
-mno-zdcbranch
ゼロ変位条件分岐命令が「bt」であると仮定します(仮定しないでください)。
「bf」は高速です。 もしも -mzdcbranch が指定されている場合、コンパイラは変位ゼロを優先します
ブランチコードシーケンス。 これは、SH4およびのコードを生成するときにデフォルトで有効になっています。
SH4A。 指定することで明示的に無効にすることができます -mno-zdcbranch.
-mcbranch-強制遅延-スロット
条件付きブランチの遅延スロットの使用を強制します。これにより、遅延スロットがいっぱいになります。
適切な命令が見つからない場合は、「nop」を使用します。 デフォルトでは、このオプションは
無効。 オリジナルに見られるようなハードウェアのバグを回避するために有効にすることができます
SH7055。
-混乱-狂った
-mno-fusion-madd
浮動小数点の積和を使用する(使用しない)コードを生成する
指示。 これらの命令は、ハードウェア浮動小数点の場合、デフォルトで生成されます
使用されている。 マシンに依存 -混乱-狂った オプションがマシンにマップされるようになりました-
独立しました -ffp-contract = fast オプション、および -mno-fusion-madd にマッピングされています
-ffp-contract = off.
-mfsca
-mno-fsca
コンパイラがサインおよびコサインの「fsca」命令を発行することを許可または禁止します
近似。 オプション -mfsca と組み合わせて使用する必要があります
-funsafe-数学の最適化。 SH4Aのコードを生成するときに、デフォルトで有効になっています。
使い方 -mno-fsca 次の場合でも、正弦および余弦近似を無効にします
-funsafe-数学の最適化 有効です。
-mfsrra
-mno-fsrra
コンパイラが逆数二乗の「fsrra」命令を発行することを許可または禁止します
ルート近似。 オプション -mfsrra と組み合わせて使用する必要があります
-funsafe-数学の最適化 と -有限数学のみ。 デフォルトで有効になっている場合
SH4Aのコードを生成します。 使用する -mno-fsrra 逆数平方根を無効にします
たとえ -funsafe-数学の最適化 と -有限数学のみ である
効果。
-mpreend-cmove
条件付き移動命令には、ゼロ変位条件付き分岐を優先します
パターン。 これにより、SH4プロセッサのコードが高速になる可能性があります。
ソラリス 2 オプション
ボーマン -m オプションはSolaris2でサポートされています:
-mclear-hwcap
-mclear-hwcap によって生成されたハードウェア機能を削除するようにコンパイラに指示します
Solarisアセンブラ。 これは、オブジェクトファイルがISA拡張機能を使用していない場合にのみ必要です。
現在のマシンでサポートされていますが、実行時にそれらを使用するかどうかを確認してください。
-mimpure-テキスト
-mimpure-テキスト、に加えて使用 -共有、コンパイラに渡さないように指示します -z 클라우드 기반 AI/ML및 고성능 컴퓨팅을 통한 디지털 트윈의 기초 – Edward Hsu, Rescale CPO 많은 엔지니어링 중심 기업에게 클라우드는 R&D디지털 전환의 첫 단계일 뿐입니다. 클라우드 자원을 활용해 엔지니어링 팀의 제약을 해결하는 단계를 넘어, 시뮬레이션 운영을 통합하고 최적화하며, 궁극적으로는 모델 기반의 협업과 의사 결정을 지원하여 신제품을 결정할 때 데이터 기반 엔지니어링을 적용하고자 합니다. Rescale은 이러한 혁신을 돕기 위해 컴퓨팅 추천 엔진, 통합 데이터 패브릭, 메타데이터 관리 등을 개발하고 있습니다. 이번 자리를 빌려 비즈니스 경쟁력 제고를 위한 디지털 트윈 및 디지털 스레드 전략 개발 방법에 대한 인사이트를 나누고자 합니다. 〜へ
共有オブジェクトをリンクするときのリンカ。 このオプションを使用すると、位置をリンクできます-
共有オブジェクトへの依存コード。
-mimpure-テキスト 「再配置は割り当て可能であるが書き込み可能ではないままである」を抑制します
セクション」リンカーエラーメッセージ。ただし、必要な再配置により、コピーオンがトリガーされます。
書き込み、および共有オブジェクトは実際にはプロセス間で共有されません。 それ以外の
-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は、割り当て可能なレジスターとして扱われます。
関数呼び出し。 これがデフォルトです。
パフォーマンスの低下を犠牲にしてSVR4ABIに完全に準拠するには、次のように指定します。
-mno-app-regs。 このオプションを使用して、ライブラリとシステムソフトウェアをコンパイルする必要があります。
-mフラット
-mno-フラット
連絡先 -mフラット、コンパイラは保存/復元命令を生成せず、
「フラット」またはシングルレジスタウィンドウモデル。 このモデルは通常のモデルと互換性があります
レジスタウィンドウモデル。 ローカルレジスタと入力レジスタ(0〜5)はまだ残っています
「呼び出し保存」レジスタとして扱われ、必要に応じてスタックに保存されます。
連絡先 -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-ユーザーモード
スーパーバイザーモードでのみ実行できるコードを生成しないでください。 これはにのみ関連します
LEON3プロセッサに対して発行される「casa」命令。 これがデフォルトです。
-mno-faster-structs
-mfaster-構造体
連絡先 -mfaster-構造体、コンパイラは、構造体が8バイトであると想定します
アラインメント。 これにより、コピーに「ldd」と「std」の命令のペアを使用できるようになります
構造体の割り当てでは、「ld」と「st」のペアのXNUMX倍の代わりに。 しかし
この変更された配置を使用すると、SPARCABIに直接違反します。 したがって、それは意図されています
結果のコードが
ABIの規則に直接一致していません。
-mcpu =cpu_type
の命令セット、レジスタセット、および命令スケジューリングパラメータを設定します
マシンタイプ cpu_type。 サポートされている値 cpu_type v7, サイプレス, v8, スーパースパーク,
ハイパースパーク, レオン, leon3, レオン3v7, スパクライト, f930, f934, スパクライト86x, スパクレット,
tsc701, v9, ウルトラスパーク, ウルトラスパーク3, ナイアガラ, ナイアガラ2, ナイアガラ3 と ナイアガラ4.
ネイティブSolarisおよびGNU/Linuxツールチェーンも値をサポートします ネイティブ、を選択します
ホストプロセッサに最適なアーキテクチャオプション。 -mcpu = native 次の場合は効果がありません
GCCはプロセッサを認識しません。
デフォルトの命令スケジューリングパラメータは、
アーキテクチャであり、実装ではありません。 これらは v7, v8, スパクライト, スパクレット, v9.
サポートされている各アーキテクチャとサポートされている実装のリストを次に示します。
v7ヒノキ、leon3v7
v8 supersparc、hypersparc、leon、leon3
スパクライト
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実装を選択する値です。 それらは
サイプレス, スーパースパーク, ハイパースパーク, レオン, leon3, レオン3v7, 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.
-mcbcond
-mno-cbcond
連絡先 -mcbcond、GCCは、比較と分岐を利用するコードを生成します
SparcArchitecture2011で定義されている命令。デフォルトは -mcbcond いつ
niagara-4以降などのそのような命令をサポートするCPUをターゲットにします。
-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に対応します)。
-mfix-ut699
浮動小数点エラッタとデータキャッシュの文書化された回避策を有効にする
UT699プロセッサのエラッタを無効にします。
ボーマン -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の完了を開始またはテストする命令は、次のコマンドで並べ替えることはできません。
アクセスされているメモリのロードとストアに関して。 と -ムンセーフ-dma
メモリアクセスを保護するには「volatile」キーワードを使用する必要がありますが、これにより、
メモリが変更されないことがわかっている場所での非効率的なコード。 マークするのではなく
揮発性としてのメモリ、あなたは使用することができます -msafe-dma DMAを処理するようにコンパイラに指示します
すべてのメモリに影響を与える可能性のある命令。
-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 より少ないnopsを挿入します。 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でサポートされています。
-mcmodel = small
小さなモデルのコードを生成します。 直通電話の距離は500Mに制限されています
どちらの方向にも。 PC相対アドレスは32ビットです。 絶対アドレスのサポート
完全なアドレス範囲。
-mcmodel = large
ラージモデルのコードを生成します。 通話距離に制限はありません、pc-
相対アドレス、または絶対アドレス。
-mcpu =名
対象となるCPUの種類を選択します。 現在サポートされているタイプは タイルグックス.
-m32
-m64
32ビットまたは64ビット環境用のコードを生成します。 32ビット環境はintを設定します。
long、および32ビットへのポインタ。 64ビット環境では、intが32ビットおよびlongに設定されます。
64ビットへのポインタ。
-mbig-エンディアン
-mlittle-エンディアン
それぞれビッグ/リトルエンディアンモードでコードを生成します。
タイルプロ オプション
ボーマン -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であることを指定します。
-mv850e3v5
ターゲット・プロセッサーがV850E3V5であることを指定します。 プリプロセッサ定数
このオプションを使用すると、「__v850e3v5__」が定義されます。
-mv850e2v4
ターゲット・プロセッサーがV850E3V5であることを指定します。 これはのエイリアスです
-mv850e3v5 オプションを選択します。
-mv850e2v3
ターゲット・プロセッサーがV850E2V3であることを指定します。 プリプロセッサ定数
このオプションを使用すると、「__v850e2v3__」が定義されます。
-mv850e2
ターゲット・プロセッサーがV850E2であることを指定します。 プリプロセッサ定数
このオプションを使用すると、「__v850e2__」が定義されます。
-mv850e1
ターゲット・プロセッサーがV850E1であることを指定します。 プリプロセッサ定数
このオプションを使用すると、「__v850e1__」と「__v850e__」が定義されます。
-mv850es
ターゲット・プロセッサーがV850ESであることを指定します。 これはのエイリアスです -mv850e1
オプションを選択します。
-mv850e
ターゲット・プロセッサーがV850Eであることを指定します。 プリプロセッサ定数「__v850e__」
このオプションが使用される場合に定義されます。
どちらでもない場合 -mv850 また -mv850e また -mv850e1 また -mv850e2 また -mv850e2v3 また -mv850e3v5
が定義されたら、デフォルトのターゲットプロセッサが選択され、関連する __v850 * __
プリプロセッサ定数が定義されています。
プリプロセッサ定数「__v850」および「__v851__」は、関係なく常に定義されます
どのプロセッサバリアントがターゲットです。
-mdisable-callt
-mno-disable-callt
このオプションは、v850e、v850e1の「CALLT」命令の生成を抑制します。
v850アーキテクチャのv2e850、v2e3v850、およびv3e5v850フレーバー。
このオプションは、RH850 ABIが使用されている場合、デフォルトで有効になっています(を参照)。 -mrh850-abi)、及び
GCC ABIが使用されている場合、デフォルトでは無効になっています。 「CALLT」命令が実行されている場合
生成された後、Cプリプロセッサシンボル「__V850_CALLT__」が定義されます。
-mリラックス
-mno-リラックス
渡す(または渡さない) -mリラックス アセンブラへのコマンドラインオプション。
-mlong-ジャンプ
-mno-ロングジャンプ
PC相対ジャンプ命令の生成を無効(または再度有効)にします。
-msoft-float
-mhard-float
ハードウェア浮動小数点命令の生成を無効(または再度有効)にします。 これ
オプションは、ターゲットアーキテクチャが V850E2V3 以上。 もしも
ハードウェア浮動小数点命令が生成されてから、Cプリプロセッサ
シンボル「__FPU_OK__」が定義されています。それ以外の場合は、シンボル「__NO_FPU__」が定義されています。
-ムループ
e3v5LOOP命令の使用を有効にします。 この命令の使用はそうではありません
e3v5アーキテクチャが選択されている場合、その使用はまだ有効であるため、デフォルトで有効になっています
実験的。
-mrh850-abi
-ムグッ
V850ABIのRH850バージョンのサポートを有効にします。 これがデフォルトです。 と
このバージョンのABIには、次のルールが適用されます。
*整数サイズの構造体と共用体は、ではなくメモリポインタを介して返されます
レジスター。
*大きな構造体と共用体(サイズが8バイトを超える)は値で渡されます。
*関数は16ビット境界に揃えられています。
* -m8byte-align コマンドラインオプションがサポートされています。
* -mdisable-callt コマンドラインオプションはデフォルトで有効になっています。 The
-mno-disable-callt コマンドラインオプションはサポートされていません。
このバージョンのABIが有効になっている場合、Cプリプロセッサシンボル「__V850_RH850_ABI__」
が定義される。
-mgcc-アビ
V850ABIの古いGCCバージョンのサポートを有効にします。 このバージョンのABIでは
次の規則が適用されます。
*整数サイズの構造体と共用体がレジスタ"r10"に返されます。
*大きな構造体と共用体(サイズが8バイトを超える)は参照によって渡されます。
*サイズを最適化しない限り、関数は32ビット境界に揃えられます。
* -m8byte-align コマンドラインオプションはサポートされていません。
* -mdisable-callt コマンドラインオプションはサポートされていますが、デフォルトでは有効になっていません。
このバージョンのABIが有効になっている場合、Cプリプロセッサシンボル「__V850_GCC_ABI__」
が定義される。
-m8byte-align
-mno-8byte-align
「double」および「longlong」タイプのサポートを8バイト境界に揃えることができます。
デフォルトでは、すべてのオブジェクトの配置を最大4バイトに制限します。 いつ
-m8byte-align 事実上、Cプリプロセッサシンボル「__V850_8BYTE_ALIGN__」は
定義された。
-mbig スイッチ
大きなスイッチテーブルに適したコードを生成します。 このオプションは、
アセンブラ/リンカは、スイッチテーブル内の範囲外の分岐について文句を言います。
-map-regs
このオプションにより、コンパイラーによって生成されたコードでr2とr5が使用されます。 これ
設定がデフォルトです。
-mno-app-regs
このオプションにより、r2とr5は固定レジスタとして扱われます。
VAX オプション
ボーマン -m オプションはVAXに対して定義されています。
-munix
Unixアセンブラが実行する特定のジャンプ命令(「aobleq」など)を出力しないでください
VAXは長距離を処理できません。
-mgnu
GNUアセンブラが
中古。
-mg D形式ではなくG形式の浮動小数点数の出力コード。
ビジウム オプション
-mdebug
ファイルI/Oを実行し、MCMターゲットで実行するように設定されているプログラムは次のようになります。
このオプションにリンクされています。 これにより、ライブラリlibc.aとlibdebug.aがリンクされます。
プログラムは、GDBリモートデバッグの制御下でターゲット上で実行する必要があります
スタブ。
-msim
ファイルI/Oを実行し、シミュレータで実行する予定のプログラムは、次のようになります。
オプションにリンクされています。 これにより、ライブラリlibc.aとlibsim.aがリンクされます。
-mfpu
-mhard-float
浮動小数点命令を含むコードを生成します。 これがデフォルトです。
-mno-fpu
-msoft-float
浮動小数点のライブラリ呼び出しを含むコードを生成します。
-msoft-float 出力ファイルの呼び出し規約を変更します。 したがって、それは
コンパイルする場合に便利です を このオプションを使用したプログラムの特に、あなたはする必要があります
コンパイル libgcc.a、GCCに付属するライブラリ -msoft-float このために
動作するように。
-mcpu =cpu_type
の命令セット、レジスタセット、および命令スケジューリングパラメータを設定します
マシンタイプ cpu_type。 サポートされている値 cpu_type MCM, gr5 と gr6.
MCM の同義語です gr5 下位互換性のために存在します。
デフォルトでは(特に設定されていない限り)、GCCは次のGR5バリアントのコードを生成します。
Visiumアーキテクチャ。
連絡先 -mcpu = gr6、GCCは、VisiumアーキテクチャのGR6バリアントのコードを生成します。
GR5コードとの唯一の違いは、コンパイラがブロック移動を生成することです。
指示に従ってください。
-mtune =cpu_type
マシンタイプの命令スケジューリングパラメータを設定します cpu_type、ただし設定しない
オプションの命令セットまたはレジスタセット -mcpu =cpu_type 。
-msv モード
アクセスに制限がないスーパーバイザーモードのコードを生成します
一般的なレジスタに。 これがデフォルトです。
-ミューザーモード
ユーザーモードのコードを生成します。ここで、いくつかの一般的なレジスタへのアクセスは次のとおりです。
禁止:GR5では、このモードではレジスタr24〜r31にアクセスできません。 に
GR6、レジスタr29からr31のみが影響を受けます。
VMS オプション
ボーマン -m オプションは、VMS実装に対して定義されています。
-mvms-リターンコード
「メイン」からVMS条件コードを返します。 デフォルトでは、POSIXスタイルの条件を返します
(例:エラー)コード。
-mdebug-main =接頭辞
名前がで始まる最初のルーチンにフラグを立てます 接頭辞 のメインルーチンとして
デバッガ。
-mmalloc64
デフォルトは64ビットのメモリ割り当てルーチンです。
-mpointer-size =サイズ
ポインタのデフォルトサイズを設定します。 可能なオプション サイズ 32 or 短い 32ビット用
ポインタ、 64 or 長い 64ビットポインタの場合、および いいえ 32ビットポインタのみをサポートします。
後者のオプションは「pragmapointer_size」を無効にします。
VxWorks オプション
このセクションのオプションは、すべてのVxWorksターゲットに対して定義されています。 に固有のオプション
ターゲットハードウェアは、そのターゲットの他のオプションとともに一覧表示されます。
-mrtp
GCCは、VxWorksカーネルとリアルタイムプロセス(RTP)の両方のコードを生成できます。 これ
オプションは前者から後者に切り替わります。 また、プリプロセッサマクロも定義します
「__RTP__」。
-非静的
静的ライブラリではなく共有ライブラリに対してRTP実行可能ファイルをリンクします。 The
オプション -静的 と -共有 RTPにも使用できます。 -静的 デフォルトです。
-Bスタティック
-バダイナミック
これらのオプションはリンカーに渡されます。 それらはとの互換性のために定義されています
ディアブ。
-Xbind-lazy
関数呼び出しの遅延バインディングを有効にします。 このオプションは、 -Wl、-z、now とです。
Diabとの互換性のために定義されています。
-Xbind-今
関数呼び出しの遅延バインディングを無効にします。 このオプションはデフォルトであり、
Diabとの互換性。
x86 オプション
ボーマン -m オプションは、x86ファミリのコンピュータ用に定義されています。
-XNUMX月=CPUタイプ
マシンタイプの命令を生成する CPUタイプ。 とは対照的に -mtune =CPUタイプ,
これは、生成されたコードを指定されたものに合わせて調整するだけです。 CPUタイプ, -XNUMX月=CPUタイプ
GCCが、XNUMXつ以外のプロセッサではまったく実行されない可能性のあるコードを生成できるようにします
示されています。 指定する -XNUMX月=CPUタイプ 含意する -mtune =CPUタイプ.
の選択肢 CPUタイプ には次の値があります:
ネイティブ
これにより、コンパイル時にコードを生成するCPUが選択され、
コンパイルマシンのプロセッサタイプ。 使用する -march=ネイティブ すべてを有効にします
ローカルマシンでサポートされている命令サブセット(したがって、結果が実行されない可能性があります
別のマシンで)。 使用する -mtune = native ローカル用に最適化されたコードを生成します
選択した命令セットの制約下にあるマシン。
i386
オリジナルのInteli386CPU。
i486
Inteli486CPU。 (このチップにはスケジューリングは実装されていません。)
i586
ペンティアム
MMXをサポートしていないIntelPentiumCPU。
ペンティアム-mmx
Intel Pentium MMX CPU、MMX命令セットをサポートするPentiumコアに基づいています。
ペンティアムプロ
IntelPentiumProCPU。
i686
と一緒に使用する場合 -行進、Pentium Pro命令セットが使用されているため、コードは実行されます
すべてのi686ファミリーチップ。 一緒に使用する場合 -ムチューン、それはと同じ意味を持っています
ジェネリック.
ペンティアム2
Intel Pentium II CPU、MMX命令セットをサポートするPentiumProコアに基づいています。
ペンティアム3
ペンティアム3m
Intel Pentium III CPU、MMXおよびSSE命令セットを備えたPentiumProコアに基づく
サポート。
ペンティアム-m
Intel Pentium M; MMX、SSE、SSE2を搭載したIntel PentiumIIICPUの低電力バージョン
命令セットのサポート。 Centrinoノートブックで使用されます。
ペンティアム4
ペンティアム4m
MMX、SSE、およびSSE4命令セットをサポートするIntel Pentium2CPU。
プレスコット
MMX、SSE、SSE4、およびSSE2命令を備えたIntel Pentium3CPUの改良版
サポートを設定します。
ノコナ
4ビット拡張機能、MMX、SSE、SSE64、および
SSE3命令セットのサポート。
core2
2ビット拡張機能を備えたIntelCore64 CPU、MMX、SSE、SSE2、SSE3、SSSE3
命令セットのサポート。
ネハレム
64ビット拡張機能を備えたIntelNehalemCPU、MMX、SSE、SSE2、SSE3、SSSE3、SSE4.1、
SSE4.2およびPOPCNT命令セットのサポート。
ウェストメア
64ビット拡張機能を備えたIntelWestmereCPU、MMX、SSE、SSE2、SSE3、SSSE3、SSE4.1、
SSE4.2、POPCNT、AES、およびPCLMUL命令セットのサポート。
サンディブリッジ
64ビット拡張機能を備えたIntelSandyBridge CPU、MMX、SSE、SSE2、SSE3、SSSE3、
SSE4.1、SSE4.2、POPCNT、AVX、AES、およびPCLMUL命令セットのサポート。
アイビーブリッジ
64ビット拡張機能を備えたIntelIvyBridge CPU、MMX、SSE、SSE2、SSE3、SSSE3、SSE4.1、
SSE4.2、POPCNT、AVX、AES、PCLMUL、FSGSBASE、RDRND、およびF16C命令セット
サポート。
ハスウェル
64ビット拡張機能を備えたIntelHaswellCPU、MOVBE、MMX、SSE、SSE2、SSE3、SSSE3、
SSE4.1、SSE4.2、POPCNT、AVX、AVX2、AES、PCLMUL、FSGSBASE、RDRND、FMA、BMI、BMI2
およびF16C命令セットのサポート。
Broadwell
64ビット拡張機能を備えたIntelBroadwellCPU、MOVBE、MMX、SSE、SSE2、SSE3、SSSE3、
SSE4.1、SSE4.2、POPCNT、AVX、AVX2、AES、PCLMUL、FSGSBASE、RDRND、FMA、BMI、BMI2、
F16C、RDSEED、ADCX、およびPREFETCHW命令セットのサポート。
ボンネル
64ビット拡張機能を備えたIntelBonnellCPU、MOVBE、MMX、SSE、SSE2、SSE3、SSSE3
命令セットのサポート。
シルバーモント
64ビット拡張機能を備えたIntelSilvermontCPU、MOVBE、MMX、SSE、SSE2、SSE3、SSSE3、
SSE4.1、SSE4.2、POPCNT、AES、PCLMUL、およびRDRND命令セットのサポート。
KNL 64ビット拡張機能を備えたIntelKnightのランディングCPU、MOVBE、MMX、SSE、SSE2、SSE3、
SSSE3、SSE4.1、SSE4.2、POPCNT、AVX、AVX2、AES、PCLMUL、FSGSBASE、RDRND、FMA、BMI、
BMI2、F16C、RDSEED、ADCX、PREFETCHW、AVX512F、AVX512PF、AVX512ER、およびAVX512CD
命令セットのサポート。
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命令セットをサポートするAMDK64コアに基づくプロセッサ。
AMD Opteron、Athlon 64、およびAthlon64FXプロセッサ。 (これはMMXをスーパーセットします。
SSE、SSE2、3DNow!、拡張3DNow! および64ビット命令セット拡張。)
k8-sse3
オプテロン-sse3
athlon64-sse3
SSE8命令セットをサポートするAMDK3コアの改良版。
アムファム10
バルセロナ
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、FMA4、AVX、XOP、LWP、AES、PCL_MUL、CX16、MMX、SSE、
SSE2、SSE3、SSE4A、SSSE3、SSE4.1、SSE4.2、ABMおよび64ビット命令セット
拡張機能。)
BDver3
x15-86命令セットをサポートするAMDファミリー64hコアベースのCPU。 (これ
スーパーセットBMI、TBM、F16C、FMA、FMA4、FSGSBASE、AVX、XOP、LWP、AES、PCL_MUL、CX16、
MMX、SSE、SSE2、SSE3、SSE4A、SSSE3、SSE4.1、SSE4.2、ABMおよび64ビット命令セット
拡張機能
BDver4
x15-86命令セットをサポートするAMDファミリー64hコアベースのCPU。 (これ
スーパーセットBMI、BMI2、TBM、F16C、FMA、FMA4、FSGSBASE、AVX、AVX2、XOP、LWP、AES、
PCL_MUL、CX16、MOVBE、MMX、SSE、SSE2、SSE3、SSE4A、SSSE3、SSE4.1、SSE4.2、ABMおよび
64ビット命令セット拡張。
btver1
x14-86命令セットをサポートするAMDファミリー64hコアに基づくCPU。 (これ
スーパーセットMMX、SSE、SSE2、SSE3、SSSE3、SSE4A、CX16、ABMおよび64ビット命令セット
拡張機能。)
btver2
x16-86命令セットをサポートするAMDファミリー64hコアに基づくCPU。 これ
MOVBE、F16C、BMI、AVX、PCL_MUL、AES、SSE4.2、SSE4.1、CX16、ABM、SSE4A、
SSSE3、SSE3、SSE2、SSE、MMX、および64ビット命令セット拡張。
ウィンチップ-C6
IDT WinChip C6 CPU、追加のMMX命令セットを使用してi486と同じように処理されます
サポート。
ウィンチップ2
IDT WinChip 2 CPU、追加のMMXと486DNowを備えたi3と同じように処理されます!
命令セットのサポート。
c3 MMXおよび3DNowを搭載したVIAC3CPU! 命令セットのサポート。 (スケジュールはありません
このチップに実装されています。)
c3-2
VIA C3-2(Nehemiah / C5XL)CPU、MMXおよびSSE命令セットをサポート。 (いいえ
このチップにはスケジューリングが実装されています。)
ジオード
MMXおよび3DNowを搭載したAMDGeode組み込みプロセッサ! 命令セットのサポート。
-mtune =CPUタイプ
に調整する CPUタイプ ABIを除き、生成されたコードに該当するすべてのもの
および利用可能な命令のセット。 特定のものを選んでいる間 CPUタイプ スケジュール
その特定のチップに適切なもの、コンパイラはコードを生成しません
を使用しない限り、デフォルトのマシンタイプでは実行できません -XNUMX月=CPUタイプ オプションを選択します。
たとえば、GCCがi686-pc-linux-gnu用に構成されている場合、 -mtune = pentium4 生成
Pentium 4用に調整されているが、i686マシンで実行されるコード。
の選択肢 CPUタイプ と同じです -行進。 加えて、 -ムチューン 2をサポート
のための追加の選択肢 CPUタイプ:
ジェネリック
最も一般的なIA32/AMD64/EM64Tプロセッサ用に最適化されたコードを生成します。 もし、あんたが
コードが実行されるCPUを知っている場合は、対応するCPUを使用する必要があります
-ムチューン or -行進 オプションの代わりに -mtune = generic。 しかし、あなたが知らない場合
アプリケーションのCPUユーザーが正確に何を持っているか、そしてこれを使用する必要があります
オプションを選択します。
新しいプロセッサが市場に導入されると、このオプションの動作
変更されます。 したがって、新しいバージョンのGCCにアップグレードする場合は、コード生成
このオプションで制御されるのは、最も多いプロセッサを反映するように変更されます
GCCのバージョンがリリースされた時点で一般的です。
ない -march = generic オプションのため -行進 命令セットを示します
コンパイラは使用でき、すべてに適用できる汎用命令セットはありません
プロセッサ。 対照的に、 -ムチューン プロセッサを示します(または、この場合は、
コードが最適化されているプロセッサのコレクション)。
インテル
Haswellである最新のIntelプロセッサ用に最適化されたコードを生成する
このバージョンのGCCの場合はSilvermont。 コードがインストールされているCPUがわかっている場合
が実行されたら、対応するを使用する必要があります -ムチューン or -行進 オプションの代わりに
-mtune = intel。 ただし、アプリケーションのパフォーマンスを両方のHaswellで向上させたい場合
およびSilvermontの場合は、このオプションを使用する必要があります。
新しいIntelプロセッサが市場に導入されると、この動作は
オプションが変更されます。 したがって、新しいバージョンのGCCにアップグレードする場合は、次のようにコーディングしてください。
このオプションで制御される世代は、最新のIntelを反映するように変更されます
GCCのバージョンがリリースされた時点のプロセッサ。
ない -march = intel オプションのため -行進 命令セットを示します
コンパイラは使用でき、すべてに適用できる共通の命令セットはありません
プロセッサ。 対照的に、 -ムチューン プロセッサを示します(または、この場合は、
コードが最適化されているプロセッサのコレクション)。
-mcpu =CPUタイプ
非推奨の同義語 -ムチューン.
-mfpmath =単位
選択したユニットの浮動小数点演算を生成します 単位。 の選択肢 単位 には次の値があります:
387 大部分のチップに存在する標準の387浮動小数点コプロセッサを使用します
それ以外の場合はエミュレートします。 このオプションでコンパイルされたコードは、ほとんどすべての場所で実行されます。
一時的な結果は、精度ではなく80ビットの精度で計算されます
タイプによって指定され、ほとんどの場合と比較してわずかに異なる結果になります
他のチップ。 見る -フロートストア 詳細については。
これは、x86-32ターゲットのデフォルトの選択です。
SSE SSE命令セットに存在するスカラー浮動小数点命令を使用します。 これ
命令セットは、Pentium III以降のチップ、およびAMDラインでサポートされています
Athlon-4、Athlon XP、AthlonMPチップによる。 SSEの以前のバージョン
命令セットは単精度演算のみをサポートしているため、doubleと
拡張精度演算は引き続き387を使用して実行されます。新しいバージョンが存在します
Pentium4およびAMDx86-64チップでのみ、倍精度演算もサポートします。
x86-32コンパイラの場合、次を使用する必要があります -XNUMX月=CPUタイプ, -mse or -msse2 に切り替える
SSE拡張機能を有効にして、このオプションを有効にします。 x86-64コンパイラの場合、
これらの拡張機能はデフォルトで有効になっています。
結果のコードは、ほとんどの場合、かなり高速になるはずです。
387コードの数値的不安定性の問題を回避しますが、既存のコードを壊す可能性があります
一時的なものが80ビットであることを期待するコード。
これは、x86-64コンパイラのデフォルトの選択です。
sse、387
sse + 387
両言語で
両方の命令セットを同時に利用してみてください。 これにより、効果的にXNUMX倍になります
使用可能なレジスタの量、および387の個別の実行ユニットを備えたチップ
実行リソースもSSEします。 このオプションはまだ使用されているため、注意して使用してください
GCCレジスタアロケータは個別にモデル化されないため、実験的
機能ユニットが良好であるため、パフォーマンスが不安定になります。
-masm =方言
選択したものを使用してアセンブリ命令を出力する 方言。 どの方言にも影響します
基本的な「asm」と拡張された「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.これらの命令が生成されないようにするには、このオプションを指定します。 このオプションは
OpenBSDおよびNetBSDのデフォルト。 このオプションは、次の場合に上書きされます -行進 を示す
ターゲットCPUには常にFPUがあるため、命令はエミュレーションを必要としません。
これらの命令は、あなたも使用しない限り生成されません
-funsafe-数学の最適化 スイッチ。
-悪性-ダブル
-mno-align-double
GCCが「double」、「long double」、および「longlong」変数を整列するかどうかを制御します。
XNUMXワードの境界またはXNUMXワードの境界。 「double」変数をXNUMXワードに揃える
境界は、Pentium上でいくらか高速に実行されるコードを生成しますが、より多くの費用がかかります
メモリ。
x86-64では、 -悪性-ダブル デフォルトで有効になっています。
警告: あなたが使用する場合 -悪性-ダブル スイッチ、上記のタイプを含む構造
公開されているアプリケーションのバイナリインターフェイス仕様とは異なる方法で配置されます
x86-32の場合、コードなしでコンパイルされたコードの構造とバイナリ互換ではありません
そのスイッチ。
-m96bit-long-double
-m128bit-long-double
これらのスイッチは、「ロングダブル」タイプのサイズを制御します。 x86-32アプリケーションバイナリ
インターフェイスはサイズを96ビットに指定しているため、 -m96bit-long-double のデフォルトです
32ビットモード。
現代のアーキテクチャ(Pentium以降)は、「ロングダブル」を8に揃えることを好みます。
または16バイト境界。 ABIに準拠するアレイまたは構造では、これはそうではありません
可能。 したがって、指定する -m128bit-long-double 「longdouble」を16バイトに揃えます
「longdouble」に追加の32ビットゼロをパディングすることによる境界。
x86-64コンパイラでは、 -m128bit-long-double ABIとしてのデフォルトの選択です
「longdouble」が16バイト境界に整列されることを指定します。
これらのオプションはどちらも、x87標準を超える精度を実現していないことに注意してください。
「ロングダブル」の場合は80ビット。
警告: ターゲットABIのデフォルト値を上書きすると、サイズが変更されます
「longdouble」変数を含む構造体と配列の
「longdouble」を取る関数の関数呼び出し規約。 したがって、彼らはそうではありません
そのスイッチなしでコンパイルされたコードとバイナリ互換。
-mlong-double-64
-mlong-double-80
-mlong-double-128
これらのスイッチは、「ロングダブル」タイプのサイズを制御します。 64ビットのサイズは
「double」タイプと同等の「longdouble」タイプ。 これは32ビットのデフォルトです
バイオニックCライブラリ。 128ビットのサイズは、「longdouble」タイプを
「__float128」タイプ。 これは、64ビットのBionicCライブラリのデフォルトです。
警告: ターゲットABIのデフォルト値を上書きすると、サイズが変更されます
「longdouble」変数を含む構造体と配列の
「longdouble」を取る関数の関数呼び出し規約。 したがって、彼らはそうではありません
そのスイッチなしでコンパイルされたコードとバイナリ互換。
-malign-data =type
GCCが変数を整列する方法を制御します。 サポートされている値 type 互換性 使用量の増加
互換性のあるアライメント値はGCC4.8以前を使用します。 ABI アライメント値を次のように使用します
psABIによって指定され、および キャッシュライン 増加したアライメント値を使用して、
キャッシュラインサイズ。 互換性 デフォルトです。
-mlarge-data-threshold =しきい値
日時 -mcmodel = medium が指定されている場合、データオブジェクトが しきい値 に配置されます
大きなデータセクション。 この値は、にリンクされているすべてのオブジェクトで同じである必要があります
バイナリで、デフォルトは65535です。
-mrtd
別の関数呼び出し規約を使用します。この規則では、固定の関数を使用します
引数の数は「ret」で返されます num」 引数をポップする命令
帰りながら。 これにより、呼び出し元にXNUMXつの命令を保存する必要がないため、
そこに引数をポップします。
この呼び出しシーケンスで個々の関数が呼び出されるように指定できます。
関数属性「stdcall」。 オーバーライドすることもできます -mrtd オプションを使用して
関数属性「cdecl」。
警告: この呼び出し規約は、Unixで通常使用される規約と互換性がありません。
したがって、Unixコンパイラでコンパイルされたライブラリを呼び出す必要がある場合は使用できません。
また、変数を取るすべての関数の関数プロトタイプを提供する必要があります
引数の数(「printf」を含む)。 そうしないと、誤ったコードが生成されます
それらの関数の呼び出し。
さらに、関数の数が多すぎると、コードが大幅に不正確になります。
引数。 (通常、余分な引数は無害に無視されます。)
-mregparm =NUM
整数引数を渡すために使用されるレジスタの数を制御します。 デフォルトでは、
レジスタは引数を渡すために使用され、最大3つのレジスタを使用できます。 あなたはできる
関数属性を使用して、特定の関数のこの動作を制御します
「regparm」。
警告: このスイッチを使用する場合、および NUM がゼロ以外の場合、すべてのモジュールをビルドする必要があります
ライブラリを含め、同じ値で。 これには、システムライブラリと
スタートアップモジュール。
-msseregparm
float引数とdouble引数、および戻り値には、SSEレジスタの受け渡し規則を使用してください。
関数属性を使用して、特定の関数のこの動作を制御できます
「sseregparm」。
警告: このスイッチを使用する場合は、同じ値ですべてのモジュールをビルドする必要があります。
ライブラリを含みます。 これには、システムライブラリとスタートアップモジュールが含まれます。
-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
エントリでスタックを再調整します。 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バイト境界まで。 x86-64 ABIには16バイトのスタックアライメントが必要なため、これはABIです。
互換性がなく、スタックスペースが
重要な制限。 このオプションは、関数が16でコンパイルされたときに間違ったコードにつながります
バイトスタックアラインメント(標準ライブラリの関数など)は、次のコマンドで呼び出されます。
スタックの位置がずれています。 この場合、SSE命令はメモリアクセスの不整合につながる可能性があります
トラップ。 さらに、可変引数は16バイト整列で正しく処理されません
オブジェクト(x87 long doubleおよび__int128を含む)。誤った結果につながります。 絶対です
ですべてのモジュールを構築する -mpreferred-stack-boundary = 3、任意のライブラリを含みます。 これ
システムライブラリとスタートアップモジュールが含まれます。
-mincoming-stack-boundary =NUM
入ってくるスタックが2に揃えられていると仮定します NUM バイト境界。 もしも
-mincoming-スタック境界 指定されていない、によって指定されたもの
-mpreferred-スタック境界 使用されている。
PentiumおよびPentiumProでは、「double」および「longdouble」の値を次のように調整する必要があります。
8バイト境界(を参照) -悪性-ダブル)または実行時のパフォーマンスが大幅に低下する
ペナルティ。 Pentium IIIでは、ストリーミングSIMD拡張命令(SSE)データ型「__m128」が
16バイトにアラインされていない場合は正しく機能しません。
スタック上でこの値を適切に配置するには、スタックの境界を次のようにする必要があります。
スタックに格納されている値に必要な位置に配置されます。 さらに、すべての機能
スタックの整列を維持するように生成する必要があります。 したがって、関数を呼び出す
低い方でコンパイルされた関数から、より高い優先スタック境界でコンパイルされた
優先スタック境界は、スタックの位置がずれている可能性があります。 をお勧めします
コールバックを使用するライブラリは、常にデフォルト設定を使用します。
この余分な配置は余分なスタックスペースを消費し、一般的にコードを増やします
サイズ。 組み込みシステムや
オペレーティングシステムカーネルは、優先アライメントをに減らしたい場合があります
-mpreferred-stack-boundary = 2.
-うーん
-mse
-msse2
-msse3
-mssse3
-msse4
-msse4a
-msse4.1
-msse4.2
-mavx
-mavx2
-mavx512f
-mavx512pf
-mavx512er
-mavx512cd
-ムシャ
-メイズ
-mpclmul
-mclfushopt
-mfsgsbase
-mrdrnd
-mf16c
-MFMA
-mfma4
-mno-fma4
-mprefetchwt1
-mxop
-mlwp
-m3dnow
-mpopcnt
-マブム
-mbmi
-mbmi2
-mlzcnt
-mfxsr
-mxsave
-mxsaveopt
-mxsavec
-mxsaves
-mrtm
-MTBM
-mmpx
-mmwaitx
これらのスイッチにより、MMX、SSE、SSE2、SSE3、SSSE3、
SSE4.1、AVX、AVX2、AVX512F、AVX512PF、AVX512ER、AVX512CD、SHA、AES、PCLMUL、FSGSBASE、
RDRND、F16C、FMA、SSE4A、FMA4、XOP、LWP、ABM、BMI、BMI2、FXSR、XSAVE、XSAVEOPT、LZCNT、
RTM、MPX、MWAITXまたは3DNow! 拡張命令セット。 それぞれに対応する -むの-
これらの命令の使用を無効にするオプション。
これらの拡張機能は、組み込み関数としても使用できます。を参照してください。 x86 内蔵 機能,
これらのスイッチによって有効および無効にされる機能の詳細については。
浮動小数点コードからSSE/SSE2命令を自動的に生成するには(
387の指示まで)、を参照してください -mfpmath = sse.
GCCは、次の場合にSSEx命令を抑制します -mavx 使用されている。 代わりに、新しいAVXを生成します
必要に応じて、すべてのSSEx命令に対する命令またはAVXの同等性。
これらのオプションにより、GCCは生成されたコードでこれらの拡張命令を使用できます。
無し -mfpmath = sse。 ランタイムCPU検出を実行するアプリケーションは、コンパイルする必要があります
適切なフラグを使用して、サポートされているアーキテクチャごとに個別のファイル。 の
特に、CPU検出コードを含むファイルは、
これらのオプション。
-mdump-tune-features
このオプションは、x86パフォーマンスチューニング機能の名前をダンプするようにGCCに指示します。
デフォルトの設定。 名前はで使用することができます -mtune-ctrl =機能リスト.
-mtune-ctrl =機能リスト
このオプションは、x86コード生成機能のきめ細かい制御を行うために使用されます。
機能リスト のコンマ区切りリストです 簡潔な 名前。 も参照してください
-mdump-tune-features。 指定すると、 簡潔な 先行していない場合はオンになります
^、それ以外の場合はオフになります。 -mtune-ctrl =機能リスト 使用することを目的としています
GCC開発者による。 これを使用すると、テストでカバーされていないコードパスが発生する可能性があります。
コンパイラICEまたはランタイムエラーが発生する可能性があります。
-mno-デフォルト
このオプションは、GCCにすべての調整可能な機能をオフにするように指示します。 も参照してください
-mtune-ctrl =機能リスト と -mdump-tune-features.
-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ビットのダブルクワッドワード(またはoword)データ型でのアトミック操作用。 これは
複数のプロセッサ(または
コア)。 この命令は、アトミック組み込み関数の一部として生成されます。を参照してください。
__同期 ビルトイン or __アトミック ビルトイン 詳細については。
-msahf
このオプションを使用すると、64ビットコードで「SAHF」命令を生成できます。 初期のIntel
Pentium4G64ステップの導入前のIntel4をサポートするPentium1CPU
2005年XNUMX月に、によってサポートされている「LAHF」と「SAHF」の指示が欠けていた
AMD64。 これらは、それぞれ特定のステータスフラグのロードおよびストア命令です。
64ビットモードでは、「SAHF」命令を使用して「fmod」、「drem」、および
「残りの」組み込み関数。 見る その他 ビルトイン 詳細については。
-mmovbe
このオプションを使用すると、「movbe」命令を使用して「__builtin_bswap32」を実装できます。
および「__builtin_bswap64」。
-mcrc32
このオプションは、組み込み関数「__builtin_ia32_crc32qi」を有効にします。
「__builtin_ia32_crc32hi」、「__ builtin_ia32_crc32si」、「__builtin_ia32_crc32di」から
「crc32」マシン命令を生成します。
-mレシピ
このオプションにより、「RCPSS」および「RSQRTSS」命令(およびそれらのベクトル化)の使用が可能になります
バリアント「RCPPS」および「RSQRTPS」)を追加してニュートンラプソンステップを追加
シングルの場合、「DIVSS」と「SQRTSS」(およびそれらのベクトル化されたバリアント)の代わりに精度
精度の浮動小数点引数。 これらの命令は、次の場合にのみ生成されます
-funsafe-数学の最適化 と一緒に有効になります -有限数学のみ と
-fno-トラップ-数学。 シーケンスのスループットは
非相互命令のスループット、シーケンスの精度は次のようになります。
最大2ulp減少します(つまり、1.0の逆数は0.99999994に等しくなります)。
GCCは「1.0f/sqrtf(バツ)" すでに「RSQRTSS」(または「RSQRTPS」)に関して
-ffast-数学 (または上記のオプションの組み合わせ)、および必要ありません -mレシピ.
また、GCCは、追加のニュートン-ラフソンステップを使用して上記のシーケンスを出力することに注意してください。
ベクトル化された単精度除算とベクトル化された"sqrtf(バツ)" すでに -ffast-数学
(または上記のオプションの組み合わせ)、および必要ありません -mレシピ.
-mrecip =オプト
このオプションは、使用できる相互推定命令を制御します。 オプト
オプションのコンマ区切りリスト。前に ! オプションを反転するには:
を すべての見積もり手順を有効にします。
デフォルト
と同等のデフォルトの命令を有効にします -mレシピ.
なし
と同等のすべての見積もり手順を無効にします -mno-レシピ.
div要素 スカラー除算の近似を有効にします。
vec-div
ベクトル化された除算の近似を有効にします。
平方根
スカラー平方根の近似を有効にします。
vec-sqrt
ベクトル化された平方根の近似を有効にします。
たとえば、 -mrecip = all、!sqrt すべての逆数近似を有効にし、
平方根を除いて。
-mveclibabi =type
外部ライブラリを使用して組み込み関数をベクトル化するために使用するABIタイプを指定します。
サポートされている値 type SVML Intelの短いベクトル数学ライブラリと aml
AMD数学コアライブラリ用。 このオプションを使用するには、両方 -ftree-ベクトル化 と
-funsafe-数学の最適化 有効にする必要があり、SVMLまたはACMLABIと互換性がある
ライブラリはリンク時に指定する必要があります。
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 is
使用済み、および "__vrd2_sin"、 "__ vrd2_cos"、 "__ vrd2_exp"、 "__ vrd2_log"、 "__ vrd2_log2"、
"__vrd2_log10"、 "__ vrs4_sinf"、 "__ vrs4_cosf"、 "__ vrs4_expf"、 "__ vrs4_logf"、
対応する関数型の「__vrs4_log2f」、「__ vrs4_log10f」、および「__vrs4_powf」
いつ -mveclibabi = acml 使用されている。
-mabi =名
指定された呼び出し規約のコードを生成します。 許容値は システム for
GNU / Linuxおよびその他のシステムで使用されるABI、および ms MicrosoftABIの場合。 The
デフォルトでは、MicrosoftWindowsおよびSysVABIを対象とする場合はMicrosoftABIを使用します
他のすべてのシステムで。 を使用して、特定の機能のこの動作を制御できます。
関数属性「ms_abi」および「sysv_abi」。
-mtls-dialect =type
を使用してスレッドローカルストレージにアクセスするためのコードを生成します ヌー or ヌー2 コンベンション。 ヌー
控えめなデフォルトです。 ヌー2 より効率的ですが、コンパイルと実行が追加される可能性があります
すべてのシステムで満たすことができない時間要件。
-mpush-args
-mno-push-args
PUSH操作を使用して、送信パラメーターを保管します。 この方法は短く、通常は
SUB / MOV操作を使用する方法と同じくらい高速で、デフォルトで有効になっています。 いくつかの
無効にすると、スケジューリングが改善され、パフォーマンスが低下する可能性があります。
依存関係。
-maccumulate-発信引数
有効にすると、発信引数に必要なスペースの最大量はで計算されます
関数プロローグ。 これは、ほとんどの最新のCPUでは、削減されているため高速です。
依存関係、スケジューリングの改善、および優先スタック時のスタック使用量の削減
境界は2に等しくありません。欠点は、コードサイズが著しく大きくなることです。 これ
スイッチは意味します -mno-push-args.
-ミリスレッド
MinGWでのスレッドセーフな例外処理をサポートします。 スレッドセーフに依存するプログラム
例外処理では、すべてのコードをコンパイルしてリンクする必要があります -ミリスレッド オプション。 いつ
コンパイル、 -ミリスレッド 定義 -D_MT; リンクするときは、特別なスレッドヘルパーでリンクします
ライブラリ -lmingwthrd これは、スレッドごとの例外処理データをクリーンアップします。
-mno-align-stringops
インライン文字列操作の宛先を揃えないでください。 このスイッチはコードを減らします
宛先がすでに調整されているが、GCCの場合は、サイズが大きくなり、パフォーマンスが向上します。
それについて知りません。
-minline-all-stringops
デフォルトでは、GCCは、宛先がであることがわかっている場合にのみ文字列操作をインライン化します。
少なくとも4バイトの境界に揃えられます。 これにより、より多くのインライン化が可能になり、コードが増加します
サイズですが、高速の「memcpy」、「strlen」、およびに依存するコードのパフォーマンスが向上する可能性があります
短い長さの場合は「memset」。
-minline-stringops-動的に
サイズが不明な文字列操作の場合は、小さい場合はインラインコードで実行時チェックを使用します
ブロックとライブラリは大きなブロックを必要とします。
-mstringop-strategy =ALG
使用する特定のアルゴリズムの内部決定ヒューリスティックをオーバーライドします
文字列演算のインライン化。 の許容値 ALG には次の値があります:
担当者バイト
rep_4byte
rep_8byte
指定されたサイズのi386「rep」プレフィックスを使用して展開します。
バイトループ
ループ
unrolled_loop
インラインループに展開します。
libcall
常にライブラリ呼び出しを使用してください。
-mmemcpy-strategy =戦略
内部決定ヒューリスティックをオーバーライドして、「__builtin_memcpy」を
インライン化され、コピー操作の予想サイズが発生したときに使用するインラインアルゴリズム
知られている。 戦略 のコンマ区切りのリストです ALG:最大サイズ:dest_align トリプレット。 ALG
で指定されています -mstringop-戦略, 最大サイズ 最大バイトサイズを指定します
インラインアルゴリズム ALG 許可されています。 最後のトリプレットについては、 最大サイズ 「-1」である必要があります。 The
最大サイズ リスト内のトリプレットのうち、昇順で指定する必要があります。 The
の最小バイトサイズ ALG 最初のトリプレットは0で、「最大サイズ + 1"
前の範囲。
-mmemset-strategy =戦略
オプションはに似ています -mmemcpy-strategy = それが制御することであることを除いて
「__builtin_memset」拡張。
-momit-リーフフレームポインター
リーフ関数のレジスタにフレームポインタを保持しないでください。 これにより、
フレームポインタを保存、設定、復元し、追加のレジスタを作成する手順
リーフ機能で利用できます。 オプション -fomit-葉-フレーム-ポインタ フレームを削除します
リーフ関数のポインタ。デバッグが難しくなる可能性があります。
-mtls-direct-seg-refs
-mno-tls-direct-seg-refs
TLSセグメントからのオフセットを使用してTLS変数にアクセスできるかどうかを制御します
レジスタ(32ビットの場合は%gs、64ビットの場合は%fs)、またはスレッドベースポインタが
追加した。 これが有効かどうかは、オペレーティングシステムとそれが有効かどうかによって異なります。
TLS領域全体をカバーするようにセグメントをマップします。
GNU Cライブラリを使用するシステムの場合、デフォルトはオンです。
-msse2avx
-mno-sse2avx
アセンブラがVEXプレフィックスを使用してSSE命令をエンコードする必要があることを指定します。 オプション
-mavx これはデフォルトでオンになっています。
- ミッフィー
-mno-フェントリ
プロファイリングがアクティブな場合(-pg)、プロファイリングカウンターコールをプロローグの前に置きます。
注:x86アーキテクチャーでは、属性「ms_hook_prologue」は
のための瞬間 - ミッフィー と -pg.
-mレコード-mcount
-mno-レコード-mcount
プロファイリングがアクティブな場合(-pg)、ポインタを含む__mcount_locセクションを生成します
各プロファイリング呼び出しに。 これは、コールに自動的にパッチを適用してアウトする場合に便利です。
-mnop-mcount
-mno-nop-mcount
プロファイリングがアクティブな場合(-pg)、プロファイリング関数への呼び出しをnopsとして生成します。
これは、後で動的にパッチを適用する必要がある場合に役立ちます。 これはおそらく
と一緒に便利 -mレコード-mcount.
-mskip-rax-セットアップ
-mno-skip-rax-setup
SSE拡張命令が無効になっているx86-64アーキテクチャのコードを生成する場合、
-skip-rax-セットアップ 変数がない場合にRAXレジスタの設定をスキップするために使用できます
ベクトルレジスタで渡される引数。
警告: RAXレジスタは、ベクトルレジスタを不必要に保存しないようにするために使用されるため
可変引数を渡すときにスタックする場合、このオプションの影響は呼び出し先が
スタックスペースを浪費したり、誤動作したり、ランダムな場所にジャンプしたりします。 GCC4.4以降
RAXレジスタの値に関係なく、これらの問題は発生しません。
-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アラインされていないロードとストアを分割します。
-mstack-protector-guard =ガード
でカナリアを使用してスタック保護コードを生成します ガード。 サポートされている場所は 全体的な
グローバルカナリアまたは TLS TLSブロックのスレッドごとのカナリアの場合(デフォルト)。 これ
オプションは次の場合にのみ有効です -fstack-プロテクター or -fstack-protector-all 指定されています。
ボーマン -m 上記に加えて、86ビットのx64-64プロセッサでスイッチがサポートされています
環境。
-m32
-m64
-mx32
-m16
16ビット、32ビット、または64ビット環境のコードを生成します。 The -m32 オプションセット「int」、
「長い」、32ビットへのポインタ型、および任意のi386システムで実行されるコードを生成します。
この -m64 オプションは「int」を32ビットに設定し、「long」とポインタ型を64ビットに設定します。
x86-64アーキテクチャのコードを生成します。 ダーウィンの場合のみ -m64 オプションも
をオフにします -fno-pic と -mdynamic-no-pic オプション。
この -mx32 オプションは、「int」、「long」、およびポインター型を32ビットに設定し、コードを生成します
x86-64アーキテクチャの場合。
この -m16 オプションはと同じです -m32、「。code16gcc」を出力することを除いて
バイナリを実行できるようにするためのアセンブリ出力の先頭にあるアセンブリディレクティブ
16ビットモードで。
-mno-レッドゾーン
x86-64コードにはいわゆる「レッドゾーン」を使用しないでください。 レッドゾーンは、
x86-64 ABI; スタックポインタの位置を超えた128バイトの領域であり、
シグナルハンドラまたは割り込みハンドラによって変更されるため、一時データに使用できます
スタックポインタを調整せずに。 旗 -mno-レッドゾーン このレッドゾーンを無効にします。
-mcmodel = small
スモールコードモデルのコードを生成する:プログラムとそのシンボルはでリンクされている必要があります
アドレス空間の下位2GB。 ポインタは64ビットです。 プログラムはすることができます
静的または動的にリンクされています。 これはデフォルトのコードモデルです。
-mcmodel = kernel
カーネルコードモデルのコードを生成します。 カーネルは、マイナス2GBで実行されます。
アドレス空間。 このモデルは、Linuxカーネルコードに使用する必要があります。
-mcmodel = medium
中型モデルのコードを生成します。プログラムは、
アドレス空間。 小さな記号もそこに配置されます。 サイズが大きいシンボル
-mlarge-data-threshold 大きなデータまたはBSSセクションに配置され、場所を特定できます
2GB以上。 プログラムは静的または動的にリンクできます。
-mcmodel = large
ラージモデルのコードを生成します。 このモデルは、住所についての仮定を行いません
とセクションのサイズ。
-maddress-mode = long
ロングアドレスモードのコードを生成します。 これは64ビットおよびx32でのみサポートされます
環境。 これは、64ビット環境のデフォルトのアドレスモードです。
-maddress-mode = short
ショートアドレスモードのコードを生成します。 これは、32ビットおよびx32でのみサポートされます
環境。 これは、32ビットおよびx32環境のデフォルトのアドレスモードです。
x86 Windows オプション
これらの追加オプションは、MicrosoftWindowsターゲットで使用できます。
-mconsole
このオプションは、指示することにより、コンソールアプリケーションを生成することを指定します
コンソールアプリケーションに必要なPEヘッダーサブシステムタイプを設定するリンカー。
このオプションはCygwinおよびMinGWターゲットで使用可能であり、デフォルトで有効になっています。
それらのターゲット。
-mdll
このオプションは、CygwinおよびMinGWターゲットで使用できます。 DLLを指定します---a
ダイナミックリンクライブラリ---生成され、必要なものを選択できるようになります
ランタイムスタートアップオブジェクトとエントリポイント。
-mnop-fun-dllimport
このオプションは、CygwinおよびMinGWターゲットで使用できます。 それは、
「dllimport」属性は無視する必要があります。
-mスレッド
このオプションは、MinGWターゲットで使用できます。 MinGW固有のスレッドを指定します
サポートが使用されます。
-ミュニコード
このオプションは、MinGW-w64ターゲットで使用できます。 「UNICODE」プリプロセッサが発生します
マクロを事前定義し、Unicode対応のランタイム起動コードを選択します。
-mwin32
このオプションは、CygwinおよびMinGWターゲットで使用できます。 それは典型的なことを指定します
Microsoft Windowsの事前定義されたマクロはプリプロセッサで設定されますが、設定されません
ランタイムライブラリ/スタートアップコードの選択に影響を与えます。
-mwindows
このオプションは、CygwinおよびMinGWターゲットで使用できます。 GUIを指定します
アプリケーションは、リンカにPEヘッダーを設定するように指示することによって生成されます
サブシステムタイプを適切に。
-fno-set-stack-executable
このオプションは、MinGWターゲットで使用できます。 の実行可能フラグを指定します
ネストされた関数で使用されるスタックが設定されていません。 これは、実行中のバイナリに必要です
Microsoft Windowsのカーネルモードでは、設定に使用されるUser32APIがあります
実行可能特権は使用できません。
-fwritable-relocated-rdata
このオプションは、MinGWおよびCygwinターゲットで使用できます。 それは再配置されたことを指定します-
読み取り専用セクションのデータは、.dataセクションに配置されます。 これは高齢者に必要です
疑似再配置のための.rdataセクションの変更をサポートしていないランタイム。
-mpe-aligned-commons
このオプションは、CygwinおよびMinGWターゲットで使用できます。 それはGNUが
COMMON変数の正しい配置を可能にするPEファイル形式の拡張
コードを生成するときに使用する必要があります。 GCCが次のことを検出すると、デフォルトで有効になります。
構成中に見つかったターゲットアセンブラーがこの機能をサポートします。
以下も参照してください x86 オプション 標準オプションの場合。
エクスストーミー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」のような命令。これは、アセンブラが拡張することによって常に整列します。
密度命令またはNOP命令を挿入することによって。
-mlongcalls
-mno-longcalls
このオプションを有効にすると、GCCはアセンブラに直接呼び出しを次のように変換するように指示します。
直接通話のターゲットが
呼び出し命令で許可される範囲。 この変換は通常、
他のソースファイルの関数。 具体的には、アセンブラは直接変換します
「CALL」命令を「L32R」に変換し、続いて「CALLX」命令を実行します。 デフォルトは
-mno-longcalls。 このオプションは、コールターゲットができるプログラムで使用する必要があります
範囲外の可能性があります。 このオプションは、アセンブラではなく、アセンブラに実装されています。
コンパイラであるため、GCCによって生成されたアセンブリコードは引き続き直接呼び出しを示します
命令---実際の命令を確認するには、分解されたオブジェクトコードを確認してください。
アセンブラは、ファイル間の呼び出しだけでなく、すべてのクロスファイル呼び出しに間接呼び出しを使用することに注意してください。
本当に範囲外のもの。
zシリーズ オプション
これらは以下にリストされています
オプション for Code 世代 表記
これらのマシンに依存しないオプションは、コードで使用されるインターフェイス規則を制御します
世代。
それらのほとんどには、正と負の両方の形式があります。 の負の形式 -ふふー is
-fno-foo。 以下の表には、フォームのXNUMXつだけがリストされています---フォームではないもの
ディフォルト。 あなたはどちらかを削除することによって他のフォームを理解することができます NO- またはそれを追加します。
-fbounds-チェック
それをサポートするフロントエンドの場合、追加のコードを生成して、インデックスが以前に使用されたことを確認します
アクセスアレイは宣言された範囲内にあります。 これは現在、
JavaおよびFortranフロントエンド。このオプションのデフォルトはtrueおよびfalseです。
。
-fstack-reuse =再利用レベル
このオプションは、ユーザーが宣言したローカル/自動変数のスタックスペースの再利用を制御します。
コンパイラが一時的に生成します。 再利用レベル することができます を, 名前付き変数または なし. を
すべてのローカル変数と一時変数のスタックの再利用を可能にします。 名前付き変数 その
名前を持つユーザー定義のローカル変数に対してのみ再利用し、 なし スタックの再利用を無効にします
完全に。 デフォルト値は を。 プログラムが拡張するときにオプションが必要です
スコープ付きローカル変数またはコンパイラが一時的に生成されたものの存続期間を超えて
言語によって定義されたエンドポイント。 変数の有効期間が終了したとき、および
変数はメモリ内に存在し、最適化コンパイラはスタックを再利用する自由があります
ライブ範囲がない他の一時変数またはスコープローカル変数とのスペース
それと重なる。 ローカルの存続期間を延長するレガシーコードは、
スタック再利用の最適化。
たとえば、
int * p;
{
int ローカル 1;
p =&local1;
ローカル1 = 10;
....
}
{
int ローカル 2;
ローカル2 = 20;
...
}
if(* p == 10)//local1のスコープ外使用
{
}
別の例:
構造体A
{
A(int k):i(k)、j(k){}
int i;
int j;
};
* ap;
void foo(const A&ar)
{
ap =&ar;
}
void bar()
{
foo(A(10)); // fooが戻ると、一時オブジェクトの有効期間が終了します
{
A a(20);
....
}
ap-> i + = 10; //apはスコープ外のtempを参照します
//で再利用されます。 ap-> iの値は何ですか?
}
コンパイラによって生成された一時的なものの存続期間は、C++標準によって明確に定義されています。
一時的なものの存続期間が終了し、一時的なものがメモリに存在する場合、
最適化コンパイラには、スタックスペースを他の一時的なものと再利用する自由があります。
ライブ範囲が重複しないスコープ付きローカル変数。 ただし、一部の
レガシーコードは、一時的なスタックが存在する古いコンパイラの動作に依存しています
スペースは再利用されません。スタックを積極的に再利用すると、ランタイムエラーが発生する可能性があります。 これ
オプションは、一時スタックの再利用の最適化を制御するために使用されます。
-ftrapv
このオプションは、加算、減算、
乗算演算。
-fwrapv
このオプションは、コンパイラに、の符号付き算術オーバーフローを想定するように指示します。
加算、減算、乗算はXNUMXの補数を使用してラップアラウンドします
表現。 このフラグは、一部の最適化を有効にし、他の最適化を無効にします。 これ
Java言語で要求されるように、オプションはJavaフロントエンドでデフォルトで有効になっています
仕様。
-例外
例外処理を有効にします。 例外を伝播するために必要な追加のコードを生成します。 為に
一部のターゲットでは、これはGCCがすべての機能のフレームアンワインド情報を生成することを意味します。
影響はありませんが、かなりのデータサイズのオーバーヘッドが発生する可能性があります
実行。 このオプションを指定しない場合、GCCは言語に対してデフォルトでこのオプションを有効にします
通常は例外処理を必要とするC++のように、次のような言語では例外処理を無効にします。
通常それを必要としないC。 ただし、次の場合にこのオプションを有効にする必要がある場合があります
記述された例外ハンドラーと適切に相互運用する必要があるCコードのコンパイル
C++で。 古いC++をコンパイルする場合は、このオプションを無効にすることもできます。
例外処理を使用しないプログラム。
-fnon-call-例外
トラップ命令が例外をスローできるようにするコードを生成します。 これに注意してください
どこにも存在しないプラットフォーム固有のランタイムサポートが必要です。 さらに、
それは許可するだけです トラッピング 例外をスローするための命令、つまりメモリ参照または
浮動小数点命令。 任意のから例外をスローすることはできません
「SIGALRM」などのシグナルハンドラー。
-fdelete-dead-例外
例外をスローする可能性があるが、それ以外の場合は寄与しない命令を考慮してください
プログラムの実行を最適化することができます。 このオプションはデフォルトで有効になっています
Ada言語仕様で許可されているように、Adaフロントエンドの場合。 最適化
デッド例外を削除するパスは、異なる場所で個別に有効になります
最適化レベル。
-funwind-テーブル
そして -例外、ただし、必要な静的データを生成するだけですが、
生成されたコードに他の方法で影響を与えることはありません。 通常、する必要はありません
このオプションを有効にします。 代わりに、この処理を必要とする言語プロセッサがそれを可能にします
あなたに代わって。
-fasynchronous-unwind-tables
ターゲットマシンでサポートされている場合は、DWARF2形式でアンワインドテーブルを生成します。 テーブルは
各命令境界で正確であるため、スタックの巻き戻しに使用できます。
非同期イベント(デバッガーやガベージコレクターなど)。
-fno-gnu-ユニーク
最近のGNUアセンブラとCライブラリを備えたシステムでは、C++コンパイラは
テンプレート静的データメンバーの定義を確認するための「STB_GNU_UNIQUE」バインディング
インライン関数の静的ローカル変数は、
"RTLD_LOCAL"; これは、XNUMXつの異なるライブラリで使用されるライブラリの問題を回避するために必要です。
「RTLD_LOCAL」プラグインは、そのうちのXNUMXつで定義に依存しているため、
シンボルの結合について他の人と意見が合わない。 しかし、これは原因になります
影響を受けるDSOでは「dlclose」は無視されます。 プログラムが再初期化に依存している場合
「dlclose」および「dlopen」を介したDSOの場合、次を使用できます。 -fno-gnu-ユニーク.
-fpcc-構造体-リターン
「短い」「構造体」と「共用体」の値を、長い値ではなく、長い値のようにメモリに返します。
レジスタ。 この規則は効率が低くなりますが、次のことができるという利点があります。
GCCでコンパイルされたファイルと他のコンパイラでコンパイルされたファイル間の相互呼び出し可能性
特にポータブルCコンパイラ(pcc)。
メモリ内の構造を返すための正確な規則は、ターゲットによって異なります
構成マクロ。
短い構造とユニオンは、サイズと配置が一部のものと一致するものです。
整数型。
警告: でコンパイルされたコード -fpcc-構造体-リターン スイッチはバイナリ互換ではありません
でコンパイルされたコードで -freg-構造体-リターン スイッチ。 非に準拠するためにそれを使用してください
デフォルトのアプリケーションバイナリインターフェイス。
-freg-構造体-リターン
可能な場合は、レジスタの「struct」値と「union」値を返します。 これはより効率的です
小さな構造物の場合 -fpcc-構造体-リターン.
どちらも指定しない場合 -fpcc-構造体-リターン また -freg-構造体-リターン、GCCのデフォルトは
ターゲットの標準の規則。 標準的な規則がない場合は、
GCCのデフォルトは -fpcc-構造体-リターン、GCCがプリンシパルであるターゲットを除く
コンパイラ。 そのような場合は、標準を選択でき、より効率的なものを選択しました
代替を登録します。
警告: でコンパイルされたコード -freg-構造体-リターン スイッチはバイナリ互換ではありません
でコンパイルされたコードで -fpcc-構造体-リターン スイッチ。 非に準拠するためにそれを使用してください
デフォルトのアプリケーションバイナリインターフェイス。
-fshort-列挙型
宣言された範囲に必要なバイト数だけを「列挙型」タイプに割り当てます。
可能な値。 具体的には、「列挙型」タイプは最小の整数に相当します
余裕のあるタイプ。
警告: -fshort-列挙型 スイッチを使用すると、GCCはバイナリではないコードを生成します
そのスイッチなしで生成されたコードと互換性があります。 非に準拠するためにそれを使用してください
デフォルトのアプリケーションバイナリインターフェイス。
-fshort-double
「ダブル」は「フロート」と同じサイズを使用してください。
警告: -fshort-double スイッチを使用すると、GCCはバイナリではないコードを生成します
そのスイッチなしで生成されたコードと互換性があります。 非に準拠するためにそれを使用してください
デフォルトのアプリケーションバイナリインターフェイス。
-fshort-wchar
「wchar_t」の基になる型を、「shortunsignedint」ではなく「shortunsignedint」にオーバーライドします。
ターゲットのデフォルト。 このオプションは、実行するプログラムを作成する場合に便利です。
ワイン。
警告: -fshort-wchar スイッチを使用すると、GCCはバイナリではないコードを生成します
そのスイッチなしで生成されたコードと互換性があります。 非に準拠するためにそれを使用してください
デフォルトのアプリケーションバイナリインターフェイス。
-fno-common
Cコードでは、初期化されていないグローバル変数の配置を制御します。 UnixCコンパイラ
従来、このような変数の複数の定義を異なるもので許可してきました
変数を共通のブロックに配置することによるコンパイル単位。 これが動作です
によって指定された -fcommon、およびほとんどのターゲットでのGCCのデフォルトです。 一方で、
この動作はISOCでは必要ありません。一部のターゲットでは、速度またはコードが含まれる場合があります。
変数参照のサイズペナルティ。 The -fno-common オプションは、
コンパイラは、初期化されていないグローバル変数をオブジェクトのデータセクションに配置する必要があります
それらを共通のブロックとして生成するのではなく、ファイル。 これには、
XNUMXつの異なるコンパイルで同じ変数が(「extern」なしで)宣言されると、
それらをリンクすると、複数定義エラーが発生します。 この場合、でコンパイルする必要があります
-fcommon 代わりは。 でコンパイル -fno-common それが対象となるターゲットに役立ちます
より良いパフォーマンスを提供します、またはプログラムが動作することを確認したい場合
初期化されていない変数宣言を常にこのように扱う他のシステム。
-fno-ident
「#ident」ディレクティブは無視してください。
-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、SPARC では 28k です。
m64k および RS/32 上の AArch68 および 6000k。 x86 にはそのような制限はありません。)
位置に依存しないコードには特別なサポートが必要であるため、
特定のマシン。 x86の場合、GCCはSystem VではPICをサポートしますが、Sunではサポートしません
386i。 IBM RS / 6000用に生成されたコードは、常に位置に依存しません。
このフラグが設定されている場合、マクロ「__pic__」および「__PIC__」は1に定義されます。
-fPIC
ターゲットマシンでサポートされている場合は、位置に依存しないコードを発行します。
動的リンクとグローバルオフセットテーブルのサイズの制限の回避。 これ
オプションは、AArch64、m68k、PowerPC、および SPARC で違いを生みます。
位置に依存しないコードには特別なサポートが必要であるため、
特定のマシン。
このフラグが設定されている場合、マクロ「__pic__」および「__PIC__」は2に定義されます。
-fpie
-fPIE
これらのオプションは次のようになります -fpic と -fPIC、ただし、位置に依存しないコードを生成
実行可能ファイルにのみリンクできます。 通常、これらのオプションは次の場合に使用されます -パイ GCC
オプションはリンク中に使用されます。
-fpie と -fPIE どちらもマクロ「__pie__」と「__PIE__」を定義します。 マクロには
の値1 -fpie と2用 -fPIE.
-fno-plt
位置に依存しないコードでは、外部関数呼び出しに PLT を使用しないでください。 その代わり、
GOT から呼び出し先のアドレスを読み込み、そこに分岐します。 これにより、さらに
PLT スタブを排除し、GOT 負荷を最適化にさらすことにより、コードを効率化します。 の上
PLT スタブが特定の GOT ポインターを期待する 32 ビット x86 などのアーキテクチャ
これにより、コンパイラはより多くのレジスタ割り当ての自由度を得ることができます。 レイジーバインディング
PLT が必要: あり -fno-plt すべての外部シンボルはロード時に解決されます。
または、関数属性「noplt」を使用して、への呼び出しの PLT を回避できます。
これらの関数をこの属性でマークすることにより、特定の外部関数を識別します。
さらに、いくつかのターゲットは、次のようにマークされている関数への呼び出しも変換します。
位置に依存しないコードの代わりに GOT を使用するために PLT を使用しないでください。
-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コードで「externinline」を使用する場合、アドレス指定可能なバージョンは
そのような機能を提供する必要があります。 (とにかくこれは通常の場合ですが、
幸運なことに、オプティマイザーは常に関数をインラインで拡張します。
静的コピーを提供せずに離れます。)
関数に属性「no_instrument_function」を指定できます。この場合、これは
計装は行われません。 これは、たとえば、プロファイリングに使用できます
上記の関数、優先度の高い割り込みルーチン、およびその元となる関数
プロファイリング関数を安全に呼び出すことはできません(おそらく、シグナルハンドラーの場合
プロファイリングルーチンは、出力を生成するか、メモリを割り当てます)。
-finstrument-functions-exclude-file-list =file,file、...
インストルメンテーションから除外される機能のリストを設定します(説明を参照してください)
of -finstrument-関数)。 関数定義を含むファイルが一致する場合
のいずれかと file、その場合、その関数はインストルメントされません。 試合は上で行われます
サブストリング: file パラメータはファイル名のサブストリングであり、次のように見なされます。
一致する。
例:
-finstrument-functions-exclude-file-list = / bits / stl、include / sys
パス名に含まれるファイルで定義されたインライン関数を除外します / bits / stl or
include / sys.
何らかの理由で、手紙を含めたい場合 , のいずれかで sym、 書きます ,。 例えば、
-finstrument-functions-exclude-file-list =',, tmp' (周囲の一重引用符に注意してください
オプション)。
-finstrument-functions-exclude-function-list =sym,sym、...
これは -finstrument 関数の除外ファイルリスト、ただし、このオプションは
インストルメンテーションから除外される関数名のリスト。 関数名は
一致するのは、「vector」などのユーザーに表示される名前です。 blah(const vector &)"、 いいえ
内部のマングルされた名前(例:「_ Z4blahRSt6vectorIiSaIiEE」)。 試合は上で行われます
サブストリング: sym パラメータは関数名のサブストリングであり、考慮されます
一致する。 C99およびC++拡張識別子の場合、関数名を指定する必要があります
UTF-8では、ユニバーサル文字名を使用しません。
-fstack-チェック
スタックの境界を超えないことを確認するコードを生成します。 君は
複数のスレッドがある環境で実行している場合は、このフラグを指定する必要があります。
ただし、スタック以降、シングルスレッド環境で指定する必要があることはめったにありません。
スタックがXNUMXつしかない場合、オーバーフローはほぼすべてのシステムで自動的に検出されます。
この切り替えによって実際にチェックが行われるわけではないことに注意してください。 運営
システムまたは言語ランタイムがそれを行う必要があります。 スイッチにより、コードが生成されます。
スタックが拡張されていることを確認してください。
さらに、文字列パラメータを指定できます。 いいえ チェックなしを意味します、 ジェネリック 手段
古いスタイルのチェックの使用を強制し、 特定の 最良のチェック方法を使用することを意味し、
裸と同等です -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を実行しているx86ターゲットにのみ実装されています。
コードをコンパイルした場合 -fsplit-スタック なしでコンパイルされたコードを呼び出す -fsplit-スタック、 そこ
後者のコードを実行するために利用できるスタックスペースがあまりない場合があります。 すべてをコンパイルする場合
ライブラリコードを含むコード -fsplit-スタック オプションではない場合、リンカーは次のことができます
これらの呼び出しを修正して、コードをコンパイルせずにコンパイルするようにします -fsplit-スタック 常に大きい
スタック。 これのサポートは、GNUbinutilsリリースのゴールドリンカーに実装されています
2.21以降。
-fleading-アンダースコア
このオプションとそれに対応するもの、 -fno-先頭のアンダースコア、強制的に方法を変更するC
シンボルはオブジェクトファイルで表されます。 XNUMXつの用途は、レガシーとのリンクを支援することです
アセンブリコード。
警告: -fleading-アンダースコア スイッチを使用すると、GCCはそうでないコードを生成します
そのスイッチなしで生成されたコードと互換性のあるバイナリ。 に準拠するために使用します
デフォルト以外のアプリケーションバイナリインターフェイス。 すべてのターゲットが完全なサポートを提供するわけではありません
このスイッチ用。
-ftls-model =
使用するスレッドローカルストレージモデルを変更します。 The 引数は次のいずれかである必要があります
グローバルダイナミック, ローカルダイナミック, 初期実行 or ローカル実行。 選択は
最適化の対象:コンパイラは、シンボルに対してより効率的なモデルを使用する場合があります。
翻訳ユニットの外に見える、または -fpic コマンドラインで指定されていません。
デフォルトなし -fpic is 初期実行; と -fpic デフォルトは グローバルダイナミック.
-fvisibility =[デフォルト|内部|隠されました|保護された]
デフォルトのELF画像シンボルの可視性を指定されたオプションに設定します---すべてのシンボルは
コード内でオーバーライドされない限り、これでマークされます。 この機能を使用すると、非常に
共有オブジェクトライブラリのリンクとロード時間を大幅に改善し、より多くを生成します
最適化されたコード、ほぼ完全なAPIエクスポートを提供し、シンボルの衝突を防ぎます。 です
強く 配布する共有オブジェクトでこれを使用することをお勧めします。
命名法にもかかわらず、 デフォルト 常にパブリックを意味します。 つまり、リンクすることができます
共有オブジェクトの外部からに対して。 保護された と 内部 でかなり役に立たない
実際の使用法なので、他の一般的に使用されるオプションは 隠されました。 デフォルトの場合
-視認性 指定されていません デフォルトつまり、すべてのシンボルを公開します。
ELFシンボルが正しいことを確認することによって提供される利点の適切な説明
可視性は、UlrichDrepperによる「共有ライブラリの書き方」によって与えられます(
で見つかりましたhttp://www.akkadia.org/drepper/>)---しかし、優れたソリューションが作られました
デフォルトがパブリックであるときに非表示のものをマークするこのオプションによって可能になるのは、
デフォルトの非表示で、公開のマークを付けます。 これは、WindowsおよびWindows上のDLLの標準です。
-fvisibility = hidden および「__attribute__((visibility( "default")))」の代わりに
"__declspec(dllexport)"は、同じ構文でほぼ同じセマンティクスを取得します。
これは、クロスプラットフォームプロジェクトで作業する人にとって大きな恩恵です。
既存のコードに可視性のサポートを追加する場合は、「#pragmaGCC
使用の可視性」。これは、設定したい宣言を囲むことによって機能します。
withの可視性(たとえば)「#pragmaGCC可視性プッシュ(非表示)」および「#pragma
GCC可視性ポップ」。シンボルの可視性を表示する必要があることに注意してください as 部 of
API インタフェース 縮小することはできません。 したがって、すべての新しいコードは常に可視性を指定する必要があります
これはデフォルトではありません。 つまり、ローカルDSO内でのみ使用する宣言は
常に PLTの間接参照を回避するために、明示的に非表示としてマークする
オーバーヘッド---これを十分に明確にすることは、読みやすさと自己文書化にも役立ちます
コードの。 ISO C ++仕様の要件により、「新しいオペレーター」と
「演算子の削除」は常にデフォルトの可視性である必要があります。
プロジェクト外部からのヘッダー、特にシステムヘッダーと
使用している他のライブラリのヘッダーは、でコンパイルされることを期待していない可能性があります
デフォルト以外の可視性。 「#pragmaGCC」と明示的に言う必要があるかもしれません
そのようなヘッダーを含める前に、visibility push(default)」を実行します。
「extern」宣言は影響を受けません -視認性、したがって、多くのコードが
で再コンパイル -fvisibility = hidden 変更なし。 ただし、これは
明示的な可視性のない「extern」関数の呼び出しはPLTを使用するため、
「__attribute((visibility))」および/または「#pragmaGCCvisibility」を使用して伝えるのに効果的
「extern」宣言を非表示として扱う必要があるコンパイラ。
注意してください -視認性 C++のあいまいなリンケージエンティティに影響します。 これは、
たとえば、DSO間でスローされる例外クラスは、明示的にマークする必要があります
デフォルトの可視性で、 タイプ情報 ノードはDSO間で統合されます。
これらのテクニックの概要、それらの利点、およびそれらの使用方法は次のとおりです。
<http://gcc.gnu.org/wiki/Visibility>.
-fstrict-volatile-ビットフィールド
このオプションは、揮発性ビットフィールド(または他の構造)にアクセスする場合に使用する必要があります
フィールド、ただしコンパイラは通常これらのタイプを尊重します)単一を使用する必要があります
フィールドのタイプの幅へのアクセス。可能であれば自然な配置に合わせます。
たとえば、メモリマップドペリフェラルレジスタを備えたターゲットは、そのようなすべてを必要とする場合があります
アクセスは16ビット幅になります。 このフラグを使用すると、すべてのペリフェラルビットフィールドを宣言できます
「unsignedshort」(これらのターゲットでshortが16ビットであると想定)として、GCCに使用を強制します
おそらく、より効率的な16ビットアクセスの代わりに32ビットアクセス。
このオプションが無効になっている場合、コンパイラーは最も効率的な命令を使用します。 の中に
前の例では、アクセスする場合でも、32ビットのロード命令である可能性があります
ビットフィールドの一部を含まないバイト、またはメモリマップドレジスタ
更新されているものとは無関係です。
「packed」属性が構造体フィールドに適用される場合など、場合によっては、
正しく行われる単一の読み取りまたは書き込みでは、フィールドにアクセスできない場合があります
ターゲットマシンに合わせて調整されます。 この場合、GCCは複数の生成にフォールバックします
実行時に結果を失敗または切り捨てるコードではなく、アクセス。
注:C / C ++ 11メモリモデルの制限により、書き込みアクセスは許可されていません
非ビットフィールドメンバーにタッチします。 したがって、のすべてのビットを定義することをお勧めします
ビットフィールドメンバーとしてのフィールドのタイプ。
このオプションのデフォルト値は、アプリケーションのバイナリインターフェイスによって決定されます。
ターゲットプロセッサ。
-fsync-libcalls
このオプションは、「__sync」ファミリのアウトオブラインインスタンスがあるかどうかを制御します。
関数は、C ++11"__atomic"ファミリーの関数を実装するために使用できます。
このオプションのデフォルト値が有効になっているため、このオプションの唯一の有用な形式
is -fno-sync-libcalls。 このオプションは、 リバトミック
ランタイムライブラリ。
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 サービスを使用してオンラインで aarch64-linux-gnu-gcc を使用する