src/cpu/x86/vm/assembler_x86.cpp

changeset 2565
28bf941f445e
parent 2423
b1a2afa37ec4
child 2569
6bbaedb03534
equal deleted inserted replaced
2564:34457f6ac818 2565:28bf941f445e
6526 movw(dst, src); 6526 movw(dst, src);
6527 } 6527 }
6528 return off; 6528 return off;
6529 } 6529 }
6530 6530
6531 void MacroAssembler::load_sized_value(Register dst, Address src, 6531 void MacroAssembler::load_sized_value(Register dst, Address src, size_t size_in_bytes, bool is_signed, Register dst2) {
6532 size_t size_in_bytes, bool is_signed) {
6533 switch (size_in_bytes) { 6532 switch (size_in_bytes) {
6534 #ifndef _LP64 6533 #ifndef _LP64
6535 // For case 8, caller is responsible for manually loading 6534 case 8:
6536 // the second word into another register. 6535 assert(dst2 != noreg, "second dest register required");
6537 case 8: movl(dst, src); break; 6536 movl(dst, src);
6537 movl(dst2, src.plus_disp(BytesPerInt));
6538 break;
6538 #else 6539 #else
6539 case 8: movq(dst, src); break; 6540 case 8: movq(dst, src); break;
6540 #endif 6541 #endif
6541 case 4: movl(dst, src); break; 6542 case 4: movl(dst, src); break;
6542 case 2: is_signed ? load_signed_short(dst, src) : load_unsigned_short(dst, src); break; 6543 case 2: is_signed ? load_signed_short(dst, src) : load_unsigned_short(dst, src); break;
6543 case 1: is_signed ? load_signed_byte( dst, src) : load_unsigned_byte( dst, src); break; 6544 case 1: is_signed ? load_signed_byte( dst, src) : load_unsigned_byte( dst, src); break;
6544 default: ShouldNotReachHere(); 6545 default: ShouldNotReachHere();
6546 }
6547 }
6548
6549 void MacroAssembler::store_sized_value(Address dst, Register src, size_t size_in_bytes, Register src2) {
6550 switch (size_in_bytes) {
6551 #ifndef _LP64
6552 case 8:
6553 assert(src2 != noreg, "second source register required");
6554 movl(dst, src);
6555 movl(dst.plus_disp(BytesPerInt), src2);
6556 break;
6557 #else
6558 case 8: movq(dst, src); break;
6559 #endif
6560 case 4: movl(dst, src); break;
6561 case 2: movw(dst, src); break;
6562 case 1: movb(dst, src); break;
6563 default: ShouldNotReachHere();
6545 } 6564 }
6546 } 6565 }
6547 6566
6548 void MacroAssembler::mov32(AddressLiteral dst, Register src) { 6567 void MacroAssembler::mov32(AddressLiteral dst, Register src) {
6549 if (reachable(dst)) { 6568 if (reachable(dst)) {

mercurial