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) {
58 __asm__ __volatile__ ("cld; rep; stosb"
59 : : "D" (ScreenPtr), "c" (RunLength), "a" (Color) : "%ecx", "%edi");
61 static inline void scale_row_asm_transparent( ubyte * sbits, ubyte * dbits, int width, fix u, fix du ) {
62 __asm__ __volatile__ (
63 "0: movl %%ebx, %%eax;"
65 " movb (%%esi, %%eax), %%al;"
68 " movb %%al, (%%edi);"
69 "1: addl %%edx, %%ebx;"
73 : : "S" (sbits), "D" (dbits), "c" (width), "b" (u), "d" (du)
74 : "%eax", "%ebx", "%ecx", "%edi");
77 static inline void scale_row_asm( ubyte * sbits, ubyte * dbits, int width, fix u, fix du ) {
78 __asm__ __volatile__ (
79 "0: movl %%ebx,%%eax;"
81 " movb (%%esi, %%eax), %%al;"
83 " movb %%al, (%%edi);"
87 : : "S" (sbits), "D" (dbits), "c" (width), "b" (u), "d" (du)
88 : "%eax", "%ebx", "%ecx", "%edi");
91 static inline void rep_movsb( ubyte * sbits, ubyte * dbits, int width ) {
92 __asm__ __volatile__ ("cld; rep; movsb"
93 : : "S" (sbits), "D" (dbits), "c" (width) : "%ecx", "%esi", "%edi");