1 extern char scale_trans_color;
2 extern int scale_error_term;
3 extern int scale_initial_pixel_count;
4 extern int scale_adj_up;
5 extern int scale_adj_down;
6 extern int scale_final_pixel_count;
7 extern int scale_ydelta_minus_1;
8 extern int scale_whole_step;
9 extern ubyte * scale_source_ptr;
10 extern ubyte * scale_dest_ptr;
11 extern void rls_stretch_scanline_asm();
12 extern void scale_do_cc_scanline();
13 extern void rls_do_cc_setup_asm();
16 void rep_stosb(char *ScreenPtr, int RunLength, int Color);
17 #pragma aux rep_stosb = \
19 parm [EDI] [ECX] [EAX]\
22 // esi, edi = source, dest
27 void scale_row_asm_transparent( ubyte * sbits, ubyte * dbits, int width, fix u, fix du );
28 #pragma aux scale_row_asm_transparent parm [esi] [edi] [ecx] [ebx] [edx] modify exact [edi eax ebx ecx] = \
29 "newpixel: mov eax, ebx " \
31 " mov al, [esi+eax] " \
35 "skip_it: add ebx, edx " \
40 void scale_row_asm( ubyte * sbits, ubyte * dbits, int width, fix u, fix du );
41 #pragma aux scale_row_asm parm [esi] [edi] [ecx] [ebx] [edx] modify exact [edi eax ebx ecx] = \
42 "newpixel1: mov eax, ebx " \
44 " mov al, [esi+eax] " \
52 void rep_movsb( ubyte * sbits, ubyte * dbits, int width );
53 #pragma aux rep_movsb parm [esi] [edi] [ecx] modify exact [esi edi ecx] = \
57 static inline void rep_stosb(char *ScreenPtr, int RunLength, int Color) {
59 __asm__ __volatile__ ("cld; rep; stosb"
60 : "=c" (dummy[0]), "=D" (dummy[1]) : "1" (ScreenPtr), "0" (RunLength), "a" (Color) );
62 static inline void scale_row_asm_transparent( ubyte * sbits, ubyte * dbits, int width, fix u, fix du ) {
64 __asm__ __volatile__ (
65 "0: movl %%ebx, %%eax;"
67 " movb (%%esi, %%eax), %%al;"
70 " movb %%al, (%%edi);"
71 "1: addl %%edx, %%ebx;"
75 : "=c" (dummy[0]), "=b" (dummy[1]), "=D" (dummy[2])
76 : "S" (sbits), "2" (dbits), "0" (width), "1" (u), "d" (du)
80 static inline void scale_row_asm( ubyte * sbits, ubyte * dbits, int width, fix u, fix du ) {
81 __asm__ __volatile__ (
82 "0: movl %%ebx,%%eax;"
84 " movb (%%esi, %%eax), %%al;"
86 " movb %%al, (%%edi);"
90 : : "S" (sbits), "D" (dbits), "c" (width), "b" (u), "d" (du)
91 : "%eax", "%ebx", "%ecx", "%edi");
94 static inline void rep_movsb( ubyte * sbits, ubyte * dbits, int width ) {
95 __asm__ __volatile__ ("cld; rep; movsb"
96 : : "S" (sbits), "D" (dbits), "c" (width) : "%ecx", "%esi", "%edi");