<div dir="ltr">Thanks Andrew! Your comment looks really better and performance doesn't change when run <a href="http://cr.openjdk.java.net/~hshi/8149733/webrev2/JMHSample_97_ArrayEqual.java" rel="noreferrer" target="_blank" style="font-size:12.8px">JMHSample_97_ArrayEqual.java</a> test. <div><br></div><div>latest webrev <a href="http://cr.openjdk.java.net/~hshi/8149733/webrev3/" target="_blank">http://cr.openjdk.java.net/~hshi/8149733/webrev3/</a><br></div><div>several small name and format issues:</div><div>1. <span style="font-size:12.8px">"ary1" -> "a" in method declaration</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">2. </span><span style="font-size:12.8px">Use tmp1 instead of rscratch1 directly</span></div><div><span style="font-size:12.8px">+    ldrw(cnt1, Address(a1, length_offset));</span></div><div><span style="font-size:12.8px">+    ldrw(cnt2, Address(a2, length_offset));</span></div><div><span style="font-size:12.8px">+    eorw(rscratch1, cnt1, cnt2);</span></div><div><span style="font-size:12.8px">+    cbnzw(rscratch1, DONE);</span></div><div><span style="font-size:12.8px"> </span></div><div><span style="font-size:12.8px">3.       Blank after “!”</span></div><div><span style="font-size:12.8px">+  if (! is_string) {</span></div><div><br></div><div><br></div><div>Following is result with Aleksey's updated test case (-w 5 -wi 3 -i3 -r 10), first 4 group are for base run with base string length 0, 8, 31, 1024. Performance with patch doesn't show same improvement with early test. Only small length string equal tests still show obvious improvement. </div><div><br></div><div><div>grep -A 6 "^Benchmark" base.result</div><div>Benchmark                         (baselength)  (size)  Mode  Cnt   Score   Error  Units</div><div>JMH_ArrayEquals.byte_equal                   0     500  avgt    9  15.563 ? 0.005  us/op</div><div>JMH_ArrayEquals.byte_not_equal               0     500  avgt    9  16.425 ? 0.167  us/op</div><div>JMH_ArrayEquals.char_equal                   0     500  avgt    9  15.635 ? 0.294  us/op</div><div>JMH_ArrayEquals.char_not_equal               0     500  avgt    9  15.557 ? 0.377  us/op</div><div>JMH_ArrayEquals.string_equal                 0     500  avgt    9  22.307 ? 0.063  us/op</div><div>JMH_ArrayEquals.string_not_equal             0     500  avgt    9  21.368 ? 0.025  us/op</div><div>--</div><div>Benchmark                         (baselength)  (size)  Mode  Cnt   Score   Error  Units</div><div>JMH_ArrayEquals.byte_equal                   8     500  avgt    9  16.058 ? 0.012  us/op</div><div>JMH_ArrayEquals.byte_not_equal               8     500  avgt    9  16.910 ? 0.574  us/op</div><div>JMH_ArrayEquals.char_equal                   8     500  avgt    9  17.094 ? 0.008  us/op</div><div>JMH_ArrayEquals.char_not_equal               8     500  avgt    9  17.114 ? 0.156  us/op</div><div>JMH_ArrayEquals.string_equal                 8     500  avgt    9  25.033 ? 0.074  us/op</div><div>JMH_ArrayEquals.string_not_equal             8     500  avgt    9  24.968 ? 0.244  us/op</div><div>--</div><div>Benchmark                         (baselength)  (size)  Mode  Cnt   Score   Error  Units</div><div>JMH_ArrayEquals.byte_equal                  31     500  avgt    9  18.821 ? 0.091  us/op</div><div>JMH_ArrayEquals.byte_not_equal              31     500  avgt    9  19.763 ? 0.002  us/op</div><div>JMH_ArrayEquals.char_equal                  31     500  avgt    9  24.210 ? 0.033  us/op</div><div>JMH_ArrayEquals.char_not_equal              31     500  avgt    9  27.400 ? 0.382  us/op</div><div>JMH_ArrayEquals.string_equal                31     500  avgt    9  29.825 ? 0.098  us/op</div><div>JMH_ArrayEquals.string_not_equal            31     500  avgt    9  31.918 ? 0.100  us/op</div><div>--</div><div>Benchmark                         (baselength)  (size)  Mode  Cnt    Score   Error  Units</div><div>JMH_ArrayEquals.byte_equal                1024     500  avgt    9  188.613 ? 7.386  us/op</div><div>JMH_ArrayEquals.byte_not_equal            1024     500  avgt    9  193.399 ? 4.448  us/op</div><div>JMH_ArrayEquals.char_equal                1024     500  avgt    9  316.324 ? 9.976  us/op</div><div>JMH_ArrayEquals.char_not_equal            1024     500  avgt    9  341.307 ? 1.082  us/op</div><div>JMH_ArrayEquals.string_equal              1024     500  avgt    9  324.059 ? 2.352  us/op</div><div>JMH_ArrayEquals.string_not_equal          1024     500  avgt    9  326.954 ? 1.121  us/op</div><div> </div><div><br></div><div><br></div><div><br></div><div>grep -A 6 "^Benchmark" opt.result</div><div>Benchmark                         (baselength)  (size)  Mode  Cnt   Score   Error  Units</div><div>JMH_ArrayEquals.byte_equal                   0     500  avgt    9  15.923 ? 0.132  us/op</div><div>JMH_ArrayEquals.byte_not_equal               0     500  avgt    9  15.996 ? 0.336  us/op</div><div>JMH_ArrayEquals.char_equal                   0     500  avgt    9  16.001 ? 0.127  us/op</div><div>JMH_ArrayEquals.char_not_equal               0     500  avgt    9  15.361 ? 0.004  us/op</div><div>JMH_ArrayEquals.string_equal                 0     500  avgt    9  21.083 ? 0.337  us/op</div><div>JMH_ArrayEquals.string_not_equal             0     500  avgt    9  19.887 ? 0.479  us/op</div><div>--</div><div>Benchmark                         (baselength)  (size)  Mode  Cnt   Score   Error  Units</div><div>JMH_ArrayEquals.byte_equal                   8     500  avgt    9  16.574 ? 0.148  us/op</div><div>JMH_ArrayEquals.byte_not_equal               8     500  avgt    9  16.596 ? 0.719  us/op</div><div>JMH_ArrayEquals.char_equal                   8     500  avgt    9  17.874 ? 0.431  us/op</div><div>JMH_ArrayEquals.char_not_equal               8     500  avgt    9  17.831 ? 0.284  us/op</div><div>JMH_ArrayEquals.string_equal                 8     500  avgt    9  24.279 ? 0.033  us/op</div><div>JMH_ArrayEquals.string_not_equal             8     500  avgt    9  22.850 ? 0.444  us/op</div><div>--</div><div>Benchmark                         (baselength)  (size)  Mode  Cnt   Score   Error  Units</div><div>JMH_ArrayEquals.byte_equal                  31     500  avgt    9  19.010 ? 0.006  us/op</div><div>JMH_ArrayEquals.byte_not_equal              31     500  avgt    9  19.962 ? 0.071  us/op</div><div>JMH_ArrayEquals.char_equal                  31     500  avgt    9  25.038 ? 0.108  us/op</div><div>JMH_ArrayEquals.char_not_equal              31     500  avgt    9  27.268 ? 0.063  us/op</div><div>JMH_ArrayEquals.string_equal                31     500  avgt    9  29.366 ? 0.103  us/op</div><div>JMH_ArrayEquals.string_not_equal            31     500  avgt    9  31.357 ? 0.047  us/op</div><div>--</div><div>Benchmark                         (baselength)  (size)  Mode  Cnt    Score   Error  Units</div><div>JMH_ArrayEquals.byte_equal                1024     500  avgt    9  190.034 ? 4.067  us/op</div><div>JMH_ArrayEquals.byte_not_equal            1024     500  avgt    9  192.504 ? 4.675  us/op</div><div>JMH_ArrayEquals.char_equal                1024     500  avgt    9  313.925 ? 8.476  us/op</div><div>JMH_ArrayEquals.char_not_equal            1024     500  avgt    9  342.520 ? 7.915  us/op</div><div>JMH_ArrayEquals.string_equal              1024     500  avgt    9  326.392 ? 2.009  us/op</div><div>JMH_ArrayEquals.string_not_equal          1024     500  avgt    9  328.526 ? 3.617  us/op</div></div><div><br></div><div><div><br></div><div>Regards</div><div>Hui</div></div><div class="gmail_extra"><br><div class="gmail_quote">On 24 February 2016 at 00:17, Andrew Haley <span dir="ltr"><<a href="mailto:aph@redhat.com" target="_blank">aph@redhat.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">My version is at<br>
<br>
<a href="http://cr.openjdk.java.net/~aph/8149733/" rel="noreferrer" target="_blank">http://cr.openjdk.java.net/~aph/8149733/</a><br>
<br>
The changes I made are:<br>
<br>
        I rewrote most of the comments because I couldn't understand<br>
        them.  I intend no criticism, and I understand that English<br>
        isn't the language of your birth.  Please tell me if you can<br>
        understand my comments.<br>
<br>
        "generic_array_equals" -> "arrays_equals"<br>
        Reason: it's not generic, it's only bytes and chars.<br>
        Also, this is what x86_64 calls the same routine.<br>
<br>
        "ary1" -> "a"<br>
        Reason: "ary" just looks odd.  Also, these are the names in the<br>
        java code.<br>
<br>
        "cmp; <a href="http://br.nz" rel="noreferrer" target="_blank">br.nz</a>" -> "eor, bnz"<br>
        Reason: Don't clobber flags for no reason.<br>
<br>
        There's no need to check for the same arrays if we're<br>
        comparing strings.<br>
<br>
Otherwise, the code is the same.  I haven't much tested this, but it<br>
should give the same performance.  Please test it, and tell me if I've<br>
broken anything.<br>
<br>
Thanks,<br>
<br>
Andrew.<br>
</blockquote></div><br></div></div>