Commit f909f222 authored by sagnowski's avatar sagnowski
Browse files

Update basops with BASOP_NOGLOB

parent 46da7b09
Loading
Loading
Loading
Loading
+450 −1

File changed.

Preview size limit exceeded, changes collapsed.

+88 −42
Original line number Diff line number Diff line
@@ -44,6 +44,10 @@
#ifndef _BASIC_OP_H
#define _BASIC_OP_H

#ifdef BASOP_NOGLOB
#include <assert.h>
#endif /* BASOP_NOGLOB */


/*___________________________________________________________________________
 |                                                                           |
@@ -51,8 +55,16 @@
 | $Id $
 |___________________________________________________________________________|
*/
extern Flag Overflow;
#ifdef BASOP_NOGLOB
/* DISABLED TO AVOID GLOBAL VARIABLES */
/*
extern Flag BASOP_Overflow, BASOP_Overflow2;
extern Flag BASOP_Carry;
*/
#else /* BASOP_NOGLOB */
extern Flag Overflow, Overflow2;
extern Flag Carry;
#endif /* BASOP_NOGLOB */

#define BASOP_SATURATE_WARNING_ON
#define BASOP_SATURATE_WARNING_OFF
@@ -66,6 +78,12 @@ extern Flag Carry;
#define MAX_16 (Word16)0x7fff
#define MIN_16 (Word16)0x8000

#ifdef BASOP_NOGLOB
static inline void set_flag(Flag* flag) { if (flag) *flag = 1; else assert(0); }
static inline void unset_flag(Flag* flag) { if (flag) *flag = 0; else assert(0); }
static inline Flag get_flag(Flag* flag) { if (flag) return *flag; else assert(0); }
#endif /* BASOP_NOGLOB */

/*___________________________________________________________________________
 |                                                                           |
 |   Prototypes for basic arithmetic operators                               |
@@ -119,10 +137,38 @@ Word16 i_mult (Word16 a, Word16 b); /* Weight FFS; currently assigned
/*
 *  New shiftless operators, not used in G.729/G.723.1
*/
Word32 L_mult0 (Word16 v1, Word16 v2);                    /* 32-bit Multiply w/o shift e    1 */
Word32 L_mult0 (Word16 v1, Word16 v2);  /* 32-bit Multiply w/o shift 1 */
Word32 L_mac0 (Word32 L_v3, Word16 v1, Word16 v2);      /* 32-bit Mac w/o shift 1 */
Word32 L_msu0 (Word32 L_v3, Word16 v1, Word16 v2);      /* 32-bit Msu w/o shift 1 */

#ifdef BASOP_NOGLOB
/*
 * Overflowing operators
 */
Word16 add_o (Word16 var1, Word16 var2, Flag * Overflow);
Word16 sub_o (Word16 var1, Word16 var2, Flag * Overflow);
Word16 shl_o (Word16 var1, Word16 var2, Flag * Overflow);
Word16 mult_o (Word16 var1, Word16 var2, Flag * Overflow);
Word32 L_mult_o (Word16 var1, Word16 var2, Flag * Overflow);
Word16 round_fx_o (Word32 L_var1, Flag * Overflow);
Word32 L_mac_o (Word32 L_var3, Word16 var1, Word16 var2, Flag * Overflow);
Word32 L_msu_o (Word32 L_var3, Word16 var1, Word16 var2, Flag * Overflow);
Word32 L_macNs_co (Word32 L_var3, Word16 var1, Word16 var2, Flag * Carry, Flag* Overflow);
Word32 L_msuNs_co (Word32 L_var3, Word16 var1, Word16 var2, Flag * Carry, Flag* Overflow);
Word32 L_add_o (Word32 L_var1, Word32 L_var2, Flag * Overflow);
Word32 L_sub_o (Word32 L_var1, Word32 L_var2, Flag * Overflow);
Word32 L_add_co (Word32 L_var1, Word32 L_var2, Flag * Carry, Flag *Overflow);
Word32 L_sub_co (Word32 L_var1, Word32 L_var2, Flag * Carry, Flag *Overflow);
Word32 L_shr_o (Word32 L_var1, Word16 var2, Flag * Overflow);
Word32 L_shl_o (Word32 L_var1, Word16 var2, Flag * Overflow);
Word32 L_mls_o (Word32 Lv, Word16 v, Flag * Overflow);
Word32 L_mac0_o (Word32 L_var3, Word16 var1, Word16 var2, Flag * Overflow);
Word32 L_msu0_o (Word32 L_var3, Word16 var1, Word16 var2, Flag * Overflow);
Word16 mult_ro (Word16 var1, Word16 var2, Flag * Overflow);
Word16 mac_ro (Word32 L_var3, Word16 var1, Word16 var2, Flag * Overflow);
Word16 msu_ro (Word32 L_var3, Word16 var1, Word16 var2, Flag * Overflow);
Word32 L_sat_co (Word32 L_var1, Flag Overflow, Flag Carry);
#endif /* BASOP_NOGLOB */

#endif /* ifndef _BASIC_OP_H */

+81 −0
Original line number Diff line number Diff line
@@ -63,6 +63,9 @@
#include <stdio.h>
#include <stdlib.h>
#include "stl.h"
#ifdef BASOP_NOGLOB
#include <assert.h>
#endif /* BASOP_NOGLOB */

#if (WMOPS)
extern BASIC_OP multiCounter[MAXCOUNTERS];
@@ -124,7 +127,11 @@ extern int currCounter;
 *                the range : MIN_40 <= L40_var_out <= MAX_40.
 *
 *****************************************************************************/
#ifdef BASOP_NOGLOB
Word40 L40_shl_o (Word40 L40_var1, Word16 var2, Flag *Overflow) {
#else /* BASOP_NOGLOB */
Word40 L40_shl (Word40 L40_var1, Word16 var2) {
#endif /* BASOP_NOGLOB */

  Word40 L40_var_out;
  Word40 L40_constant = L40_set (0xc000000000);
@@ -143,12 +150,22 @@ Word40 L40_shl (Word40 L40_var1, Word16 var2) {

    for (; var2 > 0; var2--) {
      if (L40_var_out > 0x003fffffffff) {
#ifdef BASOP_NOGLOB
        set_flag (Overflow);
        L40_var_out = MAX_40;
#else /* BASOP_NOGLOB */
        L40_var_out = L40_OVERFLOW_OCCURED (L40_var_out);
#endif /* BASOP_NOGLOB */
        break;
      }

      else if (L40_var_out < L40_constant) {
#ifdef BASOP_NOGLOB
        set_flag (Overflow);
        L40_var_out = MIN_40;
#else /* BASOP_NOGLOB */
        L40_var_out = L40_UNDERFLOW_OCCURED (L40_var_out);
#endif /* BASOP_NOGLOB */
        break;
      }

@@ -166,6 +183,12 @@ Word40 L40_shl (Word40 L40_var1, Word16 var2) {
  return (L40_var_out);
}

#ifdef BASOP_NOGLOB
Word40 L40_shl (Word40 L40_var1, Word16 var2) {
  return L40_shl_o (L40_var1, var2, NULL);
}
#endif /* BASOP_NOGLOB */


/*****************************************************************************
 *
@@ -295,7 +318,11 @@ Word40 L40_negate (Word40 L40_var1) {
 *                the range : MIN_40 <= L40_var_out <= MAX_40.
 *
 *****************************************************************************/
#ifdef BASOP_NOGLOB
Word40 L40_add_o (Word40 L40_var1, Word40 L40_var2, Flag *Overflow) {
#else /* BASOP_NOGLOB */
Word40 L40_add (Word40 L40_var1, Word40 L40_var2) {
#endif /* BASOP_NOGLOB */
  Word40 L40_var_out;

  L40_var_out = L40_var1 + L40_var2;
@@ -303,12 +330,22 @@ Word40 L40_add (Word40 L40_var1, Word40 L40_var2) {
  if ((((L40_var1 & 0x8000000000) >> 39) != 0)
      && (((L40_var2 & 0x8000000000) >> 39) != 0)
      && (((L40_var_out & 0x8000000000) >> 39) == 0)) {
#ifdef BASOP_NOGLOB
    set_flag (Overflow);
    L40_var_out = MIN_40;
#else /* BASOP_NOGLOB */
    L40_var_out = L40_UNDERFLOW_OCCURED (L40_var_out);
#endif /* BASOP_NOGLOB */

  } else if ((((L40_var1 & 0x8000000000) >> 39) == 0)
             && (((L40_var2 & 0x8000000000) >> 39) == 0)
             && (((L40_var_out & 0x8000000000) >> 39) != 0)) {
#ifdef BASOP_NOGLOB
    set_flag (Overflow);
    L40_var_out = MAX_40;
#else /* BASOP_NOGLOB */
    L40_var_out = L40_OVERFLOW_OCCURED (L40_var_out);
#endif /* BASOP_NOGLOB */
  }
#if (WMOPS)
  multiCounter[currCounter].L40_add++;
@@ -317,6 +354,12 @@ Word40 L40_add (Word40 L40_var1, Word40 L40_var2) {
  return (L40_var_out);
}

#ifdef BASOP_NOGLOB
Word40 L40_add (Word40 L40_var1, Word40 L40_var2) {
  return L40_add_o (L40_var1, L40_var2, NULL);
}
#endif /* BASOP_NOGLOB */


/*****************************************************************************
 *
@@ -348,7 +391,11 @@ Word40 L40_add (Word40 L40_var1, Word40 L40_var2) {
 *                the range : MIN_40 <= L40_var_out <= MAX_40.
 *
 *****************************************************************************/
#ifdef BASOP_NOGLOB
Word40 L40_sub_o (Word40 L40_var1, Word40 L40_var2, Flag *Overflow) {
#else /* BASOP_NOGLOB */
Word40 L40_sub (Word40 L40_var1, Word40 L40_var2) {
#endif /* BASOP_NOGLOB */
  Word40 L40_var_out;

  L40_var_out = L40_var1 - L40_var2;
@@ -356,12 +403,22 @@ Word40 L40_sub (Word40 L40_var1, Word40 L40_var2) {
  if ((((L40_var1 & 0x8000000000) >> 39) != 0)
      && (((L40_var2 & 0x8000000000) >> 39) == 0)
      && (((L40_var_out & 0x8000000000) >> 39) == 0)) {
#ifdef BASOP_NOGLOB
    set_flag (Overflow);
    L40_var_out = MIN_40;
#else /* BASOP_NOGLOB */
    L40_var_out = L40_UNDERFLOW_OCCURED (L40_var_out);
#endif /* BASOP_NOGLOB */

  } else if ((((L40_var1 & 0x8000000000) >> 39) == 0)
             && (((L40_var2 & 0x8000000000) >> 39) != 0)
             && (((L40_var_out & 0x8000000000) >> 39) != 0)) {
#ifdef BASOP_NOGLOB
    set_flag (Overflow);
    L40_var_out = MAX_40;
#else /* BASOP_NOGLOB */
    L40_var_out = L40_OVERFLOW_OCCURED (L40_var_out);
#endif /* BASOP_NOGLOB */
  }
#if (WMOPS)
  multiCounter[currCounter].L40_sub++;
@@ -370,6 +427,12 @@ Word40 L40_sub (Word40 L40_var1, Word40 L40_var2) {
  return (L40_var_out);
}

#ifdef BASOP_NOGLOB
Word40 L40_sub (Word40 L40_var1, Word40 L40_var2) {
  return L40_sub_o (L40_var1, L40_var2, NULL);
}
#endif /* BASOP_NOGLOB */


/*****************************************************************************
 *
@@ -537,7 +600,11 @@ Word40 L40_min (Word40 L40_var1, Word40 L40_var2) {
 *                the range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.
 *
 *****************************************************************************/
#ifdef BASOP_NOGLOB
Word32 L_saturate40_o (Word40 L40_var1, Flag *Overflow) {
#else /* BASOP_NOGLOB */
Word32 L_saturate40 (Word40 L40_var1) {
#endif /* BASOP_NOGLOB */
  Word32 L_var_out;

  Word40 UNDER_L40_var2 = (Word40) ~ ((((Word40) 1) << 31) - (Word40) 1);
@@ -545,12 +612,20 @@ Word32 L_saturate40 (Word40 L40_var1) {

  if (L40_var1 < UNDER_L40_var2) {
    L40_var1 = UNDER_L40_var2;
#ifdef BASOP_NOGLOB
    set_flag (Overflow);
#else /* BASOP_NOGLOB */
    Overflow = 1;
#endif /* BASOP_NOGLOB */
  }

  if (L40_var1 > OVER_L40_var2) {
    L40_var1 = OVER_L40_var2;
#ifdef BASOP_NOGLOB
    set_flag (Overflow);
#else /* BASOP_NOGLOB */
    Overflow = 1;
#endif /* BASOP_NOGLOB */
  }

  L_var_out = L_Extract40 (L40_var1);
@@ -563,6 +638,12 @@ Word32 L_saturate40 (Word40 L40_var1) {
  return (L_var_out);
}

#ifdef BASOP_NOGLOB
Word32 L_saturate40 (Word40 L40_var1) {
  return L_saturate40_o (L40_var1, NULL);
}
#endif /* BASOP_NOGLOB */


/*****************************************************************************
 *
+17 −1
Original line number Diff line number Diff line
@@ -25,6 +25,10 @@

#include "stl.h"

#ifdef BASOP_NOGLOB
#define MAX_40 ( 0x0000007fffffffff )
#define MIN_40 ( 0xffffff8000000000 )
#endif /* BASOP_NOGLOB */

#ifdef WMOPS
extern BASIC_OP multiCounter[MAXCOUNTERS];
@@ -44,6 +48,7 @@ extern int currCounter;



#ifndef BASOP_NOGLOB
/*****************************************************************************
 *
 *  Macros for 40 bit arithmetic overflow management :
@@ -53,6 +58,7 @@ extern int currCounter;
 *****************************************************************************/
#define L40_OVERFLOW_OCCURED(  L40_var1) (Overflow = 1, exit(1), L40_var1)
#define L40_UNDERFLOW_OCCURED( L40_var1) (Overflow = 1, exit(2), L40_var1)
#endif /* BASOP_NOGLOB */



@@ -104,6 +110,15 @@ Word40 L40_min (Word40 L40_var1, Word40 L40_var2);
Word32 L_saturate40 (Word40 L40_var1);
Word16 norm_L40 (Word40 L40_var1);

#ifdef BASOP_NOGLOB
/*
 * Overflowing operators
 */
Word40 L40_shl_o( Word40 L40_var1, Word16 var2, Flag *Overflow );
Word40 L40_add_o( Word40 L40_var1, Word40 L40_var2, Flag *Overflow );
Word40 L40_sub_o( Word40 L40_var1, Word40 L40_var2, Flag *Overflow );
Word32 L_saturate40_o( Word40 L40_var1, Flag *Overflow );
#endif /* BASOP_NOGLOB */

/*****************************************************************************
 *
@@ -154,7 +169,8 @@ static __inline Word40 L40_set (Word40 L40_var1) {
  return (L40_var_out);
}

/* #endif */ /* ifdef _MSC_VER */
// #endif /* ifdef _MSC_VER */



/*****************************************************************************

basic_op/enh64.c

100644 → 100755
+119 −2
Original line number Diff line number Diff line
@@ -163,7 +163,11 @@ Word64 W_sub_nosat (Word64 L64_var1, Word64 L64_var2) {
|       range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL. |
|___________________________________________________________________________|
*/
#ifdef BASOP_NOGLOB
Word64 W_shl_o (Word64 L64_var1, Word16 var2, Flag* Overflow) {
#else /* BASOP_NOGLOB */
Word64 W_shl (Word64 L64_var1, Word16 var2) {
#endif /* BASOP_NOGLOB */
 
  Word64 L64_var_out = 0LL;
 
@@ -176,13 +180,21 @@ Word64 W_shl (Word64 L64_var1, Word16 var2) {
  else { 
    for (; var2 > 0; var2--) { 
      if (L64_var1 > (Word64) 0X3fffffffffffffffLL) { 
#ifdef BASOP_NOGLOB
        set_flag(Overflow);
#else /* BASOP_NOGLOB */
        Overflow = 1; 
#endif /* BASOP_NOGLOB */
        L64_var_out = (Word64) 0X7fffffffffffffffLL; 
        break; 
      } 
      else { 
        if (L64_var1 < (Word64) 0xc000000000000000LL) { 
#ifdef BASOP_NOGLOB
          set_flag(Overflow);
#else /* BASOP_NOGLOB */
          Overflow = 1; 
#endif /* BASOP_NOGLOB */
          L64_var_out = (Word64)0x8000000000000000LL; 
          break; 
        } 
@@ -195,11 +207,17 @@ Word64 W_shl (Word64 L64_var1, Word16 var2) {
  multiCounter[currCounter].W_shl++;
#endif
 
/*  BASOP_CHECK();*/
//  BASOP_CHECK();
 
  return (L64_var_out);
}

#ifdef BASOP_NOGLOB
Word64 W_shl (Word64 L64_var1, Word16 var2) {
  return W_shl_o(L64_var1, var2, NULL);
}
#endif /* BASOP_NOGLOB */


/*___________________________________________________________________________
|                                                                           |
@@ -306,7 +324,7 @@ Word64 W_shl_nosat (Word64 L64_var1, Word16 var2) {
  multiCounter[currCounter].W_shl_nosat++;
#endif
 
/*  BASOP_CHECK();*/
//  BASOP_CHECK ();
 
  return (L64_var_out);
}
@@ -1088,7 +1106,11 @@ Word32 W_shl_sat_l (Word64 L64_var, Word32 n) {
|             range : 0x8000 0000 <= L_var_out <= 0x7fff ffff.                     |
|__________________________________________________________________________________|
*/
#ifdef BASOP_NOGLOB
Word32 W_round48_L_o (Word64 L64_var1, Flag* Overflow) {
#else /* BASOP_NOGLOB */
Word32 W_round48_L (Word64 L64_var1) { 
#endif /* BASOP_NOGLOB */
  Word64 L64_var_out; 
  Word32 L_result;
 
@@ -1103,7 +1125,11 @@ Word32 W_round48_L (Word64 L64_var1) {
  if ( ( (L64_var1 ^ L64_var2) & L64_MIN) == 0) { 
    if ( (L64_var_out ^ L64_var1) & L64_MIN) { 
      L64_var_out = (L64_var1 < 0) ? L64_MIN : L64_MAX; 
#ifdef BASOP_NOGLOB
      set_flag(Overflow);
#else /* BASOP_NOGLOB */
      Overflow = 1; 
#endif /* BASOP_NOGLOB */
    } 
  }
  L_result = W_extract_h (L64_var_out);
@@ -1116,6 +1142,12 @@ Word32 W_round48_L (Word64 L64_var1) {
  return (L_result);
}

#ifdef BASOP_NOGLOB
Word32 W_round48_L (Word64 L64_var1) {
  return W_round48_L_o(L64_var1, NULL);
}
#endif /* BASOP_NOGLOB */

/*__________________________________________________________________________________
|                                                                                  |
|   Function Name : W_round32_s                                                    |
@@ -1143,7 +1175,11 @@ Word32 W_round48_L (Word64 L64_var1) {
|             range : 0xffff 8000 <= var_out <= 0x0000 7fff.                       |
|__________________________________________________________________________________|
*/
#ifdef BASOP_NOGLOB
Word16 W_round32_s_o (Word64 L64_var1, Flag* Overflow) {
#else /* BASOP_NOGLOB */
Word16 W_round32_s (Word64 L64_var1) { 
#endif /* BASOP_NOGLOB */
  Word64 L64_var_out; 
  Word32 L_var; 
  Word16 var_out;
@@ -1159,7 +1195,11 @@ Word16 W_round32_s (Word64 L64_var1) {
  if (((L64_var1 ^ L64_var2) & L64_MIN) == 0) { 
    if ((L64_var_out ^ L64_var1) & L64_MIN) { 
      L64_var_out = (L64_var1 < 0) ? L64_MIN : L64_MAX; 
#ifdef BASOP_NOGLOB
      set_flag(Overflow);
#else /* BASOP_NOGLOB */
      Overflow = 1; 
#endif /* BASOP_NOGLOB */
    } 
  } 
  L_var = W_extract_h (L64_var_out); 
@@ -1173,6 +1213,13 @@ Word16 W_round32_s (Word64 L64_var1) {
 
  return (var_out);
}

#ifdef BASOP_NOGLOB
Word16 W_round32_s (Word64 L64_var1) {
  return W_round32_s_o(L64_var1, NULL);
}
#endif /* BASOP_NOGLOB */

/*___________________________________________________________________________
|                                                                           |
|   Function Name : W_norm                                                  |
@@ -1258,7 +1305,11 @@ Word16 W_norm (Word64 L64_var1) {
|       range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL.     |
|_______________________________________________________________________________|
*/
#ifdef BASOP_NOGLOB
Word64 W_add_o (Word64 L64_var1, Word64 L64_var2, Flag* Overflow) {
#else /* BASOP_NOGLOB */
Word64 W_add (Word64 L64_var1, Word64 L64_var2) { 
#endif /* BASOP_NOGLOB */
  Word64 L64_var_out;
 
  L64_var_out = L64_var1 + L64_var2;
@@ -1266,7 +1317,11 @@ Word64 W_add (Word64 L64_var1, Word64 L64_var2) {
    if (((L64_var1 ^ L64_var2) & MIN_64) == 0) {
        if ((L64_var_out ^ L64_var1) & MIN_64) {
            L64_var_out = (L64_var1 < 0) ? MIN_64 : MAX_64;
#ifdef BASOP_NOGLOB
            set_flag(Overflow);
#else /* BASOP_NOGLOB */
            Overflow = 1;
#endif /* BASOP_NOGLOB */
        }
    }

@@ -1276,6 +1331,12 @@ Word64 W_add (Word64 L64_var1, Word64 L64_var2) {
  return L64_var_out;
}

#ifdef BASOP_NOGLOB
Word64 W_add (Word64 L64_var1, Word64 L64_var2) {
  return W_add_o(L64_var1, L64_var2, NULL);
}
#endif /* BASOP_NOGLOB */

/*______________________________________________________________________________
|                                                                               |
|   Function Name : W_sub                                                       |
@@ -1307,7 +1368,11 @@ Word64 W_add (Word64 L64_var1, Word64 L64_var2) {
|       range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL.     |
|_______________________________________________________________________________|
*/
#ifdef BASOP_NOGLOB
Word64 W_sub_o (Word64 L64_var1, Word64 L64_var2, Flag* Overflow) {
#else /* BASOP_NOGLOB */
Word64 W_sub (Word64 L64_var1, Word64 L64_var2) { 
#endif /* BASOP_NOGLOB */
  Word64 L64_var_out;
 
  L64_var_out = L64_var1 - L64_var2;
@@ -1315,7 +1380,11 @@ Word64 W_sub (Word64 L64_var1, Word64 L64_var2) {
    if (((L64_var1 ^ L64_var2) & MIN_64) != 0) {
        if ((L64_var_out ^ L64_var1) & MIN_64) {
            L64_var_out = (L64_var1 < 0) ? MIN_64 : MAX_64;
#ifdef BASOP_NOGLOB
            set_flag(Overflow);
#else /* BASOP_NOGLOB */
            Overflow = 1;
#endif /* BASOP_NOGLOB */
        }
    }

@@ -1325,6 +1394,12 @@ Word64 W_sub (Word64 L64_var1, Word64 L64_var2) {
  return L64_var_out;
}

#ifdef BASOP_NOGLOB
Word64 W_sub (Word64 L64_var1, Word64 L64_var2) {
  return W_sub_o(L64_var1, L64_var2, NULL);
}
#endif /* BASOP_NOGLOB */


/*______________________________________________________________________________
|                                                                               |
@@ -1353,12 +1428,20 @@ Word64 W_sub (Word64 L64_var1, Word64 L64_var2) {
|       range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL.     |
|_______________________________________________________________________________|
*/
#ifdef BASOP_NOGLOB
Word64 W_neg_o (Word64 L64_var1, Flag* Overflow) {
#else /* BASOP_NOGLOB */
Word64 W_neg (Word64 L64_var1) {
#endif /* BASOP_NOGLOB */
    Word64 L64_var_out;
     
  if (L64_var1 == MIN_64) { 
    L64_var_out = MAX_64;
#ifdef BASOP_NOGLOB
        set_flag(Overflow);
#else /* BASOP_NOGLOB */
        Overflow = 1; 
#endif /* BASOP_NOGLOB */
  } 
  else { 
    L64_var_out = -L64_var1; 
@@ -1372,6 +1455,12 @@ Word64 W_neg (Word64 L64_var1) {

}

#ifdef BASOP_NOGLOB
Word64 W_neg (Word64 L64_var1) {
  return W_neg_o(L64_var1, NULL);
}
#endif /* BASOP_NOGLOB */


/*___________________________________________________________________________
 |                                                                           |
@@ -1400,12 +1489,20 @@ Word64 W_neg (Word64 L64_var1) {
 |       range : 0x80000000 00000000LL <= L64_var1 <= 0x7fffffff ffffffffLL. |
 |___________________________________________________________________________|
*/
#ifdef BASOP_NOGLOB
Word64 W_abs_o (Word64 L64_var1, Flag* Overflow) {
#else /* BASOP_NOGLOB */
Word64 W_abs (Word64 L64_var1) {
#endif /* BASOP_NOGLOB */
    Word64 L64_var_out;

    if (L64_var1 == MIN_64) {
        L64_var_out = MAX_64; 
#ifdef BASOP_NOGLOB
    set_flag(Overflow);
#else /* BASOP_NOGLOB */
    Overflow = 1;
#endif /* BASOP_NOGLOB */
    }
    else {
        if (L64_var1 < 0) {
@@ -1423,6 +1520,12 @@ Word64 W_abs (Word64 L64_var1) {
    return (L64_var_out);
}

#ifdef BASOP_NOGLOB
Word64 W_abs (Word64 L64_var1) {
  return W_abs_o(L64_var1, NULL);
}
#endif /* BASOP_NOGLOB */

/*_________________________________________________________________________________________________
|                                                                                                 |
|   Function Name : W_mult_32_32                                                                  |
@@ -1455,12 +1558,20 @@ Word64 W_abs (Word64 L64_var1) {
|             range : 0x80000000 00000000LL <= L64_var_out <= 0x7fffffff ffffffffLL.              |
|_________________________________________________________________________________________________|
*/
#ifdef BASOP_NOGLOB
Word64 W_mult_32_32_o(Word32 L_var1, Word32 L_var2, Flag* Overflow) {
#else /* BASOP_NOGLOB */
Word64 W_mult_32_32(Word32 L_var1, Word32 L_var2) { 
#endif /* BASOP_NOGLOB */
  Word64  L64_var_out; 
   
  if ((L_var1 == MIN_32) && (L_var2 == MIN_32)) { 
    L64_var_out = MAX_64; 
#ifdef BASOP_NOGLOB
    set_flag(Overflow);
#else /* BASOP_NOGLOB */
    Overflow = 1; 
#endif /* BASOP_NOGLOB */
  } 
  else { 
    L64_var_out = ((Word64 )L_var1*L_var2) << 1; 
@@ -1472,6 +1583,12 @@ Word64 W_mult_32_32(Word32 L_var1, Word32 L_var2) {
  return L64_var_out;
}

#ifdef BASOP_NOGLOB
Word64 W_mult_32_32(Word32 L_var1, Word32 L_var2) {
  return W_mult_32_32_o(L_var1, L_var2, NULL);
}
#endif /* BASOP_NOGLOB */

/*_________________________________________________________________________________________________
|                                                                                                 |
|   Function Name : W_mult0_32_32                                                                 |
Loading