void psMovementManager::HandleMessage(MsgEntry* me) { switch ( me->GetType() ) { case MSGTYPE_MOVEINFO: // Initial info about modes and moves { if (ready) { Bug1("Received second set of movement info!"); return; } psMovementInfoMessage movemsg(me); SetupMovements(movemsg); return; } case MSGTYPE_MOVELOCK: // Movement lockout started { // The server will override any attempts to move during a lockout. // The client should lockout controls too, until the server says otherwise. psMoveLockMessage lockmsg(me); LockMoves(lockmsg.locked); return; } case MSGTYPE_MOVEMOD: // Movement modifier { psMoveModMsg modmsg(me); HandleMod(modmsg); return; } } }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Operand* Peephole::Simplify(Instruction* instr) { // Set the insertion point for new instructions; all new instructions // after the current one, in the order they are created. irGen_.SetInsertionPoint(instr); switch(instr->GetOpcode()) { case Instr_Add: { return PreserveUSO(instr, HandleAdd(instr->GetSourceOp(0), instr->GetSourceOp(1), instr->ParentBlock())); } case Instr_Sub: { return PreserveUSO(instr, HandleSub(instr->GetSourceOp(0), instr->GetSourceOp(1), instr->ParentBlock())); } case Instr_Mul: { return PreserveUSO(instr, HandleMul(instr->GetSourceOp(0), instr->GetSourceOp(1), instr->ParentBlock())); } case Instr_Div: { auto arithInstr = instr->As<ArithmeticInstr>(); return PreserveUSO(instr, HandleDiv(arithInstr->LeftOp(), arithInstr->RightOp(), instr->ParentBlock(), arithInstr->HasNoRemainder())); } case Instr_Udiv: { return PreserveUSO(instr, HandleUdiv(instr->GetSourceOp(0), instr->GetSourceOp(1), instr->ParentBlock())); } case Instr_Mod: { return PreserveUSO(instr, HandleMod(instr->GetSourceOp(0), instr->GetSourceOp(1), instr->ParentBlock())); } case Instr_Umod: { return PreserveUSO(instr, HandleUmod(instr->GetSourceOp(0), instr->GetSourceOp(1), instr->ParentBlock())); } case Instr_Fadd: { auto arithInstr = instr->As<ArithmeticInstr>(); return HandleFadd(arithInstr->LeftOp(), arithInstr->RightOp(), arithInstr->GetFPMode()); } case Instr_Fsub: { auto arithInstr = instr->As<ArithmeticInstr>(); return HandleFsub(arithInstr->LeftOp(), arithInstr->RightOp(), arithInstr->GetFPMode()); } case Instr_Fmul: { auto arithInstr = instr->As<ArithmeticInstr>(); return HandleFmul(arithInstr->LeftOp(), arithInstr->RightOp(), arithInstr->GetFPMode()); } case Instr_Fdiv: { auto arithInstr = instr->As<ArithmeticInstr>(); return HandleFdiv(arithInstr->LeftOp(), arithInstr->RightOp(), arithInstr->GetFPMode()); } case Instr_And: return HandleAnd(instr->GetSourceOp(0), instr->GetSourceOp(1), instr->ParentBlock()); case Instr_Or: return HandleOr(instr->GetSourceOp(0), instr->GetSourceOp(1), instr->ParentBlock()); case Instr_Xor: return HandleXor(instr->GetSourceOp(0), instr->GetSourceOp(1), instr->ParentBlock()); case Instr_Shl: return HandleShl(instr->As<ShlInstr>()); case Instr_Shr: return HandleShr(instr->As<ShrInstr>()); case Instr_Ushr: return HandleUshr(instr->As<UshrInstr>()); case Instr_Cmp: return HandleCmp(instr->As<CmpInstr>()); case Instr_Ucmp: return HandleUcmp(instr->As<UcmpInstr>()); case Instr_Fcmp: return HandleFcmp(instr->As<FcmpInstr>()); case Instr_Trunc: return HandleTrunc(instr->As<TruncInstr>()); case Instr_Sext: return HandleSext(instr->As<SextInstr>()); case Instr_Zext: return HandleZext(instr->As<ZextInstr>()); case Instr_Ftrunc: return HandleFtrunc(instr->As<FtruncInstr>()); case Instr_Fext: return HandleFext(instr->As<FextInstr>()); case Instr_Ftoi: return HandleFtoi(instr->As<FtoiInstr>()); case Instr_Ftoui: return HandleFtoui(instr->As<FtouiInstr>()); case Instr_Itof: return HandleItof(instr->As<ItofInstr>()); case Instr_Itop: return HandleItop(instr->As<ItopInstr>()); case Instr_Ptoi: return HandlePtoi(instr->As<PtoiInstr>()); case Instr_Ptop: return HandlePtop(instr->As<PtopInstr>()); case Instr_Uitof: return HandleUitof(instr->As<UitofInstr>()); case Instr_Call: return HandleCall(instr->As<CallInstr>()); case Instr_Address: return HandleAddress(instr->As<AddressInstr>()); case Instr_Index: return HandleIndex(instr->As<IndexInstr>()); case Instr_Element: return HandleElement(instr->As<ElementInstr>()); case Instr_Load: return HandleLoad(instr->As<LoadInstr>()); case Instr_Store: return HandleStore(instr->As<StoreInstr>()); case Instr_Question: return HandleQuestion(instr->As<QuestionInstr>()); case Instr_Phi: return HandlePhi(instr->As<PhiInstr>()); } // This is an instruction that is not supported. return nullptr; }