Example #1
0
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();
}