⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pnggccrd.c

📁 神龙卡开发原代码
💻 C
📖 第 1 页 / 共 5 页
字号:
                  "decl      %%ecx            \n\t"                  "jnz       secondloop48     \n\t"                "end48:                       \n\t"                  "EMMS                       \n\t" // DONE                  : "=a" (dummy_value_a),           // output regs (dummy)                    "=d" (dummy_value_d),                    "=c" (dummy_value_c),                    "=S" (dummy_value_S),                    "=D" (dummy_value_D)                  : "3" (srcptr),      // esi       // input regs                    "4" (dstptr),      // edi                    "0" (diff),        // eax// was (unmask)     "b"    RESERVED    // ebx       // Global Offset Table idx                    "2" (len),         // ecx                    "1" (mask)         // edx#if 0  /* MMX regs (%mm0, etc.) not supported by gcc 2.7.2.3 or egcs 1.1 */                  : "%mm0", "%mm1", "%mm2", "%mm3"  // clobber list                  , "%mm4", "%mm5", "%mm6", "%mm7"#endif               );            }            else /* mmx _not supported - Use modified C routine */#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */            {               register png_uint_32 i;               png_uint_32 initial_val = BPP6 * png_pass_start[png_ptr->pass];                 /* png.c:  png_pass_start[] = {0, 4, 0, 2, 0, 1, 0}; */               register int stride = BPP6 * png_pass_inc[png_ptr->pass];                 /* png.c:  png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1}; */               register int rep_bytes = BPP6 * png_pass_width[png_ptr->pass];                 /* png.c:  png_pass_width[] = {8, 4, 4, 2, 2, 1, 1}; */               png_uint_32 len = png_ptr->width &~7;  /* reduce to mult. of 8 */               int diff = (int) (png_ptr->width & 7); /* amount lost */               register png_uint_32 final_val = BPP6 * len;   /* GRR bugfix */               srcptr = png_ptr->row_buf + 1 + initial_val;               dstptr = row + initial_val;               for (i = initial_val; i < final_val; i += stride)               {                  png_memcpy(dstptr, srcptr, rep_bytes);                  srcptr += stride;                  dstptr += stride;               }               if (diff)  /* number of leftover pixels:  3 for pngtest */               {                  final_val+=diff*BPP6;                  for (; i < final_val; i += stride)                  {                     if (rep_bytes > (int)(final_val-i))                        rep_bytes = (int)(final_val-i);                     png_memcpy(dstptr, srcptr, rep_bytes);                     srcptr += stride;                     dstptr += stride;                  }               }            } /* end of else (_mmx_supported) */            break;         }       /* end 48 bpp */         case 64:       /* png_ptr->row_info.pixel_depth */         {            png_bytep srcptr;            png_bytep dstptr;            register png_uint_32 i;            png_uint_32 initial_val = BPP8 * png_pass_start[png_ptr->pass];              /* png.c:  png_pass_start[] = {0, 4, 0, 2, 0, 1, 0}; */            register int stride = BPP8 * png_pass_inc[png_ptr->pass];              /* png.c:  png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1}; */            register int rep_bytes = BPP8 * png_pass_width[png_ptr->pass];              /* png.c:  png_pass_width[] = {8, 4, 4, 2, 2, 1, 1}; */            png_uint_32 len = png_ptr->width &~7;  /* reduce to mult. of 8 */            int diff = (int) (png_ptr->width & 7); /* amount lost */            register png_uint_32 final_val = BPP8 * len;   /* GRR bugfix */            srcptr = png_ptr->row_buf + 1 + initial_val;            dstptr = row + initial_val;            for (i = initial_val; i < final_val; i += stride)            {               png_memcpy(dstptr, srcptr, rep_bytes);               srcptr += stride;               dstptr += stride;            }            if (diff)  /* number of leftover pixels:  3 for pngtest */            {               final_val+=diff*BPP8;               for (; i < final_val; i += stride)               {                  if (rep_bytes > (int)(final_val-i))                     rep_bytes = (int)(final_val-i);                  png_memcpy(dstptr, srcptr, rep_bytes);                  srcptr += stride;                  dstptr += stride;               }            }            break;         }       /* end 64 bpp */         default: /* png_ptr->row_info.pixel_depth != 1,2,4,8,16,24,32,48,64 */         {            /* this should never happen */            fprintf(stderr,              "libpng internal error:  png_ptr->row_info.pixel_depth = %d\n",              png_ptr->row_info.pixel_depth);            fflush(stderr);            break;         }      } /* end switch (png_ptr->row_info.pixel_depth) */   } /* end if (non-trivial mask) */} /* end png_combine_row() */#endif /* PNG_HAVE_ASSEMBLER_COMBINE_ROW *//*===========================================================================*//*                                                                           *//*                 P N G _ D O _ R E A D _ I N T E R L A C E                 *//*                                                                           *//*===========================================================================*/#if defined(PNG_READ_INTERLACING_SUPPORTED)#if defined(PNG_HAVE_ASSEMBLER_READ_INTERLACE)/* png_do_read_interlace() is called after any 16-bit to 8-bit conversion * has taken place.  [GRR: what other steps come before and/or after?] */void /* PRIVATE */png_do_read_interlace(png_structp png_ptr){   png_row_infop row_info = &(png_ptr->row_info);   png_bytep row = png_ptr->row_buf + 1;   int pass = png_ptr->pass;#if defined(PNG_READ_PACKSWAP_SUPPORTED)   png_uint_32 transformations = png_ptr->transformations;#endif   png_debug(1, "in png_do_read_interlace (pnggccrd.c)\n");   if (_mmx_supported == 2) {       png_mmx_support();   }   if (row != NULL && row_info != NULL)   {      png_uint_32 final_width;      final_width = row_info->width * png_pass_inc[pass];      switch (row_info->pixel_depth)      {         case 1:         {            png_bytep sp, dp;            int sshift, dshift;            int s_start, s_end, s_inc;            png_byte v;            png_uint_32 i;            int j;            sp = row + (png_size_t)((row_info->width - 1) >> 3);            dp = row + (png_size_t)((final_width - 1) >> 3);#if defined(PNG_READ_PACKSWAP_SUPPORTED)            if (transformations & PNG_PACKSWAP)            {               sshift = (int)((row_info->width + 7) & 7);               dshift = (int)((final_width + 7) & 7);               s_start = 7;               s_end = 0;               s_inc = -1;            }            else#endif            {               sshift = 7 - (int)((row_info->width + 7) & 7);               dshift = 7 - (int)((final_width + 7) & 7);               s_start = 0;               s_end = 7;               s_inc = 1;            }            for (i = row_info->width; i; i--)            {               v = (png_byte)((*sp >> sshift) & 0x1);               for (j = 0; j < png_pass_inc[pass]; j++)               {                  *dp &= (png_byte)((0x7f7f >> (7 - dshift)) & 0xff);                  *dp |= (png_byte)(v << dshift);                  if (dshift == s_end)                  {                     dshift = s_start;                     dp--;                  }                  else                     dshift += s_inc;               }               if (sshift == s_end)               {                  sshift = s_start;                  sp--;               }               else                  sshift += s_inc;            }            break;         }         case 2:         {            png_bytep sp, dp;            int sshift, dshift;            int s_start, s_end, s_inc;            png_uint_32 i;            sp = row + (png_size_t)((row_info->width - 1) >> 2);            dp = row + (png_size_t)((final_width - 1) >> 2);#if defined(PNG_READ_PACKSWAP_SUPPORTED)            if (transformations & PNG_PACKSWAP)            {               sshift = (png_size_t)(((row_info->width + 3) & 3) << 1);               dshift = (png_size_t)(((final_width + 3) & 3) << 1);               s_start = 6;               s_end = 0;               s_inc = -2;            }            else#endif            {               sshift = (png_size_t)((3 - ((row_info->width + 3) & 3)) << 1);               dshift = (png_size_t)((3 - ((final_width + 3) & 3)) << 1);               s_start = 0;               s_end = 6;               s_inc = 2;            }            for (i = row_info->width; i; i--)            {               png_byte v;               int j;               v = (png_byte)((*sp >> sshift) & 0x3);               for (j = 0; j < png_pass_inc[pass]; j++)               {                  *dp &= (png_byte)((0x3f3f >> (6 - dshift)) & 0xff);                  *dp |= (png_byte)(v << dshift);                  if (dshift == s_end)                  {                     dshift = s_start;                     dp--;                  }                  else                     dshift += s_inc;               }               if (sshift == s_end)               {                  sshift = s_start;                  sp--;               }               else                  sshift += s_inc;            }            break;         }         case 4:         {            png_bytep sp, dp;            int sshift, dshift;            int s_start, s_end, s_inc;            png_uint_32 i;            sp = row + (png_size_t)((row_info->width - 1) >> 1);            dp = row + (png_size_t)((final_width - 1) >> 1);#if defined(PNG_READ_PACKSWAP_SUPPORTED)            if (transformations & PNG_PACKSWAP)            {               sshift = (png_size_t)(((row_info->width + 1) & 1) << 2);               dshift = (png_size_t)(((final_width + 1) & 1) << 2);               s_start = 4;               s_end = 0;               s_inc = -4;            }            else#endif            {               sshift = (png_size_t)((1 - ((row_info->width + 1) & 1)) << 2);               dshift = (png_size_t)((1 - ((final_width + 1) & 1)) << 2);               s_start = 0;               s_end = 4;               s_inc = 4;            }            for (i = row_info->width; i; i--)            {               png_byte v;               int j;               v = (png_byte)((*sp >> sshift) & 0xf);               for (j = 0; j < png_pass_inc[pass]; j++)               {                  *dp &= (png_byte)((0xf0f >> (4 - dshift)) & 0xff);                  *dp |= (png_byte)(v << dshift);                  if (dshift == s_end)                  {                     dshift = s_start;                     dp--;                  }                  else                     dshift += s_inc;               }               if (sshift == s_end)               {                  sshift = s_start;                  sp--;            

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -