C ユーザーズガイド ホーム目次前ページへ次ページへ索引


第 2 章

cc コンパイラオプション

この章では、C コンパイラのオプションについて説明します。説明項目は次のとおりです。

旧式の K&R C プログラムを ANSI/ISO C に移植する場合には、32ページ以降で説明する -X (互換性) フラグ -X[a|c|s|t] に特に注意してください。このフラグを使用すると、ANSI/ISO C への移植が簡単になります。ANSI/ISO C への移行については、「ANSI/ISO C への移行」も参照してください。

オプションの構文

cc コマンドの構文を以下に示します。

% cc [<オプション>] <ファイル名> [<ライブラリ>]... 

cc は <ファイル名> で指定されたファイルリストに含まれている C ソースファイルとオブジェクトファイルのリストを受け取ります。生成された実行可能コードは、-o オプションを使用した場合を除いて a.out に出力されます。-o オプションを使用した場合には、コードは -o オプションで指定したファイルに出力されます。
cc は次のファイルのどのような組み合わせに対しても、コンパイルとリンクを行うことができます。

  • 接尾辞 .c の C ソースファイル
  • 接尾辞 .il のインラインテンプレートファイル
    (.c ファイルで指定される場合のみ)
  • 接尾辞 .i の前処理済みソースファイル
  • 接尾辞 .o のオブジェクトコードファイル
  • 接尾辞 .s のアセンブラソースファイル
    リンク後、cc は実行可能コードの形式になったリンク済みファイルを a.out ファイルまたは -o オプションで指定したファイルに出力します。

ライブラリの検索に使用するデフォルトのディレクトリを変更する場合は、
-YP, <ディレクトリ> を参照してください。<ディレクトリ> には、複数のパスをコロンで区切って指定します。cc のデフォルトのライブラリ検索は、次の順序で行われます。

/opt/SUNWspro/WS6/lib
/usr/ccs/lib
/usr/lib

ccgetopt を使用してコマンド行オプションの構文を解析します。オプションは単一文字、または後ろに引数を 1 つとる単一文字によって指定します。getopt(3c) のマニュアルページも参照してください。

オプションの一覧

この節では、簡単に参照できるように、コンパイラオプションを機能ごとに分けて示します。オプションの詳細については、この後の節を参照してください。次の表は、cc コンパイラオプションを機能ごとに要約したものです。一部のフラグは複数の目的で使用されているため、複数箇所に記載されています。

表 2-1   機能別コンパイラオプション 
機能 オプションフラグ
ライセンス

ライセンスが得られない場合にこのコンパイル要求を待ち行列に入れないようにコンパイラに指示する -noqueue

ライセンスシステムについての情報を返す -xlicinfo
最適化とパフォーマンス

速度が最も速くなるコンパイルオプションの組み合わせを選択する -fast

プロファイルデータ収集用のオブジェクトコードを用意する -p

80386 プロセッサ用に最適化する -x386

80486プロセッサ用に最適化する -x486

各基本ブロックが実行される回数を数えるコードを挿入する -xa

複数ソースファイルに渡る最適化とインライン化を有効にする -xcrossfile=[n]

ループの繰り返し内部でのデータ依存の解析およびループ再構成を実行する -xdepend

アナライザを使用した実行可能ファイルのパフォーマンス解析ができるように準備する -xF

指定された関数だけをインライン化する -xinline

実行速度を上げるため、一部のライブラリルーチンをインライン化する -xlibmil

指定された Sun 提供のパフォーマンスライブラリにリンクする -xliclib=sunperf

pragma opt のレベルを指定されたレベルに限定する -xmaxopt=off,1,2,3,4,5

オブジェクトコードを最適化する -xO[1|1|2|3|4|5]

PentiumTM プロセッサ用に最適化する -xpentium

先読み命令を有効にする -xprefetch

プロファイルのデータを収集、または最適化のためにプロファイルを使用する -xprofile=p

ポインタ値の関数引数を制限付きポインタとして扱う -xrestrict=f

メモリーに関するトラップが発生しないことを前提とする -xsafe=mem

コードサイズを増やすループの最適化や並列化を行わない -xspace

ループを n 回展開するようオプティマイザに指示する -xunroll=n
データ境界整列

複数文字から成る定数の文字を指定されたバイト順序で配置して、整定数を生成する -xchar_byte_order=o

想定する最大の境界整列と、境界整列が不正な場合の動作を指定する -xmemalign=ab

数学ライブラリのルーチンをインライン化しない -xnolibmil
数値と浮動小数点

浮動小数点演算ハードウェアの非標準の初期化を行う -fnonstd

SPARC 非標準の浮動小数点モードに切り替える -fns[={no,yes}]

浮動小数点制御ワードの丸め精度モードのビットを初期化する -fprecision=p

プログラム初期化中に、実行時に確立される IEEE 754 丸めモードを設定する -fround=r

オプティマイザが浮動小数点演算に関する前提事項を単純化できるようにする -fsimple=n

float 式を倍精度ではなく単精度で評価する -fsingle

浮動小数点式または関数の値を、代入式の左辺値の型に変換する -fstore

起動時に有効になる IEEE 754 トラップモードを設定する -ftrap=t

浮動小数点式または関数の値を、代入式の左辺値の型に変換しない -nofstore

例外が起きた場合の数学ルーチンの戻り値を強制的に IEEE 754 形式にする -xlibmieee

接尾辞のない浮動小数点定数を単精度で表す -xsfpconst

ベクトルライブラリ関数を自動的に呼び出す -xvector=[{yes|no}]
並列化

-D_REENTRANT-lthread に展開されるマクロオプション -mt

複数プロセッサの自動並列化を有効にする -xautopar

#pragma MP 指令の指定にもとづいて並列化コードを生成する -xexplicitpar

並列化されているループとされていないループを示す -xloopinfo

ループを、コンパイラで自動的に並列化するとともに、プログラマの指定によって明示的に並列化する -xparallel

自動並列化中の縮約の認識を有効にする -xreduction

ループが正しく並列化指定されていない場合に、#pragra MP 指令が指定されているループについて警告を出す -xvpara

lock_lint 用にプログラムデータベースを作成するが、コンパイルは行わない -Zll

ループプロファイラであるループツール用にオブジェクトファイルを準備する -Zlp
ソースコード

<名前> を述語として <トークン> と関連付ける。#assert 前処理指令を実行するのと同様 -A<名前>[(<トークン>)]

C プリプロセッサがコメントを削除しないようにする。ただし前処理指令の行にあるコメントは削除される -C

#define 前処理指令が行うように、<名前> を <トークン> に関連付ける。 -D<名前>[=<トークン>]

ソースファイルの前処理だけを行い、結果を stdout に出力する -E

K&R 形式の関数の宣言や定義を報告する -fd

現在のコンパイルでインクルードされたファイルのパス名を 1 行に 1 つずつ標準エラーに表示する -H

ディレクトリのリストに <ディレクトリ> を追加する。このディレクトリは相対ファイル名で指定されるインクルードファイルを検索する時のディレクトリである -I<ディレクトリ>

ソースファイルのプリプロセッサ処理のみを行う -P

初期定義されているプリプロセッサシンボル <名前> をすべて削除する -U<名前>

C++ 形式のコメントを受け入れる -xCC

指定した C プログラムに対してプリプロセッサだけを実行する。その際、メークファイルの依存関係を生成してその結果を標準出力に出力する -xM

-xM と同様に依存関係を収集するが、/usr/include ファイルは除く -xM1

このモジュールで定義されたすべての K&R C 関数に対するプロトタイプを出力する -xP

gprof(1) によるプロファイルの準備として、データを収集するためのオブジェクトコードを生成する -xpg

ソースブラウザ用のシンボルテーブル情報を生成する -xsb

ソースブラウザ用のデータベースを作成する -xsbfast
コンパイル済みコード

ld(1) によるリンクを行わず、ソースファイルごとに .o ファイルを作成する -c

出力ファイルに名前を付ける -o<出力ファイル>

アセンブリソースファイルを作成するが、アセンブルは行わない -S
コンパイルモード

冗長モードでコンパイラを動作させる。呼び出された各構成要素が表示される -#

呼び出された各構成要素が表示されるが、実行はされない -###

コンパイル中に作成される一時ファイルを自動的に削除しないで保持する -keeptmp

コンパイラの実行時に各構成要素の名前とバージョン番号を表示する -V

ANSI/ISO C に準拠する度合いを指定する -X[a|c|s|t]

オンラインヘルプ情報を表示する -xhelp=f

cc が使用する一時ファイルの <ディレクトリ> を設定する -xtemp=<ディレクトリ>

コンパイルの各構成要素が使用した実行時間と資源を報告する -xtime
診断

コンパイラからの警告メッセージを出力しない -erroff=t

各警告メッセージのメッセージタグを表示する -errtags=a

指定された警告メッセージが表示される場合、cc はエラーステータスを返して終了する -errwarn=t

より厳しい意味検査を行い、lint に似たその他の検査を可能にする -v

コンパイラからの警告メッセージを出力しない -w

ソースファイル上で構文および意味検査のみを行う。オブジェクトコードや実行可能コードは生成しない -xe

K&R C と Sun ANSI/ISO C との間の相違に対して警告を出す -xtransition

#pragma MP 指令が指定されているが正しく並列化指定されていないループについて警告を出す -xvpara
デバッグ

デバッガ用に追加のシンボルテーブル情報を作成する -g

出力されるオブジェクトファイルからシンボリックデバッグのための情報をすべて削除する -s

dbx のための自動読み取りを無効にする -xs
リンクとライブラリ

ライブラリのリンクを静的と動的のどちらにするかを指定する -B[static|dynamic]

リンクエディタに動的なリンクまたは静的なリンクを指定する -d[y|n]

動的にリンクされる実行可能プログラムではなく、共有オブジェクトを作成することをリンクエディタに指示する -G

共有動的ライブラリに <名前> をつける。これによって異なったバージョンのライブラリを作成できる -h<名前>

LD_LIBRARY_PATH の設定を無視するオプションをリンカーへ渡す -i

リンカーがライブラリを検索するリストに <ディレクトリ> を付け加える -L<ディレクトリ>

ld がオブジェクトライブラリ lib<名前>.so、または lib<名前>.a をリンクの対象とする -l<名前>

オブジェクトファイルの .common セクションから重複している文字列を削除する -mc

オブジェクトファイルの .common セクションからすべての文字列を削除する -mr

オブジェクトファイルの .common セクションからすべての文字列を削除し、<文字列> を挿入する -mr,<文字列>

出力ファイルに識別情報を入れるかどうかを設定する -Q[y|n]

実行時リンカーが使用するライブラリ検索ディレクトリを指定する -R<ディレクトリ>
[:<
ディレクトリ>]

データセグメントをテキストセグメントにマージする -xMerge

コードアドレス空間を指定する -xcode=v

デフォルトのデータセグメントではなくテキストセグメントの読み出し専用データセクションに、文字列リテラルを挿入する -xstrconst

インクリメンタルリンカーを使用せず、強制的に ld を起動する -xildoff

強制的に、インクリメンタルリンカー (ild) をインクリメンタルモードで起動する -xildon

デフォルトのライブラリをリンクしない -xnolib

数学ライブラリのルーチンをインライン化しない -xnolibmil
対象プラットフォーム

命令セットアーキテクチャを指定する -xarch

オプティマイザ用のキャッシュ特性を定義する -xcache

-xarch-xchip、および -xcache の値を指定する -xcg[89|92]

オプティマイザ用のプロセッサを定義する -xchip

生成されたコードでのレジスタの使用方法を指定する -xregs=r

最適化と命令セットの対象となるシステムを指定する -xtarget


cc オプション

この項では cc オプションをアルファベット順に説明します。これらの説明は cc (1) のマニュアルページでも見ることができます。1 行に要約した説明が必要な場合は、
cc -flags オプションを使用してください。

特定のプラットフォームに固有と表記されたオプションを別のプラットフォームで使用してもエラーは起きません。単に無視されます。オプションおよび引数で使用している表記方法については、「関連マニュアル」 を参照し てください。

-#

冗長モードでコンパイラを動作させます。呼び出された各構成要素が表示されます。

-###

呼び出された各構成要素が表示されますが、実行はされません。

-A<名前>[(<トークン>)]

<名前> を述語として <トークン> 関連付けます。#assert 前処理指令を実行するのと同様です。

事前表明 (preassertion): -Xc モードの場合、以下の事前表明は有効になりません。

  • system(unix)
  • machine(sparc) (SPARC)
  • machine(i386) (x86)
  • cpu(sparc) (SPARC)
  • cpu(i386) (x86)

-B[static|dynamic]

リンク時に結合するライブラリを静的と動的のどちらにするかを指定します。
static (静的) と指定するとライブラリが非共有ライブラリであることを示し、dynamic (動的) と指定すると共有ライブラリであることを示します。

-Bdynamic を指定すると、-lI オプションが指定されていれば、リンカーは libx.so というファイルを探し、次に libx.a というファイルを探します。

-Bstatic を指定すると、リンカーは libx.a というファイルだけを探します。このオプションは、コマンド行中で何度も指定して、切り替えることができます。このオプションと引数は ld に渡されます。


注 - Solaris の 64 ビットコンパイル環境では、多くのシステムライブラリ (libc など) は、動的ライブラリのみ使用することができます。このため、コマンド行の最後に -Bstatic を使用しないでください。

-C

C プリプロセッサがコメントを削除しないようにします。ただし前処理指令の行にあるコメントは削除されます。

-c

ld(1) を使用するリンクを行わずに、ソースファイルごとに .o ファイルを作成します。-o オプションを使用すると、1 つのオブジェクトファイルを明示的に指定することができます。各 .i または .c 入力ファイルのオブジェクトコードを作成する場合、コンパイラは常に現在の作業ディレクトリ内にオブジェクト (.o) ファイルを作成します。リンクを行わないと、オブジェクトファイルの削除も行われません。

-D<名前>[=<トークン>]

#define 前処理指令が行うように、 <名前> を <トークン> に関連付けます。
「=<トークン>」を省略した場合はトークンとして 1 が使用されます。

事前定義: 次の事前定義は -Xc モードの場合は無効です。

次の事前定義はあらゆるモードにおいて有効です。

__sparcv9 (-Xarch=v9, v9a)
__sun
__unix
__SUNPRO_C=0x510
__`uname -s`_`uname -r` (例: __SunOS_5_7)
__sparc (SPARC)
__i386 (x86)
__BUILTIN_VA_ARG_INCR
__SVR4
__RESTRICT は、-Xa および -Xt モードでのみ有効です。

コンパイラでは、__PRAGMA_REDEFINE_EXTNAME のようなオブジェクト形式のマクロを定義しておくことにより、プラグマを認識させることができます。

-d[y|n]

-dy はリンクエディタに動的なリンクを指定します (デフォルト)。

-dn はリンクエディタに静的なリンクを指定します。

このオプションと引数は ld(1) に渡されます。


注 - Solaris 7 の 64 ビットコンパイル環境では、多くのシステムライブラリは、動的ライブラリのみ使用することができます。このため、このオプションと -Xarch=v9 を組み合わせると、致命的なエラーになります。

-dalign

-dalign は、-xmemalign=8s を指定することと同じです。56 ページの「-xmemalign=ab」を参照してください。

-E

ソースファイルの前処理だけを行い、結果を stdout に出力します。プリプロセッサはコンパイラ内部に直接組み込まれます (/usr/ccs/lib/cpp が直接呼び出される -Xs モードの場合を除きます)。プリプロセッサの行番号付け情報も含みます (「-P」を参照してください)。

-erroff=t

cc 警告メッセージを抑制します。エラーメッセージには影響しません。

t には、以下の 1 つまたは複数の項目をコンマで区切って指定します。

<タグ>、no%<タグ>、%all%none

指定順序によって実行内容が異なります。たとえば、「%all,no%<タグ>」と指定すると、<タグ> 以外のすべての警告メッセージを抑制します。次の表は、-erroff の値を示しています。

表 2-2   -erroff の引数
意味
<タグ> <タグ> のリストに指定されているメッセージを抑制します。
-errtags=yes オプションを使用すればメッセージのタグを表示することができます。
no%<タグ> <タグ> 以外のすべての警告メッセージを抑制します。
%all すべての警告メッセージを抑制します。
%none すべてのメッセージの抑制を解除します (デフォルト)。


デフォルトは -erroff=%none です。-erroff と指定すると、-erroff=%all を指定した場合と同じ結果が得られます。

エラーメッセージの抑制は、さらに細かく制御することができます。「#pragma error_messages(on|off|default,<タグ>... <タグ>)」を参照してください。

-errtags=a

各警告メッセージのメッセージタグを表示します。

a には yes または no のいずれかを指定します。デフォルトは -errtags=no です。
-errtags と指定すると、-errtags=yes を指定した場合と同じ結果が得られます。

-errwarn=t

指定された警告メッセージが表示された場合に、cc はエラーステータスを返して終了します。t には、<タグ>、no%<タグ>、%all%none のうちの 1 つ以上をコンマで区切って指定します。指定する順序は重要です。たとえば、「%all,no%<タグ>」と指定した場合、<タグ> 以外の警告が発行されると、cc は致命的エラーステータスを返して終了します。-errwarn の値を以下に示します。

表 2-3   -errwarn の引数
<タグ> <タグ> に指定されたメッセージが警告メッセージとして発行されると、cc は致命的エラーステータスを返して終了します。<タグ> が発行されない場合は無効です。
no%<タグ> <タグ> に指定されたメッセージが警告メッセージとしてのみ発行された場合に、cc が致命的なエラーステータスを返して終了しないようにします。<タグ> に指定されたメッセージが発行されない場合は無効です。このオプションは、<タグ> または %all を使用して以前に指定したメッセージが警告メッセージとして発行されても cc が致命的エラーステータスで終了しないようにする場合に使用してください。
%all 警告メッセージが 1 つでも発行されると cc は致命的ステータスを返して終了します。%all に続いて no%<タグ> を使用して、特定の警告メッセージを対象から除外することもできます。
%none どの警告メッセージが発行されても cc が致命的エラーステータスを返して終了することがないようにします。


デフォルトは -errwarn=%none です。 -errwarn とだけ指定することは、-errwarn=%all と指定することと同じです。

-fast

パフォーマンスを向上するために、各種コンパイラオプションの最適の組み合わせを選択します。これにより、大部分のアプリケーションを対象としてほぼ最大限のパフォーマンスが得られるようになります。-fast を使用してコンパイルしたモジュールは、必ず -fast でリンクしなければなりません。

-fast オプションは、コンパイルを行なったマシンとは別のマシンでプログラムを実行する場合には適していません。このような場合は、-fast の後に該当する xtarget オプションを指定します。たとえば、次のとおりです。

cc -fast -xtarget=ultra ...

SVID によって規定された例外処理に依存する C モジュールに対しては、-fast の後に -xnolibmil を指定します。

% cc -fast -xnolibmil

-xlibmil を使用すると、例外発生時でも errno が設定されなかったり、あるいは matherr(3m) が呼び出されません。

-fast オプションは、厳密な IEEE 754 規格準拠を必要とするプログラムには適して
いません。

次に、-fast により指定されるオプションをプラットフォームごとに示します。

オプション SPARC x86
-dalign --
-fns
-fsimple=2 --
-ftrap=%none
-xlibmil
-xtarget=native
-nofstore --
-xO5
-fsingle


-fast はコマンド行でマクロ展開のように動作します。したがって、最適化レベルとコード生成の内容を、-fast の後に指定したオプションで指定した場合は、-fast での指定は無視されます。「-fast -xO4」でコンパイルすることは「-xO2 -xO4」の組み合わせでコンパイルすることと同じで、後ろの指定が優先されます。

前回のリリースでは、-fast のマクロオプションには -fnonstd が含まれていましたが、今回のリリースでは、-fns に置き換えられています。

このオプションを使用すれば、大部分のプログラムのパフォーマンスを向上させることができます。

このオプションは、IEEE 規格例外処理に依存するプログラムには使用しないでください。数値結果が異なったり、プログラムが途中で終了したり、予想外の SIGFPE シグナルが発生する可能性があります。

-fd

K&R 形式の関数の宣言や定義を報告します。

-flags

使用できる各コンパイラオプションの要約を出力します。

-fnonstd

浮動小数点演算ハードウェアの非標準の初期化を行います。-fnonstd オプションを使用すると、浮動小数点のオーバーフロー、ゼロによる除算、不正演算例外に対し、ハードウェアによるトラップが可能になります。これらの例外は SIGFPE シグナルに変換されます。プログラムが SIGFPE ハンドラを持っていないときは、メモリーダンプを行なってプログラムを終了します。

デフォルトでは、IEEE 754 の浮動小数点演算機能は無停止であり、アンダーフローは段階的です (詳細については 「非標準浮動小数点」参照)。

(SPARC) -fns-ftrap=common を指定することと同等です。

-fns[={no,yes}]

(SPARC) 非標準の浮動小数点モードに切り替えます。

デフォルトは -fns=no で、SPARC 標準浮動小数点モードです。

オプションの =yes または =no を使用すると、-fast のように、-fns を含む他のマクロフラグに続く -fns フラグを切り替えることができます。このフラグを設定すると、プログラムが実行を開始するときに、非標準の浮動小数点モードが有効になります。デフォルトでは、非標準の浮動小数点モードは自動的に有効になりません。

一部の SPARC システムでは、非標準の浮動小数点モードは「段階的アンダーフロー」を無効にします。つまり、小さな結果は、非正規数にはならず、ゼロに切り捨てられます。また、非正規オペランドはメッセージなしにゼロに変更されます。段階的アンダーフローと非正規数をハードウェアでサポートしていない SPARC システムでこのオプションを使用すると、プログラムによってはパフォーマンスが飛躍的に上がることがあります。

非標準モードを有効にすると、浮動小数点演算は IEEE 754 規格に準拠しない結果を生成する場合があります。詳細は、『数値計算ガイド』を参照してください。

このオプションは、SPARC システム上だけで有効であり、さらに、メインプログラムをコンパイルするときに使用する場合だけ有効です。x86 システムでは、このオプションは無視されます。

-fprecision=p

(x86) -fprecision={single、double、extended}
浮動小数点制御ワードの丸め精度モードのビットを、単精度 (24 ビット)、倍精度 (53 ビット) または拡張精度 (64 ビット) に設定します。デフォルトの浮動小数点丸め精度モードは拡張モードです。


注 - Intel では、浮動小数点丸め精度モードの設定は精度に対してのみ影響します。指数の有効範囲に対しては影響しません。

-fround=r

プログラム初期化中の実行時に確立される IEEE 754 小数点丸めモードを設定します。

r は、nearesttozeronegativepositive のうちのいずれかです。

デフォルトは、-fround=nearest です。

ieee_flags サブルーチンと同等です。

rtozeronegativepositive のいずれかにすると、プログラムが実行を開始するときに、丸め方向モードがそれぞれ、ゼロの方向に丸める、負の無限の方向に丸める、 正の無限の方向に丸めるに設定されます。rnearest のとき、あるいは -fround フラグを使用しないとき、丸め方向モードは初期値から変更されません (デフォルトは nearest)。

このオプションは、メインプログラムのコンパイル時に使用する場合だけ有効です。

-fsimple[=n]

オプティマイザが浮動小数点演算に関する前提事項を単純化できるようにします。

n を指定する場合は、0、1、2 のいずれかでなければなりません。デフォルトは次のとおりです。

 -fsimple=0

前提事項の単純化を行えないようにします。厳密に IEEE 754 に準拠します。
 -fsimple=1

適度の単純化を行えるようにします。生成されるコードは IEEE 754 に厳密には準拠しませんが、大部分のプログラムの数値結果は変化しません。
-fsimple=1 を指定すると、オプティマイザは以下の事項を前提とします。

  • IEEE 754 のデフォルトの丸めとトラップモードは、プロセスの初期化後は変化しない。
  • 浮動小数点の数値例外以外には、目に見える結果が生じない演算は削除できる。
  • オペランドに無限または NaN をもつ演算は、その結果に NaN を伝達する必要はない。たとえば、x*00 で置き換えられる。
  • 演算はゼロの符号に依存しない。
-fsimple=1 を指定した場合は、オプティマイザは必ず四捨五入や数値例外に応じた処理を行います。特に浮動小数点演算は、実行時に定数化される四捨五入モードでは異なる結果を生じる演算と、置き換えることはできません。-fast マクロフラグを使用すると、-fsimple=1 に設定されます。
 -fsimple=2

  
高度な浮動小数点最適化を行うことができ、丸めの変化によって、多くのプログラムが異なる数値結果を生じる可能性があります。たとえば、あるループ内に x/y の演算があった場合、x/y がループ内で少なくとも 1 回は必ず評価され、z=1/y で、ループの実行中に y が一定の値をとることが明らかである場合、オプティマイザは x/y の演算をすべて x*z で置き換えます。

本来浮動小数点例外を発生しないプログラムならば、-fsimple=2 を指定してもオプティマイザが浮動小数点例外を発生させることはありません。

-fsingle

(-Xt モードまたは -Xs モードの場合に限り) float 式を倍精度ではなく単精度で評価します。-Xa モードまたは -Xc モードを使用している場合、float 式はすでに単精度として評価されているのでこのオプションは無効です。

-fsimple=2 を指定しても、本来浮動小数点例外を生成しないプログラムには、オプティマイザは浮動小数点例外を導入しません。

-fstore

(x86) 浮動小数点式または関数が、ある変数に代入されるか、より小さい型の浮動小数点にキャストされる場合に、コンパイラがその値をレジスタに残さないで、代入値の左側に表記される型に変換するようにします。小数点の丸めおよび切り上げを行うため、結果はレジスタの値から生成される数値と異なる可能性があります。これはデフォルトです。

このオプションを解除するには、オプション -nofstore を使用してください。

-ftrap=t

起動時に有効になる IEEE 754 トラップモードを設定します。

t には、以下の 1 つまたは複数の項目をコンマで区切って指定します。

 %all、%none、common、[no%]invalid、[no%]overflow、
[no%]underflow、[no%]division、[no%]inexact

デフォルトは -ftrap=%none です。

このオプションは、プログラム初期化時に設定される IEEE 754 トラップモードを設定します。項目は左から右への順に評価されます。common を指定した場合は、定義により、無効、0 除算、オーバーフローの各例外のトラップモードがオンになります。

たとえば、-ftrap=%all,no%inexact は、inexact 以外のすべてのトラップを設定することを意味します。

意味は、次の項目を除き、ieee_flags サブルーチンの場合と同じです。

1 つのルーチンを -ftrap=t オプションでコンパイルした場合は、そのプログラムの
ルーチンすべてを -ftrap=t オプションを使用してコンパイルしてください。途中から異なるオプションを使用すると、予想に反した結果が生じることがあります。

-G

動的にリンクされる実行可能プログラムではなく、共有オブジェクトを作成することをリンクエディタに指令します。このオプションは ld(1) に渡されます。このオプションは-dn オプションと併用することはできません。

-g

デバッガ用に追加のシンボルテーブル情報を作成します。

このオプションを指定すると、インクリメンタルリンカーを使用します。
「-xildoff」 および 「-xildon」 を参照してください。-G または -xildoff オプションを使用していない場合、あるいはコマンド行にソースファイルの名前を指定していない場合は、ld の代わりに ild を呼び出します。

-xO3 以下の最適化レベルで -g を指定すると、ほとんど完全な最適化と可能な限りのシンボル情報が得られます。末尾呼び出しの最適化とバックエンドのインライン化は無効になります。

最適化レベル -xO4-g を指定すると、完全な最適化と可能な限りのシンボル情報が得られます。

-H

現在のコンパイルでインクルードされたファイルのパス名を 1 行に 1 つずつ標準エラーに出力します。

字下げして表示されるので、ファイルがさらにファイルをインクルードする様子を見ることができます。以下で、sample.cstdio.h ファイルと math.h ファイルをインクルードします。math.hfloatingpoint.h ファイルをインクルードし、floatingpoint·h はさらに、sys/ieeefp.h を使用する関数をインクルードします。

$ cc -H sample.c
    /usr/include/stdio.h
    /usr/include/math.h
        /usr/include/floatingpoint.h
            /usr/include/sys/ieeefp.h

-h<名前>

共有動的ライブラリに <名前> をつけます。これによって異なったバージョンのライブラリを作成できます。一般に -h の後の <名前> は、-o オプションの後に指定するファイル名と同じです。-h と名前の間の空白は任意です。

リンカーは指定された <名前> をライブラリに割り当て、この名前をライブラリのイントリンシック名としてライブラリファイルに記録します。-h <名前> オプションがない場合、イントリンシック名はライブラリファイルに記録されません。

実行時リンカーはライブラリを実行可能ファイルにロードするとき、イントリンシック名をライブラリファイルから実行可能ファイル中の、必要とする共有ライブラリファイルのリストにコピーします。実行可能ファイルはこのリストを持っています。共有ライブラリのイントリンシック名がない場合、代わりにリンカーは共有ライブラリファイルのパス名をコピーします。

-I<ディレクトリ>

ディレクトリのリストに <ディレクトリ> を追加します。このディレクトリは (スラッシュで始まっていない) 相対ファイル名で指定されるインクルードファイルを検索するときのディレクトリです。インクルードファイルの検索順序については、「インクルードファイル」を参照してください。

-i

オプションをリンカーへ渡して、LD_LIBRARY_PATH または LP_LIBRARY_PATH_64 の設定を無視します。

-KPIC

-KPIC は、-xcode=pic32 と同義です。「-xcode=v」を参照して
ください。

(x86) -KPIC-Kpic と同じです。

-Kpic

-Kpic は、-xcode=pic13 と同義です。「-xcode=v」を参照して
ください。

-keeptmp

コンパイル中に作成される一時ファイルを自動的に削除しないで保持します。

-L<ディレクトリ>

ld(1) がライブラリを検索するディレクトリのリストに <ディレクトリ> を付け加えます。このオプションとその引数は ld に渡されます。

-l<名前>

ld がオブジェクトライブラリ lib <名前> .so、または lib <名前> .a をリンクの対象とします。シンボルは左から右へ解決されるため、コマンド行でのライブラリの指定順が重要になります。

このオプションは <ソースファイル> 引数の後に指定してください。

-mc

オブジェクトファイルの .comment セクションから重複している文字列を削除します。-mc フラグを使用すると、mcs -c が起動されます。

-misalign

(SPARC) -misalign は、-xmemalign=1i と同義です。「-xmemalign=ab」を参照してください。

-misalign2

(SPARC) -misalign2 は、-xmemalign=2i と同義です。「-xmemalign=ab」を参照してください。

-mr

オブジェクトファイルの .comment セクションからすべての文字列を削除します。このフラグを使用すると、mcs -d -a が起動されます。

-mr,<文字列>

オブジェクトファイルの .comment セクションからすべての文字列を削除して
<文字列> を挿入します。<文字列> に空白が含まれている場合は二重引用符で括ります。
<文字列> がなければ .comment セクションは空になります。このオプションは
-da<文字列> として mcs に渡されます。

-mt

-D_REENTRANT -lthread に展開されるマクロオプションです。ユーザー固有のマルチスレッドコーディングを行なっている場合は、コンパイルとリンクのときに必ず
-mt オプションを使用してください。マルチプロセッサシステム上でこのオプションを使用すると、生成された実行可能ファイルの実行速度が早くなります。シングルプロセッサシステム上では、実行速度は通常よりも遅くなります。

-native

このオプションは、-xtarget=native と同義です。

-nofstore

(x86) 浮動小数点式または関数がある変数に代入されるか、より小さい型の浮動小数点にキャストされる場合に、代入値の左側に表記される型に変換せずに、コンパイラがその値をレジスタに残すようにします。「-fstore」を参照してください。

-noqueue

ライセンスが得られない場合は、このコンパイル要求を待ち行列に入れないようにコンパイラに指示します。普通の状態では、コンパイラはライセンスを得られなければそれが得られるまで待機しますが、このオプションを使用するとコンパイラはただちに戻ります。

-O

-xO2 と同じです。

-o <出力ファイル>

出力ファイルに (デフォルトの a.out の代わりに) <出力ファイル> という名前を付けます。cc はソースファイルに上書きしないので、<出力ファイル> には <ソースファイル> と同じ名前は使用できません。このオプションと引数は、ld(1) に渡されます。

-P

ソースファイルのプリプロセッサ処理のみを行い、.i 接尾辞の付いたファイルに結果を出力します。-E オプションと異なり、出力ファイルに C のプリプロセッサ行番号付け情報は含まれません (「-E」を参照してください)。

-p

prof(1) がプロファイルデータを収集するためのオブジェクトコードを作成します。プログラムを実行すると、実行時の記録機構が起動されます。プログラムが正常終了すると、この記録機構によって mon.out ファイルが作成されます。

-Q[y|n]

出力ファイルに識別情報を入れるかどうかを設定します。-Qy がデフォルトです。-Qy を指定すると、起動した各コンパイラツールの識別情報が出力ファイルの ·comment 部分に追加され、mcs でのアクセスが可能になります。これはソフトウェア管理に役立ちます。

-Qn を指定すると、この情報が抑制されます。

-qp

-p と同じです。

-R<ディレクトリ>[:<ディレクトリ>]

実行時リンカーが使用するライブラリ検索ディレクトリを渡します。リストが空でなければ、出力オブジェクトファイルに記録され、実行時リンカーに渡されます。

LD_RUN_PATH-R オプションの両方が指定されたときは、この -R オプションが優先されます。

-S

アセンブリ・ソースファイルを作成しますが、アセンブルは行いません。

-s

出力されるオブジェクトファイルからシンボリックデバッグのための情報をすべて削除して ld(1) に渡します。このオプションは、-g とともに指定することはできません。

-U<名前>

初期定義されているプリプロセッサシンボル <名前> をすべて削除します。このオプションは -D オプションと逆の働きをします。複数の -U オプションを指定することができます。

-V

コンパイラの実行時に各構成要素の名前とバージョン番号を表示します。

-v

より厳しい意味検査および他の lint に似た検査を行います。以下は支障なくコンパイルと実行ができるコードです。

#include <stdio.h>
main(void)
{
     printf("Hello World.\n");
}

-v を使用すると、コンパイルは行われますが以下の警告が表示されます。

"hello.c", 5 行目: 警告: 関数中に return 文がありません: main

-vlint(1) が発する警告をすべて表示するわけではありません。lint で上記の例を実行すると確認することができます。

-Wc,<引数>

指定されたコンパイラ構成要素 c に、<引数> を渡します。各引数はコンマで区切ります。すべての -W 引数は、通常のコマンド行の引数の後に渡されます。コンマの前にバックスラッシュ (\) 文字を置いてエスケープすることにより、コンマを引数の一部にできますc は以下のいずれかです。

構成要素の一覧については 「C コンパイラシステムの構成要素」を参照してください。

表 2-4   c の値
a アセンブラ (fbe) (gas)
c C コードジェネレータ (cg) (SPARC)
d cc ドライバ1
h 中間コード翻訳 (ir2hf)(Intel)
i 手続き間の分析 (ube_ipa)(Intel)
l リンクエディタ (ld)
m mcs
p プリプロセッサ (cpp)
u C コードジェネレータ (ube)(Intel)
0 コンパイラ (acomp) (ssbd, SPARC)
2 オプティマイザ (iropt) (SPARC)
1 この章に示されている cc オプションは -wd を使用して C コンパイラに渡すことはできません。


c には以下のいずれかの値を指定します。

-w

コンパイラの警告メッセージを抑制します。

このオプションは error_messages プラグマを無効にします。

-X[a|c|s|t]

以下の各 -X オプションは ANSI/ISO C に準拠する度合いを指定します (大文字と小文字を区別してください)。デフォルトのモードは -Xa です。ANSI/ISO C と K&R C との違いについては、300 ページの「K&R Sun C と Sun ANSI/ISO C との違い」を参照してください。

-Xa

(a = ANSI) これは、コンパイラのデフォルトのモードです。ANSI C に K&R C との拡張互換性を持たせます。ANSI C に従って意味処理を変更します。同じ言語構造に対して ANSI C と K&R C の意味処理が異なる場合は ANSI C に準拠した解釈を行います。-Xa オプションを -xtransition オプションと併せて使用すると、矛盾に関する警告が出力されます。-Xa を指定すると事前定義されたマクロ __STDC__ の値は 0 になります。

-Xc

(c = conformance) ANSI/ISO C にない言語構造を使用しているプログラムに対してエラーや警告を発行します。このオプションは ANSI C に最大限に準拠するもので、K&R C との拡張互換性はありません。-Xc を指定すると事前定義されたマクロ __STDC__ の値は 1 になります。

-Xs

(s = K&R C) ANSI/ISO C と K&R C の間で動作が異なるすべての言語構造に対して警告を発行します。K&R C と互換性のあるすべての機能がコンパイルされます。このオプションでは前処理用に cpp が呼び出され、__STDC__ は定義されません。-Xs オプションを指定したコンパイルの効果については、「Sun C と ANSI/ISO C における -Xs オプションの相違点」を参照してください。

-Xt

(t = transition) ANSI/ISO C に K&R C との拡張互換性を持たせます。ANSI/ISO C に従った意味処理の変更は行いません。同じ言語構造に対して ANSI/ISO C と K&R C の意味処理が異なる場合、K&R C に準拠した解釈を行います。-Xt オプションを -xtransition オプションと併せて使用すると、矛盾に関する警告が出力されます。-Xt を指定すると事前定義されたマクロ __STDC__ の値は 0 になります。

-x386

(x86) 80386 プロセッサ用に最適化します。

-x486

(x86) 80486 プロセッサ用に最適化します。

-xa

基本ブロックが実行される回数を数えるコードを挿入します。このオプションは古い形式の、tcov 用基本ブロックプロファイリングです。新しい形式のプロファイリングについては 「-xprofile=p」を、また詳細については tcov(1) マニュアルページおよび『プログラムのパフォーマンス解析』を、それぞれ参照してください。

-xa すべての .c ファイルに対して、(正常終了時に) .d ファイルを作成する実行時の記録機構を起動します。この .d ファイルには対応するソースファイルの実行データが累積されます。ソースファイルに対して tcov(1) を実行すると、プログラムに関する統計情報を生成することができます。このオプションは最適化を伴うので、-g と同時に使用することはできません。

TCOVDIR 環境変数をコンパイル時に設定すると、.d ファイルを格納するディレクトリを指定することができます。この変数を設定しない場合には、.d ファイルは .c ファイルと同じディレクトリ内に格納されたままになります。

-xprofile=tcov-xa オプションは、同じ実行可能ファイル内で共存できます 。すなわち、-xprofile=tcov でコンパイルされたファイルと -xa でコンパイルされたファイルをリンクすることができます。1 つのファイルを両方のオプションでコンパイルすることはできません。

-xarch=isa

命令セットアーキテクチャ (Instruction Set Architecture、ISA) を指定します。

-xarch のキーワード、isa に指定できるアーキテクチャを次の表 2-4 に示します。

表 2-5   -xarch ISA のキーワード
プラットフォーム 有効な -xarch キーワード
SPARC
generic、native、v7、v8a、v8、v8plus、
v8plusa、v8plusb、v9、v9a、v9b
x86
generic、386、pentium_pro


-xarch は単独で使用できますが、本来は -xtarget オプションの展開の一部です。特定の -xtarget オプションで設定されている -xarch の値を上書きするために使用することもできます。次に例を示します。

% cc -xtarget=ultra2 -xarch=v8plusb ...

この例では、-xtarget=ultra2 によって設定されている -xarch=v8-xarch=v8plusb によって上書きされます。

このオプションを最適化と併せて使用する場合、適切なアーキテクチャを選択すると、そのアーキテクチャ上での実行パフォーマンスを向上させることができます。不適切なアーキテクチャを選択すると、バイナリプログラムがその対象プラットフォーム上で実行できなくなることがあります。

SPARC のみ

次の表は、指定された -xarch オプションでコンパイルされた後さまざまな SPARC プロセッサで実行される実行可能ファイルのパフォーマンスを示しています。この表は、特定の対象マシン上の実行可能ファイルに最も適した -xarch オプションを調べるために利用してください。初めにマシンの範囲を決め、続いて複数のバイナリを管理する手間と、より新しいマシンから最大限のパフォーマンスを引き出す効果を比較してみるとよいでしょう。

表 2-6   -xarch の組み合わせ




SPARC マシンの命令セット


V7 V8a V8 V9 (Sun 以外のプロセッサ V9 (Sun のプロセッサ) V9b

v7 N S S S S S

v8a PD N S S S S
-xarch
コンパイルオプション
v8 PD PD N S S S
v8plus NE NE NE N S S
v8plusa NE NE NE ** N S
v8plusb NE NE NE ** NE N

v9 NE NE NE N S S

v9a NE NE NE ** N S

v9b NE NE NE ** NE N
** 注: この命令セットでコンパイルされる実行可能ファイルは、Sun 以外の V9 プロセッサチップ上で仕様どおり機能するか、あるいはまったく機能しません。実行可能ファイルがその対象マシンで動作するかどうかについては、ハードウェアベンダーに問い合わせてください。


v8plus または v8plusa 命令セットを使用して実行可能ファイルをコンパイルしようと考えている場合は、代わりに v9 または v9a によるコンパイルを考慮してください。v8plusv8plusa オプションは、64 ビットプログラム対応の Solaris 7 がリリースされる以前に、プログラムで SPARC V9 と UltraSPARC 機能の一部が利用できるように提供されたものです。v8plus または v8plusa オプションでコンパイルされたプログラムは、SPARC V8 以前のマシンには移植できません。これらのプログラムは、v9 または v9a でそれぞれコンパイルし直すと、SPARC V9 と UltraSPARC の全機能を十分利用できるようになります。v8plusv8plusa の制限については、ホワイトペーパー『The V8+ Technical Specification』(パーツ番号 802-7447。購入先から入手可) で説明されています。

どの値を使用しても、生成された実行可能ファイルはアーキテクチャが古くなるほど実行速度が遅くなります。また、これらの命令セットアークテクチャの多くで 4 倍精度 (REAL*16long double) の浮動小数点命令を使用できますが、コンパイラは生成するコード内ではこれらの命令を使用しません。

-xarch のキーワード、isa に指定できるアーキテクチャを次の表 2-4 に示します。

表 2-7   SPARC プラットフォームの -xarch 値 
isa の値 意味
generic

ほとんどのシステムで良好なパフォーマンスを得られるようにコンパイルします。 これはデフォルトです。このオプションは、どのプロセッサでも大きく性能を落とさず、また、ほとんどのプロセッサで良好なパフォーマンスを得られるような最良の命令セットを使用します。「最良な命令セット」の内容は、新しいリリースごとに調整される可能性があります。
native 現在のシステムで良好な性能を得られるようにコンパイルします。 これは -fast オプションのデフォルトです。現在コンパイラを実行しているシステムのプロセッサに最も適した設定を選択します。
v7 SPARC-V7 ISA 用にコンパイルします。 V7 ISA 上で良好なパフォーマンスを得るためのコードを生成します。これは、V8 ISA 上で最良なパフォーマンスを得るための最良の命令セットと同じですが、整数の muldiv 命令、および fsmuld 命令は含まれていません。
例: SPARCstation 1、SPARCstation 2
v8a
V8a 版の SPARC-V8 ISA 用にコンパイルします。 定義上、V8a は V8 ISA を意味します。ただし、fsmuld 命令は含まれていません。 V8a ISA 上で良好なパフォーマンスを得るためのコードを生成します。
例: microSPARC I チップアーキテクチャに基づくすべてのシステム
v8
SPARC-V8 ISA 用にコンパイルします。 V8 アーキテクチャ上で良好なパフォーマンスを得るためのコードを生成します。
例: SPARCstation 10
v8plus
V8plus 版の SPARC-V9 ISA 用にコンパイルします。 定義上、V8plus は V9 ISA を意味します。ただし、V8plus ISA 仕様で定義されている 32 ビットサブセットに限定されます。さらに、VIS (Visual Instruction Set) と実装に固有な ISA 拡張機能は含まれていません。

  • V8plus ISA 上で良好なパフォーマンスを得るためのコードを生成します。

  • 生成されるオブジェクトコードは SPARC-V8 + ELF32 形式であり、Solaris UltraSPARC 環境でのみ実行できます。つまり、V7 または V8 のプロセッサ上では実行できません。


    例: UltraSPARC チップアーキテクチャに基づくすべてのシステム
  • v8plusa
    
    V8plusa 版の SPARC-V9 ISA 用にコンパイルします。 定義上、V8plusa は V8plus アーキテクチャ + VIS (Visual Instruction Set) バージョン 1.0 + UltraSPARC 拡張機能を意味します。

  • UltraSPARC アーキテクチャ上で良好なパフォーマンスを得るためのコードを生成します。ただし、V8plus 仕様で定義されている 32 ビットサブセットに限定されます。

  • 生成されるオブジェクトコードは SPARC-V8 + ELF32 形式であり、Solaris UltraSPARC 環境でのみ実行できます。つまり、V7 または V8 のプロセッサ上では実行できません。

    例: UltraSPARC チップアーキテクチャに基づくすべてのシステム
  • v8plusb
    
    UltraSPARC-III 拡張機能を持つ、V8plusb 版の SPARC-V8 plus ISA 用にコンパイルします。 UltraSPARC アーキテクチャ + VIS (Visual Instruction Set) バージョン 2.0 + UltraSPARC-III 拡張機能用のオブジェクトコードを生成します。

  • 生成されるオブジェクトコードは SPARC-V8 + ELF32 形式です。Solaris UltraSPARC-III 環境でのみ実行できます。

  • UltraSPARC-III アーキテクチャ上で良好なパフォーマンスを得るための最良のコードを使用します。

  • v9
    
    SPARC-V9 ISA 用にコンパイルします。 V9 SPARC アーキテクチャ上で良好なパフォーマンスを得るためのコードを生成します。

  • 生成される .o オブジェクトファイルは ELF64 形式です。このファイルは同じ形式の SPARC-V9 オブジェクトファイルとしかリンクできません。

  • 生成される実行可能ファイルは、64 ビット対応の Solaris オペレーティング環境が動作する、64 ビットカーネルを持つ UltraSPARC プロセッサ上でしか実行できません。

  • -xarch=v9 は、64 ビット対応の Solaris オペレーティング環境でコンパイルする場合にのみ使用できます。

  • v9a
    
    UltraSPARC 拡張を持つ SPARC-V9 ISA 用にコンパイルします。 SPARC-V9 ISA に VIS (Visual Instruction Set) と UltraSPARC プロセッサに固有の拡張機能を追加します。V9 SPARC アーキテクチャ上で良好なパフォーマンスを得るためのコードを生成します。

  • 生成される .o オブジェクトファイルは ELF64 形式です。このファイルは同じ形式の SPARC-V9 オブジェクトファイルとしかリンクできません。

  • 生成される実行可能ファイルは、64 ビット対応の Solaris オペレーティング環境が動作する、64 ビットカーネルを持つ UltraSPARC プロセッサ上でしか実行できません。

  • -xarch=v9a は、64 ビット対応の Solaris オペレーティング環境でコンパイルする場合にのみ使用できます。

  • v9b
    
    
    
    UltraSPARC-III 拡張機能を持つ SPARC-V9 ISA 用にコンパイルします。 V9a 版の SPARC-V9 ISA に UltraSPARC-III 拡張と VIS バージョン 2.0 を追加します。Solaris UltraSPARC-III 環境で良好なパフォーマンスを得るためのコードを生成します。

  • 生成される .o オブジェクトファイルは SPARC-V9 ELF64 形式です。このファイルは同じ形式の SPARC-V9 オブジェクトファイルとしかリンクできません。

  • 生成される実行可能ファイルは、64 ビット対応の Solaris オペレーティング環境が動作する、64 ビットカーネルを持つ UltraSPARC-III プロセッサ上でしか実行できません。

  • -xarch=v9b は、64 ビット対応の Solaris オペレーティング環境でコンパイルする場合にのみ使用できます。


  • x86 のみ

    表 2-8    x86 の -xarch
    isa の値 意味
    generic 命令セットを Intel x86 アーキテクチャに限定します。386 オプションと同義です。
    386 命令セットを Intel 386/486 アーキテクチャに限定します。
    pentium 命令セットを pentium アーキテクチャに限定します。
    pentium_pro 命令セットを pentium_pro アーキテクチャに限定します。


    -xautopar

    (SPARC) 複数プロセッサの自動並列化を有効にします。依存性の解析 (ループの繰り返し内部でのデータ依存性の解析) およびループ再構成を実行します。最適化が -xO3 以上でない場合は -xO3 に上げられ、警告が出されます。

    独自のスレッド管理を行なっている場合には、-xautopar を使用しないでください。

    Sun WorkShop には、マルチプロセッサ用の C オプションを使用するのに必要なライセンスが含まれています。実行速度を高めたければ、マルチプロセッサシステムが必要です。シングルプロセッサシステムでは、通常、生成されたバイナリの実行速度は低下します。

    使用できるプロセッサの数を調べるには、psrinfo コマンドを使用してください。

    % psrinfo
    
    0   on-line			since 01/12/95 10:41:54
    
    1   on-line			since 01/12/95 10:41:54
    
    3   on-line			since 01/12/95 10:41:54
    
    4   on-line			since 01/12/95 10:41:54
    

    複数のプロセッサを使用するには、PARALLEL 環境変数を設定してください。デフォルトは 1 です。

    -xautopar を使用してコンパイルとリンクを 1 度に実行する場合、リンクには自動的にマイクロタスキング・ライブラリおよびスレッドに対して安全な C 実行時ライブラリが含まれます。-xautopar を使用してコンパイルとリンクを別々に実行する場合、リンクにも -xautopar を指定しなければなりません。

    -xCC

    C++ 形式のコメントを受け入れます。"//" がコメントの開始を示すために使えるようになります。

    -xcache=c

    オプティマイザ用のキャッシュ特性を定義します。c には以下のいずれかを指定します。

    si、li、ai の定義は以下のとおりです。

    si レベル i のデータキャッシュのサイズ (キロバイト単位)
    li レベル i のデータキャッシュのラインサイズ (バイト単位)
    ai レベル i のデータキャッシュの結合特性


    このオプションは単独で指定できますが、-xtarget オプションの展開の一部です。
    -xtarget オプションによって指定された値を変更することが主な目的です。

    このオプションは、オプティマイザが使用できるキャッシュ特性を指定します。特定のキャッシュ特性が必ず使用されるわけではありません。次に、xcache の値を示します。

    表 2-9   -xcache の値
    意味
    generic ほとんどの x86、SPARC の各アーキテクチャで良好なパフォーマンスを得るためのキャッシュ特性を定義します。 これはデフォルトです。ほとんどの SPARC プロセッサに良好なパフォーマンスを提供し、どの x86、SPARC の各プロセッサでも著しいパフォーマンス低下が生じないようなキャッシュ特性を使用するように、コンパイラに指示します。 これらの最高のタイミング特性は、新しいリリースごとに、必要に応じて調整されます。
    s1/l1/a1 レベル 1 のキャッシュ特性を定義します。
    s1/l1/a1:s2/l2/a2 レベル 1 と 2 のキャッシュ特性を定義します。
    s1/l1/a1:s2/l2/a2:s3/l3/a3 レベル 1、2、3 のキャッシュ特性を定義します。


    例: -xcache=16/32/4:1024/32/1 では、以下の内容を指定します。

    レベル 1 のキャッシュ レベル 2 のキャッシュ
    16K バイト 1024K バイト
    32 バイトの行サイズ 32 バイトの行サイズ
    4 面結合 直接マップ結合


    -xcg[89|92]

    (SPARC)

    -xcg89 は、「-xarch=v7 -xchip=old -xcache=64/32/1」を意味する
    マクロです。
    -xcg92 は、「-xarch=v8 -xchip=super -xcache=16/32/4:1024/32/1」を意味するマクロです。

    -xchar_byte_order=o

    複数文字からなる定数である文字を指定されたバイト順序で配置することにより、整定数を生成します。o には、次の値のいずれかを指定できます。

    -xchip=c

    オプティマイザ用のプロセッサを指定します。

    c には、generic、old、super、super2、micro、micro2、hyper、hyper2、powerup、ultraultra2ultra2i386、486、pentium、pentium_pro、603、604 のいずれかを指定します。

    このオプションは、処理対象となるプロセッサを指定することによって、タイミング特性を指定します。

    このオプションは単独で指定できますが、-xtarget オプションのマクロ展開の一部です。-xtarget オプションによって指定された値を変更するのが主な目的です。

    xchip=c は以下のものに影響を与えます。

    -xcode=v

    (SPARC) コードアドレス空間を指定します。v は次のいずれか 1 つでなければなりません。

    abs32 32 ビット絶対アドレスを生成します。コード、データ、および bss を合計したサイズは 2**32 バイトに制限されます。これは 32 ビットアーキテクチャ (-xarch=generic, v7, v8, v8a, v8plus, v8plusa) でデフォルトです。
    abs44 44 ビット絶対アドレスを生成します。コード、データ、および bss を合計したサイズは 2**44 バイトに制限されます。64 ビットアーキテクチャ (-xarch=v9, v9a) だけで利用できます。
    abs64 64 ビット絶対アドレスを生成します。64 ビットアーキテクチャ
    (-xarch=v9, v9a) だけで利用できます。
    pic13 共有ライブラリで使用する位置独立コード を生成します。-Kpic と同義です。32 ビットアーキテクチャでは最大 2**11 まで、64 ビットアーキテクチャでは最大 2**10 までの固有の外部シンボルを参照できます。 -xcode=pic13 コマンドは、大域オフセットテーブルのサイズが 8K バイトに制限されることを除けば、-xode=pic32 に似ています。
    pic32 共有ライブラリで使用する位置独立コード (大規模モデル) を生成します。-KPIC と同義です。32 ビットアーキテクチャでは最大 2**30 まで、64 ビットアーキテクチャでは最大 2**29 までの固有の外部シンボルを参照できます。
    大域データへの参照はそれぞれ、大域オフセットテーブル内のポインタの間接参照として生成されます。各関数呼び出しは、手続きリンケージテーブルを使用して PC の相対アドレッシングモードで生成されます。ごくまれに -xcode=pic32 で大域データオブジェクトが多くなり過ぎることがありますが、その場合は大域オフセットテーブルは 32 ビットアドレス範囲も使用します。


    SPARC V7 と V8 の場合のデフォルトは -xcode=abs32 です。SPARC V9 と UltraSPARC V9 (-xarch=v9|v9a) の場合のデフォルトは -xcode=abs64 です。

    64 ビット Solaris 7 上で -xarch=v9 または v9a を使用して共有動的ライブラリを構築するときは、-xcode=pic13 または -xcode=pic32 オプションを指定しなければなりません。

    -xcode=pic13 および -xcode=pic32 では、わずかですが、次の 2 つのパフォーマンス上の負担がかかります。

    こうした負担があるとしても、-xcode=pic13 あるいは -xcode=pic32 を使用すると、ライブラリコードを共有できるため、必要となるシステムメモリーを大幅に減らすことができます。-xcode=pic13 あるいは -xcode=pic32 でコンパイルした共有ライブラリを使用するすべてのプロセスは、そのライブラリのすべてのコードを共有できます。共有ライブラリ内のコードに非 pic (すなわち、絶対) メモリー参照が 1 つでも含まれている場合、そのコードは共有不可になるため、そのライブラリを使用するプログラムを実行する場合は、その都度、コードのコピーを作成する必要があります。

    .o ファイルが -xcode=pic13 または -xcode=pic32 でコンパイルされたかどうかを調べるには、次のように nm コマンドを使用すると便利です。

    % nm <ファイル名>.o | grep _GLOBAL_OFFSET_TABLE_ U _GLOBAL_OFFSET_TABLE_
    

    位置独立コードを含む .o ファイルには、_GLOBAL_OFFSET_TABLE_ への未解決の外部参照が含まれます。このことは、英字の U で示されます。

    -xcode=pic13 または -xcode=pic32 を使用すべきかどうかを判断するには、nm を使用して、共有ライブラリで使用または定義されている明確な大域および静的変数の個数を確認します。_GLOBAL_OFFSET_TABLE_ のサイズが 8,192 バイトより小さい場合は、-Kpic を使用できます。そうでない場合は、-xcode=pic32 を使用する必要があります。

    -xcrossfile[=n]

    (SPARC) ソースファイル間の最適化とインライン化を有効にします。n を指定する場合は、0、1、2 のいずれかです。

    通常、コンパイラの解析のスコープは、コマンド行上の各ファイルに制限されます。たとえば、-xO4 の自動インライン化は、同じソースファイル内で定義および参照されるサブプログラムに制限されます。

    -xcrossfile を指定すると、コンパイラは、コマンド行に指定したすべてのファイルを (1 つのソースファイルに連結したように) 解析します。-xcrossfile は、-xO4 または -xO5 と併用したときだけ有効です。

    このコンパイルから生成されるファイルは、インライン化のため相互に依存しています。したがって、1 つのプログラムにリンクするときには、1 つの単位として使用しなければなりません。任意の 1 つのルーチンを変更し、そのファイルを再コンパイルした場合は、すべてのファイルを再コンパイルしなければなりません。つまり、このオプションを使用すると、メークファイルの構成にも影響があります。

    デフォルトは xcrossfile=0 で、ファイル間の最適化は行われません。-xcrossfile-xcrossfile=1 と同義です。

    -xdepend

    (SPARC) ループの繰り返し内部でのデータ依存性の解析およびループ再構成を実行します。ループの再構成には、ループの交換、ループの融合、スカラーの置換、無意味な配列への代入の除去が含まれます。最適化が -xO3 以上でない場合、-xO3 に上げられ、警告が出されます。

    -xautopar または -xparallel には依存性の解析も含まれています。依存性の解析はコンパイル時に実行されます。

    依存性の解析はシングルプロセッサシステムで役立つことがあります。ただし、シングルプロセッサシステムに -xdepend を試みる場合は、-xautopar または
    -xexplicitpar を使用しないでください。これらのいずれかが有効になっていると、
    -xdepend の最適化はマルチプロセッサシステムについて実行されます。

    -xe

    ソースファイル上で構文および意味検査のみを行います。オブジェクトコードや実行可能コードは生成しません。

    -xexplicitpar

    (SPARC) #pragma MP 指令の指定にもとづいて並列化コードを生成します。ユーザー自身が、依存性の解析を行い、ループの繰り返し内部でのデータの依存性を解析および指定します。ソフトウェアは指定されたループを並列化します。最適化が -xO3 以上でない場合、-xO3 に上げられ、警告が出されます。独自のスレッド管理を行なっている場合には、-xexplicitpar を使用しないでください。

    Sun WorkShop には、マルチプロセッサ用の C オプションを使用するのに必要なライセンスが含まれます。コードの実行速度を高めたければ、このオプションにはマルチプロセッサシステムが必要です。シングルプロセッサシステムでは、通常、生成されたコードの実行速度は低下します。

    ユーザーが指定したループに依存関係が含まれていると、正しい結果が得られないことがあります。しかも、結果が実行するごとに異なることがあります。なお、警告は出力されません。縮約ループには、明示的な並列プラグマは適用しないでください。明示された並列化は行われますが、ループの縮約は適用されないため、誤った結果が生じる場合があります。

    要約すると、明示的な並列化には次の操作を実行します。

    ループの直前に並列プラグマを挿入する例を示します。

    #pragma MP taskloop
    
      for (j=0; j<1000; j++){
    
      ...
    
      }
    

    -xexplicitpar を使用してコンパイルとリンクを一度に実行する場合、リンクには自動的にマイクロタスキング・ライブラリおよびスレッドに対して安全な C 実行時ライブラリが含まれます。-xexplicitpar を使用してコンパイルとリンクを別々に実行する場合、リンクにも -xexplicitpar を指定しなければなりません。

    -xF

    アナライザを使用した実行可能ファイルのパフォーマンス解析ができるように準備します(analyzer(1) のマニュアルページを参照)。関数レベルで順序付けし直すことができるコードを作成します。ファイル内の関数はそれぞれ別々のセクションに配置されます。たとえば関数 foo()bar() は、それぞれセクション .text%foo とセクション .text%bar に配置されます。実行可能ファイル内の関数の順序付けは、-xFld-M オプション (ld(1) のマニュアルページを参照) と併用することによって制御できます。またこのオプションにより、アセンブラはデータ収集に必要なデバッグ情報をオブジェクトファイルの中に作成します。

    -xhelp=f

    オンラインヘルプ情報を表示します。

    f には、flags、readme、errors のいずれか 1 つを指定してください。

    -xhelp=flags は、コンパイラオプションの要約を表示します。

    -xhelp=readme は、README ファイルを表示します。

    -xhelp=errors は、エラーおよび警告メッセージファイルを表示します。

    -xildoff

    インクリメンタルリンカーを使用せず、強制的に ld を起動します。-g オプショ ンを使用しない場合、-G オプションを使用した場合、またはコマンド行にソースファイルが存在する場合は、このオプションがデフォルトになります。このデフォルトを使用したくない場合は、-xildon オプションを指定してください。

    -xildon

    強制的に、インクリメンタルリンカー (ild) をインクリメンタルモードで起動します。
    -g オプションを使用し 、-G オプションを使用せず、かつ、コマンド行にソースファイルを指定しない場合は、このオプションがデフォルトです。このデフォルトを使用したくない場合は、-xildoff オプションを指定してください。

    -xinline=[{%auto,<関数>,no%<関数>}[,{%auto,<関数>,no%<関数>}]...]

    指定された関数だけをインライン化します。-xinline= には、関数名または no%<関数> の値をコンマで区切ったもの、または値 %auto を指定できます。no%<関数> を指定すると、コンパイラは <関数> に指定されたものはインライン化しません。%auto を指定すると、ソースファイル内のすべての関数を自動的にインライン化しようとします。

    -xO3 を指定してコンパイルする場合は、-xinline を使用して関数の一部またはすべてをインライン化することで最適化の度合いを高めることができます。-xO3 レベルの最適化は、インライン化を含みません。

    -xO4 を指定してコンパイルする場合は、-xinline を使用してインライン化対象を指定したルーチンだけに制限することで最適化の度合いを減らすことができます。-xO4 が指定されると、コンパイラはソースファイル内に定義された関数に対する参照をすべてインライン化しようとします。-xinline= とだけ指定して、関数名も %auto も指定しない場合は、ソースファイル内のルーチンはインライン化されません。

    次のいずれかの条件に該当する場合、ルーチンはインライン化されません。警告は出力されませんので注意してください。

    -xlibmieee

    例外が起きた場合の数学ルーチンの戻り値を強制的に IEEE 754 形式にします。この場合、例外メッセージは表示されないので、errno には依存しないでください。

    -xlibmil

    libm 用のインライン展開テンプレートをインクルードします。このオプションによって浮動小数点演算用オプションとプラットフォームに適したアセンブリ言語のインラインテンプレートが選択されます。

    -xlic_lib=sunperf

    (SPARC) Sun 提供のパフォーマンスライブラリにリンクします。

    -xlicinfo

    ライセンスシステムについての情報を返します。特に、ライセンスサーバーの名前と、ライセンスを検査されたユーザーのユーザー ID を返します。このオプションは、コンパイルを要求したり、ライセンスを検査したりはしません。

    -xloopinfo

    (SPARC) 並列化されているループとされていないループを示します。また、ループを並列化しない理由を簡単に説明します。-xloopinfo オプションは、-xautopar
    -xparallel、または -xexplicitpar が指定されている場合にのみ有効です。指定されていない場合は、コンパイラは警告を出します。

    Sun WorkShop には、マルチプロセッサ 用の C オプションを使用するのに必要なライセンスが含まれます。コードの実行速度を高めたければ、このオプションにはマルチプロセッサシステムが必要です。シングルプロセッサシステムでは、通常、生成されたコードの実行速度は低下します。

    -xM

    指定した C プログラムに対してプリプロセッサだけを実行します。その際、メークファイル用の依存関係を生成してその結果を標準出力に出力します (メークファイルと依存関係についての詳細は make(1) のマニュアルページを参照してください)。

    例:

    #include <unistd.h>
    
    void main (void)
    
    {}
    

    この例で出力されるものは、次のとおりです。

    e.o: e.c
    e.o: /usr/include/unistd.h
    e.o: /usr/include/sys/types.h
    e.o: /usr/include/sys/machtypes.h
    e.o: /usr/include/sys/select.h
    e.o: /usr/include/sys/time.h
    e.o: /usr/include/sys/types.h
    e.o: /usr/include/sys/time.h
    e.o: /usr/include/sys/unistd.h

    -xM1

    -xM と同様に依存関係を収集しますが、/usr/include ファイルは除きます。次に例を示します。

    more hello.c
    
    #include<stdio.h>
    
    main()
    
    {
    
     (void)printf("hello\n");
    
    }
    
    cc -xM hello.c
    
    hello.o: hello.c
    
    hello.o: /usr/include/stdio.h
    

    -xMl オプションを使用してコンパイルすると、ヘッダーファイルの依存関係の出力が抑制されます。

    cc -xM1 hello.c
    
    hello.o: hello.c
    

    -xMerge

    データセグメントをテキストセグメントにマージします。このコンパイルで生成するオブジェクトファイルで初期化されるデータは読み取り専用なので、ld -N でリンクしていない限り、プロセスどうしで共有することができます。

    -xmaxopt=off, 1, 2, 3, 4, 5

    このコマンドは、pragra opt のレベルを指定されたレベルに限定します。デフォルト値は -xmaxopt=off であり、pragma opt は無視されます。引数を指定せずに -xmaxopt を指定すると、-xmaxopt=5 を指定したことになります。

    -xmemalign=ab

    想定するメモリー境界整列の最大値と、境界整列に失敗したデータがアクセスされた際の動作を指定します。a (境界整列) と b (動作) の両方の値が必要です。a は、想定する最大メモリー境界整列です。b は、境界整列に失敗したメモリーへのアクセスに対する動作です。次に、-memalign の境界整列と動作の値を示します。

    表 2-11   -xmemalign の境界整列と動作の値
    a
    b
    1 最大 1 バイトの境界整列 i アクセスを解釈し、実行を継続する
    2 最大 2 バイトの境界整列 s シグナル SIGBUS を発生させる
    4 最大 4 バイトの境界整列 f 4 バイト以下の境界整列に対してシグナル SIGBUS を発生させ、それ以外ではアクセスを解釈して実行を継続する
    8 最大 8 バイトの境界整列
    16 最大 16 バイトの境界整列


    コンパイル時に境界整列が判別できるメモリーへのアクセスの場合、コンパイラはそのデータの境界整列に適したロードおよびストア命令を生成します。

    コンパイル時に境界整列が判別できないメモリーへのアクセスの場合、コンパイラは必要なロードおよびストア命令を生成するための境界整列を想定する必要があります。

    -xmemalign フラグを使用すると、このような判別不可能な状況の時にコンパイラが想定するデータの最大メモリー境界整列を指定できます。-xmemalign フラグは、境界整列に失敗したメモリーへのアクセスが実行時に発生した場合に行われるエラー動作 (処理) についても指定できます。

    次に、-xmemalign フラグがまったく指定されていない場合にのみ適用される -xmemalign のデフォルト値を示します。

    次に、-xmemalign フラグが指定されているが値を持たない場合のデフォルト値を示します。

    次の表は、-xmemalign で処理できるさまざまな境界整列の状況とそれに適した -xmemalign 指定を示しています。

    表 2-12   -xmemalign の例
    コマンド 状況
    -xmemalign=1s 境界整列されていないデータへのアクセスが多いため、トラップ処理が遅すぎる
    -xmemalign=8i コード内に境界整列されていないデータへのアクセスが意図的にいくつか含まれているが、それ以外は正しい
    -xmemalign=8s プログラム内に境界整列されていないデータへのアクセスは存在しないと思われる
    -xmemalign=2s 奇数バイトへのアクセスが存在しないか検査したい
    -xmemalign=2i 奇数バイトへのアクセスが存在しないか検査し、プログラムを実行したい


    -xnolib

    デフォルトのライブラリリンクを行いません。つまり ld-l オプションを渡しません。通常は、cc ドライバが -lcld に渡します。

    -xnolib を使用する場合、すベての -l オプションをユーザーが渡さなければなりません。次に例を示します。

    % cc test.c -xnolib -Bstatic -lm -Bdynamic -lc
    

    このように指定すると、libm は静的にリンクされ、その他のライブラリは動的にリンクされます。

    -xnolibmil

    数学ライブラリのルーチンをインライン化しません。このオプションは -fast オプションの後に指定してください。以下に例を示します。

    % cc -fast -xnolibmil...
    

    -xO[1|2|3|4|5]

    オブジェクトコードを最適化します。O が大文字であることに注意してください。-xO オプションと -g オプションを組み合わせて使用すると、特定の範囲だけをデバッグすることができます。詳細は、『dbx コマンドによるデバッグ』の第 1 章の「最適化コードのデバッグ」を参照してください

    最適化のレベルは 1 から 5 のうちのいずれかです。使用するプラットフォームによって変わります。

    (SPARC)
    -xO1
    最小限の局所的な最適化 (ピープホール) を行います。

    -xO2
    基本的な局所的および大域的最適化を行います。ここでは帰納変数の削除、局所的および大域的な共通部分式の除去、算術の簡素化、コピー通達、定数通達、不変ループの最適化、レジスタの割り当て、基本ブロックのマージ、再帰的末尾の除去、無意味なコードの除去、末尾呼び出しの削除、複雑な式の展開を行います。

    -xO2 レベルでは、大域、外部、間接の参照または定義はレジスタに割り当てられません。これらの参照や定義は、あたかも volatile 型として宣言されたかのように取り扱われます。一般的にコードサイズは最も小さくなります。

    -xO3
    -xO2 に加えて、外部変数の参照または定義も最適化します。ループの展開やソフトウェアのパイプラインなども実行されます。-xO3 レベルではポインタ割り当ての結果を追跡しません。デバイスドライバをコンパイルするとき、またはシグナルハンドラの内部から外部変数を変更するプログラムをコンパイルするときは、volatile 型の修飾子を使用してオブジェクトが最適化されないようにする必要があります。一般的に -xO3 レベルではコードサイズが増大します。

    -xO4
    -xO3 に加えて、同一のファイルに含まれている関数の自動的なインライン化も行います。通常はこれによって実行速度が上がります。インライン化される関数を指定したい場合は、「-xinline=[{%auto,<関数>,no%<関数>}[,{%auto,<関数>,no%<関数>}]...]」を参照してください。

    このレベルでは、ポインタ代入の結果が追跡され、通常はコードサイズが増大します。

    -xO5
    最高レベルの最適化を行おうとします。この最適化アルゴリズムは、コンパイルの所要時間がより長く、または実行時間が確実に短縮化されるわけではないという短所がありますが、プロファイルフィードバックを伴って実行するとパフォーマンスをより向上させやすくなります。「-xprofile=p」を参照してください。

    (x86)
    -xO1
    デフォルトの最適化での 1 つの段階の他に、メモリーからの引数の事前ロードと、クロスジャンプ (末尾融合) を行います。

    -xO2
    高レベルと低レベルの両方の命令をスケジュールし、改良されたスピルコードの解析、ループ中のメモリー参照の除去、レジスタの寿命解析、高度なレジスタ割り当て、大域的な共通部分式の除去を行います。

    -xO3
    レベル 2 で行う最適化の他に、ループの削減と帰納変数の除去を行います。

    -xO4
    レベル 23 で行う最適化の他に、ループの展開と、可能であればスタックフレーム生成の回避、および同一ファイルに含まれる関数の自動インライン化を行います。この最適化を行うと、adbdbx のスタックトレースに誤りが発生する可能性があるので注意してください。

    -x05
    最高レベルの最適化を行います。この最適化アルゴリズムは、コンパイルの所要時間が長く、また実行時間が確実に短縮される保証がありません。たとえば、エクスポートされた関数が局所的に呼び出されるような関数の入口を設定する、スピルコードを最適化する、命令スケジュールを向上するための解析を追加するなどがあります。

    オプティマイザによりメモリーが不足した場合は、最適化のレベルを下げて現在の関数を再試行することによって処理を続行しようとします。これ以後の関数に対してはコマンド行オプションで指定されている本来のレベルで再開します。

    -xO3 または -xO4 で (1 つの関数内のコードが数千行になるような) 大きな関数を最適化する場合、膨大な量の仮想メモリーが必要になり、マシンのパフォーマンスが低下することがあります。

    -xP

    このモジュールで定義されたすべての K&R C 関数に対するプロトタイプを出力します。

    f()
    
    {
    
    }

    main (argc,argv)
    int argc;
    char *argv[];
    {
    }

    この例に対しては、次のとおりに出力します。

    int f(void);
    int main(int, char **);

    -xparallel

    (SPARC) ループを、コンパイラで自動的に並列化するとともに、プログラマの指定によって明示的に並列化します。-xparallel オプションはマクロで、-xautopar
    -xdepend-xexplicitpar 3 つをすべて指定することと同じです。ループの明示的な並列化では、誤った結果が生まれる危険性があります。最適化が -xO3 以上でない場合、-xO3 に上げられ、警告が出されます。

    独自のスレッド管理を行なっている場合には、-xparallel を使用しないでください。

    Sun WorkShop には、マルチプロセッサ 用の C オプションを使用するのに必要なライセンスが含まれます。コードの実行速度を高めたければ、このオプションにはマルチプロセッサシステムが必要です。シングルプロセッサシステムでは、通常、生成されたコードの実行速度は低下します。

    コンパイルとリンクを 1 度で実行すると、-xparallel によりマイクロタスキングライブラリとスレッドに対して安全な実行時ライブラリがリンクに含まれます。-xparallel オプションを使用してコンパイルとリンクを別々に実行する場合、リンクにも -xparallel オプションを指定しなければなりません。

    -xpentium

    (x86) Pentium プロセッサ用に最適化を行います。

    -xpg

    gprof(1) によるプロファイルの準備として、データを収集するためのオブジェクトコードを生成します。-xpg はプログラム実行時に記録機構を起動します。この記録機構は実行が正常終了すると、gmon.out ファイルを作成します。

    -xprefetch[=<>],<>

    (SPARC) 先読みをサポートするアーキテクチャ (UltraSPARC II など) で先読み命令を有効にします (-xarch=v8plusv9plusav9v9a のいずれか)。

    明示的な先読み命令の使用は、パフォーマンスが実際に向上する特別な場合に限定してください。

    <値> には、次のいずれかを指定します。

    意味
    auto 先読み命令の自動生成を有効にする
    no%auto 先読み命令の自動生成を無効にする
    explicit 明示的な先読みマクロを有効にする
    no%explicit 明示的な先読みマクロを無効にする
    yes -xprefetch=auto,explicit と同じ
    no -xprefetch=no%auto,no%explicit と同じ


    -xprefetch が指定されない場合のデフォルトは、-xprefetch=no%auto,explicit です。値なしで -xprefetch を指定すると、-xprefetch=auto,explicit と同じ意味になります。

    sun_prefetch.h ヘッダーファイルには、明示的な先読み命令を指定するためのマクロが含まれています。先読み命令は、実行コード中のマクロの位置にほぼ相当するところに挿入されます。

    -xprofile=p

    プロファイルのデータを収集、または最適化のためにプロファイルを使用します。

    (SPARC) p には、collect[:<名前>]、use[:<名前>]、または tcov のいずれか 1 つを指定します。

    このオプションを使用すると実行中に実行頻度データを収集して保存することができ、後 続の実行ではそのデータを使用してパフォーマンスを向上させることができます。このオプションは、最適化のレベルを指定した場合にのみ有効です。

    collect[:<名前>]

    実行後に -xprofile=use を指定してオプティマイザで使用するために、実行頻度データを収集して保存します。コンパイラによって文の実行頻度を測定するためのコードが生成されます。
    <名前> は、解析の対象となるプログラムの名前です。この名前はオプションです。
    <名前> の指定を省略すると、a.out が実行可能ファイルの名前とみなされます。
    -xprofile=collect: <名前> でコンパイルしたプログラムは実行時に、
    <名前>.profile というサブディレクトリを作成して、実行時のフィードバック情報を保存します。データは、このサブディレクトリの feedback ファイルに書き込まれます。プログラムを複数回実行すると、実行頻度データは feedback ファイルに累積され、前回の出力は消えません。

    use[:<名前>]

    実行頻度データを使用して、効果的に最適化を行います。
    collect:<名前> と同様に、<名前> はオプションです。これにより、プログラム名を指定できます。
    -xprofile=collect でコンパイルしたプログラムを前回実行したときに作成された feedback ファイルに保存された実行頻度のデータにもとづいて、プログラムが最適化されます。
    使用するソースファイルとコンパイラオプション (このオプションを除く) は、feedback ファイルの作成時に実行したコンパイル済みプログラムを作成する際に使用したものと、まったく同じでなければなりません 。-xprofile=collect:<名前> を使用してコンパイルする場合は、最適化コンパイルでも同じ名前 (-xprofile=use:<名前>) が使用されていなければなりません。

    tcov

    新しい形式の tcov を使用した基本ブロックカバレージ解析です。

    -xprofile=tcov オプションは、新しい形式の tcov 用基本ブロックプロファイリングです。 機能は -xa オプションと類似していますが、ヘッダーファイルにソースコードがあるプログラムまたは C++ テンプレートを使用するプログラムのデータを正確に収集します。古い形式のプロファイリングについては 「-xa」の節、tcov(1) のマニュアルページ、および『プログラムのパフォーマンス解析』を参照してください。

    時間計測コードの組み込みは -xa オプションの場合と同様に実行されますが、.d ファイルは生成されません。その代わりに、最終的な実行可能ファイルにもとづいた名前をもつファイルが 1 つだけ生成されます。たとえば、プログラムが
    /foo/bar/myprog.profile から実行されると、データファイルは
    /foo/bar/myprog.profile/myprog.tcovd に格納されます。

    -xprofile=tcov-xa オプションは、同じ実行可能ファイル内に指定することができます。すなわち、-xprofile=tcov でコンパイルされたファイルと -xa でコンパイルされたファイルが両方含まれたプログラムをリンクすることができます。1 つのファイルを両方のオプションでコンパイルすることはできません。

    tcov を実行する時点で、新しい形式のデータを使用させるように -x オプションを渡さなければなりません。これを渡さないと、古い.d ファイルがまだ存在する場合に tcov はデフォルトで古いファイルからデータを使用するため、予想に反した出力が生成されます。

    -xa オプションの場合とは異なり、TCOVDIR 環境変数はコンパイル時には影響力を持ちません。ただし、その値はプログラムの実行時に使用されます。詳細については
    tcov(1) のマニュアルページおよび『プログラムのパフォーマンス解析』を参照してください。


    注 - -xO4 または -xinline によるルーチンのインライン化が存在する場合、tcov カバレージ解析のデータが不正確になることがあります。

    -xreduction

    (SPARC) 自動並列化の間に縮約を認識させます。-xreduction オプションは、
    -xautopar または -xparallel のいずれかが指定されている場合にのみ有効です。

    並列化オプションを使用するには、WorkShop のライセンスが必要です。

    縮約の認識が有効な場合、コンパイラは内積、最大値発見、最小値発見などの縮約を並列化します。これらの縮約によって非並列化コードの場合とは、四捨五入の結果が異なります。

    -xregs=r

    (SPARC) 使用するレジスタを指定します。

    r には、以下の 1 つまたは複数の項目をコンマで区切って指定します。

    [no%]appl[no%]float

    no には % を付けてください。

    例: -xregs=appl, no%float

    表 2-13   -xregs の値
    意味
    appl g2g3g4 レジスタ (v8av8v8plusv8plusav8plusb の場合)、または g2g3 レジスタ (v9v9av9b の場合) を使用できるようにします。SPARC 命令セットの詳細は、40 ページの「-xarch=isa」を参照してください。 SPARC ABI では、これらのレジスタはアプリケーションレジスタと呼ばれます。これらのレジスタを使用すると必要なロードおよびストア命令が少なくてすむため、パフォーマンスが向上します。ただし、アセンブリコードで記述された古いライブラリプログラムとの間で衝突が起きることがあります。
    no%appl appl レジスタを使用しません。
    float SPARC ABI で規定されている浮動小数点レジスタを使用できるようにします。これらのレジスタは、プログラムに浮動小数点の
    コードがない場合でも使用することができます。
    no%float 浮動小数点レジスタを使用しません。 このオプションを使用すると、ソースプログラムに浮動小数点コードを記述することはできません。


    デフォルトは -xregs=appl, float です。

    -xrestrict=f

    (SPARC) ポインタ値の関数引数を制限付き (restricted) ポインタとして扱います。f には、以下の 1 つまたは複数の項目をコンマで区切って指定します。

    関数引数、%all%none

    関数リストの指定にこのオプションを入れると、指定された関数内のポインタ引数は制限付きとして扱われます。-xrestrict=%all を指定すると、C ファイル全体のすべてのポインタ引数が制限付きとして扱われます。詳細については「_Restrict」の項を参照してください。

    このコマンド行オプションは独立して使用できますが、最適化時に使用するのが最も適しています。以下に例を示します。

    % cc -xO3 -xrestrict=%all prog.c
    

    このコマンドでは、ファイル prog.c 内のすべてのポインタ引数を制限付きポインタとして扱います。

    % cc -xO3 -xrestrict=agc prog.c
    

    このコマンドでは、ファイル prog.c 内の関数 agc のすべてのポインタ引数を制限付きポインタとして扱います。

    デフォルトは %none で、-xrestrict と指定すると -xrestrict=%all と指定した場合と同様の結果が得られます。

    -xs

    dbx のための自動読み取りを無効にします。このオプションは .o ファイルを保存しておくことができない場合に使用します。-s オプションはアセンブラに渡されます。

    旧来の方法 (自動読み取りなし) では、シンボルテーブルのロードで次の処理が行われます。dbx 用のすべてのシンボルテーブルを実行可能ファイルに書き込むため、リンカーの結合と dbx の初期設定に時間がかかります。

    新しい方法では、シンボルテーブルのロードの際に自動読み取りがデフォルトで稼働します。自動読み取りによって、シンボルテーブルの情報が .o ファイルに分散され、必要なときだけ dbx がシンボルテーブル情報をロードします。そのため、リンカーの結合と dbx の初期設定が速くなります。

    -xs を指定すると、実行可能ファイルを他のディレクトリに移動し、dbx を使用する必要が生じたときに、オブジェクト (.o) ファイルを無視することができます。

    -xs を指定しない場合は、実行可能ファイルを移動する際に、ソースファイルとオブジェクト (.o) ファイルの両方を移動するか、dbx pathmap または use コマンドでパスを設定しなければなりません。

    -xsafe=mem

    (SPARC) メモリーに関するトラップが発生しないことを前提とします。

    このオプションによって、V9 マシン上で投機的ロード命令を使用することが許可されます。これは、-xO5 最適化と、-xarch=v8plus|v8plusa|v9|v9a を指定する場合だけ有効です。

    -xsb

    ソースブラウザ用のシンボルテーブル情報を生成します。このオプションは、コンパイラの -Xs モードと併用することはできません。

    -xsbfast

    ソースブラウザ用のデータベースを作成します。ソースファイルはオブジェクトファイルにはコンパイルされません。このオプションは、コンパイラの -Xs モードと併用することはできません。

    -xsfpconst

    接尾辞のない浮動小数点定数を、デフォルトの倍精度モードではなく、単精度で表します 。-Xc と併用することはできません。

    -xspace

    コードサイズを増やすループの最適化や並列化を行いません。

    例: コードサイズが増える場合は、ループの展開や並列化は行われません。

    -xstrconst

    デフォルトのデータセグメントではなくテキストセグメントの読み出し専用データセクションに、文字列リテラルを挿入します。

    -xtarget=t

    最適化の対象となる命令セットとシステムを指定します。

    t の値は native、generic、SPARC または x86 のシステム名のいずれかでなければなりません。

    -fast マクロオプションの展開には -xtarget=native が含まれます。

    -xtarget オプションは、実際のシステムに合わせて、-xarch、-xchip、-xcache の組み合わせを手早く簡単に指定することができます。-xtarget の意味は = の後に指定した値を展開したものにあります。

    表 2-14   -xtarget の展開
    意味
    native ホストシステムに対してパフォーマンスを最適化します。 コンパイラは、ホストシステムに対して最適化されたコードを生成します。コンパイラは自身が動作しているマシンで利用できるアーキテクチャ、チップ、キャッシュ特性を判定します。
    generic 一般的なアーキテクチャ、チップ、キャッシュに対して最高のパフォーマンスが得られるようにします。 コンパイラは -xtarget=generic を次のように展開します。 -xarch=generic -xchip=generic -xcache=generic これはデフォルトです。
    <システム名> 指定のシステムに対して最高のパフォーマンスが得られるようにします。 このオプションはマクロです。表 2-15 に示す、実際のシステム名と機種番号のリストから、システム名を選択してください。


    対象となるハードウェア (コンピュータ) の正式な名前をコンパイラに指定した方がパフォーマンスが優れているプログラムもあります。プログラムのパフォーマンスが重要な場合は、対象となるハードウェアの名前を正式に指定してください。これは、新しい SPARC プロセッサ上でプログラムを実行する場合に当てはまります。ただし、ほとんどのプログラムと、より旧式の SPARC プロセッサ間では、パフォーマンス向上はごくわずかであり、generic を指定することで十分です。

    -xtarget に指定する値は、-xarch-xchip-xcache の各オプションの値に展開されます。表 2-15 を参照してください。

    例: -xtarget=sun4/15 と指定することは、
    -xarch=V8a -xchip=micro -xcache=2/16/1 と指定することと同じです。

    表 2-15   -xtarget の展開  
    -xtarget のシステム名 -xarch -xchip -xcache
    generic
    
    generic
    
    generic
    
    generic
    
    cs6400
    
    v8
    
    super
    
    16/32/4:2048/64/1
    
    entr150
    
    v8
    
    ultra
    
    16/32/1:512/64/1
    
    entr2
    
    v8
    
    ultra
    
    16/32/1:512/64/1
    
    entr2/1170
    
    v8
    
    ultra
    
    16/32/1:512/64/1
    
    entr2/1200
    
    v8
    
    ultra
    
    16/32/1:512/64/1
    
    entr2/2170
    
    v8
    
    ultra
    
    16/32/1:512/64/1
    
    entr2/2200
    
    v8
    
    ultra
    
    16/32/1:512/64/1
    
    entr3000
    
    v8
    
    ultra
    
    16/32/1:512/64/1
    
    entr4000
    
    v8
    
    ultra
    
    16/32/1:512/64/1
    
    entr5000
    
    v8
    
    ultra
    
    16/32/1:512/64/1
    
    entr6000
    
    v8
    
    ultra
    
    16/32/1:512/64/1
    
    sc2000
    
    v8
    
    super
    
    16/32/4:2048/64/1
    
    solb5
    
    v7
    
    old
    
    128/32/1
    
    solb6
    
    v8
    
    super
    
    16/32/4:1024/32/1
    
    ss1
    
    v7
    
    old
    
    64/16/1
    
    ss10 
    
    v8
    
    super
    
    16/32/4
    
    ss10/20
    
    v8
    
    super
    
    16/32/4
    
    ss10/30
    
    v8
    
    super
    
    16/32/4
    
    ss10/40
    
    v8
    
    super
    
    16/32/4
    
    ss10/402
    
    v8
    
    super
    
    16/32/4
    
    ss10/41
    
    v8
    
    super
    
    16/32/4:1024/32/1
    
    ss10/412
    
    v8
    
    super
    
    16/32/4:1024/32/1
    
    ss10/50
    
    v8
    
    super
    
    16/32/4
    
    ss10/51
    
    v8
    
    super
    
    16/32/4:1024/32/1
    
    ss10/512
    
    v8
    
    super
    
    16/32/4:1024/32/1
    
    ss10/514
    
    v8
    
    super
    
    16/32/4:1024/32/1
    
    ss10/61
    
    v8
    
    super
    
    16/32/4:1024/32/1
    
    ss10/612
    
    v8
    
    super
    
    16/32/4:1024/32/1
    
    ss10/71
    
    v8
    
    super2
    
    16/32/4:1024/32/1
    
    ss10/712
    
    v8
    
    super2
    
    16/32/4:1024/32/1
    
    ss10/hs11
    
    v8
    
    hyper
    
    256/64/1
    
    ss10/hs12
    
    v8
    
    hyper
    
    256/64/1
    
    ss10/hs14
    
    v8
    
    hyper
    
    256/64/1
    
    ss10/hs21
    
    v8
    
    hyper
    
    256/64/1
    
    ss10/hs22
    
    v8
    
    hyper
    
    256/64/1
    
    ss1000
    
    v8
    
    super
    
    16/32/4:1024/32/1
    
    ss1plus
    
    v7
    
    old
    
    64/16/1
    
    ss2
    
    v7
    
    old
    
    64/32/1
    
    ss20
    
    v8
    
    super
    
    16/32/4:1024/32/1
    
    ss20/151
    
    v8
    
    hyper
    
    512/64/1
    
    ss20/152
    
    v8
    
    hyper
    
    512/64/1
    
    ss20/50
    
    v8
    
    super
    
    16/32/4
    
    ss20/502
    
    v8
    
    super
    
    16/32/4
    
    ss20/51
    
    v8
    
    super
    
    16/32/4:1024/32/1
    
    ss20/512
    
    v8
    
    super
    
    16/32/4:1024/32/1
    
    ss20/514
    
    v8
    
    super
    
    16/32/4:1024/32/1 
    
    ss20/61
    
    v8
    
    super
    
    16/32/4:1024/32/1
    
    ss20/612
    
    v8
    
    super
    
    16/32/4:1024/32/1
    
    ss20/71
    
    v8
    
    super2
    
    16/32/4:1024/32/1
    
    ss20/712
    
    v8
    
    super2
    
    16/32/4:1024/32/1
    
    ss20/hs11
    
    v8
    
    hyper
    
    256/64/1
    
    ss20/hs12
    
    v8
    
    hyper
    
    256/64/1
    
    ss20/hs14
    
    v8
    
    hyper
    
    256/64/1
    
    ss20/hs21
    
    v8
    
    hyper
    
    256/64/1
    
    ss20/hs22
    
    v8
    
    hyper
    
    256/64/1
    
    ss2p
    
    v7
    
    powerup
    
    64/32/1
    
    ss4
    
    v8a
    
    micro2
    
    8/16/1
    
    ss4/110
    
    v8a
    
    micro2
    
    8/16/1
    
    ss4/85
    
    v8a
    
    micro2
    
    8/16/1
    
    ss5
    
    v8a
    
    micro2
    
    8/16/1
    
    ss5/110
    
    v8a
    
    micro2
    
    8/16/1
    
    ss5/85
    
    v8a
    
    micro2
    
    8/16/1
    
    ss600/120
    
    v7
    
    old
    
    64/32/1
    
    ss600/140
    
    v7
    
    old
    
    64/32/1
    
    ss600/41
    
    v8
    
    super
    
    16/32/4:1024/32/1
    
    ss600/412
    
    v8
    
    super
    
    16/32/4:1024/32/1
    
    ss600/51
    
    v8
    
    super
    
    16/32/4:1024/32/1
    
    ss600/512
    
    v8
    
    super
    
    16/32/4:1024/32/1
    
    ss600/514
    
    v8
    
    super
    
    16/32/4:1024/32/1
    
    ss600/61
    
    v8
    
    super
    
    16/32/4:1024/32/1
    
    ss600/612
    
    v8
    
    super
    
    16/32/4:1024/32/1
    
    sselc
    
    v7
    
    old
    
    64/32/1
    
    ssipc
    
    v7
    
    old
    
    64/16/1
    
    ssipx
    
    v7
    
    old
    
    64/32/1
    
    sslc
    
    v8a
    
    micro
    
    2/16/1
    
    sslt
    
    v7
    
    old    
    
    64/32/1
    
    sslx
    
    v8a
    
    micro
    
    2/16/1
    
    sslx2
    
    v8a
    
    micro2
    
    8/16/1
    
    ssslc
    
    v7
    
    old
    
    64/16/1
    
    ssvyger
    
    v8a
    
    micro2
    
    8/16/1
    
    sun4/110
    
    v7
    
    old
    
    2/16/1
    
    sun4/15
    
    v8a
    
    micro
    
    2/16/1
    
    sun4/150
    
    v7
    
    old
    
    2/16/1
    
    sun4/20
    
    v7
    
    old
    
    64/16/1
    
    sun4/25
    
    v7
    
    old
    
    64/32/1
    
    sun4/260
    
    v7
    
    old
    
    128/16/1
    
    sun4/280
    
    v7
    
    old
    
    128/16/1
    
    sun4/30
    
    v8a
    
    micro
    
    2/16/1
    
    sun4/330
    
    v7
    
    old
    
    128/16/1
    
    sun4/370
    
    v7
    
    old
    
    128/16/1
    
    sun4/390
    
    v7
    
    old
    
    128/16/1
    
    sun4/40
    
    v7
    
    old
    
    64/16/1
    
    sun4/470
    
    v7
    
    old
    
    128/32/1
    
    sun4/490
    
    v7
    
    old
    
    128/32/1
    
    sun4/50
    
    v7
    
    old
    
    64/32/1
    
    sun4/60
    
    v7
    
    old
    
    64/16/1
    
    sun4/630
    
    v7
    
    old
    
    64/32/1
    
    sun4/65
    
    v7
    
    old
    
    64/16/1
    
    sun4/670
    
    v7
    
    old
    
    64/32/1
    
    sun4/690
    
    v7
    
    old
    
    64/32/1
    
    sun4/75
    
    v7
    
    old
    
    64/32/1
    
    ultra
    
    v8
    
    ultra
    
    16/32/1:512/64/1
    
    ultra1/140
    
    v8
    
    ultra
    
    16/32/1:512/64/1
    
    ultra1/170
    
    v8
    
    ultra
    
    16/32/1:512/64/1
    
    ultra1/200
    
    v8
    
    ultra
    
    16/32/1:512/64/1
    
    ultra2
    
    v8
    
    ultra2
    
    16/32/1:512/64/1
    
    ultra2/1170
    
    v8
    
    ultra
    
    16/32/1:512/64/1
    
    ultra2/1200
    
    v8
    
    ultra
    
    16/32/1:1024/64/1
    
    ultra2/1300
    
    v8
    
    ultra2
    
    16/32/1:2048/64/1
    
    ultra2/2170
    
    v8
    
    ultra
    
    16/32/1:512/64/1
    
    ultra2/2200
    
    v8
    
    ultra
    
    16/32/1:1024/64/1
    
    ultra2/2300
    
    v8
    
    ultra2
    
    16/32/1:2048/64/1
    
    ultra2i
    
    v8
    
    ultra2i
    
    16/32/1:512/64/1
    
    ultra3
    
    v8
    
    ultra3
    
    64/32/4:8192/256/1
    


    (x86) -xtarget= には次の値を指定できます。

    -xtemp=<ディレクトリ>

    cc が使用する一時ファイルの <ディレクトリ> を設定します。このオプション文字列の中にはスペースを入れてはなりません。このオプションを指定しないと、一時ファイルは /tmp に格納されます。-xtemp は、TMPDIR 環境変数より優先します。

    -xtime

    コンパイルの各構成要素が占有した実行時間と資源を報告します。

    -xtransition

    K&R C と Sun ANSI/ISO Cとの間の相違に対して警告を出します。-xtransition オプションを、-Xa または -Xt オプションと共に使用すると警告を出します。異なる動作に関するすべての警告メッセージは適切なコーディングを行うことによって取り除くことができます。次の警告は、-xtransition オプションを使用していなければ表示されません。

                       \a は ANSI C の警告文字です
    \x は ANSI C の 16 進エスケープです
    無効な 8 進数
    型の種類は実際には <型名> です: <名前>
    コメントが "##" で置き換えられます
    コメントがトークンを連結していません
    ANSI C では新しい型で置き換えてしまう型の宣言です: <型名>
    文字定数中のマクロ置換は行われません
    文字列リテラル中のマクロ置換
    文字定数中ではマクロ置換は行われません
    文字列リテラル中のマクロ置換は行われません
    オペランドが符号なしとして処理されました
    3 文字表記シーケンスが置き換えられました
    ANSI C は定数を unsigned 型として扱います: <演算子>
    ANSI C では <演算子> の意味が変わります。明示的なキャストを使用してください。

    -xunroll=n

    ループを n 回展開するようオプティマイザに指示します。 n は正の整数です。 n が 1 のときはコマンドとなり、コンパイラはループを展開しません。 n が 2 以上のとき
    -xunroll=
    nn 回ループを展開することをコンパイラに知らせます。

    -xvector[={yes|no}

    ベクトルライブラリ関数を自動的に呼び出すようにします。

    -xvector=yes が指定されると、コンパイラは可能な場合はループ内の数学ライブラリへの呼び出しを、同等のベクトル数学ルーチンへの単一の呼び出しに変換します。大きなループカウントを持つループでは、この変換によりパフォーマンスが向上します。

    -xvector が指定されない場合のデフォルトは、-xvector=no です。値のない -xvector が指定された場合のデフォルトは、-xvector=yes です。

    あらかじめ -xdepend を指定せずにコマンド行で -xvector を指定すると、-xdepend が自動的に呼び出されます。また、最適化レベルが指定されないか、-xO3 以上でない場合は、最適化レベルが -xO3 に上げられます。

    コンパイラは、リンク時に libmvec ライブラリを取り込みます。コンパイルとリンクを別々のコマンドで実行する場合は、リンク時の cc コマンドに必ず -xvector を使用してください。

    -xvpara

    (SPARC) ループが正しく並列化指定されていない場合に、#pragma MP 指令が指定されているループについて警告を出します。たとえば、オプティマイザがループの繰り返し中にデータの依存性を検出した場合に警告を出します。

    Sun WorkShop には、マルチプロセッサ用の C オプションを使用するのに必要なライセンスが含まれます。

    -xvpara は、-xexplicitpar または -xparallel オプションと、#pragma MP を組み合わせて使用してください。詳細については、「明示的な並列化およびプラグマ」を参照してください。

    -Yc,<ディレクトリ>

    c を検索するための新しいリ <ディレクトリ> を指定します。c、-W オプションで示したコンパイラ構成要素を表わす文字です。

    構成要素の検索が指定されている場合、ツールのパス名は
    <ディレクトリ>/<ツール名> になります。2 つ以上の -Y オプションが 1 つの項目に適用されている場合には、最後に現れたものが有効です。

    -YA,<ディレクトリ>

    コンパイラの構成要素を検索するデフォルトのディレクトリを変更します。

    -YI,<ディレクトリ>

    インクルードファイルを検索するデフォルトのディレクトリを変更します。

    -YP,<ディレクトリ>

    ライブラリファイルを検索するデフォルトのディレクトリを変更します。

    -YS,<ディレクトリ>

    起動用のオブジェクトファイルを検索するデフォルトのディレクトリを変更します。

    -Zll

    (SPARC) lock_lint 用にプログラムデータベースを作成しますが、コンパイルは行いません。詳細については、lock_lint(1) のマニュアルページを参照してください。

    -Zlp

    (SPARC) ループプロファイラであるループツール用にオブジェクトファイルを準備します。その後 looptool(1) ユーティリティを実行して、プログラムに関するループ統計を生成することができます。このオプションは -xdepend とともに使用してください。
    -xdepend が明示的または暗黙的に指定されていない場合は、-xdepend を有効にして警告を出します。最適化が -xO3 以上でない場合は -xO3 に上げられ、警告が出されます。通常、このオプションは、ループ並列化オプション、-xexplicitpar、
    -xautopar、-xparallel
    のうちの 1 つと組み合わせて使用します。

    Sun WorkShop には、MPC オプションを使用するために必要なライセンスが含まれます。コードの実行速度を高めたければ、このオプションにはマルチプロセッサシステムが必要です。シングルプロセッサシステムでは、通常、生成されたコードの実行速度は低下します。

    コンパイルとリンクを別々に実行し、コンパイルに -Zlp を指定する場合は、リンクにも必ず -Zlp を指定してください。

    1 つのサブプログラムを -Zlp を用いてコンパイルする場合、そのプログラムのすべてのサブプログラムを -Zlp を用いてコンパイルする必要はありません。ただしループ情報が得られるのは -Zlp を用いてコンパイルしたファイルだけで、プログラムに他のファイルが入っているかどうかの通知はありません。

    リンカーに渡されるオプション

    cc-a、-e、-h、-r、-u、-z を認識し、これらのオプションとその引数を ld に渡します。認識できないオプションは警告付きで ld に渡します。


    サン・マイクロシステムズ株式会社
    Copyright information. All rights reserved.
    ホーム   |   目次   |   前ページへ   |   次ページへ   |   索引