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

A.2.109 –xarch=isa

指定目标指令集体系结构 (instruction set architecture, ISA)

该选项将编译器生成的代码限制为特定指令集体系结构的指令。此选项不保证使用任何特定于目标的指令。不过,使用该选项会影响二进制程序的可移植性。


注 –

分别使用 -m64-m32 选项来指定打算使用的内存模型 LP64(64 位)或 ILP32(32 位)。-xarch 选项不再指示内存模型,除非是为了与早期的发行版兼容,如下所示。


如果在不同的步骤中编译和链接,请确保在两个步骤中为 -xarch 指定了相同的值。有关在编译时和链接时都必须指定的所有编译器选项的完整列表,请参见3.3.3 编译时选项和链接时选项

A.2.109.1 用于 SPARC 的 -xarch 标志

下表提供了 SPARC 平台上每个 -xarch 关键字的详细信息。

表 A–23 用于 SPARC 平台的 -xarch 标志

标志  

含义 

generic

使用大多数处理器通用的指令集。这是缺省值。 

generic64

为了在大多数 64 位 平台上获得良好性能而进行编译。(仅限 Solaris)。 

该选项等效于 -m64 -xarch=generic,用于与早期的发行版兼容。可使用 -m64 指定 64 位编译,来取代 - xarch=generic64

native

为了在此系统上获得良好性能而进行编译。编译器为运行它的当前系统处理器选择适当的设置。 

native64

编译以在此系统中取得良好的性能(仅限 Solaris)。该选项等效于 -m64 -xarch=native,用于与早期的发行版兼容。

sparc

针对 SPARC-V9 ISA (但不带有可视化指令集 (Visual Instruction Set, VIS),也不带有其他特定于实现的 ISA 扩展)进行编译。该选项在 V9 ISA 上使编译器生成高性能代码。 

sparcvis

针对 SPARC-V9 加可视指令集 (Visual Instruction Set, VIS) 版本 1.0 进行编译,并具有 UltraSPARC 扩展。该选项在 UltraSPARC 体系结构上使编译器生成高性能代码。 

sparcvis2

此选项允许编译器在具有 UltraSPARC III 扩展的 UltraSPARC 体系结构以及可视化指令集 (VIS) 2.0 版上生成目标代码。 

sparcvis3

针对 SPARC-V9 ISA 的 SPARC VIS 版本 3 进行编译。允许编译器使用 SPARC-V9 指令集、UltraSPARC 扩展(包括可视指令集 (Visual Instruction Set, VIS) 版本 1.0、UltraSPARC-III 扩展(包括可视指令集版本 2.0 以及混合乘加指令和可视指令集版本 3.0 中的指令。 

sparcfmaf

允许编译器使用 SPARC-V9 指令集,加 UltraSPARC 扩展(包括可视指令集 (Visual Instruction Set, VIS) 版本 1.0)、UltraSPARC-III 扩展(包括可视指令集 (Visual Instruction Set, VIS) 版本 2.0)以及面向浮点乘加的 SPARC64 VI 扩展中的指令。 

必须将 -xarch=sparcfmaf fma=fused 结合使用,并具有某个优化级别,以使编译器尝试查找机会来自动使用乘加指令。

sparcima

针对 SPARC-V9 ISA 的 sparcima 版本进行编译。使编译器可以使用如下指令集内的指令:SPARC-V9 指令集、UltraSPARC 扩展(包括可视化指令集 (Visual Instruction Set, VIS) 版本 1.0)、UltraSPARC-III 扩展(包括可视化指令集 (Visual Instruction Set, VIS) 版本 2.0)、SPARC64 VI 扩展(用于浮点乘加)和 SPARC64 VII 扩展(用于整数乘加)。 

v9

等效于 -m64 -xarch=sparc。使用 -xarch=v9 来获取 64 位内存模型的传统 makefile 和脚本仅需使用 -m64

v9a

等效于 -m64 -xarch=sparcvis,用于与早期发行版兼容。

v9b

等效于 -m64 -xarch=sparcvis2,用于与早期发行版兼容。

另请注意:

A.2.109.2 用于 x86 的 -xarch 标志

下表列出了 x86 平台上的 -xarch 标志。

表 A–24 x86 上的 -xarch 标志

标志 

含义  

amd64

等效于 -m64 -xarch=sse2(仅限 Solaris)。使用 -xarch=amd64 来获取 64 位内存模型的传统 makefile 和脚本仅需要使用 -m64

amd64a

等效于 -m64 -xarch=sse2a(仅限 Solaris)。

generic

使用大多数处理器通用的指令集。这是缺省值,等效于使用 —m32 编译时的 pentium_pro,以及使用 —m64 编译时的 sse2

generic64

为了在大多数 64 位 平台上获得良好性能而进行编译。(仅限 Solaris)。该选项等效于 -m64 -xarch=generic,用于与早期的发行版兼容。可使用 -m64 指定 64 位编译,来取代 - xarch=generic64

native

为了在此系统上获得良好性能而进行编译。编译器为运行它的当前系统处理器选择适当的设置。 

native64

编译以在此系统中取得良好的性能(仅限 Solaris)。该选项等效于 -m64 -xarch=native,用于与早期的发行版兼容。

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 指令集中。 

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 指令集。 

A.2.109.3 x86 特殊注意事项

针对 x86 Solaris 平台进行编译时,有一些重要问题值得注意。

传统的 Sun 样式的并行 pragma 在 x86 上不可用。而改用 OpenMP。有关将传统并行化指令转换为 OpenMP 的信息,请参见《Solaris Studio OpenMP API 用户指南》

xarch 设置为 -ssesse2sse2asse3 或更高时编译的程序只能在提供这些扩展和功能的平台上运行。

在 Pentium 4 兼容的平台上 Solaris OS 发行版支持 SSE/SSE2。早期版本的 Solaris OS 不支持 SSE/SSE2。如果所运行的 Solaris OS 不支持由 -xarch 选定的指令集,则编译器无法为该指令集生成链接代码。

如果在单独的步骤中编译和链接,请始终使用编译器以及相同的 -xarch 设置进行链接,以确保链接正确的启动例程。

x86 上的数值结果可能与 SPARC 上的结果不同,这是由 x86 80 位浮点寄存器造成的。为了最大限度减少这些差异,请使用 -fstore 选项或使用 -xarch=sse2 进行编译(如果硬件支持 SSE2)。

因为内部数学库(例如,sin(x))不同,所以 Solaris 和 Linux 之间的数值结果也会不同。

A.2.109.4 二进制兼容验证

从 Solaris Studio 11 和 Solaris 10 OS 开始,会对使用这些专用的 -xarch 硬件标志编译和生成的程序二进制文件进行验证,看其是否在相应的平台上运行。

在 Solaris 10 之前的系统中,不执行任何验证,用户负责确保使用这些标志生成的对象部署在合适的硬件上。

如果在没有相应功能或指令集扩展的平台上运行使用这些 -xarch 选项编译的程序,则可能会导致段故障或不正确的结果,并且不显示任何显式警告消息。

这一警告也扩展到使用 .il 内联汇编语言功能或使用 SSE、SSE2、SSE2a 和 SSE3 指令和扩展的 __asm() 汇编程序代码。

A.2.109.5 交互

尽管可以单独使用该选项,但它是 -xtarget 选项的扩展的一部分,并且可用于覆盖由特定的 -xtarget 选项设置的 -xarch 值。例如,-xtarget=ultra2 可扩展为 -xarch=v8plusa -xchip=ultra2 -xcache=16/32/1:512/64/1。在以下命令中,-xarch=v8plusb 覆盖了由 -xtarget=ultra2 的扩展设置的 -xarch=v8plusa


example% CC -xtarget=ultra2 -xarch=v8plusb foo.cc

不支持 –compat[=4]-xarch=generic64-xarch=native64-xarch=v9-xarch=v9a-xarch=v9b 结合使用。

A.2.109.6 警告

如果在进行优化时使用该选项,那么在指定体系结构上适当选择就可以提供高性能的可执行文件。但如果选择不当就会导致性能的严重降级,或导致在预定目标平台上无法执行二进制程序。

如果在不同的步骤中编译和链接,请确保在两个步骤中为 -xarch 指定了相同的值。