[webkit-dev] Using memcmp

Patrick Hanna 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.

>
> Regards,
> Maciej
>



More information about the webkit-dev mailing list