if (asm.fits(16, -low)) {
if (VM_Assembler.fits(16, -low)) {
  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)    int firstCounter = edgeCounterIdx; // only used if options.EDGE_COUNTERS;    popInt(T0);  // T0 is index    if (asm.fits(16, -low)) {      asm.emitADDI(T0, -low, T0);    } else {      asm.emitLVAL(T1, low);      asm.emitSUBFC (T0, T1, T0);     }    asm.emitLVAL(T2, n);    asm.emitCMPL(T0, T2);    if (options.EDGE_COUNTERS) {      edgeCounterIdx += n+1; // allocate n+1 counters      // Load counter array for this method      asm.emitLAddrToc (T2, VM_Entrypoints.edgeCountersField.getOffset());      asm.emitLAddrOffset(T2, T2, getEdgeCounterOffset());            VM_ForwardReference fr = asm.emitForwardBC(LT); // jump around jump to default target      incEdgeCounter(T2, S0, firstCounter + n);      asm.emitB (mTarget, bTarget);      fr.resolve(asm);    } else {      // conditionally jump to default target      if (bTarget - SHORT_FORWARD_LIMIT < biStart) {        asm.emitShortBC(GE, mTarget, bTarget);      } else {        asm.emitBC  (GE, mTarget, bTarget);       }    }    VM_ForwardReference fr1 = asm.emitForwardBL();    for (int i=0; i<n; i++) {      int offset = bcodes.getTableSwitchOffset(i);      bTarget = biStart + offset;      mTarget = bytecodeMap[bTarget];      asm.emitSwitchCase(i, mTarget, bTarget);    }    bcodes.skipTableSwitchOffsets(n);    fr1.resolve(asm);    asm.emitMFLR(T1);         // T1 is base of table    asm.emitSLWI (T0, T0,  LOG_BYTES_IN_INT); // convert to bytes    if (options.EDGE_COUNTERS) {      incEdgeCounterIdx(T2, S0, firstCounter, T0);    }    asm.emitLIntX  (T0, T0, T1); // T0 is relative offset of desired case    asm.emitADD  (T1, T1, T0); // T1 is absolute address of desired case    asm.emitMTCTR(T1);    asm.emitBCCTR ();  }