xcode – 如何在Mac上使用AES-NI内在函数?

xcode – 如何在Mac上使用AES-NI内在函数?,第1张

概述我正在尝试在Mac上编译C应用程序.我使用SSE4和AES-NI内在函数. 在Linux中,我只使用-msse4和-maes标志调用gcc并包含wmmintrin.h标头,我可以调用SSE内在函数,如_mm_add_epi64(a,b)或AES-NI内在函数,如_mm_aesenc_si128(a,b),一切正常精细. 在Mac上,它更难,因为Apple用llvm-gcc替换了GCC,而llvm- 我正在尝试在Mac上编译C应用程序.我使用SSE4和AES-NI内在函数.

在Linux中,我只使用-msse4和-maes标志调用gcc并包含wmmintrin.h标头,我可以调用SSE内在函数,如_mm_add_epi64(a,b)或AES-NI内在函数,如_mm_aesenc_si128(a,b),一切正常精细.

在Mac上,它更难,因为Apple用llvm-gcc替换了GCC,而llvm-gcc还不支持AES-NI.所以SSE4内在函数工作正常,但不是AES.
即使是对AES指令的内联汇编调用也无法识别.

英特尔在他们的网站上有lots of AES example code,但它仅适用于linux和windows.

我注意到llvm-gcc也不支持rdrand指令,但英特尔通过使用扩展为原始机器字节代码的C宏为此提供了解决方法. (See the rdrand.h example file in this Intel library)

遗憾的是,AES-NI指令没有类似的解决方法,可能是因为指令有参数,不能作为静态机器代码字节进行求值.

在Mac上使用AES-NI的程序确实存在,包括Apple自己的file Vault,因此必须有一些方法可行!

为了使我的问题具体化,我将如何使用最新的Mac gcc-llvm 4.2(Mountain lion xcode 4.4.1中的最新公开发布)进行以下简单调用:

__m128i A,B,C;  /* A,C initialized here... */  A = _mm_aesenc_si128(B,C);

谢谢你的帮助!

解决方法 Apple开发人员支持报告说使用Xcode是不可能的. (事实上​​,他们的回答有点讽刺,并暗示AES-NI不是开发人员需要直接使用的东西,所以我不应该打扰.感叹,谢谢,Apple.)

但是,我确实找到了两个工作解决方案,都是通过简单地避开Apple的软件.一种是使用英特尔自己的商业C编译器.
另一种是从源代码下载和编译GCC 4.6或4.7并直接使用它.这是我选择的选项.我跟着this guide. GCC编译和安装(虽然干净)仍然是一个麻烦和解决方法只是为了使用单个cpu内在,但它的工作原理.谢谢,GCC团队!

总结

以上是内存溢出为你收集整理的xcode – 如何在Mac上使用AES-NI内在函数?全部内容,希望文章能够帮你解决xcode – 如何在Mac上使用AES-NI内在函数?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1104961.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存