如果在不同的步骤中进行编译和链接,则编译命令和链接命令中都必须有 -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 |