Rev 1905 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1905 | serge | 1 | /* |
2 | tabinit_mmx: make_decode_tables_mmx |
||
3 | |||
4 | copyright ?-2006 by the mpg123 project - free software under the terms of the LGPL 2.1 |
||
5 | see COPYING and AUTHORS files in distribution or http://mpg123.org |
||
6 | initially written by the mysterious higway (apparently) |
||
7 | */ |
||
8 | |||
9 | #include "mangle.h" |
||
10 | |||
11 | .data |
||
12 | ALIGN32 |
||
13 | .globl ASM_NAME(costab_mmxsse) |
||
14 | ASM_NAME(costab_mmxsse): |
||
15 | .long 1056974725 |
||
16 | .long 1057056395 |
||
17 | .long 1057223771 |
||
18 | .long 1057485416 |
||
19 | .long 1057855544 |
||
20 | .long 1058356026 |
||
21 | .long 1059019886 |
||
22 | .long 1059897405 |
||
23 | .long 1061067246 |
||
24 | .long 1062657950 |
||
25 | .long 1064892987 |
||
26 | .long 1066774581 |
||
27 | .long 1069414683 |
||
28 | .long 1073984175 |
||
29 | .long 1079645762 |
||
30 | .long 1092815430 |
||
31 | .long 1057005197 |
||
32 | .long 1057342072 |
||
33 | .long 1058087743 |
||
34 | .long 1059427869 |
||
35 | .long 1061799040 |
||
36 | .long 1065862217 |
||
37 | .long 1071413542 |
||
38 | .long 1084439708 |
||
39 | .long 1057128951 |
||
40 | .long 1058664893 |
||
41 | .long 1063675095 |
||
42 | .long 1076102863 |
||
43 | .long 1057655764 |
||
44 | .long 1067924853 |
||
45 | .long 1060439283 |
||
46 | ALIGN32 |
||
47 | intwinbase: |
||
3960 | Serge | 48 | .short 0, -1, -1, -1, -1, -1, -1, -2 |
49 | .short -2, -2, -2, -3, -3, -4, -4, -5 |
||
50 | .short -5, -6, -7, -7, -8, -9, -10, -11 |
||
51 | .short -13, -14, -16, -17, -19, -21, -24, -26 |
||
52 | .short -29, -31, -35, -38, -41, -45, -49, -53 |
||
53 | .short -58, -63, -68, -73, -79, -85, -91, -97 |
||
54 | .short -104, -111, -117, -125, -132, -139, -147, -154 |
||
55 | .short -161, -169, -176, -183, -190, -196, -202, -208 |
||
56 | .short -213, -218, -222, -225, -227, -228, -228, -227 |
||
57 | .short -224, -221, -215, -208, -200, -189, -177, -163 |
||
58 | .short -146, -127, -106, -83, -57, -29, 2, 36 |
||
59 | .short 72, 111, 153, 197, 244, 294, 347, 401 |
||
60 | .short 459, 519, 581, 645, 711, 779, 848, 919 |
||
61 | .short 991, 1064, 1137, 1210, 1283, 1356, 1428, 1498 |
||
62 | .short 1567, 1634, 1698, 1759, 1817, 1870, 1919, 1962 |
||
63 | .short 2001, 2032, 2057, 2075, 2085, 2087, 2080, 2063 |
||
64 | .short 2037, 2000, 1952, 1893, 1822, 1739, 1644, 1535 |
||
65 | .short 1414, 1280, 1131, 970, 794, 605, 402, 185 |
||
66 | .short -45, -288, -545, -814, -1095, -1388, -1692, -2006 |
||
67 | .short -2330, -2663, -3004, -3351, -3705, -4063, -4425, -4788 |
||
68 | .short -5153, -5517, -5879, -6237, -6589, -6935, -7271, -7597 |
||
69 | .short -7910, -8209, -8491, -8755, -8998, -9219, -9416, -9585 |
||
70 | .short -9727, -9838, -9916, -9959, -9966, -9935, -9863, -9750 |
||
71 | .short -9592, -9389, -9139, -8840, -8492, -8092, -7640, -7134 |
||
72 | .short -6574, -5959, -5288, -4561, -3776, -2935, -2037, -1082 |
||
73 | .short -70, 998, 2122, 3300, 4533, 5818, 7154, 8540 |
||
74 | .short 9975, 11455, 12980, 14548, 16155, 17799, 19478, 21189 |
||
75 | .short 22929, 24694, 26482, 28289, 30112, 31947,-26209,-24360 |
||
76 | .short -22511,-20664,-18824,-16994,-15179,-13383,-11610, -9863 |
||
77 | .short -8147, -6466, -4822, -3222, -1667, -162, 1289, 2684 |
||
78 | .short 4019, 5290, 6494, 7629, 8692, 9679, 10590, 11420 |
||
79 | .short 12169, 12835, 13415, 13908, 14313, 14630, 14856, 14992 |
||
80 | .short 15038 |
||
1905 | serge | 81 | |
82 | intwindiv: |
||
83 | .long 0x47800000 # 65536.0 |
||
84 | .text |
||
85 | ALIGN32 |
||
86 | /* void make_decode_tables_mmx_asm(long scaleval, float* decwin_mmx, float *decwins); */ |
||
87 | .globl ASM_NAME(make_decode_tables_mmx_asm) |
||
88 | ASM_NAME(make_decode_tables_mmx_asm): |
||
89 | pushl %edi |
||
90 | pushl %esi |
||
91 | pushl %ebx |
||
92 | /* stack: 0=ebx, 4=esi, 8=edi, 12=back, 16=scaleval, 20=decwin_mmx, 24=decwins */ |
||
93 | |||
94 | xorl %ecx,%ecx |
||
95 | xorl %ebx,%ebx |
||
96 | movl $32,%esi |
||
97 | movl $intwinbase,%edi |
||
98 | negl 16(%esp) /* scaleval */ |
||
99 | pushl $2 /* intwinbase step */ |
||
100 | /* stack: 20=scaleval 24=decwin_mmx, 28=decwins */ |
||
101 | .L00: |
||
102 | cmpl $528,%ecx |
||
103 | jnc .L02 |
||
104 | movswl (%edi),%eax |
||
105 | cmpl $intwinbase+444,%edi |
||
106 | jc .L01 |
||
107 | addl $60000,%eax |
||
108 | .L01: |
||
109 | pushl %eax |
||
110 | /* stack: 24=scaleval 28=decwin_mmx, 32=decwins */ |
||
111 | fildl (%esp) |
||
112 | fdivs intwindiv |
||
113 | fimull 24(%esp) /* scaleval */ |
||
114 | /* eax used to be popped the line before... I'll just use it here a bit */ |
||
115 | movl 28(%esp),%eax /* decwin_mmx */ |
||
116 | fsts (%eax,%ecx,4) |
||
117 | fstps 64(%eax,%ecx,4) |
||
118 | popl %eax |
||
119 | /* stack: 20=scaleval 24=decwin_mmx, 28=decwins */ |
||
120 | .L02: |
||
121 | leal -1(%esi),%edx |
||
3960 | Serge | 122 | andl %ebx,%edx |
123 | cmpl $31,%edx |
||
1905 | serge | 124 | jnz .L03 |
125 | addl $-1023,%ecx |
||
3960 | Serge | 126 | testl %esi,%ebx |
1905 | serge | 127 | jz .L03 |
128 | negl 20(%esp) |
||
129 | .L03: |
||
130 | addl %esi,%ecx |
||
131 | addl (%esp),%edi |
||
132 | incl %ebx |
||
133 | cmpl $intwinbase,%edi |
||
134 | jz .L04 |
||
3960 | Serge | 135 | cmpl $256,%ebx |
1905 | serge | 136 | jnz .L00 |
137 | negl (%esp) |
||
138 | jmp .L00 |
||
139 | .L04: |
||
140 | popl %eax |
||
141 | |||
142 | xorl %ecx,%ecx |
||
143 | xorl %ebx,%ebx |
||
144 | pushl $2 /* paired with popl above */ |
||
145 | .L05: |
||
146 | cmpl $528,%ecx |
||
147 | jnc .L11 |
||
148 | movswl (%edi),%eax |
||
149 | cmpl $intwinbase+444,%edi |
||
150 | jc .L06 |
||
151 | addl $60000,%eax |
||
152 | .L06: |
||
153 | cltd |
||
154 | imull 20(%esp) |
||
155 | shrdl $17,%edx,%eax |
||
156 | cmpl $32767,%eax |
||
157 | movl $1055,%edx |
||
158 | jle .L07 |
||
159 | movl $32767,%eax |
||
160 | jmp .L08 |
||
161 | .L07: |
||
162 | cmpl $-32767,%eax |
||
163 | jge .L08 |
||
164 | movl $-32767,%eax |
||
165 | .L08: |
||
166 | /* going to use ebx for decwins, watch the jumps */ |
||
167 | pushl %ebx |
||
168 | /* stack: 24=scaleval 28=decwin_mmx, 32=decwins */ |
||
169 | movl 32(%esp),%ebx |
||
170 | cmpl $512,%ecx |
||
171 | jnc .L09 |
||
172 | subl %ecx,%edx |
||
173 | movw %ax,(%ebx,%edx,2) /* decwins */ |
||
174 | movw %ax,-32(%ebx,%edx,2) |
||
175 | .L09: |
||
176 | testl $1,%ecx |
||
177 | jnz .L10 |
||
178 | negl %eax |
||
179 | .L10: |
||
180 | movw %ax,(%ebx,%ecx,2) |
||
181 | movw %ax,32(%ebx,%ecx,2) |
||
182 | popl %ebx /* that has to match the pushl before */ |
||
183 | .L11: |
||
184 | leal -1(%esi),%edx |
||
3960 | Serge | 185 | andl %ebx,%edx |
186 | cmpl $31,%edx |
||
1905 | serge | 187 | jnz .L12 |
188 | addl $-1023,%ecx |
||
3960 | Serge | 189 | testl %esi,%ebx |
1905 | serge | 190 | jz .L12 |
191 | negl 20(%esp) |
||
192 | .L12: |
||
193 | addl %esi,%ecx |
||
194 | addl (%esp),%edi |
||
195 | incl %ebx |
||
196 | cmpl $intwinbase,%edi |
||
197 | jz .L13 |
||
3960 | Serge | 198 | cmpl $256,%ebx |
1905 | serge | 199 | jnz .L05 |
200 | negl (%esp) |
||
201 | jmp .L05 |
||
202 | .L13: |
||
203 | popl %eax |
||
204 | |||
205 | popl %ebx |
||
206 | popl %esi |
||
207 | popl %edi |
||
208 | ret |
||
209 | |||
3960 | Serge | 210 | NONEXEC_STACK |