]>
Commit | Line | Data |
---|---|---|
5e993f12 | 1 | Index: codecs/gsm/src/k6opt.s |
2 | =================================================================== | |
3 | --- codecs/gsm/src/k6opt.s (revision 49815) | |
4 | +++ codecs/gsm/src/k6opt.s (working copy) | |
5 | @@ -1,23 +1,24 @@ | |
6 | .file "k6opt.s" | |
7 | .version "01.01" | |
8 | -/* gcc2_compiled.: */ | |
9 | -.section .rodata | |
10 | - .align 4 | |
11 | - .type coefs,@object | |
12 | - .size coefs,24 | |
13 | -coefs: | |
14 | - .value -134 | |
15 | - .value -374 | |
16 | - .value 0 | |
17 | - .value 2054 | |
18 | - .value 5741 | |
19 | - .value 8192 | |
20 | - .value 5741 | |
21 | - .value 2054 | |
22 | - .value 0 | |
23 | - .value -374 | |
24 | - .value -134 | |
25 | - .value 0 | |
26 | + | |
27 | +/* load a mask into a mmx register ... use the stack to avoid TEXTRELS */ | |
28 | +.macro load_immq mask reg | |
29 | + pushl $h_\mask | |
30 | + pushl $l_\mask | |
31 | + movq (%esp), \reg | |
32 | +.endm | |
33 | +.macro cleanup_immq num | |
34 | + addl \num * 8, %esp | |
35 | +.endm | |
36 | + | |
37 | +/* some coefficients for us to play with */ | |
38 | +.set h_coefs1, 0xFE8AFF7A /* -134 -374 */ | |
39 | +.set l_coefs1, 0x08060000 /* 0 2504 */ | |
40 | +.set h_coefs2, 0x2000166D /* 5741 8192 */ | |
41 | +.set l_coefs2, 0x0806166D /* 5741 2054 */ | |
42 | +.set h_coefs3, 0xFE8A0000 /* 0 -374 */ | |
43 | +.set l_coefs3, 0x0000FF7A /* -134 0 */ | |
44 | + | |
45 | .text | |
46 | .align 4 | |
47 | /* void Weighting_filter (const short *e, short *x) */ | |
48 | @@ -34,9 +35,10 @@ Weighting_filter: | |
49 | addl $-10,%ebx | |
50 | emms | |
51 | movl $0x1000,%eax; movd %eax,%mm5 /* for rounding */ | |
52 | - movq coefs,%mm1 | |
53 | - movq coefs+8,%mm2 | |
54 | - movq coefs+16,%mm3 | |
55 | + load_immq coefs1, %mm1 | |
56 | + load_immq coefs2, %mm2 | |
57 | + load_immq coefs3, %mm3 | |
58 | + cleanup_immq 3 | |
59 | xorl %esi,%esi | |
60 | .p2align 2 | |
61 | .L21: | |
62 | @@ -229,6 +231,8 @@ k6iprod: | |
63 | ||
64 | .align 4 | |
65 | /* void k6vsraw P3((short *p, int n, int bits) */ | |
66 | +.set h_ones, 0x00010001 | |
67 | +.set l_ones, 0x00010001 | |
68 | .globl k6vsraw | |
69 | .type k6vsraw,@function | |
70 | k6vsraw: | |
71 | @@ -242,7 +246,8 @@ k6vsraw: | |
72 | leal -16(%esi,%eax,2),%edx /* edx = top - 16 */ | |
73 | emms | |
74 | movd %ecx,%mm3 | |
75 | - movq ones,%mm2 | |
76 | + load_immq ones, %mm2 | |
77 | + cleanup_immq 1 | |
78 | psllw %mm3,%mm2; psrlw $1,%mm2 | |
79 | cmpl %edx,%esi; ja .L306 | |
80 | ||
81 | @@ -362,22 +367,10 @@ k6vsllw: | |
82 | .size k6vsllw,.Lfe5-k6vsllw | |
83 | ||
84 | ||
85 | -.section .rodata | |
86 | - .align 4 | |
87 | - .type extremes,@object | |
88 | - .size extremes,8 | |
89 | -extremes: | |
90 | - .long 0x80008000 | |
91 | - .long 0x7fff7fff | |
92 | - .type ones,@object | |
93 | - .size ones,8 | |
94 | -ones: | |
95 | - .long 0x00010001 | |
96 | - .long 0x00010001 | |
97 | - | |
98 | -.text | |
99 | .align 4 | |
100 | /* long k6maxmin (const short *p, int n, short *out) */ | |
101 | +.set extremes_1, 0x80008000 | |
102 | +.set extremes_2, 0x7fff7fff | |
103 | .globl k6maxmin | |
104 | .type k6maxmin,@function | |
105 | k6maxmin: | |
106 | @@ -391,8 +384,10 @@ k6maxmin: | |
107 | ||
108 | cmpl %edx,%esi | |
109 | jbe .L52 | |
110 | - movd extremes,%mm0 | |
111 | - movd extremes+4,%mm1 | |
112 | + mov $extremes_1, %ecx | |
113 | + movd %ecx, %mm0 | |
114 | + mov $extremes_2, %ecx | |
115 | + movd %ecx, %mm1 | |
116 | jmp .L58 | |
117 | ||
118 | .p2align 2 |