forked from wolfSSL/wolfssl
Merge branch 'Staging' of https://github.com/kojo1/wolfssl into Staging
This commit is contained in:
@ -65,11 +65,13 @@
|
||||
#define CPUID_AVX2 0x2
|
||||
#define CPUID_RDRAND 0x4
|
||||
#define CPUID_RDSEED 0x8
|
||||
#define CPUID_BMI2 0x10
|
||||
#define CPUID_BMI2 0x10 /* MULX, RORX */
|
||||
#define CPUID_ADX 0x20 /* ADCX, ADOX */
|
||||
|
||||
#define IS_INTEL_AVX1 (cpuid_flags&CPUID_AVX1)
|
||||
#define IS_INTEL_AVX2 (cpuid_flags&CPUID_AVX2)
|
||||
#define IS_INTEL_BMI2 (cpuid_flags&CPUID_BMI2)
|
||||
#define IS_INTEL_ADX (cpuid_flags&CPUID_ADX)
|
||||
#define IS_INTEL_RDRAND (cpuid_flags&CPUID_RDRAND)
|
||||
#define IS_INTEL_RDSEED (cpuid_flags&CPUID_RDSEED)
|
||||
#define SET_FLAGS
|
||||
@ -98,6 +100,7 @@ static word32 cpuid_flag(word32 leaf, word32 sub, word32 num, word32 bit) {
|
||||
INLINE static int set_cpuid_flags(void) {
|
||||
if(cpuid_check == 0) {
|
||||
if(cpuid_flag(7, 0, EBX, 8)){ cpuid_flags |= CPUID_BMI2 ; }
|
||||
if(cpuid_flag(7, 0, EBX,19)){ cpuid_flags |= CPUID_ADX ; }
|
||||
cpuid_check = 1 ;
|
||||
return 0 ;
|
||||
}
|
||||
@ -107,7 +110,7 @@ INLINE static int set_cpuid_flags(void) {
|
||||
#define RETURN return
|
||||
#define IF_HAVE_INTEL_MULX(func, ret) \
|
||||
if(cpuid_check==0)set_cpuid_flags() ; \
|
||||
if(IS_INTEL_BMI2){ func; ret ; }
|
||||
if(IS_INTEL_BMI2 && IS_INTEL_ADX){ func; ret ; }
|
||||
|
||||
#else
|
||||
#define IF_HAVE_INTEL_MULX(func, ret)
|
||||
|
@ -176,9 +176,11 @@ int InitSha256(Sha256* sha256) {
|
||||
#define CPUID_AVX2 0x2
|
||||
#define CPUID_RDRAND 0x4
|
||||
#define CPUID_RDSEED 0x8
|
||||
#define CPUID_BMI2 0x10 /* MULX, RORX */
|
||||
|
||||
#define IS_INTEL_AVX1 (cpuid_flags&CPUID_AVX1)
|
||||
#define IS_INTEL_AVX2 (cpuid_flags&CPUID_AVX2)
|
||||
#define IS_INTEL_BMI2 (cpuid_flags&CPUID_BMI2)
|
||||
#define IS_INTEL_RDRAND (cpuid_flags&CPUID_RDRAND)
|
||||
#define IS_INTEL_RDSEED (cpuid_flags&CPUID_RDSEED)
|
||||
|
||||
@ -207,6 +209,7 @@ static int set_cpuid_flags(void) {
|
||||
if(cpuid_check==0) {
|
||||
if(cpuid_flag(1, 0, ECX, 28)){ cpuid_flags |= CPUID_AVX1 ;}
|
||||
if(cpuid_flag(7, 0, EBX, 5)){ cpuid_flags |= CPUID_AVX2 ; }
|
||||
if(cpuid_flag(7, 0, EBX, 8)) { cpuid_flags |= CPUID_BMI2 ; }
|
||||
if(cpuid_flag(1, 0, ECX, 30)){ cpuid_flags |= CPUID_RDRAND ; }
|
||||
if(cpuid_flag(7, 0, EBX, 18)){ cpuid_flags |= CPUID_RDSEED ; }
|
||||
cpuid_check = 1 ;
|
||||
@ -235,7 +238,7 @@ static void set_Transform(void) {
|
||||
if(set_cpuid_flags())return ;
|
||||
|
||||
#if defined(HAVE_INTEL_AVX2)
|
||||
if(IS_INTEL_AVX2){
|
||||
if(IS_INTEL_AVX2 && IS_INTEL_BMI2){
|
||||
Transform_p = Transform_AVX1_RORX; return ;
|
||||
Transform_p = Transform_AVX2 ;
|
||||
/* for avoiding warning,"not used" */
|
||||
|
@ -208,9 +208,11 @@ int InitSha512(Sha512* sha512) {
|
||||
#define CPUID_AVX2 0x2
|
||||
#define CPUID_RDRAND 0x4
|
||||
#define CPUID_RDSEED 0x8
|
||||
#define CPUID_BMI2 0x10 /* MULX, RORX */
|
||||
|
||||
#define IS_INTEL_AVX1 (cpuid_flags&CPUID_AVX1)
|
||||
#define IS_INTEL_AVX2 (cpuid_flags&CPUID_AVX2)
|
||||
#define IS_INTEL_BMI2 (cpuid_flags&CPUID_BMI2)
|
||||
#define IS_INTEL_RDRAND (cpuid_flags&CPUID_RDRAND)
|
||||
#define IS_INTEL_RDSEED (cpuid_flags&CPUID_RDSEED)
|
||||
|
||||
@ -242,6 +244,7 @@ static int set_cpuid_flags(int sha) {
|
||||
if((cpuid_check & sha) ==0) {
|
||||
if(cpuid_flag(1, 0, ECX, 28)){ cpuid_flags |= CPUID_AVX1 ;}
|
||||
if(cpuid_flag(7, 0, EBX, 5)){ cpuid_flags |= CPUID_AVX2 ; }
|
||||
if(cpuid_flag(7, 0, EBX, 8)) { cpuid_flags |= CPUID_BMI2 ; }
|
||||
if(cpuid_flag(1, 0, ECX, 30)){ cpuid_flags |= CPUID_RDRAND ; }
|
||||
if(cpuid_flag(7, 0, EBX, 18)){ cpuid_flags |= CPUID_RDSEED ; }
|
||||
cpuid_check |= sha ;
|
||||
@ -276,7 +279,7 @@ static void set_Transform(void) {
|
||||
if(set_cpuid_flags(CHECK_SHA512)) return ;
|
||||
|
||||
#if defined(HAVE_INTEL_AVX2)
|
||||
if(IS_INTEL_AVX2){
|
||||
if(IS_INTEL_AVX2 && IS_INTEL_BMI2){
|
||||
Transform_p = Transform_AVX1_RORX; return ;
|
||||
Transform_p = Transform_AVX2 ;
|
||||
/* for avoiding warning,"not used" */
|
||||
@ -1352,7 +1355,7 @@ static void set_Transform384(void) {
|
||||
Transform384_p = ((IS_INTEL_AVX1) ? Transform384_AVX1 : _Transform384) ;
|
||||
#elif defined(HAVE_INTEL_AVX2)
|
||||
#if defined(HAVE_INTEL_AVX1) && defined(HAVE_INTEL_RORX)
|
||||
if(IS_INTEL_AVX2) { Transform384_p = Transform384_AVX1_RORX ; return ; }
|
||||
if(IS_INTEL_AVX2 && IS_INTEL_BMI2) { Transform384_p = Transform384_AVX1_RORX ; return ; }
|
||||
#endif
|
||||
if(IS_INTEL_AVX2) { Transform384_p = Transform384_AVX2 ; return ; }
|
||||
#if defined(HAVE_INTEL_AVX1)
|
||||
|
Reference in New Issue
Block a user