@@ -3585,6 +3585,23 @@ void Assembler::evmovdqub(Address dst, KRegister mask, XMMRegister src, bool mer
35853585 emit_operand(src, dst, 0);
35863586}
35873587
3588+ void Assembler::evmovdquw(XMMRegister dst, XMMRegister src, int vector_len) {
3589+ // Unmasked instruction
3590+ evmovdquw(dst, k0, src, /*merge*/ false, vector_len);
3591+ }
3592+
3593+ void Assembler::evmovdquw(XMMRegister dst, KRegister mask, XMMRegister src, bool merge, int vector_len) {
3594+ assert(vector_len <= AVX_256bit ? VM_Version::supports_avx512vlbw() : VM_Version::supports_avx512bw(), "");
3595+ InstructionAttr attributes(vector_len, /* vex_w */ true, /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ true);
3596+ attributes.set_embedded_opmask_register_specifier(mask);
3597+ attributes.set_is_evex_instruction();
3598+ if (merge) {
3599+ attributes.reset_is_clear_context();
3600+ }
3601+ int encode = vex_prefix_and_encode(dst->encoding(), 0, src->encoding(), VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
3602+ emit_int16(0x6F, (0xC0 | encode));
3603+ }
3604+
35883605void Assembler::evmovdquw(XMMRegister dst, Address src, int vector_len) {
35893606 // Unmasked instruction
35903607 evmovdquw(dst, k0, src, /*merge*/ false, vector_len);
@@ -8711,6 +8728,15 @@ void Assembler::vpmuludq(XMMRegister dst, XMMRegister nds, XMMRegister src, int
87118728 emit_int16((unsigned char)0xF4, (0xC0 | encode));
87128729}
87138730
8731+ void Assembler::vpmuldq(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) {
8732+ assert(vector_len == AVX_128bit ? VM_Version::supports_avx() :
8733+ (vector_len == AVX_256bit ? VM_Version::supports_avx2() : VM_Version::supports_evex()), "");
8734+ InstructionAttr attributes(vector_len, /* vex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ true);
8735+ attributes.set_rex_vex_w_reverted();
8736+ int encode = vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_38, &attributes);
8737+ emit_int16(0x28, (0xC0 | encode));
8738+ }
8739+
87148740void Assembler::vpmullw(XMMRegister dst, XMMRegister nds, Address src, int vector_len) {
87158741 assert(UseAVX > 0, "requires some form of AVX");
87168742 InstructionMark im(this);
@@ -11246,6 +11272,18 @@ void Assembler::evpmullq(XMMRegister dst, KRegister mask, XMMRegister nds, Addre
1124611272 emit_operand(dst, src, 0);
1124711273}
1124811274
11275+ void Assembler::evpmulhw(XMMRegister dst, KRegister mask, XMMRegister nds, XMMRegister src, bool merge, int vector_len) {
11276+ assert(VM_Version::supports_avx512bw() && (vector_len == AVX_512bit || VM_Version::supports_avx512vl()), "");
11277+ InstructionAttr attributes(vector_len, /* vex_w */ false,/* legacy_mode */ false, /* no_mask_reg */ false,/* uses_vl */ true);
11278+ attributes.set_is_evex_instruction();
11279+ attributes.set_embedded_opmask_register_specifier(mask);
11280+ if (merge) {
11281+ attributes.reset_is_clear_context();
11282+ }
11283+ int encode = vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F, &attributes);
11284+ emit_int16((unsigned char)0xE5, (0xC0 | encode));
11285+ }
11286+
1124911287void Assembler::evmulps(XMMRegister dst, KRegister mask, XMMRegister nds, XMMRegister src, bool merge, int vector_len) {
1125011288 assert(VM_Version::supports_evex(), "");
1125111289 assert(vector_len == AVX_512bit || VM_Version::supports_avx512vl(), "");
@@ -16914,3 +16952,28 @@ void Assembler::evpermt2b(XMMRegister dst, XMMRegister nds, XMMRegister src, int
1691416952 int encode = vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_38, &attributes);
1691516953 emit_int16(0x7D, (0xC0 | encode));
1691616954}
16955+
16956+ void Assembler::evpermt2w(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) {
16957+ assert(vector_len <= AVX_256bit ? VM_Version::supports_avx512vlbw() : VM_Version::supports_avx512bw(), "");
16958+ InstructionAttr attributes(vector_len, /* vex_w */ true, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ true);
16959+ attributes.set_is_evex_instruction();
16960+ int encode = vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_38, &attributes);
16961+ emit_int16(0x7D, (0xC0 | encode));
16962+ }
16963+
16964+ void Assembler::evpermt2d(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) {
16965+ assert(VM_Version::supports_evex() && (vector_len == Assembler::AVX_512bit || VM_Version::supports_avx512vl()), "");
16966+ InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ true);
16967+ attributes.set_is_evex_instruction();
16968+ int encode = vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_38, &attributes);
16969+ emit_int16(0x7E, (0xC0 | encode));
16970+ }
16971+
16972+ void Assembler::evpermt2q(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) {
16973+ assert(VM_Version::supports_evex() && (vector_len == Assembler::AVX_512bit || VM_Version::supports_avx512vl()), "");
16974+ InstructionAttr attributes(vector_len, /* vex_w */ true, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ true);
16975+ attributes.set_is_evex_instruction();
16976+ int encode = vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_38, &attributes);
16977+ emit_int16(0x7E, (0xC0 | encode));
16978+ }
16979+
0 commit comments