while (VM_Magic.getCallerFramePointer(fp).NE(STACKFRAME_SENTINAL_FP) ){
while (VM_Magic.getCallerFramePointer(fp).NE(STACKFRAME_SENTINEL_FP) ){
  private static void deliverException(Throwable exceptionObject, 				       VM_Registers exceptionRegisters) {    //-#if RVM_FOR_IA32    VM_Magic.clearFloatingPointState();    //-#endif        // walk stack and look for a catch block    //    VM_Type exceptionType = VM_Magic.getObjectType(exceptionObject);    VM_Address fp = exceptionRegisters.getInnermostFramePointer();    while (VM_Magic.getCallerFramePointer(fp).NE(STACKFRAME_SENTINAL_FP) ){      int compiledMethodId = VM_Magic.getCompiledMethodID(fp);      if (compiledMethodId != INVISIBLE_METHOD_ID) { 	  VM_CompiledMethod compiledMethod = VM_CompiledMethods.getCompiledMethod(compiledMethodId);	  VM_ExceptionDeliverer exceptionDeliverer = compiledMethod.getExceptionDeliverer();	  VM_Address ip = exceptionRegisters.getInnermostInstructionAddress();	  VM_Address methodStartAddress = VM_Magic.objectAsAddress(compiledMethod.getInstructions());	  VM_Offset catchBlockOffset = compiledMethod.findCatchBlockForInstruction(ip.diff(methodStartAddress), exceptionType);	  if (catchBlockOffset.toInt() >= 0  ){ 	      // found an appropriate catch block	      exceptionDeliverer.deliverException(compiledMethod, 						  methodStartAddress.add(catchBlockOffset), 						  exceptionObject, 						  exceptionRegisters);	      if (VM.VerifyAssertions) VM._assert(NOT_REACHED);	  }	  	  exceptionDeliverer.unwindStackFrame(compiledMethod, exceptionRegisters);      } else {	  unwindInvisibleStackFrame(exceptionRegisters);      }      fp = exceptionRegisters.getInnermostFramePointer();    }    // no appropriate catch block found    //    VM.enableGC();    exceptionObject.printStackTrace();    VM_Thread.terminate();    if (VM.VerifyAssertions) VM._assert(NOT_REACHED);  }