# HG changeset patch # User Thomas Wuerthinger # Date 1297859913 -3600 # Node ID 50b45e2d97259dd5728bab098947db9eef6b103b # Parent e5ba25730d9b609a35f10ac9933a0ff9af03a614 Fixed bug in getClass() XIR snippet Null check needs separate PC position. Otherwise there's a problem if the null check is immediately after a call instruction. diff -r e5ba25730d9b -r 50b45e2d9725 c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotXirGenerator.java --- a/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotXirGenerator.java Fri Feb 04 16:01:24 2011 +0100 +++ b/c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotXirGenerator.java Wed Feb 16 13:38:33 2011 +0100 @@ -817,6 +817,9 @@ protected XirTemplate create(CiXirAssembler asm, long flags) { XirOperand result = asm.restart(CiKind.Object); XirOperand object = asm.createInputParameter("object", CiKind.Object); + if (is(NULL_CHECK, flags)) { + asm.nop(1); + } asm.pload(CiKind.Object, result, object, asm.i(config.hubOffset), is(NULL_CHECK, flags)); asm.pload(CiKind.Object, result, result, asm.i(config.classMirrorOffset), false); return asm.finishTemplate("currentThread"); diff -r e5ba25730d9b -r 50b45e2d9725 src/share/vm/compiler/oopMap.cpp --- a/src/share/vm/compiler/oopMap.cpp Fri Feb 04 16:01:24 2011 +0100 +++ b/src/share/vm/compiler/oopMap.cpp Wed Feb 16 13:38:33 2011 +0100 @@ -255,7 +255,7 @@ if(om_count() > 0) { OopMap* last = at(om_count()-1); if (last->offset() == map->offset() ) { - fatal("OopMap inserted twice"); + fatal(err_msg("OopMap inserted twice (offset=%d)", last->offset())); } if(last->offset() > map->offset()) { tty->print_cr( "WARNING, maps not sorted: pc[%d]=%d, pc[%d]=%d",