Ignore:
Timestamp:
Apr 20, 2009, 11:29:17 PM (15 years ago)
Author:
rosiere
Message:

1) Write queue with mealy
2) Network : fix bug
3) leak memory

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_transition.cpp

    r114 r115  
    2828      {
    2929        // Clear all bank
    30         for (uint32_t i=0; i<_param->_nb_bank; i++)
     30        for (uint32_t i=0; i<_param->_nb_bank; ++i)
    3131          {
    32             _rob [i].clear();
     32            while(not _rob[i].empty())
     33              {
     34                delete _rob[i].front();
     35                _rob[i].pop_front();
     36              }
    3337            reg_BANK_PTR [i] = 0;
    3438          }
     
    126130
    127131                  Texception_t exception    = PORT_READ(in_INSERT_EXCEPTION    [x][y]);
     132                  Tcontrol_t   no_execute   = PORT_READ(in_INSERT_NO_EXECUTE   [x][y]);
    128133
    129134                  log_printf(TRACE,Commit_unit,FUNCTION,"    * front_end_id   : %d",front_end_id);
     
    147152                  entry->exception               = exception;
    148153                  entry->exception_use           = PORT_READ(in_INSERT_EXCEPTION_USE         [x][y]);
    149                   entry->use_store_queue         = (type == TYPE_MEMORY) and (    is_store);
    150                   entry->use_load_queue          = (type == TYPE_MEMORY) and (not is_store);
     154                  entry->use_store_queue         = (type == TYPE_MEMORY) and (    is_store) and (not no_execute);
     155                  entry->use_load_queue          = (type == TYPE_MEMORY) and (not is_store) and (not no_execute);
    151156                  entry->store_queue_ptr_write   = PORT_READ(in_INSERT_STORE_QUEUE_PTR_WRITE [x][y]);
    152157                  entry->load_queue_ptr_write    = (_param->_have_port_load_queue_ptr)?PORT_READ(in_INSERT_LOAD_QUEUE_PTR_WRITE [x][y]):0;
     
    200205                      if (exception == EXCEPTION_NONE)
    201206                        {
    202                           Tcontrol_t no_execute = PORT_READ(in_INSERT_NO_EXECUTE [x][y]);
    203207                          // no_execute : l.j, l.nop, l.rfe
    204208                         
     
    208212                            {
    209213                            case TYPE_BRANCH : {entry->state=(no_execute==1)?ROB_BRANCH_COMPLETE:ROB_BRANCH_WAIT_END  ; break;}
    210                             case TYPE_MEMORY : {entry->state=(is_store  ==1)?ROB_STORE_WAIT_HEAD_OK:ROB_OTHER_WAIT_END; break;}
     214                            case TYPE_MEMORY : {entry->state=(no_execute==1)?ROB_END_OK_SPECULATIVE:(entry->state=(is_store  ==1)?ROB_STORE_WAIT_HEAD_OK:ROB_OTHER_WAIT_END); break;}
    211215                            default          : {entry->state=(no_execute==1)?ROB_END_OK_SPECULATIVE:ROB_OTHER_WAIT_END; break;}
    212216                            }
     
    331335                      default :
    332336                        {
    333                           throw ERRORMORPHEO(FUNCTION,toString(_("Commit : invalid state value (%s).\n"),toString(state).c_str()));
     337                          throw ERRORMORPHEO(FUNCTION,toString(_("Commit [%d] : Bank [%d][%d], invalid state value (%s).\n"),x,i,j,toString(state).c_str()));
    334338                          break;
    335339                        }
     
    442446                reg_NUM_BANK_HEAD = (reg_NUM_BANK_HEAD+1)%_param->_nb_bank;
    443447               
     448                delete entry;
    444449                _rob [num_bank].pop_front();
    445                 delete entry;
    446450               
    447451                // Transaction on retire interface : reset watch dog timer.
Note: See TracChangeset for help on using the changeset viewer.