Package org.jnode.assembler

Examples of org.jnode.assembler.Label


        }
        if (debug) {
            BootLogInstance.get().debug("startInlinedMethodHeader(" + inlinedMethod + ')');
        }
        maxLocals = newMaxLocals;
        final Label curInstrLabel = getCurInstrLabel();
        final String prefix = curInstrLabel + "_" + inlinedMethod.getName()
            + '_';
        this.inlinedMethodInfo = new InlinedMethodInfo(inlinedMethodInfo,
            inlinedMethod, new Label(curInstrLabel + "_end_of_inline"),
            helper.getLabelPrefix());
        helper.setLabelPrefix(prefix);
        this.currentMethod = inlinedMethod;
    }
View Full Code Here


     */
    public final void visit_checkcast(VmConstClass classRef) {
        // Resolve classRef
        classRef.resolve(loader);
        final VmType<?> resolvedType = classRef.getResolvedVmClass();
        final Label curInstrLabel = getCurInstrLabel();

        if (resolvedType.isInterface() || resolvedType.isArray()) {
            // ClassRef is an interface or array, do the slow test

            // Pre-claim ECX
            L1AHelper.requestRegister(eContext, helper.AAX);

            // check that top item is a reference
            final RefItem ref = vstack.popRef();

            // Load the ref
            ref.load(eContext);
            final GPR refr = ref.getRegister();
            final GPR classr = helper.AAX;
            final GPR cntr = (GPR) L1AHelper.requestRegister(eContext,
                JvmType.INT, false);
            final GPR tmpr = (GPR) L1AHelper.requestRegister(eContext,
                JvmType.REFERENCE, false);

            // Resolve the class
            writeResolveAndLoadClassToReg(classRef, classr);
            helper.writeClassInitialize(curInstrLabel, classr, tmpr, resolvedType);

            final Label okLabel = new Label(curInstrLabel + "cc-ok");

            /* Is objectref null? */
            os.writeTEST(refr, refr);
            os.writeJCC(okLabel, X86Constants.JZ);
            /* Is instanceof? */
            instanceOf(refr, classr, tmpr, cntr, okLabel, true);
            /* Not instanceof */

            // Call classCastFailed
            os.writePUSH(refr);
            os.writePUSH(classr);
            // Release temp registers here, so invokeJavaMethod can use it
            L1AHelper.releaseRegister(eContext, cntr);
            L1AHelper.releaseRegister(eContext, tmpr);
            L1AHelper.releaseRegister(eContext, classr);
            invokeJavaMethod(context.getClassCastFailedMethod());

            /* Normal exit */
            os.setObjectRef(okLabel);

            // Leave ref on stack
            vstack.push(ref);
        } else {
            // classRef is a class, do the fast test

            // Pre-claim EAX/RAX
            L1AHelper.requestRegister(eContext, helper.AAX);

            // check that top item is a reference
            final RefItem ref = vstack.popRef();

            // Load the ref
            ref.load(eContext);
            final GPR refr = ref.getRegister();
            final GPR tmpr = (GPR) L1AHelper.requestRegister(eContext,
                JvmType.REFERENCE, false);

            final Label okLabel = new Label(curInstrLabel + "cc-ok");

            // Is objectref null?
            os.writeTEST(refr, refr);
            os.writeJCC(okLabel, X86Constants.JZ);
            // Is instanceof?
View Full Code Here

    /**
     * @param fieldRef
     * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_getstatic(org.jnode.vm.classmgr.VmConstFieldRef)
     */
    public final void visit_getstatic(VmConstFieldRef fieldRef) {
        final Label curInstrLabel = getCurInstrLabel();
        fieldRef.resolve(loader);
        final int type = JvmType.SignatureToType(fieldRef.getSignature());
        final VmStaticField sf = (VmStaticField) fieldRef.getResolvedVmField();

        // Initialize if needed
View Full Code Here

                JvmType.REFERENCE, false);
            final GPR cntr = (GPR) L1AHelper.requestRegister(eContext,
                JvmType.INT, false);
            final GPR tmpr = (GPR) L1AHelper.requestRegister(eContext,
                JvmType.REFERENCE, false);
            final Label curInstrLabel = getCurInstrLabel();

            /* Objectref is already on the stack */
            writeResolveAndLoadClassToReg(classRef, classr);
            helper.writeClassInitialize(curInstrLabel, classr, tmpr, resolvedType);

            final Label trueLabel = new Label(curInstrLabel + "io-true");
            final Label endLabel = new Label(curInstrLabel + "io-end");

            /* Is instanceof? */
            instanceOf(refr, classr, tmpr, cntr, trueLabel, false);

            final IntItem result = (IntItem) L1AHelper.requestWordRegister(eContext, JvmType.INT, false);
View Full Code Here

        // Claim result reg
        final IntItem result = (IntItem) L1AHelper.requestWordRegister(
            eContext, JvmType.INT, false);
        final GPR resr = result.getRegister();

        final Label curInstrLabel = getCurInstrLabel();
        final Label ltLabel = new Label(curInstrLabel + "lt");
        final Label endLabel = new Label(curInstrLabel + "end");

        // Calculate
        os.writeXOR(resr, resr);
        if (os.isCode32()) {
            final GPR v2_lsb = v2.getLsbRegister(eContext);
View Full Code Here

    /**
     * Push the given VmType on the stack.
     */
    public final void visit_ldc(VmType<?> value) {
        final WordItem item = L1AHelper.requestWordRegister(eContext, JvmType.REFERENCE, false);
        final Label curInstrLabel = getCurInstrLabel();
        final GPR reg = item.getRegister();

        // Load the class from the statics table
        if (os.isCode32()) {
            helper.writeGetStaticsEntry(curInstrLabel, reg, value);
View Full Code Here

    public final void visit_lmul() {
        // Maintain counter
        counters.getCounter("lmul").inc();

        if (os.isCode32()) {
            final Label curInstrLabel = getCurInstrLabel();

            // TODO: port to ORP style (http://orp.sourceforge.net/)
            vstack.push(eContext);
            final LongItem v2 = vstack.popLong();
            final LongItem v1 = vstack.popLong();
            v2.release1(eContext);
            v1.release1(eContext);

            assertCondition(eContext.getGPRPool().isFree(X86Register.EAX), "EAX not free");
            assertCondition(eContext.getGPRPool().isFree(X86Register.EBX), "EBX not free");
            assertCondition(eContext.getGPRPool().isFree(X86Register.ECX), "ECX not free");
            assertCondition(eContext.getGPRPool().isFree(X86Register.EDX), "EDX not free");
            assertCondition(eContext.getGPRPool().isFree(X86Register.ESI), "ESI not free");

            writePOP64(X86Register.EBX, X86Register.ECX); // Value 2
            final GPR v2_lsb = X86Register.EBX;
            final GPR v2_msb = X86Register.ECX;
            writePOP64(X86Register.ESI, X86Register.EDI); // Value 1
            final GPR v1_lsb = X86Register.ESI;
            final GPR v1_msb = X86Register.EDI;

            final Label tmp1 = new Label(curInstrLabel + "$tmp1");
            final Label tmp2 = new Label(curInstrLabel + "$tmp2");
            final GPR EAX = X86Register.EAX;
            final GPR EDX = X86Register.EDX;

            os.writeMOV(INTSIZE, EAX, v1_msb); // hi2
            os.writeOR(EAX, v2_msb); // hi1 | hi2
View Full Code Here

        val.load(eContext);

        if (os.isCode32()) {
            final GPR v1_lsb = val.getLsbRegister(eContext);
            final GPR v1_msb = val.getMsbRegister(eContext);
            final Label curInstrLabel = getCurInstrLabel();

            os.writeAND(ECX, 63);
            os.writeCMP_Const(ECX, 32);
            final Label gt32Label = new Label(curInstrLabel + "gt32");
            final Label endLabel = new Label(curInstrLabel + "end");
            os.writeJCC(gt32Label, X86Constants.JAE); // JAE
            /** ECX < 32 */
            os.writeSHLD_CL(v1_msb, v1_lsb);
            os.writeSHL_CL(v1_lsb);
            os.writeJMP(endLabel);
View Full Code Here

        val.load(eContext);

        if (os.isCode32()) {
            final X86Register.GPR lsb = val.getLsbRegister(eContext);
            final X86Register.GPR msb = val.getMsbRegister(eContext);
            final Label curInstrLabel = getCurInstrLabel();

            // Calculate
            os.writeAND(ECX, 63);
            os.writeCMP_Const(ECX, 32);
            final Label gt32Label = new Label(curInstrLabel + "gt32");
            final Label endLabel = new Label(curInstrLabel + "end");
            os.writeJCC(gt32Label, X86Constants.JAE); // JAE
            /** ECX < 32 */
            os.writeSHRD_CL(lsb, msb);
            os.writeSAR_CL(msb);
            os.writeJMP(endLabel);
View Full Code Here

        val.load(eContext);

        if (os.isCode32()) {
            final X86Register.GPR lsb = val.getLsbRegister(eContext);
            final X86Register.GPR msb = val.getMsbRegister(eContext);
            final Label curInstrLabel = getCurInstrLabel();

            // Calculate
            os.writeAND(ECX, 63);
            os.writeCMP_Const(ECX, 32);
            final Label gt32Label = new Label(curInstrLabel + "gt32");
            final Label endLabel = new Label(curInstrLabel + "end");
            os.writeJCC(gt32Label, X86Constants.JAE); // JAE
            /** ECX < 32 */
            os.writeSHRD_CL(lsb, msb);
            os.writeSHR_CL(msb);
            os.writeJMP(endLabel);
View Full Code Here

TOP

Related Classes of org.jnode.assembler.Label

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.