STORE TO LOAD FORWARDING USING A DEPENDENCY LINK FILE

Abstract: A processor (10) employing a dependency link file (104). Upon detection of a load which hits a store for which store data is not available, the processor (10) allocates an entry within the dependency link file (104) for the load. The entry stores a load identifier identifying the load and a store data identifier identifying a source of the store data. The dependency link file (104) monitors results generated by execution units (40) within the processor (10) to detect the store data being provided. The dependency link file (104) then causes the store data to be forwarded as the load data in response to detecting that the store data is provided.

Description: TITLE: STORE TO LOAD FORWARDING USING A DEPENDENCY LINK FLLE BACKGROUND OF THE INVENTION 1 Technical Field This mvention is related to the field of processors and. more particularly, to load/store units within processors. 2. Background Art Processors are more and more bemg designed usmg techniques to increase the number of instructions executed per second. Superscalar techniques involve providmg multiple execution umts and attempting to execute multiple instructions m parallel Pipelining, or superpipelining, techniques involve overlapping the execution of different instructions usmg pipeline stages Each stage performs a portion of the instruction execution process (involving fetch, decode, execution, and result commit, among others), and passes the instruction on to the next stage While each instruction still executes in the same amount of time, the overlappmg of instruction execution allows for the effective execution rate to be higher. Typical processors employ a combination of these techniques and others to mcrease the instruction execution rate. As processors employ wider superscalar configurations and/or deeper instruction pipelines, memory latency becomes an even larger issue than it was previously While virtually all modem processors employ one or more caches to decrease memory latency, even access to these caches is beginning to impact performance. More particularly, as processors allow larger numbers of instructions to be in- flight within the processors, the number of load and store memory operations which are in-flight mcreases as well. As used here, an instruction is "in-flight" if the instruction has been fetched mto the instruction pipeline (either speculatively or non-speculatively) but has not yet completed execution by committing its results (either to architected registers or memory locations) Additionally, the term "memory operation" is an operation which specifies a transfer of data between a processor and memory (although the transfer may be accomplished in cache). Load memory operations specify a transfer of data from memory to the processor, and store memory operations specify a transfer of data from the processor to memory Load memory operations may be referred to herem more succmctly as "loads", and sumlarly store memory operaπons may be referred to as "stores" Memory operations may be implicit withm an instruction which directly accesses a memory operand to perform its defined function (e g arithmetic, logic, etc ), or may be an explicit instruction which performs the data transfer only, dependmg upon the instruction set employed by the processor Generally, memory operations specify the affected memory location via an address generated from one or more operands of the memory operation This address will be referred to herein in as a "data address" generally, or a load address (when the corresponding memory operation is a load) or a store address (when the corresponding memory operation is a store) On the other hand, addresses which locate the instructions themseh es within memory are referred to as "instruction addresses" Since memory operations are part of the instruction stream, havmg more instructions in-flight leads to having more memory operations in- flight Unfoπunateh. adding additional ports to the data cache to allow more operations to occur in parallel is generally not feasible beyond a few ports (e g 2) due to mcreases in both cache access time and area occupied by the data cache circuitry Accordingly, relatively larger buffers for memory operations are often employed Scanning these buffers for memory operations to access the data cache is generally complex and, accordingly, slow The scanning may substantially impact the load memory operation latency, even for cache hits Additionally, data caches are finite storage for which some load and stores will miss A memory operation is a "hit" m a cache if the data accessed by the memory operation is stored in cache at the time of access, and is a "miss" if the data accessed by the memory operation is not stored m cache at the time of access When a load memory operation misses a data cache, the data is typically loaded mto the cache Store memory operations which miss the data cache may or may not cause the data to be loaded mto the cache Data is stored in caches in units referred to as "cache lmes ' which are the mimmum number of contiguous bytes to be allocated and deallocated storage within the cache Smce many memory operations are bemg attempted, it becomes more likely that numerous cache misses will be expeπenced Furthermore, m many common cases, one miss within a cache lme may rapidly be followed by a large number of additional misses to that cache Ime These misses may fill, or come close to filling, the buffers allocated within the processor for memory operaπons An efficient scheme for buffering memory operations is therefore needed An additional problem which becomes even more onerous as processors employ wider superscalar configurations and/or deeper pipelines is the issue of store to load forwarding As more memory operations may be queued up pnor to completion, it becomes more likely that load memory operations will hit pnor store memory operations still in the buffers Furthermore, as speculative mstruction execution mcreases due to the larger number of instructions in- flight within the processor, it becomes more likely that loads will attempt to execute pnor to the stores receivmg their store data While loads which hit older stores which have corresponding store data available may receive the corresponding store data from the buffers, loads which hit older stores for which corresponding store data is not available generally are rescheduled at a later time As the amount of tune to schedule the load, execute the load, access the data cache (and detect the hit on the store), and forward the data mcreases the delay from the corresponding store data bemg provided to the data bemg forwarded as the load data tends to mcrease Furthermore, deeper buffers tend to mcrease the amount of time between schedulmg attempts (to allow other memory operations to be scheduled) Performance of the processor, which may be quite dependent on load latency, may therefore suffer A mechanism for rni mizing load delay for loads which hit stores for which store data is unavailable is therefore desired DISCLOSURE OF INVENTION The problems outlined above are m large part solved by a processor employing a dependency link file as described herem Tjpon detection of a load which hits a store for which store data is not available, the processor allocates an enrrv \\ lfhin the dependency link file for the load The entry stores a load identifier identifying the load and a store data identifier identifying a source of the store data The dependency link file monitors results generated bv execution umts within the processor to detect the store data bemg provided The dependency link file then causes the store data to be forwarded as the load data in response to detecting that the store data is provided The latency from store data bemg provided to the load data bemg forwarded may thereby be minimized Particularly, the load data may be forwarded without requiring that the load memory operation be scheduled Performance of the microprocessor may be increased due to the reduced load latency achievable in the above-mentioned cases Broadly speaking, a load/store unit is contemplated compπsmg a first buffer, first control logic coupled to the first buffer, second control logic, and a second buffer coupled to the second control logic The first buffer compπses a first plurality of entries, each of the first plurality of entries bemg configured to store a store address and a corresponding store data of a respective store memory operation The first control logic is configured to detect a first load memory operation havmg a first load address which hits a first store address within a first entry of the first plurality of entries and for which a first corresponding store data is not stored within the first entry Coupled to receive a signal from the first control logic indicative of detecting the first load memory operation, the second control logic is configured to allocate a second entry of a second plurality of entries m the second buffer to the first load memory operation m response to the signal The second entry is configured to store a first load identifier identifying the first load memory operation and a first store data identifier identifying a source of the first corresponding store data m response to the second control logic allocating the second entry A processor is contemplated compπsmg a data cache and a load/store umt The load/store umt mcludes a first buffer compπsmg a plurality of entries The load/store unit is configured to allocate a first entry of the plurality of entires to a first load memory operation m response to detecting that a first load address of the first load memory operation hits a first store address of a first store memory operation for which a first store data is not available duπng a probe of the first load memory operation to the data cache The first entry stores a first load identifier identifying the first load memory operation and a first store data identifier identifying a source of the first store data Additionally, a computer system is contemplated compnsmg the processor and an input/output (I O) device The I/O device provides communication between the computer system and another computer system to which the I O device is coupled Moreover, a method for performing a load operation is contemplated A data cache is probed with the load memory operation The load memory operation is detected as hitting a store memory operation for which corresponding store data is not available duπng the probing A load identifier identifying the load memory operation and a store data identifier identifying a source of the store data is recorded to a first buffer The store data is detected as bemg provided by receivmg the store data identifier from the source The load identifier is forwarded from the first buffer and the store data is forwarded in response to detecting that the stored data is bemg provided BRIEF DESCRIPTION OF DRAWINGS Other objects and advantages of the mv ention will become apparent upon reading the following detailed description and upon reference to the accompanying drawings in which Fig 1 is a block diagram of one embodmient of a processor Fig 2 is a block diagram of one embodiment of a decode unit, a reservation station, a functional unit, a reorder buffer, a load/store umt, a data cache and a bus interface unit shown m Fig 1 Fig. 3 is a block diagram of one embodiment of a load/store umt. Fig. 4 is a timing diagram illustrating one embodiment of a data cache access pipeline from a first buffer (LSI) illustrated m Fig. 3. Fig. 5 is a timing diagram illustrating one embodiment of a data cache access pipeline from a second buffer (LS2) illustrated m Fig. 3. Fig. 6 is a block diagram of one embodiment of an entry within LSI Fig. 7 is a block diagram of one embodmient of an entry within LS2. Fig. 8 is a circuit diagram illustrating a portion of one embodmient of selection logic for LSI. Fig. 9 is a circuit diagram illustrating a portion of one embodiment of selection logic for LS2. Fig. 10 is a timing diagram illustrating data forwarding with and without a dependency link file. Fig. 11 is a block diagram of one embodmient of a load/store umt and a data cache, with the load/store umt employmg a dependency link file. Fig. 12 is a timing diagram illustrating exemplary loads and stores performed by two processors. Fig. 13 is a block diagram of a portion of one embodiment of a load/store umt mcludmg snoop hardware Fig. 14 is a flowchart illustrating operation of one embodmient of control logic shown m Fig. 13 duπng a snoop request. Fig. 15 is a flowchaπ illustration operation of one embodiment of control logic shown m Fig. 13 duπng a reprobe operation Fig. 16 is a diagram illustrating an example of snoop resync operation Fig. 17 is a block diagram of a portion of one embodiment of a load/store umt mcludmg self-modifying code checking hardware Fig 18 is a state machme which may be employed by one embodiment of the load/store umt shown m Fig. 17 Fig 19 is a block diagram of a portion of one embodiment of an mstruction cache which may be used with the load/store unit shown m Fig 17 Fig. 20 is a flowchart illustrating operation of one embodiment of self-modifying code check control logic shown m Fig. 10 Fig. 21 is a block diagram of a portion of one embodiment of a load/store unit mcludmg exponential backoff Fig. 22 is a state machme which may be employed by one embodiment of a bus mterface unit mcludmg exponential backoff. Fig. 23 is a flowchart illustrating operation of one embodmient of control logic illustrated m Fig. 21 Fig 24 is a timing diagram illustrating an example of exponential backoff Fig 25 is a block diagram of one embodiment of a computer system mcludmg the processor shown in While the mvention is susceptible to \ aπous modifications and alternative forms, specific embodiments thereof are shown by way of example m the drawings and will herem be descπbed in detail It should be understood, however, that the drawings and detailed descπption thereto are not intended to limit the mvention to the particular form disclosed, but on the contrary, the intention is to cover all modifications, equivalents and alternatives falling within the spiπt and scope of the present mvention as defined by the appended claims. MODE(S) FOR CARRYING OUT THE INVENTION Processor Overview Turning now to Fig. 1, a block diagram of one embodiment of a processor 10 is shown. Other embodiments are possible and contemplated As shown m Fig. 1, processor 10 mcludes a prefetch/predecode unit 12, a branch prediction umt 14, an mstruction cache 16. an mstruction alignment umt 18, a plurality of decode units 20A-20C, a plurality of reservation stations 22A-22C, a plurality of functional units 24A-24C, a load/store umt 26, a data cache 28, a register file 30, a reorder buffer 32, an MROM umt 34, and a bus mterface umt 37. Elements referred to herem with a particular reference number followed by a letter will be collectively refeπed to by the reference number alone For example, decode umts 20A-20C will be collectively referred to as decode units 20. Prefetch/predecode unit 12 is coupled to receive instructions from bus mterface unit 37, and is further coupled to mstruction cache 16 and branch prediction umt 14 Similarly, branch prediction umt 14 is coupled to instruction cache 16. Still further, branch prediction umt 14 is coupled to decode umts 20 and functional umts 24. Instruction cache 16 is further coupled to MROM unit 34 and mstruction alignment umt 18. Instruction alignment unit 18 is in turn coupled to decode umts 20. Each decode umt 20A-20C is coupled to load/store unit 26 and to respective reservation stations 22A-22C. Reservation stations 22A-22C are further coupled to respective functional units 24A-24C Additionally, decode umts 20 and reservation stations 22 are coupled to register file 30 and reorder buffer 32 Functional umts 24 are coupled to load/store umt 26, register file 30, and reorder buffer 32 as well Data cache 28 is coupled to load store unit 26 and to bus mterface unit 37. Bus mterface unit 37 is further coupled to an L2 mterface to an L2 cache and a bus Finally, MROM unit 34 is coupled to decode units 20 Instruction cache 16 is a high speed cache memory provided to store instructions. Instructions are fetched from mstruction cache 16 and dispatched to decode units 20 In one embodiment, mstruction cache 16 is configured to store up to 64 kilobytes of mstrucnons m a 2 way set associative strucmre havmg 32 byte lmes (a byte compπses 8 bmary bits) Alternatively, any other desired configuration and size may be employed. For example, it is noted that mstruction cache 16 may be implemented as a fully associative, set associative, or direct mapped configuration Instructions are stored into mstruction cache 16 by prefetch predecode unit 12. Instructions may be prefetched pnor to the request thereof from mstruction cache 16 m accordance with a prefetch scheme. A vaπety of prefetch schemes may be employed by prefetch predecode unit 12 As prefetch predecode unit 12 transfers instructions to mstruction cache 16. prefetch/predecode unit 12 generates three predecode bits for each byte of the instructions a start bit, an end bit. and a functional bit The predecode bits form tags indicative of the boundanes of each instruction The predecode tags may also convey additional information such as whether a given mstruction can be decoded directly by decode umts 20 or whether the mstruction is executed by invoking a microcode procedure controlled by MROM umt 34, as will be descπbed in greater detail below. Still further, prefetch/predecode unit 12 may be configured to detect branch mstrucnons and to store branch prediction information corresponding to the branch instructions mto branch prediction umt 14. Other embodiments may employ any suitable predecode scheme. One encodmg of the predecode tags for an embodiment of processor 10 employing a vaπable byte length mstruction set will next be descπbed A vaπable byte length mstruction set is an mstruction set m which different instructions may occupy differing numbers of bytes. An exemplary vaπable byte length mstruction set employed by one embodiment of processor 10 is the x86 mstruction set. In the exemplary encodmg, if a given byte is the first byte of an mstruction, the start bit for that byte is set. If the byte is the last byte of an instruction, the end bit for that byte is set. Instructions which may be directly decoded by decode umts 20 are referred to as "fast path" mstrucnons. The remaining x86 mstrucnons are referred to as MROM instructions, accordmg to one embodiment. For fast path instructions, the functional bit is set for each prefix byte mcluded m the mstruction, and cleared for other bytes. Alternatively, for MROM instructions, the functional bit is cleared for each prefix byte and set for other bytes The type of mstruction may be determined by examining the functional bit corresponding to the end byte. If that functional bit is clear, the instruction is a fast path mstruction Conversely, if that functional bit is set, the instruction is an MROM mstruction. The opcode of an mstruction may thereby be located within an mstruction which may be directly decoded by decode units 20 as the byte associated with the first clear functional bit m the mstruction. For example, a fast path mstruction mcludmg two prefix bytes, a Mod R/M byte, and an immediate byte would have start, end, and functional bits as follows: Start bits 10000 Functional bits 11000 Accordmg to one particular embodiment, early identification of an mstruction that mcludes a scale- index-base (SIB) byte is advantageous for MROM umt 34 For such an embodiment, if an mstruction mcludes at least two bytes after the opcode byte, the functional bit for the Mod R/M byte mdicates the presence of an SIB byte If the functional bit for the Mod R.M byte is set. then an SIB byte is present Alternatively, if the functional bit for the Mod R/M byte is clear, then an SIB byte is not present. MROM instructions are instructions which are determined to be too complex for decode by decode units 20 MROM instructions are executed by invoking MROM umt 34 More specifically, when an MROM mstruction is encountered, MROM unit 34 parses and issues the mstruction mto a subset of defined fast path instructions to effectuate the desired operation MROM umt 34 dispatches the subset of fast path instructions to decode units 20 Processor 10 employs branch prediction m order to speculatively fetch instructions subsequent to conditional branch instructions Branch prediction unit 14 is mcluded to perform branch prediction operations In one embodiment, branch prediction unit 14 employs a branch target buffer which caches up to two branch target addresses and corresponding taken not taken predictions per 16 byte portion of a cache lme m mstruction cache 16 The branch target buffer may, for example, compπse 2048 entπes or any other suitable number of entries. Prefetch/predecode umt 12 determines initial branch targets when a particular lme is predecoded. Subsequent updates to the branch targets corresponding to a cache lme may occur due to the execution of instructions within the cache lme. Instruction cache 16 provides an indication of the mstruction address bemg fetched, so that branch prediction umt 14 may determine which branch target addresses to select for forming a branch prediction Decode umts 20 and functional units 24 provide update information to branch prediction umt 14 Decode umts 20 detect branch mstrucnons which were not predicted by branch predicnon umt 14 Funcnonal umts 24 execute the branch mstrucnons and determine if the predicted branch direcnon is incorrect. The branch direcnon may be "taken", m which subsequent mstrucnons are fetched from the target address of the branch lnstrucnon. Conversely, the branch direcnon may be "not taken", m which subsequent lnstrucnons are fetched from memory locattons consecutive to the branch mstrucnon When a mispredicted branch instruction is detected, mstructions subsequent to the mispredicted branch are discarded from the vaπous units of processor 10. In an alternative configuration, branch prediction umt 14 may be coupled to reorder buffer 32 instead of decode umts 20 and functional umts 24, and may receive branch misprediction information from reorder buffer 32. A vanety of suitable branch prediction algonthms may be employed by branch prediction unit 14 Instructions fetched from mstrucnon cache 16 are conveyed to mstrucnon alignment unit 18. As lnstrucnons are fetched from mstrucnon cache 16, the corresponding predecode data is scanned to provide mformanon to mstrucnon alignment umt 18 (and to MROM umt 34) regardmg the mstrucnons bemg fetched. Instruction alignment umt 18 utilizes the scanning data to align an mstruction to each of decode units 20 In one embodiment, instruction alignment umt 18 aligns mstrucnons from three sets of eight mstruction bytes to decode umts 20 Decode unit 20A receives an mstrucnon which is pnor to mstrucnons concurrently received by decode umts 20B and 20C (m program order) Similarly, decode umt 20B receives an mstruction which is pnor to the mstruction concuπently received by decode umt 20C m program order Decode umts 20 are configured to decode mstrucnons received from mstrucnon alignment umt 18. Register operand mformanon is detected and routed to register file 30 and reorder buffer 32 Addinonally, if the mstrucnons require one or more memory operations to be performed, decode units 20 dispatch the memory operanons to load/store unit 26 Each mstruction is decoded mto a set of control values for functional umts 24, and these conttol values are dispatched to reservation stations 22 along with operand address information and displacement or immediate data which may oe mcluded w ith the instruction In one particular embodiment, each mstruction is decoded mto up to two operations which may be separately executed by functional units 24A-24C Processor 10 supports out of order execution, and thus employs reorder buffer 32 to keep track of the ongmal program sequence for register read and wnte operanons, to implement register renaming, to allow for speculative mstrucnon execution and branch misprediction recovery, and to facilitate precise exceptions A temporary storage location withm reorder buffer 32 is resen ed upon decode of an mstruction that involves the update of a register to thereby store speculate e register states If a branch prediction is incorrect, the results of speculatively-executed mstructions along the mispredicted path can be invalidated m the buffer before they are written to register file 30 Similarly, if a particular mstruction causes an exception, instructions subsequent to the particular mstruction may be discarded In this manner excepnons are "precise" (l e mstrucnons subsequent to the particular mstrucnon causmg the excepnon are not completed pnor to the exception). It is noted that a particular mstruction is speculatively executed if it is executed pnor to mstructions which precede the particular mstruction in program order Precedmg instructions may be a branch instruction or an exception- causing mstruction, m which case the speculative results may be discarded by reorder buffer 32. The mstruction control values and immediate or displacement data provided at the outputs of decode umts 20 are routed directly to respective reservation stations 22 In one embodiment, each reservation station 22 is capable of holding instruction information (1 e , mstruction control values as well as operand values, operand tags and/or immediate data) for up to five pending mstructions awaiting issue to the corresponding functional unit It is noted that for the embodiment of Fig 1 , each reservation station 22 is associated with a dedicated functional unit 24 Accordmgly, three dedicated "issue positions" are formed by reservation stations 22 and functional umts 24 In other words, issue position 0 is formed by reservation station 22A and functional unit 24A Instructions aligned and dispatched to reservation station 22A are executed by functional umt 24A Sumlarly, issue position 1 is formed by reservation station 22B and functional umt 24B, and issue position 2 is formed by reservanon station 22C and functional umt 24C Upon decode of a particular mstruction, if a required operand is a register location, register address information is routed to reorder buffer 32 and register file 30 simultaneously Those of skill in the art will appreciate that the x86 register file mcludes eight 32 bit real registers (I e , typically referred to as EAX, EBX, ECX, EDX, EBP, ESI, EDI and ESP) In embodiments of processor 10 which employ the x86 processor architecture, register file 30 compnses storage locations for each of the 32 bit real registers Additional storage locations may be mcluded withm register file 30 for use by MROM umt 34 Reorder buffer 32 contains temporary storage locations for results which change the contents of these registers to thereby allow out of order execution A temporary storage location of reorder buffer 32 is reserved for each mstruction which, upon decode, is determined to modify the contents of one of the real registers Therefore, at vanous pomts duπng execution of a particular program, reorder buffer 32 may ha\ e one or more locations which contam the speculatively executed contents of a given register If following decode of a given mstruction it is determined that reorder buffer 32 has a previous location or locations assigned to a register used as an operand in the given mstrucnon, the reorder buffer 32 forwards to the corresponding reservatton station either 1) the value m the most recently assigned location, or 2) a tag for the most recently assigned location if the value has not yet been produced by the functional unit that will eventually execute the previous mstruction If reorder buffer 32 has a location reserved for a given register, the operand value (or reorder buffer tag) is provided from reorder buffer 32 rather than from register file 30 If there is no location reserved for a required register m reorder buffer 32, the value is taken directly from register file 30 If the operand corresponds to a memory location, the operand value is provided to the reservation station through load store unit 26 In one particular embodmient, reorder buffer 32 is configured to store and manipulate concurrently decoded mstrucnons as a unit This configuration will be referred to herein as "lme-onented" By manipulating several instructions together, the hardware employed w ithin reorder buffer 32 may be simplified For example, a lme-onented reorder buffer mcluded m the present embodmient allocates storage sufficient for mstruction information pertaining to three mstructions (one from each decode unit 20) whenever one or more mstrucnons are dispatched by decode umts 20 By conttast a vanable amount of storage is allocated m conventional reorder buffers, dependent upon the number of instructions actually dispatched. A comparatively larger number of logic gates may be required to allocate the variable amount of storage. When each of the concurrently decoded instructions has executed, the instruction results are stored into register file 30 simultaneously. The storage is then free for allocation to another set of concurrently decoded instructions. Additionally, the amount of control logic circuitry employed per instruction is reduced because the control logic is amortized over several concurrently decoded instructions. A reorder buffer tag identifying a particular instruction may be divided into two fields: a line tag and an offset tag. The line tag identifies the set of concurrently decoded instructions including the particular instruction, and the offset tag identifies which instruction within the set corresponds to the particular instruction. It is noted that storing instruction results into register file 30 and freeing the corresponding storage is referred to as "retiring" the instructions. It is further noted that any reorder buffer configuration may be employed in various embodiments of processor 10. As noted earlier, reservation stations 22 store instructions until the instructions are executed by the corresponding functional unit 24. An instruction is selected for execution if: (i) the operands of the instruction have been provided; and (ii) the operands have not yet been provided for instructions which are within the same reservation station 22A-22C and which are prior to the instruction in program order. It is noted that when an instruction is executed by one of the functional units 24, the result of that instruction is passed directly to any reservation stations 22 that are waiting for that result at the same time the result is passed to update reorder buffer 32 (this technique is commonly referred to as "result forwarding"). An instruction may be selected for execution and passed to a functional unit 24A-24C during the clock cycle that the associated result is forwarded. Reservation stations 22 route the forwarded result to the functional unit 24 in this case. In embodiments in which instructions may be decoded into multiple operations to be executed by functional units 24, the operations may be scheduled separately from each other. In one embodiment, each of the functional units 24 is configured to perform integer arithmetic operations of addition and subtraction, as well as shifts, rotates, logical operations, and branch operations. The operations are performed in response to the control values decoded for a particular instruction by decode units 20. It is noted that a floating point unit (not shown) may also be employed to accommodate floating point operations. The floating point unit may be operated as a coprocessor, receiving instructions from MROM unit 34 or reorder buffer 32 and subsequently communicating with reorder buffer 32 to complete the instructions. Additionally, functional units 24 may be configured to perform address generation for load and store memory operations performed by load/ store unit 26. In one particular embodiment, each functional unit 24 may comprise an address generation unit for generating addresses and an execute unit for performing the remaining functions. The two units may operate independently upon different instructions or operations during a clock cycle. Each of the functional units 24 also provides information regarding the execution of conditional branch instructions to the branch prediction unit 14. If a branch prediction was incorrect, branch prediction unit 14 flushes instructions subsequent to the mispredicted branch that have entered the instruction processing pipeline, and causes fetch of the required instructions from instruction cache 16 or main memory. It is noted that in such situations, results of instructions in the original program sequence which occur after the mispredicted branch instruction are discarded, including those which were speculatively executed and temporarily stored in load store umt 26 and reorder buffer 32. It is further noted that branch execution results may be provided by functional umts 24 to reorder buffer 32, which may indicate branch mispredictions to functional umts 24. Results produced by functional umts 24 are sent to reorder buffer 32 if a register value is being updated, and to load/store umt 26 if the contents of a memory location are changed. If the result is to be stored m a register, reorder buffer 32 stores the result m the location reserved for the value of the register when the mstruction was decoded A plurality of result buses 38 are mcluded for forwarding of results from functional umts 24 and load/store umt 26. Result buses 38 convey the result generated, as well as the reorder buffer tag identifying the mstruction bemg executed. Load store umt 26 provides an mterface between functional umts 24 and data cache 28. In one embodmient, load/store umt 26 is configured with a first load/store buffer havmg storage locations for data and address information for pendmg loads or stores which have not accessed data cache 28 and a second load/store buffer havmg storage locations for data and address mformanon for loads and stores which have access data cache 28. For example, the first buffer may compπse 12 locanons and the second buffer may compπse 32 locations. Decode umts 20 arbitrate for access to the load/store umt 26. When the first buffer is full, a decode umt must wait until load/store unit 26 has room for the pendmg load or store request information. Load/store umt 26 also performs dependency checking for load memory operations agamst pendmg store memory operations to ensure that data coherency is maintained. A memory operation is a transfer of data between processor 10 and the mam memory subsystem. Memory operaπons may be the result of an mstruction which utilizes an operand stored m memory, or may be the result of a load/store mstruction which causes the data transfer but no other operation. Additionally, load/store unit 26 may mclude a special register storage for special registers such as the segment registers and other registers related to the address translanon mechanism defined by the x86 processor architecture. Data cache 28 is a high speed cache memory provided to temporanly store data bemg transferred between load/store umt 26 and the mam memory subsystem In one embodiment, data cache 28 has a capacity of stormg up to 64 kilobytes of data m an two way set associaπve structure It is understood that data cache 28 may be implemented m a vaπety of specific memory configurations, mcludmg a set associative configuration, a fully associaπve configuration, a direct-mapped configuration, and any suitable size of any other configuration In one particular embodiment of processor 10 employ mg the x86 processor architecture, mstruction cache 16 and data cache 28 are linearly addressed and physically tagged The lmear address is formed from the offset specified by the mstruction and the base address specified by the segment portion of the x86 address translation mechanism. Lmear addresses may optionally be translated to physical addresses for accessmg a mam memory The lmear to physical translation is specified by the pagmg portion of the x86 address translation mechanism The physical address is compared to the physical tags to determine a hit/miss status. Bus mterface unit 37 is configured to communicate between processor 10 and other components in a computer system via a bus For example, the bus may be compatible with the EV-6 bus developed by Digital Equipment Corporation Alternatively, any suitable interconnect structure may be used mcludmg packet-based, unidirectional or bi-directional links, etc. An optional L2 cache interface may be employed as well for interfacing to a level two cache Load/Store Unit A more detailed discussion of one embodmient of load/store unit 26 is next provided. Other embodiments are possible and contemplated Fig 2 illustrates load store umt 26, reorder buffer 32, data cache 28, bus mterface umt (BIU) 37, decode umt 20A, reservation station 22A, and functional umt 24A to highlight certam mterconnection therebetween accordmg to one embodiment of processor 10 Other embodiments may employ additional, alternative, or substitute interconnect as desired. Interconnect between decode umts 20B- 20C, reservation stations 22B-22C, functional units 24B-24C, and other units shown m Fig. 2 may be similar to that shown m Fig 2. Decode umt 20A receives an mstruction from instruction alignment umt 18 and decodes the mstruction. Decode unit 20A provides the decoded mstrucnon to reservation station 22A, which stores the decoded mstruction until the instruction is selected for execution. Additionally, if the mstruction specifies a load or store memory operation, decode umt 20A signals load/store umt 26 via L/S lmes 46A. Similar signals from decode umts 20B-20C may be received by load/store umt 26 as well L/S lmes 46A indicate whether a load memory operation, a store memory operation, or both are specified by the mstruction bemg decoded. For example, L/S lmes 46A may compπse a load lme and a store lme If no memory operation is specified, then signals on both lmes are deasserted The signal on the load lme is asserted if a load memory operation is specified, and similarly the signal on the store lme is asserted if a store memory operation is specified. Both signals are asserted if both a load memory operation and a store memory operation are specified. In response to signals on L/S lmes 46A, load/store umt 26 allocates an entry m a load/store buffer mcluded therem to store the corresponding memory operation. In addition to the above, decode umt 20A provides information to reorder buffer 32 about the mstruction bemg decoded Reorder buffer 32 receives the information (as well as similar information from other decode umts 20B-20C) and allocates reorder buffer entπes m response thereto The allocated reorder buffer entπes are idennfied by reorder buffer tags, which are transmitted to load/store umt 26 upon an mstruction tags bus 48 Instruction tags bus 48 may be configured to transmit a tag for each possible mstruction (e.g three m the present embodiment, one from each of decode units 20A-20C) Alternatively, m an embodiment employmg the lme-onented structure descπbed above, reorder buffer 32 may be configured to transmit a lme tag for the lme, and load/store unit 26 may augment the lme tag with the offset tag of the issue posihon which is signalling a particular load or store Reorder buffer 32 is further configured to perform dependency checkmg for register operands of the mstrucnon The register operands are identified m the mstrucnon information transmitted by decode umts 20 For store memory operaπons, the store data is a source operand which load/store unit 26 receives m addition to the store address Accordmgly, reorder buffer 32 determines the mstrucnon which generates the store data for each store memory operanon and conveys either the store data (if it is available withm reorder buffer 32 or register file 30 upon dispatch of the store memory operation) or a store data tag for the store data on a store data/tags bus 50 If the mstrucnon corresponding to the store memory operanon is an explicit store mstrucnon which stores the contents of a register to memory, the mstrucnon tag of the instruction which generates the store data (or the store data, if it is available) is conveyed On the other hand, the mstruction itself generates the store data if the mstruction mcludes the store memory operation as an implicit operation In such cases, reorder buffer 32 provides the instruction tag of the instruction as the store data tag. Although not illustrated in Fig. 2 for simplicity in the drawing, reservation station 22A receives operand tags and/or data for the instruction from reorder buffer 32 as well. Reservation station 22A captures the operand tags and/or data and awaits delivery of any remaining operand data (identified by the operand tags) from result buses 38. Once an instruction has received its operands, it is eligible for execution by functional unit 24A. More particularly, in the embodiment shown, functional unit 24A includes an execution unit (EXIT) 40 and an address generation unit (AGU) 42. Execution unit 40 performs instruction operations (e.g. arithmetic and logic operations) to generate results which are forwarded on result bus 38A (one of result buses 38) to load/store unit 26, reservation stations 22, and reorder buffer 32. AGU 42 generates data addresses for use by a memory operation or operations specified by the instruction, and transmits the data addresses to load/store unit 26 via address bus 44A. It is noted that other embodiments may be employed in which AGU 42 and execution unit 40 share result bus 38A and in which functional unit 24 A includes only an execution unit which performs address generation and other instruction execution operations. Load/store unit 26 is further coupled to receive result buses and address buses from the execution units and AGUs within other functional units 24B-24C as well. Since the embodiment shown employs AGU 42, reservation station 22A may select the address generation portion of an instruction for execution by AGU 42 once the operands used to form the address have been received but prior to receiving any additional operands the instruction may have. AGU 42 transmits the generated address to load/store unit 26 on address bus 44A, along with the instruction tag of the instruction for which the data address is generated. Accordingly, load/store unit 26 may compare the tag received on address bus 44A to the instruction tags stored in the load/store buffer to determine which load or store the data address corresponds to. Load/store unit 26 monitors the result tags provided on result buses 38 to capture store data for store memory operations. If the result tags match a store data tag within load/store unit 26, load/store unit 26 captures the corresponding data and associates the data with the corresponding store instruction. Load/store unit 26 is coupled to data cache 28 via a data cache interface. Load/store unit 26 selects memory operations to probe data cache 28 via the data cache interface, and receives probe results from the data cache interface. Generally speaking, a "probe" of the data cache for a particular memory operation comprises transmitting the data address of the particular memory operation to data cache 28 for data cache 28 to determine if the data address hits therein. Data cache 28 returns a probe result (e.g. a hit/miss indication) to load/store unit 26. In addition, if the particular memory operation is a load and hits, data cache 28 forwards the corresponding load data on a result bus 38D to reservation stations 22. reorder buffer 32, and load/store unit 26. In one embodiment, data cache 28 includes two ports and may thus receive up to 2 probes concurrently. Data cache 28 may, for example, employ a banked configuration in which cache lines are stored across at least two banks and two probes may be serviced concuπently as long as they access different banks. In one particular embodiment, data cache 28 may employ 8 banks. Various embodiments of the data cache interface are described in further detail below. Data cache 28 is configured to allocate cache lines in response to probes that miss, and communicates with bus interface unit 37 to fetch the missing cache lines. Additionally, data cache 28 πansmits evicted cache lines which have been modified to bus interface unit 37 for updating main memory. Bus interface unit 37 is coupled to data cache 28 and load/store unit 26 via a snoop interface 52 as well. Snoop interface 52 may be used by bus interface unit 37 to deteπriine if coherency activity needs to be performed in response to a snoop operation received from the bus. Generally, a "snoop operation" is an operation performed upon a bus for the purpose of maintaining memory coherency with respect to caches connected to the bus (e.g. within processors). When coherency is properly maintained, a copy of data corresponding to a particular memory location and stored in one of the caches is consistent with the copies stored in each other cache. The snoop operation may be an explicit operation, or may be an implicit part of an operation performed to the address of the particular memory location. Generally, the snoop operation specifies the address to be snooped (the "snoop address") and the desired state of the cache line if the address is stored in the cache. Bus interface unit transmits a snoop request via snoop interface 52 to data cache 28 and load/store unit 26 to perform the snoop operation. Reorder buffer 32 manages the retirement of instructions. Reorder buffer 32 communicates with load/store unit 26 via retire interface 54 to identify instructions either being retired or ready for retirement. For example, in one embodiment stores do not update data cache 28 (or main memory) until they are retired. Additionally, certain load instruction may be restricted to be performed non-speculatively. Reorder buffer 32 may indicate memory operations which are retired or retireable to load/store unit 26 via retirement interface 54. Accordingly, the instruction information provided by decode units 20 to reorder buffer 32 for each instruction may include an indication of whether or not the instruction includes a load or store operation. Load/store unit 26 may return an acknowledgment to reorder buffer 32 that a particular memory operation is logged as retired, and reorder buffer 32 may subsequently retire the corresponding instruction. Since the load/store buffer may become full at times, load/store unit 26 may employ a flow control mechanism to stall subsequent memory operations at decode units 20 until sufficient entries are freed (via completion of earlier memory operations) within the load/store buffer for the subsequent memory operations. For example, load/store unit 26 may broadcast a count of the number of free entries to decode units 20, which may stall if the count indicates that insufficient entries are available for the memory operations of instructions being decoded. According to one particular embodiment, the instructions being concurrently decoded by decode units 20 move to reservation stations 22 in lockstep (so that a line may be allocated in reorder buffer 32 for the instructions, as described above with respect to Fig. 1). In such an embodiment, decode units 20 may stall until sufficient entries are available for all memory operations within the set of concurrently decoded instructions. Alternatively, load/store unit 26 may employ a stall signal for stalling subsequent memory operations until buffer entries are available. Any suitable flow control mechanism may be used. Turning now to Fig. 3, a block diagram of one embodiment of load/store unit 26 is shown. Other embodiments are possible and contemplated. In the embodiment of Fig. 3, load store unit 26 includes a first load/store buffer (LSI buffer) 60, a second load/store buffer (LS2 buffer) 62, an LSI control logic 64, an LS2 control logic 66, a temporary buffer 68, segment adders 70, a port 0 multiplexor (mux) 72, a port 1 mux 74, and an LS2 reprobe mux 76. Segment adders 70 are coupled to receive data addresses from AGUs 42 within functional units 24A-24C (e.g. address bus 44.AA, part of address bus 44A shown in Fig. 2, conveys the data address from AGU 42 within functional unit 24A). Muxes 70 and 72 are coupled to receive the data addresses from AGUs 42 and the outputs of segment adders 70, as well as bemg coupled to LS 1 buffer 60 Mux 72 also receives an mput from LS2 reprobe mux 76 Furthermore, LSI buffer 60 is coupled to segment adders 70, LSI control logic 64, temporary buffer 68, mstrucnon tags bus 48, store data/tags bus 50, and results buses 38a (the result data portion of result buses 38) LSI control logic 64 is coupled to muxes 72 and 74 and to LS2 control logic 66 Furthermore, LSI control logic 64 is coupled to receive address tags from AGUs 42 (e g. address tag bus 44AB, part of address tag bus 44 A shown m Fig 2, conveys the address tag from AGU 42 withm functional umt 24A), result tags via result tags buses 38b (the result tag portion of result buses 38), and L/S lmes 46 (mcludmg L/S lmes 46A from decode unit 20A) Temporary buffer 68 and LS2 buffer 62 are coupled to results buses 38a and result tags buses 38b LS2 buffer 62 is further coupled to receive a miss address buffer (MAB) tag on a MAB tag bus 78 and a physical address on a physical address bus 80 from data cache 28 LS2 buffer 62 is still further coupled to mux 76, LS2 control logic 66, and temporary buffer 68 LS2 control logic 66 is further coupled to mux 76, retire mterface 54, result tags buses 38b, snoop mterface 52, hit/miss signals 82 from data cache 28, and a fill tag bus 84 from bus mterface umt 37 Generally speaking, load/store unit 26 mcludes a pre-cache buffer (LSI buffer 60) and a post-cache buffer (LS2 buffer 62) Memory operanons are allocated mto LSI buffer 60 upon dispatch withm processor 10, and remain withm LSI buffer 60 unnl selected to probe data cache 28 Subsequent to probmg data cache 28, the memory operations are moved to LS2 buffer 62 mdependent of the probe status (e g hit/miss, etc ) Smce LSI buffer 60 stores memory operations which have yet to probe data cache 28 and the memory operations are removed from LSI buffer 60 upon probmg data cache 28, a relatively simple scanning scheme may be used to select memory operations to probe data cache 28 Smce the scheme is simple, it may be performed rapidly and may aid m keepmg load latency low for loads which hit data cache 28 Additionally, smce memory operations are deleted from LSI after probmg data cache 28, the size (I e number of entπes) of LSI buffer 60 may be relanvely small as compared to the total number of memory operanons which may be in-flight Memory operanons which miss may subsequently be selected through LS2 reprobe mux 76 and port 0 mux 72 to reprobe data cache 28 The term 'reprobe", as used herem, refers to probmg a cache for a second or subsequent attempt after the first probe for a particular memory operanon Addinonally, store memory operanons may be held in LS2 buffer 62 unnl the stores are m condinon for retirement LS2 buffer 62 may be made deeper than LSI buffer 60, allowing for large numbers of misses to be stored therein Smce, m many cases, memory operations accessing the same cache lme tend to be near each other in an mstruction stream, a relatively large number of misses to the same cache lme may be queued m LS2 buffer 62 Subsequent memory operations which hit data cache 28 may then be selected from LSI buffer 60 and serviced Average cache bandwidth may thereby be mcreased Furthermore, by allow g the queumg of numerous cache rmsses m LS2, it may be possible m many cases to keep bus mterface unit 37 busy servicing numerous cache lme fetch requests from data cache 28, thereby maximizing use of external bus bandwidth In response to signals on L/S lmes 46 LSI control logic 64 allocates entiles withm LSI buffer 60 to the identified load and store memory operations The respective mstruction tags and store data/tags (if applicable) are received mto the allocated entries bv LSI buffer 60 under the contiol of LSI conttol logic 64 Subsequently, the corresponding data addresses are received from the AGUs (identified by the address tags received by LSI control logic 64) and are stored mto the allocated entπes A memory operation which has received its address becomes eligible to probe data cache 28. LSI control logic 64 scans the LSI buffer entπes for memory operations to probe data cache 28, and generates selection controls for port 0 mux 72 and port 1 mux 74 Accordmgly, up to two memory operations may probe data cache 28 per clock cycle in the illustrated embodiment. Accordmg to one particular implementation, LSI control logic 64 selects memory operations for probmg data cache 28 m program order. Accordmgly, LSI control logic 64 may be configured to limit scanning to the oldest memory operations withm LSI buffer 60. The "program order" of the memory operations is the order the instructions would be executed m if the instructions were fetched and executed one at a time Furthermore, the program order of instructions speculatively fetched (accordmg to branch predictions, for example) is the order the instructions would be executed m as stated above under the assumption that the speculation is correct. Instructions which are pnor to other instructions in the program order are said to be older than the other instructions. Conversely, mstructions which are subsequent to other mstructions m program order are said to be younger than the other mstructions. It is noted that other implementations may select memory operations to probe data cache 28 out of order, as desired. LSI control logic 64 is configured to select a memory operation to probe data cache 28 as the data address is received (provided, m the present embodiment, that the memory operation is withm an entry bemg scanned by LSI control logic 64). If the address tags received from the AGUs 42 match an mstruction tag of an otherwise selectable memory operation, LSI control logic 64 selects the corresponding data address received from the AGU 42 via one of muxes 72 and 74 While the data address may be selected for probmg as it is provided to load/store unit 26, the data address is also provided to one of segment adders 70 Segment adders 70 are mcluded m the present embodiment to handle the segmentation portion of the x86 addressing scheme Embodiments which do not employ the x86 instruction set architecture may eliminate segment adders 70. Generally, AGUs 42 generate a virtual address corresponding to the memory operation. The virtual address is the address generated by adding the address operands of an mstruction The virtual address is tianslated through an address translation mechanism specified by the mstrucnon set architecture employed by processor 10 to a physical address. The physical address idennfies a memory locanon withm mam memory In the x86 architecture, a two-tiered translation scheme is defined from a logical address (or virtual address) to a lmear address through a segmentaπon scheme and then to the physical address through a paging scheme. Smce AGUs 42 add the address operands of the mstruction, the data address provided by the AGUs is a logical address However, modem mstruction code is generally employing a "flat addressing mode" in which the segment base addresses (which are added to the logical address to create the lmear address) are programmed to zero Accordmgly, load/store unit 26 presumes that the segment base address is zero (and hence the logical and lmear addresses are equal) and selects the logical address to probe data cache 28 Segment adders 70 add the segment base address of the selected segment for the memory operation and provide the lmear address to muxes 72 and 74 and to LSI buffer 60 for storage If the segment base address for a particular memory operation is non-zero and the memory operation was selected to probe data cache 2S upon receivmg the logical address, LSI control logic 64 may cancel the previous access (such that load data is not forwarded) and select the corresponding lmear address from the output of the corresponding segment adder 70 for probing data cache 28 In other alternative embodiments, AGUs 42 may receive the segment base address and generate lmear addresses. Still other embodiments may require flat addressing mode and segment base addresses may be ignored. Muxes 72 and 74 are coupled to receive data addresses from entπes withm LSI buffer 60 as well. The data address corresponding to a memory operation is stored m the LSI entry assigned to the memory operation upon receipt from the AGUs 42. The data address is selected from the entry upon selecting the memory operation to probe data cache 28. It is noted that, m addition to the data address, other information may be transmitted to data cache 28 via muxes 70 and 72 For example, an indication of whether the memory operation is a load or store may be conveyed The mstrucnon tag of the memory operanon may be conveyed for forwarding on result buses 38D with the load data for load memory operanons. The size of the operation (for muxing out the appropπate data) may be conveyed as well Any desirable information may be transmitted accordmg to design choice. Store data may be provided for a store memory operation while the store memory operation resides in LSI buffer 60. Accordmgly, LSI conttol logic 64 may momtor result tags buses 38b. If a tag matching a store data tag withm LSI buffer 64 is received, the conesponding store data from the corresponding one of result buses 38a is captured mto the entry havmg the matching store data tag LSI control logic 64 removes memory operations from LSI buffer 60 m response to the memory operations probmg data cache 28. In one particular embodiment, memory operanons are removed the cycle after they are selected for probmg data cache 28 The cycle after may be used to allow, m cases m which a memory operanon is selected upon generanon of the data address by one of AGUs 42, for the data address to propagate mto LSI buffer 60 Other embodiments may chose to remove the memory operanons duπng the cycle that the memory operanons are selected Because the memory operanons are removed the cycle after they are selected, LSI control logic 64 is configured to scan the oldest 4 entnes m LSI buffer 60 to select memory operanons for probmg data cache 28 (up to two entnes selected in the previous clock cycle and up to two entπes bemg selectable m the present clock cycle) Memory operations removed from LS 1 buffer 60 are moved to temporary buffer 68 Temporary buffer 68 may be provided to ease timing consttamts m reading entnes from LS 1 buffer 60 and vmting them to LS2 buffer 62 Accordmgly, temporary buffer 68 is merely a design convemence and is entirely optional. The clock cycle after a memory operation is moved mto temporary buffer 68, it is moved to LS2 buffer 62. Smce store data may be received upon results buses 38 dunng the clock cycle a store memory operation is held m temporary buffer 68, temporary buffer 68 monitors result tags on result tags buses 38b and capmres data from result buses 38a m a manner similar to LSI buffer 60 capturing the data Accordmgly, memory operations w hich hav e probed data cache 28 are placed mto LS2 buffer 62 In the present embodiment, all memory operations are placed mto LS2 buffer 62 after an mmal probe of data cache 28 Stores are held in LS2 buffer 62 until they can be committed to data cache 28 d e unnl they are allowed to update data cache 28) In general stores may be committed when they become non-speculative. In one embodiment, stores may be committed m response to their retirement (as indicated via retirement mterface 54) or at any time thereafter Loads are held m LS2 buffer 62 unnl they retire as well m the present embodiment. Load hits remain in LS2 buffer 62 for snooping purposes Load misses are held m LS2 at least until the cache lme accessed by the load is bemg transferred mto data cache 28 In response to the cache lme (or portion thereof mcludmg the load data) bemg scheduled for updating the cache, the load miss is scheduled for reprobmg data cache 28 Upon reprobing, the load miss becomes a load hit (and the load data is forwarded by data cache 28) and is retamed as such unnl retiring. LS2 control logic 66 allocates entπes withm LS2 buffer 62 for memory operations which have probed data cache 28. Addittonally, LS2 control logic 66 receives probe sta s mformanon from data cache 28 for each of the probes on hit/miss signals 82. The hit/miss mformanon is stored m the LS2 buffer entry corresponding to the memory operanon for which the probe status is provided. In one embodiment, data cache 28 mcludes address translation circuitry which, m parallel with access to the data cache, attempts to translate the virtual address to the physical address. If a translation is not available withm the address translation circuitry, the probe may be identified as a miss until a translanon is established (by searchmg software managed translation tables in mam memory, for example). In one specific raiplementanon, the address translanon circuitry withm data cache 28 compπses a two level translanon lookaside buffer (TLB) structure mcludmg a 32 entry level-one TLB and a 4 way set associative, 256 entry level-two TLB. If the data address of the memory operation is successfully translated by data cache 28, the corresponding physical address is provided on physical address bus 80 LS2 control logic causes the corresponding entry to overwrite the virtual address with the physical address. However, certam virtual address bits may be separately maintained for indexing purposes on reprobes and store data commits for embodiments m which data cache 28 is virtually mdexed and physically tagged. For memory operations which miss data cache 28, data cache 28 allocates an entry m a miss address buffer mcluded therein. The miss address buffer queues miss addresses for transmission to bus mterface unit 37, which fetches the addresses from the L2 cache or from mam memory A tag identifying the entry within the miss address buffer (the MAB tag) is provided on MAB tag bus 78 for each memory operation which misses. It is noted that data cache 28 allocates miss address buffer entnes on a cache lme basis. Accordmgly, subsequent misses to the same cache lme receive the same MAB tag and do not cause an additional miss address buffer entry to be allocated. Bus mterface unit 37 subsequently fetches the missing cache lme and returns the cache lme as fill data to data cache 28. Bus mterface unit 37 also provides the MAB tag corresponding to the cache lme as a fill tag on fill tag bus 84. LS2 control logic 66 compares the fill tag to the MAB tags withm LS2 buffer 62. If a match on the MAB tag occurs for a load memory operation, then that load may be selected for reprobmg data cache 28. If more than one match is detected, the oldest matchmg load may be selected with other memory operations selected dunng subsequent clock cycles Stores which match the MAB tag are marked as hits, but wait to become non-speculative before attempting to commit data In one embodiment, the cache lme of data is returned usmg multiple packets Each load memory operation may record which packet it accesses (or the packet may be discerned from the appropnate address bits of the load address), and bus mterface unit 3" may idennfy the packet being returned along with the fill tag. Accordingly, only those loads which access the packet bemg returned may be selected for reprobmg. Bus mterface unit 37 provides the fill tag in advance of the fill data to allow a load to be selected for reprobmg and to be ttansmitted to data cache 28 via port 0 to arπve at the data forwarding stage concurrent with the packet of data reachmg data cache 28 The accessed data may then be forwarded Smce stores are moved to LS2 buffer 62 after probmg data cache 28 and subsequent loads are allowed to probe data cache 28 from LSI buffer 60 and forward data therefrom, it is possible that a younger load accessmg the same memory location as an older store will probe data cache 28 pnor to the older store committing its data to data cache 28. The coπect result of the load is to receive the store data corresponding to the older store. Accordmgly, LS2 control logic 66 momtors the probe addresses and determmes if older stores to those addresses are withm LS2 buffer 62. If a match is detected and the store data is available withm LS2 buffer 62, LS2 connol logic 66 signals data cache 28 to select data provided from LS2 buffer 62 for forwarding and provides the selected data. On the other hand, if a match is detected and the store data is not available within LS2 buffer 62, forwarding of data from data cache 28 is cancelled. The load is moved mto LS2 buffer 62, and is selected for reprobmg until the store data becomes available. Additional details regardmg store to load forwarding are provided further below. Generally, LS2 control logic 66 is configured to scan the entnes withm LS2 buffer 62 and select memory operanons to reprobe data cache 28 Load rmsses are selected to reprobe m response to the data bemg returned to data cache 28. Loads which hit older stores are selected to reprobe if they are not currently reprobmg. Stores are selected to reprobe m response to bemg retired If mu Tple memory operaπons are selectable, LS2 control logic 66 may select the oldest one of the multiple memory operanons. If LS2 conttol logic 66 is usmg port 0 (via port 0 mux 72), LS2 control logic 66 signals LSI control logic 64, which selects the LS2 mput through port 0 mux 72 and disables selecting a memory operanon from LS 1 buffer 60 on port 0 for that clock cycle. LS2 control logic 66 is further coupled to receive snoop requests from bus mterface umt 37 via snoop interface 52 Generally, memory operations m LS2 buffer 62 are snooped smce they have probed data cache 28 and hence may need corrective action m response to the snoop operation. For example, load hits (which have forwarded data to dependent mstructions) may need to be discarded and reexecuted. Stores may be stormg a cache state from their probe, which may need to be changed. By contrast, memory operaπons withm LSI buffer 60 have not probed data cache 28 and thus may not need to be snooped LS2 control logic 66 receives the snoop request, examines the LS2 buffer entries agamst the snoop request, and responds to bus mterface unit 37 via snoop mterface 52. AddiHonally, LS2 control logic 66 may perform updates withm LS2 buffer entnes m response to the snoop Additional details regardmg snooping m LS2 buffer 62 are descnbed below Generally speaking, a buffer is a storage element used to store two ot more items of information for later retrieval The buffer may comprise a plurality of registers, latches, flip-flops, or other clocked storage devices. Alternatively, the buffer may compnse a suitably arranged set of random access memory (RAM) cells. The buffer is divided mto a number of entnes. where each entry is designed to store one item of information for which the buffer is designed. Entnes may be allocated and deallocated in any suitable fashion For example, the buffers may be operated as shifting first-m. first-out (FIFO) buffers m which entnes are shifted down as older entnes are deleted Alternatively, head and tail pointers may be used to indicate the oldest and youngest entnes m the buffer, and entnes may remam in a particular storage location of the buffer unnl deleted therefrom The term "control logic" as used herem, refers to any combination of combmatoπal logic and/or state machines which performs operaπons on inputs and generates outputs m response thereto m order to effectuate the operaπons descπbed. It is noted that, m one embodiment, load/store umt 26 attempts to overlap store probes from LSI with the data commit of an older store on the same port This may be performed because the store probe is only checking the data cache tags for a hit/miss, and is not attempting to retπeve or update data withm the data storage. It is further noted that, while the above descπption refers to an embodiment m which all memory operations are placed m LS2 buffer 62, other embodiments may not operate m this fashion. For example, load hits may not be stored m LS2 buffer 62 in some embodiments Such embodiments may be employed, for example, if maintaining sttong memory ordering is not desired. Turning next to Fig 4, a timing diagram is shown illustrating an exemplary pipeline for a memory operation probmg data cache 28 from LSI buffer 60 Other embodiments employmg different pipelines are possible and contemplated In Fig 4, clock cycles are delimited by vertical solid lmes A horizontal dashed lme is shown as well. Pipeline stages related to other portions of processor 10 are shown to illustrate the mterface of other elements to load/store umt 26 Clock cycle CLKO is the decode/dispatch cycle for an instruction specifying the memory operanon. Dunng clock cycle CLKO. the decode umt 20 decodmg the mstrucnon signals load/store umt 26 regardmg the memory operanon. LSI control logic 64 allocates an LSI buffer entry for the memory operation duπng the decode/dispatch stage for the corresponding mstruction. Additionally, the decode umt 20 transmits the decoded mstruction to the corresponding reservation station 22. Dunng clock cycle CLK1, the address generation umt generates the data address for the memory operation and transmits the data address to load/store umt 26 Dunng this clock cycle, the memory operation participates m the scan performed by LSI co rol logic 64 (by virtue of the data address bemg provided) and is selected to probe data cache 28 Accordmgly , the memory operation is m the scan pipeline stage of the LSI pipeline Dunng clock cycle CLK2, the data address is transmitted to data cache 28 As illustrated by the arrow withm clock cycle CLK2, the memory operanon is moved from LSI buffer 60 to temporary buffer 68 at the end of clock cycle CLK2 The memory operation is m the address to data cache stage of the LS 1 pipeline dunng clock cycle CLK2 Dunng clock cycle CLK3, the data address accesses data cache 28 Data conesponding to the memory operation (if the memory operation is a load) is forwarded at the end of clock cycle CLK3 Additionally, the memory operation is moved from temporary buffer 68 to LS2 buffer 62 The memory operation is m the cache access stage dunng clock cycle CLK3 Dunng clock cycle CLK4, an mstrucnon dependent upon the memory operanon (if the memory operanon is a load) may be executed Accordmgly, the pipeline lllusttated Fig 4 provides for a three clock cycle address generation to dependent operanon execuHon load latency Addinonally, the memory operanon is m the response pipeline stage durmg clock c> cle CLK4 Data cache 28 provides hit miss mformanon and the physical address durmg the response stage Accordingly, LS2 control logic 66 associates hit/miss information and the physical address with a memory operanon in the response stage Duπng clock cycle CLK5, the memory operanon is m a response2 pipeline stage Durmg this stage, the miss address buffer tag ldennfymg the miss address buffer entry assigned to the cache lme accessed by the memory operation (if the memory operanon is a miss) is provided by data cache 28 Accordmgly, LS2 control logic 66 associates a MAB tag received from data cache 28 with a memory operation m the response2 stage. Turning next to Fig 5, a timing diagram illustrating an exemplary pipeline for a memory operation reprobmg data cache 28 from LS2 buffer 62 is shown Other embodiments employmg different pipelines are possible and contemplated In Fig 5, clock cycles are delimited by vertical solid lmes A horizontal dashed lme is shown as well Pipeline stages related to other portions of processor 10 are shown to illustrate the mterface of other elements to load/store umt 26 Duπng clock cycle CLKO, the memory operation participates a scan of LS2 buffer entnes and is selected to reprobe data cache 28 As lllusttated by the arrow beneath clock cycle CLKO, the memory operation may be selected if a fill tag matchmg the MAB tag for the memory operation is received, if the memory operation is a load which hits an older store withm LS2 buffer 62 (for which the data was not available on the previous probe), or if the memory operation is a store which has been retired by reorder buffer 32 Duπng clock cycle CLK1, the memory operation selected dunng the Scanl stage enters the Scan2 stage Dunng the Scan2 stage, the memory operation is selected through muxes 76 and 72 for transmission to data cache 28 Accordmgly, LS2 control logic 66 selects the memory operation m the Scan2 stage through multiplexor 76 Clock cycles CLK2, CLK3, CLK4, and CLK5 are the address to data cache, cache access, response, and response2 stages of the LS2 buffer reprobe pipeline and ate similar to the corresponding stages descπbed above Accordmgly, for the present embodmient, bus mterface unit 37 may provide the MAB tag 4 clocks pnor to providmg the conesponding data, to allow selection of a load which accesses that corresponding fill data to be m the cache access stage dunng the clock cycle m which the fill data arnves at data cache 28 (and hence the fill data may be forwarded) It is noted that the timing between the mstrucnon pipeline stages above the dotted lmes m Figs 4 and 5 and the memory operatton pipeline stages below the dotted lmes may be extended from those shown m Figs 4 and 5 For example, m Fig 4, the address may not be generated exactly m the clock cycle immediately followmg the decode/dispatch cycle Operands may not be available, or older mstrucnons may be selected for address generanon mstead Furthermore, a memory operanon may not be scanned for access duπng the clock cycle the address is provided, as other older memory operanons may be scanned mstead Turning next to Fig 6 a block diagram illustrating exemplary information which may be stored m one embodiment of an LS 1 buffer entry 90 is shown Other embodiments are possible and contemplated LSI buffer entry 90 mcludes a valid field 92 A which indicates the validity of the entry as well as certam fields withm the entry For example, % alid field 92 A may comprise a valid bit indicating whether or not the entry is valid, a data valid bit indicating whether or not store data is \ a d (if applicable), and an address valid bit mdicatmg whether or not the data address is \ a d Type field 92B stores the type of memory operation represented withm LS I buffer entry 90 The memory operation may be a load, a store, or a load store ( for load-op-store instruction as may occur m the x86 mstruction set architecture) Load store types may probe data cache 28 once, and forward the data based on the probe, then subsequently perform the store hen the mstruction is retired Accordingly, load/store types may occupy a single entry for both the load and the store memory operaπons Address field 92C stores the data address of the memory operation, and store data field 92D stores the store data corresponding to a store memory operation. Instruction tag field 92E stores the instruction tag assigned by reorder buffer 32 to the instruction corresponding to the memory operation. The instruction tag is used to capture the data address from address buses 44. Additionally, the instruction tag may be used to determine when the corresponding instruction is retired by reorder buffer 32 and may be used for loads as the result tag for forwarding data. Data tag field 92F stores the store data tag identifying the source of the store data for a store memory operation. The address valid bit within valid field 92A indicates if address field 92C is valid. However, the data address may be provided by AGUs 42 and be selected for probing data cache 28 prior to the data address becoming valid in LSI buffer entry 90. ATagM field 92G is used to indicate that the address tag provided by AGUs 42 in the previous clock cycle matched instruction tag field 92E for providing selection controls for port 0 mux 72 and port 1 mux 74. In one embodiment, ATagM field 92G may comprise a bit for each issue position to identify the issue position from which the data address is received. Accordingly, ATagM field 92G may be used to determine which LSI entry should capture an address presented to LSI buffer 60 from one of segment adders 70. As illustrated in Fig. 4, removing an entry from LSI buffer 60 may be delayed from the clock cycle in which the entry is selected for probing. Accordingly, accessed bit 92H is provided within LSI buffer entry 90. Accessed bit 92H may be set to indicate that the memory operation was selected in the previous clock cycle for probing, and therefore should not be selected in the present clock cycle. Certain types of memory operations may be predetermined to be performed non-speculatively according to the instruction set architecture employed by processor 10 or according to design choice. Non-speculative bit 921 may be used to indicate such a memory operation. Finally, a general control field 92J may be included for additional control bits as desired. For example, an embodiment of processor 10 employing the x86 instruction set architecture may include control information specific to the x86 architecture within control field 92J. For example, information related to the accessed segment, segment limit violations, and segment attributes may be stored in control field 92J. Furthermore, information such as the size of the memory operation (i.e. number of contiguous bytes affected by the memory operation) may be included, as may be any other desired control information according to design choice. Turning next to Fig. 7, a block diagram illustrating exemplary information which may be stored in one embodiment of an LS2 buffer entry 94 is shown. Other embodiments are possible and contemplated. LS2 buffer entry 94 includes a valid field 96A which indicates the validity of the entry as well as certain fields within the entry. For example, valid field 92A may comprise a valid bit indicating whether or not the entry is valid, a data valid bit indicating whether or not store data is valid (if applicable), and a physical address valid bit indicating whether or not the physical data address is valid (i.e. whether or not a valid translation has been performed by data cache 28). LS2 buffer entry 94 further includes a type field 96B. an address field 96C, a store data field 96D, an instruction tag field 96E, and a data tag field 96F similar to the fields 92B-92F described above. Additionally, store data field 96D may be used in the case of a load which hits an older store within LS2 buffer 62. For these cases, the store instruction tag of the store which the load hits is stored into data field 96D of the load entry. For subsequent reprobes, the older store can be located by comparing the store mstruction tag mstead of trying to scan for the address and pπontize the hits. Additional details regardmg store to load forwarding for one embodiment of load/store umt 26 are provided further below LS2 buffer 94 further mcludes a nonspeculative bit 96L similar to nonspeculative bit 921 descπbed above. MAB tag field 96G stores the MAB tag assigned by data cache 28 for a memory operation which misses. Similar to the accessed bit 92H, accessed bit 96H indicates that LS2 buffer entry 94 has been selected to access data cache 28 and is not cuπently eligible for selection. Additionally, LS2 buffer entry 94 mcludes a pipe field 961 which tracks the pipe stage occupied by the memory operation stored in the entry after it has been selected. Pipe field 961 may, for example, compπse a bit for each pipe stage The bit for the first pipe stage may be set m response to selecting the memory operation in the entry, and then the field may be shifted each clock cycle as the memory operation progresses through the pipeline. Alternatively, an encoded value may be used. Information received from data cache 28 may be associated with the conesponding memory operation by scanning pipe fields 961 for a memory operation which is in the pipe stage at which the information is generated. As mentioned above, memory operaπons may remain m LS2 buffer 62 after bemg retired by reorder buffer 32. Retired bit 96J is used to idenπfy the entry as conesponding to an mstruction which has been retired. Additionally, LS2 buffer entry 94 mcludes an last in buffer (LIB) bit 96K LIB bit 96K is used when comparing stores withm LS2 buffer 62 to loads probmg data cache 28 for the first time. The last in buffer bit mdicates that the store withm the corresponding entry is the last (e.g. youngest) entry withm the buffer to update the data address specified by that store. Accordmgly, m the case m which multiple stores withm the buffer are hit by a load, the store with the LIB bit set is selected as the store upon which the load is dependent. Complex hit pnoπtization logic may thereby be avoided The same comparator circuitry used to compare probmg loads agamst LS2 buffer 62 may be used to compare probmg stores as well If a probmg store hits a store m LS2 buffer 62 for which LIB bit 96K is set, the LIB bit 96K is reset. Alternanvely, a second bit may be set and interpreted as resetting LIB bit 96K LIB bit 96K is set for a store buffer entry as the store buffer entry is allocated Miss bit 96M is used to ldennfy whether or not the memory operanon stored m LS2 buffer entry 94 is a miss in data cache 28 Miss bit 96M is set accordmg to the hit/miss information provided by data cache 28 on hit/miss lmes 82 (either on initial probe or reprobe) Addinonally, LS2 buffer entry 94 mcludes a self- modifymg code (SMC) field 96N for use with the SMC state machme descnbed m more detail below for one embodiment of load/store unit 26 Snoop resync bit 960 is used to indicate synchronizanon due to snoops, as descnbed below m more detail Store load forward bit 96P is used to signify that the cuπent entry is a load which hits an older store withm LS2 buffer 62 (for which data is not available) Loads which hit earlier stores are selected for reprobmg until the store data becomes av ailable (at which time the data is forwarded for the load) A memory type field 96Q is mcluded m LS2 buffer entry 94 as well The memory type may be provided by data cache 28 upon translating the address of the memory operanon Among other things, the memory type may indicate if the memory operation is cacheable or non-cacheable This mformanon may be used for determining whether or not SMC checks are to be performed, accordmg to one embodiment descnbed below. Finally, a general conσol field 96R may be mcluded for additional conttol bits as desired For example, additional mformanon from the translanon of the address which is specific to the mstruction set architecture In one embodiment, a reprobe bit may be mcluded to indicate that a store hit must reprobe because intervening activity caused the lme to be evicted Additionally, the way of data cache 28 that hits may be stored for use in updating data cache 28 with store data Yet another bit may be defined to indicate that bus mterface umt 37 is m the process of acquiπng a state for a cache lme updated by a store which will allow the store to complete Still further, lmear address bits which have been translated but which are used for indexing may be stored m control field 96R Control mformanon may be mcluded or excluded accordmg to design choice Turning now to Fig 8, a circuit diagram illustrating exemplary scan logic for an LSI buffer entry is shown Other embodiments and specific implementations are possible and contemplated Any suitable logic may be used, mcludmg Boolean equivalents of the logic illustrated m Fig 8 Other schemes may mclude additional or substitute selection cπteπa, as desired As illustrated m Fig 8, an LSI entry may be eligible for selection if the data address is valid (AV) or a tag match is detected for addresses bemg provided bv the AGUs 42 (ATagM) Additionally, the entry is not eligible if it has been accessed for probmg (ACC) or is restπcted for executing nonspeculatively (NonSpec) until mdicated as retrreable by reorder buffer 32 The outcome of the logic shown m Fig 8 is that the corresponding entry is selectable for probmg data cache 28 In one embodiment, load/store umt 28 limits the scan to the four oldest entπes m LSI buffer 60 Accordmgly, selection logic similar to the shown in Fig 8 may be employed for the four oldest entπes, and may be qualified with whether or not older entnes exist and are not selected Turning next to Fig 9, a circuit diagram illustrating exemplary scan logic for an LS2 buffer entry is shown Other embodiments and specific implementations are possible and contemplated Any suitable logic may be used, mcludmg Boolean equivalents of the logic illustrated m Fig 8 Other schemes may mclude additional or substitute selection cnteπa, as desired For the embodmient of Fig 9, an LS2 buffer entry may be eligible for reprobmg if a fill tag provided by bus mterface unit 37 matches the MAB tag of that entry and the entry is a miss, or if the entry is a load which hits a store for which data is not available (STLF) or if the entry is retired (RET) and is a store AddiHonally, the entry is selectable if it is valid and not accessed ( A.CC) Similar to the embodiment of Fig 8 the outcome of the logic shown m Fig 9 is that the corresponding entry is selectable for reprobmg data cache 28 The selectability of an entry may be qualified with whether or not older selectable entries exist Dependency Link File As menπoned above load store unit 26 is configured to handle the cases m which a probmg load memory operation hits an older store memorv operanon stored in LS2 buffer 62 Generally speakmg, a load memory operanon is said to "hit ' a store memorv operation if the load memory operanon accesses at least one byte which is updated bv the store memory operanon Similarly, the load address may be determined to hit the store address if the load address (and the size of the operanon) indicate that at least one byte updated by the store is accessed by the load Generally, load/store unit 26 compares data addresses of memorv operanons probmg data cache 28 from LSI buffer 60 to memory operanons withm LS2 buffer 62 If a probmg load hits a store in LS2 buffer 62 and the store data is available with LS2 buffer 62, the store data is transmitted to data cache 28 for forwardmg in place of any load data which may be cache On the other hand, a probmg load may hit a store in LS2 buffer 62 for which store data is not available For this case, forwardmg of data from data cache 28 is cancelled and the load memory operanon is selected for reprobmg from LS2 buffer 62 until the store data becomes available (accordmg to the scan mechanism descπbed above) Eventually, the store data may become available withm LS2 buffer 62 and forwarded therefrom dunng a reprobmg by the load, or the store may update data cache 28 and the data may be forwarded from data cache 28 duπng a reprobmg by the load Finally, store memory operations which hit store memory operations m the buffer may cause the LIB bit for the hit store memory operations to be reset In order to simplify the determination of which store is hit by a load which reprobes from LS2 buffer 62, the store instruction tag of the store hit by the load upon initial probmg from LSI buffer 60 is recorded m the LS2 buffer entry of the load Dunng reprobmgs from LS2 buffer 62, mstead of comparing the data address of the load to the data addresses of stores withm LS2 buffer 62, the store mstruction tag recorded for the load is compared to the store mstruction tags within LS2 buffer 62 If the store mstruction tag recorded for the load matches a store instruction tag withm LS2 buffer 62 and the store data is available, the store data is forwarded for the load in a manner similar to the initial probe case descπbed above Similarly, if the store mstruction tag recorded for the load matches a store mstruction tag withm LS2 buffer 62 and the store data is not available, forwardmg is cancelled and the load is selected agam for reprobmg at a later time If the store mstruction tag recorded for the load does not match a store mstrucnon tag, the data is forwarded from data cache 28 Generally speaking, store data is "available ' from a storage locanon if the store data is actually stored m that storage locanon If the data may at some later pomt be stored m the storage locanon but is not yet stored there, the data is "not available", "not yet available", or "unavailable" For example, store data may be not available m a LS2 buffer entry if the store data has not been transmitted from the source of the store data to the LS2 buffer entry The source of the store data is the mstruction which executes to produce the store data, and may be the same mstruction to which the store corresponds Can mstruction specifying a memory operand as the destination) or may be an older mstruction The store data tag identifies the source of the store data and hence is compared to result tags from the execution units 40 to capture the store data While the above descnbed mechanism, loads dependent on older stores receive the conect data However, m many cases the above mechanism may lead to significant delays m the forwardmg of data for a load (as measured from the store data becoming a\ ailable) Fig 10 is a timing diagram illustrating an example of such a delay accordmg to one embodiment of load store unit 26 Similar to the timmg diagrams above, Fig 10 illustrates a set of clock cycles delimited by vertical solid lmes The pipeline stages of load/store unit 26 which a load hitting an older store is occupying dunng each clock cycle of the example are listed withm each clock cycle Accordmgly, the load is in the cache access stage durmg clock cycle CLKO, the response stage durmg clock cycle CLK1, the response2 stage duπng clock cycle CLK2, the scanl stage duπng clock cycle CLK3. the scan2 stage duπng clock cycle CLK4, the address to data cache stage dunng clock cycle CLK5, and the cache access stage agam duπng clock cycle CLK6 In the example, store data is made available at the end of clock cvcle CLKO To achieve the minimum latency for the load, it would be desirable to forward the data duπng clock cycle CLKO Dependent operations could then execute m clock cycle CLK1. However, accordmg to one embodiment, the store data may not be forwarded. Accordmgly, the store data is forwarded upon reprobe of data cache 28 dunng clock cycle CLK6. It is noted that even more significant delays could be expeπenced. For example, the load might not be immediately selected m the Scanl stage of clock cycle CLK4 Multiple clock cycles may elapse before the load is selected to reprobe data cache 28. Furthermore, even if the load were not in the pipeline at the time the store data amves in clock cycle CLKO (e g. if the load were sitting idle in LS2 buffer 62), a significant delay may be expeπenced pnor to the load bemg selected for reprobmg. Still further, even if LS2 control logic 66 were configured to select the load for reprobmg in response to receiving the store data, a delay of four clock cycles (m the present embodiment) would be expeπenced. One embodiment of load/store umt 26 may employ a forwardmg mechanism which allows for forwardmg of the store data upon receipt of the store data (mdependent of the reprobmg of the corresponding load). Such an embodmient may forward store data to mstrucnons dependent upon the load dunng, e.g , clock cycle CLKO shown m Fig 10 Fig. 11 lllustiates one embodiment of a portion of load/store umt 26 and data cache 28. Other embodiments are possible and contemplated. In the embodiment of Fig. 11, load/store umt 26 mcludes LS2 buffer 62, LS2 control logic 66, a data forward mux 100, address comparators 102A-102B, a dependency link file 104, a dependency link file control logic 106, and store data tag comparators 108A-108B. Additionally, in the embodmient of Fig 11, data cache 28 mcludes a port 1 data mux 110, a port 0 data mux 112, and a LS2 forward data mux 114 LS2 buffer 62 is coupled to data forward mux 100, comparators 102A-102B, and LS2 control logic 66. LS2 control logic 66 is further coupled to muxes 100, 110, 112, and 114 LS2 control logic 66 is further coupled to dependency link file control logic 106, dependency link file 104, and comparators 102A-102B. Dependency link file 104 is coupled to receive mstruction tags corresponding to data cache ports 0 and 1, to LS2 data forward mux 114, to comparators 108A-108B, and to dependency link file control logic 106 Dependency link file control logic 106 is further coupled to mux 114 and comparators 108A-108B Comparators 102A-102B are coupled to receive data addresses presented on ports 0 and 1 of data cache 28. Comparators 108A-108B are coupled to receive result tags on buses 38b Mux 114 is coupled to mux 112 Mux 112 is coupled to provide results on result bus 38DA, and similarly mux 110 is coupled to provide results on result bus DB Result buses 38DA-38DB may form one embodiment of result buses 38D as shown m Fig. 2. Generally speakmg. load/store unit 26 is configured to detect a load which hits a store for which the corresponding store data is not available In response to detecting such a load, load/store unit 26 allocates an entry in dependency link file 104 for the load The dependency link file entry stores a load identifier (e.g. the instruction tag assigned by reorder buffer 32 to the mstrucnon corresponding to the load) identifying the load which hits the store and a store data identifier (e g the store data tag) idennfymg the source of the store data conespondmg to the store hit by the load Load/store unit 26 monitors results buses 38 for the store data tags stored withm dependency link file 104 Upon detecting that store data is bemg provided on one of result buses 38, load/store unit 26 directs data cache 28 to forward the data from the conesponding result bus onto a result bus from data cache 28 Additionally, the load identifier from the corresponding entry is forwarded as the result tag In this manner, the store data is directly forwarded, dunng the clock cycle the store data is provided, to any operations dependent upon the load data. Advantageously, the latency from receiving store data to forwarding the store data to a previously probing load may be reduced. In one embodiment, the latency may be reduced to zero clock cycles. As described above, load addresses are compared to store addresses within LS2 buffer 62 to detect loads which hit older stores. Accordingly, comparators such as comparators 102 are provided. Comparators 102 are provided to compare addresses on each port of data cache 28 to the data addresses stored within LS2 buffer 62. As an example, one embodiment of data cache 28 includes two ports, each of which may receive a different load address during a clock cycle. Such an embodiment may include two comparators 102 for each LS2 buffer entry. For simplicity in the drawing, not all of the comparators 102 have not been illustrated. If an address on one of the ports to data cache 28 hits a data address within LS2 buffer 62, the corresponding comparator 102 asserts a signal to LS2 control logic 66. LS2 control logic 66 determines if the port is being used for a load, if the entry which is hit is a store, and whether or not the corresponding store data is available. If a load hit on a store entry is detected and the conesponding store data is available, LS2 control logic 66 selects the store data using data forward mux 100, and provides the data to either LS2 data forward mux 114 or to port 1 mux 110, based upon the port for which the hit is detected. Accordingly, data forward mux 100 may comprise a set of independent muxes, one for each port. Additionally, LS2 control logic 66 asserts a corresponding signal to data cache 28 for data cache 28 to select the forwarded data in place of cache data read from data cache 28 for the hitting load. If a load hit on a store is detected and the corresponding store data is not available, LS2 control logic 66 signals data cache 28 to cancel data forwardmg. Additionally, LS2 control logic 66 signals dependency link file control logic 106 that a load hitting a store with unavailable data has been detected. Additionally, LS2 control logic 66 reads the store data tag from the entry which is hit and provides the store data tag to dependency link file 104 (or alternatively causes LS2 buffer 62 to transmit the store data tag to dependency link file 104). If more than one store is detected as being hit by a load, LS2 control logic 66 selects the entry for which the LIB bit 96K is set. Dependency link file 104 is also coupled to receive the instruction tags conesponding to the memory operations probing data cache 28 via ports 0 and 1. In response to the signal from LS2 control logic 66, dependency link file control logic 106 allocates an entry within dependency link file 104. The load instruction tag and the store data tag of the store hit by the load are stored into the allocated entry of dependency link file 104. Dependency link file control logic 106 monitors the result tags upon result buses 38 to detect the store data tags stored within dependency link file 104. Accordingly, comparators 108 (including comparators 108A- 108B) are provided. In general, the number of comparators may be the number of result tags monitored multiplied by the number of entries within dependency link file 104. For simplicity in the drawing, not all comparators 108 are shown in Fig. 1 1. Comparators 108. upon detecting equality between the store data tag of the conesponding entry and a result tag upon result tags buses 38b, signals dependency link file conttol logic 106. Dependency link file control logic causes the conesponding load instruction tag to be read from dependency link file 104 and to be provided to mux 1 14. In addition, based upon the result bus from which the result tag matching the store data tag is received, dependency link file control logic 106 signals data cache 28 to select the corresponding data (and the load mstruction tag) through LS2 data forward mux 114 and through port 0 mux 112 onto port 0 result bus 38DA In this manner, the store data is forwarded as load data for the corresponding load Finally, dependency link file control logic 106 deletes the entry for which data is forwarded from dependency link file 104, allowing for a subsequent load to be allocated to that entry. In one embodiment, dependency link file 104 is used to forward load data if the followmg conditions are met (I) the load address and the store address which is hit match exactly (I e identify the same byte); and (u) the store size is equal to or greater than the load size (I e the store updates every byte accessed by the load). Other embodiments may employ more or fewer restπcπons, as desired In the present embodiment, load/store umt 26 uses port 0 of data cache 28 to forward the load data for a load represented m dependency link file 104 Accordmgly, upon detecting that load data is to be forwarded, dependency link file control logic 106 may signal LSI control logic 64 and LS2 control logic 66 Control logics 64 and 66 may inhibit selecting an operation for port 0 and may stall the port 0 pipeline to allow use of port 0 result bus 38DA by dependency link file 104 If LS2 control logic 66 determmes that a store upon one of data cache ports 0 and 1 hits an older store, the LIB bit for the older store is reset The LIB bit for the store on the data cache port is set upon stormg of the entry mto LS2 buffer 62 Finally, if LS2 control logic 66 determmes that a store hits an older load, the hit detected by comparators 102 is ignored It is noted that more than one store data tag withm dependency link file 104 may be detected as bemg forwarded dunng a clock cycle In the present embodiment, dependency link file control logic 106 may select one entry for forwardmg and invalidate the other entnes Subsequent reprobes by the loads conespondmg to the invalidated entπes may cause the conespondmg data to be forwarded from LS2 buffer 62 Alternatively, a mux similar to mux 114 may be provided for port 1 as well to allow the forwardmg of a second load from dependency link file 104 In yet another alternative, dependency link file control logic 106 may be configured to capture the store data for the additional entπes withm dependency link file 106 and forward the data duπng subsequent clock cycles In the present embodiment, dependency link file 104 is a performance enhancement, but does not supplant the reprobe mechanism for forwardmg data accordingly, m cases m which dependency link file 104 is full upon detection of a load hitting a store with unavailable data, dependency link file control logic 106 may not allocate an entry While any number of dependency link file entnes may be employed as desired, m one embodiment 4 entnes are provided Durmg a subsequent reprobe, an entry may be allocated if available m the same fashion as entnes are allocated upon an initial probmg from LSI buffer 60 Still further, loads for which dependency link file entπes are allocated still participate in LS2 scanning and reprobmg m the present embodiment Subsequent to forwardmg of load data for a load via dependency link file 104, the load may reprobe data cache 28 and have the store data forwarded from LS2 buffer 62 m the manner descnbed above This extra forwarding may be harmless smce the pre\ IOUS forwarding via dependency link file 104 satisfies dependencies on the load It is still further noted that if a reprobe of a load for which a dependency link file entry is already allocated is performed, dependency link file control logic 106 inhibits allocating another entry for the load (e g by comparing the load mstruction tag to the tags stored in dependency link file 104) In yet another embodiment, dependency link file 104 may be used to forward data in all cases of load hit store without data available In such an embodiment, if a load hits a store without available data and dependency link file 104 is full, the load is selected for reprobmg until an entry becomes available. However, upon allocation of a dependency link file entry the load may be prevented from reprobmg and the store data is forwarded usmg dependency link file 104 It is further noted that, while the present embodiment is shown for use with LS2 buffer 62, other embodiments are contemplated m which dependency link file 104 is employed withm an embodiment of load/store umt 26 havmg a conventional store queue stormg only store memory operations which have probed data cache 28 It is noted that, while one embodiment of load/store umt 26 employing the dependency link file descπbed above reduces the store data to load for ard latency to zero clock cycles, another contemplated embodiment may capture the store data and forward duπng a succeeding clock cycle While the latency m such an embodiment would be one clock cycle, timing problems may be eased for such an approach Yet other embodiments may employ additional clock cycles of latency from store data to load forwardmg usmg the dependency link file descnbed It is noted that dependency link file 104 may be viewed as a buffer havmg a plurality of entnes, each entry stormg the load instruction tag and correspondmg store data tag as descπbed above. Snoop Resync for Load Ordering Turning now to Fig 12, a timmg diagram is shown illustrating exemplary loads and stores performed by a pair of processors (processor 1 and processor 2) The timing diagram illustrates a problem which may occur m processors which (I) implement an instruction set architecture requiring strong memory ordering; and (π) allow loads which hit to proceed before older loads which are rmsses are serviced from memory. Above the timmg diagram m Fig 12, a list of the program order of the exemplary memory operations is shown, with older operations listed pnor to younger operaπons Accordmgly, processor 1 performs a store to an address Al followed by a store to an address A2 (accordmg to the program order), while processor 2 performs a load from address A2 followed by a condiπonal branch based on the value stored at A2 and a load from address Al The sequence executed by processor 2 may be used, for example, if address Al identifies a memory locanon used as a semaphore for passmg control of a memory locanon idennfied by address A2 from processor to processor Generally, a processor checks the semaphore to determine if another processor controls the protected memory locatιon(s) pnor to readmg or takmg control of the protected memory location(s) If the semaphore is non-zero, for example, the protected memory locatιon(s) may be controlled by another processor The readmg processor may inhibit access to the protected memory location(s) (e g via the conditional branch) until the semaphore is updated to a zero value Use of a semaphore m the manner shown for processor 2, along with havmg strong memory ordering, can guarantee that the load from address A2 (executed by processor 2) receives the update of Al performed by processor 1 Generally, strong memory ordeπng requires that memory operations performed by a processor be detected by other processors as occurring m program order The timmg diagram of Fig 12 lllusttates a case in which the order of the stores by processor 1 may appear to occur out of order to the mstrucnon stream executed by processor 2 by allowing loads to receive data out of order As the timing diagram lllusσates, the load from 2S Al can be completed withm processor 2 as a hit m the data cache pnor to the store to Al by processor 1. Subsequently, the store to A2 may be performed by processor 1 followed by the load from A2 by processor 2. In this sequence of events, the load from A2 by processor 2 would receive the updated value accordmg to the store to A2, but the load from Al (which follows the load to A2 m program order) would not receive the updated value accordmg to the store to Al If the store to A2 is a value allowmg the conditional branch to be not taken, strong memory ordering rules would be violated As descπbed above, one embodiment of load/store umt 26 performs stores m program order (by updating data cache 28 or providmg the stores to bus mterface umt 37 upon retirement of the store memory operations) Loads, on the other hand, may complete out of order in general More particularly, loads probe data cache 28 in program order but a load which hits (either an older store or m data cache 28) may forward data pnor to older load misses bemg serviced and load misses may be serviced out of order. Accordmgly, processor 10 may expeπence a strong memory ordering violation if the load from A2 misses and the load from Al hits (or misses and is serviced pnor to the load from A2) More generally, processor 10 may expeπence a strong memory ordering violation if a load hit is snoop hit by an update-type operation pnor to an older load miss bemg serviced. Turning next to Fig 13, one embodiment of a pomon of one embodiment of load/store umt 26 which may handle strong memory ordering coπectly is shown Other embodiments are possible and contemplated. The portion of load store umt 26 illustrated m Fig 13 mcludes LS2 buffer 62, LS2 control logic 66, reprobe mux 76, and a plurality of comparators 120A-120B Comparators 120A-120B are coupled to LS2 buffer 62 and to receive a snoop address conespondmg to a snoop request on snoop address bus 52A (part of snoop mterface 52). Additionally, comparators 120A-120B are coupled to LS2 control logic 66 LS2 control logic 66 is coupled to LS2 buffer 62 and reprobe mux 70, and is coupled to receive a snoop type on a SnpType bus 52B (part of snoop mterface 52) and a fill tag on fill tag bus 84 from bus mterface unit 37 LS2 control logic 66 is further coupled to a resync lme 122 to reorder buffer 32 Generally speaking, load/store unit 26 is configured to store load memory operations mto LS2 buffer 62 mdependent of the memory operaπons data cache hit/miss status Additionally, LS2 conσol logic 66 is configured to snoop memory operanons withm LS2 buffer 62 against snoop requests from bus mterface umt 37 If a load which is a data cache hit (a "load hit" for discussion of Figs 12-16) is snoop hit by a snoop invalidate request (e g due to a store to the address by another processor), LS2 control logic 66 scans the older memory operations withm LS2 buffer 62 If any older load memory operations withm LS2 buffer 62 are data cache rmsses (a "load miss" for discussion of Figs 12-16), a synchronization indication is set for that older load memory operation Subsequently, the older load miss is completed LS2 control logic 66 detects the synchromzanon indication while completmg the load miss and signals reorder buffer 32 Reorder buffer 32 responds to the signal by synchronizing to the mstrucnon conespondmg to the completing load miss Advantageously, the load hit which was performed out of order and which was found to violate sttong memory ordeπng rules is discarded and reexecuted When reexecuted, the load hit may receive the updated value for the memory locanon accessed and strong ordering may be achieved Generally, a "snoop invalidate request" is a type of snoop request which causes the snooped cache lme (if found) to be invalidated Similarly, a snoop invalidate operation is a snoop operation which causes the snooped cache line (if found) to be invalidated. Among other reasons, a snoop invalidate operation may be initiated if a store to the snooped cache line is being performed by another processor, to allow that processor to establish proper ownership of the cache line prior to performing the store. The term "ownership" refers to the level of access to a cache line which is granted to a particular processor storing the cache line, and to the level of responsibility of that particular processor for maintaining coherency of that cache line. The ownership may be determined by the ownership maintained by other processors as well as by system level considerations, and is generally one of several states defined according to a coherency scheme. For example, the MOESI coherency scheme defines the modified state (in which the processor has exclusive use of the cache line and has modified it with respect to the data stored in main memory), the owned state (in which the processor is responsible for maintaining coherency of the cache line but has shared the modifications made by the processor with at least one other processor), the exclusive state (in which the processor has exclusive use of the cache line but has not modified it), the shared state (in which two or more processors have shared use of the cache line), and the invalid state (in which the processor has no use of the cache line). Other coherency schemes (such as the MESI, MOSI, etc.) schemes are possible as well. As used herein, the term "synchronization" refers to restoring the speculative state of the processor to a state consistent with a particular point in the instruction sequence being executed. More particularly, the speculative state of processor does not reflect execution of any instructions beyond the particular point. Instructions may be fetched starting at the particular point subsequent to the synchronization. Generally, synchronization may be performed to conect the effects of inconect speculative execution. In one embodiment, the synchronization indication within LS2 buffer 62 comprises snoop resync bit 960. Snoop resync bit 960 may be set to indicate that synchronization is to be performed upon completion of the conesponding load. Accordingly, upon detecting a snoop hit for a snoop invalidate request on a load hit within LS2 buffer 62, LS2 co rol logic 66 scans LS2 buffer 62 for older load miss entries and sets the conesponding snoop resync bit 960. Alternatively, the bit may be set initially and cleared to indicate synchronization, as desired. Load misses may be indicated, e.g., by the miss bit 96M being set in the conesponding LS2 buffer entry. The snoop requests conveyed to load/store unit 26 include a snoop address provided on snoop address bus 52A and a snoop type conveyed on SnpType bus 52B. The snoop address is compared, via comparators 120, to the data address stored in each entry of LS2 buffer 62. Accordingly, a comparator 120 may be included for each LS2 buffer entry. Comparators 120A-120B are illusnated as exemplary comparators to maintain simplicity in the drawing. If the comparator 120 detects that the snoop address is within the same cache line as the data address of the conesponding memory operation, the comparator signals LS2 control logic 66. LS2 control logic 66 examines the identified entry or entries and the snoop type provided by bus interface unit 37. If the snoop type is invalidate and the identified entry is a hit, LS2 conttol logic 66 scans the older LS2 buffer entries and sets the conesponding snoop resync bits 960 if any older load misses are found. LS2 control logic 66 may perform other snoop operaπons using the output of comparators 120, as desired. For example, a store which hit data cache 28 during its initial probe may be indicated to be a miss in response to a probe, so that the store will be reprobed before attempting to commit data to the cache. The older load miss entries are subsequently completed in response to a fill tag from bus interface unit 37 matchmg the MAB tag assigned to the older load miss, m the present embodiment. Generally, a memory operahon is refened to as "complete" if status conespondmg to the memory operation has been returned to reorder buffer 32. Reorder buffer 32 is configured to retire the memory operation accordmg to the returned status (which may indicate synchronization, exception, etc ). Synchronization may be indicated by asserting the resync signal on resync lme 122 while data is bemg forwarded for the conespondmg load memory operation (e.g. duπng the cache access stage of the pipeline embodiment shown above). Other signal lmes may be used to report other status, as desired. Reorder buffer 32 may respond to the resync signal m a manner similar to branch mispredictions: by discarding the instructions subsequent to the instruction conespondmg to the load for which the resync signal is asserted, and refetching the mstructions. Smce the load hit which was snoop hit in order to cause the synchronization is subsequent to the load miss m program order, the load hit is discarded, refetched, and reexecuted. It is noted that memory operaπons withm LS 1 buffer 60 and LS2 buffer 62 correspondmg to discarded mstructions are deleted. Any suitable discard scheme may be employed by reorder buffer 32. For example, reorder buffer 32 may broadcast the tag of the instruction for which subsequent mstructions are to be discarded, and load/store umt 26 (and other portions of processor 10) may discard the corresponding mstructions and memory operations. Alternatively, reorder buffer 32 may communicate with load/store umt 26 to identify memory operations to be discarded usmg retire mterface 54. Load/store umt 26 may forward random data for loads to be discarded, and dependent mstrucnons may execute and return results to reorder buffer 32, which may then discard the mstrucnons. Upon reexecunon, the correct value for the load will be read from memory (smce the snoop mvalidate request is also ttansmitted to data cache 28 and causes the cache lme accessed by the load to be mvalidated). In this manner, strong memory ordering is observed while allowmg load hits to generally precede load misses where strong memory ordering is not violated. It is noted that the term "cache lme" has been used herem to descnbe the granulaπty upon which coherency is mamtamed However, other granulanties conespondmg to a portion of a cache lme or multiple cache lmes may be used Accordmgly, coherency may be mamtamed on a "cache block" basis, which may be a portion of a cache lme, a cache lme, or multiple cache lmes. as desired Turning next to Fig 14, a flowchart is shown illustrating the operanons performed by the embodiment of LS2 control logic 66 shown m Fig 13 m response to a snoop operation Other embodiments are possible and contemplated. LS2 control logic 66 determmes if the snoop request hits a load hit and the snoop type is mvalidate (decision block 126). If the snoop request does hit a load hit and the snoop type is mvalidate, LS2 control logic 66 scans the older LS2 entπes and sets the snoop resync bit for each load miss (step 128). Conversely, if the snoop request does not hit a load hit or the snoop type is not invalidate, LS2 control logic 66 does nothing Optionally, other snoop activities may be performed in connection with mamtammg coherency, as desired In an alternative embodiment, LS2 control logic 66 may set the snoop resync bit for the load hit which is hit by the snoop. When each load miss is reprobed. the LS2 control logic 66 may scan LS2 buffer 62 to determine if any valid entπes have the snoop resync bit set If at least one snoop resync bit is set, LS2 control logic 66 may return resync status for the load miss Turning next to Fig. 15, a flowchart is shown illustrating the operations performed by the embodiment of LS2 control logic 66 shown m Fig. 13 m order to complete a load miss operation. Other embodiments are possible and contemplated. LS2 control logic 66 determmes if a load miss is m the data forward pipeline stage of the pipeline (decision block 130). For example, m the present embodmient the data forward pipeline stage is the cache access stage. LS2 control logic 66 may determine if a load miss is m the cache access stage by examining its pipe field 961, for example. If no load miss is m the data forward pipeline stage, then no action is taken with respect to the resync signal. On the other hand, if a load miss is m the data forward pipeline stage, LS2 control logic 66 examines the conespondmg snoop resync bit 960 (step 132). If the conespondmg snoop resync bit 960 is set, then LS2 control logic 66 asserts the resync signal on resync lme 122 to return resync status (step 134). On the other hand, if the conespondmg snoop resync bit 960 is clear, then LS2 control logic 66 deasserts the resync signal to return normal status (step 136). It is noted that other status, such as exceptions, may be returned m the normal status state from other logic Turning next to Fig. 16, an example is shown of the operation of one embodiment of LS2 buffer 62 for processor 2 m the timmg diagram of Fig. 12 Select portions of the LS2 buffer entnes are illustrated, including address field 96C (Addr m Fig. 16), miss bit 96M (Miss in Fig. 16), and snoop resync bit 960 (SR m Fig. 16). At reference numeral 140, LS2 buffer 62 is shown subsequent to detecting the load miss for address A2 and the load hit for address Al Accordmgly, an LS2 buffer entry contammg address A2 has the miss bit set and the snoop resync bit clear, while an LS2 buffer entry contammg address Al has the miss bit and the snoop resync bit clear. After receivmg the snoop mvalidate request conespondmg to processor l's store to address Al, reference numeral 142 illustrates the state of LS2 buffer 62 The snoop resync bit for the entry contammg address A2 has been set by virtue of the load to address A2 bemg older than the load hit to address Al and the load to address A2 bemg a miss. Subsequent to the snoop mvalidate request, bus mterface umt 37 returns the fill tag matchmg the MAB tag for the load to address A2 Load/store umt 26 returns resync status to reorder buffer 32 for the load to address A2, and processor 2 synchronizes The synchronization causes the entry for address Al to be discarded. At reference numeral 144, the state of LS2 buffer 62 subsequent to the synchronization (and retirement of the mstruction conespondmg to the load to address A2) is illustrated. LS2 buffer 62 is empty at reference numeral 144. Processor 2 refetches the discarded mstrucnons, mcludmg the load to address A 1 At reference numeral 146, the state of LS2 buffer 62 upon probmg for the load to address Al is shown. Accordmgly, the miss bit for the load to address Al is set. Finally, the fill tag matchmg the MAB tag for the load to address Al is returned from bus mterface unit 37, along with data reflecting processor l's update to address Al The conect data is forwarded withm processor 2 Subsequent to retiring the load to address Al, LS2 buffer 62 is empty (reference numeral 148) Self-Modifying Code Checks Turning now to Fig 17, a block diagram of one embodiment of a portion of one embodiment of load/store unit 26 is shown Other embodiments are possible and contemplated. The embodiment shown m Fig. 17 is configured to urinate self-modifying code (SMC) checks for store memory operations. In other words, the embodiment shown is configured to initiate a check to determine if a store memory operation modifies memory locations which have been fetched as mstrucnons and are - flight within processor 10. The embodiment of Fig. 17 mcludes LS2 buffer 62, LS2 control logic 66, and a plurality of comparators 150A- 150B. Comparators 150A-150B are coupled to receive retire tags from reorder buffer 32 via a retire tags bus 54A (part of retire mterface 54), and are coupled to LS2 buffer 62 and LS2 control logic 66. LS2 control logic 66 is further coupled to LS2 buffer 62 and to resync lme 122, an SMC check lme 152, an address bus 154, an SMC result lme 156, and an I-stream UC lme 158. Resync lme 122 is coupled to reorder buffer 32 and the other interconnect is coupled to mstruction cache 16. Generally speaking, the apparatus descπbed herem attempts to minimize the number of explicit SMC checks performed withm processor 10. SMC checks generally mvolve transmitting the store address to destinations withm processor 10 at which information regardmg the mstructions m- flight withm processor 10 is stored. The store address is compared to the instruction addresses of the in-flight mstructions to determine if the store updates any of the m- flight mstructions If it is determined that in-flight mstructions have been updated, corrective action is taken (e g. discarding the mstrucnons subsequent to the mstruction correspondmg to the store m program order and refetching those mstructions) Updating of the cache and returning status for the store is delayed until the check is completed, which may take several clock cycles. More particularly, the apparatus shown attempts to minimize SMC checks for non-cacheable stores. SMC checks for cacheable stores may be minimized, for example, by mamtam exclusion between data cache 28 and mstruction cache 16 In other words, a particular cache lme is allowed to exist m at most one of data cache 28 and mstrucnon cache 16 at any given pomt m time By maintaining exclusion, SMC checks for stores which hit m data cache 16 may be skipped because mstructions cannot be fetched from the cache lme without evicting the cache lme from data cache 28 (which would cause the store to be a miss) Therefore, SMC checks may be performed for cacheable stores which miss. Alternatively, an indication may be mcluded withm each data cache lme to mdicate whether or not the cache lme is also stored m mstruction cache 16. If a store is a miss or a hit for a cache lme which is also stored m mstruction cache 16. the SMC check is performed. Other embodiments for handling cacheable store SMC checks are contemplated It is noted that the cacheability of a store may be determined durmg translation of the store address (which is performed duπng probmg of data cache 28 pnor to placmg the stores m LS2 buffer 62) For example, in the embodiment descnbed above, the memory type field 96Q may store cacheability mformanon for the store memory operanon. For non-cacheable stores, cachmg policies are meffecπve for minimizing SMC checks smce there is no conesponding cache lme However, if the store is non-cacheable, then mstruction fetches from the same memory locations are also non-cacheable Instrucnon cache 16 tracks the cacheability of the mstructions inflight withm processor 10 If one or more in-flight mstrucnons are non-cacheable. then mstruction cache 16 asserts an I-stream UC signal on I-stream ILC lme 158 The asserted I-stream UC signal mdicates to load/store unit 26 that at least one non-cacheable mstrucnon is in-flight, while the deasserted I-stream UC signal mdicates that each in-flight mstruction is cacheable It is noted that the terms non-cacheable and uncacheable may be used herem. The terms non-cacheable and uncacheable are mtended to be synonymous herem and mdicate that the memory locations referenced by the store address or mstrucnon address are inhibited from storage withm caches. LS2 control logic 66 determines whether or not to perform SMC checks for a particular store once the particular store is otherwise in condition for updating the affected memory locations (either in data cache 28 or through bus interface unit 37 to other cache levels and/or main memory). In the present embodiment, a store may perform its update in response to being indicated as retireable by reorder buffer 32. Accordingly, comparators 150A-150B are provided. Reorder buffer 32 provides retire tags (instruction tags conesponding to memory operations being retired by reorder buffer 32) to comparators 150A-150B. Comparators 150A-150B compare the retire tags to the instruction tags within each LS2 buffer entry to locate memory operations being retired. Accordingly, the number of comparators may be equal to the number of memory operations which may be concunently retired by reorder buffer 32 multiplied by the number of entries within LS2 buffer 62. However, for simplicity in the drawing, only comparators 150A-150B have been illustrated. In one embodiment, up to two memory operations may be retired by reorder buffer 32 concurrently. Comparators 150A-150B signal LS2 control logic 66 if a match is detected between the retire tags and the instruction tag within the conesponding entry. LS2 control logic 66 determines if the identified entries are stores, and if an SMC check is to be performed. If the store is cacheable, LS2 control logic 66 determines whether or not to perform an SMC check as described above. If the store is non-cacheable, an SMC check is performed if the I-stream UC signal is asserted. If an SMC check is not indicated, LS2 control logic 66 returns normal status for the store and marks the store as retired within LS2 buffer 62 (e.g. via the retired bit 96J within the conesponding entry). If an SMC check is indicated, LS2 control logic 66 initiates an SMC check by asserting an SMC check signal on SMC check line 152 and transmitting the store data address on address bus 154 to mstruction cache 16. Instruction cache 16 performs the SMC check, and returns a result upon SMC result line 156. For example, instruction cache 16 may assert a signal indicating that the SMC check is complete and provide a second signal identifying the result as an SMC hit (conection is to be performed) or an SMC miss (coπection is not to be performed). If the result is SMC hit, LS2 conσol logic 66 returns a synchronization indication to reorder buffer 32 via resync line 122. Otherwise, normal status is returned for the store (allowing reorder buffer 32 to retire the conespondmg instruction). Reorder buffer 32 may synchronize after the store in a manner similar to mispredicted branches, by discarding the instructions subsequent to the instruction corresponding to the store and refetching the instructions. Since the instructions are fetched after the store has updated the targeted memory locations, the conect instructions are fetched upon refetching. It is noted that LS2 control logic 66 may use comparisons between the retire tags and LS2 buffer entries for other purposes as well, depending upon other design considerations. For example, the retire tags may also identify memory operations which have already returned status to reorder buffer 32 and hence are actually being retired by reorder buffer 32. LS2 control logic 66 may delete load hits from LS2 buffer Turning next to Fig. 18, a state machine diagram illustrative of the performance of an SMC check for a store is shown. Other embodiments are possible and contemplated. The embodiment shown in Fig. 18 may be implemented, for example, by storing the current state for each store in the SMC field 96N of the conesponding LS2 buffer entry. The SMC state machine is initially in an SMC idle state 160. The SMC state machine remains in the SMC idle state if the store is not yet retireable (as indicated by receiving a retire tag for the store). Upon receiving an indication that the store is retireable, the SMC state machine transitions to one of two states: SMC check state 162 or SMC complete state 164. SMC check state 162 is selected if the store is a cacheable store for which an SMC check is to be performed or if the store is non-cacheable and the I-stream UC signal is asserted. Additionally, the SMC check signal is asserted and the store address of the store is transmitted to instruction cache 16. On the other hand, the SMC state machine transitions from SMC idle state 160 to SMC complete state 164 if LS2 control logic 66 determines that the store does not require an SMC check. Normal status is returned to reorder buffer 32 in this case, and the store is indicated as retired within the corresponding LS2 buffer entry. The SMC state machine remains in SMC check state 162 until an SMC result is provided by instruction cache 16. Upon receiving the SMC result, the SMC state machine transitions to SMC complete state 164. Additionally, LS2 control logic 66 returns either a synchronization status or a normal status in response to the SMC result provided. The SMC state machine remains in SMC complete state 164 until the store is selected for updating the memory locations specified by the store address. Generally, the store will be selected quickly as it is the oldest operation within LS2 buffer 62 (by virtue of being retired). Upon selection, the store is transmitted to data cache 28 for updating if the store is cacheable, or is transmitted to bus interface unit 37 if the store is noncacheable. The store may then be deleted from LS2 buffer 62, effectively returning the SMC state machine to SMC idle state 160. Turning next to Fig. 19, a block diagram of a portion of instruction cache 16 is shown. For simplicity in the drawing, only portions of instruction cache 16 involved in performing an SMC check for in-flight instructions are shown. Other portions may include the instruction cache storage and control, instruction address translation, etc. Other embodiments are possible and contemplated. In the embodiment of Fig. 19, instruction cache 16 includes an in-flight buffer 170, fetch logic 172, SMC logic 174, snoop/victim comparators 176A-176B, and SMC comparators 178A-178B. Fetch logic 172 is coupled to provide a fetch address which is being fetched from instruction cache 16 (or main memory) and the state of the fetch address to in-flight buffer 170. Instructions become in-flight upon their fetch from instruction cache 16 or main memory into the instruction processing pipeline of processor 10. In-flight buffer 170 is further coupled to SMC logic 174, snoop/victim comparators 176A-176B, and SMC comparators 178A-178B. SMC logic 174 is further coupled to snoop/victim comparators 176A-176B and SMC comparators 178A-178B. Additionally, SMC logic 174 is coupled to receive an SMC check signal on SMC check line 152 and to provide an SMC result signal on SMC result line 156 and an I-stream UC signal on I-stream UC line 158. SMC logic 174 is further coupled to provide a fetch in-flight buffer (IFB) tag to reorder buffer 32 on a fetch IFB tag bus 180 and to receive a retire IFB tag from reorder buffer 32 on a retire IFB tag bus 182. SMC comparators 178A-178B are coupled to receive an SMC address on address bus 154. Snoop/victim comparators 176A-176B are coupled to receive a snoop or victim address from fetch logic 172. Generally speaking, in- flight buffer 170 stores mstruction addresses of in-flight instructions. Additionally, in-flight buffer 170 stores a state conesponding to the instruction addresses. In one embodiment, the state may include prefetch buffer, cache, or not cached. The prefetch buffer state indicates that the instructions are stored m a prefetch buffer employed by instruction cache 16 (not shown) The cache state mdicates that the instructions are stored m lnstrucnon cache 16 The not cached state mdicates that the mstrucnons are not stored m mstrucnon cache 16 (for example, because the mstrucnons are in a non-cacheable area of memory, or because the mstrucnons are a miss m instruction cache 16, or because the mstructions were previously a hit m mstruction cache 16 but later were removed from instruction cache 16 due to a probe invalidation or other cache replacement) SMC logic 174 allocates an entry withm in- flight buffer 170 m response to an mstruction address bemg fetched by fetch logic 172 The entry is identified by an IFB tag which is transmitted through the pipeline to reorder buffer 32 along with the fetched instructions Reorder buffer 32 records the IFB tag and returns the IFB tag m response to retiring or discarding the mstructions conespondmg to the EFB tag SMC logic 174 deletes the corresponding entry wnthin m- flight buffer 170 m response to the retiring EFB tag Accordingly, the mstrucnon addresses withm in-flight buffer 170 represent the in-flight mstrucnons It is noted that, m one embodiment, reorder buffer 32 may concunently retire mstructions conespondmg to more than one EFB tag In such an embodiment, reorder buffer 32 may provide the youngest EFB tag on retire IFB tag bus 182 SMC logic 174 may delete each entry older than the entry identified by the retiring IFB tag (e g at a rate of one entry per clock cvcle or any other suitable rate) SMC logic 174 generates the I-stream \LC signal m response to the states of the m- flight mstructions If one or more m-flight mstructions are not cached, as indicated by the not-cached states m in-flight buffer 170, SMC logic 174 asserts the I-stream UC signal If all mstrucnons are cached or m the prefetch buffers, then SMC logic 174 deasserts the I-stream UC signal In one embodiment, fetch addresses are recorded on a fetch block granulaπty Instruction cache 16 provides a block of contiguous mstruction bytes m response to a fetch address (the "fetch block"), which may compπse one or more mstructions The fetch block is passed to mstruction scanning and alignment logic as a group (e g mto an mstruction queue or other similar mechamsm) In vanous embodiments, the fetch block may compnse a cache lme, or a predefined portion of a cache lme, accordmg to design choice The fetch block is represented by one entry withm in-flight buffer 170 The number of entnes for m- flight buffer 170 may be determined according to the number of fetch blocks which may be in-flight withm processor 10, and therefore may be dependent upon the number of pipeline stages m processor 10, the superscalar issue width, the number of reorder buffer entπes, etc In one specific implementation, 32 entπes are provided although any number may be used SMC logic 174 performs SMC checks responsrv e to the SMC check signal provided by load/store umt 26 In parallel with SMC logic 174 receivmg the SMC check signal, SMC comparators 178 receive the SMC address SMC comparators 178 are coupled to conespondmg entnes withm in-flight buffer 170 Accordmgly, the number of SMC comparators 178 may be equal to the number of entnes withm in-flight buffer 170 For simplicity in the drawing, SMC comparators 178A-1~8B are illustrated Comparators 178 compare the SMC address to the mstruction addresses recorded withm m-flight buffer 170 Comparators 178 are configured to compare the addresses exclusive of the bits which define an offset withm the fetch block, and hence perform a compare to determine if the SMC address is withm the same fetch block as the addresses recorded withm inflight buffer 170 If a match is detected, the conespondmg comparator 178 signals SMC logic 174 SMC logic 174 asserts signals on SMC result lme 156 to mdicate that an SMC hit has been detected if one or more of comparators 178 signals a match and an SMC check is bemg signalled On the other hand, if an SMC check is signalled and none of comparators 178 mdicate a match, then SMC logic 174 asserts signals on SMC result lme 156 to mdicate that an SMC miss has been detected It is noted that the SMC address may be provided to other portions of mstruction cache 16 as well. For example, the SMC address may be provided to mstruction cache storage and control, to cause the eviction of a cache lme matchmg the SMC address Additionally, mstruction cache 16 may mclude one or more miss buffers for cache lmes to be transfened from bus mterface umt 37, and the SMC check may be performed agamst the miss buffers as well. The state of a fetch block provided by fetch logic 172 along with the mstruction address represents the state of the fetch block upon fetch thereof The state may change while the mstructions are in-flight, and SMC logic 174 is configured to momtor for such state changes and to update in-flight buffer 170 to reflect the changes For example, a snoop mvalidate request may cause a cache lme to be evicted from mstruction cache 16. Similarly, mstrucnon cache misses may cause the evicnon of a cache lme to store the mstrucnon bytes of the missing instruction cache lme Other conditions may cause a cache lme to be evicted accordmg to design choice For example, an embodiment of processor 10 which maintains exclusion between mstruction cache 16 and data cache 28 may cause an instruction cache lction when the cache lme is allocated mto data cache 28. Fetch logic 172 provides victim addresses (of cache lmes which are bemg evicted) and snoop addresses to comparators 176A-176B As with comparators 178, comparators 176 may be provided for each in-flight buffer entry However, for simplicity m the drawing, comparators 176A-176B are shown Furthermore, if concurrent compansons of snoop addresses and victim addresses are desured, separate comparators 176 may be provided for each mput address These addresses are compared (on a cache lme basis, which may differ from the fetch block basis) to addresses withm m-flight buffer entnes In other words, address bits which provide an offset withm the cache lme are excluded from the companson performed by comparators 176 If a comparator 176 detects a match, a conespondmg signal is asserted to SMC logic 174 In response, SMC logic 174 changes the state of the idennfied entry to not cached (which may result m the assertion of the I-stteam NC signal, if the I-stream NC signal is deasserted) It is noted that in-flight buffer may be used for other purposes as well, accordmg to design choice. It if further noted that, m other embodiments, SMC checks may be performed in reorder buffer 32 and pipeline stages pnor to reorder buffer 32, as desired Turning now to Fig 20, a flowchart lllusttanng operanons which may be performed by one embodiment of SMC logic 174 is shown Other embodiments are possible and contemplated While the steps shown m Fig 20 are lllustiated in a particular order for ease of understanding, any suitable order may be used. Additionally, steps may be performed m parallel by combmatoπal logic withm SMC logic 174 If an SMC check is signalled (decision block 300) SMC logic 174 determmes if comparators 178 are indicating an SMC hit (decision block 302) If an SMC hit is detected, SMC logic 174 signals load/store unit 26 that an SMC hit has occuned for the SMC check (step 304) Conversely, if an SMC hit is not detected, SMC logic 174 signals load/store unit 26 that an SMC miss has been detected (step 306) If a fetch occurs (decision block 308) SMC logic 174 allocates an in-flight buffer entry for the mstruction address and transmits an IFB tag conespondmg to the entry (step 310) If a retire IFB tag is received (decision block 312), SMC logic 174 deallocates the identified in-flight buffer entry (step 314). If a snoop or eviction is detected by comparators 176 (decision block 316), SMC logic 174 sets the state of the affected entry to not cached (step 318). Finally, SMC logic 174 asserts the I-stream UC signal if one or more m-flight buffer entries are m the not-cached state (step 320). Exponential Backoff Turning now to Fig 21, a block diagram of one embodiment of a portion of one embodiment of load/store umt 26 is shown. Other embodiments are possible and contemplated. In the embodiment of Fig. 21, load/store unit 26 mcludes LS2 buffer 62, LS2 control logic 66, comparators 120A-120B, snoop address bus 54 A and snoop type bus 54B The above elements are coupled together m a manner similar to that descnbed above for the embodiment of Fig 13 Additionally, the embodiment of Fig. 21 mcludes a time stamp counter register 330, a time stamp mcrementor 332, and a backoff delay mux 334. Tune stamp counter register 330 is coupled to time stamp mcrementor 332 and to backoff delay mux 334 Backoff delay mux 334 is coupled to receive selection controls from LS2 control logic 66 and to provide a backoff delay signal to bus mterface umt 37. LS2 control logic 66 is further coupled to a backoff lme 336, which is further coupled to bus mterface umt 37. Generally speaking, load/store umt 26 is configured to avoid deadlock m multiprocessor systems for cases in which two or more processors are attempting to obtain ownership of a particular cache lme. Load/store unit 26 may accomplish deadlock avoidance by detecting cases m which a snoop hit to a memory operation withm LS2 buffer 62 causes processor 10 to lose sufficient ownership to complete that memory operation. For example, processor 10 loses sufficient ownership to complete a load memory operation if a previously valid cache lme accessed by the load is invalidated. On the other hand, processor 10 loses sufficient ownership to complete a store memory operation if a cache lme accessed by the store is previously m a state other than invalid or shared and the cache lme is changed to invalid or shared in response to a snoop hit In response to losmg sufficient ownership, load/store unit 26 is configured to signal bus mterface unit 37 to backoff (via a backoff signal on backoff lme 336) and to mcrease the initial backoff time The backoff time is mcreased each time the ownership is gamed and then lost before the affected memory operation can be completed. Eventually, the memory operation may be completed (after the other processor successfully completes its memory operation) and the backoff tune may be reset to its initial value The term "backoff time" refers to a time mterval dunng which processors are configured to inhibit attempting to reestablish ownership of a cache lme for which ownership was lost via a snoop operation It is noted that load/store unit 26 may be configured to perform the backoff internally (e g by not attempting to transmit commands to bus mterface unit 37 for transmittal on the bus) As descnbed above for the embodiment of Fig 13, comparators 120 (mcludmg comparators 120A- 120B and other comparators for other LS2 buffer entπes) are configured to compare the snoop address of a snoop operation to the addresses withm LS2 buffer 62 If a snoop hit is detected for an entry, LS2 control logic 66 updates the status of that entry to reflect the state that the conespondmg cache lme is bemg updated to (m parallel, by data cache 28, m response to the snoop address and snoop type) Additionally, if the new state of the cache line indicates that processor 10 lost sufficient ownership of the cache line to complete the memory operation withm LS2 buffer 62, LS2 control logic 66 may be configured to mcrease the backoff time employed by bus mterface unit 37 In one particular embodiment, LS2 control logic 66 may update store memory operations which are hit by a snoop to mdicate that the store memory operations are misses or require a state change from shared to exclusive before they can be completed. Subsequently, these stores may be selected for fetching the conespondmg cache lme from memory or for performing the state change. After successfully completing these operations, the store may be completed. Additionally, an embodiment may handle load memory operations in a manner similar to the embodiment shown m Fig. 13. LS2 control logic 66 may limit increasing backoff times to cases in which sufficient ownership is lost for the oldest memory operation withm LS2 buffer 62 In this manner, backoff is not mcreased each time ownership is lost by any memory operation withm LS2 buffer 62. If deadlock would otherwise occur for a particular memory operation, that memory operation will eventually become the oldest memory operation inflight as older memory operations successfully complete Additionally, such an embodiment may be simpler to implement than other embodiments. Still further, such an embodiment may successfully prevent deadlock m cases m which an mstruction performs a memory operation which is misaligned across a cache lme boundary (i.e. the memory operation accesses one or more bytes from a first cache lme and one or more bytes from a second, succeedmg cache line). Memory operations which are misaligned across a cache lme boundary require sufficient ownership of both cache lmes to complete. Load/store umt 26 may handle misaligned cases by performing two memory operations denved from the same mstruction (one accessmg each cache lme). Accordingly, backoff may be implemented for the first of the cache lmes (when it becomes oldest), preventing processors from swappmg ownership of the two cache lmes without one processor achieving ownership of both cache lmes simultaneously long enough to complete the memory operation. In the present embodiment, the backoff time employed by bus mterface umt 37 may be denved from time stamp counter register 330 Generally, time stamp counter register 330 may be employed by processor 10 to measure time elapsed. In other words, the difference between the values stored m time stamp counter register 330 at two arbitrary points m time reflects the time elapsed between those two pomts Time stamp mcrementor 332 may, for example, increment tune stamp counter register 330 each clock cycle In another embodiment, time stamp counter register 330 may be incremented m a clock-frequency-independent fashion to correctly reflect real rime For example, tune stamp mcrementor 332 may receive a signal mdependent of the clock signals used to clock processor 10, and may increment time stamp counter register 330 once per mterval of the received signal. Backoff delay mux 334, under the conσol of LS2 conσol logic 66, is configured to select a backoff delay for use by bus mterface unit 37 In one embodiment, backoff delay mux 334 selects a bit from a predetermmed range of bits withm time stamp counter register 330 The least significant bit withm the range specifies the initial and minimum backoff time, and the mcreased backoff tunes may be selected by selecting other bits withm the range More particularly , a σansiπon of the selected bit may mdicate the expiranon of the backoff mterval A σansrtion of a bit is a change m bmary state of the bit (i e. from one to zero or zero to one) Smce the least significant bit m the range tiansitions more often as the value in time stamp counter register 330 is mcremented, the least significant bit specifies the mimmum backoff time Other, more significant bits withm the range teansrtion at increasingly longer intervals I actually, an exponential mcrease as mcreasmgly significant bits are selected m the present embodiment) Accordmgly, upon detecting that the backoff time is to be mcreased, LS2 conσol logic 66 may conttol backoff delay mux 334 to select the next significant bit within the range Generally, the next significant bit withm a multi-bit value is the bit adjacent to but more significant than the cunently selected bit withm the multi-bit value Accordmgly, each time ownership is gamed and lost by processor 10, the backoff delay is selected as a more significant bit than the previous selecnon The more significant bits withm time stamp counter register 330 transition less frequently, and hence the backoff delay is mcreased. Upon detecting that the oldest memory operation withm LS2 buffer 62 is completed successfully, LS2 control logic 66 signals backoff delay mux 334 to select the least significant bit withm the predetermmed range, thereby resetting the backoff delay to its initial value Turning next to Fig 22, a backoff state machine lllusσative of backing off withm one embodiment of bus mterface unit 37 is shown Other embodiments are possible and contemplated In the embodiment of Fig. 22, the backoff state machme mcludes a normal state 340 and an inhibit state 342 The backoff state machme is typically m the normal state, and remains m the normal state unless signalled by load/store umt 26 to backoff. While the backoff state machme is in normal state 340. bus mterface umt performs σansfers of data between mstrucnon cache 16, data cache 28, the L2 cache, and the bus mterface If signalled to backoff, the backoff state machme ttansraons to inhibit state 342 In inhibit state 342, bus mterface umt 37 inhibits lnittating ttansfers of data on the bus mterface Bus mterface unit 37 remains m inhibit state 342 until the backoff delay specified by load/store umt 26 expires Upon expiration of the backoff delay, the backoff state machme returns to normal state 340 It is noted that, while the above descnpπon mdicates that bus mterface unit 37 inhibits all memory operaπons while the backoff state machme is m inhibit state 342, other embodiments may allow initiating limited σansfers of data For example, σansfemng data due to a snoop hit may be minated duπng inhibit state 342 Other embodiments may snll further allow σansfers of data conespondmg to memory operanons other than the ones for which backoff was detected w ile m inhibit state 342 Turning now to Fig 23, a flowchart is shown lllusσating operanon of one embodiment of LS2 conttol logic 66 as shown m Fig 21 Other embodiments are possible and contemplated While the steps shown m Fig 23 are illustrated m a particular order for ease of understandmg, any suitable order may be used Addittonally, steps may be performed m parallel by combmatonal logic withm LS2 conttol logic 66 LS2 conttol logic 66 determmes if a snoop hit is detected for an LS2 buffer entry, and if the snoop hit causes the memory operation m the entry to lose sufficient ownership to complete (decision block 350) If decision block 350 results in a true outcome. LS2 conσol logic 66 signals backoff delay mux 334 to select the next significant tune stamp counter bit as the backoff delay (step 352) Additionally, LS2 conσol logic 66 assert the backoff signal to bus interface unit 3 " (step 354) Conversely, if decision block 350 results m a false outcome, LS2 conσol logic 66 leaves the cunenth selected tune stamp counter bit as the backoff delay (step 356) If LS2 conσol logic 66 determmes that the memory operation (for which loss of sufficient ownership lead to increasing the backoff delay) is successfully completed or aborted by processor 10 (decision block 358), LS2 conttol logic 66 signals backoff delay mux 334 to select the least significant of the selectable time stamp counter bits as the backoff delay (step 360). In other words, the backoff delay is reset to its initial value. Turning next to Fig. 24, a timing diagram is shown illustrating exemplary operation of two processors (processor 1 and processor 2) both attempting to perform a store which is misaligned across cache lines Al and A2. Prior to initiating the activities shown in Fig. 24, processor 1 has exclusive ownership of cache line Al and no ownership (invalid) of cache line A2. Processor 2, on the other hand, has no ownership of cache line Al and exclusive ownership of cache line A2. For purposes of the example, each processor may have the portion of the store to Al as the oldest entry in LS2 buffer 62 and the portion of the store to A2 as the second oldest entry in LS2 buffer 62. At approximately the same time, processor 1 initiates an operation to gain write access to cache line A2 (reference numeral 370) and processor 2 initiates an operation to gain write access to cache line Al (reference numeral 372). For example, each processor may initiate a read operation (to read the cache line of data) with an indication that the data is to be modified (and hence that an exclusive copy is requested). In response to snooping the access by processor 1 to address A2, processor 2 loses ownership of cache line A2. Similarly, in response to snooping the access by processor 2 to address Al, processor 1 loses ownership of cache line Al. Additionally, since the store to address Al is the oldest entry in LS2 buffer 62, processor 1 initiates a backoff interval using the initial backoff time interval. While processor 1 is backed off, processor 2 attempts to reestablish ownership of cache line A2 (reference numeral 374). Again, the operation may be a read with modify intent. Processor 1 loses ownership of cache line Al in response to snooping processor 2's operation. Processor 2 then has exclusive ownership of both cache lines Al and A2. However, prior to processor 2 completing the store operation, processor l's backoff interval expires and processor 1 attempts to reestablish ownership of cache line Al (reference numeral 376). Processor 1 snoops the operation and loses ownership of cache line Al. Additionally, processor 1 enters a backoff interval of the initial length as well. Similar to processor 2's operation durmg processor l's backoff period, processor 1 attempts to reestablish ownership of cache line Al (reference numeral 378). Processor 1 then has exclusive ownership of both cache lines Al and A2. However, prior to processor 1 completing the store operation, processor 2's backoff interval expires and processor 2 attempts to reestablish ownership of cache line Al (reference numeral 380). Processor 1 snoops the operation and loses ownership of cache line Al. Additionally, processor 1 enters a backoff interval of expanded length due to the repeated loss of ownership. During the expanded backoff interval, processor 2 attempts to reestablish ownership of cache line A2 (reference numeral 382). Additionally, due to the additional time available during the expanded backoff interval, processor 2 completes its store (anow 384). Subsequently, the expanded backoff interval expires and processor 1 attempts to gain ownership of cache lines Al and A2 (reference numerals 386 and 388, respectively). Since processor 2 has completed its write operation, processor 2 allows processor 1 to obtain ownership of both cache lines (and provides the updated copies to maintain coherency). Computer System Turning now to Fig 25, a block diagram of one embodmient of a computer system 200 mcludmg processor 10 coupled to a vaπety of system components through a bus bndge 202 is shown Other embodiments are possible and contemplated In the depicted system, a mam memory 204 is coupled to bus bndge 202 through a memory bus 206, and a graphics controller 208 is coupled to bus bndge 202 through an AGP bus 210 Finally, a plurality of PCI devices 212A-212B are coupled to bus bndge 202 through a PCI bus 214 A secondary bus bndge 216 may further be provided to accommodate an electπcal mterface to one or more EISA or ISA devices 218 through an EISA ISA bus 220 Processor 10 is coupled to bus bndge 202 through a CPU bus 224 and to an opttonal L2 cache 228 Bus bndge 202 provides an mterface between processor 10, mam memory 204, graphics controller 208, and devices attached to PCI bus 214 When an operanon is received from one of the devices connected to bus bndge 202, bus bndge 202 idenπfies the target of the operanon (e g a particular device or, m the case of PCI bus 214, that the target is on PCI bus 214) Bus bndge 202 routes the operanon to the targeted device Bus bndge 202 generally σanslates an operanon from the protocol used by the source device or bus to the protocol used by the target device or bus In addition to providmg an mterface to an ISA/EISA bus for PCI bus 214, secondary bus bndge 216 may further incorporate addittonal functionality, as desσed An input/output controller (not shown), either external from or mtegrated with secondary bus bndge 216, may also be mcluded withm computer system 200 to provide operaHonal support for a keyboard and mouse 222 and for vanous senal and parallel ports, as desσed An external cache unit (not shown) may further be coupled to CPU bus 224 between processor 10 and bus bndge 202 m other embodiments Alternaπvely, the external cache may be coupled to bus bndge 202 and cache conttol logic for the external cache may be mtegrated mto bus bndge 202 L2 cache 228 is further shown m a backside configuranon to processor 10 It is noted that L2 cache 228 may be separate from processor 10, mtegrated mto a cartridge (e g slot 1 or slot A) with processor 10, or even mtegrated onto a semiconductor substrate with processor 10 Mam memory 204 is a memory m which apphcanon programs are stored and from which processor 10 pπmanly executes A suitable mam memory 204 compπses DRAM (Dynamic Random Access Memory) For example, a plurality of banks of SDRAM (Synchronous DRAM) or Rambus DRAM (RDRAM) may be suitable PCI devices 212A-212B are illustrative of a vaπety of peπpheral devices such as, for example, network mterface cards, video accelerators audio cards hard or floppy disk drives or dπve controllers, SCSI (Small Computer Systems Interface) adapters and telephonv cards Similarly, ISA device 218 is illustrative of vanous types of penpheral devices, such as a modem a sound card, and a variety of data acquisition cards such as GPIB or field bus mterface cards Graphics conσoller 208 is provided to conσol the rendering of text and images on a display 226 Graphics conσoller 208 may embody a typical graphics accelerator generally known m the art to render three- dimensional data structures which can be effecti ely shifted mto and from mam memory 204 Graphics conσoller 208 may therefore be a master of AGP bus 210 m that it can request and receive access to a target mterface withm bus bndge 202 to thereby obtam access to mam memory 204 A dedicated graphics bus accommodates rapid retπeval of data from mam memory 204 For certam operaπons, graphics controller 208 may further be configured to generate PCI protocol σansactions on AGP bus 210. The AGP mterface of bus bndge 202 may thus mclude functionality to support both AGP protocol σansactions as well as PCI protocol target and initiator σansactions. Display 226 is any elecσomc display upon which an image or text can be presented. A suitable display 226 mcludes a cathode ray tube ("CRT"), a liquid crystal display ("LCD"), etc. It is noted that, while the AGP, PCI. and ISA or EISA buses have been used as examples m the above descπption, any bus architectures may be substituted as desσed It is further noted that computer system 200 may be a multiprocessing computer system mcludmg additional processors (e.g. processor 10a shown as an optional component of computer system 200) Processor 10a may be similar to processor 10. More particularly, processor 10a may be an identical copy of processor 10 Processor 10a may be connected to bus bndge 202 via an mdependent bus (as shown m Fig 25) or may share CPU bus 224 with processor 10. Furthermore, processor 10a may be coupled to an optional L2 cache 228a similar to L2 cache 228. It is still further noted that the present discussion may refer to the assertion of vanous signals. As used herem, a signal is "asserted" if it conveys a value indicative of a particular condition. Conversely, a signal is "deasserted" if it conveys a value indicative of a lack of a particular condition. A signal may be defined to be asserted when it conveys a logical zero value or. conversely, when it conveys a logical one value Additionally, vanous values have been descnbed as bemg discarded m the above discussion. A value may be discarded m a number of manners, but generally mvolves modifymg the value such that it is ignored by logic cσcuitry which receives the value. For example, if the value compπses a bit, the logic state of the value may be inverted to discard the value. If the value is an n-bit value, one of the n-bit encodmgs may mdicate that the value is mvahd. Setting the value to the mvahd encodmg causes the value to be discarded Additionally, an n-bit value may mclude a valid bit indicative, when set, that the n-bit value is valid Resetting the valid bit may compπse discarding the value. Other methods of discarding a value may be used as well It is noted that, while a vanety of embodiments descπbed above showed comparators coupled to buffers for comparing values withm the buffers to mput values, these buffers may equivalently be unplemented as content addressable memones (CAMs), at least for the portions of the entnes bemg compared, as desσed. It is further noted that vanous embodiments above may be used separately from other embodiments, or may be used m combmation with one or more other embodiments, as desσed Furthermore, an embodiment combmmg the operanon of all the above embodiments is contemplated. Numerous vananons and modificanons w ill become apparent to those skilled m the art once the above disclosure is fully appreciated It is mtended that the followmg claims be interpreted to embrace all such vananons and modifications INDUSTRIAL APPLICABILITY This mvention may generally be applicable m processors and computer systems

Claims: WHAT IS CLAIMED IS: 1 A processor (10) compπsmg a data cache (28), and a load/store umt (26) mcludmg a first buffer ( 104) compπsmg a plurality of entπes, each of said entπes configured to store a load identifier and a store data identifier 2 The processor as recited m claim 1 wherem said load store umt (26) is configured to allocate a first entry of said plurality of entπes to a first load memory operation m response to detecting that a first load address of said first load memory operation hits a first store address of a first store memory operation for which a first store data is not available duπng a probe of said first load memory operation to said data cache (28), said first entry stormg a first load identifier identifying said first load memory operation and a first store data identifier identifying a source of said first store data 3 The processor (10) as recited m claim 2 wherem said data cache (28) mcludes one or more multiplexors (110, 112, 114) for selecting forwardmg data, wherem one or more inputs to said multiplexors (110, 112, 114) are coupled to receive said first store data, and wherem said load/store umt (26) is configured to signal said data cache (28) m response to detecting that said first store data is bemg provided, and wherem said multiplexors (110, 112, 114) are configured to select said first store data in response to said signal 4 The processor (10) as recited m claim 3 wherem said load/store umt (26) is configured to transmit said load identifier from said first buffer (104) to said data cache (28) for forwarding with said first correspondmg store data. 5 The processor (10) as recited m claim 3 further compπsmg one or more execution umts (40) configured to execute mstructions and provide conespondmg instruction results on one or more result buses (38), and wherem said conespondmg mstruction results mclude tags identifying mstructions conespondmg to conespondmg mstruction results, and wherem one of said tags identifies one of said execution units (40) as said source of said first store data, and wherem said load/store unit (26) is coupled to said result buses (38), and wherem said load/store unit (26) is configured to compare said tag to said first store data identifier m said first entry and to other store data identifiers in other ones of said plurality of entnes 6 The processor (10)as recited in claim 2 further compnsing a second buffer (62) configured to store said first store memory operation, and wherem said second buffer (62) is further configured to store a second load memory operation which has probed said data cache (28) 7 The processor as recited in claim 6 wherem said load store unit (26) is configured to select said second load memory operation to reprobe said data cache (28), and wherein said load'store unit (26) is configured to allocate a second entry of said plurality of entπes m said first buffer ( 104) to said second load memory operation m response to detecting that a second load address of said second load memory operation hits a second store address of a second store memory operation for which a second store data is not available dunng said reprobe of said second load memory operation to said data cache (28), said second entry stormg a second load identifier identifymg said second load memory operation and a second store data identifier identifymg a source of said second store data. 8. A method for performing a load memory operation, the method compnsing- probmg a data cache (28) with said load memory operation; detecting that said load memory operation hits a store memory operation for which correspondmg store data is not available duπng said probmg; and recording a load identifier identifymg said load memory operation and a store data identifier identifymg a source of said store data, said recording performed to a first buffer (104). 9. The method aas recited m claim 8 further compπsmg, detecting that said store data is bemg ided by receivmg said store data identifier from said source; and forwardmg said load identifier from said first buffer (104) and said store data m response to said detecting. 10. The method as recited m claim 9 further compπsmg executing an mstruction m an execution umt (40), and providmg a result and a result tag m response to said executing, wherem said result tag equals said store data identifier if said mstrucnon provides said store data, thereby identifymg said execution umt (40) as a source of said store data. 11. The method as recited m claim 10 further compnsmg routing said result as a load data conespondmg to said load memory operanon

Inventors: HUGHES WILLIAM ALEXANDER, MEYER DERRICK R, HUGHES, WILLIAM, ALEXANDER, MEYER, DERRICK, R.
Applicants: ADVANCED MICRO DEVICES INC, ADVANCED MICRO DEVICES, INC.
Application year: 1999
Main classification: G06F13
IPC codes: G06F9