VM_ForwardReference fr = asm.forwardJcc(asm.LLT);
VM_ForwardReference fr = asm.forwardJcc(VM_Assembler.LLT);
  protected final void emit_tableswitch(int defaultval, int low, int high) {    int bTarget = biStart + defaultval;    int mTarget = bytecodeMap[bTarget];    int n = high-low+1;                        // n = number of normal cases (0..n-1)    asm.emitPOP_Reg (T0);                          // T0 is index of desired case    asm.emitSUB_Reg_Imm(T0, low);                     // relativize T0    asm.emitCMP_Reg_Imm(T0, n);                       // 0 <= relative index < n    if (!VM.runningTool && ((VM_BaselineCompiledMethod)compiledMethod).hasCounterArray()) {      int firstCounter = edgeCounterIdx;      edgeCounterIdx += (n + 1);      // Jump around code for default case      VM_ForwardReference fr = asm.forwardJcc(asm.LLT);      incEdgeCounter(S0, firstCounter + n);      asm.emitJMP_ImmOrLabel(mTarget, bTarget);      fr.resolve(asm);      // Increment counter for the appropriate case      incEdgeCounterIdx(S0, T0, firstCounter);    } else {      asm.emitJCC_Cond_ImmOrLabel (asm.LGE, mTarget, bTarget);   // if not, goto default case    }    asm.emitCALL_Imm(asm.getMachineCodeIndex() + 5 + (n<<LG_WORDSIZE) );     // jump around table, pushing address of 0th delta    for (int i=0; i<n; i++) {                  // create table of deltas      int offset = bcodes.getTableSwitchOffset(i);      bTarget = biStart + offset;      mTarget = bytecodeMap[bTarget];      // delta i: difference between address of case i and of delta 0      asm.emitOFFSET_Imm_ImmOrLabel(i, mTarget, bTarget );    }    bcodes.skipTableSwitchOffsets(n);    asm.emitPOP_Reg (S0);                          // S0 = address of 0th delta     asm.emitADD_Reg_RegIdx (S0, S0, T0, asm.WORD, NO_SLOT);     // S0 += [S0 + T0<<2]    asm.emitPUSH_Reg(S0);                          // push computed case address    asm.emitRET ();                            // goto case  }