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

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

?? pngvcrd.c

?? qt-x11-free-3.0.3.tar.gz minigui圖形界面工具
?? 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 1.0.12 - June 8, 2001 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1998-2001 Glenn Randers-Pehrson * Copyright (c) 1998, Intel Corporation * * Contributed by Nirav Chhatrapati, Intel Corporation, 1998 * Interface to libpng contributed by Gilles Vollant, 1999 * Debugging and cleanup by Greg Roelofs, 2000, 2001 * * 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] * */#define PNG_INTERNAL#include "png.h"#if defined(PNG_ASSEMBLER_CODE_SUPPORTED) && defined(PNG_USE_PNGVCRD)static int mmx_supported=2;int PNGAPIpng_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    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 1NOT_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) {       png_mmx_support();   }   if (mask == 0xff)   {      png_memcpy(row, png_ptr->row_buf + 1,       (png_size_t)((png_ptr->width * png_ptr->row_info.pixel_depth + 7) >> 3));   }   /* 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 ( mmx_supported )            {               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         mainloop8endmainloop8:                  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         mainloop8mainloop8end:                  mov        ecx,diff                  cmp        ecx,0                  jz         end8                  mov        edx,mask                  sal        edx,24        //make low byte the high bytesecondloop8:                  sal        edx,1         //move high bit to CF                  jnc        skip8         //if CF = 0                  mov        al,[esi]                  mov        [ebx],alskip8:                  inc        esi                  inc        ebx                  dec        ecx                  jnz        secondloop8end8:                  emms               }            }            else /* mmx not supported - use modified C routine */            {               register unsigned int incr1, initial_val, final_val;               png_size_t pixel_bytes;               png_uint_32 i;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
懂色av一区二区三区蜜臀| 国产经典欧美精品| 亚洲第一福利一区| 香蕉av福利精品导航| 天天综合日日夜夜精品| 日韩和的一区二区| 麻豆国产精品视频| 国产精品小仙女| 91在线一区二区| 在线观看日韩精品| 在线成人av影院| 精品国产乱码久久久久久浪潮 | 不卡电影一区二区三区| 97久久精品人人做人人爽50路| 91农村精品一区二区在线| 欧美在线视频不卡| 日韩欧美专区在线| 国产丝袜美腿一区二区三区| 亚洲欧美欧美一区二区三区| 首页国产欧美日韩丝袜| 国产一区美女在线| 97久久超碰国产精品| 欧美日韩精品一区二区三区蜜桃 | 国产午夜精品一区二区三区视频| 欧美激情中文字幕一区二区| 亚洲一二三四在线观看| 美女爽到高潮91| 丁香桃色午夜亚洲一区二区三区| 欧美在线观看你懂的| 欧美成人精品1314www| 国产精品剧情在线亚洲| 日本强好片久久久久久aaa| 国产精品自拍毛片| 欧美午夜理伦三级在线观看| 久久综合资源网| 亚洲二区在线视频| 国产成人av福利| 欧美一区二区三区人| 国产精品久久久久久久久快鸭| 亚洲第一二三四区| 成人午夜电影久久影院| 91精品国产一区二区| 亚洲特级片在线| 韩国av一区二区三区| 欧美自拍偷拍一区| 国产精品久久久久久久久动漫| 午夜精品在线看| 色婷婷国产精品| 中文字幕免费在线观看视频一区| 日本亚洲欧美天堂免费| 色综合久久久久网| 久久久91精品国产一区二区三区| 日韩精品色哟哟| 欧美中文字幕一区二区三区亚洲| 国产女人aaa级久久久级| 日韩成人一区二区三区在线观看| 91亚洲精品久久久蜜桃网站| 久久影院视频免费| 麻豆成人久久精品二区三区小说| 欧美三级韩国三级日本三斤| 综合亚洲深深色噜噜狠狠网站| 国内国产精品久久| 欧美一区二区网站| 日韩福利电影在线| 777xxx欧美| 天天av天天翘天天综合网色鬼国产| 99久久精品免费精品国产| 中文字幕精品三区| 国产91精品在线观看| 久久精品一区二区三区四区| 国产综合色在线视频区| 精品久久久久久久久久久久久久久久久 | 日韩亚洲欧美中文三级| 蜜桃视频在线观看一区二区| 欧美一区二区三区免费| 琪琪一区二区三区| 91精品国产高清一区二区三区蜜臀| 亚洲成人你懂的| 欧美精品v国产精品v日韩精品 | 高清不卡一二三区| 国产午夜精品一区二区三区嫩草 | 丝袜美腿一区二区三区| 欧美日韩一级片在线观看| 五月天一区二区三区| 欧美一区二区大片| 国产最新精品免费| 国产精品福利在线播放| 欧美亚洲国产bt| 久热成人在线视频| 日本一区二区在线不卡| 色综合久久综合网| 午夜电影网一区| 欧美本精品男人aⅴ天堂| 国产福利一区二区三区视频在线 | 中文字幕av一区二区三区免费看| 成人av在线一区二区三区| 1000精品久久久久久久久| 日本电影欧美片| 精品综合久久久久久8888| 久久精品亚洲国产奇米99| 99久久久久久99| 秋霞电影网一区二区| 国产欧美日韩精品a在线观看| 色综合中文字幕国产 | 亚洲午夜久久久久| 日韩精品综合一本久道在线视频| 国产成人综合亚洲网站| 亚洲美女屁股眼交3| 精品美女被调教视频大全网站| 成人av在线一区二区三区| 亚洲超碰精品一区二区| 国产亚洲精久久久久久| 在线观看网站黄不卡| 国产精品中文字幕日韩精品| 一区二区三区免费在线观看| 日韩精品一区二区三区四区| 91首页免费视频| 看电视剧不卡顿的网站| 亚洲一区在线免费观看| 国产亚洲精久久久久久| 欧美高清视频一二三区 | 夜夜嗨av一区二区三区中文字幕| 精品久久久久香蕉网| 在线欧美日韩国产| 成人网男人的天堂| 美女脱光内衣内裤视频久久网站| 一区二区久久久久久| 欧美高清在线视频| 欧美精品一区二区三区蜜臀| 欧美三级资源在线| www.亚洲精品| 国产精一区二区三区| 免费观看在线色综合| 丝袜亚洲精品中文字幕一区| 伊人婷婷欧美激情| 一区二区中文视频| 国产精品女人毛片| 久久免费美女视频| 日韩欧美激情四射| 日韩一区二区三区av| 欧美日韩国产区一| 欧美性三三影院| 在线亚洲高清视频| 一本久久a久久免费精品不卡| 国产69精品久久99不卡| 国产精品原创巨作av| 久久99久久精品欧美| 青椒成人免费视频| 久久精品国产999大香线蕉| 日本欧美大码aⅴ在线播放| 亚洲大片一区二区三区| 亚洲一区二区精品视频| 亚洲成人综合视频| 五月天婷婷综合| 日本欧洲一区二区| 久久精品av麻豆的观看方式| 久久草av在线| 国产成人在线视频网站| 不卡一区二区在线| 91蜜桃视频在线| 欧美日韩1区2区| 欧美一区二区性放荡片| 久久五月婷婷丁香社区| 国产片一区二区三区| 亚洲天堂久久久久久久| 亚洲观看高清完整版在线观看| 一区二区在线观看免费| 午夜精品aaa| 国产九色sp调教91| bt欧美亚洲午夜电影天堂| 欧美影视一区二区三区| 91精品国产色综合久久不卡电影| 日韩精品一区二区三区中文不卡 | 亚洲一区二区三区精品在线| 日韩精品色哟哟| 国产一区高清在线| av激情综合网| 欧美日韩国产首页在线观看| 精品国产伦一区二区三区观看体验| 久久精品日韩一区二区三区| 亚洲乱码国产乱码精品精98午夜| 亚洲成人资源在线| 国产精品小仙女| 欧美日韩国产乱码电影| 日韩欧美黄色影院| 亚洲日本青草视频在线怡红院| 免费美女久久99| 91在线视频网址| 精品成a人在线观看| 一区二区三区小说| 国产一区二区三区精品欧美日韩一区二区三区| www.亚洲色图.com| 日韩欧美中文一区| 亚洲免费观看高清完整版在线观看| 久久精品国产亚洲5555| 色域天天综合网| 久久久久久久久久电影| 亚洲18女电影在线观看| 不卡影院免费观看| 精品国产乱码久久久久久图片|