@@ -3144,6 +3144,22 @@ void Assembler::vmovdqu(XMMRegister dst, XMMRegister src) {
31443144 emit_int16(0x6F, (0xC0 | encode));
31453145}
31463146
3147+ void Assembler::vmovw(XMMRegister dst, Register src) {
3148+ assert(VM_Version::supports_avx512_fp16(), "requires AVX512-FP16");
3149+ InstructionAttr attributes(AVX_128bit, false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
3150+ attributes.set_is_evex_instruction();
3151+ int encode = vex_prefix_and_encode(dst->encoding(), 0, src->encoding(), VEX_SIMD_66, VEX_OPCODE_MAP5, &attributes);
3152+ emit_int16(0x6E, (0xC0 | encode));
3153+ }
3154+
3155+ void Assembler::vmovw(Register dst, XMMRegister src) {
3156+ assert(VM_Version::supports_avx512_fp16(), "requires AVX512-FP16");
3157+ InstructionAttr attributes(AVX_128bit, false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
3158+ attributes.set_is_evex_instruction();
3159+ int encode = vex_prefix_and_encode(src->encoding(), 0, dst->encoding(), VEX_SIMD_66, VEX_OPCODE_MAP5, &attributes);
3160+ emit_int16(0x7E, (0xC0 | encode));
3161+ }
3162+
31473163void Assembler::vmovdqu(XMMRegister dst, Address src) {
31483164 assert(UseAVX > 0, "");
31493165 InstructionMark im(this);
@@ -7311,6 +7327,22 @@ void Assembler::vpaddq(XMMRegister dst, XMMRegister nds, Address src, int vector
73117327 emit_operand(dst, src, 0);
73127328}
73137329
7330+ void Assembler::evaddph(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) {
7331+ assert(VM_Version::supports_avx512_fp16(), "requires AVX512-FP16");
7332+ InstructionAttr attributes(vector_len, false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ true);
7333+ attributes.set_is_evex_instruction();
7334+ int encode = vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), VEX_SIMD_NONE, VEX_OPCODE_MAP5, &attributes);
7335+ emit_int16(0x58, (0xC0 | encode));
7336+ }
7337+
7338+ void Assembler::evaddsh(XMMRegister dst, XMMRegister nds, XMMRegister src) {
7339+ assert(VM_Version::supports_avx512_fp16(), "requires AVX512-FP16");
7340+ InstructionAttr attributes(AVX_128bit, false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
7341+ attributes.set_is_evex_instruction();
7342+ int encode = vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), VEX_SIMD_F3, VEX_OPCODE_MAP5, &attributes);
7343+ emit_int16(0x58, (0xC0 | encode));
7344+ }
7345+
73147346void Assembler::psubb(XMMRegister dst, XMMRegister src) {
73157347 NOT_LP64(assert(VM_Version::supports_sse2(), ""));
73167348 InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ _legacy_mode_bw, /* no_mask_reg */ true, /* uses_vl */ true);
@@ -11480,7 +11512,7 @@ void Assembler::evex_prefix(bool vex_r, bool vex_b, bool vex_x, bool evex_r, boo
1148011512 int byte2 = (vex_r ? VEX_R : 0) | (vex_x ? VEX_X : 0) | (vex_b ? VEX_B : 0) | (evex_r ? EVEX_Rb : 0);
1148111513 byte2 = (~byte2) & 0xF0;
1148211514 // confine opc opcode extensions in mm bits to lower two bits
11483- // of form {0F, 0F_38, 0F_3A}
11515+ // of form {0F, 0F_38, 0F_3A, MAP5 }
1148411516 byte2 |= opc;
1148511517
1148611518 // P1: byte 3 as Wvvvv1pp
0 commit comments