Example usage for org.objectweb.asm MethodVisitor visitLdcInsn

List of usage examples for org.objectweb.asm MethodVisitor visitLdcInsn

Introduction

In this page you can find the example usage for org.objectweb.asm MethodVisitor visitLdcInsn.

Prototype

public void visitLdcInsn(final Object value) 

Source Link

Document

Visits a LDC instruction.

Usage

From source file:br.usp.each.saeg.badua.core.internal.instr.LongProbe.java

License:Open Source License

@Override
public void accept(final MethodVisitor mv) {

    // update covered
    if (potcov != 0) {
        mv.visitVarInsn(Opcodes.LLOAD, vAlive);

        if (!singlePredecessor && potcovpuse != 0) {
            mv.visitVarInsn(Opcodes.LLOAD, vSleepy);
            mv.visitInsn(Opcodes.LAND);/*  w  ww . j a va2  s .  co m*/
        }

        mv.visitLdcInsn(potcov);
        mv.visitInsn(Opcodes.LAND);
        mv.visitVarInsn(Opcodes.LLOAD, vCovered);
        mv.visitInsn(Opcodes.LOR);
        mv.visitVarInsn(Opcodes.LSTORE, vCovered);
    }

    // update alive
    if (disabled != 0) {
        mv.visitLdcInsn(~disabled);
        mv.visitVarInsn(Opcodes.LLOAD, vAlive);
        mv.visitInsn(Opcodes.LAND);
    }
    if (born != 0) {
        if (disabled == 0) {
            mv.visitVarInsn(Opcodes.LLOAD, vAlive);
        }
        mv.visitLdcInsn(born);
        mv.visitInsn(Opcodes.LOR);
    }
    if (disabled != 0 || born != 0) {
        mv.visitVarInsn(Opcodes.LSTORE, vAlive);
    }

    // update sleepy
    if (sleepy != 0) {
        mv.visitLdcInsn(~sleepy);
    } else {
        mv.visitLdcInsn(-1L);
    }
    mv.visitVarInsn(Opcodes.LSTORE, vSleepy);
}

From source file:br.usp.each.saeg.badua.core.internal.instr.LongRootProbe.java

License:Open Source License

@Override
public void accept(final MethodVisitor mv) {
    if (born != 0) {
        mv.visitLdcInsn(born);
        mv.visitVarInsn(Opcodes.LSTORE, vAlive);
    }//from ww w.jav a2  s. c o m
    if (sleepy != 0) {
        mv.visitLdcInsn(~sleepy);
        mv.visitVarInsn(Opcodes.LSTORE, vSleepy);
    }
}

From source file:cc.adf.metrics.agent.visitor.ApplicationModuleImplModifier.java

public static void addDetailNameMethod(ClassWriter cw) {
    MethodVisitor mv = cw.visitMethod(ACC_PRIVATE, "getDetailName", "()Ljava/lang/String;", null, null);
    mv.visitCode();//from   w  w w .j  ava 2s. c  o m
    mv.visitVarInsn(ALOAD, 0);
    mv.visitMethodInsn(INVOKEVIRTUAL, "oracle/jbo/server/ApplicationModuleImpl", "isRoot", "()Z", false);
    Label l0 = new Label();
    mv.visitJumpInsn(IFEQ, l0);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitMethodInsn(INVOKESPECIAL, "oracle/jbo/server/ApplicationModuleImpl", "getName",
            "()Ljava/lang/String;", false);
    mv.visitInsn(ARETURN);
    mv.visitLabel(l0);
    mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
    mv.visitTypeInsn(NEW, "java/lang/StringBuilder");
    mv.visitInsn(DUP);
    mv.visitMethodInsn(INVOKESPECIAL, "java/lang/StringBuilder", "<init>", "()V", false);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitMethodInsn(INVOKESPECIAL, "oracle/jbo/server/ApplicationModuleImpl", "getRootApplicationModule",
            "()Loracle/jbo/server/ApplicationModuleImpl;", false);
    mv.visitMethodInsn(INVOKEVIRTUAL, "oracle/jbo/server/ApplicationModuleImpl", "getName",
            "()Ljava/lang/String;", false);
    mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append",
            "(Ljava/lang/String;)Ljava/lang/StringBuilder;", false);
    mv.visitLdcInsn("::");
    mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append",
            "(Ljava/lang/String;)Ljava/lang/StringBuilder;", false);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitMethodInsn(INVOKESPECIAL, "oracle/jbo/server/ApplicationModuleImpl", "getName",
            "()Ljava/lang/String;", false);
    mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append",
            "(Ljava/lang/String;)Ljava/lang/StringBuilder;", false);
    mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "toString", "()Ljava/lang/String;", false);
    mv.visitInsn(ARETURN);
    mv.visitMaxs(2, 1);
    mv.visitEnd();
}

From source file:ch.eiafr.cojac.Agent.java

License:Apache License

/**
* This method works only with the FloatReplacerClasses class
* It instruments it to create a static initializer block to set
* all the static variables used by the agent and injected in the 
* instrumented application.//from  w w  w .  ja  v a  2  s . co  m
* Warning: this is not the only place to set these variables, see class
* "CojacReferences" !
* This is used when there is more than one classloader in the application
*/
private byte[] setGlobalFields(byte[] byteCode, ClassLoader loader) {
    ClassReader cr = new ClassReader(byteCode);
    ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_FRAMES);
    ClassVisitor cv = new ClassVisitor(Opcodes.ASM5, cw) {
        @Override
        public void visit(int version, int access, String name, String signature, String superName,
                String[] interfaces) {
            super.visit(version, access, name, signature, superName, interfaces);
            MethodVisitor mv = cv.visitMethod(Opcodes.ACC_STATIC, "<clinit>", "()V", null, null);
            mv.visitLdcInsn(references.getDoubleWrapper());
            mv.visitMethodInsn(Opcodes.INVOKESTATIC, name, "setNgWrapper", "(Ljava/lang/String;)V", false);
            mv.visitLdcInsn(references.getNgWrapper());
            mv.visitMethodInsn(Opcodes.INVOKESTATIC, name, "setDoubleWrapper", "(Ljava/lang/String;)V", false);
            mv.visitLdcInsn(references.getFloatWrapper());
            mv.visitMethodInsn(Opcodes.INVOKESTATIC, name, "setFloatWrapper", "(Ljava/lang/String;)V", false);
            mv.visitLdcInsn(references.getBigDecimalPrecision());
            mv.visitMethodInsn(Opcodes.INVOKESTATIC, name, "setBigDecimalPrecision", "(I)V", false);
            mv.visitLdcInsn(references.getStabilityThreshold());
            mv.visitMethodInsn(Opcodes.INVOKESTATIC, name, "setStabilityThreshold", "(D)V", false);
            mv.visitLdcInsn(references.getCheckUnstableComparisons() ? 1 : 0);
            mv.visitMethodInsn(Opcodes.INVOKESTATIC, name, "setCheckUnstableComparisons", "(Z)V", false);
            mv.visitInsn(Opcodes.RETURN);
            mv.visitMaxs(0, 0);
        }
    };
    cr.accept(cv, ClassReader.EXPAND_FRAMES);
    return cw.toByteArray();
}

From source file:ch.eiafr.cojac.instrumenters.DirectInstrumenter.java

License:Apache License

@Override
public void instrument(MethodVisitor mv, int opCode) {
    mv.visitLdcInsn(reaction.value());
    mv.visitLdcInsn(logFileName);/*from  w  w w . j  a  v  a 2 s .  c o m*/

    Arg arg = Arg.fromOpCode(opCode);

    if (arg != null) {
        stats.incrementCounterValue(opCode);// arg
        invocations.get(opCode).invokeStatic(mv);
    }
}

From source file:ch.eiafr.cojac.instrumenters.FloatProxyMethod.java

License:Apache License

public void proxyCallBetterWithVars(MethodVisitor mv, ConversionContext cc) {
    final String pm = "possibleMethod";
    final String pmDesc = "(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/reflect/Method;";
    final String myInvoke = "myInvoke";
    final String myInvokeDesc = "(Ljava/lang/reflect/Method;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;";
    // checkNotNullStack();
    // int paramArrayVar = mla.paramArrayVar();
    // int targetVar = mla.targetVar();
    // Label lEndTry = new Label(); 
    Label lBeginHandler = new Label(), lEndHandler = new Label();
    Type cojReturnType = Type.getReturnType(cc.cDesc);
    // stack >> target prm0 prm1 prm2...
    convertArgumentsToReal(mv, cc);/*  w ww .  j av  a2 s  . co m*/
    // stack >> target allParamsArr target allParamsArr
    // {
    //            mv.visitVarInsn(ASTORE, paramArrayVar);
    //            // stack >> target allParamsArr target
    //            //--------- String targetType=stackTopClass();
    //            mv.visitVarInsn(ASTORE, targetVar);
    // }
    mv.visitInsn(POP);
    mv.visitInsn(POP);
    // stack >> target allParamsArr
    Object[] localsInFrame = aaAfter.locals.toArray();
    mv.visitInsn(SWAP);
    // stack >> allParamsArr target
    mv.visitInsn(DUP_X1);
    // stack >> target allParamsArr target
    mv.visitLdcInsn(cc.name);
    // stack >> target allParamsArr target methName
    mv.visitLdcInsn(cc.cDesc);
    // stack >> target allParamsArr target methName methDesc
    mv.visitMethodInsn(INVOKESTATIC, DN_NAME, pm, pmDesc, false);
    // stack >> target allParamsArr nullOrMeth
    mv.visitInsn(DUP);
    // stack >> target allParamsArr nullOrMeth nullOrMeth

    ArrayList<Object> scl = new ArrayList<Object>(aaAfter.stack);
    scl.remove(scl.size() - 1); // remove the last nullOrMeth
    Object[] stackContent = scl.toArray(); //target allParamsArr nullOrMeth

    mv.visitJumpInsn(IFNULL, lBeginHandler);
    aaAfter.visitFrame(F_NEW, localsInFrame.length, localsInFrame, stackContent.length, stackContent);
    // stack >> target allParamsArr meth
    mv.visitInsn(DUP_X2);
    // stack >> meth target allParamsArr meth
    mv.visitInsn(POP);
    // stack >> meth target allParamsArr
    mv.visitLdcInsn(cc.inArgs.length);
    // stack >> meth target allParamsArr n
    mv.visitInsn(AALOAD);
    // stack >> meth target asObjPrm
    mv.visitTypeInsn(CHECKCAST, "[" + OBJ_TYPE.getDescriptor());
    // stack >> meth target appropriatePrmArr 
    mv.visitMethodInsn(INVOKESTATIC, DN_NAME, myInvoke, myInvokeDesc, false);
    // stack >> [ResultOrNull]
    if (cc.hasReturn()) {
        if (cc.hasPrimitiveResultInCojacVersion()) {
            String jWrapperName = getJWrapper(cojReturnType).getInternalName();
            mv.visitTypeInsn(CHECKCAST, jWrapperName);
            mv.visitMethodInsn(INVOKEVIRTUAL, jWrapperName, getWrapperToPrimitiveMethod(cojReturnType),
                    "()" + cojReturnType.getDescriptor(), false);
        } else {
            mv.visitTypeInsn(CHECKCAST, cojReturnType.getInternalName());
        }
    } else {
        mv.visitInsn(POP); // discard the dummy null result
    }
    // stack >> [possibleResult]
    //;; mv.visitLabel(lEndTry);
    mv.visitJumpInsn(GOTO, lEndHandler); // and we're done !

    ;
    ;
    mv.visitLabel(lBeginHandler);
    // stack >> target allParamsArr null
    // CAUTION: we bypass 'mv' and directly talk to the AnalyzerAdapter!
    aaAfter.visitFrame(F_NEW, localsInFrame.length, localsInFrame, stackContent.length, stackContent);
    //checkNotNullStack();  //was during debugging - removed
    mv.visitInsn(POP); // we drop the null (no-method) slot
    maybeConvertTarget(mv, cc.opcode, cc.owner);
    // stack >> newTarget allParamsArr
    mv.visitInsn(DUP_X1);
    // stack >> allParamsArr newTarget allParamsArr
    explodeOnStack(mv, cc, true);
    // stack >> allParamsArr newTarget nprm0 nprm1 nprm2...
    mv.visitMethodInsn(cc.opcode, cc.owner, cc.name, cc.jDesc, (cc.opcode == INVOKEINTERFACE));
    // stack >> allParamsArr [possibleResult]
    checkArraysAfterCall(mv, cc.convertedArrays, cc.jDesc);
    // stack >> [possibleResult]
    convertReturnType(mv, cc.jDesc);
    // stack >> [newPossibleResult]
    ;
    ;
    mv.visitLabel(lEndHandler);
    scl.remove(scl.size() - 1); // remove 3 slots: target allParamsArr nullOrMeth
    scl.remove(scl.size() - 1);
    scl.remove(scl.size() - 1);
    stackContent = scl.toArray();
    stackContent = addReturnTypeTo(stackContent, cojReturnType);
    aaAfter.visitFrame(F_NEW, localsInFrame.length, localsInFrame, stackContent.length, stackContent);
}

From source file:ch.eiafr.cojac.instrumenters.FloatProxyMethod.java

License:Apache License

private static void explodeOnStack(MethodVisitor mv, ConversionContext cc, boolean wantTheConversion) {
    Type[] args = wantTheConversion ? cc.outArgs : cc.inArgs;
    // stack >> ... allParamsArr
    for (int i = 0; i < args.length; i++) {
        // stack >> ... allParamsArr
        Type oa = args[i];// ww w .  j a v  a  2 s . co m
        int oaSort = oa.getSort();
        mv.visitInsn(DUP);
        mv.visitLdcInsn(i);
        mv.visitInsn(AALOAD);
        boolean keepBothVersions = (oa.getSort() == Type.ARRAY);
        if (keepBothVersions) {
            mv.visitTypeInsn(CHECKCAST, "[" + OBJ_TYPE.getDescriptor());
            mv.visitLdcInsn(wantTheConversion ? 1 : 0);
            mv.visitInsn(AALOAD);
        }

        if (oaSort == Type.ARRAY || oaSort == Type.OBJECT) { // else: primitive type
            mv.visitTypeInsn(CHECKCAST, oa.getInternalName());
        } else {
            String jWrapperName = getJWrapper(oa).getInternalName();
            mv.visitTypeInsn(CHECKCAST, jWrapperName);
            mv.visitMethodInsn(INVOKEVIRTUAL, jWrapperName, getWrapperToPrimitiveMethod(oa),
                    "()" + oa.getDescriptor(), false);
        }

        if (oa.getSize() == 2) { //    Object DD  Swap when double or long
            mv.visitInsn(DUP2_X1); // DD Object DD
            mv.visitInsn(POP2); // DD Object
        } else {
            mv.visitInsn(SWAP);
        }
        // stack >> ... nprmI allParamsArr
    }
    mv.visitInsn(POP);
    // stack >> ... nprm0 nprm1 nprm2...
}

From source file:ch.eiafr.cojac.instrumenters.FloatProxyMethod.java

License:Apache License

private void createConvertMethod(String convertDesc, ConversionContext cc) {
    if (ccv.isProxyMethod(COJAC_TYPE_CONVERT_NAME, convertDesc))
        return; // the method already exists
    MethodVisitor newMv = ccv.addProxyMethod(ACC_STATIC, COJAC_TYPE_CONVERT_NAME, convertDesc, null, null);
    int varIndex = 0;
    newMv.visitLdcInsn(cc.outArgs.length + 1); // additional cell for the AllAsObjects array
    newMv.visitTypeInsn(ANEWARRAY, OBJ_TYPE.getInternalName());
    // stack >> prmsArr
    newMv.visitInsn(DUP);/*  w ww  .ja va  2 s  . co m*/
    newMv.visitLdcInsn(cc.outArgs.length);
    newMv.visitInsn(DUP);
    newMv.visitTypeInsn(ANEWARRAY, OBJ_TYPE.getInternalName());
    // stack >> prmsArr prmsArr n asObjArr
    newMv.visitInsn(AASTORE);
    // stack >> prmsArr

    for (int i = 0; i < cc.outArgs.length; i++) {
        Type ia = cc.inArgs[i];
        newMv.visitInsn(DUP);
        newMv.visitInsn(DUP);
        newMv.visitLdcInsn(cc.outArgs.length);
        // stack >> prmsArr prmsArr prmsArr n
        newMv.visitInsn(AALOAD);
        newMv.visitTypeInsn(CHECKCAST, "[" + OBJ_TYPE.getDescriptor());
        // stack >> prmsArr prmsArr asObjArr
        newMv.visitLdcInsn(i);
        // stack >> prmsArr prmsArr asObjArr i
        newMv.visitVarInsn(getLoadOpcode(ia), varIndex);
        convertPrimitiveToObject(newMv, cc.inArgs[i]);
        // stack >> prmsArr prmsArr asObjArr i pi
        newMv.visitInsn(AASTORE);
        // stack >> prmsArr prmsArr
        newMv.visitLdcInsn(i);
        // stack >> prmsArr prmsArr i
        newMv.visitVarInsn(getLoadOpcode(ia), varIndex);
        varIndex += cc.inArgs[i].getSize();
        // stack >> prmsArr prmsArr i pi
        boolean keepBothVersions = (ia.getSort() == Type.ARRAY);
        if (keepBothVersions) { // keep the old reference (the Cojac one)
            newMv.visitLdcInsn(2);
            newMv.visitTypeInsn(ANEWARRAY, OBJ_TYPE.getInternalName());
            // stack >> prmsArr prmsArr i pi piArr
            newMv.visitInsn(DUP_X1);
            // stack >> prmsArr prmsArr i piArr pi piArr
            newMv.visitInsn(SWAP);
            // stack >> prmsArr prmsArr i piArr piArr pi
            newMv.visitInsn(DUP_X1);
            newMv.visitLdcInsn(0);
            newMv.visitInsn(SWAP);
            // stack >> prmsArr prmsArr i piArr pi piArr pi 0
            newMv.visitInsn(AASTORE);
            // stack >> prmsArr prmsArr i piArr
        }
        // stack >> prmsArr prmsArr i pi
        if (cc.needsConversion(i)) {
            convertCojacToRealType(cc.asOriginalJavaType(i), newMv);
        } else if (cc.shouldObjParamBeConverted && (ia.equals(OBJ_TYPE) || ia.equals(OBJ_ARRAY_TYPE))) {
            convertObjectToReal(newMv, ia);
        }
        /* This is where we could decide to convert back to JavaWrapper
         * when the argument is declared as Object
         * We don't do that to keep "enriched numbers" in collections
         * but sometimes we would like to convert, eg printf, format...
         */
        convertPrimitiveToObject(newMv, cc.outArgs[i]);
        // stack >> prmsArr prmsArr i pi
        if (keepBothVersions) { // keep the new reference (the java one)
            newMv.visitInsn(SWAP);
            newMv.visitInsn(DUP_X1);
            newMv.visitInsn(SWAP);
            newMv.visitLdcInsn(1);
            newMv.visitInsn(SWAP);
            newMv.visitInsn(AASTORE);
        }
        // stack >> prmsArr prmsArr i pi
        newMv.visitInsn(AASTORE);
        // stack >> prmsArr
    }
    newMv.visitInsn(ARETURN);
    newMv.visitMaxs(0, 0);
}

From source file:ch.eiafr.cojac.instrumenters.FloatProxyMethod.java

License:Apache License

private static void checkArraysAfterCall(MethodVisitor mv, Map<Integer, Type> convertedArrays, String desc) {
    // stack >> allParamsArr [possibleResult]
    Type returnType = Type.getReturnType(desc);
    int returnTypeSize = returnType.getSize();
    if (returnTypeSize == 1) {
        mv.visitInsn(SWAP);//from  ww  w .j av  a 2s  .  c om
    } else if (returnTypeSize == 2) {
        // mv.visitInsn(NOP); just a marker as a debugging helper
        mv.visitInsn(DUP2_X1); // D D Object D D
        mv.visitInsn(POP2); // D D Object
    }
    // stack >> [possibleResult] allParamsArr
    for (int pos : convertedArrays.keySet()) {
        // Type type = convertedArrays.get(pos);
        mv.visitInsn(DUP);
        // stack >> [possibleResult] allParamsArr allParamsArr
        mv.visitLdcInsn(pos);
        // stack >> [possibleResult] allParamsArr allParamsArr i
        mv.visitInsn(AALOAD);
        // stack >> [possibleResult] allParamsArr allParamsArr[i]
        mv.visitTypeInsn(CHECKCAST, "[" + OBJ_TYPE.getDescriptor());
        // stack >> [possibleResult] allParamsArr allParamsArr[i]  (of type Object[])
        mv.visitInsn(DUP);
        // stack >> [possibleResult] allParamsArr allParamsArr[i]  allParamsArr[i]
        mv.visitLdcInsn(0);
        // stack >> [possibleResult] allParamsArr allParamsArr[i]  allParamsArr[i] 0  
        mv.visitInsn(AALOAD);
        // stack >> [possibleResult] allParamsArr allParamsArr[i]  allParamsArr[i][0]    
        mv.visitInsn(SWAP);
        // stack >> [possibleResult] allParamsArr allParamsArr[i][0] allParamsArr[i]
        mv.visitLdcInsn(1);
        // stack >> [possibleResult] allParamsArr allParamsArr[i][0] allParamsArr[i] 1
        mv.visitInsn(AALOAD);
        // stack >> [possibleResult] allParamsArr allParamsArr[i][0] allParamsArr[i][1]
        // mergeOriginalArrayIntoCojac
        mv.visitMethodInsn(INVOKESTATIC, DN_NAME, "mergeOriginalArrayIntoCojac",
                "(" + OBJ_DESC + OBJ_DESC + ")V", false);
        // stack >> [possibleResult] allParamsArr
    }
    // stack >> [possibleResult] allParamsArr
    mv.visitInsn(POP);
    // stack >> [possibleResult]
}

From source file:ch.eiafr.cojac.instrumenters.FloatProxyMethod.java

License:Apache License

public static void convertRealToCojacType(Type realType, MethodVisitor mv) {
    // WRAPPER SPEC: FW.fromFloat(float) -> FW,  FW.fromRealFloatWrapper(Float) -> FW
    // WRAPPER SPEC: DW.fromDouble(double) -> DW, DW.fromRealDoubleWrapper(Double) -> DW
    if (realType.equals(Type.FLOAT_TYPE)) {
        mv.visitMethodInsn(INVOKESTATIC, COJAC_FLOAT_WRAPPER_INTERNAL_NAME, "fromFloat",
                "(F)" + COJAC_FLOAT_WRAPPER_TYPE_DESCR, false);
    } else if (realType.equals(JWRAPPER_FLOAT_TYPE)) {
        mv.visitMethodInsn(INVOKESTATIC, COJAC_FLOAT_WRAPPER_INTERNAL_NAME, "fromRealFloatWrapper",
                "(" + JWRAPPER_FLOAT_TYPE.getDescriptor() + ")" + COJAC_FLOAT_WRAPPER_TYPE_DESCR, false);
    } else if (realType.equals(Type.DOUBLE_TYPE)) {
        mv.visitMethodInsn(INVOKESTATIC, COJAC_DOUBLE_WRAPPER_INTERNAL_NAME, "fromDouble",
                "(D)" + COJAC_DOUBLE_WRAPPER_TYPE_DESCR, false);
    } else if (realType.equals(JWRAPPER_DOUBLE_TYPE)) {
        mv.visitMethodInsn(INVOKESTATIC, COJAC_DOUBLE_WRAPPER_INTERNAL_NAME, "fromRealDoubleWrapper",
                "(" + JWRAPPER_DOUBLE_TYPE.getDescriptor() + ")" + COJAC_DOUBLE_WRAPPER_TYPE_DESCR, false);
    } else if (isPrimitiveFloatOrDoubleArray(realType)) {
        mv.visitTypeInsn(CHECKCAST, OBJ_TYPE.getInternalName());
        mv.visitLdcInsn(realType.getDimensions());
        if (realType.getElementType().equals(Type.FLOAT_TYPE)) {
            mv.visitMethodInsn(INVOKESTATIC, FN_NAME, "convertPrimitiveArrayToCojac",
                    "(" + OBJ_DESC + "I)" + OBJ_DESC, false);
        } else if (realType.getElementType().equals(Type.DOUBLE_TYPE)) {
            mv.visitMethodInsn(INVOKESTATIC, DN_NAME, "convertPrimitiveArrayToCojac",
                    "(" + OBJ_DESC + "I)" + OBJ_DESC, false);
        }/* w w w  . j  a v a 2 s.  c om*/
        mv.visitTypeInsn(CHECKCAST, afterFloatReplacement(realType).getInternalName());
    }
}