Enable double-SHA256-for-64-byte code on 32-bit x86
(cherry picked from commit bitcoin/bitcoin@57ba401abc)
This commit is contained in:
parent
6fc711d0d5
commit
f78a601898
|
@ -480,7 +480,7 @@ TransformD64Type TransformD64 = sha256::TransformD64;
|
||||||
TransformD64Type TransformD64_4way = nullptr;
|
TransformD64Type TransformD64_4way = nullptr;
|
||||||
TransformD64Type TransformD64_8way = nullptr;
|
TransformD64Type TransformD64_8way = nullptr;
|
||||||
|
|
||||||
#if defined(USE_ASM) && (defined(__x86_64__) || defined(__amd64__))
|
#if defined(USE_ASM) && (defined(__x86_64__) || defined(__amd64__) || defined(__i386__))
|
||||||
// We can't use cpuid.h's __get_cpuid as it does not support subleafs.
|
// We can't use cpuid.h's __get_cpuid as it does not support subleafs.
|
||||||
void inline cpuid(uint32_t leaf, uint32_t subleaf, uint32_t& a, uint32_t& b, uint32_t& c, uint32_t& d)
|
void inline cpuid(uint32_t leaf, uint32_t subleaf, uint32_t& a, uint32_t& b, uint32_t& c, uint32_t& d)
|
||||||
{
|
{
|
||||||
|
@ -493,12 +493,14 @@ void inline cpuid(uint32_t leaf, uint32_t subleaf, uint32_t& a, uint32_t& b, uin
|
||||||
std::string SHA256AutoDetect()
|
std::string SHA256AutoDetect()
|
||||||
{
|
{
|
||||||
std::string ret = "standard";
|
std::string ret = "standard";
|
||||||
#if defined(USE_ASM) && (defined(__x86_64__) || defined(__amd64__))
|
#if defined(USE_ASM) && (defined(__x86_64__) || defined(__amd64__) || defined(__i386__))
|
||||||
uint32_t eax, ebx, ecx, edx;
|
uint32_t eax, ebx, ecx, edx;
|
||||||
cpuid(1, 0, eax, ebx, ecx, edx);
|
cpuid(1, 0, eax, ebx, ecx, edx);
|
||||||
if ((ecx >> 19) & 1) {
|
if ((ecx >> 19) & 1) {
|
||||||
|
#if defined(__x86_64__) || defined(__amd64__)
|
||||||
Transform = sha256_sse4::Transform;
|
Transform = sha256_sse4::Transform;
|
||||||
TransformD64 = TransformD64Wrapper<sha256_sse4::Transform>;
|
TransformD64 = TransformD64Wrapper<sha256_sse4::Transform>;
|
||||||
|
#endif
|
||||||
#if defined(ENABLE_SSE41) && !defined(BUILD_BITCOIN_INTERNAL)
|
#if defined(ENABLE_SSE41) && !defined(BUILD_BITCOIN_INTERNAL)
|
||||||
TransformD64_4way = sha256d64_sse41::Transform_4way;
|
TransformD64_4way = sha256d64_sse41::Transform_4way;
|
||||||
ret = "sse4(1way+4way)";
|
ret = "sse4(1way+4way)";
|
||||||
|
|
Loading…
Reference in New Issue