comparison c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/HotSpotXirGenerator.java @ 2108:50b45e2d9725

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.
author Thomas Wuerthinger <wuerthinger@ssw.jku.at>
date Wed, 16 Feb 2011 13:38:33 +0100
parents c0b1d6a44a02
children eed52202caea
comparison
equal deleted inserted replaced
2107:e5ba25730d9b 2108:50b45e2d9725
815 private SimpleTemplates getClassTemplates = new SimpleTemplates() { 815 private SimpleTemplates getClassTemplates = new SimpleTemplates() {
816 @Override 816 @Override
817 protected XirTemplate create(CiXirAssembler asm, long flags) { 817 protected XirTemplate create(CiXirAssembler asm, long flags) {
818 XirOperand result = asm.restart(CiKind.Object); 818 XirOperand result = asm.restart(CiKind.Object);
819 XirOperand object = asm.createInputParameter("object", CiKind.Object); 819 XirOperand object = asm.createInputParameter("object", CiKind.Object);
820 if (is(NULL_CHECK, flags)) {
821 asm.nop(1);
822 }
820 asm.pload(CiKind.Object, result, object, asm.i(config.hubOffset), is(NULL_CHECK, flags)); 823 asm.pload(CiKind.Object, result, object, asm.i(config.hubOffset), is(NULL_CHECK, flags));
821 asm.pload(CiKind.Object, result, result, asm.i(config.classMirrorOffset), false); 824 asm.pload(CiKind.Object, result, result, asm.i(config.classMirrorOffset), false);
822 return asm.finishTemplate("currentThread"); 825 return asm.finishTemplate("currentThread");
823 } 826 }
824 }; 827 };