📄 inftrees.asm
字号:
// 136 : }
{ .mmb //R-Addr: 0X0700
nop.m 0
nop.m 0
br.cond.sptk.few $LN46@inflate_ta#;; //136 cc:0
}
$LN45@inflate_ta:
// 137 : if (left > 0 && (type == CODES || max != 1))
{ .mmi //R-Addr: 0X0710
adds r22=left$, sp;; //137 cc:0
ld4 r21=[r22] //137 cc:1
nop.i 0;;
}
{ .mmb //R-Addr: 0X0720
cmp4.ge.unc p14,p15=r0, r21 //137 cc:2
nop.m 0
(p14) br.cond.dptk.few $LN43@inflate_ta#;; //137 cc:2
}
// 137 : if (left > 0 && (type == CODES || max != 1))
{ .mmi //R-Addr: 0X0730
adds r20=type$, sp;; //137 cc:3
ld4 r19=[r20] //137 cc:4
nop.i 0;;
}
{ .mmb //R-Addr: 0X0740
cmp4.eq.unc p14,p15=r0, r19 //137 cc:5
nop.m 0
(p14) br.cond.dptk.few $LN42@inflate_ta#;; //137 cc:5
}
// 137 : if (left > 0 && (type == CODES || max != 1))
{ .mmi //R-Addr: 0X0750
adds r18=max$, sp;; //137 cc:6
ld4 r17=[r18] //137 cc:7
nop.i 0;;
}
{ .mmb //R-Addr: 0X0760
cmp4.eq.unc p14,p15=1, r17 //137 cc:8
nop.m 0
(p14) br.cond.dptk.few $LN43@inflate_ta#;; //137 cc:8
}
$LN42@inflate_ta:
// 138 : return -1; /* incomplete set */
{ .mmb //R-Addr: 0X0770
mov r8=-1 //138 cc:0
nop.m 0
br.cond.sptk.few $LN65@inflate_ta#;; //138 cc:0
}
$LN43@inflate_ta:
// 139 :
// 140 : /* generate offsets into symbol table for each length for sorting */
// 141 : offs[1] = 0;
// 142 : for (len = 1; len < MAXBITS; len++)
{ .mmi //R-Addr: 0X0780
adds r16=offs$+2, sp;; //141 cc:0
st2 [r16]=r0 //141 cc:1
nop.i 0;;
}
{ .mib //R-Addr: 0X0790
mov r15=1 //142 cc:0
adds r11=len$, sp //142 cc:0
nop.b 0;;
}
{ .mmb //R-Addr: 0X07a0
st4 [r11]=r15 //142 cc:1
nop.m 0
br.cond.sptk.few $LN41@inflate_ta#;; //142 cc:1
}
$LN40@inflate_ta:
// 142 : for (len = 1; len < MAXBITS; len++)
{ .mib //R-Addr: 0X07b0
adds r10=len$, sp //142 cc:0
adds r31=len$, sp //142 cc:0
nop.b 0;;
}
{ .mmi //R-Addr: 0X07c0
ld4 r9=[r10];; //142 cc:1
adds r8=1, r9 //142 cc:2
nop.i 0;;
}
{ .mmb //R-Addr: 0X07d0
st4 [r31]=r8 //142 cc:3
nop.m 0
nop.b 0;;
}
$LN41@inflate_ta:
// 142 : for (len = 1; len < MAXBITS; len++)
{ .mmi //R-Addr: 0X07e0
adds r30=len$, sp;; //142 cc:0
ld4 r29=[r30] //142 cc:1
nop.i 0;;
}
{ .mmb //R-Addr: 0X07f0
cmp4.leu.unc p14,p15=15, r29 //142 cc:2
nop.m 0
(p14) br.cond.dptk.few $LN39@inflate_ta#;; //142 cc:2
}
// 143 : offs[len + 1] = offs[len] + count[len];
{ .mmi //R-Addr: 0X0800
adds r28=len$, sp //143 cc:0
adds r20=len$, sp //143 cc:0
adds r10=len$, sp //143 cc:0
}
{ .mmi //R-Addr: 0X0810
adds r25=offs$, sp //143 cc:0
adds r17=count$, sp //143 cc:0
adds r29=offs$, sp;; //143 cc:0
}
{ .mmb //R-Addr: 0X0820
ld4 r27=[r28] //143 cc:1
ld4 r19=[r20] //143 cc:1
nop.b 0;;
}
{ .mii //R-Addr: 0X0830
ld4 r9=[r10] //143 cc:2
shl r26=r27, 1 //143 cc:2
shl r18=r19, 1;; //143 cc:2
}
{ .mmi //R-Addr: 0X0840
adds r8=1, r9 //143 cc:3
add r22=r25, r26 //143 cc:3
add r16=r17, r18;; //143 cc:3
}
{ .mmi //R-Addr: 0X0850
ld2 r21=[r22] //143 cc:4
ld2 r15=[r16] //143 cc:4
zxt4 r31=r8;; //143 cc:4
}
{ .mii //R-Addr: 0X0860
add r11=r21, r15 //143 cc:5
shl r30=r31, 1;; //143 cc:5
add r28=r29, r30;; //143 cc:6
}
{ .mmb //R-Addr: 0X0870
st2 [r28]=r11 //143 cc:7
nop.m 0
br.cond.sptk.few $LN40@inflate_ta#;; //143 cc:7
}
$LN39@inflate_ta:
// 144 :
// 145 : /* sort symbols by length, by symbol order within each length */
// 146 : for (sym = 0; sym < codes; sym++)
{ .mmi //R-Addr: 0X0880
adds r27=sym$, sp;; //146 cc:0
st4 [r27]=r0 //146 cc:1
nop.i 0
}
{ .mmb //R-Addr: 0X0890
nop.m 0
nop.m 0
br.cond.sptk.few $LN38@inflate_ta#;; //146 cc:1
}
$LN37@inflate_ta:
// 146 : for (sym = 0; sym < codes; sym++)
{ .mib //R-Addr: 0X08a0
adds r26=sym$, sp //146 cc:0
adds r21=sym$, sp //146 cc:0
nop.b 0;;
}
{ .mmi //R-Addr: 0X08b0
ld4 r25=[r26];; //146 cc:1
adds r22=1, r25 //146 cc:2
nop.i 0;;
}
{ .mmb //R-Addr: 0X08c0
st4 [r21]=r22 //146 cc:3
nop.m 0
nop.b 0;;
}
$LN38@inflate_ta:
// 146 : for (sym = 0; sym < codes; sym++)
{ .mib //R-Addr: 0X08d0
adds r20=sym$, sp //146 cc:0
adds r18=codes$, sp //146 cc:0
nop.b 0;;
}
{ .mmb //R-Addr: 0X08e0
ld4 r19=[r20] //146 cc:1
ld4 r17=[r18] //146 cc:1
nop.b 0;;
}
{ .mmb //R-Addr: 0X08f0
cmp4.geu.unc p14,p15=r19, r17 //146 cc:2
nop.m 0
(p14) br.cond.dptk.few $LN36@inflate_ta#;; //146 cc:2
}
// 147 : if (lens[sym] != 0) work[offs[lens[sym]]++] = (unsigned short)sym;
{ .mib //R-Addr: 0X0900
adds r16=sym$, sp //147 cc:0
adds r10=lens$, sp //147 cc:0
nop.b 0;;
}
{ .mmb //R-Addr: 0X0910
ld4 r15=[r16] //147 cc:1
ld8 r9=[r10] //147 cc:1
nop.b 0;;
}
{ .mii //R-Addr: 0X0920
nop.m 0
shl r11=r15, 1;; //147 cc:2
add r8=r9, r11;; //147 cc:3
}
{ .mmi //R-Addr: 0X0930
ld2 r31=[r8];; //147 cc:4
cmp4.eq.unc p14,p15=r0, r31 //147 cc:5
nop.i 0
}
{ .mmb //R-Addr: 0X0940
nop.m 0
nop.m 0
(p14) br.cond.dptk.few $LN35@inflate_ta#;; //147 cc:5
}
// 147 : if (lens[sym] != 0) work[offs[lens[sym]]++] = (unsigned short)sym;
{ .mmi //R-Addr: 0X0950
adds r28=sym$, sp //147 cc:6
adds r25=lens$, sp //147 cc:6
adds r18=offs$, sp //147 cc:6
}
{ .mmi //R-Addr: 0X0960
adds r11=work$, sp //147 cc:6
adds r30=sym$, sp //147 cc:6
adds r8=sym$, sp;; //147 cc:6
}
{ .mmb //R-Addr: 0X0970
ld4 r27=[r28] //147 cc:7
ld8 r22=[r25] //147 cc:7
nop.b 0;;
}
{ .mmi //R-Addr: 0X0980
ld8 r10=[r11] //147 cc:8
ld4 r29=[r30] //147 cc:8
shl r26=r27, 1;; //147 cc:8
}
{ .mib //R-Addr: 0X0990
add r21=r22, r26 //147 cc:9
adds r22=offs$, sp //147 cc:9
nop.b 0;;
}
{ .mmi //R-Addr: 0X09a0
ld2 r20=[r21];; //147 cc:10
nop.m 0
shl r19=r20, 1;; //147 cc:11
}
{ .mib //R-Addr: 0X09b0
add r17=r18, r19 //147 cc:12
adds r18=sym$, sp //147 cc:12
nop.b 0;;
}
{ .mmi //R-Addr: 0X09c0
ld2 r16=[r17];; //147 cc:13
nop.m 0
shl r15=r16, 1;; //147 cc:14
}
{ .mib //R-Addr: 0X09d0
add r9=r10, r15 //147 cc:15
adds r15=lens$, sp //147 cc:15
nop.b 0;;
}
{ .mmi //R-Addr: 0X09e0
st2 [r9]=r29 //147 cc:16
ld4 r31=[r8] //147 cc:16
adds r29=lens$, sp //147 cc:16
}
{ .mmi //R-Addr: 0X09f0
ld4 r17=[r18];; //147 cc:16
ld8 r28=[r29] //147 cc:17
shl r30=r31, 1 //147 cc:17
}
{ .mii //R-Addr: 0X0a00
ld8 r11=[r15] //147 cc:17
shl r16=r17, 1 //147 cc:17
adds r31=offs$, sp;; //147 cc:17
}
{ .mib //R-Addr: 0X0a10
add r27=r28, r30 //147 cc:18
add r10=r11, r16 //147 cc:18
nop.b 0;;
}
{ .mmb //R-Addr: 0X0a20
ld2 r26=[r27] //147 cc:19
ld2 r9=[r10] //147 cc:19
nop.b 0;;
}
{ .mii //R-Addr: 0X0a30
nop.m 0
shl r25=r26, 1 //147 cc:20
shl r8=r9, 1;; //147 cc:20
}
{ .mib //R-Addr: 0X0a40
add r21=r22, r25 //147 cc:21
add r30=r31, r8 //147 cc:21
nop.b 0;;
}
{ .mmi //R-Addr: 0X0a50
ld2 r20=[r21];; //147 cc:22
adds r19=1, r20 //147 cc:23
nop.i 0;;
}
{ .mmb //R-Addr: 0X0a60
st2 [r30]=r19 //147 cc:24
nop.m 0
nop.b 0;;
}
$LN35@inflate_ta:
// 148 :
// 149 : /*
// 150 : Create and fill in decoding tables. In this loop, the table being
// 151 : filled is at next and has curr index bits. The code being used is huff
// 152 : with length len. That code is converted to an index by dropping drop
// 153 : bits off of the bottom. For codes where len is less than drop + curr,
// 154 : those top drop + curr - len bits are incremented through all values to
// 155 : fill the table with replicated entries.
// 156 :
// 157 : root is the number of index bits for the root table. When len exceeds
// 158 : root, sub-tables are created pointed to by the root entry with an index
// 159 : of the low root bits of huff. This is saved in low to check for when a
// 160 : new sub-table should be started. drop is zero when the root table is
// 161 : being filled, and drop is root when sub-tables are being filled.
// 162 :
// 163 : When a new sub-table is needed, it is necessary to look ahead in the
// 164 : code lengths to determine what size sub-table is needed. The length
// 165 : counts are used for this, and so count[] is decremented as codes are
// 166 : entered in the tables.
// 167 :
// 168 : used keeps track of how many table entries have been allocated from the
// 169 : provided *table space. It is checked when a LENS table is being made
// 170 : against the space in *table, ENOUGH, minus the maximum space needed by
// 171 : the worst case distance code, MAXD. This should never happen, but the
// 172 : sufficiency of ENOUGH has not been proven exhaustively, hence the check.
// 173 : This assumes that when type == LENS, bits == 9.
// 174 :
// 175 : sym increments through all symbols, and the loop terminates when
// 176 : all codes of length max, i.e. all codes, have been processed. This
// 177 : routine permits incomplete codes, so another loop after this one fills
// 178 : in the rest of the decoding tables with invalid code markers.
// 179 : */
// 180 :
// 181 : /* set up for code type */
// 182 : switch (type) {
{ .mmb //R-Addr: 0X0a70
nop.m 0
nop.m 0
br.cond.sptk.few $LN37@inflate_ta#;; //182 cc:0
}
$LN36@inflate_ta:
// 182 : switch (type) {
{ .mmi //R-Addr: 0X0a80
adds r29=type$, sp //182 cc:0
adds r27=$T78873, sp //182 cc:0
adds r26=$T78873, sp;; //182 cc:0
}
{ .mmi //R-Addr: 0X0a90
ld4 r28=[r29];; //182 cc:1
st4 [r27]=r28 //182 cc:2
nop.i 0
}
{ .mmi //R-Addr: 0X0aa0
ld4 r25=[r26];; //182 cc:2
cmp4.eq.unc p14,p15=r0, r25 //182 cc:3
nop.i 0
}
{ .mmb //R-Addr: 0X0ab0
nop.m 0
nop.m 0
(p14) br.cond.dptk.few $LN32@inflate_ta#;; //182 cc:3
}
// 182 : switch (type) {
{ .mmi //R-Addr: 0X0ac0
adds r22=$T78873, sp;; //182 cc:4
ld4 r21=[r22] //182 cc:5
nop.i 0;;
}
{ .mbb //R-Addr: 0X0ad0
cmp4.eq.unc p14,p15=1, r21 //182 cc:6
(p14) br.cond.dptk.many $LN31@inflate_ta# //182 cc:6
br.cond.sptk.many $LN30@inflate_ta#;; //182 cc:6
}
$LN32@inflate_ta:
// 183 : case CODES:
// 184 : base = extra = work; /* dummy value--not used */
// 185 : end = 19;
// 186 : break;
{ .mmi //R-Addr: 0X0ae0
adds r20=work$, sp //184 cc:0
adds r18=extra$, sp //184 cc:0
adds r17=extra$, sp //184 cc:0
}
{ .mmi //R-Addr: 0X0af0
adds r15=base$, sp;; //184 cc:0
ld8 r19=[r20] //184 cc:1
nop.i 0;;
}
{ .mmb //R-Addr: 0X0b00
st8 [r18]=r19 //184 cc:2
ld8 r16=[r17] //184 cc:2
nop.b 0;;
}
{ .mmi //R-Addr: 0X0b10
st8 [r15]=r16;; //184 cc:3
mov r11=19 //185 cc:0
adds r10=end$, sp;; //185 cc:0
}
{ .mmb //R-Addr: 0X0b20
st4 [r10]=r11 //185 cc:2
nop.m 0
br.cond.sptk.many $LN33@inflate_ta#;; //186 cc:0
}
$LN31@inflate_ta:
// 187 : case LENS:
// 188 : base = lbase;
// 189 : base -= 257;
// 190 : extra = lext;
// 191 : extra -= 257;
// 192 : end = 256;
// 193 : break;
{ .mib //R-Addr: 0X0b30
addl r9=@ltoff(?lbase@?1??inflate_table@@9@9#),gp //188 cc:0
adds r31=base$, sp //188 cc:0
nop.b 0;;
}
{ .mmi //R-Addr: 0X0b40
ld8 r8=[r9];; //188 cc:1
st8 [r31]=r8 //188 cc:2
nop.i 0;;
}
{ .mib //R-Addr: 0X0b50
adds r30=base$, sp //189 cc:0
adds r27=base$, sp //189 cc:0
nop.b 0;;
}
{ .mmi //R-Addr: 0X0b60
ld8 r29=[r30];; //189 cc:1
adds r28=-514, r29 //189 cc:2, fffffdfeH
nop.i 0;;
}
{ .mmi //R-Addr: 0X0b70
st8 [r27]=r28;; //189 cc:3
addl r26=@ltoff(?lext@?1??inflate_table@@9@9#),gp //190 cc:0
adds r22=extra$, sp;; //190 cc:0
}
{ .mmi //R-Addr: 0X0b80
ld8 r25=[r26];; //190 cc:1
st8 [r22]=r25 //190 cc:2
nop.i 0;;
}
{ .mib //R-Addr: 0X0b90
adds r21=extra$, sp //191 cc:0
adds r18=extra$, sp //191 cc:0
nop.b 0;;
}
{ .mmi //R-Addr: 0X0ba0
ld8 r20=[r21];; //191 cc:1
adds r19=-514, r20 //191 cc:2, fffffdfeH
nop.i 0;;
}
{ .mmi //R-Addr: 0X0bb0
st8 [r18]=r19;; //191 cc:3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -