Sun Studio 12 Update 1:C 用户指南

B.2.74.1 用于 SPARC 的 -xarch 标志

下表详细说明了使用指定的 -xarch 选项编译后由各种 SPARC 处理器执行的可执行程序的性能。此表的目的在于帮助您识别适合您的可执行程序在特定目标机器上运行的最佳 -xarch 选项。首先识别您关心的机器的范围,然后考虑维护多个二进制程序的成本与在较新的机器上获得最高性能的好处。

表 B–13 -xarch 矩阵
 

SPARC 机器指令集: 

   

V8a 

V8 

V9  

(非 Sun 处理器) 

V9 

(Sun 处理器) 

V9b 

 

v8a 

-xarch 编译选项 

v8 

PD 

 

v8plus 

NE 

NE 

 

v8plusa 

NE 

NE 

** 

 

v8plusb 

NE 

NE 

** 

NE 

 

v9 

NE 

NE 

 

v9a 

NE 

NE 

** 

 

v9b 

NE 

NE 

[** ]

NE 

**注: 使用此指令集编译的可执行程序可能会在 V9 非 Sun 处理器芯片中在名义上执行,或者根本不执行。请咨询硬件供应商,以确保您的可执行程序可在其目标机器上运行。 

如果要使用 v8plus v8plusa 指令集编译可执行文件,请考虑改用 v9 v9a 进行编译。提供了 v8plusv8plusa 选项,因此程序可在支持 64 位程序的 Solaris 8 软件可用之前利用一些 SPARC V9 和 UltraSPARC 功能。使用 v8plusv8plusa 选项编译的程序不可移植到 SPARC V8 或更旧的机器上。您可以分别使用 v9v9a 重新编译此类程序,以充分利用 SPARC V9 和 UltraSPARC 的所有功能。您可以从 Sun 代表那里获取《The V8+ Technical Specification》白皮书(文件号码 802-7447-10),该书说明了 v8plusv8plusa 的限制。

对于任何特定选择,生成的可执行文件在早期体系结构中运行时都会慢得多。此外,虽然在多数指令集体系结构中都可以使用四精度(REAL*16long double)浮点指令,但编译器不在它生成的代码中使用这些指令。

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

表 B–14 用于 SPARC 平台的 -xarch 标志

标志  

含义  

generic

使用大多数处理器通用的指令集。这是缺省设置。当使用 -m32 进行编译时,等效于 v8plus。当使用 -m64 进行编译时,等效于 sparc

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 版上生成目标代码。 

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 扩展(用于整数乘加)。 

v7

(已废弃)

针对 SPARC-V7 ISA 进行编译。 

当前的 Solaris 操作系统不再支持 SPARC V7 体系结构,并且使用此选项编译的程序在当前平台上的运行速度较慢。 

缺省值为 -xarch=v8plus

示例: SPARCstation 1, SPARCstation 2. 

v8a

(已废弃)

针对 SPARC-V8 ISA 的 V8a 版本进行编译。按照定义,V8a 是指不包含 fsmuld 指令的 V8 ISA。

该选项使编译器能够生成可在 V8a ISA 上获得良好性能的代码。 

示例: 基于 microSPARC I 芯片架构的任何系统 

v8

(已废弃)

针对 SPARC-V8 ISA 进行编译。使编译器能够生成用于在 V8 架构上获得良好性能的代码。示例: SPARCstation 10 

v8plus

针对 SPARC-V9 ISA 的 V8plus 版本进行编译。根据定义,V8plus 是指 V9 ISA,但只限于由 V8plus ISA 规范所定义的 32 位子集,而不包括可视化指令集 (Visual Instruction Set, VIS) 和其他特定实现的 ISA 扩展。

  • 该选项使编译器能够生成可在 V8plus ISA 上获得良好性能的代码。

  • 生成的目标代码采用 SPARC-V8+ ELF32 格式,只能在 Solaris UltraSPARC 环境下执行(不能在 V7 和 V8 处理器上运行)。

    示例: 基于 UltraSPARC 芯片体系结构的任何系统

v8plusa

针对 SPARC-V9 ISA 的 V8plusa 版本进行编译。根据定义,V8plusa 是指 V8plus 体系结构加可视化指令集 (Visual Instruction Set,VIS) 版本 1.0 和 UltraSPARC 扩展。

  • 该选项使编译器能够生成可在 UltraSPARC 体系结构上获得良好性能的代码,但只限于 V8plus 规范定义的 32 位子集。

  • 生成的目标代码采用 SPARC-V8+ ELF32 格式,只能在 Solaris UltraSPARC 环境下执行(不能在 V8 处理器上运行)。

    示例: 基于 UltraSPARC 芯片体系结构的任何系统

v8plusb

针对具有 UltraSPARC III 扩展的 SPARC-V8plus ISA 的 V8plusb 版本进行编译。 

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

  • 生成的目标代码采用 SPARC-V8+ ELF32 格式,只能在 Solaris UltraSPARC-III 环境中执行。

  • 使用此选项进行编译将使用最佳指令集,以便在 UltraSPARC III 体系结构上获得良好性能。

v9

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

v9a

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

v9b

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