summaryrefslogtreecommitdiff
path: root/apps/codecs/lib/codeclib_misc.h
diff options
context:
space:
mode:
Diffstat (limited to 'apps/codecs/lib/codeclib_misc.h')
-rw-r--r--apps/codecs/lib/codeclib_misc.h59
1 files changed, 36 insertions, 23 deletions
diff --git a/apps/codecs/lib/codeclib_misc.h b/apps/codecs/lib/codeclib_misc.h
index f3b1805e26..08be93716f 100644
--- a/apps/codecs/lib/codeclib_misc.h
+++ b/apps/codecs/lib/codeclib_misc.h
@@ -15,32 +15,15 @@
15 15
16 ********************************************************************/ 16 ********************************************************************/
17 17
18//#include "config-tremor.h" 18#ifndef _CODECLIB_MISC_H_
19 19#define _CODECLIB_MISC_H_
20#ifndef _V_RANDOM_H_
21#define _V_RANDOM_H_
22//#include "ivorbiscodec.h"
23//#include "os_types.h"
24 20
21#include <stdint.h>
25#include "asm_arm.h" 22#include "asm_arm.h"
26#include "asm_mcf5249.h" 23#include "asm_mcf5249.h"
27 24
28
29/* Some prototypes that were not defined elsewhere */
30//void *_vorbis_block_alloc(vorbis_block *vb,long bytes);
31//void _vorbis_block_ripcord(vorbis_block *vb);
32//extern int _ilog(unsigned int v);
33
34#ifndef _V_WIDE_MATH
35#define _V_WIDE_MATH
36
37#ifndef ROCKBOX
38#include <inttypes.h>
39#endif /* ROCKBOX */
40
41#ifndef _LOW_ACCURACY_ 25#ifndef _LOW_ACCURACY_
42/* 64 bit multiply */ 26/* 64 bit multiply */
43/* #include <sys/types.h> */
44 27
45#ifdef ROCKBOX_LITTLE_ENDIAN 28#ifdef ROCKBOX_LITTLE_ENDIAN
46union magic { 29union magic {
@@ -60,29 +43,43 @@ union magic {
60}; 43};
61#endif 44#endif
62 45
46#ifndef INCL_OPTIMIZED_MULT32
47#define INCL_OPTIMIZED_MULT32
63static inline int32_t MULT32(int32_t x, int32_t y) { 48static inline int32_t MULT32(int32_t x, int32_t y) {
64 union magic magic; 49 union magic magic;
65 magic.whole = (int64_t)x * y; 50 magic.whole = (int64_t)x * y;
66 return magic.halves.hi; 51 return magic.halves.hi;
67} 52}
53#endif
68 54
55#ifndef INCL_OPTIMIZED_MULT31
56#define INCL_OPTIMIZED_MULT31
69static inline int32_t MULT31(int32_t x, int32_t y) { 57static inline int32_t MULT31(int32_t x, int32_t y) {
70 return MULT32(x,y)<<1; 58 return MULT32(x,y)<<1;
71} 59}
60#endif
72 61
62#ifndef INCL_OPTIMIZED_MULT31_SHIFT15
63#define INCL_OPTIMIZED_MULT31_SHIFT15
73static inline int32_t MULT31_SHIFT15(int32_t x, int32_t y) { 64static inline int32_t MULT31_SHIFT15(int32_t x, int32_t y) {
74 union magic magic; 65 union magic magic;
75 magic.whole = (int64_t)x * y; 66 magic.whole = (int64_t)x * y;
76 return ((uint32_t)(magic.halves.lo)>>15) | ((magic.halves.hi)<<17); 67 return ((uint32_t)(magic.halves.lo)>>15) | ((magic.halves.hi)<<17);
77} 68}
69#endif
78 70
71#ifndef INCL_OPTIMIZED_MULT31_SHIFT16
72#define INCL_OPTIMIZED_MULT31_SHIFT16
79static inline int32_t MULT31_SHIFT16(int32_t x, int32_t y) { 73static inline int32_t MULT31_SHIFT16(int32_t x, int32_t y) {
80 union magic magic; 74 union magic magic;
81 magic.whole = (int64_t)x * y; 75 magic.whole = (int64_t)x * y;
82 return ((uint32_t)(magic.halves.lo)>>16) | ((magic.halves.hi)<<16); 76 return ((uint32_t)(magic.halves.lo)>>16) | ((magic.halves.hi)<<16);
83} 77}
78#endif
84 79
85#else 80#else
81/* Rockbox: unused */
82#if 0
86/* 32 bit multiply, more portable but less accurate */ 83/* 32 bit multiply, more portable but less accurate */
87 84
88/* 85/*
@@ -110,6 +107,7 @@ static inline int32_t MULT31_SHIFT15(int32_t x, int32_t y) {
110 return (x >> 6) * y; /* y preshifted >>9 */ 107 return (x >> 6) * y; /* y preshifted >>9 */
111} 108}
112#endif 109#endif
110#endif
113 111
114/* 112/*
115 * The XPROD functions are meant to optimize the cross products found all 113 * The XPROD functions are meant to optimize the cross products found all
@@ -121,13 +119,17 @@ static inline int32_t MULT31_SHIFT15(int32_t x, int32_t y) {
121 * macros. 119 * macros.
122 */ 120 */
123 121
122#ifndef INCL_OPTIMIZED_XPROD32
123#define INCL_OPTIMIZED_XPROD32
124/* replaced XPROD32 with a macro to avoid memory reference 124/* replaced XPROD32 with a macro to avoid memory reference
125 _x, _y are the results (must be l-values) */ 125 _x, _y are the results (must be l-values) */
126#define XPROD32(_a, _b, _t, _v, _x, _y) \ 126#define XPROD32(_a, _b, _t, _v, _x, _y) \
127 { (_x)=MULT32(_a,_t)+MULT32(_b,_v); \ 127 { (_x)=MULT32(_a,_t)+MULT32(_b,_v); \
128 (_y)=MULT32(_b,_t)-MULT32(_a,_v); } 128 (_y)=MULT32(_b,_t)-MULT32(_a,_v); }
129#endif
129 130
130 131/* Rockbox: Unused */
132/*
131#ifdef __i386__ 133#ifdef __i386__
132 134
133#define XPROD31(_a, _b, _t, _v, _x, _y) \ 135#define XPROD31(_a, _b, _t, _v, _x, _y) \
@@ -138,7 +140,10 @@ static inline int32_t MULT31_SHIFT15(int32_t x, int32_t y) {
138 *(_y)=MULT31(_b,_t)+MULT31(_a,_v); } 140 *(_y)=MULT31(_b,_t)+MULT31(_a,_v); }
139 141
140#else 142#else
143*/
141 144
145#ifndef INCL_OPTIMIZED_XPROD31
146#define INCL_OPTIMIZED_XPROD31
142static inline void XPROD31(int32_t a, int32_t b, 147static inline void XPROD31(int32_t a, int32_t b,
143 int32_t t, int32_t v, 148 int32_t t, int32_t v,
144 int32_t *x, int32_t *y) 149 int32_t *x, int32_t *y)
@@ -146,7 +151,10 @@ static inline void XPROD31(int32_t a, int32_t b,
146 *x = MULT31(a, t) + MULT31(b, v); 151 *x = MULT31(a, t) + MULT31(b, v);
147 *y = MULT31(b, t) - MULT31(a, v); 152 *y = MULT31(b, t) - MULT31(a, v);
148} 153}
154#endif
149 155
156#ifndef INCL_OPTIMIZED_XNPROD31
157#define INCL_OPTIMIZED_XNPROD31
150static inline void XNPROD31(int32_t a, int32_t b, 158static inline void XNPROD31(int32_t a, int32_t b,
151 int32_t t, int32_t v, 159 int32_t t, int32_t v,
152 int32_t *x, int32_t *y) 160 int32_t *x, int32_t *y)
@@ -155,19 +163,25 @@ static inline void XNPROD31(int32_t a, int32_t b,
155 *y = MULT31(b, t) + MULT31(a, v); 163 *y = MULT31(b, t) + MULT31(a, v);
156} 164}
157#endif 165#endif
166/*#endif*/
158 167
168#ifndef INCL_OPTIMIZED_XPROD31_R
169#define INCL_OPTIMIZED_XPROD31_R
159#define XPROD31_R(_a, _b, _t, _v, _x, _y)\ 170#define XPROD31_R(_a, _b, _t, _v, _x, _y)\
160{\ 171{\
161 _x = MULT31(_a, _t) + MULT31(_b, _v);\ 172 _x = MULT31(_a, _t) + MULT31(_b, _v);\
162 _y = MULT31(_b, _t) - MULT31(_a, _v);\ 173 _y = MULT31(_b, _t) - MULT31(_a, _v);\
163} 174}
175#endif
164 176
177#ifndef INCL_OPTIMIZED_XNPROD31_R
178#define INCL_OPTIMIZED_XNPROD31_R
165#define XNPROD31_R(_a, _b, _t, _v, _x, _y)\ 179#define XNPROD31_R(_a, _b, _t, _v, _x, _y)\
166{\ 180{\
167 _x = MULT31(_a, _t) - MULT31(_b, _v);\ 181 _x = MULT31(_a, _t) - MULT31(_b, _v);\
168 _y = MULT31(_b, _t) + MULT31(_a, _v);\ 182 _y = MULT31(_b, _t) + MULT31(_a, _v);\
169} 183}
170 184#endif
171 185
172#ifndef _V_VECT_OPS 186#ifndef _V_VECT_OPS
173#define _V_VECT_OPS 187#define _V_VECT_OPS
@@ -213,7 +227,6 @@ void vect_mult_bw(int32_t *data, int32_t *window, int n)
213} 227}
214#endif 228#endif
215 229
216#endif
217/* not used anymore */ 230/* not used anymore */
218/* 231/*
219#ifndef _V_CLIP_MATH 232#ifndef _V_CLIP_MATH