RFR: 8271078: jdk/incubator/vector/Float128VectorTests.java failed a subtest [v4]
Vladimir Kozlov
kvn at openjdk.java.net
Tue May 17 03:38:47 UTC 2022
On Mon, 16 May 2022 20:10:29 GMT, Dean Long <dlong at openjdk.org> wrote:
>> This test was failing because the safepoint polling stub was only saving the low 8 bytes of XMM16-XMM31. We need to save all 16 bytes by default. I also added "wide" to the boolean parameter name to better reflect what it controls. And I made the asserts in save_live_registers() match what we have in restore_live_registers().
>
> Dean Long has updated the pull request incrementally with one additional commit since the last revision:
>
> Just do full 512-bit memory accesses when -XX:+UseKNLSetting is set
Regarding @sviswa7 question.
The comment in [sharedRuntime_x86_64.cpp#L458](https://github.com/openjdk/jdk/blob/master/src/hotspot/cpu/x86/sharedRuntime_x86_64.cpp#L458) says:
`16 bytes XMM registers are saved by default using fxsave/fxrstor instructions.`
That is why we did not care about saving 128 bit xmm registers before AVX512. Unfortunately `fxsave` saves only `xmm0-xmm15`. So we save `xmm16-xmm31` manually in the code Dean is fixing. But we save only 64-bits before.
What I was surprise that there is no evex instruction to save only 128 bit of `xmm15-31` registers if `avx512vl` is not supported. I see specific asserts regarding that: [macroAssembler_x86.cpp#L2561](https://github.com/openjdk/jdk/blob/master/src/hotspot/cpu/x86/macroAssembler_x86.cpp#L2561)
-------------
PR: https://git.openjdk.java.net/jdk/pull/8690
More information about the hotspot-compiler-dev
mailing list