2647 emit_byte(0x0F); |
2647 emit_byte(0x0F); |
2648 emit_byte(0x51); |
2648 emit_byte(0x51); |
2649 emit_byte(0xC0 | encode); |
2649 emit_byte(0xC0 | encode); |
2650 } |
2650 } |
2651 |
2651 |
|
2652 void Assembler::sqrtsd(XMMRegister dst, Address src) { |
|
2653 NOT_LP64(assert(VM_Version::supports_sse2(), "")); |
|
2654 InstructionMark im(this); |
|
2655 emit_byte(0xF2); |
|
2656 prefix(src, dst); |
|
2657 emit_byte(0x0F); |
|
2658 emit_byte(0x51); |
|
2659 emit_operand(dst, src); |
|
2660 } |
|
2661 |
|
2662 void Assembler::sqrtss(XMMRegister dst, XMMRegister src) { |
|
2663 // HMM Table D-1 says sse2 |
|
2664 // NOT_LP64(assert(VM_Version::supports_sse(), "")); |
|
2665 NOT_LP64(assert(VM_Version::supports_sse2(), "")); |
|
2666 emit_byte(0xF3); |
|
2667 int encode = prefix_and_encode(dst->encoding(), src->encoding()); |
|
2668 emit_byte(0x0F); |
|
2669 emit_byte(0x51); |
|
2670 emit_byte(0xC0 | encode); |
|
2671 } |
|
2672 |
|
2673 void Assembler::sqrtss(XMMRegister dst, Address src) { |
|
2674 NOT_LP64(assert(VM_Version::supports_sse2(), "")); |
|
2675 InstructionMark im(this); |
|
2676 emit_byte(0xF3); |
|
2677 prefix(src, dst); |
|
2678 emit_byte(0x0F); |
|
2679 emit_byte(0x51); |
|
2680 emit_operand(dst, src); |
|
2681 } |
|
2682 |
2652 void Assembler::stmxcsr( Address dst) { |
2683 void Assembler::stmxcsr( Address dst) { |
2653 NOT_LP64(assert(VM_Version::supports_sse(), "")); |
2684 NOT_LP64(assert(VM_Version::supports_sse(), "")); |
2654 InstructionMark im(this); |
2685 InstructionMark im(this); |
2655 prefix(dst); |
2686 prefix(dst); |
2656 emit_byte(0x0F); |
2687 emit_byte(0x0F); |
4354 |
4385 |
4355 void Assembler::shrq(Register dst) { |
4386 void Assembler::shrq(Register dst) { |
4356 int encode = prefixq_and_encode(dst->encoding()); |
4387 int encode = prefixq_and_encode(dst->encoding()); |
4357 emit_byte(0xD3); |
4388 emit_byte(0xD3); |
4358 emit_byte(0xE8 | encode); |
4389 emit_byte(0xE8 | encode); |
4359 } |
|
4360 |
|
4361 void Assembler::sqrtsd(XMMRegister dst, Address src) { |
|
4362 NOT_LP64(assert(VM_Version::supports_sse2(), "")); |
|
4363 InstructionMark im(this); |
|
4364 emit_byte(0xF2); |
|
4365 prefix(src, dst); |
|
4366 emit_byte(0x0F); |
|
4367 emit_byte(0x51); |
|
4368 emit_operand(dst, src); |
|
4369 } |
4390 } |
4370 |
4391 |
4371 void Assembler::subq(Address dst, int32_t imm32) { |
4392 void Assembler::subq(Address dst, int32_t imm32) { |
4372 InstructionMark im(this); |
4393 InstructionMark im(this); |
4373 prefixq(dst); |
4394 prefixq(dst); |
4926 // src should NEVER be a real pointer. Use AddressLiteral for true pointers |
4947 // src should NEVER be a real pointer. Use AddressLiteral for true pointers |
4927 void MacroAssembler::movptr(Address dst, intptr_t src) { |
4948 void MacroAssembler::movptr(Address dst, intptr_t src) { |
4928 movl(dst, src); |
4949 movl(dst, src); |
4929 } |
4950 } |
4930 |
4951 |
4931 |
|
4932 void MacroAssembler::movsd(XMMRegister dst, AddressLiteral src) { |
|
4933 movsd(dst, as_Address(src)); |
|
4934 } |
|
4935 |
4952 |
4936 void MacroAssembler::pop_callee_saved_registers() { |
4953 void MacroAssembler::pop_callee_saved_registers() { |
4937 pop(rcx); |
4954 pop(rcx); |
4938 pop(rdx); |
4955 pop(rdx); |
4939 pop(rdi); |
4956 pop(rdi); |