forked from wolfSSL/wolfssl
add aesni intel asm syntax for aesni, abstract cpuid and asm linkage better for msvc
This commit is contained in:
@@ -1551,31 +1551,34 @@ static const word32 Td[5][256] = {
|
||||
|
||||
#ifdef CYASSL_AESNI
|
||||
|
||||
/* Each platform needs to query info type 1 from cpuid to see if aesni is
|
||||
* supported. Also, let's setup a macro for proper linkage w/o ABI conflicts
|
||||
*/
|
||||
|
||||
#ifndef _MSC_VER
|
||||
|
||||
#define cpuid(func,ax,bx,cx,dx)\
|
||||
#define cpuid(reg, func)\
|
||||
__asm__ __volatile__ ("cpuid":\
|
||||
"=a" (ax), "=b" (bx), "=c" (cx), "=d" (dx) : "a" (func));
|
||||
"=a" (reg[0]), "=b" (reg[1]), "=c" (reg[2]), "=d" (reg[3]) :\
|
||||
"a" (func));
|
||||
|
||||
#define XASM_LINK(f) asm(f)
|
||||
#else
|
||||
|
||||
#define cpuid(func,ax,bx,cx,dx)\
|
||||
__asm mov eax, func \
|
||||
__asm cpuid \
|
||||
__asm mov ax, eax \
|
||||
__asm mov bx, ebx \
|
||||
__asm mov cx, ecx \
|
||||
__asm mov dx, edx
|
||||
#include <intrin.h>
|
||||
#define cpuid(a,b) __cpuid(a,b)
|
||||
|
||||
#define XASM_LINK(f)
|
||||
|
||||
#endif /* _MSC_VER */
|
||||
|
||||
|
||||
static int Check_CPU_support_AES(void)
|
||||
{
|
||||
unsigned int a,b,c,d;
|
||||
cpuid(1,a,b,c,d);
|
||||
unsigned int reg[4]; /* put a,b,c,d into 0,1,2,3 */
|
||||
cpuid(reg, 1); /* query info 1 */
|
||||
|
||||
if (c & 0x2000000)
|
||||
if (reg[2] & 0x2000000)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
@@ -1590,34 +1593,34 @@ static int haveAESNI = 0;
|
||||
void AES_CBC_encrypt(const unsigned char* in, unsigned char* out,
|
||||
unsigned char* ivec, unsigned long length,
|
||||
const unsigned char* KS, int nr)
|
||||
asm ("AES_CBC_encrypt");
|
||||
XASM_LINK("AES_CBC_encrypt");
|
||||
|
||||
|
||||
void AES_CBC_decrypt(const unsigned char* in, unsigned char* out,
|
||||
unsigned char* ivec, unsigned long length,
|
||||
const unsigned char* KS, int nr)
|
||||
asm ("AES_CBC_decrypt");
|
||||
XASM_LINK("AES_CBC_decrypt");
|
||||
|
||||
void AES_ECB_encrypt(const unsigned char* in, unsigned char* out,
|
||||
unsigned long length, const unsigned char* KS, int nr)
|
||||
asm ("AES_ECB_encrypt");
|
||||
XASM_LINK("AES_ECB_encrypt");
|
||||
|
||||
|
||||
void AES_ECB_decrypt(const unsigned char* in, unsigned char* out,
|
||||
unsigned long length, const unsigned char* KS, int nr)
|
||||
asm ("AES_ECB_decrypt");
|
||||
XASM_LINK("AES_ECB_decrypt");
|
||||
|
||||
void AES_128_Key_Expansion(const unsigned char* userkey,
|
||||
unsigned char* key_schedule)
|
||||
asm ("AES_128_Key_Expansion");
|
||||
XASM_LINK("AES_128_Key_Expansion");
|
||||
|
||||
void AES_192_Key_Expansion(const unsigned char* userkey,
|
||||
unsigned char* key_schedule)
|
||||
asm ("AES_192_Key_Expansion");
|
||||
XASM_LINK("AES_192_Key_Expansion");
|
||||
|
||||
void AES_256_Key_Expansion(const unsigned char* userkey,
|
||||
unsigned char* key_schedule)
|
||||
asm ("AES_256_Key_Expansion");
|
||||
XASM_LINK("AES_256_Key_Expansion");
|
||||
|
||||
|
||||
static int AES_set_encrypt_key(const unsigned char *userKey, const int bits,
|
||||
|
||||
Reference in New Issue
Block a user