On 05/18/17 10:57, marius adrian popa wrote:
firebird 3.0.3 current crashes on a non sse4 host even when i try to force
the nonsse4.2 function (i have removed the sse detection and crc32
optimized function)
https://github.com/FirebirdSQL/firebird/commit/52d9a05a0f3d
Anyone tried to compile 3.0.3 on nonsse hosts and x64 ?
Did not, but working with master noticed a bug in non-SSE version which
may cause invalid hash values.
Can you try with this patch?
diff --git a/src/common/classes/Hash.cpp b/src/common/classes/Hash.cpp
index 6614708889..336c916bab 100644
--- a/src/common/classes/Hash.cpp
+++ b/src/common/classes/Hash.cpp
@@ -43,12 +43,11 @@ namespace
{
unsigned int hash_value = 0;
- UCHAR* p;
+ UCHAR* const p = (UCHAR*) &hash_value;
const UCHAR* q = value;
while (length >= 4)
{
- p = (UCHAR*) &hash_value;
p[0] += q[0];
p[1] += q[1];
p[2] += q[2];
@@ -57,25 +56,24 @@ namespace
q += 4;
}
- p = (UCHAR*) &hash_value;
-
if (length >= 2)
{
p[0] += q[0];
p[1] += q[1];
length -= 2;
+ q += 2;
}
if (length)
{
- q += 2;
*p += *q;
}
return hash_value;
}
-#if defined(_M_IX86) || defined(_M_X64) || defined(__x86_64__) || defined(__i386__)
+//#if defined(_M_IX86) || defined(_M_X64) || defined(__x86_64__) || defined(__i386__)
+#ifdef NEVERDEF
bool SSE4_2Supported()
{
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
Firebird-Devel mailing list, web interface at
https://lists.sourceforge.net/lists/listinfo/firebird-devel