src/hotspot/cpu/x86/assembler_x86.cpp
changeset 52992 4bb6e0871bf7
parent 52990 1ed8de9045a7
child 54022 ff399127078a
equal deleted inserted replaced
52991:9e28eff3d40f 52992:4bb6e0871bf7
  3964   int encode = vex_prefix_and_encode(dst->encoding(), 0, src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_38, &attributes);
  3964   int encode = vex_prefix_and_encode(dst->encoding(), 0, src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_38, &attributes);
  3965   emit_int8(0x33);
  3965   emit_int8(0x33);
  3966   emit_int8((unsigned char)(0xC0 | encode));
  3966   emit_int8((unsigned char)(0xC0 | encode));
  3967 }
  3967 }
  3968 
  3968 
       
  3969 void Assembler::pmaddwd(XMMRegister dst, XMMRegister src) {
       
  3970   NOT_LP64(assert(VM_Version::supports_sse2(), ""));
       
  3971   InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ _legacy_mode_bw, /* no_mask_reg */ true, /* uses_vl */ true);
       
  3972   int encode = simd_prefix_and_encode(dst, dst, src, VEX_SIMD_66, VEX_OPCODE_0F, &attributes);
       
  3973   emit_int8((unsigned char)0xF5);
       
  3974   emit_int8((unsigned char)(0xC0 | encode));
       
  3975 }
       
  3976 
       
  3977 void Assembler::vpmaddwd(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) {
       
  3978   assert(vector_len == AVX_128bit ? VM_Version::supports_avx() :
       
  3979     (vector_len == AVX_256bit ? VM_Version::supports_avx2() :
       
  3980     (vector_len == AVX_512bit ? VM_Version::supports_evex() : 0)), "");
       
  3981   InstructionAttr attributes(vector_len, /* rex_w */ false, /* legacy_mode */ _legacy_mode_bw, /* no_mask_reg */ true, /* uses_vl */ true);
       
  3982   int encode = simd_prefix_and_encode(dst, nds, src, VEX_SIMD_66, VEX_OPCODE_0F, &attributes);
       
  3983   emit_int8((unsigned char)0xF5);
       
  3984   emit_int8((unsigned char)(0xC0 | encode));
       
  3985 }
       
  3986 
       
  3987 void Assembler::evpdpwssd(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) {
       
  3988   assert(VM_Version::supports_evex(), "");
       
  3989   assert(VM_Version::supports_vnni(), "must support vnni");
       
  3990   InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ true);
       
  3991   attributes.set_is_evex_instruction();
       
  3992   int encode = vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_38, &attributes);
       
  3993   emit_int8(0x52);
       
  3994   emit_int8((unsigned char)(0xC0 | encode));
       
  3995 }
       
  3996 
  3969 // generic
  3997 // generic
  3970 void Assembler::pop(Register dst) {
  3998 void Assembler::pop(Register dst) {
  3971   int encode = prefix_and_encode(dst->encoding());
  3999   int encode = prefix_and_encode(dst->encoding());
  3972   emit_int8(0x58 | encode);
  4000   emit_int8(0x58 | encode);
  3973 }
  4001 }