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

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

?? pngvcrd.c

?? HEG是一個易用的強大的硬件加速2D游戲引擎 他完全具備了具有開發商業質量的2D游戲的中層引擎
?? 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一区二区三区免费野_久草精品视频
亚洲视频免费在线| 色天天综合色天天久久| 高清不卡一区二区在线| 国产一区二区影院| 国产一区二区三区蝌蚪| 国产乱码精品一品二品| 精品夜夜嗨av一区二区三区| 黄一区二区三区| 成人妖精视频yjsp地址| 91蝌蚪国产九色| 欧美日韩国产成人在线免费| 91精品国产综合久久蜜臀| 日韩欧美一二区| 久久一留热品黄| 中文字幕佐山爱一区二区免费| 一区二区在线观看视频| 日韩高清不卡一区二区三区| 国产一区二区三区香蕉| 成人午夜短视频| 欧美日韩中文国产| 天堂蜜桃91精品| 日本vs亚洲vs韩国一区三区| 日韩高清在线电影| 国产精品一级片在线观看| 成人免费观看视频| 欧美私人免费视频| 国产天堂亚洲国产碰碰| 亚洲国产乱码最新视频| 精品制服美女久久| 日本韩国欧美一区| 久久综合资源网| 亚洲在线免费播放| 国产精品一级黄| 91精品免费观看| 亚洲精选在线视频| 国产xxx精品视频大全| 在线亚洲高清视频| 久久久久久久久97黄色工厂| 亚洲国产欧美在线| 99国内精品久久| 精品福利av导航| 亚洲v精品v日韩v欧美v专区| 成人午夜精品在线| 日韩欧美国产高清| 亚洲18色成人| 色婷婷综合久久久| 欧美国产日韩一二三区| 极品美女销魂一区二区三区免费| 色综合久久久久久久久| 欧美国产日韩亚洲一区| 国内久久精品视频| 日韩欧美亚洲国产另类| 亚洲成人av在线电影| 色香蕉久久蜜桃| 国产精品国产自产拍在线| 激情国产一区二区| 日韩欧美国产wwwww| 天堂va蜜桃一区二区三区漫画版| av午夜一区麻豆| 亚洲欧洲无码一区二区三区| 国产精品白丝jk黑袜喷水| 日韩欧美在线观看一区二区三区| 午夜免费久久看| 在线观看www91| 亚洲一区二区三区在线| 色综合天天综合在线视频| 一区精品在线播放| 99精品热视频| 一区二区三区四区亚洲| 色综合色狠狠天天综合色| 亚洲欧美在线高清| 成人av电影在线| 日韩理论片一区二区| 91美女片黄在线观看| 亚洲色欲色欲www| 91一区二区三区在线观看| 亚洲欧美另类久久久精品2019| 成人aaaa免费全部观看| 亚洲精品国产无天堂网2021 | 国产69精品一区二区亚洲孕妇| 日韩美女视频在线| 国产精品资源在线| 欧美高清在线一区| 一本一道久久a久久精品| 亚洲综合色在线| 欧美男人的天堂一二区| 精品一区二区三区在线观看国产| 337p日本欧洲亚洲大胆色噜噜| 国产成人亚洲综合a∨婷婷图片| 国产精品视频你懂的| 色视频成人在线观看免| 日本成人在线看| 国产精品天干天干在线综合| 色8久久人人97超碰香蕉987| 偷拍一区二区三区四区| 欧美va亚洲va在线观看蝴蝶网| 不卡欧美aaaaa| 亚洲大片免费看| 2024国产精品视频| 色婷婷亚洲精品| 麻豆91在线看| 亚洲精品免费看| 精品国产乱码久久久久久久| 99精品黄色片免费大全| 麻豆极品一区二区三区| 中文字幕一区二区三中文字幕| 制服丝袜中文字幕亚洲| www.在线欧美| 久久国产精品露脸对白| 一区二区三区小说| 国产伦精一区二区三区| 在线观看国产日韩| 91丨九色丨国产丨porny| 亚洲高清在线精品| 国产亲近乱来精品视频| 欧美色视频一区| 成人动漫一区二区三区| 蜜桃一区二区三区在线观看| 亚洲图片激情小说| 久久综合久色欧美综合狠狠| 欧美在线免费播放| voyeur盗摄精品| 国产美女一区二区| 男男成人高潮片免费网站| 亚洲精品菠萝久久久久久久| 久久久久久综合| 日韩欧美综合一区| 欧美日韩mp4| 欧美在线免费观看视频| 99国产一区二区三精品乱码| 国产一区二区精品久久99| 日韩1区2区3区| 亚洲成人综合视频| 一个色在线综合| 亚洲码国产岛国毛片在线| 日本一区二区三级电影在线观看 | 国产精品五月天| 久久在线免费观看| 欧美成人bangbros| 日韩一区二区麻豆国产| 欧美日韩和欧美的一区二区| 色哟哟一区二区在线观看| 99久久久无码国产精品| 白白色 亚洲乱淫| 成人免费视频app| 国产成人精品免费在线| 国产98色在线|日韩| 国产成人免费在线观看不卡| 国产成人亚洲综合a∨猫咪| 国产一区999| 粉嫩蜜臀av国产精品网站| 国产sm精品调教视频网站| 成人一区在线观看| 成人免费福利片| 97se亚洲国产综合在线| 色哟哟一区二区| 欧美日韩视频专区在线播放| 欧美色图天堂网| 欧美精品久久一区| 精品av久久707| 国产精品国模大尺度视频| 亚洲少妇屁股交4| 婷婷综合五月天| 极品少妇一区二区三区精品视频 | 中文字幕日韩一区| 亚洲人被黑人高潮完整版| 亚洲国产精品久久艾草纯爱| 日韩和欧美一区二区| 国产在线麻豆精品观看| 成人免费毛片app| 欧美日韩精品一区二区三区四区 | 国产伦精品一区二区三区免费迷| 粉嫩嫩av羞羞动漫久久久| 色欧美乱欧美15图片| 制服视频三区第一页精品| 精品久久久久久无| 日韩理论片中文av| 免费欧美在线视频| 不卡av在线免费观看| 欧美日韩免费电影| 久久久99久久| 亚洲一区二区三区四区五区中文| 日韩av在线播放中文字幕| 国产91在线看| 欧美男人的天堂一二区| 欧美激情综合在线| 日韩主播视频在线| 99国产一区二区三精品乱码| 91精品国产综合久久久久久久| 中文字幕av免费专区久久| 日韩精品一二区| 97精品国产露脸对白| 精品国产91乱码一区二区三区| 一区二区三区.www| 国产成人综合亚洲91猫咪| 欧美一卡在线观看| 亚洲精品免费电影| 成人黄页在线观看| 精品国产91洋老外米糕| 午夜欧美视频在线观看|