<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>109335</bug_id>
          
          <creation_ts>2013-02-08 17:11:10 -0800</creation_ts>
          <short_desc>ARM_NEON Inline Assembly for copyLCharsFromUCharSource() inefficient for aligned destinations</short_desc>
          <delta_ts>2013-02-08 18:00:19 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>828846</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-02-08 17:11:10 -0800</bug_when>
    <thetext>The ARM_NEON specific code for copyLCharsFromUCharSource() always tries to align the destination, even when it is aligned.  The can be seen for moves &gt; 15 characters in length.

The code in question is marked

    if (length &gt;= (2 * memoryAccessSize) - 1) {
        // Prefix: align dst on 64 bits.
        const uintptr_t memoryAccessMask = memoryAccessSize - 1;
 *      do {
 *          *destination++ = static_cast&lt;LChar&gt;(*source++);
 *       } while (!isAlignedTo&lt;memoryAccessMask&gt;(destination));

        // Vector interleaved unpack, we only store the lower 8 bits.
        const uintptr_t lengthLeft = end - destination;
        const LChar* const simdEnd = end - (lengthLeft % memoryAccessSize);
        do {
            asm(&quot;vld2.8   { d0-d1 }, [%[SOURCE]] !\n\t&quot;
                &quot;vst1.8   { d0 }, [%[DESTINATION],:64] !\n\t&quot;
                : [SOURCE]&quot;+r&quot; (source), [DESTINATION]&quot;+r&quot; (destination)
                :
                : &quot;memory&quot;, &quot;d0&quot;, &quot;d1&quot;);
        } while (destination != simdEnd);
    }

The do { } while should be changed to a while.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828856</commentid>
    <comment_count>1</comment_count>
      <attachid>187391</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-02-08 17:45:23 -0800</bug_when>
    <thetext>Created attachment 187391
Patch

In a synthetic test harness, this is a speed up in the small, but above 15 character case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828861</commentid>
    <comment_count>2</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-02-08 18:00:19 -0800</bug_when>
    <thetext>Committed r142336: &lt;http://trac.webkit.org/changeset/142336&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187391</attachid>
            <date>2013-02-08 17:45:23 -0800</date>
            <delta_ts>2013-02-08 17:57:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>109335.patch</filename>
            <type>text/plain</type>
            <size>1564</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNDIzMzQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDEzLTAyLTA4ICBNaWNoYWVsIFNhYm9mZiAgPG1z
YWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIEFSTV9ORU9OIElubGluZSBBc3NlbWJseSBmb3Ig
Y29weUxDaGFyc0Zyb21VQ2hhclNvdXJjZSgpIGluZWZmaWNpZW50IGZvciBhbGlnbmVkIGRlc3Rp
bmF0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTA5MzM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Q2hhbmdlIGEgImRvIHdoaWxlIiB0byBhICJ3aGlsZSIgc28gdGhhdCB3ZSBkb24ndCBjb3B5IHNp
bmdsZSBjaGFyYWN0ZXJzIHRvIGFsaWduIHRoZSAKKyAgICAgICAgZGVzdGluYXRpb24gd2hlbiBp
dCBpcyBhbHJlYWR5IGFsaWduZWQuCisKKyAgICAgICAgKiB3dGYvdGV4dC9BU0NJSUZhc3RQYXRo
Lmg6CisgICAgICAgIChXVEY6OmNvcHlMQ2hhcnNGcm9tVUNoYXJTb3VyY2UpOgorCiAyMDEzLTAy
LTA4ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIEJyaW5nIFdl
YktpdCB1cCB0byBzcGVlZCB3aXRoIGxhdGVzdCBFbmNyeXB0ZWQgTWVkaWEgc3BlYy4KSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL3RleHQvQVNDSUlGYXN0UGF0aC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL3RleHQvQVNDSUlGYXN0UGF0aC5oCShyZXZpc2lvbiAxNDIzMzQpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi90ZXh0L0FTQ0lJRmFzdFBhdGguaAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDkg
KzEzOCw4IEBAIGlubGluZSB2b2lkIGNvcHlMQ2hhcnNGcm9tVUNoYXJTb3VyY2UoTEMKICAgICBp
ZiAobGVuZ3RoID49ICgyICogbWVtb3J5QWNjZXNzU2l6ZSkgLSAxKSB7CiAgICAgICAgIC8vIFBy
ZWZpeDogYWxpZ24gZHN0IG9uIDY0IGJpdHMuCiAgICAgICAgIGNvbnN0IHVpbnRwdHJfdCBtZW1v
cnlBY2Nlc3NNYXNrID0gbWVtb3J5QWNjZXNzU2l6ZSAtIDE7Ci0gICAgICAgIGRvIHsKKyAgICAg
ICAgd2hpbGUgKCFpc0FsaWduZWRUbzxtZW1vcnlBY2Nlc3NNYXNrPihkZXN0aW5hdGlvbikpCiAg
ICAgICAgICAgICAqZGVzdGluYXRpb24rKyA9IHN0YXRpY19jYXN0PExDaGFyPigqc291cmNlKysp
OwotICAgICAgICB9IHdoaWxlICghaXNBbGlnbmVkVG88bWVtb3J5QWNjZXNzTWFzaz4oZGVzdGlu
YXRpb24pKTsKIAogICAgICAgICAvLyBWZWN0b3IgaW50ZXJsZWF2ZWQgdW5wYWNrLCB3ZSBvbmx5
IHN0b3JlIHRoZSBsb3dlciA4IGJpdHMuCiAgICAgICAgIGNvbnN0IHVpbnRwdHJfdCBsZW5ndGhM
ZWZ0ID0gZW5kIC0gZGVzdGluYXRpb247Cg==
</data>
<flag name="review"
          id="207188"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>