diff options
Diffstat (limited to 'apps/codecs/libtremor/asm_arm.h')
-rw-r--r-- | apps/codecs/libtremor/asm_arm.h | 168 |
1 files changed, 0 insertions, 168 deletions
diff --git a/apps/codecs/libtremor/asm_arm.h b/apps/codecs/libtremor/asm_arm.h index eb0d3ca789..42f82ec088 100644 --- a/apps/codecs/libtremor/asm_arm.h +++ b/apps/codecs/libtremor/asm_arm.h | |||
@@ -17,174 +17,6 @@ | |||
17 | 17 | ||
18 | #ifdef _ARM_ASSEM_ | 18 | #ifdef _ARM_ASSEM_ |
19 | 19 | ||
20 | #if !defined(_V_WIDE_MATH) && !defined(_LOW_ACCURACY_) | ||
21 | #define _V_WIDE_MATH | ||
22 | #ifndef _TREMOR_VECT_OPS | ||
23 | #define _TREMOR_VECT_OPS | ||
24 | /* asm versions of vector operations for block.c, window.c */ | ||
25 | /* SOME IMPORTANT NOTES: this implementation of vect_mult_bw does | ||
26 | NOT do a final shift, meaning that the result of vect_mult_bw is | ||
27 | only 31 bits not 32. This is so that we can do the shift in-place | ||
28 | in vect_add_xxxx instead to save one instruction for each mult on arm */ | ||
29 | static inline | ||
30 | void vect_add_right_left(ogg_int32_t *x, const ogg_int32_t *y, int n) | ||
31 | { | ||
32 | /* first arg is right subframe of previous frame and second arg | ||
33 | is left subframe of current frame. overlap left onto right overwriting | ||
34 | the right subframe */ | ||
35 | |||
36 | do{ | ||
37 | asm volatile ( | ||
38 | "ldmia %[x], {r0, r1, r2, r3};" | ||
39 | "ldmia %[y]!, {r4, r5, r6, r7};" | ||
40 | "add r0, r4, r0, lsl #1;" | ||
41 | "add r1, r5, r1, lsl #1;" | ||
42 | "add r2, r6, r2, lsl #1;" | ||
43 | "add r3, r7, r3, lsl #1;" | ||
44 | "stmia %[x]!, {r0, r1, r2, r3};" | ||
45 | "ldmia %[x], {r0, r1, r2, r3};" | ||
46 | "ldmia %[y]!, {r4, r5, r6, r7};" | ||
47 | "add r0, r4, r0, lsl #1;" | ||
48 | "add r1, r5, r1, lsl #1;" | ||
49 | "add r2, r6, r2, lsl #1;" | ||
50 | "add r3, r7, r3, lsl #1;" | ||
51 | "stmia %[x]!, {r0, r1, r2, r3};" | ||
52 | : [x] "+r" (x), [y] "+r" (y) | ||
53 | : : "r0", "r1", "r2", "r3", | ||
54 | "r4", "r5", "r6", "r7", | ||
55 | "memory"); | ||
56 | n -= 8; | ||
57 | } while (n); | ||
58 | } | ||
59 | |||
60 | static inline | ||
61 | void vect_add_left_right(ogg_int32_t *x, const ogg_int32_t *y, int n) | ||
62 | { | ||
63 | /* first arg is left subframe of current frame and second arg | ||
64 | is right subframe of previous frame. overlap right onto left overwriting | ||
65 | the LEFT subframe */ | ||
66 | do{ | ||
67 | asm volatile ( | ||
68 | "ldmia %[x], {r0, r1, r2, r3};" | ||
69 | "ldmia %[y]!, {r4, r5, r6, r7};" | ||
70 | "add r0, r0, r4, lsl #1;" | ||
71 | "add r1, r1, r5, lsl #1;" | ||
72 | "add r2, r2, r6, lsl #1;" | ||
73 | "add r3, r3, r7, lsl #1;" | ||
74 | "stmia %[x]!, {r0, r1, r2, r3};" | ||
75 | "ldmia %[x], {r0, r1, r2, r3};" | ||
76 | "ldmia %[y]!, {r4, r5, r6, r7};" | ||
77 | "add r0, r0, r4, lsl #1;" | ||
78 | "add r1, r1, r5, lsl #1;" | ||
79 | "add r2, r2, r6, lsl #1;" | ||
80 | "add r3, r3, r7, lsl #1;" | ||
81 | "stmia %[x]!, {r0, r1, r2, r3};" | ||
82 | : [x] "+r" (x), [y] "+r" (y) | ||
83 | : : "r0", "r1", "r2", "r3", | ||
84 | "r4", "r5", "r6", "r7", | ||
85 | "memory"); | ||
86 | n -= 8; | ||
87 | } while (n); | ||
88 | } | ||
89 | |||
90 | #if ARM_ARCH >= 6 | ||
91 | static inline | ||
92 | void ogg_vect_mult_fw(ogg_int32_t *data, LOOKUP_T *window, int n) | ||
93 | { | ||
94 | /* Note, mult_fw uses MULT31 */ | ||
95 | do{ | ||
96 | asm volatile ( | ||
97 | "ldmia %[d], {r0, r1, r2, r3};" | ||
98 | "ldmia %[w]!, {r4, r5, r6, r7};" | ||
99 | "smmul r0, r4, r0;" | ||
100 | "smmul r1, r5, r1;" | ||
101 | "smmul r2, r6, r2;" | ||
102 | "smmul r3, r7, r3;" | ||
103 | "mov r0, r0, lsl #1;" | ||
104 | "mov r1, r1, lsl #1;" | ||
105 | "mov r2, r2, lsl #1;" | ||
106 | "mov r3, r3, lsl #1;" | ||
107 | "stmia %[d]!, {r0, r1, r2, r3};" | ||
108 | : [d] "+r" (data), [w] "+r" (window) | ||
109 | : : "r0", "r1", "r2", "r3", | ||
110 | "r4", "r5", "r6", "r7", | ||
111 | "memory" ); | ||
112 | n -= 4; | ||
113 | } while (n); | ||
114 | } | ||
115 | #else | ||
116 | static inline | ||
117 | void ogg_vect_mult_fw(ogg_int32_t *data, LOOKUP_T *window, int n) | ||
118 | { | ||
119 | /* Note, mult_fw uses MULT31 */ | ||
120 | do{ | ||
121 | asm volatile ( | ||
122 | "ldmia %[d], {r0, r1, r2, r3};" | ||
123 | "ldmia %[w]!, {r4, r5, r6, r7};" | ||
124 | "smull r8, r0, r4, r0;" | ||
125 | "mov r0, r0, lsl #1;" | ||
126 | "smull r8, r1, r5, r1;" | ||
127 | "mov r1, r1, lsl #1;" | ||
128 | "smull r8, r2, r6, r2;" | ||
129 | "mov r2, r2, lsl #1;" | ||
130 | "smull r8, r3, r7, r3;" | ||
131 | "mov r3, r3, lsl #1;" | ||
132 | "stmia %[d]!, {r0, r1, r2, r3};" | ||
133 | : [d] "+r" (data), [w] "+r" (window) | ||
134 | : : "r0", "r1", "r2", "r3", | ||
135 | "r4", "r5", "r6", "r7", "r8", | ||
136 | "memory" ); | ||
137 | n -= 4; | ||
138 | } while (n); | ||
139 | } | ||
140 | #endif | ||
141 | |||
142 | #if ARM_ARCH >= 6 | ||
143 | static inline | ||
144 | void ogg_vect_mult_bw(ogg_int32_t *data, LOOKUP_T *window, int n) | ||
145 | { | ||
146 | /* NOTE mult_bw uses MULT_32 i.e. doesn't shift result left at end */ | ||
147 | /* On ARM, we can do the shift at the same time as the overlap-add */ | ||
148 | do{ | ||
149 | asm volatile ("ldmia %[d], {r0, r1, r2, r3};" | ||
150 | "ldmda %[w]!, {r4, r5, r6, r7};" | ||
151 | "smmul r0, r7, r0;" | ||
152 | "smmul r1, r6, r1;" | ||
153 | "smmul r2, r5, r2;" | ||
154 | "smmul r3, r4, r3;" | ||
155 | "stmia %[d]!, {r0, r1, r2, r3};" | ||
156 | : [d] "+r" (data), [w] "+r" (window) | ||
157 | : : "r0", "r1", "r2", "r3", | ||
158 | "r4", "r5", "r6", "r7", | ||
159 | "memory" ); | ||
160 | n -= 4; | ||
161 | } while (n); | ||
162 | } | ||
163 | #else | ||
164 | static inline | ||
165 | void ogg_vect_mult_bw(ogg_int32_t *data, LOOKUP_T *window, int n) | ||
166 | { | ||
167 | /* NOTE mult_bw uses MULT_32 i.e. doesn't shift result left at end */ | ||
168 | /* On ARM, we can do the shift at the same time as the overlap-add */ | ||
169 | do{ | ||
170 | asm volatile ("ldmia %[d], {r0, r1, r2, r3};" | ||
171 | "ldmda %[w]!, {r4, r5, r6, r7};" | ||
172 | "smull r8, r0, r7, r0;" | ||
173 | "smull r7, r1, r6, r1;" | ||
174 | "smull r6, r2, r5, r2;" | ||
175 | "smull r5, r3, r4, r3;" | ||
176 | "stmia %[d]!, {r0, r1, r2, r3};" | ||
177 | : [d] "+r" (data), [w] "+r" (window) | ||
178 | : : "r0", "r1", "r2", "r3", | ||
179 | "r4", "r5", "r6", "r7", "r8", | ||
180 | "memory" ); | ||
181 | n -= 4; | ||
182 | } while (n); | ||
183 | } | ||
184 | #endif | ||
185 | #endif | ||
186 | #endif | ||
187 | |||
188 | #ifndef _V_LSP_MATH_ASM | 20 | #ifndef _V_LSP_MATH_ASM |
189 | #define _V_LSP_MATH_ASM | 21 | #define _V_LSP_MATH_ASM |
190 | 22 | ||