Oracle® Solaris Studio 12.4:Fortran 用户指南

退出打印视图

更新时间: 2014 年 12 月
 
 

3.4.174 –xregs=r

为生成的代码指定寄存器用法。

r 是一个逗号分隔列表,它包含下面的一个或多个子选项:applfloatframeptr

no% 作为子选项的前缀会禁用该子选项。

请注意,-xregs 子选项仅限于特定的硬件平台。

示例:-xregs=appl,no%float

表 3-20  -xregs 子选项
含义
appl
(SPARC) 允许编译器将应用程序寄存器用作临时寄存器来生成代码。应用程序寄存器是:
g2g3g4(在 32 位平台上)
g2g3(在 64 位平台上)
强烈建议使用 -xregs=no%appl 编译所有系统软件和库。系统软件(包括共享库)必须为应用程序保留这些寄存器值。这些值的使用将由编译系统控制,而且在整个应用程序中必须保持一致。
在 SPARC ABI 中,这些寄存器表示为应用程序寄存器。由于需要更少的装入和存储指令,因此使用这些寄存器可提高性能。但是,这样使用可能与某些用汇编代码编写的旧库程序冲突。
float
(SPARC) 允许编译器通过将浮点寄存器用作整数值的临时寄存器来生成代码。使用浮点值可能会用到与该选项无关的这些寄存器。如果希望您的代码没有任何对浮点寄存器的引用,需要使用 -xregs=no%float 并确保您的代码不会以任何方式使用浮点类型。
frameptr
(x86) 允许编译器将帧指针寄存器(IA32 上为 %ebp,AMD64 上为 %rbp)用作通用寄存器。
缺省值为 -xregs=no%frameptr
通过 -xregs=framptr,编译器可以自由使用帧指针寄存器来改进程序性能。但是,这可能会限制调试器和性能测量工具的某些功能。堆栈跟踪、调试器和性能分析器不能对通过 -xregs=frameptr 编译的函数生成报告。
如果直接调用或从 C 或 Fortran 函数间接调用的 C++ 函数会引发异常,不应该用 —xregs=frameptr 编译 C、Fortran 和 C++ 混合代码。如果使用 —fast 编译此类混合源代码,请在命令行中的 —fast 选项后添加 —xregs=no%frameptr
由于 64 位平台上的可用寄存器更多,因此相对于 64 位代码相比,使用 —xregs=frameptr 编译更容易改进 32 位代码的性能。
如果同时指定了 -pg,编译器会忽略 -xregs=frameptr 并发出警告。而且,-xkeepframe 优先于 -xregs=frameptr

SPARC 缺省值为 -xregs=appl,float

x86 缺省值为 -xregs=no%frameptr-xregs=frameptr 包含在 -fast 的扩展中。

强烈推荐您用 -xregs=no%appl,float 编译那些用于与应用程序链接的共享库的代码。至少共享库应该显式说明它如何使用应用程序寄存器,以便与这些库链接的应用程序知道这些寄存器分配。

例如,在某种全局意义上使用寄存器(例如,使用寄存器指向一些关键数据结构)的应用程序,需要确切地知道其代码未使用 -xregs=no%appl 编译的某个库如何使用应用程序寄存器,以便安全地与该库链接。

在 x86 系统上,-pg-xregs=frameptr 不兼容,这两个选项不应一起使用。还请注意,-fast 中包括 -xregs=frameptr