result = FloatItem.createFPUStack();
result = (WordItem)ifac.createFPUStack(JvmType.FLOAT);
    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:        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 = L1AHelper.requestWordRegister(eContext, 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);        }    }