hotspot/src/cpu/x86/vm/assembler_x86.cpp
changeset 9120 3606dd709168
parent 8882 f852635a6383
child 9182 ab3e9e0925ad
child 9135 f76543993e9d
equal deleted inserted replaced
9119:6b04b8a49ea8 9120:3606dd709168
  7939 #ifdef _LP64
  7939 #ifdef _LP64
  7940   push(rscratch1);                    // save r10, trashed by movptr()
  7940   push(rscratch1);                    // save r10, trashed by movptr()
  7941 #endif
  7941 #endif
  7942   push(rax);                          // save rax,
  7942   push(rax);                          // save rax,
  7943   // addr may contain rsp so we will have to adjust it based on the push
  7943   // addr may contain rsp so we will have to adjust it based on the push
  7944   // we just did
  7944   // we just did (and on 64 bit we do two pushes)
  7945   // NOTE: 64bit seemed to have had a bug in that it did movq(addr, rax); which
  7945   // NOTE: 64bit seemed to have had a bug in that it did movq(addr, rax); which
  7946   // stores rax into addr which is backwards of what was intended.
  7946   // stores rax into addr which is backwards of what was intended.
  7947   if (addr.uses(rsp)) {
  7947   if (addr.uses(rsp)) {
  7948     lea(rax, addr);
  7948     lea(rax, addr);
  7949     pushptr(Address(rax, BytesPerWord));
  7949     pushptr(Address(rax, LP64_ONLY(2 *) BytesPerWord));
  7950   } else {
  7950   } else {
  7951     pushptr(addr);
  7951     pushptr(addr);
  7952   }
  7952   }
  7953 
  7953 
  7954   ExternalAddress buffer((address) b);
  7954   ExternalAddress buffer((address) b);
  8394   } else
  8394   } else
  8395 #endif
  8395 #endif
  8396     movptr(dst, src);
  8396     movptr(dst, src);
  8397 }
  8397 }
  8398 
  8398 
       
  8399 // Doesn't do verfication, generates fixed size code
       
  8400 void MacroAssembler::load_heap_oop_not_null(Register dst, Address src) {
       
  8401 #ifdef _LP64
       
  8402   if (UseCompressedOops) {
       
  8403     movl(dst, src);
       
  8404     decode_heap_oop_not_null(dst);
       
  8405   } else
       
  8406 #endif
       
  8407     movptr(dst, src);
       
  8408 }
       
  8409 
  8399 void MacroAssembler::store_heap_oop(Address dst, Register src) {
  8410 void MacroAssembler::store_heap_oop(Address dst, Register src) {
  8400 #ifdef _LP64
  8411 #ifdef _LP64
  8401   if (UseCompressedOops) {
  8412   if (UseCompressedOops) {
  8402     assert(!dst.uses(src), "not enough registers");
  8413     assert(!dst.uses(src), "not enough registers");
  8403     encode_heap_oop(src);
  8414     encode_heap_oop(src);