Changeset 106 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:
- Feb 9, 2009, 11:55:26 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
r105 r106 39 39 reg_UFPT_UPDATE [i] = 0; 40 40 reg_UFPT_NB_NEED_UPDATE [i] = 0; 41 reg_UFPT_NB_UPDATE [i] = 0; 41 42 42 43 for (uint32_t j=0; j<_param->_size_upt_queue[i]; ++j) … … 92 93 { 93 94 uint32_t bottom = reg_UPT_BOTTOM [i]; 94 bool end_ok = (reg_UPDATE_PREDICTION_TABLE [i][bottom]._state == UPDATE_PREDICTION_STATE_END_OK); 95 bool end_ko = (reg_UPDATE_PREDICTION_TABLE [i][bottom]._state == UPDATE_PREDICTION_STATE_END_KO); 95 bool end = (reg_UPDATE_PREDICTION_TABLE [i][bottom]._state == UPDATE_PREDICTION_STATE_END); 96 // bool end_ok = (reg_UPDATE_PREDICTION_TABLE [i][bottom]._state == UPDATE_PREDICTION_STATE_END_OK); 97 // bool end_ko = (reg_UPDATE_PREDICTION_TABLE [i][bottom]._state == UPDATE_PREDICTION_STATE_END_KO); 96 98 // event_state_t event_state = reg_EVENT_STATE [i]; 97 99 98 100 // Test if state is end 99 // if ((end_ok or end_ko) and 100 // ((event_state != EVENT_STATE_UPDATE_CONTEXT) and 101 // (event_state != EVENT_STATE_WAIT_END_EVENT))) 102 if (end_ok or end_ko) 101 // if (end_ok or end_ko) 102 if (end) 103 103 { 104 104 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * UPT [%d][%d]",i,bottom); 105 105 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * UPT [%d][%d]._state = UPDATE_PREDICTION_STATE_EMPTY",i,bottom); 106 107 106 // Free slot 108 107 reg_UPDATE_PREDICTION_TABLE [i][bottom]._state = UPDATE_PREDICTION_STATE_EMPTY; … … 110 109 // Update pointer 111 110 reg_UPT_BOTTOM [i] = (bottom+1)%_param->_size_upt_queue[i]; 112 111 113 112 if (reg_UPT_BOTTOM [i] == reg_UPT_TOP [i]) 114 113 reg_UPT_EMPTY [i] = true; // free a slot … … 118 117 119 118 if (reg_EVENT_VAL [i] and (reg_EVENT_UPT_PTR [i] == bottom)) 120 // if (end_ko) // free121 119 { 122 120 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * END EVENT"); … … 129 127 reg_UPT_EMPTY [i] = false; 130 128 } 129 131 130 } 132 131 } 133 132 } 133 134 134 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * GARBAGE COLLECTOR (END)"); 135 135 … … 450 450 // if free a slot, also all queue is updated 451 451 // Last slot ? 452 if (reg_UFPT_UPDATE [context] == reg_UFPT_BOTTOM [context]) 452 // if (reg_UFPT_UPDATE [context] == reg_UFPT_BOTTOM [context]) 453 if ((--reg_UFPT_NB_UPDATE [context])==0) 453 454 switch (reg_EVENT_STATE [context]) 454 455 { … … 472 473 473 474 reg_UPDATE_FETCH_PREDICTION_TABLE [context][depth]._state = UPDATE_FETCH_PREDICTION_STATE_END; 474 475 475 476 476 // Update pointer 477 477 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * reg_UFPT_UPDATE (before) : %d",reg_UFPT_UPDATE [context]); … … 531 531 else 532 532 { 533 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * UPT [%d][%d].state <- UPDATE_PREDICTION_STATE_END_OK (update)",context,depth); 534 535 reg_UPDATE_PREDICTION_TABLE [context][depth]._state = UPDATE_PREDICTION_STATE_END_OK; 536 533 // log_printf(TRACE,Update_Prediction_Table,FUNCTION," * UPT [%d][%d].state <- UPDATE_PREDICTION_STATE_END_OK (update)",context,depth); 534 // reg_UPDATE_PREDICTION_TABLE [context][depth]._state = UPDATE_PREDICTION_STATE_END_OK; 535 536 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * UPT [%d][%d].state <- UPDATE_PREDICTION_STATE_END (update)",context,depth); 537 reg_UPDATE_PREDICTION_TABLE [context][depth]._state = UPDATE_PREDICTION_STATE_END; 537 538 538 539 #ifdef STATISTICS … … 650 651 reg_EVENT_STATE [i] = EVENT_STATE_OK; 651 652 reg_IS_ACCURATE [i] = true; 652 653 // Tdepth_t depth = reg_UPT_TOP [i]; 654 655 #ifdef DEBUG_TEST 656 // if (reg_UPDATE_PREDICTION_TABLE [i][depth]._state != UPDATE_PREDICTION_STATE_END_KO_WAIT_END) 657 // throw ERRORMORPHEO(FUNCTION,_("Event : invalid upt event state.")); 653 654 Tdepth_t depth = reg_EVENT_UPT_PTR [i]; 655 656 if (reg_UPDATE_PREDICTION_TABLE [i][depth]._state == UPDATE_PREDICTION_STATE_END_KO) 657 { 658 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * UPT [%d][%d].state <- UPDATE_PREDICTION_STATE_END (event)",i,depth); 659 660 reg_UPDATE_PREDICTION_TABLE [i][depth]._state = UPDATE_PREDICTION_STATE_END; 661 } 662 663 #ifdef DEBUG_TEST 664 // if (reg_UPDATE_PREDICTION_TABLE [i][depth]._state != UPDATE_PREDICTION_STATE_END_KO_WAIT_END) 665 // throw ERRORMORPHEO(FUNCTION,_("Event : invalid upt event state.")); 658 666 // if (reg_UPDATE_PREDICTION_TABLE [i][depth]._state != UPDATE_PREDICTION_STATE_END_KO) 659 667 // throw ERRORMORPHEO(FUNCTION,_("Event : invalid upt event state.")); 660 668 #endif 661 662 // log_printf(TRACE,Update_Prediction_Table,FUNCTION," * UPT [%d][%d].state <- UPDATE_PREDICTION_STATE_END_KO (update)",i,depth);663 664 // reg_UPDATE_PREDICTION_TABLE [i][depth]._state = UPDATE_PREDICTION_STATE_END_KO;665 669 670 // log_printf(TRACE,Update_Prediction_Table,FUNCTION," * UPT [%d][%d].state <- UPDATE_PREDICTION_STATE_END_KO (update)",i,depth); 671 672 // reg_UPDATE_PREDICTION_TABLE [i][depth]._state = UPDATE_PREDICTION_STATE_END_KO; 673 666 674 break; 667 675 } … … 685 693 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * new_update : %d",new_update); 686 694 687 688 #ifdef DEBUG_TEST 689 if (reg_UPDATE_PREDICTION_TABLE [i][depth]._state != UPDATE_PREDICTION_STATE_WAIT_END)690 throw ERRORMORPHEO(FUNCTION,_("Branch complete : invalid upt state.")); 691 #endif 692 693 // flush all slot after the event 694 for (uint32_t j=depth;695 j!=top; 696 j=(j+1)%_param->_size_upt_queue[i])697 reg_UPDATE_PREDICTION_TABLE [i][j]._state = UPDATE_PREDICTION_STATE_EVENT;698 699 // test full :700 if (full)701 reg_UPDATE_PREDICTION_TABLE [i][depth]._state = UPDATE_PREDICTION_STATE_EVENT;695 // Test empty 696 if (not reg_UPT_EMPTY [i]) 697 { 698 #ifdef DEBUG_TEST 699 if (reg_UPDATE_PREDICTION_TABLE [i][depth]._state != UPDATE_PREDICTION_STATE_WAIT_END) 700 throw ERRORMORPHEO(FUNCTION,_("Branch complete : invalid upt state.")); 701 #endif 702 reg_UPDATE_PREDICTION_TABLE [i][depth]._state = UPDATE_PREDICTION_STATE_EVENT; 703 704 // flush all slot after the event 705 for (uint32_t j=(depth+1)%_param->_size_upt_queue[i]; 706 j!=top; 707 j=(j+1)%_param->_size_upt_queue[i]) 708 reg_UPDATE_PREDICTION_TABLE [i][j]._state = UPDATE_PREDICTION_STATE_EVENT; 709 } 702 710 703 711 // reg_UPT_BOTTOM [i]; … … 802 810 { 803 811 for (uint32_t j=0; j<_param->_size_ufpt_queue[i]; ++j) 804 reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._state = UPDATE_FETCH_PREDICTION_STATE_EVENT; 805 812 { 813 reg_UFPT_NB_UPDATE [i] ++; 814 reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._state = UPDATE_FETCH_PREDICTION_STATE_EVENT; 815 } 816 806 817 // TOP is next write slot : last slot is TOP-1 807 818 uint32_t top = reg_UFPT_TOP [i]; 808 reg_UFPT_UPDATE [i] = ((top==0)?_param->_size_ufpt_queue[i]:top)-1;809 810 // reg_UFPT_BOTTOM [i];811 // reg_UFPT_TOP [i];819 reg_UFPT_UPDATE [i] = ((top==0)?_param->_size_ufpt_queue[i]:top)-1; 820 821 // reg_UFPT_BOTTOM [i]; 822 // reg_UFPT_TOP [i]; 812 823 } 813 824 … … 853 864 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * reg_UFPT_UPDATE : %d",reg_UFPT_UPDATE [i]); 854 865 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * reg_UFPT_NB_NEED_UPDATE : %d",reg_UFPT_NB_NEED_UPDATE [i]); 866 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * reg_UFPT_NB_UPDATE : %d",reg_UFPT_NB_UPDATE [i]); 855 867 for (uint32_t j=0; j<_param->_size_ufpt_queue[i]; j++) 856 868 log_printf(TRACE,Update_Prediction_Table,FUNCTION," [%d] %.4d, %.8x %.8x, %.1d %.1d, %.8d %.8x %.4d - %s",
Note: See TracChangeset
for help on using the changeset viewer.