📄 adler32.asm
字号:
// 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 + -