亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
久久麻豆一区二区| 欧美激情一区二区三区在线| 成人动漫在线一区| 国产成人久久精品77777最新版本| 日本不卡一二三| 美洲天堂一区二卡三卡四卡视频| 午夜精品国产更新| 强制捆绑调教一区二区| 亚洲一区在线观看免费观看电影高清| 亚洲精选一二三| 亚洲午夜三级在线| 免费成人美女在线观看.| 日本欧美韩国一区三区| 久久国产精品99久久人人澡| 国产曰批免费观看久久久| 国产一区二区三区观看| 成人激情午夜影院| 色av综合在线| 91精品国产综合久久久久| 日韩三级精品电影久久久| 精品精品欲导航| 中文字幕不卡的av| 亚洲高清在线精品| 国内精品不卡在线| a在线欧美一区| 欧美日韩高清一区二区| www欧美成人18+| 亚洲精品视频在线| 美女网站色91| 成人高清伦理免费影院在线观看| 91首页免费视频| 精品入口麻豆88视频| 国产精品久久久久影院亚瑟| 亚洲大尺度视频在线观看| 裸体在线国模精品偷拍| 91在线观看下载| 日韩一级大片在线观看| 国产精品久久毛片av大全日韩| 亚洲国产一区二区视频| 国产米奇在线777精品观看| 色综合久久精品| 2023国产精品自拍| 亚洲国产精品自拍| 成人激情免费视频| 精品国产乱码久久久久久影片| 亚洲欧美另类小说| 国产精品中文字幕欧美| 欧美日本免费一区二区三区| 国产精品毛片久久久久久| 日本中文字幕一区| 91黄色激情网站| 国产清纯美女被跳蛋高潮一区二区久久w | 日韩美女主播在线视频一区二区三区 | 欧美视频日韩视频| 国产欧美一区二区三区沐欲| 日本美女视频一区二区| 欧美视频一区二区| 亚洲日本青草视频在线怡红院| 美女看a上一区| 欧美日韩精品一区二区天天拍小说| 国产精品久久一卡二卡| 国产美女一区二区三区| 日韩欧美www| 石原莉奈在线亚洲三区| 欧美色图天堂网| 亚洲婷婷综合色高清在线| 国产成都精品91一区二区三| 精品福利一二区| 日本亚洲最大的色成网站www| 欧美午夜视频网站| 悠悠色在线精品| 日本精品免费观看高清观看| 国产精品护士白丝一区av| 丁香婷婷综合色啪| 国产欧美综合色| av中文字幕不卡| 亚洲欧美日韩系列| 欧美在线免费观看视频| 亚洲成年人网站在线观看| 欧美三级电影一区| 日本aⅴ亚洲精品中文乱码| 欧美一区二区视频免费观看| 蜜乳av一区二区| 久久久久国产一区二区三区四区| 国产精品亚洲第一区在线暖暖韩国| 久久久久高清精品| 不卡的电影网站| 亚洲另类中文字| 4438x成人网最大色成网站| 美女免费视频一区二区| 国产亚洲一区二区三区| 成人免费高清视频| 一区2区3区在线看| 日韩欧美不卡一区| 国产98色在线|日韩| 自拍偷拍亚洲欧美日韩| 欧美性猛交xxxx黑人交| 琪琪一区二区三区| 国产精品久久久久三级| 欧美日韩在线免费视频| 日本少妇一区二区| 国产精品久久久久婷婷二区次| 91在线观看视频| 免费三级欧美电影| 成人免费在线视频| 欧美一区二视频| 成人免费看片app下载| 亚洲国产精品久久久男人的天堂| 精品免费99久久| 色综合天天做天天爱| 精品一区二区综合| 亚洲一区精品在线| 欧美va亚洲va香蕉在线| 91玉足脚交白嫩脚丫在线播放| 日本美女一区二区| 亚洲丝袜精品丝袜在线| 精品福利一区二区三区免费视频| 成人毛片视频在线观看| 美女视频黄免费的久久| 日韩毛片一二三区| 久久久久久久精| 欧美精品tushy高清| 91在线国内视频| 日本视频在线一区| 一区二区中文字幕在线| 欧美r级在线观看| 欧美在线观看视频在线| 白白色 亚洲乱淫| 韩国成人在线视频| 青青草国产成人av片免费| 亚洲欧美日韩久久精品| 欧美国产97人人爽人人喊| 欧美理论电影在线| 91国产免费看| 国产精品羞羞答答xxdd| 久久精品久久99精品久久| 亚洲国产一区二区三区| 亚洲精品成人精品456| 中文字幕制服丝袜一区二区三区 | 免费观看成人鲁鲁鲁鲁鲁视频| 国产精品久99| 国产精品全国免费观看高清 | 色综合天天综合色综合av| 国产成人综合自拍| 黑人巨大精品欧美黑白配亚洲| 日本欧美一区二区三区乱码 | 日韩一二三四区| 欧美日韩在线播放三区四区| av亚洲精华国产精华精华| 国产成人亚洲精品青草天美| 国内偷窥港台综合视频在线播放| 日本亚洲最大的色成网站www| 亚洲成av人片一区二区| 亚洲高清免费视频| 伊人夜夜躁av伊人久久| 一区二区三区日韩欧美| 亚洲制服丝袜av| 午夜电影一区二区三区| 日本中文字幕一区| 激情综合网av| 国产高清在线观看免费不卡| 国产成人av一区二区| caoporen国产精品视频| 色悠久久久久综合欧美99| 色域天天综合网| 8x福利精品第一导航| 欧美精品一区二区三区视频| 久久久久9999亚洲精品| 国产精品视频一区二区三区不卡| 中文字幕一区二区三区蜜月 | 精品视频在线看| 91麻豆精品国产91| 久久久久青草大香线综合精品| 久久久噜噜噜久久人人看| 中文字幕在线观看不卡| 一区二区三区国产| 日韩电影在线免费看| 国内精品嫩模私拍在线| 99re成人精品视频| 91麻豆精品国产91久久久更新时间 | 一区二区三区精品视频| 日韩av电影免费观看高清完整版| 九九九久久久精品| 91浏览器入口在线观看| 欧美成人一级视频| 国产精品超碰97尤物18| 日韩黄色小视频| 成人性生交大片免费看视频在线| 91免费观看视频在线| 日韩一区二区三区av| 国产精品网站在线| 天天操天天综合网| 99久久精品免费看国产免费软件| 91黄色激情网站| 国产情人综合久久777777| 同产精品九九九| jizzjizzjizz欧美| 欧美第一区第二区| 亚洲国产欧美一区二区三区丁香婷| 美国毛片一区二区三区|