Package org.jnode.assembler

Examples of org.jnode.assembler.Label


            if (countConstOps) {
                counters.getCounter("TODOcheckbounds-indexIsConst").inc();
            }
        }

        final Label curInstrLabel = getCurInstrLabel();
        final Label test = new Label(curInstrLabel + "$$cbtest");
        final Label failed = new Label(curInstrLabel + "$$cbfailed");

        assertCondition(ref.isGPR(), "ref must be in a register");
        final GPR refr = ref.getRegister();

        os.writeJMP(test);
View Full Code Here


    private final void instanceOfClass(GPR objectr, VmClassType<?> type, GPR tmpr,
                                       GPR resultr, Label trueLabel, boolean skipNullTest) {

        final int depth = type.getSuperClassDepth();
        final int staticsOfs = helper.getSharedStaticsOffset(type);
        final Label curInstrLabel = getCurInstrLabel();
        final Label notInstanceOfLabel = new Label(curInstrLabel
            + "notInstanceOf");

        if (!type.isAlwaysInitialized()) {
            if (os.isCode32()) {
                helper.writeGetStaticsEntry(curInstrLabel, tmpr, type);
View Full Code Here

     *                  directly after this method Register ECX must be free and it
     *                  destroyed.
     */
    private final void instanceOf(GPR objectr, GPR typer, GPR tmpr, GPR cntr,
                                  Label trueLabel, boolean skipNullTest) {
        final Label curInstrLabel = getCurInstrLabel();
        final Label loopLabel = new Label(curInstrLabel + "loop");
        final Label notInstanceOfLabel = new Label(curInstrLabel
            + "notInstanceOf");

        if (VmUtils.verifyAssertions()) {
            VmUtils._assert(objectr.getSize() == helper.ADDRSIZE, "objectr size");
            VmUtils._assert(typer.getSize() == helper.ADDRSIZE, "typer size");
View Full Code Here

        }
        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

        }

        // 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

    public final void visit_getstatic(VmConstFieldRef fieldRef) {
        if (countBytecode) {
            counters.getCounter("getstatic").inc();
        }

        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

        if (countBytecode) {
            counters.getCounter("ldc-vmtype").inc();
        }

        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

        if (countBytecode) {
            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();

            if (countConstOps) {
                if (v1.isConstant() && v2.isConstant()) {
                    counters.getCounter("TODOlmul-const").inc();
                } else if (v1.isConstant() && (getShiftForMultiplier(Math.abs(v1.getValue())) > 0)) {
                    counters.getCounter("TODOlmul-const1-shift").inc();
                } else if (v2.isConstant() && (getShiftForMultiplier(Math.abs(v2.getValue())) > 0)) {
                    counters.getCounter("TODOlmul-const2-shift").inc();
                }
            }

            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

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.