A.2.174.1 值
r 必须是下列值之一。每个值的含义都与 -m32|-m64 的设置相关。
表 A–45
-xregs 值
值
|
含义
|
[no%]appl
|
(SPARC) [不] 允许编译器将应用程序寄存器用作临时寄存器来生成代码。应用程序寄存器是:
g2、g3 或 g4(在 32 位平台上)
g2 或 g3(在 64 位平台上)
强烈建议使用 -xregs=no%appl 编译所有系统软件和库。系统软件(包括共享库)必须为应用程序保留这些寄存器值。这些值的使用将由编译系统控制,而且在整个应用程序中必须保持一致。
在 SPARC ABI 中,这些寄存器表示为应用程序寄存器。使用这些寄存器时需要的 load 和 store 指令较少,因此可以提高性能。不过,这样使用会与将寄存器用于其他目的的程序发生冲突。
|
[no%]float
|
(SPARC) [不] 允许编译器通过将浮点寄存器用作整数值的临时寄存器来生成代码。使用浮点值可能会用到与该选项无关的这些寄存器。如果希望您的代码没有任何对浮点寄存器的引用,需要使用 -xregs=no%float 并确保您的代码不会以任何方式使用浮点类型。
|
[no%]frameptr
|
(x86)[不] 允许编译器将帧指针寄存器(IA32 上的 %ebp、AMD64 上的 %rbp )用作未分配的被调用方保存寄存器。
如果将此寄存器用作被调用方保存寄存器,则可提高程序运行时性能。但是,它也会降低检查和跟踪栈的某些工具的性能。这种栈检查功能对系统性能测量和调节至关重要。因此,使用这种优化可以提高本地系统性能,但会降低全局系统性能。
-
为事后分析而转储栈的工具(如性能分析器)将无法工作。
-
调试器(adb、mdb 和 dbx)将无法转储栈或直接弹出栈帧。
-
最新的帧丢失帧指针之前,dtrace 性能分析实用程序将无法收集栈上的任何帧的信息。
-
Posix pthread_cancel 将无法尝试找到清除处理程序。
-
C++ 异常无法传播给 C 函数。
丢失了帧指针的 C 函数调用在 C 函数中引发异常的 C++ 函数时,C++ 异常中会发生失败。函数接受函数指针(例如,qsort)或全局函数(例如 malloc)被干预时,通常会发生此类调用。
上面列出的后两种后果可能会影响应用程序的正常操作。大多数应用程序代码不会遇到这些问题。但是,使用 -xO4 开发的库需要详细记录客户端使用限制的文档。
-
注 –
如果也指定了 -xpg,编译器将忽略 -xregs=framptr,并发出警告。另外,对于 32 位 x86 编译,编译器会忽略此选项,除非使用 -noex 选项禁用了异常。
|
缺省值
SPARC 缺省值为 -xregs=appl,float。
x86 缺省值是包括在 -fast 扩展中的 -xregs=no%frameptr -xregs=frameptr。
示例
要使用所有可用的临时寄存器编译应用程序,请使用 -xregs=appl,float。
要编译对上下文切换敏感的非浮点代码,请使用 -xregs=no%appl,no%float。
另请参见
SPARC V8 和 SPARC V9 ABI