1 /* $Id: scalea.h,v 1.3 2002-07-17 21:34:56 bradleyb Exp $ */
2 extern char scale_trans_color;
3 extern int scale_error_term;
4 extern int scale_initial_pixel_count;
5 extern int scale_adj_up;
6 extern int scale_adj_down;
7 extern int scale_final_pixel_count;
8 extern int scale_ydelta_minus_1;
9 extern int scale_whole_step;
10 extern ubyte * scale_source_ptr;
11 extern ubyte * scale_dest_ptr;
12 extern void rls_stretch_scanline_asm();
13 extern void scale_do_cc_scanline();
14 extern void rls_do_cc_setup_asm();
17 void rep_stosb(char *ScreenPtr, int RunLength, int Color);
18 #pragma aux rep_stosb = \
20 parm [EDI] [ECX] [EAX]\
23 // esi, edi = source, dest
28 void scale_row_asm_transparent( ubyte * sbits, ubyte * dbits, int width, fix u, fix du );
29 #pragma aux scale_row_asm_transparent parm [esi] [edi] [ecx] [ebx] [edx] modify exact [edi eax ebx ecx] = \
30 "newpixel: mov eax, ebx " \
32 " mov al, [esi+eax] " \
36 "skip_it: add ebx, edx " \
41 void scale_row_asm( ubyte * sbits, ubyte * dbits, int width, fix u, fix du );
42 #pragma aux scale_row_asm parm [esi] [edi] [ecx] [ebx] [edx] modify exact [edi eax ebx ecx] = \
43 "newpixel1: mov eax, ebx " \
45 " mov al, [esi+eax] " \
53 void rep_movsb( ubyte * sbits, ubyte * dbits, int width );
54 #pragma aux rep_movsb parm [esi] [edi] [ecx] modify exact [esi edi ecx] = \
58 static inline void rep_stosb(char *ScreenPtr, int RunLength, int Color) {
60 __asm__ __volatile__ ("cld; rep; stosb"
61 : "=c" (dummy[0]), "=D" (dummy[1]) : "1" (ScreenPtr), "0" (RunLength), "a" (Color) );
63 static inline void scale_row_asm_transparent( ubyte * sbits, ubyte * dbits, int width, fix u, fix du ) {
65 __asm__ __volatile__ (
66 "0: movl %%ebx, %%eax;"
68 " movb (%%esi, %%eax), %%al;"
71 " movb %%al, (%%edi);"
72 "1: addl %%edx, %%ebx;"
76 : "=c" (dummy[0]), "=b" (dummy[1]), "=D" (dummy[2])
77 : "S" (sbits), "2" (dbits), "0" (width), "1" (u), "d" (du)
81 static inline void scale_row_asm( ubyte * sbits, ubyte * dbits, int width, fix u, fix du ) {
82 __asm__ __volatile__ (
83 "0: movl %%ebx,%%eax;"
85 " movb (%%esi, %%eax), %%al;"
87 " movb %%al, (%%edi);"
91 : : "S" (sbits), "D" (dbits), "c" (width), "b" (u), "d" (du)
92 : "%eax", "%ebx", "%ecx", "%edi");
95 static inline void rep_movsb( ubyte * sbits, ubyte * dbits, int width ) {
96 __asm__ __volatile__ ("cld; rep; movsb"
97 : : "S" (sbits), "D" (dbits), "c" (width) : "%ecx", "%esi", "%edi");