Ignore:
Timestamp:
Feb 11, 2009, 12:03:25 AM (15 years ago)
Author:
rosiere
Message:

1) Fix test in Direction_Glue for Conditionnal Branch
2) Fix Instruction Address Compute

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_transition.cpp

    r106 r107  
    422422
    423423              // In all case : update good_take
    424               reg_UPDATE_PREDICTION_TABLE [context][depth]._good_take = good_take;
     424              reg_UPDATE_PREDICTION_TABLE [context][depth]._good_take    = good_take;
     425
     426              // Write address_dest if need read register
     427              Tbranch_condition_t condition = reg_UPDATE_PREDICTION_TABLE [context][depth]._condition;
     428             
     429              if ((condition == BRANCH_CONDITION_READ_REGISTER_WITHOUT_WRITE_STACK) or
     430                  (condition == BRANCH_CONDITION_READ_REGISTER_WITH_WRITE_STACK   ) or
     431                  (condition == BRANCH_CONDITION_READ_STACK                       ) )
     432                reg_UPDATE_PREDICTION_TABLE [context][depth]._address_dest = good_addr;
    425433            }
    426434
     
    599607              log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * BRANCH_EVENT [%d] - Accepted",i);
    600608
    601 #ifdef DEBUG_TEST
    602               if (reg_EVENT_STATE [i] != EVENT_STATE_UPDATE_CONTEXT)
    603                 throw ERRORMORPHEO(FUNCTION,_("Decod : invalid event state."));
    604 #endif
    605              
    606               // Change state
    607               log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * EVENT [%d] <- EVENT_STATE_WAIT_END_EVENT (branch_event)",i);
    608              
    609               reg_EVENT_STATE [i] = EVENT_STATE_WAIT_END_EVENT;
     609              // if different : an other branch is occured
     610              if (reg_EVENT_STATE [i] == EVENT_STATE_UPDATE_CONTEXT)
     611                {
     612                  // Change state
     613                  log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * EVENT [%d] <- EVENT_STATE_WAIT_END_EVENT (branch_event)",i);
     614                 
     615                  reg_EVENT_STATE [i] = EVENT_STATE_WAIT_END_EVENT;
     616                }
    610617            }
    611618
     
    866873        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"      * reg_UFPT_NB_UPDATE      : %d",reg_UFPT_NB_UPDATE      [i]);
    867874        for (uint32_t j=0; j<_param->_size_ufpt_queue[i]; j++)
    868           log_printf(TRACE,Update_Prediction_Table,FUNCTION,"        [%d] %.4d, %.8x %.8x, %.1d   %.1d, %.8d %.8x %.4d - %s",
     875          log_printf(TRACE,Update_Prediction_Table,FUNCTION,"        [%d] %.4d, %.8x (%.8x) %.8x (%.8x), %.1d   %.1d, %.8d %.8x (%.8x) %.4d - %s",
    869876                     j,
    870877                     reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._condition,
    871878                     reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._address_src,
     879                     reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._address_src<<2,
    872880                     reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._address_dest,
     881                     reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._address_dest<<2,
    873882                     reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._last_take,
    874883                     reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._is_accurate,
    875884                     reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._history,
    876885                     reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._address_ras,
     886                     reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._address_ras<<2,
    877887                     reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._index_ras,
    878888                     toString(reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._state).c_str()
     
    886896        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"      * reg_UPT_EMPTY           : %d",reg_UPT_EMPTY          [i]);
    887897        for (uint32_t j=0; j<_param->_size_upt_queue[i]; j++)
    888           log_printf(TRACE,Update_Prediction_Table,FUNCTION,"        [%d] %.4d, %.8x %.8x, %.1d %.1d %.1d, %.8d %.8x %.4d - %s",
     898          log_printf(TRACE,Update_Prediction_Table,FUNCTION,"        [%d] %.4d, %.8x (%.8x) %.8x (%.8x), %.1d %.1d %.1d, %.8d %.8x (%.8x) %.4d - %s",
    889899                     j,
    890900                     reg_UPDATE_PREDICTION_TABLE [i][j]._condition,
    891901                     reg_UPDATE_PREDICTION_TABLE [i][j]._address_src,
     902                     reg_UPDATE_PREDICTION_TABLE [i][j]._address_src<<2,
    892903                     reg_UPDATE_PREDICTION_TABLE [i][j]._address_dest,
     904                     reg_UPDATE_PREDICTION_TABLE [i][j]._address_dest<<2,
    893905                     reg_UPDATE_PREDICTION_TABLE [i][j]._last_take,
    894906                     reg_UPDATE_PREDICTION_TABLE [i][j]._good_take,
     
    896908                     reg_UPDATE_PREDICTION_TABLE [i][j]._history,
    897909                     reg_UPDATE_PREDICTION_TABLE [i][j]._address_ras,
     910                     reg_UPDATE_PREDICTION_TABLE [i][j]._address_ras<<2,
    898911                     reg_UPDATE_PREDICTION_TABLE [i][j]._index_ras,
    899912                     toString(reg_UPDATE_PREDICTION_TABLE [i][j]._state).c_str()
Note: See TracChangeset for help on using the changeset viewer.