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