📄 inffast.asm
字号:
// Listing generated by Microsoft (R) Optimizing Compiler Version 15.00.21022.08
.file "f:/Study/wincezip/DLL/inffast.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
.section .data
$SG78849:
string "invalid distance too far back\000"
.skip 2
$SG78885:
string "invalid distance code\000"
.skip 10
$SG78892:
string "invalid literal/length code\000"
.type inflate_fast# ,@function
.global inflate_fast#
.section .pdata
$T78932: data4 @imagerel($LN61@inflate_fa#)
data4 @imagerel($LN61@inflate_fa#+8768)
data4 @imagerel($T78930#)
.section .xdata
$T78930: data2 03H
data2 00H
data4 02H
string "\x05" //R1:prologue size 5
string "\xe0\x00\x0a" //P7:mem_stack_f time 0 size 10
string "\x61\xe7\x0c" //R3:body size 1639
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\inffast.c
.section .text
// Begin code for function: inflate_fast:
.proc inflate_fast#
.align 32
beg$ = 0
window$ = 8
last$ = 16
dcode$ = 24
whave$ = 32
in$ = 40
len$ = 48
bits$ = 52
lmask$ = 56
end$ = 64
lcode$ = 72
dist$ = 80
hold$ = 84
wsize$ = 88
this$ = 92
dmask$ = 96
from$ = 104
op$ = 112
out$ = 120
write$ = 128
state$ = 136
$T78928 = 144
$T78929 = 152
strm$ = 160
start$ = 168
inflate_fast:
// strm$ = r32
// start$ = r33
// Output regs: None
$LN61@inflate_fa:
// 70 : {
// 71 : struct inflate_state FAR *state;
// 72 : unsigned char FAR *in; /* local strm->next_in */
// 73 : unsigned char FAR *last; /* while in < last, enough input available */
// 74 : unsigned char FAR *out; /* local strm->next_out */
// 75 : unsigned char FAR *beg; /* inflate()'s initial strm->next_out */
// 76 : unsigned char FAR *end; /* while out < end, enough space available */
// 77 : #ifdef INFLATE_STRICT
// 78 : unsigned dmax; /* maximum distance from zlib header */
// 79 : #endif
// 80 : unsigned wsize; /* window size or zero if not using window */
// 81 : unsigned whave; /* valid bytes in the window */
// 82 : unsigned write; /* window write index */
// 83 : unsigned char FAR *window; /* allocated sliding window, if wsize != 0 */
// 84 : unsigned long hold; /* local strm->hold */
// 85 : unsigned bits; /* local strm->bits */
// 86 : code const FAR *lcode; /* local strm->lencode */
// 87 : code const FAR *dcode; /* local strm->distcode */
// 88 : unsigned lmask; /* mask for first level of length codes */
// 89 : unsigned dmask; /* mask for first level of distance codes */
// 90 : code this; /* retrieved table entry */
// 91 : unsigned op; /* code bits, operation, extra bits, or */
// 92 : /* window position, window bytes to copy */
// 93 : unsigned len; /* match length, unused bytes */
// 94 : unsigned dist; /* match distance */
// 95 : unsigned char FAR *from; /* where to copy match from */
// 96 :
// 97 : /* copy state to local variables */
// 98 : state = (struct inflate_state FAR *)strm->state;
// 99 : in = strm->next_in - OFF;
// 100 : last = in + (strm->avail_in - 5);
// 101 : out = strm->next_out - OFF;
// 102 : beg = out - (start - strm->avail_out);
// 103 : end = out + (strm->avail_out - 257);
// 104 : #ifdef INFLATE_STRICT
// 105 : dmax = state->dmax;
// 106 : #endif
// 107 : wsize = state->wsize;
// 108 : whave = state->whave;
// 109 : write = state->write;
// 110 : window = state->window;
// 111 : hold = state->hold;
// 112 : bits = state->bits;
// 113 : lcode = state->lencode;
// 114 : dcode = state->distcode;
// 115 : lmask = (1U << state->lenbits) - 1;
// 116 : dmask = (1U << state->distbits) - 1;
{ .mmi //R-Addr: 0X00
adds sp=-160, sp;; //70 cc:0, ffffff60H
adds r31=strm$, sp
adds r30=start$, sp;;
}
{ .mmb //R-Addr: 0X010
st8 [r31]=r32
st4 [r30]=r33
nop.b 0;;
}
{ .mib //R-Addr: 0X020
adds r29=strm$, sp //98 cc:0
adds r25=state$, sp //98 cc:0
nop.b 0;;
}
{ .mmi //R-Addr: 0X030
ld8 r28=[r29];; //98 cc:1
adds r27=40, r28 //98 cc:2, 00000028H
nop.i 0;;
}
{ .mmi //R-Addr: 0X040
ld8 r26=[r27];; //98 cc:3
st8 [r25]=r26 //98 cc:4
nop.i 0;;
}
{ .mib //R-Addr: 0X050
adds r22=strm$, sp //99 cc:0
adds r18=in$, sp //99 cc:0
nop.b 0;;
}
{ .mmi //R-Addr: 0X060
ld8 r21=[r22];; //99 cc:1
ld8 r20=[r21] //99 cc:3
nop.i 0;;
}
{ .mmi //R-Addr: 0X070
adds r19=-1, r20;; //99 cc:4
st8 [r18]=r19 //99 cc:5
nop.i 0;;
}
{ .mmi //R-Addr: 0X080
adds r17=strm$, sp //100 cc:0
adds r8=in$, sp //100 cc:0
adds r29=last$, sp;; //100 cc:0
}
{ .mmb //R-Addr: 0X090
ld8 r16=[r17] //100 cc:1
ld8 r31=[r8] //100 cc:1
nop.b 0;;
}
{ .mmi //R-Addr: 0X0a0
adds r15=8, r16;; //100 cc:2
ld4 r11=[r15] //100 cc:3
nop.i 0;;
}
{ .mmi //R-Addr: 0X0b0
adds r10=-5, r11;; //100 cc:4
nop.m 0
zxt4 r9=r10;; //100 cc:5
}
{ .mmi //R-Addr: 0X0c0
add r30=r31, r9;; //100 cc:6
st8 [r29]=r30 //100 cc:7
nop.i 0;;
}
{ .mib //R-Addr: 0X0d0
adds r28=strm$, sp //101 cc:0
adds r21=out$, sp //101 cc:0
nop.b 0;;
}
{ .mmi //R-Addr: 0X0e0
ld8 r27=[r28];; //101 cc:1
adds r26=16, r27 //101 cc:2
nop.i 0;;
}
{ .mmi //R-Addr: 0X0f0
ld8 r25=[r26];; //101 cc:3
adds r22=-1, r25 //101 cc:4
nop.i 0;;
}
{ .mmi //R-Addr: 0X0100
st8 [r21]=r22;; //101 cc:5
adds r20=strm$, sp //102 cc:0
adds r17=start$, sp //102 cc:0
}
{ .mib //R-Addr: 0X0110
adds r9=out$, sp //102 cc:0
adds r30=beg$, sp //102 cc:0
nop.b 0;;
}
{ .mmb //R-Addr: 0X0120
ld8 r19=[r20] //102 cc:1
ld4 r16=[r17] //102 cc:1
nop.b 0;;
}
{ .mib //R-Addr: 0X0130
ld8 r8=[r9] //102 cc:2
adds r18=24, r19 //102 cc:2
nop.b 0;;
}
{ .mmi //R-Addr: 0X0140
ld4 r15=[r18];; //102 cc:3
sub r11=r16, r15 //102 cc:4
nop.i 0;;
}
{ .mii //R-Addr: 0X0150
nop.m 0
zxt4 r10=r11;; //102 cc:5
sub r31=r8, r10;; //102 cc:6
}
{ .mmi //R-Addr: 0X0160
st8 [r30]=r31;; //102 cc:7
adds r29=strm$, sp //103 cc:0
adds r21=out$, sp //103 cc:0
}
{ .mmi //R-Addr: 0X0170
adds r18=end$, sp;; //103 cc:0
ld8 r28=[r29] //103 cc:1
nop.i 0
}
{ .mmi //R-Addr: 0X0180
ld8 r20=[r21];; //103 cc:1
adds r27=24, r28 //103 cc:2
nop.i 0;;
}
{ .mmi //R-Addr: 0X0190
ld4 r26=[r27];; //103 cc:3
adds r25=-257, r26 //103 cc:4, fffffeffH
nop.i 0;;
}
{ .mii //R-Addr: 0X01a0
nop.m 0
zxt4 r22=r25;; //103 cc:5
add r19=r20, r22;; //103 cc:6
}
{ .mmi //R-Addr: 0X01b0
st8 [r18]=r19;; //103 cc:7
adds r17=state$, sp //107 cc:0
adds r10=wsize$, sp;; //107 cc:0
}
{ .mmi //R-Addr: 0X01c0
ld8 r16=[r17];; //107 cc:1
adds r15=44, r16 //107 cc:2, 0000002cH
nop.i 0;;
}
{ .mmi //R-Addr: 0X01d0
ld4 r11=[r15];; //107 cc:3
st4 [r10]=r11 //107 cc:4
nop.i 0;;
}
{ .mib //R-Addr: 0X01e0
adds r9=state$, sp //108 cc:0
adds r29=whave$, sp //108 cc:0
nop.b 0;;
}
{ .mmi //R-Addr: 0X01f0
ld8 r8=[r9];; //108 cc:1
adds r31=48, r8 //108 cc:2, 00000030H
nop.i 0;;
}
{ .mmi //R-Addr: 0X0200
ld4 r30=[r31];; //108 cc:3
st4 [r29]=r30 //108 cc:4
nop.i 0;;
}
{ .mib //R-Addr: 0X0210
adds r28=state$, sp //109 cc:0
adds r22=write$, sp //109 cc:0
nop.b 0;;
}
{ .mmi //R-Addr: 0X0220
ld8 r27=[r28];; //109 cc:1
adds r26=52, r27 //109 cc:2, 00000034H
nop.i 0;;
}
{ .mmi //R-Addr: 0X0230
ld4 r25=[r26];; //109 cc:3
st4 [r22]=r25 //109 cc:4
nop.i 0;;
}
{ .mib //R-Addr: 0X0240
adds r21=state$, sp //110 cc:0
adds r17=window$, sp //110 cc:0
nop.b 0;;
}
{ .mmi //R-Addr: 0X0250
ld8 r20=[r21];; //110 cc:1
adds r19=56, r20 //110 cc:2, 00000038H
nop.i 0;;
}
{ .mmi //R-Addr: 0X0260
ld8 r18=[r19];; //110 cc:3
st8 [r17]=r18 //110 cc:4
nop.i 0;;
}
{ .mib //R-Addr: 0X0270
adds r16=state$, sp //111 cc:0
adds r9=hold$, sp //111 cc:0
nop.b 0;;
}
{ .mmi //R-Addr: 0X0280
ld8 r15=[r16];; //111 cc:1
adds r11=64, r15 //111 cc:2, 00000040H
nop.i 0;;
}
{ .mmi //R-Addr: 0X0290
ld4 r10=[r11];; //111 cc:3
st4 [r9]=r10 //111 cc:4
nop.i 0;;
}
{ .mib //R-Addr: 0X02a0
adds r8=state$, sp //112 cc:0
adds r28=bits$, sp //112 cc:0
nop.b 0;;
}
{ .mmi //R-Addr: 0X02b0
ld8 r31=[r8];; //112 cc:1
adds r30=68, r31 //112 cc:2, 00000044H
nop.i 0;;
}
{ .mmi //R-Addr: 0X02c0
ld4 r29=[r30];; //112 cc:3
st4 [r28]=r29 //112 cc:4
nop.i 0;;
}
{ .mib //R-Addr: 0X02d0
adds r27=state$, sp //113 cc:0
adds r21=lcode$, sp //113 cc:0
nop.b 0;;
}
{ .mmi //R-Addr: 0X02e0
ld8 r26=[r27];; //113 cc:1
adds r25=88, r26 //113 cc:2, 00000058H
nop.i 0;;
}
{ .mmi //R-Addr: 0X02f0
ld8 r22=[r25];; //113 cc:3
st8 [r21]=r22 //113 cc:4
nop.i 0;;
}
{ .mib //R-Addr: 0X0300
adds r20=state$, sp //114 cc:0
adds r16=dcode$, sp //114 cc:0
nop.b 0;;
}
{ .mmi //R-Addr: 0X0310
ld8 r19=[r20];; //114 cc:1
adds r18=96, r19 //114 cc:2, 00000060H
nop.i 0;;
}
{ .mmi //R-Addr: 0X0320
ld8 r17=[r18];; //114 cc:3
st8 [r16]=r17 //114 cc:4
nop.i 0;;
}
{ .mmi //R-Addr: 0X0330
adds r15=state$, sp //115 cc:0
mov r8=1 //115 cc:0
adds r29=lmask$, sp;; //115 cc:0
}
{ .mmi //R-Addr: 0X0340
ld8 r11=[r15];; //115 cc:1
adds r10=104, r11 //115 cc:2, 00000068H
nop.i 0;;
}
{ .mmi //R-Addr: 0X0350
ld4 r9=[r10];; //115 cc:3
nop.m 0
shl r31=r8, r9;; //115 cc:5
}
{ .mmi //R-Addr: 0X0360
adds r30=-1, r31;; //115 cc:8
st4 [r29]=r30 //115 cc:9
nop.i 0;;
}
{ .mmi //R-Addr: 0X0370
adds r28=state$, sp //116 cc:0
mov r22=1 //116 cc:0
adds r19=dmask$, sp;; //116 cc:0
}
{ .mmi //R-Addr: 0X0380
ld8 r27=[r28];; //116 cc:1
adds r26=108, r27 //116 cc:2, 0000006cH
nop.i 0;;
}
{ .mmi //R-Addr: 0X0390
ld4 r25=[r26];; //116 cc:3
nop.m 0
shl r21=r22, r25;; //116 cc:5
}
{ .mmi //R-Addr: 0X03a0
adds r20=-1, r21;; //116 cc:8
st4 [r19]=r20 //116 cc:9
nop.i 0;;
}
$LN54@inflate_fa:
// 117 :
// 118 : /* decode literals and length/distances until end-of-block or not enough
// 119 : input data or output space */
// 120 : do {
// 121 : if (bits < 15) {
{ .mmi //R-Addr: 0X03b0
adds r18=bits$, sp;; //121 cc:0
ld4 r17=[r18] //121 cc:1
nop.i 0;;
}
{ .mmb //R-Addr: 0X03c0
cmp4.leu.unc p14,p15=15, r17 //121 cc:2
nop.m 0
(p14) br.cond.dptk.many $LN51@inflate_fa#;; //121 cc:2
}
// 122 : hold += (unsigned long)(PUP(in)) << bits;
// 123 : bits += 8;
// 124 : hold += (unsigned long)(PUP(in)) << bits;
// 125 : bits += 8;
{ .mmi //R-Addr: 0X03d0
adds r16=in$, sp //122 cc:0
adds r10=in$, sp //122 cc:0
adds r9=in$, sp //122 cc:0
}
{ .mmi //R-Addr: 0X03e0
adds r30=bits$, sp //122 cc:0
adds r27=hold$, sp //122 cc:0
adds r22=hold$, sp;; //122 cc:0
}
{ .mmi //R-Addr: 0X03f0
ld8 r15=[r16];; //122 cc:1
adds r11=1, r15 //122 cc:2
nop.i 0;;
}
{ .mmb //R-Addr: 0X0400
st8 [r10]=r11 //122 cc:3
ld8 r8=[r9] //122 cc:3
nop.b 0
}
{ .mmi //R-Addr: 0X0410
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -