Oracle最近发布了SunStudio12.6。我们有一个SHA-1和SHA-256 内在基础实施 (用于ARM和Intel),我们希望在Solaris i86机器上启用扩展。
12.6手册和-xarch选项可在A.2.115.3用于-xarch的x86旗帜上使用,但它没有讨论SHA。
我们为SHA使用的-xarch选项是什么?
发布于 2017-08-26 15:02:04
如果Studio12.6不支持SHA指令集(而且我强烈怀疑它不支持,因为我在Oracle Developer Studio 12.6发行版中的新内容是什么?文档中根本找不到提到的"SHA“),那么您就倒霉了。
差不多了。
您可以做的是创建您自己的内联汇编程序函数。man inline
内联(4) 名称 内联,filename.il -汇编语言内联模板文件 描述 将汇编语言调用指令替换为从内联模板(*.il)文件中获取的相应函数体的副本。 内联模板文件的后缀为.il,例如: % CC foo.il hello.c 内联是由编译器的代码生成器完成的。 ..。 示例 请查阅libm.il或vis.il以获取示例。您可以在编译器的lib/目录下找到特定于每个受支持的体系结构的这些库的版本。 ..。
一个例子可以在这里找到 (强调地雷):
使用Studio编译器和内联汇编代码进行性能优化 ..。 本文演示了如何度量关键代码段的性能。提供了一个使用编译器标志的示例和使用内联程序集代码的另一个示例。并对结果进行了比较,说明了每种方法的优点和差异。 ..。 示例8:迭代Mandelbrot计算的内联汇编代码 了解所有这些事实后,可以编写内联代码,如示例8所示。 .inline mandel_il,0 // x存储在%xmm0 // y中,存储在%xmm2 // 4.0中// max_int存储在%rdi // set寄存器中以零xorps %xmm3、%xmm3 xorps %xmm4 4、%xmm4 4 xorps %xmm4 5、%xmm5 xorps %xmm4 6、%xmm6 xorps %xmm4 7、%xmm4 7 xorq %rax、%rax .loop: //检查是否u2 - v2 > 4.0 movss %xmm4 5、%xmm4 7添加%xmm4 6,%xmm7 7 .exit jae .exit // v=2*v*u+y mulss %xmm3,%xmm7 4 addss %xmm7 4,%xmm7 4 addss %xmm7 1,%xmm7 4 // u= u2 - v2 +x movss %xmm7 5,%xmm7 3 subss %xmm6,%xmm3 addss %xmm7 0,%xmm3 // u2 =u*u movss %xmm3,%xmm7 5 // v2 =v*v movss %xmm7 3,%xmm7 5//v2=v*v movss %xmm4,%xmm6 mulss %xmm4 4%xmm4 6包括%eax cmpl %edi %eax jl .loop .exit: // mandel_il .end
一点也不难。我不得不为我在Solaris 8天里咨询的一个客户编写了大量的SPARC内联汇编程序函数,其中有些是非常基本的--实际上是一个行来包装一条指令。我发誓,他们中的一些人最终进入了Studio编译器套件的后期版本(因为我们被Sun本身分包了,这并不奇怪,更不用说其中一些明显的事实了-- floor()和ceil(),IIRC是其中的两个--本来就应该在这里……)
https://stackoverflow.com/questions/45872180
复制相似问题