Skip to content

Commit 2bbeae3

Browse files
committed
8279668: x86: AVX2 versions of vpxor should be asserted
Reviewed-by: kvn, jiefu
1 parent 3121898 commit 2bbeae3

File tree

2 files changed

+15
-3
lines changed

2 files changed

+15
-3
lines changed

src/hotspot/cpu/x86/assembler_x86.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7594,13 +7594,19 @@ void Assembler::pxor(XMMRegister dst, XMMRegister src) {
75947594

75957595
void Assembler::vpxor(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) {
75967596
assert(UseAVX > 0, "requires some form of AVX");
7597+
assert(vector_len == AVX_128bit ? VM_Version::supports_avx() :
7598+
vector_len == AVX_256bit ? VM_Version::supports_avx2() :
7599+
vector_len == AVX_512bit ? VM_Version::supports_evex() : 0, "");
75977600
InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ true);
75987601
int encode = vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F, &attributes);
75997602
emit_int16((unsigned char)0xEF, (0xC0 | encode));
76007603
}
76017604

76027605
void Assembler::vpxor(XMMRegister dst, XMMRegister nds, Address src, int vector_len) {
76037606
assert(UseAVX > 0, "requires some form of AVX");
7607+
assert(vector_len == AVX_128bit ? VM_Version::supports_avx() :
7608+
vector_len == AVX_256bit ? VM_Version::supports_avx2() :
7609+
vector_len == AVX_512bit ? VM_Version::supports_evex() : 0, "");
76047610
InstructionMark im(this);
76057611
InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ true);
76067612
attributes.set_address_attributes(/* tuple_type */ EVEX_FV, /* input_size_in_bits */ EVEX_32bit);

src/hotspot/cpu/x86/macroAssembler_x86.hpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 1997, 2021, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 1997, 2022, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -1489,8 +1489,14 @@ class MacroAssembler: public Assembler {
14891489
void vpxor(XMMRegister dst, XMMRegister nds, AddressLiteral src, int vector_len, Register scratch_reg = rscratch1);
14901490

14911491
// Simple version for AVX2 256bit vectors
1492-
void vpxor(XMMRegister dst, XMMRegister src) { Assembler::vpxor(dst, dst, src, true); }
1493-
void vpxor(XMMRegister dst, Address src) { Assembler::vpxor(dst, dst, src, true); }
1492+
void vpxor(XMMRegister dst, XMMRegister src) {
1493+
assert(UseAVX >= 2, "Should be at least AVX2");
1494+
Assembler::vpxor(dst, dst, src, AVX_256bit);
1495+
}
1496+
void vpxor(XMMRegister dst, Address src) {
1497+
assert(UseAVX >= 2, "Should be at least AVX2");
1498+
Assembler::vpxor(dst, dst, src, AVX_256bit);
1499+
}
14941500

14951501
void vpermd(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) { Assembler::vpermd(dst, nds, src, vector_len); }
14961502
void vpermd(XMMRegister dst, XMMRegister nds, AddressLiteral src, int vector_len, Register scratch_reg);

0 commit comments

Comments
 (0)