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/Direction/Direction_Glue/src/Direction_Glue_genMealy_predict.cpp

    r81 r107  
    2323  void Direction_Glue::genMealy_predict (void)
    2424  {
    25     log_printf(FUNC,Direction_Glue,FUNCTION,"Begin");
     25    log_begin(Direction_Glue,FUNCTION);
     26    log_function(Direction_Glue,FUNCTION,_name.c_str());
    2627
    2728    // constant direction : never / always
    28     switch (_param->_predictor_scheme)
     29    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
    2930      {
    30       case PREDICTOR_STATIC    :
    31         {
    32           for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
    33             PORT_WRITE(out_PREDICT_DIRECTION   [i], PORT_READ(in_PREDICT_STATIC    [i]));
    34          
    35           break;
    36         }
    37       case PREDICTOR_LAST_TAKE :
    38         {
    39           for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
    40             PORT_WRITE(out_PREDICT_DIRECTION   [i], PORT_READ(in_PREDICT_LAST_TAKE [i]));
     31        log_printf(TRACE,Direction_Glue,FUNCTION,"  * PREDICT [%d]",i);
    4132
    42           break;
    43         }
    44       case PREDICTOR_COUNTER   :
    45       case PREDICTOR_LOCAL     :
    46       case PREDICTOR_GLOBAL    :
    47       case PREDICTOR_META      :
    48       case PREDICTOR_CUSTOM    :
    49         {
    50           for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
    51             {
    52               // not use :
    53               // in_PREDICT_LAST_TAKE       
    54               // in_PREDICT_STATIC
     33        Tcontrol_t direction;
     34
     35        switch (_param->_predictor_scheme)
     36          {
     37            // defined as constant in Direction_Glue.cpp
     38//           case PREDICTOR_NEVER_TAKE  :
     39//             {
     40//               direction = 0;
     41//               break;
     42//             }
     43//           case PREDICTOR_ALWAYS_TAKE :
     44//             {
     45//               direction = 1;
     46//               break;
     47//             }
     48          case PREDICTOR_STATIC    :
     49            {
     50              direction = PORT_READ(in_PREDICT_STATIC [i]);
     51              break;
     52            }
     53          case PREDICTOR_LAST_TAKE :
     54            {
     55              direction = PORT_READ(in_PREDICT_LAST_TAKE [i]);
     56              break;
     57            }
     58          case PREDICTOR_COUNTER   :
     59          case PREDICTOR_LOCAL     :
     60          case PREDICTOR_GLOBAL    :
     61          case PREDICTOR_META      :
     62          case PREDICTOR_CUSTOM    :
     63            {
     64              // not use :
     65              // in_PREDICT_LAST_TAKE       
     66              // in_PREDICT_STATIC
     67             
     68              direction = PORT_READ(in_PREDICT_PREDICTOR_DIRECTION [i]);
    5569
    5670              PORT_WRITE(out_PREDICT_PREDICTOR_VAL         [i], PORT_READ(in_PREDICT_VAL                 [i]));
     
    5872              PORT_WRITE(out_PREDICT_PREDICTOR_ADDRESS_SRC [i], PORT_READ(in_PREDICT_ADDRESS_SRC         [i]));
    5973              PORT_WRITE(out_PREDICT_HISTORY               [i], PORT_READ(in_PREDICT_PREDICTOR_HISTORY   [i]));
    60               PORT_WRITE(out_PREDICT_DIRECTION             [i], PORT_READ(in_PREDICT_PREDICTOR_DIRECTION [i]));
    61             }
     74             
     75              break;
     76            }
     77          default :
     78            {
     79              ERRORMORPHEO(FUNCTION,"No valid predictor scheme");
     80              break;
     81            }
     82          }
     83     
     84        log_printf(TRACE,Direction_Glue,FUNCTION,"    * direction     : %d",direction);
    6285
    63           break;
    64         }
    65       default :
    66         {
    67           ERRORMORPHEO(FUNCTION,"No valid predictor scheme");
    68           break;
    69         }
     86        PORT_WRITE(out_PREDICT_DIRECTION   [i], direction);
    7087      }
    7188
    72 
    73    
    74     log_printf(FUNC,Direction_Glue,FUNCTION,"End");
     89    log_end(Direction_Glue,FUNCTION);
    7590  };
    7691
Note: See TracChangeset for help on using the changeset viewer.