/****************************************************************************/
/*                                                                          */
/*                      Chaine de CAO & VLSI   Alliance                     */
/*                                                                          */
/*    Produit :syf													        */
/*    Fichier :sl_facto.c                                                   */
/*                                                                          */
/*    (c) copyright 1991 Laboratoire MASI equipe CAO & VLSI                 */
/*    Tous droits reserves                                                  */
/*    Support : e-mail cao-vlsi@masi.ibp.fr                                 */
/*                                                                          */
/*    Auteur(s) :Sarwary C.                              le : 03/01/1993     */
/*                                                                          */
/*    Modifie par :                                     le : ../../....     */
/*    Modifie par :                                     le : ../../....     */
/*    Modifie par :                                     le : ../../....     */
/*                                                                          */
/****************************************************************************/
#include MUT_H
#include LOG_H
#include "../beh104/beh104.h"


/*-------------------------------------------------------------------------
syf_coutAblBeh 	: calcule le cout d'une befig avec ces ABL.
			- lit : nombre de litteraux non reduits.
			- maxLit : max du nombre de litteraux non reduits.
			- litRed : nombre de litteraux reduits.
			- profMax : profondeux max.
---------------------------------------------------------------------------
retour		: un void.
---------------------------------------------------------------------------*/
syf_coutAblBeh(beh,litRed,mode)
syf_befig_list *beh;
int *litRed;
int mode;
{
syf_beout_list *out;
syf_beaux_list *aux;
syf_bereg_list *reg;
syf_bebus_list *bus;
syf_bebux_list *bux;
biabl_list *biabl;
long numberAtomExprBehInt;
long numberAtomExprBehIntVal;
long numberAtomExprBehIntCnd;

	/* initialisation */

int _litRed = 0;

out = beh->BEOUT;
while (out) 
   {
   if (out->ABL)
      {
      _litRed	= _litRed + numberAtomExpr(out->ABL);
      if (mode == 1)
         {
         printf("%s = ",out->NAME);
         }
      }
   out = out->NEXT;
   }

aux = beh->BEAUX;
while (aux) 
   {
   if (aux->ABL)
      {
      if (mode == 1)
         {
         printf("%s = ",aux->NAME);
         }
      _litRed	= _litRed + numberAtomExpr(aux->ABL);
      }
   aux = aux->NEXT;
   }


reg = beh->BEREG;
while (reg) 
   {
   biabl = reg->BIABL;
   if (mode == 1)
      printf("%s = ",reg->NAME);

   while (biabl)
      {
      if (biabl->CNDABL && biabl->VALABL)
         {

         _litRed= _litRed + numberAtomExpr(biabl->VALABL);
         _litRed= _litRed + numberAtomExpr(biabl->CNDABL);
         if (mode == 1)
            {
            printf("%d",numberAtomExprBehIntVal);
            }
         }
      biabl = biabl->NEXT;
      }
   if (mode)
      printf("\n");
   reg = reg->NEXT;
   }

bus = beh->BEBUS;
while (bus) 
   {
   if (mode == 1)
      printf("%s = ",bus->NAME);

   biabl = bus->BIABL;
   while (biabl)
      {
      if (biabl->CNDABL && biabl->VALABL)
         {
         _litRed= _litRed + numberAtomExpr(biabl->VALABL);
         _litRed= _litRed + numberAtomExpr(biabl->CNDABL);
         }
      biabl = biabl->NEXT;
      }

   if (mode)
      printf("\n");
   bus = bus->NEXT;
   }

bux = beh->BEBUX;
while (bux) 
   {
   if (mode == 1)
      printf("%s = ",bux->NAME);

   biabl = bux->BIABL;
   while (biabl)
      {
      if (biabl->CNDABL && biabl->VALABL)
         {
         _litRed= _litRed + numberAtomExpr(biabl->VALABL);
         _litRed= _litRed + numberAtomExpr(biabl->CNDABL);
         }
      biabl = biabl->NEXT;
      }

   if (mode)
      printf("\n");
   bux = bux->NEXT;
   }

if (mode == 1)
   {
   printf("--------------> Number of reduced litterals = %d\n",_litRed);
   }

	/* mise a jour */

*litRed = _litRed;
}
