@@ -1931,14 +1931,14 @@ void Assembler::vcvtdq2pd(XMMRegister dst, XMMRegister src, int vector_len) {
19311931}
19321932
19331933void Assembler::vcvtps2ph(XMMRegister dst, XMMRegister src, int imm8, int vector_len) {
1934- assert(VM_Version::supports_avx512vl () || VM_Version::supports_f16c(), "");
1934+ assert(VM_Version::supports_evex () || VM_Version::supports_f16c(), "");
19351935 InstructionAttr attributes(vector_len, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /*uses_vl */ true);
19361936 int encode = vex_prefix_and_encode(src->encoding(), 0, dst->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_3A, &attributes);
19371937 emit_int24(0x1D, (0xC0 | encode), imm8);
19381938}
19391939
19401940void Assembler::evcvtps2ph(Address dst, KRegister mask, XMMRegister src, int imm8, int vector_len) {
1941- assert(VM_Version::supports_avx512vl (), "");
1941+ assert(VM_Version::supports_evex (), "");
19421942 InstructionMark im(this);
19431943 InstructionAttr attributes(vector_len, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ false, /*uses_vl */ true);
19441944 attributes.set_address_attributes(/* tuple_type */ EVEX_HVM, /* input_size_in_bits */ EVEX_64bit);
@@ -1951,13 +1951,34 @@ void Assembler::evcvtps2ph(Address dst, KRegister mask, XMMRegister src, int imm
19511951 emit_int8(imm8);
19521952}
19531953
1954+ void Assembler::vcvtps2ph(Address dst, XMMRegister src, int imm8, int vector_len) {
1955+ assert(VM_Version::supports_evex() || VM_Version::supports_f16c(), "");
1956+ InstructionMark im(this);
1957+ InstructionAttr attributes(vector_len, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /*uses_vl */ true);
1958+ attributes.set_address_attributes(/* tuple_type */ EVEX_HVM, /* input_size_in_bits */ EVEX_NObit);
1959+ vex_prefix(dst, 0, src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_3A, &attributes);
1960+ emit_int8(0x1D);
1961+ emit_operand(src, dst, 1);
1962+ emit_int8(imm8);
1963+ }
1964+
19541965void Assembler::vcvtph2ps(XMMRegister dst, XMMRegister src, int vector_len) {
1955- assert(VM_Version::supports_avx512vl () || VM_Version::supports_f16c(), "");
1966+ assert(VM_Version::supports_evex () || VM_Version::supports_f16c(), "");
19561967 InstructionAttr attributes(vector_len, /* rex_w */ false, /* legacy_mode */false, /* no_mask_reg */ true, /* uses_vl */ true);
19571968 int encode = vex_prefix_and_encode(dst->encoding(), 0, src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_38, &attributes);
19581969 emit_int16(0x13, (0xC0 | encode));
19591970}
19601971
1972+ void Assembler::vcvtph2ps(XMMRegister dst, Address src, int vector_len) {
1973+ assert(VM_Version::supports_evex() || VM_Version::supports_f16c(), "");
1974+ InstructionMark im(this);
1975+ InstructionAttr attributes(vector_len, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ false, /*uses_vl */ true);
1976+ attributes.set_address_attributes(/* tuple_type */ EVEX_HVM, /* input_size_in_bits */ EVEX_NObit);
1977+ vex_prefix(src, 0, dst->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_38, &attributes);
1978+ emit_int8(0x13);
1979+ emit_operand(dst, src, 0);
1980+ }
1981+
19611982void Assembler::cvtdq2ps(XMMRegister dst, XMMRegister src) {
19621983 NOT_LP64(assert(VM_Version::supports_sse2(), ""));
19631984 InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ true);
0 commit comments