DE10161505A1 - Method for tracking jumps in the emulation of a processor, with jump commands made relative to the base register, thus improving the efficiency of development of new processor architectures - Google Patents

Method for tracking jumps in the emulation of a processor, with jump commands made relative to the base register, thus improving the efficiency of development of new processor architectures

Info

Publication number
DE10161505A1
DE10161505A1 DE2001161505 DE10161505A DE10161505A1 DE 10161505 A1 DE10161505 A1 DE 10161505A1 DE 2001161505 DE2001161505 DE 2001161505 DE 10161505 A DE10161505 A DE 10161505A DE 10161505 A1 DE10161505 A1 DE 10161505A1
Authority
DE
Germany
Prior art keywords
register
jump
commands
command
registers
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.)
Ceased
Application number
DE2001161505
Other languages
German (de)
Inventor
Manfred Stadel
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.)
Fujitsu Technology Solutions GmbH
Original Assignee
Fujitsu Technology Solutions GmbH
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 Fujitsu Technology Solutions GmbH filed Critical Fujitsu Technology Solutions GmbH
Priority to DE2001161505 priority Critical patent/DE10161505A1/en
Publication of DE10161505A1 publication Critical patent/DE10161505A1/en
Ceased legal-status Critical Current

Links

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/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
    • G06F9/324Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address using program counter relative addressing
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

Method for tracking jumps in the emulation of a first processor, whereby the processing is emulated in a second processor and jump commands are given relative to the content of the base register. During emulation, the contents of the base register are kept the same during simulation of a jump command. This allows calculation of the target address of a jump command.

Description

Die Erfindung betrifft ein Verfahren zur Verfolgung von Sprüngen bei der Emulation eines ersten Prozessors, dem emulierten Prozessor, auf einem zweiten Prozessor, dem emulierenden Prozessor, wobei die Zieladressen der Sprungbefehle des emulierten Prozessors relativ zum Inhalt eines Arbeitsregisters, dem Basisregister, spezifiziert werden. The invention relates to a method for tracking Jumps in the emulation of a first processor, the emulated processor, on a second processor, the emulating processor, with the destination addresses of the Jump commands of the emulated processor relative to the content of a working register, the base register become.

Zur Einführung neuer Prozessorarchitekturen, die Vorgängerarchitekturen ablösen sollen, ist es nützlich und daher auch üblich geworden, Programme, die für die Vorgängerarchitekturen erstellt wurden, auf den neuen Prozessoren zu emulieren. Damit stehen auf den neuen Prozessoren gleich von Anfang an alle bisherigen Programme zur Verfügung, ohne dass sie für die neuen Prozessoren neu produziert (d. h. übersetzt) werden müssen. Es ist dabei jedoch entscheidend, dass diese Emulation effizient ist. Deshalb wurden schon früh Verfahren zur Beschleunigung der Emulation gegenüber einer einfachen Interpretation der Befehle des emulierten Prozessors entwickelt. Derartige Verfahren sind z. B. in C. May: MIMIC: A Fast System/370 Simulator, ACM SIGPLAN Notices 22, 7, 1987, S. 1-13; T. Halfhill: Emulation: RISC's Secret Weapon, BYTE, April 1994, S. 119-130) beschrieben. Danach werden häufig ausgeführte Befehlsfolgen im emulierten Programm dynamisch in semantisch äquivalente Befehlsfolgen für den emulierten Prozessor übersetzt. Statt die Befehlsfolgen im emulierten Programm wiederholt zu interpretieren werden dann ihre Übersetzungen direkt auf dem emulierenden Prozessor ausgeführt. For the introduction of new processor architectures, which are to replace previous architectures, it has become useful and therefore also common to emulate programs that were created for the previous architectures on the new processors. This means that all existing programs are available on the new processors right from the start, without having to be newly produced (ie translated) for the new processors. However, it is crucial that this emulation is efficient. Therefore, methods for accelerating the emulation compared to a simple interpretation of the commands of the emulated processor were developed early on. Such methods are e.g. B. in C. May: MIMIC: A Fast System / 370 Simulator, ACM SIGPLAN Notices 22 , 7 , 1987 , pp. 1-13; T. Halfhill: Emulation: RISC's Secret Weapon, BYTE, April 1994, pp. 119-130). Thereafter, frequently executed instruction sequences in the emulated program are dynamically translated into semantically equivalent instruction sequences for the emulated processor. Instead of repeatedly interpreting the command sequences in the emulated program, their translations are then carried out directly on the emulating processor.

Bei Erreichen eines Sprungbefehls mit statisch (d. h. zur Übersetzungszeit) bekanntem Sprungziel kann die Übersetzung auch am Sprungziel fortgesetzt werden. Nach bisherigem Stand der Technik muss die Übersetzung jedoch bei einem Sprungbefehl mit statisch nicht bekanntem Sprungziel, z. B. wenn das Sprungziel als Inhalt eines Arbeitsregisters spezifiziert ist, abgebrochen werden. Die Emulation eines solchen Sprungbefehls erfordert dann eine dynamischen Suche nach einer evtl. für das Sprungziel bereits existierenden Übersetzung bzw. die Generierung einer solchen Übersetzung. Die Suche nach einer Übersetzung ist natürlich erheblich ineffizienter, als die direkte Ausführung eines Sprungbefehls des emulierenden Prozessors. When a jump command is reached with static (i.e. for Translation time) known jump target can be the translation also continue at the jump destination. According to the current status technology, however, the translation must be done by one Jump command with a statically unknown jump target, e.g. B. if the jump destination as the content of a working register is specified, can be canceled. The emulation of a such a jump instruction then requires a dynamic search after an existing one for the jump destination Translation or the generation of such a translation. The search for a translation is of course significant more inefficient than executing a jump instruction directly of the emulating processor.

Bei emulierten Prozessoren, deren Sprungbefehle grundsätzlich basisregister-relativ sind, d. h. die Zieladresse als Abstand zum Inhalt eines Arbeitsregisters, dem sog. Basisregister, spezifiziert wird, muss nach bisherigem Stand der Technik das Sprungziel in den meisten Fällen als unbekannt angenommen werden, denn der Inhalt des Basisregisters ist meist nicht statisch nachvollziehbar. In the case of emulated processors, the jump instructions are basically are base register-relative, d. H. the destination address as a distance on the content of a working register, the so-called basic register, is specified, according to the current state of the art Jump destination assumed to be unknown in most cases because the content of the base register is usually not statically understandable.

Der Erfindung liegt somit die Aufgabe zugrunde, die Effizienz der Sprungbefehlsverfolgung bei der Prozessoremulation zu erhöhen. The invention is therefore based on the task of efficiency jump instruction tracking in processor emulation increase.

Diese Aufgabe wird erfindungsgemäß mit den Merkmalen des Patentanspruchs 1 gelöst. Es wird vorläufig vorgegeben, dass das in einem Sprungbefehl spezifizierte Basisregister bei jeder dynamischen Ausführung des Sprungbefehls immer denselben Inhalt hat, ein solches Verfahren ist im Folgenden auch als spekulatives Verfahren bezeichnet. Dieser kann aus dem aktuellen Inhalt der Arbeitsregister zu Beginn einer Übersetzung entnommen werden. Damit kann die Übersetzung der basisregister-relativen Sprungbefehle genauso erfolgen, wie die Übersetzung von Sprungbefehlen, in denen das Sprungziel direkt spezifiziert ist, was eine erhebliche Beschleunigung der Emulation zur Folge hat. This object is achieved with the features of Claim 1 solved. It is provisionally specified that the base register specified in a jump instruction every dynamic execution of the jump instruction always has the same content, such a procedure is as follows also called speculative procedure. This can come from the current content of the labor register at the beginning of a Translation can be taken. This allows the translation of the base register-relative jump commands are done exactly like the translation of jump instructions in which the jump target is directly specified, which is a significant acceleration the emulation.

In der Regel kann die Richtigkeit der vorläufigen Vorgabe nicht garantiert werden. Deshalb ist es erforderlich, sie dynamisch mit in die Übersetzung eingefügten Prüfbefehlen zu überprüfen. In verschiedenen Ausprägungen der Erfindung werden diese Prüfbefehle an verschiedenen Stellen platziert: unmittelbar vor den betreffenden Sprungbefehlen, an Stellen, die alle betreffenden Sprungbefehle dominieren, oder an Eingangsstellen von Übersetzungen. As a rule, the correctness of the preliminary specification cannot be guaranteed. That is why it is required dynamically with test commands inserted in the translation check. In various forms of the invention these test commands are placed in different places: immediately before the relevant jump commands, in places, that dominate all relevant jump commands, or on Entry points for translations.

Gerade im letzten Fall, wenn die Prüfbefehle an Eingangsstellen von Übersetzungen eingefügt werden, ist es zweckmäßig und auch notwendig, die Inhalte von Arbeitsregistern über die nachfolgenden Befehle hinweg bis hin zu den betreffenden Sprungbefehlen zu verfolgen. Dies geschieht in weiteren Ausprägungen der Erfindung durch Anwendung und Anpassung der aus der Compiler- und Optimierertechnik bekannten Verfahren zur Datenflussanalyse für Konstantenfortpflanzung und -faltung. Darüber hinaus werden in weiteren Ausprägungen der Erfindung vorläufige Vorgaben zur Verfolgung von Inhalten von Arbeitsregistern auch über solche Befehle hinweg getroffen, für die nicht vorhersehbar ist, ob und welche Arbeitsregister sie verändern werden. Solche Befehle sind beispielsweise Ausführbefehle, das sind Befehle, die andere Befehle indirekt ausführen, oder Unterprogrammaufrufbefehle, da sich Unterprogramme in den meisten Fällen an gängige Programmierkonventionen halten und Inhalte bestimmter Arbeitsregister nicht verändern oder zumindest vor der Rückkehr wieder restaurieren. Especially in the latter case when the test commands are on Entry points of translations are inserted, it is expedient and also necessary, the content of Working registers across the subsequent commands up to to follow the jump instructions concerned. This happens in further forms of the invention Application and customization from the compiler and Optimizer technology known methods for data flow analysis for constant propagation and folding. In addition, in further versions of the invention preliminary guidelines for tracking content from Working registers also hit across such commands, for whom it is not foreseeable whether and which working register they will change. Such commands are, for example Execution commands are commands that other commands indirectly execute, or subroutine call instructions, since itself Subroutines in most cases to common ones Keep programming conventions and content specific Do not change the working register or at least before the Restore return.

Nachstehend werden Einzelheiten des erfindungsgemäßen Verfahrens anhand eines Beispiel unter Bezugnahme auf die Zeichnung näher erläutert. The following are details of the invention Method using an example with reference to the Drawing explained in more detail.

Es zeigen: Show it:

Fig. 1 ein Beispiel einer Arbeitsspeicheraufteilung im emulierenden Prozessor zur Emulation eines für den emulierten Prozessor erstellten Programms, Fig. 1 shows an example of a memory allocation in the emulated processor to emulate a program created for the emulated processor,

Fig. 2 ein Beispiel eines typischen Befehls des emulierten Prozessors zum initialen Laden eines Basisregisters, Fig. 2 shows an example of a typical instruction of the emulated processor for initial loading of a base register,

Fig. 3 ein Beispiel eines basisregister-relativen Sprungbefehls des emulierten Prozessors, Fig. 3 shows an example of a base register relative branch instruction of the emulated processor,

Fig. 4 ein Beispiel eines Unterprogrammaufrufbefehls des emulierten Prozessors, Fig. 4 shows an example of a subroutine call instruction of the emulated processor,

Fig. 5 ein Beispiel eines typischen Befehls des emulierten Prozessors zum Rücksprung aus einem Unterprogramm, Fig. 5 shows an example of a typical instruction of the emulated processor to return from a subroutine,

Fig. 6 ein Beispiel eines Programms, das für den emulierten Prozessor erstellt wurde und nun im Arbeitsspeicher des emulierenden Prozessors geladen ist, Fig. 6 shows an example of a program that was created for the emulated processor and is now loaded in memory of the emulating processor,

Fig. 7 eine Übersetzung des Beispielprogramms aus Fig. 6 gemäß dem bisherigen Stand der Technik, Fig. 7 is a translation of the example program of Fig. 6 according to the prior art,

Fig. 8 eine Übersetzung des Beispielsprogramms aus Fig. 6 nach einer ersten Ausprägung der Erfindung, Fig. 8 is a translation of the example program of Fig. 6, according to a first aspect of the invention

Fig. 9 eine Übersetzung des Beispielsprogramms aus Fig. 6 nach einer weiteren Ausprägung der Erfindung, Fig. 9 is a translation of the example program of Fig. 6, according to a further aspect of the invention

Fig. 10 eine Übersetzung des Beispielsprogramms aus Fig. 6 nach einer weiteren Ausprägung der Erfindung, Fig. 10 is a translation of the example program of Fig. 6, according to a further aspect of the invention

Fig. 11 ein Flussdiagramm eines Algorithmus zur Verfolgung von Arbeitsregisterinhalten. Fig. 11 is a flow chart of an algorithm for tracking working register contents.

In Fig. 1 ist ein Beispiel einer Aufteilung des Arbeitspeichers 100 des emulierenden Prozessors gezeigt, wie sie zur Emulation eines für den emulierten Prozessor erstellten Programms 101 genutzt werden kann. Das Programm 101 enthält dabei Befehle für den emulierten Prozessor, die auf dem emulierenden Prozessor nicht direkt ausgeführt werden können. Deshalb befindet sich im Arbeitsspeicher 100 des emulierenden Prozessors zusätzlich zum Programm 101 ein direkt auf dem emulierten Prozessor ausführbares Emulationsprogrammes 102, der die in Programm 101 enthaltenen Befehle des emulierten Prozessors interpretiert. In Fig. 1 an example of a division of the memory 100 is shown of the emulating processor, such as may be used to emulate a program created for the emulated processor the one hundred and first The program 101 contains instructions for the emulated processor that cannot be executed directly on the emulating processor. Therefore, the emulating processor resident in memory 100 in addition to the program 101, a directly executable on the emulated processor emulation program 102 that interprets the instructions of the emulated processor program contained in the one hundred and first

Nach einem nach bisherigem Stand der Technik gängigen Verfahren werden zumindest die häufig ausgeführten Befehlsfolgen in Programm 101 dynamisch, das heißt zum Zeitpunkt der Emulation, in semantisch äquivalente Befehlsfolgen für den emulierten Prozessor übersetzt und die so entstehenden Übersetzungen 103 im Arbeitsspeicher 100 abgelegt. Statt die Befehlsfolgen im Programm 101 wiederholt zu interpretieren werden dann ihre Übersetzungen 103 direkt auf dem emulierenden Prozessor ausgeführt. Zur Verwaltung der Zuordnung der übersetzten Befehlsfolgen in Programm 101 zu den Übersetzungen 103 wird ferner im Arbeitsspeicher 100 eine Adressabbildung 104 abgelegt, die den Befehlsadressen in Programm 101 die entsprechenden Befehlsadressen in den Übersetzungen 103 zuordnet. According to a method that is common in the prior art, at least the frequently executed command sequences in program 101 are dynamically translated, that is, at the time of the emulation, into semantically equivalent command sequences for the emulated processor and the translations 103 thus created are stored in the working memory 100 . Instead of repeatedly interpreting the command sequences in program 101 , their translations 103 are then carried out directly on the emulating processor. In order to manage the assignment of the translated command sequences in program 101 to the translations 103 , an address map 104 is also stored in the working memory 100 , which maps the command addresses in the program 101 to the corresponding command addresses in the translations 103 .

Beim weiteren Erläutern des erfindungsgemäßen Verfahrens wird beispielhaft von einer Architektur der IBM Serie 390 als emulierter Prozessor (mit hier zum besseren Verständnis vereinfachter Semantik der Befehle) und beim emulierenden Prozessor von einer SPARC Architektur ausgegangen. Die 16 allgemeinen Arbeitsregister des emulierten Prozessors werden mit R0, R1, . . ., R15 bezeichnet. Diese werden für die Emulation bzw. in den Übersetzungen 103 auf Arbeitsregister im emulierenden Prozessor abgebildet, die mit %R0, %R1, . . ., %R15 bezeichnet werden. Weitere Arbeitsregister des emulierten Prozessors werden für temporäre Zwecke benötigt. Sie werden mit %o0, %o1, . . ., %o5 bezeichnet. In the further explanation of the method according to the invention, an example is an architecture of the IBM Series 390 as an emulated processor (with simplified semantics of the commands here for a better understanding) and a SPARC architecture for the emulating processor. The 16 general working registers of the emulated processor are identified with R0, R1,. , ., R15 designated. These are mapped to working registers in the emulating processor for the emulation or in the translations 103 , which are identified by% R0,% R1,. , .,% R15. Additional working registers of the emulated processor are required for temporary purposes. You will see% o0,% o1,. , .,% o5.

In Sprungbefehlen des emulierten Prozessors wird das Sprungziel relativ zum Inhalt eines Basisregisters angegeben. Fig. 2 zeigt einen typischen Befehl 200 des emulierten Prozessors zum initialen Laden eines Basisregisters. Das Feld 201 des Befehls 200 ist der Operationscode (hier BASR, Branch And Save Register). Feld 202 enthält ein allgemeines Arbeitsregister, in das bei Ausführung des Befehls die auf den Befehl folgende Adresse geladen wird. Feld 203 ist hier nicht relevant, kann im allgemeinen aber ein Sprungzielregister enthalten, wobei R0 bedeutet, dass kein Sprungziel angegeben ist, der Befehl also gar nicht springt sondern die Befehlsabarbeitung mit dem auf Befehl 200 folgenden Befehl fortgesetzt wird. Der Befehl 200 belegt 2 Byte im Arbeitsspeicher. Steht der Befehl 200 z. B. an der Adresse 0, so wird bei Ausführung des Befehls 200 der Wert 2 in das Arbeitsregister R10 geladen. Fortan kann Arbeitsregister R10 als Basisregister in Sprungbefehlen verwendet werden. The jump destination is specified in jump instructions of the emulated processor relative to the content of a base register. FIG. 2 shows a typical command 200 of the emulated processor to initially load a base register. The field 201 of the instruction 200 is the operation code (here BASR, Branch And Save Register). Field 202 contains a general working register into which the address following the command is loaded when the command is executed. Field 203 is not relevant here, but can generally contain a jump destination register, where R0 means that no jump destination is specified, ie the command does not jump at all, but the command processing is continued with the command following command 200 . Command 200 occupies 2 bytes in the working memory. Is the command 200 z. B. at address 0, value 2 is loaded into working register R10 when command 200 is executed. From now on, working register R10 can be used as a base register in jump instructions.

Fig. 3 zeigt ein Beispiel eines Sprungbefehls 300 des emulierten Prozessors. Feld 301 enthält den Operationscode (hier BC, Branch Conditional), Feld 302 enthält die Sprungbedingung (8 steht für "falls gleich"), Feld 303 ist hier nicht relevant, kann im allgemeinen aber ein Indexregister enthalten (hier R0, was bedeutet, dass kein Indexregister verwendet wird), Feld 304 enthält das Basisregister (hier R10), Feld 305 enthält den Abstand (Displacement) des Sprungziels vom Inhalt des Basisregisters (hier 100). Hat zum Zeitpunkt der Ausführung des Sprungbefehls 300 Arbeitsregister R10 z. B. den Inhalt 2, so berechnet sich das tatsächliche Sprungziel zu 2 + 100 = 102, es wird also bei erfüllter Sprungbedingung zur Adresse 102 gesprungen. Fig. 3 shows an example of a jump instruction 300 of the emulated processor. Field 301 contains the operation code (here BC, branch conditional), field 302 contains the jump condition (8 stands for "if equal"), field 303 is not relevant here, but can generally contain an index register (here R0, which means that no index register is used), field 304 contains the base register (here R10), field 305 contains the distance (displacement) of the jump destination from the content of the base register (here 100). At the time of execution of the jump instruction 300 working register R10 z. For example, if the content is 2 , the actual jump target is calculated as 2 + 100 = 102, that is, if the jump condition is met, the jump is made to address 102 .

Fig. 4 zeigt ein Beispiel eines Unterprogrammaufrufbefehls 400 des emulierten Prozessors. Feld 401 enthält den Operationscode (hier BAS, Branch And Save), Feld 402 ein allgemeines Arbeitsregister, das bei Ausführung des Befehls mit der auf den Befehl folgenden Adresse geladen wird. Die Felder 403, 404 und 405 haben die gleiche Bedeutung wie die entsprechenden Felder 303, 304 und 305 im Befehl 300 in Fig. 3. R0 in Feld 403 bedeutet, dass kein Indexregister verwendet wird, Feld 404 bestimmt R10 als Basisregister und Feld 405 den Abstand des Sprungziels zum Basisregister. Der Befehl belegt 4 Byte im Arbeitsspeicher. Steht der Befehl 400 z. B. auf Adresse 50 im Arbeitsspeicher, so wird bei seiner Ausführung Arbeitsregister R14 mit dem Wert 50 + 4 = 54 geladen. Ist der Inhalt von Basisregister R10 zum Zeitpunkt der Ausführung 2, so erfolgt ein Sprung zur Adresse 2 + 204 = 206. Fig. 4 shows an example of a subroutine call instruction 400 the emulated processor. Field 401 contains the operation code (here BAS, Branch And Save), field 402 a general working register which is loaded when the command is executed with the address following the command. Fields 403 , 404 and 405 have the same meaning as the corresponding fields 303 , 304 and 305 in command 300 in FIG. 3. R0 in field 403 means that no index register is used, field 404 determines R10 as the base register and field 405 the Distance of the jump destination to the base register. The command occupies 4 bytes in the working memory. Is the command 400 z. B. at address 50 in the working memory, working register R14 is loaded with the value 50 + 4 = 54 when it is executed. If the content of base register R10 is 2 at the time of execution, there is a jump to address 2 + 204 = 206.

Fig. 5 zeigt ein Beispiel eines typischen Befehls 500 des emulierten Prozessors zum Rücksprung aus einem Unterprogramm. Feld 501 enthält den Operationscode (hier BCR, Branch Conditional Register), Feld 502 enthält die Sprungbedingung (15 steht für "springe unbedingt"), Feld 503 das Sprungzielregister (hier R14). Bei Ausführung springt der Befehl zur Adresse, die im Arbeitsregister R14 steht. Falls Arbeitsregister R14 mit einem Unterprogrammaufruf 400, wie in Fig. 4 dargestellt, geladen wurde, so bewirkt die Ausführung des Befehls 500 den Rücksprung zur Adresse, die unmittelbar auf den Unterprogrammaufrufbefehl 400 folgt. Fig. 5 shows an example of a typical instruction 500 of the emulated processor to return from a subroutine. Field 501 contains the operation code (here BCR, Branch Conditional Register), field 502 contains the jump condition (15 stands for "jump necessarily"), field 503 contains the jump destination register (here R14). When executed, the command jumps to the address that is in working register R14. If work register R14 was loaded with a subroutine call 400 , as shown in FIG. 4, the execution of the instruction 500 causes a return to the address which immediately follows the subroutine call instruction 400 .

Fig. 6 zeigt ein Beispiel eines Programms 600, das für den emulierten Prozessor erstellt wurde und nun im Speicherbereich 101 des Arbeitsspeichers 100 des emulierenden Prozessors geladen ist. Das Programm setzt sich zusammen aus

  • - dem zum in Fig. 2 dargestellten Befehl 200 identischen Befehl 601 an der Speicheradresse 0 zum initialen Laden des Basisregisters R10 mit dem Wert 2,
  • - nachfolgenden nicht näher spezifizierten Befehlen 602, von denen aber in diesem Beispiel angenommen wird, dass sie den Inhalt des Basisregisters R10 nicht verändern,
  • - dem zum in Fig. 4 dargestellten Befehl 400 identischen Unterprogrammaufrufbefehl 603 an der Speicheradresse 50, der das Unterprogramm, das ab Adresse 2 + 204 = 206 im Arbeitsspeicher 100 steht, aufruft,
  • - einem Adressladebefehl 604 (LA, load address) an der Speicheradresse 54, der hier zum Laden des konstanten Wertes 10 in das Arbeitsregister R2 verwendet wird,
  • - einem Vergleichsbefehl 605 (CR, Compare Register) an der Speicheradresse 58, der den Inhalt des Arbeitsregisters R1 mit dem Inhalt des Arbeitsregisters R2 vergleicht,
  • - dem zum in Fig. 3 dargestellten Befehl 300 identischen bedingten Sprungbefehl 606 an der Speicheradresse 58, der Basisregister R10 nutzt und, "falls gleich", zur Adresse 2 + 100 = 102 springt,
  • - einem Adressladebefehl 607 (LA, Load Address) an der Speicheradresse 64, der hier dazu genutzt wird, den Inhalt von Register R1 um 1 zu erhöhen,
  • - einem Sprungbefehl 608 an der Speicheradresse 68, der ebenfalls Basisregister R10 nutzt und unbedingt (Sprungbedingung 15) zur Adresse 2 + 100 = 102 springt,
  • - nicht weiter spezifizierten Befehlen 609 ab der Speicheradresse 102,
  • - Beginn des Unterprogramms ab Speicheradresse 206 mit nicht weiter spezifizierten Befehlen 610, von denen aber in diesem Beispiel angenommen wird, dass sie den Inhalt des Basisregisters R10 nicht verändern,
  • - dem zum in Fig. 5 dargestellten Befehl 500 identischen Registersprungbefehl 611 an der Speicheradresse 220 zum Rücksprung aus dem Unterprogramm.
FIG. 6 shows an example of a program 600 that was created for the emulated processor and is now loaded in the memory area 101 of the main memory 100 of the emulating processor. The program is composed
  • instruction 601 at memory address 0, identical to instruction 200 shown in FIG. 2, for initial loading of base register R10 with the value 2,
  • subsequent instructions 602 , which are not specified in more detail, but which in this example are assumed not to change the content of the base register R10,
  • the subroutine call instruction 603 at the memory address 50 which is identical to the instruction 400 shown in FIG. 4 and which calls the subroutine which is in the working memory 100 from address 2 + 204 = 206,
  • an address load instruction 604 (LA, load address) at the memory address 54 , which is used here for loading the constant value 10 into the working register R2,
  • a comparison command 605 (CR, Compare Register) at the memory address 58 , which compares the content of the working register R1 with the content of the working register R2,
  • the conditional jump instruction 606 at the memory address 58 which is identical to the instruction 300 shown in FIG. 3 and which uses the base register R10 and, if "identical", jumps to the address 2 + 100 = 102,
  • an address load command 607 (LA, Load Address) at the memory address 64 , which is used here to increase the content of register R1 by 1,
  • a jump instruction 608 at memory address 68 , which also uses base register R10 and necessarily (jump condition 15 ) jumps to address 2 + 100 = 102,
  • instructions 609 from memory address 102 which are not further specified,
  • - Beginning of the subroutine from memory address 206 with instructions 610 which are not further specified, but which in this example are assumed not to change the content of the base register R10,
  • - The register jump instruction 611 at memory address 220 identical to instruction 500 shown in FIG. 5 for returning from the subroutine.

Die allgemeine Form des als Befehl 604 bzw. 607 verwendeten Load-Address-Befehls ist LA Ri,D(Rj,Rk), der bei Ausführung das Arbeitsregister Ri mit D + Inhalt(Rj) + Inhalt(Rk) lädt. Fig. 7 zeigt Beispiele von während der Emulation erzeugten Übersetzungen des Programms 600, die im Arbeitsspeicherbereich 103, s. Fig. 1, abgelegt werden. Im gewählten Beispiel wird angenommen, dass der Arbeitsspeicherbereich 103 bei Adresse 1000 beginnt. Zunächst wird der Befehl 601 übersetzt in den Befehl 711, der den Wert 2 in das dem Arbeitsregister R10 des emulierten Prozessors entsprechende Arbeitsregister %R10 des emulierenden Prozessors lädt (mov ist Operationscode eines Move-Befehls des SPARC-Prozessors). Danach folgt die nicht weiter detaillierte Übersetzung 712 der Befehle 602. Schließlich kommt die Übersetzung des Befehls 603 in die im Beispiel ab Adresse 1100 beginnenden Befehle 713 bis 715. Dabei ist es Stand der Technik, dass der Inhalt des Basisregisters R10 aus der vorausgegangenen Übersetzung des Befehls 601 bekannt ist, da das Arbeitsregister R10 in den Befehlen 602 nicht verändert wird, und dieser bekannte Inhalt von R10 in der Übersetzung des Befehls 603 berücksichtigt wird. The general form of the load address command used as command 604 or 607 is LA Ri, D (Rj, Rk) which, when executed, loads the working register Ri with D + content (Rj) + content (Rk). FIG. 7 shows examples of translations of the program 600 generated during emulation, which are located in the working memory area 103 , see FIG . Fig. 1, are filed. In the example selected, it is assumed that the working memory area 103 begins at address 1000 . First, the command 601 is translated into the command 711 , which loads the value 2 into the working register% R10 of the emulating processor corresponding to the working register R10 of the emulated processor (mov is the operation code of a move command of the SPARC processor). This is followed by the non-detailed translation 712 of the commands 602 . Finally, the command 603 is translated into the commands 713 to 715 starting from address 1100 in the example. It is state of the art that the content of the base register R10 is known from the previous translation of the instruction 601 , since the working register R10 is not changed in the instructions 602 , and this known content of R10 is taken into account in the translation of the instruction 603 .

Zunächst wird ein Move-Befehl 713 generiert, der den Wert 54 in das dem Arbeitsregister R14 des emulierten Prozessors entsprechende Arbeitsregister %R14 des emulierenden Prozessors lädt. Dann folgt ein unbedingter Sprungbefehl 714 (ba, branch always) zur Speicheradresse 1200 (hier zur Vereinfachung abweichend von der SPARC-Prozessorarchitektur als absolute Zieladresse dargestellt), ab der die Übersetzung 720 der Befehle 610 des Unterprogramms beginnt. Die hier beispielhaft gewählte Architektur des emulierenden Prozessors (SPARC) verlangt, dass auf einen Sprungbefehl ein weiterer Befehl (im sog. Branch Delay Slot) folgt, wobei im folgenden der Einfachheit wegen hierzu stets ein Leerbefehl 715 (nop, no operation) gewählt wird. First, a move command 713 is generated, which loads the value 54 into the working register% R14 of the emulating processor corresponding to the working register R14 of the emulated processor. This is followed by an unconditional branch instruction 714 (ba, branch always) to the memory address 1200 (shown here as an absolute destination address, in deviation from the SPARC processor architecture for simplification), from which the translation 720 of the instructions 610 of the subroutine begins. The architecture of the emulating processor (SPARC) selected here as an example requires that a jump command is followed by another command (in the so-called branch delay slot), with an empty command 715 (nop, no operation) always being selected in the following for reasons of simplicity.

Die Übersetzung des Unterprogramms beginnt mit der Übersetzung der nicht näher spezifizierten Befehle 610 in die Befehle 721 und endet mit der Übersetzung des Befehls 611 in die Befehle 722 bis 724 ab Speicheradresse 1240. Da das Sprungziel des Befehls 611 nicht bekannt ist, wird der Befehl übersetzt in den Aufruf einer Routine "emuliere", die die Emulation ab der als Parameter in dem Arbeitsregister %o0 übergebenen Speicheradresse fortsetzt. Der Move-Befehl 722 überträgt den Inhalt des dem Arbeitsregister R14 des emulierten Prozessors entsprechenden Arbeitsregisters %R14 des emulierenden Prozessors in %o0. Der Befehl 723 ist ein Unterprogrammaufrufbefehl (call) für den emulierenden Prozessor, der die Routine "emuliere" aufruft. Auch auf diesen Befehl folgt ein Leerbefehl 724. The translation of the subroutine begins with the translation of the unspecified instructions 610 into the instructions 721 and ends with the translation of the instruction 611 into the instructions 722 to 724 from memory address 1240 . Since the jump destination of the instruction 611 is not known, the instruction is translated into the call of a routine "emulate" which continues the emulation from the memory address passed as a parameter in the working register% o0. The move instruction 722 transfers the content of the work register% R14 of the emulating processor corresponding to the work register R14 of the emulated processor in% o0. Instruction 723 is a subroutine call instruction for the emulating processor that calls the "emulate" routine. This command is also followed by an empty command 724 .

Die Routine "emuliere" kann entweder die Befehle ab der in %o0 übergebenen Adresse interpretieren, oder aber diese Adresse in der Adressabbildungstabelle 740 suchen, und falls noch kein Eintrag, also noch keine Übersetzung, vorliegt, eine Übersetzung anstoßen. In Fig. 7 wird beispielsweise angenommen, dass eine Übersetzung 730 für die Befehle ab der Rückkehradresse 54, also die Befehle 604 bis 608, angestoßen worden ist. The routine "emulate" can either interpret the commands from the address given in% o0, or can search for this address in the address mapping table 740 and, if there is no entry, that is to say no translation, trigger a translation. In FIG. 7, it is assumed, for example, that a translation 730 for the commands from the return address 54 , that is to say commands 604 to 608 , has been initiated.

Die Übersetzung des Befehls 604 generiert den Move-Befehl 731, der den Wert 10 in das dem Arbeitsregister R2 des emulierten Prozessors entsprechende Arbeitsregister %R2 des emulierenden Prozessors lädt. Die Übersetzung des Befehls 605 generiert den Befehle 732, ein Vergleichsbefehl (cmp, compare), der das dem Arbeitsregister R1 des emulierten Prozessors entsprechende Arbeitsregister %R1 des emulierenden Prozessors mit dem dem Arbeitsregister R2 des emulierten Prozessors entsprechenden Arbeitsregister %R2 des emulierenden Prozessors vergleicht. Befehl 606 ist ein basisregister-relativer Sprungbefehl, bei dem nach dem bisherigen Stand der Technik zum Zeitpunkt der Übersetzung keine Aussage über den Inhalt des Basisregisters gemacht werden kann. Daher muss der Befehl wieder in einen Aufruf der Routine "emuliere" übersetzt werden. Da Befehl 606 ein bedingter Sprungbefehl ist, wird zunächst ein bedingter Sprungbefehl 733 mit negierter Sprungbedingung generiert, der im Falle Ungleichheit (bne, branch if not equal) zur Speicheradresse 1328 springt, also den Aufruf der Routine "emuliere" überspringt. Es folgt wieder ein Leerbefehl 734. Die Sprungzieladresse des Befehls 606 wird mit dem generierten Befehl 735 durch Addition (add) von 100 zum Inhalt des dem Basisregisters R10 des emulierten Prozessors entsprechenden Arbeitsregisters %R10 des emulierenden Prozessors berechnet und in Arbeitsregister %o0 bereitgestellt. Die Befehle 736 und 737 dienen dem Aufruf der Routine "emuliere". The translation of command 604 generates move command 731 , which loads the value 10 into work register% R2 of the emulating processor corresponding to working register R2 of the emulated processor. Translation of instruction 605 generates instruction 732 , a cmp, compare instruction, which compares the emulator processor work register% R1 corresponding to the emulated processor work register R1 to the emulated processor work register% R2 corresponding to the emulated processor work register R2. Instruction 606 is a jump instruction relative to the base register, in which, according to the prior art at the time of translation, no statement can be made about the content of the base register. The command must therefore be translated again into a call to the "emulate" routine. Since command 606 is a conditional jump command, a conditional jump command 733 with a negated jump condition is first generated, which jumps to memory address 1328 in the event of inequality (bne, branch if not equal), that is, it skips the call of the “emulate” routine. An empty command 734 follows again. The jump destination address of the command 606 is calculated with the generated command 735 by adding (add) 100 to the content of the working register% R10 of the emulating processor corresponding to the base register R10 of the emulated processor and provided in working register% o0. Instructions 736 and 737 are used to call the "emulate" routine.

Es folgt die Übersetzung des Befehls 607 in den Befehl 738 und die Übersetzung des Befehls 608 in die Befehle 739 bis 741 zum Aufruf der Routine "emuliere". This is followed by the translation of command 607 into command 738 and the translation of command 608 into commands 739 to 741 to call the "emulate" routine.

In der Adressabbildungstabelle 740, die gem. Fig. 1 im Speicherbereich 104 abgelegt wird, wird die Zuordnung der Speicheradressen im für das ursprüngliche Programm 600 zu den Speicheradressen von im Speicherbereich 104 abgelegten Übersetzungen festgehalten. Die Spalte 741 enthält Adressen im Programm 600, die Spalte 742 die entsprechenden Adressen der Übersetzungen 710, 720 und 730. In der Adressabbildungstabelle werden zumindest die Eingangsadressen dieser Übersetzungen zugeordnet. In dem in Fig. 7 dargestellten Beispiel beschränkt sich die Adressabbildungstabelle auf dieses Minimum. Für die Speicheradresse 102 liegt zu dem in Fig. 7 dargestellten Zeitpunkt, noch keine Übersetzung vor, weshalb der zugehörige Eintrag in Spalte 742 noch leer ist. In the address mapping table 740 , which according to. Is Fig. 1 stored in the memory area 104, the assignment of the memory addresses recorded in the stored for the original program 600 to the memory addresses of the memory area 104 translations. Column 741 contains addresses in program 600 , column 742 the corresponding addresses of translations 710 , 720 and 730 . At least the input addresses of these translations are assigned in the address mapping table. In the example shown in Fig. 7, the address mapping table is limited to this minimum. There is no translation for the memory address 102 at the time shown in FIG. 7, which is why the associated entry in column 742 is still empty.

Der Nachteil der Übersetzung 730 sind die Aufrufe der Routine "emuliere" und die in ihr durchzuführenden Aktionen, im besten Fall die Suche in der Adressabbildungstabelle. Aber selbst eine erfolgreiche Suche ist nicht sehr effizient. Fig. 8 zeigt eine Übersetzung 830, wie sie durch das Verfahren der Erfindung für die Befehle des Programms 600 ab Adresse 54 generiert wird. Sie unterscheidet sich von der Übersetzung 730 dadurch, dass vorläufig vorgegeben wird, dass der Inhalt des Arbeitsregisters %R10 des emulierenden Prozessors, das dem Arbeitsregister R10 des emulierten Prozessors entspricht, bei Erreichen eines Sprungbefehls, der dieses Arbeitsregister als Basisregister benutzt, immer der selbe Wert sein wird. Da die Befehle von der Eingangsstelle der Übersetzung bei Adresse 54 bis zu den betroffenen Sprungbefehlen 606 und 608 den Inhalt des Basisregisters unverändert lassen, kann dieser Wert aus dem Inhalt des Arbeitsregisters %R10 zu Beginn der Übersetzung entnommen werden. In dem in Fig. 6 dargestellten Beispiel ist dieser Wert bei Erreichen der zu emulierenden bzw. zu übersetzenden Befehle ab Adresse 54 also 2. Damit können die Sprungbefehle 606 und 608 des emulierten Prozessors direkt in Sprungbefehle 832 und 842 des emulierenden Prozessors übersetzt werden, wobei angenommen wird, dass die Übersetzung 850 der Befehle 609 am Sprungziel an der Speicheradresse 1400 abgelegt wird. Da jedoch die Richtigkeit der vorläufigen Vorgabe nicht garantiert werden kann, müssen Prüfbefehle 831 und 841 generiert werden. Diese Befehle vergleichen (cmp, compare) den Inhalt des Arbeitsregisters %R10 mit dem vorläufig vorgegebenen Wert 2. Die nachfolgenden Sprungbefehle 832 bzw. 842 springen nur bei Gleichheit (be, branch if equal). Die Leerbefehle 833 und 842 schließen wieder die Sprungbefehle ab (füllen die Delay Slots). Bei Nichtgleichheit wird wie in Fig. 7 die Routine "emuliere" aufgerufen. Außer durch die eingefügten Prüfbefehle 831 bis 832 und 841 bis 842 unterscheidet sich die Übersetzung 830 nicht von der Übersetzung 730. The disadvantage of translation 730 is the calls to the routine "emulate" and the actions to be performed therein, in the best case the search in the address mapping table. But even a successful search is not very efficient. FIG. 8 shows a translation 830 as it is generated by the method of the invention for the commands of the program 600 from address 54 . It differs from the translation 730 in that it is provisionally specified that the content of the working register% R10 of the emulating processor, which corresponds to the working register R10 of the emulated processor, always has the same value when a jump instruction that uses this working register as the basic register is reached will be. Since the commands from the entry point of the translation at address 54 to the jump commands 606 and 608 concerned leave the content of the base register unchanged, this value can be taken from the content of the working register% R10 at the start of the translation. In the example shown in FIG. 6, this value is 2 when the commands to be emulated or translated are reached, starting at address 54. The jump commands 606 and 608 of the emulated processor can thus be translated directly into jump commands 832 and 842 of the emulating processor, whereby it is assumed that the translation 850 of the instructions 609 is stored at the memory address 1400 at the jump destination. However, since the correctness of the preliminary specification cannot be guaranteed, test commands 831 and 841 must be generated. These commands compare (cmp, compare) the contents of the working register% R10 with the provisionally specified value 2. The subsequent jump commands 832 and 842 only jump if they are the same (be, branch if equal). The empty commands 833 and 842 complete the jump commands again (fill the delay slots). In the case of non-equality, the routine "emulate" is called as in FIG. 7. Except for the inserted test commands 831 to 832 and 841 to 842 , the translation 830 does not differ from the translation 730 .

Da die Ausführung der Prüfbefehle 831 bis 832 bzw. 841 bis 842 erheblich effizienter ist als die jeweilige Ausführung der Routine "emuliere" und da in der Regel die Prüfbedingungen auch immer erfüllt sind, führt das erfindungsgemäße Verfahren zu einer deutlichen Beschleunigung der Emulation. Since the execution of the test commands 831 to 832 or 841 to 842 is considerably more efficient than the respective execution of the routine "emulate" and since the test conditions are generally always fulfilled, the method according to the invention leads to a significant acceleration of the emulation.

Fig. 9 zeigt eine weitere Ausprägung der Erfindung. Hier werden die Prüfbefehle nicht zu jedem Sprungbefehl eingefügt, sondern zentral an Stellen im Programm, die die betroffenen Sprungbefehle dominieren. "Dominanz" ist eine aus der Compiler- bzw. Optimierertechnik bekannte Relation und wie folgt definiert: Eine Programmstelle "dominiert" eine Menge von Befehlen, wenn bei jedem denkbaren Ablauf des Programms vor Ausführung eines der Befehle aus der Menge stets die dominierende Stelle vorher durchlaufen worden sein muss. Allgemeiner dominiert eine Menge von Programmstellen in ihrer Gesamtheit eine Menge von Befehlen, wenn bei jedem denkbaren Ablauf des Programms vor Ausführung eines der Befehle aus der Befehlsmenge stets mindestens eine Stelle aus der dominierenden Menge vorher durchlaufen worden sein muss. Aus der Compilertechnik sind auch Algorithmen zum Bestimmen minimaler Dominanzmengen für eine bestimmte Menge von Befehlen bekannt. Fig. 9 shows a further form of the invention. Here, the test instructions are not inserted for each jump instruction, but rather centrally at points in the program that dominate the jump instructions concerned. "Dominance" is a relation known from compiler or optimizer technology and is defined as follows: A program position "dominates" a set of instructions if, during every conceivable execution of the program, one of the commands in the set always runs through the dominant position beforehand must have been. More generally, a set of program positions in its entirety dominates a set of instructions if at least one position from the dominant set must have been run through before the execution of one of the instructions from the set of instructions. Algorithms for determining minimum dominance sets for a specific set of instructions are also known from compiler technology.

Im Beispiel des Programms 600 dominiert z. B. die Stelle an der Speicheradresse 58 die beiden Sprungbefehle 606 und 608. Deshalb genügt es, die Prüfbefehle 931 bis 936 einmalig an dieser Stelle in die Übersetzung 930 einzufügen. Befehl 931 vergleicht wieder den Inhalt von Arbeitsregister %R10 mit dem vorläufig vorgegebenen Wert 2. Befehl 932 springt bei Gleichheit zur Adresse 1328, ab der die Übersetzung 937 des Befehls 605 beginnt. Bei Nichtgleichheit wird mit Befehl 935 die Routine "emuliere" aufgerufen, wobei dieser im Arbeitsregister %o0 die Adresse der aktuellen Stelle im Programm 600, hier also 58, mitgeteilt wird. Dies geschieht durch Befehl 934, der den Wert 58 in Arbeitsregister %o0 lädt. In the example of program 600 , z. B. the location at memory address 58, the two jump commands 606 and 608 . It is therefore sufficient to insert the test commands 931 to 936 once into the translation 930 at this point. Instruction 931 again compares the contents of working register% R10 with the provisionally specified value 2. In the event of equality, instruction 932 jumps to address 1328 , from which translation 937 of instruction 605 begins. In the event of non-equality, the "emulate" routine is called with command 935 , the address of the current position in the program 600 , in this case 58, being communicated in the working register% o0. This is done by command 934 , which loads the value 58 into working register% o0.

Fig. 10 zeigt eine weitere Ausprägung der Erfindung. Hier werden die Prüfbefehle an Eingangsstellen einer Übersetzung generiert. Die Prüfbefehle 1031 bis 1037 unterscheiden sich von den in Fig. 9 dargestellten Prüfbefehlen 931 bis 937 nur dadurch, dass mit Befehl 1034 die Eingangsadresse 54, ab der die Übersetzung beginnt, in das Arbeitsregister %o0 geladen und somit an die Routine "emuliere" übergeben wird. Die Menge aller Eingangsstellen einer Übersetzung dominiert alle Befehle dieser Übersetzung, somit auch alle in ihr enthaltenen basisregister-relativen Sprungbefehle. Aus dieser Sicht wäre die mit Fig. 10 erläuterte Ausprägung nur ein Spezialfall der mit Fig. 9 erläuterten Ausprägung. Allerdings können Befehle, die auf dem Weg von einer Eingangsstelle zu einem basisregister-relativen Sprungbefehl ausgeführt werden, den Inhalt von Basisregistern verändern. Deshalb ist es bei der mit Fig. 10 erläuterten Ausprägung zweckmäßig und auch notwendig, den Inhalt von Basisregistern zu verfolgen. Fig. 10 shows a further form of the invention. The test commands are generated here at the entry points of a translation. The test commands 1031 to 1037 differ from the test commands 931 to 937 shown in FIG. 9 only in that command 1034 loads the input address 54 , from which the translation begins, into the working register% o0 and thus transfers it to the "emulate" routine becomes. The set of all entry points of a translation dominates all instructions of this translation, and therefore also all jump instructions relative to the base register. From this point of view, the variant explained with FIG. 10 would only be a special case of the variant explained with FIG. 9. However, instructions that are executed on the way from an entry point to a base register-relative jump instruction can change the content of base registers. It is therefore expedient and also necessary in the embodiment explained with FIG. 10 to track the content of basic registers.

Fig. 11 zeigt ein Flussdiagramm eines Algorithmus zur Verfolgung von Arbeitsregisterinhalten. Nachdem im Vorgang 1100 ein Befehl übersetzt worden ist, wird in Abhängigkeit des Befehls die Buchführung über bekannte Inhalte von Arbeitsregistern aktualisiert. Die Abfrage 1101 prüft, ob es sich um einen Registerumladebefehl (LR, Load Register) handelt, der den Inhalt von Arbeitsregister Rj in das Arbeitsregister Ri lädt. Falls ja, dann wird durch Vorgang 1102 in der Buchführung vermerkt, dass der Inhalt von Arbeitsregister Ri nunmehr gleich dem Inhalt von Arbeitsregister Rj ist. Die Abfrage 1103 prüft, ob es sich um einen Adressladebefehl (LA, Load Address) handelt, der hier dazu verwendet wird, Arbeitsregister Ri mit dem um den Wert D erhöhten Inhalt des Arbeitsregisters Rj zu laden. Falls ja, wird durch Vorgang 1104 in der Buchführung vermerkt, dass Arbeitsregister Ri nun den um D erhöhten Inhalt von Arbeitsregister Rj enthält. Die Abfrage 1105 prüft, ob es sich um einen Befehl handelt, der eine Befehlsadresse in ein Arbeitsregister lädt (hier BASR, Branch And Save Register), der die Adresse, die auf den Befehl folgt, in Arbeitsregister Ri lädt. Falls ja, wird durch Vorgang 1106 in der Buchführung vermerkt, dass der Inhalt von Arbeitsregister Ri nunmehr die um die Befehlslänge 2 erhöhte Adresse des Befehls ist. Auf Abfrage 1105 könnten noch weitere Abfragen nach weiteren Befehlen, die in nachvollziehbarer Weise Inhalte von Arbeitsregistern verändern, folgen, ehe schließlich in Abfrage 1107 geprüft wird, ob der Befehl anderweitig und zur Übersetzungszeit nicht nachvollziehbar ein Arbeitsregister Ri potenziell verändern könnte. Falls ja, wird durch Vorgang 1108 in der Buchführung vermerkt, dass der Inhalt des Arbeitsregisters Ri nun unbekannt ist. Die Abfrage 1111 und der Vorgang 1112 sind optional und werden weiter unten im Zusammenhang mit weiteren Ausprägungen der Erfindung erläutert. Fig. 11 shows a flow chart of an algorithm for tracking working register contents. After a command has been translated in operation 1100 , the bookkeeping of known contents of work registers is updated depending on the command. Inquiry 1101 checks whether it is a register reload command (LR) that loads the contents of working register Rj into working register Ri. If so, operation 1102 records that the contents of work register Ri are now equal to the contents of work register Rj. The query 1103 checks whether it is an address load instruction (LA, Load Address) which is used here to load work register Ri with the content of the work register Rj increased by the value D. If so, operation 1104 records in the accounting that work register Ri now contains the content of work register Rj increased by D. Query 1105 checks whether it is a command that loads a command address into a working register (here BASR, Branch And Save Register), which loads the address that follows the command into working register Ri. If so, operation 1106 records in the bookkeeping that the content of working register Ri is now the address of the command increased by the command length 2 . Query 1105 could be followed by further queries for further commands, which change the contents of work registers in a comprehensible manner, before finally checking in query 1107 whether the command could potentially change a work register Ri otherwise and not comprehensibly at the translation time. If so, operation 1108 records that the contents of the work register Ri are now unknown. The query 1111 and the process 1112 are optional and are explained below in connection with further embodiments of the invention.

In Abfrage 1109 wird geprüft, ob es sich um einen basisregister-relativen Sprungbefehl handelt bei dem der Inhalt des Basisregisters gemäß dem aktuellen Stand der Buchführung bekannt ist (statischer Sprungbefehl). Falls ja, so wird in Vorgang 1110 der aktuelle Stand der Registerbuchführung mit dem Stand der Registerbuchführung am Sprungziel verglichen und die Registerbuchführung am Sprungziel ggf. aktualisiert. Falls in einer der beiden zu vergleichenden Buchführungen der Inhalt eines Arbeitsregisters unbekannt ist oder falls in den beiden Buchführungen verschiedene Inhalte für ein Arbeitsregister vermerkt sind, wird die Buchführung am Sprungziel dahingehend aktualisiert, dass der Inhalt des betroffenen Arbeitsregisters am Sprungziel als unbekannt geführt wird. Falls für das Sprungziel bereits eine Übersetzung erfolgt ist, so muss diese überprüft werden, ob sie auch mit der aktualisierten Buchführung verträglich ist. Diese Vorgehensweise ist in der Compiler- bzw. Optimierertechnik als "inkrementelle Datenflussanalyse" bekannt. In query 1109 it is checked whether it is a base register-relative jump instruction in which the content of the base register is known in accordance with the current state of accounting (static jump instruction). If so, the current status of the register bookkeeping is compared with the status of the register bookkeeping at the jump destination in operation 1110 and the register bookkeeping at the jump destination is updated if necessary. If the content of a working register is unknown in one of the two accounting records to be compared or if different contents for a working register are noted in the two accounting records, the bookkeeping at the jump destination is updated so that the content of the affected work register is kept unknown at the jump destination. If a translation has already been made for the jump target, it must be checked whether it is also compatible with the updated bookkeeping. This procedure is known in compiler or optimizer technology as "incremental data flow analysis".

In einer weiteren Ausprägung der Erfindung werden in Abfrage 1109 neben den basisregister-relativen Sprungbefehlen auch Registersprungbefehle, also Sprungbefehle, deren Zieladresse durch den Inhalt eines Registers spezifiziert ist, berücksichtigt, sofern der Inhalt des Sprungzielregisters gemäß dem aktuellen Stand der Buchführung bekannt ist. Normalerweise sind die Register, die ein Befehl verändert, direkt in einem Feld der Codierung des Befehls angegeben, so dass leicht statisch, d. h. zur Übersetzungszeit, ermittelt werden kann, welche Register durch den Befehl verändert werden, die Abfrage 1107 also leicht durchführbar ist. Manche Prozessorarchitekturen bieten jedoch auch Befehle zur indirekten Ausführung anderer Befehle an. So bietet die IBM Serie 390 einen Befehl EX Ri, Befehlsadresse an, der den Befehl, der an der spezifizierten Befehlsadresse steht, nach Veränderung mit dem Inhalt des spezifizierten Arbeitsregisters Ri ausführt. Damit ist i. a. nicht statisch nachvollziehbar, welcher Befehl tatsächlich ausgeführt wird und welche Arbeitsregister verändert werden. Jedoch wird der tatsächlich ausgeführte Befehl in der Regel keine Basisregister verändern. Deshalb wird in einer weiteren Ausprägung der Erfindung spekuliert, dass der Inhalt von Basisregistern nach Ausführung von EX Ri, Befehlsadresse identisch zum Inhalt vor der Ausführung ist. Analog wird bei einem Unterprogrammaufrufbefehl verfahren. In der Regel lässt nämlich ein Unterprogramm die Inhalte von Basisregisters unverändert oder sichert sie bei Eintritt in das Unterprogramm und restauriert sie wieder vor der Rückkehr zum Aufrufer. Deshalb wird in einer weiteren Ausprägung der Erfindung auch für Unterprogrammaufrufbefehle vorläufig vorgegeben, dass sie keine Basisregister verändern und die Rückkehr zum Befehl unmittelbar hinter dem Unterprogrammaufrufbefehl erfolgt. Diese vorkäufige Vorgabe kann auch auf die Register beschränkt werden, die gemäß den für den emulierten Prozessor aufgestellten üblichen Programmierkonventionen vom gerufenen Unterprogramm unverändert gelassen bzw. restauriert werden sollten. Diese beiden zuletzt erläuterten Ausprägungen der Erfindung werden durch die Abfrage 1111 und den Vorgang 1112 in Fig. 9 realisiert. Die Abfrage 1111 prüft, ob es sich um einen Befehl handelt, für den statisch zwar nicht nachvollziehbar ist, ob er Inhalte von Arbeitsregistern verändert, für den aber vorläufig vorgebbar ist, dass er Inhalte von Basisregistern unverändert lassen wird, also in den oben erläuterten Beispielen, ob es sich um den EX-Befehl oder um einen Unterprogrammaufrufbefehl handelt. In Vorgang 1112 wird dann vorläufig vorgegeben, dass die Inhalte von Arbeitsregistern unverändert geblieben sind. Dies bedeutet, dass für die Arbeitsregister, die als Basisregister in folgenden Sprungbefehlen genutzt werden, unmittelbar hinter der Übersetzung des betroffenen Befehls Prüfbefehle eingefügt werden, die prüfen, ob die Basisregister tatsächlich noch den vorläufig vorgegebenen Inhalt haben. In a further embodiment of the invention, in addition to the base register-relative jump commands, register jump commands, i.e. jump commands whose destination address is specified by the content of a register, are taken into account in query 1109 , provided the content of the jump destination register is known in accordance with the current state of accounting. Normally, the registers that change a command are specified directly in a field of the coding of the command, so that it can easily be determined statically, ie at translation time, which registers are changed by the command, that is to say query 1107 can be carried out easily. However, some processor architectures also offer instructions to execute other instructions indirectly. For example, the IBM 390 series offers an EX Ri, command address command, which executes the command which is at the specified command address after being changed with the content of the specified working register Ri. It is generally not statically understandable which command is actually executed and which working registers are changed. However, the command actually executed will generally not change any base registers. It is therefore speculated in a further embodiment of the invention that the content of base registers after execution of EX Ri, command address is identical to the content before execution. The same procedure is followed for a subroutine call instruction. As a rule, a subroutine leaves the contents of base registers unchanged or saves them when entering the subroutine and restores them before returning to the caller. Therefore, in a further embodiment of the invention, it is also provisionally specified for subroutine call instructions that they do not change any base registers and that the return to the instruction takes place immediately after the subroutine call instruction. This pre-available specification can also be limited to the registers which should be left unchanged or restored by the called subroutine in accordance with the usual programming conventions established for the emulated processor. These two last-explained versions of the invention are implemented by query 1111 and process 1112 in FIG. 9. Query 1111 checks whether the command is statically incomprehensible, whether it changes the contents of working registers, but for the time being it can be specified that it will leave contents of basic registers unchanged, i.e. in the examples explained above whether it is the EX instruction or a subroutine call instruction. In process 1112 it is then provisionally specified that the contents of work registers have remained unchanged. This means that for the working registers, which are used as base registers in the following jump instructions, test instructions are inserted immediately after the translation of the affected instruction, which check whether the base registers actually still have the provisionally specified content.

Die Erfindung beschränkt sich nicht auf die hier zur Erläuterung verwendeten Beispiele. Insbesondere kann die Erfindung auch bei anderen Architekturen und Befehlssätzen von emulierten und emulierenden Prozessoren angewandt werden. Ebenso ist die Erfindung weder beschränkt auf die hier zur Erläuterung gewählten Befehlssequenzen zur Übersetzung der Befehle des emulierten Prozessors noch auf die gewählten Befehlssequenzen zur Überprüfung vorläufiger Vorgaben. The invention is not limited to the here Explanation used examples. In particular, the Invention also in other architectures and instruction sets of emulated and emulating processors. Likewise, the invention is neither limited to that here Explanation of selected command sequences for translating the Commands of the emulated processor are still on the selected one Command sequences for checking preliminary specifications.

Claims (18)

1. Verfahren zur Verfolgung von Sprüngen bei der Emulation eines für einen ersten Prozessor, den emulierten Prozessor, erstellten Programms auf einem zweiten Prozessor, dem emulierenden Prozessor, wobei
im emulierten Prozessor Zieladressen in Sprungbefehlen relativ zum Inhalt eines Basisregisters spezifiziert werden,
während der Emulation vorläufig vorgebbar wird, dass der Inhalt dieser Basisregister bei Ausführung bzw. Emulation der Sprungbefehle immer den gleichen Inhalt haben
unter dieser Spekulation die Zieladressen von zu emulierenden Sprungbefehlen berechnet werden.
1. A method for tracking jumps in the emulation of a program created for a first processor, the emulated processor, on a second processor, the emulating processor, wherein
destination addresses are specified in jump instructions relative to the content of a base register in the emulated processor,
during the emulation it can be provisionally specified that the content of these base registers always have the same content when the jump instructions are executed or emulated
the target addresses of jump instructions to be emulated are calculated under this speculation.
2. Verfahren nach Anspruch 1, dadurch gekennzeichnet, dass zur Emulation Befehlsfolgen des emulierten Prozessors ab bestimmten Eingangsstellen in äquivalente Befehlsfolgen des emulierenden Prozessors übersetzt und dann ausgeführt werden, wobei bei der Übersetzung der Sprungbefehle des emulierten Prozessors die Zieladressen durch Spekulation über die Inhalte der Basisregister ermittelt werden und die zu emulierenden Befehlsfolgen ab den Zieladressen mit in die laufende Übersetzung einbezogen werden. 2. The method according to claim 1, characterized in that for emulation command sequences of the emulated processor certain entry points in equivalent command sequences of the emulating processor are translated and then executed where when translating the jump commands of the emulated Processor's destination addresses by speculating on the Contents of the basic register are determined and the to emulating command sequences from the target addresses into the ongoing translation. 3. Verfahren nach Anspruch 2, dadurch gekennzeichnet, dass auch die Zieladressen von Registersprungbefehlen verfolgt werden, sofern das Sprungzielregister gleichzeitig auch als Basisregister in anderen Sprungbefehlen genutzt wird. 3. The method according to claim 2, characterized in that the destination addresses of register jump commands are also tracked are provided that the jump destination register also as Base register is used in other jump instructions. 4. Verfahren nach einem der Ansprüche 2 oder 3, dadurch gekennzeichnet, dass bei der Übersetzung zusätzlich Befehle zur Überprüfung der Spekulation generiert werden. 4. The method according to any one of claims 2 or 3, characterized marked that when translating additional commands generated to check the speculation. 5. Verfahren nach Anspruch 4, dadurch gekennzeichnet, dass die Befehle zur Überprüfung der Spekulation unmittelbar vor den das betreffende Basisregister benutzenden Sprungbefehlen eingefügt werden. 5. The method according to claim 4, characterized in that the commands to check speculation immediately before the jump instructions using the relevant base register be inserted. 6. Verfahren nach Anspruch 4, dadurch gekennzeichnet, dass die Befehle zur Überprüfung der Spekulation an einer Menge von Stellen eingefügt werden, die alle das betreffende Basisregister mit noch unverändertem Inhalt benutzenden Sprungbefehle dominiert. 6. The method according to claim 4, characterized in that the commands to check speculation on a crowd of digits are inserted, all of which Use base register with unchanged content Jump commands dominate. 7. Verfahren nach Anspruch 4, dadurch gekennzeichnet, dass die Befehle zur Überprüfung der Spekulation an den Eingangsstellen der zu übersetzenden Befehlsfolgen generiert werden. 7. The method according to claim 4, characterized in that the commands to check the speculation to the Input points of the command sequences to be translated are generated become. 8. Verfahren nach Anspruch 7, dadurch gekennzeichnet, dass für alle Register, die direkt als Basisregister in dynamisch nachfolgenden Sprungbefehlen genutzt werden oder deren Inhalt in statisch nachvollziehbarer Weise Einfluss auf den Inhalt von in dynamisch nachfolgenden Sprungbefehlen genutzten Basisregistern hat, vorläufig vorgegeben wird, dass sie während der Programmausführung an der betreffenden Eingangsstelle immer den selben Inhalt haben. 8. The method according to claim 7, characterized in that for all registers that are used directly as base registers in dynamic subsequent jump commands are used or their content influence the content in a statically comprehensible manner of jump instructions used in dynamically following instructions Has basic registers, it is provisionally specified that it during the program execution on the concerned Entry point always have the same content. 9. Verfahren nach Anspruch 8, dadurch gekennzeichnet, dass der nachvollziehbare Einfluss durch Kopieren eines Registerinhalts in ein anderes Register, das dann als Basisregister genutzt wird, erfolgt. 9. The method according to claim 8, characterized in that the understandable influence by copying one Register contents in another register, which then as Base register is used. 10. Verfahren nach Anspruch 8, dadurch gekennzeichnet, dass der nachvollziehbare Einfluss durch Addition einer Konstanten auf ein Registerinhalt erfolgt. 10. The method according to claim 8, characterized in that the understandable influence by adding a constant on a register content. 11. Verfahren nach einem der Ansprüche 8 bis 10, dadurch gekennzeichnet, dass die Veränderung von Registerinhalten und deren Einfluss auf die Inhalte von in Sprungbefehlen genutzten Basisregistern hat, über Sprungbefehle hinweg mittels inkrementeller Datenflussanalyse verfolgt wird. 11. The method according to any one of claims 8 to 10, characterized characterized that the change of register contents and their influence on the content of in jump commands used base registers, over jump instructions is tracked using incremental data flow analysis. 12. Verfahren nach einem der Ansprüche 1 bis 11, dadurch gekennzeichnet, dass für Befehle, für die nicht vorhersehbar ist, welche Register sie bei Ausführung verändern werden, für die es aber wahrscheinlich ist, dass sie Basisregister unverändert lassen werden, vorläufig vorgegeben wird, dass die Arbeitsregister, die als Basisregister in nachfolgende Sprungbefehlen genutzt werden, nach Ausführung des Befehls den gleichen Inhalt haben, wie vor der Ausführung. 12. The method according to any one of claims 1 to 11, characterized characterized that for commands for which unpredictable is which registers they will change when executed for but it is likely that they are base registers are left unchanged, provisionally stipulates that the working registers that are used as base registers in subsequent Jump commands are used after the command has been executed have the same content as before execution. 13. Verfahren nach Anspruch 12, dadurch gekennzeichnet, dass bei einem Unterprogrammaufrufbefehl, einem Sprungbefehl, der üblicherweise für den Aufruf eines Unterprogramms verwendet wird, vorläufig vorgegeben wird, dass
nach Ausführung des Unterprogramms die Programmausführung unmittelbar hinter dem Unterprogrammaufrufbefehl fortgesetzt wird
und die Arbeitsregister, die als Basisregister in nachfolgende Sprungbefehlen genutzt werden, nach Ausführung des Unterprogramms den gleichen Inhalt haben, wie vor Aufruf des Unterprogramms.
13. The method according to claim 12, characterized in that in the case of a subroutine call instruction, a jump instruction which is usually used for calling a subroutine, it is predetermined that
after execution of the subroutine, the program execution is continued immediately after the subroutine call instruction
and the working registers, which are used as base registers in subsequent jump instructions, have the same content after execution of the subroutine as before the subroutine was called.
14. Verfahren nach Anspruch 13, dadurch gekennzeichnet, dass Befehle zur Überprüfung der Spekulation über die Registerinhalte unmittelbar hinter dem Unterprogrammaufrufbefehl eingefügt werden. 14. The method according to claim 13, characterized in that Commands to check speculation about the Register contents immediately behind the Subroutine call instruction are inserted. 15. Verfahren nach einem der Ansprüche 13 oder 14, dadurch gekennzeichnet, dass nur für solche Register, die gemäß den für den emulierten Prozessor üblichen Programmierkonventionen von Unterprogrammen nicht verändert werden sollten, vorläufig vorgegeben wird, dass sie nach Ausführung des Unterprogramms den gleichen Inhalt haben, wie vor Aufruf des Unterprogramms. 15. The method according to any one of claims 13 or 14, characterized marked that only for those registers, which according to the usual programming conventions for the emulated processor should not be changed by subroutines, provisionally it is specified that after execution of the subroutine have the same content as before the subroutine was called. 16. Verfahren nach Anspruch 12, dadurch gekennzeichnet, dass bei einem Ausführbefehl, einem Befehl, der indirekt einen anderen Befehl ausführt, vorläufig vorgegeben wird, dass
der indirekt auszuführende Befehl kein Sprungbefehl ist
und die Register, die als Basisregister in nachfolgende Sprungbefehlen genutzt werden, nach Ausführung des indirekt auszuführenden Befehls den gleichen Inhalt haben, wie vor Ausführung dieses Befehls.
16. The method according to claim 12, characterized in that in the case of an execution command, a command that indirectly executes another command, it is provisionally specified that
the instruction to be executed indirectly is not a branch instruction
and the registers which are used as base register in subsequent jump instructions have the same content after execution of the instruction to be executed indirectly as before the execution of this instruction.
17. Verfahren nach Anspruch 16, dadurch gekennzeichnet, dass Befehle zur Überprüfung der Spekulation über die Registerinhalte unmittelbar nach dem Ausführbefehl eingefügt werden. 17. The method according to claim 16, characterized in that Commands to check speculation about the Register contents inserted immediately after the execute command become. 18. Verfahren nach einem der Ansprüche 1 bis 17, dadurch gekennzeichnet, dass bei Erkennen einer Fehlspekulation bei mindestens einem aber nicht bei allen Registern, über deren Inhalt spekuliert wurde, eine erneute Übersetzung durchgeführt wird, wobei diesmal diejenigen Register, für die die Fehlspekulation erkannt wurde, von der Spekulation ausgenommen werden. 18. The method according to any one of claims 1 to 17, characterized characterized in that when a false speculation is detected at at least one but not in all registers Content was speculated, a new translation is carried out, this time those registers for which the wrong speculation was recognized by the speculation be exempted.
DE2001161505 2001-12-14 2001-12-14 Method for tracking jumps in the emulation of a processor, with jump commands made relative to the base register, thus improving the efficiency of development of new processor architectures Ceased DE10161505A1 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
DE2001161505 DE10161505A1 (en) 2001-12-14 2001-12-14 Method for tracking jumps in the emulation of a processor, with jump commands made relative to the base register, thus improving the efficiency of development of new processor architectures

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
DE2001161505 DE10161505A1 (en) 2001-12-14 2001-12-14 Method for tracking jumps in the emulation of a processor, with jump commands made relative to the base register, thus improving the efficiency of development of new processor architectures

Publications (1)

Publication Number Publication Date
DE10161505A1 true DE10161505A1 (en) 2003-07-03

Family

ID=7709228

Family Applications (1)

Application Number Title Priority Date Filing Date
DE2001161505 Ceased DE10161505A1 (en) 2001-12-14 2001-12-14 Method for tracking jumps in the emulation of a processor, with jump commands made relative to the base register, thus improving the efficiency of development of new processor architectures

Country Status (1)

Country Link
DE (1) DE10161505A1 (en)

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5870575A (en) * 1997-09-22 1999-02-09 International Business Machines Corporation Indirect unconditional branches in data processing system emulation mode

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5870575A (en) * 1997-09-22 1999-02-09 International Business Machines Corporation Indirect unconditional branches in data processing system emulation mode

Non-Patent Citations (8)

* Cited by examiner, † Cited by third party
Title
12.5.1995, VHDL *
14.3.1998, Pentium *
21.11.1997,(Internet: http://gd.tuwien.ac.at/study/foldoc/foldoc.cgi?query=emulation) VHDL (branch+prediction) Pentium) *
CALDER, B. et.al.: Quantifying Behavioral Diffe- rences Between C and C++ Programs (revised),18.01.1995, S. 1, 18 (Internet: http://citeseer.nj.nec. com/calder95quantifying.html) *
Dr. Dobb's Journal, May 2001 (Internet: http://www.ddj.com/search.htm?search=Video+Codec) *
Feb. 1985, branch prediction *
FOLDOC: emulation *
FOMITCHEV, M.: Video Codec in Fast Forward *

Similar Documents

Publication Publication Date Title
DE60006410T2 (en) METHOD AND SYSTEM FOR DISTRIBUTING OBJECT-ORIENTED COMPUTER PROGRAMS
DE69924857T2 (en) PROGRAM CODE CONVERSION
EP0502857B1 (en) Process for dynamically linking definable programme elements of an interactive data-processing system
DE69723286T2 (en) REAL TIME PROGRAMMING LANGUAGE ACCELERATOR
DE60226019T2 (en) METHOD AND SYSTEM FOR CONTROLLING EXECUTABLE FILES WITH DIVIDED LIBRARIES
DE69814174T2 (en) JAVA RUNTIME SYSTEM WITH CHANGED CONSTANT COLLECTION
WO1994014117A1 (en) Process for testing at least one class of an object-oriented program on a computer
DE69727177T2 (en) Emulation of asynchronous signals with a branching mechanism
WO2005098617A1 (en) Method for preventing data inconsistency between accesses of different functions of an application to a global variable in a data processing installation
DE202016007893U1 (en) Systems for removing PLT stubs from dynamically linked binaries
DE102004057490B4 (en) Device and method for processing a program code
DE69839113T2 (en) Direct vector emulation of an inherited command set
EP1010070B1 (en) Method for converting an object code into a programme code
WO1998001805A1 (en) Process for transferring programs with transferable and non-transferable program parts
DE102018127317B3 (en) METHOD AND DEVICES FOR COMPUTER-IMPLEMENTED GENERATION OF AN EXECUTABLE PROGRAM CODE AND FOR EXECUTING AN EXECUTABLE PROGRAM CODE
DE10161505A1 (en) Method for tracking jumps in the emulation of a processor, with jump commands made relative to the base register, thus improving the efficiency of development of new processor architectures
DE112010003774T5 (en) COMPATIBILITY AT OBJECT LEVEL AND CLASS SCALING USING SEMANTIC VALUES
DE102009041098A1 (en) A method of identifying a computer program section contained in a computer storage system
DE19617842A1 (en) Code transformation method
DE102010011583B4 (en) A method of translating commands with base register relative addressing on an emulation
DE102004056006B3 (en) Emulation system for source data processor with program containing source code and output block frequently outputting data signals in source code to target code blocks using data table
EP3935489A1 (en) Method for generating a representation of a program logic, decompiling device, recompiling system, and computer program product
DE10308867B4 (en) Method for addressing address spaces when emulating a program created for an emulated processor on an emulating processor
DE19637883B4 (en) Data processing system for executing large program systems
EP3759594A1 (en) Method for executing a computer program in a computer network, in particular in order to control a microscope

Legal Events

Date Code Title Description
ON Later submitted papers
OP8 Request for examination as to paragraph 44 patent law
8131 Rejection