diff options
Diffstat (limited to 'apps/codecs/lib/asm_arm.h')
-rw-r--r-- | apps/codecs/lib/asm_arm.h | 103 |
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 | ||
34 | static inline int32_t MULT31_SHIFT15(int32_t x, int32_t y) { | 34 | static 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 | ||
57 | static inline void XPROD31(int32_t a, int32_t b, | 57 | static 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 | ||
73 | static inline void XNPROD31(int32_t a, int32_t b, | 73 | static 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 | ||
228 | static inline int32_t CLIP_TO_15(int32_t x) { | 229 | static 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 | ||