new OPT_SysMethodOperand("sysLongDivide"),
new OPT_SysMethodOperand(VM_Entrypoints.sysLongDivideIPField),
    final void perform (OPT_IR ir) {      for (OPT_Instruction s = ir.firstInstructionInCodeOrder(); s != 	     null; s = s.nextInstructionInCodeOrder()) {        switch (s.getOpcode()) {	case ARRAYLENGTH_opcode:	  {	    if (VM.BuildForRealtimeGC) {	    //-#if RVM_WITH_REALTIME_GC		VM_SegmentedArray.optArrayLength(ir,s);	    //-#endif	    }	    else 		// array_ref[ARRAY_LENGTH_OFFSET] contains the length		Load.mutate(s, INT_LOAD, GuardedUnary.getClearResult(s), 			    GuardedUnary.getClearVal(s), I(ARRAY_LENGTH_OFFSET), 			    new OPT_LocationOperand(), 			    GuardedUnary.getClearGuard(s));	  }	  break;	case GET_OBJ_STATUS_opcode:	  {	    // TODO: Valid location operand?	    OPT_Operand address = GuardedUnary.getClearVal(s);	    Load.mutate(s, INT_LOAD, GuardedUnary.getClearResult(s), 			address, I(OBJECT_STATUS_OFFSET), null, 			GuardedUnary.getClearGuard(s));	  }	  break;        case SET_OBJ_STATUS_opcode:          {            Store.mutate(s, INT_STORE, GuardedSet.getClearVal(s),                GuardedSet.getClearRef(s), I(OBJECT_STATUS_OFFSET), null,                GuardedSet.getClearGuard(s));          }          break;	case GET_OBJ_TIB_opcode:	  {	    // TODO: Valid location operand?	    OPT_Operand address = GuardedUnary.getClearVal(s);	    Load.mutate(s, INT_LOAD, GuardedUnary.getClearResult(s), 			address, I(OBJECT_TIB_OFFSET), null, 			GuardedUnary.getClearGuard(s));	  }	  break;	case GET_OBJ_RAW_opcode:	  {	    OPT_Operand address = GuardedUnary.getClearVal(s);	    Load.mutate(s, INT_LOAD, GuardedUnary.getClearResult(s), 			address, I(OBJECT_REDIRECT_OFFSET), OPT_LocationOperand.createRedirection(),			GetField.getClearGuard(s));	  }	  break;	case GET_CLASS_TIB_opcode:	  {	    OPT_TypeOperand type = (OPT_TypeOperand)Unary.getVal(s);	    int offset = type.type.getTibOffset();	    Load.mutate(s, INT_LOAD, Unary.getClearResult(s), 			ir.regpool.makeJTOCOp(ir,s), 			I(offset), new OPT_LocationOperand(offset));	  }	  break;	case GET_TYPE_FROM_TIB_opcode:	  {	    // TODO: Valid location operand?	    Load.mutate(s, INT_LOAD, Unary.getClearResult(s), 			Unary.getClearVal(s), 			I(TIB_TYPE_INDEX << 2), null);	  }	  break;	case GET_SUPERCLASS_IDS_FROM_TIB_opcode:	  {	    // TODO: Valid location operand?	    Load.mutate(s, INT_LOAD, Unary.getClearResult(s), 			Unary.getClearVal(s), 			I(TIB_SUPERCLASS_IDS_INDEX << 2), null);	  }	  break;	case GET_IMPLEMENTS_TRITS_FROM_TIB_opcode:	  {	    // TODO: Valid location operand?	    Load.mutate(s, INT_LOAD, Unary.getClearResult(s), 			Unary.getClearVal(s), 			I(TIB_IMPLEMENTS_TRITS_INDEX << 2), null);	  }	  break;	case GET_ARRAY_ELEMENT_TIB_FROM_TIB_opcode:	  {	    // TODO: Valid location operand?	    Load.mutate(s, INT_LOAD, Unary.getClearResult(s), 			Unary.getClearVal(s), 			I(TIB_ARRAY_ELEMENT_TIB_INDEX << 2), null);	  }	  break;	case LONG_DIV_opcode:	  {	    CallSpecial.mutate2(s, SYSCALL, 				GuardedBinary.getClearResult(s), 				null, 				new OPT_SysMethodOperand("sysLongDivide"), 				GuardedBinary.getClearVal1(s), 				GuardedBinary.getClearVal2(s));	    OPT_CallingConvention.expandSysCall(s, ir);	  }	  break;	case LONG_REM_opcode:	  {	    CallSpecial.mutate2(s, SYSCALL, 				GuardedBinary.getClearResult(s), 				null, 				new OPT_SysMethodOperand("sysLongRemainder"), 				GuardedBinary.getClearVal1(s), 				GuardedBinary.getClearVal2(s));	    OPT_CallingConvention.expandSysCall(s, ir);	  }	  break;	default:	  break;        }      }    }