IP Library Granted Patent US 10,140,138
Granted Patent B2
US 10,140,138 · App. 14/216,493 · Granted Nov 27, 2018

Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation

Inventors: Mohammad Abdallah (El Dorado Hills, CA); Ankur Groen (San Jose, CA); Erika Gunadi (Los Gatos, CA); Mandeep Singh (Union City, CA); Ravishankar Rao (Redwood City, CA)
Assignee: Intel Corporation
G06F9/45545G06F9/30058G06F9/30065G06F9/30174G06F9/325G06F9/3806G06F9/45554G06F12/0875G06F12/109G06F12/1027G06F12/1036G06F9/3808
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 10,140,138
App. No.
14/216,493
Granted
Nov 27, 2018
Kind
B2
Abstract

Methods for supporting wide and efficient front-end operation with guest architecture emulation are disclosed. As a part of a method for supporting wide and efficient front-end operation, upon receiving a request to fetch a first far taken branch instruction, a cache line that includes the first far taken branch instruction, a next cache line and a cache line located at the target of the first far taken branch instruction is read. Based on information that is accessed from a data table, the cache line and either the next cache line or the cache line located at the target is fetched in a single cycle.

Claims (71)

1. A method for supporting wide and efficient front-end operation with guest architecture emulation, the method comprising:

upon receiving a request to fetch a first far taken branch instruction of a first cache line, reading said first cache line, a next cache line to the first cache line and a cache line at a target of said first far taken branch instruction; and

fetching based on information accessed from a data table, said first cache line and one of: said next cache line; and said cache line at said target of said first far taken branch instruction, wherein said fetching is performed in a single cycle, wherein said information is placed in said data table when said first cache line is brought from an L2 cache to an L1 cache,

wherein said data table comprises branch instruction addresses, branch instruction offsets, direct/indirect branch instruction identifiers and native/guest branch instruction identifiers.

2. The method of claim 1 further comprising:

determining an offset of a target instruction relative to said first far taken branch instruction;

computing a guest target based on said offset of said target instruction and a guest instruction pointer; and

determining whether said guest target and a cached native target are valid by reference to a conversion-lookaside-buffer.

3. The method of claim 2 wherein said first far taken branch instruction comprises a direct first far taken branch.

4. The method of claim 1 further comprising:

selecting a predicted guest target from a cache that stores guest targets; and

determining whether said predicted guest target is valid by reference to a conversion lookaside buffer.

5. The method of claim 4 wherein said first far taken branch instruction comprises an indirect first far taken branch.

6. The method of claim 1 wherein said cache line at said target is stored in a same index of a shadow cache as is said first cache line in an instruction cache.

7. The method of claim 1 wherein said data table comprises decoded portions of said first cache line.

8. A system, comprising:

a central processing unit (CPU); and

a cache system, comprising:

a cache controller, wherein said cache controller comprises:

a reader for, upon receiving a request to fetch an instruction, reading a first cache line, a next cache line to the first cache line and a target cache line; and

a fetcher for fetching based on information accessed from a data table, said first cache line and one of: said next cache line; and said target cache line, and wherein said information is placed in said data table when said first cache line is brought from L2 cache to L1 cache,

wherein said data table stores branch instruction addresses, branch instruction offsets, direct/indirect branch instruction identifiers and native/guest branch instruction identifiers.

9. The system of claim 8 further comprising:

a determiner for determining an offset of a target instruction relative to a far taken branch instruction;

a component for computing a guest target based on said offset of said target instruction and a guest instruction pointer; and

a determiner for determining whether said guest target and a cached native target are valid by reference to a conversion-lookaside-buffer.

10. The system of claim 9 wherein said first far taken branch instruction is a direct first far taken branch.

11. The system of claim 8 further comprising:

a selector for selecting a predicted guest target from a cache that stores guest targets; and

a determiner for determining whether said predicted guest target is valid by reference to a conversion-lookaside-buffer.

12. The system of claim 11 wherein said first far taken branch instruction is an indirect first far taken branch.

13. The system of claim 8 wherein said cache line at said target is stored in a same index of a shadow cache as is said first cache line in a data table.

14. The system of claim 8 wherein said data table comprises decoded portions of said first cache line.

15. A cache controller comprising:

a reader, upon receiving a request to fetch an instruction, for reading a first cache line, a next cache line to the first cache line and a target cache line; and

a fetcher operable for fetching, based on information accessed from a data table, said first cache line and one of said next cache line and said target cache line, and wherein said information is placed in said data table when said first cache line is brought from L2 cache to L1 cache,

wherein said data table stores branch instruction addresses, branch instruction offsets, direct/indirect branch instruction identifiers and native/guest branch instruction identifiers.

16. The cache controller of claim 15 further comprising:

a selector for selecting a predicted guest target from a cache that stores guest targets; and

a determiner for determining whether said predicted guest target is valid by reference to a conversion-lookaside-buffer.

17. A method for providing a front-end with guest architecture emulation, said method comprising:

(a) responsive to a request to fetch an instruction, determining if said instruction is to be successively accessed as a part of a loop;

if said instruction is to be successively accessed, (b) duplicating a first cache line comprising said instruction to generate a duplicated cache line, and forwarding said first cache line and said duplicated cache line;

(c) determining if an instruction of said duplicated cache line has characteristics that correspond to a stored instruction tag that identifies an exit branch associated with said loop; and

(d) if said instruction of said duplicated cache line has characteristics that correspond to said stored instruction tag that identifies said exit branch, exiting said loop, and if said instruction of said duplicated cache line does not have characteristics that correspond to said stored instruction tag that identifies said exit branch return to said (b).

18. The method of claim 17 wherein said determining if said instruction is successively accessed is based on pre-decoded bits.

19. The method of claim 17 wherein said stored instruction tag is stored in a table that stores tags that identify exit branches for respective loops.

20. The method of claim 19 wherein said table stores a bit that indicates whether a tag is valid or not valid.

21. The method of claim 19 wherein a saturation check is performed before inserting a pattern into said table.

22. The method of claim 17 wherein said stored tag comprises program counter value (PC) and global history shift register (GHSR) data.

23. The method of claim 17 wherein said loop is within a single cache line.

24. A processor, comprising:

a cache controller, wherein said cache controller comprises:

a loop identifier for (a) responsive to a request to fetch an instruction, determining if said instruction is to be successively accessed as a part of a loop;

a duplicator for, if said instruction is to be successively accessed, (b) duplicating a first cache line comprising said instruction to provide a duplicated cache line, and forwarding said first cache line and said duplicated cache line; and

a determiner for (c) determining if an instruction of said duplicated cache line has characteristics that correspond to a stored instruction tag that identifies an exit branch associated with said loop; wherein (d) if said instruction of said duplicated cache line has characteristics that correspond to said stored instruction tag that identifies said exit branch, exiting said loop, and if said instruction of said duplicated cache line does not have characteristics that correspond to said stored instruction tag that identifies said exit branch return to said (b).

25. The processor of claim 24 wherein said determiner determines if said instruction is successively accessed based on pre-decoded bits.

26. The processor of claim 24 wherein said stored instruction tag is stored in a table that stores tags that identify exit branches for respective loops.

27. The processor of claim 26 wherein said table stores a bit that indicates whether a tag is valid or not.

28. The processor of claim 26 wherein a saturation check is performed before inserting a pattern into said table.

29. The processor of claim 24 wherein said stored tag comprises global history shift register (GHSR) data and a program counter value (PC).

30. The processor of claim 24 wherein said loop is within a single cache line.

31. A cache controller, said cache controller comprising:

a loop identifier for (a) responsive to a request to fetch an instruction, determining if said instruction is to be successively accessed as a part of a loop;

a duplicator for, if said instruction is to be successively accessed, (b) duplicating a first cache line comprising said instruction to generate a duplicated cache line, and forwarding said first cache line and said duplicated cache line; and

a determiner for (c) determining if an instruction of said duplicated cache line has characteristics that correspond to a stored instruction tag that identifies an exit branch associated with said loop; wherein (d) if said instruction of said duplicated cache line has characteristics that correspond to said stored instruction tag that identifies said exit branch, exiting said loop, and if said duplicated cache line does not have characteristics that correspond to said stored instruction tag that identifies said exit branch return to said (b).

32. The cache controller of claim 31 wherein said determiner determines if said instruction is successively accessed is based on pre-decoded bits.

33. The cache controller of claim 31 wherein said stored instruction tag is stored in a table that stores tags that identify exit branches for respective loops.

34. The cache controller of claim 33 wherein said table stores a bit that indicates whether a tag is valid.

35. The cache controller of claim 33 wherein said table stores a bit that indicates whether a tag is not valid.

36. The cache controller of claim 31 wherein said stored tag includes global history shift register (GHSR) data and a program counter value (PC).

Assignments (2)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Nov 14, 2016
From: SOFT MACHINES, INC.
To: INTEL CORPORATION
Reel/Frame 040631/0915 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Mar 17, 2014
From: ABDALLAH, MOHAMMAD; GROEN, ANKUR; GUNADI, ERIKA; SINGH, MANDEEP; RAO, RAVISHANKAR V.
To: SOFT MACHINES, INC.
Reel/Frame 032456/0672 →
Continuity (2)
Provisional Application 61799717 · Mar 15, 2013
Related Publication 20140282546A1 · Sep 18, 2014