下表列出了 x86 体系结构上的 -xarch 标志。
表 B–14 x86 上的 -xarch 标志
标志 |
含义 |
---|---|
386 |
使指令集限制于 386/486 体系结构。 |
amd64 |
与 -m64 -xarch=sse2 等效(仅适用于 Solaris)。使用 -xarch=amd64 获取 64 位内存模型的传统 make 程序描述文件和脚本只需使用 -m64。 |
amd64a |
与 -m64 -xarch=sse2a 等效(仅适用于 Solaris)。 |
generic |
使用大多数处理器通用的指令集。这是缺省设置。 |
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 指令集中。 |
下面列出了针对 x86 Solaris 平台进行编译时需注意的一些重要问题。
传统的 Sun 样式的并行化 pragma 在 x86 上不可用。应改用 OpenMP。有关将传统并行化指令转换为 OpenMP 的信息,请参见《Sun Studio 12: OpenMP API User’s Guide》。
使用设置为 sse、sse2、sse2a 或 sse3 的 -xarch 编译的程序只能在提供这些扩展和功能的平台上运行。
从 Solaris 9 4/04 开始的 OS 发行版在 Pentium 4 兼容的平台上支持 SSE/SSE2。早期版本的 Solaris 操作系统不支持 SSE/SSE2。如果正在运行的 Solaris OS 不支持 -xarch 选择的指令集,则编译器将无法为该指令集生成或链接代码。
如果在单独的步骤中编译和链接,请始终使用编译器以及相同的 -xarch 设置进行链接,以确保链接正确的启动例程。
x86 上的数值结果可能与 SPARC 上的结果不同,这是由 x86 80 位浮点寄存器造成的。要最大限度地减少这些差异,请使用 -fstore 选项,或者使用 -xarch=sse2 进行编译(如果硬件支持 SSE2 的话)。
Solaris 和 Linux 之间的数值结果也可能不同,这是因为它们的内在数学库(例如,sin(x))不同。
从 Sun Studio 11 和 Solaris 10 OS 开始,会对使用这些专用的 -xarch 硬件标志编译和生成的程序二进制文件进行验证,看它们是否在适当的平台上运行。
在 Solaris 10 之前的系统中,不执行任何验证,用户负责确保使用这些标志生成的对象部署在合适的硬件上。
如果在没有相应功能或指令集扩展的平台上运行使用这些 -xarch 选项编译的程序,则可能会导致段故障或不正确的结果,并且不显示任何显式警告消息。
此警告还适用于使用利用了 SSE、SSE2、SSE2a 和 SSE3 指令及扩展的 .il 内联汇编语言函数或 __asm() 汇编程序代码的程序。