Core: fast_memcmp updated

git-svn-id: svn://ultimatepp.org/upp/trunk@9411 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
cxl 2016-01-17 06:27:27 +00:00
parent 69275a5e1c
commit c19b49362a

View file

@ -829,14 +829,13 @@ int fast_memcmp(const char *a, const char *b, size_t len)
b += 8;
len -= 8;
}
if(len >= 4) {
if(len & 4) {
uint32 a32 = *(uint32 *)a;
uint32 b32 = *(uint32 *)b;
if(a32 != b32)
return SwapEndian32(a32) < SwapEndian32(b32) ? -1 : 1;
a += 4;
b += 4;
len -= 4;
}
#else
while(len >= 4) {
@ -849,16 +848,15 @@ int fast_memcmp(const char *a, const char *b, size_t len)
len -= 4;
}
#endif
if(len >= 2) {
if(len & 2) {
uint16 a16 = *(uint16 *)a;
uint16 b16 = *(uint16 *)b;
if(a16 != b16)
return SwapEndian16(a16) < SwapEndian16(b16) ? -1 : 1;
a += 2;
b += 2;
len -= 2;
}
if(len && *a != *b)
if((len & 1) != 0 && *a != *b)
return *a < *b ? -1 : 1;
return 0;
}