version 1.2 | | version 1.3 |
---|
| | |
| | |
static inline void modex_copy_column_m(ubyte * src, ubyte * dest, int num_pixels, int src_rowsize, int dest_rowsize ) { | | static inline void modex_copy_column_m(ubyte * src, ubyte * dest, int num_pixels, int src_rowsize, int dest_rowsize ) { |
/* #pragma aux modex_copy_column_m parm [esi] [edi] [ecx] [ebx] [edx] modify exact [ecx esi edi] = */ | | /* #pragma aux modex_copy_column_m parm [esi] [edi] [ecx] [ebx] [edx] modify exact [ecx esi edi] = */ |
| | int dummy[3]; |
__asm__ __volatile__ ( | | __asm__ __volatile__ ( |
"0: ;" | | "0: ;" |
"movb (%%esi), %%al;" | | "movb (%%esi), %%al;" |
| | |
"addl %%edx, %%edi;" | | "addl %%edx, %%edi;" |
"decl %%ecx;" | | "decl %%ecx;" |
"jne 0b" | | "jne 0b" |
: : "S" (src), "D" (dest), "c" (num_pixels), "b" (src_rowsize), "d" (dest_rowsize) | | : "=c" (dummy[0]), "=S" (dummy[1]), "=D" (dummy[2]) |
: "%eax", "%ecx", "%esi", "%edi"); | | : "1" (src), "2" (dest), "0" (num_pixels), "b" (src_rowsize), "d" (dest_rowsize) |
| | : "%eax" ); |
} | | } |
| | |
static inline void modex_copy_scanline( ubyte * src, ubyte * dest, int npixels ) { | | static inline void modex_copy_scanline( ubyte * src, ubyte * dest, int npixels ) { |
/* #pragma aux modex_copy_scanline parm [esi] [edi] [ecx] modify exact [ecx esi edi eax ebx edx] */ | | /* #pragma aux modex_copy_scanline parm [esi] [edi] [ecx] modify exact [ecx esi edi eax ebx edx] */ |
| | int dummy[3]; |
__asm__ __volatile__ ( | | __asm__ __volatile__ ( |
" movl %%ecx, %%ebx;" | | " movl %%ecx, %%ebx;" |
" andl $3, %%ebx;" | | " andl $3, %%ebx;" |
| | |
" decl %%ebx;" | | " decl %%ebx;" |
" jne 2b;" | | " jne 2b;" |
"3:" | | "3:" |
: : "S" (src), "D" (dest), "c" (npixels) | | : "=c" (dummy[0]), "=S" (dummy[1]), "=D" (dummy[2]) |
: "%eax", "%ebx", "%ecx", "%edx", "%esi", "%edi"); | | : "1" (src), "2" (dest), "0" (npixels) |
| | : "%eax", "%ebx", "%edx" ); |
} | | } |
| | |
static inline void modex_copy_scanline_2x( ubyte * src, ubyte * dest, int npixels ) { | | static inline void modex_copy_scanline_2x( ubyte * src, ubyte * dest, int npixels ) { |
/* #pragma aux modex_copy_scanline_2x parm [esi] [edi] [ecx] modify exact [ecx esi edi eax ebx edx] = */ | | /* #pragma aux modex_copy_scanline_2x parm [esi] [edi] [ecx] modify exact [ecx esi edi eax ebx edx] = */ |
| | int dummy[3]; |
__asm__ __volatile__ ( | | __asm__ __volatile__ ( |
" movl %%ecx, %%ebx;" | | " movl %%ecx, %%ebx;" |
" andl $3, %%ebx;" | | " andl $3, %%ebx;" |
| | |
" decl %%ebx;" | | " decl %%ebx;" |
" jne 2b;" | | " jne 2b;" |
"3:" | | "3:" |
: : "S" (src), "D" (dest), "c" (npixels) | | : "=c" (dummy[0]), "=S" (dummy[1]), "=D" (dummy[2]) |
: "%eax", "%ebx", "%ecx", "%edx", "%esi", "%edi"); | | : "1" (src), "2" (dest), "0" (npixels) |
| | : "%eax", "%ebx", "%edx" ); |
} | | } |
#elif defined _MSC_VER | | #elif defined _MSC_VER |
| | |