RFR: 8152537 : aarch64: Make use of CBZ and CBNZ when comparing unsigned values with zero
Hi, Please review webrev: http://cr.openjdk.java.net/~fyang/8152537/webrev.00 JIRA issue: https://bugs.openjdk.java.net/browse/JDK-8152537 For many times I noticed the following C2 JIT code in specJBB2005 and other benchmarks: 0x0000007f7cd8b4f8: ldr w11, [x17,#12] ;*arraylength ; - java.lang.String::hashCode@13 (line 1467) ; implicit exception: dispatches to 0x0000007f7cd8b604 0x0000007f7cd8b4fc: cmp w11, #0x0 0x0000007f7cd8b500: b.le 0x0000007f7cd8b5e8 ;*ifle ; - java.lang.String::hashCode@14 (line 1467) 0x0000007f7cd8b504: cmp w11, #0x0 0x0000007f7cd8b508: b.ls 0x0000007f7cd8b5f0 0x0000007f7cd8b50c: sub w12, w11, #0x1 0x0000007f7cd8b510: cmp w12, w11 0x0000007f7cd8b514: b.cs 0x0000007f7cd8b5f0 ;*bipush ; - java.lang.String::hashCode@33 (line 1471) 0x0000007f7cd8b518: ldrh w0, [x17,#16] ;*caload ; - java.lang.String::hashCode@39 (line 1471) 0x0000007f7cd8b51c: sub w13, w11, #0x3 0x0000007f7cd8b520: cmp w12, w13 0x0000007f7cd8b524: orr w16, wzr, #0x80000000 0x0000007f7cd8b528: lsl w10, w0, #5 0x0000007f7cd8b52c: csel w16, w16, w13, lt 0x0000007f7cd8b530: orr w1, wzr, #0x1 0x0000007f7cd8b534: sub w14, w10, w0 0x0000007f7cd8b538: cmp w16, #0x1 0x0000007f7cd8b53c: b.le 0x0000007f7cd8b5a4 0x0000007f7cd8b540: b 0x0000007f7cd8b554 Patch combines the following two instructions into one cbzw instruction: 0x0000007f7cd8b504: cmp w11, #0x0 0x0000007f7cd8b508: b.ls 0x0000007f7cd8b5f0 Tested with JTreg hotspot, langtools and jdk. Is it OK? Thanks, Felix
On 03/23/2016 02:05 PM, Felix Yang wrote:
Please review webrev: http://cr.openjdk.java.net/~fyang/8152537/webrev.00 JIRA issue: https://bugs.openjdk.java.net/browse/JDK-8152537
That looks fine, thanks. Andrew.
participants (2)
-
Andrew Haley
-
Felix Yang