summaryrefslogtreecommitdiff
path: root/apps/codecs/libFLAC/coldfire.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/codecs/libFLAC/coldfire.c')
-rw-r--r--apps/codecs/libFLAC/coldfire.c165
1 files changed, 165 insertions, 0 deletions
diff --git a/apps/codecs/libFLAC/coldfire.c b/apps/codecs/libFLAC/coldfire.c
new file mode 100644
index 0000000000..c763c2001f
--- /dev/null
+++ b/apps/codecs/libFLAC/coldfire.c
@@ -0,0 +1,165 @@
1#ifndef SIMULATOR
2#include <private/coldfire.h>
3
4void FLAC__lpc_restore_signal_order8_mac(const FLAC__int32 residual[], unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 data[])
5{
6 register const FLAC__int32 *qlp0 = &qlp_coeff[(order-1)];
7 register FLAC__int32 sum;
8 register const FLAC__int32 *history;
9
10 SET_MACSR(0);
11 history = &data[(-order)];
12 SET_ACC(0, acc0);
13
14 switch (order) {
15 case 8:
16 for( ; data_len != 0; --data_len) {
17 asm volatile(
18 "mov.l (%1), %%d0\n\t"
19 "mov.l (%2), %%d1\n\t"
20 "mac.l %%d0, %%d1, 4(%2), %%d1, %%acc0\n\t"
21 "mov.l -4(%1), %%d0\n\t"
22 "mac.l %%d0, %%d1, 8(%2), %%d1, %%acc0\n\t"
23 "mov.l -8(%1), %%d0\n\t"
24 "mac.l %%d0, %%d1, 12(%2), %%d1, %%acc0\n\t"
25 "mov.l -12(%1), %%d0\n\t"
26 "mac.l %%d0, %%d1, 16(%2), %%d1, %%acc0\n\t"
27 "mov.l -16(%1), %%d0\n\t"
28 "mac.l %%d0, %%d1, 20(%2), %%d1, %%acc0\n\t"
29 "mov.l -20(%1), %%d0\n\t"
30 "mac.l %%d0, %%d1, 24(%2), %%d1, %%acc0\n\t"
31 "mov.l -24(%1), %%d0\n\t"
32 "mac.l %%d0, %%d1, 28(%2), %%d1, %%acc0\n\t"
33 "mov.l -28(%1), %%d0\n\t"
34 "mac.l %%d0, %%d1, %%acc0\n\t"
35 "movclr.l %%acc0, %0"
36 : "=ad" (sum) : "a" (qlp0), "a" (history) : "d0", "d1");
37 ++history;
38 *(data++) = *(residual++) + (sum >> lp_quantization);
39 }
40 return;
41 case 7:
42 for( ; data_len != 0; --data_len) {
43 asm volatile(
44 "mov.l (%1), %%d0\n\t"
45 "mov.l (%2), %%d1\n\t"
46 "mac.l %%d0, %%d1, 4(%2), %%d1, %%acc0\n\t"
47 "mov.l -4(%1), %%d0\n\t"
48 "mac.l %%d0, %%d1, 8(%2), %%d1, %%acc0\n\t"
49 "mov.l -8(%1), %%d0\n\t"
50 "mac.l %%d0, %%d1, 12(%2), %%d1, %%acc0\n\t"
51 "mov.l -12(%1), %%d0\n\t"
52 "mac.l %%d0, %%d1, 16(%2), %%d1, %%acc0\n\t"
53 "mov.l -16(%1), %%d0\n\t"
54 "mac.l %%d0, %%d1, 20(%2), %%d1, %%acc0\n\t"
55 "mov.l -20(%1), %%d0\n\t"
56 "mac.l %%d0, %%d1, 24(%2), %%d1, %%acc0\n\t"
57 "mov.l -24(%1), %%d0\n\t"
58 "mac.l %%d0, %%d1, %%acc0\n\t"
59 "movclr.l %%acc0, %0"
60 : "=ad" (sum) : "a" (qlp0), "a" (history) : "d0", "d1");
61 ++history;
62 *(data++) = *(residual++) + (sum >> lp_quantization);
63 }
64 return;
65 case 6:
66 for( ; data_len != 0; --data_len) {
67 asm volatile(
68 "mov.l (%1), %%d0\n\t"
69 "mov.l (%2), %%d1\n\t"
70 "mac.l %%d0, %%d1, 4(%2), %%d1, %%acc0\n\t"
71 "mov.l -4(%1), %%d0\n\t"
72 "mac.l %%d0, %%d1, 8(%2), %%d1, %%acc0\n\t"
73 "mov.l -8(%1), %%d0\n\t"
74 "mac.l %%d0, %%d1, 12(%2), %%d1, %%acc0\n\t"
75 "mov.l -12(%1), %%d0\n\t"
76 "mac.l %%d0, %%d1, 16(%2), %%d1, %%acc0\n\t"
77 "mov.l -16(%1), %%d0\n\t"
78 "mac.l %%d0, %%d1, 20(%2), %%d1, %%acc0\n\t"
79 "mov.l -20(%1), %%d0\n\t"
80 "mac.l %%d0, %%d1, %%acc0\n\t"
81 "movclr.l %%acc0, %0"
82 : "=ad" (sum) : "a" (qlp0), "a" (history) : "d0", "d1");
83 ++history;
84 *(data++) = *(residual++) + (sum >> lp_quantization);
85 }
86 return;
87 case 5:
88 for( ; data_len != 0; --data_len) {
89 asm volatile(
90 "mov.l (%1), %%d0\n\t"
91 "mov.l (%2), %%d1\n\t"
92 "mac.l %%d0, %%d1, 4(%2), %%d1, %%acc0\n\t"
93 "mov.l -4(%1), %%d0\n\t"
94 "mac.l %%d0, %%d1, 8(%2), %%d1, %%acc0\n\t"
95 "mov.l -8(%1), %%d0\n\t"
96 "mac.l %%d0, %%d1, 12(%2), %%d1, %%acc0\n\t"
97 "mov.l -12(%1), %%d0\n\t"
98 "mac.l %%d0, %%d1, 16(%2), %%d1, %%acc0\n\t"
99 "mov.l -16(%1), %%d0\n\t"
100 "mac.l %%d0, %%d1, %%acc0\n\t"
101 "movclr.l %%acc0, %0"
102 : "=ad" (sum) : "a" (qlp0), "a" (history) : "d0", "d1");
103 ++history;
104 *(data++) = *(residual++) + (sum >> lp_quantization);
105 }
106 return;
107 case 4:
108 for( ; data_len != 0; --data_len) {
109 asm volatile(
110 "mov.l (%1), %%d0\n\t"
111 "mov.l (%2), %%d1\n\t"
112 "mac.l %%d0, %%d1, 4(%2), %%d1, %%acc0\n\t"
113 "mov.l -4(%1), %%d0\n\t"
114 "mac.l %%d0, %%d1, 8(%2), %%d1, %%acc0\n\t"
115 "mov.l -8(%1), %%d0\n\t"
116 "mac.l %%d0, %%d1, 12(%2), %%d1, %%acc0\n\t"
117 "mov.l -12(%1), %%d0\n\t"
118 "mac.l %%d0, %%d1, %%acc0\n\t"
119 "movclr.l %%acc0, %0"
120 : "=ad" (sum) : "a" (qlp0), "a" (history) : "d0", "d1");
121 ++history;
122 *(data++) = *(residual++) + (sum >> lp_quantization);
123 }
124 return;
125 case 3:
126 for( ; data_len != 0; --data_len) {
127 asm volatile(
128 "mov.l (%1), %%d0\n\t"
129 "mov.l (%2), %%d1\n\t"
130 "mac.l %%d0, %%d1, 4(%2), %%d1, %%acc0\n\t"
131 "mov.l -4(%1), %%d0\n\t"
132 "mac.l %%d0, %%d1, 8(%2), %%d1, %%acc0\n\t"
133 "mov.l -8(%1), %%d0\n\t"
134 "mac.l %%d0, %%d1, %%acc0\n\t"
135 "movclr.l %%acc0, %0"
136 : "=ad" (sum) : "a" (qlp0), "a" (history) : "d0", "d1");
137 ++history;
138 *(data++) = *(residual++) + (sum >> lp_quantization);
139 }
140 return;
141 case 2:
142 for( ; data_len != 0; --data_len) {
143 asm volatile(
144 "mov.l (%1), %%d0\n\t"
145 "mov.l (%2), %%d1\n\t"
146 "mac.l %%d0, %%d1, 4(%2), %%d1, %%acc0\n\t"
147 "mov.l -4(%1), %%d0\n\t"
148 "mac.l %%d0, %%d1, %%acc0\n\t"
149 "movclr.l %%acc0, %0"
150 : "=ad" (sum) : "a" (qlp0), "a" (history) : "d0", "d1");
151 ++history;
152 *(data++) = *(residual++) + (sum >> lp_quantization);
153 }
154 return;
155 case 1:
156 // won't gain anything by using mac here.
157 for( ; data_len != 0; --data_len) {
158 sum = (qlp0[0] * (*(history++)));
159 *(data++) = *(residual++) + (sum >> lp_quantization);
160 }
161 return;
162 }
163}
164
165#endif