src/cpu/sparc/vm/relocInfo_sparc.cpp

changeset 599
c436414a719e
parent 435
a61af66fc99e
child 631
d1605aabd0a1
     1.1 --- a/src/cpu/sparc/vm/relocInfo_sparc.cpp	Wed May 21 10:45:07 2008 -0700
     1.2 +++ b/src/cpu/sparc/vm/relocInfo_sparc.cpp	Wed May 21 13:46:23 2008 -0700
     1.3 @@ -87,6 +87,17 @@
     1.4  #ifdef _LP64
     1.5      jint inst2;
     1.6      guarantee(Assembler::inv_op2(inst)==Assembler::sethi_op2, "must be sethi");
     1.7 +    if (format() != 0) {
     1.8 +      assert(type() == relocInfo::oop_type, "only narrow oops case");
     1.9 +      jint np = oopDesc::encode_heap_oop((oop)x);
    1.10 +      inst &= ~Assembler::hi22(-1);
    1.11 +      inst |=  Assembler::hi22((intptr_t)np);
    1.12 +      ip->set_long_at(0, inst);
    1.13 +      inst2 = ip->long_at( NativeInstruction::nop_instruction_size );
    1.14 +      guarantee(Assembler::inv_op(inst2)==Assembler::arith_op, "arith op");
    1.15 +      ip->set_long_at(NativeInstruction::nop_instruction_size, ip->set_data32_simm13( inst2, (intptr_t)np));
    1.16 +      break;
    1.17 +    }
    1.18      ip->set_data64_sethi( ip->addr_at(0), (intptr_t)x );
    1.19  #ifdef COMPILER2
    1.20      // [RGV] Someone must have missed putting in a reloc entry for the

mercurial