annotate mp3lib/tabinit_MMX.c @ 7964:143d730908ae

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