basop32.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #if !defined(BASOP32_H_DEFINED)
00018 #define BASOP32_H_DEFINED
00019
00020 int32_t L_add(int32_t L_var1, int32_t L_var2);
00021
00022 static __inline__ int16_t saturate(int32_t amp)
00023 {
00024 int16_t amp16;
00025
00026
00027 amp16 = (int16_t) amp;
00028 if (amp == amp16)
00029 return amp16;
00030 if (amp > INT16_MAX)
00031 return INT16_MAX;
00032 return INT16_MIN;
00033 }
00034
00035
00036 static __inline__ int16_t xround(int32_t L_var1)
00037 {
00038 return (int16_t) (L_add(L_var1, (int32_t) 0x00008000L) >> 16);
00039 }
00040
00041
00042 static __inline__ int16_t abs_s(int16_t var1)
00043 {
00044 if (var1 == INT16_MIN)
00045 return INT16_MAX;
00046 return abs(var1);
00047 }
00048
00049
00050 static __inline__ int16_t add(int16_t var1, int16_t var2)
00051 {
00052 return saturate((int32_t) var1 + var2);
00053 }
00054
00055
00056 static __inline__ int16_t sub(int16_t var1, int16_t var2)
00057 {
00058 return saturate((int32_t) var1 - var2);
00059 }
00060
00061
00062 static __inline__ int16_t mult(int16_t var1, int16_t var2)
00063 {
00064 return saturate(((int32_t) var1*(int32_t) var2) >> 15);
00065 }
00066
00067
00068 static __inline__ int32_t L_mult0(int16_t var1, int16_t var2)
00069 {
00070 return (int32_t) var1*(int32_t) var2;
00071 }
00072
00073
00074 static __inline__ int32_t L_mac0(int32_t L_var3, int16_t var1, int16_t var2)
00075 {
00076 return L_add(L_var3, L_mult0(var1, var2));
00077 }
00078
00079
00080 static __inline__ int32_t L_mult(int16_t var1, int16_t var2)
00081 {
00082 int32_t L_var_out;
00083
00084 L_var_out = (int32_t) var1*(int32_t) var2;
00085 if (L_var_out == (int32_t) 0x40000000L)
00086 return INT32_MAX;
00087 return L_var_out << 1;
00088 }
00089
00090
00091 static __inline__ int16_t negate(int16_t var1)
00092 {
00093 if (var1 == INT16_MIN)
00094 return INT16_MAX;
00095 return -var1;
00096 }
00097
00098
00099 static __inline__ int32_t L_mac(int32_t L_var3, int16_t var1, int16_t var2)
00100 {
00101 return L_add(L_var3, L_mult(var1, var2));
00102 }
00103
00104
00105 int16_t shl(int16_t var1, int16_t var2);
00106 int16_t shr(int16_t var1, int16_t var2);
00107 int32_t L_sub(int32_t L_var1, int32_t L_var2);
00108 int32_t L_shl(int32_t L_var1, int16_t var2);
00109 int32_t L_shr(int32_t L_var1, int16_t var2);
00110 int16_t norm_s(int16_t var1);
00111 int16_t div_s(int16_t var1, int16_t var2);
00112 int16_t norm_l(int32_t L_var1);
00113
00114 #endif
00115
00116