Xcode 如何在Mac上使用AES-NI内部函数?
我正试图在Mac上编译一个C应用程序。我使用SSE4和AES-NI内部函数 在Linux中,我只需使用-msse4和-maes标志调用gcc,并包含wmmintrin.h头,我可以调用SSE内部函数,如Xcode 如何在Mac上使用AES-NI内部函数?,xcode,gcc,aes,sse,llvm-gcc,Xcode,Gcc,Aes,Sse,Llvm Gcc,我正试图在Mac上编译一个C应用程序。我使用SSE4和AES-NI内部函数 在Linux中,我只需使用-msse4和-maes标志调用gcc,并包含wmmintrin.h头,我可以调用SSE内部函数,如\u mm\u add\u epi64(a,b)或AES-NI内部函数,如\u mm\u aesenc\u si128(a,b),一切正常 在Mac上更难,因为苹果用llvm GCC取代了GCC,后者还不支持AES-NI。因此SSE4内部函数可以正常工作,但AES内部函数不行。 甚至对AES指令的
\u mm\u add\u epi64(a,b)
或AES-NI内部函数,如\u mm\u aesenc\u si128(a,b)
,一切正常
在Mac上更难,因为苹果用llvm GCC取代了GCC,后者还不支持AES-NI。因此SSE4内部函数可以正常工作,但AES内部函数不行。
甚至对AES指令的内联汇编调用也无法识别
英特尔在其网站上发布了一个新版本,但它只适用于Linux和Windows
我注意到llvm gcc也不支持RDRAND指令,但Intel提供了一种解决方法,它使用一个扩展为原始机器字节码的C宏。()
不幸的是,没有为AES-NI指令提供类似的解决方法,可能是因为指令有参数,不能作为静态机器代码字节进行计算
Mac上确实存在使用AES-NI的程序,包括苹果自己的文件库,所以一定有某种方法可以工作
为了使我的问题具体化,我将如何使用最新的Mac gcc llvm 4.2(Mountain Lion xcode 4.4.1的最新公开发行版)进行以下简单的编译调用:
谢谢你的帮助 苹果开发者支持部门报告说,无法使用Xcode。(事实上,他们的回答有点尖刻,暗示开发者永远不需要直接使用AES-NI,所以我不必费心了。叹气,谢谢,苹果。) 然而,我确实找到了两个可行的解决方案,都是简单地避开苹果的软件。一种是使用英特尔自己的商用C++编译器。
另一种是从源代码下载并编译GCC4.6或4.7,并直接使用。这是我选择的选项。我遵循了GCC编译和安装(虽然很干净)仍然是一个麻烦和解决办法,只是为了使用一个CPU本身,但它可以工作。谢谢,GCC团队 您应该使用的是,而不是
gcc
。这个答案已经改变,因为现代Xcode(4.6.3)可能会改变,而不管Apple.asm volatile(“aesenc…”)://适用于llvm和gcc-4.4+,请确保首先检查CPUID.01H:ECX.AESNI[bit 25]=1 takeaway需要警惕加密,无论是高级还是低级,因为只需一个细微的编码错误就可以暴露出一个大的攻击面。
__m128i A, B, C;
/* A, B, C initialized here... */
A = _mm_aesenc_si128(B, C);