if (VM.VerifyAssertions) VM.assert (ECX != T0); if (VM.VerifyAssertions) VM.assert (ECX != T1); if (VM.VerifyAssertions) VM.assert (ECX != JTOC);
if (VM.VerifyAssertions) VM._assert (ECX != T0); if (VM.VerifyAssertions) VM._assert (ECX != T1); if (VM.VerifyAssertions) VM._assert (ECX != JTOC);
  protected final void emit_lshl() {    if (VM.VerifyAssertions) VM.assert (ECX != T0); // ECX is constrained to be the shift count    if (VM.VerifyAssertions) VM.assert (ECX != T1);    if (VM.VerifyAssertions) VM.assert (ECX != JTOC);    // 1: pop shift amount into JTOC (JTOC must be restored at the end)    // 2: pop low half into T0    // 3: pop high half into T1    // 4: ECX <- JTOC, copy the shift count    // 5: JTOC <- JTOC & 32 --> if 0 then shift amount is less than 32    // 6: branch to step 12 if results is zero    // the result is not zero --> the shift amount is greater than 32    // 7: ECX <- ECX XOR JTOC   --> ECX is orginal shift amount minus 32    // 8: T1 <- T0, or replace the high half with the low half.  This accounts for the 32 bit shift    // 9: shift T1 left by ECX bits    // 10: T0 <- 0    // 11: branch to step 14    // 12: shift left double from T0 into T1 by ECX bits.  T0 is unaltered    // 13: shift left T0, the low half, also by ECX bits    // 14: push high half from T1    // 15: push the low half from T0    // 16: restore the JTOC    asm.emitPOP_Reg (JTOC);                 // original shift amount 6 bits    asm.emitPOP_Reg (T0);                   // pop low half     asm.emitPOP_Reg (T1);                   // pop high half    asm.emitMOV_Reg_Reg (ECX, JTOC);    asm.emitAND_Reg_Imm (JTOC, 32);    VM_ForwardReference fr1 = asm.forwardJcc(asm.EQ);    asm.emitXOR_Reg_Reg (ECX, JTOC);    asm.emitMOV_Reg_Reg (T1, T0);               // low replaces high    asm.emitSHL_Reg_Reg (T1, ECX);    asm.emitXOR_Reg_Reg (T0, T0);    VM_ForwardReference fr2 = asm.forwardJMP();    fr1.resolve(asm);    asm.emitSHLD_Reg_Reg_Reg(T1, T0, ECX);          // shift high half (step 12)    asm.emitSHL_Reg_Reg (T0, ECX);                   // shift low half    fr2.resolve(asm);    asm.emitPUSH_Reg(T1);                   // push high half (step 14)    asm.emitPUSH_Reg(T0);                   // push low half    // restore JTOC    VM_ProcessorLocalState.emitMoveFieldToReg(asm, JTOC, VM_Entrypoints.jtocField.getOffset());  }