IP Library Granted Patent US 7,962,727
Granted Patent B2
US 7,962,727 · App. 12/329,236 · Granted Jun 14, 2011

Method and apparatus for decompression of block compressed data

View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 7,962,727
App. No.
12/329,236
Granted
Jun 14, 2011
Kind
B2
Abstract

System and method for decompressing data. A compressed data stream including contiguous variable length blocks is received, each block including multiple contiguous variable length data fields and a tag portion that includes multiple contiguous tag fields corresponding respectively to the data fields. Each tag field stores a tag value specifying a size of a respective field in the block. A current variable length block is stored. A single machine instruction of a processor is executed that analyzes the tag portion of the current block, and creates a control pattern, storing the control pattern in a first register of the processor. The control pattern is configured to unpack the variable length data fields of the current variable length block into corresponding uniform data fields. The contiguous variable length data fields of the current variable length block are decompressed using the control pattern, thereby decompressing the compressed data stream.

Claims (70)

1. A method for decompressing data, comprising:

receiving a compressed data stream comprising one or more contiguous variable length blocks, wherein each variable length block comprises:

a plurality of contiguous variable length data fields; and

a tag portion, comprising a plurality of contiguous tag fields corresponding respectively to the plurality of variable length data fields, wherein each tag field stores a tag value specifying a size of a respective variable length data field in the variable length block;

storing a current variable length block of the one or more contiguous variable length data blocks;

executing a single machine instruction of a processor, wherein said executing comprises:

analyzing the tag portion of the current variable length block;

creating a control pattern and storing the control pattern in a first register of the processor, wherein the control pattern is configured to unpack the variable length data fields of the current variable length block into corresponding uniform data fields;

decompressing the plurality of contiguous variable length data fields of the current variable length block using the control pattern, wherein said decompressing operates to decompress the compressed data stream.

2. The method of claim 1 ,

wherein said storing comprises storing the current variable length block in a second register;

wherein said decompressing the plurality of contiguous variable length data fields of the current variable length block comprises:

storing results of said decompressing in a third register of the processor.

3. The method of claim 1 ,

wherein said control pattern indicates if data being deposited in a destination byte of the third register is a copy of a selected source byte or zero values.

4. The method of claim 2 , further comprising:

determining a size of the variable length data field based on said analyzing the tag portion.

5. The method of claim 4 , further comprising:

storing the size of the variable length data field in a fourth register of the processor.

6. The method of claim 1 ,

wherein said creating the control pattern comprises determining offsets indicating starting locations of each of the variable length data fields in the block.

7. The method of claim 1 , further comprising:

determining a next value based on the tag portion, wherein the next value points to a subsequent variable length block of the one or more contiguous variable length blocks; and

storing the next value into a second register of the processor;

wherein the next value is useable to determine a starting location of a subsequent variable length block.

8. The method of claim 1 , further comprising:

performing said storing, said executing, and said decompressing for each of the one or more contiguous variable length blocks.

9. The method of claim 1 , wherein the single machine instruction comprises:

a first input operand comprising a length of the data field of the current variable length block plus 1;

a second input operand comprising an address of the current data block, wherein the address of the current data block points to the tag field of the current variable length block; and

an output operand for returning a routing pattern for the current data block.

10. The method of claim 1 , wherein said executing the single first machine instruction does not reference external memory.

11. The method of claim 1 , wherein the processor has an x86 architecture.

12. The method of claim 1 , wherein the first register comprises:

a multimedia extension register for performing multimedia operations; or

a general purpose register.

13. The method of claim 1 , wherein the processor is configured to operate under an operating system, and wherein the single machine instruction of the processor does not require modification of the operating system to execute.

14. The method of claim 1 , wherein said executing the single machine instruction comprises:

converting the single machine instruction to two or more microcode instructions; and

executing the two or more microcode instructions.

15. A processor, comprising:

an input configured to receive a compressed data stream comprising one or more contiguous variable length blocks, wherein each variable length block comprises:

a plurality of contiguous variable length data fields; and

a tag portion, comprising a plurality of contiguous tag fields corresponding respectively to the plurality of variable length data fields, wherein each tag field stores a tag value specifying a size of a respective variable length data field in the data block;

a first register for storing a current variable length block of the one or more contiguous variable length data blocks;

an execution unit configured to execute a single first machine instruction of the processor to:

analyze the tag portion of the current variable length block;

create a control pattern and store the control pattern in a second register of the processor, wherein the control pattern is configured to unpack the variable length data fields of the current variable length block into corresponding uniform data fields;

wherein the execution unit is further configured to execute one or more second machine instructions to decompress the plurality of contiguous variable length data fields of the current variable length block using the control pattern, wherein said decompressing operates to decompress the compressed data stream.

16. The processor of claim 15 ,

wherein said decompressing comprises storing results of said decompressing in a third register of the processor.

17. The processor of claim 15 ,

wherein the control pattern indicates if data being deposited in a destination byte of the third register is a copy of a selected source byte or zero values.

18. The processor of claim 17 , wherein the execution unit is further configured to execute the single first machine instruction of the processor to:

determine a size of the variable length data field based on said analyzing the tag portion; and

store the size of the variable length data field in a fourth register of the processor.

19. The processor of claim 15 ,

wherein said creating the control pattern comprises determining offsets indicating starting locations of each of the variable length data fields in the block.

20. The processor of claim 15 , wherein the single first machine instruction comprises:

a first input operand comprising a length of the data field of the current variable length block plus 1;

a second input operand comprising an address of the current data block, wherein the address of the current data block points to the tag field of the current variable length block; and

an output operand for returning a routing pattern for the current data block.

21. The processor of claim 15 , wherein said executing the single first machine instruction does not reference external memory.

22. The processor of claim 15 , wherein the processor has an x86 architecture, and wherein the first register comprises:

a multimedia extension register for performing multimedia operations; or

a general purpose register.

23. The processor of claim 15 , wherein the processor is configured to operate under an operating system, and wherein the single first machine instruction of the processor does not require modification of the operating system to execute.

24. The processor of claim 15 , wherein to execute the single first machine instruction of the processor, the execution unit is configured to:

convert the single machine instruction to two or more microcode instructions; and

execute the two or more microcode instructions.

Assignments (5)
RELEASE OF SECURITY INTEREST Recorded May 12, 2021
From: WILMINGTON TRUST, NATIONAL ASSOCIATION
To: GLOBALFOUNDRIES U.S. INC.
Reel/Frame 056987/0001 →
RELEASE OF SECURITY INTEREST Recorded Nov 20, 2020
From: WILMINGTON TRUST, NATIONAL ASSOCIATION
To: GLOBALFOUNDRIES INC.
Reel/Frame 054636/0001 →
SECURITY AGREEMENT Recorded Nov 29, 2018
From: GLOBALFOUNDRIES INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION
Reel/Frame 049490/0001 →
AFFIRMATION OF PATENT ASSIGNMENT Recorded Aug 18, 2009
From: ADVANCED MICRO DEVICES, INC.
To: GLOBALFOUNDRIES INC.
Reel/Frame 023120/0426 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Dec 5, 2008
From: FRANK, MICHAEL
To: ADVANCED MICRO DEVICES, INC.
Reel/Frame 021932/0436 →