US 7,523,296 B2
System and method for handling exceptions and branch mispredictions in a superscalar microprocessor
Johannes Wang, Redwood City, Calif. (US); Sanjiv Garg, Freemont, Calif. (US); and Trevor Deosaran, Sunnyvale, Calif. (US)
Assigned to Seiko Epson Corporation, Palo Alto, Calif. (US)
Filed on Jun. 10, 2005, as Appl. No. 11/149,227.
Application 11/149227 is a continuation of application No. 10/815742, filed on Apr. 02, 2004, granted, now 6,920,548.
Application 10/815742 is a continuation of application No. 10/151932, filed on May 22, 2002, granted, now 6,775,761.
Application 10/151932 is a continuation of application No. 09/631640, filed on Aug. 02, 2000, granted, now 6,412,064.
Application 09/631640 is a continuation of application No. 09/009412, filed on Jan. 20, 1998, granted, now 6,131,157.
Application 09/009412 is a continuation of application No. 08/481146, filed on Jun. 07, 1995, granted, now 5,826,055.
Application 08/481146 is a continuation of application No. 07/877451, filed on May 01, 1992, abandoned.
Prior Publication US 2005/0228973 A1, Oct. 13, 2005
Int. Cl. G06F 9/34 (2006.01)
U.S. Cl. 712—218  [712/244] 24 Claims
OG exemplary drawing
 
1. A method for handling an exception in a superscalar microprocessor configured to execute a group of instructions, the group of instructions having a predefined program order, the method comprising:
(a) executing a subset of instructions from the group of instructions in an out-of-order fashion with respect to the program order;
(b) storing each result generated in step (a) in a static location in a buffer, wherein the location of the instruction for which the result was generated determines the static location;
(c) detecting an exception; and
(d) responsive to detecting the exception:
(i) suspending out-of-order execution,
(ii) retiring each result stored in step (b) that is the result of an instruction that precedes the instruction that caused the exception in the program order, wherein retiring a result comprises associating the result with a corresponding location in an array, wherein the array includes a plurality of locations referenced to provide execution results of instructions that have been retired, and
(iii) resuming out-of-order execution, wherein resuming out-of-order execution comprises overwriting non-retired results stored in the buffer.