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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? pngvcrd.c

?? png圖像文件格式開發(fā)包
?? 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.5 - October 2, 2002 * For conditions of distribution and use, see copyright notice in png.h * Copyright (c) 1998-2002 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 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    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 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) {       /* this should have happened in png_init_mmx_flags() already */       png_warning(png_ptr, "asm_flags may not have been initialized");       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 ((png_ptr->asm_flags & PNG_ASM_FLAG_MMX_READ_COMBINE_ROW)                /* && 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:

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩 欧美一区二区三区| 一区二区三区**美女毛片| 精品一区二区av| 久久久久9999亚洲精品| 国产69精品久久久久毛片| 日韩一区在线免费观看| 欧美日韩综合色| 蜜桃av一区二区三区电影| 久久你懂得1024| 99久久免费精品| 天天免费综合色| 久久精品免视看| 色婷婷狠狠综合| 日av在线不卡| 欧美韩国日本一区| 欧美日韩高清一区二区不卡| 久久av资源站| 亚洲欧洲国产日本综合| 678五月天丁香亚洲综合网| 精品一区二区三区在线观看国产 | 亚洲三级免费电影| 91极品视觉盛宴| 国产一区二区三区电影在线观看| 欧美国产日韩精品免费观看| 在线观看一区二区视频| 国产在线一区观看| 亚洲色图在线看| 日韩欧美色综合| 色婷婷狠狠综合| 韩国欧美国产一区| 一区二区三区av电影| 久久亚洲私人国产精品va媚药| 91论坛在线播放| 国产资源在线一区| 亚洲成人av一区二区三区| 久久女同互慰一区二区三区| 欧美亚洲一区二区在线| 国产91精品精华液一区二区三区| 午夜免费欧美电影| 国产精品成人午夜| www国产精品av| 欧美日韩日本视频| 暴力调教一区二区三区| 久久不见久久见免费视频7 | 成人高清免费在线播放| 日本最新不卡在线| 一区二区三区在线免费视频 | 国产精品久久久久久久久搜平片 | av亚洲精华国产精华| 美美哒免费高清在线观看视频一区二区 | 丝袜美腿亚洲综合| 一区二区三区在线视频观看 | 久久精品国产77777蜜臀| 一个色妞综合视频在线观看| 久久精品人人做| 欧美电影免费观看高清完整版在线观看 | 欧美日韩高清影院| 色呦呦国产精品| 99国内精品久久| 国产91在线观看| 国内成人免费视频| 精品一区二区三区在线视频| 奇米亚洲午夜久久精品| 婷婷国产在线综合| 婷婷国产v国产偷v亚洲高清| 亚洲国产美女搞黄色| 亚洲欧美色一区| 最新不卡av在线| 亚洲同性gay激情无套| 中文字幕av一区 二区| 国产欧美日韩综合精品一区二区| 久久一区二区视频| 精品久久久久一区| 久久日韩精品一区二区五区| 久久久亚洲精华液精华液精华液| 欧美变态tickle挠乳网站| 日韩美一区二区三区| 日韩欧美国产不卡| 精品va天堂亚洲国产| 2欧美一区二区三区在线观看视频| 欧美tickle裸体挠脚心vk| 精品久久久久香蕉网| 国产片一区二区| 一区在线观看免费| 亚洲综合激情网| 丝袜美腿亚洲色图| 久久精品久久久精品美女| 精品一区二区三区免费毛片爱| 激情五月婷婷综合| 成人福利在线看| 91老师片黄在线观看| 欧美三级三级三级| 91精品国产免费| 久久亚洲捆绑美女| 亚洲日本一区二区| 亚洲.国产.中文慕字在线| 无码av中文一区二区三区桃花岛| 日韩成人伦理电影在线观看| 国产精品一二三在| 色欧美乱欧美15图片| 欧美久久久久中文字幕| 精品噜噜噜噜久久久久久久久试看| 久久久久久久久久久久电影| 中文字幕一区二区三| 视频一区二区欧美| 国产一区二区在线观看免费| caoporn国产精品| 3d动漫精品啪啪一区二区竹菊| www激情久久| 亚洲国产综合人成综合网站| 九九热在线视频观看这里只有精品| 成人高清视频在线| 宅男在线国产精品| 中文字幕不卡一区| 日本一不卡视频| 91亚洲国产成人精品一区二三 | 一区二区三区四区视频精品免费| 免费人成在线不卡| 91亚洲精品久久久蜜桃| 欧美一区二区黄| 亚洲天堂a在线| 欧美aa在线视频| 91九色02白丝porn| 久久久久国产成人精品亚洲午夜 | 久久99精品网久久| 色狠狠av一区二区三区| 久久综合一区二区| 石原莉奈一区二区三区在线观看 | 一区二区高清视频在线观看| 久久精品久久久精品美女| 91久久精品国产91性色tv| 久久午夜免费电影| 偷拍亚洲欧洲综合| 99久久久国产精品| 精品粉嫩超白一线天av| 亚洲123区在线观看| 97se狠狠狠综合亚洲狠狠| 精品国产伦一区二区三区观看方式 | 欧美精彩视频一区二区三区| 婷婷一区二区三区| 欧美最新大片在线看| 亚洲欧洲性图库| 国产91富婆露脸刺激对白| 精品国产一区久久| 五月婷婷欧美视频| 欧美日韩综合不卡| 一区二区三区在线视频观看| fc2成人免费人成在线观看播放| 久久精品人人做人人综合| 久久黄色级2电影| 日韩一区二区免费在线观看| 亚洲成人在线观看视频| 色呦呦国产精品| 一区二区三区在线观看欧美| 99久久免费视频.com| 1000精品久久久久久久久| 成人高清伦理免费影院在线观看| 国产亚洲一区二区三区四区| 国产一区二区剧情av在线| 精品国产免费一区二区三区四区 | 一区在线中文字幕| 成人国产免费视频| 中文字幕在线视频一区| youjizz久久| 亚洲靠逼com| 欧美日韩一区精品| 亚洲成a人片在线不卡一二三区| 欧美性色欧美a在线播放| 亚洲福利视频一区二区| 欧美曰成人黄网| 午夜精品影院在线观看| 69久久夜色精品国产69蝌蚪网| 日韩成人伦理电影在线观看| 日韩视频在线永久播放| 精品亚洲aⅴ乱码一区二区三区| 精品剧情v国产在线观看在线| 国产精品一二三在| 国产精品久久久久久久久免费丝袜 | 亚洲精品你懂的| 在线观看精品一区| 三级精品在线观看| 欧美精品一区二区在线观看| 国产精品伊人色| 亚洲视频免费在线观看| 欧美丝袜丝交足nylons| 麻豆精品一区二区综合av| 国产午夜精品福利| 91美女片黄在线| 日本美女一区二区三区| 久久久高清一区二区三区| 91影院在线观看| 蜜臀av在线播放一区二区三区| 久久久午夜精品理论片中文字幕| 99国产精品久久久| 日韩主播视频在线| 欧美国产成人在线| 欧美美女直播网站| 国产乱子伦一区二区三区国色天香| 国产精品日韩成人| 欧美日韩精品综合在线|