Changes

Jump to navigation Jump to search

Dynamic recompilation

292 bytes added, 23:48, 2 February 2019
m
Protected "Dynamic recompilation" ([Move=Allow only administrators] (indefinite))
'''Dynamic recompilation''' (sometimes abbreviated to '''dynarec''' or the [[pseudo-acronym]] '''DRC''') is a feature of some [[emulator]]s emulators and [[virtual machine]]smachines, where the system may [[Compiler|recompile]] some part of a [[Computer program|program]] ''during execution''. By compiling during execution, the system can tailor the generated code to reflect the program's run-time environment, and potentially produce more efficient [[code]] by exploiting information that is not available to a traditional static [[compiler]]{{Main|wikipedia:Dynamic recompilation}}
==Uses==
Most dynamic recompilers are used to convert machine code between architectures at runtime. This is a task often needed in the emulation of legacy gaming platforms. In other cases, a system may employ dynamic recompilation as part of an [[adaptive optimization]] strategy to execute a portable program representation such as [[Java (programming language)|Java]] or .NET [[Common Language Runtime]] bytecodes. Full-speed debuggers also utilize dynarec to reduce the space overhead incurred in most [[deoptimization]] techniques, and other features such as dynamic [[thread migration]].
==Tasks==
* Updating of elapsed cycle counts on platforms with cycle count registers
* Management of interrupt checking
* Providing an interface to virtualized support hardware for example a [[GPU]]
* Optimizing higher level code structures to run efficiently on the target hardware (see below)
==Example==
Suppose a program is being run in an emulator and needs to copy a null-terminated [[character string|string]]. The program is compiled originally for a very simple processor. This processor can only copy a [[byte]] at a time, and must do so by first reading it from the source string into a [[processor register|register]], then writing it from that register into the destination string. The original program might look something like this:
<source lang=asm>
; so carry on with something else.</source>
There is an immediate speed benefit simply because the processor doesn't have to load so many instructions to do the same task, but also because the movs instruction is likely to be optimized by the processor designer to be more efficient than the sequence used in the first example. (For example, it may make better use of [[Parallel computing|parallel execution]] in the processor to increment A and B while it is still copying bytes).
===Gaming===
*[[MAME]] uses dynamic recompilation in its CPU emulators for MIPS, SuperH, PowerPC and even the Voodoo graphics processing units.
*[[1964 (emulator)|1964]], a an open-source [[Nintendo 64emulators|Nintendo 64 emulator]] emulator for [[wikipedia:x86|x86 ]] hardware.*Wii64, a [[Nintendo 64emulators|Nintendo 64 emulator]] emulator for the Nintendo Wii.
*WiiSX, a Sony PlayStation emulator for the Nintendo Wii.
*[[Mupen64Plus]], a an open-source, multi-platform , plugin-based Nintendo 64 emulator.<ref>[http://pandorawiki.org/Mupen64plus_dynamic_recompiler Mupen64Plus]</ref>*[[Yabause]], a an open-source multi-platform [[Sega Saturnemulators|Sega Saturnemulator]] emulator.<ref>[http://wiki.yabause.org/index.php5?title=SH2_dynamic_recompiler SH2]</ref>*The backwards compatibility functionality of the [[Xbox 360 emulators|Xbox 360]] (i.e. running games written for the original [[Xbox (console)emulators|Xbox]]) is widely assumed to use dynamic recompilation.*[[PPSSPP]], a an open-source, multi-platform [[PlayStation Portable emulators|Sony]] [[PlayStation Portableemulator]] emulator. Recompilers for both x86 and ARM.*[[PSEmu Pro]], a [[PlayStation emulators|Sony]] [[PlayStationemulator]] emulator.*[[UltrahleUltraHLE]], the first [[Nintendo 64emulators|Nintendo 64 emulators]] emulator to fully run commercial games.*[[PCSX2]],<ref>[http://www.pcsx2.net PCSX 2PCSX2]</ref> a an open-source, plugin-based [[PlayStation 2 emulators|Sony]] [[PlayStation 2emulator]] emulator, has a recompiler called "microVU", the successor of "SuperVU".*[[Dolphin (emulator)|Dolphin]], a an open-source [[GameCube emulators|Nintendo GameCube]] and [[Wiiemulators|Wii emulator]] emulator, has a dynarec option.*GCemuGCEmu,<ref>[http://sourceforge.net/projects/gcemu-project GCemuGCEmu]</ref> a [[GameCube emulators|Nintendo GameCubeemulator]] emulator.*[[NullDCnullDC]], a an open-source [[SegaDreamcast emulators|Sega Dreamcast]] and [[DreamcastSega NAOMI and variants|Naomi emulator]] emulator for [[wikipedia:x86|x86]].*GEM,<ref>{{cite web|url=http://gem.tni.nl/ |title=Gameboy Emulator for MSX &#124; The New Image |publisher=GEM |date= |accessdate=2014-01-12}}</ref> a [[Game Boy/Game Boy Color emulators|Nintendo Game Boy/Color]] emulator for [[MSX emulators|MSX]] uses an optimizing dynamic recompiler.*[[DeSmuME]],<ref>[http://desmume.org/2013/04/30/desmume-0-9-9-released/ DeSmuME v0.9.9]</ref> a an open-source [[Nintendo DSemulators|Nintendo DS emulator]] emulator, has a dynarec option.*Soywiz's Psp,<ref>{{cite web|author=Publicado por Carlos Ballesteros Velasco |url=http://pspemu.soywiz.com/2013/07/release-soywizs-psp-emulator-2013-07-28.html |title=Soywiz's PSP Emulator: Release : Soywiz's Psp Emulator 2013-07-28 (r525) |publisher=Pspemu.soywiz.com |date=2013-07-28 |accessdate=2014-01-12}}</ref> a [[PlayStation Portable emulators|Sony]] [[PlayStation Portableemulator]] emulator, has a dynarec option.
==See also==
* [[Comparison of platform virtual machines]]* [[Binary translation]]* [[Just-in-time compilation]]* [[Binary recompiler]]
==References==
==External links==
*[http://web.archive.org/web/20051018182930/www.zenogais.net/Projects/Tutorials/Dynamic+Recompiler%20Recompiler.html Dynamic recompiler tutorial]
*[http://emulatemii.com/wordpress/?tag=dynarec Blog posts about writing a MIPS to PPC dynamic recompiler]
[[Category:Virtualization software]][[Category:Compiler construction]][[Category:Emulation softwareWikipedia copies]]

Navigation menu