On Wed, Jul 17, 2019 at 10:49 PM Alex Kodat <alexko...@gmail.com> wrote:

> In Reland "[runtime] Speed up String::IsOneByte", the following check was
> added to NonOneByteStart in src/objects/string.h:
>
>   DCHECK(IsAligned(reinterpret_cast<Address>(chars), sizeof(uc16)));
>
> This is part of the very clever word at a time detection of code points >
> 256. Unfortunately for us, this code ends up getting called for data we
> pass to String::NewFromTwoByte. And while the name gives one pause, the
> comment says
>
> /** Allocates a new string from UTF-16 data.*/
>
> so we've been using this against UTF-16 data which, UTF-16 being a
> serialization mechanism might not be two-byte aligned (ours is often in
> protocol buffer data). In any case, String::NewFromTwoByte
> calls Factory::NewStringFromTwoByte with the unaligned string which then
> calls String::IsOneByte with the unaligned string which then fails with the
> DCHECK. Without the DCHECK it works because the code that's scanning for
> the start of word alignment works fine for non-two-byte aligned data so
> this is only really an issue for debug builds though admittedly the
> non-one-byte scan won't be nearly as efficient for non-aligned data so
> maybe the code is doing us a favor by hitting us on the head.
>
> For non-two-byte aligned data, the clever algorithm could still be made to
> work by flipping the endian-specific word mask and a bit of up-front
> fiddling but far be it for me to advocate anyone going to that trouble
> though I guess if I were told that such a change would be accepted i'd be
> willing to contribute such a fix, myself. Another way to fix it would be to
> create the string in the heap as a two-byte string and then scan the
> aligned data in the heap, flipping the one-byte bit (or whatever indicates
> one-byte) in the string object. But haven't researched whether there is a
> call to do this bit flip.
>
> In any case, it doesn't seem nice that V8 no longer has an unaligned
> UTF-16 to string conversion mechanism, at least not one that works for
> debug builds.
>
> Opinions?
>
> --
> --
> v8-users mailing list
> v8-users@googlegroups.com
> http://groups.google.com/group/v8-users
> ---
> You received this message because you are subscribed to the Google Groups
> "v8-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to v8-users+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/v8-users/7f027ba5-d190-45a0-ad94-954e61ec8a4f%40googlegroups.com
> <https://groups.google.com/d/msgid/v8-users/7f027ba5-d190-45a0-ad94-954e61ec8a4f%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
-- 
v8-users mailing list
v8-users@googlegroups.com
http://groups.google.com/group/v8-users
--- 
You received this message because you are subscribed to the Google Groups 
"v8-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to v8-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/v8-users/CAH3p7oPiZ2ZftpOUvOSaXSkvntbVQVoPaJHLekMWiam7yUYJcQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to