if (asm.fits(16, -low)) {
if (VM_Assembler.fits(16, -low)) {
  protected final void emit_tableswitch(int defaultval, int low, int high) {    if (unreachableBytecode) {      edgeCounterIdx += high-low+2; // allocate n+1 counters      return;    }    assignRegisters(1, VOID_TYPE); // three fixed scratch regs    // S0 -- holds purely temporary values    // S1 -- edge counter address    // fxw0 -- index/offset    int fxw0 = getTempRegister(WORD_TYPE);          //-#if RVM_WITH_QUICK_COMPILER_MOVE_ELIMINATION    moveElimFinishBlock(currentStackHeight-1);    //-#endif    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;    // sri0 is index    if (asm.fits(16, -low)) {      asm.emitADDI(fxw0, -low, sri0);    } else {      asm.emitLVAL(S0, low);      asm.emitSUBFC (fxw0, S0, sri0);     }    asm.emitLVAL(S1, n);    asm.emitCMPL(fxw0, S1);    if (options.EDGE_COUNTERS) {      edgeCounterIdx += n+1; // allocate n+1 counters      // Load counter array for this method      asm.emitLAddrToc (S1, VM_Entrypoints.edgeCountersField.getOffset());      asm.emitLAddrOffset(S1, S1, getEdgeCounterOffset());            VM_ForwardReference fr = asm.emitForwardBC(LT); // jump around jump to default target      incEdgeCounter(S1, 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(S0);         // S0 is base of table    asm.emitSLWI (fxw0, fxw0,  LOG_BYTES_IN_INT); // convert to bytes    if (options.EDGE_COUNTERS) {      incEdgeCounterIdx(S1, S0, firstCounter, fxw0);      asm.emitMFLR(S0);         // restore base of table    }    asm.emitLIntX  (fxw0, fxw0, S0); // fxw0 is relative offset of desired case    asm.emitADD  (S0, S0, fxw0); // S0 is absolute address of desired case    asm.emitMTCTR(S0);    asm.emitBCCTR ();    releaseTempRegisters();  } 