Package org.jnode.assembler.x86

Examples of org.jnode.assembler.x86.X86BinaryAssembler


     */
    public final void visit_lushr() {
        if (countBytecode) {
            counters.getCounter("lushr").inc();
        }
        final GPR ECX = X86Register.ECX;

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

        if (cnt.isConstant() && val.isConstant()) {
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

        final RefItem ref = vstack.popRef();

        // Load value & ref
        val.load(eContext);
        ref.load(eContext);
        final GPR refr = ref.getRegister();

        if (!wide) {
            final WordItem wval = (WordItem) val;
            final GPR valr = wval.getRegister();
            final char fieldType = field.getSignature().charAt(0);

            // Store field
            switch (fieldType) {
                case 'Z': // boolean
                case 'B': // byte
                    wval.loadToBITS8GPR(eContext);
                    os.writeMOV(BITS8, refr, offset, wval.getRegister());
                    break;
                case 'C': // char
                case 'S': // short
                    os.writeMOV(BITS16, refr, offset, valr);
                    break;
                case 'F': // float
                case 'I': // int
                case 'L': // Object
                case '[': // array
                    os.writeMOV(valr.getSize(), refr, offset, valr);
                    break;
                default:
                    throw new IllegalArgumentException("Unknown fieldType: " + fieldType);
            }
            // Writebarrier
            if (!inf.isPrimitive() && helper.needsWriteBarrier()) {
                final GPR tmp = (GPR) L1AHelper.requestRegister(eContext,
                    JvmType.REFERENCE, false);
                helper.writePutfieldWriteBarrier(inf, refr, valr, tmp);
                L1AHelper.releaseRegister(eContext, tmp);
            }
        } else {
View Full Code Here

        final GPR refr = ref.getRegister();
        if (index.isConstant()) {
            final int offset = index.getValue() * scale;
            os.writeLEA(dst, refr, arrayDataOffset + offset);
        } else {
            final GPR32 idxr = (GPR32) index.getRegister();
            if (os.isCode32()) {
                os.writeLEA(dst, refr, idxr, scale, arrayDataOffset);
            } else {
                final GPR64 idxr64 = (GPR64) eContext.getGPRPool().getRegisterInSameGroup(idxr, JvmType.LONG);
                os.writeMOVSXD(idxr64, (GPR32) idxr);
View Full Code Here

            // Calculate absolute address of jump target
            if (os.isCode32()) {
                os.writeADD(tmp, tmp, 0);
            } else {
                final GPR32 tmp2 = (GPR32) L1AHelper.requestRegister(eContext, JvmType.INT, false);
                os.writeMOV(BITS32, tmp2, tmp, 0);
                final GPR64 tmp2_64 = L1AHelper.get64BitReg(eContext, tmp2);
                os.writeMOVSXD(tmp2_64, tmp2);
                os.writeADD(tmp, tmp2_64);
                L1AHelper.releaseRegister(eContext, tmp2);
View Full Code Here

                final GPR msb = val.getMsbRegister(eContext);
                // Store
                os.writeMOV(INTSIZE, helper.BP, disp + LSB, lsb);
                os.writeMOV(INTSIZE, helper.BP, disp + MSB, msb);
            } else {
                final GPR64 reg = val.getRegister(eContext);
                // Store
                os.writeMOV(BITS64, helper.BP, disp, reg);
            }
        }
View Full Code Here

        } else {
            final GPR32 idxr = (GPR32) index.getRegister();
            if (os.isCode32()) {
                os.writeLEA(dst, refr, idxr, scale, arrayDataOffset);
            } else {
                final GPR64 idxr64 = (GPR64) eContext.getGPRPool().getRegisterInSameGroup(idxr, JvmType.LONG);
                os.writeMOVSXD(idxr64, (GPR32) idxr);
                os.writeLEA(dst, refr, idxr64, scale, arrayDataOffset);
            }
        }
    }
View Full Code Here

                    os.writeArithOp(operationLsb, r1_lsb, v2.getLsbValue());
                    os.writeArithOp(operationMsb, r1_msb, v2.getMsbValue());
                    break;
            }
        } else {
            final GPR64 r1 = v1.getRegister(eContext);
            switch (v2.getKind()) {
                case Item.Kind.GPR:
                    os.writeArithOp(operationLsb, r1, v2.getRegister(eContext));
                    break;
                case Item.Kind.LOCAL:
View Full Code Here

                    final GPR lsb = idw.getLsbRegister(eContext);
                    final GPR msb = idw.getMsbRegister(eContext);
                    os.writeMOV(BITS32, lsb, refr, fieldOffset + LSB);
                    os.writeMOV(BITS32, msb, refr, fieldOffset + MSB);
                } else {
                    final GPR64 reg = idw.getRegister(eContext);
                    os.writeMOV(BITS64, reg, refr, fieldOffset);
                }
                result = idw;
            }
        }
View Full Code Here

TOP

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

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.