From c0e500ad996dd7174f6f37481f2da48dc6d98f56 Mon Sep 17 00:00:00 2001 From: Anton Seoane Ampudia Date: Fri, 27 Mar 2026 09:44:37 +0000 Subject: [PATCH] 8379794: C2: UBSAN runtime error: shift exponent 64 is too large for 64-bit type 'long unsigned int' Reviewed-by: rcastanedalo, qamai, dlong --- src/hotspot/cpu/x86/x86.ad | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/hotspot/cpu/x86/x86.ad b/src/hotspot/cpu/x86/x86.ad index d7014141234..eaa88d900c7 100644 --- a/src/hotspot/cpu/x86/x86.ad +++ b/src/hotspot/cpu/x86/x86.ad @@ -23972,8 +23972,12 @@ instruct vmask_gen_imm(kReg dst, immL len, rRegL temp) %{ format %{ "vector_mask_gen $len \t! vector mask generator" %} effect(TEMP temp); ins_encode %{ - __ mov64($temp$$Register, (0xFFFFFFFFFFFFFFFFUL >> (64 -$len$$constant))); - __ kmovql($dst$$KRegister, $temp$$Register); + if ($len$$constant > 0) { + __ mov64($temp$$Register, right_n_bits($len$$constant)); + __ kmovql($dst$$KRegister, $temp$$Register); + } else { + __ kxorql($dst$$KRegister, $dst$$KRegister, $dst$$KRegister); + } %} ins_pipe( pipe_slow ); %}