@@ -8222,6 +8222,14 @@ void Assembler::vmaxsh(XMMRegister dst, XMMRegister nds, XMMRegister src) {
82228222 emit_int16(0x5F, (0xC0 | encode));
82238223}
82248224
8225+ void Assembler::eminmaxsh(XMMRegister dst, XMMRegister nds, XMMRegister src, int imm8) {
8226+ assert(VM_Version::supports_avx10_2(), "");
8227+ InstructionAttr attributes(AVX_128bit, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
8228+ attributes.set_is_evex_instruction();
8229+ int encode = vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), VEX_SIMD_NONE, VEX_OPCODE_0F_3A, &attributes);
8230+ emit_int24(0x53, (0xC0 | encode), imm8);
8231+ }
8232+
82258233void Assembler::vminsh(XMMRegister dst, XMMRegister nds, XMMRegister src) {
82268234 assert(VM_Version::supports_avx512_fp16(), "requires AVX512-FP16");
82278235 InstructionAttr attributes(AVX_128bit, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
@@ -8736,12 +8744,68 @@ void Assembler::vmaxps(XMMRegister dst, XMMRegister nds, XMMRegister src, int ve
87368744 emit_int16(0x5F, (0xC0 | encode));
87378745}
87388746
8747+ void Assembler::evminmaxps(XMMRegister dst, KRegister mask, XMMRegister nds, XMMRegister src, bool merge, int imm8, int vector_len) {
8748+ assert(VM_Version::supports_avx10_2(), "");
8749+ InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ true);
8750+ attributes.set_is_evex_instruction();
8751+ attributes.set_embedded_opmask_register_specifier(mask);
8752+ if (merge) {
8753+ attributes.reset_is_clear_context();
8754+ }
8755+ int encode = vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_3A, &attributes);
8756+ emit_int24(0x52, (0xC0 | encode), imm8);
8757+ }
8758+
8759+ void Assembler::evminmaxps(XMMRegister dst, KRegister mask, XMMRegister nds, Address src, bool merge, int imm8, int vector_len) {
8760+ assert(VM_Version::supports_avx10_2(), "");
8761+ InstructionMark im(this);
8762+ InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ true);
8763+ attributes.set_is_evex_instruction();
8764+ attributes.set_embedded_opmask_register_specifier(mask);
8765+ attributes.set_address_attributes(/* tuple_type */ EVEX_FV, /* input_size_in_bits */ EVEX_NObit);
8766+ if (merge) {
8767+ attributes.reset_is_clear_context();
8768+ }
8769+ vex_prefix(src, nds->encoding(), dst->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_3A, &attributes);
8770+ emit_int8(0x52);
8771+ emit_operand(dst, src, 0);
8772+ emit_int8(imm8);
8773+ }
8774+
87398775void Assembler::maxpd(XMMRegister dst, XMMRegister src) {
87408776 InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ true);
87418777 int encode = simd_prefix_and_encode(dst, xnoreg, src, VEX_SIMD_66, VEX_OPCODE_0F, &attributes);
87428778 emit_int16(0x5F, (0xC0 | encode));
87438779}
87448780
8781+ void Assembler::evminmaxpd(XMMRegister dst, KRegister mask, XMMRegister nds, XMMRegister src, bool merge, int imm8, int vector_len) {
8782+ assert(VM_Version::supports_avx10_2(), "");
8783+ InstructionAttr attributes(vector_len, /* vex_w */ true, /* legacy_mode */ false, /* no_mask_reg */ false,/* uses_vl */ true);
8784+ attributes.set_is_evex_instruction();
8785+ attributes.set_embedded_opmask_register_specifier(mask);
8786+ if (merge) {
8787+ attributes.reset_is_clear_context();
8788+ }
8789+ int encode = vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_3A, &attributes);
8790+ emit_int24(0x52, (0xC0 | encode), imm8);
8791+ }
8792+
8793+ void Assembler::evminmaxpd(XMMRegister dst, KRegister mask, XMMRegister nds, Address src, bool merge, int imm8, int vector_len) {
8794+ assert(VM_Version::supports_avx10_2(), "");
8795+ InstructionMark im(this);
8796+ InstructionAttr attributes(vector_len, /* vex_w */ true, /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ true);
8797+ attributes.set_is_evex_instruction();
8798+ attributes.set_embedded_opmask_register_specifier(mask);
8799+ attributes.set_address_attributes(/* tuple_type */ EVEX_FV, /* input_size_in_bits */ EVEX_NObit);
8800+ if (merge) {
8801+ attributes.reset_is_clear_context();
8802+ }
8803+ vex_prefix(src, nds->encoding(), dst->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_3A, &attributes);
8804+ emit_int8(0x52);
8805+ emit_operand(dst, src, 0);
8806+ emit_int8(imm8);
8807+ }
8808+
87458809void Assembler::vmaxpd(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) {
87468810 assert(vector_len >= AVX_512bit ? VM_Version::supports_evex() : VM_Version::supports_avx(), "");
87478811 InstructionAttr attributes(vector_len, /* vex_w */true, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ true);
@@ -13130,6 +13194,14 @@ void Assembler::vminss(XMMRegister dst, XMMRegister nds, XMMRegister src) {
1313013194 emit_int16(0x5D, (0xC0 | encode));
1313113195}
1313213196
13197+ void Assembler::eminmaxss(XMMRegister dst, XMMRegister nds, XMMRegister src, int imm8) {
13198+ assert(VM_Version::supports_avx10_2(), "");
13199+ InstructionAttr attributes(AVX_128bit, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
13200+ attributes.set_is_evex_instruction();
13201+ int encode = vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_3A, &attributes);
13202+ emit_int24(0x53, (0xC0 | encode), imm8);
13203+ }
13204+
1313313205void Assembler::vminsd(XMMRegister dst, XMMRegister nds, XMMRegister src) {
1313413206 assert(VM_Version::supports_avx(), "");
1313513207 InstructionAttr attributes(AVX_128bit, /* vex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
@@ -13138,6 +13210,14 @@ void Assembler::vminsd(XMMRegister dst, XMMRegister nds, XMMRegister src) {
1313813210 emit_int16(0x5D, (0xC0 | encode));
1313913211}
1314013212
13213+ void Assembler::eminmaxsd(XMMRegister dst, XMMRegister nds, XMMRegister src, int imm8) {
13214+ assert(VM_Version::supports_avx10_2(), "");
13215+ InstructionAttr attributes(AVX_128bit, /* vex_w */ true, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
13216+ attributes.set_is_evex_instruction();
13217+ int encode = vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_3A, &attributes);
13218+ emit_int24(0x53, (0xC0 | encode), imm8);
13219+ }
13220+
1314113221void Assembler::vcmppd(XMMRegister dst, XMMRegister nds, XMMRegister src, int cop, int vector_len) {
1314213222 assert(VM_Version::supports_avx(), "");
1314313223 assert(vector_len <= AVX_256bit, "");
@@ -16506,6 +16586,34 @@ void Assembler::evminph(XMMRegister dst, XMMRegister nds, Address src, int vecto
1650616586 emit_operand(dst, src, 0);
1650716587}
1650816588
16589+ void Assembler::evminmaxph(XMMRegister dst, KRegister mask, XMMRegister nds, XMMRegister src, bool merge, int imm8, int vector_len) {
16590+ assert(VM_Version::supports_avx10_2(), "");
16591+ InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ false,/* uses_vl */ true);
16592+ attributes.set_is_evex_instruction();
16593+ attributes.set_embedded_opmask_register_specifier(mask);
16594+ if (merge) {
16595+ attributes.reset_is_clear_context();
16596+ }
16597+ int encode = vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), VEX_SIMD_NONE, VEX_OPCODE_0F_3A, &attributes);
16598+ emit_int24(0x52, (0xC0 | encode), imm8);
16599+ }
16600+
16601+ void Assembler::evminmaxph(XMMRegister dst, KRegister mask, XMMRegister nds, Address src, bool merge, int imm8, int vector_len) {
16602+ assert(VM_Version::supports_avx10_2(), "");
16603+ InstructionMark im(this);
16604+ InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ true);
16605+ attributes.set_is_evex_instruction();
16606+ attributes.set_embedded_opmask_register_specifier(mask);
16607+ if (merge) {
16608+ attributes.reset_is_clear_context();
16609+ }
16610+ attributes.set_address_attributes(/* tuple_type */ EVEX_FV, /* input_size_in_bits */ EVEX_NObit);
16611+ vex_prefix(src, nds->encoding(), dst->encoding(), VEX_SIMD_NONE, VEX_OPCODE_0F_3A, &attributes);
16612+ emit_int8(0x52);
16613+ emit_operand(dst, src, 0);
16614+ emit_int8(imm8);
16615+ }
16616+
1650916617void Assembler::evmaxph(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) {
1651016618 assert(VM_Version::supports_avx512_fp16(), "requires AVX512-FP16");
1651116619 assert(vector_len == Assembler::AVX_512bit || VM_Version::supports_avx512vl(), "");
0 commit comments