Integrated: 8256061: RegisterSaver::save_live_registers() omits upper halves of ZMM0-15 registers

Vladimir Ivanov vlivanov at openjdk.java.net
Fri Nov 20 21:19:07 UTC 2020


On Mon, 9 Nov 2020 16:44:23 GMT, Vladimir Ivanov <vlivanov at openjdk.org> wrote:

> `YMM0-15` registers are handled specially when CPU registers are saved. They are split in 2 parts (128-bit each) and put in different parts of the frame (see `RegisterSaver::layout` for details). AVX512 adds 16 more vector registers (ZMM16-31) and those are saved full-sized in a separate region. But `RegisterSaver::save_live_registers()` doesn't do anything special for `ZMM0-15` and their upper halves are lost (though there's space reserved for them in the frame).
> 
> The fix adds missing logic which saves upper halves (256-bit in size) of ZMM0-15 registers. Thus every ZMM0-15 register ends up split into 3 parts which are stored independently in the frame.
> 
> Testing (with some other relevant patches):
> - [x] jdk/incubator/vector w/ -XX:+DeoptimizeALot and -XX:UseAVX=3 on AVX512-capable hardware
> - [x] hs-precheckin-comp, hs-tier1, hs-tier2

This pull request has now been integrated.

Changeset: f79e9d45
Author:    Vladimir Ivanov <vlivanov at openjdk.org>
URL:       https://git.openjdk.java.net/jdk/commit/f79e9d45
Stats:     23 lines in 1 file changed: 14 ins; 0 del; 9 mod

8256061: RegisterSaver::save_live_registers() omits upper halves of ZMM0-15 registers

Reviewed-by: kvn

-------------

PR: https://git.openjdk.java.net/jdk/pull/1131


More information about the hotspot-compiler-dev mailing list