1.1 --- a/src/cpu/x86/vm/assembler_x86.cpp Thu Apr 07 21:32:23 2011 -0700 1.2 +++ b/src/cpu/x86/vm/assembler_x86.cpp Fri Apr 08 17:03:31 2011 -0700 1.3 @@ -7941,12 +7941,12 @@ 1.4 #endif 1.5 push(rax); // save rax, 1.6 // addr may contain rsp so we will have to adjust it based on the push 1.7 - // we just did 1.8 + // we just did (and on 64 bit we do two pushes) 1.9 // NOTE: 64bit seemed to have had a bug in that it did movq(addr, rax); which 1.10 // stores rax into addr which is backwards of what was intended. 1.11 if (addr.uses(rsp)) { 1.12 lea(rax, addr); 1.13 - pushptr(Address(rax, BytesPerWord)); 1.14 + pushptr(Address(rax, LP64_ONLY(2 *) BytesPerWord)); 1.15 } else { 1.16 pushptr(addr); 1.17 } 1.18 @@ -8396,6 +8396,17 @@ 1.19 movptr(dst, src); 1.20 } 1.21 1.22 +// Doesn't do verfication, generates fixed size code 1.23 +void MacroAssembler::load_heap_oop_not_null(Register dst, Address src) { 1.24 +#ifdef _LP64 1.25 + if (UseCompressedOops) { 1.26 + movl(dst, src); 1.27 + decode_heap_oop_not_null(dst); 1.28 + } else 1.29 +#endif 1.30 + movptr(dst, src); 1.31 +} 1.32 + 1.33 void MacroAssembler::store_heap_oop(Address dst, Register src) { 1.34 #ifdef _LP64 1.35 if (UseCompressedOops) {