src/cpu/x86/vm/assembler_x86.cpp

changeset 8307
daaf806995b3
parent 7152
166d744df0de
child 8604
04d83ba48607
child 9788
44ef77ad417c
equal deleted inserted replaced
8306:81adfb064a4f 8307:daaf806995b3
2316 void Assembler::orl(Register dst, Register src) { 2316 void Assembler::orl(Register dst, Register src) {
2317 (void) prefix_and_encode(dst->encoding(), src->encoding()); 2317 (void) prefix_and_encode(dst->encoding(), src->encoding());
2318 emit_arith(0x0B, 0xC0, dst, src); 2318 emit_arith(0x0B, 0xC0, dst, src);
2319 } 2319 }
2320 2320
2321 void Assembler::orl(Address dst, Register src) {
2322 InstructionMark im(this);
2323 prefix(dst, src);
2324 emit_int8(0x09);
2325 emit_operand(src, dst);
2326 }
2327
2321 void Assembler::packuswb(XMMRegister dst, Address src) { 2328 void Assembler::packuswb(XMMRegister dst, Address src) {
2322 NOT_LP64(assert(VM_Version::supports_sse2(), "")); 2329 NOT_LP64(assert(VM_Version::supports_sse2(), ""));
2323 assert((UseAVX > 0), "SSE mode requires address alignment 16 bytes"); 2330 assert((UseAVX > 0), "SSE mode requires address alignment 16 bytes");
2324 emit_simd_arith(0x67, dst, src, VEX_SIMD_66); 2331 emit_simd_arith(0x67, dst, src, VEX_SIMD_66);
2325 } 2332 }
5611 emit_int8((unsigned char)(0xD0 | encode)); 5618 emit_int8((unsigned char)(0xD0 | encode));
5612 emit_int8(imm8); 5619 emit_int8(imm8);
5613 } 5620 }
5614 } 5621 }
5615 5622
5623 void Assembler::rcrq(Register dst, int imm8) {
5624 assert(isShiftCount(imm8 >> 1), "illegal shift count");
5625 int encode = prefixq_and_encode(dst->encoding());
5626 if (imm8 == 1) {
5627 emit_int8((unsigned char)0xD1);
5628 emit_int8((unsigned char)(0xD8 | encode));
5629 } else {
5630 emit_int8((unsigned char)0xC1);
5631 emit_int8((unsigned char)(0xD8 | encode));
5632 emit_int8(imm8);
5633 }
5634 }
5635
5616 void Assembler::rorq(Register dst, int imm8) { 5636 void Assembler::rorq(Register dst, int imm8) {
5617 assert(isShiftCount(imm8 >> 1), "illegal shift count"); 5637 assert(isShiftCount(imm8 >> 1), "illegal shift count");
5618 int encode = prefixq_and_encode(dst->encoding()); 5638 int encode = prefixq_and_encode(dst->encoding());
5619 if (imm8 == 1) { 5639 if (imm8 == 1) {
5620 emit_int8((unsigned char)0xD1); 5640 emit_int8((unsigned char)0xD1);

mercurial