<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">One comment about the .ad change:  please don’t introduce new enc_class methods; use ins_encode %{ %} and MacroAssembler instructions instead, like this one:<div class=""><br class=""></div><div class="">  ins_encode %{<br class="">    Register Rp = $p$$Register;<br class="">    Register Rq = $q$$Register;<br class="">    Register Ry = $y$$Register;<br class="">    Label done;<br class="">    __ cmpl(Rp, Rq);<br class="">    __ jccb(Assembler::less, done);<br class="">    __ xorl(Ry, Ry);<br class="">    __ bind(done);<br class="">  %}</div><div class=""><br class=""></div><div class="">Should be less painful too :-)<br class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Sep 24, 2015, at 8:45 AM, Ian Rogers <<a href="mailto:irogers@google.com" class="">irogers@google.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div class="">Below is a patch to add JIT code generation for Long/Integer.compare. It has been reviewed internally by <a href="mailto:rasbold@google.com" class="">rasbold@google.com</a>. I'd like to open a bug for this, get it reviewed, etc. but I lack a JBS account. I'd appreciate help in getting this reviewed and merged.</div><div class=""><br class=""></div><div class="">Thanks,</div><div class="">Ian Rogers</div><div class=""><br class=""></div><div class="">Support JIT code generation for Long/Integer.compare as intrinsics that fold with branches on their result.<br class=""></div><div class=""><br class=""></div><div class="">Introduce a CmpI3 ideal node mirroring the CmpL3 node, that implements</div><div class="">Integer.compare. Allow this to fold with a CmpI node.  Spot Long/Integer.compare</div><div class="">as CmpL3 and CmpI3 nodes.  Add a CmpI3 implementation for x86-64.  On a</div><div class="">micro-benchmark loop of:</div><div class="">    for (int i = 0; i < x.length; i++) {</div><div class="">      if (compare(x[i], y[i]) < 0) {</div><div class="">        count++;</div><div class="">      }</div><div class="">    }</div><div class="">Int speed up averages 1.18x, long speed up averages 2.76x, over 30 runs of</div><div class="">arrays sized at 5,000,000 elements. This can be improved with work on</div><div class="">instruction selection.</div><div class="">Raw data:</div><div class="">Int before:  23129us, 99.5% range: 19935us - 26046us</div><div class="">Int after:   19557us, 99.5% range: 16972us - 26072us</div><div class="">Long before: 26935us, 99.5% range: 25776us - 29323us</div><div class="">Long after:   9749us, 99.5% range: 8850us  - 11968us</div><div class=""><br class=""></div></div>
<span id="cid:27A45BA6-984B-46DD-9258-7EBBBAD2B042@us.oracle.com"><cmpi3-jdk9-tdiff.patch></span></div></blockquote></div><br class=""></div></body></html>