summaryrefslogtreecommitdiff
path: root/apps/codecs/lib/asm_arm.h
diff options
context:
space:
mode:
Diffstat (limited to 'apps/codecs/lib/asm_arm.h')
-rw-r--r--apps/codecs/lib/asm_arm.h103
1 files changed, 52 insertions, 51 deletions
diff --git a/apps/codecs/lib/asm_arm.h b/apps/codecs/lib/asm_arm.h
index 4f31f80c3e..627f4afd78 100644
--- a/apps/codecs/lib/asm_arm.h
+++ b/apps/codecs/lib/asm_arm.h
@@ -33,9 +33,9 @@ static inline int32_t MULT31(int32_t x, int32_t y) {
33 33
34static inline int32_t MULT31_SHIFT15(int32_t x, int32_t y) { 34static inline int32_t MULT31_SHIFT15(int32_t x, int32_t y) {
35 int lo,hi; 35 int lo,hi;
36 asm volatile("smull %0, %1, %2, %3\n\t" 36 asm volatile("smull %0, %1, %2, %3\n\t"
37 "movs %0, %0, lsr #15\n\t" 37 "movs %0, %0, lsr #15\n\t"
38 "adc %1, %0, %1, lsl #17\n\t" 38 "adc %1, %0, %1, lsl #17\n\t"
39 : "=&r"(lo),"=&r"(hi) 39 : "=&r"(lo),"=&r"(hi)
40 : "r"(x),"r"(y) 40 : "r"(x),"r"(y)
41 : "cc" ); 41 : "cc" );
@@ -45,43 +45,43 @@ static inline int32_t MULT31_SHIFT15(int32_t x, int32_t y) {
45#define XPROD32(a, b, t, v, x, y) \ 45#define XPROD32(a, b, t, v, x, y) \
46{ \ 46{ \
47 long l; \ 47 long l; \
48 asm( "smull %0, %1, %3, %5\n\t" \ 48 asm( "smull %0, %1, %3, %5\n\t" \
49 "rsb %2, %6, #0\n\t" \ 49 "rsb %2, %6, #0\n\t" \
50 "smlal %0, %1, %4, %6\n\t" \ 50 "smlal %0, %1, %4, %6\n\t" \
51 "smull %0, %2, %3, %2\n\t" \ 51 "smull %0, %2, %3, %2\n\t" \
52 "smlal %0, %2, %4, %5" \ 52 "smlal %0, %2, %4, %5" \
53 : "=&r" (l), "=&r" (x), "=&r" (y) \ 53 : "=&r" (l), "=&r" (x), "=&r" (y) \
54 : "r" ((a)), "r" ((b)), "r" ((t)), "r" ((v)) ); \ 54 : "r" ((a)), "r" ((b)), "r" ((t)), "r" ((v)) ); \
55} 55}
56 56
57static inline void XPROD31(int32_t a, int32_t b, 57static inline void XPROD31(int32_t a, int32_t b,
58 int32_t t, int32_t v, 58 int32_t t, int32_t v,
59 int32_t *x, int32_t *y) 59 int32_t *x, int32_t *y)
60{ 60{
61 int x1, y1, l; 61 int x1, y1, l;
62 asm( "smull %0, %1, %3, %5\n\t" 62 asm( "smull %0, %1, %3, %5\n\t"
63 "rsb %2, %6, #0\n\t" 63 "rsb %2, %6, #0\n\t"
64 "smlal %0, %1, %4, %6\n\t" 64 "smlal %0, %1, %4, %6\n\t"
65 "smull %0, %2, %3, %2\n\t" 65 "smull %0, %2, %3, %2\n\t"
66 "smlal %0, %2, %4, %5" 66 "smlal %0, %2, %4, %5"
67 : "=&r" (l), "=&r" (x1), "=&r" (y1) 67 : "=&r" (l), "=&r" (x1), "=&r" (y1)
68 : "r" (a), "r" (b), "r" (t), "r" (v) ); 68 : "r" (a), "r" (b), "r" (t), "r" (v) );
69 *x = x1 << 1; 69 *x = x1 << 1;
70 *y = y1 << 1; 70 *y = y1 << 1;
71} 71}
72 72
73static inline void XNPROD31(int32_t a, int32_t b, 73static inline void XNPROD31(int32_t a, int32_t b,
74 int32_t t, int32_t v, 74 int32_t t, int32_t v,
75 int32_t *x, int32_t *y) 75 int32_t *x, int32_t *y)
76{ 76{
77 int x1, y1, l; 77 int x1, y1, l;
78 asm( "smull %0, %1, %3, %5\n\t" 78 asm( "smull %0, %1, %3, %5\n\t"
79 "rsb %2, %4, #0\n\t" 79 "rsb %2, %4, #0\n\t"
80 "smlal %0, %1, %2, %6\n\t" 80 "smlal %0, %1, %2, %6\n\t"
81 "smull %0, %2, %4, %5\n\t" 81 "smull %0, %2, %4, %5\n\t"
82 "smlal %0, %2, %3, %6" 82 "smlal %0, %2, %3, %6"
83 : "=&r" (l), "=&r" (x1), "=&r" (y1) 83 : "=&r" (l), "=&r" (x1), "=&r" (y1)
84 : "r" (a), "r" (b), "r" (t), "r" (v) ); 84 : "r" (a), "r" (b), "r" (t), "r" (v) );
85 *x = x1 << 1; 85 *x = x1 << 1;
86 *y = y1 << 1; 86 *y = y1 << 1;
87} 87}
@@ -89,13 +89,13 @@ static inline void XNPROD31(int32_t a, int32_t b,
89#define XPROD31_R(_a, _b, _t, _v, _x, _y)\ 89#define XPROD31_R(_a, _b, _t, _v, _x, _y)\
90{\ 90{\
91 int x1, y1, l;\ 91 int x1, y1, l;\
92 asm( "smull %0, %1, %5, %3\n\t"\ 92 asm( "smull %0, %1, %5, %3\n\t"\
93 "rsb %2, %3, #0\n\t"\ 93 "rsb %2, %3, #0\n\t"\
94 "smlal %0, %1, %6, %4\n\t"\ 94 "smlal %0, %1, %6, %4\n\t"\
95 "smull %0, %2, %6, %2\n\t"\ 95 "smull %0, %2, %6, %2\n\t"\
96 "smlal %0, %2, %5, %4"\ 96 "smlal %0, %2, %5, %4"\
97 : "=&r" (l), "=&r" (x1), "=&r" (y1)\ 97 : "=&r" (l), "=&r" (x1), "=&r" (y1)\
98 : "r" (_a), "r" (_b), "r" (_t), "r" (_v) );\ 98 : "r" (_a), "r" (_b), "r" (_t), "r" (_v) );\
99 _x = x1 << 1;\ 99 _x = x1 << 1;\
100 _y = y1 << 1;\ 100 _y = y1 << 1;\
101} 101}
@@ -103,13 +103,13 @@ static inline void XNPROD31(int32_t a, int32_t b,
103#define XNPROD31_R(_a, _b, _t, _v, _x, _y)\ 103#define XNPROD31_R(_a, _b, _t, _v, _x, _y)\
104{\ 104{\
105 int x1, y1, l;\ 105 int x1, y1, l;\
106 asm( "smull %0, %1, %5, %3\n\t"\ 106 asm( "smull %0, %1, %5, %3\n\t"\
107 "rsb %2, %4, #0\n\t"\ 107 "rsb %2, %4, #0\n\t"\
108 "smlal %0, %1, %6, %2\n\t"\ 108 "smlal %0, %1, %6, %2\n\t"\
109 "smull %0, %2, %5, %4\n\t"\ 109 "smull %0, %2, %5, %4\n\t"\
110 "smlal %0, %2, %6, %3"\ 110 "smlal %0, %2, %6, %3"\
111 : "=&r" (l), "=&r" (x1), "=&r" (y1)\ 111 : "=&r" (l), "=&r" (x1), "=&r" (y1)\
112 : "r" (_a), "r" (_b), "r" (_t), "r" (_v) );\ 112 : "r" (_a), "r" (_b), "r" (_t), "r" (_v) );\
113 _x = x1 << 1;\ 113 _x = x1 << 1;\
114 _y = y1 << 1;\ 114 _y = y1 << 1;\
115} 115}
@@ -221,25 +221,26 @@ void vect_mult_bw(int32_t *data, int32_t *window, int n)
221#endif 221#endif
222 222
223#endif 223#endif
224 224/* not used anymore */
225/*
225#ifndef _V_CLIP_MATH 226#ifndef _V_CLIP_MATH
226#define _V_CLIP_MATH 227#define _V_CLIP_MATH
227 228
228static inline int32_t CLIP_TO_15(int32_t x) { 229static inline int32_t CLIP_TO_15(int32_t x) {
229 int tmp; 230 int tmp;
230 asm volatile("subs %1, %0, #32768\n\t" 231 asm volatile("subs %1, %0, #32768\n\t"
231 "movpl %0, #0x7f00\n\t" 232 "movpl %0, #0x7f00\n\t"
232 "orrpl %0, %0, #0xff\n" 233 "orrpl %0, %0, #0xff\n"
233 "adds %1, %0, #32768\n\t" 234 "adds %1, %0, #32768\n\t"
234 "movmi %0, #0x8000" 235 "movmi %0, #0x8000"
235 : "+r"(x),"=r"(tmp) 236 : "+r"(x),"=r"(tmp)
236 : 237 :
237 : "cc"); 238 : "cc");
238 return(x); 239 return(x);
239} 240}
240 241
241#endif 242#endif
242 243*/
243#ifndef _V_LSP_MATH_ASM 244#ifndef _V_LSP_MATH_ASM
244#define _V_LSP_MATH_ASM 245#define _V_LSP_MATH_ASM
245 246