# US 2019/0173489 A1 · Systems, Methods, and Apparatuses for Decompression using Hardware and Software

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 2019/0173489 A1
- Document ID: US20190173489A1
- Status: Published application
- Kind: A1
- Application number: 16/197,086
- Filed: 2018-11-20
- Published: 2019-06-06
- Earliest claimed: 2015-09-25
- Assignees: Intel Corporation
- Applicants: Intel Corporation
- Inventors: Vinodh Gopal; James D. Guilford; Sean M. Gulley; Kirk S. Yap
- Web page: https://patentgrep.com/patent/US20190173489A1

## CPC

- H03M 7/3086: {employing a sliding window, e.g. LZ77}
- H03M 7/6005: {Decoder aspects}
- H03M 7/6017: {Methods or arrangements to increase the throughput}
- H03M: CODING; DECODING; CODE CONVERSION IN GENERAL (using fluidic means F15C4/00; optical analogue/digital converters G02F7/00; coding, decoding or code conversion, specially adapted for particular applications, see the relevant subclasses, e.g. G01D, G01R, G06F, G06T, G09G, G10L, G11B, G11C, H04B, H04L, H04M, H04N; ciphering or deciphering for cryptography or other purposes involving the need for secrecy G09C)

## Abstract

Detailed herein are embodiments of systems, methods, and apparatuses for decompression using hardware and software. In hardware, an input buffer stores incoming input records from a compressed stream. A plurality of decoders decode at least one input record from the input buffer out output an intermediate record from the decoded data and a subset of the plurality of decoders to output a stream of literals. Finally, a reformat circuit formats an intermediate record into one of two types of tokens.

## Claims

### Claim 1

A hardware decompressor apparatus comprising:
an input buffer to store incoming input records from a compressed stream;
a plurality of decoders, each decoder to decode at least one input record from the input buffer and output an intermediate record from the decoded data and a subset of the plurality of decoders to output a stream of literals;
a reformat circuit to format an intermediate record into one of at least two types of tokens.

### Claim 2 (depends on 1)

The hardware apparatus of claim 1, wherein a first of the plurality of decoders to decode according to the DEFLATE compression algorithm and output a byte-aligned literal stream of literals that were Huffman encoded.

### Claim 3 (depends on 2)

The hardware apparatus of claim 2, wherein the intermediate record includes at least one of a set of literals, information on a number of literals of the intermediate record, and information about a reference.

### Claim 4 (depends on 1)

The hardware apparatus of claim 1, wherein a second of the plurality of decoders to generate an intermediate record per input record.

### Claim 5 (depends on 1)

The hardware apparatus of claim 1, a third of the plurality of decoders to generate a single intermediate record from a plurality of input records.

### Claim 6 (depends on 1)

The hardware apparatus of claim 1, wherein a fourth of the plurality of decoders to generate a plurality of intermediate records from a single input record.

### Claim 7 (depends on 1)

The hardware apparatus of claim 1, wherein a given decoder to generate one of a single intermediate record per input record, a plurality of intermediate records per input record, and a single intermediate record per plurality of input records depending upon content provided to the decoder.

### Claim 8 (depends on 1)

The hardware apparatus of claim 1, wherein the apparatus is external to a processor core.

### Claim 9 (depends on 1)

The hardware apparatus of claim 1, further comprising:
an intermediate record staging buffer to buffer consecutive intermediate records, wherein the reformat circuit to format the tokens by checking for any dependency from a reference record with an offset that straddles the buffered consecutive intermediate records, and generate a first type of type of token for a fast-path use or a second type of token for a slow path.
buffering eight consecutive intermediate records

### Claim 10

A method comprising:
receiving a plurality of tokens for literals or references;
loading a first register with a mask from the tokens;
loading a second register with address pointers from the tokens;
gathering and storing a first number of bytes per token at locations pointed to be the address pointers of the second register into a third register;
compressing the gathered and stored bytes using the mask;
storing the result of the compression to an output pointer; and
increment the output pointer by a number of bytes generated by the compressing.

### Claim 11 (depends on 10)

The method of claim 10, wherein the mask is comprised of lengths of a plurality of tokens for literals or references.

### Claim 12 (depends on 10)

The method of claim 10, wherein the address pointers comprise a 64-bit values from each of the tokens.

### Claim 13 (depends on 10)

The method of claim 10, further comprising:
determining that a first byte of the tokens is not zero.

### Claim 14 (depends on 10)

The method of claim 10, wherein the first register is a 64-bit general purpose register.

### Claim 15 (depends on 10)

The method of claim 10, wherein the first register is a 64-bit writemask register.

### Claim 16 (depends on 910)

The method of claim 910wherein the second and third registers are 512-bit packed data registers.

### Claim 17

A method comprising:
receiving one of two types of output from decompressor hardware, wherein in a first type of output the decompressor hardware generates an extra literal stream in addition to tokens and in the second type the decompressor hardware generates only tokens; and
post-processing the first type output by providing an input pointer to the extra literal stream and post-processing the second type of output by passing a pointer to an original compressed stream.

### Claim 18 (depends on 17)

The method of claim 17, wherein for any chosen type of output, the decompressor hardware generates the extra literal stream during one of DEFLATE and LZS decoding.

### Claim 19 (depends on 17)

The method of claim 17, wherein for any chosen type of output, the decompressor hardware does not generate an extra literal stream during LZ4 and Snappy decoding.

### Claim 20 (depends on 17)

The method of claim 17, wherein the software maintains a history buffer by holding on to enough of the output of the decompressor hardware to service references that are gathered from it.
