} kind = Kind.REGISTER; this.lsb = lsb; this.msb = msb; }
case Kind.FPUSTACK:  stack.fpuStack.pop(this);  os.writeLEA(SP, SP, 8); popFromFPU(os, SP, 0); os.writePOP(lsb); os.writePOP(msb); break;  case Kind.STACK: if (VirtualStack.checkOperandStack) { stack.operandStack.pop(this); } os.writePOP(lsb); os.writePOP(msb); break;  } kind = Kind.REGISTER; this.lsb = lsb; this.msb = msb; }
    final void loadTo(EmitterContext ec, Register lsb, Register msb) {        AbstractX86Stream os = ec.getStream();        X86RegisterPool pool = ec.getPool();        //os.log("LongItem.log called "+Integer.toString(kind));        assertCondition(lsb != msb, "lsb != msb");        assertCondition(lsb != null, "lsb != null");        assertCondition(msb != null, "msb != null");        switch (kind) {        case Kind.REGISTER:            // invariant: (msb != lsb) && (this.msb != this.lsb)            if (msb != this.lsb) {                // generic case; avoid only if msb is lsb' (value overwriting)                // invariant: (msb != this.lsb) && (msb != lsb) && (this.msb !=                // this.lsb)                // msb <- msb'                // lsb <- lsb'                if (msb != this.msb) {                    os.writeMOV(INTSIZE, msb, this.msb);                    if (lsb != this.msb) {                        pool.release(this.msb);                    }                }                if (lsb != this.lsb) {                    // invariant: (msb != this.lsb) && (lsb != this.lsb) && (msb                    // != lsb) && (this.msb != this.lsb)                    os.writeMOV(INTSIZE, lsb, this.lsb);                    //if (msb != this.lsb) { <- enforced by first if()                    pool.release(this.lsb);                    //}                }            } else if (lsb != this.msb) {                // generic case, assignment sequence inverted; avoid only if lsb                // is msb' (overwriting)                // invariant: (msb == this.lsb) && (lsb != this.msb)                // lsb <- lsb'                // msb <- msb'                // if (lsb != this.lsb) { <- always true, because msb ==                // this.lsb                os.writeMOV(INTSIZE, lsb, this.lsb);                //	if (msb != this.lsb) { <- always false, because of invariant                //		pool.release(this.lsb);                //	}                // }                // if (msb != this.msb) { <- always true, because of invariant                os.writeMOV(INTSIZE, msb, this.msb);                //	if (lsb != this.msb) { <- always true, because of invariant                pool.release(this.msb);                //	}                // }            } else {                // invariant: (msb == this.lsb) && (lsb == this.msb)                // swap registers                //TODO: handle allocation failure                Register reg = pool.request(JvmType.INT);                os.writeMOV(INTSIZE, reg, this.lsb);                os.writeMOV(INTSIZE, this.lsb, this.msb);                os.writeMOV(INTSIZE, this.msb, reg);                pool.release(reg);            }            break;        case Kind.LOCAL:            os.writeMOV(INTSIZE, lsb, FP, offsetToFP);            os.writeMOV(INTSIZE, msb, FP, offsetToFP + 4);            break;        case Kind.CONSTANT:            loadToConstant(ec, os, lsb, msb);            break;        case Kind.FPUSTACK:            //TODO            notImplemented();            break;        case Kind.STACK:            if (VirtualStack.checkOperandStack) {                final VirtualStack stack = ec.getVStack();                stack.operandStack.pop(this);            }            os.writePOP(lsb);            os.writePOP(msb);            break;        }        kind = Kind.REGISTER;        this.lsb = lsb;        this.msb = msb;    }