src/cpu/x86/vm/relocInfo_x86.cpp

changeset 599
c436414a719e
parent 435
a61af66fc99e
child 631
d1605aabd0a1
     1.1 --- a/src/cpu/x86/vm/relocInfo_x86.cpp	Wed May 21 10:45:07 2008 -0700
     1.2 +++ b/src/cpu/x86/vm/relocInfo_x86.cpp	Wed May 21 13:46:23 2008 -0700
     1.3 @@ -30,11 +30,15 @@
     1.4  #ifdef AMD64
     1.5    x += o;
     1.6    typedef Assembler::WhichOperand WhichOperand;
     1.7 -  WhichOperand which = (WhichOperand) format(); // that is, disp32 or imm64, call32
     1.8 +  WhichOperand which = (WhichOperand) format(); // that is, disp32 or imm64, call32, narrow oop
     1.9    assert(which == Assembler::disp32_operand ||
    1.10 +         which == Assembler::narrow_oop_operand ||
    1.11           which == Assembler::imm64_operand, "format unpacks ok");
    1.12    if (which == Assembler::imm64_operand) {
    1.13      *pd_address_in_code() = x;
    1.14 +  } else if (which == Assembler::narrow_oop_operand) {
    1.15 +    address disp = Assembler::locate_operand(addr(), which);
    1.16 +    *(int32_t*) disp = oopDesc::encode_heap_oop((oop)x);
    1.17    } else {
    1.18      // Note:  Use runtime_call_type relocations for call32_operand.
    1.19      address ip = addr();

mercurial