1
mirror of https://github.com/mpv-player/mpv synced 2024-09-09 01:16:56 +02:00
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@4141 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
nick 2002-01-13 16:59:18 +00:00
parent 6f3d8609d6
commit d54038119b
3 changed files with 155 additions and 162 deletions

View File

@ -12,7 +12,7 @@ ifeq ($(TARGET_ARCH_X86),yes)
SRCS += d_cpu.s decode_i586.s
OBJS += d_cpu.o decode_i586.o
ifeq ($(TARGET_MMX),yes)
SRCS += decode_MMX.s dct64_MMX.s tabinit_MMX.s
SRCS += decode_MMX.c dct64_MMX.s tabinit_MMX.s
OBJS += decode_MMX.o dct64_MMX.o tabinit_MMX.o
endif
#ifeq ($(TARGET_SSE),yes)

154
mp3lib/tabinit_MMX.c Normal file
View File

@ -0,0 +1,154 @@
/*
* This code was taken from http://www.mpg123.org
* See ChangeLog of mpg123-0.59s-pre.1 for detail
* Applied to mplayer by Nick Kurshev <nickols_k@mail.ru>
*/
long __attribute__((aligned(8))) decwins [544];
static long decwin [544];
static short intwinbase_MMX[] =
{
0, -1, -1, -1, -1, -1, -1, -2,
-2, -2, -2, -3, -3, -4, -4, -5,
-5, -6, -7, -7, -8, -9, -10, -11,
-13, -14, -16, -17, -19, -21, -24, -26,
-29, -31, -35, -38, -41, -45, -49, -53,
-58, -63, -68, -73, -79, -85, -91, -97,
-104, -111, -117, -125, -132, -139, -147, -154,
-161, -169, -176, -183, -190, -196, -202, -208,
-213, -218, -222, -225, -227, -228, -228, -227,
-224, -221, -215, -208, -200, -189, -177, -163,
-146, -127, -106, -83, -57, -29, 2, 36,
72, 111, 153, 197, 244, 294, 347, 401,
459, 519, 581, 645, 711, 779, 848, 919,
991, 1064, 1137, 1210, 1283, 1356, 1428, 1498,
1567, 1634, 1698, 1759, 1817, 1870, 1919, 1962,
2001, 2032, 2057, 2075, 2085, 2087, 2080, 2063,
2037, 2000, 1952, 1893, 1822, 1739, 1644, 1535,
1414, 1280, 1131, 970, 794, 605, 402, 185,
-45, -288, -545, -814, -1095, -1388, -1692, -2006,
-2330, -2663, -3004, -3351, -3705, -4063, -4425, -4788,
-5153, -5517, -5879, -6237, -6589, -6935, -7271, -7597,
-7910, -8209, -8491, -8755, -8998, -9219, -9416, -9585,
-9727, -9838, -9916, -9959, -9966, -9935, -9863, -9750,
-9592, -9389, -9139, -8840, -8492, -8092, -7640, -7134,
-6574, -5959, -5288, -4561, -3776, -2935, -2037, -1082,
-70, 998, 2122, 3300, 4533, 5818, 7154, 8540,
9975, 11455, 12980, 14548, 16155, 17799, 19478, 21189,
22929, 24694, 26482, 28289, 30112, 31947,-26209,-24360,
-22511,-20664,-18824,-16994,-15179,-13383,-11610, -9863,
-8147, -6466, -4822, -3222, -1667, -162, 1289, 2684,
4019, 5290, 6494, 7629, 8692, 9679, 10590, 11420,
12169, 12835, 13415, 13908, 14313, 14630, 14856, 14992,
15038
};
static long intwindiv = 0x47800000;
void make_decode_tables_MMX(long scaleval)
{
long intwinbase_step = 2;
scaleval =- scaleval;
__asm __volatile(
"xorl %%ecx,%%ecx\n\t"
"xorl %%ebx,%%ebx\n\t"
"movl $32,%%esi\n\t"
"movl %0,%%edi\n\t"
".L00:\n\t"
"cmpl $528,%%ecx\n\t"
"jnc .L02\n\t"
"movswl (%%edi),%%eax\n\t"
"cmpl %0+444,%%edi\n\t"
"jc .L01\n\t"
"addl $60000,%%eax\n\t"
".L01:\n\t"
"pushl %%eax\n\t"
"fildl (%%esp)\n\t"
"fdivs intwindiv\n\t"
"popl %%eax\n\t"
"fimull %2\n\t"
"fsts %1(,%%ecx,4)\n\t"
"fstps %1+64(,%%ecx,4)\n\t"
".L02:\n\t"
"leal -1(%%esi),%%edx\n\t"
"and %%ebx,%%edx\n\t"
"cmp $31,%%edx\n\t"
"jnz .L03\n\t"
"addl $-1023,%%ecx\n\t"
"test %%esi,%%ebx\n\t"
"jz .L03\n\t"
"negl %2\n\t"
".L03:\n\t"
"addl %%esi,%%ecx\n\t"
"addl %3,%%edi\n\t"
"incl %%ebx\n\t"
"cmpl %0,%%edi\n\t"
"jz .L04\n\t"
"cmp $256,%%ebx\n\t"
"jnz .L00\n\t"
"negl %3\n\t"
"jmp .L00\n\t"
".L04:\n\t"
::"g"(intwinbase_MMX),"m"(decwin[0]),"m"(scaleval),"m"(intwinbase_step)
:"memory","%ebx","%esi","%edi");
__asm __volatile(
"xorl %%ecx,%%ecx\n\t"
"xorl %%ebx,%%ebx\n\t"
".L05:\n\t"
"cmpl $528,%%ecx\n\t"
"jnc .L11\n\t"
"movswl (%%edi),%%eax\n\t"
"cmpl %0+444,%%edi\n\t"
"jc .L06\n\t"
"addl $60000,%%eax\n\t"
".L06:\n\t"
"cltd\n\t"
"imull %2\n\t"
"shrdl $17,%%edx,%%eax\n\t"
"cmpl $32767,%%eax\n\t"
"movl $1055,%%edx\n\t"
"jle .L07\n\t"
"movl $32767,%%eax\n\t"
"jmp .L08\n\t"
".L07:\n\t"
"cmpl $-32767,%%eax\n\t"
"jge .L08\n\t"
"movl $-32767,%%eax\n\t"
".L08:\n\t"
"cmpl $512,%%ecx\n\t"
"jnc .L09\n\t"
"subl %%ecx,%%edx\n\t"
"movw %%ax,%1(,%%edx,2)\n\t"
"movw %%ax,%1-32(,%%edx,2)\n\t"
".L09:\n\t"
"testl $1,%%ecx\n\t"
"jnz .L10\n\t"
"negl %%eax\n\t"
".L10:\n\t"
"movw %%ax,%1(,%%ecx,2)\n\t"
"movw %%ax,%1+32(,%%ecx,2)\n\t"
".L11:\n\t"
"leal -1(%%esi),%%edx\n\t"
"and %%ebx,%%edx\n\t"
"cmp $31,%%edx\n\t"
"jnz .L12\n\t"
"addl $-1023,%%ecx\n\t"
"test %%esi,%%ebx\n\t"
"jz .L12\n\t"
"negl %2\n\t"
".L12:\n\t"
"addl %%esi,%%ecx\n\t"
"addl %3,%%edi\n\t"
"incl %%ebx\n\t"
"cmpl %0,%%edi\n\t"
"jz .L13\n\t"
"cmp $256,%%ebx\n\t"
"jnz .L05\n\t"
"negl %3\n\t"
"jmp .L05\n\t"
".L13:\n\t"
::"g"(intwinbase_MMX),"m"(decwins[0]),"m"(scaleval),"m"(intwinbase_step)
:"memory","%ebx","%esi","%edi");
}

View File

@ -1,161 +0,0 @@
# This code was taken from http://www.mpg123.org
# See ChangeLog of mpg123-0.59s-pre.1 for detail
# Applied to mplayer by Nick Kurshev <nickols_k@mail.ru>
.bss
.align 8
.comm decwin,2176,32
.align 8
.comm decwins,2176,32
.data
.align 8
intwinbase_MMX:
.value 0, -1, -1, -1, -1, -1, -1, -2
.value -2, -2, -2, -3, -3, -4, -4, -5
.value -5, -6, -7, -7, -8, -9, -10, -11
.value -13, -14, -16, -17, -19, -21, -24, -26
.value -29, -31, -35, -38, -41, -45, -49, -53
.value -58, -63, -68, -73, -79, -85, -91, -97
.value -104, -111, -117, -125, -132, -139, -147, -154
.value -161, -169, -176, -183, -190, -196, -202, -208
.value -213, -218, -222, -225, -227, -228, -228, -227
.value -224, -221, -215, -208, -200, -189, -177, -163
.value -146, -127, -106, -83, -57, -29, 2, 36
.value 72, 111, 153, 197, 244, 294, 347, 401
.value 459, 519, 581, 645, 711, 779, 848, 919
.value 991, 1064, 1137, 1210, 1283, 1356, 1428, 1498
.value 1567, 1634, 1698, 1759, 1817, 1870, 1919, 1962
.value 2001, 2032, 2057, 2075, 2085, 2087, 2080, 2063
.value 2037, 2000, 1952, 1893, 1822, 1739, 1644, 1535
.value 1414, 1280, 1131, 970, 794, 605, 402, 185
.value -45, -288, -545, -814, -1095, -1388, -1692, -2006
.value -2330, -2663, -3004, -3351, -3705, -4063, -4425, -4788
.value -5153, -5517, -5879, -6237, -6589, -6935, -7271, -7597
.value -7910, -8209, -8491, -8755, -8998, -9219, -9416, -9585
.value -9727, -9838, -9916, -9959, -9966, -9935, -9863, -9750
.value -9592, -9389, -9139, -8840, -8492, -8092, -7640, -7134
.value -6574, -5959, -5288, -4561, -3776, -2935, -2037, -1082
.value -70, 998, 2122, 3300, 4533, 5818, 7154, 8540
.value 9975, 11455, 12980, 14548, 16155, 17799, 19478, 21189
.value 22929, 24694, 26482, 28289, 30112, 31947,-26209,-24360
.value -22511,-20664,-18824,-16994,-15179,-13383,-11610, -9863
.value -8147, -6466, -4822, -3222, -1667, -162, 1289, 2684
.value 4019, 5290, 6494, 7629, 8692, 9679, 10590, 11420
.value 12169, 12835, 13415, 13908, 14313, 14630, 14856, 14992
.value 15038
intwindiv:
.long 0x47800000 # 65536.0
.text
.align 32
.globl make_decode_tables_MMX
make_decode_tables_MMX:
pushl %edi
pushl %esi
pushl %ebx
xorl %ecx,%ecx
xorl %ebx,%ebx
movl $32,%esi
movl $intwinbase_MMX,%edi
negl 16(%esp) # scaleval
pushl $2 # intwinbase step
.L00:
cmpl $528,%ecx
jnc .L02
movswl (%edi),%eax
cmpl $intwinbase_MMX+444,%edi
jc .L01
addl $60000,%eax
.L01:
pushl %eax
fildl (%esp)
fdivs intwindiv
fimull 24(%esp)
popl %eax
fsts decwin(,%ecx,4)
fstps decwin+64(,%ecx,4)
.L02:
leal -1(%esi),%edx
and %ebx,%edx
cmp $31,%edx
jnz .L03
addl $-1023,%ecx
test %esi,%ebx
jz .L03
negl 20(%esp)
.L03:
addl %esi,%ecx
addl (%esp),%edi
incl %ebx
cmpl $intwinbase_MMX,%edi
jz .L04
cmp $256,%ebx
jnz .L00
negl (%esp)
jmp .L00
.L04:
popl %eax
xorl %ecx,%ecx
xorl %ebx,%ebx
pushl $2
.L05:
cmpl $528,%ecx
jnc .L11
movswl (%edi),%eax
cmpl $intwinbase_MMX+444,%edi
jc .L06
addl $60000,%eax
.L06:
cltd
imull 20(%esp)
shrdl $17,%edx,%eax
cmpl $32767,%eax
movl $1055,%edx
jle .L07
movl $32767,%eax
jmp .L08
.L07:
cmpl $-32767,%eax
jge .L08
movl $-32767,%eax
.L08:
cmpl $512,%ecx
jnc .L09
subl %ecx,%edx
movw %ax,decwins(,%edx,2)
movw %ax,decwins-32(,%edx,2)
.L09:
testl $1,%ecx
jnz .L10
negl %eax
.L10:
movw %ax,decwins(,%ecx,2)
movw %ax,decwins+32(,%ecx,2)
.L11:
leal -1(%esi),%edx
and %ebx,%edx
cmp $31,%edx
jnz .L12
addl $-1023,%ecx
test %esi,%ebx
jz .L12
negl 20(%esp)
.L12:
addl %esi,%ecx
addl (%esp),%edi
incl %ebx
cmpl $intwinbase_MMX,%edi
jz .L13
cmp $256,%ebx
jnz .L05
negl (%esp)
jmp .L05
.L13:
popl %eax
popl %ebx
popl %esi
popl %edi
ret