亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? pngvcrd.c

?? 彩信瀏覽器
?? C
?? 第 1 頁 / 共 5 頁
字號:
/* pngvcrd.c - mixed C/assembler version of utilities to read a PNG file
 *
 * For Intel x86 CPU and Microsoft Visual C++ compiler
 *
 * libpng version 1.2.8 - December 3, 2004
 * For conditions of distribution and use, see copyright notice in png.h
 * Copyright (c) 1998-2004 Glenn Randers-Pehrson
 * Copyright (c) 1998, Intel Corporation
 *
 * Contributed by Nirav Chhatrapati, Intel Corporation, 1998
 * Interface to libpng contributed by Gilles Vollant, 1999
 *
 *
 * In png_do_read_interlace() in libpng versions 1.0.3a through 1.0.4d,
 * a sign error in the post-MMX cleanup code for each pixel_depth resulted
 * in bad pixels at the beginning of some rows of some images, and also
 * (due to out-of-range memory reads and writes) caused heap corruption
 * when compiled with MSVC 6.0.  The error was fixed in version 1.0.4e.
 *
 * [png_read_filter_row_mmx_avg() bpp == 2 bugfix, GRR 20000916]
 *
 * [runtime MMX configuration, GRR 20010102]
 *
 */

#define PNG_INTERNAL
#include "png.h"

#if defined(PNG_ASSEMBLER_CODE_SUPPORTED) && defined(PNG_USE_PNGVCRD)

static int mmx_supported=2;


int PNGAPI
png_mmx_support(void)
{
  int mmx_supported_local = 0;
  _asm {
    push ebx          //CPUID will trash these
    push ecx
    push edx

    pushfd            //Save Eflag to stack
    pop eax           //Get Eflag from stack into eax
    mov ecx, eax      //Make another copy of Eflag in ecx
    xor eax, 0x200000 //Toggle ID bit in Eflag [i.e. bit(21)]
    push eax          //Save modified Eflag back to stack

    popfd             //Restored modified value back to Eflag reg
    pushfd            //Save Eflag to stack
    pop eax           //Get Eflag from stack
    push ecx          // save original Eflag to stack
    popfd             // restore original Eflag
    xor eax, ecx      //Compare the new Eflag with the original Eflag
    jz NOT_SUPPORTED  //If the same, CPUID instruction is not supported,
                      //skip following instructions and jump to
                      //NOT_SUPPORTED label

    xor eax, eax      //Set eax to zero

    _asm _emit 0x0f   //CPUID instruction  (two bytes opcode)
    _asm _emit 0xa2

    cmp eax, 1        //make sure eax return non-zero value
    jl NOT_SUPPORTED  //If eax is zero, mmx not supported

    xor eax, eax      //set eax to zero
    inc eax           //Now increment eax to 1.  This instruction is
                      //faster than the instruction "mov eax, 1"

    _asm _emit 0x0f   //CPUID instruction
    _asm _emit 0xa2

    and edx, 0x00800000  //mask out all bits but mmx bit(24)
    cmp edx, 0        // 0 = mmx not supported
    jz  NOT_SUPPORTED // non-zero = Yes, mmx IS supported

    mov  mmx_supported_local, 1  //set return value to 1

NOT_SUPPORTED:
    mov  eax, mmx_supported_local  //move return value to eax
    pop edx          //CPUID trashed these
    pop ecx
    pop ebx
  }

  //mmx_supported_local=0; // test code for force don't support MMX
  //printf("MMX : %u (1=MMX supported)\n",mmx_supported_local);

  mmx_supported = mmx_supported_local;
  return mmx_supported_local;
}

/* Combines the row recently read in with the previous row.
   This routine takes care of alpha and transparency if requested.
   This routine also handles the two methods of progressive display
   of interlaced images, depending on the mask value.
   The mask value describes which pixels are to be combined with
   the row.  The pattern always repeats every 8 pixels, so just 8
   bits are needed.  A one indicates the pixel is to be combined; a
   zero indicates the pixel is to be skipped.  This is in addition
   to any alpha or transparency value associated with the pixel.  If
   you want all pixels to be combined, pass 0xff (255) in mask.  */

/* Use this routine for x86 platform - uses faster MMX routine if machine
   supports MMX */

void /* PRIVATE */
png_combine_row(png_structp png_ptr, png_bytep row, int mask)
{
#ifdef PNG_USE_LOCAL_ARRAYS
   const int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
#endif

   png_debug(1,"in png_combine_row_asm\n");

   if (mmx_supported == 2) {
#if !defined(PNG_1_0_X)
       /* this should have happened in png_init_mmx_flags() already */
       png_warning(png_ptr, "asm_flags may not have been initialized");
#endif
       png_mmx_support();
   }

   if (mask == 0xff)
   {
      png_memcpy(row, png_ptr->row_buf + 1,
       (png_size_t)PNG_ROWBYTES(png_ptr->row_info.pixel_depth,
       png_ptr->width));
   }
   /* GRR:  add "else if (mask == 0)" case?
    *       or does png_combine_row() not even get called in that case? */
   else
   {
      switch (png_ptr->row_info.pixel_depth)
      {
         case 1:
         {
            png_bytep sp;
            png_bytep dp;
            int s_inc, s_start, s_end;
            int m;
            int shift;
            png_uint_32 i;

            sp = png_ptr->row_buf + 1;
            dp = row;
            m = 0x80;
#if defined(PNG_READ_PACKSWAP_SUPPORTED)
            if (png_ptr->transformations & PNG_PACKSWAP)
            {
                s_start = 0;
                s_end = 7;
                s_inc = 1;
            }
            else
#endif
            {
                s_start = 7;
                s_end = 0;
                s_inc = -1;
            }

            shift = s_start;

            for (i = 0; i < png_ptr->width; i++)
            {
               if (m & mask)
               {
                  int value;

                  value = (*sp >> shift) & 0x1;
                  *dp &= (png_byte)((0x7f7f >> (7 - shift)) & 0xff);
                  *dp |= (png_byte)(value << shift);
               }

               if (shift == s_end)
               {
                  shift = s_start;
                  sp++;
                  dp++;
               }
               else
                  shift += s_inc;

               if (m == 1)
                  m = 0x80;
               else
                  m >>= 1;
            }
            break;
         }

         case 2:
         {
            png_bytep sp;
            png_bytep dp;
            int s_start, s_end, s_inc;
            int m;
            int shift;
            png_uint_32 i;
            int value;

            sp = png_ptr->row_buf + 1;
            dp = row;
            m = 0x80;
#if defined(PNG_READ_PACKSWAP_SUPPORTED)
            if (png_ptr->transformations & PNG_PACKSWAP)
            {
               s_start = 0;
               s_end = 6;
               s_inc = 2;
            }
            else
#endif
            {
               s_start = 6;
               s_end = 0;
               s_inc = -2;
            }

            shift = s_start;

            for (i = 0; i < png_ptr->width; i++)
            {
               if (m & mask)
               {
                  value = (*sp >> shift) & 0x3;
                  *dp &= (png_byte)((0x3f3f >> (6 - shift)) & 0xff);
                  *dp |= (png_byte)(value << shift);
               }

               if (shift == s_end)
               {
                  shift = s_start;
                  sp++;
                  dp++;
               }
               else
                  shift += s_inc;
               if (m == 1)
                  m = 0x80;
               else
                  m >>= 1;
            }
            break;
         }

         case 4:
         {
            png_bytep sp;
            png_bytep dp;
            int s_start, s_end, s_inc;
            int m;
            int shift;
            png_uint_32 i;
            int value;

            sp = png_ptr->row_buf + 1;
            dp = row;
            m = 0x80;
#if defined(PNG_READ_PACKSWAP_SUPPORTED)
            if (png_ptr->transformations & PNG_PACKSWAP)
            {
               s_start = 0;
               s_end = 4;
               s_inc = 4;
            }
            else
#endif
            {
               s_start = 4;
               s_end = 0;
               s_inc = -4;
            }
            shift = s_start;

            for (i = 0; i < png_ptr->width; i++)
            {
               if (m & mask)
               {
                  value = (*sp >> shift) & 0xf;
                  *dp &= (png_byte)((0xf0f >> (4 - shift)) & 0xff);
                  *dp |= (png_byte)(value << shift);
               }

               if (shift == s_end)
               {
                  shift = s_start;
                  sp++;
                  dp++;
               }
               else
                  shift += s_inc;
               if (m == 1)
                  m = 0x80;
               else
                  m >>= 1;
            }
            break;
         }

         case 8:
         {
            png_bytep srcptr;
            png_bytep dstptr;
            png_uint_32 len;
            int m;
            int diff, unmask;

            __int64 mask0=0x0102040810204080;

#if !defined(PNG_1_0_X)
            if ((png_ptr->asm_flags & PNG_ASM_FLAG_MMX_READ_COMBINE_ROW)
                /* && mmx_supported */ )
#else
            if (mmx_supported)
#endif
            {
               srcptr = png_ptr->row_buf + 1;
               dstptr = row;
               m = 0x80;
               unmask = ~mask;
               len  = png_ptr->width &~7;  //reduce to multiple of 8
               diff = png_ptr->width & 7;  //amount lost

               _asm
               {
                  movd       mm7, unmask   //load bit pattern
                  psubb      mm6,mm6       //zero mm6
                  punpcklbw  mm7,mm7
                  punpcklwd  mm7,mm7
                  punpckldq  mm7,mm7       //fill register with 8 masks

                  movq       mm0,mask0

                  pand       mm0,mm7       //nonzero if keep byte
                  pcmpeqb    mm0,mm6       //zeros->1s, v versa

                  mov        ecx,len       //load length of line (pixels)
                  mov        esi,srcptr    //load source
                  mov        ebx,dstptr    //load dest
                  cmp        ecx,0         //lcr
                  je         mainloop8end

mainloop8:
                  movq       mm4,[esi]
                  pand       mm4,mm0
                  movq       mm6,mm0
                  pandn      mm6,[ebx]
                  por        mm4,mm6
                  movq       [ebx],mm4

                  add        esi,8         //inc by 8 bytes processed
                  add        ebx,8
                  sub        ecx,8         //dec by 8 pixels processed

                  ja         mainloop8
mainloop8end:

                  mov        ecx,diff
                  cmp        ecx,0
                  jz         end8

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久影视传媒| 亚洲精品一线二线三线| 亚洲色图一区二区| 91亚洲国产成人精品一区二区三| 国产精品成人免费精品自在线观看 | 一区视频在线播放| 波多野结衣中文字幕一区二区三区| 欧美激情综合五月色丁香| caoporen国产精品视频| 樱桃视频在线观看一区| 欧美日本国产视频| 国产真实精品久久二三区| 中文在线资源观看网站视频免费不卡| av一区二区三区黑人| 亚洲成人福利片| 日韩视频国产视频| 成人黄色一级视频| 亚洲小说春色综合另类电影| 欧美一区二区三级| 成人亚洲一区二区一| 亚洲乱码国产乱码精品精小说 | 91精品久久久久久久久99蜜臂| 久久精品国产77777蜜臀| 国产午夜精品久久| 欧美三级日本三级少妇99| 免费精品视频在线| 中文字幕制服丝袜一区二区三区 | 99九九99九九九视频精品| 亚洲高清不卡在线观看| 久久久99精品免费观看| 在线视频你懂得一区| 精品一区二区三区在线播放 | 亚洲在线免费播放| 日韩精品最新网址| 91日韩在线专区| 久久精品理论片| 亚洲精品久久久蜜桃| 精品久久久久一区| 色成人在线视频| 国产精品18久久久久| 亚洲成人激情社区| 亚洲欧美在线aaa| 精品国产麻豆免费人成网站| 色先锋aa成人| 国产98色在线|日韩| 日韩精品免费视频人成| 亚洲欧洲国产日本综合| 精品久久久久久久久久久院品网| 色婷婷av一区二区三区gif| 粉嫩在线一区二区三区视频| 久久国产精品色婷婷| 五月综合激情婷婷六月色窝| 国产精品免费丝袜| 久久精品一区二区三区不卡 | 欧美中文字幕一区| eeuss鲁一区二区三区| 精品在线观看免费| 日本在线不卡视频| 亚洲成人动漫精品| 亚洲欧美精品午睡沙发| 国产日韩欧美一区二区三区乱码 | 久久看人人爽人人| 日韩一级免费观看| 欧美日韩成人在线一区| 欧美在线色视频| 91麻豆国产在线观看| 懂色av一区二区夜夜嗨| 国产精品影视在线观看| 久久99在线观看| 久久精品999| 麻豆精品一二三| 美女尤物国产一区| 免费的成人av| 久久se这里有精品| 老司机午夜精品99久久| 麻豆91免费看| 精品午夜一区二区三区在线观看| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲不卡一区二区三区| 日韩综合小视频| 天堂av在线一区| 美腿丝袜亚洲色图| 国产一区二区三区在线观看精品| 韩国av一区二区三区四区| 国产老女人精品毛片久久| 国产呦精品一区二区三区网站| 国产精品一区在线观看你懂的| 韩国欧美国产1区| 国产传媒日韩欧美成人| 波多野结衣中文字幕一区二区三区| 国产 日韩 欧美大片| av亚洲精华国产精华精| 色悠久久久久综合欧美99| 欧美午夜片在线看| 4hu四虎永久在线影院成人| 欧美成人精品二区三区99精品| 欧美成人伊人久久综合网| 精品999久久久| 国产精品久久久久久一区二区三区| 自拍偷拍国产精品| 亚洲午夜久久久久久久久电影院 | 亚洲精品中文字幕在线观看| 亚洲国产一区在线观看| 日韩vs国产vs欧美| 国产精品77777| 91国偷自产一区二区使用方法| 欧美日韩五月天| 久久午夜国产精品| |精品福利一区二区三区| 午夜精品一区二区三区免费视频| 狠狠v欧美v日韩v亚洲ⅴ| 不卡视频在线观看| 欧美剧情片在线观看| 久久精品一区二区| 亚洲福利视频三区| 国产成人在线视频免费播放| 色菇凉天天综合网| 久久久久久一二三区| 一区二区三区日韩欧美精品| 美女视频黄频大全不卡视频在线播放| 成人av资源下载| 日韩亚洲欧美一区二区三区| 欧美国产日韩在线观看| 日精品一区二区三区| www.亚洲在线| 欧美tk丨vk视频| 亚洲综合一区二区三区| 国产精品亚洲视频| 欧美麻豆精品久久久久久| 国产目拍亚洲精品99久久精品| 三级欧美韩日大片在线看| 成人性生交大片免费看视频在线 | 欧美v国产在线一区二区三区| 亚洲婷婷国产精品电影人久久| 免费观看在线综合| 欧洲生活片亚洲生活在线观看| 久久精品在这里| 日韩av电影免费观看高清完整版 | 国产日产亚洲精品系列| 午夜精品久久久久久久99樱桃| 丁香天五香天堂综合| 欧美一二三区在线| 亚洲一区免费观看| 99r国产精品| 国产精品青草综合久久久久99| 老司机精品视频导航| 欧美精品日韩一区| 亚洲综合激情网| 一本在线高清不卡dvd| 国产亚洲女人久久久久毛片| 秋霞影院一区二区| 欧美男人的天堂一二区| 一区二区三区资源| 92国产精品观看| 国产精品成人免费在线| 福利视频网站一区二区三区| 久久综合成人精品亚洲另类欧美 | 亚洲午夜激情av| 91无套直看片红桃| 日韩美女视频一区| 成+人+亚洲+综合天堂| 欧美激情中文字幕| 国产成人在线免费| 国产日韩欧美激情| 国产成人在线色| 欧美国产成人精品| 成人黄色一级视频| 中文字幕一区二区不卡| 99视频一区二区三区| 亚洲欧洲韩国日本视频| 色婷婷综合在线| 一区二区三区久久| 欧美日韩久久不卡| 免费在线视频一区| 日韩精品专区在线影院观看| 久久国产精品72免费观看| 欧美成人三级电影在线| 国产一区二区三区国产| 中文一区一区三区高中清不卡| 丁香网亚洲国际| 亚洲精品成人少妇| 精品视频一区二区三区免费| 亚洲成国产人片在线观看| 欧美老女人在线| 奇米色777欧美一区二区| 日韩精品一区二区三区中文精品| 韩国三级电影一区二区| 国产精品视频第一区| 色婷婷av一区二区三区gif | 波多野结衣亚洲一区| √…a在线天堂一区| 欧美色综合久久| 麻豆精品一区二区| 国产精品亲子伦对白| 91福利在线免费观看| 日韩成人精品在线观看| 国产视频一区在线观看| 色丁香久综合在线久综合在线观看| 日本少妇一区二区| 欧美激情在线一区二区|