1 /**
2 *** Copyright (C) 1985-2008 Intel Corporation.  All rights reserved.
3 ***
4 *** The information and source code contained herein is the exclusive
5 *** property of Intel Corporation and may not be disclosed, examined
6 *** or reproduced in whole or in part without explicit written authorization
7 *** from the company.
8 ***
9 **/
10
11 /*
12  * wmmintrin.h
13  *
14  * Principal header file for Intel(R) AES and PCLMULQDQ intrinsics.
15  */
16
17 #pragma once
18 #ifndef __midl
19 #ifndef _INCLUDED_WMM
20 #define _INCLUDED_WMM
21
22 #if defined(_M_CEE_PURE)
23              #error ERROR: EMM intrinsics not supported in the pure mode!
24 #else
25
26 #include <nmmintrin.h>
27
28
29 #if __cplusplus
30 extern "C" {
31 #endif
32
33 /*
34  * Performs 1 round of AES decryption of the first m128i using 
35  * the second m128i as a round key. 
36  */
37 extern __m128i _mm_aesdec_si128(__m128i v, __m128i rkey);
38
39 /*
40  * Performs the last round of AES decryption of the first m128i 
41  * using the second m128i as a round key.
42  */
43 extern __m128i _mm_aesdeclast_si128(__m128i v, __m128i rkey);
44
45 /*
46  * Performs 1 round of AES encryption of the first m128i using 
47  * the second m128i as a round key.
48  */
49 extern __m128i _mm_aesenc_si128(__m128i v, __m128i rkey);
Lines 50 ... 59 are skipped.
60  */
61 extern __m128i _mm_aesimc_si128(__m128i v);
62
63 /*
64  * Generates a m128i round key for the input m128i 
65  * AES cipher key and byte round constant. 
66  * The second parameter must be a compile time constant.
67  */
68 extern __m128i _mm_aeskeygenassist_si128(__m128i ckey, const int rcon);
69
70 /* 
71  * Performs carry-less integer multiplication of 64-bit halves 
72  * of 128-bit input operands. 
73  * The third parameter inducates which 64-bit haves of the input parameters 
74  * v1 and v2 should be used. It must be a compile time constant.
75  */
76 extern __m128i _mm_clmulepi64_si128(__m128i v1, __m128i v2, 
77                           const int imm8);
78
79
80 #if defined __cplusplus
81 }; /* End "C" */
82 #endif /* __cplusplus */
83
84 #endif /* defined(_M_CEE_PURE) */
85
86 #endif
87 #endif /* _INCLUDED_WMM */
88