[webkit-dev] Using memcmp

Simone Fiorentino simone.fiorentino at consulenti.fastweb.it
Wed Jul 1 07:31:37 PDT 2009


Hi Patrick,
I think WebKit code can't rely on system memcmp() alignment functionality 
since its implementation may change.
I think a better solution should be to write code (inside WebKit) that use 
aligned access in memory (as done in WebCore::equal)...for platforms that 
needs aligned accesses.

StringHash::equal() needs a patch (as done for WebCore::equal)...at least for 
SH4 platform. 
If you prefer I can submit such a patch for SH4 platform.

Tnx.

Best regards,
S.


On Wed July 1 2009, Patrick Hanna wrote:
> 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
> >
> 
> _______________________________________________
> webkit-dev mailing list
> webkit-dev at lists.webkit.org
> http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev
> 




More information about the webkit-dev mailing list