[go: up one dir, main page]

US10514926B2 - Method and apparatus to allow early dependency resolution and data forwarding in a microprocessor - Google Patents

Method and apparatus to allow early dependency resolution and data forwarding in a microprocessor Download PDF

Info

Publication number
US10514926B2
US10514926B2 US14/211,476 US201414211476A US10514926B2 US 10514926 B2 US10514926 B2 US 10514926B2 US 201414211476 A US201414211476 A US 201414211476A US 10514926 B2 US10514926 B2 US 10514926B2
Authority
US
United States
Prior art keywords
guest
branch target
instruction
branch
guest branch
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active, expires
Application number
US14/211,476
Other versions
US20140281410A1 (en
Inventor
Mohammad A. Abdallah
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Priority to US14/211,476 priority Critical patent/US10514926B2/en
Assigned to SOFT MACHINES, INC. reassignment SOFT MACHINES, INC. ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: ABDALLAH, MOHAMMAD A.
Publication of US20140281410A1 publication Critical patent/US20140281410A1/en
Assigned to INTEL CORPORATION reassignment INTEL CORPORATION ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: SOFT MACHINES, INC.
Priority to US16/671,109 priority patent/US11294680B2/en
Application granted granted Critical
Publication of US10514926B2 publication Critical patent/US10514926B2/en
Active legal-status Critical Current
Adjusted expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines

Definitions

  • Embodiments according to the present invention generally relate to microprocessor architecture and more particularly to the architecture for out-of-order microprocessors.
  • OOO Out-Of-Order
  • the instructions executing out of order need to preserve their data dependence constraints. Because instructions may finish in an arbitrary order, the architectural register file cannot be modified by the instructions as they finish because it would make it difficult to restore their values accurately in the event of an exception or an interrupt.
  • register renaming is commonly used with the temporary register storage to allow the OOO processor to resolve false dependencies between instructions. Hence, every instruction that enters the pipeline is provided a temporary register where it can save its result. The temporary registers are eventually written into the architectural register file in program order. Thus, even though instructions are being executed out of order, the contents of the architectural register files change as though they were being executed in program order.
  • the architectural register file is typically maintained in the back-end of the OOO processor.
  • WAW write-after-write
  • WAR write-after-read
  • registers are provided at the front-end of the machine, e.g., towards the fetch stage that speculatively hold copies of the results of state producing instructions and make them available to instructions dependent on the state producing instruction without needing to wait for the state producing instructions to be committed to a quiescent state. This allows data to be speculatively made available at the early stage of the pipeline, e.g., at the fetch stage to the other instructions and prevents problems associated with serialization.
  • branch targets that are required to allow guest branch instructions (being executed in native space) to compute their targets are stored speculatively in a guest branch target register at the front-end of the machine.
  • guest branch instructions write to the guest-target to this register if they are predicted to be taken.
  • Subsequent instructions that require the guest-target to calculate either their own target (in the case of a branch instruction) or to use it as an operand can simply access it from the guest branch target register at the front-end of the machine instead of needing to wait for the earlier branch to execute and commit its values at the back-end of the machine.
  • embodiments of the present invention allow for speculative maintenance of structures aiding in resolving data dependencies in early stages of a microprocessor. This is a significant advantage over conventional OOO processors wherein similar data forwarding cases are handled in the execution unit, which resides in the back-end of the machine.
  • a microprocessor implemented method for performing early dependency resolution and data forwarding for instructions in a native space of an emulated architecture referencing a guest address comprises mapping a plurality of instructions in a guest address space into a corresponding plurality of instructions in a native address space.
  • a processor unit configured for performing early dependency resolution and data forwarding for instructions in a native space of an emulated architecture referencing a guest address.
  • the method comprises mapping a plurality of instructions in a guest address space into a corresponding plurality of instructions in a native address space.
  • an apparatus configured to perform early dependency resolution and data forwarding for instructions in a native space of an emulated architecture referencing a guest address.
  • the apparatus comprises a memory and a processor communicatively coupled to the memory, wherein the processor is configured to process instructions out of order, and further wherein the processor is configured to perform a method.
  • the method comprises mapping a plurality of instructions in a guest address space into a corresponding plurality of instructions in a native address space.
  • FIG. 1 is an exemplary computer system in accordance with embodiments of the present invention.
  • FIG. 2 is an exemplary diagram of pipe stages of a pipeline for an out of order microprocessor on which embodiments of the present invention can be implemented in accordance with one embodiment of the present invention.
  • FIG. 3 illustrates an example of maintaining data for a general purpose register (GPR) speculatively in the front-end of the pipeline in accordance with an embodiment of the present invention.
  • GPR general purpose register
  • FIG. 4 illustrates the manner in which far branches are processed in an emulated architecture by maintaining registers at the front-end of the pipeline in accordance with one embodiment of the present invention.
  • FIG. 5 illustrates the manner in which the pipelined guest branch target register is updated using a prior branch target in accordance with one embodiment of the present invention.
  • FIG. 6 illustrates the manner in which each instruction fetched is tagged with information about the last branch instruction that updated the guest branch target register in accordance with one embodiment of the present invention.
  • FIG. 7 depicts a flowchart 700 for an exemplary computer controlled process for performing early dependency resolution and data forwarding for instructions in the native space of an emulated architecture referencing a guest address in accordance with embodiments of the present invention.
  • Embodiments described herein may be discussed in the general context of computer-executable instructions residing on some form of computer-readable storage medium, such as program modules, executed by one or more computers or other devices.
  • computer-readable storage media may comprise non-transitory computer-readable storage media and communication media; non-transitory computer-readable media include all computer-readable media except for a transitory, propagating signal.
  • program modules include routines, programs, objects, components, data structures, etc., that perform particular tasks or implement particular abstract data types. The functionality of the program modules may be combined or distributed as desired in various embodiments.
  • Computer storage media includes volatile and nonvolatile, removable and non-removable media implemented in any method or technology for storage of information such as computer-readable instructions, data structures, program modules or other data.
  • Computer storage media includes, but is not limited to, random access memory (RAM), read only memory (ROM), electrically erasable programmable ROM (EEPROM), flash memory or other memory technology, compact disk ROM (CD-ROM), digital versatile disks (DVDs) or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium that can be used to store the desired information and that can accessed to retrieve that information.
  • Communication media can embody computer-executable instructions, data structures, and program modules, and includes any information delivery media.
  • communication media includes wired media such as a wired network or direct-wired connection, and wireless media such as acoustic, radio frequency (RF), infrared, and other wireless media. Combinations of any of the above can also be included within the scope of computer-readable media.
  • FIG. 1 is a block diagram of an example of a computing system 110 capable of being integrated with a processor 114 of an embodiment of the present disclosure.
  • Computing system 110 broadly represents any single or multi-processor computing device or system capable of executing computer-readable instructions. Examples of computing system 110 include, without limitation, workstations, laptops, client-side terminals, servers, distributed computing systems, handheld devices, or any other computing system or device. In its most basic configuration, computing system 110 may include at least one processor 114 of an embodiment of the present invention and a system memory 116 .
  • Processor 114 incorporates embodiments of the present invention and generally represents any type or form of processing unit capable of processing data or interpreting and executing instructions.
  • processor 114 may receive instructions from a software application or module. These instructions may cause processor 114 to perform the functions of one or more of the example embodiments described and/or illustrated herein.
  • processor 114 may be an out of order microprocessor.
  • processor 114 may be a superscalar processor.
  • processor 114 may comprise multiple processors operating in parallel.
  • System memory 116 generally represents any type or form of volatile or non-volatile storage device or medium capable of storing data and/or other computer-readable instructions. Examples of system memory 116 include, without limitation, RAM, ROM, flash memory, or any other suitable memory device. Although not required, in certain embodiments computing system 110 may include both a volatile memory unit (such as, for example, system memory 116 ) and a non-volatile storage device (such as, for example, primary storage device 132 ).
  • volatile memory unit such as, for example, system memory 116
  • non-volatile storage device such as, for example, primary storage device 132 .
  • Computing system 110 may also include one or more components or elements in addition to processor 114 and system memory 116 .
  • computing system 110 includes a memory controller 118 , an input/output (I/O) controller 120 , and a communication interface 122 , each of which may be interconnected via a communication infrastructure 112 .
  • Communication infrastructure 112 generally represents any type or form of infrastructure capable of facilitating communication between one or more components of a computing device. Examples of communication infrastructure 112 include, without limitation, a communication bus (such as an Industry Standard Architecture (ISA), Peripheral Component Interconnect (PCI), PCI Express (PCIe), or similar bus) and a network.
  • ISA Industry Standard Architecture
  • PCI Peripheral Component Interconnect
  • PCIe PCI Express
  • Memory controller 118 generally represents any type or form of device capable of handling memory or data or controlling communication between one or more components of computing system 110 .
  • memory controller 118 may control communication between processor 114 , system memory 116 , and I/O controller 120 via communication infrastructure 112 .
  • I/O controller 120 generally represents any type or form of module capable of coordinating and/or controlling the input and output functions of a computing device.
  • I/O controller 120 may control or facilitate transfer of data between one or more elements of computing system 110 , such as processor 114 , system memory 116 , communication interface 122 , display adapter 126 , input interface 130 , and storage interface 134 .
  • Communication interface 122 broadly represents any type or form of communication device or adapter capable of facilitating communication between example computing system 110 and one or more additional devices.
  • communication interface 122 may facilitate communication between computing system 110 and a private or public network including additional computing systems.
  • Examples of communication interface 122 include, without limitation, a wired network interface (such as a network interface card), a wireless network interface (such as a wireless network interface card), a modem, and any other suitable interface.
  • communication interface 122 provides a direct connection to a remote server via a direct link to a network, such as the Internet.
  • Communication interface 122 may also indirectly provide such a connection through any other suitable connection.
  • Communication interface 122 may also represent a host adapter configured to facilitate communication between computing system 110 and one or more additional network or storage devices via an external bus or communications channel.
  • host adapters include, without limitation, Small Computer System Interface (SCSI) host adapters, Universal Serial Bus (USB) host adapters, IEEE (Institute of Electrical and Electronics Engineers) 1394 host adapters, Serial Advanced Technology Attachment (SATA) and External SATA (eSATA) host adapters, Advanced Technology Attachment (ATA) and Parallel ATA (PATA) host adapters, Fibre Channel interface adapters, Ethernet adapters, or the like.
  • Communication interface 122 may also allow computing system 110 to engage in distributed or remote computing. For example, communication interface 122 may receive instructions from a remote device or send instructions to a remote device for execution.
  • computing system 110 may also include at least one display device 124 coupled to communication infrastructure 112 via a display adapter 126 .
  • Display device 124 generally represents any type or form of device capable of visually displaying information forwarded by display adapter 126 .
  • display adapter 126 generally represents any type or form of device configured to forward graphics, text, and other data for display on display device 124 .
  • computing system 110 may also include at least one input device 128 coupled to communication infrastructure 112 via an input interface 130 .
  • Input device 128 generally represents any type or form of input device capable of providing input, either computer- or human-generated, to computing system 110 .
  • Examples of input device 128 include, without limitation, a keyboard, a pointing device, a speech recognition device, or any other input device.
  • computing system 110 may also include a primary storage device 132 and a backup storage device 133 coupled to communication infrastructure 112 via a storage interface 134 .
  • Storage devices 132 and 133 generally represent any type or form of storage device or medium capable of storing data and/or other computer-readable instructions.
  • storage devices 132 and 133 may be a magnetic disk drive (e.g., a so-called hard drive), a floppy disk drive, a magnetic tape drive, an optical disk drive, a flash drive, or the like.
  • Storage interface 134 generally represents any type or form of interface or device for transferring data between storage devices 132 and 133 and other components of computing system 110 .
  • databases 140 may be stored in primary storage device 132 .
  • Databases 140 may represent portions of a single database or computing device or it may represent multiple databases or computing devices.
  • databases 140 may represent (be stored on) a portion of computing system 110 .
  • databases 140 may represent (be stored on) one or more physically separate devices capable of being accessed by a computing device, such as computing system 110 .
  • storage devices 132 and 133 may be configured to read from and/or write to a removable storage unit configured to store computer software, data, or other computer-readable information.
  • suitable removable storage units include, without limitation, a floppy disk, a magnetic tape, an optical disk, a flash memory device, or the like.
  • Storage devices 132 and 133 may also include other similar structures or devices for allowing computer software, data, or other computer-readable instructions to be loaded into computing system 110 .
  • storage devices 132 and 133 may be configured to read and write software, data, or other computer-readable information.
  • Storage devices 132 and 133 may also be a part of computing system 110 or may be separate devices accessed through other interface systems.
  • computing system 110 may be connected to many other devices or subsystems. Conversely, all of the components and devices illustrated in FIG. 1 need not be present to practice the embodiments described herein. The devices and subsystems referenced above may also be interconnected in different ways from that shown in FIG. 1 . Computing system 110 may also employ any number of software, firmware, and/or hardware configurations. For example, the example embodiments disclosed herein may be encoded as a computer program (also referred to as computer software, software applications, computer-readable instructions, or computer control logic) on a computer-readable medium.
  • a computer program also referred to as computer software, software applications, computer-readable instructions, or computer control logic
  • the computer-readable medium containing the computer program may be loaded into computing system 110 . All or a portion of the computer program stored on the computer-readable medium may then be stored in system memory 116 and/or various portions of storage devices 132 and 133 .
  • a computer program loaded into computing system 110 may cause processor 114 to perform and/or be a means for performing the functions of the example embodiments described and/or illustrated herein. Additionally or alternatively, the example embodiments described and/or illustrated herein may be implemented in firmware and/or hardware.
  • the present invention provides a method and apparatus for a more efficient and flexible OOO processor architecture that is configured to mitigate the performance limiting issues associated with execution of state producing instructions by exercising early data forwarding.
  • a branch instruction is an example of a state producing instruction.
  • both guest and native states exist.
  • the guest architecture is emulated on top of the native machine.
  • the address space used to define the instruction offset in the guest space is dissociated from the native address space.
  • a guest branch instruction when executed in the native space does not have access to the corresponding Guest Program Counter (GPC) value in order to compute its target.
  • the guest branch instruction therefore, may require a branch target value from a prior guest branch instruction to calculate its own target.
  • GPC Guest Program Counter
  • Embodiments of the present invention allow the data generated by the guest branch instructions (e.g., the branch targets) to be made speculatively available early enough to the fetch machine by implementing certain registers in the front-end of the pipeline, e.g., registers to calculate the targets of the branch instructions.
  • the guest branch instructions e.g., the branch targets
  • FIG. 2 is a block diagram of pipe stages an exemplary pipeline for an OOO microprocessor in accordance with embodiments of the present invention.
  • Instructions are fetched at the fetch stage 202 and placed in the instruction fetch queue (IFQ) (not shown) within fetch stage 202 .
  • the instructions are generally the original assembly instructions found in the executable program. These instructions reference the architectural registers which are stored in register file 210 . If the first fetched instruction was to be interrupted or raise an exception, the architectural register file 210 stores the results of all instructions until that point. Stated differently, the architectural register file stores the state that needs to be saved and restored in order to return back to the program break point during debugging or otherwise.
  • the instructions execute out-of-order while still preserving data dependence constraints. Because instructions may finish in an arbitrary order, the architectural register file 210 cannot be modified by the results of out of order instructions as they finish because it would make it difficult to restore their values accurately in the event of an exception or an interrupt. Hence, every instruction that enters the pipeline is provided a temporary register where it can save its result. The temporary registers are eventually written into the architectural register file in program order when the associated instruction retires. Thus, even though instructions are being executed out of order, the contents of the architectural register files change as though they were being executed in program order.
  • the ROB 208 facilitates the process of instruction retirement. After the instructions are dispatched from the fetch unit 202 , they are decoded by decode module 204 and are placed in the ROB 208 and issue queue 206 (IQ).
  • the ROB 208 and IQ 206 may be part of a scheduler module 272 . As instructions are issued out of IQ 206 out of order, they are executed by execute module 212 . Instruction execution at 212 is allowed out of order as long as data dependencies are maintained.
  • the write back module 214 will write the resulting values from those instructions back to the temporary registers in ROB 208 and rely on the ROB 208 to facilitate committing or “retiring” the instructions in order.
  • write back module 214 writes the values resulting from instruction execution directly into register file 210 without sorting them.
  • the unordered elements are added in physical memory to the register file 210 in an unordered fashion and are then retired to the architectural files in order at the retirement stage using a ROB initiated protocol.
  • the instructions issued out of order from the IQ 206 may also comprise loads and stores. As explained above, when loads and stores are issued out of order from the IQ 206 , there are memory dependencies between them that need to be resolved before those instructions can be committed. Accordingly, the store instructions are stored in order in a Load Store Queue (LSQ) 216 while the dependencies between the loads and stores are resolved with the help of ROB 208 .
  • LSQ Load Store Queue
  • FIG. 3 illustrates an example of maintaining data for a general purpose register (GPR) speculatively in the front-end of the pipeline in accordance with an embodiment of the present invention.
  • GPR general purpose register
  • a value generated from a GPR e.g., a control register could determine the control flow of the program or cause instructions or data values to be treated differently.
  • certain control flow instructions also called state producing instructions
  • branches may require data from a GPR to determine the manner in which to direct the flow of the program.
  • a control flow instruction in a conventional OOO processor design would have to wait on the instruction(s) updating the associated GPR to execute and commit before being able to use the data.
  • serialization is introduced in the pipeline because the execution of the control flow instruction and instructions subsequent to it are dependent on the resolution of the data in the GPR.
  • Embodiments of the present invention mitigate this performance-limiting problem by exercising early data forwarding.
  • the present invention speculatively maintains certain registers in the front end of the pipeline to be able to provide values from a GPR earlier to control flow instructions and branches as soon as they are fetched from Fetch stage 202 so that serialization and any resultant delays in the pipeline are avoided.
  • FIG. 3 illustrates an exemplary instruction sequence 390 .
  • Instruction sequence 390 may comprise instructions, e.g., 331 that write to a rounding control register.
  • Table 350 illustrates the different modes of the control register.
  • the execution unit of the processor rounds the result of floating point (FP) instructions in accordance with the mode programmed in the control register. For example, a value of 01 programmed in the control register conveys to the execution unit that the result of all FP instructions should be truncated. Similarly, a value of 10 indicates that the result of all FP instructions should be rounded to the nearest value.
  • FP floating point
  • instruction 332 which converts a floating point value to an integer, would have to wait for value 01 to be written to control register at the back-end of the pipeline before executing. This is because control registers in conventional OOO processors are typically not renamed and, accordingly, instruction 331 acts as a serializing instruction. Instruction 332 and subsequent instructions, therefore, need to wait until instruction 331 reaches the back end of the machine, commits and changes the value of the control register before starting to execute again.
  • register entry 340 can be maintained in the front-end in-order part of the pipeline where values for the control register can be stored speculatively for quicker access.
  • a speculative copy of the control register can be maintained at the front end of the machine in pipeline register 340 , where it can be accessed soon after instruction 331 is fetched.
  • every subsequent instruction following instruction 331 is tagged with the speculative value of the control register. This allows subsequent instructions to have immediate access to the correct control register value when they are executed. It also allow the pipeline to be flushed easily in case of a misprediction.
  • a speculative copy of the control register with value 10 can be maintained at the front end of the machine in pipeline register 340 . Every instruction subsequent to instruction 333 , e.g., FP instruction 334 is then tagged with this more recent value of the control register.
  • control register instructions e.g., 331 and 333 reach the back-end of the machine, where they are retired and the values are updated.
  • all the instructions in sequence 390 e.g., instructions 332 and 334 have received the correct values speculatively at the front-end. Accordingly, the delaying effect of serializing instructions 331 and 333 are mitigated.
  • FIG. 4 illustrates the manner in which far branches are processed in an emulated architecture by maintaining registers at the front-end of the pipeline in accordance with one embodiment of the present invention.
  • guest instructions in an emulated architecture can be from a number of different guest instruction architectures (e.g., Java, x86, MIPS etc.) and multiple guest instruction blocks can be converted into one or more corresponding native conversion blocks. This conversion occurs on a per instruction basis.
  • guest instruction architectures e.g., Java, x86, MIPS etc.
  • multiple guest instruction blocks can be converted into one or more corresponding native conversion blocks. This conversion occurs on a per instruction basis.
  • every instruction block both guest instruction blocks and native instruction blocks, conclude with a far branch.
  • far branches are used as examples and will hereinafter be referred to as “branches.”.
  • guest instruction block A 435 concludes with a branch 471 predicted to jump to guest instruction block B 436
  • guest instruction block B concludes with a branch 452 predicted to jump to guest instruction block C 437 , etc.
  • the branch is a jump to the next subsequent instruction block or sequence of instructions in memory.
  • the address space used to define the instruction offset in the guest space is disassociated from the native address space.
  • the branch targets from the guest branches are required to calculate the targets of any future guest branches (whose targets are often presented as addresses relative to the respective addresses in the emulated address space).
  • a guest branch instruction when executed in the native space does not have access to the corresponding Guest Program Counter (GPC) value in order to compute its target.
  • the guest branch instruction therefore, may require a branch target value from a prior guest branch instruction to calculate its own target. This is a performance limiting case, because the prior guest branch would first need to commit the updated GPC value that is maintained in a General Purpose Register (GPR) at the back-end of the machine before the current guest branch instruction would have access to it.
  • GPC Guest Program Counter
  • these guest branch instructions require targets from earlier branches sooner than the delay associated with waiting for the earlier branches to be resolved in the back-end of the machine.
  • branch instruction G.Branch.c2 467 FIG. 4
  • native instruction block B 441 which is a converted instruction corresponding to branch instruction Branch.c2 452 in guest instruction block B 436
  • the target of the earlier branch G.Branch.c1 465 is required to compute the target for branch 467 .
  • embodiments of the present invention allow a speculative target value to be provided to branch 467 without having to wait for the target of the earlier branch 465 to be committed at the back-end of the pipeline.
  • the target of a guest branch (a branch whose target is an address in the guest space or emulated slave space) is often presented as an offset relative to the address of the guest branch in the emulated address space.
  • offset1 is an address relative to the address (Guest Program Counter) of the instruction Branch.c1 in instruction 471 .
  • instruction 465 in native space which corresponds to instruction 471 in guest space, will have a different program counter than the Guest Program Counter (GPC) of instruction 471 .
  • GPC Guest Program Counter
  • the corresponding GPC is required which is then added to the offset1′ value from instruction 465 to compute the branch target.
  • the branch target so calculated will also be needed for the subsequent branch, e.g., instruction G.Branch.c2′ 467 to compute the target for that branch.
  • the branch target is determined in the emulated address space (e.g., once the GPC value of the branch target is determined), it is then converted to native space using a conversion look-aside buffer (CLB) as discussed in U.S. Pat. No. 9,710,387 to provide the corresponding target in native address space.
  • CLB conversion look-aside buffer
  • processing instruction 467 would require waiting until instruction 465 had finished calculating the branch target and committed its value post-execution at the back-end of the pipeline.
  • guest branch instruction 467 (G.Branch.c2) needs to compute its target in the emulated address space because, as mentioned above, the target of a guest branch is typically presented as an offset relative to its address in the emulated address space. Accordingly, offset2′ is tied to the emulated address space and instruction 467 needs to compute its target in the guest address space.
  • instruction 467 Before instruction 467 computes its target address in a conventional emulated architecture, it must wait until instruction 465 has computed its branch target and committed the results. Waiting until instruction 465 has computed its branch target and committed the results entails waiting until instruction 465 has executed, computed its branch target in the emulated address space, committed the resultant values in the back-end of the machine and converted the guest address over to a corresponding native address in native instruction block B 441 using a CLB. Accordingly, in a conventional OOO processor, instruction 465 would act as a serializing instruction, thereby delaying the subsequent guest branch, e.g., instruction 467 and any instructions following it.
  • Embodiments of the present invention circumvent this problem by maintaining a guest branch target register (GBTR) in the front-end of the pipeline, which stores the targets of the guest branches speculatively so that the data is readily available to the fetch machine.
  • GBTR guest branch target register
  • the invention provides a mechanism to maintain a pipelined GBTR in the front-end of the machine. Guest branch instructions write to this register with the guest-target if they are predicted to be taken.
  • G_Address_Block A 471 is the corresponding guest address maintained within the GBTR for the starting address of native instruction block A 430 .
  • G_Address_Block A 471 is the corresponding guest address for the starting instruction of block A 430 , e.g., Inst A′ 440 .
  • guest instruction block A 435 is the first instruction block in the user-defined code
  • G_Address_Block A 471 is simply the starting GPC of the instruction sequence of guest instruction block A 435 .
  • the starting entry into the GBTR is typically populated by software at the time of mapping the guest instruction blocks into native conversion blocks.
  • G_Address_Block B 474 is the corresponding guest address maintained in the GBTR for the starting address of native instruction block B 441 .
  • G_Address_Block C 472 is the corresponding guest address maintained in GBTR for the starting address of native instruction block C 472 .
  • G_Address_Block D 473 is the corresponding guest address maintained in GBTR for the starting address of native instruction block D 443 . Accordingly, a guest address is implicitly maintained in the front-end of the pipeline for each instruction sequence boundary.
  • Prior guest addresses implicitly maintained in the GBTR for the instruction sequence boundaries are used to calculate the branch targets of subsequent guest branches, e.g., the corresponding guest address of G.Branch.c1 465 is used to calculate the corresponding guest address for G.Branch.c2 467 , etc., at execution time.
  • the subsequent guest branch targets are then populated into the GBTR as will be discussed in FIG. 5 .
  • the offset values for each of the guest branch instructions needs to be adjusted to account for this when mapping the instructions from guest space into native space.
  • guest branch, G.Branch.c2 467 does not have access to the GPC of corresponding guest instruction 452 , but it does have access to guest address G_Address_Block B 474 .
  • offset2′ needs to be adjusted to account for the difference in GPC between Inst C 434 and Branch.c2 instruction 452 (because recall that G_Address_Block B 474 is the guest address corresponding to the start of guest instruction block B 436 ).
  • this adjustment of offset values is made by software during the initial mapping when instruction 452 Branch.c2 is mapped over from guest address space to corresponding instruction 467 G.Branch.c2 in native address space. Accordingly, the value of offset2 from instruction 452 is adjusted to a value of offset2′ for instruction 467 .
  • the updated offset value, offset2′, added to guest address, G_Address_Block B 474 will yield the correct branch target address, which can then be added to the GBTR as will be discussed in FIG. 5 . Because the branch target address so calculated will be in emulated space, a CLB will be required to convert it to over to a corresponding native space address.
  • FIG. 5 illustrates the manner in which the pipelined guest branch target register is updated using a prior branch target in accordance with one embodiment of the present invention.
  • a guest branch instruction 535 e.g., instruction 467 , G.Branch.c2
  • the GBTR 590 needs to be updated.
  • the offset value determined in software for that instruction e.g. offset2′
  • the youngest unretired guest branch pointer 591 to the register is updated to point to the newly added target.
  • the new entries are added to the GBTR on a FIFO basis—the first branch entered will also be the first to be retired from the queue.
  • the embodiments of the present invention therefore advantageously allow resolution of the branch target address earlier in the pipeline (e.g., at the fetch stage) as compared with conventional solutions that wait for the process of the prior branch instructions to finish execution at the back-end of the machine and commit their values.
  • the guest addresses stored in the GBTR can be mapped back to native address space by using a CLB as discussed in detail in U.S. Pat. No. 9,710,387.
  • branch target 534 is determined using branch target 533 .
  • Branch target 533 is determined using branch target 532 , and so forth.
  • target 531 (0xA) may either be the starting guest address of the user's code sequence or alternatively, it could be the target of the youngest retired guest branch. If the latter, then entry 531 comprises the oldest unretired guest branch.
  • all values in the GBTR are updated speculatively. Because register values are updated speculatively, in one embodiment, multiple copies of the GBTR to be maintained in the front-end of the pipeline. Further, in one embodiment, read and write pointers are maintained within the GBTR. In one embodiment, the pointers allow the most current value in the register to be easily retrieved. For example, a pointer 591 is maintained that allows the youngest unretired guest branch to be retrieved from the GBTR. Also, a pointer 592 to the oldest unretired guest branch can be maintained.
  • the pointers to a GBTR can also be updated on the flush or retirement of an instruction. If an instruction is flushed or retired, both pointers 592 and 591 , for example, would need to be updated.
  • each instruction carries as a tag, which, in one embodiment, can be a pointer to the last branch instruction that updated this register.
  • the branch target can itself be appended to the instruction as a tag. For example, as shown in FIG. 5 , a tag component 537 gets appended to the instruction component 535 of guest branch 535 before being dispatched to the instruction scheduling unit.
  • FIG. 6 illustrates the manner in which each instruction fetched is tagged with information about the last branch instruction that updated the guest branch target register in accordance with one embodiment of the present invention.
  • the oldest unretired guest branches in the GBTR get retired before the youngest unretired guest branches. So target 0xA is retired prior to target 0xB 632 and so on.
  • a new instruction 636 is fetched, it will typically get tagged with the branch target of the youngest unretired guest branch 635 .
  • This tag 637 can either be a pointer or the actual value of the branch target.
  • the instruction is then dispatched to the scheduler 272 .
  • the tagging is advantageous because in case of a pipeline flush, it helps identify the relative position of each instruction. For example, if all instructions between target 0xA 631 and target 0xB 632 needed to be flushed, the tag would enable those instructions to be easily identified.
  • the tagging is useful for non-branch instructions that operate on the guest program counter value.
  • Inst E′ 466 in FIG. 4 needs the GPC value as an operand.
  • the GPC is unavailable in the native address space. Accordingly, tagging every instruction by attaching the current value of the GBTR as an immediate-value to the instruction and sending it along with the instruction is useful because the branch target can be used to calculate the corresponding GPC value for instruction 466 (which is the GPC value for instruction 476 in guest address space).
  • This advantageously enables the register, which is exercised in the back-end of the processor, to be available readily in the front-end of the processor.
  • the embodiments of the present invention advantageously also eliminate the read-after-write dependency between the guest-branch and the instruction requiring a read of this register.
  • the data is forwarded from the producer to a subsequent consumer. This allows the guest-branch and the subsequent instruction to execute in any order thus eliminating the performance problem stemming from the serialization required as a result of a data dependency.
  • the embodiments of the present invention provides a low-cost maintenance mechanism wherein an implicit update of the guest branch target registers can be performed. Explicit update of these registers by software requires serialization and flushing of the machine.
  • the embodiments of the present invention allows for speculative maintenance of structures aiding in resolving data dependencies in early stages of a microprocessor. This is a significant advantage over conventional OOO processors wherein similar data forwarding cases are handled in the execution unit 212 , which resides in the back-end of the machine.
  • instruction 6 also demonstrates the retirement order of the branches entered in the GBTR. As mentioned above entries are entered into the GBTR on a FIFO basis. Accordingly, the earliest entered target, e.g. instruction 631 will be the first to be retired.
  • FIG. 7 depicts a flowchart 700 for an exemplary computer controlled process for performing early dependency resolution and data forwarding for instructions in the native space of an emulated architecture referencing a guest address in accordance with embodiments of the present invention. While the various steps in this flowchart are presented and described sequentially, one of ordinary skill will appreciate that some or all of the steps can be executed in different orders and some or all of the steps can be executed in parallel. Further, in one or more embodiments of the invention, one or more of the steps described below can be omitted, repeated, and/or performed in a different order. Accordingly, the specific arrangement of steps shown in FIG. 7 should not be construed as limiting the scope of the invention.
  • Flowchart 700 may be described with continued reference to exemplary embodiments described above, though the method is not limited to those embodiments. Process 700 may also be implemented in hardware in one embodiment.
  • a plurality of instructions are mapped from a guest address space to a native address space.
  • the instructions in the native address space begin executing.
  • a branch target value is determined for a prior guest branch by performing a look-up in a GBTR. As mentioned above, this typically takes place at the front-end of the machine, e.g., at the fetch stage.
  • the GBTR as discussed above, is a series of registers maintained to speculatively store the branch targets of guest branches at the front-end of the machine, e.g., at the fetch stage.
  • the prior guest branch target looked up in the GBTR is used to speculatively determine the branch target for the current guest branch instruction, so that the information regarding where the current branch instruction jumps to is available at the front end of the pipeline. This is in contrast to conventional processors that need to wait for prior guest branches to resolve completely at the back end of the machine before allowing subsequent guest branches to proceed forward.
  • an offset value from a respective current guest branch instruction is added to the target value for the prior guest branch (looked-up in the GBTR) in order to determine the branch target for the respective current guest branch instruction.
  • a new entry is creating in the GBTR for the newly determined branch target (of the current guest branch instruction) and the GBTR is updated by adding this branch target to the new entry.
  • This entry now becomes the youngest unretired guest branch and the pointer to the youngest unretired guest branch is updated accordingly in the GBTR.
  • the embodiments disclosed herein may also be implemented using software modules that perform certain tasks. These software modules may include script, batch, or other executable files that may be stored on a computer-readable storage medium or in a computing system. These software modules may configure a computing system to perform one or more of the example embodiments disclosed herein.
  • One or more of the software modules disclosed herein may be implemented in a cloud computing environment. Cloud computing environments may provide various services and applications via the Internet.
  • cloud-based services e.g., software as a service, platform as a service, infrastructure as a service, etc.
  • Various functions described herein may be provided through a remote desktop environment or any other cloud-based computing environment.

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Abstract

A microprocessor implemented method for performing early dependency resolution and data forwarding is disclosed. The method comprises mapping a plurality of instructions in a guest address space into a corresponding plurality of instructions in a native address space. For each current guest branch instruction in the native address space fetched during execution, performing (a) determining a youngest prior guest branch target stored in a guest branch target register, wherein the guest branch register is operable to speculatively store a plurality of prior guest branch targets corresponding to prior guest branch instructions; (b) determining a current branch target for a respective current guest branch instruction by adding an offset value for the respective current guest branch instruction to the youngest prior guest branch target; and (c) creating an entry in the guest branch target register for the current branch target.

Description

CROSS-REFERENCE TO RELATED APPLICATIONS
This application claims the benefit of U.S. Provisional Application No. 61/792,676, filed Mar. 15, 2013, which is hereby incorporated by reference.
This application is related to U.S. patent application Ser. No. 13/359,767, filed Jan. 27, 2012 (now U.S. Pat. No. 9,710,387, issued Jul. 18, 2017), titled “GUEST INSTRUCTION TO NATIVE INSTRUCTION RANGE BASED MAPPING USING A CONVERSION LOOK ASIDE BUFFER OF A PROCESSOR,” which is hereby incorporated by reference.
This application is related to U.S. patent application Ser. No. 14/211,655, filed Mar. 14, 2014 (now U.S. Pat. No. 10,228,950, issued Mar. 12, 2019), titled “METHOD AND APPARATUS FOR GUEST RETURN ADDRESS STACK EMULATION SUPPORTING SPECULATION,” which is hereby incorporated by reference.
FIELD OF THE INVENTION
Embodiments according to the present invention generally relate to microprocessor architecture and more particularly to the architecture for out-of-order microprocessors.
BACKGROUND OF THE INVENTION
In an Out-Of-Order (“OOO”) microprocessor, instructions are allowed to issue out of their program order. However, in most cases, they are required to retire from the machine in order. Further, memory operations in the machine, regardless of the issue order, need to acquire and update memory status in program order. These diverging ordering behaviors give rise to problems at several locations in a micro-architecture.
For example, in an OOO microprocessor, the instructions executing out of order need to preserve their data dependence constraints. Because instructions may finish in an arbitrary order, the architectural register file cannot be modified by the instructions as they finish because it would make it difficult to restore their values accurately in the event of an exception or an interrupt. To achieve high performance, register renaming is commonly used with the temporary register storage to allow the OOO processor to resolve false dependencies between instructions. Hence, every instruction that enters the pipeline is provided a temporary register where it can save its result. The temporary registers are eventually written into the architectural register file in program order. Thus, even though instructions are being executed out of order, the contents of the architectural register files change as though they were being executed in program order.
The architectural register file is typically maintained in the back-end of the OOO processor. As a result of using temporary register storage along with register renaming, instructions with write-after-write (WAW) and write-after-read (WAR) hazards can be issued out-of-order in conventional OOO processors.
There are cases in OOO microprocessor design where a value generated from a General Purpose Register (“GPR”), an architectural register also maintained at the back-end of the machine, could determine the control flow of the program (in the case of indirect branches), or could cause instructions or data values to be treated differently. In conventional OOO processors, instructions following a state producing instruction involving a GPR need to wait for the state producing instruction to get committed before being able to use its value. As a result, the process of executing instructions or even fetching new instructions becomes a serial process dependent on the execution of the state producing instruction getting committed to a quiescent state, which is visible to every microprocessor module that is affected by it. This serialization can introduce significant delays in the pipeline and diminish microprocessor performance.
BRIEF SUMMARY OF THE INVENTION
Accordingly, a need exists for a method and apparatus for a more efficient and flexible OOO processor architecture that is configured to mitigate the performance limiting issues associated with execution of state producing instructions, e.g., branches by exercising early data forwarding.
In one embodiment of the present invention, registers are provided at the front-end of the machine, e.g., towards the fetch stage that speculatively hold copies of the results of state producing instructions and make them available to instructions dependent on the state producing instruction without needing to wait for the state producing instructions to be committed to a quiescent state. This allows data to be speculatively made available at the early stage of the pipeline, e.g., at the fetch stage to the other instructions and prevents problems associated with serialization.
In one embodiment of the present invention, in an emulated architecture, branch targets that are required to allow guest branch instructions (being executed in native space) to compute their targets are stored speculatively in a guest branch target register at the front-end of the machine. In one embodiment, guest branch instructions write to the guest-target to this register if they are predicted to be taken. Subsequent instructions that require the guest-target to calculate either their own target (in the case of a branch instruction) or to use it as an operand can simply access it from the guest branch target register at the front-end of the machine instead of needing to wait for the earlier branch to execute and commit its values at the back-end of the machine. Accordingly, embodiments of the present invention allow for speculative maintenance of structures aiding in resolving data dependencies in early stages of a microprocessor. This is a significant advantage over conventional OOO processors wherein similar data forwarding cases are handled in the execution unit, which resides in the back-end of the machine.
In one embodiment, a microprocessor implemented method for performing early dependency resolution and data forwarding for instructions in a native space of an emulated architecture referencing a guest address is presented. The method comprises mapping a plurality of instructions in a guest address space into a corresponding plurality of instructions in a native address space. For each current guest branch instruction in the native address space fetched during execution, performing (a) determining a youngest prior guest branch target stored in a guest branch target register, wherein the guest branch register is operable to speculatively store a plurality of prior guest branch targets corresponding to prior guest branch instructions; (b) determining a current branch target for a respective current guest branch instruction by adding an offset value for the respective current guest branch instruction to the youngest prior guest branch target; and (c) creating an entry in the guest branch target register for the current branch target.
In another embodiment, a processor unit configured for performing early dependency resolution and data forwarding for instructions in a native space of an emulated architecture referencing a guest address is presented. The method comprises mapping a plurality of instructions in a guest address space into a corresponding plurality of instructions in a native address space. For each current guest branch instruction in the native address space fetched during execution, performing: (a) determining a youngest prior guest branch target stored in a guest branch target register, wherein the guest branch register is operable to speculatively store a plurality of prior guest branch targets corresponding to prior guest branch instructions; (b) determining a current branch target for a respective current guest branch instruction by adding an offset value for the respective current guest branch instruction to the youngest prior guest branch target; and (c) creating an entry in the guest branch target register for the current branch target.
In a different embodiment, an apparatus configured to perform early dependency resolution and data forwarding for instructions in a native space of an emulated architecture referencing a guest address is disclosed. The apparatus comprises a memory and a processor communicatively coupled to the memory, wherein the processor is configured to process instructions out of order, and further wherein the processor is configured to perform a method. The method comprises mapping a plurality of instructions in a guest address space into a corresponding plurality of instructions in a native address space. For each current guest branch instruction in the native address space fetched during execution, performing: (a) determining a youngest prior guest branch target stored in a guest branch target register, wherein the guest branch register is operable to speculatively store a plurality of prior guest branch targets corresponding to prior guest branch instructions; (b) determining a current branch target for a respective current guest branch instruction by adding an offset value for the respective current guest branch instruction to the youngest prior guest branch target; and (c) creating an entry in the guest branch target register for the current branch target.
The following detailed description together with the accompanying drawings will provide a better understanding of the nature and advantages of the present invention.
BRIEF DESCRIPTION OF THE DRAWINGS
Embodiments of the present invention are illustrated by way of example, and not by way of limitation, in the figures of the accompanying drawings and in which like reference numerals refer to similar elements.
FIG. 1 is an exemplary computer system in accordance with embodiments of the present invention.
FIG. 2 is an exemplary diagram of pipe stages of a pipeline for an out of order microprocessor on which embodiments of the present invention can be implemented in accordance with one embodiment of the present invention.
FIG. 3 illustrates an example of maintaining data for a general purpose register (GPR) speculatively in the front-end of the pipeline in accordance with an embodiment of the present invention.
FIG. 4 illustrates the manner in which far branches are processed in an emulated architecture by maintaining registers at the front-end of the pipeline in accordance with one embodiment of the present invention.
FIG. 5 illustrates the manner in which the pipelined guest branch target register is updated using a prior branch target in accordance with one embodiment of the present invention.
FIG. 6 illustrates the manner in which each instruction fetched is tagged with information about the last branch instruction that updated the guest branch target register in accordance with one embodiment of the present invention.
FIG. 7 depicts a flowchart 700 for an exemplary computer controlled process for performing early dependency resolution and data forwarding for instructions in the native space of an emulated architecture referencing a guest address in accordance with embodiments of the present invention.
DETAILED DESCRIPTION OF THE INVENTION
Reference will now be made in detail to the various embodiments of the present disclosure, examples of which are illustrated in the accompanying drawings. While described in conjunction with these embodiments, it will be understood that they are not intended to limit the disclosure to these embodiments. On the contrary, the disclosure is intended to cover alternatives, modifications and equivalents, which may be included within the spirit and scope of the disclosure as defined by the appended claims. Furthermore, in the following detailed description of the present disclosure, numerous specific details are set forth in order to provide a thorough understanding of the present disclosure. However, it will be understood that the present disclosure may be practiced without these specific details. In other instances, well-known methods, procedures, components, and circuits have not been described in detail so as not to unnecessarily obscure aspects of the present disclosure.
NOTATION AND NOMENCLATURE
Some portions of the detailed descriptions that follow are presented in terms of procedures, logic blocks, processing, and other symbolic representations of operations on data bits within a computer memory. These descriptions and representations are the means used by those skilled in the data processing arts to most effectively convey the substance of their work to others skilled in the art. In the present application, a procedure, logic block, process, or the like, is conceived to be a self-consistent sequence of steps or instructions leading to a desired result. The steps are those utilizing physical manipulations of physical quantities. Usually, although not necessarily, these quantities take the form of electrical or magnetic signals capable of being stored, transferred, combined, compared, and otherwise manipulated in a computer system. It has proven convenient at times, principally for reasons of common usage, to refer to these signals as transactions, bits, values, elements, symbols, characters, samples, pixels, or the like.
It should be borne in mind, however, that all of these and similar terms are to be associated with the appropriate physical quantities and are merely convenient labels applied to these quantities. Unless specifically stated otherwise as apparent from the following discussions, it is appreciated that throughout the present disclosure, discussions utilizing terms such as “mapping,” “determining,” “adding,” “creating,” “computing,” “performing,” “appending,” “transmitting,” “forwarding,” or the like, refer to actions and processes (e.g., flowchart 700 of FIG. 7) of a computer system or similar electronic computing device or processor (e.g., system 110 of FIG. 1). The computer system or similar electronic computing device manipulates and transforms data represented as physical (electronic) quantities within the computer system memories, registers or other such information storage, transmission or display devices.
Embodiments described herein may be discussed in the general context of computer-executable instructions residing on some form of computer-readable storage medium, such as program modules, executed by one or more computers or other devices. By way of example, and not limitation, computer-readable storage media may comprise non-transitory computer-readable storage media and communication media; non-transitory computer-readable media include all computer-readable media except for a transitory, propagating signal. Generally, program modules include routines, programs, objects, components, data structures, etc., that perform particular tasks or implement particular abstract data types. The functionality of the program modules may be combined or distributed as desired in various embodiments.
Computer storage media includes volatile and nonvolatile, removable and non-removable media implemented in any method or technology for storage of information such as computer-readable instructions, data structures, program modules or other data. Computer storage media includes, but is not limited to, random access memory (RAM), read only memory (ROM), electrically erasable programmable ROM (EEPROM), flash memory or other memory technology, compact disk ROM (CD-ROM), digital versatile disks (DVDs) or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium that can be used to store the desired information and that can accessed to retrieve that information.
Communication media can embody computer-executable instructions, data structures, and program modules, and includes any information delivery media. By way of example, and not limitation, communication media includes wired media such as a wired network or direct-wired connection, and wireless media such as acoustic, radio frequency (RF), infrared, and other wireless media. Combinations of any of the above can also be included within the scope of computer-readable media.
FIG. 1 is a block diagram of an example of a computing system 110 capable of being integrated with a processor 114 of an embodiment of the present disclosure. Computing system 110 broadly represents any single or multi-processor computing device or system capable of executing computer-readable instructions. Examples of computing system 110 include, without limitation, workstations, laptops, client-side terminals, servers, distributed computing systems, handheld devices, or any other computing system or device. In its most basic configuration, computing system 110 may include at least one processor 114 of an embodiment of the present invention and a system memory 116.
Processor 114 incorporates embodiments of the present invention and generally represents any type or form of processing unit capable of processing data or interpreting and executing instructions. In certain embodiments, processor 114 may receive instructions from a software application or module. These instructions may cause processor 114 to perform the functions of one or more of the example embodiments described and/or illustrated herein. In one embodiment, processor 114 may be an out of order microprocessor. In a different embodiment, processor 114 may be a superscalar processor. In yet another embodiment, processor 114 may comprise multiple processors operating in parallel.
System memory 116 generally represents any type or form of volatile or non-volatile storage device or medium capable of storing data and/or other computer-readable instructions. Examples of system memory 116 include, without limitation, RAM, ROM, flash memory, or any other suitable memory device. Although not required, in certain embodiments computing system 110 may include both a volatile memory unit (such as, for example, system memory 116) and a non-volatile storage device (such as, for example, primary storage device 132).
Computing system 110 may also include one or more components or elements in addition to processor 114 and system memory 116. For example, in the embodiment of FIG. 1, computing system 110 includes a memory controller 118, an input/output (I/O) controller 120, and a communication interface 122, each of which may be interconnected via a communication infrastructure 112. Communication infrastructure 112 generally represents any type or form of infrastructure capable of facilitating communication between one or more components of a computing device. Examples of communication infrastructure 112 include, without limitation, a communication bus (such as an Industry Standard Architecture (ISA), Peripheral Component Interconnect (PCI), PCI Express (PCIe), or similar bus) and a network.
Memory controller 118 generally represents any type or form of device capable of handling memory or data or controlling communication between one or more components of computing system 110. For example, memory controller 118 may control communication between processor 114, system memory 116, and I/O controller 120 via communication infrastructure 112.
I/O controller 120 generally represents any type or form of module capable of coordinating and/or controlling the input and output functions of a computing device. For example, I/O controller 120 may control or facilitate transfer of data between one or more elements of computing system 110, such as processor 114, system memory 116, communication interface 122, display adapter 126, input interface 130, and storage interface 134.
Communication interface 122 broadly represents any type or form of communication device or adapter capable of facilitating communication between example computing system 110 and one or more additional devices. For example, communication interface 122 may facilitate communication between computing system 110 and a private or public network including additional computing systems. Examples of communication interface 122 include, without limitation, a wired network interface (such as a network interface card), a wireless network interface (such as a wireless network interface card), a modem, and any other suitable interface. In one embodiment, communication interface 122 provides a direct connection to a remote server via a direct link to a network, such as the Internet. Communication interface 122 may also indirectly provide such a connection through any other suitable connection.
Communication interface 122 may also represent a host adapter configured to facilitate communication between computing system 110 and one or more additional network or storage devices via an external bus or communications channel. Examples of host adapters include, without limitation, Small Computer System Interface (SCSI) host adapters, Universal Serial Bus (USB) host adapters, IEEE (Institute of Electrical and Electronics Engineers) 1394 host adapters, Serial Advanced Technology Attachment (SATA) and External SATA (eSATA) host adapters, Advanced Technology Attachment (ATA) and Parallel ATA (PATA) host adapters, Fibre Channel interface adapters, Ethernet adapters, or the like. Communication interface 122 may also allow computing system 110 to engage in distributed or remote computing. For example, communication interface 122 may receive instructions from a remote device or send instructions to a remote device for execution.
As illustrated in FIG. 1, computing system 110 may also include at least one display device 124 coupled to communication infrastructure 112 via a display adapter 126. Display device 124 generally represents any type or form of device capable of visually displaying information forwarded by display adapter 126. Similarly, display adapter 126 generally represents any type or form of device configured to forward graphics, text, and other data for display on display device 124.
As illustrated in FIG. 1, computing system 110 may also include at least one input device 128 coupled to communication infrastructure 112 via an input interface 130. Input device 128 generally represents any type or form of input device capable of providing input, either computer- or human-generated, to computing system 110. Examples of input device 128 include, without limitation, a keyboard, a pointing device, a speech recognition device, or any other input device.
As illustrated in FIG. 1, computing system 110 may also include a primary storage device 132 and a backup storage device 133 coupled to communication infrastructure 112 via a storage interface 134. Storage devices 132 and 133 generally represent any type or form of storage device or medium capable of storing data and/or other computer-readable instructions. For example, storage devices 132 and 133 may be a magnetic disk drive (e.g., a so-called hard drive), a floppy disk drive, a magnetic tape drive, an optical disk drive, a flash drive, or the like. Storage interface 134 generally represents any type or form of interface or device for transferring data between storage devices 132 and 133 and other components of computing system 110.
In one example, databases 140 may be stored in primary storage device 132. Databases 140 may represent portions of a single database or computing device or it may represent multiple databases or computing devices. For example, databases 140 may represent (be stored on) a portion of computing system 110. Alternatively, databases 140 may represent (be stored on) one or more physically separate devices capable of being accessed by a computing device, such as computing system 110.
Continuing with reference to FIG. 1, storage devices 132 and 133 may be configured to read from and/or write to a removable storage unit configured to store computer software, data, or other computer-readable information. Examples of suitable removable storage units include, without limitation, a floppy disk, a magnetic tape, an optical disk, a flash memory device, or the like. Storage devices 132 and 133 may also include other similar structures or devices for allowing computer software, data, or other computer-readable instructions to be loaded into computing system 110. For example, storage devices 132 and 133 may be configured to read and write software, data, or other computer-readable information. Storage devices 132 and 133 may also be a part of computing system 110 or may be separate devices accessed through other interface systems.
Many other devices or subsystems may be connected to computing system 110. Conversely, all of the components and devices illustrated in FIG. 1 need not be present to practice the embodiments described herein. The devices and subsystems referenced above may also be interconnected in different ways from that shown in FIG. 1. Computing system 110 may also employ any number of software, firmware, and/or hardware configurations. For example, the example embodiments disclosed herein may be encoded as a computer program (also referred to as computer software, software applications, computer-readable instructions, or computer control logic) on a computer-readable medium.
The computer-readable medium containing the computer program may be loaded into computing system 110. All or a portion of the computer program stored on the computer-readable medium may then be stored in system memory 116 and/or various portions of storage devices 132 and 133. When executed by processor 114, a computer program loaded into computing system 110 may cause processor 114 to perform and/or be a means for performing the functions of the example embodiments described and/or illustrated herein. Additionally or alternatively, the example embodiments described and/or illustrated herein may be implemented in firmware and/or hardware.
Method and Apparatus to Allow Early Dependency Resolution and Data Forwarding in a Microprocessor
In one embodiment, the present invention provides a method and apparatus for a more efficient and flexible OOO processor architecture that is configured to mitigate the performance limiting issues associated with execution of state producing instructions by exercising early data forwarding.
For example, a branch instruction is an example of a state producing instruction. In an emulated architecture, both guest and native states exist. The guest architecture is emulated on top of the native machine. Further, the address space used to define the instruction offset in the guest space is dissociated from the native address space. As a result, a guest branch instruction when executed in the native space does not have access to the corresponding Guest Program Counter (GPC) value in order to compute its target. The guest branch instruction, therefore, may require a branch target value from a prior guest branch instruction to calculate its own target. This results in a performance limiting case, because the prior guest branch would first need to commit the updated GPC value that is maintained in a General Purpose Register (GPR) at the back-end of the machine before the current guest branch instruction would have access to it. This prevents the fetch machine from making progress and results in serialization of the pipeline, causing significant delays.
Embodiments of the present invention allow the data generated by the guest branch instructions (e.g., the branch targets) to be made speculatively available early enough to the fetch machine by implementing certain registers in the front-end of the pipeline, e.g., registers to calculate the targets of the branch instructions.
FIG. 2 is a block diagram of pipe stages an exemplary pipeline for an OOO microprocessor in accordance with embodiments of the present invention.
Instructions are fetched at the fetch stage 202 and placed in the instruction fetch queue (IFQ) (not shown) within fetch stage 202. The instructions are generally the original assembly instructions found in the executable program. These instructions reference the architectural registers which are stored in register file 210. If the first fetched instruction was to be interrupted or raise an exception, the architectural register file 210 stores the results of all instructions until that point. Stated differently, the architectural register file stores the state that needs to be saved and restored in order to return back to the program break point during debugging or otherwise.
In an OOO microprocessor, the instructions execute out-of-order while still preserving data dependence constraints. Because instructions may finish in an arbitrary order, the architectural register file 210 cannot be modified by the results of out of order instructions as they finish because it would make it difficult to restore their values accurately in the event of an exception or an interrupt. Hence, every instruction that enters the pipeline is provided a temporary register where it can save its result. The temporary registers are eventually written into the architectural register file in program order when the associated instruction retires. Thus, even though instructions are being executed out of order, the contents of the architectural register files change as though they were being executed in program order.
The ROB 208 facilitates the process of instruction retirement. After the instructions are dispatched from the fetch unit 202, they are decoded by decode module 204 and are placed in the ROB 208 and issue queue 206 (IQ). The ROB 208 and IQ 206 may be part of a scheduler module 272. As instructions are issued out of IQ 206 out of order, they are executed by execute module 212. Instruction execution at 212 is allowed out of order as long as data dependencies are maintained.
In one embodiment, the write back module 214 will write the resulting values from those instructions back to the temporary registers in ROB 208 and rely on the ROB 208 to facilitate committing or “retiring” the instructions in order. However, in a different embodiment, write back module 214 writes the values resulting from instruction execution directly into register file 210 without sorting them. The unordered elements are added in physical memory to the register file 210 in an unordered fashion and are then retired to the architectural files in order at the retirement stage using a ROB initiated protocol.
The instructions issued out of order from the IQ 206 may also comprise loads and stores. As explained above, when loads and stores are issued out of order from the IQ 206, there are memory dependencies between them that need to be resolved before those instructions can be committed. Accordingly, the store instructions are stored in order in a Load Store Queue (LSQ) 216 while the dependencies between the loads and stores are resolved with the help of ROB 208.
FIG. 3 illustrates an example of maintaining data for a general purpose register (GPR) speculatively in the front-end of the pipeline in accordance with an embodiment of the present invention.
As discussed above, there are certain circumstances in a processor design where a value generated from a GPR, e.g., a control register could determine the control flow of the program or cause instructions or data values to be treated differently. For example, certain control flow instructions (also called state producing instructions) or branches may require data from a GPR to determine the manner in which to direct the flow of the program. However, because GPRs are maintained deep in the pipeline and are updated towards the end of the pipeline, a control flow instruction in a conventional OOO processor design would have to wait on the instruction(s) updating the associated GPR to execute and commit before being able to use the data. As a result, serialization is introduced in the pipeline because the execution of the control flow instruction and instructions subsequent to it are dependent on the resolution of the data in the GPR.
Embodiments of the present invention mitigate this performance-limiting problem by exercising early data forwarding. In one embodiment, the present invention speculatively maintains certain registers in the front end of the pipeline to be able to provide values from a GPR earlier to control flow instructions and branches as soon as they are fetched from Fetch stage 202 so that serialization and any resultant delays in the pipeline are avoided.
FIG. 3, for example, illustrates an exemplary instruction sequence 390. Instruction sequence 390 may comprise instructions, e.g., 331 that write to a rounding control register. Table 350 illustrates the different modes of the control register. The execution unit of the processor rounds the result of floating point (FP) instructions in accordance with the mode programmed in the control register. For example, a value of 01 programmed in the control register conveys to the execution unit that the result of all FP instructions should be truncated. Similarly, a value of 10 indicates that the result of all FP instructions should be rounded to the nearest value.
In a conventional OOO processor, instruction 332, which converts a floating point value to an integer, would have to wait for value 01 to be written to control register at the back-end of the pipeline before executing. This is because control registers in conventional OOO processors are typically not renamed and, accordingly, instruction 331 acts as a serializing instruction. Instruction 332 and subsequent instructions, therefore, need to wait until instruction 331 reaches the back end of the machine, commits and changes the value of the control register before starting to execute again.
In one embodiment of the present invention, register entry 340 can be maintained in the front-end in-order part of the pipeline where values for the control register can be stored speculatively for quicker access. Thus, instead of waiting for instruction 331 to commit its value at the back-end of the machine, a speculative copy of the control register can be maintained at the front end of the machine in pipeline register 340, where it can be accessed soon after instruction 331 is fetched. In one embodiment, every subsequent instruction following instruction 331 is tagged with the speculative value of the control register. This allows subsequent instructions to have immediate access to the correct control register value when they are executed. It also allow the pipeline to be flushed easily in case of a misprediction.
Similarly, for instruction 333, a speculative copy of the control register with value 10 can be maintained at the front end of the machine in pipeline register 340. Every instruction subsequent to instruction 333, e.g., FP instruction 334 is then tagged with this more recent value of the control register.
Eventually, the control register instructions, e.g., 331 and 333 reach the back-end of the machine, where they are retired and the values are updated. However, by this point all the instructions in sequence 390, e.g., instructions 332 and 334 have received the correct values speculatively at the front-end. Accordingly, the delaying effect of serializing instructions 331 and 333 are mitigated.
FIG. 4 illustrates the manner in which far branches are processed in an emulated architecture by maintaining registers at the front-end of the pipeline in accordance with one embodiment of the present invention.
As described in detail in related U.S. patent application Ser. No. 13/359,767, filed Jan. 27, 2012 (now U.S. Pat. No. 9,710,387, issued Jul. 18, 2017), titled, “GUEST INSTRUCTION TO NATIVE INSTRUCTION RANGE BASED MAPPING USING A CONVERSION LOOK ASIDE BUFFER OF A PROCESSOR” which is hereby incorporated by reference (hereinafter “U.S. Pat. No. 9,710,387”), guest instruction blocks are converted or mapped into native conversion blocks in an emulated architecture. As described in U.S. Pat. No. 9,710,387, guest instructions in an emulated architecture can be from a number of different guest instruction architectures (e.g., Java, x86, MIPS etc.) and multiple guest instruction blocks can be converted into one or more corresponding native conversion blocks. This conversion occurs on a per instruction basis.
Also, as described in U.S. Pat. No. 9,710,387 and shown in FIG. 4, in one embodiment, every instruction block, both guest instruction blocks and native instruction blocks, conclude with a far branch. (The difference between near branches and far branches are detailed in U.S. Pat. No. 9,710,387, however, for purposes of the embodiments of the present invention, far branches are used as examples and will hereinafter be referred to as “branches.”) For example, guest instruction block A 435 concludes with a branch 471 predicted to jump to guest instruction block B 436, guest instruction block B concludes with a branch 452 predicted to jump to guest instruction block C 437, etc. The branch is a jump to the next subsequent instruction block or sequence of instructions in memory.
As discussed above, when a guest architecture is emulated on top of a native machine, the address space used to define the instruction offset in the guest space is disassociated from the native address space. As a result, the branch targets from the guest branches are required to calculate the targets of any future guest branches (whose targets are often presented as addresses relative to the respective addresses in the emulated address space).
Processing guest branches that require targets from earlier branches in order to compute their own targets results in a performance limiting condition in emulated architectures of conventional OOO processors. As mentioned above, a guest branch instruction when executed in the native space does not have access to the corresponding Guest Program Counter (GPC) value in order to compute its target. The guest branch instruction, therefore, may require a branch target value from a prior guest branch instruction to calculate its own target. This is a performance limiting case, because the prior guest branch would first need to commit the updated GPC value that is maintained in a General Purpose Register (GPR) at the back-end of the machine before the current guest branch instruction would have access to it.
In order for the fetch stage 202 to continue making progress and to prevent serialization of the pipeline, these guest branch instructions require targets from earlier branches sooner than the delay associated with waiting for the earlier branches to be resolved in the back-end of the machine. For example, when executing branch instruction G.Branch.c2 467 (FIG. 4) in native instruction block B 441, which is a converted instruction corresponding to branch instruction Branch.c2 452 in guest instruction block B 436, the target of the earlier branch G.Branch.c1 465 is required to compute the target for branch 467. As will be discussed in detail below, embodiments of the present invention allow a speculative target value to be provided to branch 467 without having to wait for the target of the earlier branch 465 to be committed at the back-end of the pipeline.
As mentioned above, the target of a guest branch (a branch whose target is an address in the guest space or emulated slave space) is often presented as an offset relative to the address of the guest branch in the emulated address space. For example, offset1 is an address relative to the address (Guest Program Counter) of the instruction Branch.c1 in instruction 471. Because of the dissociation between the native and guest address spaces, instruction 465 in native space, which corresponds to instruction 471 in guest space, will have a different program counter than the Guest Program Counter (GPC) of instruction 471. Accordingly, when executing instruction 465, the corresponding GPC is required which is then added to the offset1′ value from instruction 465 to compute the branch target. The branch target so calculated will also be needed for the subsequent branch, e.g., instruction G.Branch.c2′ 467 to compute the target for that branch.
Once the branch target is determined in the emulated address space (e.g., once the GPC value of the branch target is determined), it is then converted to native space using a conversion look-aside buffer (CLB) as discussed in U.S. Pat. No. 9,710,387 to provide the corresponding target in native address space.
In a conventional emulated architecture, processing instruction 467 would require waiting until instruction 465 had finished calculating the branch target and committed its value post-execution at the back-end of the pipeline. It should be noted, that guest branch instruction 467 (G.Branch.c2) needs to compute its target in the emulated address space because, as mentioned above, the target of a guest branch is typically presented as an offset relative to its address in the emulated address space. Accordingly, offset2′ is tied to the emulated address space and instruction 467 needs to compute its target in the guest address space.
Before instruction 467 computes its target address in a conventional emulated architecture, it must wait until instruction 465 has computed its branch target and committed the results. Waiting until instruction 465 has computed its branch target and committed the results entails waiting until instruction 465 has executed, computed its branch target in the emulated address space, committed the resultant values in the back-end of the machine and converted the guest address over to a corresponding native address in native instruction block B 441 using a CLB. Accordingly, in a conventional OOO processor, instruction 465 would act as a serializing instruction, thereby delaying the subsequent guest branch, e.g., instruction 467 and any instructions following it.
Embodiments of the present invention circumvent this problem by maintaining a guest branch target register (GBTR) in the front-end of the pipeline, which stores the targets of the guest branches speculatively so that the data is readily available to the fetch machine. In one embodiment, the invention provides a mechanism to maintain a pipelined GBTR in the front-end of the machine. Guest branch instructions write to this register with the guest-target if they are predicted to be taken.
It should be noted that maintaining the GBTR at the front-end of the machine allows every native instruction block to implicitly maintain a corresponding guest address for the starting instruction within the respective native instruction block. For example, in FIG. 4, G_Address_Block A 471 is the corresponding guest address maintained within the GBTR for the starting address of native instruction block A 430. G_Address_Block A 471 is the corresponding guest address for the starting instruction of block A 430, e.g., Inst A′ 440. Assuming guest instruction block A 435 is the first instruction block in the user-defined code, then G_Address_Block A 471 is simply the starting GPC of the instruction sequence of guest instruction block A 435. The starting entry into the GBTR is typically populated by software at the time of mapping the guest instruction blocks into native conversion blocks.
Similarly, G_Address_Block B 474 is the corresponding guest address maintained in the GBTR for the starting address of native instruction block B 441. G_Address_Block C 472 is the corresponding guest address maintained in GBTR for the starting address of native instruction block C 472. G_Address_Block D 473 is the corresponding guest address maintained in GBTR for the starting address of native instruction block D 443. Accordingly, a guest address is implicitly maintained in the front-end of the pipeline for each instruction sequence boundary. Prior guest addresses implicitly maintained in the GBTR for the instruction sequence boundaries are used to calculate the branch targets of subsequent guest branches, e.g., the corresponding guest address of G.Branch.c1 465 is used to calculate the corresponding guest address for G.Branch.c2 467, etc., at execution time. The subsequent guest branch targets are then populated into the GBTR as will be discussed in FIG. 5.
It should be noted that because only the guest address corresponding to the start of any native instruction block is available for the calculation of the guest branch targets at execution time, the offset values for each of the guest branch instructions needs to be adjusted to account for this when mapping the instructions from guest space into native space. For example, guest branch, G.Branch.c2 467 does not have access to the GPC of corresponding guest instruction 452, but it does have access to guest address G_Address_Block B 474. Accordingly, offset2′ needs to be adjusted to account for the difference in GPC between Inst C 434 and Branch.c2 instruction 452 (because recall that G_Address_Block B 474 is the guest address corresponding to the start of guest instruction block B 436).
In one embodiment, this adjustment of offset values is made by software during the initial mapping when instruction 452 Branch.c2 is mapped over from guest address space to corresponding instruction 467 G.Branch.c2 in native address space. Accordingly, the value of offset2 from instruction 452 is adjusted to a value of offset2′ for instruction 467. The updated offset value, offset2′, added to guest address, G_Address_Block B 474 will yield the correct branch target address, which can then be added to the GBTR as will be discussed in FIG. 5. Because the branch target address so calculated will be in emulated space, a CLB will be required to convert it to over to a corresponding native space address.
FIG. 5 illustrates the manner in which the pipelined guest branch target register is updated using a prior branch target in accordance with one embodiment of the present invention. During execution, if a guest branch instruction 535 (e.g., instruction 467, G.Branch.c2) is encountered and predicted to be taken, in one embodiment, the GBTR 590 needs to be updated. The offset value determined in software for that instruction (e.g. offset2′), as discussed above, is added to the prior branch target 534 by module 538 to yield a new guest branch target, which is stored in GBTR 590 at entry 539 as the new youngest unretired guest branch. Further, when the new branch target is added to the GBTR, the youngest unretired guest branch pointer 591 to the register is updated to point to the newly added target. As seen from FIG. 5, the new entries are added to the GBTR on a FIFO basis—the first branch entered will also be the first to be retired from the queue.
The embodiments of the present invention therefore advantageously allow resolution of the branch target address earlier in the pipeline (e.g., at the fetch stage) as compared with conventional solutions that wait for the process of the prior branch instructions to finish execution at the back-end of the machine and commit their values.
As stated above, the guest addresses stored in the GBTR can be mapped back to native address space by using a CLB as discussed in detail in U.S. Pat. No. 9,710,387.
Similar to guest branch target 539, the other guest branch targets are also determined using prior guest branch targets. For example, branch target 534 is determined using branch target 533. Branch target 533 is determined using branch target 532, and so forth. As discussed with respect to entry G_Address_Block A 471 in FIG. 4, target 531 (0xA) may either be the starting guest address of the user's code sequence or alternatively, it could be the target of the youngest retired guest branch. If the latter, then entry 531 comprises the oldest unretired guest branch.
It should be noted that all values in the GBTR are updated speculatively. Because register values are updated speculatively, in one embodiment, multiple copies of the GBTR to be maintained in the front-end of the pipeline. Further, in one embodiment, read and write pointers are maintained within the GBTR. In one embodiment, the pointers allow the most current value in the register to be easily retrieved. For example, a pointer 591 is maintained that allows the youngest unretired guest branch to be retrieved from the GBTR. Also, a pointer 592 to the oldest unretired guest branch can be maintained.
In one embodiment, in addition to being updated when new targets are added to the register, the pointers to a GBTR can also be updated on the flush or retirement of an instruction. If an instruction is flushed or retired, both pointers 592 and 591, for example, would need to be updated. To enable flushing, each instruction carries as a tag, which, in one embodiment, can be a pointer to the last branch instruction that updated this register. In a different embodiment, the branch target can itself be appended to the instruction as a tag. For example, as shown in FIG. 5, a tag component 537 gets appended to the instruction component 535 of guest branch 535 before being dispatched to the instruction scheduling unit.
FIG. 6 illustrates the manner in which each instruction fetched is tagged with information about the last branch instruction that updated the guest branch target register in accordance with one embodiment of the present invention. As shown in FIG. 6, the oldest unretired guest branches in the GBTR get retired before the youngest unretired guest branches. So target 0xA is retired prior to target 0xB 632 and so on. When a new instruction 636 is fetched, it will typically get tagged with the branch target of the youngest unretired guest branch 635. This tag 637 can either be a pointer or the actual value of the branch target. The instruction is then dispatched to the scheduler 272. The tagging is advantageous because in case of a pipeline flush, it helps identify the relative position of each instruction. For example, if all instructions between target 0xA 631 and target 0xB 632 needed to be flushed, the tag would enable those instructions to be easily identified.
Further, in one embodiment of the present invention, the tagging is useful for non-branch instructions that operate on the guest program counter value. For example, Inst E′ 466 in FIG. 4 needs the GPC value as an operand. However, the GPC is unavailable in the native address space. Accordingly, tagging every instruction by attaching the current value of the GBTR as an immediate-value to the instruction and sending it along with the instruction is useful because the branch target can be used to calculate the corresponding GPC value for instruction 466 (which is the GPC value for instruction 476 in guest address space). This advantageously enables the register, which is exercised in the back-end of the processor, to be available readily in the front-end of the processor.
The embodiments of the present invention advantageously also eliminate the read-after-write dependency between the guest-branch and the instruction requiring a read of this register. The data is forwarded from the producer to a subsequent consumer. This allows the guest-branch and the subsequent instruction to execute in any order thus eliminating the performance problem stemming from the serialization required as a result of a data dependency.
The embodiments of the present invention provides a low-cost maintenance mechanism wherein an implicit update of the guest branch target registers can be performed. Explicit update of these registers by software requires serialization and flushing of the machine. By comparison, the embodiments of the present invention allows for speculative maintenance of structures aiding in resolving data dependencies in early stages of a microprocessor. This is a significant advantage over conventional OOO processors wherein similar data forwarding cases are handled in the execution unit 212, which resides in the back-end of the machine.
Finally, instruction 6 also demonstrates the retirement order of the branches entered in the GBTR. As mentioned above entries are entered into the GBTR on a FIFO basis. Accordingly, the earliest entered target, e.g. instruction 631 will be the first to be retired.
FIG. 7 depicts a flowchart 700 for an exemplary computer controlled process for performing early dependency resolution and data forwarding for instructions in the native space of an emulated architecture referencing a guest address in accordance with embodiments of the present invention. While the various steps in this flowchart are presented and described sequentially, one of ordinary skill will appreciate that some or all of the steps can be executed in different orders and some or all of the steps can be executed in parallel. Further, in one or more embodiments of the invention, one or more of the steps described below can be omitted, repeated, and/or performed in a different order. Accordingly, the specific arrangement of steps shown in FIG. 7 should not be construed as limiting the scope of the invention. Rather, it will be apparent to persons skilled in the relevant art(s) from the teachings provided herein that other functional flows are within the scope and spirit of the present invention. Flowchart 700 may be described with continued reference to exemplary embodiments described above, though the method is not limited to those embodiments. Process 700 may also be implemented in hardware in one embodiment.
At step 702, a plurality of instructions are mapped from a guest address space to a native address space.
At step 704, the instructions in the native address space begin executing. For each current guest branch instruction that is encountered while fetching the instructions, a branch target value is determined for a prior guest branch by performing a look-up in a GBTR. As mentioned above, this typically takes place at the front-end of the machine, e.g., at the fetch stage. The GBTR, as discussed above, is a series of registers maintained to speculatively store the branch targets of guest branches at the front-end of the machine, e.g., at the fetch stage. The prior guest branch target looked up in the GBTR is used to speculatively determine the branch target for the current guest branch instruction, so that the information regarding where the current branch instruction jumps to is available at the front end of the pipeline. This is in contrast to conventional processors that need to wait for prior guest branches to resolve completely at the back end of the machine before allowing subsequent guest branches to proceed forward.
At step 706, an offset value from a respective current guest branch instruction is added to the target value for the prior guest branch (looked-up in the GBTR) in order to determine the branch target for the respective current guest branch instruction.
Finally, at step 708, a new entry is creating in the GBTR for the newly determined branch target (of the current guest branch instruction) and the GBTR is updated by adding this branch target to the new entry. This entry now becomes the youngest unretired guest branch and the pointer to the youngest unretired guest branch is updated accordingly in the GBTR.
While the foregoing disclosure sets forth various embodiments using specific block diagrams, flowcharts, and examples, each block diagram component, flowchart step, operation, and/or component described and/or illustrated herein may be implemented, individually and/or collectively, using a wide range of hardware, software, or firmware (or any combination thereof) configurations. In addition, any disclosure of components contained within other components should be considered as examples because many other architectures can be implemented to achieve the same functionality.
The process parameters and sequence of steps described and/or illustrated herein are given by way of example only. For example, while the steps illustrated and/or described herein may be shown or discussed in a particular order, these steps do not necessarily need to be performed in the order illustrated or discussed. The various example methods described and/or illustrated herein may also omit one or more of the steps described or illustrated herein or include additional steps in addition to those disclosed.
While various embodiments have been described and/or illustrated herein in the context of fully functional computing systems, one or more of these example embodiments may be distributed as a program product in a variety of forms, regardless of the particular type of computer-readable media used to actually carry out the distribution. The embodiments disclosed herein may also be implemented using software modules that perform certain tasks. These software modules may include script, batch, or other executable files that may be stored on a computer-readable storage medium or in a computing system. These software modules may configure a computing system to perform one or more of the example embodiments disclosed herein. One or more of the software modules disclosed herein may be implemented in a cloud computing environment. Cloud computing environments may provide various services and applications via the Internet. These cloud-based services (e.g., software as a service, platform as a service, infrastructure as a service, etc.) may be accessible through a Web browser or other remote interface. Various functions described herein may be provided through a remote desktop environment or any other cloud-based computing environment.
The foregoing description, for purpose of explanation, has been described with reference to specific embodiments. However, the illustrative discussions above are not intended to be exhaustive or to limit the invention to the precise forms disclosed. Many modifications and variations are possible in view of the above teachings. The embodiments were chosen and described in order to best explain the principles of the invention and its practical applications, to thereby enable others skilled in the art to best utilize the invention and various embodiments with various modifications as may be suited to the particular use contemplated.
Embodiments according to the invention are thus described. While the present disclosure has been described in particular embodiments, it should be appreciated that the invention should not be construed as limited by such embodiments, but rather construed according to the below claims.

Claims (12)

What is claimed is:
1. A microprocessor implemented method of performing early dependency resolution and data forwarding for instructions in a native space of an emulated architecture referencing a guest address, said method comprising:
mapping a plurality of instructions in a guest address space to a corresponding plurality of instructions in a native address space;
for each guest branch instruction in said native address space fetched during execution, performing:
determining a youngest prior guest branch target stored in a guest branch target register, wherein said guest branch target register is operable to speculatively store a plurality of prior guest branch targets in said guest address space corresponding to prior guest branch instructions in said native address space, and wherein said guest branch target register is maintained at a fetch stage of a pipeline;
determining a branch target in said guest address space for a respective guest branch instruction in said native address space by adding an offset value for said respective guest branch instruction to said youngest prior guest branch target, wherein said offset value is an adjusted offset that is adjusted during said mapping to account for a difference in address in said guest address space between an instruction at a beginning of a guest instruction block and a branch instruction in said guest instruction block that corresponds to said respective guest branch instruction; and
creating an entry in said guest branch target register for said branch target, wherein said creating further comprises updating a pointer to said youngest prior guest branch target to point to said branch target in said guest branch target register, wherein said guest branch target register comprises a first-in first-out (FIFO) queue, and wherein further said guest branch target register maintains a pointer to an oldest unretired guest branch target and maintains a pointer to a youngest unretired guest branch target within said guest branch target register.
2. The method of claim 1, further comprises retiring instructions in said guest branch target register in order, wherein said oldest unretired guest branch target is retired first, and wherein said youngest unretired guest branch target is retired last.
3. The method of claim 1, further comprising for each guest branch instruction in said native address space fetched during execution:
appending information associated with said youngest prior guest branch target in a tag field to said respective guest branch instruction; and
transmitting said respective guest branch instruction to a scheduling stage of said pipeline of an out-of-order micro-architecture.
4. The method of claim 1, further comprising for each non-branch instruction in said native address space fetched during execution:
appending information associated with said youngest prior guest branch target in a tag field to a respective non-branch instruction; and
forwarding said respective non-branch instruction to a scheduling stage of said pipeline of an out-of-order micro-architecture.
5. A processor unit configured to perform operations for early dependency resolution and data forwarding for instructions in a native space of an emulated architecture referencing a guest address, the operations comprising:
mapping a plurality of instructions in a guest address space into a corresponding plurality of instructions in a native address space;
for each guest branch instruction in said native address space fetched during execution, performing:
determining a youngest prior guest branch target stored in a guest branch target register, wherein said guest branch target register is operable to speculatively store a plurality of prior guest branch targets in said guest address space corresponding to prior guest branch instructions in said native address space;
determining a branch target in said guest address space for a respective guest branch instruction in said native address space by adding an offset value for said respective guest branch instruction to said youngest prior guest branch target, wherein said offset value is an adjusted offset that is adjusted during said mapping to account for a difference in address in said guest address space between an instruction at a beginning of a guest instruction block and a branch instruction in said guest instruction block that corresponds to said respective guest branch instruction; and
creating an entry in said guest branch target register for said branch target wherein said creating further comprises:
updating a pointer to said youngest prior guest branch target to point to said branch target in said guest branch target register wherein said guest branch target register comprises a first-in first-out (FIFO) queue, and wherein further said guest branch target register maintains a pointer to an oldest unretired guest branch target and maintains a pointer to a youngest unretired guest branch target within said guest branch target register.
6. The processor unit of claim 5, wherein said operations further comprise retiring instructions in said guest branch target register in order, wherein said oldest unretired guest branch target is retired first, and wherein said youngest unretired guest branch target is retired last.
7. The processor unit of claim 5, wherein said operations further comprise for each guest branch instruction in said native address space fetched during execution:
appending information associated with said youngest prior guest branch target in a tag field to said respective guest branch instruction; and
transmitting said respective guest branch instruction to a scheduling stage of a pipeline of an out-of-order micro-architecture.
8. The processor unit of claim 5, wherein said operations further comprise for each non-branch instruction in said native address space fetched during execution:
appending information associated with said youngest prior guest branch target in a tag field to a respective non-branch instruction; and
forwarding said respective non-branch instruction to a scheduling stage of a pipeline of an out-of-order micro-architecture.
9. An apparatus configured to perform early dependency resolution and data forwarding for instructions in a native space of an emulated architecture referencing a guest address, said apparatus comprising:
a memory;
a processor communicatively coupled to said memory, wherein said processor is configured to process instructions out of order, and further wherein said processor is configured to perform operations comprising:
mapping a plurality of instructions in a guest address space into a corresponding plurality of instructions in a native address space;
for each guest branch instruction in said native address space fetched during execution, performing:
determining a youngest prior guest branch target stored in a guest branch target register, wherein said guest branch target register is operable to speculatively store a plurality of prior guest branch targets in said guest address space corresponding to prior guest branch instructions in said native address space;
determining a branch target in said guest address space for a respective guest branch instruction in said native address space by adding an offset value for said respective guest branch instruction to said youngest prior guest branch target, wherein said offset value is an adjusted offset that is adjusted during said mapping to account for a difference in address in said guest address space between an instruction at a beginning of a guest instruction block and a branch instruction in said guest instruction block that corresponds to said respective guest branch instruction; and
creating an entry in said guest branch target register for said branch target wherein said creating further comprises updating a pointer to said youngest prior guest branch target to point to said branch target in said guest branch target register wherein said guest branch target register comprises a first-in first-out (FIFO) queue, and wherein further said guest branch target register maintains a pointer to an oldest unretired guest branch target and maintains a pointer to a youngest unretired guest branch target within said guest branch target register.
10. The apparatus of claim 9, wherein said operations further comprise retiring instructions in said guest branch target register in order, wherein said oldest unretired guest branch target is retired first, and wherein said youngest unretired guest branch target is retired last.
11. The apparatus of claim 9, wherein said operations further comprise for each guest branch instruction in said native address space fetched during execution:
appending information associated with said youngest prior guest branch target in a tag field to said respective guest branch instruction; and
transmitting said respective guest branch instruction to a scheduling stage of a pipeline of an out-of-order micro-architecture.
12. The apparatus of claim 9, wherein said operations further comprise for each non-branch instruction in said native address space fetched during execution:
appending information associated with said youngest prior guest branch target in a tag field to a respective non-branch instruction; and
forwarding said respective non-branch instruction to a scheduling stage of a pipeline of an out-of-order micro-architecture.
US14/211,476 2013-03-15 2014-03-14 Method and apparatus to allow early dependency resolution and data forwarding in a microprocessor Active 2034-08-08 US10514926B2 (en)

Priority Applications (2)

Application Number Priority Date Filing Date Title
US14/211,476 US10514926B2 (en) 2013-03-15 2014-03-14 Method and apparatus to allow early dependency resolution and data forwarding in a microprocessor
US16/671,109 US11294680B2 (en) 2013-03-15 2019-10-31 Determining branch targets for guest branch instructions executed in native address space

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US201361792676P 2013-03-15 2013-03-15
US14/211,476 US10514926B2 (en) 2013-03-15 2014-03-14 Method and apparatus to allow early dependency resolution and data forwarding in a microprocessor

Related Child Applications (1)

Application Number Title Priority Date Filing Date
US16/671,109 Continuation US11294680B2 (en) 2013-03-15 2019-10-31 Determining branch targets for guest branch instructions executed in native address space

Publications (2)

Publication Number Publication Date
US20140281410A1 US20140281410A1 (en) 2014-09-18
US10514926B2 true US10514926B2 (en) 2019-12-24

Family

ID=51533984

Family Applications (2)

Application Number Title Priority Date Filing Date
US14/211,476 Active 2034-08-08 US10514926B2 (en) 2013-03-15 2014-03-14 Method and apparatus to allow early dependency resolution and data forwarding in a microprocessor
US16/671,109 Active US11294680B2 (en) 2013-03-15 2019-10-31 Determining branch targets for guest branch instructions executed in native address space

Family Applications After (1)

Application Number Title Priority Date Filing Date
US16/671,109 Active US11294680B2 (en) 2013-03-15 2019-10-31 Determining branch targets for guest branch instructions executed in native address space

Country Status (3)

Country Link
US (2) US10514926B2 (en)
TW (1) TWI529621B (en)
WO (1) WO2014151652A1 (en)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2012103245A2 (en) 2011-01-27 2012-08-02 Soft Machines Inc. Guest instruction block with near branching and far branching sequence construction to native instruction block
WO2012103367A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Guest to native block address mappings and management of native code storage
WO2012103253A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Multilevel conversion table cache for translating guest instructions to native instructions
WO2012103359A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Hardware acceleration components for translating guest instructions to native instructions
CN108874693B (en) 2011-01-27 2022-09-23 英特尔公司 Guest instruction to native instruction range based mapping using a translation lookaside buffer of a processor
WO2014151691A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. Method and apparatus for guest return address stack emulation supporting speculation
US10467010B2 (en) 2013-03-15 2019-11-05 Intel Corporation Method and apparatus for nearest potential store tagging
WO2014151652A1 (en) 2013-03-15 2014-09-25 Soft Machines Inc Method and apparatus to allow early dependency resolution and data forwarding in a microprocessor
US10198265B2 (en) 2013-03-15 2019-02-05 Intel Corporation Microprocessor for gating a load operation based on entries of a prediction table

Citations (138)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5053952A (en) 1987-06-05 1991-10-01 Wisc Technologies, Inc. Stack-memory-based writable instruction set computer having a single data bus
US5396448A (en) 1991-04-26 1995-03-07 Kabushiki Kaisha Toshiba Associative memory system with hit entry detection circuit
US5546552A (en) 1992-03-31 1996-08-13 Seiko Epson Corporation Method for translating non-native instructions to native instructions and combining them into a final bucket for processing on a host processor
US5623617A (en) 1993-05-07 1997-04-22 Apple Computer, Inc. Method for decoding sequences of guest instructions for a host computer
US5651124A (en) 1995-02-14 1997-07-22 Hal Computer Systems, Inc. Processor structure and method for aggressively scheduling long latency instructions including load/store instructions while maintaining precise state
US5651135A (en) 1994-03-30 1997-07-22 Kabushiki Kaisha Toshiba Multi-way set associative cache system in which the number of lines per set differs and loading depends on access frequency
WO1997037301A1 (en) 1996-04-02 1997-10-09 Advanced Micro Devices, Inc. A microprocessor configured to detect a branch to a dsp routine and to direct a dsp to execute said routine
US5742802A (en) 1996-02-16 1998-04-21 International Business Machines Corporation Method and system for efficiently mapping guest instruction in an emulation assist unit
US5784638A (en) 1996-02-22 1998-07-21 International Business Machines Corporation Computer system supporting control transfers between two architectures
US5870575A (en) 1997-09-22 1999-02-09 International Business Machines Corporation Indirect unconditional branches in data processing system emulation mode
US5893121A (en) 1997-04-23 1999-04-06 Sun Microsystems, Inc. System and method for swapping blocks of tagged stack entries between a tagged stack cache and an untagged main memory storage
US5953520A (en) * 1997-09-22 1999-09-14 International Business Machines Corporation Address translation buffer for data processing system emulation mode
US5956495A (en) 1997-09-22 1999-09-21 International Business Machines Corporation Method and system for processing branch instructions during emulation in a data processing system
US5961639A (en) 1996-12-16 1999-10-05 International Business Machines Corporation Processor and method for dynamically inserting auxiliary instructions within an instruction stream during execution
US5974525A (en) 1997-12-05 1999-10-26 Intel Corporation System for allowing multiple instructions to use the same logical registers by remapping them to separate physical segment registers when the first is being utilized
US5995743A (en) 1997-09-22 1999-11-30 International Business Machines Corporation Method and system for interrupt handling during emulation in a data processing system
US6138225A (en) 1997-12-24 2000-10-24 Intel Corporation Address translation system having first and second translation look aside buffers
US6142682A (en) 1997-06-13 2000-11-07 Telefonaktiebolaget Lm Ericsson Simulation of computer processor
US6202127B1 (en) 1997-11-26 2001-03-13 Compaq Computer Corporation Apparatus for spatial and temporal sampling in a computer memory system
US6205545B1 (en) 1998-04-30 2001-03-20 Hewlett-Packard Company Method and apparatus for using static branch predictions hints with dynamically translated code traces to improve performance
US20010013093A1 (en) 2000-02-08 2001-08-09 Kabushiki Kaisha Toshiba Instruction code conversion unit and information processing system and instruction code generation method
US6305013B1 (en) 1998-04-01 2001-10-16 Nec Corporation Compiling method for generating target program in accordance with target processor type, compiling device, recording medium with compiling program recorded therein and recording medium with conversion table used in compiling recorded therein
US20010037492A1 (en) 2000-03-16 2001-11-01 Holzmann Gerard J. Method and apparatus for automatically extracting verification models
US20020042863A1 (en) 1999-07-29 2002-04-11 Joseph M. Jeddeloh Storing a flushed cache line in a memory buffer of a controller
US20020066081A1 (en) 2000-02-09 2002-05-30 Evelyn Duesterwald Speculative caching scheme for fast emulation through statically predicted execution traces in a caching dynamic translator
US20020066083A1 (en) 1998-12-08 2002-05-30 Patel Mukesh K. Java virtual machine hardware for RISC and CISC processors
US20020083302A1 (en) 2000-10-05 2002-06-27 Nevill Edward Colles Hardware instruction translation within a processor pipeline
US20020100022A1 (en) 2000-05-08 2002-07-25 Holzmann Gerard J. Method and apparatus for automatic verification of properties of a concurrent software system
US20020138712A1 (en) 2001-01-22 2002-09-26 Mitsubishi Denki Kabushiki Kaisha Data processing device with instruction translator and memory interface device
US6463582B1 (en) 1998-10-21 2002-10-08 Fujitsu Limited Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method
US20020194464A1 (en) * 2001-05-04 2002-12-19 Ip First Llc Speculative branch target address cache with selective override by seconday predictor based on branch instruction type
US20020199091A1 (en) 2001-06-20 2002-12-26 Fujitsu Limited Apparatus for branch prediction based on history table
US20030046519A1 (en) 2001-07-19 2003-03-06 Richardson Nicholas J. Progressive instruction folding in a processor with fast instruction decode
US20030120906A1 (en) 2001-12-21 2003-06-26 Jourdan Stephan J. Return address stack
US6594728B1 (en) 1994-10-14 2003-07-15 Mips Technologies, Inc. Cache memory with dual-way arrays and multiplexed parallel output
US20030191792A1 (en) 1998-04-08 2003-10-09 Hiroyuki Waki High speed virtual machine and compiler
US20040044880A1 (en) 2001-05-02 2004-03-04 International Business Machines Corporation Method and apparatus for transferring control in a computer system with dynamic compilation capability
US6711672B1 (en) 2000-09-22 2004-03-23 Vmware, Inc. Method and system for implementing subroutine calls and returns in binary translation sub-systems of computers
US20040128658A1 (en) 2002-12-27 2004-07-01 Guei-Yuan Lueh Exception handling with stack trace cache
US20040133769A1 (en) 2002-12-24 2004-07-08 Shailender Chaudhry Generating prefetches by speculatively executing code through hardware scout threading
US20040133760A1 (en) 2003-01-06 2004-07-08 Thimmannagari Chandra M.R. Replacement algorithm for a replicated fully associative translation look-aside buffer
US20040154006A1 (en) 2003-01-28 2004-08-05 Taketo Heishi Compiler apparatus and compilation method
US6813763B1 (en) 2000-03-24 2004-11-02 Fujitsu Limited Program conversion device for increasing hit rate of branch prediction and method therefor
EP1555617A2 (en) 2004-01-16 2005-07-20 IP-First LLC Microprocessor with variable latency stack cache
US6928641B1 (en) 1999-10-08 2005-08-09 Texas Instruments Incorporated Method and system for far branch and call instructions
US20050240731A1 (en) 2004-04-22 2005-10-27 Steely Simon C Jr Managing a multi-way associative cache
US20060026408A1 (en) * 2004-07-30 2006-02-02 Dale Morris Run-time updating of prediction hint instructions
US20060026365A1 (en) 2004-07-30 2006-02-02 Fujitsu Limited Information processing apparatus and software pre-fetch control method
US20060112261A1 (en) 2004-11-22 2006-05-25 Yourst Matt T Method and apparatus for incremental commitment to architectural state in a microprocessor
US20060117308A1 (en) 2002-08-30 2006-06-01 Renesas Technology Corp. Data processing apparatus and ic card
US7069413B1 (en) 2003-01-29 2006-06-27 Vmware, Inc. Method and system for performing virtual to physical address translations in a virtual machine monitor
US7080366B2 (en) 1998-11-16 2006-07-18 Esmertec Ag Dynamic compiler and method of compiling code to generate dominant path and to handle exceptions
CN1823323A (en) 2003-07-15 2006-08-23 可递有限公司 Method and apparatus for performing native binding
US7107437B1 (en) * 2000-06-30 2006-09-12 Intel Corporation Branch target buffer (BTB) including a speculative BTB (SBTB) and an architectural BTB (ABTB)
US20060206687A1 (en) 2005-03-08 2006-09-14 Microsoft Corporation Method and system for a second level address translation in a virtual machine environment
US7111145B1 (en) 2003-03-25 2006-09-19 Vmware, Inc. TLB miss fault handler and method for accessing multiple page tables
US20060224816A1 (en) 2005-03-31 2006-10-05 Koichi Yamada Method and apparatus for managing virtual addresses
US20070006178A1 (en) 2005-05-12 2007-01-04 Microsoft Corporation Function-level just-in-time translation engine with multiple pass optimization
US20070079296A1 (en) 2005-09-30 2007-04-05 Zhiyuan Li Compressing "warm" code in a dynamic binary translation environment
US7203932B1 (en) 2002-12-30 2007-04-10 Transmeta Corporation Method and system for using idiom recognition during a software translation process
US7225436B1 (en) 1998-12-08 2007-05-29 Nazomi Communications Inc. Java hardware accelerator using microcode engine
US20070124736A1 (en) 2005-11-28 2007-05-31 Ron Gabor Acceleration threads on idle OS-visible thread execution units
US20070174717A1 (en) 2006-01-10 2007-07-26 Sun Microsystems, Inc. Approach for testing instruction TLB using user/application level techniques
TWI287801B (en) 2006-01-13 2007-10-01 Optimum Care Int Tech Inc Memory module having address transforming function and method for controlling memory
US7278030B1 (en) 2003-03-03 2007-10-02 Vmware, Inc. Virtualization system for computers having multiple protection mechanisms
US20070234358A1 (en) 2006-03-31 2007-10-04 Naoya Hattori Program for controlling a virtual computer and computer system for virtulization technology
US20070283125A1 (en) 2006-06-05 2007-12-06 Sun Microsystems, Inc. Dynamic selection of memory virtualization techniques
US20080028195A1 (en) 2001-06-18 2008-01-31 Mips Technologies, Inc. Method and Apparatus for Saving and Restoring Processor Register Values and Allocating and Deallocating Stack Memory
US20080288238A1 (en) 2007-05-14 2008-11-20 International Business Machines Corporation Computing System with Guest Code Support of Transactional Memory
US20080301420A1 (en) 2007-06-04 2008-12-04 Nec Electronic Corporation Branch prediction control device having return address stack and method of branch prediction
US20080320286A1 (en) 1999-12-02 2008-12-25 International Business Machines Corporation Dynamic object-level code translation for improved performance of a computer processor
US20090007105A1 (en) 2007-06-29 2009-01-01 Microsoft Corporation Updating Offline Virtual Machines or VM Images
US20090049234A1 (en) 2007-08-14 2009-02-19 Samsung Electronics Co., Ltd. Solid state memory (ssm), computer system including an ssm, and method of operating an ssm
US20090089488A1 (en) 2007-09-28 2009-04-02 Kabushiki Kaisha Toshiba Memory system, memory read method and program
US20090119493A1 (en) 2007-11-06 2009-05-07 Vmware, Inc. Using Branch Instruction Counts to Facilitate Replay of Virtual Machine Instruction Execution
US20090164991A1 (en) 2007-12-21 2009-06-25 Souichi Takashige Computer virtualization apparatus and program and method therefor
US20090172642A1 (en) 2007-12-28 2009-07-02 Hon Hai Precision Industry Co., Ltd. System and method for debugging a computer program
US20090182985A1 (en) 2008-01-11 2009-07-16 International Business Machines Corporation Move Facility and Instructions Therefore
US20090182973A1 (en) 2008-01-11 2009-07-16 International Business Machines Corporation Dynamic address translation with load real address
US20090187697A1 (en) 2008-01-22 2009-07-23 Serebrin Benjamin C Execute-Only Memory and Mechanism Enabling Execution From Execute-Only Memory for Minivisor
US20090187731A1 (en) 2008-01-17 2009-07-23 International Business Machines Corporation Method for Address Translation in Virtual Machines
US7568189B2 (en) 2006-05-03 2009-07-28 Sony Computer Entertainment Inc. Code translation and pipeline optimization
US7571090B2 (en) 2004-09-30 2009-08-04 Intel Corporation Emulating a host architecture in guest firmware
CN101506773A (en) 2006-08-31 2009-08-12 高通股份有限公司 Methods and apparatus for emulating the branch prediction behavior of an explicit subroutine call
US7577944B2 (en) 2002-03-18 2009-08-18 Hewlett-Packard Development Company, L.P. Unbundling, translation and rebundling of instruction bundles in an instruction stream
US20090228882A1 (en) 2006-03-30 2009-09-10 Yun Wang Method and apparatus for supporting heterogeneous virtualization
US7590982B1 (en) 2003-12-17 2009-09-15 Vmware, Inc. System and method for virtualizing processor and interrupt priorities
US20090248611A1 (en) 2008-03-28 2009-10-01 Vmware, Inc. Trace Collection for a Virtual Machine
US20090254709A1 (en) 2003-09-30 2009-10-08 Vmware, Inc. Prediction Mechanism for Subroutine Returns in Binary Translation Sub-Systems of Computers
US7617493B2 (en) 2007-01-23 2009-11-10 International Business Machines Corporation Defining memory indifferent trace handles
US20090300645A1 (en) 2008-05-30 2009-12-03 Vmware, Inc. Virtualization with In-place Translation
US7644210B1 (en) 2000-06-19 2010-01-05 John Banning Method and system for storing and retrieving a translation of target program instruction from a host processor using fast look-up of indirect branch destination in a dynamic translation system
US20100058358A1 (en) 2008-08-27 2010-03-04 International Business Machines Corporation Method and apparatus for managing software controlled cache of translating the physical memory access of a virtual machine between different levels of translation entities
US20100115497A1 (en) 2008-11-05 2010-05-06 Sun Microsystems, Inc. Handling signals and exceptions in a dynamic translation environment
US7734895B1 (en) 2005-04-28 2010-06-08 Massachusetts Institute Of Technology Configuring sets of processor cores for processing instructions
US20100153662A1 (en) 2008-12-12 2010-06-17 Sun Microsystems, Inc. Facilitating gated stores without data bypass
US20100153690A1 (en) 2008-12-12 2010-06-17 Sun Microsystems, Inc. Using register rename maps to facilitate precise exception semantics
US20100161875A1 (en) 2008-12-10 2010-06-24 International Business Machines Corporation Simulator and simulating method for running guest program in host
US20100275049A1 (en) 2009-04-24 2010-10-28 International Business Machines Corporation Power conservation in vertically-striped nuca caches
US20100274973A1 (en) 2009-04-24 2010-10-28 International Business Machines Corporation Data reorganization in non-uniform cache access caches
US20100333090A1 (en) 2009-06-30 2010-12-30 Sun Microsystems, Inc. Method and apparatus for protecting translated code in a virtual machine
US7877741B2 (en) 2005-04-29 2011-01-25 Industrial Technology Research Institute Method and corresponding apparatus for compiling high-level languages into specific processor architectures
US20110023027A1 (en) 2009-07-24 2011-01-27 Kegel Andrew G I/o memory management unit including multilevel address translation for i/o and computation offload
US20110071814A1 (en) * 2009-09-18 2011-03-24 International Business Machines Corporation Self Initialized Host Cell Spatially Aware Emulation of a Computer Instruction Set
US20110112820A1 (en) 2009-11-09 2011-05-12 International Business Machines Corporation Reusing Invalidated Traces in a System Emulator
US20110113223A1 (en) * 2009-11-06 2011-05-12 International Business Machines Corporation Branch target buffer for emulation environments
US20110153307A1 (en) 2009-12-23 2011-06-23 Sebastian Winkel Transitioning From Source Instruction Set Architecture (ISA) Code To Translated Code In A Partial Emulation Environment
US20110231593A1 (en) 2010-03-19 2011-09-22 Kabushiki Kaisha Toshiba Virtual address cache memory, processor and multiprocessor
US20110238962A1 (en) 2010-03-23 2011-09-29 International Business Machines Corporation Register Checkpointing for Speculative Modes of Execution in Out-of-Order Processors
US20110320756A1 (en) 2010-06-23 2011-12-29 International Business Machines Corporation Runtime determination of translation formats for adapter functions
US20110321061A1 (en) 2010-06-23 2011-12-29 International Business Machines Corporation Converting a message signaled interruption into an i/o adapter event notification
US8190664B2 (en) 2007-04-26 2012-05-29 International Business Machines Corporation Employing a mask field of an instruction to encode a sign of a result of the instruction
US20120198209A1 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Guest instruction block with near branching and far branching sequence construction to native instruction block
US20120198122A1 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Guest to native block address mappings and management of native code storage
US20120198168A1 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Variable caching structure for managing physical storage
US20120198157A1 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Guest instruction to native instruction range based mapping using a conversion look aside buffer of a processor
US8301434B2 (en) 2009-09-18 2012-10-30 International Buisness Machines Corporation Host cell spatially aware emulation of a guest wild branch
US20120297109A1 (en) 2011-05-17 2012-11-22 International Business Machines Corporation Facilitating data coherency using in-memory tag bits and faulting stores
US20130024619A1 (en) 2011-01-27 2013-01-24 Soft Machines, Inc. Multilevel conversion table cache for translating guest instructions to native instructions
US20130024661A1 (en) 2011-01-27 2013-01-24 Soft Machines, Inc. Hardware acceleration components for translating guest instructions to native instructions
US8370819B2 (en) 2005-03-25 2013-02-05 Microsoft Corporation Mechanism to store information describing a virtual machine in a virtual disk image
US8428930B2 (en) 2009-09-18 2013-04-23 International Business Machines Corporation Page mapped spatially aware emulation of a computer instruction set
US8438334B2 (en) 2009-12-22 2013-05-07 International Business Machines Corporation Hybrid storage subsystem with mixed placement of file contents
US20130138931A1 (en) 2011-11-28 2013-05-30 Ramesh B. Gunna Maintaining the integrity of an execution return address stack
US20130246766A1 (en) 2012-03-15 2013-09-19 International Business Machines Corporation Transforming non-contiguous instruction specifiers to contiguous instruction specifiers
US8555041B2 (en) 2005-06-10 2013-10-08 Atmel Corporation Method for performing a return operation in parallel with setting status flags based on a return value register test
US8561040B2 (en) 2009-03-10 2013-10-15 Oracle America, Inc. One-pass compilation of virtual instructions
US8589143B2 (en) 2009-12-17 2013-11-19 Electronics And Telecommunications Research Institute Virtualization apparatus and processing method thereof
US20130339672A1 (en) 2012-06-15 2013-12-19 International Business Machines Corporation Next Instruction Access Intent Instruction
US20140025893A1 (en) 2012-07-20 2014-01-23 International Business Machines Corporation Control flow management for execution of dynamically translated non-native code in a virtual hosting environment
US8769241B2 (en) 2009-12-04 2014-07-01 Marvell World Trade Ltd. Virtualization of non-volatile memory and hard disk drive as a single logical drive
US8819647B2 (en) 2008-01-25 2014-08-26 International Business Machines Corporation Performance improvements for nested virtual machines
US8832354B2 (en) 2009-03-25 2014-09-09 Apple Inc. Use of host system resources by memory controller
US20140258696A1 (en) * 2013-03-05 2014-09-11 Qualcomm Incorporated Strided target address predictor (stap) for indirect branches
US20140281388A1 (en) 2013-03-15 2014-09-18 Soft Machines, Inc. Method and Apparatus for Guest Return Address Stack Emulation Supporting Speculation
US9158566B2 (en) 2009-09-18 2015-10-13 International Business Machines Corporation Page mapped spatially aware emulation of computer instruction set
US20160026488A1 (en) 2011-05-16 2016-01-28 Microsoft Technology Licensing, Llc Instruction set emulation for guest operating systems
US20170003967A1 (en) * 2013-11-27 2017-01-05 Shanghai Xinhao Microelectronics Co. Ltd. System and method for instruction set conversion

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5761467A (en) 1993-09-28 1998-06-02 Mitsubishi Denki Kabushiki Kaisha System for committing execution results when branch conditions coincide with predetermined commit conditions specified in the instruction field
US6327650B1 (en) 1999-02-12 2001-12-04 Vsli Technology, Inc. Pipelined multiprocessing with upstream processor concurrently writing to local register and to register of downstream processor
US6647489B1 (en) * 2000-06-08 2003-11-11 Ip-First, Llc Compare branch instruction pairing within a single integer pipeline
US7200740B2 (en) 2001-05-04 2007-04-03 Ip-First, Llc Apparatus and method for speculatively performing a return instruction in a microprocessor
CN100478915C (en) 2007-09-20 2009-04-15 福建星网锐捷网络有限公司 CPU abnormal point positioning diagnosis method based MIPS structure
US7971044B2 (en) 2007-10-05 2011-06-28 Qualcomm Incorporated Link stack repair of erroneous speculative update
US20100161950A1 (en) * 2008-12-24 2010-06-24 Sun Microsystems, Inc. Semi-absolute branch instructions for efficient computers
WO2014151652A1 (en) 2013-03-15 2014-09-25 Soft Machines Inc Method and apparatus to allow early dependency resolution and data forwarding in a microprocessor
US9477453B1 (en) 2015-06-24 2016-10-25 Intel Corporation Technologies for shadow stack manipulation for binary translation systems

Patent Citations (152)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5053952A (en) 1987-06-05 1991-10-01 Wisc Technologies, Inc. Stack-memory-based writable instruction set computer having a single data bus
US5396448A (en) 1991-04-26 1995-03-07 Kabushiki Kaisha Toshiba Associative memory system with hit entry detection circuit
US5546552A (en) 1992-03-31 1996-08-13 Seiko Epson Corporation Method for translating non-native instructions to native instructions and combining them into a final bucket for processing on a host processor
US5623617A (en) 1993-05-07 1997-04-22 Apple Computer, Inc. Method for decoding sequences of guest instructions for a host computer
US5651135A (en) 1994-03-30 1997-07-22 Kabushiki Kaisha Toshiba Multi-way set associative cache system in which the number of lines per set differs and loading depends on access frequency
US6594728B1 (en) 1994-10-14 2003-07-15 Mips Technologies, Inc. Cache memory with dual-way arrays and multiplexed parallel output
US5651124A (en) 1995-02-14 1997-07-22 Hal Computer Systems, Inc. Processor structure and method for aggressively scheduling long latency instructions including load/store instructions while maintaining precise state
US5742802A (en) 1996-02-16 1998-04-21 International Business Machines Corporation Method and system for efficiently mapping guest instruction in an emulation assist unit
US5784638A (en) 1996-02-22 1998-07-21 International Business Machines Corporation Computer system supporting control transfers between two architectures
WO1997037301A1 (en) 1996-04-02 1997-10-09 Advanced Micro Devices, Inc. A microprocessor configured to detect a branch to a dsp routine and to direct a dsp to execute said routine
US5961639A (en) 1996-12-16 1999-10-05 International Business Machines Corporation Processor and method for dynamically inserting auxiliary instructions within an instruction stream during execution
US5893121A (en) 1997-04-23 1999-04-06 Sun Microsystems, Inc. System and method for swapping blocks of tagged stack entries between a tagged stack cache and an untagged main memory storage
US6142682A (en) 1997-06-13 2000-11-07 Telefonaktiebolaget Lm Ericsson Simulation of computer processor
US5870575A (en) 1997-09-22 1999-02-09 International Business Machines Corporation Indirect unconditional branches in data processing system emulation mode
US5953520A (en) * 1997-09-22 1999-09-14 International Business Machines Corporation Address translation buffer for data processing system emulation mode
US5956495A (en) 1997-09-22 1999-09-21 International Business Machines Corporation Method and system for processing branch instructions during emulation in a data processing system
US5995743A (en) 1997-09-22 1999-11-30 International Business Machines Corporation Method and system for interrupt handling during emulation in a data processing system
US6202127B1 (en) 1997-11-26 2001-03-13 Compaq Computer Corporation Apparatus for spatial and temporal sampling in a computer memory system
US5974525A (en) 1997-12-05 1999-10-26 Intel Corporation System for allowing multiple instructions to use the same logical registers by remapping them to separate physical segment registers when the first is being utilized
US6138225A (en) 1997-12-24 2000-10-24 Intel Corporation Address translation system having first and second translation look aside buffers
US6305013B1 (en) 1998-04-01 2001-10-16 Nec Corporation Compiling method for generating target program in accordance with target processor type, compiling device, recording medium with compiling program recorded therein and recording medium with conversion table used in compiling recorded therein
US20030191792A1 (en) 1998-04-08 2003-10-09 Hiroyuki Waki High speed virtual machine and compiler
US6205545B1 (en) 1998-04-30 2001-03-20 Hewlett-Packard Company Method and apparatus for using static branch predictions hints with dynamically translated code traces to improve performance
US6463582B1 (en) 1998-10-21 2002-10-08 Fujitsu Limited Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method
US7080366B2 (en) 1998-11-16 2006-07-18 Esmertec Ag Dynamic compiler and method of compiling code to generate dominant path and to handle exceptions
US7225436B1 (en) 1998-12-08 2007-05-29 Nazomi Communications Inc. Java hardware accelerator using microcode engine
US20020066083A1 (en) 1998-12-08 2002-05-30 Patel Mukesh K. Java virtual machine hardware for RISC and CISC processors
US20020042863A1 (en) 1999-07-29 2002-04-11 Joseph M. Jeddeloh Storing a flushed cache line in a memory buffer of a controller
US6928641B1 (en) 1999-10-08 2005-08-09 Texas Instruments Incorporated Method and system for far branch and call instructions
US20080320286A1 (en) 1999-12-02 2008-12-25 International Business Machines Corporation Dynamic object-level code translation for improved performance of a computer processor
US20010013093A1 (en) 2000-02-08 2001-08-09 Kabushiki Kaisha Toshiba Instruction code conversion unit and information processing system and instruction code generation method
US20020066081A1 (en) 2000-02-09 2002-05-30 Evelyn Duesterwald Speculative caching scheme for fast emulation through statically predicted execution traces in a caching dynamic translator
US20010037492A1 (en) 2000-03-16 2001-11-01 Holzmann Gerard J. Method and apparatus for automatically extracting verification models
US6813763B1 (en) 2000-03-24 2004-11-02 Fujitsu Limited Program conversion device for increasing hit rate of branch prediction and method therefor
US20020100022A1 (en) 2000-05-08 2002-07-25 Holzmann Gerard J. Method and apparatus for automatic verification of properties of a concurrent software system
US7644210B1 (en) 2000-06-19 2010-01-05 John Banning Method and system for storing and retrieving a translation of target program instruction from a host processor using fast look-up of indirect branch destination in a dynamic translation system
US7107437B1 (en) * 2000-06-30 2006-09-12 Intel Corporation Branch target buffer (BTB) including a speculative BTB (SBTB) and an architectural BTB (ABTB)
US6711672B1 (en) 2000-09-22 2004-03-23 Vmware, Inc. Method and system for implementing subroutine calls and returns in binary translation sub-systems of computers
US20020083302A1 (en) 2000-10-05 2002-06-27 Nevill Edward Colles Hardware instruction translation within a processor pipeline
US7613903B2 (en) 2001-01-22 2009-11-03 Renesas Technology Corporation Data processing device with instruction translator and memory interface device to translate non-native instructions into native instructions for processor
US20020138712A1 (en) 2001-01-22 2002-09-26 Mitsubishi Denki Kabushiki Kaisha Data processing device with instruction translator and memory interface device
US20040044880A1 (en) 2001-05-02 2004-03-04 International Business Machines Corporation Method and apparatus for transferring control in a computer system with dynamic compilation capability
US20020194464A1 (en) * 2001-05-04 2002-12-19 Ip First Llc Speculative branch target address cache with selective override by seconday predictor based on branch instruction type
US20080028195A1 (en) 2001-06-18 2008-01-31 Mips Technologies, Inc. Method and Apparatus for Saving and Restoring Processor Register Values and Allocating and Deallocating Stack Memory
US20020199091A1 (en) 2001-06-20 2002-12-26 Fujitsu Limited Apparatus for branch prediction based on history table
US20030046519A1 (en) 2001-07-19 2003-03-06 Richardson Nicholas J. Progressive instruction folding in a processor with fast instruction decode
US20030120906A1 (en) 2001-12-21 2003-06-26 Jourdan Stephan J. Return address stack
US6898699B2 (en) 2001-12-21 2005-05-24 Intel Corporation Return address stack including speculative return address buffer with back pointers
US7577944B2 (en) 2002-03-18 2009-08-18 Hewlett-Packard Development Company, L.P. Unbundling, translation and rebundling of instruction bundles in an instruction stream
US20060117308A1 (en) 2002-08-30 2006-06-01 Renesas Technology Corp. Data processing apparatus and ic card
US20040133769A1 (en) 2002-12-24 2004-07-08 Shailender Chaudhry Generating prefetches by speculatively executing code through hardware scout threading
US20040128658A1 (en) 2002-12-27 2004-07-01 Guei-Yuan Lueh Exception handling with stack trace cache
US7203932B1 (en) 2002-12-30 2007-04-10 Transmeta Corporation Method and system for using idiom recognition during a software translation process
US20040133760A1 (en) 2003-01-06 2004-07-08 Thimmannagari Chandra M.R. Replacement algorithm for a replicated fully associative translation look-aside buffer
US20040154006A1 (en) 2003-01-28 2004-08-05 Taketo Heishi Compiler apparatus and compilation method
US7069413B1 (en) 2003-01-29 2006-06-27 Vmware, Inc. Method and system for performing virtual to physical address translations in a virtual machine monitor
US7278030B1 (en) 2003-03-03 2007-10-02 Vmware, Inc. Virtualization system for computers having multiple protection mechanisms
US7111145B1 (en) 2003-03-25 2006-09-19 Vmware, Inc. TLB miss fault handler and method for accessing multiple page tables
CN1823323A (en) 2003-07-15 2006-08-23 可递有限公司 Method and apparatus for performing native binding
US20090254709A1 (en) 2003-09-30 2009-10-08 Vmware, Inc. Prediction Mechanism for Subroutine Returns in Binary Translation Sub-Systems of Computers
US7590982B1 (en) 2003-12-17 2009-09-15 Vmware, Inc. System and method for virtualizing processor and interrupt priorities
EP1555617A2 (en) 2004-01-16 2005-07-20 IP-First LLC Microprocessor with variable latency stack cache
US20050240731A1 (en) 2004-04-22 2005-10-27 Steely Simon C Jr Managing a multi-way associative cache
US20060026365A1 (en) 2004-07-30 2006-02-02 Fujitsu Limited Information processing apparatus and software pre-fetch control method
US20060026408A1 (en) * 2004-07-30 2006-02-02 Dale Morris Run-time updating of prediction hint instructions
US7571090B2 (en) 2004-09-30 2009-08-04 Intel Corporation Emulating a host architecture in guest firmware
US8131534B2 (en) 2004-09-30 2012-03-06 Intel Corporation Emulating a host architecture in guest firmware
US20060112261A1 (en) 2004-11-22 2006-05-25 Yourst Matt T Method and apparatus for incremental commitment to architectural state in a microprocessor
US7428626B2 (en) 2005-03-08 2008-09-23 Microsoft Corporation Method and system for a second level address translation in a virtual machine environment
US20060206687A1 (en) 2005-03-08 2006-09-14 Microsoft Corporation Method and system for a second level address translation in a virtual machine environment
US8370819B2 (en) 2005-03-25 2013-02-05 Microsoft Corporation Mechanism to store information describing a virtual machine in a virtual disk image
US20060224816A1 (en) 2005-03-31 2006-10-05 Koichi Yamada Method and apparatus for managing virtual addresses
US7734895B1 (en) 2005-04-28 2010-06-08 Massachusetts Institute Of Technology Configuring sets of processor cores for processing instructions
US7877741B2 (en) 2005-04-29 2011-01-25 Industrial Technology Research Institute Method and corresponding apparatus for compiling high-level languages into specific processor architectures
US20070006178A1 (en) 2005-05-12 2007-01-04 Microsoft Corporation Function-level just-in-time translation engine with multiple pass optimization
US8555041B2 (en) 2005-06-10 2013-10-08 Atmel Corporation Method for performing a return operation in parallel with setting status flags based on a return value register test
US20070079296A1 (en) 2005-09-30 2007-04-05 Zhiyuan Li Compressing "warm" code in a dynamic binary translation environment
US20070124736A1 (en) 2005-11-28 2007-05-31 Ron Gabor Acceleration threads on idle OS-visible thread execution units
US20070174717A1 (en) 2006-01-10 2007-07-26 Sun Microsystems, Inc. Approach for testing instruction TLB using user/application level techniques
TWI287801B (en) 2006-01-13 2007-10-01 Optimum Care Int Tech Inc Memory module having address transforming function and method for controlling memory
US20090228882A1 (en) 2006-03-30 2009-09-10 Yun Wang Method and apparatus for supporting heterogeneous virtualization
US20120089982A1 (en) 2006-03-30 2012-04-12 Yun Wang Supporting heterogeneous virtualization
US8099730B2 (en) 2006-03-30 2012-01-17 Intel Corporation Heterogeneous virtualization of host and guest OS having different register sizes using translation layer to extract device port numbers for host OS system memory addresses
US20070234358A1 (en) 2006-03-31 2007-10-04 Naoya Hattori Program for controlling a virtual computer and computer system for virtulization technology
US7568189B2 (en) 2006-05-03 2009-07-28 Sony Computer Entertainment Inc. Code translation and pipeline optimization
US7752417B2 (en) 2006-06-05 2010-07-06 Oracle America, Inc. Dynamic selection of memory virtualization techniques
US20070283125A1 (en) 2006-06-05 2007-12-06 Sun Microsystems, Inc. Dynamic selection of memory virtualization techniques
CN101506773A (en) 2006-08-31 2009-08-12 高通股份有限公司 Methods and apparatus for emulating the branch prediction behavior of an explicit subroutine call
US7617493B2 (en) 2007-01-23 2009-11-10 International Business Machines Corporation Defining memory indifferent trace handles
US8190664B2 (en) 2007-04-26 2012-05-29 International Business Machines Corporation Employing a mask field of an instruction to encode a sign of a result of the instruction
US20080288238A1 (en) 2007-05-14 2008-11-20 International Business Machines Corporation Computing System with Guest Code Support of Transactional Memory
US20080301420A1 (en) 2007-06-04 2008-12-04 Nec Electronic Corporation Branch prediction control device having return address stack and method of branch prediction
US20090007105A1 (en) 2007-06-29 2009-01-01 Microsoft Corporation Updating Offline Virtual Machines or VM Images
US20090049234A1 (en) 2007-08-14 2009-02-19 Samsung Electronics Co., Ltd. Solid state memory (ssm), computer system including an ssm, and method of operating an ssm
US20090089488A1 (en) 2007-09-28 2009-04-02 Kabushiki Kaisha Toshiba Memory system, memory read method and program
US20090119493A1 (en) 2007-11-06 2009-05-07 Vmware, Inc. Using Branch Instruction Counts to Facilitate Replay of Virtual Machine Instruction Execution
US20090164991A1 (en) 2007-12-21 2009-06-25 Souichi Takashige Computer virtualization apparatus and program and method therefor
US20090172642A1 (en) 2007-12-28 2009-07-02 Hon Hai Precision Industry Co., Ltd. System and method for debugging a computer program
US20090182985A1 (en) 2008-01-11 2009-07-16 International Business Machines Corporation Move Facility and Instructions Therefore
US20090182973A1 (en) 2008-01-11 2009-07-16 International Business Machines Corporation Dynamic address translation with load real address
US20090187731A1 (en) 2008-01-17 2009-07-23 International Business Machines Corporation Method for Address Translation in Virtual Machines
US20090187902A1 (en) 2008-01-22 2009-07-23 Serebrin Benjamin C Caching Binary Translations for Virtual Machine Guest
US20090187697A1 (en) 2008-01-22 2009-07-23 Serebrin Benjamin C Execute-Only Memory and Mechanism Enabling Execution From Execute-Only Memory for Minivisor
US8819647B2 (en) 2008-01-25 2014-08-26 International Business Machines Corporation Performance improvements for nested virtual machines
US20090248611A1 (en) 2008-03-28 2009-10-01 Vmware, Inc. Trace Collection for a Virtual Machine
US20090300645A1 (en) 2008-05-30 2009-12-03 Vmware, Inc. Virtualization with In-place Translation
US20090300263A1 (en) 2008-05-30 2009-12-03 Vmware, Inc. Virtualization with Merged Guest Page Table and Shadow Page Directory
US20100058358A1 (en) 2008-08-27 2010-03-04 International Business Machines Corporation Method and apparatus for managing software controlled cache of translating the physical memory access of a virtual machine between different levels of translation entities
US20100115497A1 (en) 2008-11-05 2010-05-06 Sun Microsystems, Inc. Handling signals and exceptions in a dynamic translation environment
US20100161875A1 (en) 2008-12-10 2010-06-24 International Business Machines Corporation Simulator and simulating method for running guest program in host
US20100153662A1 (en) 2008-12-12 2010-06-17 Sun Microsystems, Inc. Facilitating gated stores without data bypass
US8959277B2 (en) 2008-12-12 2015-02-17 Oracle America, Inc. Facilitating gated stores without data bypass
US20100153690A1 (en) 2008-12-12 2010-06-17 Sun Microsystems, Inc. Using register rename maps to facilitate precise exception semantics
US8561040B2 (en) 2009-03-10 2013-10-15 Oracle America, Inc. One-pass compilation of virtual instructions
US8832354B2 (en) 2009-03-25 2014-09-09 Apple Inc. Use of host system resources by memory controller
US20100274973A1 (en) 2009-04-24 2010-10-28 International Business Machines Corporation Data reorganization in non-uniform cache access caches
US20100275049A1 (en) 2009-04-24 2010-10-28 International Business Machines Corporation Power conservation in vertically-striped nuca caches
US20100333090A1 (en) 2009-06-30 2010-12-30 Sun Microsystems, Inc. Method and apparatus for protecting translated code in a virtual machine
US8799879B2 (en) 2009-06-30 2014-08-05 Oracle America, Inc. Method and apparatus for protecting translated code in a virtual machine
US20110023027A1 (en) 2009-07-24 2011-01-27 Kegel Andrew G I/o memory management unit including multilevel address translation for i/o and computation offload
US8428930B2 (en) 2009-09-18 2013-04-23 International Business Machines Corporation Page mapped spatially aware emulation of a computer instruction set
US9158566B2 (en) 2009-09-18 2015-10-13 International Business Machines Corporation Page mapped spatially aware emulation of computer instruction set
US20110071814A1 (en) * 2009-09-18 2011-03-24 International Business Machines Corporation Self Initialized Host Cell Spatially Aware Emulation of a Computer Instruction Set
US8301434B2 (en) 2009-09-18 2012-10-30 International Buisness Machines Corporation Host cell spatially aware emulation of a guest wild branch
US20110113223A1 (en) * 2009-11-06 2011-05-12 International Business Machines Corporation Branch target buffer for emulation environments
US20110112820A1 (en) 2009-11-09 2011-05-12 International Business Machines Corporation Reusing Invalidated Traces in a System Emulator
US8769241B2 (en) 2009-12-04 2014-07-01 Marvell World Trade Ltd. Virtualization of non-volatile memory and hard disk drive as a single logical drive
US8589143B2 (en) 2009-12-17 2013-11-19 Electronics And Telecommunications Research Institute Virtualization apparatus and processing method thereof
US8438334B2 (en) 2009-12-22 2013-05-07 International Business Machines Corporation Hybrid storage subsystem with mixed placement of file contents
US20110153307A1 (en) 2009-12-23 2011-06-23 Sebastian Winkel Transitioning From Source Instruction Set Architecture (ISA) Code To Translated Code In A Partial Emulation Environment
US20110231593A1 (en) 2010-03-19 2011-09-22 Kabushiki Kaisha Toshiba Virtual address cache memory, processor and multiprocessor
US20110238962A1 (en) 2010-03-23 2011-09-29 International Business Machines Corporation Register Checkpointing for Speculative Modes of Execution in Out-of-Order Processors
US20110321061A1 (en) 2010-06-23 2011-12-29 International Business Machines Corporation Converting a message signaled interruption into an i/o adapter event notification
US20110320756A1 (en) 2010-06-23 2011-12-29 International Business Machines Corporation Runtime determination of translation formats for adapter functions
US20120198168A1 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Variable caching structure for managing physical storage
US20120198209A1 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Guest instruction block with near branching and far branching sequence construction to native instruction block
US9542187B2 (en) 2011-01-27 2017-01-10 Soft Machines, Inc. Guest instruction block with near branching and far branching sequence construction to native instruction block
US20130024661A1 (en) 2011-01-27 2013-01-24 Soft Machines, Inc. Hardware acceleration components for translating guest instructions to native instructions
US9207960B2 (en) 2011-01-27 2015-12-08 Soft Machines, Inc. Multilevel conversion table cache for translating guest instructions to native instructions
US20120198122A1 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Guest to native block address mappings and management of native code storage
US20130024619A1 (en) 2011-01-27 2013-01-24 Soft Machines, Inc. Multilevel conversion table cache for translating guest instructions to native instructions
TW201250583A (en) 2011-01-27 2012-12-16 Soft Machines Inc Guest instruction to native instruction range based mapping using a conversion look aside buffer of a processor
US20120198157A1 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Guest instruction to native instruction range based mapping using a conversion look aside buffer of a processor
US20160026488A1 (en) 2011-05-16 2016-01-28 Microsoft Technology Licensing, Llc Instruction set emulation for guest operating systems
US20120297109A1 (en) 2011-05-17 2012-11-22 International Business Machines Corporation Facilitating data coherency using in-memory tag bits and faulting stores
US20130138931A1 (en) 2011-11-28 2013-05-30 Ramesh B. Gunna Maintaining the integrity of an execution return address stack
US20130246766A1 (en) 2012-03-15 2013-09-19 International Business Machines Corporation Transforming non-contiguous instruction specifiers to contiguous instruction specifiers
US20130339672A1 (en) 2012-06-15 2013-12-19 International Business Machines Corporation Next Instruction Access Intent Instruction
US20140025893A1 (en) 2012-07-20 2014-01-23 International Business Machines Corporation Control flow management for execution of dynamically translated non-native code in a virtual hosting environment
US20140258696A1 (en) * 2013-03-05 2014-09-11 Qualcomm Incorporated Strided target address predictor (stap) for indirect branches
US20140281388A1 (en) 2013-03-15 2014-09-18 Soft Machines, Inc. Method and Apparatus for Guest Return Address Stack Emulation Supporting Speculation
US20170003967A1 (en) * 2013-11-27 2017-01-05 Shanghai Xinhao Microelectronics Co. Ltd. System and method for instruction set conversion

Non-Patent Citations (127)

* Cited by examiner, † Cited by third party
Title
Abandonment from U.S. Appl. No. 15/042,005, dated Aug. 3, 2018, 2 pages.
Abdallah M., et al., U.S. Appl. No. 13/359,767, filed Jan. 27, 2012, "Guest Instruction to Native Instruction Range Based Mapping Using a Conversion Look Aside Buffer of a Processor," 50 pages.
Advisory Action from U.S. Appl. No. 14/211,655, dated Aug. 28, 2017, 3 pages.
Advisory Action from U.S. Appl. No. 15/208,404, dated May 19, 2017, 2 pages.
Beck L.L.,"System Software," 3rd edition, Section 2.4 and Appendix A SIC/XE Instruction Set and Addressing Modes, 1997, pp. 50-54, 495-499 and p. 93.
Bhargava, et al., "Accelerating Two-Dimensional Page Walks for Virtualized Systems," ACM SIGOPS Operating Systems Review 42.2 (2008), pp. 26-35. Retrieved on [Mar. 19, 2015] Retrieved from the Internet: URL: http://dl.acm.org/citation.cfm?id=1346285.
Bungale, et al., "PinOS: a Programmable Framework for Whole-System Dynamic Instrumentation," Proceedings of the 3rd International Conference on Virtual Execution Environments, ACM, 2007, Retrieved on [Jul. 6, 2015] Retrieved from the Internet: URL: http://dl.acm.org/citation.cfm?id=1254830.
Communication pursuant to Article 94(3) EPC for European Application No. 12739955.8, dated Apr. 14, 2015, 3 pages.
Communication pursuant to Article 94(3) EPC for European Application No. 12739955.8, dated Feb. 22, 2017, 3 pages.
Communication pursuant to Article 94(3) EPC, for European Application No. 14770972.9, dated Mar. 5, 2019, 6 pages.
Du, et al., "Performance Profiling of Virtual Machines," ACM SIGPLAN Notices, Jul. 2011, Retrieved from https://dl.acm.org/citation.cfm?id=1952686 on Sep. 8, 2018, vol. 46 (7), 13 pages.
Duesterwald E., "Design and Engineering of a Dynamic Binary Optimizer," Proceedings of the IEEE, vol. 93(2), 2005, pp. 436-448. Retrieved on [Jul. 9, 2014] from the Internet: URL: http://ieeexplore.ieee.org/stamp.jsp?tp=&arnumber=1386661.
Extended European Search Report for Application No. 14770972.9, dated Mar. 17, 2017, 8 pages.
Extended European Search Report for Application No. EP12739955, dated Aug. 4, 2014, 6 pages.
Final Office Action from U.S. Appl. No. 13/359,767, dated Feb. 26, 2015, 23 pages.
Final Office Action from U.S. Appl. No. 13/359,767, dated May 14, 2014, 32 pages.
Final Office Action from U.S. Appl. No. 13/359,832, dated May 27, 2014, 24 pages.
Final Office Action from U.S. Appl. No. 14/211,655, dated Aug. 9, 2016, 29 pages.
Final Office Action from U.S. Appl. No. 14/211,655, dated Jun. 8, 2017, 41 pages.
Final Office Action from U.S. Appl. No. 14/961,464, dated Jun. 13, 2018, 27 pages.
Final Office Action from U.S. Appl. No. 15/208,404, dated Feb. 15, 2017, 26 pages.
Final Office Action from U.S. Appl. No. 15/208,404, dated Nov. 3, 2017, 35 pages.
Final Office Action from U.S. Appl. No. 15/208,404, dated Sep. 10, 2018, 22 pages.
Final Office Action from U.S. Appl. No. 15/353,549, dated May 10, 2019, pages.
Final Office Action from U.S. Appl. No. 15/354,679, dated Sep. 14, 2017, 39 pages.
Final Office Action from U.S. Appl. No. 15/650,230, dated May 2, 2019, 29 pages.
First Office Action and Search report from foreign counterpart Chinese Patent Application No. 201480021703.0, dated Dec. 15, 2017, 30 pages. (translation available only for office action).
First Office Action from foreign counterpart China Patent Application No. 201280012962.8, dated May 20, 2016, 15 pages.
Fisher-Ogden J., "Hardware Support for Efficient Virtualization," University of California, San Diego, Tech. Rep (2006), Retrieved on [Jul. 9, 2014] from the Internet: URL: http://dator8.info/2010/27.pdf.
Gligor, et al., "Using Binary Translation in Event Driven Simulation for Fast and Flexible MPSoC Simulation," Proceedings of the 7th IEEE/ACM International Conference on Hardware/Software co-design and system synthesis, ACM, 2009, Retrieved on [Jul. 6, 2015] Retrieved from the Internet: URL: http://dl.acm.org/citation.cfm?id=1629446.
Grant of Patent for Korean Application No. 10-2015-7029321, dated Apr. 28, 2017, 2 pages.
Grant of Patent from foreign counterpart Korean Patent Application No. 1020137022671, dated Mar. 2, 2016, 2 pages.
Guan H., et al., "CoDBT: A Multi-Source Dynamic Binary Translator using Hardware-Software Collaborative Techniques," Journal of Systems Architecture; Shanghai Jiao Tong University, Oct. 2010, vol. 56(10), pp. 500-508.
International Preliminary Report on Patentability for Application No. PCT/US2012/022538, dated Aug. 8, 2013, 8 pages.
International Preliminary Report on Patentability for Application No. PCT/US2012/022589, dated Aug. 8, 2013, 6 pages.
International Preliminary Report on Patentability for Application No. PCT/US2012/022598, dated Aug. 8, 2013, 6 pages.
International Preliminary Report on Patentability for Application No. PCT/US2012/022760, dated Aug. 8, 2013, 6 pages.
International Preliminary Report on Patentability for Application No. PCT/US2012/022773, dated Aug. 8, 2013, 7 pages.
International Preliminary Report on Patentability for Application No. PCT/US2012/022780, dated Aug. 8, 2013, 6 pages.
International Preliminary Report on Patentability for Application No. PCT/US2014/026176, dated Sep. 24, 2015, 6 pages.
International Preliminary Report on Patentability for Application No. PCT/US2014/026252, dated Sep. 24, 2015, 7 pages.
International Search Report and Written Opinion for Application No. PCT/US2012/022538, dated Jul. 30, 2012, 9 pages.
International Search Report and Written Opinion for Application No. PCT/US2012/022589, dated Aug. 29, 2012, 7 pages.
International Search Report and Written Opinion for Application No. PCT/US2012/022598, dated Aug. 28, 2012, 7 pages.
International Search Report and Written Opinion for Application No. PCT/US2012/022760, dated Jul. 16, 2012, 7 pages.
International Search Report and Written Opinion for Application No. PCT/US2012/022773, dated Sep. 20, 2012, 9 pages.
International Search Report and Written Opinion for Application No. PCT/US2012/022780, dated Jul. 31, 2012, 7 pages.
International Search Report and Written Opinion for Application No. PCT/US2014/026176, dated Jun. 27, 2014, 7 pages.
International Search Report and Written Opinion for Application No. PCT/US2014/026252, dated Jun. 27, 2014, 8 pages.
Irvine K.R.,"Assembly Language for Intel-based Computers," 5th edition, 2007, p. 7.
Mihocka, et al., "Virtualization without Direct Execution or Jitting: Designing a Portable Virtual Machine Infrastructure," 1st Workshop on Architectural and Micro-architectural Support for Binary Translation in ISCA-35, 2008. Retrieved on [Feb. 9, 2015] Retrieved from the Internet URL: http://index-of.es/Misc/VirtualizationWithoutHardwareFinal.pdf.
Non-Final Office Action from U.S. Appl. No. 13/359,767, dated Jul. 16, 2015, 28 pages.
Non-Final Office Action from U.S. Appl. No. 13/359,767, dated Oct. 23, 2013, 20 pages.
Non-Final Office Action from U.S. Appl. No. 13/359,767, dated Sep. 23, 2014, 29 pages.
Non-Final Office Action from U.S. Appl. No. 13/359,817, dated Aug. 27, 2014, 16 pages.
Non-Final Office Action from U.S. Appl. No. 13/359,832, dated Oct. 22, 2013, 15 pages.
Non-Final Office Action from U.S. Appl. No. 13/359,832, dated Sep. 23, 2014, 27 pages.
Non-Final Office Action from U.S. Appl. No. 13/359,939, dated Nov. 5, 2013, 6 pages.
Non-Final Office Action from U.S. Appl. No. 13/359,961, dated Dec. 17, 2013, 10 pages.
Non-Final Office Action from U.S. Appl. No. 13/360,024, dated Sep. 29, 2014, 19 pages.
Non-Final Office Action from U.S. Appl. No. 14/211,655, dated Apr. 18, 2018, 82 pages.
Non-Final Office Action from U.S. Appl. No. 14/211,655, dated Dec. 29, 2016, 24 pages.
Non-Final Office Action from U.S. Appl. No. 14/211,655, dated Mar. 2, 2016, 19 pages.
Non-Final Office Action from U.S. Appl. No. 14/961,464, dated Nov. 20, 2017, 51 pages.
Non-Final Office Action from U.S. Appl. No. 15/009,684, dated Aug. 24, 2016, 10 pages.
Non-Final Office Action from U.S. Appl. No. 15/042,005, dated Jan. 22, 2018, 10 pages.
Non-Final Office Action from U.S. Appl. No. 15/176,079, dated Jul. 13, 2017, 39 pages.
Non-Final Office Action from U.S. Appl. No. 15/208,404, dated Apr. 5, 2018, 25 pages.
Non-Final Office Action from U.S. Appl. No. 15/208,404, dated Jul. 6, 2017, 33 pages.
Non-Final Office Action from U.S. Appl. No. 15/208,404, dated Oct. 3, 2016, 26 pages.
Non-Final Office Action from U.S. Appl. No. 15/353,507, dated Apr. 15, 2019, 69 pages.
Non-Final Office Action from U.S. Appl. No. 15/353,549, dated Feb. 13, 2019, 70 pages.
Non-Final Office Action from U.S. Appl. No. 15/354,679, dated Mar. 21, 2017, 19 pages.
Non-Final Office Action from U.S. Appl. No. 15/650,230, dated Nov. 14, 2018, 71 pages.
Notice of Allowance from U.S. Appl. No. 13/359,767, dated Apr. 11, 2016, 12 pages.
Notice of Allowance from U.S. Appl. No. 13/359,767, dated Aug. 8, 2016, 12 pages.
Notice of Allowance from U.S. Appl. No. 13/359,767, dated Dec. 16, 2015, 8 pages.
Notice of Allowance from U.S. Appl. No. 13/359,767, dated Mar. 14, 2017, 14 pages.
Notice of Allowance from U.S. Appl. No. 13/359,767, dated Nov. 15, 2016, 12 pages.
Notice of Allowance from U.S. Appl. No. 13/359,817, dated Feb. 19, 2015, 8 pages.
Notice of Allowance from U.S. Appl. No. 13/359,817, dated Feb. 26, 2016, 9 pages.
Notice of Allowance from U.S. Appl. No. 13/359,817, dated Jan. 20, 2015, 13 pages.
Notice of Allowance from U.S. Appl. No. 13/359,817, dated May 1, 2015, 9 pages.
Notice of Allowance from U.S. Appl. No. 13/359,817, dated Sep. 9, 2016, 14 pages.
Notice of Allowance from U.S. Appl. No. 13/359,817, dated Sep.11, 2015, 9 pages.
Notice of Allowance from U.S. Appl. No. 13/359,832, dated Feb. 19, 2015, 8 pages.
Notice of Allowance from U.S. Appl. No. 13/359,832, dated Jan. 13, 2017, 12 pages.
Notice of Allowance from U.S. Appl. No. 13/359,832, dated Jan. 7, 2016, 12 pages.
Notice of Allowance from U.S. Appl. No. 13/359,832, dated Jun. 8, 2015, 12 pages.
Notice of Allowance from U.S. Appl. No. 13/359,832, dated May 17, 2016, 14 pages.
Notice of Allowance from U.S. Appl. No. 13/359,832, dated Sep. 14, 2016, 12 pages.
Notice of Allowance from U.S. Appl. No. 13/359,832, dated Sep. 18, 2015, 12 pages.
Notice of Allowance from U.S. Appl. No. 13/359,939, dated Aug. 25, 2014, 15 pages.
Notice of Allowance from U.S. Appl. No. 13/359,939, dated Dec. 28, 2015, 12 pages.
Notice of Allowance from U.S. Appl. No. 13/359,939, dated Dec. 3, 2014, 12 pages.
Notice of Allowance from U.S. Appl. No. 13/359,939, dated Dec. 9, 2016, 12 pages.
Notice of Allowance from U.S. Appl. No. 13/359,939, dated Mar. 30, 2015, 12 pages.
Notice of Allowance from U.S. Appl. No. 13/359,939, dated May 12, 2014, 13 pages.
Notice of Allowance from U.S. Appl. No. 13/359,939, dated May 6, 2016, 12 pages.
Notice of Allowance from U.S. Appl. No. 13/359,939, dated Sep. 1, 2015, 12 pages.
Notice of Allowance from U.S. Appl. No. 13/359,939, dated Sep. 2, 2016, 12 pages.
Notice of Allowance from U.S. Appl. No. 13/359,961, dated Jul. 11, 2014, 13 pages.
Notice of Allowance from U.S. Appl. No. 13/359,961, dated Jul. 15, 2015, 12 pages.
Notice of Allowance from U.S. Appl. No. 13/359,961, dated Mar. 26, 2015, 12 pages.
Notice of Allowance from U.S. Appl. No. 13/359,961, dated Oct. 28, 2014, 14 pages.
Notice of Allowance from U.S. Appl. No. 13/360,024, dated Jan. 10, 2017, 9 pages.
Notice of Allowance from U.S. Appl. No. 13/360,024, dated Jan. 20, 2015, 6 pages.
Notice of Allowance from U.S. Appl. No. 13/360,024, dated Jul. 5, 2016, 10 pages.
Notice of Allowance from U.S. Appl. No. 13/360,024, dated Mar. 1, 2016, 11 pages.
Notice of Allowance from U.S. Appl. No. 13/360,024, dated Mar. 23, 2017, 9 pages.
Notice of Allowance from U.S. Appl. No. 13/360,024, dated May 1, 2015, 10 pages.
Notice of Allowance from U.S. Appl. No. 13/360,024, dated Oct. 28, 2015, 10 pages.
Notice of Allowance from U.S. Appl. No. 14/211,655, dated Nov. 7, 2018, 17 pages.
Notice of Allowance from U.S. Appl. No. 14/961,464, dated Sep. 19, 2018, 8 pages.
Notice of Allowance from U.S. Appl. No. 15/009,684, dated Apr. 17, 2017, 20 pages.
Notice of Allowance from U.S. Appl. No. 15/009,684, dated Dec. 29, 2016, 9 pages.
Notice of Allowance from U.S. Appl. No. 15/176,079, dated Nov. 24, 2017, 27 pages.
Notice of Allowance from U.S. Appl. No. 15/208,404, dated Nov. 23, 2018, 18 pages.
Notice of Allowance from U.S. Appl. No. 15/354,679, dated Mar. 28, 2018, 25 pages.
Notice of Preliminary Rejection from foreign counterpart Korean Patent Application No. KR20157029321, dated Oct. 13, 2016, 8 pages.
Notice on Grant of Patent Right for Invention from foreign counterpart Chinese Patent Application No. 201280012962.8, dated Apr. 9, 2018, 4 pages.
Notice on Grant of Patent Right for Invention from foreign counterpart Chinese Patent Application No. 201480021703.0, dated Aug. 2, 2018, 4 pages.
Notification of Reason for Refusal from foreign counterpart Korean Patent Application No. 1020137022671, dated Sep. 15, 2015, 5 pages.
Office Action from foreign counterpart Chinese patent application No. 201280012962, dated Jan. 22, 2017, 8 pages.
Pong P. Chu, "RTL Hardware Design Using VHDL", 2006, John Wiley & Sons, pp. 279-281. *
Third Office Action from foreign counterpart China Patent Application No. 201280012962.8, dated Sep. 21, 2017, 8 pages.
Varanasi, et al., "Hardware-Supported Virtualization on ARM," Proceedings of the Second Asia-Pacific Workshop on Systems, ACM, Jul. 2011. Retrieved from the Internet: http://ts.data61.csiro.au/publications/nicta_full_text/4938.pdf on Sep. 8, 2018, 5 pages.

Also Published As

Publication number Publication date
WO2014151652A1 (en) 2014-09-25
TW201502981A (en) 2015-01-16
US11294680B2 (en) 2022-04-05
US20140281410A1 (en) 2014-09-18
TWI529621B (en) 2016-04-11
US20200174792A1 (en) 2020-06-04

Similar Documents

Publication Publication Date Title
US11294680B2 (en) Determining branch targets for guest branch instructions executed in native address space
US10810014B2 (en) Method and apparatus for guest return address stack emulation supporting speculation
US10579386B2 (en) Microprocessor for gating a load operation based on entries of a prediction table
US10467010B2 (en) Method and apparatus for nearest potential store tagging
US20110153991A1 (en) Dual issuing of complex instruction set instructions
US10740107B2 (en) Operation of a multi-slice processor implementing load-hit-store handling
US10564691B2 (en) Reducing power consumption in a multi-slice computer processor
US10042647B2 (en) Managing a divided load reorder queue
TW201342230A (en) Microprocessors, microprocessor operation methods, and computer program products thereof
US10318294B2 (en) Operation of a multi-slice processor implementing dependency accumulation instruction sequencing
US20180004527A1 (en) Operation of a multi-slice processor implementing prioritized dependency chain resolution
US10678551B2 (en) Operation of a multi-slice processor implementing tagged geometric history length (TAGE) branch prediction
US10241790B2 (en) Operation of a multi-slice processor with reduced flush and restore latency
US10528352B2 (en) Blocking instruction fetching in a computer processor

Legal Events

Date Code Title Description
AS Assignment

Owner name: SOFT MACHINES, INC., CALIFORNIA

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:ABDALLAH, MOHAMMAD A.;REEL/FRAME:032440/0705

Effective date: 20140313

AS Assignment

Owner name: INTEL CORPORATION, CALIFORNIA

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:SOFT MACHINES, INC.;REEL/FRAME:040631/0915

Effective date: 20161107

STPP Information on status: patent application and granting procedure in general

Free format text: ADVISORY ACTION MAILED

STPP Information on status: patent application and granting procedure in general

Free format text: DOCKETED NEW CASE - READY FOR EXAMINATION

STPP Information on status: patent application and granting procedure in general

Free format text: NOTICE OF ALLOWANCE MAILED -- APPLICATION RECEIVED IN OFFICE OF PUBLICATIONS

STPP Information on status: patent application and granting procedure in general

Free format text: PUBLICATIONS -- ISSUE FEE PAYMENT VERIFIED

STCF Information on status: patent grant

Free format text: PATENTED CASE

MAFP Maintenance fee payment

Free format text: PAYMENT OF MAINTENANCE FEE, 4TH YEAR, LARGE ENTITY (ORIGINAL EVENT CODE: M1551); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY

Year of fee payment: 4