Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8142611 | emb-9 | Ed Nevill | P4 | Resolved | Fixed | team |
Testcase test/compiler/runtime/7196199/Test7196199.java fails on some aarch64 HW.
The problem is that at a SafePoint poll the handler only saves the bottom 64 bits of each vector register rather than the full 128 bits.
This problem was reported by felix.yang@linaro.org. Here is his original report.
The testcase passes if MaxVectorSize < 16 or UseLoopSafepoints option is turned off.
After warmup, the test_incrc method failed verification once loop safe point interrupt triggers for the outer loop.
Watching at the JIT code, I find that C2 compiler emit superword instruction, i.e., fadd.4s, which uses the full vector registers(128 bits).
But currently the AArch64 safe point interrupt handler only save/restore a half of each vector register(64 bits), which causes the issue.
The following patch expands the interrupt handler to support wide vector registers, that is, supporting POLL_AT_VECTOR_LOOP.
It is kind of similiar to the way X86 port takes to fix the issue. The testcase passes with the patch.
I am doing a JTReg regression test for the patch, comments and suggestions are welcome.
Thanks.
The problem is that at a SafePoint poll the handler only saves the bottom 64 bits of each vector register rather than the full 128 bits.
This problem was reported by felix.yang@linaro.org. Here is his original report.
The testcase passes if MaxVectorSize < 16 or UseLoopSafepoints option is turned off.
After warmup, the test_incrc method failed verification once loop safe point interrupt triggers for the outer loop.
Watching at the JIT code, I find that C2 compiler emit superword instruction, i.e., fadd.4s, which uses the full vector registers(128 bits).
But currently the AArch64 safe point interrupt handler only save/restore a half of each vector register(64 bits), which causes the issue.
The following patch expands the interrupt handler to support wide vector registers, that is, supporting POLL_AT_VECTOR_LOOP.
It is kind of similiar to the way X86 port takes to fix the issue. The testcase passes with the patch.
I am doing a JTReg regression test for the patch, comments and suggestions are welcome.
Thanks.
- backported by
-
JDK-8142611 aarch64: test/compiler/runtime/7196199/Test7196199.java fails
-
- Resolved
-
- relates to
-
JDK-8150191 [ARM64] save wide vectors only when necessary
-
- Closed
-