diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/codecs/libffmpegFLAC/shndec.c | 30 |
1 files changed, 14 insertions, 16 deletions
diff --git a/apps/codecs/libffmpegFLAC/shndec.c b/apps/codecs/libffmpegFLAC/shndec.c index b107b356d7..78914f6252 100644 --- a/apps/codecs/libffmpegFLAC/shndec.c +++ b/apps/codecs/libffmpegFLAC/shndec.c | |||
@@ -73,8 +73,7 @@ static unsigned int get_uint(ShortenContext *s, int k) | |||
73 | } | 73 | } |
74 | 74 | ||
75 | #if defined(CPU_COLDFIRE) | 75 | #if defined(CPU_COLDFIRE) |
76 | static void coldfire_lshift_samples(int n, int shift, int32_t *samples) ICODE_ATTR_FLAC; | 76 | static inline void coldfire_lshift_samples(int n, int shift, int32_t *samples) |
77 | static void coldfire_lshift_samples(int n, int shift, int32_t *samples) | ||
78 | { | 77 | { |
79 | /* | 78 | /* |
80 | for (i = 0; i < n; i++) | 79 | for (i = 0; i < n; i++) |
@@ -83,34 +82,33 @@ static void coldfire_lshift_samples(int n, int shift, int32_t *samples) | |||
83 | asm volatile ( | 82 | asm volatile ( |
84 | "move.l %[n], %%d0 \n" /* d0 = loop counter */ | 83 | "move.l %[n], %%d0 \n" /* d0 = loop counter */ |
85 | "asr.l #2, %%d0 \n" | 84 | "asr.l #2, %%d0 \n" |
86 | "beq l1_shift \n" | 85 | "beq 1f \n" |
87 | "l2_shift:" /* main loop (unroll by 4) */ | 86 | "2:" /* main loop (unroll by 4) */ |
88 | "movem.l (%[x]), %%d4-%%d7 \n" | 87 | "movem.l (%[x]), %%d4-%%d7 \n" |
89 | "asl.l %[s], %%d4 \n" | 88 | "asl.l %[s], %%d4 \n" |
90 | "asl.l %[s], %%d5 \n" | 89 | "asl.l %[s], %%d5 \n" |
91 | "asl.l %[s], %%d6 \n" | 90 | "asl.l %[s], %%d6 \n" |
92 | "asl.l %[s], %%d7 \n" | 91 | "asl.l %[s], %%d7 \n" |
93 | "movem.l %%d4-%%d7, (%[x]) \n" | 92 | "movem.l %%d4-%%d7, (%[x]) \n" |
94 | "add.l #16, %[x] \n" | 93 | "lea.l (16, %[x]), %[x] \n" |
95 | 94 | ||
96 | "subq.l #1, %%d0 \n" | 95 | "subq.l #1, %%d0 \n" |
97 | "bne l2_shift \n" | 96 | "bne 2b \n" |
98 | "l1_shift:" /* any loops left? */ | 97 | "1:" /* any loops left? */ |
99 | "and.l #3, %[n] \n" | 98 | "and.l #3, %[n] \n" |
100 | "beq l4_shift \n" | 99 | "beq 4f \n" |
101 | "l3_shift:" /* remaining loops */ | 100 | "3:" /* remaining loops */ |
102 | "move.l (%[x]), %%d4 \n" | 101 | "move.l (%[x]), %%d4 \n" |
103 | "asl.l %[s], %%d4 \n" | 102 | "asl.l %[s], %%d4 \n" |
104 | "move.l %%d4, (%[x])+ \n" | 103 | "move.l %%d4, (%[x])+ \n" |
105 | 104 | ||
106 | "subq.l #1, %[n] \n" | 105 | "subq.l #1, %[n] \n" |
107 | "bne l3_shift \n" | 106 | "bne 3b \n" |
108 | "l4_shift:" /* exit */ | 107 | "4:" /* exit */ |
109 | : [n] "+d" (n), /* d1 */ | 108 | : [n] "+d" (n), |
110 | [s] "+d" (shift), /* d2 */ | 109 | [x] "+a" (samples) |
111 | [x] "+a" (samples) /* a0 */ | 110 | : [s] "d" (shift) |
112 | : | 111 | : "%d0", "%d4", "%d5", "%d6", "%d7", "cc", "memory" |
113 | : "%d0", "%d4", "%d5", "%d6", "%d7" | ||
114 | ); | 112 | ); |
115 | } | 113 | } |
116 | #endif | 114 | #endif |