scummvm random work
[patches.git] / asterisk-pic-fix.patch
CommitLineData
5e993f12 1Index: 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