various minor portability fixes (mostly from tholo for OpenBSD)
[asterisk/asterisk.git] / codecs / gsm / src / k6opt.s
1         .file   "k6opt.s"
2         .version        "01.01"
3 /* gcc2_compiled.: */
4 .section        .rodata
5         .align 4
6         .type    coefs,@object
7         .size    coefs,24
8 coefs:
9         .value -134
10         .value -374
11         .value 0
12         .value 2054
13         .value 5741
14         .value 8192
15         .value 5741
16         .value 2054
17         .value 0
18         .value -374
19         .value -134
20         .value 0
21 .text
22         .align 4
23 /* void Weighting_filter (const short *e, short *x) */
24 .globl Weighting_filter
25         .type    Weighting_filter,@function
26 Weighting_filter:
27         pushl %ebp
28         movl %esp,%ebp
29         pushl %edi
30         pushl %esi
31         pushl %ebx
32         movl 12(%ebp),%edi
33         movl 8(%ebp),%ebx
34         addl $-10,%ebx
35         emms
36         movl $0x1000,%eax; movd %eax,%mm5  /* for rounding */
37         movq coefs,%mm1
38         movq coefs+8,%mm2
39         movq coefs+16,%mm3
40         xorl %esi,%esi
41         .p2align 2
42 .L21:
43         movq (%ebx,%esi,2),%mm0
44         pmaddwd %mm1,%mm0
45
46         movq 8(%ebx,%esi,2),%mm4
47         pmaddwd %mm2,%mm4
48         paddd %mm4,%mm0
49
50         movq 16(%ebx,%esi,2),%mm4
51         pmaddwd %mm3,%mm4
52         paddd %mm4,%mm0
53
54         movq %mm0,%mm4
55         punpckhdq %mm0,%mm4  /* mm4 has high int32 of mm0 dup'd */
56         paddd %mm4,%mm0;
57
58         paddd %mm5,%mm0 /* add for roundoff */
59         psrad $13,%mm0
60         packssdw %mm0,%mm0      
61         movd %mm0,%eax  /* ax has result */
62         movw %ax,(%edi,%esi,2)
63         incl %esi
64         cmpl $39,%esi
65         jle .L21
66         emms
67         popl %ebx
68         popl %esi
69         popl %edi
70         leave
71         ret
72 .Lfe1:
73         .size    Weighting_filter,.Lfe1-Weighting_filter
74
75 .macro ccstep n
76 .if \n
77         movq \n(%edi),%mm1
78         movq \n(%esi),%mm2
79 .else
80         movq (%edi),%mm1
81         movq (%esi),%mm2
82 .endif
83         pmaddwd %mm2,%mm1
84         paddd %mm1,%mm0
85 .endm
86
87         .align 4
88 /* long k6maxcc(const short *wt, const short *dp, short *Nc_out) */
89 .globl k6maxcc
90         .type    k6maxcc,@function
91 k6maxcc:
92         pushl %ebp
93         movl %esp,%ebp
94         pushl %edi
95         pushl %esi
96         pushl %ebx
97         emms
98         movl 8(%ebp),%edi
99         movl 12(%ebp),%esi
100         movl $0,%edx  /* will be maximum inner-product */
101         movl $40,%ebx
102         movl %ebx,%ecx /* will be index of max inner-product */
103         subl $80,%esi
104         .p2align 2
105 .L41:
106         movq (%edi),%mm0
107         movq (%esi),%mm2
108         pmaddwd %mm2,%mm0
109         ccstep 8
110         ccstep 16
111         ccstep 24
112         ccstep 32
113         ccstep 40
114         ccstep 48
115         ccstep 56
116         ccstep 64
117         ccstep 72
118
119         movq %mm0,%mm1
120         punpckhdq %mm0,%mm1  /* mm1 has high int32 of mm0 dup'd */
121         paddd %mm1,%mm0;
122         movd %mm0,%eax  /* eax has result */
123
124         cmpl %edx,%eax
125         jle .L40
126         movl %eax,%edx
127         movl %ebx,%ecx
128         .p2align 2
129 .L40:
130         subl $2,%esi
131         incl %ebx
132         cmpl $120,%ebx
133         jle .L41
134         movl 16(%ebp),%eax
135         movw %cx,(%eax)
136         movl %edx,%eax
137         emms
138         popl %ebx
139         popl %esi
140         popl %edi
141         leave
142         ret
143 .Lfe2:
144         .size    k6maxcc,.Lfe2-k6maxcc
145
146
147         .align 4
148 /* long k6iprod (const short *p, const short *q, int n) */
149 .globl k6iprod
150         .type    k6iprod,@function
151 k6iprod:
152         pushl %ebp
153         movl %esp,%ebp
154         pushl %edi
155         pushl %esi
156         emms
157         pxor %mm0,%mm0
158         movl 8(%ebp),%esi
159         movl 12(%ebp),%edi
160         movl 16(%ebp),%eax
161         leal -32(%esi,%eax,2),%edx /* edx = top - 32 */
162
163         cmpl %edx,%esi; ja .L202
164
165         .p2align 2
166 .L201:
167         ccstep 0
168         ccstep 8
169         ccstep 16
170         ccstep 24
171
172         addl $32,%esi
173         addl $32,%edi
174         cmpl %edx,%esi; jbe .L201
175
176         .p2align 2
177 .L202:
178         addl $24,%edx  /* now edx = top-8 */
179         cmpl %edx,%esi; ja .L205
180
181         .p2align 2
182 .L203:
183         ccstep 0
184
185         addl $8,%esi
186         addl $8,%edi
187         cmpl %edx,%esi; jbe .L203
188
189         .p2align 2
190 .L205:
191         addl $4,%edx  /* now edx = top-4 */
192         cmpl %edx,%esi; ja .L207
193
194         movd (%edi),%mm1
195         movd (%esi),%mm2
196         pmaddwd %mm2,%mm1
197         paddd %mm1,%mm0
198
199         addl $4,%esi
200         addl $4,%edi
201
202         .p2align 2
203 .L207:
204         addl $2,%edx  /* now edx = top-2 */
205         cmpl %edx,%esi; ja .L209
206
207         movswl (%edi),%eax
208         movd %eax,%mm1
209         movswl (%esi),%eax
210         movd %eax,%mm2
211         pmaddwd %mm2,%mm1
212         paddd %mm1,%mm0
213
214         .p2align 2
215 .L209:
216         movq %mm0,%mm1
217         punpckhdq %mm0,%mm1  /* mm1 has high int32 of mm0 dup'd */
218         paddd %mm1,%mm0;
219         movd %mm0,%eax  /* eax has result */
220
221         emms
222         popl %esi
223         popl %edi
224         leave
225         ret
226 .Lfe3:
227         .size    k6iprod,.Lfe3-k6iprod
228
229
230         .align 4
231 /* void k6vsraw P3((short *p, int n, int bits) */
232 .globl k6vsraw
233         .type    k6vsraw,@function
234 k6vsraw:
235         pushl %ebp
236         movl %esp,%ebp
237         pushl %esi
238         movl 8(%ebp),%esi
239         movl 16(%ebp),%ecx
240         andl %ecx,%ecx; jle .L399
241         movl 12(%ebp),%eax
242         leal -16(%esi,%eax,2),%edx /* edx = top - 16 */
243         emms
244         movd %ecx,%mm3
245         movq ones,%mm2
246         psllw %mm3,%mm2; psrlw $1,%mm2
247         cmpl %edx,%esi; ja .L306
248
249         .p2align 2
250 .L302: /* 8 words per iteration */
251         movq (%esi),%mm0
252         movq 8(%esi),%mm1
253         paddsw %mm2,%mm0
254         psraw %mm3,%mm0;
255         paddsw %mm2,%mm1
256         psraw %mm3,%mm1;
257         movq %mm0,(%esi)
258         movq %mm1,8(%esi)
259         addl $16,%esi
260         cmpl %edx,%esi
261         jbe .L302
262
263         .p2align 2
264 .L306:
265         addl $12,%edx /* now edx = top-4 */
266         cmpl %edx,%esi; ja .L310
267
268         .p2align 2
269 .L308: /* do up to 6 words, two at a time */
270         movd  (%esi),%mm0
271         paddsw %mm2,%mm0
272         psraw %mm3,%mm0;
273         movd %mm0,(%esi)
274         addl $4,%esi
275         cmpl %edx,%esi
276         jbe .L308
277
278         .p2align 2
279 .L310:
280         addl $2,%edx /* now edx = top-2 */
281         cmpl %edx,%esi; ja .L315
282         
283         movzwl (%esi),%eax
284         movd %eax,%mm0
285         paddsw %mm2,%mm0
286         psraw %mm3,%mm0;
287         movd %mm0,%eax
288         movw %ax,(%esi)
289
290         .p2align 2
291 .L315:
292         emms
293 .L399:
294         popl %esi
295         leave
296         ret
297 .Lfe4:
298         .size    k6vsraw,.Lfe4-k6vsraw
299         
300         .align 4
301 /* void k6vsllw P3((short *p, int n, int bits) */
302 .globl k6vsllw
303         .type    k6vsllw,@function
304 k6vsllw:
305         pushl %ebp
306         movl %esp,%ebp
307         pushl %esi
308         movl 8(%ebp),%esi
309         movl 16(%ebp),%ecx
310         andl %ecx,%ecx; jle .L499
311         movl 12(%ebp),%eax
312         leal -16(%esi,%eax,2),%edx /* edx = top - 16 */
313         emms
314         movd %ecx,%mm3
315         cmpl %edx,%esi; ja .L406
316
317         .p2align 2
318 .L402: /* 8 words per iteration */
319         movq (%esi),%mm0
320         movq 8(%esi),%mm1
321         psllw %mm3,%mm0;
322         psllw %mm3,%mm1;
323         movq %mm0,(%esi)
324         movq %mm1,8(%esi)
325         addl $16,%esi
326         cmpl %edx,%esi
327         jbe .L402
328
329         .p2align 2
330 .L406:
331         addl $12,%edx /* now edx = top-4 */
332         cmpl %edx,%esi; ja .L410
333
334         .p2align 2
335 .L408: /* do up to 6 words, two at a time */
336         movd (%esi),%mm0
337         psllw %mm3,%mm0;
338         movd %mm0,(%esi)
339         addl $4,%esi
340         cmpl %edx,%esi
341         jbe .L408
342
343         .p2align 2
344 .L410:
345         addl $2,%edx /* now edx = top-2 */
346         cmpl %edx,%esi; ja .L415
347         
348         movzwl (%esi),%eax
349         movd %eax,%mm0
350         psllw %mm3,%mm0;
351         movd %mm0,%eax
352         movw %ax,(%esi)
353
354         .p2align 2
355 .L415:
356         emms
357 .L499:
358         popl %esi
359         leave
360         ret
361 .Lfe5:
362         .size    k6vsllw,.Lfe5-k6vsllw
363
364
365 .section        .rodata
366         .align 4
367         .type    extremes,@object
368         .size    extremes,8
369 extremes:
370         .long 0x80008000
371         .long 0x7fff7fff
372         .type    ones,@object
373         .size    ones,8
374 ones:
375         .long 0x00010001
376         .long 0x00010001
377
378 .text
379         .align 4
380 /* long k6maxmin (const short *p, int n, short *out) */
381 .globl k6maxmin
382         .type    k6maxmin,@function
383 k6maxmin:
384         pushl %ebp
385         movl %esp,%ebp
386         pushl %esi
387         emms
388         movl 8(%ebp),%esi
389         movl 12(%ebp),%eax
390         leal -8(%esi,%eax,2),%edx
391
392         cmpl %edx,%esi
393         jbe .L52
394         movd extremes,%mm0
395         movd extremes+4,%mm1
396         jmp .L58
397
398         .p2align 2
399 .L52:
400         movq (%esi),%mm0   /* mm0 will be max's */
401         movq %mm0,%mm1     /* mm1 will be min's */
402         addl $8,%esi
403         cmpl %edx,%esi
404         ja .L56
405
406         .p2align 2
407 .L54:
408         movq (%esi),%mm2
409
410         movq %mm2,%mm3
411         pcmpgtw %mm0,%mm3  /* mm3 is bitmask for words where mm2 > mm0 */ 
412         movq %mm3,%mm4
413         pand %mm2,%mm3     /* mm3 is mm2 masked to new max's */
414         pandn %mm0,%mm4    /* mm4 is mm0 masked to its max's */
415         por %mm3,%mm4
416         movq %mm4,%mm0     /* now mm0 is updated max's */
417         
418         movq %mm1,%mm3
419         pcmpgtw %mm2,%mm3  /* mm3 is bitmask for words where mm2 < mm1 */ 
420         pand %mm3,%mm2     /* mm2 is mm2 masked to new min's */
421         pandn %mm1,%mm3    /* mm3 is mm1 masked to its min's */
422         por %mm3,%mm2
423         movq %mm2,%mm1     /* now mm1 is updated min's */
424
425         addl $8,%esi
426         cmpl %edx,%esi
427         jbe .L54
428
429         .p2align 2
430 .L56: /* merge down the 4-word max/mins to lower 2 words */
431
432         movq %mm0,%mm2
433         psrlq $32,%mm2
434         movq %mm2,%mm3
435         pcmpgtw %mm0,%mm3  /* mm3 is bitmask for words where mm2 > mm0 */ 
436         pand %mm3,%mm2     /* mm2 is mm2 masked to new max's */
437         pandn %mm0,%mm3    /* mm3 is mm0 masked to its max's */
438         por %mm3,%mm2
439         movq %mm2,%mm0     /* now mm0 is updated max's */
440
441         movq %mm1,%mm2
442         psrlq $32,%mm2
443         movq %mm1,%mm3
444         pcmpgtw %mm2,%mm3  /* mm3 is bitmask for words where mm2 < mm1 */ 
445         pand %mm3,%mm2     /* mm2 is mm2 masked to new min's */
446         pandn %mm1,%mm3    /* mm3 is mm1 masked to its min's */
447         por %mm3,%mm2
448         movq %mm2,%mm1     /* now mm1 is updated min's */
449
450         .p2align 2
451 .L58:
452         addl $4,%edx       /* now dx = top-4 */
453         cmpl %edx,%esi
454         ja .L62
455         /* here, there are >= 2 words of input remaining */
456         movd (%esi),%mm2
457
458         movq %mm2,%mm3
459         pcmpgtw %mm0,%mm3  /* mm3 is bitmask for words where mm2 > mm0 */ 
460         movq %mm3,%mm4
461         pand %mm2,%mm3     /* mm3 is mm2 masked to new max's */
462         pandn %mm0,%mm4    /* mm4 is mm0 masked to its max's */
463         por %mm3,%mm4
464         movq %mm4,%mm0     /* now mm0 is updated max's */
465         
466         movq %mm1,%mm3
467         pcmpgtw %mm2,%mm3  /* mm3 is bitmask for words where mm2 < mm1 */ 
468         pand %mm3,%mm2     /* mm2 is mm2 masked to new min's */
469         pandn %mm1,%mm3    /* mm3 is mm1 masked to its min's */
470         por %mm3,%mm2
471         movq %mm2,%mm1     /* now mm1 is updated min's */
472
473         addl $4,%esi
474
475         .p2align 2
476 .L62:
477         /* merge down the 2-word max/mins to 1 word */
478
479         movq %mm0,%mm2
480         psrlq $16,%mm2
481         movq %mm2,%mm3
482         pcmpgtw %mm0,%mm3  /* mm3 is bitmask for words where mm2 > mm0 */ 
483         pand %mm3,%mm2     /* mm2 is mm2 masked to new max's */
484         pandn %mm0,%mm3    /* mm3 is mm0 masked to its max's */
485         por %mm3,%mm2
486         movd %mm2,%ecx     /* cx is max so far */
487
488         movq %mm1,%mm2
489         psrlq $16,%mm2
490         movq %mm1,%mm3
491         pcmpgtw %mm2,%mm3  /* mm3 is bitmask for words where mm2 < mm1 */ 
492         pand %mm3,%mm2     /* mm2 is mm2 masked to new min's */
493         pandn %mm1,%mm3    /* mm3 is mm1 masked to its min's */
494         por %mm3,%mm2
495         movd %mm2,%eax     /* ax is min so far */
496         
497         addl $2,%edx       /* now dx = top-2 */
498         cmpl %edx,%esi
499         ja .L65
500
501         /* here, there is one word of input left */
502         cmpw (%esi),%cx
503         jge .L64
504         movw (%esi),%cx
505         .p2align 2
506 .L64:
507         cmpw (%esi),%ax
508         jle .L65
509         movw (%esi),%ax
510
511         .p2align 2
512 .L65:  /* (finally!) cx is the max, ax the min */
513         movswl %cx,%ecx
514         movswl %ax,%eax
515
516         movl 16(%ebp),%edx /* ptr to output max,min vals */
517         andl %edx,%edx; jz .L77
518         movw %cx,(%edx)  /* max */
519         movw %ax,2(%edx) /* min */
520         .p2align 2
521 .L77:
522         /* now calculate max absolute val */
523         negl %eax
524         cmpl %ecx,%eax
525         jge .L81
526         movl %ecx,%eax
527         .p2align 2
528 .L81:
529         emms
530         popl %esi
531         leave
532         ret
533 .Lfe6:
534         .size    k6maxmin,.Lfe6-k6maxmin
535
536 /* void Short_term_analysis_filtering (short *u0, const short *rp0, int kn, short *s) */
537         .equiv pm_u0,8
538         .equiv pm_rp0,12
539         .equiv pm_kn,16
540         .equiv pm_s,20
541         .equiv lv_u_top,-4
542         .equiv lv_s_top,-8
543         .equiv lv_rp,-40 /* local version of rp0 with each word twice */
544         .align 4
545 .globl Short_term_analysis_filteringx
546         .type    Short_term_analysis_filteringx,@function
547 Short_term_analysis_filteringx:
548         pushl %ebp
549         movl %esp,%ebp
550         subl $40,%esp
551         pushl %edi
552         pushl %esi
553
554         movl pm_rp0(%ebp),%esi;
555         leal lv_rp(%ebp),%edi;
556         cld
557         lodsw; stosw; stosw
558         lodsw; stosw; stosw
559         lodsw; stosw; stosw
560         lodsw; stosw; stosw
561         lodsw; stosw; stosw
562         lodsw; stosw; stosw
563         lodsw; stosw; stosw
564         lodsw; stosw; stosw
565         emms
566         movl $0x4000,%eax;
567         movd %eax,%mm4;
568         punpckldq %mm4,%mm4 /* (0x00004000,0x00004000) for rounding dword product pairs */
569
570         movl pm_u0(%ebp),%eax
571         addl $16,%eax
572         movl %eax,lv_u_top(%ebp) /* UTOP */
573         movl pm_s(%ebp),%edx  /* edx is local s ptr throughout below */
574         movl pm_kn(%ebp),%eax
575         leal (%edx,%eax,2),%eax
576         movl %eax,lv_s_top(%ebp)
577         cmpl %eax,%edx
578         jae .L179
579         .p2align 2
580 .L181:
581         leal lv_rp(%ebp),%esi  /* RP */
582         movl pm_u0(%ebp),%edi  /* U  */
583         movw (%edx),%ax /* (0,DI) */
584         roll $16,%eax
585         movw (%edx),%ax /* (DI,DI) */
586         .p2align 2
587 .L185: /* RP is %esi */
588         movl %eax,%ecx
589         movw (%edi),%ax  /* (DI,U) */
590         movd (%esi),%mm3 /* mm3 is (0,0,RP,RP) */
591         movw %cx,(%edi)
592
593         movd %eax,%mm2   /* mm2 is (0,0,DI,U) */
594         rorl $16,%eax 
595         movd %eax,%mm1   /* mm1 is (0,0,U,DI) */
596
597         movq %mm1,%mm0
598         pmullw %mm3,%mm0
599         pmulhw %mm3,%mm1
600         punpcklwd %mm1,%mm0 /* mm0 is (RP*U,RP*DI) */
601         paddd %mm4,%mm0     /* mm4 is 0x00004000,0x00004000 */
602         psrad $15,%mm0      /* (RP*U,RP*DI) adjusted */
603         packssdw %mm0,%mm0  /* (*,*,RP*U,RP*DI) adjusted and saturated to word */
604         paddsw %mm2,%mm0    /* mm0 is (?,?, DI', U') */
605         movd %mm0,%eax      /* (DI,U') */
606
607         addl $2,%edi
608         addl $4,%esi
609         cmpl lv_u_top(%ebp),%edi
610         jb .L185
611
612         rorl $16,%eax
613         movw %ax,(%edx) /* last DI goes to *s */
614         addl $2,%edx    /* next s */
615         cmpl lv_s_top(%ebp),%edx
616         jb .L181
617         .p2align 2
618 .L179:
619         emms
620         popl %esi
621         popl %edi
622         leave
623         ret
624 .Lfe7:
625         .size    Short_term_analysis_filteringx,.Lfe7-Short_term_analysis_filteringx
626
627 .end
628
629 /* 'as' macro's seem to be case-insensitive */
630 .macro STEP n
631 .if \n
632         movd \n(%esi),%mm3 /* mm3 is (0,0,RP,RP) */
633 .else
634         movd (%esi),%mm3 /* mm3 is (0,0,RP,RP) */
635 .endif
636         movq %mm5,%mm1;
637         movd %mm4,%ecx; movw %cx,%ax  /* (DI,U) */
638         psllq $48,%mm1; psrlq $16,%mm4; por %mm1,%mm4
639         psllq $48,%mm0; psrlq $16,%mm5; por %mm0,%mm5
640
641         movd %eax,%mm2   /* mm2 is (0,0,DI,U) */
642         rorl $16,%eax 
643         movd %eax,%mm1   /* mm1 is (0,0,U,DI) */
644
645         movq %mm1,%mm0
646         pmullw %mm3,%mm0
647         pmulhw %mm3,%mm1
648         punpcklwd %mm1,%mm0 /* mm0 is (RP*U,RP*DI) */
649         paddd %mm6,%mm0     /* mm6 is 0x00004000,0x00004000 */
650         psrad $15,%mm0      /* (RP*U,RP*DI) adjusted */
651         packssdw %mm0,%mm0  /* (*,*,RP*U,RP*DI) adjusted and saturated to word */
652         paddsw %mm2,%mm0    /* mm0 is (?,?, DI', U') */
653         movd %mm0,%eax      /* (DI,U') */
654 .endm
655
656 /* void Short_term_analysis_filtering (short *u0, const short *rp0, int kn, short *s) */
657         .equiv pm_u0,8
658         .equiv pm_rp0,12
659         .equiv pm_kn,16
660         .equiv pm_s,20
661         .equiv lv_rp_top,-4
662         .equiv lv_s_top,-8
663         .equiv lv_rp,-40 /* local version of rp0 with each word twice */
664         .align 4
665 .globl Short_term_analysis_filteringx
666         .type    Short_term_analysis_filteringx,@function
667 Short_term_analysis_filteringx:
668         pushl %ebp
669         movl %esp,%ebp
670         subl $56,%esp
671         pushl %edi
672         pushl %esi
673         pushl %ebx
674
675         movl pm_rp0(%ebp),%esi;
676         leal lv_rp(%ebp),%edi;
677         cld
678         lodsw; stosw; stosw
679         lodsw; stosw; stosw
680         lodsw; stosw; stosw
681         lodsw; stosw; stosw
682         lodsw; stosw; stosw
683         lodsw; stosw; stosw
684         lodsw; stosw; stosw
685         lodsw; stosw; stosw
686         movl %edi,lv_rp_top(%ebp)
687         emms
688
689         movl $0x4000,%eax;
690         movd %eax,%mm6;
691         punpckldq %mm6,%mm6 /* (0x00004000,0x00004000) for rounding dword product pairs */
692
693         movl pm_u0(%ebp),%ebx
694         movq (%ebx),%mm4; movq 8(%ebx),%mm5 /* the 8 u's */
695         movl pm_s(%ebp),%edx  /* edx is local s ptr throughout below */
696         movl pm_kn(%ebp),%eax
697         leal (%edx,%eax,2),%eax
698         movl %eax,lv_s_top(%ebp)
699         cmpl %eax,%edx
700         jae .L179
701         .p2align 2
702 .L181:
703         leal lv_rp(%ebp),%esi  /* RP */
704         movw (%edx),%ax /* (0,DI) */
705         roll $16,%eax
706         movw (%edx),%ax /* (DI,DI) */
707         movd %eax,%mm0
708         .p2align 2
709 .L185: /* RP is %esi */
710         step 0
711         step 4
712         step 8
713         step 12
714 /*
715         step 16
716         step 20
717         step 24
718         step 28
719 */
720         addl $16,%esi
721         cmpl lv_rp_top(%ebp),%esi 
722         jb .L185
723
724         rorl $16,%eax
725         movw %ax,(%edx) /* last DI goes to *s */
726         addl $2,%edx    /* next s */
727         cmpl lv_s_top(%ebp),%edx
728         jb .L181
729 .L179:
730         movq %mm4,(%ebx); movq %mm5,8(%ebx) /* the 8 u's */
731         emms
732         popl %ebx
733         popl %esi
734         popl %edi
735         leave
736         ret
737 .Lfe7:
738         .size    Short_term_analysis_filteringx,.Lfe7-Short_term_analysis_filteringx
739         .ident  "GCC: (GNU) 2.95.2 19991109 (Debian GNU/Linux)"