⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adler32.asm

📁 zlib dll in wince 5.0 parfrom
💻 ASM
📖 第 1 页 / 共 5 页
字号:
// Listing generated by Microsoft (R) Optimizing Compiler Version 15.00.21022.08 

	.file	"f:/Study/wincezip/DLL/adler32.c"
	.radix	D
	.section	.text,	"ax", "progbits"
	.align 32
	.section	.pdata,	"a", "progbits"
	.align 4
	.section	.xdata,	"a", "progbits"
	.align 8
	.section	.text$zz,	"ax", "progbits"
	.align 16
	.section	.pdata,	"a", "progbits"
	.align 4
	.section	.text$zy,	"ax", "progbits"
	.align 16
	.section	.pdata,	"a", "progbits"
	.align 4
	.section	.data,	"wa", "progbits"
	.align 16
	.section	.rdata,	"a", "progbits"
	.align 16
	.section	.bss,	"wa", "nobits"
	.align 16
	.section	.debug$S,	"ax", "progbits"
	.align 16
	.section	$$TYPES,	"ax", "progbits"
	.align 16
	.section	.tls$,	"was", "progbits"
	.align 16
	.section	.sdata,	"was", "progbits"
	.align 16
	.section	.sbss,	"was", "nobits"
	.align 16
	.section	.srdata,	"as", "progbits"
	.align 16
	.section	.rdata,	"a", "progbits"
	.align 16
	.type	adler32#	,@function 
        .global adler32#
	.section	.pdata
$T78741: data4	@imagerel($LN21@adler32#)
	data4	@imagerel($LN21@adler32#+6256)
	data4	@imagerel($T78739#)
	.section	.xdata
$T78739: data2	03H
	data2	00H
	data4	02H
	string	"\x08"		//R1:prologue size 8
	string	"\xe0\x00\x02"	//P7:mem_stack_f time 0 size 2
	string	"\x61\x8d\x09"	//R3:body size 1165
	string	"\x81"		//B1:label_state 1
	string	"\xc0\x02"	//B2:ecount 0 time 2
	string	"\x00\x00\x00\x00\x00\x00" //padding
// Function compile flags: /Odtp
// File f:\study\wincezip\dll\adler32.c
	.section	.text

// Begin code for function: adler32:
	.proc	adler32#
	.align 32
n$	= 0
sum2$	= 4
adler$	= 16
buf$	= 24
len$	= 32
adler32:	 
// adler$ = r32
// buf$ = r33
// len$ = r34
// Output regs: None
$LN21@adler32:

// 61   : {
// 62   :     unsigned long sum2;
// 63   :     unsigned n;
// 64   : 
// 65   :     /* split Adler-32 into component sums */
// 66   :     sum2 = (adler >> 16) & 0xffff;
// 67   :     adler &= 0xffff;
// 68   : 
// 69   :     /* in case user likes doing a byte at a time, keep it fast */
// 70   :     if (len == 1) {

 {   .mmi  //R-Addr: 0X00 
	adds	sp=-32, sp;;				    //61 	cc:0
	adds	r31=adler$, sp
	adds	r30=buf$, sp
 }
 {   .mmi  //R-Addr: 0X010 
	adds	r29=len$, sp;;
	st4	[r31]=r32
	nop.i	 0
 }
 {   .mmi  //R-Addr: 0X020 
	st8	[r30]=r33;;
	st4	[r29]=r34
	nop.i	 0;;
 }
 {   .mib  //R-Addr: 0X030 
	adds	r28=adler$, sp				    //66 	cc:0
	adds	r25=sum2$, sp				    //66 	cc:0
	nop.b	 0;;
 }
 {   .mmi  //R-Addr: 0X040 
	ld4	r27=[r28];;				    //66 	cc:1
	nop.m	 0
	extr.u	r26=r27, 16, 16;;			    //66 	cc:2
 }
 {   .mmi  //R-Addr: 0X050 
	st4	[r25]=r26;;				    //66 	cc:3
	adds	r22=adler$, sp				    //67 	cc:0
	adds	r19=adler$, sp;;			    //67 	cc:0
 }
 {   .mmi  //R-Addr: 0X060 
	ld4	r21=[r22];;				    //67 	cc:1
	nop.m	 0
	zxt2	r20=r21;;				    //67 	cc:2
 }
 {   .mmi  //R-Addr: 0X070 
	st4	[r19]=r20;;				    //67 	cc:3
	adds	r18=len$, sp				    //70 	cc:0
	nop.i	 0;;
 }
 {   .mmi  //R-Addr: 0X080 
	ld4	r17=[r18];;				    //70 	cc:1
	cmp4.ne.unc p14,p15=1, r17			    //70 	cc:2
	nop.i	 0
 }
 {   .mmb  //R-Addr: 0X090 
	nop.m	 0
	nop.m	 0
  (p14)	br.cond.dptk.few $LN18@adler32#;;		    //70 	cc:2
 }

// 71   :         adler += buf[0];
// 72   :         if (adler >= BASE)

 {   .mmi  //R-Addr: 0X0a0 
	adds	r16=buf$, sp				    //71 	cc:0
	adds	r10=adler$, sp				    //71 	cc:0
	adds	r31=adler$, sp;;			    //71 	cc:0
 }
 {   .mmb  //R-Addr: 0X0b0 
	ld8	r15=[r16]				    //71 	cc:1
	ld4	r9=[r10]				    //71 	cc:1
	nop.b	 0;;
 }
 {   .mmi  //R-Addr: 0X0c0 
	ld1	r11=[r15];;				    //71 	cc:3
	add	r8=r9, r11				    //71 	cc:4
	nop.i	 0;;
 }
 {   .mmi  //R-Addr: 0X0d0 
	st4	[r31]=r8;;				    //71 	cc:5
	adds	r30=adler$, sp				    //72 	cc:0
	mov	r28=65521;;				    //72 	cc:0, 0000fff1H
 }
 {   .mmi  //R-Addr: 0X0e0 
	ld4	r29=[r30];;				    //72 	cc:1
	cmp4.gtu.unc p14,p15=r28, r29			    //72 	cc:2
	nop.i	 0
 }
 {   .mmb  //R-Addr: 0X0f0 
	nop.m	 0
	nop.m	 0
  (p14)	br.cond.dptk.few $LN17@adler32#;;		    //72 	cc:2
 }

// 73   :             adler -= BASE;

 {   .mmi  //R-Addr: 0X0100 
	adds	r27=adler$, sp				    //73 	cc:0
	mov	r25=65521				    //73 	cc:0, 0000fff1H
	adds	r21=adler$, sp;;			    //73 	cc:0
 }
 {   .mmi  //R-Addr: 0X0110 
	ld4	r26=[r27];;				    //73 	cc:1
	sub	r22=r26, r25				    //73 	cc:2
	nop.i	 0;;
 }
 {   .mmb  //R-Addr: 0X0120 
	st4	[r21]=r22				    //73 	cc:3
	nop.m	 0
	nop.b	 0;;
 }
$LN17@adler32:

// 74   :         sum2 += adler;
// 75   :         if (sum2 >= BASE)

 {   .mmi  //R-Addr: 0X0130 
	adds	r20=sum2$, sp				    //74 	cc:0
	adds	r18=adler$, sp				    //74 	cc:0
	adds	r15=sum2$, sp;;				    //74 	cc:0
 }
 {   .mmb  //R-Addr: 0X0140 
	ld4	r19=[r20]				    //74 	cc:1
	ld4	r17=[r18]				    //74 	cc:1
	nop.b	 0;;
 }
 {   .mmi  //R-Addr: 0X0150 
	add	r16=r19, r17;;				    //74 	cc:2
	st4	[r15]=r16				    //74 	cc:3
	nop.i	 0;;
 }
 {   .mib  //R-Addr: 0X0160 
	adds	r11=sum2$, sp				    //75 	cc:0
	mov	r9=65521				    //75 	cc:0, 0000fff1H
	nop.b	 0;;
 }
 {   .mmi  //R-Addr: 0X0170 
	ld4	r10=[r11];;				    //75 	cc:1
	cmp4.gtu.unc p14,p15=r9, r10			    //75 	cc:2
	nop.i	 0
 }
 {   .mmb  //R-Addr: 0X0180 
	nop.m	 0
	nop.m	 0
  (p14)	br.cond.dptk.few $LN16@adler32#;;		    //75 	cc:2
 }

// 76   :             sum2 -= BASE;

 {   .mmi  //R-Addr: 0X0190 
	adds	r8=sum2$, sp				    //76 	cc:0
	mov	r30=65521				    //76 	cc:0, 0000fff1H
	adds	r28=sum2$, sp;;				    //76 	cc:0
 }
 {   .mmi  //R-Addr: 0X01a0 
	ld4	r31=[r8];;				    //76 	cc:1
	sub	r29=r31, r30				    //76 	cc:2
	nop.i	 0;;
 }
 {   .mmb  //R-Addr: 0X01b0 
	st4	[r28]=r29				    //76 	cc:3
	nop.m	 0
	nop.b	 0;;
 }
$LN16@adler32:

// 77   :         return adler | (sum2 << 16);

 {   .mib  //R-Addr: 0X01c0 
	adds	r27=sum2$, sp				    //77 	cc:0
	adds	r22=adler$, sp				    //77 	cc:0
	nop.b	 0;;
 }
 {   .mmb  //R-Addr: 0X01d0 
	ld4	r26=[r27]				    //77 	cc:1
	ld4	r21=[r22]				    //77 	cc:1
	nop.b	 0;;
 }
 {   .mii  //R-Addr: 0X01e0 
	nop.m	 0
	shl	r25=r26, 16;;				    //77 	cc:2
	or	r8=r21, r25				    //77 	cc:3
 }
 {   .mmb  //R-Addr: 0X01f0 
	nop.m	 0
	nop.m	 0
	br.cond.sptk.few $LN19@adler32#;;		    //77 	cc:3
 }
$LN18@adler32:

// 78   :     }
// 79   : 
// 80   :     /* initial Adler-32 value (deferred check for len == 1 speed) */
// 81   :     if (buf == Z_NULL)

 {   .mmi  //R-Addr: 0X0200 
	adds	r20=buf$, sp;;				    //81 	cc:0
	ld8	r19=[r20]				    //81 	cc:1
	nop.i	 0;;
 }
 {   .mmb  //R-Addr: 0X0210 
	cmp.ne.unc p14,p15=r0, r19			    //81 	cc:2
	nop.m	 0
  (p14)	br.cond.dptk.few $LN15@adler32#;;		    //81 	cc:2
 }

// 82   :         return 1L;

 {   .mmb  //R-Addr: 0X0220 
	mov	r8=1					    //82 	cc:0
	nop.m	 0
	br.cond.sptk.few $LN19@adler32#;;		    //82 	cc:0
 }
$LN15@adler32:

// 83   : 
// 84   :     /* in case short lengths are provided, keep it somewhat fast */
// 85   :     if (len < 16) {

 {   .mmi  //R-Addr: 0X0230 
	adds	r18=len$, sp;;				    //85 	cc:0
	ld4	r17=[r18]				    //85 	cc:1
	nop.i	 0;;
 }
 {   .mmb  //R-Addr: 0X0240 
	cmp4.leu.unc p14,p15=16, r17			    //85 	cc:2
	nop.m	 0
  (p14)	br.cond.dptk.few $LN10@adler32#;;		    //85 	cc:2
 }
$LN13@adler32:

// 86   :         while (len--) {

 {   .mmi  //R-Addr: 0X0250 
	adds	r11=len$, sp				    //86 	cc:0
	adds	r16=len$, sp				    //86 	cc:0
	adds	r8=len$, sp;;				    //86 	cc:0
 }
 {   .mmb  //R-Addr: 0X0260 
	ld4	r10=[r11]				    //86 	cc:1
	ld4	r15=[r16]				    //86 	cc:1
	nop.b	 0;;
 }
 {   .mib  //R-Addr: 0X0270 
	adds	r9=-1, r10				    //86 	cc:2
	cmp4.eq.unc p14,p15=r0, r15			    //86 	cc:2
	nop.b	 0;;
 }
 {   .mmb  //R-Addr: 0X0280 
	st4	[r8]=r9					    //86 	cc:3
	nop.m	 0
  (p14)	br.cond.dptk.few $LN12@adler32#;;		    //86 	cc:3
 }

// 87   :             adler += *buf++;
// 88   :             sum2 += adler;
// 89   :         }

 {   .mmi  //R-Addr: 0X0290 
	adds	r31=buf$, sp				    //87 	cc:0
	adds	r28=adler$, sp				    //87 	cc:0
	adds	r25=adler$, sp				    //87 	cc:0
 }
 {   .mib  //R-Addr: 0X02a0 
	adds	r22=buf$, sp				    //87 	cc:0
	adds	r19=buf$, sp				    //87 	cc:0
	nop.b	 0;;
 }
 {   .mmb  //R-Addr: 0X02b0 
	ld8	r30=[r31]				    //87 	cc:1
	ld4	r27=[r28]				    //87 	cc:1
	nop.b	 0;;
 }
 {   .mmi  //R-Addr: 0X02c0 
	ld1	r29=[r30];;				    //87 	cc:3
	add	r26=r27, r29				    //87 	cc:4
	nop.i	 0;;
 }
 {   .mmb  //R-Addr: 0X02d0 
	st4	[r25]=r26				    //87 	cc:5
	ld8	r21=[r22]				    //87 	cc:5
	nop.b	 0;;
 }
 {   .mmi  //R-Addr: 0X02e0 
	adds	r20=1, r21;;				    //87 	cc:6
	st8	[r19]=r20				    //87 	cc:7
	nop.i	 0;;
 }
 {   .mmi  //R-Addr: 0X02f0 
	adds	r18=sum2$, sp				    //88 	cc:0
	adds	r16=adler$, sp				    //88 	cc:0
	adds	r10=sum2$, sp;;				    //88 	cc:0
 }
 {   .mmb  //R-Addr: 0X0300 
	ld4	r17=[r18]				    //88 	cc:1
	ld4	r15=[r16]				    //88 	cc:1
	nop.b	 0;;
 }
 {   .mmi  //R-Addr: 0X0310 
	add	r11=r17, r15;;				    //88 	cc:2
	st4	[r10]=r11				    //88 	cc:3
	nop.i	 0;;
 }
 {   .mmb  //R-Addr: 0X0320 
	nop.m	 0
	nop.m	 0
	br.cond.sptk.few $LN13@adler32#;;		    //89 	cc:0
 }
$LN12@adler32:

// 90   :         if (adler >= BASE)

 {   .mib  //R-Addr: 0X0330 
	adds	r9=adler$, sp				    //90 	cc:0
	mov	r31=65521				    //90 	cc:0, 0000fff1H
	nop.b	 0;;
 }
 {   .mmi  //R-Addr: 0X0340 
	ld4	r8=[r9];;				    //90 	cc:1
	cmp4.gtu.unc p14,p15=r31, r8			    //90 	cc:2
	nop.i	 0
 }
 {   .mmb  //R-Addr: 0X0350 
	nop.m	 0
	nop.m	 0
  (p14)	br.cond.dptk.many $LN11@adler32#;;		    //90 	cc:2
 }

// 91   :             adler -= BASE;

 {   .mmi  //R-Addr: 0X0360 
	adds	r30=adler$, sp				    //91 	cc:0
	mov	r28=65521				    //91 	cc:0, 0000fff1H
	adds	r26=adler$, sp;;			    //91 	cc:0
 }
 {   .mmi  //R-Addr: 0X0370 
	ld4	r29=[r30];;				    //91 	cc:1
	sub	r27=r29, r28				    //91 	cc:2
	nop.i	 0;;
 }
 {   .mmb  //R-Addr: 0X0380 
	st4	[r26]=r27				    //91 	cc:3
	nop.m	 0
	nop.b	 0;;
 }
$LN11@adler32:

// 92   :         MOD4(sum2);             /* only added so many BASE's */
// 93   :         return adler | (sum2 << 16);

 {   .mmi  //R-Addr: 0X0390 
	adds	r25=sum2$, sp				    //92 	cc:0
	mov	r21=65521				    //92 	cc:0, 0000fff1H
	mov	r20=65501				    //92 	cc:0, 0000ffddH
 }
 {   .mmi  //R-Addr: 0X03a0 
	adds	r18=sum2$, sp;;				    //92 	cc:0
	ld4	r22=[r25]				    //92 	cc:1
	cmp.eq.unc p15,p0=0, r21			    //92 	cc:1
 }
 {   .mmi  //R-Addr: 0X03b0 
	setf.sig f7=r21					    //92 	cc:1
	setf.exp f10=r20				    //92 	cc:1
	sub	r20=r0, r21, r20;;			    //92 	cc:1
 }
 {   .mib  //R-Addr: 0X03c0 
	setf.sig f6=r22					    //92 	cc:2
  (p15)	break.i	 1					    //92 	cc:2
	nop.b	 0;;
 }
 {   .mfb  //R-Addr: 0X03d0 
	nop.m	 0
	fcvt.xuf.s1 f9=f7				    //92 	cc:7
	nop.b	 0;;
 }
 {   .mfb  //R-Addr: 0X03e0 
	nop.m	 0
	fcvt.xuf.s1 f8=f6				    //92 	cc:8
	nop.b	 0;;
 }
 {   .mfb  //R-Addr: 0X03f0 
	nop.m	 0
	frcpa.s1 f11,p6=f8, f9				    //92 	cc:12
	nop.b	 0;;
 }
 {   .mfb  //R-Addr: 0X0400 
	nop.m	 0
  (p6)	fma.s1	f12=f8, f11, f0				    //92 	cc:16
	nop.b	 0
 }
 {   .mfb  //R-Addr: 0X0410 
	nop.m	 0
  (p6)	fnma.s1	f11=f9, f11, f1				    //92 	cc:16
	nop.b	 0;;
 }
 {   .mmb  //R-Addr: 0X0420 
	setf.sig f9=r20, f9				    //92 	cc:17
	nop.m	 0
	nop.b	 0;;
 }
 {   .mfb  //R-Addr: 0X0430 
	nop.m	 0
  (p6)	fma.s1	f8=f11, f11, f10, f8			    //92 	cc:20
	nop.b	 0
 }
 {   .mfb  //R-Addr: 0X0440 
	nop.m	 0
  (p6)	fma.s1	f12=f11, f12, f12			    //92 	cc:20
	nop.b	 0;;
 }
 {   .mfb  //R-Addr: 0X0450 
	nop.m	 0
  (p6)	fma.s1	f11=f8, f12, f12, f11			    //92 	cc:24
	nop.b	 0;;
 }
 {   .mfb  //R-Addr: 0X0460 
	nop.m	 0
	fcvt.fxu.trunc.s1 f8=f11, f8			    //92 	cc:28
	nop.b	 0;;
 }
 {   .mfb  //R-Addr: 0X0470 
	nop.m	 0
	xma.l	f11=f8, f9, f6, f11			    //92 	cc:32
	nop.b	 0;;
 }
 {   .mmi  //R-Addr: 0X0480 
	getf.sig r19=f11;;				    //92 	cc:36
	st4	[r18]=r19				    //92 	cc:41
	nop.i	 0;;
 }
 {   .mib  //R-Addr: 0X0490 
	adds	r17=sum2$, sp				    //93 	cc:0
	adds	r11=adler$, sp				    //93 	cc:0
	nop.b	 0;;
 }
 {   .mmb  //R-Addr: 0X04a0 
	ld4	r16=[r17]				    //93 	cc:1
	ld4	r10=[r11]				    //93 	cc:1
	nop.b	 0;;
 }
 {   .mii  //R-Addr: 0X04b0 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -