00001
00013 #ifndef _CO_MATH_H_
00014 #define _CO_MATH_H_
00015
00025
00026
00027
00028
00029 #include "co_int.h"
00030 #include "co_bool.h"
00031 #include "co_bit.h"
00032 #include <stdlib.h>
00033 #include "compiler.h"
00034
00035
00036
00037
00038
00039
00047 #define CO_ALIGN4_HI(val) (((val)+3)&~3)
00048
00060 #define CO_ALIGNx_HI(val, x) (((val)+((x)-1))&~((x)-1))
00061
00069 #define CO_ALIGN4_LO(val) ((val)&~3)
00070
00078 #define CO_ALIGN2_HI(val) (((val)+1)&~1)
00079
00080
00088 #define CO_ALIGN2_LO(val) ((val)&~1)
00089
00090
00091
00092
00093
00094
00102 __INLINE uint32_t co_clz(uint32_t val)
00103 {
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113 uint32_t tmp;
00114 uint32_t shift = 0;
00115
00116 if (val == 0)
00117 {
00118 return 32;
00119 }
00120
00121 tmp = val >> 16;
00122 if (tmp)
00123 {
00124 shift = 16;
00125 val = tmp;
00126 }
00127
00128 tmp = val >> 8;
00129 if (tmp)
00130 {
00131 shift += 8;
00132 val = tmp;
00133 }
00134
00135 tmp = val >> 4;
00136 if (tmp)
00137 {
00138 shift += 4;
00139 val = tmp;
00140 }
00141
00142 tmp = val >> 2;
00143 if (tmp)
00144 {
00145 shift += 2;
00146 val = tmp;
00147 }
00148
00149 tmp = val >> 1;
00150 if (tmp)
00151 {
00152 shift += 1;
00153 }
00154
00155 return (31 - shift);
00156
00157 }
00158
00165 __INLINE void co_random_init(uint32_t seed)
00166 {
00167 srand(seed);
00168 }
00169
00176 __INLINE uint8_t co_rand_byte(void)
00177 {
00178 return (uint8_t)(rand() & 0xFF);
00179 }
00180
00187 __INLINE uint16_t co_rand_hword(void)
00188 {
00189 return (uint16_t)(rand() & 0xFFFF);
00190 }
00191
00198 __INLINE uint32_t co_rand_word(void)
00199 {
00200 return (uint32_t)rand();
00201 }
00202
00211 __INLINE uint32_t co_min(uint32_t a, uint32_t b)
00212 {
00213 return a < b ? a : b;
00214 }
00215
00224 __INLINE uint32_t co_max(uint32_t a, uint32_t b)
00225 {
00226 return a > b ? a : b;
00227 }
00228
00236 __INLINE int co_abs(int val)
00237 {
00238 return val < 0 ? val*(-1) : val;
00239 }
00240
00253 uint32_t co_crc32(uint32_t addr, uint32_t len, uint32_t crc);
00254
00255
00257
00258 #endif // _CO_MATH_H_