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_lshr() {    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 13 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: T0 <- T1, or replace the low half with the high half.  This accounts for the 32 bit shift    // 9: shift T0 right arithmetic by ECX bits    // 10: ECX <- 31    // 11: shift T1 right arithmetic by ECX=31 bits, thus exending the sigh    // 12: branch to step 15    // 13: shift right double from T1 into T0 by ECX bits.  T1 is unaltered    // 14: shift right arithmetic T1, the high half, also by ECX bits    // 15: push high half from T1    // 16: push the low half from T0    // 17: restore JTOC    asm.emitPOP_Reg (JTOC);                 // original shift amount 6 bits    asm.emitPOP_Reg (T0);                   // pop low half     asm.emitPOP_Reg (T1);                   // pop high    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 (T0, T1);               // replace low with high    asm.emitSAR_Reg_Reg (T0, ECX);                   // and shift it    asm.emitMOV_Reg_Imm (ECX, 31);    asm.emitSAR_Reg_Reg (T1, ECX);                   // set high half    VM_ForwardReference fr2 = asm.forwardJMP();    fr1.resolve(asm);    asm.emitSHRD_Reg_Reg_Reg(T0, T1, ECX);          // shift low half (step 13)    asm.emitSAR_Reg_Reg (T1, ECX);                   // shift high half    fr2.resolve(asm);    asm.emitPUSH_Reg(T1);                   // push high half (step 15)    asm.emitPUSH_Reg(T0);                   // push low half    // restore JTOC    VM_ProcessorLocalState.emitMoveFieldToReg(asm, JTOC, VM_Entrypoints.jtocField.getOffset());  }