Solaris上针对SHA扩展的xarch?

时间:2017-08-24 23:08:05

标签: solaris sha intrinsics solaris-studio

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?

1 个答案:

答案 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,其中有两个 - 本来应该在那里......)