assertCondition(eContext.getGPRPool().isFree(X86Register.EAX), "EAX not free"); assertCondition(eContext.getGPRPool().isFree(X86Register.EBX), "EBX not free"); assertCondition(eContext.getGPRPool().isFree(X86Register.ECX), "ECX not free"); assertCondition(eContext.getGPRPool().isFree(X86Register.EDX), "EDX not free"); assertCondition(eContext.getGPRPool().isFree(X86Register.ESI), "ESI not free");
	public final void visit_lmul() {        // Maintain counter        counters.getCounter("lmul").inc();        if (os.isCode32()) {            final Label curInstrLabel = getCurInstrLabel();            // TODO: port to orp-style			vstack.push(eContext);			final LongItem v2 = vstack.popLong();			final LongItem v1 = vstack.popLong();			v2.release1(eContext);			v1.release1(eContext);						writePOP64(X86Register.EBX, X86Register.ECX); // Value 2			final GPR v2_lsb = X86Register.EBX;			final GPR v2_msb = X86Register.ECX;			writePOP64(X86Register.ESI, X86Register.EDI); // Value 1			final GPR v1_lsb = X86Register.ESI;			final GPR v1_msb = X86Register.EDI;						final Label tmp1 = new Label(curInstrLabel + "$tmp1");			final Label tmp2 = new Label(curInstrLabel + "$tmp2");            final GPR EAX = X86Register.EAX;            final GPR EDX = X86Register.EDX;						os.writeMOV(INTSIZE, EAX, v1_msb); // hi2			os.writeOR(EAX, v2_msb); // hi1 | hi2			os.writeJCC(tmp1, X86Constants.JNZ);			os.writeMOV(INTSIZE, EAX, v1_lsb); // lo2			os.writeMUL_EAX(v2_lsb); // lo1*lo2			os.writeJMP(tmp2);			os.setObjectRef(tmp1);			os.writeMOV(INTSIZE, EAX, v1_lsb); // lo2			os.writeMUL_EAX(v2_msb); // hi1*lo2			os.writeMOV(INTSIZE, v2_msb, EAX);			os.writeMOV(INTSIZE, EAX, v1_msb); // hi2			os.writeMUL_EAX(v2_lsb); // hi2*lo1			os.writeADD(v2_msb, EAX); // hi2*lo1 + hi1*lo2			os.writeMOV(INTSIZE, EAX, v1_lsb); // lo2			os.writeMUL_EAX(v2_lsb); // lo1*lo2			os.writeADD(EDX, v2_msb); // hi2*lo1 + hi1*lo2 +			// hi(lo1*lo2)			os.setObjectRef(tmp2);			// Reload the statics table, since it was destroyed here			helper.writeLoadSTATICS(curInstrLabel, "lmul", false);						// Push			final LongItem result = (LongItem) L1AHelper                    .requestDoubleWordRegisters(eContext, JvmType.LONG, EAX,                            EDX);			vstack.push(result);		} else {			final LongItem v2 = vstack.popLong();			final LongItem v1 = vstack.popLong();			v2.load(eContext);			v1.load(eContext);			os.writeIMUL(v1.getRegister(eContext), v2.getRegister(eContext));			v2.release(eContext);			vstack.push(v1);		}	}