[webkit-dev] Using memcmp
phanna at email.unc.edu
Wed Jul 1 05:10:52 PDT 2009
On Jun 30, 2009, at 2:53 PM, Maciej Stachowiak wrote:
> On Jun 30, 2009, at 9:57 AM, Patrick Hanna wrote:
>> I have noticed that rather than using memcmp for comparing strings,
>> webkit likes to cast to uint32_t* and compare in a for loop. For
>> example, WebCore::equal in AtomicString.cpp and StringHash::equal
>> in StringHash.h. Is there any reason not to memcmp? I am assuming
>> that most implementations of memcmp will do the word alignment and
>> basically do the same thing.
> We found the copy loop to be a little bit faster than memcmp on the
> platforms where we tested. memcmp tends not to do as well for short
> strings because it doesn't know that the start and end have some
> alignment guarantees. Also there is the function call overhead.
>> The reason I ask is because StringHash::equal does not check for
>> PLATFORM(ARM) or PLATFORM(SH4) so I was going to submit a patch to
>> use memcmp for ARM/SH4 but didn't know if that was frowned upon
>> (and WebCore::equal does a loop for ARM/SH4 as well).
> Is there a reason you'd want to make the code use a different
> implementation depending on the CPU? (It's not obvious to me from
> your message).
Sorry, I did not mention the problem. On some arm platforms, unaligned
access causes a bus error so we cannot reinterpret_cast from UChar* to
uint32_t*. Our memcmp does the alignment check for us and is inlined.
When I do the patch, I will do the loop to be consistent with the
AtomicString implementation. Thanks for the info.
More information about the webkit-dev