models/processor/zesto/ZPIPE-exec/exec-atom.cpp
core_exec_atom_t::readyQ_node_t * core_exec_atom_t::get_readyQ_node(void)
{
  struct readyQ_node_t * p = NULL;
  if(readyQ_free_pool)
  {
    p = readyQ_free_pool;
    readyQ_free_pool = p->next;
  }
  else
  {
    p = (struct readyQ_node_t*) calloc(1,sizeof(*p));
    if(!p)
      fatal("couldn't calloc a readyQ node");
  }
  assert(p);
  p->next = NULL;
  p->when_assigned = core->sim_cycle;
#ifdef DEBUG
  readyQ_free_pool_debt++;
#endif
  return p;
}
/* Functions to support dependency tracking 
   NOTE: "Ready" Queue is somewhat of a misnomer... uops are placed in the
   readyQ when all of their data-flow parents have issued (although not
   necessarily executed).  However, that doesn't necessarily mean that the
   corresponding input *values* are "ready" due to non-zero schedule-to-
   execute latencies. */
Functions to support dependency tracking
NOTE: "Ready" Queue is somewhat of a misnomer... uops are placed in the
readyQ when all of their data-flow parents have issued (although not
necessarily executed).  However, that doesn't necessarily mean that the
corresponding input *values* are "ready" due to non-zero schedule-to
execute latencies.
Functions to support dependency tracking NOTE : " Ready " Queue is somewhat of a misnomer ... uops are placed in the readyQ when all of their data - flow parents have issued ( although not necessarily executed ) . However that doesn ' t necessarily mean that the corresponding input * values * are " ready " due to non - zero schedule - to execute latencies .
core_exec_atom_t::readyQ_node_t * core_exec_atom_t::get_readyQ_node(void)
{
  struct readyQ_node_t * p = NULL;
  if(readyQ_free_pool)
  {
    p = readyQ_free_pool;
    readyQ_free_pool = p->next;
  }
  else
  {
    p = (struct readyQ_node_t*) calloc(1,sizeof(*p));
    if(!p)
      fatal("couldn't calloc a readyQ node");
  }
  assert(p);
  p->next = NULL;
  p->when_assigned = core->sim_cycle;
#ifdef DEBUG
  readyQ_free_pool_debt++;
#endif
  return p;
}
core_exec_atom_t :: readyQ_node_t * core_exec_atom_t :: get_readyQ_node ( void ) { struct readyQ_node_t * p = NULL ; if ( readyQ_free_pool ) { p = readyQ_free_pool ; readyQ_free_pool = p -> next ; } else { p = ( struct readyQ_node_t * ) calloc ( 1 , sizeof ( * p ) ) ; if ( ! p ) fatal ( " " ) ; } assert ( p ) ; p -> next = NULL ; p -> when_assigned = core -> sim_cycle ; #ifdef DEBUG readyQ_free_pool_debt ++ ; #endif return p ; }
Functions to support dependency tracking
NOTE: "Ready" Queue is somewhat of a misnomer... uops are placed in the
readyQ when all of their data-flow parents have issued (although not
necessarily executed).
Functions to support dependency tracking NOTE : " Ready " Queue is somewhat of a misnomer ... uops are placed in the readyQ when all of their data - flow parents have issued ( although not necessarily executed ) .