1 #include <stddef.h>
2
remap_range1_start(void)3 void remap_range1_start(void){}
4
5
nonepublic_dwmixa3(void)6 void nonepublic_dwmixa3(void)
7 {
8 __asm__ __volatile__
9 (
10 ".cfi_endproc\n"
11
12 ".type mixrFadeChannel_, @function\n"
13 "mixrFadeChannel_:\n"
14 ".cfi_startproc\n"
15
16 " movl %c0(%%edi), %%ebx\n" /* %0 = curvol[0] */
17 " movl %c1(%%edi), %%ecx\n" /* %1 = curvol[1] */
18 " shll $8, %%ebx\n"
19 " shll $8, %%ecx\n"
20 " movl %c2(%%edi),%%eax\n" /* %2 = ch->samp */
21 " addl %c3(%%edi),%%eax\n" /* %3 = ch->pos */
22 " testb %5, %c4(%%edi)\n" /* %5 = MIXRQ_PLAY16BIT */
23 /* %4 = ch->status, */
24 " jnz mixrFadeChannel16\n"
25 " movb (%%eax), %%bl\n"
26 " jmp mixrFadeChanneldo\n"
27 "mixrFadeChannel16:\n"
28 " movb 1(,%%eax,2),%%bl\n"
29 "mixrFadeChanneldo:\n"
30 " movb %%bl, %%cl\n"
31 " movl 1234(,%%ebx,4),%%ebx\n"
32 "mixrFadeChannelvoltab1:\n"
33 " movl 1234(,%%ecx,4),%%ecx\n"
34 "mixrFadeChannelvoltab2:\n"
35 " addl %%ebx, (%%esi)\n"
36 " addl %%ecx, 4(%%esi)\n"
37 " movl $0, %c0(%%edi)\n" /* %0 = curvol[0] */
38 " movl $0, %c1(%%edi)\n" /* %1 = curvol[1] */
39 " ret\n"
40 ".cfi_endproc\n"
41 ".size mixrFadeChannel_, .-mixrFadeChannel_\n"
42
43 ".type setupfade, @function\n"
44 "setupfade:\n" /* CALLED FROM EXTERNAL */
45 ".cfi_startproc\n"
46 " movl %%eax, (mixrFadeChannelvoltab1-4)\n"
47 " movl %%eax, (mixrFadeChannelvoltab2-4)\n"
48 " ret\n"
49 ".cfi_endproc\n"
50 ".size setupfade, .-setupfade\n"
51
52 ".cfi_startproc\n"
53 :
54 : "n" (offsetof(struct channel, curvols[0])), /* 0 */
55 "n" (offsetof(struct channel, curvols[1])), /* 1 */
56 "n" (offsetof(struct channel, samp)), /* 2 */
57 "n" (offsetof(struct channel, pos)), /* 3 */
58 "n" (offsetof(struct channel, status)), /* 4 */
59 "n" (MIXRQ_PLAY16BIT) /* 5 */
60 );
61 }
62
63 __attribute__((optimize("-fno-omit-frame-pointer"))) /* we use the stack, so we need all access to go via EBP, not ESP */
mixrFadeChannel(int32_t * fade,struct channel * ch)64 void mixrFadeChannel(int32_t *fade, struct channel *ch)
65 {
66 int d0, d1;
67
68 __asm__ __volatile__
69 (
70 #ifdef __PIC__
71 "pushl %%ebx\n"
72 #endif
73 "call mixrFadeChannel_\n"
74 #ifdef __PIC__
75 "popl %%ebx\n"
76 #endif
77 : "=&S"(d0),
78 "=&D"(d1)
79 : "0"(fade),
80 "1"(ch)
81 #ifdef __PIC__
82 : "memory", "eax", "ecx", "edx"
83 #else
84 : "memory", "eax", "ebx", "ecx", "edx"
85 #endif
86 );
87 }
88
nonepublic_dwmixa1(void)89 void nonepublic_dwmixa1(void)
90 {
91 __asm__ __volatile__
92 (
93 ".cfi_endproc\n"
94 );
95
96 __asm__ __volatile__
97 (
98 ".type playquiet, @function\n"
99 "playquiet:\n"
100 ".cfi_startproc\n"
101
102 " ret\n"
103
104 ".cfi_endproc\n"
105 ".size playquiet, .-playquiet\n"
106 );
107
108 __asm__ __volatile__
109 (
110 ".type playmono, @function\n"
111 "playmono:\n"
112 ".cfi_startproc\n"
113
114 "playmonolp:\n"
115 " movb (%esi), %bl\n"
116 " addl $1234,%edx\n"
117 "monostepl:\n"
118 " movl 1234(,%ebx,4), %eax\n"
119 "playmonomonosteplvol1:\n"
120 " adcl $1234, %esi\n"
121 "monosteph:\n"
122 " addl %eax, (%edi)\n"
123 " addl $4, %edi\n"
124 " addl $1234, %ebx\n"
125 "monoramp:\n"
126 " cmpl $1234, %edi\n"
127 "monoendp:\n"
128 " jb playmonolp\n"
129 " ret\n"
130
131 ".cfi_endproc\n"
132 ".size playmono, .-playmono\n"
133
134 ".type setupmono, @function\n"
135 "setupmono:\n" /* CALLED FROM EXTERNAL */
136 ".cfi_startproc\n"
137
138 " movl %eax, (playmonomonosteplvol1-4)\n"
139 " ret\n"
140
141 ".cfi_endproc\n"
142 ".size setupmono, .-setupmono\n"
143 );
144
145 __asm__ __volatile__
146 (
147 ".type playmono16, @function\n"
148 "playmono16:\n"
149 ".cfi_startproc\n"
150
151 "playmono16lp:\n"
152 " movb 1(%esi,%esi), %bl\n"
153 " addl $1234, %edx\n"
154 "mono16stepl:\n"
155 " movl 1234(,%ebx,4),%eax\n"
156 "playmono16vol1:\n"
157 " adcl $1234, %esi\n"
158 "mono16steph:\n"
159 " addl %eax, (%edi)\n"
160 " addl $4, %edi\n"
161 " addl $1234, %ebx\n"
162 "mono16ramp:\n"
163 " cmpl $1234, %edi\n"
164 "mono16endp:\n"
165 " jb playmono16lp\n"
166 " ret\n"
167
168 ".cfi_endproc\n"
169 ".size playmono16, .-playmono16\n"
170
171 ".type setupmono16, @function\n"
172 "setupmono16:\n" /* usual CALLED from EXTERNAL crap*/
173 ".cfi_startproc\n"
174
175 " movl %eax, (playmono16vol1-4)\n"
176 " ret\n"
177
178 ".cfi_endproc\n"
179 ".size setupmono16, .-setupmono16\n"
180 );
181
182 __asm__ __volatile__
183 (
184 ".type playmonoi, @function\n"
185 "playmonoi:\n"
186 ".cfi_startproc\n"
187
188 "playmonoilp:\n"
189 " movl %edx, %eax\n"
190 " shrl $20, %eax\n"
191 " movb (%esi), %al\n"
192 " movb 1234(%eax,%eax), %bl\n"
193 "playmonoiint0:\n"
194 " movb 1(%esi), %al\n"
195 " addb 1234(%eax,%eax), %bl\n"
196 "playmonoiint1:\n"
197
198 " addl $1234, %edx\n"
199 "monoistepl:\n"
200 " movl 1234(,%ebx,4),%eax\n"
201 "playmonoivol1:\n"
202 " adcl $1234, %esi\n"
203 "monoisteph:\n"
204 " addl %eax, (%edi)\n"
205 " addl $4, %edi\n"
206 " addl $1234, %ebx\n"
207 "monoiramp:\n"
208 " cmpl $1234, %edi\n"
209 "monoiendp:\n"
210 " jb playmonoilp\n"
211 " ret\n"
212
213 ".cfi_endproc\n"
214 ".size playmonoi, .-playmonoi\n"
215
216 ".type setupmonoi, @function\n"
217 "setupmonoi:\n" /* need to comment??? external */
218 ".cfi_startproc\n"
219
220 " movl %eax, (playmonoivol1-4)\n"
221 " movl %ebx, (playmonoiint0-4)\n"
222 " incl %ebx\n"
223 " movl %ebx, (playmonoiint1-4)\n"
224 " decl %ebx\n"
225 " ret\n"
226
227 ".cfi_endproc\n"
228 ".size setupmonoi, .-setupmonoi\n"
229 );
230
231 __asm__ __volatile__
232 (
233 ".type playmonoi16, @function\n"
234 "playmonoi16:\n"
235 ".cfi_startproc\n"
236
237 "playmonoi16lp:\n"
238 " movl %edx, %eax\n"
239 " shrl $20, %eax\n"
240 " movb 1(%esi,%esi), %al\n"
241 " movb 1234(%eax,%eax), %bl\n"
242 "playmonoi16int0:\n"
243 " movb 3(%esi,%esi), %al\n"
244 " addb 1234(%eax,%eax), %bl\n"
245 "playmonoi16int1:\n"
246
247 " addl $1234, %edx\n"
248 "monoi16stepl:\n"
249 " movl 1234(,%ebx,4), %eax\n"
250 "playmonoi16vol1:\n"
251 " adcl $1234, %esi\n"
252 "monoi16steph:\n"
253 " addl %eax, (%edi)\n"
254 " addl $4, %edi\n"
255 " addl $1234, %ebx\n"
256 "monoi16ramp:\n"
257 " cmpl $1234, %edi\n"
258 "monoi16endp:\n"
259 " jb playmonoi16lp\n"
260 " ret\n"
261
262 ".cfi_endproc\n"
263 ".size playmonoi16, .-playmonoi16\n"
264
265 ".type setupmonoi16, @function\n"
266 "setupmonoi16:\n" /* WE ARE NOT SHOCKED ABOUT EXTERNAL STUFF? */
267 ".cfi_startproc\n"
268
269 " movl %eax, (playmonoi16vol1-4)\n"
270 " movl %ebx, (playmonoi16int0-4)\n"
271 " incl %ebx\n"
272 " movl %ebx, (playmonoi16int1-4)\n"
273 " decl %ebx\n"
274 " ret\n"
275
276 ".cfi_endproc\n"
277 ".size setupmonoi16, .-setupmonoi16\n"
278 );
279
280 __asm__ __volatile__
281 (
282 ".type playstereo, @function\n"
283 "playstereo:\n"
284 ".cfi_startproc\n"
285
286 "playstereolp:\n"
287 " movb (%esi), %bl\n"
288 " addl $1234, %edx\n"
289 "stereostepl:\n"
290 " movb (%esi), %cl\n"
291 " movl 1234(,%ebx,4), %eax\n"
292 "playstereovol1:\n"
293 " adcl $1234, %esi\n"
294 "stereosteph:\n"
295 " addl %eax, (%edi)\n"
296 " movl 1234(,%ecx,4), %eax\n"
297 "playstereovol2:\n"
298 " addl %eax, 4(%edi)\n"
299 " addl $8, %edi\n"
300 " addl $1234, %ebx\n"
301 "stereoramp0:\n"
302 " addl $1234, %ecx\n"
303 "stereoramp1:\n"
304 " cmpl $1234, %edi\n"
305 "stereoendp:\n"
306 " jb playstereolp\n"
307 " ret\n"
308
309 ".cfi_endproc\n"
310 ".size playstereo, .-playstereo\n"
311
312 ".type setupstereo, @function\n"
313 "setupstereo:\n" /* TAKE A WILD GUESS */
314 ".cfi_startproc\n"
315
316 " movl %eax, (playstereovol1-4)\n"
317 " movl %eax, (playstereovol2-4)\n"
318 " ret\n"
319
320 ".cfi_endproc\n"
321 ".size setupstereo, .-setupstereo\n"
322 );
323
324 __asm__ __volatile__
325 (
326 ".type playstereo16, @function\n"
327 "playstereo16:\n"
328 ".cfi_startproc\n"
329
330 "playstereo16lp:\n"
331 " movb 1(%esi,%esi), %bl\n"
332 " addl $1234, %edx\n"
333 "stereo16stepl:\n"
334 " movb 1(%esi,%esi), %cl\n"
335 " movl 1234(,%ebx,4),%eax\n"
336 "playstereo16vol1:\n"
337 " adcl $1234, %esi\n"
338 "stereo16steph:\n"
339 " addl %eax,(%edi)\n"
340 " movl 1234(,%ecx,4), %eax\n"
341 "playstereo16vol2:\n"
342 " addl %eax, 4(%edi)\n"
343 " addl $8, %edi\n"
344 " addl $1234,%ebx\n"
345 "stereo16ramp0:\n"
346 " addl $1234,%ecx\n"
347 "stereo16ramp1:\n"
348 " cmpl $1234, %edi\n"
349 "stereo16endp:\n"
350 " jb playstereo16lp\n"
351 " ret\n"
352
353 ".cfi_endproc\n"
354 ".size playstereo16, .-playstereo16\n"
355
356 ".type setupstereo16, @function\n"
357 "setupstereo16:\n" /* GUESS TWO TIMES? */
358 ".cfi_startproc\n"
359
360 " movl %eax, (playstereo16vol1-4)\n"
361 " movl %eax, (playstereo16vol2-4)\n"
362 " ret\n"
363
364 ".cfi_endproc\n"
365 ".size setupstereo16, .-setupstereo16\n"
366 );
367
368 __asm__ __volatile__
369 (
370 ".type playstereoi, @function\n"
371 "playstereoi:\n"
372 ".cfi_startproc\n"
373
374 "playstereoilp:\n"
375 " movl %edx, %eax\n"
376 " shrl $20, %eax\n"
377 " movb (%esi), %al\n"
378 " movb 1234(%eax,%eax), %bl\n"
379 "playstereoiint0:\n"
380 " movb 1(%esi), %al\n"
381 " addb 1234(%eax,%eax), %bl\n"
382 "playstereoiint1:\n"
383
384 " addl $1234, %edx\n"
385 "stereoistepl:\n"
386 " movb %bl, %cl\n"
387 " movl 1234(,%ebx,4), %eax\n"
388 "playstereoivol1:\n"
389 " adcl $1234, %esi\n"
390 "stereoisteph:\n"
391 " addl %eax, (%edi)\n"
392 " movl 1234(,%ecx,4),%eax\n"
393 "playstereoivol2:\n"
394 " addl %eax, 4(%edi)\n"
395 " addl $8, %edi\n"
396 " addl $1234, %ebx\n"
397 "stereoiramp0:\n"
398 " addl $1234, %ecx\n"
399 "stereoiramp1:\n"
400 " cmpl $1234, %edi\n"
401 "stereoiendp:\n"
402 " jb playstereoilp\n"
403 " ret\n"
404
405 ".cfi_endproc\n"
406 ".size playstereoi, .-playstereoi\n"
407
408 ".type setupstereoi, @function\n"
409 "setupstereoi:\n" /* THESE ARE STARTING TO BECOME A HABIT NOW*/
410 ".cfi_startproc\n"
411
412 " movl %eax, (playstereoivol1-4)\n"
413 " movl %eax, (playstereoivol2-4)\n"
414 " movl %ebx, (playstereoiint0-4)\n"
415 " incl %ebx\n"
416 " movl %ebx, (playstereoiint1-4)\n"
417 " decl %ebx\n"
418 " ret\n"
419
420 ".cfi_endproc\n"
421 ".size playstereoi, .-playstereoi\n"
422 );
423
424 __asm__ __volatile__
425 (
426 ".type playstereoi16, @function\n"
427 "playstereoi16:\n"
428 ".cfi_startproc\n"
429
430 "playstereoi16lp:\n"
431 " movl %edx, %eax\n"
432 " shrl $20, %eax\n"
433 " movb 1(%esi,%esi), %al\n"
434 " movb 1234(%eax, %eax), %bl\n"
435 "playstereoi16int0:\n"
436 " movb 3(%esi, %esi), %al\n"
437 " addb 1234(%eax, %eax), %bl\n"
438 "playstereoi16int1:\n"
439
440 " addl $1234, %edx\n"
441 "stereoi16stepl:\n"
442 " movb %bl, %cl\n"
443 " movl 1234(,%ebx,4), %eax\n"
444 "playstereoi16vol1:\n"
445 " adcl $1234, %esi\n"
446 "stereoi16steph:\n"
447 " addl %eax, (%edi)\n"
448 " movl 1234(,%ecx,4), %eax\n"
449 "playstereoi16vol2:\n"
450 " addl %eax, 4(%edi)\n"
451 " addl $8, %edi\n"
452 " addl $1234, %ebx\n"
453 "stereoi16ramp0:\n"
454 " addl $1234, %ecx\n"
455 "stereoi16ramp1:\n"
456 " cmpl $1234, %edi\n"
457 "stereoi16endp:\n"
458 " jb playstereoi16lp\n"
459 " ret\n"
460
461 ".cfi_endproc\n"
462 ".size playstereoi16, .-playstereoi16\n"
463
464 ".type setupstereoi16, @function\n"
465 "setupstereoi16:" /* THIS IS THE LAST ONE!!!!!!!!!! */
466 ".cfi_startproc\n"
467
468 " movl %eax, (playstereoi16vol1-4)\n"
469 " movl %eax, (playstereoi16vol2-4)\n"
470 " movl %ebx, (playstereoi16int0-4)\n"
471 " incl %ebx\n"
472 " movl %ebx, (playstereoi16int1-4)\n"
473 " decl %ebx\n"
474 " ret\n"
475
476 ".cfi_endproc\n"
477 ".size setupstereoi16, .-setupstereoi16\n"
478 );
479
480 __asm__ __volatile__
481 (
482 ".cfi_startproc\n"
483
484 ".section .data\n"
485 "dummydd: .long 0\n"
486
487 "routq:\n"
488 ".long playquiet, dummydd, dummydd, dummydd, dummydd, dummydd, 0,0\n"
489 "routtab:\n"
490 ".long playmono, monostepl-4, monosteph-4, monoramp-4, dummydd, monoendp-4, 0,0\n"
491 ".long playmono16, mono16stepl-4, mono16steph-4, mono16ramp-4, dummydd, mono16endp-4, 0,0\n"
492 ".long playmonoi, monoistepl-4, monoisteph-4, monoiramp-4, dummydd, monoiendp-4, 0,0\n"
493 ".long playmonoi16, monoi16stepl-4, monoi16steph-4, monoi16ramp-4, dummydd, monoi16endp-4, 0,0\n"
494 ".long playstereo, stereostepl-4, stereosteph-4, stereoramp0-4, stereoramp1-4, stereoendp-4, 0,0\n"
495 ".long playstereo16, stereo16stepl-4, stereo16steph-4, stereo16ramp0-4, stereo16ramp1-4, stereo16endp-4, 0,0\n"
496 ".long playstereoi, stereoistepl-4, stereoisteph-4, stereoiramp0-4, stereoiramp1-4, stereoiendp-4, 0,0\n"
497 ".long playstereoi16, stereoi16stepl-4,stereoi16steph-4,stereoi16ramp0-4,stereoi16ramp1-4,stereoi16endp-4, 0,0\n"
498
499 ".previous\n"
500 );
501 }
502
503 __attribute__((optimize("-fno-omit-frame-pointer"))) /* we use the stack, so we need all access to go via EBP, not ESP */
mixrPlayChannel(int32_t * buf,int32_t * fadebuf,uint32_t len,struct channel * chan,int stereo)504 void mixrPlayChannel(int32_t *buf, int32_t *fadebuf, uint32_t len, struct channel *chan, int stereo)
505 {
506 void *routptr;
507 uint32_t filllen,
508 ramping[2];
509 int inloop;
510 int ramploop;
511 int dofade;
512 __asm__ __volatile__
513 (
514 #ifdef __PIC__
515 "pushl %%ebx\n"
516 #endif
517 " movl %3, %%edi\n" /* %3 = chan */
518 " testb %25, %c12(%%edi)\n" /* %25 = MIXRQ_PLAYING */
519 /* %12 = status */
520 " jz mixrPlayChannelexit\n"
521
522 " movl $0, %6\n" /* %6 = fillen */
523 " movl $0, %11\n" /* %11 = dofade */
524
525 " xorl %%eax, %%eax\n"
526 " cmpl $0, %4\n" /* %4 = stereo */
527 " je mixrPlayChannelnostereo\n"
528 " addl $4, %%eax\n"
529 "mixrPlayChannelnostereo:\n"
530 " testb %27, %c12(%%edi)\n" /* %27 = MIXRQ_INTERPOLATE */
531 /* %12 = ch->status */
532 " jz mixrPlayChannelnointr\n"
533 " addl $2, %%eax\n"
534 "mixrPlayChannelnointr:\n"
535 " testb %26, %c12(%%edi)\n" /* %26 = MIXRQ_PLAY16BIT */
536 /* %12 = ch->status */
537 " jz mixrPlayChannelpsetrtn\n"
538 " incl %%eax\n"
539 "mixrPlayChannelpsetrtn:\n"
540 " shll $5, %%eax\n"
541 " addl $routtab, %%eax\n"
542 " movl %%eax, %5\n" /* %5 = routeptr*/
543
544 "mixrPlayChannelbigloop:\n"
545 " movl %2, %%ecx\n" /* %2 = len */
546 " movl %c13(%%edi), %%ebx\n" /* %13 = ch->step */
547 " movl %c14(%%edi), %%edx\n" /* %14 = ch->pos */
548 " movw %c15(%%edi), %%si\n" /* %15 = ch->fpos */
549 " movb $0, %9\n" /* %9 = inloop */
550 " cmpl $0, %%ebx\n"
551
552 " je mixrPlayChannelplayecx\n"
553 " jg mixrPlayChannelforward\n"
554 " negl %%ebx\n"
555 " movl %%edx, %%eax\n"
556 " testb %28, %c12(%%edi)\n" /* %28 = MIXRQ_LOOPED */
557 /* %12 = ch->status */
558 " jz mixrPlayChannelmaxplaylen\n"
559 " cmpl %c16(%%edi), %%edx\n" /* %16 = ch->loopstart */
560 " jb mixrPlayChannelmaxplaylen\n"
561 " subl %c16(%%edi), %%eax\n" /* %16 = ch->loopstart */
562 " movb $1, %9\n" /* %9 = inloop */
563 " jmp mixrPlayChannelmaxplaylen\n"
564 "mixrPlayChannelforward:\n"
565 " movl %c18(%%edi), %%eax\n" /* %18 = length */
566 " negw %%si\n"
567 " sbbl %%edx, %%eax\n"
568 " testb %28, %c12(%%edi)\n" /* %28 = MIXRQ_LOOPED */
569 /* %12 = ch->status */
570 " jz mixrPlayChannelmaxplaylen\n"
571 " cmpl %c17(%%edi), %%edx\n" /* %17 = ch->loopend */
572 " jae mixrPlayChannelmaxplaylen\n"
573 " subl %c18(%%edi), %%eax\n" /* %18 = ch->length */
574 " addl %c17(%%edi), %%eax\n" /* %17 = ch->loopend*/
575 " movb $1, %9\n" /* %9 = inloop */
576
577 "mixrPlayChannelmaxplaylen:\n"
578 " xorl %%edx, %%edx\n"
579 " shld $16, %%eax, %%edx\n"
580 " shll $16, %%esi\n"
581 " shld $16, %%esi, %%eax\n"
582 " addl %%ebx, %%eax\n"
583 " adcl $0, %%edx\n"
584 " subl $1, %%eax\n"
585 " sbbl $0, %%edx\n"
586 " cmpl %%ebx, %%edx\n"
587 " jae mixrPlayChannelplayecx\n"
588 " divl %%ebx\n"
589 " cmpl %%eax, %%ecx\n"
590 " jb mixrPlayChannelplayecx\n"
591 " movl %%eax, %%ecx\n"
592 " cmpb $0, %9\n" /* %9 = inloop */
593 " jnz mixrPlayChannelplayecx\n"
594 #if MIXRQ_PLAYING != 1
595 #error This line bellow depends on MIXRQ_PLAYING = 1
596 #endif
597 " andb $254, %c12(%%edi)\n" /* 254 = 255-MIXRQ_PLAYING */
598 /* %12 = ch->status */
599 " movl $1, %11\n" /* %11 = dofade */
600 " movl %2, %%eax\n" /* %2 = len */
601 " subl %%ecx, %%eax\n"
602 " addl %%eax, %6\n" /* %6 = filllen */
603 " movl %%ecx, %2\n" /* %2 = len */
604
605 "mixrPlayChannelplayecx:\n"
606 " movb $0, %10\n" /* %10 = ramploop */
607 " movl $0, %7\n" /* %7 = ramping[0] */
608 " movl $0, %8\n" /* %8 = ramping[1] */
609
610 " cmpl $0, %%ecx\n"
611 " je mixrPlayChannelnoplay\n"
612
613 " movl %c21(%%edi), %%edx\n" /* %21 = ch->dstvols[0] */
614 " subl %c19(%%edi), %%edx\n" /* %19 = ch->curvols[0] */
615 " je mixrPlayChannelnoramp0\n"
616 " jl mixrPlayChannelramp0down\n"
617 " movl $1, %7\n" /* %7 = ramping[0] */
618 " cmpl %%edx, %%ecx\n"
619 " jbe mixrPlayChannelnoramp0\n"
620 " movb $1, %10\n" /* %10 = ramploop */
621 " movl %%edx, %%ecx\n"
622 " jmp mixrPlayChannelnoramp0\n"
623 "mixrPlayChannelramp0down:\n"
624 " negl %%edx\n"
625 " movl $-1, %7\n" /* %7 = ramping[0] */
626 " cmpl %%edx, %%ecx\n"
627 " jbe mixrPlayChannelnoramp0\n"
628 " movb $1, %10\n" /* %10 = ramploop */
629 " movl %%edx, %%ecx\n"
630 "mixrPlayChannelnoramp0:\n"
631
632 " movl %c22(%%edi), %%edx\n" /* %22 = ch->dstvols[1] */
633 " subl %c20(%%edi), %%edx\n" /* %20 = ch->curvols[1] */
634 " je mixrPlayChannelnoramp1\n"
635 " jl mixrPlayChannelramp1down\n"
636 " movl $1, %8\n" /* %8 = ramping[4] */
637 " cmpl %%edx, %%ecx\n"
638 " jbe mixrPlayChannelnoramp1\n"
639 " movb $1, %10\n" /* %10 = ramploop */
640 " movl %%edx, %%ecx\n"
641 " jmp mixrPlayChannelnoramp1\n"
642 "mixrPlayChannelramp1down:\n"
643 " negl %%edx\n"
644 " movl $-1, %8\n" /* %8 = ramping[1] */
645 " cmpl %%edx, %%ecx\n"
646 " jbe mixrPlayChannelnoramp1\n"
647 " movb $1, %10\n" /* %10 = ramploop */
648 " movl %%edx, %%ecx\n"
649 "mixrPlayChannelnoramp1:\n"
650
651 " movl %5, %%edx\n" /* %5 = routptr */
652 " cmpl $0, %7\n" /* %7 = ramping[0] */
653 " jne mixrPlayChannelnotquiet\n"
654 " cmpl $0, %8\n" /* %8 = ramping[1] */
655 " jne mixrPlayChannelnotquiet\n"
656 " cmpl $0, %c19(%%edi)\n" /* %19 = ch->curvols[0] */
657 " jne mixrPlayChannelnotquiet\n"
658 " cmpl $0, %c20(%%edi)\n" /* %20 = ch->curvols[1] */
659 " jne mixrPlayChannelnotquiet\n"
660 " movl $routq, %%edx\n"
661
662 "mixrPlayChannelnotquiet:\n"
663 " movl 4(%%edx), %%ebx\n"
664 " movl %c13(%%edi), %%eax\n" /* %13 = ch->step */
665 " shll $16, %%eax\n"
666 " movl %%eax, (%%ebx)\n"
667 " movl 8(%%edx), %%ebx\n"
668 " movl %c13(%%edi), %%eax\n" /* %13 = ch->step */
669 " sarl $16, %%eax\n"
670 " movl %%eax, (%%ebx)\n"
671 " movl 12(%%edx), %%ebx\n"
672 " movl %7, %%eax\n" /* %7 = ramping[0] */
673 " shll $8, %%eax\n"
674 " movl %%eax, (%%ebx)\n"
675 " movl 16(%%edx), %%ebx\n"
676 " movl %8, %%eax\n" /* %8 = ramping[1] */
677 " shll $8, %%eax\n"
678 " movl %%eax, (%%ebx)\n"
679 " movl 20(%%edx), %%ebx\n"
680 " leal (,%%ecx,4), %%eax\n"
681 " cmpl $0, %4\n" /* %4 = stereo */
682 " je mixrPlayChannelm1\n"
683 " shll $1, %%eax\n"
684 "mixrPlayChannelm1:\n"
685 " addl %0, %%eax\n" /* %0 = buf */
686 " movl %%eax, (%%ebx)\n"
687 " pushl %%ecx\n"
688 " movl (%%edx), %%eax\n"
689
690 " movl %c19(%%edi), %%ebx\n" /* %19 = ch->curvols[0] */
691 " shll $8, %%ebx\n"
692 " movl %c20(%%edi), %%ecx\n" /* %20 = ch->curvols[1] */
693 " shll $8, %%ecx\n"
694 " movw %c15(%%edi), %%dx\n" /* %15 = ch->fpos */
695 " shll $16, %%edx\n"
696 " movl %c14(%%edi), %%esi\n" /* %14 = ch->chpos */
697 " addl %c23(%%edi), %%esi\n" /* %23 = ch->samp */
698 " movl %0, %%edi\n" /* %0 = buf */
699
700 " call *%%eax\n"
701
702 " popl %%ecx\n"
703 " movl %3, %%edi\n" /* %3 = chan */
704
705 "mixrPlayChannelnoplay:\n"
706 " movl %%ecx, %%eax\n"
707 " shll $2, %%eax\n"
708 " cmpl $0, %4\n" /* %4 = stereo */
709 " je mixrPlayChannelm2\n"
710 " shll $1, %%eax\n"
711 "mixrPlayChannelm2:\n"
712 " addl %%eax, %0\n" /* %0 = buf */
713 " subl %%ecx, %2\n" /* %2 = len */
714
715 " movl %c13(%%edi), %%eax\n" /* %13 = ch->step */
716 " imul %%ecx\n"
717 " shld $16, %%eax, %%edx\n"
718 " addw %%ax, %c15(%%edi)\n" /* %15 = ch->fpos */
719 " adcl %%edx, %c14(%%edi)\n" /* %14 = ch->pos */
720
721 " movl %7, %%eax\n" /* %7 = ramping[0] */
722 " imul %%ecx, %%eax\n"
723 " addl %%eax, %c19(%%edi)\n" /* %19 = ch->curvols[0] */
724 " movl %8, %%eax\n" /* %8 = ramping[1] */
725 " imul %%ecx, %%eax\n"
726 " addl %%eax, %c20(%%edi)\n" /* %20 = ch->curvols[1] */
727
728 " cmpb $0, %10\n" /* %10 = ramploop */
729 " jnz mixrPlayChannelbigloop\n"
730
731 " cmpb $0, %9\n" /* %9 = inloop */
732 " jz mixrPlayChannelfill\n"
733
734 " movl %c14(%%edi), %%eax\n" /* %14 = ch->pos */
735 " cmpl $0, %c13(%%edi)\n" /* %13 = ch->step */
736 " jge mixrPlayChannelforward2\n"
737 " cmpl %c16(%%edi), %%eax\n" /* %16 = ch->loopstart */
738 " jge mixrPlayChannelexit\n"
739 " testb %29, %c12(%%edi)\n" /* %29 = MIXRQ_PINGPONGLOOP */
740 /* %12 = ch->status */
741 " jnz mixrPlayChannelpong\n"
742 " addl %c24(%%edi), %%eax\n" /* %24 = ch->replen */
743 " jmp mixrPlayChannelloopiflen\n"
744 "mixrPlayChannelpong:\n"
745 " negl %c13(%%edi)\n" /* %13 = ch->step */
746 " negw %c15(%%edi)\n" /* %15 = ch->fpos */
747 " adcl $0, %%eax\n"
748 " negl %%eax\n"
749 " addl %c16(%%edi), %%eax\n" /* %16 = ch->loopstart */
750 " addl %c16(%%edi), %%eax\n" /* %16 = ch->loopstart */
751 " jmp mixrPlayChannelloopiflen\n"
752 "mixrPlayChannelforward2:\n"
753 " cmpl %c17(%%edi), %%eax\n" /* %17 = ch->loopend */
754 " jb mixrPlayChannelexit\n"
755 " testb %29, %c12(%%edi)\n" /* %29 = MIXRQ_PINGPONGLOOP */
756 /* %12 = ch->status */
757 " jnz mixrPlayChannelping\n"
758 " subl %c24(%%edi), %%eax\n" /* %24 = ch->replen */
759 " jmp mixrPlayChannelloopiflen\n"
760 "mixrPlayChannelping:\n"
761 " negl %c13(%%edi)\n" /* %13 = ch->step */
762 " negw %c15(%%edi)\n" /* %15 = ch->fpos */
763 " adcl $0, %%eax\n"
764 " negl %%eax\n"
765 " addl %c17(%%edi), %%eax\n" /* %17 = ch->loopend */
766 " addl %c17(%%edi), %%eax\n" /* %17 = ch->loopend */
767
768 "mixrPlayChannelloopiflen:\n"
769 " movl %%eax, %c14(%%edi)\n" /* %14 = ch->pos */
770 " cmpl $0, %2\n" /* %2 = len */
771 " jne mixrPlayChannelbigloop\n"
772 " jmp mixrPlayChannelexit\n"
773
774 "mixrPlayChannelfill:\n"
775 " cmpl $0, %6\n" /* %6 = filllen */
776 " je mixrPlayChannelfadechk\n"
777 " movl %c18(%%edi), %%eax\n" /* %18 = ch->length */
778 " movl %%eax, %c14(%%edi)\n" /* %14 = ch->pos */
779 " addl %c23(%%edi), %%eax\n" /* %23 = ch->samp */
780 " movl %c19(%%edi), %%ebx\n" /* %19 = ch->curvols[0] */
781 " movl %c20(%%edi), %%ecx\n" /* %20 = ch->curvols[1] */
782 " shll $8, %%ebx\n"
783 " shll $8, %%ecx\n"
784 " testb %26, %c12(%%edi)\n" /* %26 = MIXRQ_PLAY16BIT */
785 /* %12 = ch->status */
786 " jnz mixrPlayChannelfill16\n"
787 " movb (%%eax), %%bl\n"
788 " jmp mixrPlayChannelfilldo\n"
789 "mixrPlayChannelfill16:\n"
790 " movb 1(%%eax, %%eax), %%bl\n"
791 "mixrPlayChannelfilldo:\n"
792 " movb %%bl, %%cl\n"
793 " movl 1234(,%%ebx,4), %%ebx\n"
794 "mixrPlayChannelvoltab1:\n"
795 " movl 1234(,%%ecx,4), %%ecx\n"
796 "mixrPlayChannelvoltab2:\n"
797 " movl %6, %%eax\n" /* %6 = filllen */
798 " movl %0, %%edi\n" /* %0 = buf */
799 " cmpl $0, %4\n" /* %4 = stereo */
800 " jne mixrPlayChannelfillstereo\n"
801 "mixrPlayChannelfillmono:\n"
802 " addl %%ebx,(%%edi)\n"
803 " addl $4, %%edi\n"
804 " decl %%eax\n"
805 " jnz mixrPlayChannelfillmono\n"
806 " jmp mixrPlayChannelfade\n"
807 "mixrPlayChannelfillstereo:\n"
808 " addl %%ebx, (%%edi)\n"
809 " addl %%ecx, 4(%%edi)\n"
810 " addl $8, %%edi\n"
811 " decl %%eax\n"
812 " jnz mixrPlayChannelfillstereo\n"
813 " jmp mixrPlayChannelfade\n"
814
815 "mixrPlayChannelfadechk:\n"
816 " cmpl $0, %11\n" /* %11 = dofade */
817 " je mixrPlayChannelexit\n"
818 "mixrPlayChannelfade:\n"
819 " movl %3, %%edi\n" /* %3 = chan */
820 " movl %1, %%esi\n" /* %1 = fadebuf */
821 " call mixrFadeChannel_\n"
822 " jmp mixrPlayChannelexit\n"
823
824 "setupplay:\n"
825 " movl %%eax, (mixrPlayChannelvoltab1-4)\n"
826 " movl %%eax, (mixrPlayChannelvoltab2-4)\n"
827 " ret\n"
828
829 "mixrPlayChannelexit:\n"
830 #ifdef __PIC__
831 "popl %%ebx\n"
832 #endif
833 :
834 : "m" (buf), /* 0 */
835 "m" (fadebuf), /* 1 */
836 "m" (len), /* 2 */
837 "m" (chan), /* 3 */
838 "m" (stereo), /* 4 */
839 "m" (routptr), /* 5 */
840 "m" (filllen), /* 6 */
841 "m" (ramping[0]), /* 7 */
842 "m" (ramping[1]), /* 8 */
843 "m" (inloop), /* 9 */
844 "m" (ramploop), /* 10 */
845 "m" (dofade), /* 11 */
846 "n" (offsetof(struct channel, status)), /* 12 */
847 "n" (offsetof(struct channel, step)), /* 13 */
848 "n" (offsetof(struct channel, pos)), /* 14 */
849 "n" (offsetof(struct channel, fpos)), /* 15 */
850 "n" (offsetof(struct channel, loopstart)), /* 16 */
851 "n" (offsetof(struct channel, loopend)), /* 17 */
852 "n" (offsetof(struct channel, length)), /* 18 */
853 "n" (offsetof(struct channel, curvols[0])), /* 19 */
854 "n" (offsetof(struct channel, curvols[1])), /* 20 */
855 "n" (offsetof(struct channel, dstvols[0])), /* 21 */
856 "n" (offsetof(struct channel, dstvols[1])), /* 22 */
857 "n" (offsetof(struct channel, samp)), /* 23 */
858 "n" (offsetof(struct channel, replen)), /* 24 */
859 "n" (MIXRQ_PLAYING), /* 25 */
860 "n" (MIXRQ_PLAY16BIT), /* 26 */
861 "n" (MIXRQ_INTERPOLATE), /* 27 */
862 "n" (MIXRQ_LOOPED), /* 28 */
863 "n" (MIXRQ_PINGPONGLOOP) /* 29 */
864 #ifdef __PIC__
865 : "memory", "eax", "ecx", "edx", "edi", "esi"
866 #else
867 : "memory", "eax", "ebx", "ecx", "edx", "edi", "esi"
868 #endif
869 );
870 }
871
mixrSetupAddresses(int32_t (* vol)[256],uint8_t (* intr)[256][2])872 void mixrSetupAddresses(int32_t (*vol)[256], uint8_t (*intr)[256][2])
873 {
874 __asm__ __volatile__
875 (
876 #ifdef __PIC__
877 "pushl %%ebx\n"
878 "movl %%ecx, %%ebx\n"
879 #endif
880 " call setupfade\n"
881 " call setupplay\n"
882 " call setupmono\n"
883 " call setupmono16\n"
884 " call setupmonoi\n"
885 " call setupmonoi16\n"
886 " call setupstereo\n"
887 " call setupstereo16\n"
888 " call setupstereoi\n"
889 " call setupstereoi16\n"
890 #ifdef __PIC__
891 "popl %%ebx\n"
892 #endif
893 :
894 : "a" (vol),
895 #ifdef __PIC__
896 "c" (intr)
897 #else
898 "b" (intr)
899 #endif
900 /* no registers should change, and .data/.bss is not touched */
901 );
902 }
903
mixrFade(int32_t * buf,int32_t * fade,int len,int stereo)904 void mixrFade(int32_t *buf, int32_t *fade, int len, int stereo)
905 {
906 int d0, d1, d2;
907 __asm__ __volatile__
908 (
909 #ifdef __PIC__
910 "pushl %%ebx\n"
911 #endif
912 " movl (%%esi), %%eax\n"
913 " movl 4(%%esi), %%ebx\n"
914 " cmpl $0, %%edx\n"
915 " jnz mixrFadestereo\n"
916 "mixrFadelpm:\n"
917 " movl %%eax, (%%edi)\n"
918 " movl %%eax, %%edx\n"
919 " shll $7, %%eax\n"
920 " subl %%edx, %%eax\n"
921 " sarl $7, %%eax\n"
922 " addl $4, %%edi\n"
923 " decl %%ecx\n"
924 " jnz mixrFadelpm\n"
925 " jmp mixrFadedone\n"
926 "mixrFadestereo:\n"
927 "mixrFadelps:\n"
928 " movl %%eax, (%%edi)\n"
929 " movl %%ebx, 4(%%edi)\n"
930 " movl %%eax, %%edx\n"
931 " shll $7, %%eax\n"
932 " subl %%edx, %%eax\n"
933 " sarl $7, %%eax\n"
934 " movl %%ebx, %%edx\n"
935 " shll $7, %%ebx\n"
936 " subl %%edx, %%ebx\n"
937 " sarl $7, %%ebx\n"
938 " addl $8, %%edi\n"
939 " decl %%ecx\n"
940 " jnz mixrFadelps\n"
941 "mixrFadedone:\n"
942 " movl %%eax, (%%esi)\n"
943 " movl %%ebx, 4(%%esi)\n"
944 #ifdef __PIC__
945 "popl %%ebx\n"
946 #endif
947 : "=&D"(d0),
948 "=&c"(d1),
949 "=&d"(d2)
950 : "S" (fade),
951 "0" (buf),
952 "1" (len),
953 "2" (stereo)
954 #ifdef __PIC__
955 : "memory", "eax"
956 #else
957 : "memory", "eax", "ebx"
958 #endif
959 );
960 }
961
962 /******************************************************************************/
nonepublic_dwmixa2(void)963 void nonepublic_dwmixa2(void)
964 {
965 __asm__ __volatile__
966 (
967 ".cfi_endproc\n"
968
969 ".type mixrClip8_, @function\n"
970 "mixrClip8_:\n"
971 ".cfi_startproc\n"
972
973 " movl %ebx, (mixrClip8amp1-4)\n"
974 " addl $512, %ebx\n"
975 " movl %ebx, (mixrClip8amp2-4)\n"
976 " addl $512, %ebx\n"
977 " movl %ebx, (mixrClip8amp3-4)\n"
978 " subl $1024, %ebx\n"
979 " movl %edx, (mixrClip8max-4)\n"
980 " negl %edx\n"
981 " movl %edx, (mixrClip8min-4)\n"
982
983 " xorl %edx, %edx\n"
984 " movb (mixrClip8min-4), %dl\n"
985 " movl (%ebx, %edx, 2), %eax\n"
986 " movb (mixrClip8min-3), %dl\n"
987 " addl 512(%ebx, %edx, 2), %eax\n"
988 " movb (mixrClip8min-2), %dl\n"
989 " addl 1024(%ebx, %edx, 2), %eax\n"
990 " movb %ah, (mixrClip8minv-1)\n"
991 " movb (mixrClip8max-4), %dl\n"
992 " movl (%ebx, %edx, 2), %eax\n"
993 " movb (mixrClip8max-3), %dl\n"
994 " addl 512(%ebx, %edx, 2), %eax\n"
995 " movb (mixrClip8max-2), %dl\n"
996 " addl 1024(%ebx, %edx, 2), %eax\n"
997 " movb %ah, (mixrClip8maxv-1)\n"
998 " leal (%ecx, %edi), %ecx\n"
999 " movl %ecx, (mixrClip8endp1-4)\n"
1000 " movl %ecx, (mixrClip8endp2-4)\n"
1001 " movl %ecx, (mixrClip8endp3-4)\n"
1002 " xorl %ebx, %ebx\n"
1003 " xorl %ecx, %ecx\n"
1004 " xorl %edx, %edx\n"
1005
1006 "mixrClip8lp:\n"
1007 " cmpl $1234, (%esi)\n"
1008 " mixrClip8min:\n"
1009 " jl mixrClip8low\n"
1010 " cmpl $1234, (%esi)\n"
1011 " mixrClip8max:\n"
1012 " jg mixrClip8high\n"
1013
1014 " movb (%esi), %bl\n"
1015 " movb 1(%esi), %cl\n"
1016 " movb 2(%esi), %dl\n"
1017 " movl 1234(,%ebx,2), %eax\n"
1018 " mixrClip8amp1:\n"
1019 " addl 1234(,%ecx,2), %eax\n"
1020 " mixrClip8amp2:\n"
1021 " addl 1234(,%edx,2), %eax\n"
1022 " mixrClip8amp3:\n"
1023 " movb %ah, (%edi)\n"
1024 " incl %edi\n"
1025 " addl $4, %esi\n"
1026 " cmpl $1234, %edi\n"
1027 "mixrClip8endp1:\n"
1028 " jb mixrClip8lp\n"
1029 "mixrClip8done:\n"
1030 " jmp mixrClip8out\n"
1031
1032 "mixrClip8low:\n"
1033 " movb $12, (%edi)\n"
1034 " mixrClip8minv:\n"
1035 " incl %edi\n"
1036 " addl $4, %esi\n"
1037 " cmpl $1234, %edi\n"
1038 "mixrClip8endp2:\n"
1039 " jb mixrClip8lp\n"
1040 " jmp mixrClip8done\n"
1041
1042 "mixrClip8high:\n"
1043 " movb $12, (%edi)\n"
1044 " mixrClip8maxv:\n"
1045 " incl %edi\n"
1046 " addl $4, %esi\n"
1047 " cmpl $1234, %edi\n"
1048 "mixrClip8endp3:\n"
1049 " jb mixrClip8lp\n"
1050 " jmp mixrClip8done\n"
1051
1052 ".cfi_endproc\n"
1053 ".size mixrClip8_, .-mixrClip8_\n"
1054
1055 ".cfi_startproc\n"
1056 );
1057 }
1058
mixrClip(void * dst,int32_t * src,int len,void * tab,int32_t max,int b16)1059 void mixrClip(void *dst, int32_t *src, int len, void *tab, int32_t max, int b16)
1060 {
1061 int d0, d1, d2, d3, d4, d5;
1062 #ifdef __PIC__
1063 d2=(int)tab;
1064 #endif
1065 __asm__ __volatile__
1066 (
1067 #ifdef __PIC__
1068 "pushl %%ebx\n"
1069 "movl %10, %%ebx\n"
1070 #endif
1071 " cmpl $0, %%eax\n"
1072 " je mixrClip8_\n"
1073
1074 " movl %%ebx, (mixrClipamp1-4)\n"
1075 " addl $512, %%ebx\n"
1076 " movl %%ebx, (mixrClipamp2-4)\n"
1077 " addl $512, %%ebx\n"
1078 " movl %%ebx, (mixrClipamp3-4)\n"
1079 " subl $1024, %%ebx\n"
1080 " movl %%edx, (mixrClipmax-4)\n"
1081 " negl %%edx\n"
1082 " movl %%edx, (mixrClipmin-4)\n"
1083
1084 " xorl %%edx, %%edx\n"
1085 " movb (mixrClipmin-4), %%dl\n"
1086 " movl (%%ebx, %%edx, 2), %%eax\n"
1087 " movb (mixrClipmin-3), %%dl\n"
1088 " addl 512(%%ebx, %%edx, 2), %%eax\n"
1089 " movb (mixrClipmin-2), %%dl\n"
1090 " addl 1024(%%ebx, %%edx, 2), %%eax\n"
1091 " movw %%ax, (mixrClipminv-2)\n"
1092 " movb (mixrClipmax-4), %%dl\n"
1093 " movl (%%ebx, %%edx, 2), %%eax\n"
1094 " movb (mixrClipmax-3), %%dl\n"
1095 " addl 512(%%ebx, %%edx, 2), %%eax\n"
1096 " movb (mixrClipmax-2), %%dl\n"
1097 " addl 1024(%%ebx, %%edx, 2), %%eax\n"
1098 " movw %%ax, (mixrClipmaxv-2)\n"
1099 " leal (%%edi, %%ecx, 2), %%ecx\n"
1100 " movl %%ecx, (mixrClipendp1-4)\n"
1101 " movl %%ecx, (mixrClipendp2-4)\n"
1102 " movl %%ecx, (mixrClipendp3-4)\n"
1103 " xorl %%ebx, %%ebx\n"
1104 " xorl %%ecx, %%ecx\n"
1105 " xorl %%edx, %%edx\n"
1106
1107 "mixrCliplp:\n"
1108 " cmpl $1234, (%%esi)\n"
1109 " mixrClipmin:\n"
1110 " jl mixrCliplow\n"
1111 " cmpl $1234, (%%esi)\n"
1112 " mixrClipmax:\n"
1113 " jg mixrCliphigh\n"
1114
1115 " movb (%%esi), %%bl\n"
1116 " movb 1(%%esi), %%cl\n"
1117 " movb 2(%%esi), %%dl\n"
1118 " movl 1234(,%%ebx,2), %%eax\n"
1119 " mixrClipamp1:\n"
1120 " addl 1234(,%%ecx,2), %%eax\n"
1121 " mixrClipamp2:\n"
1122 " addl 1234(,%%edx,2), %%eax\n"
1123 " mixrClipamp3:\n"
1124 " movw %%ax, (%%edi)\n"
1125 " addl $2, %%edi\n"
1126 " addl $4, %%esi\n"
1127 " cmpl $1234, %%edi\n"
1128 " mixrClipendp1:\n"
1129 " jb mixrCliplp\n"
1130 " jmp mixrClipdone\n"
1131
1132 "mixrCliplow:\n"
1133 " movw $1234, (%%edi)\n"
1134 " mixrClipminv:\n"
1135 " addl $2, %%edi\n"
1136 " addl $4, %%esi\n"
1137 " cmpl $1234, %%edi\n"
1138 " mixrClipendp2:\n"
1139 " jb mixrCliplp\n"
1140 " jmp mixrClipdone\n"
1141 "mixrCliphigh:\n"
1142 " movw $1234, (%%edi)\n"
1143 " mixrClipmaxv:\n"
1144 " addl $2, %%edi\n"
1145 " addl $4, %%esi\n"
1146 " cmpl $1234, %%edi\n"
1147 " mixrClipendp3:\n"
1148 " jb mixrCliplp\n"
1149 /* jmp mixrClipdone\n" */
1150 "mixrClipdone:"
1151 "mixrClip8out:"
1152 #ifdef __PIC__
1153 "popl %%ebx\n"
1154 #endif
1155 : "=&S" (d0),
1156 "=&D" (d1),
1157 "=&c" (d3),
1158 "=&d" (d4),
1159 #ifdef __PIC__
1160 "=&a" (d5)
1161 #else
1162 "=&a" (d5),
1163 "=&b" (d2)
1164 #endif
1165 : "0" (src),
1166 "1" (dst),
1167 "2" (len),
1168 "3" (max),
1169 "4" (b16),
1170 #ifdef __PIC__
1171 "m" (tab)
1172 #else
1173 "5" (tab)
1174 #endif
1175 : "memory"
1176 );
1177 }
1178
remap_range1_stop(void)1179 void remap_range1_stop(void){}
1180
1181