Mercurial > hg > truffle
comparison src/cpu/x86/vm/assembler_x86.cpp @ 2258:28bf941f445e
7018378: JSR 292: _bound_int_mh produces wrong result on 64-bit SPARC
Reviewed-by: kvn
author | twisti |
---|---|
date | Mon, 14 Feb 2011 03:21:18 -0800 |
parents | b1a2afa37ec4 |
children | 6bbaedb03534 |
comparison
equal
deleted
inserted
replaced
2257:34457f6ac818 | 2258: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)) { |