IBM Support

IV82902: JAVA JIT - INCORRECT COMPARISION RESULTS ON X86 CPUS

Subscribe to this APAR

By subscribing, you receive periodic emails alerting you to the status of the APAR, along with a link to the fix after it becomes available. You can track this item individually or track all items by product.

Notify me when this APAR changes.

Notify me when an APAR for this component changes.

APAR status

  • Closed as program error.

Error description

  • Error Message: Incorrect behavior in ICU4J.
    .
    Stack Trace: N/A
    .
    The problem can only occur on X86 (Linux/Windows on AMD or Intel
    CPUs) and we have only seen the problem on Java8. The failing
    test-case did not hit the problem in Java6 or Java7, but we
    believe that the problem is possible but much more difficult to
    encounter then it is in Java8.
    The result of the issue could in theory surface in many ways,
    but incorrect behavior is the most likely result and is how it
    was seen in the ICU4J scenario where the problem was first
    discovered.
    

Local fix

  • The problem can be avoided with almost no performance impact by
    setting/exporting the following environment variable:
    TR_disableNoTestEFlags=1
    

Problem summary

  • The JIT may fail to generate a "test/cmp" instruction when a
    previous instruction sets the right flag register bits to direct
    a "jmp" instruction, but the previous instruction was working
    against a register width that the "jmp" was not meant to react
    against. i.e. A "shr" instruction working against rdi where the
    comparison should have been against a byte (dil). Using the
    flags set by the "shr" might cause the "jmp" instruction to
    behave in a way that the Java code was not intending. A
    "test/cmp" instruction against "dil" is requited in such cases.
    

Problem conclusion

  • The JIT was modified such that the register width is considered
    when determining if a "test/cmp" instruction is needed when
    previous instructions have already set the conditions flags that
    the "test/cmp" instruction would set.
    .
    This APAR will be fixed in the following Java Releases:
       8    SR3       (8.0.3.0)
       6 R1 SR8 FP25  (6.1.8.25)
       6    SR16 FP25 (6.0.16.25)
       7    SR9 FP40  (7.0.9.40)
       7 R1 SR3 FP40  (7.1.3.40)
    .
    Contact your IBM Product's Service Team for these Service
    Refreshes and Fix Packs.
    For those running stand-alone, information about the available
    Service Refreshes and Fix Packs can be found at:
               https://www.ibm.com/developerworks/java/jdk/
    

Temporary fix

Comments

APAR Information

  • APAR number

    IV82902

  • Reported component name

    JIT

  • Reported component ID

    620700124

  • Reported release

    130

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt / Xsystem

  • Submitted date

    2016-03-22

  • Closed date

    2016-03-23

  • Last modified date

    2016-03-31

  • APAR is sysrouted FROM one or more of the following:

  • APAR is sysrouted TO one or more of the following:

Fix information

  • Fixed component name

    JIT

  • Fixed component ID

    620700124

Applicable component levels

  • R130 PSY

       UP

  • R260 PSY

       UP

  • R600 PSY

       UP



Document information

More support for: Runtimes for Java Technology
Just In Time (JIT) Compiler

Software version: 130

Reference #: IV82902

Modified date: 31 March 2016