IntItem idx = vstack.popInt(); RefItem ref = vstack.popRef();  idx.loadIf(eContext, ~Item.Kind.CONSTANT); ref.load(eContext);  final Register r = ref.getRegister(); checkBounds(ref, idx); if (idx.getKind() == Item.Kind.CONSTANT) { final int offset = idx.getValue(); os.writeMOV(WORDSIZE, r, r, offset + VmArray.DATA_OFFSET * 4); } else { final Register offset = idx.getRegister(); os.writeMOV(WORDSIZE, r, r, offset, 2, VmArray.DATA_OFFSET * 4); idx.release(eContext); } os.writeMOVZX(r, r, WORDSIZE);  final IntItem result = IntItem.createReg(r); eContext.getPool().transferOwnerTo(r, result); vstack.push(result);
waload(JvmType.CHAR);
	public final void visit_caload() {		IntItem idx = vstack.popInt();		RefItem ref = vstack.popRef();		idx.loadIf(eContext, ~Item.Kind.CONSTANT);		ref.load(eContext);		final Register r = ref.getRegister();		checkBounds(ref, idx);		if (idx.getKind() == Item.Kind.CONSTANT) {			final int offset = idx.getValue();			os.writeMOV(WORDSIZE, r, r, offset + VmArray.DATA_OFFSET * 4);		} else {			final Register offset = idx.getRegister();			os.writeMOV(WORDSIZE, r, r, offset, 2, VmArray.DATA_OFFSET * 4);			idx.release(eContext);		}		os.writeMOVZX(r, r, WORDSIZE);		// do not release ref, it is recycled into the result		final IntItem result = IntItem.createReg(r);		eContext.getPool().transferOwnerTo(r, result);		vstack.push(result);	}