JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
Oracle Solaris Studio 12.3: C ユーザーガイド     Oracle Solaris Studio 12.3 Information Library (日本語)
search filter icon
search icon

ドキュメントの情報

はじめに

1.  C コンパイラの紹介

2.  C コンパイラ実装に固有の情報

3.  C コードの並列化

4.  lint ソースコード検査プログラム

5.  型に基づく別名解析

6.  ISO C への移行

7.  64 ビット環境に対応するアプリケーションへの変換

8.  cscope: 対話的な C プログラムの検査

A.  機能別コンパイラオプション

B.  C コンパイラオプションリファレンス

B.1 オプションの構文

B.2 cc のオプション

B.2.1 -#

B.2.2 -###

B.2.3 -Aname[ (tokens)]

B.2.4 -B[static| dynamic]

B.2.5 -C

B.2.6 -c

B.2.7 -Dname[(arg[,arg])][=expasion]

B.2.8 -d[y| n]

B.2.9 -dalign

B.2.10 -E

B.2.11 -errfmt[=[ no%]error]

B.2.12 -errhdr[=h]

B.2.13 -erroff[= t]

B.2.14 -errshort[= i]

B.2.15 -errtags[= a]

B.2.16 -errwarn[= t]

B.2.17 -fast

B.2.18 -fd

B.2.19 -features=[v]

B.2.19.1 --features=typeof の例

B.2.20 -flags

B.2.21 -flteval[={ any|2}]

B.2.22 -fma[={ none|fused}]

B.2.23 -fnonstd

B.2.24 -fns[={no |yes}]

B.2.25 -fPIC

B.2.26 -fpic

B.2.27 -fprecision=p

B.2.28 -fround=r

B.2.29 -fsimple[= n]

B.2.30 -fsingle

B.2.31 -fstore

B.2.32 -ftrap=t[ ,t...]

B.2.33 -G

B.2.34 -g

B.2.35 -g3

B.2.36 -H

B.2.37 -h name

B.2.38 -I[-| dir]

B.2.39 -i

B.2.40 -include filename

B.2.41 -KPIC

B.2.42 -Kpic

B.2.43 -keeptmp

B.2.44 -Ldir

B.2.45 -lname

B.2.46 -library=sunperf

B.2.47 -m32|-m64

B.2.48 -mc

B.2.49 -misalign

B.2.50 -misalign2

B.2.51 -mr[, string]

B.2.52 -mt[={yes |no}]

B.2.53 -native

B.2.54 -nofstore

B.2.55 -O

B.2.56 -o filename

B.2.57 -P

B.2.58 -p

B.2.59 -Qoption phase option[,option..]

B.2.60 -Q[y| n]

B.2.61 -qp

B.2.62 -Rdir[ :dir]

B.2.63 -S

B.2.64 -s

B.2.65 -traceback[={ %none|common|signals_list}]

B.2.66 -Uname

B.2.67 -V

B.2.68 -v

B.2.69 -Wc ,arg

B.2.70 -w

B.2.71 -X[c| a|t|s]

B.2.72 -x386

B.2.73 -x486

B.2.74 -Xlinker arg

B.2.75 -xaddr32[=yes| no]

B.2.76 -xalias_level[= l]

B.2.77 -xanalyze={code| no}

B.2.78 -xannotate[=yes| no]

B.2.79 -xarch=isa

B.2.79.1 SPARC および x86 用の -xarch フラグ

B.2.79.2 SPARC での -xarch のフラグ

B.2.79.3 x86 での -xarch のフラグ

B.2.79.4 相互の関連性

B.2.79.5 警告

B.2.80 -xautopar

B.2.81 -xbinopt={prepare| off}

B.2.82 -xbuiltin[=( %all|%default|%none)]

B.2.83 -xCC

B.2.84 -xc99[= o]

B.2.85 -xcache[= c]

B.2.86 -xcg[89| 92]

B.2.87 -xchar[= o]

B.2.88 -xchar_byte_order[ =o]

B.2.89 -xcheck[= o]

B.2.89.1 -xcheck=init_local の初期化値

基本型

構造体、共用体、配列の初期化

B.2.90 -xchip[= c]

B.2.91 -xcode[= v]

B.2.92 -xcrossfile

B.2.93 -xcsi

B.2.94 -xdebugformat=[stabs|dwarf ]

B.2.95 -xdepend=[yes| no]

B.2.96 -xdryrun

B.2.97 -xdumpmacros[= value[,value...]]

B.2.98 -xe

B.2.99 -xF[= v[,v...]]

B.2.99.1 値

B.2.100 -xhelp=flags

B.2.101 -xhwcprof

B.2.102 -xinline=list

B.2.103 -xinstrument=[ no%]datarace

B.2.104 -xipo[= a]

B.2.104.1 -xipo の例

B.2.104.2 -xipo=2 による内部手続き解析を行うべきでないケース

B.2.105 -xipo_archive=[ a]

B.2.106 -xivdep[= p]

B.2.107 -xjobs=n

B.2.108 -xkeepframe[=[ %all,%none,name,no% name]]

B.2.109 -xldscope={v}

B.2.110 -xlibmieee

B.2.111 -xlibmil

B.2.112 -xlibmopt

B.2.113 -xlic_lib=sunperf

B.2.114 -xlicinfo

B.2.115 -xlinkopt[= level]

B.2.116 -xloopinfo

B.2.117 -xM

B.2.118 -xM1

B.2.119 -xMD

B.2.120 -xMF filename

B.2.121 -xMMD

B.2.122 -xMerge

B.2.123 -xmaxopt[=v]

B.2.124 -xmemalign=ab

B.2.125 -xmodel=[a]

B.2.126 -xnolib

B.2.127 -xnolibmil

B.2.128 -xnolibmopt

B.2.129 -xnorunpath

B.2.130 -xO[1|2| 3|4|5]

B.2.130.1 SPARC 最適化

B.2.130.2 x86 最適化レベル

B.2.131 -xopenmp[= i]

B.2.132 -xP

B.2.133 -xpagesize=n

B.2.134 -xpagesize_heap=n

B.2.135 -xpagesize_stack=n

B.2.136 -xpch=v

B.2.136.1 プリコンパイル済みヘッダーファイルの自動作成

B.2.136.2 プリコンパイル済みヘッダーファイルの手動作成

B.2.136.3 既存のプリコンパイル済みヘッダーファイルの処理方法

B.2.136.4 特定のプリコンパイル済みヘッダーファイルの使用の指定

B.2.136.5 活性文字列 (Viable Prefix)

B.2.136.6 ヘッダーファイルの妥当性の判定

B.2.136.7 プリコンパイル済みヘッダーファイルキャッシュ

B.2.136.8 警告

B.2.136.9 プリコンパイル済みヘッダーファイルの依存関係と make ファイル

B.2.137 -xpchstop=[file |<include>]

B.2.138 -xpec[={yes|no}]

B.2.139 -xpentium

B.2.140 -xpg

B.2.141 -xprefetch[= val[,val]]

B.2.141.1 先読み応答率

B.2.142 -xprefetch_auto_type= a

B.2.143 -xprefetch_level= l

B.2.144 -xprofile= p

B.2.145 -xprofile_ircache[ =path]

B.2.146 -xprofile_pathmap

B.2.147 -xreduction

B.2.148 -xregs=r[, r...]

B.2.149 -xrestrict[= f]

B.2.150 -xs

B.2.151 -xsafe=mem

B.2.152 -xsfpconst

B.2.153 -xspace

B.2.154 -xstrconst

B.2.155 -xtarget=t

B.2.155.1 SPARC プラットフォームの -xtarget の値

B.2.155.2 x86 プラットフォームの -xtarget の値

B.2.156 -xtemp=dir

B.2.157 -xthreadvar[= o]

B.2.158 -xtime

B.2.159 -xtransition

B.2.160 -xtrigraphs[={ yes|no}]

B.2.161 -xunroll=n

B.2.162 -xustr={ascii_utf16_ushort |no}

B.2.163 -xvector[= a]

B.2.164 -xvis

B.2.165 -xvpara

B.2.166 -Yc , dir

B.2.167 -YA, dir

B.2.168 -YI, dir

B.2.169 -YP, dir

B.2.170 -YS, dir

B.2.171 -Zll

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

B.4 ユーザー指定のデフォルトオプションファイル

C.  ISO/IEC C 99 の処理系定義の動作

D.  C99 の機能

E.  ISO/IEC C90 の処理系定義の動作

F.  ISO C データ表現

G.  パフォーマンスチューニング

H.  Oracle Solaris Studio C: K&R C と ISO C の違い

索引

B.2 cc のオプション

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

特定のプラットフォームに固有と表記されたオプションを別のプラットフォームで使用してもエラーは起きません。単に無視されます。

B.2.1 -#

冗長モードを有効にします。コマンドオプションがどのように展開されるかが表示されます。要素が呼び出されるごとにその要素を表示します。

B.2.2 -###

呼び出された各構成要素が表示されますが、実行はされません。また、コマンドオプションの展開内容を表示します。

B.2.3 -Aname[ (tokens)]

#assert 前処理指令に似せて、指定の tokens を使用し name を述語として関連付けます。事前表明 (preassertion) は次のとおりです。

-Xc モードの場合、これらの事前表明は有効になりません。

-A のあとにハイフン (-) だけが続く場合は、事前定義のマクロ (__ から始まるもの以外) および事前定義の表明はすべて無視されます。

B.2.4 -B[static| dynamic]

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

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

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


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


このオプションと引数はリンカーに渡されます。

B.2.5 -C

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

B.2.6 -c

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

B.2.7 -Dname[(arg[,arg])][=expasion]

#define 前処理マクロが指令によって定義されるのと同様に、オプションの引数を使用してマクロを定義します。=expansion が指定されていない場合は、コンパイラは 1 であると仮定します。

コンパイラの定義済みマクロのリストについては、cc(1) のマニュアルページを参照してください。

B.2.8 -d[y| n]

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

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

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


注 - このオプションを動的ライブラリと組み合わせて使用すると、重大なエラーが発生します。ほとんどのシステムライブラリは、動的ライブラリでのみ使用できます。


B.2.9 -dalign

(SPARC) 廃止。このオプションは使わないでください。代わりに -xmemalign=8s を使用してください。詳細は、「B.2.124 -xmemalign=abを参照してください。「A.1.14 廃止オプション」に、廃止のオプションの全一覧をまとめています。x86 プラットフォームでは、このオプションはメッセージを表示せずに無視されます。

B.2.10 -E

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

B.2.11 -errfmt[=[ no%]error]

このオプションは、エラーメッセージの最初に「error:」という接頭辞を追加して、警告メッセージと区別しやすくする場合に使用します。接頭辞は、-errwarn によってエラーに変換された警告にも追加されます。

表 B-1 -errfmt のフラグ

フラグ
意味
error
すべてのエラーメッセージに接頭辞「error: 」を追加します。
no%error
エラーメッセージに接頭辞「error: 」を追加しません。

このオプションを指定しない場合は、-errfmt=no%errorに設定されます。-errfmt を指定したけれども値を指定しない場合、コンパイラはそれを -errfmt=error に指定します。

B.2.12 -errhdr[=h]

ヘッダーファイルからの警告を、次の表のフラグによって示されるヘッダーファイルのグループに限定します。

表 B-2 —errhdr オプション

意味
%all
使用しているすべてのヘッダーファイルを検査します。
%none
ヘッダーファイルを検査しません。
%user
/usr/include とそのサブディレクトリにあるものを除き、すべてのユーザーヘッダーファイルを検査します。また、コンパイラによって提供されたすべてのヘッダーファイルを検査します。これはデフォルト値です。

B.2.13 -erroff[= t]

このコマンドは、C コンパイラの警告メッセージを無効にします。エラーメッセージには影響しません。このオプションは、-errwarn によってゼロ以外の終了状態を発生させるように指定されているかどうかにかかわらず、すべての警告メッセージに適用されます。

t には、次の 1 つまたは複数の項目をコンマで区切って指定します。tagno%tag%all%none。指定順序によって実行内容が異なります。たとえば、「%all,no%tag」と指定すると、tag 以外のすべての警告メッセージを抑制します。次の表は、-erroff の値を示しています。

表 B-3 -erroff のフラグ

フラグ
意味
tag
tag によって指定された警告メッセージを抑制します。-errtags=yes オプションで、メッセージのタグを表示することができます。
no%tag
tag によって指定された警告メッセージを有効にします。
%all
すべての警告メッセージを抑制します。
%none
すべてのメッセージの抑制を解除します (デフォルト)。

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

-erroff オプションで無効にできるのは、C コンパイラのフロントエンドで -errtags オプションを指定したときにタグを表示する警告メッセージだけです。無効にするエラーメッセージをさらに詳細に設定することができます。「2.11.8 error_messages」を参照してください。

B.2.14 -errshort[= i]

このオプションは、コンパイラで型の不一致が検出されたときに生成されるエラーメッセージの詳細さを設定する場合に使用します。大きな集合体が関係する型の不一致がコンパイラで検出される場合にこのオプションを使用すると特に便利です。

i は、次の表に示す値のいずれかです。

表 B-4 -errshort のフラグ

フラグ
意味
short
エラーメッセージは、型の展開なしの簡易形式で出力されます。集合体のメンバー、関数の引数、戻り値の型は展開されません。
full
エラーメッセージは、完全な冗長形式で出力されます。不一致の型が完全に展開されます。
tags
エラーメッセージは、タグ名がある型の場合はそのタグ名付きで出力されます。タグ名がない場合は、型は展開された形式で出力されます。

-errshort を指定しない場合は、コンパイラでは -errshort=full が指定されます。-errshort を指定したけれども値を指定しない場合、コンパイラはこのオプションを -errshort=tags に設定します。

このオプションは累積されません。コマンド行で指定された最後の値を受け入れます。

B.2.15 -errtags[= a]

C コンパイラのフロントエンドで出力される警告メッセージのうち、-erroff オプションで無効にできる、または -errwarn オプションで重大なエラーに変換できるメッセージのメッセージタグを表示します。C コンパイラのドライバおよび C のコンパイルシステムのほかのコンポーネントから出力されるメッセージにはエラータグが含まれないため、-erroff で無効にしたり、-errwarn で重大なエラーに変換したりすることはできません。

a には yes または no のいずれかを指定します。デフォルトは -errtags=no です。-errtags だけを指定すると、-errtags=yes を指定するのと同じことになります。

B.2.16 -errwarn[= t]

指定した警告メッセージが生成された場合に、重大なエラーを出力して C コンパイラを終了する場合は、-errwarn オプションを使用します。

t には、次の 1 つまたは複数の項目をコンマで区切って指定します。tagno%tag%all%none。このとき、順序が重要になります。たとえば、%all,no%tag と指定すると、tag 以外のすべての警告メッセージが生成された場合に、重大なエラーを出力して cc を終了します。

C コンパイラで生成される警告メッセージは、コンパイラのエラーチェックの改善や機能追加に応じて、リリースごとに変更されます。-errwarn=%all を指定してエラーなしでコンパイルされるコードが、コンパイラの次のリリースではエラーなしでコンパイルされない可能性があります。

-errwarn オプションを使用して、障害状態で C コンパイラを終了するように指定できるのは、C コンパイラのフロントエンドで -errtags オプションを指定したときにタグを表示する警告メッセージだけです。

-errwarn の値を次の表に示します。

表 B-5 -errwarn のフラグ

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

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

B.2.17 -fast

このオプションは、実行可能ファイルをチューニングして実行時パフォーマンスを最大化するための出発点として効果的に使用できるマクロです。-fast オプションマクロは、コンパイラのあるリリースから次の変更される可能性があり、ターゲットプラットフォーム固有のオプションに展開されます。-# オプションまたは -xdryrun を使用して -fast の展開を調べ、-fast の該当するオプションを使用して実行可能ファイルのチューニングを行なってください。

-fast の展開には、コンパイラが最適化された数学ルーチンのライブラリを使用できるようにする -xlibmopt オプションが含まれます。詳細は、「B.2.112 -xlibmoptを参照してください。

-fast オプションは、errno の値に影響します。詳細は、「2.13 errno の値の保持」を参照してください。

-fast を指定してコンパイルしたモジュールは、-fast を指定してリンクする必要があります。「A.1.2 コンパイル時とリンク時のオプション」に、コンパイル時とリンク時の両方に指定する必要があるコンパイラオプションの全一覧をまとめています。

-fast オプションは、特にコンパイルするマシンとは異なるターゲットで実行するプログラムでは使用できません。そのような場合は、-fast のあとに適切な -xtarget オプションを指定します。例:

cc -fast -xtarget=generic ...

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

% cc -fast -xnolibmil

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

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

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

表 B-6 -fast 展開フラグ

オプション
SPARC
x86
-fns
X
X
-fsimple=2
X
X
-fsingle
X
X
-nofstore
-
X
-xalias_level=basic
X
X
-xbuiltin=%all
X
X
-xlibmil
X
X
-xlibmopt
X
X
-xmemalign=8s
X
-
-xO5
X
X
-xregs=frameptr
-
X
-xtarget=native
X
X

注 - 一部の最適化では、プログラムの動作が特定の動作になることを想定しています。プログラムがこれらの想定に適合していない場合は、アプリケーションがエラーが発生したり、誤った結果を生成したりすることがあります。プログラムが -fast 付きのコンパイルに適しているかどうかを判断するには、各オプションの説明を参照してください。


これらのオプションで実行される最適化は、ISO C および IEEE 規格で定義されたプログラムの動作を変えることがあります。詳細については、各オプションの説明を参照してください。

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

x86 では、-fast オプションに -xregs=frameptr が含まれます。特に C、Fortran、および C++ の混合ソースコードをコンパイルする場合は、その詳細について、このオプションの説明を参照してください。

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

実行中のプラットフォームで —fast の実際の展開を確認するには、次のコマンドを使用します。

% cc -fast -xdryrun |& grep ###

B.2.18 -fd

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

B.2.19 -features=[v]

次の表に、v で使用できる値の一覧を示します。

表 B-7 -features のフラグ

意味
[no%]conststrings
読み取り専用メモリー内で文字列リテラルの配置を有効にします。デフォルトは -features=conststrings であり、文字列リテラルを読み取り専用データセクションに配置します。文字列リテラルのメモリー位置に書き込もうとするプログラムをコンパイルするときに、このオプション付きでコンパイルすると、セグメント例外が発生するようになりました。no% 接頭辞はこのサブオプションを無効にします。
extensions
サイズがゼロの構造体または共用体の宣言、および有効な値を返す return 文を持つ void 関数を使用できます。
extinl
extern インライン関数を大域関数として生成します。これがデフォルトで、1999 C 規格に準拠しています。
no%extinl
extern インライン関数を静的関数として生成します。-features=no%extinl 付きで新しいコードをコンパイルすると、extern インライン関数は、C および C++ コンパイラの古いバージョンで提供されていたのと同じ扱いを受けます。
[no%]typeof
typeof 演算子の認識を有効または無効にします。typeof 演算子はその引数 (式または型のどちらか) の型を返します。構文上は sizeof 演算子と同様に指定されますが、意味上は typedef で定義される型と同様に動作します。

したがって、typedef が使用できる箇所であればどこでも使用できます。たとえば、宣言、キャスト、または sizeoftypeof の内側で使用できます。デフォルトは -features=typeof です。

no% 接頭辞はこの機能を無効にします。

%none
このオプションを無効にします。

古い C および C++ オブジェクト (このリリースより前の Solaris Studio コンパイラで作成されたオブジェクト) は、そのオブジェクトの動作変更なしに、新しい C および C++ オブジェクトとリンクできます。規格に適合した動作を実現するには、最新のコンパイラを使って古いコードをコンパイルする必要があります。

B.2.19.1 —features=typeof の例

          typeof(int) i;/* declares variable "i" to be type int*/
          typeof(i+10) j;/* declares variable "j" to be type int,
                            the type of the expression */

          i = sizeof(typeof(j)); /* sizeof returns the size of
                          the type associated with variable "j" */

          int a[10];
          typeof(a) b;/* declares variable "b" to be array of
                         size 10 */

typeof 演算子は、任意の型の引数を使用できるマクロ定義で特に役立つ可能性があります。例:

                    #define SWAP(a,b)
                { typeof(a) temp; temp = a; a = b; b = temp; }

B.2.20 -flags

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

B.2.21 -flteval[={ any|2}]

(x86) このオプションは、浮動小数点式の評価方法の制御に使用します。

表 B-8 -flteval のフラグ

フラグ
意味
2
浮動小数点式が long double 型として評価されます。
any
式を構成している変数および定数の型の組み合わせに基づいて浮動小数点式が評価されます。

-flteval が指定されない場合は、-flteval=any に設定されます。-flteval を指定したけれども値を指定しない場合、コンパイラはそれを -flteval=2 に設定します。

-flteval=2-xarch=sse pentium_prossea、または pentium_proa と一緒でのみ使用できます。-flteval=2 は、-fprecision または -nofstore オプションとの組み合わせでも互換性がありません。

「D.1.1 浮動小数点評価における精度」も参照してください。

B.2.22 -fma[={ none|fused}]

(SPARC) 浮動小数点、FMA (fused, multiply-add) 命令の自動生成を有効にします。-fma=none は、これらの命令の生成を無効にします。-fma=fused は、コンパイラが浮動小数点、FMA (fused, multiply-add) 命令を使用してコードのパフォーマンスを改善する機会を見出そうとすることを許可します。

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

コンパイラが積和演算 (FMA) 命令を生成するための最小要件は、-xarch=sparcfmaf と、最適化レベルが -xO2 以上であることです。積和演算 (FMA) 命令をサポートしていないプラットフォームでプログラムが 実行されないようにするため、コンパイラは積和演算 (FMA) 命令を生成する場合、バイナリプログラムにマーク付けをします。

積和演算 (FMA) により、積と和 (乗算と加算) の間で中間の丸め手順が排除されます。その結果、-fma=fused 付きでコンパイルされると、プログラムは精度は減少するよりも増加することになりますが、異なる結果を生み出すことがあります。

B.2.23 -fnonstd

このオプションは、-fns および -ftrap=common 用のマクロです。

B.2.24 -fns[={no |yes}]

SPARC プラットフォームでは、このオプションは標準でない浮動小数点モードを有効にします。

x86 プラットフォームの場合、このオプションは SSE flush-to-zero モードを選択し、使用可能な場合には denormals-are-zero モードを選択します。これにより、非正規数の結果がゼロに切り捨てられ、使用可能な場合には、非正規化数のオペランドもゼロとして扱われます。このオプションは、SSE や SSE2 命令セットを利用しない従来の x86 浮動小数点演算には影響しません。

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

オプションの =yes または =no を使用すると、-fast のように、-fns を含むほかのマクロフラグに続く -fns フラグを切り替えることができます。

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

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

SPARC システムでは、このオプションはメインプログラムのコンパイル時に使用される場合にのみ有効です。

B.2.25 -fPIC

-KPIC と同義です。

B.2.26 -fpic

-Kpic と同義です。

B.2.27 -fprecision=p

(x86) -fprecision={single, double, extended}

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

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

このオプションは、x86 システムでメインプログラムのコンパイル時に使用する場合にのみ有効で、64 ビット (-m64) または SSE2 対応 (-xarch=sse2) プロセッサでコンパイルする場合は無視されます。SPARC システムでも無視されます。

B.2.28 -fround=r

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

r は、nearest tozeronegativepositive のいずれかです。

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

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

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

このオプションは、メインプログラムをコンパイルするときにだけ有効です。

B.2.29 -fsimple[= n]

オプティマイザが浮動小数点演算に関する前提事項を単純化することを許可します。

デフォルトは -fsimple=0 です。-fsimple-fsimple=1 と同義です。

n を指定する場合、0、1、2 のいずれかにしなければいけません。

表 B-9 -fsimple のフラグ

意味
-fsimple=0
前提事項の単純化を行えないようにします。IEEE 754 に厳密に準拠します。
-fsimple=1
保守的な単純化を許可します。生成されるコードは IEEE 754 に厳密には準拠していませんが、大半のプログラムの数値結果は変わりありません。

-fsimple=1 の場合、次に示す内容を前提とした最適化が行われます。

  • IEEE 754 のデフォルトの丸めとトラップモードが、プロセスの初期化以後も変わらない。

  • 潜在的な浮動小数点例外を除き、表示できない結果を生成する計算が削除される場合があります。

  • オペランドとして無限大または非数を持つ計算は、結果に非数を反映する必要はありません。たとえば、x*00 に置き換えられることがあります。

  • 演算はゼロの符号を区別しない。

    -fsimple=1 を指定すると、オプティマイザは必ず丸めまたは例外に応じた、完全な最適化を行います。特に、浮動小数点演算を、実行時に一定に保たれる丸めモードにおいて異なる結果を生成する浮動小数点演算と置き換えることはできません。

-fsimple=2
-fsimple=1 のすべての機能が含まれ、-xvector=simd が有効な場合に、SIMD 命令を使用して縮約を計算できるようにします。

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

-fsimple=2 を指定しても、そうでない場合は何も生成しないプログラムで、オプティマイザが浮動小数点例外を発生させることは許可されません。

最適化が精度に与える影響の詳細は、『Techniques for Optimizing Applications: High Performance Computing』(Rajat Garg と Ilya Sharapov 著) をお読みください。

B.2.30 -fsingle

-Xt モードまたは -Xs モードの場合にかぎり、float 式を倍精度ではなく単精度で評価します。-Xa モードまたは -Xc モードでコンパイラが使用される場合、float 式はすでに単精度として評価されているため、このオプションは効果がありません。

B.2.31 -fstore

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

このオプションを無効にするには、-nofstore フラグを使用します。

B.2.32 -ftrap=t[ ,t...]

SIGFPE ハンドラを組み込まずに、起動時に有効にする IEEE トラップモードの設定のみ行います。トラップの設定と SIGFPE ハンドラの組み込みを同時に行うには、ieee_handler(3M) か fex_set_handling(3M) を使用します。複数の値を指定すると、それらの値は左から右に処理されます。

t には、次の表に示す値のいずれかにできます。

表 B-10 -ftrap のフラグ

フラグ
意味
[no%]division
ゼロによる除算をトラップします。
[no%]inexact
正確でない結果をトラップします。
[no%]invalid
無効な演算をトラップします。
[no%]overflow
オーバーフローをトラップします。
[no%]underflow
アンダーフローをトラップします。
%all
前述のすべてをトラップします。
%none
前述のどれもトラップしません。
common
無効、ゼロ除算、オーバーフローをトラップします。

例に示すように、no% 接頭辞は、%all および common 値の意味を変更するためにのみ使用され、これらの値のいずれかと一緒に使用される必要があります。no% 接頭辞は、特定のトラップを明示的に無効にするものではありません。

-ftrap を指定しない場合、コンパイラは -ftrap=%none とみなします。

例: –ftrap=%all,no%inexact は、inexact を除くすべてのトラップを設定します。

-ftrap=t 付きで 1 つのルーチンを コンパイルする場合は、予期しない結果を避けるために、プログラムのすべてのルーチンを同じオプションでコンパイルしてください。

-ftrap=inexact のトラップは慎重に使用してください。-ftrap=inexact では、浮動小数点の値が正確でないとトラップが発生します。たとえば、次の文ではこの条件が発生します。

x = 1.0 / 3.0;

このオプションは、メインプログラムをコンパイルするときにだけ有効です。このオプションを使用する際には注意してください。IEEE トラップを有効にするには、-ftrap=common を使用します。

B.2.33 -G

動的にリンクされた実行可能ファイルではなく、共有オブジェクトを生成します。このオプションは ld(1) に渡され、-dn オプションと一緒に使用できません。

-G オプションを使用すると、コンパイラはデフォルトの -l オプションを ld に渡しません。共有ライブラリを別の共有ライブラリに依存させる場合は、必要な -l オプションをコマンド行に渡す必要があります。

コンパイル時とリンク時の両方に指定する必要があるコンパイラオプションと -G オプションを組み合わせて共有ライブラリを作成した場合は、生成された共有オブジェクトとのリンクでも、必ず同じオプションを指定してください。

共有オブジェクトを作成するときは、-m64 付きでコンパイルされるすべての 64 ビット SPARC オブジェクトファイルも、「B.2.91 -xcode[= v]」で説明するように、明示的な -xcode 値付きでコンパイルする必要があります。

B.2.34 -g

dbx(1) とパフォーマンスアナライザ analyzer(1) によるデバッグのために、追加のシンボルテーブル情報を生成します。

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

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

-g オプションでコンパイルすると、パフォーマンスアナライザの機能をフルに利用できます。 一部のパフォーマンス分析機能は -g を必要としませんが、注釈付きのソースコード、一部の関数レベルの情報、およびコンパイラの注釈メッセージを確認するには、-g でコンパイルする必要があります。詳細は、analyzer(1) のマニュアルページおよび『プログラムのパフォーマンス解析』のマニュアルを参照してください。

-g オプションで生成される注釈メッセージは、プログラムのコンパイル時にコンパイラが実行した最適化と変換について説明します。メッセージを表示するには、er_src(1) コマンドを使用します。これらのメッセージはソースコードでインタリーブされます。


注 - プログラムを個別の手順でコンパイルしてリンクする場合、—g オプションを一方の手順に含め、もう一方の手順から除外してもプログラムの正確さには影響しませんが、プログラムのデバッグ機能に影響します。—g (または —g0) を付けてコンパイルしないけれども、—g (または —g0) を付けてリンクされるモジュールは、デバッグのために適切に準備されません。関数 main を含むモジュールを —g オプション (または —g0 オプション) 付きでコンパイルすることは通常、デバッグのために必要です。


デバッグの詳細は、『dbx コマンドによるデバッグ』を参照してください。

B.2.35 -g3

追加のデバッグ情報を生成します。

—g3 オプションは —g と同じですが、追加のデバッグシンボルテーブル情報によって dbx がソースコード内のマクロの展開を表示できるようにします。この追加のシンボルテーブル情報により、—g 付きのコンパイルと比較して、結果の .o および実行可能ファイルのサイズが増える可能性があります。

B.2.36 -H

現在のコンパイルでインクルードされたファイルのパス名を 1 行に 1 つずつ標準エラーに出力します。表示は、どのファイルがほかのファイルにインクルードされるかを示すためにインデントされます。

次の例では、プログラム sample.c はファイル stdio.hmath.h をインクルードします。math.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

B.2.37 -h name

共有動的ライブラリに、異なったバージョンのライブラリを持つように名前を割り当てます。name は、-o オプションで指定されるものと同じファイル名にしてください。-hname の間の空白は任意です。

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

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

B.2.38 -I[-| dir]

-I dir は、相対ファイル名、つまり、/ (スラッシュ) から始まらないディレクトリパスを持つ #include ファイルを検索するディレクトリのリスト内の /usr/include の前に dir を追加します。

複数の -I オプションが指定された場合は、指定された順序でディレクトリが調べられます。

コンパイラの検索パターンの詳細については、「2.16.1 -I- オプションによる検索アルゴリズムの変更」を参照してください。

B.2.39 -i

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

B.2.40 -include filename

このオプションを指定すると、コンパイラは filename を、主要なソースファイルの 1 行目に記述されているかのように #include プリプロセッサ指令として処理します。ソースファイル t.c の考慮:

main()
{
   ...
}

t.ccc -include t.h t.c コマンドを使用してコンパイルする場合は、ソースファイルに次の内容が含まれているかのようにコンパイルが進行します。

#include "t.h"
main()
{
   ...
}

コンパイラが filename を最初に検索するのは、ファイルが明示的にインクルードされる場合のように、main ソースファイルが含まれるディレクトリではなく、現在の作業ディレクトリです。たとえば、次のディレクトリ構造では、同じ名前を持つ 2 つのヘッダーファイルが異なる場所に存在しています。

foo/
   t.c
   t.h
   bar/
     u.c
     t.h

作業ディレクトリが foo/bar であり、cc ../t.c -include t.h コマンドを使用してコンパイルする場合は、コンパイラによって foo/bar ディレクトリから取得された t.h がインクルードされますが、ソースファイル t.c 内で #include 指令を使用した場合の foo/ ディレクトリとは異なります。

-include で指定されたファイルをコンパイラが現在の作業ディレクトリ内で見つけることができない場合は、コンパイラは通常のディレクトリパスでこのファイルを検索します。複数の -include オプションを指定する場合は、コマンド行で表示される順にファイルがインクルードされます。

B.2.41 -KPIC

(SPARC) 廃止。このオプションは使わないでください。代わりに -xcode=pic32 を使用してください。

詳細は、「B.2.91 -xcode[= v]」 を参照してください。「A.1.14 廃止オプション」に、廃止のオプションの全一覧をまとめています。

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

B.2.42 -Kpic

(SPARC) 廃止。このオプションは使わないでください。代わりに -xcode=pic13 を使用してください。詳細は、「B.2.91 -xcode[= v]」 を参照してください。「A.1.14 廃止オプション」に、廃止のオプションの全一覧をまとめています。

(x86) 位置独立コードを生成します。このオプションは、共有ライブラリを構築するためにソースファイルをコンパイルするときに使用します。大域データへの各参照は、大域オフセットテーブルにおけるポインタの間接参照として生成されます。各関数呼び出しは、手続きリンケージテーブルを通して PC 相対アドレス指定モードで生成されます。

B.2.43 -keeptmp

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

B.2.44 -Ldir

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


注 - コンパイラインストール領域 (/usr/include/lib、または /usr/lib) を検索ディレクトリとして指定しないでください。


B.2.45 -lname

オブジェクトライブラリlib name.so または libname .a をリンクの対象とします。シンボルは左から右へ解決されるため、コマンドでのライブラリの順序は重要です。

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

B.2.46 -library=sunperf

Oracle Solaris Studio パフォーマンスライブラリとリンクします。

B.2.47 -m32|-m64

コンパイルされたバイナリオブジェクトのメモリーモデルを指定します。

-m32 を使用すると、32 ビット実行可能ファイルと共有ライブラリが作成されます。-m64 を使用すると、64 ビット実行可能ファイルと共有ライブラリが作成されます。

ILP32 メモリーモデル (32 ビット int、long、ポインタデータ型) は 64 ビット対応ではないすべての Solaris プラットフォームおよび Linux プラットフォームのデフォルトです。LP64 メモリーモデル (64 ビット long、ポインタデータ型) は 64 ビット対応の Linux プラットフォームのデフォルトです。-m64 は LP64 モデル対応のプラットフォームでのみ許可されます。

-m32 を使用してコンパイルされたオブジェクトファイルまたはライブラリを、-m64 を使用してコンパイルされたオブジェクトファイルまたはライブラリにリンクすることはできません。

-m32|-m64 を指定してコンパイルしたモジュールは、-m32 |-m64 を指定してリンクする必要があります。「A.1.2 コンパイル時とリンク時のオプション」に、コンパイル時とリンク時の両方に指定する必要があるコンパイラオプションの一覧をまとめています。

x86/x64 プラットフォームで大量の静的データを持つアプリケーションを -m64 を使用してコンパイルするときは、-xmodel=medium も必要になることがあります。一部の Linux プラットフォームは、ミディアムモデルをサポートしていません。

以前のコンパイラリリースでは、-xarch で命令セットを選択すると、メモリーモデル ILP32 または LP64 が使用されていました。Oracle Solaris Studio 12 コンパイラから、このデフォルトは該当しません。ほとんどのプラットフォームでは、-m64 をコマンド行に追加するだけで、64 ビットオブジェクトが作成されます。

Oracle Solaris では、-m32 がデフォルトです。64 ビットプログラムをサポートする Linux システムでは、-m64 -xarch=sse2 がデフォルトです。

-xarch の説明も参照してください。

B.2.48 -mc

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

B.2.49 -misalign

(SPARC) 廃止。このオプションは使わないでください。代わりに -xmemalign=1i オプションを使ってください。詳細は、「B.2.124 -xmemalign=abを参照してください。「A.1.14 廃止オプション」に、廃止のオプションの全一覧をまとめています。

B.2.50 -misalign2

(SPARC) 廃止。このオプションは使わないでください。代わりに -xmemalign=2i オプションを使ってください。詳細は、「B.2.124 -xmemalign=abを参照してください。「A.1.14 廃止オプション」に、廃止のオプションの全一覧をまとめています。

B.2.51 -mr[, string]

-mr は、.comment セクションからすべての文字を削除します。このフラグを使用すると、mcs -d -a が呼び出されます。

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

B.2.52 -mt[={yes |no}]

このオプションを使用して、Oracle Solaris スレッドまたは POSIX スレッド API を使用しているマルチスレッド化コードをコンパイルおよびリンクします。-mt=yes オプションにより、ライブラリが適切な順序でリンクされることが保証されます。

このオプションは -D_REENTRANT をプリプロセッサに渡します。

Oracle Solaris スレッドを使用するには、thread.h ヘッダーファイルをインクルードし、—mt=yes オプション付きでコンパイルします。Oracle Solaris プラットフォームで POSIX スレッドを使用するには、pthread.h ヘッダーファイルをインクルードし、—mt=yes オプション付きでコンパイルします。

Linux プラットフォームでは、POSIX スレッド API のみを使用できます。(libthread は Linux プラットフォームでは使用できません。)したがって、Linux プラットフォームで —mt=yes を使用すると、—lthread の代わりに —lpthread が追加されます。Linux プラットフォームで POSIX スレッドを使用するには、—mt 付きでコンパイルします。

—G を使用してコンパイルする場合は、—mt=yes を指定しても、—lthread—lpthread のどちらも自動的には含められません。共有ライブラリを構築する場合は、これらのライブラリを明示的にリストする必要があります。

(OpenMP 共有メモリー並列化 API を使用するための) —xopenmp オプションには、—mt=yes が自動的に含まれます。

-mt=yes を指定してコンパイルを実行し、リンクを個別の手順でリンクする場合は、コンパイル手順と同様にリンク手順でも -mt=yes オプションを使用する必要があります。-mt=yes を使用して 1 つの変換ユニットをコンパイルおよびリンクする場合は、-mt=yes を指定してプログラムのすべてのユニットをコンパイルおよびリンクする必要があります。

-mt=yes は、コンパイラのデフォルトの動作です。この動作が望ましくない場合は、-mt=no でコンパイルします。

オプション —mt—mt=yes と同じです。

「B.2.126 -xnolib と、Oracle Solaris の『Multithreaded Programming Guide』および『リンカーとライブラリガイド』も参照してください。

B.2.53 -native

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

B.2.54 -nofstore

(x86) 浮動小数点式または関数が変数に代入されるか、より短い浮動小数点型にキャストされるときに、その式または関数の値を代入の左辺の型に変換しません。代わりに、値をレジスタに残します。「B.2.31 -fstoreも参照してください。

B.2.55 -O

デフォルトの最適化レベルの -xO3 を使ってください。-O マクロは -xO3 に展開されます。

-xO3 最適化レベルがより高い実行時パフォーマンスを生み出します。ただし、あらゆる変数が自動的に volatile と見なされることに依存するプログラムの場合、これは不適切なことがあります。この前提を持つ典型的なプログラムは、独自の同期処理プリミティブを実装するデバイスドライバや古いマルチスレッドアプリケーションです。回避策は、-O ではなく、-xO2 でコンパイルすることです。

B.2.56 -o filename

デフォルトの a.out ではなく、出力ファイル filename を指定します。コンパイラはソースファイルを上書きしないため、filename を入力ソースファイルと同じにできません。

filename は適切な接尾辞を持つ必要があります。—c とともに使用すると、filename はターゲット .o オブジェクトファイルを指定します。—G とともに使用すると、ターゲット .so ライブラリファイルを指定します。このオプションとその引数はリンカー ld に渡されます。

B.2.57 -P

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

B.2.58 -p

このオプションは廃止されました。代わりに 「B.2.140 -xpgを使用してください。

B.2.59 –Qoption phase option[,option..]

option をコンパイル段階に渡します。

複数のオプションを渡すには、コンマで区切って指定します。-Qopton でコンポーネントに渡されるオプションは、順序が変更されることがあります。ドライバが認識するオプションは、正しい順序に保持されます。ドライバがすでに認識しているオプションに、-Qoption は使わないでください。

phase は、次のリスト内のいずれかの値にできます。

acomp

コンパイラ

cg

コードジェネレータ (SPARC)

cpp

プリプロセッサ (前処理系)

driver

cc ドライバ

fbe

アセンブラ

ipo

相互手続きオプティマイザ

ir2hf

中間コードトランスレータ (x86)

iropt

オプティマイザ

ld

リンクエディタ (ld)

mcs

mcs—mc または —mr が指定されたとき、オブジェクトファイルのコメントセクションを操作します。

postopt

ポストオプティマイザ

ssbd

lock_lint のコンパイラ段階

ube

コードジェネレータ (x86)

同等の機能を提供する —Wc, arg も参照してください。—Qoption は、ほかのコンパイラとの互換性のために提供されています。

B.2.60 -Q[y| n]

出力ファイルに識別情報を出力するかどうかを決定します。-Qy がデフォルトです。

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

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

B.2.61 -qp

-pと同じです。

B.2.62 -Rdir[ :dir]

コロンで区切られたディレクトリのリストを、ライブラリ検索ディレクトリとして、実行時リンカーに渡します。ディレクトリリストが存在していて null でない場合は、出力オブジェクトファイルに記録され、実行時リンカーに渡されます。

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

B.2.63 -S

cc に対して、アセンブリソースファイルを作成するけれども、プログラムをアセンブルまたはリンクしないように指示します。アセンブラ言語出力は、接尾辞が .s の対応するファイルに書き込まれます。

B.2.64 -s

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

ld(1) に渡します。

B.2.65 -traceback[={ %none|common|signals_list}]

実行時に重大エラーが発生した場合にスタックトレースを発行します。

-traceback オプションを指定すると、プログラムによって特定のシグナルが生成された場合に、実行可能ファイルで stderr へのスタックトレースが発行されて、コアダンプが実行され、終了します。複数のスレッドが 1 つのシグナルを生成すると、スタックトレースは最初のスレッドに対してのみ生成されます。

追跡表示を使用するには、リンク時に -traceback オプションをコンパイラコマンド行に追加します。このオプションはコンパイル時にも使用できますが、実行可能バイナリが生成されない場合無視されます。-traceback -G とともに使用して共有ライブラリを作成すると、エラーが発生します。

表 B-11 -traceback オプション

オプション
意味
common
sigillsigfpesigbussigsegv、または sigabrt の共通シグナルのいずれかのセットが発生した場合にスタックトレースを発行するべきであることを指定します。
signals_list
スタックトレースを生成するべきシグナルの名前のコンマ区切りのリスト (小文字) を指定します。コアファイルの生成の原因となる、 sigquitsigillsigtrapsigabrtsigemtsigfpesigbussigsegvsigsyssigxcpusigxfsz の各シグナルをキャッチできます。

これらのシグナルのキャッチを無効するために、任意のシグナルの前に no% を付けることができます。

たとえば、-traceback=sigsegv,sigfpe と指定すると、sigsegv または sigfpe が発生した場合にスタックトレースとコアダンプが生成されます。

%none または none
トレースバックを無効にします。

このオプションを指定しない場合、デフォルトは -traceback=%none になります。

= 記号を指定せずに、-traceback だけを指定すると、-traceback=common と同義になります。

コアダンプが必要ない場合は、次のように coredumpsize 制限を 0 に設定します。

% limit coredumpsize 0            

-traceback オプションは、実行時のパフォーマンスに影響しません。

B.2.66 -Uname

プリプロセッサシンボル name; の定義を削除します。このオプションは、同じコマンド行で -D で作成されたプリプロセッサシンボル name の初期定義を削除します。コマンド行ドライバでそこに配置されたものも含みます。

-U は、ソースファイルのプリプロセッサ指令に影響しません。コマンド行に複数の -U オプションを配置できます。

コマンド行で -D-U の両方に同じ name が指定された場合、オプションの配置順に関係なく、name は未定義になります。次の図で、-U__sun の定義のを削除します。

cc -U__sun text.c

test.c の次の書式のプリプロセッサ文は、__sun の定義が削除されているために有効になりません。

#ifdef(__sun)

定義済みシンボルのリストについては、「B.2.7 -Dname[(arg[,arg])][=expasion]」 を参照してください。

B.2.67 -V

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

B.2.68 -v

より厳しい意味検査およびほかの lint に似た検査を行います。たとえば、次のコードは支障なくコンパイルおよび実行されます。

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

-v オプションを指定した場合も、コンパイルされます。ただし、コンパイラは次の警告を表示します。

"hello.c", line 5: warning: function has no return statement:
 main

-vlint(1) が発する警告をすべて表示するわけではありません。lint を通して前の例を実行することにより、違いを確認できます。

B.2.69 -Wc ,arg

指定されたコンパイラ構成要素 c に、arg を渡します。コンポーネントのリストについては、表 1-1 を参照してください。

引数は前の引数からコンマでのみ区切る必要があります。すべての -W 引数は、残りのコマンド行引数のあとに渡されます。コンマを引数の一部として含めるには、コンマの直前にエスケープ文字 \ (バックスラッシュ) を使用します。すべての -W arg は、通常のコマンド行引数のあとに渡されます。

たとえば、-Wa,-o,objfile は、-oobjfile をこの順番でアセンブラに渡します。また、-Wl,-I,name; を指定すると、リンク段階で動的リンカー /usr/lib/ld.so.1 のデフォルト名が無効になります。

引数がツールに渡される順序は、ほかに指定されるコマンド行オプションとの関係で、今後のコンパイラリリースで変更される可能性があります。

c に使用できる値の一覧を次の表に示します

表 B-12 -W のフラグ

フラグ
意味
a
アセンブラ : (fbe); (gas)
c
C コードジェネレータ : (cg) (SPARC) ;
d
cc ドライバ
h
中間コード翻訳 (ir2hf)(x86)
l
リンクエディタ (ld)
m
mcs
O (大文字の o)
相互手続きオプティマイザ
o (小文字の o)
ポストオプティマイザ
p
プリプロセッサ (cpp)
u
C コードジェネレータ (ube) (x86)
0 (ゼロ)
コンパイラ (acomp)
2
オプティマイザ: (iropt)

-Wd を使用して cc のオプションを c コンパイラに渡すことはできません。

B.2.70 -w

コンパイラからの警告メッセージを出力しません。

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

B.2.71 -X[c| a|t|s]

-X (大文字の X である点に注意) オプションでは ISO C に準拠する度合いを指定します。-xc99 の値により、-X オプションが適用される ISO C 規格のバージョンが異なります。-xc99 オプションは、デフォルトでは -xc99=all になっています。この場合は、1999 ISO/IEC C 規格のサブセットをサポートします。-xc99=none を指定した場合は、1990 ISO/IEC C 規格をサポートします。サポートされている 1999 ISO/IEC の機能については、表 C-6 を参照してください。ISO/IEC C と K&R C との相違点については、「G.1 libfast.a ライブラリ (SPARC)」を参照してください。

デフォルトのモードは -Xa です。

-Xc

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

-Xa

デフォルトのコンパイラモードです。ISO C に K&R C 互換性拡張機能を加え、ISO C により求められる意味の変更を含めたものです。K&R C と ISO C が同じ構造体に異なる意味を指定している場合、コンパイラは ISO C の解釈を使用します。-Xa オプションを -xtransition オプションと併せて使用すると、異なる意味論に関する警告が出力されます。-Xa オプションを指定すると事前定義されたマクロ _ _STDC_ _ の値は -0 になります。

-Xt

(t = 遷移) このオプションでは、ISO C で求められる意味処理の変更を行わずに ISO C と K&R C の拡張互換性が使用されます。K&R C と ISO C で同じ構文に異なる意味処理が指定される場合、コンパイラは K&R C の解釈を使用します。-Xt オプションを -xtransition オプションと併せて使用すると、異なる意味論に関する警告が出力されます。-Xt オプションを指定すると事前定義されたマクロ __STDC__ の値は 0 になります。

-Xs

(s = K&R C) ISO C と K&R C とで異なる動作を持つすべての言語構造体について警告を試みます。コンパイラ言語には、K&R C と互換性のあるすべての機能が含まれています。このオプションは前処理のために cpp を呼び出します。__STDC__ はこのモードでは定義されません。

B.2.72 -x386

(x86) 廃止。このオプションは使わないでください。代わりに、-xchip=generic を使用してください。「A.1.14 廃止オプション」に、廃止のオプションの全一覧をまとめています。

B.2.73 -x486

(x86) 廃止。このオプションは使わないでください。代わりに、-xchip=generic を使用してください。「A.1.14 廃止オプション」に、廃止のオプションの全一覧をまとめています。

B.2.74 -Xlinker arg

arg をリンカー ld(1) に渡します。—z arg と同等

B.2.75 -xaddr32[=yes| no]

(Solaris x86/x64 のみ) コンパイラフラグ -xaddr32=yes は、結果として生成される実行可能ファイルまたは共有オブジェクトを 32 ビットアドレス空間に制限します。

この方法でコンパイルする実行可能ファイルは、32 ビットアドレス空間に制限されるプロセスを作成する結果になります。

-xaddr32=no を指定する場合は、通常の 64 ビットバイナリが作成されます。

-xaddr32 オプションを指定しないと、-xaddr32=no が想定されます。

-xaddr32 だけを指定すると、-xaddr32=yes が想定されます。

このオプションは、-m64 コンパイルのみ、および SF1_SUNW_ADDR32 ソフトウェア機能をサポートしている Oracle Solaris プラットフォームのみに適用できます。Linux カーネルはアドレス空間制限をサポートしていないので、Linux ではこのオプションは使用できません。

単一オブジェクトファイルが -xaddr32=yes を指定してコンパイルされた場合、リンク時には、出力ファイル全体が -xaddr32=yes を指定してコンパイルされたものと見なされます。

32 ビットアドレス空間に制限される共有オブジェクトは、制限された 32 ビットモードのアドレス空間内で実行されるプロセスから読み込む必要があります。

詳細は、『Linker and Libraries Guide』で説明されている SF1_SUNW_ADDR32 ソフトウェア機能の定義を参照してください。

B.2.76 -xalias_level[= l]

コンパイラで -xalias_level オプションを使用して、型に基づく別名の解析による最適化でのレベルを指定します。このオプションは、コンパイル対象の変換ユニットで、指定した別名レベルを有効にします。

-xalias_level コマンドを発行しない場合、コンパイラは -xalias_level=any を仮定します。値を設定しないで -xalias_level を指定する場合、デフォルトは -xalias_level=layout になります。

-xalias_level オプションを使用するには、-xO3 以上の最適化レベルが必要です。最適化がこれよりも低く設定されている場合は、警告が表示され、-xalias_level オプションは無視されます。

-xalias_level オプションを発行しても、別名レベルごとに記述されている規則と制限を遵守しない場合、プログラムが未定義の動作をします。

l を次の表のいずれかの用語で置き換えます。

表 B-13 別名明確化のレベル

フラグ
意味
any
コンパイラは、すべてのメモリー参照がこのレベルで別名設定できると仮定します。-xalias_level=any レベルで型に基づく別名分析は行われません。
basic
-xalias_level=basic オプションを使用する場合、コンパイラは、さまざま な C 言語基本型を呼び出すメモリー参照が相互に別名設定しないと仮定します。また、コンパイラは、ほかのすべての型への参照が C 言語基本型と同様に相互に別名設定できると仮定します。コンパイラは、char * を使用する参照がそのほかの型を別名設定できると仮定します。

たとえば、-xalias_level=basic レベルにおいて、コンパイラは、int * 型のポインタ変数が float オブジェクトにアクセスしないことを仮定します。そのため、コンパイラは、float * 型のポインタが int * 型のポインタで参照される同一メモリーを別名設定しないと仮定する最適化を安全に実行できます。

weak
-xalias_level=weak オプションを使用する場合、コンパイラは、任意の構造体ポインタが構造体の型にポイントできると仮定します。

コンパイルされるソースの式で参照されるか、コンパイルされるソースの外側から参照される型への参照を含む構造体または共用体は、コンパイルされるソースの式より先に宣言する必要があります。

この制限事項を遵守するには、コンパイルされるソースの式で参照されるオブジェクトの型を参照する型を含むプログラムの全ヘッダーファイルを取り込みます。

-xalias_level=weak レベルで、コンパイラは、さまざまな C 言語基本型に関連するメモリー参照が相互に別名設定しないと仮定します。コンパイラは、char * を使用する参照がそのほかの型に関連するメモリー参照を別名設定すると仮定します。

layout
-xalias_level=layout オプションを使用すると、コンパイラは、メモリー内に同一の型のシーケンスを保持する型に関連するメモリー参照が相互に別名設定できると仮定できます。

コンパイラは、メモリーで同一に見えない型を保持する 2 つの参照が相互に別名設定しないと仮定します。コンパイラは、構造体の初期メンバーがメモリーで同じに見える場合、さまざまな構造体の型の別名を介して 2 つのメモリーがアクセスを実行すると仮定します。ただし、このレベルで、構造体へのポインタを使用して、2 つの構造体の間にあるメモリーで同じに見えるメンバーの一般的な初期シーケンスの外側にある類似しない構造体オブジェクトのフィールドにアクセスすべきではありません。コンパイラは、そのような参照が相互に別名設定しないと仮定します。

-xalias_level=layout オプションを使用すると、コンパイラは、メモリー内に同一の型のシーケンスを保持する型に関連するメモリー参照が相互に別名設定できると仮定できます。コンパイラは、char * を使用する参照がそのほかの型に関連するメモリー参照を別名設定できると仮定します。

strict
-xalias_level=strict オプションを使用すると、コンパイラは、タグを削除したときに同一となるメモリー参照 (構造体や共用体などの型に関連するもの) が相互に別名設定できると仮定します。逆に言えば、コンパイラは、タグを削除したあとも同一にならない型に関連するメモリー参照は相互に別名設定しないと仮定します。

ただし、コンパイルされるソースの式で参照されるか、コンパイルされるソースの外側から参照されるオブジェクトの一部となる型への参照を含む構造体または共用体の型は、コンパイルされるソースの式より先に宣言しなければいけません。

この制限事項を遵守するには、コンパイルされるソースの式で参照されるオブジェクトの型を参照する型を含むプログラムの全ヘッダーファイルを取り込みます。-xalias_level=strict レベルで、コンパイラは、さまざまな C 言語基本型に関連するメモリー参照が相互に別名設定しないと仮定します。コンパイラは、char * を使用する参照がそのほかの型を別名設定できると仮定します。

std
-xalias_level=std オプションを使用する場合、コンパイラは、型とタグが別名に対し同一でなくてはならないが、char * を使用する参照がそのほかの型を別名設定できると仮定します。この規則は、1999 ISO C 規格に記載されているポインタの参照解除についての制限事項と同じです。この規則を正しく使用するプログラムは移植性が非常に高く、最適化によって良好なパフォーマンスが得られるはずです。
strong
-xalias_level=strong オプションを使用する場合、std レベルと同じ規則が適用されますが、それに加えて、コンパイラは、型 char * のポインタを使用する場合にかぎり、型 char のオブジェクトにアクセスできると仮定します。また、コンパイラは、内部ポインタが存在しないと仮定します。内部ポインタは、構造体のメンバーをポイントするポインタとして定義されます。

B.2.77 -xanalyze={code| no}

ソースコードの静的分析を生成します。Oracle Solaris Studio コードアナライザを使用して表示できます。

—xanalyze=code を指定してコンパイルし、別の手順でリンクするときは、リンク手順でも —xanalyze=code を含めてください。

デフォルトは —xanalyze=no です。詳細は、Oracle Solaris Studio コードアナライザのドキュメントを参照してください。

B.2.78 -xannotate[=yes| no]

(Solaris のみ) あとで最適化および監視ツール binopt(1)、code-analyzer(1)、discover(1)、collect(1)、および uncover(1) で使用できるバイナリを作成します。

デフォルトは -xannotate=yes です。値なしで -xannotate を指定することは、-xannotate=yes と同義です。

最適化および監視ツールを最適に使用するためには、コンパイル時とリンク時の両方で -xannotate=yes が有効である必要があります。最適化および監視ツールを使用しないときは、-xannotate=no を指定してコンパイルおよびリンクすると、バイナリとライブラリが若干小さくなります。

Linux システムでは、このオプションはありません。

B.2.79 –xarch=isa

対象となる命令セットアーキテクチャー (ISA) を指定します。

このオプションは、コンパイラが生成するコードを、指定した命令セットアーキテクチャーの命令だけに制限します。このオプションは、すべてのターゲットを対象とするような命令としての使用は保証しません。ただし、このオプションを使用するとバイナリプログラムの移植性に影響を与える可能性があります。


注 - 意図するメモリーモデルとして LP64 (64 ビット) または ILP32 (32 ビット) を指定するには、それぞれ -m64 または -m32 オプションを使用してください。次に示すように以前のリリースとの互換性を保つ場合を除いて、-xarch オプションでメモリーモデルを指定できなくなりました。


別々の手順でコンパイルしてリンクする場合は、両方の手順に同じ -xarch の値を指定してください。

_asm 文を指定するときや、アーキテクチャー固有の命令を使用する .il インラインテンプレートファイルを使ってコンパイルするときは、コンパイルエラーを避けるために適切な -xarch 値を指定することが必要な場合があります。

B.2.79.1 SPARC および x86 用の -xarch フラグ

次の表は、SPARC プラットフォームと x86 プラットフォームの両方に共通する -xarch キーワードの一覧です。

表 B-14 SPARC および x86 プラットフォームに共通のフラグ

フラグ
意味
generic
ほとんどのプロセッサに共通の命令セットを使用します。これはデフォルト値です。
generic64
ほとんどの 64 ビットプラットフォームで良好なパフォーマンスになるようにコンパイルします。このオプションは -m64 -xarch=generic と同義で、以前のリリースとの互換性のために提供されています。
native
このシステムで良好なパフォーマンスを得られるようにコンパイルします。現在コンパイルしているシステムプロセッサにもっとも適した設定を選択します。
native64
このシステムで良好なパフォーマンスになるようにコンパイルします。このオプションは -m64 -xarch=native と同義で、以前のリリースとの互換性のために提供されています。

B.2.79.2 SPARC での -xarch のフラグ

次の表は、SPARC プラットフォームでの -xarch キーワードの説明です。

表 B-15 SPARC プラットフォーム用の -xarch フラグ

フラグ
意味
sparc
SPARC-V9 ISA 用のコンパイルを実行しますが、VIS (Visual Instruction Set) は使用せず、その他の実装に固有の ISA 拡張機能も使用しません。このオプションを使用して、コンパイラは、V9 ISA で良好なパフォーマンスが得られるようにコードを生成できます。
sparcvis
SPARC-V9 + VIS (Visual Instruction Set) version 1.0 + UltraSPARC 拡張機能用のコンパイルを実行します。このオプションを使用すると、コンパイラは、UltraSPARC アーキテクチャー上で良好なパフォーマンスが得られるようにコードを生成することができます。
sparcvis2
UltraSPARC アーキテクチャー + VIS (Visual Instruction Set) version 2.0 + UltraSPARC-III 拡張機能用のオブジェクトコードを生成します。
sparcvis3
SPARC VIS version 3 の SPARC-V9 ISA 用にコンパイルします。SPARC-V9 命令セット、VIS (Visual Instruction Set) version 1.0 を含む UltraSPARC 拡張機能、VIS (Visual Instruction Set) version 2.0、積和演算 (FMA) 命令、および VIS (Visual Instruction Set) version 3.0 を含む UltraSPARC-III 拡張機能の命令をコンパイラが使用できるようになります。
sparcfmaf
SPARC-V9 命令セット、VIS (Visual Instruction Set) version 1.0 を含む UltraSPARC 拡張機能、VIS (Visual Instruction Set) version 2.0 を含む UltraSPARC-III 拡張機能、および浮動小数点積和演算用の SPARC64 VI 拡張機能の命令をコンパイラが使用できるようになります。

-xarch=sparcfmaf fma=fused と組み合わせて使用し、ある程度の最適化レベルを指定することで、コンパイラが自動的に積和命令の使用を試みるようにする必要があります。

sparcima
sparcima 版の SPARC-V9 ISA 用にコンパイルします。コンパイラが、SPARC-V9 命令セットに加えて、VIS (Visual Instruction Set) Version 1.0 を含む UltraSPARC 拡張機能、VIS (Visual Instruction Set) Version 2.0 を含む UltraSPARC-III 拡張機能、浮動小数点の積和演算用の SPARC64 VI 拡張機能、整数の積和演算用の SPARC64 VII 拡張機能からの命令を使用できるようにします。
sparc4
SPARC4 バージョンの SPARC-V9 ISA 用にコンパイルします。コンパイラが SPARC-V9 命令セットからの命令、さらに拡張機能 (VIS 1.0 を含む)、UltraSPARC-III 拡張機能 (VIS 2.0 を含む)、浮動小数点積和演算 (FMA) 命令、VIS 3.0、および SPARC4 命令を使用できるようになります。
v9
-m64 -xarch=sparc に相当します。64 ビットメモリーモデルを得るために -xarch=v9 を使用する古いメイクファイルとスクリプトでは、-m64 だけを使用すれば十分です。
v9a
-m64 -xarch=sparcvis に相当し、以前のリリースとの互換性のために用意されています。
v9b
-m64 -xarch=sparcvis2 に相当し、以前のリリースとの互換性のために用意されています。

また、次のことにも注意してください。

B.2.79.3 x86 での -xarch のフラグ

次の表に、x86 プラットフォームでの -xarch フラグを示します。

表 B-16 x86 での -xarch のフラグ

フラグ
意味
amd64
(Solaris のみ) -m64 -xarch=sse2 と同義です。64 ビットメモリーモデルを得るために -xarch=amd64 を使用する古いメイクファイルとスクリプトでは、-m64 だけを使用すれば十分です。
amd64a
(Solaris のみ) -m64 -xarch=sse2a と同義です。
pentium_pro
命令セットを 32 ビット Pentium Pro アーキテクチャーに限定します。
pentium_proa
AMD 拡張機能 (3DNow!、3DNow! 拡張機能、および MMX 拡張機能) を 32 ビット pentium_pro アーキテクチャーに追加します。
sse
SSE 命令セットを pentium_pro アーキテクチャーに追加します。
ssea
AMD 拡張機能 (3DNow!、3DNow! 拡張機能、および MMX 拡張機能) を 32 ビット SSE アーキテクチャーに追加します。
sse2
SSE2 命令セットを pentium_pro アーキテクチャーに追加します。
sse2a
AMD 拡張機能 (3DNow!、3DNow! 拡張機能、および MMX 拡張機能) を 32 ビット SSE2 アーキテクチャーに追加します。
sse3
SSE3 命令セットを SSE2 命令セットに追加します。
sse3a
AMD 拡張命令 (3dnow など) を SSE3 命令セットに追加します。
ssse3
SSSE3 命令セットで、pentium_pro、SSE、SSE2、および SSE3 の各命令セットを補足します。
sse4_1
SSE4.1 命令セットで、pentium_pro、SSE、SSE2、SSE3、および SSSE3 の各命令セットを補足します。
sse4_2
SSE4.2 命令セットで、pentium_pro、SSE、SSE2、SSE3、SSSE3、および SSE4.1 の各命令セットを補足します。
amdsse4a
AMD SSE4a 命令セットを使用します。
aes
Intel Advanced Encryption Standard 命令セットを使用します。
avx
Intel Advanced Vector Extensions 命令セットを使用します。

x86 プラットフォームで、プログラムの一部が —m64 を使用してコンパイルまたはリンクされる場合は、プログラムのすべての部分もこれらのオプションのいずれかを使用してコンパイルされる必要があります。各種 Intel 命令セットアーキテクチャー (SSE、SSE2、SSE3、SSSE3 など) の詳細は、Intel-64 および IA-32 の『Intel Architecture Software Developer's Manual』を参照してください。

「1.2 x86 の特記事項」および 「1.3 バイナリの互換性の妥当性検査」も参照してください。

B.2.79.4 相互の関連性

このオプションは単体でも使用できますが、-xtarget オプションの展開の一部でもあります。したがって、特定の -xtarget オプションで設定される -xarch のオーバーライドにも使用できます。-xtarget=ultra2-xarch=sparcvis -xchip=ultra2 -xcache=16/32/1:512/64/1 に展開されます。次のコマンドでは、-xarch=generic は、-xtarget=ultra2 の展開で設定された -xarch=sparcvis より優先されます。

example% cc -xtarget=ultra2 -xarch=generic foo.c

B.2.79.5 警告

このオプションを最適化と併せて使用する場合、適切なアーキテクチャーを選択すると、そのアーキテクチャー上での実行パフォーマンスを向上させることができます。ただし、適切な選択をしなかった場合、パフォーマンスが著しく低下するか、あるいは、作成されたバイナリプログラムが目的のターゲットプラットフォーム上で実行できない可能性があります。

別々の手順でコンパイルしてリンクする場合は、両方の手順に同じ -xarch の値を指定してください。

B.2.80 -xautopar


注 - このオプションは OpenMP の並列化命令を有効にしません。


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

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

実行速度を上げるには、マルチプロセッサシステムが必要です。シングルプロセッサシステムでは、通常、生成されたバイナリの実行速度は低下します。

並列化されたプログラムをマルチスレッド環境で実行するには、実行前に環境変数 OMP_NUM_THREADS を 1 より大きな値に設定する必要があります。設定しない場合は、デフォルトは 2 です。より多くのスレッドを使用するには、OMP_NUM_THREADS をより高い値に設定します。1 つのスレッドだけで実行する場合は、OMP_NUM_THREADS を 1 に設定します。一般に、OMP_NUM_THREADS には、実行中のシステムで使用可能な仮想プロセッサ数を設定します。Oracle Solaris の psrinfo(1) コマンドを使用して判断できます。

-xautopar を使用してコンパイルとリンクを 1 度に実行する場合、リンクには自動的にマイクロタスキングライブラリおよびスレッドに対して安全な C 実行時ライブラリが含まれます。-xautopar を使用してコンパイルとリンクを別々に実行する場合、リンクにも -xautopar を指定しなければいけません。表 A-2 に、コンパイル時とリンク時の両方に指定する必要があるコンパイラオプションの全一覧をまとめています。

B.2.81 -xbinopt={prepare| off}

(SPARC) このオプションは廃止されており、コンパイラの将来のリリースで削除される予定です。「B.2.78 -xannotate[=yes| no]」を参照してください

コンパイラにあとで最適化、変換、および分析するためにバイナリを準備するように指示します。このオプションは、実行可能ファイルまたは共有オブジェクトの構築に使用できます。このオプションを有効にするには、最適化レベル -xO1 以上で使用する必要があります。このオプションを使用すると、構築したバイナリのサイズが少し増えます。

コンパイルとリンクを別々に行う場合は、両方の手順に -xbinopt を指定する必要があります。

example% cc -c -xO1 -xbinopt=prepare a.c b.c
example% cc -o myprog -xbinopt=prepare a.o

一部のソースコードがコンパイルに使用できない場合も、このオプションを使用してそのほかのコードがコンパイルされます。このとき、最終的なバイナリを作成するリンク手順で、このオプションを使用する必要があります。この場合、このオプションでコンパイルされたコードだけが最適化、変換、分析できます。

-xbinopt=prepare-g を指定してコンパイルすると、デバッグ情報が取り込まれるので、実行可能ファイルのサイズが増えます。デフォルトは -xbinopt=off です。

詳細は、binopt(1) のマニュアルページを参照してください。

B.2.82 -xbuiltin[=( %all|%default|%none)]

標準ライブラリ関数を呼び出すコードの最適化を改善するには、-xbuiltin オプションを使用します。多くの標準ライブラリ関数 (math.hstdio.h で定義されたものなど) は、さまざまなプログラムで一般的に使用されます。-xbuiltin オプションは、パフォーマンスに役立つ場合、コンパイラが組み込み関数やインラインシステム関数を置き換えることを許可します。コンパイラが実際に置換を行う関数を判断するために、オブジェクトファイル内のコンパイラコメントを読み取る方法については、er_src(1) のマニュアルページを参照してください。

これらの置換によって、errno の設定の信頼性が失われる場合があります。プログラムが errno の値に依存している場合、このオプションの使用は避けてください。「2.13 errno の値の保持」も参照してください。

-xbuiltin=%default は、errno を設定しない関数のみをインライン化します。errno の値はどの最適化レベルでも常に正確であり、高い信頼度でチェックできます。-xbuiltin=%default-xO3 以下の場合、コンパイラはどの呼び出しをインライン化すると役立つかを判断し、ほかのものはインライン化しません。-xbuiltin=%none オプションは、ライブラリ関数のすべての置換を無効にします。

-xbuiltin を指定しない場合、デフォルトは、最適化レベル -xO1 以上でコンパイルするときは -xbuiltin=%default -xO0 のときは -xbuiltin=%none です。引数なしで -xbuiltin を指定する場合、デフォルトは -xbuiltin=%all で、コンパイラはより積極的に組み込み関数を置き換えたり、標準ライブラリ関数をインライン化したりします。

-fast を指定してコンパイルする場合は、-xbuiltin%all になります。


注 - -xbuiltin は、システムヘッダーファイルで定義された大域関数のみをインライン化し、ユーザーが定義した静的関数はインライン化しません。


B.2.83 -xCC

-xc99=none および -xCC を指定した場合は、コンパイラで C++ 形式のコメントが認識されます。このオプションを使用すると、// を使用してコメントの始まりを示すことができます。

B.2.84 -xc99[= o]

-xc99 オプションは、C99 規格 (『Programming Language - C (ISO/IEC 9899:1999)』) からの実装機能に対するコンパイラの認識状況を制御します。

次の表に、o の許容値の一覧を示します。複数の値はコンマで区切ることができます。

表 B-17 -xc99 のフラグ

フラグ
意味
lib
1990 および 1999 C 規格の両方にあるルーチンの、1999 C 標準ライブラリの意味を有効にします。no_lib はこれらの意味の認識を無効にします。
all
サポートされている C99 言語機能に認識可能にして、1990 C 規格と 1999 C 規格の両方にあるルーチンの 1999 C 標準ライブラリ意味処理を有効にします。
none
サポートされている C99 言語機能に認識不可にして、1990 C 規格と 1999 C 規格の両方にあるルーチンの 1999 C 標準ライブラリ意味処理を無効にします。

-xc99 を指定しない場合は、コンパイラではデフォルトで -xc99=all,no_lib が設定されます。値を指定しないで -xc99 を指定すると、オプションは -xc99=all に設定されます。

B.2.85 -xcache[= c]

オプティマイザ用のキャッシュ特性を定義します。この定義によって、特定のキャッシュが使用されるわけではありません。


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


オプションのプロパティー [/ti ] は、キャッシュを共有できるスレッド数を設定します。t の値を指定しない場合のデフォルトは 1 です。

c には次のいずれかを指定します。

slat の各特性の定義は次のとおりです。

si

レベル i のデータキャッシュのサイズ (キロバイト単位)

li

レベル i のデータキャッシュのラインサイズ (バイト単位)

ai

レベル i のデータキャッシュの結合特性

ti

レベル i でキャッシュを共有するハードウェアスレッドの数

次に、-xcache の値を示します。

表 B-18 -xcache のフラグ

フラグ
意味
generic
これはデフォルト値です。コンパイラに対して、ほとんどの x86 および SPARC プロセッサで良好なパフォーマンスが得られ、それらのすべてでパフォーマンスが大きく低下しないような、キャッシュプロパティーを使用するように指示します。

これらの最高のタイミング特性は、新しいリリースごとに、必要に応じて調整されます。

native
ホスト環境に対して最適化されたパラメータを設定します。
s1/l1/a1[/t1]
レベル 1 のキャッシュ特性を定義します。
s1/l1/a1[/t1]:s2/l2/a2[/t2]
レベル 1 と 2 のキャッシュ特性を定義します。
s1/l1 /a1[/t1] :s2/l2 /a2[/t 2]: s3/l3/ a3[/t3]
レベル 1、2、3 のキャッシュ特性を定義します。

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

B.2.86 –xcg[89| 92]

(SPARC) 廃止。このオプションは使わないでください。このオプションでコンパイルすると、現在の SPARC プラットフォームでの実行速度が遅いコードが生成されます。代わりに -O を使用して、-xarch-xchip、および -xcache のコンパイラデフォルトを利用します。

B.2.87 -xchar[= o]

オプションこのオプションは、char 型が符号なしで定義されているシステムからのコードの移行を簡単にするためだけに提供されています。そのようなシステムからの移植以外では、このオプションは使用しないでください。char の符号に依存するコードだけは、signed または unsigned を明示的に指定するように書き直す必要があります。

次の表に、o の許容値の一覧を示します。

表 B-19 -xchar のフラグ

フラグ
意味
signed
char 型で定義された文字定数および変数を符号付きとして処理します。このオプションはコンパイル済みコードの動作に影響しますが、ライブラリルーチンの動作には影響しません。
s
signed と同義です。
unsigned
char 型で定義された文字定数および変数を符号なしとして処理します。このオプションはコンパイル済みコードの動作に影響しますが、ライブラリルーチンの動作には影響しません。
u
unsigned と同義です。

-xchar を指定しない場合は、コンパイラでは -xchar=s が指定されます。

-xchar を指定するけれども値を指定しない場合は、コンパイラは -xchar=s と見なします。

-xchar オプションは、-xchar でコンパイルしたコードでだけ、char 型の値の範囲を変更します。このオプションは、システムルーチンまたはヘッダーファイル内の char 型の値の範囲は変更されません。特に、CHAR_MAX および CHAR_MIN の値 (limits.h で定義される) は、このオプションを指定しても変更されません。したがって、CHAR_MAX および CHAR_MIN は、通常の char で符号化可能な値の範囲は表示されなくなります。

-xchar を使用するときは、マクロ内の値が符号付きの場合があるため、char を定義済みシステムマクロと比較する際には特に注意してください。この状況は、マクロを使用してアクセスするエラーコードを戻すルーチンでもっとも一般的です。エラーコードは、一般的には負の値になっています。したがって、char をそのようなマクロによる値と比較するときは、結果は常に false になります。負の数値が符号なしの型の値と等しくなることはありません。

ライブラリ経由でエクスポートされるインタフェースのルーチンをコンパイルするために、-xchar を使用しないでください。Oracle Solaris Studio のすべてのターゲットプラットフォームの ABI は、型 charsigned として指定し、システムライブラリはそれに応じて動作します。char を符号なしにする影響は、システムライブラリで十分にテストされていませんでした。このオプションを使用しないで、char 型の符号の有無に依存しないようにコードを変更してください。型 char の符号は、コンパイラやオペレーティングシステムによって異なります。

B.2.88 -xchar_byte_order[ =o]

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

B.2.89 -xcheck[= o]

スタックオーバーフローに関する実行時検査を追加し、ローカル変数を初期化します。

次の表に、o の値の一覧を示します。

表 B-20 -xcheck のフラグ

フラグ
意味
%none
-xcheck のチェックを実行しません。
%all
-xcheck のチェックをすべて実行します。
stkovf
スタックオーバーフロー検査を有効にします。-xcheck=stkovf は、シングルスレッドプログラム内のメインスレッドのスタックオーバーフローおよびマルチスレッドプログラム内のスレーブスレッドスタックに対する実行時検査を追加します。スタックオーバーフローが検出された場合は、SIGSEGV が生成されます。アプリケーションで、スタックオーバーフローで生成される SIGSEGV をほかのアドレス空間違反と異なる方法で処理する必要がある場合は、sigaltstack(2) を参照してください。
no%stkovf
スタックオーバーフロー検査を無効にします。
init_local
ローカル変数を初期化します。
no%init_local
ローカル変数を初期化しません。

-xcheck を指定しない場合は、コンパイラではデフォルトで -xcheck=%none が指定されます。引数を指定せずに xcheck を使用した場合は、コンパイラではデフォルトで -xcheck=%all が指定されます。

-xcheck オプションは、コマンド行で累積されません。コンパイラは、コマンドで最後に指定したものに従ってフラグを設定します。

B.2.89.1 -xcheck=init_local の初期化値

-xcheck=init_local では、次の表に示すように、コンパイラは初期化子なしで宣言されたローカル変数を事前定義された値に初期化します。(これらの値は変更される可能性があるため、信頼しないでください)。

基本型

表 B-21 基本型の init_local の初期化

初期化値
char, _Bool
0x85
short
0x8001
int, long, enum     (-m32)
0xff80002b
long    (-m64)
0xfff00031ff800033
long long
0xfff00031ff800033
pointer
0x00000001 (-m32)

0x0000000000000001 (-m64)

float, float _Imaginary
0xff800001
float _Complex
0xff80000fff800011
double
SPARC: 0xfff00003ff800005

x86: 0xfff00005ff800003

double _Imaginary
0xfff00013ff800015
long double, long double _Imaginary
SPARC: 0xffff0007ff800009 / 0xfff0000bff80000d

x86: 12 bytes (-m32): 0x80000009ff800005 / 0x0000ffff

x86: 16 bytes (-m64): 0x80000009ff800005 / 0x0000ffff00000000

double _Complex
0xfff00013ff800015 / 0xfff00017ff800019
long double _Complex
SPARC: 0xffff001bff80001d / 0xfff0001fff800021 / 0xffff0023ff800025 / 0xfff00027ff800029

x86: 12 バイト (-m32): 0x7fffb01bff80001d / 0x00007fff / 0x7fffb023ff800025 / 0x00007fff

x86: 16 バイト (-m64): 0x00007fff00080000 / 0x1b1d1f2100000000 / 0x00007fff00080000 / 0x2927252300000000

計算された goto で使用するために宣言されたローカル変数 (単純な void * ポインタ) は、表中のポインタの説明に従って初期化されます。

次のローカル変数型は初期化されません: 修飾された constregister、計算された goto のラベル番号、ローカルラベル。

構造体、共用体、配列の初期化

初期化されていない参照が可視エラーを生成する可能性を最大化するために、struct 内の基本型であるフィールドは、表で説明されているとおりに初期化されます。union 内で最初に宣言された pointer または float フィールドも同様です。

配列要素も表で説明されているとおりに初期化されます。

入れ子の structunion、および配列フィールドは、ビットフィールドを含む structpointer または float フィールドのない union、または完全に初期化できない型の配列を除いて、表で説明されているとおりに初期化されます。これらの例外は、型 double のローカル変数に使用される値で初期化されます。

B.2.90 -xchip[= c]

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

このオプションは単独でも使用できますが、-xtarget オプションの展開の一部です。その主な使用方法は、-xtarget オプションで提供される値を上書きすることです。

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

次の表は、SPARC プラットフォーム向けの c-xchip 値の一覧です。

表 B-22 SPARC -xchip のフラグ

フラグ
意味
generic
ほとんどの SPARC で良好なパフォーマンスとなるタイミング特性を使用します。

これはデフォルト値です。コンパイラに対して、ほとんどのプロセッサで良好なパフォーマンスが得られ、それらのすべてでパフォーマンスが大きく低下しないような、最適なタイミングプロパティーを使用するように指示します。

native
ホスト環境で最適なパフォーマンスになるようにパラメータを設定します。
sparc64vi
SPARC64 VI プロセッサ用に最適化します。
sparc64vii
SPARC64 VII プロセッサ用に最適化します。
sparc64viiplus
SPARC64 VII+ プロセッサ用に最適化します。
ultra
UltraSPARC プロセッサのタイミング特性を使用します。
ultra2
UltraSPARC II プロセッサのタイミング特性を使用します。
ultra2e
UltraSPARC IIe プロセッサのタイミング特性を使用します。
ultra2i
UltraSPARC IIi プロセッサのタイミング特性を使用します。
ultra3
UltraSPARC III プロセッサのタイミング特性を使用します。
ultra3cu
UltraSPARC III Cu プロセッサのタイミング属性を使用します。
ultra3i
UltraSPARC IIIi プロセッサのタイミング特性を使用します。
ultra4
UltraSPARC プロセッサのタイミング特性を使用します。
ultra4plus
UltraSPARC IVplus プロセッサのタイミング特性を使用します。
ultraT1
UltraSPARC T1 プロセッサのタイミング特性を使用します。
ultraT2
UltraSPARC T2 プロセッサのタイミング特性を使用します。
ultraT2plus
UltraSPARC T2+ プロセッサのタイミング特性を使用します。
T3
SPARC T3 プロセッサのタイミングプロパティーを使用します。
T4
SPARC T4 プロセッサのタイミングプロパティーを使用します。

次の表は、x86 プラットフォーム向けの -xchip の値をまとめています。

表 B-23 x86 -xchip のフラグ

フラグ
意味
generic
ほとんどの x86 アーキテクチャーで良好なパフォーマンスとなるタイミング特性を使用します。

これはデフォルト値です。コンパイラに対して、ほとんどのプロセッサで良好なパフォーマンスが得られ、それらのすべてでパフォーマンスが大きく低下しないような、最適なタイミングプロパティーを使用するように指示します。

native
ホスト環境に対して最適化されたパラメータを設定します。
core2
Intel Core2 プロセッサ用に最適化します。
nehalem
Intel Nehalem プロセッサ用に最適化します。
opteron
AMD Opteron プロセッサ用に最適化します。
penryn
Intel Penryn プロセッサ用に最適化します。
pentium
x86 Pentium アーキテクチャーのタイミングプロパティーを使用します
pentium_pro
x86 Pentium Pro アーキテクチャーのタイミングプロパティーを使用します
pentium3
x86 Pentium 3 アーキテクチャーのタイミング特性を使用します。
pentium4
x86 Pentium 4 アーキテクチャーのタイミング特性を使用します。
amdfam10
AMD AMDFAM10 プロセッサ用に最適化します。
sandybridge
Intel Sandy Bridge プロセッサ
westmere
Intel Westmere プロセッサ

B.2.91 -xcode[= v]

(SPARC)コードアドレス空間を指定します。


注 - -xcode=pic13 または -xcode=pic32 を指定することで、共有オブジェクトを構築します。-m64 -xcode=abs64 でも作業可能な共有オブジェクトを構築できますが、それらは効率的ではありません。-m64, -xcode=abs32 または -m64, -xcode=abs44 を指定して構築された共有オブジェクトは動作しません。


次の表に、v の値の一覧を示します。

表 B-24 -xcode のフラグ

意味
abs32
これは 32 ビットアーキテクチャーでのデフォルトです。32 ビットの絶対アドレスを生成します。コード + データ + BSS のサイズは 2**32 バイトに制限されます。
abs44
これは 64 ビットアーキテクチャーでのデフォルトです。44 ビットの絶対アドレスを生成します。コード + データ + BSS のサイズは 2**44 バイトに制限されます。64 ビットアーキテクチャーだけで利用できます。
abs64
64 ビットの絶対アドレスを生成します。64 ビットのアーキテクチャーでのみ利用できます。
pic13
共有ライブラリで使用する位置独立コードを生成します。-Kpic と同等です。32 ビットアーキテクチャーでは最大 2**11 まで、64 ビットアーキテクチャーでは最大 2**10 までの固有の外部シンボルを参照できます。
pic32
共有ライブラリで使用する位置独立コード (大規模モデル) を生成します。-KPIC と同義です。32 ビットアーキテクチャーでは最大 2**30 まで、64 ビットアーキテクチャーでは最大 2**29 までの固有の外部シンボルを参照できます。

32 ビットアーキテクチャーの場合は -xcode=abs32 です。64 ビットアーキテクチャーの場合は -xcode=abs44 です。

共有動的ライブラリを作成する場合、64 ビットアーキテクチャーでは -xcode のデフォルト値である abs44abs32 を使用できません。-xcode=pic13 または -xcode=pic32 を指定してください。SPARC では、-xcode=pic13 および -xcode=pic32 で、2 つのわずかなパフォーマンスコストがあります。

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

.o ファイルが -xcode=pic13 または -xcode=pic32 でコンパイルされたかどうかを調べるためのもっとも簡単な方法は、nm コマンドを使用する方法です。

% nm file.o | grep _GLOBAL_OFFSET_TABLE_ U _GLOBAL_OFFSET_TABLE_

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

-xcode=pic13 または -xcode=pic32 のどちらを使用するかを決定するには、elfdump -c を使用してセクションヘッダー sh_name: .got を探すことによって、大域オフセットテーブル (GOT) のサイズを確認します。sh_size 値が GOT のサイズです。GOT が 8,192 バイトに満たない場合は、-xcode=pic13 を指定します。そうでない場合は、-xcode=pic32 を指定します。詳細は、elfdump(1) のマニュアルページを参照してください。

-xcode どのように使用するべきかを決定するには、次のガイドラインに従います。

B.2.92 -xcrossfile

廃止。使用しないでください。代わりに -xipo を使用します。—xcrossfile—xipo=1 の別名です。

B.2.93 -xcsi

C コンパイラが ISO C ソース文字コードの要件に準拠しないロケールで記述されたソースコードを受け付けられるようにします。これらのロケールには、ja_JP.PCK が含まれます。

コンパイラの翻訳段階でこのようなロケールの処理が必要になると、コンパイルの時間が非常に長くなることがあります。そのため、このオプションを使用するのは、前述のロケールのソース文字を含むソースファイルをコンパイルする場合に限定すべきです。

コンパイラは、-xcsi が発行されないかぎり、ISO C ソース文字コードの要件に準拠しないロケールで記述されたソースコードを認識しません。

B.2.94 -xdebugformat=[stabs|dwarf ]

DWARF 形式のデバッグ情報を読み取るソフトウェアを保守している場合は、-xdebugformat=dwarf を指定します。このオプションにより、コンパイラは DWARF 標準形式を使用してデバッグ情報を生成します。これがデフォルトです。

表 B-25 -xdebugformat のフラグ

意味
stabs
-xdebugformat=stabs は、STABS 標準形式を使用してデバッグ情報を生成します。
dwarf
-xdebugformat=dwarf は、DWARF 標準形式を使用してデバッグ情報を生成します (デフォルト)。

-xdebugformat を指定しない場合は、コンパイラでは -xdebugformat=dwarf が指定されます。このオプションには引数が必要です。

このオプションは、-g オプションによって記録されるデータの形式に影響します。-g を指定しなくても、一部のデバッグ情報が記録されますが、その情報の形式もこのオプションによって制御されます。したがって、-g を使用しなくても、-xdebugformat は効果があります。

dbx とパフォーマンスアナライザソフトウェアは、STABS 形式と DWARF 形式を両方とも理解するので、このオプションを使用しても、いずれかのツールの機能に対する影響はありません。

詳細は、dumpstabs(1) および dwarfdump(1) のマニュアルページを参照してください。

B.2.95 -xdepend=[yes| no]

ループの繰り返し内部でのデータ依存性を解析し、ループの交換、ループの融合、スカラー置換など、ループの再構成を行います。

最適化レベルが -xO3 かそれ以上に設定されている場合はすべて、-xdepend のデフォルトは -xdepend=on です。-xdepend の明示的な設定を指定すると、デフォルト設定は上書きされます。

引数なしで -xdepend を指定すると、-xdepend=yes と同等であることを意味します。

依存性の解析はシングルプロセッサシステムで役立つことがあります。ただし、シングルプロセッサシステムで -xdepend を使用する場合は、-xautopar も指定するべきではありません。-xdepend 最適化は、マルチプロセッサシステムのために行われるためです。

B.2.96 -xdryrun

このオプションは -### のマクロです。

B.2.97 -xdumpmacros[= value[,value...]]

プログラム内でマクロがどのように動作しているかを確認するときは、このオプションを使用します。このオプションは、定義済みマクロ、解除済みマクロ、実際の使用状況といった情報を提供します。マクロの処理順序に基づいて、標準エラー (stderr) への出力が出力されます。-xdumpmacros オプションは、ファイルの終わりまで、または dumpmacros プラグマまたは end_dumpmacros プラグマによって上書きされるまで有効です。「2.11.6 dumpmacros」を参照してください。

次の表に、value の有効な引数の一覧を示します。接頭辞 no% は関連付けられた値を無効にします。

表 B-26 -xdumpmacros の値

意味
[no%]defs
すべての定義済みマクロを出力します。
[no%]undefs
すべての解除済みマクロを出力します。
[no%]use
使用されているマクロの情報を出力します
[no%]loc
defsundefsuse の位置 (パス名と行番号) も出力します。
[no%]conds
条件付き指令で使用されたマクロの使用情報を出力します。
[no%]sys
システムヘッダーファイル内のマクロについて、すべての定義済みマクロ、解除済みマクロ、使用状況を出力します。
%all
オプションを-xdumpmacros=defs,undefs,use,loc,conds,sys に設定します。この引数は、[no%] 形式の引数と併用すると効果的です。たとえば -xdumpmacros=%all,no%sys は、出力からシステムヘッダーマクロを除外しますが、そのほかのマクロに関する情報は依然として出力します。
%none
あらゆるマクロ情報を出力しません。

オプションの値は累積されるので、-xdumpmacros=sys -xdumpmacros=undefs を指定することは、-xdumpmacros=undefs,sys と同じ効果があります。


注 - サブオプション loccondssys は、オプション defsundefsuse の修飾子です。loccondssys は、単独では効果はありません。たとえば -xdumpmacros=loc,conds,sys は、まったく効果を持ちません。


引数なしで -xdumpmacros を指定するときのデフォルトは、-xdumpmacros=defs,undefs,sys です。-xdumpmacros を指定しないときのデフォルトは、-xdumpmacros=%none です。

-xdumpmacros=use,no%loc オプションを使用すると、使用した各マクロの名前が一度だけ出力されます。より詳しい情報が必要であれば、-xdumpmacros=use,loc オプションを使用します。マクロを使用するたびに、そのマクロの名前と位置が印刷されます。

次のファイル t.c を考慮します。

example% cat t.c
#ifdef FOO
#undef FOO
#define COMPUTE(a, b) a+b
#else
#define COMPUTE(a,b) a-b
#endif
int n = COMPUTE(5,2);
int j = COMPUTE(7,1);
#if COMPUTE(8,3) + NN + MM
int k = 0;
#endif

次の例は、defsundefssys、および loc の引数に基づいた、ファイル t.c の出力を示しています。

example% cc -c -xdumpmacros -DFOO t.c
#define __SunOS_5_9 1
#define __SUNPRO_C 0x512
#define unix 1
#define sun 1
#define sparc 1
#define __sparc 1
#define __unix 1
#define __sun 1
#define __BUILTIN_VA_ARG_INCR 1
#define __SVR4 1
#define __SUNPRO_CC_COMPAT 5
#define __SUN_PREFETCH 1
#define FOO 1
#undef FOO
#define COMPUTE(a, b) a + b

example% cc -c -xdumpmacros=defs,undefs,loc -DFOO -UBAR t.c
command line: #define __SunOS_5_9 1
command line: #define __SUNPRO_C 0x512
command line: #define unix 1
command line: #define sun 1
command line: #define sparc 1
command line: #define __sparc 1
command line: #define __unix 1
command line: #define __sun 1
command line: #define __BUILTIN_VA_ARG_INCR 1
command line: #define __SVR4 1
command line: #define __SUN_PREFETCH 1
command line: #define FOO 1
command line: #undef BAR
t.c, line 2: #undef FOO
t.c, line 3: #define COMPUTE(a, b) a + b

次の例では、useloc、および conds の引数によって、マクロ動作がファイル t.c に出力されます。

example% cc -c -xdumpmacros=use t.c
used macro COMPUTE

example% cc -c -xdumpmacros=use,loc t.c
t.c, line 7: used macro COMPUTE
t.c, line 8: used macro COMPUTE

example% cc -c -xdumpmacros=use,conds t.c
used macro FOO
used macro COMPUTE
used macro NN
used macro MM

example% cc -c -xdumpmacros=use,conds,loc t.c
t.c, line 1: used macro FOO
t.c, line 7: used macro COMPUTE
t.c, line 8: used macro COMPUTE
t.c, line 9: used macro COMPUTE
t.c, line 9: used macro NN
t.c, line 9: used macro MM

次は、ファイル y.c の例です。

example% cat y.c
#define X 1
#define Y X
#define Z Y
int a = Z;

次の例は、y.c 内のマクロに基づく、-xdumpmacros=use,loc からの出力を示しています。

example% cc -c -xdumpmacros=use,loc y.c
y.c, line 4: used macro Z
y.c, line 4: used macro Y
y.c, line 4: used macro X

プラグマ dumpmacros/end_dumpmacros は、-xdumpmacros コマンド行オプションのスコープより優先されます。

B.2.98 -xe

ソースファイルに対して構文および意味検査を実行しますが、オブジェクトコードや実行可能コードは生成しません。

B.2.99 -xF[= v[,v...]]

リンカーによる関数と変数の最適な順序の並べ替えを有効にします。

このオプションは、コンパイラに対して、関数またはデータ変数を別々のセクションフラグメントに配置するように指示します。それによってリンカーは、リンカーの -M オプションで指定されたマップファイル内の指示を使用して、これらのセクションの順序を並べ替えてプログラムのパフォーマンスを最適化できます。この最適化は、ページフォルト時間がプログラム実行時間の多くの割合を占めているときにもっとも効果的です。

変数を並べ替えることは、実行時パフォーマンスに悪影響を与える次のような問題を解決するのに役立つ可能性があります。

最適なパフォーマンスを得るために変数と関数の順序を並べ替えるには、次の処理が必要です。

  1. -xF によるコンパイルとリンク

  2. 関数またはデータのマップファイルの生成については、『Oracle Solaris Studio パフォーマンスアナライザ』および『Oracle Solaris リンカーとライブラリ』に記載された手順に従ってください。

  3. リンカーの -M オプションを使用して新しいマップファイルを再リンクします。

  4. アナライザで再実行して、パフォーマンスが向上したかどうかを検証します。

B.2.99.1 値

次の表に、v の値の一覧を示します。

表 B-27 -xF の値

意味
func
関数を個別のセクションにフラグメント化します。
gbldata
大域データ (外部リンケージを持つ変数) を個別のセクションにフラグメント化します。
lcldata
ローカルデータ (内部リンケージを持つ変数) を個別のセクションにフラグメント化します。
%all
関数、大域データ、局所データを細分化します。
%none
何も細分化しません。

サブオプションを無効にするには、(%all および %none を除いた) 値の前に no% を置きます。例: no%func

-xF を指定しない場合のデフォルトは、-xF=%none です。引数を指定しないで -xF を指定した場合のデフォルトは、-xF=%none,func です。

-xF=lcldata を使用するとアドレス計算最適化が一部禁止されるので、このフラグは試験によって正しいと認められた場合にのみ使用してください。

analyzer(1)、および ld(1) のマニュアルページを参照してください。

B.2.100 -xhelp=flags

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

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

B.2.101 -xhwcprof

(SPARC) コンパイラのハードウェアカウンタによるプロファイリングのサポートを有効にします。

-xhwcprof を有効にすると、コンパイラは、プロファイル対象のロード命令およびストア命令と、それらが参照するデータ型および構造体メンバーをツールが関連付けるのに役立つ情報を、-g で生成されたシンボル情報と組み合わせて生成します。プロファイルデータを、命令領域ではなくターゲットのデータ領域に関連付けます。これにより、命令プロファイリングだけからは簡単には得られない、動作に対する洞察が提供されます。

指定した一連のオブジェクトファイルは、-xhwcprof を指定してコンパイルできます。ただし、-xhwcprof は、アプリケーション内のすべてのオブジェクトファイルに適用されたときに、もっとも役立ちます。アプリケーションのオブジェクトファイルに分散しているすべてのメモリー参照が洗い出され、相互に関連付けられます。

コンパイルとリンクを別々に行う場合は、-xhwcprof をリンク時にも使用してくだ さい。-xhwcprof への今後の拡張により、リンク時にこれを使用することが必要になる可能性があります。表 A-2 に、コンパイル時とリンク時の両方に指定する必要があるコンパイラオプションの全一覧をまとめています。

-xhwcprof=enable または -xhwcprof=disable のインスタンスは、同じコマンド行にある以前の -xhwcprof のインスタンスをすべて無効にします。

-xhwcprof はデフォルトでは無効です。引数を指定せずに -xhwcprof と指定することは、-xhwcprof=enable と指定することと同じです。

-xhwcprof では、最適化を有効にして、デバッグデータ形式を DWARF (-xdebugformat=dwarf) に設定する必要があります。

-xhwcprof-g を組み合わせて使用すると、コンパイラに必要な一時ファイル記憶領域は、-xhwcprof-g を単独で指定することによって増える量の合計を超えて大きくなります。

次のコマンドは example.c をコンパイルし、ハードウェアカウンタによるプロファイリングのサポートを指定し、DWARF シンボルを使用してデータ型と構造体メンバーのシンボリック解析を指定します。

example% cc -c -O -xhwcprof -g -xdebugformat=dwarf example.c

ハードウェアカウンタベースのプロファイリングの詳細は、『Oracle Solaris Studio パフォーマンスアナライザ』を参照してください。

B.2.102 -xinline=list

list for -xinline の書式を次に示します。[{%auto ,func_name,no%func_name }[,{%auto,func_name, no%func_name}]...]

-xinline は、オプションのリストで指定した関数だけのインライン化を試行します。このリストは、空か、func_nameno%func_name、または %auto のコンマ区切りのリストを含みます。func_name は関数名です。-xinline は、-xO3 以上でにのみ効果を持ちます。

表 B-28 -xinline のフラグ

フラグ
意味
%auto
コンパイラがソースファイル内のすべての関数を自動的にインライン化するように指定します。%auto は、-xO4 以上の最適化レベルでのみ効果を持ちます。%auto は、-xO3 以下の最適化レベルでサイレントに無視されます。
func_name
指定した関数をコンパイラでインライン化するように指定します。
no%func_name
指定した関数をコンパイラでインライン化しないように指定します。

値のリストは、左から右に累積されます。-xinline=%auto,no%foo と指定した場合、コンパイラは foo 以外のすべての関数をインライン化しようとします。-xinline=%bar,%myfunc,no%bar と指定した場合は、myfunc だけのインライン化が試行されます。

最適化レベルを -xO4 以上に設定してコンパイルすると、通常はソースファイルで定義されたすべての関数参照のインライン化が試行されます。-xinline オプションを使用することで、特定の関数をインライン化しないように制限できます。関数または %auto を指定せずに -xinline= のみを指定することは、ソースファイル内のどのルーチンもインライン化されないことを示します。%auto を指定せずに func_name および no%func_name を指定した場合、コンパイラはリストで指定されたそれらの関数のみをインライン化しようとします。最適化レベルが -xO4 以上に設定された状態で、-xinline オプションの値リストで %auto が指定されている場合、コンパイラは no%func_name で明示的に除外されていないすべての関数をインライン化しようとします。

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

コマンド行で -xinline を複数指定した場合は、それらは累積されません。コマンド行の最後の -xinline が、コンパイラがインライン化しようとする関数を指定します。

-xldscope も参照してください。

B.2.103 -xinstrument=[ no%]datarace

スレッドアナライザで分析するためにプログラムをコンパイルして計測するには、このオプションを指定します。スレッドアナライザの詳細は、tha(1) のマニュアルページを参照してください。

そうすることで、パフォーマンスアナライザを使用して計測されたプログラムを collect -r races で実行し、データ競合の検出実験を行うことができます。計測機構の組み込まれたコードをスタンドアロンで実行した場合は、より遅く実行されます。

-xinstrument=no%datarace を指定して、スレッドアナライザ用のソースコードの準備をオフにすることができます。これはデフォルト値です。

-xinstrument= は引数付きで指定する必要があります。

コンパイルとリンクを別々に行う場合は、コンパイル時とリンク時の両方で -xinstrument=datarace を指定する必要があります。

このオプションは、プリプロセッサトークン __THA_NOTIFY を定義します。#ifdef __THA_NOTIFY を指定して、libtha(3) ルーチンへの呼び出しを保護できます。

このオプションにも、-g を設定します。

B.2.104 -xipo[= a]

a0 1、または 2 と置き換えます。引数なしの -xipo は、-xipo=1 と同義です。-xipo=0 はデフォルト設定で、-xipo を無効にします。-xipo=1 を指定した場合は、すべてのソースファイルでインライン化が実行されます。

-xipo=2 を指定した場合は、コンパイラは内部手続きの別名解析と、メモリーの割り当ておよび配置の最適化を実行し、キャッシュ性能を向上させます。

このコンパイラは、内部手続き解析コンポーネントを呼び出すことにより、プログラムの一部の最適化を実行します。このオプションを指定すると、リンク段階ですべてのオブジェクトファイルを介して最適化を実行し、最適化の対象をコンパイルコマンドのソースファイルだけに限定しません。ただし、-xipo で実行されるプログラム全体の最適化には、アセンブリ (.s) ソースファイルは含まれません。

-xipo は、コンパイル時とリンク時の両方で指定する必要があります。表 A-2 に、コンパイル時とリンク時の両方に指定する必要があるコンパイラオプションの全一覧をまとめています。

-xipo オプションは、ファイルを介して最適化を実行する際に必要な情報を追加するため、非常に大きなオブジェクトファイルを生成します。ただし、この補足情報は最終的な実行可能バイナリファイルの一部にはなりません。実行可能プログラムのサイズが拡大するのは、最適化が追加実行されるためです。このコンパイル段階で作成されたオブジェクトファイルには、内部でコンパイルされた追加の分析情報が含まれているため、リンク段階でファイル相互の最適化を実行できます。

-xipo は、大きなマルチファイルアプリケーションをコンパイルおよびリンクする際に特に便利です。このフラグを指定してコンパイルされたオブジェクトファイルには、ソースプログラムファイルとコンパイル済みプログラムファイル間で内部手続き解析を有効にする解析情報が含まれています。

解析と最適化は、-xipo を指定してコンパイルされたオブジェクトファイルに限定され、オブジェクトファイルやライブラリまでは及びません。

-xipoは複数の段階に分かれているため、コンパイルとリンクを個別に実行する場合、各ステップで -xipo を指定する必要があります。

-xipo に関するそのほかの重要な情報を次に示します。

B.2.104.1 -xipo の例

次の例では、コンパイルとリンクが単一ステップで実行されます。

cc -xipo -xO4 -o prog part1.c part2.c part3.c

オプティマイザは 3 つのすべてのソースファイル間でファイル間のインライン化を実行します。この処理は最後のリンクステップで行われるので、ソースファイルのコンパイルを単一コンパイルですべて実行する必要はありません。-xipo オプションをそれぞれ指定して、個別のコンパイルを何回か実行してもかまいません。

次の例では、個別のステップでコンパイルとリンクが実行されます。

cc -xipo -xO4 -c part1.c part2.c
cc -xipo -xO4 -c part3.c
cc -xipo -xO4 -o prog part1.o part2.o part3.o

制限は、-xipo でコンパイルする場合でも、ライブラリはファイル相互の内部手続き解析に含まれない点です。次の例を参照してください。

cc -xipo -xO4 one.c two.c three.c
ar -r mylib.a one.o two.o three.o
...
cc -xipo -xO4 -o myprog main.c four.c mylib.a

この例では、内部手続きの最適化は one.ctwo.c および three.c 間と、main.c および four.c 間で実行されますが、main.c または four.cmylib.a のルーチン間では実行されません。最初のコンパイルは未定義のシンボルに関する警告を生成する場合がありますが、内部手続きの最適化は、コンパイルおよびリンクステップであるために実行されます。

B.2.104.2 -xipo=2 による内部手続き解析を行うべきでないケース

内部手続き解析では、コンパイラは、リンクステップでオブジェクトファイル群を操作しながら、プログラム全体の解析と最適化を試みます。このとき、コンパイラは、このオブジェクトファイル群に定義されているすべての foo() 関数 (またはサブルーチン) に関して次の 2 つのことを仮定します。

仮定 2 が真でない場合は、-xipo=1 または -xipo=2 でコンパイルしないでください。

1 例として、独自のバージョンの malloc() で関数 malloc() を置き換え、-xipo=2 を指定してコンパイルするケースを考えてみましょう。-xipo=2 を使ってコンパイルする場合、その独自のコードとリンクされる malloc() を参照する、あらゆるライブラリのあらゆる関数のコンパイルで -xipo=2 を使用する必要があるとともに、リンクステップでそれらのオブジェクトファイルが必要になります。システムライブラリにはこの処理を実行できない場合があるため、独自のバージョンの malloc を -xipo=2 でコンパイルしないでください。

もう 1 つの例として、別々のソースファイルにある foo() および bar() という 2 つの外部呼び出しを含む共有ライブラリを構築するケースを考えてみましょう。また、bar() は foo() を呼び出すと仮定します。foo() が実行時に割り込み処理される可能性がある場合、foo() または bar() のソースファイルを -xipo=1 または -xipo=2 でコンパイルしないでください。そうでない場合は、foo() が bar() 内にインライン化される可能性があり、そうすると間違った結果になる可能性があります。

B.2.105 -xipo_archive=[ a]

新しい -xipo_archive オプションは、コンパイラが、リンカーに渡されるオブジェクトファイルと、-xipo でコンパイルされて実行可能ファイルを生成する前にアーカイブライブラリ (.a) に常駐するオブジェクトファイルを最適化することを許可します。コンパイル中に最適化されたライブラリに含まれるオブジェクトファイルはすべて、その最適化されたバージョンに置き換えられます。

次の表に、a の値の一覧を示します。

表 B-29 -xipo_archive のフラグ

意味
writeback
実行可能ファイルを生成する前に、アーカイブライブラリ (.a) に存在する -xipo でコンパイルしたオブジェクトファイルを使ってリンカーに渡すオブジェクトファイルを最適化します。コンパイル中に最適化されたライブラリに含まれるオブジェクトファイルは、すべてその最適化されたバージョンに置き換えられます。

アーカイブライブラリの共通セットを使用する並列リンクでは、最適化されるアーカイブライブラリの独自のコピーを、各リンクでリンク前に作成する必要があります。

readonly
実行可能ファイルを生成する前に、アーカイブライブラリ (.a) に存在する -xipo でコンパイルしたオブジェクトファイルを使ってリンカーに渡すオブジェクトファイルを最適化します。

-xipo_archive=readonly オプションを指定すると、リンク時に指定されたアーカイブライブラリのオブジェクトファイルで、モジュール間のインライン化と内部手続きデータフロー解析が有効になります。ただし、モジュール間インライン化によってほかのモジュールに挿入されたコードを除く、アーカイブライブラリのコードのモジュール間最適化は有効になりません。

アーカイブライブラリ内のコードにモジュール間の最適化を適用するには、-xipo_archive=writeback を指定する必要があります。このオプションは、コードが抽出されたアーカイブライブラリの内容を変更します。

none
これはデフォルト値です。アーカイブファイルの処理は行いません。コンパイラは、モジュール間のインライン化やその他のモジュール間の最適化を、-xipo を使用してコンパイルされ、リンク時にアーカイブライブラリから抽出されたオブジェクトファイルに適用しません。これを行うには、-xipo と、-xipo_archive=readonly または -xipo_archive=writeback のいずれかをリンク時に指定する必要があります。

-xipo_archive の値が指定されない場合、-xipo_archive=none に設定されます。

-xipo_archive= を値付きで指定する必要があります。

B.2.106 -xivdep[= p]

#pragma ivdep プラグマの解釈を無効化または設定します (ベクトル依存を無視)。

ivdep プラグマは、最適化の目的でループ内で検出された、配列参照へのループがもたらす依存関係の一部またはすべてを無視するようにコンパイラに指示します。これによってコンパイラは、マイクロベクトル化、分散、ソフトウェアパイプラインなど、それ以外の場合は不可能なさまざまなループ最適化を実行できます。これは、依存関係が重要ではない、または依存関係が実際に発生しないことをユーザーが把握している場合に使用されます。

#pragma ivdep 指令の解釈は、—xivdep オプションの値に応じて異なります。

次のリストは、p の値とそれらの意味です。

loop

ループキャリーのベクトル依存と想定されるものを無視

loop_any

ループキャリーのベクトル依存をすべて無視

back

逆方向のループキャリーのベクトル依存と想定されるものを無視

back_any

逆方向のループキャリーのベクトル依存をすべて無視

none

依存を無視しない (ivdep プラグマの無効化)

これらの解釈は、ほかのベンダーの ivdep プラグマの解釈との互換性のために提供されます。

B.2.107 -xjobs=n

コンパイラが作業を完了するために作成するプロセス数を設定するときは、-xjobs オプションを指定します。このオプションは、マルチ CPU マシン上での構築時間を短縮できます。現時点では、-xipo オプションは、-xjobs が一緒に指定されているときにだけ機能します。-xjobs=n を指定すると、内部手続きオプティマイザは、さまざまなファイルをコンパイルするために呼び出すことができるコードジェネレータインスタンスの最大数として、n を使用します。

一般に、n に指定する確実な値は、使用できるプロセッサ数に 1.5 を掛けた数です。生成されたジョブ間のコンテキスト切り替えにより生じるオーバーヘッドのため、使用できるプロセッサ数の何倍もの値を指定すると、パフォーマンスが低下することがあります。また、あまり大きな数を使用すると、スワップ領域などシステムリソースの限界を超える場合があります。

-xjobs には必ず値を指定する必要があります。そうでない場合は、エラー診断が発行され、コンパイルは停止します。

コマンド行に複数の -xjobs のインスタンスがある場合、一番右にあるインスタンスが実行されるまで相互に上書きします。

次の例に示すコマンドは 2 つのプロセッサを持つシステム上で、-xjobs オプションを指定しないで実行された同じコマンドよりも高速にコンパイルを実行します。

 example% cc -xipo -xO4 -xjobs=3 t1.c t2.c t3.c

-xipo_archive= を値付きで指定する必要があります。

B.2.108 -xkeepframe[=[ %all,%none,name,no% name]]

指定した機能 (name) のスタック関連の最適化を禁止します。

%all

すべてのコードのスタック関連最適化を禁止します。

%none

すべてのコードのスタック関連最適化を許可します。

このオプションは累積的で、コマンド行で複数回指定できます。たとえば、—xkeepframe=%all —xkeepframe=no%func1 は、func1 を除くすべての関数のスタックフレームが保持されるはずであることを示します。また、—xkeepframe —xregs=frameptr より優先されます。たとえば、—xkeepframe=%all —xregs=frameptr は、すべての関数のスタックが保持されるはずですが、—xregs=frameptr の最適化は無視されることを示します。

このオプションがコマンド行で指定されていないと、コンパイラはデフォルトの -xkeepframe=%none を使用します。このオプションが値なしで指定されると、コンパイラは -xkeepframe=%all を使用します。

B.2.109 -xldscope={v}

extern シンボルの定義に対するデフォルトのリンカースコープを変更するには、-xldscope オプションを指定します。デフォルトを変更すると、実装がよりうまく隠されるので、より早く、より安全に共有ライブラリを使用できます。

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

表 B-30 -xldscope のフラグ

フラグ
意味
global
大域リンカースコープは、もっとも制限の少ないリンカースコープです。シンボルに対する参照はすべて、シンボルを定義する最初の動的モジュール内の定義に結合します。このリンカースコープは、extern シンボルの現在のリンカースコープです。
symbolic
シンボリックリンカースコープは、大域リンカースコープよりも制限的です。リンクしている動的モジュール内のシンボルに対する参照はすべて、モジュール内に定義されたシンボルに結合します。モジュールの外側では、シンボルは大域と同じです。このリンカースコープはリンカーオプション -Bsymbolic に対応します。リンカーの詳細は、ld(1) のマニュアルページを参照してください。
hidden
隠蔽リンカースコープは、シンボリックリンカースコープや大域リンカースコープよりも制限されたリンカースコープです。動的モジュール内の参照はすべて、そのモジュール内の定義に結合します。シンボルはモジュールの外側では認識されません。

-xldscope を指定しない場合は、コンパイラでは -xldscope=global が指定されます。引数を指定しないで -xldscope を指定すると、エラーが表示されます。コマンド行にこのオプションの複数のインスタンスがある場合、一番右にあるインスタンスが実行されるまで相互に上書きします。

クライアントがライブラリ内の関数をオーバーライドできるようにする場合は必ず、ライブラリの構築時に関数がインラインで生成されないようにしてください。コンパイラは次の状況で関数をインライン化します。

たとえば、ABC というライブラリにデフォルトの allocator 関数があり、ライブラリクライアントがその関数を使用でき、ライブラリの内部でも使用されるものとします。

void* ABC_allocator(size_t size) { return malloc(size); }

-xO4 以上でライブラリを構築すると、コンパイラはライブラリ構成要素内での ABC_allocator の呼び出しをインライン化します。ライブラリユーザーが、カスタマイズされたバージョンで ABC_allocator を置き換えようとする場合、ABC_allocator を呼び出したライブラリコンポーネント内では置き換えは発生しません。最終的なプログラムには、この関数の相異なるバージョンが含まれることになります。

__hidden 指示子または __symbolic 指示子で宣言されたライブラリ関数は、ライブラリの構築時にインラインで生成することができます。これらの関数がユーザーによって無効にされることは想定されていません。詳細は、「2.2 リンカースコープ指示子」を参照してください。

__global 指示子で宣言されたライブラリ関数はインラインで宣言しないでください。また、-xinline コンパイラオプションを使用してインライン化することから保護されるようにしてください。

-xinline-xO-xipo #pragma inline も参照してください。

B.2.110 -xlibmieee

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

B.2.111 -xlibmil

実行速度を上げるため、一部のライブラリルーチンをインライン化します。オプションによって浮動小数点演算用オプションとプラットフォームに適したアセンブリ言語のインラインテンプレートが選択されます。

-xlibmil は、-xinline フラグで関数を指定しているかどうかに関係なく、関数をインライン化します。

ただし、こうした置換によって errno の値の信頼性が失われることがあります。プログラムが errno の値に依存している場合、このオプションの使用は避けてください。「2.13 errno の値の保持」も参照してください。

B.2.112 -xlibmopt

このオプションによって、コンパイラは最適化された数学ルーチンのライブラリを利用できます。このオプションを使用するときは -fround=nearest を指定することによって、デフォルトの丸めモードを使用する必要があります。

数学ルーチンライブラリは最高のパフォーマンスが得られるように最適化されており、通常、高速なコードを生成します。この結果は、通常の数学ライブラリが生成する結果と少し異なることがあります。その場合、通常、異なるのは最後のビットです。

これらの置換によって、errno の設定の信頼性が失われる可能性があります。プログラムが errno の値に依存している場合、このオプションの使用は避けてください。詳細は、「2.13 errno の値の保持」を参照してください。

このライブラリオプションをコマンド行に指定する順序は重要ではありません。

このオプションは -fast オプションを指定した場合にも設定されます。

-fast および -xnolibmopt も参照してください。

B.2.113 -xlic_lib=sunperf

(廃止) Sun Performance Library とリンクするときは、-library=sunperf を使用してください。

B.2.114 -xlicinfo

このオプションは、コンパイル時には暗黙的に無視されます。

B.2.115 -xlinkopt[= level]

(SPARC) 再配置可能なオブジェクトファイルのリンク時の最適化を実行するようコンパイラに指示します。このような最適化は、リンク時にオブジェクトのバイナリコードを解析することによって実行されます。オブジェクトファイルは書き換えられませんが、結果の実行可能コードは元のオブジェクトコードとは異なる場合があります。

-xlinkopt をリンク時に有効にするには、少なくともコンパイルコマンドで -xlinkopt を使用する必要があります。-xlinkopt を指定しないでコンパイルされたオブジェクトバイナリについても、オプティマイザは限定的な最適化を実行できます。

-xlinkopt は、コンパイラのコマンド行にある静的ライブラリのコードは最適化しますが、コマンド行にある共有 (動的) ライブラリのコードは最適化しません。共有ライブラリを構築 (-G でコンパイル) するときに、-xlinkopt も使用できます。

level には、実行する最適化のレベルを 0、1、2 のいずれかで設定します。次の表に、最適化レベルの一覧を示します。

表 B-31 -xlinkopt のフラグ

フラグ
意味
0
ポストオプティマイザは無効です。これがデフォルトです。
1
リンク時の命令キャッシュカラーリングと分岐の最適化を含む、制御フロー解析に基づき最適化を実行します。
2
リンク時のデッドコードの除去とアドレス演算の簡素化を含む、追加のデータフロー解析を実行します。

別の手順でコンパイルする場合は、コンパイルとリンクの両方の手順で -xlinkopt を指定する必要があります。

example% cc -c -xlinkopt a.c b.c
example% cc -o myprog -xlinkopt=2 a.o

表 A-2 に、コンパイル時とリンク時の両方に指定する必要があるコンパイラオプションの全一覧をまとめています。

レベルパラメータは、コンパイラのリンク時にだけ使用されます。例では、オブジェクトバイナリが暗黙のレベル 1 でコンパイルされた場合でも、使用される最適化後レベルは 2 です。

レベルパラメータなしで -xlinkopt を使用することは、-xlinkopt=1 を指定することと同じです。

このオプションは、プログラム全体のコンパイル時に、プロファイルのフィードバックとともに使用されると、もっとも効果的です。プロファイリングによって、コードでもっともよく使用される部分と、もっとも使用されない部分が明らかになるので、構築はオプティマイザに対してそれに基づいて作業を集中するように指示します。このオプションは、リンク時に実行されるコードの最適な配置が命令キャッシュミスを低減できるような、大きなアプリケーションにとって特に重要です。通常、このオプションは次のように使用します。

example% cc -o progt -xO5 -xprofile=collect:prog file.c
example% progt
example% cc -o prog -xO5 -xprofile=use:prog -xlinkopt file.c

プロファイルフィードバックの使用方法についての詳細は、「B.2.144 -xprofile= pを参照してください。

-xlinkopt でコンパイルする場合は、-zcombreloc リンカーオプションは使用しないでください。

このオプションを指定してコンパイルすると、リンク時間がわずかに増えます。オブジェクトファイルも大きくなりますが、実行可能ファイルのサイズは変わりません。-xlinkopt-g を指定してコンパイルすると、デバッグ情報が取り込まれるので、実行可能ファイルのサイズが増えます。

B.2.116 -xloopinfo

どのループが並列化されるかを表示します。ループを並列化しない理由を簡潔に提供します。-xloopinfo オプションは、-xautopar が指定されている場合にのみ有効です。指定されていない場合は、コンパイラによって警告が表示されます。

コードの実行速度を上げるには、このオプションにマルチプロセッサシステムが必要です。シングルプロセッサシステムでは、通常、生成されたコードの実行速度は低下します。

B.2.117 -xM

指定された C プログラムで C プリプロセッサのみを実行します。プリプロセッサがメイクファイル依存関係を生成して結果を標準出力に送信することを要求します。make ファイルと依存関係の詳細は、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

-xM-xMF を指定する場合、-xMF で指定したファイルに、コンパイラはすべてのメイクファイルの依存関係情報を追加します。

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

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

cc– xM1 hello.c
hello.o: hello.c

-Xs モードでは -xM1 は使用できません。

-xM1-xMF を指定する場合、-xMF で指定したファイルに、コンパイラはすべてのメイクファイルの依存関係情報を追加します。

B.2.119 -xMD

-xM と同様にメイクファイル依存関係を生成しますが、コンパイルは続行します。-xMD は、-o 出力 filename (指定されている場合、つまり入力ソース filename) から派生した、メイクファイル依存関係情報のための出力ファイルを生成します。filename の接尾辞は .d で置換 (または追加) されます。-xMD-xMF を指定する場合、-xMF で指定したファイルに、プリプロセッサはすべてのメイクファイルの依存関係情報を書き込みます。複数のソースファイルを使って -xMD -xMF または -xMD -o filename でコンパイルすることは許可されず、エラーが生成されます。依存関係ファイルがすでに存在する場合は上書きされます。

B.2.120 -xMF filename

メイクファイルの依存関係の出力先ファイルを指定するには、このオプションを使用します。1 つのコマンド行の -xMF で、複数の入力ファイルに個々の filename を指定することはできません。複数のソースファイルで -xMD -xMF または -xMMD -xMF を使用してコンパイルすることはできず、エラーが生成されます。依存関係ファイルがすでに存在する場合は上書きされます。

B.2.121 -xMMD

システムヘッダーファイルを除き、メイクファイルの依存関係を生成するには、このオプションを使用します。このオプションは -xM1 と同じ機能を提供しますが、コンパイルは続行します。-xMMD は、-o 出力 filename (指定されている場合、つまり入力ソース filename) から派生した、メイクファイル依存関係情報のための出力ファイルを生成します。filename の接尾辞は .d で置換 (または追加) されます。-xMF を指定する場合、コンパイラは代わりに、ユーザーが指定したファイル名を使用します。複数のソースファイルで -xMMD -xMF または -xMMD -o filename を使用してコンパイルすることはできず、エラーが生成されます。依存関係ファイルがすでに存在する場合は上書きされます。

B.2.122 -xMerge

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

3 つのオプション -xMerge -ztext -xprofile=collect を一緒に使用するべきではありません。-xMerge を指定すると、静的に初期化されたデータを読み取り専用記憶領域に強制的に配置します。 -ztext を指定すると、位置に依存するシンボルを読み取り専用記憶領域内で再配置することを禁止します。-xprofile=collect を指定すると、書き込み可能記憶領域内で、静的に初期化された、位置に依存するシンボルの再配置を生成します。

B.2.123 -xmaxopt[=v]

このオプションは、pragma opt のレベルを指定されたレベルに制限します。v は、off12345 のいずれかです。デフォルト値は -xmaxopt=off であり、pragma opt は無視されます。引数を指定せずに -xmaxopt を指定することは、-xmaxopt=5 を指定することと同義です。

-xO-xmaxopt の両方を指定する場合、-xO で設定する最適化レベルが -xmaxopt 値を超えてはいけません。

B.2.124 -xmemalign=ab

(SPARC) データの境界整列についてコンパイラが行う想定を制御するには、-xmemalign オプションを使用します。潜在的に不正な境界整列メモリーアクセスのために生成されたコードを制御し、不正境界整列アクセスの場合のプログラム動作を制御することで、より簡単に SPARC プラットフォームにコードを移植できます。

最大想定メモリー境界整列と不正境界整列データアクセスの動作を指定します。a (境界整列) と b (動作) の両方の値を指定する必要があります。a は、最大想定メモリー境界整列を指定します。b は、不正境界整列メモリーアクセスの動作を指定します。次に、-memalign の境界整列と動作の値を示します。

表 B-32 -xmemalign の境界整列と動作のフラグ

a
b
1
最大 1 バイトの境界整列
i
アクセスを解釈し、実行を継続する
2
最大 2 バイトの境界整列
s
シグナル SIGBUS を発生させる
4
最大 4 バイトの境界整列
f
64 ビット SPARC (-m64) のみ:

4 以下の境界整列の場合にシグナル SIGBUS を発生させます。それ以外の場合、アクセスを解釈して実行を継続します。32 ビットプログラムの場合、f フラグは i と同義です。

8
最大 8 バイトの境界整列
16
最大 16 バイトの境界整列

bif のいずれかに設定してコンパイルしたオブジェクトファイルにリンクする場合は、必ず、-xmemalign を指定する必要があります。表 A-2 に、コンパイル時とリンク時の両方に指定する必要があるコンパイラオプションの全一覧をまとめています。

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

境界整列がコンパイル時に決定できないメモリーアクセスの場合、コンパイラは、境界整列を想定して、必要なロード/ストア命令のシーケンスを生成します。-xmemalign オプションは、これらの状況のときにコンパイラが想定するデータの最大メモリー境界整列を指定できます。-xmemalign オプションは、境界整列に失敗したメモリーへのアクセスが実行時に発生した場合に行われるエラー動作 (処理) についても指定できます。

実行時の実際のデータ境界整列が指定された整列に達しない場合、境界整列に失敗したアクセス (メモリー読み取りまたは書き込み) が行われると、トラップが発生します。このトラップに対して可能な応答は 2 つあります。

次のデフォルトの値は、-xmemalign オプションがまったく指定されていない場合にのみ適用されます。

-xmemalign オプションが指定されているけれども値が与えられていないときのデフォルトは、すべてのプラットフォームで -xmemalign=1i です。

次の表は、さまざまな境界整列状況を扱うために -xmemalign をどのように使用できるかについての説明です。

表 B-33 -xmemalign の例

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

B.2.125 -xmodel=[a]

(x86) -xmodel オプションは、コンパイラが Oracle Solaris x86 プラットフォームのために 64 ビットオブジェクトの形式を変更することを許可します。そのようなオブジェクトのコンパイルにのみ指定するようにしてください。

このオプションは、64 ビット対応の x64 プロセッサで -m64 も指定した場合にのみ有効です。

次の表に、a の値の一覧を示します。

表 B-34 -xmodel のフラグ

意味
small
このオプションは、実行されるコードの仮想アドレスがリンク時にわかっていて、すべてのシンボルが 0 ~ 2^31 - 2^24 - 1 の範囲の仮想アドレスに配置されることがわかっているスモールモデルのコードを生成します。
kernel
すべてのシンボルが 2^64 - 2^31 ~ 2^64 - 2^24 の範囲で定義されるカーネルモデルのコードを生成します。
medium
データセクションへのシンボリック参照の範囲に関する前提がないミディアムモデルのコードを生成します。テキストセクションのサイズとアドレスは、スモールコードモデルの場合と同じように制限されます。静的データが大量にあるアプリケーションでは、-m64 を指定してコンパイルするときに、-xmodel=medium が必要になることがあります。

このオプションは累積的ではないため、コンパイラはコマンド行でもっとも右側の -xmodel に従ってモデル値を設定します。

-xmodel を指定しない場合、コンパイラは -xmodel=small とみなします。引数を指定せずに-xmodel を指定すると、エラーになります。

すべての変換単位をこのオプションでコンパイルする必要はありません。アクセスするオブジェクトが範囲内にあれば、選択したファイルをコンパイルできます。

すべての Linux システムが medium モデルをサポートしているわけではありません。

B.2.126 -xnolib

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

-xnolib を使用する場合、すべての -l オプションをユーザーが渡さなければいけません。

B.2.127 -xnolibmil

数学ライブラリのルーチンをインライン化しません。このオプションは、たとえば –fast オプションのあとで使用します。

% cc– fast– xnolibmil....

B.2.128 -xnolibmopt

以前に指定された -xlibmopt オプションを無効にすることによって、最適化された数学ライブラリがコンパイラによって使用されることを防ぎます。たとえば、このオプションは -xlibmopt を有効にする -fast のあとで使用します。

% cc -fast -xnolibmopt ...

B.2.129 -xnorunpath

実行可能ファイルに共有ライブラリへの実行時検索パスを組み込みません。

このオプションは、プログラムで使用される共有ライブラリに異なるパスを持つ可能性がある顧客に出荷される実行可能ファイルを構築する場合に推奨されます。

B.2.130 -xO[1|2| 3|4|5]

コンパイラ最適化レベルを設定します。大文字 O のあとに数字 123 4、または 5 が続きます。一般に、最適化のレベルが高いほど、実行時パフォーマンスは向上します。しかし、最適化レベルが高ければ、それだけコンパイル時間が増え、実行可能ファイルが大きくなる可能性があります。

いくつかの場合には、-xO2 がほかのものよりパフォーマンスが良いことがあり、-xO3-xO4 よりパフォーマンスが良いことがあります。

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

デフォルトは最適化なしです。最適化レベルを指定しない場合にのみ可能です。最適化レベルを指定する場合は、最適化を無効にできません。

最適化レベルを設定しないようにする場合は、最適化レベルを示すようなオプションを指定しないようにしてください。たとえば、-fast は最適化を -xO5 に設定するマクロオプションです。最適化レベルを暗黙に示すほかのすべてのオプションは、最適化レベルが設定されているという警告メッセージを発行します。最適化なしでコンパイルする唯一の方法は、コマンド行またはメイクファイルから最適化レベルを指定するすべてのオプションを削除することです。

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

-xO4 以上の最適化レベルで -g を指定すると、完全な最適化と可能なかぎりのシンボル情報を取得することができます。

-g を指定したデバッグでは、-xOn が抑制されませんが、-xOn はいくつかの方法で -g を制限します。たとえば、最適化オプションは、デバッグのユーティリティを減らすので dbx からの変数を表示できませんが、それでも dbx where コマンドを使用して、シンボリックトレースバックを取得することはできます。詳細は、『dbx コマンドによるデバッグ』の第 1 章の「最適化コードのデバッグ」を参照してください。

-xO-xmaxopt の両方を指定する場合、-xO で設定する最適化レベルが -xmaxopt 値を超えてはいけません。

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

B.2.130.1 SPARC 最適化

次の表は、SPARC プラットフォームでの最適化レベルの一覧です。

表 B-35 SPARC プラットフォームでの -xO のフラグ

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

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

-xO3
-xO2 に加えて、外部変数の参照または定義も最適化します。ループの展開やソフトウェアのパイプラインなども実行されます。このレベルでは、ポインタ代入の影響は追跡されません。シグナルハンドラの内部から外部変数を変更するデバイスドライバまたはプログラムをコンパイルするときは、volatile 型修飾子を使用してオブジェクトを最適化から保護する必要がある場合があります。-xO3 レベルは通常、コードサイズが増大します。
-xO4
-xO3 に加えて、同一のファイルに含まれている関数の自動的なインライン化も行います。通常はこれによって実行速度が上がります。どの関数がインライン化されるかを制御するには、「B.2.102 -xinline=listを参照してください。

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

-xO5
最高レベルの最適化を行おうとします。この最適化アルゴリズムは、コンパイルの所要時間が長く、また実行時間が確実に短縮される保証がありません。このレベルの最適化によってパフォーマンスが改善される確率を高くするには、プロファイルのフィードバックを使用します。詳細は、「B.2.144 -xprofile= pを参照してください。

B.2.130.2 x86 最適化レベル

次の表は、x86 プラットフォームでの最適化レベルの一覧です。

表 B-36 x86 プラットフォームでの -xO のフラグ

意味
-xO1
単一段階のデフォルト最適化のほかに、メモリーからの引数の事前ロードと、クロスジャンプ (末尾融合) を行います。
-xO2
高レベルと低レベルの両方の命令をスケジュールし、改良されたスピル解析、ループメモリー参照の除去、レジスタ寿命解析、高度なレジスタ割り当て、大域共通部分式の除去を行います。
-xO3
レベル 2 で行われる最適化のほかに、ループ強度削減と誘導変数除去を行います。
-xO4
-xO3 レベルで行う最適化レベルに加えて、同じファイルに含まれる関数のインライン展開も自動的に行われます。この自動インライン化は通常、実行速度を改善しますが、ときには悪化することもあります。このレベルは通常、コードサイズが増大します。
-xO5
最高レベルの最適化を行います。この最適化アルゴリズムは、コンパイルの所要時間が長く、また実行時間が確実に短縮される保証がありません。これらの一部は、エクスポートされた関数がローカル呼び出し規則エントリポイントを生成したり、スピルコードをさらに最適化したり、命令スケジュールを向上するための解析を追加したりすることを含みます。

デバッグの詳細は、『『Oracle Solaris Studio: dbx コマンドによるデバッグ』』を参照してください。w最適化の詳細は、『『Oracle Solaris Studio パフォーマンスアナライザ』』マニュアルを参照してください。

-xldscope および -xmaxopt も参照してください。

B.2.131 -xopenmp[= i]

OpenMP 指令で明示的な並列化を有効にするには、-xopenmp オプションを使用します。並列化されたプログラムをマルチスレッド環境で実行するには、実行前に環境変数 OMP_NUM_THREADS を 1 より大きな値に設定する必要があります。設定しない場合は、デフォルトは 2 です。より多くのスレッドを使用するには、OMP_NUM_THREADS をより高い値に設定します。1 つのスレッドだけで実行する場合は、OMP_NUM_THREADS を 1 に設定します。一般に、OMP_NUM_THREADS には、実行中のシステムで使用可能な仮想プロセッサ数を設定します。Oracle Solaris の psrinfo(1) コマンドを使用することで判断できます。

入れ子並列を有効にするには、OMP_NESTED 環境変数を TRUE に設定する必要があります。入れ子並列は、デフォルトでは無効です。

次の表に i の値を示します。

表 B-37 -xopenmp のフラグ

意味
parallel
OpenMP プラグマの認識を有効にします。-xopenmp=parallel での最適化レベルは -xO3 です。コンパイラは必要に応じて最適化レベルを -xO3 に変更し、警告を発行します。

このフラグは、プリプロセッサトークン _OPENMP も定義します。

noopt
OpenMP プラグマの認識を有効にします。最適化レベルが -O3 より低い場合は、最適化レベルは上げられません。

cc -O2 -xopenmp=noopt のように -O3 より低い最適化レベルを明示的に設定すると、エラーが表示されます。-xopenmp=noopt で最適化レベルを指定しない場合、OpenMP プラグマが認識され、それに従ってプログラムが並列化されますが、最適化は行われません。

このフラグは、プリプロセッサトークン _OPENMP も定義します。

none
このフラグはデフォルトです。OpenMP プラグマの認識を無効化し、プログラムの最適化レベルへの変更は行わず、プリプロセッサトークンを事前定義しません。

-xopenmp を指定するけれども値を含めない場合、コンパイラは -xopenmp=parallel を想定します。-xopenmp を指定しない場合、コンパイラは -xopenmp=none を仮定します。

dbx を指定して OpenMP プログラムをデバッグする場合、-g-xopenmp=noopt を指定してコンパイルすれば、並列化部分にブレークポイントを設定して変数の内容を表示することができます。

-xopenmp のデフォルトは、将来変更される可能性があります。警告メッセージを出力しないようにするには、適切な最適化を明示的に指定します。

so ライブラリの構築中に -xopenmp を使用する場合、実行可能ファイルをリンクするときに -xopenmp を使用する必要があります。実行可能ファイルのコンパイラは、-xopenmp を指定して .so を構築するコンパイラよりも古いものであってはなりません。この要件は、OpenMP 指令を含むライブラリをコンパイルするときに特に重要です。表 A-2 に、コンパイル時とリンク時の両方に指定する必要があるコンパイラオプションの全一覧をまとめています。

最良のパフォーマンスを得るには、OpenMP 実行時ライブラリ libmtsk.so の最新パッチが、システムにインストールされていることを確認してください。

OpenMP の C の実装に固有の情報については、「3.2 OpenMP に対する並列化」を参照してください。

OpenMP の詳細は、『Oracle Solaris Studio OpenMP API ユーザーズガイド』を参照してください。

B.2.132 -xP

すべての K&R C 関数のプロトタイプを出力する際、コンパイラはソースファイルに対して構文および意味検査のみ行います。このオプションは、オブジェクトコードや実行可能コードを生成しません。たとえば次のソースファイルに -xP を指定したと仮定します。

f()
{
}

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

この出力を生成します。

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

B.2.133 -xpagesize=n

スタックとヒープ用の優先ページサイズを設定します。

SPARC: 次の値が有効です: 4k8K64K512K2M4M32M256M2G16G、または default

x86: 次の値が有効です: 4K2M4M1G、または default

有効なページサイズを指定しない場合は、要求は実行時にサイレントに無視されます。ターゲットプラットフォームに対して有効なページサイズを指定する必要があります。

Oracle Solaris オペレーティングシステムでページのバイト数を判断するには、getpagesize(3C) コマンドを使用します。Oracle Solaris オペレーティングシステムは、ページサイズ要求に従うという保証は提供されません。ターゲットプラットフォームのページサイズを判断するために、pmap(1) または meminfo(2) を使用できます。

-xpagesize オプションは、コンパイル時とリンク時に使用しないかぎり無効です。表 A-2 に、コンパイル時とリンク時の両方に指定する必要があるコンパイラオプションの全一覧をまとめています。

-xpagesize=default を指定する場合は、Oracle Solaris オペレーティングシステムがページサイズを設定します。

このオプションを指定してコンパイルすることは、LD_PRELOAD 環境変数を同等のオプションで mpss.so.1 に設定するか、またはプログラムを実行する前に同等のオプションを指定して Oracle Solaris コマンド ppgsz(1) を実行するのと同じ効果を持ちます。詳細は、関連する Oracle Solaris マニュアルページを参照してください。

このオプションは -xpagesize_heap -xpagesize_stack のマクロです。これらの 2 つのオプションは -xpagesize と同じ次の引数を使用します。-xpagesize を指定することで両方のオプションに同じ値を設定したり、それらをそれぞれ別々の値で指定したりできます。

B.2.134 -xpagesize_heap=n

ヒープ用のメモリーページサイズを設定します。

このオプションは、—xpagesize と同じ値を受け入れます。有効なページサイズを指定しないと、要求は実行時に暗黙的に無視されます。

Oracle Solaris オペレーティングシステムでページのバイト数を判断するには、getpagesize(3C) コマンドを使用します。Oracle Solaris オペレーティングシステムは、ページサイズ要求に従うという保証を提供しません。ターゲットプラットフォームのページサイズを判断するには、 pmap(1) または meminfo(2) を使用します。

-xpagesize_heap=default を指定する場合は、Oracle Solaris オペレーティングシステムがページサイズを設定します。

このオプションを指定してコンパイルすることは、LD_PRELOAD 環境変数を同等のオプションで mpss.so.1 に設定するか、またはプログラムを実行する前に同等のオプションを指定して Oracle Solaris コマンド ppgsz(1) を実行することと同じ効果を持ちます。詳細は、関連する Oracle Solaris マニュアルページを参照してください。

-xpagesize_heap オプションは、コンパイル時とリンク時に使用しないかぎり無効です。表 A-2 に、コンパイル時とリンク時の両方に指定する必要があるコンパイラオプションの全一覧をまとめています。

B.2.135 -xpagesize_stack=n

スタック用のメモリーページサイズを設定します。

このオプションは、—xpagesize と同じ値を受け入れます。有効なページサイズを指定しないと、要求は実行時に暗黙的に無視されます。

Oracle Solaris オペレーティングシステムでページのバイト数を判断するには、getpagesize(3C) コマンドを使用します。Oracle Solaris オペレーティングシステムは、ページサイズ要求に従うという保証を提供しません。ターゲットプラットフォームのページサイズを判断するには、 pmap(1) または meminfo(2) を使用します。

-xpagesize_stack=default を指定する場合は、Oracle Solaris オペレーティングシステムがページサイズを設定します。

このオプションを指定してコンパイルすることは、LD_PRELOAD 環境変数を同等のオプションで mpss.so.1 に設定するか、またはプログラムを実行する前に同等のオプションを指定して Oracle Solaris コマンド ppgsz(1) を実行することと同じ効果を持ちます。詳細は、関連する Oracle Solaris マニュアルページを参照してください。

-xpagesize_stack オプションは、コンパイル時とリンク時に使用しないかぎり無効 です。表 A-2 に、コンパイル時とリンク時の両方に指定する必要があるコンパイラオプションの全一覧をまとめています。

B.2.136 -xpch=v

このコンパイラオプションは、プリコンパイル済みヘッダー機能を起動します。v には、autoautofirstcollect:pch_filenameuse:pch_filename のいずれかを指定できます。この機能は、-xpch-xpchstop オプションを、#pragma hdrstop 指令と組み合わせることで利用できます。

-xpch オプションは、プリコンパイル済みヘッダーファイルを作成して、コンパイル時間を短縮するときに使用します。プリコンパイル済みヘッダーファイルは、大量のソースコードを含む一連の共通インクルードファイルセットをソースファイルが共有しているアプリケーションの、コンパイル時間を短縮します。プリコンパイル済みヘッダーを使用することによって、1 つのソースファイルから一連のヘッダーファイルに関する情報を収集し、そのソースファイルを再コンパイルする場合や、同じ一連のヘッダーを持つほかのソースファイルをコンパイルする場合に、その情報を使用することができます。コンパイラが収集する情報は、プリコンパイル済みヘッダーファイルに格納されます。

詳細は、次を参照してください。

B.2.136.1 プリコンパイル済みヘッダーファイルの自動作成

コンパイラは、2 つの方法のいずれかでプリコンパイル済みヘッダーファイルを自動的に生成できます。1 つは、ソースファイルで検出された最初のインクルードファイルからプリコンパイル済みヘッダーファイルを作成する方法、もう 1 つの方法は、コンパイラが、ソースファイルで検出されたインクルードファイルのセット (最初のインクルードファイルから始めて、どのインクルードファイルが最後のものであるかを判断するためのよく定義されたポイントまで) から選択する方法です。プリコンパイル済みヘッダーを自動的に生成するためにコンパイラがどの方法を使用するかを判断するには、次の表で説明するフラグのいずれかを使用します。

表 B-38 -xpch のフラグ

フラグ
意味
-xpch=auto
プリコンパイル済みヘッダーファイルの内容は、コンパイラがソースファイル内で検出する使用可能な最長の接頭辞に基づきます。このフラグは、最大限の数のヘッダーファイルで構成されるプリコンパイル済みヘッダーファイルを生成します。詳細は、「B.2.136.5 活性文字列 (Viable Prefix)」を参照してください。
-xpch=autofirst
このフラグは、ソースファイル内で最初に検出されたヘッダーのみからなるプリコンパイル済みヘッダーファイルを生成します。

B.2.136.2 プリコンパイル済みヘッダーファイルの手動作成

プリコンパイル済みヘッダーファイルを手動で作成するには、最初に -xpch を使用し、collect モードを指定します。-xpch=collect を指定するコンパイルコマンドは、ソースファイルを 1 つしか指定できません。次の例では、-xpch オプションがソースファイル a.c に基づいて myheader.cpch というプリコンパイル済みヘッダーファイルを作成します。

cc -xpch=collect:myheader a.c

有効なプリコンパイル済みヘッダーファイル名には常に、接尾辞 .cpch が付きます。pch_filename を指定するときに、自分が接尾辞を追加することも、コンパイラに追加してもらうこともできます。たとえば、cc -xpch=collect:foo a.c と指定する場合は、プリコンパイル済みヘッダーファイルは foo.cpch と呼ばれます。

B.2.136.3 既存のプリコンパイル済みヘッダーファイルの処理方法

コンパイラが -xpch=auto および -xpch=autofirst と一緒にプリコンパイル済みヘッダーファイルを使用できない場合、新しいプリコンパイル済みヘッダーファイルを生成します。コンパイラが -xpch=use と一緒にプリコンパイル済みヘッダーファイルを使用できない場合は、警告が発行され、実際のヘッダーを使ってコンパイルが行われます。

B.2.136.4 特定のプリコンパイル済みヘッダーファイルの使用の指定

-xpch=use:pch_filename を指定することによって、特定のプリコンパイル済みヘッダーを使用するようコンパイラに指示することもできます。プリコンパイル済みヘッダーファイルを作成するために使用されたソースファイルと同じインクルードファイルの並びを持つソースファイルであれば、いくつでも指定できます。たとえば、use モードのコマンドは次のようになる可能性があります: cc -xpch=use:foo.cpch foo.c bar.c foobar.c

次の項目が真の場合にのみ、既存のプリコンパイル済みヘッダーファイルを使用してください。次のいずれかが真でない場合は、プリコンパイル済みヘッダーファイルを再作成するべきです。

B.2.136.5 活性文字列 (Viable Prefix)

プリコンパイル済みヘッダーファイルを複数のソースファイル間で共有するために、これらのソースファイルには、最初のトークンの並びとして一連の同じインクルードファイルを使用していなければいけません。トークンはキーワードか名前、句読点のいずれかです。コンパイラは、コードおよび、#if 指令によって除外されたコードをトークンとして認識しません。この最初のトークンの並びは、活性文字列 (viable prefix) として知られています。言い替えれば、活性文字列は、すべてのソースファイルに共通のソースファイルの先頭部分です。コンパイラはこの活性文字列を、プリコンパイル済みヘッダーファイルを作成し、それによってソースからどのヘッダーファイルがプリコンパイルされるかを判断するためのベースとして使用します。

現在のコンパイル中にコンパイラが検出する活性文字列は、プリコンパイル済みヘッダーファイルの作成に使用した活性文字列と一致する必要があります。言い替えれば、活性文字列は、同じプリコンパイル済みヘッダーファイルを使用するすべてのソースファイル間で一貫して解釈される必要があります。

ソースファイルの活性文字列は、コメントと次の任意のプリプロセッサ指令のみで構成できます。

#include
#if/ifdef/ifndef/else/elif/endif
#define/undef
#ident (if identical, passed through as is)
#pragma (if identical)

これらの指令はいずれかがマクロを参照していてもかまいません。#else#elif、および #endif 指令は、活性文字列内で一致している必要があります。コメントは無視されます。

-xpch=auto または -xpch=autofirst を指定すると、コンパイラは活性文字列の終点を自動的に判断します。次のように定義されます。

-xpch=collect または -xpch=use の場合、活性文字列は #pragma hdrstop で終了します。

プリコンパイル済みヘッダーファイルを共有する各ファイルの活性文字列内では、対応する各 #define 指令と #undef 指令は同じシンボルを参照する必要があります。#define の場合は、それぞれが同じ値を参照する必要があります。各活性文字列内での順序も同じである必要があります。対応する各プラグマも同じで、その順序もプリコンパイル済みヘッダーを共有するすべてのファイルで同じでなければいけません。

B.2.136.6 ヘッダーファイルの妥当性の判定

ヘッダーファイルは、異なるソースファイル間で整合性のある方法で解釈されるとき (具体的には、完全な宣言のみを含むとき) に、プリコンパイル可能です。すなわち、どのファイルの宣言も有効な宣言として独立している必要があります。struct S; などの不完全な型宣言は有効な型宣言です。完全な型宣言がほかのファイルに存在している可能性があります。次のヘッダーファイルの例を考えてみてください。

file a.h
struct S {
#include "x.h" /* not allowed */
};

file b.h
struct T; // ok, complete declaration
struct S {
   int i;
[end of file, continued in another file] /* not allowed*/

プリコンパイル済みヘッダーファイルに組み込まれるヘッダーファイルは、次の制約に違反してはいけません。これらの制限に違反するプログラムをコンパイルした場合、結果は予測できません。

ヘッダーに変数と関数の宣言が含まれている場合は、ヘッダーも同様にプリコンパイル可能です。

B.2.136.7 プリコンパイル済みヘッダーファイルキャッシュ

プリコンパイル済みヘッダーファイルの自動作成では、コンパイラは、そのファイルを SunWS_cache ディレクトリに書き込みます。このディレクトリは常に、オブジェクトファイルが作成される場所に置かれます。dmake の下で適切に機能するように、ファイルの更新はロックして行われます。

自動生成されるプリコンパイル済みヘッダーファイルをコンパイラに強制的に再構築させる必要がある場合は、CCadmin ツールを使って、プリコンパイル済みヘッダーファイルキャッシュディレクトリを消去できます。詳細は、CCadmin(1) のマニュアルページを参照してください。

B.2.136.8 警告

B.2.136.9 プリコンパイル済みヘッダーファイルの依存関係と make ファイル

-xpch=collect が指定されている場合、コンパイラはプリコンパイル済みヘッダーファイル用の依存関係情報を生成します。この依存関係情報を利用するには、メイクファイル内に適切な規則を作成する必要があります。次のメイクファイルの例を考えてみてください。

%.o : %.c shared.cpch
         $(CC) -xpch=use:shared -xpchstop=foo.h -c $<
default : a.out

foo.o + shared.cpch : foo.c
         $(CC) -xpch=collect:shared -xpchstop=foo.h foo.c -c

a.out : foo.o bar.o foobar.o
         $(CC) foo.o bar.o foobar.o

clean :
         rm -f *.o shared.cpch .make.state a.out

これらの make 規則は、コンパイラによって生成される依存関係とともに、-xpch=collect で使用したソースファイルのいずれか、またはプリコンパイル済みヘッダーファイルの一部であるヘッダーのいずれかに変更があった場合、手動で作成されたプリコンパイル済みヘッダーファイルを強制的に再作成します。この制約は、古いプリコンパイル済みヘッダーファイルの使用を防ぎます。

-xpch=auto または -xpch=autofirst の場合、メイクファイルに追加の make 規則を作成する必要はありません。

B.2.137 -xpchstop=[file |<include>]

-xpchstop=file オプションは、プリコンパイル済みヘッダーファイル用の活性文字列の最後のインクルードファイルを指定するときに使用します。コマンド行で -xpchstop を使用するのは、cc コマンドで指定する各ソースファイルの file を参照する最初のインクルード指令のあとに hdrstopプラグマを配置するのと同じことです。

<include> までのヘッダーファイルに基づくプリコンパイル済みヘッダーファイルを作成するには、-xpchstop=<include>-xpch-auto を組み合わせます。このフラグは、活性文字列全体に含まれているすべてのヘッダーファイルを使用するデフォ ルトの -xpch=auto の動作に優先します。

次の例では、-xpchstop オプションは、プリコンパイル済みヘッダーファイルの活性文字列が projectheader.h をインクルードして終わるよう指定します。したがって、privateheader.h は活性文字列の一部ではありません。

example% cat a.c
     #include <stdio.h>
     #include <strings.h>
     #include "projectheader.h"
     #include "privateheader.h"
     .
     .
     .
example% cc -xpch=collect:foo.cpch a.c -xpchstop=projectheader.h -c

-xpch も参照してください。

B.2.138 -xpec[={yes|no}]

(Solaris のみ) 移植可能な実行可能コード (Portable Executable Code、PEC) バイナリを生成します。このオプションは、プログラム中間表現をオブジェクトファイルとバイナリに入れます。このバイナリは、あとでチューニングやトラブルシューティングのために、使用される場合があります。

-xpec を指定して構築したバイナリは通常、-xpec なしで構築したバイナリより 5 ~ 10 倍の大きさになります。

-xpec を指定しない場合、コンパイラは -xpec=no と見なします。-xpec を指定するけれどもフラグを指定しない場合は、コンパイラは -xpec=yes と見なします。

B.2.139 -xpentium

(x86) Pentium プロセッサ用のコードを生成します。

B.2.140 -xpg

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


注 - -xprofile とともに使用される場合、—xpg は追加の利点を提供しません。これら 2 つのオプションは、他方で提供されるデータを準備または使用しません。


プロファイルは、64 ビット Oracle Solaris プラットフォームでは prof(1) または gprof (1) を使用して、32 ビット OracleSolaris プラットフォームでは gprof のみを使用して生成され、メイン実行可能ファイル内のルーチンと、実行可能ファイルのリンク時にリンカー引数として指定された共有ライブラリ内のルーチンの PC 標本データ (pcsample(2) を参照) から求められる、ユーザー CPU 時間の概算値を取り込みます。そのほかの共有ライブラリ (dlopen(3DL) を使用してプロセスの起動後に開かれたライブラリ) のプロファイルは作成されません。

32 ビット Oracle Solaris システムの場合、prof(1) を使用して生成されるプロファイルは、実行可能ファイル内のルーチンに制限されます。32 ビット共有ライブラリは、-xpg で実行可能ファイルをリンクし、gprof(1) を使用することでプロファイリングできます。

x86 システムでは、-xpg-xregs=frameptr と互換性がありません。これら 2 つのオプションを一緒に使用しないでください。 -xregs=frameptr-fast に含まれている点にも注意してください。-fast-xpg とともに使用するときは、-fast -xregs=no%frameptr -xpg を指定してコンパイルします。

現行の Oracle Solaris リリースには、-p でコンパイルされるシステムライブラリが含まれません。その結果、現行の Solaris プラットフォームで収集されるプロファイルには、システムライブラリルーチンの呼び出し回数が含まれません。

コンパイル時に -xpg を指定した場合は、リンク時にも指定する必要があります。「A.1.2 コンパイル時とリンク時のオプション」に、コンパイル時とリンク時の両方に指定する必要があるオプションの全一覧をまとめています。


注 - gprof プロファイリングのために -xpg でコンパイルされたバイナリは、binopt(1) では使用しないでください。互換性がないため、内部エラーになる可能性があります。


B.2.141 -xprefetch[= val[,val]]

先読みをサポートするそれらのアーキテクチャーで先読み命令を有効にします。

明示的な先読みは、測定方法によってサポートされる特殊な環境でのみ使用してください。

次の表に、val の値の一覧を示します。

表 B-39 -xprefetch のフラグ

フラグ
意味
latx:factor
指定された factor によってコンパイラで使用されるロードするための先読みと、ストアするための先読みを調整します。このフラグは、-xprefetch=auto とのみ組み合わせることができます。「B.2.141.1 先読み応答率」を参照してください。
[no%]auto
先読み命令の自動生成を有効 [無効] にします。
[no%]explicit
明示的な先読みマクロを有効 [無効] にします。
yes
廃止。使わないでください。代わりに - xprefetch=auto,explicit を使用します。
no
廃止。使わないでください。代わりに -xprefetch=no%auto,no%explicit を使用します。

デフォルトは -xprefetch=auto,explicit です。基本的に非線形のメモリーアクセスパターンを持つアプリケーションには、このデフォルトが良くない影響をもたらします。デフォルトを無効にするには、-xprefetch=no%auto,no%explicit を指定します。

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

B.2.141.1 先読み応答率

先読みの応答時間とは、先読み命令を実行してから先読みされたデータがキャッシュで利用可能となるまでのハードウェアの遅延のことです。

係数には、n.n. という形式の正の数値を使用します。

コンパイラは、先読み命令と先読みされたデータを使用するロードまたはストア命令の距離を決定する際に先読み応答時間の値を想定します。先読みからロードまでの想定応答時間は、先読みからストアまでの想定応答時間と同じでない場合があります。

コンパイラは、幅広いマシンとアプリケーションで最適なパフォーマンスを得られるように先読み機構を調整します。しかし、コンパイラの調整作業が必ずしも最適であるとはかぎりません。メモリーに負担のかかるアプリケーション、特に大型のマルチプロセッサでの実行を意図したアプリケーションの場合、先読みの応答時間の値を引き上げることにより、パフォーマンスを向上できる場合があります。この値を増やすには、1 よりも大きい係数を使用します。.5 と 2.0 の間の値は、おそらく最高のパフォーマンスを提供します。

外部キャッシュの中に完全に常駐するデータセットを持つアプリケーションの場合は、先読み応答時間の値を減らすことでパフォーマンスを向上できる場合があります。値を小さくするには、1 よりも小さな係数を使用します。

latx:factor サブオプションを使用するには、1.0 程度の係数から順にアプリケーションの性能テストを実行します。それに応じて係数を増減し、パフォーマンステストを再実行します。係数の調整を継続し、最適なパフォーマンスに到達するまでパフォーマンステストを実行します。係数を小刻みに増減すると、しばらくはパフォーマンスに変化がなく、突然変化し、再び平常に戻ります。

B.2.142 -xprefetch_auto_type= a

a の値は [no%]indirect_array_access です。

直接メモリーアクセス用の先読みが生成されるのと同じ方法で、-xprefetch_level オプションで指定するループ用の間接先読みをコンパイラが生成することを許可するときは、-xprefetch_auto_type=indirect_array_access を使用します。

-xprefetch_auto_type の値が指定されていない場合、-xprefetch_auto_type=no%indirect_array_access に設定されます。

-xalias_level などのオプションは、メモリー別名を明確化する情報の生成に役立つため、間接プリフェッチ候補の計算の積極性に影響し、このため、自動的な間接プリフェッチの挿入が促進されることがあります。

B.2.143 -xprefetch_level= l

-xprefetch=auto で判断される先読み命令の自動挿入の積極性を制御するには、-xprefetch_level オプションを使用します。l12、または 3 である必要があります。-xprefetch_level が高いレベルであるほど、コンパイラはより積極的になります。つまり、より多くの先読みを取り込みます。

-xprefetch_level に適した値は、アプリケーションが持つキャッシュミス数によって異なります。-xprefetch_level の値を高くするほど、アプリケーションのパフォーマンスが向上する可能性が高くなります。

このオプションは、最適化レベル 3 以上、-xprefetch=auto でコンパイルされたときにのみ有効で、先読みをサポートするプラットフォーム (v8plusv8plusa v9v9av9bgeneric64native64) 用のコードを生成します。

-xprefetch_level=1 は、先読み命令の自動生成を有効にします。-xprefetch_level=2 は、レベル 1 を上回る追加生成を有効にします。-xprefetch_level=3 は、レベル 2 を上回る追加生成を有効にします。

デフォルトは、-xprefetch=auto を指定した場合は -xprefetch_level=1 になります。

B.2.144 –xprofile= p

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

p には、collect[ :profdir]、use[ :profdir]、または tcov[ :profdir] を指定する必要があります。

このオプションは、実行中の実行頻度データを収集および保存します。その後の実行で、パフォーマンスを向上させるためにこのデータを使用できます。プロファイルの収集は、マルチスレッド対応のアプリケーションにとって安全です。すなわち、独自のマルチタスク (-mt) を実行するプログラムをプロファイリングすることで、正確な結果が得られます。このオプションは、-xO2 以上の最適化レベルを指定するときにのみ有効です。コンパイルとリンクを別々の手順で実行する場合は、リンク手順とコンパイル手順の両方で同じ -xprofile オプションを指定する必要があります。

collect[:profdir ]

実行頻度のデータを集めて保存します。のちに -xprofile=use を指定した場合にオプティマイザがこれを使用します。コンパイラによって文の実行頻度を測定するためのコードが生成されます。

-xMerge、-ztext、および -xprofile=collect を一緒に使用しないでください。-xMerge を指定すると、静的に初期化されたデータを読み取り専用記憶領域に強制的に配置します。 -ztext を指定すると、位置に依存するシンボルを読み取り専用記憶領域内で再配置することを禁止します。-xprofile=collect を指定すると、書き込み可能記憶領域内で、静的に初期化された、位置に依存するシンボルの再配置を生成します。

プロファイルディレクトリ名として profdir を指定すると、この名前が、プロファイル化されたオブジェクトコードを含むプログラムまたは共有ライブラリの実行時にプロファイルデータが保存されるディレクトリのパス名になります。profdir パス名が絶対パスではない場合、プログラムがオプション -xprofile=use:profdir でコンパイルされるときの現在の作業用ディレクトリの相対パスとみなされます。

—xprofile=collect: prof_dir または —xprofile=tcov: prof_dir でプロファイルディレクトリ名を指定しない場合、プロファイルデータは実行時に、program.profile という名前のディレクトリに保存されます (program はプロファイリングされたプロセスのメインプログラムのベース名)。この場合は、環境変数 SUN_PROFDATA および SUN_PROFDATA_DIR を使用して、実行時にプロファイルデータが保存される場所を制御できます。設定する場合、プロファイルデータは $SUN_PROFDATA_DIR/$SUN_PROFDATA で指定されたディレクトリに書き込まれます。プロファイルディレクトリ名がコンパイル時に指定されても、実行時に SUN_PROFDATA_DIR および SUN_PROFDATA の効果はありません。これらの環境変数は、tcov で書き込まれるプロファイルデータファイルのパスと名前を同様に制御します。tcov(1) マニュアルページを参照してください。

これらの環境変数が設定されていない場合、プロファイルデータは現在のディレクトリ内のディレクトリ profdir.profile に書き込まれます (profdir は実行可能ファイルの名前または -xprofile=collect: profdir フラグで指定される名前)。profdir がすでに .profile で終わっている場合、-xprofile.profileprofdir に追加しません。プログラムを複数回実行すると、実行頻度データは profdir.profile ディレクトリに蓄積されていくので、以前の実行頻度データは失われません。

別々の手順でコンパイルしてリンクする場合は、-xprofile=collect を指定してコンパイルしたオブジェクトファイルは、リンクでも必ず -xprofile=collect を指定してください。

次の例では、プログラムが構築されたディレクトリと同じディレクトリ内にある myprof.profile ディレクトリ内のプロファイルデータを収集して使用します。

demo: cc -xprofile=collect:myprof.profile -xO5 prog.c -o prog  
demo: ./prog        
demo: cc -xprofile=use:myprof.profile -xO5 prog.c -o prog

次の例では、/bench/myprof.profile ディレクトリ内のプロファイルデータを収集し、収集したプロファイルデータをあとでフィードバックコンパイルで最適化レベル -xO5 で使用します。

demo: cc -xprofile=collect:/bench/myprof.profile \ -xO5 prog.c -o prog  
...run prog from multiple locations..
demo: cc -xprofile=use:/bench/myprof.profile \ -xO5 prog.c -o prog
use[:profdir ]

プロファイリングされたコードが実行されたときに実行された作業のために最適化するときは、—xprofile=collect[: profdir] または —xprofile=tcov[: profdir] でコンパイルされたコードから収集された実行頻度データを使用します。profdir は、—xprofile=collect[: profdir] または —xprofile=tcov[: profdir] でコンパイルされたプログラムを実行して収集されたプロファイルデータを含むディレクトリのパス名です。

tcov—xprofile=use[:profdir の両方で使用できるデータを生成するには、 —xprofile=tcov[:profdir] オプションを使用して、コンパイル時にプロファイルディレクトリを指定する必要があります。—xprofile=tcov: profdir—xprofile=use: profdir の両方で同じプロファイルディレクトリを指定する必要があります。混乱を最小限に抑えるには、profdir を絶対パス名として指定します。

profdir パス名はオプションです。 profdir が指定されていない場合、実行可能バイナリの名前が使用されます。-o が指定されていない場合、a.out が使用されます。 profdir が指定されていない場合、コンパイラは、profdir .profile/feedback、または a.out.profile/feedback を探します。例:

demo: cc -xprofile=collect -o myexe prog.c          
demo: cc -xprofile=use:myexe -xO5 -o myexe prog.c

-xprofile=collect オプションを付けてコンパイルしたときに生成され、プログラムの前の実行で作成されたフィードバックファイルに保存された実行頻度データを使用して、プログラムが最適化されます。

-xprofile オプションを除き、ソースファイルおよびコンパイラのほかのオプションは、フィードバックファイルを生成したコンパイル済みプログラムのコンパイルに使用したものと完全に同一のものを指定する必要があります。同じバージョンのコンパイラは、収集構築と使用構築の両方に使用する必要があります。

-xprofile=collect:profdir を付けてコンパイルした場合は、-xprofile=use: profdir のコンパイルの最適化に同じプロファイルディレクトリ名 profdir を使用する必要があります。

収集 (collect) 段階と使用 (use) 段階の間のコンパイル速度を高める方法については、-xprofile_ircache も参照してください。

tcov[:profdir ]

tcov(1) を使用する基本のブロックカバレッジ分析用の命令オブジェクトファイル。

オプションの profdir 引数を指定すると、コンパイラは指定された場所にプロファイルディレクトリを作成します。プロファイルディレクトリに保存されたデータは、tcov(1) または -xprofile=use:profdir を付けたコンパイラで使用できます。オプションの profdir パス名を省略すると、プロファイルリングされたプログラムの実行時にプロファイルディレクトリが作成されます。プロファイルディレクトリに保存されたデータは、tcov(1) でのみ使用できます。プロファイルディレクトリの場所は、環境変数 SUN_PROFDATA および SUN_PROFDATA_DIR を使用して指定できます。

profdir で指定される場所が絶対パス名でない場合、コンパイル時に、現在の作業ディレクトリからの相対パスと解釈されます。

場所が profdir で指定されているディレクトリには、プロファイル化されたプログラムを実行するときにすべてのマシンからアクセスできる必要があります。プロファイルディレクトリはその内容が必要なくなるまで削除できません。コンパイラでプロファイルディレクトリに保存されたデータは、再コンパイルする以外復元できません。

例 1: 1 つ以上のプログラムのオブジェクトファイルが -xprofile=tcov:/test/profdata でコンパイルされる場合、/test/profdata.profile という名前のディレクトリがコンパイラによって作成されて、プロファイリングされたオブジェクトファイルを記述するデータの保存に使用されます。実行時に同じディレクトリを使用して、プロファイル化されたオブジェクトファイルに関連付けられた実行データを保存できます。

例 2: myprog という名前のプログラムが -xprofile=tcov でコンパイルされ、/home/joe ディレクトリで実行されると、実行時に /home/joe/myprog.profile ディレクトリが作成されて、実行時プロファイルデータの保存に使用されます。

B.2.145 -xprofile_ircache[ =path]

(SPARC) collect 段階で保存されたコンパイルデータを再利用して use 段階のコンパイル時間を向上するには、-xprofile=collect|use-xprofile_ircache[=path] を使用します。

大きなプログラムでは、中間データが保存されるため、use 段階のコンパイル時間の効率を大幅に向上させることができます。保存されたデータが必要なディスク容量を相当増やすことがある点に注意してください。

-xprofile_ircache[=path] を使用すると、path はキャッシュファイルが保存されているディレクトリを上書きします。デフォルトでは、これらのファイルはオブジェクトファイルと同じディレクトリに保存されます。collectuse 段階が 2 つの別のディレクトリで実行される場合は、パスを指定しておくと便利です。次の例は一般的なコマンドシーケンスを示します。

example% cc -xO5 -xprofile=collect -xprofile_ircache t1.c t2.c
example% a.out    // run collects feedback data
example% cc -xO5 -xprofile=use -xprofile_ircache t1.c t2.c

B.2.146 -xprofile_pathmap

(SPARC) -xprofile_pathmap= コマンドも指定する場合は、-xprofile_pathmap= collect_prefix: use_prefix オプションを使用します。次の項目がともに真で、コンパイラが -xprofile=use でコンパイルされたオブジェクトファイルのプロファイルデータを見つけられない場合は、-xprofile_pathmap を使用します。

collect-prefix は、オブジェクトファイルが -xprofile=collect を使用してコンパイルされたときのディレクトリツリーの UNIX パス名の接頭辞です。

use-prefix は、オブジェクトファイルが -xprofile=use を指定してコンパイルされたディレクトリツリーの UNIX パス名の接頭辞です。

-xprofile_pathmap の複数のインスタンスを指定すると、コンパイラは指定した順序でインスタンスを処理します。-xprofile_pathmap のインスタンスで指定される各 use-prefix は、対応する use-prefix が識別されるか、最後に指定された use-prefix がオブジェクトファイルパス名と一致しないことが確認されるまで、オブジェクトファイルパス名と比較されます。

B.2.147 -xreduction

自動並列化中に、縮約の認識を有効にします。-xreduction でのコンパイルには -xautopar が必要で、そうでない場合、コンパイラは警告を発行します。

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

B.2.148 -xregs=r[, r…]

生成コード用のレジスタの使用法を指定します。

r には、applfloat、frameptr サブオプションのいずれか 1 つ以上をコンマで区切って指定します。

サブオプションの前に no% を付けるとそのサブオプションは無効になります。

—xregs サブオプションは、特定のハードウェアプラットフォームでしか使用できません。

例: -xregs=appl,no%float

表 B-40 -xregs のサブオプション

意味
appl
(SPARC) コンパイラがアプリケーションレジスタをスクラッチレジスタとして使用してコードを生成することを許可します。アプリケーションレジスタは次のとおりです。

g2、g3、g4 ( 32 ビットプラットフォーム)

g2、g3 (64 ビットプラットフォーム)

すべてのシステムソフトウェアおよびライブラリは、-xregs=no%appl を使用してコンパイルしてください。システムソフトウェア (共有ライブラリを含む) は、アプリケーション用のレジスタの値を保持する必要があります。これらの値は、コンパイルシステムによって制御されるもので、アプリケーション全体で整合性が確保されている必要があります。

SPARC ABI では、これらのレジスタはアプリケーションレジスタと記述されています。これらのレジスタを使用すると必要なロードおよびストア命令が少なくてすむため、パフォーマンスが向上します。ただし、アセンブリコードで記述された古いライブラリプログラムとの間で衝突が起きることがあります。

float
(SPARC) コンパイラが浮動小数点レジスタを整数値用のスクラッチレジスタとして使用してコードを生成することを許可します。浮動小数点値は、このオプションに関係なくこれらのレジスタを使用する場合があります。浮動小数点レジスタへのすべての参照をコードから解放する必要がある場合は、-xregs=no%float を使用し、コードは浮動小数点型を一切使わないでください。
frameptr
(x86) フレームポインタレジスタ (IA32 の場合 %ebp、AMD64 の場合 %rbp) をコンパイラが汎用レジスタとして使用することを許可します。

デフォルトは -xregs=no%frameptr です。

—features=no%except によって例外も無効になっている場合を除いて、C++ コンパイラは —xregs=frameptr を無視します。-xregs=frameptr-fast の一部です。

-xregs=framptr を使用すると、コンパイラは浮動小数点レジスタを自由に使用できるので、プログラムのパフォーマンスが向上します。ただし、この結果としてデバッガおよびパフォーマンス測定ツールの一部の機能が制限される場合があります。スタックトレース、デバッガ、およびパフォーマンスアナライザは、—xregs=frameptr を使用してコンパイルされた機能についてレポートできません。

C、Fortran、C++ が混在しているコードで、C または Fortran 関数から直接または間接的に呼び出された C++ 関数が例外をスローする可能性がある場合、このコードは —xregs=frameptr でコンパイルできません。このような言語が混在するソースコードを —fast でコンパイルする場合は、コマンド行の —fast オプションのあとに —xregs=no%frameptr を追加します。

64 ビットのプラットフォームでは利用できるレジスタが多いため、—xregs=frameptr でコンパイルすると、64 ビットコードよりも 32 ビットコードのパフォーマンスが向上する可能性が高くなります。

-xpg も指定されている場合、コンパイラは -xregs=frameptr を無視し、警告を表示します。また、—xkeepframe —xregs=frameptr より優先されます。たとえば、—xkeepframe=%all —xregs=frameptr は、すべての関数のスタックを保持されるはずですが、—xregs=frameptr の最適化は無視することを示します。

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

x86 のデフォルトは -xregs=no%frameptr です。

x86 システムでは、-xpg-xregs=frameptr と互換性がありません。これら 2 つのオプションを一緒に使用しないでください。 -xregs=frameptr-fast に含まれている点にも注意してください。

アプリケーションにリンクする共有ライブラリ用に意図したコードは、-xregs=no%appl,float を指定してコンパイルしてください。少なくとも、共有ライブラリとリンクするアプリケーションがこれらのレジスタの割り当てを認識するように、共有ライブラリがアプリケーションレジスタを使用する方法を明示的に示す必要があります。

たとえば、大局的な方法でレジスタを使用する (重要なデータ構造体を指し示すためにレジスタを使用するなど) アプリケーションは、ライブラリと安全にリンクするため、-xregs=no%appl なしでコンパイルされたコードを含むライブラリがアプリケーションレジスタをどのように使用するかを認識する必要があります。

B.2.149 -xrestrict[= f]

ポインタ値の関数パラメータを制限付きポインタとして扱います。f は、%all%none、あるいは 1 つまたは複数の関数名のコンマ区切りリストです: {%all| %none|fn[,fn...]}

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

このコマンド行オプションは独立して使用できますが、最適化時に使用するのがもっとも適しています。たとえば、このコマンドは、ファイル prog.c 内のすべてのポインタパラメータを制限付きポインタとして扱います。

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

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

%cc -xO3 -xrestrict=agc prog.c

デフォルトは %none です。-xrestrict を指定することは、-xrestrict=%all を指定することと同義です。

B.2.150 -xs

オブジェクトファイルなしに dbx でデバッグできるようにします。

このオプションを指定すると、すべてのデバッグ情報が実行可能ファイルにコピーされます。このオプションは、dbx のパフォーマンスやプログラムの実行時パフォーマンスにはほとんど影響しませんが、より多くのディスク容量を使用します。

B.2.151 -xsafe=mem

(SPARC) コンパイラが記憶域保護違反が発生した場合を前提とできるようにします。

このオプションを使用すると、コンパイラでは SPARC V9 アーキテクチャーで違反のないロード命令を使用できます。


注 - アドレスの位置合わせが合わない、またはセグメンテーション侵害などの違反が発生した場合は違反のないロードはトラップを引き起こさないので、このオプションはこのような違反が起こる可能性のないプログラムでしか使用しないでください。ほとんどのプログラムではメモリーに関するトラップは起こらないので、大多数のプログラムでこのオプションを安全に使用できます。例外条件の処理にメモリーベースのトラップを明示的に使用するプログラムでは、このオプションは使用しないでください。


このオプションは、最適化レベルの -xO5 と、次のいずれかの値の -xarch を組み合わせた場合にだけ有効です。m32m64 の両方で sparcsparcvis-sparcvis2、または -sparcvis3

B.2.152 -xsfpconst

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

B.2.153 -xspace

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

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

B.2.154 -xstrconst

このオプションは非推奨であり、将来のリリースで削除される可能性があります。—xstrconst —features=conststrings の別名です。

B.2.155 -xtarget=t

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

t の値は次のいずれかである必要があります: nativegenericnative64generic64、または system-name

-xtarget に指定する値は、-xarch-xchip-xcache の各オプションの値に展開されます。実行中のシステムで -xtarget=native の展開を調べるには、-xdryrun コマンドを使用します。

たとえば、-xtarget=ultra4-xchip=ultra4 -xcache=64/32/4:8192/128/2 -xarch=sparcvis2 と同義です。


注 - 特定のホストプラットフォームで -xtarget を展開した場合、そのプラットフォームでコンパイルすると -xtarget=native と同じ -xarch-xchip、または -xcache 設定にならない場合があります。


表 B-41 すべてのプラットフォームでの -xtarget の値

意味
native
次と同等です。

—m32 —xarch=native —xchip=native —xcache=native

ホスト 32 ビットシステムに最高のパフォーマンスを与えます。

native64
次と同等です。

—m64 —xarch=native64 —xchip=native64 —xcache=native64

ホスト 64 ビットシステムに最高のパフォーマンスを与えます。

generic
次と同等です。

—m32 —xarch=generic —xchip=generic —xcache=generic

ほとんどの 32 ビットシステムに最高のパフォーマンスを与えます。

generic64
次と同等です。

—m64 —xarch=generic64 —xchip=generic64 —xcache=generic64

ほとんどの 64 ビットシステムに最高のパフォーマンスを与えます。

system-name
指定するシステムで最高のパフォーマンスが得られます。

対象となる実際のシステムを表すシステム名を、次のリストから選択してください。

対象となるハードウェア (コンピュータ) の正式な名前をコンパイラに指定した方がパフォーマンスが優れているプログラムもあります。プログラムパフォーマンスがクリティカルな場合、ターゲットハードウェアの適切な指定は、より新しい SPARC プロセッサ上での実行時は特に、非常に重要である可能性があります。しかし、ほとんどのプログラムおよび旧式の SPARC システムではパフォーマンスの向上はわずかであるため、汎用的な指定方法で十分です。

B.2.155.1 SPARC プラットフォームの -xtarget の値

SPARC または UltraSPARC V9 で 64 ビット Oracle Solaris ソフトウェアをコンパイルすることは、-m64 オプションで示されます。native64 または generic64 以外のフラグで -xtarget を指定する場合は、-m64 オプションも次のように指定する必要があります: -xtarget=ultra... -m64。そうでない場合は、コンパイラは 32 ビットメモリーモデルを使用します。

表 B-42 SPARC での -xtarget 展開

-xtarget=
-xarch
-xchip
-xcache
ultra
sparcvis
ultra
16/32/1:512/64/1
ultra1/140
sparcvis
ultra
16/32/1:512/64/1
ultra1/170
sparcvis
ultra
16/32/1:512/64/1
ultra1/200
sparcvis
ultra
16/32/1:512/64/1
ultra2
sparcvis
ultra2
16/32/1:512/64/1
ultra2/1170
sparcvis
ultra
16/32/1:512/64/1
ultra2/1200
sparcvis
ultra
16/32/1:1024/64/1
ultra2/1300
sparcvis
ultra2
16/32/1:2048/64/1
ultra2/2170
sparcvis
ultra
16/32/1:512/64/1
ultra2/2200
sparcvis
ultra
16/32/1:1024/64/1
ultra2/2300
sparcvis
ultra2
16/32/1:2048/64/1
ultra2e
sparcvis
ultra2e
16/32/1:256/64/4
ultra2i
sparcvis
ultra2i
16/32/1:512/64/1
ultra3
sparcvis2
ultra3
64/32/4:8192/512/1
ultra3cu
sparcvis2
ultra3cu
64/32/4:8192/512/2
ultra3i
sparcvis2
ultra3i
64/32/4:1024/64/4
ultra4
sparcvis2
ultra4
64/32/4:8192/128/2
ultra4plus
sparcvis2
ultra4plus
64/32/4:2048/64/4/2:32768/64/4
ultraT1
sparc
ultraT1
8/16/4/4:3072/64/12/32
ultraT2
sparcvis2
ultraT2
8/16/4:4096/64/16
ultraT2plus
sparcvis2
ultraT2plus
8/16/4:4096/64/16
T3
sparcvis3
ultraT3
8/16/4:6144/64/24
T4
sparc4
T4
16/32/4:128/32/8:4096/64/16
sparc64vi
sparcfmaf
sparc64vi
128/64/2:5120/64/10
sparc64vii
sparcima
sparc64vii
64/64/2:5120/256/10
sparc64viiplus
sparcima
sparc64viiplus
64/64/2:11264/256/11

B.2.155.2 x86 プラットフォームの -xtarget の値

64 ビット x86 プラットフォームで 64 ビット Oracle Solaris ソフトウェアをコンパイルすることは、-m64 オプションで示されます。native64 または generic64 以外のフラグで -xtarget を指定する場合は、-m64 オプションも次のように指定する必要があります: -xtarget=opteron ... -m64。そうでない場合は、コンパイラは 32 ビットメモリーモデルを使用します。

表 B-43 x86 での -xtarget の展開

-xtarget=
-xarch
-xchip
-xcache
opteron
sse2a
opteron
64/64/2:1024/64/16
pentium
386
pentium
generic
pentium_pro
pentium_pro
pentium_pro
generic
pentium3
sse
pentium3
16/32/4:256/32/4
pentium4
sse2
pentium4
8/64/4:256/128/8
nehalem
sse4_2
nehalem
32/64/8:256/64/8:8192/64/16
penryn
sse4_1
penryn
2/64/8:6144/64/24
woodcrest
ssse3
core2
32/64/8:4096/64/16
barcelona
amdsse4a
amdfam10
64/64/2:512/64/16
sandybridge
avx
sandybridge
32/64/8:256/64/8:8192/64/16
westmere
aes
westmere
32/64/8:256/64/8:12288/64/16

B.2.156 -xtemp=dir

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

B.2.157 -xthreadvar[= o]

スレッドローカルな変数の実装を制御するには -xthreadvar を指定します。コンパイラのスレッドローカルな記憶領域機能を利用するには、このオプションを __thread 宣言指示子と組み合わせて使用します。__thread 指示子を使用してスレッド変数を宣言したあとは、-xthreadvar を指定して動的 (共有) ライブラリの位置に依存しないコード (PIC 以外のコード) でスレッド固有の記憶領域を使用できるようにします。__thread の使用方法についての詳細は、「2.3 スレッドローカルな記憶領域指示子」を参照してください。

odynamic または no%dynamic である必要があります。

表 B-44 -xthreadvar のフラグ

フラグ
意味
[no%]dynamic
動的ロード用の変数をコンパイルします。

-xthreadvar=no%dynamic のときはスレッド変数へのアクセスは非常に早くなりますが、動的ライブラリ内のオブジェクトファイルは使用できません。すなわち、実行可能ファイル内のオブジェクトファイルだけが使用可能です。

-xthreadvar を指定しない場合、コンパイラが使用するデフォルトは位置独立コード (PIC) が有効になっているかどうかによって決まります。位置独立コードが有効になっている場合、オプションは -xthreadvar=dynamic に設定されます。位置独立コードが無効になっている場合、オプションは -xthreadvar=no%dynamic に設定されます。

-xthreadvar を指定するけれども値を指定しない場合は、オプションは -xthreadvar=dynamic に設定されます。

位置独立ではないコードが動的ライブラリに含まれる場合、-xthreadvar を指定する必要があります。

リンカーは、動的ライブラリ内の位置依存コード (非 PIC) スレッド変数と同等のスレッド変数はサポートできません。PIC でないスレッド変数は非常に高速なため、実行可能ファイルのデフォルトにするべきです。

-xcode-KPIC、および -Kpic の説明も参照してください。

B.2.158 -xtime

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

B.2.159 -xtransition

K&R C と Solaris Studio ISO C との間の相違に対して警告を出します。

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

B.2.160 -xtrigraphs[={ yes|no}]

-xtrigraphs オプションは、コンパイラが ISO 規格で定義されている三文字表記シーケンスを認識するかどうかを決定します。

デフォルトにより、コンパイラは -xtrigraphs=yes を仮定し、コンパイル単位をとおしてすべての三文字表記シーケンスを認識します。

コンパイラが 3 文字表記シーケンスとして解釈している疑問符 (?) が含まれるリテラル文字列がソースコードにある場合は、-xtrigraph=no サブオプションを使用して 3 文字表記シーケンスの認識を無効にできます。-xtrigraphs=no オプションは、コンパイル単位全体ですべての 3 文字表記シーケンスの認識を無効にします。

次の例は、ソースファイル trigraphs_demo.c を示しています。

#include <stdio.h>

int main ()
{

  (void) printf("(\?\?) in a string appears as (??)\n");

  return 0;
}

次の例は、-xtrigraphs=yes を指定してこのコードをコンパイルする場合の出力を示します。

example% cc -xtrigraphs=yes trigraphs_demo.c
example% a.out
(??) in a string appears as (]

次の例は、-xtrigraphs=no を指定してこのコードをコンパイルする場合の出力を示します。

example% cc -xtrigraphs=no trigraphs_demo.c
example% a.out
(??) in a string appears as (??)

B.2.161 -xunroll=n

ループを n 回展開するようオプティマイザに指示します。n は正の整数です。n が 1 のとき、ループを展開しないようコンパイラに要求します。n が 1 より大きいとき、-xunroll=n は、該当する場合にループを n 回展開することをコンパイラに推奨します。

B.2.162 -xustr={ascii_utf16_ushort |no}

ISO10646 UTF-16 文字列リテラルを使用する国際化アプリケーションをサポートする必要がある場合は、このオプション使用します。言い替えれば、このオプションは、オブジェクトファイル内で UTF-16 文字列に変換したい文字列リテラルがコードに含まれる場合に使用します。このオプションがない場合、コンパイラは 16 ビット文字列リテラルを生成も認識もしません。このオプションは、U"ASCII_string" 文字列リテラルを unsigned short int 型の配列として認識できるようにします。このような文字列はまだ標準の一部ではないので、このオプションは標準でない C の認識を有効にします。

U"ASCII_string" 文字列リテラルのコンパイラによる認識を無効にすることができます。-xustr=noこのオプションのコマンド行の右端にあるインスタンスは、それまでのインスタンスをすべて上書きします。

デフォルトは -xustr=no です。引数を指定しないで -xustr を指定した場合、コンパイラはこの指定を受け付けず、警告を出力します。C または C++ 規格で構文の意味が定義されると、デフォルト値が変わることがあります。

-xustr=ascii_ustf16_ushort は、U"ASCII_string" 文字列リテラルを一緒に指定しなくても指定できます。

すべてのファイルを、このオプションによってコンパイルしなければならないわけではありません。

次の例では、前に U が付いた引用符内の文字列リテラルを示します。-xustr を指定するコマンド行も示します。

example% cat file.c
const unsigned short *foo = U"foo";
const unsigned short bar[] = U"bar";
const unsigned short *fun() { return foo;}
example% cc -xustr=ascii_utf16_ushort file.c -c

8 ビットの文字列リテラルに U を付加して、unsigned short 型を持つ 16 ビットの UTF-16 文字を形成できます。例:

const unsigned short x = U'x';    
const unsigned short y = U'\x79';

B.2.163 -xvector[= a]

SIMD (Single Instruction Multiple Data) をサポートする x86 プロセッサで、ベクトルライブラリ関数への呼び出しの自動生成や、SIMD 命令の生成を有効にします。このオプションを使用するときは -fround=nearest を指定することによって、デフォルトの丸めモードを使用する必要があります。

次の表は、a の値の一覧です。no% 接頭辞は関連付けられたサブオプションを無効にします。

表 B-45 -xvector のフラグ

意味
[no%]lib
(Solaris のみ) コンパイラは、ループ内の数学ライブラリ呼び出しを、同等ベクトル数学ルーチンへの単一呼び出しに変換します (そのような変換が可能な場合)。大きなループカウントを持つループでは、これによりパフォーマンスが向上します。このオプションを無効にするには no%lib を使用します。
[no%]simd
(x86 のみ) コンパイラに対して、ネイティブ x86 SSE SIMD 命令を使用して特定のループのパフォーマンスを向上させるように指示します。ストリーミング拡張機能は、x86 で最適化レベルが 3 かそれ以上に設定されている場合にデフォルトで使用されます。このオプションを無効にするには no%simd を使用します。

コンパイラは、ストリーミング拡張機能がターゲットのアーキテクチャーに存在する場合、つまりターゲットの ISA が SSE2 以上である場合にのみ SIMD を使用します。たとえば、最新のプラットフォームで -xtarget=woodcrest、—xarch=generic64、-xarch=sse2、-xarch=sse3、または -fast を指定して使用できます。ターゲットの ISA にストリーミング拡張機能がない場合、このサブオプションは無効です。

%none
このオプションを完全に無効にします。
yes
これは非推奨であり、代わりに -xvector=lib を指定します。
no
これは非推奨です。代わりに -xvector=%none を指定してください。

デフォルトは、x86 では -xvector=simd で、SPARC プラットフォームでは -xvector=%none です。サブオプションなしで -xvector を指定する場合、コンパイラは、x86 Solaris では -xvector=simd,lib、SPARC Solaris では -xvector=lib、Linux プラットフォームでは -xvector=simd を想定します。

—xvector オプションを指定するには、最適化レベルが —xO3 かそれ以上に設定されていることが必要です。最適化レベルが指定されていない場合や —xO3 よりも低い場合はコンパイルは続行されず、メッセージが表示されます。


注 - x86 プラットフォーム向けの Oracle Solaris カーネルコードをコンパイルするときは、-xvector=%none を指定してコンパイルします。


コンパイラは、リンク時に libmvec ライブラリを取り込みます。別々の手順でコンパイルおよびリンクする場合は、同じ -xvector オプションを両方のコマンドで使用します。

B.2.164 -xvis

(SPARC) -xvis=[yes|no] コマンドは、vis.h ヘッダーを使用して VIS 命令を生成するときや、VIS 命令を使用するアセンブラインラインコード (.il) を使用するときに使用します。デフォルトは -xvis=no です。-xvis と指定することは、-xvis=yes と指定することと同義です。

VIS 命令セットは、SPARC v9 命令セットの拡張です。UltraSPARC プロセッサが 64 ビットの場合でも、多くの場合、特にマルチメディアアプリケーションではデータサイズが 8 ビットまたは 16 ビットに制限されています。VIS 命令は 1 つの命令で 4 つの 16 ビットデータを処理できるので、画像、線形代数、信号処理、オーディオ、ビデオ、ネットワーキングなどの新しいメディアを扱うアプリケーションのパフォーマンスが大幅に向上させます。

B.2.165 -xvpara

OpenMP を使用するときに正しくない結果をもたらす可能性のある、並列プログラミングに関連する潜在的な問題に関して、警告を発行します。-xopenmp および OpenMP API 指令とともに使用します。

次の状況が検出された場合は、コンパイラは警告を発行します。

すべての並列化命令が問題なく処理される場合、警告は表示されません。

例:

cc -xopenmp -vpara any.c

注 - Oracle Solaris Studio コンパイラは OpenMP API 並列化をサポートします。そのため、MP プラグマ命令は非推奨で、サポートされません。OpenMP API への移植については、『OpenMP API ユーザーズガイド』を参照してください。


B.2.166 -Yc , dir

c を検索するための新しい dir を指定します。c-W オプションで示したコンパイラ構成要素を表わす文字です。

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

B.2.167 -YA, dir

コンパイラのすべての構成要素の検索場所にするディレクトリ dir を指定します。dir 内で構成要素が見つからない場合は、コンパイラがインストールされているディレクトリに戻って検索されます。

B.2.168 -YI, dir

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

B.2.169 -YP, dir

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

B.2.170 -YS, dir

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

B.2.171 -Zll

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