IntItem idx = vstack.popInt(); RefItem ref = vstack.popRef(); idx.loadIf(eContext, ~Item.Kind.CONSTANT); ref.load(eContext); Register refReg = ref.getRegister(); checkBounds(ref, idx); if (idx.getKind() == Item.Kind.CONSTANT) { final int offset = idx.getValue(); os.writeMOV(INTSIZE, refReg, refReg, offset + VmArray.DATA_OFFSET * 4); } else { os.writeMOV(INTSIZE, refReg, refReg, idx.getRegister(), 4, VmArray.DATA_OFFSET * 4); idx.release(eContext); }  vstack.push(ref);
waload(JvmType.REFERENCE);
	public final void visit_aaload() {		IntItem idx = vstack.popInt();		RefItem ref = vstack.popRef();		idx.loadIf(eContext, ~Item.Kind.CONSTANT);		ref.load(eContext);		Register refReg = ref.getRegister();		checkBounds(ref, idx);		if (idx.getKind() == Item.Kind.CONSTANT) {			final int offset = idx.getValue();			os.writeMOV(INTSIZE, refReg, refReg, offset + VmArray.DATA_OFFSET					* 4);		} else {			os.writeMOV(INTSIZE, refReg, refReg, idx.getRegister(), 4,					VmArray.DATA_OFFSET * 4);			idx.release(eContext);		}		// do not release ref: it contains the result, so push it onto the stack		vstack.push(ref);	}