JDK-8152537 : aarch64: Make use of CBZ and CBNZ when comparing unsigned values with zero
  • Type: Enhancement
  • Component: hotspot
  • Sub-Component: compiler
  • Priority: P4
  • Status: Resolved
  • Resolution: Fixed
  • OS: linux
  • CPU: aarch64
  • Submitted: 2016-03-23
  • Updated: 2021-02-01
  • Resolved: 2016-03-30
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 9 Other
9 b115Fixed openjdk8u292Fixed
Related Reports
Relates :  
Description
For many times I noticed the following C2 JIT code in specJBB2005 when checking array length: 

    311   0x0000007f7cd8b4f8: ldr       w11, [x17,#12]  ;*arraylength
    312                                                 ; - java.lang.String::hashCode@13 (line 1467)
    313                                                 ; implicit exception: dispatches to 0x0000007f7cd8b604
    314   0x0000007f7cd8b4fc: cmp       w11, #0x0
    315   0x0000007f7cd8b500: b.le      0x0000007f7cd8b5e8  ;*ifle
    316                                                 ; - java.lang.String::hashCode@14 (line 1467)
    317
    318   0x0000007f7cd8b504: cmp       w11, #0x0
    319   0x0000007f7cd8b508: b.ls      0x0000007f7cd8b5f0
    320   0x0000007f7cd8b50c: sub       w12, w11, #0x1
    321   0x0000007f7cd8b510: cmp       w12, w11
    322   0x0000007f7cd8b514: b.cs      0x0000007f7cd8b5f0  ;*bipush
    323                                                 ; - java.lang.String::hashCode@33 (line 1471)
    324
    325   0x0000007f7cd8b518: ldrh      w0, [x17,#16]   ;*caload
    326                                                 ; - java.lang.String::hashCode@39 (line 1471)
    327
    328   0x0000007f7cd8b51c: sub       w13, w11, #0x3
    329   0x0000007f7cd8b520: cmp       w12, w13
    330   0x0000007f7cd8b524: orr       w16, wzr, #0x80000000
    331   0x0000007f7cd8b528: lsl       w10, w0, #5
    332   0x0000007f7cd8b52c: csel      w16, w16, w13, lt
    333   0x0000007f7cd8b530: orr       w1, wzr, #0x1
    334   0x0000007f7cd8b534: sub       w14, w10, w0
    335   0x0000007f7cd8b538: cmp       w16, #0x1
    336   0x0000007f7cd8b53c: b.le      0x0000007f7cd8b5a4
    337   0x0000007f7cd8b540: b 0x0000007f7cd8b554

  The following two instructions can be combined into one cbzw instruction:  
    318   0x0000007f7cd8b504: cmp       w11, #0x0
    319   0x0000007f7cd8b508: b.ls      0x0000007f7cd8b5f0