Difference for 2d/linear.h from version 1.1 to 1.2


version 1.1 version 1.2
Line 170
 
Line 170
 #elif defined __GNUC__  #elif defined __GNUC__
 // This code aligns edi so that the destination is aligned to a dword boundry before rep movsd  // This code aligns edi so that the destination is aligned to a dword boundry before rep movsd
 inline void gr_linear_movsd(ubyte * src, ubyte * dest, unsigned int num_pixels ) {  inline void gr_linear_movsd(ubyte * src, ubyte * dest, unsigned int num_pixels ) {
    int dummy[3];
  __asm__ __volatile__ (   __asm__ __volatile__ (
 " cld;"  " cld;"
 " movl      %%ecx, %%ebx;"  " movl      %%ecx, %%ebx;"
Line 187
 
Line 188
 " movl      %%ebx, %%ecx;"  " movl      %%ebx, %%ecx;"
 " andl      $3, %%ecx;"  " andl      $3, %%ecx;"
 " rep;      movsb"  " rep;      movsb"
  : : "S" (src), "D" (dest), "c" (num_pixels)   : "=S" (dummy[0]), "=D" (dummy[1]), "=c" (dummy[2])
  : "%eax", "%ebx", "%ecx", "%esi", "%edi");   : "0" (src), "1" (dest), "2" (num_pixels)
    : "%eax", "%ebx");
 }  }
   
 static inline void gr_linear_rep_movsdm(void * src, void * dest, unsigned int num_pixels ) {  static inline void gr_linear_rep_movsdm(void * src, void * dest, unsigned int num_pixels ) {
    int dummy[3];
  __asm__ __volatile__ (   __asm__ __volatile__ (
 "0: ;"  "0: ;"
 " movb  (%%esi), %%al;"  " movb  (%%esi), %%al;"
Line 203
 
Line 206
 " incl  %%edi;"  " incl  %%edi;"
 " decl  %%ecx;"  " decl  %%ecx;"
 " jne   0b"  " jne   0b"
  : : "S" (src), "D" (dest), "c" (num_pixels)   : "=S" (dummy[0]), "=D" (dummy[1]), "=c" (dummy[2])
  : "%eax", "%ecx", "%esi", "%edi");   : "0" (src), "1" (dest), "2" (num_pixels)
    : "%eax");
 }  }
   
 /* #pragma aux gr_linear_rep_movsdm_faded parm [esi] [edi] [ecx] [ebx] modify exact [ecx esi edi eax ebx] */  /* #pragma aux gr_linear_rep_movsdm_faded parm [esi] [edi] [ecx] [ebx] modify exact [ecx esi edi eax ebx] */
 static inline void gr_linear_rep_movsdm_faded(void * src, void * dest, unsigned int num_pixels, ubyte fade_value ) {  static inline void gr_linear_rep_movsdm_faded(void * src, void * dest, unsigned int num_pixels, ubyte fade_value ) {
    int dummy[4];
  __asm__ __volatile__ (   __asm__ __volatile__ (
 "  xorl   %%eax, %%eax;"  "  xorl   %%eax, %%eax;"
 "  movb   %%bl, %%ah;"  "  movb   %%bl, %%ah;"
Line 227
 
Line 232
 "  incl   %%edi;"  "  incl   %%edi;"
 "  decl   %%ecx;"  "  decl   %%ecx;"
 "  jne    0b"  "  jne    0b"
  : : "S" (src), "D" (dest), "c" (num_pixels), "b" (fade_value)   : "=S" (dummy[0]), "=D" (dummy[1]), "=c" (dummy[2]), "=b" (dummy[3])
  : "%eax", "%ecx", "%esi", "%edi");   : "0" (src), "1" (dest), "2" (num_pixels), "3" (fade_value)
    : "%eax");
 }  }
   
 inline void gr_linear_rep_movsd_2x(ubyte * src, ubyte * dest, unsigned int num_dest_pixels ) {  inline void gr_linear_rep_movsd_2x(ubyte * src, ubyte * dest, unsigned int num_dest_pixels ) {
 /* #pragma aux gr_linear_rep_movsd_2x parm [esi] [edi] [ecx] modify exact [ecx esi edi eax ebx] */  /* #pragma aux gr_linear_rep_movsd_2x parm [esi] [edi] [ecx] modify exact [ecx esi edi eax ebx] */
    int dummy[3];
  __asm__ __volatile__ (   __asm__ __volatile__ (
     "shrl   $1, %%ecx;"      "shrl   $1, %%ecx;"
     "jnc    0f;"      "jnc    0f;"
Line 252
 
Line 259
     "decl   %%ecx;"      "decl   %%ecx;"
     "jne    0b;"      "jne    0b;"
 "1:"  "1:"
  : : "S" (src), "D" (dest), "c" (num_dest_pixels)   : "=S" (dummy[0]), "=D" (dummy[1]), "=c" (dummy[2])
  :      "%eax", "%ecx", "%esi", "%edi");   : "0" (src), "1" (dest), "2" (num_dest_pixels)
    :      "%eax");
 }  }
   
 static inline void modex_copy_column(ubyte * src, ubyte * dest, int num_pixels, int src_rowsize, int dest_rowsize ) {  static inline void modex_copy_column(ubyte * src, ubyte * dest, int num_pixels, int src_rowsize, int dest_rowsize ) {

Legend:
line(s) removed in v.1.1 
line(s) changed
 line(s) added in v.1.2