亚洲欧美第一页_禁久久精品乱码_粉嫩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.7 - September 12, 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一区二区三区免费野_久草精品视频
日本道精品一区二区三区| 欧美日韩一区二区电影| 欧美性猛交xxxx乱大交退制版| 欧美一区二区三区婷婷月色| 日韩一区在线免费观看| 国产精品一区三区| 日韩一区二区三区电影在线观看| 国产精品超碰97尤物18| 国产在线观看一区二区| 91精品国产一区二区| 一区二区三区欧美激情| 成人午夜短视频| 亚洲精品一区二区精华| 日韩电影在线一区二区三区| 一本一道综合狠狠老| 国产欧美1区2区3区| 国产在线精品一区二区三区不卡 | 亚洲一区二区三区中文字幕在线 | 欧美性三三影院| 中文字幕永久在线不卡| 国产精品一区专区| 久久久久国产免费免费| 九色|91porny| 精品国产青草久久久久福利| 日本特黄久久久高潮| 欧美日韩亚洲综合在线| 午夜精品福利视频网站| 欧美久久久影院| 日韩中文欧美在线| 欧美一区日韩一区| 久久99久久99| 久久日韩精品一区二区五区| 国产在线不卡一卡二卡三卡四卡| 精品国产乱码久久久久久蜜臀| 免费在线观看一区二区三区| 日韩免费观看2025年上映的电影 | 日韩精品亚洲一区| 欧美美女一区二区| 亚洲成人av电影| 欧美精品九九99久久| 免费看黄色91| 久久久一区二区三区捆绑**| 国产激情一区二区三区四区| 久久五月婷婷丁香社区| 成人综合在线观看| 最新国产の精品合集bt伙计| 欧美网站一区二区| 伦理电影国产精品| 日本一区二区高清| 色一情一伦一子一伦一区| 亚洲午夜久久久久久久久电影网| 欧美日韩国产免费一区二区| 美女一区二区三区在线观看| 久久久99久久| 色噜噜偷拍精品综合在线| 日韩avvvv在线播放| 久久综合国产精品| 91啪亚洲精品| 麻豆91小视频| 国产精品传媒入口麻豆| 欧美精品xxxxbbbb| 国产99久久久国产精品潘金网站| 亚洲天堂久久久久久久| 91精品国产丝袜白色高跟鞋| 成人福利视频在线看| 亚洲一区二区三区视频在线| 欧美xxxxx裸体时装秀| 91网站最新地址| 老司机一区二区| 亚洲人快播电影网| 制服丝袜国产精品| 9i在线看片成人免费| 日欧美一区二区| 亚洲色图一区二区| 久久久精品国产99久久精品芒果| 欧美中文字幕一区二区三区| 国产成人丝袜美腿| 日本中文字幕一区二区视频| 一区二区中文视频| 久久蜜桃一区二区| 欧美一级片在线看| 91黄色小视频| 北条麻妃一区二区三区| 婷婷国产在线综合| 国产精品对白交换视频| 精品国产一区二区三区久久影院 | 偷拍一区二区三区四区| 一区在线中文字幕| 国产日韩欧美精品电影三级在线| 欧美一级免费观看| 精品视频在线看| 色系网站成人免费| a亚洲天堂av| 国产a区久久久| 国产一区二区不卡在线| 日韩电影网1区2区| 日韩精品国产精品| 亚洲成人中文在线| 亚洲图片欧美视频| 夜夜精品视频一区二区| 亚洲免费三区一区二区| 亚洲欧洲精品一区二区三区| 国产清纯美女被跳蛋高潮一区二区久久w | 精品久久国产字幕高潮| 91超碰这里只有精品国产| 色综合久久99| 色综合咪咪久久| 9i在线看片成人免费| 9色porny自拍视频一区二区| 成人18视频在线播放| 成人av电影观看| 91免费在线视频观看| 在线亚洲免费视频| 在线视频亚洲一区| 欧美在线观看视频在线| 欧美唯美清纯偷拍| 欧美一级视频精品观看| 欧美大肚乱孕交hd孕妇| 欧美不卡一区二区| 久久久久九九视频| 国产精品电影一区二区| 亚洲视频小说图片| 亚洲一区二区三区免费视频| 天堂精品中文字幕在线| 日产欧产美韩系列久久99| 美女高潮久久久| 风间由美中文字幕在线看视频国产欧美| 国产一区二区在线影院| 国产综合色视频| 成人不卡免费av| 91丝袜国产在线播放| 欧美视频在线播放| 日韩精品影音先锋| 中文字幕乱码一区二区免费| 亚洲精品菠萝久久久久久久| 亚洲一二三四在线| 九一九一国产精品| www..com久久爱| 欧美日韩一区二区在线观看| 精品粉嫩超白一线天av| 国产精品久久毛片av大全日韩| 亚洲与欧洲av电影| 麻豆精品久久久| 国产黄色成人av| 欧美亚洲国产一区二区三区| 日韩欧美成人午夜| 亚洲天堂成人在线观看| 免费观看一级特黄欧美大片| 不卡免费追剧大全电视剧网站| 欧美日韩一区高清| 亚洲国产精品v| 五月天欧美精品| 成人免费av网站| 7777精品久久久大香线蕉| 国产精品区一区二区三区| 亚洲成人av资源| 成人av午夜影院| 日韩欧美一区二区久久婷婷| 亚洲免费电影在线| 国产资源精品在线观看| 欧美日韩精品一区二区三区四区| 久久精品人人做| 青青草精品视频| 在线观看亚洲精品| 欧美韩国一区二区| 久久精品国产亚洲5555| 91极品美女在线| 国产精品成人在线观看| 国产精品一二三| 欧美一区二区播放| 亚洲r级在线视频| 色欧美日韩亚洲| 国产日韩精品一区二区三区| 久久99在线观看| 51精品秘密在线观看| 亚洲精品亚洲人成人网| 成人高清视频免费观看| 久久婷婷国产综合国色天香| 日韩精品午夜视频| 欧美日韩一区二区三区视频 | 一本大道综合伊人精品热热| 久久精品夜色噜噜亚洲aⅴ| 久久国产夜色精品鲁鲁99| 欧美日韩国产在线播放网站| 亚洲欧美激情一区二区| 97国产一区二区| 中文字幕亚洲不卡| 97精品久久久久中文字幕| 国产欧美日韩在线视频| 国产精品亚洲人在线观看| 欧美精品一区视频| 国产曰批免费观看久久久| 久久中文字幕电影| 国产成人一级电影| 国产视频一区二区在线观看| 国产精品自在在线| 国产亚洲制服色| 成人午夜av影视| 亚洲欧美日本韩国| 色哦色哦哦色天天综合|