<div dir="ltr">Hi,<div><br></div><div>    Please review webrev: <a href="http://cr.openjdk.java.net/~fyang/8152840/webrev.00/">http://cr.openjdk.java.net/~fyang/8152840/webrev.00/</a></div><div>    JIRA issue: <a href="https://bugs.openjdk.java.net/browse/JDK-8152840">https://bugs.openjdk.java.net/browse/JDK-8152840</a></div><div><br></div><div><span style="font-size:12.8px">    Patch improves _unsafe_arraycopy stub by checking the alignment of the src, dest, and count, and call some faster arraycopy stubs (say StubRoutines::_jshort_</span><span style="font-size:12.8px">arraycopy).  </span><span style="font-size:12.8px">About 1%+ performance gain on Spark Terasort benchmark by this improvement.</span></div><div><br style="font-size:12.8px"><span style="font-size:12.8px">    Here is the disassembly of the new stub routine code:</span><br><div><span style="font-size:12.8px">  StubRoutines::unsafe_arraycopy [0x0000007f8c93a000, 0x0000007f8c93a040[ (64 bytes)</span><br style="font-size:12.8px"><span style="font-size:12.8px">   0x0000007f8c93a000: stp       x29, x30, [sp,#-16]!</span><br style="font-size:12.8px"><span style="font-size:12.8px">   0x0000007f8c93a004: mov       x29, sp</span><br style="font-size:12.8px"><span style="font-size:12.8px">   0x0000007f8c93a008: orr       x8, x0, x1</span><br style="font-size:12.8px"><span style="font-size:12.8px">   0x0000007f8c93a00c: orr       x8, x8, x2</span><br style="font-size:12.8px"><span style="font-size:12.8px">   0x0000007f8c93a010: and       x8, x8, #0x7</span><br style="font-size:12.8px"><span style="font-size:12.8px">   0x0000007f8c93a014: cbz       x8, Stub::unsafe_arraycopy+56 0x0000007f8c93a038</span><br style="font-size:12.8px"><span style="font-size:12.8px">   0x0000007f8c93a018: and       x8, x8, #0x3</span><br style="font-size:12.8px"><span style="font-size:12.8px">   0x0000007f8c93a01c: cbz       x8, Stub::unsafe_arraycopy+48 0x0000007f8c93a030</span><br style="font-size:12.8px"><span style="font-size:12.8px">   0x0000007f8c93a020: tbz       w8, #0, Stub::unsafe_arraycopy+40 0x0000007f8c93a028</span><br style="font-size:12.8px"><span style="font-size:12.8px">   0x0000007f8c93a024: b Stub::jbyte_arraycopy+8 0x0000007f8c938d68</span><br style="font-size:12.8px"><span style="font-size:12.8px">   0x0000007f8c93a028: lsr       x2, x2, #1</span><br style="font-size:12.8px"><span style="font-size:12.8px">   0x0000007f8c93a02c: b Stub::jshort_arraycopy+8 0x0000007f8c938fd4</span><br style="font-size:12.8px"><span style="font-size:12.8px">   0x0000007f8c93a030: lsr       x2, x2, #2</span><br style="font-size:12.8px"><span style="font-size:12.8px">   0x0000007f8c93a034: b Stub::jint_arraycopy+8 0x0000007f8c9392fc</span><br style="font-size:12.8px"><span style="font-size:12.8px">   0x0000007f8c93a038: lsr       x2, x2, #3</span><br style="font-size:12.8px"><span style="font-size:12.8px">   0x0000007f8c93a03c: b Stub::arrayof_jlong_arraycopy+</span><span style="font-size:12.8px">8 0x0000007f8c9393d4</span><br></div></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">    </span>Tested with JTreg hotspot & langtools, is it OK?</div><div><span style="font-size:12.8px">    BTW: The _unsafe_arraycopy and _generic_arraycopy stubs</span><span style="font-size:12.8px"> are missing</span><span style="font-size:12.8px"> for jdk8u, I would like to backport them from jdk9 later.</span></div><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">Thanks,</span></div><div><span style="font-size:12.8px">Felix</span></div></div>