📄 compress.asm
字号:
// Listing generated by Microsoft (R) Optimizing Compiler Version 15.00.21022.08
.file "f:/Study/wincezip/DLL/compress.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 .sdata
$SG78687:
string "1.2.3\000"
.type compress2# ,@function
.global compress2#
.type deflateEnd# ,@function
.global deflateEnd#
.type deflate# ,@function
.global deflate#
.type deflateInit_# ,@function
.global deflateInit_#
.section .pdata
$T78735: data4 @imagerel($LN8@compress2#)
data4 @imagerel($LN8@compress2#+880)
data4 @imagerel($T78733#)
.section .xdata
$T78733: data2 03H
data2 00H
data4 03H
string "\x10" //R1:prologue size 16
string "\xe6\x00" //P7:pfs_when time 0
string "\xb1\x26" //P3:pfs_gr 38
string "\xe0\x01\x0a" //P7:mem_stack_f time 1 size 10
string "\xe4\x02" //P7:rp_when time 2
string "\xb0\xa5" //P3:rp_gr 37
string "\x61\x95\x01" //R3:body size 149
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
// File f:\study\wincezip\dll\compress.c
.section .text
// Begin code for function: compress2:
.proc compress2#
.align 32
stream$ = 16
err$ = 104
$T78729 = 108
$T78730 = 112
$T78731 = 116
$T78732 = 120
dest$ = 128
destLen$ = 136
source$ = 144
sourceLen$ = 152
level$ = 160
compress2:
// dest$ = r32
// destLen$ = r33
// source$ = r34
// sourceLen$ = r35
// level$ = r36
// Output regs: r40-r43
$LN8@compress2:
// 28 : {
// 29 : z_stream stream;
// 30 : int err;
// 31 :
// 32 : stream.next_in = (Bytef*)source;
// 33 : stream.avail_in = (uInt)sourceLen;
// 34 : #ifdef MAXSEG_64K
// 35 : /* Check for source > 64K on 16-bit machine: */
// 36 : if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
// 37 : #endif
// 38 : stream.next_out = dest;
// 39 : stream.avail_out = (uInt)*destLen;
// 40 : if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
{ .mmi //R-Addr: 0X00
alloc r38=5, 3, 4, 0 //28 cc:0
adds sp=-160, sp //28 cc:0, ffffff60H
mov r37=b0 //28 cc:0
}
{ .mmi //R-Addr: 0X010
mov r39=gp;; //28 cc:0
ld8.nta r2=[sp] //28 cc:1
adds r31=dest$, sp
}
{ .mmi //R-Addr: 0X020
adds r30=destLen$, sp
adds r29=source$, sp
adds r28=sourceLen$, sp;;
}
{ .mmi //R-Addr: 0X030
st8 [r31]=r32
st8 [r30]=r33
adds r27=level$, sp;;
}
{ .mmb //R-Addr: 0X040
st8 [r29]=r34
st4 [r28]=r35
nop.b 0;;
}
{ .mmi //R-Addr: 0X050
st4 [r27]=r36;;
adds r26=source$, sp //32 cc:0
adds r22=stream$, sp;; //32 cc:0
}
{ .mmi //R-Addr: 0X060
ld8 r25=[r26];; //32 cc:1
st8 [r22]=r25 //32 cc:2
nop.i 0;;
}
{ .mib //R-Addr: 0X070
adds r21=sourceLen$, sp //33 cc:0
adds r19=stream$+8, sp //33 cc:0
nop.b 0;;
}
{ .mmi //R-Addr: 0X080
ld4 r20=[r21];; //33 cc:1
st4 [r19]=r20 //33 cc:2
nop.i 0;;
}
{ .mib //R-Addr: 0X090
adds r18=dest$, sp //38 cc:0
adds r16=stream$+16, sp //38 cc:0
nop.b 0;;
}
{ .mmi //R-Addr: 0X0a0
ld8 r17=[r18];; //38 cc:1
st8 [r16]=r17 //38 cc:2
nop.i 0;;
}
{ .mib //R-Addr: 0X0b0
adds r15=destLen$, sp //39 cc:0
adds r9=stream$+24, sp //39 cc:0
nop.b 0;;
}
{ .mmi //R-Addr: 0X0c0
ld8 r11=[r15];; //39 cc:1
ld4 r10=[r11] //39 cc:3
nop.i 0;;
}
{ .mmi //R-Addr: 0X0d0
st4 [r9]=r10;; //39 cc:4
adds r30=destLen$, sp //40 cc:0
adds r8=stream$+24, sp;; //40 cc:0
}
{ .mmb //R-Addr: 0X0e0
ld8 r29=[r30] //40 cc:1
ld4 r31=[r8] //40 cc:1
nop.b 0;;
}
{ .mmi //R-Addr: 0X0f0
ld4 r28=[r29];; //40 cc:3
cmp4.eq.unc p14,p15=r31, r28 //40 cc:4
nop.i 0
}
{ .mmb //R-Addr: 0X0100
nop.m 0
nop.m 0
(p14) br.cond.dptk.few $LN3@compress2#;; //40 cc:4
}
// 40 : if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
{ .mmb //R-Addr: 0X0110
mov r8=-5 //40 cc:5
nop.m 0
br.cond.sptk.few $LN4@compress2#;; //40 cc:5
}
$LN3@compress2:
// 41 :
// 42 : stream.zalloc = (alloc_func)0;
// 43 : stream.zfree = (free_func)0;
// 44 : stream.opaque = (voidpf)0;
// 45 :
// 46 : err = deflateInit(&stream, level);
// 47 : if (err != Z_OK) return err;
{ .mmi //R-Addr: 0X0120
adds r27=stream$+48, sp;; //42 cc:0
st8 [r27]=r0 //42 cc:1
nop.i 0;;
}
{ .mmi //R-Addr: 0X0130
adds r26=stream$+56, sp;; //43 cc:0
st8 [r26]=r0 //43 cc:1
nop.i 0;;
}
{ .mmi //R-Addr: 0X0140
adds r25=stream$+64, sp;; //44 cc:0
st8 [r25]=r0 //44 cc:1
nop.i 0;;
}
{ .mmi //R-Addr: 0X0150
adds r22=level$, sp //46 cc:0
addl r42=@gprel($SG78687#),gp //46 cc:0
mov r43=88;; //46 cc:0, 00000058H
}
{ .mmb //R-Addr: 0X0160
adds r40=stream$, sp //46 cc:1
ld4 r41=[r22] //46 cc:1
br.call.sptk.few b0=deflateInit_#;; //46 cc:1
}
{ .mmi //R-Addr: 0X0170
adds r21=$T78729, sp //46 cc:12
adds r20=$T78729, sp //46 cc:12
adds r18=err$, sp //46 cc:12
}
{ .mmi //R-Addr: 0X0180
mov gp=r39;; //46 cc:12
st4 [r21]=r8 //46 cc:13
nop.i 0
}
{ .mmi //R-Addr: 0X0190
ld4 r19=[r20];; //46 cc:13
st4 [r18]=r19 //46 cc:14
nop.i 0;;
}
{ .mmi //R-Addr: 0X01a0
adds r17=err$, sp;; //47 cc:0
ld4 r16=[r17] //47 cc:1
nop.i 0;;
}
{ .mmb //R-Addr: 0X01b0
cmp4.eq.unc p14,p15=r0, r16 //47 cc:2
nop.m 0
(p14) br.cond.dptk.few $LN2@compress2#;; //47 cc:2
}
// 47 : if (err != Z_OK) return err;
{ .mmi //R-Addr: 0X01c0
adds r15=err$, sp;; //47 cc:3
ld4 r8=[r15] //47 cc:4
nop.i 0
}
{ .mmb //R-Addr: 0X01d0
nop.m 0
nop.m 0
br.cond.sptk.few $LN4@compress2#;; //47 cc:4
}
$LN2@compress2:
// 48 :
// 49 : err = deflate(&stream, Z_FINISH);
// 50 : if (err != Z_STREAM_END) {
{ .mib //R-Addr: 0X01e0
mov r41=4 //49 cc:0
adds r40=stream$, sp //49 cc:0
br.call.sptk.few b0=deflate#;; //49 cc:0
}
{ .mmi //R-Addr: 0X01f0
adds r11=$T78730, sp //49 cc:11
adds r10=$T78730, sp //49 cc:11
mov gp=r39;; //49 cc:11
}
{ .mmi //R-Addr: 0X0200
st4 [r11]=r8 //49 cc:12
ld4 r9=[r10] //49 cc:12
adds r8=err$, sp;; //49 cc:12
}
{ .mmi //R-Addr: 0X0210
st4 [r8]=r9;; //49 cc:13
adds r31=err$, sp //50 cc:0
nop.i 0;;
}
{ .mmi //R-Addr: 0X0220
ld4 r30=[r31];; //50 cc:1
cmp4.eq.unc p14,p15=1, r30 //50 cc:2
nop.i 0
}
{ .mmb //R-Addr: 0X0230
nop.m 0
nop.m 0
(p14) br.cond.dptk.few $LN1@compress2#;; //50 cc:2
}
// 51 : deflateEnd(&stream);
// 52 : return err == Z_OK ? Z_BUF_ERROR : err;
{ .mmb //R-Addr: 0X0240
adds r40=stream$, sp //51 cc:0
nop.m 0
br.call.sptk.few b0=deflateEnd#;; //51 cc:0
}
{ .mmi //R-Addr: 0X0250
mov gp=r39;; //51 cc:11
adds r29=err$, sp //52 cc:0
nop.i 0;;
}
{ .mmi //R-Addr: 0X0260
ld4 r28=[r29];; //52 cc:1
cmp4.ne.unc p14,p15=r0, r28 //52 cc:2
nop.i 0
}
{ .mmb //R-Addr: 0X0270
nop.m 0
nop.m 0
(p14) br.cond.dptk.few $LN6@compress2#;; //52 cc:2
}
// 52 : return err == Z_OK ? Z_BUF_ERROR : err;
{ .mib //R-Addr: 0X0280
mov r27=-5 //52 cc:3
adds r26=$T78732, sp //52 cc:3
nop.b 0;;
}
{ .mmb //R-Addr: 0X0290
st4 [r26]=r27 //52 cc:4
nop.m 0
br.cond.sptk.few $LN7@compress2#;; //52 cc:4
}
$LN6@compress2:
// 52 : return err == Z_OK ? Z_BUF_ERROR : err;
{ .mib //R-Addr: 0X02a0
adds r25=err$, sp //52 cc:0
adds r21=$T78732, sp //52 cc:0
nop.b 0;;
}
{ .mmi //R-Addr: 0X02b0
ld4 r22=[r25];; //52 cc:1
st4 [r21]=r22 //52 cc:2
nop.i 0;;
}
$LN7@compress2:
// 52 : return err == Z_OK ? Z_BUF_ERROR : err;
{ .mmi //R-Addr: 0X02c0
adds r20=$T78732, sp;; //52 cc:0
ld4 r8=[r20] //52 cc:1
nop.i 0
}
{ .mmb //R-Addr: 0X02d0
nop.m 0
nop.m 0
br.cond.sptk.few $LN4@compress2#;; //52 cc:1
}
$LN1@compress2:
// 53 : }
// 54 : *destLen = stream.total_out;
// 55 :
// 56 : err = deflateEnd(&stream);
// 57 : return err;
{ .mib //R-Addr: 0X02e0
adds r19=stream$+28, sp //54 cc:0
adds r17=destLen$, sp //54 cc:0
nop.b 0;;
}
{ .mmb //R-Addr: 0X02f0
ld4 r18=[r19] //54 cc:1
ld8 r16=[r17] //54 cc:1
nop.b 0;;
}
{ .mmb //R-Addr: 0X0300
st4 [r16]=r18 //54 cc:3
adds r40=stream$, sp //56 cc:0
br.call.sptk.few b0=deflateEnd#;; //56 cc:0
}
{ .mmi //R-Addr: 0X0310
adds r15=$T78731, sp //56 cc:11
adds r11=$T78731, sp //56 cc:11
adds r9=err$, sp //56 cc:11
}
{ .mmi //R-Addr: 0X0320
mov gp=r39;; //56 cc:11
st4 [r15]=r8 //56 cc:12
nop.i 0
}
{ .mmi //R-Addr: 0X0330
ld4 r10=[r11];; //56 cc:12
st4 [r9]=r10 //56 cc:13
nop.i 0;;
}
{ .mmi //R-Addr: 0X0340
adds r8=err$, sp;; //57 cc:0
ld4 r8=[r8] //57 cc:1
nop.i 0;;
}
$LN4@compress2:
// 58 : }
{ .mii //R-Addr: 0X0350
adds sp=160, sp //58 cc:0, 000000a0H
mov.ret b0=r37;; //58 cc:0
mov.i ar.pfs=r38 //58 cc:1
}
{ .mmb //R-Addr: 0X0360
nop.m 0
nop.m 0
br.ret.sptk.many b0;; //58 cc:1
}
// End code for function:
.endp compress2#
.type compress# ,@function
.global compress#
.section .pdata
$T78742: data4 @imagerel($LN3@compress#)
data4 @imagerel($LN3@compress#+208)
data4 @imagerel($T78740#)
.section .xdata
.skip 8
$T78740: data2 03H
data2 00H
data4 02H
string "\x0e" //R1:prologue size 14
string "\xe6\x00" //P7:pfs_when time 0
string "\xb1\x25" //P3:pfs_gr 37
string "\xe4\x01" //P7:rp_when time 1
string "\xb0\xa4" //P3:rp_gr 36
string "\xe0\x02\x03" //P7:mem_stack_f time 2 size 3
string "\x39" //R1:body size size 25
string "\x81" //B1:label_state 1
string "\xc0\x05" //B2:ecount 0 time 5
// Function compile flags: /Odtp
.section .text
// Begin code for function: compress:
.proc compress#
.align 32
$T78739 = 16
dest$ = 32
destLen$ = 40
source$ = 48
sourceLen$ = 56
compress:
// dest$ = r32
// destLen$ = r33
// source$ = r34
// sourceLen$ = r35
// Output regs: r38-r42
$LN3@compress:
// 67 : {
// 68 : return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION);
// 69 : }
{ .mii //R-Addr: 0X00
alloc r37=4, 2, 5, 0 //67 cc:0
mov r36=b0 //67 cc:0
adds sp=-48, sp;; //67 cc:0, ffffffd0H
}
{ .mmi //R-Addr: 0X010
ld8.nta r2=[sp] //67 cc:1
adds r31=dest$, sp
adds r30=destLen$, sp
}
{ .mib //R-Addr: 0X020
adds r29=source$, sp
adds r28=sourceLen$, sp
nop.b 0;;
}
{ .mmb //R-Addr: 0X030
st8 [r31]=r32
st8 [r30]=r33
nop.b 0;;
}
{ .mmb //R-Addr: 0X040
st8 [r29]=r34
st4 [r28]=r35
nop.b 0;;
}
{ .mmi //R-Addr: 0X050
adds r27=sourceLen$, sp //68 cc:0
adds r26=source$, sp //68 cc:0
adds r25=destLen$, sp //68 cc:0
}
{ .mib //R-Addr: 0X060
adds r22=dest$, sp //68 cc:0
mov r42=-1 //68 cc:0
nop.b 0;;
}
{ .mmb //R-Addr: 0X070
ld4 r41=[r27] //68 cc:1
ld8 r40=[r26] //68 cc:1
nop.b 0;;
}
{ .mmb //R-Addr: 0X080
ld8 r39=[r25] //68 cc:2
ld8 r38=[r22] //68 cc:2
br.call.sptk.few b0=compress2#;; //68 cc:2
}
{ .mib //R-Addr: 0X090
adds r21=$T78739, sp //68 cc:13
adds r20=$T78739, sp //68 cc:13
nop.b 0;;
}
{ .mmb //R-Addr: 0X0a0
st4 [r21]=r8 //68 cc:14
ld4 r8=[r20] //68 cc:14
nop.b 0;;
}
{ .mii //R-Addr: 0X0b0
adds sp=48, sp //69 cc:0, 00000030H
mov.ret b0=r36;; //69 cc:0
mov.i ar.pfs=r37 //69 cc:1
}
{ .mmb //R-Addr: 0X0c0
nop.m 0
nop.m 0
br.ret.sptk.many b0;; //69 cc:1
}
// End code for function:
.endp compress#
.type compressBound# ,@function
.global compressBound#
// Function compile flags: /Odtp
.section .text
// Begin code for function: compressBound:
.proc compressBound#
.align 32
sourceLen$ = 0
compressBound:
// sourceLen$ = r32
// Output regs: None
// 78 : return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + 11;
// 79 : }
{ .mmi //R-Addr: 0X00
adds r31=sourceLen$, sp;;
st4 [r31]=r32
nop.i 0;;
}
{ .mmi //R-Addr: 0X010
adds r30=sourceLen$, sp //78 cc:0
adds r27=sourceLen$, sp //78 cc:0
adds r22=sourceLen$, sp;; //78 cc:0
}
{ .mmb //R-Addr: 0X020
ld4 r29=[r30] //78 cc:1
ld4 r26=[r27] //78 cc:1
nop.b 0;;
}
{ .mii //R-Addr: 0X030
ld4 r21=[r22] //78 cc:2
extr.u r28=r29, 12, 20;; //78 cc:2
extr.u r20=r21, 14, 18 //78 cc:3
}
{ .mmi //R-Addr: 0X040
add r25=r26, r28;; //78 cc:3
add r19=r25, r20 //78 cc:4
nop.i 0;;
}
{ .mmb //R-Addr: 0X050
adds r8=11, r19 //78 cc:6
nop.m 0
br.ret.sptk.many b0;; //79 cc:0
}
// End code for function:
.endp compressBound#
// Total code size for all functions: 0X04a0 bytes (74 bundles)
// END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -