Changeset 101 for trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_transition.cpp
- Timestamp:
- Jan 15, 2009, 6:19:08 PM (15 years ago)
- 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
r98 r101 46 46 reg_UPT_TOP_EVENT [i] = 0; 47 47 reg_UPT_UPDATE [i] = 0; 48 reg_UPT_EMPTY [i] = true; 48 49 49 50 reg_IS_ACCURATE [i] = true; … … 87 88 // UPDATE_PREDICTION_TABLE 88 89 { 89 uint32_t bottom = reg_UPT_BOTTOM [i]; 90 bool end_ok = (reg_UPDATE_PREDICTION_TABLE [i][bottom]._state == UPDATE_PREDICTION_STATE_END_OK); 91 bool end_ko = (reg_UPDATE_PREDICTION_TABLE [i][bottom]._state == UPDATE_PREDICTION_STATE_END_KO); 90 uint32_t bottom = reg_UPT_BOTTOM [i]; 91 bool end_ok = (reg_UPDATE_PREDICTION_TABLE [i][bottom]._state == UPDATE_PREDICTION_STATE_END_OK); 92 bool end_ko = (reg_UPDATE_PREDICTION_TABLE [i][bottom]._state == UPDATE_PREDICTION_STATE_END_KO); 93 // event_state_t event_state = reg_EVENT_STATE [i]; 92 94 93 95 // Test if state is end 96 // if ((end_ok or end_ko) and 97 // ((event_state != EVENT_STATE_UPDATE_CONTEXT) and 98 // (event_state != EVENT_STATE_WAIT_END_EVENT))) 94 99 if (end_ok or end_ko) 95 100 { … … 102 107 // Update pointer 103 108 reg_UPT_BOTTOM [i] = (bottom+1)%_param->_size_upt_queue[i]; 109 110 if (reg_UPT_BOTTOM [i] == reg_UPT_TOP [i]) 111 reg_UPT_EMPTY [i] = true; // free a slot 112 104 113 // if (bottom = reg_UPT_UPDATE [i]) 105 114 // reg_UPT_UPDATE [i] = reg_UPT_BOTTOM [i]; … … 108 117 reg_UPT_TOP [i] = reg_UPT_TOP_EVENT [i]; 109 118 reg_UPT_UPDATE [i] = reg_UPT_TOP_EVENT [i]; 119 120 if (reg_UPT_BOTTOM [i] != reg_UPT_TOP [i]) 121 reg_UPT_EMPTY [i] = false; 110 122 } 111 123 } … … 290 302 // Update pointer 291 303 reg_UPT_TOP [context] = (upt_ptr_write+1)%_param->_size_upt_queue [context]; 304 reg_UPT_EMPTY [context] = false; 292 305 // reg_UPT_UPDATE [context] = reg_UPT_TOP [context]; 293 306 } … … 338 351 reg_UPT_TOP_EVENT [context] = top; 339 352 353 if (reg_UPT_BOTTOM [context] == reg_UPT_TOP [context]) 354 reg_UPT_EMPTY [i] = true; 355 340 356 #ifdef DEBUG_TEST 341 357 if (reg_UPDATE_PREDICTION_TABLE [context][depth]._state != UPDATE_PREDICTION_STATE_WAIT_END) … … 483 499 if (ko) 484 500 { 501 // Ko : wait end of all instruction 502 // log_printf(TRACE,Update_Prediction_Table,FUNCTION," * UPT [%d][%d].state <- UPDATE_PREDICTION_STATE_END_KO_WAIT_END (update)",context,depth); 503 504 // reg_UPDATE_PREDICTION_TABLE [context][depth]._state = UPDATE_PREDICTION_STATE_END_KO_WAIT_END; 505 485 506 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * UPT [%d][%d].state <- UPDATE_PREDICTION_STATE_END_KO (update)",context,depth); 486 507 … … 535 556 536 557 // Free the branch with no accurate ? 537 if ( reg_UPDATE_PREDICTION_TABLE [context][depth]._is_accurate == false)558 if ( (reg_UPDATE_PREDICTION_TABLE [context][depth]._is_accurate == false) and not ko) 538 559 reg_IS_ACCURATE [context] = true; 539 560 } … … 587 608 // Tdepth_t depth = PORT_READ(in_EVENT_DEPTH [i]); 588 609 589 // Test if end of miss 610 // Test if end of miss -> all previous branch is complete 611 // -> all next branch is finish 590 612 if (event_type == EVENT_TYPE_MISS_SPECULATION) 591 613 { … … 602 624 603 625 reg_EVENT_STATE [i] = EVENT_STATE_OK; 626 reg_IS_ACCURATE [i] = true; 627 628 // Tdepth_t depth = reg_UPT_TOP [i]; 629 630 #ifdef DEBUG_TEST 631 // if (reg_UPDATE_PREDICTION_TABLE [i][depth]._state != UPDATE_PREDICTION_STATE_END_KO_WAIT_END) 632 // throw ERRORMORPHEO(FUNCTION,_("Event : invalid upt event state.")); 633 // if (reg_UPDATE_PREDICTION_TABLE [i][depth]._state != UPDATE_PREDICTION_STATE_END_KO) 634 // throw ERRORMORPHEO(FUNCTION,_("Event : invalid upt event state.")); 635 #endif 636 637 // log_printf(TRACE,Update_Prediction_Table,FUNCTION," * UPT [%d][%d].state <- UPDATE_PREDICTION_STATE_END_KO (update)",i,depth); 638 639 // reg_UPDATE_PREDICTION_TABLE [i][depth]._state = UPDATE_PREDICTION_STATE_END_KO; 640 604 641 } 605 642 } … … 699 736 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * reg_UPT_TOP_EVENT : %d",reg_UPT_TOP_EVENT [i]); 700 737 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * reg_UPT_UPDATE : %d",reg_UPT_UPDATE [i]); 738 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * reg_UPT_EMPTY : %d",reg_UPT_EMPTY [i]); 701 739 for (uint32_t j=0; j<_param->_size_upt_queue[i]; j++) 702 740 log_printf(TRACE,Update_Prediction_Table,FUNCTION," [%d] %.4d, %.8x %.8x, %.1d %.1d %.1d, %.8d %.8x %.4d - %s",
Note: See TracChangeset
for help on using the changeset viewer.