os.writeMOV(INTSIZE, lsb, FP, getOffsetToFP()); os.writeMOV(INTSIZE, msb, FP, getOffsetToFP()+4);
os.writeMOV(INTSIZE, lsb, FP, offsetToFP); os.writeMOV(INTSIZE, msb, FP, offsetToFP+4);
	void loadTo(EmitterContext ec, Register lsb, Register msb) {		AbstractX86Stream os = ec.getStream();		X86RegisterPool pool = ec.getPool();		os.log("LongItem.log called "+Integer.toString(kind));				myAssert(lsb != msb);		switch (kind) {			case 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 = (Register)pool.request(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 LOCAL:				os.writeMOV(INTSIZE, lsb, FP, getOffsetToFP());				os.writeMOV(INTSIZE, msb, FP, getOffsetToFP()+4);				break;							case CONSTANT:			    final int lsbv = (int) (value & 0xFFFFFFFFL);			    final int msbv = (int) ((value >>> 32) & 0xFFFFFFFFL);				os.writeMOV_Const(lsb, lsbv);				os.writeMOV_Const(msb, msbv);				break;							case FREGISTER:				//TODO				notImplemented();				break;							case STACK:				if (VirtualStack.checkOperandStack) {					final VirtualStack stack = ec.getVStack();					stack.popFromOperandStack(this);				}				os.writePOP(lsb);				os.writePOP(msb);				break;		}		kind = REGISTER;		this.lsb = lsb;		this.msb = msb;	}