Oracle最近发布了Sun Studio 12.6。我们有一个SHA-1和SHA-256 intrinsic based implementation(适用于ARM和Intel),我们希望在Solaris i86机器上启用扩展。
A.2.115.3 -xarch Flags for x86提供了12.6手册和-xarch
选项,但不讨论SHA。
我们将哪个-xarch
选项用于SHA?
答案 0 :(得分:4)
如果Studio 12.6不支持SHA指令集(我强烈怀疑它没有,因为我在What's New in the Oracle Developer Studio 12.6 Release文档中)以任何形式都找不到“SHA”,你运气不好。
几乎。
您可以做的是创建自己的内联汇编程序函数。 See man inline
:
<强>直列(4)强>
命名强>
inline,filename.il - 汇编语言内联模板文件
<强>描述强>
汇编语言呼叫说明被其副本替换 从内联模板(* .il)获得的相应函数体 文件。
内联模板文件的后缀为.il,例如:
% CC foo.il hello.c
内联由编译器的代码生成器完成。
...
<强>实施例强>
请查看libm.il或vis.il以获取示例。您可以在编译器的lib /目录下找到特定于每个支持的体系结构的这些库的版本。
...
示例can be found here(强调我的):
使用Sun Studio编译器和内联汇编代码进行性能调优
...
本文介绍了如何衡量绩效 一段重要的代码。使用编译器标志和的示例 提供了使用内联汇编代码的另一个示例。比较结果以显示每种的益处和差异 方法
...
示例8:迭代Mandelbrot计算的内联汇编代码
了解所有这些事实后,可以编写内联代码,如图所示 例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()
和{{1 IIRC,其中有两个 - 本来应该在那里......)