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

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

?? pngvcrd.c

?? game engine, which is useful for everyone who is interested in it. I hope you can enjoy it.
?? 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一区二区三区免费野_久草精品视频
国产精品欧美经典| 一区二区三区欧美激情| 777奇米成人网| 欧美日韩亚洲综合在线| 欧美视频精品在线观看| 欧美日韩一卡二卡| 日韩一区二区在线观看视频| 日韩一区二区三区在线| 日韩免费福利电影在线观看| 欧美成人免费网站| 日本一二三不卡| 日韩理论电影院| 亚洲h精品动漫在线观看| 日本成人在线看| 国产激情视频一区二区在线观看| 国产白丝网站精品污在线入口| 成人永久免费视频| 99久久精品情趣| 欧美日韩电影在线| 国产亚洲一区二区三区四区| 国产精品毛片久久久久久 | 久久国产精品99久久人人澡| 精品一区二区免费看| 国产·精品毛片| 欧美午夜精品免费| 26uuu久久天堂性欧美| 国产精品福利一区| 日本女人一区二区三区| 成人国产精品免费观看动漫| 91传媒视频在线播放| 精品国产1区二区| 亚洲色图欧美在线| 久久 天天综合| 欧美探花视频资源| 国产免费成人在线视频| 丝袜国产日韩另类美女| 国产激情视频一区二区在线观看| 在线观看精品一区| 国产性天天综合网| 天堂蜜桃一区二区三区| av电影在线观看完整版一区二区| 欧美一区二区精品在线| 亚洲视频在线观看三级| 激情综合色播激情啊| 在线中文字幕一区二区| 国产亚洲欧美激情| 美女一区二区三区在线观看| 91久久精品一区二区三| 国产三级一区二区| 久久精品二区亚洲w码| 欧美探花视频资源| 亚洲三级电影全部在线观看高清| 国产精品一二三区在线| 欧美一级二级三级乱码| 亚洲一区二区美女| 色狠狠一区二区三区香蕉| 国产日韩精品一区二区三区在线| 美腿丝袜亚洲色图| 欧美精品v日韩精品v韩国精品v| 亚洲六月丁香色婷婷综合久久 | 欧美极品少妇xxxxⅹ高跟鞋| 日本亚洲一区二区| 欧美高清视频www夜色资源网| 一区二区三区在线播放| eeuss国产一区二区三区| 国产欧美一区二区精品秋霞影院| 久久精品国产亚洲高清剧情介绍| 这里只有精品99re| 午夜伦欧美伦电影理论片| 欧美日韩精品一区二区三区蜜桃 | 在线一区二区观看| 国产精品麻豆欧美日韩ww| 国产69精品久久久久777| 亚洲国产精品成人久久综合一区 | 色综合久久六月婷婷中文字幕| 国产三级精品在线| 成人h动漫精品一区二区| 国产女主播一区| 成人免费毛片高清视频| 最新国产成人在线观看| 色又黄又爽网站www久久| 一片黄亚洲嫩模| 欧美日韩电影在线播放| 免费在线看成人av| 久久伊人中文字幕| 丁香婷婷综合激情五月色| 中文字幕一区不卡| 欧美日韩久久久久久| 久久国内精品视频| 国产日韩欧美亚洲| 色嗨嗨av一区二区三区| 亚洲福利视频三区| 精品久久久久一区| 成人性视频免费网站| 亚洲一区免费在线观看| 欧美一区二区三区男人的天堂| 激情综合色播激情啊| 亚洲婷婷在线视频| 欧美肥胖老妇做爰| 国产很黄免费观看久久| 国产精品乱码一区二三区小蝌蚪| 91国模大尺度私拍在线视频| 日韩成人av影视| 国产女主播在线一区二区| 在线观看成人小视频| 黑人巨大精品欧美一区| 亚洲欧美另类在线| 精品久久久久久久久久久久包黑料 | 另类成人小视频在线| 国产精品美女视频| 欧美一区二区三区视频| 波波电影院一区二区三区| 日韩电影免费在线看| 国产精品美女久久久久av爽李琼| 欧美日韩免费电影| 99久久国产综合精品色伊| 肉肉av福利一精品导航| 综合久久久久久| 26uuu国产电影一区二区| 欧美色图激情小说| 成人一区在线观看| 久久福利视频一区二区| 一区二区成人在线视频| 国产精品人成在线观看免费| 日韩午夜在线观看| 欧美在线高清视频| 91影院在线免费观看| 国产美女视频91| 免费精品99久久国产综合精品| 一区二区三区四区高清精品免费观看| 精品成人一区二区三区四区| 91超碰这里只有精品国产| 91亚洲精品一区二区乱码| 成人免费视频app| 国产精品一区二区黑丝| 久久精品国产网站| 青青草97国产精品免费观看| 亚洲成人av一区二区三区| 亚洲欧美韩国综合色| 中文字幕精品一区| 中文字幕乱码久久午夜不卡| 久久久久国产精品免费免费搜索| 日韩女优av电影在线观看| 3atv一区二区三区| 欧美日韩精品一区二区在线播放| 欧美影视一区二区三区| 91国偷自产一区二区开放时间 | 国精品**一区二区三区在线蜜桃 | 久久久噜噜噜久久人人看| 日韩欧美亚洲国产精品字幕久久久| 欧美三级一区二区| 欧美日韩在线播放| 欧美区视频在线观看| 欧美日韩视频在线第一区| 欧美精品日韩一本| 日韩一区二区电影网| 欧美电影免费观看高清完整版在线观看 | 天天综合天天做天天综合| 污片在线观看一区二区| 免费欧美在线视频| 国产一区二区在线视频| 国产91露脸合集magnet| heyzo一本久久综合| 色婷婷久久久亚洲一区二区三区| 在线日韩一区二区| 欧美另类一区二区三区| 精品久久久久久久久久久久久久久久久 | 青青青爽久久午夜综合久久午夜| 日韩av网站在线观看| 国产乱子轮精品视频| 不卡视频一二三四| 欧美日韩一区三区| 精品国产不卡一区二区三区| 中文一区二区在线观看| 一区二区三区蜜桃| 欧美aa在线视频| 成人av综合一区| 欧美精品一卡两卡| 国产精品天天看| 亚洲一区在线视频| 国产精品综合在线视频| 色狠狠av一区二区三区| 精品国产91九色蝌蚪| 亚洲欧美日韩人成在线播放| 日本成人中文字幕在线视频| 成人黄色网址在线观看| 欧美美女一区二区| 国产精品伦一区| 奇米色一区二区| 91美女精品福利| 久久久久国产精品麻豆| 亚洲丶国产丶欧美一区二区三区| 精品亚洲国内自在自线福利| 日本乱码高清不卡字幕| 国产亚洲女人久久久久毛片| 日韩成人一级大片| 91久久香蕉国产日韩欧美9色| 国产亚洲综合色| 另类人妖一区二区av| 色婷婷久久久久swag精品|