Changeset 97 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:
- Dec 19, 2008, 4:34:00 PM (16 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
r95 r97 472 472 // bool have_event = ((reg_UPDATE_PREDICTION_TABLE [context][depth]._state == UPDATE_PREDICTION_STATE_KO) or 473 473 // (reg_UPDATE_PREDICTION_TABLE [context][depth]._state == UPDATE_PREDICTION_STATE_EVENT)); 474 #ifdef STATISTICS 475 Tbranch_condition_t condition = reg_UPDATE_PREDICTION_TABLE [context][depth]._condition; 476 bool ok = (reg_UPDATE_PREDICTION_TABLE [context][depth]._state == UPDATE_PREDICTION_STATE_OK); 477 #endif 474 478 bool ko = (reg_UPDATE_PREDICTION_TABLE [context][depth]._state == UPDATE_PREDICTION_STATE_KO); 475 479 … … 480 484 481 485 reg_UPDATE_PREDICTION_TABLE [context][depth]._state = UPDATE_PREDICTION_STATE_END_KO; 486 487 #ifdef STATISTICS 488 if (usage_is_set(_usage,USE_STATISTICS)) 489 (*_stat_nb_branch_miss [context][condition])++; 490 #endif 482 491 } 483 492 else … … 486 495 487 496 reg_UPDATE_PREDICTION_TABLE [context][depth]._state = UPDATE_PREDICTION_STATE_END_OK; 497 498 499 #ifdef STATISTICS 500 if (usage_is_set(_usage,USE_STATISTICS)) 501 { 502 if (ok) 503 (*_stat_nb_branch_hit [context][condition]) ++; 504 else 505 (*_stat_nb_branch_unused [context]) ++; 506 } 507 #endif 488 508 } 489 509 … … 548 568 // =================================================================== 549 569 for (uint32_t i=0; i<_param->_nb_context; ++i) 550 { 551 //---------------------------------------------------------------- 552 // Cases 553 //---------------------------------------------------------------- 554 // * EVENT_TYPE_NONE - nothing 555 // * EVENT_TYPE_MISS_SPECULATION 556 // * EVENT_STATE_END - Change state, reset pointer 557 // * EVENT_TYPE_EXCEPTION - 558 // * EVENT_STATE_EVENT - Flush upft and upt 559 // * EVENT_STATE_END - Change state, reset pointer 560 // * EVENT_TYPE_BRANCH_NO_ACCURATE - nothing : manage in decod and update 561 // * EVENT_TYPE_SPR_ACCESS - nothing 562 // * EVENT_TYPE_MSYNC - nothing 563 // * EVENT_TYPE_PSYNC - nothing 564 // * EVENT_TYPE_CSYNC - nothing 565 566 Tevent_state_t event_state = PORT_READ(in_EVENT_STATE [i]); 567 Tevent_type_t event_type = PORT_READ(in_EVENT_TYPE [i]); 568 // Tdepth_t depth = PORT_READ(in_EVENT_DEPTH [i]); 570 if (PORT_READ(in_EVENT_VAL [i]) and internal_EVENT_ACK [i]) 571 { 572 //---------------------------------------------------------------- 573 // Cases 574 //---------------------------------------------------------------- 575 // * EVENT_TYPE_NONE - nothing 576 // * EVENT_TYPE_MISS_SPECULATION - Change state, reset pointer 577 // * EVENT_TYPE_EXCEPTION - Flush upft and upt, Change state, reset pointer 578 // * EVENT_TYPE_BRANCH_NO_ACCURATE - nothing : manage in decod and update 579 // * EVENT_TYPE_SPR_ACCESS - nothing 580 // * EVENT_TYPE_MSYNC - nothing 581 // * EVENT_TYPE_PSYNC - nothing 582 // * EVENT_TYPE_CSYNC - nothing 583 584 Tevent_type_t event_type = PORT_READ(in_EVENT_TYPE [i]); 585 // Tdepth_t depth = PORT_READ(in_EVENT_DEPTH [i]); 569 586 570 // Test if end of miss 571 if ((event_state == EVENT_STATE_END) and 572 (event_type == EVENT_TYPE_MISS_SPECULATION)) 573 { 574 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * EVENT"); 575 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * state : EVENT_STATE_END"); 576 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * type : EVENT_TYPE_MISS_SPECULATION"); 577 578 #ifdef DEBUG_TEST 579 if (reg_EVENT_STATE [i] != EVENT_STATE_WAIT_END_EVENT) 580 throw ERRORMORPHEO(FUNCTION,_("Event : invalid event state.")); 581 #endif 582 583 // Change state 584 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * EVENT [%d] <- EVENT_STATE_OK (event)",i); 585 586 reg_EVENT_STATE [i] = EVENT_STATE_OK; 587 588 // uint32_t bottom = reg_UPT_BOTTOM [i]; 589 590 // reg_UPT_TOP [i] = bottom; 591 // reg_UPT_UPDATE [i] = bottom; 592 } 593 } 587 // Test if end of miss 588 if (event_type == EVENT_TYPE_MISS_SPECULATION) 589 { 590 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * EVENT"); 591 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * type : EVENT_TYPE_MISS_SPECULATION"); 592 593 #ifdef DEBUG_TEST 594 if (reg_EVENT_STATE [i] != EVENT_STATE_WAIT_END_EVENT) 595 throw ERRORMORPHEO(FUNCTION,_("Event : invalid event state.")); 596 #endif 597 598 // Change state 599 log_printf(TRACE,Update_Prediction_Table,FUNCTION," * EVENT [%d] <- EVENT_STATE_OK (event)",i); 600 601 reg_EVENT_STATE [i] = EVENT_STATE_OK; 602 } 603 } 594 604 595 605 // =================================================================== … … 634 644 } 635 645 646 #ifdef STATISTICS 647 if (usage_is_set(_usage,USE_STATISTICS)) 648 for (uint32_t i=0; i<_param->_nb_context; i++) 649 { 650 for (uint32_t j=0; j<_param->_size_ufpt_queue[i]; j++) 651 if (reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._state != UPDATE_FETCH_PREDICTION_STATE_EMPTY) 652 (*_stat_ufpt_queue_nb_elt [i]) ++; 653 for (uint32_t j=0; j<_param->_size_upt_queue[i]; j++) 654 if (reg_UPDATE_PREDICTION_TABLE [i][j]._state != UPDATE_PREDICTION_STATE_EMPTY) 655 (*_stat_upt_queue_nb_elt [i]) ++; 656 } 657 #endif 658 636 659 // =================================================================== 637 660 // =====[ PRINT ]=====================================================
Note: See TracChangeset
for help on using the changeset viewer.