Oracle Solaris Studio 12.2:C++ 用户指南

A.2.17.1 扩展

该选项通过扩展到以下编译选项,为大量应用程序提供了几乎最高的性能。

表 A–4 -fast 扩展

选项 

SPARC  

x86  

–fns

–fsimple=2

–nofstore

-xarch

-xbuiltin=%all

-xcache

-xchip

–xlibmil

–xlibmopt

–xmemalign

–xO5

-xregs=frameptr

–xtarget=native

交互

-fast 宏可扩展为可能影响其他指定选项的编译选项。例如,在以下命令中,-fast 宏的扩展包括了将 -xarch 还原为某个 32 位体系结构选项的 -xtarget=native

错误:


example% CC -xarch=v9 -fast test.cc

正确:


example% CC -fast -xarch=v9 test.cc

查看每个选项的描述以确定可能的交互操作。

代码生成选项、优化级别、内建函数的优化和内联模板文件的使用可以用后续选项来覆盖(请参阅示例)。指定的优化级别将覆盖以前所设置的优化级别。

–fast 选项包括 –fns–ftrap=%none,即该选项禁用所有陷阱操作。

在 x86 中,-fast 选项包括 -xregs=frameptr。有关详细信息(尤其是编译 C、Fortran 和 C++ 混合源代码的情况下),请参见有关此选项的介绍。

示例

执行以下编译器命令,优化级别将为 –xO3


example% CC –fast –xO3

执行以下编译器命令,优化级别将为 –xO5


example% CC -xO3 –fast

警告

如果在不同的步骤中进行编译和链接,则编译命令和链接命令中都必须有 -fast 选项。

使用 -fast 选项编译的目标二进制文件不可移植。例如,在 UltraSPARCIII 系统中用以下命令生成的二进制文件在 UltraSPARCII 系统中无法执行。


example% CC -fast test.cc

不要将该选项用于依赖 IEEE 标准浮点运算的程序,否则可能会产生不同的数字结果、过早的程序终止或意外的 SIGFPE 信号。

在早期的 SPARC 发行版中,-fast 宏扩展到了 -fsimple=1。而现在扩展到 -fsimple=2

-fast 的扩展包括 -D_MATHERR_ERRNO_DONTCARE

使用 -fast,编译器可以用不设置 errno 变量的等效优化代码自由替换对浮点函数的调用。而且,-fast 还会定义宏 __MATHERR_ERRNO_DONTCARE,使编译器无需确保 errno 的有效性。因此,在浮点函数调用后依赖于 errno 值的用户代码可能生成不一致的结果。

解决此问题的一种方法是避免使用 -fast 编译此类代码。但是,如果需要 -fast 优化并且代码依赖于 浮点库调用后正确设置的 errno 值 应使用以下选项进行编译。

-xbuiltin=none -U__MATHERR_ERRNO_DONTCARE -xnolibmopt -xnolibmil

然后,在命令行上使用 -fast,以禁止编译器优化此类库调用,并确保正确处理 errno

要在任何平台上显示 —fast 的扩展,请运行命令 CC —dryrun —fast


>CC -dryrun -fast
###     command line files and options (expanded):
### -dryrun -xO5 -xarch=sparcvis2 -xcache=64/32/4:1024/64/4 \
-xchip=ultra3i -xmemalign=8s -fsimple=2 -fns=yes -ftrap=%none \
-xlibmil -xlibmopt -xbuiltin=%all -D__MATHERR_ERRNO_DONTCARE

另请参见

-fns-fsimple-ftrap=%none-xlibmil-nofstore-xO5-xlibmopt-xtarget=native