src/cpu/x86/vm/assembler_x86.cpp

changeset 2746
d86923d96dca
parent 2697
09f96c3ff1ad
child 2761
15c9a0e16269
child 2787
5d046bf49ce7
     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) {

mercurial