diff options
Diffstat (limited to 'apps/codecs/libFLAC/coldfire.c')
-rw-r--r-- | apps/codecs/libFLAC/coldfire.c | 165 |
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 | |||
4 | void 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 | ||