Mercurial > mplayer.hg
annotate mp3lib/tabinit_MMX.c @ 15978:c8dc500e078e
memcpy and memmove both copy memory, but when using memcpy the source and destination must not overlap, but here, they did overlap.
Committed with the kind blessing of Richard, patch by uau
author | gpoirier |
---|---|
date | Fri, 15 Jul 2005 22:09:30 +0000 |
parents | f881c918739b |
children | e7a129082fda |
rev | line source |
---|---|
4140 | 1 /* |
2 * This code was taken from http://www.mpg123.org | |
3 * See ChangeLog of mpg123-0.59s-pre.1 for detail | |
4 * Applied to mplayer by Nick Kurshev <nickols_k@mail.ru> | |
5 */ | |
12292 | 6 #include "../config.h" |
4246
3f677202418b
mangling in mp3lib + stdcall undefined fix with cygwin
atmos4
parents:
4141
diff
changeset
|
7 #include "../mangle.h" |
4140 | 8 |
8560
1320f1b3229d
fixing that f*cking linker 'bug' e.g. naming config with libmp3lame
alex
parents:
8544
diff
changeset
|
9 long __attribute__((aligned(8))) mp3lib_decwins [544]; |
4140 | 10 |
8544 | 11 #define real float |
8560
1320f1b3229d
fixing that f*cking linker 'bug' e.g. naming config with libmp3lame
alex
parents:
8544
diff
changeset
|
12 extern real mp3lib_decwin[(512+32)]; |
8544 | 13 // static long decwin [544]; |
14 | |
12292 | 15 static short attribute_used intwinbase_MMX[] = |
4140 | 16 { |
17 0, -1, -1, -1, -1, -1, -1, -2, | |
18 -2, -2, -2, -3, -3, -4, -4, -5, | |
19 -5, -6, -7, -7, -8, -9, -10, -11, | |
20 -13, -14, -16, -17, -19, -21, -24, -26, | |
21 -29, -31, -35, -38, -41, -45, -49, -53, | |
22 -58, -63, -68, -73, -79, -85, -91, -97, | |
23 -104, -111, -117, -125, -132, -139, -147, -154, | |
24 -161, -169, -176, -183, -190, -196, -202, -208, | |
25 -213, -218, -222, -225, -227, -228, -228, -227, | |
26 -224, -221, -215, -208, -200, -189, -177, -163, | |
27 -146, -127, -106, -83, -57, -29, 2, 36, | |
28 72, 111, 153, 197, 244, 294, 347, 401, | |
29 459, 519, 581, 645, 711, 779, 848, 919, | |
30 991, 1064, 1137, 1210, 1283, 1356, 1428, 1498, | |
31 1567, 1634, 1698, 1759, 1817, 1870, 1919, 1962, | |
32 2001, 2032, 2057, 2075, 2085, 2087, 2080, 2063, | |
33 2037, 2000, 1952, 1893, 1822, 1739, 1644, 1535, | |
34 1414, 1280, 1131, 970, 794, 605, 402, 185, | |
35 -45, -288, -545, -814, -1095, -1388, -1692, -2006, | |
36 -2330, -2663, -3004, -3351, -3705, -4063, -4425, -4788, | |
37 -5153, -5517, -5879, -6237, -6589, -6935, -7271, -7597, | |
38 -7910, -8209, -8491, -8755, -8998, -9219, -9416, -9585, | |
39 -9727, -9838, -9916, -9959, -9966, -9935, -9863, -9750, | |
40 -9592, -9389, -9139, -8840, -8492, -8092, -7640, -7134, | |
41 -6574, -5959, -5288, -4561, -3776, -2935, -2037, -1082, | |
42 -70, 998, 2122, 3300, 4533, 5818, 7154, 8540, | |
43 9975, 11455, 12980, 14548, 16155, 17799, 19478, 21189, | |
44 22929, 24694, 26482, 28289, 30112, 31947,-26209,-24360, | |
45 -22511,-20664,-18824,-16994,-15179,-13383,-11610, -9863, | |
46 -8147, -6466, -4822, -3222, -1667, -162, 1289, 2684, | |
47 4019, 5290, 6494, 7629, 8692, 9679, 10590, 11420, | |
48 12169, 12835, 13415, 13908, 14313, 14630, 14856, 14992, | |
49 15038 | |
50 }; | |
51 | |
12303
f881c918739b
attribute_used patch by (VMiklos <mamajom at axelero dot hu>)
michael
parents:
12292
diff
changeset
|
52 static long attribute_used intwindiv = 0x47800000; |
4140 | 53 |
54 void make_decode_tables_MMX(long scaleval) | |
55 { | |
4141 | 56 long intwinbase_step; |
57 intwinbase_step=2; | |
4140 | 58 scaleval =- scaleval; |
59 __asm __volatile( | |
60 "xorl %%ecx,%%ecx\n\t" | |
61 "xorl %%ebx,%%ebx\n\t" | |
62 "movl $32,%%esi\n\t" | |
63 "movl %0,%%edi\n\t" | |
64 ".L00:\n\t" | |
65 "cmpl $528,%%ecx\n\t" | |
66 "jnc .L02\n\t" | |
67 "movswl (%%edi),%%eax\n\t" | |
68 "cmpl %0+444,%%edi\n\t" | |
69 "jc .L01\n\t" | |
70 "addl $60000,%%eax\n\t" | |
71 ".L01:\n\t" | |
72 "pushl %%eax\n\t" | |
73 "fildl (%%esp)\n\t" | |
4246
3f677202418b
mangling in mp3lib + stdcall undefined fix with cygwin
atmos4
parents:
4141
diff
changeset
|
74 "fdivs "MANGLE(intwindiv)"\n\t" |
4140 | 75 "popl %%eax\n\t" |
76 "fimull %2\n\t" | |
77 "fsts %1(,%%ecx,4)\n\t" | |
78 "fstps %1+64(,%%ecx,4)\n\t" | |
79 ".L02:\n\t" | |
80 "leal -1(%%esi),%%edx\n\t" | |
81 "and %%ebx,%%edx\n\t" | |
82 "cmp $31,%%edx\n\t" | |
83 "jnz .L03\n\t" | |
84 "addl $-1023,%%ecx\n\t" | |
85 "test %%esi,%%ebx\n\t" | |
86 "jz .L03\n\t" | |
87 "negl %2\n\t" | |
88 ".L03:\n\t" | |
89 "addl %%esi,%%ecx\n\t" | |
90 "addl %3,%%edi\n\t" | |
91 "incl %%ebx\n\t" | |
92 "cmpl %0,%%edi\n\t" | |
93 "jz .L04\n\t" | |
94 "cmp $256,%%ebx\n\t" | |
95 "jnz .L00\n\t" | |
96 "negl %3\n\t" | |
97 "jmp .L00\n\t" | |
98 ".L04:\n\t" | |
8560
1320f1b3229d
fixing that f*cking linker 'bug' e.g. naming config with libmp3lame
alex
parents:
8544
diff
changeset
|
99 ::"g"(intwinbase_MMX),"m"(mp3lib_decwin[0]),"m"(scaleval),"m"(intwinbase_step) |
4140 | 100 :"memory","%ebx","%esi","%edi"); |
4141 | 101 intwinbase_step=2; |
4140 | 102 __asm __volatile( |
103 "xorl %%ecx,%%ecx\n\t" | |
104 "xorl %%ebx,%%ebx\n\t" | |
105 ".L05:\n\t" | |
106 "cmpl $528,%%ecx\n\t" | |
107 "jnc .L11\n\t" | |
108 "movswl (%%edi),%%eax\n\t" | |
109 "cmpl %0+444,%%edi\n\t" | |
110 "jc .L06\n\t" | |
111 "addl $60000,%%eax\n\t" | |
112 ".L06:\n\t" | |
113 "cltd\n\t" | |
114 "imull %2\n\t" | |
115 "shrdl $17,%%edx,%%eax\n\t" | |
116 "cmpl $32767,%%eax\n\t" | |
117 "movl $1055,%%edx\n\t" | |
118 "jle .L07\n\t" | |
119 "movl $32767,%%eax\n\t" | |
120 "jmp .L08\n\t" | |
121 ".L07:\n\t" | |
122 "cmpl $-32767,%%eax\n\t" | |
123 "jge .L08\n\t" | |
124 "movl $-32767,%%eax\n\t" | |
125 ".L08:\n\t" | |
126 "cmpl $512,%%ecx\n\t" | |
127 "jnc .L09\n\t" | |
128 "subl %%ecx,%%edx\n\t" | |
129 "movw %%ax,%1(,%%edx,2)\n\t" | |
130 "movw %%ax,%1-32(,%%edx,2)\n\t" | |
131 ".L09:\n\t" | |
132 "testl $1,%%ecx\n\t" | |
133 "jnz .L10\n\t" | |
134 "negl %%eax\n\t" | |
135 ".L10:\n\t" | |
136 "movw %%ax,%1(,%%ecx,2)\n\t" | |
137 "movw %%ax,%1+32(,%%ecx,2)\n\t" | |
138 ".L11:\n\t" | |
139 "leal -1(%%esi),%%edx\n\t" | |
140 "and %%ebx,%%edx\n\t" | |
141 "cmp $31,%%edx\n\t" | |
142 "jnz .L12\n\t" | |
143 "addl $-1023,%%ecx\n\t" | |
144 "test %%esi,%%ebx\n\t" | |
145 "jz .L12\n\t" | |
146 "negl %2\n\t" | |
147 ".L12:\n\t" | |
148 "addl %%esi,%%ecx\n\t" | |
149 "addl %3,%%edi\n\t" | |
150 "incl %%ebx\n\t" | |
151 "cmpl %0,%%edi\n\t" | |
152 "jz .L13\n\t" | |
153 "cmp $256,%%ebx\n\t" | |
154 "jnz .L05\n\t" | |
155 "negl %3\n\t" | |
156 "jmp .L05\n\t" | |
157 ".L13:\n\t" | |
8560
1320f1b3229d
fixing that f*cking linker 'bug' e.g. naming config with libmp3lame
alex
parents:
8544
diff
changeset
|
158 ::"g"(intwinbase_MMX),"m"(mp3lib_decwins[0]),"m"(scaleval),"m"(intwinbase_step) |
4140 | 159 :"memory","%ebx","%esi","%edi"); |
160 } |