|
|
@ -2361,7 +2361,7 @@ void Assembler::movdqa(XMMRegister dst, Address src) {
|
|
|
|
void Assembler::movdqu(XMMRegister dst, Address src) {
|
|
|
|
void Assembler::movdqu(XMMRegister dst, Address src) {
|
|
|
|
NOT_LP64(assert(VM_Version::supports_sse2(), ""));
|
|
|
|
NOT_LP64(assert(VM_Version::supports_sse2(), ""));
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ true);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ true);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_FVM, /* input_size_in_bits */ EVEX_NObit);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_FVM, /* input_size_in_bits */ EVEX_NObit);
|
|
|
|
simd_prefix(dst, xnoreg, src, VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
|
simd_prefix(dst, xnoreg, src, VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
|
emit_int8(0x6F);
|
|
|
|
emit_int8(0x6F);
|
|
|
@ -2398,7 +2398,7 @@ void Assembler::vmovdqu(XMMRegister dst, XMMRegister src) {
|
|
|
|
void Assembler::vmovdqu(XMMRegister dst, Address src) {
|
|
|
|
void Assembler::vmovdqu(XMMRegister dst, Address src) {
|
|
|
|
assert(UseAVX > 0, "");
|
|
|
|
assert(UseAVX > 0, "");
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionAttr attributes(AVX_256bit, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ true);
|
|
|
|
InstructionAttr attributes(AVX_256bit, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ true);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_FVM, /* input_size_in_bits */ EVEX_NObit);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_FVM, /* input_size_in_bits */ EVEX_NObit);
|
|
|
|
vex_prefix(src, 0, dst->encoding(), VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
|
vex_prefix(src, 0, dst->encoding(), VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
|
emit_int8(0x6F);
|
|
|
|
emit_int8(0x6F);
|
|
|
@ -2486,7 +2486,7 @@ void Assembler::evmovdqul(XMMRegister dst, XMMRegister src, int vector_len) {
|
|
|
|
void Assembler::evmovdqul(XMMRegister dst, Address src, int vector_len) {
|
|
|
|
void Assembler::evmovdqul(XMMRegister dst, Address src, int vector_len) {
|
|
|
|
assert(VM_Version::supports_evex(), "");
|
|
|
|
assert(VM_Version::supports_evex(), "");
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ true);
|
|
|
|
InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ false , /* uses_vl */ true);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_FVM, /* input_size_in_bits */ EVEX_NObit);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_FVM, /* input_size_in_bits */ EVEX_NObit);
|
|
|
|
vex_prefix(src, 0, dst->encoding(), VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
|
vex_prefix(src, 0, dst->encoding(), VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
|
emit_int8(0x6F);
|
|
|
|
emit_int8(0x6F);
|
|
|
@ -2515,7 +2515,7 @@ void Assembler::evmovdquq(XMMRegister dst, XMMRegister src, int vector_len) {
|
|
|
|
void Assembler::evmovdquq(XMMRegister dst, Address src, int vector_len) {
|
|
|
|
void Assembler::evmovdquq(XMMRegister dst, Address src, int vector_len) {
|
|
|
|
assert(VM_Version::supports_evex(), "");
|
|
|
|
assert(VM_Version::supports_evex(), "");
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionAttr attributes(vector_len, /* vex_w */ true, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ true);
|
|
|
|
InstructionAttr attributes(vector_len, /* vex_w */ true, /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ true);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_FVM, /* input_size_in_bits */ EVEX_NObit);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_FVM, /* input_size_in_bits */ EVEX_NObit);
|
|
|
|
vex_prefix(src, 0, dst->encoding(), VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
|
vex_prefix(src, 0, dst->encoding(), VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
|
emit_int8(0x6F);
|
|
|
|
emit_int8(0x6F);
|
|
|
@ -2640,7 +2640,7 @@ void Assembler::movsbl(Register dst, Register src) { // movsxb
|
|
|
|
|
|
|
|
|
|
|
|
void Assembler::movsd(XMMRegister dst, XMMRegister src) {
|
|
|
|
void Assembler::movsd(XMMRegister dst, XMMRegister src) {
|
|
|
|
NOT_LP64(assert(VM_Version::supports_sse2(), ""));
|
|
|
|
NOT_LP64(assert(VM_Version::supports_sse2(), ""));
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* rex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* rex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ false);
|
|
|
|
int encode = simd_prefix_and_encode(dst, dst, src, VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
|
|
|
|
int encode = simd_prefix_and_encode(dst, dst, src, VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
|
|
|
|
emit_int8(0x10);
|
|
|
|
emit_int8(0x10);
|
|
|
|
emit_int8((unsigned char)(0xC0 | encode));
|
|
|
|
emit_int8((unsigned char)(0xC0 | encode));
|
|
|
@ -2649,7 +2649,7 @@ void Assembler::movsd(XMMRegister dst, XMMRegister src) {
|
|
|
|
void Assembler::movsd(XMMRegister dst, Address src) {
|
|
|
|
void Assembler::movsd(XMMRegister dst, Address src) {
|
|
|
|
NOT_LP64(assert(VM_Version::supports_sse2(), ""));
|
|
|
|
NOT_LP64(assert(VM_Version::supports_sse2(), ""));
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* rex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* rex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ false);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_64bit);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_64bit);
|
|
|
|
simd_prefix(dst, xnoreg, src, VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
|
|
|
|
simd_prefix(dst, xnoreg, src, VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
|
|
|
|
emit_int8(0x10);
|
|
|
|
emit_int8(0x10);
|
|
|
@ -2668,7 +2668,7 @@ void Assembler::movsd(Address dst, XMMRegister src) {
|
|
|
|
|
|
|
|
|
|
|
|
void Assembler::movss(XMMRegister dst, XMMRegister src) {
|
|
|
|
void Assembler::movss(XMMRegister dst, XMMRegister src) {
|
|
|
|
NOT_LP64(assert(VM_Version::supports_sse(), ""));
|
|
|
|
NOT_LP64(assert(VM_Version::supports_sse(), ""));
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ false);
|
|
|
|
int encode = simd_prefix_and_encode(dst, dst, src, VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
|
int encode = simd_prefix_and_encode(dst, dst, src, VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
|
emit_int8(0x10);
|
|
|
|
emit_int8(0x10);
|
|
|
|
emit_int8((unsigned char)(0xC0 | encode));
|
|
|
|
emit_int8((unsigned char)(0xC0 | encode));
|
|
|
@ -2677,7 +2677,7 @@ void Assembler::movss(XMMRegister dst, XMMRegister src) {
|
|
|
|
void Assembler::movss(XMMRegister dst, Address src) {
|
|
|
|
void Assembler::movss(XMMRegister dst, Address src) {
|
|
|
|
NOT_LP64(assert(VM_Version::supports_sse(), ""));
|
|
|
|
NOT_LP64(assert(VM_Version::supports_sse(), ""));
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ false);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_32bit);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_32bit);
|
|
|
|
simd_prefix(dst, xnoreg, src, VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
|
simd_prefix(dst, xnoreg, src, VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
|
emit_int8(0x10);
|
|
|
|
emit_int8(0x10);
|
|
|
@ -2782,7 +2782,7 @@ void Assembler::mull(Register src) {
|
|
|
|
void Assembler::mulsd(XMMRegister dst, Address src) {
|
|
|
|
void Assembler::mulsd(XMMRegister dst, Address src) {
|
|
|
|
NOT_LP64(assert(VM_Version::supports_sse2(), ""));
|
|
|
|
NOT_LP64(assert(VM_Version::supports_sse2(), ""));
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* rex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* rex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ false);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_64bit);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_64bit);
|
|
|
|
simd_prefix(dst, dst, src, VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
|
|
|
|
simd_prefix(dst, dst, src, VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
|
|
|
|
emit_int8(0x59);
|
|
|
|
emit_int8(0x59);
|
|
|
@ -2791,7 +2791,7 @@ void Assembler::mulsd(XMMRegister dst, Address src) {
|
|
|
|
|
|
|
|
|
|
|
|
void Assembler::mulsd(XMMRegister dst, XMMRegister src) {
|
|
|
|
void Assembler::mulsd(XMMRegister dst, XMMRegister src) {
|
|
|
|
NOT_LP64(assert(VM_Version::supports_sse2(), ""));
|
|
|
|
NOT_LP64(assert(VM_Version::supports_sse2(), ""));
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* rex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* rex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ false);
|
|
|
|
int encode = simd_prefix_and_encode(dst, dst, src, VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
|
|
|
|
int encode = simd_prefix_and_encode(dst, dst, src, VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
|
|
|
|
emit_int8(0x59);
|
|
|
|
emit_int8(0x59);
|
|
|
|
emit_int8((unsigned char)(0xC0 | encode));
|
|
|
|
emit_int8((unsigned char)(0xC0 | encode));
|
|
|
@ -2800,7 +2800,7 @@ void Assembler::mulsd(XMMRegister dst, XMMRegister src) {
|
|
|
|
void Assembler::mulss(XMMRegister dst, Address src) {
|
|
|
|
void Assembler::mulss(XMMRegister dst, Address src) {
|
|
|
|
NOT_LP64(assert(VM_Version::supports_sse(), ""));
|
|
|
|
NOT_LP64(assert(VM_Version::supports_sse(), ""));
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ false);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_32bit);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_32bit);
|
|
|
|
simd_prefix(dst, dst, src, VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
|
simd_prefix(dst, dst, src, VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
|
emit_int8(0x59);
|
|
|
|
emit_int8(0x59);
|
|
|
@ -2809,7 +2809,7 @@ void Assembler::mulss(XMMRegister dst, Address src) {
|
|
|
|
|
|
|
|
|
|
|
|
void Assembler::mulss(XMMRegister dst, XMMRegister src) {
|
|
|
|
void Assembler::mulss(XMMRegister dst, XMMRegister src) {
|
|
|
|
NOT_LP64(assert(VM_Version::supports_sse(), ""));
|
|
|
|
NOT_LP64(assert(VM_Version::supports_sse(), ""));
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ false);
|
|
|
|
int encode = simd_prefix_and_encode(dst, dst, src, VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
|
int encode = simd_prefix_and_encode(dst, dst, src, VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
|
emit_int8(0x59);
|
|
|
|
emit_int8(0x59);
|
|
|
|
emit_int8((unsigned char)(0xC0 | encode));
|
|
|
|
emit_int8((unsigned char)(0xC0 | encode));
|
|
|
@ -3993,7 +3993,7 @@ void Assembler::smovl() {
|
|
|
|
|
|
|
|
|
|
|
|
void Assembler::sqrtsd(XMMRegister dst, XMMRegister src) {
|
|
|
|
void Assembler::sqrtsd(XMMRegister dst, XMMRegister src) {
|
|
|
|
NOT_LP64(assert(VM_Version::supports_sse2(), ""));
|
|
|
|
NOT_LP64(assert(VM_Version::supports_sse2(), ""));
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* rex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* rex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ false);
|
|
|
|
int encode = simd_prefix_and_encode(dst, dst, src, VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
|
|
|
|
int encode = simd_prefix_and_encode(dst, dst, src, VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
|
|
|
|
emit_int8(0x51);
|
|
|
|
emit_int8(0x51);
|
|
|
|
emit_int8((unsigned char)(0xC0 | encode));
|
|
|
|
emit_int8((unsigned char)(0xC0 | encode));
|
|
|
@ -4002,7 +4002,7 @@ void Assembler::sqrtsd(XMMRegister dst, XMMRegister src) {
|
|
|
|
void Assembler::sqrtsd(XMMRegister dst, Address src) {
|
|
|
|
void Assembler::sqrtsd(XMMRegister dst, Address src) {
|
|
|
|
NOT_LP64(assert(VM_Version::supports_sse2(), ""));
|
|
|
|
NOT_LP64(assert(VM_Version::supports_sse2(), ""));
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* rex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* rex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ false);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_64bit);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_64bit);
|
|
|
|
simd_prefix(dst, dst, src, VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
|
|
|
|
simd_prefix(dst, dst, src, VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
|
|
|
|
emit_int8(0x51);
|
|
|
|
emit_int8(0x51);
|
|
|
@ -4011,7 +4011,7 @@ void Assembler::sqrtsd(XMMRegister dst, Address src) {
|
|
|
|
|
|
|
|
|
|
|
|
void Assembler::sqrtss(XMMRegister dst, XMMRegister src) {
|
|
|
|
void Assembler::sqrtss(XMMRegister dst, XMMRegister src) {
|
|
|
|
NOT_LP64(assert(VM_Version::supports_sse(), ""));
|
|
|
|
NOT_LP64(assert(VM_Version::supports_sse(), ""));
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ false);
|
|
|
|
int encode = simd_prefix_and_encode(dst, dst, src, VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
|
int encode = simd_prefix_and_encode(dst, dst, src, VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
|
emit_int8(0x51);
|
|
|
|
emit_int8(0x51);
|
|
|
|
emit_int8((unsigned char)(0xC0 | encode));
|
|
|
|
emit_int8((unsigned char)(0xC0 | encode));
|
|
|
@ -4024,7 +4024,7 @@ void Assembler::std() {
|
|
|
|
void Assembler::sqrtss(XMMRegister dst, Address src) {
|
|
|
|
void Assembler::sqrtss(XMMRegister dst, Address src) {
|
|
|
|
NOT_LP64(assert(VM_Version::supports_sse(), ""));
|
|
|
|
NOT_LP64(assert(VM_Version::supports_sse(), ""));
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ false);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_32bit);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_32bit);
|
|
|
|
simd_prefix(dst, dst, src, VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
|
simd_prefix(dst, dst, src, VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
|
emit_int8(0x51);
|
|
|
|
emit_int8(0x51);
|
|
|
@ -4078,7 +4078,7 @@ void Assembler::subl(Register dst, Register src) {
|
|
|
|
|
|
|
|
|
|
|
|
void Assembler::subsd(XMMRegister dst, XMMRegister src) {
|
|
|
|
void Assembler::subsd(XMMRegister dst, XMMRegister src) {
|
|
|
|
NOT_LP64(assert(VM_Version::supports_sse2(), ""));
|
|
|
|
NOT_LP64(assert(VM_Version::supports_sse2(), ""));
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* rex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* rex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ false);
|
|
|
|
int encode = simd_prefix_and_encode(dst, dst, src, VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
|
|
|
|
int encode = simd_prefix_and_encode(dst, dst, src, VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
|
|
|
|
emit_int8(0x5C);
|
|
|
|
emit_int8(0x5C);
|
|
|
|
emit_int8((unsigned char)(0xC0 | encode));
|
|
|
|
emit_int8((unsigned char)(0xC0 | encode));
|
|
|
@ -4087,7 +4087,7 @@ void Assembler::subsd(XMMRegister dst, XMMRegister src) {
|
|
|
|
void Assembler::subsd(XMMRegister dst, Address src) {
|
|
|
|
void Assembler::subsd(XMMRegister dst, Address src) {
|
|
|
|
NOT_LP64(assert(VM_Version::supports_sse2(), ""));
|
|
|
|
NOT_LP64(assert(VM_Version::supports_sse2(), ""));
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* rex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* rex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ false);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_64bit);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_64bit);
|
|
|
|
simd_prefix(dst, dst, src, VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
|
|
|
|
simd_prefix(dst, dst, src, VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
|
|
|
|
emit_int8(0x5C);
|
|
|
|
emit_int8(0x5C);
|
|
|
@ -4096,7 +4096,7 @@ void Assembler::subsd(XMMRegister dst, Address src) {
|
|
|
|
|
|
|
|
|
|
|
|
void Assembler::subss(XMMRegister dst, XMMRegister src) {
|
|
|
|
void Assembler::subss(XMMRegister dst, XMMRegister src) {
|
|
|
|
NOT_LP64(assert(VM_Version::supports_sse(), ""));
|
|
|
|
NOT_LP64(assert(VM_Version::supports_sse(), ""));
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ false , /* uses_vl */ false);
|
|
|
|
int encode = simd_prefix_and_encode(dst, dst, src, VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
|
int encode = simd_prefix_and_encode(dst, dst, src, VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
|
emit_int8(0x5C);
|
|
|
|
emit_int8(0x5C);
|
|
|
|
emit_int8((unsigned char)(0xC0 | encode));
|
|
|
|
emit_int8((unsigned char)(0xC0 | encode));
|
|
|
@ -4105,7 +4105,7 @@ void Assembler::subss(XMMRegister dst, XMMRegister src) {
|
|
|
|
void Assembler::subss(XMMRegister dst, Address src) {
|
|
|
|
void Assembler::subss(XMMRegister dst, Address src) {
|
|
|
|
NOT_LP64(assert(VM_Version::supports_sse(), ""));
|
|
|
|
NOT_LP64(assert(VM_Version::supports_sse(), ""));
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ false);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_32bit);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_32bit);
|
|
|
|
simd_prefix(dst, dst, src, VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
|
simd_prefix(dst, dst, src, VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
|
emit_int8(0x5C);
|
|
|
|
emit_int8(0x5C);
|
|
|
@ -4293,7 +4293,7 @@ void Assembler::xorb(Register dst, Address src) {
|
|
|
|
void Assembler::vaddsd(XMMRegister dst, XMMRegister nds, Address src) {
|
|
|
|
void Assembler::vaddsd(XMMRegister dst, XMMRegister nds, Address src) {
|
|
|
|
assert(VM_Version::supports_avx(), "");
|
|
|
|
assert(VM_Version::supports_avx(), "");
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* vex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* vex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ false);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_64bit);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_64bit);
|
|
|
|
int nds_enc = nds->is_valid() ? nds->encoding() : 0;
|
|
|
|
int nds_enc = nds->is_valid() ? nds->encoding() : 0;
|
|
|
|
vex_prefix(src, nds_enc, dst->encoding(), VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
|
|
|
|
vex_prefix(src, nds_enc, dst->encoding(), VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
|
|
|
@ -4303,7 +4303,7 @@ void Assembler::vaddsd(XMMRegister dst, XMMRegister nds, Address src) {
|
|
|
|
|
|
|
|
|
|
|
|
void Assembler::vaddsd(XMMRegister dst, XMMRegister nds, XMMRegister src) {
|
|
|
|
void Assembler::vaddsd(XMMRegister dst, XMMRegister nds, XMMRegister src) {
|
|
|
|
assert(VM_Version::supports_avx(), "");
|
|
|
|
assert(VM_Version::supports_avx(), "");
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* vex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* vex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ false);
|
|
|
|
int nds_enc = nds->is_valid() ? nds->encoding() : 0;
|
|
|
|
int nds_enc = nds->is_valid() ? nds->encoding() : 0;
|
|
|
|
int encode = vex_prefix_and_encode(dst->encoding(), nds_enc, src->encoding(), VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
|
|
|
|
int encode = vex_prefix_and_encode(dst->encoding(), nds_enc, src->encoding(), VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
|
|
|
|
emit_int8(0x58);
|
|
|
|
emit_int8(0x58);
|
|
|
@ -4313,7 +4313,7 @@ void Assembler::vaddsd(XMMRegister dst, XMMRegister nds, XMMRegister src) {
|
|
|
|
void Assembler::vaddss(XMMRegister dst, XMMRegister nds, Address src) {
|
|
|
|
void Assembler::vaddss(XMMRegister dst, XMMRegister nds, Address src) {
|
|
|
|
assert(VM_Version::supports_avx(), "");
|
|
|
|
assert(VM_Version::supports_avx(), "");
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ false);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_32bit);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_32bit);
|
|
|
|
int nds_enc = nds->is_valid() ? nds->encoding() : 0;
|
|
|
|
int nds_enc = nds->is_valid() ? nds->encoding() : 0;
|
|
|
|
vex_prefix(src, nds_enc, dst->encoding(), VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
|
vex_prefix(src, nds_enc, dst->encoding(), VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
@ -4323,7 +4323,7 @@ void Assembler::vaddss(XMMRegister dst, XMMRegister nds, Address src) {
|
|
|
|
|
|
|
|
|
|
|
|
void Assembler::vaddss(XMMRegister dst, XMMRegister nds, XMMRegister src) {
|
|
|
|
void Assembler::vaddss(XMMRegister dst, XMMRegister nds, XMMRegister src) {
|
|
|
|
assert(VM_Version::supports_avx(), "");
|
|
|
|
assert(VM_Version::supports_avx(), "");
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ false);
|
|
|
|
int nds_enc = nds->is_valid() ? nds->encoding() : 0;
|
|
|
|
int nds_enc = nds->is_valid() ? nds->encoding() : 0;
|
|
|
|
int encode = vex_prefix_and_encode(dst->encoding(), nds_enc, src->encoding(), VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
|
int encode = vex_prefix_and_encode(dst->encoding(), nds_enc, src->encoding(), VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
|
emit_int8(0x58);
|
|
|
|
emit_int8(0x58);
|
|
|
@ -4333,7 +4333,7 @@ void Assembler::vaddss(XMMRegister dst, XMMRegister nds, XMMRegister src) {
|
|
|
|
void Assembler::vdivsd(XMMRegister dst, XMMRegister nds, Address src) {
|
|
|
|
void Assembler::vdivsd(XMMRegister dst, XMMRegister nds, Address src) {
|
|
|
|
assert(VM_Version::supports_avx(), "");
|
|
|
|
assert(VM_Version::supports_avx(), "");
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* vex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* vex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ false);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_64bit);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_64bit);
|
|
|
|
int nds_enc = nds->is_valid() ? nds->encoding() : 0;
|
|
|
|
int nds_enc = nds->is_valid() ? nds->encoding() : 0;
|
|
|
|
vex_prefix(src, nds_enc, dst->encoding(), VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
|
|
|
|
vex_prefix(src, nds_enc, dst->encoding(), VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
|
|
|
@ -4343,7 +4343,7 @@ void Assembler::vdivsd(XMMRegister dst, XMMRegister nds, Address src) {
|
|
|
|
|
|
|
|
|
|
|
|
void Assembler::vdivsd(XMMRegister dst, XMMRegister nds, XMMRegister src) {
|
|
|
|
void Assembler::vdivsd(XMMRegister dst, XMMRegister nds, XMMRegister src) {
|
|
|
|
assert(VM_Version::supports_avx(), "");
|
|
|
|
assert(VM_Version::supports_avx(), "");
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* vex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* vex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ false);
|
|
|
|
int nds_enc = nds->is_valid() ? nds->encoding() : 0;
|
|
|
|
int nds_enc = nds->is_valid() ? nds->encoding() : 0;
|
|
|
|
int encode = vex_prefix_and_encode(dst->encoding(), nds_enc, src->encoding(), VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
|
|
|
|
int encode = vex_prefix_and_encode(dst->encoding(), nds_enc, src->encoding(), VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
|
|
|
|
emit_int8(0x5E);
|
|
|
|
emit_int8(0x5E);
|
|
|
@ -4353,7 +4353,7 @@ void Assembler::vdivsd(XMMRegister dst, XMMRegister nds, XMMRegister src) {
|
|
|
|
void Assembler::vdivss(XMMRegister dst, XMMRegister nds, Address src) {
|
|
|
|
void Assembler::vdivss(XMMRegister dst, XMMRegister nds, Address src) {
|
|
|
|
assert(VM_Version::supports_avx(), "");
|
|
|
|
assert(VM_Version::supports_avx(), "");
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ false);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_32bit);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_32bit);
|
|
|
|
int nds_enc = nds->is_valid() ? nds->encoding() : 0;
|
|
|
|
int nds_enc = nds->is_valid() ? nds->encoding() : 0;
|
|
|
|
vex_prefix(src, nds_enc, dst->encoding(), VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
|
vex_prefix(src, nds_enc, dst->encoding(), VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
@ -4363,7 +4363,7 @@ void Assembler::vdivss(XMMRegister dst, XMMRegister nds, Address src) {
|
|
|
|
|
|
|
|
|
|
|
|
void Assembler::vdivss(XMMRegister dst, XMMRegister nds, XMMRegister src) {
|
|
|
|
void Assembler::vdivss(XMMRegister dst, XMMRegister nds, XMMRegister src) {
|
|
|
|
assert(VM_Version::supports_avx(), "");
|
|
|
|
assert(VM_Version::supports_avx(), "");
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ false);
|
|
|
|
int nds_enc = nds->is_valid() ? nds->encoding() : 0;
|
|
|
|
int nds_enc = nds->is_valid() ? nds->encoding() : 0;
|
|
|
|
int encode = vex_prefix_and_encode(dst->encoding(), nds_enc, src->encoding(), VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
|
int encode = vex_prefix_and_encode(dst->encoding(), nds_enc, src->encoding(), VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
|
emit_int8(0x5E);
|
|
|
|
emit_int8(0x5E);
|
|
|
@ -4373,7 +4373,7 @@ void Assembler::vdivss(XMMRegister dst, XMMRegister nds, XMMRegister src) {
|
|
|
|
void Assembler::vmulsd(XMMRegister dst, XMMRegister nds, Address src) {
|
|
|
|
void Assembler::vmulsd(XMMRegister dst, XMMRegister nds, Address src) {
|
|
|
|
assert(VM_Version::supports_avx(), "");
|
|
|
|
assert(VM_Version::supports_avx(), "");
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* vex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* vex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ false);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_64bit);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_64bit);
|
|
|
|
int nds_enc = nds->is_valid() ? nds->encoding() : 0;
|
|
|
|
int nds_enc = nds->is_valid() ? nds->encoding() : 0;
|
|
|
|
vex_prefix(src, nds_enc, dst->encoding(), VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
|
|
|
|
vex_prefix(src, nds_enc, dst->encoding(), VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
|
|
|
@ -4383,7 +4383,7 @@ void Assembler::vmulsd(XMMRegister dst, XMMRegister nds, Address src) {
|
|
|
|
|
|
|
|
|
|
|
|
void Assembler::vmulsd(XMMRegister dst, XMMRegister nds, XMMRegister src) {
|
|
|
|
void Assembler::vmulsd(XMMRegister dst, XMMRegister nds, XMMRegister src) {
|
|
|
|
assert(VM_Version::supports_avx(), "");
|
|
|
|
assert(VM_Version::supports_avx(), "");
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* vex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* vex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ false);
|
|
|
|
int nds_enc = nds->is_valid() ? nds->encoding() : 0;
|
|
|
|
int nds_enc = nds->is_valid() ? nds->encoding() : 0;
|
|
|
|
int encode = vex_prefix_and_encode(dst->encoding(), nds_enc, src->encoding(), VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
|
|
|
|
int encode = vex_prefix_and_encode(dst->encoding(), nds_enc, src->encoding(), VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
|
|
|
|
emit_int8(0x59);
|
|
|
|
emit_int8(0x59);
|
|
|
@ -4393,7 +4393,7 @@ void Assembler::vmulsd(XMMRegister dst, XMMRegister nds, XMMRegister src) {
|
|
|
|
void Assembler::vmulss(XMMRegister dst, XMMRegister nds, Address src) {
|
|
|
|
void Assembler::vmulss(XMMRegister dst, XMMRegister nds, Address src) {
|
|
|
|
assert(VM_Version::supports_avx(), "");
|
|
|
|
assert(VM_Version::supports_avx(), "");
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ false);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_32bit);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_32bit);
|
|
|
|
int nds_enc = nds->is_valid() ? nds->encoding() : 0;
|
|
|
|
int nds_enc = nds->is_valid() ? nds->encoding() : 0;
|
|
|
|
vex_prefix(src, nds_enc, dst->encoding(), VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
|
vex_prefix(src, nds_enc, dst->encoding(), VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
@ -4403,7 +4403,7 @@ void Assembler::vmulss(XMMRegister dst, XMMRegister nds, Address src) {
|
|
|
|
|
|
|
|
|
|
|
|
void Assembler::vmulss(XMMRegister dst, XMMRegister nds, XMMRegister src) {
|
|
|
|
void Assembler::vmulss(XMMRegister dst, XMMRegister nds, XMMRegister src) {
|
|
|
|
assert(VM_Version::supports_avx(), "");
|
|
|
|
assert(VM_Version::supports_avx(), "");
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ false);
|
|
|
|
int nds_enc = nds->is_valid() ? nds->encoding() : 0;
|
|
|
|
int nds_enc = nds->is_valid() ? nds->encoding() : 0;
|
|
|
|
int encode = vex_prefix_and_encode(dst->encoding(), nds_enc, src->encoding(), VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
|
int encode = vex_prefix_and_encode(dst->encoding(), nds_enc, src->encoding(), VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
|
emit_int8(0x59);
|
|
|
|
emit_int8(0x59);
|
|
|
@ -4413,7 +4413,7 @@ void Assembler::vmulss(XMMRegister dst, XMMRegister nds, XMMRegister src) {
|
|
|
|
void Assembler::vsubsd(XMMRegister dst, XMMRegister nds, Address src) {
|
|
|
|
void Assembler::vsubsd(XMMRegister dst, XMMRegister nds, Address src) {
|
|
|
|
assert(VM_Version::supports_avx(), "");
|
|
|
|
assert(VM_Version::supports_avx(), "");
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* vex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* vex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ false);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_64bit);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_64bit);
|
|
|
|
int nds_enc = nds->is_valid() ? nds->encoding() : 0;
|
|
|
|
int nds_enc = nds->is_valid() ? nds->encoding() : 0;
|
|
|
|
vex_prefix(src, nds_enc, dst->encoding(), VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
|
|
|
|
vex_prefix(src, nds_enc, dst->encoding(), VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
|
|
|
@ -4423,7 +4423,7 @@ void Assembler::vsubsd(XMMRegister dst, XMMRegister nds, Address src) {
|
|
|
|
|
|
|
|
|
|
|
|
void Assembler::vsubsd(XMMRegister dst, XMMRegister nds, XMMRegister src) {
|
|
|
|
void Assembler::vsubsd(XMMRegister dst, XMMRegister nds, XMMRegister src) {
|
|
|
|
assert(VM_Version::supports_avx(), "");
|
|
|
|
assert(VM_Version::supports_avx(), "");
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* vex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* vex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ false);
|
|
|
|
int nds_enc = nds->is_valid() ? nds->encoding() : 0;
|
|
|
|
int nds_enc = nds->is_valid() ? nds->encoding() : 0;
|
|
|
|
int encode = vex_prefix_and_encode(dst->encoding(), nds_enc, src->encoding(), VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
|
|
|
|
int encode = vex_prefix_and_encode(dst->encoding(), nds_enc, src->encoding(), VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
|
|
|
|
emit_int8(0x5C);
|
|
|
|
emit_int8(0x5C);
|
|
|
@ -4433,7 +4433,7 @@ void Assembler::vsubsd(XMMRegister dst, XMMRegister nds, XMMRegister src) {
|
|
|
|
void Assembler::vsubss(XMMRegister dst, XMMRegister nds, Address src) {
|
|
|
|
void Assembler::vsubss(XMMRegister dst, XMMRegister nds, Address src) {
|
|
|
|
assert(VM_Version::supports_avx(), "");
|
|
|
|
assert(VM_Version::supports_avx(), "");
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ false);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_32bit);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_32bit);
|
|
|
|
int nds_enc = nds->is_valid() ? nds->encoding() : 0;
|
|
|
|
int nds_enc = nds->is_valid() ? nds->encoding() : 0;
|
|
|
|
vex_prefix(src, nds_enc, dst->encoding(), VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
|
vex_prefix(src, nds_enc, dst->encoding(), VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
@ -4443,7 +4443,7 @@ void Assembler::vsubss(XMMRegister dst, XMMRegister nds, Address src) {
|
|
|
|
|
|
|
|
|
|
|
|
void Assembler::vsubss(XMMRegister dst, XMMRegister nds, XMMRegister src) {
|
|
|
|
void Assembler::vsubss(XMMRegister dst, XMMRegister nds, XMMRegister src) {
|
|
|
|
assert(VM_Version::supports_avx(), "");
|
|
|
|
assert(VM_Version::supports_avx(), "");
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
|
|
|
|
InstructionAttr attributes(AVX_128bit, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ false);
|
|
|
|
int nds_enc = nds->is_valid() ? nds->encoding() : 0;
|
|
|
|
int nds_enc = nds->is_valid() ? nds->encoding() : 0;
|
|
|
|
int encode = vex_prefix_and_encode(dst->encoding(), nds_enc, src->encoding(), VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
|
int encode = vex_prefix_and_encode(dst->encoding(), nds_enc, src->encoding(), VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
|
|
|
|
emit_int8(0x5C);
|
|
|
|
emit_int8(0x5C);
|
|
|
@ -5901,7 +5901,7 @@ void Assembler::vpbroadcastw(XMMRegister dst, XMMRegister src) {
|
|
|
|
// duplicate 1-byte integer data from src into 16||32|64 locations in dest : requires AVX512BW and AVX512VL
|
|
|
|
// duplicate 1-byte integer data from src into 16||32|64 locations in dest : requires AVX512BW and AVX512VL
|
|
|
|
void Assembler::evpbroadcastb(XMMRegister dst, XMMRegister src, int vector_len) {
|
|
|
|
void Assembler::evpbroadcastb(XMMRegister dst, XMMRegister src, int vector_len) {
|
|
|
|
assert(VM_Version::supports_evex(), "");
|
|
|
|
assert(VM_Version::supports_evex(), "");
|
|
|
|
InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ true);
|
|
|
|
InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ _legacy_mode_bw, /* no_mask_reg */ true, /* uses_vl */ true);
|
|
|
|
int encode = vex_prefix_and_encode(dst->encoding(), 0, src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_38, &attributes);
|
|
|
|
int encode = vex_prefix_and_encode(dst->encoding(), 0, src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_38, &attributes);
|
|
|
|
emit_int8(0x78);
|
|
|
|
emit_int8(0x78);
|
|
|
|
emit_int8((unsigned char)(0xC0 | encode));
|
|
|
|
emit_int8((unsigned char)(0xC0 | encode));
|
|
|
@ -5911,7 +5911,7 @@ void Assembler::evpbroadcastb(XMMRegister dst, Address src, int vector_len) {
|
|
|
|
assert(VM_Version::supports_evex(), "");
|
|
|
|
assert(VM_Version::supports_evex(), "");
|
|
|
|
assert(dst != xnoreg, "sanity");
|
|
|
|
assert(dst != xnoreg, "sanity");
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ true);
|
|
|
|
InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ _legacy_mode_bw, /* no_mask_reg */ true, /* uses_vl */ true);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_8bit);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_8bit);
|
|
|
|
// swap src<->dst for encoding
|
|
|
|
// swap src<->dst for encoding
|
|
|
|
vex_prefix(src, dst->encoding(), dst->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_38, &attributes);
|
|
|
|
vex_prefix(src, dst->encoding(), dst->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_38, &attributes);
|
|
|
@ -5922,7 +5922,7 @@ void Assembler::evpbroadcastb(XMMRegister dst, Address src, int vector_len) {
|
|
|
|
// duplicate 2-byte integer data from src into 8|16||32 locations in dest : requires AVX512BW and AVX512VL
|
|
|
|
// duplicate 2-byte integer data from src into 8|16||32 locations in dest : requires AVX512BW and AVX512VL
|
|
|
|
void Assembler::evpbroadcastw(XMMRegister dst, XMMRegister src, int vector_len) {
|
|
|
|
void Assembler::evpbroadcastw(XMMRegister dst, XMMRegister src, int vector_len) {
|
|
|
|
assert(VM_Version::supports_evex(), "");
|
|
|
|
assert(VM_Version::supports_evex(), "");
|
|
|
|
InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ true);
|
|
|
|
InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ _legacy_mode_bw, /* no_mask_reg */ true, /* uses_vl */ true);
|
|
|
|
int encode = vex_prefix_and_encode(dst->encoding(), 0, src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_38, &attributes);
|
|
|
|
int encode = vex_prefix_and_encode(dst->encoding(), 0, src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_38, &attributes);
|
|
|
|
emit_int8(0x79);
|
|
|
|
emit_int8(0x79);
|
|
|
|
emit_int8((unsigned char)(0xC0 | encode));
|
|
|
|
emit_int8((unsigned char)(0xC0 | encode));
|
|
|
@ -5932,7 +5932,7 @@ void Assembler::evpbroadcastw(XMMRegister dst, Address src, int vector_len) {
|
|
|
|
assert(VM_Version::supports_evex(), "");
|
|
|
|
assert(VM_Version::supports_evex(), "");
|
|
|
|
assert(dst != xnoreg, "sanity");
|
|
|
|
assert(dst != xnoreg, "sanity");
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionMark im(this);
|
|
|
|
InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ true);
|
|
|
|
InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ _legacy_mode_bw, /* no_mask_reg */ true, /* uses_vl */ true);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_16bit);
|
|
|
|
attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_16bit);
|
|
|
|
// swap src<->dst for encoding
|
|
|
|
// swap src<->dst for encoding
|
|
|
|
vex_prefix(src, dst->encoding(), dst->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_38, &attributes);
|
|
|
|
vex_prefix(src, dst->encoding(), dst->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_38, &attributes);
|
|
|
@ -6027,7 +6027,7 @@ void Assembler::evpbroadcastsd(XMMRegister dst, Address src, int vector_len) {
|
|
|
|
// duplicate 1-byte integer data from src into 16||32|64 locations in dest : requires AVX512BW and AVX512VL
|
|
|
|
// duplicate 1-byte integer data from src into 16||32|64 locations in dest : requires AVX512BW and AVX512VL
|
|
|
|
void Assembler::evpbroadcastb(XMMRegister dst, Register src, int vector_len) {
|
|
|
|
void Assembler::evpbroadcastb(XMMRegister dst, Register src, int vector_len) {
|
|
|
|
assert(VM_Version::supports_evex(), "");
|
|
|
|
assert(VM_Version::supports_evex(), "");
|
|
|
|
InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ true);
|
|
|
|
InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ _legacy_mode_bw, /* no_mask_reg */ true, /* uses_vl */ true);
|
|
|
|
int encode = vex_prefix_and_encode(dst->encoding(), 0, src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_38, &attributes);
|
|
|
|
int encode = vex_prefix_and_encode(dst->encoding(), 0, src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_38, &attributes);
|
|
|
|
emit_int8(0x7A);
|
|
|
|
emit_int8(0x7A);
|
|
|
|
emit_int8((unsigned char)(0xC0 | encode));
|
|
|
|
emit_int8((unsigned char)(0xC0 | encode));
|
|
|
@ -6036,7 +6036,7 @@ void Assembler::evpbroadcastb(XMMRegister dst, Register src, int vector_len) {
|
|
|
|
// duplicate 2-byte integer data from src into 8|16||32 locations in dest : requires AVX512BW and AVX512VL
|
|
|
|
// duplicate 2-byte integer data from src into 8|16||32 locations in dest : requires AVX512BW and AVX512VL
|
|
|
|
void Assembler::evpbroadcastw(XMMRegister dst, Register src, int vector_len) {
|
|
|
|
void Assembler::evpbroadcastw(XMMRegister dst, Register src, int vector_len) {
|
|
|
|
assert(VM_Version::supports_evex(), "");
|
|
|
|
assert(VM_Version::supports_evex(), "");
|
|
|
|
InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ true);
|
|
|
|
InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ _legacy_mode_bw, /* no_mask_reg */ true, /* uses_vl */ true);
|
|
|
|
int encode = vex_prefix_and_encode(dst->encoding(), 0, src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_38, &attributes);
|
|
|
|
int encode = vex_prefix_and_encode(dst->encoding(), 0, src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_38, &attributes);
|
|
|
|
emit_int8(0x7B);
|
|
|
|
emit_int8(0x7B);
|
|
|
|
emit_int8((unsigned char)(0xC0 | encode));
|
|
|
|
emit_int8((unsigned char)(0xC0 | encode));
|
|
|
|