I think WebCore::equal already has a patch for SH4 and ARM. I was only
going to replicate that same code in StringHash::equal. 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
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev
_______________________________________________
webkit-dev mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev