summaryrefslogtreecommitdiffstats
path: root/mp3lib/tabinit_MMX.s
blob: 90b4d1d22312721174d489c06dd7689e596c93ce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
# 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