valSize = WORDSIZE; scale = 2; resultType = JvmType.INT; break;
	private final void waload(int jvmType) {		final IntItem idx = vstack.popInt();		final RefItem ref = vstack.popRef();		final int valSize;		final int scale;		final int resultType;		final boolean isfloat = (jvmType == JvmType.FLOAT);		switch (jvmType) {		case JvmType.BYTE:			valSize = BYTESIZE;			scale = 1;			resultType = JvmType.INT;			break;		case JvmType.CHAR:			valSize = WORDSIZE;			scale = 2;			resultType = JvmType.INT;			break;		case JvmType.SHORT:			valSize = WORDSIZE;			scale = 2;			resultType = JvmType.INT;			break;		case JvmType.INT:			valSize = INTSIZE;			scale = 4;			resultType = JvmType.INT;			break;		case JvmType.FLOAT:			valSize = INTSIZE;			scale = 4;			resultType = JvmType.FLOAT;			break;		case JvmType.REFERENCE:			valSize = INTSIZE;			scale = 4;			resultType = JvmType.REFERENCE;			break;		default:			throw new IllegalArgumentException("Invalid type " + jvmType);		}		// Create result		final WordItem result;		final Register resultr;		if (isfloat) {			result = FloatItem.createFPUStack();			resultr = null;		} else {			result = requestWordRegister(resultType, (valSize == BYTESIZE));			resultr = result.getRegister();		}		// Load		idx.loadIf(eContext, ~Item.Kind.CONSTANT);		ref.load(eContext);		final Register refr = ref.getRegister();		// Verify		checkBounds(ref, idx);		if (isfloat) {			FPUHelper.ensureStackCapacity(os, eContext, vstack, 1);		}		// Load data		if (idx.isConstant()) {			final int offset = idx.getValue() * scale;			if (isfloat) {				os.writeFLD32(refr, offset + arrayDataOffset);			} else {				os.writeMOV(valSize, resultr, refr, offset + arrayDataOffset);			}		} else {			final Register idxr = idx.getRegister();			if (isfloat) {				os.writeFLD32(refr, idxr, scale, arrayDataOffset);			} else {				os.writeMOV(valSize, resultr, refr, idxr, scale,						arrayDataOffset);			}		}		// Post process		switch (jvmType) {		case JvmType.BYTE:			os.writeMOVSX(resultr, resultr, BYTESIZE);			break;		case JvmType.CHAR:			os.writeMOVZX(resultr, resultr, WORDSIZE);			break;		case JvmType.SHORT:			os.writeMOVSX(resultr, resultr, WORDSIZE);			break;		}		// Release		ref.release(eContext);		idx.release(eContext);		// Push result		vstack.push(result);		if (isfloat) {			vstack.fpuStack.push(result);		}	}