Skip to content

Instantly share code, notes, and snippets.

@danlark1
Created May 29, 2021 17:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save danlark1/df57a5a15d5ef04dadefb850c2eb79fb to your computer and use it in GitHub Desktop.
Save danlark1/df57a5a15d5ef04dadefb850c2eb79fb to your computer and use it in GitHub Desktop.
gcc_objdump
zstd_gcc.o: file format elf64-x86-64
Disassembly of section .text:
0000000000000000 <ZSTD_safecopy>:
* @param ovtype controls the overlap detection
* - ZSTD_no_overlap: The source and destination are guaranteed to be at least WILDCOPY_VECLEN bytes apart.
* - ZSTD_overlap_src_before_dst: The src and dst may overlap and may be any distance apart.
* The src buffer must be before the dst buffer.
*/
static void ZSTD_safecopy(BYTE* op, BYTE* const oend_w, BYTE const* ip, ptrdiff_t length, ZSTD_overlap_e ovtype) {
0: 48 89 c8 mov %rcx,%rax
ptrdiff_t const diff = op - ip;
BYTE* const oend = op + length;
3: 49 89 cb mov %rcx,%r11
6: 48 01 f9 add %rdi,%rcx
assert((ovtype == ZSTD_no_overlap && (diff <= -8 || diff >= 8 || op >= oend_w)) ||
(ovtype == ZSTD_overlap_src_before_dst && diff >= 0));
if (length < 8) {
9: 48 83 f8 07 cmp $0x7,%rax
d: 0f 8e 4d 02 00 00 jle 260 <ZSTD_safecopy+0x260>
static void ZSTD_safecopy(BYTE* op, BYTE* const oend_w, BYTE const* ip, ptrdiff_t length, ZSTD_overlap_e ovtype) {
13: 53 push %rbx
/* Handle short lengths. */
while (op < oend) *op++ = *ip++;
return;
}
if (ovtype == ZSTD_overlap_src_before_dst) {
14: 41 83 f8 01 cmp $0x1,%r8d
18: 0f 84 42 01 00 00 je 160 <ZSTD_safecopy+0x160>
ZSTD_overlapCopy8(&op, &ip, diff);
assert(op - ip >= 8);
assert(op <= oend);
}
if (oend <= oend_w) {
1e: 48 39 f1 cmp %rsi,%rcx
21: 0f 86 89 04 00 00 jbe 4b0 <ZSTD_safecopy+0x4b0>
/* No risk of overwrite. */
ZSTD_wildcopy(op, ip, length, ovtype);
return;
}
if (op <= oend_w) {
27: 48 39 fe cmp %rdi,%rsi
2a: 0f 83 c0 04 00 00 jae 4f0 <ZSTD_safecopy+0x4f0>
ZSTD_wildcopy(op, ip, oend_w - op, ovtype);
ip += oend_w - op;
op = oend_w;
}
/* Handle the leftovers. */
while (op < oend) *op++ = *ip++;
30: 48 39 f9 cmp %rdi,%rcx
33: 0f 86 22 01 00 00 jbe 15b <ZSTD_safecopy+0x15b>
39: 48 8d 47 01 lea 0x1(%rdi),%rax
3d: 4c 8d 41 ff lea -0x1(%rcx),%r8
41: 49 29 f8 sub %rdi,%r8
44: 48 39 c1 cmp %rax,%rcx
47: 41 0f 93 c1 setae %r9b
4b: 49 83 f8 06 cmp $0x6,%r8
4f: 40 0f 97 c6 seta %sil
53: 41 84 f1 test %sil,%r9b
56: 48 8d 72 01 lea 0x1(%rdx),%rsi
5a: 0f 84 e8 01 00 00 je 248 <ZSTD_safecopy+0x248>
60: 49 89 f9 mov %rdi,%r9
63: 49 29 f1 sub %rsi,%r9
66: 49 83 f9 0e cmp $0xe,%r9
6a: 0f 86 d8 01 00 00 jbe 248 <ZSTD_safecopy+0x248>
70: 48 89 ce mov %rcx,%rsi
73: 48 29 fe sub %rdi,%rsi
76: 48 39 c1 cmp %rax,%rcx
79: b8 01 00 00 00 mov $0x1,%eax
7e: 48 0f 42 f0 cmovb %rax,%rsi
82: 49 83 f8 0e cmp $0xe,%r8
86: 0f 86 c6 04 00 00 jbe 552 <ZSTD_safecopy+0x552>
8c: 49 89 f0 mov %rsi,%r8
ip += oend_w - op;
8f: 31 c0 xor %eax,%eax
91: 49 83 e0 f0 and $0xfffffffffffffff0,%r8
95: 0f 1f 00 nopl (%rax)
while (op < oend) *op++ = *ip++;
98: f3 0f 6f 04 02 movdqu (%rdx,%rax,1),%xmm0
9d: 0f 11 04 07 movups %xmm0,(%rdi,%rax,1)
a1: 48 83 c0 10 add $0x10,%rax
a5: 4c 39 c0 cmp %r8,%rax
a8: 75 ee jne 98 <ZSTD_safecopy+0x98>
aa: 49 89 f0 mov %rsi,%r8
ad: 49 83 e0 f0 and $0xfffffffffffffff0,%r8
b1: 4a 8d 04 07 lea (%rdi,%r8,1),%rax
b5: 4e 8d 0c 02 lea (%rdx,%r8,1),%r9
b9: 4c 39 c6 cmp %r8,%rsi
bc: 0f 84 99 00 00 00 je 15b <ZSTD_safecopy+0x15b>
c2: 49 89 f2 mov %rsi,%r10
c5: 48 83 ee 01 sub $0x1,%rsi
c9: 4c 29 c6 sub %r8,%rsi
cc: 4d 29 c2 sub %r8,%r10
cf: 48 83 fe 06 cmp $0x6,%rsi
d3: 76 1a jbe ef <ZSTD_safecopy+0xef>
d5: 4a 8b 14 02 mov (%rdx,%r8,1),%rdx
d9: 4a 89 14 07 mov %rdx,(%rdi,%r8,1)
dd: 4c 89 d2 mov %r10,%rdx
e0: 48 83 e2 f8 and $0xfffffffffffffff8,%rdx
e4: 48 01 d0 add %rdx,%rax
e7: 49 01 d1 add %rdx,%r9
ea: 49 39 d2 cmp %rdx,%r10
ed: 74 6c je 15b <ZSTD_safecopy+0x15b>
ef: 41 0f b6 11 movzbl (%r9),%edx
f3: 88 10 mov %dl,(%rax)
f5: 48 8d 50 01 lea 0x1(%rax),%rdx
f9: 48 39 d1 cmp %rdx,%rcx
fc: 76 5d jbe 15b <ZSTD_safecopy+0x15b>
fe: 41 0f b6 51 01 movzbl 0x1(%r9),%edx
103: 88 50 01 mov %dl,0x1(%rax)
106: 48 8d 50 02 lea 0x2(%rax),%rdx
10a: 48 39 d1 cmp %rdx,%rcx
10d: 76 4c jbe 15b <ZSTD_safecopy+0x15b>
10f: 41 0f b6 51 02 movzbl 0x2(%r9),%edx
114: 88 50 02 mov %dl,0x2(%rax)
117: 48 8d 50 03 lea 0x3(%rax),%rdx
11b: 48 39 d1 cmp %rdx,%rcx
11e: 76 3b jbe 15b <ZSTD_safecopy+0x15b>
120: 41 0f b6 51 03 movzbl 0x3(%r9),%edx
125: 88 50 03 mov %dl,0x3(%rax)
128: 48 8d 50 04 lea 0x4(%rax),%rdx
12c: 48 39 d1 cmp %rdx,%rcx
12f: 76 2a jbe 15b <ZSTD_safecopy+0x15b>
131: 41 0f b6 51 04 movzbl 0x4(%r9),%edx
136: 88 50 04 mov %dl,0x4(%rax)
139: 48 8d 50 05 lea 0x5(%rax),%rdx
13d: 48 39 d1 cmp %rdx,%rcx
140: 76 19 jbe 15b <ZSTD_safecopy+0x15b>
142: 41 0f b6 51 05 movzbl 0x5(%r9),%edx
147: 88 50 05 mov %dl,0x5(%rax)
14a: 48 8d 50 06 lea 0x6(%rax),%rdx
14e: 48 39 d1 cmp %rdx,%rcx
151: 76 08 jbe 15b <ZSTD_safecopy+0x15b>
153: 41 0f b6 51 06 movzbl 0x6(%r9),%edx
158: 88 50 06 mov %dl,0x6(%rax)
}
15b: 5b pop %rbx
15c: c3 retq
15d: 0f 1f 00 nopl (%rax)
ptrdiff_t const diff = op - ip;
160: 49 89 f8 mov %rdi,%r8
163: 49 29 d0 sub %rdx,%r8
if (offset < 8) {
166: 49 83 f8 07 cmp $0x7,%r8
16a: 0f 86 28 02 00 00 jbe 398 <ZSTD_safecopy+0x398>
*********************************************/
static void ZSTD_copy8(void* dst, const void* src) {
#if !defined(ZSTD_NO_INTRINSICS) && defined(__ARM_NEON)
vst1_u8((uint8_t*)dst, vld1_u8((const uint8_t*)src));
#else
ZSTD_memcpy(dst, src, 8);
170: 4c 8b 02 mov (%rdx),%r8
173: 4c 89 07 mov %r8,(%rdi)
*ip += 8;
176: 4c 8d 4a 08 lea 0x8(%rdx),%r9
*op += 8;
17a: 4c 8d 47 08 lea 0x8(%rdi),%r8
if (oend <= oend_w) {
17e: 48 39 f1 cmp %rsi,%rcx
181: 0f 87 61 02 00 00 ja 3e8 <ZSTD_safecopy+0x3e8>
* The src buffer must be before the dst buffer.
*/
MEM_STATIC FORCE_INLINE_ATTR
void ZSTD_wildcopy(void* dst, const void* src, ptrdiff_t length, ZSTD_overlap_e const ovtype)
{
ptrdiff_t diff = (BYTE*)dst - (const BYTE*)src;
187: 4c 89 c6 mov %r8,%rsi
const BYTE* ip = (const BYTE*)src;
BYTE* op = (BYTE*)dst;
BYTE* const oend = op + length;
18a: 49 8d 0c 00 lea (%r8,%rax,1),%rcx
ptrdiff_t diff = (BYTE*)dst - (const BYTE*)src;
18e: 4c 29 ce sub %r9,%rsi
assert(diff >= 8 || (ovtype == ZSTD_no_overlap && diff <= -WILDCOPY_VECLEN));
if (ovtype == ZSTD_overlap_src_before_dst && diff < WILDCOPY_VECLEN) {
191: 48 83 fe 0f cmp $0xf,%rsi
195: 0f 8f 06 03 00 00 jg 4a1 <ZSTD_safecopy+0x4a1>
19b: 4d 89 c2 mov %r8,%r10
19e: 48 89 c8 mov %rcx,%rax
1a1: 48 8d 77 09 lea 0x9(%rdi),%rsi
1a5: 49 29 d2 sub %rdx,%r10
1a8: 48 29 f8 sub %rdi,%rax
1ab: 49 83 ea 09 sub $0x9,%r10
1af: 48 83 e8 09 sub $0x9,%rax
1b3: 49 83 fa 0e cmp $0xe,%r10
1b7: 0f 86 bb 01 00 00 jbe 378 <ZSTD_safecopy+0x378>
1bd: 48 39 ce cmp %rcx,%rsi
1c0: 41 0f 96 c3 setbe %r11b
1c4: 48 83 f8 1f cmp $0x1f,%rax
1c8: 41 0f 97 c2 seta %r10b
1cc: 45 84 d3 test %r10b,%r11b
1cf: 0f 84 a3 01 00 00 je 378 <ZSTD_safecopy+0x378>
1d5: 48 c1 e8 03 shr $0x3,%rax
1d9: 48 83 c0 01 add $0x1,%rax
1dd: 48 39 ce cmp %rcx,%rsi
1e0: b9 01 00 00 00 mov $0x1,%ecx
1e5: 48 0f 46 c8 cmovbe %rax,%rcx
1e9: b8 08 00 00 00 mov $0x8,%eax
1ee: 48 89 ce mov %rcx,%rsi
1f1: 48 d1 ee shr %rsi
1f4: 48 c1 e6 04 shl $0x4,%rsi
1f8: 48 83 c6 08 add $0x8,%rsi
1fc: 0f 1f 40 00 nopl 0x0(%rax)
ZSTD_memcpy(dst, src, 8);
200: f3 0f 6f 14 02 movdqu (%rdx,%rax,1),%xmm2
205: 0f 11 14 07 movups %xmm2,(%rdi,%rax,1)
/* Handle short offset copies. */
do {
COPY8(op, ip)
} while (op < oend);
209: 48 83 c0 10 add $0x10,%rax
20d: 48 39 f0 cmp %rsi,%rax
210: 75 ee jne 200 <ZSTD_safecopy+0x200>
212: 48 89 ca mov %rcx,%rdx
215: 48 83 e2 fe and $0xfffffffffffffffe,%rdx
219: 48 8d 04 d5 00 00 00 lea 0x0(,%rdx,8),%rax
220: 00
221: 49 01 c1 add %rax,%r9
224: 49 01 c0 add %rax,%r8
227: 48 39 d1 cmp %rdx,%rcx
22a: 0f 84 2b ff ff ff je 15b <ZSTD_safecopy+0x15b>
ZSTD_memcpy(dst, src, 8);
230: 49 8b 01 mov (%r9),%rax
233: 49 89 00 mov %rax,(%r8)
}
236: 5b pop %rbx
237: c3 retq
238: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1)
23f: 00
240: 48 83 c6 01 add $0x1,%rsi
244: 48 83 c0 01 add $0x1,%rax
while (op < oend) *op++ = *ip++;
248: 0f b6 56 ff movzbl -0x1(%rsi),%edx
24c: 88 50 ff mov %dl,-0x1(%rax)
24f: 48 39 c1 cmp %rax,%rcx
252: 77 ec ja 240 <ZSTD_safecopy+0x240>
}
254: 5b pop %rbx
255: c3 retq
256: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1)
25d: 00 00 00
while (op < oend) *op++ = *ip++;
260: 48 39 f9 cmp %rdi,%rcx
263: 0f 86 07 01 00 00 jbe 370 <ZSTD_safecopy+0x370>
269: 49 89 fa mov %rdi,%r10
26c: 4c 8d 42 01 lea 0x1(%rdx),%r8
270: 48 89 fe mov %rdi,%rsi
273: 49 f7 d2 not %r10
276: 4c 29 c6 sub %r8,%rsi
279: 49 01 ca add %rcx,%r10
27c: 48 83 fe 0e cmp $0xe,%rsi
280: 0f 86 b2 02 00 00 jbe 538 <ZSTD_safecopy+0x538>
286: 49 83 fa 06 cmp $0x6,%r10
28a: 0f 86 a8 02 00 00 jbe 538 <ZSTD_safecopy+0x538>
290: 49 83 fa 0e cmp $0xe,%r10
294: 0f 86 e7 02 00 00 jbe 581 <ZSTD_safecopy+0x581>
29a: 49 89 c0 mov %rax,%r8
29d: 31 f6 xor %esi,%esi
29f: 49 83 e0 f0 and $0xfffffffffffffff0,%r8
2a3: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)
2a8: f3 0f 6f 0c 32 movdqu (%rdx,%rsi,1),%xmm1
2ad: 0f 11 0c 37 movups %xmm1,(%rdi,%rsi,1)
2b1: 48 83 c6 10 add $0x10,%rsi
2b5: 49 39 f0 cmp %rsi,%r8
2b8: 75 ee jne 2a8 <ZSTD_safecopy+0x2a8>
2ba: 49 89 c0 mov %rax,%r8
2bd: 49 83 e0 f0 and $0xfffffffffffffff0,%r8
2c1: 4a 8d 34 07 lea (%rdi,%r8,1),%rsi
2c5: 4e 8d 0c 02 lea (%rdx,%r8,1),%r9
2c9: 4c 39 c0 cmp %r8,%rax
2cc: 0f 84 9e 00 00 00 je 370 <ZSTD_safecopy+0x370>
2d2: 4c 29 c0 sub %r8,%rax
2d5: 4d 29 c2 sub %r8,%r10
2d8: 49 89 c3 mov %rax,%r11
2db: 49 83 fa 06 cmp $0x6,%r10
2df: 76 1a jbe 2fb <ZSTD_safecopy+0x2fb>
2e1: 4a 8b 04 02 mov (%rdx,%r8,1),%rax
2e5: 4a 89 04 07 mov %rax,(%rdi,%r8,1)
2e9: 4c 89 d8 mov %r11,%rax
2ec: 48 83 e0 f8 and $0xfffffffffffffff8,%rax
2f0: 48 01 c6 add %rax,%rsi
2f3: 49 01 c1 add %rax,%r9
2f6: 4c 39 d8 cmp %r11,%rax
2f9: 74 75 je 370 <ZSTD_safecopy+0x370>
2fb: 41 0f b6 01 movzbl (%r9),%eax
2ff: 88 06 mov %al,(%rsi)
301: 48 8d 46 01 lea 0x1(%rsi),%rax
305: 48 39 c1 cmp %rax,%rcx
308: 76 66 jbe 370 <ZSTD_safecopy+0x370>
30a: 41 0f b6 41 01 movzbl 0x1(%r9),%eax
30f: 88 46 01 mov %al,0x1(%rsi)
312: 48 8d 46 02 lea 0x2(%rsi),%rax
316: 48 39 c1 cmp %rax,%rcx
319: 76 55 jbe 370 <ZSTD_safecopy+0x370>
31b: 41 0f b6 41 02 movzbl 0x2(%r9),%eax
320: 88 46 02 mov %al,0x2(%rsi)
323: 48 8d 46 03 lea 0x3(%rsi),%rax
327: 48 39 c1 cmp %rax,%rcx
32a: 76 44 jbe 370 <ZSTD_safecopy+0x370>
32c: 41 0f b6 41 03 movzbl 0x3(%r9),%eax
331: 88 46 03 mov %al,0x3(%rsi)
334: 48 8d 46 04 lea 0x4(%rsi),%rax
338: 48 39 c1 cmp %rax,%rcx
33b: 76 33 jbe 370 <ZSTD_safecopy+0x370>
33d: 41 0f b6 41 04 movzbl 0x4(%r9),%eax
342: 88 46 04 mov %al,0x4(%rsi)
345: 48 8d 46 05 lea 0x5(%rsi),%rax
349: 48 39 c1 cmp %rax,%rcx
34c: 76 22 jbe 370 <ZSTD_safecopy+0x370>
34e: 41 0f b6 41 05 movzbl 0x5(%r9),%eax
353: 88 46 05 mov %al,0x5(%rsi)
356: 48 8d 46 06 lea 0x6(%rsi),%rax
35a: 48 39 c1 cmp %rax,%rcx
35d: 76 11 jbe 370 <ZSTD_safecopy+0x370>
35f: 41 0f b6 41 06 movzbl 0x6(%r9),%eax
364: 88 46 06 mov %al,0x6(%rsi)
367: c3 retq
368: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1)
36f: 00
370: c3 retq
371: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
378: 49 8b 01 mov (%r9),%rax
COPY8(op, ip)
37b: 49 83 c0 08 add $0x8,%r8
37f: 49 83 c1 08 add $0x8,%r9
ZSTD_memcpy(dst, src, 8);
383: 49 89 40 f8 mov %rax,-0x8(%r8)
} while (op < oend);
387: 4c 39 c1 cmp %r8,%rcx
38a: 77 ec ja 378 <ZSTD_safecopy+0x378>
38c: e9 ca fd ff ff jmpq 15b <ZSTD_safecopy+0x15b>
391: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
(*op)[0] = (*ip)[0];
398: 44 0f b6 0a movzbl (%rdx),%r9d
39c: 44 88 0f mov %r9b,(%rdi)
(*op)[1] = (*ip)[1];
39f: 44 0f b6 4a 01 movzbl 0x1(%rdx),%r9d
3a4: 44 88 4f 01 mov %r9b,0x1(%rdi)
(*op)[2] = (*ip)[2];
3a8: 44 0f b6 4a 02 movzbl 0x2(%rdx),%r9d
3ad: 44 88 4f 02 mov %r9b,0x2(%rdi)
(*op)[3] = (*ip)[3];
3b1: 44 0f b6 4a 03 movzbl 0x3(%rdx),%r9d
3b6: 44 88 4f 03 mov %r9b,0x3(%rdi)
*ip += dec32table[offset];
3ba: 4c 8d 0d 00 00 00 00 lea 0x0(%rip),%r9 # 3c1 <ZSTD_safecopy+0x3c1>
3c1: 47 8b 0c 81 mov (%r9,%r8,4),%r9d
3c5: 4c 01 ca add %r9,%rdx
static void ZSTD_copy4(void* dst, const void* src) { ZSTD_memcpy(dst, src, 4); }
3c8: 44 8b 0a mov (%rdx),%r9d
3cb: 44 89 4f 04 mov %r9d,0x4(%rdi)
*ip -= sub2;
3cf: 4c 8d 0d 00 00 00 00 lea 0x0(%rip),%r9 # 3d6 <ZSTD_safecopy+0x3d6>
3d6: 4f 63 04 81 movslq (%r9,%r8,4),%r8
3da: 4c 29 c2 sub %r8,%rdx
3dd: e9 94 fd ff ff jmpq 176 <ZSTD_safecopy+0x176>
3e2: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1)
if (op <= oend_w) {
3e8: 4c 39 c6 cmp %r8,%rsi
3eb: 0f 82 a6 01 00 00 jb 597 <ZSTD_safecopy+0x597>
ptrdiff_t diff = (BYTE*)dst - (const BYTE*)src;
3f1: 4c 89 c0 mov %r8,%rax
ZSTD_wildcopy(op, ip, oend_w - op, ovtype);
3f4: 49 89 f2 mov %rsi,%r10
3f7: 4c 29 c8 sub %r9,%rax
3fa: 4d 29 c2 sub %r8,%r10
if (ovtype == ZSTD_overlap_src_before_dst && diff < WILDCOPY_VECLEN) {
3fd: 48 83 f8 0f cmp $0xf,%rax
401: 0f 8f 88 01 00 00 jg 58f <ZSTD_safecopy+0x58f>
407: 48 83 c7 09 add $0x9,%rdi
40b: 48 8d 46 ff lea -0x1(%rsi),%rax
40f: 4c 29 c0 sub %r8,%rax
412: 48 39 f7 cmp %rsi,%rdi
415: 0f 96 c3 setbe %bl
418: 48 83 f8 1f cmp $0x1f,%rax
41c: 41 0f 97 c3 seta %r11b
420: 44 84 db test %r11b,%bl
423: 0f 84 37 01 00 00 je 560 <ZSTD_safecopy+0x560>
429: 4d 89 c3 mov %r8,%r11
42c: 49 29 d3 sub %rdx,%r11
42f: 49 8d 53 f7 lea -0x9(%r11),%rdx
433: 48 83 fa 0e cmp $0xe,%rdx
437: 0f 86 23 01 00 00 jbe 560 <ZSTD_safecopy+0x560>
43d: 48 c1 e8 03 shr $0x3,%rax
441: 48 39 f7 cmp %rsi,%rdi
444: 48 8d 50 01 lea 0x1(%rax),%rdx
448: b8 01 00 00 00 mov $0x1,%eax
44d: 48 0f 47 d0 cmova %rax,%rdx
451: 31 c0 xor %eax,%eax
453: 48 89 d7 mov %rdx,%rdi
456: 48 d1 ef shr %rdi
459: 48 c1 e7 04 shl $0x4,%rdi
45d: 0f 1f 00 nopl (%rax)
ZSTD_memcpy(dst, src, 8);
460: f3 41 0f 6f 1c 01 movdqu (%r9,%rax,1),%xmm3
466: 41 0f 11 1c 00 movups %xmm3,(%r8,%rax,1)
} while (op < oend);
46b: 48 83 c0 10 add $0x10,%rax
46f: 48 39 f8 cmp %rdi,%rax
472: 75 ec jne 460 <ZSTD_safecopy+0x460>
474: 49 89 d3 mov %rdx,%r11
477: 49 83 e3 fe and $0xfffffffffffffffe,%r11
47b: 4a 8d 04 dd 00 00 00 lea 0x0(,%r11,8),%rax
482: 00
483: 49 8d 3c 01 lea (%r9,%rax,1),%rdi
487: 49 01 c0 add %rax,%r8
48a: 4c 39 da cmp %r11,%rdx
48d: 74 06 je 495 <ZSTD_safecopy+0x495>
ZSTD_memcpy(dst, src, 8);
48f: 48 8b 07 mov (%rdi),%rax
492: 49 89 00 mov %rax,(%r8)
ip += oend_w - op;
495: 4b 8d 14 11 lea (%r9,%r10,1),%rdx
499: 48 89 f7 mov %rsi,%rdi
49c: e9 98 fb ff ff jmpq 39 <ZSTD_safecopy+0x39>
*ip += 8;
4a1: 4c 89 ca mov %r9,%rdx
*op += 8;
4a4: 4c 89 c7 mov %r8,%rdi
4a7: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1)
4ae: 00 00
ZSTD_memcpy(dst, src, 16);
4b0: f3 0f 6f 32 movdqu (%rdx),%xmm6
4b4: 0f 11 37 movups %xmm6,(%rdi)
COPY16(op, ip);
}
while (op < oend);
#else
ZSTD_copy16(op, ip);
if (16 >= length) return;
4b7: 48 83 f8 10 cmp $0x10,%rax
4bb: 0f 8e 9a fc ff ff jle 15b <ZSTD_safecopy+0x15b>
op += 16;
4c1: 48 83 c7 10 add $0x10,%rdi
ip += 16;
4c5: 48 83 c2 10 add $0x10,%rdx
4c9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
ZSTD_memcpy(dst, src, 16);
4d0: f3 0f 6f 22 movdqu (%rdx),%xmm4
4d4: 48 83 c7 20 add $0x20,%rdi
4d8: 48 83 c2 20 add $0x20,%rdx
4dc: 0f 11 67 e0 movups %xmm4,-0x20(%rdi)
4e0: f3 0f 6f 6a f0 movdqu -0x10(%rdx),%xmm5
4e5: 0f 11 6f f0 movups %xmm5,-0x10(%rdi)
do {
COPY16(op, ip);
COPY16(op, ip);
}
while (op < oend);
4e9: 48 39 f9 cmp %rdi,%rcx
4ec: 77 e2 ja 4d0 <ZSTD_safecopy+0x4d0>
}
4ee: 5b pop %rbx
4ef: c3 retq
ZSTD_wildcopy(op, ip, oend_w - op, ovtype);
4f0: 49 89 f2 mov %rsi,%r10
BYTE* const oend = op + length;
4f3: 49 89 d1 mov %rdx,%r9
4f6: 49 29 fa sub %rdi,%r10
ZSTD_memcpy(dst, src, 16);
4f9: f3 41 0f 6f 39 movdqu (%r9),%xmm7
4fe: 0f 11 3f movups %xmm7,(%rdi)
if (16 >= length) return;
501: 49 83 fa 10 cmp $0x10,%r10
505: 7e 8e jle 495 <ZSTD_safecopy+0x495>
op += 16;
507: 48 83 c7 10 add $0x10,%rdi
ip += 16;
50b: 49 8d 41 10 lea 0x10(%r9),%rax
50f: 90 nop
ZSTD_memcpy(dst, src, 16);
510: f3 0f 6f 30 movdqu (%rax),%xmm6
514: 48 83 c7 20 add $0x20,%rdi
518: 48 83 c0 20 add $0x20,%rax
51c: 0f 11 77 e0 movups %xmm6,-0x20(%rdi)
520: f3 0f 6f 78 f0 movdqu -0x10(%rax),%xmm7
525: 0f 11 7f f0 movups %xmm7,-0x10(%rdi)
while (op < oend);
529: 48 39 fe cmp %rdi,%rsi
52c: 77 e2 ja 510 <ZSTD_safecopy+0x510>
52e: e9 62 ff ff ff jmpq 495 <ZSTD_safecopy+0x495>
533: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)
while (op < oend) *op++ = *ip++;
538: 31 c9 xor %ecx,%ecx
53a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1)
540: 0f b6 34 0a movzbl (%rdx,%rcx,1),%esi
544: 40 88 34 0f mov %sil,(%rdi,%rcx,1)
548: 48 83 c1 01 add $0x1,%rcx
54c: 48 39 c8 cmp %rcx,%rax
54f: 75 ef jne 540 <ZSTD_safecopy+0x540>
551: c3 retq
ip += oend_w - op;
552: 49 89 d1 mov %rdx,%r9
555: 48 89 f8 mov %rdi,%rax
558: 45 31 c0 xor %r8d,%r8d
55b: e9 62 fb ff ff jmpq c2 <ZSTD_safecopy+0xc2>
*ip += 8;
560: 4c 89 c8 mov %r9,%rax
563: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)
ZSTD_memcpy(dst, src, 8);
568: 48 8b 10 mov (%rax),%rdx
COPY8(op, ip)
56b: 49 83 c0 08 add $0x8,%r8
56f: 48 83 c0 08 add $0x8,%rax
ZSTD_memcpy(dst, src, 8);
573: 49 89 50 f8 mov %rdx,-0x8(%r8)
} while (op < oend);
577: 4c 39 c6 cmp %r8,%rsi
57a: 77 ec ja 568 <ZSTD_safecopy+0x568>
57c: e9 14 ff ff ff jmpq 495 <ZSTD_safecopy+0x495>
while (op < oend) *op++ = *ip++;
581: 49 89 d1 mov %rdx,%r9
584: 48 89 fe mov %rdi,%rsi
587: 45 31 c0 xor %r8d,%r8d
58a: e9 52 fd ff ff jmpq 2e1 <ZSTD_safecopy+0x2e1>
58f: 4c 89 c7 mov %r8,%rdi
592: e9 62 ff ff ff jmpq 4f9 <ZSTD_safecopy+0x4f9>
*ip += 8;
597: 4c 89 ca mov %r9,%rdx
59a: 4c 89 c7 mov %r8,%rdi
59d: e9 8e fa ff ff jmpq 30 <ZSTD_safecopy+0x30>
5a2: 66 66 2e 0f 1f 84 00 data16 nopw %cs:0x0(%rax,%rax,1)
5a9: 00 00 00 00
5ad: 66 66 2e 0f 1f 84 00 data16 nopw %cs:0x0(%rax,%rax,1)
5b4: 00 00 00 00
5b8: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1)
5bf: 00
00000000000005c0 <ZSTD_execSequenceEnd>:
FORCE_NOINLINE
size_t ZSTD_execSequenceEnd(BYTE* op,
BYTE* const oend, seq_t sequence,
const BYTE** litPtr, const BYTE* const litLimit,
const BYTE* const prefixStart, const BYTE* const virtualStart, const BYTE* const dictEnd)
{
5c0: 41 57 push %r15
const BYTE* const iLitEnd = *litPtr + sequence.litLength;
const BYTE* match = oLitEnd - sequence.offset;
BYTE* const oend_w = oend - WILDCOPY_OVERLENGTH;
/* bounds checks : careful of address space overflow in 32-bit mode */
RETURN_ERROR_IF(sequenceLength > (size_t)(oend - op), dstSize_tooSmall, "last match must fit within dstBuffer");
5c2: 48 89 f0 mov %rsi,%rax
{
5c5: 41 56 push %r14
RETURN_ERROR_IF(sequenceLength > (size_t)(oend - op), dstSize_tooSmall, "last match must fit within dstBuffer");
5c7: 48 29 f8 sub %rdi,%rax
{
5ca: 41 55 push %r13
5cc: 41 54 push %r12
5ce: 55 push %rbp
5cf: 53 push %rbx
5d0: 48 83 ec 38 sub $0x38,%rsp
5d4: 4c 8b 64 24 70 mov 0x70(%rsp),%r12
5d9: 4c 8b 7c 24 78 mov 0x78(%rsp),%r15
size_t const sequenceLength = sequence.litLength + sequence.matchLength;
5de: 4f 8d 34 3c lea (%r12,%r15,1),%r14
RETURN_ERROR_IF(sequenceLength > (size_t)(oend - op), dstSize_tooSmall, "last match must fit within dstBuffer");
5e2: 4c 39 f0 cmp %r14,%rax
5e5: 0f 82 fd 00 00 00 jb 6e8 <ZSTD_execSequenceEnd+0x128>
5eb: 48 89 d3 mov %rdx,%rbx
const BYTE* const iLitEnd = *litPtr + sequence.litLength;
5ee: 48 8b 12 mov (%rdx),%rdx
RETURN_ERROR_IF(sequence.litLength > (size_t)(litLimit - *litPtr), corruption_detected, "try to read beyond literal buffer");
5f1: 48 29 d1 sub %rdx,%rcx
5f4: 4c 39 e1 cmp %r12,%rcx
5f7: 0f 82 db 00 00 00 jb 6d8 <ZSTD_execSequenceEnd+0x118>
5fd: 4c 89 4c 24 28 mov %r9,0x28(%rsp)
BYTE* const oLitEnd = op + sequence.litLength;
602: 4e 8d 0c 27 lea (%rdi,%r12,1),%r9
BYTE* const oend_w = oend - WILDCOPY_OVERLENGTH;
606: 48 8d 6e e0 lea -0x20(%rsi),%rbp
assert(op < op + sequenceLength);
assert(oLitEnd < op + sequenceLength);
/* copy literals */
ZSTD_safecopy(op, oend_w, *litPtr, sequence.litLength, ZSTD_no_overlap);
60a: 4d 89 c5 mov %r8,%r13
const BYTE* match = oLitEnd - sequence.offset;
60d: 4d 89 ca mov %r9,%r10
ZSTD_safecopy(op, oend_w, *litPtr, sequence.litLength, ZSTD_no_overlap);
610: 45 31 c0 xor %r8d,%r8d
613: 4c 89 e1 mov %r12,%rcx
616: 48 89 ee mov %rbp,%rsi
619: 48 8b 84 24 80 00 00 mov 0x80(%rsp),%rax
620: 00
const BYTE* match = oLitEnd - sequence.offset;
621: 4c 89 4c 24 20 mov %r9,0x20(%rsp)
ZSTD_safecopy(op, oend_w, *litPtr, sequence.litLength, ZSTD_no_overlap);
626: 48 89 54 24 08 mov %rdx,0x8(%rsp)
const BYTE* match = oLitEnd - sequence.offset;
62b: 49 29 c2 sub %rax,%r10
62e: 48 89 44 24 18 mov %rax,0x18(%rsp)
633: 4c 89 54 24 10 mov %r10,0x10(%rsp)
ZSTD_safecopy(op, oend_w, *litPtr, sequence.litLength, ZSTD_no_overlap);
638: e8 c3 f9 ff ff callq 0 <ZSTD_safecopy>
const BYTE* const iLitEnd = *litPtr + sequence.litLength;
63d: 48 8b 54 24 08 mov 0x8(%rsp),%rdx
op = oLitEnd;
*litPtr = iLitEnd;
/* copy Match */
if (sequence.offset > (size_t)(oLitEnd - prefixStart)) {
642: 4c 8b 4c 24 20 mov 0x20(%rsp),%r9
647: 48 8b 44 24 18 mov 0x18(%rsp),%rax
64c: 4c 8b 54 24 10 mov 0x10(%rsp),%r10
const BYTE* const iLitEnd = *litPtr + sequence.litLength;
651: 4c 01 e2 add %r12,%rdx
654: 48 89 13 mov %rdx,(%rbx)
if (sequence.offset > (size_t)(oLitEnd - prefixStart)) {
657: 4c 89 ca mov %r9,%rdx
65a: 4c 29 ea sub %r13,%rdx
65d: 48 39 c2 cmp %rax,%rdx
660: 73 46 jae 6a8 <ZSTD_execSequenceEnd+0xe8>
/* offset beyond prefix */
RETURN_ERROR_IF(sequence.offset > (size_t)(oLitEnd - virtualStart), corruption_detected, "");
662: 4c 8b 5c 24 28 mov 0x28(%rsp),%r11
667: 4c 89 ca mov %r9,%rdx
66a: 4c 29 da sub %r11,%rdx
66d: 48 39 c2 cmp %rax,%rdx
670: 72 66 jb 6d8 <ZSTD_execSequenceEnd+0x118>
match = dictEnd - (prefixStart-match);
672: 48 8b b4 24 88 00 00 mov 0x88(%rsp),%rsi
679: 00
67a: 4c 89 eb mov %r13,%rbx
67d: 4c 29 d3 sub %r10,%rbx
680: 48 29 de sub %rbx,%rsi
if (match + sequence.matchLength <= dictEnd) {
683: 4a 8d 04 3e lea (%rsi,%r15,1),%rax
687: 48 39 84 24 88 00 00 cmp %rax,0x88(%rsp)
68e: 00
68f: 73 67 jae 6f8 <ZSTD_execSequenceEnd+0x138>
ZSTD_memmove(oLitEnd, match, sequence.matchLength);
return sequenceLength;
}
/* span extDict & currentPrefixSegment */
{ size_t const length1 = dictEnd - match;
ZSTD_memmove(oLitEnd, match, length1);
691: 4c 89 cf mov %r9,%rdi
694: 48 89 da mov %rbx,%rdx
op = oLitEnd + length1;
sequence.matchLength -= length1;
697: 49 29 df sub %rbx,%r15
ZSTD_memmove(oLitEnd, match, length1);
69a: e8 00 00 00 00 callq 69f <ZSTD_execSequenceEnd+0xdf>
match = prefixStart;
69f: 4d 89 ea mov %r13,%r10
ZSTD_memmove(oLitEnd, match, length1);
6a2: 49 89 c1 mov %rax,%r9
op = oLitEnd + length1;
6a5: 49 01 d9 add %rbx,%r9
} }
ZSTD_safecopy(op, oend_w, match, sequence.matchLength, ZSTD_overlap_src_before_dst);
6a8: 41 b8 01 00 00 00 mov $0x1,%r8d
6ae: 4c 89 f9 mov %r15,%rcx
6b1: 4c 89 d2 mov %r10,%rdx
6b4: 48 89 ee mov %rbp,%rsi
6b7: 4c 89 cf mov %r9,%rdi
6ba: e8 41 f9 ff ff callq 0 <ZSTD_safecopy>
return sequenceLength;
}
6bf: 48 83 c4 38 add $0x38,%rsp
6c3: 4c 89 f0 mov %r14,%rax
6c6: 5b pop %rbx
6c7: 5d pop %rbp
6c8: 41 5c pop %r12
6ca: 41 5d pop %r13
6cc: 41 5e pop %r14
6ce: 41 5f pop %r15
6d0: c3 retq
6d1: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
RETURN_ERROR_IF(sequence.litLength > (size_t)(litLimit - *litPtr), corruption_detected, "try to read beyond literal buffer");
6d8: 49 c7 c6 ec ff ff ff mov $0xffffffffffffffec,%r14
6df: eb de jmp 6bf <ZSTD_execSequenceEnd+0xff>
6e1: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
RETURN_ERROR_IF(sequenceLength > (size_t)(oend - op), dstSize_tooSmall, "last match must fit within dstBuffer");
6e8: 49 c7 c6 ba ff ff ff mov $0xffffffffffffffba,%r14
6ef: eb ce jmp 6bf <ZSTD_execSequenceEnd+0xff>
6f1: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
ZSTD_memmove(oLitEnd, match, sequence.matchLength);
6f8: 4c 89 fa mov %r15,%rdx
6fb: 4c 89 cf mov %r9,%rdi
6fe: e8 00 00 00 00 callq 703 <ZSTD_execSequenceEnd+0x143>
return sequenceLength;
703: eb ba jmp 6bf <ZSTD_execSequenceEnd+0xff>
705: 66 66 2e 0f 1f 84 00 data16 nopw %cs:0x0(%rax,%rax,1)
70c: 00 00 00 00
710: 66 66 2e 0f 1f 84 00 data16 nopw %cs:0x0(%rax,%rax,1)
717: 00 00 00 00
71b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)
0000000000000720 <ZSTD_buildFSETable_body_bmi2.constprop.0>:
TARGET_ATTRIBUTE("bmi2") static void ZSTD_buildFSETable_body_bmi2(ZSTD_seqSymbol* dt,
720: 45 89 cb mov %r9d,%r11d
723: 41 57 push %r15
U32 const tableSize = 1 << tableLog;
725: b8 01 00 00 00 mov $0x1,%eax
TARGET_ATTRIBUTE("bmi2") static void ZSTD_buildFSETable_body_bmi2(ZSTD_seqSymbol* dt,
72a: 41 89 d7 mov %edx,%r15d
72d: 41 56 push %r14
72f: 4d 89 c6 mov %r8,%r14
732: 41 55 push %r13
734: 49 89 cd mov %rcx,%r13
DTableH.fastMode = 1;
737: 4c 89 d9 mov %r11,%rcx
TARGET_ATTRIBUTE("bmi2") static void ZSTD_buildFSETable_body_bmi2(ZSTD_seqSymbol* dt,
73a: 41 54 push %r12
DTableH.fastMode = 1;
73c: 48 c1 e1 20 shl $0x20,%rcx
TARGET_ATTRIBUTE("bmi2") static void ZSTD_buildFSETable_body_bmi2(ZSTD_seqSymbol* dt,
740: 55 push %rbp
DTableH.fastMode = 1;
741: 48 83 c9 01 or $0x1,%rcx
TARGET_ATTRIBUTE("bmi2") static void ZSTD_buildFSETable_body_bmi2(ZSTD_seqSymbol* dt,
745: 53 push %rbx
746: 48 89 f3 mov %rsi,%rbx
749: 4c 8b 64 24 38 mov 0x38(%rsp),%r12
74e: 48 89 7c 24 e0 mov %rdi,-0x20(%rsp)
753: 44 89 4c 24 f0 mov %r9d,-0x10(%rsp)
ZSTD_seqSymbol* const tableDecode = dt+1;
758: 4c 8d 4f 08 lea 0x8(%rdi),%r9
U32 const tableSize = 1 << tableLog;
75c: 44 89 df mov %r11d,%edi
DTableH.fastMode = 1;
75f: 48 89 4c 24 e8 mov %rcx,-0x18(%rsp)
U32 const tableSize = 1 << tableLog;
764: c4 e2 41 f7 f0 shlx %edi,%eax,%esi
U32 highThreshold = tableSize - 1;
769: 8d 56 ff lea -0x1(%rsi),%edx
BYTE* spread = (BYTE*)(symbolNext + MaxSeq + 1);
76c: 49 8d 7c 24 6a lea 0x6a(%r12),%rdi
DTableH.fastMode = 1;
771: 48 89 4c 24 d8 mov %rcx,-0x28(%rsp)
{ S16 const largeLimit= (S16)(1 << (tableLog-1));
776: 41 8d 4b ff lea -0x1(%r11),%ecx
77a: c4 e2 71 f7 c0 shlx %ecx,%eax,%eax
size_t const step = FSE_TABLESTEP(tableSize);
77f: 89 f1 mov %esi,%ecx
U32 const tableSize = 1 << tableLog;
781: 89 74 24 d4 mov %esi,-0x2c(%rsp)
size_t const step = FSE_TABLESTEP(tableSize);
785: c1 ee 03 shr $0x3,%esi
788: d1 e9 shr %ecx
{ S16 const largeLimit= (S16)(1 << (tableLog-1));
78a: 41 89 c0 mov %eax,%r8d
size_t const step = FSE_TABLESTEP(tableSize);
78d: 8d 74 31 03 lea 0x3(%rcx,%rsi,1),%esi
for (s=0; s<maxSV1; s++) {
791: 41 83 ff ff cmp $0xffffffff,%r15d
795: 0f 84 52 02 00 00 je 9ed <ZSTD_buildFSETable_body_bmi2.constprop.0+0x2cd>
79b: 89 54 24 f4 mov %edx,-0xc(%rsp)
U32 highThreshold = tableSize - 1;
79f: 89 d1 mov %edx,%ecx
for (s=0; s<maxSV1; s++) {
7a1: 31 c0 xor %eax,%eax
7a3: 45 31 db xor %r11d,%r11d
7a6: 41 ba 01 00 00 00 mov $0x1,%r10d
if (normalizedCounter[s] >= largeLimit) DTableH.fastMode=0;
7ac: 31 ed xor %ebp,%ebp
7ae: 44 89 c2 mov %r8d,%edx
7b1: eb 24 jmp 7d7 <ZSTD_buildFSETable_body_bmi2.constprop.0+0xb7>
7b3: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)
7b8: 66 44 39 c2 cmp %r8w,%dx
symbolNext[s] = (U16)normalizedCounter[s];
7bc: 66 45 89 04 44 mov %r8w,(%r12,%rax,2)
7c1: 41 bb 01 00 00 00 mov $0x1,%r11d
for (s=0; s<maxSV1; s++) {
7c7: 4c 8d 40 01 lea 0x1(%rax),%r8
if (normalizedCounter[s] >= largeLimit) DTableH.fastMode=0;
7cb: 4c 0f 4e d5 cmovle %rbp,%r10
for (s=0; s<maxSV1; s++) {
7cf: 49 39 c7 cmp %rax,%r15
7d2: 74 2e je 802 <ZSTD_buildFSETable_body_bmi2.constprop.0+0xe2>
7d4: 4c 89 c0 mov %r8,%rax
if (normalizedCounter[s]==-1) {
7d7: 44 0f b7 04 43 movzwl (%rbx,%rax,2),%r8d
7dc: 66 41 83 f8 ff cmp $0xffff,%r8w
7e1: 75 d5 jne 7b8 <ZSTD_buildFSETable_body_bmi2.constprop.0+0x98>
tableDecode[highThreshold--].baseValue = s;
7e3: 41 89 c8 mov %ecx,%r8d
7e6: 83 e9 01 sub $0x1,%ecx
7e9: 43 89 44 c1 04 mov %eax,0x4(%r9,%r8,8)
symbolNext[s] = 1;
7ee: 41 b8 01 00 00 00 mov $0x1,%r8d
7f4: 66 45 89 04 44 mov %r8w,(%r12,%rax,2)
for (s=0; s<maxSV1; s++) {
7f9: 4c 8d 40 01 lea 0x1(%rax),%r8
7fd: 49 39 c7 cmp %rax,%r15
800: 75 d2 jne 7d4 <ZSTD_buildFSETable_body_bmi2.constprop.0+0xb4>
802: 8b 54 24 f4 mov -0xc(%rsp),%edx
806: 45 84 db test %r11b,%r11b
809: 74 17 je 822 <ZSTD_buildFSETable_body_bmi2.constprop.0+0x102>
80b: 48 b8 00 00 00 00 ff movabs $0xffffffff00000000,%rax
812: ff ff ff
815: 48 23 44 24 e8 and -0x18(%rsp),%rax
81a: 4c 09 d0 or %r10,%rax
81d: 48 89 44 24 d8 mov %rax,-0x28(%rsp)
ZSTD_memcpy(dt, &DTableH, sizeof(DTableH));
822: 48 8b 44 24 e0 mov -0x20(%rsp),%rax
827: 4c 8b 5c 24 d8 mov -0x28(%rsp),%r11
82c: 4c 89 18 mov %r11,(%rax)
if (highThreshold == tableSize - 1) {
82f: 39 ca cmp %ecx,%edx
831: 0f 84 be 00 00 00 je 8f5 <ZSTD_buildFSETable_body_bmi2.constprop.0+0x1d5>
837: 31 ed xor %ebp,%ebp
U32 s, position = 0;
839: 31 c0 xor %eax,%eax
83b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)
int const n = normalizedCounter[s];
840: 44 0f bf 04 6b movswl (%rbx,%rbp,2),%r8d
845: 41 89 ea mov %ebp,%r10d
for (i=0; i<n; i++) {
848: 45 85 c0 test %r8d,%r8d
84b: 7e 23 jle 870 <ZSTD_buildFSETable_body_bmi2.constprop.0+0x150>
84d: 31 ff xor %edi,%edi
84f: 90 nop
tableDecode[position].baseValue = s;
850: 41 89 c3 mov %eax,%r11d
853: 47 89 54 d9 04 mov %r10d,0x4(%r9,%r11,8)
858: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1)
85f: 00
position = (position + step) & tableMask;
860: 01 f0 add %esi,%eax
862: 21 d0 and %edx,%eax
while (position > highThreshold) position = (position + step) & tableMask; /* lowprob area */
864: 39 c8 cmp %ecx,%eax
866: 77 f8 ja 860 <ZSTD_buildFSETable_body_bmi2.constprop.0+0x140>
for (i=0; i<n; i++) {
868: 83 c7 01 add $0x1,%edi
86b: 41 39 f8 cmp %edi,%r8d
86e: 75 e0 jne 850 <ZSTD_buildFSETable_body_bmi2.constprop.0+0x130>
for (s=0; s<maxSV1; s++) {
870: 48 8d 7d 01 lea 0x1(%rbp),%rdi
874: 49 39 ef cmp %rbp,%r15
877: 74 05 je 87e <ZSTD_buildFSETable_body_bmi2.constprop.0+0x15e>
879: 48 89 fd mov %rdi,%rbp
87c: eb c2 jmp 840 <ZSTD_buildFSETable_body_bmi2.constprop.0+0x120>
for (u=0; u<tableSize; u++) {
87e: 8b 44 24 d4 mov -0x2c(%rsp),%eax
882: 85 c0 test %eax,%eax
884: 74 64 je 8ea <ZSTD_buildFSETable_body_bmi2.constprop.0+0x1ca>
tableDecode[u].nextState = (U16) ( (nextState << tableDecode[u].nbBits) - tableSize);
886: 44 8b 54 24 d4 mov -0x2c(%rsp),%r10d
tableDecode[u].nbBits = (BYTE) (tableLog - BIT_highbit32(nextState) );
88b: 44 0f b6 44 24 f0 movzbl -0x10(%rsp),%r8d
tableDecode[u].nextState = (U16) ( (nextState << tableDecode[u].nbBits) - tableSize);
891: 31 c9 xor %ecx,%ecx
893: 44 89 d7 mov %r10d,%edi
896: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1)
89d: 00 00 00
U32 const nextState = symbolNext[symbol]++;
8a0: 41 8b 51 04 mov 0x4(%r9),%edx
for (u=0; u<tableSize; u++) {
8a4: 83 c1 01 add $0x1,%ecx
8a7: 49 83 c1 08 add $0x8,%r9
U32 const nextState = symbolNext[symbol]++;
8ab: 49 8d 34 54 lea (%r12,%rdx,2),%rsi
8af: 0f b7 06 movzwl (%rsi),%eax
8b2: 44 8d 58 01 lea 0x1(%rax),%r11d
8b6: 66 44 89 1e mov %r11w,(%rsi)
# else
unsigned long r = 0;
return _BitScanReverse(&r, val) ? (unsigned)r : 0;
# endif
# elif defined(__GNUC__) && (__GNUC__ >= 3) /* Use GCC Intrinsic */
return __builtin_clz (val) ^ 31;
8ba: 44 0f bd d8 bsr %eax,%r11d
tableDecode[u].nbBits = (BYTE) (tableLog - BIT_highbit32(nextState) );
8be: 44 89 c6 mov %r8d,%esi
8c1: 44 29 de sub %r11d,%esi
tableDecode[u].nextState = (U16) ( (nextState << tableDecode[u].nbBits) - tableSize);
8c4: c4 e2 49 f7 c0 shlx %esi,%eax,%eax
8c9: 29 f8 sub %edi,%eax
tableDecode[u].nbBits = (BYTE) (tableLog - BIT_highbit32(nextState) );
8cb: 41 88 71 fb mov %sil,-0x5(%r9)
tableDecode[u].nextState = (U16) ( (nextState << tableDecode[u].nbBits) - tableSize);
8cf: 66 41 89 41 f8 mov %ax,-0x8(%r9)
tableDecode[u].nbAdditionalBits = (BYTE)nbAdditionalBits[symbol];
8d4: 41 8b 04 96 mov (%r14,%rdx,4),%eax
8d8: 41 88 41 fa mov %al,-0x6(%r9)
tableDecode[u].baseValue = baseValue[symbol];
8dc: 41 8b 44 95 00 mov 0x0(%r13,%rdx,4),%eax
8e1: 41 89 41 fc mov %eax,-0x4(%r9)
for (u=0; u<tableSize; u++) {
8e5: 41 39 ca cmp %ecx,%r10d
8e8: 77 b6 ja 8a0 <ZSTD_buildFSETable_body_bmi2.constprop.0+0x180>
}
8ea: 5b pop %rbx
8eb: 5d pop %rbp
8ec: 41 5c pop %r12
8ee: 41 5d pop %r13
8f0: 41 5e pop %r14
8f2: 41 5f pop %r15
8f4: c3 retq
for (s=0; s<maxSV1; ++s, sv += add) {
8f5: 4a 8d 44 7b 02 lea 0x2(%rbx,%r15,2),%rax
8fa: 48 89 54 24 d8 mov %rdx,-0x28(%rsp)
size_t const step = FSE_TABLESTEP(tableSize);
8ff: 45 31 c0 xor %r8d,%r8d
902: 31 c9 xor %ecx,%ecx
for (s=0; s<maxSV1; ++s, sv += add) {
904: 49 bf 01 01 01 01 01 movabs $0x101010101010101,%r15
90b: 01 01 01
90e: 48 89 c2 mov %rax,%rdx
int const n = normalizedCounter[s];
911: 4c 0f bf 13 movswq (%rbx),%r10
MEM_STATIC U64 MEM_read64(const void* ptr) { return ((const unalign64*)ptr)->v; }
MEM_STATIC size_t MEM_readST(const void* ptr) { return ((const unalignArch*)ptr)->v; }
MEM_STATIC void MEM_write16(void* memPtr, U16 value) { ((unalign16*)memPtr)->v = value; }
MEM_STATIC void MEM_write32(void* memPtr, U32 value) { ((unalign32*)memPtr)->v = value; }
MEM_STATIC void MEM_write64(void* memPtr, U64 value) { ((unalign64*)memPtr)->v = value; }
915: 4c 89 04 0f mov %r8,(%rdi,%rcx,1)
for (i = 8; i < n; i += 8) {
919: 66 41 83 fa 08 cmp $0x8,%r10w
91e: 7e 60 jle 980 <ZSTD_buildFSETable_body_bmi2.constprop.0+0x260>
920: 41 0f bf c2 movswl %r10w,%eax
924: 83 e8 09 sub $0x9,%eax
927: 41 89 c3 mov %eax,%r11d
92a: 41 c1 eb 03 shr $0x3,%r11d
92e: 41 83 c3 01 add $0x1,%r11d
932: 83 f8 07 cmp $0x7,%eax
935: 0f 86 ab 00 00 00 jbe 9e6 <ZSTD_buildFSETable_body_bmi2.constprop.0+0x2c6>
93b: 44 89 dd mov %r11d,%ebp
93e: 66 49 0f 6e c0 movq %r8,%xmm0
943: 49 8d 44 0c 72 lea 0x72(%r12,%rcx,1),%rax
948: d1 ed shr %ebp
94a: 66 0f 6c c0 punpcklqdq %xmm0,%xmm0
94e: 48 c1 e5 04 shl $0x4,%rbp
952: 48 01 c5 add %rax,%rbp
955: 0f 1f 00 nopl (%rax)
958: 0f 11 00 movups %xmm0,(%rax)
95b: 48 83 c0 10 add $0x10,%rax
95f: 48 39 c5 cmp %rax,%rbp
962: 75 f4 jne 958 <ZSTD_buildFSETable_body_bmi2.constprop.0+0x238>
964: 44 89 dd mov %r11d,%ebp
967: 83 e5 fe and $0xfffffffe,%ebp
96a: 8d 04 ed 08 00 00 00 lea 0x8(,%rbp,8),%eax
971: 41 39 eb cmp %ebp,%r11d
974: 74 0a je 980 <ZSTD_buildFSETable_body_bmi2.constprop.0+0x260>
MEM_write64(spread + pos + i, sv);
976: 48 98 cltq
978: 4c 8d 1c 0f lea (%rdi,%rcx,1),%r11
97c: 4d 89 04 03 mov %r8,(%r11,%rax,1)
for (s=0; s<maxSV1; ++s, sv += add) {
980: 48 83 c3 02 add $0x2,%rbx
pos += n;
984: 4c 01 d1 add %r10,%rcx
for (s=0; s<maxSV1; ++s, sv += add) {
987: 4d 01 f8 add %r15,%r8
98a: 48 39 da cmp %rbx,%rdx
98d: 75 82 jne 911 <ZSTD_buildFSETable_body_bmi2.constprop.0+0x1f1>
98f: 48 8b 54 24 d8 mov -0x28(%rsp),%rdx
for (s = 0; s < (size_t)tableSize; s += unroll) {
994: 8b 44 24 d4 mov -0x2c(%rsp),%eax
998: 48 85 c0 test %rax,%rax
99b: 0f 84 49 ff ff ff je 8ea <ZSTD_buildFSETable_body_bmi2.constprop.0+0x1ca>
9a1: 48 83 e8 01 sub $0x1,%rax
9a5: 48 83 e0 fe and $0xfffffffffffffffe,%rax
9a9: 4d 8d 54 04 6c lea 0x6c(%r12,%rax,1),%r10
size_t position = 0;
9ae: 31 c0 xor %eax,%eax
tableDecode[uPosition].baseValue = spread[s + u];
9b0: 44 0f b6 07 movzbl (%rdi),%r8d
size_t const uPosition = (position + (u * step)) & tableMask;
9b4: 48 89 d1 mov %rdx,%rcx
for (s = 0; s < (size_t)tableSize; s += unroll) {
9b7: 48 83 c7 02 add $0x2,%rdi
size_t const uPosition = (position + (u * step)) & tableMask;
9bb: 48 21 c1 and %rax,%rcx
9be: 48 01 f0 add %rsi,%rax
tableDecode[uPosition].baseValue = spread[s + u];
9c1: 45 89 44 c9 04 mov %r8d,0x4(%r9,%rcx,8)
size_t const uPosition = (position + (u * step)) & tableMask;
9c6: 48 89 d1 mov %rdx,%rcx
tableDecode[uPosition].baseValue = spread[s + u];
9c9: 44 0f b6 47 ff movzbl -0x1(%rdi),%r8d
size_t const uPosition = (position + (u * step)) & tableMask;
9ce: 48 21 c1 and %rax,%rcx
position = (position + (unroll * step)) & tableMask;
9d1: 48 01 f0 add %rsi,%rax
tableDecode[uPosition].baseValue = spread[s + u];
9d4: 45 89 44 c9 04 mov %r8d,0x4(%r9,%rcx,8)
position = (position + (unroll * step)) & tableMask;
9d9: 48 21 d0 and %rdx,%rax
for (s = 0; s < (size_t)tableSize; s += unroll) {
9dc: 49 39 fa cmp %rdi,%r10
9df: 75 cf jne 9b0 <ZSTD_buildFSETable_body_bmi2.constprop.0+0x290>
9e1: e9 a0 fe ff ff jmpq 886 <ZSTD_buildFSETable_body_bmi2.constprop.0+0x166>
for (i = 8; i < n; i += 8) {
9e6: b8 08 00 00 00 mov $0x8,%eax
9eb: eb 89 jmp 976 <ZSTD_buildFSETable_body_bmi2.constprop.0+0x256>
ZSTD_memcpy(dt, &DTableH, sizeof(DTableH));
9ed: 48 8b 44 24 e0 mov -0x20(%rsp),%rax
9f2: 48 8b 5c 24 e8 mov -0x18(%rsp),%rbx
9f7: 48 89 18 mov %rbx,(%rax)
for (s=0; s<maxSV1; ++s, sv += add) {
9fa: eb 98 jmp 994 <ZSTD_buildFSETable_body_bmi2.constprop.0+0x274>
9fc: 0f 1f 40 00 nopl 0x0(%rax)
0000000000000a00 <ZSTD_initFseState>:
static void
ZSTD_initFseState(ZSTD_fseState* DStatePtr, BIT_DStream_t* bitD, const ZSTD_seqSymbol* dt)
{
const void* ptr = dt;
const ZSTD_seqSymbol_header* const DTableH = (const ZSTD_seqSymbol_header*)ptr;
DStatePtr->state = BIT_readBits(bitD, DTableH->tableLog);
a00: 44 8b 42 04 mov 0x4(%rdx),%r8d
{
/* arbitrate between double-shift and shift+mask */
#if 1
/* if bitD->bitsConsumed + nbBits > sizeof(bitD->bitContainer)*8,
* bitstream is likely corrupted, and result is undefined */
return BIT_getMiddleBits(bitD->bitContainer, (sizeof(bitD->bitContainer)*8) - bitD->bitsConsumed - nbBits, nbBits);
a04: 8b 46 08 mov 0x8(%rsi),%eax
return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
a07: 4c 8d 0d 00 00 00 00 lea 0x0(%rip),%r9 # a0e <ZSTD_initFseState+0xe>
a0e: 4c 8b 1e mov (%rsi),%r11
return BIT_getMiddleBits(bitD->bitContainer, (sizeof(bitD->bitContainer)*8) - bitD->bitsConsumed - nbBits, nbBits);
a11: 44 01 c0 add %r8d,%eax
return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
a14: 89 c1 mov %eax,%ecx
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
}
MEM_STATIC FORCE_INLINE_ATTR void BIT_skipBits(BIT_DStream_t* bitD, U32 nbBits)
{
bitD->bitsConsumed += nbBits;
a16: 89 46 08 mov %eax,0x8(%rsi)
return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
a19: f7 d9 neg %ecx
a1b: 49 d3 eb shr %cl,%r11
a1e: 4c 89 d9 mov %r11,%rcx
a21: 43 23 0c 81 and (%r9,%r8,4),%ecx
a25: 48 89 0f mov %rcx,(%rdi)
* This function is safe, it guarantees it will not read beyond src buffer.
* @return : status of `BIT_DStream_t` internal register.
* when status == BIT_DStream_unfinished, internal register is filled with at least 25 or 57 bits */
MEM_STATIC BIT_DStream_status BIT_reloadDStream(BIT_DStream_t* bitD)
{
if (bitD->bitsConsumed > (sizeof(bitD->bitContainer)*8)) /* overflow detected, like end of stream */
a28: 83 f8 40 cmp $0x40,%eax
a2b: 77 4e ja a7b <ZSTD_initFseState+0x7b>
return BIT_DStream_overflow;
if (bitD->ptr >= bitD->limitPtr) {
a2d: 48 8b 4e 10 mov 0x10(%rsi),%rcx
a31: 48 3b 4e 20 cmp 0x20(%rsi),%rcx
a35: 73 51 jae a88 <ZSTD_initFseState+0x88>
return BIT_reloadDStreamFast(bitD);
}
if (bitD->ptr == bitD->start) {
a37: 4c 8b 56 18 mov 0x18(%rsi),%r10
a3b: 4c 39 d1 cmp %r10,%rcx
a3e: 74 3b je a7b <ZSTD_initFseState+0x7b>
if (bitD->bitsConsumed < sizeof(bitD->bitContainer)*8) return BIT_DStream_endOfBuffer;
return BIT_DStream_completed;
}
/* start < ptr < limitPtr */
{ U32 nbBytes = bitD->bitsConsumed >> 3;
a40: 41 89 c0 mov %eax,%r8d
BIT_DStream_status result = BIT_DStream_unfinished;
if (bitD->ptr - nbBytes < bitD->start) {
a43: 49 89 c9 mov %rcx,%r9
{ U32 nbBytes = bitD->bitsConsumed >> 3;
a46: 41 c1 e8 03 shr $0x3,%r8d
if (bitD->ptr - nbBytes < bitD->start) {
a4a: 45 89 c3 mov %r8d,%r11d
a4d: 4d 29 d9 sub %r11,%r9
a50: 4d 39 ca cmp %r9,%r10
a53: 76 12 jbe a67 <ZSTD_initFseState+0x67>
nbBytes = (U32)(bitD->ptr - bitD->start); /* ptr > start */
a55: 49 89 c9 mov %rcx,%r9
a58: 4d 29 d1 sub %r10,%r9
result = BIT_DStream_endOfBuffer;
}
bitD->ptr -= nbBytes;
a5b: 45 89 ca mov %r9d,%r10d
nbBytes = (U32)(bitD->ptr - bitD->start); /* ptr > start */
a5e: 45 89 c8 mov %r9d,%r8d
bitD->ptr -= nbBytes;
a61: 4c 29 d1 sub %r10,%rcx
a64: 49 89 c9 mov %rcx,%r9
bitD->bitsConsumed -= nbBytes*8;
a67: 41 c1 e0 03 shl $0x3,%r8d
bitD->ptr -= nbBytes;
a6b: 4c 89 4e 10 mov %r9,0x10(%rsi)
bitD->bitsConsumed -= nbBytes*8;
a6f: 44 29 c0 sub %r8d,%eax
a72: 89 46 08 mov %eax,0x8(%rsi)
bitD->bitContainer = MEM_readLEST(bitD->ptr); /* reminder : srcSize > sizeof(bitD->bitContainer), otherwise bitD->ptr == bitD->start */
a75: 49 8b 01 mov (%r9),%rax
a78: 48 89 06 mov %rax,(%rsi)
DEBUGLOG(6, "ZSTD_initFseState : val=%u using %u bits",
(U32)DStatePtr->state, DTableH->tableLog);
BIT_reloadDStream(bitD);
DStatePtr->table = dt + 1;
a7b: 48 83 c2 08 add $0x8,%rdx
a7f: 48 89 57 08 mov %rdx,0x8(%rdi)
}
a83: c3 retq
a84: 0f 1f 40 00 nopl 0x0(%rax)
bitD->ptr -= bitD->bitsConsumed >> 3;
a88: 41 89 c0 mov %eax,%r8d
bitD->bitsConsumed &= 7;
a8b: 83 e0 07 and $0x7,%eax
DStatePtr->table = dt + 1;
a8e: 48 83 c2 08 add $0x8,%rdx
bitD->ptr -= bitD->bitsConsumed >> 3;
a92: 41 c1 e8 03 shr $0x3,%r8d
bitD->bitsConsumed &= 7;
a96: 89 46 08 mov %eax,0x8(%rsi)
bitD->ptr -= bitD->bitsConsumed >> 3;
a99: 4c 29 c1 sub %r8,%rcx
bitD->bitContainer = MEM_readLEST(bitD->ptr);
a9c: 48 8b 01 mov (%rcx),%rax
bitD->ptr -= bitD->bitsConsumed >> 3;
a9f: 48 89 4e 10 mov %rcx,0x10(%rsi)
bitD->bitContainer = MEM_readLEST(bitD->ptr);
aa3: 48 89 06 mov %rax,(%rsi)
aa6: 48 89 57 08 mov %rdx,0x8(%rdi)
}
aaa: c3 retq
aab: 66 66 2e 0f 1f 84 00 data16 nopw %cs:0x0(%rax,%rax,1)
ab2: 00 00 00 00
ab6: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1)
abd: 00 00 00
0000000000000ac0 <ZSTD_decompressSequencesLong_default.constprop.0>:
return op-ostart;
}
static size_t
ZSTD_decompressSequencesLong_default(ZSTD_DCtx* dctx,
ac0: 41 57 push %r15
BYTE* const oend = ostart + maxDstSize;
ac2: 48 01 f2 add %rsi,%rdx
ZSTD_decompressSequencesLong_default(ZSTD_DCtx* dctx,
ac5: 41 56 push %r14
ac7: 41 55 push %r13
ac9: 41 54 push %r12
acb: 55 push %rbp
acc: 53 push %rbx
acd: 48 81 ec 38 02 00 00 sub $0x238,%rsp
const BYTE* const litEnd = litPtr + dctx->litSize;
ad4: 48 8b 87 c0 75 00 00 mov 0x75c0(%rdi),%rax
ZSTD_decompressSequencesLong_default(ZSTD_DCtx* dctx,
adb: 48 89 74 24 58 mov %rsi,0x58(%rsp)
const BYTE* litPtr = dctx->litPtr;
ae0: 48 8b b7 a0 75 00 00 mov 0x75a0(%rdi),%rsi
ZSTD_decompressSequencesLong_default(ZSTD_DCtx* dctx,
ae7: 48 89 bc 24 88 00 00 mov %rdi,0x88(%rsp)
aee: 00
const BYTE* const litEnd = litPtr + dctx->litSize;
aef: 48 01 f0 add %rsi,%rax
ZSTD_decompressSequencesLong_default(ZSTD_DCtx* dctx,
af2: 44 89 8c 24 a0 00 00 mov %r9d,0xa0(%rsp)
af9: 00
BYTE* const oend = ostart + maxDstSize;
afa: 48 89 54 24 78 mov %rdx,0x78(%rsp)
const BYTE* litPtr = dctx->litPtr;
aff: 48 89 b4 24 b8 00 00 mov %rsi,0xb8(%rsp)
b06: 00
const BYTE* const litEnd = litPtr + dctx->litSize;
b07: 48 89 44 24 48 mov %rax,0x48(%rsp)
if (nbSeq) {
b0c: 45 85 c9 test %r9d,%r9d
b0f: 0f 84 cb 00 00 00 je be0 <ZSTD_decompressSequencesLong_default.constprop.0+0x120>
const BYTE* const prefixStart = (const BYTE*) (dctx->prefixStart);
b15: 48 8b 87 c8 74 00 00 mov 0x74c8(%rdi),%rax
dctx->fseEntropy = 1;
b1c: c7 87 2c 75 00 00 01 movl $0x1,0x752c(%rdi)
b23: 00 00 00
const BYTE* const prefixStart = (const BYTE*) (dctx->prefixStart);
b26: 48 89 44 24 20 mov %rax,0x20(%rsp)
const BYTE* const dictStart = (const BYTE*) (dctx->virtualStart);
b2b: 48 8b 87 d0 74 00 00 mov 0x74d0(%rdi),%rax
b32: 48 89 84 24 90 00 00 mov %rax,0x90(%rsp)
b39: 00
const BYTE* const dictEnd = (const BYTE*) (dctx->dictEnd);
b3a: 48 8b 87 d8 74 00 00 mov 0x74d8(%rdi),%rax
b41: 48 89 44 24 28 mov %rax,0x28(%rsp)
{ int i; for (i=0; i<ZSTD_REP_NUM; i++) seqState.prevOffset[i] = dctx->entropy.rep[i]; }
b46: 8b 87 3c 68 00 00 mov 0x683c(%rdi),%eax
b4c: 48 89 84 24 58 01 00 mov %rax,0x158(%rsp)
b53: 00
b54: 8b 87 40 68 00 00 mov 0x6840(%rdi),%eax
b5a: 48 89 84 24 60 01 00 mov %rax,0x160(%rsp)
b61: 00
b62: 8b 87 44 68 00 00 mov 0x6844(%rdi),%eax
b68: 48 89 84 24 68 01 00 mov %rax,0x168(%rsp)
b6f: 00
if (srcSize < 1) { ZSTD_memset(bitD, 0, sizeof(*bitD)); return ERROR(srcSize_wrong); }
b70: 4d 85 c0 test %r8,%r8
b73: 74 4b je bc0 <ZSTD_decompressSequencesLong_default.constprop.0+0x100>
bitD->limitPtr = bitD->start + sizeof(bitD->bitContainer);
b75: 48 8d 41 08 lea 0x8(%rcx),%rax
bitD->start = (const char*)srcBuffer;
b79: 48 89 8c 24 18 01 00 mov %rcx,0x118(%rsp)
b80: 00
bitD->limitPtr = bitD->start + sizeof(bitD->bitContainer);
b81: 48 89 84 24 20 01 00 mov %rax,0x120(%rsp)
b88: 00
{ BYTE const lastByte = ((const BYTE*)srcBuffer)[srcSize-1];
b89: 42 0f b6 44 01 ff movzbl -0x1(%rcx,%r8,1),%eax
if (srcSize >= sizeof(bitD->bitContainer)) { /* normal case */
b8f: 49 83 f8 07 cmp $0x7,%r8
b93: 0f 86 87 00 00 00 jbe c20 <ZSTD_decompressSequencesLong_default.constprop.0+0x160>
bitD->ptr = (const char*)srcBuffer + srcSize - sizeof(bitD->bitContainer);
b99: 4a 8d 54 01 f8 lea -0x8(%rcx,%r8,1),%rdx
b9e: 48 89 94 24 10 01 00 mov %rdx,0x110(%rsp)
ba5: 00
bitD->bitContainer = MEM_readLEST(bitD->ptr);
ba6: 48 8b 12 mov (%rdx),%rdx
ba9: 48 89 94 24 00 01 00 mov %rdx,0x100(%rsp)
bb0: 00
bitD->bitsConsumed = lastByte ? 8 - BIT_highbit32(lastByte) : 0; /* ensures bitsConsumed is always set */
bb1: 84 c0 test %al,%al
bb3: 0f 85 37 04 00 00 jne ff0 <ZSTD_decompressSequencesLong_default.constprop.0+0x530>
bb9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
RETURN_ERROR_IF(
bc0: 49 c7 c4 ec ff ff ff mov $0xffffffffffffffec,%r12
const void* seqStart, size_t seqSize, int nbSeq,
const ZSTD_longOffset_e isLongOffset,
const int frame)
{
return ZSTD_decompressSequencesLong_body(dctx, dst, maxDstSize, seqStart, seqSize, nbSeq, isLongOffset, frame);
}
bc7: 48 81 c4 38 02 00 00 add $0x238,%rsp
bce: 4c 89 e0 mov %r12,%rax
bd1: 5b pop %rbx
bd2: 5d pop %rbp
bd3: 41 5c pop %r12
bd5: 41 5d pop %r13
bd7: 41 5e pop %r14
bd9: 41 5f pop %r15
bdb: c3 retq
bdc: 0f 1f 40 00 nopl 0x0(%rax)
BYTE* op = ostart;
be0: 4c 8b 5c 24 58 mov 0x58(%rsp),%r11
be5: 48 89 c3 mov %rax,%rbx
{ size_t const lastLLSize = litEnd - litPtr;
be8: 48 29 f3 sub %rsi,%rbx
RETURN_ERROR_IF(lastLLSize > (size_t)(oend-op), dstSize_tooSmall, "");
beb: 4c 29 da sub %r11,%rdx
bee: 49 c7 c4 ba ff ff ff mov $0xffffffffffffffba,%r12
bf5: 48 39 d3 cmp %rdx,%rbx
bf8: 77 cd ja bc7 <ZSTD_decompressSequencesLong_default.constprop.0+0x107>
if (op != NULL) {
bfa: 4d 85 db test %r11,%r11
bfd: 74 11 je c10 <ZSTD_decompressSequencesLong_default.constprop.0+0x150>
ZSTD_memcpy(op, litPtr, lastLLSize);
bff: 4c 89 df mov %r11,%rdi
c02: 48 89 da mov %rbx,%rdx
c05: e8 00 00 00 00 callq c0a <ZSTD_decompressSequencesLong_default.constprop.0+0x14a>
c0a: 49 89 c3 mov %rax,%r11
op += lastLLSize;
c0d: 49 01 db add %rbx,%r11
return op-ostart;
c10: 4c 2b 5c 24 58 sub 0x58(%rsp),%r11
c15: 4d 89 dc mov %r11,%r12
c18: eb ad jmp bc7 <ZSTD_decompressSequencesLong_default.constprop.0+0x107>
c1a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1)
bitD->ptr = bitD->start;
c20: 48 8d 3d 00 00 00 00 lea 0x0(%rip),%rdi # c27 <ZSTD_decompressSequencesLong_default.constprop.0+0x167>
bitD->bitContainer = *(const BYTE*)(bitD->start);
c27: 0f b6 11 movzbl (%rcx),%edx
bitD->ptr = bitD->start;
c2a: 48 89 8c 24 10 01 00 mov %rcx,0x110(%rsp)
c31: 00
bitD->bitContainer = *(const BYTE*)(bitD->start);
c32: 4a 63 34 87 movslq (%rdi,%r8,4),%rsi
c36: 48 89 94 24 00 01 00 mov %rdx,0x100(%rsp)
c3d: 00
switch(srcSize)
c3e: 48 01 fe add %rdi,%rsi
c41: ff e6 jmpq *%rsi
case 7: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[6]) << (sizeof(bitD->bitContainer)*8 - 16);
c43: 0f b6 71 06 movzbl 0x6(%rcx),%esi
c47: 48 c1 e6 30 shl $0x30,%rsi
c4b: 48 01 f2 add %rsi,%rdx
case 6: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[5]) << (sizeof(bitD->bitContainer)*8 - 24);
c4e: 0f b6 71 05 movzbl 0x5(%rcx),%esi
c52: 48 c1 e6 28 shl $0x28,%rsi
c56: 48 01 f2 add %rsi,%rdx
case 5: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[4]) << (sizeof(bitD->bitContainer)*8 - 32);
c59: 0f b6 71 04 movzbl 0x4(%rcx),%esi
c5d: 48 c1 e6 20 shl $0x20,%rsi
c61: 48 01 f2 add %rsi,%rdx
case 4: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[3]) << 24;
c64: 0f b6 71 03 movzbl 0x3(%rcx),%esi
c68: 48 c1 e6 18 shl $0x18,%rsi
c6c: 48 01 f2 add %rsi,%rdx
case 3: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[2]) << 16;
c6f: 0f b6 71 02 movzbl 0x2(%rcx),%esi
c73: 48 c1 e6 10 shl $0x10,%rsi
c77: 48 01 f2 add %rsi,%rdx
case 2: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[1]) << 8;
c7a: 0f b6 49 01 movzbl 0x1(%rcx),%ecx
c7e: 48 c1 e1 08 shl $0x8,%rcx
c82: 48 01 ca add %rcx,%rdx
c85: 48 89 94 24 00 01 00 mov %rdx,0x100(%rsp)
c8c: 00
bitD->bitsConsumed = lastByte ? 8 - BIT_highbit32(lastByte) : 0;
c8d: 84 c0 test %al,%al
c8f: 0f 84 2b ff ff ff je bc0 <ZSTD_decompressSequencesLong_default.constprop.0+0x100>
bitD->bitsConsumed += (U32)(sizeof(bitD->bitContainer) - srcSize)*8;
c95: ba 09 00 00 00 mov $0x9,%edx
return __builtin_clz (val) ^ 31;
c9a: 0f bd c0 bsr %eax,%eax
bitD->bitsConsumed += (U32)(sizeof(bitD->bitContainer) - srcSize)*8;
c9d: 44 29 c2 sub %r8d,%edx
ca0: c1 e2 03 shl $0x3,%edx
ca3: 29 c2 sub %eax,%edx
ca5: 89 94 24 08 01 00 00 mov %edx,0x108(%rsp)
int const seqAdvance = MIN(nbSeq, ADVANCED_SEQS);
cac: 8b 9c 24 a0 00 00 00 mov 0xa0(%rsp),%ebx
cb3: b8 08 00 00 00 mov $0x8,%eax
ZSTD_initFseState(&seqState.stateLL, &seqState.DStream, dctx->LLTptr);
cb8: 48 8d b4 24 00 01 00 lea 0x100(%rsp),%rsi
cbf: 00
cc0: 48 8d bc 24 28 01 00 lea 0x128(%rsp),%rdi
cc7: 00
int const seqAdvance = MIN(nbSeq, ADVANCED_SEQS);
cc8: 83 fb 08 cmp $0x8,%ebx
ccb: 0f 4e c3 cmovle %ebx,%eax
ZSTD_initFseState(&seqState.stateLL, &seqState.DStream, dctx->LLTptr);
cce: 48 8b 9c 24 88 00 00 mov 0x88(%rsp),%rbx
cd5: 00
cd6: 48 8b 13 mov (%rbx),%rdx
int const seqAdvance = MIN(nbSeq, ADVANCED_SEQS);
cd9: 89 44 24 44 mov %eax,0x44(%rsp)
ZSTD_initFseState(&seqState.stateLL, &seqState.DStream, dctx->LLTptr);
cdd: e8 1e fd ff ff callq a00 <ZSTD_initFseState>
ZSTD_initFseState(&seqState.stateOffb, &seqState.DStream, dctx->OFTptr);
ce2: 48 8b 53 10 mov 0x10(%rbx),%rdx
ce6: 48 8d bc 24 38 01 00 lea 0x138(%rsp),%rdi
ced: 00
cee: e8 0d fd ff ff callq a00 <ZSTD_initFseState>
ZSTD_initFseState(&seqState.stateML, &seqState.DStream, dctx->MLTptr);
cf3: 48 8b 53 08 mov 0x8(%rbx),%rdx
cf7: 48 8d bc 24 48 01 00 lea 0x148(%rsp),%rdi
cfe: 00
cff: e8 fc fc ff ff callq a00 <ZSTD_initFseState>
if (bitD->bitsConsumed > (sizeof(bitD->bitContainer)*8)) /* overflow detected, like end of stream */
d04: 8b 84 24 08 01 00 00 mov 0x108(%rsp),%eax
d0b: 89 84 24 a4 00 00 00 mov %eax,0xa4(%rsp)
d12: 83 f8 40 cmp $0x40,%eax
d15: 0f 87 b5 0d 00 00 ja 1ad0 <ZSTD_decompressSequencesLong_default.constprop.0+0x1010>
size_t prefetchPos = (size_t)(op-prefixStart); /* track position relative to prefixStart */
d1b: 48 8b 44 24 58 mov 0x58(%rsp),%rax
d20: 48 2b 44 24 20 sub 0x20(%rsp),%rax
ZSTD_seqSymbol const ofDInfo = seqState->stateOffb.table[seqState->stateOffb.state];
d25: c6 44 24 50 00 movb $0x0,0x50(%rsp)
d2a: 31 d2 xor %edx,%edx
size_t prefetchPos = (size_t)(op-prefixStart); /* track position relative to prefixStart */
d2c: 48 89 44 24 18 mov %rax,0x18(%rsp)
if (bitD->ptr >= bitD->limitPtr) {
d31: 48 8b 84 24 20 01 00 mov 0x120(%rsp),%rax
d38: 00
d39: 4c 8b b4 24 10 01 00 mov 0x110(%rsp),%r14
d40: 00
for (seqNb=0; (BIT_reloadDStream(&seqState.DStream) <= BIT_DStream_completed) && (seqNb<seqAdvance); seqNb++) {
d41: c7 44 24 08 00 00 00 movl $0x0,0x8(%rsp)
d48: 00
d49: 48 89 44 24 38 mov %rax,0x38(%rsp)
if (bitD->ptr == bitD->start) {
d4e: 48 8b 84 24 18 01 00 mov 0x118(%rsp),%rax
d55: 00
d56: 4c 89 b4 24 a8 00 00 mov %r14,0xa8(%rsp)
d5d: 00
d5e: 4c 8b 8c 24 00 01 00 mov 0x100(%rsp),%r9
d65: 00
d66: 48 89 84 24 80 00 00 mov %rax,0x80(%rsp)
d6d: 00
ZSTD_seqSymbol const llDInfo = seqState->stateLL.table[seqState->stateLL.state];
d6e: 48 8b 84 24 30 01 00 mov 0x130(%rsp),%rax
d75: 00
d76: 48 89 44 24 60 mov %rax,0x60(%rsp)
ZSTD_seqSymbol const mlDInfo = seqState->stateML.table[seqState->stateML.state];
d7b: 48 8b 84 24 50 01 00 mov 0x150(%rsp),%rax
d82: 00
d83: 48 89 44 24 68 mov %rax,0x68(%rsp)
ZSTD_seqSymbol const ofDInfo = seqState->stateOffb.table[seqState->stateOffb.state];
d88: 48 8b 84 24 40 01 00 mov 0x140(%rsp),%rax
d8f: 00
d90: 48 89 44 24 70 mov %rax,0x70(%rsp)
d95: 48 8d 84 24 70 01 00 lea 0x170(%rsp),%rax
d9c: 00
d9d: 48 89 c5 mov %rax,%rbp
da0: 48 89 84 24 98 00 00 mov %rax,0x98(%rsp)
da7: 00
da8: 8b 84 24 a4 00 00 00 mov 0xa4(%rsp),%eax
return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
daf: 48 89 eb mov %rbp,%rbx
db2: 4c 89 f5 mov %r14,%rbp
db5: 49 89 de mov %rbx,%r14
db8: e9 36 01 00 00 jmpq ef3 <ZSTD_decompressSequencesLong_default.constprop.0+0x433>
dbd: 0f 1f 00 nopl (%rax)
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
dc0: 89 c1 mov %eax,%ecx
dc2: 4d 89 cf mov %r9,%r15
bitD->bitsConsumed += nbBits;
dc5: 44 01 c0 add %r8d,%eax
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
dc8: 49 d3 e7 shl %cl,%r15
dcb: 44 89 c1 mov %r8d,%ecx
dce: f7 d9 neg %ecx
dd0: 49 d3 ef shr %cl,%r15
offset = ofBase + BIT_readBitsFast(&seqState->DStream, ofBits/*>0*/); /* <= (ZSTD_WINDOWLOG_MAX-1) bits */
dd3: 8b 4c 24 10 mov 0x10(%rsp),%ecx
dd7: 49 01 cf add %rcx,%r15
seqState->prevOffset[2] = seqState->prevOffset[1];
dda: 48 8b 8c 24 60 01 00 mov 0x160(%rsp),%rcx
de1: 00
seqState->prevOffset[1] = seqState->prevOffset[0];
de2: 48 89 bc 24 60 01 00 mov %rdi,0x160(%rsp)
de9: 00
seqState->prevOffset[0] = offset;
dea: 4c 89 bc 24 58 01 00 mov %r15,0x158(%rsp)
df1: 00
df2: 4c 89 ff mov %r15,%rdi
seqState->prevOffset[2] = seqState->prevOffset[1];
df5: 48 89 8c 24 68 01 00 mov %rcx,0x168(%rsp)
dfc: 00
seq.matchLength = mlBase;
dfd: 48 89 74 24 10 mov %rsi,0x10(%rsp)
if (mlBits > 0)
e02: 45 84 ed test %r13b,%r13b
e05: 0f 85 25 02 00 00 jne 1030 <ZSTD_decompressSequencesLong_default.constprop.0+0x570>
if (MEM_64bits() && UNLIKELY(totalBits >= STREAM_ACCUMULATOR_MIN_64-(LLFSELog+MLFSELog+OffFSELog)))
e0b: 80 7c 24 30 1e cmpb $0x1e,0x30(%rsp)
e10: 0f 87 3d 02 00 00 ja 1053 <ZSTD_decompressSequencesLong_default.constprop.0+0x593>
if (llBits > 0)
e16: 45 84 e4 test %r12b,%r12b
e19: 0f 85 f1 01 00 00 jne 1010 <ZSTD_decompressSequencesLong_default.constprop.0+0x550>
U32 const nbBits = DInfo.nbBits;
e1f: 0f b6 73 03 movzbl 0x3(%rbx),%esi
return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
e23: 4d 89 cf mov %r9,%r15
sequences[seqNb] = sequence;
e26: 66 48 0f 6e c2 movq %rdx,%xmm0
e2b: 0f 16 44 24 10 movhps 0x10(%rsp),%xmm0
return BIT_getMiddleBits(bitD->bitContainer, (sizeof(bitD->bitContainer)*8) - bitD->bitsConsumed - nbBits, nbBits);
e30: 01 f0 add %esi,%eax
return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
e32: 89 c1 mov %eax,%ecx
e34: f7 d9 neg %ecx
e36: 49 d3 ef shr %cl,%r15
e39: 4c 89 f9 mov %r15,%rcx
e3c: 4c 8d 3d 00 00 00 00 lea 0x0(%rip),%r15 # e43 <ZSTD_decompressSequencesLong_default.constprop.0+0x383>
e43: 41 23 0c b7 and (%r15,%rsi,4),%ecx
DStatePtr->state = DInfo.nextState + lowBits;
e47: 0f b7 33 movzwl (%rbx),%esi
e4a: 4c 89 cb mov %r9,%rbx
e4d: 48 01 f1 add %rsi,%rcx
e50: 48 89 8c 24 28 01 00 mov %rcx,0x128(%rsp)
e57: 00
U32 const nbBits = DInfo.nbBits;
e58: 41 0f b6 73 03 movzbl 0x3(%r11),%esi
return BIT_getMiddleBits(bitD->bitContainer, (sizeof(bitD->bitContainer)*8) - bitD->bitsConsumed - nbBits, nbBits);
e5d: 01 f0 add %esi,%eax
return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
e5f: 89 c1 mov %eax,%ecx
e61: f7 d9 neg %ecx
e63: 48 d3 eb shr %cl,%rbx
e66: 48 89 d9 mov %rbx,%rcx
e69: 41 23 0c b7 and (%r15,%rsi,4),%ecx
DStatePtr->state = DInfo.nextState + lowBits;
e6d: 41 0f b7 33 movzwl (%r11),%esi
e71: 4d 89 cb mov %r9,%r11
e74: 48 01 f1 add %rsi,%rcx
e77: 48 89 8c 24 48 01 00 mov %rcx,0x148(%rsp)
e7e: 00
U32 const nbBits = DInfo.nbBits;
e7f: 41 0f b6 72 03 movzbl 0x3(%r10),%esi
return BIT_getMiddleBits(bitD->bitContainer, (sizeof(bitD->bitContainer)*8) - bitD->bitsConsumed - nbBits, nbBits);
e84: 01 f0 add %esi,%eax
return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
e86: 89 c1 mov %eax,%ecx
e88: f7 d9 neg %ecx
e8a: 49 d3 eb shr %cl,%r11
e8d: 4c 89 d9 mov %r11,%rcx
e90: 41 23 0c b7 and (%r15,%rsi,4),%ecx
DStatePtr->state = DInfo.nextState + lowBits;
e94: 41 0f b7 32 movzwl (%r10),%esi
e98: 48 01 f1 add %rsi,%rcx
prefetchPos += sequence.litLength;
e9b: 48 8b 74 24 18 mov 0x18(%rsp),%rsi
DStatePtr->state = DInfo.nextState + lowBits;
ea0: 48 89 8c 24 38 01 00 mov %rcx,0x138(%rsp)
ea7: 00
{ const BYTE* const matchBase = (sequence.offset > prefetchPos) ? dictEnd : prefixStart;
ea8: 48 8b 4c 24 20 mov 0x20(%rsp),%rcx
prefetchPos += sequence.litLength;
ead: 48 01 d6 add %rdx,%rsi
{ const BYTE* const matchBase = (sequence.offset > prefetchPos) ? dictEnd : prefixStart;
eb0: ba 01 00 00 00 mov $0x1,%edx
eb5: 48 39 fe cmp %rdi,%rsi
const BYTE* const match = matchBase + prefetchPos - sequence.offset; /* note : this operation can overflow when seq.offset is really too large, which can only happen when input is corrupted.
eb8: 49 89 f0 mov %rsi,%r8
{ const BYTE* const matchBase = (sequence.offset > prefetchPos) ? dictEnd : prefixStart;
ebb: 48 0f 42 4c 24 28 cmovb 0x28(%rsp),%rcx
if (bitD->bitsConsumed > (sizeof(bitD->bitContainer)*8)) /* overflow detected, like end of stream */
ec1: 49 83 c6 18 add $0x18,%r14
const BYTE* const match = matchBase + prefetchPos - sequence.offset; /* note : this operation can overflow when seq.offset is really too large, which can only happen when input is corrupted.
ec5: 49 29 f8 sub %rdi,%r8
return prefetchPos + sequence.matchLength;
ec8: 48 03 74 24 10 add 0x10(%rsp),%rsi
const BYTE* const match = matchBase + prefetchPos - sequence.offset; /* note : this operation can overflow when seq.offset is really too large, which can only happen when input is corrupted.
ecd: 4c 01 c1 add %r8,%rcx
PREFETCH_L1(match); PREFETCH_L1(match+CACHELINE_SIZE); /* note : it's safe to invoke PREFETCH() on any memory address, including invalid ones */
ed0: 0f 18 09 prefetcht0 (%rcx)
ed3: 0f 18 49 40 prefetcht0 0x40(%rcx)
sequences[seqNb] = sequence;
ed7: 41 0f 11 46 e8 movups %xmm0,-0x18(%r14)
edc: 49 89 7e f8 mov %rdi,-0x8(%r14)
for (seqNb=0; (BIT_reloadDStream(&seqState.DStream) <= BIT_DStream_completed) && (seqNb<seqAdvance); seqNb++) {
ee0: 83 44 24 08 01 addl $0x1,0x8(%rsp)
return prefetchPos + sequence.matchLength;
ee5: 48 89 74 24 18 mov %rsi,0x18(%rsp)
eea: 83 f8 40 cmp $0x40,%eax
eed: 0f 87 0d 06 00 00 ja 1500 <ZSTD_decompressSequencesLong_default.constprop.0+0xa40>
if (bitD->ptr >= bitD->limitPtr) {
ef3: 48 3b 6c 24 38 cmp 0x38(%rsp),%rbp
ef8: 0f 83 aa 01 00 00 jae 10a8 <ZSTD_decompressSequencesLong_default.constprop.0+0x5e8>
if (bitD->ptr == bitD->start) {
efe: 48 8b 9c 24 80 00 00 mov 0x80(%rsp),%rbx
f05: 00
f06: 48 39 dd cmp %rbx,%rbp
f09: 74 37 je f42 <ZSTD_decompressSequencesLong_default.constprop.0+0x482>
{ U32 nbBytes = bitD->bitsConsumed >> 3;
f0b: 89 c2 mov %eax,%edx
if (bitD->ptr - nbBytes < bitD->start) {
f0d: 48 89 e9 mov %rbp,%rcx
{ U32 nbBytes = bitD->bitsConsumed >> 3;
f10: c1 ea 03 shr $0x3,%edx
if (bitD->ptr - nbBytes < bitD->start) {
f13: 89 d6 mov %edx,%esi
f15: 48 29 f1 sub %rsi,%rcx
f18: 48 39 cb cmp %rcx,%rbx
f1b: 76 10 jbe f2d <ZSTD_decompressSequencesLong_default.constprop.0+0x46d>
nbBytes = (U32)(bitD->ptr - bitD->start); /* ptr > start */
f1d: 48 89 ee mov %rbp,%rsi
bitD->ptr -= nbBytes;
f20: 48 89 e9 mov %rbp,%rcx
nbBytes = (U32)(bitD->ptr - bitD->start); /* ptr > start */
f23: 48 29 de sub %rbx,%rsi
f26: 89 f2 mov %esi,%edx
bitD->ptr -= nbBytes;
f28: 89 f6 mov %esi,%esi
f2a: 48 29 f1 sub %rsi,%rcx
MEM_STATIC U64 MEM_read64(const void* ptr) { return ((const unalign64*)ptr)->v; }
f2d: c6 44 24 50 01 movb $0x1,0x50(%rsp)
bitD->bitsConsumed -= nbBytes*8;
f32: c1 e2 03 shl $0x3,%edx
f35: 4c 8b 09 mov (%rcx),%r9
f38: 48 89 cd mov %rcx,%rbp
f3b: 29 d0 sub %edx,%eax
f3d: ba 01 00 00 00 mov $0x1,%edx
for (seqNb=0; (BIT_reloadDStream(&seqState.DStream) <= BIT_DStream_completed) && (seqNb<seqAdvance); seqNb++) {
f42: 8b 7c 24 08 mov 0x8(%rsp),%edi
f46: 39 7c 24 44 cmp %edi,0x44(%rsp)
f4a: 0f 8e 7f 01 00 00 jle 10cf <ZSTD_decompressSequencesLong_default.constprop.0+0x60f>
ZSTD_seqSymbol const mlDInfo = seqState->stateML.table[seqState->stateML.state];
f50: 48 8b 8c 24 48 01 00 mov 0x148(%rsp),%rcx
f57: 00
f58: 48 8b 7c 24 68 mov 0x68(%rsp),%rdi
ZSTD_seqSymbol const llDInfo = seqState->stateLL.table[seqState->stateLL.state];
f5d: 48 8b 94 24 28 01 00 mov 0x128(%rsp),%rdx
f64: 00
f65: 48 8b 5c 24 60 mov 0x60(%rsp),%rbx
ZSTD_seqSymbol const mlDInfo = seqState->stateML.table[seqState->stateML.state];
f6a: 4c 8d 1c cf lea (%rdi,%rcx,8),%r11
ZSTD_seqSymbol const ofDInfo = seqState->stateOffb.table[seqState->stateOffb.state];
f6e: 48 8b 8c 24 38 01 00 mov 0x138(%rsp),%rcx
f75: 00
f76: 48 8b 7c 24 70 mov 0x70(%rsp),%rdi
ZSTD_seqSymbol const llDInfo = seqState->stateLL.table[seqState->stateLL.state];
f7b: 48 8d 1c d3 lea (%rbx,%rdx,8),%rbx
ZSTD_seqSymbol const mlDInfo = seqState->stateML.table[seqState->stateML.state];
f7f: 45 0f b6 6b 02 movzbl 0x2(%r11),%r13d
f84: 41 8b 73 04 mov 0x4(%r11),%esi
ZSTD_seqSymbol const ofDInfo = seqState->stateOffb.table[seqState->stateOffb.state];
f88: 4c 8d 14 cf lea (%rdi,%rcx,8),%r10
ZSTD_seqSymbol const llDInfo = seqState->stateLL.table[seqState->stateLL.state];
f8c: 44 0f b6 63 02 movzbl 0x2(%rbx),%r12d
f91: 8b 53 04 mov 0x4(%rbx),%edx
ZSTD_seqSymbol const ofDInfo = seqState->stateOffb.table[seqState->stateOffb.state];
f94: 45 0f b6 42 02 movzbl 0x2(%r10),%r8d
f99: 41 8b 7a 04 mov 0x4(%r10),%edi
BYTE const totalBits = llBits+mlBits+ofBits;
f9d: 43 8d 0c 2c lea (%r12,%r13,1),%ecx
fa1: 46 8d 3c 01 lea (%rcx,%r8,1),%r15d
ZSTD_seqSymbol const ofDInfo = seqState->stateOffb.table[seqState->stateOffb.state];
fa5: 89 7c 24 10 mov %edi,0x10(%rsp)
seqState->prevOffset[1] = seqState->prevOffset[0];
fa9: 48 8b bc 24 58 01 00 mov 0x158(%rsp),%rdi
fb0: 00
BYTE const totalBits = llBits+mlBits+ofBits;
fb1: 44 88 7c 24 30 mov %r15b,0x30(%rsp)
if (ofBits > 1) {
fb6: 41 80 f8 01 cmp $0x1,%r8b
fba: 0f 87 00 fe ff ff ja dc0 <ZSTD_decompressSequencesLong_default.constprop.0+0x300>
if (LIKELY((ofBits == 0))) {
fc0: 0f 84 42 09 00 00 je 1908 <ZSTD_decompressSequencesLong_default.constprop.0+0xe48>
if (LIKELY(!ll0))
fc6: 85 d2 test %edx,%edx
fc8: 0f 85 2f fe ff ff jne dfd <ZSTD_decompressSequencesLong_default.constprop.0+0x33d>
offset = seqState->prevOffset[1];
fce: 48 8b 8c 24 60 01 00 mov 0x160(%rsp),%rcx
fd5: 00
seqState->prevOffset[1] = seqState->prevOffset[0];
fd6: 48 89 bc 24 60 01 00 mov %rdi,0x160(%rsp)
fdd: 00
seqState->prevOffset[0] = offset;
fde: 48 89 8c 24 58 01 00 mov %rcx,0x158(%rsp)
fe5: 00
offset = seqState->prevOffset[1];
fe6: 48 89 cf mov %rcx,%rdi
fe9: e9 0f fe ff ff jmpq dfd <ZSTD_decompressSequencesLong_default.constprop.0+0x33d>
fee: 66 90 xchg %ax,%ax
return __builtin_clz (val) ^ 31;
ff0: 0f bd c0 bsr %eax,%eax
bitD->bitsConsumed = lastByte ? 8 - BIT_highbit32(lastByte) : 0; /* ensures bitsConsumed is always set */
ff3: ba 08 00 00 00 mov $0x8,%edx
ff8: 29 c2 sub %eax,%edx
ffa: 89 94 24 08 01 00 00 mov %edx,0x108(%rsp)
RETURN_ERROR_IF(
1001: 49 83 f8 88 cmp $0xffffffffffffff88,%r8
1005: 0f 87 b5 fb ff ff ja bc0 <ZSTD_decompressSequencesLong_default.constprop.0+0x100>
100b: e9 9c fc ff ff jmpq cac <ZSTD_decompressSequencesLong_default.constprop.0+0x1ec>
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
1010: 89 c1 mov %eax,%ecx
1012: 4c 89 ce mov %r9,%rsi
bitD->bitsConsumed += nbBits;
1015: 44 01 e0 add %r12d,%eax
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
1018: 48 d3 e6 shl %cl,%rsi
101b: 44 89 e1 mov %r12d,%ecx
101e: f7 d9 neg %ecx
1020: 48 d3 ee shr %cl,%rsi
seq.litLength += BIT_readBitsFast(&seqState->DStream, llBits/*>0*/);
1023: 48 01 f2 add %rsi,%rdx
1026: e9 f4 fd ff ff jmpq e1f <ZSTD_decompressSequencesLong_default.constprop.0+0x35f>
102b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)
1030: 89 c1 mov %eax,%ecx
1032: 4c 89 ce mov %r9,%rsi
bitD->bitsConsumed += nbBits;
1035: 44 01 e8 add %r13d,%eax
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
1038: 48 d3 e6 shl %cl,%rsi
103b: 44 89 e9 mov %r13d,%ecx
103e: f7 d9 neg %ecx
1040: 48 d3 ee shr %cl,%rsi
seq.matchLength += BIT_readBitsFast(&seqState->DStream, mlBits/*>0*/);
1043: 48 01 74 24 10 add %rsi,0x10(%rsp)
if (MEM_64bits() && UNLIKELY(totalBits >= STREAM_ACCUMULATOR_MIN_64-(LLFSELog+MLFSELog+OffFSELog)))
1048: 80 7c 24 30 1e cmpb $0x1e,0x30(%rsp)
104d: 0f 86 c3 fd ff ff jbe e16 <ZSTD_decompressSequencesLong_default.constprop.0+0x356>
if (bitD->bitsConsumed > (sizeof(bitD->bitContainer)*8)) /* overflow detected, like end of stream */
1053: 83 f8 40 cmp $0x40,%eax
1056: 0f 87 ba fd ff ff ja e16 <ZSTD_decompressSequencesLong_default.constprop.0+0x356>
if (bitD->ptr >= bitD->limitPtr) {
105c: 48 3b 6c 24 38 cmp 0x38(%rsp),%rbp
1061: 0f 83 49 0a 00 00 jae 1ab0 <ZSTD_decompressSequencesLong_default.constprop.0+0xff0>
if (bitD->ptr == bitD->start) {
1067: 4c 8b bc 24 80 00 00 mov 0x80(%rsp),%r15
106e: 00
106f: 4c 39 fd cmp %r15,%rbp
1072: 0f 84 9e fd ff ff je e16 <ZSTD_decompressSequencesLong_default.constprop.0+0x356>
{ U32 nbBytes = bitD->bitsConsumed >> 3;
1078: 89 c1 mov %eax,%ecx
if (bitD->ptr - nbBytes < bitD->start) {
107a: 48 89 ee mov %rbp,%rsi
{ U32 nbBytes = bitD->bitsConsumed >> 3;
107d: c1 e9 03 shr $0x3,%ecx
if (bitD->ptr - nbBytes < bitD->start) {
1080: 41 89 c8 mov %ecx,%r8d
1083: 4c 29 c6 sub %r8,%rsi
1086: 4c 39 fe cmp %r15,%rsi
1089: 0f 82 4e 0a 00 00 jb 1add <ZSTD_decompressSequencesLong_default.constprop.0+0x101d>
108f: 48 89 f5 mov %rsi,%rbp
bitD->bitsConsumed -= nbBytes*8;
1092: c1 e1 03 shl $0x3,%ecx
1095: 4c 8b 4d 00 mov 0x0(%rbp),%r9
return result;
1099: c6 44 24 50 01 movb $0x1,0x50(%rsp)
bitD->bitsConsumed -= nbBytes*8;
109e: 29 c8 sub %ecx,%eax
return result;
10a0: e9 71 fd ff ff jmpq e16 <ZSTD_decompressSequencesLong_default.constprop.0+0x356>
10a5: 0f 1f 00 nopl (%rax)
bitD->ptr -= bitD->bitsConsumed >> 3;
10a8: 89 c2 mov %eax,%edx
10aa: c6 44 24 50 01 movb $0x1,0x50(%rsp)
for (seqNb=0; (BIT_reloadDStream(&seqState.DStream) <= BIT_DStream_completed) && (seqNb<seqAdvance); seqNb++) {
10af: 8b 7c 24 08 mov 0x8(%rsp),%edi
bitD->bitsConsumed &= 7;
10b3: 83 e0 07 and $0x7,%eax
bitD->ptr -= bitD->bitsConsumed >> 3;
10b6: c1 ea 03 shr $0x3,%edx
10b9: 48 29 d5 sub %rdx,%rbp
10bc: ba 01 00 00 00 mov $0x1,%edx
10c1: 4c 8b 4d 00 mov 0x0(%rbp),%r9
10c5: 39 7c 24 44 cmp %edi,0x44(%rsp)
10c9: 0f 8f 81 fe ff ff jg f50 <ZSTD_decompressSequencesLong_default.constprop.0+0x490>
10cf: 80 7c 24 50 00 cmpb $0x0,0x50(%rsp)
10d4: 49 89 ee mov %rbp,%r14
10d7: 0f 84 a7 08 00 00 je 1984 <ZSTD_decompressSequencesLong_default.constprop.0+0xec4>
10dd: 4c 89 8c 24 00 01 00 mov %r9,0x100(%rsp)
10e4: 00
10e5: 84 d2 test %dl,%dl
10e7: 0f 84 cb 0c 00 00 je 1db8 <ZSTD_decompressSequencesLong_default.constprop.0+0x12f8>
10ed: 89 84 24 08 01 00 00 mov %eax,0x108(%rsp)
10f4: 4c 89 b4 24 10 01 00 mov %r14,0x110(%rsp)
10fb: 00
if (bitD->bitsConsumed > (sizeof(bitD->bitContainer)*8)) /* overflow detected, like end of stream */
10fc: 83 f8 40 cmp $0x40,%eax
10ff: 0f 87 2b 04 00 00 ja 1530 <ZSTD_decompressSequencesLong_default.constprop.0+0xa70>
BYTE* const oend_w = oend - WILDCOPY_OVERLENGTH; /* risk : address space underflow on oend=NULL */
1105: 48 8b 5c 24 78 mov 0x78(%rsp),%rbx
for (seqNb=0; (BIT_reloadDStream(&seqState.DStream) <= BIT_DStream_completed) && (seqNb<seqAdvance); seqNb++) {
110a: 4c 8b 5c 24 58 mov 0x58(%rsp),%r11
BYTE* const oend_w = oend - WILDCOPY_OVERLENGTH; /* risk : address space underflow on oend=NULL */
110f: 48 83 eb 20 sub $0x20,%rbx
1113: 48 89 5c 24 30 mov %rbx,0x30(%rsp)
if (bitD->ptr >= bitD->limitPtr) {
1118: 4c 3b 74 24 38 cmp 0x38(%rsp),%r14
111d: 0f 83 af 03 00 00 jae 14d2 <ZSTD_decompressSequencesLong_default.constprop.0+0xa12>
if (bitD->ptr == bitD->start) {
1123: 48 8b 8c 24 18 01 00 mov 0x118(%rsp),%rcx
112a: 00
112b: 4c 89 f5 mov %r14,%rbp
112e: 4c 39 f1 cmp %r14,%rcx
1131: 74 3f je 1172 <ZSTD_decompressSequencesLong_default.constprop.0+0x6b2>
{ U32 nbBytes = bitD->bitsConsumed >> 3;
1133: 89 c2 mov %eax,%edx
1135: c1 ea 03 shr $0x3,%edx
if (bitD->ptr - nbBytes < bitD->start) {
1138: 89 d6 mov %edx,%esi
113a: 48 29 f5 sub %rsi,%rbp
113d: 48 39 e9 cmp %rbp,%rcx
1140: 76 10 jbe 1152 <ZSTD_decompressSequencesLong_default.constprop.0+0x692>
nbBytes = (U32)(bitD->ptr - bitD->start); /* ptr > start */
1142: 4c 89 f6 mov %r14,%rsi
1145: 48 29 ce sub %rcx,%rsi
1148: 89 f2 mov %esi,%edx
bitD->ptr -= nbBytes;
114a: 89 f6 mov %esi,%esi
114c: 49 29 f6 sub %rsi,%r14
114f: 4c 89 f5 mov %r14,%rbp
bitD->bitsConsumed -= nbBytes*8;
1152: c1 e2 03 shl $0x3,%edx
bitD->ptr -= nbBytes;
1155: 48 89 ac 24 10 01 00 mov %rbp,0x110(%rsp)
115c: 00
bitD->bitsConsumed -= nbBytes*8;
115d: 29 d0 sub %edx,%eax
115f: 89 84 24 08 01 00 00 mov %eax,0x108(%rsp)
bitD->bitContainer = MEM_readLEST(bitD->ptr); /* reminder : srcSize > sizeof(bitD->bitContainer), otherwise bitD->ptr == bitD->start */
1166: 48 8b 45 00 mov 0x0(%rbp),%rax
116a: 48 89 84 24 00 01 00 mov %rax,0x100(%rsp)
1171: 00
for ( ; (BIT_reloadDStream(&(seqState.DStream)) <= BIT_DStream_completed) && (seqNb<nbSeq) ; seqNb++) {
1172: 8b 5c 24 08 mov 0x8(%rsp),%ebx
1176: 39 9c 24 a0 00 00 00 cmp %ebx,0xa0(%rsp)
117d: 0f 8e c3 03 00 00 jle 1546 <ZSTD_decompressSequencesLong_default.constprop.0+0xa86>
ZSTD_seqSymbol const llDInfo = seqState->stateLL.table[seqState->stateLL.state];
1183: 48 8b 94 24 28 01 00 mov 0x128(%rsp),%rdx
118a: 00
118b: 48 8b 84 24 30 01 00 mov 0x130(%rsp),%rax
1192: 00
ZSTD_seqSymbol const mlDInfo = seqState->stateML.table[seqState->stateML.state];
1193: 48 8b 8c 24 48 01 00 mov 0x148(%rsp),%rcx
119a: 00
seqState->prevOffset[1] = seqState->prevOffset[0];
119b: 48 8b 9c 24 58 01 00 mov 0x158(%rsp),%rbx
11a2: 00
ZSTD_seqSymbol const llDInfo = seqState->stateLL.table[seqState->stateLL.state];
11a3: 4c 8d 14 d0 lea (%rax,%rdx,8),%r10
ZSTD_seqSymbol const mlDInfo = seqState->stateML.table[seqState->stateML.state];
11a7: 48 8b 84 24 50 01 00 mov 0x150(%rsp),%rax
11ae: 00
ZSTD_seqSymbol const llDInfo = seqState->stateLL.table[seqState->stateLL.state];
11af: 45 0f b6 62 02 movzbl 0x2(%r10),%r12d
11b4: 41 8b 52 04 mov 0x4(%r10),%edx
ZSTD_seqSymbol const mlDInfo = seqState->stateML.table[seqState->stateML.state];
11b8: 4c 8d 0c c8 lea (%rax,%rcx,8),%r9
ZSTD_seqSymbol const ofDInfo = seqState->stateOffb.table[seqState->stateOffb.state];
11bc: 48 8b 84 24 40 01 00 mov 0x140(%rsp),%rax
11c3: 00
11c4: 48 8b 8c 24 38 01 00 mov 0x138(%rsp),%rcx
11cb: 00
ZSTD_seqSymbol const mlDInfo = seqState->stateML.table[seqState->stateML.state];
11cc: 45 0f b6 69 02 movzbl 0x2(%r9),%r13d
11d1: 41 8b 71 04 mov 0x4(%r9),%esi
ZSTD_seqSymbol const ofDInfo = seqState->stateOffb.table[seqState->stateOffb.state];
11d5: 4c 8d 04 c8 lea (%rax,%rcx,8),%r8
11d9: 41 8b 40 04 mov 0x4(%r8),%eax
11dd: 41 0f b6 78 02 movzbl 0x2(%r8),%edi
BYTE const totalBits = llBits+mlBits+ofBits;
11e2: 47 8d 34 2c lea (%r12,%r13,1),%r14d
ZSTD_seqSymbol const ofDInfo = seqState->stateOffb.table[seqState->stateOffb.state];
11e6: 89 44 24 10 mov %eax,0x10(%rsp)
BYTE const totalBits = llBits+mlBits+ofBits;
11ea: 41 01 fe add %edi,%r14d
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
11ed: 8b 84 24 08 01 00 00 mov 0x108(%rsp),%eax
if (ofBits > 1) {
11f4: 40 80 ff 01 cmp $0x1,%dil
11f8: 0f 86 4a 05 00 00 jbe 1748 <ZSTD_decompressSequencesLong_default.constprop.0+0xc88>
11fe: 4c 8b bc 24 00 01 00 mov 0x100(%rsp),%r15
1205: 00
1206: 89 c1 mov %eax,%ecx
bitD->bitsConsumed += nbBits;
1208: 01 f8 add %edi,%eax
120a: 89 84 24 08 01 00 00 mov %eax,0x108(%rsp)
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
1211: 49 d3 e7 shl %cl,%r15
1214: 89 f9 mov %edi,%ecx
1216: f7 d9 neg %ecx
1218: 49 d3 ef shr %cl,%r15
offset = ofBase + BIT_readBitsFast(&seqState->DStream, ofBits/*>0*/); /* <= (ZSTD_WINDOWLOG_MAX-1) bits */
121b: 8b 4c 24 10 mov 0x10(%rsp),%ecx
121f: 49 01 cf add %rcx,%r15
seqState->prevOffset[2] = seqState->prevOffset[1];
1222: 48 8b 8c 24 60 01 00 mov 0x160(%rsp),%rcx
1229: 00
seqState->prevOffset[1] = seqState->prevOffset[0];
122a: 48 89 9c 24 60 01 00 mov %rbx,0x160(%rsp)
1231: 00
seqState->prevOffset[0] = offset;
1232: 4c 89 bc 24 58 01 00 mov %r15,0x158(%rsp)
1239: 00
123a: 4c 89 fb mov %r15,%rbx
seqState->prevOffset[2] = seqState->prevOffset[1];
123d: 48 89 8c 24 68 01 00 mov %rcx,0x168(%rsp)
1244: 00
seq.matchLength = mlBase;
1245: 89 f7 mov %esi,%edi
1247: 48 89 7c 24 10 mov %rdi,0x10(%rsp)
if (mlBits > 0)
124c: 45 84 ed test %r13b,%r13b
124f: 0f 85 4b 05 00 00 jne 17a0 <ZSTD_decompressSequencesLong_default.constprop.0+0xce0>
if (MEM_64bits() && UNLIKELY(totalBits >= STREAM_ACCUMULATOR_MIN_64-(LLFSELog+MLFSELog+OffFSELog)))
1255: 41 80 fe 1e cmp $0x1e,%r14b
1259: 0f 87 6f 05 00 00 ja 17ce <ZSTD_decompressSequencesLong_default.constprop.0+0xd0e>
125f: 48 8b b4 24 00 01 00 mov 0x100(%rsp),%rsi
1266: 00
seq.litLength = llBase;
1267: 89 d5 mov %edx,%ebp
if (llBits > 0)
1269: 45 84 e4 test %r12b,%r12b
126c: 0f 85 0e 05 00 00 jne 1780 <ZSTD_decompressSequencesLong_default.constprop.0+0xcc0>
U32 const nbBits = DInfo.nbBits;
1272: 41 0f b6 52 03 movzbl 0x3(%r10),%edx
return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
1277: 48 89 f7 mov %rsi,%rdi
127a: 44 8b 74 24 08 mov 0x8(%rsp),%r14d
return BIT_getMiddleBits(bitD->bitContainer, (sizeof(bitD->bitContainer)*8) - bitD->bitsConsumed - nbBits, nbBits);
127f: 01 d0 add %edx,%eax
DStatePtr->state = DInfo.nextState + lowBits;
1281: 41 83 e6 07 and $0x7,%r14d
return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
1285: 89 c1 mov %eax,%ecx
1287: f7 d9 neg %ecx
1289: 48 d3 ef shr %cl,%rdi
128c: 48 89 f9 mov %rdi,%rcx
128f: 48 8d 3d 00 00 00 00 lea 0x0(%rip),%rdi # 1296 <ZSTD_decompressSequencesLong_default.constprop.0+0x7d6>
1296: 23 0c 97 and (%rdi,%rdx,4),%ecx
1299: 41 0f b7 12 movzwl (%r10),%edx
129d: 49 89 f2 mov %rsi,%r10
12a0: 48 01 d1 add %rdx,%rcx
12a3: 48 89 8c 24 28 01 00 mov %rcx,0x128(%rsp)
12aa: 00
U32 const nbBits = DInfo.nbBits;
12ab: 41 0f b6 51 03 movzbl 0x3(%r9),%edx
return BIT_getMiddleBits(bitD->bitContainer, (sizeof(bitD->bitContainer)*8) - bitD->bitsConsumed - nbBits, nbBits);
12b0: 01 d0 add %edx,%eax
return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
12b2: 89 c1 mov %eax,%ecx
12b4: f7 d9 neg %ecx
12b6: 49 d3 ea shr %cl,%r10
12b9: 4c 89 d1 mov %r10,%rcx
12bc: 23 0c 97 and (%rdi,%rdx,4),%ecx
12bf: 49 89 fa mov %rdi,%r10
12c2: 48 89 ca mov %rcx,%rdx
DStatePtr->state = DInfo.nextState + lowBits;
12c5: 41 0f b7 09 movzwl (%r9),%ecx
12c9: 48 01 ca add %rcx,%rdx
12cc: 48 89 94 24 48 01 00 mov %rdx,0x148(%rsp)
12d3: 00
U32 const nbBits = DInfo.nbBits;
12d4: 41 0f b6 78 03 movzbl 0x3(%r8),%edi
ZSTD_seqSymbol const DInfo = DStatePtr->table[DStatePtr->state];
12d9: 41 0f b7 10 movzwl (%r8),%edx
return BIT_getMiddleBits(bitD->bitContainer, (sizeof(bitD->bitContainer)*8) - bitD->bitsConsumed - nbBits, nbBits);
12dd: 01 f8 add %edi,%eax
return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
12df: 89 c1 mov %eax,%ecx
bitD->bitsConsumed += nbBits;
12e1: 89 84 24 08 01 00 00 mov %eax,0x108(%rsp)
12e8: 4b 8d 04 76 lea (%r14,%r14,2),%rax
return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
12ec: f7 d9 neg %ecx
12ee: 48 c1 e0 03 shl $0x3,%rax
12f2: 48 d3 ee shr %cl,%rsi
12f5: 41 23 34 ba and (%r10,%rdi,4),%esi
DStatePtr->state = DInfo.nextState + lowBits;
12f9: 4c 8b 84 04 78 01 00 mov 0x178(%rsp,%rax,1),%r8
1300: 00
1301: f3 0f 6f ac 04 70 01 movdqu 0x170(%rsp,%rax,1),%xmm5
1308: 00 00
130a: 48 01 d6 add %rdx,%rsi
130d: 48 8b 94 04 80 01 00 mov 0x180(%rsp,%rax,1),%rdx
1314: 00
1315: 48 89 b4 24 38 01 00 mov %rsi,0x138(%rsp)
131c: 00
size_t const oneSeqSize = ZSTD_execSequence(op, oend, sequences[(seqNb-ADVANCED_SEQS) & STORED_SEQS_MASK], &litPtr, litEnd, prefixStart, dictStart, dictEnd);
131d: 48 8b b4 04 70 01 00 mov 0x170(%rsp,%rax,1),%rsi
1324: 00
1325: 49 89 d7 mov %rdx,%r15
BYTE* const oLitEnd = op + sequence.litLength;
1328: 48 89 94 24 d0 00 00 mov %rdx,0xd0(%rsp)
132f: 00
const BYTE* const iLitEnd = *litPtr + sequence.litLength;
1330: 48 8b 94 24 b8 00 00 mov 0xb8(%rsp),%rdx
1337: 00
BYTE* const oLitEnd = op + sequence.litLength;
1338: 49 8d 3c 33 lea (%r11,%rsi,1),%rdi
size_t const sequenceLength = sequence.litLength + sequence.matchLength;
133c: 4e 8d 24 06 lea (%rsi,%r8,1),%r12
BYTE* const oMatchEnd = op + sequenceLength; /* risk : address space overflow (32-bits) */
1340: 0f 29 ac 24 c0 00 00 movaps %xmm5,0xc0(%rsp)
1347: 00
const BYTE* match = oLitEnd - sequence.offset;
1348: 48 89 f8 mov %rdi,%rax
BYTE* const oMatchEnd = op + sequenceLength; /* risk : address space overflow (32-bits) */
134b: 4f 8d 2c 23 lea (%r11,%r12,1),%r13
const BYTE* const iLitEnd = *litPtr + sequence.litLength;
134f: 48 8d 0c 32 lea (%rdx,%rsi,1),%rcx
const BYTE* match = oLitEnd - sequence.offset;
1353: 4c 29 f8 sub %r15,%rax
if (UNLIKELY(
1356: 4c 3b 6c 24 30 cmp 0x30(%rsp),%r13
135b: 0f 87 ef 04 00 00 ja 1850 <ZSTD_decompressSequencesLong_default.constprop.0+0xd90>
1361: 48 39 4c 24 48 cmp %rcx,0x48(%rsp)
1366: 0f 82 e4 04 00 00 jb 1850 <ZSTD_decompressSequencesLong_default.constprop.0+0xd90>
ZSTD_memcpy(dst, src, 16);
136c: f3 0f 6f 32 movdqu (%rdx),%xmm6
1370: 41 0f 11 33 movups %xmm6,(%r11)
if (UNLIKELY(sequence.litLength > 16)) {
1374: 48 83 fe 10 cmp $0x10,%rsi
1378: 0f 87 42 05 00 00 ja 18c0 <ZSTD_decompressSequencesLong_default.constprop.0+0xe00>
if (sequence.offset > (size_t)(oLitEnd - prefixStart)) {
137e: 48 89 fa mov %rdi,%rdx
1381: 48 2b 54 24 20 sub 0x20(%rsp),%rdx
*litPtr = iLitEnd; /* update for next sequence */
1386: 48 89 8c 24 b8 00 00 mov %rcx,0xb8(%rsp)
138d: 00
if (sequence.offset > (size_t)(oLitEnd - prefixStart)) {
138e: 49 39 d7 cmp %rdx,%r15
1391: 76 6a jbe 13fd <ZSTD_decompressSequencesLong_default.constprop.0+0x93d>
RETURN_ERROR_IF(UNLIKELY(sequence.offset > (size_t)(oLitEnd - virtualStart)), corruption_detected, "");
1393: 48 89 fa mov %rdi,%rdx
1396: 48 2b 94 24 90 00 00 sub 0x90(%rsp),%rdx
139d: 00
139e: 49 39 d7 cmp %rdx,%r15
13a1: 0f 87 19 f8 ff ff ja bc0 <ZSTD_decompressSequencesLong_default.constprop.0+0x100>
match = dictEnd + (match - prefixStart);
13a7: 48 8b 4c 24 28 mov 0x28(%rsp),%rcx
13ac: 48 89 c6 mov %rax,%rsi
13af: 48 2b 74 24 20 sub 0x20(%rsp),%rsi
13b4: 48 01 ce add %rcx,%rsi
if (match + sequence.matchLength <= dictEnd) {
13b7: 4a 8d 14 06 lea (%rsi,%r8,1),%rdx
13bb: 48 39 d1 cmp %rdx,%rcx
13be: 0f 83 74 04 00 00 jae 1838 <ZSTD_decompressSequencesLong_default.constprop.0+0xd78>
{ size_t const length1 = dictEnd - match;
13c4: 48 8b 54 24 20 mov 0x20(%rsp),%rdx
13c9: 4c 89 5c 24 60 mov %r11,0x60(%rsp)
13ce: 4c 89 44 24 50 mov %r8,0x50(%rsp)
13d3: 48 29 c2 sub %rax,%rdx
ZSTD_memmove(oLitEnd, match, length1);
13d6: 48 89 54 24 38 mov %rdx,0x38(%rsp)
13db: e8 00 00 00 00 callq 13e0 <ZSTD_decompressSequencesLong_default.constprop.0+0x920>
op = oLitEnd + length1;
13e0: 48 8b 54 24 38 mov 0x38(%rsp),%rdx
sequence.matchLength -= length1;
13e5: 4c 8b 44 24 50 mov 0x50(%rsp),%r8
ZSTD_memmove(oLitEnd, match, length1);
13ea: 48 89 c7 mov %rax,%rdi
match = prefixStart;
13ed: 4c 8b 5c 24 60 mov 0x60(%rsp),%r11
13f2: 48 8b 44 24 20 mov 0x20(%rsp),%rax
op = oLitEnd + length1;
13f7: 48 01 d7 add %rdx,%rdi
sequence.matchLength -= length1;
13fa: 49 29 d0 sub %rdx,%r8
if (LIKELY(sequence.offset >= WILDCOPY_VECLEN)) {
13fd: 49 83 ff 0f cmp $0xf,%r15
1401: 0f 86 99 05 00 00 jbe 19a0 <ZSTD_decompressSequencesLong_default.constprop.0+0xee0>
1407: f3 0f 6f 38 movdqu (%rax),%xmm7
140b: 0f 11 3f movups %xmm7,(%rdi)
if (16 >= length) return;
140e: 49 83 f8 10 cmp $0x10,%r8
1412: 7e 2a jle 143e <ZSTD_decompressSequencesLong_default.constprop.0+0x97e>
op += 16;
1414: 48 83 c7 10 add $0x10,%rdi
ip += 16;
1418: 48 83 c0 10 add $0x10,%rax
141c: 0f 1f 40 00 nopl 0x0(%rax)
ZSTD_memcpy(dst, src, 16);
1420: f3 0f 6f 08 movdqu (%rax),%xmm1
1424: 48 83 c7 20 add $0x20,%rdi
1428: 48 83 c0 20 add $0x20,%rax
142c: 0f 11 4f e0 movups %xmm1,-0x20(%rdi)
1430: f3 0f 6f 50 f0 movdqu -0x10(%rax),%xmm2
1435: 0f 11 57 f0 movups %xmm2,-0x10(%rdi)
while (op < oend);
1439: 49 39 fd cmp %rdi,%r13
143c: 77 e2 ja 1420 <ZSTD_decompressSequencesLong_default.constprop.0+0x960>
if (ZSTD_isError(oneSeqSize)) return oneSeqSize;
143e: 49 83 fc 88 cmp $0xffffffffffffff88,%r12
1442: 0f 87 7f f7 ff ff ja bc7 <ZSTD_decompressSequencesLong_default.constprop.0+0x107>
prefetchPos += sequence.litLength;
1448: 48 8b 54 24 18 mov 0x18(%rsp),%rdx
{ const BYTE* const matchBase = (sequence.offset > prefetchPos) ? dictEnd : prefixStart;
144d: 48 8b 44 24 20 mov 0x20(%rsp),%rax
sequences[seqNb & STORED_SEQS_MASK] = sequence;
1452: 66 48 0f 6e c5 movq %rbp,%xmm0
1457: 0f 16 44 24 10 movhps 0x10(%rsp),%xmm0
prefetchPos += sequence.litLength;
145c: 48 01 ea add %rbp,%rdx
{ const BYTE* const matchBase = (sequence.offset > prefetchPos) ? dictEnd : prefixStart;
145f: 48 39 da cmp %rbx,%rdx
const BYTE* const match = matchBase + prefetchPos - sequence.offset; /* note : this operation can overflow when seq.offset is really too large, which can only happen when input is corrupted.
1462: 48 89 d1 mov %rdx,%rcx
{ const BYTE* const matchBase = (sequence.offset > prefetchPos) ? dictEnd : prefixStart;
1465: 48 0f 42 44 24 28 cmovb 0x28(%rsp),%rax
op += oneSeqSize;
146b: 4d 01 e3 add %r12,%r11
const BYTE* const match = matchBase + prefetchPos - sequence.offset; /* note : this operation can overflow when seq.offset is really too large, which can only happen when input is corrupted.
146e: 48 29 d9 sub %rbx,%rcx
return prefetchPos + sequence.matchLength;
1471: 48 03 54 24 10 add 0x10(%rsp),%rdx
const BYTE* const match = matchBase + prefetchPos - sequence.offset; /* note : this operation can overflow when seq.offset is really too large, which can only happen when input is corrupted.
1476: 48 01 c8 add %rcx,%rax
PREFETCH_L1(match); PREFETCH_L1(match+CACHELINE_SIZE); /* note : it's safe to invoke PREFETCH() on any memory address, including invalid ones */
1479: 0f 18 08 prefetcht0 (%rax)
147c: 0f 18 48 40 prefetcht0 0x40(%rax)
return prefetchPos + sequence.matchLength;
1480: 48 89 54 24 18 mov %rdx,0x18(%rsp)
sequences[seqNb & STORED_SEQS_MASK] = sequence;
1485: 4b 8d 04 76 lea (%r14,%r14,2),%rax
1489: 48 8b 94 24 98 00 00 mov 0x98(%rsp),%rdx
1490: 00
for ( ; (BIT_reloadDStream(&(seqState.DStream)) <= BIT_DStream_completed) && (seqNb<nbSeq) ; seqNb++) {
1491: 83 44 24 08 01 addl $0x1,0x8(%rsp)
sequences[seqNb & STORED_SEQS_MASK] = sequence;
1496: 0f 11 04 c2 movups %xmm0,(%rdx,%rax,8)
149a: 48 89 9c c4 80 01 00 mov %rbx,0x180(%rsp,%rax,8)
14a1: 00
if (bitD->bitsConsumed > (sizeof(bitD->bitContainer)*8)) /* overflow detected, like end of stream */
14a2: 8b 84 24 08 01 00 00 mov 0x108(%rsp),%eax
14a9: 83 f8 40 cmp $0x40,%eax
14ac: 0f 87 83 00 00 00 ja 1535 <ZSTD_decompressSequencesLong_default.constprop.0+0xa75>
if (bitD->ptr >= bitD->limitPtr) {
14b2: 48 8b 9c 24 20 01 00 mov 0x120(%rsp),%rbx
14b9: 00
14ba: 4c 8b b4 24 10 01 00 mov 0x110(%rsp),%r14
14c1: 00
14c2: 48 89 5c 24 38 mov %rbx,0x38(%rsp)
14c7: 4c 3b 74 24 38 cmp 0x38(%rsp),%r14
14cc: 0f 82 51 fc ff ff jb 1123 <ZSTD_decompressSequencesLong_default.constprop.0+0x663>
bitD->ptr -= bitD->bitsConsumed >> 3;
14d2: 89 c2 mov %eax,%edx
bitD->bitsConsumed &= 7;
14d4: 83 e0 07 and $0x7,%eax
bitD->ptr -= bitD->bitsConsumed >> 3;
14d7: c1 ea 03 shr $0x3,%edx
bitD->bitsConsumed &= 7;
14da: 89 84 24 08 01 00 00 mov %eax,0x108(%rsp)
bitD->ptr -= bitD->bitsConsumed >> 3;
14e1: 49 29 d6 sub %rdx,%r14
bitD->bitContainer = MEM_readLEST(bitD->ptr);
14e4: 49 8b 06 mov (%r14),%rax
bitD->ptr -= bitD->bitsConsumed >> 3;
14e7: 4c 89 b4 24 10 01 00 mov %r14,0x110(%rsp)
14ee: 00
14ef: 4c 89 f5 mov %r14,%rbp
bitD->bitContainer = MEM_readLEST(bitD->ptr);
14f2: 48 89 84 24 00 01 00 mov %rax,0x100(%rsp)
14f9: 00
return BIT_DStream_unfinished;
14fa: e9 73 fc ff ff jmpq 1172 <ZSTD_decompressSequencesLong_default.constprop.0+0x6b2>
14ff: 90 nop
1500: 80 7c 24 50 00 cmpb $0x0,0x50(%rsp)
1505: 0f 84 a5 03 00 00 je 18b0 <ZSTD_decompressSequencesLong_default.constprop.0+0xdf0>
150b: 4c 89 8c 24 00 01 00 mov %r9,0x100(%rsp)
1512: 00
1513: 89 84 24 08 01 00 00 mov %eax,0x108(%rsp)
151a: 48 89 ac 24 10 01 00 mov %rbp,0x110(%rsp)
1521: 00
RETURN_ERROR_IF(seqNb<seqAdvance, corruption_detected, "");
1522: 8b 5c 24 08 mov 0x8(%rsp),%ebx
1526: 39 5c 24 44 cmp %ebx,0x44(%rsp)
152a: 0f 8f 90 f6 ff ff jg bc0 <ZSTD_decompressSequencesLong_default.constprop.0+0x100>
if (bitD->bitsConsumed > (sizeof(bitD->bitContainer)*8)) /* overflow detected, like end of stream */
1530: 4c 8b 5c 24 58 mov 0x58(%rsp),%r11
RETURN_ERROR_IF(seqNb<nbSeq, corruption_detected, "");
1535: 8b 5c 24 08 mov 0x8(%rsp),%ebx
1539: 39 9c 24 a0 00 00 00 cmp %ebx,0xa0(%rsp)
1540: 0f 8f 7a f6 ff ff jg bc0 <ZSTD_decompressSequencesLong_default.constprop.0+0x100>
seqNb -= seqAdvance;
1546: 8b 5c 24 08 mov 0x8(%rsp),%ebx
154a: 2b 5c 24 44 sub 0x44(%rsp),%ebx
for ( ; seqNb<nbSeq ; seqNb++) {
154e: 39 9c 24 a0 00 00 00 cmp %ebx,0xa0(%rsp)
1555: 0f 8e 9d 01 00 00 jle 16f8 <ZSTD_decompressSequencesLong_default.constprop.0+0xc38>
BYTE* const oend_w = oend - WILDCOPY_OVERLENGTH; /* risk : address space underflow on oend=NULL */
155b: 48 8b 44 24 78 mov 0x78(%rsp),%rax
*ip += dec32table[offset];
1560: 4c 8b 74 24 48 mov 0x48(%rsp),%r14
1565: 41 89 dc mov %ebx,%r12d
1568: 4d 89 dd mov %r11,%r13
156b: 4c 8b 7c 24 20 mov 0x20(%rsp),%r15
BYTE* const oend_w = oend - WILDCOPY_OVERLENGTH; /* risk : address space underflow on oend=NULL */
1570: 48 83 e8 20 sub $0x20,%rax
1574: 48 89 44 24 08 mov %rax,0x8(%rsp)
return ZSTD_execSequenceEnd(op, oend, sequence, litPtr, litLimit, prefixStart, virtualStart, dictEnd);
1579: 48 8d 84 24 b8 00 00 lea 0xb8(%rsp),%rax
1580: 00
1581: 48 89 44 24 30 mov %rax,0x30(%rsp)
1586: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1)
158d: 00 00 00
size_t const oneSeqSize = ZSTD_execSequence(op, oend, sequences[seqNb&STORED_SEQS_MASK], &litPtr, litEnd, prefixStart, dictStart, dictEnd);
1590: 44 89 e0 mov %r12d,%eax
const BYTE* const iLitEnd = *litPtr + sequence.litLength;
1593: 48 8b b4 24 b8 00 00 mov 0xb8(%rsp),%rsi
159a: 00
159b: 83 e0 07 and $0x7,%eax
159e: 48 8d 04 40 lea (%rax,%rax,2),%rax
15a2: 48 c1 e0 03 shl $0x3,%rax
15a6: 48 8b 94 04 80 01 00 mov 0x180(%rsp,%rax,1),%rdx
15ad: 00
15ae: 4c 8b 8c 04 78 01 00 mov 0x178(%rsp,%rax,1),%r9
15b5: 00
15b6: f3 0f 6f ac 04 70 01 movdqu 0x170(%rsp,%rax,1),%xmm5
15bd: 00 00
15bf: 48 8b 9c 04 80 01 00 mov 0x180(%rsp,%rax,1),%rbx
15c6: 00
15c7: 48 89 94 24 f0 00 00 mov %rdx,0xf0(%rsp)
15ce: 00
15cf: 48 8b 94 04 70 01 00 mov 0x170(%rsp,%rax,1),%rdx
15d6: 00
BYTE* const oLitEnd = op + sequence.litLength;
15d7: 0f 29 ac 24 e0 00 00 movaps %xmm5,0xe0(%rsp)
15de: 00
15df: 49 8d 7c 15 00 lea 0x0(%r13,%rdx,1),%rdi
size_t const sequenceLength = sequence.litLength + sequence.matchLength;
15e4: 4a 8d 0c 0a lea (%rdx,%r9,1),%rcx
const BYTE* match = oLitEnd - sequence.offset;
15e8: 48 89 f8 mov %rdi,%rax
const BYTE* const iLitEnd = *litPtr + sequence.litLength;
15eb: 4c 8d 1c 16 lea (%rsi,%rdx,1),%r11
BYTE* const oMatchEnd = op + sequenceLength; /* risk : address space overflow (32-bits) */
15ef: 49 8d 6c 0d 00 lea 0x0(%r13,%rcx,1),%rbp
const BYTE* match = oLitEnd - sequence.offset;
15f4: 48 29 d8 sub %rbx,%rax
if (UNLIKELY(
15f7: 4d 39 de cmp %r11,%r14
15fa: 0f 82 c9 05 00 00 jb 1bc9 <ZSTD_decompressSequencesLong_default.constprop.0+0x1109>
1600: 48 3b 6c 24 08 cmp 0x8(%rsp),%rbp
1605: 0f 87 be 05 00 00 ja 1bc9 <ZSTD_decompressSequencesLong_default.constprop.0+0x1109>
ZSTD_memcpy(dst, src, 16);
160b: f3 0f 6f 3e movdqu (%rsi),%xmm7
160f: 41 0f 11 7d 00 movups %xmm7,0x0(%r13)
if (UNLIKELY(sequence.litLength > 16)) {
1614: 48 83 fa 10 cmp $0x10,%rdx
1618: 0f 87 09 06 00 00 ja 1c27 <ZSTD_decompressSequencesLong_default.constprop.0+0x1167>
if (sequence.offset > (size_t)(oLitEnd - prefixStart)) {
161e: 48 89 fa mov %rdi,%rdx
*litPtr = iLitEnd; /* update for next sequence */
1621: 4c 89 9c 24 b8 00 00 mov %r11,0xb8(%rsp)
1628: 00
if (sequence.offset > (size_t)(oLitEnd - prefixStart)) {
1629: 4c 29 fa sub %r15,%rdx
162c: 48 39 d3 cmp %rdx,%rbx
162f: 76 64 jbe 1695 <ZSTD_decompressSequencesLong_default.constprop.0+0xbd5>
RETURN_ERROR_IF(UNLIKELY(sequence.offset > (size_t)(oLitEnd - virtualStart)), corruption_detected, "");
1631: 48 89 fa mov %rdi,%rdx
1634: 48 2b 94 24 90 00 00 sub 0x90(%rsp),%rdx
163b: 00
163c: 48 39 d3 cmp %rdx,%rbx
163f: 0f 87 7b f5 ff ff ja bc0 <ZSTD_decompressSequencesLong_default.constprop.0+0x100>
match = dictEnd + (match - prefixStart);
1645: 4c 8b 54 24 28 mov 0x28(%rsp),%r10
164a: 48 89 c6 mov %rax,%rsi
164d: 4c 29 fe sub %r15,%rsi
1650: 4c 01 d6 add %r10,%rsi
if (match + sequence.matchLength <= dictEnd) {
1653: 4a 8d 14 0e lea (%rsi,%r9,1),%rdx
1657: 49 39 d2 cmp %rdx,%r10
165a: 0f 83 d0 04 00 00 jae 1b30 <ZSTD_decompressSequencesLong_default.constprop.0+0x1070>
{ size_t const length1 = dictEnd - match;
1660: 4c 89 fa mov %r15,%rdx
1663: 48 89 4c 24 20 mov %rcx,0x20(%rsp)
1668: 48 29 c2 sub %rax,%rdx
166b: 4c 89 4c 24 18 mov %r9,0x18(%rsp)
ZSTD_memmove(oLitEnd, match, length1);
1670: 48 89 54 24 10 mov %rdx,0x10(%rsp)
1675: e8 00 00 00 00 callq 167a <ZSTD_decompressSequencesLong_default.constprop.0+0xbba>
op = oLitEnd + length1;
167a: 48 8b 54 24 10 mov 0x10(%rsp),%rdx
sequence.matchLength -= length1;
167f: 4c 8b 4c 24 18 mov 0x18(%rsp),%r9
ZSTD_memmove(oLitEnd, match, length1);
1684: 48 89 c7 mov %rax,%rdi
match = prefixStart;
1687: 48 8b 4c 24 20 mov 0x20(%rsp),%rcx
168c: 4c 89 f8 mov %r15,%rax
op = oLitEnd + length1;
168f: 48 01 d7 add %rdx,%rdi
sequence.matchLength -= length1;
1692: 49 29 d1 sub %rdx,%r9
if (LIKELY(sequence.offset >= WILDCOPY_VECLEN)) {
1695: 48 83 fb 0f cmp $0xf,%rbx
1699: 0f 86 f8 05 00 00 jbe 1c97 <ZSTD_decompressSequencesLong_default.constprop.0+0x11d7>
169f: f3 0f 6f 18 movdqu (%rax),%xmm3
16a3: 0f 11 1f movups %xmm3,(%rdi)
if (16 >= length) return;
16a6: 49 83 f9 10 cmp $0x10,%r9
16aa: 7e 2a jle 16d6 <ZSTD_decompressSequencesLong_default.constprop.0+0xc16>
op += 16;
16ac: 48 83 c7 10 add $0x10,%rdi
ip += 16;
16b0: 48 83 c0 10 add $0x10,%rax
16b4: 0f 1f 40 00 nopl 0x0(%rax)
ZSTD_memcpy(dst, src, 16);
16b8: f3 0f 6f 18 movdqu (%rax),%xmm3
16bc: 48 83 c7 20 add $0x20,%rdi
16c0: 48 83 c0 20 add $0x20,%rax
16c4: 0f 11 5f e0 movups %xmm3,-0x20(%rdi)
16c8: f3 0f 6f 60 f0 movdqu -0x10(%rax),%xmm4
16cd: 0f 11 67 f0 movups %xmm4,-0x10(%rdi)
while (op < oend);
16d1: 48 39 fd cmp %rdi,%rbp
16d4: 77 e2 ja 16b8 <ZSTD_decompressSequencesLong_default.constprop.0+0xbf8>
if (ZSTD_isError(oneSeqSize)) return oneSeqSize;
16d6: 48 83 f9 88 cmp $0xffffffffffffff88,%rcx
16da: 0f 87 d0 06 00 00 ja 1db0 <ZSTD_decompressSequencesLong_default.constprop.0+0x12f0>
op += oneSeqSize;
16e0: 49 01 cd add %rcx,%r13
for ( ; seqNb<nbSeq ; seqNb++) {
16e3: 41 83 c4 01 add $0x1,%r12d
16e7: 44 39 a4 24 a0 00 00 cmp %r12d,0xa0(%rsp)
16ee: 00
16ef: 0f 85 9b fe ff ff jne 1590 <ZSTD_decompressSequencesLong_default.constprop.0+0xad0>
16f5: 4d 89 eb mov %r13,%r11
{ U32 i; for (i=0; i<ZSTD_REP_NUM; i++) dctx->entropy.rep[i] = (U32)(seqState.prevOffset[i]); }
16f8: 48 8b 9c 24 88 00 00 mov 0x88(%rsp),%rbx
16ff: 00
1700: 48 8b 84 24 58 01 00 mov 0x158(%rsp),%rax
1707: 00
{ size_t const lastLLSize = litEnd - litPtr;
1708: 48 8b b4 24 b8 00 00 mov 0xb8(%rsp),%rsi
170f: 00
1710: 48 8b 54 24 78 mov 0x78(%rsp),%rdx
{ U32 i; for (i=0; i<ZSTD_REP_NUM; i++) dctx->entropy.rep[i] = (U32)(seqState.prevOffset[i]); }
1715: 89 83 3c 68 00 00 mov %eax,0x683c(%rbx)
171b: 48 8b 84 24 60 01 00 mov 0x160(%rsp),%rax
1722: 00
1723: 89 83 40 68 00 00 mov %eax,0x6840(%rbx)
1729: 48 8b 84 24 68 01 00 mov 0x168(%rsp),%rax
1730: 00
1731: 89 83 44 68 00 00 mov %eax,0x6844(%rbx)
1737: 48 8b 5c 24 48 mov 0x48(%rsp),%rbx
173c: e9 a7 f4 ff ff jmpq be8 <ZSTD_decompressSequencesLong_default.constprop.0+0x128>
1741: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
if (LIKELY((ofBits == 0))) {
1748: 0f 84 02 04 00 00 je 1b50 <ZSTD_decompressSequencesLong_default.constprop.0+0x1090>
if (LIKELY(!ll0))
174e: 85 d2 test %edx,%edx
1750: 0f 85 ef fa ff ff jne 1245 <ZSTD_decompressSequencesLong_default.constprop.0+0x785>
offset = seqState->prevOffset[1];
1756: 48 8b 8c 24 60 01 00 mov 0x160(%rsp),%rcx
175d: 00
seqState->prevOffset[1] = seqState->prevOffset[0];
175e: 48 89 9c 24 60 01 00 mov %rbx,0x160(%rsp)
1765: 00
seqState->prevOffset[0] = offset;
1766: 48 89 8c 24 58 01 00 mov %rcx,0x158(%rsp)
176d: 00
offset = seqState->prevOffset[1];
176e: 48 89 cb mov %rcx,%rbx
1771: e9 cf fa ff ff jmpq 1245 <ZSTD_decompressSequencesLong_default.constprop.0+0x785>
1776: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1)
177d: 00 00 00
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
1780: 89 c1 mov %eax,%ecx
1782: 48 89 f2 mov %rsi,%rdx
bitD->bitsConsumed += nbBits;
1785: 44 01 e0 add %r12d,%eax
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
1788: 48 d3 e2 shl %cl,%rdx
178b: 44 89 e1 mov %r12d,%ecx
178e: f7 d9 neg %ecx
1790: 48 d3 ea shr %cl,%rdx
seq.litLength += BIT_readBitsFast(&seqState->DStream, llBits/*>0*/);
1793: 48 01 d5 add %rdx,%rbp
1796: e9 d7 fa ff ff jmpq 1272 <ZSTD_decompressSequencesLong_default.constprop.0+0x7b2>
179b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)
17a0: 48 8b b4 24 00 01 00 mov 0x100(%rsp),%rsi
17a7: 00
17a8: 89 c1 mov %eax,%ecx
bitD->bitsConsumed += nbBits;
17aa: 44 01 e8 add %r13d,%eax
17ad: 89 84 24 08 01 00 00 mov %eax,0x108(%rsp)
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
17b4: 48 d3 e6 shl %cl,%rsi
17b7: 44 89 e9 mov %r13d,%ecx
17ba: f7 d9 neg %ecx
17bc: 48 d3 ee shr %cl,%rsi
seq.matchLength += BIT_readBitsFast(&seqState->DStream, mlBits/*>0*/);
17bf: 48 01 74 24 10 add %rsi,0x10(%rsp)
if (MEM_64bits() && UNLIKELY(totalBits >= STREAM_ACCUMULATOR_MIN_64-(LLFSELog+MLFSELog+OffFSELog)))
17c4: 41 80 fe 1e cmp $0x1e,%r14b
17c8: 0f 86 91 fa ff ff jbe 125f <ZSTD_decompressSequencesLong_default.constprop.0+0x79f>
if (bitD->bitsConsumed > (sizeof(bitD->bitContainer)*8)) /* overflow detected, like end of stream */
17ce: 83 f8 40 cmp $0x40,%eax
17d1: 0f 87 88 fa ff ff ja 125f <ZSTD_decompressSequencesLong_default.constprop.0+0x79f>
if (bitD->ptr >= bitD->limitPtr) {
17d7: 48 39 6c 24 38 cmp %rbp,0x38(%rsp)
17dc: 0f 86 91 04 00 00 jbe 1c73 <ZSTD_decompressSequencesLong_default.constprop.0+0x11b3>
if (bitD->ptr == bitD->start) {
17e2: 48 8b bc 24 18 01 00 mov 0x118(%rsp),%rdi
17e9: 00
17ea: 48 39 ef cmp %rbp,%rdi
17ed: 0f 84 6c fa ff ff je 125f <ZSTD_decompressSequencesLong_default.constprop.0+0x79f>
{ U32 nbBytes = bitD->bitsConsumed >> 3;
17f3: 89 c1 mov %eax,%ecx
if (bitD->ptr - nbBytes < bitD->start) {
17f5: 48 89 ee mov %rbp,%rsi
{ U32 nbBytes = bitD->bitsConsumed >> 3;
17f8: c1 e9 03 shr $0x3,%ecx
if (bitD->ptr - nbBytes < bitD->start) {
17fb: 41 89 cd mov %ecx,%r13d
17fe: 4c 29 ee sub %r13,%rsi
1801: 48 39 f7 cmp %rsi,%rdi
1804: 76 10 jbe 1816 <ZSTD_decompressSequencesLong_default.constprop.0+0xd56>
nbBytes = (U32)(bitD->ptr - bitD->start); /* ptr > start */
1806: 48 89 ee mov %rbp,%rsi
1809: 48 29 fe sub %rdi,%rsi
bitD->ptr -= nbBytes;
180c: 89 f7 mov %esi,%edi
nbBytes = (U32)(bitD->ptr - bitD->start); /* ptr > start */
180e: 89 f1 mov %esi,%ecx
bitD->ptr -= nbBytes;
1810: 48 89 ee mov %rbp,%rsi
1813: 48 29 fe sub %rdi,%rsi
1816: 48 89 b4 24 10 01 00 mov %rsi,0x110(%rsp)
181d: 00
181e: 48 8b 36 mov (%rsi),%rsi
bitD->bitsConsumed -= nbBytes*8;
1821: c1 e1 03 shl $0x3,%ecx
1824: 29 c8 sub %ecx,%eax
bitD->bitContainer = MEM_readLEST(bitD->ptr); /* reminder : srcSize > sizeof(bitD->bitContainer), otherwise bitD->ptr == bitD->start */
1826: 48 89 b4 24 00 01 00 mov %rsi,0x100(%rsp)
182d: 00
return result;
182e: e9 34 fa ff ff jmpq 1267 <ZSTD_decompressSequencesLong_default.constprop.0+0x7a7>
1833: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)
ZSTD_memmove(oLitEnd, match, sequence.matchLength);
1838: 4c 89 c2 mov %r8,%rdx
183b: 4c 89 5c 24 38 mov %r11,0x38(%rsp)
1840: e8 00 00 00 00 callq 1845 <ZSTD_decompressSequencesLong_default.constprop.0+0xd85>
return sequenceLength;
1845: 4c 8b 5c 24 38 mov 0x38(%rsp),%r11
184a: e9 ef fb ff ff jmpq 143e <ZSTD_decompressSequencesLong_default.constprop.0+0x97e>
184f: 90 nop
return ZSTD_execSequenceEnd(op, oend, sequence, litPtr, litLimit, prefixStart, virtualStart, dictEnd);
1850: 48 8d 94 24 b8 00 00 lea 0xb8(%rsp),%rdx
1857: 00
1858: ff 74 24 28 pushq 0x28(%rsp)
185c: 4c 89 df mov %r11,%rdi
185f: ff b4 24 d8 00 00 00 pushq 0xd8(%rsp)
1866: ff b4 24 d8 00 00 00 pushq 0xd8(%rsp)
186d: ff b4 24 d8 00 00 00 pushq 0xd8(%rsp)
1874: 4c 8b 8c 24 b0 00 00 mov 0xb0(%rsp),%r9
187b: 00
187c: 4c 8b 44 24 40 mov 0x40(%rsp),%r8
1881: 48 8b 4c 24 68 mov 0x68(%rsp),%rcx
1886: 48 8b b4 24 98 00 00 mov 0x98(%rsp),%rsi
188d: 00
188e: 4c 89 5c 24 58 mov %r11,0x58(%rsp)
1893: e8 28 ed ff ff callq 5c0 <ZSTD_execSequenceEnd>
1898: 48 83 c4 20 add $0x20,%rsp
189c: 4c 8b 5c 24 38 mov 0x38(%rsp),%r11
18a1: 49 89 c4 mov %rax,%r12
18a4: e9 95 fb ff ff jmpq 143e <ZSTD_decompressSequencesLong_default.constprop.0+0x97e>
18a9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
18b0: 89 84 24 08 01 00 00 mov %eax,0x108(%rsp)
18b7: e9 66 fc ff ff jmpq 1522 <ZSTD_decompressSequencesLong_default.constprop.0+0xa62>
18bc: 0f 1f 40 00 nopl 0x0(%rax)
ZSTD_memcpy(dst, src, 16);
18c0: f3 0f 6f 62 10 movdqu 0x10(%rdx),%xmm4
ZSTD_wildcopy(op+16, (*litPtr)+16, sequence.litLength-16, ZSTD_no_overlap);
18c5: 48 83 ee 10 sub $0x10,%rsi
18c9: 41 0f 11 63 10 movups %xmm4,0x10(%r11)
if (16 >= length) return;
18ce: 48 83 fe 10 cmp $0x10,%rsi
18d2: 0f 8e a6 fa ff ff jle 137e <ZSTD_decompressSequencesLong_default.constprop.0+0x8be>
op += 16;
18d8: 49 8d 73 20 lea 0x20(%r11),%rsi
ip += 16;
18dc: 48 83 c2 20 add $0x20,%rdx
ZSTD_memcpy(dst, src, 16);
18e0: f3 0f 6f 3a movdqu (%rdx),%xmm7
18e4: 48 83 c6 20 add $0x20,%rsi
18e8: 48 83 c2 20 add $0x20,%rdx
18ec: 0f 11 7e e0 movups %xmm7,-0x20(%rsi)
18f0: f3 0f 6f 72 f0 movdqu -0x10(%rdx),%xmm6
18f5: 0f 11 76 f0 movups %xmm6,-0x10(%rsi)
while (op < oend);
18f9: 48 39 f7 cmp %rsi,%rdi
18fc: 77 e2 ja 18e0 <ZSTD_decompressSequencesLong_default.constprop.0+0xe20>
18fe: e9 7b fa ff ff jmpq 137e <ZSTD_decompressSequencesLong_default.constprop.0+0x8be>
1903: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
1908: 89 c1 mov %eax,%ecx
190a: 4d 89 c8 mov %r9,%r8
bitD->bitsConsumed += nbBits;
190d: 83 c0 01 add $0x1,%eax
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
1910: 49 d3 e0 shl %cl,%r8
1913: 4c 89 c1 mov %r8,%rcx
offset = ofBase + ll0 + BIT_readBitsFast(&seqState->DStream, 1);
1916: 44 8b 44 24 10 mov 0x10(%rsp),%r8d
191b: 48 c1 e9 3f shr $0x3f,%rcx
191f: 83 fa 01 cmp $0x1,%edx
1922: 41 83 d0 00 adc $0x0,%r8d
1926: 49 01 c8 add %rcx,%r8
{ size_t temp = (offset==3) ? seqState->prevOffset[0] - 1 : seqState->prevOffset[offset];
1929: 49 83 f8 03 cmp $0x3,%r8
192d: 74 34 je 1963 <ZSTD_decompressSequencesLong_default.constprop.0+0xea3>
192f: 4a 8b 8c c4 58 01 00 mov 0x158(%rsp,%r8,8),%rcx
1936: 00
temp += !temp; /* 0 is not valid; input is corrupted; force offset to 1 */
1937: 48 83 f9 01 cmp $0x1,%rcx
193b: 48 83 d1 00 adc $0x0,%rcx
if (offset != 1) seqState->prevOffset[2] = seqState->prevOffset[1];
193f: 49 83 f8 01 cmp $0x1,%r8
1943: 75 2d jne 1972 <ZSTD_decompressSequencesLong_default.constprop.0+0xeb2>
seqState->prevOffset[0] = offset = temp;
1945: 66 48 0f 6e ff movq %rdi,%xmm7
194a: 66 48 0f 6e c1 movq %rcx,%xmm0
194f: 48 89 cf mov %rcx,%rdi
1952: 66 0f 6c c7 punpcklqdq %xmm7,%xmm0
1956: 0f 11 84 24 58 01 00 movups %xmm0,0x158(%rsp)
195d: 00
195e: e9 9a f4 ff ff jmpq dfd <ZSTD_decompressSequencesLong_default.constprop.0+0x33d>
temp += !temp; /* 0 is not valid; input is corrupted; force offset to 1 */
1963: 49 89 f8 mov %rdi,%r8
1966: 31 c9 xor %ecx,%ecx
1968: 49 83 e8 01 sub $0x1,%r8
196c: 0f 94 c1 sete %cl
196f: 4c 01 c1 add %r8,%rcx
if (offset != 1) seqState->prevOffset[2] = seqState->prevOffset[1];
1972: 4c 8b 84 24 60 01 00 mov 0x160(%rsp),%r8
1979: 00
197a: 4c 89 84 24 68 01 00 mov %r8,0x168(%rsp)
1981: 00
1982: eb c1 jmp 1945 <ZSTD_decompressSequencesLong_default.constprop.0+0xe85>
1984: 84 d2 test %dl,%dl
1986: 0f 85 88 01 00 00 jne 1b14 <ZSTD_decompressSequencesLong_default.constprop.0+0x1054>
for (seqNb=0; (BIT_reloadDStream(&seqState.DStream) <= BIT_DStream_completed) && (seqNb<seqAdvance); seqNb++) {
198c: 4c 8b b4 24 a8 00 00 mov 0xa8(%rsp),%r14
1993: 00
1994: 8b 84 24 a4 00 00 00 mov 0xa4(%rsp),%eax
199b: e9 65 f7 ff ff jmpq 1105 <ZSTD_decompressSequencesLong_default.constprop.0+0x645>
if (offset < 8) {
19a0: 49 83 ff 07 cmp $0x7,%r15
19a4: 0f 87 5f 01 00 00 ja 1b09 <ZSTD_decompressSequencesLong_default.constprop.0+0x1049>
(*op)[0] = (*ip)[0];
19aa: 0f b6 10 movzbl (%rax),%edx
19ad: 88 17 mov %dl,(%rdi)
(*op)[1] = (*ip)[1];
19af: 0f b6 50 01 movzbl 0x1(%rax),%edx
19b3: 88 57 01 mov %dl,0x1(%rdi)
(*op)[2] = (*ip)[2];
19b6: 0f b6 50 02 movzbl 0x2(%rax),%edx
19ba: 88 57 02 mov %dl,0x2(%rdi)
(*op)[3] = (*ip)[3];
19bd: 0f b6 50 03 movzbl 0x3(%rax),%edx
19c1: 88 57 03 mov %dl,0x3(%rdi)
*ip += dec32table[offset];
19c4: 48 8d 15 00 00 00 00 lea 0x0(%rip),%rdx # 19cb <ZSTD_decompressSequencesLong_default.constprop.0+0xf0b>
19cb: 42 8b 14 ba mov (%rdx,%r15,4),%edx
19cf: 48 01 d0 add %rdx,%rax
static void ZSTD_copy4(void* dst, const void* src) { ZSTD_memcpy(dst, src, 4); }
19d2: 8b 10 mov (%rax),%edx
19d4: 89 57 04 mov %edx,0x4(%rdi)
*ip -= sub2;
19d7: 48 8d 15 00 00 00 00 lea 0x0(%rip),%rdx # 19de <ZSTD_decompressSequencesLong_default.constprop.0+0xf1e>
19de: 4a 63 14 ba movslq (%rdx,%r15,4),%rdx
19e2: 48 29 d0 sub %rdx,%rax
if (sequence.matchLength > 8) {
19e5: 49 83 f8 08 cmp $0x8,%r8
19e9: 0f 86 4f fa ff ff jbe 143e <ZSTD_decompressSequencesLong_default.constprop.0+0x97e>
*op += 8;
19ef: 48 8d 57 08 lea 0x8(%rdi),%rdx
*ip += 8;
19f3: 48 8d 48 08 lea 0x8(%rax),%rcx
ptrdiff_t diff = (BYTE*)dst - (const BYTE*)src;
19f7: 48 89 d6 mov %rdx,%rsi
19fa: 48 29 ce sub %rcx,%rsi
if (ovtype == ZSTD_overlap_src_before_dst && diff < WILDCOPY_VECLEN) {
19fd: 48 83 fe 0f cmp $0xf,%rsi
1a01: 0f 8f d1 03 00 00 jg 1dd8 <ZSTD_decompressSequencesLong_default.constprop.0+0x1318>
1a07: 48 89 d6 mov %rdx,%rsi
1a0a: 4d 8d 55 f7 lea -0x9(%r13),%r10
1a0e: 4c 8d 4f 09 lea 0x9(%rdi),%r9
1a12: 48 29 c6 sub %rax,%rsi
1a15: 49 29 fa sub %rdi,%r10
1a18: 48 83 ee 09 sub $0x9,%rsi
1a1c: 48 83 fe 0e cmp $0xe,%rsi
1a20: 0f 86 ca 00 00 00 jbe 1af0 <ZSTD_decompressSequencesLong_default.constprop.0+0x1030>
1a26: 49 83 fa 1f cmp $0x1f,%r10
1a2a: 41 0f 97 c0 seta %r8b
1a2e: 4d 39 cd cmp %r9,%r13
1a31: 40 0f 93 c6 setae %sil
1a35: 41 84 f0 test %sil,%r8b
1a38: 0f 84 b2 00 00 00 je 1af0 <ZSTD_decompressSequencesLong_default.constprop.0+0x1030>
1a3e: 49 c1 ea 03 shr $0x3,%r10
1a42: 4d 39 cd cmp %r9,%r13
1a45: 41 b9 01 00 00 00 mov $0x1,%r9d
1a4b: 49 8d 72 01 lea 0x1(%r10),%rsi
1a4f: 4c 0f 43 ce cmovae %rsi,%r9
1a53: be 08 00 00 00 mov $0x8,%esi
1a58: 4d 89 c8 mov %r9,%r8
1a5b: 49 d1 e8 shr %r8
1a5e: 49 c1 e0 04 shl $0x4,%r8
1a62: 49 83 c0 08 add $0x8,%r8
1a66: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1)
1a6d: 00 00 00
ZSTD_memcpy(dst, src, 8);
1a70: f3 0f 6f 34 30 movdqu (%rax,%rsi,1),%xmm6
1a75: 0f 11 34 37 movups %xmm6,(%rdi,%rsi,1)
} while (op < oend);
1a79: 48 83 c6 10 add $0x10,%rsi
1a7d: 4c 39 c6 cmp %r8,%rsi
1a80: 75 ee jne 1a70 <ZSTD_decompressSequencesLong_default.constprop.0+0xfb0>
1a82: 4c 89 c8 mov %r9,%rax
1a85: 48 83 e0 fe and $0xfffffffffffffffe,%rax
1a89: 48 8d 34 c5 00 00 00 lea 0x0(,%rax,8),%rsi
1a90: 00
1a91: 48 01 f1 add %rsi,%rcx
1a94: 48 01 f2 add %rsi,%rdx
1a97: 4c 39 c8 cmp %r9,%rax
1a9a: 0f 84 9e f9 ff ff je 143e <ZSTD_decompressSequencesLong_default.constprop.0+0x97e>
ZSTD_memcpy(dst, src, 8);
1aa0: 48 8b 01 mov (%rcx),%rax
1aa3: 48 89 02 mov %rax,(%rdx)
} while (op < oend);
1aa6: e9 93 f9 ff ff jmpq 143e <ZSTD_decompressSequencesLong_default.constprop.0+0x97e>
1aab: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)
bitD->ptr -= bitD->bitsConsumed >> 3;
1ab0: 89 c1 mov %eax,%ecx
bitD->bitsConsumed &= 7;
1ab2: 83 e0 07 and $0x7,%eax
bitD->ptr -= bitD->bitsConsumed >> 3;
1ab5: c1 e9 03 shr $0x3,%ecx
1ab8: 48 29 cd sub %rcx,%rbp
1abb: 4c 8b 4d 00 mov 0x0(%rbp),%r9
return BIT_reloadDStreamFast(bitD);
1abf: c6 44 24 50 01 movb $0x1,0x50(%rsp)
1ac4: e9 4d f3 ff ff jmpq e16 <ZSTD_decompressSequencesLong_default.constprop.0+0x356>
1ac9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
for (seqNb=0; (BIT_reloadDStream(&seqState.DStream) <= BIT_DStream_completed) && (seqNb<seqAdvance); seqNb++) {
1ad0: c7 44 24 08 00 00 00 movl $0x0,0x8(%rsp)
1ad7: 00
1ad8: e9 45 fa ff ff jmpq 1522 <ZSTD_decompressSequencesLong_default.constprop.0+0xa62>
nbBytes = (U32)(bitD->ptr - bitD->start); /* ptr > start */
1add: 48 89 ee mov %rbp,%rsi
1ae0: 4c 29 fe sub %r15,%rsi
1ae3: 89 f1 mov %esi,%ecx
bitD->ptr -= nbBytes;
1ae5: 89 f6 mov %esi,%esi
1ae7: 48 29 f5 sub %rsi,%rbp
1aea: e9 a3 f5 ff ff jmpq 1092 <ZSTD_decompressSequencesLong_default.constprop.0+0x5d2>
1aef: 90 nop
ZSTD_memcpy(dst, src, 8);
1af0: 48 8b 01 mov (%rcx),%rax
COPY8(op, ip)
1af3: 48 83 c2 08 add $0x8,%rdx
1af7: 48 83 c1 08 add $0x8,%rcx
ZSTD_memcpy(dst, src, 8);
1afb: 48 89 42 f8 mov %rax,-0x8(%rdx)
} while (op < oend);
1aff: 49 39 d5 cmp %rdx,%r13
1b02: 77 ec ja 1af0 <ZSTD_decompressSequencesLong_default.constprop.0+0x1030>
1b04: e9 35 f9 ff ff jmpq 143e <ZSTD_decompressSequencesLong_default.constprop.0+0x97e>
ZSTD_memcpy(dst, src, 8);
1b09: 48 8b 10 mov (%rax),%rdx
1b0c: 48 89 17 mov %rdx,(%rdi)
}
1b0f: e9 d1 fe ff ff jmpq 19e5 <ZSTD_decompressSequencesLong_default.constprop.0+0xf25>
1b14: 89 84 24 08 01 00 00 mov %eax,0x108(%rsp)
1b1b: 4c 8b b4 24 a8 00 00 mov 0xa8(%rsp),%r14
1b22: 00
1b23: e9 d4 f5 ff ff jmpq 10fc <ZSTD_decompressSequencesLong_default.constprop.0+0x63c>
1b28: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1)
1b2f: 00
ZSTD_memmove(oLitEnd, match, sequence.matchLength);
1b30: 4c 89 ca mov %r9,%rdx
1b33: 48 89 4c 24 10 mov %rcx,0x10(%rsp)
1b38: e8 00 00 00 00 callq 1b3d <ZSTD_decompressSequencesLong_default.constprop.0+0x107d>
return sequenceLength;
1b3d: 48 8b 4c 24 10 mov 0x10(%rsp),%rcx
1b42: e9 8f fb ff ff jmpq 16d6 <ZSTD_decompressSequencesLong_default.constprop.0+0xc16>
1b47: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1)
1b4e: 00 00
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
1b50: 48 8b bc 24 00 01 00 mov 0x100(%rsp),%rdi
1b57: 00
1b58: 89 c1 mov %eax,%ecx
bitD->bitsConsumed += nbBits;
1b5a: 83 c0 01 add $0x1,%eax
1b5d: 89 84 24 08 01 00 00 mov %eax,0x108(%rsp)
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
1b64: 48 d3 e7 shl %cl,%rdi
1b67: 48 89 f9 mov %rdi,%rcx
offset = ofBase + ll0 + BIT_readBitsFast(&seqState->DStream, 1);
1b6a: 8b 7c 24 10 mov 0x10(%rsp),%edi
1b6e: 48 c1 e9 3f shr $0x3f,%rcx
1b72: 83 fa 01 cmp $0x1,%edx
1b75: 83 d7 00 adc $0x0,%edi
1b78: 48 01 f9 add %rdi,%rcx
{ size_t temp = (offset==3) ? seqState->prevOffset[0] - 1 : seqState->prevOffset[offset];
1b7b: 48 83 f9 03 cmp $0x3,%rcx
1b7f: 0f 84 3f 02 00 00 je 1dc4 <ZSTD_decompressSequencesLong_default.constprop.0+0x1304>
1b85: 48 8b bc cc 58 01 00 mov 0x158(%rsp,%rcx,8),%rdi
1b8c: 00
temp += !temp; /* 0 is not valid; input is corrupted; force offset to 1 */
1b8d: 48 83 ff 01 cmp $0x1,%rdi
1b91: 48 83 d7 00 adc $0x0,%rdi
if (offset != 1) seqState->prevOffset[2] = seqState->prevOffset[1];
1b95: 48 83 f9 01 cmp $0x1,%rcx
1b99: 74 10 je 1bab <ZSTD_decompressSequencesLong_default.constprop.0+0x10eb>
1b9b: 48 8b 8c 24 60 01 00 mov 0x160(%rsp),%rcx
1ba2: 00
1ba3: 48 89 8c 24 68 01 00 mov %rcx,0x168(%rsp)
1baa: 00
seqState->prevOffset[0] = offset = temp;
1bab: 66 48 0f 6e e3 movq %rbx,%xmm4
1bb0: 66 48 0f 6e c7 movq %rdi,%xmm0
1bb5: 48 89 fb mov %rdi,%rbx
1bb8: 66 0f 6c c4 punpcklqdq %xmm4,%xmm0
1bbc: 0f 11 84 24 58 01 00 movups %xmm0,0x158(%rsp)
1bc3: 00
1bc4: e9 7c f6 ff ff jmpq 1245 <ZSTD_decompressSequencesLong_default.constprop.0+0x785>
return ZSTD_execSequenceEnd(op, oend, sequence, litPtr, litLimit, prefixStart, virtualStart, dictEnd);
1bc9: 66 49 0f 6e f1 movq %r9,%xmm6
1bce: 66 48 0f 6e c2 movq %rdx,%xmm0
1bd3: 4c 89 f1 mov %r14,%rcx
1bd6: 4d 89 f8 mov %r15,%r8
1bd9: 66 0f 6c c6 punpcklqdq %xmm6,%xmm0
1bdd: 4c 89 ef mov %r13,%rdi
1be0: 0f 29 84 24 e0 00 00 movaps %xmm0,0xe0(%rsp)
1be7: 00
1be8: ff 74 24 28 pushq 0x28(%rsp)
1bec: ff b4 24 f8 00 00 00 pushq 0xf8(%rsp)
1bf3: ff b4 24 f8 00 00 00 pushq 0xf8(%rsp)
1bfa: ff b4 24 f8 00 00 00 pushq 0xf8(%rsp)
1c01: 4c 8b 8c 24 b0 00 00 mov 0xb0(%rsp),%r9
1c08: 00
1c09: 48 8b 54 24 50 mov 0x50(%rsp),%rdx
1c0e: 48 8b b4 24 98 00 00 mov 0x98(%rsp),%rsi
1c15: 00
1c16: e8 a5 e9 ff ff callq 5c0 <ZSTD_execSequenceEnd>
1c1b: 48 83 c4 20 add $0x20,%rsp
1c1f: 48 89 c1 mov %rax,%rcx
1c22: e9 af fa ff ff jmpq 16d6 <ZSTD_decompressSequencesLong_default.constprop.0+0xc16>
ZSTD_memcpy(dst, src, 16);
1c27: f3 0f 6f 7e 10 movdqu 0x10(%rsi),%xmm7
ZSTD_wildcopy(op+16, (*litPtr)+16, sequence.litLength-16, ZSTD_no_overlap);
1c2c: 48 83 ea 10 sub $0x10,%rdx
1c30: 41 0f 11 7d 10 movups %xmm7,0x10(%r13)
if (16 >= length) return;
1c35: 48 83 fa 10 cmp $0x10,%rdx
1c39: 0f 8e df f9 ff ff jle 161e <ZSTD_decompressSequencesLong_default.constprop.0+0xb5e>
op += 16;
1c3f: 49 8d 55 20 lea 0x20(%r13),%rdx
ip += 16;
1c43: 48 83 c6 20 add $0x20,%rsi
1c47: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1)
1c4e: 00 00
ZSTD_memcpy(dst, src, 16);
1c50: f3 0f 6f 26 movdqu (%rsi),%xmm4
1c54: 48 83 c2 20 add $0x20,%rdx
1c58: 48 83 c6 20 add $0x20,%rsi
1c5c: 0f 11 62 e0 movups %xmm4,-0x20(%rdx)
1c60: f3 0f 6f 6e f0 movdqu -0x10(%rsi),%xmm5
1c65: 0f 11 6a f0 movups %xmm5,-0x10(%rdx)
while (op < oend);
1c69: 48 39 d7 cmp %rdx,%rdi
1c6c: 77 e2 ja 1c50 <ZSTD_decompressSequencesLong_default.constprop.0+0x1190>
1c6e: e9 ab f9 ff ff jmpq 161e <ZSTD_decompressSequencesLong_default.constprop.0+0xb5e>
bitD->ptr -= bitD->bitsConsumed >> 3;
1c73: 89 c1 mov %eax,%ecx
bitD->bitsConsumed &= 7;
1c75: 83 e0 07 and $0x7,%eax
bitD->ptr -= bitD->bitsConsumed >> 3;
1c78: c1 e9 03 shr $0x3,%ecx
1c7b: 48 29 cd sub %rcx,%rbp
1c7e: 48 8b 75 00 mov 0x0(%rbp),%rsi
1c82: 48 89 ac 24 10 01 00 mov %rbp,0x110(%rsp)
1c89: 00
bitD->bitContainer = MEM_readLEST(bitD->ptr);
1c8a: 48 89 b4 24 00 01 00 mov %rsi,0x100(%rsp)
1c91: 00
return BIT_reloadDStreamFast(bitD);
1c92: e9 d0 f5 ff ff jmpq 1267 <ZSTD_decompressSequencesLong_default.constprop.0+0x7a7>
if (offset < 8) {
1c97: 48 83 fb 07 cmp $0x7,%rbx
1c9b: 0f 87 7a 01 00 00 ja 1e1b <ZSTD_decompressSequencesLong_default.constprop.0+0x135b>
(*op)[0] = (*ip)[0];
1ca1: 0f b6 10 movzbl (%rax),%edx
1ca4: 88 17 mov %dl,(%rdi)
(*op)[1] = (*ip)[1];
1ca6: 0f b6 50 01 movzbl 0x1(%rax),%edx
1caa: 88 57 01 mov %dl,0x1(%rdi)
(*op)[2] = (*ip)[2];
1cad: 0f b6 50 02 movzbl 0x2(%rax),%edx
1cb1: 88 57 02 mov %dl,0x2(%rdi)
(*op)[3] = (*ip)[3];
1cb4: 0f b6 50 03 movzbl 0x3(%rax),%edx
1cb8: 88 57 03 mov %dl,0x3(%rdi)
*ip += dec32table[offset];
1cbb: 48 8d 15 00 00 00 00 lea 0x0(%rip),%rdx # 1cc2 <ZSTD_decompressSequencesLong_default.constprop.0+0x1202>
1cc2: 8b 14 9a mov (%rdx,%rbx,4),%edx
1cc5: 48 01 d0 add %rdx,%rax
static void ZSTD_copy4(void* dst, const void* src) { ZSTD_memcpy(dst, src, 4); }
1cc8: 8b 10 mov (%rax),%edx
1cca: 89 57 04 mov %edx,0x4(%rdi)
*ip -= sub2;
1ccd: 48 8d 15 00 00 00 00 lea 0x0(%rip),%rdx # 1cd4 <ZSTD_decompressSequencesLong_default.constprop.0+0x1214>
1cd4: 48 63 14 9a movslq (%rdx,%rbx,4),%rdx
1cd8: 48 29 d0 sub %rdx,%rax
if (sequence.matchLength > 8) {
1cdb: 49 83 f9 08 cmp $0x8,%r9
1cdf: 0f 86 f1 f9 ff ff jbe 16d6 <ZSTD_decompressSequencesLong_default.constprop.0+0xc16>
*op += 8;
1ce5: 48 8d 57 08 lea 0x8(%rdi),%rdx
*ip += 8;
1ce9: 48 8d 70 08 lea 0x8(%rax),%rsi
ptrdiff_t diff = (BYTE*)dst - (const BYTE*)src;
1ced: 49 89 d3 mov %rdx,%r11
1cf0: 49 29 f3 sub %rsi,%r11
if (ovtype == ZSTD_overlap_src_before_dst && diff < WILDCOPY_VECLEN) {
1cf3: 49 83 fb 0f cmp $0xf,%r11
1cf7: 0f 8f 29 01 00 00 jg 1e26 <ZSTD_decompressSequencesLong_default.constprop.0+0x1366>
1cfd: 4c 8d 4d f7 lea -0x9(%rbp),%r9
1d01: 48 8d 5f 09 lea 0x9(%rdi),%rbx
1d05: 49 29 f9 sub %rdi,%r9
1d08: 4d 89 c8 mov %r9,%r8
1d0b: 49 89 d1 mov %rdx,%r9
1d0e: 49 29 c1 sub %rax,%r9
1d11: 49 83 e9 09 sub $0x9,%r9
1d15: 49 83 f9 0e cmp $0xe,%r9
1d19: 76 7c jbe 1d97 <ZSTD_decompressSequencesLong_default.constprop.0+0x12d7>
1d1b: 48 39 eb cmp %rbp,%rbx
1d1e: 41 0f 96 c3 setbe %r11b
1d22: 49 83 f8 1f cmp $0x1f,%r8
1d26: 41 0f 97 c1 seta %r9b
1d2a: 45 84 cb test %r9b,%r11b
1d2d: 74 68 je 1d97 <ZSTD_decompressSequencesLong_default.constprop.0+0x12d7>
1d2f: 4d 89 c1 mov %r8,%r9
1d32: 49 c1 e9 03 shr $0x3,%r9
1d36: 49 83 c1 01 add $0x1,%r9
1d3a: 48 39 eb cmp %rbp,%rbx
1d3d: bb 01 00 00 00 mov $0x1,%ebx
1d42: 49 0f 46 d9 cmovbe %r9,%rbx
1d46: 41 b9 08 00 00 00 mov $0x8,%r9d
1d4c: 49 89 db mov %rbx,%r11
1d4f: 49 d1 eb shr %r11
1d52: 49 c1 e3 04 shl $0x4,%r11
1d56: 49 83 c3 08 add $0x8,%r11
ZSTD_memcpy(dst, src, 8);
1d5a: f3 42 0f 6f 1c 08 movdqu (%rax,%r9,1),%xmm3
1d60: 42 0f 11 1c 0f movups %xmm3,(%rdi,%r9,1)
} while (op < oend);
1d65: 49 83 c1 10 add $0x10,%r9
1d69: 4d 39 d9 cmp %r11,%r9
1d6c: 75 ec jne 1d5a <ZSTD_decompressSequencesLong_default.constprop.0+0x129a>
1d6e: 48 89 d8 mov %rbx,%rax
1d71: 48 83 e0 fe and $0xfffffffffffffffe,%rax
1d75: 48 8d 3c c5 00 00 00 lea 0x0(,%rax,8),%rdi
1d7c: 00
1d7d: 48 01 fe add %rdi,%rsi
1d80: 48 01 fa add %rdi,%rdx
1d83: 48 39 d8 cmp %rbx,%rax
1d86: 0f 84 4a f9 ff ff je 16d6 <ZSTD_decompressSequencesLong_default.constprop.0+0xc16>
ZSTD_memcpy(dst, src, 8);
1d8c: 48 8b 06 mov (%rsi),%rax
1d8f: 48 89 02 mov %rax,(%rdx)
} while (op < oend);
1d92: e9 3f f9 ff ff jmpq 16d6 <ZSTD_decompressSequencesLong_default.constprop.0+0xc16>
ZSTD_memcpy(dst, src, 8);
1d97: 48 8b 06 mov (%rsi),%rax
COPY8(op, ip)
1d9a: 48 83 c2 08 add $0x8,%rdx
1d9e: 48 83 c6 08 add $0x8,%rsi
ZSTD_memcpy(dst, src, 8);
1da2: 48 89 42 f8 mov %rax,-0x8(%rdx)
} while (op < oend);
1da6: 48 39 d5 cmp %rdx,%rbp
1da9: 77 ec ja 1d97 <ZSTD_decompressSequencesLong_default.constprop.0+0x12d7>
1dab: e9 26 f9 ff ff jmpq 16d6 <ZSTD_decompressSequencesLong_default.constprop.0+0xc16>
1db0: 49 89 cc mov %rcx,%r12
1db3: e9 0f ee ff ff jmpq bc7 <ZSTD_decompressSequencesLong_default.constprop.0+0x107>
for (seqNb=0; (BIT_reloadDStream(&seqState.DStream) <= BIT_DStream_completed) && (seqNb<seqAdvance); seqNb++) {
1db8: 8b 84 24 a4 00 00 00 mov 0xa4(%rsp),%eax
1dbf: e9 30 f3 ff ff jmpq 10f4 <ZSTD_decompressSequencesLong_default.constprop.0+0x634>
temp += !temp; /* 0 is not valid; input is corrupted; force offset to 1 */
1dc4: 48 89 df mov %rbx,%rdi
1dc7: 31 c9 xor %ecx,%ecx
1dc9: 48 83 ef 01 sub $0x1,%rdi
1dcd: 0f 94 c1 sete %cl
1dd0: 48 01 cf add %rcx,%rdi
if (offset != 1) seqState->prevOffset[2] = seqState->prevOffset[1];
1dd3: e9 c3 fd ff ff jmpq 1b9b <ZSTD_decompressSequencesLong_default.constprop.0+0x10db>
ZSTD_memcpy(dst, src, 16);
1dd8: f3 0f 6f 70 08 movdqu 0x8(%rax),%xmm6
1ddd: 0f 11 77 08 movups %xmm6,0x8(%rdi)
if (16 >= length) return;
1de1: 49 83 f8 18 cmp $0x18,%r8
1de5: 0f 8e 53 f6 ff ff jle 143e <ZSTD_decompressSequencesLong_default.constprop.0+0x97e>
op += 16;
1deb: 48 83 c7 18 add $0x18,%rdi
ip += 16;
1def: 48 83 c0 18 add $0x18,%rax
1df3: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)
ZSTD_memcpy(dst, src, 16);
1df8: f3 0f 6f 18 movdqu (%rax),%xmm3
1dfc: 48 83 c7 20 add $0x20,%rdi
1e00: 48 83 c0 20 add $0x20,%rax
1e04: 0f 11 5f e0 movups %xmm3,-0x20(%rdi)
1e08: f3 0f 6f 68 f0 movdqu -0x10(%rax),%xmm5
1e0d: 0f 11 6f f0 movups %xmm5,-0x10(%rdi)
while (op < oend);
1e11: 49 39 fd cmp %rdi,%r13
1e14: 77 e2 ja 1df8 <ZSTD_decompressSequencesLong_default.constprop.0+0x1338>
1e16: e9 23 f6 ff ff jmpq 143e <ZSTD_decompressSequencesLong_default.constprop.0+0x97e>
ZSTD_memcpy(dst, src, 8);
1e1b: 48 8b 10 mov (%rax),%rdx
1e1e: 48 89 17 mov %rdx,(%rdi)
}
1e21: e9 b5 fe ff ff jmpq 1cdb <ZSTD_decompressSequencesLong_default.constprop.0+0x121b>
ZSTD_memcpy(dst, src, 16);
1e26: f3 0f 6f 58 08 movdqu 0x8(%rax),%xmm3
1e2b: 0f 11 5f 08 movups %xmm3,0x8(%rdi)
if (16 >= length) return;
1e2f: 49 83 f9 18 cmp $0x18,%r9
1e33: 0f 8e 9d f8 ff ff jle 16d6 <ZSTD_decompressSequencesLong_default.constprop.0+0xc16>
op += 16;
1e39: 48 83 c7 18 add $0x18,%rdi
ip += 16;
1e3d: 48 83 c0 18 add $0x18,%rax
ZSTD_memcpy(dst, src, 16);
1e41: f3 0f 6f 28 movdqu (%rax),%xmm5
1e45: 48 83 c7 20 add $0x20,%rdi
1e49: 48 83 c0 20 add $0x20,%rax
1e4d: 0f 11 6f e0 movups %xmm5,-0x20(%rdi)
1e51: f3 0f 6f 60 f0 movdqu -0x10(%rax),%xmm4
1e56: 0f 11 67 f0 movups %xmm4,-0x10(%rdi)
while (op < oend);
1e5a: 48 39 fd cmp %rdi,%rbp
1e5d: 77 e2 ja 1e41 <ZSTD_decompressSequencesLong_default.constprop.0+0x1381>
1e5f: e9 72 f8 ff ff jmpq 16d6 <ZSTD_decompressSequencesLong_default.constprop.0+0xc16>
1e64: 66 66 2e 0f 1f 84 00 data16 nopw %cs:0x0(%rax,%rax,1)
1e6b: 00 00 00 00
1e6f: 66 66 2e 0f 1f 84 00 data16 nopw %cs:0x0(%rax,%rax,1)
1e76: 00 00 00 00
1e7a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1)
0000000000001e80 <ZSTD_decompressSequences_bmi2.constprop.0>:
#if DYNAMIC_BMI2
#ifndef ZSTD_FORCE_DECOMPRESS_SEQUENCES_LONG
static TARGET_ATTRIBUTE("bmi2") size_t
DONT_VECTORIZE
ZSTD_decompressSequences_bmi2(ZSTD_DCtx* dctx,
1e80: 41 57 push %r15
BYTE* const oend = ostart + maxDstSize;
1e82: 48 01 f2 add %rsi,%rdx
ZSTD_decompressSequences_bmi2(ZSTD_DCtx* dctx,
1e85: 41 56 push %r14
1e87: 41 55 push %r13
1e89: 41 54 push %r12
1e8b: 55 push %rbp
1e8c: 53 push %rbx
1e8d: 48 81 ec f8 00 00 00 sub $0xf8,%rsp
const BYTE* const litEnd = litPtr + dctx->litSize;
1e94: 48 8b 87 c0 75 00 00 mov 0x75c0(%rdi),%rax
ZSTD_decompressSequences_bmi2(ZSTD_DCtx* dctx,
1e9b: 48 89 74 24 10 mov %rsi,0x10(%rsp)
const BYTE* litPtr = dctx->litPtr;
1ea0: 48 8b b7 a0 75 00 00 mov 0x75a0(%rdi),%rsi
ZSTD_decompressSequences_bmi2(ZSTD_DCtx* dctx,
1ea7: 44 89 4c 24 1c mov %r9d,0x1c(%rsp)
const BYTE* const litEnd = litPtr + dctx->litSize;
1eac: 48 01 f0 add %rsi,%rax
BYTE* const oend = ostart + maxDstSize;
1eaf: 48 89 54 24 20 mov %rdx,0x20(%rsp)
const BYTE* litPtr = dctx->litPtr;
1eb4: 48 89 74 24 58 mov %rsi,0x58(%rsp)
const BYTE* const litEnd = litPtr + dctx->litSize;
1eb9: 48 89 44 24 08 mov %rax,0x8(%rsp)
if (nbSeq) {
1ebe: 45 85 c9 test %r9d,%r9d
1ec1: 0f 84 e1 00 00 00 je 1fa8 <ZSTD_decompressSequences_bmi2.constprop.0+0x128>
const BYTE* const prefixStart = (const BYTE*) (dctx->prefixStart);
1ec7: 48 8b 87 c8 74 00 00 mov 0x74c8(%rdi),%rax
1ece: 49 89 ff mov %rdi,%r15
dctx->fseEntropy = 1;
1ed1: c7 87 2c 75 00 00 01 movl $0x1,0x752c(%rdi)
1ed8: 00 00 00
const BYTE* const prefixStart = (const BYTE*) (dctx->prefixStart);
1edb: 48 89 04 24 mov %rax,(%rsp)
const BYTE* const vBase = (const BYTE*) (dctx->virtualStart);
1edf: 48 8b 87 d0 74 00 00 mov 0x74d0(%rdi),%rax
1ee6: 48 89 44 24 30 mov %rax,0x30(%rsp)
const BYTE* const dictEnd = (const BYTE*) (dctx->dictEnd);
1eeb: 48 8b 87 d8 74 00 00 mov 0x74d8(%rdi),%rax
1ef2: 48 89 44 24 38 mov %rax,0x38(%rsp)
{ U32 i; for (i=0; i<ZSTD_REP_NUM; i++) seqState.prevOffset[i] = dctx->entropy.rep[i]; }
1ef7: 8b 87 3c 68 00 00 mov 0x683c(%rdi),%eax
1efd: 48 89 84 24 d8 00 00 mov %rax,0xd8(%rsp)
1f04: 00
1f05: 8b 87 40 68 00 00 mov 0x6840(%rdi),%eax
1f0b: 48 89 84 24 e0 00 00 mov %rax,0xe0(%rsp)
1f12: 00
1f13: 8b 87 44 68 00 00 mov 0x6844(%rdi),%eax
1f19: 48 89 84 24 e8 00 00 mov %rax,0xe8(%rsp)
1f20: 00
if (srcSize < 1) { ZSTD_memset(bitD, 0, sizeof(*bitD)); return ERROR(srcSize_wrong); }
1f21: 4d 85 c0 test %r8,%r8
1f24: 74 62 je 1f88 <ZSTD_decompressSequences_bmi2.constprop.0+0x108>
bitD->limitPtr = bitD->start + sizeof(bitD->bitContainer);
1f26: 48 8d 41 08 lea 0x8(%rcx),%rax
bitD->start = (const char*)srcBuffer;
1f2a: 48 89 8c 24 98 00 00 mov %rcx,0x98(%rsp)
1f31: 00
bitD->limitPtr = bitD->start + sizeof(bitD->bitContainer);
1f32: 48 89 84 24 a0 00 00 mov %rax,0xa0(%rsp)
1f39: 00
{ BYTE const lastByte = ((const BYTE*)srcBuffer)[srcSize-1];
1f3a: 42 0f b6 44 01 ff movzbl -0x1(%rcx,%r8,1),%eax
if (srcSize >= sizeof(bitD->bitContainer)) { /* normal case */
1f40: 49 83 f8 07 cmp $0x7,%r8
1f44: 0f 86 96 00 00 00 jbe 1fe0 <ZSTD_decompressSequences_bmi2.constprop.0+0x160>
bitD->ptr = (const char*)srcBuffer + srcSize - sizeof(bitD->bitContainer);
1f4a: 4a 8d 54 01 f8 lea -0x8(%rcx,%r8,1),%rdx
1f4f: 48 89 94 24 90 00 00 mov %rdx,0x90(%rsp)
1f56: 00
bitD->bitContainer = MEM_readLEST(bitD->ptr);
1f57: 48 8b 12 mov (%rdx),%rdx
1f5a: 48 89 94 24 80 00 00 mov %rdx,0x80(%rsp)
1f61: 00
bitD->bitsConsumed = lastByte ? 8 - BIT_highbit32(lastByte) : 0; /* ensures bitsConsumed is always set */
1f62: 84 c0 test %al,%al
1f64: 74 22 je 1f88 <ZSTD_decompressSequences_bmi2.constprop.0+0x108>
return __builtin_clz (val) ^ 31;
1f66: 0f bd c0 bsr %eax,%eax
bitD->bitsConsumed = lastByte ? 8 - BIT_highbit32(lastByte) : 0; /* ensures bitsConsumed is always set */
1f69: ba 08 00 00 00 mov $0x8,%edx
1f6e: 29 c2 sub %eax,%edx
1f70: 89 94 24 88 00 00 00 mov %edx,0x88(%rsp)
RETURN_ERROR_IF(
1f77: 49 83 f8 88 cmp $0xffffffffffffff88,%r8
1f7b: 0f 86 eb 00 00 00 jbe 206c <ZSTD_decompressSequences_bmi2.constprop.0+0x1ec>
1f81: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
1f88: 49 c7 c6 ec ff ff ff mov $0xffffffffffffffec,%r14
const void* seqStart, size_t seqSize, int nbSeq,
const ZSTD_longOffset_e isLongOffset,
const int frame)
{
return ZSTD_decompressSequences_body(dctx, dst, maxDstSize, seqStart, seqSize, nbSeq, isLongOffset, frame);
}
1f8f: 48 81 c4 f8 00 00 00 add $0xf8,%rsp
1f96: 4c 89 f0 mov %r14,%rax
1f99: 5b pop %rbx
1f9a: 5d pop %rbp
1f9b: 41 5c pop %r12
1f9d: 41 5d pop %r13
1f9f: 41 5e pop %r14
1fa1: 41 5f pop %r15
1fa3: c3 retq
1fa4: 0f 1f 40 00 nopl 0x0(%rax)
BYTE* op = ostart;
1fa8: 48 8b 5c 24 10 mov 0x10(%rsp),%rbx
1fad: 48 89 c5 mov %rax,%rbp
{ size_t const lastLLSize = litEnd - litPtr;
1fb0: 48 29 f5 sub %rsi,%rbp
RETURN_ERROR_IF(lastLLSize > (size_t)(oend-op), dstSize_tooSmall, "");
1fb3: 48 29 da sub %rbx,%rdx
1fb6: 49 c7 c6 ba ff ff ff mov $0xffffffffffffffba,%r14
1fbd: 48 39 d5 cmp %rdx,%rbp
1fc0: 77 cd ja 1f8f <ZSTD_decompressSequences_bmi2.constprop.0+0x10f>
if (op != NULL) {
1fc2: 48 85 db test %rbx,%rbx
1fc5: 74 0e je 1fd5 <ZSTD_decompressSequences_bmi2.constprop.0+0x155>
ZSTD_memcpy(op, litPtr, lastLLSize);
1fc7: 48 89 df mov %rbx,%rdi
1fca: 48 89 ea mov %rbp,%rdx
op += lastLLSize;
1fcd: 48 01 eb add %rbp,%rbx
ZSTD_memcpy(op, litPtr, lastLLSize);
1fd0: e8 00 00 00 00 callq 1fd5 <ZSTD_decompressSequences_bmi2.constprop.0+0x155>
return op-ostart;
1fd5: 48 2b 5c 24 10 sub 0x10(%rsp),%rbx
1fda: 49 89 de mov %rbx,%r14
1fdd: eb b0 jmp 1f8f <ZSTD_decompressSequences_bmi2.constprop.0+0x10f>
1fdf: 90 nop
bitD->ptr = bitD->start;
1fe0: 48 8d 3d 00 00 00 00 lea 0x0(%rip),%rdi # 1fe7 <ZSTD_decompressSequences_bmi2.constprop.0+0x167>
bitD->bitContainer = *(const BYTE*)(bitD->start);
1fe7: 0f b6 11 movzbl (%rcx),%edx
bitD->ptr = bitD->start;
1fea: 48 89 8c 24 90 00 00 mov %rcx,0x90(%rsp)
1ff1: 00
bitD->bitContainer = *(const BYTE*)(bitD->start);
1ff2: 4a 63 34 87 movslq (%rdi,%r8,4),%rsi
1ff6: 48 89 94 24 80 00 00 mov %rdx,0x80(%rsp)
1ffd: 00
switch(srcSize)
1ffe: 48 01 fe add %rdi,%rsi
2001: ff e6 jmpq *%rsi
case 7: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[6]) << (sizeof(bitD->bitContainer)*8 - 16);
2003: 0f b6 71 06 movzbl 0x6(%rcx),%esi
2007: 48 c1 e6 30 shl $0x30,%rsi
200b: 48 01 f2 add %rsi,%rdx
case 6: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[5]) << (sizeof(bitD->bitContainer)*8 - 24);
200e: 0f b6 71 05 movzbl 0x5(%rcx),%esi
2012: 48 c1 e6 28 shl $0x28,%rsi
2016: 48 01 f2 add %rsi,%rdx
case 5: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[4]) << (sizeof(bitD->bitContainer)*8 - 32);
2019: 0f b6 71 04 movzbl 0x4(%rcx),%esi
201d: 48 c1 e6 20 shl $0x20,%rsi
2021: 48 01 f2 add %rsi,%rdx
case 4: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[3]) << 24;
2024: 0f b6 71 03 movzbl 0x3(%rcx),%esi
2028: 48 c1 e6 18 shl $0x18,%rsi
202c: 48 01 f2 add %rsi,%rdx
case 3: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[2]) << 16;
202f: 0f b6 71 02 movzbl 0x2(%rcx),%esi
2033: 48 c1 e6 10 shl $0x10,%rsi
2037: 48 01 f2 add %rsi,%rdx
case 2: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[1]) << 8;
203a: 0f b6 49 01 movzbl 0x1(%rcx),%ecx
203e: 48 c1 e1 08 shl $0x8,%rcx
2042: 48 01 ca add %rcx,%rdx
2045: 48 89 94 24 80 00 00 mov %rdx,0x80(%rsp)
204c: 00
bitD->bitsConsumed = lastByte ? 8 - BIT_highbit32(lastByte) : 0;
204d: 84 c0 test %al,%al
204f: 0f 84 33 ff ff ff je 1f88 <ZSTD_decompressSequences_bmi2.constprop.0+0x108>
bitD->bitsConsumed += (U32)(sizeof(bitD->bitContainer) - srcSize)*8;
2055: ba 09 00 00 00 mov $0x9,%edx
return __builtin_clz (val) ^ 31;
205a: 0f bd c0 bsr %eax,%eax
bitD->bitsConsumed += (U32)(sizeof(bitD->bitContainer) - srcSize)*8;
205d: 44 29 c2 sub %r8d,%edx
2060: c1 e2 03 shl $0x3,%edx
2063: 29 c2 sub %eax,%edx
2065: 89 94 24 88 00 00 00 mov %edx,0x88(%rsp)
ZSTD_initFseState(&seqState.stateLL, &seqState.DStream, dctx->LLTptr);
206c: 49 8b 17 mov (%r15),%rdx
206f: 48 8d b4 24 80 00 00 lea 0x80(%rsp),%rsi
2076: 00
2077: 48 8d bc 24 a8 00 00 lea 0xa8(%rsp),%rdi
207e: 00
207f: e8 7c e9 ff ff callq a00 <ZSTD_initFseState>
ZSTD_initFseState(&seqState.stateOffb, &seqState.DStream, dctx->OFTptr);
2084: 49 8b 57 10 mov 0x10(%r15),%rdx
2088: 48 8d bc 24 b8 00 00 lea 0xb8(%rsp),%rdi
208f: 00
2090: e8 6b e9 ff ff callq a00 <ZSTD_initFseState>
ZSTD_initFseState(&seqState.stateML, &seqState.DStream, dctx->MLTptr);
2095: 49 8b 57 08 mov 0x8(%r15),%rdx
2099: 48 8d bc 24 c8 00 00 lea 0xc8(%rsp),%rdi
20a0: 00
20a1: e8 5a e9 ff ff callq a00 <ZSTD_initFseState>
__asm__(".p2align 6");
20a6: 66 66 2e 0f 1f 84 00 data16 nopw %cs:0x0(%rax,%rax,1)
20ad: 00 00 00 00
20b1: 66 66 2e 0f 1f 84 00 data16 nopw %cs:0x0(%rax,%rax,1)
20b8: 00 00 00 00
20bc: 0f 1f 40 00 nopl 0x0(%rax)
__asm__("nop");
20c0: 90 nop
__asm__(".p2align 5");
20c1: 66 66 2e 0f 1f 84 00 data16 nopw %cs:0x0(%rax,%rax,1)
20c8: 00 00 00 00
20cc: 66 66 2e 0f 1f 84 00 data16 nopw %cs:0x0(%rax,%rax,1)
20d3: 00 00 00 00
20d7: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1)
20de: 00 00
__asm__("nop");
20e0: 90 nop
__asm__(".p2align 3");
20e1: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
BYTE* const oend_w = oend - WILDCOPY_OVERLENGTH; /* risk : address space underflow on oend=NULL */
20e8: 48 8b 44 24 20 mov 0x20(%rsp),%rax
return ZSTD_execSequenceEnd(op, oend, sequence, litPtr, litLimit, prefixStart, virtualStart, dictEnd);
20ed: 48 8d 74 24 58 lea 0x58(%rsp),%rsi
*ip += dec32table[offset];
20f2: 4c 89 7c 24 48 mov %r15,0x48(%rsp)
return ZSTD_execSequenceEnd(op, oend, sequence, litPtr, litLimit, prefixStart, virtualStart, dictEnd);
20f7: 48 89 74 24 40 mov %rsi,0x40(%rsp)
BYTE* op = ostart;
20fc: 48 8b 5c 24 10 mov 0x10(%rsp),%rbx
BYTE* const oend_w = oend - WILDCOPY_OVERLENGTH; /* risk : address space underflow on oend=NULL */
2101: 48 83 e8 20 sub $0x20,%rax
2105: 48 89 44 24 28 mov %rax,0x28(%rsp)
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
210a: 8b 84 24 88 00 00 00 mov 0x88(%rsp),%eax
2111: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
ZSTD_seqSymbol const llDInfo = seqState->stateLL.table[seqState->stateLL.state];
2118: 48 8b 8c 24 a8 00 00 mov 0xa8(%rsp),%rcx
211f: 00
2120: 48 8b 94 24 b0 00 00 mov 0xb0(%rsp),%rdx
2127: 00
ZSTD_seqSymbol const mlDInfo = seqState->stateML.table[seqState->stateML.state];
2128: 48 8b b4 24 c8 00 00 mov 0xc8(%rsp),%rsi
212f: 00
seqState->prevOffset[1] = seqState->prevOffset[0];
2130: 48 8b ac 24 d8 00 00 mov 0xd8(%rsp),%rbp
2137: 00
ZSTD_seqSymbol const llDInfo = seqState->stateLL.table[seqState->stateLL.state];
2138: 4c 8d 04 ca lea (%rdx,%rcx,8),%r8
ZSTD_seqSymbol const mlDInfo = seqState->stateML.table[seqState->stateML.state];
213c: 48 8b 8c 24 d0 00 00 mov 0xd0(%rsp),%rcx
2143: 00
ZSTD_seqSymbol const llDInfo = seqState->stateLL.table[seqState->stateLL.state];
2144: 45 0f b6 50 02 movzbl 0x2(%r8),%r10d
2149: 41 8b 50 04 mov 0x4(%r8),%edx
ZSTD_seqSymbol const mlDInfo = seqState->stateML.table[seqState->stateML.state];
214d: 48 8d 3c f1 lea (%rcx,%rsi,8),%rdi
ZSTD_seqSymbol const ofDInfo = seqState->stateOffb.table[seqState->stateOffb.state];
2151: 48 8b 8c 24 c0 00 00 mov 0xc0(%rsp),%rcx
2158: 00
2159: 48 8b b4 24 b8 00 00 mov 0xb8(%rsp),%rsi
2160: 00
ZSTD_seqSymbol const mlDInfo = seqState->stateML.table[seqState->stateML.state];
2161: 44 0f b6 5f 02 movzbl 0x2(%rdi),%r11d
2166: 44 8b 67 04 mov 0x4(%rdi),%r12d
ZSTD_seqSymbol const ofDInfo = seqState->stateOffb.table[seqState->stateOffb.state];
216a: 48 8d 34 f1 lea (%rcx,%rsi,8),%rsi
216e: 0f b6 4e 02 movzbl 0x2(%rsi),%ecx
BYTE const totalBits = llBits+mlBits+ofBits;
2172: 47 8d 2c 1a lea (%r10,%r11,1),%r13d
ZSTD_seqSymbol const ofDInfo = seqState->stateOffb.table[seqState->stateOffb.state];
2176: 44 8b 4e 04 mov 0x4(%rsi),%r9d
BYTE const totalBits = llBits+mlBits+ofBits;
217a: 41 01 cd add %ecx,%r13d
if (ofBits > 1) {
217d: 80 f9 01 cmp $0x1,%cl
2180: 0f 86 62 02 00 00 jbe 23e8 <ZSTD_decompressSequences_bmi2.constprop.0+0x568>
2186: 41 89 cf mov %ecx,%r15d
2189: c4 62 f9 f7 b4 24 80 shlx %rax,0x80(%rsp),%r14
2190: 00 00 00
bitD->bitsConsumed += nbBits;
2193: 01 c8 add %ecx,%eax
seqState->prevOffset[2] = seqState->prevOffset[1];
2195: 48 8b 8c 24 e0 00 00 mov 0xe0(%rsp),%rcx
219c: 00
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
219d: 41 f7 df neg %r15d
bitD->bitsConsumed += nbBits;
21a0: 89 84 24 88 00 00 00 mov %eax,0x88(%rsp)
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
21a7: c4 42 83 f7 f6 shrx %r15,%r14,%r14
offset = ofBase + BIT_readBitsFast(&seqState->DStream, ofBits/*>0*/); /* <= (ZSTD_WINDOWLOG_MAX-1) bits */
21ac: 4d 01 ce add %r9,%r14
seqState->prevOffset[2] = seqState->prevOffset[1];
21af: 48 89 8c 24 e8 00 00 mov %rcx,0xe8(%rsp)
21b6: 00
seqState->prevOffset[0] = offset;
21b7: 4c 89 b4 24 d8 00 00 mov %r14,0xd8(%rsp)
21be: 00
seqState->prevOffset[1] = seqState->prevOffset[0];
21bf: 48 89 ac 24 e0 00 00 mov %rbp,0xe0(%rsp)
21c6: 00
seqState->prevOffset[0] = offset;
21c7: 4c 89 f5 mov %r14,%rbp
if (mlBits > 0)
21ca: 45 84 db test %r11b,%r11b
21cd: 0f 85 4d 02 00 00 jne 2420 <ZSTD_decompressSequences_bmi2.constprop.0+0x5a0>
if (MEM_64bits() && UNLIKELY(totalBits >= STREAM_ACCUMULATOR_MIN_64-(LLFSELog+MLFSELog+OffFSELog)))
21d3: 41 80 fd 1e cmp $0x1e,%r13b
21d7: 0f 87 6f 02 00 00 ja 244c <ZSTD_decompressSequences_bmi2.constprop.0+0x5cc>
21dd: 48 8b 8c 24 80 00 00 mov 0x80(%rsp),%rcx
21e4: 00
if (llBits > 0)
21e5: 45 84 d2 test %r10b,%r10b
21e8: 0f 85 da 02 00 00 jne 24c8 <ZSTD_decompressSequences_bmi2.constprop.0+0x648>
U32 const nbBits = DInfo.nbBits;
21ee: 45 0f b6 50 03 movzbl 0x3(%r8),%r10d
return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
21f3: 4c 8d 1d 00 00 00 00 lea 0x0(%rip),%r11 # 21fa <ZSTD_decompressSequences_bmi2.constprop.0+0x37a>
DStatePtr->state = DInfo.nextState + lowBits;
21fa: 45 0f b7 00 movzwl (%r8),%r8d
size_t const sequenceLength = sequence.litLength + sequence.matchLength;
21fe: 4e 8d 34 22 lea (%rdx,%r12,1),%r14
BYTE* const oMatchEnd = op + sequenceLength; /* risk : address space overflow (32-bits) */
2202: 4e 8d 2c 33 lea (%rbx,%r14,1),%r13
return BIT_getMiddleBits(bitD->bitContainer, (sizeof(bitD->bitContainer)*8) - bitD->bitsConsumed - nbBits, nbBits);
2206: 44 01 d0 add %r10d,%eax
return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
2209: 41 89 c1 mov %eax,%r9d
220c: 41 f7 d9 neg %r9d
220f: c4 62 b3 f7 c9 shrx %r9,%rcx,%r9
2214: 47 23 0c 93 and (%r11,%r10,4),%r9d
DStatePtr->state = DInfo.nextState + lowBits;
2218: 4d 01 c8 add %r9,%r8
221b: 4c 89 84 24 a8 00 00 mov %r8,0xa8(%rsp)
2222: 00
U32 const nbBits = DInfo.nbBits;
2223: 44 0f b6 4f 03 movzbl 0x3(%rdi),%r9d
DStatePtr->state = DInfo.nextState + lowBits;
2228: 0f b7 3f movzwl (%rdi),%edi
return BIT_getMiddleBits(bitD->bitContainer, (sizeof(bitD->bitContainer)*8) - bitD->bitsConsumed - nbBits, nbBits);
222b: 44 01 c8 add %r9d,%eax
return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
222e: 41 89 c0 mov %eax,%r8d
2231: 41 f7 d8 neg %r8d
2234: c4 62 bb f7 c1 shrx %r8,%rcx,%r8
2239: 47 23 04 8b and (%r11,%r9,4),%r8d
223d: 4c 01 c7 add %r8,%rdi
2240: 48 89 bc 24 c8 00 00 mov %rdi,0xc8(%rsp)
2247: 00
ZSTD_seqSymbol const DInfo = DStatePtr->table[DStatePtr->state];
2248: 0f b7 3e movzwl (%rsi),%edi
U32 const nbBits = DInfo.nbBits;
224b: 0f b6 76 03 movzbl 0x3(%rsi),%esi
return BIT_getMiddleBits(bitD->bitContainer, (sizeof(bitD->bitContainer)*8) - bitD->bitsConsumed - nbBits, nbBits);
224f: 01 f0 add %esi,%eax
return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
2251: 41 89 c0 mov %eax,%r8d
bitD->bitsConsumed += nbBits;
2254: 89 84 24 88 00 00 00 mov %eax,0x88(%rsp)
DStatePtr->state = DInfo.nextState + lowBits;
225b: 0f b7 c7 movzwl %di,%eax
BYTE* const oLitEnd = op + sequence.litLength;
225e: 48 8d 3c 13 lea (%rbx,%rdx,1),%rdi
return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
2262: 41 f7 d8 neg %r8d
2265: c4 e2 bb f7 c9 shrx %r8,%rcx,%rcx
226a: 41 23 0c b3 and (%r11,%rsi,4),%ecx
DStatePtr->state = DInfo.nextState + lowBits;
226e: 48 01 c1 add %rax,%rcx
const BYTE* match = oLitEnd - sequence.offset;
2271: 48 89 f8 mov %rdi,%rax
DStatePtr->state = DInfo.nextState + lowBits;
2274: 48 89 8c 24 b8 00 00 mov %rcx,0xb8(%rsp)
227b: 00
const BYTE* const iLitEnd = *litPtr + sequence.litLength;
227c: 48 8b 4c 24 58 mov 0x58(%rsp),%rcx
const BYTE* match = oLitEnd - sequence.offset;
2281: 48 29 e8 sub %rbp,%rax
const BYTE* const iLitEnd = *litPtr + sequence.litLength;
2284: 48 8d 34 11 lea (%rcx,%rdx,1),%rsi
if (UNLIKELY(
2288: 48 39 74 24 08 cmp %rsi,0x8(%rsp)
228d: 0f 82 95 02 00 00 jb 2528 <ZSTD_decompressSequences_bmi2.constprop.0+0x6a8>
2293: 4c 3b 6c 24 28 cmp 0x28(%rsp),%r13
2298: 0f 87 8a 02 00 00 ja 2528 <ZSTD_decompressSequences_bmi2.constprop.0+0x6a8>
ZSTD_memcpy(dst, src, 16);
229e: f3 0f 6f 11 movdqu (%rcx),%xmm2
22a2: 0f 11 13 movups %xmm2,(%rbx)
if (UNLIKELY(sequence.litLength > 16)) {
22a5: 48 83 fa 10 cmp $0x10,%rdx
22a9: 0f 87 c9 02 00 00 ja 2578 <ZSTD_decompressSequences_bmi2.constprop.0+0x6f8>
if (sequence.offset > (size_t)(oLitEnd - prefixStart)) {
22af: 48 89 fa mov %rdi,%rdx
22b2: 48 2b 14 24 sub (%rsp),%rdx
*litPtr = iLitEnd; /* update for next sequence */
22b6: 48 89 74 24 58 mov %rsi,0x58(%rsp)
if (sequence.offset > (size_t)(oLitEnd - prefixStart)) {
22bb: 48 39 d5 cmp %rdx,%rbp
22be: 76 49 jbe 2309 <ZSTD_decompressSequences_bmi2.constprop.0+0x489>
RETURN_ERROR_IF(UNLIKELY(sequence.offset > (size_t)(oLitEnd - virtualStart)), corruption_detected, "");
22c0: 48 89 fa mov %rdi,%rdx
22c3: 48 2b 54 24 30 sub 0x30(%rsp),%rdx
22c8: 48 39 d5 cmp %rdx,%rbp
22cb: 0f 87 b7 fc ff ff ja 1f88 <ZSTD_decompressSequences_bmi2.constprop.0+0x108>
match = dictEnd + (match - prefixStart);
22d1: 48 8b 4c 24 38 mov 0x38(%rsp),%rcx
22d6: 48 89 c6 mov %rax,%rsi
22d9: 48 2b 34 24 sub (%rsp),%rsi
22dd: 48 01 ce add %rcx,%rsi
if (match + sequence.matchLength <= dictEnd) {
22e0: 4a 8d 14 26 lea (%rsi,%r12,1),%rdx
22e4: 48 39 d1 cmp %rdx,%rcx
22e7: 0f 83 2b 02 00 00 jae 2518 <ZSTD_decompressSequences_bmi2.constprop.0+0x698>
{ size_t const length1 = dictEnd - match;
22ed: 4c 8b 3c 24 mov (%rsp),%r15
22f1: 49 29 c7 sub %rax,%r15
ZSTD_memmove(oLitEnd, match, length1);
22f4: 4c 89 fa mov %r15,%rdx
sequence.matchLength -= length1;
22f7: 4d 29 fc sub %r15,%r12
ZSTD_memmove(oLitEnd, match, length1);
22fa: e8 00 00 00 00 callq 22ff <ZSTD_decompressSequences_bmi2.constprop.0+0x47f>
22ff: 48 89 c7 mov %rax,%rdi
match = prefixStart;
2302: 48 8b 04 24 mov (%rsp),%rax
op = oLitEnd + length1;
2306: 4c 01 ff add %r15,%rdi
if (LIKELY(sequence.offset >= WILDCOPY_VECLEN)) {
2309: 48 83 fd 0f cmp $0xf,%rbp
230d: 0f 86 b5 02 00 00 jbe 25c8 <ZSTD_decompressSequences_bmi2.constprop.0+0x748>
2313: f3 0f 6f 18 movdqu (%rax),%xmm3
2317: 0f 11 1f movups %xmm3,(%rdi)
if (16 >= length) return;
231a: 49 83 fc 10 cmp $0x10,%r12
231e: 7e 2e jle 234e <ZSTD_decompressSequences_bmi2.constprop.0+0x4ce>
op += 16;
2320: 48 83 c7 10 add $0x10,%rdi
ip += 16;
2324: 48 83 c0 10 add $0x10,%rax
2328: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1)
232f: 00
ZSTD_memcpy(dst, src, 16);
2330: f3 0f 6f 00 movdqu (%rax),%xmm0
2334: 48 83 c7 20 add $0x20,%rdi
2338: 48 83 c0 20 add $0x20,%rax
233c: 0f 11 47 e0 movups %xmm0,-0x20(%rdi)
2340: f3 0f 6f 48 f0 movdqu -0x10(%rax),%xmm1
2345: 0f 11 4f f0 movups %xmm1,-0x10(%rdi)
while (op < oend);
2349: 49 39 fd cmp %rdi,%r13
234c: 77 e2 ja 2330 <ZSTD_decompressSequences_bmi2.constprop.0+0x4b0>
if (UNLIKELY(ZSTD_isError(oneSeqSize)))
234e: 49 83 fe 88 cmp $0xffffffffffffff88,%r14
2352: 0f 87 37 fc ff ff ja 1f8f <ZSTD_decompressSequences_bmi2.constprop.0+0x10f>
op += oneSeqSize;
2358: 4c 01 f3 add %r14,%rbx
if (UNLIKELY(!--nbSeq))
235b: 83 6c 24 1c 01 subl $0x1,0x1c(%rsp)
if (bitD->bitsConsumed > (sizeof(bitD->bitContainer)*8)) /* overflow detected, like end of stream */
2360: 8b 84 24 88 00 00 00 mov 0x88(%rsp),%eax
2367: 0f 84 b3 02 00 00 je 2620 <ZSTD_decompressSequences_bmi2.constprop.0+0x7a0>
236d: 83 f8 40 cmp $0x40,%eax
2370: 0f 87 a2 fd ff ff ja 2118 <ZSTD_decompressSequences_bmi2.constprop.0+0x298>
if (bitD->ptr >= bitD->limitPtr) {
2376: 48 8b 94 24 90 00 00 mov 0x90(%rsp),%rdx
237d: 00
237e: 48 3b 94 24 a0 00 00 cmp 0xa0(%rsp),%rdx
2385: 00
2386: 0f 83 5c 01 00 00 jae 24e8 <ZSTD_decompressSequences_bmi2.constprop.0+0x668>
if (bitD->ptr == bitD->start) {
238c: 48 8b bc 24 98 00 00 mov 0x98(%rsp),%rdi
2393: 00
2394: 48 39 fa cmp %rdi,%rdx
2397: 0f 84 7b fd ff ff je 2118 <ZSTD_decompressSequences_bmi2.constprop.0+0x298>
{ U32 nbBytes = bitD->bitsConsumed >> 3;
239d: 89 c1 mov %eax,%ecx
if (bitD->ptr - nbBytes < bitD->start) {
239f: 48 89 d6 mov %rdx,%rsi
{ U32 nbBytes = bitD->bitsConsumed >> 3;
23a2: c1 e9 03 shr $0x3,%ecx
if (bitD->ptr - nbBytes < bitD->start) {
23a5: 41 89 c8 mov %ecx,%r8d
23a8: 4c 29 c6 sub %r8,%rsi
23ab: 48 39 f7 cmp %rsi,%rdi
23ae: 76 10 jbe 23c0 <ZSTD_decompressSequences_bmi2.constprop.0+0x540>
nbBytes = (U32)(bitD->ptr - bitD->start); /* ptr > start */
23b0: 48 89 d6 mov %rdx,%rsi
23b3: 48 29 fe sub %rdi,%rsi
bitD->ptr -= nbBytes;
23b6: 89 f7 mov %esi,%edi
nbBytes = (U32)(bitD->ptr - bitD->start); /* ptr > start */
23b8: 89 f1 mov %esi,%ecx
bitD->ptr -= nbBytes;
23ba: 48 29 fa sub %rdi,%rdx
23bd: 48 89 d6 mov %rdx,%rsi
bitD->bitContainer = MEM_readLEST(bitD->ptr); /* reminder : srcSize > sizeof(bitD->bitContainer), otherwise bitD->ptr == bitD->start */
23c0: 48 8b 16 mov (%rsi),%rdx
bitD->bitsConsumed -= nbBytes*8;
23c3: c1 e1 03 shl $0x3,%ecx
bitD->ptr -= nbBytes;
23c6: 48 89 b4 24 90 00 00 mov %rsi,0x90(%rsp)
23cd: 00
bitD->bitsConsumed -= nbBytes*8;
23ce: 29 c8 sub %ecx,%eax
23d0: 89 84 24 88 00 00 00 mov %eax,0x88(%rsp)
bitD->bitContainer = MEM_readLEST(bitD->ptr); /* reminder : srcSize > sizeof(bitD->bitContainer), otherwise bitD->ptr == bitD->start */
23d7: 48 89 94 24 80 00 00 mov %rdx,0x80(%rsp)
23de: 00
return result;
23df: e9 34 fd ff ff jmpq 2118 <ZSTD_decompressSequences_bmi2.constprop.0+0x298>
23e4: 0f 1f 40 00 nopl 0x0(%rax)
if (LIKELY((ofBits == 0))) {
23e8: 0f 84 b2 02 00 00 je 26a0 <ZSTD_decompressSequences_bmi2.constprop.0+0x820>
if (LIKELY(!ll0))
23ee: 85 d2 test %edx,%edx
23f0: 0f 85 d4 fd ff ff jne 21ca <ZSTD_decompressSequences_bmi2.constprop.0+0x34a>
offset = seqState->prevOffset[1];
23f6: 48 8b 8c 24 e0 00 00 mov 0xe0(%rsp),%rcx
23fd: 00
seqState->prevOffset[1] = seqState->prevOffset[0];
23fe: 48 89 ac 24 e0 00 00 mov %rbp,0xe0(%rsp)
2405: 00
seqState->prevOffset[0] = offset;
2406: 48 89 8c 24 d8 00 00 mov %rcx,0xd8(%rsp)
240d: 00
offset = seqState->prevOffset[1];
240e: 48 89 cd mov %rcx,%rbp
2411: e9 b4 fd ff ff jmpq 21ca <ZSTD_decompressSequences_bmi2.constprop.0+0x34a>
2416: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1)
241d: 00 00 00
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
2420: 45 89 d9 mov %r11d,%r9d
2423: c4 e2 f9 f7 8c 24 80 shlx %rax,0x80(%rsp),%rcx
242a: 00 00 00
bitD->bitsConsumed += nbBits;
242d: 44 01 d8 add %r11d,%eax
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
2430: 41 f7 d9 neg %r9d
bitD->bitsConsumed += nbBits;
2433: 89 84 24 88 00 00 00 mov %eax,0x88(%rsp)
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
243a: c4 e2 b3 f7 c9 shrx %r9,%rcx,%rcx
seq.matchLength += BIT_readBitsFast(&seqState->DStream, mlBits/*>0*/);
243f: 49 01 cc add %rcx,%r12
if (MEM_64bits() && UNLIKELY(totalBits >= STREAM_ACCUMULATOR_MIN_64-(LLFSELog+MLFSELog+OffFSELog)))
2442: 41 80 fd 1e cmp $0x1e,%r13b
2446: 0f 86 91 fd ff ff jbe 21dd <ZSTD_decompressSequences_bmi2.constprop.0+0x35d>
if (bitD->bitsConsumed > (sizeof(bitD->bitContainer)*8)) /* overflow detected, like end of stream */
244c: 83 f8 40 cmp $0x40,%eax
244f: 0f 87 88 fd ff ff ja 21dd <ZSTD_decompressSequences_bmi2.constprop.0+0x35d>
if (bitD->ptr >= bitD->limitPtr) {
2455: 48 8b 8c 24 90 00 00 mov 0x90(%rsp),%rcx
245c: 00
245d: 48 3b 8c 24 a0 00 00 cmp 0xa0(%rsp),%rcx
2464: 00
2465: 0f 83 ed 02 00 00 jae 2758 <ZSTD_decompressSequences_bmi2.constprop.0+0x8d8>
if (bitD->ptr == bitD->start) {
246b: 4c 8b ac 24 98 00 00 mov 0x98(%rsp),%r13
2472: 00
2473: 4c 39 e9 cmp %r13,%rcx
2476: 0f 84 61 fd ff ff je 21dd <ZSTD_decompressSequences_bmi2.constprop.0+0x35d>
{ U32 nbBytes = bitD->bitsConsumed >> 3;
247c: 41 89 c1 mov %eax,%r9d
if (bitD->ptr - nbBytes < bitD->start) {
247f: 49 89 cb mov %rcx,%r11
{ U32 nbBytes = bitD->bitsConsumed >> 3;
2482: 41 c1 e9 03 shr $0x3,%r9d
if (bitD->ptr - nbBytes < bitD->start) {
2486: 45 89 ce mov %r9d,%r14d
2489: 4d 29 f3 sub %r14,%r11
248c: 4d 39 dd cmp %r11,%r13
248f: 76 12 jbe 24a3 <ZSTD_decompressSequences_bmi2.constprop.0+0x623>
nbBytes = (U32)(bitD->ptr - bitD->start); /* ptr > start */
2491: 49 89 cb mov %rcx,%r11
2494: 4d 29 eb sub %r13,%r11
bitD->ptr -= nbBytes;
2497: 45 89 dd mov %r11d,%r13d
nbBytes = (U32)(bitD->ptr - bitD->start); /* ptr > start */
249a: 45 89 d9 mov %r11d,%r9d
bitD->ptr -= nbBytes;
249d: 4c 29 e9 sub %r13,%rcx
24a0: 49 89 cb mov %rcx,%r11
24a3: 49 8b 0b mov (%r11),%rcx
bitD->bitsConsumed -= nbBytes*8;
24a6: 41 c1 e1 03 shl $0x3,%r9d
bitD->ptr -= nbBytes;
24aa: 4c 89 9c 24 90 00 00 mov %r11,0x90(%rsp)
24b1: 00
bitD->bitsConsumed -= nbBytes*8;
24b2: 44 29 c8 sub %r9d,%eax
bitD->bitContainer = MEM_readLEST(bitD->ptr); /* reminder : srcSize > sizeof(bitD->bitContainer), otherwise bitD->ptr == bitD->start */
24b5: 48 89 8c 24 80 00 00 mov %rcx,0x80(%rsp)
24bc: 00
return result;
24bd: e9 23 fd ff ff jmpq 21e5 <ZSTD_decompressSequences_bmi2.constprop.0+0x365>
24c2: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1)
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
24c8: 45 89 d3 mov %r10d,%r11d
24cb: c4 62 f9 f7 c9 shlx %rax,%rcx,%r9
bitD->bitsConsumed += nbBits;
24d0: 44 01 d0 add %r10d,%eax
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
24d3: 41 f7 db neg %r11d
24d6: c4 42 a3 f7 c9 shrx %r11,%r9,%r9
seq.litLength += BIT_readBitsFast(&seqState->DStream, llBits/*>0*/);
24db: 4c 01 ca add %r9,%rdx
24de: e9 0b fd ff ff jmpq 21ee <ZSTD_decompressSequences_bmi2.constprop.0+0x36e>
24e3: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)
bitD->ptr -= bitD->bitsConsumed >> 3;
24e8: 89 c1 mov %eax,%ecx
bitD->bitsConsumed &= 7;
24ea: 83 e0 07 and $0x7,%eax
bitD->ptr -= bitD->bitsConsumed >> 3;
24ed: c1 e9 03 shr $0x3,%ecx
bitD->bitsConsumed &= 7;
24f0: 89 84 24 88 00 00 00 mov %eax,0x88(%rsp)
bitD->ptr -= bitD->bitsConsumed >> 3;
24f7: 48 29 ca sub %rcx,%rdx
24fa: 48 89 94 24 90 00 00 mov %rdx,0x90(%rsp)
2501: 00
bitD->bitContainer = MEM_readLEST(bitD->ptr);
2502: 48 8b 12 mov (%rdx),%rdx
2505: 48 89 94 24 80 00 00 mov %rdx,0x80(%rsp)
250c: 00
return BIT_reloadDStreamFast(bitD);
250d: e9 06 fc ff ff jmpq 2118 <ZSTD_decompressSequences_bmi2.constprop.0+0x298>
2512: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1)
ZSTD_memmove(oLitEnd, match, sequence.matchLength);
2518: 4c 89 e2 mov %r12,%rdx
251b: e8 00 00 00 00 callq 2520 <ZSTD_decompressSequences_bmi2.constprop.0+0x6a0>
return sequenceLength;
2520: e9 29 fe ff ff jmpq 234e <ZSTD_decompressSequences_bmi2.constprop.0+0x4ce>
2525: 0f 1f 00 nopl (%rax)
return ZSTD_execSequenceEnd(op, oend, sequence, litPtr, litLimit, prefixStart, virtualStart, dictEnd);
2528: 48 89 54 24 60 mov %rdx,0x60(%rsp)
252d: 48 89 df mov %rbx,%rdi
2530: 4c 89 64 24 68 mov %r12,0x68(%rsp)
2535: 48 89 6c 24 70 mov %rbp,0x70(%rsp)
253a: ff 74 24 38 pushq 0x38(%rsp)
253e: ff 74 24 78 pushq 0x78(%rsp)
2542: ff 74 24 78 pushq 0x78(%rsp)
2546: 52 push %rdx
2547: 4c 8b 4c 24 50 mov 0x50(%rsp),%r9
254c: 4c 8b 44 24 20 mov 0x20(%rsp),%r8
2551: 48 8b 4c 24 28 mov 0x28(%rsp),%rcx
2556: 48 8b 54 24 60 mov 0x60(%rsp),%rdx
255b: 48 8b 74 24 40 mov 0x40(%rsp),%rsi
2560: e8 5b e0 ff ff callq 5c0 <ZSTD_execSequenceEnd>
2565: 48 83 c4 20 add $0x20,%rsp
2569: 49 89 c6 mov %rax,%r14
256c: e9 dd fd ff ff jmpq 234e <ZSTD_decompressSequences_bmi2.constprop.0+0x4ce>
2571: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
ZSTD_memcpy(dst, src, 16);
2578: f3 0f 6f 71 10 movdqu 0x10(%rcx),%xmm6
ZSTD_wildcopy(op+16, (*litPtr)+16, sequence.litLength-16, ZSTD_no_overlap);
257d: 48 83 ea 10 sub $0x10,%rdx
2581: 0f 11 73 10 movups %xmm6,0x10(%rbx)
if (16 >= length) return;
2585: 48 83 fa 10 cmp $0x10,%rdx
2589: 0f 8e 20 fd ff ff jle 22af <ZSTD_decompressSequences_bmi2.constprop.0+0x42f>
op += 16;
258f: 48 8d 53 20 lea 0x20(%rbx),%rdx
ip += 16;
2593: 48 83 c1 20 add $0x20,%rcx
2597: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1)
259e: 00 00
ZSTD_memcpy(dst, src, 16);
25a0: f3 0f 6f 21 movdqu (%rcx),%xmm4
25a4: 48 83 c2 20 add $0x20,%rdx
25a8: 48 83 c1 20 add $0x20,%rcx
25ac: 0f 11 62 e0 movups %xmm4,-0x20(%rdx)
25b0: f3 0f 6f 69 f0 movdqu -0x10(%rcx),%xmm5
25b5: 0f 11 6a f0 movups %xmm5,-0x10(%rdx)
while (op < oend);
25b9: 48 39 d7 cmp %rdx,%rdi
25bc: 77 e2 ja 25a0 <ZSTD_decompressSequences_bmi2.constprop.0+0x720>
25be: e9 ec fc ff ff jmpq 22af <ZSTD_decompressSequences_bmi2.constprop.0+0x42f>
25c3: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)
if (offset < 8) {
25c8: 48 83 fd 07 cmp $0x7,%rbp
25cc: 0f 86 34 01 00 00 jbe 2706 <ZSTD_decompressSequences_bmi2.constprop.0+0x886>
ZSTD_memcpy(dst, src, 8);
25d2: 48 8b 10 mov (%rax),%rdx
25d5: 48 89 17 mov %rdx,(%rdi)
if (sequence.matchLength > 8) {
25d8: 49 83 fc 08 cmp $0x8,%r12
25dc: 0f 86 6c fd ff ff jbe 234e <ZSTD_decompressSequences_bmi2.constprop.0+0x4ce>
*op += 8;
25e2: 48 8d 57 08 lea 0x8(%rdi),%rdx
*ip += 8;
25e6: 48 8d 48 08 lea 0x8(%rax),%rcx
ptrdiff_t diff = (BYTE*)dst - (const BYTE*)src;
25ea: 48 89 d6 mov %rdx,%rsi
25ed: 48 29 ce sub %rcx,%rsi
if (ovtype == ZSTD_overlap_src_before_dst && diff < WILDCOPY_VECLEN) {
25f0: 48 83 fe 0f cmp $0xf,%rsi
25f4: 0f 8f 83 01 00 00 jg 277d <ZSTD_decompressSequences_bmi2.constprop.0+0x8fd>
25fa: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1)
ZSTD_memcpy(dst, src, 8);
2600: 48 8b 01 mov (%rcx),%rax
COPY8(op, ip)
2603: 48 83 c2 08 add $0x8,%rdx
2607: 48 83 c1 08 add $0x8,%rcx
ZSTD_memcpy(dst, src, 8);
260b: 48 89 42 f8 mov %rax,-0x8(%rdx)
} while (op < oend);
260f: 49 39 d5 cmp %rdx,%r13
2612: 77 ec ja 2600 <ZSTD_decompressSequences_bmi2.constprop.0+0x780>
2614: e9 35 fd ff ff jmpq 234e <ZSTD_decompressSequences_bmi2.constprop.0+0x4ce>
2619: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
if (bitD->bitsConsumed > (sizeof(bitD->bitContainer)*8)) /* overflow detected, like end of stream */
2620: 4c 8b 7c 24 48 mov 0x48(%rsp),%r15
2625: 83 f8 40 cmp $0x40,%eax
2628: 77 2d ja 2657 <ZSTD_decompressSequences_bmi2.constprop.0+0x7d7>
if (bitD->ptr >= bitD->limitPtr) {
262a: 48 8b 94 24 90 00 00 mov 0x90(%rsp),%rdx
2631: 00
2632: 48 3b 94 24 a0 00 00 cmp 0xa0(%rsp),%rdx
2639: 00
263a: 0f 83 48 f9 ff ff jae 1f88 <ZSTD_decompressSequences_bmi2.constprop.0+0x108>
if (bitD->ptr == bitD->start) {
2640: 48 3b 94 24 98 00 00 cmp 0x98(%rsp),%rdx
2647: 00
2648: 0f 85 3a f9 ff ff jne 1f88 <ZSTD_decompressSequences_bmi2.constprop.0+0x108>
if (bitD->bitsConsumed < sizeof(bitD->bitContainer)*8) return BIT_DStream_endOfBuffer;
264e: 83 f8 40 cmp $0x40,%eax
2651: 0f 85 31 f9 ff ff jne 1f88 <ZSTD_decompressSequences_bmi2.constprop.0+0x108>
{ U32 i; for (i=0; i<ZSTD_REP_NUM; i++) dctx->entropy.rep[i] = (U32)(seqState.prevOffset[i]); }
2657: 48 8b 84 24 d8 00 00 mov 0xd8(%rsp),%rax
265e: 00
{ size_t const lastLLSize = litEnd - litPtr;
265f: 48 8b 74 24 58 mov 0x58(%rsp),%rsi
2664: 48 8b 6c 24 08 mov 0x8(%rsp),%rbp
2669: 48 8b 54 24 20 mov 0x20(%rsp),%rdx
{ U32 i; for (i=0; i<ZSTD_REP_NUM; i++) dctx->entropy.rep[i] = (U32)(seqState.prevOffset[i]); }
266e: 41 89 87 3c 68 00 00 mov %eax,0x683c(%r15)
2675: 48 8b 84 24 e0 00 00 mov 0xe0(%rsp),%rax
267c: 00
267d: 41 89 87 40 68 00 00 mov %eax,0x6840(%r15)
2684: 48 8b 84 24 e8 00 00 mov 0xe8(%rsp),%rax
268b: 00
268c: 41 89 87 44 68 00 00 mov %eax,0x6844(%r15)
2693: e9 18 f9 ff ff jmpq 1fb0 <ZSTD_decompressSequences_bmi2.constprop.0+0x130>
2698: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1)
269f: 00
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
26a0: c4 e2 f9 f7 8c 24 80 shlx %rax,0x80(%rsp),%rcx
26a7: 00 00 00
bitD->bitsConsumed += nbBits;
26aa: 83 c0 01 add $0x1,%eax
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
26ad: 48 c1 e9 3f shr $0x3f,%rcx
offset = ofBase + ll0 + BIT_readBitsFast(&seqState->DStream, 1);
26b1: 83 fa 01 cmp $0x1,%edx
26b4: 41 83 d1 00 adc $0x0,%r9d
bitD->bitsConsumed += nbBits;
26b8: 89 84 24 88 00 00 00 mov %eax,0x88(%rsp)
26bf: 4c 01 c9 add %r9,%rcx
{ size_t temp = (offset==3) ? seqState->prevOffset[0] - 1 : seqState->prevOffset[offset];
26c2: 48 83 f9 03 cmp $0x3,%rcx
26c6: 74 7d je 2745 <ZSTD_decompressSequences_bmi2.constprop.0+0x8c5>
26c8: 4c 8b 8c cc d8 00 00 mov 0xd8(%rsp,%rcx,8),%r9
26cf: 00
temp += !temp; /* 0 is not valid; input is corrupted; force offset to 1 */
26d0: 49 83 f9 01 cmp $0x1,%r9
26d4: 49 83 d1 00 adc $0x0,%r9
if (offset != 1) seqState->prevOffset[2] = seqState->prevOffset[1];
26d8: 48 83 f9 01 cmp $0x1,%rcx
26dc: 74 10 je 26ee <ZSTD_decompressSequences_bmi2.constprop.0+0x86e>
26de: 48 8b 8c 24 e0 00 00 mov 0xe0(%rsp),%rcx
26e5: 00
26e6: 48 89 8c 24 e8 00 00 mov %rcx,0xe8(%rsp)
26ed: 00
seqState->prevOffset[1] = seqState->prevOffset[0];
26ee: 48 89 ac 24 e0 00 00 mov %rbp,0xe0(%rsp)
26f5: 00
seqState->prevOffset[0] = offset = temp;
26f6: 4c 89 cd mov %r9,%rbp
26f9: 4c 89 8c 24 d8 00 00 mov %r9,0xd8(%rsp)
2700: 00
2701: e9 c4 fa ff ff jmpq 21ca <ZSTD_decompressSequences_bmi2.constprop.0+0x34a>
(*op)[0] = (*ip)[0];
2706: 0f b6 10 movzbl (%rax),%edx
2709: 88 17 mov %dl,(%rdi)
(*op)[1] = (*ip)[1];
270b: 0f b6 50 01 movzbl 0x1(%rax),%edx
270f: 88 57 01 mov %dl,0x1(%rdi)
(*op)[2] = (*ip)[2];
2712: 0f b6 50 02 movzbl 0x2(%rax),%edx
2716: 88 57 02 mov %dl,0x2(%rdi)
(*op)[3] = (*ip)[3];
2719: 0f b6 50 03 movzbl 0x3(%rax),%edx
271d: 88 57 03 mov %dl,0x3(%rdi)
*ip += dec32table[offset];
2720: 48 8d 15 00 00 00 00 lea 0x0(%rip),%rdx # 2727 <ZSTD_decompressSequences_bmi2.constprop.0+0x8a7>
2727: 8b 14 aa mov (%rdx,%rbp,4),%edx
272a: 48 01 d0 add %rdx,%rax
static void ZSTD_copy4(void* dst, const void* src) { ZSTD_memcpy(dst, src, 4); }
272d: 8b 10 mov (%rax),%edx
272f: 89 57 04 mov %edx,0x4(%rdi)
*ip -= sub2;
2732: 48 8d 15 00 00 00 00 lea 0x0(%rip),%rdx # 2739 <ZSTD_decompressSequences_bmi2.constprop.0+0x8b9>
2739: 48 63 14 aa movslq (%rdx,%rbp,4),%rdx
273d: 48 29 d0 sub %rdx,%rax
2740: e9 93 fe ff ff jmpq 25d8 <ZSTD_decompressSequences_bmi2.constprop.0+0x758>
temp += !temp; /* 0 is not valid; input is corrupted; force offset to 1 */
2745: 48 89 e9 mov %rbp,%rcx
2748: 45 31 c9 xor %r9d,%r9d
274b: 48 83 e9 01 sub $0x1,%rcx
274f: 41 0f 94 c1 sete %r9b
2753: 49 01 c9 add %rcx,%r9
if (offset != 1) seqState->prevOffset[2] = seqState->prevOffset[1];
2756: eb 86 jmp 26de <ZSTD_decompressSequences_bmi2.constprop.0+0x85e>
bitD->ptr -= bitD->bitsConsumed >> 3;
2758: 41 89 c1 mov %eax,%r9d
bitD->bitsConsumed &= 7;
275b: 83 e0 07 and $0x7,%eax
bitD->ptr -= bitD->bitsConsumed >> 3;
275e: 41 c1 e9 03 shr $0x3,%r9d
2762: 4c 29 c9 sub %r9,%rcx
2765: 48 89 8c 24 90 00 00 mov %rcx,0x90(%rsp)
276c: 00
276d: 48 8b 09 mov (%rcx),%rcx
bitD->bitContainer = MEM_readLEST(bitD->ptr);
2770: 48 89 8c 24 80 00 00 mov %rcx,0x80(%rsp)
2777: 00
return BIT_reloadDStreamFast(bitD);
2778: e9 68 fa ff ff jmpq 21e5 <ZSTD_decompressSequences_bmi2.constprop.0+0x365>
ZSTD_memcpy(dst, src, 16);
277d: f3 0f 6f 70 08 movdqu 0x8(%rax),%xmm6
2782: 0f 11 77 08 movups %xmm6,0x8(%rdi)
if (16 >= length) return;
2786: 49 83 fc 18 cmp $0x18,%r12
278a: 0f 8e be fb ff ff jle 234e <ZSTD_decompressSequences_bmi2.constprop.0+0x4ce>
op += 16;
2790: 48 83 c7 18 add $0x18,%rdi
ip += 16;
2794: 48 83 c0 18 add $0x18,%rax
2798: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1)
279f: 00
ZSTD_memcpy(dst, src, 16);
27a0: f3 0f 6f 38 movdqu (%rax),%xmm7
27a4: 48 83 c7 20 add $0x20,%rdi
27a8: 48 83 c0 20 add $0x20,%rax
27ac: 0f 11 7f e0 movups %xmm7,-0x20(%rdi)
27b0: f3 0f 6f 78 f0 movdqu -0x10(%rax),%xmm7
27b5: 0f 11 7f f0 movups %xmm7,-0x10(%rdi)
while (op < oend);
27b9: 49 39 fd cmp %rdi,%r13
27bc: 77 e2 ja 27a0 <ZSTD_decompressSequences_bmi2.constprop.0+0x920>
27be: e9 8b fb ff ff jmpq 234e <ZSTD_decompressSequences_bmi2.constprop.0+0x4ce>
27c3: 66 66 2e 0f 1f 84 00 data16 nopw %cs:0x0(%rax,%rax,1)
27ca: 00 00 00 00
27ce: 66 66 2e 0f 1f 84 00 data16 nopw %cs:0x0(%rax,%rax,1)
27d5: 00 00 00 00
27d9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
00000000000027e0 <ZSTD_decompressSequences_default.constprop.0>:
ZSTD_decompressSequences_default(ZSTD_DCtx* dctx,
27e0: 41 57 push %r15
BYTE* const oend = ostart + maxDstSize;
27e2: 48 01 f2 add %rsi,%rdx
ZSTD_decompressSequences_default(ZSTD_DCtx* dctx,
27e5: 41 56 push %r14
27e7: 41 55 push %r13
27e9: 41 54 push %r12
27eb: 55 push %rbp
27ec: 53 push %rbx
27ed: 48 81 ec f8 00 00 00 sub $0xf8,%rsp
const BYTE* const litEnd = litPtr + dctx->litSize;
27f4: 48 8b 87 c0 75 00 00 mov 0x75c0(%rdi),%rax
ZSTD_decompressSequences_default(ZSTD_DCtx* dctx,
27fb: 48 89 74 24 10 mov %rsi,0x10(%rsp)
const BYTE* litPtr = dctx->litPtr;
2800: 48 8b b7 a0 75 00 00 mov 0x75a0(%rdi),%rsi
ZSTD_decompressSequences_default(ZSTD_DCtx* dctx,
2807: 44 89 4c 24 1c mov %r9d,0x1c(%rsp)
const BYTE* const litEnd = litPtr + dctx->litSize;
280c: 48 01 f0 add %rsi,%rax
BYTE* const oend = ostart + maxDstSize;
280f: 48 89 54 24 20 mov %rdx,0x20(%rsp)
const BYTE* litPtr = dctx->litPtr;
2814: 48 89 74 24 58 mov %rsi,0x58(%rsp)
const BYTE* const litEnd = litPtr + dctx->litSize;
2819: 48 89 44 24 08 mov %rax,0x8(%rsp)
if (nbSeq) {
281e: 45 85 c9 test %r9d,%r9d
2821: 0f 84 e1 00 00 00 je 2908 <ZSTD_decompressSequences_default.constprop.0+0x128>
const BYTE* const prefixStart = (const BYTE*) (dctx->prefixStart);
2827: 48 8b 87 c8 74 00 00 mov 0x74c8(%rdi),%rax
282e: 49 89 ff mov %rdi,%r15
dctx->fseEntropy = 1;
2831: c7 87 2c 75 00 00 01 movl $0x1,0x752c(%rdi)
2838: 00 00 00
const BYTE* const prefixStart = (const BYTE*) (dctx->prefixStart);
283b: 48 89 04 24 mov %rax,(%rsp)
const BYTE* const vBase = (const BYTE*) (dctx->virtualStart);
283f: 48 8b 87 d0 74 00 00 mov 0x74d0(%rdi),%rax
2846: 48 89 44 24 30 mov %rax,0x30(%rsp)
const BYTE* const dictEnd = (const BYTE*) (dctx->dictEnd);
284b: 48 8b 87 d8 74 00 00 mov 0x74d8(%rdi),%rax
2852: 48 89 44 24 38 mov %rax,0x38(%rsp)
{ U32 i; for (i=0; i<ZSTD_REP_NUM; i++) seqState.prevOffset[i] = dctx->entropy.rep[i]; }
2857: 8b 87 3c 68 00 00 mov 0x683c(%rdi),%eax
285d: 48 89 84 24 d8 00 00 mov %rax,0xd8(%rsp)
2864: 00
2865: 8b 87 40 68 00 00 mov 0x6840(%rdi),%eax
286b: 48 89 84 24 e0 00 00 mov %rax,0xe0(%rsp)
2872: 00
2873: 8b 87 44 68 00 00 mov 0x6844(%rdi),%eax
2879: 48 89 84 24 e8 00 00 mov %rax,0xe8(%rsp)
2880: 00
if (srcSize < 1) { ZSTD_memset(bitD, 0, sizeof(*bitD)); return ERROR(srcSize_wrong); }
2881: 4d 85 c0 test %r8,%r8
2884: 74 62 je 28e8 <ZSTD_decompressSequences_default.constprop.0+0x108>
bitD->limitPtr = bitD->start + sizeof(bitD->bitContainer);
2886: 48 8d 41 08 lea 0x8(%rcx),%rax
bitD->start = (const char*)srcBuffer;
288a: 48 89 8c 24 98 00 00 mov %rcx,0x98(%rsp)
2891: 00
bitD->limitPtr = bitD->start + sizeof(bitD->bitContainer);
2892: 48 89 84 24 a0 00 00 mov %rax,0xa0(%rsp)
2899: 00
{ BYTE const lastByte = ((const BYTE*)srcBuffer)[srcSize-1];
289a: 42 0f b6 44 01 ff movzbl -0x1(%rcx,%r8,1),%eax
if (srcSize >= sizeof(bitD->bitContainer)) { /* normal case */
28a0: 49 83 f8 07 cmp $0x7,%r8
28a4: 0f 86 96 00 00 00 jbe 2940 <ZSTD_decompressSequences_default.constprop.0+0x160>
bitD->ptr = (const char*)srcBuffer + srcSize - sizeof(bitD->bitContainer);
28aa: 4a 8d 54 01 f8 lea -0x8(%rcx,%r8,1),%rdx
28af: 48 89 94 24 90 00 00 mov %rdx,0x90(%rsp)
28b6: 00
bitD->bitContainer = MEM_readLEST(bitD->ptr);
28b7: 48 8b 12 mov (%rdx),%rdx
28ba: 48 89 94 24 80 00 00 mov %rdx,0x80(%rsp)
28c1: 00
bitD->bitsConsumed = lastByte ? 8 - BIT_highbit32(lastByte) : 0; /* ensures bitsConsumed is always set */
28c2: 84 c0 test %al,%al
28c4: 74 22 je 28e8 <ZSTD_decompressSequences_default.constprop.0+0x108>
return __builtin_clz (val) ^ 31;
28c6: 0f bd c0 bsr %eax,%eax
bitD->bitsConsumed = lastByte ? 8 - BIT_highbit32(lastByte) : 0; /* ensures bitsConsumed is always set */
28c9: ba 08 00 00 00 mov $0x8,%edx
28ce: 29 c2 sub %eax,%edx
28d0: 89 94 24 88 00 00 00 mov %edx,0x88(%rsp)
RETURN_ERROR_IF(
28d7: 49 83 f8 88 cmp $0xffffffffffffff88,%r8
28db: 0f 86 eb 00 00 00 jbe 29cc <ZSTD_decompressSequences_default.constprop.0+0x1ec>
28e1: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
28e8: 49 c7 c5 ec ff ff ff mov $0xffffffffffffffec,%r13
}
28ef: 48 81 c4 f8 00 00 00 add $0xf8,%rsp
28f6: 4c 89 e8 mov %r13,%rax
28f9: 5b pop %rbx
28fa: 5d pop %rbp
28fb: 41 5c pop %r12
28fd: 41 5d pop %r13
28ff: 41 5e pop %r14
2901: 41 5f pop %r15
2903: c3 retq
2904: 0f 1f 40 00 nopl 0x0(%rax)
BYTE* op = ostart;
2908: 48 8b 5c 24 10 mov 0x10(%rsp),%rbx
290d: 48 89 c5 mov %rax,%rbp
{ size_t const lastLLSize = litEnd - litPtr;
2910: 48 29 f5 sub %rsi,%rbp
RETURN_ERROR_IF(lastLLSize > (size_t)(oend-op), dstSize_tooSmall, "");
2913: 48 29 da sub %rbx,%rdx
2916: 49 c7 c5 ba ff ff ff mov $0xffffffffffffffba,%r13
291d: 48 39 d5 cmp %rdx,%rbp
2920: 77 cd ja 28ef <ZSTD_decompressSequences_default.constprop.0+0x10f>
if (op != NULL) {
2922: 48 85 db test %rbx,%rbx
2925: 74 0e je 2935 <ZSTD_decompressSequences_default.constprop.0+0x155>
ZSTD_memcpy(op, litPtr, lastLLSize);
2927: 48 89 df mov %rbx,%rdi
292a: 48 89 ea mov %rbp,%rdx
op += lastLLSize;
292d: 48 01 eb add %rbp,%rbx
ZSTD_memcpy(op, litPtr, lastLLSize);
2930: e8 00 00 00 00 callq 2935 <ZSTD_decompressSequences_default.constprop.0+0x155>
return op-ostart;
2935: 48 2b 5c 24 10 sub 0x10(%rsp),%rbx
293a: 49 89 dd mov %rbx,%r13
293d: eb b0 jmp 28ef <ZSTD_decompressSequences_default.constprop.0+0x10f>
293f: 90 nop
bitD->ptr = bitD->start;
2940: 48 8d 3d 00 00 00 00 lea 0x0(%rip),%rdi # 2947 <ZSTD_decompressSequences_default.constprop.0+0x167>
bitD->bitContainer = *(const BYTE*)(bitD->start);
2947: 0f b6 11 movzbl (%rcx),%edx
bitD->ptr = bitD->start;
294a: 48 89 8c 24 90 00 00 mov %rcx,0x90(%rsp)
2951: 00
bitD->bitContainer = *(const BYTE*)(bitD->start);
2952: 4a 63 34 87 movslq (%rdi,%r8,4),%rsi
2956: 48 89 94 24 80 00 00 mov %rdx,0x80(%rsp)
295d: 00
switch(srcSize)
295e: 48 01 fe add %rdi,%rsi
2961: ff e6 jmpq *%rsi
case 7: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[6]) << (sizeof(bitD->bitContainer)*8 - 16);
2963: 0f b6 71 06 movzbl 0x6(%rcx),%esi
2967: 48 c1 e6 30 shl $0x30,%rsi
296b: 48 01 f2 add %rsi,%rdx
case 6: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[5]) << (sizeof(bitD->bitContainer)*8 - 24);
296e: 0f b6 71 05 movzbl 0x5(%rcx),%esi
2972: 48 c1 e6 28 shl $0x28,%rsi
2976: 48 01 f2 add %rsi,%rdx
case 5: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[4]) << (sizeof(bitD->bitContainer)*8 - 32);
2979: 0f b6 71 04 movzbl 0x4(%rcx),%esi
297d: 48 c1 e6 20 shl $0x20,%rsi
2981: 48 01 f2 add %rsi,%rdx
case 4: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[3]) << 24;
2984: 0f b6 71 03 movzbl 0x3(%rcx),%esi
2988: 48 c1 e6 18 shl $0x18,%rsi
298c: 48 01 f2 add %rsi,%rdx
case 3: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[2]) << 16;
298f: 0f b6 71 02 movzbl 0x2(%rcx),%esi
2993: 48 c1 e6 10 shl $0x10,%rsi
2997: 48 01 f2 add %rsi,%rdx
case 2: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[1]) << 8;
299a: 0f b6 49 01 movzbl 0x1(%rcx),%ecx
299e: 48 c1 e1 08 shl $0x8,%rcx
29a2: 48 01 ca add %rcx,%rdx
29a5: 48 89 94 24 80 00 00 mov %rdx,0x80(%rsp)
29ac: 00
bitD->bitsConsumed = lastByte ? 8 - BIT_highbit32(lastByte) : 0;
29ad: 84 c0 test %al,%al
29af: 0f 84 33 ff ff ff je 28e8 <ZSTD_decompressSequences_default.constprop.0+0x108>
bitD->bitsConsumed += (U32)(sizeof(bitD->bitContainer) - srcSize)*8;
29b5: ba 09 00 00 00 mov $0x9,%edx
return __builtin_clz (val) ^ 31;
29ba: 0f bd c0 bsr %eax,%eax
bitD->bitsConsumed += (U32)(sizeof(bitD->bitContainer) - srcSize)*8;
29bd: 44 29 c2 sub %r8d,%edx
29c0: c1 e2 03 shl $0x3,%edx
29c3: 29 c2 sub %eax,%edx
29c5: 89 94 24 88 00 00 00 mov %edx,0x88(%rsp)
ZSTD_initFseState(&seqState.stateLL, &seqState.DStream, dctx->LLTptr);
29cc: 49 8b 17 mov (%r15),%rdx
29cf: 48 8d b4 24 80 00 00 lea 0x80(%rsp),%rsi
29d6: 00
29d7: 48 8d bc 24 a8 00 00 lea 0xa8(%rsp),%rdi
29de: 00
29df: e8 1c e0 ff ff callq a00 <ZSTD_initFseState>
ZSTD_initFseState(&seqState.stateOffb, &seqState.DStream, dctx->OFTptr);
29e4: 49 8b 57 10 mov 0x10(%r15),%rdx
29e8: 48 8d bc 24 b8 00 00 lea 0xb8(%rsp),%rdi
29ef: 00
29f0: e8 0b e0 ff ff callq a00 <ZSTD_initFseState>
ZSTD_initFseState(&seqState.stateML, &seqState.DStream, dctx->MLTptr);
29f5: 49 8b 57 08 mov 0x8(%r15),%rdx
29f9: 48 8d bc 24 c8 00 00 lea 0xc8(%rsp),%rdi
2a00: 00
2a01: e8 fa df ff ff callq a00 <ZSTD_initFseState>
__asm__(".p2align 6");
2a06: 66 66 2e 0f 1f 84 00 data16 nopw %cs:0x0(%rax,%rax,1)
2a0d: 00 00 00 00
2a11: 66 66 2e 0f 1f 84 00 data16 nopw %cs:0x0(%rax,%rax,1)
2a18: 00 00 00 00
2a1c: 66 66 2e 0f 1f 84 00 data16 nopw %cs:0x0(%rax,%rax,1)
2a23: 00 00 00 00
2a27: 66 66 2e 0f 1f 84 00 data16 nopw %cs:0x0(%rax,%rax,1)
2a2e: 00 00 00 00
2a32: 66 66 2e 0f 1f 84 00 data16 nopw %cs:0x0(%rax,%rax,1)
2a39: 00 00 00 00
2a3d: 0f 1f 00 nopl (%rax)
__asm__("nop");
2a40: 90 nop
__asm__(".p2align 5");
2a41: 66 66 2e 0f 1f 84 00 data16 nopw %cs:0x0(%rax,%rax,1)
2a48: 00 00 00 00
2a4c: 66 66 2e 0f 1f 84 00 data16 nopw %cs:0x0(%rax,%rax,1)
2a53: 00 00 00 00
2a57: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1)
2a5e: 00 00
__asm__("nop");
2a60: 90 nop
__asm__(".p2align 3");
2a61: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
BYTE* const oend_w = oend - WILDCOPY_OVERLENGTH; /* risk : address space underflow on oend=NULL */
2a68: 48 8b 44 24 20 mov 0x20(%rsp),%rax
return ZSTD_execSequenceEnd(op, oend, sequence, litPtr, litLimit, prefixStart, virtualStart, dictEnd);
2a6d: 48 8d 7c 24 58 lea 0x58(%rsp),%rdi
*ip += dec32table[offset];
2a72: 4c 89 7c 24 48 mov %r15,0x48(%rsp)
return ZSTD_execSequenceEnd(op, oend, sequence, litPtr, litLimit, prefixStart, virtualStart, dictEnd);
2a77: 48 89 7c 24 40 mov %rdi,0x40(%rsp)
BYTE* op = ostart;
2a7c: 48 8b 5c 24 10 mov 0x10(%rsp),%rbx
BYTE* const oend_w = oend - WILDCOPY_OVERLENGTH; /* risk : address space underflow on oend=NULL */
2a81: 48 83 e8 20 sub $0x20,%rax
2a85: 48 89 44 24 28 mov %rax,0x28(%rsp)
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
2a8a: 8b 84 24 88 00 00 00 mov 0x88(%rsp),%eax
2a91: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
ZSTD_seqSymbol const llDInfo = seqState->stateLL.table[seqState->stateLL.state];
2a98: 48 8b 8c 24 a8 00 00 mov 0xa8(%rsp),%rcx
2a9f: 00
2aa0: 48 8b 94 24 b0 00 00 mov 0xb0(%rsp),%rdx
2aa7: 00
ZSTD_seqSymbol const mlDInfo = seqState->stateML.table[seqState->stateML.state];
2aa8: 48 8b b4 24 c8 00 00 mov 0xc8(%rsp),%rsi
2aaf: 00
seqState->prevOffset[1] = seqState->prevOffset[0];
2ab0: 48 8b ac 24 d8 00 00 mov 0xd8(%rsp),%rbp
2ab7: 00
ZSTD_seqSymbol const llDInfo = seqState->stateLL.table[seqState->stateLL.state];
2ab8: 4c 8d 0c ca lea (%rdx,%rcx,8),%r9
ZSTD_seqSymbol const mlDInfo = seqState->stateML.table[seqState->stateML.state];
2abc: 48 8b 8c 24 d0 00 00 mov 0xd0(%rsp),%rcx
2ac3: 00
ZSTD_seqSymbol const llDInfo = seqState->stateLL.table[seqState->stateLL.state];
2ac4: 45 0f b6 59 02 movzbl 0x2(%r9),%r11d
2ac9: 41 8b 51 04 mov 0x4(%r9),%edx
ZSTD_seqSymbol const mlDInfo = seqState->stateML.table[seqState->stateML.state];
2acd: 4c 8d 04 f1 lea (%rcx,%rsi,8),%r8
ZSTD_seqSymbol const ofDInfo = seqState->stateOffb.table[seqState->stateOffb.state];
2ad1: 48 8b b4 24 b8 00 00 mov 0xb8(%rsp),%rsi
2ad8: 00
2ad9: 48 8b 8c 24 c0 00 00 mov 0xc0(%rsp),%rcx
2ae0: 00
ZSTD_seqSymbol const mlDInfo = seqState->stateML.table[seqState->stateML.state];
2ae1: 45 0f b6 68 02 movzbl 0x2(%r8),%r13d
2ae6: 45 8b 60 04 mov 0x4(%r8),%r12d
ZSTD_seqSymbol const ofDInfo = seqState->stateOffb.table[seqState->stateOffb.state];
2aea: 48 8d 3c f1 lea (%rcx,%rsi,8),%rdi
2aee: 0f b6 77 02 movzbl 0x2(%rdi),%esi
BYTE const totalBits = llBits+mlBits+ofBits;
2af2: 47 8d 34 2b lea (%r11,%r13,1),%r14d
ZSTD_seqSymbol const ofDInfo = seqState->stateOffb.table[seqState->stateOffb.state];
2af6: 44 8b 57 04 mov 0x4(%rdi),%r10d
BYTE const totalBits = llBits+mlBits+ofBits;
2afa: 41 01 f6 add %esi,%r14d
if (ofBits > 1) {
2afd: 40 80 fe 01 cmp $0x1,%sil
2b01: 0f 86 61 02 00 00 jbe 2d68 <ZSTD_decompressSequences_default.constprop.0+0x588>
2b07: 4c 8b bc 24 80 00 00 mov 0x80(%rsp),%r15
2b0e: 00
2b0f: 89 c1 mov %eax,%ecx
bitD->bitsConsumed += nbBits;
2b11: 01 f0 add %esi,%eax
2b13: 89 84 24 88 00 00 00 mov %eax,0x88(%rsp)
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
2b1a: 49 d3 e7 shl %cl,%r15
2b1d: 89 f1 mov %esi,%ecx
2b1f: f7 d9 neg %ecx
2b21: 49 d3 ef shr %cl,%r15
seqState->prevOffset[2] = seqState->prevOffset[1];
2b24: 48 8b 8c 24 e0 00 00 mov 0xe0(%rsp),%rcx
2b2b: 00
seqState->prevOffset[1] = seqState->prevOffset[0];
2b2c: 48 89 ac 24 e0 00 00 mov %rbp,0xe0(%rsp)
2b33: 00
offset = ofBase + BIT_readBitsFast(&seqState->DStream, ofBits/*>0*/); /* <= (ZSTD_WINDOWLOG_MAX-1) bits */
2b34: 4d 01 d7 add %r10,%r15
seqState->prevOffset[2] = seqState->prevOffset[1];
2b37: 48 89 8c 24 e8 00 00 mov %rcx,0xe8(%rsp)
2b3e: 00
seqState->prevOffset[0] = offset;
2b3f: 4c 89 fd mov %r15,%rbp
2b42: 4c 89 bc 24 d8 00 00 mov %r15,0xd8(%rsp)
2b49: 00
if (mlBits > 0)
2b4a: 45 84 ed test %r13b,%r13b
2b4d: 0f 85 4d 02 00 00 jne 2da0 <ZSTD_decompressSequences_default.constprop.0+0x5c0>
if (MEM_64bits() && UNLIKELY(totalBits >= STREAM_ACCUMULATOR_MIN_64-(LLFSELog+MLFSELog+OffFSELog)))
2b53: 41 80 fe 1e cmp $0x1e,%r14b
2b57: 0f 87 6f 02 00 00 ja 2dcc <ZSTD_decompressSequences_default.constprop.0+0x5ec>
2b5d: 48 8b b4 24 80 00 00 mov 0x80(%rsp),%rsi
2b64: 00
if (llBits > 0)
2b65: 45 84 db test %r11b,%r11b
2b68: 0f 85 d2 02 00 00 jne 2e40 <ZSTD_decompressSequences_default.constprop.0+0x660>
U32 const nbBits = DInfo.nbBits;
2b6e: 45 0f b6 51 03 movzbl 0x3(%r9),%r10d
return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
2b73: 49 89 f7 mov %rsi,%r15
DStatePtr->state = DInfo.nextState + lowBits;
2b76: 45 0f b7 09 movzwl (%r9),%r9d
size_t const sequenceLength = sequence.litLength + sequence.matchLength;
2b7a: 4e 8d 2c 22 lea (%rdx,%r12,1),%r13
2b7e: 4c 8d 1d 00 00 00 00 lea 0x0(%rip),%r11 # 2b85 <ZSTD_decompressSequences_default.constprop.0+0x3a5>
BYTE* const oMatchEnd = op + sequenceLength; /* risk : address space overflow (32-bits) */
2b85: 4e 8d 34 2b lea (%rbx,%r13,1),%r14
return BIT_getMiddleBits(bitD->bitContainer, (sizeof(bitD->bitContainer)*8) - bitD->bitsConsumed - nbBits, nbBits);
2b89: 44 01 d0 add %r10d,%eax
return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
2b8c: 89 c1 mov %eax,%ecx
2b8e: f7 d9 neg %ecx
2b90: 49 d3 ef shr %cl,%r15
2b93: 4c 89 f9 mov %r15,%rcx
2b96: 43 23 0c 93 and (%r11,%r10,4),%ecx
2b9a: 49 89 f2 mov %rsi,%r10
DStatePtr->state = DInfo.nextState + lowBits;
2b9d: 4c 01 c9 add %r9,%rcx
2ba0: 48 89 8c 24 a8 00 00 mov %rcx,0xa8(%rsp)
2ba7: 00
U32 const nbBits = DInfo.nbBits;
2ba8: 45 0f b6 48 03 movzbl 0x3(%r8),%r9d
DStatePtr->state = DInfo.nextState + lowBits;
2bad: 45 0f b7 00 movzwl (%r8),%r8d
return BIT_getMiddleBits(bitD->bitContainer, (sizeof(bitD->bitContainer)*8) - bitD->bitsConsumed - nbBits, nbBits);
2bb1: 44 01 c8 add %r9d,%eax
return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
2bb4: 89 c1 mov %eax,%ecx
2bb6: f7 d9 neg %ecx
2bb8: 49 d3 ea shr %cl,%r10
2bbb: 4c 89 d1 mov %r10,%rcx
2bbe: 43 23 0c 8b and (%r11,%r9,4),%ecx
2bc2: 4c 01 c1 add %r8,%rcx
ZSTD_seqSymbol const DInfo = DStatePtr->table[DStatePtr->state];
2bc5: 44 0f b7 07 movzwl (%rdi),%r8d
DStatePtr->state = DInfo.nextState + lowBits;
2bc9: 48 89 8c 24 c8 00 00 mov %rcx,0xc8(%rsp)
2bd0: 00
U32 const nbBits = DInfo.nbBits;
2bd1: 0f b6 7f 03 movzbl 0x3(%rdi),%edi
return BIT_getMiddleBits(bitD->bitContainer, (sizeof(bitD->bitContainer)*8) - bitD->bitsConsumed - nbBits, nbBits);
2bd5: 01 f8 add %edi,%eax
return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
2bd7: 89 c1 mov %eax,%ecx
bitD->bitsConsumed += nbBits;
2bd9: 89 84 24 88 00 00 00 mov %eax,0x88(%rsp)
return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
2be0: f7 d9 neg %ecx
2be2: 48 d3 ee shr %cl,%rsi
2be5: 48 89 f1 mov %rsi,%rcx
2be8: 41 23 0c bb and (%r11,%rdi,4),%ecx
BYTE* const oLitEnd = op + sequence.litLength;
2bec: 48 8d 3c 13 lea (%rbx,%rdx,1),%rdi
DStatePtr->state = DInfo.nextState + lowBits;
2bf0: 4c 01 c1 add %r8,%rcx
const BYTE* match = oLitEnd - sequence.offset;
2bf3: 48 89 f8 mov %rdi,%rax
DStatePtr->state = DInfo.nextState + lowBits;
2bf6: 48 89 8c 24 b8 00 00 mov %rcx,0xb8(%rsp)
2bfd: 00
const BYTE* const iLitEnd = *litPtr + sequence.litLength;
2bfe: 48 8b 4c 24 58 mov 0x58(%rsp),%rcx
const BYTE* match = oLitEnd - sequence.offset;
2c03: 48 29 e8 sub %rbp,%rax
const BYTE* const iLitEnd = *litPtr + sequence.litLength;
2c06: 48 8d 34 11 lea (%rcx,%rdx,1),%rsi
if (UNLIKELY(
2c0a: 48 39 74 24 08 cmp %rsi,0x8(%rsp)
2c0f: 0f 82 8b 02 00 00 jb 2ea0 <ZSTD_decompressSequences_default.constprop.0+0x6c0>
2c15: 4c 3b 74 24 28 cmp 0x28(%rsp),%r14
2c1a: 0f 87 80 02 00 00 ja 2ea0 <ZSTD_decompressSequences_default.constprop.0+0x6c0>
ZSTD_memcpy(dst, src, 16);
2c20: f3 0f 6f 19 movdqu (%rcx),%xmm3
2c24: 0f 11 1b movups %xmm3,(%rbx)
if (UNLIKELY(sequence.litLength > 16)) {
2c27: 48 83 fa 10 cmp $0x10,%rdx
2c2b: 0f 87 c7 02 00 00 ja 2ef8 <ZSTD_decompressSequences_default.constprop.0+0x718>
if (sequence.offset > (size_t)(oLitEnd - prefixStart)) {
2c31: 48 89 fa mov %rdi,%rdx
2c34: 48 2b 14 24 sub (%rsp),%rdx
*litPtr = iLitEnd; /* update for next sequence */
2c38: 48 89 74 24 58 mov %rsi,0x58(%rsp)
if (sequence.offset > (size_t)(oLitEnd - prefixStart)) {
2c3d: 48 39 d5 cmp %rdx,%rbp
2c40: 76 49 jbe 2c8b <ZSTD_decompressSequences_default.constprop.0+0x4ab>
RETURN_ERROR_IF(UNLIKELY(sequence.offset > (size_t)(oLitEnd - virtualStart)), corruption_detected, "");
2c42: 48 89 fa mov %rdi,%rdx
2c45: 48 2b 54 24 30 sub 0x30(%rsp),%rdx
2c4a: 48 39 d5 cmp %rdx,%rbp
2c4d: 0f 87 95 fc ff ff ja 28e8 <ZSTD_decompressSequences_default.constprop.0+0x108>
match = dictEnd + (match - prefixStart);
2c53: 48 8b 4c 24 38 mov 0x38(%rsp),%rcx
2c58: 48 89 c6 mov %rax,%rsi
2c5b: 48 2b 34 24 sub (%rsp),%rsi
2c5f: 48 01 ce add %rcx,%rsi
if (match + sequence.matchLength <= dictEnd) {
2c62: 4a 8d 14 26 lea (%rsi,%r12,1),%rdx
2c66: 48 39 d1 cmp %rdx,%rcx
2c69: 0f 83 21 02 00 00 jae 2e90 <ZSTD_decompressSequences_default.constprop.0+0x6b0>
{ size_t const length1 = dictEnd - match;
2c6f: 4c 8b 3c 24 mov (%rsp),%r15
2c73: 49 29 c7 sub %rax,%r15
ZSTD_memmove(oLitEnd, match, length1);
2c76: 4c 89 fa mov %r15,%rdx
sequence.matchLength -= length1;
2c79: 4d 29 fc sub %r15,%r12
ZSTD_memmove(oLitEnd, match, length1);
2c7c: e8 00 00 00 00 callq 2c81 <ZSTD_decompressSequences_default.constprop.0+0x4a1>
2c81: 48 89 c7 mov %rax,%rdi
match = prefixStart;
2c84: 48 8b 04 24 mov (%rsp),%rax
op = oLitEnd + length1;
2c88: 4c 01 ff add %r15,%rdi
if (LIKELY(sequence.offset >= WILDCOPY_VECLEN)) {
2c8b: 48 83 fd 0f cmp $0xf,%rbp
2c8f: 0f 86 b3 02 00 00 jbe 2f48 <ZSTD_decompressSequences_default.constprop.0+0x768>
2c95: f3 0f 6f 20 movdqu (%rax),%xmm4
2c99: 0f 11 27 movups %xmm4,(%rdi)
if (16 >= length) return;
2c9c: 49 83 fc 10 cmp $0x10,%r12
2ca0: 7e 2c jle 2cce <ZSTD_decompressSequences_default.constprop.0+0x4ee>
op += 16;
2ca2: 48 83 c7 10 add $0x10,%rdi
ip += 16;
2ca6: 48 83 c0 10 add $0x10,%rax
2caa: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1)
ZSTD_memcpy(dst, src, 16);
2cb0: f3 0f 6f 08 movdqu (%rax),%xmm1
2cb4: 48 83 c7 20 add $0x20,%rdi
2cb8: 48 83 c0 20 add $0x20,%rax
2cbc: 0f 11 4f e0 movups %xmm1,-0x20(%rdi)
2cc0: f3 0f 6f 50 f0 movdqu -0x10(%rax),%xmm2
2cc5: 0f 11 57 f0 movups %xmm2,-0x10(%rdi)
while (op < oend);
2cc9: 49 39 fe cmp %rdi,%r14
2ccc: 77 e2 ja 2cb0 <ZSTD_decompressSequences_default.constprop.0+0x4d0>
if (UNLIKELY(ZSTD_isError(oneSeqSize)))
2cce: 49 83 fd 88 cmp $0xffffffffffffff88,%r13
2cd2: 0f 87 17 fc ff ff ja 28ef <ZSTD_decompressSequences_default.constprop.0+0x10f>
op += oneSeqSize;
2cd8: 4c 01 eb add %r13,%rbx
if (UNLIKELY(!--nbSeq))
2cdb: 83 6c 24 1c 01 subl $0x1,0x1c(%rsp)
if (bitD->bitsConsumed > (sizeof(bitD->bitContainer)*8)) /* overflow detected, like end of stream */
2ce0: 8b 84 24 88 00 00 00 mov 0x88(%rsp),%eax
2ce7: 0f 84 33 03 00 00 je 3020 <ZSTD_decompressSequences_default.constprop.0+0x840>
2ced: 83 f8 40 cmp $0x40,%eax
2cf0: 0f 87 a2 fd ff ff ja 2a98 <ZSTD_decompressSequences_default.constprop.0+0x2b8>
if (bitD->ptr >= bitD->limitPtr) {
2cf6: 48 8b 94 24 90 00 00 mov 0x90(%rsp),%rdx
2cfd: 00
2cfe: 48 3b 94 24 a0 00 00 cmp 0xa0(%rsp),%rdx
2d05: 00
2d06: 0f 83 54 01 00 00 jae 2e60 <ZSTD_decompressSequences_default.constprop.0+0x680>
if (bitD->ptr == bitD->start) {
2d0c: 48 8b bc 24 98 00 00 mov 0x98(%rsp),%rdi
2d13: 00
2d14: 48 39 fa cmp %rdi,%rdx
2d17: 0f 84 7b fd ff ff je 2a98 <ZSTD_decompressSequences_default.constprop.0+0x2b8>
{ U32 nbBytes = bitD->bitsConsumed >> 3;
2d1d: 89 c1 mov %eax,%ecx
if (bitD->ptr - nbBytes < bitD->start) {
2d1f: 48 89 d6 mov %rdx,%rsi
{ U32 nbBytes = bitD->bitsConsumed >> 3;
2d22: c1 e9 03 shr $0x3,%ecx
if (bitD->ptr - nbBytes < bitD->start) {
2d25: 41 89 c8 mov %ecx,%r8d
2d28: 4c 29 c6 sub %r8,%rsi
2d2b: 48 39 f7 cmp %rsi,%rdi
2d2e: 76 10 jbe 2d40 <ZSTD_decompressSequences_default.constprop.0+0x560>
nbBytes = (U32)(bitD->ptr - bitD->start); /* ptr > start */
2d30: 48 89 d6 mov %rdx,%rsi
2d33: 48 29 fe sub %rdi,%rsi
bitD->ptr -= nbBytes;
2d36: 89 f7 mov %esi,%edi
nbBytes = (U32)(bitD->ptr - bitD->start); /* ptr > start */
2d38: 89 f1 mov %esi,%ecx
bitD->ptr -= nbBytes;
2d3a: 48 29 fa sub %rdi,%rdx
2d3d: 48 89 d6 mov %rdx,%rsi
bitD->bitContainer = MEM_readLEST(bitD->ptr); /* reminder : srcSize > sizeof(bitD->bitContainer), otherwise bitD->ptr == bitD->start */
2d40: 48 8b 16 mov (%rsi),%rdx
bitD->bitsConsumed -= nbBytes*8;
2d43: c1 e1 03 shl $0x3,%ecx
bitD->ptr -= nbBytes;
2d46: 48 89 b4 24 90 00 00 mov %rsi,0x90(%rsp)
2d4d: 00
bitD->bitsConsumed -= nbBytes*8;
2d4e: 29 c8 sub %ecx,%eax
2d50: 89 84 24 88 00 00 00 mov %eax,0x88(%rsp)
bitD->bitContainer = MEM_readLEST(bitD->ptr); /* reminder : srcSize > sizeof(bitD->bitContainer), otherwise bitD->ptr == bitD->start */
2d57: 48 89 94 24 80 00 00 mov %rdx,0x80(%rsp)
2d5e: 00
return result;
2d5f: e9 34 fd ff ff jmpq 2a98 <ZSTD_decompressSequences_default.constprop.0+0x2b8>
2d64: 0f 1f 40 00 nopl 0x0(%rax)
if (LIKELY((ofBits == 0))) {
2d68: 0f 84 32 03 00 00 je 30a0 <ZSTD_decompressSequences_default.constprop.0+0x8c0>
if (LIKELY(!ll0))
2d6e: 85 d2 test %edx,%edx
2d70: 0f 85 d4 fd ff ff jne 2b4a <ZSTD_decompressSequences_default.constprop.0+0x36a>
offset = seqState->prevOffset[1];
2d76: 48 8b 8c 24 e0 00 00 mov 0xe0(%rsp),%rcx
2d7d: 00
seqState->prevOffset[1] = seqState->prevOffset[0];
2d7e: 48 89 ac 24 e0 00 00 mov %rbp,0xe0(%rsp)
2d85: 00
seqState->prevOffset[0] = offset;
2d86: 48 89 8c 24 d8 00 00 mov %rcx,0xd8(%rsp)
2d8d: 00
offset = seqState->prevOffset[1];
2d8e: 48 89 cd mov %rcx,%rbp
2d91: e9 b4 fd ff ff jmpq 2b4a <ZSTD_decompressSequences_default.constprop.0+0x36a>
2d96: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1)
2d9d: 00 00 00
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
2da0: 48 8b b4 24 80 00 00 mov 0x80(%rsp),%rsi
2da7: 00
2da8: 89 c1 mov %eax,%ecx
bitD->bitsConsumed += nbBits;
2daa: 44 01 e8 add %r13d,%eax
2dad: 89 84 24 88 00 00 00 mov %eax,0x88(%rsp)
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
2db4: 48 d3 e6 shl %cl,%rsi
2db7: 44 89 e9 mov %r13d,%ecx
2dba: f7 d9 neg %ecx
2dbc: 48 d3 ee shr %cl,%rsi
seq.matchLength += BIT_readBitsFast(&seqState->DStream, mlBits/*>0*/);
2dbf: 49 01 f4 add %rsi,%r12
if (MEM_64bits() && UNLIKELY(totalBits >= STREAM_ACCUMULATOR_MIN_64-(LLFSELog+MLFSELog+OffFSELog)))
2dc2: 41 80 fe 1e cmp $0x1e,%r14b
2dc6: 0f 86 91 fd ff ff jbe 2b5d <ZSTD_decompressSequences_default.constprop.0+0x37d>
if (bitD->bitsConsumed > (sizeof(bitD->bitContainer)*8)) /* overflow detected, like end of stream */
2dcc: 83 f8 40 cmp $0x40,%eax
2dcf: 0f 87 88 fd ff ff ja 2b5d <ZSTD_decompressSequences_default.constprop.0+0x37d>
if (bitD->ptr >= bitD->limitPtr) {
2dd5: 48 8b 8c 24 90 00 00 mov 0x90(%rsp),%rcx
2ddc: 00
2ddd: 48 3b 8c 24 a0 00 00 cmp 0xa0(%rsp),%rcx
2de4: 00
2de5: 0f 83 a2 03 00 00 jae 318d <ZSTD_decompressSequences_default.constprop.0+0x9ad>
if (bitD->ptr == bitD->start) {
2deb: 4c 8b ac 24 98 00 00 mov 0x98(%rsp),%r13
2df2: 00
2df3: 4c 39 e9 cmp %r13,%rcx
2df6: 0f 84 61 fd ff ff je 2b5d <ZSTD_decompressSequences_default.constprop.0+0x37d>
{ U32 nbBytes = bitD->bitsConsumed >> 3;
2dfc: 89 c6 mov %eax,%esi
if (bitD->ptr - nbBytes < bitD->start) {
2dfe: 49 89 ca mov %rcx,%r10
{ U32 nbBytes = bitD->bitsConsumed >> 3;
2e01: c1 ee 03 shr $0x3,%esi
if (bitD->ptr - nbBytes < bitD->start) {
2e04: 41 89 f6 mov %esi,%r14d
2e07: 4d 29 f2 sub %r14,%r10
2e0a: 4d 39 d5 cmp %r10,%r13
2e0d: 76 12 jbe 2e21 <ZSTD_decompressSequences_default.constprop.0+0x641>
nbBytes = (U32)(bitD->ptr - bitD->start); /* ptr > start */
2e0f: 49 89 ca mov %rcx,%r10
2e12: 4d 29 ea sub %r13,%r10
bitD->ptr -= nbBytes;
2e15: 45 89 d5 mov %r10d,%r13d
nbBytes = (U32)(bitD->ptr - bitD->start); /* ptr > start */
2e18: 44 89 d6 mov %r10d,%esi
bitD->ptr -= nbBytes;
2e1b: 4c 29 e9 sub %r13,%rcx
2e1e: 49 89 ca mov %rcx,%r10
bitD->bitsConsumed -= nbBytes*8;
2e21: c1 e6 03 shl $0x3,%esi
bitD->ptr -= nbBytes;
2e24: 4c 89 94 24 90 00 00 mov %r10,0x90(%rsp)
2e2b: 00
bitD->bitsConsumed -= nbBytes*8;
2e2c: 29 f0 sub %esi,%eax
2e2e: 49 8b 32 mov (%r10),%rsi
bitD->bitContainer = MEM_readLEST(bitD->ptr); /* reminder : srcSize > sizeof(bitD->bitContainer), otherwise bitD->ptr == bitD->start */
2e31: 48 89 b4 24 80 00 00 mov %rsi,0x80(%rsp)
2e38: 00
return result;
2e39: e9 27 fd ff ff jmpq 2b65 <ZSTD_decompressSequences_default.constprop.0+0x385>
2e3e: 66 90 xchg %ax,%ax
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
2e40: 89 c1 mov %eax,%ecx
2e42: 49 89 f2 mov %rsi,%r10
bitD->bitsConsumed += nbBits;
2e45: 44 01 d8 add %r11d,%eax
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
2e48: 49 d3 e2 shl %cl,%r10
2e4b: 44 89 d9 mov %r11d,%ecx
2e4e: f7 d9 neg %ecx
2e50: 49 d3 ea shr %cl,%r10
seq.litLength += BIT_readBitsFast(&seqState->DStream, llBits/*>0*/);
2e53: 4c 01 d2 add %r10,%rdx
2e56: e9 13 fd ff ff jmpq 2b6e <ZSTD_decompressSequences_default.constprop.0+0x38e>
2e5b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)
bitD->ptr -= bitD->bitsConsumed >> 3;
2e60: 89 c1 mov %eax,%ecx
bitD->bitsConsumed &= 7;
2e62: 83 e0 07 and $0x7,%eax
bitD->ptr -= bitD->bitsConsumed >> 3;
2e65: c1 e9 03 shr $0x3,%ecx
bitD->bitsConsumed &= 7;
2e68: 89 84 24 88 00 00 00 mov %eax,0x88(%rsp)
bitD->ptr -= bitD->bitsConsumed >> 3;
2e6f: 48 29 ca sub %rcx,%rdx
2e72: 48 89 94 24 90 00 00 mov %rdx,0x90(%rsp)
2e79: 00
bitD->bitContainer = MEM_readLEST(bitD->ptr);
2e7a: 48 8b 12 mov (%rdx),%rdx
2e7d: 48 89 94 24 80 00 00 mov %rdx,0x80(%rsp)
2e84: 00
return BIT_reloadDStreamFast(bitD);
2e85: e9 0e fc ff ff jmpq 2a98 <ZSTD_decompressSequences_default.constprop.0+0x2b8>
2e8a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1)
ZSTD_memmove(oLitEnd, match, sequence.matchLength);
2e90: 4c 89 e2 mov %r12,%rdx
2e93: e8 00 00 00 00 callq 2e98 <ZSTD_decompressSequences_default.constprop.0+0x6b8>
return sequenceLength;
2e98: e9 31 fe ff ff jmpq 2cce <ZSTD_decompressSequences_default.constprop.0+0x4ee>
2e9d: 0f 1f 00 nopl (%rax)
return ZSTD_execSequenceEnd(op, oend, sequence, litPtr, litLimit, prefixStart, virtualStart, dictEnd);
2ea0: 66 48 0f 6e c2 movq %rdx,%xmm0
2ea5: 66 49 0f 6e fc movq %r12,%xmm7
2eaa: 48 89 6c 24 70 mov %rbp,0x70(%rsp)
2eaf: 48 89 df mov %rbx,%rdi
2eb2: 66 0f 6c c7 punpcklqdq %xmm7,%xmm0
2eb6: 0f 29 44 24 60 movaps %xmm0,0x60(%rsp)
2ebb: ff 74 24 38 pushq 0x38(%rsp)
2ebf: ff 74 24 78 pushq 0x78(%rsp)
2ec3: ff 74 24 78 pushq 0x78(%rsp)
2ec7: ff 74 24 78 pushq 0x78(%rsp)
2ecb: 4c 8b 4c 24 50 mov 0x50(%rsp),%r9
2ed0: 4c 8b 44 24 20 mov 0x20(%rsp),%r8
2ed5: 48 8b 4c 24 28 mov 0x28(%rsp),%rcx
2eda: 48 8b 54 24 60 mov 0x60(%rsp),%rdx
2edf: 48 8b 74 24 40 mov 0x40(%rsp),%rsi
2ee4: e8 d7 d6 ff ff callq 5c0 <ZSTD_execSequenceEnd>
2ee9: 48 83 c4 20 add $0x20,%rsp
2eed: 49 89 c5 mov %rax,%r13
2ef0: e9 d9 fd ff ff jmpq 2cce <ZSTD_decompressSequences_default.constprop.0+0x4ee>
2ef5: 0f 1f 00 nopl (%rax)
ZSTD_memcpy(dst, src, 16);
2ef8: f3 0f 6f 79 10 movdqu 0x10(%rcx),%xmm7
ZSTD_wildcopy(op+16, (*litPtr)+16, sequence.litLength-16, ZSTD_no_overlap);
2efd: 48 83 ea 10 sub $0x10,%rdx
2f01: 0f 11 7b 10 movups %xmm7,0x10(%rbx)
if (16 >= length) return;
2f05: 48 83 fa 10 cmp $0x10,%rdx
2f09: 0f 8e 22 fd ff ff jle 2c31 <ZSTD_decompressSequences_default.constprop.0+0x451>
op += 16;
2f0f: 48 8d 53 20 lea 0x20(%rbx),%rdx
ip += 16;
2f13: 48 83 c1 20 add $0x20,%rcx
2f17: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1)
2f1e: 00 00
ZSTD_memcpy(dst, src, 16);
2f20: f3 0f 6f 29 movdqu (%rcx),%xmm5
2f24: 48 83 c2 20 add $0x20,%rdx
2f28: 48 83 c1 20 add $0x20,%rcx
2f2c: 0f 11 6a e0 movups %xmm5,-0x20(%rdx)
2f30: f3 0f 6f 71 f0 movdqu -0x10(%rcx),%xmm6
2f35: 0f 11 72 f0 movups %xmm6,-0x10(%rdx)
while (op < oend);
2f39: 48 39 d7 cmp %rdx,%rdi
2f3c: 77 e2 ja 2f20 <ZSTD_decompressSequences_default.constprop.0+0x740>
2f3e: e9 ee fc ff ff jmpq 2c31 <ZSTD_decompressSequences_default.constprop.0+0x451>
2f43: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)
if (offset < 8) {
2f48: 48 83 fd 07 cmp $0x7,%rbp
2f4c: 0f 86 e7 01 00 00 jbe 3139 <ZSTD_decompressSequences_default.constprop.0+0x959>
ZSTD_memcpy(dst, src, 8);
2f52: 48 8b 10 mov (%rax),%rdx
2f55: 48 89 17 mov %rdx,(%rdi)
if (sequence.matchLength > 8) {
2f58: 49 83 fc 08 cmp $0x8,%r12
2f5c: 0f 86 6c fd ff ff jbe 2cce <ZSTD_decompressSequences_default.constprop.0+0x4ee>
*op += 8;
2f62: 48 8d 4f 08 lea 0x8(%rdi),%rcx
*ip += 8;
2f66: 48 8d 70 08 lea 0x8(%rax),%rsi
ptrdiff_t diff = (BYTE*)dst - (const BYTE*)src;
2f6a: 48 89 ca mov %rcx,%rdx
2f6d: 48 29 f2 sub %rsi,%rdx
if (ovtype == ZSTD_overlap_src_before_dst && diff < WILDCOPY_VECLEN) {
2f70: 48 83 fa 0f cmp $0xf,%rdx
2f74: 0f 8f 36 02 00 00 jg 31b0 <ZSTD_decompressSequences_default.constprop.0+0x9d0>
2f7a: 49 89 c8 mov %rcx,%r8
2f7d: 49 8d 56 f7 lea -0x9(%r14),%rdx
2f81: 4c 8d 4f 09 lea 0x9(%rdi),%r9
2f85: 49 29 c0 sub %rax,%r8
2f88: 48 29 fa sub %rdi,%rdx
2f8b: 49 83 e8 09 sub $0x9,%r8
2f8f: 49 83 f8 0e cmp $0xe,%r8
2f93: 0f 86 87 01 00 00 jbe 3120 <ZSTD_decompressSequences_default.constprop.0+0x940>
2f99: 48 83 fa 1f cmp $0x1f,%rdx
2f9d: 41 0f 97 c2 seta %r10b
2fa1: 4d 39 f1 cmp %r14,%r9
2fa4: 41 0f 96 c0 setbe %r8b
2fa8: 45 84 c2 test %r8b,%r10b
2fab: 0f 84 6f 01 00 00 je 3120 <ZSTD_decompressSequences_default.constprop.0+0x940>
2fb1: 48 c1 ea 03 shr $0x3,%rdx
2fb5: 4d 39 f1 cmp %r14,%r9
2fb8: 4c 8d 42 01 lea 0x1(%rdx),%r8
2fbc: ba 01 00 00 00 mov $0x1,%edx
2fc1: 4c 0f 47 c2 cmova %rdx,%r8
2fc5: ba 08 00 00 00 mov $0x8,%edx
2fca: 4d 89 c1 mov %r8,%r9
2fcd: 49 d1 e9 shr %r9
2fd0: 49 c1 e1 04 shl $0x4,%r9
2fd4: 49 83 c1 08 add $0x8,%r9
2fd8: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1)
2fdf: 00
ZSTD_memcpy(dst, src, 8);
2fe0: f3 0f 6f 3c 10 movdqu (%rax,%rdx,1),%xmm7
2fe5: 0f 11 3c 17 movups %xmm7,(%rdi,%rdx,1)
} while (op < oend);
2fe9: 48 83 c2 10 add $0x10,%rdx
2fed: 4c 39 ca cmp %r9,%rdx
2ff0: 75 ee jne 2fe0 <ZSTD_decompressSequences_default.constprop.0+0x800>
2ff2: 4c 89 c0 mov %r8,%rax
2ff5: 48 83 e0 fe and $0xfffffffffffffffe,%rax
2ff9: 48 8d 14 c5 00 00 00 lea 0x0(,%rax,8),%rdx
3000: 00
3001: 48 01 d6 add %rdx,%rsi
3004: 48 01 d1 add %rdx,%rcx
3007: 4c 39 c0 cmp %r8,%rax
300a: 0f 84 be fc ff ff je 2cce <ZSTD_decompressSequences_default.constprop.0+0x4ee>
ZSTD_memcpy(dst, src, 8);
3010: 48 8b 06 mov (%rsi),%rax
3013: 48 89 01 mov %rax,(%rcx)
} while (op < oend);
3016: e9 b3 fc ff ff jmpq 2cce <ZSTD_decompressSequences_default.constprop.0+0x4ee>
301b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)
if (bitD->bitsConsumed > (sizeof(bitD->bitContainer)*8)) /* overflow detected, like end of stream */
3020: 4c 8b 7c 24 48 mov 0x48(%rsp),%r15
3025: 83 f8 40 cmp $0x40,%eax
3028: 77 2d ja 3057 <ZSTD_decompressSequences_default.constprop.0+0x877>
if (bitD->ptr >= bitD->limitPtr) {
302a: 48 8b 94 24 90 00 00 mov 0x90(%rsp),%rdx
3031: 00
3032: 48 3b 94 24 a0 00 00 cmp 0xa0(%rsp),%rdx
3039: 00
303a: 0f 83 a8 f8 ff ff jae 28e8 <ZSTD_decompressSequences_default.constprop.0+0x108>
if (bitD->ptr == bitD->start) {
3040: 48 3b 94 24 98 00 00 cmp 0x98(%rsp),%rdx
3047: 00
3048: 0f 85 9a f8 ff ff jne 28e8 <ZSTD_decompressSequences_default.constprop.0+0x108>
if (bitD->bitsConsumed < sizeof(bitD->bitContainer)*8) return BIT_DStream_endOfBuffer;
304e: 83 f8 40 cmp $0x40,%eax
3051: 0f 85 91 f8 ff ff jne 28e8 <ZSTD_decompressSequences_default.constprop.0+0x108>
{ U32 i; for (i=0; i<ZSTD_REP_NUM; i++) dctx->entropy.rep[i] = (U32)(seqState.prevOffset[i]); }
3057: 48 8b 84 24 d8 00 00 mov 0xd8(%rsp),%rax
305e: 00
{ size_t const lastLLSize = litEnd - litPtr;
305f: 48 8b 74 24 58 mov 0x58(%rsp),%rsi
3064: 48 8b 6c 24 08 mov 0x8(%rsp),%rbp
3069: 48 8b 54 24 20 mov 0x20(%rsp),%rdx
{ U32 i; for (i=0; i<ZSTD_REP_NUM; i++) dctx->entropy.rep[i] = (U32)(seqState.prevOffset[i]); }
306e: 41 89 87 3c 68 00 00 mov %eax,0x683c(%r15)
3075: 48 8b 84 24 e0 00 00 mov 0xe0(%rsp),%rax
307c: 00
307d: 41 89 87 40 68 00 00 mov %eax,0x6840(%r15)
3084: 48 8b 84 24 e8 00 00 mov 0xe8(%rsp),%rax
308b: 00
308c: 41 89 87 44 68 00 00 mov %eax,0x6844(%r15)
3093: e9 78 f8 ff ff jmpq 2910 <ZSTD_decompressSequences_default.constprop.0+0x130>
3098: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1)
309f: 00
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
30a0: 48 8b b4 24 80 00 00 mov 0x80(%rsp),%rsi
30a7: 00
30a8: 89 c1 mov %eax,%ecx
bitD->bitsConsumed += nbBits;
30aa: 83 c0 01 add $0x1,%eax
30ad: 89 84 24 88 00 00 00 mov %eax,0x88(%rsp)
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
30b4: 48 d3 e6 shl %cl,%rsi
30b7: 48 89 f1 mov %rsi,%rcx
30ba: 48 c1 e9 3f shr $0x3f,%rcx
offset = ofBase + ll0 + BIT_readBitsFast(&seqState->DStream, 1);
30be: 83 fa 01 cmp $0x1,%edx
30c1: 41 83 d2 00 adc $0x0,%r10d
30c5: 44 89 d6 mov %r10d,%esi
30c8: 48 01 f1 add %rsi,%rcx
{ size_t temp = (offset==3) ? seqState->prevOffset[0] - 1 : seqState->prevOffset[offset];
30cb: 48 83 f9 03 cmp $0x3,%rcx
30cf: 0f 84 a3 00 00 00 je 3178 <ZSTD_decompressSequences_default.constprop.0+0x998>
30d5: 48 8b b4 cc d8 00 00 mov 0xd8(%rsp,%rcx,8),%rsi
30dc: 00
temp += !temp; /* 0 is not valid; input is corrupted; force offset to 1 */
30dd: 48 83 fe 01 cmp $0x1,%rsi
30e1: 48 83 d6 00 adc $0x0,%rsi
if (offset != 1) seqState->prevOffset[2] = seqState->prevOffset[1];
30e5: 48 83 f9 01 cmp $0x1,%rcx
30e9: 74 10 je 30fb <ZSTD_decompressSequences_default.constprop.0+0x91b>
30eb: 48 8b 8c 24 e0 00 00 mov 0xe0(%rsp),%rcx
30f2: 00
30f3: 48 89 8c 24 e8 00 00 mov %rcx,0xe8(%rsp)
30fa: 00
seqState->prevOffset[0] = offset = temp;
30fb: 66 48 0f 6e fd movq %rbp,%xmm7
3100: 66 48 0f 6e c6 movq %rsi,%xmm0
3105: 48 89 f5 mov %rsi,%rbp
3108: 66 0f 6c c7 punpcklqdq %xmm7,%xmm0
310c: 0f 11 84 24 d8 00 00 movups %xmm0,0xd8(%rsp)
3113: 00
3114: e9 31 fa ff ff jmpq 2b4a <ZSTD_decompressSequences_default.constprop.0+0x36a>
3119: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
ZSTD_memcpy(dst, src, 8);
3120: 48 8b 06 mov (%rsi),%rax
COPY8(op, ip)
3123: 48 83 c1 08 add $0x8,%rcx
3127: 48 83 c6 08 add $0x8,%rsi
ZSTD_memcpy(dst, src, 8);
312b: 48 89 41 f8 mov %rax,-0x8(%rcx)
} while (op < oend);
312f: 49 39 ce cmp %rcx,%r14
3132: 77 ec ja 3120 <ZSTD_decompressSequences_default.constprop.0+0x940>
3134: e9 95 fb ff ff jmpq 2cce <ZSTD_decompressSequences_default.constprop.0+0x4ee>
(*op)[0] = (*ip)[0];
3139: 0f b6 10 movzbl (%rax),%edx
313c: 88 17 mov %dl,(%rdi)
(*op)[1] = (*ip)[1];
313e: 0f b6 50 01 movzbl 0x1(%rax),%edx
3142: 88 57 01 mov %dl,0x1(%rdi)
(*op)[2] = (*ip)[2];
3145: 0f b6 50 02 movzbl 0x2(%rax),%edx
3149: 88 57 02 mov %dl,0x2(%rdi)
(*op)[3] = (*ip)[3];
314c: 0f b6 50 03 movzbl 0x3(%rax),%edx
3150: 88 57 03 mov %dl,0x3(%rdi)
*ip += dec32table[offset];
3153: 48 8d 15 00 00 00 00 lea 0x0(%rip),%rdx # 315a <ZSTD_decompressSequences_default.constprop.0+0x97a>
315a: 8b 14 aa mov (%rdx,%rbp,4),%edx
315d: 48 01 d0 add %rdx,%rax
static void ZSTD_copy4(void* dst, const void* src) { ZSTD_memcpy(dst, src, 4); }
3160: 8b 10 mov (%rax),%edx
3162: 89 57 04 mov %edx,0x4(%rdi)
*ip -= sub2;
3165: 48 8d 15 00 00 00 00 lea 0x0(%rip),%rdx # 316c <ZSTD_decompressSequences_default.constprop.0+0x98c>
316c: 48 63 14 aa movslq (%rdx,%rbp,4),%rdx
3170: 48 29 d0 sub %rdx,%rax
3173: e9 e0 fd ff ff jmpq 2f58 <ZSTD_decompressSequences_default.constprop.0+0x778>
temp += !temp; /* 0 is not valid; input is corrupted; force offset to 1 */
3178: 48 89 e9 mov %rbp,%rcx
317b: 31 f6 xor %esi,%esi
317d: 48 83 e9 01 sub $0x1,%rcx
3181: 40 0f 94 c6 sete %sil
3185: 48 01 ce add %rcx,%rsi
if (offset != 1) seqState->prevOffset[2] = seqState->prevOffset[1];
3188: e9 5e ff ff ff jmpq 30eb <ZSTD_decompressSequences_default.constprop.0+0x90b>
bitD->ptr -= bitD->bitsConsumed >> 3;
318d: 89 c6 mov %eax,%esi
bitD->bitsConsumed &= 7;
318f: 83 e0 07 and $0x7,%eax
bitD->ptr -= bitD->bitsConsumed >> 3;
3192: c1 ee 03 shr $0x3,%esi
3195: 48 29 f1 sub %rsi,%rcx
3198: 48 8b 31 mov (%rcx),%rsi
319b: 48 89 8c 24 90 00 00 mov %rcx,0x90(%rsp)
31a2: 00
bitD->bitContainer = MEM_readLEST(bitD->ptr);
31a3: 48 89 b4 24 80 00 00 mov %rsi,0x80(%rsp)
31aa: 00
return BIT_reloadDStreamFast(bitD);
31ab: e9 b5 f9 ff ff jmpq 2b65 <ZSTD_decompressSequences_default.constprop.0+0x385>
ZSTD_memcpy(dst, src, 16);
31b0: f3 0f 6f 40 08 movdqu 0x8(%rax),%xmm0
31b5: 0f 11 47 08 movups %xmm0,0x8(%rdi)
if (16 >= length) return;
31b9: 49 83 fc 18 cmp $0x18,%r12
31bd: 0f 8e 0b fb ff ff jle 2cce <ZSTD_decompressSequences_default.constprop.0+0x4ee>
op += 16;
31c3: 48 83 c7 18 add $0x18,%rdi
ip += 16;
31c7: 48 83 c0 18 add $0x18,%rax
31cb: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)
ZSTD_memcpy(dst, src, 16);
31d0: f3 0f 6f 38 movdqu (%rax),%xmm7
31d4: 48 83 c7 20 add $0x20,%rdi
31d8: 48 83 c0 20 add $0x20,%rax
31dc: 0f 11 7f e0 movups %xmm7,-0x20(%rdi)
31e0: f3 0f 6f 78 f0 movdqu -0x10(%rax),%xmm7
31e5: 0f 11 7f f0 movups %xmm7,-0x10(%rdi)
while (op < oend);
31e9: 49 39 fe cmp %rdi,%r14
31ec: 77 e2 ja 31d0 <ZSTD_decompressSequences_default.constprop.0+0x9f0>
31ee: e9 db fa ff ff jmpq 2cce <ZSTD_decompressSequences_default.constprop.0+0x4ee>
31f3: 66 66 2e 0f 1f 84 00 data16 nopw %cs:0x0(%rax,%rax,1)
31fa: 00 00 00 00
31fe: 66 90 xchg %ax,%ax
0000000000003200 <ZSTD_decompressSequencesLong_bmi2.constprop.0>:
#endif /* ZSTD_FORCE_DECOMPRESS_SEQUENCES_LONG */
#ifndef ZSTD_FORCE_DECOMPRESS_SEQUENCES_SHORT
static TARGET_ATTRIBUTE("bmi2") size_t
ZSTD_decompressSequencesLong_bmi2(ZSTD_DCtx* dctx,
3200: 41 57 push %r15
BYTE* const oend = ostart + maxDstSize;
3202: 48 01 f2 add %rsi,%rdx
ZSTD_decompressSequencesLong_bmi2(ZSTD_DCtx* dctx,
3205: 41 56 push %r14
3207: 41 55 push %r13
3209: 41 54 push %r12
320b: 55 push %rbp
320c: 53 push %rbx
320d: 48 81 ec 38 02 00 00 sub $0x238,%rsp
const BYTE* const litEnd = litPtr + dctx->litSize;
3214: 48 8b 87 c0 75 00 00 mov 0x75c0(%rdi),%rax
ZSTD_decompressSequencesLong_bmi2(ZSTD_DCtx* dctx,
321b: 48 89 74 24 58 mov %rsi,0x58(%rsp)
const BYTE* litPtr = dctx->litPtr;
3220: 48 8b b7 a0 75 00 00 mov 0x75a0(%rdi),%rsi
ZSTD_decompressSequencesLong_bmi2(ZSTD_DCtx* dctx,
3227: 48 89 bc 24 88 00 00 mov %rdi,0x88(%rsp)
322e: 00
const BYTE* const litEnd = litPtr + dctx->litSize;
322f: 48 01 f0 add %rsi,%rax
ZSTD_decompressSequencesLong_bmi2(ZSTD_DCtx* dctx,
3232: 44 89 8c 24 a0 00 00 mov %r9d,0xa0(%rsp)
3239: 00
BYTE* const oend = ostart + maxDstSize;
323a: 48 89 54 24 78 mov %rdx,0x78(%rsp)
const BYTE* litPtr = dctx->litPtr;
323f: 48 89 b4 24 b8 00 00 mov %rsi,0xb8(%rsp)
3246: 00
const BYTE* const litEnd = litPtr + dctx->litSize;
3247: 48 89 44 24 40 mov %rax,0x40(%rsp)
if (nbSeq) {
324c: 45 85 c9 test %r9d,%r9d
324f: 0f 84 cb 00 00 00 je 3320 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x120>
const BYTE* const prefixStart = (const BYTE*) (dctx->prefixStart);
3255: 48 8b 87 c8 74 00 00 mov 0x74c8(%rdi),%rax
dctx->fseEntropy = 1;
325c: c7 87 2c 75 00 00 01 movl $0x1,0x752c(%rdi)
3263: 00 00 00
const BYTE* const prefixStart = (const BYTE*) (dctx->prefixStart);
3266: 48 89 44 24 18 mov %rax,0x18(%rsp)
const BYTE* const dictStart = (const BYTE*) (dctx->virtualStart);
326b: 48 8b 87 d0 74 00 00 mov 0x74d0(%rdi),%rax
3272: 48 89 84 24 90 00 00 mov %rax,0x90(%rsp)
3279: 00
const BYTE* const dictEnd = (const BYTE*) (dctx->dictEnd);
327a: 48 8b 87 d8 74 00 00 mov 0x74d8(%rdi),%rax
3281: 48 89 44 24 28 mov %rax,0x28(%rsp)
{ int i; for (i=0; i<ZSTD_REP_NUM; i++) seqState.prevOffset[i] = dctx->entropy.rep[i]; }
3286: 8b 87 3c 68 00 00 mov 0x683c(%rdi),%eax
328c: 48 89 84 24 58 01 00 mov %rax,0x158(%rsp)
3293: 00
3294: 8b 87 40 68 00 00 mov 0x6840(%rdi),%eax
329a: 48 89 84 24 60 01 00 mov %rax,0x160(%rsp)
32a1: 00
32a2: 8b 87 44 68 00 00 mov 0x6844(%rdi),%eax
32a8: 48 89 84 24 68 01 00 mov %rax,0x168(%rsp)
32af: 00
if (srcSize < 1) { ZSTD_memset(bitD, 0, sizeof(*bitD)); return ERROR(srcSize_wrong); }
32b0: 4d 85 c0 test %r8,%r8
32b3: 74 4b je 3300 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x100>
bitD->limitPtr = bitD->start + sizeof(bitD->bitContainer);
32b5: 48 8d 41 08 lea 0x8(%rcx),%rax
bitD->start = (const char*)srcBuffer;
32b9: 48 89 8c 24 18 01 00 mov %rcx,0x118(%rsp)
32c0: 00
bitD->limitPtr = bitD->start + sizeof(bitD->bitContainer);
32c1: 48 89 84 24 20 01 00 mov %rax,0x120(%rsp)
32c8: 00
{ BYTE const lastByte = ((const BYTE*)srcBuffer)[srcSize-1];
32c9: 42 0f b6 44 01 ff movzbl -0x1(%rcx,%r8,1),%eax
if (srcSize >= sizeof(bitD->bitContainer)) { /* normal case */
32cf: 49 83 f8 07 cmp $0x7,%r8
32d3: 0f 86 87 00 00 00 jbe 3360 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x160>
bitD->ptr = (const char*)srcBuffer + srcSize - sizeof(bitD->bitContainer);
32d9: 4a 8d 54 01 f8 lea -0x8(%rcx,%r8,1),%rdx
32de: 48 89 94 24 10 01 00 mov %rdx,0x110(%rsp)
32e5: 00
bitD->bitContainer = MEM_readLEST(bitD->ptr);
32e6: 48 8b 12 mov (%rdx),%rdx
32e9: 48 89 94 24 00 01 00 mov %rdx,0x100(%rsp)
32f0: 00
bitD->bitsConsumed = lastByte ? 8 - BIT_highbit32(lastByte) : 0; /* ensures bitsConsumed is always set */
32f1: 84 c0 test %al,%al
32f3: 0f 85 2f 04 00 00 jne 3728 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x528>
32f9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
RETURN_ERROR_IF(
3300: 49 c7 c5 ec ff ff ff mov $0xffffffffffffffec,%r13
const void* seqStart, size_t seqSize, int nbSeq,
const ZSTD_longOffset_e isLongOffset,
const int frame)
{
return ZSTD_decompressSequencesLong_body(dctx, dst, maxDstSize, seqStart, seqSize, nbSeq, isLongOffset, frame);
}
3307: 48 81 c4 38 02 00 00 add $0x238,%rsp
330e: 4c 89 e8 mov %r13,%rax
3311: 5b pop %rbx
3312: 5d pop %rbp
3313: 41 5c pop %r12
3315: 41 5d pop %r13
3317: 41 5e pop %r14
3319: 41 5f pop %r15
331b: c3 retq
331c: 0f 1f 40 00 nopl 0x0(%rax)
BYTE* op = ostart;
3320: 4c 8b 54 24 58 mov 0x58(%rsp),%r10
3325: 48 89 c3 mov %rax,%rbx
{ size_t const lastLLSize = litEnd - litPtr;
3328: 48 29 f3 sub %rsi,%rbx
RETURN_ERROR_IF(lastLLSize > (size_t)(oend-op), dstSize_tooSmall, "");
332b: 4c 29 d2 sub %r10,%rdx
332e: 49 c7 c5 ba ff ff ff mov $0xffffffffffffffba,%r13
3335: 48 39 d3 cmp %rdx,%rbx
3338: 77 cd ja 3307 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x107>
if (op != NULL) {
333a: 4d 85 d2 test %r10,%r10
333d: 74 11 je 3350 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x150>
ZSTD_memcpy(op, litPtr, lastLLSize);
333f: 4c 89 d7 mov %r10,%rdi
3342: 48 89 da mov %rbx,%rdx
3345: e8 00 00 00 00 callq 334a <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x14a>
334a: 49 89 c2 mov %rax,%r10
op += lastLLSize;
334d: 49 01 da add %rbx,%r10
return op-ostart;
3350: 4c 2b 54 24 58 sub 0x58(%rsp),%r10
3355: 4d 89 d5 mov %r10,%r13
3358: eb ad jmp 3307 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x107>
335a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1)
bitD->ptr = bitD->start;
3360: 48 8d 3d 00 00 00 00 lea 0x0(%rip),%rdi # 3367 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x167>
bitD->bitContainer = *(const BYTE*)(bitD->start);
3367: 0f b6 11 movzbl (%rcx),%edx
bitD->ptr = bitD->start;
336a: 48 89 8c 24 10 01 00 mov %rcx,0x110(%rsp)
3371: 00
bitD->bitContainer = *(const BYTE*)(bitD->start);
3372: 4a 63 34 87 movslq (%rdi,%r8,4),%rsi
3376: 48 89 94 24 00 01 00 mov %rdx,0x100(%rsp)
337d: 00
switch(srcSize)
337e: 48 01 fe add %rdi,%rsi
3381: ff e6 jmpq *%rsi
case 7: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[6]) << (sizeof(bitD->bitContainer)*8 - 16);
3383: 0f b6 71 06 movzbl 0x6(%rcx),%esi
3387: 48 c1 e6 30 shl $0x30,%rsi
338b: 48 01 f2 add %rsi,%rdx
case 6: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[5]) << (sizeof(bitD->bitContainer)*8 - 24);
338e: 0f b6 71 05 movzbl 0x5(%rcx),%esi
3392: 48 c1 e6 28 shl $0x28,%rsi
3396: 48 01 f2 add %rsi,%rdx
case 5: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[4]) << (sizeof(bitD->bitContainer)*8 - 32);
3399: 0f b6 71 04 movzbl 0x4(%rcx),%esi
339d: 48 c1 e6 20 shl $0x20,%rsi
33a1: 48 01 f2 add %rsi,%rdx
case 4: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[3]) << 24;
33a4: 0f b6 71 03 movzbl 0x3(%rcx),%esi
33a8: 48 c1 e6 18 shl $0x18,%rsi
33ac: 48 01 f2 add %rsi,%rdx
case 3: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[2]) << 16;
33af: 0f b6 71 02 movzbl 0x2(%rcx),%esi
33b3: 48 c1 e6 10 shl $0x10,%rsi
33b7: 48 01 f2 add %rsi,%rdx
case 2: bitD->bitContainer += (size_t)(((const BYTE*)(srcBuffer))[1]) << 8;
33ba: 0f b6 49 01 movzbl 0x1(%rcx),%ecx
33be: 48 c1 e1 08 shl $0x8,%rcx
33c2: 48 01 ca add %rcx,%rdx
33c5: 48 89 94 24 00 01 00 mov %rdx,0x100(%rsp)
33cc: 00
bitD->bitsConsumed = lastByte ? 8 - BIT_highbit32(lastByte) : 0;
33cd: 84 c0 test %al,%al
33cf: 0f 84 2b ff ff ff je 3300 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x100>
bitD->bitsConsumed += (U32)(sizeof(bitD->bitContainer) - srcSize)*8;
33d5: ba 09 00 00 00 mov $0x9,%edx
return __builtin_clz (val) ^ 31;
33da: 0f bd c0 bsr %eax,%eax
bitD->bitsConsumed += (U32)(sizeof(bitD->bitContainer) - srcSize)*8;
33dd: 44 29 c2 sub %r8d,%edx
33e0: c1 e2 03 shl $0x3,%edx
33e3: 29 c2 sub %eax,%edx
33e5: 89 94 24 08 01 00 00 mov %edx,0x108(%rsp)
int const seqAdvance = MIN(nbSeq, ADVANCED_SEQS);
33ec: 8b 9c 24 a0 00 00 00 mov 0xa0(%rsp),%ebx
33f3: b8 08 00 00 00 mov $0x8,%eax
ZSTD_initFseState(&seqState.stateLL, &seqState.DStream, dctx->LLTptr);
33f8: 48 8d b4 24 00 01 00 lea 0x100(%rsp),%rsi
33ff: 00
3400: 48 8d bc 24 28 01 00 lea 0x128(%rsp),%rdi
3407: 00
int const seqAdvance = MIN(nbSeq, ADVANCED_SEQS);
3408: 83 fb 08 cmp $0x8,%ebx
340b: 0f 4e c3 cmovle %ebx,%eax
ZSTD_initFseState(&seqState.stateLL, &seqState.DStream, dctx->LLTptr);
340e: 48 8b 9c 24 88 00 00 mov 0x88(%rsp),%rbx
3415: 00
3416: 48 8b 13 mov (%rbx),%rdx
int const seqAdvance = MIN(nbSeq, ADVANCED_SEQS);
3419: 89 44 24 3c mov %eax,0x3c(%rsp)
ZSTD_initFseState(&seqState.stateLL, &seqState.DStream, dctx->LLTptr);
341d: e8 de d5 ff ff callq a00 <ZSTD_initFseState>
ZSTD_initFseState(&seqState.stateOffb, &seqState.DStream, dctx->OFTptr);
3422: 48 8b 53 10 mov 0x10(%rbx),%rdx
3426: 48 8d bc 24 38 01 00 lea 0x138(%rsp),%rdi
342d: 00
342e: e8 cd d5 ff ff callq a00 <ZSTD_initFseState>
ZSTD_initFseState(&seqState.stateML, &seqState.DStream, dctx->MLTptr);
3433: 48 8b 53 08 mov 0x8(%rbx),%rdx
3437: 48 8d bc 24 48 01 00 lea 0x148(%rsp),%rdi
343e: 00
343f: e8 bc d5 ff ff callq a00 <ZSTD_initFseState>
if (bitD->bitsConsumed > (sizeof(bitD->bitContainer)*8)) /* overflow detected, like end of stream */
3444: 8b 84 24 08 01 00 00 mov 0x108(%rsp),%eax
344b: 89 84 24 a4 00 00 00 mov %eax,0xa4(%rsp)
3452: 83 f8 40 cmp $0x40,%eax
3455: 0f 87 85 0d 00 00 ja 41e0 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xfe0>
size_t prefetchPos = (size_t)(op-prefixStart); /* track position relative to prefixStart */
345b: 48 8b 44 24 58 mov 0x58(%rsp),%rax
3460: 48 2b 44 24 18 sub 0x18(%rsp),%rax
for (seqNb=0; (BIT_reloadDStream(&seqState.DStream) <= BIT_DStream_completed) && (seqNb<seqAdvance); seqNb++) {
3465: 45 31 ff xor %r15d,%r15d
ZSTD_seqSymbol const ofDInfo = seqState->stateOffb.table[seqState->stateOffb.state];
3468: 31 d2 xor %edx,%edx
size_t prefetchPos = (size_t)(op-prefixStart); /* track position relative to prefixStart */
346a: 48 89 44 24 10 mov %rax,0x10(%rsp)
if (bitD->ptr >= bitD->limitPtr) {
346f: 48 8b 84 24 20 01 00 mov 0x120(%rsp),%rax
3476: 00
3477: 48 8b 9c 24 10 01 00 mov 0x110(%rsp),%rbx
347e: 00
return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
347f: 44 89 7c 24 20 mov %r15d,0x20(%rsp)
if (bitD->ptr >= bitD->limitPtr) {
3484: 48 89 44 24 30 mov %rax,0x30(%rsp)
if (bitD->ptr == bitD->start) {
3489: 48 8b 84 24 18 01 00 mov 0x118(%rsp),%rax
3490: 00
3491: 48 89 9c 24 a8 00 00 mov %rbx,0xa8(%rsp)
3498: 00
3499: 4c 8b 84 24 00 01 00 mov 0x100(%rsp),%r8
34a0: 00
34a1: 48 89 84 24 80 00 00 mov %rax,0x80(%rsp)
34a8: 00
ZSTD_seqSymbol const llDInfo = seqState->stateLL.table[seqState->stateLL.state];
34a9: 48 8b 84 24 30 01 00 mov 0x130(%rsp),%rax
34b0: 00
ZSTD_seqSymbol const ofDInfo = seqState->stateOffb.table[seqState->stateOffb.state];
34b1: c6 44 24 50 00 movb $0x0,0x50(%rsp)
ZSTD_seqSymbol const llDInfo = seqState->stateLL.table[seqState->stateLL.state];
34b6: 48 89 44 24 60 mov %rax,0x60(%rsp)
ZSTD_seqSymbol const mlDInfo = seqState->stateML.table[seqState->stateML.state];
34bb: 48 8b 84 24 50 01 00 mov 0x150(%rsp),%rax
34c2: 00
34c3: 48 89 44 24 68 mov %rax,0x68(%rsp)
ZSTD_seqSymbol const ofDInfo = seqState->stateOffb.table[seqState->stateOffb.state];
34c8: 48 8b 84 24 40 01 00 mov 0x140(%rsp),%rax
34cf: 00
34d0: 48 89 44 24 70 mov %rax,0x70(%rsp)
34d5: 48 8d 84 24 70 01 00 lea 0x170(%rsp),%rax
34dc: 00
34dd: 49 89 c5 mov %rax,%r13
34e0: 48 89 84 24 98 00 00 mov %rax,0x98(%rsp)
34e7: 00
34e8: 8b 84 24 a4 00 00 00 mov 0xa4(%rsp),%eax
return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
34ef: 4d 89 ef mov %r13,%r15
34f2: e9 37 01 00 00 jmpq 362e <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x42e>
34f7: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1)
34fe: 00 00
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
3500: c4 42 f9 f7 f0 shlx %rax,%r8,%r14
bitD->bitsConsumed += nbBits;
3505: 01 f8 add %edi,%eax
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
3507: 4c 89 74 24 48 mov %r14,0x48(%rsp)
350c: 41 89 fe mov %edi,%r14d
offset = ofBase + BIT_readBitsFast(&seqState->DStream, ofBits/*>0*/); /* <= (ZSTD_WINDOWLOG_MAX-1) bits */
350f: 8b 7c 24 08 mov 0x8(%rsp),%edi
3513: 41 f7 de neg %r14d
3516: c4 62 8b f7 74 24 48 shrx %r14,0x48(%rsp),%r14
351d: 49 01 fe add %rdi,%r14
seqState->prevOffset[2] = seqState->prevOffset[1];
3520: 48 8b bc 24 60 01 00 mov 0x160(%rsp),%rdi
3527: 00
seqState->prevOffset[1] = seqState->prevOffset[0];
3528: 48 89 b4 24 60 01 00 mov %rsi,0x160(%rsp)
352f: 00
seqState->prevOffset[0] = offset;
3530: 4c 89 b4 24 58 01 00 mov %r14,0x158(%rsp)
3537: 00
3538: 4c 89 f6 mov %r14,%rsi
seqState->prevOffset[2] = seqState->prevOffset[1];
353b: 48 89 bc 24 68 01 00 mov %rdi,0x168(%rsp)
3542: 00
seq.matchLength = mlBase;
3543: 48 89 4c 24 08 mov %rcx,0x8(%rsp)
if (mlBits > 0)
3548: 45 84 e4 test %r12b,%r12b
354b: 0f 85 1f 02 00 00 jne 3770 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x570>
if (MEM_64bits() && UNLIKELY(totalBits >= STREAM_ACCUMULATOR_MIN_64-(LLFSELog+MLFSELog+OffFSELog)))
3551: 41 80 fd 1e cmp $0x1e,%r13b
3555: 0f 87 36 02 00 00 ja 3791 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x591>
if (llBits > 0)
355b: 40 84 ed test %bpl,%bpl
355e: 0f 85 ec 01 00 00 jne 3750 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x550>
U32 const nbBits = DInfo.nbBits;
3564: 41 0f b6 7b 03 movzbl 0x3(%r11),%edi
return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
3569: 4c 8d 35 00 00 00 00 lea 0x0(%rip),%r14 # 3570 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x370>
sequences[seqNb] = sequence;
3570: 66 48 0f 6e c2 movq %rdx,%xmm0
3575: 0f 16 44 24 08 movhps 0x8(%rsp),%xmm0
return BIT_getMiddleBits(bitD->bitContainer, (sizeof(bitD->bitContainer)*8) - bitD->bitsConsumed - nbBits, nbBits);
357a: 01 f8 add %edi,%eax
return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
357c: 89 c1 mov %eax,%ecx
357e: f7 d9 neg %ecx
3580: c4 c2 f3 f7 c8 shrx %rcx,%r8,%rcx
3585: 41 23 0c be and (%r14,%rdi,4),%ecx
DStatePtr->state = DInfo.nextState + lowBits;
3589: 41 0f b7 3b movzwl (%r11),%edi
358d: 48 01 f9 add %rdi,%rcx
3590: 48 89 8c 24 28 01 00 mov %rcx,0x128(%rsp)
3597: 00
U32 const nbBits = DInfo.nbBits;
3598: 41 0f b6 7a 03 movzbl 0x3(%r10),%edi
return BIT_getMiddleBits(bitD->bitContainer, (sizeof(bitD->bitContainer)*8) - bitD->bitsConsumed - nbBits, nbBits);
359d: 01 f8 add %edi,%eax
return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
359f: 89 c1 mov %eax,%ecx
35a1: f7 d9 neg %ecx
35a3: c4 c2 f3 f7 c8 shrx %rcx,%r8,%rcx
35a8: 41 23 0c be and (%r14,%rdi,4),%ecx
DStatePtr->state = DInfo.nextState + lowBits;
35ac: 41 0f b7 3a movzwl (%r10),%edi
35b0: 48 01 f9 add %rdi,%rcx
35b3: 48 89 8c 24 48 01 00 mov %rcx,0x148(%rsp)
35ba: 00
U32 const nbBits = DInfo.nbBits;
35bb: 41 0f b6 49 03 movzbl 0x3(%r9),%ecx
return BIT_getMiddleBits(bitD->bitContainer, (sizeof(bitD->bitContainer)*8) - bitD->bitsConsumed - nbBits, nbBits);
35c0: 01 c8 add %ecx,%eax
return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
35c2: 89 c7 mov %eax,%edi
35c4: f7 df neg %edi
35c6: c4 c2 c3 f7 f8 shrx %rdi,%r8,%rdi
35cb: 41 23 3c 8e and (%r14,%rcx,4),%edi
DStatePtr->state = DInfo.nextState + lowBits;
35cf: 41 0f b7 09 movzwl (%r9),%ecx
35d3: 48 01 cf add %rcx,%rdi
{ const BYTE* const matchBase = (sequence.offset > prefetchPos) ? dictEnd : prefixStart;
35d6: 48 8b 4c 24 18 mov 0x18(%rsp),%rcx
DStatePtr->state = DInfo.nextState + lowBits;
35db: 48 89 bc 24 38 01 00 mov %rdi,0x138(%rsp)
35e2: 00
prefetchPos += sequence.litLength;
35e3: 48 8b 7c 24 10 mov 0x10(%rsp),%rdi
35e8: 48 01 d7 add %rdx,%rdi
{ const BYTE* const matchBase = (sequence.offset > prefetchPos) ? dictEnd : prefixStart;
35eb: ba 01 00 00 00 mov $0x1,%edx
35f0: 48 39 f7 cmp %rsi,%rdi
const BYTE* const match = matchBase + prefetchPos - sequence.offset; /* note : this operation can overflow when seq.offset is really too large, which can only happen when input is corrupted.
35f3: 49 89 f9 mov %rdi,%r9
{ const BYTE* const matchBase = (sequence.offset > prefetchPos) ? dictEnd : prefixStart;
35f6: 48 0f 42 4c 24 28 cmovb 0x28(%rsp),%rcx
if (bitD->bitsConsumed > (sizeof(bitD->bitContainer)*8)) /* overflow detected, like end of stream */
35fc: 49 83 c7 18 add $0x18,%r15
const BYTE* const match = matchBase + prefetchPos - sequence.offset; /* note : this operation can overflow when seq.offset is really too large, which can only happen when input is corrupted.
3600: 49 29 f1 sub %rsi,%r9
return prefetchPos + sequence.matchLength;
3603: 48 03 7c 24 08 add 0x8(%rsp),%rdi
const BYTE* const match = matchBase + prefetchPos - sequence.offset; /* note : this operation can overflow when seq.offset is really too large, which can only happen when input is corrupted.
3608: 4c 01 c9 add %r9,%rcx
PREFETCH_L1(match); PREFETCH_L1(match+CACHELINE_SIZE); /* note : it's safe to invoke PREFETCH() on any memory address, including invalid ones */
360b: 0f 18 09 prefetcht0 (%rcx)
360e: 0f 18 49 40 prefetcht0 0x40(%rcx)
sequences[seqNb] = sequence;
3612: 41 0f 11 47 e8 movups %xmm0,-0x18(%r15)
3617: 49 89 77 f8 mov %rsi,-0x8(%r15)
for (seqNb=0; (BIT_reloadDStream(&seqState.DStream) <= BIT_DStream_completed) && (seqNb<seqAdvance); seqNb++) {
361b: 83 44 24 20 01 addl $0x1,0x20(%rsp)
return prefetchPos + sequence.matchLength;
3620: 48 89 7c 24 10 mov %rdi,0x10(%rsp)
3625: 83 f8 40 cmp $0x40,%eax
3628: 0f 87 12 06 00 00 ja 3c40 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xa40>
if (bitD->ptr >= bitD->limitPtr) {
362e: 48 3b 5c 24 30 cmp 0x30(%rsp),%rbx
3633: 0f 83 af 01 00 00 jae 37e8 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x5e8>
if (bitD->ptr == bitD->start) {
3639: 48 8b bc 24 80 00 00 mov 0x80(%rsp),%rdi
3640: 00
3641: 48 39 fb cmp %rdi,%rbx
3644: 74 37 je 367d <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x47d>
{ U32 nbBytes = bitD->bitsConsumed >> 3;
3646: 89 c2 mov %eax,%edx
if (bitD->ptr - nbBytes < bitD->start) {
3648: 48 89 d9 mov %rbx,%rcx
{ U32 nbBytes = bitD->bitsConsumed >> 3;
364b: c1 ea 03 shr $0x3,%edx
if (bitD->ptr - nbBytes < bitD->start) {
364e: 89 d6 mov %edx,%esi
3650: 48 29 f1 sub %rsi,%rcx
3653: 48 39 cf cmp %rcx,%rdi
3656: 76 10 jbe 3668 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x468>
nbBytes = (U32)(bitD->ptr - bitD->start); /* ptr > start */
3658: 48 89 de mov %rbx,%rsi
365b: 48 29 fe sub %rdi,%rsi
365e: 89 f2 mov %esi,%edx
bitD->ptr -= nbBytes;
3660: 89 f6 mov %esi,%esi
3662: 48 29 f3 sub %rsi,%rbx
3665: 48 89 d9 mov %rbx,%rcx
3668: c6 44 24 50 01 movb $0x1,0x50(%rsp)
bitD->bitsConsumed -= nbBytes*8;
366d: c1 e2 03 shl $0x3,%edx
3670: 4c 8b 01 mov (%rcx),%r8
3673: 48 89 cb mov %rcx,%rbx
3676: 29 d0 sub %edx,%eax
3678: ba 01 00 00 00 mov $0x1,%edx
for (seqNb=0; (BIT_reloadDStream(&seqState.DStream) <= BIT_DStream_completed) && (seqNb<seqAdvance); seqNb++) {
367d: 8b 4c 24 20 mov 0x20(%rsp),%ecx
3681: 39 4c 24 3c cmp %ecx,0x3c(%rsp)
3685: 0f 8e 83 01 00 00 jle 380e <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x60e>
ZSTD_seqSymbol const llDInfo = seqState->stateLL.table[seqState->stateLL.state];
368b: 48 8b 94 24 28 01 00 mov 0x128(%rsp),%rdx
3692: 00
3693: 48 8b 74 24 60 mov 0x60(%rsp),%rsi
ZSTD_seqSymbol const mlDInfo = seqState->stateML.table[seqState->stateML.state];
3698: 48 8b 8c 24 48 01 00 mov 0x148(%rsp),%rcx
369f: 00
ZSTD_seqSymbol const ofDInfo = seqState->stateOffb.table[seqState->stateOffb.state];
36a0: 48 8b 7c 24 70 mov 0x70(%rsp),%rdi
ZSTD_seqSymbol const llDInfo = seqState->stateLL.table[seqState->stateLL.state];
36a5: 4c 8d 1c d6 lea (%rsi,%rdx,8),%r11
ZSTD_seqSymbol const mlDInfo = seqState->stateML.table[seqState->stateML.state];
36a9: 48 8b 74 24 68 mov 0x68(%rsp),%rsi
ZSTD_seqSymbol const llDInfo = seqState->stateLL.table[seqState->stateLL.state];
36ae: 41 0f b6 6b 02 movzbl 0x2(%r11),%ebp
36b3: 41 8b 53 04 mov 0x4(%r11),%edx
ZSTD_seqSymbol const mlDInfo = seqState->stateML.table[seqState->stateML.state];
36b7: 4c 8d 14 ce lea (%rsi,%rcx,8),%r10
ZSTD_seqSymbol const ofDInfo = seqState->stateOffb.table[seqState->stateOffb.state];
36bb: 48 8b b4 24 38 01 00 mov 0x138(%rsp),%rsi
36c2: 00
ZSTD_seqSymbol const mlDInfo = seqState->stateML.table[seqState->stateML.state];
36c3: 45 0f b6 62 02 movzbl 0x2(%r10),%r12d
36c8: 41 8b 4a 04 mov 0x4(%r10),%ecx
ZSTD_seqSymbol const ofDInfo = seqState->stateOffb.table[seqState->stateOffb.state];
36cc: 4c 8d 0c f7 lea (%rdi,%rsi,8),%r9
36d0: 41 8b 71 04 mov 0x4(%r9),%esi
36d4: 41 0f b6 79 02 movzbl 0x2(%r9),%edi
BYTE const totalBits = llBits+mlBits+ofBits;
36d9: 46 8d 6c 25 00 lea 0x0(%rbp,%r12,1),%r13d
ZSTD_seqSymbol const ofDInfo = seqState->stateOffb.table[seqState->stateOffb.state];
36de: 89 74 24 08 mov %esi,0x8(%rsp)
BYTE const totalBits = llBits+mlBits+ofBits;
36e2: 41 01 fd add %edi,%r13d
seqState->prevOffset[1] = seqState->prevOffset[0];
36e5: 48 8b b4 24 58 01 00 mov 0x158(%rsp),%rsi
36ec: 00
if (ofBits > 1) {
36ed: 40 80 ff 01 cmp $0x1,%dil
36f1: 0f 87 09 fe ff ff ja 3500 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x300>
if (LIKELY((ofBits == 0))) {
36f7: 0f 84 4b 09 00 00 je 4048 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xe48>
if (LIKELY(!ll0))
36fd: 85 d2 test %edx,%edx
36ff: 0f 85 3e fe ff ff jne 3543 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x343>
offset = seqState->prevOffset[1];
3705: 48 8b bc 24 60 01 00 mov 0x160(%rsp),%rdi
370c: 00
seqState->prevOffset[1] = seqState->prevOffset[0];
370d: 48 89 b4 24 60 01 00 mov %rsi,0x160(%rsp)
3714: 00
seqState->prevOffset[0] = offset;
3715: 48 89 bc 24 58 01 00 mov %rdi,0x158(%rsp)
371c: 00
offset = seqState->prevOffset[1];
371d: 48 89 fe mov %rdi,%rsi
3720: e9 1e fe ff ff jmpq 3543 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x343>
3725: 0f 1f 00 nopl (%rax)
return __builtin_clz (val) ^ 31;
3728: 0f bd c0 bsr %eax,%eax
bitD->bitsConsumed = lastByte ? 8 - BIT_highbit32(lastByte) : 0; /* ensures bitsConsumed is always set */
372b: ba 08 00 00 00 mov $0x8,%edx
3730: 29 c2 sub %eax,%edx
3732: 89 94 24 08 01 00 00 mov %edx,0x108(%rsp)
RETURN_ERROR_IF(
3739: 49 83 f8 88 cmp $0xffffffffffffff88,%r8
373d: 0f 87 bd fb ff ff ja 3300 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x100>
3743: e9 a4 fc ff ff jmpq 33ec <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x1ec>
3748: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1)
374f: 00
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
3750: 89 ef mov %ebp,%edi
3752: c4 c2 f9 f7 c8 shlx %rax,%r8,%rcx
bitD->bitsConsumed += nbBits;
3757: 01 e8 add %ebp,%eax
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
3759: f7 df neg %edi
375b: c4 e2 c3 f7 c9 shrx %rdi,%rcx,%rcx
seq.litLength += BIT_readBitsFast(&seqState->DStream, llBits/*>0*/);
3760: 48 01 ca add %rcx,%rdx
3763: e9 fc fd ff ff jmpq 3564 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x364>
3768: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1)
376f: 00
3770: 44 89 e7 mov %r12d,%edi
3773: c4 c2 f9 f7 c8 shlx %rax,%r8,%rcx
bitD->bitsConsumed += nbBits;
3778: 44 01 e0 add %r12d,%eax
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
377b: f7 df neg %edi
377d: c4 e2 c3 f7 c9 shrx %rdi,%rcx,%rcx
seq.matchLength += BIT_readBitsFast(&seqState->DStream, mlBits/*>0*/);
3782: 48 01 4c 24 08 add %rcx,0x8(%rsp)
if (MEM_64bits() && UNLIKELY(totalBits >= STREAM_ACCUMULATOR_MIN_64-(LLFSELog+MLFSELog+OffFSELog)))
3787: 41 80 fd 1e cmp $0x1e,%r13b
378b: 0f 86 ca fd ff ff jbe 355b <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x35b>
if (bitD->bitsConsumed > (sizeof(bitD->bitContainer)*8)) /* overflow detected, like end of stream */
3791: 83 f8 40 cmp $0x40,%eax
3794: 0f 87 c1 fd ff ff ja 355b <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x35b>
if (bitD->ptr >= bitD->limitPtr) {
379a: 48 3b 5c 24 30 cmp 0x30(%rsp),%rbx
379f: 0f 83 1b 0a 00 00 jae 41c0 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xfc0>
if (bitD->ptr == bitD->start) {
37a5: 4c 8b b4 24 80 00 00 mov 0x80(%rsp),%r14
37ac: 00
37ad: 4c 39 f3 cmp %r14,%rbx
37b0: 0f 84 a5 fd ff ff je 355b <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x35b>
{ U32 nbBytes = bitD->bitsConsumed >> 3;
37b6: 89 c1 mov %eax,%ecx
if (bitD->ptr - nbBytes < bitD->start) {
37b8: 48 89 df mov %rbx,%rdi
{ U32 nbBytes = bitD->bitsConsumed >> 3;
37bb: c1 e9 03 shr $0x3,%ecx
if (bitD->ptr - nbBytes < bitD->start) {
37be: 41 89 c8 mov %ecx,%r8d
37c1: 4c 29 c7 sub %r8,%rdi
37c4: 4c 39 f7 cmp %r14,%rdi
37c7: 0f 82 1b 0a 00 00 jb 41e8 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xfe8>
37cd: 48 89 fb mov %rdi,%rbx
bitD->bitsConsumed -= nbBytes*8;
37d0: c1 e1 03 shl $0x3,%ecx
37d3: 4c 8b 03 mov (%rbx),%r8
return result;
37d6: c6 44 24 50 01 movb $0x1,0x50(%rsp)
bitD->bitsConsumed -= nbBytes*8;
37db: 29 c8 sub %ecx,%eax
return result;
37dd: e9 79 fd ff ff jmpq 355b <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x35b>
37e2: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1)
bitD->ptr -= bitD->bitsConsumed >> 3;
37e8: 89 c2 mov %eax,%edx
37ea: c6 44 24 50 01 movb $0x1,0x50(%rsp)
for (seqNb=0; (BIT_reloadDStream(&seqState.DStream) <= BIT_DStream_completed) && (seqNb<seqAdvance); seqNb++) {
37ef: 8b 4c 24 20 mov 0x20(%rsp),%ecx
bitD->bitsConsumed &= 7;
37f3: 83 e0 07 and $0x7,%eax
bitD->ptr -= bitD->bitsConsumed >> 3;
37f6: c1 ea 03 shr $0x3,%edx
37f9: 48 29 d3 sub %rdx,%rbx
37fc: ba 01 00 00 00 mov $0x1,%edx
3801: 4c 8b 03 mov (%rbx),%r8
3804: 39 4c 24 3c cmp %ecx,0x3c(%rsp)
3808: 0f 8f 7d fe ff ff jg 368b <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x48b>
380e: 80 7c 24 50 00 cmpb $0x0,0x50(%rsp)
3813: 41 89 cf mov %ecx,%r15d
3816: 0f 84 a3 08 00 00 je 40bf <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xebf>
381c: 4c 89 84 24 00 01 00 mov %r8,0x100(%rsp)
3823: 00
3824: 84 d2 test %dl,%dl
3826: 0f 84 cc 0c 00 00 je 44f8 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x12f8>
382c: 89 84 24 08 01 00 00 mov %eax,0x108(%rsp)
3833: 48 89 9c 24 10 01 00 mov %rbx,0x110(%rsp)
383a: 00
if (bitD->bitsConsumed > (sizeof(bitD->bitContainer)*8)) /* overflow detected, like end of stream */
383b: 83 f8 40 cmp $0x40,%eax
383e: 0f 87 2e 04 00 00 ja 3c72 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xa72>
BYTE* const oend_w = oend - WILDCOPY_OVERLENGTH; /* risk : address space underflow on oend=NULL */
3844: 48 8b 74 24 78 mov 0x78(%rsp),%rsi
for (seqNb=0; (BIT_reloadDStream(&seqState.DStream) <= BIT_DStream_completed) && (seqNb<seqAdvance); seqNb++) {
3849: 4c 8b 54 24 58 mov 0x58(%rsp),%r10
*ip += dec32table[offset];
384e: 44 89 7c 24 08 mov %r15d,0x8(%rsp)
BYTE* const oend_w = oend - WILDCOPY_OVERLENGTH; /* risk : address space underflow on oend=NULL */
3853: 48 83 ee 20 sub $0x20,%rsi
*ip += dec32table[offset];
3857: 4d 89 d6 mov %r10,%r14
BYTE* const oend_w = oend - WILDCOPY_OVERLENGTH; /* risk : address space underflow on oend=NULL */
385a: 48 89 74 24 48 mov %rsi,0x48(%rsp)
if (bitD->ptr >= bitD->limitPtr) {
385f: 48 3b 5c 24 30 cmp 0x30(%rsp),%rbx
3864: 0f 83 a8 03 00 00 jae 3c12 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xa12>
if (bitD->ptr == bitD->start) {
386a: 48 8b 8c 24 18 01 00 mov 0x118(%rsp),%rcx
3871: 00
3872: 49 89 da mov %rbx,%r10
3875: 48 39 d9 cmp %rbx,%rcx
3878: 74 3e je 38b8 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x6b8>
{ U32 nbBytes = bitD->bitsConsumed >> 3;
387a: 89 c2 mov %eax,%edx
387c: c1 ea 03 shr $0x3,%edx
if (bitD->ptr - nbBytes < bitD->start) {
387f: 89 d6 mov %edx,%esi
3881: 49 29 f2 sub %rsi,%r10
3884: 4c 39 d1 cmp %r10,%rcx
3887: 76 10 jbe 3899 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x699>
nbBytes = (U32)(bitD->ptr - bitD->start); /* ptr > start */
3889: 48 89 de mov %rbx,%rsi
388c: 48 29 ce sub %rcx,%rsi
388f: 89 f2 mov %esi,%edx
bitD->ptr -= nbBytes;
3891: 89 f6 mov %esi,%esi
3893: 48 29 f3 sub %rsi,%rbx
3896: 49 89 da mov %rbx,%r10
bitD->bitsConsumed -= nbBytes*8;
3899: c1 e2 03 shl $0x3,%edx
bitD->ptr -= nbBytes;
389c: 4c 89 94 24 10 01 00 mov %r10,0x110(%rsp)
38a3: 00
bitD->bitsConsumed -= nbBytes*8;
38a4: 29 d0 sub %edx,%eax
38a6: 89 84 24 08 01 00 00 mov %eax,0x108(%rsp)
bitD->bitContainer = MEM_readLEST(bitD->ptr); /* reminder : srcSize > sizeof(bitD->bitContainer), otherwise bitD->ptr == bitD->start */
38ad: 49 8b 02 mov (%r10),%rax
38b0: 48 89 84 24 00 01 00 mov %rax,0x100(%rsp)
38b7: 00
for ( ; (BIT_reloadDStream(&(seqState.DStream)) <= BIT_DStream_completed) && (seqNb<nbSeq) ; seqNb++) {
38b8: 8b 5c 24 08 mov 0x8(%rsp),%ebx
38bc: 39 9c 24 a0 00 00 00 cmp %ebx,0xa0(%rsp)
38c3: 0f 8e 38 0a 00 00 jle 4301 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x1101>
ZSTD_seqSymbol const llDInfo = seqState->stateLL.table[seqState->stateLL.state];
38c9: 48 8b 94 24 28 01 00 mov 0x128(%rsp),%rdx
38d0: 00
38d1: 48 8b 84 24 30 01 00 mov 0x130(%rsp),%rax
38d8: 00
ZSTD_seqSymbol const ofDInfo = seqState->stateOffb.table[seqState->stateOffb.state];
38d9: 48 8b 8c 24 38 01 00 mov 0x138(%rsp),%rcx
38e0: 00
seqState->prevOffset[1] = seqState->prevOffset[0];
38e1: 48 8b 9c 24 58 01 00 mov 0x158(%rsp),%rbx
38e8: 00
ZSTD_seqSymbol const llDInfo = seqState->stateLL.table[seqState->stateLL.state];
38e9: 4c 8d 04 d0 lea (%rax,%rdx,8),%r8
ZSTD_seqSymbol const mlDInfo = seqState->stateML.table[seqState->stateML.state];
38ed: 48 8b 94 24 48 01 00 mov 0x148(%rsp),%rdx
38f4: 00
38f5: 48 8b 84 24 50 01 00 mov 0x150(%rsp),%rax
38fc: 00
ZSTD_seqSymbol const llDInfo = seqState->stateLL.table[seqState->stateLL.state];
38fd: 45 0f b6 58 02 movzbl 0x2(%r8),%r11d
3902: 45 8b 78 04 mov 0x4(%r8),%r15d
ZSTD_seqSymbol const mlDInfo = seqState->stateML.table[seqState->stateML.state];
3906: 48 8d 3c d0 lea (%rax,%rdx,8),%rdi
ZSTD_seqSymbol const ofDInfo = seqState->stateOffb.table[seqState->stateOffb.state];
390a: 48 8b 84 24 40 01 00 mov 0x140(%rsp),%rax
3911: 00
ZSTD_seqSymbol const mlDInfo = seqState->stateML.table[seqState->stateML.state];
3912: 0f b6 6f 02 movzbl 0x2(%rdi),%ebp
3916: 8b 57 04 mov 0x4(%rdi),%edx
ZSTD_seqSymbol const ofDInfo = seqState->stateOffb.table[seqState->stateOffb.state];
3919: 48 8d 34 c8 lea (%rax,%rcx,8),%rsi
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
391d: 8b 84 24 08 01 00 00 mov 0x108(%rsp),%eax
3924: 0f b6 4e 02 movzbl 0x2(%rsi),%ecx
BYTE const totalBits = llBits+mlBits+ofBits;
3928: 45 8d 24 2b lea (%r11,%rbp,1),%r12d
ZSTD_seqSymbol const ofDInfo = seqState->stateOffb.table[seqState->stateOffb.state];
392c: 44 8b 4e 04 mov 0x4(%rsi),%r9d
BYTE const totalBits = llBits+mlBits+ofBits;
3930: 41 01 cc add %ecx,%r12d
if (ofBits > 1) {
3933: 80 f9 01 cmp $0x1,%cl
3936: 0f 86 44 05 00 00 jbe 3e80 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xc80>
393c: c4 62 f9 f7 ac 24 00 shlx %rax,0x100(%rsp),%r13
3943: 01 00 00
bitD->bitsConsumed += nbBits;
3946: 01 c8 add %ecx,%eax
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
3948: 4c 89 6c 24 20 mov %r13,0x20(%rsp)
394d: 41 89 cd mov %ecx,%r13d
seqState->prevOffset[2] = seqState->prevOffset[1];
3950: 48 8b 8c 24 60 01 00 mov 0x160(%rsp),%rcx
3957: 00
3958: 41 f7 dd neg %r13d
395b: c4 62 93 f7 6c 24 20 shrx %r13,0x20(%rsp),%r13
offset = ofBase + BIT_readBitsFast(&seqState->DStream, ofBits/*>0*/); /* <= (ZSTD_WINDOWLOG_MAX-1) bits */
3962: 4d 01 cd add %r9,%r13
bitD->bitsConsumed += nbBits;
3965: 89 84 24 08 01 00 00 mov %eax,0x108(%rsp)
seqState->prevOffset[2] = seqState->prevOffset[1];
396c: 48 89 8c 24 68 01 00 mov %rcx,0x168(%rsp)
3973: 00
seqState->prevOffset[0] = offset;
3974: 4c 89 ac 24 58 01 00 mov %r13,0x158(%rsp)
397b: 00
seqState->prevOffset[1] = seqState->prevOffset[0];
397c: 48 89 9c 24 60 01 00 mov %rbx,0x160(%rsp)
3983: 00
seqState->prevOffset[0] = offset;
3984: 4c 89 eb mov %r13,%rbx
seq.matchLength = mlBase;
3987: 48 89 54 24 20 mov %rdx,0x20(%rsp)
if (mlBits > 0)
398c: 40 84 ed test %bpl,%bpl
398f: 0f 85 3b 05 00 00 jne 3ed0 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xcd0>
if (MEM_64bits() && UNLIKELY(totalBits >= STREAM_ACCUMULATOR_MIN_64-(LLFSELog+MLFSELog+OffFSELog)))
3995: 41 80 fc 1e cmp $0x1e,%r12b
3999: 0f 87 5c 05 00 00 ja 3efb <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xcfb>
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
399f: 48 8b 94 24 00 01 00 mov 0x100(%rsp),%rdx
39a6: 00
seq.litLength = llBase;
39a7: 45 89 fa mov %r15d,%r10d
if (llBits > 0)
39aa: 45 84 db test %r11b,%r11b
39ad: 0f 85 fd 04 00 00 jne 3eb0 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xcb0>
U32 const nbBits = DInfo.nbBits;
39b3: 41 0f b6 48 03 movzbl 0x3(%r8),%ecx
return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
39b8: 4c 8d 3d 00 00 00 00 lea 0x0(%rip),%r15 # 39bf <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x7bf>
39bf: 44 8b 64 24 08 mov 0x8(%rsp),%r12d
return BIT_getMiddleBits(bitD->bitContainer, (sizeof(bitD->bitContainer)*8) - bitD->bitsConsumed - nbBits, nbBits);
39c4: 01 c8 add %ecx,%eax
DStatePtr->state = DInfo.nextState + lowBits;
39c6: 41 83 e4 07 and $0x7,%r12d
return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
39ca: 41 89 c1 mov %eax,%r9d
39cd: 41 f7 d9 neg %r9d
39d0: c4 62 b3 f7 ca shrx %r9,%rdx,%r9
39d5: 45 23 0c 8f and (%r15,%rcx,4),%r9d
39d9: 41 0f b7 08 movzwl (%r8),%ecx
39dd: 49 01 c9 add %rcx,%r9
39e0: 4c 89 8c 24 28 01 00 mov %r9,0x128(%rsp)
39e7: 00
U32 const nbBits = DInfo.nbBits;
39e8: 44 0f b6 47 03 movzbl 0x3(%rdi),%r8d
DStatePtr->state = DInfo.nextState + lowBits;
39ed: 0f b7 3f movzwl (%rdi),%edi
return BIT_getMiddleBits(bitD->bitContainer, (sizeof(bitD->bitContainer)*8) - bitD->bitsConsumed - nbBits, nbBits);
39f0: 44 01 c0 add %r8d,%eax
return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
39f3: 89 c1 mov %eax,%ecx
39f5: f7 d9 neg %ecx
39f7: c4 e2 f3 f7 ca shrx %rcx,%rdx,%rcx
39fc: 43 23 0c 87 and (%r15,%r8,4),%ecx
3a00: 48 01 f9 add %rdi,%rcx
3a03: 48 89 8c 24 48 01 00 mov %rcx,0x148(%rsp)
3a0a: 00
ZSTD_seqSymbol const DInfo = DStatePtr->table[DStatePtr->state];
3a0b: 0f b7 0e movzwl (%rsi),%ecx
U32 const nbBits = DInfo.nbBits;
3a0e: 0f b6 76 03 movzbl 0x3(%rsi),%esi
return BIT_getMiddleBits(bitD->bitContainer, (sizeof(bitD->bitContainer)*8) - bitD->bitsConsumed - nbBits, nbBits);
3a12: 01 f0 add %esi,%eax
return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
3a14: 89 c7 mov %eax,%edi
bitD->bitsConsumed += nbBits;
3a16: 89 84 24 08 01 00 00 mov %eax,0x108(%rsp)
DStatePtr->state = DInfo.nextState + lowBits;
3a1d: 0f b7 c1 movzwl %cx,%eax
return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
3a20: f7 df neg %edi
3a22: c4 e2 c3 f7 d2 shrx %rdi,%rdx,%rdx
3a27: 41 23 14 b7 and (%r15,%rsi,4),%edx
3a2b: 48 01 c2 add %rax,%rdx
3a2e: 4b 8d 04 64 lea (%r12,%r12,2),%rax
3a32: 48 c1 e0 03 shl $0x3,%rax
3a36: 48 89 94 24 38 01 00 mov %rdx,0x138(%rsp)
3a3d: 00
size_t const oneSeqSize = ZSTD_execSequence(op, oend, sequences[(seqNb-ADVANCED_SEQS) & STORED_SEQS_MASK], &litPtr, litEnd, prefixStart, dictStart, dictEnd);
3a3e: 48 8b b4 04 70 01 00 mov 0x170(%rsp,%rax,1),%rsi
3a45: 00
3a46: 48 8b 94 04 80 01 00 mov 0x180(%rsp,%rax,1),%rdx
3a4d: 00
3a4e: 4c 8b 84 04 78 01 00 mov 0x178(%rsp,%rax,1),%r8
3a55: 00
3a56: f3 0f 6f ac 04 70 01 movdqu 0x170(%rsp,%rax,1),%xmm5
3a5d: 00 00
3a5f: 49 89 d7 mov %rdx,%r15
BYTE* const oLitEnd = op + sequence.litLength;
3a62: 48 89 94 24 d0 00 00 mov %rdx,0xd0(%rsp)
3a69: 00
3a6a: 49 8d 3c 36 lea (%r14,%rsi,1),%rdi
const BYTE* const iLitEnd = *litPtr + sequence.litLength;
3a6e: 48 8b 94 24 b8 00 00 mov 0xb8(%rsp),%rdx
3a75: 00
size_t const sequenceLength = sequence.litLength + sequence.matchLength;
3a76: 4e 8d 2c 06 lea (%rsi,%r8,1),%r13
const BYTE* match = oLitEnd - sequence.offset;
3a7a: 48 89 f8 mov %rdi,%rax
3a7d: 0f 29 ac 24 c0 00 00 movaps %xmm5,0xc0(%rsp)
3a84: 00
BYTE* const oMatchEnd = op + sequenceLength; /* risk : address space overflow (32-bits) */
3a85: 4b 8d 2c 2e lea (%r14,%r13,1),%rbp
const BYTE* const iLitEnd = *litPtr + sequence.litLength;
3a89: 48 8d 0c 32 lea (%rdx,%rsi,1),%rcx
const BYTE* match = oLitEnd - sequence.offset;
3a8d: 4c 29 f8 sub %r15,%rax
if (UNLIKELY(
3a90: 48 3b 6c 24 48 cmp 0x48(%rsp),%rbp
3a95: 0f 87 f5 04 00 00 ja 3f90 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xd90>
3a9b: 48 39 4c 24 40 cmp %rcx,0x40(%rsp)
3aa0: 0f 82 ea 04 00 00 jb 3f90 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xd90>
ZSTD_memcpy(dst, src, 16);
3aa6: f3 0f 6f 32 movdqu (%rdx),%xmm6
3aaa: 41 0f 11 36 movups %xmm6,(%r14)
if (UNLIKELY(sequence.litLength > 16)) {
3aae: 48 83 fe 10 cmp $0x10,%rsi
3ab2: 0f 87 48 05 00 00 ja 4000 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xe00>
if (sequence.offset > (size_t)(oLitEnd - prefixStart)) {
3ab8: 48 89 fa mov %rdi,%rdx
3abb: 48 2b 54 24 18 sub 0x18(%rsp),%rdx
*litPtr = iLitEnd; /* update for next sequence */
3ac0: 48 89 8c 24 b8 00 00 mov %rcx,0xb8(%rsp)
3ac7: 00
if (sequence.offset > (size_t)(oLitEnd - prefixStart)) {
3ac8: 49 39 d7 cmp %rdx,%r15
3acb: 76 6a jbe 3b37 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x937>
RETURN_ERROR_IF(UNLIKELY(sequence.offset > (size_t)(oLitEnd - virtualStart)), corruption_detected, "");
3acd: 48 89 fa mov %rdi,%rdx
3ad0: 48 2b 94 24 90 00 00 sub 0x90(%rsp),%rdx
3ad7: 00
3ad8: 49 39 d7 cmp %rdx,%r15
3adb: 0f 87 1f f8 ff ff ja 3300 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x100>
match = dictEnd + (match - prefixStart);
3ae1: 48 8b 4c 24 28 mov 0x28(%rsp),%rcx
3ae6: 48 89 c6 mov %rax,%rsi
3ae9: 48 2b 74 24 18 sub 0x18(%rsp),%rsi
3aee: 48 01 ce add %rcx,%rsi
if (match + sequence.matchLength <= dictEnd) {
3af1: 4a 8d 14 06 lea (%rsi,%r8,1),%rdx
3af5: 48 39 d1 cmp %rdx,%rcx
3af8: 0f 83 72 04 00 00 jae 3f70 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xd70>
{ size_t const length1 = dictEnd - match;
3afe: 48 8b 54 24 18 mov 0x18(%rsp),%rdx
3b03: 4c 89 44 24 60 mov %r8,0x60(%rsp)
3b08: 4c 89 54 24 50 mov %r10,0x50(%rsp)
3b0d: 48 29 c2 sub %rax,%rdx
ZSTD_memmove(oLitEnd, match, length1);
3b10: 48 89 54 24 30 mov %rdx,0x30(%rsp)
3b15: e8 00 00 00 00 callq 3b1a <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x91a>
op = oLitEnd + length1;
3b1a: 48 8b 54 24 30 mov 0x30(%rsp),%rdx
sequence.matchLength -= length1;
3b1f: 4c 8b 44 24 60 mov 0x60(%rsp),%r8
ZSTD_memmove(oLitEnd, match, length1);
3b24: 48 89 c7 mov %rax,%rdi
match = prefixStart;
3b27: 4c 8b 54 24 50 mov 0x50(%rsp),%r10
3b2c: 48 8b 44 24 18 mov 0x18(%rsp),%rax
op = oLitEnd + length1;
3b31: 48 01 d7 add %rdx,%rdi
sequence.matchLength -= length1;
3b34: 49 29 d0 sub %rdx,%r8
if (LIKELY(sequence.offset >= WILDCOPY_VECLEN)) {
3b37: 49 83 ff 0f cmp $0xf,%r15
3b3b: 0f 86 9f 05 00 00 jbe 40e0 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xee0>
3b41: f3 0f 6f 38 movdqu (%rax),%xmm7
3b45: 0f 11 3f movups %xmm7,(%rdi)
if (16 >= length) return;
3b48: 49 83 f8 10 cmp $0x10,%r8
3b4c: 7e 30 jle 3b7e <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x97e>
op += 16;
3b4e: 48 83 c7 10 add $0x10,%rdi
ip += 16;
3b52: 48 83 c0 10 add $0x10,%rax
3b56: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1)
3b5d: 00 00 00
ZSTD_memcpy(dst, src, 16);
3b60: f3 0f 6f 08 movdqu (%rax),%xmm1
3b64: 48 83 c7 20 add $0x20,%rdi
3b68: 48 83 c0 20 add $0x20,%rax
3b6c: 0f 11 4f e0 movups %xmm1,-0x20(%rdi)
3b70: f3 0f 6f 50 f0 movdqu -0x10(%rax),%xmm2
3b75: 0f 11 57 f0 movups %xmm2,-0x10(%rdi)
while (op < oend);
3b79: 48 39 fd cmp %rdi,%rbp
3b7c: 77 e2 ja 3b60 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x960>
if (ZSTD_isError(oneSeqSize)) return oneSeqSize;
3b7e: 49 83 fd 88 cmp $0xffffffffffffff88,%r13
3b82: 0f 87 7f f7 ff ff ja 3307 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x107>
prefetchPos += sequence.litLength;
3b88: 48 8b 54 24 10 mov 0x10(%rsp),%rdx
{ const BYTE* const matchBase = (sequence.offset > prefetchPos) ? dictEnd : prefixStart;
3b8d: 48 8b 44 24 18 mov 0x18(%rsp),%rax
sequences[seqNb & STORED_SEQS_MASK] = sequence;
3b92: 66 49 0f 6e c2 movq %r10,%xmm0
3b97: 48 8b b4 24 98 00 00 mov 0x98(%rsp),%rsi
3b9e: 00
3b9f: 0f 16 44 24 20 movhps 0x20(%rsp),%xmm0
prefetchPos += sequence.litLength;
3ba4: 4c 01 d2 add %r10,%rdx
{ const BYTE* const matchBase = (sequence.offset > prefetchPos) ? dictEnd : prefixStart;
3ba7: 48 39 da cmp %rbx,%rdx
const BYTE* const match = matchBase + prefetchPos - sequence.offset; /* note : this operation can overflow when seq.offset is really too large, which can only happen when input is corrupted.
3baa: 48 89 d1 mov %rdx,%rcx
{ const BYTE* const matchBase = (sequence.offset > prefetchPos) ? dictEnd : prefixStart;
3bad: 48 0f 42 44 24 28 cmovb 0x28(%rsp),%rax
op += oneSeqSize;
3bb3: 4d 01 ee add %r13,%r14
const BYTE* const match = matchBase + prefetchPos - sequence.offset; /* note : this operation can overflow when seq.offset is really too large, which can only happen when input is corrupted.
3bb6: 48 29 d9 sub %rbx,%rcx
return prefetchPos + sequence.matchLength;
3bb9: 48 03 54 24 20 add 0x20(%rsp),%rdx
const BYTE* const match = matchBase + prefetchPos - sequence.offset; /* note : this operation can overflow when seq.offset is really too large, which can only happen when input is corrupted.
3bbe: 48 01 c8 add %rcx,%rax
PREFETCH_L1(match); PREFETCH_L1(match+CACHELINE_SIZE); /* note : it's safe to invoke PREFETCH() on any memory address, including invalid ones */
3bc1: 0f 18 08 prefetcht0 (%rax)
3bc4: 0f 18 48 40 prefetcht0 0x40(%rax)
sequences[seqNb & STORED_SEQS_MASK] = sequence;
3bc8: 4b 8d 04 64 lea (%r12,%r12,2),%rax
for ( ; (BIT_reloadDStream(&(seqState.DStream)) <= BIT_DStream_completed) && (seqNb<nbSeq) ; seqNb++) {
3bcc: 83 44 24 08 01 addl $0x1,0x8(%rsp)
sequences[seqNb & STORED_SEQS_MASK] = sequence;
3bd1: 0f 11 04 c6 movups %xmm0,(%rsi,%rax,8)
3bd5: 48 89 9c c4 80 01 00 mov %rbx,0x180(%rsp,%rax,8)
3bdc: 00
if (bitD->bitsConsumed > (sizeof(bitD->bitContainer)*8)) /* overflow detected, like end of stream */
3bdd: 8b 84 24 08 01 00 00 mov 0x108(%rsp),%eax
return prefetchPos + sequence.matchLength;
3be4: 48 89 54 24 10 mov %rdx,0x10(%rsp)
3be9: 83 f8 40 cmp $0x40,%eax
3bec: 0f 87 6e 03 00 00 ja 3f60 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xd60>
if (bitD->ptr >= bitD->limitPtr) {
3bf2: 48 8b b4 24 20 01 00 mov 0x120(%rsp),%rsi
3bf9: 00
3bfa: 48 8b 9c 24 10 01 00 mov 0x110(%rsp),%rbx
3c01: 00
3c02: 48 89 74 24 30 mov %rsi,0x30(%rsp)
3c07: 48 3b 5c 24 30 cmp 0x30(%rsp),%rbx
3c0c: 0f 82 58 fc ff ff jb 386a <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x66a>
bitD->ptr -= bitD->bitsConsumed >> 3;
3c12: 89 c2 mov %eax,%edx
bitD->bitsConsumed &= 7;
3c14: 83 e0 07 and $0x7,%eax
bitD->ptr -= bitD->bitsConsumed >> 3;
3c17: c1 ea 03 shr $0x3,%edx
bitD->bitsConsumed &= 7;
3c1a: 89 84 24 08 01 00 00 mov %eax,0x108(%rsp)
bitD->ptr -= bitD->bitsConsumed >> 3;
3c21: 48 29 d3 sub %rdx,%rbx
bitD->bitContainer = MEM_readLEST(bitD->ptr);
3c24: 48 8b 03 mov (%rbx),%rax
bitD->ptr -= bitD->bitsConsumed >> 3;
3c27: 48 89 9c 24 10 01 00 mov %rbx,0x110(%rsp)
3c2e: 00
3c2f: 49 89 da mov %rbx,%r10
bitD->bitContainer = MEM_readLEST(bitD->ptr);
3c32: 48 89 84 24 00 01 00 mov %rax,0x100(%rsp)
3c39: 00
return BIT_DStream_unfinished;
3c3a: e9 79 fc ff ff jmpq 38b8 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x6b8>
3c3f: 90 nop
3c40: 80 7c 24 50 00 cmpb $0x0,0x50(%rsp)
3c45: 44 8b 7c 24 20 mov 0x20(%rsp),%r15d
3c4a: 0f 84 a0 03 00 00 je 3ff0 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xdf0>
3c50: 4c 89 84 24 00 01 00 mov %r8,0x100(%rsp)
3c57: 00
3c58: 89 84 24 08 01 00 00 mov %eax,0x108(%rsp)
3c5f: 48 89 9c 24 10 01 00 mov %rbx,0x110(%rsp)
3c66: 00
RETURN_ERROR_IF(seqNb<seqAdvance, corruption_detected, "");
3c67: 44 39 7c 24 3c cmp %r15d,0x3c(%rsp)
3c6c: 0f 8f 8e f6 ff ff jg 3300 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x100>
3c72: 4c 8b 54 24 58 mov 0x58(%rsp),%r10
RETURN_ERROR_IF(seqNb<nbSeq, corruption_detected, "");
3c77: 44 39 bc 24 a0 00 00 cmp %r15d,0xa0(%rsp)
3c7e: 00
3c7f: 0f 8f 7b f6 ff ff jg 3300 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x100>
seqNb -= seqAdvance;
3c85: 44 89 fb mov %r15d,%ebx
3c88: 2b 5c 24 3c sub 0x3c(%rsp),%ebx
for ( ; seqNb<nbSeq ; seqNb++) {
3c8c: 39 9c 24 a0 00 00 00 cmp %ebx,0xa0(%rsp)
3c93: 0f 8e 97 01 00 00 jle 3e30 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xc30>
BYTE* const oend_w = oend - WILDCOPY_OVERLENGTH; /* risk : address space underflow on oend=NULL */
3c99: 48 8b 44 24 78 mov 0x78(%rsp),%rax
*ip += dec32table[offset];
3c9e: 4c 8b 74 24 40 mov 0x40(%rsp),%r14
3ca3: 41 89 dd mov %ebx,%r13d
3ca6: 4d 89 d4 mov %r10,%r12
3ca9: 4c 8b 7c 24 18 mov 0x18(%rsp),%r15
BYTE* const oend_w = oend - WILDCOPY_OVERLENGTH; /* risk : address space underflow on oend=NULL */
3cae: 48 83 e8 20 sub $0x20,%rax
3cb2: 48 89 44 24 08 mov %rax,0x8(%rsp)
return ZSTD_execSequenceEnd(op, oend, sequence, litPtr, litLimit, prefixStart, virtualStart, dictEnd);
3cb7: 48 8d 84 24 b8 00 00 lea 0xb8(%rsp),%rax
3cbe: 00
3cbf: 48 89 44 24 30 mov %rax,0x30(%rsp)
3cc4: 0f 1f 40 00 nopl 0x0(%rax)
size_t const oneSeqSize = ZSTD_execSequence(op, oend, sequences[seqNb&STORED_SEQS_MASK], &litPtr, litEnd, prefixStart, dictStart, dictEnd);
3cc8: 44 89 e8 mov %r13d,%eax
const BYTE* const iLitEnd = *litPtr + sequence.litLength;
3ccb: 48 8b b4 24 b8 00 00 mov 0xb8(%rsp),%rsi
3cd2: 00
3cd3: 83 e0 07 and $0x7,%eax
3cd6: 48 8d 04 40 lea (%rax,%rax,2),%rax
3cda: 48 c1 e0 03 shl $0x3,%rax
3cde: 48 8b 94 04 80 01 00 mov 0x180(%rsp,%rax,1),%rdx
3ce5: 00
3ce6: 4c 8b 8c 04 78 01 00 mov 0x178(%rsp,%rax,1),%r9
3ced: 00
3cee: f3 0f 6f ac 04 70 01 movdqu 0x170(%rsp,%rax,1),%xmm5
3cf5: 00 00
3cf7: 48 8b 9c 04 80 01 00 mov 0x180(%rsp,%rax,1),%rbx
3cfe: 00
3cff: 48 89 94 24 f0 00 00 mov %rdx,0xf0(%rsp)
3d06: 00
3d07: 48 8b 94 04 70 01 00 mov 0x170(%rsp,%rax,1),%rdx
3d0e: 00
BYTE* const oLitEnd = op + sequence.litLength;
3d0f: 0f 29 ac 24 e0 00 00 movaps %xmm5,0xe0(%rsp)
3d16: 00
3d17: 49 8d 3c 14 lea (%r12,%rdx,1),%rdi
size_t const sequenceLength = sequence.litLength + sequence.matchLength;
3d1b: 4a 8d 0c 0a lea (%rdx,%r9,1),%rcx
const BYTE* match = oLitEnd - sequence.offset;
3d1f: 48 89 f8 mov %rdi,%rax
const BYTE* const iLitEnd = *litPtr + sequence.litLength;
3d22: 4c 8d 1c 16 lea (%rsi,%rdx,1),%r11
BYTE* const oMatchEnd = op + sequenceLength; /* risk : address space overflow (32-bits) */
3d26: 49 8d 2c 0c lea (%r12,%rcx,1),%rbp
const BYTE* match = oLitEnd - sequence.offset;
3d2a: 48 29 d8 sub %rbx,%rax
if (UNLIKELY(
3d2d: 4d 39 de cmp %r11,%r14
3d30: 0f 82 d6 05 00 00 jb 430c <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x110c>
3d36: 48 3b 6c 24 08 cmp 0x8(%rsp),%rbp
3d3b: 0f 87 cb 05 00 00 ja 430c <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x110c>
ZSTD_memcpy(dst, src, 16);
3d41: f3 0f 6f 3e movdqu (%rsi),%xmm7
3d45: 41 0f 11 3c 24 movups %xmm7,(%r12)
if (UNLIKELY(sequence.litLength > 16)) {
3d4a: 48 83 fa 10 cmp $0x10,%rdx
3d4e: 0f 87 16 06 00 00 ja 436a <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x116a>
if (sequence.offset > (size_t)(oLitEnd - prefixStart)) {
3d54: 48 89 fa mov %rdi,%rdx
*litPtr = iLitEnd; /* update for next sequence */
3d57: 4c 89 9c 24 b8 00 00 mov %r11,0xb8(%rsp)
3d5e: 00
if (sequence.offset > (size_t)(oLitEnd - prefixStart)) {
3d5f: 4c 29 fa sub %r15,%rdx
3d62: 48 39 d3 cmp %rdx,%rbx
3d65: 76 64 jbe 3dcb <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xbcb>
RETURN_ERROR_IF(UNLIKELY(sequence.offset > (size_t)(oLitEnd - virtualStart)), corruption_detected, "");
3d67: 48 89 fa mov %rdi,%rdx
3d6a: 48 2b 94 24 90 00 00 sub 0x90(%rsp),%rdx
3d71: 00
3d72: 48 39 d3 cmp %rdx,%rbx
3d75: 0f 87 85 f5 ff ff ja 3300 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x100>
match = dictEnd + (match - prefixStart);
3d7b: 4c 8b 54 24 28 mov 0x28(%rsp),%r10
3d80: 48 89 c6 mov %rax,%rsi
3d83: 4c 29 fe sub %r15,%rsi
3d86: 4c 01 d6 add %r10,%rsi
if (match + sequence.matchLength <= dictEnd) {
3d89: 4a 8d 14 0e lea (%rsi,%r9,1),%rdx
3d8d: 49 39 d2 cmp %rdx,%r10
3d90: 0f 83 da 04 00 00 jae 4270 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x1070>
{ size_t const length1 = dictEnd - match;
3d96: 4c 89 fa mov %r15,%rdx
3d99: 48 89 4c 24 20 mov %rcx,0x20(%rsp)
3d9e: 48 29 c2 sub %rax,%rdx
3da1: 4c 89 4c 24 18 mov %r9,0x18(%rsp)
ZSTD_memmove(oLitEnd, match, length1);
3da6: 48 89 54 24 10 mov %rdx,0x10(%rsp)
3dab: e8 00 00 00 00 callq 3db0 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xbb0>
op = oLitEnd + length1;
3db0: 48 8b 54 24 10 mov 0x10(%rsp),%rdx
sequence.matchLength -= length1;
3db5: 4c 8b 4c 24 18 mov 0x18(%rsp),%r9
ZSTD_memmove(oLitEnd, match, length1);
3dba: 48 89 c7 mov %rax,%rdi
match = prefixStart;
3dbd: 48 8b 4c 24 20 mov 0x20(%rsp),%rcx
3dc2: 4c 89 f8 mov %r15,%rax
op = oLitEnd + length1;
3dc5: 48 01 d7 add %rdx,%rdi
sequence.matchLength -= length1;
3dc8: 49 29 d1 sub %rdx,%r9
if (LIKELY(sequence.offset >= WILDCOPY_VECLEN)) {
3dcb: 48 83 fb 0f cmp $0xf,%rbx
3dcf: 0f 86 01 06 00 00 jbe 43d6 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x11d6>
3dd5: f3 0f 6f 18 movdqu (%rax),%xmm3
3dd9: 0f 11 1f movups %xmm3,(%rdi)
if (16 >= length) return;
3ddc: 49 83 f9 10 cmp $0x10,%r9
3de0: 7e 2c jle 3e0e <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xc0e>
op += 16;
3de2: 48 83 c7 10 add $0x10,%rdi
ip += 16;
3de6: 48 83 c0 10 add $0x10,%rax
3dea: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1)
ZSTD_memcpy(dst, src, 16);
3df0: f3 0f 6f 18 movdqu (%rax),%xmm3
3df4: 48 83 c7 20 add $0x20,%rdi
3df8: 48 83 c0 20 add $0x20,%rax
3dfc: 0f 11 5f e0 movups %xmm3,-0x20(%rdi)
3e00: f3 0f 6f 60 f0 movdqu -0x10(%rax),%xmm4
3e05: 0f 11 67 f0 movups %xmm4,-0x10(%rdi)
while (op < oend);
3e09: 48 39 fd cmp %rdi,%rbp
3e0c: 77 e2 ja 3df0 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xbf0>
if (ZSTD_isError(oneSeqSize)) return oneSeqSize;
3e0e: 48 83 f9 88 cmp $0xffffffffffffff88,%rcx
3e12: 0f 87 d8 06 00 00 ja 44f0 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x12f0>
op += oneSeqSize;
3e18: 49 01 cc add %rcx,%r12
for ( ; seqNb<nbSeq ; seqNb++) {
3e1b: 41 83 c5 01 add $0x1,%r13d
3e1f: 44 39 ac 24 a0 00 00 cmp %r13d,0xa0(%rsp)
3e26: 00
3e27: 0f 85 9b fe ff ff jne 3cc8 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xac8>
3e2d: 4d 89 e2 mov %r12,%r10
{ U32 i; for (i=0; i<ZSTD_REP_NUM; i++) dctx->entropy.rep[i] = (U32)(seqState.prevOffset[i]); }
3e30: 48 8b 9c 24 88 00 00 mov 0x88(%rsp),%rbx
3e37: 00
3e38: 48 8b 84 24 58 01 00 mov 0x158(%rsp),%rax
3e3f: 00
{ size_t const lastLLSize = litEnd - litPtr;
3e40: 48 8b b4 24 b8 00 00 mov 0xb8(%rsp),%rsi
3e47: 00
3e48: 48 8b 54 24 78 mov 0x78(%rsp),%rdx
{ U32 i; for (i=0; i<ZSTD_REP_NUM; i++) dctx->entropy.rep[i] = (U32)(seqState.prevOffset[i]); }
3e4d: 89 83 3c 68 00 00 mov %eax,0x683c(%rbx)
3e53: 48 8b 84 24 60 01 00 mov 0x160(%rsp),%rax
3e5a: 00
3e5b: 89 83 40 68 00 00 mov %eax,0x6840(%rbx)
3e61: 48 8b 84 24 68 01 00 mov 0x168(%rsp),%rax
3e68: 00
3e69: 89 83 44 68 00 00 mov %eax,0x6844(%rbx)
3e6f: 48 8b 5c 24 40 mov 0x40(%rsp),%rbx
3e74: e9 af f4 ff ff jmpq 3328 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x128>
3e79: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
if (LIKELY((ofBits == 0))) {
3e80: 0f 84 0a 04 00 00 je 4290 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x1090>
if (LIKELY(!ll0))
3e86: 45 85 ff test %r15d,%r15d
3e89: 0f 85 f8 fa ff ff jne 3987 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x787>
offset = seqState->prevOffset[1];
3e8f: 48 8b 8c 24 60 01 00 mov 0x160(%rsp),%rcx
3e96: 00
seqState->prevOffset[1] = seqState->prevOffset[0];
3e97: 48 89 9c 24 60 01 00 mov %rbx,0x160(%rsp)
3e9e: 00
seqState->prevOffset[0] = offset;
3e9f: 48 89 8c 24 58 01 00 mov %rcx,0x158(%rsp)
3ea6: 00
offset = seqState->prevOffset[1];
3ea7: 48 89 cb mov %rcx,%rbx
3eaa: e9 d8 fa ff ff jmpq 3987 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x787>
3eaf: 90 nop
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
3eb0: 45 89 d9 mov %r11d,%r9d
3eb3: c4 e2 f9 f7 ca shlx %rax,%rdx,%rcx
bitD->bitsConsumed += nbBits;
3eb8: 44 01 d8 add %r11d,%eax
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
3ebb: 41 f7 d9 neg %r9d
3ebe: c4 e2 b3 f7 c9 shrx %r9,%rcx,%rcx
seq.litLength += BIT_readBitsFast(&seqState->DStream, llBits/*>0*/);
3ec3: 49 01 ca add %rcx,%r10
3ec6: e9 e8 fa ff ff jmpq 39b3 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x7b3>
3ecb: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)
3ed0: 89 e9 mov %ebp,%ecx
3ed2: c4 e2 f9 f7 94 24 00 shlx %rax,0x100(%rsp),%rdx
3ed9: 01 00 00
bitD->bitsConsumed += nbBits;
3edc: 01 e8 add %ebp,%eax
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
3ede: f7 d9 neg %ecx
bitD->bitsConsumed += nbBits;
3ee0: 89 84 24 08 01 00 00 mov %eax,0x108(%rsp)
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
3ee7: c4 e2 f3 f7 d2 shrx %rcx,%rdx,%rdx
seq.matchLength += BIT_readBitsFast(&seqState->DStream, mlBits/*>0*/);
3eec: 48 01 54 24 20 add %rdx,0x20(%rsp)
if (MEM_64bits() && UNLIKELY(totalBits >= STREAM_ACCUMULATOR_MIN_64-(LLFSELog+MLFSELog+OffFSELog)))
3ef1: 41 80 fc 1e cmp $0x1e,%r12b
3ef5: 0f 86 a4 fa ff ff jbe 399f <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x79f>
if (bitD->bitsConsumed > (sizeof(bitD->bitContainer)*8)) /* overflow detected, like end of stream */
3efb: 83 f8 40 cmp $0x40,%eax
3efe: 0f 87 9b fa ff ff ja 399f <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x79f>
if (bitD->ptr >= bitD->limitPtr) {
3f04: 4c 39 54 24 30 cmp %r10,0x30(%rsp)
3f09: 0f 86 a4 04 00 00 jbe 43b3 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x11b3>
if (bitD->ptr == bitD->start) {
3f0f: 4c 8b 8c 24 18 01 00 mov 0x118(%rsp),%r9
3f16: 00
3f17: 4d 39 d1 cmp %r10,%r9
3f1a: 0f 84 7f fa ff ff je 399f <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x79f>
{ U32 nbBytes = bitD->bitsConsumed >> 3;
3f20: 89 c2 mov %eax,%edx
if (bitD->ptr - nbBytes < bitD->start) {
3f22: 4c 89 d1 mov %r10,%rcx
{ U32 nbBytes = bitD->bitsConsumed >> 3;
3f25: c1 ea 03 shr $0x3,%edx
if (bitD->ptr - nbBytes < bitD->start) {
3f28: 89 d5 mov %edx,%ebp
3f2a: 48 29 e9 sub %rbp,%rcx
3f2d: 49 39 c9 cmp %rcx,%r9
3f30: 76 11 jbe 3f43 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xd43>
nbBytes = (U32)(bitD->ptr - bitD->start); /* ptr > start */
3f32: 4c 89 d1 mov %r10,%rcx
3f35: 4c 29 c9 sub %r9,%rcx
bitD->ptr -= nbBytes;
3f38: 41 89 c9 mov %ecx,%r9d
nbBytes = (U32)(bitD->ptr - bitD->start); /* ptr > start */
3f3b: 89 ca mov %ecx,%edx
bitD->ptr -= nbBytes;
3f3d: 4c 89 d1 mov %r10,%rcx
3f40: 4c 29 c9 sub %r9,%rcx
bitD->bitsConsumed -= nbBytes*8;
3f43: c1 e2 03 shl $0x3,%edx
bitD->ptr -= nbBytes;
3f46: 48 89 8c 24 10 01 00 mov %rcx,0x110(%rsp)
3f4d: 00
bitD->bitsConsumed -= nbBytes*8;
3f4e: 29 d0 sub %edx,%eax
3f50: 48 8b 11 mov (%rcx),%rdx
bitD->bitContainer = MEM_readLEST(bitD->ptr); /* reminder : srcSize > sizeof(bitD->bitContainer), otherwise bitD->ptr == bitD->start */
3f53: 48 89 94 24 00 01 00 mov %rdx,0x100(%rsp)
3f5a: 00
return result;
3f5b: e9 47 fa ff ff jmpq 39a7 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x7a7>
3f60: 44 8b 7c 24 08 mov 0x8(%rsp),%r15d
3f65: 4d 89 f2 mov %r14,%r10
3f68: e9 0a fd ff ff jmpq 3c77 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xa77>
3f6d: 0f 1f 00 nopl (%rax)
ZSTD_memmove(oLitEnd, match, sequence.matchLength);
3f70: 4c 89 c2 mov %r8,%rdx
3f73: 4c 89 54 24 30 mov %r10,0x30(%rsp)
3f78: e8 00 00 00 00 callq 3f7d <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xd7d>
return sequenceLength;
3f7d: 4c 8b 54 24 30 mov 0x30(%rsp),%r10
3f82: e9 f7 fb ff ff jmpq 3b7e <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x97e>
3f87: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1)
3f8e: 00 00
3f90: 4c 89 54 24 30 mov %r10,0x30(%rsp)
return ZSTD_execSequenceEnd(op, oend, sequence, litPtr, litLimit, prefixStart, virtualStart, dictEnd);
3f95: 48 8d 94 24 b8 00 00 lea 0xb8(%rsp),%rdx
3f9c: 00
3f9d: 4c 89 f7 mov %r14,%rdi
3fa0: ff 74 24 28 pushq 0x28(%rsp)
3fa4: ff b4 24 d8 00 00 00 pushq 0xd8(%rsp)
3fab: ff b4 24 d8 00 00 00 pushq 0xd8(%rsp)
3fb2: ff b4 24 d8 00 00 00 pushq 0xd8(%rsp)
3fb9: 4c 8b 8c 24 b0 00 00 mov 0xb0(%rsp),%r9
3fc0: 00
3fc1: 4c 8b 44 24 38 mov 0x38(%rsp),%r8
3fc6: 48 8b 4c 24 60 mov 0x60(%rsp),%rcx
3fcb: 48 8b b4 24 98 00 00 mov 0x98(%rsp),%rsi
3fd2: 00
3fd3: e8 e8 c5 ff ff callq 5c0 <ZSTD_execSequenceEnd>
3fd8: 48 83 c4 20 add $0x20,%rsp
3fdc: 4c 8b 54 24 30 mov 0x30(%rsp),%r10
3fe1: 49 89 c5 mov %rax,%r13
3fe4: e9 95 fb ff ff jmpq 3b7e <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x97e>
3fe9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
3ff0: 89 84 24 08 01 00 00 mov %eax,0x108(%rsp)
3ff7: e9 6b fc ff ff jmpq 3c67 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xa67>
3ffc: 0f 1f 40 00 nopl 0x0(%rax)
ZSTD_memcpy(dst, src, 16);
4000: f3 0f 6f 62 10 movdqu 0x10(%rdx),%xmm4
ZSTD_wildcopy(op+16, (*litPtr)+16, sequence.litLength-16, ZSTD_no_overlap);
4005: 48 83 ee 10 sub $0x10,%rsi
4009: 41 0f 11 66 10 movups %xmm4,0x10(%r14)
if (16 >= length) return;
400e: 48 83 fe 10 cmp $0x10,%rsi
4012: 0f 8e a0 fa ff ff jle 3ab8 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x8b8>
op += 16;
4018: 49 8d 76 20 lea 0x20(%r14),%rsi
ip += 16;
401c: 48 83 c2 20 add $0x20,%rdx
ZSTD_memcpy(dst, src, 16);
4020: f3 0f 6f 3a movdqu (%rdx),%xmm7
4024: 48 83 c6 20 add $0x20,%rsi
4028: 48 83 c2 20 add $0x20,%rdx
402c: 0f 11 7e e0 movups %xmm7,-0x20(%rsi)
4030: f3 0f 6f 72 f0 movdqu -0x10(%rdx),%xmm6
4035: 0f 11 76 f0 movups %xmm6,-0x10(%rsi)
while (op < oend);
4039: 48 39 f7 cmp %rsi,%rdi
403c: 77 e2 ja 4020 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xe20>
403e: e9 75 fa ff ff jmpq 3ab8 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x8b8>
4043: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)
offset = ofBase + ll0 + BIT_readBitsFast(&seqState->DStream, 1);
4048: 44 8b 74 24 08 mov 0x8(%rsp),%r14d
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
404d: c4 c2 f9 f7 f8 shlx %rax,%r8,%rdi
bitD->bitsConsumed += nbBits;
4052: 83 c0 01 add $0x1,%eax
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
4055: 48 c1 ef 3f shr $0x3f,%rdi
4059: 83 fa 01 cmp $0x1,%edx
405c: 41 83 d6 00 adc $0x0,%r14d
4060: 49 01 fe add %rdi,%r14
{ size_t temp = (offset==3) ? seqState->prevOffset[0] - 1 : seqState->prevOffset[offset];
4063: 49 83 fe 03 cmp $0x3,%r14
4067: 74 34 je 409d <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xe9d>
4069: 4a 8b bc f4 58 01 00 mov 0x158(%rsp,%r14,8),%rdi
4070: 00
temp += !temp; /* 0 is not valid; input is corrupted; force offset to 1 */
4071: 48 83 ff 01 cmp $0x1,%rdi
4075: 48 83 d7 00 adc $0x0,%rdi
if (offset != 1) seqState->prevOffset[2] = seqState->prevOffset[1];
4079: 49 83 fe 01 cmp $0x1,%r14
407d: 75 2e jne 40ad <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xead>
seqState->prevOffset[0] = offset = temp;
407f: 66 48 0f 6e fe movq %rsi,%xmm7
4084: 66 48 0f 6e c7 movq %rdi,%xmm0
4089: 48 89 fe mov %rdi,%rsi
408c: 66 0f 6c c7 punpcklqdq %xmm7,%xmm0
4090: 0f 11 84 24 58 01 00 movups %xmm0,0x158(%rsp)
4097: 00
4098: e9 a6 f4 ff ff jmpq 3543 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x343>
temp += !temp; /* 0 is not valid; input is corrupted; force offset to 1 */
409d: 49 89 f6 mov %rsi,%r14
40a0: 31 ff xor %edi,%edi
40a2: 49 83 ee 01 sub $0x1,%r14
40a6: 40 0f 94 c7 sete %dil
40aa: 4c 01 f7 add %r14,%rdi
if (offset != 1) seqState->prevOffset[2] = seqState->prevOffset[1];
40ad: 4c 8b b4 24 60 01 00 mov 0x160(%rsp),%r14
40b4: 00
40b5: 4c 89 b4 24 68 01 00 mov %r14,0x168(%rsp)
40bc: 00
40bd: eb c0 jmp 407f <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xe7f>
40bf: 84 d2 test %dl,%dl
40c1: 0f 85 92 01 00 00 jne 4259 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x1059>
for (seqNb=0; (BIT_reloadDStream(&seqState.DStream) <= BIT_DStream_completed) && (seqNb<seqAdvance); seqNb++) {
40c7: 48 8b 9c 24 a8 00 00 mov 0xa8(%rsp),%rbx
40ce: 00
40cf: 8b 84 24 a4 00 00 00 mov 0xa4(%rsp),%eax
40d6: e9 69 f7 ff ff jmpq 3844 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x644>
40db: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)
if (offset < 8) {
40e0: 49 83 ff 07 cmp $0x7,%r15
40e4: 0f 86 2f 01 00 00 jbe 4219 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x1019>
ZSTD_memcpy(dst, src, 8);
40ea: 48 8b 10 mov (%rax),%rdx
40ed: 48 89 17 mov %rdx,(%rdi)
if (sequence.matchLength > 8) {
40f0: 49 83 f8 08 cmp $0x8,%r8
40f4: 0f 86 84 fa ff ff jbe 3b7e <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x97e>
*op += 8;
40fa: 48 8d 57 08 lea 0x8(%rdi),%rdx
*ip += 8;
40fe: 48 8d 48 08 lea 0x8(%rax),%rcx
ptrdiff_t diff = (BYTE*)dst - (const BYTE*)src;
4102: 48 89 d6 mov %rdx,%rsi
4105: 48 29 ce sub %rcx,%rsi
if (ovtype == ZSTD_overlap_src_before_dst && diff < WILDCOPY_VECLEN) {
4108: 48 83 fe 0f cmp $0xf,%rsi
410c: 0f 8f 08 04 00 00 jg 451a <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x131a>
4112: 48 8d 75 f7 lea -0x9(%rbp),%rsi
4116: 4c 8d 4f 09 lea 0x9(%rdi),%r9
411a: 48 29 fe sub %rdi,%rsi
411d: 49 89 f3 mov %rsi,%r11
4120: 48 89 d6 mov %rdx,%rsi
4123: 48 29 c6 sub %rax,%rsi
4126: 48 83 ee 09 sub $0x9,%rsi
412a: 48 83 fe 0e cmp $0xe,%rsi
412e: 0f 86 cc 00 00 00 jbe 4200 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x1000>
4134: 49 83 fb 1f cmp $0x1f,%r11
4138: 41 0f 97 c0 seta %r8b
413c: 4c 39 cd cmp %r9,%rbp
413f: 40 0f 93 c6 setae %sil
4143: 41 84 f0 test %sil,%r8b
4146: 0f 84 b4 00 00 00 je 4200 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x1000>
414c: 4c 89 de mov %r11,%rsi
414f: 48 c1 ee 03 shr $0x3,%rsi
4153: 48 83 c6 01 add $0x1,%rsi
4157: 4c 39 cd cmp %r9,%rbp
415a: 41 b9 01 00 00 00 mov $0x1,%r9d
4160: 4c 0f 43 ce cmovae %rsi,%r9
4164: be 08 00 00 00 mov $0x8,%esi
4169: 4d 89 c8 mov %r9,%r8
416c: 49 d1 e8 shr %r8
416f: 49 c1 e0 04 shl $0x4,%r8
4173: 49 83 c0 08 add $0x8,%r8
4177: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1)
417e: 00 00
ZSTD_memcpy(dst, src, 8);
4180: f3 0f 6f 34 30 movdqu (%rax,%rsi,1),%xmm6
4185: 0f 11 34 37 movups %xmm6,(%rdi,%rsi,1)
} while (op < oend);
4189: 48 83 c6 10 add $0x10,%rsi
418d: 4c 39 c6 cmp %r8,%rsi
4190: 75 ee jne 4180 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xf80>
4192: 4c 89 c8 mov %r9,%rax
4195: 48 83 e0 fe and $0xfffffffffffffffe,%rax
4199: 48 8d 34 c5 00 00 00 lea 0x0(,%rax,8),%rsi
41a0: 00
41a1: 48 01 f1 add %rsi,%rcx
41a4: 48 01 f2 add %rsi,%rdx
41a7: 4c 39 c8 cmp %r9,%rax
41aa: 0f 84 ce f9 ff ff je 3b7e <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x97e>
ZSTD_memcpy(dst, src, 8);
41b0: 48 8b 01 mov (%rcx),%rax
41b3: 48 89 02 mov %rax,(%rdx)
} while (op < oend);
41b6: e9 c3 f9 ff ff jmpq 3b7e <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x97e>
41bb: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)
bitD->ptr -= bitD->bitsConsumed >> 3;
41c0: 89 c1 mov %eax,%ecx
bitD->bitsConsumed &= 7;
41c2: 83 e0 07 and $0x7,%eax
bitD->ptr -= bitD->bitsConsumed >> 3;
41c5: c1 e9 03 shr $0x3,%ecx
41c8: 48 29 cb sub %rcx,%rbx
41cb: 4c 8b 03 mov (%rbx),%r8
return BIT_reloadDStreamFast(bitD);
41ce: c6 44 24 50 01 movb $0x1,0x50(%rsp)
41d3: e9 83 f3 ff ff jmpq 355b <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x35b>
41d8: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1)
41df: 00
for (seqNb=0; (BIT_reloadDStream(&seqState.DStream) <= BIT_DStream_completed) && (seqNb<seqAdvance); seqNb++) {
41e0: 45 31 ff xor %r15d,%r15d
41e3: e9 7f fa ff ff jmpq 3c67 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xa67>
nbBytes = (U32)(bitD->ptr - bitD->start); /* ptr > start */
41e8: 48 89 df mov %rbx,%rdi
41eb: 4c 29 f7 sub %r14,%rdi
41ee: 89 f9 mov %edi,%ecx
bitD->ptr -= nbBytes;
41f0: 89 ff mov %edi,%edi
41f2: 48 29 fb sub %rdi,%rbx
41f5: e9 d6 f5 ff ff jmpq 37d0 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x5d0>
41fa: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1)
ZSTD_memcpy(dst, src, 8);
4200: 48 8b 01 mov (%rcx),%rax
COPY8(op, ip)
4203: 48 83 c2 08 add $0x8,%rdx
4207: 48 83 c1 08 add $0x8,%rcx
ZSTD_memcpy(dst, src, 8);
420b: 48 89 42 f8 mov %rax,-0x8(%rdx)
} while (op < oend);
420f: 48 39 d5 cmp %rdx,%rbp
4212: 77 ec ja 4200 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x1000>
4214: e9 65 f9 ff ff jmpq 3b7e <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x97e>
(*op)[0] = (*ip)[0];
4219: 0f b6 10 movzbl (%rax),%edx
*ip += dec32table[offset];
421c: 48 8d 35 00 00 00 00 lea 0x0(%rip),%rsi # 4223 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x1023>
(*op)[0] = (*ip)[0];
4223: 88 17 mov %dl,(%rdi)
(*op)[1] = (*ip)[1];
4225: 0f b6 50 01 movzbl 0x1(%rax),%edx
4229: 88 57 01 mov %dl,0x1(%rdi)
(*op)[2] = (*ip)[2];
422c: 0f b6 50 02 movzbl 0x2(%rax),%edx
4230: 88 57 02 mov %dl,0x2(%rdi)
(*op)[3] = (*ip)[3];
4233: 0f b6 50 03 movzbl 0x3(%rax),%edx
4237: 88 57 03 mov %dl,0x3(%rdi)
*ip += dec32table[offset];
423a: 42 8b 14 be mov (%rsi,%r15,4),%edx
*ip -= sub2;
423e: 48 8d 35 00 00 00 00 lea 0x0(%rip),%rsi # 4245 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x1045>
*ip += dec32table[offset];
4245: 48 01 d0 add %rdx,%rax
static void ZSTD_copy4(void* dst, const void* src) { ZSTD_memcpy(dst, src, 4); }
4248: 8b 10 mov (%rax),%edx
424a: 89 57 04 mov %edx,0x4(%rdi)
*ip -= sub2;
424d: 4a 63 14 be movslq (%rsi,%r15,4),%rdx
4251: 48 29 d0 sub %rdx,%rax
4254: e9 97 fe ff ff jmpq 40f0 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xef0>
4259: 89 84 24 08 01 00 00 mov %eax,0x108(%rsp)
for (seqNb=0; (BIT_reloadDStream(&seqState.DStream) <= BIT_DStream_completed) && (seqNb<seqAdvance); seqNb++) {
4260: 48 8b 9c 24 a8 00 00 mov 0xa8(%rsp),%rbx
4267: 00
4268: e9 ce f5 ff ff jmpq 383b <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x63b>
426d: 0f 1f 00 nopl (%rax)
ZSTD_memmove(oLitEnd, match, sequence.matchLength);
4270: 4c 89 ca mov %r9,%rdx
4273: 48 89 4c 24 10 mov %rcx,0x10(%rsp)
4278: e8 00 00 00 00 callq 427d <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x107d>
return sequenceLength;
427d: 48 8b 4c 24 10 mov 0x10(%rsp),%rcx
4282: e9 87 fb ff ff jmpq 3e0e <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xc0e>
4287: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1)
428e: 00 00
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
4290: c4 e2 f9 f7 8c 24 00 shlx %rax,0x100(%rsp),%rcx
4297: 01 00 00
bitD->bitsConsumed += nbBits;
429a: 83 c0 01 add $0x1,%eax
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
429d: 48 c1 e9 3f shr $0x3f,%rcx
offset = ofBase + ll0 + BIT_readBitsFast(&seqState->DStream, 1);
42a1: 41 83 ff 01 cmp $0x1,%r15d
42a5: 41 83 d1 00 adc $0x0,%r9d
bitD->bitsConsumed += nbBits;
42a9: 89 84 24 08 01 00 00 mov %eax,0x108(%rsp)
42b0: 4c 01 c9 add %r9,%rcx
{ size_t temp = (offset==3) ? seqState->prevOffset[0] - 1 : seqState->prevOffset[offset];
42b3: 48 83 f9 03 cmp $0x3,%rcx
42b7: 0f 84 47 02 00 00 je 4504 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x1304>
42bd: 4c 8b 8c cc 58 01 00 mov 0x158(%rsp,%rcx,8),%r9
42c4: 00
temp += !temp; /* 0 is not valid; input is corrupted; force offset to 1 */
42c5: 49 83 f9 01 cmp $0x1,%r9
42c9: 49 83 d1 00 adc $0x0,%r9
if (offset != 1) seqState->prevOffset[2] = seqState->prevOffset[1];
42cd: 48 83 f9 01 cmp $0x1,%rcx
42d1: 74 10 je 42e3 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x10e3>
42d3: 48 8b 8c 24 60 01 00 mov 0x160(%rsp),%rcx
42da: 00
42db: 48 89 8c 24 68 01 00 mov %rcx,0x168(%rsp)
42e2: 00
seqState->prevOffset[0] = offset = temp;
42e3: 66 48 0f 6e e3 movq %rbx,%xmm4
42e8: 66 49 0f 6e c1 movq %r9,%xmm0
42ed: 4c 89 cb mov %r9,%rbx
42f0: 66 0f 6c c4 punpcklqdq %xmm4,%xmm0
42f4: 0f 11 84 24 58 01 00 movups %xmm0,0x158(%rsp)
42fb: 00
42fc: e9 86 f6 ff ff jmpq 3987 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x787>
4301: 41 89 df mov %ebx,%r15d
4304: 4d 89 f2 mov %r14,%r10
4307: e9 79 f9 ff ff jmpq 3c85 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xa85>
return ZSTD_execSequenceEnd(op, oend, sequence, litPtr, litLimit, prefixStart, virtualStart, dictEnd);
430c: 66 49 0f 6e f1 movq %r9,%xmm6
4311: 66 48 0f 6e c2 movq %rdx,%xmm0
4316: 4c 89 f1 mov %r14,%rcx
4319: 4d 89 f8 mov %r15,%r8
431c: 66 0f 6c c6 punpcklqdq %xmm6,%xmm0
4320: 4c 89 e7 mov %r12,%rdi
4323: 0f 29 84 24 e0 00 00 movaps %xmm0,0xe0(%rsp)
432a: 00
432b: ff 74 24 28 pushq 0x28(%rsp)
432f: ff b4 24 f8 00 00 00 pushq 0xf8(%rsp)
4336: ff b4 24 f8 00 00 00 pushq 0xf8(%rsp)
433d: ff b4 24 f8 00 00 00 pushq 0xf8(%rsp)
4344: 4c 8b 8c 24 b0 00 00 mov 0xb0(%rsp),%r9
434b: 00
434c: 48 8b 54 24 50 mov 0x50(%rsp),%rdx
4351: 48 8b b4 24 98 00 00 mov 0x98(%rsp),%rsi
4358: 00
4359: e8 62 c2 ff ff callq 5c0 <ZSTD_execSequenceEnd>
435e: 48 83 c4 20 add $0x20,%rsp
4362: 48 89 c1 mov %rax,%rcx
4365: e9 a4 fa ff ff jmpq 3e0e <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xc0e>
ZSTD_memcpy(dst, src, 16);
436a: f3 0f 6f 7e 10 movdqu 0x10(%rsi),%xmm7
ZSTD_wildcopy(op+16, (*litPtr)+16, sequence.litLength-16, ZSTD_no_overlap);
436f: 48 83 ea 10 sub $0x10,%rdx
4373: 41 0f 11 7c 24 10 movups %xmm7,0x10(%r12)
if (16 >= length) return;
4379: 48 83 fa 10 cmp $0x10,%rdx
437d: 0f 8e d1 f9 ff ff jle 3d54 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xb54>
op += 16;
4383: 49 8d 54 24 20 lea 0x20(%r12),%rdx
ip += 16;
4388: 48 83 c6 20 add $0x20,%rsi
438c: 0f 1f 40 00 nopl 0x0(%rax)
ZSTD_memcpy(dst, src, 16);
4390: f3 0f 6f 26 movdqu (%rsi),%xmm4
4394: 48 83 c2 20 add $0x20,%rdx
4398: 48 83 c6 20 add $0x20,%rsi
439c: 0f 11 62 e0 movups %xmm4,-0x20(%rdx)
43a0: f3 0f 6f 6e f0 movdqu -0x10(%rsi),%xmm5
43a5: 0f 11 6a f0 movups %xmm5,-0x10(%rdx)
while (op < oend);
43a9: 48 39 d7 cmp %rdx,%rdi
43ac: 77 e2 ja 4390 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x1190>
43ae: e9 a1 f9 ff ff jmpq 3d54 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xb54>
bitD->ptr -= bitD->bitsConsumed >> 3;
43b3: 89 c2 mov %eax,%edx
bitD->bitsConsumed &= 7;
43b5: 83 e0 07 and $0x7,%eax
bitD->ptr -= bitD->bitsConsumed >> 3;
43b8: c1 ea 03 shr $0x3,%edx
43bb: 49 29 d2 sub %rdx,%r10
43be: 49 8b 12 mov (%r10),%rdx
43c1: 4c 89 94 24 10 01 00 mov %r10,0x110(%rsp)
43c8: 00
bitD->bitContainer = MEM_readLEST(bitD->ptr);
43c9: 48 89 94 24 00 01 00 mov %rdx,0x100(%rsp)
43d0: 00
return BIT_reloadDStreamFast(bitD);
43d1: e9 d1 f5 ff ff jmpq 39a7 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x7a7>
if (offset < 8) {
43d6: 48 83 fb 07 cmp $0x7,%rbx
43da: 0f 87 7b 01 00 00 ja 455b <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x135b>
(*op)[0] = (*ip)[0];
43e0: 0f b6 10 movzbl (%rax),%edx
*ip += dec32table[offset];
43e3: 48 8d 35 00 00 00 00 lea 0x0(%rip),%rsi # 43ea <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x11ea>
(*op)[0] = (*ip)[0];
43ea: 88 17 mov %dl,(%rdi)
(*op)[1] = (*ip)[1];
43ec: 0f b6 50 01 movzbl 0x1(%rax),%edx
43f0: 88 57 01 mov %dl,0x1(%rdi)
(*op)[2] = (*ip)[2];
43f3: 0f b6 50 02 movzbl 0x2(%rax),%edx
43f7: 88 57 02 mov %dl,0x2(%rdi)
(*op)[3] = (*ip)[3];
43fa: 0f b6 50 03 movzbl 0x3(%rax),%edx
43fe: 88 57 03 mov %dl,0x3(%rdi)
*ip += dec32table[offset];
4401: 8b 14 9e mov (%rsi,%rbx,4),%edx
*ip -= sub2;
4404: 48 8d 35 00 00 00 00 lea 0x0(%rip),%rsi # 440b <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x120b>
*ip += dec32table[offset];
440b: 48 01 d0 add %rdx,%rax
static void ZSTD_copy4(void* dst, const void* src) { ZSTD_memcpy(dst, src, 4); }
440e: 8b 10 mov (%rax),%edx
4410: 89 57 04 mov %edx,0x4(%rdi)
*ip -= sub2;
4413: 48 63 14 9e movslq (%rsi,%rbx,4),%rdx
4417: 48 29 d0 sub %rdx,%rax
if (sequence.matchLength > 8) {
441a: 49 83 f9 08 cmp $0x8,%r9
441e: 0f 86 ea f9 ff ff jbe 3e0e <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xc0e>
*op += 8;
4424: 48 8d 57 08 lea 0x8(%rdi),%rdx
*ip += 8;
4428: 48 8d 70 08 lea 0x8(%rax),%rsi
ptrdiff_t diff = (BYTE*)dst - (const BYTE*)src;
442c: 49 89 d3 mov %rdx,%r11
442f: 49 29 f3 sub %rsi,%r11
if (ovtype == ZSTD_overlap_src_before_dst && diff < WILDCOPY_VECLEN) {
4432: 49 83 fb 0f cmp $0xf,%r11
4436: 0f 8f 2a 01 00 00 jg 4566 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x1366>
443c: 4c 8d 4d f7 lea -0x9(%rbp),%r9
4440: 48 8d 5f 09 lea 0x9(%rdi),%rbx
4444: 4d 89 c8 mov %r9,%r8
4447: 49 89 d1 mov %rdx,%r9
444a: 49 29 c1 sub %rax,%r9
444d: 49 29 f8 sub %rdi,%r8
4450: 49 83 e9 09 sub $0x9,%r9
4454: 49 83 f9 0e cmp $0xe,%r9
4458: 76 7c jbe 44d6 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x12d6>
445a: 48 39 eb cmp %rbp,%rbx
445d: 41 0f 96 c3 setbe %r11b
4461: 49 83 f8 1f cmp $0x1f,%r8
4465: 41 0f 97 c1 seta %r9b
4469: 45 84 cb test %r9b,%r11b
446c: 74 68 je 44d6 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x12d6>
446e: 49 c1 e8 03 shr $0x3,%r8
4472: 4d 89 c1 mov %r8,%r9
4475: 49 83 c1 01 add $0x1,%r9
4479: 48 39 eb cmp %rbp,%rbx
447c: bb 01 00 00 00 mov $0x1,%ebx
4481: 49 0f 46 d9 cmovbe %r9,%rbx
4485: 41 b9 08 00 00 00 mov $0x8,%r9d
448b: 49 89 db mov %rbx,%r11
448e: 49 d1 eb shr %r11
4491: 49 c1 e3 04 shl $0x4,%r11
4495: 49 83 c3 08 add $0x8,%r11
ZSTD_memcpy(dst, src, 8);
4499: f3 42 0f 6f 1c 08 movdqu (%rax,%r9,1),%xmm3
449f: 42 0f 11 1c 0f movups %xmm3,(%rdi,%r9,1)
} while (op < oend);
44a4: 49 83 c1 10 add $0x10,%r9
44a8: 4d 39 d9 cmp %r11,%r9
44ab: 75 ec jne 4499 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x1299>
44ad: 48 89 d8 mov %rbx,%rax
44b0: 48 83 e0 fe and $0xfffffffffffffffe,%rax
44b4: 48 8d 3c c5 00 00 00 lea 0x0(,%rax,8),%rdi
44bb: 00
44bc: 48 01 fe add %rdi,%rsi
44bf: 48 01 fa add %rdi,%rdx
44c2: 48 39 d8 cmp %rbx,%rax
44c5: 0f 84 43 f9 ff ff je 3e0e <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xc0e>
ZSTD_memcpy(dst, src, 8);
44cb: 48 8b 06 mov (%rsi),%rax
44ce: 48 89 02 mov %rax,(%rdx)
} while (op < oend);
44d1: e9 38 f9 ff ff jmpq 3e0e <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xc0e>
ZSTD_memcpy(dst, src, 8);
44d6: 48 8b 06 mov (%rsi),%rax
COPY8(op, ip)
44d9: 48 83 c2 08 add $0x8,%rdx
44dd: 48 83 c6 08 add $0x8,%rsi
ZSTD_memcpy(dst, src, 8);
44e1: 48 89 42 f8 mov %rax,-0x8(%rdx)
} while (op < oend);
44e5: 48 39 d5 cmp %rdx,%rbp
44e8: 77 ec ja 44d6 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x12d6>
44ea: e9 1f f9 ff ff jmpq 3e0e <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xc0e>
44ef: 90 nop
44f0: 49 89 cd mov %rcx,%r13
44f3: e9 0f ee ff ff jmpq 3307 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x107>
for (seqNb=0; (BIT_reloadDStream(&seqState.DStream) <= BIT_DStream_completed) && (seqNb<seqAdvance); seqNb++) {
44f8: 8b 84 24 a4 00 00 00 mov 0xa4(%rsp),%eax
44ff: e9 2f f3 ff ff jmpq 3833 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x633>
temp += !temp; /* 0 is not valid; input is corrupted; force offset to 1 */
4504: 48 89 d9 mov %rbx,%rcx
4507: 45 31 c9 xor %r9d,%r9d
450a: 48 83 e9 01 sub $0x1,%rcx
450e: 41 0f 94 c1 sete %r9b
4512: 49 01 c9 add %rcx,%r9
if (offset != 1) seqState->prevOffset[2] = seqState->prevOffset[1];
4515: e9 b9 fd ff ff jmpq 42d3 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x10d3>
ZSTD_memcpy(dst, src, 16);
451a: f3 0f 6f 70 08 movdqu 0x8(%rax),%xmm6
451f: 0f 11 77 08 movups %xmm6,0x8(%rdi)
if (16 >= length) return;
4523: 49 83 f8 18 cmp $0x18,%r8
4527: 0f 8e 51 f6 ff ff jle 3b7e <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x97e>
op += 16;
452d: 48 83 c7 18 add $0x18,%rdi
ip += 16;
4531: 48 83 c0 18 add $0x18,%rax
4535: 0f 1f 00 nopl (%rax)
ZSTD_memcpy(dst, src, 16);
4538: f3 0f 6f 18 movdqu (%rax),%xmm3
453c: 48 83 c7 20 add $0x20,%rdi
4540: 48 83 c0 20 add $0x20,%rax
4544: 0f 11 5f e0 movups %xmm3,-0x20(%rdi)
4548: f3 0f 6f 68 f0 movdqu -0x10(%rax),%xmm5
454d: 0f 11 6f f0 movups %xmm5,-0x10(%rdi)
while (op < oend);
4551: 48 39 fd cmp %rdi,%rbp
4554: 77 e2 ja 4538 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x1338>
4556: e9 23 f6 ff ff jmpq 3b7e <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x97e>
ZSTD_memcpy(dst, src, 8);
455b: 48 8b 10 mov (%rax),%rdx
455e: 48 89 17 mov %rdx,(%rdi)
}
4561: e9 b4 fe ff ff jmpq 441a <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x121a>
ZSTD_memcpy(dst, src, 16);
4566: f3 0f 6f 58 08 movdqu 0x8(%rax),%xmm3
456b: 0f 11 5f 08 movups %xmm3,0x8(%rdi)
if (16 >= length) return;
456f: 49 83 f9 18 cmp $0x18,%r9
4573: 0f 8e 95 f8 ff ff jle 3e0e <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xc0e>
op += 16;
4579: 48 83 c7 18 add $0x18,%rdi
ip += 16;
457d: 48 83 c0 18 add $0x18,%rax
ZSTD_memcpy(dst, src, 16);
4581: f3 0f 6f 28 movdqu (%rax),%xmm5
4585: 48 83 c7 20 add $0x20,%rdi
4589: 48 83 c0 20 add $0x20,%rax
458d: 0f 11 6f e0 movups %xmm5,-0x20(%rdi)
4591: f3 0f 6f 60 f0 movdqu -0x10(%rax),%xmm4
4596: 0f 11 67 f0 movups %xmm4,-0x10(%rdi)
while (op < oend);
459a: 48 39 fd cmp %rdi,%rbp
459d: 77 e2 ja 4581 <ZSTD_decompressSequencesLong_bmi2.constprop.0+0x1381>
459f: e9 6a f8 ff ff jmpq 3e0e <ZSTD_decompressSequencesLong_bmi2.constprop.0+0xc0e>
45a4: 66 66 2e 0f 1f 84 00 data16 nopw %cs:0x0(%rax,%rax,1)
45ab: 00 00 00 00
45af: 66 66 2e 0f 1f 84 00 data16 nopw %cs:0x0(%rax,%rax,1)
45b6: 00 00 00 00
45ba: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1)
00000000000045c0 <ZSTD_getcBlockSize>:
RETURN_ERROR_IF(srcSize < ZSTD_blockHeaderSize, srcSize_wrong, "");
45c0: 49 c7 c0 b8 ff ff ff mov $0xffffffffffffffb8,%r8
45c7: 48 83 fe 02 cmp $0x2,%rsi
45cb: 76 3c jbe 4609 <ZSTD_getcBlockSize+0x49>
}
}
MEM_STATIC U32 MEM_readLE24(const void* memPtr)
{
return (U32)MEM_readLE16(memPtr) + ((U32)(((const BYTE*)memPtr)[2]) << 16);
45cd: 0f b6 47 02 movzbl 0x2(%rdi),%eax
45d1: 0f b7 0f movzwl (%rdi),%ecx
if (bpPtr->blockType == bt_rle) return 1;
45d4: 41 b8 01 00 00 00 mov $0x1,%r8d
45da: c1 e0 10 shl $0x10,%eax
45dd: 01 c8 add %ecx,%eax
U32 const cSize = cBlockHeader >> 3;
45df: 89 c1 mov %eax,%ecx
bpPtr->lastBlock = cBlockHeader & 1;
45e1: 89 c6 mov %eax,%esi
bpPtr->blockType = (blockType_e)((cBlockHeader >> 1) & 3);
45e3: d1 e8 shr %eax
U32 const cSize = cBlockHeader >> 3;
45e5: c1 e9 03 shr $0x3,%ecx
bpPtr->lastBlock = cBlockHeader & 1;
45e8: 83 e6 01 and $0x1,%esi
bpPtr->blockType = (blockType_e)((cBlockHeader >> 1) & 3);
45eb: 83 e0 03 and $0x3,%eax
bpPtr->lastBlock = cBlockHeader & 1;
45ee: 89 72 04 mov %esi,0x4(%rdx)
bpPtr->blockType = (blockType_e)((cBlockHeader >> 1) & 3);
45f1: 89 02 mov %eax,(%rdx)
bpPtr->origSize = cSize; /* only useful for RLE */
45f3: 89 4a 08 mov %ecx,0x8(%rdx)
if (bpPtr->blockType == bt_rle) return 1;
45f6: 83 f8 01 cmp $0x1,%eax
45f9: 74 0e je 4609 <ZSTD_getcBlockSize+0x49>
return cSize;
45fb: 83 f8 03 cmp $0x3,%eax
45fe: 49 c7 c0 ec ff ff ff mov $0xffffffffffffffec,%r8
4605: 4c 0f 45 c1 cmovne %rcx,%r8
}
4609: 4c 89 c0 mov %r8,%rax
460c: c3 retq
460d: 66 66 2e 0f 1f 84 00 data16 nopw %cs:0x0(%rax,%rax,1)
4614: 00 00 00 00
4618: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1)
461f: 00
0000000000004620 <ZSTD_decodeLiteralsBlock>:
{
4620: 41 57 push %r15
4622: 41 56 push %r14
4624: 41 55 push %r13
4626: 41 54 push %r12
4628: 55 push %rbp
4629: 53 push %rbx
462a: 48 83 ec 08 sub $0x8,%rsp
RETURN_ERROR_IF(srcSize < MIN_CBLOCK_SIZE, corruption_detected, "");
462e: 48 83 fa 02 cmp $0x2,%rdx
4632: 76 6c jbe 46a0 <ZSTD_decodeLiteralsBlock+0x80>
symbolEncodingType_e const litEncType = (symbolEncodingType_e)(istart[0] & 3);
4634: 0f b6 06 movzbl (%rsi),%eax
4637: 48 89 fd mov %rdi,%rbp
463a: 48 89 d7 mov %rdx,%rdi
463d: 89 c3 mov %eax,%ebx
463f: 83 e3 03 and $0x3,%ebx
switch(litEncType)
4642: 80 fb 02 cmp $0x2,%bl
4645: 0f 84 88 00 00 00 je 46d3 <ZSTD_decodeLiteralsBlock+0xb3>
464b: 80 fb 03 cmp $0x3,%bl
464e: 74 70 je 46c0 <ZSTD_decodeLiteralsBlock+0xa0>
4650: 80 fb 01 cmp $0x1,%bl
4653: 0f 84 df 01 00 00 je 4838 <ZSTD_decodeLiteralsBlock+0x218>
U32 const lhlCode = ((istart[0]) >> 2) & 3;
4659: 89 c2 mov %eax,%edx
465b: c0 ea 02 shr $0x2,%dl
465e: 83 e2 03 and $0x3,%edx
switch(lhlCode)
4661: 80 fa 01 cmp $0x1,%dl
4664: 0f 84 b6 01 00 00 je 4820 <ZSTD_decodeLiteralsBlock+0x200>
466a: 80 fa 03 cmp $0x3,%dl
466d: 0f 84 3d 02 00 00 je 48b0 <ZSTD_decodeLiteralsBlock+0x290>
litSize = istart[0] >> 3;
4673: c0 e8 03 shr $0x3,%al
4676: 0f b6 d8 movzbl %al,%ebx
lhSize = 1;
4679: b8 01 00 00 00 mov $0x1,%eax
if (lhSize+litSize+WILDCOPY_OVERLENGTH > srcSize) { /* risk reading beyond src buffer with wildcopy */
467e: 4c 8d 24 03 lea (%rbx,%rax,1),%r12
4682: 49 8d 54 24 20 lea 0x20(%r12),%rdx
4687: 48 39 fa cmp %rdi,%rdx
468a: 0f 86 00 02 00 00 jbe 4890 <ZSTD_decodeLiteralsBlock+0x270>
RETURN_ERROR_IF(litSize+lhSize > srcSize, corruption_detected, "");
4690: 49 39 fc cmp %rdi,%r12
4693: 0f 86 07 03 00 00 jbe 49a0 <ZSTD_decodeLiteralsBlock+0x380>
4699: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
RETURN_ERROR_IF(srcSize < MIN_CBLOCK_SIZE, corruption_detected, "");
46a0: 49 c7 c4 ec ff ff ff mov $0xffffffffffffffec,%r12
}
46a7: 48 83 c4 08 add $0x8,%rsp
46ab: 4c 89 e0 mov %r12,%rax
46ae: 5b pop %rbx
46af: 5d pop %rbp
46b0: 41 5c pop %r12
46b2: 41 5d pop %r13
46b4: 41 5e pop %r14
46b6: 41 5f pop %r15
46b8: c3 retq
46b9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
RETURN_ERROR_IF(dctx->litEntropy==0, dictionary_corrupted, "");
46c0: 44 8b 95 28 75 00 00 mov 0x7528(%rbp),%r10d
46c7: 49 c7 c4 e2 ff ff ff mov $0xffffffffffffffe2,%r12
46ce: 45 85 d2 test %r10d,%r10d
46d1: 74 d4 je 46a7 <ZSTD_decodeLiteralsBlock+0x87>
RETURN_ERROR_IF(srcSize < 5, corruption_detected, "srcSize >= MIN_CBLOCK_SIZE == 3; here we need up to 5 for case 3");
46d3: 48 83 ff 04 cmp $0x4,%rdi
46d7: 76 c7 jbe 46a0 <ZSTD_decodeLiteralsBlock+0x80>
MEM_STATIC U32 MEM_read32(const void* ptr) { return ((const unalign32*)ptr)->v; }
46d9: 8b 0e mov (%rsi),%ecx
U32 const lhlCode = (istart[0] >> 2) & 3;
46db: c0 e8 02 shr $0x2,%al
46de: 83 e0 03 and $0x3,%eax
litSize = (lhc >> 4) & 0x3FF;
46e1: 41 89 cd mov %ecx,%r13d
46e4: 41 c1 ed 04 shr $0x4,%r13d
46e8: 3c 02 cmp $0x2,%al
46ea: 0f 84 10 01 00 00 je 4800 <ZSTD_decodeLiteralsBlock+0x1e0>
46f0: 3c 03 cmp $0x3,%al
46f2: 0f 84 d0 00 00 00 je 47c8 <ZSTD_decodeLiteralsBlock+0x1a8>
singleStream = !lhlCode;
46f8: 83 f0 01 xor $0x1,%eax
litCSize = (lhc >> 14) & 0x3FF;
46fb: c1 e9 0e shr $0xe,%ecx
litSize = (lhc >> 4) & 0x3FF;
46fe: 41 81 e5 ff 03 00 00 and $0x3ff,%r13d
lhSize = 3;
4705: 41 b8 03 00 00 00 mov $0x3,%r8d
singleStream = !lhlCode;
470b: 0f b6 d0 movzbl %al,%edx
litCSize = (lhc >> 14) & 0x3FF;
470e: 81 e1 ff 03 00 00 and $0x3ff,%ecx
RETURN_ERROR_IF(litCSize + lhSize > srcSize, corruption_detected, "");
4714: 4d 8d 24 08 lea (%r8,%rcx,1),%r12
4718: 49 39 fc cmp %rdi,%r12
471b: 77 83 ja 46a0 <ZSTD_decodeLiteralsBlock+0x80>
if (dctx->ddictIsCold && (litSize > 768 /* heuristic */)) {
471d: 44 8b 8d f4 75 00 00 mov 0x75f4(%rbp),%r9d
4724: 45 85 c9 test %r9d,%r9d
4727: 74 0d je 4736 <ZSTD_decodeLiteralsBlock+0x116>
4729: 49 81 fd 00 03 00 00 cmp $0x300,%r13
4730: 0f 87 ad 02 00 00 ja 49e3 <ZSTD_decodeLiteralsBlock+0x3c3>
hufSuccess = HUF_decompress1X_usingDTable_bmi2(
4736: 8b 85 d8 75 00 00 mov 0x75d8(%rbp),%eax
dctx->litBuffer, litSize, istart+lhSize, litCSize,
473c: 4e 8d 14 06 lea (%rsi,%r8,1),%r10
4740: 4c 8d b5 90 76 00 00 lea 0x7690(%rbp),%r14
if (litEncType==set_repeat) {
4747: 80 fb 03 cmp $0x3,%bl
474a: 0f 84 e0 01 00 00 je 4930 <ZSTD_decodeLiteralsBlock+0x310>
istart+lhSize, litCSize, dctx->workspace,
4750: 4c 8d 8d bc 6a 00 00 lea 0x6abc(%rbp),%r9
dctx->entropy.hufTable, dctx->litBuffer, litSize,
4757: 4c 8d bd 38 28 00 00 lea 0x2838(%rbp),%r15
if (singleStream) {
475e: 85 d2 test %edx,%edx
4760: 0f 84 12 02 00 00 je 4978 <ZSTD_decodeLiteralsBlock+0x358>
hufSuccess = HUF_decompress1X1_DCtx_wksp_bmi2(
4766: 50 push %rax
4767: 49 89 c8 mov %rcx,%r8
476a: 4c 89 f6 mov %r14,%rsi
476d: 4c 89 ff mov %r15,%rdi
4770: 68 00 0a 00 00 pushq $0xa00
4775: 4c 89 d1 mov %r10,%rcx
4778: 4c 89 ea mov %r13,%rdx
477b: e8 00 00 00 00 callq 4780 <ZSTD_decodeLiteralsBlock+0x160>
4780: 5e pop %rsi
4781: 5f pop %rdi
RETURN_ERROR_IF(HUF_isError(hufSuccess), corruption_detected, "");
4782: 48 83 f8 88 cmp $0xffffffffffffff88,%rax
4786: 0f 87 14 ff ff ff ja 46a0 <ZSTD_decodeLiteralsBlock+0x80>
dctx->litPtr = dctx->litBuffer;
478c: 4c 89 b5 a0 75 00 00 mov %r14,0x75a0(%rbp)
dctx->litSize = litSize;
4793: 4c 89 ad c0 75 00 00 mov %r13,0x75c0(%rbp)
dctx->litEntropy = 1;
479a: c7 85 28 75 00 00 01 movl $0x1,0x7528(%rbp)
47a1: 00 00 00
if (litEncType==set_compressed) dctx->HUFptr = dctx->entropy.hufTable;
47a4: 80 fb 02 cmp $0x2,%bl
47a7: 75 04 jne 47ad <ZSTD_decodeLiteralsBlock+0x18d>
47a9: 4c 89 7d 18 mov %r15,0x18(%rbp)
ZSTD_memset(dctx->litBuffer + dctx->litSize, 0, WILDCOPY_OVERLENGTH);
47ad: 4d 01 f5 add %r14,%r13
47b0: 66 0f ef c0 pxor %xmm0,%xmm0
47b4: 41 0f 11 45 00 movups %xmm0,0x0(%r13)
47b9: 41 0f 11 45 10 movups %xmm0,0x10(%r13)
return litCSize + lhSize;
47be: e9 e4 fe ff ff jmpq 46a7 <ZSTD_decodeLiteralsBlock+0x87>
47c3: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)
litSize = (lhc >> 4) & 0x3FFFF;
47c8: 44 89 e8 mov %r13d,%eax
litCSize = (lhc >> 22) + ((size_t)istart[4] << 10);
47cb: 0f b6 56 04 movzbl 0x4(%rsi),%edx
47cf: 25 ff ff 03 00 and $0x3ffff,%eax
litSize = (lhc >> 4) & 0x3FFFF;
47d4: 41 89 c5 mov %eax,%r13d
RETURN_ERROR_IF(litSize > ZSTD_BLOCKSIZE_MAX, corruption_detected, "");
47d7: 3d 00 00 02 00 cmp $0x20000,%eax
47dc: 0f 87 be fe ff ff ja 46a0 <ZSTD_decodeLiteralsBlock+0x80>
litCSize = (lhc >> 22) + ((size_t)istart[4] << 10);
47e2: c1 e9 16 shr $0x16,%ecx
47e5: 48 c1 e2 0a shl $0xa,%rdx
lhSize = 5;
47e9: 41 b8 05 00 00 00 mov $0x5,%r8d
litCSize = (lhc >> 22) + ((size_t)istart[4] << 10);
47ef: 89 c8 mov %ecx,%eax
47f1: 48 8d 0c 10 lea (%rax,%rdx,1),%rcx
U32 singleStream=0;
47f5: 31 d2 xor %edx,%edx
47f7: e9 18 ff ff ff jmpq 4714 <ZSTD_decodeLiteralsBlock+0xf4>
47fc: 0f 1f 40 00 nopl 0x0(%rax)
litSize = (lhc >> 4) & 0x3FFF;
4800: 41 81 e5 ff 3f 00 00 and $0x3fff,%r13d
litCSize = lhc >> 18;
4807: c1 e9 12 shr $0x12,%ecx
U32 singleStream=0;
480a: 31 d2 xor %edx,%edx
lhSize = 4;
480c: 41 b8 04 00 00 00 mov $0x4,%r8d
break;
4812: e9 fd fe ff ff jmpq 4714 <ZSTD_decodeLiteralsBlock+0xf4>
4817: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1)
481e: 00 00
litSize = MEM_readLE16(istart) >> 4;
4820: 0f b7 1e movzwl (%rsi),%ebx
lhSize = 2;
4823: b8 02 00 00 00 mov $0x2,%eax
litSize = MEM_readLE16(istart) >> 4;
4828: 66 c1 eb 04 shr $0x4,%bx
482c: 0f b7 db movzwl %bx,%ebx
break;
482f: e9 4a fe ff ff jmpq 467e <ZSTD_decodeLiteralsBlock+0x5e>
4834: 0f 1f 40 00 nopl 0x0(%rax)
{ U32 const lhlCode = ((istart[0]) >> 2) & 3;
4838: 89 c2 mov %eax,%edx
483a: c0 ea 02 shr $0x2,%dl
483d: 83 e2 03 and $0x3,%edx
switch(lhlCode)
4840: 80 fa 01 cmp $0x1,%dl
4843: 0f 84 c7 00 00 00 je 4910 <ZSTD_decodeLiteralsBlock+0x2f0>
4849: 80 fa 03 cmp $0x3,%dl
484c: 0f 84 7e 00 00 00 je 48d0 <ZSTD_decodeLiteralsBlock+0x2b0>
litSize = istart[0] >> 3;
4852: c0 e8 03 shr $0x3,%al
break;
4855: 41 bc 02 00 00 00 mov $0x2,%r12d
litSize = istart[0] >> 3;
485b: 0f b6 d8 movzbl %al,%ebx
lhSize = 1;
485e: b8 01 00 00 00 mov $0x1,%eax
ZSTD_memset(dctx->litBuffer, istart[lhSize], litSize + WILDCOPY_OVERLENGTH);
4863: 48 8d 8d 90 76 00 00 lea 0x7690(%rbp),%rcx
486a: 0f b6 34 06 movzbl (%rsi,%rax,1),%esi
486e: 48 8d 53 20 lea 0x20(%rbx),%rdx
4872: 48 89 cf mov %rcx,%rdi
4875: e8 00 00 00 00 callq 487a <ZSTD_decodeLiteralsBlock+0x25a>
dctx->litSize = litSize;
487a: 48 89 9d c0 75 00 00 mov %rbx,0x75c0(%rbp)
dctx->litPtr = dctx->litBuffer;
4881: 48 89 85 a0 75 00 00 mov %rax,0x75a0(%rbp)
return lhSize+1;
4888: e9 1a fe ff ff jmpq 46a7 <ZSTD_decodeLiteralsBlock+0x87>
488d: 0f 1f 00 nopl (%rax)
dctx->litPtr = istart+lhSize;
4890: 48 01 c6 add %rax,%rsi
dctx->litSize = litSize;
4893: 48 89 9d c0 75 00 00 mov %rbx,0x75c0(%rbp)
dctx->litPtr = istart+lhSize;
489a: 48 89 b5 a0 75 00 00 mov %rsi,0x75a0(%rbp)
return lhSize+litSize;
48a1: e9 01 fe ff ff jmpq 46a7 <ZSTD_decodeLiteralsBlock+0x87>
48a6: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1)
48ad: 00 00 00
return (U32)MEM_readLE16(memPtr) + ((U32)(((const BYTE*)memPtr)[2]) << 16);
48b0: 0f b6 5e 02 movzbl 0x2(%rsi),%ebx
48b4: 0f b7 06 movzwl (%rsi),%eax
48b7: c1 e3 10 shl $0x10,%ebx
48ba: 01 c3 add %eax,%ebx
lhSize = 3;
48bc: b8 03 00 00 00 mov $0x3,%eax
litSize = MEM_readLE24(istart) >> 4;
48c1: c1 eb 04 shr $0x4,%ebx
break;
48c4: e9 b5 fd ff ff jmpq 467e <ZSTD_decodeLiteralsBlock+0x5e>
48c9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
48d0: 0f b6 5e 02 movzbl 0x2(%rsi),%ebx
48d4: 0f b7 06 movzwl (%rsi),%eax
48d7: c1 e3 10 shl $0x10,%ebx
48da: 01 c3 add %eax,%ebx
litSize = MEM_readLE24(istart) >> 4;
48dc: c1 eb 04 shr $0x4,%ebx
RETURN_ERROR_IF(litSize > ZSTD_BLOCKSIZE_MAX, corruption_detected, "");
48df: 48 81 fb 00 00 02 00 cmp $0x20000,%rbx
48e6: 0f 87 b4 fd ff ff ja 46a0 <ZSTD_decodeLiteralsBlock+0x80>
48ec: 48 83 ff 03 cmp $0x3,%rdi
48f0: 0f 84 aa fd ff ff je 46a0 <ZSTD_decodeLiteralsBlock+0x80>
48f6: 41 bc 04 00 00 00 mov $0x4,%r12d
lhSize = 3;
48fc: b8 03 00 00 00 mov $0x3,%eax
4901: e9 5d ff ff ff jmpq 4863 <ZSTD_decodeLiteralsBlock+0x243>
4906: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1)
490d: 00 00 00
litSize = MEM_readLE16(istart) >> 4;
4910: 0f b7 1e movzwl (%rsi),%ebx
break;
4913: 41 bc 03 00 00 00 mov $0x3,%r12d
lhSize = 2;
4919: b8 02 00 00 00 mov $0x2,%eax
litSize = MEM_readLE16(istart) >> 4;
491e: 66 c1 eb 04 shr $0x4,%bx
4922: 0f b7 db movzwl %bx,%ebx
break;
4925: e9 39 ff ff ff jmpq 4863 <ZSTD_decodeLiteralsBlock+0x243>
492a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1)
if (singleStream) {
4930: 85 d2 test %edx,%edx
PREFETCH_AREA(dctx->HUFptr, sizeof(dctx->entropy.hufTable));
4932: 4c 8b 45 18 mov 0x18(%rbp),%r8
hufSuccess = HUF_decompress1X_usingDTable_bmi2(
4936: 41 89 c1 mov %eax,%r9d
4939: 4c 89 d2 mov %r10,%rdx
493c: 4c 89 ee mov %r13,%rsi
493f: 4c 89 f7 mov %r14,%rdi
if (singleStream) {
4942: 0f 85 91 00 00 00 jne 49d9 <ZSTD_decodeLiteralsBlock+0x3b9>
hufSuccess = HUF_decompress4X_usingDTable_bmi2(
4948: e8 00 00 00 00 callq 494d <ZSTD_decodeLiteralsBlock+0x32d>
RETURN_ERROR_IF(HUF_isError(hufSuccess), corruption_detected, "");
494d: 48 83 f8 88 cmp $0xffffffffffffff88,%rax
4951: 0f 87 49 fd ff ff ja 46a0 <ZSTD_decodeLiteralsBlock+0x80>
dctx->litPtr = dctx->litBuffer;
4957: 4c 89 b5 a0 75 00 00 mov %r14,0x75a0(%rbp)
dctx->litSize = litSize;
495e: 4c 89 ad c0 75 00 00 mov %r13,0x75c0(%rbp)
dctx->litEntropy = 1;
4965: c7 85 28 75 00 00 01 movl $0x1,0x7528(%rbp)
496c: 00 00 00
if (litEncType==set_compressed) dctx->HUFptr = dctx->entropy.hufTable;
496f: e9 39 fe ff ff jmpq 47ad <ZSTD_decodeLiteralsBlock+0x18d>
4974: 0f 1f 40 00 nopl 0x0(%rax)
hufSuccess = HUF_decompress4X_hufOnly_wksp_bmi2(
4978: 50 push %rax
4979: 49 89 c8 mov %rcx,%r8
497c: 4c 89 ea mov %r13,%rdx
497f: 4c 89 d1 mov %r10,%rcx
4982: 68 00 0a 00 00 pushq $0xa00
4987: 4c 89 f6 mov %r14,%rsi
498a: 4c 89 ff mov %r15,%rdi
498d: e8 00 00 00 00 callq 4992 <ZSTD_decodeLiteralsBlock+0x372>
4992: 5a pop %rdx
4993: 59 pop %rcx
4994: e9 e9 fd ff ff jmpq 4782 <ZSTD_decodeLiteralsBlock+0x162>
4999: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
ZSTD_memcpy(dctx->litBuffer, istart+lhSize, litSize);
49a0: 48 8d 8d 90 76 00 00 lea 0x7690(%rbp),%rcx
49a7: 48 01 c6 add %rax,%rsi
49aa: 48 89 da mov %rbx,%rdx
49ad: 48 89 cf mov %rcx,%rdi
49b0: e8 00 00 00 00 callq 49b5 <ZSTD_decodeLiteralsBlock+0x395>
ZSTD_memset(dctx->litBuffer + dctx->litSize, 0, WILDCOPY_OVERLENGTH);
49b5: 66 0f ef c0 pxor %xmm0,%xmm0
dctx->litSize = litSize;
49b9: 48 89 9d c0 75 00 00 mov %rbx,0x75c0(%rbp)
ZSTD_memcpy(dctx->litBuffer, istart+lhSize, litSize);
49c0: 48 89 c1 mov %rax,%rcx
dctx->litPtr = dctx->litBuffer;
49c3: 48 89 85 a0 75 00 00 mov %rax,0x75a0(%rbp)
ZSTD_memset(dctx->litBuffer + dctx->litSize, 0, WILDCOPY_OVERLENGTH);
49ca: 48 01 d9 add %rbx,%rcx
49cd: 0f 11 01 movups %xmm0,(%rcx)
49d0: 0f 11 41 10 movups %xmm0,0x10(%rcx)
return lhSize+litSize;
49d4: e9 ce fc ff ff jmpq 46a7 <ZSTD_decodeLiteralsBlock+0x87>
hufSuccess = HUF_decompress1X_usingDTable_bmi2(
49d9: e8 00 00 00 00 callq 49de <ZSTD_decodeLiteralsBlock+0x3be>
49de: e9 6a ff ff ff jmpq 494d <ZSTD_decodeLiteralsBlock+0x32d>
PREFETCH_AREA(dctx->HUFptr, sizeof(dctx->entropy.hufTable));
49e3: 48 8b 45 18 mov 0x18(%rbp),%rax
49e7: 48 8d b8 40 40 00 00 lea 0x4040(%rax),%rdi
49ee: 66 90 xchg %ax,%ax
49f0: 0f 18 10 prefetcht1 (%rax)
49f3: 48 83 c0 40 add $0x40,%rax
49f7: 48 39 c7 cmp %rax,%rdi
49fa: 75 f4 jne 49f0 <ZSTD_decodeLiteralsBlock+0x3d0>
49fc: e9 35 fd ff ff jmpq 4736 <ZSTD_decodeLiteralsBlock+0x116>
4a01: 66 66 2e 0f 1f 84 00 data16 nopw %cs:0x0(%rax,%rax,1)
4a08: 00 00 00 00
4a0c: 66 66 2e 0f 1f 84 00 data16 nopw %cs:0x0(%rax,%rax,1)
4a13: 00 00 00 00
4a17: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1)
4a1e: 00 00
0000000000004a20 <ZSTD_buildFSETable>:
{
4a20: 41 57 push %r15
4a22: 41 89 d7 mov %edx,%r15d
4a25: 41 56 push %r14
4a27: 41 55 push %r13
4a29: 4d 89 c5 mov %r8,%r13
4a2c: 41 54 push %r12
4a2e: 49 89 cc mov %rcx,%r12
4a31: 55 push %rbp
4a32: 48 89 f5 mov %rsi,%rbp
4a35: 53 push %rbx
if (bmi2) {
4a36: 44 8b 54 24 48 mov 0x48(%rsp),%r10d
{
4a3b: 4c 8b 74 24 38 mov 0x38(%rsp),%r14
4a40: 48 89 7c 24 d0 mov %rdi,-0x30(%rsp)
4a45: 44 89 4c 24 dc mov %r9d,-0x24(%rsp)
if (bmi2) {
4a4a: 45 85 d2 test %r10d,%r10d
4a4d: 0f 85 af 01 00 00 jne 4c02 <ZSTD_buildFSETable+0x1e2>
4a53: 44 89 ce mov %r9d,%esi
U32 const tableSize = 1 << tableLog;
4a56: b8 01 00 00 00 mov $0x1,%eax
ZSTD_seqSymbol* const tableDecode = dt+1;
4a5b: 4c 8d 4f 08 lea 0x8(%rdi),%r9
U32 const tableSize = 1 << tableLog;
4a5f: 89 f1 mov %esi,%ecx
4a61: 89 c3 mov %eax,%ebx
BYTE* spread = (BYTE*)(symbolNext + MaxSeq + 1);
4a63: 49 8d 7e 6a lea 0x6a(%r14),%rdi
U32 const tableSize = 1 << tableLog;
4a67: d3 e3 shl %cl,%ebx
DTableH.fastMode = 1;
4a69: 48 89 f1 mov %rsi,%rcx
4a6c: 48 c1 e1 20 shl $0x20,%rcx
U32 const tableSize = 1 << tableLog;
4a70: 89 5c 24 f0 mov %ebx,-0x10(%rsp)
U32 highThreshold = tableSize - 1;
4a74: 8d 53 ff lea -0x1(%rbx),%edx
DTableH.fastMode = 1;
4a77: 48 83 c9 01 or $0x1,%rcx
4a7b: 48 89 4c 24 e8 mov %rcx,-0x18(%rsp)
4a80: 48 89 4c 24 e0 mov %rcx,-0x20(%rsp)
{ S16 const largeLimit= (S16)(1 << (tableLog-1));
4a85: 8d 4e ff lea -0x1(%rsi),%ecx
4a88: d3 e0 shl %cl,%eax
size_t const step = FSE_TABLESTEP(tableSize);
4a8a: 89 d9 mov %ebx,%ecx
4a8c: c1 eb 03 shr $0x3,%ebx
4a8f: d1 e9 shr %ecx
{ S16 const largeLimit= (S16)(1 << (tableLog-1));
4a91: 41 89 c0 mov %eax,%r8d
size_t const step = FSE_TABLESTEP(tableSize);
4a94: 8d 74 19 03 lea 0x3(%rcx,%rbx,1),%esi
for (s=0; s<maxSV1; s++) {
4a98: 41 83 ff ff cmp $0xffffffff,%r15d
4a9c: 0f 84 73 02 00 00 je 4d15 <ZSTD_buildFSETable+0x2f5>
4aa2: 89 54 24 f4 mov %edx,-0xc(%rsp)
U32 highThreshold = tableSize - 1;
4aa6: 89 d1 mov %edx,%ecx
for (s=0; s<maxSV1; s++) {
4aa8: 31 c0 xor %eax,%eax
4aaa: 45 31 db xor %r11d,%r11d
4aad: 41 ba 01 00 00 00 mov $0x1,%r10d
if (normalizedCounter[s] >= largeLimit) DTableH.fastMode=0;
4ab3: 31 db xor %ebx,%ebx
4ab5: 44 89 c2 mov %r8d,%edx
4ab8: eb 25 jmp 4adf <ZSTD_buildFSETable+0xbf>
4aba: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1)
4ac0: 66 44 39 c2 cmp %r8w,%dx
symbolNext[s] = (U16)normalizedCounter[s];
4ac4: 66 45 89 04 46 mov %r8w,(%r14,%rax,2)
4ac9: 41 bb 01 00 00 00 mov $0x1,%r11d
for (s=0; s<maxSV1; s++) {
4acf: 4c 8d 40 01 lea 0x1(%rax),%r8
if (normalizedCounter[s] >= largeLimit) DTableH.fastMode=0;
4ad3: 4c 0f 4e d3 cmovle %rbx,%r10
for (s=0; s<maxSV1; s++) {
4ad7: 49 39 c7 cmp %rax,%r15
4ada: 74 2f je 4b0b <ZSTD_buildFSETable+0xeb>
4adc: 4c 89 c0 mov %r8,%rax
if (normalizedCounter[s]==-1) {
4adf: 44 0f b7 44 45 00 movzwl 0x0(%rbp,%rax,2),%r8d
4ae5: 66 41 83 f8 ff cmp $0xffff,%r8w
4aea: 75 d4 jne 4ac0 <ZSTD_buildFSETable+0xa0>
tableDecode[highThreshold--].baseValue = s;
4aec: 41 89 c8 mov %ecx,%r8d
4aef: 83 e9 01 sub $0x1,%ecx
4af2: 43 89 44 c1 04 mov %eax,0x4(%r9,%r8,8)
symbolNext[s] = 1;
4af7: 41 b8 01 00 00 00 mov $0x1,%r8d
4afd: 66 45 89 04 46 mov %r8w,(%r14,%rax,2)
for (s=0; s<maxSV1; s++) {
4b02: 4c 8d 40 01 lea 0x1(%rax),%r8
4b06: 49 39 c7 cmp %rax,%r15
4b09: 75 d1 jne 4adc <ZSTD_buildFSETable+0xbc>
4b0b: 8b 54 24 f4 mov -0xc(%rsp),%edx
4b0f: 45 84 db test %r11b,%r11b
4b12: 74 17 je 4b2b <ZSTD_buildFSETable+0x10b>
4b14: 48 b8 00 00 00 00 ff movabs $0xffffffff00000000,%rax
4b1b: ff ff ff
4b1e: 48 23 44 24 e8 and -0x18(%rsp),%rax
4b23: 4c 09 d0 or %r10,%rax
4b26: 48 89 44 24 e0 mov %rax,-0x20(%rsp)
ZSTD_memcpy(dt, &DTableH, sizeof(DTableH));
4b2b: 48 8b 44 24 d0 mov -0x30(%rsp),%rax
4b30: 48 8b 5c 24 e0 mov -0x20(%rsp),%rbx
4b35: 48 89 18 mov %rbx,(%rax)
if (highThreshold == tableSize - 1) {
4b38: 39 ca cmp %ecx,%edx
4b3a: 0f 84 d4 00 00 00 je 4c14 <ZSTD_buildFSETable+0x1f4>
4b40: 31 db xor %ebx,%ebx
U32 s, position = 0;
4b42: 31 c0 xor %eax,%eax
4b44: 0f 1f 40 00 nopl 0x0(%rax)
int const n = normalizedCounter[s];
4b48: 44 0f bf 44 5d 00 movswl 0x0(%rbp,%rbx,2),%r8d
4b4e: 41 89 da mov %ebx,%r10d
for (i=0; i<n; i++) {
4b51: 45 85 c0 test %r8d,%r8d
4b54: 7e 2a jle 4b80 <ZSTD_buildFSETable+0x160>
4b56: 31 ff xor %edi,%edi
4b58: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1)
4b5f: 00
tableDecode[position].baseValue = s;
4b60: 41 89 c3 mov %eax,%r11d
4b63: 47 89 54 d9 04 mov %r10d,0x4(%r9,%r11,8)
4b68: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1)
4b6f: 00
position = (position + step) & tableMask;
4b70: 01 f0 add %esi,%eax
4b72: 21 d0 and %edx,%eax
while (position > highThreshold) position = (position + step) & tableMask; /* lowprob area */
4b74: 39 c8 cmp %ecx,%eax
4b76: 77 f8 ja 4b70 <ZSTD_buildFSETable+0x150>
for (i=0; i<n; i++) {
4b78: 83 c7 01 add $0x1,%edi
4b7b: 41 39 f8 cmp %edi,%r8d
4b7e: 75 e0 jne 4b60 <ZSTD_buildFSETable+0x140>
for (s=0; s<maxSV1; s++) {
4b80: 48 8d 7b 01 lea 0x1(%rbx),%rdi
4b84: 49 39 df cmp %rbx,%r15
4b87: 74 05 je 4b8e <ZSTD_buildFSETable+0x16e>
4b89: 48 89 fb mov %rdi,%rbx
4b8c: eb ba jmp 4b48 <ZSTD_buildFSETable+0x128>
for (u=0; u<tableSize; u++) {
4b8e: 8b 44 24 f0 mov -0x10(%rsp),%eax
4b92: 85 c0 test %eax,%eax
4b94: 74 61 je 4bf7 <ZSTD_buildFSETable+0x1d7>
tableDecode[u].nextState = (U16) ( (nextState << tableDecode[u].nbBits) - tableSize);
4b96: 44 8b 54 24 f0 mov -0x10(%rsp),%r10d
tableDecode[u].nbBits = (BYTE) (tableLog - BIT_highbit32(nextState) );
4b9b: 44 0f b6 44 24 dc movzbl -0x24(%rsp),%r8d
tableDecode[u].nextState = (U16) ( (nextState << tableDecode[u].nbBits) - tableSize);
4ba1: 31 f6 xor %esi,%esi
4ba3: 44 89 d7 mov %r10d,%edi
4ba6: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1)
4bad: 00 00 00
U32 const nextState = symbolNext[symbol]++;
4bb0: 41 8b 51 04 mov 0x4(%r9),%edx
for (u=0; u<tableSize; u++) {
4bb4: 83 c6 01 add $0x1,%esi
4bb7: 49 83 c1 08 add $0x8,%r9
U32 const nextState = symbolNext[symbol]++;
4bbb: 49 8d 0c 56 lea (%r14,%rdx,2),%rcx
4bbf: 0f b7 01 movzwl (%rcx),%eax
4bc2: 44 8d 58 01 lea 0x1(%rax),%r11d
4bc6: 66 44 89 19 mov %r11w,(%rcx)
return __builtin_clz (val) ^ 31;
4bca: 44 0f bd d8 bsr %eax,%r11d
tableDecode[u].nbBits = (BYTE) (tableLog - BIT_highbit32(nextState) );
4bce: 44 89 c1 mov %r8d,%ecx
4bd1: 44 29 d9 sub %r11d,%ecx
tableDecode[u].nextState = (U16) ( (nextState << tableDecode[u].nbBits) - tableSize);
4bd4: d3 e0 shl %cl,%eax
tableDecode[u].nbBits = (BYTE) (tableLog - BIT_highbit32(nextState) );
4bd6: 41 88 49 fb mov %cl,-0x5(%r9)
tableDecode[u].nextState = (U16) ( (nextState << tableDecode[u].nbBits) - tableSize);
4bda: 29 f8 sub %edi,%eax
4bdc: 66 41 89 41 f8 mov %ax,-0x8(%r9)
tableDecode[u].nbAdditionalBits = (BYTE)nbAdditionalBits[symbol];
4be1: 41 8b 44 95 00 mov 0x0(%r13,%rdx,4),%eax
4be6: 41 88 41 fa mov %al,-0x6(%r9)
tableDecode[u].baseValue = baseValue[symbol];
4bea: 41 8b 04 94 mov (%r12,%rdx,4),%eax
4bee: 41 89 41 fc mov %eax,-0x4(%r9)
for (u=0; u<tableSize; u++) {
4bf2: 41 39 f2 cmp %esi,%r10d
4bf5: 77 b9 ja 4bb0 <ZSTD_buildFSETable+0x190>
}
4bf7: 5b pop %rbx
4bf8: 5d pop %rbp
4bf9: 41 5c pop %r12
4bfb: 41 5d pop %r13
4bfd: 41 5e pop %r14
4bff: 41 5f pop %r15
4c01: c3 retq
4c02: 5b pop %rbx
ZSTD_buildFSETable_body_bmi2(dt, normalizedCounter, maxSymbolValue,
4c03: 44 89 fa mov %r15d,%edx
}
4c06: 5d pop %rbp
4c07: 41 5c pop %r12
4c09: 41 5d pop %r13
4c0b: 41 5e pop %r14
4c0d: 41 5f pop %r15
ZSTD_buildFSETable_body_bmi2(dt, normalizedCounter, maxSymbolValue,
4c0f: e9 0c bb ff ff jmpq 720 <ZSTD_buildFSETable_body_bmi2.constprop.0>
for (s=0; s<maxSV1; ++s, sv += add) {
4c14: 4a 8d 44 7d 00 lea 0x0(%rbp,%r15,2),%rax
4c19: 48 89 54 24 d0 mov %rdx,-0x30(%rsp)
size_t const step = FSE_TABLESTEP(tableSize);
4c1e: 45 31 c0 xor %r8d,%r8d
4c21: 31 c9 xor %ecx,%ecx
for (s=0; s<maxSV1; ++s, sv += add) {
4c23: 49 bf 01 01 01 01 01 movabs $0x101010101010101,%r15
4c2a: 01 01 01
4c2d: 48 89 c2 mov %rax,%rdx
int const n = normalizedCounter[s];
4c30: 4c 0f bf 55 00 movswq 0x0(%rbp),%r10
MEM_STATIC void MEM_write64(void* memPtr, U64 value) { ((unalign64*)memPtr)->v = value; }
4c35: 4c 89 04 0f mov %r8,(%rdi,%rcx,1)
for (i = 8; i < n; i += 8) {
4c39: 66 41 83 fa 08 cmp $0x8,%r10w
4c3e: 7e 60 jle 4ca0 <ZSTD_buildFSETable+0x280>
4c40: 41 0f bf c2 movswl %r10w,%eax
4c44: 83 e8 09 sub $0x9,%eax
4c47: 41 89 c3 mov %eax,%r11d
4c4a: 41 c1 eb 03 shr $0x3,%r11d
4c4e: 41 83 c3 01 add $0x1,%r11d
4c52: 83 f8 07 cmp $0x7,%eax
4c55: 0f 86 b3 00 00 00 jbe 4d0e <ZSTD_buildFSETable+0x2ee>
4c5b: 44 89 db mov %r11d,%ebx
4c5e: 66 49 0f 6e c0 movq %r8,%xmm0
4c63: 49 8d 44 0e 72 lea 0x72(%r14,%rcx,1),%rax
4c68: d1 eb shr %ebx
4c6a: 66 0f 6c c0 punpcklqdq %xmm0,%xmm0
4c6e: 48 c1 e3 04 shl $0x4,%rbx
4c72: 48 01 c3 add %rax,%rbx
4c75: 0f 1f 00 nopl (%rax)
4c78: 0f 11 00 movups %xmm0,(%rax)
4c7b: 48 83 c0 10 add $0x10,%rax
4c7f: 48 39 c3 cmp %rax,%rbx
4c82: 75 f4 jne 4c78 <ZSTD_buildFSETable+0x258>
4c84: 44 89 db mov %r11d,%ebx
4c87: 83 e3 fe and $0xfffffffe,%ebx
4c8a: 8d 04 dd 08 00 00 00 lea 0x8(,%rbx,8),%eax
4c91: 44 39 db cmp %r11d,%ebx
4c94: 74 0a je 4ca0 <ZSTD_buildFSETable+0x280>
MEM_write64(spread + pos + i, sv);
4c96: 48 98 cltq
4c98: 4c 8d 1c 0f lea (%rdi,%rcx,1),%r11
4c9c: 4d 89 04 03 mov %r8,(%r11,%rax,1)
pos += n;
4ca0: 4c 01 d1 add %r10,%rcx
for (s=0; s<maxSV1; ++s, sv += add) {
4ca3: 4d 01 f8 add %r15,%r8
4ca6: 48 8d 45 02 lea 0x2(%rbp),%rax
4caa: 48 39 ea cmp %rbp,%rdx
4cad: 74 08 je 4cb7 <ZSTD_buildFSETable+0x297>
4caf: 48 89 c5 mov %rax,%rbp
4cb2: e9 79 ff ff ff jmpq 4c30 <ZSTD_buildFSETable+0x210>
4cb7: 48 8b 54 24 d0 mov -0x30(%rsp),%rdx
for (s = 0; s < (size_t)tableSize; s += unroll) {
4cbc: 8b 44 24 f0 mov -0x10(%rsp),%eax
4cc0: 48 85 c0 test %rax,%rax
4cc3: 0f 84 2e ff ff ff je 4bf7 <ZSTD_buildFSETable+0x1d7>
4cc9: 48 83 e8 01 sub $0x1,%rax
4ccd: 48 83 e0 fe and $0xfffffffffffffffe,%rax
4cd1: 4d 8d 54 06 6c lea 0x6c(%r14,%rax,1),%r10
size_t position = 0;
4cd6: 31 c0 xor %eax,%eax
tableDecode[uPosition].baseValue = spread[s + u];
4cd8: 44 0f b6 07 movzbl (%rdi),%r8d
size_t const uPosition = (position + (u * step)) & tableMask;
4cdc: 48 89 d1 mov %rdx,%rcx
for (s = 0; s < (size_t)tableSize; s += unroll) {
4cdf: 48 83 c7 02 add $0x2,%rdi
size_t const uPosition = (position + (u * step)) & tableMask;
4ce3: 48 21 c1 and %rax,%rcx
4ce6: 48 01 f0 add %rsi,%rax
tableDecode[uPosition].baseValue = spread[s + u];
4ce9: 45 89 44 c9 04 mov %r8d,0x4(%r9,%rcx,8)
size_t const uPosition = (position + (u * step)) & tableMask;
4cee: 48 89 d1 mov %rdx,%rcx
tableDecode[uPosition].baseValue = spread[s + u];
4cf1: 44 0f b6 47 ff movzbl -0x1(%rdi),%r8d
size_t const uPosition = (position + (u * step)) & tableMask;
4cf6: 48 21 c1 and %rax,%rcx
position = (position + (unroll * step)) & tableMask;
4cf9: 48 01 f0 add %rsi,%rax
tableDecode[uPosition].baseValue = spread[s + u];
4cfc: 45 89 44 c9 04 mov %r8d,0x4(%r9,%rcx,8)
position = (position + (unroll * step)) & tableMask;
4d01: 48 21 d0 and %rdx,%rax
for (s = 0; s < (size_t)tableSize; s += unroll) {
4d04: 49 39 fa cmp %rdi,%r10
4d07: 75 cf jne 4cd8 <ZSTD_buildFSETable+0x2b8>
4d09: e9 88 fe ff ff jmpq 4b96 <ZSTD_buildFSETable+0x176>
for (i = 8; i < n; i += 8) {
4d0e: b8 08 00 00 00 mov $0x8,%eax
4d13: eb 81 jmp 4c96 <ZSTD_buildFSETable+0x276>
ZSTD_memcpy(dt, &DTableH, sizeof(DTableH));
4d15: 48 8b 44 24 d0 mov -0x30(%rsp),%rax
4d1a: 48 8b 5c 24 e8 mov -0x18(%rsp),%rbx
4d1f: 48 89 18 mov %rbx,(%rax)
for (s=0; s<maxSV1; ++s, sv += add) {
4d22: eb 98 jmp 4cbc <ZSTD_buildFSETable+0x29c>
4d24: 66 66 2e 0f 1f 84 00 data16 nopw %cs:0x0(%rax,%rax,1)
4d2b: 00 00 00 00
4d2f: 66 66 2e 0f 1f 84 00 data16 nopw %cs:0x0(%rax,%rax,1)
4d36: 00 00 00 00
4d3a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1)
0000000000004d40 <ZSTD_buildSeqTable.constprop.0>:
static size_t ZSTD_buildSeqTable(ZSTD_seqSymbol* DTableSpace, const ZSTD_seqSymbol** DTablePtr,
4d40: 41 55 push %r13
4d42: 41 54 push %r12
4d44: 45 89 c4 mov %r8d,%r12d
4d47: 55 push %rbp
4d48: 48 89 f5 mov %rsi,%rbp
4d4b: 53 push %rbx
4d4c: 48 89 fb mov %rdi,%rbx
4d4f: 48 81 ec 98 00 00 00 sub $0x98,%rsp
4d56: 89 4c 24 0c mov %ecx,0xc(%rsp)
switch(type)
4d5a: 83 fa 02 cmp $0x2,%edx
4d5d: 74 31 je 4d90 <ZSTD_buildSeqTable.constprop.0+0x50>
4d5f: 83 fa 03 cmp $0x3,%edx
4d62: 0f 84 30 01 00 00 je 4e98 <ZSTD_buildSeqTable.constprop.0+0x158>
4d68: 83 fa 01 cmp $0x1,%edx
4d6b: 0f 84 af 00 00 00 je 4e20 <ZSTD_buildSeqTable.constprop.0+0xe0>
*DTablePtr = defaultTable;
4d71: 48 8b 84 24 d8 00 00 mov 0xd8(%rsp),%rax
4d78: 00
4d79: 48 89 06 mov %rax,(%rsi)
return 0;
4d7c: 31 c0 xor %eax,%eax
}
4d7e: 48 81 c4 98 00 00 00 add $0x98,%rsp
4d85: 5b pop %rbx
4d86: 5d pop %rbp
4d87: 41 5c pop %r12
4d89: 41 5d pop %r13
4d8b: c3 retq
4d8c: 0f 1f 40 00 nopl 0x0(%rax)
size_t const headerSize = FSE_readNCount(norm, &max, &tableLog, src, srcSize);
4d90: 4c 8b 84 24 c0 00 00 mov 0xc0(%rsp),%r8
4d97: 00
4d98: 4c 8d 6c 24 20 lea 0x20(%rsp),%r13
4d9d: 48 8d 54 24 1c lea 0x1c(%rsp),%rdx
4da2: 4c 89 c9 mov %r9,%rcx
4da5: 48 8d 74 24 0c lea 0xc(%rsp),%rsi
4daa: 4c 89 ef mov %r13,%rdi
4dad: e8 00 00 00 00 callq 4db2 <ZSTD_buildSeqTable.constprop.0+0x72>
RETURN_ERROR_IF(FSE_isError(headerSize), corruption_detected, "");
4db2: 48 83 f8 88 cmp $0xffffffffffffff88,%rax
4db6: 48 89 04 24 mov %rax,(%rsp)
4dba: 0f 87 40 01 00 00 ja 4f00 <ZSTD_buildSeqTable.constprop.0+0x1c0>
RETURN_ERROR_IF(tableLog > maxLog, corruption_detected, "");
4dc0: 44 8b 4c 24 1c mov 0x1c(%rsp),%r9d
4dc5: 45 39 cc cmp %r9d,%r12d
4dc8: 0f 82 32 01 00 00 jb 4f00 <ZSTD_buildSeqTable.constprop.0+0x1c0>
ZSTD_buildFSETable(DTableSpace, norm, max, baseValue, nbAdditionalBits, tableLog, wksp, wkspSize, bmi2);
4dce: 48 83 ec 08 sub $0x8,%rsp
4dd2: 4c 89 ee mov %r13,%rsi
4dd5: 48 89 df mov %rbx,%rdi
4dd8: 8b 94 24 08 01 00 00 mov 0x108(%rsp),%edx
4ddf: 52 push %rdx
4de0: 68 00 0a 00 00 pushq $0xa00
4de5: ff b4 24 10 01 00 00 pushq 0x110(%rsp)
4dec: 4c 8b 84 24 f0 00 00 mov 0xf0(%rsp),%r8
4df3: 00
4df4: 48 8b 8c 24 e8 00 00 mov 0xe8(%rsp),%rcx
4dfb: 00
4dfc: 8b 54 24 2c mov 0x2c(%rsp),%edx
4e00: e8 00 00 00 00 callq 4e05 <ZSTD_buildSeqTable.constprop.0+0xc5>
return headerSize;
4e05: 48 83 c4 20 add $0x20,%rsp
*DTablePtr = DTableSpace;
4e09: 48 89 5d 00 mov %rbx,0x0(%rbp)
return headerSize;
4e0d: 48 8b 04 24 mov (%rsp),%rax
4e11: e9 68 ff ff ff jmpq 4d7e <ZSTD_buildSeqTable.constprop.0+0x3e>
4e16: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1)
4e1d: 00 00 00
RETURN_ERROR_IF(!srcSize, srcSize_wrong, "");
4e20: 48 83 bc 24 c0 00 00 cmpq $0x0,0xc0(%rsp)
4e27: 00 00
4e29: 48 c7 c0 b8 ff ff ff mov $0xffffffffffffffb8,%rax
4e30: 0f 84 48 ff ff ff je 4d7e <ZSTD_buildSeqTable.constprop.0+0x3e>
RETURN_ERROR_IF((*(const BYTE*)src) > max, corruption_detected, "");
4e36: 41 0f b6 09 movzbl (%r9),%ecx
4e3a: 48 c7 c0 ec ff ff ff mov $0xffffffffffffffec,%rax
4e41: 48 89 ca mov %rcx,%rdx
4e44: 3b 4c 24 0c cmp 0xc(%rsp),%ecx
4e48: 0f 87 30 ff ff ff ja 4d7e <ZSTD_buildSeqTable.constprop.0+0x3e>
U32 const baseline = baseValue[symbol];
4e4e: 48 8b 84 24 c8 00 00 mov 0xc8(%rsp),%rax
4e55: 00
4e56: 8b 04 88 mov (%rax,%rcx,4),%eax
U32 const nbBits = nbAdditionalBits[symbol];
4e59: 48 8b 8c 24 d0 00 00 mov 0xd0(%rsp),%rcx
4e60: 00
4e61: 8b 14 91 mov (%rcx,%rdx,4),%edx
cell->nextState = 0;
4e64: 31 c9 xor %ecx,%ecx
cell->baseValue = baseValue;
4e66: 89 47 0c mov %eax,0xc(%rdi)
return 1;
4e69: b8 01 00 00 00 mov $0x1,%eax
DTableH->fastMode = 0;
4e6e: 48 c7 07 00 00 00 00 movq $0x0,(%rdi)
cell->nbBits = 0;
4e75: c6 47 0b 00 movb $0x0,0xb(%rdi)
cell->nextState = 0;
4e79: 66 89 4f 08 mov %cx,0x8(%rdi)
cell->nbAdditionalBits = (BYTE)nbAddBits;
4e7d: 88 57 0a mov %dl,0xa(%rdi)
*DTablePtr = DTableSpace;
4e80: 48 89 7d 00 mov %rdi,0x0(%rbp)
}
4e84: 48 81 c4 98 00 00 00 add $0x98,%rsp
4e8b: 5b pop %rbx
4e8c: 5d pop %rbp
4e8d: 41 5c pop %r12
4e8f: 41 5d pop %r13
4e91: c3 retq
4e92: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1)
RETURN_ERROR_IF(!flagRepeatTable, corruption_detected, "");
4e98: 8b 94 24 e0 00 00 00 mov 0xe0(%rsp),%edx
RETURN_ERROR_IF((*(const BYTE*)src) > max, corruption_detected, "");
4e9f: 48 c7 c0 ec ff ff ff mov $0xffffffffffffffec,%rax
RETURN_ERROR_IF(!flagRepeatTable, corruption_detected, "");
4ea6: 85 d2 test %edx,%edx
4ea8: 0f 84 d0 fe ff ff je 4d7e <ZSTD_buildSeqTable.constprop.0+0x3e>
if (ddictIsCold && (nbSeq > 24 /* heuristic */)) {
4eae: 8b 84 24 e8 00 00 00 mov 0xe8(%rsp),%eax
4eb5: 85 c0 test %eax,%eax
4eb7: 74 34 je 4eed <ZSTD_buildSeqTable.constprop.0+0x1ad>
4eb9: 83 bc 24 f0 00 00 00 cmpl $0x18,0xf0(%rsp)
4ec0: 18
4ec1: 7e 2a jle 4eed <ZSTD_buildSeqTable.constprop.0+0x1ad>
size_t const pSize = sizeof(ZSTD_seqSymbol) * (SEQSYMBOL_TABLE_SIZE(maxLog));
4ec3: ba 01 00 00 00 mov $0x1,%edx
4ec8: 44 89 c1 mov %r8d,%ecx
const void* const pStart = *DTablePtr;
4ecb: 48 8b 36 mov (%rsi),%rsi
PREFETCH_AREA(pStart, pSize);
4ece: 31 c0 xor %eax,%eax
size_t const pSize = sizeof(ZSTD_seqSymbol) * (SEQSYMBOL_TABLE_SIZE(maxLog));
4ed0: d3 e2 shl %cl,%edx
4ed2: 83 c2 01 add $0x1,%edx
4ed5: 48 63 d2 movslq %edx,%rdx
4ed8: 48 c1 e2 03 shl $0x3,%rdx
PREFETCH_AREA(pStart, pSize);
4edc: 0f 1f 40 00 nopl 0x0(%rax)
4ee0: 0f 18 14 06 prefetcht1 (%rsi,%rax,1)
4ee4: 48 83 c0 40 add $0x40,%rax
4ee8: 48 39 c2 cmp %rax,%rdx
4eeb: 77 f3 ja 4ee0 <ZSTD_buildSeqTable.constprop.0+0x1a0>
}
4eed: 48 81 c4 98 00 00 00 add $0x98,%rsp
return 0;
4ef4: 31 c0 xor %eax,%eax
}
4ef6: 5b pop %rbx
4ef7: 5d pop %rbp
4ef8: 41 5c pop %r12
4efa: 41 5d pop %r13
4efc: c3 retq
4efd: 0f 1f 00 nopl (%rax)
4f00: 48 81 c4 98 00 00 00 add $0x98,%rsp
RETURN_ERROR_IF(FSE_isError(headerSize), corruption_detected, "");
4f07: 48 c7 c0 ec ff ff ff mov $0xffffffffffffffec,%rax
}
4f0e: 5b pop %rbx
4f0f: 5d pop %rbp
4f10: 41 5c pop %r12
4f12: 41 5d pop %r13
4f14: c3 retq
4f15: 66 66 2e 0f 1f 84 00 data16 nopw %cs:0x0(%rax,%rax,1)
4f1c: 00 00 00 00
0000000000004f20 <ZSTD_decodeSeqHeaders>:
RETURN_ERROR_IF(srcSize < MIN_SEQUENCES_SIZE, srcSize_wrong, "");
4f20: 48 85 c9 test %rcx,%rcx
4f23: 0f 84 d7 01 00 00 je 5100 <ZSTD_decodeSeqHeaders+0x1e0>
{
4f29: 41 57 push %r15
4f2b: 41 56 push %r14
4f2d: 41 55 push %r13
4f2f: 41 54 push %r12
4f31: 49 89 d4 mov %rdx,%r12
4f34: 55 push %rbp
4f35: 53 push %rbx
4f36: 48 81 ec b8 00 00 00 sub $0xb8,%rsp
nbSeq = *ip++;
4f3d: 44 0f b6 2a movzbl (%rdx),%r13d
if (!nbSeq) {
4f41: 45 85 ed test %r13d,%r13d
4f44: 75 2a jne 4f70 <ZSTD_decodeSeqHeaders+0x50>
*nbSeqPtr=0;
4f46: c7 06 00 00 00 00 movl $0x0,(%rsi)
return 1;
4f4c: b8 01 00 00 00 mov $0x1,%eax
RETURN_ERROR_IF(srcSize != 1, srcSize_wrong, "");
4f51: 48 83 f9 01 cmp $0x1,%rcx
4f55: 74 07 je 4f5e <ZSTD_decodeSeqHeaders+0x3e>
4f57: 48 c7 c0 b8 ff ff ff mov $0xffffffffffffffb8,%rax
}
4f5e: 48 81 c4 b8 00 00 00 add $0xb8,%rsp
4f65: 5b pop %rbx
4f66: 5d pop %rbp
4f67: 41 5c pop %r12
4f69: 41 5d pop %r13
4f6b: 41 5e pop %r14
4f6d: 41 5f pop %r15
4f6f: c3 retq
const BYTE* const iend = istart + srcSize;
4f70: 48 8d 1c 0a lea (%rdx,%rcx,1),%rbx
4f74: 48 89 fd mov %rdi,%rbp
nbSeq = *ip++;
4f77: 48 8d 52 01 lea 0x1(%rdx),%rdx
if (nbSeq > 0x7F) {
4f7b: 41 83 fd 7f cmp $0x7f,%r13d
4f7f: 7e 28 jle 4fa9 <ZSTD_decodeSeqHeaders+0x89>
if (nbSeq == 0xFF) {
4f81: 41 81 fd ff 00 00 00 cmp $0xff,%r13d
4f88: 0f 84 82 01 00 00 je 5110 <ZSTD_decodeSeqHeaders+0x1f0>
RETURN_ERROR_IF(ip >= iend, srcSize_wrong, "");
4f8e: 48 39 d3 cmp %rdx,%rbx
4f91: 76 c4 jbe 4f57 <ZSTD_decodeSeqHeaders+0x37>
nbSeq = ((nbSeq-0x80)<<8) + *ip++;
4f93: 41 0f b6 44 24 01 movzbl 0x1(%r12),%eax
4f99: 41 83 c5 80 add $0xffffff80,%r13d
4f9d: 49 8d 54 24 02 lea 0x2(%r12),%rdx
4fa2: 41 c1 e5 08 shl $0x8,%r13d
4fa6: 41 01 c5 add %eax,%r13d
RETURN_ERROR_IF(ip+1 > iend, srcSize_wrong, ""); /* minimum possible size: 1 byte for symbol encoding types */
4fa9: 4c 8d 72 01 lea 0x1(%rdx),%r14
*nbSeqPtr = nbSeq;
4fad: 44 89 2e mov %r13d,(%rsi)
RETURN_ERROR_IF(ip+1 > iend, srcSize_wrong, ""); /* minimum possible size: 1 byte for symbol encoding types */
4fb0: 49 39 de cmp %rbx,%r14
4fb3: 77 a2 ja 4f57 <ZSTD_decodeSeqHeaders+0x37>
{ symbolEncodingType_e const LLtype = (symbolEncodingType_e)(*ip >> 6);
4fb5: 44 0f b6 3a movzbl (%rdx),%r15d
ip, iend-ip,
4fb9: 49 89 d8 mov %rbx,%r8
{ size_t const llhSize = ZSTD_buildSeqTable(dctx->entropy.LLTable, &dctx->LLTptr,
4fbc: 4c 8d 5d 20 lea 0x20(%rbp),%r11
4fc0: c7 44 24 38 23 00 00 movl $0x23,0x38(%rsp)
4fc7: 00
4fc8: 44 8b 8d d8 75 00 00 mov 0x75d8(%rbp),%r9d
4fcf: 8b 8d f4 75 00 00 mov 0x75f4(%rbp),%ecx
ip, iend-ip,
4fd5: 4d 29 f0 sub %r14,%r8
dctx->workspace, sizeof(dctx->workspace),
4fd8: 4c 8d 95 bc 6a 00 00 lea 0x6abc(%rbp),%r10
{ symbolEncodingType_e const LLtype = (symbolEncodingType_e)(*ip >> 6);
4fdf: 44 89 fe mov %r15d,%esi
{ size_t const llhSize = ZSTD_buildSeqTable(dctx->entropy.LLTable, &dctx->LLTptr,
4fe2: 8b 85 2c 75 00 00 mov 0x752c(%rbp),%eax
{ symbolEncodingType_e const LLtype = (symbolEncodingType_e)(*ip >> 6);
4fe8: 40 c0 ee 06 shr $0x6,%sil
switch(type)
4fec: 40 80 fe 02 cmp $0x2,%sil
4ff0: 0f 84 da 01 00 00 je 51d0 <ZSTD_decodeSeqHeaders+0x2b0>
4ff6: 40 80 fe 03 cmp $0x3,%sil
4ffa: 0f 84 90 01 00 00 je 5190 <ZSTD_decodeSeqHeaders+0x270>
5000: 40 80 fe 01 cmp $0x1,%sil
5004: 0f 84 26 01 00 00 je 5130 <ZSTD_decodeSeqHeaders+0x210>
*DTablePtr = defaultTable;
500a: 48 8d 3d 00 00 00 00 lea 0x0(%rip),%rdi # 5011 <ZSTD_decodeSeqHeaders+0xf1>
5011: 48 89 7d 00 mov %rdi,0x0(%rbp)
{ size_t const ofhSize = ZSTD_buildSeqTable(dctx->entropy.OFTable, &dctx->OFTptr,
5015: 48 83 ec 08 sub $0x8,%rsp
symbolEncodingType_e const OFtype = (symbolEncodingType_e)((*ip >> 4) & 3);
5019: 44 89 fa mov %r15d,%edx
{ size_t const ofhSize = ZSTD_buildSeqTable(dctx->entropy.OFTable, &dctx->OFTptr,
501c: 48 8d 75 10 lea 0x10(%rbp),%rsi
5020: 41 51 push %r9
symbolEncodingType_e const OFtype = (symbolEncodingType_e)((*ip >> 4) & 3);
5022: c0 ea 04 shr $0x4,%dl
{ size_t const ofhSize = ZSTD_buildSeqTable(dctx->entropy.OFTable, &dctx->OFTptr,
5025: 48 8d bd 28 10 00 00 lea 0x1028(%rbp),%rdi
502c: 4d 89 f1 mov %r14,%r9
502f: 41 52 push %r10
symbolEncodingType_e const OFtype = (symbolEncodingType_e)((*ip >> 4) & 3);
5031: 83 e2 03 and $0x3,%edx
{ size_t const ofhSize = ZSTD_buildSeqTable(dctx->entropy.OFTable, &dctx->OFTptr,
5034: 4c 89 54 24 20 mov %r10,0x20(%rsp)
5039: 41 55 push %r13
503b: 51 push %rcx
503c: b9 1f 00 00 00 mov $0x1f,%ecx
5041: 50 push %rax
5042: 48 8d 05 00 00 00 00 lea 0x0(%rip),%rax # 5049 <ZSTD_decodeSeqHeaders+0x129>
5049: 50 push %rax
504a: 48 8d 05 00 00 00 00 lea 0x0(%rip),%rax # 5051 <ZSTD_decodeSeqHeaders+0x131>
5051: 50 push %rax
5052: 48 8d 05 00 00 00 00 lea 0x0(%rip),%rax # 5059 <ZSTD_decodeSeqHeaders+0x139>
5059: 50 push %rax
505a: 41 50 push %r8
505c: 41 b8 08 00 00 00 mov $0x8,%r8d
5062: e8 d9 fc ff ff callq 4d40 <ZSTD_buildSeqTable.constprop.0>
RETURN_ERROR_IF(ZSTD_isError(ofhSize), corruption_detected, "ZSTD_buildSeqTable failed");
5067: 48 83 c4 50 add $0x50,%rsp
506b: 4c 8b 54 24 08 mov 0x8(%rsp),%r10
5070: 48 83 f8 88 cmp $0xffffffffffffff88,%rax
5074: 0f 87 16 02 00 00 ja 5290 <ZSTD_decodeSeqHeaders+0x370>
ip += ofhSize;
507a: 49 01 c6 add %rax,%r14
{ size_t const mlhSize = ZSTD_buildSeqTable(dctx->entropy.MLTable, &dctx->MLTptr,
507d: 8b 85 d8 75 00 00 mov 0x75d8(%rbp),%eax
5083: 48 83 ec 08 sub $0x8,%rsp
symbolEncodingType_e const MLtype = (symbolEncodingType_e)((*ip >> 2) & 3);
5087: 44 89 fa mov %r15d,%edx
ip, iend-ip,
508a: 4c 29 f3 sub %r14,%rbx
symbolEncodingType_e const MLtype = (symbolEncodingType_e)((*ip >> 2) & 3);
508d: c0 ea 02 shr $0x2,%dl
{ size_t const mlhSize = ZSTD_buildSeqTable(dctx->entropy.MLTable, &dctx->MLTptr,
5090: 48 8d 75 08 lea 0x8(%rbp),%rsi
5094: 4d 89 f1 mov %r14,%r9
5097: 50 push %rax
symbolEncodingType_e const MLtype = (symbolEncodingType_e)((*ip >> 2) & 3);
5098: 83 e2 03 and $0x3,%edx
{ size_t const mlhSize = ZSTD_buildSeqTable(dctx->entropy.MLTable, &dctx->MLTptr,
509b: 48 8d bd 30 18 00 00 lea 0x1830(%rbp),%rdi
50a2: b9 34 00 00 00 mov $0x34,%ecx
50a7: 41 52 push %r10
50a9: 41 b8 09 00 00 00 mov $0x9,%r8d
50af: 41 55 push %r13
50b1: 8b 85 f4 75 00 00 mov 0x75f4(%rbp),%eax
50b7: 50 push %rax
50b8: 8b 85 2c 75 00 00 mov 0x752c(%rbp),%eax
50be: 50 push %rax
50bf: 48 8d 05 00 00 00 00 lea 0x0(%rip),%rax # 50c6 <ZSTD_decodeSeqHeaders+0x1a6>
50c6: 50 push %rax
50c7: 48 8d 05 00 00 00 00 lea 0x0(%rip),%rax # 50ce <ZSTD_decodeSeqHeaders+0x1ae>
50ce: 50 push %rax
50cf: 48 8d 05 00 00 00 00 lea 0x0(%rip),%rax # 50d6 <ZSTD_decodeSeqHeaders+0x1b6>
50d6: 50 push %rax
50d7: 53 push %rbx
50d8: e8 63 fc ff ff callq 4d40 <ZSTD_buildSeqTable.constprop.0>
RETURN_ERROR_IF(ZSTD_isError(mlhSize), corruption_detected, "ZSTD_buildSeqTable failed");
50dd: 48 83 c4 50 add $0x50,%rsp
50e1: 48 83 f8 88 cmp $0xffffffffffffff88,%rax
50e5: 0f 87 a5 01 00 00 ja 5290 <ZSTD_decodeSeqHeaders+0x370>
ip += mlhSize;
50eb: 4c 01 f0 add %r14,%rax
return ip-istart;
50ee: 4c 29 e0 sub %r12,%rax
50f1: e9 68 fe ff ff jmpq 4f5e <ZSTD_decodeSeqHeaders+0x3e>
50f6: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1)
50fd: 00 00 00
RETURN_ERROR_IF(srcSize != 1, srcSize_wrong, "");
5100: 48 c7 c0 b8 ff ff ff mov $0xffffffffffffffb8,%rax
}
5107: c3 retq
5108: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1)
510f: 00
RETURN_ERROR_IF(ip+2 > iend, srcSize_wrong, "");
5110: 49 8d 54 24 03 lea 0x3(%r12),%rdx
5115: 48 39 da cmp %rbx,%rdx
5118: 0f 87 39 fe ff ff ja 4f57 <ZSTD_decodeSeqHeaders+0x37>
nbSeq = MEM_readLE16(ip) + LONGNBSEQ;
511e: 45 0f b7 6c 24 01 movzwl 0x1(%r12),%r13d
5124: 41 81 c5 00 7f 00 00 add $0x7f00,%r13d
ip+=2;
512b: e9 79 fe ff ff jmpq 4fa9 <ZSTD_decodeSeqHeaders+0x89>
RETURN_ERROR_IF(!srcSize, srcSize_wrong, "");
5130: 4d 85 c0 test %r8,%r8
5133: 0f 84 57 01 00 00 je 5290 <ZSTD_decodeSeqHeaders+0x370>
RETURN_ERROR_IF((*(const BYTE*)src) > max, corruption_detected, "");
5139: 0f b6 72 01 movzbl 0x1(%rdx),%esi
513d: 40 80 fe 23 cmp $0x23,%sil
5141: 0f 87 49 01 00 00 ja 5290 <ZSTD_decodeSeqHeaders+0x370>
U32 const nbBits = nbAdditionalBits[symbol];
5147: 4c 8d 05 00 00 00 00 lea 0x0(%rip),%r8 # 514e <ZSTD_decodeSeqHeaders+0x22e>
U32 const baseline = baseValue[symbol];
514e: 48 8d 3d 00 00 00 00 lea 0x0(%rip),%rdi # 5155 <ZSTD_decodeSeqHeaders+0x235>
5155: 8b 3c b7 mov (%rdi,%rsi,4),%edi
U32 const nbBits = nbAdditionalBits[symbol];
5158: 41 8b 34 b0 mov (%r8,%rsi,4),%esi
cell->nextState = 0;
515c: 45 31 c0 xor %r8d,%r8d
ip += llhSize;
515f: 4c 8d 72 02 lea 0x2(%rdx),%r14
cell->nextState = 0;
5163: 66 44 89 45 28 mov %r8w,0x28(%rbp)
ip, iend-ip,
5168: 49 89 d8 mov %rbx,%r8
DTableH->fastMode = 0;
516b: 48 c7 45 20 00 00 00 movq $0x0,0x20(%rbp)
5172: 00
ip, iend-ip,
5173: 4d 29 f0 sub %r14,%r8
cell->nbBits = 0;
5176: c6 45 2b 00 movb $0x0,0x2b(%rbp)
cell->nbAdditionalBits = (BYTE)nbAddBits;
517a: 40 88 75 2a mov %sil,0x2a(%rbp)
cell->baseValue = baseValue;
517e: 89 7d 2c mov %edi,0x2c(%rbp)
*DTablePtr = DTableSpace;
5181: 4c 89 5d 00 mov %r11,0x0(%rbp)
******************************************/
#undef ERROR /* already defined on Visual Studio */
#define ERROR(name) ZSTD_ERROR(name)
#define ZSTD_ERROR(name) ((size_t)-PREFIX(name))
ERR_STATIC unsigned ERR_isError(size_t code) { return (code > ERROR(maxCode)); }
5185: e9 8b fe ff ff jmpq 5015 <ZSTD_decodeSeqHeaders+0xf5>
518a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1)
RETURN_ERROR_IF(!flagRepeatTable, corruption_detected, "");
5190: 85 c0 test %eax,%eax
5192: 0f 84 f8 00 00 00 je 5290 <ZSTD_decodeSeqHeaders+0x370>
if (ddictIsCold && (nbSeq > 24 /* heuristic */)) {
5198: 85 c9 test %ecx,%ecx
519a: 0f 84 75 fe ff ff je 5015 <ZSTD_decodeSeqHeaders+0xf5>
51a0: 41 83 fd 18 cmp $0x18,%r13d
51a4: 0f 8e 6b fe ff ff jle 5015 <ZSTD_decodeSeqHeaders+0xf5>
PREFETCH_AREA(pStart, pSize);
51aa: 48 8b 55 00 mov 0x0(%rbp),%rdx
51ae: 48 8d b2 40 10 00 00 lea 0x1040(%rdx),%rsi
51b5: 0f 1f 00 nopl (%rax)
51b8: 0f 18 12 prefetcht1 (%rdx)
51bb: 48 83 c2 40 add $0x40,%rdx
51bf: 48 39 d6 cmp %rdx,%rsi
51c2: 75 f4 jne 51b8 <ZSTD_decodeSeqHeaders+0x298>
51c4: e9 4c fe ff ff jmpq 5015 <ZSTD_decodeSeqHeaders+0xf5>
51c9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
size_t const headerSize = FSE_readNCount(norm, &max, &tableLog, src, srcSize);
51d0: 48 8d 7c 24 40 lea 0x40(%rsp),%rdi
51d5: 48 8d 54 24 3c lea 0x3c(%rsp),%rdx
51da: 4c 89 f1 mov %r14,%rcx
51dd: 4c 89 5c 24 20 mov %r11,0x20(%rsp)
51e2: 48 8d 74 24 38 lea 0x38(%rsp),%rsi
51e7: 4c 89 54 24 18 mov %r10,0x18(%rsp)
51ec: 44 89 4c 24 10 mov %r9d,0x10(%rsp)
51f1: 48 89 7c 24 08 mov %rdi,0x8(%rsp)
51f6: e8 00 00 00 00 callq 51fb <ZSTD_decodeSeqHeaders+0x2db>
RETURN_ERROR_IF(FSE_isError(headerSize), corruption_detected, "");
51fb: 48 8b 7c 24 08 mov 0x8(%rsp),%rdi
5200: 44 8b 4c 24 10 mov 0x10(%rsp),%r9d
5205: 48 83 f8 88 cmp $0xffffffffffffff88,%rax
size_t const headerSize = FSE_readNCount(norm, &max, &tableLog, src, srcSize);
5209: 48 89 44 24 28 mov %rax,0x28(%rsp)
RETURN_ERROR_IF(FSE_isError(headerSize), corruption_detected, "");
520e: 4c 8b 54 24 18 mov 0x18(%rsp),%r10
5213: 4c 8b 5c 24 20 mov 0x20(%rsp),%r11
5218: 77 76 ja 5290 <ZSTD_decodeSeqHeaders+0x370>
RETURN_ERROR_IF(tableLog > maxLog, corruption_detected, "");
521a: 8b 44 24 3c mov 0x3c(%rsp),%eax
521e: 83 f8 09 cmp $0x9,%eax
5221: 77 6d ja 5290 <ZSTD_decodeSeqHeaders+0x370>
ZSTD_buildFSETable(DTableSpace, norm, max, baseValue, nbAdditionalBits, tableLog, wksp, wkspSize, bmi2);
5223: 48 83 ec 08 sub $0x8,%rsp
5227: 4c 8d 05 00 00 00 00 lea 0x0(%rip),%r8 # 522e <ZSTD_decodeSeqHeaders+0x30e>
522e: 48 8d 0d 00 00 00 00 lea 0x0(%rip),%rcx # 5235 <ZSTD_decodeSeqHeaders+0x315>
5235: 48 89 fe mov %rdi,%rsi
5238: 41 51 push %r9
523a: 4c 89 df mov %r11,%rdi
523d: 41 89 c1 mov %eax,%r9d
5240: 68 00 0a 00 00 pushq $0xa00
5245: 41 52 push %r10
5247: 8b 54 24 58 mov 0x58(%rsp),%edx
524b: 4c 89 5c 24 28 mov %r11,0x28(%rsp)
5250: 4c 89 54 24 30 mov %r10,0x30(%rsp)
5255: e8 00 00 00 00 callq 525a <ZSTD_decodeSeqHeaders+0x33a>
*DTablePtr = DTableSpace;
525a: 4c 8b 5c 24 28 mov 0x28(%rsp),%r11
ip, iend-ip,
525f: 49 89 d8 mov %rbx,%r8
ip += llhSize;
5262: 4c 03 74 24 48 add 0x48(%rsp),%r14
{ size_t const ofhSize = ZSTD_buildSeqTable(dctx->entropy.OFTable, &dctx->OFTptr,
5267: 44 8b 8d d8 75 00 00 mov 0x75d8(%rbp),%r9d
526e: 48 83 c4 20 add $0x20,%rsp
5272: 8b 8d f4 75 00 00 mov 0x75f4(%rbp),%ecx
ip, iend-ip,
5278: 4d 29 f0 sub %r14,%r8
{ size_t const ofhSize = ZSTD_buildSeqTable(dctx->entropy.OFTable, &dctx->OFTptr,
527b: 8b 85 2c 75 00 00 mov 0x752c(%rbp),%eax
5281: 4c 8b 54 24 10 mov 0x10(%rsp),%r10
*DTablePtr = DTableSpace;
5286: 4c 89 5d 00 mov %r11,0x0(%rbp)
return headerSize;
528a: e9 86 fd ff ff jmpq 5015 <ZSTD_decodeSeqHeaders+0xf5>
528f: 90 nop
RETURN_ERROR_IF(ZSTD_isError(ofhSize), corruption_detected, "ZSTD_buildSeqTable failed");
5290: 48 c7 c0 ec ff ff ff mov $0xffffffffffffffec,%rax
5297: e9 c2 fc ff ff jmpq 4f5e <ZSTD_decodeSeqHeaders+0x3e>
529c: 0f 1f 40 00 nopl 0x0(%rax)
00000000000052a0 <ZSTD_decompressBlock_internal>:
size_t
ZSTD_decompressBlock_internal(ZSTD_DCtx* dctx,
void* dst, size_t dstCapacity,
const void* src, size_t srcSize, const int frame)
{ /* blockType == blockCompressed */
52a0: 41 57 push %r15
52a2: 41 56 push %r14
52a4: 41 55 push %r13
52a6: 41 54 push %r12
52a8: 55 push %rbp
52a9: 53 push %rbx
52aa: 48 81 ec c8 00 00 00 sub $0xc8,%rsp
52b1: 48 89 54 24 08 mov %rdx,0x8(%rsp)
* (note: but it could be evaluated from current-lowLimit)
*/
ZSTD_longOffset_e const isLongOffset = (ZSTD_longOffset_e)(MEM_32bits() && (!frame || (dctx->fParams.windowSize > (1ULL << STREAM_ACCUMULATOR_MIN))));
DEBUGLOG(5, "ZSTD_decompressBlock_internal (size : %u)", (U32)srcSize);
RETURN_ERROR_IF(srcSize >= ZSTD_BLOCKSIZE_MAX, srcSize_wrong, "");
52b6: 49 81 f8 ff ff 01 00 cmp $0x1ffff,%r8
52bd: 0f 87 95 00 00 00 ja 5358 <ZSTD_decompressBlock_internal+0xb8>
52c3: 4c 89 c3 mov %r8,%rbx
RETURN_ERROR_IF(srcSize < MIN_CBLOCK_SIZE, corruption_detected, "");
52c6: 49 83 f8 02 cmp $0x2,%r8
52ca: 76 7c jbe 5348 <ZSTD_decompressBlock_internal+0xa8>
symbolEncodingType_e const litEncType = (symbolEncodingType_e)(istart[0] & 3);
52cc: 0f b6 01 movzbl (%rcx),%eax
52cf: 48 89 fd mov %rdi,%rbp
52d2: 49 89 f5 mov %rsi,%r13
52d5: 49 89 cc mov %rcx,%r12
52d8: 45 89 cb mov %r9d,%r11d
52db: 41 89 c6 mov %eax,%r14d
52de: 41 83 e6 03 and $0x3,%r14d
switch(litEncType)
52e2: 41 80 fe 02 cmp $0x2,%r14b
52e6: 0f 84 9c 00 00 00 je 5388 <ZSTD_decompressBlock_internal+0xe8>
52ec: 41 80 fe 03 cmp $0x3,%r14b
52f0: 0f 84 82 00 00 00 je 5378 <ZSTD_decompressBlock_internal+0xd8>
52f6: 41 80 fe 01 cmp $0x1,%r14b
52fa: 0f 84 b0 01 00 00 je 54b0 <ZSTD_decompressBlock_internal+0x210>
U32 const lhlCode = ((istart[0]) >> 2) & 3;
5300: 89 c2 mov %eax,%edx
5302: c0 ea 02 shr $0x2,%dl
5305: 83 e2 03 and $0x3,%edx
switch(lhlCode)
5308: 80 fa 01 cmp $0x1,%dl
530b: 0f 84 9f 09 00 00 je 5cb0 <ZSTD_decompressBlock_internal+0xa10>
5311: 80 fa 03 cmp $0x3,%dl
5314: 0f 84 76 09 00 00 je 5c90 <ZSTD_decompressBlock_internal+0x9f0>
litSize = istart[0] >> 3;
531a: c0 e8 03 shr $0x3,%al
531d: 44 0f b6 f0 movzbl %al,%r14d
lhSize = 1;
5321: b8 01 00 00 00 mov $0x1,%eax
if (lhSize+litSize+WILDCOPY_OVERLENGTH > srcSize) { /* risk reading beyond src buffer with wildcopy */
5326: 4d 8d 3c 06 lea (%r14,%rax,1),%r15
532a: 49 8d 57 20 lea 0x20(%r15),%rdx
532e: 48 39 d3 cmp %rdx,%rbx
5331: 0f 83 59 07 00 00 jae 5a90 <ZSTD_decompressBlock_internal+0x7f0>
5337: 44 89 5c 24 10 mov %r11d,0x10(%rsp)
RETURN_ERROR_IF(litSize+lhSize > srcSize, corruption_detected, "");
533c: 4c 39 fb cmp %r15,%rbx
533f: 0f 83 0b 08 00 00 jae 5b50 <ZSTD_decompressBlock_internal+0x8b0>
5345: 0f 1f 00 nopl (%rax)
{ size_t const llhSize = ZSTD_buildSeqTable(dctx->entropy.LLTable, &dctx->LLTptr,
5348: 48 c7 c0 ec ff ff ff mov $0xffffffffffffffec,%rax
534f: eb 0e jmp 535f <ZSTD_decompressBlock_internal+0xbf>
5351: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
RETURN_ERROR_IF(srcSize >= ZSTD_BLOCKSIZE_MAX, srcSize_wrong, "");
5358: 48 c7 c0 b8 ff ff ff mov $0xffffffffffffffb8,%rax
#ifndef ZSTD_FORCE_DECOMPRESS_SEQUENCES_LONG
/* else */
return ZSTD_decompressSequences(dctx, dst, dstCapacity, ip, srcSize, nbSeq, isLongOffset, frame);
#endif
}
}
535f: 48 81 c4 c8 00 00 00 add $0xc8,%rsp
5366: 5b pop %rbx
5367: 5d pop %rbp
5368: 41 5c pop %r12
536a: 41 5d pop %r13
536c: 41 5e pop %r14
536e: 41 5f pop %r15
5370: c3 retq
5371: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
RETURN_ERROR_IF(dctx->litEntropy==0, dictionary_corrupted, "");
5378: 44 8b 8f 28 75 00 00 mov 0x7528(%rdi),%r9d
537f: 45 85 c9 test %r9d,%r9d
5382: 0f 84 08 08 00 00 je 5b90 <ZSTD_decompressBlock_internal+0x8f0>
RETURN_ERROR_IF(srcSize < 5, corruption_detected, "srcSize >= MIN_CBLOCK_SIZE == 3; here we need up to 5 for case 3");
5388: 48 83 fb 04 cmp $0x4,%rbx
538c: 76 ba jbe 5348 <ZSTD_decompressBlock_internal+0xa8>
MEM_STATIC U32 MEM_read32(const void* ptr) { return ((const unalign32*)ptr)->v; }
538e: 41 8b 0c 24 mov (%r12),%ecx
U32 const lhlCode = (istart[0] >> 2) & 3;
5392: c0 e8 02 shr $0x2,%al
5395: 83 e0 03 and $0x3,%eax
litSize = (lhc >> 4) & 0x3FF;
5398: 41 89 ca mov %ecx,%r10d
539b: 41 c1 ea 04 shr $0x4,%r10d
539f: 3c 02 cmp $0x2,%al
53a1: 0f 84 49 07 00 00 je 5af0 <ZSTD_decompressBlock_internal+0x850>
53a7: 3c 03 cmp $0x3,%al
53a9: 0f 84 01 07 00 00 je 5ab0 <ZSTD_decompressBlock_internal+0x810>
singleStream = !lhlCode;
53af: 83 f0 01 xor $0x1,%eax
litCSize = (lhc >> 14) & 0x3FF;
53b2: c1 e9 0e shr $0xe,%ecx
lhSize = 3;
53b5: bf 03 00 00 00 mov $0x3,%edi
litSize = (lhc >> 4) & 0x3FF;
53ba: 41 81 e2 ff 03 00 00 and $0x3ff,%r10d
singleStream = !lhlCode;
53c1: 0f b6 d0 movzbl %al,%edx
litCSize = (lhc >> 14) & 0x3FF;
53c4: 81 e1 ff 03 00 00 and $0x3ff,%ecx
RETURN_ERROR_IF(litCSize + lhSize > srcSize, corruption_detected, "");
53ca: 4c 8d 3c 0f lea (%rdi,%rcx,1),%r15
53ce: 4c 39 fb cmp %r15,%rbx
53d1: 0f 82 71 ff ff ff jb 5348 <ZSTD_decompressBlock_internal+0xa8>
if (dctx->ddictIsCold && (litSize > 768 /* heuristic */)) {
53d7: 44 8b 85 f4 75 00 00 mov 0x75f4(%rbp),%r8d
53de: 45 85 c0 test %r8d,%r8d
53e1: 74 0d je 53f0 <ZSTD_decompressBlock_internal+0x150>
53e3: 49 81 fa 00 03 00 00 cmp $0x300,%r10
53ea: 0f 87 ac 07 00 00 ja 5b9c <ZSTD_decompressBlock_internal+0x8fc>
dctx->litBuffer, litSize, istart+lhSize, litCSize,
53f0: 49 8d 04 3c lea (%r12,%rdi,1),%rax
53f4: 48 8d bd 90 76 00 00 lea 0x7690(%rbp),%rdi
hufSuccess = HUF_decompress1X_usingDTable_bmi2(
53fb: 8b b5 d8 75 00 00 mov 0x75d8(%rbp),%esi
dctx->litBuffer, litSize, istart+lhSize, litCSize,
5401: 48 89 7c 24 10 mov %rdi,0x10(%rsp)
if (litEncType==set_repeat) {
5406: 41 80 fe 03 cmp $0x3,%r14b
540a: 0f 84 40 09 00 00 je 5d50 <ZSTD_decompressBlock_internal+0xab0>
if (singleStream) {
5410: 44 89 5c 24 28 mov %r11d,0x28(%rsp)
istart+lhSize, litCSize, dctx->workspace,
5415: 4c 8d 8d bc 6a 00 00 lea 0x6abc(%rbp),%r9
dctx->entropy.hufTable, dctx->litBuffer, litSize,
541c: 48 8d bd 38 28 00 00 lea 0x2838(%rbp),%rdi
if (singleStream) {
5423: 85 d2 test %edx,%edx
5425: 0f 85 e5 06 00 00 jne 5b10 <ZSTD_decompressBlock_internal+0x870>
hufSuccess = HUF_decompress4X_hufOnly_wksp_bmi2(
542b: 56 push %rsi
542c: 4c 89 d2 mov %r10,%rdx
542f: 49 89 c8 mov %rcx,%r8
5432: 48 8d b5 90 76 00 00 lea 0x7690(%rbp),%rsi
5439: 68 00 0a 00 00 pushq $0xa00
543e: 48 89 c1 mov %rax,%rcx
5441: 4c 89 54 24 30 mov %r10,0x30(%rsp)
5446: 48 89 7c 24 28 mov %rdi,0x28(%rsp)
544b: e8 00 00 00 00 callq 5450 <ZSTD_decompressBlock_internal+0x1b0>
5450: 5a pop %rdx
5451: 59 pop %rcx
5452: 44 8b 5c 24 28 mov 0x28(%rsp),%r11d
5457: 4c 8b 54 24 20 mov 0x20(%rsp),%r10
545c: 48 8b 7c 24 18 mov 0x18(%rsp),%rdi
RETURN_ERROR_IF(HUF_isError(hufSuccess), corruption_detected, "");
5461: 48 83 f8 88 cmp $0xffffffffffffff88,%rax
5465: 0f 87 dd fe ff ff ja 5348 <ZSTD_decompressBlock_internal+0xa8>
dctx->litPtr = dctx->litBuffer;
546b: 48 8d 85 90 76 00 00 lea 0x7690(%rbp),%rax
dctx->litSize = litSize;
5472: 4c 89 95 c0 75 00 00 mov %r10,0x75c0(%rbp)
dctx->litPtr = dctx->litBuffer;
5479: 48 89 85 a0 75 00 00 mov %rax,0x75a0(%rbp)
dctx->litEntropy = 1;
5480: c7 85 28 75 00 00 01 movl $0x1,0x7528(%rbp)
5487: 00 00 00
if (litEncType==set_compressed) dctx->HUFptr = dctx->entropy.hufTable;
548a: 41 80 fe 02 cmp $0x2,%r14b
548e: 75 04 jne 5494 <ZSTD_decompressBlock_internal+0x1f4>
5490: 48 89 7d 18 mov %rdi,0x18(%rbp)
ZSTD_memset(dctx->litBuffer + dctx->litSize, 0, WILDCOPY_OVERLENGTH);
5494: 4c 03 54 24 10 add 0x10(%rsp),%r10
5499: 66 0f ef c0 pxor %xmm0,%xmm0
549d: 41 0f 11 02 movups %xmm0,(%r10)
54a1: 41 0f 11 42 10 movups %xmm0,0x10(%r10)
return litCSize + lhSize;
54a6: eb 64 jmp 550c <ZSTD_decompressBlock_internal+0x26c>
54a8: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1)
54af: 00
{ U32 const lhlCode = ((istart[0]) >> 2) & 3;
54b0: 89 c2 mov %eax,%edx
54b2: c0 ea 02 shr $0x2,%dl
54b5: 83 e2 03 and $0x3,%edx
switch(lhlCode)
54b8: 80 fa 01 cmp $0x1,%dl
54bb: 0f 84 4f 08 00 00 je 5d10 <ZSTD_decompressBlock_internal+0xa70>
54c1: 80 fa 03 cmp $0x3,%dl
54c4: 0f 84 06 08 00 00 je 5cd0 <ZSTD_decompressBlock_internal+0xa30>
litSize = istart[0] >> 3;
54ca: c0 e8 03 shr $0x3,%al
break;
54cd: 41 bf 02 00 00 00 mov $0x2,%r15d
litSize = istart[0] >> 3;
54d3: 44 0f b6 f0 movzbl %al,%r14d
lhSize = 1;
54d7: b8 01 00 00 00 mov $0x1,%eax
ZSTD_memset(dctx->litBuffer, istart[lhSize], litSize + WILDCOPY_OVERLENGTH);
54dc: 48 8d 8d 90 76 00 00 lea 0x7690(%rbp),%rcx
54e3: 41 0f b6 34 04 movzbl (%r12,%rax,1),%esi
54e8: 49 8d 56 20 lea 0x20(%r14),%rdx
54ec: 44 89 5c 24 10 mov %r11d,0x10(%rsp)
54f1: 48 89 cf mov %rcx,%rdi
54f4: e8 00 00 00 00 callq 54f9 <ZSTD_decompressBlock_internal+0x259>
dctx->litSize = litSize;
54f9: 4c 89 b5 c0 75 00 00 mov %r14,0x75c0(%rbp)
return lhSize+1;
5500: 44 8b 5c 24 10 mov 0x10(%rsp),%r11d
dctx->litPtr = dctx->litBuffer;
5505: 48 89 85 a0 75 00 00 mov %rax,0x75a0(%rbp)
RETURN_ERROR_IF(srcSize < MIN_SEQUENCES_SIZE, srcSize_wrong, "");
550c: 48 89 d8 mov %rbx,%rax
ip += litCSize;
550f: 4f 8d 34 3c lea (%r12,%r15,1),%r14
RETURN_ERROR_IF(srcSize < MIN_SEQUENCES_SIZE, srcSize_wrong, "");
5513: 4c 29 f8 sub %r15,%rax
5516: 48 89 44 24 10 mov %rax,0x10(%rsp)
551b: 0f 84 37 fe ff ff je 5358 <ZSTD_decompressBlock_internal+0xb8>
nbSeq = *ip++;
5521: 45 0f b6 3e movzbl (%r14),%r15d
int usePrefetchDecoder = dctx->ddictIsCold;
5525: 44 8b 95 f4 75 00 00 mov 0x75f4(%rbp),%r10d
nbSeq = *ip++;
552c: 49 8d 56 01 lea 0x1(%r14),%rdx
if (!nbSeq) {
5530: 45 85 ff test %r15d,%r15d
5533: 75 5b jne 5590 <ZSTD_decompressBlock_internal+0x2f0>
srcSize -= seqHSize;
5535: 45 31 c0 xor %r8d,%r8d
RETURN_ERROR_IF(srcSize != 1, srcSize_wrong, "");
5538: 48 83 7c 24 10 01 cmpq $0x1,0x10(%rsp)
553e: 0f 85 14 fe ff ff jne 5358 <ZSTD_decompressBlock_internal+0xb8>
if ( !usePrefetchDecoder
5544: 45 85 d2 test %r10d,%r10d
5547: 0f 84 13 02 00 00 je 5760 <ZSTD_decompressBlock_internal+0x4c0>
dctx->ddictIsCold = 0;
554d: c7 85 f4 75 00 00 00 movl $0x0,0x75f4(%rbp)
5554: 00 00 00
if (dctx->bmi2) {
5557: 44 8b 95 d8 75 00 00 mov 0x75d8(%rbp),%r10d
return ZSTD_decompressSequencesLong_bmi2(dctx, dst, maxDstSize, seqStart, seqSize, nbSeq, isLongOffset, frame);
555e: 48 89 d1 mov %rdx,%rcx
5561: 45 89 f9 mov %r15d,%r9d
5564: 4c 89 ee mov %r13,%rsi
5567: 48 8b 54 24 08 mov 0x8(%rsp),%rdx
556c: 48 89 ef mov %rbp,%rdi
if (dctx->bmi2) {
556f: 45 85 d2 test %r10d,%r10d
5572: 0f 85 fa 06 00 00 jne 5c72 <ZSTD_decompressBlock_internal+0x9d2>
}
5578: 48 81 c4 c8 00 00 00 add $0xc8,%rsp
557f: 5b pop %rbx
5580: 5d pop %rbp
5581: 41 5c pop %r12
5583: 41 5d pop %r13
5585: 41 5e pop %r14
5587: 41 5f pop %r15
return ZSTD_decompressSequencesLong_default(dctx, dst, maxDstSize, seqStart, seqSize, nbSeq, isLongOffset, frame);
5589: e9 32 b5 ff ff jmpq ac0 <ZSTD_decompressSequencesLong_default.constprop.0>
558e: 66 90 xchg %ax,%ax
const BYTE* const iend = istart + srcSize;
5590: 49 01 dc add %rbx,%r12
if (nbSeq > 0x7F) {
5593: 41 83 ff 7f cmp $0x7f,%r15d
5597: 7e 2a jle 55c3 <ZSTD_decompressBlock_internal+0x323>
if (nbSeq == 0xFF) {
5599: 41 81 ff ff 00 00 00 cmp $0xff,%r15d
55a0: 0f 84 ae 06 00 00 je 5c54 <ZSTD_decompressBlock_internal+0x9b4>
RETURN_ERROR_IF(ip >= iend, srcSize_wrong, "");
55a6: 49 39 d4 cmp %rdx,%r12
55a9: 0f 86 a9 fd ff ff jbe 5358 <ZSTD_decompressBlock_internal+0xb8>
nbSeq = ((nbSeq-0x80)<<8) + *ip++;
55af: 41 0f b6 46 01 movzbl 0x1(%r14),%eax
55b4: 41 83 c7 80 add $0xffffff80,%r15d
55b8: 49 8d 56 02 lea 0x2(%r14),%rdx
55bc: 41 c1 e7 08 shl $0x8,%r15d
55c0: 41 01 c7 add %eax,%r15d
RETURN_ERROR_IF(ip+1 > iend, srcSize_wrong, ""); /* minimum possible size: 1 byte for symbol encoding types */
55c3: 48 8d 5a 01 lea 0x1(%rdx),%rbx
55c7: 49 39 dc cmp %rbx,%r12
55ca: 0f 82 88 fd ff ff jb 5358 <ZSTD_decompressBlock_internal+0xb8>
{ symbolEncodingType_e const LLtype = (symbolEncodingType_e)(*ip >> 6);
55d0: 0f b6 02 movzbl (%rdx),%eax
ip, iend-ip,
55d3: 4d 89 e0 mov %r12,%r8
{ size_t const llhSize = ZSTD_buildSeqTable(dctx->entropy.LLTable, &dctx->LLTptr,
55d6: 48 8d 7d 20 lea 0x20(%rbp),%rdi
55da: c7 44 24 48 23 00 00 movl $0x23,0x48(%rsp)
55e1: 00
55e2: 48 89 7c 24 18 mov %rdi,0x18(%rsp)
55e7: 44 8b 8d d8 75 00 00 mov 0x75d8(%rbp),%r9d
ip, iend-ip,
55ee: 49 29 d8 sub %rbx,%r8
{ symbolEncodingType_e const LLtype = (symbolEncodingType_e)(*ip >> 6);
55f1: 89 c1 mov %eax,%ecx
55f3: 88 44 24 37 mov %al,0x37(%rsp)
dctx->workspace, sizeof(dctx->workspace),
55f7: 48 8d 85 bc 6a 00 00 lea 0x6abc(%rbp),%rax
{ symbolEncodingType_e const LLtype = (symbolEncodingType_e)(*ip >> 6);
55fe: c0 e9 06 shr $0x6,%cl
dctx->workspace, sizeof(dctx->workspace),
5601: 48 89 44 24 28 mov %rax,0x28(%rsp)
{ size_t const llhSize = ZSTD_buildSeqTable(dctx->entropy.LLTable, &dctx->LLTptr,
5606: 8b 85 2c 75 00 00 mov 0x752c(%rbp),%eax
switch(type)
560c: 80 f9 02 cmp $0x2,%cl
560f: 0f 84 ab 07 00 00 je 5dc0 <ZSTD_decompressBlock_internal+0xb20>
5615: 80 f9 03 cmp $0x3,%cl
5618: 0f 84 ff 05 00 00 je 5c1d <ZSTD_decompressBlock_internal+0x97d>
561e: 80 f9 01 cmp $0x1,%cl
5621: 0f 84 9a 05 00 00 je 5bc1 <ZSTD_decompressBlock_internal+0x921>
*DTablePtr = defaultTable;
5627: 48 8d 3d 00 00 00 00 lea 0x0(%rip),%rdi # 562e <ZSTD_decompressBlock_internal+0x38e>
int usePrefetchDecoder = dctx->ddictIsCold;
562e: 44 89 d1 mov %r10d,%ecx
*DTablePtr = defaultTable;
5631: 48 89 7d 00 mov %rdi,0x0(%rbp)
symbolEncodingType_e const OFtype = (symbolEncodingType_e)((*ip >> 4) & 3);
5635: 0f b6 54 24 37 movzbl 0x37(%rsp),%edx
563a: 44 89 5c 24 20 mov %r11d,0x20(%rsp)
{ size_t const ofhSize = ZSTD_buildSeqTable(dctx->entropy.OFTable, &dctx->OFTptr,
563f: 48 83 ec 08 sub $0x8,%rsp
5643: 48 8d 75 10 lea 0x10(%rbp),%rsi
5647: 44 89 54 24 20 mov %r10d,0x20(%rsp)
564c: 48 8d bd 28 10 00 00 lea 0x1028(%rbp),%rdi
5653: 41 51 push %r9
symbolEncodingType_e const OFtype = (symbolEncodingType_e)((*ip >> 4) & 3);
5655: c0 ea 04 shr $0x4,%dl
{ size_t const ofhSize = ZSTD_buildSeqTable(dctx->entropy.OFTable, &dctx->OFTptr,
5658: 49 89 d9 mov %rbx,%r9
565b: ff 74 24 38 pushq 0x38(%rsp)
symbolEncodingType_e const OFtype = (symbolEncodingType_e)((*ip >> 4) & 3);
565f: 83 e2 03 and $0x3,%edx
{ size_t const ofhSize = ZSTD_buildSeqTable(dctx->entropy.OFTable, &dctx->OFTptr,
5662: 41 57 push %r15
5664: 51 push %rcx
5665: b9 1f 00 00 00 mov $0x1f,%ecx
566a: 50 push %rax
566b: 48 8d 05 00 00 00 00 lea 0x0(%rip),%rax # 5672 <ZSTD_decompressBlock_internal+0x3d2>
5672: 50 push %rax
5673: 48 8d 05 00 00 00 00 lea 0x0(%rip),%rax # 567a <ZSTD_decompressBlock_internal+0x3da>
567a: 50 push %rax
567b: 48 8d 05 00 00 00 00 lea 0x0(%rip),%rax # 5682 <ZSTD_decompressBlock_internal+0x3e2>
5682: 50 push %rax
5683: 41 50 push %r8
5685: 41 b8 08 00 00 00 mov $0x8,%r8d
568b: e8 b0 f6 ff ff callq 4d40 <ZSTD_buildSeqTable.constprop.0>
RETURN_ERROR_IF(ZSTD_isError(ofhSize), corruption_detected, "ZSTD_buildSeqTable failed");
5690: 48 83 c4 50 add $0x50,%rsp
5694: 48 83 f8 88 cmp $0xffffffffffffff88,%rax
5698: 0f 87 aa fc ff ff ja 5348 <ZSTD_decompressBlock_internal+0xa8>
ip += ofhSize;
569e: 48 01 c3 add %rax,%rbx
symbolEncodingType_e const MLtype = (symbolEncodingType_e)((*ip >> 2) & 3);
56a1: 0f b6 54 24 37 movzbl 0x37(%rsp),%edx
{ size_t const mlhSize = ZSTD_buildSeqTable(dctx->entropy.MLTable, &dctx->MLTptr,
56a6: 48 83 ec 08 sub $0x8,%rsp
56aa: 48 8d 75 08 lea 0x8(%rbp),%rsi
56ae: 8b 85 d8 75 00 00 mov 0x75d8(%rbp),%eax
ip, iend-ip,
56b4: 49 29 dc sub %rbx,%r12
{ size_t const mlhSize = ZSTD_buildSeqTable(dctx->entropy.MLTable, &dctx->MLTptr,
56b7: 48 8d bd 30 18 00 00 lea 0x1830(%rbp),%rdi
56be: 49 89 d9 mov %rbx,%r9
symbolEncodingType_e const MLtype = (symbolEncodingType_e)((*ip >> 2) & 3);
56c1: c0 ea 02 shr $0x2,%dl
{ size_t const mlhSize = ZSTD_buildSeqTable(dctx->entropy.MLTable, &dctx->MLTptr,
56c4: 41 b8 09 00 00 00 mov $0x9,%r8d
56ca: b9 34 00 00 00 mov $0x34,%ecx
56cf: 50 push %rax
symbolEncodingType_e const MLtype = (symbolEncodingType_e)((*ip >> 2) & 3);
56d0: 83 e2 03 and $0x3,%edx
{ size_t const mlhSize = ZSTD_buildSeqTable(dctx->entropy.MLTable, &dctx->MLTptr,
56d3: ff 74 24 38 pushq 0x38(%rsp)
56d7: 41 57 push %r15
56d9: 8b 85 f4 75 00 00 mov 0x75f4(%rbp),%eax
56df: 50 push %rax
56e0: 8b 85 2c 75 00 00 mov 0x752c(%rbp),%eax
56e6: 50 push %rax
56e7: 48 8d 05 00 00 00 00 lea 0x0(%rip),%rax # 56ee <ZSTD_decompressBlock_internal+0x44e>
56ee: 50 push %rax
56ef: 48 8d 05 00 00 00 00 lea 0x0(%rip),%rax # 56f6 <ZSTD_decompressBlock_internal+0x456>
56f6: 50 push %rax
56f7: 48 8d 05 00 00 00 00 lea 0x0(%rip),%rax # 56fe <ZSTD_decompressBlock_internal+0x45e>
56fe: 50 push %rax
56ff: 41 54 push %r12
5701: e8 3a f6 ff ff callq 4d40 <ZSTD_buildSeqTable.constprop.0>
RETURN_ERROR_IF(ZSTD_isError(mlhSize), corruption_detected, "ZSTD_buildSeqTable failed");
5706: 48 83 c4 50 add $0x50,%rsp
570a: 48 83 f8 88 cmp $0xffffffffffffff88,%rax
570e: 0f 87 34 fc ff ff ja 5348 <ZSTD_decompressBlock_internal+0xa8>
ip += mlhSize;
5714: 48 01 d8 add %rbx,%rax
return ip-istart;
5717: 4c 29 f0 sub %r14,%rax
if (ZSTD_isError(seqHSize)) return seqHSize;
571a: 48 83 f8 88 cmp $0xffffffffffffff88,%rax
571e: 0f 87 3b fc ff ff ja 535f <ZSTD_decompressBlock_internal+0xbf>
srcSize -= seqHSize;
5724: 4c 8b 44 24 10 mov 0x10(%rsp),%r8
RETURN_ERROR_IF(dst == NULL && nbSeq > 0, dstSize_tooSmall, "NULL not handled");
5729: 44 8b 54 24 18 mov 0x18(%rsp),%r10d
ip += seqHSize;
572e: 49 8d 14 06 lea (%r14,%rax,1),%rdx
RETURN_ERROR_IF(dst == NULL && nbSeq > 0, dstSize_tooSmall, "NULL not handled");
5732: 44 8b 5c 24 20 mov 0x20(%rsp),%r11d
srcSize -= seqHSize;
5737: 49 29 c0 sub %rax,%r8
RETURN_ERROR_IF(dst == NULL && nbSeq > 0, dstSize_tooSmall, "NULL not handled");
573a: 4d 85 ed test %r13,%r13
573d: 0f 85 01 fe ff ff jne 5544 <ZSTD_decompressBlock_internal+0x2a4>
5743: 48 c7 c0 ba ff ff ff mov $0xffffffffffffffba,%rax
574a: 45 85 ff test %r15d,%r15d
574d: 0f 85 0c fc ff ff jne 535f <ZSTD_decompressBlock_internal+0xbf>
5753: e9 ec fd ff ff jmpq 5544 <ZSTD_decompressBlock_internal+0x2a4>
5758: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1)
575f: 00
&& (!frame || (dctx->fParams.windowSize > (1<<24)))
5760: 45 85 db test %r11d,%r11d
5763: 0f 85 d7 02 00 00 jne 5a40 <ZSTD_decompressBlock_internal+0x7a0>
&& (nbSeq>ADVANCED_SEQS) ) { /* could probably use a larger nbSeq limit */
5769: 41 83 ff 08 cmp $0x8,%r15d
576d: 0f 8e de 02 00 00 jle 5a51 <ZSTD_decompressBlock_internal+0x7b1>
U32 const shareLongOffsets = ZSTD_getLongOffsetsShare(dctx->OFTptr);
5773: 48 8b 7d 10 mov 0x10(%rbp),%rdi
U32 const max = 1 << tableLog;
5777: 41 ba 01 00 00 00 mov $0x1,%r10d
U32 const tableLog = ((const ZSTD_seqSymbol_header*)ptr)[0].tableLog;
577d: 8b 4f 04 mov 0x4(%rdi),%ecx
U32 const max = 1 << tableLog;
5780: 41 d3 e2 shl %cl,%r10d
for (u=0; u<max; u++) {
5783: 45 85 d2 test %r10d,%r10d
5786: 0f 84 c5 02 00 00 je 5a51 <ZSTD_decompressBlock_internal+0x7b1>
578c: 41 8d 72 ff lea -0x1(%r10),%esi
5790: 83 fe 0f cmp $0xf,%esi
5793: 0f 86 f8 06 00 00 jbe 5e91 <ZSTD_decompressBlock_internal+0xbf1>
5799: 41 89 f1 mov %esi,%r9d
579c: 48 8d 47 0a lea 0xa(%rdi),%rax
57a0: 66 0f ef d2 pxor %xmm2,%xmm2
57a4: 66 0f 6f 0d 00 00 00 movdqa 0x0(%rip),%xmm1 # 57ac <ZSTD_decompressBlock_internal+0x50c>
57ab: 00
57ac: 41 c1 e9 04 shr $0x4,%r9d
57b0: 66 0f 6f 35 00 00 00 movdqa 0x0(%rip),%xmm6 # 57b8 <ZSTD_decompressBlock_internal+0x518>
57b7: 00
57b8: 66 0f ef e4 pxor %xmm4,%xmm4
57bc: 66 0f ef db pxor %xmm3,%xmm3
57c0: 41 83 e9 01 sub $0x1,%r9d
57c4: 66 0f 6f 2d 00 00 00 movdqa 0x0(%rip),%xmm5 # 57cc <ZSTD_decompressBlock_internal+0x52c>
57cb: 00
57cc: 49 c1 e1 07 shl $0x7,%r9
57d0: 4e 8d 8c 0f 8a 00 00 lea 0x8a(%rdi,%r9,1),%r9
57d7: 00
57d8: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1)
57df: 00
if (table[u].nbAdditionalBits > 22) total += 1;
57e0: f3 0f 6f 00 movdqu (%rax),%xmm0
57e4: f3 0f 6f 78 10 movdqu 0x10(%rax),%xmm7
57e9: 48 83 e8 80 sub $0xffffffffffffff80,%rax
57ed: f3 44 0f 6f 40 b0 movdqu -0x50(%rax),%xmm8
57f3: f3 44 0f 6f 48 f0 movdqu -0x10(%rax),%xmm9
57f9: 66 0f db f9 pand %xmm1,%xmm7
57fd: 66 0f db c1 pand %xmm1,%xmm0
5801: 66 0f 67 c7 packuswb %xmm7,%xmm0
5805: f3 0f 6f 78 a0 movdqu -0x60(%rax),%xmm7
580a: 66 44 0f db c1 pand %xmm1,%xmm8
580f: 66 44 0f db c9 pand %xmm1,%xmm9
5814: 66 0f db c1 pand %xmm1,%xmm0
5818: 66 0f db f9 pand %xmm1,%xmm7
581c: 66 41 0f 67 f8 packuswb %xmm8,%xmm7
5821: f3 44 0f 6f 40 d0 movdqu -0x30(%rax),%xmm8
5827: 66 0f db f9 pand %xmm1,%xmm7
582b: 66 0f 67 c7 packuswb %xmm7,%xmm0
582f: f3 0f 6f 78 c0 movdqu -0x40(%rax),%xmm7
5834: 66 44 0f db c1 pand %xmm1,%xmm8
5839: 66 0f db c1 pand %xmm1,%xmm0
583d: 66 0f db f9 pand %xmm1,%xmm7
5841: 66 41 0f 67 f8 packuswb %xmm8,%xmm7
5846: f3 44 0f 6f 40 e0 movdqu -0x20(%rax),%xmm8
584c: 66 0f db f9 pand %xmm1,%xmm7
5850: 66 44 0f db c1 pand %xmm1,%xmm8
5855: 66 45 0f 67 c1 packuswb %xmm9,%xmm8
585a: 66 44 0f db c1 pand %xmm1,%xmm8
585f: 66 41 0f 67 f8 packuswb %xmm8,%xmm7
5864: 66 0f db f9 pand %xmm1,%xmm7
5868: 66 0f 67 c7 packuswb %xmm7,%xmm0
586c: 66 0f d8 c6 psubusb %xmm6,%xmm0
5870: 66 0f 74 c4 pcmpeqb %xmm4,%xmm0
5874: 66 0f df c5 pandn %xmm5,%xmm0
5878: 66 0f 6f f8 movdqa %xmm0,%xmm7
587c: 66 0f 68 c4 punpckhbw %xmm4,%xmm0
5880: 66 44 0f 6f c0 movdqa %xmm0,%xmm8
5885: 66 0f 60 fc punpcklbw %xmm4,%xmm7
5889: 66 0f 69 c3 punpckhwd %xmm3,%xmm0
588d: 66 44 0f 61 c3 punpcklwd %xmm3,%xmm8
5892: 66 41 0f fe c0 paddd %xmm8,%xmm0
5897: 66 44 0f 6f c7 movdqa %xmm7,%xmm8
589c: 66 0f 69 fb punpckhwd %xmm3,%xmm7
58a0: 66 44 0f 61 c3 punpcklwd %xmm3,%xmm8
58a5: 66 41 0f fe f8 paddd %xmm8,%xmm7
58aa: 66 0f fe c7 paddd %xmm7,%xmm0
58ae: 66 0f fe d0 paddd %xmm0,%xmm2
for (u=0; u<max; u++) {
58b2: 4c 39 c8 cmp %r9,%rax
58b5: 0f 85 25 ff ff ff jne 57e0 <ZSTD_decompressBlock_internal+0x540>
58bb: 66 0f 6f c2 movdqa %xmm2,%xmm0
58bf: 83 e6 f0 and $0xfffffff0,%esi
58c2: 66 0f 73 d8 08 psrldq $0x8,%xmm0
58c7: 66 0f fe d0 paddd %xmm0,%xmm2
58cb: 66 0f 6f c2 movdqa %xmm2,%xmm0
58cf: 66 0f 73 d8 04 psrldq $0x4,%xmm0
58d4: 66 0f fe d0 paddd %xmm0,%xmm2
58d8: 66 0f 7e d0 movd %xmm2,%eax
if (table[u].nbAdditionalBits > 22) total += 1;
58dc: 44 8d 5e 01 lea 0x1(%rsi),%r11d
58e0: 42 80 7c df 02 17 cmpb $0x17,0x2(%rdi,%r11,8)
58e6: 83 d8 ff sbb $0xffffffff,%eax
for (u=0; u<max; u++) {
58e9: 45 39 da cmp %r11d,%r10d
58ec: 0f 86 26 01 00 00 jbe 5a18 <ZSTD_decompressBlock_internal+0x778>
if (table[u].nbAdditionalBits > 22) total += 1;
58f2: 44 8d 5e 02 lea 0x2(%rsi),%r11d
58f6: 42 80 7c df 02 17 cmpb $0x17,0x2(%rdi,%r11,8)
58fc: 83 d8 ff sbb $0xffffffff,%eax
for (u=0; u<max; u++) {
58ff: 45 39 da cmp %r11d,%r10d
5902: 0f 86 10 01 00 00 jbe 5a18 <ZSTD_decompressBlock_internal+0x778>
if (table[u].nbAdditionalBits > 22) total += 1;
5908: 44 8d 5e 03 lea 0x3(%rsi),%r11d
590c: 42 80 7c df 02 17 cmpb $0x17,0x2(%rdi,%r11,8)
5912: 83 d8 ff sbb $0xffffffff,%eax
for (u=0; u<max; u++) {
5915: 45 39 da cmp %r11d,%r10d
5918: 0f 86 fa 00 00 00 jbe 5a18 <ZSTD_decompressBlock_internal+0x778>
if (table[u].nbAdditionalBits > 22) total += 1;
591e: 44 8d 5e 04 lea 0x4(%rsi),%r11d
5922: 42 80 7c df 02 17 cmpb $0x17,0x2(%rdi,%r11,8)
5928: 83 d8 ff sbb $0xffffffff,%eax
for (u=0; u<max; u++) {
592b: 45 39 da cmp %r11d,%r10d
592e: 0f 86 e4 00 00 00 jbe 5a18 <ZSTD_decompressBlock_internal+0x778>
if (table[u].nbAdditionalBits > 22) total += 1;
5934: 44 8d 5e 05 lea 0x5(%rsi),%r11d
5938: 42 80 7c df 02 17 cmpb $0x17,0x2(%rdi,%r11,8)
593e: 83 d8 ff sbb $0xffffffff,%eax
for (u=0; u<max; u++) {
5941: 45 39 da cmp %r11d,%r10d
5944: 0f 86 ce 00 00 00 jbe 5a18 <ZSTD_decompressBlock_internal+0x778>
if (table[u].nbAdditionalBits > 22) total += 1;
594a: 44 8d 5e 06 lea 0x6(%rsi),%r11d
594e: 42 80 7c df 02 17 cmpb $0x17,0x2(%rdi,%r11,8)
5954: 83 d8 ff sbb $0xffffffff,%eax
for (u=0; u<max; u++) {
5957: 45 39 da cmp %r11d,%r10d
595a: 0f 86 b8 00 00 00 jbe 5a18 <ZSTD_decompressBlock_internal+0x778>
if (table[u].nbAdditionalBits > 22) total += 1;
5960: 44 8d 5e 07 lea 0x7(%rsi),%r11d
5964: 42 80 7c df 02 17 cmpb $0x17,0x2(%rdi,%r11,8)
596a: 83 d8 ff sbb $0xffffffff,%eax
for (u=0; u<max; u++) {
596d: 45 39 da cmp %r11d,%r10d
5970: 0f 86 a2 00 00 00 jbe 5a18 <ZSTD_decompressBlock_internal+0x778>
if (table[u].nbAdditionalBits > 22) total += 1;
5976: 44 8d 5e 08 lea 0x8(%rsi),%r11d
597a: 42 80 7c df 02 17 cmpb $0x17,0x2(%rdi,%r11,8)
5980: 83 d8 ff sbb $0xffffffff,%eax
for (u=0; u<max; u++) {
5983: 45 39 da cmp %r11d,%r10d
5986: 0f 86 8c 00 00 00 jbe 5a18 <ZSTD_decompressBlock_internal+0x778>
if (table[u].nbAdditionalBits > 22) total += 1;
598c: 44 8d 5e 09 lea 0x9(%rsi),%r11d
5990: 42 80 7c df 02 17 cmpb $0x17,0x2(%rdi,%r11,8)
5996: 83 d8 ff sbb $0xffffffff,%eax
for (u=0; u<max; u++) {
5999: 45 39 da cmp %r11d,%r10d
599c: 76 7a jbe 5a18 <ZSTD_decompressBlock_internal+0x778>
if (table[u].nbAdditionalBits > 22) total += 1;
599e: 44 8d 5e 0a lea 0xa(%rsi),%r11d
59a2: 42 80 7c df 02 17 cmpb $0x17,0x2(%rdi,%r11,8)
59a8: 83 d8 ff sbb $0xffffffff,%eax
for (u=0; u<max; u++) {
59ab: 45 39 da cmp %r11d,%r10d
59ae: 76 68 jbe 5a18 <ZSTD_decompressBlock_internal+0x778>
if (table[u].nbAdditionalBits > 22) total += 1;
59b0: 44 8d 5e 0b lea 0xb(%rsi),%r11d
59b4: 42 80 7c df 02 17 cmpb $0x17,0x2(%rdi,%r11,8)
59ba: 83 d8 ff sbb $0xffffffff,%eax
for (u=0; u<max; u++) {
59bd: 45 39 da cmp %r11d,%r10d
59c0: 76 56 jbe 5a18 <ZSTD_decompressBlock_internal+0x778>
if (table[u].nbAdditionalBits > 22) total += 1;
59c2: 44 8d 5e 0c lea 0xc(%rsi),%r11d
59c6: 42 80 7c df 02 17 cmpb $0x17,0x2(%rdi,%r11,8)
59cc: 83 d8 ff sbb $0xffffffff,%eax
for (u=0; u<max; u++) {
59cf: 45 39 da cmp %r11d,%r10d
59d2: 76 44 jbe 5a18 <ZSTD_decompressBlock_internal+0x778>
if (table[u].nbAdditionalBits > 22) total += 1;
59d4: 44 8d 5e 0d lea 0xd(%rsi),%r11d
59d8: 42 80 7c df 02 17 cmpb $0x17,0x2(%rdi,%r11,8)
59de: 83 d8 ff sbb $0xffffffff,%eax
for (u=0; u<max; u++) {
59e1: 45 39 da cmp %r11d,%r10d
59e4: 76 32 jbe 5a18 <ZSTD_decompressBlock_internal+0x778>
if (table[u].nbAdditionalBits > 22) total += 1;
59e6: 44 8d 5e 0e lea 0xe(%rsi),%r11d
59ea: 42 80 7c df 02 17 cmpb $0x17,0x2(%rdi,%r11,8)
59f0: 83 d8 ff sbb $0xffffffff,%eax
for (u=0; u<max; u++) {
59f3: 45 39 da cmp %r11d,%r10d
59f6: 76 20 jbe 5a18 <ZSTD_decompressBlock_internal+0x778>
if (table[u].nbAdditionalBits > 22) total += 1;
59f8: 44 8d 5e 0f lea 0xf(%rsi),%r11d
59fc: 42 80 7c df 02 17 cmpb $0x17,0x2(%rdi,%r11,8)
5a02: 83 d8 ff sbb $0xffffffff,%eax
for (u=0; u<max; u++) {
5a05: 45 39 da cmp %r11d,%r10d
5a08: 76 0e jbe 5a18 <ZSTD_decompressBlock_internal+0x778>
if (table[u].nbAdditionalBits > 22) total += 1;
5a0a: 83 c6 10 add $0x10,%esi
5a0d: 80 7c f7 02 17 cmpb $0x17,0x2(%rdi,%rsi,8)
5a12: 83 d8 ff sbb $0xffffffff,%eax
5a15: 0f 1f 00 nopl (%rax)
dctx->ddictIsCold = 0;
5a18: c7 85 f4 75 00 00 00 movl $0x0,0x75f4(%rbp)
5a1f: 00 00 00
total <<= (OffFSELog - tableLog); /* scale to OffFSELog */
5a22: be 08 00 00 00 mov $0x8,%esi
5a27: 29 ce sub %ecx,%esi
5a29: 89 f1 mov %esi,%ecx
5a2b: d3 e0 shl %cl,%eax
if (usePrefetchDecoder)
5a2d: 83 f8 06 cmp $0x6,%eax
5a30: 76 29 jbe 5a5b <ZSTD_decompressBlock_internal+0x7bb>
5a32: e9 20 fb ff ff jmpq 5557 <ZSTD_decompressBlock_internal+0x2b7>
5a37: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1)
5a3e: 00 00
&& (!frame || (dctx->fParams.windowSize > (1<<24)))
5a40: 48 81 bd f0 74 00 00 cmpq $0x1000000,0x74f0(%rbp)
5a47: 00 00 00 01
5a4b: 0f 87 18 fd ff ff ja 5769 <ZSTD_decompressBlock_internal+0x4c9>
dctx->ddictIsCold = 0;
5a51: c7 85 f4 75 00 00 00 movl $0x0,0x75f4(%rbp)
5a58: 00 00 00
if (dctx->bmi2) {
5a5b: 8b 85 d8 75 00 00 mov 0x75d8(%rbp),%eax
return ZSTD_decompressSequences_bmi2(dctx, dst, maxDstSize, seqStart, seqSize, nbSeq, isLongOffset, frame);
5a61: 48 89 d1 mov %rdx,%rcx
5a64: 45 89 f9 mov %r15d,%r9d
5a67: 4c 89 ee mov %r13,%rsi
5a6a: 48 8b 54 24 08 mov 0x8(%rsp),%rdx
5a6f: 48 89 ef mov %rbp,%rdi
if (dctx->bmi2) {
5a72: 85 c0 test %eax,%eax
5a74: 0f 85 b6 02 00 00 jne 5d30 <ZSTD_decompressBlock_internal+0xa90>
}
5a7a: 48 81 c4 c8 00 00 00 add $0xc8,%rsp
5a81: 5b pop %rbx
5a82: 5d pop %rbp
5a83: 41 5c pop %r12
5a85: 41 5d pop %r13
5a87: 41 5e pop %r14
5a89: 41 5f pop %r15
return ZSTD_decompressSequences_default(dctx, dst, maxDstSize, seqStart, seqSize, nbSeq, isLongOffset, frame);
5a8b: e9 50 cd ff ff jmpq 27e0 <ZSTD_decompressSequences_default.constprop.0>
dctx->litPtr = istart+lhSize;
5a90: 4c 01 e0 add %r12,%rax
dctx->litSize = litSize;
5a93: 4c 89 b5 c0 75 00 00 mov %r14,0x75c0(%rbp)
dctx->litPtr = istart+lhSize;
5a9a: 48 89 85 a0 75 00 00 mov %rax,0x75a0(%rbp)
return lhSize+litSize;
5aa1: e9 66 fa ff ff jmpq 550c <ZSTD_decompressBlock_internal+0x26c>
5aa6: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1)
5aad: 00 00 00
litSize = (lhc >> 4) & 0x3FFFF;
5ab0: 44 89 d0 mov %r10d,%eax
litCSize = (lhc >> 22) + ((size_t)istart[4] << 10);
5ab3: 41 0f b6 54 24 04 movzbl 0x4(%r12),%edx
5ab9: 25 ff ff 03 00 and $0x3ffff,%eax
litSize = (lhc >> 4) & 0x3FFFF;
5abe: 41 89 c2 mov %eax,%r10d
RETURN_ERROR_IF(litSize > ZSTD_BLOCKSIZE_MAX, corruption_detected, "");
5ac1: 3d 00 00 02 00 cmp $0x20000,%eax
5ac6: 0f 87 7c f8 ff ff ja 5348 <ZSTD_decompressBlock_internal+0xa8>
litCSize = (lhc >> 22) + ((size_t)istart[4] << 10);
5acc: c1 e9 16 shr $0x16,%ecx
lhSize = 5;
5acf: bf 05 00 00 00 mov $0x5,%edi
litCSize = (lhc >> 22) + ((size_t)istart[4] << 10);
5ad4: 89 c8 mov %ecx,%eax
5ad6: 0f b6 ca movzbl %dl,%ecx
U32 singleStream=0;
5ad9: 31 d2 xor %edx,%edx
litCSize = (lhc >> 22) + ((size_t)istart[4] << 10);
5adb: 48 c1 e1 0a shl $0xa,%rcx
5adf: 48 01 c1 add %rax,%rcx
5ae2: e9 e3 f8 ff ff jmpq 53ca <ZSTD_decompressBlock_internal+0x12a>
5ae7: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1)
5aee: 00 00
litSize = (lhc >> 4) & 0x3FFF;
5af0: 41 81 e2 ff 3f 00 00 and $0x3fff,%r10d
litCSize = lhc >> 18;
5af7: c1 e9 12 shr $0x12,%ecx
U32 singleStream=0;
5afa: 31 d2 xor %edx,%edx
lhSize = 4;
5afc: bf 04 00 00 00 mov $0x4,%edi
break;
5b01: e9 c4 f8 ff ff jmpq 53ca <ZSTD_decompressBlock_internal+0x12a>
5b06: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1)
5b0d: 00 00 00
hufSuccess = HUF_decompress1X1_DCtx_wksp_bmi2(
5b10: 56 push %rsi
5b11: 49 89 c8 mov %rcx,%r8
5b14: 4c 89 d2 mov %r10,%rdx
5b17: 48 8d b5 90 76 00 00 lea 0x7690(%rbp),%rsi
5b1e: 68 00 0a 00 00 pushq $0xa00
5b23: 48 89 c1 mov %rax,%rcx
5b26: 4c 89 54 24 30 mov %r10,0x30(%rsp)
5b2b: 48 89 7c 24 28 mov %rdi,0x28(%rsp)
5b30: e8 00 00 00 00 callq 5b35 <ZSTD_decompressBlock_internal+0x895>
5b35: 5e pop %rsi
5b36: 5f pop %rdi
5b37: 48 8b 7c 24 18 mov 0x18(%rsp),%rdi
5b3c: 4c 8b 54 24 20 mov 0x20(%rsp),%r10
5b41: 44 8b 5c 24 28 mov 0x28(%rsp),%r11d
5b46: e9 16 f9 ff ff jmpq 5461 <ZSTD_decompressBlock_internal+0x1c1>
5b4b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)
ZSTD_memcpy(dctx->litBuffer, istart+lhSize, litSize);
5b50: 48 8d 8d 90 76 00 00 lea 0x7690(%rbp),%rcx
5b57: 49 8d 34 04 lea (%r12,%rax,1),%rsi
5b5b: 4c 89 f2 mov %r14,%rdx
5b5e: 48 89 cf mov %rcx,%rdi
5b61: e8 00 00 00 00 callq 5b66 <ZSTD_decompressBlock_internal+0x8c6>
ZSTD_memset(dctx->litBuffer + dctx->litSize, 0, WILDCOPY_OVERLENGTH);
5b66: 66 0f ef c0 pxor %xmm0,%xmm0
return lhSize+litSize;
5b6a: 44 8b 5c 24 10 mov 0x10(%rsp),%r11d
dctx->litSize = litSize;
5b6f: 4c 89 b5 c0 75 00 00 mov %r14,0x75c0(%rbp)
ZSTD_memcpy(dctx->litBuffer, istart+lhSize, litSize);
5b76: 48 89 c1 mov %rax,%rcx
dctx->litPtr = dctx->litBuffer;
5b79: 48 89 85 a0 75 00 00 mov %rax,0x75a0(%rbp)
ZSTD_memset(dctx->litBuffer + dctx->litSize, 0, WILDCOPY_OVERLENGTH);
5b80: 4c 01 f1 add %r14,%rcx
5b83: 0f 11 01 movups %xmm0,(%rcx)
5b86: 0f 11 41 10 movups %xmm0,0x10(%rcx)
return lhSize+litSize;
5b8a: e9 7d f9 ff ff jmpq 550c <ZSTD_decompressBlock_internal+0x26c>
5b8f: 90 nop
RETURN_ERROR_IF(dctx->litEntropy==0, dictionary_corrupted, "");
5b90: 48 c7 c0 e2 ff ff ff mov $0xffffffffffffffe2,%rax
5b97: e9 c3 f7 ff ff jmpq 535f <ZSTD_decompressBlock_internal+0xbf>
PREFETCH_AREA(dctx->HUFptr, sizeof(dctx->entropy.hufTable));
5b9c: 48 8b 45 18 mov 0x18(%rbp),%rax
5ba0: 48 8d b0 40 40 00 00 lea 0x4040(%rax),%rsi
5ba7: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1)
5bae: 00 00
5bb0: 0f 18 10 prefetcht1 (%rax)
5bb3: 48 83 c0 40 add $0x40,%rax
5bb7: 48 39 f0 cmp %rsi,%rax
5bba: 75 f4 jne 5bb0 <ZSTD_decompressBlock_internal+0x910>
5bbc: e9 2f f8 ff ff jmpq 53f0 <ZSTD_decompressBlock_internal+0x150>
RETURN_ERROR_IF(!srcSize, srcSize_wrong, "");
5bc1: 4d 85 c0 test %r8,%r8
5bc4: 0f 84 7e f7 ff ff je 5348 <ZSTD_decompressBlock_internal+0xa8>
RETURN_ERROR_IF((*(const BYTE*)src) > max, corruption_detected, "");
5bca: 0f b6 4a 01 movzbl 0x1(%rdx),%ecx
5bce: 80 f9 23 cmp $0x23,%cl
5bd1: 0f 87 71 f7 ff ff ja 5348 <ZSTD_decompressBlock_internal+0xa8>
cell->nextState = 0;
5bd7: 31 db xor %ebx,%ebx
U32 const baseline = baseValue[symbol];
5bd9: 48 8d 35 00 00 00 00 lea 0x0(%rip),%rsi # 5be0 <ZSTD_decompressBlock_internal+0x940>
U32 const nbBits = nbAdditionalBits[symbol];
5be0: 48 8d 3d 00 00 00 00 lea 0x0(%rip),%rdi # 5be7 <ZSTD_decompressBlock_internal+0x947>
ip, iend-ip,
5be7: 4d 89 e0 mov %r12,%r8
U32 const baseline = baseValue[symbol];
5bea: 8b 34 8e mov (%rsi,%rcx,4),%esi
U32 const nbBits = nbAdditionalBits[symbol];
5bed: 8b 0c 8f mov (%rdi,%rcx,4),%ecx
cell->nextState = 0;
5bf0: 66 89 5d 28 mov %bx,0x28(%rbp)
*DTablePtr = DTableSpace;
5bf4: 48 8d 5d 20 lea 0x20(%rbp),%rbx
5bf8: 48 89 5d 00 mov %rbx,0x0(%rbp)
ip += llhSize;
5bfc: 48 8d 5a 02 lea 0x2(%rdx),%rbx
cell->nbAdditionalBits = (BYTE)nbAddBits;
5c00: 88 4d 2a mov %cl,0x2a(%rbp)
ip, iend-ip,
5c03: 49 29 d8 sub %rbx,%r8
int usePrefetchDecoder = dctx->ddictIsCold;
5c06: 44 89 d1 mov %r10d,%ecx
DTableH->fastMode = 0;
5c09: 48 c7 45 20 00 00 00 movq $0x0,0x20(%rbp)
5c10: 00
cell->nbBits = 0;
5c11: c6 45 2b 00 movb $0x0,0x2b(%rbp)
cell->baseValue = baseValue;
5c15: 89 75 2c mov %esi,0x2c(%rbp)
5c18: e9 18 fa ff ff jmpq 5635 <ZSTD_decompressBlock_internal+0x395>
RETURN_ERROR_IF(!flagRepeatTable, corruption_detected, "");
5c1d: 85 c0 test %eax,%eax
5c1f: 0f 84 23 f7 ff ff je 5348 <ZSTD_decompressBlock_internal+0xa8>
if (ddictIsCold && (nbSeq > 24 /* heuristic */)) {
5c25: 45 85 d2 test %r10d,%r10d
5c28: 74 22 je 5c4c <ZSTD_decompressBlock_internal+0x9ac>
5c2a: 41 83 ff 18 cmp $0x18,%r15d
5c2e: 7e 1c jle 5c4c <ZSTD_decompressBlock_internal+0x9ac>
PREFETCH_AREA(pStart, pSize);
5c30: 48 8b 55 00 mov 0x0(%rbp),%rdx
5c34: 48 8d 8a 40 10 00 00 lea 0x1040(%rdx),%rcx
5c3b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)
5c40: 0f 18 12 prefetcht1 (%rdx)
5c43: 48 83 c2 40 add $0x40,%rdx
5c47: 48 39 ca cmp %rcx,%rdx
5c4a: 75 f4 jne 5c40 <ZSTD_decompressBlock_internal+0x9a0>
5c4c: 44 89 d1 mov %r10d,%ecx
5c4f: e9 e1 f9 ff ff jmpq 5635 <ZSTD_decompressBlock_internal+0x395>
RETURN_ERROR_IF(ip+2 > iend, srcSize_wrong, "");
5c54: 49 8d 56 03 lea 0x3(%r14),%rdx
5c58: 49 39 d4 cmp %rdx,%r12
5c5b: 0f 82 f7 f6 ff ff jb 5358 <ZSTD_decompressBlock_internal+0xb8>
nbSeq = MEM_readLE16(ip) + LONGNBSEQ;
5c61: 45 0f b7 7e 01 movzwl 0x1(%r14),%r15d
5c66: 41 81 c7 00 7f 00 00 add $0x7f00,%r15d
ip+=2;
5c6d: e9 51 f9 ff ff jmpq 55c3 <ZSTD_decompressBlock_internal+0x323>
}
5c72: 48 81 c4 c8 00 00 00 add $0xc8,%rsp
5c79: 5b pop %rbx
5c7a: 5d pop %rbp
5c7b: 41 5c pop %r12
5c7d: 41 5d pop %r13
5c7f: 41 5e pop %r14
5c81: 41 5f pop %r15
return ZSTD_decompressSequencesLong_bmi2(dctx, dst, maxDstSize, seqStart, seqSize, nbSeq, isLongOffset, frame);
5c83: e9 78 d5 ff ff jmpq 3200 <ZSTD_decompressSequencesLong_bmi2.constprop.0>
5c88: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1)
5c8f: 00
return (U32)MEM_readLE16(memPtr) + ((U32)(((const BYTE*)memPtr)[2]) << 16);
5c90: 44 0f b6 71 02 movzbl 0x2(%rcx),%r14d
5c95: 0f b7 01 movzwl (%rcx),%eax
5c98: 41 c1 e6 10 shl $0x10,%r14d
5c9c: 41 01 c6 add %eax,%r14d
lhSize = 3;
5c9f: b8 03 00 00 00 mov $0x3,%eax
litSize = MEM_readLE24(istart) >> 4;
5ca4: 41 c1 ee 04 shr $0x4,%r14d
break;
5ca8: e9 79 f6 ff ff jmpq 5326 <ZSTD_decompressBlock_internal+0x86>
5cad: 0f 1f 00 nopl (%rax)
litSize = MEM_readLE16(istart) >> 4;
5cb0: 44 0f b7 31 movzwl (%rcx),%r14d
lhSize = 2;
5cb4: b8 02 00 00 00 mov $0x2,%eax
litSize = MEM_readLE16(istart) >> 4;
5cb9: 66 41 c1 ee 04 shr $0x4,%r14w
5cbe: 45 0f b7 f6 movzwl %r14w,%r14d
break;
5cc2: e9 5f f6 ff ff jmpq 5326 <ZSTD_decompressBlock_internal+0x86>
5cc7: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1)
5cce: 00 00
5cd0: 44 0f b6 71 02 movzbl 0x2(%rcx),%r14d
5cd5: 0f b7 01 movzwl (%rcx),%eax
5cd8: 41 c1 e6 10 shl $0x10,%r14d
5cdc: 41 01 c6 add %eax,%r14d
litSize = MEM_readLE24(istart) >> 4;
5cdf: 41 c1 ee 04 shr $0x4,%r14d
RETURN_ERROR_IF(litSize > ZSTD_BLOCKSIZE_MAX, corruption_detected, "");
5ce3: 49 81 fe 00 00 02 00 cmp $0x20000,%r14
5cea: 0f 87 58 f6 ff ff ja 5348 <ZSTD_decompressBlock_internal+0xa8>
5cf0: 49 83 f8 03 cmp $0x3,%r8
5cf4: 0f 84 4e f6 ff ff je 5348 <ZSTD_decompressBlock_internal+0xa8>
5cfa: 41 bf 04 00 00 00 mov $0x4,%r15d
lhSize = 3;
5d00: b8 03 00 00 00 mov $0x3,%eax
5d05: e9 d2 f7 ff ff jmpq 54dc <ZSTD_decompressBlock_internal+0x23c>
5d0a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1)
litSize = MEM_readLE16(istart) >> 4;
5d10: 44 0f b7 31 movzwl (%rcx),%r14d
break;
5d14: 41 bf 03 00 00 00 mov $0x3,%r15d
lhSize = 2;
5d1a: b8 02 00 00 00 mov $0x2,%eax
litSize = MEM_readLE16(istart) >> 4;
5d1f: 66 41 c1 ee 04 shr $0x4,%r14w
5d24: 45 0f b7 f6 movzwl %r14w,%r14d
break;
5d28: e9 af f7 ff ff jmpq 54dc <ZSTD_decompressBlock_internal+0x23c>
5d2d: 0f 1f 00 nopl (%rax)
}
5d30: 48 81 c4 c8 00 00 00 add $0xc8,%rsp
5d37: 5b pop %rbx
5d38: 5d pop %rbp
5d39: 41 5c pop %r12
5d3b: 41 5d pop %r13
5d3d: 41 5e pop %r14
5d3f: 41 5f pop %r15
return ZSTD_decompressSequences_bmi2(dctx, dst, maxDstSize, seqStart, seqSize, nbSeq, isLongOffset, frame);
5d41: e9 3a c1 ff ff jmpq 1e80 <ZSTD_decompressSequences_bmi2.constprop.0>
5d46: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1)
5d4d: 00 00 00
if (singleStream) {
5d50: 85 d2 test %edx,%edx
hufSuccess = HUF_decompress1X_usingDTable_bmi2(
5d52: 41 89 f1 mov %esi,%r9d
5d55: 44 89 5c 24 20 mov %r11d,0x20(%rsp)
PREFETCH_AREA(dctx->HUFptr, sizeof(dctx->entropy.hufTable));
5d5a: 4c 8b 45 18 mov 0x18(%rbp),%r8
hufSuccess = HUF_decompress1X_usingDTable_bmi2(
5d5e: 4c 89 54 24 18 mov %r10,0x18(%rsp)
5d63: 48 89 c2 mov %rax,%rdx
5d66: 4c 89 d6 mov %r10,%rsi
if (singleStream) {
5d69: 74 3d je 5da8 <ZSTD_decompressBlock_internal+0xb08>
hufSuccess = HUF_decompress1X_usingDTable_bmi2(
5d6b: e8 00 00 00 00 callq 5d70 <ZSTD_decompressBlock_internal+0xad0>
5d70: 4c 8b 54 24 18 mov 0x18(%rsp),%r10
5d75: 44 8b 5c 24 20 mov 0x20(%rsp),%r11d
RETURN_ERROR_IF(HUF_isError(hufSuccess), corruption_detected, "");
5d7a: 48 83 f8 88 cmp $0xffffffffffffff88,%rax
5d7e: 0f 87 c4 f5 ff ff ja 5348 <ZSTD_decompressBlock_internal+0xa8>
dctx->litPtr = dctx->litBuffer;
5d84: 48 8d 85 90 76 00 00 lea 0x7690(%rbp),%rax
dctx->litSize = litSize;
5d8b: 4c 89 95 c0 75 00 00 mov %r10,0x75c0(%rbp)
dctx->litPtr = dctx->litBuffer;
5d92: 48 89 85 a0 75 00 00 mov %rax,0x75a0(%rbp)
dctx->litEntropy = 1;
5d99: c7 85 28 75 00 00 01 movl $0x1,0x7528(%rbp)
5da0: 00 00 00
if (litEncType==set_compressed) dctx->HUFptr = dctx->entropy.hufTable;
5da3: e9 ec f6 ff ff jmpq 5494 <ZSTD_decompressBlock_internal+0x1f4>
hufSuccess = HUF_decompress4X_usingDTable_bmi2(
5da8: 48 8d bd 90 76 00 00 lea 0x7690(%rbp),%rdi
5daf: e8 00 00 00 00 callq 5db4 <ZSTD_decompressBlock_internal+0xb14>
5db4: 4c 8b 54 24 18 mov 0x18(%rsp),%r10
5db9: 44 8b 5c 24 20 mov 0x20(%rsp),%r11d
5dbe: eb ba jmp 5d7a <ZSTD_decompressBlock_internal+0xada>
size_t const headerSize = FSE_readNCount(norm, &max, &tableLog, src, srcSize);
5dc0: 48 8d 7c 24 50 lea 0x50(%rsp),%rdi
5dc5: 48 8d 54 24 4c lea 0x4c(%rsp),%rdx
5dca: 48 89 d9 mov %rbx,%rcx
5dcd: 44 89 5c 24 3c mov %r11d,0x3c(%rsp)
5dd2: 48 8d 74 24 48 lea 0x48(%rsp),%rsi
5dd7: 44 89 4c 24 38 mov %r9d,0x38(%rsp)
5ddc: 44 89 54 24 20 mov %r10d,0x20(%rsp)
5de1: 48 89 7c 24 18 mov %rdi,0x18(%rsp)
5de6: e8 00 00 00 00 callq 5deb <ZSTD_decompressBlock_internal+0xb4b>
RETURN_ERROR_IF(FSE_isError(headerSize), corruption_detected, "");
5deb: 48 8b 7c 24 18 mov 0x18(%rsp),%rdi
5df0: 44 8b 54 24 20 mov 0x20(%rsp),%r10d
5df5: 48 83 f8 88 cmp $0xffffffffffffff88,%rax
5df9: 44 8b 4c 24 38 mov 0x38(%rsp),%r9d
5dfe: 44 8b 5c 24 3c mov 0x3c(%rsp),%r11d
5e03: 0f 87 3f f5 ff ff ja 5348 <ZSTD_decompressBlock_internal+0xa8>
RETURN_ERROR_IF(tableLog > maxLog, corruption_detected, "");
5e09: 8b 54 24 4c mov 0x4c(%rsp),%edx
5e0d: 44 89 5c 24 38 mov %r11d,0x38(%rsp)
5e12: 48 89 44 24 20 mov %rax,0x20(%rsp)
5e17: 44 89 54 24 18 mov %r10d,0x18(%rsp)
5e1c: 83 fa 09 cmp $0x9,%edx
5e1f: 0f 87 23 f5 ff ff ja 5348 <ZSTD_decompressBlock_internal+0xa8>
ZSTD_buildFSETable(DTableSpace, norm, max, baseValue, nbAdditionalBits, tableLog, wksp, wkspSize, bmi2);
5e25: 48 83 ec 08 sub $0x8,%rsp
5e29: 4c 8d 05 00 00 00 00 lea 0x0(%rip),%r8 # 5e30 <ZSTD_decompressBlock_internal+0xb90>
5e30: 48 8d 0d 00 00 00 00 lea 0x0(%rip),%rcx # 5e37 <ZSTD_decompressBlock_internal+0xb97>
5e37: 48 89 fe mov %rdi,%rsi
5e3a: 41 51 push %r9
5e3c: 41 89 d1 mov %edx,%r9d
5e3f: 48 8d 7d 20 lea 0x20(%rbp),%rdi
5e43: 68 00 0a 00 00 pushq $0xa00
5e48: ff 74 24 40 pushq 0x40(%rsp)
5e4c: 8b 54 24 68 mov 0x68(%rsp),%edx
5e50: e8 00 00 00 00 callq 5e55 <ZSTD_decompressBlock_internal+0xbb5>
*DTablePtr = DTableSpace;
5e55: 48 8d 45 20 lea 0x20(%rbp),%rax
ip, iend-ip,
5e59: 4d 89 e0 mov %r12,%r8
{ size_t const ofhSize = ZSTD_buildSeqTable(dctx->entropy.OFTable, &dctx->OFTptr,
5e5c: 44 8b 8d d8 75 00 00 mov 0x75d8(%rbp),%r9d
*DTablePtr = DTableSpace;
5e63: 48 89 45 00 mov %rax,0x0(%rbp)
ip += llhSize;
5e67: 48 8b 44 24 40 mov 0x40(%rsp),%rax
{ size_t const ofhSize = ZSTD_buildSeqTable(dctx->entropy.OFTable, &dctx->OFTptr,
5e6c: 48 83 c4 20 add $0x20,%rsp
5e70: 8b 8d f4 75 00 00 mov 0x75f4(%rbp),%ecx
5e76: 44 8b 5c 24 38 mov 0x38(%rsp),%r11d
ip += llhSize;
5e7b: 48 01 c3 add %rax,%rbx
{ size_t const ofhSize = ZSTD_buildSeqTable(dctx->entropy.OFTable, &dctx->OFTptr,
5e7e: 44 8b 54 24 18 mov 0x18(%rsp),%r10d
5e83: 8b 85 2c 75 00 00 mov 0x752c(%rbp),%eax
ip, iend-ip,
5e89: 49 29 d8 sub %rbx,%r8
5e8c: e9 a4 f7 ff ff jmpq 5635 <ZSTD_decompressBlock_internal+0x395>
U32 u, total = 0;
5e91: 31 c0 xor %eax,%eax
for (u=0; u<max; u++) {
5e93: 31 f6 xor %esi,%esi
5e95: e9 42 fa ff ff jmpq 58dc <ZSTD_decompressBlock_internal+0x63c>
5e9a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1)
0000000000005ea0 <ZSTD_checkContinuity>:
void ZSTD_checkContinuity(ZSTD_DCtx* dctx, const void* dst, size_t dstSize)
{
if (dst != dctx->previousDstEnd && dstSize > 0) { /* not contiguous */
5ea0: 48 8b 87 c0 74 00 00 mov 0x74c0(%rdi),%rax
5ea7: 48 39 f0 cmp %rsi,%rax
5eaa: 74 30 je 5edc <ZSTD_checkContinuity+0x3c>
5eac: 48 85 d2 test %rdx,%rdx
5eaf: 74 2b je 5edc <ZSTD_checkContinuity+0x3c>
dctx->dictEnd = dctx->previousDstEnd;
5eb1: 48 89 87 d8 74 00 00 mov %rax,0x74d8(%rdi)
dctx->virtualStart = (const char*)dst - ((const char*)(dctx->previousDstEnd) - (const char*)(dctx->prefixStart));
5eb8: 48 89 f2 mov %rsi,%rdx
5ebb: 48 2b 87 c8 74 00 00 sub 0x74c8(%rdi),%rax
dctx->prefixStart = dst;
dctx->previousDstEnd = dst;
5ec2: 66 48 0f 6e c6 movq %rsi,%xmm0
dctx->virtualStart = (const char*)dst - ((const char*)(dctx->previousDstEnd) - (const char*)(dctx->prefixStart));
5ec7: 48 29 c2 sub %rax,%rdx
dctx->previousDstEnd = dst;
5eca: 66 0f 6c c0 punpcklqdq %xmm0,%xmm0
dctx->virtualStart = (const char*)dst - ((const char*)(dctx->previousDstEnd) - (const char*)(dctx->prefixStart));
5ece: 48 89 97 d0 74 00 00 mov %rdx,0x74d0(%rdi)
dctx->previousDstEnd = dst;
5ed5: 0f 11 87 c0 74 00 00 movups %xmm0,0x74c0(%rdi)
}
}
5edc: c3 retq
5edd: 0f 1f 00 nopl (%rax)
0000000000005ee0 <ZSTD_decompressBlock>:
size_t ZSTD_decompressBlock(ZSTD_DCtx* dctx,
void* dst, size_t dstCapacity,
const void* src, size_t srcSize)
{
5ee0: 41 57 push %r15
5ee2: 41 56 push %r14
5ee4: 49 89 d6 mov %rdx,%r14
5ee7: 41 55 push %r13
5ee9: 49 89 cd mov %rcx,%r13
5eec: 41 54 push %r12
5eee: 4d 89 c4 mov %r8,%r12
5ef1: 55 push %rbp
5ef2: 48 89 f5 mov %rsi,%rbp
5ef5: 53 push %rbx
5ef6: 48 89 fb mov %rdi,%rbx
5ef9: 48 83 ec 38 sub $0x38,%rsp
if (dst != dctx->previousDstEnd && dstSize > 0) { /* not contiguous */
5efd: 48 8b 87 c0 74 00 00 mov 0x74c0(%rdi),%rax
5f04: 48 85 d2 test %rdx,%rdx
5f07: 74 30 je 5f39 <ZSTD_decompressBlock+0x59>
5f09: 48 39 c6 cmp %rax,%rsi
5f0c: 74 2b je 5f39 <ZSTD_decompressBlock+0x59>
dctx->dictEnd = dctx->previousDstEnd;
5f0e: 48 89 87 d8 74 00 00 mov %rax,0x74d8(%rdi)
dctx->virtualStart = (const char*)dst - ((const char*)(dctx->previousDstEnd) - (const char*)(dctx->prefixStart));
5f15: 48 89 f2 mov %rsi,%rdx
5f18: 48 2b 87 c8 74 00 00 sub 0x74c8(%rdi),%rax
dctx->previousDstEnd = dst;
5f1f: 66 48 0f 6e c6 movq %rsi,%xmm0
dctx->virtualStart = (const char*)dst - ((const char*)(dctx->previousDstEnd) - (const char*)(dctx->prefixStart));
5f24: 48 29 c2 sub %rax,%rdx
dctx->previousDstEnd = dst;
5f27: 66 0f 6c c0 punpcklqdq %xmm0,%xmm0
dctx->virtualStart = (const char*)dst - ((const char*)(dctx->previousDstEnd) - (const char*)(dctx->prefixStart));
5f2b: 48 89 97 d0 74 00 00 mov %rdx,0x74d0(%rdi)
dctx->previousDstEnd = dst;
5f32: 0f 11 87 c0 74 00 00 movups %xmm0,0x74c0(%rdi)
RETURN_ERROR_IF(srcSize >= ZSTD_BLOCKSIZE_MAX, srcSize_wrong, "");
5f39: 48 c7 c0 b8 ff ff ff mov $0xffffffffffffffb8,%rax
5f40: 49 81 fc ff ff 01 00 cmp $0x1ffff,%r12
5f47: 77 7e ja 5fc7 <ZSTD_decompressBlock+0xe7>
RETURN_ERROR_IF(srcSize < MIN_CBLOCK_SIZE, corruption_detected, "");
5f49: 49 83 fc 02 cmp $0x2,%r12
5f4d: 76 71 jbe 5fc0 <ZSTD_decompressBlock+0xe0>
symbolEncodingType_e const litEncType = (symbolEncodingType_e)(istart[0] & 3);
5f4f: 41 0f b6 55 00 movzbl 0x0(%r13),%edx
5f54: 41 89 d7 mov %edx,%r15d
5f57: 41 83 e7 03 and $0x3,%r15d
switch(litEncType)
5f5b: 41 80 ff 02 cmp $0x2,%r15b
5f5f: 0f 84 8e 00 00 00 je 5ff3 <ZSTD_decompressBlock+0x113>
5f65: 41 80 ff 03 cmp $0x3,%r15b
5f69: 74 75 je 5fe0 <ZSTD_decompressBlock+0x100>
5f6b: 41 80 ff 01 cmp $0x1,%r15b
5f6f: 0f 84 a3 01 00 00 je 6118 <ZSTD_decompressBlock+0x238>
U32 const lhlCode = ((istart[0]) >> 2) & 3;
5f75: 89 d0 mov %edx,%eax
5f77: c0 e8 02 shr $0x2,%al
5f7a: 83 e0 03 and $0x3,%eax
switch(lhlCode)
5f7d: 3c 01 cmp $0x1,%al
5f7f: 0f 84 f3 06 00 00 je 6678 <ZSTD_decompressBlock+0x798>
5f85: 3c 03 cmp $0x3,%al
5f87: 0f 84 03 07 00 00 je 6690 <ZSTD_decompressBlock+0x7b0>
litSize = istart[0] >> 3;
5f8d: c0 ea 03 shr $0x3,%dl
lhSize = 1;
5f90: b8 01 00 00 00 mov $0x1,%eax
litSize = istart[0] >> 3;
5f95: 44 0f b6 fa movzbl %dl,%r15d
if (lhSize+litSize+WILDCOPY_OVERLENGTH > srcSize) { /* risk reading beyond src buffer with wildcopy */
5f99: 4d 8d 14 07 lea (%r15,%rax,1),%r10
5f9d: 49 8d 52 20 lea 0x20(%r10),%rdx
5fa1: 49 39 d4 cmp %rdx,%r12
5fa4: 0f 83 16 05 00 00 jae 64c0 <ZSTD_decompressBlock+0x5e0>
RETURN_ERROR_IF(litSize+lhSize > srcSize, corruption_detected, "");
5faa: 4d 39 d4 cmp %r10,%r12
5fad: 4c 89 14 24 mov %r10,(%rsp)
5fb1: 0f 83 11 06 00 00 jae 65c8 <ZSTD_decompressBlock+0x6e8>
5fb7: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1)
5fbe: 00 00
RETURN_ERROR_IF(srcSize < MIN_CBLOCK_SIZE, corruption_detected, "");
5fc0: 48 c7 c0 ec ff ff ff mov $0xffffffffffffffec,%rax
size_t dSize;
ZSTD_checkContinuity(dctx, dst, dstCapacity);
dSize = ZSTD_decompressBlock_internal(dctx, dst, dstCapacity, src, srcSize, /* frame */ 0);
dctx->previousDstEnd = (char*)dst + dSize;
5fc7: 48 01 c5 add %rax,%rbp
5fca: 48 89 ab c0 74 00 00 mov %rbp,0x74c0(%rbx)
return dSize;
}
5fd1: 48 83 c4 38 add $0x38,%rsp
5fd5: 5b pop %rbx
5fd6: 5d pop %rbp
5fd7: 41 5c pop %r12
5fd9: 41 5d pop %r13
5fdb: 41 5e pop %r14
5fdd: 41 5f pop %r15
5fdf: c3 retq
RETURN_ERROR_IF(dctx->litEntropy==0, dictionary_corrupted, "");
5fe0: 44 8b 8b 28 75 00 00 mov 0x7528(%rbx),%r9d
5fe7: 48 c7 c0 e2 ff ff ff mov $0xffffffffffffffe2,%rax
5fee: 45 85 c9 test %r9d,%r9d
5ff1: 74 d4 je 5fc7 <ZSTD_decompressBlock+0xe7>
RETURN_ERROR_IF(srcSize < 5, corruption_detected, "srcSize >= MIN_CBLOCK_SIZE == 3; here we need up to 5 for case 3");
5ff3: 49 83 fc 04 cmp $0x4,%r12
5ff7: 76 c7 jbe 5fc0 <ZSTD_decompressBlock+0xe0>
MEM_STATIC U32 MEM_read32(const void* ptr) { return ((const unalign32*)ptr)->v; }
5ff9: 41 8b 4d 00 mov 0x0(%r13),%ecx
U32 const lhlCode = (istart[0] >> 2) & 3;
5ffd: c0 ea 02 shr $0x2,%dl
6000: 83 e2 03 and $0x3,%edx
litSize = (lhc >> 4) & 0x3FF;
6003: 41 89 cb mov %ecx,%r11d
6006: 41 c1 eb 04 shr $0x4,%r11d
600a: 80 fa 02 cmp $0x2,%dl
600d: 0f 84 1d 05 00 00 je 6530 <ZSTD_decompressBlock+0x650>
6013: 80 fa 03 cmp $0x3,%dl
6016: 0f 84 dc 04 00 00 je 64f8 <ZSTD_decompressBlock+0x618>
singleStream = !lhlCode;
601c: 83 f2 01 xor $0x1,%edx
litCSize = (lhc >> 14) & 0x3FF;
601f: c1 e9 0e shr $0xe,%ecx
lhSize = 3;
6022: bf 03 00 00 00 mov $0x3,%edi
litSize = (lhc >> 4) & 0x3FF;
6027: 41 81 e3 ff 03 00 00 and $0x3ff,%r11d
singleStream = !lhlCode;
602e: 0f b6 d2 movzbl %dl,%edx
litCSize = (lhc >> 14) & 0x3FF;
6031: 81 e1 ff 03 00 00 and $0x3ff,%ecx
RETURN_ERROR_IF(litCSize + lhSize > srcSize, corruption_detected, "");
6037: 4c 8d 14 0f lea (%rdi,%rcx,1),%r10
603b: 4d 39 d4 cmp %r10,%r12
603e: 0f 82 7c ff ff ff jb 5fc0 <ZSTD_decompressBlock+0xe0>
if (dctx->ddictIsCold && (litSize > 768 /* heuristic */)) {
6044: 44 8b 83 f4 75 00 00 mov 0x75f4(%rbx),%r8d
604b: 45 85 c0 test %r8d,%r8d
604e: 74 0d je 605d <ZSTD_decompressBlock+0x17d>
6050: 49 81 fb 00 03 00 00 cmp $0x300,%r11
6057: 0f 87 aa 05 00 00 ja 6607 <ZSTD_decompressBlock+0x727>
dctx->litBuffer, litSize, istart+lhSize, litCSize,
605d: 49 8d 44 3d 00 lea 0x0(%r13,%rdi,1),%rax
6062: 48 8d bb 90 76 00 00 lea 0x7690(%rbx),%rdi
hufSuccess = HUF_decompress1X_usingDTable_bmi2(
6069: 8b b3 d8 75 00 00 mov 0x75d8(%rbx),%esi
dctx->litBuffer, litSize, istart+lhSize, litCSize,
606f: 48 89 3c 24 mov %rdi,(%rsp)
if (litEncType==set_repeat) {
6073: 41 80 ff 03 cmp $0x3,%r15b
6077: 0f 84 63 06 00 00 je 66e0 <ZSTD_decompressBlock+0x800>
if (singleStream) {
607d: 4c 89 54 24 18 mov %r10,0x18(%rsp)
istart+lhSize, litCSize, dctx->workspace,
6082: 4c 8d 8b bc 6a 00 00 lea 0x6abc(%rbx),%r9
dctx->entropy.hufTable, dctx->litBuffer, litSize,
6089: 48 8d bb 38 28 00 00 lea 0x2838(%rbx),%rdi
if (singleStream) {
6090: 85 d2 test %edx,%edx
6092: 0f 85 f0 04 00 00 jne 6588 <ZSTD_decompressBlock+0x6a8>
hufSuccess = HUF_decompress4X_hufOnly_wksp_bmi2(
6098: 56 push %rsi
6099: 4c 89 da mov %r11,%rdx
609c: 49 89 c8 mov %rcx,%r8
609f: 48 8d b3 90 76 00 00 lea 0x7690(%rbx),%rsi
60a6: 68 00 0a 00 00 pushq $0xa00
60ab: 48 89 c1 mov %rax,%rcx
60ae: 48 89 7c 24 18 mov %rdi,0x18(%rsp)
60b3: 4c 89 5c 24 20 mov %r11,0x20(%rsp)
60b8: e8 00 00 00 00 callq 60bd <ZSTD_decompressBlock+0x1dd>
60bd: 41 5b pop %r11
60bf: 5a pop %rdx
60c0: 4c 8b 54 24 18 mov 0x18(%rsp),%r10
60c5: 4c 8b 5c 24 10 mov 0x10(%rsp),%r11
60ca: 48 8b 7c 24 08 mov 0x8(%rsp),%rdi
RETURN_ERROR_IF(HUF_isError(hufSuccess), corruption_detected, "");
60cf: 48 83 f8 88 cmp $0xffffffffffffff88,%rax
60d3: 0f 87 e7 fe ff ff ja 5fc0 <ZSTD_decompressBlock+0xe0>
dctx->litPtr = dctx->litBuffer;
60d9: 48 8d 83 90 76 00 00 lea 0x7690(%rbx),%rax
dctx->litSize = litSize;
60e0: 4c 89 9b c0 75 00 00 mov %r11,0x75c0(%rbx)
dctx->litPtr = dctx->litBuffer;
60e7: 48 89 83 a0 75 00 00 mov %rax,0x75a0(%rbx)
dctx->litEntropy = 1;
60ee: c7 83 28 75 00 00 01 movl $0x1,0x7528(%rbx)
60f5: 00 00 00
if (litEncType==set_compressed) dctx->HUFptr = dctx->entropy.hufTable;
60f8: 41 80 ff 02 cmp $0x2,%r15b
60fc: 75 04 jne 6102 <ZSTD_decompressBlock+0x222>
60fe: 48 89 7b 18 mov %rdi,0x18(%rbx)
ZSTD_memset(dctx->litBuffer + dctx->litSize, 0, WILDCOPY_OVERLENGTH);
6102: 4c 03 1c 24 add (%rsp),%r11
6106: 66 0f ef c0 pxor %xmm0,%xmm0
610a: 41 0f 11 03 movups %xmm0,(%r11)
610e: 41 0f 11 43 10 movups %xmm0,0x10(%r11)
return litCSize + lhSize;
6113: eb 5c jmp 6171 <ZSTD_decompressBlock+0x291>
6115: 0f 1f 00 nopl (%rax)
{ U32 const lhlCode = ((istart[0]) >> 2) & 3;
6118: 89 d0 mov %edx,%eax
611a: c0 e8 02 shr $0x2,%al
611d: 83 e0 03 and $0x3,%eax
switch(lhlCode)
6120: 3c 01 cmp $0x1,%al
6122: 0f 84 88 05 00 00 je 66b0 <ZSTD_decompressBlock+0x7d0>
6128: 3c 03 cmp $0x3,%al
612a: 0f 84 08 05 00 00 je 6638 <ZSTD_decompressBlock+0x758>
litSize = istart[0] >> 3;
6130: c0 ea 03 shr $0x3,%dl
break;
6133: 41 ba 02 00 00 00 mov $0x2,%r10d
lhSize = 1;
6139: b8 01 00 00 00 mov $0x1,%eax
litSize = istart[0] >> 3;
613e: 44 0f b6 fa movzbl %dl,%r15d
ZSTD_memset(dctx->litBuffer, istart[lhSize], litSize + WILDCOPY_OVERLENGTH);
6142: 48 8d 8b 90 76 00 00 lea 0x7690(%rbx),%rcx
6149: 41 0f b6 74 05 00 movzbl 0x0(%r13,%rax,1),%esi
614f: 49 8d 57 20 lea 0x20(%r15),%rdx
6153: 4c 89 14 24 mov %r10,(%rsp)
6157: 48 89 cf mov %rcx,%rdi
615a: e8 00 00 00 00 callq 615f <ZSTD_decompressBlock+0x27f>
dctx->litSize = litSize;
615f: 4c 89 bb c0 75 00 00 mov %r15,0x75c0(%rbx)
return lhSize+1;
6166: 4c 8b 14 24 mov (%rsp),%r10
dctx->litPtr = dctx->litBuffer;
616a: 48 89 83 a0 75 00 00 mov %rax,0x75a0(%rbx)
ip += litCSize;
6171: 4d 01 d5 add %r10,%r13
srcSize -= litCSize;
6174: 4d 29 d4 sub %r10,%r12
size_t const seqHSize = ZSTD_decodeSeqHeaders(dctx, &nbSeq, ip, srcSize);
6177: 48 8d 74 24 2c lea 0x2c(%rsp),%rsi
617c: 48 89 df mov %rbx,%rdi
617f: 4c 89 e1 mov %r12,%rcx
6182: 4c 89 ea mov %r13,%rdx
int usePrefetchDecoder = dctx->ddictIsCold;
6185: 44 8b bb f4 75 00 00 mov 0x75f4(%rbx),%r15d
size_t const seqHSize = ZSTD_decodeSeqHeaders(dctx, &nbSeq, ip, srcSize);
618c: e8 00 00 00 00 callq 6191 <ZSTD_decompressBlock+0x2b1>
if (ZSTD_isError(seqHSize)) return seqHSize;
6191: 48 83 f8 88 cmp $0xffffffffffffff88,%rax
6195: 0f 87 2c fe ff ff ja 5fc7 <ZSTD_decompressBlock+0xe7>
RETURN_ERROR_IF(dst == NULL && nbSeq > 0, dstSize_tooSmall, "NULL not handled");
619b: 44 8b 4c 24 2c mov 0x2c(%rsp),%r9d
ip += seqHSize;
61a0: 49 01 c5 add %rax,%r13
srcSize -= seqHSize;
61a3: 49 29 c4 sub %rax,%r12
RETURN_ERROR_IF(dst == NULL && nbSeq > 0, dstSize_tooSmall, "NULL not handled");
61a6: 48 85 ed test %rbp,%rbp
61a9: 0f 84 31 03 00 00 je 64e0 <ZSTD_decompressBlock+0x600>
if ( !usePrefetchDecoder
61af: 45 85 ff test %r15d,%r15d
61b2: 74 3c je 61f0 <ZSTD_decompressBlock+0x310>
dctx->ddictIsCold = 0;
61b4: c7 83 f4 75 00 00 00 movl $0x0,0x75f4(%rbx)
61bb: 00 00 00
if (dctx->bmi2) {
61be: 44 8b 93 d8 75 00 00 mov 0x75d8(%rbx),%r10d
return ZSTD_decompressSequencesLong_bmi2(dctx, dst, maxDstSize, seqStart, seqSize, nbSeq, isLongOffset, frame);
61c5: 4d 89 e0 mov %r12,%r8
61c8: 4c 89 e9 mov %r13,%rcx
61cb: 4c 89 f2 mov %r14,%rdx
61ce: 48 89 ee mov %rbp,%rsi
61d1: 48 89 df mov %rbx,%rdi
if (dctx->bmi2) {
61d4: 45 85 d2 test %r10d,%r10d
61d7: 0f 85 4c 04 00 00 jne 6629 <ZSTD_decompressBlock+0x749>
return ZSTD_decompressSequencesLong_default(dctx, dst, maxDstSize, seqStart, seqSize, nbSeq, isLongOffset, frame);
61dd: e8 de a8 ff ff callq ac0 <ZSTD_decompressSequencesLong_default.constprop.0>
61e2: e9 e0 fd ff ff jmpq 5fc7 <ZSTD_decompressBlock+0xe7>
61e7: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1)
61ee: 00 00
&& (nbSeq>ADVANCED_SEQS) ) { /* could probably use a larger nbSeq limit */
61f0: 41 83 f9 08 cmp $0x8,%r9d
61f4: 0f 8e 56 03 00 00 jle 6550 <ZSTD_decompressBlock+0x670>
U32 const shareLongOffsets = ZSTD_getLongOffsetsShare(dctx->OFTptr);
61fa: 48 8b 73 10 mov 0x10(%rbx),%rsi
U32 const max = 1 << tableLog;
61fe: 41 b8 01 00 00 00 mov $0x1,%r8d
U32 const tableLog = ((const ZSTD_seqSymbol_header*)ptr)[0].tableLog;
6204: 8b 4e 04 mov 0x4(%rsi),%ecx
U32 const max = 1 << tableLog;
6207: 41 d3 e0 shl %cl,%r8d
for (u=0; u<max; u++) {
620a: 45 85 c0 test %r8d,%r8d
620d: 0f 84 3d 03 00 00 je 6550 <ZSTD_decompressBlock+0x670>
6213: 41 8d 50 ff lea -0x1(%r8),%edx
6217: 83 fa 0f cmp $0xf,%edx
621a: 0f 86 30 05 00 00 jbe 6750 <ZSTD_decompressBlock+0x870>
6220: 89 d7 mov %edx,%edi
6222: 48 8d 46 0a lea 0xa(%rsi),%rax
6226: 66 0f ef d2 pxor %xmm2,%xmm2
622a: 66 0f 6f 0d 00 00 00 movdqa 0x0(%rip),%xmm1 # 6232 <ZSTD_decompressBlock+0x352>
6231: 00
6232: c1 ef 04 shr $0x4,%edi
6235: 66 0f 6f 35 00 00 00 movdqa 0x0(%rip),%xmm6 # 623d <ZSTD_decompressBlock+0x35d>
623c: 00
623d: 66 0f ef e4 pxor %xmm4,%xmm4
6241: 66 0f ef db pxor %xmm3,%xmm3
6245: 83 ef 01 sub $0x1,%edi
6248: 66 0f 6f 2d 00 00 00 movdqa 0x0(%rip),%xmm5 # 6250 <ZSTD_decompressBlock+0x370>
624f: 00
6250: 48 c1 e7 07 shl $0x7,%rdi
6254: 48 8d bc 3e 8a 00 00 lea 0x8a(%rsi,%rdi,1),%rdi
625b: 00
625c: 0f 1f 40 00 nopl 0x0(%rax)
if (table[u].nbAdditionalBits > 22) total += 1;
6260: f3 0f 6f 00 movdqu (%rax),%xmm0
6264: f3 0f 6f 78 10 movdqu 0x10(%rax),%xmm7
6269: 48 83 e8 80 sub $0xffffffffffffff80,%rax
626d: f3 44 0f 6f 40 b0 movdqu -0x50(%rax),%xmm8
6273: f3 44 0f 6f 48 f0 movdqu -0x10(%rax),%xmm9
6279: 66 0f db f9 pand %xmm1,%xmm7
627d: 66 0f db c1 pand %xmm1,%xmm0
6281: 66 0f 67 c7 packuswb %xmm7,%xmm0
6285: f3 0f 6f 78 a0 movdqu -0x60(%rax),%xmm7
628a: 66 44 0f db c1 pand %xmm1,%xmm8
628f: 66 44 0f db c9 pand %xmm1,%xmm9
6294: 66 0f db c1 pand %xmm1,%xmm0
6298: 66 0f db f9 pand %xmm1,%xmm7
629c: 66 41 0f 67 f8 packuswb %xmm8,%xmm7
62a1: f3 44 0f 6f 40 d0 movdqu -0x30(%rax),%xmm8
62a7: 66 0f db f9 pand %xmm1,%xmm7
62ab: 66 0f 67 c7 packuswb %xmm7,%xmm0
62af: f3 0f 6f 78 c0 movdqu -0x40(%rax),%xmm7
62b4: 66 44 0f db c1 pand %xmm1,%xmm8
62b9: 66 0f db c1 pand %xmm1,%xmm0
62bd: 66 0f db f9 pand %xmm1,%xmm7
62c1: 66 41 0f 67 f8 packuswb %xmm8,%xmm7
62c6: f3 44 0f 6f 40 e0 movdqu -0x20(%rax),%xmm8
62cc: 66 0f db f9 pand %xmm1,%xmm7
62d0: 66 44 0f db c1 pand %xmm1,%xmm8
62d5: 66 45 0f 67 c1 packuswb %xmm9,%xmm8
62da: 66 44 0f db c1 pand %xmm1,%xmm8
62df: 66 41 0f 67 f8 packuswb %xmm8,%xmm7
62e4: 66 0f db f9 pand %xmm1,%xmm7
62e8: 66 0f 67 c7 packuswb %xmm7,%xmm0
62ec: 66 0f d8 c6 psubusb %xmm6,%xmm0
62f0: 66 0f 74 c4 pcmpeqb %xmm4,%xmm0
62f4: 66 0f df c5 pandn %xmm5,%xmm0
62f8: 66 0f 6f f8 movdqa %xmm0,%xmm7
62fc: 66 0f 68 c4 punpckhbw %xmm4,%xmm0
6300: 66 44 0f 6f c0 movdqa %xmm0,%xmm8
6305: 66 0f 60 fc punpcklbw %xmm4,%xmm7
6309: 66 0f 69 c3 punpckhwd %xmm3,%xmm0
630d: 66 44 0f 61 c3 punpcklwd %xmm3,%xmm8
6312: 66 41 0f fe c0 paddd %xmm8,%xmm0
6317: 66 44 0f 6f c7 movdqa %xmm7,%xmm8
631c: 66 0f 69 fb punpckhwd %xmm3,%xmm7
6320: 66 44 0f 61 c3 punpcklwd %xmm3,%xmm8
6325: 66 41 0f fe f8 paddd %xmm8,%xmm7
632a: 66 0f fe c7 paddd %xmm7,%xmm0
632e: 66 0f fe d0 paddd %xmm0,%xmm2
for (u=0; u<max; u++) {
6332: 48 39 f8 cmp %rdi,%rax
6335: 0f 85 25 ff ff ff jne 6260 <ZSTD_decompressBlock+0x380>
633b: 66 0f 6f c2 movdqa %xmm2,%xmm0
633f: 83 e2 f0 and $0xfffffff0,%edx
6342: 66 0f 73 d8 08 psrldq $0x8,%xmm0
6347: 66 0f fe d0 paddd %xmm0,%xmm2
634b: 66 0f 6f c2 movdqa %xmm2,%xmm0
634f: 66 0f 73 d8 04 psrldq $0x4,%xmm0
6354: 66 0f fe d0 paddd %xmm0,%xmm2
6358: 66 0f 7e d0 movd %xmm2,%eax
if (table[u].nbAdditionalBits > 22) total += 1;
635c: 44 8d 52 01 lea 0x1(%rdx),%r10d
6360: 42 80 7c d6 02 17 cmpb $0x17,0x2(%rsi,%r10,8)
6366: 83 d8 ff sbb $0xffffffff,%eax
for (u=0; u<max; u++) {
6369: 45 39 d0 cmp %r10d,%r8d
636c: 0f 86 26 01 00 00 jbe 6498 <ZSTD_decompressBlock+0x5b8>
if (table[u].nbAdditionalBits > 22) total += 1;
6372: 44 8d 52 02 lea 0x2(%rdx),%r10d
6376: 42 80 7c d6 02 17 cmpb $0x17,0x2(%rsi,%r10,8)
637c: 83 d8 ff sbb $0xffffffff,%eax
for (u=0; u<max; u++) {
637f: 45 39 d0 cmp %r10d,%r8d
6382: 0f 86 10 01 00 00 jbe 6498 <ZSTD_decompressBlock+0x5b8>
if (table[u].nbAdditionalBits > 22) total += 1;
6388: 44 8d 52 03 lea 0x3(%rdx),%r10d
638c: 42 80 7c d6 02 17 cmpb $0x17,0x2(%rsi,%r10,8)
6392: 83 d8 ff sbb $0xffffffff,%eax
for (u=0; u<max; u++) {
6395: 45 39 d0 cmp %r10d,%r8d
6398: 0f 86 fa 00 00 00 jbe 6498 <ZSTD_decompressBlock+0x5b8>
if (table[u].nbAdditionalBits > 22) total += 1;
639e: 44 8d 52 04 lea 0x4(%rdx),%r10d
63a2: 42 80 7c d6 02 17 cmpb $0x17,0x2(%rsi,%r10,8)
63a8: 83 d8 ff sbb $0xffffffff,%eax
for (u=0; u<max; u++) {
63ab: 45 39 d0 cmp %r10d,%r8d
63ae: 0f 86 e4 00 00 00 jbe 6498 <ZSTD_decompressBlock+0x5b8>
if (table[u].nbAdditionalBits > 22) total += 1;
63b4: 44 8d 52 05 lea 0x5(%rdx),%r10d
63b8: 42 80 7c d6 02 17 cmpb $0x17,0x2(%rsi,%r10,8)
63be: 83 d8 ff sbb $0xffffffff,%eax
for (u=0; u<max; u++) {
63c1: 45 39 d0 cmp %r10d,%r8d
63c4: 0f 86 ce 00 00 00 jbe 6498 <ZSTD_decompressBlock+0x5b8>
if (table[u].nbAdditionalBits > 22) total += 1;
63ca: 44 8d 52 06 lea 0x6(%rdx),%r10d
63ce: 42 80 7c d6 02 17 cmpb $0x17,0x2(%rsi,%r10,8)
63d4: 83 d8 ff sbb $0xffffffff,%eax
for (u=0; u<max; u++) {
63d7: 45 39 d0 cmp %r10d,%r8d
63da: 0f 86 b8 00 00 00 jbe 6498 <ZSTD_decompressBlock+0x5b8>
if (table[u].nbAdditionalBits > 22) total += 1;
63e0: 44 8d 52 07 lea 0x7(%rdx),%r10d
63e4: 42 80 7c d6 02 17 cmpb $0x17,0x2(%rsi,%r10,8)
63ea: 83 d8 ff sbb $0xffffffff,%eax
for (u=0; u<max; u++) {
63ed: 45 39 d0 cmp %r10d,%r8d
63f0: 0f 86 a2 00 00 00 jbe 6498 <ZSTD_decompressBlock+0x5b8>
if (table[u].nbAdditionalBits > 22) total += 1;
63f6: 44 8d 52 08 lea 0x8(%rdx),%r10d
63fa: 42 80 7c d6 02 17 cmpb $0x17,0x2(%rsi,%r10,8)
6400: 83 d8 ff sbb $0xffffffff,%eax
for (u=0; u<max; u++) {
6403: 45 39 d0 cmp %r10d,%r8d
6406: 0f 86 8c 00 00 00 jbe 6498 <ZSTD_decompressBlock+0x5b8>
if (table[u].nbAdditionalBits > 22) total += 1;
640c: 44 8d 52 09 lea 0x9(%rdx),%r10d
6410: 42 80 7c d6 02 17 cmpb $0x17,0x2(%rsi,%r10,8)
6416: 83 d8 ff sbb $0xffffffff,%eax
for (u=0; u<max; u++) {
6419: 45 39 d0 cmp %r10d,%r8d
641c: 76 7a jbe 6498 <ZSTD_decompressBlock+0x5b8>
if (table[u].nbAdditionalBits > 22) total += 1;
641e: 44 8d 52 0a lea 0xa(%rdx),%r10d
6422: 42 80 7c d6 02 17 cmpb $0x17,0x2(%rsi,%r10,8)
6428: 83 d8 ff sbb $0xffffffff,%eax
for (u=0; u<max; u++) {
642b: 45 39 d0 cmp %r10d,%r8d
642e: 76 68 jbe 6498 <ZSTD_decompressBlock+0x5b8>
if (table[u].nbAdditionalBits > 22) total += 1;
6430: 44 8d 52 0b lea 0xb(%rdx),%r10d
6434: 42 80 7c d6 02 17 cmpb $0x17,0x2(%rsi,%r10,8)
643a: 83 d8 ff sbb $0xffffffff,%eax
for (u=0; u<max; u++) {
643d: 45 39 d0 cmp %r10d,%r8d
6440: 76 56 jbe 6498 <ZSTD_decompressBlock+0x5b8>
if (table[u].nbAdditionalBits > 22) total += 1;
6442: 44 8d 52 0c lea 0xc(%rdx),%r10d
6446: 42 80 7c d6 02 17 cmpb $0x17,0x2(%rsi,%r10,8)
644c: 83 d8 ff sbb $0xffffffff,%eax
for (u=0; u<max; u++) {
644f: 45 39 d0 cmp %r10d,%r8d
6452: 76 44 jbe 6498 <ZSTD_decompressBlock+0x5b8>
if (table[u].nbAdditionalBits > 22) total += 1;
6454: 44 8d 52 0d lea 0xd(%rdx),%r10d
6458: 42 80 7c d6 02 17 cmpb $0x17,0x2(%rsi,%r10,8)
645e: 83 d8 ff sbb $0xffffffff,%eax
for (u=0; u<max; u++) {
6461: 45 39 d0 cmp %r10d,%r8d
6464: 76 32 jbe 6498 <ZSTD_decompressBlock+0x5b8>
if (table[u].nbAdditionalBits > 22) total += 1;
6466: 44 8d 52 0e lea 0xe(%rdx),%r10d
646a: 42 80 7c d6 02 17 cmpb $0x17,0x2(%rsi,%r10,8)
6470: 83 d8 ff sbb $0xffffffff,%eax
for (u=0; u<max; u++) {
6473: 45 39 d0 cmp %r10d,%r8d
6476: 76 20 jbe 6498 <ZSTD_decompressBlock+0x5b8>
if (table[u].nbAdditionalBits > 22) total += 1;
6478: 44 8d 52 0f lea 0xf(%rdx),%r10d
647c: 42 80 7c d6 02 17 cmpb $0x17,0x2(%rsi,%r10,8)
6482: 83 d8 ff sbb $0xffffffff,%eax
for (u=0; u<max; u++) {
6485: 45 39 d0 cmp %r10d,%r8d
6488: 76 0e jbe 6498 <ZSTD_decompressBlock+0x5b8>
if (table[u].nbAdditionalBits > 22) total += 1;
648a: 83 c2 10 add $0x10,%edx
648d: 80 7c d6 02 17 cmpb $0x17,0x2(%rsi,%rdx,8)
6492: 83 d8 ff sbb $0xffffffff,%eax
6495: 0f 1f 00 nopl (%rax)
dctx->ddictIsCold = 0;
6498: c7 83 f4 75 00 00 00 movl $0x0,0x75f4(%rbx)
649f: 00 00 00
total <<= (OffFSELog - tableLog); /* scale to OffFSELog */
64a2: ba 08 00 00 00 mov $0x8,%edx
64a7: 29 ca sub %ecx,%edx
64a9: 89 d1 mov %edx,%ecx
64ab: d3 e0 shl %cl,%eax
if (usePrefetchDecoder)
64ad: 83 f8 06 cmp $0x6,%eax
64b0: 0f 86 a4 00 00 00 jbe 655a <ZSTD_decompressBlock+0x67a>
64b6: e9 03 fd ff ff jmpq 61be <ZSTD_decompressBlock+0x2de>
64bb: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)
dctx->litPtr = istart+lhSize;
64c0: 4c 01 e8 add %r13,%rax
dctx->litSize = litSize;
64c3: 4c 89 bb c0 75 00 00 mov %r15,0x75c0(%rbx)
dctx->litPtr = istart+lhSize;
64ca: 48 89 83 a0 75 00 00 mov %rax,0x75a0(%rbx)
return lhSize+litSize;
64d1: e9 9b fc ff ff jmpq 6171 <ZSTD_decompressBlock+0x291>
64d6: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1)
64dd: 00 00 00
RETURN_ERROR_IF(dst == NULL && nbSeq > 0, dstSize_tooSmall, "NULL not handled");
64e0: 48 c7 c0 ba ff ff ff mov $0xffffffffffffffba,%rax
64e7: 45 85 c9 test %r9d,%r9d
64ea: 0f 8e bf fc ff ff jle 61af <ZSTD_decompressBlock+0x2cf>
64f0: e9 d2 fa ff ff jmpq 5fc7 <ZSTD_decompressBlock+0xe7>
64f5: 0f 1f 00 nopl (%rax)
litSize = (lhc >> 4) & 0x3FFFF;
64f8: 44 89 d8 mov %r11d,%eax
litCSize = (lhc >> 22) + ((size_t)istart[4] << 10);
64fb: 41 0f b6 55 04 movzbl 0x4(%r13),%edx
6500: 25 ff ff 03 00 and $0x3ffff,%eax
litSize = (lhc >> 4) & 0x3FFFF;
6505: 41 89 c3 mov %eax,%r11d
RETURN_ERROR_IF(litSize > ZSTD_BLOCKSIZE_MAX, corruption_detected, "");
6508: 3d 00 00 02 00 cmp $0x20000,%eax
650d: 0f 87 ad fa ff ff ja 5fc0 <ZSTD_decompressBlock+0xe0>
litCSize = (lhc >> 22) + ((size_t)istart[4] << 10);
6513: c1 e9 16 shr $0x16,%ecx
lhSize = 5;
6516: bf 05 00 00 00 mov $0x5,%edi
litCSize = (lhc >> 22) + ((size_t)istart[4] << 10);
651b: 89 c8 mov %ecx,%eax
651d: 0f b6 ca movzbl %dl,%ecx
U32 singleStream=0;
6520: 31 d2 xor %edx,%edx
litCSize = (lhc >> 22) + ((size_t)istart[4] << 10);
6522: 48 c1 e1 0a shl $0xa,%rcx
6526: 48 01 c1 add %rax,%rcx
6529: e9 09 fb ff ff jmpq 6037 <ZSTD_decompressBlock+0x157>
652e: 66 90 xchg %ax,%ax
litSize = (lhc >> 4) & 0x3FFF;
6530: 41 81 e3 ff 3f 00 00 and $0x3fff,%r11d
litCSize = lhc >> 18;
6537: c1 e9 12 shr $0x12,%ecx
U32 singleStream=0;
653a: 31 d2 xor %edx,%edx
lhSize = 4;
653c: bf 04 00 00 00 mov $0x4,%edi
break;
6541: e9 f1 fa ff ff jmpq 6037 <ZSTD_decompressBlock+0x157>
6546: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1)
654d: 00 00 00
dctx->ddictIsCold = 0;
6550: c7 83 f4 75 00 00 00 movl $0x0,0x75f4(%rbx)
6557: 00 00 00
if (dctx->bmi2) {
655a: 8b 83 d8 75 00 00 mov 0x75d8(%rbx),%eax
return ZSTD_decompressSequences_bmi2(dctx, dst, maxDstSize, seqStart, seqSize, nbSeq, isLongOffset, frame);
6560: 4d 89 e0 mov %r12,%r8
6563: 4c 89 e9 mov %r13,%rcx
6566: 4c 89 f2 mov %r14,%rdx
6569: 48 89 ee mov %rbp,%rsi
656c: 48 89 df mov %rbx,%rdi
if (dctx->bmi2) {
656f: 85 c0 test %eax,%eax
6571: 0f 85 59 01 00 00 jne 66d0 <ZSTD_decompressBlock+0x7f0>
return ZSTD_decompressSequences_default(dctx, dst, maxDstSize, seqStart, seqSize, nbSeq, isLongOffset, frame);
6577: e8 64 c2 ff ff callq 27e0 <ZSTD_decompressSequences_default.constprop.0>
657c: e9 46 fa ff ff jmpq 5fc7 <ZSTD_decompressBlock+0xe7>
6581: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
hufSuccess = HUF_decompress1X1_DCtx_wksp_bmi2(
6588: 56 push %rsi
6589: 49 89 c8 mov %rcx,%r8
658c: 4c 89 da mov %r11,%rdx
658f: 48 89 c1 mov %rax,%rcx
6592: 68 00 0a 00 00 pushq $0xa00
6597: 48 8d b3 90 76 00 00 lea 0x7690(%rbx),%rsi
659e: 4c 89 5c 24 20 mov %r11,0x20(%rsp)
65a3: 48 89 7c 24 18 mov %rdi,0x18(%rsp)
65a8: e8 00 00 00 00 callq 65ad <ZSTD_decompressBlock+0x6cd>
65ad: 59 pop %rcx
65ae: 5e pop %rsi
65af: 48 8b 7c 24 08 mov 0x8(%rsp),%rdi
65b4: 4c 8b 5c 24 10 mov 0x10(%rsp),%r11
65b9: 4c 8b 54 24 18 mov 0x18(%rsp),%r10
65be: e9 0c fb ff ff jmpq 60cf <ZSTD_decompressBlock+0x1ef>
65c3: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)
ZSTD_memcpy(dctx->litBuffer, istart+lhSize, litSize);
65c8: 48 8d 8b 90 76 00 00 lea 0x7690(%rbx),%rcx
65cf: 49 8d 74 05 00 lea 0x0(%r13,%rax,1),%rsi
65d4: 4c 89 fa mov %r15,%rdx
65d7: 48 89 cf mov %rcx,%rdi
65da: e8 00 00 00 00 callq 65df <ZSTD_decompressBlock+0x6ff>
ZSTD_memset(dctx->litBuffer + dctx->litSize, 0, WILDCOPY_OVERLENGTH);
65df: 66 0f ef c0 pxor %xmm0,%xmm0
dctx->litSize = litSize;
65e3: 4c 89 bb c0 75 00 00 mov %r15,0x75c0(%rbx)
return lhSize+litSize;
65ea: 4c 8b 14 24 mov (%rsp),%r10
ZSTD_memcpy(dctx->litBuffer, istart+lhSize, litSize);
65ee: 48 89 c1 mov %rax,%rcx
dctx->litPtr = dctx->litBuffer;
65f1: 48 89 83 a0 75 00 00 mov %rax,0x75a0(%rbx)
ZSTD_memset(dctx->litBuffer + dctx->litSize, 0, WILDCOPY_OVERLENGTH);
65f8: 4c 01 f9 add %r15,%rcx
65fb: 0f 11 01 movups %xmm0,(%rcx)
65fe: 0f 11 41 10 movups %xmm0,0x10(%rcx)
return lhSize+litSize;
6602: e9 6a fb ff ff jmpq 6171 <ZSTD_decompressBlock+0x291>
PREFETCH_AREA(dctx->HUFptr, sizeof(dctx->entropy.hufTable));
6607: 48 8b 43 18 mov 0x18(%rbx),%rax
660b: 48 8d b0 40 40 00 00 lea 0x4040(%rax),%rsi
6612: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1)
6618: 0f 18 10 prefetcht1 (%rax)
661b: 48 83 c0 40 add $0x40,%rax
661f: 48 39 f0 cmp %rsi,%rax
6622: 75 f4 jne 6618 <ZSTD_decompressBlock+0x738>
6624: e9 34 fa ff ff jmpq 605d <ZSTD_decompressBlock+0x17d>
return ZSTD_decompressSequencesLong_bmi2(dctx, dst, maxDstSize, seqStart, seqSize, nbSeq, isLongOffset, frame);
6629: e8 d2 cb ff ff callq 3200 <ZSTD_decompressSequencesLong_bmi2.constprop.0>
662e: e9 94 f9 ff ff jmpq 5fc7 <ZSTD_decompressBlock+0xe7>
6633: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)
return (U32)MEM_readLE16(memPtr) + ((U32)(((const BYTE*)memPtr)[2]) << 16);
6638: 45 0f b6 7d 02 movzbl 0x2(%r13),%r15d
663d: 41 0f b7 45 00 movzwl 0x0(%r13),%eax
6642: 41 c1 e7 10 shl $0x10,%r15d
6646: 41 01 c7 add %eax,%r15d
litSize = MEM_readLE24(istart) >> 4;
6649: 41 c1 ef 04 shr $0x4,%r15d
RETURN_ERROR_IF(litSize > ZSTD_BLOCKSIZE_MAX, corruption_detected, "");
664d: 49 83 fc 03 cmp $0x3,%r12
6651: 0f 84 69 f9 ff ff je 5fc0 <ZSTD_decompressBlock+0xe0>
6657: 49 81 ff 00 00 02 00 cmp $0x20000,%r15
665e: 0f 87 5c f9 ff ff ja 5fc0 <ZSTD_decompressBlock+0xe0>
6664: 41 ba 04 00 00 00 mov $0x4,%r10d
lhSize = 3;
666a: b8 03 00 00 00 mov $0x3,%eax
666f: e9 ce fa ff ff jmpq 6142 <ZSTD_decompressBlock+0x262>
6674: 0f 1f 40 00 nopl 0x0(%rax)
litSize = MEM_readLE16(istart) >> 4;
6678: 45 0f b7 7d 00 movzwl 0x0(%r13),%r15d
lhSize = 2;
667d: b8 02 00 00 00 mov $0x2,%eax
litSize = MEM_readLE16(istart) >> 4;
6682: 66 41 c1 ef 04 shr $0x4,%r15w
6687: 45 0f b7 ff movzwl %r15w,%r15d
break;
668b: e9 09 f9 ff ff jmpq 5f99 <ZSTD_decompressBlock+0xb9>
6690: 45 0f b6 7d 02 movzbl 0x2(%r13),%r15d
6695: 41 0f b7 45 00 movzwl 0x0(%r13),%eax
669a: 41 c1 e7 10 shl $0x10,%r15d
669e: 41 01 c7 add %eax,%r15d
lhSize = 3;
66a1: b8 03 00 00 00 mov $0x3,%eax
litSize = MEM_readLE24(istart) >> 4;
66a6: 41 c1 ef 04 shr $0x4,%r15d
break;
66aa: e9 ea f8 ff ff jmpq 5f99 <ZSTD_decompressBlock+0xb9>
66af: 90 nop
litSize = MEM_readLE16(istart) >> 4;
66b0: 45 0f b7 7d 00 movzwl 0x0(%r13),%r15d
break;
66b5: 41 ba 03 00 00 00 mov $0x3,%r10d
lhSize = 2;
66bb: b8 02 00 00 00 mov $0x2,%eax
litSize = MEM_readLE16(istart) >> 4;
66c0: 66 41 c1 ef 04 shr $0x4,%r15w
66c5: 45 0f b7 ff movzwl %r15w,%r15d
break;
66c9: e9 74 fa ff ff jmpq 6142 <ZSTD_decompressBlock+0x262>
66ce: 66 90 xchg %ax,%ax
return ZSTD_decompressSequences_bmi2(dctx, dst, maxDstSize, seqStart, seqSize, nbSeq, isLongOffset, frame);
66d0: e8 ab b7 ff ff callq 1e80 <ZSTD_decompressSequences_bmi2.constprop.0>
66d5: e9 ed f8 ff ff jmpq 5fc7 <ZSTD_decompressBlock+0xe7>
66da: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1)
if (singleStream) {
66e0: 85 d2 test %edx,%edx
hufSuccess = HUF_decompress1X_usingDTable_bmi2(
66e2: 41 89 f1 mov %esi,%r9d
66e5: 4c 89 54 24 10 mov %r10,0x10(%rsp)
PREFETCH_AREA(dctx->HUFptr, sizeof(dctx->entropy.hufTable));
66ea: 4c 8b 43 18 mov 0x18(%rbx),%r8
hufSuccess = HUF_decompress1X_usingDTable_bmi2(
66ee: 4c 89 5c 24 08 mov %r11,0x8(%rsp)
66f3: 48 89 c2 mov %rax,%rdx
66f6: 4c 89 de mov %r11,%rsi
if (singleStream) {
66f9: 74 3d je 6738 <ZSTD_decompressBlock+0x858>
hufSuccess = HUF_decompress1X_usingDTable_bmi2(
66fb: e8 00 00 00 00 callq 6700 <ZSTD_decompressBlock+0x820>
6700: 4c 8b 5c 24 08 mov 0x8(%rsp),%r11
6705: 4c 8b 54 24 10 mov 0x10(%rsp),%r10
RETURN_ERROR_IF(HUF_isError(hufSuccess), corruption_detected, "");
670a: 48 83 f8 88 cmp $0xffffffffffffff88,%rax
670e: 0f 87 ac f8 ff ff ja 5fc0 <ZSTD_decompressBlock+0xe0>
dctx->litPtr = dctx->litBuffer;
6714: 48 8d 83 90 76 00 00 lea 0x7690(%rbx),%rax
dctx->litSize = litSize;
671b: 4c 89 9b c0 75 00 00 mov %r11,0x75c0(%rbx)
dctx->litPtr = dctx->litBuffer;
6722: 48 89 83 a0 75 00 00 mov %rax,0x75a0(%rbx)
dctx->litEntropy = 1;
6729: c7 83 28 75 00 00 01 movl $0x1,0x7528(%rbx)
6730: 00 00 00
if (litEncType==set_compressed) dctx->HUFptr = dctx->entropy.hufTable;
6733: e9 ca f9 ff ff jmpq 6102 <ZSTD_decompressBlock+0x222>
hufSuccess = HUF_decompress4X_usingDTable_bmi2(
6738: 48 8d bb 90 76 00 00 lea 0x7690(%rbx),%rdi
673f: e8 00 00 00 00 callq 6744 <ZSTD_decompressBlock+0x864>
6744: 4c 8b 5c 24 08 mov 0x8(%rsp),%r11
6749: 4c 8b 54 24 10 mov 0x10(%rsp),%r10
674e: eb ba jmp 670a <ZSTD_decompressBlock+0x82a>
U32 u, total = 0;
6750: 31 c0 xor %eax,%eax
for (u=0; u<max; u++) {
6752: 31 d2 xor %edx,%edx
6754: e9 03 fc ff ff jmpq 635c <ZSTD_decompressBlock+0x47c>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment