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

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

?? pngvcrd.c

?? 君正早期ucos系統(只有早期的才不沒有打包成庫),MPLAYER,文件系統,圖片解碼,瀏覽,電子書,錄音,想學ucos,識貨的人就下吧 russblock fmradio explore set
?? 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一区二区三区免费野_久草精品视频
欧美一级在线视频| 亚洲欧美日韩国产另类专区| 国产欧美日韩三级| 亚洲国产成人porn| 懂色av一区二区三区蜜臀| 91精品久久久久久蜜臀| 国产精品第13页| 国产美女主播视频一区| 欧美日韩你懂得| 国产精品成人在线观看| 国产福利不卡视频| 制服丝袜中文字幕亚洲| 亚洲一级电影视频| 99国内精品久久| 国产精品国产三级国产aⅴ中文| 麻豆精品视频在线观看免费| 欧美日韩免费高清一区色橹橹 | 在线成人高清不卡| 国产女人18毛片水真多成人如厕| 秋霞影院一区二区| 欧美日韩一级二级三级| 亚洲自拍偷拍av| 色诱视频网站一区| 亚洲欧美日韩国产综合在线| av一二三不卡影片| 亚洲私人黄色宅男| 91免费观看在线| 一色屋精品亚洲香蕉网站| 成人福利视频在线| 国产精品每日更新| 99re亚洲国产精品| 一区二区免费看| 欧美在线三级电影| 亚洲午夜在线观看视频在线| 欧美日韩国产精品自在自线| 视频一区二区中文字幕| 9191久久久久久久久久久| 婷婷综合在线观看| 日韩欧美在线1卡| 国产麻豆精品theporn| 久久久精品tv| 91小视频在线免费看| 一区二区三区自拍| 9191久久久久久久久久久| 久久精品国产久精国产爱| 国产偷国产偷精品高清尤物| 波多野结衣视频一区| 亚洲午夜精品17c| 777午夜精品视频在线播放| 久久国产精品免费| 中文字幕的久久| 色屁屁一区二区| 偷拍一区二区三区四区| 精品播放一区二区| 99久久婷婷国产精品综合| 亚洲在线观看免费视频| 精品国产人成亚洲区| 成人激情免费电影网址| 亚洲第一电影网| 久久久午夜电影| 欧美亚日韩国产aⅴ精品中极品| 日本vs亚洲vs韩国一区三区二区 | 日韩欧美成人一区二区| 高清视频一区二区| 洋洋av久久久久久久一区| 日韩一区二区在线播放| 99在线热播精品免费| 亚洲午夜私人影院| 久久这里只有精品首页| 欧洲日韩一区二区三区| 国产原创一区二区| 亚洲高清久久久| 国产女主播在线一区二区| 欧美久久一二区| 成人蜜臀av电影| 美日韩一级片在线观看| 亚洲精品日日夜夜| 国产亚洲制服色| 欧美精品自拍偷拍| 99久久久久久99| 激情深爱一区二区| 亚洲国产日韩一级| 国产欧美日韩三级| 欧美电视剧在线看免费| 欧美视频日韩视频| 91亚洲大成网污www| 国产成人aaa| 看电影不卡的网站| 性久久久久久久| 亚洲婷婷综合久久一本伊一区 | 亚洲国产高清在线观看视频| 欧美一级午夜免费电影| 欧美午夜宅男影院| 91蜜桃婷婷狠狠久久综合9色| 久久精品二区亚洲w码| 亚洲国产成人tv| 亚洲精选视频在线| 国产精品久久久久久久久快鸭 | 日韩欧美国产成人一区二区| 91在线视频免费91| 国产成人高清在线| 国产精品自拍一区| 精品夜夜嗨av一区二区三区| 视频一区中文字幕国产| 亚洲愉拍自拍另类高清精品| 亚洲视频一区在线| 亚洲少妇30p| 中文字幕一区二区三区不卡在线| 久久女同性恋中文字幕| 精品国产91洋老外米糕| 精品国精品国产尤物美女| 精品久久久久久久久久久院品网 | 九九热在线视频观看这里只有精品| 亚洲一区二区3| 性久久久久久久久久久久| 一区二区三区国产豹纹内裤在线| 亚洲精品免费在线播放| 亚洲视频在线观看三级| 亚洲精品菠萝久久久久久久| 亚洲六月丁香色婷婷综合久久| 亚洲精品中文字幕在线观看| 亚洲人妖av一区二区| 一区二区三区.www| 天堂va蜜桃一区二区三区漫画版| 午夜欧美2019年伦理| 久久综合综合久久综合| 国产精品一级黄| 成人a免费在线看| 在线看一区二区| 欧美一区二区三区在| 精品国产免费人成电影在线观看四季| 日韩免费观看高清完整版在线观看| 欧美成人aa大片| 日本一区二区三区四区在线视频| 亚洲图片激情小说| 首页国产欧美日韩丝袜| 国产伦精一区二区三区| 99riav一区二区三区| 欧美日韩国产另类一区| 久久综合狠狠综合久久综合88| 国产欧美日韩三区| 亚洲高清中文字幕| 国产乱码精品一品二品| 色视频成人在线观看免| 91精品久久久久久久久99蜜臂| 国产亚洲成aⅴ人片在线观看| 亚洲精品视频一区二区| 麻豆91在线观看| 91免费观看视频在线| 日韩免费一区二区| 亚洲男人的天堂在线观看| 日本成人在线网站| 成人精品国产福利| 在线播放日韩导航| 国产精品成人免费在线| 美女一区二区视频| 色拍拍在线精品视频8848| 精品卡一卡二卡三卡四在线| 亚洲精品大片www| 国产精一区二区三区| 欧美日本国产一区| 综合色天天鬼久久鬼色| 久久国产尿小便嘘嘘尿| 色又黄又爽网站www久久| 精品999在线播放| 亚洲高清视频的网址| 成熟亚洲日本毛茸茸凸凹| 日韩三级在线观看| 亚洲午夜免费视频| 成人av在线资源网站| 2023国产精品自拍| 日日摸夜夜添夜夜添国产精品 | 成人黄色免费短视频| 日韩午夜电影在线观看| 亚洲尤物在线视频观看| 99久久久无码国产精品| 国产欧美一区二区三区鸳鸯浴| 爽好多水快深点欧美视频| 色哟哟国产精品| 日韩毛片精品高清免费| 国产成人午夜精品5599| 久久中文娱乐网| 久久精品国产精品亚洲综合| 91麻豆精品国产91久久久久| 亚洲伦在线观看| 91在线国产观看| 中文字幕欧美一区| 99久久国产免费看| 中文字幕不卡三区| 成人a免费在线看| 国产精品国产三级国产有无不卡 | 精品夜夜嗨av一区二区三区| 欧美日韩精品专区| 一区二区三区日韩| 欧美伊人久久大香线蕉综合69| 国产精品传媒在线| 91麻豆免费观看| 亚洲激情六月丁香| 91视频在线看| 亚洲激情校园春色|