pushReturnValue(methodRef.getSignature());
final int nofArgs = mts.getNoArguments(); for (int i = 0; i < nofArgs; i++) {  Item v = vstack.popItem(); v.release(eContext); }  if (mts.isStatic()) { throw new IncompatibleClassChangeError( "Static method in invokevirtual"); } final VmInstanceMethod method = (VmInstanceMethod) mts; final int tibOffset = method.getTibOffset(); final int argSlotCount = Signature.getArgSlotCount(methodRef .getSignature());   os.writeMOV(INTSIZE, S0, SP, argSlotCount * slotSize);  os.writeMOV(INTSIZE, S0, S0, ObjectLayout.TIB_SLOT * slotSize);  os.writeMOV(INTSIZE, EAX, S0, (VmArray.DATA_OFFSET + tibOffset) * slotSize);  helper.invokeJavaMethod(methodRef.getSignature());  pushReturnValue(methodRef.getSignature());
	public final void visit_invokevirtual(VmConstMethodRef methodRef) {		//TODO: port to orp-style		vstack.push(eContext);				methodRef.resolve(loader);		final VmMethod mts = methodRef.getResolvedVmMethod();				final int nofArgs = mts.getNoArguments();		for (int i=0; i<nofArgs; i++) {			//TODO: check parameter type			Item v = vstack.popItem();			v.release(eContext);		}				if (mts.isStatic()) {			throw new IncompatibleClassChangeError("Static method in invokevirtual");		}		final VmInstanceMethod method = (VmInstanceMethod) mts;		final int tibOffset = method.getTibOffset();		final int argSlotCount = 			Signature.getArgSlotCount(methodRef.getSignature());		/* Get objectref -> S0 */		os.writeMOV(INTSIZE, S0, SP, argSlotCount * slotSize);		/* Get VMT of objectef -> S0 */		os.writeMOV(INTSIZE, S0, S0, ObjectLayout.TIB_SLOT * slotSize);		/* Get entry in VMT -> EAX */		os.writeMOV(INTSIZE, EAX, S0, (VmArray.DATA_OFFSET + tibOffset) * slotSize);		/* Now invoke the method */		helper.invokeJavaMethod(methodRef.getSignature());		pushReturnValue(methodRef.getSignature());    }