diff -r 693c6b883b54 -r 8c1e3dd5fe1b hotspot/src/cpu/sparc/vm/dump_sparc.cpp --- a/hotspot/src/cpu/sparc/vm/dump_sparc.cpp Fri Mar 18 15:52:42 2011 -0700 +++ b/hotspot/src/cpu/sparc/vm/dump_sparc.cpp Fri Mar 18 16:00:34 2011 -0700 @@ -80,13 +80,19 @@ for (int j = 0; j < num_virtuals; ++j) { dummy_vtable[num_virtuals * i + j] = (void*)masm->pc(); __ save(SP, -256, SP); + int offset = (i << 8) + j; + Register src = G0; + if (!Assembler::is_simm13(offset)) { + __ sethi(offset, L0); + src = L0; + offset = offset & ((1 << 10) - 1); + } __ brx(Assembler::always, false, Assembler::pt, common_code); // Load L0 with a value indicating vtable/offset pair. // -- bits[ 7..0] (8 bits) which virtual method in table? - // -- bits[12..8] (5 bits) which virtual method table? - // -- must fit in 13-bit instruction immediate field. - __ delayed()->set((i << 8) + j, L0); + // -- bits[13..8] (6 bits) which virtual method table? + __ delayed()->or3(src, offset, L0); } }