void Pipeline::execute(int cycle){ debug("Execute Open: %d", cycle); reservationStations.updateStations(&rob); CDB.clear(); vector<RSEntry*> toBeExecuted = reservationStations.checkPendingReservationStations(cycle); vector<pair<int,int>* > robCommits; //execute instructions in toBeExecuted. for(int i=0;i<toBeExecuted.size();i++){ RSEntry* rs = toBeExecuted.at(i); pair<int,int>* robCommit = aluUnit.execute(rs,&rob,memory_map); if(robCommit != NULL) robCommits.push_back(robCommit); if(rs->getRemainingCycles() == 0){ //execute then check if complete to move it to next stage. if(rs->instruction->isBranch() || rs->instruction->isJump()){ int evaluatedAddress = rs->result; if(rs->instruction->isBranchTaken == PREDICTION_TAKEN && predictedAddress[rs->instruction] != rs->result){ debug("branch misprediction"); resetPipeline(rs->robID,evaluatedAddress); } btb.update(rs->instruction->getMemory(), evaluatedAddress, rs->instruction->isBranchTaken); } executedInstruction.push_back(make_pair(rs,cycle)); } } for(int i=0;i<robCommits.size();i++) rob.setDestination(robCommits.at(i)->first, robCommits.at(i)->second); debug("Execute End: %d", cycle); }
void AAH_RXPlayer::cleanupSocket() { if (sock_fd_ >= 0) { if (multicast_joined_) { int res; struct ip_mreq mreq; mreq.imr_multiaddr = listen_addr_.sin_addr; mreq.imr_interface.s_addr = htonl(INADDR_ANY); res = setsockopt(sock_fd_, IPPROTO_IP, IP_DROP_MEMBERSHIP, &mreq, sizeof(mreq)); if (res < 0) { ALOGW("Failed to leave multicast group. (%d, %d)", res, errno); } multicast_joined_ = false; } close(sock_fd_); sock_fd_ = -1; } resetPipeline(); }