90 lines
2.3 KiB
C
90 lines
2.3 KiB
C
/***
|
|
*** Copyright (C) 1985-2008 Intel Corporation. All rights reserved.
|
|
***
|
|
*** The information and source code contained herein is the exclusive
|
|
*** property of Intel Corporation and may not be disclosed, examined
|
|
*** or reproduced in whole or in part without explicit written authorization
|
|
*** from the company.
|
|
***
|
|
****/
|
|
|
|
/*
|
|
* wmmintrin.h
|
|
*
|
|
* Principal header file for Intel(R) AES and PCLMULQDQ intrinsics.
|
|
*/
|
|
|
|
#pragma once
|
|
#ifndef __midl
|
|
#ifndef _INCLUDED_WMM
|
|
#define _INCLUDED_WMM
|
|
|
|
#if defined (_M_CEE_PURE)
|
|
#error ERROR: EMM intrinsics not supported in the pure mode!
|
|
#else /* defined (_M_CEE_PURE) */
|
|
|
|
#include <nmmintrin.h>
|
|
|
|
|
|
#if __cplusplus
|
|
extern "C" {
|
|
#endif /* __cplusplus */
|
|
|
|
/*
|
|
* Performs 1 round of AES decryption of the first m128i using
|
|
* the second m128i as a round key.
|
|
*/
|
|
extern __m128i _mm_aesdec_si128(__m128i v, __m128i rkey);
|
|
|
|
/*
|
|
* Performs the last round of AES decryption of the first m128i
|
|
* using the second m128i as a round key.
|
|
*/
|
|
extern __m128i _mm_aesdeclast_si128(__m128i v, __m128i rkey);
|
|
|
|
/*
|
|
* Performs 1 round of AES encryption of the first m128i using
|
|
* the second m128i as a round key.
|
|
*/
|
|
extern __m128i _mm_aesenc_si128(__m128i v, __m128i rkey);
|
|
|
|
/*
|
|
* Performs the last round of AES encryption of the first m128i
|
|
* using the second m128i as a round key.
|
|
*/
|
|
extern __m128i _mm_aesenclast_si128(__m128i v, __m128i rkey);
|
|
|
|
/*
|
|
* Performs the InverseMixColumn operation on the source m128i
|
|
* and stores the result into m128i destination.
|
|
*/
|
|
extern __m128i _mm_aesimc_si128(__m128i v);
|
|
|
|
/*
|
|
* Generates a m128i round key for the input m128i
|
|
* AES cipher key and byte round constant.
|
|
* The second parameter must be a compile time constant.
|
|
*/
|
|
extern __m128i _mm_aeskeygenassist_si128(__m128i ckey, const int rcon);
|
|
|
|
/*
|
|
* Performs carry-less integer multiplication of 64-bit halves
|
|
* of 128-bit input operands.
|
|
* The third parameter inducates which 64-bit haves of the input parameters
|
|
* v1 and v2 should be used. It must be a compile time constant.
|
|
*/
|
|
extern __m128i _mm_clmulepi64_si128(__m128i v1, __m128i v2,
|
|
const int imm8);
|
|
|
|
|
|
|
|
|
|
#if defined __cplusplus
|
|
}; /* End "C" */
|
|
#endif /* defined __cplusplus */
|
|
|
|
#endif /* defined (_M_CEE_PURE) */
|
|
|
|
#endif /* _INCLUDED_WMM */
|
|
#endif /* __midl */
|