/* pnggccrd.c - mixed C/assembler version of utilities to read a PNG file
*
* For Intel x86 CPU (Pentium-MMX or later) and GNU C compiler.
*
* See http://www.intel.com/drg/pentiumII/appnotes/916/916.htm
* and http://www.intel.com/drg/pentiumII/appnotes/923/923.htm
* for Intel's performance analysis of the MMX vs. non-MMX code.
*
* Last changed in libpng 1.2.15 January 5, 2007
* For conditions of distribution and use, see copyright notice in png.h
* Copyright (c) 1998-2008 Glenn Randers-Pehrson
* Copyright (c) 1998, Intel Corporation
*
* Based on MSVC code contributed by Nirav Chhatrapati, Intel Corp., 1998.
* Interface to libpng contributed by Gilles Vollant, 1999.
* GNU C port by Greg Roelofs, 1999-2001.
*
* Lines 2350-4300 converted in place with intel2gas 1.3.1:
*
* intel2gas -mdI pnggccrd.c.partially-msvc -o pnggccrd.c
*
* and then cleaned up by hand. See http://hermes.terminal.at/intel2gas/ .
*
* NOTE: A sufficiently recent version of GNU as (or as.exe under DOS/Windows)
* is required to assemble the newer MMX instructions such as movq.
* For djgpp, see
*
* ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bnu281b.zip
*
* (or a later version in the same directory). For Linux, check your
* distribution's web site(s) or try these links:
*
* http://rufus.w3.org/linux/RPM/binutils.html
* http://www.debian.org/Packages/stable/devel/binutils.html
* ftp://ftp.slackware.com/pub/linux/slackware/slackware/slakware/d1/
* binutils.tgz
*
* For other platforms, see the main GNU site:
*
* ftp://ftp.gnu.org/pub/gnu/binutils/
*
* Version 2.5.2l.15 is definitely too old...
*/
/*
* TEMPORARY PORTING NOTES AND CHANGELOG (mostly by Greg Roelofs)
* =====================================
*
* 19991006:
* - fixed sign error in post-MMX cleanup code (16- & 32-bit cases)
*
* 19991007:
* - additional optimizations (possible or definite):
* x [DONE] write MMX code for 64-bit case (pixel_bytes == 8) [not tested]
* - write MMX code for 48-bit case (pixel_bytes == 6)
* - figure out what's up with 24-bit case (pixel_bytes == 3):
* why subtract 8 from width_mmx in the pass 4/5 case?
* (only width_mmx case) (near line 1606)
* x [DONE] replace pixel_bytes within each block with the true
* constant value (or are compilers smart enough to do that?)
* - rewrite all MMX interlacing code so it's aligned with
* the *beginning* of the row buffer, not the end. This
* would not only allow one to eliminate half of the memory
* writes for odd passes (that is, pass == odd), it may also
* eliminate some unaligned-data-access exceptions (assuming
* there's a penalty for not aligning 64-bit accesses on
* 64-bit boundaries). The only catch is that the "leftover"
* pixel(s) at the end of the row would have to be saved,
* but there are enough unused MMX registers in every case,
* so this is not a problem. A further benefit is that the
* post-MMX cleanup code (C code) in at least some of the
* cases could be done within the assembler block.
* x [DONE] the "v3 v2 v1 v0 v7 v6 v5 v4" comments are confusing,
* inconsistent, and don't match the MMX Programmer's Reference
* Manual conventions anyway. They should be changed to
* "b7 b6 b5 b4 b3 b2 b1 b0," where b0 indicates the byte that
* was lowest in memory (e.g., corresponding to a left pixel)
* and b7 is the byte that was highest (e.g., a right pixel).
*
* 19991016:
* - Brennan's Guide notwithstanding, gcc under Linux does *not*
* want globals prefixed by underscores when referencing them--
* i.e., if the variable is const4, then refer to it as const4,
* not _const4. This seems to be a djgpp-specific requirement.
* Also, such variables apparently *must* be declared outside
* of functions; neither static nor automatic variables work if
* defined within the scope of a single function, but both
* static and truly global (multi-module) variables work fine.
*
* 19991023:
* - fixed png_combine_row() non-MMX replication bug (odd passes only?)
* - switched from string-concatenation-with-macros to cleaner method of
* renaming global variables for djgpp--i.e., always use prefixes in
* inlined assembler code (== strings) and conditionally rename the
* variables, not the other way around. Hence _const4, _mask8_0, etc.
*
* 19991024:
* - fixed mmxsupport()/png_do_read_interlace() first-row bug
* This one was severely weird: even though mmxsupport() doesn't touch
* ebx (where "row" pointer was stored), it nevertheless managed to zero
* the register (even in static/non-fPIC code--see below), which in turn
* caused png_do_read_interlace() to return prematurely on the first row of
* interlaced images (i.e., without expanding the interlaced pixels).
* Inspection of the generated assembly code didn't turn up any clues,
* although it did point at a minor optimization (i.e., get rid of
* mmx_supported_local variable and just use eax). Possibly the CPUID
* instruction is more destructive than it looks? (Not yet checked.)
* - "info gcc" was next to useless, so compared fPIC and non-fPIC assembly
* listings... Apparently register spillage has to do with ebx, since
* it's used to index the global offset table. Commenting it out of the
* input-reg lists in png_combine_row() eliminated compiler barfage, so
* ifdef'd with __PIC__ macro: if defined, use a global for unmask
*
* 19991107:
* - verified CPUID clobberage: 12-char string constant ("GenuineIntel",
* "AuthenticAMD", etc.) placed in ebx:ecx:edx. Still need to polish.
*
* 19991120:
* - made "diff" variable (now "_dif") global to simplify conversion of
* filtering routines (running out of regs, sigh). "diff" is still used
* in interlacing routines, however.
* - fixed up both versions of mmxsupport() (ORIG_THAT_USED_TO_CLOBBER_EBX
* macro determines which is used); original not yet tested.
*
* 20000213:
* - when compiling with gcc, be sure to use -fomit-frame-pointer
*
* 20000319:
* - fixed a register-name typo in png_do_read_interlace(), default (MMX) case,
* pass == 4 or 5, that caused visible corruption of interlaced images
*
* 20000623:
* - Various problems were reported with gcc 2.95.2 in the Cygwin environment,
* many of the form "forbidden register 0 (ax) was spilled for class AREG."
* This is explained at http://gcc.gnu.org/fom_serv/cache/23.html, and
* Chuck Wilson supplied a patch involving dummy output registers. See
* http://sourceforge.net/bugs/?func=detailbug&bug_id=108741&group_id=5624
* for the original (anonymous) SourceForge bug report.
*
* 20000706:
* - Chuck Wilson passed along these remaining gcc 2.95.2 errors:
* pnggccrd.c: In function `png_combine_row':
* pnggccrd.c:525: more than 10 operands in `asm'
* pnggccrd.c:669: more than 10 operands in `asm'
* pnggccrd.c:828: more than 10 operands in `asm'
* pnggccrd.c:994: more than 10 operands in `asm'
* pnggccrd.c:1177: more than 10 operands in `asm'
* They are all the same problem and can be worked around by using the
* global _unmask variable unconditionally, not just in the -fPIC case.
* Reportedly earlier versions of gcc also have the problem with more than
* 10 operands; they just don't report it. Much strangeness ensues, etc.
*
* 20000729:
* - enabled png_read_filter_row_mmx_up() (shortest remaining unconverted
* MMX routine); began converting png_read_filter_row_mmx_sub()
* -
没有合适的资源?快使用搜索试试~ 我知道了~
BCGCBPro_1501
共2000个文件
png:1258个
h:330个
cpp:305个
5星 · 超过95%的资源 需积分: 9 26 下载量 20 浏览量
2011-11-02
09:36:20
上传
评论
收藏 7.3MB RAR 举报
温馨提示
BCGControlBarPro 15.0.1,找了好久才找到的,就不用多说了,只含源码工程,不含例子工程,需要的到官网下载。
资源推荐
资源详情
资源评论
收起资源包目录
BCGCBPro_1501 (2000个子文件)
logo24.bmp 67KB
SD2010base.bmp 49KB
RibbonPrintL.bmp 24KB
SDCenter.bmp 23KB
SD2008base.bmp 23KB
menuimg-pro24.bmp 9KB
RibbonPrintS.bmp 8KB
palette-pro32.bmp 6KB
PrintPreview-pro32.bmp 6KB
SD2010Left.bmp 6KB
SD2010Top.bmp 6KB
SD2010Right.bmp 6KB
SD2010Bottom.bmp 6KB
SD2010Center.bmp 6KB
SD2008right.bmp 5KB
SD2008left.bmp 5KB
SD2008righth.bmp 5KB
SD2008top.bmp 5KB
SD2008toph.bmp 5KB
SD2008lefth.bmp 5KB
SD2008bottom.bmp 5KB
SD2008bottomh.bmp 5KB
NavFrames16.bmp 4KB
SD2008centerh.bmp 4KB
SD2008center.bmp 4KB
taskpane32.bmp 3KB
SDleft.bmp 3KB
SDright.bmp 3KB
SDtop.bmp 3KB
SDbottom.bmp 3KB
NavButtons16.bmp 3KB
calendar_icons.bmp 2KB
browse32.bmp 2KB
SDmiddle.bmp 2KB
menuimg-pro.bmp 2KB
appClock.bmp 1KB
ribbon.bmp 1KB
print-pro.bmp 1KB
copy-pro.bmp 1KB
palette-pro.bmp 1KB
PrintPreview-pro.bmp 1KB
copy-pro32.bmp 824B
help-pro32.bmp 824B
print-pro32.bmp 824B
appClockM.bmp 782B
font-pro.bmp 718B
up-pro32.bmp 536B
delete-pro32.bmp 536B
new-pro32.bmp 536B
down-pro32.bmp 536B
browse.bmp 478B
taskpane.bmp 406B
calendar.bmp 398B
picker.bmp 322B
appUpDown.bmp 278B
help-pro.bmp 246B
mail-pro.bmp 230B
url-pro.bmp 230B
search.bmp 222B
up-pro.bmp 214B
down-pro.bmp 214B
delete-pro.bmp 214B
new-pro.bmp 214B
Clear.bmp 190B
pnggccrd.c 235KB
pngrtran.c 146KB
pngvcrd.c 144KB
pngrutil.c 93KB
pngwutil.c 86KB
deflate.c 65KB
inflate.c 49KB
pngwrite.c 49KB
pngread.c 48KB
pngpread.c 47KB
pngtest.c 47KB
trees.c 45KB
pngset.c 41KB
pngget.c 27KB
png.c 25KB
pngtrans.c 21KB
pngwtran.c 18KB
pngmem.c 17KB
inftrees.c 14KB
crc32.c 14KB
inffast.c 13KB
pngerror.c 10KB
pngwio.c 8KB
zutil.c 8KB
pngrio.c 6KB
adler32.c 5KB
compress.c 3KB
BCGPGridCtrl.cpp 643KB
BCGPEditCtrl.cpp 346KB
BCGPVisualManager2007.cpp 288KB
BCGPToolBar.cpp 207KB
BCGPVisualManager.cpp 191KB
BCGPChartSeries.cpp 167KB
BCGPRibbonBar.cpp 165KB
BCGPChartVisualObject.cpp 149KB
BCGPChartAxis.cpp 149KB
共 2000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
资源评论
- merryxmashere2015-03-29内容比较完整,包括程序和源代码
- cy_ygs2012-12-06不错,看看是否源码齐全
- cjw56202792014-05-20还不错,蛮全的
fayifu
- 粉丝: 5
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功