Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
8254351: Minimal VM build fails with undeclared identifier 'MaxVector…
…Size' after JDK-8252847

Reviewed-by: kvn
  • Loading branch information
DamonFool committed Oct 11, 2020
1 parent cc52358 commit d43f141
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 12 deletions.
24 changes: 12 additions & 12 deletions src/hotspot/cpu/x86/macroAssembler_x86.hpp
Expand Up @@ -1037,18 +1037,6 @@ class MacroAssembler: public Assembler {
Register rax, Register rcx, Register rdx, Register tmp);
#endif

#ifdef _LP64
void arraycopy_avx3_special_cases(XMMRegister xmm, KRegister mask, Register from,
Register to, Register count, int shift,
Register index, Register temp,
bool use64byteVector, Label& L_entry, Label& L_exit);

void arraycopy_avx3_special_cases_conjoint(XMMRegister xmm, KRegister mask, Register from,
Register to, Register start_index, Register end_index,
Register count, int shift, Register temp,
bool use64byteVector, Label& L_entry, Label& L_exit);
#endif

private:

// these are private because users should be doing movflt/movdbl
Expand Down Expand Up @@ -1738,6 +1726,17 @@ class MacroAssembler: public Assembler {
void cache_wb(Address line);
void cache_wbsync(bool is_pre);

#if COMPILER2_OR_JVMCI
void arraycopy_avx3_special_cases(XMMRegister xmm, KRegister mask, Register from,
Register to, Register count, int shift,
Register index, Register temp,
bool use64byteVector, Label& L_entry, Label& L_exit);

void arraycopy_avx3_special_cases_conjoint(XMMRegister xmm, KRegister mask, Register from,
Register to, Register start_index, Register end_index,
Register count, int shift, Register temp,
bool use64byteVector, Label& L_entry, Label& L_exit);

void copy64_masked_avx(Register dst, Register src, XMMRegister xmm,
KRegister mask, Register length, Register index,
Register temp, int shift = Address::times_1, int offset = 0,
Expand All @@ -1753,6 +1752,7 @@ class MacroAssembler: public Assembler {
void copy64_avx(Register dst, Register src, Register index, XMMRegister xmm,
bool conjoint, int shift = Address::times_1, int offset = 0,
bool use64byteVector = false);
#endif // COMPILER2_OR_JVMCI

#endif // _LP64

Expand Down
4 changes: 4 additions & 0 deletions src/hotspot/cpu/x86/macroAssembler_x86_arrayCopy_avx3.cpp
Expand Up @@ -37,6 +37,8 @@

#ifdef _LP64

#if COMPILER2_OR_JVMCI

void MacroAssembler::arraycopy_avx3_special_cases(XMMRegister xmm, KRegister mask, Register from,
Register to, Register count, int shift,
Register index, Register temp,
Expand Down Expand Up @@ -246,4 +248,6 @@ void MacroAssembler::copy64_avx(Register dst, Register src, Register index, XMMR
}
}

#endif // COMPILER2_OR_JVMCI

#endif
18 changes: 18 additions & 0 deletions src/hotspot/cpu/x86/stubGenerator_x86_64.cpp
Expand Up @@ -1292,6 +1292,7 @@ class StubGenerator: public StubCodeGenerator {
}
}

#if COMPILER2_OR_JVMCI
// Note: Following rules apply to AVX3 optimized arraycopy stubs:-
// - If target supports AVX3 features (BW+VL+F) then implementation uses 32 byte vectors (YMMs)
// for both special cases (various small block sizes) and aligned copy loop. This is the
Expand Down Expand Up @@ -1695,6 +1696,7 @@ class StubGenerator: public StubCodeGenerator {
__ ret(0);
return start;
}
#endif // COMPILER2_OR_JVMCI


// Arguments:
Expand All @@ -1717,10 +1719,12 @@ class StubGenerator: public StubCodeGenerator {
// used by generate_conjoint_byte_copy().
//
address generate_disjoint_byte_copy(bool aligned, address* entry, const char *name) {
#if COMPILER2_OR_JVMCI
if (VM_Version::supports_avx512vlbw() && MaxVectorSize >= 32) {
return generate_disjoint_copy_avx3_masked(entry, "jbyte_disjoint_arraycopy_avx3", 0,
aligned, false, false);
}
#endif
__ align(CodeEntryAlignment);
StubCodeMark mark(this, "StubRoutines", name);
address start = __ pc();
Expand Down Expand Up @@ -1831,10 +1835,12 @@ class StubGenerator: public StubCodeGenerator {
//
address generate_conjoint_byte_copy(bool aligned, address nooverlap_target,
address* entry, const char *name) {
#if COMPILER2_OR_JVMCI
if (VM_Version::supports_avx512vlbw() && MaxVectorSize >= 32) {
return generate_conjoint_copy_avx3_masked(entry, "jbyte_conjoint_arraycopy_avx3", 0,
nooverlap_target, aligned, false, false);
}
#endif
__ align(CodeEntryAlignment);
StubCodeMark mark(this, "StubRoutines", name);
address start = __ pc();
Expand Down Expand Up @@ -1940,10 +1946,12 @@ class StubGenerator: public StubCodeGenerator {
// used by generate_conjoint_short_copy().
//
address generate_disjoint_short_copy(bool aligned, address *entry, const char *name) {
#if COMPILER2_OR_JVMCI
if (VM_Version::supports_avx512vlbw() && MaxVectorSize >= 32) {
return generate_disjoint_copy_avx3_masked(entry, "jshort_disjoint_arraycopy_avx3", 1,
aligned, false, false);
}
#endif

__ align(CodeEntryAlignment);
StubCodeMark mark(this, "StubRoutines", name);
Expand Down Expand Up @@ -2069,10 +2077,12 @@ class StubGenerator: public StubCodeGenerator {
//
address generate_conjoint_short_copy(bool aligned, address nooverlap_target,
address *entry, const char *name) {
#if COMPILER2_OR_JVMCI
if (VM_Version::supports_avx512vlbw() && MaxVectorSize >= 32) {
return generate_conjoint_copy_avx3_masked(entry, "jshort_conjoint_arraycopy_avx3", 1,
nooverlap_target, aligned, false, false);
}
#endif
__ align(CodeEntryAlignment);
StubCodeMark mark(this, "StubRoutines", name);
address start = __ pc();
Expand Down Expand Up @@ -2171,10 +2181,12 @@ class StubGenerator: public StubCodeGenerator {
//
address generate_disjoint_int_oop_copy(bool aligned, bool is_oop, address* entry,
const char *name, bool dest_uninitialized = false) {
#if COMPILER2_OR_JVMCI
if (VM_Version::supports_avx512vlbw() && MaxVectorSize >= 32) {
return generate_disjoint_copy_avx3_masked(entry, "jint_disjoint_arraycopy_avx3", 2,
aligned, is_oop, dest_uninitialized);
}
#endif

__ align(CodeEntryAlignment);
StubCodeMark mark(this, "StubRoutines", name);
Expand Down Expand Up @@ -2280,10 +2292,12 @@ class StubGenerator: public StubCodeGenerator {
address generate_conjoint_int_oop_copy(bool aligned, bool is_oop, address nooverlap_target,
address *entry, const char *name,
bool dest_uninitialized = false) {
#if COMPILER2_OR_JVMCI
if (VM_Version::supports_avx512vlbw() && MaxVectorSize >= 32) {
return generate_conjoint_copy_avx3_masked(entry, "jint_conjoint_arraycopy_avx3", 2,
nooverlap_target, aligned, is_oop, dest_uninitialized);
}
#endif
__ align(CodeEntryAlignment);
StubCodeMark mark(this, "StubRoutines", name);
address start = __ pc();
Expand Down Expand Up @@ -2391,10 +2405,12 @@ class StubGenerator: public StubCodeGenerator {
//
address generate_disjoint_long_oop_copy(bool aligned, bool is_oop, address *entry,
const char *name, bool dest_uninitialized = false) {
#if COMPILER2_OR_JVMCI
if (VM_Version::supports_avx512vlbw() && MaxVectorSize >= 32) {
return generate_disjoint_copy_avx3_masked(entry, "jlong_disjoint_arraycopy_avx3", 3,
aligned, is_oop, dest_uninitialized);
}
#endif
__ align(CodeEntryAlignment);
StubCodeMark mark(this, "StubRoutines", name);
address start = __ pc();
Expand Down Expand Up @@ -2499,10 +2515,12 @@ class StubGenerator: public StubCodeGenerator {
address generate_conjoint_long_oop_copy(bool aligned, bool is_oop,
address nooverlap_target, address *entry,
const char *name, bool dest_uninitialized = false) {
#if COMPILER2_OR_JVMCI
if (VM_Version::supports_avx512vlbw() && MaxVectorSize >= 32) {
return generate_conjoint_copy_avx3_masked(entry, "jlong_conjoint_arraycopy_avx3", 3,
nooverlap_target, aligned, is_oop, dest_uninitialized);
}
#endif
__ align(CodeEntryAlignment);
StubCodeMark mark(this, "StubRoutines", name);
address start = __ pc();
Expand Down

1 comment on commit d43f141

@bridgekeeper
Copy link

@bridgekeeper bridgekeeper bot commented on d43f141 Oct 11, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.