Commit 0976c152 authored by norvell's avatar norvell
Browse files

Adding saturating operator variants

parent cbd70fd9
Loading
Loading
Loading
Loading
+92 −0
Original line number Diff line number Diff line
@@ -352,6 +352,10 @@ Word16 add (Word16 var1, Word16 var2) {
Word16 add (Word16 var1, Word16 var2) {
  return add_o (var1, var2, NULL);
}
Word16 add_sat(Word16 var1, Word16 var2) {
    Flag Overflow;
    return add_o(var1, var2, &Overflow);
}
#endif /* BASOP_NOGLOB */


@@ -413,6 +417,10 @@ Word16 sub (Word16 var1, Word16 var2) {
Word16 sub (Word16 var1, Word16 var2) {
  return sub_o (var1, var2, NULL);
}
Word16 sub_sat(Word16 var1, Word16 var2) {
    Flag Overflow;
    return sub_o(var1, var2, &Overflow);
}
#endif /* BASOP_NOGLOB */


@@ -543,6 +551,10 @@ Word16 shl (Word16 var1, Word16 var2) {
Word16 shl (Word16 var1, Word16 var2) {
  return shl_o (var1, var2, NULL);
}
Word16 shl_sat(Word16 var1, Word16 var2) {
    Flag Overflow;
    return shl_o(var1, var2, &Overflow);
}
#endif /* BASOP_NOGLOB */


@@ -623,6 +635,10 @@ Word16 shr (Word16 var1, Word16 var2) {
Word16 shr (Word16 var1, Word16 var2) {
  return shr_o (var1, var2, NULL);
}
Word16 shr_sat(Word16 var1, Word16 var2) {
    Flag Overflow;
    return shr_o(var1, var2, &Overflow);
}
#endif /* BASOP_NOGLOB */

/*___________________________________________________________________________
@@ -690,6 +706,10 @@ Word16 mult (Word16 var1, Word16 var2) {
Word16 mult (Word16 var1, Word16 var2) {
  return mult_o (var1, var2, NULL);
}
Word16 mult_sat(Word16 var1, Word16 var2) {
    Flag Overflow;
    return mult_o(var1, var2, &Overflow);
}
#endif /* BASOP_NOGLOB */


@@ -757,6 +777,10 @@ Word32 L_mult (Word16 var1, Word16 var2) {
Word32 L_mult (Word16 var1, Word16 var2) {
  return L_mult_o (var1, var2, NULL);
}
Word32 L_mult_sat(Word16 var1, Word16 var2) {
    Flag Overflow;
    return L_mult_o(var1, var2, &Overflow);
}
#endif /* BASOP_NOGLOB */


@@ -935,6 +959,10 @@ Word16 round_fx (Word32 L_var1) {
Word16 round_fx (Word32 L_var1) {
  return round_fx_o (L_var1, NULL);
}
Word16 round_fx_sat(Word32 L_var1) {
    Flag Overflow;
    return round_fx_o(L_var1, &Overflow);
}
#endif /* BASOP_NOGLOB */


@@ -1002,6 +1030,10 @@ Word32 L_mac (Word32 L_var3, Word16 var1, Word16 var2) {
Word32 L_mac (Word32 L_var3, Word16 var1, Word16 var2) {
  return L_mac_o (L_var3, var1, var2, NULL);
}
Word32 L_mac_sat(Word32 L_var3, Word16 var1, Word16 var2) {
    Flag Overflow;
    return L_mac_o(L_var3, var1, var2, &Overflow);
}
#endif /* BASOP_NOGLOB */


@@ -1069,6 +1101,10 @@ Word32 L_msu (Word32 L_var3, Word16 var1, Word16 var2) {
Word32 L_msu (Word32 L_var3, Word16 var1, Word16 var2) {
  return L_msu_o (L_var3, var1, var2, NULL);
}
Word32 L_msu_sat(Word32 L_var3, Word16 var1, Word16 var2) {
    Flag Overflow;
    return L_msu_o(L_var3, var1, var2, &Overflow);
}
#endif /* BASOP_NOGLOB */


@@ -1144,6 +1180,10 @@ Word32 L_macNs (Word32 L_var3, Word16 var1, Word16 var2) {
Word32 L_macNs (Word32 L_var3, Word16 var1, Word16 var2) {
  return L_macNs_co (L_var3, var1, var2, NULL, NULL);
}
Word32 L_macNs_sat(Word32 L_var3, Word16 var1, Word16 var2) {
    Flag Carry, Overflow;
    return L_macNs_co(L_var3, var1, var2, &Carry, &Overflow);
}
#endif /* BASOP_NOGLOB */

/*___________________________________________________________________________
@@ -1219,6 +1259,10 @@ Word32 L_msuNs (Word32 L_var3, Word16 var1, Word16 var2) {
Word32 L_msuNs (Word32 L_var3, Word16 var1, Word16 var2) {
  return L_msuNs_co (L_var3, var1, var2, NULL, NULL);
}
Word32 L_msuNs_sat(Word32 L_var3, Word16 var1, Word16 var2) {
    Flag Carry, Overflow;
    return L_msuNs_co(L_var3, var1, var2, &Carry, &Overflow);
}
#endif /* BASOP_NOGLOB */


@@ -1282,6 +1326,10 @@ Word32 L_add (Word32 L_var1, Word32 L_var2) {
Word32 L_add (Word32 L_var1, Word32 L_var2) {
  return L_add_o (L_var1, L_var2, NULL);
}
Word32 L_add_sat(Word32 L_var1, Word32 L_var2) {
    Flag Overflow;
    return L_add_o(L_var1, L_var2, &Overflow);
}
#endif /* BASOP_NOGLOB */


@@ -1345,6 +1393,10 @@ Word32 L_sub (Word32 L_var1, Word32 L_var2) {
Word32 L_sub (Word32 L_var1, Word32 L_var2) {
  return L_sub_o (L_var1, L_var2, NULL);
}
Word32 L_sub_sat(Word32 L_var1, Word32 L_var2) {
    Flag Overflow;
    return L_sub_o(L_var1, L_var2, &Overflow);
}
#endif /* BASOP_NOGLOB */


@@ -1736,6 +1788,10 @@ Word16 mult_r (Word16 var1, Word16 var2) {
Word16 mult_r (Word16 var1, Word16 var2) {
  return mult_ro (var1, var2, NULL);
}
Word16 mult_r_sat(Word16 var1, Word16 var2) {
    Flag Overflow;
    return mult_ro(var1, var2, &Overflow);
}
#endif /* BASOP_NOGLOB */


@@ -1823,6 +1879,10 @@ Word32 L_shl (Word32 L_var1, Word16 var2) {
Word32 L_shl (Word32 L_var1, Word16 var2) {
  return L_shl_o (L_var1, var2, NULL);
}
Word32 L_shl_sat(Word32 L_var1, Word16 var2) {
    Flag Overflow;
    return L_shl_o(L_var1, var2, &Overflow);
}
#endif /* BASOP_NOGLOB */


@@ -1899,6 +1959,10 @@ Word32 L_shr (Word32 L_var1, Word16 var2) {
Word32 L_shr (Word32 L_var1, Word16 var2) {
  return L_shr_o (L_var1, var2, NULL);
}
Word32 L_shr_sat(Word32 L_var1, Word16 var2) {
    Flag Overflow;
    return L_shr_o(L_var1, var2, &Overflow);
}
#endif /* BASOP_NOGLOB */


@@ -1980,6 +2044,10 @@ Word16 shr_r (Word16 var1, Word16 var2) {
Word16 shr_r(Word16 var1, Word16 var2) {
    return shr_ro(var1, var2, NULL);
}
Word16 shr_r_sat(Word16 var1, Word16 var2) {
    Flag Overflow;
    return shr_ro(var1, var2, &Overflow);
}
#endif /* BASOP_NOGLOB */

/*___________________________________________________________________________
@@ -2049,6 +2117,10 @@ Word16 mac_r (Word32 L_var3, Word16 var1, Word16 var2) {
Word16 mac_r (Word32 L_var3, Word16 var1, Word16 var2) {
  return mac_ro (L_var3, var1, var2, NULL);
}
Word16 mac_r_sat(Word32 L_var3, Word16 var1, Word16 var2) {
    Flag Overflow;
    return mac_ro(L_var3, var1, var2, &Overflow);
}
#endif /* BASOP_NOGLOB */


@@ -2119,6 +2191,10 @@ Word16 msu_r (Word32 L_var3, Word16 var1, Word16 var2) {
Word16 msu_r (Word32 L_var3, Word16 var1, Word16 var2) {
  return msu_ro (L_var3, var1, var2, NULL);
}
Word16 msu_r_sat(Word32 L_var3, Word16 var1, Word16 var2) {
    Flag Overflow;
    return msu_ro(L_var3, var1, var2, &Overflow);
}
#endif /* BASOP_NOGLOB */


@@ -2657,6 +2733,10 @@ Word32 L_mls (Word32 Lv, Word16 v) {
Word32 L_mls (Word32 Lv, Word16 v) {
  return L_mls_o (Lv, v, NULL);
}
Word32 L_mls_sat(Word32 Lv, Word16 v) {
    Flag Overflow;
    return L_mls_o(Lv, v, &Overflow);
}
#endif /* BASOP_NOGLOB */


@@ -2805,6 +2885,10 @@ Word16 i_mult (Word16 a, Word16 b) {
Word16 i_mult(Word16 a, Word16 b) {
    return i_mult_o(a, b, NULL);
}
Word16 i_mult_sat(Word16 a, Word16 b) {
    Flag Overflow;
    return i_mult_o(a, b, &Overflow);
}
#endif


@@ -2912,6 +2996,10 @@ Word32 L_mac0 (Word32 L_var3, Word16 var1, Word16 var2) {
Word32 L_mac0 (Word32 L_var3, Word16 var1, Word16 var2) {
  return L_mac0_o (L_var3, var1, var2, NULL);
}
Word32 L_mac0_sat(Word32 L_var3, Word16 var1, Word16 var2) {
    Flag Overflow;
    return L_mac0_o(L_var3, var1, var2, &Overflow);
}
#endif /* BASOP_NOGLOB */


@@ -2973,6 +3061,10 @@ Word32 L_msu0 (Word32 L_var3, Word16 var1, Word16 var2) {
Word32 L_msu0 (Word32 L_var3, Word16 var1, Word16 var2) {
  return L_msu0_o (L_var3, var1, var2, NULL);
}
Word32 L_msu0_sat(Word32 L_var3, Word16 var1, Word16 var2) {
    Flag Overflow;
    return L_msu0_o(L_var3, var1, var2, &Overflow);
}
#endif /* BASOP_NOGLOB */


+27 −0
Original line number Diff line number Diff line
@@ -220,6 +220,33 @@ 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 Carry, Flag Overflow);

/*
 * Saturating operators
 */
Word16 i_mult_sat(Word16 a, Word16 b);
Word16 add_sat(Word16 var1, Word16 var2);
Word16 sub_sat(Word16 var1, Word16 var2);
Word16 shl_sat(Word16 var1, Word16 var2);
Word16 shr_sat(Word16 var1, Word16 var2);
Word16 shr_r_sat(Word16 var1, Word16 var2);
Word16 mult_sat(Word16 var1, Word16 var2);
Word32 L_mult_sat(Word16 var1, Word16 var2);
Word16 round_fx_sat(Word32 L_var1);
Word32 L_mac_sat(Word32 L_var3, Word16 var1, Word16 var2);
Word32 L_msu_sat(Word32 L_var3, Word16 var1, Word16 var2);
Word32 L_macNs_sat(Word32 L_var3, Word16 var1, Word16 var2);
Word32 L_msuNs_sat(Word32 L_var3, Word16 var1, Word16 var2);
Word32 L_add_sat(Word32 L_var1, Word32 L_var2);
Word32 L_sub_sat(Word32 L_var1, Word32 L_var2);
Word32 L_shr_sat(Word32 L_var1, Word16 var2);
Word32 L_shl_sat(Word32 L_var1, Word16 var2);
Word32 L_mls_sat(Word32 Lv, Word16 v);
Word32 L_mac0_sat(Word32 L_var3, Word16 var1, Word16 var2);
Word32 L_msu0_sat(Word32 L_var3, Word16 var1, Word16 var2);
Word16 mult_r_sat(Word16 var1, Word16 var2);
Word16 mac_r_sat(Word32 L_var3, Word16 var1, Word16 var2);
Word16 msu_r_sat(Word32 L_var3, Word16 var1, Word16 var2);
#endif /* BASOP_NOGLOB */

#endif /* ifndef _BASIC_OP_H */