text:
The present invention provides a system and method for managing load and store operations necessary for reading from and writing to memory or I/O in a superscalar RISC architecture environment. To perform this task, a load store unit is provided whose main purpose is to make load requests out of order whenever possible to get the load data back for use by an instruction execution unit as quickly as possible. A load operation can only be performed out of order if there are no address collisions and no write pendings. An address collision occurs when a read is requested at a memory location where an older instruction will be writing. Write pending refers to the case where an older instruction requests a store operation, but the store address has not yet been calculated. The data cache unit returns 8 bytes of unaligned data. The load/store unit aligns this data properly before it is returned to the instruction execution unit. Thus, the three main tasks of the load store unit are: (1) handling out of order cache requests; (2) detecting address collisions; and (3) alignment of data.
1. A microprocessor system for executing a program stream, said microprocessor system comprising:
(a) an instruction fetch unit for fetching instructions from an instruction store and for providing a predetermined plurality of said instructions to an instruction buffer;
(b) an execution unit, coupled to said instruction fetch unit, for executing said plurality of said instructions from said instruction buffer in an out-of-order fashion, said execution unit including a load store unit adapted to make load requests to a memory system out-of-order and store requests in-order, said load store unit having,
(i) an address path adapted to manage a plurality of addresses associated with said plurality of said instructions being executed,
(ii) address collision means for detecting and signaling whether address collisions and write pendings exist between each of said plurality of said instructions, wherein said load store unit performs said load requests if no address collisions and no write pendings are detected,
(iii) a data path for transferring load and/or store data to and from said memory system and said execution unit, said data path configured to align data returned from said memory system to thereby permit data falling on a word boundary to be returned from said memory system to said execution unit in correct alignment.
2. The system of
3. The system of
4. The system of
5. The system of
6. The system of
7. The system of
8. The system of
9. The system of
10. The system of
11. The system of
12. The system of
13. The system of
14. The system of
15. The system of
16. In a RISC superscalar microprocessor having an execution unit adapted to execute a stream of instructions and to issue load instructions out-of-order, a method for managing requests for loads and stores to and from a memory device, the method comprising the steps of:
(1) calculating an address for an instruction selected from an instruction window and transferring said address to a load store unit;
(2) determining whether said instruction involves a load operation, a store operation, an execute operation, or a combination of said load, said store, and said execute operations;
(3) checking, if said instruction has a load operation, for an address collision and for any write pendings, and signaling the outcome of said check;
(4) making a request to said memory device based on a priority scheme and the results of said checking step (3);
(5) receiving requested data from said load operation and/or store operation in a data path portion of said load store unit; and
(6) aligning said requested data if said requested data is unaligned.
17. The method of
18. The method of
19. The method of
20. The method of
21. The method of
22. The method of
[0001] The present application is related to the following applications, assigned to the Assignee of the present application: U.S. patent application Ser. No. 07/727,058, filed on Jul. 8, 1991, (attorney docket number SP021) by Nguyen et al. and entitled "EXTENSIBLE RISC MICROPROCESSOR ARCHITECTURE", and to a continuation of the '058 application Ser. No. 07/817,809, filed on Jan. 8, 1992, which are herein incorporated by reference in their entirety.
[0002] 1. Field of the Invention
[0003] The present invention relates generally to the design of a superscalar microprocessor and, more particularly, to a system and method for handling load and store operations in a microprocessor that executes instructions out-of-order.
[0004] 2. Discussion of Related Art
[0005] A major consideration in a superscalar Reduced Instruction Set Computer (RISC) processor is how to execute multiple instructions in parallel and out-of-order, without incurring data errors due to dependencies inherent in such execution. The simplest instruction issue policy for RISC processors, is to issue instructions in exact program order (in-order issue) and to write the results in the same order (in-order completion). Out-of-order completion is more complex than in-order completion, and improves performance of superscalar processors for the same types of operations. For instance, out-of-order completion is used to improve performance of long-latency operations such as loads or floating point operations. Any number of instructions are allowed to be in execution in the functional units, up to the total number of pipeline stages in all functional units. Instructions may complete out of order, because instruction issuing is not stalled when a functional unit takes more than one cycle to compute a result. Consequently, a functional unit may complete an instruction after subsequent instructions already have completed.
[0006] Consider the following code sequence where "op" is an operation, "Rn" represents a numbered register, and ":=" represents assignment:
[0007] R3:=R3 op R5 (1)
[0010] R7 R3 op R4 (4)
[0011] Here, the assignment of the first instruction cannot be completed after the assignment of the third instruction, even though instructions may in general complete out of order. Completing the first and third instructions out of order would leave an odd, incorrect value in register R3, possibly causing, for example, the fourth instruction to receive an incorrect operand value. The result of the third instruction has an "output dependency" on the first instruction and the third instruction must complete after the first instruction to produce the correct output values of this code sequence. Thus, issuing of the third instruction must be stalled if its result might later be overwritten by an older instruction which takes longer to compute.
[0012] Out-of-order completion yields higher performance, but requires more hardware, namely data dependency logic. Data dependency logic is more complex with out-of-order completion, because this logic checks data dependencies between decoded instructions and all instructions in all pipeline stages. Hardware must also ensure that the results are written in the correct order. In contrast, with in-order completion the dependency logic checks data dependencies between decoded instructions and the few instructions in execution, and results are naturally written in the correct order. Out-of-order completion also creates a need for functional units to arbitrate for result busses and register-file write ports, because there probably are not enough of these to satisfy all instructions that can complete simultaneously.
[0013] Moreover, out-of-order completion makes it more difficult to deal with instruction exceptions. An instruction creates an exception when under a given condition, the instruction cannot be properly executed by hardware alone.
[0014] In-order issue processors stop decoding instructions whenever a decoded instruction creates a resource conflict or has a true dependency or an output dependency on an uncompleted instruction. The processor is thus not able to look ahead beyond the instructions with the conflict or dependency, even though one or more subsequent instructions might be executable. A conventional solution is to isolate the decoder from the execution stage, so that it continues to decode instructions regardless of whether they could be executed immediately. This isolation is accomplished by providing a buffer (called an "instruction window") between the decode and instruction stages.
[0015] For look-ahead, the processor decodes instructions and places them into the instruction window as long as there is room in the window, and, at the same time, examines instructions in the window to find instructions that may be executed (i.e., instructions that do not have resource conflicts or dependencies). The instruction window provides a pool of instructions, thus giving the processor a look-ahead ability that is limited by the size of the window and the capability of the processor's Instruction Fetch Unit (IFU). This permits issuing of instructions out of order because instructions may be issued from the window with little regard for their original program order. The only constraints on the instruction issuer are those required to ensure that the program behaves correctly.
[0016] The issue constraints on any particular instruction are mostly the same as with in-order issue: an instruction is issued when it is free of resource conflicts and dependencies. Out-of-order issue gives the processor a larger set of instructions available for issue, improving its chances of finding instructions to execute concurrently. However, the capability to issue instructions out of order introduces an additional issue constraint, much as the capability to complete instructions out of order introduced the constraint of output dependencies.
[0017] To understand this, again consider the above example code sequence. The assignment of the third instruction cannot be completed until the second instruction begins execution. Otherwise, the third instruction might incorrectly overwrite the first operand of the second instruction. The result of the third instruction is said to have an "anti-dependency" on the first input operand of the second instruction. The term anti-dependency refers to the fact that the constraint is similar to that of true dependencies, except reversed. Instead of the first instruction producing a value that the second uses, the second instruction produces a value that destroys a value that the first one uses. To prevent this, the processor must not issue the third instruction until after the second one begins. Because the second instruction depends on the first, the third instruction also must wait for the first to complete, even though the third instruction is otherwise independent. Anti-dependencies are mainly of concern when instructions can issue out of order. An input operand of a stalled instruction can be destroyed by a subsequent instruction during normal operation. However, in scalar processors, instruction exceptions are sometimes handled by correcting the exceptional condition, then retrying the problematic instruction. If this instruction completed out of order, it is possible that, when it is retried, its input operands have been overwritten by subsequent instructions. This problem cannot occur in a processor that supports precise interrupts. The solution may require that the processor maintain copies of instruction operands to allow restart.
[0018] Two typical operations performed by program instructions are load and store operations. Generally, load and store operations read and modify memory locations, respectively. As with other program instructions, loads and stores can be executed out of order. Even though loads and stores can be decoded at the same time, only one load or store is conventionally issued per cycle. A load is typically given priority over a store to use the data-cache, because the load is likely to produce a value that the processor needs to proceed with computation. If a store conflicts with a load for the data-cache, the store is typically held in a store buffer until the store can be performed. Furthermore, a store is conventionally performed in program-sequential order with respect to other stores, and is performed only after all previous instructions, including loads, have completed. This preserves the processor's in-order state in the data-cache, because cache updates are not performed until it is absolutely correct to do so. The store buffer aids in keeping stores in the correct order and in deferring the completion of a store until previous instructions have completed.
[0019] Because stores are held until the completion of all previous instructions, and because loads produce values needed for computation in the processor, keeping loads in program order with respect to stores has significant negative impact on performance. If a load waits until all preceding stores complete, and therefore waits until all instruction preceding the most recent store complete, then all instructions following the load that depend on the load data also wait. To avoid this performance problem, a load is allowed to bypass preceding stores that are waiting in the store buffer, and the load data is allowed to be used in subsequent computation.
[0020] When a load can bypass previous stores, the load may need to obtain data from a previous store that has not yet been performed. The processor checks for a true dependency that a load may have on a previous store by comparing a virtual memory address of the load against a virtual memory addresses of all previous, uncompleted stores (virtual addresses are addresses computed directly by instructions, before address translation by a memory-management unit has been applied). For this discussion, it is assumed that there is a unique mapping for each virtual address, so that it is not possible for two different virtual addresses to access the same physical location. With this assumption, virtual-address comparisons detect all dependencies between physical memory locations. A load has a true dependency on a store if the load address matches the address of a previous store, or if the address of any previous store is not yet computed (in this case, the dependency cannot be detected, so the dependency is usually assumed to exist). If a load is dependent on a store, the load cannot be satisfied by the data-cache, because the data-cache does not have the correct value. If the valid address of a store matches the address of a subsequent load, the load is satisfied directly from the store buffer—once the store data is valid—rather than waiting for the store to complete.
[0021] As the foregoing discussion implies, loads and stores are performed in a manner that avoids anti- and output dependencies on memory locations. Loads can bypass previous stores, but a store cannot bypass previous loads, so there can be no antidependencies between loads and stores. A store is conventionally issued in program order with respect to other stores, so there can be no output dependencies between stores.
[0022] Conventionally, loads are performed at the data cache in program order with respect to other loads. Those skilled in the art have thought that there was little or no performance advantage in allowing loads to be performed out of order, because the data supplied to the processor by older loads is more likely to be needed in computation than the data supplied by new loads.
[0023] A more detailed description of some of the concepts discussed above is found in a number of references, including John L. Hennessy et al., Computer Architecture—A Quantitative Approach (Morgan Kaufmann Publishers, Inc., San Mateo, Calif., 1990) and Mike Johnson, Superscalar Microprocessor Design (Prentice-Hall, Inc., Englewood Cliffs, N.J., (specifically chapter 8, parts of which have been reproduced above) 1991) which are both incorporated by reference in their entirety.
[0024] The present invention provides a system for managing load and store operations necessary for reading from and writing to memory or I/O in a superscalar RISC architecture environment. The present invention provides a microprocessor system for executing a program stream which includes an instruction fetch unit for fetching instructions from an instruction store and for providing a predetermined plurality of the instructions to an instruction buffer. It further includes an instruction execution unit, coupled to the instruction fetch unit, for executing the plurality of instructions from the instruction buffer in an out-of-order fashion.
[0025] The execution unit includes a load store unit adapted to make load requests to a memory system out-of-order and store requests in-order. Thus, the main purpose of the load/store unit of the present invention is to make load requests out of order whenever feasible to get the load data back to the instruction execution unit as quickly as possible. A load operation can only be performed out of order if there are no address collisions and no write pendings. An address collision occurs when a read is requested at a memory location where an older instruction will be writing. Write pending refers to the case where an older instruction requests a store operation, but the store address has not yet been calculated. The data cache unit returns eight bytes of unaligned data. The load/store unit aligns the data properly before it is returned to the instruction execution unit (IEU). Thus, the three main tasks of the load/store unit are: (1) handling out of order cache requests; (2) detecting address collision; and (3) alignment of data.
[0026] The load store unit includes an address path adapted to manage a plurality of addresses associated with the plurality of instructions being executed and address collision means for detecting and signaling whether address collisions and write pendings exist between each of the plurality of instructions being executed, wherein the load store unit performs the load requests if no address collisions and no write pendings are detected. The load store unit further comprising a data path for transferring load and/or store data to and from the memory system and the instruction execution unit, the data path configured to align data returned from the memory system to thereby permit data not falling on a cache quad-word boundary to be returned from the memory system to the instruction execution unit in correct alignment.
[0027] This invention is pointed out with particularity in the appended claims. The above and further advantages of this invention may be better understood by referring to the following description taken in conjunction with the accompanying drawings, in which:
[0028]FIG. 1 illustrates a block diagram of a microprocessor architecture 100 in which the present invention operates.
[0029]FIG. 2 illustrates a general block diagram of Instruction Execution Unit (IEU) 107, which includes load store unit (LSU) 205.
[0030]FIG. 3 illustrates a block diagram of LSU address path 220;
[0031]FIG. 4 illustrates a schematic diagram of the address collision block located in LSU 205.
[0032]FIG. 5 illustrates a schematic diagram of LSU data path 210.
[0033]FIG. 6 shows an example of an unaligned integer load with a cache line crossing.
[0034] FIGS. 7(a) through 7(h) illustrate an example of the operation of LSU 205.
[0035] Referring to FIG. 1, there is provided in accordance with a preferred embodiment of the present invention a microprocessor architecture designated generally as 100. System architecture 100 includes a host processor 105, a cache control unit and memory (CCU) 110, a Virtual Memory Unit (VMU) 115, an I/O subsystem 190, a memory control and interface unit (MCU) 120, and interleaved memory banks 160 a, 160 b, 160 c (hereinafter main memory 160) configured for interleaved operations. Main memory 160 is connected to MCU 120 via an external data bus 162. It is contemplated that the present invention will operate in a multiprocessor environment, and as such, other processors will be connected to memory bus 162.
[0036] Host processor 105 executes software instructions which are stored at addresses, or locations, in main memory 160. These software instructions are transferred to host processor 105 sequentially under the control of a program counter. Oftentimes, some of the instructions require that host processor 105 access one or more of the peripheral I/O devices 135.
[0037] MCU 120 is a circuit whereby data and instructions are transferred (read or written) between CCU 110 (both D-cache 119 and I-cache 118 (read only)), IOU 150, and main memory 160. MCU 120 includes a switch network 145 which has a switch arbitration unit 132, a data cache interface circuit 117, an instruction cache interface circuit 112, an I/O interface circuit 155, and one or more memory port interface circuits 148 known as ports, each port interface circuit 148 includes a port arbitration unit 134.
[0038] Switch network 145 is a means of communicating between a master and slave device. The possible master devices to switch network 120 are D_Cache 119, I_Cache 118, or an I/O Controller Unit (IOU) 150 and the possible slave devices are memory port 148 or IOU 150, for example. The function of switch network 145 is to receive the various instruction and data requests from CCU 110 (i.e., I_Cache 118 and D_Cache 119) and IOU 150. These units may be referred to as bus requesters. After having received these requests, the switch arbitration unit 132 and the port arbitration unit 134 prioritizes the request(s) and passes them to the appropriate memory port (depending on the instruction address). The port 148, or ports as the case may be, will then generate the necessary timing signals, and send or receive the necessary data to and from external memory bus 162. An Instruction Fetch Unit (IFU) 106 and an Instruction Execution Unit (IEU) 107 are the principle operative elements of host processor 105. VMU 115, CCU 110, and MCU 120 are provided to directly support the function of IFU 106 and IEU 107. IFU 106 is primarily responsible for the fetching of instructions, the buffering of instructions pending execution by IEU 107, and, generally, the calculation of the next virtual address to be used for the fetching of next instructions. Simultaneously, instructions are fetched by IFU 106 from I_cache 118 via instruction bus 101. The instructions are placed in "buckets" or sets of four instructions. The transfer of instruction sets is coordinated between IFU 106 and CCU 110 by control signals provided via a control bus 102. The virtual address of an instruction set to be fetched is provided by IFU 106 via an IFU control and address bus 103 to VMU 115. Arbitration for access to VMU 115 arises from the fact that both IFU 106 and IEU 107 utilize VMU 115 as a common, shared resource. In the preferred embodiment of architecture 100, the low order bits defining an address within a physical page of the virtual address are transferred directly by IFU 106 to the CCU 110 via control lines 102. The virtualizing high order bits of the virtual address supplied by IFU 106 are provided by the address portion of the buses 103, 104 to VMU 115 for translation into a corresponding physical page address. For IFU 106, this physical page address is transferred directly from VMU 115 to the CCU 110 via the address control lines 111 one-half internal processor cycle after the translation request is placed with VMU 115.
[0039] The instruction stream fetched by IEU 106 is, in turn, provided via an instruction stream bus 108 to IEU 107. Control signals are exchanged between IFU 106 and IEU 107 via control lines 109. IEU 107 stores and retrieves data from D_Cache 215 via a bidirectional data bus 112. The entire physical address for IEU 107 data accesses is provided via an address portion of control bus 113 to CCU 110. IEU 107 utilizes VMU 115 as a resource for converting virtual data addresses into physical data addresses suitable for submission to CCU 115. Unlike operation with respect to IFU 106, VMU 115 returns the corresponding physical address via bus 104 to IEU 107.
[0040] CCU 110 is used to serve as a buffer between host processor 105 and main memory 160. Generally, CCU 110 is a small, fast memory located close to host processor 105 that holds the most recently accessed code or data. CCU 110 performs the generally conventional high-level function of determining whether physical address defined requests for data can be satisfied from the instruction and data caches 118, 119 as appropriate. Where the access request can be properly fulfilled by access to the instruction or data caches 118, 119, CCU 110 coordinates and performs the data transfer via the data buses 101, 113. Where a data access request cannot be satisfied from the instruction or data cache 118, 119, CCU 110 provides the corresponding physical address to MCU 120 along with sufficient control information to identify whether a read or write access of main memory 160 is desired, the source or destination cache 118, 119 for each request, and additional identifying information to allow the request operation to be correlated with the ultimate data request as issued by IFU 106 or IEU 107.
[0041]FIG. 2 shows a representative high level block diagram of IEU 107 datapath. Simply put, the goal of IEU 107 is to execute as many instructions as possible in the shortest amount of time. IEU 107 contains a register file 250, a load store unit (LSU) 205, an instruction bus (IBUS) 225, a set of functional units 260, 262, 230, an immediate displacement buffer 255, a segment base generator 257, and a writebus 270. LSU 205 is divided into two parts: a LSU address path 220 and a LSU data path 210.
[0042] A superscalar control block (not shown) determines when an instruction can be issued by performing a data dependency check and checking to determine whether the required functional unit 260, 262, 230 is available. Once the superscalar control block decides to issue an instruction, IBUS 225 retrieves (from register file 250, bypass data 280, 282, or immediate data 258, 259) the data required by the issued instruction. IBUS 225 is comprised of a plurality of multiplexers that select which data will be transferred to functional units 260,262 and 230. IBUS 225 transfers the data to a pair of buses: an A bus and a B bus. The selected data is placed on either the A bus or the B bus by determining which functional unit 260, 262, 230 will be used by the instruction or is required by the operation of the instruction being executed.
[0043] Most instructions' inputs and outputs come from, or are stored in, one of several register files. In a preferred embodiment, each register file 250 (e.g., separate integer, floating point and boolean register files) has thirty-two real entries 254 plus a group of eight temporary buffers 252. When an instruction completes (the term "complete" means that the operation is complete and the operand is ready to be written to its destination register) its results are stored in a preassigned location in temporary buffers 252. The results are later moved to the appropriate places in real registers 254. This movement of results from temporary buffers 252 to real registers 254 is called "retirement." More than one instruction may be retired at a time. Retirement comprises updating the "official state" of the machine including the computer's program counter.
[0044] Instructions are sent to IEU 107 from IFU 106 through an instruction decode FIFO (first-in-first-out) register stack storage device (not shown) (referred to herein as an instruction window) in groups of four called "buckets." The bucket is broken up into four units: a load, a store, and two execute units. The bucket has been broken up into these four units since system 100 operates with instructions that can perform either a load, a store, an execute, or a combination of all three. Thus, the present invention provides a bucket that can handle all three situations.
[0045] IEU 107 can decode and schedule up to four buckets of instructions at one time. The instruction window stores 16 total instructions in four buckets. IEU 107 examines the instruction window; every cycle IEU 107 tries to issue a maximum number of instructions from the instruction window. Once all the instructions in a bucket are executed and their results are stored in the processor's register file 250, the bucket is flushed from the instruction window and a new bucket is stored in the instruction window.
[0046] Once the instruction is issued, the registers in register file 250 can be accessed. The temporary register 252 is accessed when an instruction, that had a data dependency on data produced from an earlier instruction, is executed. The data from register file 250 is transferred via data lines 254 to IBUS 225.
[0047] DAFU 230 calculates a 32-bit linear address for use by LSU 205. DAFU 230 supports many different addressing modes. DAFU 230 calculates the first and last address of the data which takes two cycles if the data crosses a quad-word boundary. Up to four components are added to form the address. These components are the segment base, a base register, a scaled index register, and a displacement value. The Segment Base contains the starting address of the desired memory segment. The base and index registers are any 32-bit register from the register file 250. The index register is scaled by multiplying it by 1, 2, 4 or 8. The displacement value is a constant value (immediate) given in the instruction. Any of these fields can be omitted giving maximum flexibility in address calculation.
[0048] The segment base comes from the Segment Register block 257. Segment base generator 257 produces a value that is indicative of how the data is partitioned in memory, and transfers this value to DAFU 230 via date line 266. The displacement comes from an immediate displacement buffer 255. Immediate displacement buffer 255 transfers immediate data via lines 265 to DAFU 230 and to IBUS 225 via data lines 258 and 259, respectively. DAFU 230 and VMU 115 provide LSU 205 with the addresses of any load and/or store requests. LSU 205 processes these requests and eventually returns any requested data to write bus 270. The write bus 270 is comprised of a set of multiplexers that select which data (e.g., data provided by LSU 205 or data provided by functional units 260 or 262) to latch into register file 250 based on a priority scheme. The data is transferred from write bus 270 to register file 250 via lines 275, 276. Data from load and/or stores are always given highest priority. Occasionally, when two instructions are issued back to back, and they depend on each other, EU 107 would like to bypass storing the data into the register file 250 and latch it immediately into IBUS 225. This can be accomplished via data lines 280, 281. Consequently, the resources that are waiting for the data need not waste a cycle waiting for the data to flow through the register file 250.
[0049] Data from data lines 275, 276 is also provided directly to LSU data path 210 in case an instruction involves an execute operation and a store operation. After performing the load and execute operations, the data can be directly transferred to LSU datapath 210 in order to perform the store. This eliminates having to access the temporary register file 252 for the store data, which in turn increases instruction execution time. The main purpose of LSU 205 is to make load requests to CCU 110 out of order whenever feasible to get the load data back to IEU 107 as quickly as possible. A load operation can only be performed out of order if there are no address collisions and no write pendings. An address collision occurs when a read is requested at a memory location where an older instruction will be writing. Write pending refers to the case where an older instruction requests a store operation, but the store address has not yet been calculated. LSU 205 is divided into two parts: data path 210 and address path 220. The address path 220 interfaces with DAFU 230, VMU 232, and CCU 110 and the datapath interfaces with the writebus 270, CCU 110, DAFU 230, and IBUS 225. The three main tasks of LSU are: (1) out of order cache requests; (2) address collision detection; and (3) data alignment.
[0050] Each bucket of instructions can contain a load and a store to the same address (with some other operation in between), a load only, a store only, or no load and no store. Thus, LSU 205 has a selection of up to four loads and four stores to choose from. The instruction set used in the preferred embodiment of the present invention is a CISC instruction set which allows such complex operations as:
[0051] a) R1<-R1+[R2+(R3*2)+3]
[0052] b) [R2]<-[R2] OR R4
[0053] where [x] indicates a memory operand located at address x. The instruction decode unit (not shown) in a preferred embodiment breaks down these CISC instructions into RISC sequences as follows:
[0054] a) LOAD [R2+(R3*2)+3]->Temp Register
[0055] Execute R1+Temp->R1
[0056] b) LOAD [R2]->Temp Register
[0057] Execute Temp OR R4->Temp Register
[0058] STORE Temp Register to address [R2]
[0059] In both cases, DAFU 230 calculates the address of the memory operand, but only one address calculation is necessary per instruction bucket because the load and the store share the same address. For a description of decoding CISC instructions into RISC instructions, see U.S. Pat. No. 5,438,668 entitled "System and Method for Extraction, Alignment and Decoding of CISC Instructions into a Nano-Instruction Bucket for Execution by a RISC Computer," which is hereby incorporated by reference.
[0060]FIG. 3 shows a detailed block diagram of the address path 220 of LSU 205. Load instructions are issued from the instruction window for execution out of order by IEU 107, whereas stores are always issued in order. The address for the load and/or store is calculated as soon as all operands are valid and DAFU 230 is available for address calculation. LSU 205 can make a cache request before it has the physical address from DAFU 230. However, if the physical address is not provided from DAFU 230 and VMU 115 by the next clock cycle, the cache request is cancelled. If the cache request is cancelled, it must be reissued at a later time.
[0061] Only one address is needed for each instruction bucket and serves as both a load address and a store address. For each instruction bucket, two 32-bit addresses are stored in one of the address buffers 310-313: one for the first byte of the access and one for the last byte of the access. When the lower 12-bits are ready from DAFU 130, they are latched into a temporary buffer 305. The following cycle, when the upper 20 bits are ready from the VMU 115, all 32-bits are latched into the appropriate address buffer (i.e., Address1 or Address2). Address calculation is not done in instruction order, but instead is performed when the register dependencies have cleared. After translation of the address, a valid bit (not shown) is set in the instruction's address buffer 310-313 indicating that the address is valid. There are two reasons for keeping both addresses: address collision detection and cache request for page crossing.
[0062] The address utilized by LSU 205 is a physical address as opposed to the virtual address utilized by IFU 106. While IFU 106 operates on virtual addresses, relying on coordination between CCU 110 and VMU 115 to produce a physical address, IEU 107 requires LSU 205 to operate directly in a physical address mode. This requirement is necessary to insure data integrity in the presence of out-of-order executed instructions that may involve overlapping physical address data load and store operations. In order to insure data integrity, LSU 205 buffers data provided by store instructions until the store instruction is retired by the IEU 107. Consequently, store data buffered by LSU 205 may be uniquely present only in LSU 205. Load instructions referencing the same physical address as an executed but not retired store instruction(s) are delayed until the store instruction(s) is actually retired. At that point the store data may be transferred to the CCU 110 by LSU 205 and then immediately loaded back by the execution of a CCU data load operation.
[0063] As discussed above, address calculation by DAFU 230 occurs in one clock cycle and address translation by VMU 132 the next. If the address is for a load, then a cache request is made. If the address is for a store, then LSU 205 waits for the retirement signal to be sent before performing the store. A load request can be made to CCU 110 as early as the first cycle of the address calculation. The lower 12-bits of the address are sent to CCU 110 at this time and the upper 20-bits (which represent the page number) are sent to CCU 110 the following cycle after address translation.
[0064] When the load store address path 220 is free, an immediate request can be made to cache 110 via line 330. Since there are no pending load and/or store addresses currently in the load store address path 220, there is absolutely no danger of an address collision or a write pending. Thus, the request can be made immediately to cache 110.
[0065] Block 340, which includes a plurality of multiplexers, is used for selecting the address for the cache request from address buffers 310-313.
[0066] LSU 205 uses address buffers (i.e., reservation stations) 310-313 for making requests to cache 110. The four address buffers 310-313 (also referred to as reservation stations) correspond to the four buckets contained in the central instruction window (not shown). When IEU 107 requests the new bucket from the decode unit (not shown), one of the address buffers 310-313 is reserved. The address buffer 310-313 is assigned according to instruction number. An historical pointer is updated to indicate the youngest (or newest) instruction. At this time, it is known whether the instruction involves a load, a store, both, or neither, as is the size of the data involved in the load and/or store operation. Address buffers 310-313 are deallocated when the corresponding instruction is retired by IEU 107. Subsequent to deallocation, a new instruction bucket is received from the decode unit (not shown).
[0067] A load dependency (address collision) on a store must be detected in order to use load bypassing and out-of-order load execution. A load dependency is indicated by an address collision or a pending store address. A load dependency occurs when a load operation is requested at a memory location where an older instruction requested a store operation. The address collision detection requires the first address of the load to be compared against two addresses (the first and last) for each older store. This extra comparison with the last byte of the address is required since the store could cross a quad-word page boundary or be unaligned. Masking of the address bits is done depending on the size of the data to minimize false dependency detection. If the load data crosses a quad-word (64-bit) boundary, it is assumed in a preferred embodiment to have a load dependency since comparators are not available to check the second address of the load against the two addresses of each store. When a collision is detected, the load operation must wait until after the colliding store operation has been sent to CCU 110. A pending store address means that the address of the store is not yet valid, so a load dependency must be assumed until the time the address is known.
[0068]FIG. 4 shows a schematic diagram of an address collision detection block 400 used by LSU 205. The address comparison logic compares two addresses after 0-4 of the least significant bits have been masked out. After masking, if the addresses match exactly then there is a collision between them. For each comparison, the largest operand size of the two operations is used to control the masking. Between 0 and 4 least significant bits are masked out of each address. Note that circuit 400 is duplicated four times—once for each address buffer 410-413 (FIG. 4 shows the address collision detection block for address buffer 310).
[0069] The first address 405, 406 for each load is compared against each other pair of addresses 407-418. The two compare results are ANDed with their valid bits 419-424, and then ORed together to produce an address match 430 a, 430 b, 430 c. Address match 430 is then ANDed with the instruction number compare 425-427 and the store bit 431-433 to produce the collision check 450 a, 450 b, 450 c. The instruction number compare 425-427 indicates the relative age between two instructions. For example, instruction compare 425 indicates the relative age between a first instruction in address buffer 310 and a second instruction in address buffer 311. If the second instruction is older then the first instruction then no collision exists. These three collision checks 450 are ORed together to yield an address collision signal 460 for the particular load being checked.
[0070] When detecting an address collision, the starting (first) address of each load is compared with the first and second address of each store. Since a load or store operation may be accessing anywhere from 1 to 10 bytes, some masking of the address is done to insure that a collision will be detected. This is done via signals 470-475. 0, 2, 3 or 4 of the least-significant-bits are masked out of both addresses before comparing them to each other. If the masked addresses match exactly (equal compare) then an address collision is possible. The number of bits to mask out (0, 2, 3, 4) depends on the operand size of the two instructions whose addresses are being compared, along with the two least significant bits of the first address. The two least significant bits of the first address must be used in order to limit the number of collisions which are detected incorrectly. The largest operand size is used with masking as follows:
[0071] Additionally, any time the load operation crosses a quad-word boundary, it is assumed to have an address collision. This is because only the first address of the load is compared to the store addresses and an address collision might not be detected.
[0072] By doubling the number of comparators used in hardware, this restriction could be removed. If the store address crosses a quad-word boundary then the collision would be detected.
[0073] The following examples show why masking is required. (All numbers below are in binary). Address2 of the load is not given since it is not used for collision checking.
[0075] If load address 1001 was compared with 1000 and 1011 without masking, no collision would be detected even though the store will actually write to bytes 1000, 1001, 1010 and 1011. If the two LSB's are masked out then the following addresses will result:
[0077] If three LSB's are masked out then the following addresses will result and the address collision will be detected:
[0078] If only two LSB's are masked out then the following addresses will result and the address collision will not be detected:
[0079] As discussed above, LSU 205 can select from a window of up to four load instructions and four store instructions requiring a cache request. These loads and stores contend with each other for CCU 110 and the selection between them is done as outlined below.
[0080] The store instruction must be performed in program order with respect to all other instructions, not just other load and stores. A store request is issued to CCU 110 when a signal comes from IEU 107 to retire the store instruction. This signal indicates that all previous instructions have finished and they did not involve an exception or mispredicted branch. The store instruction cannot be performed any earlier since a store irrevocably changes the state of the machine and it is essential to verify that an exception or branch did not occur. The store is given priority over a load for using data cache 119 since delaying the store would also delay the retirement of the bucket and the acceptance of the next decoded bucket from the instruction decode unit (not shown).
[0081] Most load instructions can be issued out-of-order provided that the load is not dependent on a previous store. An exception to this is loads with side effects such as reads from memory-mapped I/O. The preferred embodiment of the present invention uses a memory-mapped input/output (I/O) subsystem. Some I/O devices change state when accessed by a read; for example, some FIFO buffers sequence to the next data item which results in some device-status registers clearing themselves. In this type of system, load bypassing is a dangerous operation. A bypassed load may be issued incorrectly, because of a mispredicted branch or exception. The bypassed load cannot be allowed to modify the system state incorrectly. The problem is solved by configuring the load store unit to make these type of requests in order.
[0082] The load/store unit also provides a mechanism for notifying cache 110 whether or not the data involved in the cache request is cacheable or not. It also allows the processor to notify cache 110 that this data should be write-through meaning it is cacheable, but should also write through to the memory immediately. External read accesses that change system states are a subset of these non-cacheable accesses, but the problem above is solved by making in-order requests in conjunction with notifying cache 110 that this data is not cacheable. Thus, rather than avoiding load bypassing altogether, the processor can prevent the bypassing of noncacheable loads. This permits most load operations to take advantage of bypassing, without causing incorrect operation for the occasional noncacheable load. This is also necessary to insure that no exceptions occur before the memory is changed. If a load does not have a dependency on a store then "load bypassing of stores" will occur.
[0083] Each load thus has associated with it two bits: page_cache_disable and page_write_through. These can come either from VMU 115 or IEU 107.
[0084] Store data can come from one of two place. First, it can be issued directly to LSU 205 on the integer data buses during 64-bit integer stores. The second way is by snooping the results of the integer and floating point functional units. This is done to support the common "execute-then-store" sequences where the result of an execution is the store data for the instruction. This allows the results of CISC instructions such as "[R2]<[R2] OR R4" to be stored without being explicitly issued to LSU 205.
[0085] LSU 205 can only make one request to CCU 110 per cycle and priority is given to store operations. Store operations are sent to CCU 110 as soon as the write control notifies LSU 205 that this instruction is ready for retirement. Next priority is given to the oldest load operation with a valid address in the address buffers 310-313 which does not have an address collision or pending write. Relative age between the instruction is determined by buffer location and the value of the buffer pointer. Finally, priority is given to a new load just arriving from DAFU 230. In this last case, address collision and pending write will not be checked until after the request has been made, and if necessary, the load request will be canceled.
[0086] Occasionally, a cache miss will occur. For a store, CCU 110 handles this situation and the miss is completely transparent to LSU 205. For a load, LSU 205 is notified of the cache miss and a delay is observed before the data is returned. LSU 205 then signals the IEU 107 that the cache miss occurred so that instructions waiting for this data can be canceled.
[0087] If the desired data crosses a cache line boundary, two or three cache accesses must be made for the load operation. These requests are made consecutively, one each cycle. In a preferred embodiment, a cache line is 8 bytes wide and aligned at address ending with 000. Three cache requests are only required for 80-bit data accesses beginning at an address ending in 111. A load aligner 550 (described below with reference to FIG. 5) is provided to shift and latch this data as it returns from data cache 119.
[0088] Most load/store units zero-extend or sign-extend the data to fit the destination register. However, the preferred embodiment of the present invention preserves the initial value of the destination register and only changes a portion of it. This, of course, is relevant only for integer load data with a size of 8 or 16 bits. The initial contents of the register are sent to LSU 205 at the time of address calculation. The load data from data cache 119 is then merged with the initial data.
[0089]FIG. 5 shows a schematic diagram of LSU integer data path 210. LSU data path 210 is responsible for transferring load and/or store data to and from CCU 110 and IEU 107. Data enters LSU data path 210 during a load operation from data cache 119 via line 290 and during a store operation from IEU 107 via lines 275, 276, 277. Data line 275 and 276 provide 32 bit data to LSU data path 210 from functional units 260 and 262 via write bus 270, line 282 provides either an effective address or merge data. The effective address is provided to LSU data path 210 when the result of an instruction is an address itself, as opposed to the data located at that address location. Store data line 516 provides 64 bit data to LSU data path 210. Data is returned to either data cache 119 or IEU 107 via data lines 290 or 292, respectively.
[0090] Data buffers 520-526 are provided for holding load and/or store data during data transfer to or from data cache 119. There is a one-to-one correspondence between each data buffer 520-526 and address buffers 310-313 (and in turn with the four instruction buckets). For each address buffer 310-313, there are two corresponding data buffers in LSU data path 210: one for integer load and integer store data (8 bytes) 520-526 and one for floating point load and store data (10 bytes) 540-546. The present invention has a separate LSU data path for floating point operations. The operation of floating point data buffers 540-546 is the same as those described in connection with the integer data path. Since an instruction is either integer or floating point, the two units are do not need to be physically connected. Only the operation of integer data buffers 520-526 will be described in detail below.
[0091] Control lines 581 and 587 are provided to control the data flow through multiplexers 560 and 565, respectively. Control lines 582 through 586 are provided to control data flow to/from data buffers 520, 522, 524, and 526.
[0092] During a load operation, data enters LSU data path 210 from data cache 119 via line 290. The load data enters align block 550 which aligns the data (as described below) and transfers the aligned load data to multiplexers 530-536. The aligned load data is then latched into one of the data buffer 520-526 depending on which instruction requested the data. During a store operation, the store data enters LSU data path 210 from IEU 107 via data lines 275, 276, 277 and is subsequently latched into the appropriated data buffer 520-526.
[0093] Once either the load and/or store data has been latched into data buffers 520-526, it can be forwarded to either data cache 119 via line 290 or IEU via line 292. All four data buffers 520-526 provide data to multiplexers 560, 565 which in turn select the appropriate data to be transferred out of LSU data path 210.
[0094] Oftentimes, the results of an instruction which includes a store must be stored into main memory 260. Thus, after the instruction executes the result is directly written via data lines 275, 276 to LSU data path 210 (as opposed to first storing the results in register file 250). LSU data path 210 holds the data in the appropriate data buffer 520-526 until it receives a retirement signal for the instruction.
[0095] Periodically, a particular instruction does not intend to store over an entire destination register. In this case, "merge data" is provided to LSU data path 210 via data line 282. For example, if an instruction only wants to store 8 bits to the destination register, but the instruction intends to preserve the remaining 24 bits in the register, a merge operation is performed. Thus, data line 282 would supply the initial value (i.e., merge data) of the destination register to LSU data path 210. The merge data (i.e., contents of the destination register) is latched into the appropriate data buffer 520-526. Next, the new (load) data returns from the cache via line 290(a) and enters align block 550. Align block 550 aligns the data and provides it to the multiplexers 530-536. The load data is then latched into the same data buffer 520-526 which is holding the merge data. Once all the data is assembled it can be transferred to the proper memory location (i.e., data cache 119 or register file 250).
[0096] Conventional load store units typically require addresses to be aligned to certain boundaries. For example, a 32-bit data access must have an address ending in 000. However, the computer architecture of a preferred embodiment allows unaligned accesses of 8, 16, 32, 64, or 80 bit data. Having unaligned addresses has the following effects: (1) extra hardware is required for detecting load dependencies on stores; (2) the data may cross a page boundary requiring two address translations; and (3) multiple cache accesses may be required for one load.
[0097] The load data returned from CCU 110 is 8 bytes long and must be aligned and placed in the proper position in the data buffer 520-526. Sometimes two or three sets of data must be returned before the complete load is ready (e.g., when more than one cache access is required). In addition, these sets of data may even be returned out of order, so special handling is required.
[0098] Integer data alignment is handled by using eight 8-input multiplexers (8 bits wide) with each corresponding to one byte of the data request. An 8 bit select line is used to determine which of the 8 bytes of data loaded from CCU 110 should be latched into the appropriate data buffer 520-526. Additionally, data buffer 520-526 are byte enabled to control which bytes can be overwritten.
[0099]FIG. 6 depicts an example of an unaligned integer load with a cache line crossing. In the example, a four byte load was requested from address XXXXXXX5. However, this load request crosses over a cache line, and consequently, two load requests are required. After the first cache request returns the data, the data is transferred to load aligner 550. Load aligner 550 shifts the last three bytes all the way over to byte zero and then the last three bytes are latched into the appropriate data buffer 520-526. Note that the last byte of the data buffer is not stored over. Once the data from the second cache request returns, the first byte of the cache line is latched into the last byte of the data buffer, as shown. Also note that although the cache line returned in order in this example, it can be returned in either order.
[0100] Floating point data alignment works the same way as integer data alignment except that ten 8-input multiplexers are used.
[0101] LSU 205 does not support load forwarding. If a load is dependent on a store then that load must wait for the store data to be written to the cache before making the load request. However, there is nothing inherent about the design of the present invention that would discourage implementing a load forwarding mechanism. Those skilled in the art would readily be in a position to make the necessary hardware changes to implement load forwarding.
[0102] The preferred embodiment of LSU 205 supports a multi-processing environment. Each instruction can contain a lock or an unlock command in addition to a load and/or a store. These signals are sent to the cache which will lock the data and notify the memory and I/O subsystems to do the same. When lock or unlock commands are present in the instruction window, loads must be performed in order with respect to these instructions; i.e., a subsequent load can not be performed without first performing the load with the lock/unlock command.
[0103] Example of the Operation of LSU 205
[0104] Shown in TABLE A is a sample program that illustrates the operation of LSU 205. The program is written in Intel 486 notation. Three registers are used and they are labeled eax, ebx, and ecx. The data that is loaded and/or stored is assumed to be 32 bits in width. Brackets indicate an address location.
[0105] The first line of code moves data stored at the address in ecx to ebx; thus this instruction involves a load operation. The second instruction decreases the value in register ebx; there is neither a load nor a store associated with this instruction. The third instruction does a logical OR with the data stored at the address in eax with the data ebx and stores it in [eax]; this operation involves a load and a store. Finally, the fourth instruction moves 16 bits of data stored at the address in eax plus three to ebx; this instruction involves a load operation.
[0106] Before this code is executed, assume that the registers and memory contain the following values (all value are in hex):
[0107] Table C shows the results of executing the instructions shown in Table A.
[0108] Next, the execution of the instructions in TABLE A will be described in detail.
[0109] Referring to FIG. 7(a) through 7(h), a representative illustration of LSU 205 is shown. Each figure represents a single cycle (e.g., FIG. 7(a) represents cycle 1 and FIG. 7(b) represents cycle 2). All four address buffers 310-313 are shown, along with their respective load 701, store 702, and valid bits 717. Furthermore, there is a collision bit 710, a pending bit 715, as well as an indication of the size 705 of the data requested. The current memory contents of addresses 0100 to 0107 and 1200 to 1207 is shown at reference number 780. Block 730 indicates the current cache request. Block 740 shows the data that has just been returned (if any) from CCU 110. Block 760 indicates the address being returned from VMU 115 and block 770 indicates the address being returned from DAFU 230. The load and store bits are set in order, while the addresses can be provided to LSU 205 out-of-order. Block 750 shows how returned data is physically aligned.
[0110] Referring to FIG. 7(a), the first instruction is "mov ebx, [ecx]". Initially, the address stored in ecx must to transferred to LSU address path 220. The address stored in ecx, namely 1201, is transferred from DAFU 230 to temporary address buffers 305. However, the entire address is not needed. Only the first twelve bits and the least significant three bits are transferred to temporary buffers 305 because the upper 20 bits are transferred to VMU 115 from DAFU 230. The load bit in bucket 0 is set to one since the mov operation involves a load. The requested data is 32 bits (as indicated by 011 in block 705).
[0111] Since this is the first set of addresses in LSU 205, the address information is immediately forwarded to CCU 110 along with an identification (id), as shown in block 730. LSU 205 uses the identification to determine which instruction the returned data is associated with. The temporary registers 305 are used while LSU 205 waits for an address being translated by VMU 115 to be transferred to LSU 205.
[0112] The second instruction "dec ebx" has been placed into the address buffer queue. Since the dec operation involves neither a load nor a store, load bit 701 and store bit 702 associated with address buffer 311 are both set to zero. An address calculation is not required for this instruction since neither a load nor a store is required.
[0113] Turning now to FIG. 7(b), the first byte of the address stored in ecx has now been placed in register address1 and the last byte of the address has been placed in address2. Both, of course, in address buffer 310. Both valid bits have been set since both registers (address1 and address2) contain valid addresses. Note that it is possible for address1 and address2 to be latched into the address buffers 310-313 at different times. This happens when there is a page crossing which requires two translations from VMU 115.
[0114] The third instruction is "or [eax], ebx." Information (sent by IEU 107) regarding the third instruction has been entered into the appropriate blocks corresponding to address buffer 312. Since the OR instruction requires a load and a store operation, both bits have been appropriately set to one. The data requested is 32 bits long, as indicated in block 705. Moreover, the address for the load/store associated with the third instruction is provided by DAFU 230, as shown in block 770. A cache request is made for this data, as shown in block 730.
[0115] In addition, during cycle two the data requested for the first instruction has been retrieved from the cache and stored in the data register 520. However, the returned data shown in block 730 is unaligned data. CCU 120 returned the block of data beginning at address 1200, but the instruction requested 32 bits of data starting at 1201. Consequently, the returned data must be aligned as shown in block 750. The returned data is shifted over by two bits by setting LD_ALIGN to 00000010, and then the first 32 bits of data are selected by BYTE_SEL.
[0116] Referring now to FIG. 7(c), the LSU 205 is provided with the next address by DAFU 230, as shown in block 770. The addresses associated with the third instruction are latched into address buffer 312. Both valid bits 717 are set. Since the first instruction has completed its operation (i.e., the data was returned from CCU 110 and forwarded to IEU 107) the valid bits have now been reset. (The bucket number has been reset to 4 only for illustration purposes. In a preferred embodiment, a pointer keeps track of the relative age of the instructions.) The third instruction, requires the fetching of the address stored in eax. Once the address enters LSU 205 a cache request can be performed.
[0117] In addition, information concerning the fourth instruction, namely the instruction is a load and the data being requested is 16 bits in width (indicated by a 010), has arrived from IEU 107, as shown in the appropriate blocks associated with address buffer 313. However, a store (namely, the third instruction) which is older than the fourth instruction exists. LSU 205 utilizes a pointer to determine which address buffer contains the oldest instruction information. Since this store exists, the write pending bit 715 associated with address buffer 313 is set. Consequently, a cache request cannot be generated for the fourth instruction at this time.
[0118] CCU 110 returns data to LSU 205 for instruction three, as indicated in block 740. Since the requested data started at address 100 the returned data does not need to be aligned. Only the first 32 bits are selected by BYTE_SEL, and the data is latched into data buffer 526.
[0119] Referring to FIG. 7(d), the addresses associated with instruction four are latched into address buffer 313 and the corresponding valid bits have been set. Next, an address collision operation is performed. Address1 from instruction four is compared with address1 and address2 of instruction three, which results in a determination that an address collision exists. As such, the collision bit 710 associated with address buffer 313 is set. Because of the presence of a collision, a cache request cannot be generated during cycle 4. However, even though a cache request cannot be performed, merge data arrives from IEU 107 for instruction four, as shown in block. The merge data is the data from register ebx. Merge data is required since instruction four is only a 16 bit operation. The merge data is latched into data buffer 526.
[0120] Referring to FIG. 7(e), write A data (WRA_DATA) arrives from IEU 107. WRA_DATA represents the results of the OR operation from instruction three. This data is latched into data buffer 524. Also during cycle 5, the next bucket is retired, namely bucket 1, as shown in block 780. Specifically, the retire_next bit is set to one indicating that the next instruction can be retired and the retire_num bit is equal to one indicating that the instruction in bucket one should be retired. Note that the address collision still exists between instruction three and instruction four.
[0121] Referring to FIG. 7(f), the data in data buffer 524 has been ORed with the data in ebx to produce the value 87654321. During cycle 6, the third instruction is retired, as shown in block 785. The retirement of instruction three allows LSU 205 to reset the collision bit 710 associated with the fourth instruction. As shown in block 730, a cache request is made to store the value produced by the OR operation at memory location 00000100 (which is the address stored in register eax). As shown in block 780, the data has been stored to this data location.
[0122] Referring to FIG. 7(g), instruction four loads the data in memory location 0103 (i.e., the first 16 bits of register eax plus three). Consequently, a cache request is made for the load operation associated with instruction four, as shown in block 730.
[0123] Referring to FIG. 7(h), the requested (unaligned) load data returns from the cache, as shown in block 740. As shown in block 750, the data is then aligned by shifting the data over three bytes since the requested data started at address 0103 and not 0100. Since, only the first 16 bits are requested only the first two bytes are selected from the aligned data. The 16 bits are then latched into data buffer 526, which in turn gets transferred back to IEU 107 for storage in register ebx.
[0124] While the invention has been particularly shown and described with reference to preferred embodiments thereof, it will be understood by those skilled in the art that various changes in form and details may be made therein without departing from the spirit and scope of the invention.
Referenced by
Legal Events
Original Image


text:
Good Hearing Should Never Be Taken For Granted
Protecting your ears is something that many people really do not think about. Protecting your ears is a daily responsibility that should never be neglected. Damaging noises can affect our daily lives and may be detrimental to your ears, which could ultimately lead to hearing loss. The ability to hear clearly and concisely is very important, especially in your everyday interaction with others.

subset: commoncrawl


text:
Riley & Thor
Ever since Thor Sigurdson came to Randy Blue members have been going crazy for his innocent face and wicked cock. In this scene he was paired with the cock hungry, Riley Price. Riley immediately goes for Thor's cock as if he has something to prove. The chemistry seems to grow rapidly right before your eyes. In no time Thor rams a dildo into Riley's hungry hole. Riley takes every thrust with joy and anticipation knowing that soon it will be Thor's cock plunging deep inside him. When Riley finally did get that meaty cock inside him it was like a switch was turned on and Riley almost squealed with pleasure.
Website: CLICK HERE
Added: 10 Jan 11
Views: 35014
anal sex / fucking
ontherun 4 months ago
Yeah, I have to agree with librax3 no action, no cock, just teasing arn't you ...
librax3 4 months ago
Another piece of RipOff Bullshit from Randy Blue....If you think no nudity and noumshot is going to entice me to pay your outrageous amount for a membership, think again and try posting this pg-13 bs on You Tube


text:
We do our best to keep the DMV hours and days of operation up to date. These can change frequently, We suggest confirming with your local office before your visit.
Pagosa Springs Registration & Titling of Pagosa Springs, Colorado
Mailing Address:
P.O. Box 2589
Pagosa Springs, CO 81147
DMV Phone Number(970) 264-8350
Fax:(970) 264-8562
DMV Office Information
Services Provided at this DMV
- Registration
- Titling
- Plates
- Disabled Services:
- Disabled Parking
DMV Office Hours
Daily Hours:
- Monday
- Tuesday
- Wednesday
- Thursday
- Friday
- 8:00am -4:00pm
- 8:00am -4:00pm
- 8:00am -4:00pm
- 8:00am -4:00pm
- 8:00am -4:00pm
Please Note:
DMV Holidays
New Year's, Martin Luther King Day, Presidents' Day, Memorial Day, July Fourth, Labor Day, Veterans Day, Thanksgiving, the day following Thanksgiving, Christmas
DMV Payment Options
- - Cash
- - Credit Card
- - Check
- - Money Order
Local Pagosa Springs Auto Services
- Driver Services
- Drivers Ed and Schools
- Smog and Emissions
- Automotive Purchasing
- Insurance
- Lawyers and Legal
- Traffic Tickets
- Moving Services
- Car Registration and Titling
Local Driver Services in Pagosa Springs
Pagosa Springs Registration & Titling Report a Bug with this Map
DMV Locations near Pagosa Springs Registration & Titling
- Bayfield Registration & Titling 32.3 miles
- Silverton Department of Revenue 52.0 miles
- Creede Registration & Titling 40.4 miles
- Durango Registration & Titling 47.6 miles
- Durango Driver License Office 47.7 miles
DMV Offices in other cities
Driving Records
Quickly obtain your driver record to check for tickets, points and the status of your license.Check Your Driving Record ▶
DMV Practice Tests
Prepare to pass the written driver's license exam with online practice tests.Take a Practice Test ▶


text:
Suspect Zero [Widescreen]Format: DVD Release Date: 04/12/2005
Customers Also Bought
- Aaron Eckhart (Thomas Mackelway)
- Ben Kingsley (Benjamin O'Ryan)
- Carrie-Anne Moss (Fran Kulock)
- Harry J. Lennix (Rick Charleton)
- William Mapother (Bill Grieves)
- Kevin Chamberlin (Harold Speck)
- Frank Collison (Piper)
- Nicole DeHuff (Katie)
- Chloe Russell (Loretta)
- David House (Truth or Consequences Cop)
- Julian Reyes (Highway Patrolman)
- Keith Campbell (Raymond Starkey)
- Ellen Blake (Dolly)
- William R. Johnson (Mel)
- Jerry Gardner (Sheriff Harry Dylan)
- Daniel Patrick Moriarty (Bud Granger)
- Curtis Plagge (Jumbo)
- Donn Owens (FBI Agent)
- Brady Coleman (Dyson)
- Catherine Haun (Joan Speck)
- Lea Franklin (Mother)
- Angelina C. Torres (Neighbor Lady)
- David Ode (Bartender)
- Miguel Zapata (Charlie)
- Jane Goold (Kathleen)
- Boots Southerland (Vic)
- Benjamin Petry (Little Boy)
- Jenny Cleveland (Little Boy's Mom)
- Buddy Joe Hooker (Suspect Zero)
- Kent Kirkpatrick (Cora)
- Dorsey Ray (Project Director)
- Michael Chapman (Prosecutor #1)
- Marya Beauvais (Prosecutor #2)
- Letta E. Gorder (Reporter)
- Ed Dames (Icarus Trainer)
- Aaron Donahue (Remote Viewer)
- Kevin Skousen (Icarus Agent)
- Cecilia L. Webb (Gospel Singer #1)
Directed by E. Elias Merhige, Suspect Zero follows the disgraced FBI Agent Thomas Mackelway (Aaron Eckhart), who was transferred to a desolate area in Albuquerque, New Mexico as punishment for botching a procedure which ultimately led to the release of one of the most notorious criminals on the FBI's list. Mackelway is given an opportunity to redeem himself, however, when he is called in to investigate the strange murder of a traveling salesman. Mysteriously, the mark of a circle with a line through it is the only clue that the killer left behind. Before long, the prime suspect is identified as former agent Benjamin O'Ryan (Ben Kingsley), who is seemingly obsessed with hunting down serial killers and murdering them rather than turning them in to the proper authorities. Though Mackelway believes he knows the area where O'Ryan (Kingsley) is living, he has no idea what he looks like -- a problem that the rogue agent exploits with great success. Despite his brilliance, Mackelway finds himself caught in a psychological labyrinth of sorts, and is faced with an even greater quandary after learning that O'Ryan is looking for none other than Suspect Zero, a murderer of hundreds and the FBI's most wanted man. The supporting cast includes Carrie-Anne Moss and Harry J. Lennix. ~ Tracie Cooper, Rovi
Side #1 --1. All American Diner
2. Welcome to Minors
3. Ravine Crime Scene
4. Fran Kulok
5. Hope House
6. O'Ryan's Map
7. O'Ryan's Room
8. O'Ryan's Remote Views
9. You're Welcome, Tom
10. Suspect Zero Theory
11. Americana Montage/Church
12. Mark's Vision
13. Speck's Attic
14. Project Icarus
15. Wave Wall/Remote Viewing
16. Freezer Burn
17. Are You Afraid?
18. The Missing Piece
19. The Chase
20. Is This Justice?
- Format: DVD
- Release Date: April 12, 2005
- MPAA Rating: R
- Region: 1
- Studio: Paramount
- Length: 99 minutes
- Sound: Dolby Digital 5.1
- Format: Wide Screen Enhanced (16x9)
- Discs: 1
- Languages: English, French
- Subtitles: English, Spanish
- Product ID: 2507427
- Genre: Thriller


text:
A healthier you for the new year
popular .
Every year, we make a list of ways to start the New Year right. Staying healthy or becoming more fit is always part of that list. To help jumpstart this particular resolution, MediCard Philippines, one of the country's leading health maintenance organizations, shares some tips to help you start the year right:
1 Invest in your health. Do you know where you stand when it comes to health? Taking a good look at your lifestyle or physical appearance may not be enough. If you subscribe to an HMO, you might want to schedule a physical checkup soon. For those who do not have an HMO, it might be a great idea to avail of a health maintenance service similar to an HMO that covers consultations with a family physician when you are sick. An example of this is MediCard Philippines' Health Plus card which includes free consultations, oral prophylaxis and discounts on certain lab services for only P1,100. Shelling out a little more than a thousand per year for a service like Health Plus card may actually help prevent diseases and save you from huge hospitalization bills later.
2 Get into a proper diet. Like an engineering feat, our bodies require fuel to work. Just like any machine you need the right amount of fuel to make your body last long. A healthy diet is recommended by nutritionists. What comprises a healthy diet? Eating the right amount of fiber, carbs and other nutrients the body needs. Minimize both sugar and fats because most of the time, they can trigger health problems like hypertension and diabetes.
3 Getting the right amount of exercise. Exercise is important and is a big step in your commitment to being healthy. If you have not been exercising, start slow with a 30-minute morning jog or if you start your day at night, take a brisk walk regularly. This simple exercise is not meant to tire your body but to strengthen your heart and keep the blood pumping. You don't need to spend an hour or more to be active, just half an hour is enough according to most experts.
4 Get enough rest. Many studies have been made emphasizing the importance of rest. For adults, the ideal time for rest in a 24-hour period is 7 to 8 hours. This allows your body to renew itself by doing biological maintenance while the body is at rest. To start the habit of sleeping regularly, keep a sleep schedule. Using this method for a week or two should give you an idea how much sleep you actually need. You may want to keep out electronic gadgets out of your room as they distract you and your body's ability to be at rest.
5 Minimize health risks. What activities do you regularly indulge in that might cause health problems later? Smoking and excessive drinking are two of the common causes of death. If it is too difficult for you to quit cold turkey, you should at least lessen the amount of cigarette or alcohol that you consume. Additionally, the growing addiction to online entertainment is another cause for concern. Spending too much time in front of a computer to play video games or interact online may strain your eyes. This also includes excessive use of mobile devices as they increase the chance of straining neck muscles. Taking some time off by doing physical activities away from your electronic gadgets is a great way to lessen health risks.
6 Be on your toes for an emergency. Just like any sound investment, emergency coverage is essential because we never know what can happen. Setting aside an amount for health/medical emergencies is a sound plan. If you don't have an HMO card, you might want to check out a health plan you can subscribe to annually to cover emergency room expenses. An example of this is MediCard Philippines' RxER which provides emergency coverage at a reasonable price and covers you for one year.
Get Inquirer updates while on the go, add us on these apps:
Disclaimer: The comments uploaded on this site do not necessarily represent or reflect the views of management and owner of INQUIRER.net. We reserve the right to exclude comments that we deem to be inconsistent with our editorial standards.
To subscribe to the Philippine Daily Inquirer newspaper in the Philippines, call +63 2 896-6000 for Metro Manila and Metro Cebu or email your subscription request here.
Factual errors? Contact the Philippine Daily Inquirer's day desk. Believe this article violates journalistic ethics? Contact the Inquirer's Reader's Advocate. Or write The Readers' Advocate:
c/o Philippine Daily Inquirer Chino Roces Avenue corner Yague and Mascardo Streets, Makati City,Metro Manila, Philippines Or fax nos. +63 2 8974793 to 94


text:
Cheap FAI to Taloyoak flights
Popular Flights from Fairbanks, Alaska
Top Fairbanks Flights to US Destinations
Top Fairbanks International Destinations
Popular Flights from Taloyoak, Nunavut
Top Taloyoak Flights to US Destinations
Top Taloyoak International Destinations
FAI to YYH Route Map
Fairbanks to Taloyoak Flights, Stats and Airplanes
Route information for flights from Fairbanks Intl. to Taloyoak NU.
1,438.39 miles
FAI - Fairbanks Intl. Airlines
Browse the most popular airlines servicing the Fairbanks (FAI) airport. Visit their flights pages to learn more about the most popular routes these carriers fly.


text:
Juventus defender Marco Motta has joined Bologna on a season-long loan.
The 26-year-old only moved to Juve in 2010, initially on loan, but fell out of favour under new coach Antonio Conte and spent the second half of the season with Catania.
Bologna can sign Motta in co-ownership next summer.
Football Is Life
Share The Love
Stay in touch with Tribal news, updates and special offers direct to your inbox


text:
Smallest Diesel Generator Carrying Sailboat
View Single Post
Join Date: Apr 2011
Posts: 50
Thanks: 0
Thanked 0 Times in 0 Posts
Rep Power:
Re: Smallest Diesel Generator Carrying Sailboat
I currently have a 4.5k on my 41 Gulfstar, but I am considering downsizing. I live in the northern Gulf Coast area and summers are hot here, and winters are cold for overnight stays, but we do get to have year round sailing. I thought I would be going cruising at some point so I bought a bigger boat, but now the cruising plans are not working out and I am trying to keep the 'bigger' boat feel for my wife. She likes the boat and does try to enjoying it, but to make her stay on a smaller boat with out the conveniences I have provided thus far would only make things worse for her. So, the compromise, a smaller boat with the same amenities, and I can single-hand more on my own. The bigger boat does require us both to operate and I think a smaller one would make outings more fun for her if she didn't have to worry about doing things - except being pretty.
That's the idea.
View Public Profile
Send a private message to pyewackette
Find all posts by pyewackette


text:
Mon-Fri: 7am-1am EST / Sat-Sun: 7am-11pm EST
ApplianceFrigidaire Refrigerator
Level of DifficultyEasy
Time to do repair30 - 60 mins
Age of Appliance5 - 10 years
Wrench setScrew driversSocket set
3 out of 8 people found this instruction helpful
Pulled out Refridgerator, unpluged the same. Removed the bottom pannel and pulled out the wiring harness. Followed instructions provided and cut the 3 wires wires to the part that needed replacing.Then I stripped the old wiring at the end and connected the replacement diode ( new part ) with the wires from the replacement part . Then I used electrical tape to cover the connection. Wires are collor coded and easy to replace. Plugged the Refridgerator back into the power outlet and tested the Refridgerator. Drinking waterdispenser worked fine and water for the ice maker only dispensed to fill the icemaker. Replaced the back bottom cover.Problem solved. Cost of the part less than$ 10.00. Great help from the Repair help in the diagnostic of the problem and selecting the spare part.
Help other customers find the most helpful instructions.
Were these instructions helpful?
Part Number: PS832444
All brand logos are trademarks of their respective owners.
The PartSelect logo is a Registered Trademark of Atlantic Laundry Centres, Ltd.
Copyright © 1999-2015 , Eldis Group Partnership. All rights reserved.


text:
Dry eyes can leave a gritty, painful sensation. Homoeopathy has some good remedies to counter the problem
Your eyes are your windows to the world, they help you see and discern colours. To envision the world in all its hues, the eyes are wonderful organs conveying the colours to the brain. To ensure that your eyes continue to function well there is a lining of moisture over the conjunctiva which affords comfort. Tears are not just shed due to emotion but they also keep the eyes moist.
Tears are nothing but a combination of water for moisture, oils for lubrication, mucous for even spreading so that antibodies and special proteins are evenly spread along the eye to improve resistance against infection. These tears are secreted by the lachrymal glands in the eyes. A person develops dry eyes when these tears seem to be secreted less than the required amount.
With insufficient lubrication along the lining of the eyes, a person is likely to develop pain and a sensitivity to light. A sand like or gritty sensation in the eyes is the usual symptom, as if a foreign body is making life difficult for the individual, for dry eyes. The resultant itching sensation causes the person to rub their eyes leading to redness. However, this constant rubbing causes the vision to blur.
If the body pushes the lachrymal glands to produce more tears it is likely that these tears are devoid of the mucous and the moisturising capacity. Since the composition of these tears is inadequate there is not enough lubrication in the eyes. Although these tears wash away the debris in the eyes, they are not good enough to coat the eye surface properly.
Dryness of the eyes can be caused by ageing and especially in women during menopause. Certain drugs like birth control pills and anti-histamines are known to precipitate the issue. There are certain auto immune diseases like rheumatoid arthritis, Sjogren's disease etc. wherein the defense mechanism tends to affect vital organs and as a result the lachrymal glands too might be affected, causing dryness of the eyes. An abnormality in the structure of the eyelids can cause an undue pressure and the result in dryness due to friction.
There may be several over the counter teardrops that can help improve moisture in the eyes.
Homeopathic medicine has good remedies that help to gradually stimulate the tear producing glands to improve production of tears. Ars alb is a good remedy that will help counter the problem in patients with auto immune problems, while Bryonia and Alumina will coax the gland to produce more tears. In cases in whom there is appearance of enough tears but not good quality, Natrum mur is a good remedy. To see that the need for artificial teardrops is reduced gradually these remedies are very useful.
Dr. Venugopal Gouri
My child of five years snores all night and has difficulty waking up in the morning. He also tends to have recurrent colds and coughs. – abc
Adenoids are a couple of glands in the airway passage which obstruct the flow and cause snoring. Homeopathic medicine has good remedies like Baryta iod, Thuja, Calc carb, Phos. etc. which will help in seeing that the adenoids shrink and other interventions are ruled out.


text:
Electroretinography Center - Grand Island, NE
Grand Island Eye Doctor Doctors for Electroretinography
Type of Physician: Eye Doctor
What is a Eye Doctor?
A certification by the Board of Ophthalmology; practitioners provide comprehensive eye and vision care. They are trained to diagnose, monitor and medically or surgically treat all eyelid and orbital problems affecting the eye and visual pathways, and to diagnose, monitor and treat all eye and visual disorders. They often prescribe vision services (glasses and contact lenses) as well as serve as a consultant to physicians and other professionals.
Specialty: Ophthalmology
Common Name: Eye Doctor
Ophthalmologist Doctors in Grand Island *
Harkins Eye Clinic
Proffitt Eye Center
Gleason-Janky Eye Physicians
Gleason-Janky Eye Physicians
John C Welch MD
Hastings Laser & Eye Sgy Ctr
Gerald F Geiger Md
Kearney Eye Institute
Kearney Eye Institute
Kearney Eye Institute
Lind Eye Care
Eye Surgical Associates
Eye Physicians PC
Eye Care Associates
Willcockson Eye Associates PC
Willcockson Eye Associates PC
Willcockson Eye Associates PC
Crete Area Medical Ctr Outptnt
Feidler Eye Clinic
Feidler Eye Clinic
Grand Island, Nebraska
What is electroretinography?
Electroretinography (ERG) is an eye test used to detect abnormal function of the retina (the light-detecting portion of the eye). Specifically, in this test, the light-sensitive cells of the eye, the rods...
Other Related Electroretinography Articles
Emergency Contact for Grand Island
Nearby Grand Island Hospitals *
Saint Francis Medical Center
VA Medical Center
Memorial Hospital
Howard County Medical Center
Litzenberg Memorial County Hosp
Mary Lanning Memorial Hospital
Hasting Regional Center
Henderson Healthcare Services
*Provider Directory Terms of Use:
The WebMD 'Provider Directory' is provided by WebMD for use by the general public as a quick reference of information about Providers. The Provider Directory is not intended as a tool for verifying the credentials, qualifications, or abilities of any Provider contained therein. Inclusion in the Provider Directory does not imply recommendation or endorsement nor does omission in the Provider Directory imply WebMD disapproval.


text:
- News
- Premium
- Lifestyle
- Tech
- Communities
- Video
- Multimedia
- More
Charlie Chaplin's bowler and cane to hit auction block
Published on Nov 14, 2012 6:25 AM
LOS ANGELES (REUTERS) - One of Charlie Chaplin's iconic bowler hats and canes, the staple of Hollywood silent-era comedy, will go under the hammer in Los Angeles this weekend, auction house Bonhams said on Tuesday.
Chaplin's hat and cane - synonymous with his trademark Little Tramp character in films such as City Lights and Modern Times - are expected to fetch between US$40,000 and US$60,000 (S$48,910 and S$73,373) in the Nov 18 auction.
It is unknown how many of Chaplin's bowlers and canes still exist, said Lucy Carr, a memorabilia specialist at Bonhams. The ones up for auction come from a private collection but have a direct link to Chaplin, Carr said.
The waddling and bumbling Little Tramp character propelled Chaplin to global fame. The character, which Hollywood legend says was created by accident on a rainy day at Keystone Studio, first appeared in 1914's Kid Auto Races at Venice and lastly in 1936's Modern Times.
To continue reading, log in if you are a subscriber
Enjoy 2 weeks of unlimited digital access to The Straits Times. Get your free access now!


text:
Since I have my teeth cleaned, the dentist showed me how to brush my teeth correctly. While she was lecturing me ( politely of course) I was laughing secretly because Anevay knew how to brush properly because she always insist on the circular motion. The dentist told me that I brush my teeth either by doing some circles around it or the up and down thing. Never to do the sidewards things which I have grown up to. She also told me to give proper attention to my molars.
So here are the things I learn from her :


text:
5480 Grand Pacific Drive • Carlsbad, California 92008 • United States • Map • Contact Us • Phone: (1)(760) 827-2400 • Reservations: (866) 716-8134 • Visit Our Site: sheratoncarlsbad.com
Sheraton Carlsbad Resort & Spa is a refreshing retreat in a charming coastal community situated thirty minutes north of the San Diego Airport. Discover beautiful Spanish Mediterranean architecture, rolling lawns, flowering shrubs, and nearby pristine beaches. Take advantage of our private hotel entrance to LEGOLAND® California Resort, exclusive to Sheraton Carlsbad resort guests. Explore our deals at Carlsbad resorts below and enjoy exclusive savings.
It's time to start getting more from your vacation. Special perks for Starwood Preferred Guest® members:
Book online, or call 877-782-0150 and ask for rate plan SPG35B. Blackout dates apply.
Not an SPG® Member? Join today and discover just how rewarding membership can be.
*35% discount is taken off of RACK rates. Best available rate will be given if lower than 35% off RACK
MasterCard® holders can make the most of every weekend at Sheraton. Escape to Sheraton Carlsbad Resort & Spa and receive 20% off when you book two weekend nights using your MasterCard®.
Book online, or call 800-325-3535 and ask for rate plan Z2R to reserve your weekend stay.
Bring the great outdoors indoors during your next stay. All items are keepsakes for you to continue your adventures at home. Your package includes:
Please note: Additional items can be purchased individually.
Book online or call 866-716-8134 and mention rate plan LGPKG1.
Stay with us and take advantage of our private entrance to LEGOLAND® California Resort with our package that includes:
Book online or call 866-716-8134 and mention rate plan LOPKG1.
Traveling with kids just got easier. Enjoy the following family-friendly extras:
Book online and call 866-716-8147 and ask for promo code LFR.
Want to do it all? With this exclusive package you can mix and match your daily activities - with each day's itinerary yielding a new adventure. This special offer includes:
PLUS Daily American Breakfast at TWENTY/20 for up to 2 people
Book online or call 866-716-8134 and mention rate plan LVPKG1.
The San Diego Zoo Safari Park is a full-day adventure for the whole family. Book and receive:
Book online or call 866-716-8134 and mention rate plan LWPKG1.
Tee off on North San Diego's hidden gem: The onsite Crossings at Carlsbad Golf Course. Book now and receive:
Book online or call 866-716-8134 and mention rate plan LCPKG1.


text:
Average Indigo Skinny Five Pocket Jeans
Item# AS-000361_P1969AX
$32.50 $29.50 $22.12
Look chic in these dark denim pants. Skinny silhouette and 5-pocket design flatter your curves while the looped waist band and button zip fly closure make for the perfect fit. Imported.
- Machine wash cold, hang dry. Cool iron if needed. Do not bleach. 70% Cotton, 28% Polyester, 2% Spandex.
- Front button and zipper closure. 5-pocket jeans.
- Plus size 18 jeans have 32" inseam.
Special Offer
Enjoy 25% Off! *xoxo Ashley*Details
Full price styles now 25% off. Cannot be combined with other promotions.


text:
Old School Sundays
1920's Photos Of Spanish Village Near Espanola Way On Miami Beach
Sunday October 5, 2014 | 2:32 pm
1926 photo of automobiles lining the road of the Spanish Village on Miami Beach, looking west from Washington Avenue down Espanola Way. Below you can see threemore shots. From... Read More


text:
The 49-year-old coach has made it clear that the Argentina international is not available, regardless of any offers from interested teams.Real Madrid coach Jose Mourinho has insisted that Gonzalo Higuain will not be leaving the Santiago Bernabeu in the summer transfer window.
The Argentina international has continually been linked with a move away from the Liga champion, and Paris Saint-Germain star Javier Pastore revealed earlier this weekend that Higuain has been in touch with him over a potential move.
Nevertheless, Mourinho has stressed that the 24-year-old is not for sale at any price.
"Higuain is staying here. He will stay at Madrid because I don't want him to go. He has an excellent contract here that runs for many more years," Mourinho stated to ABC. "And Madrid have no intention to sell either. Even if clubs offer 40, 50 or 60 million euros, we will not sell him. My two strikers for next season will be [Karim] Benzema and Higuain."
Higuain has netted 22 goals in 34 Primera Division appearances this season.
Follow GOAL.COM USA on


text:
Captures the unique essence of a dynamic generation through his music, persona, and style. His lyricism acts as a breath of fresh air amongst the realms of mainstream hip-hop
DyMe-A-DuZin is the epitome of a rising star. Since emerging onto the music scene, the 21-year-old rap phenom has garnered the attention of hip-hop aficionados and music execs alike. The Brooklyn emcee wrote his first song at the age of 11, produced his first music video at the age of 14 and landed a major recording contract with Warner Bros Records at the age of 19 and is currently signed with Atlantic Records.
DyMez captures the unique essence of a dynamic generation through his music, persona, and style. His lyricism acts as a breath of fresh air among the realms of mainstream hip-hop and though inspired by pioneers and influencers of rap, DyMez has succeeded in constructing a delivery that is distinctive to him alone.
This distinction has paved the way for this budding artist to work with hip-hop heavyweights, and most notably producers.
Dyme-A-Duzin is captivating live performer and has had the opportunity to open for the likes of Theophilus London, Erykah Badu, Talib Kweli and The Roots.
DyMez has graced stages locally and internationally with performances at venues such as SOBs, The Knitting Factory, Highline Ballroom, House of Blues, Club Nokia, The Roxy, The Fillmore, and the fabulous Club Koko in London; Dyme's has performed in many music festivals and events, such as Howard Homecoming, Afropunk and Brooklyn Hip Hop Festival.
DyMez strives to build his following and has gained steady traction on Twitter, Facebook and YouTube.
The highly anticipated A Portrait Of Donnovan mixtape, DyMez first project with Warner Bros, features production by Plain Pat, Kaslo, Emile, Harry Fraud and Omen, and is a masterpiece to be uncovered. As the title presumes, the mixtape it draws his listeners closer painting a clear picture of the skills, artistry, and unique perspective that DyMez has to offer to hip-hops world stage.
In preparation for the release, DyMez released videos for Swank Sinatra featuring Joey Bada$$, CJ Fly, and the late Capital Steez, as well as New Brooklyn, which premiered on Jay-Zs Life+ Times site, and instantly hit the airwaves of New Yorks Hot 97 Peter Rosenbergs show, major blogs, and media outlets. DyMez rounds off the pre-release offerings with the introspective Memories, which features production by Harry Fraud.
Dyme-A-Duzin's Next Project with Atlantic Records entitled Hip Hope is scheduled for release March 2014.
"A Portraint of Donnovan"
The Orientation
Shut up & Listen
New Brooklyn
New Brooklyn Remix
This is my world
Baggin Best Friend
Swank Sinatra
Flash Me
Set List
New Brooklyn
This is My world
Best Friend
I Like
Getting Money
Who You
Fathers Day
Swank Sinatre