[webkit-dev] Using memcmp

Simone Fiorentino simone.fiorentino at consulenti.fastweb.it
Wed Jul 1 09:17:17 PDT 2009


> I think WebCore::equal already has a patch for SH4 and ARM. I was only  
> going to replicate that same code in StringHash::equal. 

I agree.

Regards,
S.


> Are you   
> talking about testing for alignment and then doing the 32-bit loop  
> over the aligned segment?
> 
> On Jul 1, 2009, at 10:31 AM, Simone Fiorentino wrote:
> 
> > 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