DE69924857T2 - Programm-kode-umwandlung - Google Patents
Programm-kode-umwandlung Download PDFInfo
- Publication number
- DE69924857T2 DE69924857T2 DE69924857T DE69924857T DE69924857T2 DE 69924857 T2 DE69924857 T2 DE 69924857T2 DE 69924857 T DE69924857 T DE 69924857T DE 69924857 T DE69924857 T DE 69924857T DE 69924857 T2 DE69924857 T2 DE 69924857T2
- Authority
- DE
- Germany
- Prior art keywords
- expression
- register
- program code
- objects
- processor
- 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.)
- Expired - Lifetime
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/52—Binary to binary
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/441—Register allocation; Assignment of physical memory space to logical memory space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/47—Retargetable compilers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime code conversion or optimisation
Description
- Die vorliegende Erfindung bezieht sich auf ein Verfahren und auf ein System zum Umsetzen von Programmcode aus einem Format in ein anderes. Insbesondere bezieht sich die Erfindung auf ein Verfahren und auf ein System zur Schaffung einer intermediären Repräsentation eines Computerprogramms oder eines Basisblocks eines Programms (ein Basisblock eines Programms ist ein Block von Befehlen, der nur einen Eintrittspunkt bei einem ersten Befehl und nur einen Austrittspunkt bei einem letzten Befehl des Blocks besitzt). Zum Beispiel schafft die vorliegende Erfindung ein Verfahren und ein System zum Übersetzen eines Computerprogramms, das für einen Prozessor geschrieben wurde, so dass das Programm effizient auf einem anderen Prozessor laufen kann; wobei die Übersetzung eine intermediäre Repräsentation verwendet und in einer blockweisen Betriebsart durchgeführt wird.
- Eine intermediäre Repräsentation ist ein in der Computerindustrie umfassend verwendeter Begriff zur Bezugnahme auf Formen der abstrakten Computersprache, in denen ein Programm ausgedrückt werden kann, die aber nicht spezifisch für irgendeinen besonderen Prozessor sind und nicht dafür bestimmt sind, auf irgendeinem besonderen Prozessor ausgeführt zu werden. Eine intermediäre Repräsentation wird z. B. allgemein erzeugt, um eine Optimierung eines Programms zu ermöglichen. Zum Beispiel übersetzt ein Compiler ein Computerprogramm in einer höheren Programmiersprache in eine intermediäre Repräsentation, optimiert das Programm durch Anwenden verschiedener Optimierungstechniken auf die intermediäre Repräsentation und übersetzt daraufhin die optimierte intermediäre Repräsentation in ausführbaren Binärcode. Außerdem wird eine intermediäre Repräsentation verwendet, um zu ermöglichen, Programme in einer Form, die nicht spezifisch für irgendeinen Prozessor ist, über das Internet zu senden. Zum Beispiel hat Sun Microsystems hierfür eine Form einer intermediären Repräsentation entwickelt, die als Bytecode bezeichnet wird. Ein Bytecode kann auf irgendeinem Prozessor interpretiert werden, auf dem das allgemein bekannte Java-(Warenzeichen)-Laufzeitsystem verwendet wird.
- Außerdem wird eine intermediäre Repräsentation häufig von Emulationssystemen verwendet, die eine Binärübersetzung verwenden. Emulationssysteme dieser Art nehmen Software-Code, der für einen gegebenen Prozessortyp kompiliert worden ist, setzen ihn in eine intermediäre Repräsentation um, optimieren die intermediäre Repräsentation und setzen die intermediäre Repräsentation daraufhin in einen Code um, der auf einem anderen Prozessortyp laufen kann. Die Optimierung der Erzeugung einer intermediären Repräsentation ist eine bekannte Prozedur, die zur Minimierung der Menge an Code verwendet wird, der zur Ausführung eines emulierten Programms erforderlich ist. Für die Optimierung einer intermediären Repräsentation gibt es eine Vielzahl bekannter Verfahren.
- Ein Beispiel eines bekannten Emulationssystems, das zur Ausführung einer Binärübersetzung eine intermediäre Repräsentation verwendet, ist das von AT&T betriebene FlashPort-System. Ein Kunde liefert an AT&T ein zu übersetzendes Programm (wobei das Programm in der Weise kompiliert worden ist, dass es auf einem Prozessor eines ersten Typs läuft). Das Programm wird durch AT&T in eine intermediäre Repräsentation übersetzt und die intermediäre Repräsentation daraufhin über die Anwendung automatischer Optimierungsroutinen mit Hilfe von Technikern, die eine Eingabe liefern, wenn die Optimierungsroutinen versagen, optimiert. Daraufhin wird die optimierte intermediäre Übersetzung durch AT&T in Code übersetzt, der auf einem Prozessor des gewünschten Typs laufen kann. Dieser Typ der Binärübersetzung, in der ein gesamtes Programm übersetzt wird, bevor es ausgeführt wird, wird als eine "statische" Binärübersetzung bezeichnet. Die Übersetzungszeiten können irgendwo bis zu mehreren Monaten liegen.
- In einer alternativen Form der Emulation wird ein Programm im Code eines betreffenden Prozessors (d. h. eines ersten Prozessortyps, für den der Code geschrieben ist und der emuliert werden soll) über eine intermediäre Repräsentation in Basisblöcke in Code eines Zielprozessors (d. h. eines zweiten Prozessortyps, auf dem die Emulation ausgeführt wird) übersetzt.
- Afzal, T., u. a.: 'Motorola PowerPC Migration Tools-Emulation and Translation', Digest of Papers der Computer Society Computer Conference Compcon, USA, Los Alamitos, IEEE, Comp.SOC.Press, Bd. CONF. 41, 25.–28. Februar 1996, S. 145–150, ISBN: 0-8186-7414-8, beschreibt Emulations- und Übersetzungsverfahren zur Übertragung vorhandener Anwendungen auf eine Motorola-PowerPC-Architektur. Die in dieser Abhandlung beschriebenen Verfahren bilden den Oberbegriff des beigefügten Anspruchs 1.
- Eine Aufgabe der vorliegenden Erfindung ist die Schaffung eines alternativen Verfahrens zur Erzeugung einer intermediären Repräsentation von Programmcode. Bevorzugte Aufgaben sind die Schaffung eines solchen Verfahrens, das ein fach, kostengünstig und leicht zu implementieren ist.
- Gemäß einem ersten Aspekt der Erfindung wird ein Verfahren zum Erzeugen einer intermediären Repräsentation von Programmcode geschaffen, wobei das Verfahren die folgenden computerimplementierten Schritte aufweist: Erzeugen einer Mehrzahl von Registerobjekten, welche abstrakte Register repräsentieren; und Erzeugen von Ausdrucksobjekten, von denen jedes ein unterschiedliches Element des Programmcodes repräsentiert, wenn das Element in dem Programmcode auftaucht; dadurch gekennzeichnet, dass ein einzelnes Registerobjekt jeweils ein abstraktes Register repräsentiert; und dadurch dass jedes Ausdrucksobjekt durch ein Registerobjekt referenziert wird, zu dem es entweder direkt in Beziehung steht oder indirekt über Referenzen von anderen Ausdrucksobjekten.
- Vorzugsweise wird der Programmcode durch einen Befehlssatz eines Prozessors ausgedrückt. Vorzugsweise repräsentieren die Registerobjekte abstrakte Register, die den Registern des Prozessors entsprechen.
- Vorzugsweise wird jeder der Schritte sequentiell für Basisblöcke des Programmcodes ausgeführt, die jeweils nur einen effektiven Eintrittspunktbefehl und einen effektiven Austrittspunktbefehl aufweisen.
- Vorzugsweise geben zumindest einige der Ausdrucksobjekte in mehr als eines der Registerobjekte ein.
- Vorzugsweise werden die Ausdrucksobjekte nicht dupliziert.
- Vorzugsweise wird ein einzelnes Ausdrucksobjekt für ein gegebenes Element des Programmcodes erzeugt und jedes Ausdrucksobjekt durch alle der Registerobjekte referenziert, auf die es sich bezieht.
- Vorzugsweise wird eines der Registerobjekte oder eines der Ausdrucksobjekte eliminiert, wenn es redundant oder unnötig wird.
- Vorzugsweise wird ein redundantes oder unnötiges Registerobjekt oder Ausdrucksobjekt durch Führen eines laufenden Zählers von Referenzen identifiziert, die auf dieses Objekt gemacht werden, wenn ein Netzwerk von Registern und Ausdrucksobjekten konstruiert wird. Vorzugsweise wird für jedes Ausdrucksobjekt ein Zähler der Anzahl von Referenzen auf dieses Ausdrucksobjekt von anderen Ausdrucksobjekten oder von Registerobjekten geführt, wobei der Zähler dem bestimmten Ausdrucksobjekt zugeordnet ist, angepasst wird, und zwar jedes Mal dann, wenn eine Referenz auf das Ausdrucksobjekt gemacht oder entfernt wird. Vorzugsweise werden ein Ausdrucksobjekt und alle Referenzen von diesem Ausdrucksobjekt eliminiert, wenn der Zähler für das Ausdrucksobjekt Null wird.
- Vorzugsweise weist das Verfahren das Übersetzen des Programmcodes, der für die Ausführung durch einen Prozessor eines ersten Typs geschrieben ist, so dass der Programmcode von einem Prozessor eines zweiten Typs ausgeführt werden kann, und zwar unter Verwendung der erzeugten intermediären Repräsentation, auf.
- Vorzugsweise wird der Übersetzungsschritt dynamisch durchgeführt, während das Programm läuft.
- Vorzugsweise umfasst das Verfahren den Schritt des Optimierens des Programmcodes durch Optimieren der erzeugten intermediären Repräsentation. Vorzugsweise wird der Optimierungsschritt verwendet, um den Programmcode zu optimieren, der für die Ausführung durch einen Prozessor eines ersten Typs geschrieben wurde, so dass das Programm effizienter durch diesen Prozessor ausgeführt werden kann.
- Vorzugsweise sind die Registerobjekte und die Ausdrucksobjekte in einem verzweigten baumartigen Netzwerk organisiert, das alle Registerobjekte an dem untersten Basisknoten oder der Baumstamm-Ebene des Netzwerks aufweist, wobei kein Registerobjekt in ein anderes Registerobjekt eingibt bzw. einspeist. Vorzugsweise halten die Mehrzahl von Registerobjekten variable Werte, die von dem Programmcode erzeugt werden sollen; und repräsentieren die Mehrzahl von Ausdrucksobjekten fixe Werte und/oder Beziehungen zwischen den fixen Werten und den variablen Werten gemäß dem Programmcode.
- Außerdem bezieht sich die vorliegende Erfindung auf Verfahren, die die Erzeugung der wie hier dargelegten intermediären Repräsentation enthalten.
- Gemäß einem zweiten Aspekt der vorliegenden Erfindung wird ein Verfahren zum dynamischen Übersetzen eines ersten Computerprogrammcodes, der für die Kompilierung und/oder Übersetzung und das Laufen auf einer ersten programmierbaren Maschine geschrieben wurde, in einen zweiten Computerprogrammcode, um auf einer unterschiedlichen zweiten programmierbaren Maschine zu laufen, geschaffen, wobei das Verfahren aufweist: a) Erzeugen einer intermediären Repräsentation eines Blocks des ersten Computerprogrammcodes gemäß dem hier definierten Verfahren; b) Erzeugen eines Blocks des zweiten Computerprogrammcodes aus der intermediären Repräsentation; c) Ausführen des Blocks des zweiten Computerprogrammcodes auf der zweiten programmierbaren Maschine; und d) Wiederholen der Schritte a)–c) in Echtzeit für zumindest die Blöcke des ersten Computerprogrammcodes, die nötig sind, um eine laufende emulierte Ausführung des ersten Computerprogrammcodes auf der zweiten programmierbaren Maschine auszuführen.
- Gemäß einem dritten Aspekt der vorliegenden Erfindung wird ein Verfahren zum Übersetzen eines Computerprogramms, das für die Ausführung durch einen Prozessor eines ersten Typs geschrieben wurde, so dass das Programm durch einen Prozessor eines zweiten Typs ausgeführt werden kann, geschaffen, wobei das Verfahren den folgende Schritt einschließt: Erzeugen einer intermediären Repräsentation in Übereinstimmung mit dem hier definierten Verfahren. Vorzugsweise findet die Übersetzung dynamisch statt und wird ausgeführt, während das Programm läuft.
- Gemäß einem vierten Aspekt der vorliegenden Erfindung wird ein Verfahren zum Optimieren eines Computerprogramms geschaffen, wobei das Verfahren aufweist: Erzeugen einer intermediären Repräsentation in Übereinstimmung mit dem hier definierten Verfahren; und Optimieren der intermediären Repräsentation.
- Gemäß einem fünften Aspekt der vorliegenden Erfindung wird ein System zum Erzeugen einer intermediären Repräsentation von Programmcode geschaffen, dass umfasst: eine Einrichtung zum Erzeugen einer Mehrzahl von Registerobjekten, welche abstrakte Register repräsentieren; und eine Einrichtung zum Erzeugen von Ausdrucksobjekten, von denen jedes ein unterschiedliches Element des Programmcodes, so wie es im Programmcode auftaucht, repräsentiert; dadurch gekennzeichnet, dass ein einzelnes Registerobjekt jeweils ein abstraktes Register repräsentiert; und jedes Ausdrucksobjekt durch ein Registerobjekt referenziert wird, auf das es sich entweder direkt oder indirekt über Bezugnahmen von anderen Ausdrucksobjekten bezieht.
- Vorzugsweise weist das System einen ersten programmierbaren Prozessor; und ein Emulationssystem, das betreibbar ist, um Programmcode auszuführen, der für einen zweiten Prozessor auf dem ersten programmierbaren Prozessor geschrieben wurde, und zwar durch Erzeugung einer intermediären Repräsentation des Programmcodes, auf. Außerdem oder alternativ weist das System vorzugsweise einen ersten programmierbaren Computer; und ein Emulationssystem, das betreibbar ist, um Programmcode auszuführen, der für einen zweiten Computer auf dem ersten programmierbaren Computer geschrieben wird, und zwar durch Erzeugung einer intermediären Repräsentation des Programmcodes, auf.
- Gemäß einem sechsten Aspekt der vorliegenden Erfindung wird ein Programmspeichermedium geschaffen, das ein Emulationssystem für die Ausführung von für einen ersten Computer auf einem zweiten Computer geschriebenen Programmcode speichert, wobei das Emulationssystem, wenn es durch den zweiten Computer ausgeführt wird, betreibbar ist, um eine intermediäre Repräsentation des Programmcodes gemäß dem hier definierten Verfahren zu erzeugen.
- Gemäß einem siebenten Aspekt der vorliegenden Erfindung wird ein auf einem computerlesbaren Medium gespeichertes Emulationssystem geschaffen, wobei das System betreibbar ist, um durch ein Verfahren gemäß dem hier definierten Verfahren eine intermediäre Repräsentation von Programmcode zu erzeugen.
- Ein Element des Programmcodes ist in der bevorzugten Ausführungsform der vorliegenden Erfindung geeignet eine Operation oder eine Unteroperation eines jeweiligen Codebefehls. Jeder jeweilige Codebefehl kann eine Anzahl solcher Elemente umfassen, so dass eine Anzahl von Ausdrucksobjekten erzeugt werden kann, die einen einzigen Codebefehl repräsentieren.
- Beim Bilden einer intermediären Repräsentation ist es erwünscht, eine Repräsentation des Status eines jeweiligen Prozessors (z. B. seiner Register oder seines Speicherraums) aufzunehmen, der durch die intermediäre Repräsentation repräsentiert wird. In der vorliegenden Erfindung erfolgt dies auf besonders effiziente Weise durch Erzeugen abstrakter Register.
- Wenigstens in bevorzugten Ausführungsformen der vorliegenden Erfindung braucht lediglich ein einziges Registerobjekt erzeugt zu werden, um ein gegebe nes abstraktes Register zu repräsentieren (was vorzugsweise für alle abstrakten Register bei der Initialisierung erfolgt), wobei der Zustand jedes abstrakten Registers durch die Ausdrucksobjekte definiert wird, die durch das entsprechende Registerobjekt referenziert werden. Wo durch ein gegebenes Registerobjekt mehr als ein Ausdrucksobjekt referenziert wird, wird ein "Baum" von Ausdrucksobjekten mit dem Registerobjekt als sein "Knoten" erzeugt. Die durch jedes der Registerobjekte referenzierten Ausdrucksbäume bilden zusammen einen "Ausdruckswald".
- Es ist ein Vorteil der Erfindung, dass irgendein gegebenes Ausdrucksobjekt durch mehr als ein Register referenziert werden kann und folglich ein Ausdruck, der durch mehrere verschiedene Register verwendet wird, nicht für jedes dieser Register getrennt erzeugt und zugewiesen zu werden braucht, sondern einmal erzeugt und für jedes der Register referenziert werden kann. Mit anderen Worten, Ausdrucksbäume können durch Ausdrucksobjekte, die durch mehr als ein Registerobjekt referenziert werden, einander zugeordnet werden. Somit kann ein gegebenes Ausdrucksobjekt für eine Anzahl von Ausdrucksbäumen innerhalb des Ausdruckswalds gemeinsam sein.
- Dadurch, dass die Erfindung vermeidet, mehrere Kopien des gleichen Ausdrucks zu erzeugen, verringert sie die Zeit, die das Erzeugen der intermediären Repräsentation dauert, und verringert sie den von der intermediären Repräsentation belegten Speicherraum.
- Es ist ein weiterer Vorteil der vorliegenden Erfindung, dass Ausdrücke, die redundant werden, sehr effizient identifiziert werden können. Wenn einem Registerobjekt ein neuer Ausdruck zugewiesen wird, wird irgendein Ausdruck, der durch dieses Registerobjekt zuvor referenziert wurde, außer insofern er durch andere Registerobjekte referenziert wird, redundant. Diese mehreren Referenzen werden unter Verwendung der unten beschriebenen Referenzzählung erfasst.
- Irgendein gegebenes Ausdrucksobjekt kann Referenzen von sich auf andere Ausdrucksobjekte und Referenzen auf sich von anderen Ausdrucksobjekten oder von abstrakten Registern haben. Vorzugsweise wird ein Zählerwert der Anzahl der Referenzen geführt, die auf jedes Ausdrucksobjekt führen. Jedes Mal, wenn eine Referenz auf ein Ausdrucksobjekt (entweder von einem Register oder von einem anderen Ausdrucksobjekt) gemacht oder entfernt wird, wird der Zähler für dieses Ausdrucksobjekt angepasst. Ein Zähler von Null gibt für ein gegebenes Aus drucksobjekt an, dass es keine Referenzen gibt, die auf dieses Ausdrucksobjekt führen, und dass dieses Ausdrucksobjekt somit redundant ist.
- Wenn ein Zähler für ein gegebenes Ausdrucksobjekt Null ist, wird dieses Ausdrucksobjekt vorzugsweise aus der intermediären Repräsentation eliminiert.
- Wenn ein Ausdrucksobjekt eliminiert wird, führt die Löschung aller Referenzen, die von diesem Ausdrucksobjekt führen, zu jedem referenzierten Ausdrucksobjekt, dessen Referenzzähler dekrementiert ist. Wenn dieser dekrementierte Wert Null erreicht hat, kann das referenzierte Objekt seinerseits eliminiert werden, was veranlasst, dass die Referenzzähler des referenzierten Objekts ihrerseits dekrementiert werden.
- Somit ermöglicht die intermediäre Repräsentation der Erfindung, effizient redundanten Code aufzufinden und zu eliminieren. Redundanter Code entsteht in binär übersetzten Programmen häufig, wenn der Inhalt eines Registers definiert und nachfolgend neu definiert wird, ohne zunächst verwendet worden zu sein. Die bekannten vorhandenen intermediären Repräsentationen erfordern, dass ein Protokoll geführt wird, das angibt, wann der Inhalt eines gegebenen Registers definiert wird, und das angibt, wann der Inhalt dieses Registers verwendet wird. Diese Protokollführung ist ein ineffizientes Verfahren der Identifizierung von redundantem Code. In der vorliegenden Erfindung wird redundanter Code aus der Sequenz der Zuweisungen zu den Registerobjekten und aus den Verwendungen der Registerobjekte sofort sichtbar.
- Es wird nun lediglich beispielhaft eine spezifische Ausführungsform der vorliegenden Erfindung in Anwendung auf ein dynamisches Emulationssystem anhand der beigefügten Zeichnung beschrieben, in der:
-
1 bis5 schematische Darstellungen der Art und Weise sind, in der ein dynamisches Emulationssystem eine intermediäre Repräsentation eines Programms oder eines Basisblocks eines Programms erzeugt, wobei sie ebenfalls einen Ausdruckswald (Gruppe von Ausdrucksbäumen) zeigen. - Die im Folgenden beschriebene Ausführungsform der Erfindung ist ein System zur Emulation des Befehlsatzes eines Prozessors auf einem Prozessor eines anderen Typs. In der folgenden Beschreibung bezieht sich der Begriff betreffender Prozes sor auf einen Prozessor, der durch ein Emulationssystem zu emulieren ist, während sich der Begriff Zielprozessor auf einen Prozessor bezieht, auf dem das Emulationssystem läuft. Das System ist ein dynamisches Binärübersetzungssystem, das im Wesentlichen dadurch arbeitet, dass es Basisblöcke von Befehlen im Code des betreffenden Prozessors, während sie für die Ausführung benötigt werden, in Zielprozessorcode übersetzt. Das wie im Folgenden beschriebene Emulationssystem umfasst drei Hauptkomponenten, die als ein Front End, als ein Kern, und als ein Back End bezeichnet werden. Die Befehle des betreffenden Prozessors werden durch das Front End des Emulationssystems decodiert und in eine intermediäre Repräsentation umgesetzt. Der Kern des Emulationssystems analysiert und optimiert die intermediäre Repräsentation der Befehle des betreffenden Prozessors und das Back End setzt die intermediäre Repräsentation in Zielprozessorcode um, der auf dem Zielprozessor läuft.
- Das Front End des Systems ist spezifisch für den betreffenden Prozessor, der emuliert wird. Das Front End konfiguriert das Emulationssystem in Reaktion auf die Form des betreffenden Prozessors, wobei es z. B. die Anzahl und die Namen der Register des betreffenden Prozessors angibt, die von der Emulation benötigt werden, und für das Back End die virtuellen Speicherabbilder angibt, die benötigt werden.
- Die Befehle des betreffenden Prozessors werden in eine intermediäre Repräsentation in Basisblöcke umgesetzt, wobei jeder resultierende Block der intermediären Repräsentation (IR-Block) daraufhin für Emulations-, Caching- und Optimierungszwecke durch den Kern als eine Einheit behandelt wird.
- Der Kern optimiert die durch das Front End erzeugte intermediäre Repräsentation. Der Kern besitzt unabhängig von dem betreffenden Prozessor und von dem Zielprozessor, die mit dem Emulationssystem verbunden sind, eine Standardform. Allerdings werden einige Kernbetriebsmittel, insbesondere Registernummern und -benennungen, und das genaue Wesen der IR-Blöcke durch ein individuelles Front End in der Weise konfiguriert, dass sie den Anforderungen dieser spezifischen Architektur des betreffenden Prozessors genügen.
- Das Back End ist spezifisch für den Zielprozessor und wird durch den Kern aufgerufen, um die intermediäre Repräsentation in Zielprozessorbefehle zu übersetzen. Das Back End ist verantwortlich für das Zuordnen und für das Mana gement der Zielprozessorregister, für das Erzeugen geeigneter Speicherlade- und Speicherspeicherbefehle, um den betreffenden Prozessor richtig zu emulieren, für das Implementieren einer Aufrufsequenz, die ermöglicht, dass der Kern dynamische Routinen aufruft, und um zu ermöglichen, dass diese dynamischen Routinen soweit erforderlich Back-End- und Front-End-Routinen aufrufen.
- Der Betrieb des Emulationssystems wird nun ausführlicher beschrieben. Das System wird initialisiert, um geeignete Zuordnungen zwischen Front End, Kern und Back End zu erzeugen. Am Ende der Initialisierung wird ein Ausführungszyklus begonnen, wobei der Kern das Front End aufruft, um einen ersten Basisblock von Befehlen des betreffenden Prozessors zu decodieren. Das Front End arbeitet befehlsweise, wobei es jeden Befehl des Basisblocks des betreffenden Prozessors der Reihe nach decodiert und Kernroutinen aufruft, um für jede Unteroperation jedes Befehls eine intermediäre Repräsentation zu erzeugen. Wenn das Front End einen Befehl, der möglicherweise eine Änderung der Programmsequenz veranlassen könnte (z. B. einen Sprungbefehl, einen Aufrufbefehl oder einen Verzweigungsbefehl, gleich, ob bedingt oder unbedingt), decodiert, kehrt es zu dem Kern zurück, bevor es weitere Befehle des jeweiligen Prozessors decodiert (wobei es diesen Basisblock an Code abschließt).
- Wenn das Front End einen Basisblock von Befehlen des betreffenden Prozessors in die intermediäre Repräsentation übersetzt hat, optimiert der Kern die intermediäre Repräsentation und ruft daraufhin das Back End auf, um dynamisch eine Sequenz von Befehlen in dem Zielprozessorcode (in den Zielbefehlen) zu erzeugen, die die intermediäre Repräsentation des Basisblocks implementieren. Wenn diese Sequenz von Zielbefehlen erzeugt worden ist, wird sie sofort ausgeführt. Die Sequenz von Zielprozessorbefehlen wird zur nachfolgenden Wiederverwendung (falls sie nicht zuerst überschrieben wird) in einem Cache aufbewahrt.
- Wenn die Zielprozessorbefehle ausgeführt worden sind, wird ein Wert zurückgegeben, der eine Adresse angibt, die als nächste auszuführen ist. Mit anderen Worten, der Zielprozessorcode bewertet irgendeinen Verzweigungs-, Aufruf- oder Sprungbefehl, ob bedingt oder unbedingt, am Ende des Basisblocks und gibt seine Wirkung zurück. Dieser Prozess der Übersetzung und Ausführung von Basisblöcken wird fortgesetzt, bis ein Basisblock festgestellt wird, der bereits übersetzt worden ist.
- Wenn Zielcode, der den nächsten Basisblock repräsentiert, zuvor verwendet und in dem Cache gespeichert worden ist, ruft der Kern einfach diesen Zielcode auf. Wenn das Ende des Basisblocks erreicht ist, liefert der Zielcode wieder die Adresse des nächsten auszuführenden betreffenden Befehls, wobei der Zyklus fortgesetzt wird.
- Sowohl die intermediäre Repräsentation als auch der Zielprozessorcode sind Basisblöcken der jeweiligen Prozessorbefehle zugeordnet. Die intermediäre Repräsentation ist in der Weise zugeordnet, dass der Optimierer effiziente Emulationen von Gruppen häufig ausgeführter IR-Blöcke erzeugen kann, und der Zielcode ist in der Weise zugeordnet, dass die zweite und nachfolgende Ausführungen des gleichen Basisblocks den Zielcode direkt ausführen können, ohne sich den Organisationsaufwand des erneuten Decodierens der Befehle zuzuziehen.
- Das Front End fordert, dass zur Initialisierungszeit eine geforderte Anzahl abstrakter Register in dem Kern definiert werden. Diese abstrakten Register (als Ri bezeichnet) repräsentieren die physikalischen Register, die von den Befehlen des betreffenden Prozessors verwendet würden, falls sie auf einem betreffenden Prozessor laufen würden. Die abstrakten Register definieren den Zustand des betreffenden Prozessors, der emuliert wird, indem sie die erwartete Wirkung der Befehle auf die Register des betreffenden Prozessors repräsentieren.
- Die intermediäre Repräsentation repräsentiert das Programm des betreffenden Prozessors, indem sie den abstrakten Registern Ausdrucksobjekte zuweist. Ausdrucksobjekte sind eine Einrichtung, um die Wirkung z. B. einer einzelnen arithmetischen, logischen oder bedingten Operation in der intermediären Repräsentation zu repräsentieren. Da viele Befehle des betreffenden Prozessors eine Manipulation von Daten ausführen, erzeugen die meisten Befehle Ausdrucksobjekte, um ihre einzelnen Unteroperationen zu repräsentieren. Ausdrucksobjekte werden z. B. verwendet, um Add-Ooperationen, Bedingungseinstelloperationen, die bedingte Bedingungsauswertung in bedingten Verzweigungen sowie Speicherleseoperationen zu repräsentieren. Die abstrakten Register werden auf Ausdrucksobjekte referenziert, die auf andere Ausdrucksobjekte referenziert werden, so dass jeder Basisblock der Befehle des betreffenden Prozessors durch eine Anzahl quer referenzierter Ausdrucksobjekte repräsentiert wird, die als ein Ausdruckswald betrachtet werden können.
- Es werden eine Reihe veranschaulichter Beispiele verwendet, um zu vermitteln, wie das Emulationssystem Ausdrucksobjekte (die als Ausdrücke bezeichnet werden) und abstrakte Register verwendet, um eine intermediäre Repräsentation der Befehle des betreffenden Prozessors aufzubauen. Die
1 bis5 zeigen schrittweise, wie der folgende Pseudo-Assembler-Code im Kern unter Verwendung abstrakter Register repräsentiert wird: - In
1 ist die Repräsentation des MOVE-Befehls in Zeile1 gezeigt; es wird ein Langkonstantenausdruck #3 erzeugt und durch Erzeugen einer Bezugnahme, die von R0 auf #3 führt, dem abstrakten Register R0 zugewiesen. Der MOVE-Befehl in Zeile2 referenziert den Wert des abstrakten Registers R6, wobei ein Registerreferenzausdruck verwendet wird, um diesen zu repräsentieren, und R2 zugewiesen wird. Der Registerreferenzausdruck (RegRef-Ausdruck) in1 , @R6, repräsentiert den Wert des Registers R6, welcher es auch sein mag. Der RegRef-Ausdruck @R6 wird zu der momentanen Definition des Registers R6. Von diesem Punkt an gibt er als eine Definition den Ausdruck @R6 zurück, es sei denn, dass das Register R6 neu definiert wird. - Der Operand eines Befehls des betreffenden Prozessors kann entweder eine Konstante oder eine Referenz auf ein Register sein. Die Repräsentation eines konstanten Operanden ist wie in
1 gezeigt unkompliziert. Anders ist die Situation dagegen, wenn ein Operand auf ein Register Bezug nimmt. Die Repräsentation von Zeile3 des Pseudo-Assembler-Codes ist in2 gezeigt, aus der zu sehen ist, dass die ADD-Operation durch Referenz von R1 auf einen Add-Ausdruck dem abstrakten Register R1 zugewiesen wird. Der ADD-Befehl in Zeile3 nimmt auf die Register R0 und R2 Bezug, wobei der Ausdruck, der jedes dieser Register definiert, bereits in der intermediären Repräsentation gebaut worden ist. Wenn der Add-Ausdruck erzeugt wird, fragt er die abstrakten Register R0 und R2 ab, um ihre definierenden Ausdrücke zu liefern, wobei der Add-Ausdruck (der dem abstrakten Register R1 zugewiesen ist) eine Referenz auf diese vornimmt. In2 ist die intermediäre Repräsentation des ADD-Befehls gezeigt. Mit anderen Worten, der Inhalt des abstrakten Registers R1 ist ein Ausdruck, der die in den abstrakten Registern R0 und R2 gehaltenen Ausdrücke referenziert. Jeder Pfeil in den1 und2 repräsentiert eine Referenz, die entweder wie im Fall von R0 → #3 ein Register auf einen Ausdruck referenzieren kann oder wie im Fall von #3 ← + → @R6 einen Ausdruck auf einen anderen Ausdruck referenzieren kann. Der Ausdruck @R6 besitzt zwei Referenzen, eine vom Register R2 und die andere vom Add-Ausdruck. - Ein wie in Zeile
4 des obigen Codes enthaltener MUL-Befehl kann als ein typischer Datenflussbefehl betrachtet werden. Entweder durch Erzeugen neuer Unterausdrücke oder durch Referenzieren vorhandener Ausdrücke wird ein Ausdruck der obersten Ebene gebaut, wobei dieser Ausdruck der obersten Ebene als seine Definition einem Register zugewiesen wird. Die intermediäre Repräsentation des MUL-Befehls ist in3 gezeigt. Es wird ein Mul-Ausdruck erzeugt, der den in dem abstrakten Register R1 gehaltenen Ausdruck referenziert und einen Langkonstantenausdruck #5 referenziert, und dem abstrakten Register R5 zugewiesen. - In
4 ist der Und-Ausdruck aus Zeile5 des obigen Codes gezeigt. Dieser Ausdruck referenziert unter Verwendung eines RegRef-Ausdrucks auf die gleiche Weise wie oben in Bezug auf1 beschrieben ein Register, dessen Definition noch zu bauen ist (d. h. R3). - In den bisher gegebenen Beispielen ist angenommen worden, dass ein Register erstmals innerhalb eines besonderen Basisblocks definiert wird.
5 veranschaulicht, was geschieht, wenn ein Register, das bereits definiert worden ist, wie durch den MOVE-Befehl aus Zeile6 des obigen Codes neu definiert wird. Während in den2 bis4 ein Pfeil R1 auf einen Add-Ausdruck referenzierte, wird diese Referenz nun entfernt und ein neuer Referenzpfeil erzeugt, um R1 auf den Langkonstantenausdruck #5 zu referenzieren. - Ebenso wie der Add-Ausdruck mit R1 verbunden war, war er ebenfalls mit dem Mul-Ausdruck und mit dem Und-Ausdruck verbunden und existiert somit wie in
5 gezeigt weiter (während der Add-Ausdruck dagegen ohne Referenzen verbleiben würde, nachdem R1 neu definiert wurde, falls der Add-Ausdruck nur eine Referenz, diejenige vom Register R1, gehabt hätte; in diesem Fall wäre der Add-Ausdruck als 'tot' bekannt und redundant). Außerdem veranschaulicht5 die Wirkung der SUB-Operation aus Zeile7 des Pseudo-Assembler-Codes. - Die letzte Zeile, Zeile
8 , des als intermediäre Repräsentation zu repräsentierenden Pseudo-Assembler-Codes ist ein LOAD-Befehl. Ein Load-Ausdruck, der diesen Befehl repräsentiert, ist in5 gezeigt und durch das Register R0 referenziert. Der Load-Ausdruck kann als ein Typ eines unären Operators gedacht werden, der das Ergebnis der Anwendung des LOAD-Befehls auf seinen einzigen Ausdrucksoperanden repräsentiert. In5 repräsentiert LOAD → #3fd0 den Wert an einem Speicherplatz 3fd0, welches dieser Wert auch sein mag. Dadurch, dass der Load-Ausdruck, je nachdem, welche Daten im Speicher gespeichert sind, irgendeinen möglichen Wert repräsentieren kann, besitzt der Load-Ausdruck ähnliche Eigenschaften wie der RegRef-Ausdruck. - Es wird ein Referenzzähler geführt, der die Anzahl der Referenzen angibt, die auf jedes Ausdrucksobjekt führen (der Referenzzähler irgendeines gegebenen Ausdrucksobjekts enthält nicht Referenzen von diesem Ausdrucksobjekt). Der Referenzzähler für dieses Ausdrucksobjekt wird jedes Mal angepasst, wenn eine Referenz auf ein Ausdrucksobjekt (entweder von einem Register oder von einem anderen Ausdrucksobjekt) gemacht oder von diesem Ausdrucksobjekt entfernt wird. Ein Referenzzähler von Null gibt für ein gegebenes Ausdrucksobjekt an, dass es keine Referenzen gibt, die auf dieses Ausdrucksobjekt führen, und dass dieses Ausdrucksobjekt somit redundant ist: Wenn ein Referenzzähler für ein gegebenes Ausdrucksobjekt Null ist, wird dieses Ausdrucksobjekt aus der intermediären Repräsentation eliminiert.
- Wenn ein Ausdrucksobjekt eliminiert worden ist, werden irgendwelche Referenzen, die von diesem Ausdrucksobjekt führen, ebenfalls eliminiert und der Referenzzähler dieser Ausdrucksobjekte, auf die die Referenzen führen, dementsprechend angepasst. Der Prozess des Eliminierens von Ausdrucksobjekten mit einem Referenzzähler Null und des Eliminierens von Referenzen, die von einem solchen Objekt führen, wird den Ausdruckswald entlang verfolgt.
- Durch Eliminieren redundanter Zeilen von Code des betreffenden Prozessors kann eine weitere Optimierung der intermediären Generalisierung erreicht werden.
- Obgleich die obige Beschreibung auf die Emulation gerichtet ist, ist für den Fachmann auf dem Gebiet klar, dass die Erfindung ebenfalls in anderen Anwendungen, z. B. bei der Optimierung von Code während der Kompilierung, verwendet werden kann.
Claims (26)
- Verfahren zum Erzeugen einer intermediären Repräsentation von Programmcode, wobei das Verfahren die folgenden computerimplementierten Schritte aufweist: Erzeugen einer Mehrzahl von Registerobjekten (R0–R5), welche abstrakte Register repräsentieren; und Erzeugen von Ausdrucksobjekten (*, #5), von denen jedes ein unterschiedliches Element des Programmcodes repräsentiert, wenn das Element in dem Programmcode auftaucht; dadurch gekennzeichnet, daß: ein einzelnes Registerobjekt (R0, R5) ein jeweiliges abstraktes Register repräsentiert; und dadurch daß jedes Ausdrucksobjekt (*, #5) durch ein Registerobjekt (R0, R5) referenziert wird, zu dem es entweder direkt in Beziehung steht oder indirekt über Referenzen von anderen Ausdrucksobjekten (Stern, #5).
- Verfahren nach Anspruch 1, bei dem der Programmcode durch einen Befehlssatz eines Prozessors ausgedrückt wird.
- Verfahren nach Anspruch 2, bei dem die Registerobjekte (R0–R5) abstrakte Register repräsentieren, die den Registern des Prozessors entsprechen.
- Verfahren nach Anspruch 1, 2, oder 3, bei dem jeder der Schritte sequentiell für Basisblöcke des Programmcodes ausgeführt wird, die jeweils nur einen effektiven Eintrittspunktbefehl und einen effektiven Austrittspunktbefehl aufweisen.
- Verfahren nach einem der vorhergehenden Ansprüche, bei dem zumindest einige der Ausdrucksobjekte (*, #5) in mehr als eines der Registerobjekte (R0, R5) eingeben.
- Verfahren nach einem der vorhergehenden Ansprüche, bei dem die Ausdrucksobjekte (*, #5) nicht dupliziert werden.
- Verfahren nach einem der vorhergehenden Ansprüche, bei dem ein einzelnes Ausdrucksobjekt (*, #5) für ein gegebenes Element des Programmcodes erzeugt wird, und bei dem jedes Ausdrucksobjekt (*, #5) durch alle der Registerobjekte (R0–R5) referenziert wird, auf die es sich bezieht.
- Verfahren nach einem der vorhergehenden Ansprüche, bei dem eines der Registerobjekte (R0, R5) oder eines der Ausdrucksobjekte (*, #5) eliminiert wird, wenn es redundant oder unnötig wird.
- Verfahren nach Anspruch 8, bei dem ein redundantes oder unnötiges Registerobjekt (R0, R5) oder Ausdrucksobjekt (*, #5) durch Führen eines laufenden Zählers von Referenzen identifiziert wird, die auf dieses Objekt gemacht werden, wenn ein Netzwerk von Registern und Ausdrucksobjekten konstruiert wird.
- Verfahren nach Anspruch 9, bei dem für jedes Ausdrucksobjekt (*, #5) ein Zähler der Anzahl von Referenzen auf dieses Ausdrucksobjekt (*, #5) von anderen Ausdrucksobjekten (*, #5) oder von Registerobjekten (R0–R5) geführt wird, wobei der Zähler dem bestimmten Ausdrucksobjekt (*, #5) zugeordnet ist, angepaßt wird, und zwar jedesmal dann, wenn eine Referenz auf das Ausdrucksobjekt (*, #5) gemacht oder entfernt wird.
- Verfahren nach Anspruch 10, bei dem ein Ausdrucksobjekt (*, #5) und alle Referenzen von diesem Ausdrucksobjekt (*, #5) eliminiert werden, wenn der Zähler für das Ausdrucksobjekt (*, #5) Null wird.
- Verfahren nach einem der vorhergehenden Ansprüche, welches aufweist: Übersetzen des Programmcodes, der für die Ausführung durch einen Prozessor eines ersten Typs geschrieben ist, so daß der Programmcode von einem Prozessor eines zweiten Typs ausgeführt werden kann, und zwar unter Verwendung der erzeugten intermediären Representation.
- Verfahren nach Anspruch 12, wobei der Übersetzungsschritt dynamisch durchgeführt wird, während das Programm läuft.
- Verfahren nach einem der vorhergehenden Ansprüche, wobei die Registerobjekte (R0–R5) und die Ausdrucksobjekte (*, #5) in einem verzweigten baumartigen Netzwerk organisiert sind, das alle Registerobjekte (R0–R5) an dem untersten Basisknoten oder der Baumstamm-Ebene des Netzwerks aufweist, wobei kein Registerobjekt in ein anderes Registerobjekt eingibt bzw. einspeist.
- Verfahren nach einem der vorhergehenden Ansprüche, bei dem die Mehrzahl von Registerobjekten (R0–R5) variable Werte halten, die von dem Programmcode erzeugt werden sollen; und die Mehrzahl von Ausdrucksobjekten (*, #5) feste Werte und/oder Beziehungen zwischen den festen Werten und den variablen Werten gemäß dem Programmcode repräsentieren.
- Verfahren zum Übersetzen eines Computerprogramms, das für die Ausführung durch einen Prozessor des ersten Typs geschrieben wurde, so daß das Programm durch einen Prozessor eines zweiten Typs ausgeführt werden kann, wobei das Verfahren folgende Schritte einschließt: Erzeugen einer intermediären Repräsentation in Übereinstimmung mit dem Verfahren gemäß einem der Ansprüche 1 bis 11.
- Verfahren nach Anspruch 16, wobei die Übersetzung dynamisch stattfindet und ausgeführt wird, während das Programm läuft.
- Verfahren nach Anspruch 16 oder 17, wobei das Verfahren dynamisch ersten Computerprogrammcode, der für die Kompilierung und/oder Übersetzung und das Laufen auf einer ersten programmierbaren Maschine geschrieben wurde, in einen zweiten Computerprogrammcode übersetzt, um auf einer unterschiedlichen zweiten programmierbaren Maschine zu laufen, wobei das Verfahren aufweist: a) Erzeugen der intermediären Repräsentation für einen Block des ersten Computerprogrammcodes; b) Erzeugen eines Blocks des zweiten Computerprogrammcodes aus der intermediären Repräsentation; c) Ausführen des Blocks des zweiten Computerprogrammcodes auf der zweiten programmierbaren Maschine; und d) Wiederholen der Schritte a)–c) in Echtzeit für zumindest die Blöcke des ersten Computerprogrammcodes, die nötig sind, um eine laufende emulierte Ausführung des ersten Computerprogrammcodes auf der zweiten programmierbaren Maschine auszuführen.
- Verfahren zum Optimieren eines Computerprogramms, wobei das Verfahren aufweist: Erzeugen einer intermediären Repräsentation in Übereinstimmung mit dem Verfahren gemäß einem der Ansprüche 1 bis 11; und Optimieren der intermediären Repräsentation.
- Verfahren nach Anspruch 19, wobei das Verfahren verwendet wird, um ein Computerprogramm zu optimieren, das für die Ausführung durch einen Prozessor eines ersten Typs geschrieben wurde, so daß das Programm effizienter durch diesen Prozessor ausgeführt werden kann.
- System zum Erzeugen einer intermediären Repräsentation von Programmcode, welches aufweist: eine Einrichtung zum Erzeugen einer Mehrzahl von Registerobjekten (R0–R5), welche abstrakte Register repräsentieren; und eine Einrichtung zum Erzeugen von Ausdrucksobjekten (Stern, #5), von denen jedes ein unterschiedliches Element des Programmcodes, so wie es im Programmcode auftaucht, repräsentiert; dadurch gekennzeichnet, daß ein einzelnes Registerobjekt (R0, R5) jeweils ein abstraktes Register repräsentiert; und jedes Ausdrucksobjekt (*, #5) durch ein Registerobjekt (R0, R5) referenziert wird, auf das es sich entweder direkt oder indirekt über Bezugnahmen von anderen Ausdrucksobjekten (*, #5) bezieht.
- System nach Anspruch 21, welches aufweist: einen ersten programmierbaren Prozessor; und wobei das System von Anspruch 21 zusammen verwendet wird mit einem Emulationssystem, das betreibbar ist, um Programmcode auszuführen, der für einen zweiten Prozessor auf dem ersten programmierbaren Prozessor geschrieben wurde, und zwar durch Erzeugung einer intermediären Repräsentation des Programmcodes.
- System nach Anspruch 21, welches aufweist: einen ersten programmierbaren Computer; und wobei das System von Anspruch 21 zusammen verwendet wird mit einem Emulationssystem, das betreibbar ist, um Programmcode auszuführen, der für einen zweiten Computer auf dem ersten programmierbaren Computer geschrieben wird, und zwar durch Erzeugung einer intermediären Repräsentation des Programmcodes.
- System nach einem der Ansprüche 21 bis 23, bei dem: die Registerobjekte (R0–R5) und die Ausdrucksobjekte (*, #5) in einem verzweigten baumartigen Netzwerk lokalisiert sind, wobei alle Registerobjekte (R0–R5) an dem untersten Basisknoten oder Baumstamm-Pegel des Netzwerks liegen, wobei kein Registerobjekt in ein anderes Registerobjekt einspeist.
- System nach einem der Ansprüche 21 bis 24, bei dem: die Mehrzahl von Registerobjekten (R0–R5) variable Werte halten, die von dem Programmcode erzeugt werden sollen; und die Vielzahl von Ausdrucksobjekten (*, #5) fixe Werte und/oder Beziehungen zwischen den fixen Werten und den variablen Werten gemäß dem Programmcode repräsentieren.
- Programmspeichermedium, welches Befehle speichert, die zur Ausführung all der Schritte gemäß einem der Verfahren nach Anspruch 1 bis 15 dienen.
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GBGB9822075.9A GB9822075D0 (en) | 1998-10-10 | 1998-10-10 | Program code conversion |
GB9822075 | 1998-10-10 | ||
US11595299P | 1999-01-14 | 1999-01-14 | |
US115952P | 1999-01-14 | ||
PCT/GB1999/003168 WO2000022521A1 (en) | 1998-10-10 | 1999-10-11 | Program code conversion |
Publications (2)
Publication Number | Publication Date |
---|---|
DE69924857D1 DE69924857D1 (de) | 2005-05-25 |
DE69924857T2 true DE69924857T2 (de) | 2006-03-02 |
Family
ID=26314485
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE69924857T Expired - Lifetime DE69924857T2 (de) | 1998-10-10 | 1999-10-11 | Programm-kode-umwandlung |
DE69942011T Expired - Lifetime DE69942011D1 (de) | 1998-10-10 | 1999-10-11 | Programmkodekonvertierung mit verringerter Übersetzung |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE69942011T Expired - Lifetime DE69942011D1 (de) | 1998-10-10 | 1999-10-11 | Programmkodekonvertierung mit verringerter Übersetzung |
Country Status (8)
Country | Link |
---|---|
US (11) | US7426722B2 (de) |
EP (3) | EP1385090B1 (de) |
JP (5) | JP4573189B2 (de) |
AT (2) | ATE457492T1 (de) |
AU (1) | AU6211899A (de) |
DE (2) | DE69924857T2 (de) |
ES (1) | ES2340370T3 (de) |
WO (1) | WO2000022521A1 (de) |
Families Citing this family (95)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
ATE457492T1 (de) * | 1998-10-10 | 2010-02-15 | Ibm | Programmkodekonvertierung mit verringerter übersetzung |
US7058932B1 (en) * | 1999-04-19 | 2006-06-06 | Unisys Corporation | System, computer program product, and methods for emulation of computer programs |
US7353163B2 (en) * | 1999-04-27 | 2008-04-01 | Transitive Limited | Exception handling method and apparatus for use in program code conversion |
US6802056B1 (en) * | 1999-06-30 | 2004-10-05 | Microsoft Corporation | Translation and transformation of heterogeneous programs |
GB0309056D0 (en) * | 2003-04-22 | 2003-05-28 | Transitive Technologies Ltd | Block translation optimizations for program code conversion |
GB0315165D0 (en) * | 2003-05-02 | 2003-08-06 | Transitive Ltd | Improved architecture for generating intermediate representations for program code conversion |
GB2411990B (en) | 2003-05-02 | 2005-11-09 | Transitive Ltd | Improved architecture for generating intermediate representations for program code conversion |
US20070186076A1 (en) * | 2003-06-18 | 2007-08-09 | Jones Anthony M | Data pipeline transport system |
EP1636725B1 (de) | 2003-06-18 | 2018-05-16 | Imagination Technologies Limited | Register für einen integrierten schaltkreis und methode dafür |
US7617490B2 (en) * | 2003-09-10 | 2009-11-10 | Intel Corporation | Methods and apparatus for dynamic best fit compilation of mixed mode instructions |
US20050102488A1 (en) * | 2003-11-07 | 2005-05-12 | Bullis George A. | Firmware description language for accessing firmware registers |
US7770034B2 (en) * | 2003-12-16 | 2010-08-03 | Intel Corporation | Performance monitoring based dynamic voltage and frequency scaling |
US8694802B2 (en) * | 2004-04-30 | 2014-04-08 | Apple Inc. | System and method for creating tamper-resistant code |
US7464375B2 (en) * | 2004-06-24 | 2008-12-09 | International Business Machines Corporation | Method for flattening hierarchically structured flows |
JP4846226B2 (ja) * | 2004-10-26 | 2011-12-28 | 株式会社日立ソリューションズ | 情報処理装置、情報処理方法、およびプログラム |
US7861234B1 (en) * | 2005-02-23 | 2010-12-28 | Oracle America, Inc. | System and method for binary translation to improve parameter passing |
WO2006095155A1 (en) | 2005-03-11 | 2006-09-14 | Transitive Limited | Execution control during program code conversion |
GB2424092A (en) * | 2005-03-11 | 2006-09-13 | Transitive Ltd | Switching between code translation and execution using a trampoline |
GB2424727B (en) | 2005-03-30 | 2007-08-01 | Transitive Ltd | Preparing instruction groups for a processor having a multiple issue ports |
GB2425372B (en) | 2005-04-20 | 2007-06-13 | Transitive Ltd | Method and apparatus for precise handling of exceptions during program code conversion |
US7805708B2 (en) * | 2005-05-13 | 2010-09-28 | Texas Instruments Incorporated | Automatic tool to eliminate conflict cache misses |
KR100725393B1 (ko) * | 2005-05-19 | 2007-06-07 | 삼성전자주식회사 | 자바 가상 머신에서 바이트 코드의 수행 시간을 줄이는시스템 및 방법 |
GB2426840A (en) | 2005-06-04 | 2006-12-06 | Transitive Ltd | Method of executing program code where a portion of the target code calls a native code portion which then calls a second target code portion. |
WO2006131695A1 (en) | 2005-06-04 | 2006-12-14 | Transitive Limited | Method and apparatus for combined execution of native code and target code during program code conversion |
GB2427045B (en) | 2005-06-06 | 2007-11-21 | Transitive Ltd | Method and apparatus for converting program code with access coordination for a shared resource |
US7757289B2 (en) * | 2005-12-12 | 2010-07-13 | Finjan, Inc. | System and method for inspecting dynamically generated executable code |
GB0525597D0 (en) * | 2005-12-16 | 2006-01-25 | Isis Innovation | Emulation system |
US9830174B2 (en) * | 2005-12-22 | 2017-11-28 | Synopsys, Inc. | Dynamic host code generation from architecture description for fast simulation |
US7813909B2 (en) * | 2006-05-03 | 2010-10-12 | Sony Computer Entertainment Inc. | Register mapping in emulation of a target system on a host system |
US7770050B2 (en) * | 2006-05-03 | 2010-08-03 | Sony Computer Entertainment Inc. | Method and apparatus for resolving clock management issues in emulation involving both interpreted and translated code |
US7792666B2 (en) * | 2006-05-03 | 2010-09-07 | Sony Computer Entertainment Inc. | Translation block invalidation prehints in emulation of a target system on a host system |
GB2435531A (en) * | 2006-02-27 | 2007-08-29 | Sharp Kk | Control Flow Protection Mechanism |
US8751946B2 (en) * | 2006-04-05 | 2014-06-10 | International Business Machines Corporation | Enhanced display of properties for a program object |
US7716653B2 (en) * | 2006-04-06 | 2010-05-11 | International Business Machines Corporation | Configurable importers and resource writers for converting data into another format |
US8812556B2 (en) * | 2006-04-06 | 2014-08-19 | International Business Machines Corporation | Storing modification data for recreating modifications |
EP2013680B1 (de) * | 2006-05-03 | 2018-08-08 | Sony Interactive Entertainment Inc. | Verfahren und vorrichtung zur lösung von taktverwaltungsproblemen bei emulierungen mit interpretiertem und übersetztem code |
JP4778359B2 (ja) * | 2006-05-17 | 2011-09-21 | エヌイーシーコンピュータテクノ株式会社 | エミュレーション方法及びコンピュータシステム |
US8146066B2 (en) | 2006-06-20 | 2012-03-27 | Google Inc. | Systems and methods for caching compute kernels for an application running on a parallel-processing computer system |
US8261270B2 (en) * | 2006-06-20 | 2012-09-04 | Google Inc. | Systems and methods for generating reference results using a parallel-processing computer system |
US8375368B2 (en) * | 2006-06-20 | 2013-02-12 | Google Inc. | Systems and methods for profiling an application running on a parallel-processing computer system |
US8108844B2 (en) | 2006-06-20 | 2012-01-31 | Google Inc. | Systems and methods for dynamically choosing a processing element for a compute kernel |
US20070294675A1 (en) | 2006-06-20 | 2007-12-20 | Transitive Limited | Method and apparatus for handling exceptions during binding to native code |
US8136104B2 (en) | 2006-06-20 | 2012-03-13 | Google Inc. | Systems and methods for determining compute kernels for an application in a parallel-processing computer system |
US8381202B2 (en) * | 2006-06-20 | 2013-02-19 | Google Inc. | Runtime system for executing an application in a parallel-processing computer system |
US8443348B2 (en) | 2006-06-20 | 2013-05-14 | Google Inc. | Application program interface of a parallel-processing computer system that supports multiple programming languages |
US8136102B2 (en) | 2006-06-20 | 2012-03-13 | Google Inc. | Systems and methods for compiling an application for a parallel-processing computer system |
US8024708B2 (en) | 2006-06-20 | 2011-09-20 | Google Inc. | Systems and methods for debugging an application running on a parallel-processing computer system |
US7814486B2 (en) * | 2006-06-20 | 2010-10-12 | Google Inc. | Multi-thread runtime system |
GB2442497B (en) | 2006-10-02 | 2010-03-31 | Transitive Ltd | Method and apparatus for administering a process filesystem with respect to program code conversion |
GB2442495B (en) | 2006-10-02 | 2009-04-01 | Transitive Ltd | Method and apparatus for handling dynamically linked function cells with respect to program code conversion |
GB2442566B (en) | 2006-10-02 | 2009-02-11 | Transitive Ltd | Computer system and method of adapting a computer system to support a register window architecture |
JP5042315B2 (ja) * | 2006-10-19 | 2012-10-03 | チェックマークス リミテッド | ソースコード内のセキュリティ脆弱性の検出 |
GB0623276D0 (en) * | 2006-11-22 | 2007-01-03 | Transitive Ltd | Memory consistency protection in a multiprocessor computing system |
US8413125B2 (en) | 2007-01-26 | 2013-04-02 | Oracle International Corporation | Asynchronous dynamic compilation based on multi-session profiling to produce shared native code |
US8341609B2 (en) * | 2007-01-26 | 2012-12-25 | Oracle International Corporation | Code generation in the presence of paged memory |
US8601452B2 (en) * | 2007-03-02 | 2013-12-03 | Oracle International Corporation | Compiler for JAVA and .NET |
GB2447968B (en) | 2007-03-30 | 2010-07-07 | Transitive Ltd | Improvements in and relating to floating point operations |
US8245202B2 (en) * | 2007-04-18 | 2012-08-14 | Sony Computer Entertainment Inc. | Processor emulation using speculative forward translation |
GB2448523B (en) | 2007-04-19 | 2009-06-17 | Transitive Ltd | Apparatus and method for handling exception signals in a computing system |
US20090122067A1 (en) * | 2007-11-13 | 2009-05-14 | Microsoft Corporation | Open fonts including human-readable fonts for compilation |
US8060356B2 (en) | 2007-12-19 | 2011-11-15 | Sony Computer Entertainment Inc. | Processor emulation using fragment level translation |
US7991915B2 (en) * | 2008-05-05 | 2011-08-02 | Sentilla Corporation | Software platform for radio network |
GB0813833D0 (en) | 2008-07-29 | 2008-09-03 | Transitive Ltd | Apparatus and method for handling page protection faults in a computing system |
US8346531B2 (en) * | 2008-11-05 | 2013-01-01 | Oracle America, Inc. | Handling mutex locks in a dynamic binary translation across heterogeneous computer systems |
EP2216695B1 (de) * | 2009-02-09 | 2013-03-27 | Siemens Aktiengesellschaft | Verfahren zum Betrieb eines Automatisierungssystems, korrespondierendes Computerprogramm und System oder Gerät, das nach dem Verfahren arbeitet |
US8276128B2 (en) * | 2009-07-14 | 2012-09-25 | Unisys Corporation | Systems, methods, and computer programs for dynamic binary translation in a master control program interpreter |
US8024374B2 (en) * | 2009-07-24 | 2011-09-20 | Oracle International Corporation | Computer object conversion using an intermediate object |
KR101247259B1 (ko) * | 2009-12-17 | 2013-04-01 | 한국전자통신연구원 | 가상화 장치 및 그 처리 방법 |
JP5844809B2 (ja) | 2010-08-24 | 2016-01-20 | チェックマークス リミテッド | プログラミングルール違反に対するソースコードマイニング |
JP5614348B2 (ja) * | 2011-03-18 | 2014-10-29 | 富士通株式会社 | 命令処理方法、命令処理装置、及び命令処理プログラム |
US20130024674A1 (en) | 2011-07-20 | 2013-01-24 | International Business Machines Corporation | Return address optimisation for a dynamic code translator |
US8819649B2 (en) * | 2011-09-09 | 2014-08-26 | Microsoft Corporation | Profile guided just-in-time (JIT) compiler and byte code generation |
WO2013048468A1 (en) * | 2011-09-30 | 2013-04-04 | Intel Corporation | Instruction and logic to perform dynamic binary translation |
US8600727B2 (en) * | 2011-10-11 | 2013-12-03 | Unisys Corporation | Streamlined execution of emulated code using block-based translation mode |
TW201339861A (zh) | 2012-03-30 | 2013-10-01 | Ibm | 提供較小目標編碼空間之碼轉換的方法、電腦裝置與程式產品 |
US9557974B2 (en) | 2012-07-10 | 2017-01-31 | Oracle International Corporation | System and method for supporting compatibility checking for lambda expression |
US8752021B2 (en) * | 2012-11-08 | 2014-06-10 | Concurix Corporation | Input vector analysis for memoization estimation |
US9262416B2 (en) | 2012-11-08 | 2016-02-16 | Microsoft Technology Licensing, Llc | Purity analysis using white list/black list analysis |
RU2514142C1 (ru) * | 2012-12-25 | 2014-04-27 | Закрытое акционерное общество "Лаборатория Касперского" | Способ повышения эффективности работы аппаратного ускорения эмуляции приложений |
US8990789B2 (en) | 2013-04-18 | 2015-03-24 | Facebook, Inc. | Optimizing intermediate representation of script code by eliminating redundant reference count operations |
US9152400B2 (en) | 2013-04-18 | 2015-10-06 | Facebook, Inc. | Eliminating redundant reference count operations in intermediate representation of script code |
KR101462347B1 (ko) * | 2013-07-08 | 2014-12-04 | 충북대학교 산학협력단 | 가상 머신 바이너리 변환 방법 |
CN105518622B (zh) * | 2013-09-26 | 2019-08-27 | 英特尔公司 | 验证动态二进制转换器中转换的来宾代码的方法和设备 |
US20160187862A1 (en) * | 2014-12-29 | 2016-06-30 | Sling Media Pvt Ltd | Systems and methods for home automation via a media device |
US10191745B2 (en) * | 2017-03-31 | 2019-01-29 | Intel Corporation | Optimized call-return and binary translation |
US11087002B2 (en) | 2017-05-10 | 2021-08-10 | Checkmarx Ltd. | Using the same query language for static and dynamic application security testing tools |
US10998937B2 (en) | 2019-04-30 | 2021-05-04 | Bank Of America Corporation | Embedded tag for resource distribution |
US11234235B2 (en) | 2019-04-30 | 2022-01-25 | Bank Of America Corporation | Resource distribution hub generation on a mobile device |
US11196737B2 (en) | 2019-04-30 | 2021-12-07 | Bank Of America Corporation | System for secondary authentication via contactless distribution of dynamic resources |
US11074055B2 (en) * | 2019-06-14 | 2021-07-27 | International Business Machines Corporation | Identification of components used in software binaries through approximate concrete execution |
WO2021225901A1 (en) * | 2020-05-04 | 2021-11-11 | Lingua Robotica, Inc. | Techniques for converting natural speech to programming code |
EP3945441A1 (de) | 2020-07-28 | 2022-02-02 | Checkmarx Ltd. | Erkennung von nutzbaren pfaden in anwendungssoftware, die bibliotheken von dritten verwendet |
KR102457152B1 (ko) * | 2021-06-16 | 2022-10-20 | 주식회사 모레 | 프로그램의 중간표현에 대한 최적화 적용 가능성을 판단하는 방법 및 시스템 |
US11900087B1 (en) * | 2022-03-23 | 2024-02-13 | Amazon Technologies, Inc. | Application binary replatforming as a service |
WO2023248424A1 (ja) * | 2022-06-23 | 2023-12-28 | 日本電気株式会社 | 演算装置、演算方法、および、記録媒体 |
Family Cites Families (55)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US549121A (en) * | 1895-11-05 | Deflector for blast-stackers | ||
US467290A (en) * | 1892-01-19 | Paint-can | ||
US4667290A (en) * | 1984-09-10 | 1987-05-19 | 501 Philon, Inc. | Compilers using a universal intermediate language |
JPS63245529A (ja) | 1987-03-31 | 1988-10-12 | Toshiba Corp | レジスタ退避復元装置 |
JP2958386B2 (ja) | 1988-09-30 | 1999-10-06 | 富士ゼロックス株式会社 | 計算機システム |
JPH0695309B2 (ja) | 1988-12-02 | 1994-11-24 | 日本電気株式会社 | 中間言語テキストの再利用方式 |
JP2834171B2 (ja) | 1989-02-06 | 1998-12-09 | 株式会社日立製作所 | コンパイル方法 |
JPH0630063B2 (ja) * | 1989-02-17 | 1994-04-20 | 株式会社東芝 | マイクロプロセッサ |
JPH02236638A (ja) * | 1989-03-10 | 1990-09-19 | Hitachi Ltd | レジスタ割付け管理方式 |
US5119465A (en) * | 1989-06-19 | 1992-06-02 | Digital Equipment Corporation | System for selectively converting plurality of source data structures through corresponding source intermediate structures, and target intermediate structures into selected target structure |
US5274820A (en) * | 1989-08-14 | 1993-12-28 | International Business Machines Corporation | Method and system for eliminating operation codes from intermediate prolog instructions |
JPH03229327A (ja) * | 1990-02-05 | 1991-10-11 | Mitsubishi Electric Corp | 計算機プログラム実行方式 |
US5210837A (en) * | 1990-06-15 | 1993-05-11 | Digital Equipment Corporation | Methods and apparatus for transforming machine language program control into high-level language constructs by manipulating graphical program representations |
US5659753A (en) * | 1991-02-27 | 1997-08-19 | Digital Equipment Corporation | Interface for symbol table construction in a multilanguage optimizing compiler |
IL100990A (en) * | 1991-02-27 | 1995-10-31 | Digital Equipment Corp | Multilingual optimization compiler that uses Gladi in the production of a multi-pass cipher |
JPH04316133A (ja) * | 1991-04-15 | 1992-11-06 | Nec Corp | プログラムのインタプリタ処理方式 |
JP3602857B2 (ja) * | 1991-04-23 | 2004-12-15 | 株式会社日立製作所 | 多機種対応型情報処理システム、および、方法 |
JPH0553821A (ja) * | 1991-06-17 | 1993-03-05 | Fujitsu Ltd | コンパイル処理方式 |
US5339428A (en) * | 1991-09-04 | 1994-08-16 | Digital Equipment Corporation | Compiler allocating a register to a data item used between a use and store of another data item previously allocated to the register |
US5448737A (en) * | 1992-03-17 | 1995-09-05 | International Business Machines Corporation | System and method for optimizing computer code using a compact data flow representation |
JP3450382B2 (ja) * | 1992-09-24 | 2003-09-22 | 株式会社東芝 | 画像処理装置 |
US5491821A (en) * | 1993-02-24 | 1996-02-13 | International Business Machines Corporation | Method and system for incremental processing of computer objects |
US5471633A (en) * | 1993-09-30 | 1995-11-28 | Intel Corporation | Idiom recognizer within a register alias table |
JP3276479B2 (ja) * | 1993-10-05 | 2002-04-22 | 富士通株式会社 | コンパイル方式 |
US5787285A (en) * | 1995-08-15 | 1998-07-28 | International Business Machines Corporation | Apparatus and method for optimizing applications for multiple operational environments or modes |
JPH09171467A (ja) * | 1995-12-21 | 1997-06-30 | Nec Corp | エミュレーション装置及びその方法 |
US5850554A (en) * | 1995-12-29 | 1998-12-15 | Intel Corporation | Compiler tool set for efficiently generating and easily managing multiple program versions of different types |
FR2743646B1 (fr) * | 1996-01-12 | 1998-03-06 | Sgs Thomson Microelectronics | Coprocesseur d'arithmetique modulaire comportant un circuit de division entiere |
FR2743907B1 (fr) * | 1996-01-18 | 1998-02-27 | Sgs Thomson Microelectronics | Procede de production d'un parametre de correction d'erreur associe a la mise en oeuvre d'operation modulaire selon la methode de montgomery |
US5930509A (en) * | 1996-01-29 | 1999-07-27 | Digital Equipment Corporation | Method and apparatus for performing binary translation |
US6226789B1 (en) * | 1996-01-29 | 2001-05-01 | Compaq Computer Corporation | Method and apparatus for data flow analysis |
US5768593A (en) * | 1996-03-22 | 1998-06-16 | Connectix Corporation | Dynamic cross-compilation system and method |
US5901317A (en) | 1996-03-25 | 1999-05-04 | Sun Microsystems, Inc. | Method and system for register allocation using multiple interference graphs |
JPH09265400A (ja) * | 1996-03-28 | 1997-10-07 | Hitachi Ltd | コンパイル最適化方式 |
US5805895A (en) * | 1996-06-09 | 1998-09-08 | Motorola, Inc. | Method and apparatus for code translation optimization |
US5901316A (en) * | 1996-07-01 | 1999-05-04 | Sun Microsystems, Inc. | Float register spill cache method, system, and computer program product |
US5832205A (en) * | 1996-08-20 | 1998-11-03 | Transmeta Corporation | Memory controller for a microprocessor for detecting a failure of speculation on the physical nature of a component being addressed |
US6199152B1 (en) * | 1996-08-22 | 2001-03-06 | Transmeta Corporation | Translated memory protection apparatus for an advanced microprocessor |
US5872950A (en) * | 1997-03-31 | 1999-02-16 | International Business Machines Corporation | Method and apparatus for managing register renaming including a wraparound array and an indication of rename entry ages |
US5784588A (en) * | 1997-06-20 | 1998-07-21 | Sun Microsystems, Inc. | Dependency checking apparatus employing a scoreboard for a pair of register sets having different precisions |
CA2283776C (en) | 1997-06-25 | 2003-11-11 | Transmeta Corporation | Combining hardware and software to provide an improved microprocessor |
US6072953A (en) * | 1997-09-30 | 2000-06-06 | International Business Machines Corporation | Apparatus and method for dynamically modifying class files during loading for execution |
US6631514B1 (en) * | 1998-01-06 | 2003-10-07 | Hewlett-Packard Development, L.P. | Emulation system that uses dynamic binary translation and permits the safe speculation of trapping operations |
FR2775369B1 (fr) * | 1998-02-26 | 2001-08-03 | Sgs Thomson Microelectronics | Procede de mise en oeuvre d'une multiplication modulaire specifique relative a la methode de montgomery |
US6820266B1 (en) * | 1998-02-27 | 2004-11-16 | Oracle International Corporation | Application code conversion architecture |
US6075942A (en) * | 1998-05-04 | 2000-06-13 | Sun Microsystems, Inc. | Encoding machine-specific optimization in generic byte code by using local variables as pseudo-registers |
US6427234B1 (en) * | 1998-06-11 | 2002-07-30 | University Of Washington | System and method for performing selective dynamic compilation using run-time information |
KR20010072477A (ko) * | 1998-08-13 | 2001-07-31 | 썬 마이크로시스템즈, 인코포레이티드 | 가상 머신 환경에서 네이티브 코드를 변환하고 실행하는방법 및 장치 |
ATE457492T1 (de) * | 1998-10-10 | 2010-02-15 | Ibm | Programmkodekonvertierung mit verringerter übersetzung |
US20020147969A1 (en) * | 1998-10-21 | 2002-10-10 | Richard A. Lethin | Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method |
US7353163B2 (en) * | 1999-04-27 | 2008-04-01 | Transitive Limited | Exception handling method and apparatus for use in program code conversion |
US7143401B2 (en) * | 2000-02-17 | 2006-11-28 | Elbrus International | Single-chip multiprocessor with cycle-precise program scheduling of parallel execution |
US7536682B2 (en) * | 2003-04-22 | 2009-05-19 | International Business Machines Corporation | Method and apparatus for performing interpreter optimizations during program code conversion |
US7543284B2 (en) * | 2003-04-22 | 2009-06-02 | Transitive Limited | Partial dead code elimination optimizations for program code conversion |
US7200841B2 (en) * | 2003-04-22 | 2007-04-03 | Transitive Limited | Method and apparatus for performing lazy byteswapping optimizations during program code conversion |
-
1999
- 1999-10-11 AT AT03020509T patent/ATE457492T1/de not_active IP Right Cessation
- 1999-10-11 WO PCT/GB1999/003168 patent/WO2000022521A1/en active IP Right Grant
- 1999-10-11 JP JP2000576360A patent/JP4573189B2/ja not_active Expired - Fee Related
- 1999-10-11 DE DE69924857T patent/DE69924857T2/de not_active Expired - Lifetime
- 1999-10-11 AU AU62118/99A patent/AU6211899A/en not_active Abandoned
- 1999-10-11 EP EP03020510A patent/EP1385090B1/de not_active Expired - Lifetime
- 1999-10-11 EP EP03020509A patent/EP1380946B1/de not_active Expired - Lifetime
- 1999-10-11 DE DE69942011T patent/DE69942011D1/de not_active Expired - Lifetime
- 1999-10-11 AT AT99949129T patent/ATE293808T1/de not_active IP Right Cessation
- 1999-10-11 EP EP99949129A patent/EP1119807B1/de not_active Expired - Lifetime
- 1999-10-11 ES ES03020509T patent/ES2340370T3/es not_active Expired - Lifetime
-
2001
- 2001-04-06 US US09/828,049 patent/US7426722B2/en not_active Expired - Fee Related
- 2001-04-06 US US09/827,974 patent/US7203933B2/en not_active Expired - Lifetime
- 2001-04-06 US US09/827,971 patent/US7409680B2/en not_active Expired - Fee Related
-
2002
- 2002-06-06 US US10/165,029 patent/US7421686B2/en not_active Expired - Fee Related
- 2002-06-06 US US10/164,772 patent/US7328431B2/en not_active Expired - Fee Related
- 2002-06-06 US US10/165,378 patent/US7346900B2/en not_active Expired - Fee Related
- 2002-06-06 US US10/164,789 patent/US7203934B2/en not_active Expired - Lifetime
- 2002-06-06 US US10/165,457 patent/US7210133B2/en not_active Expired - Lifetime
- 2002-06-06 US US10/165,012 patent/US7356810B2/en not_active Expired - Fee Related
-
2007
- 2007-03-27 US US11/728,957 patent/US8006237B2/en not_active Expired - Fee Related
- 2007-03-27 US US11/728,723 patent/US8037461B2/en not_active Expired - Fee Related
-
2010
- 2010-04-15 JP JP2010094369A patent/JP4709933B2/ja not_active Expired - Lifetime
- 2010-04-15 JP JP2010094371A patent/JP4640684B2/ja not_active Expired - Lifetime
- 2010-04-15 JP JP2010094372A patent/JP4640685B2/ja not_active Expired - Lifetime
- 2010-04-15 JP JP2010094370A patent/JP4640683B2/ja not_active Expired - Lifetime
Also Published As
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE69924857T2 (de) | Programm-kode-umwandlung | |
DE69909945T2 (de) | Verfahren und Anordnung zur Korrelation von Profildaten dynamisch erzeugt durch ein optimiertes ausführbares Programm mit Quellcodeanweisungen | |
EP0689694B1 (de) | Verfahren zur maschinellen erzeugung von nebenläufig bearbeitbaren befehlsgruppen aus einem programm für superskalare mikroprozessoren | |
DE69533148T2 (de) | Verfahren und Gerät zur Erzeugung und Verwendung kurzer Operationsidentifizierer in objektorientierten Systemen | |
DE69918334T2 (de) | Erzeugung von kompilierten programmen für interpretative laufzeitumgebungen | |
DE69832932T2 (de) | Programmkonvertiergerät für konstantenrekonstruierenden VLIW Prozessor | |
DE19928980A1 (de) | Codeerzeugung für einen Bytecode-Compiler | |
CH633643A5 (de) | Verfahren zur blockierungsfreien verzahnten simultanverarbeitung mehrerer aufgaben mittels mehrerer programme in einer datenverarbeitungsanlage. | |
DE69905776T2 (de) | Sprachenverarbeitungsverfahren mit geringem Aufwand und Speicherbedarf bei der Profildatensammlung | |
DE19945992A1 (de) | Dynamisch optimierender Objektcode-Übersetzer zur Architekturemulation und dynamisches optimierendes Objektcode-Übersetzungsverfahren | |
DE112013001735T5 (de) | Optimieren des Verbindens von Anweisungen | |
DE69933323T2 (de) | Kompiler | |
DE69712965T9 (de) | Verfahren, System und Rechnerprogrammprodukt zur Registerzuweisung unter Verwendung mehrerer Interferenzgraphen | |
EP0838054A1 (de) | Verfahren und steuereinrichtung für eine graphische steuerung von abläufen in einem netzwerkmanagementsystem | |
DE60225464T2 (de) | Robotersystem und verfahren und software für das robotersystem | |
DE102009041098A1 (de) | Verfahren zur Kennzeichnung eines in einem Computerspeichersystem enthaltenden Computerprogrammabschnitts | |
WO2000054188A2 (de) | Verfahren zur automatischen wiedergewinnung von engineeringdaten aus anlagen | |
EP0662226B1 (de) | Verfahren zur bearbeitung eines anwenderprogramms auf einem parallelrechnersystem | |
DE19617842A1 (de) | Verfahren zur Codetransformation | |
EP2757466B1 (de) | Computerimplementiertes Verfahren zum Generieren von Computerprogrammcode | |
DE102018104752A1 (de) | Verfahren zum Ausführen und Übersetzen eines Computerprogrammes in einem Rechnerverbund, insbesondere zum Steuern eines Mikroskops | |
DE19637883B4 (de) | Datenverarbeitungsanlage zur Ausführung großer Programmsysteme | |
EP4055473B1 (de) | Verfahren zum aktualisieren eines steuerprogramms eines automatisierungssystems mit datenmigration eines programmzustands des steuerprogramms | |
DE10026387B4 (de) | Verfahren zur Ausführungszeitoptimierung für Umsetzungen von zustands- bzw. ablauforientierten Modellen, wie Petrinetze oder Automaten | |
DE102008044808B4 (de) | Verfahren zur Generierung von Programmcode in einem Betriebssystemspeicher und einem Applikationsspeicher eines Datenträgers |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
8364 | No opposition during term of opposition | ||
8327 | Change in the person/name/address of the patent owner |
Owner name: INTERNATIONAL BUSINESS MACHINES CORP., ARMONK,, US |
|
8328 | Change in the person/name/address of the agent |
Representative=s name: DUSCHER, R., DIPL.-PHYS. DR.RER.NAT., PAT.-ANW., 7 |