diff options
-rw-r--r-- | CMakeLists.txt | 6 | ||||
-rw-r--r-- | crypto/cryptonight_aesni.h | 11 |
2 files changed, 11 insertions, 6 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 2667f42..e87d69d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -84,9 +84,9 @@ endif() # Compile & Link ################################################################################ -# activate sse2, aes-ni and bmi2 -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse2 -maes -mbmi2") -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse2 -maes -mbmi2") +# activate sse2 and aes-ni +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse2 -maes") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse2 -maes") # activate static libgcc and libstdc++ linking if(CMAKE_LINK_STATIC) diff --git a/crypto/cryptonight_aesni.h b/crypto/cryptonight_aesni.h index de0f186..daf4037 100644 --- a/crypto/cryptonight_aesni.h +++ b/crypto/cryptonight_aesni.h @@ -28,6 +28,11 @@ static inline uint64_t _umul128(uint64_t a, uint64_t b, uint64_t* hi) return (uint64_t)r; } +__attribute__((target ("bmi2"))) static inline uint64_t _mulx_u64(uint64_t a, uint64_t b, uint64_t* hi) +{ + return _mulx_u64((unsigned long long)a, (unsigned long long)b, (unsigned long long*)hi); +} + #define _mm256_set_m128i(v0, v1) _mm256_insertf128_si256(_mm256_castsi128_si256(v1), (v0), 1) #else #include <intrin.h> @@ -319,7 +324,7 @@ void cryptonight_hash(const void* input, size_t len, void* output, cryptonight_c ch = ((uint64_t*)&l0[idx0 & 0x1FFFF0])[1]; if(MULX) - lo = _mulx_u64(idx0, cl, (long long unsigned int*)&hi); + lo = _mulx_u64(idx0, cl, &hi); else lo = _umul128(idx0, cl, &hi); @@ -406,7 +411,7 @@ void cryptonight_double_hash(const void* input, size_t len, void* output, crypto cx = _mm_load_si128((__m128i *)&l0[idx0 & 0x1FFFF0]); if(MULX) - lo = _mulx_u64(idx0, _mm_cvtsi128_si64(cx), (long long unsigned int*)&hi); + lo = _mulx_u64(idx0, _mm_cvtsi128_si64(cx), &hi); else lo = _umul128(idx0, _mm_cvtsi128_si64(cx), &hi); @@ -421,7 +426,7 @@ void cryptonight_double_hash(const void* input, size_t len, void* output, crypto cx = _mm_load_si128((__m128i *)&l1[idx1 & 0x1FFFF0]); if(MULX) - lo = _mulx_u64(idx1, _mm_cvtsi128_si64(cx), (long long unsigned int*)&hi); + lo = _mulx_u64(idx1, _mm_cvtsi128_si64(cx), &hi); else lo = _umul128(idx1, _mm_cvtsi128_si64(cx), &hi); |