The present invention is a system, method, and product for improving the
speed of dynamic translation systems by efficiently positioning translated
instructions in a computer memory unit. More specifically, the speed of
execution of translated instructions, which is a factor of particular
relevance to dynamic optimization systems, may be adversely affected by
inefficient jumping between traces of translated instructions. The present
invention efficiently positions the traces with respect to each other and
with respect to "trampoline" instructions that redirect control flow from
the traces. For example, trampoline instructions may redirect control flow
to an instruction emulator if the target instruction has not been
translated, or to the translation of a target instruction that has been
translated. When a target instruction has been translated, a backpatcher
of the invention may directly backpatch the jump to the target so that the
trampoline instructions are no longer needed. A method of the present
invention includes: (1) designating "chunks" of memory locations, and (2)
positioning a translated trace and its corresponding trampoline
instructions in the same chunk. The size of the chunk generally is based
on a "machine-specific shortest jump distance" that is the shortest
maximum distance that a jump instruction may specify. In particular, the
chunk length may be determined so that, for every translated trace and
trampoline instruction positioned in the same chunk, the greatest distance
between a translated jump instruction and its target trampoline
instruction is not greater than the machine-specific shortest jump
distance for that type of jump instruction.
La présente invention est un système, une méthode, et un produit pour améliorer la vitesse des systèmes de traduction dynamiques en plaçant efficacement des instructions traduites dans une unité de mémoire d'ordinateur. Plus spécifiquement, la vitesse de l'exécution des instructions traduites, qui est un facteur d'importance particulière pour les systèmes dynamiques d'optimisation, peut être compromise par sauter inefficace entre les traces des instructions traduites. La présente invention place efficacement les traces en ce qui concerne l'un l'autre et en ce qui concerne les instructions de "trempoline" qui réorientent l'écoulement de commande des traces. Par exemple, les instructions de trempoline peuvent réorienter l'écoulement de commande à un émulateur d'instruction si l'instruction de cible n'a pas été traduite, ou à la traduction d'une instruction de cible qui a été traduite. Quand une instruction de cible a été traduite, un backpatcher de l'invention peut directement backpatch le saut à la cible de sorte que les instructions de trempoline ne soient nécessaires plus. Une méthode de la présente invention inclut : (1) indiquant des "gros morceaux" des endroits de mémoire, et (2) plaçant une trace traduite et ses instructions correspondantes de trempoline dans le même gros morceau. La taille du gros morceau généralement est basée sur "une distance propre à une machine de saut la plus courte" qui est la distance maximum la plus courte qu'une instruction de saut peut indiquer. En particulier, la longueur de gros morceau peut être déterminée de sorte que, parce que chaque instruction traduite de trace et de trempoline placée dans le même gros morceau, la plus grande distance entre une instruction de saut traduite et sa instruction de trempoline de cible ne soit pas plus grande que la distance propre à une machine de saut la plus courte pour ce type d'instruction de saut.