Package org.jnode.assembler.x86

Examples of org.jnode.assembler.x86.X86Assembler


        if (JvmType.isFloat(type)) {
            final boolean is32bit = !fieldRef.isWide();
            if (sf.isShared()) {
                helper.writeGetStaticsEntryToFPU(curInstrLabel, (VmSharedStaticsEntry) sf, is32bit);
            } else {
                final GPR tmp = (GPR) L1AHelper.requestRegister(eContext,
                    JvmType.REFERENCE, false);
                helper.writeGetStaticsEntryToFPU(curInstrLabel,
                    (VmIsolatedStaticsEntry) sf, is32bit, tmp);
                L1AHelper.releaseRegister(eContext, tmp);
            }
            final Item result = ifac.createFPUStack(type);
            vstack.fpuStack.push(result);
            vstack.push(result);
        } else if (!fieldRef.isWide()) {
            final WordItem result = L1AHelper.requestWordRegister(eContext,
                type, false);
            final GPR resultr = result.getRegister();
            if (os.isCode32() || (type != JvmType.REFERENCE)) {
                if (sf.isShared()) {
                    helper.writeGetStaticsEntry(curInstrLabel, resultr, (VmSharedStaticsEntry) sf);
                } else {
                    final GPR tmp = (GPR) L1AHelper.requestRegister(eContext,
                        JvmType.REFERENCE, false);
                    helper.writeGetStaticsEntry(curInstrLabel, resultr,
                        (VmIsolatedStaticsEntry) sf, tmp);
                    L1AHelper.releaseRegister(eContext, tmp);
                }
            } else {
                if (sf.isShared()) {
                    helper.writeGetStaticsEntry64(curInstrLabel, (GPR64) resultr, (VmSharedStaticsEntry) sf);
                } else {
                    helper.writeGetStaticsEntry64(curInstrLabel, (GPR64) resultr, (VmIsolatedStaticsEntry) sf);
                }
            }
            vstack.push(result);
        } else {
            final DoubleWordItem result = L1AHelper.requestDoubleWordRegisters(
                eContext, type);
            if (os.isCode32()) {
                final GPR lsb = result.getLsbRegister(eContext);
                final GPR msb = result.getMsbRegister(eContext);
                if (sf.isShared()) {
                    helper.writeGetStaticsEntry64(curInstrLabel, lsb, msb, (VmSharedStaticsEntry) sf);
                } else {
                    helper.writeGetStaticsEntry64(curInstrLabel, lsb, msb, (VmIsolatedStaticsEntry) sf);
                }
View Full Code Here


        } else {
            if (countConstOps) {
                counters.getCounter("i2b-nonconst").inc();
            }
            v.loadToBITS8GPR(eContext);
            final GPR r = v.getRegister();
            os.writeMOVSX(r, r, BYTESIZE);
            vstack.push(v);
        }
    }
View Full Code Here

        } else {
            if (countBytecode) {
                counters.getCounter("i2c-nonconst").inc();
            }
            v.load(eContext);
            final GPR r = v.getRegister();
            os.writeMOVZX(r, r, WORDSIZE);
            vstack.push(v);
        }
    }
View Full Code Here

        final IntItem v = vstack.popInt();
        if (v.isConstant()) {
            vstack.push(ifac.createIConst(eContext, (short) v.getValue()));
        } else {
            v.load(eContext);
            final GPR r = v.getRegister();
            os.writeMOVSX(r, r, WORDSIZE);
            vstack.push(v);
        }
    }
View Full Code Here

            final RefItem tmp = v2;
            v2 = v1;
            v1 = tmp;
        }

        final GPR r1 = v1.getRegister();

        switch (v2.getKind()) {
            case Item.Kind.GPR:
                os.writeCMP(r1, v2.getRegister());
                break;
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

TOP

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

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.