Solaris 上的 SHA 扩展的哪个 xarch?



Oracle 最近发布了 Sun Studio 12.6。我们有一个基于 SHA-1 和 SHA-256 内部函数的实现(适用于 ARM 和 Intel(,我们希望在 Solaris i86 机器上启用扩展。

12.6 手册和-xarch选项可在 x86 的 A.2.115.3 -xarch 标志中找到,但它不讨论 SHA。

我们对 SHA 使用哪个-xarch选项?

如果 Studio 12.6 不支持SHA 指令集(我强烈怀疑它不支持,因为我在 Oracle Developer Studio 12.6 Release 文档中的新增功能文档中找不到任何形式的"SHA"(,那么您就不走运了。

几乎。

您可以做的是创建自己的内联汇编程序函数。 请参阅man inline

内联(4(

名字

inline, filename.il - 汇编语言内联模板文件

描述

汇编语言调用指令被其副本替换 从内联模板 (*.il( 获取的相应函数体 文件。

内联模板文件的后缀为 .il,例如:

% CC foo.il hello.c

内联由编译器的代码生成器完成。

例子

请查看 libm.il 或 vis.il 以获取示例。您可以在编译器的 lib/目录下找到特定于每个受支持体系结构的这些库的版本。

可以在这里找到一个例子(强调我的(:

使用 Sun Studio 编译器和内联程序集代码进行性能调优

本文演示了如何衡量性能 的关键代码段。使用编译器标志和的示例 提供了另一个使用内联程序集代码的示例。比较结果以显示每种方法的优点和差异 方法。

示例 8:迭代曼德布洛特计算的内联程序集代码

了解了所有这些事实,就可以编写内联代码,如 例 8.

.inline mandel_il,0
// x is stored in %xmm0
// y is stored in %xmm1
// 4.0 is stored in %xmm2
// max_int is stored in %rdi
// set registers to zero
xorps %xmm3, %xmm3
xorps %xmm4, %xmm4
xorps %xmm5, %xmm5
xorps %xmm6, %xmm6
xorps %xmm7, %xmm7
xorq %rax, %rax
.loop:
// check to see if u2 - v2 > 4.0
movss %xmm5, %xmm7
addss %xmm6, %xmm7
ucomiss %xmm2, %xmm7
jp     .exit
jae    .exit
// v = 2 * v * u + y
mulss %xmm3, %xmm4
addss %xmm4, %xmm4
addss %xmm1, %xmm4
// u = u2 - v2 + x
movss %xmm5, %xmm3
subss %xmm6, %xmm3
addss %xmm0, %xmm3
// u2 = u * u
movss %xmm3, %xmm5
mulss %xmm3, %xmm5
// v2 = v * v
movss %xmm4, %xmm6
mulss %xmm4, %xmm6
incl %eax
cmpl %edi, %eax
jl .loop
.exit:
// end of mandel_il
.end

一点也不难。我不得不为我在 Solaris 8 天咨询的客户编写许多 SPARC 内联汇编程序函数,其中一些非常基本 - 实际上是单行代码来包装单个指令。 我发誓其中一些最终出现在Studio 编译器套件的更高版本中(因为我们是由 Sun 本身分包的,这并不奇怪,更不用说其中一些是显而易见的——floor()ceil()IIRC 是其中的两个——并且应该首先在那里......

相关内容

  • 没有找到相关文章

最新更新