5677 }
5678
5679 void Assembler::rcpps(XMMRegister dst, XMMRegister src) {
5680 NOT_LP64(assert(VM_Version::supports_sse(), ""));
5681 InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ true, /* no_mask_reg */ true, /* uses_vl */ false);
5682 int encode = simd_prefix_and_encode(dst, xnoreg, src, VEX_SIMD_NONE, VEX_OPCODE_0F, &attributes);
5683 emit_int16(0x53, (0xC0 | encode));
5684 }
5685
5686 void Assembler::rcpss(XMMRegister dst, XMMRegister src) {
5687 NOT_LP64(assert(VM_Version::supports_sse(), ""));
5688 InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ true, /* no_mask_reg */ true, /* uses_vl */ false);
5689 int encode = simd_prefix_and_encode(dst, dst, src, VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
5690 emit_int16(0x53, (0xC0 | encode));
5691 }
5692
5693 void Assembler::rdtsc() {
5694 emit_int16(0x0F, 0x31);
5695 }
5696
5697 // copies data from [esi] to [edi] using rcx pointer sized words
5698 // generic
5699 void Assembler::rep_mov() {
5700 // REP
5701 // MOVSQ
5702 LP64_ONLY(emit_int24((unsigned char)0xF3, REX_W, (unsigned char)0xA5);)
5703 NOT_LP64( emit_int16((unsigned char)0xF3, (unsigned char)0xA5);)
5704 }
5705
5706 // sets rcx bytes with rax, value at [edi]
5707 void Assembler::rep_stosb() {
5708 // REP
5709 // STOSB
5710 LP64_ONLY(emit_int24((unsigned char)0xF3, REX_W, (unsigned char)0xAA);)
5711 NOT_LP64( emit_int16((unsigned char)0xF3, (unsigned char)0xAA);)
5712 }
5713
5714 // sets rcx pointer sized words with rax, value at [edi]
5715 // generic
5716 void Assembler::rep_stos() {
|
5677 }
5678
5679 void Assembler::rcpps(XMMRegister dst, XMMRegister src) {
5680 NOT_LP64(assert(VM_Version::supports_sse(), ""));
5681 InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ true, /* no_mask_reg */ true, /* uses_vl */ false);
5682 int encode = simd_prefix_and_encode(dst, xnoreg, src, VEX_SIMD_NONE, VEX_OPCODE_0F, &attributes);
5683 emit_int16(0x53, (0xC0 | encode));
5684 }
5685
5686 void Assembler::rcpss(XMMRegister dst, XMMRegister src) {
5687 NOT_LP64(assert(VM_Version::supports_sse(), ""));
5688 InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ true, /* no_mask_reg */ true, /* uses_vl */ false);
5689 int encode = simd_prefix_and_encode(dst, dst, src, VEX_SIMD_F3, VEX_OPCODE_0F, &attributes);
5690 emit_int16(0x53, (0xC0 | encode));
5691 }
5692
5693 void Assembler::rdtsc() {
5694 emit_int16(0x0F, 0x31);
5695 }
5696
5697 void Assembler::rdtscp() {
5698 emit_int24(0x0F, 0x01, (unsigned char)0xF9);
5699 }
5700
5701 // copies data from [esi] to [edi] using rcx pointer sized words
5702 // generic
5703 void Assembler::rep_mov() {
5704 // REP
5705 // MOVSQ
5706 LP64_ONLY(emit_int24((unsigned char)0xF3, REX_W, (unsigned char)0xA5);)
5707 NOT_LP64( emit_int16((unsigned char)0xF3, (unsigned char)0xA5);)
5708 }
5709
5710 // sets rcx bytes with rax, value at [edi]
5711 void Assembler::rep_stosb() {
5712 // REP
5713 // STOSB
5714 LP64_ONLY(emit_int24((unsigned char)0xF3, REX_W, (unsigned char)0xAA);)
5715 NOT_LP64( emit_int16((unsigned char)0xF3, (unsigned char)0xAA);)
5716 }
5717
5718 // sets rcx pointer sized words with rax, value at [edi]
5719 // generic
5720 void Assembler::rep_stos() {
|