mirror of
https://github.com/openjdk/jdk.git
synced 2026-04-13 08:30:45 +00:00
8078113: 8011102 changes may cause incorrect results
Replace Vzeroupper instruction in stubs with zeroing only used ymm registers. Reviewed-by: kvn
This commit is contained in:
parent
22425d93ca
commit
51fd716978
@ -6657,7 +6657,7 @@ void MacroAssembler::string_compare(Register str1, Register str2,
|
||||
subl(cnt2, stride2);
|
||||
jccb(Assembler::notZero, COMPARE_WIDE_VECTORS_LOOP);
|
||||
// clean upper bits of YMM registers
|
||||
vzeroupper();
|
||||
vpxor(vec1, vec1);
|
||||
|
||||
// compare wide vectors tail
|
||||
bind(COMPARE_WIDE_TAIL);
|
||||
@ -6672,7 +6672,7 @@ void MacroAssembler::string_compare(Register str1, Register str2,
|
||||
// Identifies the mismatching (higher or lower)16-bytes in the 32-byte vectors.
|
||||
bind(VECTOR_NOT_EQUAL);
|
||||
// clean upper bits of YMM registers
|
||||
vzeroupper();
|
||||
vpxor(vec1, vec1);
|
||||
lea(str1, Address(str1, result, scale));
|
||||
lea(str2, Address(str2, result, scale));
|
||||
jmp(COMPARE_16_CHARS);
|
||||
@ -6931,7 +6931,8 @@ void MacroAssembler::char_arrays_equals(bool is_array_equ, Register ary1, Regist
|
||||
bind(DONE);
|
||||
if (UseAVX >= 2) {
|
||||
// clean upper bits of YMM registers
|
||||
vzeroupper();
|
||||
vpxor(vec1, vec1);
|
||||
vpxor(vec2, vec2);
|
||||
}
|
||||
}
|
||||
|
||||
@ -7065,7 +7066,8 @@ void MacroAssembler::generate_fill(BasicType t, bool aligned,
|
||||
|
||||
BIND(L_check_fill_8_bytes);
|
||||
// clean upper bits of YMM registers
|
||||
vzeroupper();
|
||||
movdl(xtmp, value);
|
||||
pshufd(xtmp, xtmp, 0);
|
||||
} else {
|
||||
// Fill 32-byte chunks
|
||||
pshufd(xtmp, xtmp, 0);
|
||||
@ -7228,7 +7230,11 @@ void MacroAssembler::encode_iso_array(Register src, Register dst, Register len,
|
||||
bind(L_copy_16_chars_exit);
|
||||
if (UseAVX >= 2) {
|
||||
// clean upper bits of YMM registers
|
||||
vzeroupper();
|
||||
vpxor(tmp2Reg, tmp2Reg);
|
||||
vpxor(tmp3Reg, tmp3Reg);
|
||||
vpxor(tmp4Reg, tmp4Reg);
|
||||
movdl(tmp1Reg, tmp5);
|
||||
pshufd(tmp1Reg, tmp1Reg, 0);
|
||||
}
|
||||
subptr(len, 8);
|
||||
jccb(Assembler::greater, L_copy_8_chars_exit);
|
||||
|
||||
@ -835,7 +835,8 @@ class StubGenerator: public StubCodeGenerator {
|
||||
|
||||
if (UseUnalignedLoadStores && (UseAVX >= 2)) {
|
||||
// clean upper bits of YMM registers
|
||||
__ vzeroupper();
|
||||
__ vpxor(xmm0, xmm0);
|
||||
__ vpxor(xmm1, xmm1);
|
||||
}
|
||||
__ addl(qword_count, 8);
|
||||
__ jccb(Assembler::zero, L_exit);
|
||||
|
||||
@ -1352,7 +1352,8 @@ class StubGenerator: public StubCodeGenerator {
|
||||
__ BIND(L_end);
|
||||
if (UseAVX >= 2) {
|
||||
// clean upper bits of YMM registers
|
||||
__ vzeroupper();
|
||||
__ vpxor(xmm0, xmm0);
|
||||
__ vpxor(xmm1, xmm1);
|
||||
}
|
||||
} else {
|
||||
// Copy 32-bytes per iteration
|
||||
@ -1429,7 +1430,8 @@ class StubGenerator: public StubCodeGenerator {
|
||||
__ BIND(L_end);
|
||||
if (UseAVX >= 2) {
|
||||
// clean upper bits of YMM registers
|
||||
__ vzeroupper();
|
||||
__ vpxor(xmm0, xmm0);
|
||||
__ vpxor(xmm1, xmm1);
|
||||
}
|
||||
} else {
|
||||
// Copy 32-bytes per iteration
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user