📄 inflate.asm
字号:
$LN5@inflateIni:
// 172 : state->wrap = (windowBits >> 4) + 1;
// 173 : #ifdef GUNZIP
// 174 : if (windowBits < 48) windowBits &= 15;
{ .mib //R-Addr: 0X0380
adds r17=windowBits$, sp //172 cc:0
adds r10=state$, sp //172 cc:0
nop.b 0;;
}
{ .mmb //R-Addr: 0X0390
ld4 r16=[r17] //172 cc:1
ld8 r9=[r10] //172 cc:1
nop.b 0;;
}
{ .mii //R-Addr: 0X03a0
adds r8=8, r9 //172 cc:2
extr r15=r16, 4, 28;; //172 cc:2
adds r11=1, r15;; //172 cc:3
}
{ .mmi //R-Addr: 0X03b0
st4 [r8]=r11;; //172 cc:4
adds r31=windowBits$, sp //174 cc:0
nop.i 0;;
}
{ .mmi //R-Addr: 0X03c0
ld4 r30=[r31];; //174 cc:1
cmp4.le.unc p14,p15=48, r30 //174 cc:2, 00000030H
nop.i 0
}
{ .mmb //R-Addr: 0X03d0
nop.m 0
nop.m 0
(p14) br.cond.dptk.few $LN4@inflateIni#;; //174 cc:2
}
// 174 : if (windowBits < 48) windowBits &= 15;
{ .mib //R-Addr: 0X03e0
adds r29=windowBits$, sp //174 cc:3
adds r26=windowBits$, sp //174 cc:3
nop.b 0;;
}
{ .mmi //R-Addr: 0X03f0
ld4 r28=[r29];; //174 cc:4
and r27=15, r28 //174 cc:5
nop.i 0;;
}
{ .mmb //R-Addr: 0X0400
st4 [r26]=r27 //174 cc:6
nop.m 0
nop.b 0;;
}
$LN4@inflateIni:
// 175 : #endif
// 176 : }
// 177 : if (windowBits < 8 || windowBits > 15) {
{ .mmi //R-Addr: 0X0410
adds r25=windowBits$, sp;; //177 cc:0
ld4 r22=[r25] //177 cc:1
nop.i 0;;
}
{ .mmb //R-Addr: 0X0420
cmp4.gt.unc p14,p15=8, r22 //177 cc:2
nop.m 0
(p14) br.cond.dptk.few $LN1@inflateIni#;; //177 cc:2
}
// 177 : if (windowBits < 8 || windowBits > 15) {
{ .mmi //R-Addr: 0X0430
adds r21=windowBits$, sp;; //177 cc:3
ld4 r20=[r21] //177 cc:4
nop.i 0;;
}
{ .mmb //R-Addr: 0X0440
cmp4.ge.unc p14,p15=15, r20 //177 cc:5
nop.m 0
(p14) br.cond.dptk.few $LN2@inflateIni#;; //177 cc:5
}
$LN1@inflateIni:
// 178 : ZFREE(strm, state);
// 179 : strm->state = Z_NULL;
// 180 : return Z_STREAM_ERROR;
{ .mmi //R-Addr: 0X0450
adds r15=strm$, sp //178 cc:0
adds r18=strm$, sp //178 cc:0
adds r19=state$, sp;; //178 cc:0
}
{ .mmb //R-Addr: 0X0460
ld8 r11=[r15] //178 cc:1
ld8 r17=[r18] //178 cc:1
nop.b 0;;
}
{ .mmi //R-Addr: 0X0470
ld8 r40=[r19] //178 cc:2
adds r10=56, r11 //178 cc:2, 00000038H
adds r16=64, r17;; //178 cc:2, 00000040H
}
{ .mmb //R-Addr: 0X0480
ld8 r9=[r10] //178 cc:3
ld8 r39=[r16] //178 cc:3
nop.b 0;;
}
{ .mmi //R-Addr: 0X0490
ld8 r8=[r9], 8;; //178 cc:5
ld8 gp=[r9] //178 cc:6
mov b6=r8 //178 cc:6
}
{ .mmb //R-Addr: 0X04a0
nop.m 0
nop.m 0
br.call.dptk.many b0=b6;; //178 cc:6
}
{ .mmi //R-Addr: 0X04b0
mov gp=r38;; //178 cc:17
adds r31=strm$, sp //179 cc:0
nop.i 0;;
}
{ .mmi //R-Addr: 0X04c0
ld8 r30=[r31];; //179 cc:1
adds r29=40, r30 //179 cc:2, 00000028H
nop.i 0;;
}
{ .mmb //R-Addr: 0X04d0
st8 [r29]=r0 //179 cc:4
mov r8=-2 //180 cc:0
br.cond.sptk.few $LN12@inflateIni#;; //180 cc:0
}
$LN2@inflateIni:
// 181 : }
// 182 : state->wbits = (unsigned)windowBits;
// 183 : state->window = Z_NULL;
// 184 : return inflateReset(strm);
{ .mib //R-Addr: 0X04e0
adds r28=state$, sp //182 cc:0
adds r25=windowBits$, sp //182 cc:0
nop.b 0;;
}
{ .mmb //R-Addr: 0X04f0
ld8 r27=[r28] //182 cc:1
ld4 r22=[r25] //182 cc:1
nop.b 0;;
}
{ .mmi //R-Addr: 0X0500
adds r26=40, r27;; //182 cc:2, 00000028H
st4 [r26]=r22 //182 cc:3
nop.i 0;;
}
{ .mmi //R-Addr: 0X0510
adds r21=state$, sp;; //183 cc:0
ld8 r20=[r21] //183 cc:1
nop.i 0;;
}
{ .mmi //R-Addr: 0X0520
adds r19=56, r20;; //183 cc:2, 00000038H
st8 [r19]=r0 //183 cc:3
nop.i 0;;
}
{ .mmi //R-Addr: 0X0530
adds r18=strm$, sp;; //184 cc:0
ld8 r39=[r18] //184 cc:1
nop.i 0
}
{ .mmb //R-Addr: 0X0540
nop.m 0
nop.m 0
br.call.sptk.few b0=inflateReset#;; //184 cc:1
}
{ .mib //R-Addr: 0X0550
adds r17=$T79734, sp //184 cc:12
adds r16=$T79734, sp //184 cc:12
nop.b 0;;
}
{ .mmb //R-Addr: 0X0560
st4 [r17]=r8 //184 cc:13
ld4 r8=[r16] //184 cc:13
nop.b 0;;
}
$LN12@inflateIni:
// 185 : }
{ .mii //R-Addr: 0X0570
adds sp=64, sp //185 cc:0, 00000040H
mov.ret b0=r36;; //185 cc:0
mov.i ar.pfs=r37 //185 cc:1
}
{ .mmb //R-Addr: 0X0580
nop.m 0
nop.m 0
br.ret.sptk.many b0;; //185 cc:1
}
// End code for function:
.endp inflateInit2_#
.type inflateInit_# ,@function
.global inflateInit_#
.section .pdata
$T79746: data4 @imagerel($LN3@inflateIni@2#)
data4 @imagerel($LN3@inflateIni@2#+176)
data4 @imagerel($T79744#)
.section .xdata
.skip 8
$T79744: data2 03H
data2 00H
data4 02H
string "\x0b" //R1:prologue size 11
string "\xe6\x00" //P7:pfs_when time 0
string "\xb1\x24" //P3:pfs_gr 36
string "\xe4\x01" //P7:rp_when time 1
string "\xb0\xa3" //P3:rp_gr 35
string "\xe0\x02\x03" //P7:mem_stack_f time 2 size 3
string "\x36" //R1:body size size 22
string "\x81" //B1:label_state 1
string "\xc0\x05" //B2:ecount 0 time 5
// Function compile flags: /Odtp
.section .text
// Begin code for function: inflateInit_:
.proc inflateInit_#
.align 32
$T79743 = 16
strm$ = 32
version$ = 40
stream_size$ = 48
inflateInit_:
// strm$ = r32
// version$ = r33
// stream_size$ = r34
// Output regs: r37-r40
$LN3@inflateIni@2:
// 191 : {
// 192 : return inflateInit2_(strm, DEF_WBITS, version, stream_size);
// 193 : }
{ .mii //R-Addr: 0X00
alloc r36=3, 2, 4, 0 //191 cc:0
mov r35=b0 //191 cc:0
adds sp=-48, sp;; //191 cc:0, ffffffd0H
}
{ .mmi //R-Addr: 0X010
ld8.nta r2=[sp] //191 cc:1
adds r31=strm$, sp
adds r30=version$, sp
}
{ .mmi //R-Addr: 0X020
adds r29=stream_size$, sp;;
st8 [r31]=r32
nop.i 0
}
{ .mmi //R-Addr: 0X030
st8 [r30]=r33;;
st4 [r29]=r34
nop.i 0;;
}
{ .mmi //R-Addr: 0X040
adds r28=stream_size$, sp //192 cc:0
adds r27=version$, sp //192 cc:0
adds r26=strm$, sp //192 cc:0
}
{ .mmi //R-Addr: 0X050
mov r38=15;; //192 cc:0
ld4 r40=[r28] //192 cc:1
nop.i 0;;
}
{ .mmb //R-Addr: 0X060
ld8 r39=[r27] //192 cc:2
ld8 r37=[r26] //192 cc:2
br.call.sptk.few b0=inflateInit2_#;; //192 cc:2
}
{ .mib //R-Addr: 0X070
adds r25=$T79743, sp //192 cc:13
adds r22=$T79743, sp //192 cc:13
nop.b 0;;
}
{ .mmb //R-Addr: 0X080
st4 [r25]=r8 //192 cc:14
ld4 r8=[r22] //192 cc:14
nop.b 0;;
}
{ .mii //R-Addr: 0X090
adds sp=48, sp //193 cc:0, 00000030H
mov.ret b0=r35;; //193 cc:0
mov.i ar.pfs=r36 //193 cc:1
}
{ .mmb //R-Addr: 0X0a0
nop.m 0
nop.m 0
br.ret.sptk.many b0;; //193 cc:1
}
// End code for function:
.endp inflateInit_#
.type inflate# ,@function
.global inflate#
.type inflate_fast# ,@function
.global inflate_fast#
.type inflate_table# ,@function
.global inflate_table#
.type memcpy# ,@function
.global memcpy#
.type adler32# ,@function
.global adler32#
.type crc32# ,@function
.global crc32#
.section .pdata
$T79797: data4 @imagerel($LN512@inflate#)
data4 @imagerel($LN512@inflate#+32944)
data4 @imagerel($T79795#)
.section .xdata
.skip 16
$T79795: data2 03H
data2 00H
data4 03H
string "\x0a" //R1:prologue size 10
string "\xe6\x00" //P7:pfs_when time 0
string "\xb1\x23" //P3:pfs_gr 35
string "\xe0\x01\x0e" //P7:mem_stack_f time 1 size 14
string "\xe4\x02" //P7:rp_when time 2
string "\xb0\xa2" //P3:rp_gr 34
string "\x61\x97\x30" //R3:body size 6167
string "\x81" //B1:label_state 1
string "\xc0\x05" //B2:ecount 0 time 5
string "\x00\x00\x00\x00\x00\x00" //padding
// Function compile flags: /Odtp
.section .text
// Begin code for function: inflate:
.proc inflate#
.align 32
put$ = 16
last$ = 24
have$ = 28
in$ = 32
len$ = 36
bits$ = 40
left$ = 44
next$ = 48
ret$ = 56
hold$ = 60
hbuf$ = 64
this$ = 68
copy$ = 72
from$ = 80
out$ = 88
state$ = 96
$T79764 = 104
$T79765 = 108
$T79766 = 112
$T79767 = 116
$T79768 = 120
$T79769 = 124
$T79770 = 128
$T79771 = 132
$T79772 = 136
$T79773 = 140
$T79774 = 144
$T79775 = 148
$T79776 = 152
$T79777 = 156
$T79778 = 160
$T79779 = 164
$T79780 = 168
$T79781 = 172
$T79782 = 176
$T79783 = 180
$T79784 = 184
$T79785 = 188
$T79786 = 192
$T79787 = 196
$T79788 = 200
$T79789 = 204
$T79790 = 208
$T79791 = 212
$T79792 = 216
strm$ = 224
flush$ = 232
inflate:
// strm$ = r32
// flush$ = r33
// Output regs: r37-r42
$LN512@inflate:
// 557 : {
// 558 : struct inflate_state FAR *state;
// 559 : unsigned char FAR *next; /* next input */
// 560 : unsigned char FAR *put; /* next output */
// 561 : unsigned have, left; /* available input and output */
// 562 : unsigned long hold; /* bit buffer */
// 563 : unsigned bits; /* bits in bit buffer */
// 564 : unsigned in, out; /* save starting available input and output */
// 565 : unsigned copy; /* number of stored or match bytes to copy */
// 566 : unsigned char FAR *from; /* where to copy match bytes from */
// 567 : code this; /* current decoding table entry */
// 568 : code last; /* parent table entry */
// 569 : unsigned len; /* length to copy for repeats, bits to drop */
// 570 : int ret; /* return code */
// 571 : #ifdef GUNZIP
// 572 : unsigned char hbuf[4]; /* buffer for gzip header crc calculation */
// 573 : #endif
// 574 : static const unsigned short order[19] = /* permutation of code lengths */
// 575 : {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
// 576 :
// 577 : if (strm == Z_NULL || strm->state == Z_NULL || strm->next_out == Z_NULL ||
// 578 : (strm->next_in == Z_NULL && strm->avail_in != 0))
{ .mmi //R-Addr: 0X00
alloc r35=2, 3, 6, 0 //557 cc:0
adds sp=-224, sp //557 cc:0, ffffff20H
mov r34=b0 //557 cc:0
}
{ .mmi //R-Addr: 0X010
mov r36=gp;; //557 cc:0
ld8.nta r2=[sp] //557 cc:1
adds r31=strm$, sp
}
{ .mmi //R-Addr: 0X020
adds r30=flush$, sp;;
st8 [r31]=r32
nop.i 0
}
{ .mmi //R-Addr: 0X030
st4 [r30]=r33;;
adds r29=strm$, sp //578 cc:0
nop.i 0;;
}
{ .mmi //R-Addr: 0X040
ld8 r28=[r29];; //578 cc:1
cmp.eq.unc p14,p15=r0, r28 //578 cc:2
nop.i 0
}
{ .mmb //R-Addr: 0X050
nop.m 0
nop.m 0
(p14) br.cond.dptk.few $LN492@inflate#;; //578 cc:2
}
// 578 : (strm->next_in == Z_NULL && strm->avail_in != 0))
{ .mmi //R-Addr: 0X060
adds r27=strm$, sp;; //578 cc:3
ld8 r26=[r27] //578 cc:4
nop.i 0;;
}
{ .mmi //R-Addr: 0X070
adds r25=40, r26;; //578 cc:5, 00000028H
ld8 r22=[r25] //578 cc:6
nop.i 0;;
}
{ .mmb //R-Addr: 0X080
cmp.eq.unc p14,p15=r0, r22 //578 cc:7
nop.m 0
(p14) br.cond.dptk.few $LN492@inflate#;; //578 cc:7
}
// 578 : (strm->next_in == Z_NULL && strm->avail_in != 0))
{ .mmi //R-Addr: 0X090
adds r21=strm$, sp;; //578 cc:8
ld8 r20=[r21] //578 cc:9
nop.i 0;;
}
{ .mmi //R-Addr: 0X0a0
adds r19=16, r20;; //578 cc:10
ld8 r18=[r19] //578 cc:11
nop.i 0;;
}
{ .mmb //R-Addr: 0X0b0
cmp.eq.unc p14,p15=r0, r18 //578 cc:12
nop.m 0
(p14) br.cond.dptk.few $LN492@inflate#;; //578 cc:12
}
// 578 : (strm->next_in == Z_NULL && strm->avail_in != 0))
{ .mmi //R-Addr: 0X0c0
adds r17=strm$, sp;; //578 cc:13
ld8 r16=[r17] //578 cc:14
nop.i 0;;
}
{ .mmi //R-Addr: 0X0d0
ld8 r15=[r16];; //578 cc:16
cmp.ne.unc p14,p15=r0, r15 //578 cc:17
nop.i 0
}
{ .mmb //R-Addr: 0X0e0
nop.m 0
nop.m 0
(p14) br.cond.dptk.few $LN493@inflate#;; //578 cc:17
}
// 578 : (strm->next_in == Z_NULL && strm->avail_in != 0))
{ .mmi //R-Addr: 0X0f0
adds r11=strm$, sp;; //578 cc:18
ld8 r10=[r11] //578 cc:19
nop.i 0;;
}
{ .mmi //R-Addr: 0X0100
adds r9=8, r10;; //578 cc:20
ld4 r8=[r9] //578 cc:21
nop.i 0;;
}
{ .mmb //R-Addr: 0X0110
cmp4.eq.unc p14,p15=r0, r8 //578 cc:22
nop.m 0
(p14) br.cond.dptk.few $LN493@inflate#;; //578 cc:22
}
$LN492@inflate:
// 579 : return Z_STREAM_ERROR;
{ .mmb //R-Addr: 0X0120
mov r8=-2 //579 cc:0
nop.m 0
br.cond.sptk.few $LN494@inflate#;; //579 cc:0
}
$LN493@inflate:
// 580 :
// 581 : state = (struct inflate_state FAR *)strm->state;
// 582 : if (state->mode == TYPE) state->mode = TYPEDO; /* skip check */
{ .mib //R-Addr: 0X0130
adds r31=strm$, sp //581 cc:0
adds r27=state$, sp //581 cc:0
nop.b 0;;
}
{ .mmi //R-Addr: 0X0140
ld8 r30=[r31];; //581 cc:1
adds r29=40, r30 //581 cc:2, 00000028H
nop.i 0;;
}
{ .mmi //R-Addr: 0X0150
ld8 r28=[r29];; //581 cc:3
st8 [r27]=r28 //581 cc:4
nop.i 0;;
}
{ .mmi //R-Addr: 0X0160
adds r26=state$, sp;; //582 cc:0
ld8 r25=[r26] //582 cc:1
nop.i 0;;
}
{ .mmi //R-Addr: 0X0170
ld4 r22=[r25];; //582 cc:3
cmp4.ne.unc p14,p15=11, r22 //582 cc:4
nop.i 0
}
{ .mmb //R-Addr: 0X0180
nop.m 0
nop.m 0
(p14) br.cond.dptk.many $LN490@inflate#;; //582 cc:4
}
// 582 : if (state->mode == TYPE) state->mode = TYPEDO; /* skip check */
{ .mib //R-Addr: 0X0190
adds r21=state$, sp //582 cc:5
mov r19=12 //582 cc:5
nop.b 0;;
}
{ .mmi //R-Addr: 0X01a0
ld8 r20=[r21];; //582 cc:6
st4 [r20]=r19 //582 cc:7
nop.i 0;;
}
$LN490@inflate:
// 583 : LOAD();
{ .mmi //R-Addr: 0X01b0
adds r18=strm$, sp //583 cc:0
adds r11=put$, sp //583 cc:0
adds r10=strm$, sp //583 cc:0
}
{ .mmi //R-Addr: 0X01c0
adds r30=left$, sp //583 cc:0
adds r29=strm$, sp //583 cc:0
adds r26=next$, sp;; //583 cc:0
}
{ .mmi //R-Addr: 0X01d0
ld8 r17=[r18] //583 cc:1
adds r25=strm$, sp //583 cc:1
adds r19=have$, sp //583 cc:1
}
{ .mmi //R-Addr: 0X01e0
adds r18=state$, sp;; //583 cc:1
adds r16=16, r17 //583 cc:2
nop.i 0;;
}
{ .mmi //R-Addr: 0X01f0
ld8 r15=[r16];; //583 cc:3
st8 [r11]=r15 //583 cc:4
adds r11=hold$, sp //583 cc:4
}
{ .mii //R-Addr: 0X0200
ld8 r9=[r10] //583 cc:4
adds r10=state$, sp;; //583 cc:4
adds r8=24, r9;; //583 cc:5
}
{ .mmi //R-Addr: 0X0210
ld4 r31=[r8];; //583 cc:6
st4 [r30]=r31 //583 cc:7
adds r30=bits$, sp //583 cc:7
}
{ .mmi //R-Addr: 0X0220
ld8 r28=[r29];; //583 cc:7
ld8 r27=[r28] //583 cc:9
nop.i 0;;
}
{ .mmb //R-Addr: 0X0230
st8 [r26]=r27 //583 cc:10
ld8 r22=[r25] //583 cc:10
nop.b 0;;
}
{ .mmi //R-Addr: 0X0240
adds r21=8, r22;; //583 cc:11
ld4 r20=[r21] //583 cc:12
nop.i 0;;
}
{ .mmb //R-Addr: 0X0250
st4 [r19]=r20 //583 cc:13
ld8 r17=[r18] //583 cc:13
nop.b 0;;
}
{ .mmi //R-Addr: 0X0260
adds r16=64, r17;; //583 cc:14, 00000040H
ld4 r15=[r16] //583 cc:15
nop.i 0;;
}
{ .mmb //R-Addr: 0X0270
st4 [r11]=r15 //583 cc:16
ld8 r9=[r10] //583 cc:16
nop.b 0;;
}
{ .mmi //R-Addr: 0X0280
adds r8=68, r9;; //583 cc:17, 00000044H
ld4 r31=[r8] //583 cc:18
nop.i 0;;
}
{ .mib //R-Addr: 0X0290
st4 [r30]=r31 //583 cc:19
cmp4.ne.unc p14,p15=r0, r0 //583 cc:19
(p14) br.cond.dptk.many $LN490@inflate#;; //583 cc:19
}
// 584 : in = have;
// 585 : out = left;
// 586 : ret = Z_OK;
{ .mib //R-Addr: 0X02a0
adds r29=have$, sp //584 cc:0
adds r27=in$, sp //584 cc:0
nop.b 0;;
}
{ .mmi //R-Addr: 0X02b0
ld4 r28=[r29];; //584 cc:1
st4 [r27]=r28 //584 cc:2
nop.i 0;;
}
{ .mib //R-Addr: 0X02c0
adds r26=left$, sp //585 cc:0
adds r22=out$, sp //585 cc:0
nop.b 0;;
}
{ .mmi //R-Addr: 0X02d0
ld4 r25=[r26];; //585 cc:1
st4 [r22]=r25 //585 cc:2
nop.i 0;;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -