Package org.jnode.assembler.x86

Examples of org.jnode.assembler.x86.X86Register


        setKind((byte) 0);
    }

    private final 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


     * @see org.jnode.vm.x86.compiler.l1a.Item#load(EmitterContext)
     */
    final void load(EmitterContext ec) {
        if (!isGPR()) {
            final X86RegisterPool pool = ec.getGPRPool();
            X86Register r = pool.request(getType(), this);
            if (r == null) {
                final VirtualStack vstack = ec.getVStack();
                vstack.push(ec);
                r = pool.request(getType(), this);
            }
View Full Code Here

     *
     * @param ec
     */
    final void loadToGPR(EmitterContext ec) {
        if (!isGPR()) {
            X86Register r = ec.getGPRPool().request(JvmType.INT);
            if (r == null) {
                ec.getVStack().push(ec);
                r = ec.getGPRPool().request(JvmType.INT);
            }
            if (VmUtils.verifyAssertions())
View Full Code Here

     * @param ec
     */
    final void loadToBITS8GPR(EmitterContext ec) {
        if (!isGPR() || !gpr.isSuitableForBits8()) {
            final X86RegisterPool pool = ec.getGPRPool();
            X86Register r = pool.request(JvmType.INT, this, true);
            if (r == null) {
                ec.getVStack().push(ec);
                r = ec.getGPRPool().request(JvmType.INT, this, true);
            }
            if (VmUtils.verifyAssertions())
View Full Code Here

    final void spill(EmitterContext ec, X86Register reg) {
        if (VmUtils.verifyAssertions()) {
            VmUtils._assert(isGPR() && (this.gpr.getNr() == reg.getNr()), "spill1 gpr=" + gpr + ", reg=" + reg);
        }
        final X86RegisterPool pool = ec.getGPRPool();
        X86Register r = pool.request(getType());
        if (r == null) {
            ec.getVStack().push(ec);
            if (getKind() == Kind.STACK) {
                return;
            }
View Full Code Here

     * @see org.jnode.vm.x86.compiler.l1a.Item#load(EmitterContext)
     */
    final void load(EmitterContext ec) {
        if (!isGPR()) {
            final X86RegisterPool pool = ec.getGPRPool();
            X86Register r = pool.request(getType(), this);
            if (r == null) {
                final VirtualStack vstack = ec.getVStack();
                vstack.push(ec);
                r = pool.request(getType(), this);
            }
View Full Code Here

     *
     * @param ec
     */
    final void loadToGPR(EmitterContext ec) {
        if (!isGPR()) {
            X86Register r = ec.getGPRPool().request(JvmType.INT);
            if (r == null) {
                ec.getVStack().push(ec);
                r = ec.getGPRPool().request(JvmType.INT);
            }
            if (VmUtils.verifyAssertions())
View Full Code Here

     * @param ec
     */
    final void loadToBITS8GPR(EmitterContext ec) {
        if (!isGPR() || !gpr.isSuitableForBits8()) {
            final X86RegisterPool pool = ec.getGPRPool();
            X86Register r = pool.request(JvmType.INT, this, true);
            if (r == null) {
                ec.getVStack().push(ec);
                r = ec.getGPRPool().request(JvmType.INT, this, true);
            }
            if (VmUtils.verifyAssertions())
View Full Code Here

    final void spill(EmitterContext ec, X86Register reg) {
        if (VmUtils.verifyAssertions()) {
            VmUtils._assert(isGPR() && (this.gpr.getNr() == reg.getNr()), "spill1 gpr=" + gpr + ", reg=" + reg);
        }
        final X86RegisterPool pool = ec.getGPRPool();
        X86Register r = pool.request(getType());
        if (r == null) {
            ec.getVStack().push(ec);
            if (getKind() == Kind.STACK) {
                return;
            }
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

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.