Package org.jnode.assembler.x86

Examples of org.jnode.assembler.x86.X86Register


            }
            final X86RegisterPool pool = eContext.getGPRPool();
            final IntItem result;
            v.load(eContext);
            if (os.isCode32()) {
                final X86Register lsb = v.getLsbRegister(eContext);
                v.release(eContext);
                pool.request(lsb);
                result = (IntItem) ifac.createReg(eContext, JvmType.INT, lsb);
                pool.transferOwnerTo(lsb, result);
            } else {
                final X86Register reg = v.getRegister(eContext);
                final X86Register intReg = pool.getRegisterInSameGroup(reg,
                    JvmType.INT);
                v.release(eContext);
                pool.request(intReg);
                result = (IntItem) ifac.createReg(eContext, JvmType.INT, intReg);
                pool.transferOwnerTo(intReg, result);
View Full Code Here


        } else {
            final X86RegisterPool pool = eContext.getGPRPool();
            final IntItem result;
            v.load(eContext);
            if (os.isCode32()) {
                final X86Register lsb = v.getLsbRegister(eContext);
                v.release(eContext);
                pool.request(lsb);
                result = (IntItem) ifac.createReg(eContext, JvmType.INT, lsb);
                pool.transferOwnerTo(lsb, result);
            } else {
                final X86Register reg = v.getRegister(eContext);
                final X86Register intReg = pool.getRegisterInSameGroup(reg,
                    JvmType.INT);
                v.release(eContext);
                pool.request(intReg);
                result = (IntItem) ifac.createReg(eContext, JvmType.INT, intReg);
                pool.transferOwnerTo(intReg, result);
View Full Code Here

                lastRequestIndex--;
                if (lastRequestIndex < minimumRequestIndex) {
                    lastRequestIndex = regCount - 1;
                }
                final RegisterGroupUsage ru = registers[lastRequestIndex];
                final X86Register reg = ru.request(owner, type, supportBits8);
                if (reg != null) {
                    return reg;
                }
            }
        }
        for (int i = regCount - 1; i >= 0; i--) {
            final RegisterGroupUsage ru = registers[i];
            final X86Register reg = ru.request(owner, type, supportBits8);
            if (reg != null) {
                return reg;
            }
        }
        return null;
View Full Code Here

                lastRequestIndex--;
                if (lastRequestIndex < minimumRequestIndex) {
                    lastRequestIndex = regCount - 1;
                }
                final RegisterGroupUsage ru = registers[lastRequestIndex];
                final X86Register reg = ru.request(owner, type, supportBits8);
                if (reg != null) {
                    return reg;
                }
            }
        }
        for (int i = regCount - 1; i >= 0; i--) {
            final RegisterGroupUsage ru = registers[i];
            final X86Register reg = ru.request(owner, type, supportBits8);
            if (reg != null) {
                return reg;
            }
        }
        return null;
View Full Code Here

     * @return
     */
    static X86Register requestRegister(EmitterContext eContext, int type,
                                       boolean supportsBits8) {
        final X86RegisterPool pool = eContext.getGPRPool();
        X86Register r = pool.request(type, supportsBits8);
        if (r == null) {
            eContext.getVStack().push(eContext);
            r = pool.request(type, supportsBits8);
        }
        assertCondition(r != null, "failed to request register");
View Full Code Here

     */
    static WordItem requestWordRegister(EmitterContext eContext,
                                        int jvmType, boolean supportsBits8) {
        final X86RegisterPool pool = eContext.getGPRPool();
        final ItemFactory ifac = eContext.getItemFactory();
        final X86Register reg = requestRegister(eContext, jvmType,
            supportsBits8);
        final WordItem result = ifac.createReg(eContext, jvmType, reg);
        pool.transferOwnerTo(reg, result);
        return result;
    }
View Full Code Here

            }
            case TOINT: {
                if (VmUtils.verifyAssertions()) VmUtils._assert(!isstatic);
                final WordItem addr = vstack.popRef();
                addr.load(ec);
                X86Register r = addr.getRegister();
                if (os.isCode64()) {
                    r = pool.getRegisterInSameGroup(r, JvmType.INT);
                    // We just take the lower 32-bit, so no actual mov's needed.
                }
                addr.release(ec);
                L1AHelper.requestRegister(ec, r);
                final IntItem result = (IntItem) ifac.createReg(ec, JvmType.INT, r);
                pool.transferOwnerTo(r, result);
                vstack.push(result);
                break;
            }
            case TOWORD:
            case TOADDRESS:
            case TOOFFSET:
            case TOOBJECT:
            case TOOBJECTREFERENCE:
            case TOEXTENT: {
                if (VmUtils.verifyAssertions()) VmUtils._assert(!isstatic);
                final WordItem addr = vstack.popRef();
                vstack.push(addr);
                break;
            }
            case TOLONG: {
                if (VmUtils.verifyAssertions()) VmUtils._assert(!isstatic);
                final WordItem addr = vstack.popRef();
                addr.load(ec);
                final X86Register.GPR r = addr.getRegister();
                addr.release(ec);
                L1AHelper.requestRegister(ec, r);
                final LongItem result;
                if (os.isCode32()) {
                    final X86Register.GPR msb = (X86Register.GPR) L1AHelper.requestRegister(ec, JvmType.INT,
                        false);
                    result = (LongItem) ifac.createReg(ec, JvmType.LONG, r,
                        msb);
                    os.writeXOR(msb, msb);
                    pool.transferOwnerTo(msb, result);
                } else {
                    result = (LongItem) ifac.createReg(ec, JvmType.LONG, (GPR64) r);
                }
                pool.transferOwnerTo(r, result);
                vstack.push(result);
                break;
            }
            case MAX: {
                if (VmUtils.verifyAssertions()) VmUtils._assert(isstatic);
                final RefItem result = (RefItem) L1AHelper.requestWordRegister(ec,
                    JvmType.REFERENCE, false);
                final GPR r = result.getRegister();
                os.writeMOV_Const(r, -1);
                vstack.push(result);
                break;
            }
            case ONE: {
                if (VmUtils.verifyAssertions()) VmUtils._assert(isstatic);
                final RefItem result = (RefItem) L1AHelper.requestWordRegister(ec,
                    JvmType.REFERENCE, false);
                final GPR r = result.getRegister();
                os.writeMOV_Const(r, 1);
                vstack.push(result);
                break;
            }
            case ZERO:
            case NULLREFERENCE: {
                if (VmUtils.verifyAssertions()) VmUtils._assert(isstatic);
                final RefItem result = ifac.createAConst(ec, null);
                vstack.push(result);
                break;
            }
            case SIZE: {
                if (VmUtils.verifyAssertions()) VmUtils._assert(isstatic);
                final IntItem result = ifac.createIConst(ec, slotSize);
                vstack.push(result);
                break;
            }
            case ISMAX: {
                if (VmUtils.verifyAssertions()) VmUtils._assert(!isstatic);
                final WordItem addr = vstack.popRef();
                addr.load(ec);
                final IntItem result = (IntItem) L1AHelper.requestWordRegister(ec, JvmType.INT, true);
                final GPR addrr = addr.getRegister();
                final GPR resultr = result.getRegister();
                os.writeXOR(resultr, resultr);
                os.writeCMP_Const(addrr, -1);
                os.writeSETCC(resultr, X86Constants.JE);
                addr.release(ec);
                vstack.push(result);
                break;
            }
            case ISZERO:
            case ISNULL: {
                // Just convert to int
                if (VmUtils.verifyAssertions()) VmUtils._assert(!isstatic);
                final WordItem addr = vstack.popRef();
                addr.load(ec);
                final IntItem result = (IntItem) L1AHelper.requestWordRegister(ec, JvmType.INT, true);
                final GPR addrr = addr.getRegister();
                final GPR resultr = result.getRegister();
                os.writeXOR(resultr, resultr);
                os.writeTEST(addrr, addrr);
                os.writeSETCC(resultr, X86Constants.JZ);
                addr.release(ec);
                vstack.push(result);
                break;
            }
            case EQUALS:
            case EQ:
            case NE:
            case LT:
            case LE:
            case GE:
            case GT:
            case SLT:
            case SLE:
            case SGE:
            case SGT: {
                // addr .. other
                if (VmUtils.verifyAssertions()) VmUtils._assert(!isstatic);
                final RefItem other = vstack.popRef();
                final RefItem addr = vstack.popRef();
                other.load(ec);
                addr.load(ec);
                final IntItem result = (IntItem) L1AHelper.requestWordRegister(ec, JvmType.INT, true);
                final GPR resultr = result.getRegister();
                os.writeXOR(resultr, resultr);
                os.writeCMP(addr.getRegister(), other.getRegister());
                os.writeSETCC(resultr, methodToCC(mcode));
                other.release(ec);
                addr.release(ec);
                vstack.push(result);
                break;
            }
            case FROMINT:
            case FROMINTSIGNEXTEND:
            case FROMINTZEROEXTEND: {
                if (VmUtils.verifyAssertions()) VmUtils._assert(isstatic);
                final WordItem addr = vstack.popInt();
                addr.load(ec);
                GPR r = addr.getRegister();
                if (os.isCode64()) {
                    final GPR64 newR = (GPR64) pool.getRegisterInSameGroup(r, JvmType.REFERENCE);
                    if (mcode == FROMINTZEROEXTEND) {
                        // Moving the register to itself in 32-bit mode, will
                        // zero extend the top 32-bits.
                        os.writeMOV(BITS32, r, r);
                    } else {
                        // Sign extend
                        os.writeMOVSXD(newR, (GPR32) r);
                    }
                    r = newR;
                }
                addr.release(ec);
                vstack.push(L1AHelper.requestWordRegister(ec, JvmType.REFERENCE, r));
                break;
            }
            case FROMADDRESS:
            case FROMOBJECT: {
                if (VmUtils.verifyAssertions()) VmUtils._assert(isstatic);
                final RefItem obj = vstack.popRef();
                // Do nothing
                vstack.push(obj);
                break;
            }
            case FROMLONG: {
                if (VmUtils.verifyAssertions()) VmUtils._assert(isstatic);
                final LongItem addr = vstack.popLong();
                addr.load(ec);
                final X86Register r;
                if (os.isCode32()) {
                    r = addr.getLsbRegister(ec);
                } else {
                    r = addr.getRegister(ec);
                }
View Full Code Here

     * release the register afterwards.
     */
    static final X86Register requestRegister(EmitterContext eContext, int type,
                                             boolean supportsBits8) {
        final X86RegisterPool pool = eContext.getGPRPool();
        X86Register r = pool.request(type, supportsBits8);
        if (r == null) {
            eContext.getVStack().push(eContext);
            r = pool.request(type, supportsBits8);
        }
        assertCondition(r != null, "failed to request register");
View Full Code Here

     */
    static final WordItem requestWordRegister(EmitterContext eContext,
                                              int jvmType, boolean supportsBits8) {
        final X86RegisterPool pool = eContext.getGPRPool();
        final ItemFactory ifac = eContext.getItemFactory();
        final X86Register reg = requestRegister(eContext, jvmType,
            supportsBits8);
        final WordItem result = ifac.createReg(eContext, jvmType, reg);
        pool.transferOwnerTo(reg, result);
        return result;
    }
View Full Code Here

        setKind((byte) 0);
    }

    private X86Register request(EmitterContext ec, X86RegisterPool pool) {
        final X86Assembler os = ec.getStream();
        final X86Register r;
        if (os.isCode32()) {
            r = pool.request(JvmType.INT);
        } else {
            r = pool.request(getType());
        }
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.