< prev index next >

src/cpu/x86/vm/assembler_x86.cpp

Print this page




1810   emit_operand(dst, src);
1811 }
1812 
1813 
1814 void Assembler::cvttsd2sil(Register dst, XMMRegister src) {
1815   NOT_LP64(assert(VM_Version::supports_sse2(), ""));
1816   InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
1817   int encode = simd_prefix_and_encode(as_XMMRegister(dst->encoding()), xnoreg, src, VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
1818   emit_int8(0x2C);
1819   emit_int8((unsigned char)(0xC0 | encode));
1820 }
1821 
1822 void Assembler::cvttss2sil(Register dst, XMMRegister src) {
1823   NOT_LP64(assert(VM_Version::supports_sse(), ""));
1824   InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
1825   int encode = simd_prefix_and_encode(as_XMMRegister(dst->encoding()), xnoreg, src, VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
1826   emit_int8(0x2C);
1827   emit_int8((unsigned char)(0xC0 | encode));
1828 }
1829 









1830 void Assembler::decl(Address dst) {
1831   // Don't use it directly. Use MacroAssembler::decrement() instead.
1832   InstructionMark im(this);
1833   prefix(dst);
1834   emit_int8((unsigned char)0xFF);
1835   emit_operand(rcx, dst);
1836 }
1837 
1838 void Assembler::divsd(XMMRegister dst, Address src) {
1839   NOT_LP64(assert(VM_Version::supports_sse2(), ""));
1840   InstructionMark im(this);
1841   InstructionAttr attributes(AVX_128bit, /* rex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ false);
1842   attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_64bit);
1843   simd_prefix(dst, dst, src, VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
1844   emit_int8(0x5E);
1845   emit_operand(dst, src);
1846 }
1847 
1848 void Assembler::divsd(XMMRegister dst, XMMRegister src) {
1849   NOT_LP64(assert(VM_Version::supports_sse2(), ""));


5032 }
5033 
5034 void Assembler::paddd(XMMRegister dst, Address src) {
5035   NOT_LP64(assert(VM_Version::supports_sse2(), ""));
5036   InstructionMark im(this);
5037   InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ true);
5038   simd_prefix(dst, xnoreg, src, VEX_SIMD_66, VEX_OPCODE_0F, &attributes);
5039   emit_int8((unsigned char)0xFE);
5040   emit_operand(dst, src);
5041 }
5042 
5043 void Assembler::paddq(XMMRegister dst, XMMRegister src) {
5044   NOT_LP64(assert(VM_Version::supports_sse2(), ""));
5045   InstructionAttr attributes(AVX_128bit, /* rex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ true);
5046   int encode = simd_prefix_and_encode(dst, dst, src, VEX_SIMD_66, VEX_OPCODE_0F, &attributes);
5047   emit_int8((unsigned char)0xD4);
5048   emit_int8((unsigned char)(0xC0 | encode));
5049 }
5050 
5051 void Assembler::phaddw(XMMRegister dst, XMMRegister src) {
5052   NOT_LP64(assert(VM_Version::supports_sse3(), ""));
5053   InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ true, /* no_mask_reg */ false, /* uses_vl */ false);
5054   int encode = simd_prefix_and_encode(dst, dst, src, VEX_SIMD_66, VEX_OPCODE_0F_38, &attributes);
5055   emit_int8(0x01);
5056   emit_int8((unsigned char)(0xC0 | encode));
5057 }
5058 
5059 void Assembler::phaddd(XMMRegister dst, XMMRegister src) {
5060   NOT_LP64(assert(VM_Version::supports_sse3(), ""));
5061   InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ true, /* no_mask_reg */ false, /* uses_vl */ false);
5062   int encode = simd_prefix_and_encode(dst, dst, src, VEX_SIMD_66, VEX_OPCODE_0F_38, &attributes);
5063   emit_int8(0x02);
5064   emit_int8((unsigned char)(0xC0 | encode));
5065 }
5066 
5067 void Assembler::vpaddb(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) {
5068   assert(UseAVX > 0, "requires some form of AVX");
5069   InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ _legacy_mode_bw, /* no_mask_reg */ true, /* uses_vl */ true);
5070   int nds_enc = nds->is_valid() ? nds->encoding() : 0;
5071   int encode = vex_prefix_and_encode(dst->encoding(), nds_enc, src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F, &attributes);
5072   emit_int8((unsigned char)0xFC);
5073   emit_int8((unsigned char)(0xC0 | encode));
5074 }
5075 
5076 void Assembler::vpaddw(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) {
5077   assert(UseAVX > 0, "requires some form of AVX");
5078   InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ _legacy_mode_bw, /* no_mask_reg */ true, /* uses_vl */ true);
5079   int nds_enc = nds->is_valid() ? nds->encoding() : 0;
5080   int encode = vex_prefix_and_encode(dst->encoding(), nds_enc, src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F, &attributes);




1810   emit_operand(dst, src);
1811 }
1812 
1813 
1814 void Assembler::cvttsd2sil(Register dst, XMMRegister src) {
1815   NOT_LP64(assert(VM_Version::supports_sse2(), ""));
1816   InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
1817   int encode = simd_prefix_and_encode(as_XMMRegister(dst->encoding()), xnoreg, src, VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
1818   emit_int8(0x2C);
1819   emit_int8((unsigned char)(0xC0 | encode));
1820 }
1821 
1822 void Assembler::cvttss2sil(Register dst, XMMRegister src) {
1823   NOT_LP64(assert(VM_Version::supports_sse(), ""));
1824   InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false);
1825   int encode = simd_prefix_and_encode(as_XMMRegister(dst->encoding()), xnoreg, src, VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
1826   emit_int8(0x2C);
1827   emit_int8((unsigned char)(0xC0 | encode));
1828 }
1829 
1830 void Assembler::cvttpd2dq(XMMRegister dst, XMMRegister src) {
1831   NOT_LP64(assert(VM_Version::supports_sse2(), ""));
1832   int vector_len = VM_Version::supports_avx512novl() ? AVX_512bit : AVX_128bit;
1833   InstructionAttr attributes(vector_len, /* rex_w */ true, /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ true);
1834   int encode = simd_prefix_and_encode(dst, xnoreg, src, VEX_SIMD_66, VEX_OPCODE_0F, &attributes);
1835   emit_int8((unsigned char)0xE6);
1836   emit_int8((unsigned char)(0xC0 | encode));
1837 }
1838 
1839 void Assembler::decl(Address dst) {
1840   // Don't use it directly. Use MacroAssembler::decrement() instead.
1841   InstructionMark im(this);
1842   prefix(dst);
1843   emit_int8((unsigned char)0xFF);
1844   emit_operand(rcx, dst);
1845 }
1846 
1847 void Assembler::divsd(XMMRegister dst, Address src) {
1848   NOT_LP64(assert(VM_Version::supports_sse2(), ""));
1849   InstructionMark im(this);
1850   InstructionAttr attributes(AVX_128bit, /* rex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ false);
1851   attributes.set_address_attributes(/* tuple_type */ EVEX_T1S, /* input_size_in_bits */ EVEX_64bit);
1852   simd_prefix(dst, dst, src, VEX_SIMD_F2, VEX_OPCODE_0F, &attributes);
1853   emit_int8(0x5E);
1854   emit_operand(dst, src);
1855 }
1856 
1857 void Assembler::divsd(XMMRegister dst, XMMRegister src) {
1858   NOT_LP64(assert(VM_Version::supports_sse2(), ""));


5041 }
5042 
5043 void Assembler::paddd(XMMRegister dst, Address src) {
5044   NOT_LP64(assert(VM_Version::supports_sse2(), ""));
5045   InstructionMark im(this);
5046   InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ true);
5047   simd_prefix(dst, xnoreg, src, VEX_SIMD_66, VEX_OPCODE_0F, &attributes);
5048   emit_int8((unsigned char)0xFE);
5049   emit_operand(dst, src);
5050 }
5051 
5052 void Assembler::paddq(XMMRegister dst, XMMRegister src) {
5053   NOT_LP64(assert(VM_Version::supports_sse2(), ""));
5054   InstructionAttr attributes(AVX_128bit, /* rex_w */ VM_Version::supports_evex(), /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ true);
5055   int encode = simd_prefix_and_encode(dst, dst, src, VEX_SIMD_66, VEX_OPCODE_0F, &attributes);
5056   emit_int8((unsigned char)0xD4);
5057   emit_int8((unsigned char)(0xC0 | encode));
5058 }
5059 
5060 void Assembler::phaddw(XMMRegister dst, XMMRegister src) {
5061   assert(VM_Version::supports_sse3(), "");
5062   InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ true, /* no_mask_reg */ false, /* uses_vl */ false);
5063   int encode = simd_prefix_and_encode(dst, dst, src, VEX_SIMD_66, VEX_OPCODE_0F_38, &attributes);
5064   emit_int8(0x01);
5065   emit_int8((unsigned char)(0xC0 | encode));
5066 }
5067 
5068 void Assembler::phaddd(XMMRegister dst, XMMRegister src) {
5069   assert(VM_Version::supports_sse3(), "");
5070   InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ true, /* no_mask_reg */ false, /* uses_vl */ false);
5071   int encode = simd_prefix_and_encode(dst, dst, src, VEX_SIMD_66, VEX_OPCODE_0F_38, &attributes);
5072   emit_int8(0x02);
5073   emit_int8((unsigned char)(0xC0 | encode));
5074 }
5075 
5076 void Assembler::vpaddb(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) {
5077   assert(UseAVX > 0, "requires some form of AVX");
5078   InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ _legacy_mode_bw, /* no_mask_reg */ true, /* uses_vl */ true);
5079   int nds_enc = nds->is_valid() ? nds->encoding() : 0;
5080   int encode = vex_prefix_and_encode(dst->encoding(), nds_enc, src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F, &attributes);
5081   emit_int8((unsigned char)0xFC);
5082   emit_int8((unsigned char)(0xC0 | encode));
5083 }
5084 
5085 void Assembler::vpaddw(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) {
5086   assert(UseAVX > 0, "requires some form of AVX");
5087   InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ _legacy_mode_bw, /* no_mask_reg */ true, /* uses_vl */ true);
5088   int nds_enc = nds->is_valid() ? nds->encoding() : 0;
5089   int encode = vex_prefix_and_encode(dst->encoding(), nds_enc, src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F, &attributes);


< prev index next >