@@ -3472,22 +3472,52 @@ void Assembler::vmovdqu(XMMRegister dst, XMMRegister src) {
34723472 emit_int16(0x6F, (0xC0 | encode));
34733473}
34743474
3475- void Assembler::vmovw (XMMRegister dst, Register src) {
3475+ void Assembler::evmovw (XMMRegister dst, Register src) {
34763476 assert(VM_Version::supports_avx512_fp16(), "requires AVX512-FP16");
34773477 InstructionAttr attributes(AVX_128bit, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
34783478 attributes.set_is_evex_instruction();
34793479 int encode = vex_prefix_and_encode(dst->encoding(), 0, src->encoding(), VEX_SIMD_66, VEX_OPCODE_MAP5, &attributes, true);
34803480 emit_int16(0x6E, (0xC0 | encode));
34813481}
34823482
3483- void Assembler::vmovw (Register dst, XMMRegister src) {
3483+ void Assembler::evmovw (Register dst, XMMRegister src) {
34843484 assert(VM_Version::supports_avx512_fp16(), "requires AVX512-FP16");
34853485 InstructionAttr attributes(AVX_128bit, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
34863486 attributes.set_is_evex_instruction();
34873487 int encode = vex_prefix_and_encode(src->encoding(), 0, dst->encoding(), VEX_SIMD_66, VEX_OPCODE_MAP5, &attributes, true);
34883488 emit_int16(0x7E, (0xC0 | encode));
34893489}
34903490
3491+ void Assembler::evmovw(XMMRegister dst, Address src) {
3492+ assert(VM_Version::supports_avx10_2(), "");
3493+ InstructionMark im(this);
3494+ InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
3495+ attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_16bit);
3496+ attributes.set_is_evex_instruction();
3497+ vex_prefix(src, 0, dst->encoding(), VEX_SIMD_F3, VEX_OPCODE_MAP5, &attributes);
3498+ emit_int8(0x6E);
3499+ emit_operand(dst, src, 0);
3500+ }
3501+
3502+ void Assembler::evmovw(Address dst, XMMRegister src) {
3503+ assert(VM_Version::supports_avx10_2(), "");
3504+ InstructionMark im(this);
3505+ InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
3506+ attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_16bit);
3507+ attributes.set_is_evex_instruction();
3508+ vex_prefix(dst, 0, src->encoding(), VEX_SIMD_F3, VEX_OPCODE_MAP5, &attributes);
3509+ emit_int8(0x7E);
3510+ emit_operand(src, dst, 0);
3511+ }
3512+
3513+ void Assembler::evmovw(XMMRegister dst, XMMRegister src) {
3514+ assert(VM_Version::supports_avx10_2(), "");
3515+ InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
3516+ attributes.set_is_evex_instruction();
3517+ int encode = vex_prefix_and_encode(dst->encoding(), 0, src->encoding(), VEX_SIMD_F3, VEX_OPCODE_MAP5, &attributes);
3518+ emit_int16(0x6E, (0xC0 | encode));
3519+ }
3520+
34913521void Assembler::vmovdqu(XMMRegister dst, Address src) {
34923522 assert(UseAVX > 0, "");
34933523 InstructionMark im(this);
@@ -7310,6 +7340,42 @@ void Assembler::etzcntq(Register dst, Address src, bool no_flags) {
73107340 emit_operand(dst, src, 0);
73117341}
73127342
7343+ void Assembler::evucomish(XMMRegister dst, Address src) {
7344+ InstructionMark im(this);
7345+ InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
7346+ attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_16bit);
7347+ attributes.set_is_evex_instruction();
7348+ vex_prefix(src, 0, dst->encoding(), VEX_SIMD_NONE, VEX_OPCODE_MAP5, &attributes);
7349+ emit_int8(0x2E);
7350+ emit_operand(dst, src, 0);
7351+ }
7352+
7353+ void Assembler::evucomish(XMMRegister dst, XMMRegister src) {
7354+ InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
7355+ attributes.set_is_evex_instruction();
7356+ int encode = vex_prefix_and_encode(dst->encoding(), 0, src->encoding(), VEX_SIMD_NONE, VEX_OPCODE_MAP5, &attributes);
7357+ emit_int16(0x2E, (0xC0 | encode));
7358+ }
7359+
7360+ void Assembler::evucomxsh(XMMRegister dst, Address src) {
7361+ assert(VM_Version::supports_avx10_2(), "");
7362+ InstructionMark im(this);
7363+ InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
7364+ attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_16bit);
7365+ attributes.set_is_evex_instruction();
7366+ vex_prefix(src, 0, dst->encoding(), VEX_SIMD_F3, VEX_OPCODE_MAP5, &attributes);
7367+ emit_int8(0x2E);
7368+ emit_operand(dst, src, 0);
7369+ }
7370+
7371+ void Assembler::evucomxsh(XMMRegister dst, XMMRegister src) {
7372+ assert(VM_Version::supports_avx10_2(), "");
7373+ InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
7374+ attributes.set_is_evex_instruction();
7375+ int encode = vex_prefix_and_encode(dst->encoding(), 0, src->encoding(), VEX_SIMD_F3, VEX_OPCODE_MAP5, &attributes);
7376+ emit_int16(0x2E, (0xC0 | encode));
7377+ }
7378+
73137379void Assembler::ucomisd(XMMRegister dst, Address src) {
73147380 InstructionMark im(this);
73157381 InstructionAttr attributes(AVX_128bit, /* rex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
@@ -7327,7 +7393,7 @@ void Assembler::ucomisd(XMMRegister dst, XMMRegister src) {
73277393 emit_int16(0x2E, (0xC0 | encode));
73287394}
73297395
7330- void Assembler::vucomxsd (XMMRegister dst, Address src) {
7396+ void Assembler::evucomxsd (XMMRegister dst, Address src) {
73317397 assert(VM_Version::supports_avx10_2(), "");
73327398 InstructionMark im(this);
73337399 InstructionAttr attributes(AVX_128bit, /* rex_w */ true, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
@@ -7338,7 +7404,7 @@ void Assembler::vucomxsd(XMMRegister dst, Address src) {
73387404 emit_operand(dst, src, 0);
73397405}
73407406
7341- void Assembler::vucomxsd (XMMRegister dst, XMMRegister src) {
7407+ void Assembler::evucomxsd (XMMRegister dst, XMMRegister src) {
73427408 assert(VM_Version::supports_avx10_2(), "");
73437409 InstructionAttr attributes(AVX_128bit, /* rex_w */ true, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
73447410 attributes.set_is_evex_instruction();
@@ -7361,7 +7427,7 @@ void Assembler::ucomiss(XMMRegister dst, XMMRegister src) {
73617427 emit_int16(0x2E, (0xC0 | encode));
73627428}
73637429
7364- void Assembler::vucomxss (XMMRegister dst, Address src) {
7430+ void Assembler::evucomxss (XMMRegister dst, Address src) {
73657431 assert(VM_Version::supports_avx10_2(), "");
73667432 InstructionMark im(this);
73677433 InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
@@ -7372,7 +7438,7 @@ void Assembler::vucomxss(XMMRegister dst, Address src) {
73727438 emit_operand(dst, src, 0);
73737439}
73747440
7375- void Assembler::vucomxss (XMMRegister dst, XMMRegister src) {
7441+ void Assembler::evucomxss (XMMRegister dst, XMMRegister src) {
73767442 assert(VM_Version::supports_avx10_2(), "");
73777443 InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
73787444 attributes.set_is_evex_instruction();
@@ -8411,30 +8477,6 @@ void Assembler::vmulsh(XMMRegister dst, XMMRegister nds, XMMRegister src) {
84118477 emit_int16(0x59, (0xC0 | encode));
84128478}
84138479
8414- void Assembler::vmaxsh(XMMRegister dst, XMMRegister nds, XMMRegister src) {
8415- assert(VM_Version::supports_avx512_fp16(), "requires AVX512-FP16");
8416- InstructionAttr attributes(AVX_128bit, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
8417- attributes.set_is_evex_instruction();
8418- int encode = vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), VEX_SIMD_F3, VEX_OPCODE_MAP5, &attributes);
8419- emit_int16(0x5F, (0xC0 | encode));
8420- }
8421-
8422- void Assembler::eminmaxsh(XMMRegister dst, XMMRegister nds, XMMRegister src, int imm8) {
8423- assert(VM_Version::supports_avx10_2(), "");
8424- InstructionAttr attributes(AVX_128bit, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
8425- attributes.set_is_evex_instruction();
8426- int encode = vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), VEX_SIMD_NONE, VEX_OPCODE_0F_3A, &attributes);
8427- emit_int24(0x53, (0xC0 | encode), imm8);
8428- }
8429-
8430- void Assembler::vminsh(XMMRegister dst, XMMRegister nds, XMMRegister src) {
8431- assert(VM_Version::supports_avx512_fp16(), "requires AVX512-FP16");
8432- InstructionAttr attributes(AVX_128bit, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
8433- attributes.set_is_evex_instruction();
8434- int encode = vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), VEX_SIMD_F3, VEX_OPCODE_MAP5, &attributes);
8435- emit_int16(0x5D, (0xC0 | encode));
8436- }
8437-
84388480void Assembler::vsqrtsh(XMMRegister dst, XMMRegister src) {
84398481 assert(VM_Version::supports_avx512_fp16(), "requires AVX512-FP16");
84408482 InstructionAttr attributes(AVX_128bit, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
@@ -13369,48 +13411,38 @@ bool Assembler::is_demotable(bool no_flags, int dst_enc, int nds_enc) {
1336913411 return (!no_flags && dst_enc == nds_enc);
1337013412}
1337113413
13372- void Assembler::vmaxss(XMMRegister dst, XMMRegister nds, XMMRegister src) {
13373- assert(VM_Version::supports_avx(), "");
13374- InstructionAttr attributes(AVX_128bit, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
13375- int encode = vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
13376- emit_int16(0x5F, (0xC0 | encode));
13377- }
13378-
13379- void Assembler::vmaxsd(XMMRegister dst, XMMRegister nds, XMMRegister src) {
13380- assert(VM_Version::supports_avx(), "");
13381- InstructionAttr attributes(AVX_128bit, /* vex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
13382- attributes.set_rex_vex_w_reverted();
13383- int encode = vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
13384- emit_int16(0x5F, (0xC0 | encode));
13385- }
13386-
13387- void Assembler::vminss(XMMRegister dst, XMMRegister nds, XMMRegister src) {
13388- assert(VM_Version::supports_avx(), "");
13389- InstructionAttr attributes(AVX_128bit, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
13390- int encode = vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
13391- emit_int16(0x5D, (0xC0 | encode));
13414+ void Assembler::evminmaxsh(XMMRegister dst, KRegister mask, XMMRegister nds, XMMRegister src, bool merge, int imm8) {
13415+ assert(VM_Version::supports_avx10_2(), "");
13416+ InstructionAttr attributes(AVX_128bit, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ false);
13417+ attributes.set_is_evex_instruction();
13418+ attributes.set_embedded_opmask_register_specifier(mask);
13419+ if (merge) {
13420+ attributes.reset_is_clear_context();
13421+ }
13422+ int encode = vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), VEX_SIMD_NONE, VEX_OPCODE_0F_3A, &attributes);
13423+ emit_int24(0x53, (0xC0 | encode), imm8);
1339213424}
1339313425
13394- void Assembler::eminmaxss (XMMRegister dst, XMMRegister nds, XMMRegister src, int imm8) {
13426+ void Assembler::evminmaxss (XMMRegister dst, KRegister mask, XMMRegister nds, XMMRegister src, bool merge , int imm8) {
1339513427 assert(VM_Version::supports_avx10_2(), "");
13396- InstructionAttr attributes(AVX_128bit, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true , /* uses_vl */ false);
13428+ InstructionAttr attributes(AVX_128bit, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ false , /* uses_vl */ false);
1339713429 attributes.set_is_evex_instruction();
13430+ attributes.set_embedded_opmask_register_specifier(mask);
13431+ if (merge) {
13432+ attributes.reset_is_clear_context();
13433+ }
1339813434 int encode = vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_3A, &attributes);
1339913435 emit_int24(0x53, (0xC0 | encode), imm8);
1340013436}
1340113437
13402- void Assembler::vminsd(XMMRegister dst, XMMRegister nds, XMMRegister src) {
13403- assert(VM_Version::supports_avx(), "");
13404- InstructionAttr attributes(AVX_128bit, /* vex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
13405- attributes.set_rex_vex_w_reverted();
13406- int encode = vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
13407- emit_int16(0x5D, (0xC0 | encode));
13408- }
13409-
13410- void Assembler::eminmaxsd(XMMRegister dst, XMMRegister nds, XMMRegister src, int imm8) {
13438+ void Assembler::evminmaxsd(XMMRegister dst, KRegister mask, XMMRegister nds, XMMRegister src, bool merge, int imm8) {
1341113439 assert(VM_Version::supports_avx10_2(), "");
13412- InstructionAttr attributes(AVX_128bit, /* vex_w */ true, /* legacy_mode */ false, /* no_mask_reg */ true , /* uses_vl */ false);
13440+ InstructionAttr attributes(AVX_128bit, /* vex_w */ true, /* legacy_mode */ false, /* no_mask_reg */ false , /* uses_vl */ false);
1341313441 attributes.set_is_evex_instruction();
13442+ attributes.set_embedded_opmask_register_specifier(mask);
13443+ if (merge) {
13444+ attributes.reset_is_clear_context();
13445+ }
1341413446 int encode = vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_3A, &attributes);
1341513447 emit_int24(0x53, (0xC0 | encode), imm8);
1341613448}
0 commit comments