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

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

?? pngvcrd.c

?? QT 開發環境里面一個很重要的文件
?? 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 * * Last changed in libpng 1.2.6 - August 15, 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 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) {#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         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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91尤物视频在线观看| 日韩无一区二区| 天天av天天翘天天综合网 | 99国内精品久久| 亚洲成人久久影院| 精品91自产拍在线观看一区| 国产成人免费视频| 亚洲国产精品视频| 国产欧美日本一区二区三区| 欧美色爱综合网| 成人黄色777网| 国产一区二区三区日韩 | 国产精品电影院| 欧美zozo另类异族| 欧美日韩精品免费| 色婷婷精品大在线视频| 国产精品91xxx| 成人性生交大片免费看视频在线 | 久久久亚洲精品石原莉奈| 91丨porny丨蝌蚪视频| 国产iv一区二区三区| 麻豆精品一区二区| 蜜臀久久99精品久久久久宅男| 亚洲大片一区二区三区| 亚洲综合免费观看高清完整版| 国产精品美女一区二区三区| 欧美激情综合五月色丁香| 国产嫩草影院久久久久| 久久久久久久久久美女| 久久久久久久综合狠狠综合| 欧美成人高清电影在线| 精品国产一区二区三区不卡| 久久影院视频免费| 国产亚洲精品资源在线26u| 日本一区二区三区在线观看| 亚洲欧美中日韩| 免费久久99精品国产| 韩国欧美国产一区| 色综合视频在线观看| 欧美午夜一区二区| 久久婷婷国产综合精品青草| 国产精品久久久久久久久晋中| 亚洲女女做受ⅹxx高潮| 亚洲综合在线免费观看| 日韩av网站免费在线| 成人手机电影网| 欧美日韩国产综合一区二区三区 | 亚洲精品免费在线观看| 亚洲 欧美综合在线网络| 久久99蜜桃精品| 在线精品国精品国产尤物884a| 91麻豆精品国产无毒不卡在线观看 | 欧美一个色资源| 综合av第一页| 国产一区91精品张津瑜| 欧美嫩在线观看| 亚洲四区在线观看| 国产在线精品一区在线观看麻豆| 欧美日韩极品在线观看一区| 成人欧美一区二区三区在线播放| 日韩黄色片在线观看| 欧美成人伊人久久综合网| 亚洲第四色夜色| 欧美三级电影在线看| 最新中文字幕一区二区三区| 精品一区二区三区久久| 91精品国产欧美日韩| 亚洲国产一区二区视频| 欧美日韩一区二区不卡| 经典三级在线一区| 久久久国际精品| 成人国产精品免费网站| 亚洲欧美综合网| 在线观看91视频| 亚洲成人资源网| 欧美精品一区二区三| 粉嫩绯色av一区二区在线观看| 国产精品人妖ts系列视频| 色综合久久六月婷婷中文字幕| 亚洲综合丝袜美腿| 日韩欧美视频在线| www.亚洲色图| 舔着乳尖日韩一区| 中文字幕av不卡| 欧美精选在线播放| 成人视屏免费看| 日本午夜一本久久久综合| 国产精品午夜久久| 91精品国产综合久久久久| 国产 欧美在线| 毛片一区二区三区| 一区二区在线看| 国产精品成人免费在线| 日韩一区二区免费电影| 97超碰欧美中文字幕| 五月天国产精品| 欧美国产精品一区二区三区| 日日夜夜精品免费视频| 日韩一级精品视频在线观看| 91亚洲精品久久久蜜桃| 国产资源精品在线观看| 日精品一区二区三区| 亚洲成人激情av| 亚洲国产视频在线| 午夜国产精品影院在线观看| 成人欧美一区二区三区白人 | 狠狠色综合日日| 日本不卡一区二区三区高清视频| 一区二区三区四区中文字幕| 亚洲欧洲av一区二区三区久久| 久久精品欧美一区二区三区不卡| 精品国产一区二区三区不卡| 日韩精品一区二区三区swag| 日韩免费在线观看| 欧美xxxxx裸体时装秀| 久久久久久久久久久电影| 26uuu精品一区二区| 国产亚洲成av人在线观看导航 | 精品少妇一区二区三区在线播放| 欧美日韩精品二区第二页| 欧美精品久久久久久久多人混战 | 欧美日韩国产综合草草| 91精品啪在线观看国产60岁| www激情久久| 中文字幕亚洲在| 日韩国产精品久久| 成人午夜精品一区二区三区| 欧美艳星brazzers| 国产欧美一区二区三区网站| 一区av在线播放| 国内精品国产成人国产三级粉色| 成人毛片在线观看| 日韩欧美美女一区二区三区| 欧美高清在线精品一区| 五月天亚洲婷婷| 色综合激情久久| 国产精品欧美久久久久一区二区| 亚洲成人tv网| 欧美日韩国产色站一区二区三区| 欧美成人国产一区二区| 亚洲黄色录像片| 成人av午夜电影| 国产精品对白交换视频| 成人综合激情网| 精品88久久久久88久久久| 亚洲1区2区3区视频| 色婷婷国产精品综合在线观看| 精品国产电影一区二区| 久久se精品一区精品二区| 欧美一区二区三区免费视频| 亚洲韩国精品一区| 欧美在线不卡视频| 亚洲一区二区三区精品在线| 色94色欧美sute亚洲13| 日精品一区二区| 26uuu色噜噜精品一区二区| 青青草伊人久久| 久久久精品黄色| 色成年激情久久综合| 亚洲中国最大av网站| 日韩一区二区免费在线电影| 国产毛片精品视频| 中文字幕五月欧美| 欧美在线视频不卡| 国产一区91精品张津瑜| 亚洲伦理在线精品| 国产一区二区三区综合| 中文字幕成人在线观看| 91麻豆123| 精品一区二区在线免费观看| 国产精品毛片高清在线完整版| 欧美午夜一区二区三区免费大片| 日韩激情一二三区| 综合在线观看色| 国产日韩欧美亚洲| 欧美不卡激情三级在线观看| av成人老司机| 国产不卡在线一区| 美女视频一区二区三区| 亚洲精品日韩专区silk| 国产精品入口麻豆原神| 久久久久久久久伊人| 日韩美女一区二区三区四区| 色综合久久中文综合久久97| 国产成人精品亚洲日本在线桃色| 日韩精品成人一区二区三区| 亚洲动漫第一页| 亚洲国产裸拍裸体视频在线观看乱了 | 91首页免费视频| 成人av在线网站| 99久久精品99国产精品| 成人h动漫精品一区二区| 国产成人综合视频| 日韩精品一二三| 奇米色一区二区| 日韩国产欧美三级| 国产美女精品人人做人人爽| 国产尤物一区二区| 久久国内精品自在自线400部| 亚洲第一福利一区|