@@ -2589,6 +2589,38 @@ void Assembler::evmovdqub(XMMRegister dst, KRegister mask, Address src, int vect
25892589 emit_operand (dst, src);
25902590}
25912591
2592+ void Assembler::evmovdqu (XMMRegister dst, KRegister mask, Address src, int vector_len, int type) {
2593+ assert (VM_Version::supports_avx512vlbw (), " " );
2594+ InstructionMark im (this );
2595+ bool wide = type == T_SHORT || type == T_LONG || type == T_CHAR;
2596+ bool bwinstr = type == T_BYTE || type == T_SHORT || type == T_CHAR;
2597+ InstructionAttr attributes (vector_len, /* vex_w */ wide, /* legacy_mode */ false , /* no_mask_reg */ false , /* uses_vl */ true );
2598+ attributes.set_address_attributes (/* tuple_type */ EVEX_FVM, /* input_size_in_bits */ EVEX_NObit);
2599+ attributes.set_embedded_opmask_register_specifier (mask);
2600+ attributes.set_is_evex_instruction ();
2601+ int prefix = bwinstr ? VEX_SIMD_F2 : VEX_SIMD_F3;
2602+ vex_prefix (src, 0 , dst->encoding (), (Assembler::VexSimdPrefix)prefix, VEX_OPCODE_0F, &attributes);
2603+ emit_int8 (0x6F );
2604+ emit_operand (dst, src);
2605+ }
2606+
2607+ void Assembler::evmovdqu (Address dst, KRegister mask, XMMRegister src, int vector_len, int type) {
2608+ assert (VM_Version::supports_avx512vlbw (), " " );
2609+ assert (src != xnoreg, " sanity" );
2610+ InstructionMark im (this );
2611+ bool wide = type == T_SHORT || type == T_LONG || type == T_CHAR;
2612+ bool bwinstr = type == T_BYTE || type == T_SHORT || type == T_CHAR;
2613+ InstructionAttr attributes (vector_len, /* vex_w */ wide, /* legacy_mode */ false , /* no_mask_reg */ false , /* uses_vl */ true );
2614+ attributes.set_address_attributes (/* tuple_type */ EVEX_FVM, /* input_size_in_bits */ EVEX_NObit);
2615+ attributes.reset_is_clear_context ();
2616+ attributes.set_embedded_opmask_register_specifier (mask);
2617+ attributes.set_is_evex_instruction ();
2618+ int prefix = bwinstr ? VEX_SIMD_F2 : VEX_SIMD_F3;
2619+ vex_prefix (dst, 0 , src->encoding (), (Assembler::VexSimdPrefix)prefix, VEX_OPCODE_0F, &attributes);
2620+ emit_int8 (0x7F );
2621+ emit_operand (src, dst);
2622+ }
2623+
25922624void Assembler::evmovdquw (XMMRegister dst, Address src, int vector_len) {
25932625 assert (VM_Version::supports_evex (), " " );
25942626 InstructionMark im (this );
@@ -7803,6 +7835,13 @@ void Assembler::shlxq(Register dst, Register src1, Register src2) {
78037835 emit_int16 ((unsigned char )0xF7 , (0xC0 | encode));
78047836}
78057837
7838+ void Assembler::shrxq (Register dst, Register src1, Register src2) {
7839+ assert (VM_Version::supports_bmi2 (), " " );
7840+ InstructionAttr attributes (AVX_128bit, /* vex_w */ true , /* legacy_mode */ true , /* no_mask_reg */ true , /* uses_vl */ true );
7841+ int encode = vex_prefix_and_encode (dst->encoding (), src2->encoding (), src1->encoding (), VEX_SIMD_F2, VEX_OPCODE_0F_38, &attributes);
7842+ emit_int16 ((unsigned char )0xF7 , (0xC0 | encode));
7843+ }
7844+
78067845#ifndef _LP64
78077846
78087847void Assembler::incl (Register dst) {
0 commit comments