Package org.jnode.assembler.x86

Examples of org.jnode.assembler.x86.X86Register


        counters.getCounter("ldc-class").inc();
        // Push all, since we're going to call other methods
        vstack.push(eContext);

        L1AHelper.requestRegister(eContext, helper.AAX);
        final GPR classr = (GPR) L1AHelper.requestRegister(eContext,
            JvmType.REFERENCE, false);

        // Resolve the class
        writeResolveAndLoadClassToReg(classRef, classr);
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);
        } else {
View Full Code Here

            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
            os.writeJCC(tmp1, X86Constants.JNZ);
            os.writeMOV(INTSIZE, EAX, v1_lsb); // lo2
View Full Code Here

            vstack.push(ifac.createLConst(eContext, -v.getValue()));
        } else {
            // Load val
            v.load(eContext);
            if (os.isCode32()) {
                final GPR lsb = v.getLsbRegister(eContext);
                final GPR msb = v.getMsbRegister(eContext);

                // Calculate
                os.writeNEG(msb); // msb := -msb
                os.writeNEG(lsb); // lsb := -lsb
                os.writeSBB(msb, 0); // high += borrow
View Full Code Here

        final int n = matchValues.length;
        // BootLogInstance.get().debug("lookupswitch length=" + n);

        final IntItem key = vstack.popInt();
        key.load(eContext);
        final GPR keyr = key.getRegister();
        // Conservative assumption, flush stack
        vstack.push(eContext);
        key.release(eContext);

        for (int i = 0; i < n; i++) {
View Full Code Here

    /**
     * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_lshl()
     */
    public final void visit_lshl() {
        final GPR ECX = X86Register.ECX;

        final IntItem cnt = vstack.popInt();
        final LongItem val = vstack.popLong();

        if (!cnt.uses(ECX)) {
            val.spillIfUsing(eContext, ECX);
            L1AHelper.requestRegister(eContext, ECX, cnt);
            cnt.loadTo(eContext, ECX);
        }
        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");
View Full Code Here

    /**
     * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_lshr()
     */
    public final void visit_lshr() {
        final GPR ECX = X86Register.ECX;

        final IntItem cnt = vstack.popInt();
        final LongItem val = vstack.popLong();

        // Get cnt into ECX
View Full Code Here

    /**
     * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_lushr()
     */
    public final void visit_lushr() {
        final GPR ECX = X86Register.ECX;

        final IntItem cnt = vstack.popInt();
        final LongItem val = vstack.popLong();

        // Get cnt into ECX
View Full Code Here

        helper.writePushStaticsEntry(getCurInstrLabel(), helper.getMethod().getDeclaringClass()); /* currentClass */
        os.writePUSH(10); /* type=int */
        os.writePUSH(dimensions); /* elements */
        invokeJavaMethod(context.getAllocPrimitiveArrayMethod());
        final RefItem dims = vstack.popRef();
        final GPR dimsr = dims.getRegister();
        // Dimension array is now in dimsr

        // Pop all dimensions (note the reverse order that allocMultiArray
        // expects)
        for (int i = 0; i < dimensions; i++) {
            final int ofs = arrayDataOffset + (i * 4);
            final IntItem v = vstack.popInt();
            v.release1(eContext);
            os.writePOP(dimsr, ofs);
        }

        // Allocate tmp register
        final GPR classr = (GPR) L1AHelper.requestRegister(eContext,
            JvmType.REFERENCE, false);

        // Resolve the array class
        writeResolveAndLoadClassToReg(clazz, classr);

View Full Code Here

        // Push all
        vstack.push(eContext);

        // Allocate tmp register
        final GPR classr = (GPR) L1AHelper.requestRegister(eContext,
            JvmType.REFERENCE, false);

        writeResolveAndLoadClassToReg(classRef, classr);
        /* Setup a call to SoftByteCodes.allocObject */
        os.writePUSH(classr); /* vmClass */
 
View Full Code Here

TOP

Related Classes of org.jnode.assembler.x86.X86Register

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.