< prev index next >
src/hotspot/cpu/x86/assembler_x86.cpp
Print this page
*** 4255,4266 ****
emit_int8(mode & 0xFF);
}
void Assembler::vpshufd(XMMRegister dst, XMMRegister src, int mode, int vector_len) {
assert(vector_len == AVX_128bit? VM_Version::supports_avx() :
! vector_len == AVX_256bit? VM_Version::supports_avx2() :
! 0, "");
NOT_LP64(assert(VM_Version::supports_sse2(), ""));
InstructionAttr attributes(vector_len, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ true);
int encode = simd_prefix_and_encode(dst, xnoreg, src, VEX_SIMD_66, VEX_OPCODE_0F, &attributes);
emit_int8(0x70);
emit_int8((unsigned char)(0xC0 | encode));
--- 4255,4266 ----
emit_int8(mode & 0xFF);
}
void Assembler::vpshufd(XMMRegister dst, XMMRegister src, int mode, int vector_len) {
assert(vector_len == AVX_128bit? VM_Version::supports_avx() :
! (vector_len == AVX_256bit? VM_Version::supports_avx2() :
! (vector_len == AVX_512bit? VM_Version::supports_evex() : 0)), "");
NOT_LP64(assert(VM_Version::supports_sse2(), ""));
InstructionAttr attributes(vector_len, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ true);
int encode = simd_prefix_and_encode(dst, xnoreg, src, VEX_SIMD_66, VEX_OPCODE_0F, &attributes);
emit_int8(0x70);
emit_int8((unsigned char)(0xC0 | encode));
*** 4735,4744 ****
--- 4735,4774 ----
int encode = prefix_and_encode(dst->encoding());
emit_int8((unsigned char)0xD3);
emit_int8((unsigned char)(0xE8 | encode));
}
+ void Assembler::shldl(Register dst, Register src) {
+ int encode = prefix_and_encode(src->encoding(), dst->encoding());
+ emit_int8(0x0F);
+ emit_int8((unsigned char)0xA5);
+ emit_int8((unsigned char)(0xC0 | encode));
+ }
+
+ void Assembler::shldl(Register dst, Register src, int8_t imm8) {
+ int encode = prefix_and_encode(src->encoding(), dst->encoding());
+ emit_int8(0x0F);
+ emit_int8((unsigned char)0xA4);
+ emit_int8((unsigned char)(0xC0 | encode));
+ emit_int8(imm8);
+ }
+
+ void Assembler::shrdl(Register dst, Register src) {
+ int encode = prefix_and_encode(src->encoding(), dst->encoding());
+ emit_int8(0x0F);
+ emit_int8((unsigned char)0xAD);
+ emit_int8((unsigned char)(0xC0 | encode));
+ }
+
+ void Assembler::shrdl(Register dst, Register src, int8_t imm8) {
+ int encode = prefix_and_encode(src->encoding(), dst->encoding());
+ emit_int8(0x0F);
+ emit_int8((unsigned char)0xAC);
+ emit_int8((unsigned char)(0xC0 | encode));
+ emit_int8(imm8);
+ }
+
// copies a single word from [esi] to [edi]
void Assembler::smovl() {
emit_int8((unsigned char)0xA5);
}
*** 6511,6520 ****
--- 6541,6567 ----
int encode = vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F, &attributes);
emit_int8((unsigned char)0xDB);
emit_int8((unsigned char)(0xC0 | encode));
}
+ void Assembler::vpshldvd(XMMRegister dst, XMMRegister src, XMMRegister shift, int vector_len) {
+ assert(UseVBMI2, "requires vbmi2");
+ InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ true);
+ attributes.set_is_evex_instruction();
+ int encode = vex_prefix_and_encode(dst->encoding(), src->encoding(), shift->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_38, &attributes);
+ emit_int8(0x71);
+ emit_int8((unsigned char)(0xC0 | encode));
+ }
+
+ void Assembler::vpshrdvd(XMMRegister dst, XMMRegister src, XMMRegister shift, int vector_len) {
+ assert(UseVBMI2, "requires vbmi2");
+ InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ true);
+ attributes.set_is_evex_instruction();
+ int encode = vex_prefix_and_encode(dst->encoding(), src->encoding(), shift->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_38, &attributes);
+ emit_int8(0x73);
+ emit_int8((unsigned char)(0xC0 | encode));
+ }
void Assembler::pandn(XMMRegister dst, XMMRegister src) {
NOT_LP64(assert(VM_Version::supports_sse2(), ""));
InstructionAttr attributes(AVX_128bit, /* vex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ true);
attributes.set_rex_vex_w_reverted();
*** 8107,8136 ****
emit_int8(0x0F);
emit_int8((unsigned char)0x95);
emit_int8((unsigned char)(0xE0 | dst->encoding()));
}
- void Assembler::shldl(Register dst, Register src) {
- emit_int8(0x0F);
- emit_int8((unsigned char)0xA5);
- emit_int8((unsigned char)(0xC0 | src->encoding() << 3 | dst->encoding()));
- }
-
- // 0F A4 / r ib
- void Assembler::shldl(Register dst, Register src, int8_t imm8) {
- emit_int8(0x0F);
- emit_int8((unsigned char)0xA4);
- emit_int8((unsigned char)(0xC0 | src->encoding() << 3 | dst->encoding()));
- emit_int8(imm8);
- }
-
- void Assembler::shrdl(Register dst, Register src) {
- emit_int8(0x0F);
- emit_int8((unsigned char)0xAD);
- emit_int8((unsigned char)(0xC0 | src->encoding() << 3 | dst->encoding()));
- }
-
#else // LP64
void Assembler::set_byte_if_not_zero(Register dst) {
int enc = prefix_and_encode(dst->encoding(), true);
emit_int8(0x0F);
--- 8154,8163 ----
< prev index next >