Estoy intentando compilar una aplicación C en una Mac. Yo uso los intrínsecos SSE4 y AES-NI.¿Cómo puedo usar los intrínsecos de AES-NI en una Mac?
En Linux, acabo de llamar gcc con la -msse4 y -maes banderas e incluyen la cabecera wmmintrin.h y puedo llamar a las características intrínsecas de la ESS como _mm_add_epi64(a,b)
o AES-NI intrínsecos como _mm_aesenc_si128(a, b)
y todo funciona bien.
En la Mac, es más difícil, porque Apple reemplaza a GCC con llvm-gcc que aún no es compatible con AES-NI. Entonces, los intrínsecos SSE4 funcionan bien, pero no los AES. Incluso las llamadas de ensamblaje en línea a las instrucciones AES no son reconocidas.
Intel tiene lots of AES example code en su sitio web, pero solo para Linux y Windows.
Me di cuenta la instrucción RDRAND es también sin apoyo por llvm-gcc pero Intel proporciona una solución para que utilizando una macro C que se expande en código byte máquina prima. (See the rdrand.h example file in this Intel library)
Lamentablemente, no existe una solución provisional similar para las instrucciones de AES-NI, probablemente porque las instrucciones tienen argumentos y no se pueden evaluar como bytes de código de máquina estático.
Existen programas que usan AES-NI en la Mac, incluido el propio File Vault de Apple, por lo que debe haber algún método que funcione.
para hacer mi pregunta concreta, ¿cómo iba a obtener la siguiente simple llamada para compilar utilizando la última 4.2 (última versión pública en Mountain Lion Xcode 4.4.1) gcc-llvm Mac:
__m128i A, B, C;
/* A, B, C initialized here... */
A = _mm_aesenc_si128(B, C);
Gracias por ¡alguna ayuda!
Debería utilizar [clang] (https://developer.apple.com/library/mac/#documentation/CompilerTools/Conceptual/LLVMCompilerOverview/_index.html), * not * 'gcc'. –